Decompiled source of REPO Randomizer v1.0.5

Repo_Randomizer.dll

Decompiled 2 months 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 System.Security;
using System.Security.Permissions;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using On;
using Photon.Pun;
using Repo_Randomizer.NetcodePatcher;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.Events;

[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: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("MMHOOK_Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("PhotonRealtime")]
[assembly: IgnoresAccessChecksTo("PhotonUnityNetworking")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: AssemblyCompany("bcs4313")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Corrupts the game! For better or for worse.")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+de30a7b4fd06f505c14721da353043ab3517b186")]
[assembly: AssemblyProduct("Repo_Randomizer")]
[assembly: AssemblyTitle("Repo_Randomizer")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
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;
		}
	}
}
public class ClockHook
{
	public ClockHook()
	{
		Debug.Log((object)"Lethal Chaos: Hooking  World Modifiers... ");
	}
}
public class CustomChaosPrefabPool : IPunPrefabPool
{
	private GameObject chaosPrefab;

	public CustomChaosPrefabPool(GameObject prefab)
	{
		chaosPrefab = prefab;
	}

	public GameObject Instantiate(string prefabId, Vector3 position, Quaternion rotation)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		return Object.Instantiate<GameObject>(chaosPrefab, position, rotation);
	}

	public void Destroy(GameObject go)
	{
		Object.Destroy((Object)(object)go);
	}
}
namespace LethalChaos.EntropySystem.Util
{
	internal class Repo_Randomizer
	{
		private List<int> options;

		private Random rnd;
	}
	internal class PresetSystem
	{
	}
}
namespace Repo_Randomizer
{
	public class EntityDestructionManager
	{
		public static List<GameObject> destroyOnLeave = new List<GameObject>();

		public static List<GameObject> destroyOnFail = new List<GameObject>();

		public EntityDestructionManager()
		{
			Debug.Log((object)"Lethal Chaos: Invoked Entity Destruction Manager");
		}
	}
	public class entropyBlaster
	{
		public static Random r = new Random();

		public static Transform btransform = new GameObject().transform;

		public static float nearestPlayerToCoordDistance(Vector3 position)
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				List<PlayerAvatar> players = getPlayers();
				float num = float.PositiveInfinity;
				foreach (PlayerAvatar item in players)
				{
					Vector3 val = ((Component)item).gameObject.transform.position - position;
					float magnitude = ((Vector3)(ref val)).magnitude;
					if (magnitude < num)
					{
						num = magnitude;
					}
				}
				return num;
			}
			catch (Exception ex)
			{
				Debug.LogError((object)("Lethal Chaos: nearestPlayerToCoordDistance method failure -> " + ex.ToString()));
			}
			return 0f;
		}

		public static PlayerAvatar nearestPlayerToCoord(Vector3 position)
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_003b: Unknown result type (might be due to invalid IL or missing references)
			PlayerAvatar result = null;
			try
			{
				List<PlayerAvatar> players = getPlayers();
				float num = float.PositiveInfinity;
				foreach (PlayerAvatar item in players)
				{
					Vector3 val = ((Component)item).gameObject.transform.position - position;
					float magnitude = ((Vector3)(ref val)).magnitude;
					if (magnitude < num)
					{
						num = magnitude;
						result = item;
					}
				}
				return result;
			}
			catch (Exception ex)
			{
				Debug.LogError((object)("Lethal Chaos: nearestPlayerToCoord method failure -> " + ex.ToString()));
			}
			return result;
		}

		public static List<PlayerAvatar> getPlayers()
		{
			return GameDirector.instance.PlayerList;
		}

		public static Vector3 safeNodePosition(GameObject target, float inner_threshold, float outer_threshold)
		{
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: 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_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: 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_0050: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
				PlayerAvatar component = ((Component)val).GetComponent<PlayerAvatar>();
				LevelPoint val2 = SemiFunc.LevelPointGet(((Component)val).gameObject.transform.position, inner_threshold, outer_threshold);
				if (!Object.op_Implicit((Object)(object)val2))
				{
					Debug.Log((object)"Repo Randomizer: SafeNodePosition GET failure");
					return Vector3.zero;
				}
				Vector3 position = ((Component)val2).transform.position;
				Debug.Log((object)("Repo Randomizer: SafeNodePosition == " + ((object)(Vector3)(ref position)).ToString()));
				return ((Component)val2).transform.position;
			}
			catch (Exception ex)
			{
				Debug.LogError((object)ex);
				return Vector3.zero;
			}
		}

		public static Vector3 safeRandomizedPositionFlex(GameObject target, float inner_threshold, float outer_threshold, NavMeshHit navHit = default(NavMeshHit))
		{
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				Vector3 val = default(Vector3);
				for (int i = 0; i < 5; i++)
				{
					GameObject gameObject = ((Component)nearestPlayerToCoord(target.transform.position)).gameObject;
					PlayerAvatar component = gameObject.GetComponent<PlayerAvatar>();
					int num = 1;
					int num2 = 1;
					if (EntropyEngine.rnd.NextDouble() < 0.5)
					{
						num = -1;
					}
					if (EntropyEngine.rnd.NextDouble() < 0.5)
					{
						num2 = -1;
					}
					int num3 = 5;
					while (num3 > 0)
					{
						num3--;
						try
						{
							outer_threshold -= inner_threshold;
							float num4 = gameObject.transform.position.x + (inner_threshold + outer_threshold * (float)EntropyEngine.rnd.NextDouble()) * (float)num;
							float num5 = gameObject.transform.position.z + (inner_threshold + outer_threshold * (float)EntropyEngine.rnd.NextDouble()) * (float)num2;
							((Vector3)(ref val))..ctor(num4, gameObject.transform.position.y, num5);
							if (NavMesh.SamplePosition(val, ref navHit, outer_threshold, -1) && avoidsAllPlayers(inner_threshold, ((NavMeshHit)(ref navHit)).position))
							{
								return ((NavMeshHit)(ref navHit)).position;
							}
						}
						catch (Exception)
						{
							num3--;
						}
					}
					Debug.Log((object)"Lethal Chaos: Position Flex failed, trying safeRandomizedPosition");
				}
				return safeNodePosition(target, inner_threshold, outer_threshold);
			}
			catch (Exception ex2)
			{
				Debug.LogError((object)ex2);
				return Vector3.zero;
			}
		}

		public static bool avoidsAllPlayers(float inner_threshold, Vector3 pos)
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			foreach (PlayerAvatar player in GameDirector.instance.PlayerList)
			{
				if (!Object.op_Implicit((Object)(object)player) || !Object.op_Implicit((Object)(object)((Component)player).gameObject) || !(Vector3.Distance(((Component)player).gameObject.transform.position, pos) < inner_threshold))
				{
					continue;
				}
				return false;
			}
			return true;
		}

		public static void TEST1(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: EVENT 1:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			Plugin.rpcCalls.TEST();
		}

		public static void spawnRandomEnemy(GameObject target, bool targetIsPlayer)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				Vector3 val = safeRandomizedPositionFlex(target, 0.5f, 2f);
				Debug.Log((object)"REPO Randomizer: spawnRandomEnemy:::");
				EnemySetup[] array = Resources.FindObjectsOfTypeAll<EnemySetup>();
				EnemySetup val2 = array[EntropyEngine.rnd.Next(0, array.Length)];
				LevelGenerator.Instance.EnemySpawn(val2, val);
			}
			catch (Exception ex)
			{
				Debug.Log((object)("Repo Randomizer: Enemy Spawn Failure -> " + ex));
			}
		}

		public static void spawnRandomItem(GameObject target, bool targetIsPlayer)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: 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)
			Vector3 val = safeRandomizedPositionFlex(target, 0.5f, 2f);
			try
			{
				List<ItemAttributes> spawnedItems = PunManager.instance.itemManager.spawnedItems;
				if (PunManager.instance.itemManager.spawnedItems.Count > 0)
				{
					ItemAttributes val2 = spawnedItems[EntropyEngine.rnd.Next(0, spawnedItems.Count)];
					string text = "Items/" + ((Object)val2.item.prefab).name;
					if (SemiFunc.IsMultiplayer())
					{
						PhotonNetwork.InstantiateRoomObject(text, val, Quaternion.identity, (byte)0, (object[])null);
					}
					else
					{
						Object.Instantiate<GameObject>(val2.item.prefab, val, Quaternion.identity);
					}
				}
			}
			catch (Exception ex)
			{
				Debug.LogError((object)ex);
			}
		}

		public static void randomForceApply(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: randomForceApply:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("applyForce", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static void randomTumbleApply(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: randomTumbleApply:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("applyTumble", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static void upgradeHealth(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: upgradeHealth:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("upgradeHealth", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static void upgradeSprint(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: upgradeSprint:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("upgradeSprint", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static void upgradeStrength(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: upgradeStrength:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("upgradeStrength", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static void upgradeTumble(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: upgradeTumble:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("upgradeTumble", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static void upgradeStamina(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: upgradeStamina:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("upgradeStamina", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static void showLove(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: upgradeStamina:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("showLove", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static void randomSound(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: random sound:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			AudioClip[] array = Resources.FindObjectsOfTypeAll<AudioClip>();
			AudioClip val2 = array[EntropyEngine.rnd.Next(0, array.Length)];
			if (Object.op_Implicit((Object)(object)val2))
			{
				((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("soundPlay", (RpcTarget)0, new object[2]
				{
					val.photonView.ControllerActorNr,
					((Object)val2).name
				});
			}
		}

		public static void fastHeal(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: fastheal:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("fastHeal", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static void fastDmg(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: fastdmg:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("fastDmg", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static async void falseDeath(GameObject target, bool targetIsPlayer)
		{
			Debug.Log((object)"REPO Randomizer: falseDeath :::");
			PlayerAvatar player = nearestPlayerToCoord(target.transform.position);
			_ = player.playerHealth.health;
			player.PlayerDeathRPC(0);
			await Task.Delay(1000);
			player.ReviveRPC(false);
			player.playerReviveEffects.swirlParticle.Play();
		}

		public static void glitchEffect(GameObject target, bool targetIsPlayer)
		{
			List<PlayerAvatar> players = getPlayers();
			float num = float.PositiveInfinity;
			foreach (PlayerAvatar item in players)
			{
				item.PlayerGlitchShortRPC();
			}
		}

		public static void tempPitchUp(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: tempPitchUp:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("tempPitchUp", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static void tempPitchDown(GameObject target, bool targetIsPlayer)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO Randomizer: tempPitchDown:::");
			PlayerAvatar val = nearestPlayerToCoord(target.transform.position);
			((MonoBehaviourPun)Plugin.rpcCalls).photonView.RPC("tempPitchDown", (RpcTarget)0, new object[1] { val.photonView.ControllerActorNr });
		}

		public static GameObject FindPrefabWithComponent<T>(string resourcePath = "") where T : Component
		{
			GameObject[] array = Resources.LoadAll<GameObject>(resourcePath);
			GameObject[] array2 = array;
			foreach (GameObject val in array2)
			{
				if ((Object)(object)val.GetComponent<T>() != (Object)null)
				{
					return val;
				}
			}
			Debug.LogWarning((object)("No prefab found in Resources/" + resourcePath + " with component: " + typeof(T).Name));
			return null;
		}

		public static void explosion(GameObject target, bool targetIsPlayer)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Expected O, but got Unknown
			Vector3 val = safeRandomizedPositionFlex(target, 0.5f, 5f);
			EnemyBang val2 = new EnemyBang();
			val2.explosionScript = val2.particleScriptExplosion.Spawn(val2.enemy.CenterTransform.position, 1f, 30, 25, 2f, false, false, 1f);
			val2.explosionScript.HurtCollider.onImpactEnemy.AddListener(new UnityAction(val2.OnExplodeHitEnemy));
		}

		public static async void explodeEnd(EnemyBang bang)
		{
			await Task.Delay(1000);
			Object.Destroy((Object)(object)bang);
		}
	}
	public class EntropyEngine
	{
		public static Random rnd = new Random();

		public static bool SimultaneousOutcomes = false;

		public static float EventHookMultiplier = 1f;

		public static float EventChanceMultiplier = 0.4f;

		public static float EventChanceOffset = 0f;

		public static EntropyHost entropyHost;

		public static LightningHook lightninghook;

		public static ItemHooks itemhooks;

		public static PlayerHooks playerhooks;

		public static EnemyHooks enemyhooks;

		public static ClockHook modifierhook;

		public static PlanetResetHook resetHooks;

		public static EntityDestructionManager destructionManager = new EntityDestructionManager();

		public static List<EntropyHost> hosts = new List<EntropyHost>();

		public EntropyEngine()
		{
			Hooks();
		}

		public static void LaunchEngine()
		{
			Debug.Log((object)"Lethal Chaos: Launching Entropy Engine...");
			hosts.Clear();
			hosts.Add(new EntropyHost("BASE"));
		}

		public static EntropyHost getMoonHost()
		{
			if (hosts.Count > 0)
			{
				return hosts[0];
			}
			return new EntropyHost("None");
		}

		public void Hooks()
		{
			lightninghook = new LightningHook();
			itemhooks = new ItemHooks();
			playerhooks = new PlayerHooks();
			enemyhooks = new EnemyHooks();
			modifierhook = new ClockHook();
			resetHooks = new PlanetResetHook();
			WorldModifiers.Hooks();
		}
	}
	public class EntropyHost
	{
		public static int eventTotal = 17;

		private List<Event> events;

		public string planet;

		public WorldModifiers modifiers = new WorldModifiers();

		private int it_randomizer_seed = EntropyEngine.rnd.Next();

		public EventThrottler throttler = new EventThrottler();

		public EntropyHost(string planet)
		{
			Debug.Log((object)"Lethal Chaos: New Entropy Host Launched.");
			events = new List<Event>();
			for (int i = 0; i < eventTotal; i++)
			{
				Event @event = new Event(i);
				@event.printData(planet);
				this.planet = planet;
				events.Add(@event);
			}
			throttler = new EventThrottler();
		}

		public void queueHook(string hookID, GameObject obj, bool isSelective, bool targetIsPlayer)
		{
			for (int i = 0; i < events.Count; i++)
			{
				Event @event = events[i];
				if (!@event.hooksAttached.Contains(hookID) || !@event.runOutcome(hookID))
				{
					continue;
				}
				if (EntropyEngine.SimultaneousOutcomes)
				{
					for (int j = 0; j < events.Count; j++)
					{
						Event event2 = events[j];
						if (event2.hooksAttached.Contains(hookID))
						{
							runEvent(event2.eventID, obj, isSelective, targetIsPlayer);
						}
					}
				}
				else
				{
					runEvent(events[i].eventID, obj, isSelective, targetIsPlayer);
				}
			}
		}

		public void runEvent(int method, GameObject obj, bool isSelective, bool playerOrigin)
		{
			try
			{
				Debug.Log((object)("running event: " + method + " to " + planet));
				if (!PhotonNetwork.IsMasterClient)
				{
					Debug.Log((object)"block: is not hosting... Returning...");
					return;
				}
				if (EntropyEngine.getMoonHost().planet.Equals("None"))
				{
					Debug.Log((object)"block: host is none. Returning...");
					return;
				}
				switch (method)
				{
				case 0:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(0, 6, 1f, 0f))
						{
							return;
						}
						entropyBlaster.spawnRandomItem(obj, playerOrigin);
					}
					break;
				case 1:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(1, 12, 0f, 0f))
						{
							return;
						}
						entropyBlaster.randomForceApply(obj, playerOrigin);
					}
					break;
				case 2:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(2, 6, 0f, 1f))
						{
							return;
						}
						entropyBlaster.spawnRandomEnemy(obj, playerOrigin);
					}
					break;
				case 3:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(3, 12, 0f, 0f))
						{
							return;
						}
						entropyBlaster.randomTumbleApply(obj, playerOrigin);
					}
					break;
				case 4:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(4, 0, 0f, 0f))
						{
							return;
						}
						if (EntropyEngine.rnd.NextDouble() < 0.05000000074505806)
						{
							entropyBlaster.upgradeHealth(obj, playerOrigin);
						}
					}
					break;
				case 5:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(5, 0, 0f, 0f))
						{
							return;
						}
						if (EntropyEngine.rnd.NextDouble() < 0.05000000074505806)
						{
							entropyBlaster.upgradeSprint(obj, playerOrigin);
						}
					}
					break;
				case 6:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(6, 0, 0f, 0f))
						{
							return;
						}
						if (EntropyEngine.rnd.NextDouble() < 0.05000000074505806)
						{
							entropyBlaster.upgradeStrength(obj, playerOrigin);
						}
					}
					break;
				case 7:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(7, 0, 0f, 0f))
						{
							return;
						}
						if (EntropyEngine.rnd.NextDouble() < 0.05000000074505806)
						{
							entropyBlaster.upgradeTumble(obj, playerOrigin);
						}
					}
					break;
				case 8:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(8, 0, 0f, 0f))
						{
							return;
						}
						if (EntropyEngine.rnd.NextDouble() < 0.05000000074505806)
						{
							entropyBlaster.upgradeStamina(obj, playerOrigin);
						}
					}
					break;
				case 9:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(9, 20, 0f, 0f))
						{
							return;
						}
						entropyBlaster.showLove(obj, playerOrigin);
					}
					break;
				case 10:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(10, 25, 0f, 0f))
						{
							return;
						}
						entropyBlaster.randomSound(obj, playerOrigin);
					}
					break;
				case 11:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(11, 3, 0f, 0f))
						{
							return;
						}
						entropyBlaster.fastDmg(obj, playerOrigin);
					}
					break;
				case 12:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(12, 15, 0f, 0f))
						{
							return;
						}
						entropyBlaster.fastHeal(obj, playerOrigin);
					}
					break;
				case 13:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(12, 3, 0f, 0f))
						{
							return;
						}
						entropyBlaster.glitchEffect(obj, playerOrigin);
					}
					break;
				case 14:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(12, 3, 0f, 0f))
						{
							return;
						}
						entropyBlaster.tempPitchDown(obj, playerOrigin);
					}
					break;
				case 15:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(12, 3, 0f, 0f))
						{
							return;
						}
						entropyBlaster.tempPitchUp(obj, playerOrigin);
					}
					break;
				case 16:
					if (isSelective)
					{
						if (EntropyEngine.getMoonHost().throttler.throttleGate(12, 3, 0f, 0f))
						{
							return;
						}
						entropyBlaster.explosion(obj, playerOrigin);
					}
					break;
				}
				Object.Destroy((Object)(object)obj);
			}
			catch (Exception ex)
			{
				Debug.LogError((object)("Lethal Chaos: " + ex.ToString()));
				try
				{
					Object.Destroy((Object)(object)obj);
				}
				catch (Exception)
				{
				}
			}
		}

		public void addRandomOutcome()
		{
			Random random = new Random();
			int index = random.Next(0, events.Count);
			Event @event = events[index];
			int num = random.Next(0, @event.availableHooks.Length);
			@event.hooksAttached.Add(@event.availableHooks[num]);
			double num2 = random.NextDouble();
			double num3 = random.NextDouble();
			double num4 = random.NextDouble();
			double num5 = random.NextDouble() + @event.implicitWeights[num];
			@event.hookChances.Add(100.0 * num2 * num3 * num4 * num5);
		}
	}
	internal class Event
	{
		public int eventID;

		public string[] availableHooks = new string[9] { "SendChat", "Jump", "Death", "Tumble", "Crouch", "HealOther", "Slide", "Walk", "Sprint" };

		public double[] implicitWeights = new double[9] { 4.0, 2.0, 100.0, 1.35, 1.35, 40.0, 2.0, 0.15, 0.2 };

		public List<string> hooksAttached = new List<string>();

		public List<double> hookChances = new List<double>();

		private bool forceEvent = false;

		private int forceValue = 28;

		private Random rnd = EntropyEngine.rnd;

		public Event(int eventID)
		{
			this.eventID = eventID;
			double num = 5.0;
			try
			{
				num *= (double)(EntropyEngine.EventHookMultiplier * getUniqueMult(eventID));
			}
			catch
			{
				Debug.LogError((object)"LethalChaos: error parsing EventHookMultiplier setting! Check to see if the setting is a decimal value!");
			}
			for (int i = 0; i < availableHooks.Length; i++)
			{
				double num2 = rnd.NextDouble() * 100.0;
				if (num2 < num)
				{
					hooksAttached.Add(availableHooks[i]);
					double num3 = rnd.NextDouble();
					double num4 = implicitWeights[i];
					float num5 = EntropyEngine.EventChanceMultiplier * getUniqueMult(eventID);
					float eventChanceOffset = EntropyEngine.EventChanceOffset;
					hookChances.Add(Math.Min(Math.Min(100.0 * num3 * num4, 100.0) * (double)num5, 100.0) + (double)eventChanceOffset);
				}
			}
			if (forceEvent && this.eventID == forceValue)
			{
				int num6 = 0;
				try
				{
					num6 = (int)Math.Round(rnd.NextDouble() * (double)availableHooks.Length) - 1;
					hooksAttached.Add(availableHooks[num6]);
				}
				catch
				{
					return;
				}
				double num7 = rnd.NextDouble();
				double num8 = implicitWeights[num6];
				float eventChanceMultiplier = EntropyEngine.EventChanceMultiplier;
				float eventChanceOffset2 = EntropyEngine.EventChanceOffset;
				hookChances.Add(Math.Min(Math.Min(100.0 * num7 * num8, 100.0) * (double)eventChanceMultiplier, 100.0) + (double)eventChanceOffset2);
			}
		}

		public static float getUniqueMult(int eventID)
		{
			return 1f;
		}

		public bool runOutcome(string hook)
		{
			int num = -1;
			for (int i = 0; i < hooksAttached.Count; i++)
			{
				if (hooksAttached[i].Equals(hook))
				{
					num = i;
					break;
				}
			}
			if (num == -1)
			{
				return false;
			}
			double num2 = hookChances[num];
			return rnd.NextDouble() * 100.0 < num2;
		}

		public void printData(string planet)
		{
			Debug.Log((object)("Data for ID: " + eventID + " :: " + planet));
			Debug.Log((object)"Hooks - ");
			for (int i = 0; i < hooksAttached.Count; i++)
			{
				Debug.Log((object)("-> " + hooksAttached[i] + "  -- Chance: " + hookChances[i]));
			}
		}
	}
	public class EnemyHooks
	{
		public EnemyHooks()
		{
			Debug.Log((object)"Lethal Chaos: Hooking Enemy Interactions...");
		}
	}
	public class ItemHooks
	{
		public ItemHooks()
		{
			Debug.Log((object)"Lethal Chaos: Hooking Items...");
		}
	}
	public class LightningHook
	{
		public LightningHook()
		{
			Debug.Log((object)"Lethal Chaos: Hooking Lightning Bolts...");
		}
	}
	public class PlanetResetHook
	{
		public void linkEngineToScene()
		{
			Debug.Log((object)"Repo Randomizer: Link Engine Call...");
			if (!Object.op_Implicit((Object)(object)Plugin.ChaosHostRef))
			{
				Plugin.ChaosHostRef = Plugin.Assets.MainAssetBundle.LoadAsset<GameObject>("ChaosHost");
				IPunPrefabPool prefabPool = PhotonNetwork.PrefabPool;
				DefaultPool val = (DefaultPool)(object)((prefabPool is DefaultPool) ? prefabPool : null);
				if (val != null && !val.ResourceCache.ContainsKey("ChaosHost"))
				{
					val.ResourceCache.Add("ChaosHost", Plugin.ChaosHostRef);
					Plugin.LogDebug("Injected ChaosHost into REPO's existing prefab pool.");
				}
			}
		}

		public void StartHost()
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (PhotonNetwork.IsMasterClient)
				{
					if (Object.op_Implicit((Object)(object)Plugin.ChaosHost))
					{
						Debug.Log((object)"REPO Chaos: Destroying existing Chaos Host");
						Object.Destroy((Object)(object)Plugin.ChaosHost);
					}
					Plugin.ChaosHost = PhotonNetwork.Instantiate("ChaosHost", Vector3.zero, Quaternion.identity, (byte)0, (object[])null);
					Plugin.rpcCalls = Plugin.ChaosHost.GetComponent<LethalNet>();
					Debug.Log((object)"REPO Chaos: Created Chaos Host (Networking)");
				}
			}
			catch (Exception ex)
			{
				Debug.LogError((object)("CHAOS HOST INITIALIZATION ERROR: " + ex));
			}
		}

		public PlanetResetHook()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Expected O, but got Unknown
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Expected O, but got Unknown
			LoadingUI.StartLoading += (hook_StartLoading)delegate(orig_StartLoading orig, LoadingUI self)
			{
				orig.Invoke(self);
				Debug.Log((object)"STARTLOADING");
				try
				{
					Debug.Log((object)"Repo Randomizer: Resetting Entropy Engine");
					EntropyEngine.EventHookMultiplier = Plugin.levelOfChaos.Value + Plugin.chaosRamp.Value * (float)RunManager.instance.levelsCompleted;
					EntropyEngine.EventChanceMultiplier = Plugin.randomOutcomeMultiplier.Value;
					linkEngineToScene();
					EntropyEngine.LaunchEngine();
				}
				catch (Exception ex2)
				{
					Debug.LogError((object)ex2);
				}
			};
			LoadingUI.PlayCrash += (hook_PlayCrash)delegate(orig_PlayCrash orig, LoadingUI self)
			{
				orig.Invoke(self);
				if (!LevelGenerator.Instance.Generated)
				{
					return;
				}
				try
				{
					Debug.Log((object)"Repo Randomizer: ROUND START");
					StartHost();
				}
				catch (Exception ex)
				{
					Debug.LogError((object)ex);
				}
			};
		}
	}
	public class PlayerHooks
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_ChatMessageSpeak <>9__0_0;

			public static hook_JumpRPC <>9__0_1;

			public static hook_PlayerDeath <>9__0_2;

			public static hook_TumbleStart <>9__0_3;

			public static hook_StandToCrouch <>9__0_4;

			public static hook_HealedOther <>9__0_5;

			public static hook_Slide <>9__0_6;

			public static hook_Footstep <>9__0_7;

			internal void <.ctor>b__0_0(orig_ChatMessageSpeak orig, PlayerAvatar self, string _message, bool crouching)
			{
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_001d: Expected O, but got Unknown
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self, _message, crouching);
				Debug.Log((object)"Repo Randomizer: Sendchat");
				GameObject val = new GameObject();
				val.transform.position = ((Component)self).transform.position;
				EntropyEngine.getMoonHost().queueHook("SendChat", val, isSelective: true, targetIsPlayer: true);
				Object.Destroy((Object)(object)val);
			}

			internal void <.ctor>b__0_1(orig_JumpRPC orig, PlayerAvatar self, bool _powerupEffect)
			{
				//IL_0015: Unknown result type (might be due to invalid IL or missing references)
				//IL_001b: Expected O, but got Unknown
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self, _powerupEffect);
				Debug.Log((object)"Repo Randomizer: JUMP");
				GameObject val = new GameObject();
				val.transform.position = ((Component)self).transform.position;
				EntropyEngine.getMoonHost().queueHook("Jump", val, isSelective: true, targetIsPlayer: true);
				Object.Destroy((Object)(object)val);
			}

			internal void <.ctor>b__0_2(orig_PlayerDeath orig, PlayerAvatar self, int enemyIndex)
			{
				//IL_0015: Unknown result type (might be due to invalid IL or missing references)
				//IL_001b: Expected O, but got Unknown
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self, enemyIndex);
				Debug.Log((object)"Repo Randomizer: Death");
				GameObject val = new GameObject();
				val.transform.position = ((Component)self).transform.position;
				EntropyEngine.getMoonHost().queueHook("Death", val, isSelective: true, targetIsPlayer: true);
				Object.Destroy((Object)(object)val);
			}

			internal void <.ctor>b__0_3(orig_TumbleStart orig, PlayerAvatar self)
			{
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_001a: Expected O, but got Unknown
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				Debug.Log((object)"Repo Randomizer: TumbleStart");
				GameObject val = new GameObject();
				val.transform.position = ((Component)self).transform.position;
				EntropyEngine.getMoonHost().queueHook("Tumble", val, isSelective: true, targetIsPlayer: true);
				Object.Destroy((Object)(object)val);
			}

			internal void <.ctor>b__0_4(orig_StandToCrouch orig, PlayerAvatar self)
			{
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_001a: Expected O, but got Unknown
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				Debug.Log((object)"Repo Randomizer: Crouch");
				GameObject val = new GameObject();
				val.transform.position = ((Component)self).transform.position;
				EntropyEngine.getMoonHost().queueHook("Crouch", val, isSelective: true, targetIsPlayer: true);
				Object.Destroy((Object)(object)val);
			}

			internal void <.ctor>b__0_5(orig_HealedOther orig, PlayerAvatar self)
			{
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_001a: Expected O, but got Unknown
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				Debug.Log((object)"Repo Randomizer: Heal Other Player");
				GameObject val = new GameObject();
				val.transform.position = ((Component)self).transform.position;
				EntropyEngine.getMoonHost().queueHook("HealOther", val, isSelective: true, targetIsPlayer: true);
				Object.Destroy((Object)(object)val);
			}

			internal void <.ctor>b__0_6(orig_Slide orig, PlayerAvatar self)
			{
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_001a: Expected O, but got Unknown
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				Debug.Log((object)"Repo Randomizer: Slide");
				GameObject val = new GameObject();
				val.transform.position = ((Component)self).transform.position;
				EntropyEngine.getMoonHost().queueHook("Slide", val, isSelective: true, targetIsPlayer: true);
				Object.Destroy((Object)(object)val);
			}

			internal void <.ctor>b__0_7(orig_Footstep orig, PlayerAvatar self, SoundType soundType)
			{
				//IL_0003: Unknown result type (might be due to invalid IL or missing references)
				//IL_0050: Unknown result type (might be due to invalid IL or missing references)
				//IL_0056: Expected O, but got Unknown
				//IL_0062: Unknown result type (might be due to invalid IL or missing references)
				//IL_0015: Unknown result type (might be due to invalid IL or missing references)
				//IL_001b: Expected O, but got Unknown
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self, soundType);
				if (self.isSprinting)
				{
					GameObject val = new GameObject();
					val.transform.position = ((Component)self).transform.position;
					EntropyEngine.getMoonHost().queueHook("Sprint", val, isSelective: true, targetIsPlayer: true);
					Object.Destroy((Object)(object)val);
				}
				else
				{
					GameObject val2 = new GameObject();
					val2.transform.position = ((Component)self).transform.position;
					EntropyEngine.getMoonHost().queueHook("Walk", val2, isSelective: true, targetIsPlayer: true);
					Object.Destroy((Object)(object)val2);
				}
			}
		}

		public PlayerHooks()
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Expected O, but got Unknown
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Expected O, but got Unknown
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Expected O, but got Unknown
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Expected O, but got Unknown
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Expected O, but got Unknown
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Expected O, but got Unknown
			//IL_012a: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Expected O, but got Unknown
			Debug.Log((object)"Lethal Chaos: Hooking Player Actions...");
			object obj = <>c.<>9__0_0;
			if (obj == null)
			{
				hook_ChatMessageSpeak val = delegate(orig_ChatMessageSpeak orig, PlayerAvatar self, string _message, bool crouching)
				{
					//IL_0017: Unknown result type (might be due to invalid IL or missing references)
					//IL_001d: Expected O, but got Unknown
					//IL_0029: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self, _message, crouching);
					Debug.Log((object)"Repo Randomizer: Sendchat");
					GameObject val17 = new GameObject();
					val17.transform.position = ((Component)self).transform.position;
					EntropyEngine.getMoonHost().queueHook("SendChat", val17, isSelective: true, targetIsPlayer: true);
					Object.Destroy((Object)(object)val17);
				};
				<>c.<>9__0_0 = val;
				obj = (object)val;
			}
			PlayerAvatar.ChatMessageSpeak += (hook_ChatMessageSpeak)obj;
			object obj2 = <>c.<>9__0_1;
			if (obj2 == null)
			{
				hook_JumpRPC val2 = delegate(orig_JumpRPC orig, PlayerAvatar self, bool _powerupEffect)
				{
					//IL_0015: Unknown result type (might be due to invalid IL or missing references)
					//IL_001b: Expected O, but got Unknown
					//IL_0027: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self, _powerupEffect);
					Debug.Log((object)"Repo Randomizer: JUMP");
					GameObject val16 = new GameObject();
					val16.transform.position = ((Component)self).transform.position;
					EntropyEngine.getMoonHost().queueHook("Jump", val16, isSelective: true, targetIsPlayer: true);
					Object.Destroy((Object)(object)val16);
				};
				<>c.<>9__0_1 = val2;
				obj2 = (object)val2;
			}
			PlayerAvatar.JumpRPC += (hook_JumpRPC)obj2;
			object obj3 = <>c.<>9__0_2;
			if (obj3 == null)
			{
				hook_PlayerDeath val3 = delegate(orig_PlayerDeath orig, PlayerAvatar self, int enemyIndex)
				{
					//IL_0015: Unknown result type (might be due to invalid IL or missing references)
					//IL_001b: Expected O, but got Unknown
					//IL_0027: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self, enemyIndex);
					Debug.Log((object)"Repo Randomizer: Death");
					GameObject val15 = new GameObject();
					val15.transform.position = ((Component)self).transform.position;
					EntropyEngine.getMoonHost().queueHook("Death", val15, isSelective: true, targetIsPlayer: true);
					Object.Destroy((Object)(object)val15);
				};
				<>c.<>9__0_2 = val3;
				obj3 = (object)val3;
			}
			PlayerAvatar.PlayerDeath += (hook_PlayerDeath)obj3;
			object obj4 = <>c.<>9__0_3;
			if (obj4 == null)
			{
				hook_TumbleStart val4 = delegate(orig_TumbleStart orig, PlayerAvatar self)
				{
					//IL_0014: Unknown result type (might be due to invalid IL or missing references)
					//IL_001a: Expected O, but got Unknown
					//IL_0026: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self);
					Debug.Log((object)"Repo Randomizer: TumbleStart");
					GameObject val14 = new GameObject();
					val14.transform.position = ((Component)self).transform.position;
					EntropyEngine.getMoonHost().queueHook("Tumble", val14, isSelective: true, targetIsPlayer: true);
					Object.Destroy((Object)(object)val14);
				};
				<>c.<>9__0_3 = val4;
				obj4 = (object)val4;
			}
			PlayerAvatar.TumbleStart += (hook_TumbleStart)obj4;
			object obj5 = <>c.<>9__0_4;
			if (obj5 == null)
			{
				hook_StandToCrouch val5 = delegate(orig_StandToCrouch orig, PlayerAvatar self)
				{
					//IL_0014: Unknown result type (might be due to invalid IL or missing references)
					//IL_001a: Expected O, but got Unknown
					//IL_0026: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self);
					Debug.Log((object)"Repo Randomizer: Crouch");
					GameObject val13 = new GameObject();
					val13.transform.position = ((Component)self).transform.position;
					EntropyEngine.getMoonHost().queueHook("Crouch", val13, isSelective: true, targetIsPlayer: true);
					Object.Destroy((Object)(object)val13);
				};
				<>c.<>9__0_4 = val5;
				obj5 = (object)val5;
			}
			PlayerAvatar.StandToCrouch += (hook_StandToCrouch)obj5;
			object obj6 = <>c.<>9__0_5;
			if (obj6 == null)
			{
				hook_HealedOther val6 = delegate(orig_HealedOther orig, PlayerAvatar self)
				{
					//IL_0014: Unknown result type (might be due to invalid IL or missing references)
					//IL_001a: Expected O, but got Unknown
					//IL_0026: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self);
					Debug.Log((object)"Repo Randomizer: Heal Other Player");
					GameObject val12 = new GameObject();
					val12.transform.position = ((Component)self).transform.position;
					EntropyEngine.getMoonHost().queueHook("HealOther", val12, isSelective: true, targetIsPlayer: true);
					Object.Destroy((Object)(object)val12);
				};
				<>c.<>9__0_5 = val6;
				obj6 = (object)val6;
			}
			PlayerAvatar.HealedOther += (hook_HealedOther)obj6;
			object obj7 = <>c.<>9__0_6;
			if (obj7 == null)
			{
				hook_Slide val7 = delegate(orig_Slide orig, PlayerAvatar self)
				{
					//IL_0014: Unknown result type (might be due to invalid IL or missing references)
					//IL_001a: Expected O, but got Unknown
					//IL_0026: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self);
					Debug.Log((object)"Repo Randomizer: Slide");
					GameObject val11 = new GameObject();
					val11.transform.position = ((Component)self).transform.position;
					EntropyEngine.getMoonHost().queueHook("Slide", val11, isSelective: true, targetIsPlayer: true);
					Object.Destroy((Object)(object)val11);
				};
				<>c.<>9__0_6 = val7;
				obj7 = (object)val7;
			}
			PlayerAvatar.Slide += (hook_Slide)obj7;
			object obj8 = <>c.<>9__0_7;
			if (obj8 == null)
			{
				hook_Footstep val8 = delegate(orig_Footstep orig, PlayerAvatar self, SoundType soundType)
				{
					//IL_0003: Unknown result type (might be due to invalid IL or missing references)
					//IL_0050: Unknown result type (might be due to invalid IL or missing references)
					//IL_0056: Expected O, but got Unknown
					//IL_0062: Unknown result type (might be due to invalid IL or missing references)
					//IL_0015: Unknown result type (might be due to invalid IL or missing references)
					//IL_001b: Expected O, but got Unknown
					//IL_0027: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self, soundType);
					if (self.isSprinting)
					{
						GameObject val9 = new GameObject();
						val9.transform.position = ((Component)self).transform.position;
						EntropyEngine.getMoonHost().queueHook("Sprint", val9, isSelective: true, targetIsPlayer: true);
						Object.Destroy((Object)(object)val9);
					}
					else
					{
						GameObject val10 = new GameObject();
						val10.transform.position = ((Component)self).transform.position;
						EntropyEngine.getMoonHost().queueHook("Walk", val10, isSelective: true, targetIsPlayer: true);
						Object.Destroy((Object)(object)val10);
					}
				};
				<>c.<>9__0_7 = val8;
				obj8 = (object)val8;
			}
			PlayerAvatar.Footstep += (hook_Footstep)obj8;
		}
	}
	public class PlayerHooksLocalized
	{
		public PlayerHooksLocalized()
		{
			Debug.Log((object)"Lethal Chaos: Hooking Player Actions (Localized)...");
		}
	}
	public class LethalNet : MonoBehaviourPun
	{
		public static Dictionary<string, Color> albedoMap = new Dictionary<string, Color>();

		public static Dictionary<string, float> meanMap = new Dictionary<string, float>();

		public PlayerAvatar GetPlayerByActorNumber(int actorNumber)
		{
			List<PlayerAvatar> playerList = GameDirector.instance.PlayerList;
			for (int i = 0; i < playerList.Count; i++)
			{
				PlayerAvatar val = playerList[i];
				if (val.photonView.Owner != null && val.photonView.Owner.ActorNumber == actorNumber)
				{
					return val;
				}
			}
			return null;
		}

		[PunRPC]
		public void TEST()
		{
			Debug.Log((object)"REPO Chaos: PUNRPC CALL");
		}

		[PunRPC]
		public void applyForce(int actorNumber)
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO CHAOS: Random Force APPLY Clientside:::");
			PlayerAvatar playerByActorNumber = GetPlayerByActorNumber(actorNumber);
			Debug.Log((object)((Object)playerByActorNumber).GetInstanceID());
			Debug.Log((object)((Object)playerByActorNumber).name);
			Debug.Log((object)playerByActorNumber.playerHealth);
			Debug.Log((object)((Component)playerByActorNumber).gameObject.transform.position);
			Debug.Log((object)"BAM");
			float num = (float)(EntropyEngine.rnd.NextDouble() * EntropyEngine.rnd.NextDouble() * 500.0);
			float num2 = (float)(EntropyEngine.rnd.NextDouble() * EntropyEngine.rnd.NextDouble() * 500.0);
			float num3 = (float)(EntropyEngine.rnd.NextDouble() * EntropyEngine.rnd.NextDouble() * 500.0);
			playerByActorNumber.ForceImpulse(new Vector3(num, num2, num3));
		}

		[PunRPC]
		public void applyTumble(int actorNumber)
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO CHAOS: Random Force APPLY Clientside:::");
			PlayerAvatar playerByActorNumber = GetPlayerByActorNumber(actorNumber);
			Debug.Log((object)((Object)playerByActorNumber).GetInstanceID());
			Debug.Log((object)((Object)playerByActorNumber).name);
			Debug.Log((object)playerByActorNumber.playerHealth);
			Debug.Log((object)((Component)playerByActorNumber).gameObject.transform.position);
			Debug.Log((object)"BAM");
			float num = (float)(EntropyEngine.rnd.NextDouble() * EntropyEngine.rnd.NextDouble() * 500.0);
			float num2 = (float)(EntropyEngine.rnd.NextDouble() * EntropyEngine.rnd.NextDouble() * 500.0);
			float num3 = (float)(EntropyEngine.rnd.NextDouble() * EntropyEngine.rnd.NextDouble() * 500.0);
			playerByActorNumber.tumble.TumbleSet(true, true);
			playerByActorNumber.tumble.TumbleForce(new Vector3(num, num2, num3));
			playerByActorNumber.ForceImpulse(new Vector3(num, num2, num3));
		}

		[PunRPC]
		public void upgradeStrength(int actorNumber)
		{
			Debug.Log((object)"REPO CHAOS: Strength Upgrade:::");
			PlayerAvatar playerByActorNumber = GetPlayerByActorNumber(actorNumber);
			PunManager.instance.UpgradePlayerThrowStrength(playerByActorNumber.steamID);
			playerByActorNumber.ChatMessageSend("Strength Upgrade Complete", false);
		}

		[PunRPC]
		public void upgradeSprint(int actorNumber)
		{
			Debug.Log((object)"REPO CHAOS: Sprint Upgrade:::");
			PlayerAvatar playerByActorNumber = GetPlayerByActorNumber(actorNumber);
			PunManager.instance.UpgradePlayerSprintSpeed(playerByActorNumber.steamID);
			playerByActorNumber.ChatMessageSend("Sprint Upgrade Complete", false);
		}

		[PunRPC]
		public void upgradeTumble(int actorNumber)
		{
			Debug.Log((object)"REPO CHAOS: Tumble Upgrade:::");
			PlayerAvatar playerByActorNumber = GetPlayerByActorNumber(actorNumber);
			PunManager.instance.UpgradePlayerTumbleLaunch(playerByActorNumber.steamID);
			playerByActorNumber.ChatMessageSend("Tumble Upgrade Complete", false);
		}

		[PunRPC]
		public void upgradeHealth(int actorNumber)
		{
			Debug.Log((object)"REPO CHAOS: Health Upgrade:::");
			PlayerAvatar playerByActorNumber = GetPlayerByActorNumber(actorNumber);
			PunManager.instance.UpgradePlayerHealth(playerByActorNumber.steamID);
			playerByActorNumber.ChatMessageSend("Health Upgrade Complete", false);
		}

		[PunRPC]
		public void upgradeStamina(int actorNumber)
		{
			Debug.Log((object)"REPO CHAOS: Stamina Upgrade:::");
			PlayerAvatar playerByActorNumber = GetPlayerByActorNumber(actorNumber);
			PunManager.instance.UpgradePlayerEnergy(playerByActorNumber.steamID);
			playerByActorNumber.ChatMessageSend("Stamina Upgrade Complete", false);
		}

		[PunRPC]
		public void showLove(int actorNumber)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"REPO CHAOS: Sharing the Love:::");
			PlayerAvatar playerByActorNumber = GetPlayerByActorNumber(actorNumber);
			ValuableLovePotion val = new ValuableLovePotion();
			Color val2 = default(Color);
			((Color)(ref val2))..ctor(1f, 0.3f, 0.6f, 1f);
			ChatManager.instance.PossessChatScheduleStart(10);
			ChatManager.instance.PossessChat((PossessChatID)1, val.GenerateAffectionateSentence(), 1f, val2, 0f, false, 0, (UnityEvent)null);
			ChatManager.instance.PossessChatScheduleEnd();
			Object.Destroy((Object)(object)val);
		}

		[PunRPC]
		public void soundPlay(int actorNumber, string name)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			PlayerAvatar playerByActorNumber = GetPlayerByActorNumber(actorNumber);
			AudioClip[] array = Resources.FindObjectsOfTypeAll<AudioClip>();
			AudioClip[] array2 = array;
			foreach (AudioClip val in array2)
			{
				if (((Object)val).name.Equals(name))
				{
					AudioSource.PlayClipAtPoint(val, ((Component)playerByActorNumber).gameObject.transform.position);
				}
			}
		}

		public async void healLoop(int actorNumber)
		{
			PlayerAvatar actor = GetPlayerByActorNumber(actorNumber);
			int heal = EntropyEngine.rnd.Next(0, 40);
			for (int i = 0; i < heal; i++)
			{
				await Task.Delay(200);
				actor.playerHealth.Heal(1, true);
			}
		}

		[PunRPC]
		public void fastHeal(int actorNumber)
		{
			healLoop(actorNumber);
		}

		public async void dmgLoop(int actorNumber)
		{
			PlayerAvatar actor = GetPlayerByActorNumber(actorNumber);
			int heal = EntropyEngine.rnd.Next(0, (int)((float)actor.playerHealth.health * 0.2f));
			for (int i = 0; i < heal; i++)
			{
				await Task.Delay(200);
				actor.playerHealth.Hurt(1, true, -1);
			}
		}

		[PunRPC]
		public void fastDmg(int actorNumber)
		{
			dmgLoop(actorNumber);
		}

		[PunRPC]
		public void directHeal(int actorNumber, int amount)
		{
			dmgLoop(actorNumber);
		}

		[PunRPC]
		public void tempPitchUp(int actorNumber)
		{
			Debug.Log((object)"REPO CHAOS: tempPitchUp:::");
			PlayerVoiceChat[] array = Object.FindObjectsOfType<PlayerVoiceChat>();
			PlayerVoiceChat[] array2 = array;
			foreach (PlayerVoiceChat val in array2)
			{
				val.OverridePitch(1f + 4f * (float)EntropyEngine.rnd.NextDouble(), 6f, 16f, 10f, true);
			}
		}

		[PunRPC]
		public void tempPitchDown(int actorNumber)
		{
			Debug.Log((object)"REPO CHAOS: tempPitchDown:::");
			PlayerVoiceChat[] array = Object.FindObjectsOfType<PlayerVoiceChat>();
			PlayerVoiceChat[] array2 = array;
			foreach (PlayerVoiceChat val in array2)
			{
				val.OverridePitch((float)EntropyEngine.rnd.NextDouble(), 6f, 16f, 10f, true);
			}
		}

		public async void pitchUp(int actorNumber)
		{
			PlayerVoiceChat[] chats = Object.FindObjectsOfType<PlayerVoiceChat>();
			PlayerVoiceChat[] array = chats;
			foreach (PlayerVoiceChat chat in array)
			{
				chat.OverridePitch((float)EntropyEngine.rnd.NextDouble(), 6f, 16f, 10f, true);
			}
		}

		public async void pitchDown(int actorNumber)
		{
			PlayerAvatar actor = GetPlayerByActorNumber(actorNumber);
			PlayerAvatarVisuals playerAvatarVisuals = actor.playerAvatarVisuals;
			playerAvatarVisuals.animationSpeedMultiplier *= (float)EntropyEngine.rnd.NextDouble();
			await Task.Delay(EntropyEngine.rnd.Next(1000, 30000));
			actor.playerAvatarVisuals.animationSpeedMultiplier = 1f;
		}
	}
	[BepInPlugin("Repo_Randomizer", "Repo_Randomizer", "1.0.0")]
	public class Plugin : BaseUnityPlugin
	{
		public static class Assets
		{
			public static AssetBundle MainAssetBundle;

			public static void PopulateAssets()
			{
				string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
				MainAssetBundle = AssetBundle.LoadFromFile(Path.Combine(directoryName, "repo_randomizer"));
				if ((Object)(object)MainAssetBundle == (Object)null)
				{
					Debug.LogError((object)"Failed to load custom assets.");
				}
			}
		}

		public static Harmony _harmony;

		public static ManualLogSource Logger;

		public static EntropyEngine engine;

		public static GameObject ChaosHostRef;

		public static GameObject ChaosHost;

		public static LethalNet rpcCalls;

		public static int maxObjectCount = 20;

		public static int maxMonsterCount = 15;

		public static ConfigEntry<float> levelOfChaos;

		public static ConfigEntry<float> randomOutcomeMultiplier;

		public static ConfigEntry<float> chaosRamp;

		public static void LogDebug(string text)
		{
			Logger.LogInfo((object)text);
		}

		public static void LogProduction(string text)
		{
			Logger.LogInfo((object)text);
		}

		private void Awake()
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Expected O, but got Unknown
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Expected O, but got Unknown
			Logger = ((BaseUnityPlugin)this).Logger;
			levelOfChaos = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Level Of Chaos", 0.75f, new ConfigDescription("Increases total outcomes linked to actions. Exponential \n (You will need to generate a new seed for this to take effect)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
			randomOutcomeMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Outcome Predictability", 1f, new ConfigDescription("Overall increases the chance for individual outcomes to happen, making them predictable. Generally increases chaos. \n (You will need to generate a new seed for this to take effect)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
			chaosRamp = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Chaos Ramp", 0.06f, new ConfigDescription("Increases Level of Chaos by X amount per level. A way to make later levels much harder.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type in array)
			{
				MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				MethodInfo[] array2 = methods;
				foreach (MethodInfo methodInfo in array2)
				{
					object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
					if (customAttributes.Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
			Random.InitState((int)DateTime.Now.Ticks);
			try
			{
				Debug.Log((object)"Repo_Randomizer: Creating the Randomizer Engine...");
				Assets.PopulateAssets();
				EntropyEngine.EventHookMultiplier = 100f;
				EntropyEngine.EventChanceMultiplier = 0.3f;
				engine = new EntropyEngine();
				Logger.LogInfo((object)"REPO Randomizer: is loaded!");
			}
			catch (Exception ex)
			{
				Debug.LogError((object)("REPO Randomizer: Initialization Error -> " + ex.ToString()));
			}
			Logger.LogInfo((object)"Plugin Repo_Randomizer is loaded!");
		}
	}
	public class Accumulators
	{
		public static float itemGetMult = 1f;

		public static float enemySpawnMult = 1f;

		public static float lightningSafetyMult = 1f;

		public static float explosionSafetyMult = 1f;

		public static int outcomeCounter = 0;

		public static void resetMults()
		{
			itemGetMult = 1f;
			enemySpawnMult = 1f;
			lightningSafetyMult = 1f;
			explosionSafetyMult = 1f;
			outcomeCounter = 0;
		}
	}
	public class EventThrottler
	{
		public static float summons;

		public static float objects;

		public static int[] triggerTotals;

		public EventThrottler()
		{
			triggerTotals = new int[EntropyHost.eventTotal];
			summons = 0f;
			objects = 0f;
		}

		public bool throttleGate(int eventid, int softcap, float objectWeight, float summonWeight)
		{
			softcap = (int)((float)softcap * Event.getUniqueMult(eventid));
			if (objects >= (float)Plugin.maxObjectCount && objectWeight > 0f)
			{
				Debug.Log((object)("Lethal Chaos: Event throttled - id: " + eventid + " objects: " + objects + " max objects: " + Plugin.maxObjectCount));
				return true;
			}
			if (summons >= (float)Plugin.maxMonsterCount && summonWeight > 0f)
			{
				Debug.Log((object)("Lethal Chaos: Event throttled - id: " + eventid + " summons: " + summons + " max summons: " + Plugin.maxMonsterCount));
				return true;
			}
			if (softcapGate(eventid, softcap))
			{
				Debug.Log((object)"Lethal Chaos: Event throttled - (softcap) ");
				return true;
			}
			objects += objectWeight;
			summons += summonWeight;
			return false;
		}

		private bool softcapGate(int eventid, int softcap)
		{
			int num = triggerTotals[eventid];
			if (num > softcap)
			{
				double num2 = EntropyEngine.rnd.NextDouble();
				double num3 = Math.Pow(num - softcap, 1.149999976158142) * (double)softcap;
				if (num2 > (double)softcap / num3)
				{
					Debug.Log((object)("Softcap throttle triggered: randomroll" + num2 + " timesTriggered" + num + " divisor: " + num3 + " softcap: " + softcap));
					return true;
				}
			}
			triggerTotals[eventid]++;
			return false;
		}
	}
	public class WorldModifiers
	{
		private float chance = 0.1f;

		public static float fogChance = 0.2f;

		private Color fogColor = Random.ColorHSV(0f, 1f, 1f, 1f, 1f, 1f);

		private float meanFreePath = EntropyEngine.rnd.Next(10, 70);

		private bool fogEnabled = false;

		private float jumpForce = 12f;

		private float movementSpeed = 4.6f;

		private float playerReach = 3f;

		public static void Hooks()
		{
		}

		public void applyModifiers()
		{
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "Repo_Randomizer";

		public const string PLUGIN_NAME = "Repo_Randomizer";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}
namespace Repo_Randomizer.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}