using System; using System.Collections.Generic; using System.Linq; using Server.Gumps; using Server.Engines.BulkOrders; namespace Server.Items { public enum CoverType { Normal, DullCopper, ShadowIron, Copper, Bronze, Gold, Agapite, Verite, Valorite, Spined, Horned, Barbed, Oak, Ash, Yew, Heartwood, Bloodwood, Frostwood, Alchemy, Blacksmith, Cooking, Fletching, Carpentry, Inscription, Tailoring, Tinkering } public class CoverInfo { public static List Infos { get; private set; } public static void Initialize() { Infos = new List(); Infos.Add(new CoverInfo(CoverType.Normal, 1071097, 0)); Infos.Add(new CoverInfo(CoverType.DullCopper, 1071101, CraftResources.GetHue(CraftResource.DullCopper))); Infos.Add(new CoverInfo(CoverType.ShadowIron, 1071107, CraftResources.GetHue(CraftResource.ShadowIron))); Infos.Add(new CoverInfo(CoverType.Copper, 1071108, CraftResources.GetHue(CraftResource.Copper))); Infos.Add(new CoverInfo(CoverType.Bronze, 1071109, CraftResources.GetHue(CraftResource.Bronze))); Infos.Add(new CoverInfo(CoverType.Gold, 1071112, CraftResources.GetHue(CraftResource.Gold))); Infos.Add(new CoverInfo(CoverType.Agapite, 1071113, CraftResources.GetHue(CraftResource.Agapite))); Infos.Add(new CoverInfo(CoverType.Verite, 1071114, CraftResources.GetHue(CraftResource.Verite))); Infos.Add(new CoverInfo(CoverType.Valorite, 1071115, CraftResources.GetHue(CraftResource.Valorite))); Infos.Add(new CoverInfo(CoverType.Spined, 1071098, CraftResources.GetHue(CraftResource.SpinedLeather))); Infos.Add(new CoverInfo(CoverType.Horned, 1071099, CraftResources.GetHue(CraftResource.HornedLeather))); Infos.Add(new CoverInfo(CoverType.Barbed, 1071100, CraftResources.GetHue(CraftResource.BarbedLeather))); Infos.Add(new CoverInfo(CoverType.Oak, 1071410, CraftResources.GetHue(CraftResource.OakWood))); Infos.Add(new CoverInfo(CoverType.Ash, 1071411, CraftResources.GetHue(CraftResource.AshWood))); Infos.Add(new CoverInfo(CoverType.Yew, 1071412, CraftResources.GetHue(CraftResource.YewWood))); Infos.Add(new CoverInfo(CoverType.Heartwood, 1071413, CraftResources.GetHue(CraftResource.Heartwood))); Infos.Add(new CoverInfo(CoverType.Bloodwood, 1071414, CraftResources.GetHue(CraftResource.Bloodwood))); Infos.Add(new CoverInfo(CoverType.Frostwood, 1071415, CraftResources.GetHue(CraftResource.Frostwood))); Infos.Add(new CoverInfo(CoverType.Alchemy, 1157605, 2505, 1002000)); Infos.Add(new CoverInfo(CoverType.Blacksmith, 1157605, 0x44E, 1157607)); Infos.Add(new CoverInfo(CoverType.Cooking, 1157605, 1169, 1002063)); Infos.Add(new CoverInfo(CoverType.Fletching, 1157605, 1425, 1002047)); Infos.Add(new CoverInfo(CoverType.Carpentry, 1157605, 1512, 1002054)); Infos.Add(new CoverInfo(CoverType.Inscription, 1157605, 2598, 1002090)); Infos.Add(new CoverInfo(CoverType.Tailoring, 1157605, 0x483, 1002155)); Infos.Add(new CoverInfo(CoverType.Tinkering, 1157605, 1109, 1002162)); } public CoverType Type { get; private set; } public TextDefinition Label { get; private set; } public int Hue { get; private set; } public TextDefinition Args { get; private set; } public CoverInfo(CoverType type, TextDefinition label, int hue, TextDefinition args = null) { Type = type; Label = label; Hue = hue; Args = args; } } public class BulkOrderBookCover : Item { private CoverType _CoverType; private int _UsesRemaining; [CommandProperty(AccessLevel.GameMaster)] public CoverType CoverType { get { return _CoverType; } set { var current = _CoverType; if (current != value) { _CoverType = value; InvalidateHue(); InvalidateProperties(); } } } [CommandProperty(AccessLevel.GameMaster)] public int UsesRemaining { get { return _UsesRemaining; } set { _UsesRemaining = value; InvalidateProperties(); } } [Constructable] public BulkOrderBookCover(CoverType type) : this(type, 30) { } [Constructable] public BulkOrderBookCover(CoverType type, int uses) : base(0x2831) { UsesRemaining = uses; LootType = LootType.Blessed; CoverType = type; } public BulkOrderBookCover(Serial serial) : base(serial) { } public void InvalidateHue() { var info = CoverInfo.Infos.FirstOrDefault(x => x.Type == _CoverType); if (info != null) { Hue = info.Hue; } } public override void AddNameProperty(ObjectPropertyList list) { var info = CoverInfo.Infos.FirstOrDefault(x => x.Type == _CoverType); if (info != null) { if (info.Args != null) { list.Add(1157605, info.Args.ToString()); // Bulk Order Cover (~1_HUE~) } else if (info.Label.Number > 0) { list.Add(info.Label.Number); } else { list.Add(1114057, info.Label.ToString()); // ~1_val~ } } else { list.Add(1071097); // Bulk Order Cover (Normal) } } public override void GetProperties(ObjectPropertyList list) { base.GetProperties(list); list.Add(1060584, _UsesRemaining.ToString()); // uses remaining: ~1_val~ } public override void OnDoubleClick(Mobile from) { if (IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1071121); // Select the bulk order book you want to replace a cover. from.BeginTarget(-1, false, Server.Targeting.TargetFlags.None, (m, targeted) => { if (targeted is BulkOrderBook) { var bob = (BulkOrderBook)targeted; if (bob.IsChildOf(m.Backpack)) { if (bob.Hue != Hue) { bob.Hue = Hue; UsesRemaining--; m.SendLocalizedMessage(1071119); // You have successfully given the bulk order book a new cover. m.PlaySound(0x048); if (UsesRemaining <= 0) { m.SendLocalizedMessage(1071120); // You have used up all the bulk order book covers. Delete(); } } else { m.SendLocalizedMessage(1071122); // You cannot cover it with same color. } } else { m.SendLocalizedMessage(1071117); // You cannot use this item for it. } } else { m.SendLocalizedMessage(1071118); // You can only cover a bulk order book with this item. } }); } } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write((int)1); writer.Write(_UsesRemaining); writer.Write((int)_CoverType); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 1: _UsesRemaining = reader.ReadInt(); _CoverType = (CoverType)reader.ReadInt(); break; case 0: _UsesRemaining = 30; break; } } } public class BagOfBulkOrderCovers : Bag { public override int LabelNumber { get { return 1071116; } } // Bag of bulk order covers public BagOfBulkOrderCovers(int start, int end) { for(int i = start; i <= end; i++) { if (i >= 0 && i < CoverInfo.Infos.Count) { DropItem(new BulkOrderBookCover(CoverInfo.Infos[i].Type)); } } } public BagOfBulkOrderCovers(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write((int)0); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } }