Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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));
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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));
        }