aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorn0n4m3 <none@none>2010-01-16 19:11:32 +0300
committern0n4m3 <none@none>2010-01-16 19:11:32 +0300
commit706718b28c8f028d39ec3ca7d3bfefb9f9a62add (patch)
tree5d77bf0ad56126f028f4635096530112bd082b0a
parente031df23fc77716b9e4e10cf6084d1f60ffa11ef (diff)
Fixed some problems with pets, port from tc1, by krz, thx Frankir.
--HG-- branch : trunk
-rw-r--r--src/game/Pet.cpp11
-rw-r--r--src/game/PetAI.cpp3
-rw-r--r--src/game/PetHandler.cpp3
-rw-r--r--src/game/SpellEffects.cpp4
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 );