#region References using System.Collections; using Server; using Server.Multis; using Server.Targeting; #endregion namespace Knives.TownHouses { public enum HammerJob { Flip, Swap } public class SignHammer : Item { private static readonly Hashtable s_Table = new Hashtable(); private static readonly ArrayList s_List = new ArrayList(); public static void Initialize() { // Signs s_Table[0xB95] = 0xB96; s_Table[0xB96] = 0xB95; s_Table[0xBA3] = 0xBA4; s_Table[0xBA4] = 0xBA3; s_Table[0xBA5] = 0xBA6; s_Table[0xBA6] = 0xBA5; s_Table[0xBA7] = 0xBA8; s_Table[0xBA8] = 0xBA7; s_Table[0xBA9] = 0xBAA; s_Table[0xBAA] = 0xBA9; s_Table[0xBAB] = 0xBAC; s_Table[0xBAC] = 0xBAB; s_Table[0xBAD] = 0xBAE; s_Table[0xBAE] = 0xBAD; s_Table[0xBAF] = 0xBB0; s_Table[0xBB0] = 0xBAF; s_Table[0xBB1] = 0xBB2; s_Table[0xBB2] = 0xBB1; s_Table[0xBB3] = 0xBB4; s_Table[0xBB4] = 0xBB3; s_Table[0xBB5] = 0xBB6; s_Table[0xBB6] = 0xBB5; s_Table[0xBB7] = 0xBB8; s_Table[0xBB8] = 0xBB7; s_Table[0xBB9] = 0xBBA; s_Table[0xBBA] = 0xBB9; s_Table[0xBBB] = 0xBBC; s_Table[0xBBC] = 0xBBB; s_Table[0xBBD] = 0xBBE; s_Table[0xBBE] = 0xBBD; s_Table[0xBBF] = 0xBC0; s_Table[0xBC0] = 0xBBF; s_Table[0xBC1] = 0xBC2; s_Table[0xBC2] = 0xBC1; s_Table[0xBC3] = 0xBC4; s_Table[0xBC4] = 0xBC3; s_Table[0xBC5] = 0xBC6; s_Table[0xBC6] = 0xBC5; s_Table[0xBC7] = 0xBC8; s_Table[0xBC8] = 0xBC7; s_Table[0xBC9] = 0xBCA; s_Table[0xBCA] = 0xBC9; s_Table[0xBCB] = 0xBCC; s_Table[0xBCC] = 0xBCB; s_Table[0xBCD] = 0xBCE; s_Table[0xBCE] = 0xBCD; s_Table[0xBCF] = 0xBD0; s_Table[0xBD0] = 0xBCF; s_Table[0xBD1] = 0xBD2; s_Table[0xBD2] = 0xBD1; s_Table[0xBD3] = 0xBD4; s_Table[0xBD4] = 0xBD3; s_Table[0xBD5] = 0xBD6; s_Table[0xBD6] = 0xBD5; s_Table[0xBD7] = 0xBD8; s_Table[0xBD8] = 0xBD7; s_Table[0xBD9] = 0xBDA; s_Table[0xBDA] = 0xBD9; s_Table[0xBDB] = 0xBDC; s_Table[0xBDC] = 0xBDB; s_Table[0xBDD] = 0xBDE; s_Table[0xBDE] = 0xBDD; s_Table[0xBDF] = 0xBE0; s_Table[0xBE0] = 0xBDF; s_Table[0xBE1] = 0xBE2; s_Table[0xBE2] = 0xBE1; s_Table[0xBE3] = 0xBE4; s_Table[0xBE4] = 0xBE3; s_Table[0xBE5] = 0xBE6; s_Table[0xBE6] = 0xBE5; s_Table[0xBE7] = 0xBE8; s_Table[0xBE8] = 0xBE7; s_Table[0xBE9] = 0xBEA; s_Table[0xBEA] = 0xBE9; s_Table[0xBEB] = 0xBEC; s_Table[0xBEC] = 0xBEB; s_Table[0xBED] = 0xBEE; s_Table[0xBEE] = 0xBED; s_Table[0xBEF] = 0xBF0; s_Table[0xBF0] = 0xBEF; s_Table[0xBF1] = 0xBF2; s_Table[0xBF2] = 0xBF1; s_Table[0xBF3] = 0xBF4; s_Table[0xBF4] = 0xBF3; s_Table[0xBF5] = 0xBF6; s_Table[0xBF6] = 0xBF5; s_Table[0xBF7] = 0xBF8; s_Table[0xBF8] = 0xBF7; s_Table[0xBF9] = 0xBFA; s_Table[0xBFA] = 0xBF9; s_Table[0xBFB] = 0xBFC; s_Table[0xBFC] = 0xBFB; s_Table[0xBFD] = 0xBFE; s_Table[0xBFE] = 0xBFD; s_Table[0xBFF] = 0xC00; s_Table[0xC00] = 0xBFF; s_Table[0xC01] = 0xC02; s_Table[0xC02] = 0xC01; s_Table[0xC03] = 0xC04; s_Table[0xC04] = 0xC03; s_Table[0xC05] = 0xC06; s_Table[0xC06] = 0xC05; s_Table[0xC07] = 0xC08; s_Table[0xC08] = 0xC07; s_Table[0xC09] = 0xC0A; s_Table[0xC0A] = 0xC09; s_Table[0xC0B] = 0xC0C; s_Table[0xC0C] = 0xC0B; s_Table[0xC0D] = 0xC0E; s_Table[0xC0E] = 0xC0D; // Hangers s_Table[0xB97] = 0xB98; s_Table[0xB98] = 0xB97; s_Table[0xB99] = 0xB9A; s_Table[0xB9A] = 0xB99; s_Table[0xB9B] = 0xB9C; s_Table[0xB9C] = 0xB9B; s_Table[0xB9D] = 0xB9E; s_Table[0xB9E] = 0xB9D; s_Table[0xB9F] = 0xBA0; s_Table[0xBA0] = 0xB9F; s_Table[0xBA1] = 0xBA2; s_Table[0xBA2] = 0xBA1; // Hangers for swapping s_List.Add(0xB97); s_List.Add(0xB98); s_List.Add(0xB99); s_List.Add(0xB9A); s_List.Add(0xB9B); s_List.Add(0xB9C); s_List.Add(0xB9D); s_List.Add(0xB9E); s_List.Add(0xB9F); s_List.Add(0xBA0); s_List.Add(0xBA1); s_List.Add(0xBA2); } public HammerJob Job { get; set; } [Constructable] public SignHammer() : base(0x13E3) { Name = "Sign Hammer"; } public int GetFlipFor(int id) { return (s_Table[id] == null ? id : (int)s_Table[id]); } public int GetNextSign(int id) { if (!s_List.Contains(id)) { return id; } var idx = s_List.IndexOf(id); if (idx + 2 < s_List.Count) { return (int)s_List[idx + 2]; } if (idx % 2 == 0) { return (int)s_List[0]; } return (int)s_List[1]; } public override void OnDoubleClick(Mobile m) { if (RootParent != m) { m.SendMessage("That item must be in your backpack to use."); return; } var house = BaseHouse.FindHouseAt(m); if (m.AccessLevel < AccessLevel.Counselor && (house == null || house.Owner != m)) { m.SendMessage("You have to be inside your house to use this."); return; } m.BeginTarget(3, false, TargetFlags.None, OnTarget); } protected void OnTarget(Mobile m, object obj) { var item = obj as Item; if (item == null) { m.SendMessage("You cannot change that with this."); return; } if (item == this) { new SignHammerGump(m, this); return; } if (Job == HammerJob.Flip) { var id = GetFlipFor(item.ItemID); if (id == item.ItemID) { m.SendMessage("You cannot change that with this."); } else { item.ItemID = id; } } else { var id = GetNextSign(item.ItemID); if (id == item.ItemID) { m.SendMessage("You cannot change that with this."); } else { item.ItemID = id; } } } public SignHammer(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); reader.ReadInt(); } } public class SignHammerGump : GumpPlusLight { private readonly SignHammer c_Hammer; public SignHammerGump(Mobile m, SignHammer hammer) : base(m, 100, 100) { c_Hammer = hammer; NewGump(); } protected override void BuildGump() { AddBackground(0, 0, 200, 200, 2600); AddButton(50, 45, 2152, 2154, "Swap", Swap); AddHtml(90, 50, 70, "Swap Hanger"); AddButton(50, 95, 2152, 2154, "Flip", Flip); AddHtml(90, 100, 70, "Flip Sign or Hanger"); } private void Swap() { c_Hammer.Job = HammerJob.Swap; } private void Flip() { c_Hammer.Job = HammerJob.Flip; } } }