mirror of
https://github.com/ServUO/ServUO
synced 2026-08-11 20:23:04 -04:00
-Fixed issue where client helpers could bypass the container gump and add items directly to the seed box -SearedFireAntGoo is no longer stackable -Blue NPC's (mainly vendors, not initial innocent) can no longer be attacked on trammel maps -Aggressors/Aggressed from pet masters now works properly. This was suspected to crated large numbers to redundant aggressor/aggressed added to a mobiles aggressor/aggressed lists -Aggressive action for healing a mobile while fighting another mobile has been re-enabled -AuraDamage is now a harmful act, ie those affected will aggro on your pet! -MLDryads should no longer attack other wild creatures during Blackthorn Invasion Instance -More code cleanup
120 lines
3 KiB
C#
120 lines
3 KiB
C#
using System;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public class AbyssKey : Item
|
|
{
|
|
private int m_Lifespan;
|
|
private Timer m_Timer;
|
|
[Constructable]
|
|
public AbyssKey(int itemID)
|
|
: base(itemID)
|
|
{
|
|
LootType = LootType.Blessed;
|
|
|
|
if (Lifespan > 0)
|
|
{
|
|
m_Lifespan = Lifespan;
|
|
StartTimer();
|
|
}
|
|
}
|
|
|
|
public AbyssKey(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public virtual int Lifespan => 0;
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int TimeLeft
|
|
{
|
|
get
|
|
{
|
|
return m_Lifespan;
|
|
}
|
|
set
|
|
{
|
|
m_Lifespan = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
public override void GetProperties(ObjectPropertyList list)
|
|
{
|
|
base.GetProperties(list);
|
|
|
|
if (Lifespan > 0)
|
|
list.Add(1072517, m_Lifespan.ToString()); // Lifespan: ~1_val~ seconds
|
|
}
|
|
|
|
public virtual void StartTimer()
|
|
{
|
|
if (m_Timer != null)
|
|
return;
|
|
|
|
m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10), Slice);
|
|
m_Timer.Priority = TimerPriority.OneSecond;
|
|
}
|
|
|
|
public virtual void StopTimer()
|
|
{
|
|
if (m_Timer != null)
|
|
m_Timer.Stop();
|
|
|
|
m_Timer = null;
|
|
}
|
|
|
|
public virtual void Slice()
|
|
{
|
|
m_Lifespan -= 10;
|
|
|
|
InvalidateProperties();
|
|
|
|
if (m_Lifespan <= 0)
|
|
Decay();
|
|
}
|
|
|
|
public virtual void Decay()
|
|
{
|
|
if (RootParent is Mobile)
|
|
{
|
|
Mobile parent = (Mobile)RootParent;
|
|
|
|
if (Name == null)
|
|
parent.SendLocalizedMessage(1072515, "#" + LabelNumber); // The ~1_name~ expired...
|
|
else
|
|
parent.SendLocalizedMessage(1072515, Name); // The ~1_name~ expired...
|
|
|
|
Effects.SendLocationParticles(EffectItem.Create(parent.Location, parent.Map, EffectItem.DefaultDuration), 0x3728, 8, 20, 5042);
|
|
Effects.PlaySound(parent.Location, parent.Map, 0x201);
|
|
}
|
|
else
|
|
{
|
|
Effects.SendLocationParticles(EffectItem.Create(Location, Map, EffectItem.DefaultDuration), 0x3728, 8, 20, 5042);
|
|
Effects.PlaySound(Location, Map, 0x201);
|
|
}
|
|
|
|
StopTimer();
|
|
Delete();
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.Write(0); // version
|
|
|
|
writer.Write(m_Lifespan);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadInt();
|
|
|
|
m_Lifespan = reader.ReadInt();
|
|
|
|
StartTimer();
|
|
}
|
|
}
|
|
}
|