diff options
author | Kandera <KanderaDev@gmail.com> | 2012-09-24 10:37:58 -0400 |
---|---|---|
committer | Kandera <KanderaDev@gmail.com> | 2012-09-24 10:37:58 -0400 |
commit | dc935ef8b14721fba81f9aff4c7190df8de5db09 (patch) | |
tree | 12bd3ff3b70f9da1dc17d0ed2850e9aaccfda734 /src | |
parent | a4e3709dd3a1554ca01544bac365aea1629d7ed5 (diff) |
Core/Spells: fix beacon of light being on a non player.
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 8e18f1de9ab..e64afb70d5f 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -6633,31 +6633,47 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere // Light's Beacon - Beacon of Light if (dummySpell->Id == 53651) { - if (this->GetTypeId() != TYPEID_PLAYER) + if (!victim) return false; - // Check Party/Raid Group - if (Group *group = this->ToPlayer()->GetGroup()) + triggered_spell_id = 0; + Unit* beaconTarget = NULL; + if (this->GetTypeId() != TYPEID_PLAYER) { - for (GroupReference *itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) + beaconTarget = triggeredByAura->GetBase()->GetCaster(); + if (beaconTarget == this || !(beaconTarget->GetAura(53563, victim->GetGUID()))) + return false; + basepoints0 = int32(damage); + triggered_spell_id = procSpell->IsRankOf(sSpellMgr->GetSpellInfo(365)) ? 53652 : 53654; + } + else + { // Check Party/Raid Group + if (Group *group = this->ToPlayer()->GetGroup()) { - Player* Member = itr->getSource(); - - // check if it was heal by paladin which casted this beacon of light - if (Aura const * aura = Member->GetAura(53563, victim->GetGUID())) + for (GroupReference *itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) { - Unit* beaconTarget = Member; + Player* Member = itr->getSource(); - // do not proc when target of beacon of light is healed - if (beaconTarget == this) - return false; + // check if it was heal by paladin which casted this beacon of light + if (Aura const * aura = Member->GetAura(53563, victim->GetGUID())) + { + // do not proc when target of beacon of light is healed + if (Member == this) + return false; - basepoints0 = int32(damage); - triggered_spell_id = 53652; - victim->CastCustomSpell(beaconTarget, triggered_spell_id, &basepoints0, NULL, NULL, true, 0, triggeredByAura); - return true; + beaconTarget = Member; + basepoints0 = int32(damage); + triggered_spell_id = procSpell->IsRankOf(sSpellMgr->GetSpellInfo(365)) ? 53652 : 53654; + break; + } } } } + + if (triggered_spell_id && beaconTarget) + { + victim->CastCustomSpell(beaconTarget, triggered_spell_id, &basepoints0, NULL, NULL, true, 0, triggeredByAura); + return true; + } else return false; } |