/// <summary> /// Called in Aos.cs, should include all damage types /// </summary> /// <param name="victim"></param> /// <param name="damager"></param> /// <param name="damage"></param> public static void OnCasterDamaged(Mobile victim, Mobile damager, ref int damage) { if (victim == null) { return; } CheckTable(victim); if (m_Table.ContainsKey(victim)) { foreach (SkillMasterySpell sp in EnumerateSpells(victim)) { if (sp.DamageCanDisrupt && damage > sp.DamageThreshold) { sp.Expire(true); } sp.OnDamaged(damager, damage); } } SkillMasteryMove move = SpecialMove.GetCurrentMove(victim) as SkillMasteryMove; if (move != null) { move.OnDamaged(damager, victim, damage); } CombatTrainingSpell.CheckDamage(damager, victim, ref damage); }
/// <summary> /// Called in Aos.cs, should include all damage types /// </summary> /// <param name="victim"></param> /// <param name="damager"></param> /// <param name="damage"></param> public static void OnDamage(Mobile victim, Mobile damager, DamageType type, ref int damage) { if (victim == null || damager == null) { return; } CheckTable(victim); foreach (SkillMasterySpell sp in EnumerateSpells(victim)) { if (sp.DamageCanDisrupt && damage > sp.DamageThreshold) { sp.Expire(true); } sp.OnDamaged(damager, victim, type, ref damage); } foreach (SkillMasterySpell sp in GetSpells(s => s.Target == victim)) { sp.OnTargetDamaged(damager, victim, type, ref damage); } SkillMasteryMove move = SpecialMove.GetCurrentMove(victim) as SkillMasteryMove; if (move != null) { move.OnDamaged(damager, victim, type, ref damage); } PerseveranceSpell preserve = SkillMasterySpell.GetSpellForParty(victim, typeof(PerseveranceSpell)) as PerseveranceSpell; if (preserve != null) { preserve.AbsorbDamage(ref damage); } InspireSpell inspire = SkillMasterySpell.GetSpellForParty(damager, typeof(InspireSpell)) as InspireSpell; if (inspire != null) { inspire.DoDamage(ref damage); } CombatTrainingSpell.CheckDamage(damager, victim, type, ref damage); }