diff --git a/IRTweaks/IRTweaks/IRTweaks.csproj b/IRTweaks/IRTweaks/IRTweaks.csproj index 25a1e72..675ee92 100644 --- a/IRTweaks/IRTweaks/IRTweaks.csproj +++ b/IRTweaks/IRTweaks/IRTweaks.csproj @@ -144,6 +144,7 @@ + diff --git a/IRTweaks/IRTweaks/ModConfig.cs b/IRTweaks/IRTweaks/ModConfig.cs index 9db150a..9c3bad7 100644 --- a/IRTweaks/IRTweaks/ModConfig.cs +++ b/IRTweaks/IRTweaks/ModConfig.cs @@ -238,6 +238,7 @@ public class FixesFlags public bool DisableLowFundsNotification = true; public bool DisableMPHashCalculation = true; public bool EventRequirementsScopeFix = true; + public bool FactionReputationFixes = true; public bool FactionValueFix = true; public bool MultiTargetStat = true; public bool RandomStartByDifficulty = true; @@ -308,6 +309,7 @@ public void LogConfig() Mod.Log.Info?.Write($" ExplodingBuildingFix: {this.Fixes.ExplodingBuildingFix}"); Mod.Log.Info?.Write($" EventRequirementsScopeFix: {this.Fixes.EventRequirementsScopeFix}"); Mod.Log.Info?.Write($" ExtendedStats: {this.Fixes.ExtendedStats}"); + Mod.Log.Info?.Write($" FactionReputationFixes: {this.Fixes.FactionReputationFixes}"); Mod.Log.Info?.Write($" FlexibleSensorLock: {this.Fixes.FlexibleSensorLock}"); Mod.Log.Info?.Write($" MaxArmorMaxesArmor: {this.Fixes.MaxArmorMaxesArmor}"); Mod.Log.Info?.Write($" MechbayLayout: {this.Fixes.MechbayLayout}"); diff --git a/IRTweaks/IRTweaks/Modules/Misc/CheatDetection.cs b/IRTweaks/IRTweaks/Modules/Misc/CheatDetection.cs index 9888af3..3bc408d 100644 --- a/IRTweaks/IRTweaks/Modules/Misc/CheatDetection.cs +++ b/IRTweaks/IRTweaks/Modules/Misc/CheatDetection.cs @@ -280,21 +280,21 @@ public static class SGBarracksMWDetailPanel_OnPilotReset { static bool Prepare() => Mod.Config.CheatDetection.CheatDetection; - public static void Postfix(SGBarracksMWDetailPanel __instance, Pilot ___tempPilot, Pilot ___curPilot) + public static void Postfix(SGBarracksMWDetailPanel __instance) { var sim = UnityGameInstance.BattleTechGame.Simulation; if (sim == null) return; - if (String.IsNullOrEmpty(___curPilot.GUID)) return; - if (!ModState.PilotCurrentFreeXP.ContainsKey(___curPilot.GUID)) + if (String.IsNullOrEmpty(__instance.curPilot.GUID)) return; + if (!ModState.PilotCurrentFreeXP.ContainsKey(__instance.curPilot.GUID)) { - ModState.PilotCurrentFreeXP.Add(___curPilot.GUID, ___curPilot.UnspentXP); + ModState.PilotCurrentFreeXP.Add(__instance.curPilot.GUID, __instance.curPilot.UnspentXP); Mod.Log.Info?.Write( - $"CHEATDETECTION: {___curPilot.Description.Id}: Added key {___curPilot.GUID} to PilotCurrentXP with UnspentXP {___curPilot.UnspentXP} but should have been done already. At OnPilotReset, Post."); + $"CHEATDETECTION: {__instance.curPilot.Description.Id}: Added key {__instance.curPilot.GUID} to PilotCurrentXP with UnspentXP {__instance.curPilot.UnspentXP} but should have been done already. At OnPilotReset, Post."); } - ModState.PilotCurrentFreeXP[___curPilot.GUID] = ___curPilot.UnspentXP; + ModState.PilotCurrentFreeXP[__instance.curPilot.GUID] = __instance.curPilot.UnspentXP; Mod.Log.Info?.Write( - $"CHEATDETECTION: {___curPilot.Description.Id}: {___curPilot.GUID} Free XP state was {ModState.PilotCurrentFreeXP[___curPilot.GUID]} after changing to basePilot {___curPilot.UnspentXP} at OnPilotReset, Post."); + $"CHEATDETECTION: {__instance.curPilot.Description.Id}: {__instance.curPilot.GUID} Free XP state was {ModState.PilotCurrentFreeXP[__instance.curPilot.GUID]} after changing to basePilot {__instance.curPilot.UnspentXP} at OnPilotReset, Post."); } } @@ -303,8 +303,7 @@ public static class SGBarracksWidget_ReceiveButtonPress { static bool Prepare() => Mod.Config.CheatDetection.CheatDetection; - public static void Postfix(SGBarracksWidget __instance, string button, - SGBarracksMWDetailPanel ___mechWarriorDetails) + public static void Postfix(SGBarracksWidget __instance, string button) { if (button != "Close") return; var sim = UnityGameInstance.BattleTechGame.Simulation; @@ -335,25 +334,23 @@ public static class SGBarracksAdvancementPanel_OnValueClick_Patch { static bool Prepare() => Mod.Config.CheatDetection.CheatDetection; - public static void Prefix(SGBarracksAdvancementPanel __instance, Pilot ___curPilot, Pilot ___basePilot, - List ___gunPips, List ___pilotPips, - List ___gutPips, List ___tacPips, string type, int value) + public static void Prefix(SGBarracksAdvancementPanel __instance, string type, int value) { - if (___curPilot.StatCollection.GetValue(type) > value) + if (__instance.curPilot.StatCollection.GetValue(type) > value) { var sim = UnityGameInstance.BattleTechGame.Simulation; if (sim == null) return; - if (String.IsNullOrEmpty(___curPilot.GUID)) return; - if (!ModState.PilotCurrentFreeXP.ContainsKey(___curPilot.GUID)) + if (String.IsNullOrEmpty(__instance.curPilot.GUID)) return; + if (!ModState.PilotCurrentFreeXP.ContainsKey(__instance.curPilot.GUID)) { - ModState.PilotCurrentFreeXP.Add(___curPilot.GUID, ___curPilot.UnspentXP); + ModState.PilotCurrentFreeXP.Add(__instance.curPilot.GUID, __instance.curPilot.UnspentXP); Mod.Log.Info?.Write( - $"CHEATDETECTION: {___curPilot.Description.Id}: Added key {___curPilot.GUID} to PilotCurrentXP with UnspentXP {___curPilot.UnspentXP} but should have been done already. At SGBarracksAdvancementPanel.OnValueClick, Pre."); + $"CHEATDETECTION: {__instance.curPilot.Description.Id}: Added key {__instance.curPilot.GUID} to PilotCurrentXP with UnspentXP {__instance.curPilot.UnspentXP} but should have been done already. At SGBarracksAdvancementPanel.OnValueClick, Pre."); } - ModState.PilotCurrentFreeXP[___curPilot.GUID] = ___basePilot.UnspentXP; + ModState.PilotCurrentFreeXP[__instance.curPilot.GUID] = __instance.basePilot.UnspentXP; Mod.Log.Info?.Write( - $"CHEATDETECTION: {___curPilot.Description.Id}: {___curPilot.GUID} Free XP state was {ModState.PilotCurrentFreeXP[___curPilot.GUID]} after changing to basePilot {___basePilot.UnspentXP} At SGBarracksAdvancementPanel.OnValueClick, Pre."); + $"CHEATDETECTION: {__instance.curPilot.Description.Id}: {__instance.curPilot.GUID} Free XP state was {ModState.PilotCurrentFreeXP[__instance.curPilot.GUID]} after changing to basePilot {__instance.curPilot.UnspentXP} At SGBarracksAdvancementPanel.OnValueClick, Pre."); } } } diff --git a/IRTweaks/IRTweaks/Modules/Misc/DisableMainMenuButtons.cs b/IRTweaks/IRTweaks/Modules/Misc/DisableMainMenuButtons.cs index a87ad17..e52c958 100644 --- a/IRTweaks/IRTweaks/Modules/Misc/DisableMainMenuButtons.cs +++ b/IRTweaks/IRTweaks/Modules/Misc/DisableMainMenuButtons.cs @@ -11,13 +11,13 @@ public static class MainMenu_Init { static bool Prepare() => Mod.Config.Fixes.DisableCampaign || Mod.Config.Fixes.DisableDebug; - public static void Prefix(HBSRadioSet ___topLevelMenu) { + public static void Prefix(MainMenu __instance) { if (Mod.Config.Fixes.DisableCampaign) { Mod.Log.Info?.Write($"Disabling the campaign button on the main menu."); try { - foreach (HBSButton button in ___topLevelMenu.RadioButtons) + foreach (HBSButton button in __instance.topLevelMenu.RadioButtons) { if (button.gameObject != null && button.gameObject.name == "button-CAMPAIGN") { @@ -33,14 +33,14 @@ public static void Prefix(HBSRadioSet ___topLevelMenu) { } } - public static void Postfix(MainMenu __instance, GameObject[] ___enableInDevelopmentbuildsOnly) + public static void Postfix(MainMenu __instance) { if (Mod.Config.Fixes.DisableDebug) { Mod.Log.Info?.Write($"Disabling the debug buttons in the main menu."); try { - GameObject[] array = ___enableInDevelopmentbuildsOnly; + GameObject[] array = __instance.enableInDevelopmentbuildsOnly; for (int i = 0; i < array.Length; i++) { array[i].SetActive(false); diff --git a/IRTweaks/IRTweaks/Modules/Misc/FactionReputationFixes.cs b/IRTweaks/IRTweaks/Modules/Misc/FactionReputationFixes.cs new file mode 100644 index 0000000..9a37fec --- /dev/null +++ b/IRTweaks/IRTweaks/Modules/Misc/FactionReputationFixes.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BattleTech; +using BattleTech.Save; +using BattleTech.UI; +using Harmony; + +namespace IRTweaks.Modules.Misc +{ + //remove duplicates + [HarmonyPatch(typeof(SimGameState), "AddAllyFaction")] + public static class SimGameState_AddAllyFaction + { + static bool Prepare() => Mod.Config.Fixes.FactionReputationFixes; + + public static void Postfix(SimGameState __instance) + { + var alliedFactions = new List(__instance.AlliedFactions.Distinct()); + __instance.AlliedFactions = alliedFactions.ToList(); + } + } + + //update stat validators to not be dumb + [HarmonyPatch(typeof(SimGameState), "RemoveAllyFaction")] + public static class SimGameState_RemoveAllyFaction + { + static bool Prepare() => Mod.Config.Fixes.FactionReputationFixes; + + public static void Postfix(SimGameState __instance, FactionValue faction) + { + var alliedFactions = new List(__instance.AlliedFactions.Distinct()); + __instance.AlliedFactions = alliedFactions.ToList(); + __instance.AlliedFactions.Remove(faction.Name); + + FactionDef factionDef = __instance.GetFactionDef(faction.Name); + foreach (var enemyFactionName in factionDef.Enemies) + { + FactionValue enemyFactionValue = FactionEnumeration.GetFactionByName(enemyFactionName); + string repID = __instance.GetRepID("Reputation", enemyFactionValue); + Statistic statistic = __instance.CompanyStats.GetStatistic(repID); + bool flag = false; + bool flag2 = false; + if (enemyFactionValue.DoesGainReputation) + { + if (__instance.IsFactionAlly(enemyFactionValue)) + { + statistic.SetValidator(new Statistic.Validator(__instance.ReputationAllyValidator)); + flag = true; + } + else if (__instance.IsFactionEnemy(enemyFactionValue)) + { + statistic.SetValidator(new Statistic.Validator(__instance.ReputationEnemyValidator)); + flag2 = true; + } + else + { + statistic.SetValidator(new Statistic.Validator(__instance.ReputationNormalValidator)); + } + + statistic.SetValue(statistic.Value(), true); + string text2 = enemyFactionName.ToString(); + string text3 = "ALLIED_FACTION_" + text2; + string text4 = "ENEMY_FACTION_" + text2; + if (flag && !__instance.companyTags.Contains(text3)) + { + __instance.companyTags.Add(text3); + } + else if (!flag && __instance.companyTags.Contains(text3)) + { + __instance.companyTags.Remove(text3); + } + if (flag2 && !__instance.companyTags.Contains(text4)) + { + __instance.companyTags.Add(text4); + } + else if (!flag2 && __instance.companyTags.Contains(text4)) + { + __instance.companyTags.Remove(text4); + } + } + } + } + } +} \ No newline at end of file diff --git a/IRTweaks/IRTweaks/Modules/Misc/FactionValueFix.cs b/IRTweaks/IRTweaks/Modules/Misc/FactionValueFix.cs index 4d89285..9d3f4a5 100644 --- a/IRTweaks/IRTweaks/Modules/Misc/FactionValueFix.cs +++ b/IRTweaks/IRTweaks/Modules/Misc/FactionValueFix.cs @@ -14,18 +14,18 @@ public static class SimGameState_Rehydrate { static bool Prepare() => Mod.Config.Fixes.FactionValueFix; - public static void Postfix(SimGameState __instance, GameInstanceSave gameInstanceSave, ref List ___ignoredContractTargets) + public static void Postfix(SimGameState __instance, GameInstanceSave gameInstanceSave) { var save = gameInstanceSave.SimGameSave; if (save.IgnoredContractTargets == null) return; - ___ignoredContractTargets = new List(); + __instance.ignoredContractTargets = new List(); foreach (var factionID2 in save.IgnoredContractTargets) { var factionValue = FactionEnumeration.GetFactionByID(factionID2); if (!factionValue.IsCareerIgnoredContractTarget) { Mod.Log.Info?.Write($"FactionValueFix: {factionValue.Name} is no longer IsCareerIgnoredContractTarget = true, removing from ignoredContractTargets."); - ___ignoredContractTargets.RemoveAll(x => x == factionValue.Name); + __instance.ignoredContractTargets.RemoveAll(x => x == factionValue.Name); } } } diff --git a/IRTweaks/IRTweaks/Properties/AssemblyInfo.cs b/IRTweaks/IRTweaks/Properties/AssemblyInfo.cs index 9fd491c..458bb49 100644 --- a/IRTweaks/IRTweaks/Properties/AssemblyInfo.cs +++ b/IRTweaks/IRTweaks/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.9.8.0")] -[assembly: AssemblyFileVersion("0.9.8.0")] +[assembly: AssemblyVersion("0.9.8.1")] +[assembly: AssemblyFileVersion("0.9.8.1")]