diff --git a/Projects/UOContent/Commands/HelpInfo.cs b/Projects/UOContent/Commands/HelpInfo.cs index 25429088d..6039f3dd2 100644 --- a/Projects/UOContent/Commands/HelpInfo.cs +++ b/Projects/UOContent/Commands/HelpInfo.cs @@ -341,26 +341,36 @@ public static class HelpInfo } } - public class CommandInfoGump : Gump + public class CommandInfoGump : DynamicGump { + private readonly int _width; + private readonly int _height; + private readonly CommandInfo _info; + public CommandInfoGump(CommandInfo info, int width = 320, int height = 200) : base(300, 50) { - AddPage(0); + _width = width; + _height = height; + _info = info; + } - AddBackground(0, 0, width, height, 5054); + protected override void BuildLayout(ref DynamicGumpBuilder builder) + { + builder.AddPage(); - AddHtml(10, 10, width - 20, 20, info.Name.Center(0xFF0000)); + builder.AddBackground(0, 0, _width, _height, 5054); + builder.AddHtml(10, 10, _width - 20, 20, _info.Name.Center(0xFF0000)); using var sb = ValueStringBuilder.Create(); sb.Append("Usage: "); - var usage = info.Usage + var usage = _info.Usage .ReplaceOrdinal("<", "(") .ReplaceOrdinal(">", ")"); sb.Append(usage); sb.Append("
"); - var aliases = info.Aliases; + var aliases = _info.Aliases; if (aliases?.Length > 0) { @@ -380,27 +390,27 @@ public static class HelpInfo } sb.Append("AccessLevel: "); - sb.Append(info.AccessLevel.ToString()); + sb.Append(_info.AccessLevel.ToString()); sb.Append("
"); - if (info.Modifiers?.Length > 0) + if (_info.Modifiers?.Length > 0) { sb.Append("Modifiers: "); - for (var i = 0; i < info.Modifiers.Length; ++i) + for (var i = 0; i < _info.Modifiers.Length; ++i) { if (i != 0) { sb.Append(", "); } - sb.Append(info.Modifiers[i]); + sb.Append(_info.Modifiers[i]); } sb.Append("
"); sb.Append("
"); } - sb.Append(info.Description); + sb.Append(_info.Description); - AddHtml(10, 40, width - 20, height - 80, sb.ToString(), false, true); + builder.AddHtml(10, 40, _width - 20, _height - 80, sb.ToString(), false, true); } } } diff --git a/Projects/UOContent/Engines/Craft/Core/CraftGump.cs b/Projects/UOContent/Engines/Craft/Core/CraftGump.cs index 1664ea711..2fca292e1 100644 --- a/Projects/UOContent/Engines/Craft/Core/CraftGump.cs +++ b/Projects/UOContent/Engines/Craft/Core/CraftGump.cs @@ -3,726 +3,729 @@ using Server.Gumps; using Server.Items; using Server.Network; -namespace Server.Engines.Craft +namespace Server.Engines.Craft; + +public class CraftGump : DynamicGump { - public class CraftGump : Gump + public enum CraftPage { - public enum CraftPage + None, + PickResource, + PickResource2 + } + + private const int LabelHue = 0x480; + private const int LabelColor = 0x7FFF; + private const int FontColor = 0xFFFFFF; + private readonly CraftSystem _craftSystem; + private readonly Mobile _from; + + private readonly CraftPage _page; + private readonly BaseTool _tool; + private readonly TextDefinition _notice; + + public CraftGump( + Mobile from, CraftSystem craftSystem, BaseTool tool, TextDefinition notice, CraftPage page = CraftPage.None + ) : base(40, 40) + { + _from = from; + _craftSystem = craftSystem; + _tool = tool; + _page = page; + _notice = notice; + } + + protected override void BuildLayout(ref DynamicGumpBuilder builder) + { + var context = _craftSystem.GetContext(_from); + + _from.CloseGump(); + _from.CloseGump(); + + builder.AddPage(); + + builder.AddBackground(0, 0, 530, 437, 5054); + builder.AddImageTiled(10, 10, 510, 22, 2624); + builder.AddImageTiled(10, 292, 150, 45, 2624); + builder.AddImageTiled(165, 292, 355, 45, 2624); + builder.AddImageTiled(10, 342, 510, 85, 2624); + builder.AddImageTiled(10, 37, 200, 250, 2624); + builder.AddImageTiled(215, 37, 305, 250, 2624); + builder.AddAlphaRegion(10, 10, 510, 417); + + if (_craftSystem.GumpTitle.Number > 0) { - None, - PickResource, - PickResource2 + builder.AddHtmlLocalized(10, 12, 510, 20, _craftSystem.GumpTitle.Number, LabelColor); + } + else + { + builder.AddHtml(10, 12, 510, 20, _craftSystem.GumpTitle.String); } - private const int LabelHue = 0x480; - private const int LabelColor = 0x7FFF; - private const int FontColor = 0xFFFFFF; - private readonly CraftSystem m_CraftSystem; - private readonly Mobile m_From; + builder.AddHtmlLocalized(10, 37, 200, 22, 1044010, LabelColor); //
CATEGORIES
+ builder.AddHtmlLocalized(215, 37, 305, 22, 1044011, LabelColor); //
SELECTIONS
+ builder.AddHtmlLocalized(10, 302, 150, 25, 1044012, LabelColor); //
NOTICES
- private readonly CraftPage m_Page; - private readonly BaseTool m_Tool; + builder.AddButton(15, 402, 4017, 4019, 0); + builder.AddHtmlLocalized(50, 405, 150, 18, 1011441, LabelColor); // EXIT - public CraftGump( - Mobile from, CraftSystem craftSystem, BaseTool tool, TextDefinition notice, CraftPage page = CraftPage.None - ) : base(40, 40) + builder.AddButton(270, 402, 4005, 4007, GetButtonID(6, 2)); + builder.AddHtmlLocalized(305, 405, 150, 18, 1044013, LabelColor); // MAKE LAST + + // Mark option + if (_craftSystem.MarkOption) { - m_From = from; - m_CraftSystem = craftSystem; - m_Tool = tool; - m_Page = page; + builder.AddButton(270, 362, 4005, 4007, GetButtonID(6, 6)); + builder.AddHtmlLocalized( + 305, + 365, + 150, + 18, + 1044017 + (int)(context?.MarkOption ?? CraftMarkOption.MarkItem), // MARK ITEM + LabelColor + ); + } + // **************************************** - var context = craftSystem.GetContext(from); + // Resmelt option + if (_craftSystem.Resmelt) + { + builder.AddButton(15, 342, 4005, 4007, GetButtonID(6, 1)); + builder.AddHtmlLocalized(50, 345, 150, 18, 1044259, LabelColor); // SMELT ITEM + } + // **************************************** - from.CloseGump(); - from.CloseGump(); + // Repair option + if (_craftSystem.Repair) + { + builder.AddButton(270, 342, 4005, 4007, GetButtonID(6, 5)); + builder.AddHtmlLocalized(305, 345, 150, 18, 1044260, LabelColor); // REPAIR ITEM + } + // **************************************** - AddPage(0); + // Enhance option + if (_craftSystem.CanEnhance) + { + builder.AddButton(270, 382, 4005, 4007, GetButtonID(6, 8)); + builder.AddHtmlLocalized(305, 385, 150, 18, 1061001, LabelColor); // ENHANCE ITEM + } + // **************************************** - AddBackground(0, 0, 530, 437, 5054); - AddImageTiled(10, 10, 510, 22, 2624); - AddImageTiled(10, 292, 150, 45, 2624); - AddImageTiled(165, 292, 355, 45, 2624); - AddImageTiled(10, 342, 510, 85, 2624); - AddImageTiled(10, 37, 200, 250, 2624); - AddImageTiled(215, 37, 305, 250, 2624); - AddAlphaRegion(10, 10, 510, 417); + _notice.AddHtmlText(ref builder, 170, 295, 350, 40, numberColor: LabelColor, stringColor: FontColor); - if (craftSystem.GumpTitle.Number > 0) + // If the system has more than one resource + if (_craftSystem.CraftSubRes.Init) + { + var nameString = _craftSystem.CraftSubRes.Name.String; + var nameNumber = _craftSystem.CraftSubRes.Name.Number; + + var resIndex = context?.LastResourceIndex ?? -1; + + var resourceType = _craftSystem.CraftSubRes.ResType; + + if (resIndex > -1) { - AddHtmlLocalized(10, 12, 510, 20, craftSystem.GumpTitle.Number, LabelColor); + var subResource = _craftSystem.CraftSubRes.GetAt(resIndex); + + nameString = subResource.Name.String; + nameNumber = subResource.Name.Number; + resourceType = subResource.ItemType; + } + + var resourceCount = 0; + + if (_from.Backpack != null) + { + foreach (var item in _from.Backpack.FindItems()) + { + if (resourceType.IsInstanceOfType(item)) + { + resourceCount += item.Amount; + } + } + } + + builder.AddButton(15, 362, 4005, 4007, GetButtonID(6, 0)); + + if (nameNumber > 0) + { + builder.AddHtmlLocalized(50, 365, 250, 18, nameNumber, resourceCount.ToString(), LabelColor); } else { - AddHtml(10, 12, 510, 20, craftSystem.GumpTitle.String); + builder.AddLabel(50, 362, LabelHue, $"{nameString} ({resourceCount} Available)"); + } + } + // **************************************** + + // For dragon scales + if (_craftSystem.CraftSubRes2.Init) + { + var nameString = _craftSystem.CraftSubRes2.Name.String; + var nameNumber = _craftSystem.CraftSubRes2.Name.Number; + + var resIndex = context?.LastResourceIndex2 ?? -1; + + var resourceType = _craftSystem.CraftSubRes2.ResType; + + if (resIndex > -1) + { + var subResource = _craftSystem.CraftSubRes2.GetAt(resIndex); + + nameString = subResource.Name.String; + nameNumber = subResource.Name.Number; + resourceType = subResource.ItemType; } - AddHtmlLocalized(10, 37, 200, 22, 1044010, LabelColor); //
CATEGORIES
- AddHtmlLocalized(215, 37, 305, 22, 1044011, LabelColor); //
SELECTIONS
- AddHtmlLocalized(10, 302, 150, 25, 1044012, LabelColor); //
NOTICES
+ var resourceCount = 0; - AddButton(15, 402, 4017, 4019, 0); - AddHtmlLocalized(50, 405, 150, 18, 1011441, LabelColor); // EXIT - - AddButton(270, 402, 4005, 4007, GetButtonID(6, 2)); - AddHtmlLocalized(305, 405, 150, 18, 1044013, LabelColor); // MAKE LAST - - // Mark option - if (craftSystem.MarkOption) + if (_from.Backpack != null) { - AddButton(270, 362, 4005, 4007, GetButtonID(6, 6)); - AddHtmlLocalized( - 305, - 365, - 150, + foreach (var item in _from.Backpack.FindItems()) + { + if (resourceType.IsInstanceOfType(item)) + { + resourceCount += item.Amount; + } + } + } + + builder.AddButton(15, 382, 4005, 4007, GetButtonID(6, 7)); + + if (nameNumber > 0) + { + builder.AddHtmlLocalized(50, 385, 250, 18, nameNumber, resourceCount.ToString(), LabelColor); + } + else + { + builder.AddLabel(50, 385, LabelHue, $"{nameString} ({resourceCount} Available)"); + } + } + // **************************************** + + CreateGroupList(ref builder); + + if (_page == CraftPage.PickResource) + { + CreateResList(ref builder, false, _from); + } + else if (_page == CraftPage.PickResource2) + { + CreateResList(ref builder, true, _from); + } + else if (context?.LastGroupIndex > -1) + { + CreateItemList(ref builder, context.LastGroupIndex); + } + } + + public void CreateResList(ref DynamicGumpBuilder builder, bool opt, Mobile from) + { + var res = opt ? _craftSystem.CraftSubRes2 : _craftSystem.CraftSubRes; + + for (var i = 0; i < res.Count; ++i) + { + var index = i % 10; + + var subResource = res[i]; + + if (index == 0) + { + if (i > 0) + { + builder.AddButton(485, 260, 4005, 4007, 0, GumpButtonType.Page, i / 10 + 1); + } + + builder.AddPage(i / 10 + 1); + + if (i > 0) + { + builder.AddButton(455, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10); + } + + var context = _craftSystem.GetContext(_from); + + builder.AddButton(220, 260, 4005, 4007, GetButtonID(6, 4)); + builder.AddHtmlLocalized( + 255, + 263, + 200, 18, - 1044017 + (int)(context?.MarkOption ?? CraftMarkOption.MarkItem), // MARK ITEM + context?.DoNotColor != true ? 1061591 : 1061590, LabelColor ); } - // **************************************** - // Resmelt option - if (craftSystem.Resmelt) + var resourceCount = 0; + + if (from.Backpack != null) { - AddButton(15, 342, 4005, 4007, GetButtonID(6, 1)); - AddHtmlLocalized(50, 345, 150, 18, 1044259, LabelColor); // SMELT ITEM - } - // **************************************** - - // Repair option - if (craftSystem.Repair) - { - AddButton(270, 342, 4005, 4007, GetButtonID(6, 5)); - AddHtmlLocalized(305, 345, 150, 18, 1044260, LabelColor); // REPAIR ITEM - } - // **************************************** - - // Enhance option - if (craftSystem.CanEnhance) - { - AddButton(270, 382, 4005, 4007, GetButtonID(6, 8)); - AddHtmlLocalized(305, 385, 150, 18, 1061001, LabelColor); // ENHANCE ITEM - } - // **************************************** - - notice.AddHtmlText(this, 170, 295, 350, 40, numberColor: LabelColor, stringColor: FontColor); - - // If the system has more than one resource - if (craftSystem.CraftSubRes.Init) - { - var nameString = craftSystem.CraftSubRes.Name.String; - var nameNumber = craftSystem.CraftSubRes.Name.Number; - - var resIndex = context?.LastResourceIndex ?? -1; - - var resourceType = craftSystem.CraftSubRes.ResType; - - if (resIndex > -1) + var type = subResource.ItemType; + foreach (var item in from.Backpack.FindItems()) { - var subResource = craftSystem.CraftSubRes.GetAt(resIndex); - - nameString = subResource.Name.String; - nameNumber = subResource.Name.Number; - resourceType = subResource.ItemType; - } - - var resourceCount = 0; - - if (from.Backpack != null) - { - foreach (var item in from.Backpack.FindItems()) + if (type.IsInstanceOfType(item)) { - if (resourceType.IsInstanceOfType(item)) - { - resourceCount += item.Amount; - } + resourceCount += item.Amount; } } - - AddButton(15, 362, 4005, 4007, GetButtonID(6, 0)); - - if (nameNumber > 0) - { - AddHtmlLocalized(50, 365, 250, 18, nameNumber, resourceCount.ToString(), LabelColor); - } - else - { - AddLabel(50, 362, LabelHue, $"{nameString} ({resourceCount} Available)"); - } - } - // **************************************** - - // For dragon scales - if (craftSystem.CraftSubRes2.Init) - { - var nameString = craftSystem.CraftSubRes2.Name.String; - var nameNumber = craftSystem.CraftSubRes2.Name.Number; - - var resIndex = context?.LastResourceIndex2 ?? -1; - - var resourceType = craftSystem.CraftSubRes2.ResType; - - if (resIndex > -1) - { - var subResource = craftSystem.CraftSubRes2.GetAt(resIndex); - - nameString = subResource.Name.String; - nameNumber = subResource.Name.Number; - resourceType = subResource.ItemType; - } - - var resourceCount = 0; - - if (from.Backpack != null) - { - foreach (var item in from.Backpack.FindItems()) - { - if (resourceType.IsInstanceOfType(item)) - { - resourceCount += item.Amount; - } - } - } - - AddButton(15, 382, 4005, 4007, GetButtonID(6, 7)); - - if (nameNumber > 0) - { - AddHtmlLocalized(50, 385, 250, 18, nameNumber, resourceCount.ToString(), LabelColor); - } - else - { - AddLabel(50, 385, LabelHue, $"{nameString} ({resourceCount} Available)"); - } - } - // **************************************** - - CreateGroupList(); - - if (page == CraftPage.PickResource) - { - CreateResList(false, from); - } - else if (page == CraftPage.PickResource2) - { - CreateResList(true, from); - } - else if (context?.LastGroupIndex > -1) - { - CreateItemList(context.LastGroupIndex); - } - } - - public void CreateResList(bool opt, Mobile from) - { - var res = opt ? m_CraftSystem.CraftSubRes2 : m_CraftSystem.CraftSubRes; - - for (var i = 0; i < res.Count; ++i) - { - var index = i % 10; - - var subResource = res[i]; - - if (index == 0) - { - if (i > 0) - { - AddButton(485, 260, 4005, 4007, 0, GumpButtonType.Page, i / 10 + 1); - } - - AddPage(i / 10 + 1); - - if (i > 0) - { - AddButton(455, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10); - } - - var context = m_CraftSystem.GetContext(m_From); - - AddButton(220, 260, 4005, 4007, GetButtonID(6, 4)); - AddHtmlLocalized( - 255, - 263, - 200, - 18, - context?.DoNotColor != true ? 1061591 : 1061590, - LabelColor - ); - } - - var resourceCount = 0; - - if (from.Backpack != null) - { - var type = subResource.ItemType; - foreach (var item in from.Backpack.FindItems()) - { - if (type.IsInstanceOfType(item)) - { - resourceCount += item.Amount; - } - } - } - - AddButton(220, 60 + index * 20, 4005, 4007, GetButtonID(5, i)); - - if (subResource.Name.Number > 0) - { - AddHtmlLocalized( - 255, - 63 + index * 20, - 250, - 18, - subResource.Name.Number, - resourceCount.ToString(), - LabelColor - ); - } - else - { - AddLabel(255, 60 + index * 20, LabelHue, $"{subResource.Name.String} ({resourceCount})"); - } - } - } - - public void CreateMakeLastList() - { - var context = m_CraftSystem.GetContext(m_From); - - if (context == null) - { - return; } - var items = context.Items; + builder.AddButton(220, 60 + index * 20, 4005, 4007, GetButtonID(5, i)); - if (items.Count > 0) + if (subResource.Name.Number > 0) { - for (var i = 0; i < items.Count; ++i) - { - var index = i % 10; - - var craftItem = items[i]; - - if (index == 0) - { - if (i > 0) - { - AddButton(370, 260, 4005, 4007, 0, GumpButtonType.Page, i / 10 + 1); - AddHtmlLocalized(405, 263, 100, 18, 1044045, LabelColor); // NEXT PAGE - } - - AddPage(i / 10 + 1); - - if (i > 0) - { - AddButton(220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10); - AddHtmlLocalized(255, 263, 100, 18, 1044044, LabelColor); // PREV PAGE - } - } - - AddButton(220, 60 + index * 20, 4005, 4007, GetButtonID(3, i)); - - if (craftItem.NameNumber > 0) - { - AddHtmlLocalized(255, 63 + index * 20, 220, 18, craftItem.NameNumber, LabelColor); - } - else - { - AddLabel(255, 60 + index * 20, LabelHue, craftItem.NameString); - } - - AddButton(480, 60 + index * 20, 4011, 4012, GetButtonID(4, i)); - } + builder.AddHtmlLocalized( + 255, + 63 + index * 20, + 250, + 18, + subResource.Name.Number, + resourceCount.ToString(), + LabelColor + ); } else { - AddHtmlLocalized(230, 62, 200, 22, 1044165, LabelColor); // You haven't made anything yet. - } - } - - public void CreateItemList(int selectedGroup) - { - if (selectedGroup == 501) // 501 : Last 10 - { - CreateMakeLastList(); - return; - } - - var craftGroup = m_CraftSystem.CraftGroups[selectedGroup]; - var craftItemCol = craftGroup.CraftItems; - - for (var i = 0; i < craftItemCol.Count; ++i) - { - var index = i % 10; - - var craftItem = craftItemCol[i]; - - if (index == 0) - { - if (i > 0) - { - AddButton(370, 260, 4005, 4007, 0, GumpButtonType.Page, i / 10 + 1); - AddHtmlLocalized(405, 263, 100, 18, 1044045, LabelColor); // NEXT PAGE - } - - AddPage(i / 10 + 1); - - if (i > 0) - { - AddButton(220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10); - AddHtmlLocalized(255, 263, 100, 18, 1044044, LabelColor); // PREV PAGE - } - } - - AddButton(220, 60 + index * 20, 4005, 4007, GetButtonID(1, i)); - - if (craftItem.NameNumber > 0) - { - AddHtmlLocalized(255, 63 + index * 20, 220, 18, craftItem.NameNumber, LabelColor); - } - else - { - AddLabel(255, 60 + index * 20, LabelHue, craftItem.NameString); - } - - AddButton(480, 60 + index * 20, 4011, 4012, GetButtonID(2, i)); - } - } - - public int CreateGroupList() - { - var craftGroupCol = m_CraftSystem.CraftGroups; - - AddButton(15, 60, 4005, 4007, GetButtonID(6, 3)); - AddHtmlLocalized(50, 63, 150, 18, 1044014, LabelColor); // LAST TEN - - for (var i = 0; i < craftGroupCol.Count; i++) - { - var craftGroup = craftGroupCol[i]; - - AddButton(15, 80 + i * 20, 4005, 4007, GetButtonID(0, i)); - - if (craftGroup.NameNumber > 0) - { - AddHtmlLocalized(50, 83 + i * 20, 150, 18, craftGroup.NameNumber, LabelColor); - } - else - { - AddLabel(50, 80 + i * 20, LabelHue, craftGroup.NameString); - } - } - - return craftGroupCol.Count; - } - - public static int GetButtonID(int type, int index) => 1 + type + index * 7; - - public void CraftItem(CraftItem item) - { - var num = m_CraftSystem.CanCraft(m_From, m_Tool, item.ItemType); - - if (num > 0) - { - m_From.SendGump(new CraftGump(m_From, m_CraftSystem, m_Tool, num)); - } - else - { - Type type = null; - - var context = m_CraftSystem.GetContext(m_From); - - if (context != null) - { - var res = item.UseSubRes2 ? m_CraftSystem.CraftSubRes2 : m_CraftSystem.CraftSubRes; - var resIndex = item.UseSubRes2 ? context.LastResourceIndex2 : context.LastResourceIndex; - - if (resIndex >= 0 && resIndex < res.Count) - { - type = res.GetAt(resIndex).ItemType; - } - } - - m_CraftSystem.CreateItem(m_From, item.ItemType, type, m_Tool, item); - } - } - - public override void OnResponse(NetState sender, in RelayInfo info) - { - if (info.ButtonID <= 0) - { - return; // Canceled - } - - var buttonID = info.ButtonID - 1; - var type = buttonID % 7; - var index = buttonID / 7; - - var system = m_CraftSystem; - var groups = system.CraftGroups; - var context = system.GetContext(m_From); - - switch (type) - { - case 0: // Show group - { - if (context == null) - { - break; - } - - if (index >= 0 && index < groups.Count) - { - context.LastGroupIndex = index; - m_From.SendGump(new CraftGump(m_From, system, m_Tool, null)); - } - - break; - } - case 1: // Create item - { - if (context == null) - { - break; - } - - var groupIndex = context.LastGroupIndex; - - if (groupIndex >= 0 && groupIndex < groups.Count) - { - var group = groups[groupIndex]; - - if (index >= 0 && index < group.CraftItems.Count) - { - CraftItem(group.CraftItems[index]); - } - } - - break; - } - case 2: // Item details - { - if (context == null) - { - break; - } - - var groupIndex = context.LastGroupIndex; - - if (groupIndex >= 0 && groupIndex < groups.Count) - { - var group = groups[groupIndex]; - - if (index >= 0 && index < group.CraftItems.Count) - { - m_From.SendGump(new CraftGumpItem(m_From, system, group.CraftItems[index], m_Tool)); - } - } - - break; - } - case 3: // Create item (last 10) - { - if (context == null) - { - break; - } - - var lastTen = context.Items; - - if (index >= 0 && index < lastTen.Count) - { - CraftItem(lastTen[index]); - } - - break; - } - case 4: // Item details (last 10) - { - if (context == null) - { - break; - } - - var lastTen = context.Items; - - if (index >= 0 && index < lastTen.Count) - { - m_From.SendGump(new CraftGumpItem(m_From, system, lastTen[index], m_Tool)); - } - - break; - } - case 5: // Resource selected - { - if (m_Page == CraftPage.PickResource && index >= 0 && index < system.CraftSubRes.Count) - { - var res = system.CraftSubRes.GetAt(index); - - if (m_From.Skills[system.MainSkill].Base < res.RequiredSkill) - { - m_From.SendGump(new CraftGump(m_From, system, m_Tool, res.Message)); - } - else - { - if (context != null) - { - context.LastResourceIndex = index; - } - - m_From.SendGump(new CraftGump(m_From, system, m_Tool, null)); - } - } - else if (m_Page == CraftPage.PickResource2 && index >= 0 && index < system.CraftSubRes2.Count) - { - var res = system.CraftSubRes2.GetAt(index); - - if (m_From.Skills[system.MainSkill].Base < res.RequiredSkill) - { - m_From.SendGump(new CraftGump(m_From, system, m_Tool, res.Message)); - } - else - { - if (context != null) - { - context.LastResourceIndex2 = index; - } - - m_From.SendGump(new CraftGump(m_From, system, m_Tool, null)); - } - } - - break; - } - case 6: // Misc. buttons - { - switch (index) - { - case 0: // Resource selection - { - if (system.CraftSubRes.Init) - { - m_From.SendGump(new CraftGump(m_From, system, m_Tool, null, CraftPage.PickResource)); - } - - break; - } - case 1: // Smelt item - { - if (system.Resmelt) - { - Resmelt.Do(m_From, system, m_Tool); - } - - break; - } - case 2: // Make last - { - if (context == null) - { - break; - } - - var item = context.LastMade; - - if (item != null) - { - CraftItem(item); - } - else - { - m_From.SendGump( - new CraftGump( - m_From, - m_CraftSystem, - m_Tool, - 1044165, // You haven't made anything yet. - m_Page - ) - ); - } - - break; - } - case 3: // Last 10 - { - if (context == null) - { - break; - } - - context.LastGroupIndex = 501; - m_From.SendGump(new CraftGump(m_From, system, m_Tool, null)); - - break; - } - case 4: // Toggle use resource hue - { - if (context == null) - { - break; - } - - context.DoNotColor = !context.DoNotColor; - - m_From.SendGump(new CraftGump(m_From, m_CraftSystem, m_Tool, null, m_Page)); - - break; - } - case 5: // Repair item - { - if (system.Repair) - { - Repair.Do(m_From, system, m_Tool); - } - - break; - } - case 6: // Toggle mark option - { - if (context == null || !system.MarkOption) - { - break; - } - - context.MarkOption = context.MarkOption switch - { - CraftMarkOption.MarkItem => CraftMarkOption.DoNotMark, - CraftMarkOption.DoNotMark => CraftMarkOption.PromptForMark, - CraftMarkOption.PromptForMark => CraftMarkOption.MarkItem, - _ => context.MarkOption - }; - - m_From.SendGump(new CraftGump(m_From, m_CraftSystem, m_Tool, null, m_Page)); - - break; - } - case 7: // Resource selection 2 - { - if (system.CraftSubRes2.Init) - { - m_From.SendGump( - new CraftGump(m_From, system, m_Tool, null, CraftPage.PickResource2) - ); - } - - break; - } - case 8: // Enhance item - { - if (system.CanEnhance) - { - Enhance.BeginTarget(m_From, system, m_Tool); - } - - break; - } - } - - break; - } + builder.AddLabel(255, 60 + index * 20, LabelHue, $"{subResource.Name.String} ({resourceCount})"); } } } + + public void CreateMakeLastList(ref DynamicGumpBuilder builder) + { + var context = _craftSystem.GetContext(_from); + + if (context == null) + { + return; + } + + var items = context.Items; + + if (items.Count > 0) + { + for (var i = 0; i < items.Count; ++i) + { + var index = i % 10; + + var craftItem = items[i]; + + if (index == 0) + { + if (i > 0) + { + builder.AddButton(370, 260, 4005, 4007, 0, GumpButtonType.Page, i / 10 + 1); + builder.AddHtmlLocalized(405, 263, 100, 18, 1044045, LabelColor); // NEXT PAGE + } + + builder.AddPage(i / 10 + 1); + + if (i > 0) + { + builder.AddButton(220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10); + builder.AddHtmlLocalized(255, 263, 100, 18, 1044044, LabelColor); // PREV PAGE + } + } + + builder.AddButton(220, 60 + index * 20, 4005, 4007, GetButtonID(3, i)); + + if (craftItem.NameNumber > 0) + { + builder.AddHtmlLocalized(255, 63 + index * 20, 220, 18, craftItem.NameNumber, LabelColor); + } + else + { + builder.AddLabel(255, 60 + index * 20, LabelHue, craftItem.NameString); + } + + builder.AddButton(480, 60 + index * 20, 4011, 4012, GetButtonID(4, i)); + } + } + else + { + builder.AddHtmlLocalized(230, 62, 200, 22, 1044165, LabelColor); // You haven't made anything yet. + } + } + + public void CreateItemList(ref DynamicGumpBuilder builder, int selectedGroup) + { + if (selectedGroup == 501) // 501 : Last 10 + { + CreateMakeLastList(ref builder); + return; + } + + var craftGroup = _craftSystem.CraftGroups[selectedGroup]; + var craftItemCol = craftGroup.CraftItems; + + for (var i = 0; i < craftItemCol.Count; ++i) + { + var index = i % 10; + + var craftItem = craftItemCol[i]; + + if (index == 0) + { + if (i > 0) + { + builder.AddButton(370, 260, 4005, 4007, 0, GumpButtonType.Page, i / 10 + 1); + builder.AddHtmlLocalized(405, 263, 100, 18, 1044045, LabelColor); // NEXT PAGE + } + + builder.AddPage(i / 10 + 1); + + if (i > 0) + { + builder.AddButton(220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10); + builder.AddHtmlLocalized(255, 263, 100, 18, 1044044, LabelColor); // PREV PAGE + } + } + + builder.AddButton(220, 60 + index * 20, 4005, 4007, GetButtonID(1, i)); + + if (craftItem.NameNumber > 0) + { + builder.AddHtmlLocalized(255, 63 + index * 20, 220, 18, craftItem.NameNumber, LabelColor); + } + else + { + builder.AddLabel(255, 60 + index * 20, LabelHue, craftItem.NameString); + } + + builder.AddButton(480, 60 + index * 20, 4011, 4012, GetButtonID(2, i)); + } + } + + public int CreateGroupList(ref DynamicGumpBuilder builder) + { + var craftGroupCol = _craftSystem.CraftGroups; + + builder.AddButton(15, 60, 4005, 4007, GetButtonID(6, 3)); + builder.AddHtmlLocalized(50, 63, 150, 18, 1044014, LabelColor); // LAST TEN + + for (var i = 0; i < craftGroupCol.Count; i++) + { + var craftGroup = craftGroupCol[i]; + + builder.AddButton(15, 80 + i * 20, 4005, 4007, GetButtonID(0, i)); + + if (craftGroup.NameNumber > 0) + { + builder.AddHtmlLocalized(50, 83 + i * 20, 150, 18, craftGroup.NameNumber, LabelColor); + } + else + { + builder.AddLabel(50, 80 + i * 20, LabelHue, craftGroup.NameString); + } + } + + return craftGroupCol.Count; + } + + public static int GetButtonID(int type, int index) => 1 + type + index * 7; + + public void CraftItem(CraftItem item) + { + var num = _craftSystem.CanCraft(_from, _tool, item.ItemType); + + if (num > 0) + { + _from.SendGump(new CraftGump(_from, _craftSystem, _tool, num)); + } + else + { + Type type = null; + + var context = _craftSystem.GetContext(_from); + + if (context != null) + { + var res = item.UseSubRes2 ? _craftSystem.CraftSubRes2 : _craftSystem.CraftSubRes; + var resIndex = item.UseSubRes2 ? context.LastResourceIndex2 : context.LastResourceIndex; + + if (resIndex >= 0 && resIndex < res.Count) + { + type = res.GetAt(resIndex).ItemType; + } + } + + _craftSystem.CreateItem(_from, item.ItemType, type, _tool, item); + } + } + + public override void OnResponse(NetState sender, in RelayInfo info) + { + if (info.ButtonID <= 0) + { + return; // Canceled + } + + var buttonID = info.ButtonID - 1; + var type = buttonID % 7; + var index = buttonID / 7; + + var groups = _craftSystem.CraftGroups; + var context = _craftSystem.GetContext(_from); + + switch (type) + { + case 0: // Show group + { + if (context == null) + { + break; + } + + if (index >= 0 && index < groups.Count) + { + context.LastGroupIndex = index; + _from.SendGump(new CraftGump(_from, _craftSystem, _tool, null)); + } + + break; + } + case 1: // Create item + { + if (context == null) + { + break; + } + + var groupIndex = context.LastGroupIndex; + + if (groupIndex >= 0 && groupIndex < groups.Count) + { + var group = groups[groupIndex]; + + if (index >= 0 && index < group.CraftItems.Count) + { + CraftItem(group.CraftItems[index]); + } + } + + break; + } + case 2: // Item details + { + if (context == null) + { + break; + } + + var groupIndex = context.LastGroupIndex; + + if (groupIndex >= 0 && groupIndex < groups.Count) + { + var group = groups[groupIndex]; + + if (index >= 0 && index < group.CraftItems.Count) + { + _from.SendGump(new CraftGumpItem(_from, _craftSystem, group.CraftItems[index], _tool)); + } + } + + break; + } + case 3: // Create item (last 10) + { + if (context == null) + { + break; + } + + var lastTen = context.Items; + + if (index >= 0 && index < lastTen.Count) + { + CraftItem(lastTen[index]); + } + + break; + } + case 4: // Item details (last 10) + { + if (context == null) + { + break; + } + + var lastTen = context.Items; + + if (index >= 0 && index < lastTen.Count) + { + _from.SendGump(new CraftGumpItem(_from, _craftSystem, lastTen[index], _tool)); + } + + break; + } + case 5: // Resource selected + { + if (_page == CraftPage.PickResource && index >= 0 && index < _craftSystem.CraftSubRes.Count) + { + var res = _craftSystem.CraftSubRes.GetAt(index); + + if (_from.Skills[_craftSystem.MainSkill].Base < res.RequiredSkill) + { + _from.SendGump(new CraftGump(_from, _craftSystem, _tool, res.Message)); + } + else + { + if (context != null) + { + context.LastResourceIndex = index; + } + + _from.SendGump(new CraftGump(_from, _craftSystem, _tool, null)); + } + } + else if (_page == CraftPage.PickResource2 && index >= 0 && index < _craftSystem.CraftSubRes2.Count) + { + var res = _craftSystem.CraftSubRes2.GetAt(index); + + if (_from.Skills[_craftSystem.MainSkill].Base < res.RequiredSkill) + { + _from.SendGump(new CraftGump(_from, _craftSystem, _tool, res.Message)); + } + else + { + if (context != null) + { + context.LastResourceIndex2 = index; + } + + _from.SendGump(new CraftGump(_from, _craftSystem, _tool, null)); + } + } + + break; + } + case 6: // Misc. buttons + { + switch (index) + { + case 0: // Resource selection + { + if (_craftSystem.CraftSubRes.Init) + { + _from.SendGump(new CraftGump(_from, _craftSystem, _tool, null, CraftPage.PickResource)); + } + + break; + } + case 1: // Smelt item + { + if (_craftSystem.Resmelt) + { + Resmelt.Do(_from, _craftSystem, _tool); + } + + break; + } + case 2: // Make last + { + if (context == null) + { + break; + } + + var item = context.LastMade; + + if (item != null) + { + CraftItem(item); + } + else + { + _from.SendGump( + new CraftGump( + _from, + _craftSystem, + _tool, + 1044165, // You haven't made anything yet. + _page + ) + ); + } + + break; + } + case 3: // Last 10 + { + if (context == null) + { + break; + } + + context.LastGroupIndex = 501; + _from.SendGump(new CraftGump(_from, _craftSystem, _tool, null)); + + break; + } + case 4: // Toggle use resource hue + { + if (context == null) + { + break; + } + + context.DoNotColor = !context.DoNotColor; + + _from.SendGump(new CraftGump(_from, _craftSystem, _tool, null, _page)); + + break; + } + case 5: // Repair item + { + if (_craftSystem.Repair) + { + Repair.Do(_from, _craftSystem, _tool); + } + + break; + } + case 6: // Toggle mark option + { + if (context == null || !_craftSystem.MarkOption) + { + break; + } + + context.MarkOption = context.MarkOption switch + { + CraftMarkOption.MarkItem => CraftMarkOption.DoNotMark, + CraftMarkOption.DoNotMark => CraftMarkOption.PromptForMark, + CraftMarkOption.PromptForMark => CraftMarkOption.MarkItem, + _ => context.MarkOption + }; + + _from.SendGump(new CraftGump(_from, _craftSystem, _tool, null, _page)); + + break; + } + case 7: // Resource selection 2 + { + if (_craftSystem.CraftSubRes2.Init) + { + _from.SendGump( + new CraftGump(_from, _craftSystem, _tool, null, CraftPage.PickResource2) + ); + } + + break; + } + case 8: // Enhance item + { + if (_craftSystem.CanEnhance) + { + Enhance.BeginTarget(_from, _craftSystem, _tool); + } + + break; + } + } + + break; + } + } + } }