Decompiled source of LarrysModRemake v4.0.0

LarrysMod.dll

Decompiled a month ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using DrawNCards;
using HarmonyLib;
using Photon.Pun;
using SelectAnyNumberRounds;
using TMPro;
using UnboundLib;
using UnboundLib.GameModes;
using UnboundLib.Utils.UI;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("LarrysMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+a534b58fb3870dcff127e8ee485d0c757e867a8d")]
[assembly: AssemblyProduct("LarrysMod")]
[assembly: AssemblyTitle("LarrysMod")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace System
{
	internal class Func
	{
		private Player player;

		private CardInfo card;

		private bool v;

		public Func(Player player, CardInfo card, bool v)
		{
			this.player = player;
			this.card = card;
			this.v = v;
		}
	}
}
namespace LarrysMod
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("larppaliz.rounds.settingsmod", "Larrys Mod", "1.0.0")]
	[BepInProcess("Rounds.exe")]
	public class LarrysMod : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static UnityAction <>9__18_0;

			public static UnityAction<bool> <>9__22_0;

			public static UnityAction<float> <>9__22_1;

			public static UnityAction<float> <>9__22_2;

			public static UnityAction<float> <>9__22_3;

			internal void <Start>b__18_0()
			{
			}

			internal void <BreadGUI>b__22_0(bool value)
			{
				EnableWinnerDrawLessConfig.Value = value;
				enableWinnerDrawLess = value;
			}

			internal void <BreadGUI>b__22_1(float value)
			{
				WinnerDrawAmountConfig.Value = (int)value;
				winnerDrawAmount = (int)value;
			}

			internal void <BreadGUI>b__22_2(float value)
			{
				StartingPicksConfig.Value = (int)value;
				StartingPicks = (int)value;
			}

			internal void <BreadGUI>b__22_3(float value)
			{
				StartingDrawsConfig.Value = (int)value;
				StartingDraws = (int)value;
			}
		}

		[CompilerGenerated]
		private sealed class <FirstRoundStart>d__30 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public IGameModeHandler gm;

			public LarrysMod <>4__this;

			private List<Player>.Enumerator <>s__1;

			private Player <player>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <FirstRoundStart>d__30(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>s__1 = default(List<Player>.Enumerator);
				<player>5__2 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				if (<>1__state != 0)
				{
					return false;
				}
				<>1__state = -1;
				<>s__1 = PlayerManager.instance.players.GetEnumerator();
				try
				{
					while (<>s__1.MoveNext())
					{
						<player>5__2 = <>s__1.Current;
						DrawNCards.RPCA_SetPickerDraws(<player>5__2.playerID, DrawNCards.GetPickerDraws(<player>5__2.playerID) - StartingDraws);
						<player>5__2 = null;
					}
				}
				finally
				{
					((IDisposable)<>s__1).Dispose();
				}
				<>s__1 = default(List<Player>.Enumerator);
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <GameEnd>d__29 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public IGameModeHandler gm;

			public LarrysMod <>4__this;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <GameEnd>d__29(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				if (<>1__state != 0)
				{
					return false;
				}
				<>1__state = -1;
				Plugin.configPickNumber.Value = 2;
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <GameStart>d__31 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public IGameModeHandler gm;

			public LarrysMod <>4__this;

			private int <i>5__1;

			private Player <player>5__2;

			private List<Player>.Enumerator <>s__3;

			private Player <player>5__4;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <GameStart>d__31(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<player>5__2 = null;
				<>s__3 = default(List<Player>.Enumerator);
				<player>5__4 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				if (<>1__state != 0)
				{
					return false;
				}
				<>1__state = -1;
				<i>5__1 = 0;
				while (<i>5__1 < PlayerManager.instance.players.Count)
				{
					<player>5__2 = PlayerManager.instance.players[<i>5__1];
					<player>5__2.playerID = <i>5__1;
					<player>5__2 = null;
					<i>5__1++;
				}
				Plugin.enableContinueCard.Value = false;
				Plugin.configPickNumber.Value = StartingPicks;
				<>s__3 = PlayerManager.instance.players.GetEnumerator();
				try
				{
					while (<>s__3.MoveNext())
					{
						<player>5__4 = <>s__3.Current;
						DrawNCards.RPCA_SetPickerDraws(<player>5__4.playerID, DrawNCards.NumDraws + StartingDraws);
						<player>5__4 = null;
					}
				}
				finally
				{
					((IDisposable)<>s__3).Dispose();
				}
				<>s__3 = default(List<Player>.Enumerator);
				GameModeManager.AddOnceHook("RoundStart", (Func<IGameModeHandler, IEnumerator>)<>4__this.FirstRoundStart);
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <PickEnd>d__27 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public IGameModeHandler gm;

			public LarrysMod <>4__this;

			private int <i>5__1;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <PickEnd>d__27(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				if (<>1__state != 0)
				{
					return false;
				}
				<>1__state = -1;
				Plugin.configPickNumber.Value = 1;
				<i>5__1 = 0;
				while (<i>5__1 < PlayerManager.instance.players.Count)
				{
					if (<>4__this.PlayersItsDonefor != null && PlayerManager.instance.players != null && <>4__this.PlayersItsDonefor.Count() > 1)
					{
						<>4__this.fixWinnerDrawThing(PlayerManager.instance.players[<i>5__1]);
					}
					<i>5__1++;
				}
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <PickStart>d__28 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public IGameModeHandler gm;

			public LarrysMod <>4__this;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <PickStart>d__28(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				if (<>1__state != 0)
				{
					return false;
				}
				<>1__state = -1;
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <RoundEnd>d__25 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public IGameModeHandler gm;

			public LarrysMod <>4__this;

			private List<int> <winners>5__1;

			private List<Player>.Enumerator <>s__2;

			private Player <player>5__3;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <RoundEnd>d__25(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<winners>5__1 = null;
				<>s__2 = default(List<Player>.Enumerator);
				<player>5__3 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				if (<>1__state != 0)
				{
					return false;
				}
				<>1__state = -1;
				<>4__this.PlayersItsDonefor = (Player[])(object)new Player[50];
				<winners>5__1 = <>4__this.GetRoundWinners();
				if (EnableWinnerDrawLessConfig.Value && <winners>5__1 != null && DrawNCards.NumDrawsConfig != null)
				{
					<>s__2 = PlayerManager.instance.players.GetEnumerator();
					try
					{
						while (<>s__2.MoveNext())
						{
							<player>5__3 = <>s__2.Current;
							if (<winners>5__1.Contains(<player>5__3.teamID))
							{
								<>4__this.WinnerDraws[<player>5__3.playerID] = DrawNCards.GetPickerDraws(<player>5__3.playerID);
								DrawNCards.RPCA_SetPickerDraws(<player>5__3.playerID, winnerDrawAmount + (DrawNCards.GetPickerDraws(<player>5__3.playerID) - DrawNCards.NumDraws));
							}
							<player>5__3 = null;
						}
					}
					finally
					{
						((IDisposable)<>s__2).Dispose();
					}
					<>s__2 = default(List<Player>.Enumerator);
				}
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		private const string ModId = "larppaliz.rounds.settingsmod";

		private const string ModName = "Larrys Mod";

		public const string Version = "1.0.0";

		public const string ModInitials = "LM";

		public static ConfigEntry<bool> EnableWinnerDrawLessConfig;

		public static ConfigEntry<int> WinnerDrawAmountConfig;

		public static ConfigEntry<int> StartingPicksConfig;

		public static int StartingPicks = 1;

		public static ConfigEntry<int> StartingDrawsConfig;

		public static int StartingDraws = 0;

		public static bool enableWinnerDrawLess = false;

		public static int winnerDrawAmount = 2;

		public GameObject optionsMenu;

		public int[] WinnerDraws = new int[50];

		public Player[] PlayersItsDonefor;

		public static LarrysMod instance { get; private set; }

		private void Awake()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Expected O, but got Unknown
			instance = this;
			Harmony val = new Harmony("larppaliz.rounds.settingsmod");
			val.PatchAll();
			GameModeManager.AddHook("PickEnd", (Func<IGameModeHandler, IEnumerator>)PickEnd);
			GameModeManager.AddHook("PickStart", (Func<IGameModeHandler, IEnumerator>)PickStart);
			GameModeManager.AddHook("RoundEnd", (Func<IGameModeHandler, IEnumerator>)RoundEnd);
			GameModeManager.AddHook("GameStart", (Func<IGameModeHandler, IEnumerator>)GameStart);
			EnableWinnerDrawLessConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("LM", "WinnerDrawToggle", false, "Toggle the winner draw stuff.");
			WinnerDrawAmountConfig = ((BaseUnityPlugin)this).Config.Bind<int>("LM", "WinnerDrawAmount", 2, "Winner Draw Amount");
			StartingPicksConfig = ((BaseUnityPlugin)this).Config.Bind<int>("LM", "StartingPicksAmount", 1, "Starting Picks Amount");
			StartingDrawsConfig = ((BaseUnityPlugin)this).Config.Bind<int>("LM", "StartingDrawsAmount", 0, "Extra Starting Draws Amount");
		}

		private void Start()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Expected O, but got Unknown
			Unbound.RegisterHandshake("larppaliz.rounds.settingsmod", (Action)OnHandShakeCompleted);
			object obj = <>c.<>9__18_0;
			if (obj == null)
			{
				UnityAction val = delegate
				{
				};
				<>c.<>9__18_0 = val;
				obj = (object)val;
			}
			Unbound.RegisterMenu("Larrys Mod", (UnityAction)obj, (Action<GameObject>)BreadGUI, optionsMenu, false);
			StartingPicks = StartingPicksConfig.Value;
			StartingDraws = StartingDrawsConfig.Value;
			enableWinnerDrawLess = EnableWinnerDrawLessConfig.Value;
			winnerDrawAmount = WinnerDrawAmountConfig.Value;
		}

		public List<int> GetRoundWinners()
		{
			return new List<int>(GameModeManager.CurrentHandler.GetRoundWinners());
		}

		internal void OnHandShakeCompleted()
		{
			if (PhotonNetwork.IsMasterClient)
			{
				for (int i = 0; i < 1; i++)
				{
					NetworkingManager.RPC_Others(typeof(LarrysMod), "UpdateValues", new object[4] { enableWinnerDrawLess, winnerDrawAmount, StartingPicks, StartingDraws });
				}
			}
		}

		private static void UpdateValues(bool WinnerDraw, int WinnerDrawValue, int Picks, int Draws)
		{
			StartingPicks = Picks;
			StartingDraws = Draws;
			enableWinnerDrawLess = WinnerDraw;
			winnerDrawAmount = WinnerDrawValue;
		}

		private void BreadGUI(GameObject menu)
		{
			if ((Object)(object)menu == (Object)null)
			{
				Debug.LogError("Menu object is null.");
				return;
			}
			TextMeshProUGUI val = default(TextMeshProUGUI);
			MenuHandler.CreateText("Drawing Cards", menu, ref val, 60, true, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
			MenuHandler.CreateToggle(EnableWinnerDrawLessConfig.Value, "Toggle Winner Draws", menu, (UnityAction<bool>)delegate(bool value)
			{
				EnableWinnerDrawLessConfig.Value = value;
				enableWinnerDrawLess = value;
			}, 60, true, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
			Slider val2 = default(Slider);
			MenuHandler.CreateSlider("Winner Draws", menu, 20, 1f, 20f, (float)winnerDrawAmount, (UnityAction<float>)delegate(float value)
			{
				WinnerDrawAmountConfig.Value = (int)value;
				winnerDrawAmount = (int)value;
			}, ref val2, true, (Color?)null, (Direction)0, true, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
			Slider val3 = default(Slider);
			MenuHandler.CreateSlider("Starting Picks", menu, 20, 1f, 20f, (float)StartingPicks, (UnityAction<float>)delegate(float value)
			{
				StartingPicksConfig.Value = (int)value;
				StartingPicks = (int)value;
			}, ref val3, true, (Color?)null, (Direction)0, true, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
			Slider val4 = default(Slider);
			MenuHandler.CreateSlider("Extra Starting Draws", menu, 20, -5f, 20f, (float)StartingDraws, (UnityAction<float>)delegate(float value)
			{
				StartingDrawsConfig.Value = (int)value;
				StartingDraws = (int)value;
			}, ref val4, true, (Color?)null, (Direction)0, true, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
		}

		[IteratorStateMachine(typeof(<RoundEnd>d__25))]
		private IEnumerator RoundEnd(IGameModeHandler gm)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <RoundEnd>d__25(0)
			{
				<>4__this = this,
				gm = gm
			};
		}

		public void fixWinnerDrawThing(Player player)
		{
			if (EnableWinnerDrawLessConfig.Value && !PlayersItsDonefor.Contains(player))
			{
				List<int> roundWinners = GetRoundWinners();
				if (roundWinners != null && roundWinners.Contains(player.teamID) && WinnerDraws[player.playerID] != DrawNCards.GetPickerDraws(player.playerID))
				{
					PlayersItsDonefor[player.playerID] = player;
					DrawNCards.RPCA_SetPickerDraws(player.playerID, WinnerDraws[player.playerID]);
				}
			}
		}

		[IteratorStateMachine(typeof(<PickEnd>d__27))]
		private IEnumerator PickEnd(IGameModeHandler gm)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <PickEnd>d__27(0)
			{
				<>4__this = this,
				gm = gm
			};
		}

		[IteratorStateMachine(typeof(<PickStart>d__28))]
		private IEnumerator PickStart(IGameModeHandler gm)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <PickStart>d__28(0)
			{
				<>4__this = this,
				gm = gm
			};
		}

		[IteratorStateMachine(typeof(<GameEnd>d__29))]
		private IEnumerator GameEnd(IGameModeHandler gm)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <GameEnd>d__29(0)
			{
				<>4__this = this,
				gm = gm
			};
		}

		[IteratorStateMachine(typeof(<FirstRoundStart>d__30))]
		private IEnumerator FirstRoundStart(IGameModeHandler gm)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <FirstRoundStart>d__30(0)
			{
				<>4__this = this,
				gm = gm
			};
		}

		[IteratorStateMachine(typeof(<GameStart>d__31))]
		private IEnumerator GameStart(IGameModeHandler gm)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <GameStart>d__31(0)
			{
				<>4__this = this,
				gm = gm
			};
		}

		public int PlayerDrawsIncrease(Player player, int Amount)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			if (GameModeManager.CurrentHandler.GetTeamScore(player.teamID).rounds > 0)
			{
				instance.fixWinnerDrawThing(player);
			}
			DrawNCards.RPCA_SetPickerDraws(player.playerID, DrawNCards.GetPickerDraws(player.playerID) + Amount);
			return DrawNCards.GetPickerDraws(player.playerID);
		}
	}
}