diff --git a/Projects/CaptainOfIndustry/CykaOfIndustry/Class1.cs b/Projects/CaptainOfIndustry/CykaOfIndustry/Class1.cs index 050b00d..756223d 100644 --- a/Projects/CaptainOfIndustry/CykaOfIndustry/Class1.cs +++ b/Projects/CaptainOfIndustry/CykaOfIndustry/Class1.cs @@ -1,4 +1,6 @@ -using System.Linq; +using System; +using System.Collections.Generic; +using System.Linq; using BepInEx; using BepInEx.Configuration; using HarmonyLib; @@ -30,6 +32,8 @@ namespace CykaOfIndustry { public static ConfigEntry transportSpeedMultiplier; public static ConfigEntry shipyardCargoMultiplier; public static ConfigEntry autosaveInterval; + public static ConfigEntry recipeMultipliers; + public static Dictionary recipeMultipliersDict; public static ConfigEntry debugMode; @@ -71,6 +75,18 @@ namespace CykaOfIndustry { new ConfigDescription("Shipyard Cargo Multiplier")); autosaveInterval = Config.Bind("General", "Autosave Interval", 1, new ConfigDescription("Autosave Interval in minutes")); + recipeMultipliers = Config.Bind("General", "Recipe Multipliers", "dirt:4", + new ConfigDescription("Recipe Multipliers")); + + recipeMultipliersDict = recipeMultipliers.Value.Split(',') + .ToDictionary(x => x.Split(':')[0], x => int.Parse(x.Split(':')[1])); + recipeMultipliers.SettingChanged += (sender, args) => { + recipeMultipliersDict = recipeMultipliers.Value.Split(',') + .ToDictionary(x => x.Split(':')[0], x => int.Parse(x.Split(':')[1])); + Console.WriteLine("IndustrialCyka: Recipe multipliers parsed as:"); + foreach (var kvp in recipeMultipliersDict) + Console.WriteLine("\tIndustrialCyka: {0} x {1}", kvp.Key, kvp.Value); + }; debugMode = Config.Bind("General", "Debug Mode", false, new ConfigDescription("Debug Mode")); diff --git a/Projects/CaptainOfIndustry/CykaOfIndustry/Patches.cs b/Projects/CaptainOfIndustry/CykaOfIndustry/Patches.cs index 40fdc28..1ac58b5 100644 --- a/Projects/CaptainOfIndustry/CykaOfIndustry/Patches.cs +++ b/Projects/CaptainOfIndustry/CykaOfIndustry/Patches.cs @@ -16,6 +16,7 @@ using Mafi.Core.Entities.Dynamic; using Mafi.Core.Entities.Static; using Mafi.Core.Entities.Static.Layout; using Mafi.Core.Factory.Machines; +using Mafi.Core.Factory.Recipes; using Mafi.Core.Factory.Transports; using Mafi.Core.Population; using Mafi.Core.Ports.Io; @@ -521,6 +522,26 @@ namespace CykaOfIndustry { Console.WriteLine("IndustrialCyka: Autosave interval: {0}", num); __result = num > Main.autosaveInterval.Value; } + + [HarmonyPrefix] + [HarmonyPatch(typeof(MachineProto), nameof(MachineProto.AddRecipe))] + static void machineProtoAddRecipe(MachineProto __instance, ref RecipeProto recipe) { + Console.WriteLine("Recipe outputs for {0}:", __instance.Id); + recipe.AllOutputs.ForEach(o => { + var id = o.Product.Id.ToString(); + Console.WriteLine("\tIndustrialCyka: Recipe output {0} x {1}", id, o.Quantity); + if (!Main.recipeMultipliersDict.ContainsKey(id)) { + if (Main.debugMode.Value) + Console.WriteLine("IndustrialCyka: Recipe output {0} not found in multipliers, nothing to do", id); + return; + } + var multiplier = Main.recipeMultipliersDict[id]; + var trav = Traverse.Create(o); + trav.Field("Quantity").SetValue(new Quantity(trav.Field("Quantity").GetValue().Value * multiplier)); + if (Main.debugMode.Value) + Console.WriteLine("IndustrialCyka: Recipe output {0} changed to {1}", id, trav.Field("Quantity").GetValue()); + }); + } } [HarmonyPatch(typeof(Excavator), "MineMixedAt")]