From ed87df1a61df123f36a473cfd0fbfed9d06371d3 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Mon, 27 Jan 2025 14:00:32 -0800 Subject: [PATCH] fix: Converts bedroll/insurance gumps to static. (#2096) --- .../Items/Skill Items/Camping/Bedroll.cs | 31 +- .../Items/Skill Items/Camping/Campfire.cs | 38 +- Projects/UOContent/Mobiles/PlayerMobile.cs | 350 ++++++++---------- 3 files changed, 193 insertions(+), 226 deletions(-) diff --git a/Projects/UOContent/Items/Skill Items/Camping/Bedroll.cs b/Projects/UOContent/Items/Skill Items/Camping/Bedroll.cs index dd6375720..33aebc3ce 100644 --- a/Projects/UOContent/Items/Skill Items/Camping/Bedroll.cs +++ b/Projects/UOContent/Items/Skill Items/Camping/Bedroll.cs @@ -55,23 +55,26 @@ public partial class Bedroll : Item } } - private class LogoutGump : Gump + private class LogoutGump : StaticGump { - private Bedroll _dedroll; + private readonly Bedroll _bedroll; private TimerExecutionToken _closeTimerToken; - private CampfireEntry _entry; + private readonly CampfireEntry _entry; public LogoutGump(CampfireEntry entry, Bedroll bedroll) : base(100, 0) { _entry = entry; - _dedroll = bedroll; + _bedroll = bedroll; Timer.StartTimer(TimeSpan.FromSeconds(10.0), CloseGump, out _closeTimerToken); + } - AddBackground(0, 0, 400, 350, 0xA28); + protected override void BuildLayout(ref StaticGumpBuilder builder) + { + builder.AddBackground(0, 0, 400, 350, 0xA28); - AddHtmlLocalized(100, 20, 200, 35, 1011015); //
Logging out via camping
+ builder.AddHtmlLocalized(100, 20, 200, 35, 1011015); //
Logging out via camping
/* Using a bedroll in the safety of a camp will log you out of the game safely. * If this is what you wish to do choose CONTINUE and you will be logged out. @@ -79,13 +82,13 @@ public partial class Bedroll : Item * The camp will remain secure for 10 seconds at which time this window will close * and you not be logged out. */ - AddHtmlLocalized(50, 55, 300, 140, 1011016, true, true); + builder.AddHtmlLocalized(50, 55, 300, 140, 1011016, true, true); - AddButton(45, 298, 0xFA5, 0xFA7, 1); - AddHtmlLocalized(80, 300, 110, 35, 1011011); // CONTINUE + builder.AddButton(45, 298, 0xFA5, 0xFA7, 1); + builder.AddHtmlLocalized(80, 300, 110, 35, 1011011); // CONTINUE - AddButton(200, 298, 0xFA5, 0xFA7, 0); - AddHtmlLocalized(235, 300, 110, 35, 1011012); // CANCEL + builder.AddButton(200, 298, 0xFA5, 0xFA7, 0); + builder.AddHtmlLocalized(235, 300, 110, 35, 1011012); // CANCEL } public override void OnResponse(NetState sender, in RelayInfo info) @@ -99,10 +102,10 @@ public partial class Bedroll : Item return; } - if (info.ButtonID == 1 && _entry.Safe && _dedroll.Parent == null && _dedroll.IsAccessibleTo(pm) - && _dedroll.VerifyMove(pm) && _dedroll.Map == pm.Map && pm.InRange(_dedroll, 2)) + if (info.ButtonID == 1 && _entry.Safe && _bedroll.Parent == null && _bedroll.IsAccessibleTo(pm) + && _bedroll.VerifyMove(pm) && _bedroll.Map == pm.Map && pm.InRange(_bedroll, 2)) { - pm.PlaceInBackpack(_dedroll); + pm.PlaceInBackpack(_bedroll); pm.BedrollLogout = true; sender.Disconnect("Used a bedroll to log out."); diff --git a/Projects/UOContent/Items/Skill Items/Camping/Campfire.cs b/Projects/UOContent/Items/Skill Items/Camping/Campfire.cs index 7aa45e4c0..c45962a3a 100644 --- a/Projects/UOContent/Items/Skill Items/Camping/Campfire.cs +++ b/Projects/UOContent/Items/Skill Items/Camping/Campfire.cs @@ -15,11 +15,11 @@ public enum CampfireStatus [SerializationGenerator(0, false)] public partial class Campfire : Item { - public static readonly int SecureRange = 7; + public const int SecureRange = 7; - private static readonly Dictionary m_Table = new(); + private static readonly Dictionary _table = []; - private readonly List m_Entries; + private readonly List _entries; private TimerExecutionToken _timerToken; @@ -28,8 +28,7 @@ public partial class Campfire : Item Movable = false; Light = LightType.Circle300; - m_Entries = new List(); - + _entries = []; Timer.StartTimer(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.0), OnTick, out _timerToken); } @@ -79,16 +78,12 @@ public partial class Campfire : Item } } - public static CampfireEntry GetEntry(Mobile player) - { - m_Table.TryGetValue(player, out var value); - return value; - } + public static CampfireEntry GetEntry(Mobile player) => _table.GetValueOrDefault(player); public static void RemoveEntry(CampfireEntry entry) { - m_Table.Remove(entry.Player); - entry.Fire.m_Entries.Remove(entry); + _table.Remove(entry.Player); + entry.Fire._entries.Remove(entry); } private void OnTick() @@ -114,9 +109,9 @@ public partial class Campfire : Item return; } - for (var i = m_Entries.Count - 1; i >= 0; i--) + for (var i = _entries.Count - 1; i >= 0; i--) { - var entry = m_Entries[i]; + var entry = _entries[i]; if (!entry.Valid || entry.Player.NetState == null) { @@ -135,8 +130,8 @@ public partial class Campfire : Item { var entry = new CampfireEntry(pm, this); - m_Table[pm] = entry; - m_Entries.Add(entry); + _table[pm] = entry; + _entries.Add(entry); pm.SendLocalizedMessage(500620); // You feel it would take a few moments to secure your camp. } @@ -145,24 +140,23 @@ public partial class Campfire : Item private void ClearEntries() { - if (m_Entries == null) + if (_entries == null) { return; } - foreach (var entry in m_Entries) + foreach (var entry in _entries) { - m_Table.Remove(entry.Player); + _table.Remove(entry.Player); } - m_Entries.Clear(); - m_Entries.TrimExcess(); + _entries.Clear(); + _entries.TrimExcess(); } public override void OnAfterDelete() { _timerToken.Cancel(); - ClearEntries(); } diff --git a/Projects/UOContent/Mobiles/PlayerMobile.cs b/Projects/UOContent/Mobiles/PlayerMobile.cs index d4861299e..9da05f1c1 100644 --- a/Projects/UOContent/Mobiles/PlayerMobile.cs +++ b/Projects/UOContent/Mobiles/PlayerMobile.cs @@ -3853,11 +3853,8 @@ namespace Server.Mobiles return; } - SendLocalizedMessage( - 1060881, - "", - 0x23 - ); // You have selected to automatically reinsure all insured items upon death + // You have selected to automatically reinsure all insured items upon death + SendLocalizedMessage(1060881, "", 0x23); AutoRenewInsurance = true; } @@ -3868,20 +3865,14 @@ namespace Server.Mobiles return; } - if (Core.SE && NetState is { } ns) + if (Core.SE) { - if (!ns.HasGump()) - { - ns.SendGump(new CancelRenewInventoryInsuranceGump(this, null)); - } + NetState?.SendGump(new CancelRenewInventoryInsuranceGump(null)); } else { - SendLocalizedMessage( - 1061075, - "", - 0x23 - ); // You have cancelled automatically reinsuring all insured items upon death + // You have cancelled automatically reinsuring all insured items upon death + SendLocalizedMessage(1061075, "", 0x23); AutoRenewInsurance = false; } } @@ -3917,18 +3908,15 @@ namespace Server.Mobiles } // TODO: Investigate item sorting - - if (NetState is { } ns) + if (NetState != null) { - ns.CloseGump(); - if (queue.Count == 0) { SendLocalizedMessage(1114915, "", 0x35); // None of your current items meet the requirements for insurance. } else { - ns.SendGump(new ItemInsuranceMenuGump(this, queue.ToArray())); + NetState.SendGump(new ItemInsuranceMenuGump(this, queue.ToArray())); } } } @@ -4615,43 +4603,35 @@ namespace Server.Mobiles } } - private class CancelRenewInventoryInsuranceGump : Gump + private class CancelRenewInventoryInsuranceGump : StaticGump { - private readonly ItemInsuranceMenuGump m_InsuranceGump; - private readonly PlayerMobile m_Player; + private readonly ItemInsuranceMenuGump _insuranceGump; - public CancelRenewInventoryInsuranceGump(PlayerMobile player, ItemInsuranceMenuGump insuranceGump) : base( - 250, - 200 - ) + public override bool Singleton => true; + + public CancelRenewInventoryInsuranceGump(ItemInsuranceMenuGump insuranceGump) : base(250, 200) => + _insuranceGump = insuranceGump; + + protected override void BuildLayout(ref StaticGumpBuilder builder) { - m_Player = player; - m_InsuranceGump = insuranceGump; + builder.AddBackground(0, 0, 240, 142, 0x13BE); + builder.AddImageTiled(6, 6, 228, 100, 0xA40); + builder.AddImageTiled(6, 116, 228, 20, 0xA40); + builder.AddAlphaRegion(6, 6, 228, 142); - AddBackground(0, 0, 240, 142, 0x13BE); - AddImageTiled(6, 6, 228, 100, 0xA40); - AddImageTiled(6, 116, 228, 20, 0xA40); - AddAlphaRegion(6, 6, 228, 142); + // You are about to disable inventory insurance auto-renewal. + builder.AddHtmlLocalized(8, 8, 228, 100, 1071021, 0x7FFF); - AddHtmlLocalized( - 8, - 8, - 228, - 100, - 1071021, - 0x7FFF - ); // You are about to disable inventory insurance auto-renewal. + builder.AddButton(6, 116, 0xFB1, 0xFB2, 0); + builder.AddHtmlLocalized(40, 118, 450, 20, 1060051, 0x7FFF); // CANCEL - AddButton(6, 116, 0xFB1, 0xFB2, 0); - AddHtmlLocalized(40, 118, 450, 20, 1060051, 0x7FFF); // CANCEL - - AddButton(114, 116, 0xFA5, 0xFA7, 1); - AddHtmlLocalized(148, 118, 450, 20, 1071022, 0x7FFF); // DISABLE IT! + builder.AddButton(114, 116, 0xFA5, 0xFA7, 1); + builder.AddHtmlLocalized(148, 118, 450, 20, 1071022, 0x7FFF); // DISABLE IT! } public override void OnResponse(NetState sender, in RelayInfo info) { - if (!m_Player.CheckAlive()) + if (sender.Mobile is not PlayerMobile pm || !pm.CheckAlive()) { return; } @@ -4659,106 +4639,103 @@ namespace Server.Mobiles if (info.ButtonID == 1) { // You have cancelled automatically reinsuring all insured items upon death - m_Player.SendLocalizedMessage(1061075, "", 0x23); - m_Player.AutoRenewInsurance = false; + pm.SendLocalizedMessage(1061075, "", 0x23); + pm.AutoRenewInsurance = false; } else { - m_Player.SendLocalizedMessage(1042021); // Cancelled. + pm.SendLocalizedMessage(1042021); // Cancelled. } - if (m_InsuranceGump != null) + if (_insuranceGump != null) { - m_Player.SendGump(m_InsuranceGump.NewInstance()); + pm.SendGump(_insuranceGump); } } } - private class ItemInsuranceMenuGump : Gump + private class ItemInsuranceMenuGump : DynamicGump { - private readonly PlayerMobile m_From; - private readonly bool[] m_Insure; - private readonly Item[] m_Items; - private readonly int m_Page; + private readonly PlayerMobile _from; + private readonly bool[] _insure; + private readonly Item[] _items; + private int _page; - public ItemInsuranceMenuGump(PlayerMobile from, Item[] items, bool[] insure = null, int page = 0) - : base(25, 50) + public override bool Singleton => true; + + public ItemInsuranceMenuGump(PlayerMobile from, Item[] items) : base(25, 50) { - m_From = from; - m_Items = items; - - if (insure == null) - { - insure = new bool[items.Length]; - - for (var i = 0; i < items.Length; ++i) - { - insure[i] = items[i].Insured; - } - } - - m_Insure = insure; - m_Page = page; - - AddPage(0); - - AddBackground(0, 0, 520, 510, 0x13BE); - AddImageTiled(10, 10, 500, 30, 0xA40); - AddImageTiled(10, 50, 500, 355, 0xA40); - AddImageTiled(10, 415, 500, 80, 0xA40); - AddAlphaRegion(10, 10, 500, 485); - - AddButton(15, 470, 0xFB1, 0xFB2, 0); - AddHtmlLocalized(50, 472, 80, 20, 1011012, 0x7FFF); // CANCEL - - if (from.AutoRenewInsurance) - { - AddButton(360, 10, 9723, 9724, 1); - } - else - { - AddButton(360, 10, 9720, 9722, 1); - } - - AddHtmlLocalized(395, 14, 105, 20, 1114122, 0x7FFF); // AUTO REINSURE - - AddButton(395, 470, 0xFA5, 0xFA6, 2); - AddHtmlLocalized(430, 472, 50, 20, 1006044, 0x7FFF); // OK - - AddHtmlLocalized(10, 14, 150, 20, 1114121, 0x7FFF); //
ITEM INSURANCE MENU
- - AddHtmlLocalized(45, 54, 70, 20, 1062214, 0x7FFF); // Item - AddHtmlLocalized(250, 54, 70, 20, 1061038, 0x7FFF); // Cost - AddHtmlLocalized(400, 54, 70, 20, 1114311, 0x7FFF); // Insured - - var balance = Banker.GetBalance(from); - var cost = 0; + _from = from; + _items = items; + _insure = new bool[items.Length]; for (var i = 0; i < items.Length; ++i) { - if (insure[i]) + _insure[i] = items[i].Insured; + } + } + + protected override void BuildLayout(ref DynamicGumpBuilder builder) + { + builder.AddPage(); + + builder.AddBackground(0, 0, 520, 510, 0x13BE); + builder.AddImageTiled(10, 10, 500, 30, 0xA40); + builder.AddImageTiled(10, 50, 500, 355, 0xA40); + builder.AddImageTiled(10, 415, 500, 80, 0xA40); + builder.AddAlphaRegion(10, 10, 500, 485); + + builder.AddButton(15, 470, 0xFB1, 0xFB2, 0); + builder.AddHtmlLocalized(50, 472, 80, 20, 1011012, 0x7FFF); // CANCEL + + if (_from.AutoRenewInsurance) + { + builder.AddButton(360, 10, 9723, 9724, 1); + } + else + { + builder.AddButton(360, 10, 9720, 9722, 1); + } + + builder.AddHtmlLocalized(395, 14, 105, 20, 1114122, 0x7FFF); // AUTO REINSURE + + builder.AddButton(395, 470, 0xFA5, 0xFA6, 2); + builder.AddHtmlLocalized(430, 472, 50, 20, 1006044, 0x7FFF); // OK + + builder.AddHtmlLocalized(10, 14, 150, 20, 1114121, 0x7FFF); //
ITEM INSURANCE MENU
+ + builder.AddHtmlLocalized(45, 54, 70, 20, 1062214, 0x7FFF); // Item + builder.AddHtmlLocalized(250, 54, 70, 20, 1061038, 0x7FFF); // Cost + builder.AddHtmlLocalized(400, 54, 70, 20, 1114311, 0x7FFF); // Insured + + var balance = Banker.GetBalance(_from); + var cost = 0; + + for (var i = 0; i < _items.Length; ++i) + { + if (_insure[i]) { - cost += GetInsuranceCost(items[i]); + cost += GetInsuranceCost(_items[i]); } } - AddHtmlLocalized(15, 420, 300, 20, 1114310, 0x7FFF); // GOLD AVAILABLE: - AddLabel(215, 420, 0x481, balance.ToString()); - AddHtmlLocalized(15, 435, 300, 20, 1114123, 0x7FFF); // TOTAL COST OF INSURANCE: - AddLabel(215, 435, 0x481, cost.ToString()); + builder.AddHtmlLocalized(15, 420, 300, 20, 1114310, 0x7FFF); // GOLD AVAILABLE: + builder.AddLabel(215, 420, 0x481, balance.ToString()); + builder.AddHtmlLocalized(15, 435, 300, 20, 1114123, 0x7FFF); // TOTAL COST OF INSURANCE: + builder.AddLabel(215, 435, 0x481, cost.ToString()); if (cost != 0) { - AddHtmlLocalized(15, 450, 300, 20, 1114125, 0x7FFF); // NUMBER OF DEATHS PAYABLE: - AddLabel(215, 450, 0x481, (balance / cost).ToString()); + builder.AddHtmlLocalized(15, 450, 300, 20, 1114125, 0x7FFF); // NUMBER OF DEATHS PAYABLE: + builder.AddLabel(215, 450, 0x481, (balance / cost).ToString()); } - for (int i = page * 4, y = 72; i < (page + 1) * 4 && i < items.Length; ++i, y += 75) + for (int i = _page * 4, y = 72; i < (_page + 1) * 4 && i < _items.Length; ++i, y += 75) { - var item = items[i]; + var item = _items[i]; var b = ItemBounds.Table[item.ItemID]; - AddImageTiledButton( + builder.AddImageTiledButton( 40, y, 0x918, @@ -4771,38 +4748,36 @@ namespace Server.Mobiles 40 - b.Width / 2 - b.X, 30 - b.Height / 2 - b.Y ); - AddItemProperty(item.Serial); + builder.AddItemProperty(item.Serial); - if (insure[i]) + if (_insure[i]) { - AddButton(400, y, 9723, 9724, 100 + i); - AddLabel(250, y, 0x481, GetInsuranceCost(item).ToString()); + builder.AddButton(400, y, 9723, 9724, 100 + i); + builder.AddLabel(250, y, 0x481, GetInsuranceCost(item).ToString()); } else { - AddButton(400, y, 9720, 9722, 100 + i); - AddLabel(250, y, 0x66C, GetInsuranceCost(item).ToString()); + builder.AddButton(400, y, 9720, 9722, 100 + i); + builder.AddLabel(250, y, 0x66C, GetInsuranceCost(item).ToString()); } } - if (page >= 1) + if (_page >= 1) { - AddButton(15, 380, 0xFAE, 0xFAF, 3); - AddHtmlLocalized(50, 380, 450, 20, 1044044, 0x7FFF); // PREV PAGE + builder.AddButton(15, 380, 0xFAE, 0xFAF, 3); + builder.AddHtmlLocalized(50, 380, 450, 20, 1044044, 0x7FFF); // PREV PAGE } - if ((page + 1) * 4 < items.Length) + if ((_page + 1) * 4 < _items.Length) { - AddButton(400, 380, 0xFA5, 0xFA7, 4); - AddHtmlLocalized(435, 380, 70, 20, 1044045, 0x7FFF); // NEXT PAGE + builder.AddButton(400, 380, 0xFA5, 0xFA7, 4); + builder.AddHtmlLocalized(435, 380, 70, 20, 1044045, 0x7FFF); // NEXT PAGE } } - public ItemInsuranceMenuGump NewInstance() => new(m_From, m_Items, m_Insure, m_Page); - public override void OnResponse(NetState sender, in RelayInfo info) { - if (info.ButtonID == 0 || !m_From.CheckAlive()) + if (info.ButtonID == 0 || !_from.CheckAlive()) { return; } @@ -4811,41 +4786,40 @@ namespace Server.Mobiles { case 1: // Auto Reinsure { - if (m_From.AutoRenewInsurance) + if (_from.AutoRenewInsurance) { - if (!m_From.HasGump()) - { - m_From.SendGump(new CancelRenewInventoryInsuranceGump(m_From, this)); - } + _from.SendGump(new CancelRenewInventoryInsuranceGump(this)); } else { - m_From.AutoRenewInventoryInsurance(); - m_From.SendGump(new ItemInsuranceMenuGump(m_From, m_Items, m_Insure, m_Page)); + _from.AutoRenewInventoryInsurance(); + _from.SendGump(this); } break; } case 2: // OK { - m_From.SendGump(new ItemInsuranceMenuConfirmGump(m_From, m_Items, m_Insure, m_Page)); + _from.SendGump(new ItemInsuranceMenuConfirmGump(this)); break; } case 3: // Prev { - if (m_Page >= 1) + if (_page >= 1) { - m_From.SendGump(new ItemInsuranceMenuGump(m_From, m_Items, m_Insure, m_Page - 1)); + _page--; + _from.SendGump(this); } break; } case 4: // Next { - if ((m_Page + 1) * 4 < m_Items.Length) + if ((_page + 1) * 4 < _items.Length) { - m_From.SendGump(new ItemInsuranceMenuGump(m_From, m_Items, m_Insure, m_Page + 1)); + _page++; + _from.SendGump(this); } break; @@ -4854,71 +4828,67 @@ namespace Server.Mobiles { var idx = info.ButtonID - 100; - if (idx >= 0 && idx < m_Items.Length) + if (idx >= 0 && idx < _items.Length) { - m_Insure[idx] = !m_Insure[idx]; + _insure[idx] = !_insure[idx]; } - m_From.SendGump(new ItemInsuranceMenuGump(m_From, m_Items, m_Insure, m_Page)); + _from.SendGump(this); break; } } } - } - private class ItemInsuranceMenuConfirmGump : Gump - { - private readonly PlayerMobile m_From; - private readonly bool[] m_Insure; - private readonly Item[] m_Items; - private readonly int m_Page; - - public ItemInsuranceMenuConfirmGump(PlayerMobile from, Item[] items, bool[] insure, int page) - : base(250, 200) + private class ItemInsuranceMenuConfirmGump : StaticGump { - m_From = from; - m_Items = items; - m_Insure = insure; - m_Page = page; + private readonly ItemInsuranceMenuGump _parentGump; - AddBackground(0, 0, 240, 142, 0x13BE); - AddImageTiled(6, 6, 228, 100, 0xA40); - AddImageTiled(6, 116, 228, 20, 0xA40); - AddAlphaRegion(6, 6, 228, 142); + public ItemInsuranceMenuConfirmGump(ItemInsuranceMenuGump parentGump) : base(250, 200) => + _parentGump = parentGump; - AddHtmlLocalized(8, 8, 228, 100, 1114300, 0x7FFF); // Do you wish to insure all newly selected items? - - AddButton(6, 116, 0xFB1, 0xFB2, 0); - AddHtmlLocalized(40, 118, 450, 20, 1060051, 0x7FFF); // CANCEL - - AddButton(114, 116, 0xFA5, 0xFA7, 1); - AddHtmlLocalized(148, 118, 450, 20, 1073996, 0x7FFF); // ACCEPT - } - - public override void OnResponse(NetState sender, in RelayInfo info) - { - if (!m_From.CheckAlive()) + protected override void BuildLayout(ref StaticGumpBuilder builder) { - return; + builder.AddBackground(0, 0, 240, 142, 0x13BE); + builder.AddImageTiled(6, 6, 228, 100, 0xA40); + builder.AddImageTiled(6, 116, 228, 20, 0xA40); + builder.AddAlphaRegion(6, 6, 228, 142); + + builder.AddHtmlLocalized(8, 8, 228, 100, 1114300, 0x7FFF); // Do you wish to insure all newly selected items? + + builder.AddButton(6, 116, 0xFB1, 0xFB2, 0); + builder.AddHtmlLocalized(40, 118, 450, 20, 1060051, 0x7FFF); // CANCEL + + builder.AddButton(114, 116, 0xFA5, 0xFA7, 1); + builder.AddHtmlLocalized(148, 118, 450, 20, 1073996, 0x7FFF); // ACCEPT } - if (info.ButtonID == 1) + public override void OnResponse(NetState sender, in RelayInfo info) { - for (var i = 0; i < m_Items.Length; ++i) + if (sender.Mobile is not PlayerMobile pm || !pm.CheckAlive()) { - var item = m_Items[i]; + return; + } - if (item.Insured != m_Insure[i]) + if (info.ButtonID == 1) + { + var items = _parentGump._items; + var insure = _parentGump._insure; + for (var i = 0; i < items.Length; ++i) { - m_From.ToggleItemInsurance_Callback(m_From, item, false); + var item = items[i]; + + if (item.Insured != insure[i]) + { + pm.ToggleItemInsurance_Callback(pm, item, false); + } } } - } - else - { - m_From.SendLocalizedMessage(1042021); // Cancelled. - m_From.SendGump(new ItemInsuranceMenuGump(m_From, m_Items, m_Insure, m_Page)); + else + { + pm.SendLocalizedMessage(1042021); // Cancelled. + pm.SendGump(_parentGump); + } } } }