corrected grizzled mare, added chaos breath attack to basecreature, implemented @ hellsteed

This commit is contained in:
xavier 2011-09-18 00:59:51 +00:00
parent b3aa1796fe
commit da56ceccbb
3 changed files with 81 additions and 57 deletions

View file

@ -37,33 +37,34 @@ namespace Server.Items
namespace Server.Mobiles namespace Server.Mobiles
{ {
public class GrizzledMare : SkeletalMount public class GrizzledMare : HellSteed
{ {
public override bool DeleteOnRelease{ get{ return true; } } public override bool DeleteOnRelease { get { return true; } }
public override bool IsDispellable { get { return false; } }
private static readonly string m_Myname = "a grizzled mare";
[Constructable] [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 GrizzledMare( Serial serial ) : base( serial )
{ {
} }
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1049646 ); // (summoned)
}
public override void Serialize( GenericWriter writer ) public override void Serialize( GenericWriter writer )
{ {
base.Serialize( writer ); base.Serialize( writer );
writer.Write( (int) 0 ); // version writer.Write( (int) 1 ); // version
} }
public override void Deserialize( GenericReader reader ) public override void Deserialize( GenericReader reader )
@ -71,7 +72,11 @@ namespace Server.Mobiles
base.Deserialize( reader ); base.Deserialize( reader );
int version = reader.ReadInt(); int version = reader.ReadInt();
if( version < 1 )
{
Timer.DelayCall( TimeSpan.FromSeconds( 0 ), new TimerCallback( OnAfterDeserialize_Callback ) );
}
} }
} }
} }

View file

@ -6,6 +6,10 @@ namespace Server.Mobiles
[CorpseName( "a hellsteed corpse" )] [CorpseName( "a hellsteed corpse" )]
public class HellSteed : BaseMount 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] [Constructable]
public HellSteed() : this( "a hellsteed" ) public HellSteed() : this( "a hellsteed" )
{ {
@ -14,31 +18,33 @@ namespace Server.Mobiles
[Constructable] [Constructable]
public HellSteed( string name ) : base( name, 793, 0x3EBB, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) public HellSteed( string name ) : base( name, 793, 0x3EBB, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{ {
SetStr( 201, 210 ); SetStats( this );
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;
} }
public override Poison PoisonImmune{ get{ return Poison.Lethal; } } public static void SetStats( BaseCreature steed )
// TODO: "This creature can breath chaos." {
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 ) public HellSteed( Serial serial ) : base( serial )
{ {

View file

@ -517,6 +517,7 @@ namespace Server.Mobiles
public virtual int BreathRange{ get{ return RangePerception; } } public virtual int BreathRange{ get{ return RangePerception; } }
// Damage types // Damage types
public virtual int BreathChaosDamage { get { return 0; } }
public virtual int BreathPhysicalDamage{ get{ return 0; } } public virtual int BreathPhysicalDamage{ get{ return 0; } }
public virtual int BreathFireDamage{ get{ return 100; } } public virtual int BreathFireDamage{ get{ return 100; } }
public virtual int BreathColdDamage{ get{ return 0; } } public virtual int BreathColdDamage{ get{ return 0; } }
@ -609,22 +610,34 @@ namespace Server.Mobiles
public virtual void BreathDealDamage( Mobile target ) public virtual void BreathDealDamage( Mobile target )
{ {
int physDamage = BreathPhysicalDamage; if( !Evasion.CheckSpellEvasion( target ) )
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
{ {
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 );
}
} }
} }