Exemplo n.º 1
0
        public override bool IsEnemy(Mobile m)
        {
            if (!IntelligentAction.GetMyEnemies(m, this, true))
            {
                return(false);
            }

            if (m.Region != this.Region && !Server.Misc.MyServerSettings.GuardsPatrolOutside())
            {
                return(false);
            }

            m.Criminal = true;

            if (Server.Misc.MyServerSettings.GuardsSentenceDeath() || (m is BaseCreature && ((BaseCreature)m).ControlMaster == null))
            {
                //Effects.SendLocationParticles( EffectItem.Create( this.Location, this.Map, EffectItem.DefaultDuration ), 0x3728, 8, 20, 5042 );
                //Effects.PlaySound( this, this.Map, 0x201 );
                this.Location  = m.Location;
                this.Combatant = m;
                this.Warmode   = true;
                //Effects.SendLocationParticles( EffectItem.Create( this.Location, this.Map, EffectItem.DefaultDuration ), 0x3728, 8, 20, 5042 );
                //Effects.PlaySound( this, this.Map, 0x201 );
            }

            return(true);
        }
Exemplo n.º 2
0
        public override bool OnDragDrop(Mobile from, Item dropped)
        {
            if (dropped is JokeBook)
            {
                if (from.Blessed)
                {
                    string sSay = "I cannot deal with you while you are in that state.";
                    this.PrivateOverheadMessage(MessageType.Regular, 1153, false, sSay, from.NetState);
                    return(false);
                }
                else if (IntelligentAction.GetMyEnemies(from, this, false) == true)
                {
                    string sSay = "I don't think I should accept that from you.";
                    this.PrivateOverheadMessage(MessageType.Regular, 1153, false, sSay, from.NetState);
                    return(false);
                }
                else
                {
                    if (Utility.RandomBool())
                    {
                        GiftJesterHat hat = new GiftJesterHat();
                        hat.Name     = "Magical Jester Hat";
                        hat.Hue      = 0;
                        hat.ItemID   = Utility.RandomList(0x171C, 0x4C15);
                        hat.m_Owner  = from;
                        hat.m_Gifter = "Chuckles the Jester";
                        hat.m_How    = "Given to";
                        hat.m_Points = Utility.RandomMinMax(80, 100);

                        from.AddToBackpack(hat);
                        from.SendMessage("Chuckles gave you one of his hats!");
                    }
                    else
                    {
                        GiftFancyDress coat = new GiftFancyDress();
                        coat.Name     = "Magical Jester Suit";
                        coat.Hue      = 0;
                        coat.ItemID   = Utility.RandomList(0x1f9f, 0x1fa0, 0x4C16, 0x4C17, 0x2B6B);
                        coat.m_Owner  = from;
                        coat.m_Gifter = "Chuckles the Jester";
                        coat.m_How    = "Given to";
                        coat.m_Points = Utility.RandomMinMax(80, 100);

                        from.AddToBackpack(coat);
                        from.SendMessage("Chuckles gave you one of his suits!");
                    }
                    this.Say("Thank you, " + from.Name + "! I am always looking for some new jokes.");
                    from.SendSound(0x3D);
                    dropped.Delete();
                    from.SendMessage("Single click on it to customize it.");
                    return(true);
                }
            }

            return(base.OnDragDrop(from, dropped));
        }
Exemplo n.º 3
0
        public override bool IsEnemy(Mobile m)
        {
            if (IntelligentAction.GetMyEnemies(m, this, true) == false)
            {
                return(false);
            }

            if (m.Region != this.Region && !(m is PlayerMobile))
            {
                return(false);
            }

            m.Criminal = true;
            return(true);
        }
Exemplo n.º 4
0
 public override void OnAfterSpawn()
 {
     if (Utility.RandomBool())
     {
         IntelligentAction.GiveBasicWepShld(this);
         if (this.FindItemOnLayer(Layer.OneHanded) != null)
         {
             MorphingTime.MakeSpaceAceItem(this.FindItemOnLayer(Layer.OneHanded), this);
         }
         if (this.FindItemOnLayer(Layer.TwoHanded) != null)
         {
             MorphingTime.MakeSpaceAceItem(this.FindItemOnLayer(Layer.TwoHanded), this);
         }
     }
     base.OnAfterSpawn();
 }
Exemplo n.º 5
0
        public SavageAlien() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
        {
            Name = "an alien savage";

            Hue = Utility.RandomList(0x6F6, 0x97F, 0x99B, 0x6E4, 0x5E0, 0xB38, 0xB2B);

            string metal = Server.Misc.MorphingTime.GetSpaceAceMetalName();
            string cloth = Server.Misc.MorphingTime.GetSpaceAceClothName();
            string bone  = Server.Misc.MorphingTime.GetSpaceAceBoneName();
            string wood  = Server.Misc.MorphingTime.GetSpaceAceWoodName();

            if (Female = Utility.RandomBool())
            {
                Body = 401;
            }
            else
            {
                Body = 400;
            }

            SetStr(336, 385);
            SetDex(281, 305);
            SetInt(96, 115);

            SetHits(202, 231);
            SetMana(0);

            SetDamage(7, 23);

            SetDamageType(ResistanceType.Physical, 100);

            SetResistance(ResistanceType.Physical, 45, 55);
            SetResistance(ResistanceType.Fire, 30, 40);
            SetResistance(ResistanceType.Cold, 30, 40);
            SetResistance(ResistanceType.Poison, 40, 50);
            SetResistance(ResistanceType.Energy, 40, 50);

            SetSkill(SkillName.MagicResist, 125.1, 140.0);
            SetSkill(SkillName.Tactics, 90.1, 100.0);
            SetSkill(SkillName.Wrestling, 90.1, 100.0);

            SetSkill(SkillName.Fencing, 125.1, 140.0);
            SetSkill(SkillName.Macing, 125.1, 140.0);
            SetSkill(SkillName.Wrestling, 125.1, 140.0);
            SetSkill(SkillName.MagicResist, 67.5, 100.0);
            SetSkill(SkillName.Swords, 125.1, 140.0);
            SetSkill(SkillName.Tactics, 125.1, 140.0);

            Fame  = 10000;
            Karma = -10000;

            VirtualArmor = 50;

            Item cloth1 = new SavageArms();

            MorphingTime.MakeSpaceAceBoneArmor(cloth1, bone, false);
            AddItem(cloth1);
            Item cloth2 = new SavageLegs();

            MorphingTime.MakeSpaceAceBoneArmor(cloth2, bone, false);
            AddItem(cloth2);
            Item cloth3 = new LeatherSkirt();

            cloth3.Name = "skin skirt";
            MorphingTime.MakeSpaceAceBoneArmor(cloth3, bone, true);
            cloth3.Layer = Layer.Waist;
            AddItem(cloth3);

            switch (Utility.RandomMinMax(0, 3))
            {
            case 0: Item cloth4 = new OrcHelm(); MorphingTime.MakeSpaceAceBoneArmor(cloth4, bone, false); AddItem(cloth4); break;

            case 1: Item cloth5 = new SavageHelm(); MorphingTime.MakeSpaceAceBoneArmor(cloth5, bone, false); AddItem(cloth5); break;

            case 2: Item cloth6 = new TribalMask(); cloth6.Name = "skin mask"; MorphingTime.MakeSpaceAceBoneArmor(cloth6, bone, true); AddItem(cloth6); break;
            }

            if (Utility.RandomMinMax(1, 10) == 1)
            {
                Item cloth7 = new SavageChest();
                MorphingTime.MakeSpaceAceBoneArmor(cloth7, bone, false);
                AddItem(cloth7);
            }
            else if (Female)
            {
                Item cloth8 = new FemaleLeatherChest();
                cloth8.Name = "skin tunic";
                MorphingTime.MakeSpaceAceBoneArmor(cloth8, bone, true);
                AddItem(cloth8);
            }

            IntelligentAction.GiveBasicWepShld(this);

            if (this.FindItemOnLayer(Layer.OneHanded) != null)
            {
                if (MaterialInfo.IsAnyKindOfMetalItem(this.FindItemOnLayer(Layer.OneHanded)))
                {
                    MorphingTime.MakeSpaceAceMetalArmorWeapon(this.FindItemOnLayer(Layer.OneHanded), metal);
                }
                else if (MaterialInfo.IsAnyKindOfClothItem(this.FindItemOnLayer(Layer.OneHanded)))
                {
                    MorphingTime.MakeSpaceAceClothArmorWeapon(this.FindItemOnLayer(Layer.OneHanded), cloth);
                }
                else if (MaterialInfo.IsAnyKindOfWoodItem(this.FindItemOnLayer(Layer.OneHanded)))
                {
                    MorphingTime.MakeSpaceAceWoodArmorWeapon(this.FindItemOnLayer(Layer.OneHanded), wood);
                }
            }

            if (this.FindItemOnLayer(Layer.TwoHanded) != null)
            {
                Item hand = this.FindItemOnLayer(Layer.TwoHanded);

                if (hand is BaseShield)
                {
                    switch (Utility.RandomMinMax(1, 4))
                    {
                    case 1: hand.ItemID = 0x1B76; hand.Name = "hull plate";         break;

                    case 2: hand.ItemID = 0x1B76; hand.Name = "deck plate";         break;

                    case 3: hand.ItemID = 0x1B72; hand.Name = "hatch door";         break;

                    case 4: hand.ItemID = 0x1B7B; hand.Name = "hatch cover";        break;
                    }
                    MorphingTime.MakeSpaceAceMetalArmorWeapon(hand, metal);
                }
                else if (MaterialInfo.IsAnyKindOfMetalItem(hand))
                {
                    MorphingTime.MakeSpaceAceMetalArmorWeapon(hand, metal);
                }
                else if (MaterialInfo.IsAnyKindOfClothItem(hand))
                {
                    MorphingTime.MakeSpaceAceClothArmorWeapon(hand, cloth);
                }
                else if (MaterialInfo.IsAnyKindOfWoodItem(hand))
                {
                    MorphingTime.MakeSpaceAceWoodArmorWeapon(hand, wood);
                }
            }
        }
Exemplo n.º 6
0
        public override bool OnDragDrop(Mobile from, Item dropped)
        {
            if (dropped is PirateBounty)
            {
                if (IntelligentAction.GetMyEnemies(from, this, false) == true)
                {
                    string sSay = "You shouldn't be carrying that around with you.";
                    this.PrivateOverheadMessage(MessageType.Regular, 1153, false, sSay, from.NetState);
                }
                else
                {
                    PirateBounty bounty   = (PirateBounty)dropped;
                    int          fame     = (int)(bounty.BountyValue / 5);
                    int          karma    = -1 * fame;
                    int          gold     = bounty.BountyValue;
                    string       sMessage = "";
                    string       sReward  = "Here is " + gold.ToString() + " gold for you.";

                    switch (Utility.RandomMinMax(0, 9))
                    {
                    case 0: sReward = "Here is " + gold.ToString() + " gold for you.";                                                      break;

                    case 1: sReward = "Take this " + gold.ToString() + " gold for your trouble.";                           break;

                    case 2: sReward = "The reward is " + gold.ToString() + " gold.";                                                        break;

                    case 3: sReward = "Here is " + gold.ToString() + " gold for the bounty.";                                       break;

                    case 4: sReward = "The bounty is " + gold.ToString() + " gold for this one.";                           break;

                    case 5: sReward = "Here is your reward of " + gold.ToString() + " gold";                                        break;

                    case 6: sReward = "You can have this " + gold.ToString() + " gold for the bounty.";                     break;

                    case 7: sReward = "There is a reward of " + gold.ToString() + " gold for this one.";            break;

                    case 8: sReward = "This one was worth " + gold.ToString() + " gold for their crimes.";          break;

                    case 9: sReward = "Their crimes called for a bounty of " + gold.ToString() + " gold.";          break;
                    }

                    Titles.AwardKarma(from, karma, true);
                    Titles.AwardFame(from, fame, true);
                    from.SendSound(0x2E6);
                    from.AddToBackpack(new Gold(gold));

                    switch (Utility.RandomMinMax(0, 9))
                    {
                    case 0: sMessage = "We have been looking for this pirate. " + sReward;  break;

                    case 1: sMessage = "I have heard of this pirate before. " + sReward;    break;

                    case 2: sMessage = "I never thought I would see this pirate brought to justice. " + sReward;    break;

                    case 3: sMessage = "This pirate will plunder no more. " + sReward;      break;

                    case 4: sMessage = "Our galleons are safer now. " + sReward;    break;

                    case 5: sMessage = "The sea is safer because of you. " + sReward;       break;

                    case 6: sMessage = "The sailors at the docks will not believe this. " + sReward;        break;

                    case 7: sMessage = "I have only heard stories about this pirate. " + sReward;   break;

                    case 8: sMessage = "How did you come across this pirate? " + sReward;   break;

                    case 9: sMessage = "Where did you find this pirate? " + sReward;        break;
                    }
                    this.PrivateOverheadMessage(MessageType.Regular, 1153, false, sMessage, from.NetState);
                    dropped.Delete();
                    return(true);
                }
            }
            else if (dropped is Head && !from.Blessed)
            {
                if (IntelligentAction.GetMyEnemies(from, this, false) == true)
                {
                    string sSay = "You shouldn't be carrying that around with you.";
                    this.PrivateOverheadMessage(MessageType.Regular, 1153, false, sSay, from.NetState);
                }
                else
                {
                    Head   head     = (Head)dropped;
                    int    karma    = 0;
                    int    gold     = 0;
                    string sMessage = "";
                    string sReward  = "Here is " + gold.ToString() + " gold for you.";

                    if (head.m_Job == "Thief")
                    {
                        karma = Utility.RandomMinMax(40, 60);
                        gold  = Utility.RandomMinMax(80, 120);
                    }
                    else if (head.m_Job == "Bandit")
                    {
                        karma = Utility.RandomMinMax(20, 30);
                        gold  = Utility.RandomMinMax(30, 40);
                    }
                    else if (head.m_Job == "Brigand")
                    {
                        karma = Utility.RandomMinMax(30, 40);
                        gold  = Utility.RandomMinMax(50, 80);
                    }
                    else if (head.m_Job == "Pirate")
                    {
                        karma = Utility.RandomMinMax(90, 110);
                        gold  = Utility.RandomMinMax(120, 160);
                    }
                    else if (head.m_Job == "Assassin")
                    {
                        karma = Utility.RandomMinMax(60, 80);
                        gold  = Utility.RandomMinMax(100, 140);
                    }

                    switch (Utility.RandomMinMax(0, 9))
                    {
                    case 0: sReward = "Here is " + gold.ToString() + " gold for you.";                                                      break;

                    case 1: sReward = "Take this " + gold.ToString() + " gold for your trouble.";                           break;

                    case 2: sReward = "The reward is " + gold.ToString() + " gold.";                                                        break;

                    case 3: sReward = "Here is " + gold.ToString() + " gold for the bounty.";                                       break;

                    case 4: sReward = "The bounty is " + gold.ToString() + " gold for this one.";                           break;

                    case 5: sReward = "Here is your reward of " + gold.ToString() + " gold";                                        break;

                    case 6: sReward = "You can have this " + gold.ToString() + " gold for the bounty.";                     break;

                    case 7: sReward = "There is a reward of " + gold.ToString() + " gold for this one.";            break;

                    case 8: sReward = "This one was worth " + gold.ToString() + " gold for their crimes.";          break;

                    case 9: sReward = "Their crimes called for a bounty of " + gold.ToString() + " gold.";          break;
                    }

                    if (head.m_Job == "Thief" || head.m_Job == "Bandit" || head.m_Job == "Brigand")
                    {
                        Titles.AwardKarma(from, karma, true);
                        from.SendSound(0x2E6);
                        from.AddToBackpack(new Gold(gold));

                        switch (Utility.RandomMinMax(0, 9))
                        {
                        case 0: sMessage = "We have been looking for this rogue. " + sReward;   break;

                        case 1: sMessage = "I have heard of this thief before. " + sReward;     break;

                        case 2: sMessage = "I never thought I would see this bandit brought to justice. " + sReward;    break;

                        case 3: sMessage = "This rouge will steal no more. " + sReward; break;

                        case 4: sMessage = "Our gold purses are safer now. " + sReward; break;

                        case 5: sMessage = "The land is safer because of you. " + sReward;      break;

                        case 6: sMessage = "The others at the guard house will not believe this. " + sReward;   break;

                        case 7: sMessage = "I have only heard stories about this rogue. " + sReward;    break;

                        case 8: sMessage = "How did you come across this thief? " + sReward;    break;

                        case 9: sMessage = "Where did you find this sneak? " + sReward; break;
                        }
                        this.PrivateOverheadMessage(MessageType.Regular, 1153, false, sMessage, from.NetState);
                        dropped.Delete();
                        return(true);
                    }
                    else if (head.m_Job == "Pirate")
                    {
                        Titles.AwardKarma(from, karma, true);
                        from.SendSound(0x2E6);
                        from.AddToBackpack(new Gold(gold));

                        switch (Utility.RandomMinMax(0, 9))
                        {
                        case 0: sMessage = "We have been looking for this pirate. " + sReward;  break;

                        case 1: sMessage = "I have heard of this pirate before. " + sReward;    break;

                        case 2: sMessage = "I never thought I would see this pirate brought to justice. " + sReward;    break;

                        case 3: sMessage = "This pirate will plunder no more. " + sReward;      break;

                        case 4: sMessage = "Our galleons are safer now. " + sReward;    break;

                        case 5: sMessage = "The sea is safer because of you. " + sReward;       break;

                        case 6: sMessage = "The sailors at the docks will not believe this. " + sReward;        break;

                        case 7: sMessage = "I have only heard stories about this pirate. " + sReward;   break;

                        case 8: sMessage = "How did you come across this pirate? " + sReward;   break;

                        case 9: sMessage = "Where did you find this pirate? " + sReward;        break;
                        }
                        this.PrivateOverheadMessage(MessageType.Regular, 1153, false, sMessage, from.NetState);
                        dropped.Delete();
                        return(true);
                    }
                    else if (head.m_Job == "Assassin")
                    {
                        Titles.AwardKarma(from, karma, true);
                        from.SendSound(0x2E6);
                        from.AddToBackpack(new Gold(gold));

                        switch (Utility.RandomMinMax(0, 9))
                        {
                        case 0: sMessage = "We have been living in fear of this one. " + sReward;       break;

                        case 1: sMessage = "I have heard others speak of this assassin. " + sReward;    break;

                        case 2: sMessage = "I never thought this assassin existed. " + sReward; break;

                        case 3: sMessage = "This assassin will kill no more. " + sReward;       break;

                        case 4: sMessage = "Our nobles are safer now. " + sReward;      break;

                        case 5: sMessage = "The shadows are less feared because of you. " + sReward;    break;

                        case 6: sMessage = "Those in the tavern will not believe this. " + sReward;     break;

                        case 7: sMessage = "I have only heard rumors about this assassin. " + sReward;  break;

                        case 8: sMessage = "It is good to see this assassin did not best you. " + sReward;      break;

                        case 9: sMessage = "How did you survive this assassin? " + sReward;     break;
                        }
                        this.PrivateOverheadMessage(MessageType.Regular, 1153, false, sMessage, from.NetState);
                        dropped.Delete();
                        return(true);
                    }
                    else
                    {
                        this.PrivateOverheadMessage(MessageType.Regular, 1153, false, "I assume they done you harm. Let me rid you of this thing.", from.NetState);
                        dropped.Delete();
                        return(true);
                    }
                }
            }

            return(base.OnDragDrop(from, dropped));
        }
Exemplo n.º 7
0
        public void Target(object obj)
        {
            if (obj is Corpse)
            {
                Corpse c = (Corpse)obj;
                Mobile m = c.m_Owner;

                if (m is BaseCreature)
                {
                    SlayerEntry undead    = SlayerGroup.GetEntryByName(SlayerName.Silver);
                    SlayerEntry exorcism  = SlayerGroup.GetEntryByName(SlayerName.Exorcism);
                    SlayerEntry animal    = SlayerGroup.GetEntryByName(SlayerName.AnimalHunter);
                    SlayerEntry golems    = SlayerGroup.GetEntryByName(SlayerName.GolemDestruction);
                    SlayerEntry plants    = SlayerGroup.GetEntryByName(SlayerName.WeedRuin);
                    SlayerEntry repond    = SlayerGroup.GetEntryByName(SlayerName.Repond);
                    SlayerEntry dragon    = SlayerGroup.GetEntryByName(SlayerName.DragonSlaying);
                    SlayerEntry reptile   = SlayerGroup.GetEntryByName(SlayerName.ReptilianDeath);
                    SlayerEntry spider    = SlayerGroup.GetEntryByName(SlayerName.ArachnidDoom);
                    SlayerEntry elemental = SlayerGroup.GetEntryByName(SlayerName.ElementalBan);
                    SlayerEntry wizard    = SlayerGroup.GetEntryByName(SlayerName.WizardSlayer);
                    SlayerEntry birds     = SlayerGroup.GetEntryByName(SlayerName.AvianHunter);
                    SlayerEntry slime     = SlayerGroup.GetEntryByName(SlayerName.SlimyScourge);
                    SlayerEntry giant     = SlayerGroup.GetEntryByName(SlayerName.GiantKiller);
                    SlayerEntry water     = SlayerGroup.GetEntryByName(SlayerName.NeptunesBane);
                    SlayerEntry fey       = SlayerGroup.GetEntryByName(SlayerName.Fey);

                    int level_corpse = IntelligentAction.GetCreatureLevel(m);
                    int level_caster = (int)((Caster.Skills[SkillName.Necromancy].Value + Caster.Skills[SkillName.SpiritSpeak].Value) / 2);
                    if (level_caster > 100)
                    {
                        level_caster = 100;
                    }

                    int slots_max = (int)(level_corpse / 20);
                    if (slots_max > 5)
                    {
                        slots_max = 5;
                    }
                    if (slots_max < 1)
                    {
                        slots_max = 1;
                    }
                    int slots_limit = Caster.FollowersMax - Caster.Followers;

                    if (undead.Slays(m))
                    {
                        Caster.SendMessage("You cannot animate supernatural creatures!");
                    }
                    else if (golems.Slays(m))
                    {
                        Caster.SendMessage("You cannot animate constructs!");
                    }
                    else if (level_corpse > level_caster)
                    {
                        Caster.SendMessage("You are not powerful enough to animate that!");
                    }
                    else if (slots_limit >= slots_max)
                    {
                        TimeSpan duration = TimeSpan.FromSeconds(((Caster.Skills[SkillName.Necromancy].Value + Caster.Skills[SkillName.SpiritSpeak].Value) / 2) * 9);

                        BaseCreature bc = (BaseCreature)m;

                        int myBody = bc.Body;
                        if (m.TithingPoints > 0 && bc.Body != 400 && bc.Body != 401)
                        {
                            myBody = m.TithingPoints;
                        }                                                                                                                           // STORED ORIGINAL BODY VALUE DURING ONAFTERSPAWN IN BASECREATURE.CS

                        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;
                        }

                        // THIS MODIFIES THE MONSTER BASED ON THE LEVEL OF THE CORPSE AND THE SKILLS OF THE CASTER
                        // TO GET A ANIMATED CREATURE WITH FULL STATS, A CASTER NEEDS A 125 IN BOTH SKILLS
                        int    modify = level_caster - (level_corpse + 50);
                        double mod    = 1.0;
                        if (modify < 0)
                        {
                            int lower = (level_corpse + 50) - level_caster;
                            mod = (100 - lower) * 0.01;
                        }

                        BaseCreature creature = new SummonedCorpse((int)(mod * bc.HitsMax), (int)(mod * bc.StamMax), (int)(mod * bc.ManaMax), (int)(mod * bc.RawStr), (int)(mod * bc.RawDex), (int)(mod * bc.RawInt), hitpoison, immune);

                        creature.DamageMin              = (int)(mod * bc.DamageMin);
                        creature.DamageMax              = (int)(mod * bc.DamageMax);
                        creature.ColdDamage             = (int)(mod * bc.ColdDamage);
                        creature.EnergyDamage           = (int)(mod * bc.EnergyDamage);
                        creature.FireDamage             = (int)(mod * bc.FireDamage);
                        creature.PhysicalDamage         = (int)(mod * bc.PhysicalDamage);
                        creature.PoisonDamage           = (int)(mod * bc.PoisonDamage);
                        creature.ColdResistSeed         = (int)(mod * bc.ColdResistSeed);
                        creature.EnergyResistSeed       = (int)(mod * bc.EnergyResistSeed);
                        creature.FireResistSeed         = (int)(mod * bc.FireResistSeed);
                        creature.PhysicalResistanceSeed = (int)(mod * bc.PhysicalResistanceSeed);
                        creature.PoisonResistSeed       = (int)(mod * bc.PoisonResistSeed);
                        creature.VirtualArmor           = (int)(mod * bc.VirtualArmor);
                        creature.CanSwim = bc.CanSwim;
                        if (creature.CanSwim)
                        {
                            creature.CantWalk = bc.CantWalk;
                        }
                        creature.ControlSlots = slots_max;

                        BaseCreature b = (BaseCreature)m;

                        creature.AI = AIType.AI_Melee;
                        bool mage = false;

                        if (b.AI == AIType.AI_Mage)
                        {
                            creature.AI = AIType.AI_Mage; mage = true;
                        }

                        SpellHelper.Summon(creature, Caster, 0x216, duration, false, false);

                        creature.Body = myBody;

                        string ghost = " creature";
                        if (exorcism.Slays(bc))
                        {
                            ghost = " demon";
                        }
                        else if (animal.Slays(bc))
                        {
                            ghost = " animal";
                        }
                        else if (plants.Slays(bc))
                        {
                            ghost = " weed";
                        }
                        else if (dragon.Slays(bc))
                        {
                            ghost = " dragon";
                        }
                        else if (reptile.Slays(bc))
                        {
                            ghost = " reptile";
                        }
                        else if (spider.Slays(bc))
                        {
                            ghost = " insect";
                        }
                        else if (elemental.Slays(bc))
                        {
                            ghost = " necromental";
                        }
                        else if (birds.Slays(bc))
                        {
                            ghost = " bird";
                        }
                        else if (slime.Slays(bc))
                        {
                            ghost = " slime";
                        }
                        else if (giant.Slays(bc))
                        {
                            ghost = " giant";
                        }
                        else if (repond.Slays(bc))
                        {
                            ghost = "";
                        }

                        // ZOMBIES //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                        creature.Hue         = Utility.RandomList(0xB97, 0xB98, 0xB99, 0xB9A, 0xB85, 0xB79, 0xB5F, 0xB60, 0xB19, 0xACC, 0xACD, 0xACE, 0xACF, 0xAB0, 0x938, 0x92D);
                        creature.BaseSoundID = 471;
                        if (bc.Body == 400 || bc.Body == 401 || bc.Body == 605 || bc.Body == 606)
                        {
                            creature.Body = Utility.RandomList(3, 728, 305, 181, 304, 307);
                        }
                        switch (Utility.RandomMinMax(0, 5))
                        {
                        case 0: creature.Name = "a zombie" + ghost;             break;

                        case 1: creature.Name = "a dead" + ghost;               break;

                        case 2: creature.Name = "a rotten" + ghost;             break;

                        case 3: creature.Name = "an undead" + ghost;    break;

                        case 4: creature.Name = "a rotting" + ghost;    break;

                        case 5: creature.Name = "a decaying" + ghost;   break;
                        }

                        // GHOSTS ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                        if (mage)
                        {
                            creature.Hue         = Utility.RandomList(0x4001, 0x4001, 1150, 0x9C2);
                            creature.BaseSoundID = 0x482;
                            if (bc.Body == 400 || bc.Body == 401 || bc.Body == 605 || bc.Body == 606)
                            {
                                creature.Body = Utility.RandomList(0x3CA, 310, 26, 84);
                            }
                            switch (Utility.RandomMinMax(0, 6))
                            {
                            case 0: creature.Name = "a wraith" + ghost;                     break;

                            case 1: creature.Name = "a ghostly" + ghost;            break;

                            case 2: creature.Name = "a spectral" + ghost;           break;

                            case 3: creature.Name = "a haunting" + ghost;           break;

                            case 4: creature.Name = "a phantasmal" + ghost;         break;

                            case 5: creature.Name = "a phantom" + ghost;            break;

                            case 6: creature.Name = "a banshee" + ghost;            break;
                            }
                        }

                        // SKELETONS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                        if (repond.Slays(bc) && ghost == "" && Utility.RandomMinMax(0, 1) == 1 && !mage)                             // MAKE INTO SKELETON
                        {
                            creature.Body = Utility.RandomList(57, 168, 170, 247, 327, 50, 56, 167);
                            creature.Hue  = 0;
                            if (creature.Body == 327)
                            {
                                creature.Hue = 0x9C4;
                            }
                            creature.BaseSoundID = 451;

                            switch (Utility.RandomMinMax(0, 6))
                            {
                            case 0: ghost = " warrior";             break;

                            case 1: ghost = " knight";              break;

                            case 2: ghost = " fighter";             break;

                            case 3: ghost = " champion";    break;

                            case 4: ghost = " crusader";    break;

                            case 5: ghost = " soldier";             break;

                            case 6: ghost = " guard";               break;
                            }

                            switch (Utility.RandomMinMax(0, 2))
                            {
                            case 0: creature.Name = "a skeletal" + ghost;   break;

                            case 1: creature.Name = "a bone" + ghost;               break;

                            case 2: creature.Name = "a skeleton" + ghost;   break;
                            }
                        }
                        else if (repond.Slays(bc) && wizard.Slays(bc) && Utility.RandomMinMax(0, 1) == 1 && ghost == "" && mage)
                        {
                            creature.Body        = Utility.RandomList(148, 110, 24);
                            creature.Hue         = 0;
                            creature.BaseSoundID = 0x3E9;

                            switch (Utility.RandomMinMax(0, 6))
                            {
                            case 0: ghost = " wizard";              break;

                            case 1: ghost = " mage";                break;

                            case 2: ghost = " sorcerer";    break;

                            case 3: ghost = " conjurer";    break;

                            case 4: ghost = " magician";    break;

                            case 5: ghost = " warlock";             break;

                            case 6: ghost = " enchanter";   break;
                            }

                            switch (Utility.RandomMinMax(0, 2))
                            {
                            case 0: creature.Name = "a skeletal" + ghost;   break;

                            case 1: creature.Name = "a bone" + ghost;               break;

                            case 2: creature.Name = "a skeleton" + ghost;   break;
                            }
                        }
                        else if (dragon.Slays(bc) && Utility.RandomMinMax(0, 1) == 1 && bc.Fame >= 15000 && ghost != "")
                        {
                            creature.Hue         = Utility.RandomList(0x83B, 0x89F, 0x8A0, 0x8A1, 0x8A2, 0x8A3, 0x8A4);
                            creature.BaseSoundID = 471;
                            switch (Utility.RandomMinMax(0, 5))
                            {
                            case 0: creature.Name = "a zombie" + ghost;             break;

                            case 1: creature.Name = "a dead" + ghost;               break;

                            case 2: creature.Name = "a rotten" + ghost;             break;

                            case 3: creature.Name = "an undead" + ghost;    break;

                            case 4: creature.Name = "a rotting" + ghost;    break;

                            case 5: creature.Name = "a decaying" + ghost;   break;
                            }

                            if (Utility.RandomMinMax(0, 1) == 1)
                            {
                                creature.Body        = Utility.RandomList(104, 323, 323);
                                creature.BaseSoundID = 0x488;
                                creature.Hue         = 0;

                                switch (Utility.RandomMinMax(0, 2))
                                {
                                case 0: creature.Name = "a skeletal" + ghost;   break;

                                case 1: creature.Name = "a bone" + ghost;               break;

                                case 2: creature.Name = "a skeleton" + ghost;   break;
                                }
                            }
                        }
                        else if (giant.Slays(bc) && Utility.RandomMinMax(0, 1) == 1 && ghost != "")
                        {
                            creature.Body = 999;

                            if (Utility.RandomMinMax(0, 1) == 1)
                            {
                                creature.Body        = 308;
                                creature.BaseSoundID = 0x4FB;
                                creature.Hue         = 0;

                                switch (Utility.RandomMinMax(0, 2))
                                {
                                case 0: creature.Name = "a skeletal" + ghost;   break;

                                case 1: creature.Name = "a bone" + ghost;               break;

                                case 2: creature.Name = "a skeleton" + ghost;   break;
                                }
                            }
                        }
                        else if (exorcism.Slays(bc) && Utility.RandomMinMax(0, 5) == 1 && ghost != "")
                        {
                            creature.Body        = 339;
                            creature.BaseSoundID = 0x48D;
                            creature.Hue         = 0x80F;

                            switch (Utility.RandomMinMax(0, 2))
                            {
                            case 0: creature.Name = "a skeletal" + ghost;   break;

                            case 1: creature.Name = "a bone" + ghost;               break;

                            case 2: creature.Name = "a skeleton" + ghost;   break;
                            }
                        }

                        if (mage)
                        {
                            creature.SetSkill(SkillName.Meditation, (mod * bc.Skills[SkillName.Meditation].Value));
                            creature.SetSkill(SkillName.EvalInt, (mod * bc.Skills[SkillName.EvalInt].Value));
                            creature.SetSkill(SkillName.Magery, (mod * bc.Skills[SkillName.Magery].Value));
                            creature.SetSkill(SkillName.MagicResist, (mod * bc.Skills[SkillName.MagicResist].Value));
                            creature.SetSkill(SkillName.Tactics, (mod * bc.Skills[SkillName.Tactics].Value));
                            creature.SetSkill(SkillName.Wrestling, (mod * bc.Skills[SkillName.Wrestling].Value));
                        }
                        else
                        {
                            creature.SetSkill(SkillName.MagicResist, (mod * bc.Skills[SkillName.MagicResist].Value));
                            creature.SetSkill(SkillName.Tactics, (mod * bc.Skills[SkillName.Tactics].Value));
                            creature.SetSkill(SkillName.Wrestling, (mod * bc.Skills[SkillName.Wrestling].Value));
                        }

                        creature.Location = c.Location;
                        Effects.SendLocationEffect(creature.Location, creature.Map, 0x3400, 60, 0, 0);
                        Effects.PlaySound(creature.Location, creature.Map, 0x108);

                        c.Delete();
                    }
                    else
                    {
                        Caster.SendLocalizedMessage(1049645);                           // You have too many followers to summon that creature.
                    }
                }
                else
                {
                    Caster.SendLocalizedMessage(1061084);                       // You cannot animate that.
                }
            }
            else
            {
                Caster.SendLocalizedMessage(1061084);                   // You cannot animate that.
            }

            FinishSequence();
        }