ModernUO/Scripts/Mobiles/Special/BaseShieldGuard.cs
2018-09-14 13:00:41 -07:00

148 lines
3.8 KiB
C#

using Server.Items;
using Server.Guilds;
namespace Server.Mobiles
{
public abstract class BaseShieldGuard : BaseCreature
{
public BaseShieldGuard() : base( AIType.AI_Melee, FightMode.Aggressor, 14, 1, 0.8, 1.6 )
{
InitStats( 1000, 1000, 1000 );
Title = "the guard";
SpeechHue = Utility.RandomDyedHue();
Hue = Utility.RandomSkinHue();
if ( Female = Utility.RandomBool() )
{
Body = 0x191;
Name = NameList.RandomName( "female" );
AddItem( new FemalePlateChest() );
AddItem( new PlateArms() );
AddItem( new PlateLegs() );
switch( Utility.Random( 2 ) )
{
case 0: AddItem( new Doublet( Utility.RandomNondyedHue() ) ); break;
case 1: AddItem( new BodySash( Utility.RandomNondyedHue() ) ); break;
}
switch( Utility.Random( 2 ) )
{
case 0: AddItem( new Skirt( Utility.RandomNondyedHue() ) ); break;
case 1: AddItem( new Kilt( Utility.RandomNondyedHue() ) ); break;
}
}
else
{
Body = 0x190;
Name = NameList.RandomName( "male" );
AddItem( new PlateChest() );
AddItem( new PlateArms() );
AddItem( new PlateLegs() );
switch( Utility.Random( 3 ) )
{
case 0: AddItem( new Doublet( Utility.RandomNondyedHue() ) ); break;
case 1: AddItem( new Tunic( Utility.RandomNondyedHue() ) ); break;
case 2: AddItem( new BodySash( Utility.RandomNondyedHue() ) ); break;
}
}
Utility.AssignRandomHair( this );
if ( Utility.RandomBool() )
Utility.AssignRandomFacialHair( this, HairHue );
VikingSword weapon = new VikingSword();
weapon.Movable = false;
AddItem( weapon );
BaseShield shield = Shield;
shield.Movable = false;
AddItem( shield );
PackGold( 250, 500 );
Skills[SkillName.Anatomy].Base = 120.0;
Skills[SkillName.Tactics].Base = 120.0;
Skills[SkillName.Swords].Base = 120.0;
Skills[SkillName.MagicResist].Base = 120.0;
Skills[SkillName.DetectHidden].Base = 100.0;
}
public abstract int Keyword{ get; }
public abstract BaseShield Shield{ get; }
public abstract int SignupNumber{ get; }
public abstract GuildType Type{ get; }
public override bool HandlesOnSpeech( Mobile from )
{
if ( from.InRange( Location, 2 ) )
return true;
return base.HandlesOnSpeech( from );
}
public override void OnSpeech( SpeechEventArgs e )
{
if ( !e.Handled && e.HasKeyword( Keyword ) && e.Mobile.InRange( Location, 2 ) )
{
e.Handled = true;
Mobile from = e.Mobile;
Guild g = from.Guild as Guild;
if ( g == null || g.Type != Type )
{
Say( SignupNumber );
}
else
{
Container pack = from.Backpack;
BaseShield shield = Shield;
Item twoHanded = from.FindItemOnLayer( Layer.TwoHanded );
if ( (pack?.FindItemByType( shield.GetType() ) != null) || ( twoHanded != null && shield.GetType().IsAssignableFrom( twoHanded.GetType() ) ) )
{
Say( 1007110 ); // Why dost thou ask about virtue guards when thou art one?
shield.Delete();
}
else if ( from.PlaceInBackpack( shield ) )
{
Say( Utility.Random( 1007101, 5 ) );
Say( 1007139 ); // I see you are in need of our shield, Here you go.
from.AddToBackpack( shield );
}
else
{
from.SendLocalizedMessage( 502868 ); // Your backpack is too full.
shield.Delete();
}
}
}
base.OnSpeech( e );
}
public BaseShieldGuard( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}