136 lines
3.7 KiB
C#
136 lines
3.7 KiB
C#
using System;
|
|
using Server;
|
|
using Server.Mobiles;
|
|
using Server.Items;
|
|
using System.Linq;
|
|
|
|
namespace Server.Engines.TreasuresOfKotlCity
|
|
{
|
|
public class EnergyTileAddon : BaseAddon
|
|
{
|
|
public DateTime m_NextDeactivation;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public DateTime NextDeactivation { get { return m_NextDeactivation; } set { m_NextDeactivation = value; } }
|
|
|
|
public override BaseAddonDeed Deed { get { return null; } }
|
|
|
|
[Constructable]
|
|
public EnergyTileAddon(int count, Direction direction)
|
|
{
|
|
int x = 0;
|
|
int y = 0;
|
|
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
if (i == 0)
|
|
{
|
|
AddComponent(new EnergyTileComponent(), x, y, 0);
|
|
}
|
|
else
|
|
{
|
|
Movement.Movement.Offset(direction, ref x, ref y);
|
|
AddComponent(new EnergyTileComponent(), x, y, 0);
|
|
}
|
|
}
|
|
|
|
DeactivateRandom();
|
|
}
|
|
|
|
private void DeactivateRandom()
|
|
{
|
|
EnergyTileComponent comp = Components[Utility.Random(Components.Count)] as EnergyTileComponent;
|
|
|
|
foreach (EnergyTileComponent component in Components.OfType<EnergyTileComponent>())
|
|
{
|
|
if (comp == component)
|
|
{
|
|
comp.Active = false;
|
|
m_NextDeactivation = DateTime.UtcNow + TimeSpan.FromMinutes(120);
|
|
}
|
|
else if (!component.Active)
|
|
{
|
|
component.Active = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
public EnergyTileAddon(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write(0); // Version
|
|
|
|
writer.Write(m_NextDeactivation);
|
|
|
|
Timer.DelayCall(TimeSpan.FromSeconds(10), () =>
|
|
{
|
|
if (m_NextDeactivation < DateTime.UtcNow)
|
|
DeactivateRandom();
|
|
});
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
|
|
m_NextDeactivation = reader.ReadDateTime();
|
|
}
|
|
}
|
|
|
|
public class EnergyTileComponent : AddonComponent
|
|
{
|
|
private bool m_Active;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public bool Active { get { return m_Active; } set { m_Active = value; } }
|
|
|
|
public EnergyTileComponent() : base(0x9B3A)
|
|
{
|
|
m_Active = true;
|
|
Hue = 2591;
|
|
}
|
|
|
|
public override bool OnMoveOver(Mobile m)
|
|
{
|
|
if (!m_Active)
|
|
return base.OnMoveOver(m);
|
|
|
|
if (m is PlayerMobile || (m is BaseCreature && ((BaseCreature)m).GetMaster() is PlayerMobile))
|
|
{
|
|
AOS.Damage(m, Utility.RandomMinMax(100, 150), false, 0, 0, 0, 0, 100);
|
|
|
|
m.FixedParticles(0x3818, 1, 11, 0x13A8, 0, 0, EffectLayer.Waist);
|
|
m.PlaySound(0x665);
|
|
}
|
|
|
|
return base.OnMoveOver(m);
|
|
}
|
|
|
|
public EnergyTileComponent(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write(0); // Version
|
|
|
|
writer.Write(m_Active);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
|
|
m_Active = reader.ReadBool();
|
|
}
|
|
}
|
|
} |