ModernUO/Scripts/Mobiles/Monsters/LBR/Meers/EnragedCreatures.cs
2018-09-14 08:41:38 -07:00

289 lines
6 KiB
C#

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();
}
}
}