Decompiled source of Minionz v1.0.0

Minionz.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using HarmonyLib;
using ItemManager;
using JetBrains.Annotations;
using LocalizationManager;
using Microsoft.CodeAnalysis;
using Minionz.Functions;
using ServerSync;
using TMPro;
using UnityEngine;
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Core.Tokens;
using YamlDotNet.Helpers;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.Converters;
using YamlDotNet.Serialization.EventEmitters;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization.NodeDeserializers;
using YamlDotNet.Serialization.NodeTypeResolvers;
using YamlDotNet.Serialization.ObjectFactories;
using YamlDotNet.Serialization.ObjectGraphTraversalStrategies;
using YamlDotNet.Serialization.ObjectGraphVisitors;
using YamlDotNet.Serialization.Schemas;
using YamlDotNet.Serialization.TypeInspectors;
using YamlDotNet.Serialization.TypeResolvers;
using YamlDotNet.Serialization.Utilities;
using YamlDotNet.Serialization.ValueDeserializers;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Minionz")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("blacks7ar")]
[assembly: AssemblyProduct("Minionz")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("012767FA-8A90-44AC-815C-204EEE66ABB8")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.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.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace Minionz
{
	[BepInPlugin("blacks7ar.Minionz", "Minionz", "1.0.0")]
	public class Plugin : BaseUnityPlugin
	{
		public enum Toggle
		{
			On = 1,
			Off = 0
		}

		private const string modGUID = "blacks7ar.Minionz";

		public const string modName = "Minionz";

		public const string modAuthor = "blacks7ar";

		public const string modVersion = "1.0.0";

		public const string modLink = "";

		private static readonly Harmony _harmony = new Harmony("blacks7ar.Minionz");

		private static readonly ConfigSync _configSync = new ConfigSync("blacks7ar.Minionz")
		{
			DisplayName = "Minionz",
			CurrentVersion = "1.0.0",
			MinimumRequiredVersion = "1.0.0",
			ModRequired = true
		};

		private static ConfigEntry<Toggle> _serverConfigLocked;

		public static ConfigEntry<KeyboardShortcut> _unSummonKey;

		public ConfigEntry<T> config<T>(string group, string name, T value, ConfigDescription description, bool _synchronizedConfig = true)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Expected O, but got Unknown
			ConfigDescription val = new ConfigDescription(description.Description + (_synchronizedConfig ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags);
			ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val);
			_configSync.AddConfigEntry<T>(val2).SynchronizedConfig = _synchronizedConfig;
			return val2;
		}

		public void Awake()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0063: 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_007e: Expected O, but got Unknown
			Localizer.Load();
			((BaseUnityPlugin)this).Config.SaveOnConfigSet = false;
			_serverConfigLocked = config("1- ServerSync", "Lock Configuration", Toggle.On, new ConfigDescription("If On, the configuration is locked and can be changed by server admins only.", (AcceptableValueBase)null, Array.Empty<object>()));
			_configSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked);
			_unSummonKey = config<KeyboardShortcut>("2- General", "UnSummon Key", new KeyboardShortcut((KeyCode)102, (KeyCode[])(object)new KeyCode[1] { (KeyCode)304 }), new ConfigDescription("Hotkey combination to unsummon minion.", (AcceptableValueBase)null, Array.Empty<object>()), _synchronizedConfig: false);
			MinionHelper.CloneContainer();
			PrefabSetups.Init();
			((BaseUnityPlugin)this).Config.SaveOnConfigSet = true;
			((BaseUnityPlugin)this).Config.Save();
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			_harmony.PatchAll(executingAssembly);
		}

		private void OnDestroy()
		{
			((BaseUnityPlugin)this).Config.Save();
		}
	}
}
namespace Minionz.Functions
{
	public static class Helper
	{
		public static void AddClonedObject(this ZNetScene zNetScene, GameObject gameObject, bool overWrite = true)
		{
			GameObject prefab;
			if ((Object)(object)(prefab = zNetScene.GetPrefab(((Object)gameObject).name)) != (Object)null)
			{
				if (!overWrite)
				{
					return;
				}
				zNetScene.m_prefabs.Remove(prefab);
				zNetScene.m_namedPrefabs.Remove(StringExtensionMethods.GetStableHashCode(((Object)gameObject).name));
			}
			zNetScene.m_prefabs.Add(gameObject);
			zNetScene.m_namedPrefabs.Add(StringExtensionMethods.GetStableHashCode(((Object)gameObject).name), gameObject);
		}

		public static bool ZNetSceneAwake()
		{
			if ((Object)(object)ZNetScene.instance != (Object)null && ZNetScene.instance.m_prefabs.Count != 0)
			{
				return (Object)(object)ZNetScene.instance.GetPrefab("piece_workbench") != (Object)null;
			}
			return false;
		}
	}
	public static class MinionHelper
	{
		private static GameObject _CloneContainer;

		public static void CreateMinions(ZNetScene zNetScene)
		{
			//IL_0024: 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_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_0271: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0315: Unknown result type (might be due to invalid IL or missing references)
			//IL_033e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0367: Unknown result type (might be due to invalid IL or missing references)
			//IL_0390: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_040b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0434: Unknown result type (might be due to invalid IL or missing references)
			//IL_045d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0486: Unknown result type (might be due to invalid IL or missing references)
			//IL_04af: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0501: Unknown result type (might be due to invalid IL or missing references)
			//IL_052a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0553: Unknown result type (might be due to invalid IL or missing references)
			//IL_057c: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0620: Unknown result type (might be due to invalid IL or missing references)
			//IL_0649: Unknown result type (might be due to invalid IL or missing references)
			//IL_0672: Unknown result type (might be due to invalid IL or missing references)
			//IL_069b: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_0716: Unknown result type (might be due to invalid IL or missing references)
			//IL_073f: Unknown result type (might be due to invalid IL or missing references)
			CloneContainer();
			Create(zNetScene, "Abomination", "BVM_AbominationMinion", "$bvm_abominationminion", new Vector3(0.15f, 0.15f, 0.15f));
			Create(zNetScene, new StringBuilder().Append("Asksvin").ToString(), "BVM_AsksvinMinion", "$bvm_asksvinminion", new Vector3(0.3f, 0.3f, 0.3f));
			Create(zNetScene, "Bat", "BVM_BatMinion", "$bvm_batminion", new Vector3(0.5f, 0.5f, 0.5f));
			Create(zNetScene, "Blob", "BVM_BlobMinion", "$bvm_blobminion", new Vector3(0.35f, 0.35f, 0.35f));
			Create(zNetScene, "BlobElite", "BVM_BlobEliteMinion", "$bvm_blobeliteminion", new Vector3(0.3f, 0.3f, 0.3f));
			Create(zNetScene, "BlobLava", "BVM_BlobLavaMinion", "$bvm_bloblavaminion", new Vector3(0.25f, 0.25f, 0.25f));
			Create(zNetScene, "BlobTar", "BVM_BlobTarMinion", "$bvm_blobtarminion", new Vector3(0.35f, 0.35f, 0.35f));
			Create(zNetScene, "Boar", "BVM_BoarMinion", "$bvm_boarminion", new Vector3(0.55f, 0.55f, 0.55f));
			Create(zNetScene, "Bonemass", "BVM_BonemassMinion", "$bvm_bonemassminion", new Vector3(0.12f, 0.12f, 0.12f));
			Create(zNetScene, "Hen", "BVM_HenMinion", "$bvm_henminion", new Vector3(0.6f, 0.6f, 0.6f));
			Create(zNetScene, "Deathsquito", "BVM_DeathsquitoMinion", "$bvm_deathsquitominion", new Vector3(0.5f, 0.5f, 0.5f));
			Create2(zNetScene, "Deer", "BVM_DeerMinion", "$bvm_deerminion", new Vector3(0.4f, 0.4f, 0.4f));
			Create(zNetScene, "Dragon", "BVM_DragonMinion", "$bvm_dragonminion", new Vector3(0.09f, 0.09f, 0.09f));
			Create(zNetScene, "Draugr", "BVM_DraugrMinion", "$bvm_draugrminion", new Vector3(0.45f, 0.45f, 0.45f));
			Create(zNetScene, "Eikthyr", "BVM_EikthyrMinion", "$bvm_eikthyrminion", new Vector3(0.22f, 0.22f, 0.22f));
			Create(zNetScene, "Fader", "BVM_FaderMinion", "$bvm_faderminion", new Vector3(0.1f, 0.1f, 0.1f));
			Create(zNetScene, "FallenValkyrie", "BVM_FallenValkyrieMinion", "$bvm_fallenvalkyrieminion", new Vector3(0.1f, 0.1f, 0.1f));
			Create(zNetScene, "Fenring", "BVM_FenringMinion", "$bvm_fenringminion", new Vector3(0.35f, 0.35f, 0.35f));
			Create(zNetScene, "Fenring_Cultist", "BVM_FenringCultistMinion", "$bvm_fenringcultistminion", new Vector3(0.35f, 0.35f, 0.35f));
			Create(zNetScene, "Gjall", "BVM_GjallMinion", "$bvm_gjallminion", new Vector3(0.1f, 0.1f, 0.1f));
			Create(zNetScene, "Goblin", "BVM_GoblinMinion", "$bvm_goblinminion", new Vector3(0.55f, 0.55f, 0.55f));
			Create(zNetScene, "GoblinBrute", "BVM_GoblinBruteMinion", "$bvm_goblinbruteminion", new Vector3(0.25f, 0.25f, 0.25f));
			Create(zNetScene, "GoblinKing", "BVM_GoblinKingMinion", "$bvm_goblinkingminion", new Vector3(0.12f, 0.12f, 0.12f));
			Create(zNetScene, "GoblinShaman", "BVM_GoblinShamanMinion", "$bvm_goblinshamanminion", new Vector3(0.55f, 0.55f, 0.55f));
			Create(zNetScene, "Greydwarf", "BVM_GreydwarfMinion", "$bvm_greydwarfminion", new Vector3(0.35f, 0.35f, 0.35f));
			Create(zNetScene, "Greydwarf_Elite", "BVM_GreydwarfEliteMinion", "$bvm_greydwarfeliteminion", new Vector3(0.3f, 0.3f, 0.3f));
			Create(zNetScene, "Greydwarf_Shaman", "BVM_GreydwarfShamanMinion", "$bvm_greydwarfshamanminion", new Vector3(0.35f, 0.35f, 0.35f));
			Create(zNetScene, "gd_king", "BVM_ElderMinion", "$bvm_elderminion", new Vector3(0.1f, 0.1f, 0.1f));
			Create3(zNetScene, "Hare", "BVM_HareMinion", "$bvm_hareminion", new Vector3(0.45f, 0.45f, 0.45f));
			Create(zNetScene, "Hatchling", "BVM_HatchlingMinion", "$bvm_hatchlingminion", new Vector3(0.3f, 0.3f, 0.3f));
			Create(zNetScene, "Lox", "BVM_LoxMinion", "$bvm_loxminion", new Vector3(0.15f, 0.15f, 0.15f));
			Create(zNetScene, "Neck", "BVM_NeckMinion", "$bvm_neckminion", new Vector3(0.5f, 0.5f, 0.5f));
			Create(zNetScene, "Seeker", "BVM_SeekerMinion", "$bvm_seekerminion", new Vector3(0.35f, 0.35f, 0.35f));
			Create(zNetScene, "SeekerBrute", "BVM_SeekerBruteMinion", "$bvm_seekerbruteminion", new Vector3(0.25f, 0.25f, 0.25f));
			Create(zNetScene, "SeekerQueen", "BVM_SeekerQueenMinion", "$bvm_seekerqueenminion", new Vector3(0.08f, 0.08f, 0.08f));
			Create(zNetScene, "Skeleton", "BVM_SkeletonMinion", "$bvm_skeletonminion", new Vector3(0.35f, 0.35f, 0.35f));
			Create(zNetScene, "Skeleton_Poison", "BVM_SkeletonPoisonMinion", "$bvm_skeletonpoisonminion", new Vector3(0.3f, 0.3f, 0.3f));
			Create(zNetScene, "StoneGolem", "BVM_StoneGolemMinion", "$bvm_stonegolemminion", new Vector3(0.15f, 0.15f, 0.15f));
			Create(zNetScene, "Surtling", "BVM_SurtlingMinion", "$bvm_surtlingminion", new Vector3(0.5f, 0.5f, 0.5f));
			Create(zNetScene, "Charred_Melee", "BVM_CharredMeleeMinion", "$bvm_charredmeleeminion", new Vector3(0.35f, 0.35f, 0.35f));
			Create(zNetScene, "Troll", "BVM_TrollMinion", "$bvm_trollminion", new Vector3(0.12f, 0.12f, 0.12f));
			Create(zNetScene, "Ulv", "BVM_UlvMinion", "$bvm_ulvminion", new Vector3(0.4f, 0.4f, 0.4f));
			Create(zNetScene, "Volture", "BVM_VoltureMinion", "$bvm_voltureminion", new Vector3(0.25f, 0.25f, 0.25f));
			Create(zNetScene, "Wolf", "BVM_WolfMinion", "$bvm_wolfminion", new Vector3(0.4f, 0.4f, 0.4f));
			Create(zNetScene, "Wraith", "BVM_WraithMinion", "$bvm_wraithminion", new Vector3(0.3f, 0.3f, 0.3f));
			SetupAbomination(zNetScene);
			SetupBonemass(zNetScene);
			SetupElder(zNetScene);
			SetupFallenValkyrie(zNetScene);
			SetupYagluth(zNetScene);
			SetupFader(zNetScene);
			SetupGjall(zNetScene);
		}

		private static void Create(ZNetScene zNetScene, string prefabName, string newPrefabName, string name, Vector3 scale)
		{
			//IL_002f: 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_00a5: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Expected O, but got Unknown
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: 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_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: 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)
			//IL_011b: 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)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Expected O, but got Unknown
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_026f: Expected O, but got Unknown
			GameObject val = zNetScene.GetPrefab(StringExtensionMethods.GetStableHashCode(prefabName)).Clone(newPrefabName);
			val.transform.SetParent(_CloneContainer.transform, false);
			val.transform.localScale = scale;
			Humanoid component = val.GetComponent<Humanoid>();
			((Character)component).m_name = name;
			((Character)component).m_group = "PlayerMinion";
			((Character)component).m_defeatSetGlobalKey = "";
			((Character)component).m_faction = (Faction)0;
			((Character)component).m_boss = false;
			((Character)component).m_dontHideBossHud = false;
			((Character)component).m_bossEvent = "";
			((Character)component).m_aiSkipTarget = true;
			((Character)component).m_walkSpeed = 5f;
			((Character)component).m_runSpeed = 8f;
			((Character)component).m_deathEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("vfx_Place_workbench"),
					m_enabled = true,
					m_variant = -1
				}
			};
			((Character)component).m_damageModifiers = new DamageModifiers
			{
				m_blunt = (DamageModifier)3,
				m_slash = (DamageModifier)3,
				m_pierce = (DamageModifier)3,
				m_chop = (DamageModifier)3,
				m_pickaxe = (DamageModifier)3,
				m_fire = (DamageModifier)3,
				m_frost = (DamageModifier)3,
				m_lightning = (DamageModifier)3,
				m_poison = (DamageModifier)3,
				m_spirit = (DamageModifier)3
			};
			component.m_defaultItems = Array.Empty<GameObject>();
			component.m_randomWeapon = Array.Empty<GameObject>();
			component.m_randomShield = Array.Empty<GameObject>();
			component.m_randomSets = Array.Empty<ItemSet>();
			MonsterAI component2 = val.GetComponent<MonsterAI>();
			((BaseAI)component2).m_viewRange = 0f;
			((BaseAI)component2).m_hearRange = 0f;
			component2.m_alertRange = 0f;
			((BaseAI)component2).m_idleSound.m_effectPrefabs = Array.Empty<EffectData>();
			((BaseAI)component2).m_spawnMessage = "";
			((BaseAI)component2).m_deathMessage = "";
			((BaseAI)component2).m_flyAltitudeMin = 1f;
			component2.m_sleeping = false;
			component2.m_enableHuntPlayer = false;
			component2.m_attackPlayerObjects = false;
			val.RemoveComponent(typeof(CharacterDrop));
			val.RemoveComponent(typeof(Procreation));
			if (!Object.op_Implicit((Object)(object)val.GetComponent<Tameable>()))
			{
				Tameable val2 = val.AddComponent<Tameable>();
				val2.m_startsTamed = true;
				val2.m_sootheEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
				{
					new EffectData
					{
						m_prefab = zNetScene.GetPrefab("vfx_creature_soothed"),
						m_enabled = true,
						m_variant = -1
					}
				};
				val2.m_petEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
				{
					new EffectData
					{
						m_prefab = zNetScene.GetPrefab("fx_skeleton_pet"),
						m_enabled = true,
						m_variant = -1
					}
				};
				val2.m_commandable = false;
				val2.m_unsummonDistance = 0f;
				val2.m_unsummonOnOwnerLogoutSeconds = 0f;
				val2.m_unSummonEffect = ((Character)component).m_deathEffects;
			}
			else
			{
				Tameable component3 = val.GetComponent<Tameable>();
				component3.m_startsTamed = true;
				component3.m_commandable = false;
				component3.m_unsummonDistance = 0f;
				component3.m_unsummonOnOwnerLogoutSeconds = 0f;
				component3.m_unSummonEffect = ((Character)component).m_deathEffects;
				component3.m_saddleItem = null;
				component3.m_saddle = null;
				component3.m_dropSaddleOnDeath = false;
			}
			val.RemoveComponent(typeof(MovementDamage));
			zNetScene.AddClonedObject(val);
		}

		private static void Create2(ZNetScene zNetScene, string prefabName, string newPrefabName, string name, Vector3 scale)
		{
			//IL_002a: 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_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Expected O, but got Unknown
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01de: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Expected O, but got Unknown
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_0241: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_0251: Unknown result type (might be due to invalid IL or missing references)
			//IL_0256: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_029d: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bd: Expected O, but got Unknown
			//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03da: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: Expected O, but got Unknown
			//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_040b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0412: Unknown result type (might be due to invalid IL or missing references)
			//IL_041a: Expected O, but got Unknown
			//IL_044a: Unknown result type (might be due to invalid IL or missing references)
			//IL_044f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0460: Unknown result type (might be due to invalid IL or missing references)
			//IL_0467: Unknown result type (might be due to invalid IL or missing references)
			//IL_046f: Expected O, but got Unknown
			GameObject val = zNetScene.GetPrefab(prefabName).Clone(newPrefabName);
			val.transform.SetParent(_CloneContainer.transform, false);
			val.transform.localScale = scale;
			val.RemoveComponent(typeof(Character));
			Humanoid val2 = val.AddComponent<Humanoid>();
			((Character)val2).m_name = name;
			((Character)val2).m_group = "PlayerMinion";
			((Character)val2).m_faction = (Faction)0;
			((Character)val2).m_aiSkipTarget = true;
			((Character)val2).m_crouchSpeed = 2f;
			((Character)val2).m_walkSpeed = 5f;
			((Character)val2).m_speed = 1.5f;
			((Character)val2).m_turnSpeed = 80f;
			((Character)val2).m_runSpeed = 8f;
			((Character)val2).m_runTurnSpeed = 200f;
			((Character)val2).m_flySlowSpeed = 5f;
			((Character)val2).m_flyFastSpeed = 12f;
			((Character)val2).m_flyTurnSpeed = 12f;
			((Character)val2).m_acceleration = 0.5f;
			((Character)val2).m_jumpForce = 10f;
			((Character)val2).m_jumpForceForward = 0f;
			((Character)val2).m_jumpForceTiredFactor = 0.7f;
			((Character)val2).m_airControl = 0.1f;
			((Character)val2).m_canSwim = true;
			((Character)val2).m_swimDepth = 1.2f;
			((Character)val2).m_swimSpeed = 2f;
			((Character)val2).m_swimTurnSpeed = 100f;
			((Character)val2).m_swimAcceleration = 0.05f;
			((Character)val2).m_groundTilt = (GroundTiltType)1;
			((Character)val2).m_groundTiltSpeed = 50f;
			((Character)val2).m_flying = false;
			((Character)val2).m_jumpStaminaUsage = 10f;
			((Character)val2).m_disableWhileSleeping = false;
			((Character)val2).m_eye = ((Component)val2).gameObject.transform.Find("EyePos");
			((Character)val2).m_deathEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("vfx_Place_workbench"),
					m_enabled = true,
					m_variant = -1
				}
			};
			((Character)val2).m_waterEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("vfx_water_surface"),
					m_enabled = true,
					m_variant = -1
				}
			};
			((Character)val2).m_tolerateWater = true;
			((Character)val2).m_health = 10f;
			((Character)val2).m_damageModifiers = new DamageModifiers
			{
				m_blunt = (DamageModifier)3,
				m_slash = (DamageModifier)3,
				m_pierce = (DamageModifier)3,
				m_chop = (DamageModifier)3,
				m_pickaxe = (DamageModifier)3,
				m_fire = (DamageModifier)3,
				m_frost = (DamageModifier)3,
				m_lightning = (DamageModifier)3,
				m_poison = (DamageModifier)3,
				m_spirit = (DamageModifier)3
			};
			val.RemoveComponent(typeof(AnimalAI));
			MonsterAI val3 = val.AddComponent<MonsterAI>();
			((BaseAI)val3).m_viewRange = 0f;
			((BaseAI)val3).m_hearRange = 0f;
			((BaseAI)val3).m_alertedEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("sfx_deer_alerted"),
					m_enabled = true,
					m_variant = -1
				}
			};
			((BaseAI)val3).m_idleSound.m_effectPrefabs = Array.Empty<EffectData>();
			((BaseAI)val3).m_idleSoundInterval = 15f;
			((BaseAI)val3).m_idleSoundChance = 0.5f;
			((BaseAI)val3).m_pathAgentType = (AgentType)4;
			((BaseAI)val3).m_moveMinAngle = 90f;
			((BaseAI)val3).m_smoothMovement = true;
			((BaseAI)val3).m_jumpInterval = 0f;
			((BaseAI)val3).m_randomCircleInterval = 2f;
			((BaseAI)val3).m_randomMoveInterval = 60f;
			((BaseAI)val3).m_randomMoveRange = 10f;
			((BaseAI)val3).m_avoidFire = true;
			((BaseAI)val3).m_afraidOfFire = true;
			((BaseAI)val3).m_avoidWater = true;
			((BaseAI)val3).m_avoidLava = true;
			((BaseAI)val3).m_aggravatable = false;
			((BaseAI)val3).m_passiveAggresive = false;
			val3.m_alertRange = 0f;
			val3.m_attackPlayerObjects = false;
			val3.m_sleeping = false;
			val3.m_consumeRange = 1f;
			val3.m_consumeSearchRange = 10f;
			val3.m_consumeSearchInterval = 10f;
			val.RemoveComponent(typeof(CharacterDrop));
			Tameable val4 = val.AddComponent<Tameable>();
			val4.m_startsTamed = true;
			val4.m_sootheEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("vfx_creature_soothed"),
					m_enabled = true,
					m_variant = -1
				}
			};
			val4.m_petEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("fx_skeleton_pet"),
					m_enabled = true,
					m_variant = -1
				}
			};
			val4.m_commandable = false;
			val4.m_unsummonDistance = 0f;
			val4.m_unsummonOnOwnerLogoutSeconds = 0f;
			val4.m_unSummonEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("vfx_Place_workbench"),
					m_enabled = true,
					m_variant = -1
				}
			};
			zNetScene.AddClonedObject(val);
		}

		private static void Create3(ZNetScene zNetScene, string prefabName, string newPrefabName, string name, Vector3 scale)
		{
			//IL_002a: 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_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Expected O, but got Unknown
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01de: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Expected O, but got Unknown
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_0241: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_0251: Unknown result type (might be due to invalid IL or missing references)
			//IL_0256: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_029d: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bd: Expected O, but got Unknown
			//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f2: Expected O, but got Unknown
			//IL_0405: Unknown result type (might be due to invalid IL or missing references)
			//IL_040a: Unknown result type (might be due to invalid IL or missing references)
			//IL_041b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0422: Unknown result type (might be due to invalid IL or missing references)
			//IL_042a: Expected O, but got Unknown
			//IL_045a: Unknown result type (might be due to invalid IL or missing references)
			//IL_045f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0470: Unknown result type (might be due to invalid IL or missing references)
			//IL_0477: Unknown result type (might be due to invalid IL or missing references)
			//IL_047f: Expected O, but got Unknown
			GameObject val = zNetScene.GetPrefab(prefabName).Clone(newPrefabName);
			val.transform.SetParent(_CloneContainer.transform, false);
			val.transform.localScale = scale;
			val.RemoveComponent(typeof(Character));
			Humanoid val2 = val.AddComponent<Humanoid>();
			((Character)val2).m_name = name;
			((Character)val2).m_group = "PlayerMinion";
			((Character)val2).m_faction = (Faction)0;
			((Character)val2).m_aiSkipTarget = true;
			((Character)val2).m_crouchSpeed = 1f;
			((Character)val2).m_walkSpeed = 5f;
			((Character)val2).m_speed = 4f;
			((Character)val2).m_turnSpeed = 200f;
			((Character)val2).m_runSpeed = 8f;
			((Character)val2).m_runTurnSpeed = 300f;
			((Character)val2).m_flySlowSpeed = 5f;
			((Character)val2).m_flyFastSpeed = 12f;
			((Character)val2).m_flyTurnSpeed = 12f;
			((Character)val2).m_acceleration = 0.9f;
			((Character)val2).m_jumpForce = 10f;
			((Character)val2).m_jumpForceForward = 0f;
			((Character)val2).m_jumpForceTiredFactor = 0.7f;
			((Character)val2).m_airControl = 0.1f;
			((Character)val2).m_canSwim = true;
			((Character)val2).m_swimDepth = 0.72f;
			((Character)val2).m_swimSpeed = 2f;
			((Character)val2).m_swimTurnSpeed = 100f;
			((Character)val2).m_swimAcceleration = 0.05f;
			((Character)val2).m_groundTilt = (GroundTiltType)1;
			((Character)val2).m_groundTiltSpeed = 200f;
			((Character)val2).m_flying = false;
			((Character)val2).m_jumpStaminaUsage = 10f;
			((Character)val2).m_disableWhileSleeping = false;
			((Character)val2).m_eye = ((Component)val2).gameObject.transform.Find("EyePos");
			((Character)val2).m_deathEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("vfx_Place_workbench"),
					m_enabled = true,
					m_variant = -1
				}
			};
			((Character)val2).m_waterEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("vfx_water_surface"),
					m_enabled = true,
					m_variant = -1
				}
			};
			((Character)val2).m_tolerateWater = true;
			((Character)val2).m_health = 10f;
			((Character)val2).m_damageModifiers = new DamageModifiers
			{
				m_blunt = (DamageModifier)3,
				m_slash = (DamageModifier)3,
				m_pierce = (DamageModifier)3,
				m_chop = (DamageModifier)3,
				m_pickaxe = (DamageModifier)3,
				m_fire = (DamageModifier)3,
				m_frost = (DamageModifier)3,
				m_lightning = (DamageModifier)3,
				m_poison = (DamageModifier)3,
				m_spirit = (DamageModifier)3
			};
			val.RemoveComponent(typeof(AnimalAI));
			MonsterAI val3 = val.AddComponent<MonsterAI>();
			((BaseAI)val3).m_viewRange = 0f;
			((BaseAI)val3).m_hearRange = 0f;
			((BaseAI)val3).m_alertedEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("sfx_deer_alerted"),
					m_enabled = true,
					m_variant = -1
				}
			};
			((BaseAI)val3).m_idleSound.m_effectPrefabs = Array.Empty<EffectData>();
			((BaseAI)val3).m_idleSoundInterval = 15f;
			((BaseAI)val3).m_idleSoundChance = 0.5f;
			((BaseAI)val3).m_pathAgentType = (AgentType)1;
			((BaseAI)val3).m_moveMinAngle = 90f;
			((BaseAI)val3).m_smoothMovement = true;
			((BaseAI)val3).m_jumpInterval = 0f;
			((BaseAI)val3).m_randomCircleInterval = 2f;
			((BaseAI)val3).m_randomMoveInterval = 11f;
			((BaseAI)val3).m_randomMoveRange = 20f;
			((BaseAI)val3).m_avoidFire = true;
			((BaseAI)val3).m_afraidOfFire = true;
			((BaseAI)val3).m_avoidWater = true;
			((BaseAI)val3).m_avoidLava = true;
			((BaseAI)val3).m_aggravatable = false;
			((BaseAI)val3).m_passiveAggresive = false;
			val3.m_alertRange = 0f;
			val3.m_attackPlayerObjects = false;
			val3.m_sleeping = false;
			val3.m_consumeRange = 1f;
			val3.m_consumeSearchRange = 10f;
			val3.m_consumeSearchInterval = 10f;
			val.RemoveComponent(typeof(CharacterDrop));
			val.RemoveComponent(typeof(Procreation));
			Tameable val4 = val.AddComponent<Tameable>();
			val4.m_startsTamed = true;
			val4.m_sootheEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("vfx_creature_soothed"),
					m_enabled = true,
					m_variant = -1
				}
			};
			val4.m_petEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("fx_skeleton_pet"),
					m_enabled = true,
					m_variant = -1
				}
			};
			val4.m_commandable = false;
			val4.m_unsummonDistance = 0f;
			val4.m_unsummonOnOwnerLogoutSeconds = 0f;
			val4.m_unSummonEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("vfx_Place_workbench"),
					m_enabled = true,
					m_variant = -1
				}
			};
			zNetScene.AddClonedObject(val);
		}

		private static GameObject Clone(this GameObject gameObject, string name)
		{
			GameObject obj = Object.Instantiate<GameObject>(gameObject, _CloneContainer.transform, false);
			((Object)obj).name = name;
			obj.transform.SetParent(_CloneContainer.transform, false);
			return obj;
		}

		public static void CloneContainer()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Expected O, but got Unknown
			_CloneContainer = new GameObject("BVM_ClonedPrefabs");
			_CloneContainer.SetActive(false);
			Object.DontDestroyOnLoad((Object)(object)_CloneContainer);
		}

		private static void RemoveComponent(this GameObject target, Type type)
		{
			Component component = target.GetComponent(type);
			if ((Object)(object)component != (Object)null)
			{
				Object.Destroy((Object)(object)component);
			}
		}

		private static void SetupAbomination(ZNetScene zNetScene)
		{
			GameObject prefab = zNetScene.GetPrefab("BVM_AbominationMinion");
			((Component)Utils.FindChild(prefab.transform, "particles", (IterativeSearchType)0)).gameObject.SetActive(false);
			LODGroup componentInChildren = prefab.GetComponentInChildren<LODGroup>(true);
			LOD[] lODs = componentInChildren.GetLODs();
			lODs[0].screenRelativeTransitionHeight = 0.1f;
			lODs[1].screenRelativeTransitionHeight = 0.06f;
			componentInChildren.SetLODs(lODs);
			componentInChildren.RecalculateBounds();
		}

		private static void SetupBonemass(ZNetScene zNetScene)
		{
			GameObject prefab = zNetScene.GetPrefab("BVM_BonemassMinion");
			((Component)Utils.FindChild(prefab.transform, "particles", (IterativeSearchType)0)).gameObject.SetActive(false);
			LODGroup componentInChildren = prefab.GetComponentInChildren<LODGroup>(true);
			LOD[] lODs = componentInChildren.GetLODs();
			lODs[0].screenRelativeTransitionHeight = 0.06f;
			componentInChildren.SetLODs(lODs);
			componentInChildren.RecalculateBounds();
		}

		private static void SetupFallenValkyrie(ZNetScene zNetScene)
		{
			GameObject prefab = zNetScene.GetPrefab("BVM_FallenValkyrieMinion");
			((Component)Utils.FindChild(prefab.transform, "Smoke", (IterativeSearchType)0)).gameObject.SetActive(false);
			((Component)prefab.transform.Find("Visual/FallenValkyrie/Armature/root/hip/spine0/spine1/spine2/l_shoulder/l_arm0/l_arm1/l_arm2/Smoke_local")).gameObject.SetActive(false);
			((Component)prefab.transform.Find("Visual/FallenValkyrie/Armature/root/hip/spine0/spine1/spine2/l_shoulder/l_arm0/l_arm1/Smoke_local")).gameObject.SetActive(false);
			((Component)prefab.transform.Find("Visual/FallenValkyrie/Armature/root/hip/spine0/spine1/spine2/neck/head/Smoke_local")).gameObject.SetActive(false);
			((Component)prefab.transform.Find("Visual/FallenValkyrie/Armature/root/hip/spine0/spine1/spine2/r_shoulder/r_arm0/r_arm1/r_arm2/Smoke_local")).gameObject.SetActive(false);
			((Component)prefab.transform.Find("Visual/FallenValkyrie/Armature/root/hip/spine0/spine1/spine2/r_shoulder/r_arm0/r_arm1/Smoke_local")).gameObject.SetActive(false);
			((Component)prefab.transform.Find("Visual/FallenValkyrie/Armature/root/hip/spine0/spine1/Spores_World")).gameObject.SetActive(false);
		}

		private static void SetupYagluth(ZNetScene zNetScene)
		{
			GameObject prefab = zNetScene.GetPrefab("BVM_GoblinKingMinion");
			((Component)Utils.FindChild(prefab.transform, "smoke", (IterativeSearchType)0)).gameObject.SetActive(false);
			Transform obj = prefab.transform.Find("Visual/Armature/Root/Root2/Hip/Spine1/Spine2/Spine3/Point light");
			((Component)obj).gameObject.SetActive(false);
			((Behaviour)((Component)obj).gameObject.GetComponent<Light>()).enabled = false;
			Transform obj2 = prefab.transform.Find("Visual/Armature/Root/Root2/Hip/Spine1/Spine2/Spine3/Neck/Bone.007/Point light (2)");
			((Component)obj2).gameObject.SetActive(false);
			((Behaviour)((Component)obj2).gameObject.GetComponent<Light>()).enabled = false;
		}

		private static void SetupElder(ZNetScene zNetScene)
		{
			((Component)Utils.FindChild(zNetScene.GetPrefab("BVM_ElderMinion").transform, "particles", (IterativeSearchType)0)).gameObject.SetActive(false);
		}

		private static void SetupFader(ZNetScene zNetScene)
		{
			LODGroup componentInChildren = zNetScene.GetPrefab("BVM_FaderMinion").GetComponentInChildren<LODGroup>(true);
			LOD[] lODs = componentInChildren.GetLODs();
			lODs[0].screenRelativeTransitionHeight = 0.06f;
			componentInChildren.SetLODs(lODs);
			componentInChildren.RecalculateBounds();
		}

		private static void SetupGjall(ZNetScene zNetScene)
		{
			LODGroup componentInChildren = zNetScene.GetPrefab("BVM_GjallMinion").GetComponentInChildren<LODGroup>(true);
			LOD[] lODs = componentInChildren.GetLODs();
			lODs[0].screenRelativeTransitionHeight = 0.06f;
			componentInChildren.SetLODs(lODs);
			componentInChildren.RecalculateBounds();
		}
	}
	public static class MinionSetup
	{
		public static void Init(ZNetScene zNetScene)
		{
			LinkSummon(zNetScene, "bvm_minionsummon_abomination", "BVM_AbominationMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_asksvin", "BVM_AsksvinMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_bat", "BVM_BatMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_blob", "BVM_BlobMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_blobelite", "BVM_BlobEliteMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_bloblava", "BVM_BlobLavaMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_blobtar", "BVM_BlobTarMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_boar", "BVM_BoarMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_bonemass", "BVM_BonemassMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_charred", "BVM_CharredMeleeMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_deathsquito", "BVM_DeathsquitoMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_deer", "BVM_DeerMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_draugr", "BVM_DraugrMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_eikthyr", "BVM_EikthyrMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_elder", "BVM_ElderMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_fader", "BVM_FaderMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_fallenvalkyrie", "BVM_FallenValkyrieMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_fenring", "BVM_FenringMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_fenringcultist", "BVM_FenringCultistMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_gjall", "BVM_GjallMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_goblin", "BVM_GoblinMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_goblinbrute", "BVM_GoblinBruteMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_goblinshaman", "BVM_GoblinShamanMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_greydwarf", "BVM_GreydwarfMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_greydwarfelite", "BVM_GreydwarfEliteMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_greydwarfshaman", "BVM_GreydwarfShamanMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_hare", "BVM_HareMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_hatchling", "BVM_HatchlingMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_hen", "BVM_HenMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_lox", "BVM_LoxMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_moder", "BVM_DragonMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_neck", "BVM_NeckMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_seeker", "BVM_SeekerMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_seekerbrute", "BVM_SeekerBruteMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_seekerqueen", "BVM_SeekerQueenMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_skeleton", "BVM_SkeletonMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_skeletonpoison", "BVM_SkeletonPoisonMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_stonegolem", "BVM_StoneGolemMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_surtling", "BVM_SurtlingMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_troll", "BVM_TrollMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_ulv", "BVM_UlvMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_volture", "BVM_VoltureMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_wolf", "BVM_WolfMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_wraith", "BVM_WraithMinion");
			LinkSummon(zNetScene, "bvm_minionsummon_yagluth", "BVM_GoblinKingMinion");
		}

		private static void LinkSummon(ZNetScene zNetScene, string projectileName, string summonName)
		{
			//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_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Expected O, but got Unknown
			SpawnAbility component = PrefabSetups._minionBundle.LoadAsset<GameObject>(projectileName).GetComponent<SpawnAbility>();
			component.m_preSpawnDelay = 1f;
			component.m_spawnPrefab = (GameObject[])(object)new GameObject[1] { zNetScene.GetPrefab(summonName) };
			component.m_preSpawnEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
			{
				new EffectData
				{
					m_prefab = zNetScene.GetPrefab("fx_himminafl_aoe"),
					m_enabled = true,
					m_variant = -1
				}
			};
		}
	}
	[HarmonyPatch]
	public class Patches
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(ZNetScene), "Awake")]
		private static void ZNetSceneAwake_Postfix(ZNetScene __instance)
		{
			MinionHelper.CreateMinions(__instance);
			MinionSetup.Init(__instance);
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(Tameable), "GetHoverText")]
		private static void GetHoverText_Postfix(Tameable __instance, ref string __result)
		{
			//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)
			if ((Object)(object)__instance == (Object)null || __instance.m_character.IsDead() || !__instance.m_character.IsTamed() || !__instance.m_nview.IsValid() || !__instance.m_nview.IsOwner() || !((Object)((Component)__instance).gameObject).name.StartsWith("BVM_"))
			{
				return;
			}
			__result += "\n[<color=yellow><b>Left Shift+F</b></color>] Unsummon";
			KeyboardShortcut value = Plugin._unSummonKey.Value;
			if (!((KeyboardShortcut)(ref value)).IsDown())
			{
				return;
			}
			if (((Object)((Component)__instance).gameObject).name.Contains("AbominationMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab = ObjectDB.instance.GetItemPrefab("BVM_Abomination_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("AsksvinMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab2 = ObjectDB.instance.GetItemPrefab("BVM_Asksvin_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab2, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab2.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("BatMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab3 = ObjectDB.instance.GetItemPrefab("BVM_Bat_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab3, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab3.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("BlobMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab4 = ObjectDB.instance.GetItemPrefab("BVM_Blob_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab4, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab4.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("BlobEliteMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab5 = ObjectDB.instance.GetItemPrefab("BVM_BlobElite_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab5, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab5.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("BlobLavaMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab6 = ObjectDB.instance.GetItemPrefab("BVM_BlobLava_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab6, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab6.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("BlobTarMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab7 = ObjectDB.instance.GetItemPrefab("BVM_BlobTar_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab7, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab7.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("BoarMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab8 = ObjectDB.instance.GetItemPrefab("BVM_Boar_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab8, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab8.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("BonemassMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab9 = ObjectDB.instance.GetItemPrefab("BVM_Bonemass_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab9, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab9.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("HenMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab10 = ObjectDB.instance.GetItemPrefab("BVM_Hen_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab10, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab10.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("DeathsquitoMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab11 = ObjectDB.instance.GetItemPrefab("BVM_Deathsquito_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab11, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab11.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("DeerMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab12 = ObjectDB.instance.GetItemPrefab("BVM_Deer_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab12, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab12.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("DragonMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab13 = ObjectDB.instance.GetItemPrefab("BVM_Moder_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab13, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab13.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("DraugrMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab14 = ObjectDB.instance.GetItemPrefab("BVM_Draugr_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab14, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab14.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("DvergerMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab15 = ObjectDB.instance.GetItemPrefab("BVM_Dverger_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab15, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab15.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("EikthyrMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab16 = ObjectDB.instance.GetItemPrefab("BVM_Eikthyr_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab16, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab16.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("FaderMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab17 = ObjectDB.instance.GetItemPrefab("BVM_Fader_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab17, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab17.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("FallenValkyrieMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab18 = ObjectDB.instance.GetItemPrefab("BVM_FallenValkyrie_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab18, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab18.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("FenringMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab19 = ObjectDB.instance.GetItemPrefab("BVM_Fenring_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab19, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab19.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("FenringCultistMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab20 = ObjectDB.instance.GetItemPrefab("BVM_FenringCultist_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab20, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab20.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("GjallMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab21 = ObjectDB.instance.GetItemPrefab("BVM_Gjall_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab21, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab21.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("GoblinMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab22 = ObjectDB.instance.GetItemPrefab("BVM_Goblin_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab22, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab22.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("GoblinBruteMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab23 = ObjectDB.instance.GetItemPrefab("BVM_GoblinBrute_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab23, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab23.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("GoblinKingMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab24 = ObjectDB.instance.GetItemPrefab("BVM_Yagluth_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab24, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab24.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("GoblinShamanMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab25 = ObjectDB.instance.GetItemPrefab("BVM_GoblinShaman_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab25, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab25.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("GreydwarfMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab26 = ObjectDB.instance.GetItemPrefab("BVM_Greydwarf_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab26, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab26.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("GreydwarfEliteMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab27 = ObjectDB.instance.GetItemPrefab("BVM_GreydwarfElite_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab27, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab27.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("GreydwarfShamanMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab28 = ObjectDB.instance.GetItemPrefab("BVM_GreydwarfShaman_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab28, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab28.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("ElderMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab29 = ObjectDB.instance.GetItemPrefab("BVM_Elder_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab29, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab29.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("HareMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab30 = ObjectDB.instance.GetItemPrefab("BVM_Hare_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab30, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab30.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("HatchlingMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab31 = ObjectDB.instance.GetItemPrefab("BVM_Hatchling_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab31, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab31.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("LoxMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab32 = ObjectDB.instance.GetItemPrefab("BVM_Lox_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab32, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab32.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("NeckMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab33 = ObjectDB.instance.GetItemPrefab("BVM_Neck_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab33, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab33.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("SeekerMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab34 = ObjectDB.instance.GetItemPrefab("BVM_Seeker_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab34, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab34.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("SeekerBruteMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab35 = ObjectDB.instance.GetItemPrefab("BVM_SeekerBrute_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab35, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab35.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("SeekerQueenMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab36 = ObjectDB.instance.GetItemPrefab("BVM_SeekerQueen_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab36, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab36.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("SkeletonMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab37 = ObjectDB.instance.GetItemPrefab("BVM_Skeleton_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab37, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab37.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("SkeletonPoisonMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab38 = ObjectDB.instance.GetItemPrefab("BVM_SkeletonPoison_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab38, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab38.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("StoneGolemMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab39 = ObjectDB.instance.GetItemPrefab("BVM_StoneGolem_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab39, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab39.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("SurtlingMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab40 = ObjectDB.instance.GetItemPrefab("BVM_Surtling_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab40, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab40.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("CharredMeleeMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab41 = ObjectDB.instance.GetItemPrefab("BVM_Charred_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab41, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab41.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("TrollMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab42 = ObjectDB.instance.GetItemPrefab("BVM_Troll_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab42, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab42.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("UlvMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab43 = ObjectDB.instance.GetItemPrefab("BVM_Ulv_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab43, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab43.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("VoltureMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab44 = ObjectDB.instance.GetItemPrefab("BVM_Volture_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab44, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab44.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("WolfMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab45 = ObjectDB.instance.GetItemPrefab("BVM_Wolf_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab45, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab45.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
			else if (((Object)((Component)__instance).gameObject).name.Contains("WraithMinion"))
			{
				__instance.UnSummon();
				GameObject itemPrefab46 = ObjectDB.instance.GetItemPrefab("BVM_Wraith_MonsterDisk");
				if (((Humanoid)Player.m_localPlayer).m_inventory.AddItem(itemPrefab46, 1))
				{
					((Character)Player.m_localPlayer).ShowPickupMessage(itemPrefab46.GetComponent<ItemDrop>().m_itemData, 1);
				}
				else
				{
					((Character)Player.m_localPlayer).Message((MessageType)2, "$msg_noroom", 0, (Sprite)null);
				}
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SpawnAbility), "Spawn")]
		private static bool Spawn_Prefix(SpawnAbility __instance)
		{
			if (!((Object)(object)__instance == (Object)null) && __instance.m_weapon != null)
			{
				Character owner = __instance.m_owner;
				Player player = (Player)(object)((owner is Player) ? owner : null);
				if (player != null)
				{
					if (!((Object)__instance.m_weapon.m_dropPrefab).name.EndsWith("_MonsterDisk"))
					{
						return true;
					}
					if ((from character in Character.GetAllCharacters()
						where ((Object)((Component)character).gameObject).name.StartsWith("BVM_")
						select ((Component)character).GetComponent<ZNetView>() into nView
						where (Object)(object)nView != (Object)null
						select nView.GetZDO() into zDo
						where zDo != null
						select zDo.GetString(ZDOVars.s_follow, "")).Any((string text) => text == player.GetPlayerName()))
					{
						((Character)player).Message((MessageType)2, "<size=28>Only one minion can be active!", 0, (Sprite)null);
						((Humanoid)player).UnequipItem(__instance.m_weapon, true);
						return false;
					}
					((Humanoid)player).UnequipItem(__instance.m_weapon, true);
					((Humanoid)player).m_inventory.RemoveItem(__instance.m_weapon);
					return true;
				}
			}
			return true;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(Player), "TeleportTo")]
		private static void TeleportTo_Postfix(Player __instance, ref Vector3 pos, ref Quaternion rot)
		{
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: 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)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)__instance == (Object)null)
			{
				return;
			}
			foreach (Character item in from character in Character.GetAllCharacters()
				let tamable = ((Component)character).GetComponent<Tameable>()
				where character.IsTamed() && (Object)(object)tamable.m_monsterAI.GetFollowTarget() == (Object)(object)((Component)__instance).gameObject && ((Object)((Component)character).gameObject).name.StartsWith("BVM_")
				select character)
			{
				((Component)item).transform.position = pos + ((Component)__instance).transform.forward;
				((Component)item).transform.rotation = rot;
			}
		}
	}
	public static class PrefabSetups
	{
		public static AssetBundle _minionBundle;

		public static void Init()
		{
			_minionBundle = PrefabManager.RegisterAssetBundle("minionbundle");
			Item item = new Item(_minionBundle, "BVM_Abomination_MonsterDisk");
			item.Crafting.Add(CraftingTable.Workbench, 1);
			item.RequiredItems.Add("TrophyAbomination", 1);
			item.RequiredItems.Add("Stone", 10);
			item.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_abominationminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_abomination");
			Item item2 = new Item(_minionBundle, "BVM_Asksvin_MonsterDisk");
			item2.Crafting.Add(CraftingTable.Workbench, 1);
			item2.RequiredItems.Add("TrophyAsksvin", 1);
			item2.RequiredItems.Add("Stone", 10);
			item2.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_asksvinminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_asksvin");
			Item item3 = new Item(_minionBundle, "BVM_Bat_MonsterDisk");
			item3.Crafting.Add(CraftingTable.Workbench, 1);
			item3.RequiredItems.Add("Bloodbag", 1);
			item3.RequiredItems.Add("Stone", 10);
			item3.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_batminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_bat");
			Item item4 = new Item(_minionBundle, "BVM_Blob_MonsterDisk");
			item4.Crafting.Add(CraftingTable.Workbench, 1);
			item4.RequiredItems.Add("TrophyBlob", 1);
			item4.RequiredItems.Add("Stone", 10);
			item4.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_blobminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_blob");
			Item item5 = new Item(_minionBundle, "BVM_BlobElite_MonsterDisk");
			item5.Crafting.Add(CraftingTable.Workbench, 1);
			item5.RequiredItems.Add("TrophyBlob", 2);
			item5.RequiredItems.Add("Stone", 10);
			item5.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_blobeliteminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_blobelite");
			Item item6 = new Item(_minionBundle, "BVM_BlobLava_MonsterDisk");
			item6.Crafting.Add(CraftingTable.Workbench, 1);
			item6.RequiredItems.Add("SulfurStone", 1);
			item6.RequiredItems.Add("ProustitePowder", 1);
			item6.RequiredItems.Add("Stone", 10);
			item6.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_bloblavaminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_bloblava");
			Item item7 = new Item(_minionBundle, "BVM_BlobTar_MonsterDisk");
			item7.Crafting.Add(CraftingTable.Workbench, 1);
			item7.RequiredItems.Add("TrophyGrowth", 1);
			item7.RequiredItems.Add("Stone", 10);
			item7.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_blobtarminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_blobtar");
			Item item8 = new Item(_minionBundle, "BVM_Boar_MonsterDisk");
			item8.Crafting.Add(CraftingTable.Workbench, 1);
			item8.RequiredItems.Add("TrophyBoar", 1);
			item8.RequiredItems.Add("Stone", 10);
			item8.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_boarminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_boar");
			Item item9 = new Item(_minionBundle, "BVM_Bonemass_MonsterDisk");
			item9.Crafting.Add(CraftingTable.Workbench, 1);
			item9.RequiredItems.Add("TrophyBonemass", 1);
			item9.RequiredItems.Add("Stone", 10);
			item9.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_bonemassminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_bonemass");
			Item item10 = new Item(_minionBundle, "BVM_Charred_MonsterDisk");
			item10["$bvm_charred_monsterdisk 1"].Crafting.Add(CraftingTable.Workbench, 1);
			item10["$bvm_charred_monsterdisk 1"].RequiredItems.Add("TrophyCharredArcher", 1);
			item10["$bvm_charred_monsterdisk 1"].RequiredItems.Add("Stone", 10);
			item10["$bvm_charred_monsterdisk 2"].Crafting.Add(CraftingTable.Workbench, 1);
			item10["$bvm_charred_monsterdisk 2"].RequiredItems.Add("TrophyCharredMage", 1);
			item10["$bvm_charred_monsterdisk 2"].RequiredItems.Add("Stone", 10);
			item10["$bvm_charred_monsterdisk 3"].Crafting.Add(CraftingTable.Workbench, 1);
			item10["$bvm_charred_monsterdisk 3"].RequiredItems.Add("TrophyCharredMelee", 1);
			item10["$bvm_charred_monsterdisk 3"].RequiredItems.Add("Stone", 10);
			item10.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_charredminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_charred");
			Item item11 = new Item(_minionBundle, "BVM_Deathsquito_MonsterDisk");
			item11.Crafting.Add(CraftingTable.Workbench, 1);
			item11.RequiredItems.Add("TrophyDeathsquito", 1);
			item11.RequiredItems.Add("Stone", 10);
			item11.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_deathsquitominion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_deathsquito");
			Item item12 = new Item(_minionBundle, "BVM_Deer_MonsterDisk");
			item12.Crafting.Add(CraftingTable.Workbench, 1);
			item12.RequiredItems.Add("TrophyDeer", 1);
			item12.RequiredItems.Add("Stone", 10);
			item12.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_deerminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_deer");
			Item item13 = new Item(_minionBundle, "BVM_Draugr_MonsterDisk");
			item13["$bvm_draugr_monsterdisk 1"].Crafting.Add(CraftingTable.Workbench, 1);
			item13["$bvm_draugr_monsterdisk 1"].RequiredItems.Add("TrophyDraugr", 1);
			item13["$bvm_draugr_monsterdisk 1"].RequiredItems.Add("Stone", 10);
			item13["$bvm_draugr_monsterdisk 2"].Crafting.Add(CraftingTable.Workbench, 1);
			item13["$bvm_draugr_monsterdisk 2"].RequiredItems.Add("TrophyDraugrElite", 1);
			item13["$bvm_draugr_monsterdisk 2"].RequiredItems.Add("Stone", 10);
			item13["$bvm_draugr_monsterdisk 3"].Crafting.Add(CraftingTable.Workbench, 1);
			item13["$bvm_draugr_monsterdisk 3"].RequiredItems.Add("TrophyDraugrFem", 1);
			item13["$bvm_draugr_monsterdisk 3"].RequiredItems.Add("Stone", 10);
			item13.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_draugrminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_draugr");
			Item item14 = new Item(_minionBundle, "BVM_Eikthyr_MonsterDisk");
			item14.Crafting.Add(CraftingTable.Workbench, 1);
			item14.RequiredItems.Add("TrophyEikthyr", 1);
			item14.RequiredItems.Add("Stone", 10);
			item14.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_eikthyrminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_eikthyr");
			Item item15 = new Item(_minionBundle, "BVM_Elder_MonsterDisk");
			item15.Crafting.Add(CraftingTable.Workbench, 1);
			item15.RequiredItems.Add("TrophyTheElder", 1);
			item15.RequiredItems.Add("Stone", 10);
			item15.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_elderminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_elder");
			Item item16 = new Item(_minionBundle, "BVM_Fader_MonsterDisk");
			item16.Crafting.Add(CraftingTable.Workbench, 1);
			item16.RequiredItems.Add("TrophyFader", 1);
			item16.RequiredItems.Add("Stone", 10);
			item16.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_faderminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_fader");
			Item item17 = new Item(_minionBundle, "BVM_FallenValkyrie_MonsterDisk");
			item17.Crafting.Add(CraftingTable.Workbench, 1);
			item17.RequiredItems.Add("TrophyFallenValkyrie", 1);
			item17.RequiredItems.Add("Stone", 10);
			item17.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_fallenvalkyrieminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_fallenvalkyrie");
			Item item18 = new Item(_minionBundle, "BVM_Fenring_MonsterDisk");
			item18.Crafting.Add(CraftingTable.Workbench, 1);
			item18.RequiredItems.Add("TrophyFenring", 1);
			item18.RequiredItems.Add("Stone", 10);
			item18.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_fenringminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_fenring");
			Item item19 = new Item(_minionBundle, "BVM_FenringCultist_MonsterDisk");
			item19.Crafting.Add(CraftingTable.Workbench, 1);
			item19.RequiredItems.Add("TrophyCultist", 1);
			item19.RequiredItems.Add("Stone", 10);
			item19.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_fenringcultistminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_fenringcultist");
			Item item20 = new Item(_minionBundle, "BVM_Gjall_MonsterDisk");
			item20.Crafting.Add(CraftingTable.Workbench, 1);
			item20.RequiredItems.Add("TrophyGjall", 1);
			item20.RequiredItems.Add("Stone", 10);
			item20.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_gjallminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_gjall");
			Item item21 = new Item(_minionBundle, "BVM_Goblin_MonsterDisk");
			item21.Crafting.Add(CraftingTable.Workbench, 1);
			item21.RequiredItems.Add("TrophyGoblin", 1);
			item21.RequiredItems.Add("Stone", 10);
			item21.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_goblinminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_goblin");
			Item item22 = new Item(_minionBundle, "BVM_GoblinBrute_MonsterDisk");
			item22.Crafting.Add(CraftingTable.Workbench, 1);
			item22.RequiredItems.Add("TrophyGoblinBrute", 1);
			item22.RequiredItems.Add("Stone", 10);
			item22.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_goblinbruteminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_goblinbrute");
			Item item23 = new Item(_minionBundle, "BVM_GoblinShaman_MonsterDisk");
			item23.Crafting.Add(CraftingTable.Workbench, 1);
			item23.RequiredItems.Add("TrophyGoblinShaman", 1);
			item23.RequiredItems.Add("Stone", 10);
			item23.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_goblinshamanminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_goblinshaman");
			Item item24 = new Item(_minionBundle, "BVM_Greydwarf_MonsterDisk");
			item24.Crafting.Add(CraftingTable.Workbench, 1);
			item24.RequiredItems.Add("TrophyGreydwarf", 1);
			item24.RequiredItems.Add("Stone", 10);
			item24.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_greydwarfminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_greydwarf");
			Item item25 = new Item(_minionBundle, "BVM_Hare_MonsterDisk");
			item25.Crafting.Add(CraftingTable.Workbench, 1);
			item25.RequiredItems.Add("TrophyHare", 1);
			item25.RequiredItems.Add("Stone", 10);
			item25.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_hareminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_hare");
			Item item26 = new Item(_minionBundle, "BVM_Hatchling_MonsterDisk");
			item26.Crafting.Add(CraftingTable.Workbench, 1);
			item26.RequiredItems.Add("TrophyHatchling", 1);
			item26.RequiredItems.Add("Stone", 10);
			item26.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_hatchlingminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_hatchling");
			Item item27 = new Item(_minionBundle, "BVM_Hen_MonsterDisk");
			item27.Crafting.Add(CraftingTable.Workbench, 1);
			item27.RequiredItems.Add("ChickenEgg", 1);
			item27.RequiredItems.Add("Stone", 10);
			item27.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_henminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_hen");
			Item item28 = new Item(_minionBundle, "BVM_Lox_MonsterDisk");
			item28.Crafting.Add(CraftingTable.Workbench, 1);
			item28.RequiredItems.Add("TrophyLox", 1);
			item28.RequiredItems.Add("Stone", 10);
			item28.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_loxminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_lox");
			Item item29 = new Item(_minionBundle, "BVM_Moder_MonsterDisk");
			item29.Crafting.Add(CraftingTable.Workbench, 1);
			item29.RequiredItems.Add("TrophyDragonQueen", 1);
			item29.RequiredItems.Add("Stone", 10);
			item29.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_moderminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_moder");
			Item item30 = new Item(_minionBundle, "BVM_Neck_MonsterDisk");
			item30.Crafting.Add(CraftingTable.Workbench, 1);
			item30.RequiredItems.Add("TrophyNeck", 1);
			item30.RequiredItems.Add("Stone", 10);
			item30.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_neckminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_neck");
			Item item31 = new Item(_minionBundle, "BVM_Seeker_MonsterDisk");
			item31.Crafting.Add(CraftingTable.Workbench, 1);
			item31.RequiredItems.Add("TrophySeeker", 1);
			item31.RequiredItems.Add("Stone", 10);
			item31.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_seekerminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_seeker");
			Item item32 = new Item(_minionBundle, "BVM_SeekerBrute_MonsterDisk");
			item32.Crafting.Add(CraftingTable.Workbench, 1);
			item32.RequiredItems.Add("TrophySeekerBrute", 1);
			item32.RequiredItems.Add("Stone", 10);
			item32.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_seekerbruteminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_seekerbrute");
			Item item33 = new Item(_minionBundle, "BVM_SeekerQueen_MonsterDisk");
			item33.Crafting.Add(CraftingTable.Workbench, 1);
			item33.RequiredItems.Add("TrophySeekerQueen", 1);
			item33.RequiredItems.Add("Stone", 10);
			item33.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_seekerqueenminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_seekerqueen");
			Item item34 = new Item(_minionBundle, "BVM_Skeleton_MonsterDisk");
			item34.Crafting.Add(CraftingTable.Workbench, 1);
			item34.RequiredItems.Add("TrophySkeleton", 1);
			item34.RequiredItems.Add("Stone", 10);
			item34.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_skeletonminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_skeleton");
			Item item35 = new Item(_minionBundle, "BVM_SkeletonPoison_MonsterDisk");
			item35.Crafting.Add(CraftingTable.Workbench, 1);
			item35.RequiredItems.Add("TrophySkeletonPoison", 1);
			item35.RequiredItems.Add("Stone", 10);
			item35.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_skeletonpoisonminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_skeletonpoison");
			Item item36 = new Item(_minionBundle, "BVM_StoneGolem_MonsterDisk");
			item36.Crafting.Add(CraftingTable.Workbench, 1);
			item36.RequiredItems.Add("TrophySGolem", 1);
			item36.RequiredItems.Add("Stone", 10);
			item36.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_stonegolemminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_stonegolem");
			Item item37 = new Item(_minionBundle, "BVM_Surtling_MonsterDisk");
			item37.Crafting.Add(CraftingTable.Workbench, 1);
			item37.RequiredItems.Add("TrophySurtling", 1);
			item37.RequiredItems.Add("Stone", 10);
			item37.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_surtlingminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_surtling");
			Item item38 = new Item(_minionBundle, "BVM_Troll_MonsterDisk");
			item38.Crafting.Add(CraftingTable.Workbench, 1);
			item38.RequiredItems.Add("TrophyForestTroll", 1);
			item38.RequiredItems.Add("Stone", 10);
			item38.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_trollminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_troll");
			Item item39 = new Item(_minionBundle, "BVM_Ulv_MonsterDisk");
			item39.Crafting.Add(CraftingTable.Workbench, 1);
			item39.RequiredItems.Add("TrophyUlv", 1);
			item39.RequiredItems.Add("Stone", 10);
			item39.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_ulvminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_ulv");
			Item item40 = new Item(_minionBundle, "BVM_Volture_MonsterDisk");
			item40.Crafting.Add(CraftingTable.Workbench, 1);
			item40.RequiredItems.Add("TrophyVolture", 1);
			item40.RequiredItems.Add("Stone", 10);
			item40.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_voltureminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_volture");
			Item item41 = new Item(_minionBundle, "BVM_Wolf_MonsterDisk");
			item41.Crafting.Add(CraftingTable.Workbench, 1);
			item41.RequiredItems.Add("TrophyWolf", 1);
			item41.RequiredItems.Add("Stone", 10);
			item41.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_wolfminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_wolf");
			Item item42 = new Item(_minionBundle, "BVM_Wraith_MonsterDisk");
			item42.Crafting.Add(CraftingTable.Workbench, 1);
			item42.RequiredItems.Add("TrophyWraith", 1);
			item42.RequiredItems.Add("Stone", 10);
			item42.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_wraithminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_wraith");
			Item item43 = new Item(_minionBundle, "BVM_Yagluth_MonsterDisk");
			item43.Crafting.Add(CraftingTable.Workbench, 1);
			item43.RequiredItems.Add("TrophyGoblinKing", 1);
			item43.RequiredItems.Add("Stone", 10);
			item43.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_yagluthminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_yagluth");
			Item item44 = new Item(_minionBundle, "BVM_GreydwarfElite_MonsterDisk");
			item44.Crafting.Add(CraftingTable.Workbench, 1);
			item44.RequiredItems.Add("TrophyGreydwarfBrute", 1);
			item44.RequiredItems.Add("Stone", 10);
			item44.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_greydwarfeliteminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_greydwarfelite");
			Item item45 = new Item(_minionBundle, "BVM_GreydwarfShaman_MonsterDisk");
			item45.Crafting.Add(CraftingTable.Workbench, 1);
			item45.RequiredItems.Add("TrophyGreydwarfShaman", 1);
			item45.RequiredItems.Add("Stone", 10);
			item45.Configurable = Configurability.Recipe;
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_greydwarfshamanminion_projectile");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_minionsummon_greydwarfshaman");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_fx_block_camshake");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_sfx_bomb_throw");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_sfx_wood_blocked");
			PrefabManager.RegisterPrefab(_minionBundle, "bvm_vfx_blocked");
		}
	}
}
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;
		}
	}
}
namespace ItemManager
{
	[PublicAPI]
	internal enum CraftingTable
	{
		Disabled,
		Inventory,
		[InternalName("piece_workbench")]
		Workbench,
		[InternalName("piece_cauldron")]
		Cauldron,
		[InternalName("forge")]
		Forge,
		[InternalName("piece_artisanstation")]
		ArtisanTable,
		[InternalName("piece_stonecutter")]
		StoneCutter,
		[InternalName("piece_magetable")]
		MageTable,
		[InternalName("blackforge")]
		BlackForge,
		Custom
	}
	[PublicAPI]
	internal enum ConversionPiece
	{
		Disabled,
		[InternalName("smelter")]
		Smelter,
		[InternalName("charcoal_kiln")]
		CharcoalKiln,
		[InternalName("blastfurnace")]
		BlastFurnace,
		[InternalName("windmill")]
		Windmill,
		[InternalName("piece_spinningwheel")]
		SpinningWheel,
		[InternalName("eitrrefinery")]
		EitrRefinery,
		Custom
	}
	internal class InternalName : Attribute
	{
		public readonly string internalName;

		public InternalName(string internalName)
		{
			this.internalName = internalName;
		}
	}
	[PublicAPI]
	internal class RequiredResourceList
	{
		public readonly List<Requirement> Requirements = new List<Requirement>();

		public bool Free;

		public void Add(string itemName, int amount, int quality = 0)
		{
			Requirements.Add(new Requirement
			{
				itemName = itemName,
				amount = amount,
				quality = quality
			});
		}

		public void Add(string itemName, ConfigEntry<int> amountConfig, int quality = 0)
		{
			Requirements.Add(new Requirement
			{
				itemName = itemName,
				amountConfig = amountConfig,
				quality = quality
			});
		}
	}
	[PublicAPI]
	internal class CraftingStationList
	{
		public readonly List<CraftingStationConfig> Stations = new List<CraftingStationConfig>();

		public void Add(CraftingTable table, int level)
		{
			Stations.Add(new CraftingStationConfig
			{
				Table = table,
				level = level
			});
		}

		public void Add(string customTable, int level)
		{
			Stations.Add(new CraftingStationConfig
			{
				Table = CraftingTable.Custom,
				level = level,
				custom = customTable
			});
		}
	}
	[PublicAPI]
	internal class ItemRecipe
	{
		public readonly RequiredResourceList RequiredItems = new RequiredResourceList();

		public readonly RequiredResourceList RequiredUpgradeItems = new RequiredResourceList();

		public readonly CraftingStationList Crafting = new CraftingStationList();

		public int CraftAmount = 1;

		public bool RequireOnlyOneIngredient;

		public float QualityResultAmountMultiplier = 1f;

		public ConfigEntryBase? RecipeIsActive;
	}
	[PublicAPI]
	internal class Trade
	{
		public Trader Trader;

		public uint Price;

		public uint Stack = 1u;

		public string? RequiredGlobalKey;
	}
	[PublicAPI]
	[Flags]
	internal enum Trader
	{
		None = 0,
		Haldor = 1,
		Hildir = 2
	}
	internal struct Requirement
	{
		public string itemName;

		public int amount;

		public ConfigEntry<int>? amountConfig;

		[Description("Set to a non-zero value to apply the requirement only for a specific quality")]
		public int quality;
	}
	internal struct CraftingStationConfig
	{
		public CraftingTable Table;

		public int level;

		public string? custom;
	}
	[Flags]
	internal enum Configurability
	{
		Disabled = 0,
		Recipe = 1,
		Stats = 2,
		Drop = 4,
		Trader = 8,
		Full = 0xF
	}
	[PublicAPI]
	internal class DropTargets
	{
		public readonly List<DropTarget> Drops = new List<DropTarget>();

		public void Add(string creatureName, float chance, int min = 1, int? max = null, bool levelMultiplier = true)
		{
			Drops.Add(new DropTarget
			{
				creature = creatureName,
				chance = chance,
				min = min,
				max = max.GetValueOrDefault(min),
				levelMultiplier = levelMultiplier
			});
		}
	}
	internal struct DropTarget
	{
		public string creature;

		public int min;

		public int max;

		public float chance;

		public bool levelMultiplier;
	}
	internal enum Toggle
	{
		On = 1,
		Off =