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 )) { if ( Combatant.Player || ( Combatant is BaseCreature bc && ( 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 || 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(); } } }