#region Header // _,-'/-'/ // . __,-; ,'( '/ // \. `-.__`-._`:_,-._ _ , . `` // `:-._,------' ` _,`--` -: `_ , ` ,' : // `---..__,,--' (C) 2023 ` -'. -' // # Vita-Nex [http://core.vita-nex.com] # // {o)xxx|===============- # -===============|xxx(o} // # # #endregion #region References using System; using Server; using Server.Engines.Craft; using Server.Items; using VitaNex.Items; #endregion namespace VitaNex.SuperCrafts { public sealed class Pyrotechnics : SuperCraftSystem { public static Type PowderType = ScriptCompiler.FindTypeByName("BlackPowder") ?? typeof(SulfurousAsh); public override SkillName MainSkill => SkillName.Alchemy; public override TextDefinition GumpTitle => "
PYROTECHNICS MENU
"; public Pyrotechnics() : base(0, 0, 3) { MarkOption = true; } #if ServUO public override int CanCraft(Mobile m, ITool tool, Type itemType) #else public override int CanCraft(Mobile m, BaseTool tool, Type itemType) #endif { if (tool == null || tool.Deleted || tool.UsesRemaining < 0) { return 1044038; // You have worn out your tool! } if (tool is Item o && !BaseTool.CheckAccessible(o, m)) { return 1044263; // The tool must be on your person to use. } return base.CanCraft(m, tool, itemType); } public override bool RetainsColorFrom(CraftItem item, Type type) { if (item != null && type != null) { if (item.ItemType.IsEqualOrChildOf() && type.IsEqualOrChildOf()) { return true; } if (item.ItemType.IsEqualOrChildOf() && type.IsEqualOrChildOf()) { return true; } } return false; } public override void InitCraftList() { InitComponents(); InitRockets(); SetSubRes(typeof(IronIngot), 1044022); AddSubRes(typeof(IronIngot), 1044022, 00.0, 1044036, 1044267); AddSubRes(typeof(DullCopperIngot), 1044023, 65.0, 1044036, 1044268); AddSubRes(typeof(ShadowIronIngot), 1044024, 70.0, 1044036, 1044268); AddSubRes(typeof(CopperIngot), 1044025, 75.0, 1044036, 1044268); AddSubRes(typeof(BronzeIngot), 1044026, 80.0, 1044036, 1044268); AddSubRes(typeof(GoldIngot), 1044027, 85.0, 1044036, 1044268); AddSubRes(typeof(AgapiteIngot), 1044028, 90.0, 1044036, 1044268); AddSubRes(typeof(VeriteIngot), 1044029, 95.0, 1044036, 1044268); AddSubRes(typeof(ValoriteIngot), 1044030, 97.0, 1044036, 1044268); var type = ScriptCompiler.FindTypeByName("MithrilIngot"); if (type != null && type.IsChildOf()) { AddSubRes(type, "MITHRIL", 99.0, 1044268); } SetSubRes2(typeof(FireworkStarIron), "IRON STARS"); AddSubRes2(typeof(FireworkStarIron), "IRON STARS", 00.0, "You cannot work with this unusual star."); AddSubRes2(typeof(FireworkStarDullCopper), "DULL COPPER STARS", 65.0, "You cannot work with this unusual star."); AddSubRes2(typeof(FireworkStarShadowIron), "SHADOW IRON STARS", 70.0, "You cannot work with this unusual star."); AddSubRes2(typeof(FireworkStarCopper), "COPPER STARS", 75.0, "You cannot work with this unusual star."); AddSubRes2(typeof(FireworkStarBronze), "BRONZE STARS", 80.0, "You cannot work with this unusual star."); AddSubRes2(typeof(FireworkStarGold), "GOLD STARS", 85.0, "You cannot work with this unusual star."); AddSubRes2(typeof(FireworkStarAgapite), "AGAPITE STARS", 90.0, "You cannot work with this unusual star."); AddSubRes2(typeof(FireworkStarVerite), "VERITE STARS", 95.0, "You cannot work with this unusual star."); AddSubRes2(typeof(FireworkStarValorite), "VALORITE STARS", 99.0, "You cannot work with this unusual star."); } private void InitComponents() { AddCraft( "Components", "Firework Star", 0.0, 100.0, new[] { new ResourceInfo(typeof(IronIngot), 1044036, 2), new ResourceInfo(PowderType, PowderType.Name.SpaceWords(), 1), new ResourceInfo(typeof(BlackPearl), "Black Pearl", 1) }, c => c.NeedHeat = true); AddCraft( "Components", "Firework Fuse", 0.0, 100.0, new[] { new ResourceInfo(typeof(Wool), "Wool", 2), new ResourceInfo(PowderType, PowderType.Name.SpaceWords(), 1) }); } private void InitRockets() { AddCraft( "Rockets", "Bottle Rocket", 0.0, 20.0, new[] { new ResourceInfo(typeof(FireworkStarIron), "Firework Star", 1), new ResourceInfo(typeof(FireworkFuse), "Firework Fuse", 1) }, c => c.UseSubRes2 = true); AddCraft( "Rockets", "Sky Shield", 10.0, 30.0, new[] { new ResourceInfo(typeof(FireworkStarIron), "Firework Star", 2), new ResourceInfo(typeof(FireworkFuse), "Firework Fuse", 1) }, c => c.UseSubRes2 = true); AddCraft( "Rockets", "Little Boy", 20.0, 40.0, new[] { new ResourceInfo(typeof(FireworkStarIron), "Firework Star", 3), new ResourceInfo(typeof(FireworkFuse), "Firework Fuse", 2) }, c => c.UseSubRes2 = true); AddCraft( "Rockets", "Moon Shine", 40.0, 60.0, new[] { new ResourceInfo(typeof(FireworkStarIron), "Firework Star", 5), new ResourceInfo(typeof(FireworkFuse), "Firework Fuse", 2) }, c => c.UseSubRes2 = true); AddCraft( "Rockets", "The Penetrator", 60.0, 80.0, new[] { new ResourceInfo(typeof(FireworkStarIron), "Firework Star", 7), new ResourceInfo(typeof(FireworkFuse), "Firework Fuse", 3) }, c => c.UseSubRes2 = true); AddCraft( "Rockets", "Big Betty", 80.0, 100.0, new[] { new ResourceInfo(typeof(FireworkStarIron), "Firework Star", 9), new ResourceInfo(typeof(FireworkFuse), "Firework Fuse", 3) }, c => c.UseSubRes2 = true); AddCraft( "Rockets", "Block Buster", 100.0, 120.0, new[] { new ResourceInfo(typeof(FireworkStarIron), "Firework Star", 11), new ResourceInfo(typeof(FireworkFuse), "Firework Fuse", 4) }, c => c.UseSubRes2 = true); } public override double GetChanceAtMin(CraftItem item) { return 0.10; } public override void PlayCraftEffect(Mobile m) { if (m != null) { m.PlaySound(85); } } public override int PlayEndingEffect( Mobile m, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item) { if (toolBroken) { m.SendLocalizedMessage(1044038); // You have worn out your tool } if (failed) { if (lostMaterial) { return 1044043; // You failed to create the item, and some of your materials are lost. } return 1044157; // You failed to create the item, but no materials were lost. } return 1044154; // You create the item. } } }