aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/PetHandler.cpp
diff options
context:
space:
mode:
authorVincent-Michael <Vincent_Michael@gmx.de>2013-08-14 16:52:13 +0200
committerVincent-Michael <Vincent_Michael@gmx.de>2013-08-14 16:52:13 +0200
commit11ecb9c63339bcf5de3a87374d8d2e12cd79d249 (patch)
treef66675905fa77433e073d7cc9c17baaab011382f /src/server/game/Handlers/PetHandler.cpp
parentc8b722e4a44195ab757f0b4d454f92767d65d45f (diff)
parent5890f95f7cd7a885b667fe9b5da2dceea22b9b81 (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts: src/server/game/Entities/Unit/Unit.cpp src/server/game/Entities/Unit/Unit.h src/server/game/Handlers/PetHandler.cpp src/server/game/Spells/Spell.cpp src/server/game/Spells/Spell.h
Diffstat (limited to 'src/server/game/Handlers/PetHandler.cpp')
-rw-r--r--src/server/game/Handlers/PetHandler.cpp38
1 files changed, 11 insertions, 27 deletions
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index a608eb500c7..2e7ca070924 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -312,10 +312,6 @@ void WorldSession::HandlePetActionHelper(Unit* pet, uint64 guid1, uint32 spellid
return;
}
- if (spellInfo->StartRecoveryCategory > 0)
- if (pet->GetCharmInfo() && pet->GetCharmInfo()->GetGlobalCooldownMgr().HasGlobalCooldown(spellInfo))
- return;
-
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
{
if (spellInfo->Effects[i].TargetA.GetTarget() == TARGET_UNIT_SRC_AREA_ENEMY || spellInfo->Effects[i].TargetA.GetTarget() == TARGET_UNIT_DEST_AREA_ENEMY || spellInfo->Effects[i].TargetA.GetTarget() == TARGET_DEST_DYNOBJ_ENEMY)
@@ -395,10 +391,10 @@ void WorldSession::HandlePetActionHelper(Unit* pet, uint64 guid1, uint32 spellid
}
else
{
- if (pet->isPossessed() || pet->IsVehicle())
+ if (pet->isPossessed() || pet->IsVehicle()) /// @todo: confirm this check
Spell::SendCastResult(GetPlayer(), spellInfo, 0, result);
else
- pet->SendPetCastFail(0, spellInfo, result);
+ spell->SendPetCastResult(result);
if (!pet->ToCreature()->HasSpellCooldown(spellid))
GetPlayer()->SendClearCooldown(spellid, pet);
@@ -780,13 +776,6 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket)
return;
}
- if (spellInfo->StartRecoveryCategory > 0) // Check if spell is affected by GCD
- if (caster->GetTypeId() == TYPEID_UNIT && caster->GetCharmInfo() && caster->GetCharmInfo()->GetGlobalCooldownMgr().HasGlobalCooldown(spellInfo))
- {
- caster->SendPetCastFail(castCount, spellInfo, SPELL_FAILED_NOT_READY);
- return;
- }
-
// do not cast not learned spells
if (!caster->HasSpell(spellId) || spellInfo->IsPassive())
return;
@@ -801,25 +790,19 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket)
spell->m_cast_count = castCount; // probably pending spell cast
spell->m_targets = targets;
- /// @todo need to check victim?
- SpellCastResult result;
- if (caster->m_movedPlayer)
- result = spell->CheckPetCast(caster->m_movedPlayer->GetSelectedUnit());
- else
- result = spell->CheckPetCast(NULL);
+ SpellCastResult result = spell->CheckPetCast(NULL);
+
if (result == SPELL_CAST_OK)
{
- if (caster->GetTypeId() == TYPEID_UNIT)
+ if (Creature* creature = caster->ToCreature())
{
- Creature* pet = caster->ToCreature();
- pet->AddCreatureSpellCooldown(spellId);
- if (pet->IsPet())
+ creature->AddCreatureSpellCooldown(spellId);
+ if (Pet* pet = creature->ToPet())
{
- Pet* p = (Pet*)pet;
// 10% chance to play special pet attack talk, else growl
// actually this only seems to happen on special spells, fire shield for imp, torment for voidwalker, but it's stupid to check every spell
- if (p->getPetType() == SUMMON_PET && (urand(0, 100) < 10))
- pet->SendPetTalk((uint32)PET_TALK_SPECIAL_SPELL);
+ if (pet->getPetType() == SUMMON_PET && (urand(0, 100) < 10))
+ pet->SendPetTalk(PET_TALK_SPECIAL_SPELL);
else
pet->SendPetAIReaction(guid);
}
@@ -829,7 +812,8 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket)
}
else
{
- caster->SendPetCastFail(castCount, spellInfo, result);
+ spell->SendPetCastResult(result);
+
if (caster->GetTypeId() == TYPEID_PLAYER)
{
if (!caster->ToPlayer()->HasSpellCooldown(spellId))