diff --git a/Scripts/Items/Special/ML/GrizzledMareStatuette.cs b/Scripts/Items/Special/ML/GrizzledMareStatuette.cs index 4e41dc09d..7698e89c0 100644 --- a/Scripts/Items/Special/ML/GrizzledMareStatuette.cs +++ b/Scripts/Items/Special/ML/GrizzledMareStatuette.cs @@ -8,7 +8,7 @@ namespace Server.Items { public override int LabelNumber{ get{ return 1074475; } } // Grizzled Mare Statuette public override BaseCreature Summon{ get { return new GrizzledMare(); } } - + [Constructable] public GrizzledMareStatuette() : base( 0x2617 ) { @@ -37,33 +37,34 @@ namespace Server.Items namespace Server.Mobiles { - public class GrizzledMare : SkeletalMount - { - public override bool DeleteOnRelease{ get{ return true; } } - public override bool IsDispellable { get { return false; } } - + public class GrizzledMare : HellSteed + { + public override bool DeleteOnRelease { get { return true; } } + + private static readonly string m_Myname = "a grizzled mare"; + [Constructable] - public GrizzledMare() : base() + public GrizzledMare() + : base( m_Myname ) { - ControlSlots = 1; + } + + public virtual void OnAfterDeserialize_Callback() + { + HellSteed.SetStats( this ); + + Name = m_Myname; } public GrizzledMare( Serial serial ) : base( serial ) { } - public override void GetProperties( ObjectPropertyList list ) - { - base.GetProperties( list ); - - list.Add( 1049646 ); // (summoned) - } - public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); - writer.Write( (int) 0 ); // version + writer.Write( (int) 1 ); // version } public override void Deserialize( GenericReader reader ) @@ -71,7 +72,11 @@ namespace Server.Mobiles base.Deserialize( reader ); int version = reader.ReadInt(); - } + + if( version < 1 ) + { + Timer.DelayCall( TimeSpan.FromSeconds( 0 ), new TimerCallback( OnAfterDeserialize_Callback ) ); + } + } } } - diff --git a/Scripts/Mobiles/Animals/Mounts/HellSteed.cs b/Scripts/Mobiles/Animals/Mounts/HellSteed.cs index c4cfb2790..1abed2d41 100644 --- a/Scripts/Mobiles/Animals/Mounts/HellSteed.cs +++ b/Scripts/Mobiles/Animals/Mounts/HellSteed.cs @@ -6,6 +6,10 @@ namespace Server.Mobiles [CorpseName( "a hellsteed corpse" )] public class HellSteed : BaseMount { + public override bool HasBreath { get { return true; } } + public override int BreathChaosDamage { get { return 100; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + [Constructable] public HellSteed() : this( "a hellsteed" ) { @@ -14,31 +18,33 @@ namespace Server.Mobiles [Constructable] public HellSteed( string name ) : base( name, 793, 0x3EBB, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) { - SetStr( 201, 210 ); - SetDex( 101, 110 ); - SetInt( 101, 115 ); - - SetHits( 201, 220 ); - - SetDamage( 20, 24 ); - - SetDamageType( ResistanceType.Physical, 25 ); - SetDamageType( ResistanceType.Fire, 75 ); - - SetResistance( ResistanceType.Physical, 60, 70 ); - SetResistance( ResistanceType.Fire, 90 ); - SetResistance( ResistanceType.Poison, 100 ); - - SetSkill( SkillName.MagicResist, 90.1, 110.0 ); - SetSkill( SkillName.Tactics, 50.0 ); - SetSkill( SkillName.Wrestling, 90.1, 110.0 ); - - Fame = 0; - Karma = 0; + SetStats( this ); } - public override Poison PoisonImmune{ get{ return Poison.Lethal; } } - // TODO: "This creature can breath chaos." + public static void SetStats( BaseCreature steed ) + { + steed.SetStr( 201, 210 ); + steed.SetDex( 101, 110 ); + steed.SetInt( 101, 115 ); + + steed.SetHits( 201, 220 ); + + steed.SetDamage( 20, 24 ); + + steed.SetDamageType( ResistanceType.Physical, 25 ); + steed.SetDamageType( ResistanceType.Fire, 75 ); + + steed.SetResistance( ResistanceType.Physical, 60, 70 ); + steed.SetResistance( ResistanceType.Fire, 90 ); + steed.SetResistance( ResistanceType.Poison, 100 ); + + steed.SetSkill( SkillName.MagicResist, 90.1, 110.0 ); + steed.SetSkill( SkillName.Tactics, 50.0 ); + steed.SetSkill( SkillName.Wrestling, 90.1, 110.0 ); + + steed.Fame = 0; + steed.Karma = 0; + } public HellSteed( Serial serial ) : base( serial ) { diff --git a/Scripts/Mobiles/BaseCreature.cs b/Scripts/Mobiles/BaseCreature.cs index d2d0639f7..5ca072088 100644 --- a/Scripts/Mobiles/BaseCreature.cs +++ b/Scripts/Mobiles/BaseCreature.cs @@ -517,6 +517,7 @@ namespace Server.Mobiles public virtual int BreathRange{ get{ return RangePerception; } } // Damage types + public virtual int BreathChaosDamage { get { return 0; } } public virtual int BreathPhysicalDamage{ get{ return 0; } } public virtual int BreathFireDamage{ get{ return 100; } } public virtual int BreathColdDamage{ get{ return 0; } } @@ -609,25 +610,37 @@ namespace Server.Mobiles public virtual void BreathDealDamage( Mobile target ) { - int physDamage = BreathPhysicalDamage; - int fireDamage = BreathFireDamage; - int coldDamage = BreathColdDamage; - int poisDamage = BreathPoisonDamage; - int nrgyDamage = BreathEnergyDamage; - - if( Evasion.CheckSpellEvasion( target ) ) - return; - - if ( physDamage == 0 && fireDamage == 0 && coldDamage == 0 && poisDamage == 0 && nrgyDamage == 0 ) - { // Unresistable damage even in AOS - target.Damage( BreathComputeDamage(), this ); - } - else + if( !Evasion.CheckSpellEvasion( target ) ) { - AOS.Damage( target, this, BreathComputeDamage(), physDamage, fireDamage, coldDamage, poisDamage, nrgyDamage ); + int physDamage = BreathPhysicalDamage; + int fireDamage = BreathFireDamage; + int coldDamage = BreathColdDamage; + int poisDamage = BreathPoisonDamage; + int nrgyDamage = BreathEnergyDamage; + + if( BreathChaosDamage > 0 ) + { + switch( Utility.Random( 5 )) + { + case 0: physDamage += BreathChaosDamage; break; + case 1: fireDamage += BreathChaosDamage; break; + case 2: coldDamage += BreathChaosDamage; break; + case 3: poisDamage += BreathChaosDamage; break; + case 4: nrgyDamage += BreathChaosDamage; break; + } + } + + if( physDamage == 0 && fireDamage == 0 && coldDamage == 0 && poisDamage == 0 && nrgyDamage == 0 ) + { + target.Damage( BreathComputeDamage(), this );// Unresistable damage even in AOS + } + else + { + AOS.Damage( target, this, BreathComputeDamage(), physDamage, fireDamage, coldDamage, poisDamage, nrgyDamage ); + } } } - + public virtual int BreathComputeDamage() { int damage = (int)(Hits * BreathDamageScalar);