Files
abysmal-isle/Scripts/Items/Corpses/DecayedCorpse.cs
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

119 lines
3.0 KiB
C#

using System;
namespace Server.Items
{
public class DecayedCorpse : Container
{
private static readonly TimeSpan m_DefaultDecayTime = TimeSpan.FromMinutes(7.0);
private Timer m_DecayTimer;
private DateTime m_DecayTime;
public DecayedCorpse(string name)
: base(Utility.Random(0xECA, 9))
{
this.Movable = false;
this.Name = name;
this.BeginDecay(m_DefaultDecayTime);
}
public DecayedCorpse(Serial serial)
: base(serial)
{
}
// Do not display (x items, y stones)
public override bool DisplaysContent
{
get
{
return false;
}
}
public void BeginDecay(TimeSpan delay)
{
if (this.m_DecayTimer != null)
this.m_DecayTimer.Stop();
this.m_DecayTime = DateTime.UtcNow + delay;
this.m_DecayTimer = new InternalTimer(this, delay);
this.m_DecayTimer.Start();
}
public override void OnAfterDelete()
{
if (this.m_DecayTimer != null)
this.m_DecayTimer.Stop();
this.m_DecayTimer = null;
}
// Do not display (x items, y stones)
public override bool CheckContentDisplay(Mobile from)
{
return false;
}
public override void AddNameProperty(ObjectPropertyList list)
{
list.Add(1046414, this.Name); // the remains of ~1_NAME~
}
public override void OnSingleClick(Mobile from)
{
this.LabelTo(from, 1046414, this.Name); // the remains of ~1_NAME~
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)1); // version
writer.Write(this.m_DecayTimer != null);
if (this.m_DecayTimer != null)
writer.WriteDeltaTime(this.m_DecayTime);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch ( version )
{
case 0:
{
this.BeginDecay(m_DefaultDecayTime);
break;
}
case 1:
{
if (reader.ReadBool())
this.BeginDecay(reader.ReadDeltaTime() - DateTime.UtcNow);
break;
}
}
}
private class InternalTimer : Timer
{
private readonly DecayedCorpse m_Corpse;
public InternalTimer(DecayedCorpse c, TimeSpan delay)
: base(delay)
{
this.m_Corpse = c;
this.Priority = TimerPriority.FiveSeconds;
}
protected override void OnTick()
{
this.m_Corpse.Delete();
}
}
}
}