/// <summary> /// Called in BaseWeapon, intended as a melee/ranged hit /// </summary> /// <param name="attacker"></param> /// <param name="defender"></param> /// <param name="damage"></param> public static void OnHit(Mobile attacker, Mobile defender, ref int damage) { if (attacker == null || defender == null) { return; } foreach (SkillMasterySpell spell in EnumerateSpells(attacker)) { spell.OnHit(defender, ref damage); } foreach (SkillMasterySpell spell in EnumerateSpells(defender)) { spell.OnGotHit(defender, ref damage); } SkillMasteryMove move = SpecialMove.GetCurrentMove(defender) as SkillMasteryMove; if (move != null) { move.OnGotHit(attacker, defender, ref damage); } if (attacker is BaseCreature || defender is BaseCreature) { CombatTrainingSpell.OnCreatureHit(attacker, defender, 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 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); }
public override bool Validate(Mobile from) { SkillMasteryMove move = SpecialMove.GetCurrentMove(from) as SkillMasteryMove; if ((move == null || move.GetType() != this.GetType()) && !CheckCooldown(from)) { return(false); } return(base.Validate(from)); }
/// <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); }
public override bool Validate(Mobile from) { SkillMasteryMove move = SpecialMove.GetCurrentMove(from) as SkillMasteryMove; if ((move == null || move.GetType() != this.GetType()) && !CheckCooldown(from)) { return(false); } if (from is PlayerMobile && from.Skills.CurrentMastery != MoveSkill) { from.SendLocalizedMessage(1115664); // You are not on the correct path for using this mastery ability. return(false); } return(base.Validate(from)); }