From 76e38ff3f7a7dccad7b9886ef6bcd9d1359a5414 Mon Sep 17 00:00:00 2001 From: WarrentyExpired Date: Wed, 28 Oct 2026 15:27:09 -0400 Subject: [PATCH] #W# Crafting: Did some crafting queue polishing. --- .../UOContent/Engines/Craft/Core/CraftItem.cs | 30 ++++++++++++ .../Engines/Craft/Core/CraftingQueueGump.cs | 49 ++++++++++--------- 2 files changed, 57 insertions(+), 22 deletions(-) diff --git a/Projects/UOContent/Engines/Craft/Core/CraftItem.cs b/Projects/UOContent/Engines/Craft/Core/CraftItem.cs index a951a5877..d533a5ca1 100644 --- a/Projects/UOContent/Engines/Craft/Core/CraftItem.cs +++ b/Projects/UOContent/Engines/Craft/Core/CraftItem.cs @@ -1410,6 +1410,13 @@ namespace Server.Engines.Craft // Not enough resource to craft it if (!(consumeRes && ConsumeAttributes(from, ref checkMessage, false))) { + // Reset the queue state and refresh the UI so the button reverts to "Start" + var context = craftSystem.GetContext(from); + if (context != null) + { + context.IsQueueRunning = false; + from.SendGump(new CraftQueueGump(from, craftSystem, tool)); + } if (tool?.Deleted == false && tool.UsesRemaining > 0) { ShowCraftMenu(from, craftSystem, tool, checkMessage); @@ -1450,6 +1457,14 @@ namespace Server.Engines.Craft // Not enough resource to craft it if (!(consumeRes && ConsumeAttributes(from, ref message, true))) { + // Reset the queue state and refresh the UI so the button reverts to "Start" + var context = craftSystem.GetContext(from); + if (context != null) + { + context.IsQueueRunning = false; + from.SendGump(new CraftQueueGump(from, craftSystem, tool)); + } + if (tool?.Deleted == false && tool.UsesRemaining > 0) { ShowCraftMenu(from, craftSystem, tool, message); @@ -1652,6 +1667,13 @@ namespace Server.Engines.Craft // Not enough resource to craft it if (!ConsumeRes(from, typeRes, craftSystem, ref resHue, ref maxAmount, consumeType, ref message, true)) { + // Reset the queue state and refresh the UI so the button reverts to "Start" + var context = craftSystem.GetContext(from); + if (context != null) + { + context.IsQueueRunning = false; + from.SendGump(new CraftQueueGump(from, craftSystem, tool)); + } if (tool?.Deleted == false && tool.UsesRemaining > 0) { ShowCraftMenu(from, craftSystem, tool, message); @@ -2048,6 +2070,14 @@ namespace Server.Engines.Craft return; } + var context = system.GetContext(from); + if (context != null && context.IsQueueRunning) + { + context.IsQueueRunning = false; + from.CloseGump(); + from.SendGump(new CraftQueueGump(from, system, tool)); + } + from.SendGump(new CraftGump(from, system, tool, message)); } diff --git a/Projects/UOContent/Engines/Craft/Core/CraftingQueueGump.cs b/Projects/UOContent/Engines/Craft/Core/CraftingQueueGump.cs index b8ac998c8..e2a82333d 100644 --- a/Projects/UOContent/Engines/Craft/Core/CraftingQueueGump.cs +++ b/Projects/UOContent/Engines/Craft/Core/CraftingQueueGump.cs @@ -59,38 +59,38 @@ public class CraftQueueGump : DynamicGump builder.AddPage(0); - builder.AddBackground(0, 0, 300, 437, 5054); - builder.AddImageTiled(10, 10, 280, 22, 2624); - builder.AddAlphaRegion(10, 10, 280, 417); + builder.AddBackground(0, 0, 350, 437, 5054); + builder.AddImageTiled(10, 10, 330, 22, 2624); + builder.AddAlphaRegion(10, 10, 330, 417); - builder.AddHtml(10, 12, 280, 20, "
Crafting Queue
"); + builder.AddHtml(10, 12, 330, 20, "
Crafting Queue
"); // Bottom Action Controls - builder.AddButton(15, 402, 4017, 4019, 0); - builder.AddHtml(50, 405, 60, 18, "Close"); + builder.AddButton(25, 402, 4017, 4019, 0); + builder.AddHtml(60, 405, 60, 18, "Close"); // Start/Stop button if (context.IsQueueRunning) { - builder.AddButton(110, 402, 4005, 4007, 1); - builder.AddHtml(145, 405, 60, 18, "Stop"); + builder.AddButton(140, 402, 4005, 4007, 1); + builder.AddHtml(175, 405, 60, 18, "Stop"); } else { - builder.AddButton(110, 402, 4005, 4007, 1); - builder.AddHtml(145, 405, 60, 18, "Start"); + builder.AddButton(140, 402, 4005, 4007, 1); + builder.AddHtml(175, 405, 60, 18, "Start"); } // Clear queue button - builder.AddButton(205, 402, 4014, 4016, 2); - builder.AddHtml(240, 405, 60, 18, "Clear"); + builder.AddButton(255, 402, 4014, 4016, 2); + builder.AddHtml(290, 405, 60, 18, "Clear"); var queue = context.Queue; if (queue.Count == 0) { builder.AddPage(1); - builder.AddHtml(10, 50, 280, 20, "
Queue is empty.
"); + builder.AddHtml(10, 50, 330, 20, "
Queue is empty.
"); return; } @@ -120,26 +120,31 @@ public class CraftQueueGump : DynamicGump string formattedResName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(resName); - builder.AddLabel(xPos, y, 1152, formattedResName); + builder.AddLabel(xPos, y, 1270, formattedResName); xPos += (formattedResName.Length * 7) + 5; } - // Line 1: Localized Cliloc Name or Custom String Name - if (order.Item.NameNumber > 0) + // Line 1: Capitalized Item Name + string rawName = order.Item.NameString; + + if (string.IsNullOrEmpty(rawName)) { - builder.AddHtmlLocalized(xPos, y, 160, 20, order.Item.NameNumber, textColor); - } - else - { - builder.AddLabel(xPos, y, order.IsFinished ? 0x384 : 0x480, order.Item.NameString ?? "Unknown Item"); + // Bypass the Cliloc API completely. Take the class name (e.g., "DragonBreastplate") + // and insert a space between lowercase and uppercase letters to make "Dragon Breastplate". + rawName = System.Text.RegularExpressions.Regex.Replace(order.Item.ItemType.Name, "([a-z])([A-Z])", "$1 $2"); } + + string capitalizedItemName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(rawName); + + builder.AddLabel(xPos, y, order.IsFinished ? 0x384 : 0x480, capitalizedItemName); + // Line 2: Stats (Crafted / Exc / Fail) builder.AddHtml( 25, y + 18, 260, 20, - $"({order.AmountCompleted}/{order.AmountRequested}) | Exc: {order.AmountExceptional} | Fail: {order.AmountFailed}" + $"Crafted: {order.AmountCompleted}/{order.AmountRequested} | Exceptional: {order.AmountExceptional} | Failed: {order.AmountFailed}" ); y += 46;