• This is a read only backup of the old Emudevs forum. If you want to have anything removed, please message me on Discord: KittyKaev

[C++][Release] Beastmaster Script

Seraphim

Noble Member
Hello, EmuDevs!

This is my first real script that I will be releasing to the public. This was actually made for a server I am part of, but I took out a few key parts of it.

I did have a buddy of mine find a list of the pet ID's and such. So credits to Serifaz and wherever he got the ID's from.

Script Link:
http://pastebin.com/x2e6fS2t

Script:
Code:
/*
<--------------------------------------------------------------------------->
 - Developer: Kolin 'Valtorei'
 - Complete: 100%
 - ScriptName: 'Beastmaster Gossip'
 - Developed: 07/15/2014
 - Update: 09/15/2014
 <--------------------------------------------------------------------------->
 */
 
#include "ScriptPCH.h"
#include "ScriptMgr.h"
#include <cstring>
#include "Player.h"
#include "Creature.h"
#include "Pet.h"
#include "Formulas.h"

class Beastmaster_Trainer : public CreatureScript
{
	public:
		Beastmaster_Trainer() : CreatureScript("Beastmaster_Trainer") {}
		
		void CreatePet(Player *player, Creature *m_creature, uint32 entry)
			{
				if (player->getClass() != CLASS_HUNTER)
					{
						m_creature->Whisper("I only train Hunters in the way of the beast.",  LANG_UNIVERSAL, player);
						return;
					}
				
				if (player->GetPet())
					{
						m_creature->Whisper("You must leave your current pet in order to gain a new one.",  LANG_UNIVERSAL, player);
						player->PlayerTalkClass->SendCloseGossip();
						return;
					}
					
				Creature *creatureTarget = m_creature->SummonCreature(entry, player->GetPositionX(), player->GetPositionY()+2, player->GetPositionZ(), player->GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 500);
				
				if (!creatureTarget)
					return;
					
				Pet* pet = player->CreateTamedPetFrom(creatureTarget, 0);
				if (!pet)
					return;
					
				creatureTarget->setDeathState(JUST_DIED);
				creatureTarget->RemoveCorpse();
				creatureTarget->SetHealth(0);
				
				pet->SetPower(POWER_HAPPINESS, 1048000);
				
				pet->SetUInt64Value(UNIT_FIELD_CREATEDBY, player->GetGUID());
				pet->SetUInt64Value(UNIT_FIELD_FACTIONTEMPLATE, player->getFaction());
				
				pet->SetUInt32Value(UNIT_FIELD_LEVEL, player->getLevel() - 1);
				pet->GetMap()->AddToMap(pet->ToCreature());
				
				pet->SetUInt32Value(UNIT_FIELD_LEVEL, player->getLevel());
				
				pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
				if (!pet->InitStatsForLevel(player->getLevel()))
					TC_LOG_INFO("misc", "Falure: No Init Stats for entry %u", entry);
					
				pet->UpdateAllStats();
				
				player->SetMinion(pet, true);
				
				pet->SavePetToDB(PET_SAVE_AS_CURRENT);
				pet->InitTalentForLevel();
				player->PetSpellInitialize();
				
				player->PlayerTalkClass->SendCloseGossip();
				m_creature->Whisper("You have learned a way of the beast, congratulations.",  LANG_UNIVERSAL, player);
			}
			
			bool OnGossipHello(Player *player, Creature *m_creature)
			{
				if (player->getClass() != CLASS_HUNTER)
				{
					m_creature->Whisper("I can only train Hunters in the way of the beast.",  LANG_UNIVERSAL, player);
					return true;
				}
				
				player->ADD_GOSSIP_ITEM(1, "Obtain a New Pet", GOSSIP_SENDER_MAIN, 30);
				if (player->CanTameExoticPets())
				{
					player->ADD_GOSSIP_ITEM(2, "Obtain a New Exotic Pet", GOSSIP_SENDER_MAIN, 50);
				}
				player->ADD_GOSSIP_ITEM(5, "Nevermind!", GOSSIP_SENDER_MAIN, 150);
				
					player->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
					return true;
			}
			
			bool OnGossipSelect(Player *player, Creature * m_creature, uint32 sender, uint32 action)
			{
					player->PlayerTalkClass->ClearMenus();
					
					switch (action)
					{
					
						case 100:
							player->ADD_GOSSIP_ITEM(1, "Obtain a New Pet", GOSSIP_SENDER_MAIN, 30);
							if (player->CanTameExoticPets())
							{
								player->ADD_GOSSIP_ITEM(2, "Obtain a New Exotic Pet", GOSSIP_SENDER_MAIN, 50);
							}
							player->ADD_GOSSIP_ITEM(5, "Nevermind!", GOSSIP_SENDER_MAIN, 150);
							break;
					
						case 150:
							player->CLOSE_GOSSIP_MENU();
							break;
							
						case 30:
							player->ADD_GOSSIP_ITEM(6, "Bat", GOSSIP_SENDER_MAIN, 18);
							player->ADD_GOSSIP_ITEM(6, "Bear", GOSSIP_SENDER_MAIN, 1);
							player->ADD_GOSSIP_ITEM(6, "Boar", GOSSIP_SENDER_MAIN, 2);
							player->ADD_GOSSIP_ITEM(6, "Cat", GOSSIP_SENDER_MAIN, 4);
							player->ADD_GOSSIP_ITEM(6, "Carrion Bird", GOSSIP_SENDER_MAIN, 5);
							player->ADD_GOSSIP_ITEM(6, "Crab", GOSSIP_SENDER_MAIN, 6);
							player->ADD_GOSSIP_ITEM(6, "Crocolisk", GOSSIP_SENDER_MAIN, 7);
							player->ADD_GOSSIP_ITEM(6, "Dragonhawk", GOSSIP_SENDER_MAIN, 17);
							player->ADD_GOSSIP_ITEM(6, "Gorilla", GOSSIP_SENDER_MAIN, 8);
							player->ADD_GOSSIP_ITEM(6, "Hound", GOSSIP_SENDER_MAIN, 9);
							player->ADD_GOSSIP_ITEM(6, "Hyena", GOSSIP_SENDER_MAIN, 10);
							player->ADD_GOSSIP_ITEM(6, "Moth", GOSSIP_SENDER_MAIN, 11);
							player->ADD_GOSSIP_ITEM(6, "Owl", GOSSIP_SENDER_MAIN, 12);
							player->ADD_GOSSIP_ITEM(4, "Next Page ->", GOSSIP_SENDER_MAIN, 31);
							player->ADD_GOSSIP_ITEM(4, "<- Main Menu", GOSSIP_SENDER_MAIN, 100);
							player->ADD_GOSSIP_ITEM(5, "Nevermind!", GOSSIP_SENDER_MAIN, 150);
							player->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
							break;
							
						case 31:
							player->ADD_GOSSIP_ITEM(6, "Raptor", GOSSIP_SENDER_MAIN, 20);
							player->ADD_GOSSIP_ITEM(6, "Ravager", GOSSIP_SENDER_MAIN, 19);
							player->ADD_GOSSIP_ITEM(6, "Strider", GOSSIP_SENDER_MAIN, 13);
							player->ADD_GOSSIP_ITEM(6, "Scorpid", GOSSIP_SENDER_MAIN, 414);
							player->ADD_GOSSIP_ITEM(6, "Spider", GOSSIP_SENDER_MAIN, 16);
							player->ADD_GOSSIP_ITEM(6, "Serpent", GOSSIP_SENDER_MAIN, 21);  
							player->ADD_GOSSIP_ITEM(6, "Turtle", GOSSIP_SENDER_MAIN, 15);
							player->ADD_GOSSIP_ITEM(6, "Wasp", GOSSIP_SENDER_MAIN, 93);
							player->ADD_GOSSIP_ITEM(4, "<- Previous Page", GOSSIP_SENDER_MAIN, 30);
							player->ADD_GOSSIP_ITEM(4, "<- Main Menu", GOSSIP_SENDER_MAIN, 100);
							player->ADD_GOSSIP_ITEM(5, "Nevermind!", GOSSIP_SENDER_MAIN, 150);
							player->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
							break;
							
						case 50:
							player->ADD_GOSSIP_ITEM(6, "Chimaera", GOSSIP_SENDER_MAIN, 51);
							player->ADD_GOSSIP_ITEM(6, "Core Hound", GOSSIP_SENDER_MAIN, 52);
							player->ADD_GOSSIP_ITEM(6, "Devilsaur", GOSSIP_SENDER_MAIN, 53);
							player->ADD_GOSSIP_ITEM(6, "Rhino", GOSSIP_SENDER_MAIN, 54);
							player->ADD_GOSSIP_ITEM(6, "Silithid", GOSSIP_SENDER_MAIN, 55);
							player->ADD_GOSSIP_ITEM(6, "Worm", GOSSIP_SENDER_MAIN, 56);  
							player->ADD_GOSSIP_ITEM(6, "Loque'nahak", GOSSIP_SENDER_MAIN, 57);
							player->ADD_GOSSIP_ITEM(6, "Skoll", GOSSIP_SENDER_MAIN, 58);
							player->ADD_GOSSIP_ITEM(6, "Gondri.", GOSSIP_SENDER_MAIN, 59);
							player->ADD_GOSSIP_ITEM(4, "<- Main Menu", GOSSIP_SENDER_MAIN, 100);
							player->ADD_GOSSIP_ITEM(5, "Nevermind!", GOSSIP_SENDER_MAIN, 150);
							player->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
							break;
						
						// Credits to Serifaz who helped me with these ID's.
						case 51: // Chimera
							CreatePet(player, m_creature, 21879);
							break;
								
						case 52: // Core hound
							CreatePet(player, m_creature, 21108);
							break;
								
						case 53: // Devilsaur
							CreatePet(player, m_creature, 20931);
							break;
							
						case 54: // Rhino
							CreatePet(player, m_creature, 30445);
							break;
							
						case 55: // Silithid
							CreatePet(player, m_creature, 5460);
							break;
							
						case 56: // Worm
							CreatePet(player, m_creature, 30148);
							break;
							
						case 57: // Loque'nahak
							CreatePet(player, m_creature, 32517);
							break;
							
						case 58: // Skoll
							CreatePet(player, m_creature, 35189);
							break;
							
						case 59: // Gondria
							CreatePet(player, m_creature, 33776);
							break;
							
						case 16: // Spider
							CreatePet(player, m_creature, 2349);
							break;
							
						case 17: // Dragonhawk
							CreatePet(player, m_creature, 27946);
							break;
							
						case 18: // Bat
							CreatePet(player, m_creature, 28233);
							break;
								
						case 19: // Ravager
							CreatePet(player, m_creature, 17199);
							break;
								
						case 20: // Raptor
							CreatePet(player, m_creature, 14821);
							break;
								
						case 21: // Serpent
							CreatePet(player, m_creature, 28358);
							break;
								
						case 1: // Bear
							CreatePet(player, m_creature, 29319);
							break;
								
						case 2: // Boar
							CreatePet(player, m_creature, 29996);
							break;
								
						case 93: // Bug
							CreatePet(player, m_creature, 28085);
							break;
								
						case 4: // Cat
							CreatePet(player, m_creature, 28097);
							break;
								
						case 5: // Carrion
							CreatePet(player, m_creature, 26838);
							break;
								
						case 6: // Crab
							CreatePet(player, m_creature, 24478);
							break;  
								
						case 7: // Crocolisk
							CreatePet(player, m_creature, 1417);
							break;  
								
						case 8: // Gorila
							CreatePet(player, m_creature, 28213);
							break;
								
						case 9: // Hound
							CreatePet(player, m_creature, 29452);
							break;
								
						case 10: // Hyena
							CreatePet(player, m_creature, 13036);
							break;
								
						case 11: // Moth
							CreatePet(player, m_creature, 27421);
							break;
								
						case 12: // Owl
							CreatePet(player, m_creature, 23136);
							break;
								
						case 13: // Strider
							CreatePet(player, m_creature, 22807);
							break;
								
						case 414: // Scorpid
							CreatePet(player, m_creature, 9698);
							break;
								
						case 15: // Turtle
							CreatePet(player, m_creature, 25482);
							break;
					}
					
					return true;
				}
};

void AddSC_Beastmaster_Trainer()
{
	new Beastmaster_Trainer;
}
 

Tommy

Founder
I figured this script wouldn't be released again. There's so many Beastmaster scripts released everywhere, it is pretty ridiculous. Though, a release is appreciated, at least on ED.


After reviewing your script, it needed a huge tune up.


This code:
Code:
player->PlayerTalkClass->CloseGossip();

can be replaced by an easier method (the define directive):

Code:
player->CLOSE_GOSSIP_MENU();

I see some places where CLOSE_GOSSIP_MENU is being used, but some places you have it using the longer version. Not a big deal but it helps to know the library.

All of the includes are pointless to have except for the "Pet.h" include. The only time you add the others is when it is needed and you don't need any of them, only the Pet include so you can access the pet class and its methods. CMake takes care of ScriptPCH and other scripting includes, they changed that along time ago and people are still including ScriptPCH when it isn't needed at all for the newer versions. 2-3 year old TC source might need to include ScriptPCH for scripting whatever.

Corrected your naming of the "Creature" variable. Not to say it's wrong, but it is better to use "m_" prefix as a member variable of a class, it is also known as the Hungarian notation.
Commented out the 'sender' variable too as it isn't needed.

Cleaned up all the whitespaces and indentation.

I also removed the hunter class check and pet check in 'CreatePet' method as you only need one check and that should be in "OnGossipHello." Also, for your "Back to Main Menu" option, instead of copying the same menu item code from OnGossipHello, you can just call OnGossipHello again.

Code:
/*
<--------------------------------------------------------------------------->
- Developer: Kolin 'Valtorei'
- Complete: 100%
- ScriptName: 'Beastmaster Gossip'
- Developed: 07/15/2014
- Update: 09/15/2014
<--------------------------------------------------------------------------->
*/
#include "Pet.h"

class Beastmaster_Trainer : public CreatureScript
{
public:
    Beastmaster_Trainer() : CreatureScript("Beastmaster_Trainer") {}

    void CreatePet(Player* player, Creature* creature, uint32 entry)
    {
        Creature* creatureTarget = creature->SummonCreature(entry, player->GetPositionX(), player->GetPositionY() + 2, player->GetPositionZ(), player->GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 500);
        if (!creatureTarget)
            return;

        Pet* pet = player->CreateTamedPetFrom(creatureTarget, 0);
        if (!pet)
            return;
        creatureTarget->setDeathState(JUST_DIED);
        creatureTarget->RemoveCorpse();
        creatureTarget->SetHealth(0);

        pet->SetPower(POWER_HAPPINESS, 1048000);
        pet->SetUInt64Value(UNIT_FIELD_CREATEDBY, player->GetGUID());
        pet->SetUInt64Value(UNIT_FIELD_FACTIONTEMPLATE, player->getFaction());
        pet->SetUInt32Value(UNIT_FIELD_LEVEL, player->getLevel());

        pet->GetMap()->AddToMap(pet->ToCreature());

        pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
        if (!pet->InitStatsForLevel(player->getLevel()))
            TC_LOG_INFO("misc", "Falure: No Init Stats for entry %u", entry);

        pet->UpdateAllStats();
        player->SetMinion(pet, true);

        pet->SavePetToDB(PET_SAVE_AS_CURRENT);
        pet->InitTalentForLevel();
        player->PetSpellInitialize();

        player->CLOSE_GOSSIP_MENU();
        creature->Whisper("You have learned a way of the beast, congratulations.", LANG_UNIVERSAL, player);
    }

    bool OnGossipHello(Player* player, Creature* creature)
    {
        if (player->getClass() != CLASS_HUNTER)
        {
            creature->Whisper("I only train Hunters in the way of the beast.", LANG_UNIVERSAL, player);
            player->CLOSE_GOSSIP_MENU();
            return false;
        }

        if (player->GetPet())
        {
            creature->Whisper("You must leave your current pet in order to gain a new one.", LANG_UNIVERSAL, player);
            player->CLOSE_GOSSIP_MENU();
            return false;
        }

        player->ADD_GOSSIP_ITEM(1, "Obtain a New Pet", GOSSIP_SENDER_MAIN, 30);
        if (player->CanTameExoticPets())
            player->ADD_GOSSIP_ITEM(2, "Obtain a New Exotic Pet", GOSSIP_SENDER_MAIN, 50);
        player->ADD_GOSSIP_ITEM(5, "Nevermind!", GOSSIP_SENDER_MAIN, 150);
        player->SEND_GOSSIP_MENU(1, creature->GetGUID());

        return true;
    }

    bool OnGossipSelect(Player* player, Creature* creature, uint32 /* sender */, uint32 action)
    {
        player->PlayerTalkClass->ClearMenus();
        switch (action)
        {
            case 100:
                OnGossipHello(player, creature);
                break;
            case 150:
                player->CLOSE_GOSSIP_MENU();
                break;
            case 30:
                player->ADD_GOSSIP_ITEM(6, "Bat", GOSSIP_SENDER_MAIN, 18);
                player->ADD_GOSSIP_ITEM(6, "Bear", GOSSIP_SENDER_MAIN, 1);
                player->ADD_GOSSIP_ITEM(6, "Boar", GOSSIP_SENDER_MAIN, 2);
                player->ADD_GOSSIP_ITEM(6, "Cat", GOSSIP_SENDER_MAIN, 4);
                player->ADD_GOSSIP_ITEM(6, "Carrion Bird", GOSSIP_SENDER_MAIN, 5);
                player->ADD_GOSSIP_ITEM(6, "Crab", GOSSIP_SENDER_MAIN, 6);
                player->ADD_GOSSIP_ITEM(6, "Crocolisk", GOSSIP_SENDER_MAIN, 7);
                player->ADD_GOSSIP_ITEM(6, "Dragonhawk", GOSSIP_SENDER_MAIN, 17);
                player->ADD_GOSSIP_ITEM(6, "Gorilla", GOSSIP_SENDER_MAIN, 8);
                player->ADD_GOSSIP_ITEM(6, "Hound", GOSSIP_SENDER_MAIN, 9);
                player->ADD_GOSSIP_ITEM(6, "Hyena", GOSSIP_SENDER_MAIN, 10);
                player->ADD_GOSSIP_ITEM(6, "Moth", GOSSIP_SENDER_MAIN, 11);
		player->ADD_GOSSIP_ITEM(6, "Owl", GOSSIP_SENDER_MAIN, 12);
		player->ADD_GOSSIP_ITEM(4, "Next Page ->", GOSSIP_SENDER_MAIN, 31);
		player->ADD_GOSSIP_ITEM(4, "<- Main Menu", GOSSIP_SENDER_MAIN, 100);
		player->ADD_GOSSIP_ITEM(5, "Nevermind!", GOSSIP_SENDER_MAIN, 150);
		player->SEND_GOSSIP_MENU(1, creature->GetGUID());
                break;
            case 31:
		player->ADD_GOSSIP_ITEM(6, "Raptor", GOSSIP_SENDER_MAIN, 20);
		player->ADD_GOSSIP_ITEM(6, "Ravager", GOSSIP_SENDER_MAIN, 19);
		player->ADD_GOSSIP_ITEM(6, "Strider", GOSSIP_SENDER_MAIN, 13);
		player->ADD_GOSSIP_ITEM(6, "Scorpid", GOSSIP_SENDER_MAIN, 414);
		player->ADD_GOSSIP_ITEM(6, "Spider", GOSSIP_SENDER_MAIN, 16);
	        player->ADD_GOSSIP_ITEM(6, "Serpent", GOSSIP_SENDER_MAIN, 21);
		player->ADD_GOSSIP_ITEM(6, "Turtle", GOSSIP_SENDER_MAIN, 15);
		player->ADD_GOSSIP_ITEM(6, "Wasp", GOSSIP_SENDER_MAIN, 93);
		player->ADD_GOSSIP_ITEM(4, "<- Previous Page", GOSSIP_SENDER_MAIN, 30);
		player->ADD_GOSSIP_ITEM(4, "<- Main Menu", GOSSIP_SENDER_MAIN, 100);
		player->ADD_GOSSIP_ITEM(5, "Nevermind!", GOSSIP_SENDER_MAIN, 150);
		player->SEND_GOSSIP_MENU(1, creature->GetGUID());
		break;
	    case 50:
		player->ADD_GOSSIP_ITEM(6, "Chimaera", GOSSIP_SENDER_MAIN, 51);
		player->ADD_GOSSIP_ITEM(6, "Core Hound", GOSSIP_SENDER_MAIN, 52);
		player->ADD_GOSSIP_ITEM(6, "Devilsaur", GOSSIP_SENDER_MAIN, 53);
		player->ADD_GOSSIP_ITEM(6, "Rhino", GOSSIP_SENDER_MAIN, 54);
		player->ADD_GOSSIP_ITEM(6, "Silithid", GOSSIP_SENDER_MAIN, 55);
		player->ADD_GOSSIP_ITEM(6, "Worm", GOSSIP_SENDER_MAIN, 56);
		player->ADD_GOSSIP_ITEM(6, "Loque'nahak", GOSSIP_SENDER_MAIN, 57);
		player->ADD_GOSSIP_ITEM(6, "Skoll", GOSSIP_SENDER_MAIN, 58);
		player->ADD_GOSSIP_ITEM(6, "Gondri.", GOSSIP_SENDER_MAIN, 59);
		player->ADD_GOSSIP_ITEM(4, "<- Main Menu", GOSSIP_SENDER_MAIN, 100);
		player->ADD_GOSSIP_ITEM(5, "Nevermind!", GOSSIP_SENDER_MAIN, 150);
		player->SEND_GOSSIP_MENU(1, creature->GetGUID());
		break;
		// Credits to Serifaz who helped me with these ID's.
	    case 51: // Chimera
		CreatePet(player, creature, 21879);
		break;
	    case 52: // Core hound
		CreatePet(player, creature, 21108);
		break;
	    case 53: // Devilsaur
		CreatePet(player, creature, 20931);
		break;
	    case 54: // Rhino
		CreatePet(player, creature, 30445);
		break;
	    case 55: // Silithid
		CreatePet(player, creature, 5460);
		break;
	    case 56: // Worm
		CreatePet(player, creature, 30148);
		break;
	    case 57: // Loque'nahak
		CreatePet(player, creature, 32517);
		break;
	    case 58: // Skoll
		CreatePet(player, creature, 35189);
		break;
	    case 59: // Gondria
		CreatePet(player, creature, 33776);
		break;
	    case 16: // Spider
		CreatePet(player, creature, 2349);
		break;
	    case 17: // Dragonhawk
		CreatePet(player, creature, 27946);
		break;
	    case 18: // Bat
		CreatePet(player, creature, 28233);
		break;
	    case 19: // Ravager
		CreatePet(player, creature, 17199);
		break;
	    case 20: // Raptor
		CreatePet(player, creature, 14821);
		break;
	    case 21: // Serpent
		CreatePet(player, creature, 28358);
		break;
	    case 1: // Bear
		CreatePet(player, creature, 29319);
		break;
	    case 2: // Boar
		CreatePet(player, creature, 29996);
		break;
	    case 93: // Bug
		CreatePet(player, creature, 28085);
		break;
	    case 4: // Cat
		CreatePet(player, creature, 28097);
		break;
	    case 5: // Carrion
		CreatePet(player, creature, 26838);
		break;
	    case 6: // Crab
		CreatePet(player, creature, 24478);
		break;
	    case 7: // Crocolisk
		CreatePet(player, creature, 1417);
		break;
	    case 8: // Gorila
		CreatePet(player, creature, 28213);
		break;
	    case 9: // Hound
		CreatePet(player, creature, 29452);
		break;
	    case 10: // Hyena
		CreatePet(player, creature, 13036);
		break;
	    case 11: // Moth
		CreatePet(player, creature, 27421);
		break;
	    case 12: // Owl
		CreatePet(player, creature, 23136);
		break;
	    case 13: // Strider
		CreatePet(player, creature, 22807);
		break;
	    case 414: // Scorpid
		CreatePet(player, creature, 9698);
		break;
	    case 15: // Turtle
		CreatePet(player, creature, 25482);
		break;
        }
        return true;
    }
};

void AddSC_Beastmaster_Trainer()
{
    new Beastmaster_Trainer;
}

Regardless, thanks for the release! Hope you take my information into account when making future scripts!
 

Seraphim

Noble Member
Holy crap, thanks!

I know that there are a lot of the same old scripts being posted out there throughout forums. But since I usually use them for myself, I don't usually get input. Posting them doesn't mean I want them to be used, but more along the lines to receive feedback so I may become better in the future. :)

I am running into a problem though. I have another version of this script that uses:
Code:
player->ADD_GOSSIP_ITEM(3, "Stable Your Pet", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_STABLEPET);
Code:
case GOSSIP_OPTION_STABLEPET:
player->GetSession()->SendStablePet(creature->GetGUID());

It looks like that, I believe. I don't have that script on my USB and I'm at school. But the issue is that the stable will open, but I am unable to use the options to actually store or buy stable pets.
 
Last edited:

Tommy

Founder
Holy crap, thanks!

I know that there are a lot of the same old scripts being posted out there throughout forums. But since I usually use them for myself, I don't usually get input. Posting them doesn't mean I want them to be used, but more along the lines to receive feedback so I may become better in the future. :)

I am running into a problem though. I have another version of this script that uses:
Code:
player->ADD_GOSSIP_ITEM(3, "Stable Your Pet", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_STABLEPET);
Code:
case GOSSIP_OPTION_STABLEPET:
player->GetSession()->SendStablePet(creature->GetGUID());

It looks like that, I believe. I don't have that script on my USB and I'm at school. But the issue is that the stable will open, but I am unable to use the options to actually store or buy stable pets.

If you're unable to store the pet, is the Creature (gossip Npc) a Stable Master? If not, that's most likely the issue. Also, you can make the creature a gossip/stable master too. I don't know the npc flags for that though.
 

Seraphim

Noble Member
If you're unable to store the pet, is the Creature (gossip Npc) a Stable Master? If not, that's most likely the issue. Also, you can make the creature a gossip/stable master too. I don't know the npc flags for that though.

I think that you just fixed my issue. It is most likely the NPC in the SQL database. Everyone else I've asked says that it should work, but oddly enough, no one had a reason as to why it wouldn't. I'll try changing the NPC flags and let you know. Thanks for your feedback, Tommy!

UPDATE: That fixed everything! Thanks for your feedback and excellent knowledge. I look forward to releasing other scripts so I may show my growth as a C++ Dev. :3
 
Last edited:

callmephil

Respected Member
Flag for vendor / questgiver / gossip / stablemaster = 4194435

Code:
update `creature_template` set `npcflag` = 4194435 where `entry` = XXX;
 
Top