public static void Init(string directory, string settingsJSON) { SimpleMechAssembly_Main.Log = Logger.GetLogger("BTSimpleMechAssembly"); try { SimpleMechAssembly_Main.Settings = JsonConvert.DeserializeObject <SimpleMechAssembly_Settings>(settingsJSON); } catch (Exception e) { SimpleMechAssembly_Main.Log.LogException("error reading settings, using defaults", e); SimpleMechAssembly_Main.Settings = new SimpleMechAssembly_Settings(); } if (SimpleMechAssembly_Main.Settings.LogLevelLog) { Logger.SetLoggerLevel("BTSimpleMechAssembly", LogLevel.Log); } var harmony = HarmonyInstance.Create("com.github.mcb5637.BTSimpleMechAssembly"); harmony.PatchAll(Assembly.GetExecutingAssembly()); AccessExtensionPatcher.PatchAll(harmony, Assembly.GetExecutingAssembly()); if (SimpleMechAssembly_Main.Settings.StructurePointBasedSalvageActive) { try { harmony.Patch(typeof(Contract).GetMethod("GenerateSalvage", BindingFlags.NonPublic | BindingFlags.Instance), null, new HarmonyMethod(typeof(SimpleMechAssembly_StructurePointBasedSalvage).GetMethod("Postfix")), new HarmonyMethod(typeof(SimpleMechAssembly_StructurePointBasedSalvage).GetMethod("Transpiler"))); harmony.Patch(AccessTools.DeclaredMethod(typeof(Contract), "AddMechComponentToSalvage"), null, null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(SimpleMechAssembly_StructurePointBasedSalvage), "CheckSalvageTranspiler"))); harmony.Patch(AccessTools.DeclaredMethod(typeof(Contract), "CreateAndAddMechPart"), null, null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(SimpleMechAssembly_StructurePointBasedSalvage), "CheckMechSalvageTranspiler"))); } catch (Exception e) { FileLog.Log(e.ToString()); } } }
public static void Init(string directory, string settingsJSON) { Log = HBS.Logging.Logger.GetLogger("BTX_CAC_Compatibility"); try { Sett = JsonConvert.DeserializeObject <Settings>(settingsJSON); } catch (Exception e) { Sett = new Settings(); Log.LogException(e); } if (Sett.LogLevelLog) { HBS.Logging.Logger.SetLoggerLevel("BTX_CAC_Compatibility", LogLevel.Log); } HarmonyInstance harmony = HarmonyInstance.Create("com.github.mcb5637.BTX_CAC_Compatibility"); harmony.PatchAll(Assembly.GetExecutingAssembly()); AccessExtensionPatcher.PatchAll(harmony, Assembly.GetExecutingAssembly()); AbstractActor_InitStats.Patch(harmony); AbstractActor_IndirectImmune.Patch(harmony); //harmony.Patch( // AccessTools.Method(typeof(EffectManager), "CreateEffect", new Type[] { typeof(EffectData), typeof(string), typeof(int), typeof(ICombatant), typeof(ICombatant), typeof(WeaponHitInfo), typeof(int), typeof(bool) }), // null, new HarmonyMethod(AccessTools.Method(typeof(MarkEffects_Patch), "Postfix")), null); //harmony.Patch(AccessTools.DeclaredMethod(typeof(Mech), "DamageLocation"), new HarmonyMethod(AccessTools.Method(typeof(Main), "LogDamageLoc")), null, null); if (Sett.MECompat) { return; } InfernoExplode.Patch(harmony); try { // artemis //Unpatch(harmony, AccessTools.DeclaredMethod(typeof(AttackDirector.AttackSequence), "GetClusteredHits"), "BEX.BattleTech.Extended_CE"); //Type[] ptypes = new Type[] { typeof(Vector3), typeof(Mech), typeof(float), typeof(ArmorLocation), typeof(float), typeof(float), typeof(ArmorLocation), typeof(float) }; //Unpatch(harmony, AccessTools.DeclaredMethod(typeof(HitLocation), "GetAdjacentHitLocation", ptypes), "BEX.BattleTech.Extended_CE"); //ptypes = new Type[] { typeof(Vector3), typeof(Vehicle), typeof(float), typeof(VehicleChassisLocations), typeof(float), typeof(float), typeof(VehicleChassisLocations), typeof(float) }; //Unpatch(harmony, AccessTools.DeclaredMethod(typeof(HitLocation), "GetAdjacentHitLocation", ptypes), "BEX.BattleTech.Extended_CE"); // streak Unpatch(harmony, AccessTools.DeclaredMethod(typeof(MissileLauncherEffect), "AllMissilesComplete"), "BEX.BattleTech.Extended_CE"); Unpatch(harmony, AccessTools.DeclaredMethod(typeof(MissileLauncherEffect), "LaunchMissile"), "BEX.BattleTech.Extended_CE"); Unpatch(harmony, AccessTools.DeclaredMethod(typeof(AttackDirector.AttackSequence), "GetIndividualHits"), "BEX.BattleTech.Extended_CE"); // stepped hit chance Unpatch(harmony, AccessTools.DeclaredMethod(typeof(ToHit), "GetUMChance"), "BEX.BattleTech.Extended_CE"); // called shot nerf //Unpatch(harmony, AccessTools.DeclaredMethod(typeof(Pilot), "InitAbilities"), "BEX.BattleTech.Extended_CE", false, true, false); // TSM Unpatch(harmony, AccessTools.DeclaredMethod(typeof(Mech), "OnActivationEnd"), "BEX.BattleTech.Extended_CE", false, true, false); // prefix is heat shutdown // lbx/uac Unpatch(harmony, AccessTools.DeclaredMethod(typeof(Contract), "CompleteContract"), "BEX.BattleTech.Extended_CE", true, true, true, "System.Void Extended_CE.WeaponModes+Contract_CompleteContract.Prefix(BattleTech.Contract __instance)"); Unpatch(harmony, AccessTools.DeclaredMethod(typeof(AttackEvaluator), "MakeAttackOrder"), "BEX.BattleTech.Extended_CE"); Unpatch(harmony, AccessTools.DeclaredMethod(typeof(AITeam), "TurnActorProcessActivation"), "BEX.BattleTech.Extended_CE"); Unpatch(harmony, AccessTools.DeclaredMethod(typeof(CombatHUDWeaponSlot), "OnPointerUp"), "BEX.BattleTech.Extended_CE"); Unpatch(harmony, AccessTools.DeclaredMethod(typeof(Weapon), "get_AmmoCategoryValue"), "BEX.BattleTech.Extended_CE"); Unpatch(harmony, AccessTools.DeclaredMethod(typeof(CombatHUDWeaponSlot), "RefreshDisplayedWeapon"), "BEX.BattleTech.Extended_CE", true, false, false); // transpiler is coil fix Unpatch(harmony, AccessTools.DeclaredMethod(typeof(MechValidationRules), "ValidateMechHasAppropriateAmmo"), "BEX.BattleTech.Extended_CE"); } catch (Exception e) { FileLog.Log(e.ToString()); } try { foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) { if (a.GetName().Name.Equals("MechQuirks")) { Type t = a.GetType("Quirks.Tooltips.QuirkToolTips"); harmony.Patch(t.GetMethod("DetailMechQuirks", BindingFlags.Static | BindingFlags.NonPublic), null, new HarmonyMethod(typeof(QuirkToolTips_DetailMechQuirks), "Postfix"), null); } } } catch (Exception e) { FileLog.Log(e.ToString()); } ToHitModifiersHelper.registerModifier("BTX_CAC_Compatibility_CounterNarc", "Counter NARC", true, true, CounterNarc, null); }