using System; using Server; using Server.Items; using Server.Mobiles; using Server.Engines.CityLoyalty; using Server.Engines.RisingTide; namespace Server.Items { public enum CargoQuality { Grandmaster, Exalted, Legendary, Mythical } public enum CargoType { Cloth = 1257, Jewelry = 353, Wood = 1155, Metal = 1175, Munitions = 1157, Granite = 2498, Reagents = 1156, Glassware = 1158, } // 1158907 You recover maritime trade cargo! [Flipable(0xA2C4, 0xA2C5)] public class MaritimeCargo : Item { private CargoQuality _CargoQuality; private CargoType _CargoType; private City _City; [CommandProperty(AccessLevel.GameMaster)] public CargoQuality CargoQuality { get { return _CargoQuality; } set { _CargoQuality = value; if (_CargoQuality == CargoQuality.Mythical) { Hue = 1177; } InvalidateProperties(); } } [CommandProperty(AccessLevel.GameMaster)] public CargoType CargoType { get { return _CargoType; } set { _CargoType = value; if (_CargoQuality != CargoQuality.Mythical && Hue != (int)_CargoType) { Hue = (int)_CargoType; } InvalidateProperties(); } } [CommandProperty(AccessLevel.GameMaster)] public City City { get { return _City; } set { _City = value; InvalidateProperties(); } } [Constructable] public MaritimeCargo() : this(RandomQuality(), RandomCity(), RandomType()) { } [Constructable] public MaritimeCargo(CargoQuality quality) : this(quality, RandomCity(), RandomType()) { } [Constructable] public MaritimeCargo(CargoQuality quality, City city, CargoType type) : base(0xA2C4) { CargoQuality = quality; City = city; CargoType = type; } private static CargoQuality RandomQuality() { var random = Utility.RandomDouble(); if (random < 0.05) { return CargoQuality.Legendary; } if (random < 0.33) { return CargoQuality.Exalted; } return CargoQuality.Grandmaster; } private static City RandomCity() { return (City)Utility.Random(9); } private static CargoType RandomType() { switch (Utility.Random(8)) { default: case 0: return CargoType.Cloth; case 1: return CargoType.Jewelry; case 2: return CargoType.Wood; case 3: return CargoType.Metal; case 4: return CargoType.Munitions; case 5: return CargoType.Granite; case 6: return CargoType.Reagents; case 7: return CargoType.Glassware; } } public int GetAwardAmount() { int amount; switch (_CargoQuality) { default: case CargoQuality.Grandmaster: amount = Utility.RandomMinMax(100, 200); break; case CargoQuality.Exalted: amount = Utility.RandomMinMax(500, 600); break; case CargoQuality.Legendary: amount = Utility.RandomMinMax(1000, 1100); break; case CargoQuality.Mythical: amount = Utility.RandomMinMax(10000, 15000); break; } return amount; } public override void AddNameProperty(ObjectPropertyList list) { list.Add(1158906, String.Format("#{0}", CityLoyaltySystem.GetCityLocalization(_City).ToString())); // Maritime Trade Cargo Destined for ~1_CITY~ } public override void AddWeightProperty(ObjectPropertyList list) { base.AddWeightProperty(list); list.Add(_CargoQuality < CargoQuality.Mythical ? 1158903 + (int)_CargoQuality : 1158969, String.Format("#{0}", TypeLabel(_CargoType))); } public static int TypeLabel(CargoType type) { switch (type) { default: case CargoType.Cloth: return 1044286; case CargoType.Jewelry: return 1011172; case CargoType.Wood: return 1079435; case CargoType.Metal: return 1049567; case CargoType.Munitions: return 1158902; case CargoType.Granite: return 1158900; case CargoType.Reagents: return 1002127; case CargoType.Glassware: return 1158901; } } public MaritimeCargo(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); writer.Write((int)_CargoQuality); writer.Write((int)_CargoType); writer.Write((int)_City); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); _CargoQuality = (CargoQuality)reader.ReadInt(); _CargoType = (CargoType)reader.ReadInt(); _City = (City)reader.ReadInt(); } } }