Add recipe output multiplier

This commit is contained in:
2024-10-20 16:31:15 +02:00
parent 90edaaf5c8
commit 059c8a53a4
2 changed files with 38 additions and 1 deletions

View File

@@ -1,4 +1,6 @@
using System.Linq; using System;
using System.Collections.Generic;
using System.Linq;
using BepInEx; using BepInEx;
using BepInEx.Configuration; using BepInEx.Configuration;
using HarmonyLib; using HarmonyLib;
@@ -30,6 +32,8 @@ namespace CykaOfIndustry {
public static ConfigEntry<float> transportSpeedMultiplier; public static ConfigEntry<float> transportSpeedMultiplier;
public static ConfigEntry<float> shipyardCargoMultiplier; public static ConfigEntry<float> shipyardCargoMultiplier;
public static ConfigEntry<int> autosaveInterval; public static ConfigEntry<int> autosaveInterval;
public static ConfigEntry<string> recipeMultipliers;
public static Dictionary<string, int> recipeMultipliersDict;
public static ConfigEntry<bool> debugMode; public static ConfigEntry<bool> debugMode;
@@ -71,6 +75,18 @@ namespace CykaOfIndustry {
new ConfigDescription("Shipyard Cargo Multiplier")); new ConfigDescription("Shipyard Cargo Multiplier"));
autosaveInterval = Config.Bind("General", "Autosave Interval", 1, autosaveInterval = Config.Bind("General", "Autosave Interval", 1,
new ConfigDescription("Autosave Interval in minutes")); 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")); debugMode = Config.Bind("General", "Debug Mode", false, new ConfigDescription("Debug Mode"));

View File

@@ -16,6 +16,7 @@ using Mafi.Core.Entities.Dynamic;
using Mafi.Core.Entities.Static; using Mafi.Core.Entities.Static;
using Mafi.Core.Entities.Static.Layout; using Mafi.Core.Entities.Static.Layout;
using Mafi.Core.Factory.Machines; using Mafi.Core.Factory.Machines;
using Mafi.Core.Factory.Recipes;
using Mafi.Core.Factory.Transports; using Mafi.Core.Factory.Transports;
using Mafi.Core.Population; using Mafi.Core.Population;
using Mafi.Core.Ports.Io; using Mafi.Core.Ports.Io;
@@ -521,6 +522,26 @@ namespace CykaOfIndustry {
Console.WriteLine("IndustrialCyka: Autosave interval: {0}", num); Console.WriteLine("IndustrialCyka: Autosave interval: {0}", num);
__result = num > Main.autosaveInterval.Value; __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<Quantity>().Value * multiplier));
if (Main.debugMode.Value)
Console.WriteLine("IndustrialCyka: Recipe output {0} changed to {1}", id, trav.Field("Quantity").GetValue<Quantity>());
});
}
} }
[HarmonyPatch(typeof(Excavator), "MineMixedAt")] [HarmonyPatch(typeof(Excavator), "MineMixedAt")]