Decompiled source of WhiteCollarSideJobs v1.0.4

WhiteCollarSideJobs.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using CommunityCaseLoader;
using HarmonyLib;
using Il2CppSystem.Collections.Generic;
using Microsoft.CodeAnalysis;
using SOD.Common.Extensions;
using UnityEngine;
using UniverseLib;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("WhiteCollarSideJobs")]
[assembly: AssemblyConfiguration("IL2CPP")]
[assembly: AssemblyDescription("Adds WASD controlls to the case board")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+ed4ce69a58d430953604554204c40d6463720ce1")]
[assembly: AssemblyProduct("WhiteCollarSideJobs")]
[assembly: AssemblyTitle("WhiteCollarSideJobs")]
[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 WhiteCollarSideJobs
{
	[BepInPlugin("WhiteCollarSideJobs", "WhiteCollarSideJobs", "1.0.0")]
	public class WhiteCollarSideJobs : BasePlugin
	{
		public static ManualLogSource PluginLogger;

		public static Dictionary<int, WhiteCollarVMailThreadData> threadData = new Dictionary<int, WhiteCollarVMailThreadData>();

		public const string VMailID_Guilty_JobPreset_SideJobFinanceInvestigatorOffice = "ad52f2e8-a66e-4670-a1e4-07f7f138279d";

		public const string VMailID_NotGuilty_JobPreset_SideJobFinanceInvestigatorOffice = "fb7c0f68-0dad-497f-90ec-534fa1678788";

		public const string VMailID_BossReminder_JobPreset_SideJobFinanceInvestigatorOffice = "488c7cb9-5229-45fe-b35a-a08f213136ab";

		public override void Load()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Expected O, but got Unknown
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Expected O, but got Unknown
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Expected O, but got Unknown
			PluginLogger = ((BasePlugin)this).Log;
			ManualLogSource log = ((BasePlugin)this).Log;
			bool flag = default(bool);
			BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(18, 1, ref flag);
			if (flag)
			{
				((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Plugin ");
				((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("WhiteCollarSideJobs");
				((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" is loaded!");
			}
			log.LogInfo(val);
			Harmony val2 = new Harmony("WhiteCollarSideJobs");
			val2.PatchAll();
			ManualLogSource log2 = ((BasePlugin)this).Log;
			val = new BepInExInfoLogInterpolatedStringHandler(42, 1, ref flag);
			if (flag)
			{
				((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Plugin ");
				((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("WhiteCollarSideJobs");
				((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" is patched and has injected types!");
			}
			log2.LogInfo(val);
		}
	}
	[HarmonyPatch]
	public class Toolbox_NewVmailThread
	{
		[HarmonyTargetMethod]
		internal static MethodBase CalculateMethod()
		{
			return (from mi in typeof(Toolbox).GetMethods()
				where mi.Name == "NewVmailThread" && mi.GetParameters().Length == 10
				select mi).First();
		}

		public static void Prefix(MessageThreadSave __result, Human from, ref Human to1, string treeID, ref float timeStamp, int progress)
		{
			if (treeID == "ad52f2e8-a66e-4670-a1e4-07f7f138279d")
			{
				string seed = $"{treeID}_{from.humanID}";
				CreateVMails_JobPreset_SideJobFinanceInvestigatorOffice(from, ref to1, timeStamp, ref seed);
			}
		}

		private static void CreateVMails_JobPreset_SideJobFinanceInvestigatorOffice(Human perp, ref Human to1, float timeStamp, ref string seed)
		{
			List<Human> list = (from employee in EnumerableExtensions.Select<Occupation, Human>(perp.job.employer.companyRoster, (Func<Occupation, Human>)((Occupation occ) => occ.employee))
				where (Object)(object)employee != (Object)null
				select employee).ToList();
			Company employer = perp.job.employer;
			List<int> list2 = new List<int> { perp.humanID };
			if (list.Count > 3 && (Object)(object)employer.director != (Object)null)
			{
				list2.Add(employer.director.humanID);
			}
			if (list.Count > 4 && (Object)(object)employer.receptionist != (Object)null)
			{
				list2.Add(employer.receptionist.humanID);
			}
			to1 = SelectRandomCoworker(list, list2, ref seed);
			Toolbox.Instance.NewVmailThread(perp.job.employer.director, perp.job.employer.director, (Human)null, (Human)null, EnumerableExtensions.ToListIl2Cpp<Human>((IEnumerable<Human>)list), "488c7cb9-5229-45fe-b35a-a08f213136ab", timeStamp + Toolbox.Instance.Rand(-48f, -12f, false), 999, (CustomDataSource)0, -1);
			int num = list.Count - list2.Count;
			int num2 = 0;
			num2 = Mathf.FloorToInt((float)(num / 2));
			for (int i = 0; i < num2; i++)
			{
				Human val = SelectRandomCoworker(list, list2, ref seed);
				list2.Add(val.humanID);
				Human val2 = SelectRandomCoworker(list, list2, ref seed);
				Toolbox.Instance.NewVmailThread(val, val2, (Human)null, (Human)null, (List<Human>)null, "fb7c0f68-0dad-497f-90ec-534fa1678788", timeStamp + Toolbox.Instance.Rand(-36f, 36f, false), 999, (CustomDataSource)0, -1);
			}
		}

		private static Human SelectRandomCoworker(List<Human> employees, List<int> ineligibleEmployeeIds, ref string seed)
		{
			List<Human> list = employees.Where((Human employee) => !ineligibleEmployeeIds.Contains(employee.humanID)).ToList();
			int psuedoRandomNumberContained = Toolbox.Instance.GetPsuedoRandomNumberContained(0, list.Count, ref seed);
			return list[psuedoRandomNumberContained];
		}
	}
	[HarmonyPatch(typeof(Strings), "GetContainedValue")]
	public class Strings_GetContainedValue
	{
		public static bool Prefix(ref string __result, string withinScope, string newValue, object baseObject)
		{
			if (newValue.StartsWith("custom_pie_whitecollar_") && ReflectionExtensions.GetActualType(baseObject).Name == "VmailParsingData")
			{
				MessageThreadSave thread = ReflectionExtensions.TryCast<VmailParsingData>(baseObject).thread;
				int threadID = thread.threadID;
				bool flag = thread.treeID == "ad52f2e8-a66e-4670-a1e4-07f7f138279d";
				string seed = $"{threadID}_{thread.recievers[0]}_{newValue}";
				if (!WhiteCollarSideJobs.threadData.TryGetValue(threadID, out var value))
				{
					value = ((!flag) ? new WhiteCollarVMailThreadData
					{
						generatedInvoiceNumber = Toolbox.Instance.GetPsuedoRandomNumberContained(10000, 99999, ref seed),
						generatedInvoiceCost = Toolbox.Instance.GetPsuedoRandomNumberContained(1000, 9999, ref seed),
						generatedInvoicePayeeName = SelectRandomCompanyOfPreset("MediumOffice", fallbackIsIllegal: false, ref seed, CityData.Instance.citizenDictionary[thread.recievers[0]].job.employer.companyID).name
					} : new WhiteCollarVMailThreadData
					{
						generatedInvoiceNumber = Toolbox.Instance.GetPsuedoRandomNumberContained(1000, 9999, ref seed),
						generatedInvoiceCost = Toolbox.Instance.GetPsuedoRandomNumberContained(500, 2500, ref seed),
						generatedInvoicePayeeName = SelectRandomCompanyOfPreset("LoanShark", fallbackIsIllegal: true, ref seed, CityData.Instance.citizenDictionary[thread.recievers[0]].job.employer.companyID).name
					});
				}
				switch (newValue)
				{
				case "custom_pie_whitecollar_invoicenumber":
					__result = value.generatedInvoiceNumber.ToString() ?? "";
					return false;
				case "custom_pie_whitecollar_invoicecost":
					__result = value.generatedInvoiceCost.ToString() ?? "";
					return false;
				case "custom_pie_whitecollar_payee":
					__result = value.generatedInvoicePayeeName;
					return false;
				case "custom_pie_whitecollar_invoicelength":
					__result = "five";
					return false;
				}
			}
			return true;
		}

		private static Company SelectRandomCompanyOfPreset(string presetName, bool fallbackIsIllegal, ref string seed, int notThisCompanyId = -1)
		{
			List<Company> list = EnumerableExtensions.Where<Company>(CityData.Instance.companyDirectory, (Func<Company, bool>)((Company company) => ((SoCustomComparison)company.preset).presetName == presetName && company.companyID != notThisCompanyId)).ToList();
			if (list.Count == 0)
			{
				list = EnumerableExtensions.Where<Company>(CityData.Instance.companyDirectory, (Func<Company, bool>)((Company company) => company.preset.isIllegal == fallbackIsIllegal && company.companyID != notThisCompanyId)).ToList();
			}
			int psuedoRandomNumberContained = Toolbox.Instance.GetPsuedoRandomNumberContained(0, list.Count - 1, ref seed);
			return list[psuedoRandomNumberContained];
		}
	}
	[HarmonyPatch(typeof(SideJob), "SpawnJobItem")]
	public class SideJob_SpawnJobItem
	{
		public static bool Prefix(SideJob __instance, ref InteractablePreset spawnItem)
		{
			if (((SoCustomComparison)spawnItem).presetName == "FAKE_DodgySalesRecord")
			{
				CommunityCaseLoaderPlugin.PluginLogger.LogInfo((object)"Found the dodgy sales record item to spawn");
				spawnItem = Toolbox.Instance.GetInteractablePreset("CheatersPoem");
				__instance.purp.job.employer.AddSalesRecord(__instance.purp, spawnItem, SessionData.Instance.gameTime);
				CommunityCaseLoaderPlugin.PluginLogger.LogInfo((object)"Replaced with note, added sales record");
				return true;
			}
			return true;
		}
	}
	[Serializable]
	public class WhiteCollarVMailThreadData
	{
		public int threadID;

		public int generatedInvoiceNumber;

		public int generatedInvoiceCost;

		public string generatedInvoicePayeeName;
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "WhiteCollarSideJobs";

		public const string PLUGIN_NAME = "WhiteCollarSideJobs";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}