Decompiled source of More World Locations AIO v1.1.0

More_World_Locations_AIO.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.Linq;
using System.Linq.Expressions;
using System.Reflection;
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 System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using Common;
using HarmonyLib;
using Jotunn;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Extensions;
using Jotunn.Managers;
using Jotunn.Utils;
using Microsoft.CodeAnalysis;
using More_World_Locations_AIO;
using More_World_Locations_AIO.RPCs;
using More_World_Locations_AIO.Shrines;
using More_World_Locations_AIO.Utils;
using More_World_Locations_AIO.Waystones;
using SoftReferenceableAssets;
using TMPro;
using UnityEngine;
using UpgradeWorld;
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Core.Tokens;
using YamlDotNet.Helpers;
using YamlDotNet.RepresentationModel;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.BufferedDeserialization;
using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators;
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: AssemblyFileVersion("1.1.0")]
[assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")]
[assembly: ComVisible(false)]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCopyright("Copyright ©  2022")]
[assembly: AssemblyProduct("More_World_Locations_AIO")]
[assembly: AssemblyCompany("warpalicious")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyTitle("More_World_Locations_AIO")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: CompilationRelaxations(8)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[<693e78ed-830a-4b30-8eb1-16fd0ff3ceac>Embedded]
	internal sealed class <693e78ed-830a-4b30-8eb1-16fd0ff3ceac>EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[<693e78ed-830a-4b30-8eb1-16fd0ff3ceac>Embedded]
	[CompilerGenerated]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class <e825b352-0499-4f80-a0cf-e9a37c927703>NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public <e825b352-0499-4f80-a0cf-e9a37c927703>NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public <e825b352-0499-4f80-a0cf-e9a37c927703>NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	[CompilerGenerated]
	[<693e78ed-830a-4b30-8eb1-16fd0ff3ceac>Embedded]
	internal sealed class <9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public <9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace Common
{
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	public class AssetManager
	{
		public static AssetBundle assetBundle;

		public static string bundleName;

		public static void LoadAssetBundle()
		{
			assetBundle = AssetUtils.LoadAssetBundleFromResources(bundleName, Assembly.GetExecutingAssembly());
			if ((Object)(object)assetBundle == (Object)null)
			{
				WarpLogger.Logger.LogError((object)("Failed to load asset bundle with name: " + bundleName));
			}
		}
	}
	public class ConfigurationManager
	{
		public enum Toggle
		{
			On = 1,
			Off = 0
		}
	}
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	public static class CreatureManager
	{
		public static void SetupCreatures(LocationManager.LocationPosition position, string creatureListName, GameObject jotunnLocationContainer, int creatureCount, string creatureYAMLContent)
		{
			if (creatureCount != 0)
			{
				if (position == LocationManager.LocationPosition.Exterior)
				{
					List<string> creatureList = CreateCreatureList(creatureListName, creatureCount, creatureYAMLContent);
					List<CreatureSpawner> exteriorCreatureSpawners = GetExteriorCreatureSpawners(jotunnLocationContainer);
					AddCreaturestoSpawnerList(exteriorCreatureSpawners, creatureList);
				}
				else
				{
					List<string> creatureList2 = CreateCreatureList(creatureListName, creatureCount, creatureYAMLContent);
					List<CreatureSpawner> interiorCreatureSpawners = GetInteriorCreatureSpawners(jotunnLocationContainer);
					AddCreaturestoSpawnerList(interiorCreatureSpawners, creatureList2);
				}
			}
		}

		public static void SetupCreatures(string creatureListName, GameObject gameObject, string creatureYAMLContent)
		{
			Debug.Log((object)("Seting up creatures for location with name: " + ((Object)gameObject).name + " using creature list name: " + creatureListName));
			int count = GetCreatureSpawners(gameObject).Count;
			if (count != 0)
			{
				List<string> creatureList = CreateCreatureList(creatureListName, count, creatureYAMLContent);
				List<CreatureSpawner> creatureSpawners = GetCreatureSpawners(gameObject);
				AddCreaturestoSpawnerList(creatureSpawners, creatureList);
			}
		}

		public static List<CreatureSpawner> GetCreatureSpawners(GameObject gameObject)
		{
			return gameObject.GetComponentsInChildren<CreatureSpawner>().ToList();
		}

		public static GameObject GetCreaturePrefab(string prefabName)
		{
			GameObject prefab = Cache.GetPrefab<GameObject>(prefabName);
			if ((Object)(object)prefab != (Object)null)
			{
				return prefab;
			}
			WarpLogger.Logger.LogError((object)("Prefab not found for name:" + prefabName));
			return null;
		}

		public static void AddCreaturetoSpawner(CreatureSpawner creatureSpawner, string creaturePrefab)
		{
			GameObject creaturePrefab2 = GetCreaturePrefab(creaturePrefab);
			if ((Object)(object)creaturePrefab2 != (Object)null)
			{
				creatureSpawner.m_creaturePrefab = creaturePrefab2;
				WarpLogger.Logger.LogDebug((object)("Creature with name " + creaturePrefab + " was added to " + (object)creatureSpawner));
			}
			else
			{
				WarpLogger.Logger.LogError((object)("Creature not found for name: " + creaturePrefab));
			}
		}

		public static void AddCreaturestoSpawnerList(List<CreatureSpawner> CreatureSpawnerList, List<string> CreatureList)
		{
			if (CreatureList.Count == 0)
			{
				return;
			}
			int num = 0;
			foreach (CreatureSpawner CreatureSpawner in CreatureSpawnerList)
			{
				string creaturePrefab = CreatureList[num % CreatureList.Count];
				AddCreaturetoSpawner(CreatureSpawner, creaturePrefab);
				num++;
			}
		}

		public static List<CreatureSpawner> GetExteriorCreatureSpawners(GameObject location)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			List<CreatureSpawner> list = new List<CreatureSpawner>();
			CreatureSpawner[] componentsInChildren = location.GetComponentsInChildren<CreatureSpawner>();
			CreatureSpawner[] array = componentsInChildren;
			foreach (CreatureSpawner val in array)
			{
				if ((Object)(object)((Component)val).transform.parent != (Object)null && ((Component)val).transform.position.y <= 5000f)
				{
					list.Add(val);
					WarpLogger.Logger.LogDebug((object)("Exterior creature spawner found in " + ((object)location)?.ToString() + "with name: " + ((Object)val).name));
				}
			}
			return list;
		}

		public static List<CreatureSpawner> GetInteriorCreatureSpawners(GameObject location)
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			List<CreatureSpawner> list = new List<CreatureSpawner>();
			CreatureSpawner[] componentsInChildren = location.GetComponentsInChildren<CreatureSpawner>();
			CreatureSpawner[] array = componentsInChildren;
			foreach (CreatureSpawner val in array)
			{
				if ((Object)(object)((Component)val).transform.parent != (Object)null && ((Component)val).transform.position.y >= 5000f)
				{
					list.Add(val);
					WarpLogger.Logger.LogDebug((object)("Interior creature spawner found in " + ((object)location)?.ToString() + " with name: " + ((Object)((Component)val).transform.parent).name));
				}
			}
			return list;
		}

		public static List<string> CreateCreatureList(string creatureListName, int creatureCount, string yamlContent)
		{
			List<string> list = new List<string>();
			YamlStream yamlStream = new YamlStream();
			yamlStream.Load(new StringReader(yamlContent));
			YamlMappingNode yamlMappingNode = (YamlMappingNode)yamlStream.Documents[0].RootNode;
			if (yamlMappingNode.Children.ContainsKey(new YamlScalarNode(creatureListName)))
			{
				YamlSequenceNode yamlSequenceNode = yamlMappingNode.Children[new YamlScalarNode(creatureListName)] as YamlSequenceNode;
				int count = yamlSequenceNode.Children.Count;
				int num = Random.Range(0, count - 1);
				for (int i = 0; i < creatureCount; i++)
				{
					int index = (num + i) % count;
					YamlScalarNode yamlScalarNode = (YamlScalarNode)yamlSequenceNode.Children[index];
					list.Add(yamlScalarNode.Value);
				}
			}
			return list;
		}

		public static List<string> CreateCreatureList(string creatureListName, string yamlContent)
		{
			List<string> list = new List<string>();
			YamlStream yamlStream = new YamlStream();
			yamlStream.Load(new StringReader(yamlContent));
			YamlMappingNode yamlMappingNode = (YamlMappingNode)yamlStream.Documents[0].RootNode;
			if (yamlMappingNode.Children.ContainsKey(new YamlScalarNode(creatureListName)))
			{
				YamlSequenceNode yamlSequenceNode = yamlMappingNode.Children[new YamlScalarNode(creatureListName)] as YamlSequenceNode;
				foreach (YamlNode child in yamlSequenceNode.Children)
				{
					if (child is YamlScalarNode yamlScalarNode)
					{
						list.Add(yamlScalarNode.Value);
					}
				}
			}
			return list;
		}
	}
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	public static class CreatureManager_v2
	{
		public static void AddCreatureToSpawner(GameObject spawnerPrefab, List<GameObject> creaturePrefabs)
		{
			CreatureSpawner component = spawnerPrefab.GetComponent<CreatureSpawner>();
			int index = Random.Range(0, creaturePrefabs.Count);
			component.m_creaturePrefab = creaturePrefabs[index];
		}

		public static GameObject GetCreaturePrefab(string prefabName)
		{
			GameObject prefab = Cache.GetPrefab<GameObject>(prefabName);
			if ((Object)(object)prefab != (Object)null)
			{
				return prefab;
			}
			WarpLogger.Logger.LogError((object)("Prefab not found for name:" + prefabName));
			return null;
		}

		public static List<GameObject> CreateCreatureList(string creatureListName, string yamlContent)
		{
			List<GameObject> list = new List<GameObject>();
			YamlStream yamlStream = new YamlStream();
			yamlStream.Load(new StringReader(yamlContent));
			YamlMappingNode yamlMappingNode = (YamlMappingNode)yamlStream.Documents[0].RootNode;
			if (yamlMappingNode.Children.ContainsKey(new YamlScalarNode(creatureListName)))
			{
				YamlSequenceNode yamlSequenceNode = yamlMappingNode.Children[new YamlScalarNode(creatureListName)] as YamlSequenceNode;
				foreach (YamlNode child in yamlSequenceNode.Children)
				{
					if (child is YamlScalarNode yamlScalarNode)
					{
						list.Add(GetCreaturePrefab(yamlScalarNode.Value));
					}
				}
			}
			return list;
		}
	}
	public class DebugUtils
	{
		[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
		public static void NullCheck<T>(T obj, string name) where T : class
		{
			if (obj == null)
			{
				Debug.Log((object)(name + " is null"));
			}
			else
			{
				Debug.Log((object)(name + " is not null"));
			}
		}
	}
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	public class LocationConfiguration
	{
		public ConfigEntry<int> Quantity { get; set; }

		public ConfigEntry<ConfigurationManager.Toggle> CreatureYaml { get; set; }

		public ConfigEntry<string> CreatureList { get; set; }

		public ConfigEntry<ConfigurationManager.Toggle> LootYaml { get; set; }

		public ConfigEntry<string> LootList { get; set; }

		public ConfigEntry<ConfigurationManager.Toggle> PickableItemYaml { get; set; }

		public ConfigEntry<string> PickableItemList { get; set; }

		public LocationConfiguration(ConfigFile config, string locationName, int spawnQuantity)
		{
			Quantity = ConfigFileExtensions.BindConfigInOrder<int>(config, locationName, "Spawn Quantity", spawnQuantity, "Amount of this location the game will attempt to place during world generation", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
		}

		public LocationConfiguration(ConfigFile config, string locationName, int spawnQuantity, string customCreatureListName, string customLootListName)
		{
			Quantity = ConfigFileExtensions.BindConfigInOrder<int>(config, locationName, "Spawn Quantity", spawnQuantity, "Amount of this location the game will attempt to place during world generation", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
			CreatureYaml = ConfigFileExtensions.BindConfigInOrder<ConfigurationManager.Toggle>(config, locationName, "Use Custom Creature YAML file", ConfigurationManager.Toggle.Off, "When Off, location will spawn default creatures. When On, location will select creatures from the list in the warpalicious.More_World_Locations_CreatureLists.yml file in the BepInEx config folder", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
			CreatureList = ConfigFileExtensions.BindConfigInOrder<string>(config, locationName, "Name of Creature List", customCreatureListName, "The name of the creature list to use from warpalicious.More_World_Locations_CreatureLists.yml file", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
			LootYaml = ConfigFileExtensions.BindConfigInOrder<ConfigurationManager.Toggle>(config, locationName, "Use Custom Loot YAML file", ConfigurationManager.Toggle.Off, "When Off, location will use default loot. When On, location will select loot from the list in the warpalicious.More_World_Locations_LootLists.yml file in the BepInEx config folder", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
			LootList = ConfigFileExtensions.BindConfigInOrder<string>(config, locationName, "Name of Loot List", customLootListName, "The name of the loot list to use from warpalicious.More_World_Locations_LootLists.yml file", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
		}

		public LocationConfiguration(ConfigFile config, string locationName, int spawnQuantity, string customCreatureListName, string customLootListName, string pickableItemListName)
		{
			Quantity = ConfigFileExtensions.BindConfigInOrder<int>(config, locationName, "Spawn Quantity", spawnQuantity, "Amount of this location the game will attempt to place during world generation", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
			CreatureYaml = ConfigFileExtensions.BindConfigInOrder<ConfigurationManager.Toggle>(config, locationName, "Use Custom Creature YAML file", ConfigurationManager.Toggle.Off, "When Off, location will spawn default creatures. When On, location will select creatures from the list in the warpalicious.More_World_Locations_CreatureLists.yml file in the BepInEx config folder", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
			CreatureList = ConfigFileExtensions.BindConfigInOrder<string>(config, locationName, "Name of Creature List", customCreatureListName, "The name of the creature list to use from warpalicious.More_World_Locations_CreatureLists.yml file", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
			LootYaml = ConfigFileExtensions.BindConfigInOrder<ConfigurationManager.Toggle>(config, locationName, "Use Custom Loot YAML file", ConfigurationManager.Toggle.Off, "When Off, location will use default loot. When On, location will select loot from the list in the warpalicious.More_World_Locations_LootLists.yml file in the BepInEx config folder", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
			LootList = ConfigFileExtensions.BindConfigInOrder<string>(config, locationName, "Name of Loot List", customLootListName, "The name of the loot list to use from warpalicious.More_World_Locations_LootLists.yml file", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
			PickableItemYaml = ConfigFileExtensions.BindConfigInOrder<ConfigurationManager.Toggle>(config, locationName, "Use Custom PickableItem YAML file", ConfigurationManager.Toggle.Off, "When Off, location will use default loot. When On, dungeon will select loot from list in the custom YAML file in BepinEx config folder", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
			PickableItemList = ConfigFileExtensions.BindConfigInOrder<string>(config, locationName, "Name of PickableItem List", pickableItemListName, "The name of the loot list to use from YAML file", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null);
		}
	}
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	public class LocationManager
	{
		[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(0)]
		public enum LocationPosition
		{
			Interior,
			Exterior
		}

		public static LocationManager instance;

		public static LocationManager Instance => instance ?? (instance = new LocationManager());

		public static void AddLocation(AssetBundle assetBundle, string locationName, string creatureYAMLContent, string creatureListName, string lootYAMLContent, string lootListName, LocationConfig locationConfig)
		{
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Expected O, but got Unknown
			GameObject val = assetBundle.LoadAsset<GameObject>(locationName);
			GameObject val2 = ZoneManager.Instance.CreateLocationContainer(val);
			CreatureManager.SetupCreatures(creatureListName, val2, creatureYAMLContent);
			if (LootManager.isLootListVersion2(lootYAMLContent))
			{
				List<DropData> lootList = LootManager.ParseContainerYaml_v2(lootListName, lootYAMLContent);
				List<Container> locationsContainers = LootManager.GetLocationsContainers(val2);
				LootManager.SetupChestLoot(locationsContainers, lootList);
			}
			else
			{
				List<string> lootList2 = LootManager.CreateLootList(lootListName, lootYAMLContent);
				List<Container> locationsContainers2 = LootManager.GetLocationsContainers(val2);
				LootManager.SetupChestLoot(locationsContainers2, lootList2);
			}
			CustomLocation val3 = new CustomLocation(val2, true, locationConfig);
			ZoneManager.Instance.AddCustomLocation(val3);
		}

		public static void AddLocation(AssetBundle assetBundle, string locationName, LocationConfiguration locationConfiguration, LocationConfig locationConfig, YAMLManager yamlManager)
		{
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Expected O, but got Unknown
			GameObject val = assetBundle.LoadAsset<GameObject>(locationName);
			GameObject val2 = ZoneManager.Instance.CreateLocationContainer(val);
			CreatureManager.SetupCreatures(locationConfiguration.CreatureList.Value, val2, yamlManager.GetCreatureYamlContent(locationConfiguration.CreatureYaml.Value));
			if (LootManager.isLootListVersion2(yamlManager.GetLootYamlContent(locationConfiguration.LootYaml.Value)))
			{
				List<DropData> lootList = LootManager.ParseContainerYaml_v2(locationConfiguration.LootList.Value, yamlManager.GetLootYamlContent(locationConfiguration.LootYaml.Value));
				List<Container> locationsContainers = LootManager.GetLocationsContainers(val2);
				LootManager.SetupChestLoot(locationsContainers, lootList);
			}
			else
			{
				List<string> lootList2 = LootManager.CreateLootList(locationConfiguration.LootList.Value, yamlManager.GetLootYamlContent(locationConfiguration.LootYaml.Value));
				List<Container> locationsContainers2 = LootManager.GetLocationsContainers(val2);
				LootManager.SetupChestLoot(locationsContainers2, lootList2);
			}
			CustomLocation val3 = new CustomLocation(val2, true, locationConfig);
			ZoneManager.Instance.AddCustomLocation(val3);
		}

		public static void AddLocation(AssetBundle assetBundle, string locationName, LocationConfig locationConfig)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Expected O, but got Unknown
			GameObject val = assetBundle.LoadAsset<GameObject>(locationName);
			GameObject val2 = ZoneManager.Instance.CreateLocationContainer(val);
			CustomLocation val3 = new CustomLocation(val2, true, locationConfig);
			ZoneManager.Instance.AddCustomLocation(val3);
		}

		public static void AddLocation(AssetBundle assetBundle, string locationName, string lootYAMLContent, string lootListName, LocationConfig locationConfig)
		{
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Expected O, but got Unknown
			GameObject val = assetBundle.LoadAsset<GameObject>(locationName);
			GameObject val2 = ZoneManager.Instance.CreateLocationContainer(val);
			if (LootManager.isLootListVersion2(lootYAMLContent))
			{
				List<DropData> lootList = LootManager.ParseContainerYaml_v2(lootListName, lootYAMLContent);
				List<Container> locationsContainers = LootManager.GetLocationsContainers(val2);
				LootManager.SetupChestLoot(locationsContainers, lootList);
			}
			else
			{
				List<string> lootList2 = LootManager.CreateLootList(lootListName, lootYAMLContent);
				List<Container> locationsContainers2 = LootManager.GetLocationsContainers(val2);
				LootManager.SetupChestLoot(locationsContainers2, lootList2);
			}
			CustomLocation val3 = new CustomLocation(val2, true, locationConfig);
			ZoneManager.Instance.AddCustomLocation(val3);
		}

		public static void AddLocation(GameObject locationGameObject, LocationConfig locationConfig)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Expected O, but got Unknown
			GameObject val = ZoneManager.Instance.CreateLocationContainer(locationGameObject);
			CustomLocation val2 = new CustomLocation(val, true, locationConfig);
			ZoneManager.Instance.AddCustomLocation(val2);
		}

		public static void AddEventLocation(AssetBundle assetBundle, string locationName, string creatureYAMLContent, string creatureListName, string lootYAMLContent, string lootListName, LocationConfig locationConfig)
		{
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Expected O, but got Unknown
			GameObject val = assetBundle.LoadAsset<GameObject>(locationName);
			GameObject val2 = ZoneManager.Instance.CreateLocationContainer(val);
			CreatureManager.SetupCreatures(creatureListName, val2, creatureYAMLContent);
			if (LootManager.isLootListVersion2(lootYAMLContent))
			{
				List<DropData> lootList = LootManager.ParseContainerYaml_v2(lootListName, lootYAMLContent);
				List<Container> locationsContainers = LootManager.GetLocationsContainers(val2);
				LootManager.SetupChestLoot(locationsContainers, lootList);
			}
			else
			{
				List<string> lootList2 = LootManager.CreateLootList(lootListName, lootYAMLContent);
				List<Container> locationsContainers2 = LootManager.GetLocationsContainers(val2);
				LootManager.SetupChestLoot(locationsContainers2, lootList2);
			}
			GameObject gameObject = ((Component)ExposedGameObjectExtension.FindDeepChild(val2, "MWL_EventStone", (IterativeSearchType)1)).gameObject;
			if (!Object.op_Implicit((Object)(object)gameObject))
			{
				WarpLogger.Logger.LogDebug((object)"Failed to find EventStone");
			}
			gameObject.GetComponent<EffectArea>().m_statusEffect = "GoblinShaman_shield";
			CustomLocation val3 = new CustomLocation(val2, true, locationConfig);
			ZoneManager.Instance.AddCustomLocation(val3);
		}

		public static void AddLocation(string locationName, LocationConfiguration locationConfiguration, LocationConfig locationConfig, YAMLManager yamlManager)
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Expected O, but got Unknown
			SoftReference<GameObject> softReference = AssetManager.Instance.GetSoftReference<GameObject>(locationName);
			AssetManager.Instance.ResolveMocksOnLoad(softReference.m_assetID, (Transform)null, (Action<Object>)([<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(0)] (Object resolvedObj) =>
			{
				CreatureDB.SetupCreatures(LocationCreatureMapping.GetCreatureListForLocation(locationName), (GameObject)(object)((resolvedObj is GameObject) ? resolvedObj : null));
			}));
			AssetManager.Instance.ResolveMocksOnLoad(softReference.m_assetID, (Transform)null, (Action<Object>)([<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(0)] (Object resolvedObj) =>
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				LootDB.SetupLoot(locationConfig.Biome, (GameObject)(object)((resolvedObj is GameObject) ? resolvedObj : null));
			}));
			CustomLocation val = new CustomLocation(softReference, true, locationConfig);
			ZoneManager.Instance.AddCustomLocation(val);
		}
	}
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	public static class LootManager_v2
	{
		public static void SetupContainers(GameObject gameObject, string yamlContent)
		{
			List<Container> containers = GetContainers(gameObject);
			List<DropData> drops = ParseContainerYAML(yamlContent);
			foreach (Container item in containers)
			{
				item.m_defaultItems.m_drops = drops;
			}
		}

		public static void SetupPickableItems(GameObject gameObject, string yamlContent, string listName)
		{
			List<PickableItem> pickableItems = GetPickableItems(gameObject);
			List<RandomItem> list = ParsePickableYaml(listName, yamlContent);
			RandomItem[] randomItemPrefabs = list.ToArray();
			foreach (PickableItem item in pickableItems)
			{
				item.m_randomItemPrefabs = randomItemPrefabs;
			}
		}

		public static List<DropData> ParseContainerYAML(string yamlContent)
		{
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			List<DropData> list = new List<DropData>();
			IDeserializer deserializer = new DeserializerBuilder().Build();
			Dictionary<string, List<Dictionary<string, object>>> dictionary = deserializer.Deserialize<Dictionary<string, List<Dictionary<string, object>>>>(yamlContent);
			foreach (List<Dictionary<string, object>> value in dictionary.Values)
			{
				foreach (Dictionary<string, object> item2 in value)
				{
					string text = item2["item"].ToString();
					GameObject prefab = Cache.GetPrefab<GameObject>(text);
					if ((Object)(object)prefab != (Object)null)
					{
						DropData val = default(DropData);
						val.m_item = prefab;
						val.m_stackMin = int.Parse(item2["stackMin"].ToString());
						val.m_stackMax = int.Parse(item2["stackMax"].ToString());
						val.m_weight = float.Parse(item2["weight"].ToString());
						val.m_dontScale = false;
						DropData item = val;
						list.Add(item);
					}
				}
			}
			return list;
		}

		public static List<RandomItem> ParsePickableYaml(string pickablelootListName, string yamlContent)
		{
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: 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)
			List<RandomItem> list = new List<RandomItem>();
			IDeserializer deserializer = new DeserializerBuilder().Build();
			Dictionary<string, List<Dictionary<string, object>>> dictionary = deserializer.Deserialize<Dictionary<string, List<Dictionary<string, object>>>>(yamlContent);
			if (dictionary.ContainsKey(pickablelootListName))
			{
				WarpLogger.Logger.LogDebug((object)("Found loot list with name " + pickablelootListName + " in pickable list Yaml file"));
				foreach (Dictionary<string, object> item2 in dictionary[pickablelootListName])
				{
					string text = item2["item"].ToString();
					GameObject prefab = Cache.GetPrefab<GameObject>(text);
					if ((Object)(object)prefab != (Object)null)
					{
						ItemDrop component = prefab.GetComponent<ItemDrop>();
						if ((Object)(object)component != (Object)null)
						{
							RandomItem val = default(RandomItem);
							val.m_itemPrefab = component;
							val.m_stackMin = int.Parse(item2["stackMin"].ToString());
							val.m_stackMax = int.Parse(item2["stackMax"].ToString());
							RandomItem item = val;
							list.Add(item);
							WarpLogger.Logger.LogDebug((object)("Added item with name: " + text + " to pickable list " + pickablelootListName + " with stackMin: " + item.m_stackMin + ", stackMax: " + item.m_stackMax));
						}
					}
					else
					{
						WarpLogger.Logger.LogWarning((object)("Prefab for item " + text + " not found."));
					}
				}
			}
			else
			{
				WarpLogger.Logger.LogError((object)("Failed to find loot list with name: " + pickablelootListName + " in loot list Yaml file"));
			}
			return list;
		}

		public static List<Container> GetContainers(GameObject room)
		{
			return room.GetComponentsInChildren<Container>().ToList();
		}

		public static List<PickableItem> GetPickableItems(GameObject room)
		{
			return room.GetComponentsInChildren<PickableItem>().ToList();
		}
	}
	public class PieceManager
	{
		[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
		public static void ReplaceResourceDrops(CustomLocation location)
		{
			Piece[] componentsInChildren = location.Prefab.GetComponentsInChildren<Piece>();
			Piece[] array = componentsInChildren;
			foreach (Piece val in array)
			{
				if (!((Object)(object)((Component)val).transform.parent != (Object)null))
				{
					continue;
				}
				WarpLogger.Logger.LogDebug((object)("Piece with name " + ((object)val)?.ToString() + " found in location with name: " + (object)location));
				Requirement[] resources = val.m_resources;
				Requirement[] array2 = resources;
				foreach (Requirement val2 in array2)
				{
					if (val2 != null)
					{
						WarpLogger.Logger.LogDebug((object)("Resource with name " + ((object)val2)?.ToString() + " found in piece  with name: " + ((Object)((Component)val).transform.parent).name));
					}
				}
			}
		}
	}
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	public static class TraderManager
	{
		[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
		public class TradeItemYAML
		{
			public string PrefabName { get; set; }

			public string Action { get; set; }

			public int Quality { get; set; }

			public int Stack { get; set; }

			public int Price { get; set; }

			public string RequiredGlobalKey { get; set; }
		}

		[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
		public class SellItem
		{
			public ItemDrop m_prefab { get; set; }

			public int m_stack { get; set; }

			public int m_price { get; set; }

			public string m_requiredGlobalKey { get; set; }
		}

		public static Dictionary<string, List<TradeItem>> buyItemLists = new Dictionary<string, List<TradeItem>>();

		public static Dictionary<string, List<SellItem>> sellItemLists = new Dictionary<string, List<SellItem>>();

		public static void AddTraderBuyItems(GameObject locationContainer, List<TradeItem> traderItems)
		{
			Trader componentInChildren = locationContainer.GetComponentInChildren<Trader>();
			if ((Object)(object)componentInChildren == (Object)null)
			{
				WarpLogger.Logger.LogWarning((object)("Failed to find Trader script in location with name: " + (object)locationContainer));
			}
			else
			{
				componentInChildren.m_items = traderItems;
			}
		}

		public static void BuildBuyItemList(string traderItemYamlContent, string traderName)
		{
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Expected O, but got Unknown
			List<TradeItem> list = new List<TradeItem>();
			IDeserializer deserializer = new DeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();
			Dictionary<string, List<TradeItemYAML>> dictionary = deserializer.Deserialize<Dictionary<string, List<TradeItemYAML>>>(traderItemYamlContent);
			if (dictionary == null || !dictionary.ContainsKey(traderName))
			{
				WarpLogger.Logger.LogWarning((object)("Parsed data is null or trader name: " + traderName + " does not exist in the YAML content."));
				return;
			}
			List<TradeItemYAML> list2 = dictionary[traderName];
			foreach (TradeItemYAML item2 in list2)
			{
				GameObject prefab = Cache.GetPrefab<GameObject>(item2.PrefabName);
				if (!(item2.Action != "buy"))
				{
					ItemDrop component = prefab.GetComponent<ItemDrop>();
					if (item2.Quality != 1)
					{
						component.SetQuality(item2.Quality);
					}
					TradeItem item = new TradeItem
					{
						m_prefab = component,
						m_stack = item2.Stack,
						m_price = item2.Price,
						m_requiredGlobalKey = item2.RequiredGlobalKey
					};
					list.Add(item);
					Debug.Log((object)("Added item with name: " + item2.PrefabName + " to trader buy list with name: " + traderName));
				}
			}
			buyItemLists.Add(traderName, list);
		}

		public static void BuildSellItemList(string traderItemYamlContent, string traderName)
		{
			List<SellItem> list = new List<SellItem>();
			IDeserializer deserializer = new DeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();
			Dictionary<string, List<TradeItemYAML>> dictionary = deserializer.Deserialize<Dictionary<string, List<TradeItemYAML>>>(traderItemYamlContent);
			List<TradeItemYAML> list2 = dictionary[traderName];
			foreach (TradeItemYAML item2 in list2)
			{
				GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(item2.PrefabName);
				if (!(item2.Action != "sell"))
				{
					ItemDrop component = itemPrefab.GetComponent<ItemDrop>();
					if (item2.Quality != 0)
					{
						component.SetQuality(item2.Quality);
					}
					SellItem item = new SellItem
					{
						m_prefab = component,
						m_stack = item2.Stack,
						m_price = item2.Price,
						m_requiredGlobalKey = item2.RequiredGlobalKey
					};
					list.Add(item);
				}
			}
			sellItemLists.Add(traderName, list);
		}
	}
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	public class WarpLocation
	{
		public string LocationName { get; set; }

		public int SpawnQuantity { get; set; }

		public string CreatureYaml { get; set; }

		public string LootYaml { get; set; }

		public LocationConfiguration BepinExConfig { get; set; }

		public LocationConfig JotunnLocationConfig { get; set; }

		public WarpLocation(ConfigFile config, string locationName, int spawnQuantity, string creatureYaml, string lootYaml)
		{
			BepinExConfig = new LocationConfiguration(config, locationName, spawnQuantity, creatureYaml, lootYaml);
		}
	}
	public class WarpLogger
	{
		[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(1)]
		public static readonly ManualLogSource Logger = Logger.CreateLogSource("MoreWorldLocations");
	}
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	public class LootManager : MonoBehaviour
	{
		public static List<string> CreateLootList(string lootListName, string yamlContent)
		{
			YamlStream yamlStream = new YamlStream();
			yamlStream.Load(new StringReader(yamlContent));
			YamlMappingNode yamlMappingNode = (YamlMappingNode)yamlStream.Documents[0].RootNode;
			List<string> list = new List<string>();
			if (yamlMappingNode.Children.ContainsKey(new YamlScalarNode(lootListName)))
			{
				WarpLogger.Logger.LogDebug((object)("Found loot list with name " + lootListName + " in loot list Yaml file"));
				YamlSequenceNode yamlSequenceNode = yamlMappingNode.Children[new YamlScalarNode(lootListName)] as YamlSequenceNode;
				foreach (YamlNode item in yamlSequenceNode)
				{
					YamlScalarNode yamlScalarNode = item as YamlScalarNode;
					list.Add(yamlScalarNode.Value);
					WarpLogger.Logger.LogDebug((object)("Added item with name: " + item?.ToString() + " to loot list with name " + lootListName));
				}
			}
			else
			{
				WarpLogger.Logger.LogError((object)("Failed to find loot list with name: " + lootListName + " in loot list Yaml file"));
			}
			return list;
		}

		public static bool isLootListVersion2(string yamlContent)
		{
			YamlStream yamlStream = new YamlStream();
			yamlStream.Load(new StringReader(yamlContent));
			YamlMappingNode yamlMappingNode = (YamlMappingNode)yamlStream.Documents[0].RootNode;
			if (yamlMappingNode.Children.ContainsKey(new YamlScalarNode("version")))
			{
				YamlScalarNode yamlScalarNode = (YamlScalarNode)yamlMappingNode.Children[new YamlScalarNode("version")];
				string value = yamlScalarNode.Value;
				if (value == "2.0")
				{
					WarpLogger.Logger.LogDebug((object)"Version is 2");
					return true;
				}
				return false;
			}
			WarpLogger.Logger.LogDebug((object)"Version not found in YAML file");
			return false;
		}

		public static List<string> ParseContainerYaml_v1(string lootListName, string yamlContent)
		{
			YamlStream yamlStream = new YamlStream();
			yamlStream.Load(new StringReader(yamlContent));
			YamlMappingNode yamlMappingNode = (YamlMappingNode)yamlStream.Documents[0].RootNode;
			List<string> list = new List<string>();
			if (yamlMappingNode.Children.ContainsKey(new YamlScalarNode(lootListName)))
			{
				WarpLogger.Logger.LogDebug((object)("Found loot list with name " + lootListName + " in loot list Yaml file"));
				YamlSequenceNode yamlSequenceNode = yamlMappingNode.Children[new YamlScalarNode(lootListName)] as YamlSequenceNode;
				foreach (YamlNode item in yamlSequenceNode)
				{
					YamlScalarNode yamlScalarNode = item as YamlScalarNode;
					list.Add(yamlScalarNode.Value);
					WarpLogger.Logger.LogDebug((object)("Added item with name: " + item?.ToString() + " to loot list with name " + lootListName));
				}
			}
			else
			{
				WarpLogger.Logger.LogError((object)("Failed to find loot list with name: " + lootListName + " in loot list Yaml file"));
			}
			return list;
		}

		public static List<DropData> ParseContainerYaml_v2(string lootListName, string yamlContent)
		{
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			List<DropData> list = new List<DropData>();
			string input = RemoveVersionFromYaml(yamlContent);
			IDeserializer deserializer = new DeserializerBuilder().Build();
			Dictionary<string, List<Dictionary<string, object>>> dictionary = deserializer.Deserialize<Dictionary<string, List<Dictionary<string, object>>>>(input);
			if (dictionary.ContainsKey(lootListName))
			{
				WarpLogger.Logger.LogDebug((object)("Found loot list with name " + lootListName + " in loot list Yaml file"));
				foreach (Dictionary<string, object> item2 in dictionary[lootListName])
				{
					string text = item2["item"].ToString();
					GameObject prefab = Cache.GetPrefab<GameObject>(text);
					if ((Object)(object)prefab != (Object)null)
					{
						if (!int.TryParse(item2["stackMin"].ToString(), NumberStyles.Integer, CultureInfo.InvariantCulture, out var result))
						{
							result = 2;
							WarpLogger.Logger.LogWarning((object)("Failed to parse stackMin for item " + text + ". Defaulting to " + result));
						}
						if (!int.TryParse(item2["stackMax"].ToString(), NumberStyles.Integer, CultureInfo.InvariantCulture, out var result2))
						{
							result2 = 3;
							WarpLogger.Logger.LogWarning((object)("Failed to parse stackMax for item " + text + ". Defaulting to " + result2));
						}
						if (!float.TryParse(item2["weight"].ToString(), NumberStyles.Float, CultureInfo.InvariantCulture, out var result3))
						{
							result3 = 1f;
							WarpLogger.Logger.LogWarning((object)("Failed to parse weight for item " + text + ". Defaulting to " + result3));
						}
						DropData val = default(DropData);
						val.m_item = prefab;
						val.m_stackMin = result;
						val.m_stackMax = result2;
						val.m_weight = result3;
						val.m_dontScale = false;
						DropData item = val;
						list.Add(item);
						WarpLogger.Logger.LogDebug((object)("Added item with name: " + text + " to loot list " + lootListName + " with stackMin: " + item.m_stackMin + ", stackMax: " + item.m_stackMax + ", weight: " + item.m_weight));
					}
					else
					{
						WarpLogger.Logger.LogWarning((object)("Prefab for item " + text + " not found."));
					}
				}
			}
			else
			{
				WarpLogger.Logger.LogError((object)("Failed to find loot list with name: " + lootListName + " in loot list Yaml file"));
			}
			return list;
		}

		private static string RemoveVersionFromYaml(string yamlContent)
		{
			string[] array = yamlContent.Split(new char[1] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
			List<string> list = new List<string>();
			bool flag = false;
			string[] array2 = array;
			foreach (string text in array2)
			{
				if (text.TrimStart(Array.Empty<char>()).StartsWith("version"))
				{
					flag = true;
				}
				else
				{
					list.Add(text);
				}
			}
			if (flag)
			{
				WarpLogger.Logger.LogDebug((object)"Version key found and removed from YAML content.");
			}
			return string.Join("\n", list);
		}

		public static List<Container> GetLocationsContainers(GameObject location)
		{
			List<Container> list = new List<Container>();
			Container[] componentsInChildren = location.GetComponentsInChildren<Container>();
			if (componentsInChildren.Length != 0)
			{
				Container[] array = componentsInChildren;
				foreach (Container val in array)
				{
					list.Add(val);
					WarpLogger.Logger.LogDebug((object)("Container found in " + ((object)location)?.ToString() + "with name: " + ((Object)val).name));
				}
			}
			return list;
		}

		public static List<Container> GetLocationsContainers(GameObject location, LocationManager.LocationPosition locationPosition)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			List<Container> list = new List<Container>();
			Container[] componentsInChildren = location.GetComponentsInChildren<Container>();
			Container[] array = componentsInChildren;
			foreach (Container val in array)
			{
				if (((Component)val).transform.position.y <= 5000f)
				{
					list.Add(val);
					WarpLogger.Logger.LogDebug((object)("Container found in " + ((object)location)?.ToString() + "with name: " + ((Object)val).name));
				}
			}
			return list;
		}

		public static void SetupChestLoot(List<Container> containerList, List<string> lootList)
		{
			foreach (Container container in containerList)
			{
				DropTable defaultItems = CreateDropTable(lootList, 2, 3);
				container.m_defaultItems = defaultItems;
				WarpLogger.Logger.LogDebug((object)("Container with name " + ((Object)container).name + " has received new dropTable"));
			}
		}

		public static void SetupChestLoot(List<Container> containerList, List<DropData> lootList)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			DropTable val = new DropTable();
			val.m_dropMin = 2;
			val.m_dropMax = 3;
			val.m_drops = lootList;
			if (containerList.Count == 0)
			{
				return;
			}
			foreach (Container container in containerList)
			{
				container.m_defaultItems = val;
				WarpLogger.Logger.LogDebug((object)("Container with name " + ((Object)container).name + " has received new dropTable"));
			}
		}

		public static List<DropOnDestroyed> GetLocationsDropOnDestroyeds(GameObject location, LocationManager.LocationPosition locationPosition)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			List<DropOnDestroyed> list = new List<DropOnDestroyed>();
			DropOnDestroyed[] componentsInChildren = location.GetComponentsInChildren<DropOnDestroyed>();
			DropOnDestroyed[] array = componentsInChildren;
			foreach (DropOnDestroyed val in array)
			{
				if (((Object)val).name.StartsWith("loot_drop") && ((Component)val).transform.position.y <= 5000f)
				{
					list.Add(val);
					WarpLogger.Logger.LogDebug((object)("DropOnDestroyed found in " + ((object)location)?.ToString() + "with name: " + ((Object)val).name));
				}
			}
			if (list.Count > 0)
			{
				return list;
			}
			return null;
		}

		public static void SetupDropOnDestroyedLoot(List<DropOnDestroyed> dropOnDestroyedList, List<string> lootList)
		{
			foreach (DropOnDestroyed dropOnDestroyed in dropOnDestroyedList)
			{
				DropTable dropWhenDestroyed = CreateDropTable(lootList, 1, 2);
				dropOnDestroyed.m_dropWhenDestroyed = dropWhenDestroyed;
			}
		}

		public static DropTable CreateDropTable(List<string> itemNames, int dropMin, int dropMax)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Expected O, but got Unknown
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			DropTable val = new DropTable
			{
				m_dropMin = dropMin,
				m_dropMax = dropMax,
				m_dropChance = 1f,
				m_oneOfEach = true
			};
			foreach (string itemName in itemNames)
			{
				WarpLogger.Logger.LogDebug((object)("Attempting to add item with name " + itemName));
				GameObject prefab = Cache.GetPrefab<GameObject>(itemName);
				if ((Object)(object)prefab != (Object)null)
				{
					DropData val2 = default(DropData);
					val2.m_item = prefab;
					val2.m_stackMin = 2;
					val2.m_stackMax = 4;
					val2.m_weight = 1f;
					val2.m_dontScale = false;
					DropData item = val2;
					val.m_drops.Add(item);
					WarpLogger.Logger.LogDebug((object)("Added item with name " + itemName));
				}
				else
				{
					WarpLogger.Logger.LogError((object)("Prefab for " + itemName + " not found"));
				}
			}
			return val;
		}

		public static void AddContainerToChild(GameObject parentGameObject, string childName, DropTable dropTable)
		{
			Transform val = parentGameObject.transform.Find(childName);
			if ((Object)(object)val != (Object)null)
			{
				Container val2 = ((Component)val).gameObject.AddComponent<Container>();
				if ((Object)(object)val2 != (Object)null)
				{
					val2.m_defaultItems = dropTable;
					val2.m_name = "Chest";
					val2.m_width = 4;
					val2.m_height = 2;
				}
			}
			else
			{
				WarpLogger.Logger.LogError((object)("Child GameObject (" + childName + ") not found in parent GameObject (" + ((object)parentGameObject)?.ToString() + ")"));
			}
		}
	}
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	public class YAMLManager
	{
		[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(0)]
		public enum Toggle
		{
			On = 1,
			Off = 0
		}

		public string creatureYAMLContent;

		public string lootYAMLContent;

		public string defaultCreatureYamlContent;

		public string customCreatureYamlContent;

		public Dictionary<string, List<GameObject>> creatureListDictionary = new Dictionary<string, List<GameObject>>();

		public string defaultlootYamlContent;

		public string customlootYamlContent;

		public Dictionary<string, List<DropData>> lootListDictionary = new Dictionary<string, List<DropData>>();

		public string defaultPickableItemContent;

		public string customPickableItemContent;

		public List<RandomItem> pickableList;

		public string defaultTraderYamlContent;

		public string customTraderYamlContent;

		public void ParseDefaultYamls()
		{
			Debug.Log((object)"Calling parse yamls");
			defaultCreatureYamlContent = AssetUtils.LoadTextFromResources("warpalicious.More_World_Locations_CreatureLists.yml");
			defaultlootYamlContent = AssetUtils.LoadTextFromResources("warpalicious.More_World_Locations_LootLists.yml");
		}

		public void ParseCustomYamls()
		{
			string path = Path.Combine(Paths.ConfigPath, "warpalicious.More_World_Locations_CreatureLists.yml");
			if (File.Exists(path))
			{
				customCreatureYamlContent = File.ReadAllText(path);
				WarpLogger.Logger.LogInfo((object)"Successfully loaded warpalicious.More_World_Locations_CreatureLists.yml file from BepinEx config folder");
			}
			string path2 = Path.Combine(Paths.ConfigPath, "warpalicious.More_World_Locations_LootLists.yml");
			if (File.Exists(path2))
			{
				customlootYamlContent = File.ReadAllText(path2);
				WarpLogger.Logger.LogInfo((object)"Successfully loaded warpalicious.More_World_Locations_LootLists.yml file from BepinEx config folder");
			}
		}

		public void ParseCreatureYaml(string filename)
		{
			defaultCreatureYamlContent = AssetUtils.LoadTextFromResources(filename + "_CreatureLists.yml");
			string path = Path.Combine(Paths.ConfigPath, filename + "_CreatureLists.yml");
			if (File.Exists(path))
			{
				customCreatureYamlContent = File.ReadAllText(path);
				WarpLogger.Logger.LogInfo((object)("Successfully loaded + " + filename + "_CreatureLists.yml file from BepinEx config folder"));
			}
		}

		public void ParseTraderYaml(string filename)
		{
			defaultTraderYamlContent = AssetUtils.LoadTextFromResources(filename);
			string path = Path.Combine(Paths.ConfigPath, filename);
			if (File.Exists(path))
			{
				customTraderYamlContent = File.ReadAllText(path);
				WarpLogger.Logger.LogInfo((object)("Successfully loaded + " + filename + " file from BepinEx config folder"));
			}
		}

		public void ParseContainerYaml(string filename)
		{
			defaultlootYamlContent = AssetUtils.LoadTextFromResources(filename + "_ContainerLists.yml");
			string path = Path.Combine(Paths.ConfigPath, filename + "_ContainerLists.yml");
			if (File.Exists(path))
			{
				customlootYamlContent = File.ReadAllText(path);
				WarpLogger.Logger.LogInfo((object)("Successfully loaded + " + filename + "_ContainerLists.yml file from BepinEx config folder"));
			}
		}

		public void ParsePickableItemYaml(string filename)
		{
			defaultPickableItemContent = AssetUtils.LoadTextFromResources(filename + "_PickableItemLists.yml");
			string path = Path.Combine(Paths.ConfigPath, filename + "_PickableItemLists.yml");
			if (File.Exists(path))
			{
				customPickableItemContent = File.ReadAllText(path);
				WarpLogger.Logger.LogInfo((object)("Successfully loaded + " + filename + "_PickableItemLists.yml file from BepinEx config folder"));
			}
		}

		public string GetCreatureYamlContent(ConfigurationManager.Toggle useCustomCreatureYaml)
		{
			if (useCustomCreatureYaml == ConfigurationManager.Toggle.On)
			{
				return customCreatureYamlContent;
			}
			return defaultCreatureYamlContent;
		}

		public string GetLootYamlContent(ConfigurationManager.Toggle useCustomLootYaml)
		{
			if (useCustomLootYaml == ConfigurationManager.Toggle.On)
			{
				return customlootYamlContent;
			}
			return defaultlootYamlContent;
		}

		public string GetPickableItemContent(ConfigurationManager.Toggle useCustomPickableItemYAML)
		{
			if (useCustomPickableItemYAML == ConfigurationManager.Toggle.On)
			{
				return customPickableItemContent;
			}
			return defaultPickableItemContent;
		}

		public void BuildCreatureLists(ConfigurationManager.Toggle useCustomCreatureYAML, string creatureListName)
		{
			if (useCustomCreatureYAML == ConfigurationManager.Toggle.On)
			{
				List<GameObject> value = CreatureManager_v2.CreateCreatureList(creatureListName, customCreatureYamlContent);
				creatureListDictionary.Add(creatureListName, value);
			}
			else
			{
				List<GameObject> value2 = CreatureManager_v2.CreateCreatureList(creatureListName, defaultCreatureYamlContent);
				creatureListDictionary.Add(creatureListName, value2);
			}
		}

		public void BuildCreatureLists()
		{
			Debug.Log((object)"Calling build creature list");
			foreach (KeyValuePair<string, LocationConfiguration> bepinexConfig in BepinexConfigs.bepinexConfigs)
			{
				if (!creatureListDictionary.ContainsKey(bepinexConfig.Value.CreatureList.Value))
				{
					Debug.Log((object)("Add creature list with name " + bepinexConfig.Value.CreatureList.Value));
					List<GameObject> value = CreatureManager_v2.CreateCreatureList(bepinexConfig.Value.CreatureList.Value, defaultCreatureYamlContent);
					creatureListDictionary.Add(bepinexConfig.Value.CreatureList.Value, value);
				}
			}
			ZoneManager.OnVanillaLocationsAvailable -= BuildCreatureLists;
		}

		public void BuildLootLists()
		{
			Debug.Log((object)"Calling build loot list");
			foreach (KeyValuePair<string, LocationConfiguration> bepinexConfig in BepinexConfigs.bepinexConfigs)
			{
				if (!lootListDictionary.ContainsKey(bepinexConfig.Value.LootList.Value))
				{
					Debug.Log((object)("Add loot list with name " + bepinexConfig.Value.LootList.Value));
					List<DropData> value = LootManager.ParseContainerYaml_v2(bepinexConfig.Value.LootList.Value, defaultlootYamlContent);
					lootListDictionary.Add(bepinexConfig.Value.LootList.Value, value);
				}
			}
			ZoneManager.OnVanillaLocationsAvailable -= BuildLootLists;
		}

		public void BuildLootList(ConfigurationManager.Toggle useCustomLootYAML, string lootListName)
		{
			if (useCustomLootYAML == ConfigurationManager.Toggle.On)
			{
				List<DropData> value = LootManager.ParseContainerYaml_v2(lootListName, customlootYamlContent);
				lootListDictionary.Add(lootListName, value);
			}
			else
			{
				List<DropData> value2 = LootManager.ParseContainerYaml_v2(lootListName, defaultlootYamlContent);
				lootListDictionary.Add(lootListName, value2);
			}
		}

		public void BuildPickableList(ConfigurationManager.Toggle useCustomPickableYAML, string pickableListName)
		{
			if (useCustomPickableYAML == ConfigurationManager.Toggle.On)
			{
				pickableList = LootManager_v2.ParsePickableYaml(pickableListName, customPickableItemContent);
			}
			else
			{
				pickableList = LootManager_v2.ParsePickableYaml(pickableListName, defaultPickableItemContent);
			}
		}
	}
}
namespace UpgradeWorld
{
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	public class CommandRegistration
	{
		public string name = "";

		public string description = "";

		public string[] commands = new string[0];

		public void AddCommand()
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Expected O, but got Unknown
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			new ConsoleCommand(name, description, (ConsoleEvent)([<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(0)] (ConsoleEventArgs args) =>
			{
				string[] array = commands;
				foreach (string text in array)
				{
					args.Context.TryRunCommand(text, false, false);
				}
			}), false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);
		}
	}
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	public static class Upgrade
	{
		private static List<CommandRegistration> registrations = new List<CommandRegistration>();

		public const string GUID = "upgrade_world";

		private static bool Patched = false;

		public static void Register(string name, string description, params string[] commands)
		{
			if (Chainloader.PluginInfos.ContainsKey("upgrade_world"))
			{
				PatchIfNeeded();
				registrations.Add(new CommandRegistration
				{
					name = name,
					description = description,
					commands = commands
				});
			}
		}

		private static void PatchIfNeeded()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Expected O, but got Unknown
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Expected O, but got Unknown
			if (!Patched)
			{
				Patched = true;
				Harmony val = new Harmony("helpers.upgrade_world");
				MethodInfo methodInfo = AccessTools.Method(typeof(Terminal), "InitTerminal", (Type[])null, (Type[])null);
				MethodInfo methodInfo2 = AccessTools.Method(typeof(Upgrade), "AddCommands", (Type[])null, (Type[])null);
				val.Patch((MethodBase)methodInfo, (HarmonyMethod)null, new HarmonyMethod(methodInfo2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
			}
		}

		private static void AddCommands()
		{
			foreach (CommandRegistration registration in registrations)
			{
				registration.AddCommand();
			}
		}
	}
}
namespace More_World_Locations_AIO
{
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	public class BepinexConfigs
	{
		public static ConfigFile Config;

		public static Dictionary<string, LocationConfiguration> bepinexConfigs = new Dictionary<string, LocationConfiguration>();

		public static void GenerateConfigs(ConfigFile configFile)
		{
			Config = configFile;
			bepinexConfigs = new Dictionary<string, LocationConfiguration>
			{
				{
					"MWL_Ruins1_Configuration",
					new LocationConfiguration(Config, "MWL_Ruins1", 5)
				},
				{
					"MWL_Ruins2_Configuration",
					new LocationConfiguration(Config, "MWL_Ruins2", 10)
				},
				{
					"MWL_Ruins3_Configuration",
					new LocationConfiguration(Config, "MWL_Ruins3", 25)
				},
				{
					"MWL_Ruins6_Configuration",
					new LocationConfiguration(Config, "MWL_Ruins6", 5)
				},
				{
					"MWL_Ruins7_Configuration",
					new LocationConfiguration(Config, "MWL_Ruins7", 2)
				},
				{
					"MWL_Ruins8_Configuration",
					new LocationConfiguration(Config, "MWL_Ruins8", 5)
				},
				{
					"MWL_RuinsArena1_Configuration",
					new LocationConfiguration(Config, "MWL_RuinsArena1", 25)
				},
				{
					"MWL_RuinsArena3_Configuration",
					new LocationConfiguration(Config, "MWL_RuinsArena3", 25)
				},
				{
					"MWL_RuinsChurch1_Configuration",
					new LocationConfiguration(Config, "MWL_RuinsChurch1", 25)
				},
				{
					"MWL_RuinsWell1_Configuration",
					new LocationConfiguration(Config, "MWL_RuinsWell1", 5)
				},
				{
					"MWL_DeerShrine1_Configuration",
					new LocationConfiguration(Config, "MWL_DeerShrine1", 10)
				},
				{
					"MWL_DeerShrine2_Configuration",
					new LocationConfiguration(Config, "MWL_DeerShrine2", 10)
				},
				{
					"MWL_MeadowsBarn1_Configuration",
					new LocationConfiguration(Config, "MWL_MeadowsBarn1", 5)
				},
				{
					"MWL_MeadowsHouse2_Configuration",
					new LocationConfiguration(Config, "MWL_MeadowsHouse2", 20)
				},
				{
					"MWL_MeadowsRuin1_Configuration",
					new LocationConfiguration(Config, "MWL_MeadowsRuin1", 5)
				},
				{
					"MWL_MeadowsTomb4_Configuration",
					new LocationConfiguration(Config, "MWL_MeadowsTomb4", 10)
				},
				{
					"MWL_MeadowsTower1_Configuration",
					new LocationConfiguration(Config, "MWL_MeadowsTower1", 15)
				},
				{
					"MWL_OakHut1_Configuration",
					new LocationConfiguration(Config, "MWL_OakHut1", 15)
				},
				{
					"MWL_SmallHouse1_Configuration",
					new LocationConfiguration(Config, "MWL_SmallHouse1", 20)
				},
				{
					"MWL_MeadowsFarm1_Configuration",
					new LocationConfiguration(Config, "MWL_MeadowsFarm1", 10)
				},
				{
					"MWL_MeadowsLighthouse1_Configuration",
					new LocationConfiguration(Config, "MWL_MeadowsLighthouse1", 10)
				},
				{
					"MWL_MeadowsSawmill1_Configuration",
					new LocationConfiguration(Config, "MWL_MeadowsSawmill1", 10)
				},
				{
					"MWL_MeadowsWall1_Configuration",
					new LocationConfiguration(Config, "MWL_MeadowsWall1", 10)
				},
				{
					"MWL_MeadowsTavern1_Configuration",
					new LocationConfiguration(Config, "MWL_MeadowsTavern1", 10)
				},
				{
					"MWL_RuinsArena2_Configuration",
					new LocationConfiguration(Config, "MWL_RuinsArena2", 5)
				},
				{
					"MWL_RuinsCastle1_Configuration",
					new LocationConfiguration(Config, "MWL_RuinsCastle1", 15)
				},
				{
					"MWL_RuinsCastle3_Configuration",
					new LocationConfiguration(Config, "MWL_RuinsCastle3", 5)
				},
				{
					"MWL_RuinsTower3_Configuration",
					new LocationConfiguration(Config, "MWL_RuinsTower3", 15)
				},
				{
					"MWL_RuinsTower8_Configuration",
					new LocationConfiguration(Config, "MWL_RuinsTower8", 10)
				},
				{
					"MWL_Tavern1_Configuration",
					new LocationConfiguration(Config, "MWL_Tavern1", 15)
				},
				{
					"MWL_WoodTower1_Configuration",
					new LocationConfiguration(Config, "MWL_WoodTower1", 10)
				},
				{
					"MWL_WoodTower2_Configuration",
					new LocationConfiguration(Config, "MWL_WoodTower2", 10)
				},
				{
					"MWL_WoodTower3_Configuration",
					new LocationConfiguration(Config, "MWL_WoodTower3", 10)
				},
				{
					"MWL_RuinsTower6_Configuration",
					new LocationConfiguration(Config, "MWL_RuinsTower6", 15)
				},
				{
					"MWL_ForestForge1_Configuration",
					new LocationConfiguration(Config, "ForestForge1", 20)
				},
				{
					"MWL_ForestForge2_Configuration",
					new LocationConfiguration(Config, "ForestForge2", 20)
				},
				{
					"MWL_ForestGreatHouse2_Configuration",
					new LocationConfiguration(Config, "ForestGreatHouse2", 20)
				},
				{
					"MWL_ForestHouse2_Configuration",
					new LocationConfiguration(Config, "ForestHouse2", 20)
				},
				{
					"MWL_ForestRuin1_Configuration",
					new LocationConfiguration(Config, "ForestRuin1", 20)
				},
				{
					"MWL_ForestTower2_Configuration",
					new LocationConfiguration(Config, "ForestTower2", 20)
				},
				{
					"MWL_ForestTower3_Configuration",
					new LocationConfiguration(Config, "ForestTower3", 20)
				},
				{
					"MWL_MassGrave1_Configuration",
					new LocationConfiguration(Config, "MassGrave1", 15)
				},
				{
					"MWL_StoneFormation1_Configuration",
					new LocationConfiguration(Config, "StoneFormation1", 15)
				},
				{
					"MWL_GuardTower1_Configuration",
					new LocationConfiguration(Config, "GuardTower1", 5)
				},
				{
					"MWL_RootRuins1_Configuration",
					new LocationConfiguration(Config, "RootRuins1", 15)
				},
				{
					"MWL_RootsTower1_Configuration",
					new LocationConfiguration(Config, "RootsTower1", 20)
				},
				{
					"MWL_RootsTower2_Configuration",
					new LocationConfiguration(Config, "RootsTower2", 10)
				},
				{
					"MWL_StoneOutlook1_Configuration",
					new LocationConfiguration(Config, "StoneOutlook1", 10)
				},
				{
					"MWL_ForestRuin2_Configuration",
					new LocationConfiguration(Config, "ForestRuin2", 15)
				},
				{
					"MWL_ForestRuin3_Configuration",
					new LocationConfiguration(Config, "ForestRuin3", 15)
				},
				{
					"MWL_ForestSkull1_Configuration",
					new LocationConfiguration(Config, "ForestSkull1", 15)
				},
				{
					"MWL_ForestTower4_Configuration",
					new LocationConfiguration(Config, "ForestTower4", 15)
				},
				{
					"MWL_ForestTower5_Configuration",
					new LocationConfiguration(Config, "ForestTower5", 15)
				},
				{
					"MWL_ForestPillar1_Configuration",
					new LocationConfiguration(Config, "ForestPillar1", 15)
				},
				{
					"MWL_CoastTower1_Configuration",
					new LocationConfiguration(Config, "CoastTower1", 15)
				},
				{
					"MWL_GuckPit1_Configuration",
					new LocationConfiguration(Config, "GuckPit1", 15)
				},
				{
					"MWL_SwampAltar1_Configuration",
					new LocationConfiguration(Config, "SwampAltar1", 15)
				},
				{
					"MWL_SwampAltar2_Configuration",
					new LocationConfiguration(Config, "SwampAltar2", 10)
				},
				{
					"MWL_SwampAltar3_Configuration",
					new LocationConfiguration(Config, "SwampAltar3", 10)
				},
				{
					"MWL_SwampAltar4_Configuration",
					new LocationConfiguration(Config, "SwampAltar4", 10)
				},
				{
					"MWL_SwampCastle2_Configuration",
					new LocationConfiguration(Config, "SwampCastle2", 10)
				},
				{
					"MWL_SwampGrave1_Configuration",
					new LocationConfiguration(Config, "SwampGrave1", 25)
				},
				{
					"MWL_SwampHouse1_Configuration",
					new LocationConfiguration(Config, "SwampHouse1", 20)
				},
				{
					"MWL_SwampRuin1_Configuration",
					new LocationConfiguration(Config, "SwampRuin1", 25)
				},
				{
					"MWL_SwampTower1_Configuration",
					new LocationConfiguration(Config, "SwampTower1", 20)
				},
				{
					"MWL_SwampTower2_Configuration",
					new LocationConfiguration(Config, "SwampTower2", 25)
				},
				{
					"MWL_SwampTower3_Configuration",
					new LocationConfiguration(Config, "SwampTower3", 25)
				},
				{
					"MWL_SwampWell1_Configuration",
					new LocationConfiguration(Config, "SwampWell1", 20)
				},
				{
					"MWL_AbandonedHouse1_Configuration",
					new LocationConfiguration(Config, "AbandonedHouse1", 15)
				},
				{
					"MWL_Treehouse1_Configuration",
					new LocationConfiguration(Config, "Treehouse1", 20)
				},
				{
					"MWL_Shipyard1_Configuration",
					new LocationConfiguration(Config, "Shipyard1", 20)
				},
				{
					"MWL_FortBakkarhalt1_Configuration",
					new LocationConfiguration(Config, "FortBakkarhalt1", 5)
				},
				{
					"MWL_Belmont1_Configuration",
					new LocationConfiguration(Config, "Belmont1", 5)
				},
				{
					"MWL_SwampCourtyard1_Configuration",
					new LocationConfiguration(Config, "SwampCourtyard1", 5)
				},
				{
					"MWL_SwampBrokenTower1_Configuration",
					new LocationConfiguration(Config, "SwampBrokenTower1", 15)
				},
				{
					"MWL_SwampBrokenTower3_Configuration",
					new LocationConfiguration(Config, "SwampBrokenTower3", 10)
				},
				{
					"MWL_StoneCastle1_Configuration",
					new LocationConfiguration(Config, "StoneCastle1", 5)
				},
				{
					"MWL_StoneFort1_Configuration",
					new LocationConfiguration(Config, "StoneFort1", 10)
				},
				{
					"MWL_StoneHall1_Configuration",
					new LocationConfiguration(Config, "StoneHall1", 10)
				},
				{
					"MWL_StoneTavern1_Configuration",
					new LocationConfiguration(Config, "StoneTavern1", 10)
				},
				{
					"MWL_StoneTower1_Configuration",
					new LocationConfiguration(Config, "StoneTower1", 10)
				},
				{
					"MWL_StoneTower2_Configuration",
					new LocationConfiguration(Config, "StoneTower2", 10)
				},
				{
					"MWL_WoodBarn1_Configuration",
					new LocationConfiguration(Config, "WoodBarn1", 10)
				},
				{
					"MWL_WoodFarm1_Configuration",
					new LocationConfiguration(Config, "WoodFarm1", 10)
				},
				{
					"MWL_WoodHouse1_Configuration",
					new LocationConfiguration(Config, "WoodHouse1", 5)
				},
				{
					"MWL_TempleShrine1_Configuration",
					new LocationConfiguration(Config, "TempleShrine1", 5)
				},
				{
					"MWL_StoneAltar1_Configuration",
					new LocationConfiguration(Config, "StoneAltar1", 15)
				},
				{
					"MWL_GoblinFort1_Configuration",
					new LocationConfiguration(Config, "GoblinFort1", 10)
				},
				{
					"MWL_FulingRock1_Configuration",
					new LocationConfiguration(Config, "FulingRock1", 15)
				},
				{
					"MWL_FulingVillage1_Configuration",
					new LocationConfiguration(Config, "FulingVillage1", 15)
				},
				{
					"MWL_FulingVillage2_Configuration",
					new LocationConfiguration(Config, "FulingVillage2", 15)
				},
				{
					"MWL_PlainsPillar1_Configuration",
					new LocationConfiguration(Config, "PlainsPillar1", 15)
				},
				{
					"MWL_FulingTemple1_Configuration",
					new LocationConfiguration(Config, "FulingTemple1", 15)
				},
				{
					"MWL_FulingTemple2_Configuration",
					new LocationConfiguration(Config, "FulingTemple2", 20)
				},
				{
					"MWL_FulingTemple3_Configuration",
					new LocationConfiguration(Config, "FulingTemple3", 20)
				},
				{
					"MWL_FulingWall1_Configuration",
					new LocationConfiguration(Config, "FulingWall1", 20)
				},
				{
					"MWL_FulingTower1_Configuration",
					new LocationConfiguration(Config, "FulingTower1", 20)
				},
				{
					"MWL_RockGarden1_Configuration",
					new LocationConfiguration(Config, "RockGarden1", 15)
				},
				{
					"MWL_MistFort2_Configuration",
					new LocationConfiguration(Config, "MistFort2", 20)
				},
				{
					"MWL_SecretRoom1_Configuration",
					new LocationConfiguration(Config, "SecretRoom1", 15)
				},
				{
					"MWL_MistWorkshop1_Configuration",
					new LocationConfiguration(Config, "MistWorkshop1", 25)
				},
				{
					"MWL_MistTower1_Configuration",
					new LocationConfiguration(Config, "MistTower1", 20)
				},
				{
					"MWL_MistWall1_Configuration",
					new LocationConfiguration(Config, "MistWall1", 15)
				},
				{
					"MWL_MistTower2_Configuration",
					new LocationConfiguration(Config, "MistTower2", 25)
				},
				{
					"MWL_MistHut1_Configuration",
					new LocationConfiguration(Config, "MistHut1", 25)
				},
				{
					"MWL_DvergrEitrSingularity1_Configuration",
					new LocationConfiguration(Config, "DvergrEitrSingularity1", 25)
				},
				{
					"MWL_DvergrHouse1_Configuration",
					new LocationConfiguration(Config, "DvergrHouse1", 20)
				},
				{
					"MWL_DvergrKnowledgeExtractor1_Configuration",
					new LocationConfiguration(Config, "DvergrKnowledgeExtractor1", 15)
				},
				{
					"MWL_AncientShrine1_Configuration",
					new LocationConfiguration(Config, "AncientShrine1", 15)
				},
				{
					"MWL_MistShrine1_Configuration",
					new LocationConfiguration(Config, "MistShrine1", 15)
				},
				{
					"MWL_AshlandsFort1_Configuration",
					new LocationConfiguration(Config, "MWL_AshlandsFort1", 5)
				},
				{
					"MWL_AshlandsFort2_Configuration",
					new LocationConfiguration(Config, "MWL_AshlandsFort2", 5)
				},
				{
					"MWL_AshlandsFort3_Configuration",
					new LocationConfiguration(Config, "MWL_AshlandsFort3", 5)
				},
				{
					"MWL_CastleCorner1_Configuration",
					new LocationConfiguration(Config, "CastleCorner1", 15)
				},
				{
					"MWL_ForestCamp1_Configuration",
					new LocationConfiguration(Config, "ForestCamp1", 20)
				},
				{
					"MWL_Misthut2_Configuration",
					new LocationConfiguration(Config, "Misthut2", 15)
				},
				{
					"MWL_MountainDvergrShrine1_Configuration",
					new LocationConfiguration(Config, "MountainDvergrShrine1", 15)
				},
				{
					"MWL_MountainShrine1_Configuration",
					new LocationConfiguration(Config, "MountainShrine1", 20)
				},
				{
					"MWL_RuinedTower1_Configuration",
					new LocationConfiguration(Config, "RuinedTower1", 15)
				},
				{
					"MWL_TreeTowers1_Configuration",
					new LocationConfiguration(Config, "TreeTowers1", 20)
				}
			};
		}
	}
	[<e825b352-0499-4f80-a0cf-e9a37c927703>Nullable(0)]
	[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(1)]
	public class LocationConfigs
	{
		[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(0)]
		public struct LocationRing
		{
			public int MinDistance { get; set; }

			public int MaxDistance { get; set; }

			public LocationRing(int minDistance, int maxDistance)
			{
				MinDistance = minDistance;
				MaxDistance = maxDistance;
			}
		}

		[<9867f7cb-8c44-4101-94cb-8e738bb24790>NullableContext(0)]
		public static class LocationRings
		{
			public static LocationRing Ring1 { get; set; } = new LocationRing(0, 500);


			public static LocationRing Ring2 { get; set; } = new LocationRing(500, 2000);


			public static LocationRing Ring3 { get; set; } = new LocationRing(1500, 3000);


			public static LocationRing Ring4 { get; set; } = new LocationRing(2500, 4000);


			public static LocationRing Ring5 { get; set; } = new LocationRing(3500, 6000);


			public static LocationRing Ring6 { get; set; } = new LocationRing(4500, 8500);


			public static LocationRing Ring7 { get; set; } = new LocationRing(5000, 10500);

		}

		public static Dictionary<string, LocationConfig> MeadowsPack1LocationConfigs = new Dictionary<string, LocationConfig>
		{
			{
				"MWL_Ruins1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_Ruins1_Configuration"),
					Biome = (Biome)1,
					Priotized = true,
					ExteriorRadius = 8f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_small",
					MinDistanceFromSimilar = 256f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring1.MinDistance,
					MaxDistance = LocationRings.Ring1.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_Ruins2_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_Ruins2_Configuration"),
					Biome = (Biome)1,
					Priotized = true,
					ExteriorRadius = 8f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_medium",
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 3f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring2.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_Ruins3_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_Ruins3_Configuration"),
					Biome = (Biome)1,
					Priotized = true,
					ExteriorRadius = 8f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_small",
					MinDistanceFromSimilar = 256f,
					MaxTerrainDelta = 3f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring1.MinDistance,
					MaxDistance = LocationRings.Ring1.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_Ruins6_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_Ruins6_Configuration"),
					Biome = (Biome)1,
					Priotized = true,
					ExteriorRadius = 14f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_small",
					MinDistanceFromSimilar = 256f,
					MaxTerrainDelta = 3f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring3.MinDistance,
					MaxDistance = LocationRings.Ring3.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_Ruins7_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_Ruins7_Configuration"),
					Biome = (Biome)1,
					Priotized = true,
					ExteriorRadius = 7f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_medium",
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 5f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring1.MinDistance,
					MaxDistance = LocationRings.Ring1.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_Ruins8_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_Ruins8_Configuration"),
					Biome = (Biome)1,
					Priotized = true,
					ExteriorRadius = 11f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_small",
					MinDistanceFromSimilar = 256f,
					MaxTerrainDelta = 5f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring3.MinDistance,
					MaxDistance = LocationRings.Ring3.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_RuinsArena1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RuinsArena1_Configuration"),
					Biome = (Biome)1,
					Priotized = true,
					ExteriorRadius = 20f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_medium",
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 3f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring3.MinDistance,
					MaxDistance = LocationRings.Ring3.MaxDistance,
					InForest = true,
					ForestTresholdMin = 1.2f,
					ForestTrasholdMax = 2f
				}
			},
			{
				"MWL_RuinsArena3_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RuinsArena3_Configuration"),
					Biome = (Biome)1,
					Priotized = true,
					ExteriorRadius = 15f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_small",
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 3f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring2.MaxDistance,
					InForest = true,
					ForestTresholdMin = 0f,
					ForestTrasholdMax = 1f
				}
			},
			{
				"MWL_RuinsChurch1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RuinsChurch1_Configuration"),
					Biome = (Biome)1,
					Priotized = true,
					ExteriorRadius = 15f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_medium",
					MinDistanceFromSimilar = 256f,
					MaxTerrainDelta = 3f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring2.MaxDistance,
					InForest = true,
					ForestTresholdMin = 1.2f,
					ForestTrasholdMax = 2f
				}
			},
			{
				"MWL_RuinsWell1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RuinsWell1_Configuration"),
					Biome = (Biome)1,
					Priotized = true,
					ExteriorRadius = 5f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_well",
					MinDistanceFromSimilar = 256f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring1.MinDistance,
					MaxDistance = LocationRings.Ring1.MaxDistance,
					InForest = false
				}
			}
		};

		public static Dictionary<string, LocationConfig> MeadowsPack2LocationConfigs = new Dictionary<string, LocationConfig>
		{
			{
				"MWL_DeerShrine1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_DeerShrine1_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Ruins_shrine",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring1.MinDistance,
					MaxDistance = LocationRings.Ring3.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_DeerShrine2_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_DeerShrine2_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Ruins_shrine",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring4.MinDistance,
					InForest = false
				}
			},
			{
				"MWL_MeadowsBarn1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_MeadowsBarn1_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)2,
					Group = "Wood_small",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 3f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring1.MinDistance,
					MaxDistance = LocationRings.Ring2.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_MeadowsHouse2_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_MeadowsHouse2_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Wood_small",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring5.MinDistance,
					InForest = true
				}
			},
			{
				"MWL_MeadowsRuin1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_MeadowsRuin1_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Ruins_small",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring1.MinDistance,
					MaxDistance = LocationRings.Ring4.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_MeadowsTomb4_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_MeadowsTomb4_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Environment_medium",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 4f,
					MinAltitude = -1f,
					MaxAltitude = 1f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring4.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_MeadowsTower1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_MeadowsTower1_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Ruins_small",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 3f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring5.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_OakHut1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_OakHut1_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Wood_small",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring2.MinDistance,
					InForest = false
				}
			},
			{
				"MWL_SmallHouse1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_SmallHouse1_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Ruins_medium",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 3f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring3.MinDistance,
					InForest = false
				}
			},
			{
				"MWL_MeadowsFarm1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_MeadowsFarm1_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Structure_large",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring3.MinDistance,
					InForest = false
				}
			},
			{
				"MWL_MeadowsLighthouse1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_MeadowsLighthouse1_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Structure_large",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 1.5f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring3.MinDistance,
					InForest = false
				}
			},
			{
				"MWL_MeadowsSawmill1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_MeadowsSawmill1_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)2,
					Group = "Structure_large",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring4.MinDistance,
					InForest = false
				}
			},
			{
				"MWL_MeadowsWall1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_MeadowsWall1_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Structure_large",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 1.5f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring3.MinDistance,
					InForest = false
				}
			},
			{
				"MWL_MeadowsTavern1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_MeadowsTavern1_Configuration"),
					Biome = (Biome)1,
					BiomeArea = (BiomeArea)3,
					Group = "Structure_large",
					Priotized = true,
					RandomRotation = false,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring3.MinDistance,
					InForest = true
				}
			}
		};

		public static Dictionary<string, LocationConfig> BlackforestPack1LocationConfigs = new Dictionary<string, LocationConfig>
		{
			{
				"MWL_RuinsArena2_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RuinsArena2_Configuration"),
					Biome = (Biome)8,
					Priotized = true,
					ExteriorRadius = 20f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_large",
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring4.MinDistance,
					MaxDistance = LocationRings.Ring4.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_RuinsCastle1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RuinsCastle1_Configuration"),
					Biome = (Biome)8,
					Priotized = true,
					ExteriorRadius = 12.5f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_medium",
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring2.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_RuinsCastle3_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RuinsCastle3_Configuration"),
					Biome = (Biome)8,
					Priotized = true,
					ExteriorRadius = 20f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_large",
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 2f,
					MinAltitude = 0f,
					MaxAltitude = 2f,
					MinDistance = LocationRings.Ring3.MinDistance,
					MaxDistance = LocationRings.Ring3.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_RuinsTower3_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RuinsTower3_Configuration"),
					Biome = (Biome)8,
					Priotized = true,
					ExteriorRadius = 8f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_medium",
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring2.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_RuinsTower6_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RuinsTower6_Configuration"),
					Biome = (Biome)8,
					Priotized = true,
					ExteriorRadius = 8f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Ruins_large",
					MinDistanceFromSimilar = 512f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxAltitude = 1f
				}
			},
			{
				"MWL_RuinsTower8_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RuinsTower8_Configuration"),
					Biome = (Biome)8,
					Priotized = true,
					ExteriorRadius = 15f,
					ClearArea = true,
					RandomRotation = true,
					Group = "Ruins_medium",
					MinDistanceFromSimilar = 512f,
					MinAltitude = -2f,
					MaxAltitude = 0.5f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring2.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_Tavern1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_Tavern1_Configuration"),
					Biome = (Biome)8,
					Priotized = true,
					ExteriorRadius = 12f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Wood_small",
					MinDistanceFromSimilar = 256f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring3.MinDistance,
					MaxDistance = LocationRings.Ring3.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_WoodTower1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_WoodTower1_Configuration"),
					Biome = (Biome)8,
					Priotized = true,
					ExteriorRadius = 8f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Wood_small",
					MinDistanceFromSimilar = 256f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring2.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_WoodTower2_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_WoodTower2_Configuration"),
					Biome = (Biome)8,
					Priotized = true,
					ExteriorRadius = 8f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Wood_small",
					MinDistanceFromSimilar = 256f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring3.MinDistance,
					MaxDistance = LocationRings.Ring3.MaxDistance,
					InForest = false
				}
			},
			{
				"MWL_WoodTower3_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_WoodTower3_Configuration"),
					Biome = (Biome)8,
					Priotized = true,
					ExteriorRadius = 24f,
					ClearArea = true,
					RandomRotation = false,
					Group = "Wood_medium",
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 2f,
					MinAltitude = 1f,
					MinDistance = LocationRings.Ring3.MinDistance,
					MaxDistance = LocationRings.Ring3.MaxDistance,
					InForest = false
				}
			}
		};

		public static Dictionary<string, LocationConfig> BlackforestPack2LocationConfigs = new Dictionary<string, LocationConfig>
		{
			{
				"MWL_ForestForge1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestForge1_Configuration"),
					Biome = (Biome)8,
					Group = "Forge_small",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 12f,
					ClearArea = true,
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 3f,
					MinAltitude = 2f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring6.MaxDistance
				}
			},
			{
				"MWL_ForestForge2_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestForge2_Configuration"),
					Biome = (Biome)8,
					Group = "Forge_small",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 16f,
					ClearArea = true,
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 3f,
					MinAltitude = 2f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring6.MaxDistance
				}
			},
			{
				"MWL_ForestGreatHouse2_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestGreatHouse2_Configuration"),
					Biome = (Biome)8,
					Group = "House_large",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 10f,
					ClearArea = true,
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 4f,
					MinAltitude = 2f,
					MinDistance = LocationRings.Ring3.MinDistance,
					MaxDistance = LocationRings.Ring3.MaxDistance
				}
			},
			{
				"MWL_ForestHouse2_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestHouse2_Configuration"),
					Biome = (Biome)8,
					Group = "House_small",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 10f,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 10f,
					MinDistance = LocationRings.Ring4.MinDistance,
					MaxDistance = LocationRings.Ring5.MaxDistance
				}
			},
			{
				"MWL_ForestRuin1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestRuin1_Configuration"),
					Biome = (Biome)8,
					Group = "Ruins_large",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 8f,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 8f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring5.MaxDistance
				}
			},
			{
				"MWL_ForestTower2_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestTower2_Configuration"),
					Biome = (Biome)8,
					Group = "Tower_medium",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 10f,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 2f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring2.MaxDistance
				}
			},
			{
				"MWL_ForestTower3_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestTower3_Configuration"),
					Biome = (Biome)8,
					Group = "Tower_large",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 10f,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 3f,
					MinAltitude = 10f,
					MinDistance = LocationRings.Ring3.MinDistance,
					MaxDistance = LocationRings.Ring5.MaxDistance
				}
			},
			{
				"MWL_MassGrave1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_MassGrave1_Configuration"),
					Biome = (Biome)8,
					Group = "Grave_large",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 3f,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 10f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring2.MaxDistance
				}
			},
			{
				"MWL_StoneFormation1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_StoneFormation1_Configuration"),
					Biome = (Biome)8,
					Group = "Stone_small",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 5f,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 10f,
					MinDistance = LocationRings.Ring2.MinDistance
				}
			},
			{
				"MWL_GuardTower1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_GuardTower1_Configuration"),
					Biome = (Biome)8,
					Group = "Ruins_large",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 5f,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 6f,
					MinDistance = LocationRings.Ring3.MinDistance
				}
			},
			{
				"MWL_RootRuins1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RootRuins1_Configuration"),
					Biome = (Biome)8,
					Group = "Ruins_small",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 5f,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 10f,
					MinDistance = LocationRings.Ring2.MinDistance,
					MaxDistance = LocationRings.Ring4.MaxDistance
				}
			},
			{
				"MWL_RootsTower1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RootsTower1_Configuration"),
					Biome = (Biome)8,
					Group = "Ruins_medium",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 5f,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 10f,
					MinDistance = LocationRings.Ring3.MinDistance,
					MaxDistance = LocationRings.Ring6.MaxDistance
				}
			},
			{
				"MWL_RootsTower2_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_RootsTower2_Configuration"),
					Biome = (Biome)8,
					Group = "Ruins_medium",
					Priotized = true,
					RandomRotation = false,
					ExteriorRadius = 5f,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 10f,
					MinDistance = LocationRings.Ring2.MinDistance
				}
			},
			{
				"MWL_StoneOutlook1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_StoneOutlook1_Configuration"),
					Biome = (Biome)8,
					Group = "Coastal",
					Priotized = true,
					RandomRotation = false,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MinAltitude = -2f,
					MaxAltitude = 1f,
					MinDistance = LocationRings.Ring2.MinDistance,
					SlopeRotation = true
				}
			},
			{
				"MWL_ForestRuin2_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestRuin2_Configuration"),
					Biome = (Biome)8,
					Group = "Ruins_medium",
					Priotized = true,
					RandomRotation = false,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MinAltitude = 2f,
					MinDistance = LocationRings.Ring2.MinDistance
				}
			},
			{
				"MWL_ForestRuin3_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestRuin3_Configuration"),
					Biome = (Biome)8,
					Group = "Ruins_medium",
					Priotized = true,
					RandomRotation = false,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 2f,
					MinDistance = LocationRings.Ring3.MinDistance
				}
			},
			{
				"MWL_ForestSkull1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestSkull1_Configuration"),
					Biome = (Biome)8,
					Group = "Ruins_small",
					Priotized = true,
					RandomRotation = false,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 2f,
					MinDistance = LocationRings.Ring4.MinDistance
				}
			},
			{
				"MWL_ForestTower4_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestTower5_Configuration"),
					Biome = (Biome)8,
					Group = "Ruins_medium",
					Priotized = true,
					RandomRotation = false,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 2f,
					MinAltitude = 2f,
					MinDistance = LocationRings.Ring3.MinDistance
				}
			},
			{
				"MWL_ForestTower5_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestTower5_Configuration"),
					Biome = (Biome)8,
					Group = "Ruins_medium",
					Priotized = true,
					RandomRotation = false,
					ClearArea = true,
					MinDistanceFromSimilar = 1024f,
					MaxTerrainDelta = 3f,
					MinAltitude = 2f,
					MinDistance = LocationRings.Ring4.MinDistance,
					MaxDistance = LocationRings.Ring5.MaxDistance
				}
			},
			{
				"MWL_ForestPillar1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_ForestPillar1_Configuration"),
					Biome = (Biome)8,
					Group = "Ruins_small",
					Priotized = true,
					RandomRotation = false,
					ClearArea = true,
					MinDistanceFromSimilar = 512f,
					MaxTerrainDelta = 3f,
					MinAltitude = 2f,
					MaxDistance = LocationRings.Ring3.MaxDistance
				}
			},
			{
				"MWL_CoastTower1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_CoastTower1_Configuration"),
					Biome = (Biome)8,
					Group = "Coastal",
					Priotized = true,
					RandomRotation = false,
					ClearArea = true,
					MinDistanceFromSimilar = 512f,
					MinAltitude = -1f,
					MaxAltitude = 0f
				}
			}
		};

		public static Dictionary<string, LocationConfig> SwampPack1LocationConfigs = new Dictionary<string, LocationConfig>
		{
			{
				"MWL_GuckPit1_Config",
				new LocationConfig
				{
					Quantity = GetQuantity("MWL_GuckPit1_Configur