UO Unchained: CrafterTrain.cs

Creator: nemmyLink: craftertrain-cs-cm7jl70n
Created: about 1 month ago on 03/27/2025, 04:20:44 AMUpdated: about 1 month ago on 03/29/2025, 01:58:30 AM
Note from JaseOwns:
Scripts will be leveraged on both UORazorscipts.com and this site. At the time of the launch (Feb 1st 2025), this isn't working right - but it will! Thanks for checking it out
FileType: Razor Enhanced (C#)
Size: 21560
Category: Crafting
Skills: Crafting Trainer
Hotkey: No hotkey provided
Tags: crafting,training,blacksmith,alchemy,tailoring,tinkering,bowcraft,inscription,carpentry,cooking

Description: [WIP] An All in one crafting script for Razor Enhanced C#

// CraftingTrainer.cs using System; using System.Collections.Generic; using System.Linq; using RazorEnhanced; using System.Windows.Forms; namespace RazorScripts { public class CraftingTrainer { private Dictionary<string, int> _craftSkills = new Dictionary<string, int> { {"Tailoring", 100}, {"Blacksmithy", 100}, {"Alchemy", 100}, {"Tinkering", 100}, {"Bowcraft/Fletching", 100}, {"Inscription", 100}, {"Carpentry", 100}, {"Cooking", 100} }; private Dictionary<string, List<CraftItem>> _craftHolder = new Dictionary<string, List<CraftItem>>(); public void Run() { ShowSkillSelectorForm(); Setup(); UpdateGump(""); bool training = true; while (training) { training = false; foreach (var craft in _craftHolder) { if (_craftSkills[craft.Key] <= 0) continue; if (Player.GetRealSkillValue(craft.Key) < _craftSkills[craft.Key]) { TrainCraft(craft.Key, singlePass: true); training = true; } } } UpdateGump("", true); } private void ShowSkillSelectorForm() { Form form = new Form() { Width = 300, Height = 400, Text = "Crafting Trainer - Select Skills" }; var skillCheckboxes = new Dictionary<string, CheckBox>(); int top = 20; foreach (var skill in _craftSkills.Keys.ToList()) { CheckBox chk = new CheckBox() { Text = skill, Checked = _craftSkills[skill] > 0, Top = top, Left = 20, Width = 200 }; form.Controls.Add(chk); skillCheckboxes[skill] = chk; top += 25; } Button startButton = new Button() { Text = "Start", Top = top + 10, Left = 100, Width = 80 }; startButton.Click += (sender, e) => { form.DialogResult = DialogResult.OK; form.Close(); }; form.Controls.Add(startButton); form.ShowDialog(); foreach (var skill in skillCheckboxes.Keys) { _craftSkills[skill] = skillCheckboxes[skill].Checked ? 100 : 0; } } private void Setup() { // Tailoring recipes _craftHolder.Add("Tailoring", new List<CraftItem> { new CraftItem { SkillLevel = 42.0, Tool="Sewing Kit", GumpId=949095101, CategoryButtonId=29, ItemButtonId=16, ItemType=0x1EFD }, new CraftItem { SkillLevel = 54.0, Tool="Sewing Kit", GumpId=949095101, CategoryButtonId=29, ItemButtonId=44, ItemType=0x1515 }, new CraftItem { SkillLevel = 74.6, Tool="Sewing Kit", GumpId=949095101, CategoryButtonId=29, ItemButtonId=51, ItemType=0x1F03 }, new CraftItem { SkillLevel = 99.6, Tool="Sewing Kit", GumpId=949095101, CategoryButtonId=1, ItemButtonId=37, ItemType=0x175D } }); // Alchemy recipes _craftHolder.Add("Alchemy", new List<CraftItem> { new CraftItem { SkillLevel = 45.0, Tool="Mortar and Pestle", GumpId=949095101, CategoryButtonId=22, ItemButtonId=2, ItemType=0x0F0A }, new CraftItem { SkillLevel = 55.0, Tool="Mortar and Pestle", GumpId=949095101, CategoryButtonId=22, ItemButtonId=9, ItemType=0x0F0B }, new CraftItem { SkillLevel = 90.0, Tool="Mortar and Pestle", GumpId=949095101, CategoryButtonId=22, ItemButtonId=16, ItemType=0x0F0C }, new CraftItem { SkillLevel = 98.0, Tool="Mortar and Pestle", GumpId=949095101, CategoryButtonId=22, ItemButtonId=23, ItemType=0x0F0D } }); // Tinkering recipes _craftHolder.Add("Tinkering", new List<CraftItem> { new CraftItem { SkillLevel = 30.0, Tool="Tinker Tools", GumpId=949095101, CategoryButtonId=23, ItemButtonId=5, ItemType=0x1EB8 }, new CraftItem { SkillLevel = 50.0, Tool="Tinker Tools", GumpId=949095101, CategoryButtonId=23, ItemButtonId=20, ItemType=0x0E7E }, new CraftItem { SkillLevel = 70.0, Tool="Tinker Tools", GumpId=949095101, CategoryButtonId=23, ItemButtonId=14, ItemType=0x1EB9 }, new CraftItem { SkillLevel = 90.0, Tool="Tinker Tools", GumpId=949095101, CategoryButtonId=23, ItemButtonId=9, ItemType=0x1EB9 } }); // Blacksmithy recipes _craftHolder.Add("Blacksmithy", new List<CraftItem> { new CraftItem { SkillLevel = 30.0, Tool="Smith's Hammer", GumpId=949095101, CategoryButtonId=21, ItemButtonId=0, ItemType=0x13FB }, new CraftItem { SkillLevel = 45.0, Tool="Smith's Hammer", GumpId=949095101, CategoryButtonId=21, ItemButtonId=8, ItemType=0x1403 }, new CraftItem { SkillLevel = 60.0, Tool="Smith's Hammer", GumpId=949095101, CategoryButtonId=21, ItemButtonId=15, ItemType=0x1438 }, new CraftItem { SkillLevel = 75.0, Tool="Smith's Hammer", GumpId=949095101, CategoryButtonId=21, ItemButtonId=19, ItemType=0x13B9 }, new CraftItem { SkillLevel = 90.0, Tool="Smith's Hammer", GumpId=949095101, CategoryButtonId=21, ItemButtonId=26, ItemType=0x141B } }); // Carpentry recipes _craftHolder.Add("Carpentry", new List<CraftItem> { new CraftItem { SkillLevel = 30.0, Tool="Carpenter's Tools", GumpId=949095101, CategoryButtonId=24, ItemButtonId=0, ItemType=0x0E7D }, new CraftItem { SkillLevel = 45.0, Tool="Carpenter's Tools", GumpId=949095101, CategoryButtonId=24, ItemButtonId=5, ItemType=0x0E7E }, new CraftItem { SkillLevel = 60.0, Tool="Carpenter's Tools", GumpId=949095101, CategoryButtonId=24, ItemButtonId=6, ItemType=0x0E7F }, new CraftItem { SkillLevel = 75.0, Tool="Carpenter's Tools", GumpId=949095101, CategoryButtonId=24, ItemButtonId=7, ItemType=0x0E80 }, new CraftItem { SkillLevel = 90.0, Tool="Carpenter's Tools", GumpId=949095101, CategoryButtonId=24, ItemButtonId=12, ItemType=0x0E83 } }); // Bowcraft/Fletching recipes _craftHolder.Add("Bowcraft/Fletching", new List<CraftItem> { new CraftItem { SkillLevel = 30.0, Tool="Fletcher's Tools", GumpId=949095101, CategoryButtonId=25, ItemButtonId=0, ItemType=0x0F3F }, new CraftItem { SkillLevel = 50.0, Tool="Fletcher's Tools", GumpId=949095101, CategoryButtonId=25, ItemButtonId=1, ItemType=0x0F3B }, new CraftItem { SkillLevel = 70.0, Tool="Fletcher's Tools", GumpId=949095101, CategoryButtonId=25, ItemButtonId=6, ItemType=0x13B2 }, new CraftItem { SkillLevel = 90.0, Tool="Fletcher's Tools", GumpId=949095101, CategoryButtonId=25, ItemButtonId=7, ItemType=0x13FD } }); // Inscription recipes _craftHolder.Add("Inscription", new List<CraftItem> { new CraftItem { SkillLevel = 30.0, Tool="Scribe's Pen", GumpId=949095101, CategoryButtonId=27, ItemButtonId=1, ItemType=0x1F2E }, new CraftItem { SkillLevel = 50.0, Tool="Scribe's Pen", GumpId=949095101, CategoryButtonId=27, ItemButtonId=3, ItemType=0x1F2F }, new CraftItem { SkillLevel = 70.0, Tool="Scribe's Pen", GumpId=949095101, CategoryButtonId=27, ItemButtonId=16, ItemType=0x1F3C }, new CraftItem { SkillLevel = 90.0, Tool="Scribe's Pen", GumpId=949095101, CategoryButtonId=27, ItemButtonId=29, ItemType=0x1F4A } }); // Cooking recipes _craftHolder.Add("Cooking", new List<CraftItem> { new CraftItem { SkillLevel = 30.0, Tool="Skillet", GumpId=949095101, CategoryButtonId=26, ItemButtonId=0, ItemType=0x097B }, new CraftItem { SkillLevel = 50.0, Tool="Skillet", GumpId=949095101, CategoryButtonId=26, ItemButtonId=10, ItemType=0x09B7 }, new CraftItem { SkillLevel = 70.0, Tool="Skillet", GumpId=949095101, CategoryButtonId=26, ItemButtonId=15, ItemType=0x097E }, new CraftItem { SkillLevel = 90.0, Tool="Skillet", GumpId=949095101, CategoryButtonId=26, ItemButtonId=18, ItemType=0x1608 } }); } private void TrainCraft(string craftKey, bool singlePass = false) { var craftList = _craftHolder[craftKey].OrderBy(c => c.SkillLevel).ToList(); var skillCap = _craftSkills[craftKey]; while (Player.GetRealSkillValue(craftKey) < skillCap) { double currentSkill = Player.GetRealSkillValue(craftKey); UpdateGump(craftKey); CraftItem itemToCraft = null; foreach (var item in craftList) { if (currentSkill < item.SkillLevel) { itemToCraft = item; break; } } if (itemToCraft == null && craftList.Count > 0) itemToCraft = craftList.Last(); if (itemToCraft != null) { CraftItemAction(itemToCraft); Misc.Pause(2000); if (craftKey == "Tailoring") RecycleItems(itemToCraft.ItemType); else if (craftKey == "Alchemy" || craftKey == "Tinkering" || craftKey == "Blacksmithy" || craftKey == "Bowcraft/Fletching" || craftKey == "Inscription" || craftKey == "Carpentry" || craftKey == "Cooking") UseCraftedItem(itemToCraft.ItemType); } else { Misc.SendMessage("No suitable item found for your current skill level."); } Misc.Pause(itemToCraft?.WaitTime ?? 3000); if (singlePass) break; } } private void CraftItemAction(CraftItem item) { // Determine the correct tool ID based on the item.Tool string. int toolId = 0; switch (item.Tool) { case "Sewing Kit": toolId = 0x0F9D; break; case "Mortar and Pestle": toolId = 0x0E9B; break; case "Tinker Tools": toolId = 0x1EB8; break; case "Smith's Hammer": toolId = 0x13FB; break; case "Carpenter's Tools": toolId = 0x0E7D; break; case "Fletcher's Tools": toolId = 0x0F3F; break; case "Scribe's Pen": toolId = 0x1F2E; break; case "Skillet": toolId = 0x097B; break; default: toolId = 0; break; } // Find the correct tool in the player's backpack. var tool = Player.Backpack.Contains.Find(i => i.ItemID == toolId); if (tool == null) { Misc.SendMessage("Crafting tool not found."); return; } if (Gumps.HasGump((uint)item.GumpId)) { Gumps.CloseGump((uint)item.GumpId); Misc.Pause(200); } Items.UseItem(tool); if (WaitForGump((uint)item.GumpId, 3000)) { Gumps.SendAction((uint)item.GumpId, (int)item.CategoryButtonId); Misc.Pause(500); Gumps.SendAction((uint)item.GumpId, (int)item.ItemButtonId); Misc.Pause(500); Gumps.SendAction((uint)item.GumpId, (int)item.MakeButtonId); } else { Misc.SendMessage("Gump did not open correctly."); } } private void RecycleItems(int itemType) { var scissors = Player.Backpack.Contains.FirstOrDefault(i => i.ItemID == 0x0F9F); if (scissors == null) { Misc.SendMessage("No scissors found in backpack."); return; } var item = Player.Backpack.Contains.Where(i => i.ItemID == itemType) .OrderByDescending(i => i.Serial) .FirstOrDefault(); if (item != null) { Items.UseItem(scissors); Target.WaitForTarget(1000); Target.TargetExecute(item); Misc.Pause(500); } } private void UseCraftedItem(int itemType) { var item = Player.Backpack.Contains.FirstOrDefault(i => i.ItemID == itemType); if (item != null) { Items.UseItem(item); Misc.Pause(500); } } private static bool WaitForGump(uint gumpId, int timeout = 5000) { if (!Gumps.HasGump(gumpId)) { for (var i = 0; i < timeout / 10; i++) { if (Gumps.HasGump(gumpId)) return true; Misc.Pause(10); } return false; } // Allow time for the gump to properly close/open for (var i = 0; i < timeout / 10; i++) { if (Gumps.HasGump(gumpId) || Gumps.CurrentGump() == gumpId) return true; Misc.Pause(10); } Misc.Pause(200); return Gumps.HasGump(gumpId); } private void UpdateGump(string currentSkill, bool finished = false) { var bar = Gumps.CreateGump(); bar.buttonid = -1; bar.gumpId = 123456789; bar.serial = (uint)Player.Serial; bar.x = 500; bar.y = 500; var skillsToTrain = _craftSkills.Where(skill => skill.Value > 0).Select(skill => skill.Key).ToList(); Gumps.AddBackground(ref bar, 0, 0, 300, 50 + (skillsToTrain.Count * 35), 2620); Gumps.AddLabel(ref bar, 10, 10, 203, "Crafting Trainer"); var index = 0; foreach (var skill in skillsToTrain) { var currentValue = Player.GetRealSkillValue(skill); var cap = _craftSkills[skill]; var icon = skill == currentSkill ? 2152 : (currentValue >= cap ? 5826 : 5832); Gumps.AddImage(ref bar, 10, 35 + (index * 30), icon); Gumps.AddLabel(ref bar, 60, 35 + (index * 30), 203, $"{skill}: {currentValue:F1}/{cap}"); index++; } if (finished) Gumps.AddLabel(ref bar, 75, 35 + (index * 30), 704, "ALL DONE!"); Gumps.CloseGump(123456789); Gumps.SendGump(bar, 500, 500); } } public class CraftItem { public double SkillLevel { get; set; } public string Tool { get; set; } public int GumpId { get; set; } public uint CategoryButtonId { get; set; } public uint ItemButtonId { get; set; } public uint MakeButtonId { get; set; } = 21; public int WaitTime { get; set; } = 3000; public int ItemType { get; set; } } }
View list of scripts
Disclaimer: This is a fan made site and is not directly associated with Ultima Online or UO staff.