mirror of
https://github.com/soarqin/DSP_Mods.git
synced 2025-12-08 23:33:33 +08:00
move some functions into MechaDroneTweaks
This commit is contained in:
@@ -58,17 +58,25 @@ public class MechaDronesTweaksPlugin : BaseUnityPlugin
|
||||
MechaDronesTweaks.EnergyMultiplier,
|
||||
new ConfigDescription("Energy consumption multiplier for mecha drones",
|
||||
new AcceptableValueRange<float>(0f, 1f))).Value;
|
||||
MechaDronesTweaks.removeBuildRangeLimit = Config.Bind("MechaBuild", "RemoveBuildRangeLimit",
|
||||
MechaDronesTweaks.removeBuildRangeLimit,
|
||||
MechaDronesTweaks.RemoveBuildRangeLimit = Config.Bind("MechaBuild", "RemoveBuildRangeLimit",
|
||||
MechaDronesTweaks.RemoveBuildRangeLimit,
|
||||
"Remove limit for build range and maximum count of drag building belts/buildings\nNote: this does not affect range limit for mecha drones' action")
|
||||
.Value;
|
||||
MechaDronesTweaks.largerAreaForUpgradeAndDismantle = Config.Bind("MechaBuild",
|
||||
"LargerAreaForUpgradeAndDismantle", MechaDronesTweaks.largerAreaForUpgradeAndDismantle,
|
||||
MechaDronesTweaks.LargerAreaForUpgradeAndDismantle = Config.Bind("MechaBuild",
|
||||
"LargerAreaForUpgradeAndDismantle", MechaDronesTweaks.LargerAreaForUpgradeAndDismantle,
|
||||
"Increase maximum area size for upgrade and dismantle to 31x31 (from 11x11)").Value;
|
||||
MechaDronesTweaks.largerAreaForTerraform = Config.Bind("MechaBuild", "LargerAreaForTerraform",
|
||||
MechaDronesTweaks.largerAreaForTerraform,
|
||||
MechaDronesTweaks.LargerAreaForTerraform = Config.Bind("MechaBuild", "LargerAreaForTerraform",
|
||||
MechaDronesTweaks.LargerAreaForTerraform,
|
||||
"Increase maximum area size for terraform to 30x30 (from 10x10)\nNote: this may impact game performance while using large area")
|
||||
.Value;
|
||||
MechaDronesTweaks.EnhancedMechaForgeCountControl = Config.Bind("", "EnhancedMechaForgeCountControl",
|
||||
MechaDronesTweaks.EnhancedMechaForgeCountControl,
|
||||
"Enhanced count control for hand-make, increases maximum of count to 1000, and you can hold Ctrl/Shift/Alt to change the count rapidly")
|
||||
.Value;
|
||||
MechaDronesTweaks.InventoryStackMultiplier = Config.Bind("Storage", "InventoryStackMultiplier",
|
||||
MechaDronesTweaks.InventoryStackMultiplier,
|
||||
"Stack count multiplier for inventory items, this also affects stack count for storage boxes")
|
||||
.Value;
|
||||
|
||||
_harmony.PatchAll(typeof(MechaDronesTweaks));
|
||||
}
|
||||
@@ -82,9 +90,11 @@ public static class MechaDronesTweaks
|
||||
public static float FixedSpeed = 300f;
|
||||
public static float SpeedMultiplier = 4f;
|
||||
public static float EnergyMultiplier = 0.1f;
|
||||
public static bool removeBuildRangeLimit = true;
|
||||
public static bool largerAreaForUpgradeAndDismantle = true;
|
||||
public static bool largerAreaForTerraform = true;
|
||||
public static bool RemoveBuildRangeLimit = true;
|
||||
public static bool LargerAreaForUpgradeAndDismantle = true;
|
||||
public static bool LargerAreaForTerraform = true;
|
||||
public static bool EnhancedMechaForgeCountControl = true;
|
||||
public static int InventoryStackMultiplier = 1;
|
||||
|
||||
[HarmonyTranspiler, HarmonyPatch(typeof(UITechTree), "RefreshDataValueText")]
|
||||
private static IEnumerable<CodeInstruction> UITechTreeRefreshDataValueText_Transpiler(
|
||||
@@ -276,7 +286,7 @@ public static class MechaDronesTweaks
|
||||
private static IEnumerable<CodeInstruction> BuildTools_CursorSizePatch_Transpiler(
|
||||
IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
if (!largerAreaForUpgradeAndDismantle)
|
||||
if (!LargerAreaForUpgradeAndDismantle)
|
||||
{
|
||||
foreach (var instr in instructions)
|
||||
{
|
||||
@@ -303,7 +313,7 @@ public static class MechaDronesTweaks
|
||||
private static IEnumerable<CodeInstruction> BuildTool_Reform_Constructor_Transpiler(
|
||||
IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
if (!largerAreaForTerraform)
|
||||
if (!LargerAreaForTerraform)
|
||||
{
|
||||
foreach (var instr in instructions)
|
||||
{
|
||||
@@ -330,7 +340,7 @@ public static class MechaDronesTweaks
|
||||
private static IEnumerable<CodeInstruction> BuildTool_Reform_ReformAction_Transpiler(
|
||||
IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
if (!largerAreaForTerraform)
|
||||
if (!LargerAreaForTerraform)
|
||||
{
|
||||
foreach (var instr in instructions)
|
||||
{
|
||||
@@ -365,7 +375,7 @@ public static class MechaDronesTweaks
|
||||
private static IEnumerable<CodeInstruction> ConnGizmoGraph_Constructor_Transpiler(
|
||||
IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
if (!removeBuildRangeLimit)
|
||||
if (!RemoveBuildRangeLimit)
|
||||
{
|
||||
foreach (var instr in instructions)
|
||||
{
|
||||
@@ -392,7 +402,7 @@ public static class MechaDronesTweaks
|
||||
private static IEnumerable<CodeInstruction> ConnGizmoGraph_SetPointCount_Transpiler(
|
||||
IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
if (!removeBuildRangeLimit)
|
||||
if (!RemoveBuildRangeLimit)
|
||||
{
|
||||
foreach (var instr in instructions)
|
||||
{
|
||||
@@ -419,7 +429,7 @@ public static class MechaDronesTweaks
|
||||
private static IEnumerable<CodeInstruction> BuildTool_Path__OnInit_Transpiler(
|
||||
IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
if (!removeBuildRangeLimit)
|
||||
if (!RemoveBuildRangeLimit)
|
||||
{
|
||||
foreach (var instr in instructions)
|
||||
{
|
||||
@@ -444,7 +454,7 @@ public static class MechaDronesTweaks
|
||||
private static IEnumerable<CodeInstruction> BuildTool_Click__OnInit_Transpiler(
|
||||
IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
if (!removeBuildRangeLimit)
|
||||
if (!RemoveBuildRangeLimit)
|
||||
{
|
||||
foreach (var instr in instructions)
|
||||
{
|
||||
@@ -480,7 +490,7 @@ public static class MechaDronesTweaks
|
||||
private static IEnumerable<CodeInstruction> BuildAreaLimitRemoval_Transpiler(
|
||||
IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
if (!removeBuildRangeLimit)
|
||||
if (!RemoveBuildRangeLimit)
|
||||
{
|
||||
foreach (var instr in instructions)
|
||||
{
|
||||
@@ -567,4 +577,98 @@ public static class MechaDronesTweaks
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyTranspiler]
|
||||
[HarmonyPatch(typeof(UIReplicatorWindow), "OnOkButtonClick")]
|
||||
private static IEnumerable<CodeInstruction> UIReplicatorWindow_OnOkButtonClick_Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
|
||||
{
|
||||
if (!EnhancedMechaForgeCountControl) return instructions;
|
||||
var matcher = new CodeMatcher(instructions, generator);
|
||||
matcher.MatchForward(false,
|
||||
new CodeMatch(OpCodes.Ldc_I4_S, 10)
|
||||
).Set(OpCodes.Ldc_I4, 1000);
|
||||
return matcher.InstructionEnumeration();
|
||||
}
|
||||
|
||||
[HarmonyTranspiler]
|
||||
[HarmonyPatch(typeof(UIReplicatorWindow), "OnPlusButtonClick")]
|
||||
[HarmonyPatch(typeof(UIReplicatorWindow), "OnMinusButtonClick")]
|
||||
private static IEnumerable<CodeInstruction> UIReplicatorWindow_OnPlusButtonClick_Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
|
||||
{
|
||||
if (!EnhancedMechaForgeCountControl) return instructions;
|
||||
var label1 = generator.DefineLabel();
|
||||
var label2 = generator.DefineLabel();
|
||||
var label3 = generator.DefineLabel();
|
||||
var label4 = generator.DefineLabel();
|
||||
var matcher = new CodeMatcher(instructions, generator);
|
||||
matcher.MatchForward(false,
|
||||
new CodeMatch(OpCodes.Ldloc_0),
|
||||
new CodeMatch(OpCodes.Ldc_I4_1),
|
||||
new CodeMatch(o => o.opcode == OpCodes.Add || o.opcode == OpCodes.Sub)
|
||||
).Advance(1).RemoveInstruction().InsertAndAdvance(
|
||||
new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(VFInput), "control")),
|
||||
new CodeInstruction(OpCodes.Brfalse_S, label1),
|
||||
new CodeInstruction(OpCodes.Ldc_I4_S, 10),
|
||||
new CodeInstruction(OpCodes.Br_S, label4),
|
||||
new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(VFInput), "shift")).WithLabels(label1),
|
||||
new CodeInstruction(OpCodes.Brfalse_S, label2),
|
||||
new CodeInstruction(OpCodes.Ldc_I4_S, 100),
|
||||
new CodeInstruction(OpCodes.Br_S, label4),
|
||||
new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(VFInput), "alt")).WithLabels(label2),
|
||||
new CodeInstruction(OpCodes.Brfalse_S, label3),
|
||||
new CodeInstruction(OpCodes.Ldc_I4, 1000),
|
||||
new CodeInstruction(OpCodes.Br_S, label4),
|
||||
new CodeInstruction(OpCodes.Ldc_I4_1).WithLabels(label3)
|
||||
).Labels.Add(label4);
|
||||
return matcher.InstructionEnumeration();
|
||||
}
|
||||
|
||||
[HarmonyPrefix, HarmonyPatch(typeof(StorageComponent), "LoadStatic")]
|
||||
private static bool StorageComponent_LoadStatic_Prefix()
|
||||
{
|
||||
if (StorageComponent.staticLoaded) return false;
|
||||
if (InventoryStackMultiplier <= 1) return true;
|
||||
foreach (var proto in LDB.items.dataArray)
|
||||
{
|
||||
proto.StackSize *= InventoryStackMultiplier;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
[HarmonyTranspiler]
|
||||
[HarmonyPatch(typeof(Mecha), nameof(Mecha.SetForNewGame))]
|
||||
private static IEnumerable<CodeInstruction> Mecha_SetForNewGame_Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
|
||||
{
|
||||
if (InventoryStackMultiplier <= 1) return instructions;
|
||||
var matcher = new CodeMatcher(instructions, generator);
|
||||
matcher.MatchForward(false,
|
||||
new CodeMatch(OpCodes.Ldc_I4, 1210),
|
||||
new CodeMatch(OpCodes.Ldc_I4_S, 20)
|
||||
).Advance(1).Set(OpCodes.Ldc_I4_S, 20 * InventoryStackMultiplier);
|
||||
return matcher.InstructionEnumeration();
|
||||
}
|
||||
|
||||
[HarmonyPostfix, HarmonyPatch(typeof(StorageComponent), "Import")]
|
||||
private static void StorageComponent_Import_Postfix(StorageComponent __instance)
|
||||
{
|
||||
if (InventoryStackMultiplier <= 1) return;
|
||||
var size = __instance.size;
|
||||
if (size <= 0) return;
|
||||
if (__instance.type == EStorageType.Filtered)
|
||||
{
|
||||
if (__instance.grids[0].itemId == 1210)
|
||||
{
|
||||
__instance.grids[0].stackSize = 20 * InventoryStackMultiplier;
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (var i = 0; i < size; i++)
|
||||
{
|
||||
var itemId = __instance.grids[i].itemId;
|
||||
if (itemId != 0)
|
||||
{
|
||||
__instance.grids[i].stackSize = StorageComponent.itemStackCount[itemId];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user