예제 #1
0
        public virtual void OnCasterHurt()
        {
            //Confirm: Monsters and pets cannot be disturbed.
            if (!Caster.Player)
            {
                return;
            }

            if (IsCasting)
            {
                object o       = ProtectionSpell.Registry[m_Caster];
                bool   disturb = true;

                if (o != null && o is double)
                {
                    if (((double)o) > Utility.RandomDouble() * 100.0)
                    {
                        disturb = false;
                    }
                }

                #region Stygian Abyss
                int focus = SAAbsorptionAttributes.GetValue(Caster, SAAbsorptionAttribute.CastingFocus);

                if (focus > 0)
                {
                    if (focus > 30)
                    {
                        focus = 30;
                    }

                    if (focus > Utility.Random(100))
                    {
                        disturb = false;
                        Caster.SendLocalizedMessage(1113690);                         // You regain your focus and continue casting the spell.
                    }
                }
                #endregion

                if (disturb)
                {
                    Disturb(DisturbType.Hurt, false, true);
                }
            }
        }
예제 #2
0
        public static int GetValue(DamageType type, Mobile from)
        {
            if (from == null)
            {
                return(0);
            }

            switch (type)
            {
            case DamageType.Kinetic: return((int)SAAbsorptionAttributes.GetValue(from, SAAbsorptionAttribute.EaterKinetic));

            case DamageType.Fire: return((int)SAAbsorptionAttributes.GetValue(from, SAAbsorptionAttribute.EaterFire));

            case DamageType.Cold: return((int)SAAbsorptionAttributes.GetValue(from, SAAbsorptionAttribute.EaterCold));

            case DamageType.Poison: return((int)SAAbsorptionAttributes.GetValue(from, SAAbsorptionAttribute.EaterPoison));

            case DamageType.Energy: return((int)SAAbsorptionAttributes.GetValue(from, SAAbsorptionAttribute.EaterEnergy));

            case DamageType.AllTypes: return((int)SAAbsorptionAttributes.GetValue(from, SAAbsorptionAttribute.EaterDamage));
            }
            return(0);
        }
예제 #3
0
        public virtual void CheckCasterDisruption(bool checkElem = false, int phys = 0, int fire = 0, int cold = 0, int pois = 0, int nrgy = 0)
        {
            if (!Caster.Player || Caster.AccessLevel > AccessLevel.Player)
            {
                return;
            }

            if (IsCasting)
            {
                object o       = ProtectionSpell.Registry[m_Caster];
                bool   disturb = true;

                if (o != null && o is double)
                {
                    if (((double)o) > Utility.RandomDouble() * 100.0)
                    {
                        disturb = false;
                    }
                }

                #region Stygian Abyss
                int focus = SAAbsorptionAttributes.GetValue(Caster, SAAbsorptionAttribute.CastingFocus);

                if (BaseFishPie.IsUnderEffects(m_Caster, FishPieEffect.CastFocus))
                {
                    focus += 2;
                }

                if (focus > 12)
                {
                    focus = 12;
                }

                focus += m_Caster.Skills[SkillName.Inscribe].Value >= 50 ? GetInscribeFixed(m_Caster) / 200 : 0;

                if (focus > 0 && focus > Utility.Random(100))
                {
                    disturb = false;
                    Caster.SendLocalizedMessage(1113690); // You regain your focus and continue casting the spell.
                }
                else if (checkElem)
                {
                    int res = 0;

                    if (phys == 100)
                    {
                        res = Math.Min(40, SAAbsorptionAttributes.GetValue(m_Caster, SAAbsorptionAttribute.ResonanceKinetic));
                    }

                    else if (fire == 100)
                    {
                        res = Math.Min(40, SAAbsorptionAttributes.GetValue(m_Caster, SAAbsorptionAttribute.ResonanceFire));
                    }

                    else if (cold == 100)
                    {
                        res = Math.Min(40, SAAbsorptionAttributes.GetValue(m_Caster, SAAbsorptionAttribute.ResonanceCold));
                    }

                    else if (pois == 100)
                    {
                        res = Math.Min(40, SAAbsorptionAttributes.GetValue(m_Caster, SAAbsorptionAttribute.ResonancePoison));
                    }

                    else if (nrgy == 100)
                    {
                        res = Math.Min(40, SAAbsorptionAttributes.GetValue(m_Caster, SAAbsorptionAttribute.ResonanceEnergy));
                    }

                    if (res > Utility.Random(100))
                    {
                        disturb = false;
                    }
                }
                #endregion

                if (disturb)
                {
                    Disturb(DisturbType.Hurt, false, true);
                }
            }
        }