All pastes #944045 Raw Edit

Stuff

public text v1 · immutable
·published 2008-03-15 20:12 UTC
rendered paste body
Index: game/Unit.cpp
===================================================================
--- game/Unit.cpp	(revision 5427)
+++ game/Unit.cpp	(working copy)
@@ -1057,17 +1057,18 @@
     spell->prepare(&targets, triggredByAura);
 }
 
-void Unit::DealDamageBySchool(Unit *pVictim, SpellEntry const *spellInfo, uint32 *damage, CleanDamage *cleanDamage, bool *crit, bool isTriggeredSpell)
+void Unit::DealFlatDamage(Unit *pVictim, SpellEntry const *spellInfo, uint32 *damage, CleanDamage *cleanDamage, bool *crit, bool isTriggeredSpell)
 {
 
     // TODO this in only generic way, check for exceptions
-    DEBUG_LOG("DealDamageBySchool (BEFORE) SCHOOL %u >> DMG:%u", spellInfo->School, *damage);
+    DEBUG_LOG("DealFlatDamage (BEFORE) SCHOOL %u >> DMG:%u", spellInfo->School, *damage);
 
     // Per-school calc
-    switch (spellInfo->School)
+	switch (spellInfo->DmgClass)
     {
-        // Physical damage school
-        case SPELL_SCHOOL_NORMAL:
+        // Melee and Ranged Spells 
+        case SPELL_DAMAGE_CLASS_RANGED:
+        case SPELL_DAMAGE_CLASS_MELEE:
         {
             // Calculate physical outcome
             MeleeHitOutcome outcome = RollPhysicalOutcomeAgainst(pVictim, BASE_ATTACK, spellInfo);
@@ -1101,12 +1102,28 @@
             uint32 hitInfo = HITINFO_NORMALSWING;
             VictimState victimState = VICTIMSTATE_NORMAL;
 
-            //Calculate armor mitigation
-            uint32 damageAfterArmor;
-            damageAfterArmor = CalcArmorReducedDamage(pVictim, *damage);
-            cleanDamage->damage += *damage - damageAfterArmor;
-            *damage = damageAfterArmor;
+            // Physical Damage
+            if ( spellInfo->School == SPELL_SCHOOL_NORMAL )
+            {
+                uint32 damageAfterArmor;
+				uint32 modDamage=*damage;
 
+				// apply spellmod to Done damage
+                if(Player* modOwner = GetSpellModOwner())
+                    modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_DAMAGE, *damage);
+
+                //Calculate armor mitigation
+                damageAfterArmor = CalcArmorReducedDamage(pVictim, *damage);
+                cleanDamage->damage += *damage - damageAfterArmor;
+                *damage = damageAfterArmor;
+            } 
+            // Magical Damage
+            else 
+            {
+                // Calculate damage bonus
+                *damage = SpellDamageBonus(pVictim, spellInfo, *damage, SPELL_DIRECT_DAMAGE);
+			}
+
             uint32 blocked_amount = 0;
 
             // Classify outcome
@@ -1298,13 +1315,9 @@
             break;
         }
 
-        // Other schools
-        case SPELL_SCHOOL_HOLY:
-        case SPELL_SCHOOL_FIRE:
-        case SPELL_SCHOOL_NATURE:
-        case SPELL_SCHOOL_FROST:
-        case SPELL_SCHOOL_SHADOW:
-        case SPELL_SCHOOL_ARCANE:
+        // Magical Attacks
+        case SPELL_DAMAGE_CLASS_NONE:
+        case SPELL_DAMAGE_CLASS_MAGIC:
 
             //Spell miss (sends resist message)
             if( int32(SpellMissChanceCalc(pVictim)*100.0f) > irand(0,10000) )
@@ -1319,25 +1332,7 @@
             // Calculate damage bonus
             *damage = SpellDamageBonus(pVictim, spellInfo, *damage, SPELL_DIRECT_DAMAGE);
 
-            // Calculate critical bonus
-            if(spellInfo->DmgClass==SPELL_DAMAGE_CLASS_MELEE)
-            {
-                // Calculate physical outcome
-                if(RollPhysicalOutcomeAgainst(pVictim, BASE_ATTACK, spellInfo) == MELEE_HIT_CRIT)
-                {
-                    *crit = true;
-                    *damage *= 2;
-                    // Resilience - reduce crit damage by
-                    if (pVictim->GetTypeId()==TYPEID_PLAYER)
-                    {
-                        uint32 resilienceReduction = ((Player*)pVictim)->GetMeleeCritDamageReduction(*damage);
-                        cleanDamage->damage += resilienceReduction;
-                        *damage -=  resilienceReduction;
-                    }
-                }
-            }
-            else
-                *crit = SpellCriticalBonus(spellInfo, damage, pVictim);
+            *crit = SpellCriticalBonus(spellInfo, damage, pVictim);
 
             if(*crit)
                 cleanDamage->hitOutCome = MELEE_HIT_CRIT;
@@ -1356,7 +1351,7 @@
     }
 
     // TODO this in only generic way, check for exceptions
-    DEBUG_LOG("DealDamageBySchool (AFTER) SCHOOL %u >> DMG:%u", spellInfo->School, *damage);
+    DEBUG_LOG("DealFlatDamage (AFTER) SCHOOL %u >> DMG:%u", spellInfo->School, *damage);
 }
 
 uint32 Unit::SpellNonMeleeDamageLog(Unit *pVictim, uint32 spellID, uint32 damage, bool isTriggeredSpell, bool useSpellDamage)
@@ -1374,9 +1369,9 @@
     bool crit = false;
 
     if (useSpellDamage)
-        DealDamageBySchool(pVictim, spellInfo, &damage, &cleanDamage, &crit, isTriggeredSpell);
+        DealFlatDamage(pVictim, spellInfo, &damage, &cleanDamage, &crit, isTriggeredSpell);
 
-    // If we actually dealt some damage (spell proc's for 0 damage (normal and magic) called in DealDamageBySchool)
+    // If we actually dealt some damage (spell proc's for 0 damage (normal and magic) called in DealFlatDamage)
     if(damage > 0)
     {
         // Calculate absorb & resists
@@ -1426,7 +1421,7 @@
     }
     else
     {
-        // all spell proc for 0 normal and magic damage called in DealDamageBySchool
+        // all spell proc for 0 normal and magic damage called in DealFlatDamage
 
         //Check for rage
         if(cleanDamage.damage)
Index: game/Unit.h
===================================================================
--- game/Unit.h	(revision 5427)
+++ game/Unit.h	(working copy)
@@ -675,7 +675,7 @@
 
         uint16 GetMaxSkillValueForLevel() const { return getLevel()*5; }
         void DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchools damageSchool, SpellEntry const *spellProto, bool durabilityLoss);
-        void DealDamageBySchool(Unit *pVictim, SpellEntry const *spellInfo, uint32 *damage, CleanDamage *cleanDamage, bool *crit = false, bool isTriggeredSpell = false);
+        void DealFlatDamage(Unit *pVictim, SpellEntry const *spellInfo, uint32 *damage, CleanDamage *cleanDamage, bool *crit = false, bool isTriggeredSpell = false);
         void DoAttackDamage(Unit *pVictim, uint32 *damage, CleanDamage *cleanDamage, uint32 *blocked_amount, SpellSchools damageType, uint32 *hitInfo, VictimState *victimState, uint32 *absorbDamage, uint32 *resistDamage, WeaponAttackType attType, SpellEntry const *spellCasted = NULL, bool isTriggeredSpell = false);
 
         void CastMeleeProcDamageAndSpell(Unit* pVictim, uint32 damage, WeaponAttackType attType, MeleeHitOutcome outcome, SpellEntry const *spellCasted = NULL, bool isTriggeredSpell = false);