Decompiled source of SellBodiesFixed v1.10.1

BepInEx/plugins/SellBodies/SellBodies.dll

Decompiled 3 months ago
using System;
using System.Collections;
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 BepInEx;
using BepInEx.Configuration;
using CleaningCompany.Misc;
using CleaningCompany.Monos;
using CleaningCompany.Patches;
using GameNetcodeStuff;
using HarmonyLib;
using LethalLib.Modules;
using Microsoft.CodeAnalysis;
using SellBodies.NetcodePatcher;
using Unity.Netcode;
using UnityEngine;

[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("SellBodies")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("SellBodies")]
[assembly: AssemblyTitle("SellBodies")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace SellBodies
{
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "SellBodies";

		public const string PLUGIN_NAME = "SellBodies";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace CleaningCompany
{
	[BepInPlugin("Entity378.sellbodies", "Sell Bodies", "1.10.1")]
	[BepInDependency("evaisa.lethallib", "0.14.4")]
	public class Plugin : BaseUnityPlugin
	{
		private readonly Harmony harmony = new Harmony("Entity378.sellbodies");

		private const string GUID = "Entity378.sellbodies";

		private const string NAME = "Sell Bodies";

		private const string VERSION = "1.10.1";

		private static string root = "Assets/LethalCompany/SellBodies/cleaningassets/";

		private Dictionary<string, int> minBodyValues;

		private Dictionary<string, bool> BodiesToDrop;

		private Dictionary<string, bool> BodiesTowHanded;

		private Dictionary<string, int> maxBodyValues;

		private Dictionary<string, float> bodyWeights;

		private Dictionary<string, string> pathToName = new Dictionary<string, string>
		{
			{
				root + "HoarderingBugBody.asset",
				"Hoarding bug"
			},
			{
				root + "BunkerSpiderBody.asset",
				"Bunker Spider"
			},
			{
				root + "CrawlerBody.asset",
				"Crawler"
			},
			{
				root + "CentipedeBody.asset",
				"Centipede"
			},
			{
				root + "NutcrackerBody.asset",
				"Nutcracker"
			},
			{
				root + "FlowerManBody.asset",
				"Flowerman"
			},
			{
				root + "BaboonHawkBody.asset",
				"Baboon hawk"
			},
			{
				root + "MouthDogBody.asset",
				"MouthDog"
			},
			{
				root + "SpringBody.asset",
				"Spring"
			},
			{
				root + "GirlBody.asset",
				"Girl"
			},
			{
				root + "ForestGiantBody.asset",
				"ForestGiant"
			},
			{
				root + "JesterBody.asset",
				"Jester"
			},
			{
				root + "BlobBody.asset",
				"Blob"
			},
			{
				root + "PufferBody.asset",
				"Puffer"
			},
			{
				root + "ManticoilBody.asset",
				"Manticoil"
			},
			{
				root + "RadMechBody.asset",
				"RadMech"
			},
			{
				root + "TulipSnakeBody.asset",
				"Tulip Snake"
			},
			{
				root + "ClaySurgeonBody.asset",
				"Clay Surgeon"
			},
			{
				root + "BushWolfBody.asset",
				"Bush Wolf"
			},
			{
				root + "CaveDwellerBody.asset",
				"Maneater"
			},
			{
				root + "ModdedEnemyPowerLevel1Body.asset",
				"ModdedEnemyPowerLevel1"
			},
			{
				root + "ModdedEnemyPowerLevel2Body.asset",
				"ModdedEnemyPowerLevel2"
			},
			{
				root + "ModdedEnemyPowerLevel3Body.asset",
				"ModdedEnemyPowerLevel3"
			}
		};

		public Dictionary<string, Item> BodySpawns = new Dictionary<string, Item>();

		public List<string> VanillaBody = new List<string>
		{
			"Flowerman", "Crawler", "Hoarding bug", "Centipede", "Bunker Spider", "Puffer", "Jester", "Blob", "Girl", "Spring",
			"Nutcracker", "Masked", "Butler", "MouthDog", "Earth Leviathan", "ForestGiant", "Baboon hawk", "RadMech", "Red Locust Bees", "Docile Locust Bees",
			"Manticoil", "Tulip Snake", "Clay Surgeon", "Bush Wolf", "Maneater"
		};

		public List<GameObject> tools = new List<GameObject>();

		private AssetBundle bundle;

		public static Plugin instance;

		public static GameObject confettiPrefab = new GameObject();

		public static AudioClip Cheer = new AudioClip();

		public static AudioClip Yippee = new AudioClip();

		public static AudioClip POP = new AudioClip();

		public static PluginConfig cfg { get; private set; }

		private void Awake()
		{
			cfg = new PluginConfig(((BaseUnityPlugin)this).Config);
			cfg.InitBindings();
			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);
					}
				}
			}
			string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "sellbodies");
			bundle = AssetBundle.LoadFromFile(text);
			confettiPrefab = bundle.LoadAsset<GameObject>("Assets/LethalCompany/SellBodies/EE/ConfettiParticle.prefab");
			Cheer = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/SellBodies/EE/Cheer.ogg");
			Yippee = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/SellBodies/EE/Yippee.ogg");
			POP = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/SellBodies/EE/POP.ogg");
			if (cfg.YIPPEE)
			{
				confettiPrefab.AddComponent<AudioSource>().clip = Yippee;
			}
			else
			{
				confettiPrefab.AddComponent<AudioSource>().clip = Cheer;
			}
			confettiPrefab.GetComponent<AudioSource>().playOnAwake = true;
			instance = this;
			ApplyConfig();
			SetupScrap();
			harmony.PatchAll();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Sell Bodies is patched!");
		}

		private void ApplyConfig()
		{
			bodyWeights = new Dictionary<string, float>
			{
				{
					root + "HoarderingBugBody.asset",
					cfg.HOARDER_WEIGHT
				},
				{
					root + "BunkerSpiderBody.asset",
					cfg.SPIDER_WEIGHT
				},
				{
					root + "CrawlerBody.asset",
					cfg.THUMPER_WEIGHT
				},
				{
					root + "NutcrackerBody.asset",
					cfg.NUTCRACKER_WEIGHT
				},
				{
					root + "CentipedeBody.asset",
					cfg.CENTIPEDE_WEIGHT
				},
				{
					root + "FlowerManBody.asset",
					cfg.BRACKEN_WEIGHT
				},
				{
					root + "BaboonHawkBody.asset",
					cfg.BABOON_WEIGHT
				},
				{
					root + "MouthDogBody.asset",
					cfg.MOUTHDOG_WEIGHT
				},
				{
					root + "SpringBody.asset",
					cfg.COILHEAD_WEIGHT
				},
				{
					root + "GirlBody.asset",
					cfg.GHOSTGIRL_WEIGHT
				},
				{
					root + "ForestGiantBody.asset",
					cfg.FORESTKEEPER_WEIGHT
				},
				{
					root + "JesterBody.asset",
					cfg.JESTER_WEIGHT
				},
				{
					root + "BlobBody.asset",
					cfg.HYGRODORE_WEIGHT
				},
				{
					root + "PufferBody.asset",
					cfg.SPORELIZARD_WEIGHT
				},
				{
					root + "ManticoilBody.asset",
					cfg.MANTICOIL_WEIGHT
				},
				{
					root + "RadMechBody.asset",
					cfg.RADMECH_WEIGHT
				},
				{
					root + "TulipSnakeBody.asset",
					cfg.TULIPSNAKE_WEIGHT
				},
				{
					root + "ClaySurgeonBody.asset",
					cfg.CLAYSURGEON_WEIGHT
				},
				{
					root + "BushWolfBody.asset",
					cfg.BUSHWOLF_WEIGHT
				},
				{
					root + "CaveDwellerBody.asset",
					cfg.MANEATER_WEIGHT
				},
				{
					root + "ModdedEnemyPowerLevel1Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL1_WEIGHT
				},
				{
					root + "ModdedEnemyPowerLevel2Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL2_WEIGHT
				},
				{
					root + "ModdedEnemyPowerLevel3Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL3_WEIGHT
				}
			};
			maxBodyValues = new Dictionary<string, int>
			{
				{
					root + "HoarderingBugBody.asset",
					cfg.HOARDER_MAX
				},
				{
					root + "BunkerSpiderBody.asset",
					cfg.SPIDER_MAX
				},
				{
					root + "CrawlerBody.asset",
					cfg.THUMPER_MAX
				},
				{
					root + "NutcrackerBody.asset",
					cfg.NUTCRACKER_MAX
				},
				{
					root + "CentipedeBody.asset",
					cfg.CENTIPEDE_MAX
				},
				{
					root + "FlowerManBody.asset",
					cfg.BRACKEN_MAX
				},
				{
					root + "BaboonHawkBody.asset",
					cfg.BABOON_MAX
				},
				{
					root + "MouthDogBody.asset",
					cfg.MOUTHDOG_MAX
				},
				{
					root + "SpringBody.asset",
					cfg.COILHEAD_MAX
				},
				{
					root + "GirlBody.asset",
					cfg.GHOSTGIRL_MAX
				},
				{
					root + "ForestGiantBody.asset",
					cfg.FORESTKEEPER_MAX
				},
				{
					root + "JesterBody.asset",
					cfg.JESTER_MAX
				},
				{
					root + "BlobBody.asset",
					cfg.HYGRODORE_MAX
				},
				{
					root + "PufferBody.asset",
					cfg.SPORELIZARD_MAX
				},
				{
					root + "ManticoilBody.asset",
					cfg.MANTICOIL_MAX
				},
				{
					root + "RadMechBody.asset",
					cfg.RADMECH_MAX
				},
				{
					root + "TulipSnakeBody.asset",
					cfg.TULIPSNAKE_MAX
				},
				{
					root + "ClaySurgeonBody.asset",
					cfg.CLAYSURGEON_MAX
				},
				{
					root + "BushWolfBody.asset",
					cfg.BUSHWOLF_MAX
				},
				{
					root + "CaveDwellerBody.asset",
					cfg.MANEATER_MAX
				},
				{
					root + "ModdedEnemyPowerLevel1Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL1_MAX
				},
				{
					root + "ModdedEnemyPowerLevel2Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL2_MAX
				},
				{
					root + "ModdedEnemyPowerLevel3Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL3_MAX
				}
			};
			minBodyValues = new Dictionary<string, int>
			{
				{
					root + "HoarderingBugBody.asset",
					cfg.HOARDER_MIN
				},
				{
					root + "BunkerSpiderBody.asset",
					cfg.SPIDER_MIN
				},
				{
					root + "CrawlerBody.asset",
					cfg.THUMPER_MIN
				},
				{
					root + "NutcrackerBody.asset",
					cfg.NUTCRACKER_MIN
				},
				{
					root + "CentipedeBody.asset",
					cfg.CENTIPEDE_MIN
				},
				{
					root + "FlowerManBody.asset",
					cfg.BRACKEN_MIN
				},
				{
					root + "BaboonHawkBody.asset",
					cfg.BABOON_MIN
				},
				{
					root + "MouthDogBody.asset",
					cfg.MOUTHDOG_MIN
				},
				{
					root + "SpringBody.asset",
					cfg.COILHEAD_MIN
				},
				{
					root + "GirlBody.asset",
					cfg.GHOSTGIRL_MIN
				},
				{
					root + "ForestGiantBody.asset",
					cfg.FORESTKEEPER_MIN
				},
				{
					root + "JesterBody.asset",
					cfg.JESTER_MIN
				},
				{
					root + "BlobBody.asset",
					cfg.HYGRODORE_MIN
				},
				{
					root + "PufferBody.asset",
					cfg.SPORELIZARD_MIN
				},
				{
					root + "ManticoilBody.asset",
					cfg.MANTICOIL_MIN
				},
				{
					root + "RadMechBody.asset",
					cfg.RADMECH_MIN
				},
				{
					root + "TulipSnakeBody.asset",
					cfg.TULIPSNAKE_MIN
				},
				{
					root + "ClaySurgeonBody.asset",
					cfg.CLAYSURGEON_MIN
				},
				{
					root + "BushWolfBody.asset",
					cfg.BUSHWOLF_MIN
				},
				{
					root + "CaveDwellerBody.asset",
					cfg.MANEATER_MIN
				},
				{
					root + "ModdedEnemyPowerLevel1Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL1_MIN
				},
				{
					root + "ModdedEnemyPowerLevel2Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL2_MIN
				},
				{
					root + "ModdedEnemyPowerLevel3Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL3_MIN
				}
			};
			BodiesToDrop = new Dictionary<string, bool>
			{
				{
					root + "HoarderingBugBody.asset",
					cfg.HOARDER
				},
				{
					root + "BunkerSpiderBody.asset",
					cfg.SPIDER
				},
				{
					root + "CrawlerBody.asset",
					cfg.THUMPER
				},
				{
					root + "NutcrackerBody.asset",
					cfg.NUTCRACKER
				},
				{
					root + "CentipedeBody.asset",
					cfg.CENTIPEDE
				},
				{
					root + "FlowerManBody.asset",
					cfg.BRACKEN
				},
				{
					root + "BaboonHawkBody.asset",
					cfg.BABOON
				},
				{
					root + "MouthDogBody.asset",
					cfg.MOUTHDOG
				},
				{
					root + "SpringBody.asset",
					cfg.COILHEAD
				},
				{
					root + "GirlBody.asset",
					cfg.GHOSTGIRL
				},
				{
					root + "ForestGiantBody.asset",
					cfg.FORESTKEEPER
				},
				{
					root + "JesterBody.asset",
					cfg.JESTER
				},
				{
					root + "BlobBody.asset",
					cfg.HYGRODORE
				},
				{
					root + "PufferBody.asset",
					cfg.SPORELIZARD
				},
				{
					root + "ManticoilBody.asset",
					cfg.MANTICOIL
				},
				{
					root + "RadMechBody.asset",
					cfg.RADMECH
				},
				{
					root + "TulipSnakeBody.asset",
					cfg.TULIPSNAKE
				},
				{
					root + "ClaySurgeonBody.asset",
					cfg.CLAYSURGEON
				},
				{
					root + "BushWolfBody.asset",
					cfg.BUSHWOLF
				},
				{
					root + "CaveDwellerBody.asset",
					cfg.MANEATER
				},
				{
					root + "ModdedEnemyPowerLevel1Body.asset",
					cfg.MODDEDENEMY
				},
				{
					root + "ModdedEnemyPowerLevel2Body.asset",
					cfg.MODDEDENEMY
				},
				{
					root + "ModdedEnemyPowerLevel3Body.asset",
					cfg.MODDEDENEMY
				}
			};
			BodiesTowHanded = new Dictionary<string, bool>
			{
				{
					root + "HoarderingBugBody.asset",
					cfg.HOARDER_TWOHANDED
				},
				{
					root + "BunkerSpiderBody.asset",
					cfg.SPIDER_TWOHANDED
				},
				{
					root + "CrawlerBody.asset",
					cfg.THUMPER_TWOHANDED
				},
				{
					root + "NutcrackerBody.asset",
					cfg.NUTCRACKER_TWOHANDED
				},
				{
					root + "CentipedeBody.asset",
					cfg.CENTIPEDE_TWOHANDED
				},
				{
					root + "FlowerManBody.asset",
					cfg.BRACKEN_TWOHANDED
				},
				{
					root + "BaboonHawkBody.asset",
					cfg.BABOON_TWOHANDED
				},
				{
					root + "MouthDogBody.asset",
					cfg.MOUTHDOG_TWOHANDED
				},
				{
					root + "SpringBody.asset",
					cfg.COILHEAD_TWOHANDED
				},
				{
					root + "GirlBody.asset",
					cfg.GHOSTGIRL_TWOHANDED
				},
				{
					root + "ForestGiantBody.asset",
					cfg.FORESTKEEPER_TWOHANDED
				},
				{
					root + "JesterBody.asset",
					cfg.JESTER_TWOHANDED
				},
				{
					root + "BlobBody.asset",
					cfg.HYGRODORE_TWOHANDED
				},
				{
					root + "PufferBody.asset",
					cfg.SPORELIZARD_TWOHANDED
				},
				{
					root + "ManticoilBody.asset",
					cfg.MANTICOIL_TWOHANDED
				},
				{
					root + "RadMechBody.asset",
					cfg.RADMECH_TWOHANDED
				},
				{
					root + "TulipSnakeBody.asset",
					cfg.TULIPSNAKE_TWOHANDED
				},
				{
					root + "ClaySurgeonBody.asset",
					cfg.CLAYSURGEON_TWOHANDED
				},
				{
					root + "BushWolfBody.asset",
					cfg.BUSHWOLF_TWOHANDED
				},
				{
					root + "CaveDwellerBody.asset",
					cfg.MANEATER_TWOHANDED
				},
				{
					root + "ModdedEnemyPowerLevel1Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL1_TWOHANDED
				},
				{
					root + "ModdedEnemyPowerLevel2Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL2_TWOHANDED
				},
				{
					root + "ModdedEnemyPowerLevel3Body.asset",
					cfg.MODDEDENEMYPOWERLEVEL3_TWOHANDED
				}
			};
		}

		private void SetupScrap()
		{
			foreach (KeyValuePair<string, string> item in pathToName)
			{
				Item val = bundle.LoadAsset<Item>(item.Key);
				Utilities.FixMixerGroups(val.spawnPrefab);
				val.twoHanded = BodiesTowHanded[item.Key];
				val.spawnPrefab.AddComponent<BodySyncer>();
				val.maxValue = maxBodyValues[item.Key];
				val.minValue = minBodyValues[item.Key];
				val.weight = bodyWeights[item.Key];
				NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab);
				Items.RegisterItem(val);
				if (BodiesToDrop[item.Key])
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)("Set " + item.Value + " to drop " + val.itemName));
					BodySpawns.Add(item.Value, val);
				}
				else
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)("Disregarding " + val.itemName + " - disabled in config"));
				}
			}
		}
	}
}
namespace CleaningCompany.Patches
{
	[HarmonyPatch(typeof(EnemyAI))]
	internal class KillEnemyPatcher
	{
		[HarmonyPrefix]
		[HarmonyPatch("KillEnemy")]
		private static void MoveBody(EnemyAI __instance)
		{
			if (!__instance.isEnemyDead)
			{
				Debug.Log((object)"KillEnemy() has been called");
				string enemyName = __instance.enemyType.enemyName;
				if (Plugin.instance.BodySpawns.ContainsKey(enemyName))
				{
					((MonoBehaviour)__instance).StartCoroutine(MoveOldBody(__instance));
				}
				else if (Plugin.cfg.MODDEDENEMY && !Plugin.instance.VanillaBody.Contains(enemyName))
				{
					((MonoBehaviour)__instance).StartCoroutine(MoveOldBody(__instance));
				}
				if (Plugin.cfg.CONFETTI)
				{
					((MonoBehaviour)__instance).StartCoroutine(SpawnConfetti(__instance));
				}
			}
		}

		private static IEnumerator MoveOldBody(EnemyAI __instance)
		{
			yield return (object)new WaitForSeconds(4f);
			Vector3 newBodyPos = new Vector3(-10000f, -10000f, -10000f);
			((Component)__instance).transform.position = newBodyPos;
			__instance.SyncPositionToClients();
		}

		private static IEnumerator SpawnConfetti(EnemyAI __instance)
		{
			GameObject confetti = Object.Instantiate<GameObject>(Plugin.confettiPrefab, ((Component)__instance).transform.position, Quaternion.Euler(0f, 0f, 0f));
			yield return (object)new WaitForSeconds(5f);
			Object.Destroy((Object)(object)confetti);
		}
	}
	[HarmonyPatch(typeof(EnemyAI))]
	internal class KillEnemyServerRpcPatcher
	{
		public static Quaternion publicBodyRotation;

		public static Quaternion publicShotgunRotation;

		public static int publicShotgunPrice;

		private static ulong currentEnemy = 9999999uL;

		[HarmonyPrefix]
		[HarmonyPatch("KillEnemyServerRpc")]
		private static void SpawnScrapBody(EnemyAI __instance)
		{
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: 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_0098: 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)
			if (currentEnemy == ((NetworkBehaviour)__instance).NetworkObject.NetworkObjectId || !((NetworkBehaviour)__instance).IsHost || Object.op_Implicit((Object)(object)((Component)__instance).GetComponentInChildren<PlayerControllerB>()))
			{
				return;
			}
			currentEnemy = ((NetworkBehaviour)__instance).NetworkObject.NetworkObjectId;
			string enemyName = __instance.enemyType.enemyName;
			Vector3 position = ((Component)__instance).transform.position;
			if (Plugin.instance.BodySpawns.ContainsKey(enemyName))
			{
				if (enemyName == "Nutcracker")
				{
					((MonoBehaviour)__instance).StartCoroutine(SpawnNutcrackerBody(__instance, enemyName, position));
				}
				else
				{
					((MonoBehaviour)__instance).StartCoroutine(SpawnGenericBody(__instance, enemyName, position));
				}
			}
			else if (Plugin.cfg.MODDEDENEMY && !Plugin.instance.VanillaBody.Contains(enemyName))
			{
				((MonoBehaviour)__instance).StartCoroutine(SpawnModdedBody(__instance, position));
			}
		}

		private static IEnumerator SpawnGenericBody(EnemyAI __instance, string name, Vector3 propBodyPos)
		{
			//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)
			Quaternion propBodyRot = ((Component)__instance).transform.rotation;
			Vector3 spawnPos = propBodyPos + new Vector3(0f, 1f, 0f);
			yield return (object)new WaitForSeconds(4f);
			publicBodyRotation = propBodyRot;
			GameObject gameObjectCreated = Object.Instantiate<GameObject>(Plugin.instance.BodySpawns[name].spawnPrefab, spawnPos, propBodyRot, RoundManager.Instance.mapPropsContainer.transform);
			gameObjectCreated.GetComponent<NetworkObject>().Spawn(false);
			if (name == "Blob")
			{
				((Component)__instance).GetComponent<NetworkObject>().Despawn(true);
			}
		}

		private static IEnumerator SpawnNutcrackerBody(EnemyAI __instance, string name, Vector3 propBodyPos)
		{
			//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)
			Quaternion propBodyRot = ((Component)__instance).transform.rotation;
			Vector3 spawnPos = propBodyPos + new Vector3(0f, 1f, 0f);
			publicShotgunPrice = ((GrabbableObject)((Component)__instance).GetComponent<NutcrackerEnemyAI>().gun).scrapValue;
			((Component)((Component)__instance).GetComponent<NutcrackerEnemyAI>().gun).GetComponent<NetworkObject>().Despawn(true);
			List<Item> itemsList = StartOfRound.Instance.allItemsList.itemsList;
			foreach (Item item in itemsList)
			{
				string itemName = item.itemName;
				if (itemName == "Shotgun")
				{
					GameObject shotgunItem = Object.Instantiate<GameObject>(item.spawnPrefab, spawnPos, propBodyRot, RoundManager.Instance.mapPropsContainer.transform);
					publicShotgunRotation = propBodyRot;
					shotgunItem.GetComponent<NetworkObject>().Spawn(false);
					break;
				}
			}
			yield return (object)new WaitForSeconds(4f);
			GameObject gameObjectCreated = Object.Instantiate<GameObject>(Plugin.instance.BodySpawns[name].spawnPrefab, spawnPos, propBodyRot, RoundManager.Instance.mapPropsContainer.transform);
			publicBodyRotation = propBodyRot;
			gameObjectCreated.GetComponent<NetworkObject>().Spawn(false);
		}

		private static IEnumerator SpawnModdedBody(EnemyAI __instance, Vector3 propBodyPos)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			Quaternion propBodyRot = ((Component)__instance).transform.rotation;
			Vector3 spawnPos = propBodyPos + new Vector3(0f, 2f, 0f);
			yield return (object)new WaitForSeconds(4f);
			GameObject gameObjectCreated = ((((Component)__instance).GetComponent<EnemyAI>().enemyType.PowerLevel <= 1f) ? Object.Instantiate<GameObject>(Plugin.instance.BodySpawns["ModdedEnemyPowerLevel1"].spawnPrefab, spawnPos, propBodyRot, RoundManager.Instance.mapPropsContainer.transform) : ((((Component)__instance).GetComponent<EnemyAI>().enemyType.PowerLevel != 2f) ? Object.Instantiate<GameObject>(Plugin.instance.BodySpawns["ModdedEnemyPowerLevel3"].spawnPrefab, spawnPos, propBodyRot, RoundManager.Instance.mapPropsContainer.transform) : Object.Instantiate<GameObject>(Plugin.instance.BodySpawns["ModdedEnemyPowerLevel2"].spawnPrefab, spawnPos, propBodyRot, RoundManager.Instance.mapPropsContainer.transform)));
			publicBodyRotation = propBodyRot;
			gameObjectCreated.GetComponent<NetworkObject>().Spawn(false);
		}
	}
	[HarmonyPatch(typeof(StartOfRound))]
	internal class ShotgunPatcher
	{
		[HarmonyPostfix]
		[HarmonyPatch("Awake")]
		private static void PatchAwake(StartOfRound __instance)
		{
			List<Item> itemsList = __instance.allItemsList.itemsList;
			foreach (Item item in itemsList)
			{
				string itemName = item.itemName;
				if (itemName == "Shotgun" && (Object)(object)item.spawnPrefab.AddComponent<ShotgunSyncer>() == (Object)null)
				{
					item.spawnPrefab.AddComponent<ShotgunSyncer>();
					break;
				}
			}
		}
	}
}
namespace CleaningCompany.Monos
{
	internal class BodySyncer : NetworkBehaviour
	{
		public override void OnNetworkSpawn()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			((NetworkBehaviour)this).OnNetworkSpawn();
			if (((NetworkBehaviour)this).IsHost || ((NetworkBehaviour)this).IsServer)
			{
				Quaternion publicBodyRotation = KillEnemyServerRpcPatcher.publicBodyRotation;
				PhysicsProp component = ((Component)this).GetComponent<PhysicsProp>();
				int num = Random.Range(((GrabbableObject)component).itemProperties.minValue, ((GrabbableObject)component).itemProperties.maxValue);
				int price;
				if (!Plugin.cfg.DISABLE_MULTIPLIER)
				{
					int num2 = StartOfRound.Instance.currentLevel.maxEnemyPowerCount + StartOfRound.Instance.currentLevel.maxOutsideEnemyPowerCount;
					float num3 = ((float)num2 - Plugin.cfg.MULTIPLIER_POWER_COUNT_SUBTRACTION) / 100f * Plugin.cfg.MULTIPLIER_VALUE;
					price = num + (int)((float)num * num3);
				}
				else
				{
					price = num;
				}
				SyncDetailsClientRpc(price, publicBodyRotation, new NetworkBehaviourReference((NetworkBehaviour)(object)component));
				Debug.Log((object)"End of OnNetworkSpawn body override");
			}
		}

		[ClientRpc]
		private void SyncDetailsClientRpc(int price, Quaternion rot, NetworkBehaviourReference netRef)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Invalid comparison between Unknown and I4
			//IL_005f: 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)
			//IL_006d: 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_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(47926348u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, price);
				((FastBufferWriter)(ref val2)).WriteValueSafe(ref rot);
				((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref netRef, default(ForNetworkSerializable));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 47926348u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				PhysicsProp val3 = default(PhysicsProp);
				((NetworkBehaviourReference)(ref netRef)).TryGet<PhysicsProp>(ref val3, (NetworkManager)null);
				if ((Object)(object)val3 != (Object)null)
				{
					((GrabbableObject)val3).scrapValue = price;
					((GrabbableObject)val3).itemProperties.creditsWorth = price;
					((Component)val3).GetComponentInChildren<ScanNodeProperties>().subText = $"Value: ${price}";
					Debug.Log((object)"Successfully synced body values");
					((MonoBehaviour)this).StartCoroutine(RotateBodyClient(val3, rot));
				}
				else
				{
					Debug.LogError((object)"Failed to resolve network reference!");
				}
			}
		}

		private static IEnumerator RotateBodyClient(PhysicsProp prop, Quaternion rot)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			yield return (object)new WaitForSeconds(0f);
			while (!((GrabbableObject)prop).hasHitGround && (Object)(object)((GrabbableObject)prop).playerHeldBy == (Object)null)
			{
				Debug.Log((object)"Waiting for the body to hit the ground");
			}
			if ((Object)(object)((GrabbableObject)prop).playerHeldBy == (Object)null)
			{
				((Component)((Component)prop).GetComponent<Transform>()).transform.SetPositionAndRotation(((Component)prop).transform.position, rot);
				KillEnemyServerRpcPatcher.publicBodyRotation = default(Quaternion);
			}
		}

		protected override void __initializeVariables()
		{
			((NetworkBehaviour)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_BodySyncer()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(47926348u, new RpcReceiveHandler(__rpc_handler_47926348));
		}

		private static void __rpc_handler_47926348(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: 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)
			//IL_0071: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int price = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref price);
				Quaternion rot = default(Quaternion);
				((FastBufferReader)(ref reader)).ReadValueSafe(ref rot);
				NetworkBehaviourReference netRef = default(NetworkBehaviourReference);
				((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref netRef, default(ForNetworkSerializable));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((BodySyncer)(object)target).SyncDetailsClientRpc(price, rot, netRef);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "BodySyncer";
		}
	}
	internal class ShotgunSyncer : NetworkBehaviour
	{
		public override void OnNetworkSpawn()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: 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_003a: Unknown result type (might be due to invalid IL or missing references)
			((NetworkBehaviour)this).OnNetworkSpawn();
			if (((NetworkBehaviour)this).IsHost || ((NetworkBehaviour)this).IsServer)
			{
				Quaternion publicShotgunRotation = KillEnemyServerRpcPatcher.publicShotgunRotation;
				ShotgunItem component = ((Component)this).GetComponent<ShotgunItem>();
				int publicShotgunPrice = KillEnemyServerRpcPatcher.publicShotgunPrice;
				int ammo = 2;
				SyncDetailsClientRpc(publicShotgunPrice, publicShotgunRotation, ammo, new NetworkBehaviourReference((NetworkBehaviour)(object)component));
				Debug.Log((object)"End of OnNetworkSpawn shotgun override");
			}
		}

		[ClientRpc]
		private void SyncDetailsClientRpc(int price, Quaternion rot, int ammo, NetworkBehaviourReference netRef)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Invalid comparison between Unknown and I4
			//IL_005f: 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)
			//IL_006d: 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_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: 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_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3030958362u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, price);
				((FastBufferWriter)(ref val2)).WriteValueSafe(ref rot);
				BytePacker.WriteValueBitPacked(val2, ammo);
				((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref netRef, default(ForNetworkSerializable));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3030958362u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				ShotgunItem val3 = default(ShotgunItem);
				((NetworkBehaviourReference)(ref netRef)).TryGet<ShotgunItem>(ref val3, (NetworkManager)null);
				if ((Object)(object)val3 != (Object)null)
				{
					val3.shellsLoaded = ammo;
					((GrabbableObject)val3).scrapValue = price;
					((GrabbableObject)val3).itemProperties.creditsWorth = price;
					((Component)val3).GetComponentInChildren<ScanNodeProperties>().subText = $"Value: ${price}";
					RoundManager instance = RoundManager.Instance;
					instance.totalScrapValueInLevel += (float)price;
					Debug.Log((object)"Successfully synced shotgun values");
					((MonoBehaviour)this).StartCoroutine(RotateShotgunClient(val3, rot));
				}
				else
				{
					Debug.LogError((object)"Failed to resolve network reference!");
				}
			}
		}

		private static IEnumerator RotateShotgunClient(ShotgunItem prop, Quaternion rot)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			yield return (object)new WaitForSeconds(0f);
			while (!((GrabbableObject)prop).hasHitGround && (Object)(object)((GrabbableObject)prop).playerHeldBy == (Object)null)
			{
				Debug.Log((object)"Waiting for the body to hit the ground");
			}
			if ((Object)(object)((GrabbableObject)prop).playerHeldBy == (Object)null)
			{
				((Component)((Component)prop).GetComponent<Transform>()).transform.SetPositionAndRotation(((Component)prop).transform.position, rot);
				KillEnemyServerRpcPatcher.publicBodyRotation = default(Quaternion);
			}
		}

		protected override void __initializeVariables()
		{
			((NetworkBehaviour)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_ShotgunSyncer()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(3030958362u, new RpcReceiveHandler(__rpc_handler_3030958362));
		}

		private static void __rpc_handler_3030958362(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int price = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref price);
				Quaternion rot = default(Quaternion);
				((FastBufferReader)(ref reader)).ReadValueSafe(ref rot);
				int ammo = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref ammo);
				NetworkBehaviourReference netRef = default(NetworkBehaviourReference);
				((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref netRef, default(ForNetworkSerializable));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((ShotgunSyncer)(object)target).SyncDetailsClientRpc(price, rot, ammo, netRef);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "ShotgunSyncer";
		}
	}
}
namespace CleaningCompany.Misc
{
	public class PluginConfig
	{
		private readonly ConfigFile configFile;

		public bool SPIDER { get; set; }

		public bool THUMPER { get; set; }

		public bool NUTCRACKER { get; set; }

		public bool CENTIPEDE { get; set; }

		public bool HOARDER { get; set; }

		public bool BRACKEN { get; set; }

		public bool MOUTHDOG { get; set; }

		public bool BABOON { get; set; }

		public bool COILHEAD { get; set; }

		public bool GHOSTGIRL { get; set; }

		public bool FORESTKEEPER { get; set; }

		public bool JESTER { get; set; }

		public bool HYGRODORE { get; set; }

		public bool SPORELIZARD { get; set; }

		public bool MANTICOIL { get; set; }

		public bool RADMECH { get; set; }

		public bool TULIPSNAKE { get; set; }

		public bool CLAYSURGEON { get; set; }

		public bool BUSHWOLF { get; set; }

		public bool MANEATER { get; set; }

		public bool MODDEDENEMY { get; set; }

		public bool SPIDER_TWOHANDED { get; set; }

		public bool THUMPER_TWOHANDED { get; set; }

		public bool NUTCRACKER_TWOHANDED { get; set; }

		public bool CENTIPEDE_TWOHANDED { get; set; }

		public bool HOARDER_TWOHANDED { get; set; }

		public bool BRACKEN_TWOHANDED { get; set; }

		public bool MOUTHDOG_TWOHANDED { get; set; }

		public bool BABOON_TWOHANDED { get; set; }

		public bool COILHEAD_TWOHANDED { get; set; }

		public bool GHOSTGIRL_TWOHANDED { get; set; }

		public bool FORESTKEEPER_TWOHANDED { get; set; }

		public bool JESTER_TWOHANDED { get; set; }

		public bool HYGRODORE_TWOHANDED { get; set; }

		public bool SPORELIZARD_TWOHANDED { get; set; }

		public bool MANTICOIL_TWOHANDED { get; set; }

		public bool RADMECH_TWOHANDED { get; set; }

		public bool TULIPSNAKE_TWOHANDED { get; set; }

		public bool CLAYSURGEON_TWOHANDED { get; set; }

		public bool BUSHWOLF_TWOHANDED { get; set; }

		public bool MANEATER_TWOHANDED { get; set; }

		public bool MODDEDENEMYPOWERLEVEL1_TWOHANDED { get; set; }

		public bool MODDEDENEMYPOWERLEVEL2_TWOHANDED { get; set; }

		public bool MODDEDENEMYPOWERLEVEL3_TWOHANDED { get; set; }

		public int SPIDER_MIN { get; set; }

		public int THUMPER_MIN { get; set; }

		public int NUTCRACKER_MIN { get; set; }

		public int CENTIPEDE_MIN { get; set; }

		public int HOARDER_MIN { get; set; }

		public int BRACKEN_MIN { get; set; }

		public int MOUTHDOG_MIN { get; set; }

		public int BABOON_MIN { get; set; }

		public int COILHEAD_MIN { get; set; }

		public int GHOSTGIRL_MIN { get; set; }

		public int FORESTKEEPER_MIN { get; set; }

		public int JESTER_MIN { get; set; }

		public int HYGRODORE_MIN { get; set; }

		public int SPORELIZARD_MIN { get; set; }

		public int MANTICOIL_MIN { get; set; }

		public int RADMECH_MIN { get; set; }

		public int TULIPSNAKE_MIN { get; set; }

		public int CLAYSURGEON_MIN { get; set; }

		public int BUSHWOLF_MIN { get; set; }

		public int MANEATER_MIN { get; set; }

		public int MODDEDENEMYPOWERLEVEL1_MIN { get; set; }

		public int MODDEDENEMYPOWERLEVEL2_MIN { get; set; }

		public int MODDEDENEMYPOWERLEVEL3_MIN { get; set; }

		public int NUTCRACKER_MAX { get; set; }

		public int SPIDER_MAX { get; set; }

		public int THUMPER_MAX { get; set; }

		public int CENTIPEDE_MAX { get; set; }

		public int HOARDER_MAX { get; set; }

		public int BRACKEN_MAX { get; set; }

		public int MOUTHDOG_MAX { get; set; }

		public int BABOON_MAX { get; set; }

		public int COILHEAD_MAX { get; set; }

		public int GHOSTGIRL_MAX { get; set; }

		public int FORESTKEEPER_MAX { get; set; }

		public int JESTER_MAX { get; set; }

		public int HYGRODORE_MAX { get; set; }

		public int SPORELIZARD_MAX { get; set; }

		public int MANTICOIL_MAX { get; set; }

		public int RADMECH_MAX { get; set; }

		public int TULIPSNAKE_MAX { get; set; }

		public int CLAYSURGEON_MAX { get; set; }

		public int BUSHWOLF_MAX { get; set; }

		public int MANEATER_MAX { get; set; }

		public int MODDEDENEMYPOWERLEVEL1_MAX { get; set; }

		public int MODDEDENEMYPOWERLEVEL2_MAX { get; set; }

		public int MODDEDENEMYPOWERLEVEL3_MAX { get; set; }

		public float NUTCRACKER_WEIGHT { get; set; }

		public float SPIDER_WEIGHT { get; set; }

		public float THUMPER_WEIGHT { get; set; }

		public float CENTIPEDE_WEIGHT { get; set; }

		public float HOARDER_WEIGHT { get; set; }

		public float BRACKEN_WEIGHT { get; set; }

		public float MOUTHDOG_WEIGHT { get; set; }

		public float BABOON_WEIGHT { get; set; }

		public float COILHEAD_WEIGHT { get; set; }

		public float GHOSTGIRL_WEIGHT { get; set; }

		public float FORESTKEEPER_WEIGHT { get; set; }

		public float JESTER_WEIGHT { get; set; }

		public float HYGRODORE_WEIGHT { get; set; }

		public float SPORELIZARD_WEIGHT { get; set; }

		public float MANTICOIL_WEIGHT { get; set; }

		public float RADMECH_WEIGHT { get; set; }

		public float TULIPSNAKE_WEIGHT { get; set; }

		public float CLAYSURGEON_WEIGHT { get; set; }

		public float BUSHWOLF_WEIGHT { get; set; }

		public float MANEATER_WEIGHT { get; set; }

		public float MODDEDENEMYPOWERLEVEL1_WEIGHT { get; set; }

		public float MODDEDENEMYPOWERLEVEL2_WEIGHT { get; set; }

		public float MODDEDENEMYPOWERLEVEL3_WEIGHT { get; set; }

		public float MULTIPLIER_VALUE { get; set; }

		public float MULTIPLIER_POWER_COUNT_SUBTRACTION { get; set; }

		public bool DISABLE_MULTIPLIER { get; set; }

		public bool CONFETTI { get; set; }

		public bool YIPPEE { get; set; }

		public PluginConfig(ConfigFile cfg)
		{
			configFile = cfg;
		}

		private T ConfigEntry<T>(string section, string key, T defaultVal, string description)
		{
			return configFile.Bind<T>(section, key, defaultVal, description).Value;
		}

		public void InitBindings()
		{
			CENTIPEDE_MAX = ConfigEntry("Body Values", "Max price of Centipede Bodies", 70, "");
			CENTIPEDE_MIN = ConfigEntry("Body Values", "Min price of Centipede Bodies", 45, "");
			HOARDER_MAX = ConfigEntry("Body Values", "Max price of Hoarding Bug Bodies", 90, "");
			HOARDER_MIN = ConfigEntry("Body Values", "Min price of Hoarding Bug Bodies", 55, "");
			SPIDER_MAX = ConfigEntry("Body Values", "Max price of Spider Bodies", 110, "");
			SPIDER_MIN = ConfigEntry("Body Values", "Min price of Spider Bodies", 70, "");
			THUMPER_MAX = ConfigEntry("Body Values", "Max price of Thumper Bodies", 160, "");
			THUMPER_MIN = ConfigEntry("Body Values", "Min price of Thumper Bodies", 120, "");
			NUTCRACKER_MAX = ConfigEntry("Body Values", "Max price of Nutcracker Bodies", 150, "");
			NUTCRACKER_MIN = ConfigEntry("Body Values", "Min price of Nutcracker Bodies", 125, "");
			BRACKEN_MAX = ConfigEntry("Body Values", "Max price of Bracken Bodies", 140, "");
			BRACKEN_MIN = ConfigEntry("Body Values", "Min price of Bracken Bodies", 100, "");
			BABOON_MAX = ConfigEntry("Body Values", "Max price of Baboon Hawk Bodies", 155, "");
			BABOON_MIN = ConfigEntry("Body Values", "Min price of Baboon Hawk Bodies", 105, "");
			MOUTHDOG_MAX = ConfigEntry("Body Values", "Max price of Eyeless Dog Bodies", 200, "");
			MOUTHDOG_MIN = ConfigEntry("Body Values", "Min price of Eyeless Dog Bodies", 175, "");
			COILHEAD_MAX = ConfigEntry("Body Values", "Max price of Coil-Head Bodies", 195, "");
			COILHEAD_MIN = ConfigEntry("Body Values", "Min price of Coil-Head Bodies", 145, "");
			GHOSTGIRL_MAX = ConfigEntry("Body Values", "Max price of Ghost Girl Bodies", 250, "");
			GHOSTGIRL_MIN = ConfigEntry("Body Values", "Min price of Ghost Girl Bodies", 200, "");
			FORESTKEEPER_MAX = ConfigEntry("Body Values", "Max price of Forest Keeper Bodies", 275, "");
			FORESTKEEPER_MIN = ConfigEntry("Body Values", "Min price of Forest Keeper Bodies", 225, "");
			JESTER_MAX = ConfigEntry("Body Values", "Max price of Jester Bodies", 245, "");
			JESTER_MIN = ConfigEntry("Body Values", "Min price of Jester Bodies", 215, "");
			HYGRODORE_MAX = ConfigEntry("Body Values", "Max price of Hygrodere Bodies", 120, "");
			HYGRODORE_MIN = ConfigEntry("Body Values", "Min price of Hygrodere Bodies", 75, "");
			SPORELIZARD_MAX = ConfigEntry("Body Values", "Max price of Spore Lizard Bodies", 105, "");
			SPORELIZARD_MIN = ConfigEntry("Body Values", "Min price of Spore Lizard Bodies", 85, "");
			MANTICOIL_MAX = ConfigEntry("Body Values", "Max price of Manticoil Bodies", 15, "");
			MANTICOIL_MIN = ConfigEntry("Body Values", "Min price of Manticoil Bodies", 10, "");
			RADMECH_MAX = ConfigEntry("Body Values", "Max price of Old Bird Bodies", 300, "");
			RADMECH_MIN = ConfigEntry("Body Values", "Min price of Old Bird Bodies", 250, "");
			TULIPSNAKE_MAX = ConfigEntry("Body Values", "Max price of Tulip Snake Bodies", 40, "");
			TULIPSNAKE_MIN = ConfigEntry("Body Values", "Min price of Tulip Snake Bodies", 25, "");
			CLAYSURGEON_MAX = ConfigEntry("Body Values", "Max price of Barber Bodies", 200, "");
			CLAYSURGEON_MIN = ConfigEntry("Body Values", "Min price of Barber Bodies", 150, "");
			BUSHWOLF_MAX = ConfigEntry("Body Values", "Max price of Kidnapper Fox Bodies", 150, "");
			BUSHWOLF_MIN = ConfigEntry("Body Values", "Min price of Kidnapper Fox Bodies", 125, "");
			MANEATER_MAX = ConfigEntry("Body Values", "Max price of Maneater Bodies", 145, "");
			MANEATER_MIN = ConfigEntry("Body Values", "Min price of Maneater Bodies", 120, "");
			MODDEDENEMYPOWERLEVEL1_MAX = ConfigEntry("Body Values", "Max price of Modded Enemy Bodies With 1 Or Less PowerLevel", 100, "");
			MODDEDENEMYPOWERLEVEL1_MIN = ConfigEntry("Body Values", "Min price of Modded Enemy Bodies With 1 Or Less PowerLevel", 75, "");
			MODDEDENEMYPOWERLEVEL2_MAX = ConfigEntry("Body Values", "Max price of Modded Enemy Bodies With 2 PowerLevel", 150, "");
			MODDEDENEMYPOWERLEVEL2_MIN = ConfigEntry("Body Values", "Min price of Modded Enemy Bodies With 2 PowerLevel", 125, "");
			MODDEDENEMYPOWERLEVEL3_MAX = ConfigEntry("Body Values", "Max price of Modded Enemy Bodies With 3 Or Higher PowerLevel", 200, "");
			MODDEDENEMYPOWERLEVEL3_MIN = ConfigEntry("Body Values", "Min price of Modded Enemy Bodies With 3 Or Higher PowerLevel", 175, "");
			CENTIPEDE = ConfigEntry("Body Enabler", "Enable selling of Centipede Bodies", defaultVal: true, "");
			HOARDER = ConfigEntry("Body Enabler", "Enable selling of Hoarder Bodies", defaultVal: true, "");
			SPIDER = ConfigEntry("Body Enabler", "Enable selling of Spider Bodies", defaultVal: true, "");
			THUMPER = ConfigEntry("Body Enabler", "Enable selling of Thumper Bodies", defaultVal: true, "");
			NUTCRACKER = ConfigEntry("Body Enabler", "Enable selling of Nutcracker Bodies", defaultVal: true, "");
			MOUTHDOG = ConfigEntry("Body Enabler", "Enable selling of Eyeless Dog Bodies", defaultVal: true, "");
			BABOON = ConfigEntry("Body Enabler", "Enable selling of Baboon Hawk Bodies", defaultVal: true, "");
			BRACKEN = ConfigEntry("Body Enabler", "Enable selling of Bracken Bodies", defaultVal: true, "");
			COILHEAD = ConfigEntry("Body Enabler", "Enable selling of Coil-Head Bodies", defaultVal: true, "");
			GHOSTGIRL = ConfigEntry("Body Enabler", "Enable selling of Ghost Girl Bodies", defaultVal: true, "");
			FORESTKEEPER = ConfigEntry("Body Enabler", "Enable selling Forest Keeper Bodies", defaultVal: true, "");
			JESTER = ConfigEntry("Body Enabler", "Enable selling of Jester Bodies", defaultVal: true, "");
			HYGRODORE = ConfigEntry("Body Enabler", "Enable selling of Hygrodere Bodies", defaultVal: true, "");
			SPORELIZARD = ConfigEntry("Body Enabler", "Enable selling of Spore Lizard Bodies", defaultVal: true, "");
			MANTICOIL = ConfigEntry("Body Enabler", "Enable selling of Manticoil Bodies", defaultVal: true, "");
			RADMECH = ConfigEntry("Body Enabler", "Enable selling of Old Bird Bodies", defaultVal: true, "");
			TULIPSNAKE = ConfigEntry("Body Enabler", "Enable selling of Tulip Snake Bodies", defaultVal: true, "");
			CLAYSURGEON = ConfigEntry("Body Enabler", "Enable selling of Barber Bodies", defaultVal: true, "");
			BUSHWOLF = ConfigEntry("Body Enabler", "Enable selling of Kidnapper Fox Bodies", defaultVal: true, "");
			MANEATER = ConfigEntry("Body Enabler", "Enable selling of Maneater Bodies", defaultVal: true, "");
			MODDEDENEMY = ConfigEntry("Body Enabler", "Enable selling of Modded Enemy Bodies", defaultVal: true, "");
			CENTIPEDE_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Centipede Bodies", defaultVal: false, "");
			HOARDER_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Hoarder Bodies", defaultVal: true, "");
			SPIDER_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Spider Bodies", defaultVal: true, "");
			THUMPER_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Thumper Bodies", defaultVal: true, "");
			NUTCRACKER_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Nutcracker Bodies", defaultVal: true, "");
			MOUTHDOG_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Eyeless Dog Bodies", defaultVal: true, "");
			BABOON_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Baboon Hawk Bodies", defaultVal: true, "");
			BRACKEN_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Bracken Bodies", defaultVal: true, "");
			COILHEAD_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Coil-Head Bodies", defaultVal: true, "");
			GHOSTGIRL_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Ghost Girl Bodies", defaultVal: false, "");
			FORESTKEEPER_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Forest Keeper Bodies", defaultVal: false, "");
			JESTER_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Jester Bodies", defaultVal: true, "");
			HYGRODORE_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Hygrodere Bodies", defaultVal: true, "");
			SPORELIZARD_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Spore Lizard Bodies", defaultVal: true, "");
			MANTICOIL_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Manticoil Bodies", defaultVal: false, "");
			RADMECH_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Old Bird Bodies", defaultVal: false, "");
			TULIPSNAKE_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Tulip Snake Bodies", defaultVal: false, "");
			CLAYSURGEON_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Barber Bodies", defaultVal: true, "");
			BUSHWOLF_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Kidnapper Fox Bodies", defaultVal: false, "");
			MANEATER_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Maneater Bodies", defaultVal: false, "");
			MODDEDENEMYPOWERLEVEL1_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Modded Enemy Bodies With 1 Or Less PowerLevel", defaultVal: false, "");
			MODDEDENEMYPOWERLEVEL2_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Modded Enemy Bodies With 2 PowerLevel", defaultVal: false, "");
			MODDEDENEMYPOWERLEVEL3_TWOHANDED = ConfigEntry("Body Two-Handed", "Enable Two-Handed Modded Enemy Bodies With 3 Or Higher PowerLevel", defaultVal: false, "");
			CENTIPEDE_WEIGHT = ConfigEntry("Body Weights", "Weight of Centipede Bodies", 1.33f, "");
			HOARDER_WEIGHT = ConfigEntry("Body Weights", "Weight of Hoarding Bug Bodies", 1.48f, "");
			SPIDER_WEIGHT = ConfigEntry("Body Weights", "Weight of Spider Bodies", 1.66f, "");
			THUMPER_WEIGHT = ConfigEntry("Body Weights", "Weight of Thumper Bodies", 1.81f, "");
			NUTCRACKER_WEIGHT = ConfigEntry("Body Weights", "Weight of Nutcracker Bodies", 1.86f, "");
			MOUTHDOG_WEIGHT = ConfigEntry("Body Weights", "Weight of Eyeless Dog Bodies", 2.24f, "");
			BABOON_WEIGHT = ConfigEntry("Body Weights", "Weight of Baboon Hawk Bodies", 2f, "");
			BRACKEN_WEIGHT = ConfigEntry("Body Weights", "Weight of Bracken Bodies", 1.76f, "");
			COILHEAD_WEIGHT = ConfigEntry("Body Weights", "Weight of Coil-Head Bodies", 1.95f, "");
			GHOSTGIRL_WEIGHT = ConfigEntry("Body Weights", "Weight of Ghost Girl Bodies", 1.07f, "");
			FORESTKEEPER_WEIGHT = ConfigEntry("Body Weights", "Weight of Forest Keeper Bodies", 1.86f, "");
			JESTER_WEIGHT = ConfigEntry("Body Weights", "Weight of Jester Bodies", 1.95f, "");
			HYGRODORE_WEIGHT = ConfigEntry("Body Weights", "Weight of Hygrodere Bodies", 1.52f, "");
			SPORELIZARD_WEIGHT = ConfigEntry("Body Weights", "Weight of Spore Lizard Bodies", 1.71f, "");
			MANTICOIL_WEIGHT = ConfigEntry("Body Weights", "Weight of Manticoil Bodies", 1.11f, "");
			RADMECH_WEIGHT = ConfigEntry("Body Weights", "Weight of Old Bird Bodies", 1.62f, "");
			TULIPSNAKE_WEIGHT = ConfigEntry("Body Weights", "Weight of Tulip Snake Bodies", 1.07f, "");
			CLAYSURGEON_WEIGHT = ConfigEntry("Body Weights", "Weight of Barber Bodies", 1.76f, "");
			BUSHWOLF_WEIGHT = ConfigEntry("Body Weights", "Weight of Kidnapper Fox Bodies", 1.33f, "");
			MANEATER_WEIGHT = ConfigEntry("Body Weights", "Weight of Maneater Bodies", 1.33f, "");
			MODDEDENEMYPOWERLEVEL1_WEIGHT = ConfigEntry("Body Weights", "Weight of Modded Enemy Bodies With 1 Or Less PowerLevel", 1.33f, "");
			MODDEDENEMYPOWERLEVEL2_WEIGHT = ConfigEntry("Body Weights", "Weight of Modded Enemy Bodies With 2 PowerLevel", 1.52f, "");
			MODDEDENEMYPOWERLEVEL3_WEIGHT = ConfigEntry("Body Weights", "Weight of Modded Enemy Bodies With 3 Or Higher PowerLevel", 1.86f, "");
			MULTIPLIER_VALUE = ConfigEntry("Multiplier Options", "Multiplier Value", 4f, "Is used in the formula to calculate the multiplier (Muliplier = ((Total Power Count - Power Count Subtraction) / 100) * Multiplier Value))");
			MULTIPLIER_POWER_COUNT_SUBTRACTION = ConfigEntry("Multiplier Options", "Power Count Subtraction", 10f, "Is used in the formula to calculate the multiplier (Muliplier = ((Total Power Count - Power Count Subtraction) / 100) * Multiplier Value))");
			DISABLE_MULTIPLIER = ConfigEntry("Multiplier Options", "Disable Multiplier", defaultVal: false, "");
			CONFETTI = ConfigEntry("Confetti Options", "Enable Confetti", defaultVal: false, "");
			YIPPEE = ConfigEntry("Confetti Options", "Enable Yippe", defaultVal: false, "");
		}
	}
}
namespace SellBodies.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}