<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1146,15 +1146,17 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
 
 void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask)
 {
-    if(!unit || !effectMask)
+    if (!unit || !effectMask)
         return;
 
+    Unit* realCaster = m_originalCaster ? m_originalCaster : m_caster;
+
     // Recheck immune (only for delayed spells)
-    if( m_spellInfo-&gt;speed &amp;&amp; (
+    if (m_spellInfo-&gt;speed &amp;&amp; (
         unit-&gt;IsImmunedToDamage(GetSpellSchoolMask(m_spellInfo)) ||
         unit-&gt;IsImmunedToSpell(m_spellInfo)))
     {
-        m_caster-&gt;SendSpellMiss(unit, m_spellInfo-&gt;Id, SPELL_MISS_IMMUNE);
+        realCaster-&gt;SendSpellMiss(unit, m_spellInfo-&gt;Id, SPELL_MISS_IMMUNE);
         return;
     }
 
@@ -1164,67 +1166,65 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask)
         ((Player*)unit)-&gt;GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2, m_spellInfo-&gt;Id);
     }
 
-    if(m_caster-&gt;GetTypeId() == TYPEID_PLAYER)
-    {
-        ((Player*)m_caster)-&gt;GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2, m_spellInfo-&gt;Id, 0, unit);
-    }
+    if (realCaster-&gt;GetTypeId() == TYPEID_PLAYER)
+        ((Player*)realCaster)-&gt;GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2, m_spellInfo-&gt;Id, 0, unit);
 
-    if( m_caster != unit )
+    if (realCaster != unit)
     {
         // Recheck  UNIT_FLAG_NON_ATTACKABLE for delayed spells
         if (m_spellInfo-&gt;speed &gt; 0.0f &amp;&amp;
             unit-&gt;HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE) &amp;&amp;
             unit-&gt;GetCharmerOrOwnerGUID() != m_caster-&gt;GetGUID())
         {
-            m_caster-&gt;SendSpellMiss(unit, m_spellInfo-&gt;Id, SPELL_MISS_EVADE);
+            realCaster-&gt;SendSpellMiss(unit, m_spellInfo-&gt;Id, SPELL_MISS_EVADE);
             return;
         }
 
-        if( !m_caster-&gt;IsFriendlyTo(unit) )
+        if (!realCaster-&gt;IsFriendlyTo(unit))
         {
             // for delayed spells ignore not visible explicit target
-            if(m_spellInfo-&gt;speed &gt; 0.0f &amp;&amp; unit == m_targets.getUnitTarget() &amp;&amp; !unit-&gt;isVisibleForOrDetect(m_caster,false))
+            if (m_spellInfo-&gt;speed &gt; 0.0f &amp;&amp; unit == m_targets.getUnitTarget() &amp;&amp;
+                !unit-&gt;isVisibleForOrDetect(m_caster,false))
             {
-                m_caster-&gt;SendSpellMiss(unit, m_spellInfo-&gt;Id, SPELL_MISS_EVADE);
+                realCaster-&gt;SendSpellMiss(unit, m_spellInfo-&gt;Id, SPELL_MISS_EVADE);
                 return;
             }
 
             unit-&gt;RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
 
-            if( !(m_spellInfo-&gt;AttributesEx &amp; SPELL_ATTR_EX_NO_INITIAL_AGGRO) )
+            if (!(m_spellInfo-&gt;AttributesEx &amp; SPELL_ATTR_EX_NO_INITIAL_AGGRO))
             {
-                if(!unit-&gt;IsStandState() &amp;&amp; !unit-&gt;hasUnitState(UNIT_STAT_STUNNED))
+                if (!unit-&gt;IsStandState() &amp;&amp; !unit-&gt;hasUnitState(UNIT_STAT_STUNNED))
                     unit-&gt;SetStandState(UNIT_STAND_STATE_STAND);
 
-                if(!unit-&gt;isInCombat() &amp;&amp; unit-&gt;GetTypeId() != TYPEID_PLAYER &amp;&amp; ((Creature*)unit)-&gt;AI())
-                    ((Creature*)unit)-&gt;AI()-&gt;AttackedBy(m_caster);
+                if (!unit-&gt;isInCombat() &amp;&amp; unit-&gt;GetTypeId() != TYPEID_PLAYER &amp;&amp; ((Creature*)unit)-&gt;AI())
+                    ((Creature*)unit)-&gt;AI()-&gt;AttackedBy(realCaster);
 
-                unit-&gt;AddThreat(m_caster, 0.0f);
-                unit-&gt;SetInCombatWith(m_caster);
-                m_caster-&gt;SetInCombatWith(unit);
+                unit-&gt;AddThreat(realCaster, 0.0f);
+                unit-&gt;SetInCombatWith(realCaster);
+                realCaster-&gt;SetInCombatWith(unit);
 
-                if(Player *attackedPlayer = unit-&gt;GetCharmerOrOwnerPlayerOrPlayerItself())
-                {
-                    m_caster-&gt;SetContestedPvP(attackedPlayer);
-                }
+                if (Player *attackedPlayer = unit-&gt;GetCharmerOrOwnerPlayerOrPlayerItself())
+                    realCaster-&gt;SetContestedPvP(attackedPlayer);
             }
         }
         else
         {
             // for delayed spells ignore negative spells (after duel end) for friendly targets
-            if(m_spellInfo-&gt;speed &gt; 0.0f &amp;&amp; !IsPositiveSpell(m_spellInfo-&gt;Id))
+            if (m_spellInfo-&gt;speed &gt; 0.0f &amp;&amp; !IsPositiveSpell(m_spellInfo-&gt;Id))
             {
-                m_caster-&gt;SendSpellMiss(unit, m_spellInfo-&gt;Id, SPELL_MISS_EVADE);
+                realCaster-&gt;SendSpellMiss(unit, m_spellInfo-&gt;Id, SPELL_MISS_EVADE);
                 return;
             }
 
             // assisting case, healing and resurrection
-            if(unit-&gt;hasUnitState(UNIT_STAT_ATTACK_PLAYER))
-                m_caster-&gt;SetContestedPvP();
-            if( unit-&gt;isInCombat() &amp;&amp; !(m_spellInfo-&gt;AttributesEx &amp; SPELL_ATTR_EX_NO_INITIAL_AGGRO) )
+            if (unit-&gt;hasUnitState(UNIT_STAT_ATTACK_PLAYER))
+                realCaster-&gt;SetContestedPvP();
+
+            if (unit-&gt;isInCombat() &amp;&amp; !(m_spellInfo-&gt;AttributesEx &amp; SPELL_ATTR_EX_NO_INITIAL_AGGRO))
             {
-                m_caster-&gt;SetInCombatState(unit-&gt;GetCombatTimer() &gt; 0);
-                unit-&gt;getHostilRefManager().threatAssist(m_caster, 0.0f);
+                realCaster-&gt;SetInCombatState(unit-&gt;GetCombatTimer() &gt; 0);
+                unit-&gt;getHostilRefManager().threatAssist(realCaster, 0.0f);
             }
         }
     }
@@ -1233,7 +1233,8 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask)
     m_diminishGroup = GetDiminishingReturnsGroupForSpell(m_spellInfo,m_triggeredByAuraSpell);
     m_diminishLevel = unit-&gt;GetDiminishing(m_diminishGroup);
     // Increase Diminishing on unit, current informations for actually casts will use values above
-    if((GetDiminishingReturnsGroupType(m_diminishGroup) == DRTYPE_PLAYER &amp;&amp; unit-&gt;GetTypeId() == TYPEID_PLAYER) || GetDiminishingReturnsGroupType(m_diminishGroup) == DRTYPE_ALL)
+    if ((GetDiminishingReturnsGroupType(m_diminishGroup) == DRTYPE_PLAYER &amp;&amp; unit-&gt;GetTypeId() == TYPEID_PLAYER) ||
+        GetDiminishingReturnsGroupType(m_diminishGroup) == DRTYPE_ALL)
         unit-&gt;IncrDiminishing(m_diminishGroup);
 
     // Apply additional spell effects to target
@@ -1250,7 +1251,7 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask)
                 // Get multiplier
                 float multiplier = m_spellInfo-&gt;DmgMultiplier[effectNumber];
                 // Apply multiplier mods
-                if(Player* modOwner = m_originalCaster-&gt;GetSpellModOwner())
+                if(Player* modOwner = realCaster-&gt;GetSpellModOwner())
                     modOwner-&gt;ApplySpellMod(m_spellInfo-&gt;Id, SPELLMOD_EFFECT_PAST_FIRST, multiplier, this);
                 m_damageMultipliers[effectNumber] *= multiplier;
             }</diff>
      <filename>src/game/Spell.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
 #ifndef __REVISION_NR_H__
 #define __REVISION_NR_H__
- #define REVISION_NR &quot;8131&quot;
+ #define REVISION_NR &quot;8132&quot;
 #endif // __REVISION_NR_H__</diff>
      <filename>src/shared/revision_nr.h</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>de8d905bf2ac74250bf60446523a635f4c20ee49</id>
    </parent>
  </parents>
  <author>
    <name>Lightguard</name>
    <email>Lightguard@getmangos.com</email>
  </author>
  <url>http://github.com/mangos/mangos/commit/b0340d8631d61c777389d8552f8e3daded728cc1</url>
  <id>b0340d8631d61c777389d8552f8e3daded728cc1</id>
  <committed-date>2009-07-05T12:41:59-07:00</committed-date>
  <authored-date>2009-07-05T12:39:15-07:00</authored-date>
  <message>[8132] Use real caster in some cases in Spell::DoSpellHitOnUnit.

Signed-off-by: VladimirMangos &lt;vladimir@getmangos.com&gt;</message>
  <tree>3f4bdbab6c6cace919a66cfd42748fb14b5f4c9e</tree>
  <committer>
    <name>VladimirMangos</name>
    <email>vladimir@getmangos.com</email>
  </committer>
</commit>
