ModernUO/Projects/Scripts/Mobiles/Special/BaseShieldGuard.cs
2019-12-30 12:16:35 -08:00

162 lines
No EOL
4.1 KiB
C#

using Server.Guilds;
using Server.Items;
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 = Race.Human.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.Anatomy.Base = 120.0;
Skills.Tactics.Base = 120.0;
Skills.Swords.Base = 120.0;
Skills.MagicResist.Base = 120.0;
Skills.DetectHidden.Base = 100.0;
}
public BaseShieldGuard(Serial serial) : base(serial)
{
}
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;
if (!(from.Guild is Guild g) || 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().IsInstanceOfType(twoHanded))
{
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 override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}