aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--src/game/PetHandler.cpp15
-rw-r--r--src/game/WorldSession.h1
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 );