using System; using Server; using Server.Gumps; using Server.Engines; using Server.Multis; using Server.Commands; namespace Server.Items { [FlipableAttribute(0x407C, 0x407D)] public class Incubator : Container, ISecurable { public static readonly int MaxEggs = 6; public override int LabelNumber { get { return 1112479; } } //an incubator private SecureLevel m_Level; [CommandProperty(AccessLevel.GameMaster)] public SecureLevel Level { get { return m_Level; } set { m_Level = value; } } public override int DefaultGumpID { get { return 1156; } } public override int DefaultDropSound { get { return 66; } } [Constructable] public Incubator() : base(0x407C) { m_Level = SecureLevel.CoOwners; } public override bool OnDragDropInto(Mobile from, Item item, Point3D p) { bool canDrop = base.OnDragDropInto(from, item, p); if (canDrop && item is ChickenLizardEgg) { ChickenLizardEgg egg = (ChickenLizardEgg)item; if (egg.TotalIncubationTime > TimeSpan.FromHours(120)) egg.BurnEgg(); else { egg.IncubationStart = DateTime.UtcNow; egg.Incubating = true; } } return canDrop; } public override bool OnDragDrop(Mobile from, Item item) { bool canDrop = base.OnDragDrop(from, item); if (canDrop && item is ChickenLizardEgg) { ChickenLizardEgg egg = (ChickenLizardEgg)item; if (egg.TotalIncubationTime > TimeSpan.FromHours(120)) egg.BurnEgg(); else { egg.IncubationStart = DateTime.UtcNow; egg.Incubating = true; } } return canDrop; } public override bool CheckHold(Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight) { if (!BaseHouse.CheckSecured(this)) { m.SendLocalizedMessage(1113711); //The incubator must be secured for the egg to grow, not locked down. return false; } if (!(item is ChickenLizardEgg)) { m.SendMessage("This will only accept chicken eggs."); return false; } if (MaxEggs > -1 && Items.Count >= MaxEggs) { m.SendMessage("You can only put {0} chicken eggs in the incubator at a time.", MaxEggs.ToString()); //TODO: Get Message return false; } return true; } public void CheckEggs_Callback() { if (!BaseHouse.CheckSecured(this)) return; foreach (Item item in Items) { if (item is ChickenLizardEgg) ((ChickenLizardEgg)item).CheckStatus(); } } public static void Initialize() { CommandSystem.Register("IncreaseStage", AccessLevel.Counselor, new CommandEventHandler(IncreaseStage_OnCommand)); } public static void IncreaseStage_OnCommand(CommandEventArgs e) { e.Mobile.SendMessage("Target the egg."); e.Mobile.BeginTarget(12, false, Server.Targeting.TargetFlags.None, new TargetCallback(IncreaseStage_OnTarget)); } public static void IncreaseStage_OnTarget(Mobile from, object targeted) { if (targeted is ChickenLizardEgg) { ((ChickenLizardEgg)targeted).TotalIncubationTime += TimeSpan.FromHours(24); ((ChickenLizardEgg)targeted).CheckStatus(); } } public Incubator(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write((int)0); // version writer.Write((int)m_Level); if (Items.Count > 0) Timer.DelayCall(TimeSpan.FromSeconds(10), new TimerCallback(CheckEggs_Callback)); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); m_Level = (SecureLevel)reader.ReadInt(); if (Items.Count > 0) Timer.DelayCall(TimeSpan.FromSeconds(60), new TimerCallback(CheckEggs_Callback)); } } }