コード例 #1
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                ArrayList targets = new ArrayList();
                foreach (Item item in World.Items.Values)
                {
                    if (item is MysticMonkRobe)
                    {
                        if (((MysticMonkRobe)item).m_Owner == Caster)
                        {
                            targets.Add(item);
                        }
                    }
                }
                for (int i = 0; i < targets.Count; ++i)
                {
                    Item item = ( Item )targets[i];
                    item.Delete();
                }

                MysticMonkRobe robe = new MysticMonkRobe(2422);
                robe.m_Owner  = Caster;
                robe.m_Gifter = "Mystical Monk's Robe";
                robe.m_How    = "Belongs to";
                robe.m_Points = (int)(Caster.Skills[SkillName.Wrestling].Value * 2);
                Caster.AddToBackpack(robe);

                Caster.FixedParticles(0x376A, 1, 62, 9923, 3, 3, EffectLayer.Waist);
                Caster.PlaySound(0x5C9);
            }

            FinishSequence();
        }
コード例 #2
0
        public override void OnCast()
        {
            if (CheckFizzle())
            {
                ArrayList targets = new ArrayList();
                foreach (Item item in World.Items.Values)
                {
                    if (item is SoulOrb)
                    {
                        SoulOrb myOrb = (SoulOrb)item;
                        if (myOrb.m_Owner == Caster)
                        {
                            targets.Add(item);
                        }
                    }
                }
                for (int i = 0; i < targets.Count; ++i)
                {
                    Item item = ( Item )targets[i];
                    item.Delete();
                }

                Caster.PlaySound(0x243);
                Effects.SendLocationEffect(Caster.Location, Caster.Map, 0x373A, 15, 0x81F, 0);
                Caster.SendMessage("You create a cloning crystal with your genetic pattern.");
                SoulOrb iOrb = new SoulOrb();
                iOrb.m_Owner = Caster;
                iOrb.Name    = "cloning crystal";
                iOrb.ItemID  = 0x705;
                Caster.AddToBackpack(iOrb);
                Server.Items.SoulOrb.OnSummoned(Caster, iOrb);
            }
        }
コード例 #3
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                int quantidade = (int)(Caster.Skills[CastSkill].Value / 10.0) + 1;

                for (int i = 0; i < quantidade; i++)
                {
                    Item food = (Item)Activator.CreateInstance(m_Food[Utility.Random(m_Food.Length)]);

                    if (food != null)
                    {
                        Caster.AddToBackpack(food);

                        food.MoveToWorld(Caster.Location, Caster.Map);
                    }
                }

                Caster.PublicOverheadMessage(MessageType.Emote, 0, false, "Frutas brotam do chão.");

                Caster.FixedParticles(0, 10, 5, 2003, EffectLayer.RightHand);
                Caster.PlaySound(0x1E2);
            }

            FinishSequence();
        }
コード例 #4
0
        public void Target(Item item)
        {
            if (this.CheckSequence())
            {
                SpellHelper.Turn(this.Caster, item);
                object root = item.RootParent;

                if (item.Movable == false)
                {
                    Caster.SendMessage("That item does not seem to move.");
                }
                else if (item.Amount > 1)
                {
                    Caster.SendMessage("There are too many items stacked here to move.");
                }
                else if (item.Weight > (Caster.Int / 20))
                {
                    Caster.SendMessage("That is to heavy to move.");
                }
                else if (item.RootParentEntity != null)
                {
                    Caster.SendMessage("You can not move objects that are inside of other objects or being worn.");
                }
                else
                {
                    Effects.SendLocationParticles(EffectItem.Create(item.Location, item.Map, EffectItem.DefaultDuration), 0x376A, 9, 32, Server.Items.CharacterDatabase.GetMySpellHue(Caster, 0), 0, 5022, 0);
                    Effects.PlaySound(item.Location, item.Map, 0x1F5);
                    Caster.AddToBackpack(item);
                    Caster.SendMessage("You move the object to within your grasp and place it in your backpack.");
                }
            }
            this.FinishSequence();
        }
コード例 #5
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                List <Item> bonePieces    = new List <Item>();
                List <Item> equipedPieces = new List <Item>();

                bonePieces.Add(new BoneArms());
                bonePieces.Add(new BoneChest());
                bonePieces.Add(new BoneGloves());
                bonePieces.Add(new BoneHelm());
                bonePieces.Add(new BoneLegs());

                foreach (Item i in bonePieces)
                {
                    // On retire les pièces d'armures déjà équipées et on les met dans le sac
                    Item equiped = Caster.FindItemOnLayer(i.Layer);

                    if (equiped != null && equiped.Movable)
                    {
                        equipedPieces.Add(equiped);
                        Caster.RemoveItem(equiped);
                        Caster.AddToBackpack(equiped);
                    }

                    if (equiped != null && !equiped.Movable)
                    {
                        Caster.SendMessage("Vous portez déjà des objets invoqués.");
                        return;
                    }

                    // On équipe la pièce d'armure
                    BaseArmor ba = null;
                    if (i is BaseArmor)
                    {
                        ba = (BaseArmor)i;
                    }

                    if (ba != null)
                    {
                        ba.Movable = false;
                        ba.Hue     = 1109;
                        ba.ArmorAttributes.LowerStatReq = 100;
                        Caster.EquipItem(ba);
                    }
                }

                new InternalTimer(Caster, bonePieces, equipedPieces);

                Caster.Karma -= 500;
                Caster.Mana  -= RequiredMana;
                Effects.PlaySound(Caster.Location, Caster.Map, 0x1FB);
                Effects.SendLocationParticles(EffectItem.Create(Caster.Location, Caster.Map, EffectItem.DefaultDuration), 0x3789, 1, 40, 0x3F, 3, 9907, 0);
            }

            FinishSequence();
        }
コード例 #6
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                Item weap = new RangerNoxBow(Caster);

                Caster.AddToBackpack(weap);
                Caster.SendMessage("You create a magical bow and place it in your backpack.");

                Caster.PlaySound(481);

                Effects.SendLocationParticles(EffectItem.Create(Caster.Location, Caster.Map, EffectItem.DefaultDuration), 0x376A, 1, 29, 1278, 2, 9962, 0);
                Effects.SendLocationParticles(EffectItem.Create(new Point3D(Caster.X, Caster.Y, Caster.Z - 7), Caster.Map, EffectItem.DefaultDuration), 0x37C4, 1, 29, 1278, 2, 9502, 0);
            }
        }
コード例 #7
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                Item weap = new HammerOfFaith(Caster);

                Caster.AddToBackpack(weap);
                Caster.SendMessage("You create a magical hammer and place it in your backpack.");

                Caster.PlaySound(0x212);
                Caster.PlaySound(0x206);

                Effects.SendLocationParticles(EffectItem.Create(Caster.Location, Caster.Map, EffectItem.DefaultDuration), 0x376A, 1, 29, 0x47D, 2, 9962, 0);
                Effects.SendLocationParticles(EffectItem.Create(new Point3D(Caster.X, Caster.Y, Caster.Z - 7), Caster.Map, EffectItem.DefaultDuration), 0x37C4, 1, 29, 0x47D, 2, 9502, 0);
            }
        }
コード例 #8
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                ArrayList targets = new ArrayList();
                foreach (Item item in World.Items.Values)
                {
                    if (item is DeathlyMask)
                    {
                        DeathlyMask myMask = (DeathlyMask)item;
                        if (myMask.owner == Caster)
                        {
                            targets.Add(item);
                        }
                    }
                }
                for (int i = 0; i < targets.Count; ++i)
                {
                    Item item = ( Item )targets[i];
                    item.Delete();
                }

                double time = DamagingSkill(Caster) * 4;
                if (time > 900)
                {
                    time = 900.0;
                }
                if (time < 360)
                {
                    time = 360.0;
                }

                Caster.PlaySound(0x1ED);
                Caster.FixedParticles(0x376A, 9, 32, 5008, Server.Items.CharacterDatabase.GetMySpellHue(Caster, 0), 0, EffectLayer.Waist);
                Caster.SendMessage("You summon the mask of death into your pack.");
                Item iMask = new DeathlyMask(Caster, time);
                Caster.AddToBackpack(iMask);
                Server.Misc.Research.ConsumeScroll(Caster, true, spellIndex, false);

                KarmaMod(Caster, ((int)RequiredSkill + RequiredMana));
            }
            FinishSequence();
        }
コード例 #9
0
ファイル: RefeicaoSpell.cs プロジェクト: zerodowned/kaltar
        public override void OnCast()
        {
            if (CheckSequence())
            {
                Item comida  = new Carrot();
                Item comida1 = new Apple();

                Caster.AddToBackpack(comida);
                Caster.AddToBackpack(comida1);

                Caster.SendMessage("A refeiчуo foi criada e colocada na sua mochila.");

                Caster.PlaySound(0x212);
                Caster.PlaySound(0x206);

                Effects.SendLocationParticles(EffectItem.Create(Caster.Location, Caster.Map, EffectItem.DefaultDuration), 0x376A, 1, 29, 0x47D, 2, 9962, 0);
                Effects.SendLocationParticles(EffectItem.Create(new Point3D(Caster.X, Caster.Y, Caster.Z - 7), Caster.Map, EffectItem.DefaultDuration), 0x37C4, 1, 29, 0x47D, 2, 9502, 0);
            }

            FinishSequence();
        }
コード例 #10
0
ファイル: CreateFood.cs プロジェクト: tflynt91/TrueUO
        public override void OnCast()
        {
            if (CheckSequence())
            {
                FoodInfo foodInfo = m_Food[Utility.Random(m_Food.Length)];
                Item     food     = foodInfo.Create();

                if (food != null)
                {
                    Caster.AddToBackpack(food);

                    // You magically create food in your backpack:
                    Caster.SendLocalizedMessage(1042695, true, " " + foodInfo.Name);

                    Caster.FixedParticles(0, 10, 5, 2003, EffectLayer.RightHand);
                    Caster.PlaySound(0x1E2);
                }
            }

            FinishSequence();
        }
コード例 #11
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                if (this.Scroll != null)
                {
                    Scroll.Consume();
                }

                Item weap = new RangerFireBow(Caster);

                Caster.AddToBackpack(weap);
                Caster.SendMessage("You create a magical bow and place it in your backpack.");

                Caster.PlaySound(0x212);
                Caster.PlaySound(0x206);

                Effects.SendLocationParticles(EffectItem.Create(Caster.Location, Caster.Map, EffectItem.DefaultDuration), 0x376A, 1, 29, 0x47D, 2, 9962, 0);
                Effects.SendLocationParticles(EffectItem.Create(new Point3D(Caster.X, Caster.Y, Caster.Z - 7), Caster.Map, EffectItem.DefaultDuration), 0x37C4, 1, 29, 0x47D, 2, 9502, 0);
            }
        }
コード例 #12
0
ファイル: CreateFood.cs プロジェクト: theinfamousrj/ModernUO
        public override void OnCast()
        {
            if (CheckSequence())
            {
                var foodInfo = m_Food.RandomElement();
                var food     = foodInfo.Create();

                if (food != null)
                {
                    Caster.AddToBackpack(food);

                    // You magically create food in your backpack:
                    Caster.SendLocalizedMessage(1042695, true, $" {foodInfo.Name}");

                    Caster.FixedParticles(0, 10, 5, 2003, EffectLayer.RightHand);
                    Caster.PlaySound(0x1E2);
                }
            }

            FinishSequence();
        }
コード例 #13
0
        public void Target(Gold weapon)
        {
            if (!Caster.CanSee(weapon))
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }

            else if (CheckSequence())
            {
                if (Caster.BeginAction(typeof(AncientFalseCoinSpell)))
                {
                    if (this.Scroll != null)
                    {
                        Scroll.Consume();
                    }
                    FakeGold fake = new FakeGold();
                    fake.m_Amount = weapon.Amount * 5;
                    fake.Name     = "" + (weapon.Amount * 5) + " Gold Coins";
                    m_Fake        = fake;
                    Caster.AddToBackpack(fake);
                    Caster.PlaySound(0x2E6);

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


                    Timer t = new InternalTimer(Caster, m_Fake);

                    m_Timers[Caster] = t;

                    t.Start();
                }
            }

            FinishSequence();
        }
コード例 #14
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                FoodInfo foodInfo = m_Food[Utility.Random(m_Food.Length)];
                Item     food     = foodInfo.Create();

                if (food != null)
                {
                    Caster.AddToBackpack(food);
                    Caster.AddToBackpack(new WaterFlask());

                    // You magically create food in your backpack:
                    //Caster.SendLocalizedMessage( 1042695, true, " " + foodInfo.Name );
                    Caster.SendMessage("Some food and drink magically appear in your backpack.");

                    Caster.FixedParticles(0, 10, 5, 2003, Server.Items.CharacterDatabase.GetMySpellHue(Caster, 0), 0, EffectLayer.RightHand);
                    Caster.PlaySound(0x1E2);
                }
            }

            FinishSequence();
        }
コード例 #15
0
        public void Target(object o)
        {
            if (o is BaseWeapon)
            {
                BaseWeapon weapon = (BaseWeapon)o;

                if (Caster.Backpack.FindItemByType(typeof(EnchantSpellStone)) != null)
                {
                    DoFizzle();
                }
                else if (!Caster.CanSee(weapon))
                {
                    Caster.SendLocalizedMessage(500237);                     // Target can not be seen.
                }
                else if (!Caster.CanBeginAction(typeof(EnchantSpell)))
                {
                    Caster.SendLocalizedMessage(1005559);                     // This spell is already in effect.
                }
                else if (!weapon.IsChildOf(Caster.Backpack))
                {
                    Caster.SendMessage("The weapon must be in your pack to enchant.");
                }
                else if (CheckSequence())
                {
                    EnchantSpellStone orb = new EnchantSpellStone();
                    Caster.AddToBackpack(orb);

                    string name = weapon.Name;
                    if (weapon.Name != null && weapon.Name != "")
                    {
                        name = weapon.Name;
                    }
                    if (name == null)
                    {
                        name = MorphingItem.AddSpacesToSentence((weapon.GetType()).Name);
                    }

                    orb.EnchantOwner   = Caster;
                    orb.EnchantSerial  = weapon.Serial;
                    orb.EnchantName    = name;
                    orb.EnchantDmg     = weapon.Attributes.WeaponDamage;
                    orb.EnchantHue     = weapon.Hue;
                    orb.EnchantSlayer1 = weapon.Slayer;
                    orb.EnchantSlayer2 = weapon.Slayer2;

                    weapon.Name = "" + name + " [enchanted]";
                    weapon.Hue  = 0x9C4;
                    weapon.Attributes.WeaponDamage += 50;
                    weapon.Slayer  = SlayerName.Silver;
                    weapon.Slayer2 = SlayerName.Exorcism;

                    Caster.FixedParticles(0x375A, 9, 20, 5027, EffectLayer.Waist);
                    Caster.PlaySound(0x1F7);

                    int val = (int)Caster.Skills[SkillName.Healing].Value;

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

                    new InternalTimer(Caster, TimeSpan.FromMinutes(val)).Start();
                }
            }
            else
            {
                Caster.SendMessage("You can only enchant weapons with this spell.");
            }
            FinishSequence();
        }
コード例 #16
0
        public void Target(object o, int spellID)
        {
            if (o is BaseWeapon)
            {
                BaseWeapon weapon = (BaseWeapon)o;

                if (Caster.Backpack.FindItemByType(typeof(ResearchEnchantStone)) != null)
                {
                    DoFizzle();
                }
                else if (!Caster.CanSee(weapon))
                {
                    Caster.SendLocalizedMessage(500237);                     // Target can not be seen.
                }
                else if (!Caster.CanBeginAction(typeof(ResearchEnchant)))
                {
                    Caster.SendLocalizedMessage(1005559);                     // This spell is already in effect.
                }
                else if (!weapon.IsChildOf(Caster.Backpack))
                {
                    Caster.SendMessage("The weapon must be in your pack to enchant.");
                }
                else if (CheckSequence())
                {
                    ResearchEnchantStone orb = new ResearchEnchantStone();
                    Caster.AddToBackpack(orb);
                    Server.Misc.Research.ConsumeScroll(Caster, true, spellID, false);

                    string name = weapon.Name;
                    if (weapon.Name != null && weapon.Name != "")
                    {
                        name = weapon.Name;
                    }
                    if (name == null)
                    {
                        name = MorphingItem.AddSpacesToSentence((weapon.GetType()).Name);
                    }

                    orb.EnchantOwner  = Caster;
                    orb.EnchantSerial = weapon.Serial;
                    orb.EnchantName   = name;
                    orb.EnchantDmg    = weapon.Attributes.WeaponDamage;
                    orb.EnchantHue    = weapon.Hue;

                    weapon.Name = "" + name + " [enchanted]";
                    weapon.Hue  = 0x489;
                    weapon.Attributes.WeaponDamage += 100;

                    Caster.PlaySound(0x1F7);
                    Caster.FixedParticles(0x3039, 9, 32, 5008, Server.Items.CharacterDatabase.GetMySpellHue(Caster, 0x85E), 0, EffectLayer.Waist);

                    int val = (int)(DamagingSkill(Caster) / 2);

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

                    new InternalTimer(Caster, TimeSpan.FromMinutes(val)).Start();
                }
            }
            else
            {
                Caster.SendMessage("You can only enchant weapons with this spell.");
            }
            FinishSequence();
        }
コード例 #17
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                Item   item = new Dagger();
                string msg  = "You conjure a dagger.";

                switch (Utility.RandomMinMax(1, 28))
                {
                case 1: item = new Apple(); item.Amount = Utility.RandomMinMax(1, 5); msg = "You conjure some apples."; break;

                case 2: item = new Arrow(); item.Amount = Utility.RandomMinMax(1, 10); msg = "You conjure some arrows."; break;

                case 3: item = new Backpack(); msg = "You conjure a backpack."; break;

                case 4: item = new Bag(); msg = "You conjure a bag."; break;

                case 5: item = new Bandage(); item.Amount = Utility.RandomMinMax(1, 10); msg = "You conjure some bandages."; break;

                case 6: item = new Bedroll(); msg = "You conjure a bedroll."; break;

                case 7: item = new Beeswax(); msg = "You conjure some beeswax."; break;

                case 8: item = new BlueBook(); msg = "You conjure a book."; break;

                case 9: item = new Bolt(); item.Amount = Utility.RandomMinMax(1, 10); msg = "You conjure some crossbow bolts."; break;

                case 10: item = new Bottle(); msg = "You conjure a bottle."; break;

                case 11: item = new BreadLoaf(); item.Amount = Utility.RandomMinMax(1, 5); msg = "You conjure some bread."; break;

                case 12: item = new Candle(); msg = "You conjure a candle."; break;

                case 13: item = new Club(); msg = "You conjure a club."; break;

                case 14: item = new Dagger(); msg = "You conjure a dagger."; break;

                case 15: item = new DarkYarn(); item.Amount = Utility.RandomMinMax(1, 5); msg = "You conjure some yarn."; break;

                case 16: item = new FloppyHat(); msg = "You conjure a hat."; break;

                case 17: item = new Jar(); msg = "You conjure a jar."; break;

                case 18: item = new Kindling(); item.Amount = Utility.RandomMinMax(1, 5); msg = "You conjure some kindling."; break;

                case 19: item = new Lantern(); msg = "You conjure a lantern."; break;

                case 20: item = new Lockpick(); msg = "You conjure a lockpick."; break;

                case 21: item = new OilCloth(); msg = "You conjure an oil cloth."; break;

                case 22: item = new Pouch(); msg = "You conjure a pouch."; break;

                case 23: item = new Robe(); msg = "You conjure a robe."; break;

                case 24: item = new Shoes(); msg = "You conjure some shoes."; break;

                case 25: item = new SpoolOfThread(); item.Amount = Utility.RandomMinMax(1, 5); msg = "You conjure some thread."; break;

                case 26: item = new TenFootPole(); msg = "You conjure a ten foot pole."; break;

                case 27: item = new Torch(); msg = "You conjure a torch."; break;

                case 28: item = new Waterskin(); msg = "You conjure a waterskin."; break;
                }

                Caster.SendMessage(msg);

                Caster.AddToBackpack(item);

                Caster.FixedParticles(0, 10, 5, 2003, Server.Items.CharacterDatabase.GetMySpellHue(Caster, 0), 0, EffectLayer.RightHand);
                Caster.PlaySound(0x1E2);

                Server.Misc.Research.ConsumeScroll(Caster, true, spellIndex, true);
            }

            FinishSequence();
        }
コード例 #18
0
        public void Target(object o)
        {
            if (o is Item)
            {
                Item targ = (Item)o;

                if (targ is LockableContainer)
                {
                    LockableContainer box = (LockableContainer)targ;
                    if (Multis.BaseHouse.CheckLockedDownOrSecured(box))
                    {
                        // You cannot cast this on a locked down item.
                        Caster.LocalOverheadMessage(MessageType.Regular, 0x22, 501761);
                    }
                    else if (box.Locked || box.LockLevel == 0 || box is ParagonChest)
                    {
                        // Target must be an unlocked chest.
                        Caster.SendLocalizedMessage(501762);
                    }
                    else if (CheckSequence())
                    {
                        SpellHelper.Turn(Caster, box);

                        Point3D loc = box.GetWorldLocation();

                        Effects.SendLocationParticles(
                            EffectItem.Create(loc, box.Map, EffectItem.DefaultDuration),
                            0x376A, 9, 32, Server.Items.CharacterDatabase.GetMySpellHue(Caster, 0), 0, 5020, 0);

                        Effects.PlaySound(loc, box.Map, 0x1FA);

                        // The chest is now locked!
                        Caster.LocalOverheadMessage(MessageType.Regular, 0x3B2, 501763);

                        box.LockLevel = (int)(Caster.Skills[SkillName.Magery].Value);
                        if (box.LockLevel > 90)
                        {
                            box.LockLevel = 90;
                        }
                        if (box.LockLevel < 0)
                        {
                            box.LockLevel = 0;
                        }
                        box.MaxLockLevel  = box.LockLevel + 20;
                        box.RequiredSkill = box.LockLevel;

                        //box.LockLevel = -255; // signal magic lock
                        box.Locked = true;
                    }
                }
                else if (targ is BaseDoor)
                {
                    BaseDoor door = (BaseDoor)targ;
                    if (Server.Items.DoorType.IsDungeonDoor(door))
                    {
                        if (door.Locked == true)
                        {
                            Caster.SendMessage("That door is already locked!");
                        }
                        else
                        {
                            SpellHelper.Turn(Caster, door);

                            Point3D loc = door.GetWorldLocation();

                            Effects.SendLocationParticles(
                                EffectItem.Create(loc, door.Map, EffectItem.DefaultDuration),
                                0x376A, 9, 32, Server.Items.CharacterDatabase.GetMySpellHue(Caster, 0), 0, 5020, 0);

                            Effects.PlaySound(loc, door.Map, 0x1FA);

                            Caster.SendMessage("That door is now locked!");

                            door.Locked = true;
                            Server.Items.DoorType.LockDoors(door);

                            new InternalTimer(door, Caster).Start();
                        }
                    }
                    else
                    {
                        Caster.SendMessage("This spell has no effect on that!");
                    }
                }
                else
                {
                    Caster.SendMessage("This spell has no effect on that!");
                }
            }
            else if (o is PlayerMobile)
            {
                Caster.SendMessage("That soul seems too strong to trap in the flask!");
            }
            else if (o is BaseCreature)
            {
                BaseCreature bc = (BaseCreature)o;

                if (!bc.Alive)
                {
                    Caster.SendMessage("You cannot trap something that is dead!");
                }
                else if (bc.Controlled is LockedCreature)
                {
                    Caster.SendMessage("That creature cannot be trapped again!");
                }
                else if (bc.Controlled == true)
                {
                    Caster.SendMessage("That is under the control of another!");
                }
                else if (bc.EmoteHue == 505 || bc.ControlSlots >= 100)                   // SUMMON QUEST AND QUEST MONSTERS
                {
                    Server.Misc.IntelligentAction.FizzleSpell(Caster);
                    Caster.SendMessage("You are not powerful enough to trap that!");
                }
                else if (Caster.Backpack.FindItemByType(typeof(IronFlask)) == null)
                {
                    Caster.SendMessage("You need an empty iron flask to trap them!");
                }
                else
                {
                    int level  = Server.Misc.DifficultyLevel.GetCreatureLevel((Mobile)o) + 10;
                    int magery = (int)(Caster.Skills[SkillName.Magery].Value);

                    if (magery >= level)
                    {
                        int success = 10 + (magery - level);

                        if (Utility.RandomMinMax(1, 100) > success)
                        {
                            Server.Misc.IntelligentAction.FizzleSpell(Caster);
                            Caster.SendMessage("You fail to trap them in the flask!");
                        }
                        else
                        {
                            Item flask = Caster.Backpack.FindItemByType(typeof(IronFlask));
                            if (flask != null)
                            {
                                flask.Consume();
                            }

                            Caster.SendMessage("You trap " + bc.Name + " in the flask!");

                            IronFlaskFilled bottle = new IronFlaskFilled();

                            int hitpoison = 0;

                            if (bc.HitPoison == Poison.Lesser)
                            {
                                hitpoison = 1;
                            }
                            else if (bc.HitPoison == Poison.Regular)
                            {
                                hitpoison = 2;
                            }
                            else if (bc.HitPoison == Poison.Greater)
                            {
                                hitpoison = 3;
                            }
                            else if (bc.HitPoison == Poison.Deadly)
                            {
                                hitpoison = 4;
                            }
                            else if (bc.HitPoison == Poison.Lethal)
                            {
                                hitpoison = 5;
                            }

                            int immune = 0;

                            if (bc.PoisonImmune == Poison.Lesser)
                            {
                                immune = 1;
                            }
                            else if (bc.PoisonImmune == Poison.Regular)
                            {
                                immune = 2;
                            }
                            else if (bc.PoisonImmune == Poison.Greater)
                            {
                                immune = 3;
                            }
                            else if (bc.PoisonImmune == Poison.Deadly)
                            {
                                immune = 4;
                            }
                            else if (bc.PoisonImmune == Poison.Lethal)
                            {
                                immune = 5;
                            }

                            bottle.TrappedName        = bc.Name;
                            bottle.TrappedTitle       = bc.Title;
                            bottle.TrappedBody        = bc.Body;
                            bottle.TrappedBaseSoundID = bc.BaseSoundID;
                            bottle.TrappedHue         = bc.Hue;

                            // TURN HUMANOIDS TO GHOSTS SO I DON'T NEED TO WORRY ABOUT CLOTHES AND GEAR
                            if (bc.Body == 400 || bc.Body == 401 || bc.Body == 605 || bc.Body == 606)
                            {
                                bottle.TrappedBody        = 0x3CA;
                                bottle.TrappedHue         = 0x9C4;
                                bottle.TrappedBaseSoundID = 0x482;
                            }

                            bottle.TrappedAI = 2; if (bc.AI == AIType.AI_Mage)
                            {
                                bottle.TrappedAI = 1;
                            }
                            bottle.TrappedStr          = bc.RawStr;
                            bottle.TrappedDex          = bc.RawDex;
                            bottle.TrappedInt          = bc.RawInt;
                            bottle.TrappedHits         = bc.HitsMax;
                            bottle.TrappedStam         = bc.StamMax;
                            bottle.TrappedMana         = bc.ManaMax;
                            bottle.TrappedDmgMin       = bc.DamageMin;
                            bottle.TrappedDmgMax       = bc.DamageMax;
                            bottle.TrappedColdDmg      = bc.ColdDamage;
                            bottle.TrappedEnergyDmg    = bc.EnergyDamage;
                            bottle.TrappedFireDmg      = bc.FireDamage;
                            bottle.TrappedPhysicalDmg  = bc.PhysicalDamage;
                            bottle.TrappedPoisonDmg    = bc.PoisonDamage;
                            bottle.TrappedColdRst      = bc.ColdResistSeed;
                            bottle.TrappedEnergyRst    = bc.EnergyResistSeed;
                            bottle.TrappedFireRst      = bc.FireResistSeed;
                            bottle.TrappedPhysicalRst  = bc.PhysicalResistanceSeed;
                            bottle.TrappedPoisonRst    = bc.PoisonResistSeed;
                            bottle.TrappedVirtualArmor = bc.VirtualArmor;
                            bottle.TrappedCanSwim      = bc.CanSwim;
                            bottle.TrappedCantWalk     = bc.CantWalk;
                            bottle.TrappedSkills       = level + 5;
                            bottle.TrappedPoison       = hitpoison;
                            bottle.TrappedImmune       = immune;
                            bottle.TrappedAngerSound   = bc.GetAngerSound();
                            bottle.TrappedIdleSound    = bc.GetIdleSound();
                            bottle.TrappedDeathSound   = bc.GetDeathSound();
                            bottle.TrappedAttackSound  = bc.GetAttackSound();
                            bottle.TrappedHurtSound    = bc.GetHurtSound();

                            Caster.BoltEffect(0);
                            Caster.PlaySound(0x665);

                            Caster.AddToBackpack(bottle);

                            bc.BoltEffect(0);
                            bc.PlaySound(0x665);
                            bc.Delete();
                        }
                    }
                    else
                    {
                        Server.Misc.IntelligentAction.FizzleSpell(Caster);
                        Caster.SendMessage("You are not powerful enough to trap that!");
                    }
                }
            }

            FinishSequence();
        }