Decompiled source of balrond MonsterMayehm v0.2.1

plugins/BalrondMonsterMayhem.dll

Decompiled a month ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Bootstrap;
using HarmonyLib;
using LitJson2;
using SoftReferenceableAssets;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.SceneManagement;
using UpgradeWorld;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Balrond Biomes")]
[assembly: AssemblyDescription("Valheim Game Rework")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Balrond - Worm Works Studio")]
[assembly: AssemblyProduct("Balrond")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("Balrond")]
[assembly: ComVisible(false)]
[assembly: Guid("f405ea1c-ac25-47a3-9aa2-a8f56c14bfd6")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace UpgradeWorld
{
	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)delegate(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);
		}
	}
	[HarmonyPatch(typeof(Terminal), "InitTerminal")]
	public static class Upgrade
	{
		private static List<CommandRegistration> registrations = new List<CommandRegistration>();

		public const string GUID = "upgrade_world";

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

		private static void Postfix()
		{
			foreach (CommandRegistration registration in registrations)
			{
				registration.AddCommand();
			}
		}
	}
}
namespace BalrondNature
{
	public class TableMapper
	{
		public static CraftingStation cauldron;

		public static CraftingStation workbench;

		public static CraftingStation heavyWorkbench;

		public static CraftingStation forge;

		public static CraftingStation ironworks;

		public static CraftingStation blackforge;

		public static CraftingStation stoneCutter;

		public static CraftingStation artisian;

		public static CraftingStation magetable;

		public static CraftingStation runeforge;

		public static CraftingStation tannery;

		public static CraftingStation fletcher;

		public static CraftingStation grill;

		public static CraftingStation alchemylab;

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

		public static void setupTables(List<GameObject> list)
		{
			pieces = list;
			prepareTables();
		}

		private static CraftingStation FindStation(List<GameObject> list, string name)
		{
			GameObject val = list.Find((GameObject x) => ((Object)x).name == name);
			if ((Object)(object)val != (Object)null)
			{
				return val.GetComponent<CraftingStation>();
			}
			Debug.LogWarning((object)("TableMapper - Station not found: " + name));
			return null;
		}

		private static void prepareTables()
		{
			cauldron = FindStation(pieces, "piece_cauldron");
			workbench = FindStation(pieces, "piece_workbench");
			heavyWorkbench = FindStation(pieces, "piece_heavy_workbench_bal");
			forge = FindStation(pieces, "forge");
			ironworks = FindStation(pieces, "piece_metalworks_bal");
			blackforge = FindStation(pieces, "blackforge");
			stoneCutter = FindStation(pieces, "piece_stonecutter");
			artisian = FindStation(pieces, "piece_artisanstation");
			runeforge = FindStation(pieces, "piece_runeforge_bal");
			magetable = FindStation(pieces, "piece_magetable");
			fletcher = FindStation(pieces, "piece_fletcher_bal");
		}
	}
}
namespace BalrondExtendedAnimals
{
	public class BalrondTranslator
	{
		public static Dictionary<string, Dictionary<string, string>> translations = new Dictionary<string, Dictionary<string, string>>();

		public static Dictionary<string, string> getLanguage(string language)
		{
			Dictionary<string, string> result = null;
			try
			{
				result = translations[language];
			}
			catch (Exception)
			{
			}
			return result;
		}
	}
	[Serializable]
	internal class MonsterHunger : MonoBehaviour
	{
		private MonsterAI monsterAI;

		private ZNetView zNetView;

		private Tameable tameable;

		private Humanoid humanoid;

		public float hungerTime = 600f;

		public bool canEat = true;

		private float currentHunger = 0f;

		public ItemDrop itemToConsume = null;

		private void Awake()
		{
			monsterAI = ((Component)this).GetComponent<MonsterAI>();
			zNetView = ((Component)this).GetComponent<ZNetView>();
			tameable = ((Component)this).GetComponent<Tameable>();
			humanoid = ((Component)this).GetComponent<Humanoid>();
			if ((Object)(object)tameable != (Object)null)
			{
				hungerTime = tameable.m_fedDuration;
			}
			float num = 0.75f;
			if (((Character)humanoid).m_level < 3)
			{
				num = ((Character)humanoid).m_level;
			}
			if (((Character)humanoid).m_level > 2)
			{
				num = 0.75f;
			}
			if (((Character)humanoid).m_level > 4)
			{
				num -= 0.1f;
			}
			if (((Character)humanoid).m_level > 5)
			{
				num -= 0.15f;
			}
			((Character)humanoid).SetMaxHealth(((Character)humanoid).m_health * num);
			((MonoBehaviour)this).InvokeRepeating("Hunger", 1f, 1f);
		}

		public void MonsterFoodHeal()
		{
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			if (canEat)
			{
				((BaseAI)monsterAI).m_character.Heal(((BaseAI)monsterAI).m_character.GetMaxHealth() / 5f, true);
				monsterAI.m_onConsumedItem(itemToConsume);
				humanoid.m_consumeItemEffects.Create(((Component)this).transform.position, Quaternion.identity, (Transform)null, 1f, -1);
				((BaseAI)monsterAI).m_animator.SetTrigger("consume");
				itemToConsume = null;
				canEat = false;
				currentHunger = 0f;
				Debug.LogWarning((object)("I have feasted: " + ((Object)((Component)this).gameObject).name));
			}
		}

		private void Hunger()
		{
			currentHunger += 1f;
			if (currentHunger >= hungerTime)
			{
				canEat = true;
			}
		}
	}
	public class BaseLevelEffectSetupValue
	{
		public float scale = 1.1f;

		public float saturation = 0.5f;

		public float hue = -0.1f;

		public float value = -0.1f;

		public bool setEmmisive = false;

		public float sumValue = 0.05f;

		public LevelSetup setup = null;

		public GameObject enabledObject = null;

		public GameObject enabledObjectLevel2 = null;

		public GameObject enabledObjectLevel3 = null;

		public bool setEmissive = false;

		public Color emissive = Color.white;

		public void GetSetup(LevelEffects levelEffects)
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)levelEffects == (Object)null)
			{
				Debug.LogWarning((object)"LevelEffects is null");
				return;
			}
			List<LevelSetup> levelSetups = levelEffects.m_levelSetups;
			int num = levelSetups?.Count ?? 0;
			if (num > 0)
			{
				setup = levelSetups.Last();
				ApplySetupValues();
			}
			else
			{
				SetDefaultValues(num, ((Component)levelEffects).transform.localScale.y);
			}
			HandleCharacterSpecificAdjustments(levelEffects);
		}

		private void ApplySetupValues()
		{
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			if (setup != null)
			{
				scale = setup.m_scale;
				saturation = setup.m_saturation;
				hue = setup.m_hue;
				value = setup.m_value;
				enabledObject = setup.m_enableObject;
				enabledObjectLevel2 = enabledObject;
				enabledObjectLevel3 = enabledObject;
				emissive = setup.m_emissiveColor;
				setEmissive = setup.m_setEmissiveColor;
			}
		}

		private void SetDefaultValues(int levels, float baseScale)
		{
			switch (levels)
			{
			case 0:
				scale = baseScale;
				saturation = 0f;
				hue = 0f;
				value = 0f;
				break;
			case 1:
				scale = baseScale + 0.05f;
				saturation = 0.5f;
				hue = -0.05f;
				value = -0.05f;
				break;
			case 2:
				scale = baseScale + 0.1f;
				saturation = 0.5f;
				hue = -0.1f;
				value = -0.1f;
				break;
			}
		}

		private void HandleCharacterSpecificAdjustments(LevelEffects levelEffects)
		{
			Character character = levelEffects.m_character;
			object obj;
			if (character == null)
			{
				obj = null;
			}
			else
			{
				GameObject gameObject = ((Component)character).gameObject;
				obj = ((gameObject != null) ? ((Object)gameObject).name : null);
			}
			string text = (string)obj;
			if (string.IsNullOrEmpty(text))
			{
				return;
			}
			string text2 = text;
			string text3 = text2;
			if (!(text3 == "Deer"))
			{
				if (text3 == "Boar")
				{
					EditBoar(levelEffects);
				}
			}
			else
			{
				EditDeer(levelEffects);
			}
		}

		private void EditDeer(LevelEffects levelEffects)
		{
			if (levelEffects.m_levelSetups.Count >= 2)
			{
				GameObject enableObject = levelEffects.m_levelSetups[0].m_enableObject;
				GameObject enableObject2 = levelEffects.m_levelSetups[1].m_enableObject;
				enabledObjectLevel2 = enableObject;
				enabledObjectLevel3 = enableObject2;
				Transform parent = enableObject.transform.parent;
				object obj;
				if (parent == null)
				{
					obj = null;
				}
				else
				{
					Transform obj2 = parent.Find("Antler1");
					obj = ((obj2 != null) ? ((Component)obj2).gameObject : null);
				}
				GameObject val = (GameObject)obj;
				if ((Object)(object)val != (Object)null)
				{
					enabledObject = val;
					levelEffects.m_levelSetups[0].m_enableObject = val;
					levelEffects.m_levelSetups[1].m_enableObject = val;
				}
			}
		}

		private void EditBoar(LevelEffects levelEffects)
		{
		}
	}
	public class LevelEffectGenerator
	{
		private readonly BaseLevelEffectSetupValue baseSetup = new BaseLevelEffectSetupValue();

		public void CreateVisuals(LevelEffects levelEffects)
		{
			if (!((Object)(object)levelEffects == (Object)null))
			{
				baseSetup.GetSetup(levelEffects);
				int num = levelEffects.m_levelSetups?.Count ?? 0;
				int num2 = Mathf.Max(0, 6 - num);
				for (int i = 0; i < num2; i++)
				{
					float delta = baseSetup.sumValue * (float)(i + 1);
					LevelSetup item = CreateSetup(delta, num2, i + 1);
					levelEffects.m_levelSetups.Add(item);
				}
			}
		}

		public LevelEffects CreateLevelEffectAt(Transform visual, SkinnedMeshRenderer meshRenderer)
		{
			if ((Object)(object)meshRenderer == (Object)null)
			{
				object obj;
				if (visual == null)
				{
					obj = null;
				}
				else
				{
					Transform parent = visual.parent;
					obj = ((parent != null) ? ((Object)parent).name : null);
				}
				Debug.LogWarning((object)("No renderer for visual effects: " + (string?)obj));
				return null;
			}
			return InitLevelEffects(visual, meshRenderer);
		}

		public LevelEffects CreateLevelEffectComponent(Transform visual)
		{
			SkinnedMeshRenderer[] componentsInChildren = ((Component)visual).GetComponentsInChildren<SkinnedMeshRenderer>();
			if (componentsInChildren.Length == 1)
			{
				return InitLevelEffects(visual, componentsInChildren[0]);
			}
			if (componentsInChildren.Length > 1)
			{
				object obj;
				if (visual == null)
				{
					obj = null;
				}
				else
				{
					Transform parent = visual.parent;
					obj = ((parent != null) ? ((Object)parent).name : null);
				}
				Debug.LogWarning((object)("Too many renderers for visual effects: " + (string?)obj));
			}
			return null;
		}

		private LevelEffects InitLevelEffects(Transform visual, SkinnedMeshRenderer renderer)
		{
			LevelEffects val = ((Component)visual).gameObject.AddComponent<LevelEffects>();
			val.m_mainRender = (Renderer)(object)renderer;
			Transform parent = visual.parent;
			val.m_character = (Character)(object)((parent != null) ? ((Component)parent).GetComponent<Humanoid>() : null);
			return val;
		}

		private LevelSetup CreateSetup(float delta, int maxLevels, int level)
		{
			//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_0019: 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_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Expected O, but got Unknown
			return new LevelSetup
			{
				m_scale = baseSetup.scale + delta,
				m_saturation = baseSetup.saturation + delta,
				m_hue = baseSetup.hue + delta,
				m_value = baseSetup.value + delta,
				m_enableObject = PickEnabledObject(maxLevels, level),
				m_setEmissiveColor = baseSetup.setEmissive,
				m_emissiveColor = new Color(baseSetup.emissive.r + delta, baseSetup.emissive.g + delta, baseSetup.emissive.b + delta, baseSetup.emissive.a)
			};
		}

		private GameObject PickEnabledObject(int maxLevels, int level)
		{
			if (maxLevels >= 6)
			{
				if (level > 4)
				{
					return baseSetup.enabledObjectLevel3;
				}
				if (level > 2)
				{
					return baseSetup.enabledObjectLevel2;
				}
			}
			else if (maxLevels == 3)
			{
				if (level > 3)
				{
					return baseSetup.enabledObjectLevel3;
				}
				if (level > 2)
				{
					return baseSetup.enabledObjectLevel2;
				}
			}
			else
			{
				switch (level)
				{
				case 2:
					return baseSetup.enabledObjectLevel3;
				case 1:
					return baseSetup.enabledObjectLevel2;
				}
			}
			return baseSetup.enabledObject;
		}
	}
	internal class AttackList
	{
		public static string[] attacks = new string[59]
		{
			"Frostbjorn_Attack_bal", "Frostbjorn_RageAttack_bal", "Frostbjorn_Taunt_bal", "Habrok_Bite_bal", "Habrok_Headbutt_bal", "habrok_Pounce_bal", "HabrokBirb_Bite_bal", "Greydwarf_Moss_RootSpawn_bal", "battlehog_base_attack_bal", "penguin_base_attack_bal",
			"polarbear_attack_bal", "bear_attack_bal", "bear_attackBite_bal", "bear_attack2_bal", "bear_attackStanding_bal", "bloodling_aoe_bal", "crabForest_attack_bal", "crabSea_attack_bal", "crabSea_attack2_bal", "crabSea_attack3_bal",
			"crabStone_attack_bal", "crabStone_attack2_bal", "crabStone_attack3_bal", "CrowHit_melee_bal", "Deathsquito_sting_bal", "darkbat_melee_bal", "Ell_BiteAttack_bal", "Ell_shock_bal", "Goat_charge_bal", "Goleming_attack_bal",
			"Goleming_throw_bal", "GreydwarfBeeKeeper_throw_bal", "Greydwarf_crasher_attack_bal", "Greydwarf_crasher_attack_left_bal", "Greydwarf_crasher_claw_bal", "Greydwarf_crasher_claw_left_bal", "GreylingBee_attack_bal", "GreylingBee_attack_left_bal", "GreylingElite_attackSlam_bal", "GreylingElite_attack_bal",
			"GreyWatcherAttackMelee_bal", "hog_base_attack_bal", "hog_smack_attack_bal", "Leech_PrimalBiteAttack_bal", "mossroot_attack_bal", "Moth_attack_bal", "NeckBrute_BiteAttack_bal", "NeckBrute_spit_bal", "Shark_attack_bal", "StagGhost_antler_bal",
			"Stag_antler_bal", "Stag_charge_bal", "StormDrake_lighting_bolt_bal", "SerpentBaby_attack_bal", "GoblinSkeleton_attack_bal", "FenringBrute_attack_claw_double_bal", "lostsoul_attack_bal", "Greydwarf_frozen_attack_bal", "Greydwarf_scorched_attack_bal"
		};
	}
	internal class ItemList
	{
		public static string[] items = new string[0];
	}
	internal class MonsterList
	{
		public static string[] monsters = new string[40]
		{
			"Doe_bal", "NeckTadpole_bal", "PolarBear_bal", "Fenring_Brute_bal", "Fox_bal", "Penguin_bal", "BattleHog_bal", "Ell_bal", "LostSoul_bal", "Bear_bal",
			"Bear_cub_bal", "CrabSea_bal", "CrabStone_bal", "DarkBat_bal", "Habrok_bal", "HabrokBirb_bal", "TrollOutcast_bal", "TrollBrute_bal", "Frostbjorn_bal", "GiantCrow_bal",
			"GoatKid_bal", "Goat_bal", "goblin_skeleton_bal", "Greydwarf_Crusher_bal", "Greydwarf_Frozen_bal", "Greydwarf_Moss_bal", "Greydwarf_Scorched_bal", "GreylingBeeKeeper_bal", "GreylingElite_bal", "Hog_bal",
			"LeechPrimal_bal", "MossRoot_bal", "NeckBrute_bal", "Serpentling_bal", "Shark_bal", "StagGhost_bal", "Stag_bal", "Stormdrake_bal", "TrollUndead_bal", "Fox_cub_bal"
		};
	}
	internal class OtherObjectList
	{
		public static string[] other = new string[56]
		{
			"root_beam_projectile_bal", "bloodling_selfDestruct_bal", "deer_ragdoll_bal", "fx_crab_death_bal", "GreydwarfBeekeper_throw_projectile_bal", "moss_tentacle_spawn_bal", "moth_aoe_bal", "NeckBrute_Ragdoll_bal", "neck_spit_projectile_bal", "sfx_bear_alerted_bal",
			"sfx_bear_attack_bal", "sfx_bear_birth_bal", "sfx_bear_death_bal", "sfx_bear_hit", "sfx_bear_hit_bal", "sfx_bear_idle_bal", "sfx_goleming_alerted_bal", "sfx_goleming_attack_bal", "sfx_goleming_death_bal", "sfx_goleming_hit_bal",
			"sfx_goleming_idle_bal", "sfx_lootbox_poof_bal", "sfx_neckBruteSpit_bal", "sfx_rock_destroyed_bal", "sfx_wings_flying_bal", "stormdrake_lightingBolt_bal", "vfx_neckSpitHit_bal", "vfx_shark_death_bal", "sfx_penguin_hurt_bal", "sfx_penguin_idle_bal",
			"sfx_penguin_death_bal", "sfx_penguin_alerted_bal", "ell_shock_aoe_bal", "vfx_thunderbolt_explosion_bal", "spiritbolt_projectile_bal", "vfx_spiritbolt_explosion_bal", "fx_TrollUndead_Gibs_bal", "vfx_LostSoulDeath_bal", "Spawner_Bear_bal", "Spawner_BearCub_bal",
			"Spawner_CrabSea_bal", "Spawner_FenringBrute_bal", "Spawner_GoblinSkeleton_bal", "Spawner_GreydwarfFrozen_bal", "Spawner_GreydwarfScorched_bal", "Spawner_Habrok_bal", "Spawner_HabrokBirb_bal", "Spawner_LostSoul_bal", "Spawner_PolarBear_bal", "Spawner_Stag_bal",
			"Spawner_StagGhost_bal", "Spawner_TrollOutcat_bal", "Spawner_TrollUndead_bal", "Spawner_NeckBrute_bal", "Spawner_NeckTadpole_bal", "Spawner_GiantCrow_bal"
		};
	}
	public class PlayerRace : MonoBehaviour
	{
		private ZNetView _znetView;

		private Player _player;

		private VisEquipment _visEquipment;

		private SkinnedMeshRenderer _meshRenderer;

		private Transform _visual;

		private GameObject _currentEars;

		private GameObject _currentFangs;

		private Material _playerMaterial;

		private Material _playerHair;

		public float bodyBuff = 0f;

		public float bodyHeight = 0f;

		public float bodyThickness = 0f;

		private string _currentRace = "Human";

		public Dictionary<string, RaceStruct> Races { get; private set; } = new Dictionary<string, RaceStruct>();


		private void Awake()
		{
			_znetView = ((Component)this).GetComponent<ZNetView>();
			if (!((Object)(object)_znetView == (Object)null))
			{
				_player = ((Component)this).GetComponent<Player>();
				if (!((Object)(object)_player == (Object)null))
				{
					((Component)_visEquipment).GetComponent<VisEquipment>();
					_meshRenderer = _visEquipment?.m_bodyModel;
					SkinnedMeshRenderer meshRenderer = _meshRenderer;
					_visual = ((meshRenderer != null) ? ((Component)meshRenderer).transform.parent : null);
					GetPlayerMaterials();
					CheckRace();
				}
			}
		}

		public void CheckRace()
		{
			SetRace(GetRace());
			SetupRace(_currentRace);
		}

		public string GetRace()
		{
			string value;
			return _player.m_customData.TryGetValue("BalrondRace", out value) ? value : "Human";
		}

		public void SetRace(string race)
		{
			string currentRace = (_player.m_customData["BalrondRace"] = race);
			_currentRace = currentRace;
		}

		public bool HasRaceStruct(string race = "")
		{
			return Races.ContainsKey(race);
		}

		public RaceStruct GetRaceStruct(string race = "")
		{
			RaceStruct value;
			return Races.TryGetValue(race, out value) ? value : default(RaceStruct);
		}

		private void GetPlayerMaterials()
		{
			if ((Object)(object)_meshRenderer == (Object)null)
			{
				return;
			}
			Material[] materials = ((Renderer)_meshRenderer).materials;
			foreach (Material val in materials)
			{
				if (((Object)val).name.Contains("PlayerMaterial"))
				{
					_playerMaterial = val;
				}
				if (((Object)val).name.Contains("PlayerHair"))
				{
					_playerHair = val;
				}
			}
		}

		public void SetupRace(string race = "")
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			if (HasRaceStruct(race))
			{
				RaceStruct raceStruct = GetRaceStruct(race);
				_currentRace = race;
				((Component)_visual).transform.localScale = raceStruct.scale;
				setMaterialTexture(raceStruct.m_body);
				SetRaceDetails(raceStruct);
				Humanoid player = (Humanoid)(object)_player;
			}
		}

		private void setMaterialTexture(Texture texture)
		{
			if (!((Object)(object)texture == (Object)null) && !((Object)(object)_playerMaterial == (Object)null))
			{
				_playerMaterial.SetTexture("_mainTex", texture);
			}
		}

		private void SetRaceDetails(RaceStruct raceStruct)
		{
			if (raceStruct.hasEar)
			{
				if ((Object)(object)_currentEars != (Object)null)
				{
					_currentEars.SetActive(false);
				}
				Transform val = FindDeepChild(_visual, raceStruct.ears);
				if ((Object)(object)val != (Object)null)
				{
					_currentEars = ((Component)val).gameObject;
					_currentEars.SetActive(true);
				}
			}
			if (raceStruct.hasFangs)
			{
				if ((Object)(object)_currentFangs != (Object)null)
				{
					_currentFangs.SetActive(false);
				}
				Transform val2 = FindDeepChild(_visual, raceStruct.fangs);
				if ((Object)(object)val2 != (Object)null)
				{
					_currentFangs = ((Component)val2).gameObject;
					_currentFangs.SetActive(true);
				}
			}
		}

		public static Transform FindDeepChild(Transform parent, string name)
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			foreach (Transform item in parent)
			{
				Transform val = item;
				if (((Object)val).name == name)
				{
					return val;
				}
				Transform val2 = FindDeepChild(val, name);
				if ((Object)(object)val2 != (Object)null)
				{
					return val2;
				}
			}
			return null;
		}
	}
	[Serializable]
	public struct RaceStruct
	{
		public string race;

		public bool hasEar;

		public bool hasFangs;

		public string ears;

		public string fangs;

		public Texture m_body;

		public Vector3 scale;
	}
	public class ItemEdits
	{
		private List<GameObject> items;

		private List<GameObject> buildPieces;

		private GameObject FindItem(List<GameObject> list, string name)
		{
			GameObject val = list.Find((GameObject x) => ((Object)x).name == name);
			if ((Object)(object)val != (Object)null)
			{
				return val;
			}
			Debug.LogWarning((object)("BalrondMonsterMayhem: Item Not Found: " + name));
			return null;
		}

		private Requirement createReq(string name, int amount, int amountPerLevel)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			Requirement val = new Requirement();
			val.m_recover = true;
			ItemDrop component = FindItem(items, name).GetComponent<ItemDrop>();
			val.m_resItem = component;
			val.m_amount = amount;
			val.m_amountPerLevel = amountPerLevel;
			return val;
		}

		public void editItems(List<GameObject> list)
		{
			foreach (GameObject item in list)
			{
				changeItem(item);
			}
		}

		private void changeItem(GameObject gameObject)
		{
			string name = ((Object)gameObject).name;
			string text = name;
		}

		private void CheckStats(GameObject gameObject)
		{
			string name = ((Object)gameObject).name;
			string text = name;
		}

		private void editSpiritDamageStat(GameObject gameObject, int spiritDamage)
		{
			ItemDrop component = gameObject.GetComponent<ItemDrop>();
			component.m_itemData.m_shared.m_damages.m_spirit = spiritDamage;
			if (((Object)gameObject).name == "skeleton_mace" || ((Object)gameObject).name == "imp_fireball_attack")
			{
				component.m_itemData.m_shared.m_damages.m_blunt += spiritDamage;
			}
		}

		private void editSurtlingDamageStat(GameObject gameObject, int fireDamage)
		{
			ItemDrop component = gameObject.GetComponent<ItemDrop>();
			component.m_itemData.m_shared.m_damages.m_fire = fireDamage;
			component.m_itemData.m_shared.m_damages.m_blunt += fireDamage;
		}

		private void editStackAndWeight(GameObject gameObject, float weight = -1f, int stack = 1)
		{
			ItemDrop component = gameObject.GetComponent<ItemDrop>();
			component.m_itemData.m_shared.m_weight = ((weight == -1f) ? component.m_itemData.m_shared.m_weight : weight);
			component.m_itemData.m_shared.m_autoStack = true;
			component.m_itemData.m_shared.m_maxStackSize = stack;
		}

		private void editArmorSetEffect(GameObject gameObject, int setSize, string statusName, string setName)
		{
			ItemDrop component = gameObject.GetComponent<ItemDrop>();
			component.m_itemData.m_shared.m_setName = setName;
			component.m_itemData.m_shared.m_setSize = setSize;
			component.m_itemData.m_shared.m_setStatusEffect = ObjectDB.instance.m_StatusEffects.Find((StatusEffect x) => ((Object)x).name == statusName);
		}

		private void editQualityValues(GameObject gameObject, float weightRatio = 0f, int quality = 4, float weight = -1f, float sppedDebuff = 0f, float equipeSpeed = -1f)
		{
			ItemDrop component = gameObject.GetComponent<ItemDrop>();
			component.m_itemData.m_shared.m_weight = ((weight == -1f) ? ((float)component.m_itemData.m_shared.m_maxQuality) : weight);
			component.m_itemData.m_shared.m_scaleWeightByQuality = ((weightRatio == 0f) ? component.m_itemData.m_shared.m_scaleWeightByQuality : weightRatio);
			component.m_itemData.m_shared.m_equipDuration = ((equipeSpeed == -1f) ? component.m_itemData.m_shared.m_equipDuration : equipeSpeed);
			component.m_itemData.m_shared.m_movementModifier = sppedDebuff;
			component.m_itemData.m_shared.m_maxQuality = quality;
		}

		private void editDefense(GameObject gameObject, float blockPower = -1f, float blockPowerPerLevel = -1f, float deflectionForce = -1f, float deflectionForcePerLevel = 0f, float blockBonus = -1f)
		{
			ItemDrop component = gameObject.GetComponent<ItemDrop>();
			component.m_itemData.m_shared.m_blockPower = ((blockPower == -1f) ? component.m_itemData.m_shared.m_blockPower : blockPower);
			component.m_itemData.m_shared.m_blockPowerPerLevel = ((blockPowerPerLevel == -1f) ? component.m_itemData.m_shared.m_blockPowerPerLevel : blockPowerPerLevel);
			component.m_itemData.m_shared.m_deflectionForce = ((deflectionForce == -1f) ? component.m_itemData.m_shared.m_deflectionForce : deflectionForce);
			component.m_itemData.m_shared.m_deflectionForcePerLevel = ((deflectionForcePerLevel == -1f) ? component.m_itemData.m_shared.m_deflectionForcePerLevel : deflectionForcePerLevel);
			component.m_itemData.m_shared.m_timedBlockBonus = ((blockBonus == -1f) ? component.m_itemData.m_shared.m_timedBlockBonus : blockBonus);
		}

		private void editArmor(GameObject gameObject, float armor = -1f, float armorPerLevel = -1f)
		{
			ItemDrop component = gameObject.GetComponent<ItemDrop>();
			component.m_itemData.m_shared.m_armor = ((armor == -1f) ? component.m_itemData.m_shared.m_armor : armor);
			component.m_itemData.m_shared.m_armorPerLevel = ((armorPerLevel == -1f) ? component.m_itemData.m_shared.m_armorPerLevel : armorPerLevel);
		}

		private void editDurability(GameObject gameObject, float durability = -1f, float durabilityPerLevel = -1f, float useDrain = -1f)
		{
			ItemDrop component = gameObject.GetComponent<ItemDrop>();
			component.m_itemData.m_durability = ((durability == -1f) ? component.m_itemData.m_durability : durability);
			component.m_itemData.m_shared.m_durabilityPerLevel = ((durabilityPerLevel == -1f) ? component.m_itemData.m_shared.m_durabilityPerLevel : durabilityPerLevel);
			component.m_itemData.m_shared.m_useDurabilityDrain = ((useDrain == -1f) ? component.m_itemData.m_shared.m_useDurabilityDrain : useDrain);
		}

		private void editValueAndTeleport(GameObject gameObject, int newValue = -1, bool teleportable = true)
		{
			ItemDrop component = gameObject.GetComponent<ItemDrop>();
			int value = component.m_itemData.m_shared.m_value;
			component.m_itemData.m_shared.m_value = ((newValue != -1) ? newValue : value);
			component.m_itemData.m_shared.m_teleportable = teleportable;
		}
	}
	public class EventBuilder
	{
		private SpawnData spawnData;

		private List<GameObject> prefabList;

		public void EditEvents(List<RandomEvent> randomEvents, List<GameObject> allPrefabs)
		{
			prefabList = allPrefabs;
			foreach (RandomEvent randomEvent in randomEvents)
			{
				randomEvent.m_notRequiredGlobalKeys?.Clear();
				randomEvent.m_altNotRequiredPlayerKeys?.Clear();
				randomEvent.m_altRequiredNotKnownItems?.Clear();
				Debug.Log((object)("Editing Event: " + randomEvent.m_name));
				ApplyModifications(randomEvent);
			}
		}

		private void ModifyEvent(RandomEvent evt, Biome biome, bool nearBase, int durationMultiplier)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			evt.m_biome = biome;
			evt.m_nearBaseOnly = nearBase;
			evt.m_duration *= (float)durationMultiplier;
			evt.m_notRequiredGlobalKeys = new List<string>();
		}

		private void setSpawnDataObject(SpawnData spawn = null)
		{
			if (spawnData == null && spawn != null)
			{
				spawnData = spawn;
			}
		}

		private void ApplyModifications(RandomEvent evt)
		{
			//IL_04cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_0325: Unknown result type (might be due to invalid IL or missing references)
			//IL_032f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0330: Unknown result type (might be due to invalid IL or missing references)
			//IL_0792: Unknown result type (might be due to invalid IL or missing references)
			//IL_079c: Unknown result type (might be due to invalid IL or missing references)
			//IL_079d: Unknown result type (might be due to invalid IL or missing references)
			switch (evt.m_name)
			{
			case "surtlings":
				ModifyEvent(evt, (Biome)571, nearBase: true, 1);
				setSpawnDataObject(evt.m_spawn?[0]);
				evt.m_pauseIfNoPlayerInArea = false;
				evt.m_spawn[0].m_maxLevel = 3;
				evt.m_spawn[0].m_groupSizeMax = 2;
				AddSpawner(evt, "SurtlingSpawner_bal", 10);
				break;
			case "foresttrolls":
			{
				ModifyEvent(evt, (Biome)580, nearBase: false, 1);
				evt.m_pauseIfNoPlayerInArea = false;
				SpawnData obj2 = evt.m_spawn[0];
				obj2.m_maxSpawned *= 2;
				evt.m_spawn[0].m_maxLevel = 3;
				evt.m_spawn[0].m_groupSizeMax = 1;
				setSpawnDataObject(evt.m_spawn?[0]);
				evt.m_forceEnvironment = "Misty";
				evt.m_requiredGlobalKeys = new List<string> { "defeated_bonemass", "KilledTroll" };
				break;
			}
			case "blobs":
			{
				evt.m_biome = (Biome)(evt.m_biome | 0x200);
				evt.m_pauseIfNoPlayerInArea = false;
				evt.m_forceEnvironment = "Bonemass";
				setSpawnDataObject(evt.m_spawn?[0]);
				SpawnData obj7 = evt.m_spawn[0];
				obj7.m_maxSpawned *= 2;
				evt.m_spawn[0].m_maxLevel = 3;
				evt.m_spawn[0].m_groupSizeMax = 4;
				SpawnData obj8 = evt.m_spawn[1];
				obj8.m_maxSpawned *= 2;
				evt.m_spawn[1].m_maxLevel = 3;
				evt.m_spawn[1].m_groupSizeMax = 2;
				break;
			}
			case "army_bonemass":
			{
				evt.m_biome = (Biome)(evt.m_biome | 0x260);
				evt.m_forceEnvironment = "Bonemass";
				evt.m_pauseIfNoPlayerInArea = false;
				setSpawnDataObject(evt.m_spawn?[0]);
				SpawnData obj3 = evt.m_spawn[0];
				obj3.m_maxSpawned += 2;
				evt.m_spawn[0].m_maxLevel = 3;
				evt.m_spawn[0].m_groupSizeMax = 4;
				evt.m_spawn[0].m_spawnChance = 75f;
				SpawnData obj4 = evt.m_spawn[1];
				obj4.m_maxSpawned += 2;
				evt.m_spawn[1].m_maxLevel = 3;
				evt.m_spawn[1].m_groupSizeMax = 2;
				eventAddPoisonSkeleton(evt);
				eventAddSkeletonSpawner(evt);
				eventAddDraugrSpawner(evt);
				break;
			}
			case "army_moder":
			{
				evt.m_biome = (Biome)(evt.m_biome | 0x40);
				evt.m_forceEnvironment = "SnowStorm";
				evt.m_pauseIfNoPlayerInArea = false;
				setSpawnDataObject(evt.m_spawn?[0]);
				SpawnData obj9 = evt.m_spawn[0];
				obj9.m_maxSpawned *= 2;
				evt.m_spawn[0].m_maxLevel = 3;
				evt.m_spawn[0].m_groupSizeMax = 2;
				break;
			}
			case "army_eikthyr":
				evt.m_forceEnvironment = "Misty";
				setSpawnDataObject(evt.m_spawn?[0]);
				evt.m_pauseIfNoPlayerInArea = false;
				evt.m_spawn[0].m_maxLevel = 2;
				evt.m_spawn[0].m_groupSizeMax = 1;
				evt.m_spawn[1].m_maxLevel = 2;
				evt.m_spawn[1].m_groupSizeMax = 1;
				AddMonster(evt, "NeckBrute_bal", 50, 1, 2);
				AddMonster(evt, "Stag_bal", 50, 1);
				AddMonster(evt, "Hog_bal", 50, 1, 2);
				AddMonster(evt, "Bear_bal", 25, 1);
				break;
			case "army_theelder":
				evt.m_forceEnvironment = "DeepForest Mist";
				evt.m_pauseIfNoPlayerInArea = false;
				setSpawnDataObject(evt.m_spawn?[0]);
				evt.m_spawn[0].m_maxSpawned = 4;
				evt.m_spawn[0].m_maxLevel = 2;
				evt.m_spawn[0].m_groupSizeMax = 2;
				evt.m_spawn[1].m_maxSpawned = 2;
				evt.m_spawn[1].m_maxLevel = 2;
				evt.m_spawn[1].m_groupSizeMax = 2;
				evt.m_spawn[2].m_spawnChance = 50f;
				evt.m_spawn[2].m_maxSpawned = 1;
				evt.m_spawn[2].m_maxLevel = 2;
				AddMonster(evt, "Greyling", 75, 2, 3);
				AddMonster(evt, "GreylingElite_bal", 15, 1, 2);
				AddMonster(evt, "GreylingBeeKeeper_bal", 15, 1, 2);
				AddMonster(evt, "Greydwarf_Moss_bal", 10, 1, 2);
				AddMonster(evt, "Greydwarf_Crusher_bal", 5, 1);
				eventAddGreydwarfSpawner(evt);
				break;
			case "wolves":
			{
				evt.m_pauseIfNoPlayerInArea = false;
				evt.m_nearBaseOnly = false;
				setSpawnDataObject(evt.m_spawn?[0]);
				SpawnData obj = evt.m_spawn[0];
				obj.m_maxSpawned *= 2;
				evt.m_spawn[0].m_maxLevel = 3;
				break;
			}
			case "skeletons":
			{
				evt.m_biome = (Biome)(evt.m_biome | 0x260);
				evt.m_forceEnvironment = "GdKing";
				evt.m_pauseIfNoPlayerInArea = false;
				evt.m_nearBaseOnly = false;
				setSpawnDataObject(evt.m_spawn?[0]);
				SpawnData obj5 = evt.m_spawn[0];
				obj5.m_maxSpawned *= 2;
				evt.m_spawn[0].m_maxLevel = 5;
				evt.m_spawn[0].m_groupSizeMax = 4;
				evt.m_spawn[0].m_spawnChance = 75f;
				SpawnData obj6 = evt.m_spawn[1];
				obj6.m_maxSpawned *= 2;
				evt.m_spawn[1].m_maxLevel = 3;
				evt.m_spawn[1].m_groupSizeMax = 2;
				eventAddSkeletonSpawner(evt);
				AddMonster(evt, "TrollUndead_bal", 5, 1);
				break;
			}
			case "boss_gdking":
				if (spawnData != null)
				{
					AddMonster(evt, "Greyling", 20, 1, 2);
					AddMonster(evt, "GreylingElite_bal", 15, 1, 2);
					AddMonster(evt, "GreylingBeeKeeper_bal", 15, 1, 2);
					AddMonster(evt, "Greydwarf", 15, 1, 2);
					AddMonster(evt, "Greydwarf_Shaman", 10, 1, 2);
					AddMonster(evt, "Greydwarf_Moss_bal", 10, 1, 2);
					AddMonster(evt, "Greydwarf_Elite", 5, 1);
					AddMonster(evt, "Greydwarf_Crusher_bal", 5, 1);
					eventAddGreydwarfSpawner(evt);
				}
				break;
			case "boss_eikthyr":
				if (spawnData != null)
				{
					AddMonster(evt, "StagGhost_bal", 33, 3, 3);
				}
				break;
			case "boss_moder":
				if (spawnData != null)
				{
					AddMonster(evt, "Stormdrake_bal", 5, 1);
					AddMonster(evt, "Hatchling", 75, 3, 3);
				}
				break;
			case "boss_bonemass":
				if (spawnData != null)
				{
					AddMonster(evt, "Blob", 22, 1, 3);
					AddMonster(evt, "BlobElite", 33, 1, 3);
					eventAddSkeletonSpawner(evt);
					eventAddDraugrSpawner(evt);
				}
				break;
			case "boss_goblinking":
				if (spawnData != null)
				{
					AddMonster(evt, "TrollUndead_bal", 5, 1);
					eventAddSkeletonSpawner(evt);
				}
				break;
			}
		}

		private void AddSpawner(RandomEvent evt, string prefabName, int chance)
		{
			GameObject val = prefabList.Find((GameObject x) => ((Object)x).name == prefabName);
			if ((Object)(object)val == (Object)null)
			{
				Debug.LogWarning((object)("Couldn't find spawner prefab: " + prefabName));
				return;
			}
			SpawnData val2 = CreateSpawnData(spawnData, val, "event_" + prefabName, chance, 1, 1);
			if (val2 != null)
			{
				evt.m_spawn.Add(val2);
			}
		}

		public void AddMonster(RandomEvent evt, string name, int chance = 50, int amount = 2, int maxLevel = 1)
		{
			GameObject val = prefabList.Find((GameObject x) => ((Object)x).name == name);
			if ((Object)(object)val == (Object)null)
			{
				Debug.LogWarning((object)("Couldn't find monster prefab: " + name));
				return;
			}
			SpawnData val2 = CreateSpawnData(spawnData, val, "event_" + evt.m_name + "_" + name, chance, amount, maxLevel);
			if (val2 != null)
			{
				evt.m_spawn.Add(val2);
			}
		}

		private SpawnData CreateSpawnData(SpawnData template, GameObject prefab, string name, int chance, int amount, int maxLevel)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: 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_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			SpawnData val = (SpawnData)((template != null) ? ((object)template.Clone()) : ((object)new SpawnData
			{
				m_spawnAtDay = true,
				m_spawnAtNight = true,
				m_huntPlayer = true,
				m_canSpawnCloseToPlayer = true,
				m_maxAltitude = 2000f,
				m_minAltitude = 0f,
				m_biome = (Biome)895,
				m_biomeArea = (BiomeArea)3
			}));
			val.m_name = name;
			val.m_prefab = prefab;
			val.m_spawnChance = chance;
			val.m_maxSpawned = amount;
			val.m_groupSizeMax = amount;
			val.m_groupSizeMin = 1;
			val.m_maxLevel = maxLevel;
			return val;
		}

		public RandomEvent AddAmbushEvent(List<GameObject> allPrefabs, RandomEvent baseEvent, string eventname, Biome biome, string monsterName1, string monsterName2, string globalKey = "")
		{
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			prefabList = allPrefabs;
			RandomEvent val = baseEvent.Clone();
			val.m_duration = 60f;
			val.m_eventRange = 48f;
			val.m_forceEnvironment = "Misty";
			val.m_forceMusic = "CombatEventL4";
			val.m_nearBaseOnly = false;
			val.m_requiredGlobalKeys = new List<string> { globalKey };
			val.m_altRequiredPlayerKeysAny = new List<string>();
			val.m_notRequiredGlobalKeys = new List<string>();
			val.m_altRequiredKnownItems = new List<ItemDrop>();
			val.m_altRequiredNotKnownItems = new List<ItemDrop>();
			val.m_random = true;
			val.m_enabled = true;
			val.m_pauseIfNoPlayerInArea = false;
			val.m_name = "Ambush_" + eventname;
			val.m_startMessage = "$tag_ambush_start_bal";
			val.m_endMessage = "";
			val.m_biome = biome;
			val.m_spawn[0].m_name = val.m_name + " - " + monsterName1;
			val.m_spawn[0].m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == monsterName1);
			val.m_spawn[0].m_maxSpawned = 2;
			val.m_spawn[0].m_biome = biome;
			val.m_spawn[0].m_biomeArea = (BiomeArea)3;
			val.m_spawn[0].m_maxLevel = 3;
			val.m_spawn[0].m_groupSizeMax = 1;
			val.m_spawn[0].m_groupSizeMin = 1;
			val.m_spawn[0].m_spawnChance = 75f;
			val.m_spawn[0].m_minAltitude = 1f;
			val.m_spawn[0].m_maxAltitude = 10000f;
			val.m_spawn[0].m_huntPlayer = true;
			SpawnData val2 = val.m_spawn[0].Clone();
			val2.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == monsterName2);
			val2.m_name = val.m_name + " - " + monsterName2;
			val2.m_maxSpawned = 2;
			val2.m_maxLevel = 2;
			val.m_spawn.Add(val2);
			return val;
		}

		public void AddNewEvents(List<RandomEvent> randomEvents, List<GameObject> allPrefabs)
		{
			prefabList = allPrefabs;
			string baseName = "surtlings";
			RandomEvent val = randomEvents.Find((RandomEvent x) => x.m_name == baseName);
			if (val != null)
			{
				string forestTrollsBase = "foresttrolls";
				RandomEvent baseEvent = randomEvents.Find((RandomEvent x) => x.m_name == forestTrollsBase);
				List<RandomEvent> collection = new List<RandomEvent>
				{
					DarkNightEvent(val),
					GhostNightEvent(val),
					BloodMoonEvent(val),
					FeedingTimeEvent(val),
					DvergerRevangeEvent(val),
					BlackMassEvent(val),
					NewForestTrolls(baseEvent)
				};
				RandomEvent baseEvent2 = randomEvents.Find((RandomEvent x) => x.m_name == "wolves");
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "NeckHunt", (Biome)1, "Neck", "NeckBrute_bal"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GreylingHunt", (Biome)1, "Greyling", "GreylingElite_bal"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GreydwarfHunt1", (Biome)8, "Greydwarf", "Greydwarf_Elite", "defeated_eikthyr"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GreydwarfHunt2", (Biome)8, "Greydwarf_Shaman", "Greydwarf_Moss_bal", "defeated_eikthyr"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GreydwarfHunt3", (Biome)8, "Greydwarf_Elite", "Greydwarf_Crusher_bal", "defeated_gdking"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "SkeletonHunt", (Biome)8, "Skeleton", "Skeleton_Poison", "defeated_gdking"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "SkeletonHunt2", (Biome)2, "Skeleton_Poison", "goblin_skeleton_bal", "defeated_bonemass"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "LeechHunt", (Biome)2, "Leech", "LeechPrimal_bal", "defeated_gdking"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GhostHunt", (Biome)2, "Ghost", "Wraith", "defeated_bonemass"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "DraugrHunt", (Biome)2, "Draugr", "Draugr_Elite", "defeated_gdking"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "FenringHunt", (Biome)4, "Fenring", "Fenring_Cultist", "defeated_bonemass"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "FoxHunt", (Biome)16, "Fox_bal", "Fox_bal", "defeated_bonemass"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "HabrokHunt", (Biome)16, "Habrok_bal", "Habrok_bal", "defeated_bonemass"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GoblinHunt1", (Biome)16, "Goblin", "GoblinShaman", "defeated_dragon"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GoblinHunt1", (Biome)16, "Goblin", "GoblinBrute", "defeated_dragon"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "SeekerHunt1", (Biome)512, "SeekerBrood", "Seeker", "defeated_dragon"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "SeekerHunt2", (Biome)512, "Seeker", "SeekerBrute", "defeated_dragon"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "CharredHunt1", (Biome)32, "Charred_Twitcher", "Charred_Mage", "defeated_queen"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "CharredHunt2", (Biome)32, "Charred_Archer", "Charred_Melee", "defeated_queen"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "FaderHunt1", (Biome)32, "Charred_Twitcher_Summoned", "Charred_Archer_Fader", "defeated_queen"));
				randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "FaderHunt2", (Biome)32, "Charred_Twitcher_Summoned", "Charred_Melee_Fader", "defeated_queen"));
				randomEvents.AddRange(collection);
			}
		}

		private RandomEvent DarkNightEvent(RandomEvent baseEvent)
		{
			Debug.Log((object)"Creating event: DarkNight");
			List<string> keys = new List<string> { "defeated_gdking" };
			List<SpawnData> list = new List<SpawnData>();
			if (spawnData != null)
			{
				list.Add(EventCreateMonster(baseEvent, "DarkNight", "DarkBat_bal", 99, 10, 3));
			}
			return CreateEvent(baseEvent, (Biome)27, keys, new List<string>(), list, "DarkNight", "The Darkest Night starts", "The Dark night passes", "CombatEventL2", "Darklands_dark");
		}

		private RandomEvent GhostNightEvent(RandomEvent baseEvent)
		{
			Debug.Log((object)"Creating event: GhostNight");
			List<string> keys = new List<string> { "defeated_gdking" };
			List<SpawnData> list = new List<SpawnData>();
			if (spawnData != null)
			{
				list.Add(EventCreateMonster(baseEvent, "GhostNight", "Ghost", 75, 3, 3));
				list.Add(EventCreateMonster(baseEvent, "GhostNight", "LostSoul_bal", 75, 3, 3));
			}
			return CreateEvent(baseEvent, (Biome)63, keys, new List<string>(), list, "GhostNightEvent", "The Spirits awaken", "The Spirits rest again", "CombatEventL1", "Crypt");
		}

		private RandomEvent FeedingTimeEvent(RandomEvent baseEvent)
		{
			Debug.Log((object)"Creating event: FeedingTime");
			List<string> keys = new List<string> { "defeated_bonemass" };
			List<SpawnData> list = new List<SpawnData>();
			if (spawnData != null)
			{
				list.Add(EventCreateMonster(baseEvent, "FeedingTime", "Serpentling_bal", 75, 4, 3));
				list.Add(EventCreateMonster(baseEvent, "FeedingTime", "Serpent", 25, 2, 3));
			}
			return CreateEvent(baseEvent, (Biome)256, keys, new List<string>(), list, "FeedingTime", "The Serpent Feeding Season started", "The feeding season ended", "CombatEventL3", "Misty");
		}

		private RandomEvent BloodMoonEvent(RandomEvent baseEvent)
		{
			Debug.Log((object)"Creating event: BloodMoon");
			List<string> keys = new List<string> { "defeated_bonemass", "killedFenring" };
			List<SpawnData> list = new List<SpawnData>();
			if (spawnData != null)
			{
				list.Add(EventCreateMonster(baseEvent, "BloodMoon", "Bat", 75, 8, 3));
				list.Add(EventCreateMonster(baseEvent, "BloodMoon", "Ulv", 75, 8, 3));
				list.Add(EventCreateMonster(baseEvent, "BloodMoon", "Fenring", 50, 6, 2));
				list.Add(EventCreateMonster(baseEvent, "BloodMoon", "Fenring_Cultist", 25, 3, 1));
			}
			return CreateEvent(baseEvent, (Biome)895, keys, new List<string>(), list, "BloodMoon", "The Blood Moon rises", "The Blood Moon fades away", "CombatEventL4", "Darklands_dark");
		}

		private RandomEvent BlackMassEvent(RandomEvent baseEvent)
		{
			Debug.Log((object)"Creating event: BlackMass");
			List<string> keys = new List<string> { "defeated_dragon" };
			List<string> noKeys = new List<string> { "defeated_queen" };
			List<SpawnData> list = new List<SpawnData>();
			if (spawnData != null)
			{
				list.Add(EventCreateMonster(baseEvent, "BlackMass", "BlobTar", 75, 6, 3));
			}
			return CreateEvent(baseEvent, (Biome)571, keys, noKeys, list, "BlackMass", "Black Mass starts", "Black Mass ends", "CombatEventL4", "Ashlands_ashrain");
		}

		private RandomEvent NewForestTrolls(RandomEvent baseEvent)
		{
			Debug.Log((object)"Creating event: NewForestTrolls");
			List<string> keys = new List<string> { "KilledTroll" };
			List<SpawnData> list = new List<SpawnData>();
			if (spawnData != null)
			{
				list.Add(EventCreateMonster(baseEvent, "NewForestTrolls", "TrollOutcast_bal", 75, 3, 3));
			}
			return CreateEvent(baseEvent, (Biome)11, keys, new List<string>(), list, "NewForestTrolls", "Rush of Forest Trolls starts", "Rush of Forest Trolls ends", baseEvent.m_forceMusic, baseEvent.m_forceEnvironment);
		}

		private RandomEvent DvergerRevangeEvent(RandomEvent baseEvent)
		{
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"Creating event: DvergerRevange");
			List<string> keys = new List<string> { "defeated_goblinking", "killedDverger" };
			List<string> noKeys = new List<string> { "defeated_queen" };
			List<SpawnData> list = new List<SpawnData>();
			if (spawnData != null)
			{
				list.Add(EventCreateMonster(baseEvent, "DvergerRevange", "DvergerMage_event", 75, 2, 3));
				list.Add(EventCreateMonster(baseEvent, "DvergerRevange", "DvergerMageFire_event", 75, 1, 2));
				list.Add(EventCreateMonster(baseEvent, "DvergerRevange", "DvergerMageIce_event", 75, 1, 2));
				list.Add(EventCreateMonster(baseEvent, "DvergerRevange", "DvergerMageSupport_event", 75, 1, 2));
				list.Add(EventCreateMonster(baseEvent, "DvergerRevange", "Dverger_event", 50, 2, 2));
			}
			Biome biome = (Biome)127;
			return CreateEvent(baseEvent, biome, keys, noKeys, list, "DvergerRevange", "It's payback time", "Hope you learned the lesson", "CombatEventL3", "Twilight_SnowStorm", 200f);
		}

		private RandomEvent SeekerHuntEvent(RandomEvent baseEvent)
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"Creating event: SeekerHunt");
			List<string> list = new List<string>();
			List<string> list2 = new List<string>();
			List<SpawnData> list3 = new List<SpawnData>();
			Biome biome = (Biome)127;
			list.Add("defeated_goblinking");
			list.Add("killedSeeker");
			list2.Add("defeated_queen");
			if (spawnData != null)
			{
				list3.Add(EventCreateMonster(baseEvent, "SeekerHunt", "SeekerBrood", 75, 10, 3));
				list3.Add(EventCreateMonster(baseEvent, "SeekerHunt", "Seeker", 50, 2, 2));
				list3.Add(EventCreateMonster(baseEvent, "SeekerHunt", "SeekerBrute", 25, 1, 1));
			}
			return CreateEvent(baseEvent, biome, list, list2, list3, "SeekerHunt", "The Hive hungers", "THe Hive have feasted", "CombatEventL2", "Eikthyr", 200f);
		}

		private RandomEvent DeathBreedingSeasonEvent(RandomEvent baseEvent)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"Creating event: DeathBreedingSeason");
			List<string> list = new List<string>();
			List<string> list2 = new List<string>();
			List<SpawnData> list3 = new List<SpawnData>();
			Biome biome = (Biome)555;
			list.Add("defeated_dragon");
			list.Add("killedInsecto");
			list2.Add("defeated_queen");
			if (spawnData != null)
			{
				list3.Add(EventCreateMonster(baseEvent, "DeathBreedingSeason", "Deathsquito_bal_event", 75, 4, 3));
				list3.Add(EventCreateMonster(baseEvent, "DeathBreedingSeason", "Tick", 50, 8, 2));
			}
			return CreateEvent(baseEvent, biome, list, list2, list3, "DeathBreedingSeason", "Breeding Season starts", "Breeding Season ends", "CombatEventL4", "Clear", 200f);
		}

		private RandomEvent CreateEvent(RandomEvent baseEvent, Biome biome, List<string> keys, List<string> noKeys, List<SpawnData> spawns, string name, string start, string stop, string music, string env, float duration = 100f, bool random = true)
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			RandomEvent val = baseEvent.Clone();
			val.m_name = name;
			val.m_startMessage = start;
			val.m_endMessage = stop;
			val.m_forceMusic = music ?? val.m_forceMusic;
			val.m_forceEnvironment = env;
			val.m_requiredGlobalKeys = keys;
			val.m_notRequiredGlobalKeys = noKeys;
			val.m_spawn = spawns;
			val.m_biome = biome;
			val.m_duration = duration;
			val.m_random = random;
			return val;
		}

		private SpawnData EventCreateMonster(RandomEvent baseEvent, string eventName, string name, int chance, int amount, int maxLvl)
		{
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			if (baseEvent == null || baseEvent.m_spawn == null || baseEvent.m_spawn.Count == 0)
			{
				return null;
			}
			GameObject val = prefabList.Find((GameObject x) => ((Object)x).name == name);
			if ((Object)(object)val == (Object)null)
			{
				return null;
			}
			SpawnData val2 = baseEvent.m_spawn[0].Clone();
			val2.m_name = "event_" + eventName + "_" + name;
			val2.m_prefab = val;
			val2.m_spawnChance = chance;
			val2.m_maxSpawned = amount;
			val2.m_groupSizeMax = amount;
			val2.m_groupSizeMin = 1;
			val2.m_maxLevel = maxLvl;
			val2.m_spawnAtDay = true;
			val2.m_spawnAtNight = true;
			val2.m_huntPlayer = true;
			val2.m_canSpawnCloseToPlayer = true;
			val2.m_maxAltitude = 2000f;
			val2.m_minAltitude = 0f;
			val2.m_biome = (Biome)895;
			val2.m_biomeArea = (BiomeArea)3;
			return val2;
		}

		private void eventAddPoisonSkeleton(RandomEvent randomEvent)
		{
			SpawnData val = randomEvent.m_spawn[1].Clone();
			val.m_name = "event_Skeleton_Poison";
			val.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == "Skeleton_Poison");
			val.m_spawnChance = 50f;
			val.m_maxSpawned = 2;
			randomEvent.m_spawn.Add(val);
		}

		private void eventAddSkeletonSpawner(RandomEvent randomEvent)
		{
			SpawnData val = randomEvent.m_spawn[0].Clone();
			val.m_name = "event_BonePileSpawner";
			val.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == "BonePileSpawner");
			val.m_spawnChance = 10f;
			val.m_maxSpawned = 1;
			val.m_levelUpMinCenterDistance = 1E+14f;
			val.m_maxLevel = 0;
			val.m_groupSizeMax = 1;
			randomEvent.m_spawn.Add(val);
		}

		private void eventAddDraugrSpawner(RandomEvent randomEvent)
		{
			SpawnData val = randomEvent.m_spawn[0].Clone();
			val.m_name = "event_Spawner_DraugrPile";
			val.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == "Spawner_DraugrPile");
			val.m_spawnChance = 10f;
			val.m_maxSpawned = 1;
			val.m_levelUpMinCenterDistance = 1E+14f;
			val.m_maxLevel = 0;
			val.m_groupSizeMax = 1;
			randomEvent.m_spawn.Add(val);
		}

		private void eventAddGreydwarfSpawner(RandomEvent randomEvent)
		{
			SpawnData val = randomEvent.m_spawn[0].Clone();
			val.m_name = "event_Spawner_GreydwarfNest";
			val.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == "Spawner_GreydwarfNest");
			val.m_spawnChance = 5f;
			val.m_maxSpawned = 1;
			val.m_levelUpMinCenterDistance = 1E+14f;
			val.m_maxLevel = 0;
			val.m_groupSizeMax = 1;
			randomEvent.m_spawn.Add(val);
		}

		private void eventSurtlingSpawner(RandomEvent randomEvent)
		{
			SpawnData val = randomEvent.m_spawn[0].Clone();
			val.m_name = "event_SurtlingSpawner";
			val.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == "SurtlingSpawner");
			val.m_spawnChance = 10f;
			val.m_maxSpawned = 1;
			val.m_levelUpMinCenterDistance = 1E+14f;
			val.m_maxLevel = 0;
			val.m_groupSizeMax = 1;
			randomEvent.m_spawn.Add(val);
		}
	}
	public class LocationBuilder
	{
		public static List<string> vanillaLocationsYouEdit = new List<string> { "TrollCave02" };

		public List<ZoneLocation> locations = new List<ZoneLocation>();

		public void editLocations(List<ZoneLocation> locationList)
		{
			if (locationList == null || locationList.Count == 0)
			{
				Debug.LogWarning((object)"LOCATION LIST IS EMPTY!");
			}
			else
			{
				DeepNorthSetup(locationList);
			}
		}

		public void DebugMe(List<ZoneLocation> locationList)
		{
			for (int i = 0; i < locationList.Count; i++)
			{
				GetLog(locationList[i], i);
			}
		}

		private ZoneLocation FindLocation(List<ZoneLocation> locationList, string name)
		{
			return locationList.Find((ZoneLocation x) => x.m_prefabName == name);
		}

		private void DeepNorthSetup(List<ZoneLocation> locationList)
		{
			Debug.Log((object)(Launch.projectName + ": Preparing Locations for Deep North"));
			HashSet<string> hashSet = new HashSet<string> { "TrollCave02" };
			foreach (string item in hashSet)
			{
				ZoneLocation val = FindLocation(locationList, item);
				if (val != null)
				{
					editLocation(val);
				}
				else
				{
					Debug.LogWarning((object)("Location not found: " + item));
				}
			}
		}

		private void editLocation(ZoneLocation zoneLocation)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			_ = zoneLocation.m_prefab;
			if (0 == 0)
			{
				zoneLocation.m_enable = true;
				zoneLocation.m_biome = (Biome)68;
				zoneLocation.m_minDistanceFromSimilar = 44f;
				zoneLocation.m_minAltitude = 3f;
				zoneLocation.m_minDistance = 0f;
				zoneLocation.m_maxDistance = 0f;
				string prefabName = zoneLocation.m_prefabName;
				if (prefabName != "Mistlands_Harbour1")
				{
					zoneLocation.m_maxAltitude = 3000f;
				}
				if (prefabName == "MountainWell1")
				{
					zoneLocation.m_minAltitude = 0f;
					zoneLocation.m_maxAltitude = 3000f;
				}
			}
		}

		private void changeBiomeSetup(List<ZoneLocation> locationList)
		{
			Debug.Log((object)(Launch.projectName + ": Editing Locations for world spawn"));
		}

		private void ApplyToLocations(List<ZoneLocation> locationList, string[] names, Action<ZoneLocation> action)
		{
			for (int i = 0; i < names.Length; i++)
			{
				ZoneLocation val = FindLocation(locationList, names[i]);
				if (val != null)
				{
					action(val);
				}
				else
				{
					Debug.LogWarning((object)("Location not found: " + names[i]));
				}
			}
		}

		private void locationEditSpecial(ZoneLocation loc)
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0181: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			string prefabName = loc.m_prefabName;
			if (IsIn(prefabName, "SunkenCrypt", "SunkenCrypt4"))
			{
				loc.m_biome = (Biome)2;
				loc.m_minDistance = 600f;
				loc.m_maxDistance = 10500f;
				loc.m_minAltitude = 0f;
				loc.m_maxAltitude = 100000f;
				loc.m_iconPlaced = true;
				loc.m_quantity *= 2;
				loc.m_prioritized = true;
				loc.m_biomeArea = (BiomeArea)3;
				loc.m_minDistanceFromSimilar = 33f;
				return;
			}
			if (prefabName == "MountainCave02")
			{
				loc.m_biome = (Biome)68;
				loc.m_minAltitude = 20f;
				loc.m_maxAltitude = 100000f;
				loc.m_minDistance = 600f;
				loc.m_quantity *= 3;
				loc.m_maxDistance = 10500f;
				loc.m_minDistanceFromSimilar = 33f;
				return;
			}
			if (IsIn(prefabName, "Crypt3", "Crypt4"))
			{
				loc.m_biome = (Biome)607;
				loc.m_minDistance = 600f;
				loc.m_maxDistance = 10500f;
				loc.m_minAltitude = 15f;
				loc.m_maxAltitude = 100000f;
				loc.m_minDistanceFromSimilar = 33f;
				loc.m_quantity *= 2;
				return;
			}
			if (prefabName == "WoodFarm1")
			{
				loc.m_biome = (Biome)95;
				loc.m_minDistance = 300f;
				loc.m_maxDistance = 10500f;
				loc.m_minAltitude = 10f;
				loc.m_maxAltitude = 10000f;
				loc.m_quantity *= 2;
				return;
			}
			if (prefabName == "WoodVillage1")
			{
				loc.m_biome = (Biome)95;
				loc.m_minDistance = 1500f;
				loc.m_maxDistance = 10500f;
				loc.m_minAltitude = 10f;
				loc.m_maxAltitude = 10000f;
				loc.m_quantity *= 2;
				return;
			}
			if (IsIn(prefabName, "GoblinCamp2", "StoneTower1", "StoneTower3", "Ruin3"))
			{
				loc.m_biome = (Biome)25;
				loc.m_minDistance = 2500f;
				loc.m_maxDistance = 10500f;
				loc.m_minAltitude = 10f;
				loc.m_maxAltitude = 100000f;
				return;
			}
			switch (prefabName)
			{
			case "Eikthyrnir":
				loc.m_group = "bossarena";
				loc.m_minDistance = 300f;
				loc.m_maxDistance = 800f;
				loc.m_quantity = 30;
				loc.m_unique = true;
				break;
			case "GDKing":
				loc.m_group = "bossarena";
				loc.m_minDistanceFromSimilar = 1000f;
				loc.m_minDistance = 1000f;
				loc.m_maxDistance = 2500f;
				loc.m_quantity = 10;
				loc.m_unique = true;
				break;
			case "Bonemass":
				loc.m_group = "bossarena";
				loc.m_minDistanceFromSimilar = 1000f;
				loc.m_minDistance = 1500f;
				loc.m_maxDistance = 3500f;
				loc.m_quantity = 10;
				loc.m_unique = true;
				break;
			case "Dragonqueen":
				loc.m_group = "bossarena";
				loc.m_minDistanceFromSimilar = 1000f;
				loc.m_minDistance = 300f;
				loc.m_maxDistance = 5000f;
				loc.m_quantity = 10;
				loc.m_unique = true;
				break;
			case "GoblinKing":
				loc.m_group = "bossarena";
				loc.m_minDistanceFromSimilar = 1000f;
				loc.m_minDistance = 3000f;
				loc.m_maxDistance = 7000f;
				loc.m_quantity = 10;
				loc.m_unique = true;
				break;
			case "Mistlands_DvergrBossEntrance1":
				loc.m_group = "bossarena";
				loc.m_minDistanceFromSimilar = 1000f;
				loc.m_minDistance = 5500f;
				loc.m_maxDistance = 8500f;
				loc.m_quantity = 10;
				loc.m_unique = true;
				break;
			case "FaderLocation":
				loc.m_group = "bossarena";
				loc.m_quantity = 10;
				loc.m_unique = true;
				break;
			}
		}

		private void biomeSwap(ZoneLocation zoneLocation)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: 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)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0345: Unknown result type (might be due to invalid IL or missing references)
			//IL_037e: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e8: Unknown result type (might be due to invalid IL or missing references)
			string prefabName = zoneLocation.m_prefabName;
			Biome biome = (Biome)11;
			Biome biome2 = (Biome)514;
			Biome biome3 = (Biome)9;
			Biome biome4 = (Biome)48;
			Biome biome5 = (Biome)95;
			Biome biome6 = (Biome)68;
			Biome biome7 = (Biome)94;
			Biome biome8 = (Biome)596;
			Biome biome9 = (Biome)86;
			if (IsIn(prefabName, "Ruin1", "Ruin2"))
			{
				editLocationParams(zoneLocation, biome);
				zoneLocation.m_minAltitude = 5f;
				zoneLocation.m_maxAltitude = 150f;
			}
			if (IsIn(prefabName, "TarPit1", "TarPit2", "TarPit3"))
			{
				editLocationParams(zoneLocation, biome4);
				zoneLocation.m_minAltitude = 5f;
				zoneLocation.m_maxAltitude = 70f;
				return;
			}
			switch (prefabName)
			{
			case "SwampWell1":
				editLocationParams(zoneLocation, biome9);
				return;
			case "ShipSetting01":
				editLocationParams(zoneLocation, biome5);
				zoneLocation.m_minAltitude = -5f;
				zoneLocation.m_maxAltitude = 25f;
				return;
			case "MountainGrave01":
				editLocationParams(zoneLocation, biome8);
				return;
			case "InfestedTree01":
				editLocationParams(zoneLocation, biome2);
				return;
			}
			if (IsIn(prefabName, "AbandonedLogCabin02", "AbandonedLogCabin03", "AbandonedLogCabin04"))
			{
				editLocationParams(zoneLocation, biome6, 1000);
			}
			else if (prefabName == "StoneTowerRuins03")
			{
				editLocationParams(zoneLocation, biome3);
			}
			else if (IsIn(prefabName, "WoodHouse1", "WoodHouse2", "WoodHouse3", "WoodHouse4", "WoodHouse5", "WoodHouse6", "WoodHouse7", "WoodHouse8", "WoodHouse9", "WoodHouse10", "WoodHouse11", "WoodHouse12", "WoodHouse13", "StoneHouse3", "StoneHouse4"))
			{
				editLocationParams(zoneLocation, biome5);
			}
			else if (IsIn(prefabName, "SwampRuin1", "SwampRuin2", "StoneTowerRuins04"))
			{
				editLocationParams(zoneLocation, biome7);
			}
			else if (prefabName == "StoneTowerRuins05")
			{
				editLocationParams(zoneLocation, biome9, 1000);
			}
			else if (IsIn(prefabName, "StoneTowerRuins06", "StoneTowerRuins07", "StoneTowerRuins08", "StoneTowerRuins09", "StoneTowerRuins10", "StoneWall1", "StoneWall2"))
			{
				editLocationParams(zoneLocation, biome5, 1000);
			}
			else if (IsIn(prefabName, "StoneHenge6", "StoneHouse5_heath"))
			{
				editLocationParams(zoneLocation, biome5, 1500);
			}
			else if (IsIn(prefabName, "SwampHut1", "SwampHut2", "SwampHut3", "SwampHut5"))
			{
				editLocationParams(zoneLocation, biome7, 1500);
			}
			else if (prefabName == "SwampHut4")
			{
				editLocationParams(zoneLocation, biome7);
			}
		}

		private void editLocationParams(ZoneLocation zoneLocation, Biome biome, int minDistance = 500)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			zoneLocation.m_enable = true;
			zoneLocation.m_biome = biome;
			zoneLocation.m_quantity *= 2;
			zoneLocation.m_minAltitude = ((zoneLocation.m_minAltitude == 0f) ? 10f : zoneLocation.m_minAltitude);
			zoneLocation.m_maxAltitude = ((zoneLocation.m_maxAltitude == 0f) ? 3000f : zoneLocation.m_maxAltitude);
			zoneLocation.m_minDistance = minDistance;
			zoneLocation.m_maxDistance = 0f;
		}

		private bool IsIn(string name, params string[] options)
		{
			for (int i = 0; i < options.Length; i++)
			{
				if (name == options[i])
				{
					return true;
				}
			}
			return false;
		}

		private static void GetLog(ZoneLocation location, int counter)
		{
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			if (location == null)
			{
				Debug.LogWarning((object)("Skipping id: " + counter));
				return;
			}
			Debug.LogWarning((object)("ID: " + counter));
			Debug.LogWarning((object)("m_name: " + ((location.m_name != null) ? location.m_name.ToString() : "")));
			_ = location.m_prefab;
			Debug.LogWarning((object)("m_prefab: " + ((object)location.m_prefab).ToString()));
			Debug.LogWarning((object)("m_prefabName: " + ((location.m_prefabName != null) ? location.m_prefabName.ToString() : "")));
			Debug.LogWarning((object)("m_quantity: " + location.m_quantity));
			Debug.LogWarning((object)("m_groupMax: " + location.m_groupMax.ToString()));
			Debug.LogWarning((object)("m_group: " + ((location.m_group != null) ? location.m_group.ToString() : "")));
			Debug.LogWarning((object)("m_biome: " + ((object)(Biome)(ref location.m_biome)).ToString()));
			Debug.LogWarning((object)("m_biomeArea: " + ((object)(BiomeArea)(ref location.m_biomeArea)).ToString()));
			Debug.LogWarning((object)("m_enable: " + location.m_enable));
			Debug.LogWarning((object)("m_unique: " + location.m_unique));
			Debug.LogWarning((object)("m_clearArea: " + location.m_clearArea));
			Debug.LogWarning((object)("m_centerFirst: " + location.m_centerFirst));
			Debug.LogWarning((object)("m_iconAlways: " + location.m_iconAlways));
			Debug.LogWarning((object)("m_iconPlaced: " + location.m_iconPlaced));
			Debug.LogWarning((object)("m_surroundBetterThanAverage: " + location.m_surroundBetterThanAverage));
			Debug.LogWarning((object)("m_surroundCheckDistance: " + location.m_surroundCheckDistance));
			Debug.LogWarning((object)("m_surroundCheckLayers: " + location.m_surroundCheckLayers));
			Debug.LogWarning((object)("m_surroundCheckVegetation: " + location.m_surroundCheckVegetation));
			Debug.LogWarning((object)("m_prioritized: " + location.m_prioritized));
			Debug.LogWarning((object)("m_randomRotation: " + location.m_randomRotation));
			Debug.LogWarning((object)("m_slopeRotation: " + location.m_slopeRotation));
			Debug.LogWarning((object)("m_minDistance: " + location.m_minDistance));
			Debug.LogWarning((object)("m_maxDistance: " + location.m_maxDistance));
			Debug.LogWarning((object)("m_minDistanceFromSimilar: " + location.m_minDistanceFromSimilar));
			Debug.LogWarning((object)("m_maxDistanceFromSimilar: " + location.m_maxDistanceFromSimilar));
			Debug.LogWarning((object)("m_maximumVegetation: " + location.m_maximumVegetation));
			Debug.LogWarning((object)("m_interiorRadius: " + location.m_interiorRadius));
			Debug.LogWarning((object)("m_exteriorRadius: " + location.m_exteriorRadius));
			Debug.LogWarning((object)("m_foldout: " + location.m_foldout));
			Debug.LogWarning((object)("m_snapToWater: " + location.m_snapToWater));
			Debug.LogWarning((object)("m_inForest: " + location.m_inForest));
			Debug.LogWarning((object)("m_minAltitude: " + location.m_minAltitude));
			Debug.LogWarning((object)("m_maxAltitude: " + location.m_maxAltitude));
			Debug.LogWarning((object)("m_minTerrainDelta: " + location.m_minTerrainDelta));
			Debug.LogWarning((object)("m_maxTerrainDelta: " + location.m_maxTerrainDelta));
			Debug.LogWarning((object)("m_forestTresholdMin: " + location.m_forestTresholdMin));
			Debug.LogWarning((object)("m_forestTresholdMax: " + location.m_forestTresholdMax));
		}

		public static AssetID AssetIDFromObject(Object obj)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: 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)
			int instanceID = obj.GetInstanceID();
			return new AssetID(1u, 1u, 1u, (uint)instanceID);
		}

		private ZoneLocation setupLocation(GameObject obj, ZoneLocation location, int amount, int minAlt, int maxAlt, int minDistance, int maxDistance, float similarDistance, float minDelta, float maxDelta, float forestMin, float forestMax, string group = "")
		{
			location.m_quantity = amount;
			location.m_group = group;
			location.m_minAltitude = minAlt;
			location.m_maxAltitude = maxAlt;
			location.m_minDistance = minDistance;
			location.m_maxDistance = maxDistance;
			location.m_minDistanceFromSimilar = similarDistance;
			location.m_minTerrainDelta = (minDelta = 0f);
			location.m_maxTerrainDelta = maxDelta;
			location.m_interiorRadius = obj.GetComponent<Location>().m_interiorRadius;
			location.m_exteriorRadius = obj.GetComponent<Location>().m_exteriorRadius;
			location.m_forestTresholdMin = (forestMin = -1f);
			location.m_forestTresholdMax = forestMax;
			return location;
		}
	}
	public class SpawnerBuilder
	{
		public List<SpawnData> newSpawners = new List<SpawnData>();

		private string[] ingore = new string[0];

		public string[] monsterNames = new string[27]
		{
			"Deathsquito", "Serpent", "Boar", "Deer", "Wraith", "Wolf", "Leech", "Fenring", "Troll", "DraugrElite",
			"Draugr", "Skeleton", "Seeker", "SeekerDrone", "Surtling", "Dverger", "Greydwarf", "Greyling", "GreydwarfElite", "Greydwarf Shaman",
			"Neck", "Hatchling", "Abomination", "StoneGolem", "BonemawSerpent", "projectile_ashlandmeteor", "Lox"
		};

		private SpawnData FindSpawnData(SpawnSystemList spawnSystemList, string name, string spawnerName = "")
		{
			if (spawnerName != "")
			{
				SpawnData val = spawnSystemList.m_spawners.Find((SpawnData x) => x.m_name == spawnerName);
				if (val != null)
				{
					return val;
				}
			}
			return spawnSystemList.m_spawners.Find((SpawnData x) => ((Object)x.m_prefab).name == name);
		}

		public void editExistingSpawners(SpawnSystemList spawnSystemList, List<GameObject> znetPrefabs)
		{
			newSpawners.Clear();
			string[] array = monsterNames;
			foreach (string monsterName in array)
			{
				List<SpawnData> list = spawnSystemList.m_spawners.FindAll((SpawnData x) => ((Object)x.m_prefab).name == monsterName);
				if (list.Count <= 0)
				{
					continue;
				}
				foreach (SpawnData item in list)
				{
					editMonsterSpawner(item, znetPrefabs);
				}
			}
			if (newSpawners.Count > 0)
			{
				Debug.Log((object)("Add total spawner configs from Edits: " + newSpawners.Count));
				spawnSystemList.m_spawners.AddRange(newSpawners);
			}
		}

		public void createSpawners(SpawnSystemList spawnSystemList, ModResourceLoader modResourceLoader, List<GameObject> znetPrefabs)
		{
			editExistingSpawners(spawnSystemList, znetPrefabs);
			newSpawners.Clear();
			foreach (GameObject monster in modResourceLoader.monsterPrefabs)
			{
				List<SpawnData> list = spawnSystemList.m_spawners.FindAll((SpawnData x) => ((Object)x.m_prefab).name == ((Object)monster).name);
				if (list.Count == 0 && !ingore.Contains(((Object)monster).name))
				{
					setupMonster(monster, spawnSystemList, znetPrefabs);
				}
			}
			if (newSpawners.Count > 0)
			{
				Debug.Log((object)("Add total spawner configs new monster: " + newSpawners.Count));
				spawnSystemList.m_spawners.AddRange(newSpawners);
			}
		}

		private SpawnData editSpawnerData(SpawnData spawnData, string spawnerName = "", int maxSpawned = -99, int minlevel = 1, int maxlevel = 3, int spawnChance = 25, bool spawnDay = true, bool spawnNight = true, int groupMin = -99, int groupMax = -99, int groupRadius = -99)
		{
			if (spawnData == null)
			{
				Debug.Log((object)"Empty spawn Data!!");
				return spawnData;
			}
			spawnData.m_name = ((spawnerName != "") ? spawnerName : spawnData.m_name);
			spawnData.m_maxSpawned = ((maxSpawned != -99) ? maxSpawned : spawnData.m_maxSpawned);
			spawnData.m_minLevel = ((minlevel != -99) ? minlevel : spawnData.m_minLevel);
			spawnData.m_maxLevel = ((maxlevel != -99) ? maxlevel : spawnData.m_maxLevel);
			spawnData.m_spawnChance = ((spawnChance != -99) ? ((float)spawnChance) : spawnData.m_spawnChance);
			spawnData.m_spawnAtDay = spawnDay;
			spawnData.m_spawnAtNight = spawnNight;
			spawnData.m_groupSizeMin = ((groupMin != -99) ? groupMin : spawnData.m_groupSizeMin);
			spawnData.m_groupSizeMax = ((groupMax != -99) ? groupMax : spawnData.m_groupSizeMax);
			spawnData.m_groupRadius = ((groupRadius != -99) ? ((float)groupRadius) : spawnData.m_groupRadius);
			return spawnData;
		}

		private void generateSapplings(SpawnData spawnData, List<GameObject> znetPrefabs)
		{
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			string[] array = new string[5] { "FirTree_Sapling", "Oak_Sapling", "PineTree_Sapling", "Beech_Sapling", "Birch_Sapling" };
			string[] array2 = array;
			foreach (string name in array2)
			{
				GameObject val = znetPrefabs.Find((GameObject x) => ((Object)x).name == name);
				if ((Object)(object)val != (Object)null)
				{
					SpawnData val2 = spawnData.Clone();
					val2.m_name = name;
					val2.m_spawnInterval = 9000f;
					val2.m_maxSpawned = 1;
					val2.m_spawnAtDay = true;
					val2.m_spawnChance = 11f;
					val2.m_maxLevel = 0;
					val2.m_levelUpMinCenterDistance = 9999999f;
					val2.m_inLava = false;
					val2.m_canSpawnCloseToPlayer = false;
					val2.m_huntPlayer = false;
					val2.m_spawnAtNight = false;
					val2.m_biome = (Biome)1;
					if (name == "FirTree_Sapling" || name == "PineTree_Sapling")
					{
						val2.m_biome = (Biome)8;
					}
					if (name == "Birch_Sapling" || name == "Beech_Sapling" || name == "Oak")
					{
						val2.m_biome = (Biome)1;
					}
					val2.m_prefab = val;
					newSpawners.Add(val2);
					Debug.Log((object)("Editin spawnerData: " + val2.m_name));
				}
			}
		}

		private void editMonsterSpawner(SpawnData spawnData, List<GameObject> znetPrefabs)
		{
			//IL_1381: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e6f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a43: Unknown result type (might be due to invalid IL or missing references)
			//IL_1bd7: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c83: Unknown result type (might be due to invalid IL or missing references)
			//IL_193c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1658: Unknown result type (might be due to invalid IL or missing references)
			//IL_16bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_132f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0826: Unknown result type (might be due to invalid IL or missing references)
			//IL_058c: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a90: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a97: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a51: Unknown result type (might be due to invalid IL or missing references)
			//IL_155c: Unknown result type (might be due to invalid IL or missing references)
			//IL_061a: Unknown result type (might be due to invalid IL or missing references)
			spawnData.m_maxLevel = 3;
			spawnData.m_enabled = true;
			spawnData.m_levelUpMinCenterDistance = 400f;
			spawnData.m_groupSizeMin = 1;
			if ((Object)(object)spawnData.m_prefab == (Object)null)
			{
				Debug.LogWarning((object)("SPawner Data is empty: " + spawnData.m_name));
				return;
			}
			Debug.Log((object)("Editin spawnerData: " + spawnData.m_name));
			switch (spawnData.m_name)
			{
			case "Troll":
			{
				spawnData.m_maxLevel = 4;
				spawnData.m_biome = (Biome)68;
				spawnData.m_spawnAtNight = false;
				spawnData.m_spawnInterval /= 2f;
				GameObject val24 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "TrollAshlands");
				if ((Object)(object)val24 != (Object)null)
				{
					SpawnData val25 = spawnData.Clone();
					val25.m_name = "TrollAshlands";
					val25.m_spawnInterval = 2000f;
					val25.m_maxSpawned = 2;
					val25.m_spawnAtDay = true;
					val25.m_spawnAtNight = true;
					val25.m_biome = (Biome)32;
					val25.m_prefab = val24;
					newSpawners.Add(val25);
					Debug.Log((object)("Editin spawnerData: " + val25.m_name));
				}
				break;
			}
			case "Boar":
			{
				spawnData.m_spawnChance = 66f;
				spawnData.m_maxSpawned = 3;
				spawnData.m_maxLevel = 4;
				spawnData.m_spawnAtNight = false;
				generateSapplings(spawnData, znetPrefabs);
				GameObject val26 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Boar_piggy");
				if ((Object)(object)val26 != (Object)null)
				{
					SpawnData val27 = spawnData.Clone();
					val27.m_name = "Piggy";
					val27.m_spawnInterval = 2000f;
					val27.m_maxSpawned = 2;
					val27.m_spawnAtDay = true;
					val27.m_spawnAtNight = false;
					val27.m_biome = (Biome)1;
					val27.m_prefab = val26;
					newSpawners.Add(val27);
					Debug.Log((object)("Editin spawnerData: " + val27.m_name));
				}
				break;
			}
			case "deer":
				spawnData.m_spawnChance = 55f;
				spawnData.m_maxSpawned = 3;
				spawnData.m_maxLevel = 4;
				spawnData.m_spawnAtNight = false;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				break;
			case "Neck lakes":
				spawnData.m_spawnChance = 44f;
				spawnData.m_maxSpawned = 4;
				spawnData.m_maxLevel = 4;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				break;
			case "Neck IN RAIN":
				spawnData.m_maxLevel = 5;
				spawnData.m_spawnChance = 66f;
				spawnData.m_maxSpawned = 5;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				spawnData.m_requiredEnvironments.Add("Mist");
				spawnData.m_requiredEnvironments.Add("DeepForest Mist");
				spawnData.m_requiredEnvironments.Add("Mistlands_rain");
				spawnData.m_requiredEnvironments.Add("Bonemass");
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				break;
			case "Greyling":
			{
				spawnData.m_maxSpawned = 2;
				spawnData.m_spawnChance = 33f;
				spawnData.m_spawnAtDay = true;
				spawnData.m_spawnAtNight = false;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				spawnData.m_biome = (Biome)9;
				SpawnData val12 = spawnData.Clone();
				val12.m_name = "Greyling  Weather";
				val12.m_maxLevel = 5;
				val12.m_requiredEnvironments.Add("Rain");
				val12.m_requiredEnvironments.Add("LightRain");
				val12.m_requiredEnvironments.Add("ThunderStorm");
				val12.m_requiredEnvironments.Add("Mist");
				val12.m_requiredEnvironments.Add("DeepForest Mist");
				val12.m_requiredEnvironments.Add("Mistlands_rain");
				val12.m_requiredEnvironments.Add("Bonemass");
				val12.m_spawnAtDay = true;
				val12.m_spawnAtNight = false;
				val12.m_groupSizeMax = val12.m_maxSpawned;
				newSpawners.Add(val12);
				Debug.Log((object)("Editin spawnerData: " + val12.m_name));
				SpawnData val13 = spawnData.Clone();
				val13.m_name = "Greyling  Night";
				val13.m_maxLevel = 5;
				val13.m_spawnAtDay = false;
				val13.m_spawnAtNight = true;
				val13.m_groupSizeMax = val13.m_maxSpawned;
				newSpawners.Add(val13);
				Debug.Log((object)("Editin spawnerData: " + val13.m_name));
				SpawnData val14 = spawnData.Clone();
				val14.m_name = "Greydwarf Spawner after Elder/Weather";
				val14.m_maxLevel = 1;
				val14.m_spawnChance = 5f;
				val14.m_maxSpawned = 1;
				val14.m_prefab = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Spawner_GreydwarfNest");
				val14.m_requiredGlobalKey = "defeated_gdking";
				val14.m_requiredEnvironments.Add("Rain");
				val14.m_requiredEnvironments.Add("LightRain");
				val14.m_requiredEnvironments.Add("ThunderStorm");
				val14.m_requiredEnvironments.Add("Mist");
				val14.m_requiredEnvironments.Add("DeepForest Mist");
				val14.m_requiredEnvironments.Add("Mistlands_rain");
				val14.m_requiredEnvironments.Add("Bonemass");
				val14.m_spawnAtDay = false;
				val14.m_spawnAtNight = true;
				val14.m_biome = (Biome)9;
				val14.m_groupSizeMax = val14.m_maxSpawned;
				newSpawners.Add(val14);
				Debug.Log((object)("Editin spawnerData: " + val14.m_name));
				break;
			}
			case "Greydwarf":
				spawnData.m_maxSpawned = 2;
				spawnData.m_spawnChance = 25f;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				break;
			case "greydwarf DAY":
				spawnData.m_maxSpawned = 2;
				spawnData.m_spawnChance = 25f;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				break;
			case "greydwarf After boss":
			{
				spawnData.m_maxSpawned = 1;
				spawnData.m_spawnChance = 20f;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				spawnData.m_maxLevel = 4;
				SpawnData val9 = spawnData.Clone();
				val9.m_name = "greydwarf  Elder";
				val9.m_requiredGlobalKey = "defeated_gdking";
				val9.m_maxLevel = 5;
				val9.m_maxSpawned = 1;
				val9.m_groupSizeMax = val9.m_maxSpawned;
				newSpawners.Add(val9);
				Debug.Log((object)("Editin spawnerData: " + val9.m_name));
				break;
			}
			case "greydwarf Night":
			{
				spawnData.m_maxSpawned = 3;
				spawnData.m_spawnChance = 66f;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				spawnData.m_maxLevel = 4;
				SpawnData val8 = spawnData.Clone();
				val8.m_name = "greydwarf Night Elder";
				val8.m_requiredGlobalKey = "defeated_gdking";
				val8.m_maxLevel = 5;
				val8.m_maxSpawned = 1;
				val8.m_groupSizeMax = val8.m_maxSpawned;
				newSpawners.Add(val8);
				Debug.Log((object)("Editin spawnerData: " + val8.m_name));
				break;
			}
			case "greydwarf ELITE":
				spawnData.m_spawnChance = 33f;
				spawnData.m_spawnAtDay = false;
				spawnData.m_spawnAtNight = true;
				spawnData.m_maxLevel = 4;
				spawnData.m_levelUpMinCenterDistance = 1000f;
				break;
			case "Greydwarf Elite":
			{
				spawnData.m_spawnChance = 33f;
				spawnData.m_maxLevel = 5;
				spawnData.m_spawnAtDay = true;
				spawnData.m_spawnAtNight = true;
				spawnData.m_levelUpMinCenterDistance = 1000f;
				SpawnData val5 = spawnData.Clone();
				val5.m_name = "Greydwarf Elite Weather";
				val5.m_maxLevel = 5;
				val5.m_maxSpawned = 1;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				val5.m_requiredEnvironments.Add("Mist");
				val5.m_requiredEnvironments.Add("DeepForest Mist");
				val5.m_requiredEnvironments.Add("Bonemass");
				val5.m_groupSizeMax = val5.m_maxSpawned;
				newSpawners.Add(val5);
				Debug.Log((object)("Editin spawnerData: " + val5.m_name));
				break;
			}
			case "Greydwarf Shaman":
			{
				spawnData.m_spawnChance = 33f;
				if (spawnData.m_requiredGlobalKey == "defeated_gdking")
				{
					spawnData.m_maxLevel = 5;
					spawnData.m_maxSpawned = 1;
					spawnData.m_spawnAtDay = true;
					break;
				}
				SpawnData val35 = spawnData.Clone();
				val35.m_name = "Greydwarf Shaman Weather";
				val35.m_maxLevel = 5;
				val35.m_maxSpawned = 1;
				val35.m_spawnAtDay = true;
				val35.m_requiredEnvironments.Add("Rain");
				val35.m_requiredEnvironments.Add("LightRain");
				val35.m_requiredEnvironments.Add("ThunderStorm");
				val35.m_requiredEnvironments.Add("Mist");
				val35.m_requiredEnvironments.Add("DeepForest Mist");
				val35.m_requiredEnvironments.Add("Mistlands_rain");
				val35.m_requiredEnvironments.Add("Bonemass");
				val35.m_groupSizeMax = spawnData.m_maxSpawned;
				newSpawners.Add(val35);
				Debug.Log((object)("Editin spawnerData: " + val35.m_name));
				break;
			}
			case "Hatchling":
			{
				spawnData.m_maxSpawned = 2;
				spawnData.m_groupSizeMin = 1;
				spawnData.m_spawnChance = 20f;
				spawnData.m_levelUpMinCenterDistance = 1500f;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				SpawnData val36 = spawnData.Clone();
				val36.m_name = "Hatchling_DeepNorth";
				val36.m_minAltitude = 5f;
				val36.m_maxLevel = 6;
				val36.m_groundOffset = 30f;
				val36.m_biome = (Biome)64;
				val36.m_groupSizeMax = val36.m_maxSpawned;
				newSpawners.Add(val36);
				Debug.Log((object)("Editin spawnerData: " + val36.m_name));
				break;
			}
			case "Deathsquito":
				spawnData.m_maxSpawned = 2;
				spawnData.m_groupSizeMin = 1;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				break;
			case "Marsh draugr":
				spawnData.m_maxSpawned = 3;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				break;
			case "Skeleton":
				spawnData.m_maxSpawned = 2;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				break;
			case "Draugr Elite":
			{
				GameObject val15 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Skeleton_Poison");
				if ((Object)(object)val15 != (Object)null)
				{
					SpawnData val16 = spawnData.Clone();
					val16.m_name = "Skeleton_Poison swamps";
					val16.m_levelUpMinCenterDistance = 1000f;
					val16.m_maxSpawned = 2;
					val16.m_spawnChance = 11f;
					val16.m_spawnAtDay = true;
					val16.m_spawnAtNight = true;
					val16.m_prefab = val15;
					newSpawners.Add(val16);
					Debug.Log((object)("Editin spawnerData: " + val16.m_name));
				}
				break;
			}
			case "Wolf":
				if (spawnData.m_spawnAtNight)
				{
					spawnData.m_maxSpawned = 4;
					spawnData.m_groupSizeMin = 2;
					spawnData.m_groupSizeMax = 4;
					spawnData.m_spawnChance = 33f;
					GameObject val37 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Ulv");
					if ((Object)(object)val37 != (Object)null)
					{
						SpawnData val38 = spawnData.Clone();
						val38.m_name = "Ulv Night";
						val38.m_levelUpMinCenterDistance = 4000f;
						val38.m_maxLevel = 2;
						val38.m_spawnInterval = 240f;
						val38.m_spawnChance = 11f;
						val38.m_maxSpawned = 2;
						val38.m_prefab = val37;
						val38.m_groupSizeMin = 1;
						val38.m_groupSizeMax = val38.m_maxSpawned;
						newSpawners.Add(val38);
						Debug.Log((object)("Editin spawnerData: " + val38.m_name));
					}
					GameObject val39 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Wolf_cub");
					if ((Object)(object)val39 != (Object)null)
					{
						SpawnData val40 = spawnData.Clone();
						val40.m_name = "wolf cub";
						val40.m_maxLevel = 1;
						val40.m_spawnChance = 11f;
						val40.m_maxSpawned = 2;
						val40.m_prefab = val39;
						val40.m_groupSizeMin = 1;
						val40.m_spawnAtNight = false;
						val40.m_groupSizeMax = val40.m_maxSpawned;
						newSpawners.Add(val40);
						Debug.Log((object)("Editin spawnerData: " + val40.m_name));
					}
				}
				break;
			case "Lox":
			{
				GameObject val33 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Lox_Calf");
				if ((Object)(object)val33 != (Object)null)
				{
					SpawnData val34 = spawnData.Clone();
					val34.m_name = "wolf cub";
					val34.m_maxLevel = 1;
					val34.m_spawnChance = 11f;
					val34.m_maxSpawned = 2;
					val34.m_prefab = val33;
					val34.m_spawnAtNight = false;
					val34.m_groupSizeMin = 1;
					val34.m_groupSizeMax = val34.m_maxSpawned;
					newSpawners.Add(val34);
					Debug.Log((object)("Editin spawnerData: " + val34.m_name));
				}
				break;
			}
			case "Wraith":
			{
				spawnData.m_maxLevel = 2;
				spawnData.m_groupSizeMin = 1;
				spawnData.m_groupSizeMax = 2;
				spawnData.m_spawnChance = 22f;
				spawnData.m_levelUpMinCenterDistance = 3000f;
				GameObject val30 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Ghost");
				if ((Object)(object)val30 != (Object)null)
				{
					SpawnData val31 = spawnData.Clone();
					val31.m_name = "Ghost swamps";
					val31.m_levelUpMinCenterDistance = 1000f;
					val31.m_maxSpawned = 2;
					val31.m_spawnInterval = 300f;
					val31.m_spawnChance = 33f;
					val31.m_spawnAtDay = true;
					val31.m_spawnAtNight = true;
					val31.m_prefab = val30;
					newSpawners.Add(val31);
					Debug.Log((object)("Editin spawnerData: " + val31.m_name));
					SpawnData val32 = val31.Clone();
					val32.m_name = "Ghost Forest";
					val32.m_maxSpawned = 1;
					val32.m_spawnChance = 11f;
					val32.m_spawnAtDay = false;
					val32.m_groupSizeMax = 1;
					val32.m_biome = (Biome)10;
					newSpawners.Add(val32);
					Debug.Log((object)("Editin spawnerData: " + val32.m_name));
				}
				break;
			}
			case "Leech":
			{
				spawnData.m_maxLevel = 4;
				spawnData.m_maxSpawned = 5;
				spawnData.m_groupSizeMin = 1;
				spawnData.m_spawnChance = 33f;
				spawnData.m_biome = (Biome)2;
				spawnData.m_spawnAtDay = true;
				spawnData.m_spawnAtNight = false;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				SpawnData val28 = spawnData.Clone();
				val28.m_name = "Leech Weather";
				val28.m_maxLevel = 5;
				val28.m_levelUpMinCenterDistance = 1000f;
				val28.m_maxSpawned = 2;
				val28.m_groupSizeMax = val28.m_maxSpawned;
				val28.m_spawnAtDay = true;
				val28.m_spawnAtNight = true;
				val28.m_requiredEnvironments.Add("Rain");
				val28.m_requiredEnvironments.Add("ThunderStorm");
				val28.m_requiredEnvironments.Add("DeepForest Mist");
				val28.m_requiredEnvironments.Add("Mistlands_rain");
				val28.m_requiredEnvironments.Add("Bonemass");
				val28.m_groupSizeMax = val28.m_maxSpawned;
				newSpawners.Add(val28);
				Debug.Log((object)("Editin spawnerData: " + val28.m_name));
				SpawnData val29 = spawnData.Clone();
				val29.m_name = "Leech Night";
				val29.m_levelUpMinCenterDistance = 1000f;
				val29.m_maxLevel = 5;
				val29.m_maxSpawned = 3;
				val29.m_groupSizeMax = val29.m_maxSpawned;
				val29.m_spawnAtDay = false;
				val29.m_spawnAtNight = true;
				val29.m_groupSizeMax = val28.m_maxSpawned;
				newSpawners.Add(val28);
				Debug.Log((object)("Editin spawnerData: " + val29.m_name));
				break;
			}
			case "Surtling":
			{
				spawnData.m_maxLevel = 4;
				spawnData.m_inLava = true;
				spawnData.m_maxSpawned = 2;
				spawnData.m_minAltitude = 1f;
				spawnData.m_minOceanDepth = 0f;
				spawnData.m_maxOceanDepth = 0f;
				spawnData.m_spawnInterval = 33f;
				spawnData.m_spawnChance = 33f;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				spawnData.m_biome = (Biome)32;
				GameObject val22 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "SurtlingSpawner_bal");
				if ((Object)(object)val22 != (Object)null)
				{
					SpawnData val23 = spawnData.Clone();
					val23.m_name = "Surtling Spawner";
					val23.m_levelUpMinCenterDistance = 100000000f;
					val23.m_maxLevel = 0;
					val23.m_canSpawnCloseToPlayer = false;
					val23.m_spawnInterval = 360f;
					val23.m_spawnChance = 5f;
					val23.m_maxSpawned = 1;
					val23.m_spawnAtDay = false;
					val23.m_spawnAtNight = true;
					val23.m_prefab = val22;
					val23.m_groupSizeMax = val23.m_maxSpawned;
					newSpawners.Add(val23);
					Debug.Log((object)("Editin spawnerData: " + val23.m_name));
				}
				break;
			}
			case "StoneGolem":
			{
				spawnData.m_maxLevel = 3;
				spawnData.m_maxSpawned = 1;
				spawnData.m_spawnChance = 33f;
				spawnData.m_biome = (Biome)68;
				spawnData.m_minAltitude = 77f;
				spawnData.m_levelUpMinCenterDistance = 2500f;
				spawnData.m_groupSizeMax = 1;
				SpawnData val21 = spawnData.Clone();
				val21.m_name = "Golem Deep North";
				val21.m_maxLevel = 5;
				val21.m_maxSpawned = 1;
				val21.m_spawnAtDay = true;
				val21.m_spawnAtNight = true;
				val21.m_minAltitude = 22f;
				val21.m_biome = (Biome)4;
				val21.m_groupSizeMax = val21.m_maxSpawned;
				newSpawners.Add(val21);
				Debug.Log((object)("Editin spawnerData: " + val21.m_name));
				break;
			}
			case "Serpent":
			{
				spawnData.m_maxLevel = 1;
				spawnData.m_maxSpawned = 1;
				spawnData.m_spawnChance = 11f;
				spawnData.m_spawnInterval = 1500f;
				SpawnData val17 = spawnData.Clone();
				val17.m_name = "Serpent after Elder";
				val17.m_maxLevel = 2;
				val17.m_minLevel = 1;
				val17.m_maxSpawned = 1;
				val17.m_minDistanceFromCenter = 1500f;
				val17.m_spawnChance = 22f;
				val17.m_levelUpMinCenterDistance = 2000f;
				val17.m_requiredGlobalKey = "defeated_gdking";
				newSpawners.Add(val17);
				Debug.Log((object)("Editin spawnerData: " + val17.m_name));
				SpawnData val18 = spawnData.Clone();
				val18.m_name = "Serpent after Bonemass";
				val18.m_maxLevel = 3;
				val18.m_minLevel = 1;
				val18.m_maxSpawned = 1;
				val18.m_minDistanceFromCenter = 2000f;
				val18.m_spawnChance = 22f;
				val18.m_levelUpMinCenterDistance = 2000f;
				val18.m_requiredGlobalKey = "defeated_bonemass";
				newSpawners.Add(val18);
				Debug.Log((object)("Editin spawnerData: " + val18.m_name));
				SpawnData val19 = spawnData.Clone();
				val19.m_name = "Serpent after Moder";
				val19.m_maxLevel = 4;
				val19.m_minLevel = 2;
				val19.m_maxSpawned = 1;
				val19.m_minDistanceFromCenter = 3000f;
				val19.m_spawnChance = 22f;
				val19.m_levelUpMinCenterDistance = 4000f;
				val19.m_requiredGlobalKey = "defeated_dragon";
				newSpawners.Add(val19);
				Debug.Log((object)("Editin spawnerData: " + val19.m_name));
				SpawnData val20 = spawnData.Clone();
				val20.m_name = "Serpent after Yagluth";
				val20.m_minDistanceFromCenter = 3500f;
				val20.m_maxLevel = 5;
				val20.m_minLevel = 2;
				val20.m_maxSpawned = 1;
				val20.m_spawnChance = 22f;
				val20.m_levelUpMinCenterDistance = 4000f;
				val20.m_requiredGlobalKey = "defeated_goblinking";
				newSpawners.Add(val20);
				Debug.Log((object)("Editin spawnerData: " + val20.m_name));
				break;
			}
			case "Fenring":
			{
				spawnData.m_maxSpawned = 2;
				spawnData.m_spawnChance = 11f;
				spawnData.m_biome = (Biome)68;
				spawnData.m_minAltitude = 22f;
				spawnData.m_spawnInterval = 300f;
				spawnData.m_levelUpMinCenterDistance = 2000f;
				spawnData.m_groupSizeMax = spawnData.m_maxSpawned;
				GameObject val10 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Fenring_Cultist");
				if ((Object)(object)val10 != (Object)null)
				{
					SpawnData val11 = spawnData.Clone();
					val11.m_name = "Fenring Cultist";
					val11.m_levelUpMinCenterDistance = 3000f;
					val11.m_maxLevel = 3;
					val11.m_maxSpawned = 1;
					val11.m_spawnInterval = 400f;
					val11.m_spawnChance = 11f;
					val11.m_spawnAtDay = false;
					val11.m_spawnAtNight = true;
					val11.m_prefab = val10;
					val11.m_groupSizeMax = val11.m_maxSpawned;
					newSpawners.Add(val11);
					Debug.Log((object)("Editin spawnerData: " + val11.m_name));
				}
				break;
			}
			case "Abomination":
				spawnData.m_biome = (Biome)2;
				spawnData.m_maxSpawned = 2;
				spawnData.m_spawnChance = 22f;
				spawnData.m_maxAltitude = 55f;
				spawnData.m_groupSizeMax = 1;
				spawnData.m_requiredGlobalKey = "defeated_gdking";
				break;
			case "Seeker defeated queen other biomes":
			{
				spawnData.m_maxLevel = 3;
				spawnData.m_maxSpawned = 3;
				spawnData.m_biome = (Biome)512;
				spawnData.m_biomeArea = (BiomeArea)3;
				GameObject val6 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "SeekerEgg_bal");
				if ((Object)(object)val6 != (Object)null)
				{
					SpawnData val7 = spawnData.Clone();
					val7.m_name = "SeekerEgg after queen";
					val7.m_maxLevel = 0;
					val7.m_levelUpMinCenterDistance = 9999999f;
					val7.m_inLava = false;
					val7.m_canSpawnCloseToPlayer = false;
					val7.m_maxSpawned = 10;
					val7.m_spawnInterval = 400f;
					val7.m_spawnChance = 11f;
					val7.m_spawnAtDay = false;
					val7.m_spawnAtNight = true;
					val7.m_prefab = val6;
					val7.m_groupSizeMin = 3;
					val7.m_groupSizeMax = val7.m_maxSpawned;
					newSpawners.Add(val7);
					Debug.Log((object)("Editin spawnerData: " + val7.m_name));
				}
				break;
			}
			case "Meteor":
				spawnData.m_maxSpawned = 10;
				spawnData.m_requiredEnvironments.Add("Ashlands_ashrain");
				spawnData.m_requiredEnvironments.Add("Ashlands_storm");
				spawnData.m_requiredEnvironments.Add("Ashlands_CinderRain");
				spawnData.m_requiredEnvironments.Add("GoblinKing");
				spawnData.m_biome = (Biome)48;
				spawnData.m_requiredGlobalKey = "defeated_dragon";
				break;
			case "Bonemaw Serpent":
				spawnData.m_maxSpawned = 3;
				spawnData.m_spawnChance = 22f;
				break;
			case "Dverger":
			{
				spawnData.m_spawnChance = 15f;
				spawnData.m_spawnInterval = 500f;
				spawnData.m_maxLevel = 4;
				SpawnData val = spawnData.Clone();
				val.m_requiredGlobalKey = "defeated_qeen";
				val.m_requiredEnvironments.Add("Mist");
				val.m_requiredEnvironments.Add("DeepForest Mist");
				val.m_requiredEnvironments.Add("Mistlands_rain");
				val.m_requiredEnvironments.Add("Mistlands_thunder");
				val.m_biome = (Biome)543;
				val.m_name = "Dverger after Queen";
				val.m_levelUpMinCenterDistance = 3000f;
				val.m_maxSpawned = 2;
				val.m_groupSizeMin = 1;
				val.m_groupSizeMax = 1;
				newSpawners.Add(val);
				Debug.Log((object)("Editin spawnerData: " + val.m_name));
				GameObject val2 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "DvergerMage");
				if ((Object)(object)val2 != (Object)null)
				{
					SpawnData val3 = spawnData.Clone();
					val3.m_name = "Dverger Mage";
					val3.m_levelUpMinCenterDistance = 3000f;
					val3.m_maxSpawned = 2;
					val3.m_prefab = val2;
					val3.m_groupSizeMin = 1;
					val3.m_groupSizeMax = 1;
					newSpawners.Add(val3);
					Debug.Log((object)("Editin spawnerData: " + val3.m_name));
					SpawnData val4 = val.Clone();
					val4.m_name = "Dverger Mage after Queen";
					val4.m_levelUpMinCenterDistance = 3000f;
					val4.m_maxSpawned = 2;
					val4.m_prefab = val2;
					val4.m_groupSizeMin = 1;
					val4.m_groupSizeMax = 1;
					newSpawners.Add(val4);
					Debug.Log((object)("Editin spawnerData: " + val4.m_name));
				}
				break;
			}
			}
		}

		private void setupMonster(GameObject monster, SpawnSystemList spawnSystemList, List<GameObject> znetPrefabs)
		{
			//IL_253d: Unknown result type (might be due to invalid IL or missing references)
			//IL_25b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_2f87: Unknown result type (might be due to invalid IL or missing references)
			//IL_2d3d: Unknown result type (might be du