Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
@@ -0,0 +1,281 @@
|
||||
using System;
|
||||
using Server.Commands;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class ArisenController : Item
|
||||
{
|
||||
private static readonly int SpawnHour = 0; // Midnight
|
||||
private static readonly int DespawnHour = 4; // 4 AM
|
||||
|
||||
public class ArisenEntry
|
||||
{
|
||||
private Map m_Map;
|
||||
private Point3D m_Location;
|
||||
private string m_Creature;
|
||||
private int m_Amount;
|
||||
private int m_HomeRange;
|
||||
private int m_SpawnRange;
|
||||
private TimeSpan m_MinDelay;
|
||||
private TimeSpan m_MaxDelay;
|
||||
|
||||
public Map Map { get { return m_Map; } }
|
||||
public Point3D Location { get { return m_Location; } }
|
||||
public string Creature { get { return m_Creature; } }
|
||||
public int Amount { get { return m_Amount; } }
|
||||
public int HomeRange { get { return m_HomeRange; } }
|
||||
public int SpawnRange { get { return m_SpawnRange; } }
|
||||
public TimeSpan MinDelay { get { return m_MinDelay; } }
|
||||
public TimeSpan MaxDelay { get { return m_MaxDelay; } }
|
||||
|
||||
public ArisenEntry(Map map, Point3D location, string creature, int amount, int homeRange, int spawnRange, TimeSpan minDelay, TimeSpan maxDelay)
|
||||
{
|
||||
m_Map = map;
|
||||
m_Location = location;
|
||||
m_Creature = creature;
|
||||
m_Amount = amount;
|
||||
m_HomeRange = homeRange;
|
||||
m_SpawnRange = spawnRange;
|
||||
m_MinDelay = minDelay;
|
||||
m_MaxDelay = maxDelay;
|
||||
}
|
||||
|
||||
public XmlSpawner CreateSpawner()
|
||||
{
|
||||
XmlSpawner spawner = new XmlSpawner(m_Amount, (int)m_MinDelay.TotalSeconds, (int)m_MaxDelay.TotalSeconds, 0, 20, 10, m_Creature);
|
||||
|
||||
spawner.MoveToWorld(this.Location, this.Map);
|
||||
|
||||
return spawner;
|
||||
}
|
||||
}
|
||||
|
||||
private static ArisenEntry[] m_Entries = new ArisenEntry[]
|
||||
{
|
||||
new ArisenEntry( Map.TerMur, new Point3D( 996, 3862, -42 ), "EffeteUndeadGargoyle", 5, 20, 15, TimeSpan.FromSeconds( 15.0 ), TimeSpan.FromSeconds( 30.0 ) ),
|
||||
new ArisenEntry( Map.TerMur, new Point3D( 996, 3863, -42 ), "EffetePutridGargoyle", 5, 20, 15, TimeSpan.FromSeconds( 30.0 ), TimeSpan.FromSeconds( 60.0 ) ),
|
||||
new ArisenEntry( Map.TerMur, new Point3D( 996, 3864, -42 ), "GargoyleShade", 2, 15, 10, TimeSpan.FromSeconds( 60.0 ), TimeSpan.FromSeconds( 90.0 ) ),
|
||||
|
||||
new ArisenEntry( Map.TerMur, new Point3D( 996, 3892, -42 ), "EffeteUndeadGargoyle", 5, 20, 15, TimeSpan.FromSeconds( 15.0 ), TimeSpan.FromSeconds( 30.0 ) ),
|
||||
new ArisenEntry( Map.TerMur, new Point3D( 996, 3893, -42 ), "EffetePutridGargoyle", 5, 20, 15, TimeSpan.FromSeconds( 30.0 ), TimeSpan.FromSeconds( 60.0 ) ),
|
||||
|
||||
new ArisenEntry( Map.TerMur, new Point3D( 996, 3917, -42 ), "EffeteUndeadGargoyle", 5, 20, 15, TimeSpan.FromSeconds( 15.0 ), TimeSpan.FromSeconds( 30.0 ) ),
|
||||
new ArisenEntry( Map.TerMur, new Point3D( 996, 3918, -42 ), "EffetePutridGargoyle", 5, 20, 15, TimeSpan.FromSeconds( 30.0 ), TimeSpan.FromSeconds( 60.0 ) ),
|
||||
|
||||
new ArisenEntry( Map.TerMur, new Point3D( 996, 3951, -42 ), "EffeteUndeadGargoyle", 5, 20, 15, TimeSpan.FromSeconds( 15.0 ), TimeSpan.FromSeconds( 30.0 ) ),
|
||||
new ArisenEntry( Map.TerMur, new Point3D( 996, 3952, -42 ), "EffetePutridGargoyle", 5, 20, 15, TimeSpan.FromSeconds( 30.0 ), TimeSpan.FromSeconds( 60.0 ) ),
|
||||
new ArisenEntry( Map.TerMur, new Point3D( 997, 3951, -42 ), "GargoyleShade", 2, 15, 10, TimeSpan.FromSeconds( 60.0 ), TimeSpan.FromSeconds( 90.0 ) ),
|
||||
new ArisenEntry( Map.TerMur, new Point3D( 997, 3951, -42 ), "PutridUndeadGargoyle", 1, 10, 5, TimeSpan.FromMinutes( 5.0 ), TimeSpan.FromMinutes( 10.0 ) )
|
||||
};
|
||||
|
||||
public static ArisenEntry[] Entries { get { return m_Entries; } }
|
||||
|
||||
private static ArisenController m_Instance;
|
||||
|
||||
public static ArisenController Instance { get { return m_Instance; } }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
CommandSystem.Register("ArisenGenerate", AccessLevel.Owner, new CommandEventHandler(ArisenGenerate_OnCommand));
|
||||
CommandSystem.Register("ArisenDelete", AccessLevel.Owner, new CommandEventHandler(ArisenDelete_OnCommand));
|
||||
}
|
||||
|
||||
[Usage("ArisenGenerate")]
|
||||
[Description("Generates the Arisen creatures spawner.")]
|
||||
private static void ArisenGenerate_OnCommand(CommandEventArgs args)
|
||||
{
|
||||
Mobile from = args.Mobile;
|
||||
|
||||
if (Create())
|
||||
from.SendMessage("Arisen creatures spawner generated.");
|
||||
else
|
||||
from.SendMessage("Arisen creatures spawner already present.");
|
||||
}
|
||||
|
||||
[Usage("ArisenDelete")]
|
||||
[Description("Removes the Arisen creatures spawner.")]
|
||||
private static void ArisenDelete_OnCommand(CommandEventArgs args)
|
||||
{
|
||||
Mobile from = args.Mobile;
|
||||
|
||||
if (Remove())
|
||||
from.SendMessage("Arisen creatures spawner removed.");
|
||||
else
|
||||
from.SendMessage("Arisen creatures spawner not present.");
|
||||
}
|
||||
|
||||
public static bool Create()
|
||||
{
|
||||
if (m_Instance != null && !m_Instance.Deleted)
|
||||
return false;
|
||||
|
||||
m_Instance = new ArisenController();
|
||||
WeakEntityCollection.Add("sa", m_Instance);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool Remove()
|
||||
{
|
||||
if (m_Instance == null)
|
||||
return false;
|
||||
|
||||
m_Instance.Delete();
|
||||
m_Instance = null;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private InternalTimer m_SpawnTimer;
|
||||
private XmlSpawner[] m_Spawners;
|
||||
private bool m_Spawned;
|
||||
private bool m_ForceDeactivate;
|
||||
|
||||
[CommandProperty(AccessLevel.Seer)]
|
||||
public bool ForceDeactivate
|
||||
{
|
||||
get { return m_ForceDeactivate; }
|
||||
set { m_ForceDeactivate = value; }
|
||||
}
|
||||
|
||||
private ArisenController()
|
||||
: base(1)
|
||||
{
|
||||
Name = "Arisen Controller - Internal";
|
||||
Movable = false;
|
||||
|
||||
m_Spawners = new XmlSpawner[m_Entries.Length];
|
||||
|
||||
for (int i = 0; i < m_Entries.Length; i++)
|
||||
{
|
||||
m_Spawners[i] = m_Entries[i].CreateSpawner();
|
||||
m_Spawners[i].SmartSpawning = true;
|
||||
}
|
||||
|
||||
m_SpawnTimer = new InternalTimer(this);
|
||||
m_SpawnTimer.Start();
|
||||
}
|
||||
|
||||
public override void OnDelete()
|
||||
{
|
||||
base.OnDelete();
|
||||
|
||||
if (m_SpawnTimer != null)
|
||||
{
|
||||
m_SpawnTimer.Stop();
|
||||
m_SpawnTimer = null;
|
||||
}
|
||||
|
||||
foreach (XmlSpawner spawner in m_Spawners)
|
||||
spawner.Delete();
|
||||
|
||||
m_Instance = null;
|
||||
}
|
||||
|
||||
public void OnTick()
|
||||
{
|
||||
// check time
|
||||
int hours, minutes;
|
||||
|
||||
Clock.GetTime(Map.TerMur, 997, 3869, out hours, out minutes); // Holy City
|
||||
|
||||
m_Spawned = (hours >= SpawnHour && hours < DespawnHour) && !m_ForceDeactivate;
|
||||
|
||||
foreach (XmlSpawner spawner in m_Spawners)
|
||||
{
|
||||
if (!m_Spawned)
|
||||
{
|
||||
spawner.Reset();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!spawner.Running)
|
||||
{
|
||||
spawner.Respawn();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class InternalTimer : Timer
|
||||
{
|
||||
private ArisenController m_Controller;
|
||||
|
||||
public InternalTimer(ArisenController controller)
|
||||
: base(TimeSpan.Zero, TimeSpan.FromSeconds(5.0))
|
||||
{
|
||||
|
||||
m_Controller = controller;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
m_Controller.OnTick();
|
||||
}
|
||||
}
|
||||
|
||||
public ArisenController(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.WriteEncodedInt(1); // version
|
||||
|
||||
// Version 1
|
||||
writer.Write((bool)m_ForceDeactivate);
|
||||
|
||||
// Version 0
|
||||
writer.WriteEncodedInt(m_Spawners.Length);
|
||||
|
||||
for (int i = 0; i < m_Spawners.Length; i++)
|
||||
writer.WriteItem<XmlSpawner>(m_Spawners[i]);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadEncodedInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
m_ForceDeactivate = reader.ReadBool();
|
||||
|
||||
goto case 0;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
int length = reader.ReadEncodedInt();
|
||||
|
||||
m_Spawners = new XmlSpawner[length];
|
||||
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
var spawner = reader.ReadItem<XmlSpawner>();
|
||||
|
||||
if (spawner == null)
|
||||
{
|
||||
spawner = m_Entries[i].CreateSpawner();
|
||||
spawner.SmartSpawning = true;
|
||||
}
|
||||
|
||||
m_Spawners[i] = spawner;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
m_Instance = this;
|
||||
|
||||
m_SpawnTimer = new InternalTimer(this);
|
||||
m_SpawnTimer.Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user