diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 7a1dbbfe2..6968600b1 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -211,7 +211,7 @@ std::pair Pet::GetLoadPetInfo(PetStable return { nullptr, PET_SAVE_AS_DELETED }; } -bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool current, uint32 healthPct /*= 0*/) +bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool current, uint32 healthPct /*= 0*/, bool fullMana /*= false*/) { m_loading = true; @@ -418,7 +418,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c owner->ToPlayer()->SetLastPetNumber(petInfo->PetNumber); owner->GetSession()->AddQueryHolderCallback(CharacterDatabase.DelayQueryHolder(std::make_shared(ownerid, petInfo->PetNumber))) - .AfterComplete([this, owner, session = owner->GetSession(), isTemporarySummon, current, lastSaveTime = petInfo->LastSaveTime, savedhealth = petInfo->Health, savedmana = petInfo->Mana, healthPct] + .AfterComplete([this, owner, session = owner->GetSession(), isTemporarySummon, current, lastSaveTime = petInfo->LastSaveTime, savedhealth = petInfo->Health, savedmana = petInfo->Mana, healthPct, fullMana] (SQLQueryHolderBase const& holder) { if (session->GetPlayer() != owner || owner->GetPet() != this) @@ -474,6 +474,10 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c curHealth = CountPctFromMaxHealth(healthPct); } + uint32 curMana = savedmana; + if (fullMana) + curMana = GetMaxPower(POWER_MANA); + if (getPetType() == SUMMON_PET && !current) //all (?) summon pets come with full health when called, but not when they are current { SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); @@ -486,7 +490,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c else { SetHealth(curHealth > GetMaxHealth() ? GetMaxHealth() : curHealth); - SetPower(POWER_MANA, savedmana > GetMaxPower(POWER_MANA) ? GetMaxPower(POWER_MANA) : savedmana); + SetPower(POWER_MANA, curMana > GetMaxPower(POWER_MANA) ? GetMaxPower(POWER_MANA) : curMana); } } diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index 323f489ae..a38baf814 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -60,7 +60,7 @@ public: bool CreateBaseAtCreatureInfo(CreatureTemplate const* cinfo, Unit* owner); bool CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phaseMask); static std::pair GetLoadPetInfo(PetStable const& stable, uint32 petEntry, uint32 petnumber, bool current); - bool LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool current, uint32 healthPct = 0); + bool LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool current, uint32 healthPct = 0, bool fullMana = false); bool isBeingLoaded() const override { return m_loading; } void SavePetToDB(PetSaveMode mode); void FillPetInfo(PetStable::PetInfo* petInfo) const; diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 9b2953e61..7c0bc86d4 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1702,10 +1702,8 @@ class spell_gen_pet_summoned : public SpellScript { PetType newPetType = (player->IsClass(CLASS_HUNTER, CLASS_CONTEXT_PET)) ? HUNTER_PET : SUMMON_PET; Pet* newPet = new Pet(player, newPetType); - if (newPet->LoadPetFromDB(player, 0, player->GetLastPetNumber(), true, 100)) + if (newPet->LoadPetFromDB(player, 0, player->GetLastPetNumber(), true, 100, true)) { - newPet->SetPower(newPet->getPowerType(), newPet->GetMaxPower(newPet->getPowerType())); - switch (newPet->GetEntry()) { case NPC_DOOMGUARD: