ModernUO/Projects/UOContent/Mobiles/Special/BaseShieldGuard.cs

163 lines
4.6 KiB
C#

using ModernUO.Serialization;
using Server.Guilds;
using Server.Items;
namespace Server.Mobiles;
[SerializationGenerator(0, false)]
public abstract partial class BaseShieldGuard : BaseCreature
{
public BaseShieldGuard() : base(AIType.AI_Melee, FightMode.Aggressor, 14)
{
InitStats(1000, 1000, 1000);
Title = "the guard";
SetSpeed(0.5, 2.0);
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);
}
var weapon = new VikingSword();
weapon.Movable = false;
AddItem(weapon);
var 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 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;
var from = e.Mobile;
if (from.Guild is not Guild g || g.Type != Type)
{
Say(SignupNumber);
}
else
{
var pack = from.Backpack;
var shield = Shield;
var 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);
}
}