aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/SharedDefines.h3
-rw-r--r--src/game/Spell.cpp16
-rw-r--r--src/game/Spell.h1
3 files changed, 11 insertions, 9 deletions
diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h
index 52719b02ea8..94e11f52abd 100644
--- a/src/game/SharedDefines.h
+++ b/src/game/SharedDefines.h
@@ -906,8 +906,7 @@ enum SpellMissInfo
SPELL_MISS_IMMUNE2 = 8,
SPELL_MISS_DEFLECT = 9,
SPELL_MISS_ABSORB = 10,
- SPELL_MISS_REFLECT = 11,
- SPELL_MISS_KILL = 12, // kill grounding totem
+ SPELL_MISS_REFLECT = 11
};
enum SpellHitType
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 96cf260adc5..c253c6a30b3 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -783,6 +783,7 @@ void Spell::AddUnitTarget(Unit* pVictim, uint32 effIndex)
target.targetGUID = targetGUID; // Store target GUID
target.effectMask = 1<<effIndex; // Store index of effect
target.processed = false; // Effects not apply on target
+ target.killTarget = false;
// Calculate hit result
if(m_originalCaster)
@@ -1007,6 +1008,13 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
if (!unit)
return;
+ if(target->killTarget)
+ {
+ // remove spell_magnet aura after first spell redirect and destroy target if its totem
+ if(unit->GetTypeId() == TYPEID_UNIT && ((Creature*)unit)->isTotem())
+ unit->Kill(unit);
+ }
+
// Get original caster (if exist) and calculate damage/healing from him data
Unit *caster = m_originalCasterGUID ? m_originalCaster : m_caster;
@@ -1036,12 +1044,6 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
if (target->reflectResult == SPELL_MISS_NONE) // If reflected spell hit caster -> do all effect on him
DoSpellHitOnUnit(m_caster, mask);
}
- else if (missInfo == SPELL_MISS_KILL)
- {
- // remove spell_magnet aura after first spell redirect and destroy target if its totem
- if(unit->GetTypeId() == TYPEID_UNIT && ((Creature*)unit)->isTotem())
- unit->Kill(unit);
- }
else //TODO: This is a hack. need fix
{
uint32 tempMask = 0;
@@ -5382,7 +5384,7 @@ Unit* Spell::SelectMagnetTarget()
{
if (targetGUID == ihit->targetGUID) // Found in list
{
- (*ihit).missCondition = SPELL_MISS_KILL;
+ (*ihit).killTarget = true;
break;
}
}
diff --git a/src/game/Spell.h b/src/game/Spell.h
index 509d65ad87e..8b5c3e6d7c6 100644
--- a/src/game/Spell.h
+++ b/src/game/Spell.h
@@ -504,6 +504,7 @@ class Spell
SpellMissInfo reflectResult:8;
uint8 effectMask:8;
bool processed:1;
+ bool killTarget:1;
};
std::list<TargetInfo> m_UniqueTargetInfo;
uint8 m_needAliveTargetMask; // Mask req. alive targets