Ejemplo n.º 1
0
            public DamageTrackerTimer(DamageTracker damageTracker) : base(TickSpeed, TickSpeed)
            {
                m_DamageTracker = damageTracker;

                Priority = TimerPriority.TwoFiftyMS;
            }
Ejemplo n.º 2
0
            protected override void OnTick()
            {
                if (m_Index++ == m_Poison.m_Count)
                {
                    m_Mobile.SendLocalizedMessage(502136);                       // The poison seems to have worn off.
                    m_Mobile.Poison = null;

                    Stop();
                    return;
                }

                double damage;

                damage = 1 + ((double)m_Mobile.HitsMax * m_Poison.m_Scalar);

                double minimum = m_Poison.m_Minimum;
                double maximum = m_Poison.m_Maximum;

                PlayerMobile pm_From = m_From as PlayerMobile;
                BaseCreature bc_From = m_From as BaseCreature;

                PlayerMobile pm_Target = m_Mobile as PlayerMobile;
                BaseCreature bc_Target = m_Mobile as BaseCreature;

                if (bc_Target != null)
                {
                    bc_Target.m_TakenDamageFromPoison = true;
                }

                if (pm_From != null && bc_Target != null)
                {
                    double poisonDamageScalar = 1.0;

                    DungeonArmor.PlayerDungeonArmorProfile poisonerDungeonArmor = new DungeonArmor.PlayerDungeonArmorProfile(pm_From, null);

                    if (poisonerDungeonArmor.MatchingSet && !poisonerDungeonArmor.InPlayerCombat)
                    {
                        poisonDamageScalar = poisonerDungeonArmor.DungeonArmorDetail.PoisonDamageInflictedScalar;
                    }

                    minimum = (double)minimum * 1.5 * poisonDamageScalar;
                    maximum = (double)maximum * 1.5 * poisonDamageScalar;
                }

                if (bc_From != null && pm_Target != null)
                {
                    double poisonDamageScalar = 1.0;

                    DungeonArmor.PlayerDungeonArmorProfile defenderDungeonArmor = new DungeonArmor.PlayerDungeonArmorProfile(pm_Target, null);

                    if (defenderDungeonArmor.MatchingSet && !defenderDungeonArmor.InPlayerCombat)
                    {
                        poisonDamageScalar = defenderDungeonArmor.DungeonArmorDetail.PoisonDamageReceivedScalar;
                    }

                    if (bc_From.Controlled && bc_From.ControlMaster is PlayerMobile)
                    {
                        minimum = (double)minimum * bc_From.PvPAbilityDamageScalar;
                        maximum = (double)maximum * bc_From.PvPAbilityDamageScalar;
                    }

                    minimum *= defenderDungeonArmor.DungeonArmorDetail.PoisonDamageReceivedScalar;
                    maximum *= defenderDungeonArmor.DungeonArmorDetail.PoisonDamageReceivedScalar;
                }

                if (damage < minimum)
                {
                    damage = minimum;
                }

                else if (damage > maximum)
                {
                    damage = maximum;
                }

                int finalDamage = (int)(Math.Round(damage));

                if (finalDamage < 1)
                {
                    finalDamage = 1;
                }

                m_LastDamage = finalDamage;

                if (m_From != null)
                {
                    m_From.DoHarmful(m_Mobile, true);
                }

                int finalAdjustedDamage = AOS.Damage(m_Mobile, m_From, finalDamage, 0, 0, 0, 100, 0);
                int displayedDamage     = DamageTracker.AdjustDisplayedDamage(m_From, m_Mobile, finalAdjustedDamage);

                if (pm_From != null)
                {
                    DamageTracker.RecordDamage(pm_From, pm_From, m_Mobile, DamageTracker.DamageType.PoisonDamage, displayedDamage);
                }

                if ((m_Index % m_Poison.m_MessageInterval) == 0)
                {
                    m_Mobile.OnPoisoned(m_From, m_Poison, m_Poison);
                }
            }