109 lines
2.8 KiB
C#
109 lines
2.8 KiB
C#
using ModernUO.Serialization;
|
|
|
|
namespace Server.Items;
|
|
|
|
[SerializationGenerator(0, false)]
|
|
public abstract partial class BaseEquipableLight : BaseLight
|
|
{
|
|
[Constructible]
|
|
public BaseEquipableLight(int itemID) : base(itemID) => Layer = Layer.TwoHanded;
|
|
|
|
private BaseEquipableLight SplitStack()
|
|
{
|
|
if (!Stackable || Amount < 2)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var stack = Mobile.LiftItemDupe(this, 1);
|
|
stack.BurntOut = BurntOut;
|
|
stack.Duration = Duration;
|
|
stack.Light = Light;
|
|
stack.Protected = Protected;
|
|
|
|
return stack;
|
|
}
|
|
|
|
public override bool OnEquip(Mobile from)
|
|
{
|
|
if (!base.OnEquip(from))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
var stack = SplitStack();
|
|
if (stack != null && stack.Parent != from.Backpack)
|
|
{
|
|
if (from.AddToBackpack(stack))
|
|
{
|
|
if (this is Candle)
|
|
{
|
|
from.SendLocalizedMessage(502967); // You put the remaining unlit candles into your backpack.
|
|
}
|
|
else if (this is Torch)
|
|
{
|
|
from.SendLocalizedMessage(502970); // You put the remaining unlit torches into your backpack.
|
|
}
|
|
}
|
|
else
|
|
{
|
|
stack.MoveToWorld(from.Location, from.Map);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override void Ignite()
|
|
{
|
|
if (Parent is not Mobile && RootParent is Mobile holder)
|
|
{
|
|
if (holder.EquipItem(this))
|
|
{
|
|
if (this is Candle)
|
|
{
|
|
holder.SendLocalizedMessage(502969); // You put the candle in your left hand.
|
|
}
|
|
else if (this is Torch)
|
|
{
|
|
holder.SendLocalizedMessage(502972); // You put the torch in your left hand.
|
|
}
|
|
|
|
// No message for lanterns?
|
|
}
|
|
else
|
|
{
|
|
SplitStack();
|
|
MoveToWorld(holder.Location, holder.Map);
|
|
|
|
if (this is Candle)
|
|
{
|
|
holder.SendLocalizedMessage(502968); // You cannot hold the candle, so it has been placed at your feet.
|
|
}
|
|
else if (this is Torch)
|
|
{
|
|
// 502971 has the wrong message
|
|
holder.SendMessage("You cannot hold the torch, so it has been placed at your feet.");
|
|
}
|
|
|
|
// No message for lanterns?
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SplitStack();
|
|
}
|
|
|
|
base.Ignite();
|
|
}
|
|
|
|
public override void OnAdded(IEntity parent)
|
|
{
|
|
if (Burning && parent is Container)
|
|
{
|
|
Douse();
|
|
}
|
|
|
|
base.OnAdded(parent);
|
|
}
|
|
}
|