#W# Crafting: Did some crafting queue polishing.

This commit is contained in:
WarrentyExpired 2026-10-28 15:27:09 -04:00
parent 712247762c
commit 76e38ff3f7
2 changed files with 57 additions and 22 deletions

View file

@ -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<CraftQueueGump>();
from.SendGump(new CraftQueueGump(from, system, tool));
}
from.SendGump(new CraftGump(from, system, tool, message));
}

View file

@ -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, "<CENTER><BASEFONT COLOR=#FFCC00>Crafting Queue</BASEFONT></CENTER>");
builder.AddHtml(10, 12, 330, 20, "<CENTER><BASEFONT COLOR=#FFCC00>Crafting Queue</BASEFONT></CENTER>");
// Bottom Action Controls
builder.AddButton(15, 402, 4017, 4019, 0);
builder.AddHtml(50, 405, 60, 18, "<BASEFONT COLOR=#FFFFFF>Close</BASEFONT>");
builder.AddButton(25, 402, 4017, 4019, 0);
builder.AddHtml(60, 405, 60, 18, "<BASEFONT COLOR=#FFFFFF>Close</BASEFONT>");
// Start/Stop button
if (context.IsQueueRunning)
{
builder.AddButton(110, 402, 4005, 4007, 1);
builder.AddHtml(145, 405, 60, 18, "<BASEFONT COLOR=#FFFFFF>Stop</BASEFONT>");
builder.AddButton(140, 402, 4005, 4007, 1);
builder.AddHtml(175, 405, 60, 18, "<BASEFONT COLOR=#FFFFFF>Stop</BASEFONT>");
}
else
{
builder.AddButton(110, 402, 4005, 4007, 1);
builder.AddHtml(145, 405, 60, 18, "<BASEFONT COLOR=#FFFFFF>Start</BASEFONT>");
builder.AddButton(140, 402, 4005, 4007, 1);
builder.AddHtml(175, 405, 60, 18, "<BASEFONT COLOR=#FFFFFF>Start</BASEFONT>");
}
// Clear queue button
builder.AddButton(205, 402, 4014, 4016, 2);
builder.AddHtml(240, 405, 60, 18, "<BASEFONT COLOR=#FFFFFF>Clear</BASEFONT>");
builder.AddButton(255, 402, 4014, 4016, 2);
builder.AddHtml(290, 405, 60, 18, "<BASEFONT COLOR=#FFFFFF>Clear</BASEFONT>");
var queue = context.Queue;
if (queue.Count == 0)
{
builder.AddPage(1);
builder.AddHtml(10, 50, 280, 20, "<CENTER><BASEFONT COLOR=#808080>Queue is empty.</BASEFONT></CENTER>");
builder.AddHtml(10, 50, 330, 20, "<CENTER><BASEFONT COLOR=#808080>Queue is empty.</BASEFONT></CENTER>");
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,
$"<BASEFONT COLOR={statColor}>({order.AmountCompleted}/{order.AmountRequested}) | Exc: {order.AmountExceptional} | Fail: {order.AmountFailed}</BASEFONT>"
$"<BASEFONT COLOR={statColor}>Crafted: {order.AmountCompleted}/{order.AmountRequested} | Exceptional: {order.AmountExceptional} | Failed: {order.AmountFailed}</BASEFONT>"
);
y += 46;