SIEGED LANDS

UOR


All times are UTC - 5 hours




Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: March MOTM
PostPosted: Sat Mar 13, 2010 2:32 am 
Site Admin
User avatar

Joined: Tue Oct 20, 2009 3:32 pm
Posts: 334
This is Saint Patrick. based on Barracoon. His semi rare loot drop already exist in this forums. Either download the Decorative Box or replace with your own loot. Script crafted for RunUO 2.0 RC2.

Code:
using System;
using Server;
using Server.Items;
using Server.Spells;
using Server.Spells.Seventh;
using Server.Spells.Fifth;
using Server.Engines.CannedEvil;

namespace Server.Mobiles
{
   public class SaintPatrick : BaseChampion
   {
      public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Venom; } }

      [Constructable]
      public SaintPatrick() : base( AIType.AI_Melee )
      {
         Name = "Patrick";
         Title = "the Saint";
         Body = 0x190;
         Hue = 0x83EC;
         BaseSoundID = 0x452;

         SetStr( 705, 825 );
         SetDex( 92, 150 );
         SetInt( 505, 750 );

         SetHits( 4200 );
         SetStam( 102, 300 );

         SetDamage( 25, 35 );

         SetDamageType( ResistanceType.Physical, 100 );

         SetResistance( ResistanceType.Physical, 60, 70 );
         SetResistance( ResistanceType.Fire, 50, 60 );
         SetResistance( ResistanceType.Cold, 60, 70 );
         SetResistance( ResistanceType.Poison, 80, 90 );
         SetResistance( ResistanceType.Energy, 70, 80 );

         SetSkill( SkillName.MagicResist, 100.0 );
         SetSkill( SkillName.Tactics, 97.6, 100.0 );
         SetSkill( SkillName.Wrestling, 97.6, 100.0 );
         SetSkill( SkillName.EvalInt, 92.6, 107.5 );
         SetSkill( SkillName.Magery, 105.1, 115.0 );
         SetSkill( SkillName.Meditation, 100.1, 110.0 );

         Fame = 22500;
         Karma = -22500;

         VirtualArmor = 70;

         AddItem( new FancyShirt( Utility.RandomGreenHue() ) );
         AddItem( new Robe( Utility.RandomGreenHue() ) );
         AddItem( new LongPants( Utility.RandomGreenHue() ) );
         AddItem( new Cloak( Utility.RandomGreenHue() ) );
         AddItem( new Sandals() );

         HairItemID = 0x203B; // Short Hair
         HairHue = 0x94;

         PackItem( new GreenGourd() );
         PackItem( new ExecutionersAxe() );

         if ( 0.02 >= Utility.RandomDouble() )
            PackItem( new DecorativeBox() );

      }

      public override void GenerateLoot()
      {
         AddLoot( LootPack.UltraRich, 3 );
         AddLoot( LootPack.Gems, 14);
      }

      public override bool AlwaysMurderer{ get{ return true; } }
      public override bool AutoDispel{ get{ return true; } }
      public override double AutoDispelChance{ get{ return 1.0; } }
      public override bool BardImmune{ get{ return !Core.SE; } }
      public override bool Unprovokable{ get{ return Core.SE; } }
      public override bool Uncalmable{ get{ return Core.SE; } }
      public override Poison PoisonImmune{ get{ return Poison.Deadly; } }
      public override bool CanRummageCorpses{ get{ return true; } }
      public override bool ShowFameTitle{ get{ return false; } }
      public override bool ClickTitle{ get{ return false; } }
      public override int TreasureMapLevel{ get{ return 5; } }

      public void Polymorph( Mobile m )
      {
         if ( !m.CanBeginAction( typeof( PolymorphSpell ) ) || !m.CanBeginAction( typeof( IncognitoSpell ) ) || m.IsBodyMod )
            return;

         IMount mount = m.Mount;

         if ( mount != null )
            mount.Rider = null;

         if ( m.Mounted )
            return;

         if ( m.BeginAction( typeof( PolymorphSpell ) ) )
         {
            Item disarm = m.FindItemOnLayer( Layer.OneHanded );

            if ( disarm != null && disarm.Movable )
               m.AddToBackpack( disarm );

            disarm = m.FindItemOnLayer( Layer.TwoHanded );

            if ( disarm != null && disarm.Movable )
               m.AddToBackpack( disarm );

            m.BodyMod = 21;
            m.HueMod = 0;

            new ExpirePolymorphTimer( m ).Start();
         }
      }

      private class ExpirePolymorphTimer : Timer
      {
         private Mobile m_Owner;

         public ExpirePolymorphTimer( Mobile owner ) : base( TimeSpan.FromMinutes( 13.0 ) )
         {
            m_Owner = owner;

            Priority = TimerPriority.OneSecond;
         }

         protected override void OnTick()
         {
            if ( !m_Owner.CanBeginAction( typeof( PolymorphSpell ) ) )
            {
               m_Owner.BodyMod = 0;
               m_Owner.HueMod = -1;
               m_Owner.EndAction( typeof( PolymorphSpell ) );
            }
         }
      }

      public void SpawnGiantSerpents( Mobile target )
      {
         Map map = this.Map;

         if ( map == null )
            return;

         int serpents = 0;

         foreach ( Mobile m in this.GetMobilesInRange( 20 ) )
         {
            if ( m is GiantSerpent || m is LavaSerpent || m is SilverSerpent )
               ++serpents;
         }

         if ( serpents < 16 )
         {
            PlaySound( 0x3D );

            int newSerpents = Utility.RandomMinMax( 3, 6 );

            for ( int i = 0; i < newSerpents; ++i )
            {
               BaseCreature serpent;

               switch ( Utility.Random( 5 ) )
               {
                  default:
                  case 0: case 1:   serpent = new GiantSerpent(); break;
                  case 2: case 3:   serpent = new LavaSerpent(); break;
                  case 4:         serpent = new SilverSerpent(); break;
               }

               serpent.Team = this.Team;

               bool validLocation = false;
               Point3D loc = this.Location;

               for ( int j = 0; !validLocation && j < 10; ++j )
               {
                  int x = X + Utility.Random( 3 ) - 1;
                  int y = Y + Utility.Random( 3 ) - 1;
                  int z = map.GetAverageZ( x, y );

                  if ( validLocation = map.CanFit( x, y, this.Z, 16, false, false ) )
                     loc = new Point3D( x, y, Z );
                  else if ( validLocation = map.CanFit( x, y, z, 16, false, false ) )
                     loc = new Point3D( x, y, z );
               }

               serpent.MoveToWorld( loc, map );
               serpent.Combatant = target;
            }
         }
      }

      public void DoSpecialAbility( Mobile target )
      {
         if ( target == null || target.Deleted ) //sanity
            return;
         if ( 0.6 >= Utility.RandomDouble() ) // 60% chance to polymorph attacker into a serpent
            Polymorph( target );

         if ( 0.2 >= Utility.RandomDouble() ) // 20% chance to more serpents
            SpawnGiantSerpents( target );

         if ( Hits < 500 && !IsBodyMod ) // Saint Patrick is low on life, polymorph into a serpent
            Polymorph( this );
      }

      public override void OnGotMeleeAttack( Mobile attacker )
      {
         base.OnGotMeleeAttack( attacker );

         DoSpecialAbility( attacker );
      }

      public override void OnGaveMeleeAttack( Mobile defender )
      {
         base.OnGaveMeleeAttack( defender );

         DoSpecialAbility( defender );
      }

      public SaintPatrick( Serial serial ) : base( serial )
      {
      }

      public override void Serialize( GenericWriter writer )
      {
         base.Serialize( writer );

         writer.Write( (int) 0 ); // version
      }

      public override void Deserialize( GenericReader reader )
      {
         base.Deserialize( reader );

         int version = reader.ReadInt();
      }

   }
}


Top
 Profile E-mail  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC - 5 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
cron
Create a free forum | phpBB © | Support Forum | Report Abuse