Full Version : How To make him not get dismount
xmlspawner >>Scripting Support >>How To make him not get dismount


<< Prev | Next >>

Erica- 12-04-2007
Hi ArteGordon was curious how would i make this script so no creature like the Hiyru he can dismount so i got this script that the hiyru can dismount the Master Of The Arts.
Would like to know what can i add so the Master Of The Arts cant get dismounted from his IceSteed heres the script.

CODE
using System;
using Server.Items;
using System.Collections; // needed for ArrayList
using System.Collections.Generic;


namespace Server.Mobiles
{
[CorpseName( "a crafting union leader corpse" )]
public class MasterOfTheArts : BaseCreature //make it use the creature files/settings
{
 public static TimeSpan TalkDelay = TimeSpan.FromSeconds( 10.0 ); //the delay between talks is 10 seconds
 public DateTime m_NextTalk;

 public override int GetIdleSound()
 {
  return 573; //play carpentry sound
 }

 public override int GetDeathSound()
 {
  return 1060; //play death sound
 }

 public override int GetAttackSound()
 {
  return 42; // play blacksmith sound
 }

 public override int GetHurtSound()
 {
  if (this.Hits > 1000)
  {
   return 1076; //play hurt sound
  }
  else if (this.Hits > 500)
  {
   return 1078; //play hurt sound
  }
  else if (this.Hits > 100)
  {
   return 1081; //play hurt sound
  }
  else
  {
   return 1080; //play hurt sound
  }
 }

 public override int GetAngerSound()
 {
  return 42; //play blacksmith sound
 }

 public override void OnMovement( Mobile m, Point3D oldLocation )
 {
  if ( DateTime.Now >= m_NextTalk && InRange( m, 4 ) && InLOS( m ) ) // check if it's time to talk & mobile in range & in los.
  {
   m_NextTalk = DateTime.Now + TalkDelay; // set next talk time
   switch ( Utility.Random( 7 ))
   {
    case 0: Say("So you really think that crafting is important to ye."); //make it say ...
     PlaySound(1066); //play giggle sound
     break;
    case 1: Say("So you really think you can beat me, I am very crafty you know.");
     PlaySound(1071); //play huh sound
     break;
    case 2: Say("Only the wise can receive these scrolls of knowledge to excel.");
     PlaySound(1055); //play clear throat sound
     break; //
    case 3: Say("I shall not give you these scrolls easily.");
     PlaySound(1074); //play no!! sound
     break;
    case 4: Say("Leave me be, I am waiting for the Master of the Power. You are a pain in my side.");
     PlaySound(1067); //play groan sound
     break;
    case 5: Say("I shall treat thee like I do with the others under me, Ha ha.");
     PlaySound(1073); //play lough sound
     break;
    case 6: Say("Not only your might is a neccesity to wield these scrolls of knowledge, but your mind is also required from thee.");
     PlaySound(1094); //play spit sound
     break;
   };
  }
 }
 
 public override WeaponAbility GetWeaponAbility() // add it random special ability, bleed, mortal strike or armor ignore
 {
  int ability = Utility.Random(3);
  if (ability == 1)
   return WeaponAbility.MortalStrike;
  else if (ability == 2)
   return WeaponAbility.BleedAttack;
  else
   return WeaponAbility.ArmorIgnore;
 }
 
 //base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.175, 0.350 )
 //The 10 is range perception, the 1 is fight range, 0.1 is active speed, 0.4 is passive speed. set the 10 to like 5 and see what happens.
 /*private int i_PsCount;
 public int PsCount{ get{ return i_PsCount; } set { i_PsCount = value; InvalidateProperties(); } }
 private bool i_ChampionSpawn;
 public bool ChampionSpawn{ get{ return i_ChampionSpawn; } set { i_ChampionSpawn = value; InvalidateProperties(); } }

 [Constructable]
 public MasterOfTheArts() : this ( false )
 {
 }*/

 [Constructable]
 public MasterOfTheArts() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
 {
  Name = "a master of the arts"; //the name players will see
  Body = 185; //how it look like in game
  BaseSoundID = 42; //what sound he makes (I still have problems with sound :(

  //ChampionSpawn = i_ChampionSpawn; //set if it spawn with champ spawn or normal spawn

  SetStr( 401, 420 ); //set stats
  SetDex( 81, 90 );
  SetInt( 201, 220 );

  SetHits( 1500, 1700 ); //set hp

  SetDamage( 20, 28 ); //set how much damage ~

  SetDamageType( ResistanceType.Physical, 50 ); //which damage type it does
  SetDamageType( ResistanceType.Poison, 50 );

  SetResistance( ResistanceType.Physical, 60, 80 ); //what resists it have
  SetResistance( ResistanceType.Fire, 40, 50 );
  SetResistance( ResistanceType.Cold, 55, 50 );
  SetResistance( ResistanceType.Poison, 48, 50 );
  SetResistance( ResistanceType.Energy, 55, 60 );

  SetSkill( SkillName.Anatomy, 120.0 );
  SetSkill( SkillName.Tactics, 120.0 );
  SetSkill( SkillName.Meditation, 120.0 );
  SetSkill( SkillName.Swords, 120.0 );
  SetSkill( SkillName.Wrestling, 120.0 );
  SetSkill( SkillName.Parry, 120.0 );
  SetSkill( SkillName.MagicResist, 120.0 );


  Fame = 30000; //its fame/karma
  Karma = -30000;
           
  VirtualArmor = 50;
                 ActiveSpeed /= Paragon.SpeedBuff;
                 PassiveSpeed /= Paragon.SpeedBuff;
                 RangePerception = 20;

  PlateChest chest = new PlateChest(); //add its armor and set its hue and not movable so it won't be on loot
  chest.Hue = 503;
  chest.Movable = false;
  AddItem( chest );
 
  PlateArms arms = new PlateArms();
  arms.Hue = 503;
  arms.Movable = false;
  AddItem( arms );
 
  PlateGloves gloves = new PlateGloves();
  gloves.Hue = 503;
  gloves.Movable = false;
  AddItem( gloves );
 
  PlateGorget gorget = new PlateGorget();
  gorget.Hue = 503;
  gorget.Movable = false;
  AddItem( gorget );
 
  PlateLegs legs = new PlateLegs();
  legs.Hue = 503;
  legs.Movable = false;
  AddItem( legs );
 
  AxeOfTheHeavens weapon = new AxeOfTheHeavens(); //add its weapon and set its hue and not movable so it won't be on loot
  //weapon.Name = "Crafting Union Leader's Hammer";
  weapon.Hue = 503;
  weapon.Movable = false;
  AddItem( weapon );
 
  FurBoots boots = new FurBoots(); //add its boots and set its hue and not movable so it won't be on loot
  boots.Hue = 503;
  boots.Movable = false;
  AddItem( boots );

  Item hair = new Item( 8251 );  //add its hair and set its hue and not movable so it won't be on loot
  hair.Hue = 503;
  hair.Layer = Layer.Hair;
  hair.Movable = false;
  AddItem( hair );

  AddItem( new Tokens( 500, 1000 ));
  //if ( Utility.Random(25) == 1 )
   //AddItem( new PersonalStatueDeed() );

  new IceSteed().Rider = this; //make it ride on mule
 }
 
 public void GiveCraftPowerScroll() //Generate power scroll routine and add to pack
 {
  List<Mobile> toGive = new List<Mobile>(); //no idea :(

  List<AggressorInfo> list = Aggressors; //I think it add list players that attacked it
  for ( int i = 0; i < list.Count; ++i )
  {
   AggressorInfo info = list[i];

   if ( info.Attacker.Player && info.Attacker.Alive && (DateTime.Now - info.LastCombatTime) < TimeSpan.FromSeconds( 30.0 ) && !toGive.Contains( info.Attacker ) )
    toGive.Add( info.Attacker );
  }

  list = Aggressed; //I think it add list of players it attacked
  for ( int i = 0; i < list.Count; ++i )
  {
   AggressorInfo info = list[i];

   if ( info.Defender.Player && info.Defender.Alive && (DateTime.Now - info.LastCombatTime) < TimeSpan.FromSeconds( 30.0 ) && !toGive.Contains( info.Defender ) )
    toGive.Add( info.Defender );
  }
  if ( toGive.Count == 0 )//if nobody attacked it and it didn't attack anybody then break operation and no ps MUAH
   return;

  // Randomize //absolutly no idea
  for ( int i = 0; i < toGive.Count; ++i )
  {
   int rand = Utility.Random( toGive.Count );
   Mobile hold = toGive[i];
   toGive[i] = toGive[rand];
   toGive[rand] = hold;
  }

  //PsCount = ChampionSpawn ? 5 : 2; //set how many ps to give if it spawned using champ spawn or normal spawn
  for ( int i = 0; i < 1; ++i ) //set to give 1 ps change the "< 1" to anything you want
  {
   Mobile m = (Mobile)toGive[i % toGive.Count];
   int level;
   double random = Utility.RandomDouble();
   if ( 0.2 >= random ) // select the level of the ps
    level = 120;
   else if ( 0.55 >= random )
    level = 115;
   else
    level = 110;
 
   //if ( Daat99OWLTR.Ops[5].Setting )
    //m.AddToBackpack( new ResourceRecipe() );
   
   switch ( Utility.Random( 13 )) // select which skill to use in the ps
   {
    case 0: m.AddToBackpack( new PowerScroll( SkillName.Blacksmith, level ) ); break; // give blacksmith ps acording to the ps level we selected before
    case 1: m.AddToBackpack( new PowerScroll( SkillName.Tailoring, level ) ); break;  
    case 2: m.AddToBackpack( new PowerScroll( SkillName.Tinkering, level ) ); break;
    case 3: m.AddToBackpack( new PowerScroll( SkillName.Mining, level ) ); break;  
    case 4: m.AddToBackpack( new PowerScroll( SkillName.Carpentry, level ) ); break;  
    case 5: m.AddToBackpack( new PowerScroll( SkillName.Alchemy, level ) ); break;
    case 6: m.AddToBackpack( new PowerScroll( SkillName.Fletching, level ) ); break;
    case 7: m.AddToBackpack( new PowerScroll( SkillName.Inscribe, level ) ); break;  
    case 8: m.AddToBackpack( new PowerScroll( SkillName.Cooking, level ) ); break;  
    case 9: m.AddToBackpack( new PowerScroll( SkillName.Cartography, level ) ); break;  
    case 10: m.AddToBackpack( new PowerScroll( SkillName.Lumberjacking, level ) ); break;
    case 11: m.AddToBackpack( new PowerScroll( SkillName.Lockpicking, level ) ); break;
    case 12: m.AddToBackpack( new PowerScroll( SkillName.Fishing, level ) ); break;
   }  
   m.SendLocalizedMessage( 1049524 ); // You have received a scroll of power!
  }
 }
 
 public override bool OnBeforeDeath( ) //what happens before it dies
 {
  IMount mount = this.Mount;
 
  if ( mount != null )
  {
   mount.Rider = null;
   
   if (mount is Mobile) ((Mobile)mount).Delete();
  }
 
 
  GiveCraftPowerScroll(); //call the generate ps routine
 
  switch (Utility.Random(15))
  {
   
    case 0: PackItem( new RunicSewingKit( CraftResource.SpinedLeather, 25 ) ); break;
    case 1: PackItem( new RunicSewingKit( CraftResource.HornedLeather, 25 ) ); break;
    case 2: PackItem( new RunicSewingKit( CraftResource.BarbedLeather, 25 ) ); break;
   
  }
  switch (Utility.Random(8))
  {
   
    case 0: PackItem( new DullCopperOre( 25 ) ); break;
    case 1: PackItem( new ShadowIronOre( 25 ) ); break;
    case 2: PackItem( new CopperOre( 25 ) ); break;
    case 3: PackItem( new BronzeOre( 25 ) ); break;
    case 4: PackItem( new GoldOre( 25 ) ); break;
    case 5: PackItem( new AgapiteOre( 25 ) ); break;
    case 6: PackItem( new VeriteOre( 25 ) ); break;
    case 7: PackItem( new ValoriteOre( 25 ) ); break;
  }
 
  switch ( Utility.Random(20))
  {
   
   
    case 0: PackItem( new RunicHammer( CraftResource.DullCopper, 25 ) ); break;
    case 1: PackItem( new RunicHammer( CraftResource.ShadowIron, 25 ) ); break;
    case 2: PackItem( new RunicHammer( CraftResource.Copper, 25 ) ); break;
    case 3: PackItem( new RunicHammer( CraftResource.Bronze, 25 ) ); break;
    case 4: PackItem( new RunicHammer( CraftResource.Gold, 25 ) ); break;
    case 5: PackItem( new RunicHammer( CraftResource.Agapite, 25 ) ); break;
    case 6: PackItem( new RunicHammer( CraftResource.Verite, 25 ) ); break;
    case 7: PackItem( new RunicHammer( CraftResource.Valorite, 25 ) ); break;
   
    //case 9: PackItem( new RunicSewingKit( CraftResource.RegularLeather, 10 ) ); break; // normal leather runic sewing kit with 10 charges
    //case 10: PackItem( new RunicSewingKit( CraftResource.SpinedLeather, 10 ) ); break;
    //case 11: PackItem( new RunicSewingKit( CraftResource.HornedLeather, 10 ) ); break;
    //case 12: PackItem( new RunicSewingKit( CraftResource.BarbedLeather, 10 ) ); break;
   
  }
  return true;
 }
 
 public override bool BardImmune{ get{ return true; } } //make it bardimmune: unpeaceable\unprovokable\undiscorded
 public override bool AlwaysMurderer{ get{ return true; } } //make the npc red
 public override bool Unprovokable{ get{ return true; } }
 public override bool CanRummageCorpses{ get{ return true; } }
 
 public override bool AlwaysAttackable{ get{ return true; } }
 public override bool Uncalmable{ get{ return true; } }
 public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
 public override void GenerateLoot() //add normal loot
 {
  AddLoot( LootPack.SuperBoss, 2 ); // set the loot type to ultra rich
 }
 
 public MasterOfTheArts( Serial serial ) : base( serial ) // no idea what this does
 {
 }
 
 public override void Serialize( GenericWriter writer ) // this save the info on the mob so it won't be deleted all the time
 {
  base.Serialize( writer );
  writer.Write( (int) 0 ); // version
 }
 
 public override void Deserialize( GenericReader reader ) // this load the info on the mob so it won't be deleted all the time
 {
  base.Deserialize( reader );
  int version = reader.ReadInt();
 }
}
}



ArteGordon- 12-04-2007
you would have to modify the dismount weaponability in dismount.cs

QUOTE

  public override void OnHit( Mobile attacker, Mobile defender, int damage )
  {
   if ( !Validate( attacker ) )
    return;

            if (defender is MasterOfTheArts) return;

   if ( attacker.Mounted && !(defender.Weapon is Lance) ) // TODO: Should there be a message here?
    return;

   ClearCurrentAbility( attacker );

   IMount mount = defender.Mount;


This would prevent the MasterOfTheArts from being dismounted.