aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorn0n4m3 <none@none>2009-12-20 15:11:57 +0100
committern0n4m3 <none@none>2009-12-20 15:11:57 +0100
commitc412c437a3c3fa25dc70b40e3149b294591ed2ea (patch)
tree5a91049222e3bf393481a37bdce55df9bab03b6a
parent89a2d7e46ce47eaa49ce9678a9fe093311edbf30 (diff)
Fixed spell Righteous Defense
--HG-- branch : trunk
-rw-r--r--src/game/Spell.cpp16
-rw-r--r--src/game/SpellEffects.cpp27
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)