diff --git a/Projects/CykaOfQud/Class1.cs b/Projects/CykaOfQud/Class1.cs index fca1713..ded81ca 100644 --- a/Projects/CykaOfQud/Class1.cs +++ b/Projects/CykaOfQud/Class1.cs @@ -21,16 +21,24 @@ namespace CykaOfQud { public static ConfigEntry mutationPointsPerLevelMultiplier; public static ConfigEntry attributePointsPerLevelMultiplier; public static ConfigEntry attributeBonusPerLevelMultiplier; + public static ConfigEntry disassemblyBonusMultiplier; public static ConfigEntry debugMode; public void Awake() { xpMultiplier = Config.Bind("General", "XP Multiplier", 4f, new ConfigDescription("XP Multiplier")); - hitpointsPerLevelMultiplier = Config.Bind("General", "Hitpoints Per Level Multiplier", 1f, new ConfigDescription("Hitpoints Per Level Multiplier")); - skillPointsPerLevelMultiplier = Config.Bind("General", "Skill Points Per Level Multiplier", 1f, new ConfigDescription("Skill Points Per Level Multiplier")); - mutationPointsPerLevelMultiplier = Config.Bind("General", "Mutation Points Per Level Multiplier", 1f, new ConfigDescription("Mutation Points Per Level Multiplier")); - attributePointsPerLevelMultiplier = Config.Bind("General", "Attribute Points Per Level Multiplier", 1f, new ConfigDescription("Attribute Points Per Level Multiplier")); - attributeBonusPerLevelMultiplier = Config.Bind("General", "Attribute Bonus Per Level Multiplier", 1f, new ConfigDescription("Attribute Bonus Per Level Multiplier")); + hitpointsPerLevelMultiplier = Config.Bind("General", "Hitpoints Per Level Multiplier", 1f, + new ConfigDescription("Hitpoints Per Level Multiplier")); + skillPointsPerLevelMultiplier = Config.Bind("General", "Skill Points Per Level Multiplier", 1f, + new ConfigDescription("Skill Points Per Level Multiplier")); + mutationPointsPerLevelMultiplier = Config.Bind("General", "Mutation Points Per Level Multiplier", 1f, + new ConfigDescription("Mutation Points Per Level Multiplier")); + attributePointsPerLevelMultiplier = Config.Bind("General", "Attribute Points Per Level Multiplier", 1f, + new ConfigDescription("Attribute Points Per Level Multiplier")); + attributeBonusPerLevelMultiplier = Config.Bind("General", "Attribute Bonus Per Level Multiplier", 1f, + new ConfigDescription("Attribute Bonus Per Level Multiplier")); + disassemblyBonusMultiplier = Config.Bind("General", "Disassembly Bonus Multiplier", 1f, + new ConfigDescription("Disassembly Bonus Multiplier")); debugMode = Config.Bind("General", "Debug Mode", false, new ConfigDescription("Debug Mode")); diff --git a/Projects/CykaOfQud/Patches.cs b/Projects/CykaOfQud/Patches.cs index 67f474c..db65189 100644 --- a/Projects/CykaOfQud/Patches.cs +++ b/Projects/CykaOfQud/Patches.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Text; using CykaOfQud; using HarmonyLib; @@ -76,583 +77,31 @@ namespace CykaOfIndustry { if (Main.debugMode.Value) Console.WriteLine("CykaOfQud: AddAttributeBonus: New AB for level {0}", ABGain); } + + [HarmonyPrefix] + [HarmonyPatch(typeof(XRL.World.Parts.BitLocker), "AddBits")] + static void disassemblyBonusMultiplier(ref string Bits) { + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: AddBits: Old {0}", Bits); + + StringBuilder output = new StringBuilder(); + foreach (char c in Bits) { + output.Append(new string(c, (int)Math.Ceiling(Main.disassemblyBonusMultiplier.Value))); + } + Bits = output.ToString(); + + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: AddBits: New {0}", Bits); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(XRL.World.Parts.BitLocker), "AddAllBits")] + static void addAllBits(ref int num) { + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: AddAllBits: Old {0}", num); + num = (int)(num * Main.disassemblyBonusMultiplier.Value); + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: AddAllBits: New {0}", num); + } } -// [HarmonyPrefix] -// [HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetMinedThicknessByDistanceMeters")] -// static void excavatorMiningAreaMultiplier(ref float[] thicknessMeters) { -// for (int i = 0; i < thicknessMeters.Length; i++) { -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old mining area {0}", thicknessMeters[i]); -// thicknessMeters[i] *= Main.excavatorMiningCapacityMultiplier.Value; -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New mining area {0}", thicknessMeters[i]); -// } -// } -// -// [HarmonyPrefix] -// [HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetMaxMiningDistance")] -// static void excavatorReachMultiplier(ref RelTile1i minMiningDistance, ref RelTile1i maxMiningDistance) { -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old min mining distance {0}, max mining distance {1}", -// minMiningDistance, maxMiningDistance); -// minMiningDistance = new RelTile1i((int)(minMiningDistance.Value * Main.excavatorMinReachMultiplier.Value)); -// maxMiningDistance = new RelTile1i((int)(maxMiningDistance.Value * Main.excavatorMaxReachMultiplier.Value)); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New min mining distance {0}, max mining distance {1}", -// minMiningDistance, maxMiningDistance); -// } -// -// [HarmonyPrefix] -// [HarmonyPatch(typeof(TruckProtoBuilder.TruckProtoBuilderState), "SetCapacity")] -// static void truckCapacityMultiplier(ref int quantity) { -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old truck capacity {0}", quantity); -// quantity *= Main.truckCapacityMultiplier.Value; -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New truck capacity {0}", quantity); -// } -// -// // [HarmonyPrefix] -// // [HarmonyPatch(typeof(StorageProtoBuilder.State), "SetCapacity")] -// // static void storageCapacityMultiplier(ref int capacity) { -//// // Console.WriteLine("IndustrialCyka: Old storage capacity: {0}", capacity); -// // capacity = (int)(capacity * Main.storageCapacityMultiplier.Value); -//// // Console.WriteLine("IndustrialCyka: New storage capacity: {0}", capacity); -// // } -// -// [HarmonyPostfix] -// [HarmonyPatch(typeof(CargoShipModuleProto), MethodType.Constructor, -// new[] { -// typeof(Proto.ID), typeof(Proto.Str), typeof(ProductType), typeof(Quantity), -// typeof(CargoShipModuleProto.Gfx) -// })] -// static void cargoShipCapacityMultiplier(CargoShipModuleProto __instance) { -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old ship capacity {0}", __instance.Capacity); -// __instance.Capacity = new Quantity(__instance.Capacity.Value * Main.cargoShipCapacityMultiplier.Value); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New ship capacity {0}", __instance.Capacity); -// } -// -// // No workey... idk how it's supposed to work, speed is always 1 or 100% -// // [HarmonyPrefix] -// // [HarmonyPatch(typeof(DrivingEntity), "SetSpeedFactor")] -// // static void vehicleSpeedMultiplier(ref Percent speedFactor) { -//// // Console.WriteLine("IndustrialCyka: Old speed: {0}", speedFactor.ToString()); -// // // typeof(Percent) -// // // .GetField("RawValue",BindingFlags.Instance|BindingFlags.NonPublic) -// // // .SetValue(speedFactor,speedFactor.ToFloat() / Main.vehicleSpeedMultiplier.Value); -// // Percent newSpeedFactor = Percent.FromFloat(speedFactor.ToFloat() / Main.vehicleSpeedMultiplier.Value); -// // speedFactor = newSpeedFactor; -//// // Console.WriteLine("IndustrialCyka: New speed: {1}", newSpeedFactor.RawValue.ToString()); -// // } -// -//// [HarmonyPostfix] -//// [HarmonyPatch(typeof(SmoothDriver), "SetSpeedFactor")] -//// static void vehicleSpeedMultiplier(SmoothDriver __instance) { -//// Fix32 speedMulti = Fix32.FromFloat(Main.vehicleSpeedMultiplier.Value); -//// -//// Traverse traverse = Traverse.Create(__instance); -//// Traverse maxForwardsSpeedField = traverse.Field("m_maxForwardsSpeed"); -//// Traverse maxBackwardsSpeedField = traverse.Field("m_maxBackwardsSpeed"); -//// Traverse maxAccelerationField = traverse.Field("m_maxAcceleration"); -//// -//// // Console.WriteLine("IndustrialCyka: Old speeds: (F) {0}, (B) {1}, (A) {2}", maxForwardsSpeedField.GetValue(), -//// // maxBackwardsSpeedField.GetValue(), maxAccelerationField.GetValue()); -//// -//// maxForwardsSpeedField.SetValue((Fix32)maxForwardsSpeedField.GetValue() * speedMulti); -//// maxBackwardsSpeedField.SetValue((Fix32)maxBackwardsSpeedField.GetValue() * speedMulti); -//// maxAccelerationField.SetValue((Fix32)maxAccelerationField.GetValue() * speedMulti); -//// -//// // Console.WriteLine("IndustrialCyka: New speeds: (F) {0}, (B) {1}, (A) {2}", maxForwardsSpeedField.GetValue(), -//// // maxBackwardsSpeedField.GetValue(), maxAccelerationField.GetValue()); -//// } -// -// [HarmonyPostfix] -// [HarmonyPatch(typeof(StorageBaseProto), MethodType.Constructor, -// new[] { -// typeof(StaticEntityProto.ID), -// typeof(Proto.Str), -// typeof(EntityLayout), -// typeof(Quantity), -// typeof(EntityCosts), -// typeof(LayoutEntityProto.Gfx), -// typeof(Quantity), -// typeof(Duration), -// typeof(IEnumerable) -// })] -// static void storageCapacityMultiplier(StorageProto __instance) { -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old storage capacity {0}", __instance.Capacity); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old storage transfer limit {0}", __instance.TransferLimit); -// Traverse traverse = Traverse.Create(__instance); -// -// traverse.Field("Capacity") -// .SetValue(new Quantity((int)(__instance.Capacity.Value * Main.storageCapacityMultiplier.Value))); -// traverse.Field("TransferLimit").SetValue(new Quantity(10000)); -// traverse.Field("TransferLimitDuration").SetValue(Duration.FromTicks(1)); -// -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New storage capacity {0}", __instance.Capacity); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New storage transfer limit {0}", __instance.TransferLimit); -// } -// -// [HarmonyPrefix] -// [HarmonyPatch(typeof(UpointsManager), "GenerateUnity")] -// static void unityGenerationMultiplier(Proto.ID categoryId, ref Upoints generated) { -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old generated {0} unity", generated.Value); -// Fix32 multi = Fix32.FromFloat(Main.unityGenerationMultiplier.Value); -// generated = new Upoints(generated.Value * multi); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New generated {0} unity", generated.Value); -// } -// -// [HarmonyTranspiler] -// [HarmonyPatch(typeof(Machine), "updateWorkOnRecipes")] -// static IEnumerable unityBooster(IEnumerable instructions) { -// Dictionary matchTable = new Dictionary(); -// matchTable[0] = OpCodes.Ldsfld; -// matchTable[1] = OpCodes.Br; -// matchTable[2] = OpCodes.Ldc_I4_2; -// int matches = 0; -// int totalMatch = matchTable.Count; -// -// var codes = new List(instructions); -// for (int i = 0; i < codes.Count; i++) { -// if (matches >= totalMatch) { -// break; -// } -// -// if (codes[i].opcode.Equals(matchTable[matches])) { -// if (matches == totalMatch - 1) { -// codes[i].opcode = OpCodes.Ldc_I4_6; -// } -// -// matches++; -// } -// } -// -// // for (int i = 0; i < codes.Count; i++) { -// // Console.WriteLine(codes[i].ToString()); -// // } -// -// return codes.AsEnumerable(); -// } -// -// // Could not make this work either... idk why... Doesn't make sense... -// // [HarmonyPostfix] -// // [HarmonyPatch(typeof(SimpleVirtualResource), "MineResourceAt")] -// // static void infiniteGroundResources(SimpleVirtualResource __instance) { -//// // Console.WriteLine("IndustrialCyka: Patching ground resources (Capacity)"); -// // Traverse traverse = Traverse.Create(__instance); -// // Traverse capacityField = traverse.Field("Capacity"); -// // capacityField.SetValue(1000000000); -// // Traverse quantityField = traverse.Field("Quantity"); -// // quantityField.SetValue(1000000000); -// // } -// -// [HarmonyPrefix] -// [HarmonyPatch(typeof(ProductBuffer), "ForceNewCapacityTo")] -// static void bufferCapacityMultiplier(ref Quantity newCapacity) { -// if (newCapacity.Value <= 0) { -// return; -// } -// -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old buffer capacity {0}", newCapacity); -// Quantity newNewCapacity = new Quantity((int)(newCapacity.Value * Main.bufferCapacityMultiplier.Value)); -// newCapacity = newNewCapacity; -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New buffer capacity {0}", newCapacity); -// } -// -// [HarmonyPostfix] -// [HarmonyPatch(typeof(CargoDepotModuleProto), MethodType.Constructor, -// new[] { -// typeof(CargoDepotModuleProto.ID), -// typeof(Proto.Str), -// typeof(EntityLayout), -// typeof(ProductType), -// typeof(Option), -// typeof(Quantity), -// typeof(Quantity), -// typeof(Duration), -// typeof(Electricity), -// typeof(bool), -// typeof(Percent), -// typeof(EntityCosts), -// typeof(CargoDepotModuleProto.Gfx), -// typeof(IEnumerable), -// })] -// static void depotTransferSpeedMultiplier(CargoDepotModuleProto __instance) { -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old depot transfer speed {0}", __instance.QuantityPerExchange); -// Traverse traverse = Traverse.Create(__instance); -// -// traverse.Field("QuantityPerExchange") -// .SetValue(new Quantity((int)(__instance.QuantityPerExchange.Value * -// Main.depotTransferSpeedMultiplier.Value))); -// -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New depot transfer speed {0}", __instance.QuantityPerExchange); -// } -// -// [HarmonyPostfix] -// [HarmonyPatch(typeof(WorldMapMineProto), MethodType.Constructor, -// new[] { -// typeof(EntityProto.ID), -// typeof(Proto.Str), -// typeof(ProductQuantity), -// typeof(Duration), -// typeof(Upoints), -// typeof(UpointsCategoryProto), -// typeof(EntityCosts), -// typeof(Func), -// typeof(int), -// typeof(Quantity), -// typeof(WorldMapEntityProto.Gfx), -// typeof(int), -// typeof(int), -// typeof(IEnumerable), -// })] -// static void worldMineSpeedMultiplier(WorldMapMineProto __instance) { -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old world mine speed {0}", -// __instance.ProducedProductPerStep.Quantity); -// ProductQuantity newProductQuantity = new ProductQuantity(__instance.ProducedProductPerStep.Product, -// new Quantity((int)(__instance.ProducedProductPerStep.Quantity.Value * -// Main.worldMineSpeedMultiplier.Value))); -// -// Traverse.Create(__instance) -// .Field("ProducedProductPerStep") -// .SetValue(newProductQuantity); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New world mine speed {0}", -// __instance.ProducedProductPerStep.Quantity); -// } -// -// [HarmonyPostfix] -// [HarmonyPatch(typeof(WorldMapMineProto), MethodType.Constructor, -// new[] { -// typeof(EntityProto.ID), -// typeof(Proto.Str), -// typeof(ProductQuantity), -// typeof(Duration), -// typeof(Upoints), -// typeof(UpointsCategoryProto), -// typeof(EntityCosts), -// typeof(Func), -// typeof(int), -// typeof(Quantity), -// typeof(WorldMapEntityProto.Gfx), -// typeof(int), -// typeof(int), -// typeof(IEnumerable), -// })] -// static void worldMineLevelIncrementMultiplier(WorldMapMineProto __instance) { -// Traverse traverse = Traverse.Create(__instance); -// -// // int level = traverse.Field("Level").GetValue(); -// int maxLevel = traverse.Field("MaxLevel").GetValue(); -// // int levelsPerUpgrade = traverse.Field("LevelsPerUpgrade").GetValue(); -// -// int newLevelsPerUpgrade = 10; -// int newMaxLevel = (int)Math.Ceiling((double)maxLevel / newLevelsPerUpgrade) * newLevelsPerUpgrade; -// -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old max level {0}, new max level {1}", maxLevel, newMaxLevel); -// traverse.Field("MaxLevel").SetValue(newMaxLevel); -// traverse.Field("LevelsPerUpgrade").SetValue(newLevelsPerUpgrade); -// } -// -// [HarmonyTranspiler] -// [HarmonyPatch(typeof(WorldMapMineProto), MethodType.Constructor, -// new[] { -// typeof(EntityProto.ID), -// typeof(Proto.Str), -// typeof(ProductQuantity), -// typeof(Duration), -// typeof(Upoints), -// typeof(UpointsCategoryProto), -// typeof(EntityCosts), -// typeof(Func), -// typeof(int), -// typeof(Quantity), -// typeof(WorldMapEntityProto.Gfx), -// typeof(int), -// typeof(int), -// typeof(IEnumerable), -// })] -// static IEnumerable cookWorldMineLevelIncrementMultiplier( -// IEnumerable instructions) { -// Dictionary matchTable = new Dictionary(); -// matchTable[0] = OpCodes.Rem; -// matchTable[1] = OpCodes.Ldfld; -// matchTable[2] = OpCodes.Ldarg_0; -// matchTable[3] = OpCodes.Ldfld; -// matchTable[4] = OpCodes.Ldarg_0; -// int matches = 0; -// int totalMatch = matchTable.Count; -// -// var codes = new List(instructions); -// for (int i = codes.Count - 1; i >= 0; i--) { -// if (matches >= totalMatch) { -// break; -// } -// -// if (codes[i].opcode.Equals(matchTable[matches])) { -// if (matches == totalMatch - 1) { -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Patching world mine level increment"); -// codes[i + 4].opcode = OpCodes.Add; -// codes[i + 5].opcode = OpCodes.Brtrue_S; -// break; -// } -// -// matches++; -// } -// else { -// matches = 0; -// } -// } -// -// return codes.AsEnumerable(); -// } -// -// [HarmonyPostfix] -// [HarmonyPatch(typeof(SettlementHousingModuleProto), MethodType.Constructor, new[] { -// typeof(StaticEntityProto.ID), -// typeof(Proto.Str), -// typeof(EntityLayout), -// typeof(EntityCosts), -// typeof(int), -// typeof(Upoints), -// typeof(ImmutableArray, Percent>>), -// typeof(IReadOnlyDictionary), -// typeof(Option), -// typeof(SettlementHousingModuleProto.Gfx), -// })] -// static void housingCapacityMultiplier(SettlementHousingModuleProto __instance) { -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old housing capacity {0}", __instance.Capacity); -// Traverse.Create(__instance).Field("Capacity").Value = -// (int)(__instance.Capacity * Main.housingCapacityMultiplier.Value); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New housing capacity {0}", __instance.Capacity); -// } -// -// [HarmonyPostfix] -// [HarmonyPatch(typeof(StackerProto), MethodType.Constructor, new[] { -// typeof(StaticEntityProto.ID), -// typeof(Proto.Str), -// typeof(EntityLayout), -// typeof(EntityCosts), -// typeof(Electricity), -// typeof(ThicknessTilesI), -// typeof(RelTile3i), -// typeof(Duration), -// typeof(Duration), -// typeof(StackerProto.Gfx), -// typeof(ThicknessTilesI), -// typeof(IEnumerable), -// })] -// static void dumpDelayMultiplier(StackerProto __instance) { -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old dumpDelay {0}", __instance.DumpDelay); -// Duration newDelay = -// new Duration(Math.Max((int)(__instance.DumpDelay.Ticks * Main.dumpDelayMultiplier.Value), 1)); -// Traverse.Create(__instance).Field("DumpDelay").SetValue(newDelay); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New dumpDelay {0}", __instance.DumpDelay); -// } -// -// [HarmonyPrefix] -// [HarmonyPatch(typeof(TransportProto), MethodType.Constructor, new[] { -// typeof(StaticEntityProto.ID), -// typeof(Proto.Str), -// typeof(ThicknessTilesF), -// typeof(Quantity), -// typeof(RelTile1f), -// typeof(RelTile1f), -// typeof(RelTile1i), -// typeof(bool), -// typeof(bool), -// typeof(Option), -// typeof(RelTile1i), -// typeof(IoPortShapeProto), -// typeof(Electricity), -// typeof(Percent), -// typeof(bool), -// typeof(bool), -// typeof(EntityCosts), -// typeof(RelTile1i), -// typeof(Duration), -// typeof(Option), -// typeof(VirtualProductProto), -// typeof(Quantity), -// typeof(TransportProto.Gfx), -// })] -// static void transportSpeedMultiplier(ref StaticEntityProto.ID id, ref Proto.Str strings, -// ref ThicknessTilesF surfaceRelativeHeight, ref Quantity maxQuantityPerTransportedProduct, -// ref RelTile1f transportedProductsSpacing, ref RelTile1f speedPerTick, ref RelTile1i zStepLength, -// ref bool needsPillarsAtGround, ref bool canBeBuried, -// ref Option tileSurfaceWhenOnGround, ref RelTile1i maxPillarSupportRadius, -// ref IoPortShapeProto portsShape, ref Electricity baseElectricityCost, ref Percent cornersSharpnessPercent, -// ref bool allowMixedProducts, ref bool isBuildable, ref EntityCosts costs, ref RelTile1i lengthPerCost, -// ref Duration constructionDurationPerProduct, ref Option nextTier, -// ref VirtualProductProto maintenanceProduct, Quantity maintenancePerTile, ref TransportProto.Gfx graphics) { -// if (TransportPillarProto.MAX_PILLAR_HEIGHT.Value < 25) -// typeof(TransportPillarProto).GetField("MAX_PILLAR_HEIGHT").SetValue(null, new ThicknessTilesI(25)); -// if (IoPort.MAX_TRANSFER_PER_TICK.Value < 10000) -// typeof(IoPort).GetField("MAX_TRANSFER_PER_TICK").SetValue(null, new Quantity(10000)); -// -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Old maxQuantityPerTransportedProduct {0}", -// maxQuantityPerTransportedProduct); -// maxQuantityPerTransportedProduct *= 1000; -// maxQuantityPerTransportedProduct = maxQuantityPerTransportedProduct.Min(new Quantity(10000)); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: New maxQuantityPerTransportedProduct {0}", -// maxQuantityPerTransportedProduct); -// -// speedPerTick *= 10; -// transportedProductsSpacing = speedPerTick; -// zStepLength = RelTile1i.One; -// canBeBuried = true; -// maxPillarSupportRadius = new RelTile1i(8); -// } -// -// [HarmonyPostfix] -// [HarmonyPatch(typeof(ShipyardProto), MethodType.Constructor, new[] { -// typeof(StaticEntityProto.ID), -// typeof(Proto.Str), -// typeof(EntityLayout), -// typeof(EntityCosts), -// typeof(bool), -// typeof(Quantity), -// typeof(Option), -// typeof(ImmutableArray>), -// typeof(StackerProto.Gfx), -// typeof(ImmutableArray), -// typeof(bool), -// })] -// static void shipyardCargoMultiplier(ShipyardProto __instance) { -// Traverse.Create(__instance).Field("CargoCapacity").SetValue(new Quantity( -// (int)(__instance.CargoCapacity.Value * Main.shipyardCargoMultiplier.Value))); -// } -// -// [HarmonyPostfix] -// [HarmonyPatch(typeof(SaveManager), "isTimeForAutoSave")] -// static void autosaveInterval(ref bool __result, SaveManager __instance) { -// if (Main.autosaveInterval.Value <= 0) { -// __result = false; -// return; -// } -// -// var trav = Traverse.Create(__instance); -// var lastSaveTime = trav.Field("m_lastSaveTime").GetValue(); -// var num = (Environment.TickCount - lastSaveTime).Abs() / 1000L; -// if (Main.debugMode.Value) -// 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")] -// public class MineMixedAtPatch { -// public static Dictionary -// originalCapacity = new Dictionary(); -// -// public static Dictionary> originalMinedThicknessByDistance = -// new Dictionary>(); -// -// public static Dictionary originalMineTileIterations = -// new Dictionary(); -// -// public static Dictionary originalMaxMiningDistance = -// new Dictionary(); -// -// static void Prefix(ref Excavator __instance) { -// if (!originalCapacity.ContainsKey(__instance.Prototype)) { -// originalCapacity.Add(__instance.Prototype, __instance.Prototype.Capacity); -// } -// -// var trav = Traverse.Create(__instance.Prototype); -// trav.Field("Capacity") -// .SetValue(new Quantity(originalCapacity[__instance.Prototype].Value * -// Main.excavatorCapacityMultiplier.Value)); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Excavator capacity: {0}", __instance.Prototype.Capacity.Value); -// -// if (!originalMinedThicknessByDistance.ContainsKey(__instance.Prototype)) { -// originalMinedThicknessByDistance.Add(__instance.Prototype, -// trav.Field("MinedThicknessByDistance").GetValue>()); -// } -// -// trav.Field("MinedThicknessByDistance") -// .SetValue(originalMinedThicknessByDistance[__instance.Prototype] -// .SelectMany(t => Enumerable.Repeat(t, Main.excavatorMiningAreaMultiplier.Value)) -// .Select(t => -// new ThicknessTilesF((int)(t.Value.ToFloat() * Main.excavatorMiningCapacityMultiplier.Value))) -// .ToImmutableArray()); -// if (Main.debugMode.Value) -// originalMinedThicknessByDistance[__instance.Prototype].ForEach(t => Console.WriteLine(t.Value)); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Excavator mined thickness: {0}", -// __instance.Prototype.MinedThicknessByDistance); -// -// if (!originalMaxMiningDistance.ContainsKey(__instance.Prototype)) { -// originalMaxMiningDistance.Add(__instance.Prototype, -// trav.Field("MaxMiningDistance").GetValue()); -// } -// -// var value = originalMaxMiningDistance[__instance.Prototype]; -// var newValueMiningDistance = new RelTile1i((int)(value.Value * Main.excavatorMaxReachMultiplier.Value)); -// trav.Field("MaxMiningDistance") -// .SetValue(newValueMiningDistance); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Excavator max mining distance: {0}", -// __instance.Prototype.MaxMiningDistance); -// -// var trav2 = Traverse.Create(__instance.Prototype.MineTimings); -// if (!originalMineTileIterations.ContainsKey(__instance.Prototype.MineTimings)) { -// originalMineTileIterations.Add(__instance.Prototype.MineTimings, -// trav2.Field("MineTileIterations").GetValue()); -// } -// -// var newValue = (int)(originalMineTileIterations[__instance.Prototype.MineTimings] * -// Main.excavatorMineTileIterationsMultiplier.Value); -// trav2.Field("MineTileIterations").SetValue(newValue); -// trav2.Field("PrepareToMineDuration").SetValue(new Duration(1)); -// trav2.Field("MineDuration").SetValue(new Duration(1)); -// trav2.Field("PrepareToDumpDuration").SetValue(new Duration(1)); -// trav2.Field("DumpDuration").SetValue(new Duration(1)); -// if (Main.debugMode.Value) -// Console.WriteLine("IndustrialCyka: Excavator mine tile iterations 2: {0}", -// trav2.Field("MineTileIterations").GetValue()); -// } -// } -} \ No newline at end of file +}