diff options
author | megamage <none@none> | 2009-03-21 11:15:55 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-03-21 11:15:55 -0600 |
commit | ab13b3ac048a97a31b3388bf8f16587b91b68c0c (patch) | |
tree | 977ecfa82c0d8797fb1cb90c7d749089f23ffafa | |
parent | afd3f0383595f32d866029e6b57f40fda6d2e119 (diff) |
*Fix a crash when toggle autocast for non-pet guardians.
*Allow control multiple guardians using one action bar (not fully implemented)
--HG--
branch : trunk
-rw-r--r-- | src/game/PetHandler.cpp | 15 | ||||
-rw-r--r-- | src/game/WorldSession.h | 1 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/game/PetHandler.cpp b/src/game/PetHandler.cpp index 5fbd1f69916..f6b6184a32a 100644 --- a/src/game/PetHandler.cpp +++ b/src/game/PetHandler.cpp @@ -59,12 +59,17 @@ void WorldSession::HandlePetAction( WorldPacket & recv_data ) return; } - if(!pet->isAlive()) - return; - + //TODO: allow control charmed player? if(pet->GetTypeId() == TYPEID_PLAYER && !(flag == ACT_COMMAND && spellid == COMMAND_ATTACK)) return; + for(ControlList::iterator itr = GetPlayer()->m_Controlled.begin(); itr != GetPlayer()->m_Controlled.end(); ++itr) + if((*itr)->GetEntry() == pet->GetEntry() && (*itr)->isAlive()) + HandlePetActionHelper(*itr, guid1, spellid, flag, guid2); +} + +void WorldSession::HandlePetActionHelper(Unit *pet, uint64 guid1, uint16 spellid, uint16 flag, uint64 guid2) +{ CharmInfo *charmInfo = pet->GetCharmInfo(); if(!charmInfo) { @@ -369,7 +374,7 @@ void WorldSession::HandlePetSetAction( WorldPacket & recv_data ) { if(pet->isCharmed()) charmInfo->ToggleCreatureAutocast(spell_id, true); - else + else if(pet->GetTypeId() == TYPEID_UNIT && ((Creature*)pet)->isPet()) ((Pet*)pet)->ToggleAutocast(spell_id, true); } //sign for no/turn off autocast @@ -377,7 +382,7 @@ void WorldSession::HandlePetSetAction( WorldPacket & recv_data ) { if(pet->isCharmed()) charmInfo->ToggleCreatureAutocast(spell_id, false); - else + else if(pet->GetTypeId() == TYPEID_UNIT && ((Creature*)pet)->isPet()) ((Pet*)pet)->ToggleAutocast(spell_id, false); } diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h index 46fb0f43a1d..7649c69f486 100644 --- a/src/game/WorldSession.h +++ b/src/game/WorldSession.h @@ -558,6 +558,7 @@ class TRINITY_DLL_SPEC WorldSession //Pet void HandlePetAction( WorldPacket & recv_data ); + void HandlePetActionHelper(Unit *pet, uint64 guid1, uint16 spellid, uint16 flag, uint64 guid2); void HandlePetNameQuery( WorldPacket & recv_data ); void HandlePetSetAction( WorldPacket & recv_data ); void HandlePetAbandon( WorldPacket & recv_data ); |