Beispiel #1
0
        private void OnDartHit(object state)
        {
            object[] states = (object[])state;
            Mobile   from   = (Mobile)states[0];
            Mobile   target = (Mobile)states[1];

            if (!from.CanBeHarmful(target))
            {
                return;
            }

            from.DoHarmful(target);

            AOS.Damage(target, from, Utility.RandomMinMax(4, 6), 100, 0, 0, 0, 0);

            if (m_Poison != null && m_PoisonCharges > 0)
            {
                Poison p        = m_Poison;
                int    maxLevel = from.Skills[SkillName.Poisoning].Fixed / 200;
                if (p.Level > maxLevel)
                {
                    p = Poison.GetPoison(maxLevel);
                }

                if (target.ApplyPoison(from, p) != ApplyPoisonResult.Immune)
                {
                    if (p.Name == "Parasitic")
                    {
                        ParasiticPotion.AddInfo(target, from);
                    }
                    else if (p.Name == "Darkglow")
                    {
                        DarkglowPotion.AddInfo(target, from);
                    }
                }
            }

            ConsumeUse();
        }
Beispiel #2
0
        public override void OnHit(Mobile attacker, Mobile defender, int damage)
        {
            if (!Validate(attacker))
            {
                return;
            }

            ClearCurrentAbility(attacker);

            BaseWeapon weapon = attacker.Weapon as BaseWeapon;

            if (weapon == null)
            {
                return;
            }

            Poison p = weapon.Poison;

            if (p == null || weapon.PoisonCharges <= 0)
            {
                attacker.SendLocalizedMessage(1061141);                   // Your weapon must have a dose of poison to perform an infectious strike!
                return;
            }

            if (!CheckMana(attacker, true))
            {
                return;
            }

            --weapon.PoisonCharges;

            // Infectious strike special move now uses poisoning skill to help determine potency
            int maxLevel = attacker.Skills[SkillName.Poisoning].Fixed / 200;

            if (maxLevel < 0)
            {
                maxLevel = 0;
            }
            if (p.Level > maxLevel)
            {
                p = Poison.GetPoison(maxLevel);
            }

            Poison oldPoison = p;

            if ((attacker.Skills[SkillName.Poisoning].Value / 100.0) > Utility.RandomDouble())
            {
                int    level     = p.Level + 1;
                Poison newPoison = Poison.GetPoison(level);

                if (newPoison != null)
                {
                    p = newPoison;

                    attacker.SendLocalizedMessage(1060080);                       // Your precise strike has increased the level of the poison by 1
                    defender.SendLocalizedMessage(1060081);                       // The poison seems extra effective!
                }
            }

            defender.PlaySound(0xDD);
            defender.FixedParticles(0x3728, 244, 25, 9941, 1266, 0, EffectLayer.Waist);

            if (defender.ApplyPoison(attacker, p) != ApplyPoisonResult.Immune)
            {
                attacker.SendLocalizedMessage(1008096, true, defender.Name);                   // You have poisoned your target :
                defender.SendLocalizedMessage(1008097, false, attacker.Name);                  //  : poisoned you!

                Titles.AwardKarma(attacker, -10, true);

                if (oldPoison.Name == "Parasitic")
                {
                    ParasiticPotion.AddInfo(defender, attacker);
                }
                else if (oldPoison.Name == "Darkglow")
                {
                    DarkglowPotion.AddInfo(defender, attacker);
                }
            }
        }