Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View File

@@ -0,0 +1,242 @@
using System;
using Server.Network;
namespace Server.Items
{
public class RaiseSwitch : Item
{
private RaisableItem m_RaisableItem;
private ResetTimer m_ResetTimer;
[Constructable]
public RaiseSwitch()
: this(0x1093)
{
}
public RaiseSwitch(Serial serial)
: base(serial)
{
}
protected RaiseSwitch(int itemID)
: base(itemID)
{
this.Movable = false;
}
[CommandProperty(AccessLevel.GameMaster)]
public RaisableItem RaisableItem
{
get
{
return this.m_RaisableItem;
}
set
{
this.m_RaisableItem = value;
}
}
public override void OnDoubleClick(Mobile m)
{
if (!m.InRange(this, 2))
{
m.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
return;
}
if (this.RaisableItem != null && this.RaisableItem.Deleted)
this.RaisableItem = null;
this.Flip();
if (this.RaisableItem != null)
{
if (this.RaisableItem.IsRaisable)
{
this.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.");
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt((int)0); // version
writer.Write((Item)this.m_RaisableItem);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
this.m_RaisableItem = (RaisableItem)reader.ReadItem();
this.Reset();
}
protected virtual void Flip()
{
if (this.ItemID != 0x1093)
{
this.ItemID = 0x1093;
this.StopResetTimer();
}
else
{
this.ItemID = 0x1095;
if (this.RaisableItem != null && this.RaisableItem.CloseDelay >= TimeSpan.Zero)
this.StartResetTimer(this.RaisableItem.CloseDelay);
else
this.StartResetTimer(TimeSpan.FromMinutes(2.0));
}
Effects.PlaySound(this.Location, this.Map, 0x3E8);
}
protected void StartResetTimer(TimeSpan delay)
{
this.StopResetTimer();
this.m_ResetTimer = new ResetTimer(this, delay);
this.m_ResetTimer.Start();
}
protected void StopResetTimer()
{
if (this.m_ResetTimer != null)
{
this.m_ResetTimer.Stop();
this.m_ResetTimer = null;
}
}
protected virtual void Reset()
{
if (this.ItemID != 0x1093)
this.Flip();
}
private class ResetTimer : Timer
{
private readonly RaiseSwitch m_RaiseSwitch;
public ResetTimer(RaiseSwitch raiseSwitch, TimeSpan delay)
: base(delay)
{
this.m_RaiseSwitch = raiseSwitch;
this.Priority = ComputePriority(delay);
}
protected override void OnTick()
{
if (this.m_RaiseSwitch.Deleted)
return;
this.m_RaiseSwitch.m_ResetTimer = null;
this.m_RaiseSwitch.Reset();
}
}
}
public class DisappearingRaiseSwitch : RaiseSwitch
{
[Constructable]
public DisappearingRaiseSwitch()
: base(0x108F)
{
}
public DisappearingRaiseSwitch(Serial serial)
: base(serial)
{
}
public int CurrentRange
{
get
{
return this.Visible ? 3 : 2;
}
}
public override bool HandlesOnMovement
{
get
{
return true;
}
}
public override void OnMovement(Mobile m, Point3D oldLocation)
{
if (Utility.InRange(m.Location, this.Location, this.CurrentRange) || Utility.InRange(oldLocation, this.Location, this.CurrentRange))
this.Refresh();
}
public override void OnMapChange()
{
if (!this.Deleted)
this.Refresh();
}
public override void OnLocationChange(Point3D oldLoc)
{
if (!this.Deleted)
this.Refresh();
}
public void Refresh()
{
bool found = false;
IPooledEnumerable eable = GetMobilesInRange(CurrentRange);
foreach (Mobile mob in eable)
{
if (mob.Hidden && mob.IsStaff())
continue;
found = true;
break;
}
eable.Free();
this.Visible = found;
}
public override void Serialize(GenericWriter writer)
{
if (this.RaisableItem != null && this.RaisableItem.Deleted)
this.RaisableItem = null;
base.Serialize(writer);
writer.WriteEncodedInt((int)0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
Timer.DelayCall(TimeSpan.Zero, new TimerCallback(Refresh));
}
protected override void Flip()
{
}
protected override void Reset()
{
}
}
}