diff options
-rw-r--r-- | src/game/Pet.cpp | 11 | ||||
-rw-r--r-- | src/game/PetAI.cpp | 3 | ||||
-rw-r--r-- | src/game/PetHandler.cpp | 3 | ||||
-rw-r--r-- | src/game/SpellEffects.cpp | 4 |
4 files changed, 18 insertions, 3 deletions
diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp index 261eca21701..0819ee845e3 100644 --- a/src/game/Pet.cpp +++ b/src/game/Pet.cpp @@ -262,8 +262,13 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool { uint32 savedhealth = fields[10].GetUInt32(); uint32 savedmana = fields[11].GetUInt32(); - SetHealth(savedhealth > GetMaxHealth() ? GetMaxHealth() : savedhealth); - SetPower(POWER_MANA, savedmana > GetMaxPower(POWER_MANA) ? GetMaxPower(POWER_MANA) : savedmana); + if(!savedhealth && getPetType() == HUNTER_PET) + setDeathState(JUST_DIED); + else + { + SetHealth(savedhealth > GetMaxHealth() ? GetMaxHealth() : savedhealth); + SetPower(POWER_MANA, savedmana > GetMaxPower(POWER_MANA) ? GetMaxPower(POWER_MANA) : savedmana); + } } // set current pet as current @@ -433,7 +438,7 @@ void Pet::SavePetToDB(PetSaveMode mode) << uint32(mode) << ", '" << name.c_str() << "', " << uint32((GetByteValue(UNIT_FIELD_BYTES_2, 2) == UNIT_RENAME_ALLOWED)?0:1) << ", " - << (curhealth<1?1:curhealth) << ", " + << curhealth << ", " << curmana << ", " << GetPower(POWER_HAPPINESS) << ", '"; diff --git a/src/game/PetAI.cpp b/src/game/PetAI.cpp index fc305d5f122..2c9c88781ee 100644 --- a/src/game/PetAI.cpp +++ b/src/game/PetAI.cpp @@ -77,6 +77,9 @@ void PetAI::_stopAttack() void PetAI::UpdateAI(const uint32 diff) { + if (!m_creature->isAlive()) + return; + Unit* owner = m_creature->GetCharmerOrOwner(); if(m_updateAlliesTimer <= diff) diff --git a/src/game/PetHandler.cpp b/src/game/PetHandler.cpp index edd3a9d4f2b..d35cb4867cd 100644 --- a/src/game/PetHandler.cpp +++ b/src/game/PetHandler.cpp @@ -58,6 +58,9 @@ void WorldSession::HandlePetAction( WorldPacket & recv_data ) sLog.outError("HandlePetAction.Pet %u isn't pet of player %s.", uint32(GUID_LOPART(guid1)), GetPlayer()->GetName() ); return; } + + if (!pet->isAlive()) + return; //TODO: allow control charmed player? if(pet->GetTypeId() == TYPEID_PLAYER && !(flag == ACT_COMMAND && spellid == COMMAND_ATTACK)) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 8b6250d603e..37a89f4469a 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -6839,6 +6839,10 @@ void Spell::EffectSummonDeadPet(uint32 /*i*/) if(damage < 0) return; + float x,y,z; + _player->GetPosition(x, y, z); + _player->GetMap()->CreatureRelocation(pet, x, y, z, _player->GetOrientation()); + pet->SetUInt32Value(UNIT_DYNAMIC_FLAGS, 0); pet->RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); pet->setDeathState( ALIVE ); |