corrected grizzled mare, added chaos breath attack to basecreature, implemented @ hellsteed
This commit is contained in:
parent
b3aa1796fe
commit
da56ceccbb
3 changed files with 81 additions and 57 deletions
|
|
@ -8,7 +8,7 @@ namespace Server.Items
|
||||||
{
|
{
|
||||||
public override int LabelNumber{ get{ return 1074475; } } // Grizzled Mare Statuette
|
public override int LabelNumber{ get{ return 1074475; } } // Grizzled Mare Statuette
|
||||||
public override BaseCreature Summon{ get { return new GrizzledMare(); } }
|
public override BaseCreature Summon{ get { return new GrizzledMare(); } }
|
||||||
|
|
||||||
[Constructable]
|
[Constructable]
|
||||||
public GrizzledMareStatuette() : base( 0x2617 )
|
public GrizzledMareStatuette() : base( 0x2617 )
|
||||||
{
|
{
|
||||||
|
|
@ -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 ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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,25 +610,37 @@ 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 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual int BreathComputeDamage()
|
public virtual int BreathComputeDamage()
|
||||||
{
|
{
|
||||||
int damage = (int)(Hits * BreathDamageScalar);
|
int damage = (int)(Hits * BreathDamageScalar);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue