public static void SimGameConstantOverride_ApplyOverride_Postfix(SimGameConstantOverride __instance, string constantType, string constantName, SimGameState ___simState)
        {
            Mod.Log.Trace("SGCO:AO entered.");

            if (constantName != null && constantName.ToLower().Equals(ModStats.StrayShotValidTargets.ToLower()))
            {
                string value = __instance.ConstantOverrides[constantType][constantName];
                Mod.Log.Debug($" Setting StrayShotValidTargets to {value} ");
                ToHitConstantsDef thcd = ___simState.CombatConstants.ToHit;
                thcd.StrayShotValidTargets = (StrayShotValidTargets)Enum.Parse(typeof(StrayShotValidTargets), value);

                Traverse traverse = Traverse.Create(___simState.CombatConstants).Property("ToHit");
                traverse.SetValue(thcd);
                Mod.Log.Debug($" Replaced ToHit");
            }
        }
 public override void CombatStarts()
 {
     if (Settings.AllowNetBonusModifier)
     {
         CombatResolutionConstantsDef con = CombatConstants.ResolutionConstants;
         con.AllowTotalNegativeModifier = true;
         typeof(CombatGameConstants).GetProperty("ResolutionConstants").SetValue(CombatConstants, con, null);
     }
     if (Settings.AllowLowElevationPenalty)
     {
         ToHitConstantsDef con = CombatConstants.ToHit;
         con.ToHitElevationApplyPenalties = true;
         typeof(CombatGameConstants).GetProperty("ToHit").SetValue(CombatConstants, con, null);
     }
     if (Settings.AllowNetBonusModifier && steppingModifier == null && !Settings.DiminishingHitChanceModifier)
     {
         TryRun(ModLog, FillSteppedModifiers);
     }
 }
        static void Postfix(SimGameConstantOverride __instance, string constantType, string constantName, SimGameState ___simState)
        {
            Mod.Log.Trace?.Write("SGCO:AO entered.");

            if (constantName != null && constantName.ToLower().Equals(ModStats.HBS_StrayShotEnabler.ToLower()))
            {
                bool value = Convert.ToBoolean(__instance.ConstantOverrides[constantType][constantName]);
                Mod.Log.Debug?.Write($" Setting StrayShotsEnabled to {value} ");
                ToHitConstantsDef thcd = ___simState.CombatConstants.ToHit;
                thcd.StrayShotsEnabled = value;

                Traverse traverse = Traverse.Create(___simState.CombatConstants).Property("ToHit");
                traverse.SetValue(thcd);
                Mod.Log.Debug?.Write($" Replaced ToHit");
            }

            if (constantName != null && constantName.ToLower().Equals(ModStats.HBS_StrayShotHitsUnits.ToLower()))
            {
                bool value = Convert.ToBoolean(__instance.ConstantOverrides[constantType][constantName]);
                Mod.Log.Debug?.Write($" Setting StrayShotsHitUnits to {value} ");
                ToHitConstantsDef thcd = ___simState.CombatConstants.ToHit;
                thcd.StrayShotsHitUnits = value;

                Traverse traverse = Traverse.Create(___simState.CombatConstants).Property("ToHit");
                traverse.SetValue(thcd);
                Mod.Log.Debug?.Write($" Replaced ToHit");
            }

            if (constantName != null && constantName.ToLower().Equals(ModStats.HBS_StrayShotValidTargets.ToLower()))
            {
                string value = __instance.ConstantOverrides[constantType][constantName];
                Mod.Log.Debug?.Write($" Setting StrayShotValidTargets to {value} ");
                ToHitConstantsDef thcd = ___simState.CombatConstants.ToHit;
                thcd.StrayShotValidTargets = (StrayShotValidTargets)Enum.Parse(typeof(StrayShotValidTargets), value);

                Traverse traverse = Traverse.Create(___simState.CombatConstants).Property("ToHit");
                traverse.SetValue(thcd);
                Mod.Log.Debug?.Write($" Replaced ToHit");
            }
        }