Decompiled source of Lotus Ecarlate Changes v0.6.46
plugins/LotusEcarlateChanges.dll
Decompiled 3 months ago
The result has been truncated due to the large size, download it to view full contents!
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 Backpacks; using BalrondHumanoidRandomizer; using BalrondShipyard; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using BowsBeforeHoes; using CapeAndTorchResistanceChanges; using ClayBuildPieces.Functions; using CreatureManager; using HarmonyLib; using ItemDataManager; using ItemManager; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using LocationManager; using LotusEcarlateChanges.Changes.JotunnBased; using LotusEcarlateChanges.Changes.Manual; using LotusEcarlateChanges.Changes.Manual.RenegadeVikingsChanges.Archetypes; using LotusEcarlateChanges.Changes.Manual.RenegadeVikingsChanges.Archetypes.BlackForest; using LotusEcarlateChanges.Changes.Manual.RenegadeVikingsChanges.Archetypes.Meadows; using LotusEcarlateChanges.Changes.Manual.RenegadeVikingsChanges.Archetypes.Mistlands; using LotusEcarlateChanges.Changes.Manual.RenegadeVikingsChanges.Archetypes.Mountain; using LotusEcarlateChanges.Changes.Manual.RenegadeVikingsChanges.Archetypes.Plains; using LotusEcarlateChanges.Changes.Manual.RenegadeVikingsChanges.Archetypes.Swamp; using LotusEcarlateChanges.Changes.Manual.RenegadeVikingsChanges.Tiers; 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 RenegadeVikings.Functions; using RenegadeVikings.Utilities; using RenegadeVikings.VikingsData.Overlord; using RenegadeVikings.VikingsData.Renegade; using SpeedyPaths; using TMPro; using UnityEngine; using UnityEngine.InputSystem; 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("Backpacks")] [assembly: IgnoresAccessChecksTo("BalrondContainers")] [assembly: IgnoresAccessChecksTo("BalrondHumanoidRandomizer")] [assembly: IgnoresAccessChecksTo("BalrondShipyard")] [assembly: IgnoresAccessChecksTo("BowsBeforeHoes")] [assembly: IgnoresAccessChecksTo("CapeAndTorchResistanceChanges")] [assembly: IgnoresAccessChecksTo("ClayBuildPieces")] [assembly: IgnoresAccessChecksTo("Clutter")] [assembly: IgnoresAccessChecksTo("CoreWoodPieces")] [assembly: IgnoresAccessChecksTo("FineWoodBuildPieces")] [assembly: IgnoresAccessChecksTo("Jotunn")] [assembly: IgnoresAccessChecksTo("MaxAxe")] [assembly: IgnoresAccessChecksTo("Microsoft.CSharp")] [assembly: IgnoresAccessChecksTo("MonsterLabZ")] [assembly: IgnoresAccessChecksTo("Monstrum")] [assembly: IgnoresAccessChecksTo("moregates++")] [assembly: IgnoresAccessChecksTo("RefinedStonePieces")] [assembly: IgnoresAccessChecksTo("RenegadeVikings")] [assembly: IgnoresAccessChecksTo("RtDBiomes")] [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.6.46.0")] [assembly: AssemblyInformationalVersion("0.6.46+71691f3cd060381da9a491d1627b8976c9812f35")] [assembly: AssemblyProduct("LotusEcarlateChanges")] [assembly: AssemblyTitle("LotusEcarlateChanges")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.6.46.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.6.46")] [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.*/)] [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.6.46"; 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>(29); list.Add(new Clutter()); list.Add(new CustomSkills()); list.Add(new MoreGates()); list.Add(new RtDBiomes()); list.Add(new Backpacks()); list.Add(new BowsBeforeHoes()); list.Add(new ClayBuildPieces()); list.Add(new CoreWoodPieces()); list.Add(new FineWoodBuildPieces()); list.Add(new MonsterLabZ()); list.Add(new Monstrum()); list.Add(new RefinedStonePieces()); 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 MaxAxe()); list.Add(new RenegadeVikings()); 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) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Expected I4, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected I4, but got Unknown //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Expected I4, but got Unknown //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Invalid comparison between Unknown and I4 var (flag, val) = ZInput.KeyCodeToMouseButton(keyCode, false); if (flag) { string text; switch ((int)val) { case 0: text = "$button_mouse0"; break; case 1: text = "$button_mouse1"; break; case 2: text = "$button_mouse2"; break; case 3: { Mouse current2 = Mouse.current; text = ((current2 != null) ? ((InputControl)current2.forwardButton).displayName : null) ?? "Mouse Forward"; break; } case 4: { Mouse current = Mouse.current; text = ((current != null) ? ((InputControl)current.backButton).displayName : null) ?? "Mouse Back"; break; } default: text = null; break; } string text2 = text; if (text2 != null) { return text2; } } Key val2 = ZInput.KeyCodeToKey(keyCode, false); switch ((int)val2) { default: switch (val2 - 51) { case 0: return "$button_lshift"; case 1: return "$button_rshift"; case 2: return "$button_lalt"; case 3: return "$button_ralt"; case 4: return "$button_lctrl"; case 5: return "$button_rctrl"; } if ((int)val2 != 77) { break; } return "$button_return"; case 7: return ","; case 8: return "."; case 1: return "$button_space"; case 2: return "$button_return"; case 0: return "$menu_none"; case 3: case 4: case 5: case 6: break; } Keyboard current3 = Keyboard.current; return ((current3 != null) ? ((InputControl)current3[val2]).displayName : null) ?? ((object)(Key)(ref val2)).ToString(); } } 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 Backpacks : StandaloneManagerBasedChangesBase { private class SE_Backpack : SE_Stats { public override void ModifySpeed(float baseSpeed, ref float speed, Character character, Vector3 dir) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) float num = API.GetEquippedBackpack().GetWeight() - 4f; base.m_speedModifier = Math.Max(num * -0.2f / 100f, -1f); ((SE_Stats)this).ModifySpeed(baseSpeed, ref speed, character, dir); } public override string GetIconText() { if (base.m_speedModifier != 0f) { return $"{base.m_speedModifier * 100f}%"; } return string.Empty; } } private const float EmptyBackpackWeight = 4f; private const float MovespeedPerWeightRatio = -0.1f; private const float BackpackItemRealWeightRatio = 0.5f; private const float MoveSpeedPerRealWeightRatio = -0.2f; private static SE_Backpack s_backpackEquipEffect; protected override void ApplyInternal() { //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Expected O, but got Unknown //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Expected O, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Expected O, but got Unknown Item backpack = Backpacks.Backpack; backpack.Crafting.Stations.Clear(); backpack.Crafting.Add((CraftingTable)0, 1); s_backpackEquipEffect = ScriptableObject.CreateInstance<SE_Backpack>(); ((Object)s_backpackEquipEffect).name = "Backpack"; ((StatusEffect)s_backpackEquipEffect).m_name = "$Backpack_Effect_Name"; ((StatusEffect)s_backpackEquipEffect).m_tooltip = "$Backpack_Effect_Tooltip"; ((StatusEffect)s_backpackEquipEffect).m_icon = backpack.Prefab.GetComponent<ItemDrop>().m_itemData.GetIcon(); Plugin.Harmony.Patch((MethodBase)AccessTools.Method(typeof(Loader), "ApplyConfig", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(GetType(), "EditLoadedBackpacks", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Plugin.Harmony.Patch((MethodBase)AccessTools.Method(typeof(ObjectDB), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(GetType(), "RegisterSEBackpack", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Plugin.Harmony.Patch((MethodBase)AccessTools.Method(typeof(ObjectDB), "CopyOtherDB", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(GetType(), "RegisterSEBackpack", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } private static void EditLoadedBackpacks() { foreach (Item value in Loader.loadedBackpacks.Values) { value.Name.Alias("$Backpack_Name"); value.Description.Alias("$Backpack_Description"); ItemWrapper.Get(value.Prefab).Armor.EquipEffect = (SE_Stats)(object)s_backpackEquipEffect; } } private static void RegisterSEBackpack(ObjectDB __instance) { if (!Object.op_Implicit((Object)(object)__instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)s_backpackEquipEffect).name)))) { __instance.m_StatusEffects.Add((StatusEffect)(object)s_backpackEquipEffect); } } } public class BowsBeforeHoes : StandaloneManagerBasedChangesBase { private static int s_quiverQualityCache; protected override void ApplyInternal() { //IL_0478: Unknown result type (might be due to invalid IL or missing references) //IL_0486: Expected O, but got Unknown //IL_04ae: Unknown result type (might be due to invalid IL or missing references) //IL_04bf: Unknown result type (might be due to invalid IL or missing references) //IL_04cc: Expected O, but got Unknown //IL_04cc: Expected O, but got Unknown ItemManager<Item> itemManager = RegisterItemManager(Item.registeredItems, PrefabManager.prefabs, PrefabManager.ZnetOnlyPrefabs); BowsBeforeHoesPlugin.QuiverList.Clear(); BowsBeforeHoesPlugin.BowList.Clear(); itemManager.Keep("BBH_BlackForest_Quiver", "BBH_BlackForest_QuiverViewOnly", "BBH_PlainsLox_Quiver", "BBH_PlainsLox_QuiverViewOnly", "BBH_Seeker_Quiver", "BBH_Seeker_QuiverViewOnly"); var (val, itemWrapper) = itemManager["BBH_BlackForest_Quiver"]; val.RequiredItems.Requirements.Clear(); val.RequiredItems.Add("FineWood", 10, 0); val.RequiredItems.Add("RoundLog", 10, 0); val.RequiredItems.Add("DeerHide", 4, 0); val.RequiredItems.Add("HardAntler", 1, 0); val.RequiredUpgradeItems.Requirements.Clear(); val.RequiredUpgradeItems.Add("FineWood", 5, 0); val.RequiredUpgradeItems.Add("RoundLog", 5, 0); val.RequiredUpgradeItems.Add("DeerHide", 2, 0); val.RequiredUpgradeItems.Add("HardAntler", 1, 0); itemWrapper.Armor.MovementModifier = 0f; itemWrapper.SharedData.m_maxQuality = 2; BowsBeforeHoesPlugin.QuiverList.Add(val.Prefab); var (val2, itemWrapper2) = itemManager["BBH_PlainsLox_Quiver"]; val2.RequiredItems.Requirements.Clear(); val2.RequiredItems.Add("FineWood", 10, 0); val2.RequiredItems.Add("LinenThread", 30, 0); val2.RequiredItems.Add("LoxPelt", 3, 0); val2.RequiredUpgradeItems.Requirements.Clear(); val2.RequiredUpgradeItems.Requirements.Clear(); val2.RequiredUpgradeItems.Add("FineWood", 5, 0); val2.RequiredUpgradeItems.Add("LinenThread", 15, 0); val2.RequiredUpgradeItems.Add("LoxPelt", 2, 0); itemWrapper2.Armor.MovementModifier = 0f; itemWrapper2.SharedData.m_maxQuality = 3; BowsBeforeHoesPlugin.QuiverList.Add(val2.Prefab); var (val3, itemWrapper3) = itemManager["BBH_Seeker_Quiver"]; val3.RequiredItems.Requirements.Clear(); val3.RequiredItems.Add("YggdrasilWood", 20, 0); val3.RequiredItems.Add("Carapace", 20, 0); val3.RequiredItems.Add("Mandible", 3, 0); val3.RequiredUpgradeItems.Requirements.Clear(); val3.RequiredUpgradeItems.Requirements.Clear(); val3.RequiredUpgradeItems.Add("YggdrasilWood", 10, 0); val3.RequiredUpgradeItems.Add("Carapace", 10, 0); val3.RequiredUpgradeItems.Add("Mandible", 2, 0); itemWrapper3.Armor.MovementModifier = 0f; itemWrapper3.SharedData.m_maxQuality = 4; BowsBeforeHoesPlugin.QuiverList.Add(val3.Prefab); itemManager.Keep("TorchArrow", "bow_projectile_torch", "MistTorchArrow", "bow_projectile_misttorch"); Item item = itemManager["TorchArrow"].Item; item.RequiredItems.Requirements.Clear(); item.RequiredItems.Add("Wood", 8, 0); item.RequiredItems.Add("Resin", 8, 0); item.RequiredItems.Add("Feathers", 2, 0); item.RequiredItems.Add("Tar", 1, 0); item.Crafting.Stations.Clear(); item.Crafting.Add((CraftingTable)2, 3); Item item2 = itemManager["MistTorchArrow"].Item; item2.RequiredItems.Requirements.Clear(); item2.RequiredItems.Add("Wood", 8, 0); item2.RequiredItems.Add("Resin", 8, 0); item2.RequiredItems.Add("Feathers", 2, 0); item2.RequiredItems.Add("Eitr", 1, 0); item2.Crafting.Stations.Clear(); item2.Crafting.Add((CraftingTable)8, 1); Plugin.Harmony.Patch((MethodBase)AccessTools.Method(typeof(DummyItemDataThingy), "GetDefaultContainerSize", (Type[])null, (Type[])null), new HarmonyMethod(GetType(), "SetQuiverSizeOnCraft", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Plugin.Harmony.Patch((MethodBase)AccessTools.Method(typeof(DummyItemDataThingy), "Upgraded", (Type[])null, (Type[])null), new HarmonyMethod(GetType(), "InterceptQuiverQualityOnUpgrade", (Type[])null), new HarmonyMethod(GetType(), "RestoreQuiverQualityAfterUpgrade", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } private static void SetQuiverSizeOnCraft(ref Vector2i __result, ref bool __runOriginal) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) __runOriginal = false; __result = new Vector2i(1, 1); } private static void InterceptQuiverQualityOnUpgrade(DummyItemDataThingy __instance) { s_quiverQualityCache = ((BackpacksItemData)__instance).Item.m_quality; ItemData item = ((BackpacksItemData)__instance).Item; item.m_quality -= 2; } private static void RestoreQuiverQualityAfterUpgrade(DummyItemDataThingy __instance) { ((BackpacksItemData)__instance).Item.m_quality = s_quiverQualityCache; } } 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 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 MonsterLabZ : StandaloneManagerBasedChangesBase { protected override void ApplyInternal() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Expected O, but got Unknown //IL_020e: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Expected O, but got Unknown //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Expected O, but got Unknown //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Expected O, but got Unknown //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_0300: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Unknown result type (might be due to invalid IL or missing references) //IL_0310: Unknown result type (might be due to invalid IL or missing references) //IL_0315: Unknown result type (might be due to invalid IL or missing references) //IL_031f: Expected O, but got Unknown //IL_0339: Unknown result type (might be due to invalid IL or missing references) //IL_033e: Unknown result type (might be due to invalid IL or missing references) //IL_034e: Expected O, but got Unknown //IL_03c5: Unknown result type (might be due to invalid IL or missing references) //IL_03ca: Unknown result type (might be due to invalid IL or missing references) //IL_0405: Unknown result type (might be due to invalid IL or missing references) //IL_0416: Unknown result type (might be due to invalid IL or missing references) //IL_0427: Unknown result type (might be due to invalid IL or missing references) //IL_043c: Unknown result type (might be due to invalid IL or missing references) //IL_044d: Unknown result type (might be due to invalid IL or missing references) //IL_045e: Unknown result type (might be due to invalid IL or missing references) //IL_0478: Unknown result type (might be due to invalid IL or missing references) //IL_047d: Unknown result type (might be due to invalid IL or missing references) //IL_04d6: Unknown result type (might be due to invalid IL or missing references) ItemManager<Item> itemManager = RegisterItemManager(Item.registeredItems, PrefabManager.prefabs, PrefabManager.ZnetOnlyPrefabs); CreatureManager<Creature> creatureManager = RegisterCreatureManager(Creature.registeredCreatures, PrefabManager.prefabs); LocationManager<Location> locationManager = RegisterLocationManager(Location.registeredLocations); DamageTypes damages = itemManager["DwarfGoblinShaman_attack_fireball"].Wrapper.Weapon.Damages; damages.m_fire = 50f; itemManager["DwarfGoblinShaman_attack_fireball"].Wrapper.Weapon.Damages = damages; DamageTypes damages2 = itemManager["DwarfGoblinShamanBoat_attack_fireball"].Wrapper.Weapon.Damages; damages2.m_fire = 50f; itemManager["DwarfGoblinShamanBoat_attack_fireball"].Wrapper.Weapon.Damages = damages2; creatureManager["BrownSpider"].Drops.drops.Remove("Ooze"); creatureManager["BrownSpider"].Drops.drops["SpiderFang"].DropChance = 100f; creatureManager["TreeSpider"].Drops.drops.Remove("Ooze"); creatureManager["TreeSpider"].Drops.drops["SpiderFang"].DropChance = 100f; creatureManager["GreenSpider"].Drops.drops.Remove("Ooze"); creatureManager["GreenSpider"].Drops.drops["SpiderFang"].DropChance = 100f; creatureManager["Rainbow_Butterfly"].Drops.drops.Remove("Ooze"); creatureManager["Rainbow_Butterfly"].Drops.drops["Amber"] = new Drop(); creatureManager["Green_Butterfly"].Drops.drops.Remove("Ooze"); creatureManager["Green_Butterfly"].Drops.drops["Amber"] = new Drop(); creatureManager["DwarfGoblin"].Drops.drops["Coins"].Amount = new Range(0f, 15f); creatureManager["DwarfGoblin"].Drops.drops["Amber"] = new Drop { Amount = new Range(0f, 3f) }; creatureManager["DwarfGoblin"].Drops.drops["Ruby"] = new Drop { DropChance = 50f }; creatureManager["DwarfGoblinShaman"].Drops.drops["Coins"].Amount = new Range(0f, 25f); creatureManager["DwarfGoblinShaman"].Drops.drops["Amber"] = new Drop { Amount = new Range(0f, 3f) }; creatureManager["DwarfGoblinShaman"].Drops.drops["Ruby"] = new Drop { DropChance = 50f }; creatureManager.Remove("ML_AshHatchling", "ML_AshHuldra", "ML_FrostHatchling", "FireGolem", "ObsidianGolem", "DwarfGoblinLoot"); creatureManager["TreeSpider"].SpawnChance = 5f; creatureManager["TreeSpider"].Maximum = 3; creatureManager["TreeSpider"].GroupSize = new Range(2f, 3f); creatureManager["GreenSpider"].SpawnChance = 5f; creatureManager["GreenSpider"].Maximum = 1; creatureManager["ML_DraugrShip"].Biome = (Biome)256; creatureManager["ML_DraugrShip"].RequiredWeather = (Weather)0; creatureManager["ML_DraugrShip"].SpecificSpawnArea = (SpawnArea)2; creatureManager["ML_GoblinShip"].Biome = (Biome)256; creatureManager["ML_GoblinShip"].RequiredWeather = (Weather)0; creatureManager["ML_GoblinShip"].SpecificSpawnArea = (SpawnArea)2; creatureManager["DwarfGoblin"].GroupSize = new Range(2f, 4f); creatureManager["DwarfGoblin"].Maximum = 4; creatureManager["DwarfGoblinShaman"].CanHaveStars = false; creatureManager["WraithWarrior"].SpawnChance = 10f; creatureManager["WraithWarrior"].Maximum = 1; creatureManager["WraithWarrior"].RequiredWeather = (Weather)0; creatureManager["WraithWarrior"].CanHaveStars = false; creatureManager["DeepSea_Serpent"].CanHaveStars = false; locationManager.Remove("AshHuldraQueen_Altar", "AshlandsCave_01", "AshlandsCave_02", "Mystical_Well0"); } } public class Monstrum : StandaloneManagerBasedChangesBase { private TherzieCreatureManager<Creature, Spawner> creatureManager; protected override void ApplyInternal() { //IL_0435: Unknown result type (might be due to invalid IL or missing references) //IL_043a: Unknown result type (might be due to invalid IL or missing references) //IL_0552: 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_05e5: Unknown result type (might be due to invalid IL or missing references) //IL_05ea: Unknown result type (might be due to invalid IL or missing references) //IL_064e: Unknown result type (might be due to invalid IL or missing references) //IL_0653: Unknown result type (might be due to invalid IL or missing references) //IL_06c5: 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_071c: Unknown result type (might be due to invalid IL or missing references) //IL_0721: 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["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 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_0b33: Unknown result type (might be due to invalid IL or missing references) //IL_0b38: Unknown result type (might be due to invalid IL or missing references) //IL_1025: Unknown result type (might be due to invalid IL or missing references) //IL_102d: Unknown result type (might be due to invalid IL or missing references) //IL_1032: Unknown result type (might be due to invalid IL or missing references) //IL_103a: Unknown result type (might be due to invalid IL or missing references) //IL_103f: Unknown result type (might be due to invalid IL or missing references) //IL_152b: Unknown result type (might be due to invalid IL or missing references) //IL_153c: Unknown result type (might be due to invalid IL or missing references) //IL_1541: Unknown result type (might be due to invalid IL or missing references) //IL_1564: Unknown result type (might be due to invalid IL or missing references) //IL_156c: Unknown result type (might be due to invalid IL or missing references) //IL_1571: Unknown result type (might be due to invalid IL or missing references) //IL_1579: Unknown result type (might be due to invalid IL or missing references) //IL_157e: Unknown result type (might be due to invalid IL or missing references) //IL_1a37: Unknown result type (might be due to invalid IL or missing references) //IL_1a49: Unknown result type (might be due to invalid IL or missing references) //IL_201b: Unknown result type (might be due to invalid IL or missing references) //IL_202d: Unknown result type (might be due to invalid IL or missing references) //IL_247f: Unknown result type (might be due to invalid IL or missing references) //IL_2490: Unknown result type (might be due to invalid IL or missing references) //IL_2495: Unknown result type (might be due to invalid IL or missing references) //IL_297f: Unknown result type (might be due to invalid IL or missing references) //IL_2992: Unknown result type (might be due to invalid IL or missing references) //IL_2e6c: Unknown result type (might be due to invalid IL or missing references) //IL_2e7e: Unknown result type (might be due to invalid IL or missing references) //IL_33d0: Unknown result type (might be due to invalid IL or missing references) //IL_33e1: Unknown result type (might be due to invalid IL or missing references) //IL_33e6: 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 = CustomSkills.Warpikes; 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 effect = itemWrapper8.Set.Effect; ((StatusEffect)effect).m_name = "$SouthsilArmor_DraugrSet_Effect_Name"; ((StatusEffect)effect).m_tooltip = "$SouthsilArmor_DraugrSet_Effect_Tooltip"; effect.m_mods.Clear(); effect.m_mods.Add(new DamageModPair { m_type = CapeAndTorchResistanceChanges.Water, m_modifier = (DamageModifier)3 }); 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 = 14f; itemWrapper11.Armor.ArmorPerLevel = 4f; 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 = 27f; 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 = 18f; itemWrapper13.Armor.ArmorPerLevel = 3f; itemWrapper13.Armor.MovementModifier = -0.06f; itemWrapper13.Armor.Weight = 12f; itemWrapper13.SharedData.m_heatResistanceModifier = 0f; SE_Stats effect2 = itemWrapper11.Set.Effect; ((StatusEffect)effect2).m_name = "$SouthsilArmor_GrizzlySet_Effect_Name"; ((StatusEffect)effect2).m_tooltip = "$SouthsilArmor_GrizzlySet_Effect_Tooltip"; effect2.m_skillLevel = (SkillType)1; effect2.m_skillLevelModifier = 15f; effect2.m_skillLevel2 = CustomSkills.TwoHandedSwords; effect2.m_skillLevelModifier2 = 15f; effect2.m_mods.Clear(); effect2.m_mods.Add(new DamageModPair { m_type = CapeAndTorchResistanceChanges.Cold, m_modifier = (DamageModifier)5 }); effect2.m_staminaRegenMultiplier = 1f; 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 effect3 = itemWrapper14.Set.Effect; ((StatusEffect)effect3).m_name = "$SouthsilArmor_FeralSet_Effect_Name"; ((StatusEffect)effect3).m_tooltip = "$SouthsilArmor_FeralSet_Effect_Tooltip"; effect3.m_skillLevel = (SkillType)101; effect3.m_skillLevelModifier = 15f; effect3.m_skillLevel2 = (SkillType)2; effect3.m_skillLevelModifier2 = 15f; effect3.m_runStaminaDrainModifier = 0f; effect3.m_jumpStaminaUseModifier = 0f; effect3.m_speedModifier = 0f; effect3.m_stealthModifier = 0f; effect3.m_mods.Clear(); 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