149 lines
3.6 KiB
C#
149 lines
3.6 KiB
C#
using System;
|
|
using ModernUO.Serialization;
|
|
using Server.Mobiles;
|
|
using Server.Spells;
|
|
|
|
namespace Server.Engines.Doom;
|
|
|
|
[SerializationGenerator(0, false)]
|
|
public partial class LampRoomBox : Item
|
|
{
|
|
[SerializableField(0)]
|
|
private LeverPuzzleController _controller;
|
|
private Mobile _wanderer;
|
|
|
|
public LampRoomBox(LeverPuzzleController controller) : base(0xe80)
|
|
{
|
|
_controller = controller;
|
|
ItemID = 0xe80;
|
|
Movable = false;
|
|
}
|
|
|
|
public override void OnDoubleClick(Mobile m)
|
|
{
|
|
if (!m.InRange(GetWorldLocation(), 3))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (_controller.Enabled)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (_wanderer?.Alive != true)
|
|
{
|
|
_wanderer = new WandererOfTheVoid();
|
|
_wanderer.MoveToWorld(LeverPuzzleController.lr_Enter, Map.Malas);
|
|
_wanderer.PublicOverheadMessage(MessageType.Regular, 0x3B2, 1060002); // I am the guardian of...
|
|
Timer.StartTimer(TimeSpan.FromSeconds(5.0), CallBackMessage);
|
|
}
|
|
}
|
|
|
|
public void CallBackMessage()
|
|
{
|
|
PublicOverheadMessage(MessageType.Regular, 0x3B2, 1060003); // You try to pry the box open...
|
|
}
|
|
|
|
public override void OnAfterDelete()
|
|
{
|
|
if (_controller?.Deleted == false)
|
|
{
|
|
_controller.Delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
[SerializationGenerator(0, false)]
|
|
public partial class LeverPuzzleStatue : Item
|
|
{
|
|
private LeverPuzzleController _controller;
|
|
|
|
public LeverPuzzleStatue(int[] dat, LeverPuzzleController controller) : base(dat[0])
|
|
{
|
|
_controller = controller;
|
|
Hue = 0x44E;
|
|
Movable = false;
|
|
}
|
|
|
|
public override void OnAfterDelete()
|
|
{
|
|
if (_controller?.Deleted == false)
|
|
{
|
|
_controller.Delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
[SerializationGenerator(0, false)]
|
|
public partial class LeverPuzzleLever : Item
|
|
{
|
|
[SerializableField(0, setter: "private")]
|
|
private ushort _code;
|
|
|
|
[SerializableField(1)]
|
|
private LeverPuzzleController _controller;
|
|
|
|
public LeverPuzzleLever(ushort code, LeverPuzzleController controller) : base(0x108E)
|
|
{
|
|
_controller = controller;
|
|
_code = code;
|
|
Hue = 0x66D;
|
|
Movable = false;
|
|
}
|
|
|
|
public override void OnDoubleClick(Mobile m)
|
|
{
|
|
if (m != null && _controller.Enabled)
|
|
{
|
|
ItemID ^= 2;
|
|
Effects.PlaySound(Location, Map, 0x3E8);
|
|
_controller.LeverPulled(Code);
|
|
}
|
|
else
|
|
{
|
|
m?.SendLocalizedMessage(1060001); // You throw the switch, but the mechanism cannot be engaged again so soon.
|
|
}
|
|
}
|
|
|
|
public override void OnAfterDelete()
|
|
{
|
|
if (_controller?.Deleted == false)
|
|
{
|
|
_controller.Delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
[TypeAlias("Server.Engines.Doom.LampRoomTelePorter")]
|
|
[SerializationGenerator(0, false)]
|
|
public partial class LampRoomTeleporter : Item
|
|
{
|
|
public LampRoomTeleporter(int[] dat)
|
|
{
|
|
Hue = dat[1];
|
|
ItemID = dat[0];
|
|
Movable = false;
|
|
}
|
|
|
|
public override bool HandlesOnMovement => true;
|
|
|
|
public override bool OnMoveOver(Mobile m)
|
|
{
|
|
if (m is PlayerMobile)
|
|
{
|
|
if (SpellHelper.CheckCombat(m))
|
|
{
|
|
m.SendLocalizedMessage(1005564, "", 0x22); // Wouldst thou flee during the heat of battle??
|
|
}
|
|
else
|
|
{
|
|
BaseCreature.TeleportPets(m, LeverPuzzleController.lr_Exit, Map.Malas);
|
|
m.MoveToWorld(LeverPuzzleController.lr_Exit, Map.Malas);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|