Decompiled source of TrainingWheels v0.0.3

plugins/TrainingWheels.dll

Decompiled 3 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using Agents;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using GTFO.API.Utilities;
using GameData;
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem.Collections.Generic;
using Microsoft.CodeAnalysis;
using Player;
using SNetwork;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyFileVersion("0.0.3")]
[assembly: AssemblyInformationalVersion("0.0.3")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyVersion("0.0.3.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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;
		}
	}
}
internal class ManifestInfo
{
	internal const string TSName = "TrainingWheels";

	internal const string TSDescription = "A silly mod to put on some training wheels on prisoners.";

	internal const string TSVersion = "0.0.3";

	internal const string TSAuthor = "Angry-Maid";

	internal const string TSWebsite = "https://github.com/Angry-Maid/GTFO-TrainingWheels";
}
namespace TrainingWheels
{
	internal static class ModConf
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static LiveEditEventHandler <0>__OnFileChanged;
		}

		private static readonly ConfigEntry<int> _modMainStartingAmmo;

		private static readonly ConfigEntry<int> _modSpecialStartingAmmo;

		private static readonly ConfigEntry<int> _modToolStartingAmmo;

		private static readonly ConfigEntry<bool> _regenDisabled;

		private static readonly ConfigEntry<int> _startingHealth;

		private static readonly ConfigEntry<int> _startingInfection;

		private static readonly ConfigFile configFile;

		public static int ModMainStartingAmmo => _modMainStartingAmmo.Value;

		public static int ModSpecialStartingAmmo => _modSpecialStartingAmmo.Value;

		public static int ModToolStartingAmmo => _modToolStartingAmmo.Value;

		public static bool RegenDisabled => _regenDisabled.Value;

		public static int StartingHealth => _startingHealth.Value;

		public static int StartingInfection => _startingInfection.Value;

		static ModConf()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			configFile = new ConfigFile(Path.Combine(Paths.ConfigPath, "TrainingWheels.cfg"), true);
			string text = "Ammo Percentages";
			_modMainStartingAmmo = configFile.Bind<int>(text, "Main Ammo Percentage", 15, "Percentage from the starting ammo of Main (0-65535)");
			_modSpecialStartingAmmo = configFile.Bind<int>(text, "Special Ammo Percentage", 15, "Percentage from the starting ammo of Special (0-65535)");
			_modToolStartingAmmo = configFile.Bind<int>(text, "Tool Ammo Percentage", 21, "Percentage from the starting ammo of Tool (0-65535)");
			string text2 = "Health";
			_regenDisabled = configFile.Bind<bool>(text2, "Regen Disabled", true, "Enables/Disables passive regeneration");
			_startingHealth = configFile.Bind<int>(text2, "Starting Health", 1, "Set starting health upon drop");
			_startingInfection = configFile.Bind<int>(text2, "Starting Infection", 100, "Set starting infection upon drop");
		}

		internal static void Init()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Expected O, but got Unknown
			LiveEditListener obj = LiveEdit.CreateListener(Paths.ConfigPath, "TrainingWheels.cfg", false);
			object obj2 = <>O.<0>__OnFileChanged;
			if (obj2 == null)
			{
				LiveEditEventHandler val = OnFileChanged;
				<>O.<0>__OnFileChanged = val;
				obj2 = (object)val;
			}
			obj.FileChanged += (LiveEditEventHandler)obj2;
		}

		private static void OnFileChanged(LiveEditEventArgs _)
		{
			configFile.Reload();
		}
	}
	[BepInPlugin("dev.Angry-Maid.gtfo.TrainingWheels", "TrainingWheels", "0.0.3")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BasePlugin
	{
		public const string GUID = "dev.Angry-Maid.gtfo.TrainingWheels";

		public const string MOD_NAME = "TrainingWheels";

		public const string VERSION = "0.0.3";

		internal static ManualLogSource L;

		private static readonly Harmony _harmony = new Harmony("dev.Angry-Maid.gtfo.TrainingWheels");

		public override void Load()
		{
			L = ((BasePlugin)this).Log;
			ModConf.Init();
			_harmony.PatchAll(Assembly.GetExecutingAssembly());
			L.LogInfo((object)"Plugin loaded!");
		}
	}
}
namespace TrainingWheels.Patches
{
	[HarmonyPatch]
	internal static class AmmoStoragePatches
	{
		[HarmonyPatch(typeof(PlayerAmmoStorage), "AddLevelDefaultAmmoModifications")]
		[HarmonyWrapSafe]
		[HarmonyPostfix]
		private static void Post_SetStorage(PlayerAmmoStorage __instance, PlayerAgent owner)
		{
			if (RundownManager.ActiveExpedition != null)
			{
				List<float> list = new List<float>
				{
					Math.Clamp((float)ModConf.ModMainStartingAmmo / 100f, 0f, 65535f),
					Math.Clamp((float)ModConf.ModSpecialStartingAmmo / 100f, 0f, 65535f),
					Math.Clamp((float)ModConf.ModToolStartingAmmo / 100f, 0f, 65535f)
				};
				Il2CppStructArray<uint> ammoModificationIDs = __instance.m_ammoModificationIDs;
				_ = RundownManager.ActiveExpedition.SpecialOverrideData;
				ModifierInstance val = default(ModifierInstance);
				if (!AgentModifierManager.TryGetModifierInstance((Agent)(object)owner, ref val))
				{
					AgentModifierManager.AddModifierValue((Agent)(object)owner, (AgentModifier)152, 0f, 0f);
					AgentModifierManager.TryGetModifierInstance((Agent)(object)owner, ref val);
				}
				float num = val.GetModifierValue((AgentModifier)152) + 1f;
				AgentModifierManager.ClearModifierChange(((Il2CppArrayBase<uint>)(object)ammoModificationIDs)[0]);
				((Il2CppArrayBase<uint>)(object)ammoModificationIDs)[0] = AgentModifierManager.AddModifierValue((Agent)(object)owner, (AgentModifier)152, num * list[0] - 1f, 0f);
				num = val.GetModifierValue((AgentModifier)153) + 1f;
				AgentModifierManager.ClearModifierChange(((Il2CppArrayBase<uint>)(object)ammoModificationIDs)[1]);
				((Il2CppArrayBase<uint>)(object)ammoModificationIDs)[1] = AgentModifierManager.AddModifierValue((Agent)(object)owner, (AgentModifier)153, num * list[1] - 1f, 0f);
				num = val.GetModifierValue((AgentModifier)154) + 1f;
				AgentModifierManager.ClearModifierChange(((Il2CppArrayBase<uint>)(object)ammoModificationIDs)[2]);
				((Il2CppArrayBase<uint>)(object)ammoModificationIDs)[2] = AgentModifierManager.AddModifierValue((Agent)(object)owner, (AgentModifier)154, num * list[2] - 1f, 0f);
			}
		}
	}
	[HarmonyPatch(typeof(PlayerAgent))]
	internal class PlayerAgentRegenPatch
	{
		[HarmonyPatch("Setup")]
		[HarmonyPostfix]
		private static void Postfix_Setup(PlayerAgent __instance)
		{
			if (ModConf.RegenDisabled)
			{
				__instance.Damage.m_nextRegen = float.PositiveInfinity;
			}
		}
	}
	[HarmonyPatch(typeof(Dam_PlayerDamageBase))]
	internal static class PlayerRegenPatches
	{
		[HarmonyPatch("OnIncomingDamage")]
		[HarmonyPostfix]
		private static void Postfix_OnDamage(Dam_PlayerDamageBase __instance)
		{
			if (ModConf.RegenDisabled)
			{
				__instance.m_nextRegen = float.PositiveInfinity;
			}
		}
	}
	[HarmonyPatch(typeof(PlayerSessionStatusManager))]
	internal class PlayerSessionStatus
	{
		[HarmonyPatch("GetDefaultSessionStatus")]
		[HarmonyPostfix]
		private static void Postfix_GetDefaultSessionStatus(ref pPlayerSessionStatus __result)
		{
			__result.resourceData.health = Math.Clamp((float)ModConf.StartingHealth / 100f, 0f, 1f);
			__result.resourceData.infection = Math.Clamp((float)ModConf.StartingInfection / 100f, 0f, 1f);
		}
	}
	[HarmonyPatch(typeof(RundownManager))]
	internal class SetActiveExpeditionPatches
	{
		[HarmonyPatch("SetActiveExpedition")]
		[HarmonyPostfix]
		private static void Postfix_SetActiveExpedition(pActiveExpedition expPackage, ExpeditionInTierData expTierData, bool forceUpdate)
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			float num = Math.Clamp((float)ModConf.StartingHealth / 100f, 0f, 1f);
			float amount = Math.Clamp((float)ModConf.StartingInfection / 100f, 0f, 1f);
			pInfection val = new pInfection
			{
				amount = amount,
				mode = (pInfectionMode)0,
				effect = (pInfectionEffect)0
			};
			if (SNet.IsMaster)
			{
				Enumerator<PlayerAgent> enumerator = PlayerManager.PlayerAgentsInLevel.GetEnumerator();
				while (enumerator.MoveNext())
				{
					PlayerAgent current = enumerator.Current;
					((Dam_SyncedDamageBase)current.Damage).SendSetHealth(num);
					current.Damage.m_receiveModifyInfectionPacket.Send(val, (SNet_ChannelType)2);
					current.Damage.ReceiveModifyInfection(val);
				}
			}
		}
	}
}