Decompiled source of morninScrap v1.1.1

morninscrap/Cake2g.morninScrap.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalLib.Modules;
using Microsoft.CodeAnalysis;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.AI;
using morninScrap.Behaviours;
using morninScrap.Utils;

[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("Cake2g.morninScrap")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.1.1.0")]
[assembly: AssemblyInformationalVersion("1.1.1")]
[assembly: AssemblyProduct("morninScrap")]
[assembly: AssemblyTitle("Cake2g.morninScrap")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace morninScrap
{
	[BepInPlugin("Cake2g.morninScrap", "morninScrap", "1.1.1")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class morninScrap : BaseUnityPlugin
	{
		public static List<AudioClip> audioClips;

		private ConfigEntry<int> configPizzaPrice;

		private ConfigEntry<int> configCakePrice;

		private ConfigEntry<int> configFeeeneyPrice;

		private ConfigEntry<int> configClubCardRarity;

		private ConfigEntry<int> configCakeRarity;

		private ConfigEntry<int> configPizzaRarity;

		private ConfigEntry<int> configToyCarRarity;

		private ConfigEntry<int> configVerminRarity;

		private ConfigEntry<int> configGnomeRarity;

		private ConfigEntry<int> configFeeeneyRarity;

		public static morninScrap Instance { get; private set; }

		internal static ManualLogSource Logger { get; private set; }

		internal static Harmony? Harmony { get; set; }

		private void Awake()
		{
			//IL_0467: Unknown result type (might be due to invalid IL or missing references)
			//IL_046c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0472: Expected O, but got Unknown
			configPizzaPrice = ((BaseUnityPlugin)this).Config.Bind<int>("Prices", "Pizza", 99, "Cost of Pizza in the terminal (Default: 99)");
			configCakePrice = ((BaseUnityPlugin)this).Config.Bind<int>("Prices", "Cake", 60, "Cost of Cake in the terminal (Default: 60)");
			configFeeeneyPrice = ((BaseUnityPlugin)this).Config.Bind<int>("Prices", "Hockey Stick", 30, "Cost of Hockey Stick in the terminal (Default: 30)");
			configClubCardRarity = ((BaseUnityPlugin)this).Config.Bind<int>("Scrap Rarity", "Club Card Rarity", 20, "Spawn weight of Tesco Club Card (Default: 20)");
			configCakeRarity = ((BaseUnityPlugin)this).Config.Bind<int>("Scrap Rarity", "Cake", 10, "Spawn weight of Cake (Default: 10)");
			configPizzaRarity = ((BaseUnityPlugin)this).Config.Bind<int>("Scrap Rarity", "Pizza", 10, "Spawn weight of Pizza (Default: 10)");
			configToyCarRarity = ((BaseUnityPlugin)this).Config.Bind<int>("Scrap Rarity", "Toy Car", 20, "Spawn weight of Toy Car (Default: 20)");
			configGnomeRarity = ((BaseUnityPlugin)this).Config.Bind<int>("Scrap Rarity", "Gnome", 20, "Spawn weight of Gnome (Default: 20)");
			configVerminRarity = ((BaseUnityPlugin)this).Config.Bind<int>("Scrap Rarity", "Vermin", 20, "Spawn weight of Vermin (Default: 20)");
			configFeeeneyRarity = ((BaseUnityPlugin)this).Config.Bind<int>("Scrap Rarity", "Hockey Stick", 10, "Spawn weight of Hockey Stick (Default: 10)");
			Logger = ((BaseUnityPlugin)this).Logger;
			Instance = this;
			string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "morninScrap");
			AssetBundle val = AssetBundle.LoadFromFile(text);
			Item val2 = val.LoadAsset<Item>("Assets/frazerClubCard.asset");
			Utilities.FixMixerGroups(val2.spawnPrefab);
			NetworkPrefabs.RegisterNetworkPrefab(val2.spawnPrefab);
			Items.RegisterScrap(val2, configClubCardRarity.Value, (LevelTypes)(-1));
			Item val3 = val.LoadAsset<Item>("Assets/pixzaBox.asset");
			eatPizza eatPizza = val3.spawnPrefab.AddComponent<eatPizza>();
			((GrabbableObject)eatPizza).grabbable = true;
			((GrabbableObject)eatPizza).grabbableToEnemies = true;
			((GrabbableObject)eatPizza).itemProperties = val3;
			Utilities.FixMixerGroups(val3.spawnPrefab);
			Items.RegisterScrap(val3, configPizzaRarity.Value, (LevelTypes)(-1));
			TerminalNode val4 = ScriptableObject.CreateInstance<TerminalNode>();
			val4.clearPreviousText = true;
			val4.displayText = "For only 99 credits, who could resist?\n\n";
			NetworkPrefabs.RegisterNetworkPrefab(val3.spawnPrefab);
			Items.RegisterShopItem(val3, (TerminalNode)null, (TerminalNode)null, val4, configPizzaPrice.Value);
			Item val5 = val.LoadAsset<Item>("Assets/gnome.asset");
			Utilities.FixMixerGroups(val5.spawnPrefab);
			NetworkPrefabs.RegisterNetworkPrefab(val5.spawnPrefab);
			Items.RegisterScrap(val5, configGnomeRarity.Value, (LevelTypes)(-1));
			Item val6 = val.LoadAsset<Item>("Assets/cake.asset");
			eatCake eatCake = val6.spawnPrefab.AddComponent<eatCake>();
			((GrabbableObject)eatCake).grabbable = true;
			((GrabbableObject)eatCake).grabbableToEnemies = true;
			((GrabbableObject)eatCake).itemProperties = val6;
			Utilities.FixMixerGroups(val6.spawnPrefab);
			NetworkPrefabs.RegisterNetworkPrefab(val6.spawnPrefab);
			Items.RegisterScrap(val6, configCakeRarity.Value, (LevelTypes)(-1));
			TerminalNode val7 = ScriptableObject.CreateInstance<TerminalNode>();
			val7.clearPreviousText = true;
			val7.displayText = "Delicious!\n\n";
			Items.RegisterShopItem(val6, (TerminalNode)null, (TerminalNode)null, val7, configCakePrice.Value);
			Item val8 = val.LoadAsset<Item>("Assets/kenzof1.asset");
			Utilities.FixMixerGroups(val8.spawnPrefab);
			NetworkPrefabs.RegisterNetworkPrefab(val8.spawnPrefab);
			Items.RegisterScrap(val8, configToyCarRarity.Value, (LevelTypes)(-1));
			Item val9 = val.LoadAsset<Item>("Assets/rat.asset");
			Utilities.FixMixerGroups(val9.spawnPrefab);
			NetworkPrefabs.RegisterNetworkPrefab(val9.spawnPrefab);
			Items.RegisterScrap(val9, configVerminRarity.Value, (LevelTypes)(-1));
			Item val10 = val.LoadAsset<Item>("Assets/feeeney.asset");
			Utilities.FixMixerGroups(val10.spawnPrefab);
			Items.RegisterScrap(val10, configFeeeneyRarity.Value, (LevelTypes)(-1));
			TerminalNode val11 = ScriptableObject.CreateInstance<TerminalNode>();
			val11.clearPreviousText = true;
			val11.displayText = "Bonk\n\n";
			NetworkPrefabs.RegisterNetworkPrefab(val10.spawnPrefab);
			Items.RegisterShopItem(val10, (TerminalNode)null, (TerminalNode)null, val11, configFeeeneyPrice.Value);
			string text2 = "Assets/";
			audioClips = new List<AudioClip>
			{
				val.LoadAsset<AudioClip>(text2 + "Audio/gnomegremlin.ogg"),
				val.LoadAsset<AudioClip>(text2 + "Audio/BeeHiveGrab.ogg"),
				val.LoadAsset<AudioClip>(text2 + "Audio/gulp.ogg")
			};
			if (Harmony == null)
			{
				Harmony = new Harmony("Cake2g.morninScrap");
			}
			Harmony.PatchAll();
			Logger.LogInfo((object)"Cake2g.morninScrap v1.1.1 has loaded!");
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "Cake2g.morninScrap";

		public const string PLUGIN_NAME = "morninScrap";

		public const string PLUGIN_VERSION = "1.1.1";
	}
}
namespace morninScrap.Utils
{
	internal class Effects
	{
		public enum DeathAnimation
		{
			Normal,
			NoHead1,
			Spring,
			Haunted,
			Mask1,
			Mask2,
			Fire,
			CutInHalf,
			NoHead2
		}

		public static int NbOfPlayers()
		{
			return StartOfRound.Instance.connectedPlayersAmount + 1;
		}

		public static List<PlayerControllerB> GetPlayers(bool includeDead = false)
		{
			List<PlayerControllerB> list = Object.FindObjectsOfType<PlayerControllerB>().ToList();
			List<PlayerControllerB> list2 = new List<PlayerControllerB>(list);
			foreach (PlayerControllerB item in list)
			{
				if (item.playerSteamId == 0 || (!includeDead && item.isPlayerDead))
				{
					list2.Remove(item);
				}
			}
			return list2;
		}

		public static List<EnemyAI> GetEnemies(bool includeDead = false, bool includeCanDie = false)
		{
			List<EnemyAI> list = Object.FindObjectsOfType<EnemyAI>().ToList();
			List<EnemyAI> list2 = new List<EnemyAI>(list);
			if (includeDead)
			{
				return list2;
			}
			foreach (EnemyAI item in list)
			{
				if (item.isEnemyDead || (!includeCanDie && !item.enemyType.canDie))
				{
					list2.Remove(item);
				}
			}
			return list2;
		}

		public static void Damage(PlayerControllerB player, int damageNb, CauseOfDeath cause = 0, int animation = 0, bool criticalBlood = true)
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: 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)
			if (criticalBlood && player.health - damageNb <= 20)
			{
				player.bleedingHeavily = true;
			}
			player.DamagePlayer(damageNb, true, true, cause, animation, false, default(Vector3));
		}

		public static IEnumerator DamageHost(PlayerControllerB player, int damageNb, CauseOfDeath cause = 0, int animation = 0, bool criticalBlood = true)
		{
			//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)
			yield return (object)new WaitForEndOfFrame();
			Damage(player, damageNb, cause, animation, criticalBlood);
		}

		public static void Heal(ulong playerID, int health)
		{
			PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[playerID];
			val.health += health;
			if (val.health > 100)
			{
				val.health = 100;
			}
			val.criticallyInjured = false;
			val.bleedingHeavily = false;
			val.playerBodyAnimator.SetBool("Limp", false);
		}

		public static void Teleportation(PlayerControllerB player, Vector3 position, bool ship = false, bool exterior = false, bool interior = false)
		{
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			if (ship)
			{
				player.isInElevator = true;
				player.isInHangarShipRoom = true;
				player.isInsideFactory = false;
			}
			if (exterior)
			{
				player.isInElevator = false;
				player.isInHangarShipRoom = false;
				player.isInsideFactory = false;
			}
			if (interior)
			{
				player.isInElevator = false;
				player.isInHangarShipRoom = false;
				player.isInsideFactory = true;
			}
			player.averageVelocity = 0f;
			player.velocityLastFrame = Vector3.zero;
			player.TeleportPlayer(position, true, 0f, false, true);
			player.beamOutParticle.Play();
			HUDManager.Instance.ShakeCamera((ScreenShakeType)1);
		}

		public static void Explosion(Vector3 position, float range, int damage = 50, float physicsForce = 1f)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			Landmine.SpawnExplosion(position, true, range, range * 2.5f, damage, physicsForce, (GameObject)null, false);
		}

		public static void ExplosionLight(Vector3 position, float range, int damage = 10, float physicsForce = 1f)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			Landmine.SpawnExplosion(position, true, 0f, range, damage, physicsForce, (GameObject)null, false);
		}

		public static IEnumerator ExplosionHostDeath(Vector3 position, float range, int damage = 50, float physicsForce = 1f)
		{
			//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)
			yield return (object)new WaitForEndOfFrame();
			Explosion(position, range, damage, physicsForce);
		}

		public static void Knockback(Vector3 position, float range, int damage = 0, float physicsForce = 30f)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			Landmine.SpawnExplosion(position, false, 0f, range, damage, physicsForce, (GameObject)null, false);
		}

		public static void DropItem(Vector3 placingPosition = default(Vector3))
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			GameNetworkManager.Instance.localPlayerController.DiscardHeldObject(true, (NetworkObject)null, placingPosition, true);
		}

		public static void Audio(int audioID, float volume)
		{
			RoundManager.PlayRandomClip(HUDManager.Instance.UIAudio, (AudioClip[])(object)new AudioClip[1] { morninScrap.audioClips[audioID] }, false, volume, 0, 1000);
		}

		public static void Audio(int audioID, Vector3 position, float volume, bool adjust = true)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: 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_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = position;
			if (adjust)
			{
				val += Vector3.up * 2f;
			}
			AudioSource.PlayClipAtPoint(morninScrap.audioClips[audioID], val, volume);
		}

		public static void Audio(int audioID, Vector3 clientPosition, float localVolume, float clientVolume, PlayerControllerB player)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)player != (Object)null && GameNetworkManager.Instance.localPlayerController.playerClientId == player.playerClientId)
			{
				Audio(audioID, localVolume);
			}
			else
			{
				Audio(audioID, clientPosition, clientVolume);
			}
		}

		public static void Audio(int audioID, Vector3 position, float volume, float pitch, bool adjust = true)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: 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_0038: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Expected O, but got Unknown
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//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)
			AudioClip val = morninScrap.audioClips[audioID];
			Vector3 val2 = position;
			if (adjust)
			{
				val2 += Vector3.up * 2f;
			}
			GameObject val3 = new GameObject("One shot audio");
			val3.transform.position = val2;
			AudioSource val4 = (AudioSource)val3.AddComponent(typeof(AudioSource));
			val4.clip = val;
			val4.spatialBlend = 1f;
			val4.volume = volume;
			val4.pitch = pitch;
			val4.Play();
			Object.Destroy((Object)(object)val3, val.length * ((Time.timeScale < 0.01f) ? 0.01f : Time.timeScale));
		}

		public static void Audio(int[] audioIDs, Vector3 position, float volume, bool adjust = true)
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: 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_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Expected O, but got Unknown
			//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_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			AudioClip[] array = audioIDs.Select((int id) => morninScrap.audioClips[id]).ToArray();
			Vector3 val = position;
			if (adjust)
			{
				val += Vector3.up * 2f;
			}
			GameObject val2 = new GameObject("One shot audio");
			val2.transform.position = val;
			AudioSource val3 = (AudioSource)val2.AddComponent(typeof(AudioSource));
			val3.spatialBlend = 1f;
			val3.volume = volume;
			RoundManager.PlayRandomClip(val3, array, true, volume, 0, 1000);
			Object.Destroy((Object)(object)val2, array[^1].length * ((Time.timeScale < 0.01f) ? 0.01f : Time.timeScale));
		}

		public static void Message(string title, string bottom, bool warning = false)
		{
			HUDManager.Instance.DisplayTip(title, bottom, warning, false, "LC_Tip1");
		}

		public static IEnumerator Status(string text)
		{
			while (true)
			{
				HUDManager.Instance.DisplayStatusEffect(text);
				yield return (object)new WaitForSeconds(1f);
			}
		}

		public static void Spawn(SpawnableEnemyWithRarity enemy, Vector3 position)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Object.Instantiate<GameObject>(enemy.enemyType.enemyPrefab, position, Quaternion.Euler(new Vector3(0f, 0f, 0f)));
			val.GetComponentInChildren<NetworkObject>().Spawn(true);
			RoundManager.Instance.SpawnedEnemies.Add(val.GetComponent<EnemyAI>());
		}

		public static void Spawn(string scrapName, Vector3 position)
		{
			//IL_003a: 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)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			string scrapName2 = scrapName;
			SpawnableItemWithRarity val = ((IEnumerable<SpawnableItemWithRarity>)RoundManager.Instance.currentLevel.spawnableScrap).FirstOrDefault((Func<SpawnableItemWithRarity, bool>)((SpawnableItemWithRarity i) => ((Object)i.spawnableItem).name.Equals(scrapName2)));
			GameObject val2 = Object.Instantiate<GameObject>(val.spawnableItem.spawnPrefab, position, Quaternion.identity, RoundManager.Instance.spawnedScrapContainer);
			GrabbableObject component = val2.GetComponent<GrabbableObject>();
			((Component)component).transform.rotation = Quaternion.Euler(component.itemProperties.restingRotation);
			component.fallTime = 0f;
			component.scrapValue = (int)((float)Random.Range(val.spawnableItem.minValue, val.spawnableItem.maxValue) * RoundManager.Instance.scrapValueMultiplier);
			NetworkObject component2 = val2.GetComponent<NetworkObject>();
			component2.Spawn(false);
			component.FallToGround(true);
		}

		public static void SpawnQuicksand(int nb)
		{
			//IL_0049: 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_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: 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_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			Random random = new Random(StartOfRound.Instance.randomMapSeed + 2);
			GameObject[] array = (from x in GameObject.FindGameObjectsWithTag("OutsideAINode")
				orderby Vector3.Distance(x.transform.position, Vector3.zero)
				select x).ToArray();
			NavMeshHit val = default(NavMeshHit);
			for (int i = 0; i < nb; i++)
			{
				Vector3 position = array[random.Next(0, array.Length)].transform.position;
				Vector3 val2 = RoundManager.Instance.GetRandomNavMeshPositionInBoxPredictable(position, 30f, val, random, -1) + Vector3.up;
				GameObject val3 = Object.Instantiate<GameObject>(RoundManager.Instance.quicksandPrefab, val2, Quaternion.identity, RoundManager.Instance.mapPropsContainer.transform);
			}
		}
	}
}
namespace morninScrap.Patches
{
	[HarmonyPatch(typeof(TVScript))]
	public class ExampleTVPatch
	{
		[HarmonyPatch("SwitchTVLocalClient")]
		[HarmonyPrefix]
		private static void SwitchTVPrefix(TVScript __instance)
		{
			StartOfRound.Instance.shipRoomLights.SetShipLightsBoolean(__instance.tvOn);
		}
	}
}
namespace morninScrap.Behaviours
{
	public class eatCake : PhysicsProp
	{
		private int bitesLeft = 6;

		private string[] allLines = new string[1] { "Consume Cake (6/6): [LMB]" };

		public Vector3? originalPosition = null;

		public Vector3? originalRotation = null;

		public PlayerControllerB thismotherfucker = null;

		public override void SetControlTipsForItem()
		{
			((GrabbableObject)this).SetControlTipsForItem();
			if (((NetworkBehaviour)this).IsOwner && (Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null)
			{
				HUDManager.Instance.ChangeControlTipMultiple(allLines, true, ((GrabbableObject)this).itemProperties);
			}
			else
			{
				HUDManager.Instance.ClearControlTips();
			}
		}

		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			((GrabbableObject)this).ItemActivate(used, buttonDown);
			if (buttonDown && bitesLeft != 0)
			{
				thismotherfucker = ((GrabbableObject)this).playerHeldBy;
				PlayerControllerB playerHeldBy = ((GrabbableObject)this).playerHeldBy;
				PlayerControllerB playerHeldBy2 = ((GrabbableObject)this).playerHeldBy;
				playerHeldBy.movementSpeed = (playerHeldBy2.movementSpeed += 2f);
				((GrabbableObject)this).playerHeldBy.sprintMeter = 10f;
				bitesLeft--;
				PlayerControllerB playerHeldBy3 = ((GrabbableObject)this).playerHeldBy;
				((MonoBehaviour)this).StartCoroutine(CakeEffect(playerHeldBy3));
				allLines = new string[1] { "Consume Cake (" + bitesLeft + "/6): [LMB]" };
				((GrabbableObject)this).SetControlTipsForItem();
				if (((NetworkBehaviour)this).IsOwner && (Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null)
				{
					HUDManager.Instance.ChangeControlTipMultiple(allLines, true, ((GrabbableObject)this).itemProperties);
					originalPosition = ((GrabbableObject)this).itemProperties.positionOffset;
					originalRotation = ((GrabbableObject)this).itemProperties.rotationOffset;
					UpdatePosRotServerRpc(new Vector3(0.05f, 0.1f, 0.05f), ((GrabbableObject)this).itemProperties.rotationOffset);
					((GrabbableObject)this).playerHeldBy.activatingItem = true;
					((GrabbableObject)this).playerHeldBy.playerBodyAnimator.SetBool("useTZPItem", true);
				}
				else
				{
					HUDManager.Instance.ClearControlTips();
				}
				((GrabbableObject)this).SetScrapValue(((GrabbableObject)this).scrapValue = ((GrabbableObject)this).scrapValue - ((GrabbableObject)this).scrapValue / 6);
				((GrabbableObject)this).useCooldown = 12f;
				((GrabbableObject)this).RequireCooldown();
			}
		}

		private IEnumerator CakeEffect(PlayerControllerB player)
		{
			if (!((NetworkBehaviour)this).IsOwner)
			{
				yield break;
			}
			yield return (object)new WaitForSeconds(0.8f);
			AudioServerRpc(2, ((Component)thismotherfucker).transform.position, 1f, 1.8f);
			yield return (object)new WaitForSeconds(0.8f);
			UpdatePosRotServerRpc((Vector3)(originalPosition.HasValue ? originalPosition.Value : default(Vector3)), (Vector3)(originalRotation.HasValue ? originalRotation.Value : default(Vector3)));
			thismotherfucker.playerBodyAnimator.SetBool("useTZPItem", false);
			thismotherfucker.activatingItem = false;
			yield return (object)new WaitForSeconds(7f);
			PlayerControllerB obj = thismotherfucker;
			PlayerControllerB obj2 = thismotherfucker;
			obj.movementSpeed = (obj2.movementSpeed -= 4f);
			yield return (object)new WaitForSeconds(5f);
			PlayerControllerB obj3 = thismotherfucker;
			PlayerControllerB obj4 = thismotherfucker;
			obj3.movementSpeed = (obj4.movementSpeed += 2f);
			if (!thismotherfucker.isPlayerDead)
			{
				if (((NetworkBehaviour)player).IsHost)
				{
					((MonoBehaviour)this).StartCoroutine(Effects.DamageHost(thismotherfucker, 10, (CauseOfDeath)5, 7, criticalBlood: false));
				}
				else
				{
					Effects.Damage(thismotherfucker, 10, (CauseOfDeath)5, 7, criticalBlood: false);
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void AudioServerRpc(int audioID, Vector3 clientPosition, float localVolume, float clientVolume = 0f)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			AudioClientRpc(audioID, clientPosition, localVolume, (clientVolume == 0f) ? localVolume : clientVolume);
		}

		[ClientRpc]
		private void AudioClientRpc(int audioID, Vector3 clientPosition, float localVolume, float clientVolume)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			Effects.Audio(audioID, clientPosition, localVolume, clientVolume, ((GrabbableObject)this).playerHeldBy);
		}

		[ServerRpc(RequireOwnership = false)]
		private void UpdatePosRotServerRpc(Vector3 newPos, Vector3 newRot)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			UpdatePosRotClientRpc(newPos, newRot);
		}

		[ClientRpc]
		private void UpdatePosRotClientRpc(Vector3 newPos, Vector3 newRot)
		{
			//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)
			//IL_0013: 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)
			((GrabbableObject)this).itemProperties.positionOffset = newPos;
			((GrabbableObject)this).itemProperties.rotationOffset = newRot;
		}
	}
	public class eatPizza : PhysicsProp
	{
		private int bitesLeft = 6;

		private string[] allLines = new string[1] { "Consume Pizza (6/6): [LMB]" };

		public Vector3? originalPosition = null;

		public Vector3? originalRotation = null;

		public override void SetControlTipsForItem()
		{
			((GrabbableObject)this).SetControlTipsForItem();
			if (((NetworkBehaviour)this).IsOwner && (Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null)
			{
				HUDManager.Instance.ChangeControlTipMultiple(allLines, true, ((GrabbableObject)this).itemProperties);
			}
			else
			{
				HUDManager.Instance.ClearControlTips();
			}
		}

		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			((GrabbableObject)this).ItemActivate(used, buttonDown);
			if (buttonDown && bitesLeft != 0)
			{
				PlayerControllerB playerHeldBy = ((GrabbableObject)this).playerHeldBy;
				((MonoBehaviour)this).StartCoroutine(PizzaEffect(playerHeldBy));
				bitesLeft--;
				((GrabbableObject)this).SetScrapValue(((GrabbableObject)this).scrapValue = ((GrabbableObject)this).scrapValue - ((GrabbableObject)this).scrapValue / 6);
				((GrabbableObject)this).useCooldown = 5f;
				((GrabbableObject)this).RequireCooldown();
				allLines = new string[1] { "Consume Pizza (" + bitesLeft + "/6): [LMB]" };
				((GrabbableObject)this).SetControlTipsForItem();
				if (((NetworkBehaviour)this).IsOwner && (Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null)
				{
					HUDManager.Instance.ChangeControlTipMultiple(allLines, true, ((GrabbableObject)this).itemProperties);
					originalPosition = ((GrabbableObject)this).itemProperties.positionOffset;
					originalRotation = ((GrabbableObject)this).itemProperties.rotationOffset;
					UpdatePosRotServerRpc(new Vector3(0.05f, 0.1f, 0.05f), ((GrabbableObject)this).itemProperties.rotationOffset);
					((GrabbableObject)this).playerHeldBy.activatingItem = true;
					((GrabbableObject)this).playerHeldBy.playerBodyAnimator.SetBool("useTZPItem", true);
				}
				else
				{
					HUDManager.Instance.ClearControlTips();
				}
			}
		}

		private IEnumerator PizzaEffect(PlayerControllerB player)
		{
			if (((NetworkBehaviour)this).IsOwner)
			{
				yield return (object)new WaitForSeconds(0.8f);
				AudioServerRpc(2, ((Component)((GrabbableObject)this).playerHeldBy).transform.position, 1f, 1.8f);
				yield return (object)new WaitForSeconds(0.8f);
				UpdatePosRotServerRpc((Vector3)(originalPosition.HasValue ? originalPosition.Value : default(Vector3)), (Vector3)(originalRotation.HasValue ? originalRotation.Value : default(Vector3)));
				player.playerBodyAnimator.SetBool("useTZPItem", false);
				player.activatingItem = false;
				if (!player.isPlayerDead)
				{
					HealPlayerServerRpc(StartOfRound.Instance.localPlayerController.playerClientId, 20);
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void AudioServerRpc(int audioID, Vector3 clientPosition, float localVolume, float clientVolume = 0f)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			AudioClientRpc(audioID, clientPosition, localVolume, (clientVolume == 0f) ? localVolume : clientVolume);
		}

		[ClientRpc]
		private void AudioClientRpc(int audioID, Vector3 clientPosition, float localVolume, float clientVolume)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			Effects.Audio(audioID, clientPosition, localVolume, clientVolume, ((GrabbableObject)this).playerHeldBy);
		}

		[ServerRpc(RequireOwnership = false)]
		private void UpdatePosRotServerRpc(Vector3 newPos, Vector3 newRot)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			UpdatePosRotClientRpc(newPos, newRot);
		}

		[ClientRpc]
		private void UpdatePosRotClientRpc(Vector3 newPos, Vector3 newRot)
		{
			//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)
			//IL_0013: 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)
			((GrabbableObject)this).itemProperties.positionOffset = newPos;
			((GrabbableObject)this).itemProperties.rotationOffset = newRot;
		}

		[ServerRpc(RequireOwnership = false)]
		private void HealPlayerServerRpc(ulong playerID, int health)
		{
			HealPlayerClientRpc(playerID, health);
		}

		[ClientRpc]
		private void HealPlayerClientRpc(ulong playerID, int health)
		{
			Effects.Heal(playerID, health);
			if ((Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null && GameNetworkManager.Instance.localPlayerController.playerClientId == ((GrabbableObject)this).playerHeldBy.playerClientId)
			{
				HUDManager.Instance.UpdateHealthUI(100, false);
			}
		}
	}
}