mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
263 lines
No EOL
11 KiB
C++
263 lines
No EOL
11 KiB
C++
#include "ScriptMgr.h"
|
|
#include "ScriptedGossip.h"
|
|
#include "Pet.h"
|
|
|
|
class npc_beastmaster : public CreatureScript
|
|
{
|
|
public:
|
|
npc_beastmaster() : CreatureScript("npc_beastmaster") { }
|
|
|
|
void CreatePet(Player *player, Creature * m_creature, uint32 entry)
|
|
{
|
|
if(player->getClass() != CLASS_HUNTER)
|
|
{
|
|
m_creature->MonsterWhisper("You're not a hunter.!", player->GetGUID());
|
|
player->PlayerTalkClass->SendCloseGossip();
|
|
return;
|
|
}
|
|
|
|
if(player->GetPet())
|
|
{
|
|
m_creature->MonsterWhisper("You should let your pet go.!", player->GetGUID());
|
|
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;
|
|
|
|
// kill original creature
|
|
creatureTarget->setDeathState(JUST_DIED);
|
|
creatureTarget->RemoveCorpse();
|
|
creatureTarget->SetHealth(0); // just for nice GM-mode view
|
|
|
|
//pet->SetUInt32Value(UNIT_FIELD_PETEXPERIENCE,0);
|
|
//pet->SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32((Trinity::XP::xp_to_level(70))/4));
|
|
|
|
// prepare visual effect for levelup
|
|
pet->SetLevel(player->getLevel() - 1);
|
|
pet->GetMap()->AddToMap((Creature*)pet);
|
|
// visual effect for levelup
|
|
pet->SetLevel(player->getLevel());
|
|
pet->SetEffectiveLevel(player->GetEffectiveLevel());
|
|
|
|
|
|
if(!pet->InitStatsForLevel(player->getLevel()))
|
|
TC_LOG_ERROR(LOG_FILTER_NETWORKIO, "Pet Create fail: no init stats for entry %u", entry);
|
|
|
|
pet->UpdateAllStats();
|
|
|
|
// caster have pet now
|
|
player->SetMinion(pet, true);
|
|
|
|
pet->SavePetToDB();
|
|
pet->LearnPetPassives();
|
|
pet->InitLevelupSpellsForLevel();
|
|
player->PetSpellInitialize();
|
|
|
|
//end
|
|
player->PlayerTalkClass->SendCloseGossip();
|
|
m_creature->MonsterWhisper("The pet's been added to the stall, now you can do whatever you want with it.", player->GetGUID());
|
|
}
|
|
|
|
|
|
bool OnGossipHello(Player *player, Creature * m_creature) override
|
|
{
|
|
|
|
if(player->getClass() != CLASS_HUNTER)
|
|
{
|
|
m_creature->MonsterWhisper("You're not a hunter.!", player->GetGUID());
|
|
return true;
|
|
}
|
|
player->ADD_GOSSIP_ITEM(4, "Get a new pet", GOSSIP_SENDER_MAIN, 30);
|
|
|
|
if (player->CanTameExoticPets())
|
|
player->ADD_GOSSIP_ITEM(4, "Get a new exotic pet.", GOSSIP_SENDER_MAIN, 50);
|
|
|
|
player->ADD_GOSSIP_ITEM(2, "Look in the stall", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_STABLEPET);
|
|
player->ADD_GOSSIP_ITEM(6, "Buy food for your pet", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_VENDOR);
|
|
player->ADD_GOSSIP_ITEM(7, "Farewell", GOSSIP_SENDER_MAIN, 150);
|
|
player->PlayerTalkClass->SendGossipMenu(20004, m_creature->GetGUID());
|
|
return true;
|
|
}
|
|
|
|
bool OnGossipSelect(Player *player, Creature * m_creature, uint32 /*sender*/, uint32 action) override
|
|
{
|
|
player->PlayerTalkClass->ClearMenus();
|
|
|
|
switch (action)
|
|
{
|
|
case 100:
|
|
player->ADD_GOSSIP_ITEM(4, "Get a new pet", GOSSIP_SENDER_MAIN, 30);
|
|
if (player->CanTameExoticPets())
|
|
{
|
|
player->ADD_GOSSIP_ITEM(4, "Get a new exotic pet.", GOSSIP_SENDER_MAIN, 50);
|
|
}
|
|
player->ADD_GOSSIP_ITEM(2, "Look in the stall", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_STABLEPET);
|
|
player->ADD_GOSSIP_ITEM(6, "Buy food for your pet", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_VENDOR);
|
|
player->ADD_GOSSIP_ITEM(7, "Farewell", GOSSIP_SENDER_MAIN, 150);
|
|
player->PlayerTalkClass->SendGossipMenu(20004, m_creature->GetGUID());
|
|
break;
|
|
case 150:
|
|
player->PlayerTalkClass->SendCloseGossip();
|
|
break;
|
|
case 30:
|
|
player->ADD_GOSSIP_ITEM(2, "<- return to main menu", GOSSIP_SENDER_MAIN, 100);
|
|
player->ADD_GOSSIP_ITEM(4, "Next page ->", GOSSIP_SENDER_MAIN, 31);
|
|
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, "Kaban", GOSSIP_SENDER_MAIN, 2);
|
|
player->ADD_GOSSIP_ITEM(6, "Cat", GOSSIP_SENDER_MAIN, 4);
|
|
player->ADD_GOSSIP_ITEM(6, "Scavenger", GOSSIP_SENDER_MAIN, 5);
|
|
player->ADD_GOSSIP_ITEM(6, "Crab", GOSSIP_SENDER_MAIN, 6);
|
|
player->ADD_GOSSIP_ITEM(6, "Crocodile", GOSSIP_SENDER_MAIN, 7);
|
|
player->ADD_GOSSIP_ITEM(6, "Dragonfly", 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->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
|
|
break;
|
|
case 31:
|
|
player->ADD_GOSSIP_ITEM(2, "<- return to main menu", GOSSIP_SENDER_MAIN, 30);
|
|
player->ADD_GOSSIP_ITEM(4, "<- previous page", GOSSIP_SENDER_MAIN, 30);
|
|
player->ADD_GOSSIP_ITEM(6, "Raptor", GOSSIP_SENDER_MAIN, 20);
|
|
player->ADD_GOSSIP_ITEM(6, "Destructor", GOSSIP_SENDER_MAIN, 19);
|
|
player->ADD_GOSSIP_ITEM(6, "", GOSSIP_SENDER_MAIN, 13);
|
|
player->ADD_GOSSIP_ITEM(6, "Scorpide", GOSSIP_SENDER_MAIN, 414);
|
|
player->ADD_GOSSIP_ITEM(6, "Strider", GOSSIP_SENDER_MAIN, 16);
|
|
player->ADD_GOSSIP_ITEM(6, "Snake", 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->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
|
|
break;
|
|
case 50:
|
|
player->ADD_GOSSIP_ITEM(2, "<- return to main menu", GOSSIP_SENDER_MAIN, 100);
|
|
player->ADD_GOSSIP_ITEM(2, "<- get a new normal pet", GOSSIP_SENDER_MAIN, 100);
|
|
player->ADD_GOSSIP_ITEM(6, "Chimera", GOSSIP_SENDER_MAIN, 51);
|
|
player->ADD_GOSSIP_ITEM(6, "Hounding Subsoil", GOSSIP_SENDER_MAIN, 52);
|
|
player->ADD_GOSSIP_ITEM(6, "Diyavozavr", GOSSIP_SENDER_MAIN, 53);
|
|
player->ADD_GOSSIP_ITEM(6, "Lutorog", GOSSIP_SENDER_MAIN, 54);
|
|
player->ADD_GOSSIP_ITEM(6, "Silitid", GOSSIP_SENDER_MAIN, 55);
|
|
player->ADD_GOSSIP_ITEM(6, "Worm", GOSSIP_SENDER_MAIN, 56);
|
|
player->ADD_GOSSIP_ITEM(6, "Lok'nahak", GOSSIP_SENDER_MAIN, 57);
|
|
player->ADD_GOSSIP_ITEM(6, "Skoll", GOSSIP_SENDER_MAIN, 58);
|
|
player->ADD_GOSSIP_ITEM(6, "Gondria", GOSSIP_SENDER_MAIN, 59);
|
|
player->ADD_GOSSIP_ITEM(6, "Arcturus", GOSSIP_SENDER_MAIN, 60);
|
|
player->SEND_GOSSIP_MENU(1, m_creature->GetGUID());
|
|
break;
|
|
case GOSSIP_OPTION_STABLEPET:
|
|
player->GetSession()->SendStablePet(m_creature->GetGUID());
|
|
break;
|
|
case GOSSIP_OPTION_VENDOR:
|
|
player->GetSession()->SendListInventory(m_creature->GetGUID());
|
|
break;
|
|
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 60: //Arcturis
|
|
CreatePet(player, m_creature, 38453);
|
|
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: //hynea
|
|
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;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
};
|
|
|
|
void AddSC_npc_beastmaster()
|
|
{
|
|
new npc_beastmaster();
|
|
} |