Example #1
0
        public virtual void OnTarget(Mobile from, object obj)
        {
            if (Deleted)
            {
                return;
            }

            DragonMarais pet = obj as DragonMarais;

            if (pet == null || pet.HasBarding)
            {
                from.SendLocalizedMessage(1053025);                   // That is not an unarmored swamp dragon.
            }
            else if (!pet.Controlled || pet.ControlMaster != from)
            {
                from.SendLocalizedMessage(1053026);                   // You can only put barding on a tamed swamp dragon that you own.
            }
            else if (!IsChildOf(from.Backpack))
            {
                from.SendLocalizedMessage(1060640);                   // The item must be in your backpack to use it.
            }
            else
            {
                pet.BardingExceptional = this.Exceptional;
                pet.BardingCrafter     = this.Crafter;
                pet.BardingHP          = pet.BardingMaxHP;
                pet.BardingResource    = this.Resource;
                pet.HasBarding         = true;
                pet.Hue = this.Hue;

                this.Delete();

                from.SendLocalizedMessage(1053027);                   // You place the barding on your swamp dragon.  Use a bladed item on your dragon to remove the armor.
            }
        }
Example #2
0
        public static int Damage(Mobile m, Mobile from, int damage, bool ignoreArmor, int phys, int contondant, int tranchant, int perforant, int magie, int chaos, int direct, bool keepAlive, bool archer, bool deathStrike)
        {
            if (m == null || m.Deleted || !m.Alive || damage <= 0)
            {
                return(0);
            }

            //if( phys == 0 && fire == 100 && cold == 0 && pois == 0 && nrgy == 0 )
            //	Mobiles.MeerMage.StopEffect( m, true );

            if (!Core.AOS)
            {
                m.Damage(damage, from);
                return(damage);
            }

            Fix(ref phys);
            Fix(ref contondant);
            Fix(ref tranchant);
            Fix(ref perforant);
            Fix(ref magie);
            Fix(ref chaos);
            Fix(ref direct);

            if (Core.ML && chaos > 0)
            {
                switch (Utility.Random(5))
                {
                case 0: phys += chaos; break;

                case 1: contondant += chaos; break;

                case 2: tranchant += chaos; break;

                case 3: perforant += chaos; break;

                case 4: magie += chaos; break;
                }
            }

            BaseQuiver quiver = null;

            if (archer && from != null)
            {
                quiver = from.FindItemOnLayer(Layer.Cloak) as BaseQuiver;
            }

            int totalDamage = damage;

            if (!ignoreArmor)
            {
                // Armor Ignore on OSI ignores all defenses, not just physical.
                int resPhys  = (int)m.PhysicalResistance;
                int resMagie = (int)m.MagicResistance;

                totalDamage  = damage * phys * (150 - resPhys);
                totalDamage += damage * magie * (150 - resMagie);

                totalDamage /= 10000;

                if (Core.ML)
                {
                    totalDamage += damage * direct / 100;

                    if (quiver != null)
                    {
                        totalDamage += totalDamage * quiver.DamageIncrease / 100;
                    }
                }

                if (totalDamage < 1)
                {
                    totalDamage = 1;
                }
            }
            else if (Core.ML && m is PlayerMobile && from is PlayerMobile)
            {
                if (quiver != null)
                {
                    damage += damage * quiver.DamageIncrease / 100;
                }

                if (!deathStrike)
                {
                    totalDamage = Math.Min(damage, 35); // Direct Damage cap of 35
                }
                else
                {
                    totalDamage = Math.Min(damage, 70); // Direct Damage cap of 70
                }
            }
            else
            {
                totalDamage = damage;

                if (Core.ML && quiver != null)
                {
                    totalDamage += totalDamage * quiver.DamageIncrease / 100;
                }
            }

            #region Dragon Barding
            if ((from == null || !from.Player) && m.Player && m.Mount is DragonMarais)
            {
                DragonMarais pet = m.Mount as DragonMarais;

                if (pet != null && pet.HasBarding)
                {
                    int percent  = (pet.BardingExceptional ? 20 : 10);
                    int absorbed = Scale(totalDamage, percent);

                    totalDamage   -= absorbed;
                    pet.BardingHP -= absorbed;

                    if (pet.BardingHP < 0)
                    {
                        pet.HasBarding = false;
                        pet.BardingHP  = 0;

                        m.SendLocalizedMessage(1053031); // Your dragon's barding has been destroyed!
                    }
                }
            }
            #endregion

            if (keepAlive && totalDamage > m.Hits)
            {
                totalDamage = m.Hits;
            }

            if (from != null && !from.Deleted && from.Alive)
            {
                //int reflectPhys = AosAttributes.GetValue(m, AosAttribute.ReflectPhysical);

                //if (reflectPhys > 5)
                //    reflectPhys = 5;

                //if (reflectPhys != 0)
                //{
                //    from.Damage(Scale((damage * phys * (100 - (ignoreArmor ? 0 : (int)m.PhysicalResistance))) / 10000, reflectPhys), m);
                //}
            }

            if (ExaltationMiracle.m_ExaltationTable.Contains(m))
            {
                ExaltationInfo info = (ExaltationInfo)ExaltationMiracle.m_ExaltationTable[m];

                if (info != null && info.Caster != null && info.Caster.Alive && !info.Caster.Deleted && info.Percent > 0)
                {
                    AOS.Damage(info.Caster, from, (int)(totalDamage * info.Percent), 0, 0, 0, 100, 0);
                    totalDamage = (int)(totalDamage * (1 - info.Percent));
                }

                ReligiousSpell.MiracleEffet(info.Caster, m, 8902, 10, 15, 5013, 0x7f9, 0, EffectLayer.CenterFeet);
                //Effects.SendTargetParticles(m,8902, 10, 15, 5013, 1437, 0, EffectLayer.CenterFeet); //ID, speed, dura, effect, hue, render, layer
                m.PlaySound(555);

                ReligiousSpell.MiracleEffet(info.Caster, info.Caster, 8902, 10, 15, 5013, 0x860, 0, EffectLayer.CenterFeet);
                //info.Effects.SendTargetParticles(Caster,8902, 10, 15, 5013, 1437, 0, EffectLayer.CenterFeet); //ID, speed, dura, effect, hue, render, layer
                info.Caster.PlaySound(555);
            }

            m.Damage(totalDamage, from);

            if (SauvegardeMiracle.m_SauvegardeTable.Contains(m))
            {
                Mobile target = (Mobile)SauvegardeMiracle.m_SauvegardeTable[m];

                if (target != null && m.Alive && m.Map == target.Map)
                {
                    m.MoveToWorld(target.Location, target.Map);
                    SauvegardeMiracle.StopTimer(m);

                    ReligiousSpell.MiracleEffet(m, m, 14138, 10, 15, 5013, 0, 0, EffectLayer.CenterFeet);
                    ReligiousSpell.MiracleEffet(m, target, 14138, 10, 15, 5013, 0, 0, EffectLayer.CenterFeet);

                    //Effects.SendTargetParticles(m,14170, 10, 15, 5013, 0, 0, EffectLayer.CenterFeet); //ID, speed, dura, effect, hue, render, layer
                    //Effects.SendTargetParticles(target,14170, 10, 15, 5013, 0, 0, EffectLayer.CenterFeet); //ID, speed, dura, effect, hue, render, layer
                    m.PlaySound(1923);
                }
            }

            return(totalDamage);
        }
Example #3
0
        protected override void OnTarget(Mobile from, object targeted)
        {
            if (m_Item.Deleted)
            {
                return;
            }

            if (targeted is ICarvable)
            {
                ((ICarvable)targeted).Carve(from, m_Item);
            }
            else if (targeted is DragonMarais && ((DragonMarais)targeted).HasBarding)
            {
                DragonMarais pet = (DragonMarais)targeted;

                if (!pet.Controlled || pet.ControlMaster != from)
                {
                    from.SendLocalizedMessage(1053022);                       // You cannot remove barding from a swamp dragon you do not own.
                }
                else
                {
                    pet.HasBarding = false;
                }
            }
            else
            {
                HarvestSystem     system = Lumberjacking.System;
                HarvestDefinition def    = Lumberjacking.System.Definition;

                int     tileID;
                Map     map;
                Point3D loc;

                if (!system.GetHarvestDetails(from, m_Item, targeted, out tileID, out map, out loc))
                {
                    from.SendLocalizedMessage(500494);                       // You can't use a bladed item on that!
                }
                else if (!def.Validate(tileID))
                {
                    from.SendLocalizedMessage(500494);                       // You can't use a bladed item on that!
                }
                else
                {
                    HarvestBank bank = def.GetBank(from, map, loc.X, loc.Y, m_Item, tileID);

                    if (bank == null)
                    {
                        return;
                    }

                    if (bank.Current < 5)
                    {
                        from.SendLocalizedMessage(500493);                           // There's not enough wood here to harvest.
                    }
                    else
                    {
                        bank.Consume(def, 2, loc);

                        Item item = new Kindling(2);

                        if (from.PlaceInBackpack(item))
                        {
                            from.SendLocalizedMessage(500491);                               // You put some kindling into your backpack.
                            from.SendLocalizedMessage(500492);                               // An axe would probably get you more wood.
                        }
                        else
                        {
                            from.SendLocalizedMessage(500490);                               // You can't place any kindling into your backpack!

                            item.Delete();
                        }
                    }
                }
            }
        }