public static bool CheckForString(Mobile from, string errorMsg, BaseRanged ranged)
        {
            BaseRangedModule module = ranged.BaseRangedModule;

            if (!module.HasBowString)
            {
                return(true);
            }
            else
            {
                if (module.HasBowString && module.StringStrengthSelection == StringStrength.NoString)
                {
                    from.SendMessage("");
                    from.SendMessage(33, "--------------------");
                    from.SendMessage("");
                    from.SendMessage(33, "The bow has an internal error and is now being fixed...");
                    from.SendMessage("");
                    from.SendMessage(33, "--------------------");
                    from.SendMessage("");
                    module.HasBowString = false;
                    return(true);
                }
                else
                {
                    from.SendMessage("{0}", errorMsg);
                    return(false);
                }
            }
        }
        protected override void OnTarget(Mobile from, object targeted)
        {
            Console.WriteLine("Code making it to OnTarget.");
            BaseRanged       rang   = it_Ranged as BaseRanged;
            BaseRangedModule module = rang.BaseRangedModule;

            if (targeted is Item && targeted is Bolt)
            {
                Console.WriteLine("Code making it to bolt check.");
                Item item = ( Item )targeted;

                string errorMsg = "You cannot arm a crossbow that does not have a string.";

                if (!module.HasBowString)
                {
                    from.SendMessage("{0}", errorMsg);
                    return;
                }

                if (item.GetType() == typeof(Bolt))
                {
                    module.BoltSelection = BoltType.Normal;
                    rang.InvalidateProperties();
                }

                if (item.GetType() == typeof(PoisonBolt))
                {
                    module.BoltSelection = BoltType.Poison;
                    rang.InvalidateProperties();
                }

                if (item.GetType() == typeof(ExplosiveBolt))
                {
                    module.BoltSelection = BoltType.Explosive;
                    rang.InvalidateProperties();
                }

                if (item.GetType() == typeof(ArmorPiercingBolt))
                {
                    module.BoltSelection = BoltType.ArmorPiercing;
                    rang.InvalidateProperties();
                }

                if (item.GetType() == typeof(FreezeBolt))
                {
                    module.BoltSelection = BoltType.Freeze;
                    rang.InvalidateProperties();
                }

                if (item.GetType() == typeof(LightningBolt))
                {
                    module.BoltSelection = BoltType.Lightning;
                    rang.InvalidateProperties();
                }
            }
            else
            {
                from.SendMessage("You can only target a bolt.");
            }
        }
        public virtual void CheckStringError(Mobile from, BaseRanged ranged)
        {
            BaseRangedModule module = ranged.BaseRangedModule;

            if (module.HasBowString && module.StringStrengthSelection == StringStrength.NoString)
            {
                from.SendMessage("The bow has an internal error. The bow is now being fixed...");
                module.HasBowString = false;
            }
        }
        public static void CutString(Mobile from, BaseRanged ranged)
        {
            BaseRangedModule module = ranged.BaseRangedModule;

            module.StringStrengthSelection = StringStrength.NoString;
            module.PullWeightSelection     = PoundsPerPull.Zero;
            module.HasBowString            = false;

            from.PlaySound(0x248);
            from.SendMessage("You have just removed the string from your bow.");

            ranged.InvalidateProperties();
        }
        public virtual bool BonusDamage(Mobile attacker, Mobile defender, BaseRanged ranged)
        {
            BaseRangedModule module = ranged.BaseRangedModule;

            attacker.SendMessage("");
            attacker.SendMessage(0x35, "** Bonus Hit **");
            attacker.SendMessage("");
            attacker.SendMessage(0x35, "The strength of your bow and your immpecable skill have given you a perfect hit.");
            attacker.SendMessage("");

            defender.Say("* Ouch, that hurt! *");
            defender.PlaySound(315);

            if (module.HasBowString)
            {
                if (module.m_PullWeight == PoundsPerPull.Fourty)
                {
                    attacker.DoHarmful(defender);
                    AOS.Damage(defender, attacker, Utility.RandomMinMax(2, 5), 100, 0, 0, 0, 0);
                    return(true);
                }
                else if (module.m_PullWeight == PoundsPerPull.Sixty)
                {
                    attacker.DoHarmful(defender);
                    AOS.Damage(defender, attacker, Utility.RandomMinMax(6, 10), 100, 0, 0, 0, 0);
                    return(true);
                }
                else if (module.m_PullWeight == PoundsPerPull.Eighty)
                {
                    attacker.DoHarmful(defender);
                    AOS.Damage(defender, attacker, Utility.RandomMinMax(11, 15), 100, 0, 0, 0, 0);
                    return(true);
                }
                else if (module.m_PullWeight == PoundsPerPull.Hundred)
                {
                    attacker.DoHarmful(defender);
                    AOS.Damage(defender, attacker, Utility.RandomMinMax(16, 20), 100, 0, 0, 0, 0);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(true);
            }
        }
        public void Target(BaseRanged weapon)
        {
            if (!Caster.CanSee(weapon))
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }
            else if (!Caster.CanBeginAction(typeof(AncientEnchantSpell)))
            {
                Caster.SendLocalizedMessage(1005559); // This spell is already in effect.
            }
            else if (CheckSequence())
            {
                if (Caster.BeginAction(typeof(AncientEnchantSpell)))
                {
                    if (this.Scroll != null)
                    {
                        Scroll.Consume();
                    }
                    m_Hue       = weapon.Hue;
                    m_Name      = weapon.Name;
                    weapon.Name = "" + m_Name + " [enchanted]";
                    weapon.Hue  = 1366;
                    weapon.Attributes.WeaponDamage += 10;
                    weapon.Attributes.AttackChance += 1000;

                    Caster.PlaySound(0x20C);
                    Caster.PlaySound(0x145);
                    Caster.FixedParticles(0x3779, 1, 30, 9964, 3, 3, EffectLayer.Waist);

                    IEntity from = new Entity(Serial.Zero, new Point3D(Caster.X, Caster.Y, Caster.Z), Caster.Map);
                    IEntity to   = new Entity(Serial.Zero, new Point3D(Caster.X, Caster.Y, Caster.Z + 50), Caster.Map);
                    Effects.SendMovingParticles(from, to, 0x13B1, 1, 0, false, false, 33, 3, 9501, 1, 0, EffectLayer.Head, 0x100);
                    StopTimer(Caster);

                    Timer t = new InternalTimer(Caster, weapon, m_Hue, m_Name);

                    m_Timers[Caster] = t;

                    t.Start();
                }
                else if (!Caster.CanBeginAction(typeof(AncientEnchantSpell)))
                {
                    DoFizzle();
                }
            }

            FinishSequence();
        }
Beispiel #7
0
        public override void AlterMeleeDamageFrom(Mobile from, ref int damage)
        {
            if (from is PlayerMobile && DoWeaponsDoMoreDamage > 0)
            {
                BaseSword bs = from.FindItemOnLayer(Layer.OneHanded) as BaseSword;
                if (bs != null)
                {
                    damage *= DoWeaponsDoMoreDamage;
                }

                BasePoleArm BPA = from.FindItemOnLayer(Layer.TwoHanded) as BasePoleArm;
                if (BPA != null)
                {
                    damage *= DoWeaponsDoMoreDamage;
                }

                BaseSpear BP = from.FindItemOnLayer(Layer.TwoHanded) as BaseSpear;
                if (BP != null)
                {
                    damage *= DoWeaponsDoMoreDamage;
                }

                BaseAxe BA = from.FindItemOnLayer(Layer.TwoHanded) as BaseAxe;
                if (BA != null)
                {
                    damage *= DoWeaponsDoMoreDamage;
                }

                BaseRanged BR = from.FindItemOnLayer(Layer.TwoHanded) as BaseRanged;
                if (BR != null)
                {
                    damage *= DoWeaponsDoMoreDamage;
                }
            }

            if (from is BaseCreature)
            {
                BaseCreature bc = (BaseCreature)from;

                if (bc.Controlled || bc.Summoned || bc.BardTarget == this)
                {
                    damage /= DoLessDamageFromPets;
                }
            }
        }
            public InternalTimer(Mobile owner, BaseRanged weapon, int m_Hue, string m_WeaponName)
                : base(TimeSpan.FromSeconds(0))
            {
                m_Owner     = owner;
                m_Weapon    = weapon;
                m_weaponhue = m_Hue;
                m_Name      = m_WeaponName;

                int val = (int)owner.Skills[SkillName.Magery].Value;

                if (val > 100)
                {
                    val = 100;
                }

                Delay    = TimeSpan.FromSeconds(val);
                Priority = TimerPriority.TwoFiftyMS;
            }
Beispiel #9
0
        public override bool Validate(Mobile from)
        {
            if (from.Hidden && from.AllowedStealthSteps > 0)
            {
                from.SendLocalizedMessage(1063127); // You cannot use this ability while in stealth mode.
                return(false);
            }

            BaseRanged ranged = from.Weapon as BaseRanged;

            if (ranged != null)
            {
                from.SendLocalizedMessage(1075858); // You can only use this with melee attacks.
                return(false);
            }

            return(base.Validate(from));
        }
Beispiel #10
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);
            int version = reader.ReadInt();

            switch (version)
            {
            /*	case 2:
             * {
             *      DefaultMaxLevel = reader.ReadInt();
             *      MaxLevelsCap = reader.ReadInt();
             *      EnableExpCap = reader.ReadBool();
             *      DisplayExpProp = reader.ReadBool();
             *      PointsPerLevel = reader.ReadInt();
             *      DoubleArtifactCost = reader.ReadBool();
             *      BlacksmithOnly = reader.ReadBool();
             *      BlacksmithSkillRequired = reader.ReadDouble();
             *      RewardBlacksmith = reader.ReadBool();
             *      BlacksmithRewardAmt = reader.ReadInt();
             *      m_Experience = reader.ReadInt();
             *      m_Level = reader.ReadInt();
             *      m_Points = reader.ReadInt();
             *      m_MaxLevel = reader.ReadInt();
             *      goto case 1;
             * }*/
            case 1:
            {
                m_Serial = reader.ReadInt();
                m_Ranged = reader.ReadItem() as BaseRanged;
                goto case 0;
            }

            case 0:
            {
                m_HasBowString = reader.ReadBool();
                m_Strength     = ( StringStrength )reader.ReadEncodedInt();
                m_PullWeight   = ( PoundsPerPull )reader.ReadEncodedInt();
                m_ArrowType    = ( ArrowType )reader.ReadEncodedInt();
                m_BoltType     = ( BoltType )reader.ReadEncodedInt();
                break;
            }
            }
        }
        public virtual void CheckStringCondition(Mobile from, BaseRanged ranged)
        {
            BaseRangedModule module = ranged.BaseRangedModule;

            if (module.HasBowString && module.StringStrengthSelection == StringStrength.NoString)
            {
                module.HasBowString = false;
            }

            if (!module.HasBowString)
            {
                if (module.StringStrengthSelection == StringStrength.NoString)
                {
                    module.HasBowString = false;
                    //from.SendMessage( "You need a string to use this bow. See a local fletcher to apply the string." );
                }
                else
                {
                    module.StringStrengthSelection = StringStrength.NoString;
                }
            }
        }
        public static void CheckSkill(Mobile from, BaseRanged rang, BaseRangedModule module)
        {
            double fletching = from.Skills[SkillName.Fletching].Base;

            if (LucidNagual.DataCenter.DebugAdvancedArchery)
            {
                Console.WriteLine("AA Check: Fletching over 100.");
            }

            int skillCode;

            if (fletching > 100.0 && fletching < 105.0)
            {
                Conjunction(module, 0, 1);
            }

            else if (fletching > 104.9 && fletching < 112)
            {
                Conjunction(module, 0, 2);
            }

            else if (fletching > 111.9 && fletching < 119.9)
            {
                Conjunction(module, 0, 3);
            }

            else if (fletching > 119.9)
            {
                Conjunction(module, 0, 4);
            }

            else
            {
                return;
            }
        }
        protected override void OnTarget(Mobile from, object targeted)
        {
            Console.WriteLine("Code making it to OnTarget.");

            if (targeted is Item && targeted is BaseRanged)
            {
                Console.WriteLine("Code making it to BaseStringer check.");
                BaseRanged       ranged = targeted as BaseRanged;
                BaseRangedModule module = ranged.BaseRangedModule;

                if (module.HasBowString)
                {
                    MoreBaseRanged.CutString(from, ranged);
                }
                else
                {
                    from.SendMessage("This bow is not strung. Using scissors on it is a waste of time.");
                }
            }
            else
            {
                from.SendMessage("That is not a bow.");
            }
        }
 public StringerTarget(BaseRanged ranged) : base(1, false, TargetFlags.None)
 {
     it_Ranged = ranged;
 }
 public CrossbowTarget(BaseRanged ranged) : base(1, false, TargetFlags.None)
 {
     it_Ranged = ranged;
 }
Beispiel #16
0
 public InternalTarget(BaseRangedModule mod, BaseRanged ranged) : base(1, false, TargetFlags.None)
 {
     br_mod   = mod;
     m_Ranged = ranged;
 }
        public virtual bool CheckStringDamage(Mobile attacker, Mobile defender, BaseRanged ranged)
        {
            BaseRangedModule module = ranged.BaseRangedModule;

            if (module.HasBowString)
            {
                if (module.StringStrengthSelection == StringStrength.VeryWeak)
                {
                    if (.05 > Utility.Random(100))
                    {
                        BonusDamage(attacker, defender, ranged);
                        return(true);
                    }
                    if (.10 > Utility.Random(1000))                         //1 in a 100 chances of breaking.
                    {
                        module.HasBowString            = false;
                        module.StringStrengthSelection = StringStrength.NoString;
                        attacker.SendMessage("Your string just broke.");
                    }
                    return(true);
                }
                else if (module.StringStrengthSelection == StringStrength.Weak)
                {
                    if (.10 > Utility.Random(100))
                    {
                        BonusDamage(attacker, defender, ranged);
                        return(true);
                    }
                    if (.09 > Utility.Random(1000))                         //1 in a 110 chances of breaking.
                    {
                        module.HasBowString            = false;
                        module.StringStrengthSelection = StringStrength.NoString;
                        attacker.SendMessage("Your string just broke.");
                    }
                    return(true);
                }
                else if (module.StringStrengthSelection == StringStrength.Sturdy)
                {
                    if (.15 > Utility.Random(100))
                    {
                        BonusDamage(attacker, defender, ranged);
                        return(true);
                    }
                    if (.08 > Utility.Random(1000))                         //1 in a 125 chances of breaking.
                    {
                        module.HasBowString            = false;
                        module.StringStrengthSelection = StringStrength.NoString;
                        attacker.SendMessage("Your string just broke.");
                    }
                    return(true);
                }
                else if (module.StringStrengthSelection == StringStrength.Strong)
                {
                    if (.20 > Utility.Random(100))
                    {
                        BonusDamage(attacker, defender, ranged);
                        return(true);
                    }
                    if (.05 > Utility.Random(1000))                         //1 in a 200 chances of breaking.
                    {
                        module.HasBowString            = false;
                        module.StringStrengthSelection = StringStrength.NoString;
                        attacker.SendMessage("Your string just broke.");
                    }
                }
                else if (module.StringStrengthSelection == StringStrength.Dependable)
                {
                    if (.25 > Utility.Random(100))
                    {
                        BonusDamage(attacker, defender, ranged);
                        return(true);
                    }
                    if (.03 > Utility.Random(1000))                         //1 in a 333 chances of breaking.
                    {
                        module.HasBowString            = false;
                        module.StringStrengthSelection = StringStrength.NoString;
                        attacker.SendMessage("Your string just broke.");
                    }
                    return(true);
                }
                else if (module.StringStrengthSelection == StringStrength.Indestructable)
                {
                    if (.33 > Utility.Random(100))
                    {
                        BonusDamage(attacker, defender, ranged);
                        return(true);
                    }
                    //No chance of breaking.
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }

            return(false);
        }
Beispiel #18
0
        public static void FillBank(Mobile m)
        {
            BankBox bank = m.BankBox;

            for (int i = 0; i < PowerScroll.Skills.Count; ++i)
            {
                m.Skills[PowerScroll.Skills[i]].Cap = 120.0;
            }

            m.StatCap = 250;

            Container cont;

            // Begin box of money
            cont        = new WoodenBox();
            cont.ItemID = 0xE7D;
            cont.Hue    = 0x489;

            PlaceItemIn(cont, 16, 51, new BankCheck(500000));
            PlaceItemIn(cont, 28, 51, new BankCheck(250000));
            PlaceItemIn(cont, 40, 51, new BankCheck(100000));
            PlaceItemIn(cont, 52, 51, new BankCheck(100000));
            PlaceItemIn(cont, 64, 51, new BankCheck(50000));

            PlaceItemIn(cont, 34, 115, new Gold(60000));

            PlaceItemIn(bank, 18, 169, cont);
            // End box of money

            // Begin bag of potion kegs
            cont      = new Backpack();
            cont.Name = "Various Potion Kegs";

            PlaceItemIn(cont, 45, 149, MakePotionKeg(PotionEffect.CureGreater, 0x2D));
            PlaceItemIn(cont, 69, 149, MakePotionKeg(PotionEffect.HealGreater, 0x499));
            PlaceItemIn(cont, 93, 149, MakePotionKeg(PotionEffect.PoisonDeadly, 0x46));
            PlaceItemIn(cont, 117, 149, MakePotionKeg(PotionEffect.RefreshTotal, 0x21));
            PlaceItemIn(cont, 141, 149, MakePotionKeg(PotionEffect.ExplosionGreater, 0x74));

            PlaceItemIn(cont, 93, 82, new Bottle(1000));

            PlaceItemIn(bank, 53, 169, cont);
            // End bag of potion kegs

            // Begin bag of tools
            cont      = new Bag();
            cont.Name = "Tool Bag";

            PlaceItemIn(cont, 30, 35, new TinkerTools(1000));
            PlaceItemIn(cont, 60, 35, new HousePlacementTool());
            PlaceItemIn(cont, 90, 35, new DovetailSaw(1000));
            PlaceItemIn(cont, 30, 68, new Scissors());
            PlaceItemIn(cont, 45, 68, new MortarPestle(1000));
            PlaceItemIn(cont, 75, 68, new ScribesPen(1000));
            PlaceItemIn(cont, 90, 68, new SmithHammer(1000));
            PlaceItemIn(cont, 30, 118, new TwoHandedAxe());
            PlaceItemIn(cont, 60, 118, new FletcherTools(1000));
            PlaceItemIn(cont, 90, 118, new SewingKit(1000));

            PlaceItemIn(cont, 36, 51, new RunicHammer(CraftResource.DullCopper, 1000));
            PlaceItemIn(cont, 42, 51, new RunicHammer(CraftResource.ShadowIron, 1000));
            PlaceItemIn(cont, 48, 51, new RunicHammer(CraftResource.Copper, 1000));
            PlaceItemIn(cont, 54, 51, new RunicHammer(CraftResource.Bronze, 1000));
            PlaceItemIn(cont, 61, 51, new RunicHammer(CraftResource.Gold, 1000));
            PlaceItemIn(cont, 67, 51, new RunicHammer(CraftResource.Agapite, 1000));
            PlaceItemIn(cont, 73, 51, new RunicHammer(CraftResource.Verite, 1000));
            PlaceItemIn(cont, 79, 51, new RunicHammer(CraftResource.Valorite, 1000));

            PlaceItemIn(cont, 36, 55, new RunicSewingKit(CraftResource.SpinedLeather, 1000));
            PlaceItemIn(cont, 42, 55, new RunicSewingKit(CraftResource.HornedLeather, 1000));
            PlaceItemIn(cont, 48, 55, new RunicSewingKit(CraftResource.BarbedLeather, 1000));

            PlaceItemIn(bank, 118, 169, cont);
            // End bag of tools

            // Begin bag of archery ammo
            cont      = new Bag();
            cont.Name = "Bag Of Archery Ammo";

            PlaceItemIn(cont, 48, 76, new Arrow(5000));
            PlaceItemIn(cont, 72, 76, new Bolt(5000));

            PlaceItemIn(bank, 118, 124, cont);
            // End bag of archery ammo

            // Begin bag of treasure maps
            cont      = new Bag();
            cont.Name = "Bag Of Treasure Maps";

            PlaceItemIn(cont, 30, 35, new TreasureMap(1, Map.Trammel));
            PlaceItemIn(cont, 45, 35, new TreasureMap(2, Map.Trammel));
            PlaceItemIn(cont, 60, 35, new TreasureMap(3, Map.Trammel));
            PlaceItemIn(cont, 75, 35, new TreasureMap(4, Map.Trammel));
            PlaceItemIn(cont, 90, 35, new TreasureMap(5, Map.Trammel));
            PlaceItemIn(cont, 90, 35, new TreasureMap(6, Map.Trammel));

            PlaceItemIn(cont, 30, 50, new TreasureMap(1, Map.Trammel));
            PlaceItemIn(cont, 45, 50, new TreasureMap(2, Map.Trammel));
            PlaceItemIn(cont, 60, 50, new TreasureMap(3, Map.Trammel));
            PlaceItemIn(cont, 75, 50, new TreasureMap(4, Map.Trammel));
            PlaceItemIn(cont, 90, 50, new TreasureMap(5, Map.Trammel));
            PlaceItemIn(cont, 90, 50, new TreasureMap(6, Map.Trammel));

            PlaceItemIn(cont, 55, 100, new Lockpick(30));
            PlaceItemIn(cont, 60, 100, new Pickaxe());

            PlaceItemIn(bank, 98, 124, cont);
            // End bag of treasure maps

            // Begin bag of raw materials
            cont      = new Bag();
            cont.Hue  = 0x835;
            cont.Name = "Raw Materials Bag";

            PlaceItemIn(cont, 92, 60, new BarbedLeather(5000));
            PlaceItemIn(cont, 92, 68, new HornedLeather(5000));
            PlaceItemIn(cont, 92, 76, new SpinedLeather(5000));
            PlaceItemIn(cont, 92, 84, new Leather(5000));

            PlaceItemIn(cont, 30, 118, new Cloth(5000));
            PlaceItemIn(cont, 30, 84, new Board(5000));
            PlaceItemIn(cont, 57, 80, new BlankScroll(500));

            PlaceItemIn(cont, 30, 35, new DullCopperIngot(5000));
            PlaceItemIn(cont, 37, 35, new ShadowIronIngot(5000));
            PlaceItemIn(cont, 44, 35, new CopperIngot(5000));
            PlaceItemIn(cont, 51, 35, new BronzeIngot(5000));
            PlaceItemIn(cont, 58, 35, new GoldIngot(5000));
            PlaceItemIn(cont, 65, 35, new AgapiteIngot(5000));
            PlaceItemIn(cont, 72, 35, new VeriteIngot(5000));
            PlaceItemIn(cont, 79, 35, new ValoriteIngot(5000));
            PlaceItemIn(cont, 86, 35, new IronIngot(5000));

            PlaceItemIn(cont, 30, 59, new RedScales(5000));
            PlaceItemIn(cont, 36, 59, new YellowScales(5000));
            PlaceItemIn(cont, 42, 59, new BlackScales(5000));
            PlaceItemIn(cont, 48, 59, new GreenScales(5000));
            PlaceItemIn(cont, 54, 59, new WhiteScales(5000));
            PlaceItemIn(cont, 60, 59, new BlueScales(5000));

            PlaceItemIn(bank, 98, 169, cont);
            // End bag of raw materials

            // Begin bag of spell casting stuff
            cont      = new Backpack();
            cont.Hue  = 0x480;
            cont.Name = "Spell Casting Stuff";

            PlaceItemIn(cont, 45, 105, new Spellbook(UInt64.MaxValue));
            PlaceItemIn(cont, 65, 105, new NecromancerSpellbook((UInt64)0xFFFF));
            PlaceItemIn(cont, 85, 105, new BookOfChivalry((UInt64)0x3FF));
            PlaceItemIn(cont, 105, 105, new BookOfBushido());  //Default ctor = full
            PlaceItemIn(cont, 125, 105, new BookOfNinjitsu()); //Default ctor = full

            Runebook runebook = new Runebook(10);

            runebook.CurCharges = runebook.MaxCharges;
            PlaceItemIn(cont, 145, 105, runebook);

            Item toHue = new BagOfAllReagents(150);

            toHue.Hue = 0x2D;
            PlaceItemIn(cont, 45, 150, toHue);

            toHue     = new BagOfNecroReagents(150);
            toHue.Hue = 0x488;
            PlaceItemIn(cont, 65, 150, toHue);

            PlaceItemIn(cont, 140, 150, new BagOfAllReagents(500));

            for (int i = 0; i < 9; ++i)
            {
                PlaceItemIn(cont, 45 + (i * 10), 75, new RecallRune());
            }

            PlaceItemIn(cont, 141, 74, new FireHorn());

            PlaceItemIn(bank, 78, 169, cont);
            // End bag of spell casting stuff

            // Begin bag of ethereals
            cont      = new Backpack();
            cont.Hue  = 0x490;
            cont.Name = "Bag Of Ethy's!";

            PlaceItemIn(cont, 45, 66, new EtherealHorse());
            PlaceItemIn(cont, 69, 82, new EtherealOstard());
            PlaceItemIn(cont, 93, 99, new EtherealLlama());
            PlaceItemIn(cont, 117, 115, new EtherealKirin());
            PlaceItemIn(cont, 45, 132, new EtherealUnicorn());
            PlaceItemIn(cont, 69, 66, new EtherealRidgeback());
            PlaceItemIn(cont, 93, 82, new EtherealSwampDragon());
            PlaceItemIn(cont, 117, 99, new EtherealBeetle());

            PlaceItemIn(bank, 38, 124, cont);
            // End bag of ethereals

            // Begin first bag of artifacts
            cont      = new Backpack();
            cont.Hue  = 0x48F;
            cont.Name = "Bag of Artifacts";

            PlaceItemIn(cont, 45, 66, new TitansHammer());
            PlaceItemIn(cont, 69, 82, new InquisitorsResolution());
            PlaceItemIn(cont, 93, 99, new BladeOfTheRighteous());
            PlaceItemIn(cont, 117, 115, new ZyronicClaw());

            PlaceItemIn(bank, 58, 124, cont);
            // End first bag of artifacts

            // Begin second bag of artifacts
            cont      = new Backpack();
            cont.Hue  = 0x48F;
            cont.Name = "Bag of Artifacts";

            PlaceItemIn(cont, 45, 66, new GauntletsOfNobility());
            PlaceItemIn(cont, 69, 82, new MidnightBracers());
            PlaceItemIn(cont, 93, 99, new VoiceOfTheFallenKing());
            PlaceItemIn(cont, 117, 115, new OrnateCrownOfTheHarrower());
            PlaceItemIn(cont, 45, 132, new HelmOfInsight());
            PlaceItemIn(cont, 69, 66, new HolyKnightsBreastplate());
            PlaceItemIn(cont, 93, 82, new ArmorOfFortune());
            PlaceItemIn(cont, 117, 99, new TunicOfFire());
            PlaceItemIn(cont, 45, 115, new LeggingsOfBane());
            PlaceItemIn(cont, 69, 132, new ArcaneShield());
            PlaceItemIn(cont, 93, 66, new Aegis());
            PlaceItemIn(cont, 117, 82, new RingOfTheVile());
            PlaceItemIn(cont, 45, 99, new BraceletOfHealth());
            PlaceItemIn(cont, 69, 115, new RingOfTheElements());
            PlaceItemIn(cont, 93, 132, new OrnamentOfTheMagician());
            PlaceItemIn(cont, 117, 66, new DivineCountenance());
            PlaceItemIn(cont, 45, 82, new JackalsCollar());
            PlaceItemIn(cont, 69, 99, new HuntersHeaddress());
            PlaceItemIn(cont, 93, 115, new HatOfTheMagi());
            PlaceItemIn(cont, 117, 132, new ShadowDancerLeggings());
            PlaceItemIn(cont, 45, 66, new SpiritOfTheTotem());
            PlaceItemIn(cont, 69, 82, new BladeOfInsanity());
            PlaceItemIn(cont, 93, 99, new AxeOfTheHeavens());
            PlaceItemIn(cont, 117, 115, new TheBeserkersMaul());
            PlaceItemIn(cont, 45, 132, new Frostbringer());
            PlaceItemIn(cont, 69, 66, new BreathOfTheDead());
            PlaceItemIn(cont, 93, 82, new TheDragonSlayer());
            PlaceItemIn(cont, 117, 99, new BoneCrusher());
            PlaceItemIn(cont, 45, 115, new StaffOfTheMagi());
            PlaceItemIn(cont, 69, 132, new SerpentsFang());
            PlaceItemIn(cont, 93, 66, new LegacyOfTheDreadLord());
            PlaceItemIn(cont, 117, 82, new TheTaskmaster());
            PlaceItemIn(cont, 45, 99, new TheDryadBow());

            PlaceItemIn(bank, 78, 124, cont);
            // End second bag of artifacts

            // Begin bag of minor artifacts
            cont      = new Backpack();
            cont.Hue  = 0x48F;
            cont.Name = "Bag of Minor Artifacts";

            PlaceItemIn(cont, 45, 66, new LunaLance());
            PlaceItemIn(cont, 69, 82, new VioletCourage());
            PlaceItemIn(cont, 93, 99, new CavortingClub());
            PlaceItemIn(cont, 117, 115, new CaptainQuacklebushsCutlass());
            PlaceItemIn(cont, 45, 132, new NightsKiss());
            PlaceItemIn(cont, 69, 66, new ShipModelOfTheHMSCape());
            PlaceItemIn(cont, 93, 82, new AdmiralsHeartyRum());
            PlaceItemIn(cont, 117, 99, new CandelabraOfSouls());
            PlaceItemIn(cont, 45, 115, new IolosLute());
            PlaceItemIn(cont, 69, 132, new GwennosHarp());
            PlaceItemIn(cont, 93, 66, new ArcticDeathDealer());
            PlaceItemIn(cont, 117, 82, new EnchantedTitanLegBone());
            PlaceItemIn(cont, 45, 99, new NoxRangersHeavyCrossbow());
            PlaceItemIn(cont, 69, 115, new BlazeOfDeath());
            PlaceItemIn(cont, 93, 132, new DreadPirateHat());
            PlaceItemIn(cont, 117, 66, new BurglarsBandana());
            PlaceItemIn(cont, 45, 82, new GoldBricks());
            PlaceItemIn(cont, 69, 99, new AlchemistsBauble());
            PlaceItemIn(cont, 93, 115, new PhillipsWoodenSteed());
            PlaceItemIn(cont, 117, 132, new PolarBearMask());
            PlaceItemIn(cont, 45, 66, new BowOfTheJukaKing());
            PlaceItemIn(cont, 69, 82, new GlovesOfThePugilist());
            PlaceItemIn(cont, 93, 99, new OrcishVisage());
            PlaceItemIn(cont, 117, 115, new StaffOfPower());
            PlaceItemIn(cont, 45, 132, new ShieldOfInvulnerability());
            PlaceItemIn(cont, 69, 66, new HeartOfTheLion());
            PlaceItemIn(cont, 93, 82, new ColdBlood());
            PlaceItemIn(cont, 117, 99, new GhostShipAnchor());
            PlaceItemIn(cont, 45, 115, new SeahorseStatuette());
            PlaceItemIn(cont, 69, 132, new WrathOfTheDryad());
            PlaceItemIn(cont, 93, 66, new PixieSwatter());

            for (int i = 0; i < 10; i++)
            {
                PlaceItemIn(cont, 117, 128, new MessageInABottle(Utility.RandomBool() ? Map.Trammel : Map.Felucca, 4));
            }

            PlaceItemIn(bank, 18, 124, cont);

            cont      = new Bag();
            cont.Hue  = 0x501;
            cont.Name = "Tokuno Minor Artifacts";

            PlaceItemIn(cont, 42, 70, new Exiler());
            PlaceItemIn(cont, 38, 53, new HanzosBow());
            PlaceItemIn(cont, 45, 40, new TheDestroyer());
            PlaceItemIn(cont, 92, 80, new DragonNunchaku());
            PlaceItemIn(cont, 42, 56, new PeasantsBokuto());
            PlaceItemIn(cont, 44, 71, new TomeOfEnlightenment());
            PlaceItemIn(cont, 35, 35, new ChestOfHeirlooms());
            PlaceItemIn(cont, 29, 0, new HonorableSwords());
            PlaceItemIn(cont, 49, 85, new AncientUrn());
            PlaceItemIn(cont, 51, 58, new FluteOfRenewal());
            PlaceItemIn(cont, 70, 51, new PigmentsOfTokuno());
            PlaceItemIn(cont, 40, 79, new AncientSamuraiDo());
            PlaceItemIn(cont, 51, 61, new LegsOfStability());
            PlaceItemIn(cont, 88, 78, new GlovesOfTheSun());
            PlaceItemIn(cont, 55, 62, new AncientFarmersKasa());
            PlaceItemIn(cont, 55, 83, new ArmsOfTacticalExcellence());
            PlaceItemIn(cont, 50, 85, new DaimyosHelm());
            PlaceItemIn(cont, 52, 78, new BlackLotusHood());
            PlaceItemIn(cont, 52, 79, new DemonForks());
            PlaceItemIn(cont, 33, 49, new PilferedDancerFans());

            PlaceItemIn(bank, 58, 124, cont);

            cont      = new Bag();
            cont.Name = "Bag of Bows";

            PlaceItemIn(cont, 31, 84, new Bow());
            PlaceItemIn(cont, 78, 74, new CompositeBow());
            PlaceItemIn(cont, 53, 71, new Crossbow());
            PlaceItemIn(cont, 56, 39, new HeavyCrossbow());
            PlaceItemIn(cont, 82, 72, new RepeatingCrossbow());
            PlaceItemIn(cont, 49, 45, new Yumi());

            for (int i = 0; i < cont.Items.Count; i++)
            {
                BaseRanged bow = cont.Items[i] as BaseRanged;

                if (bow != null)
                {
                    bow.Attributes.WeaponSpeed  = 35;
                    bow.Attributes.WeaponDamage = 35;
                }
            }

            PlaceItemIn(bank, 108, 135, cont);
        }
        protected override void OnTarget(Mobile from, object targeted)
        {
            if (LucidNagual.DataCenter.DebugAdvancedArchery)
            {
                Console.WriteLine("Code making it to OnTarget.");
            }

            BaseRanged       rang   = it_Ranged as BaseRanged;
            BaseRangedModule module = rang.BaseRangedModule;

            if (targeted is Item && targeted is BaseStringer)
            {
                if (LucidNagual.DataCenter.DebugAdvancedArchery)
                {
                    Console.WriteLine("Code making it to BaseStringer check.");
                }

                Item item = ( Item )targeted;

                if (item == null)
                {
                    from.SendMessage("You have decided to not apply the string.");
                }

                string errorMsg = "This bow already contains a string.";

                if (MoreBaseRanged.CheckForString(from, errorMsg, rang) == false)
                {
                    return;
                }

                if (LucidNagual.DataCenter.DebugAdvancedArchery)
                {
                    Console.WriteLine("Code making it passed string check.");
                }

                double fletching = from.Skills[SkillName.Fletching].Base;

                if (fletching > 100)
                {
                    if (LucidNagual.DataCenter.DebugAdvancedArchery)
                    {
                        Console.WriteLine("AA Check: Code making it passed gm fletching check.");
                    }

                    if (item.GetType() == typeof(LinenThreadStringer))
                    {
                        Conjunction(module, 1, 0);
                        CheckSkill(from, rang, module);
                        module.HasBowString = true;
                        item.Delete();
                        rang.InvalidateProperties();
                    }

                    if (item.GetType() == typeof(CottonStringer))
                    {
                        Conjunction(module, 2, 0);
                        CheckSkill(from, rang, module);
                        module.HasBowString = true;
                        item.Delete();
                        rang.InvalidateProperties();
                    }

                    if (item.GetType() == typeof(SilkStringer))
                    {
                        Conjunction(module, 3, 0);
                        CheckSkill(from, rang, module);
                        module.HasBowString = true;
                        item.Delete();
                        rang.InvalidateProperties();
                    }

                    if (item.GetType() == typeof(HorseHairStringer))
                    {
                        Conjunction(module, 4, 0);
                        CheckSkill(from, rang, module);
                        module.HasBowString = true;
                        item.Delete();
                        rang.InvalidateProperties();
                    }

                    if (item.GetType() == typeof(HempStringer))
                    {
                        Conjunction(module, 5, 0);
                        CheckSkill(from, rang, module);
                        module.HasBowString = true;
                        item.Delete();
                        rang.InvalidateProperties();
                    }

                    if (item.GetType() == typeof(AngelHairStringer))
                    {
                        Conjunction(module, 6, 0);
                        CheckSkill(from, rang, module);
                        module.HasBowString = true;
                        item.Delete();
                        rang.InvalidateProperties();
                    }
                }

                if (fletching < 100)
                {
                    from.SendMessage("Only a grandmaster bowcrafter can modify this weapon.");
                    return;
                }

                if (LucidNagual.DataCenter.DebugAdvancedArchery)
                {
                    Console.WriteLine("Code making it passed modification check.");
                }
            }
            else
            {
                from.SendMessage("You can only target a bow stringer.");
            }
        }