using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine.UIElements;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("CrimeTweaker")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+19cc7f8b43c994d1fab6c7a8a15ba34e3aa75061")]
[assembly: AssemblyProduct("CrimeTweaker")]
[assembly: AssemblyTitle("CrimeTweaker")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace CrimeTweaker
{
[BepInPlugin("IngoH.HardTime.CrimeTweaker", "CrimeTweaker", "1.0.2")]
[HarmonyPatch]
public class Plugin : BaseUnityPlugin
{
public const string PluginGuid = "IngoH.HardTime.CrimeTweaker";
public const string PluginName = "CrimeTweaker";
public const string PluginVer = "1.0.2";
internal static ManualLogSource Log;
internal static readonly Harmony Harmony = new Harmony("IngoH.HardTime.CrimeTweaker");
internal static string PluginPath;
internal static ConfigEntry<float> OverallCrimeModifier;
internal static ConfigEntry<float> StarCrimeModifier;
internal static ConfigEntry<float> AICrimeModifier;
internal static List<ConfigEntry<float>> PerCrimeModifiers = new List<ConfigEntry<float>>();
internal static List<string> Crimes = new List<string>(29)
{
"insubordination", "conspiracy", "possession", "vandalism", "escaping", "theft", "fornication", "arson", "assault", "assault with a weapon",
"grievious bodily harm", "attempted murder", "murder", "serial murder", "terrorism", "trespassing", "trading", "freeloading (unused)", "urination/defecation", "tardiness (unused)",
"truancy", "sleeping", "graffiti (partially unused)", "shoplifting (unused)", "snacking", "reckless driving", "discharging a firearm", "animal abuse", "impersonation"
};
private void Awake()
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Expected O, but got Unknown
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Expected O, but got Unknown
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Expected O, but got Unknown
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013f: Expected O, but got Unknown
Log = ((BaseUnityPlugin)this).Logger;
PluginPath = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location);
OverallCrimeModifier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "OverallCrimeModifier", 100f, new ConfigDescription("Changes the overall percent chance of crimes being witnessed.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1E+09f), Array.Empty<object>()));
StarCrimeModifier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "StarCrimeModifier", 100f, new ConfigDescription("Changes the percent chance of the player being witnessed committing a crime.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1E+09f), Array.Empty<object>()));
AICrimeModifier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "AICrimeModifier", 100f, new ConfigDescription("Changes the percent chance of AI being witnessed committing a crime.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1E+09f), Array.Empty<object>()));
foreach (string crime in Crimes)
{
PerCrimeModifiers.Add(((BaseUnityPlugin)this).Config.Bind<float>("General", StringUtilsExtensions.ToPascalCase(crime) + "CrimeModifier", 100f, new ConfigDescription("Changes the percent chance of " + crime + " being witnessed.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1E+09f), Array.Empty<object>())));
}
}
private void OnEnable()
{
Harmony.PatchAll();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded CrimeTweaker!");
}
private void OnDisable()
{
Harmony.UnpatchSelf();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Unloaded CrimeTweaker!");
}
[HarmonyPatch(typeof(DFOGOCNBECG), "DOLDKPGLHBL")]
[HarmonyPrefix]
public static bool DFOGOCNBECG_DOLDKPGLHBL(DFOGOCNBECG __instance, int LMCLGBPJKFM, int NFCNFEIIFMA, int DEGGCDHLFBC, int MKEBAFANECN, ref int KPJANCMHICM)
{
double prob = 1.0 / (double)(1 + KPJANCMHICM);
prob = AdjustProb(__instance, LMCLGBPJKFM, NFCNFEIIFMA, DEGGCDHLFBC, MKEBAFANECN, prob);
KPJANCMHICM = (int)(1.0 / prob) - 1;
if ((double)KPJANCMHICM > 1000000.0)
{
return false;
}
return true;
}
private static double AdjustProb(DFOGOCNBECG culprit, int warrant, int victim, int witness, int variable, double prob)
{
if (warrant > 0 && warrant <= Crimes.Count)
{
Log.LogDebug((object)$"{Characters.c[culprit.GOOKPABIPBC].name} was spotted doing {Crimes[warrant - 1]}! Normal prob: {prob * 100.0}%");
}
prob *= (double)(OverallCrimeModifier.Value / 100f);
prob = ((culprit.GOOKPABIPBC != Characters.star) ? (prob * (double)(AICrimeModifier.Value / 100f)) : (prob * (double)(StarCrimeModifier.Value / 100f)));
if (warrant > 0 && warrant <= Crimes.Count)
{
prob *= (double)(PerCrimeModifiers[warrant - 1].Value / 100f);
}
if (prob > 0.9999)
{
prob = 1.0;
}
if (prob < 0.0001)
{
prob = 0.0;
}
if (warrant > 0 && warrant <= Crimes.Count)
{
Log.LogDebug((object)$"Adjusted prob: {prob * 100.0}%");
}
return prob;
}
}
}