aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoschiwald <joschiwald@online.de>2013-08-14 18:22:28 +0200
committerjoschiwald <joschiwald@online.de>2013-08-14 18:22:28 +0200
commit73f7c1118d17c72b12db76ea80fda30dcf5b8975 (patch)
tree91757b0fac61e6d60c5707fdba2ff6fe01ef999d
parent73be61bb838935ea632dde00640f14442b5342ca (diff)
Core/Spells: implemented SPELL_ATTR0_CU_TRIGGERED_BY_CASTER to correct some triggered spells, which will wrongly triggered by target instead of caster
Closes #1972
-rw-r--r--src/server/game/Spells/SpellInfo.cpp17
-rw-r--r--src/server/game/Spells/SpellInfo.h2
-rw-r--r--src/server/game/Spells/SpellMgr.cpp3
3 files changed, 15 insertions, 7 deletions
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index a58c2ee19e4..3ac1351c135 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1006,8 +1006,12 @@ bool SpellInfo::NeedsExplicitUnitTarget() const
bool SpellInfo::NeedsToBeTriggeredByCaster() const
{
+ if (AttributesCu & SPELL_ATTR0_CU_TRIGGERED_BY_CASTER)
+ return true;
+
if (NeedsExplicitUnitTarget())
return true;
+
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
{
if (Effects[i].IsEffect())
@@ -1017,6 +1021,7 @@ bool SpellInfo::NeedsToBeTriggeredByCaster() const
return true;
}
}
+
return false;
}
@@ -1714,7 +1719,7 @@ uint32 SpellInfo::GetAllEffectsMechanicMask() const
uint32 mask = 0;
if (Mechanic)
mask |= 1 << Mechanic;
- for (int i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
if (Effects[i].IsEffect() && Effects[i].Mechanic)
mask |= 1 << Effects[i].Mechanic;
return mask;
@@ -1724,9 +1729,9 @@ uint32 SpellInfo::GetEffectMechanicMask(uint8 effIndex) const
{
uint32 mask = 0;
if (Mechanic)
- mask |= 1<< Mechanic;
+ mask |= 1 << Mechanic;
if (Effects[effIndex].IsEffect() && Effects[effIndex].Mechanic)
- mask |= 1<< Effects[effIndex].Mechanic;
+ mask |= 1 << Effects[effIndex].Mechanic;
return mask;
}
@@ -1734,10 +1739,10 @@ uint32 SpellInfo::GetSpellMechanicMaskByEffectMask(uint32 effectMask) const
{
uint32 mask = 0;
if (Mechanic)
- mask |= 1<< Mechanic;
- for (int i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ mask |= 1 << Mechanic;
+ for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
if ((effectMask & (1 << i)) && Effects[i].Mechanic)
- mask |= 1<< Effects[i].Mechanic;
+ mask |= 1 << Effects[i].Mechanic;
return mask;
}
diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h
index 6ed742a3b8e..82fa1129429 100644
--- a/src/server/game/Spells/SpellInfo.h
+++ b/src/server/game/Spells/SpellInfo.h
@@ -176,7 +176,7 @@ enum SpellCustomAttributes
SPELL_ATTR0_CU_CONE_LINE = 0x00000004,
SPELL_ATTR0_CU_SHARE_DAMAGE = 0x00000008,
SPELL_ATTR0_CU_NO_INITIAL_THREAT = 0x00000010,
- SPELL_ATTR0_CU_NONE2 = 0x00000020, // UNUSED
+ SPELL_ATTR0_CU_TRIGGERED_BY_CASTER = 0x00000020, // @todo: need generic solution, some triggered spells will be casted by target instead of caster
SPELL_ATTR0_CU_AURA_CC = 0x00000040,
SPELL_ATTR0_CU_DIRECT_DAMAGE = 0x00000100,
SPELL_ATTR0_CU_CHARGE = 0x00000200,
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 24bd19d2d24..d8094488fcd 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -2972,6 +2972,9 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
case 72293: // Mark of the Fallen Champion (Deathbringer Saurfang)
spellInfo->AttributesCu |= SPELL_ATTR0_CU_NEGATIVE_EFF0;
break;
+ case 38729: // Rod of Purification
+ spellInfo->AttributesCu |= SPELL_ATTR0_CU_TRIGGERED_BY_CASTER;
+ break;
default:
break;
}