Decompiled source of Lotus Ecarlate Changes v0.7.6

plugins/LotusEcarlateChanges.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AuthoritativeConfig;
using BalrondHumanoidRandomizer;
using BalrondShipyard;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using CapeAndTorchResistanceChanges;
using ClayBuildPieces.Functions;
using CreatureManager;
using HarmonyLib;
using ItemManager;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
using Jotunn.Utils;
using LotusEcarlateChanges.Changes.JotunnBased;
using LotusEcarlateChanges.Changes.Manual;
using LotusEcarlateChanges.Changes.StandaloneManagerBased;
using LotusEcarlateChanges.Extensions;
using LotusEcarlateChanges.Model.Changes;
using LotusEcarlateChanges.Model.Managers;
using LotusEcarlateChanges.Model.Managers.Jotunn;
using LotusEcarlateChanges.Model.Managers.Manual;
using LotusEcarlateChanges.Model.Managers.Standalone;
using LotusEcarlateChanges.Model.Wrappers;
using LotusEcarlateChanges.Model.Wrappers.Nested;
using Microsoft.CodeAnalysis;
using PieceManager;
using SpeedyPaths;
using TMPro;
using UnityEngine;
using Valheim.FallDamageForCreatures;
using VentureValheim.Progression;
using Warfare;
using neobotics.ValheimMods;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("BalrondContainers")]
[assembly: IgnoresAccessChecksTo("BalrondHumanoidRandomizer")]
[assembly: IgnoresAccessChecksTo("BalrondShipyard")]
[assembly: IgnoresAccessChecksTo("CapeAndTorchResistanceChanges")]
[assembly: IgnoresAccessChecksTo("ClayBuildPieces")]
[assembly: IgnoresAccessChecksTo("Clutter")]
[assembly: IgnoresAccessChecksTo("CoreWoodPieces")]
[assembly: IgnoresAccessChecksTo("DarkWoodFurnitures")]
[assembly: IgnoresAccessChecksTo("FineWoodBuildPieces")]
[assembly: IgnoresAccessChecksTo("FineWoodFurnitures")]
[assembly: IgnoresAccessChecksTo("Jotunn")]
[assembly: IgnoresAccessChecksTo("MaxAxe")]
[assembly: IgnoresAccessChecksTo("Microsoft.CSharp")]
[assembly: IgnoresAccessChecksTo("Monstrum")]
[assembly: IgnoresAccessChecksTo("MoreGatesExtended")]
[assembly: IgnoresAccessChecksTo("RefinedStonePieces")]
[assembly: IgnoresAccessChecksTo("SimpleElevators")]
[assembly: IgnoresAccessChecksTo("SouthsilArmor")]
[assembly: IgnoresAccessChecksTo("SpeedyPaths")]
[assembly: IgnoresAccessChecksTo("System.Data.DataSetExtensions")]
[assembly: IgnoresAccessChecksTo("Valheim.FallDamageForCreatures")]
[assembly: IgnoresAccessChecksTo("VentureValheim.Progression")]
[assembly: IgnoresAccessChecksTo("Warfare")]
[assembly: TargetFramework(".NETFramework,Version=v4.8.1", FrameworkDisplayName = ".NET Framework 4.8.1")]
[assembly: AssemblyCompany("LotusEcarlateChanges")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("0.7.6.0")]
[assembly: AssemblyInformationalVersion("0.7.6+4316870492a33f692efd540b045c14bda10ef005")]
[assembly: AssemblyProduct("LotusEcarlateChanges")]
[assembly: AssemblyTitle("LotusEcarlateChanges")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.7.6.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace LotusEcarlateChanges
{
	[BepInPlugin("nbusseneau.LotusEcarlateChanges", "LotusEcarlateChanges", "0.7.6")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		public const string ModGUID = "nbusseneau.LotusEcarlateChanges";

		private const string ModName = "LotusEcarlateChanges";

		private const string ModVersion = "0.7.6";

		public static ManualLogSource Logger { get; private set; }

		public static Harmony Harmony { get; } = new Harmony("nbusseneau.LotusEcarlateChanges");


		public void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			List<IChanges> list = new List<IChanges>(26);
			list.Add(new Clutter());
			list.Add(new CustomSkills());
			list.Add(new MoreGates());
			list.Add(new ClayBuildPieces());
			list.Add(new CoreWoodPieces());
			list.Add(new DarkWoodFurnitures());
			list.Add(new FineWoodBuildPieces());
			list.Add(new FineWoodFurnitures());
			list.Add(new Monstrum());
			list.Add(new RefinedStonePieces());
			list.Add(new SimpleElevators());
			list.Add(new SouthsilArmor());
			list.Add(new Warfare());
			list.Add(new BalrondContainers());
			list.Add(new BalrondHumanoidRandomizer());
			list.Add(new BalrondShipyard());
			list.Add(new CapeAndTorchResistanceChanges());
			list.Add(new CustomKeyHints());
			list.Add(new FallDamageForCreatures());
			list.Add(new Lightsources());
			list.Add(new SpeedyPaths());
			list.Add(new Tutorials());
			list.Add(new VanillaMisc());
			list.Add(new VanillaArmors());
			list.Add(new VanillaWeapons());
			list.Add(new WorldAdvancementProgression());
			list.ForEach(delegate(IChanges changes)
			{
				changes.Apply();
			});
		}
	}
}
namespace LotusEcarlateChanges.Model.Wrappers
{
	public class ItemWrapper : PrefabWrapperBase
	{
		private Recipe _recipe;

		private ResourcesWrapper _resources;

		private readonly ArmorWrapper _armor;

		private readonly FoodWrapper _food;

		private readonly SetWrapper _set;

		private readonly WeaponWrapper _weapon;

		public ItemData ItemData { get; }

		public SharedData SharedData { get; }

		public PieceTable PieceTable { get; }

		public List<GameObject> Pieces { get; }

		public Recipe Recipe
		{
			get
			{
				if (_recipe != null)
				{
					return _recipe;
				}
				Recipe recipe = ObjectDB.instance.GetRecipe(ItemData);
				if (recipe != null)
				{
					return _recipe = recipe;
				}
				return null;
			}
		}

		public ResourcesWrapper Resources
		{
			get
			{
				if (_resources != null)
				{
					return _resources;
				}
				if (Recipe != null)
				{
					return _resources = new ResourcesWrapper(Recipe);
				}
				return null;
			}
		}

		public Sprite Icon => ItemData.GetIcon();

		public ArmorWrapper Armor
		{
			get
			{
				return _armor;
			}
			set
			{
				_armor.CopyProperties(value);
			}
		}

		public FoodWrapper Food
		{
			get
			{
				return _food;
			}
			set
			{
				_food.CopyProperties(value);
			}
		}

		public SetWrapper Set
		{
			get
			{
				return _set;
			}
			set
			{
				_set.CopyProperties(value);
			}
		}

		public WeaponWrapper Weapon
		{
			get
			{
				return _weapon;
			}
			set
			{
				_weapon.CopyProperties(value);
			}
		}

		protected ItemWrapper(GameObject prefab)
			: base(prefab)
		{
			ItemData = base.Prefab.GetComponent<ItemDrop>().m_itemData;
			SharedData = ItemData.m_shared;
			PieceTable = SharedData.m_buildPieces;
			Pieces = PieceTable?.m_pieces;
			_armor = new ArmorWrapper(SharedData);
			_food = new FoodWrapper(SharedData);
			_set = new SetWrapper(SharedData);
			_weapon = new WeaponWrapper(SharedData);
		}

		public static ItemWrapper Get(GameObject prefab)
		{
			if (prefab == null)
			{
				return null;
			}
			if (!PrefabWrapperBase.s_wrappersCache.TryGetValue(((Object)prefab).name, out var value))
			{
				PrefabWrapperBase prefabWrapperBase2 = (PrefabWrapperBase.s_wrappersCache[((Object)prefab).name] = new ItemWrapper(prefab));
				value = prefabWrapperBase2;
			}
			return (ItemWrapper)value;
		}
	}
	public class PieceWrapper : PrefabWrapperBase
	{
		private readonly ComfortWrapper _comfort;

		public Piece Piece { get; }

		public CraftingStation CraftingStation
		{
			get
			{
				return Piece.m_craftingStation;
			}
			set
			{
				Piece.m_craftingStation = value;
			}
		}

		public PieceCategory Category
		{
			get
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				return Piece.m_category;
			}
			set
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				Piece.m_category = value;
			}
		}

		public ComfortWrapper Comfort
		{
			get
			{
				return _comfort;
			}
			set
			{
				_comfort.CopyProperties(value);
			}
		}

		public ResourcesWrapper Resources { get; }

		protected PieceWrapper(GameObject prefab)
			: base(prefab)
		{
			Piece = base.Prefab.GetComponent<Piece>();
			_comfort = new ComfortWrapper(Piece);
			Resources = new ResourcesWrapper(Piece);
		}

		public static PieceWrapper Get(GameObject prefab)
		{
			if (prefab == null)
			{
				return null;
			}
			if (!PrefabWrapperBase.s_wrappersCache.TryGetValue(((Object)prefab).name, out var value))
			{
				PrefabWrapperBase prefabWrapperBase2 = (PrefabWrapperBase.s_wrappersCache[((Object)prefab).name] = new PieceWrapper(prefab));
				value = prefabWrapperBase2;
			}
			return (PieceWrapper)value;
		}
	}
	public abstract class PrefabWrapperBase
	{
		protected static readonly Dictionary<string, PrefabWrapperBase> s_wrappersCache = new Dictionary<string, PrefabWrapperBase>();

		public GameObject Prefab { get; }

		public string PrefabName => ((Object)Prefab).name;

		protected PrefabWrapperBase(GameObject prefab)
		{
			Prefab = prefab;
			base..ctor();
		}
	}
}
namespace LotusEcarlateChanges.Model.Wrappers.Nested
{
	public class ArmorWrapper
	{
		private readonly SharedData _sharedData;

		public float ArmorBase
		{
			get
			{
				return _sharedData.m_armor;
			}
			set
			{
				_sharedData.m_armor = value;
			}
		}

		public float ArmorPerLevel
		{
			get
			{
				return _sharedData.m_armorPerLevel;
			}
			set
			{
				_sharedData.m_armorPerLevel = value;
			}
		}

		public List<DamageModPair> DamageModifiers
		{
			get
			{
				return _sharedData.m_damageModifiers;
			}
			set
			{
				_sharedData.m_damageModifiers = value;
			}
		}

		public float MovementModifier
		{
			get
			{
				return _sharedData.m_movementModifier;
			}
			set
			{
				_sharedData.m_movementModifier = value;
			}
		}

		public float EitrRegenModifier
		{
			get
			{
				return _sharedData.m_eitrRegenModifier;
			}
			set
			{
				_sharedData.m_eitrRegenModifier = value;
			}
		}

		public float Weight
		{
			get
			{
				return _sharedData.m_weight;
			}
			set
			{
				_sharedData.m_weight = value;
			}
		}

		public SE_Stats EquipEffect
		{
			get
			{
				//IL_000b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0011: Expected O, but got Unknown
				return (SE_Stats)_sharedData.m_equipStatusEffect;
			}
			set
			{
				_sharedData.m_equipStatusEffect = (StatusEffect)(object)value;
			}
		}

		public ArmorWrapper(SharedData sharedData)
		{
			_sharedData = sharedData;
			base..ctor();
		}
	}
	public class ComfortWrapper
	{
		private readonly Piece _piece;

		public int Value
		{
			get
			{
				return _piece.m_comfort;
			}
			set
			{
				_piece.m_comfort = value;
			}
		}

		public ComfortGroup Group
		{
			get
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				return _piece.m_comfortGroup;
			}
			set
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				_piece.m_comfortGroup = value;
			}
		}

		public ComfortWrapper(Piece piece)
		{
			_piece = piece;
			base..ctor();
		}
	}
	public class FoodWrapper
	{
		private readonly SharedData _sharedData;

		public float Health
		{
			get
			{
				return _sharedData.m_food;
			}
			set
			{
				_sharedData.m_food = value;
			}
		}

		public float Stamina
		{
			get
			{
				return _sharedData.m_foodStamina;
			}
			set
			{
				_sharedData.m_foodStamina = value;
			}
		}

		public float Eitr
		{
			get
			{
				return _sharedData.m_foodEitr;
			}
			set
			{
				_sharedData.m_foodEitr = value;
			}
		}

		public float Duration
		{
			get
			{
				return _sharedData.m_foodBurnTime;
			}
			set
			{
				_sharedData.m_foodBurnTime = value;
			}
		}

		public float Regen
		{
			get
			{
				return _sharedData.m_foodRegen;
			}
			set
			{
				_sharedData.m_foodRegen = value;
			}
		}

		public FoodWrapper(SharedData sharedData)
		{
			_sharedData = sharedData;
			base..ctor();
		}
	}
	public class ResourcesWrapper
	{
		private readonly Piece _piece;

		private readonly Recipe _recipe;

		private readonly Dictionary<string, Requirement> _resources;

		public ResourcesWrapper(Piece piece)
		{
			_piece = piece;
			_resources = piece.m_resources.ToDictionary((Requirement r) => ((Object)r.m_resItem).name);
		}

		public ResourcesWrapper(Recipe recipe)
		{
			_recipe = recipe;
			_resources = recipe.m_resources.ToDictionary((Requirement r) => ((Object)r.m_resItem).name);
		}

		private void Save()
		{
			int num;
			Requirement[] array;
			if (_piece != null)
			{
				Piece piece = _piece;
				Dictionary<string, Requirement>.ValueCollection values = _resources.Values;
				num = 0;
				array = (Requirement[])(object)new Requirement[values.Count];
				foreach (Requirement item in values)
				{
					array[num] = item;
					num++;
				}
				piece.m_resources = array;
			}
			if (_recipe == null)
			{
				return;
			}
			Recipe recipe = _recipe;
			Dictionary<string, Requirement>.ValueCollection values2 = _resources.Values;
			num = 0;
			array = (Requirement[])(object)new Requirement[values2.Count];
			foreach (Requirement item2 in values2)
			{
				array[num] = item2;
				num++;
			}
			recipe.m_resources = array;
		}

		private void Add(string itemName, int amount)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			if (!_resources.TryGetValue(itemName, out var value))
			{
				value = new Requirement
				{
					m_resItem = ObjectDB.instance.GetItemPrefab(itemName).GetComponent<ItemDrop>()
				};
				_resources[itemName] = value;
			}
			value.m_amount = amount;
		}

		public void Add(string itemName, int amount, bool recover = true)
		{
			Add(itemName, amount);
			_resources[itemName].m_recover = recover;
			Save();
		}

		public void Add(string itemName, int amount, int amountPerLevel)
		{
			Add(itemName, amount);
			_resources[itemName].m_amountPerLevel = amountPerLevel;
			Save();
		}

		public void Clear()
		{
			_resources.Clear();
			Save();
		}
	}
	public class SetWrapper
	{
		private readonly SharedData _sharedData;

		public SE_Stats Effect
		{
			get
			{
				//IL_000b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0011: Expected O, but got Unknown
				return (SE_Stats)_sharedData.m_setStatusEffect;
			}
			set
			{
				_sharedData.m_setStatusEffect = (StatusEffect)(object)value;
			}
		}

		public string Name
		{
			get
			{
				return _sharedData.m_setName;
			}
			set
			{
				_sharedData.m_setName = value;
				if (Effect != null)
				{
					((Object)Effect).name = "SetEffect_" + value;
				}
			}
		}

		public int Size
		{
			get
			{
				return _sharedData.m_setSize;
			}
			set
			{
				_sharedData.m_setSize = value;
			}
		}

		public SetWrapper(SharedData sharedData)
		{
			_sharedData = sharedData;
			base..ctor();
		}
	}
	public class WeaponWrapper
	{
		private readonly SharedData _sharedData;

		public DamageTypes Damages
		{
			get
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				return _sharedData.m_damages;
			}
			set
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				_sharedData.m_damages = value;
			}
		}

		public DamageTypes DamagesPerLevel
		{
			get
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				return _sharedData.m_damagesPerLevel;
			}
			set
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				_sharedData.m_damagesPerLevel = value;
			}
		}

		public float Knockback
		{
			get
			{
				return _sharedData.m_attackForce;
			}
			set
			{
				_sharedData.m_attackForce = value;
			}
		}

		public float BackstabBonus
		{
			get
			{
				return _sharedData.m_backstabBonus;
			}
			set
			{
				_sharedData.m_backstabBonus = value;
			}
		}

		public Attack PrimaryAttack
		{
			get
			{
				return _sharedData.m_attack;
			}
			set
			{
				_sharedData.m_attack = value;
			}
		}

		public Attack SecondaryAttack
		{
			get
			{
				return _sharedData.m_secondaryAttack;
			}
			set
			{
				_sharedData.m_secondaryAttack = value;
			}
		}

		public SE_Stats AttackEffect
		{
			get
			{
				//IL_000b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0011: Expected O, but got Unknown
				return (SE_Stats)_sharedData.m_attackStatusEffect;
			}
			set
			{
				_sharedData.m_attackStatusEffect = (StatusEffect)(object)value;
			}
		}

		public float BlockArmor
		{
			get
			{
				return _sharedData.m_blockPower;
			}
			set
			{
				_sharedData.m_blockPower = value;
			}
		}

		public float BlockArmorPerLevel
		{
			get
			{
				return _sharedData.m_blockPowerPerLevel;
			}
			set
			{
				_sharedData.m_blockPowerPerLevel = value;
			}
		}

		public float BlockForce
		{
			get
			{
				return _sharedData.m_deflectionForce;
			}
			set
			{
				_sharedData.m_deflectionForce = value;
			}
		}

		public float BlockForcePerLevel
		{
			get
			{
				return _sharedData.m_deflectionForcePerLevel;
			}
			set
			{
				_sharedData.m_deflectionForcePerLevel = value;
			}
		}

		public float ParryBonus
		{
			get
			{
				return _sharedData.m_timedBlockBonus;
			}
			set
			{
				_sharedData.m_timedBlockBonus = value;
			}
		}

		public float MovementModifier
		{
			get
			{
				return _sharedData.m_movementModifier;
			}
			set
			{
				_sharedData.m_movementModifier = value;
			}
		}

		public float Weight
		{
			get
			{
				return _sharedData.m_weight;
			}
			set
			{
				_sharedData.m_weight = value;
			}
		}

		public SkillType SkillType
		{
			get
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				return _sharedData.m_skillType;
			}
			set
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				_sharedData.m_skillType = value;
			}
		}

		public SE_Stats EquipEffect
		{
			get
			{
				//IL_000b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0011: Expected O, but got Unknown
				return (SE_Stats)_sharedData.m_equipStatusEffect;
			}
			set
			{
				_sharedData.m_equipStatusEffect = (StatusEffect)(object)value;
			}
		}

		public WeaponWrapper(SharedData sharedData)
		{
			_sharedData = sharedData;
			base..ctor();
		}
	}
}
namespace LotusEcarlateChanges.Model.Managers
{
	public interface IIndexableManager<T> : IManager, IEnumerable<T>, IEnumerable
	{
		T this[string name] { get; }

		IEnumerable<T> this[params string[] names] { get; }
	}
	public interface IManager
	{
		void Remove(params string[] names);

		void Remove(IEnumerable<string> names);

		void Keep(params string[] names);

		void Keep(IEnumerable<string> names);

		void Apply();
	}
}
namespace LotusEcarlateChanges.Model.Managers.Standalone
{
	public class CreatureManager<T> : PrefabManagerBase<T>, IIndexableManager<T>, IManager, IEnumerable<T>, IEnumerable
	{
		public T this[string name] => GetObject(name);

		public IEnumerable<T> this[params string[] names] => from name in names
			select this[name] into c
			where c != null
			select c;

		public CreatureManager(List<T> registeredCreatures, List<GameObject> prefabs)
			: base(registeredCreatures, prefabs)
		{
		}

		public IEnumerator<T> GetEnumerator()
		{
			return _registeredObjects.GetEnumerator();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return GetEnumerator();
		}
	}
	public class ItemManager<T> : PrefabManagerBase<T>, IIndexableManager<(T Item, ItemWrapper Wrapper)>, IManager, IEnumerable<(T Item, ItemWrapper Wrapper)>, IEnumerable
	{
		private readonly List<GameObject> _zNetOnlyPrefabs;

		public (T Item, ItemWrapper Wrapper) this[string name]
		{
			get
			{
				T @object = GetObject(name);
				return (@object, ItemWrapper.Get(GetPrefab(@object)));
			}
		}

		public IEnumerable<(T Item, ItemWrapper Wrapper)> this[params string[] names] => from name in names
			select this[name] into t
			where t.Item != null
			select t;

		public ItemManager(List<T> registeredItems, List<GameObject> prefabs, List<GameObject> zNetOnlyPrefabs)
		{
			_zNetOnlyPrefabs = zNetOnlyPrefabs;
			base..ctor(registeredItems, prefabs);
		}

		protected override void ApplyToRemove()
		{
			base.ApplyToRemove();
			_zNetOnlyPrefabs.RemoveAll((GameObject prefab) => _toRemove.Contains(((Object)prefab).name));
		}

		protected override void ApplyToKeep()
		{
			base.ApplyToKeep();
			_zNetOnlyPrefabs.RemoveAll((GameObject prefab) => !_toKeep.Contains(((Object)prefab).name));
		}

		public IEnumerator<(T Item, ItemWrapper Wrapper)> GetEnumerator()
		{
			return _registeredObjects.Select((T obj) => (obj, ItemWrapper.Get(GetPrefab(obj)))).GetEnumerator();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return GetEnumerator();
		}
	}
	public class LocationManager<T> : StandaloneManagerBase<T>, IIndexableManager<T>, IManager, IEnumerable<T>, IEnumerable
	{
		public T this[string name] => GetObject(name);

		public IEnumerable<T> this[params string[] names] => from name in names
			select this[name] into l
			where l != null
			select l;

		public LocationManager(List<T> registeredLocations)
			: base(registeredLocations)
		{
		}

		protected override string GetName(T location)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			return ((Object)(Location)AccessTools.Field(location.GetType(), "location").GetValue(location)).name;
		}

		public IEnumerator<T> GetEnumerator()
		{
			return _registeredObjects.GetEnumerator();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return GetEnumerator();
		}
	}
	public class PieceManager<T> : PrefabManagerBase<T>, IIndexableManager<(T BuildPiece, PieceWrapper Wrapper)>, IManager, IEnumerable<(T BuildPiece, PieceWrapper Wrapper)>, IEnumerable
	{
		public (T BuildPiece, PieceWrapper Wrapper) this[string name]
		{
			get
			{
				T @object = GetObject(name);
				return (@object, PieceWrapper.Get(GetPrefab(@object)));
			}
		}

		public IEnumerable<(T BuildPiece, PieceWrapper Wrapper)> this[params string[] names] => from name in names
			select this[name] into t
			where t.BuildPiece != null
			select t;

		public PieceManager(List<T> registeredPieces, List<GameObject> piecePrefabs)
			: base(registeredPieces, piecePrefabs)
		{
		}

		public IEnumerator<(T BuildPiece, PieceWrapper Wrapper)> GetEnumerator()
		{
			return _registeredObjects.Select((T obj) => (obj, PieceWrapper.Get(GetPrefab(obj)))).GetEnumerator();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return GetEnumerator();
		}
	}
	public abstract class PrefabManagerBase<T> : StandaloneManagerBase<T>
	{
		protected readonly List<GameObject> _prefabs;

		protected PrefabManagerBase(List<T> registeredObjects, List<GameObject> prefabs)
		{
			_prefabs = prefabs;
			base..ctor(registeredObjects);
		}

		protected GameObject GetPrefab(T obj)
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			if (obj == null)
			{
				return null;
			}
			return (GameObject)AccessTools.Field(obj.GetType(), "Prefab").GetValue(obj);
		}

		protected override string GetName(T obj)
		{
			GameObject prefab = GetPrefab(obj);
			if (prefab == null)
			{
				return null;
			}
			return ((Object)prefab).name;
		}

		protected override void ApplyToRemove()
		{
			base.ApplyToRemove();
			_prefabs.RemoveAll((GameObject prefab) => _toRemove.Contains(((Object)prefab).name));
		}

		protected override void ApplyToKeep()
		{
			base.ApplyToKeep();
			_prefabs.RemoveAll((GameObject prefab) => !_toKeep.Contains(((Object)prefab).name));
		}
	}
	public abstract class StandaloneManagerBase<T> : IManager
	{
		protected readonly List<T> _registeredObjects;

		protected readonly Dictionary<string, T> _objectsCache;

		protected readonly HashSet<string> _toRemove;

		protected readonly HashSet<string> _toKeep;

		protected StandaloneManagerBase(List<T> registeredObjects)
		{
			_registeredObjects = registeredObjects;
			_objectsCache = new Dictionary<string, T>();
			_toRemove = new HashSet<string>();
			_toKeep = new HashSet<string>();
			base..ctor();
		}

		protected abstract string GetName(T obj);

		protected T GetObject(string name, bool logError = true)
		{
			if (!_objectsCache.TryGetValue(name, out var value))
			{
				value = _registeredObjects.SingleOrDefault((T obj) => GetName(obj) == name);
				if (value != null)
				{
					_objectsCache[name] = value;
				}
				else if (logError)
				{
					Plugin.Logger.LogError((object)$"{GetType()} did not find any object registered with name {name}");
				}
			}
			return value;
		}

		public void Remove(params string[] names)
		{
			_toRemove.UnionWith(names);
		}

		public void Remove(IEnumerable<string> names)
		{
			_toRemove.UnionWith(names);
		}

		public void Keep(params string[] names)
		{
			_toKeep.UnionWith(names);
		}

		public void Keep(IEnumerable<string> names)
		{
			_toKeep.UnionWith(names);
		}

		public void Apply()
		{
			if (_toRemove.Any() && _toKeep.Any())
			{
				Plugin.Logger.LogError((object)"Can't have both object names to remove and object names to keep at the same time.");
			}
			else if (_toRemove.Any())
			{
				ApplyToRemove();
			}
			else if (_toKeep.Any())
			{
				ApplyToKeep();
			}
		}

		protected virtual void ApplyToRemove()
		{
			foreach (string item in _toRemove)
			{
				_registeredObjects.Remove(GetObject(item, logError: false));
			}
		}

		protected virtual void ApplyToKeep()
		{
			IEnumerable<T> objectsToKeep = from name in _toKeep
				select GetObject(name, logError: false) into obj
				where obj != null
				select obj;
			_registeredObjects.RemoveAll((T obj) => !objectsToKeep.Contains(obj));
		}
	}
	public class TherzieCreatureManager<T, Y> : PrefabManagerBase<T>, IIndexableManager<(T Creature, IEnumerable<Y> Spawners)>, IManager, IEnumerable<(T Creature, IEnumerable<Y> Spawners)>, IEnumerable
	{
		private readonly List<Y> _registeredSpawners;

		public (T Creature, IEnumerable<Y> Spawners) this[string name]
		{
			get
			{
				T @object = GetObject(name);
				return (@object, GetSpawners(@object));
			}
		}

		public IEnumerable<(T Creature, IEnumerable<Y> Spawners)> this[params string[] names] => from name in names
			select this[name] into t
			where t.Creature != null
			select t;

		public TherzieCreatureManager(List<T> registeredCreatures, List<Y> registeredSpawners, List<GameObject> prefabs)
		{
			_registeredSpawners = registeredSpawners;
			base..ctor(registeredCreatures, prefabs);
		}

		protected override void ApplyToRemove()
		{
			base.ApplyToRemove();
			_registeredSpawners.RemoveAll((Y spawner) => _toRemove.Contains(GetCreatureName(spawner)));
		}

		protected override void ApplyToKeep()
		{
			base.ApplyToKeep();
			_registeredSpawners.RemoveAll((Y spawner) => !_toKeep.Contains(GetCreatureName(spawner)));
		}

		private string GetCreatureName(Y spawner)
		{
			return GetName((T)(AccessTools.Field(spawner.GetType(), "csCreature")?.GetValue(spawner)));
		}

		private IEnumerable<Y> GetSpawners(T creature)
		{
			return _registeredSpawners.Where((Y spawner) => GetCreatureName(spawner).Equals(GetName(creature)));
		}

		public void RemoveSpawner(Y spawner)
		{
			_registeredSpawners.Remove(spawner);
		}

		public IEnumerator<(T Creature, IEnumerable<Y> Spawners)> GetEnumerator()
		{
			return _registeredObjects.Select((T creature) => (creature, GetSpawners(creature))).GetEnumerator();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return GetEnumerator();
		}
	}
}
namespace LotusEcarlateChanges.Model.Managers.Manual
{
	public class ItemManager : ManualManagerBase<ItemWrapper>
	{
		private static readonly ItemManager s_instance;

		public static ItemManager Instance { get; } = s_instance ?? (s_instance = new ItemManager());


		private ItemManager()
		{
		}

		protected override ItemWrapper Get(string name)
		{
			ObjectDB instance = ObjectDB.instance;
			return ItemWrapper.Get((instance != null) ? instance.GetItemPrefab(name) : null);
		}

		public override void Apply()
		{
			foreach (string name in _toRemove)
			{
				GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(name);
				if (itemPrefab != null)
				{
					ObjectDB.instance.m_items.RemoveAll((GameObject prefab) => ((Object)prefab).name == name);
					ObjectDB.instance.m_itemByHash.Remove(StringExtensionMethods.GetStableHashCode(name));
					Recipe recipe = ObjectDB.instance.GetRecipe(itemPrefab.GetComponent<ItemDrop>()?.m_itemData);
					if (recipe != null)
					{
						ObjectDB.instance.m_recipes.Remove(recipe);
					}
				}
			}
			RegisterStatusEffects();
		}

		private void RegisterStatusEffects()
		{
			foreach (ItemWrapper value in _wrappersCache.Values)
			{
				RegisterStatusEffect(value.SharedData.m_attackStatusEffect);
				RegisterStatusEffect(value.SharedData.m_consumeStatusEffect);
				RegisterStatusEffect(value.SharedData.m_equipStatusEffect);
				RegisterStatusEffect(value.SharedData.m_setStatusEffect);
			}
		}

		private void RegisterStatusEffect(StatusEffect statusEffect)
		{
			if (statusEffect != null && !Object.op_Implicit((Object)(object)ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)statusEffect).name))))
			{
				ObjectDB.instance.m_StatusEffects.Add(statusEffect);
			}
		}
	}
	public abstract class ManualManagerBase<T> : IIndexableManager<T>, IManager, IEnumerable<T>, IEnumerable where T : PrefabWrapperBase
	{
		protected readonly Dictionary<string, T> _wrappersCache = new Dictionary<string, T>();

		protected readonly HashSet<string> _toRemove = new HashSet<string>();

		public T this[string name]
		{
			get
			{
				if (!_wrappersCache.TryGetValue(name, out var value))
				{
					value = Get(name);
					if (value != null)
					{
						_wrappersCache[name] = value;
					}
					else
					{
						Plugin.Logger.LogError((object)$"{GetType()} did not find any object registered with name {name}");
					}
				}
				return value;
			}
		}

		public IEnumerable<T> this[params string[] names] => from name in names
			select this[name] into p
			where p != null
			select p;

		protected abstract T Get(string name);

		public void Remove(params string[] names)
		{
			_toRemove.UnionWith(names);
		}

		public void Remove(IEnumerable<string> names)
		{
			_toRemove.UnionWith(names);
		}

		public void Keep(params string[] names)
		{
			throw new NotSupportedException();
		}

		public void Keep(IEnumerable<string> names)
		{
			throw new NotSupportedException();
		}

		public abstract void Apply();

		public IEnumerator<T> GetEnumerator()
		{
			throw new NotSupportedException();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			throw new NotSupportedException();
		}
	}
	public class PieceManager : ManualManagerBase<PieceWrapper>
	{
		private static readonly PieceManager s_instance;

		private static ItemWrapper s_hammer;

		public static PieceManager Instance { get; } = s_instance ?? (s_instance = new PieceManager());


		private PieceManager()
		{
		}

		protected override PieceWrapper Get(string name)
		{
			ZNetScene instance = ZNetScene.instance;
			return PieceWrapper.Get((instance != null) ? instance.GetPrefab(name) : null);
		}

		public override void Apply()
		{
			foreach (string name in _toRemove)
			{
				if (s_hammer == null)
				{
					s_hammer = ItemWrapper.Get(ObjectDB.instance.GetItemPrefab("Hammer"));
				}
				if (ZNetScene.instance.GetPrefab(name) == null)
				{
					continue;
				}
				ZNetScene.instance.m_prefabs.RemoveAll((GameObject prefab) => ((Object)prefab).name == name);
				ZNetScene.instance.m_nonNetViewPrefabs.RemoveAll((GameObject prefab) => ((Object)prefab).name == name);
				ZNetScene.instance.m_namedPrefabs.Remove(StringExtensionMethods.GetStableHashCode(name));
				s_hammer.Pieces.RemoveAll((GameObject prefab) => ((Object)prefab).name == name);
				foreach (List<Piece> availablePiece in s_hammer.PieceTable.m_availablePieces)
				{
					availablePiece.RemoveAll((Piece piece) => ((Object)piece).name == name);
				}
			}
		}
	}
}
namespace LotusEcarlateChanges.Model.Managers.Jotunn
{
	public class ItemManager : JotunnManagerBase, IIndexableManager<ItemWrapper>, IManager, IEnumerable<ItemWrapper>, IEnumerable
	{
		private static readonly ItemManager s_manager = ItemManager.Instance;

		private readonly IEnumerable<ItemWrapper> _items = from item in ModRegistry.GetItems(modGuid)
			select ItemWrapper.Get(item.ItemPrefab);

		public ItemWrapper this[string name]
		{
			get
			{
				CustomItem item = s_manager.GetItem(name);
				if (item == null)
				{
					Plugin.Logger.LogError((object)$"{GetType()} did not find any object registered with name {name}");
				}
				return ItemWrapper.Get((item != null) ? item.ItemPrefab : null);
			}
		}

		public IEnumerable<ItemWrapper> this[params string[] names] => from name in names
			select this[name] into w
			where w != null
			select w;

		public ItemManager(string modGuid)
		{
		}

		protected override void ApplyToRemove()
		{
			foreach (string item in s_manager.Items.Keys.Where(_toRemove.Contains).ToList())
			{
				s_manager.RemoveItem(item);
			}
		}

		protected override void ApplyToKeep()
		{
			foreach (string item in s_manager.Items.Keys.Where((string itemName) => !_toRemove.Contains(itemName)).ToList())
			{
				s_manager.RemoveItem(item);
			}
		}

		public IEnumerator<ItemWrapper> GetEnumerator()
		{
			return _items.GetEnumerator();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return GetEnumerator();
		}
	}
	public abstract class JotunnManagerBase : IManager
	{
		protected readonly HashSet<string> _toRemove = new HashSet<string>();

		protected readonly HashSet<string> _toKeep = new HashSet<string>();

		public void Remove(params string[] names)
		{
			_toRemove.UnionWith(names);
		}

		public void Remove(IEnumerable<string> names)
		{
			_toRemove.UnionWith(names);
		}

		public void Keep(params string[] names)
		{
			_toKeep.UnionWith(names);
		}

		public void Keep(IEnumerable<string> names)
		{
			_toKeep.UnionWith(names);
		}

		public void Apply()
		{
			if (_toRemove.Any() && _toKeep.Any())
			{
				Plugin.Logger.LogError((object)"Can't have both object names to remove and object names to keep at the same time.");
			}
			else if (_toRemove.Any())
			{
				ApplyToRemove();
			}
			else if (_toKeep.Any())
			{
				ApplyToKeep();
			}
		}

		protected abstract void ApplyToRemove();

		protected abstract void ApplyToKeep();
	}
	public class PieceManager : JotunnManagerBase, IIndexableManager<PieceWrapper>, IManager, IEnumerable<PieceWrapper>, IEnumerable
	{
		private static readonly PieceManager s_manager = PieceManager.Instance;

		private readonly IEnumerable<PieceWrapper> _pieces = from piece in ModRegistry.GetPieces(modGuid)
			select PieceWrapper.Get(piece.PiecePrefab);

		public PieceWrapper this[string name]
		{
			get
			{
				CustomPiece piece = s_manager.GetPiece(name);
				if (piece == null)
				{
					Plugin.Logger.LogError((object)$"{GetType()} did not find any object registered with name {name}");
				}
				return PieceWrapper.Get((piece != null) ? piece.PiecePrefab : null);
			}
		}

		public IEnumerable<PieceWrapper> this[params string[] names] => from name in names
			select this[name] into w
			where w != null
			select w;

		public PieceManager(string modGuid)
		{
		}

		protected override void ApplyToRemove()
		{
			foreach (string item in s_manager.Pieces.Keys.Where(_toRemove.Contains).ToList())
			{
				s_manager.RemovePiece(item);
			}
		}

		protected override void ApplyToKeep()
		{
			foreach (string item in s_manager.Pieces.Keys.Where((string itemName) => !_toRemove.Contains(itemName)).ToList())
			{
				s_manager.RemovePiece(item);
			}
		}

		public IEnumerator<PieceWrapper> GetEnumerator()
		{
			return _pieces.GetEnumerator();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return GetEnumerator();
		}
	}
}
namespace LotusEcarlateChanges.Model.Changes
{
	public interface IChanges
	{
		void Apply();
	}
	public abstract class JotunnBasedChangesBase : IChanges
	{
		protected LotusEcarlateChanges.Model.Managers.Jotunn.ItemManager ItemManager { get; } = (!string.IsNullOrEmpty(modGuid)) ? new LotusEcarlateChanges.Model.Managers.Jotunn.ItemManager(modGuid) : null;


		protected LotusEcarlateChanges.Model.Managers.Jotunn.PieceManager PieceManager { get; } = (!string.IsNullOrEmpty(modGuid)) ? new LotusEcarlateChanges.Model.Managers.Jotunn.PieceManager(modGuid) : null;


		protected JotunnBasedChangesBase(string modGuid = null)
		{
		}

		public void Apply()
		{
			ApplyInternal();
			ItemManager?.Apply();
			PieceManager?.Apply();
			PieceManager.OnPiecesRegistered += ApplyOnPiecesRegisteredInternal;
		}

		protected abstract void ApplyInternal();

		protected virtual void ApplyOnPiecesRegisteredInternal()
		{
		}
	}
	public abstract class ManualChangesBase : IChanges
	{
		private static readonly HashSet<ManualChangesBase> s_instances;

		protected LotusEcarlateChanges.Model.Managers.Manual.ItemManager ItemManager => LotusEcarlateChanges.Model.Managers.Manual.ItemManager.Instance;

		protected LotusEcarlateChanges.Model.Managers.Manual.PieceManager PieceManager => LotusEcarlateChanges.Model.Managers.Manual.PieceManager.Instance;

		public void Apply()
		{
			s_instances.Add(this);
			ApplyInternal();
		}

		protected virtual void ApplyInternal()
		{
		}

		protected static void ApplyOnObjectDBAwake()
		{
			if (ObjectDB.instance.GetItemPrefab("Wood") == null)
			{
				return;
			}
			foreach (ManualChangesBase s_instance in s_instances)
			{
				s_instance.ApplyOnObjectDBAwakeInternal();
			}
			LotusEcarlateChanges.Model.Managers.Manual.ItemManager.Instance.Apply();
			LotusEcarlateChanges.Model.Managers.Manual.PieceManager.Instance.Apply();
		}

		protected virtual void ApplyOnObjectDBAwakeInternal()
		{
		}

		static ManualChangesBase()
		{
			//IL_0036: 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_004b: Expected O, but got Unknown
			s_instances = new HashSet<ManualChangesBase>();
			Plugin.Harmony.Patch((MethodBase)AccessTools.Method(typeof(ObjectDB), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(ManualChangesBase), "ApplyOnObjectDBAwake", (Type[])null)
			{
				priority = -100
			}, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
		}
	}
	public abstract class StandaloneManagerBasedChangesBase : IChanges
	{
		protected List<IManager> _managers { get; } = new List<IManager>();


		protected ItemManager<T> RegisterItemManager<T>(List<T> registeredItems, List<GameObject> prefabs, List<GameObject> zNetOnlyPrefabs)
		{
			ItemManager<T> itemManager = new ItemManager<T>(registeredItems, prefabs, zNetOnlyPrefabs);
			_managers.Add(itemManager);
			return itemManager;
		}

		protected PieceManager<T> RegisterPieceManager<T>(List<T> registeredPieces, List<GameObject> piecePrefabs)
		{
			PieceManager<T> pieceManager = new PieceManager<T>(registeredPieces, piecePrefabs);
			_managers.Add(pieceManager);
			return pieceManager;
		}

		protected CreatureManager<T> RegisterCreatureManager<T>(List<T> registeredPieces, List<GameObject> prefabs)
		{
			CreatureManager<T> creatureManager = new CreatureManager<T>(registeredPieces, prefabs);
			_managers.Add(creatureManager);
			return creatureManager;
		}

		protected TherzieCreatureManager<T, Y> RegisterCreatureManager<T, Y>(List<T> registeredPieces, List<Y> registeredSpawners, List<GameObject> prefabs)
		{
			TherzieCreatureManager<T, Y> therzieCreatureManager = new TherzieCreatureManager<T, Y>(registeredPieces, registeredSpawners, prefabs);
			_managers.Add(therzieCreatureManager);
			return therzieCreatureManager;
		}

		protected LocationManager<T> RegisterLocationManager<T>(List<T> registeredLocations)
		{
			LocationManager<T> locationManager = new LocationManager<T>(registeredLocations);
			_managers.Add(locationManager);
			return locationManager;
		}

		public void Apply()
		{
			ApplyInternal();
			_managers.ForEach(delegate(IManager manager)
			{
				manager.Apply();
			});
		}

		protected abstract void ApplyInternal();
	}
}
namespace LotusEcarlateChanges.Extensions
{
	public static class GameObjectExtensions
	{
		private static readonly int s_itemLayer = LayerMask.NameToLayer("item");

		public static void FixItemLayer(this GameObject gameObject)
		{
			((Component)gameObject.GetComponentInChildren<Collider>()).gameObject.layer = s_itemLayer;
		}

		public static GameObject Find(this GameObject gameObject, string name)
		{
			return ((Component)gameObject.transform.Find(name)).gameObject;
		}

		public static void SetText(this GameObject gameObject, string text)
		{
			((TMP_Text)gameObject.GetComponentInChildren<TextMeshProUGUI>()).SetText(text);
		}
	}
	public static class GenericTypeExtensions
	{
		public static void CopyProperties<T>(this T targetObject, T sourceObject)
		{
			foreach (PropertyInfo item in from p in targetObject.GetType().GetProperties()
				where p.CanWrite
				select p)
			{
				item.SetValue(targetObject, item.GetValue(sourceObject));
			}
		}
	}
	public static class KeyCodeExtensions
	{
		public static string ToLocalizableString(this KeyCode keyCode)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			return ZInput.KeyCodeToDisplayName(keyCode);
		}
	}
	public static class KeyValuePairExtensions
	{
		public static void Deconstruct<T1, T2>(this KeyValuePair<T1, T2> tuple, out T1 key, out T2 value)
		{
			key = tuple.Key;
			value = tuple.Value;
		}
	}
}
namespace LotusEcarlateChanges.Changes
{
	public static class Constants
	{
		public static class Weapon
		{
			public static class MovementModifier
			{
				public const float Knife = 0f;

				public const float Fist = 0f;

				public const float OneHanded = -0.05f;

				public const float TwoHanded = -0.1f;

				public const float Buckler = -0.05f;

				public const float Shield = -0.05f;

				public const float TowerShield = -0.1f;
			}

			public static class ParryBonus
			{
				public const float TowerShield = 1.1f;
			}
		}

		public static class Armor
		{
			public static class VeryLight
			{
				public static class MovementModifier
				{
					public const float Helm = 0f;

					public const float Chest = -0.01f;

					public const float Legs = -0.01f;
				}

				public static class Weight
				{
					public const float Helm = 1f;

					public const float Chest = 6f;

					public const float Legs = 3f;
				}
			}

			public static class SemiLight
			{
				public static class MovementModifier
				{
					public const float Helm = 0f;

					public const float Chest = -0.04f;

					public const float Legs = -0.02f;
				}

				public static class Weight
				{
					public const float Helm = 3f;

					public const float Chest = 10f;

					public const float Legs = 5f;
				}
			}

			public static class Normal
			{
				public static class MovementModifier
				{
					public const float Helm = -0.01f;

					public const float Chest = -0.06f;

					public const float Legs = -0.03f;
				}

				public static class Weight
				{
					public const float Helm = 4f;

					public const float Chest = 12f;

					public const float Legs = 6f;
				}
			}

			public static class Heavy
			{
				public static class MovementModifier
				{
					public const float Helm = -0.02f;

					public const float Chest = -0.08f;

					public const float Legs = -0.04f;
				}

				public static class Weight
				{
					public const float Helm = 5f;

					public const float Chest = 15f;

					public const float Legs = 10f;
				}
			}

			public static class VeryHeavy
			{
				public static class MovementModifier
				{
					public const float Helm = -0.02f;

					public const float Chest = -0.1f;

					public const float Legs = -0.06f;
				}

				public static class Weight
				{
					public const float Helm = 6f;

					public const float Chest = 18f;

					public const float Legs = 12f;
				}
			}
		}
	}
}
namespace LotusEcarlateChanges.Changes.StandaloneManagerBased
{
	public class ClayBuildPieces : StandaloneManagerBasedChangesBase
	{
		protected override void ApplyInternal()
		{
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Expected O, but got Unknown
			PieceManager<BuildPiece> pieceManager = RegisterPieceManager(BuildPiece.registeredPieces, PiecePrefabManager.piecePrefabs);
			pieceManager.Remove("BFP_ClayArmorStand", "BFP_ClayChest");
			foreach (var item3 in pieceManager)
			{
				BuildPiece item = item3.BuildPiece;
				if (item.Category.custom == "ClayBuildPieces")
				{
					item.Category.Set((BuildPieceCategory)2);
				}
				if ((int)item.Category.Category == 0)
				{
					item.Category.Set((BuildPieceCategory)4);
				}
			}
			BuildPiece item2 = pieceManager["BCP_ClayCollector"].BuildPiece;
			item2.Category.Set((BuildPieceCategory)1);
			item2.RequiredItems.Requirements.Clear();
			item2.RequiredItems.Add("Stone", 20, true);
			item2.RequiredItems.Add("Bronze", 10, true);
			item2.RequiredItems.Add("FineWood", 20, true);
			item2.RequiredItems.Add("SurtlingCore", 5, true);
			item2.RequiredItems.Add("BFP_Clay", 30, true);
			string[] names = new string[3] { "BFP_ClayCorgi", "BFP_ClayDeer", "BFP_ClayHare" };
			foreach (var item4 in pieceManager[names])
			{
				item4.Wrapper.Comfort.Value = 0;
			}
			Plugin.Harmony.Patch((MethodBase)AccessTools.Method(typeof(SetupPrefabs), "SetupArmorStand", (Type[])null, (Type[])null), new HarmonyMethod(GetType(), "NoOpPrefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
		}

		private static void NoOpPrefix(ref bool __runOriginal)
		{
			__runOriginal = false;
		}
	}
	public class CoreWoodPieces : StandaloneManagerBasedChangesBase
	{
		protected override void ApplyInternal()
		{
			PieceManager<BuildPiece> pieceManager = RegisterPieceManager(BuildPiece.registeredPieces, PiecePrefabManager.piecePrefabs);
			pieceManager.Remove("BCW_CoreWood_Fence1", "BCW_CoreWood_Fence2", "BCW_CoreWood_FenceGate", "BCW_CoreWood_FencePillar");
			HashSet<string> hashSet = new HashSet<string> { "BCW_CoreWood_DrawBridgeNarrow", "BCW_CoreWood_DrawBridgeNarrowTall", "BCW_CoreWood_DrawBridgeWide", "BCW_CoreWood_DrawBridgeWideTall" };
			foreach (var item2 in pieceManager)
			{
				BuildPiece item = item2.BuildPiece;
				if (hashSet.Contains(((Object)item.Prefab).name))
				{
					item.Category.Set((BuildPieceCategory)2);
				}
				else if (item.Category.custom == "CoreWoodFence")
				{
					item.Category.Set((BuildPieceCategory)0);
				}
				else if (item.Category.custom == "CoreWoodPieces")
				{
					item.Category.Set((BuildPieceCategory)2);
				}
			}
		}
	}
	public class DarkWoodFurnitures : StandaloneManagerBasedChangesBase
	{
		protected override void ApplyInternal()
		{
			PieceManager<BuildPiece> pieceManager = RegisterPieceManager(BuildPiece.registeredPieces, PiecePrefabManager.piecePrefabs);
			foreach (var item4 in pieceManager)
			{
				item4.BuildPiece.Category.Set((BuildPieceCategory)4);
			}
			string[] names = new string[3] { "BDWF_Chair6", "BDWF_Chair7", "BDWF_MiniTable1" };
			foreach (var item5 in pieceManager[names])
			{
				item5.Wrapper.Comfort.Value = 2;
			}
			string[] names2 = new string[2] { "BDWF_Bed2", "BDWF_Bed3" };
			foreach (var item6 in pieceManager[names2])
			{
				item6.Wrapper.Comfort.Value = 1;
			}
			(string, int, int)[] array = new(string, int, int)[15]
			{
				("BDWF_Cabinet1", 2, 4),
				("BDWF_Cabinet2", 2, 4),
				("BDWF_Cabinet3", 1, 4),
				("BDWF_Cupboard", 3, 3),
				("BDWF_Drawer1", 3, 3),
				("BDWF_Drawer2", 3, 3),
				("BDWF_Drawer3", 2, 4),
				("BDWF_Drawer4", 2, 2),
				("BDWF_Drawer5", 3, 1),
				("BDWF_Drawer6", 3, 1),
				("BDWF_Drawer7", 3, 1),
				("BDWF_Drawer8", 3, 1),
				("BDWF_IronChest", 7, 4),
				("BDWF_LongCrate", 8, 3),
				("BDWF_Table8", 2, 1)
			};
			for (int i = 0; i < array.Length; i++)
			{
				(string, int, int) tuple = array[i];
				string item = tuple.Item1;
				int item2 = tuple.Item2;
				int item3 = tuple.Item3;
				Container component = pieceManager[item].Wrapper.Prefab.GetComponent<Container>();
				component.m_width = item2;
				component.m_height = item3;
			}
			string[] names3 = new string[1] { "BDWF_Table8" };
			foreach (var item7 in pieceManager[names3])
			{
				Object.Destroy((Object)(object)item7.Wrapper.Prefab.GetComponent<Container>());
			}
		}
	}
	public class FineWoodBuildPieces : StandaloneManagerBasedChangesBase
	{
		protected override void ApplyInternal()
		{
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			PieceManager<BuildPiece> pieceManager = RegisterPieceManager(BuildPiece.registeredPieces, PiecePrefabManager.piecePrefabs);
			pieceManager.Remove("BFP_FenceGate", "BFP_FencePillar1", "BFP_FencePillar2", "BFP_FencePillar3", "BFP_FencePillar4", "BFP_StepLadder1", "BFP_StepLadder2");
			foreach (var item3 in pieceManager)
			{
				BuildPiece item = item3.BuildPiece;
				if ((int)item.Category.Category == 0)
				{
					item.Category.Set((BuildPieceCategory)4);
				}
				else if (item.Category.custom == "FineWoodFence")
				{
					item.Category.Set((BuildPieceCategory)0);
				}
				else if (item.Category.custom == "FineWoodPieces")
				{
					item.Category.Set((BuildPieceCategory)2);
				}
			}
			pieceManager["BFP_HeavyGate"].BuildPiece.Crafting.Set((CraftingTable)3);
			string[] names = new string[9] { "BFP_StoneLightPost", "BFP_StoneRoof26", "BFP_StoneRoof45", "BFP_StoneRoofICorner26", "BFP_StoneRoofICorner45", "BFP_StoneRoofOCorner26", "BFP_StoneRoofOCorner45", "BFP_StoneRoofTop26", "BFP_StoneRoofTop45" };
			foreach (var item4 in pieceManager[names])
			{
				BuildPiece item2 = item4.BuildPiece;
				item2.Crafting.Set((CraftingTable)5);
				item2.Category.Set((BuildPieceCategory)3);
			}
		}
	}
	public class FineWoodFurnitures : StandaloneManagerBasedChangesBase
	{
		protected override void ApplyInternal()
		{
			//IL_03f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0437: Unknown result type (might be due to invalid IL or missing references)
			//IL_043e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0445: Unknown result type (might be due to invalid IL or missing references)
			//IL_0419: Unknown result type (might be due to invalid IL or missing references)
			//IL_0422: Unknown result type (might be due to invalid IL or missing references)
			PieceManager<BuildPiece> pieceManager = RegisterPieceManager(BuildPiece.registeredPieces, PiecePrefabManager.piecePrefabs);
			pieceManager.Remove("BFP_ArmorStand", "BFP_WoodenArmorStand");
			foreach (var item6 in pieceManager)
			{
				item6.BuildPiece.Category.Set((BuildPieceCategory)4);
			}
			string[] names = new string[5] { "BFP_FineWoodChair6", "BFP_FineWoodChair7", "BFP_MiniTable1", "BFP_LoxBed", "BFP_LoxDoubleBed" };
			foreach (var item7 in pieceManager[names])
			{
				item7.Wrapper.Comfort.Value = 2;
			}
			string[] names2 = new string[2] { "BFP_FineWoodBed2", "BFP_LeatherBed" };
			foreach (var item8 in pieceManager[names2])
			{
				item8.Wrapper.Comfort.Value = 1;
			}
			string[] names3 = new string[19]
			{
				"BFP_Plant1", "BFP_Plant2", "BFP_Plant3", "BFP_Plant4", "BFP_Plant5", "BFP_Plant6", "BFP_Plant7", "BFP_Plant8", "BFP_Plant9", "BFP_Plant10",
				"BFP_Plant11", "BFP_Plant12", "BFP_Plant13", "BFP_Plant14", "BFP_Plant15", "BFP_Plant16", "BFP_Plant17", "BFP_Plant18", "BFP_FineWoodCrib"
			};
			foreach (var item9 in pieceManager[names3])
			{
				item9.Wrapper.Comfort.Value = 0;
			}
			(string, int, int, int)[] array = new(string, int, int, int)[16]
			{
				("BFP_BronzeFrameChest", 6, 3, 12),
				("BFP_Cabinet1", 2, 4, 12),
				("BFP_Cabinet2", 2, 4, 12),
				("BFP_Cabinet3", 1, 2, 8),
				("BFP_Cabinet4", 3, 3, 16),
				("BFP_Cabinet5", 3, 3, 12),
				("BFP_Cabinet6", 2, 4, 10),
				("BFP_Cabinet7", 3, 4, 12),
				("BFP_Cupboard", 3, 3, 16),
				("BFP_FineWoodBasket", 2, 2, 6),
				("BFP_FineWoodDrawer1", 2, 2, 8),
				("BFP_FineWoodDrawer2", 3, 1, 8),
				("BFP_FineWoodDrawer3", 3, 1, 8),
				("BFP_FineWoodDrawer4", 3, 1, 10),
				("BFP_FineWoodDrawer5", 3, 1, 8),
				("BFP_LongCrate", 7, 2, 12)
			};
			for (int i = 0; i < array.Length; i++)
			{
				(string, int, int, int) tuple = array[i];
				string item = tuple.Item1;
				int item2 = tuple.Item2;
				int item3 = tuple.Item3;
				int item4 = tuple.Item4;
				(BuildPiece BuildPiece, PieceWrapper Wrapper) tuple2 = pieceManager[item];
				BuildPiece item5 = tuple2.BuildPiece;
				Container component = tuple2.Wrapper.Prefab.GetComponent<Container>();
				component.m_width = item2;
				component.m_height = item3;
				Requirement[] array2 = item5.RequiredItems.Requirements.ToArray();
				item5.RequiredItems.Requirements.Clear();
				Requirement[] array3 = array2;
				foreach (Requirement val in array3)
				{
					if (val.itemName == "FineWood")
					{
						item5.RequiredItems.Add(val.itemName, item4, val.recover);
					}
					else
					{
						item5.RequiredItems.Add(val.itemName, val.amount, val.recover);
					}
				}
			}
			string[] names4 = new string[1] { "BFP_FineWoodTable8" };
			foreach (var item10 in pieceManager[names4])
			{
				Object.Destroy((Object)(object)item10.Wrapper.Prefab.GetComponent<Container>());
			}
		}
	}
	public class Monstrum : StandaloneManagerBasedChangesBase
	{
		private TherzieCreatureManager<Creature, Spawner> creatureManager;

		protected override void ApplyInternal()
		{
			//IL_045f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0464: Unknown result type (might be due to invalid IL or missing references)
			//IL_057c: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_060f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0614: Unknown result type (might be due to invalid IL or missing references)
			//IL_0678: Unknown result type (might be due to invalid IL or missing references)
			//IL_067d: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0719: Unknown result type (might be due to invalid IL or missing references)
			//IL_0746: Unknown result type (might be due to invalid IL or missing references)
			//IL_074b: Unknown result type (might be due to invalid IL or missing references)
			ItemManager<Item> itemManager = RegisterItemManager(Item.registeredItems, PrefabManager.prefabs, PrefabManager.ZnetOnlyPrefabs);
			PieceManager<BuildPiece> pieceManager = RegisterPieceManager(BuildPiece.registeredPieces, PiecePrefabManager.piecePrefabs);
			creatureManager = RegisterCreatureManager(Creature.registeredCreatures, Creature.registeredSpawners, PrefabManager.prefabs);
			var (val, pieceWrapper) = pieceManager["rug_Fox_TW"];
			val.RequiredItems.Requirements.Clear();
			val.RequiredItems.Add("FoxPelt_TW", 4, true);
			val.Category.Set((BuildPieceCategory)4);
			pieceWrapper.Comfort.Value = 1;
			pieceWrapper.Comfort.Group = (ComfortGroup)6;
			var (val2, pieceWrapper2) = pieceManager["rug_Rotten_TW"];
			val2.RequiredItems.Requirements.Clear();
			val2.RequiredItems.Add("RottenPelt_TW", 4, true);
			val2.Category.Set((BuildPieceCategory)4);
			pieceWrapper2.Comfort = pieceWrapper.Comfort;
			var (val3, pieceWrapper3) = pieceManager["rug_BlackBear_TW"];
			val3.RequiredItems.Requirements.Clear();
			val3.RequiredItems.Add("BlackBearPelt_TW", 4, true);
			val3.Category.Set((BuildPieceCategory)4);
			pieceWrapper3.Comfort = pieceWrapper.Comfort;
			var (val4, pieceWrapper4) = pieceManager["rug_GrizzlyBear_TW"];
			val4.RequiredItems.Requirements.Clear();
			val4.RequiredItems.Add("GrizzlyBearPelt_TW", 4, true);
			val4.Category.Set((BuildPieceCategory)4);
			pieceWrapper4.Comfort = pieceWrapper.Comfort;
			Item item = itemManager["SaddleBoar_TW"].Item;
			item.Crafting.Stations.Clear();
			item.Crafting.Add((CraftingTable)2, 2);
			item.RequiredItems.Requirements.Clear();
			item.RequiredItems.Add("RazorbackLeather_TW", 10, 0);
			item.RequiredItems.Add("RazorbackTusk_TW", 5, 0);
			item.RequiredItems.Add("Bronze", 10, 0);
			Item item2 = itemManager["SaddleBear_TW"].Item;
			item2.Crafting.Stations.Clear();
			item2.Crafting.Add((CraftingTable)2, 3);
			item2.RequiredItems.Requirements.Clear();
			item2.RequiredItems.Add("BlackBearPelt_TW", 5, 0);
			item2.RequiredItems.Add("GrizzlyBearPelt_TW", 3, 0);
			item2.RequiredItems.Add("Silver", 10, 0);
			Item item3 = itemManager["SaddleProwler_TW"].Item;
			item3.Crafting.Stations.Clear();
			item3.Crafting.Add((CraftingTable)2, 4);
			item3.RequiredItems.Requirements.Clear();
			item3.RequiredItems.Add("ProwlerFang_TW", 2, 0);
			item3.RequiredItems.Add("LinenThread", 20, 0);
			item3.RequiredItems.Add("LoxPelt", 4, 0);
			item3.RequiredItems.Add("BlackMetal", 10, 0);
			ItemWrapper item4 = itemManager["CookedBearSteak_TW"].Wrapper;
			item4.Food.Stamina = 13f;
			item4.Food.Duration = 1200f;
			ItemWrapper item5 = itemManager["MixedGrill_TW"].Wrapper;
			item5.Food.Health = 70f;
			item5.Food.Stamina = 23f;
			creatureManager["BossAsmodeus_TW"].Creature.Drops.drops.Remove("KnifeViper_TW");
			creatureManager["BossSvalt_TW"].Creature.Drops.drops.Remove("DualAxeDemonic_TW");
			creatureManager["BossVrykolathas_TW"].Creature.Drops.drops.Remove("ScytheVampiric_TW");
			creatureManager["BossVrykolathas_TW"].Creature.Drops.drops.Remove("DualScytheBloodthirst_TW");
			creatureManager["Fox_TW"].Creature.Drops["FoxMeat_TW"].DropChance = 100f;
			creatureManager["Razorback_TW"].Creature.Drops["RawMeat"].Amount = new Range(1f, 2f);
			creatureManager["Razorback_TW"].Creature.Drops["RawMeat"].DropChance = 100f;
			creatureManager["BlackBear_TW"].Creature.Drops["BearSteak_TW"].DropChance = 100f;
			creatureManager["GrizzlyBear_TW"].Creature.Drops["GrizzlyBearPelt_TW"].DropChance = 100f;
			creatureManager["GrizzlyBear_TW"].Creature.Drops["BearSteak_TW"].DropChance = 100f;
			creatureManager["Prowler_TW"].Creature.Drops["ProwlerFang_TW"].DropChance = 100f;
			List<Spawner> list = creatureManager["Fox_TW"].Spawners.ToList();
			Spawner val5 = list[0];
			Spawner obj = list[1];
			Spawner obj2 = val5;
			obj2.SpecificSpawnTime = (SpawnTime)0;
			obj2.CheckSpawnInterval = 600;
			obj2.SpawnChance = 10f;
			obj2.Maximum = 1;
			obj2.CanHaveStars = true;
			obj.SpecificSpawnTime = (SpawnTime)1;
			obj.CheckSpawnInterval = 400;
			obj.SpawnChance = 20f;
			obj.Maximum = 1;
			obj.CanHaveStars = true;
			Spawner obj3 = creatureManager["Razorback_TW"].Spawners.Single();
			obj3.CheckSpawnInterval = 150;
			obj3.SpawnChance = 40f;
			obj3.Maximum = 3;
			obj3.GroupSize = new Range(1f, 2f);
			Spawner obj4 = MergeDualSpawners("BlackBear_TW");
			obj4.CheckSpawnInterval = 900;
			obj4.SpawnChance = 10f;
			Spawner obj5 = MergeDualSpawners("Crawler_TW");
			obj5.CheckSpawnInterval = 900;
			obj5.SpawnChance = 10f;
			creatureManager["ObsidianGolem_TW"].Creature.RequiredAltitude = new Range(120f, 1000f);
			creatureManager["ObsidianGolem_TW"].Spawners.Single().CanHaveStars = false;
			Spawner obj6 = MergeDualSpawners("GrizzlyBear_TW");
			obj6.CheckSpawnInterval = 900;
			obj6.SpawnChance = 10f;
			List<Spawner> list2 = creatureManager["Prowler_TW"].Spawners.ToList();
			val5 = list2[0];
			Spawner obj7 = list2[1];
			Spawner obj8 = val5;
			obj8.SpecificSpawnTime = (SpawnTime)0;
			obj8.CheckSpawnInterval = 900;
			obj8.SpawnChance = 10f;
			obj8.Maximum = 1;
			obj8.CanHaveStars = false;
			obj7.SpecificSpawnTime = (SpawnTime)1;
			obj7.CheckSpawnInterval = 600;
			obj7.SpawnChance = 20f;
			obj7.Maximum = 2;
			obj7.GroupSize = new Range(1f, 2f);
			obj7.CanHaveStars = true;
		}

		private Spawner MergeDualSpawners(string creatureName)
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			Spawner spawner = creatureManager[creatureName].Spawners.First();
			creatureManager.RemoveSpawner(spawner);
			Spawner obj = creatureManager[creatureName].Spawners.Single();
			obj.SpecificSpawnTime = (SpawnTime)2;
			obj.CanHaveStars = true;
			return obj;
		}
	}
	public class RefinedStonePieces : StandaloneManagerBasedChangesBase
	{
		protected override void ApplyInternal()
		{
			PieceManager<BuildPiece> pieceManager = RegisterPieceManager(BuildPiece.registeredPieces, PiecePrefabManager.piecePrefabs);
			foreach (var item in pieceManager)
			{
				item.BuildPiece.Category.Set((BuildPieceCategory)3);
			}
			string[] names = new string[3] { "BRP_StoneCorgi", "BRP_StoneDeer", "BRP_StoneHare" };
			foreach (var (val, pieceWrapper) in pieceManager[names])
			{
				val.Category.Set((BuildPieceCategory)4);
				pieceWrapper.Comfort.Value = 0;
			}
			pieceManager["BRP_RefinedStone_Stack"].BuildPiece.Category.Set((BuildPieceCategory)0);
			pieceManager["BRP_RefinedStone_Hearth"].BuildPiece.Category.Set((BuildPieceCategory)4);
			pieceManager["BRP_StoneChest"].BuildPiece.Category.Set((BuildPieceCategory)4);
		}
	}
	public class SimpleElevators : StandaloneManagerBasedChangesBase
	{
		protected override void ApplyInternal()
		{
			foreach (var item2 in RegisterPieceManager(BuildPiece.registeredPieces, PiecePrefabManager.piecePrefabs))
			{
				BuildPiece item = item2.BuildPiece;
				item.Category.Set((BuildPieceCategory)3);
				item.Crafting.Set((CraftingTable)7);
			}
		}
	}
	public class SouthsilArmor : StandaloneManagerBasedChangesBase
	{
		private static readonly List<Action> s_onLocalizationAddedCallbacks = new List<Action>();

		protected override void ApplyInternal()
		{
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b20: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b34: Unknown result type (might be due to invalid IL or missing references)
			//IL_1023: Unknown result type (might be due to invalid IL or missing references)
			//IL_102b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1030: Unknown result type (might be due to invalid IL or missing references)
			//IL_1038: Unknown result type (might be due to invalid IL or missing references)
			//IL_103d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1543: Unknown result type (might be due to invalid IL or missing references)
			//IL_1556: Unknown result type (might be due to invalid IL or missing references)
			//IL_155b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1575: Unknown result type (might be due to invalid IL or missing references)
			//IL_157d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1582: Unknown result type (might be due to invalid IL or missing references)
			//IL_158a: Unknown result type (might be due to invalid IL or missing references)
			//IL_158f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a58: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a6c: Unknown result type (might be due to invalid IL or missing references)
			//IL_2023: Unknown result type (might be due to invalid IL or missing references)
			//IL_2037: Unknown result type (might be due to invalid IL or missing references)
			//IL_249a: Unknown result type (might be due to invalid IL or missing references)
			//IL_24ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_24b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_2997: Unknown result type (might be due to invalid IL or missing references)
			//IL_29ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_2e8c: Unknown result type (might be due to invalid IL or missing references)
			//IL_2e9f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2ea4: Unknown result type (might be due to invalid IL or missing references)
			//IL_3408: Unknown result type (might be due to invalid IL or missing references)
			//IL_341b: Unknown result type (might be due to invalid IL or missing references)
			//IL_3420: Unknown result type (might be due to invalid IL or missing references)
			//IL_39be: Unknown result type (might be due to invalid IL or missing references)
			//IL_39d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_3f40: Unknown result type (might be due to invalid IL or missing references)
			//IL_3f54: Unknown result type (might be due to invalid IL or missing references)
			//IL_3f6e: Unknown result type (might be due to invalid IL or missing references)
			//IL_3f77: Unknown result type (might be due to invalid IL or missing references)
			//IL_3f7f: Unknown result type (might be due to invalid IL or missing references)
			//IL_3f84: Unknown result type (might be due to invalid IL or missing references)
			ItemManager<Item> itemManager = RegisterItemManager(Item.registeredItems, PrefabManager.prefabs, PrefabManager.ZnetOnlyPrefabs);
			LocalizationManager.OnLocalizationAdded += onLocalizationAddedCallback;
			itemManager.Keep("chiefhelmboar", "chiefhelmdeer", "chiefchest", "chieflegs");
			var (chieftainHelmBoar, itemWrapper) = itemManager["chiefhelmboar"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				chieftainHelmBoar.Name.Alias("$SouthsilArmor_ChieftainHelmBoar_Name");
				chieftainHelmBoar.Description.Alias("$SouthsilArmor_ChieftainHelmBoar_Description");
			});
			chieftainHelmBoar.Crafting.Stations.Clear();
			chieftainHelmBoar.Crafting.Add((CraftingTable)2, 2);
			chieftainHelmBoar.RequiredItems.Requirements.Clear();
			chieftainHelmBoar.RequiredItems.Add("DeerHide", 2, 0);
			chieftainHelmBoar.RequiredItems.Add("LeatherScraps", 2, 0);
			chieftainHelmBoar.RequiredItems.Add("FoxPelt_TW", 1, 0);
			chieftainHelmBoar.RequiredItems.Add("TrophyBoar", 2, 0);
			chieftainHelmBoar.RequiredUpgradeItems.Requirements.Clear();
			chieftainHelmBoar.RequiredUpgradeItems.Add("DeerHide", 1, 0);
			chieftainHelmBoar.RequiredUpgradeItems.Add("LeatherScraps", 1, 0);
			itemWrapper.Armor.ArmorBase = 2f;
			itemWrapper.Armor.ArmorPerLevel = 2f;
			itemWrapper.Armor.MovementModifier = -0.01f;
			itemWrapper.Armor.Weight = 4f;
			SE_Stats equipEffect = itemWrapper.Armor.EquipEffect;
			((StatusEffect)equipEffect).m_name = "$SouthsilArmor_ChieftainHelmBoar_Effect_Name";
			((StatusEffect)equipEffect).m_tooltip = "$SouthsilArmor_ChieftainHelmBoar_Effect_Tooltip";
			equipEffect.m_healthRegenMultiplier = 1.25f;
			equipEffect.m_staminaRegenMultiplier = 1f;
			equipEffect.m_skillLevel = (SkillType)6;
			equipEffect.m_skillLevelModifier = 10f;
			chieftainHelmBoar.Prefab.FixItemLayer();
			var (chieftainHelmDeer, itemWrapper2) = itemManager["chiefhelmdeer"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				chieftainHelmDeer.Name.Alias("$SouthsilArmor_ChieftainHelmDeer_Name");
				chieftainHelmDeer.Description.Alias("$SouthsilArmor_ChieftainHelmDeer_Description");
			});
			chieftainHelmDeer.Crafting.Stations.Clear();
			chieftainHelmDeer.Crafting.Add((CraftingTable)2, 2);
			chieftainHelmDeer.RequiredItems.Requirements.Clear();
			chieftainHelmDeer.RequiredItems.Add("DeerHide", 2, 0);
			chieftainHelmDeer.RequiredItems.Add("LeatherScraps", 2, 0);
			chieftainHelmDeer.RequiredItems.Add("FoxPelt_TW", 1, 0);
			chieftainHelmDeer.RequiredItems.Add("TrophyDeer", 2, 0);
			chieftainHelmDeer.RequiredUpgradeItems.Requirements.Clear();
			chieftainHelmDeer.RequiredUpgradeItems.Add("DeerHide", 1, 0);
			chieftainHelmDeer.RequiredUpgradeItems.Add("LeatherScraps", 1, 0);
			itemWrapper2.Armor.ArmorBase = 2f;
			itemWrapper2.Armor.ArmorPerLevel = 2f;
			itemWrapper2.Armor.MovementModifier = -0.01f;
			itemWrapper2.Armor.Weight = 4f;
			SE_Stats equipEffect2 = itemWrapper2.Armor.EquipEffect;
			((StatusEffect)equipEffect2).m_name = "$SouthsilArmor_ChieftainHelmDeer_Effect_Name";
			((StatusEffect)equipEffect2).m_tooltip = "$SouthsilArmor_ChieftainHelmDeer_Effect_Tooltip";
			equipEffect2.m_speedModifier = 0f;
			equipEffect2.m_runStaminaDrainModifier = 0f;
			equipEffect2.m_staminaRegenMultiplier = 1.5f;
			equipEffect2.m_skillLevel = (SkillType)102;
			equipEffect2.m_skillLevelModifier = 10f;
			chieftainHelmDeer.Prefab.FixItemLayer();
			var (chieftainChest, itemWrapper3) = itemManager["chiefchest"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				chieftainChest.Name.Alias("$SouthsilArmor_ChieftainChest_Name");
				chieftainChest.Description.Alias("$SouthsilArmor_ChieftainChest_Description");
			});
			chieftainChest.Crafting.Stations.Clear();
			chieftainChest.Crafting.Add((CraftingTable)2, 2);
			chieftainChest.RequiredItems.Requirements.Clear();
			chieftainChest.RequiredItems.Add("DeerHide", 6, 0);
			chieftainChest.RequiredItems.Add("FoxPelt_TW", 3, 0);
			chieftainChest.RequiredItems.Add("ShieldWood", 1, 0);
			chieftainChest.RequiredItems.Add("Feathers", 5, 0);
			chieftainChest.RequiredUpgradeItems.Requirements.Clear();
			chieftainChest.RequiredUpgradeItems.Add("DeerHide", 3, 0);
			chieftainChest.RequiredUpgradeItems.Add("LeatherScraps", 3, 0);
			chieftainChest.RequiredUpgradeItems.Add("FoxPelt_TW", 1, 0);
			itemWrapper3.Armor.ArmorBase = 6f;
			itemWrapper3.Armor.ArmorPerLevel = 3f;
			itemWrapper3.Armor.MovementModifier = -0.06f;
			itemWrapper3.Armor.Weight = 12f;
			var (chieftainLegs, itemWrapper4) = itemManager["chieflegs"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				chieftainLegs.Name.Alias("$SouthsilArmor_ChieftainLegs_Name");
				chieftainLegs.Description.Alias("$SouthsilArmor_ChieftainLegs_Description");
			});
			chieftainLegs.Crafting.Stations.Clear();
			chieftainLegs.Crafting.Add((CraftingTable)2, 2);
			chieftainLegs.RequiredItems.Requirements.Clear();
			chieftainLegs.RequiredItems.Add("DeerHide", 4, 0);
			chieftainLegs.RequiredItems.Add("FoxPelt_TW", 2, 0);
			chieftainLegs.RequiredItems.Add("KnifeFlint", 2, 0);
			chieftainLegs.RequiredItems.Add("AxeFlint", 1, 0);
			chieftainLegs.RequiredUpgradeItems.Requirements.Clear();
			chieftainLegs.RequiredUpgradeItems.Add("DeerHide", 2, 0);
			chieftainLegs.RequiredUpgradeItems.Add("LeatherScraps", 2, 0);
			itemWrapper4.Armor.ArmorBase = 4f;
			itemWrapper4.Armor.ArmorPerLevel = 3f;
			itemWrapper4.Armor.MovementModifier = -0.03f;
			itemWrapper4.Armor.Weight = 6f;
			itemManager.Keep("heavybronzehelm", "heavybronzechest", "heavybronzelegs");
			var (battleswineHelm, itemWrapper5) = itemManager["heavybronzehelm"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				battleswineHelm.Name.Alias("$SouthsilArmor_BattleswineHelm_Name");
				battleswineHelm.Description.Alias("$SouthsilArmor_BattleswineHelm_Description");
			});
			battleswineHelm.Crafting.Stations.Clear();
			battleswineHelm.Crafting.Add((CraftingTable)4, 2);
			battleswineHelm.RequiredItems.Requirements.Clear();
			battleswineHelm.RequiredItems.Add("Bronze", 3, 0);
			battleswineHelm.RequiredItems.Add("RazorbackLeather_TW", 2, 0);
			battleswineHelm.RequiredItems.Add("BlackBearPelt_TW", 1, 0);
			battleswineHelm.RequiredItems.Add("RazorbackTusk_TW", 2, 0);
			battleswineHelm.RequiredUpgradeItems.Requirements.Clear();
			battleswineHelm.RequiredUpgradeItems.Add("Bronze", 2, 0);
			battleswineHelm.RequiredUpgradeItems.Add("RazorbackLeather_TW", 1, 0);
			battleswineHelm.RequiredUpgradeItems.Add("DeerHide", 2, 0);
			battleswineHelm.RequiredUpgradeItems.Add("RazorbackTusk_TW", 1, 0);
			itemWrapper5.Armor.ArmorBase = 6f;
			itemWrapper5.Armor.ArmorPerLevel = 3f;
			itemWrapper5.Armor.MovementModifier = -0.02f;
			itemWrapper5.Armor.Weight = 6f;
			battleswineHelm.Prefab.FixItemLayer();
			var (battleswineChest, itemWrapper6) = itemManager["heavybronzechest"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				battleswineChest.Name.Alias("$SouthsilArmor_BattleswineChest_Name");
				battleswineChest.Description.Alias("$SouthsilArmor_BattleswineChest_Description");
			});
			battleswineChest.Crafting.Stations.Clear();
			battleswineChest.Crafting.Add((CraftingTable)4, 2);
			battleswineChest.RequiredItems.Requirements.Clear();
			battleswineChest.RequiredItems.Add("Bronze", 9, 0);
			battleswineChest.RequiredItems.Add("RazorbackLeather_TW", 4, 0);
			battleswineChest.RequiredItems.Add("BlackBearPelt_TW", 3, 0);
			battleswineChest.RequiredItems.Add("TrophyRazorback_TW", 1, 0);
			battleswineChest.RequiredUpgradeItems.Requirements.Clear();
			battleswineChest.RequiredUpgradeItems.Add("Bronze", 5, 0);
			battleswineChest.RequiredUpgradeItems.Add("RazorbackLeather_TW", 1, 0);
			battleswineChest.RequiredUpgradeItems.Add("BlackBearPelt_TW", 1, 0);
			itemWrapper6.Armor.ArmorBase = 18f;
			itemWrapper6.Armor.ArmorPerLevel = 4f;
			itemWrapper6.Armor.MovementModifier = -0.1f;
			itemWrapper6.Armor.Weight = 18f;
			var (battleswineLegs, itemWrapper7) = itemManager["heavybronzelegs"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				battleswineLegs.Name.Alias("$SouthsilArmor_BattleswineLegs_Name");
				battleswineLegs.Description.Alias("$SouthsilArmor_BattleswineLegs_Description");
			});
			battleswineLegs.Crafting.Stations.Clear();
			battleswineLegs.Crafting.Add((CraftingTable)4, 2);
			battleswineLegs.RequiredItems.Requirements.Clear();
			battleswineLegs.RequiredItems.Add("Bronze", 6, 0);
			battleswineLegs.RequiredItems.Add("RazorbackLeather_TW", 2, 0);
			battleswineLegs.RequiredItems.Add("BlackBearPelt_TW", 2, 0);
			battleswineLegs.RequiredUpgradeItems.Requirements.Clear();
			battleswineLegs.RequiredUpgradeItems.Add("Bronze", 4, 0);
			battleswineLegs.RequiredUpgradeItems.Add("RazorbackLeather_TW", 1, 0);
			battleswineLegs.RequiredUpgradeItems.Add("DeerHide", 4, 0);
			itemWrapper7.Armor.ArmorBase = 12f;
			itemWrapper7.Armor.ArmorPerLevel = 3f;
			itemWrapper7.Armor.MovementModifier = -0.06f;
			itemWrapper7.Armor.Weight = 12f;
			SE_Stats val = ScriptableObject.CreateInstance<SE_Stats>();
			((StatusEffect)val).m_name = "$SouthsilArmor_BattleswineSet_Effect_Name";
			((StatusEffect)val).m_tooltip = "$SouthsilArmor_BattleswineSet_Effect_Tooltip";
			((StatusEffect)val).m_icon = itemWrapper5.Icon;
			val.m_skillLevel = (SkillType)5;
			val.m_skillLevelModifier = 15f;
			val.m_skillLevel2 = (SkillType)4;
			val.m_skillLevelModifier2 = 15f;
			itemWrapper5.Set.Effect = val;
			itemWrapper5.Set.Name = "Battleswine";
			itemWrapper5.Set.Size = 3;
			itemWrapper6.Set = itemWrapper5.Set;
			itemWrapper7.Set = itemWrapper5.Set;
			itemManager.Keep("swamphelm", "swampchest", "swamplegs");
			var (draugrHelm, itemWrapper8) = itemManager["swamphelm"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				draugrHelm.Name.Alias("$SouthsilArmor_DraugrHelm_Name");
				draugrHelm.Description.Alias("$SouthsilArmor_DraugrHelm_Description");
			});
			draugrHelm.Crafting.Stations.Clear();
			draugrHelm.Crafting.Add((CraftingTable)4, 3);
			draugrHelm.RequiredItems.Requirements.Clear();
			draugrHelm.RequiredItems.Add("Iron", 15, 0);
			draugrHelm.RequiredItems.Add("RottenPelt_TW", 2, 0);
			draugrHelm.RequiredItems.Add("WitheredBone", 2, 0);
			draugrHelm.RequiredItems.Add("TrophyCrawler_TW", 1, 0);
			draugrHelm.RequiredUpgradeItems.Requirements.Clear();
			draugrHelm.RequiredUpgradeItems.Add("Iron", 4, 0);
			draugrHelm.RequiredUpgradeItems.Add("RottenPelt_TW", 1, 0);
			draugrHelm.RequiredUpgradeItems.Add("WitheredBone", 1, 0);
			itemWrapper8.Armor.ArmorBase = 9f;
			itemWrapper8.Armor.ArmorPerLevel = 3f;
			itemWrapper8.Armor.MovementModifier = -0.02f;
			itemWrapper8.Armor.Weight = 6f;
			draugrHelm.Prefab.FixItemLayer();
			var (draugrChest, itemWrapper9) = itemManager["swampchest"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				draugrChest.Name.Alias("$SouthsilArmor_DraugrChest_Name");
				draugrChest.Description.Alias("$SouthsilArmor_DraugrChest_Description");
			});
			draugrChest.Crafting.Stations.Clear();
			draugrChest.Crafting.Add((CraftingTable)4, 3);
			draugrChest.RequiredItems.Requirements.Clear();
			draugrChest.RequiredItems.Add("Iron", 45, 0);
			draugrChest.RequiredItems.Add("RottenPelt_TW", 4, 0);
			draugrChest.RequiredItems.Add("WitheredBone", 8, 0);
			draugrChest.RequiredUpgradeItems.Requirements.Clear();
			draugrChest.RequiredUpgradeItems.Add("Iron", 11, 0);
			draugrChest.RequiredUpgradeItems.Add("RottenPelt_TW", 2, 0);
			draugrChest.RequiredUpgradeItems.Add("WitheredBone", 4, 0);
			itemWrapper9.Armor.ArmorBase = 27f;
			itemWrapper9.Armor.ArmorPerLevel = 4f;
			itemWrapper9.Armor.MovementModifier = -0.1f;
			itemWrapper9.Armor.Weight = 18f;
			var (draugrLegs, itemWrapper10) = itemManager["swamplegs"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				draugrLegs.Name.Alias("$SouthsilArmor_DraugrLegs_Name");
				draugrLegs.Description.Alias("$SouthsilArmor_DraugrLegs_Description");
			});
			draugrLegs.Crafting.Stations.Clear();
			draugrLegs.Crafting.Add((CraftingTable)4, 3);
			draugrLegs.RequiredItems.Requirements.Clear();
			draugrLegs.RequiredItems.Add("Iron", 30, 0);
			draugrLegs.RequiredItems.Add("RottenPelt_TW", 2, 0);
			draugrLegs.RequiredItems.Add("WitheredBone", 4, 0);
			draugrLegs.RequiredItems.Add("TrophySkeleton", 4, 0);
			draugrLegs.RequiredUpgradeItems.Requirements.Clear();
			draugrLegs.RequiredUpgradeItems.Add("Iron", 7, 0);
			draugrLegs.RequiredUpgradeItems.Add("RottenPelt_TW", 1, 0);
			draugrLegs.RequiredUpgradeItems.Add("WitheredBone", 2, 0);
			itemWrapper10.Armor.ArmorBase = 18f;
			itemWrapper10.Armor.ArmorPerLevel = 3f;
			itemWrapper10.Armor.MovementModifier = -0.06f;
			itemWrapper10.Armor.Weight = 12f;
			SE_Stats val2 = ScriptableObject.CreateInstance<SE_Stats>();
			((StatusEffect)val2).m_name = "$SouthsilArmor_DraugrSet_Effect_Name";
			((StatusEffect)val2).m_tooltip = "$SouthsilArmor_DraugrSet_Effect_Tooltip";
			((StatusEffect)val2).m_icon = itemWrapper8.Icon;
			val2.m_mods.Add(new DamageModPair
			{
				m_type = CapeAndTorchResistanceChanges.Water,
				m_modifier = (DamageModifier)3
			});
			itemWrapper8.Set.Effect = val2;
			itemWrapper8.Set.Name = "Draugr";
			itemWrapper8.Set.Size = 3;
			itemWrapper9.Set = itemWrapper8.Set;
			itemWrapper10.Set = itemWrapper8.Set;
			itemManager.Keep("heavybearhelm", "heavybearchest", "heavybearlegs");
			var (grizzlyHelm, itemWrapper11) = itemManager["heavybearhelm"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				grizzlyHelm.Name.Alias("$SouthsilArmor_GrizzlyHelm_Name");
				grizzlyHelm.Description.Alias("$SouthsilArmor_GrizzlyHelm_Description");
			});
			grizzlyHelm.Crafting.Stations.Clear();
			grizzlyHelm.Crafting.Add((CraftingTable)4, 3);
			grizzlyHelm.RequiredItems.Requirements.Clear();
			grizzlyHelm.RequiredItems.Add("Silver", 15, 0);
			grizzlyHelm.RequiredItems.Add("GrizzlyBearPelt_TW", 1, 0);
			grizzlyHelm.RequiredItems.Add("TrophyHatchling", 1, 0);
			grizzlyHelm.RequiredItems.Add("TrophyGrizzlyBear_TW", 1, 0);
			grizzlyHelm.RequiredUpgradeItems.Requirements.Clear();
			grizzlyHelm.RequiredUpgradeItems.Add("Silver", 4, 0);
			grizzlyHelm.RequiredUpgradeItems.Add("WolfPelt", 2, 0);
			itemWrapper11.Armor.ArmorBase = 12f;
			itemWrapper11.Armor.ArmorPerLevel = 3f;
			itemWrapper11.Armor.MovementModifier = -0.02f;
			itemWrapper11.Armor.Weight = 6f;
			grizzlyHelm.Prefab.FixItemLayer();
			var (grizzlyChest, itemWrapper12) = itemManager["heavybearchest"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				grizzlyChest.Name.Alias("$SouthsilArmor_GrizzlyChest_Name");
				grizzlyChest.Description.Alias("$SouthsilArmor_GrizzlyChest_Description");
			});
			grizzlyChest.Crafting.Stations.Clear();
			grizzlyChest.Crafting.Add((CraftingTable)4, 3);
			grizzlyChest.RequiredItems.Requirements.Clear();
			grizzlyChest.RequiredItems.Add("Silver", 45, 0);
			grizzlyChest.RequiredItems.Add("GrizzlyBearPelt_TW", 3, 0);
			grizzlyChest.RequiredItems.Add("WolfPelt", 4, 0);
			grizzlyChest.RequiredItems.Add("ClaymoreIron_TW", 1, 0);
			grizzlyChest.RequiredUpgradeItems.Requirements.Clear();
			grizzlyChest.RequiredUpgradeItems.Add("Silver", 11, 0);
			grizzlyChest.RequiredUpgradeItems.Add("GrizzlyBearPelt_TW", 2, 0);
			grizzlyChest.RequiredUpgradeItems.Add("WolfPelt", 2, 0);
			itemWrapper12.Armor.ArmorBase = 36f;
			itemWrapper12.Armor.ArmorPerLevel = 4f;
			itemWrapper12.Armor.MovementModifier = -0.1f;
			itemWrapper12.Armor.Weight = 18f;
			itemWrapper12.SharedData.m_heatResistanceModifier = 0f;
			var (grizzlyLegs, itemWrapper13) = itemManager["heavybearlegs"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				grizzlyLegs.Name.Alias("$SouthsilArmor_GrizzlyLegs_Name");
				grizzlyLegs.Description.Alias("$SouthsilArmor_GrizzlyLegs_Description");
			});
			grizzlyLegs.Crafting.Stations.Clear();
			grizzlyLegs.Crafting.Add((CraftingTable)4, 3);
			grizzlyLegs.RequiredItems.Requirements.Clear();
			grizzlyLegs.RequiredItems.Add("Silver", 30, 0);
			grizzlyLegs.RequiredItems.Add("GrizzlyBearPelt_TW", 2, 0);
			grizzlyLegs.RequiredItems.Add("KnifeSilver", 2, 0);
			grizzlyLegs.RequiredItems.Add("TankardAnniversary", 1, 0);
			grizzlyLegs.RequiredUpgradeItems.Requirements.Clear();
			grizzlyLegs.RequiredUpgradeItems.Add("Silver", 7, 0);
			grizzlyLegs.RequiredUpgradeItems.Add("GrizzlyBearPelt_TW", 1, 0);
			grizzlyLegs.RequiredUpgradeItems.Add("WolfPelt", 2, 0);
			itemWrapper13.Armor.ArmorBase = 24f;
			itemWrapper13.Armor.ArmorPerLevel = 3f;
			itemWrapper13.Armor.MovementModifier = -0.06f;
			itemWrapper13.Armor.Weight = 12f;
			itemWrapper13.SharedData.m_heatResistanceModifier = 0f;
			SE_Stats val3 = ScriptableObject.CreateInstance<SE_Stats>();
			((StatusEffect)val3).m_name = "$SouthsilArmor_GrizzlySet_Effect_Name";
			((StatusEffect)val3).m_tooltip = "$SouthsilArmor_GrizzlySet_Effect_Tooltip";
			((StatusEffect)val3).m_icon = itemWrapper11.Icon;
			val3.m_skillLevel = (SkillType)1;
			val3.m_skillLevelModifier = 15f;
			val3.m_skillLevel2 = CustomSkills.TwoHandedSwords;
			val3.m_skillLevelModifier2 = 15f;
			val3.m_mods.Add(new DamageModPair
			{
				m_type = CapeAndTorchResistanceChanges.Cold,
				m_modifier = (DamageModifier)5
			});
			itemWrapper11.Set.Effect = val3;
			itemWrapper11.Set.Name = "Grizzly";
			itemWrapper11.Set.Size = 3;
			itemWrapper12.Set = itemWrapper11.Set;
			itemWrapper13.Set = itemWrapper11.Set;
			itemManager.Keep("obswolfhelm", "obswolfchest", "obswolflegs");
			var (feralHelm, itemWrapper14) = itemManager["obswolfhelm"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				feralHelm.Name.Alias("$SouthsilArmor_FeralHelm_Name");
				feralHelm.Description.Alias("$SouthsilArmor_FeralHelm_Description");
			});
			feralHelm.Crafting.Stations.Clear();
			feralHelm.Crafting.Add((CraftingTable)4, 2);
			feralHelm.RequiredItems.Requirements.Clear();
			feralHelm.RequiredItems.Add("BlackMetal", 4, 0);
			feralHelm.RequiredItems.Add("WolfHairBundle", 10, 0);
			feralHelm.RequiredItems.Add("TrophyProwler_TW", 1, 0);
			feralHelm.RequiredItems.Add("Ruby", 5, 0);
			feralHelm.RequiredUpgradeItems.Requirements.Clear();
			feralHelm.RequiredUpgradeItems.Add("BlackMetal", 2, 0);
			feralHelm.RequiredUpgradeItems.Add("WolfHairBundle", 5, 0);
			itemWrapper14.Armor.ArmorBase = 7f;
			itemWrapper14.Armor.ArmorPerLevel = 2f;
			itemWrapper14.Armor.MovementModifier = 0f;
			itemWrapper14.Armor.Weight = 1f;
			feralHelm.Prefab.FixItemLayer();
			var (feralChest, itemWrapper15) = itemManager["obswolfchest"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				feralChest.Name.Alias("$SouthsilArmor_FeralChest_Name");
				feralChest.Description.Alias("$SouthsilArmor_FeralChest_Description");
			});
			feralChest.Crafting.Stations.Clear();
			feralChest.Crafting.Add((CraftingTable)4, 2);
			feralChest.RequiredItems.Requirements.Clear();
			feralChest.RequiredItems.Add("BlackMetal", 12, 0);
			feralChest.RequiredItems.Add("LoxPelt", 4, 0);
			feralChest.RequiredItems.Add("ProwlerFang_TW", 4, 0);
			feralChest.RequiredItems.Add("TrophyUlv", 4, 0);
			feralChest.RequiredUpgradeItems.Requirements.Clear();
			feralChest.RequiredUpgradeItems.Add("BlackMetal", 6, 0);
			feralChest.RequiredUpgradeItems.Add("LoxPelt", 1, 0);
			feralChest.RequiredUpgradeItems.Add("ProwlerFang_TW", 2, 0);
			itemWrapper15.Armor.ArmorBase = 21f;
			itemWrapper15.Armor.ArmorPerLevel = 3f;
			itemWrapper15.Armor.MovementModifier = -0.01f;
			itemWrapper15.Armor.Weight = 6f;
			itemWrapper15.Armor.DamageModifiers.Clear();
			var (feralLegs, itemWrapper16) = itemManager["obswolflegs"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				feralLegs.Name.Alias("$SouthsilArmor_FeralLegs_Name");
				feralLegs.Description.Alias("$SouthsilArmor_FeralLegs_Description");
			});
			feralLegs.Crafting.Stations.Clear();
			feralLegs.Crafting.Add((CraftingTable)4, 2);
			feralLegs.RequiredItems.Requirements.Clear();
			feralLegs.RequiredItems.Add("BlackMetal", 8, 0);
			feralLegs.RequiredItems.Add("LinenThread", 20, 0);
			feralLegs.RequiredItems.Add("WolfClaw", 5, 0);
			feralLegs.RequiredUpgradeItems.Requirements.Clear();
			feralLegs.RequiredUpgradeItems.Add("BlackMetal", 4, 0);
			feralLegs.RequiredUpgradeItems.Add("LinenThread", 10, 0);
			itemWrapper16.Armor.ArmorBase = 14f;
			itemWrapper16.Armor.ArmorPerLevel = 3f;
			itemWrapper16.Armor.MovementModifier = -0.01f;
			itemWrapper16.Armor.Weight = 3f;
			SE_Stats val4 = ScriptableObject.CreateInstance<SE_Stats>();
			((StatusEffect)val4).m_name = "$SouthsilArmor_FeralSet_Effect_Name";
			((StatusEffect)val4).m_tooltip = "$SouthsilArmor_FeralSet_Effect_Tooltip";
			((StatusEffect)val4).m_icon = itemWrapper14.Icon;
			val4.m_skillLevel = (SkillType)101;
			val4.m_skillLevelModifier = 15f;
			val4.m_skillLevel2 = (SkillType)2;
			val4.m_skillLevelModifier2 = 15f;
			itemWrapper14.Set.Effect = val4;
			itemWrapper14.Set.Name = "Feral";
			itemWrapper14.Set.Size = 3;
			itemWrapper15.Set = itemWrapper14.Set;
			itemWrapper16.Set = itemWrapper14.Set;
			itemManager.Keep("norahhelm", "norahhelmalt", "norahchest", "norahlegs");
			var (shieldmaidenHelm, itemWrapper17) = itemManager["norahhelm"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				shieldmaidenHelm.Name.Alias("$SouthsilArmor_ShieldmaidenHelm_Name");
				shieldmaidenHelm.Description.Alias("$SouthsilArmor_ShieldmaidenHelm_Description");
			});
			shieldmaidenHelm.Crafting.Stations.Clear();
			shieldmaidenHelm.Crafting.Add((CraftingTable)4, 2);
			shieldmaidenHelm.RequiredItems.Requirements.Clear();
			shieldmaidenHelm.RequiredItems.Add("LinenThread", 10, 0);
			shieldmaidenHelm.RequiredItems.Add("Coins", 500, 0);
			shieldmaidenHelm.RequiredUpgradeItems.Requirements.Clear();
			shieldmaidenHelm.RequiredUpgradeItems.Add("LinenThread", 10, 0);
			itemWrapper17.Armor.ArmorBase = 10f;
			itemWrapper17.Armor.ArmorPerLevel = 2f;
			itemWrapper17.Armor.MovementModifier = 0f;
			itemWrapper17.Armor.Weight = 3f;
			var (shieldmaidenHelmAlt, itemWrapper18) = itemManager["norahhelmalt"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				shieldmaidenHelmAlt.Name.Alias("$SouthsilArmor_ShieldmaidenHelmAlt_Name");
				shieldmaidenHelmAlt.Description.Alias("$SouthsilArmor_ShieldmaidenHelmAlt_Description");
			});
			shieldmaidenHelmAlt.Crafting.Stations.Clear();
			shieldmaidenHelmAlt.Crafting.Add((CraftingTable)4, 2);
			shieldmaidenHelmAlt.RequiredItems.Requirements.Clear();
			shieldmaidenHelmAlt.RequiredItems.Add("LinenThread", 10, 0);
			shieldmaidenHelmAlt.RequiredItems.Add("LoxPelt", 1, 0);
			shieldmaidenHelmAlt.RequiredUpgradeItems.Requirements.Clear();
			shieldmaidenHelmAlt.RequiredUpgradeItems.Add("LinenThread", 10, 0);
			itemWrapper18.Armor.ArmorBase = 10f;
			itemWrapper18.Armor.ArmorPerLevel = 2f;
			itemWrapper18.Armor.MovementModifier = 0f;
			itemWrapper18.Armor.Weight = 3f;
			shieldmaidenHelmAlt.Prefab.FixItemLayer();
			var (shieldmaidenChest, itemWrapper19) = itemManager["norahchest"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				shieldmaidenChest.Name.Alias("$SouthsilArmor_ShieldmaidenChest_Name");
				shieldmaidenChest.Description.Alias("$SouthsilArmor_ShieldmaidenChest_Description");
			});
			shieldmaidenChest.Crafting.Stations.Clear();
			shieldmaidenChest.Crafting.Add((CraftingTable)4, 2);
			shieldmaidenChest.RequiredItems.Requirements.Clear();
			shieldmaidenChest.RequiredItems.Add("Iron", 12, 0);
			shieldmaidenChest.RequiredItems.Add("LinenThread", 30, 0);
			shieldmaidenChest.RequiredItems.Add("LoxPelt", 4, 0);
			shieldmaidenChest.RequiredItems.Add("KnifeSilver", 1, 0);
			shieldmaidenChest.RequiredUpgradeItems.Requirements.Clear();
			shieldmaidenChest.RequiredUpgradeItems.Add("Iron", 8, 0);
			shieldmaidenChest.RequiredUpgradeItems.Add("LinenThread", 15, 0);
			shieldmaidenChest.RequiredUpgradeItems.Add("LoxPelt", 1, 0);
			itemWrapper19.Armor.ArmorBase = 30f;
			itemWrapper19.Armor.ArmorPerLevel = 3f;
			itemWrapper19.Armor.MovementModifier = -0.04f;
			itemWrapper19.Armor.Weight = 10f;
			var (shieldmaidenLegs, itemWrapper20) = itemManager["norahlegs"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				shieldmaidenLegs.Name.Alias("$SouthsilArmor_ShieldmaidenLegs_Name");
				shieldmaidenLegs.Description.Alias("$SouthsilArmor_ShieldmaidenLegs_Description");
			});
			shieldmaidenLegs.Crafting.Stations.Clear();
			shieldmaidenLegs.Crafting.Add((CraftingTable)4, 2);
			shieldmaidenLegs.RequiredItems.Requirements.Clear();
			shieldmaidenLegs.RequiredItems.Add("Iron", 8, 0);
			shieldmaidenLegs.RequiredItems.Add("LinenThread", 20, 0);
			shieldmaidenLegs.RequiredItems.Add("LoxPelt", 2, 0);
			shieldmaidenLegs.RequiredUpgradeItems.Requirements.Clear();
			shieldmaidenLegs.RequiredUpgradeItems.Add("Iron", 4, 0);
			shieldmaidenLegs.RequiredUpgradeItems.Add("LinenThread", 10, 0);
			shieldmaidenLegs.RequiredUpgradeItems.Add("LoxPelt", 2, 0);
			itemWrapper20.Armor.ArmorBase = 20f;
			itemWrapper20.Armor.ArmorPerLevel = 2f;
			itemWrapper20.Armor.MovementModifier = -0.02f;
			itemWrapper20.Armor.Weight = 5f;
			SE_Stats val5 = ScriptableObject.CreateInstance<SE_Stats>();
			((StatusEffect)val5).m_name = "$SouthsilArmor_ShieldmaidenSet_Effect_Name";
			((StatusEffect)val5).m_tooltip = "$SouthsilArmor_ShieldmaidenSet_Effect_Tooltip";
			((StatusEffect)val5).m_icon = itemWrapper19.Icon;
			val5.m_skillLevel = (SkillType)3;
			val5.m_skillLevelModifier = 15f;
			val5.m_skillLevel2 = (SkillType)6;
			val5.m_skillLevelModifier2 = 15f;
			itemWrapper17.Set.Effect = val5;
			itemWrapper17.Set.Name = "Shieldmaiden";
			itemWrapper17.Set.Size = 3;
			itemWrapper18.Set = itemWrapper17.Set;
			itemWrapper19.Set = itemWrapper17.Set;
			itemWrapper20.Set = itemWrapper17.Set;
			itemManager.Keep("bearhelm2", "bearchest2", "bearlegs2");
			var (berserkirHelm, itemWrapper21) = itemManager["bearhelm2"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				berserkirHelm.Name.Alias("$SouthsilArmor_BerserkirHelm_Name");
				berserkirHelm.Description.Alias("$SouthsilArmor_BerserkirHelm_Description");
			});
			berserkirHelm.Crafting.Stations.Clear();
			berserkirHelm.Crafting.Add((CraftingTable)4, 3);
			berserkirHelm.RequiredItems.Requirements.Clear();
			berserkirHelm.RequiredItems.Add("BlackMetal", 15, 0);
			berserkirHelm.RequiredItems.Add("LinenThread", 10, 0);
			berserkirHelm.RequiredUpgradeItems.Requirements.Clear();
			berserkirHelm.RequiredUpgradeItems.Add("BlackMetal", 7, 0);
			berserkirHelm.RequiredUpgradeItems.Add("LinenThread", 5, 0);
			itemWrapper21.Armor.ArmorBase = 15f;
			itemWrapper21.Armor.ArmorPerLevel = 3f;
			itemWrapper21.Armor.MovementModifier = -0.02f;
			itemWrapper21.Armor.Weight = 6f;
			var (berserkirChest, itemWrapper22) = itemManager["bearchest2"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				berserkirChest.Name.Alias("$SouthsilArmor_BerserkirChest_Name");
				berserkirChest.Description.Alias("$SouthsilArmor_BerserkirChest_Description");
			});
			berserkirChest.Crafting.Stations.Clear();
			berserkirChest.Crafting.Add((CraftingTable)4, 3);
			berserkirChest.RequiredItems.Requirements.Clear();
			berserkirChest.RequiredItems.Add("BlackMetal", 45, 0);
			berserkirChest.RequiredItems.Add("LinenThread", 23, 0);
			berserkirChest.RequiredItems.Add("Chain", 10, 0);
			berserkirChest.RequiredUpgradeItems.Requirements.Clear();
			berserkirChest.RequiredUpgradeItems.Add("BlackMetal", 20, 0);
			berserkirChest.RequiredUpgradeItems.Add("LinenThread", 15, 0);
			itemWrapper22.Armor.ArmorBase = 45f;
			itemWrapper22.Armor.ArmorPerLevel = 4f;
			itemWrapper22.Armor.MovementModifier = -0.1f;
			itemWrapper22.Armor.Weight = 18f;
			var (berserkirLegs, itemWrapper23) = itemManager["bearlegs2"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				berserkirLegs.Name.Alias("$SouthsilArmor_BerserkirLegs_Name");
				berserkirLegs.Description.Alias("$SouthsilArmor_BerserkirLegs_Description");
			});
			berserkirLegs.Crafting.Stations.Clear();
			berserkirLegs.Crafting.Add((CraftingTable)4, 3);
			berserkirLegs.RequiredItems.Requirements.Clear();
			berserkirLegs.RequiredItems.Add("BlackMetal", 30, 0);
			berserkirLegs.RequiredItems.Add("LinenThread", 20, 0);
			berserkirLegs.RequiredUpgradeItems.Requirements.Clear();
			berserkirLegs.RequiredUpgradeItems.Add("BlackMetal", 15, 0);
			berserkirLegs.RequiredUpgradeItems.Add("LinenThread", 10, 0);
			itemWrapper23.Armor.ArmorBase = 30f;
			itemWrapper23.Armor.ArmorPerLevel = 4f;
			itemWrapper23.Armor.MovementModifier = -0.06f;
			itemWrapper23.Armor.Weight = 12f;
			itemWrapper23.Armor.DamageModifiers.Clear();
			SE_Stats val6 = ScriptableObject.CreateInstance<SE_Stats>();
			((StatusEffect)val6).m_name = "$SouthsilArmor_BerserkirSet_Effect_Name";
			((StatusEffect)val6).m_tooltip = "$SouthsilArmor_BerserkirSet_Effect_Tooltip";
			((StatusEffect)val6).m_icon = itemWrapper21.Icon;
			val6.m_skillLevel = (SkillType)4;
			val6.m_skillLevelModifier = 15f;
			val6.m_skillLevel2 = CustomSkills.TwoHandedAxes;
			val6.m_skillLevelModifier2 = 15f;
			itemWrapper21.Set.Effect = val6;
			itemWrapper21.Set.Name = "Berserkir";
			itemWrapper21.Set.Size = 3;
			itemWrapper22.Set = itemWrapper21.Set;
			itemWrapper23.Set = itemWrapper21.Set;
			itemManager.Keep("heavycarhelm", "heavycarchest", "heavycarlegs");
			var (gjallhunterHelm, itemWrapper24) = itemManager["heavycarhelm"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				gjallhunterHelm.Name.Alias("$SouthsilArmor_GjallhunterHelm_Name");
				gjallhunterHelm.Description.Alias("$SouthsilArmor_GjallhunterHelm_Description");
			});
			gjallhunterHelm.Crafting.Stations.Clear();
			gjallhunterHelm.Crafting.Add((CraftingTable)8, 1);
			gjallhunterHelm.RequiredItems.Requirements.Clear();
			gjallhunterHelm.RequiredItems.Add("Carapace", 8, 0);
			gjallhunterHelm.RequiredItems.Add("Mandible", 2, 0);
			gjallhunterHelm.RequiredItems.Add("TrophyGjall", 2, 0);
			gjallhunterHelm.RequiredUpgradeItems.Requirements.Clear();
			gjallhunterHelm.RequiredUpgradeItems.Add("Carapace", 4, 0);
			gjallhunterHelm.RequiredUpgradeItems.Add("Mandible", 1, 0);
			itemWrapper24.Armor.ArmorBase = 12f;
			itemWrapper24.Armor.ArmorPerLevel = 3f;
			itemWrapper24.Armor.MovementModifier = 0f;
			itemWrapper24.Armor.Weight = 3f;
			itemWrapper24.Armor.EquipEffect = null;
			gjallhunterHelm.Prefab.FixItemLayer();
			var (gjallhunterChest, itemWrapper25) = itemManager["heavycarchest"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				gjallhunterChest.Name.Alias("$SouthsilArmor_GjallhunterChest_Name");
				gjallhunterChest.Description.Alias("$SouthsilArmor_GjallhunterChest_Description");
			});
			gjallhunterChest.Crafting.Stations.Clear();
			gjallhunterChest.Crafting.Add((CraftingTable)8, 1);
			gjallhunterChest.RequiredItems.Requirements.Clear();
			gjallhunterChest.RequiredItems.Add("Carapace", 20, 0);
			gjallhunterChest.RequiredItems.Add("Mandible", 6, 0);
			gjallhunterChest.RequiredItems.Add("ScaleHide", 10, 0);
			gjallhunterChest.RequiredItems.Add("TrophySkeleton", 4, 0);
			gjallhunterChest.RequiredUpgradeItems.Requirements.Clear();
			gjallhunterChest.RequiredUpgradeItems.Add("Carapace", 10, 0);
			gjallhunterChest.RequiredUpgradeItems.Add("Mandible", 3, 0);
			gjallhunterChest.RequiredUpgradeItems.Add("ScaleHide", 5, 0);
			itemWrapper25.Armor.ArmorBase = 36f;
			itemWrapper25.Armor.ArmorPerLevel = 4f;
			itemWrapper25.Armor.MovementModifier = -0.04f;
			itemWrapper25.Armor.Weight = 10f;
			var (gjallhunterLegs, itemWrapper26) = itemManager["heavycarlegs"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				gjallhunterLegs.Name.Alias("$SouthsilArmor_GjallhunterLegs_Name");
				gjallhunterLegs.Description.Alias("$SouthsilArmor_GjallhunterLegs_Description");
			});
			gjallhunterLegs.Crafting.Stations.Clear();
			gjallhunterLegs.Crafting.Add((CraftingTable)8, 1);
			gjallhunterLegs.RequiredItems.Requirements.Clear();
			gjallhunterLegs.RequiredItems.Add("Carapace", 12, 0);
			gjallhunterLegs.RequiredItems.Add("Mandible", 2, 0);
			gjallhunterLegs.RequiredItems.Add("ScaleHide", 4, 0);
			gjallhunterLegs.RequiredItems.Add("TrophySkeleton", 4, 0);
			gjallhunterLegs.RequiredUpgradeItems.Requirements.Clear();
			gjallhunterLegs.RequiredUpgradeItems.Add("Carapace", 6, 0);
			gjallhunterLegs.RequiredUpgradeItems.Add("Mandible", 1, 0);
			gjallhunterLegs.RequiredUpgradeItems.Add("ScaleHide", 2, 0);
			itemWrapper26.Armor.ArmorBase = 24f;
			itemWrapper26.Armor.ArmorPerLevel = 3f;
			itemWrapper26.Armor.MovementModifier = -0.02f;
			itemWrapper26.Armor.Weight = 5f;
			SE_Stats val7 = ScriptableObject.CreateInstance<SE_Stats>();
			((StatusEffect)val7).m_name = "$SouthsilArmor_GjallhunterSet_Effect_Name";
			((StatusEffect)val7).m_tooltip = "$SouthsilArmor_GjallhunterSet_Effect_Tooltip";
			((StatusEffect)val7).m_icon = itemWrapper24.Icon;
			val7.m_skillLevel = (SkillType)8;
			val7.m_skillLevelModifier = 15f;
			val7.m_skillLevel2 = (SkillType)14;
			val7.m_skillLevelModifier2 = 15f;
			itemWrapper24.Set.Effect = val7;
			itemWrapper24.Set.Name = "Gjallhunter";
			itemWrapper24.Set.Size = 3;
			itemWrapper25.Set = itemWrapper24.Set;
			itemWrapper26.Set = itemWrapper24.Set;
			itemManager.Keep("runeknighthelm", "runeknightchest", "runeknightlegs");
			var (runeknightHelm, itemWrapper27) = itemManager["runeknighthelm"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				runeknightHelm.Name.Alias("$SouthsilArmor_RuneknightHelm_Name");
				runeknightHelm.Description.Alias("$SouthsilArmor_RuneknightHelm_Description");
			});
			runeknightHelm.Crafting.Stations.Clear();
			runeknightHelm.Crafting.Add((CraftingTable)8, 1);
			runeknightHelm.RequiredItems.Requirements.Clear();
			runeknightHelm.RequiredItems.Add("BlackMetal", 10, 0);
			runeknightHelm.RequiredItems.Add("Eitr", 15, 0);
			runeknightHelm.RequiredItems.Add("DarkCrystal_TW", 5, 0);
			runeknightHelm.RequiredUpgradeItems.Requirements.Clear();
			runeknightHelm.RequiredUpgradeItems.Add("BlackMetal", 5, 0);
			runeknightHelm.RequiredUpgradeItems.Add("Eitr", 5, 0);
			itemWrapper27.Armor.ArmorBase = 17f;
			itemWrapper27.Armor.ArmorPerLevel = 3f;
			itemWrapper27.Armor.MovementModifier = -0.02f;
			itemWrapper27.Armor.Weight = 5f;
			runeknightHelm.Prefab.FixItemLayer();
			var (runeknightChest, itemWrapper28) = itemManager["runeknightchest"];
			s_onLocalizationAddedCallbacks.Add(delegate
			{
				runeknightChest.Name.Alias("$SouthsilArmor_RuneknightChest_Name");
				runeknightChest.Description.Alias(