mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-17 19:05:42 +00:00
fix(Core/Pets): fix crash at pet resurrect (#10120)
This commit is contained in:
@@ -1157,10 +1157,10 @@ public:
|
||||
|
||||
Player* player = handler->GetSession()->GetPlayer();
|
||||
|
||||
if (player->GetPetGUID())
|
||||
if (player->IsExistPet())
|
||||
{
|
||||
handler->SendSysMessage (LANG_YOU_ALREADY_HAVE_PET);
|
||||
handler->SetSentErrorMessage (true);
|
||||
handler->SendSysMessage(LANG_YOU_ALREADY_HAVE_PET);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1168,46 +1168,18 @@ public:
|
||||
|
||||
if (!cInfo->IsTameable(player->CanTameExoticPets()))
|
||||
{
|
||||
handler->PSendSysMessage (LANG_CREATURE_NON_TAMEABLE, cInfo->Entry);
|
||||
handler->PSendSysMessage(LANG_CREATURE_NON_TAMEABLE, cInfo->Entry);
|
||||
handler->SetSentErrorMessage (true);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Everything looks OK, create new pet
|
||||
Pet* pet = player->CreateTamedPetFrom(creatureTarget);
|
||||
if (!pet)
|
||||
if (!player->CreatePet(creatureTarget))
|
||||
{
|
||||
handler->PSendSysMessage (LANG_CREATURE_NON_TAMEABLE, cInfo->Entry);
|
||||
handler->SetSentErrorMessage (true);
|
||||
handler->PSendSysMessage(LANG_CREATURE_NON_TAMEABLE, cInfo->Entry);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
// place pet before player
|
||||
float x, y, z;
|
||||
player->GetClosePoint (x, y, z, creatureTarget->GetObjectSize(), CONTACT_DISTANCE);
|
||||
pet->Relocate(x, y, z, M_PI - player->GetOrientation());
|
||||
|
||||
// set pet to defensive mode by default (some classes can't control controlled pets in fact).
|
||||
pet->SetReactState(REACT_DEFENSIVE);
|
||||
|
||||
// calculate proper level
|
||||
uint8 level = (creatureTarget->getLevel() < (player->getLevel() - 5)) ? (player->getLevel() - 5) : creatureTarget->getLevel();
|
||||
|
||||
// prepare visual effect for levelup
|
||||
pet->SetUInt32Value(UNIT_FIELD_LEVEL, level - 1);
|
||||
|
||||
// add to world
|
||||
pet->GetMap()->AddToMap(pet->ToCreature());
|
||||
|
||||
// visual effect for levelup
|
||||
pet->SetUInt32Value(UNIT_FIELD_LEVEL, level);
|
||||
|
||||
// caster have pet now
|
||||
player->SetMinion(pet, true);
|
||||
|
||||
pet->SavePetToDB(PET_SAVE_AS_CURRENT);
|
||||
player->PetSpellInitialize();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,44 +66,24 @@ public:
|
||||
// Creatures with family 0 crashes the server
|
||||
if (!creatrueTemplate->family)
|
||||
{
|
||||
handler->PSendSysMessage("This creature cannot be tamed. (family id: 0).");
|
||||
handler->PSendSysMessage(LANG_CREATURE_NON_TAMEABLE, creatrueTemplate->Entry);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
PetStable const* petStable = player->GetPetStable();
|
||||
|
||||
if (petStable && (petStable->CurrentPet || petStable->GetUnslottedHunterPet()))
|
||||
if (player->IsExistPet())
|
||||
{
|
||||
handler->PSendSysMessage("You already have a pet");
|
||||
handler->SendSysMessage(LANG_YOU_ALREADY_HAVE_PET);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Everything looks OK, create new pet
|
||||
Pet* pet = player->CreateTamedPetFrom(creatureTarget);
|
||||
|
||||
// "kill" original creature
|
||||
creatureTarget->DespawnOrUnsummon();
|
||||
|
||||
uint8 level = (creatureTarget->getLevel() < (player->getLevel() - 5)) ? (player->getLevel() - 5) : player->getLevel();
|
||||
|
||||
// prepare visual effect for levelup
|
||||
pet->SetUInt32Value(UNIT_FIELD_LEVEL, level - 1);
|
||||
|
||||
// add to world
|
||||
pet->GetMap()->AddToMap(pet->ToCreature());
|
||||
|
||||
// visual effect for levelup
|
||||
pet->SetUInt32Value(UNIT_FIELD_LEVEL, level);
|
||||
|
||||
// caster have pet now
|
||||
player->SetMinion(pet, true);
|
||||
|
||||
pet->InitTalentForLevel();
|
||||
|
||||
pet->SavePetToDB(PET_SAVE_AS_CURRENT);
|
||||
player->PetSpellInitialize();
|
||||
if (!player->CreatePet(creatureTarget))
|
||||
{
|
||||
handler->PSendSysMessage(LANG_CREATURE_NON_TAMEABLE, creatrueTemplate->Entry);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -517,4 +517,3 @@ void AddSC_elwynn_forest()
|
||||
RegisterCreatureAI(npc_supervisor_raelen);
|
||||
RegisterCreatureAI(npc_eastvale_peasent);
|
||||
}
|
||||
|
||||
|
||||
@@ -1998,4 +1998,3 @@ void AddSC_go_scripts()
|
||||
new go_veil_skith_cage();
|
||||
new go_bells();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user