using System; using Server; using Server.Network; namespace Server.Mobiles { public class EnragedRabbit : BaseEnraged { public override string CorpseName => "a hare corpse"; public override string DefaultName => "a rabbit"; public EnragedRabbit( Mobile summoner ) : base( summoner ) { Body = 0xcd; } public override int GetAttackSound() { return 0xC9; } public override int GetHurtSound() { return 0xCA; } public override int GetDeathSound() { return 0xCB; } public EnragedRabbit( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class EnragedHart : BaseEnraged { public override string CorpseName => "a deer corpse"; public override string DefaultName => "a great hart"; public EnragedHart( Mobile summoner ) : base( summoner ) { Body = 0xea; } public override int GetAttackSound() { return 0x82; } public override int GetHurtSound() { return 0x83; } public override int GetDeathSound() { return 0x84; } public EnragedHart( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class EnragedHind : BaseEnraged { public override string CorpseName => "a deer corpse"; public override string DefaultName => "a hind"; public EnragedHind( Mobile summoner ) : base( summoner ) { Body = 0xed; } public override int GetAttackSound() { return 0x82; } public override int GetHurtSound() { return 0x83; } public override int GetDeathSound() { return 0x84; } public EnragedHind( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class EnragedBlackBear : BaseEnraged { public override string CorpseName => "a bear corpse"; public override string DefaultName => "a black bear"; public EnragedBlackBear( Mobile summoner ) : base( summoner ) { Body = 0xd3; BaseSoundID = 0xa3; } public EnragedBlackBear( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class EnragedEagle : BaseEnraged { public override string CorpseName => "an eagle corpse"; public override string DefaultName => "an eagle"; public EnragedEagle( Mobile summoner ) : base( summoner ) { Body = 0x5; BaseSoundID = 0x2ee; } public EnragedEagle( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class BaseEnraged : BaseCreature { public BaseEnraged( Mobile summoner ) : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) { SetStr( 50, 200 ); SetDex( 50, 200 ); SetHits( 50, 200 ); SetStam( 50, 200 ); /* On OSI, all stats are random 50-200, but str is never less than hits, and dex is never less than stam. */ if( Str < Hits ) Str = Hits; if( Dex < Stam ) Dex = Stam; Karma = -1000; Tamable = false; SummonMaster = summoner; } public override void OnThink() { if( SummonMaster == null || SummonMaster.Deleted ) { Delete(); } /* On OSI, without combatant, they behave as if they have been given "come" command, ie they wander towards their summoner, but never actually "follow". */ else if( !Combat( this )) { if( AIObject != null ) { AIObject.MoveTo( SummonMaster, false , 5 ); } } /* On OSI, if the summon attacks a mobile, the summoner meer also attacks them, regardless of karma, etc. as long as the combatant is a player or controlled/summoned, and the summoner is not already engaged in combat. */ else if( !Combat( SummonMaster )) { BaseCreature bc = null; if( Combatant is BaseCreature ) { bc = (BaseCreature)Combatant; } if( Combatant.Player || ( bc != null && ( bc.Controlled || bc.SummonMaster != null ))) { SummonMaster.Combatant = Combatant; } } else { base.OnThink(); } } private bool Combat( Mobile mobile ) { Mobile combatant = mobile.Combatant; if( combatant == null || combatant.Deleted ) { return false; } else if ( combatant.IsDeadBondedPet || !combatant.Alive ) { return false; } return true; } public override void OnSingleClick( Mobile from ) { base.OnSingleClick( from ); PrivateOverheadMessage( MessageType.Regular, 0x3B2, 1060768, from.NetState ); // enraged } public override void AddNameProperties( ObjectPropertyList list ) { base.AddNameProperties( list ); list.Add( 1060768 ); // enraged } public BaseEnraged( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } }