101 lines
2.5 KiB
C#
101 lines
2.5 KiB
C#
using System;
|
|
using ModernUO.Serialization;
|
|
using Server.Spells;
|
|
|
|
namespace Server.Items;
|
|
|
|
[SerializationGenerator(0)]
|
|
public partial class Guillotine : Item
|
|
{
|
|
private DateTime m_NextUse;
|
|
|
|
[Constructible]
|
|
public Guillotine() : base(4656) => Movable = false;
|
|
|
|
public override void OnDoubleClick(Mobile from)
|
|
{
|
|
if (!from.InRange(GetWorldLocation(), 2) || !from.InLOS(this))
|
|
{
|
|
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that
|
|
}
|
|
else if (Visible && ItemID is 4656 or 4702 && Core.Now >= m_NextUse)
|
|
{
|
|
var p = GetWorldLocation();
|
|
|
|
if (Utility.Random(Math.Max((from.X - p.X).Abs(), (from.Y - p.Y).Abs())) < 1)
|
|
{
|
|
Effects.PlaySound(from.Location, from.Map, from.GetHurtSound());
|
|
from.PublicOverheadMessage(MessageType.Regular, from.SpeechHue, true, "Ouch!");
|
|
SpellHelper.Damage(TimeSpan.FromSeconds(0.5), from, Utility.Dice(2, 10, 5));
|
|
}
|
|
|
|
Effects.PlaySound(GetWorldLocation(), Map, 0x387);
|
|
|
|
Timer.StartTimer(TimeSpan.FromSeconds(0.25), Down1);
|
|
Timer.StartTimer(TimeSpan.FromSeconds(0.50), Down2);
|
|
|
|
Timer.StartTimer(TimeSpan.FromSeconds(5.00), BackUp);
|
|
|
|
m_NextUse = Core.Now + TimeSpan.FromSeconds(10.0);
|
|
}
|
|
}
|
|
|
|
private void Down1()
|
|
{
|
|
ItemID = ItemID == 4656 ? 4678 : 4712;
|
|
}
|
|
|
|
private void Down2()
|
|
{
|
|
ItemID = ItemID == 4678 ? 4679 : 4713;
|
|
|
|
var p = GetWorldLocation();
|
|
var f = Map;
|
|
|
|
if (f == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
new Blood(4650).MoveToWorld(p, f);
|
|
|
|
for (var i = 0; i < 4; ++i)
|
|
{
|
|
var x = p.X - 2 + Utility.Random(5);
|
|
var y = p.Y - 2 + Utility.Random(5);
|
|
var z = p.Z;
|
|
|
|
if (!f.CanFit(x, y, z, 1, false, false))
|
|
{
|
|
z = f.GetAverageZ(x, y);
|
|
|
|
if (!f.CanFit(x, y, z, 1, false, false))
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
var loc = f.GetRandomNearbyLocation(p, 2, -2, 4, 1);
|
|
|
|
new Blood().MoveToWorld(loc, f);
|
|
}
|
|
}
|
|
|
|
private void BackUp()
|
|
{
|
|
if (ItemID is 4678 or 4679)
|
|
{
|
|
ItemID = 4656;
|
|
}
|
|
else if (ItemID is 4712 or 4713)
|
|
{
|
|
ItemID = 4702;
|
|
}
|
|
}
|
|
|
|
[AfterDeserialization]
|
|
private void AfterDeserialization()
|
|
{
|
|
BackUp();
|
|
}
|
|
}
|