aboutsummaryrefslogtreecommitdiff
path: root/src/game/PetHandler.cpp
diff options
context:
space:
mode:
authormegamage <none@none>2009-03-21 11:15:55 -0600
committermegamage <none@none>2009-03-21 11:15:55 -0600
commitab13b3ac048a97a31b3388bf8f16587b91b68c0c (patch)
tree977ecfa82c0d8797fb1cb90c7d749089f23ffafa /src/game/PetHandler.cpp
parentafd3f0383595f32d866029e6b57f40fda6d2e119 (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
Diffstat (limited to 'src/game/PetHandler.cpp')
-rw-r--r--src/game/PetHandler.cpp15
1 files changed, 10 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);
}