Reorganizes Project (#41)
This commit is contained in:
parent
08bf44af9a
commit
3614a66aee
3499 changed files with 79 additions and 55 deletions
201
Projects/Scripts/Engines/Khaldun/RaiseSwitch.cs
Normal file
201
Projects/Scripts/Engines/Khaldun/RaiseSwitch.cs
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class RaiseSwitch : Item
|
||||
{
|
||||
private ResetTimer m_ResetTimer;
|
||||
|
||||
public RaiseSwitch(int itemID = 0x1093) : base(itemID)
|
||||
{
|
||||
Movable = false;
|
||||
}
|
||||
|
||||
public RaiseSwitch(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public RaisableItem RaisableItem{ get; set; }
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (!m.InRange(this, 2))
|
||||
{
|
||||
m.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
|
||||
return;
|
||||
}
|
||||
|
||||
if (RaisableItem?.Deleted == true)
|
||||
RaisableItem = null;
|
||||
|
||||
Flip();
|
||||
|
||||
if (RaisableItem == null)
|
||||
return;
|
||||
|
||||
if (RaisableItem.IsRaisable)
|
||||
{
|
||||
RaisableItem.Raise();
|
||||
m.LocalOverheadMessage(MessageType.Regular, 0x5A, true,
|
||||
"You hear a grinding noise echoing in the distance.");
|
||||
}
|
||||
else
|
||||
{
|
||||
m.LocalOverheadMessage(MessageType.Regular, 0x5A, true,
|
||||
"You flip the switch again, but nothing happens.");
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void Flip()
|
||||
{
|
||||
if (ItemID != 0x1093)
|
||||
{
|
||||
ItemID = 0x1093;
|
||||
|
||||
StopResetTimer();
|
||||
}
|
||||
else
|
||||
{
|
||||
ItemID = 0x1095;
|
||||
|
||||
StartResetTimer(RaisableItem?.CloseDelay >= TimeSpan.Zero ? RaisableItem.CloseDelay : TimeSpan.FromMinutes(2.0));
|
||||
}
|
||||
|
||||
Effects.PlaySound(Location, Map, 0x3E8);
|
||||
}
|
||||
|
||||
protected void StartResetTimer(TimeSpan delay)
|
||||
{
|
||||
StopResetTimer();
|
||||
|
||||
m_ResetTimer = new ResetTimer(this, delay);
|
||||
m_ResetTimer.Start();
|
||||
}
|
||||
|
||||
protected void StopResetTimer()
|
||||
{
|
||||
if (m_ResetTimer != null)
|
||||
{
|
||||
m_ResetTimer.Stop();
|
||||
m_ResetTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void Reset()
|
||||
{
|
||||
if (ItemID != 0x1093)
|
||||
Flip();
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
|
||||
writer.Write(RaisableItem);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadEncodedInt();
|
||||
|
||||
RaisableItem = (RaisableItem)reader.ReadItem();
|
||||
|
||||
Reset();
|
||||
}
|
||||
|
||||
private class ResetTimer : Timer
|
||||
{
|
||||
private RaiseSwitch m_RaiseSwitch;
|
||||
|
||||
public ResetTimer(RaiseSwitch raiseSwitch, TimeSpan delay) : base(delay)
|
||||
{
|
||||
m_RaiseSwitch = raiseSwitch;
|
||||
|
||||
Priority = ComputePriority(delay);
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if (m_RaiseSwitch.Deleted)
|
||||
return;
|
||||
|
||||
m_RaiseSwitch.m_ResetTimer = null;
|
||||
|
||||
m_RaiseSwitch.Reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class DisappearingRaiseSwitch : RaiseSwitch
|
||||
{
|
||||
[Constructible]
|
||||
public DisappearingRaiseSwitch() : base(0x108F)
|
||||
{
|
||||
}
|
||||
|
||||
public DisappearingRaiseSwitch(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public int CurrentRange => Visible ? 3 : 2;
|
||||
|
||||
public override bool HandlesOnMovement => true;
|
||||
|
||||
protected override void Flip()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Reset()
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (Utility.InRange(m.Location, Location, CurrentRange) || Utility.InRange(oldLocation, Location, CurrentRange))
|
||||
Refresh();
|
||||
}
|
||||
|
||||
public override void OnMapChange()
|
||||
{
|
||||
if (!Deleted)
|
||||
Refresh();
|
||||
}
|
||||
|
||||
public override void OnLocationChange(Point3D oldLoc)
|
||||
{
|
||||
if (!Deleted)
|
||||
Refresh();
|
||||
}
|
||||
|
||||
public void Refresh()
|
||||
{
|
||||
Visible = GetMobilesInRange(CurrentRange).Any(mob => !mob.Hidden || mob.AccessLevel <= AccessLevel.Player);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
if (RaisableItem?.Deleted == true)
|
||||
RaisableItem = null;
|
||||
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadEncodedInt();
|
||||
|
||||
Timer.DelayCall(TimeSpan.Zero, Refresh);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue