diff --git a/Projects/TerraTech/TerraTech/Class1.cs b/Projects/TerraTech/TerraTech/Class1.cs index 116f030..a92e5c6 100644 --- a/Projects/TerraTech/TerraTech/Class1.cs +++ b/Projects/TerraTech/TerraTech/Class1.cs @@ -19,31 +19,37 @@ namespace TerraTech { private const string pluginName = "CykaMod"; private const string pluginVersion = "1.0.0"; - public static ConfigEntry xpMultiplier; - public static ConfigEntry moneyMultiplier; + public static ConfigEntry xpMultiplier; + public static ConfigEntry moneyMultiplier; public static ConfigEntry energyGenMultiplier; - public static ConfigEntry magnetStrenghtMultiplier; - public static ConfigEntry magnetRadiusMultiplier; - public static ConfigEntry allProjectilesHoming; + public static ConfigEntry heartbeatIntervalMultiplier; public static ConfigEntry shootingSpeedMultiplier; public static ConfigEntry muzzleVelocityMultiplier; - public static ConfigEntry heartbeatIntervalMultiplier; + public static ConfigEntry allProjectilesHoming; + public static ConfigEntry magnetStrenghtMultiplier; + public static ConfigEntry magnetRadiusMultiplier; + public static ConfigEntry beamStrenghtMultiplier; + public static ConfigEntry beamRadiusMultiplier; public void Awake() { - xpMultiplier = Config.Bind("General", "XP Multiplier", 1, new ConfigDescription("XP Multiplier", new AcceptableValueRange(1, 32))); - moneyMultiplier = Config.Bind("General", "Money Multiplier", 1, new ConfigDescription("Money Multiplier", new AcceptableValueRange(1, 32))); + xpMultiplier = Config.Bind("General", "XP Multiplier", 1f, new ConfigDescription("XP Multiplier", new AcceptableValueRange(1f, 32f))); + moneyMultiplier = Config.Bind("General", "Money Multiplier", 1f, new ConfigDescription("Money Multiplier", new AcceptableValueRange(1f, 32f))); energyGenMultiplier = Config.Bind("General", "Energy Generation Multiplier", 1f, new ConfigDescription("Energy Generation Multiplier", new AcceptableValueRange(1f, 64f))); + heartbeatIntervalMultiplier = Config.Bind("General", "Heartbeat Interval Multiplier", 1f, + new ConfigDescription("Heartbeat Interval Multiplier", new AcceptableValueRange(0.1f, 2f))); shootingSpeedMultiplier = Config.Bind("General", "Shooting Speed Multiplier", 1f, new ConfigDescription("Shooting Speed Multiplier", new AcceptableValueRange(0.5f, 8f))); + muzzleVelocityMultiplier = Config.Bind("General", "Muzzle Velocity Multiplier", 1f, + new ConfigDescription("Muzzle Velocity Multiplier", new AcceptableValueRange(1f, 32f))); magnetStrenghtMultiplier = Config.Bind("General", "Magnet Strength Multiplier", 1f, new ConfigDescription("Magnet Strength Multiplier", new AcceptableValueRange(1f, 16f))); magnetRadiusMultiplier = Config.Bind("General", "Magnet Radius Multiplier", 1f, new ConfigDescription("Magnet Radius Multiplier", new AcceptableValueRange(1f, 16f))); - muzzleVelocityMultiplier = Config.Bind("General", "Muzzle Velocity Multiplier", 1f, - new ConfigDescription("Muzzle Velocity Multiplier", new AcceptableValueRange(1f, 32f))); - heartbeatIntervalMultiplier = Config.Bind("General", "Heartbeat Interval Multiplier", 1f, - new ConfigDescription("Heartbeat Interval Multiplier", new AcceptableValueRange(0.1f, 2f))); + beamStrenghtMultiplier = Config.Bind("General", "Beam Strength Multiplier", 1f, + new ConfigDescription("Beam Strength Multiplier", new AcceptableValueRange(1f, 16f))); + beamRadiusMultiplier = Config.Bind("General", "Beam Radius Multiplier", 1f, + new ConfigDescription("Beam Radius Multiplier", new AcceptableValueRange(1f, 16f))); allProjectilesHoming = Config.Bind("General", "Make All Projectiles Home", false); @@ -65,12 +71,12 @@ namespace TerraTech { public class Patches { [HarmonyPatch(typeof(ManLicenses), "AddXP")] static void XPMulti(FactionSubTypes corporation, ref int xp, bool showUI = true) { - xp *= Main.xpMultiplier.Value; + xp = (int)(xp * Main.xpMultiplier.Value); } [HarmonyPatch(typeof(ManPlayer), "AddMoney")] static void MoneyMulti(ref int amount) { - amount *= Main.moneyMultiplier.Value; + amount = (int)(amount * Main.moneyMultiplier.Value); } [HarmonyPatch(typeof(TechHolders), "SetHeartbeatInterval")] @@ -219,33 +225,33 @@ namespace TerraTech { } } - static void DoPatchSingle(ModuleItemHolderMagnet moduleEnergy) { + static void DoPatchSingle(ModuleItemHolderMagnet moduleItemHolderMagnet) { // Console.WriteLine("Patching " + moduleEnergy.name); // Console.WriteLine("Old value " + GetValue(moduleEnergy)); - SetStrength(moduleEnergy, GetStrength(moduleEnergy) * Main.magnetStrenghtMultiplier.Value); - SetRadius(moduleEnergy, GetRadius(moduleEnergy) * Main.magnetRadiusMultiplier.Value); + SetStrength(moduleItemHolderMagnet, GetStrength(moduleItemHolderMagnet) * Main.magnetStrenghtMultiplier.Value); + SetRadius(moduleItemHolderMagnet, GetRadius(moduleItemHolderMagnet) * Main.magnetRadiusMultiplier.Value); // Console.WriteLine("New value " + GetValue(moduleEnergy)); } - static void DoRestoreSingle(ModuleItemHolderMagnet moduleEnergy) { - if (strenghts.ContainsKey(moduleEnergy)) { - SetStrength(moduleEnergy, strenghts[moduleEnergy]); + static void DoRestoreSingle(ModuleItemHolderMagnet moduleItemHolderMagnet) { + if (strenghts.ContainsKey(moduleItemHolderMagnet)) { + SetStrength(moduleItemHolderMagnet, strenghts[moduleItemHolderMagnet]); } - if (radii.ContainsKey(moduleEnergy)) { - SetRadius(moduleEnergy, radii[moduleEnergy]); + if (radii.ContainsKey(moduleItemHolderMagnet)) { + SetRadius(moduleItemHolderMagnet, radii[moduleItemHolderMagnet]); } } - private static float GetStrength(ModuleItemHolderMagnet moduleEnergy) { - return Traverse.Create(moduleEnergy).Field("m_Strength").GetValue() as float? ?? 0f; + private static float GetStrength(ModuleItemHolderMagnet moduleItemHolderMagnet) { + return Traverse.Create(moduleItemHolderMagnet).Field("m_Strength").GetValue() as float? ?? 0f; } - private static void SetStrength(ModuleItemHolderMagnet moduleEnergy, float value) { - Traverse.Create(moduleEnergy).Field("m_Strength").SetValue(value); + private static void SetStrength(ModuleItemHolderMagnet moduleItemHolderMagnet, float value) { + Traverse.Create(moduleItemHolderMagnet).Field("m_Strength").SetValue(value); } - private static float GetRadius(ModuleItemHolderMagnet moduleEnergy) { - ModuleItemPickup moduleItemPickup = Traverse.Create(moduleEnergy).Field("m_Pickup").GetValue() as ModuleItemPickup; + private static float GetRadius(ModuleItemHolderMagnet moduleItemHolderMagnet) { + ModuleItemPickup moduleItemPickup = Traverse.Create(moduleItemHolderMagnet).Field("m_Pickup").GetValue() as ModuleItemPickup; if (moduleItemPickup) { float radius = Traverse.Create(moduleItemPickup).Field("m_PickupRange").GetValue() as float? ?? 0f; return radius; @@ -253,8 +259,82 @@ namespace TerraTech { return 0f; } - private static void SetRadius(ModuleItemHolderMagnet moduleEnergy, float value) { - ModuleItemPickup moduleItemPickup = Traverse.Create(moduleEnergy).Field("m_Pickup").GetValue() as ModuleItemPickup; + private static void SetRadius(ModuleItemHolderMagnet moduleItemHolderMagnet, float value) { + ModuleItemPickup moduleItemPickup = Traverse.Create(moduleItemHolderMagnet).Field("m_Pickup").GetValue() as ModuleItemPickup; + if (moduleItemPickup) { + Traverse.Create(moduleItemPickup).Field("m_PickupRange").SetValue(value); + } + } + } + + [HarmonyPatch] + public class BeamPropertiesManager { + private static Dictionary strenghts = new Dictionary(); + private static Dictionary radii = new Dictionary(); + + [HarmonyPostfix] + [HarmonyPatch(typeof(ModuleItemHolderBeam), "OnAttached")] + static void PostfixCreate(ModuleItemHolderBeam __instance) { + if (!strenghts.ContainsKey(__instance)) { + strenghts.Add(__instance, GetStrength(__instance)); + radii.Add(__instance, GetRadius(__instance)); + DoPatchSingle(__instance); + } + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(ModuleItemHolderBeam), "OnDetaching")] + static void PostfixDestroy(ModuleItemHolderBeam __instance) { + DoRestoreSingle(__instance); + strenghts.Remove(__instance); + radii.Remove(__instance); + } + + public static void DoPatch() { + // Console.WriteLine("Modifying " + generators.Count + " generators"); + // Console.WriteLine("Should patch: " + ShouldPatch()); + foreach (KeyValuePair keyValuePair in strenghts) { + DoRestoreSingle(keyValuePair.Key); + DoPatchSingle(keyValuePair.Key); + } + } + + static void DoPatchSingle(ModuleItemHolderBeam moduleItemHolderBeam) { + // Console.WriteLine("Patching " + moduleEnergy.name); + // Console.WriteLine("Old value " + GetValue(moduleEnergy)); + SetStrength(moduleItemHolderBeam, GetStrength(moduleItemHolderBeam) * Main.beamStrenghtMultiplier.Value); + SetRadius(moduleItemHolderBeam, GetRadius(moduleItemHolderBeam) * Main.beamRadiusMultiplier.Value); + // Console.WriteLine("New value " + GetValue(moduleEnergy)); + } + + static void DoRestoreSingle(ModuleItemHolderBeam moduleItemHolderBeam) { + if (strenghts.ContainsKey(moduleItemHolderBeam)) { + SetStrength(moduleItemHolderBeam, strenghts[moduleItemHolderBeam]); + } + if (radii.ContainsKey(moduleItemHolderBeam)) { + SetRadius(moduleItemHolderBeam, radii[moduleItemHolderBeam]); + } + } + + private static float GetStrength(ModuleItemHolderBeam moduleItemHolderBeam) { + return Traverse.Create(moduleItemHolderBeam).Field("m_Strength").GetValue() as float? ?? 0f; + } + + private static void SetStrength(ModuleItemHolderBeam moduleItemHolderBeam, float value) { + Traverse.Create(moduleItemHolderBeam).Field("m_Strength").SetValue(value); + } + + private static float GetRadius(ModuleItemHolderBeam moduleItemHolderBeam) { + ModuleItemPickup moduleItemPickup = Traverse.Create(moduleItemHolderBeam).Field("m_Pickup").GetValue() as ModuleItemPickup; + if (moduleItemPickup) { + float radius = Traverse.Create(moduleItemPickup).Field("m_PickupRange").GetValue() as float? ?? 0f; + return radius; + } + return 0f; + } + + private static void SetRadius(ModuleItemHolderBeam moduleItemHolderBeam, float value) { + ModuleItemPickup moduleItemPickup = Traverse.Create(moduleItemHolderBeam).Field("m_Pickup").GetValue() as ModuleItemPickup; if (moduleItemPickup) { Traverse.Create(moduleItemPickup).Field("m_PickupRange").SetValue(value); } diff --git a/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.dll b/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.dll index 43e7169..53cb99a 100644 Binary files a/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.dll and b/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.dll differ diff --git a/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.pdb b/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.pdb index 1279ef5..436af2a 100644 Binary files a/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.pdb and b/Projects/TerraTech/TerraTech/bin/Debug/TerraTech.pdb differ diff --git a/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.dll b/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.dll index 43e7169..53cb99a 100644 Binary files a/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.dll and b/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.dll differ diff --git a/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.pdb b/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.pdb index 1279ef5..436af2a 100644 Binary files a/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.pdb and b/Projects/TerraTech/TerraTech/obj/Debug/TerraTech.pdb differ