diff options
author | n0n4m3 <none@none> | 2009-12-20 15:11:57 +0100 |
---|---|---|
committer | n0n4m3 <none@none> | 2009-12-20 15:11:57 +0100 |
commit | c412c437a3c3fa25dc70b40e3149b294591ed2ea (patch) | |
tree | 5a91049222e3bf393481a37bdce55df9bab03b6a | |
parent | 89a2d7e46ce47eaa49ce9678a9fe093311edbf30 (diff) |
Fixed spell Righteous Defense
--HG--
branch : trunk
-rw-r--r-- | src/game/Spell.cpp | 16 | ||||
-rw-r--r-- | src/game/SpellEffects.cpp | 27 |
2 files changed, 13 insertions, 30 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 11aaa192727..2916b955a01 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -4795,6 +4795,16 @@ SpellCastResult Spell::CheckCast(bool strict) if(!m_caster->FindNearestCreature(28653,5)) return SPELL_FAILED_OUT_OF_RANGE; } + else if (m_spellInfo->Id == 31789) // Righteous Defense + { + if (m_caster->GetTypeId() != TYPEID_PLAYER) + return SPELL_FAILED_DONT_REPORT; + + Unit* target = m_targets.getUnitTarget(); + if (!target || !target->IsFriendlyTo(m_caster) || target->getAttackers().empty()) + return SPELL_FAILED_BAD_TARGETS; + + } break; } case SPELL_EFFECT_LEARN_SPELL: @@ -5102,10 +5112,8 @@ SpellCastResult Spell::CheckCast(bool strict) if (!target || target->GetTypeId() != TYPEID_PLAYER) return SPELL_FAILED_BAD_TARGETS; - const Group* casterGroup = ((Player*)m_caster)->GetGroup(); - bool isInSameRaidOrGroup = casterGroup && casterGroup == ((Player*)target)->GetGroup(); - if (m_caster != target && !isInSameRaidOrGroup) - return SPELL_FAILED_BAD_TARGETS; + if (!((Player*)m_caster)->IsInSameRaidWith(((Player*)target))) + return SPELL_FAILED_TARGET_NOT_IN_RAID; break; } diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 26fd94a3ef6..ca6d666f15b 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1892,37 +1892,12 @@ void Spell::EffectDummy(uint32 i) } case 31789: // Righteous Defense (step 1) { - if (m_caster->GetTypeId() != TYPEID_PLAYER) - { - SendCastResult(SPELL_FAILED_TARGET_AFFECTING_COMBAT); - return; - } - - // 31989 -> dummy effect (step 1) + dummy effect (step 2) -> 31709 (taunt like spell for each target) - - Unit* friendTarget = !unitTarget || unitTarget->IsFriendlyTo(m_caster) ? unitTarget : unitTarget->getVictim(); - if (friendTarget) - { - Player* player = friendTarget->GetCharmerOrOwnerPlayerOrPlayerItself(); - if (!player || !player->IsInSameRaidWith((Player*)m_caster)) - friendTarget = NULL; - } - - // non-standard cast requirement check - if (!friendTarget || friendTarget->getAttackers().empty()) - { - ((Player*)m_caster)->RemoveSpellCooldown(m_spellInfo->Id,true); - SendCastResult(SPELL_FAILED_TARGET_AFFECTING_COMBAT); - return; - } - - // Righteous Defense (step 2) (in old version 31980 dummy effect) // Clear targets for eff 1 for (std::list<TargetInfo>::iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit) ihit->effectMask &= ~(1<<1); // not empty (checked), copy - Unit::AttackerSet attackers = friendTarget->getAttackers(); + Unit::AttackerSet attackers = unitTarget->getAttackers(); // selected from list 3 for(int i = 0; i < std::min(size_t(3),attackers.size()); ++i) |