Add buffer transfer rate patch

This commit is contained in:
2024-04-18 00:05:59 +02:00
parent 6e3690520c
commit 093fc57244
4 changed files with 157 additions and 44 deletions

View File

@@ -14,6 +14,11 @@
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CMafi_002Edll/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CMafi_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CMafi_002EModsAuthoringSupport_002Edll/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CMafi_002EModsAuthoringSupport_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CMafi_002EUnity_002Edll/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CMafi_002EUnity_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CSirenix_002EOdinInspector_002EAttributes_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CSirenix_002EOdinInspector_002ECompatibilityLayer_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CSirenix_002ESerialization_002EConfig_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CSirenix_002ESerialization_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CSirenix_002EUtilities_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CUnityEngine_002ECoreModule_002Edll/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CUnityEngine_002ECoreModule_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CUnityEngine_002Edll/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CSeafile_005CProjects_002DRider_005CRiderProjects_005CBepinex_005CProjects_005CCaptainOfIndustry_005Clibs_005CUnityEngine_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer /&gt;</s:String> <s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer /&gt;</s:String>

View File

@@ -64,6 +64,21 @@
<Reference Include="Mafi.Unity"> <Reference Include="Mafi.Unity">
<HintPath>..\libs\Mafi.Unity.dll</HintPath> <HintPath>..\libs\Mafi.Unity.dll</HintPath>
</Reference> </Reference>
<Reference Include="Sirenix.OdinInspector.Attributes">
<HintPath>..\libs\Sirenix.OdinInspector.Attributes.dll</HintPath>
</Reference>
<Reference Include="Sirenix.OdinInspector.CompatibilityLayer">
<HintPath>..\libs\Sirenix.OdinInspector.CompatibilityLayer.dll</HintPath>
</Reference>
<Reference Include="Sirenix.Serialization">
<HintPath>..\libs\Sirenix.Serialization.dll</HintPath>
</Reference>
<Reference Include="Sirenix.Serialization.Config">
<HintPath>..\libs\Sirenix.Serialization.Config.dll</HintPath>
</Reference>
<Reference Include="Sirenix.Utilities">
<HintPath>..\libs\Sirenix.Utilities.dll</HintPath>
</Reference>
<Reference Include="UnityEngine"> <Reference Include="UnityEngine">
<HintPath>..\libs\UnityEngine.dll</HintPath> <HintPath>..\libs\UnityEngine.dll</HintPath>
</Reference> </Reference>

View File

@@ -18,17 +18,19 @@ namespace CaptainOfIndustry {
public static ConfigEntry<int> truckCapacityMultiplier; public static ConfigEntry<int> truckCapacityMultiplier;
public static ConfigEntry<int> cargoShipCapacityMultiplier; public static ConfigEntry<int> cargoShipCapacityMultiplier;
public static ConfigEntry<float> excavatorMiningAreaMultiplier; public static ConfigEntry<float> excavatorMiningAreaMultiplier;
public static ConfigEntry<float> vehicleSpeedMultiplier; public static ConfigEntry<float> bufferCapacityMultiplier;
public static ConfigEntry<float> unityGenerationMultiplier; public static ConfigEntry<float> unityGenerationMultiplier;
public static ConfigEntry<float> depotTransferSpeedMultiplier;
public void Awake() { public void Awake() {
excavatorCapacityMultiplier = Config.Bind("General", "Excavator Capacity Multiplier", 1, new ConfigDescription("Excavator Capacity Multiplier")); excavatorCapacityMultiplier = Config.Bind("General", "Excavator Capacity Multiplier", 1, new ConfigDescription("Excavator Capacity Multiplier"));
truckCapacityMultiplier = Config.Bind("General", "Truck Capacity Multiplier", 1, new ConfigDescription("Truck Capacity Multiplier")); truckCapacityMultiplier = Config.Bind("General", "Truck Capacity Multiplier", 1, new ConfigDescription("Truck Capacity Multiplier"));
cargoShipCapacityMultiplier = Config.Bind("General", "Cargo Ship Capacity Multiplier", 1, new ConfigDescription("Cargo Ship Capacity Multiplier")); cargoShipCapacityMultiplier = Config.Bind("General", "Cargo Ship Capacity Multiplier", 1, new ConfigDescription("Cargo Ship Capacity Multiplier"));
excavatorMiningAreaMultiplier = Config.Bind("General", "Excavator Mining Area Multiplier", 1f, new ConfigDescription("Excavator Mining Area Multiplier")); excavatorMiningAreaMultiplier = Config.Bind("General", "Excavator Mining Area Multiplier", 1f, new ConfigDescription("Excavator Mining Area Multiplier"));
vehicleSpeedMultiplier = Config.Bind("General", "Vehicle Speed Multiplier", 1f, new ConfigDescription("Vehicle Speed Multiplier")); bufferCapacityMultiplier = Config.Bind("General", "Buffer Capacity Multiplier", 1f, new ConfigDescription("Buffer Capacity Multiplier"));
storageCapacityMultiplier = Config.Bind("General", "Storage Capacity Multiplier", 1f, new ConfigDescription("Storage Capacity Multiplier")); storageCapacityMultiplier = Config.Bind("General", "Storage Capacity Multiplier", 1f, new ConfigDescription("Storage Capacity Multiplier"));
unityGenerationMultiplier = Config.Bind("General", "Unity Generation Multiplier", 1f, new ConfigDescription("Unity Generation Multiplier")); unityGenerationMultiplier = Config.Bind("General", "Unity Generation Multiplier", 1f, new ConfigDescription("Unity Generation Multiplier"));
depotTransferSpeedMultiplier = Config.Bind("General", "Depot Transfer Speed Multiplier", 1f, new ConfigDescription("Depot Transfer Speed Multiplier"));
// shootingSpeedMultiplier.SettingChanged += (sender, args) => WeaponPropertiesManager.DoPatch(); // shootingSpeedMultiplier.SettingChanged += (sender, args) => WeaponPropertiesManager.DoPatch();
// energyGenMultiplier.SettingChanged += (sender, args) => GeneratorPropertiesManager.DoPatch(); // energyGenMultiplier.SettingChanged += (sender, args) => GeneratorPropertiesManager.DoPatch();

View File

@@ -1,13 +1,18 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Reflection; using System.Reflection;
using System.Reflection.Emit;
using HarmonyLib; using HarmonyLib;
using Mafi; using Mafi;
using Mafi.Core.Buildings.Cargo;
using Mafi.Core.Buildings.Cargo.Modules;
using Mafi.Core.Buildings.Cargo.Ships.Modules; using Mafi.Core.Buildings.Cargo.Ships.Modules;
using Mafi.Core.Buildings.Storages; using Mafi.Core.Buildings.Storages;
using Mafi.Core.Entities.Dynamic; 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.Map; using Mafi.Core.Map;
using Mafi.Core.Population; using Mafi.Core.Population;
using Mafi.Core.Products; using Mafi.Core.Products;
@@ -16,30 +21,28 @@ using Mafi.Core.Prototypes;
namespace CaptainOfIndustry { namespace CaptainOfIndustry {
[HarmonyPatch] [HarmonyPatch]
public class Patches { public class Patches {
private static Traverse<Fix32> maxForwardsSpeedField;
[HarmonyPrefix] [HarmonyPrefix]
[HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetCapacity")] [HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetCapacity")]
static void excavatorCapacityMultiplier(ref int quantity) { static void excavatorCapacityMultiplier(ref int quantity) {
// Console.WriteLine("IndustrialCyka: Old excavator capacity: {0}", quantity); // Console.WriteLine("IndustrialCyka: Old excavator capacity: {0}", quantity);
quantity *= Main.excavatorCapacityMultiplier.Value; quantity *= Main.excavatorCapacityMultiplier.Value;
Console.WriteLine("IndustrialCyka: Old excavator capacity: {0}", quantity); // Console.WriteLine("IndustrialCyka: Old excavator capacity: {0}", quantity);
} }
[HarmonyPrefix] [HarmonyPrefix]
[HarmonyPatch(typeof(TruckProtoBuilder.TruckProtoBuilderState), "SetCapacity")] [HarmonyPatch(typeof(TruckProtoBuilder.TruckProtoBuilderState), "SetCapacity")]
static void truckCapacityMultiplier(ref int quantity) { static void truckCapacityMultiplier(ref int quantity) {
Console.WriteLine("IndustrialCyka: Old truck capacity: {0}", quantity); // Console.WriteLine("IndustrialCyka: Old truck capacity: {0}", quantity);
quantity *= Main.truckCapacityMultiplier.Value; quantity *= Main.truckCapacityMultiplier.Value;
Console.WriteLine("IndustrialCyka: New truck capacity: {0}", quantity); // Console.WriteLine("IndustrialCyka: New truck capacity: {0}", quantity);
} }
// [HarmonyPrefix] // [HarmonyPrefix]
// [HarmonyPatch(typeof(StorageProtoBuilder.State), "SetCapacity")] // [HarmonyPatch(typeof(StorageProtoBuilder.State), "SetCapacity")]
// static void storageCapacityMultiplier(ref int capacity) { // static void storageCapacityMultiplier(ref int capacity) {
// Console.WriteLine("IndustrialCyka: Old storage capacity: {0}", capacity); // // Console.WriteLine("IndustrialCyka: Old storage capacity: {0}", capacity);
// capacity = (int)(capacity * Main.storageCapacityMultiplier.Value); // capacity = (int)(capacity * Main.storageCapacityMultiplier.Value);
// Console.WriteLine("IndustrialCyka: New storage capacity: {0}", capacity); // // Console.WriteLine("IndustrialCyka: New storage capacity: {0}", capacity);
// } // }
[HarmonyPostfix] [HarmonyPostfix]
@@ -49,18 +52,18 @@ namespace CaptainOfIndustry {
typeof(CargoShipModuleProto.Gfx) typeof(CargoShipModuleProto.Gfx)
})] })]
static void cargoShipCapacityMultiplier(CargoShipModuleProto __instance) { static void cargoShipCapacityMultiplier(CargoShipModuleProto __instance) {
Console.WriteLine("IndustrialCyka: Old ship capacity: {0}", __instance.Capacity.Value); // Console.WriteLine("IndustrialCyka: Old ship capacity: {0}", __instance.Capacity.Value);
__instance.Capacity = new Quantity(__instance.Capacity.Value * Main.cargoShipCapacityMultiplier.Value); __instance.Capacity = new Quantity(__instance.Capacity.Value * Main.cargoShipCapacityMultiplier.Value);
Console.WriteLine("IndustrialCyka: New ship capacity: {0}", __instance.Capacity.Value); // Console.WriteLine("IndustrialCyka: New ship capacity: {0}", __instance.Capacity.Value);
} }
[HarmonyPrefix] [HarmonyPrefix]
[HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetMinedThicknessByDistanceMeters")] [HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetMinedThicknessByDistanceMeters")]
static void excavatorMiningAreaMultiplier(ref float[] thicknessMeters) { static void excavatorMiningAreaMultiplier(ref float[] thicknessMeters) {
for (int i = 0; i < thicknessMeters.Length; i++) { for (int i = 0; i < thicknessMeters.Length; i++) {
Console.WriteLine("IndustrialCyka: Old mining area: {0}", thicknessMeters[i]); // Console.WriteLine("IndustrialCyka: Old mining area: {0}", thicknessMeters[i]);
thicknessMeters[i] *= Main.excavatorMiningAreaMultiplier.Value; thicknessMeters[i] *= Main.excavatorMiningAreaMultiplier.Value;
Console.WriteLine("IndustrialCyka: New mining area: {0}", thicknessMeters[i]); // Console.WriteLine("IndustrialCyka: New mining area: {0}", thicknessMeters[i]);
} }
} }
@@ -68,35 +71,35 @@ namespace CaptainOfIndustry {
// [HarmonyPrefix] // [HarmonyPrefix]
// [HarmonyPatch(typeof(DrivingEntity), "SetSpeedFactor")] // [HarmonyPatch(typeof(DrivingEntity), "SetSpeedFactor")]
// static void vehicleSpeedMultiplier(ref Percent speedFactor) { // static void vehicleSpeedMultiplier(ref Percent speedFactor) {
// Console.WriteLine("IndustrialCyka: Old speed: {0}", speedFactor.ToString()); // // Console.WriteLine("IndustrialCyka: Old speed: {0}", speedFactor.ToString());
// // typeof(Percent) // // typeof(Percent)
// // .GetField("RawValue",BindingFlags.Instance|BindingFlags.NonPublic) // // .GetField("RawValue",BindingFlags.Instance|BindingFlags.NonPublic)
// // .SetValue(speedFactor,speedFactor.ToFloat() / Main.vehicleSpeedMultiplier.Value); // // .SetValue(speedFactor,speedFactor.ToFloat() / Main.vehicleSpeedMultiplier.Value);
// Percent newSpeedFactor = Percent.FromFloat(speedFactor.ToFloat() / Main.vehicleSpeedMultiplier.Value); // Percent newSpeedFactor = Percent.FromFloat(speedFactor.ToFloat() / Main.vehicleSpeedMultiplier.Value);
// speedFactor = newSpeedFactor; // speedFactor = newSpeedFactor;
// Console.WriteLine("IndustrialCyka: New speed: {1}", newSpeedFactor.RawValue.ToString()); // // Console.WriteLine("IndustrialCyka: New speed: {1}", newSpeedFactor.RawValue.ToString());
// } // }
[HarmonyPostfix] // [HarmonyPostfix]
[HarmonyPatch(typeof(SmoothDriver), "SetSpeedFactor")] // [HarmonyPatch(typeof(SmoothDriver), "SetSpeedFactor")]
static void vehicleSpeedMultiplier(SmoothDriver __instance) { // static void vehicleSpeedMultiplier(SmoothDriver __instance) {
Fix32 speedMulti = Fix32.FromFloat(Main.vehicleSpeedMultiplier.Value); // Fix32 speedMulti = Fix32.FromFloat(Main.vehicleSpeedMultiplier.Value);
//
Traverse traverse = Traverse.Create(__instance); // Traverse traverse = Traverse.Create(__instance);
Traverse maxForwardsSpeedField = traverse.Field("m_maxForwardsSpeed"); // Traverse maxForwardsSpeedField = traverse.Field("m_maxForwardsSpeed");
Traverse maxBackwardsSpeedField = traverse.Field("m_maxBackwardsSpeed"); // Traverse maxBackwardsSpeedField = traverse.Field("m_maxBackwardsSpeed");
Traverse maxAccelerationField = traverse.Field("m_maxAcceleration"); // Traverse maxAccelerationField = traverse.Field("m_maxAcceleration");
//
Console.WriteLine("IndustrialCyka: Old speeds: (F) {0}, (B) {1}, (A) {2}", maxForwardsSpeedField.GetValue(), // // Console.WriteLine("IndustrialCyka: Old speeds: (F) {0}, (B) {1}, (A) {2}", maxForwardsSpeedField.GetValue(),
maxBackwardsSpeedField.GetValue(), maxAccelerationField.GetValue()); // // maxBackwardsSpeedField.GetValue(), maxAccelerationField.GetValue());
//
maxForwardsSpeedField.SetValue((Fix32)maxForwardsSpeedField.GetValue() * speedMulti); // maxForwardsSpeedField.SetValue((Fix32)maxForwardsSpeedField.GetValue() * speedMulti);
maxBackwardsSpeedField.SetValue((Fix32)maxBackwardsSpeedField.GetValue() * speedMulti); // maxBackwardsSpeedField.SetValue((Fix32)maxBackwardsSpeedField.GetValue() * speedMulti);
maxAccelerationField.SetValue((Fix32)maxAccelerationField.GetValue() * speedMulti); // maxAccelerationField.SetValue((Fix32)maxAccelerationField.GetValue() * speedMulti);
//
Console.WriteLine("IndustrialCyka: New speeds: (F) {0}, (B) {1}, (A) {2}", maxForwardsSpeedField.GetValue(), // // Console.WriteLine("IndustrialCyka: New speeds: (F) {0}, (B) {1}, (A) {2}", maxForwardsSpeedField.GetValue(),
maxBackwardsSpeedField.GetValue(), maxAccelerationField.GetValue()); // // maxBackwardsSpeedField.GetValue(), maxAccelerationField.GetValue());
} // }
[HarmonyPostfix] [HarmonyPostfix]
[HarmonyPatch(typeof(StorageBaseProto), MethodType.Constructor, [HarmonyPatch(typeof(StorageBaseProto), MethodType.Constructor,
@@ -112,37 +115,125 @@ namespace CaptainOfIndustry {
typeof(IEnumerable<Tag>) typeof(IEnumerable<Tag>)
})] })]
static void storageCapacityMultiplier(StorageProto __instance) { static void storageCapacityMultiplier(StorageProto __instance) {
Console.WriteLine("IndustrialCyka: Old storage capacity: {0}", __instance.Capacity.Value); // Console.WriteLine("IndustrialCyka: Old storage capacity: {0}", __instance.Capacity.Value);
Console.WriteLine("IndustrialCyka: Old storage transfer limit: {0}", __instance.TransferLimit.Value); // Console.WriteLine("IndustrialCyka: Old storage transfer limit: {0}", __instance.TransferLimit.Value);
Traverse traverse = Traverse.Create(__instance); Traverse traverse = Traverse.Create(__instance);
traverse.Field("Capacity").SetValue(new Quantity((int)(__instance.Capacity.Value * Main.storageCapacityMultiplier.Value))); traverse.Field("Capacity")
.SetValue(new Quantity((int)(__instance.Capacity.Value * Main.storageCapacityMultiplier.Value)));
traverse.Field("TransferLimit").SetValue(new Quantity(10000)); traverse.Field("TransferLimit").SetValue(new Quantity(10000));
traverse.Field("TransferLimitDuration").SetValue(Duration.FromTicks(1)); traverse.Field("TransferLimitDuration").SetValue(Duration.FromTicks(1));
Console.WriteLine("IndustrialCyka: New storage capacity: {0}", __instance.Capacity.Value); // Console.WriteLine("IndustrialCyka: New storage capacity: {0}", __instance.Capacity.Value);
Console.WriteLine("IndustrialCyka: New storage transfer limit: {0}", __instance.TransferLimit.Value); // Console.WriteLine("IndustrialCyka: New storage transfer limit: {0}", __instance.TransferLimit.Value);
} }
[HarmonyPrefix] [HarmonyPrefix]
[HarmonyPatch(typeof(UpointsManager), "GenerateUnity")] [HarmonyPatch(typeof(UpointsManager), "GenerateUnity")]
static void unityGenerationMultiplier(Proto.ID categoryId, ref Upoints generated) { static void unityGenerationMultiplier(Proto.ID categoryId, ref Upoints generated) {
Console.WriteLine("IndustrialCyka: Old generated {0} unity", generated.Value); // Console.WriteLine("IndustrialCyka: Old generated {0} unity", generated.Value);
Fix32 multi = Fix32.FromFloat(Main.unityGenerationMultiplier.Value); Fix32 multi = Fix32.FromFloat(Main.unityGenerationMultiplier.Value);
generated = new Upoints(generated.Value * multi); generated = new Upoints(generated.Value * multi);
Console.WriteLine("IndustrialCyka: New generated {0} unity", generated.Value); // Console.WriteLine("IndustrialCyka: New generated {0} unity", generated.Value);
} }
[HarmonyTranspiler]
[HarmonyPatch(typeof(Machine), "updateWorkOnRecipes")]
static IEnumerable<CodeInstruction> unityBooster(IEnumerable<CodeInstruction> instructions) {
Dictionary<int, OpCode> matchTable = new Dictionary<int, OpCode>();
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<CodeInstruction>(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();
}
// static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
// {
// var found = false;
// foreach (var instruction in instructions)
// {
// if (instruction.StoresField(f_someField))
// {
// yield return new CodeInstruction(OpCodes.Call, m_MyExtraMethod);
// found = true;
// }
// yield return instruction;
// }
// if (found is false)
// ReportError("Cannot find <Stdfld someField> in OriginalType.OriginalMethod");
// }
// Could not make this work either... idk why... Doesn't make sense... // Could not make this work either... idk why... Doesn't make sense...
// [HarmonyPostfix] // [HarmonyPostfix]
// [HarmonyPatch(typeof(SimpleVirtualResource), "MineResourceAt")] // [HarmonyPatch(typeof(SimpleVirtualResource), "MineResourceAt")]
// static void infiniteGroundResources(SimpleVirtualResource __instance) { // static void infiniteGroundResources(SimpleVirtualResource __instance) {
// Console.WriteLine("IndustrialCyka: Patching ground resources (Capacity)"); // // Console.WriteLine("IndustrialCyka: Patching ground resources (Capacity)");
// Traverse traverse = Traverse.Create(__instance); // Traverse traverse = Traverse.Create(__instance);
// Traverse capacityField = traverse.Field("Capacity"); // Traverse capacityField = traverse.Field("Capacity");
// capacityField.SetValue(1000000000); // capacityField.SetValue(1000000000);
// Traverse quantityField = traverse.Field("Quantity"); // Traverse quantityField = traverse.Field("Quantity");
// quantityField.SetValue(1000000000); // quantityField.SetValue(1000000000);
// } // }
[HarmonyPrefix]
[HarmonyPatch(typeof(ProductBuffer), "ForceNewCapacityTo")]
static void bufferCapacityMultiplier(ref Quantity newCapacity) {
if (newCapacity.Value <= 0) {
return;
}
Quantity newNewCapacity = new Quantity((int)(newCapacity.Value * Main.bufferCapacityMultiplier.Value));
newCapacity = newNewCapacity;
}
[HarmonyPostfix]
[HarmonyPatch(typeof(CargoDepotModuleProto), MethodType.Constructor,
new[] {
typeof(CargoDepotModuleProto.ID),
typeof(Proto.Str),
typeof(EntityLayout),
typeof(ProductType),
typeof(Option<CargoDepotModuleProto>),
typeof(Quantity),
typeof(Quantity),
typeof(Duration),
typeof(Electricity),
typeof(bool),
typeof(Percent),
typeof(EntityCosts),
typeof(CargoDepotModuleProto.Gfx),
typeof(IEnumerable<Tag>),
})]
static void depotTransferSpeedMultiplier(CargoDepotModuleProto __instance) {
// Console.WriteLine("IndustrialCyka: Old storage capacity: {0}", __instance.Capacity.Value);
Traverse traverse = Traverse.Create(__instance);
traverse.Field("QuantityPerExchange")
.SetValue(new Quantity((int)(__instance.QuantityPerExchange.Value * Main.depotTransferSpeedMultiplier.Value)));
// Console.WriteLine("IndustrialCyka: New storage capacity: {0}", __instance.Capacity.Value);
}
} }
} }