Guest User

Untitled

a guest
Jun 19th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. uint32 Unit::SpellCriticalDamageBonus(SpellEntry const *spellProto, uint32 damage, Unit* victim)
  2. {
  3. // Calculate critical bonus
  4. int32 crit_bonus = 0;
  5. float crit_mod = 0.0f;
  6.  
  7. switch(spellProto->DmgClass)
  8. {
  9. case SPELL_DAMAGE_CLASS_MELEE: // for melee based spells is 100%
  10. case SPELL_DAMAGE_CLASS_RANGED:
  11. crit_bonus = damage;
  12. break;
  13. default:
  14. crit_bonus = damage / 2; // for spells is 50%
  15. break;
  16. }
  17.  
  18. // adds additional damage to crit_bonus (from talents)
  19. if (Player* modOwner = GetSpellModOwner())
  20. modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_CRIT_DAMAGE_BONUS, crit_bonus);
  21.  
  22. crit_mod_meta += (GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, spellProto->SchoolMask));
  23.  
  24. if (victim)
  25. {
  26. uint32 creatureTypeMask = victim->GetCreatureTypeMask();
  27. crit_mod += GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, creatureTypeMask);
  28.  
  29. switch (spellProto->DmgClass)
  30. {
  31. case SPELL_DAMAGE_CLASS_MELEE:
  32. crit_mod += (victim->GetTotalAuraMultiplier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE));
  33. break;
  34. case SPELL_DAMAGE_CLASS_RANGED:
  35. crit_mod += (victim->GetTotalAuraMultiplier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE) -1.0f) * 100;
  36. break;
  37. default:
  38. crit_mod += (victim->GetTotalAuraMultiplier(SPELL_AURA_MOD_SCHOOL_CRIT_DMG_TAKEN) -1.0f) * 100;
  39. break;
  40. }
  41. }
  42.  
  43. if (crit_bonus != 0)
  44. {
  45. crit_bonus = (int32)((((crit_mod_meta * 2) - 1) * crit_mod) + crit_bonus);
  46. damage += crit_bonus;
  47. }
  48.  
  49. // Resilience - reduce crit damage
  50. if (victim)
  51. damage -= victim->GetResilienceDamageReduction(damage, CR_CRIT_TAKEN_SPELL, true);
  52.  
  53. return damage;
  54. }
Add Comment
Please, Sign In to add comment