Decompiled source of Venture World Scaling v0.3.0
Plugins/VentureValheim.Scaling.dll
Decompiled 6 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.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using JetBrains.Annotations; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.SceneManagement; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Core.Tokens; using YamlDotNet.Helpers; using YamlDotNet.Serialization; using YamlDotNet.Serialization.Converters; using YamlDotNet.Serialization.EventEmitters; using YamlDotNet.Serialization.NamingConventions; using YamlDotNet.Serialization.NodeDeserializers; using YamlDotNet.Serialization.NodeTypeResolvers; using YamlDotNet.Serialization.ObjectFactories; using YamlDotNet.Serialization.ObjectGraphTraversalStrategies; using YamlDotNet.Serialization.ObjectGraphVisitors; using YamlDotNet.Serialization.Schemas; using YamlDotNet.Serialization.TypeInspectors; using YamlDotNet.Serialization.TypeResolvers; using YamlDotNet.Serialization.Utilities; using YamlDotNet.Serialization.ValueDeserializers; [assembly: Guid("DA7A94D9-DD8B-4C13-A7BF-44178396D6DF")] [assembly: ComVisible(false)] [assembly: AssemblyTrademark("")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyProduct("VentureValheim.Scaling")] [assembly: AssemblyCompany("")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyDescription("")] [assembly: AssemblyTitle("VentureValheim.Scaling")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyFileVersion("0.3.0")] [assembly: AssemblyConfiguration("")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.3.0.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<4fbbcef8-8d74-42eb-9a62-1e2a55be03f6>Embedded] internal sealed class <4fbbcef8-8d74-42eb-9a62-1e2a55be03f6>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] [<4fbbcef8-8d74-42eb-9a62-1e2a55be03f6>Embedded] internal sealed class <9eed9c0a-9fd3-449f-9769-233bc050d602>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <9eed9c0a-9fd3-449f-9769-233bc050d602>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <9eed9c0a-9fd3-449f-9769-233bc050d602>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [<4fbbcef8-8d74-42eb-9a62-1e2a55be03f6>Embedded] [CompilerGenerated] internal sealed class <b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContextAttribute : Attribute { public readonly byte Flag; public <b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace VentureValheim.Scaling { [BepInPlugin("com.orianaventure.mod.WorldScaling", "WorldScaling", "0.3.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] public class ScalingPlugin : BaseUnityPlugin { private static readonly ScalingPlugin _instance; private const string ModName = "WorldScaling"; private const string ModVersion = "0.3.0"; private const string Author = "com.orianaventure.mod"; private const string ModGUID = "com.orianaventure.mod.WorldScaling"; private static string ConfigFileName; private static string ConfigFileFullPath; private readonly Harmony HarmonyInstance = new Harmony("com.orianaventure.mod.WorldScaling"); public static readonly ManualLogSource VentureScalingLogger; public static ConfigEntry<bool> CE_GenerateGameData; public static ConfigEntry<string> CE_AutoScaleType; public static ConfigEntry<float> CE_AutoScaleFactor; public static ConfigEntry<bool> CE_AutoScaleIgnoreOverrides; public static ConfigEntry<bool> CE_AutoScaleCreatures; public static ConfigEntry<string> CE_AutoScaleCreatureHealth; public static ConfigEntry<string> CE_AutoScaleCreatureDamage; public static ConfigEntry<bool> CE_AutoScaleItems; private readonly ConfigurationManagerAttributes AdminConfig = new ConfigurationManagerAttributes { IsAdminOnly = true }; private readonly ConfigurationManagerAttributes ClientConfig = new ConfigurationManagerAttributes { IsAdminOnly = false }; private DateTime _lastReloadTime; private const long RELOAD_DELAY = 10000000L; public static ScalingPlugin Instance => _instance; static ScalingPlugin() { _instance = new ScalingPlugin(); ConfigFileName = "com.orianaventure.mod.WorldScaling.cfg"; string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; VentureScalingLogger = Logger.CreateLogSource("WorldScaling"); CE_GenerateGameData = null; CE_AutoScaleType = null; CE_AutoScaleFactor = null; CE_AutoScaleIgnoreOverrides = null; CE_AutoScaleCreatures = null; CE_AutoScaleCreatureHealth = null; CE_AutoScaleCreatureDamage = null; CE_AutoScaleItems = null; } private ScalingPlugin() { }//IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown private void AddConfig<[<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(2)] T>(string key, string section, string description, bool synced, T value, ref ConfigEntry<T> configEntry) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown string extendedDescription = GetExtendedDescription(description, synced); configEntry = ((BaseUnityPlugin)this).Config.Bind<T>(section, key, value, new ConfigDescription(extendedDescription, (AcceptableValueBase)null, new object[1] { synced ? AdminConfig : ClientConfig })); } public string GetExtendedDescription(string description, bool synchronizedSetting) { return description + (synchronizedSetting ? " [Synced with Server]" : " [Not Synced with Server]"); } public void Awake() { AddConfig("GenerateGameDataFiles", "General", "Finds all items and creatures and creates data files in your config path for viewing only (boolean).", synced: false, value: false, ref CE_GenerateGameData); AddConfig("AutoScaleType", "General", "Auto-scaling type: Vanilla, Linear, Exponential, or Custom (string).", synced: true, "Linear", ref CE_AutoScaleType); AddConfig("AutoScaleFactor", "General", "Auto-scaling factor used for the Auto-scaling type algorithm (float).", synced: true, 0.75f, ref CE_AutoScaleFactor); AddConfig("AutoScaleIgnoreOverrides", "General", "When true ignores the overrides specified in the yaml files (boolean).", synced: true, value: false, ref CE_AutoScaleIgnoreOverrides); AddConfig("ScaleCreatures", "Creatures", "Enable the scaling of creatures (boolean).", synced: true, value: true, ref CE_AutoScaleCreatures); AddConfig("CreaturesHealth", "Creatures", "Override the Base Health distribution for Creatures (comma-separated list of 6 integers) (string).", synced: true, "", ref CE_AutoScaleCreatureHealth); AddConfig("CreaturesDamage", "Creatures", "Override the Base Damage distribution for Creatures (comma-separated list of 6 integers) (string).", synced: true, "", ref CE_AutoScaleCreatureDamage); AddConfig("AutoScaleItems", "Items", "Enable the scaling of Items (boolean).", synced: true, value: true, ref CE_AutoScaleItems); Assembly executingAssembly = Assembly.GetExecutingAssembly(); HarmonyInstance.PatchAll(executingAssembly); SetupWatcher(); } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private void SetupWatcher() { _lastReloadTime = DateTime.Now; FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ReadConfigValues; fileSystemWatcher.Created += ReadConfigValues; fileSystemWatcher.Renamed += ReadConfigValues; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private void ReadConfigValues(object sender, FileSystemEventArgs e) { DateTime now = DateTime.Now; long num = now.Ticks - _lastReloadTime.Ticks; if (File.Exists(ConfigFileFullPath) && num >= 10000000) { try { VentureScalingLogger.LogInfo((object)"Attempting to reload configuration..."); ((BaseUnityPlugin)this).Config.Reload(); } catch { VentureScalingLogger.LogError((object)("There was an issue loading " + ConfigFileName)); return; } _lastReloadTime = now; WorldConfiguration.Instance.SetupScaling(); } } } [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] public interface IScalingConfiguration { bool GetGenerateGameData(); string GetAutoScaleType(); float GetAutoScaleFactor(); bool GetAutoScaleIgnoreOverrides(); bool GetAutoScaleCreatures(); string GetAutoScaleCreatureHealth(); string GetAutoScaleCreatureDamage(); bool GetAutoScaleItems(); } [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] public class ScalingConfiguration : IScalingConfiguration { private static IScalingConfiguration _instance; public static IScalingConfiguration Instance => _instance; static ScalingConfiguration() { _instance = new ScalingConfiguration(); } public ScalingConfiguration() { } public ScalingConfiguration(IScalingConfiguration ScalingConfiguration) { _instance = ScalingConfiguration; } public bool GetGenerateGameData() { return ScalingPlugin.CE_GenerateGameData.Value; } public string GetAutoScaleType() { return ScalingPlugin.CE_AutoScaleType.Value; } public float GetAutoScaleFactor() { return ScalingPlugin.CE_AutoScaleFactor.Value; } public bool GetAutoScaleIgnoreOverrides() { return ScalingPlugin.CE_AutoScaleIgnoreOverrides.Value; } public bool GetAutoScaleCreatures() { return ScalingPlugin.CE_AutoScaleCreatures.Value; } public string GetAutoScaleCreatureHealth() { return ScalingPlugin.CE_AutoScaleCreatureHealth.Value; } public string GetAutoScaleCreatureDamage() { return ScalingPlugin.CE_AutoScaleCreatureDamage.Value; } public bool GetAutoScaleItems() { return ScalingPlugin.CE_AutoScaleItems.Value; } } [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] public class CreatureClassification { public string Name { get; private set; } public WorldConfiguration.Biome BiomeType { get; private set; } public WorldConfiguration.Difficulty CreatureDifficulty { get; private set; } public Dictionary<string, DamageTypes> VanillaAttacks { get; private set; } public float? VanillaHealth { get; private set; } public bool Overridden { get; private set; } public Dictionary<string, CreatureOverrides.AttackOverride> OverrideAttacks { get; private set; } public float? OverrideHealth { get; private set; } public CreatureClassification(string name, WorldConfiguration.Biome? biomeType, WorldConfiguration.Difficulty? creatureDifficulty) { Reset(); Name = name; if (biomeType.HasValue) { BiomeType = biomeType.Value; } if (creatureDifficulty.HasValue) { CreatureDifficulty = creatureDifficulty.Value; } VanillaHealth = null; VanillaAttacks = null; } public void Reset() { BiomeType = WorldConfiguration.Biome.Undefined; CreatureDifficulty = WorldConfiguration.Difficulty.Undefined; Overridden = false; OverrideHealth = null; OverrideAttacks = new Dictionary<string, CreatureOverrides.AttackOverride>(); } public virtual bool IgnoreScaling() { if (WorldConfiguration.Instance.WorldScale == WorldConfiguration.Scaling.Vanilla || (WorldConfiguration.Instance.WorldScale == WorldConfiguration.Scaling.Custom && !Overridden) || CreatureDifficulty == WorldConfiguration.Difficulty.Vanilla) { return true; } return false; } public void UpdateCreature(WorldConfiguration.Biome? biomeType, WorldConfiguration.Difficulty? creatureDifficulty) { if (biomeType.HasValue) { BiomeType = biomeType.Value; } if (creatureDifficulty.HasValue) { CreatureDifficulty = creatureDifficulty.Value; } } public void OverrideCreature(CreatureOverrides.CreatureOverride creatureOverride) { Overridden = true; WorldConfiguration.Biome? biomeType = null; if (creatureOverride.biome.HasValue) { biomeType = (WorldConfiguration.Biome)creatureOverride.biome.Value; } WorldConfiguration.Difficulty? creatureDifficulty = null; if (creatureOverride.difficulty.HasValue) { creatureDifficulty = (WorldConfiguration.Difficulty)creatureOverride.difficulty.Value; } UpdateCreature(biomeType, creatureDifficulty); OverrideHealth = creatureOverride.health; OverrideAttacks = new Dictionary<string, CreatureOverrides.AttackOverride>(); if (creatureOverride.attacks == null) { return; } foreach (CreatureOverrides.AttackOverride attack in creatureOverride.attacks) { if (!Utility.IsNullOrWhiteSpace(attack.name)) { SetOverrideAttack(attack); } } } public void SetVanillaData(float health, List<GameObject> attacks) { SetVanillaHealth(health); SetVanillaAttacks(attacks); } private void SetVanillaAttacks(List<GameObject> attacks) { //IL_009d: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) if (VanillaAttacks != null) { return; } VanillaAttacks = new Dictionary<string, DamageTypes>(); if (attacks == null) { return; } for (int i = 0; i < attacks.Count; i++) { ItemDrop component = attacks[i].GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { ScalingPlugin.VentureScalingLogger.LogWarning((object)("Attack " + ((Object)attacks[i]).name + " not added to creature " + Name + ". ItemDrop not found. Will not override.")); } else if (!VanillaAttacks.ContainsKey(((Object)component).name)) { DamageTypes damages = component.m_itemData.m_shared.m_damages; if (ItemConfiguration.Instance.GetTotalDamage(damages) > 0f) { VanillaAttacks.Add(((Object)component).name, damages); continue; } ScalingPlugin.VentureScalingLogger.LogDebug((object)("Attack for " + ((Object)attacks[i]).name + " not added to creature " + Name + ". Does 0 damage. Will not override.")); } } } private void SetVanillaHealth(float health) { float? vanillaHealth = VanillaHealth; float valueOrDefault = vanillaHealth.GetValueOrDefault(); if (!vanillaHealth.HasValue) { valueOrDefault = health; float? vanillaHealth2 = valueOrDefault; VanillaHealth = vanillaHealth2; } } public bool HealthOverridden() { return OverrideHealth.HasValue; } public float? GetHealth() { if (IgnoreScaling()) { return VanillaHealth; } if (HealthOverridden()) { return OverrideHealth; } float biomeScaling = WorldConfiguration.Instance.GetBiomeScaling(BiomeType); int baseHealth = CreatureConfiguration.Instance.GetBaseHealth(CreatureDifficulty); return ScalingAPI.PrettifyNumber(CreatureConfiguration.Instance.CalculateHealth(biomeScaling, baseHealth)); } public DamageTypes? GetAttack(string name, float maxTotalDamage) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) if (Utility.IsNullOrWhiteSpace(name) || !VanillaAttacks.ContainsKey(name)) { return null; } DamageTypes val = VanillaAttacks[name]; if (IgnoreScaling()) { return val; } if (AttackOverridden(name)) { CreatureOverrides.AttackOverride attackOverride = OverrideAttacks[name]; if (attackOverride.totalDamage.HasValue) { return ItemConfiguration.Instance.CalculateDamageTypesFinal(val, attackOverride.totalDamage.Value, 1f); } DamageTypes damageTypes = CreatureOverrides.GetDamageTypes(attackOverride); if (!attackOverride.pickaxe.HasValue) { damageTypes.m_pickaxe = val.m_pickaxe; } if (!attackOverride.chop.HasValue) { damageTypes.m_chop = val.m_chop; } return damageTypes; } int baseTotalDamage = CreatureConfiguration.Instance.GetBaseTotalDamage(CreatureDifficulty); WorldConfiguration.BiomeData biome = WorldConfiguration.Instance.GetBiome(BiomeType); if (biome != null) { return ItemConfiguration.Instance.CalculateCreatureDamageTypes(biome.ScaleValue, val, baseTotalDamage, maxTotalDamage); } return val; } public bool AttackOverridden(string name) { if (OverrideAttacks == null) { return false; } return OverrideAttacks.ContainsKey(name); } public DamageTypes? GetAttackOverride(string name) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) if (OverrideAttacks.ContainsKey(name)) { return CreatureOverrides.GetDamageTypes(OverrideAttacks[name]); } return null; } public float? GetAttackOverrideTotal(string name) { if (OverrideAttacks.ContainsKey(name)) { return OverrideAttacks[name].totalDamage; } return null; } private void SetOverrideAttack(CreatureOverrides.AttackOverride attack) { if (OverrideAttacks.ContainsKey(attack.name)) { OverrideAttacks[attack.name] = attack; } else { OverrideAttacks.Add(attack.name, attack); } } } [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] public interface ICreatureConfiguration { bool ContainsCreature(string key); void SetBaseHealth(int[] values); int GetBaseHealth(WorldConfiguration.Difficulty difficulty); void SetBaseDamage(int[] values); int GetBaseTotalDamage(WorldConfiguration.Difficulty difficulty); void AddCreatureConfiguration(string name, WorldConfiguration.Biome? biome, WorldConfiguration.Difficulty? difficulty); void UpdateCreatures(); void VanillaReset(); } [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] public class CreatureConfiguration : ICreatureConfiguration { private static readonly CreatureConfiguration _instance; protected Dictionary<string, CreatureClassification> _creatureData = new Dictionary<string, CreatureClassification>(); private int[] _baseHealth = new int[6] { 5, 10, 30, 50, 200, 500 }; private int[] _baseDamage = new int[6] { 5, 15, 20, 25, 30, 30 }; public static CreatureConfiguration Instance => _instance; static CreatureConfiguration() { _instance = new CreatureConfiguration(); } protected CreatureConfiguration() { } public bool ContainsCreature(string key) { return _creatureData.ContainsKey(key); } public void SetBaseHealth(int[] values) { if (values != null && values.Length == 6) { _baseHealth = values; } } public int GetBaseHealth(WorldConfiguration.Difficulty difficulty) { return difficulty switch { WorldConfiguration.Difficulty.Harmless => _baseHealth[0], WorldConfiguration.Difficulty.Novice => _baseHealth[1], WorldConfiguration.Difficulty.Average => _baseHealth[2], WorldConfiguration.Difficulty.Intermediate => _baseHealth[3], WorldConfiguration.Difficulty.Expert => _baseHealth[4], WorldConfiguration.Difficulty.Boss => _baseHealth[5], _ => _baseHealth[2], }; } public int CalculateHealth(float scale, int baseHealth) { return (int)(scale * (float)baseHealth); } public void SetBaseDamage(int[] values) { if (values != null && values.Length == 6) { _baseDamage = values; } } public int GetBaseTotalDamage(WorldConfiguration.Difficulty difficulty) { return difficulty switch { WorldConfiguration.Difficulty.Harmless => _baseDamage[0], WorldConfiguration.Difficulty.Novice => _baseDamage[1], WorldConfiguration.Difficulty.Average => _baseDamage[2], WorldConfiguration.Difficulty.Intermediate => _baseDamage[3], WorldConfiguration.Difficulty.Expert => _baseDamage[4], WorldConfiguration.Difficulty.Boss => _baseDamage[5], _ => _baseDamage[2], }; } private void ConfigureAttacks(CreatureClassification cc) { if (cc.VanillaAttacks == null || cc.VanillaAttacks.Count < 1) { return; } try { float maxCreatureDamage = GetMaxCreatureDamage(cc.VanillaAttacks); if (maxCreatureDamage <= 0f) { return; } foreach (KeyValuePair<string, DamageTypes> vanillaAttack in cc.VanillaAttacks) { ScalingAPI.GetItemDrop(vanillaAttack.Key, out var item); if ((Object)(object)item != (Object)null) { DamageTypes? attack = cc.GetAttack(vanillaAttack.Key, maxCreatureDamage); ConfigureAttack(ref item, attack); continue; } ScalingPlugin.VentureScalingLogger.LogWarning((object)("Failed to configure \"" + vanillaAttack.Key + "\" for " + cc.Name + ". ItemDrop data does not exist!")); } } catch (Exception ex) { ScalingPlugin.VentureScalingLogger.LogDebug((object)("Error configuring attacks for " + cc.Name + ". Skipping.")); ScalingPlugin.VentureScalingLogger.LogDebug((object)ex); } } private void ConfigureAttack(ref ItemDrop item, DamageTypes? value) { ItemConfiguration.Instance.UpdateWeapon(ref item, value, 1, null, playerItem: false); } protected float GetMaxCreatureDamage(Dictionary<string, DamageTypes> attacks) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) float num = 0f; if (attacks != null) { foreach (DamageTypes value in attacks.Values) { float totalDamage = ItemConfiguration.Instance.GetTotalDamage(value); if (totalDamage > num) { num = totalDamage; } } } return num; } public void Initialize() { foreach (CreatureClassification value2 in _creatureData.Values) { value2.Reset(); } WorldConfiguration.Biome value = WorldConfiguration.Biome.Meadow; AddCreatureConfiguration("Eikthyr", value, WorldConfiguration.Difficulty.Boss); AddCreatureConfiguration("Boar_piggy", value, WorldConfiguration.Difficulty.Harmless); AddCreatureConfiguration("Boar", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("Deer", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("Greyling", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("Neck", value, WorldConfiguration.Difficulty.Harmless); value = WorldConfiguration.Biome.BlackForest; AddCreatureConfiguration("gd_king", value, WorldConfiguration.Difficulty.Boss); AddCreatureConfiguration("Skeleton_Hildir", value, WorldConfiguration.Difficulty.Boss); AddCreatureConfiguration("Ghost", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("Greydwarf", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("Greydwarf_Elite", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("Greydwarf_Shaman", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("Skeleton", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("Skeleton_NoArcher", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("Skeleton_Poison", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("TentaRoot", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("Troll", value, WorldConfiguration.Difficulty.Expert); value = WorldConfiguration.Biome.Swamp; AddCreatureConfiguration("Bonemass", value, WorldConfiguration.Difficulty.Boss); AddCreatureConfiguration("Abomination", value, WorldConfiguration.Difficulty.Expert); AddCreatureConfiguration("Blob", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("BlobElite", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("Draugr_Elite", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("Draugr", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("Draugr_Ranged", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("Leech", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("Surtling", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("Wraith", value, WorldConfiguration.Difficulty.Intermediate); value = WorldConfiguration.Biome.Mountain; AddCreatureConfiguration("Dragon", value, WorldConfiguration.Difficulty.Boss); AddCreatureConfiguration("Skeleton_Hildir", value, WorldConfiguration.Difficulty.Boss); AddCreatureConfiguration("Bat", value, WorldConfiguration.Difficulty.Harmless); AddCreatureConfiguration("Fenring_Cultist", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("Fenring", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("Hatchling", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("StoneGolem", value, WorldConfiguration.Difficulty.Expert); AddCreatureConfiguration("Ulv", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("Wolf_cub", value, WorldConfiguration.Difficulty.Harmless); AddCreatureConfiguration("Wolf", value, WorldConfiguration.Difficulty.Novice); value = WorldConfiguration.Biome.Plain; AddCreatureConfiguration("GoblinKing", value, WorldConfiguration.Difficulty.Boss); AddCreatureConfiguration("BlobTar", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("Deathsquito", value, WorldConfiguration.Difficulty.Harmless); AddCreatureConfiguration("Goblin", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("GoblinArcher", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("GoblinShaman", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("GoblinBrute", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("Lox_Calf", value, WorldConfiguration.Difficulty.Harmless); AddCreatureConfiguration("Lox", value, WorldConfiguration.Difficulty.Intermediate); value = WorldConfiguration.Biome.Ocean; AddCreatureConfiguration("Serpent", value, WorldConfiguration.Difficulty.Expert); value = WorldConfiguration.Biome.Mistland; AddCreatureConfiguration("SeekerQueen", value, WorldConfiguration.Difficulty.Boss); AddCreatureConfiguration("Dverger", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("DvergerMage", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("DvergerMageFire", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("DvergerMageIce", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("DvergerMageSupport", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("Gjall", value, WorldConfiguration.Difficulty.Expert); AddCreatureConfiguration("Hare", value, WorldConfiguration.Difficulty.Harmless); AddCreatureConfiguration("Seeker", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("SeekerBrood", value, WorldConfiguration.Difficulty.Harmless); AddCreatureConfiguration("SeekerBrute", value, WorldConfiguration.Difficulty.Expert); AddCreatureConfiguration("Tick", value, WorldConfiguration.Difficulty.Novice); value = WorldConfiguration.Biome.AshLand; AddCreatureConfiguration("Fader", value, WorldConfiguration.Difficulty.Boss); AddCreatureConfiguration("Asksvin", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("Asksvin_hatchling", value, WorldConfiguration.Difficulty.Harmless); AddCreatureConfiguration("BlobLava", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("BonemawSerpent", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("Charred_Archer", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("Charred_Archer_Fader", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("Charred_Mage", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("Charred_Melee", value, WorldConfiguration.Difficulty.Intermediate); AddCreatureConfiguration("Charred_Melee_Dyrnwyn", value, WorldConfiguration.Difficulty.Expert); AddCreatureConfiguration("Charred_Melee_Fader", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("Charred_Twitcher", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("Charred_Twitcher_Summoned", value, WorldConfiguration.Difficulty.Novice); AddCreatureConfiguration("FallenValkyrie", value, WorldConfiguration.Difficulty.Expert); AddCreatureConfiguration("Morgen", value, WorldConfiguration.Difficulty.Expert); AddCreatureConfiguration("Morgen_NonSleeping", value, WorldConfiguration.Difficulty.Expert); AddCreatureConfiguration("Volture", value, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("staff_greenroots_tentaroot", WorldConfiguration.Biome.AshLand, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("Skeleton_Friendly", WorldConfiguration.Biome.Mistland, WorldConfiguration.Difficulty.Average); AddCreatureConfiguration("Troll_Summoned", WorldConfiguration.Biome.AshLand, WorldConfiguration.Difficulty.Expert); if (WorldConfiguration.Instance.WorldScale != 0 && !ScalingConfiguration.Instance.GetAutoScaleIgnoreOverrides()) { ReadCustomValues(); } CreateVanillaBackup(); } public void AddCreatureConfiguration(string name, WorldConfiguration.Biome? biome, WorldConfiguration.Difficulty? difficulty) { if (!Utility.IsNullOrWhiteSpace(name)) { if (_creatureData.ContainsKey(name)) { _creatureData[name].UpdateCreature(biome, difficulty); } else { _creatureData.Add(name, new CreatureClassification(name, biome, difficulty)); } } } public void AddCreatureConfiguration(CreatureOverrides.CreatureOverride creatureOverride) { if (creatureOverride != null && !Utility.IsNullOrWhiteSpace(creatureOverride.name)) { AddCreatureConfiguration(creatureOverride.name, null, null); _creatureData[creatureOverride.name].OverrideCreature(creatureOverride); } } public void UpdateCreatures() { foreach (CreatureClassification value in _creatureData.Values) { Humanoid creature = ScalingAPI.GetHumanoid(value.Name); if ((Object)(object)creature != (Object)null) { float? health = value.GetHealth(); if (health.HasValue) { UpdateCreature(health.Value, ref creature); } ConfigureAttacks(value); } } } private void UpdateCreature(float health, ref Humanoid creature) { float health2 = ((Character)creature).m_health; ((Character)creature).m_health = health; ScalingPlugin.VentureScalingLogger.LogDebug((object)$"{((Object)creature).name}: Health updated from {health2} to {((Character)creature).m_health}."); } protected virtual void CreateVanillaBackup() { ScalingPlugin.VentureScalingLogger.LogInfo((object)"Configuring vanilla backup for Creature data..."); foreach (CreatureClassification value in _creatureData.Values) { Humanoid humanoid = ScalingAPI.GetHumanoid(value.Name); if (!((Object)(object)humanoid != (Object)null)) { continue; } List<GameObject> list = new List<GameObject>(); if (humanoid.m_defaultItems != null) { list.AddRange(humanoid.m_defaultItems); } if (humanoid.m_randomWeapon != null) { list.AddRange(humanoid.m_randomWeapon); } if (humanoid.m_randomSets != null) { for (int i = 0; i < humanoid.m_randomSets.Length; i++) { if (humanoid.m_randomSets[i].m_items != null) { list.AddRange(humanoid.m_randomSets[i].m_items); } } } value.SetVanillaData(((Character)humanoid).m_health, list); } } public void VanillaReset() { //IL_0098: Unknown result type (might be due to invalid IL or missing references) foreach (CreatureClassification value in _creatureData.Values) { Humanoid humanoid = ScalingAPI.GetHumanoid(value.Name); if (!((Object)(object)humanoid != (Object)null)) { continue; } if (value.VanillaHealth.HasValue) { ((Character)humanoid).m_health = value.VanillaHealth.Value; } if (value.VanillaAttacks == null) { continue; } foreach (KeyValuePair<string, DamageTypes> vanillaAttack in value.VanillaAttacks) { ScalingAPI.GetItemDrop(vanillaAttack.Key, out var item); if ((Object)(object)item != (Object)null) { ConfigureAttack(ref item, vanillaAttack.Value); } } } } protected virtual void ReadCustomValues() { try { CreatureOverrides.CreatureOverridesList creatureOverridesList = CreatureOverrides.ReadYaml(); if (creatureOverridesList == null) { return; } ScalingPlugin.VentureScalingLogger.LogDebug((object)"Deserializer successfully parsed yaml data."); ScalingPlugin.VentureScalingLogger.LogDebug((object)creatureOverridesList.ToString()); foreach (CreatureOverrides.CreatureOverride creature in creatureOverridesList.creatures) { AddCreatureConfiguration(creature); } } catch (Exception ex) { ScalingPlugin.VentureScalingLogger.LogWarning((object)"Error loading VWS.CreatureOverrides.yaml file."); ScalingPlugin.VentureScalingLogger.LogWarning((object)ex); ScalingPlugin.VentureScalingLogger.LogWarning((object)"Continuing without custom values..."); } } } [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] public class CreatureOverrides { [Serializable] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] public class CreatureOverridesList { public IEnumerable<CreatureOverride> creatures { get; set; } public override string ToString() { if (creatures == null) { return "No Data."; } string text = $"Creatures in list {creatures.Count()}:\n"; foreach (CreatureOverride creature in creatures) { text += creature.ToString(); } return text; } } [Serializable] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] public class CreatureOverride { public string name { get; set; } public int? biome { get; set; } public int? difficulty { get; set; } public float? health { get; set; } public IEnumerable<AttackOverride> attacks { get; set; } public override string ToString() { string text = $"{name}: Biome {biome}, Difficulty {difficulty}, Health {health}, Attacks:\n"; if (attacks != null) { foreach (AttackOverride attack in attacks) { text += attack.ToString(); } } return text; } } [Serializable] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] public class AttackOverride { public string name { get; set; } public float? totalDamage { get; set; } public float? damage { get; set; } public float? blunt { get; set; } public float? slash { get; set; } public float? pierce { get; set; } public float? fire { get; set; } public float? frost { get; set; } public float? lightning { get; set; } public float? poison { get; set; } public float? spirit { get; set; } public float? chop { get; set; } public float? pickaxe { get; set; } public override string ToString() { string text = ""; if (!Utility.IsNullOrWhiteSpace(name)) { text = text + "+" + name + ": "; } if (totalDamage.HasValue) { return text + $"total damage {totalDamage}\n"; } return text + $"damage {damage}, blunt {blunt}, slash {slash}, pierce {pierce}, fire {fire}, frost {frost}, " + $"lightning {lightning}, poison {poison}, spirit {spirit}, chop {chop}, pickaxe {pickaxe}\n"; } } private static string filePath; public static CreatureOverridesList ReadYaml() { if (File.Exists(filePath)) { using (new StreamReader(filePath)) { string input = File.ReadAllText(filePath); return new DeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build().Deserialize<CreatureOverridesList>(input); } } ScalingPlugin.VentureScalingLogger.LogWarning((object)"No yaml file found, to use overrides the VWS.CreatureOverrides.yaml file must be in your bepinex config folder."); return null; } public static DamageTypes GetDamageTypes(AttackOverride attack) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) DamageTypes result = default(DamageTypes); result.m_damage = ((!attack.damage.HasValue) ? 0f : attack.damage.Value); result.m_blunt = ((!attack.blunt.HasValue) ? 0f : attack.blunt.Value); result.m_slash = ((!attack.slash.HasValue) ? 0f : attack.slash.Value); result.m_pierce = ((!attack.pierce.HasValue) ? 0f : attack.pierce.Value); result.m_fire = ((!attack.fire.HasValue) ? 0f : attack.fire.Value); result.m_frost = ((!attack.frost.HasValue) ? 0f : attack.frost.Value); result.m_lightning = ((!attack.lightning.HasValue) ? 0f : attack.lightning.Value); result.m_poison = ((!attack.poison.HasValue) ? 0f : attack.poison.Value); result.m_spirit = ((!attack.spirit.HasValue) ? 0f : attack.spirit.Value); result.m_chop = ((!attack.chop.HasValue) ? 0f : attack.chop.Value); result.m_pickaxe = ((!attack.pickaxe.HasValue) ? 0f : attack.pickaxe.Value); return result; } static CreatureOverrides() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; filePath = configPath + directorySeparatorChar + "VWS.CreatureOverrides.yaml"; } } public enum ItemCategory { Undefined = -1, Weapon, Armor, Shield } public enum ItemType { Undefined = -1, None = 0, Shield = 1, Helmet = 2, Chest = 3, Legs = 4, Shoulder = 5, Utility = 6, Tool = 7, PickAxe = 8, Axe = 9, Bow = 10, Ammo = 11, Sword = 20, Knife = 21, Mace = 22, Sledge = 23, Atgeir = 25, Battleaxe = 26, Primative = 27, Spear = 28, TowerShield = 29, BucklerShield = 30, PrimativeArmor = 31, Bolt = 32, Crossbow = 33, HelmetRobe = 34, ChestRobe = 35, LegsRobe = 36, Fist = 37, TurretBolt = 38, GemAxe = 39, GemBow = 40, GemSword = 41, GemKnife = 42, GemMace = 43, GemSledge = 44, GemAtgeir = 45, GemBattleaxe = 46, GemSpear = 47, GemCrossbow = 48, HelmetMedium = 49, ChestMedium = 50, LegsMedium = 51, StaffRapid = 52, StaffSlow = 53, MagicShield = 54 } [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] public class ItemClassification { public string Name { get; private set; } public WorldConfiguration.Biome BiomeType { get; private set; } public ItemType ItemType { get; private set; } public ItemCategory ItemCategory { get; private set; } public int? VanillaUpgradeLevels { get; private set; } public float? VanillaValue { get; private set; } public float? VanillaUpgradeValue { get; private set; } public DamageTypes? VanillaDamageValue { get; private set; } public DamageTypes? VanillaUpgradeDamageValue { get; private set; } public bool Overridden { get; private set; } public float? OverrideValue { get; private set; } protected CreatureOverrides.AttackOverride OverrideDamageValue { get; private set; } protected CreatureOverrides.AttackOverride OverrideUpgradeDamageValue { get; private set; } protected float? OverrideUpgradeValue { get; private set; } protected int? OverrideUpgradeLevels { get; private set; } public ItemClassification(string name, WorldConfiguration.Biome? biomeType, ItemType? itemType) { Reset(); Name = name; if (biomeType.HasValue) { BiomeType = biomeType.Value; } if (itemType.HasValue) { ItemType = itemType.Value; } ItemCategory = GetItemCategory(itemType); VanillaUpgradeLevels = null; VanillaValue = null; VanillaDamageValue = null; VanillaUpgradeValue = null; VanillaUpgradeDamageValue = null; } public void Reset() { BiomeType = WorldConfiguration.Biome.Undefined; ItemType = ItemType.Undefined; ItemCategory = ItemCategory.Undefined; Overridden = false; OverrideUpgradeLevels = null; OverrideValue = null; OverrideDamageValue = null; OverrideUpgradeValue = null; OverrideUpgradeDamageValue = null; } public virtual bool IgnoreScaling() { if (WorldConfiguration.Instance.WorldScale == WorldConfiguration.Scaling.Vanilla || (WorldConfiguration.Instance.WorldScale == WorldConfiguration.Scaling.Custom && !Overridden)) { return true; } return false; } public void UpdateItem(WorldConfiguration.Biome? biomeType, ItemType? itemType) { if (biomeType.HasValue) { BiomeType = biomeType.Value; } if (itemType.HasValue) { ItemType = itemType.Value; ItemCategory = GetItemCategory(itemType); } } public void OverrideItem(ItemOverrides.ItemOverride item) { Overridden = true; WorldConfiguration.Biome? biomeType = null; if (item.biome.HasValue) { biomeType = (WorldConfiguration.Biome)item.biome.Value; } ItemType? itemType = null; if (item.itemType.HasValue) { itemType = (ItemType)item.itemType.Value; } UpdateItem(biomeType, itemType); OverrideUpgradeLevels = item.quality; OverrideValue = item.value; OverrideDamageValue = item.damageValue; OverrideUpgradeValue = item.upgradeValue; OverrideUpgradeDamageValue = item.upgradeDamageValue; } public static ItemCategory GetItemCategory(ItemType? itemType) { if (!itemType.HasValue) { return ItemCategory.Undefined; } switch (itemType) { case ItemType.Shield: case ItemType.TowerShield: case ItemType.BucklerShield: case ItemType.MagicShield: return ItemCategory.Shield; case ItemType.Helmet: case ItemType.Chest: case ItemType.Legs: case ItemType.Shoulder: case ItemType.Utility: case ItemType.PrimativeArmor: case ItemType.HelmetRobe: case ItemType.ChestRobe: case ItemType.LegsRobe: case ItemType.HelmetMedium: case ItemType.ChestMedium: case ItemType.LegsMedium: return ItemCategory.Armor; case ItemType.Tool: case ItemType.PickAxe: case ItemType.Axe: case ItemType.Bow: case ItemType.Ammo: case ItemType.Sword: case ItemType.Knife: case ItemType.Mace: case ItemType.Sledge: case ItemType.Atgeir: case ItemType.Battleaxe: case ItemType.Primative: case ItemType.Spear: case ItemType.Bolt: case ItemType.Crossbow: case ItemType.Fist: case ItemType.TurretBolt: case ItemType.GemAxe: case ItemType.GemBow: case ItemType.GemSword: case ItemType.GemKnife: case ItemType.GemMace: case ItemType.GemSledge: case ItemType.GemAtgeir: case ItemType.GemBattleaxe: case ItemType.GemSpear: case ItemType.GemCrossbow: case ItemType.StaffRapid: case ItemType.StaffSlow: return ItemCategory.Weapon; default: return ItemCategory.Undefined; } } private bool ItemTypeDefined() { if (ItemType != ItemType.Undefined) { return ItemType != ItemType.None; } return false; } public float? GetValue() { if (IgnoreScaling()) { return VanillaValue; } if (OverrideValue.HasValue) { return OverrideValue; } if (BiomeType != WorldConfiguration.Biome.Undefined && ItemTypeDefined()) { float biomeScaling = WorldConfiguration.Instance.GetBiomeScaling(BiomeType); return (int)(GetBaseValue() * biomeScaling); } return VanillaValue; } private float GetBaseValue() { return ItemConfiguration.Instance.GetBaseItemValue(ItemType); } public float? GetUpgradeValue() { if (IgnoreScaling()) { return VanillaUpgradeValue; } if (OverrideUpgradeValue.HasValue) { return OverrideUpgradeValue; } if (BiomeType != WorldConfiguration.Biome.Undefined && ItemTypeDefined()) { int? upgradeLevels = GetUpgradeLevels(); if (upgradeLevels.HasValue) { return ItemConfiguration.Instance.CalculateUpgradeValue(BiomeType, GetBaseValue(), upgradeLevels.Value); } } return VanillaUpgradeValue; } public int? GetUpgradeLevels() { if (OverrideUpgradeLevels.HasValue) { return OverrideUpgradeLevels; } return VanillaUpgradeLevels; } public DamageTypes? GetDamageValue() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) if (IgnoreScaling()) { return VanillaDamageValue; } if (OverrideDamageValue != null) { if (OverrideDamageValue.totalDamage.HasValue && VanillaDamageValue.HasValue) { return ItemConfiguration.Instance.CalculateDamageTypesFinal(VanillaDamageValue.Value, OverrideDamageValue.totalDamage.Value, 1f); } DamageTypes damageTypes = CreatureOverrides.GetDamageTypes(OverrideDamageValue); if (VanillaDamageValue.HasValue) { if (!OverrideDamageValue.pickaxe.HasValue) { damageTypes.m_pickaxe = VanillaDamageValue.Value.m_pickaxe; } if (!OverrideDamageValue.chop.HasValue) { damageTypes.m_chop = VanillaDamageValue.Value.m_chop; } } return damageTypes; } if (BiomeType != WorldConfiguration.Biome.Undefined && VanillaDamageValue.HasValue && ItemTypeDefined()) { WorldConfiguration.BiomeData biome = WorldConfiguration.Instance.GetBiome(BiomeType); return ItemConfiguration.Instance.CalculateItemDamageTypes(biome.ScaleValue, VanillaDamageValue.Value, GetBaseValue()); } return VanillaDamageValue; } public DamageTypes? GetUpgradeDamageValue() { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) if (IgnoreScaling()) { return VanillaUpgradeDamageValue; } if (OverrideUpgradeDamageValue != null) { if (OverrideUpgradeDamageValue.totalDamage.HasValue && VanillaDamageValue.HasValue) { return ItemConfiguration.Instance.CalculateDamageTypesFinal(VanillaUpgradeDamageValue.Value, OverrideUpgradeDamageValue.totalDamage.Value, 1f); } return CreatureOverrides.GetDamageTypes(OverrideUpgradeDamageValue); } if (BiomeType != WorldConfiguration.Biome.Undefined && VanillaDamageValue.HasValue && ItemTypeDefined()) { return ItemConfiguration.Instance.CalculateUpgradeValue(BiomeType, VanillaUpgradeDamageValue.Value, GetBaseValue(), GetUpgradeLevels().Value); } return VanillaUpgradeDamageValue; } public void SetVanillaData(float value, int upgrades, float upgradeValue) { float? vanillaValue = VanillaValue; float valueOrDefault = vanillaValue.GetValueOrDefault(); if (!vanillaValue.HasValue) { valueOrDefault = value; float? vanillaValue2 = valueOrDefault; VanillaValue = vanillaValue2; } int? vanillaUpgradeLevels = VanillaUpgradeLevels; int valueOrDefault2 = vanillaUpgradeLevels.GetValueOrDefault(); if (!vanillaUpgradeLevels.HasValue) { valueOrDefault2 = upgrades; int? vanillaUpgradeLevels2 = valueOrDefault2; VanillaUpgradeLevels = vanillaUpgradeLevels2; } vanillaValue = VanillaUpgradeValue; valueOrDefault = vanillaValue.GetValueOrDefault(); if (!vanillaValue.HasValue) { valueOrDefault = upgradeValue; float? vanillaValue2 = valueOrDefault; VanillaUpgradeValue = vanillaValue2; } } public void SetVanillaData(DamageTypes damage, int upgrades, DamageTypes upgradeDamage) { //IL_0009: 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_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) DamageTypes? vanillaDamageValue = VanillaDamageValue; DamageTypes valueOrDefault = vanillaDamageValue.GetValueOrDefault(); if (!vanillaDamageValue.HasValue) { valueOrDefault = damage; DamageTypes? vanillaDamageValue2 = valueOrDefault; VanillaDamageValue = vanillaDamageValue2; } int? vanillaUpgradeLevels = VanillaUpgradeLevels; int valueOrDefault2 = vanillaUpgradeLevels.GetValueOrDefault(); if (!vanillaUpgradeLevels.HasValue) { valueOrDefault2 = upgrades; int? vanillaUpgradeLevels2 = valueOrDefault2; VanillaUpgradeLevels = vanillaUpgradeLevels2; } vanillaDamageValue = VanillaUpgradeDamageValue; valueOrDefault = vanillaDamageValue.GetValueOrDefault(); if (!vanillaDamageValue.HasValue) { valueOrDefault = upgradeDamage; DamageTypes? vanillaDamageValue2 = valueOrDefault; VanillaUpgradeDamageValue = vanillaDamageValue2; } } } [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] public interface IItemConfiguration { float GetTotalDamage(DamageTypes OriginalDamage); DamageTypes CalculateCreatureDamageTypes(float biomeScale, DamageTypes OriginalDamage, float baseTotalDamage, float maxTotalDamage); DamageTypes CalculateItemDamageTypes(float biomeScale, DamageTypes originalDamage, float baseTotalDamage); void UpdateWeapon(ref ItemDrop item, DamageTypes? value, int? upgrades, DamageTypes? upgradeValue, bool playerItem = true); void UpdateArmor(ref ItemDrop item, float? value, int? upgrades, float? upgradeValue); void UpdateShield(ref ItemDrop item, float? value, int? upgrades, float? upgradeValue); void UpdateItems(); void VanillaReset(); } [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] public class ItemConfiguration : IItemConfiguration { private static readonly IItemConfiguration _instance; protected Dictionary<ItemType, float> _itemBaseValues = new Dictionary<ItemType, float>(); protected Dictionary<string, ItemClassification> _itemData = new Dictionary<string, ItemClassification>(); public static ItemConfiguration Instance => _instance as ItemConfiguration; static ItemConfiguration() { _instance = new ItemConfiguration(); } protected ItemConfiguration() { } public float GetBaseItemValue(ItemType itemType) { if (_itemBaseValues.ContainsKey(itemType)) { return _itemBaseValues[itemType]; } return 0f; } public void AddBaseItemValue(ItemType type, float value) { if (_itemBaseValues.ContainsKey(type)) { _itemBaseValues[type] = value; } else { _itemBaseValues.Add(type, value); } } public void AddBaseItemValue(ItemOverrides.BaseItemValueOverride item) { if (item.itemType.HasValue && item.value.HasValue) { ItemType value = (ItemType)item.itemType.Value; AddBaseItemValue(value, item.value.Value); } } public void Initialize() { foreach (ItemClassification value in _itemData.Values) { value.Reset(); } InitializeBaseArmorValues(); InitializeBaseDamageValues(); InitializeWeapons(); InitializeArmor(); InitializeShields(); if (WorldConfiguration.Instance.WorldScale != 0 && !ScalingConfiguration.Instance.GetAutoScaleIgnoreOverrides()) { ReadCustomValues(); } CreateVanillaBackup(); } public void AddItemConfiguration(string name, WorldConfiguration.Biome? biome, ItemType? itemType) { if (!Utility.IsNullOrWhiteSpace(name)) { if (_itemData.ContainsKey(name)) { _itemData[name].UpdateItem(biome, itemType); } else { _itemData.Add(name, new ItemClassification(name, biome, itemType)); } } } public void AddItemConfiguration(ItemOverrides.ItemOverride itemOverride) { if (itemOverride != null && !Utility.IsNullOrWhiteSpace(itemOverride.name)) { AddItemConfiguration(itemOverride.name, null, null); _itemData[itemOverride.name].OverrideItem(itemOverride); } } public void UpdateItems() { foreach (ItemClassification value in _itemData.Values) { ScalingAPI.GetItemDrop(value.Name, out var item); if ((Object)(object)item == (Object)null) { ScalingPlugin.VentureScalingLogger.LogWarning((object)("Failed to configure Item: " + value.Name + ".")); } else if (value.ItemCategory == ItemCategory.Weapon) { UpdateWeapon(ref item, value.GetDamageValue(), value.GetUpgradeLevels(), value.GetUpgradeDamageValue()); } else if (value.ItemCategory == ItemCategory.Armor) { UpdateArmor(ref item, value.GetValue(), value.GetUpgradeLevels(), value.GetUpgradeValue()); } else if (value.ItemCategory == ItemCategory.Shield) { UpdateShield(ref item, value.GetValue(), value.GetUpgradeLevels(), value.GetUpgradeValue()); } } } protected virtual void CreateVanillaBackup() { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) ScalingPlugin.VentureScalingLogger.LogInfo((object)"Configuring vanilla backup for Item data..."); foreach (ItemClassification value in _itemData.Values) { ScalingAPI.GetItemDrop(value.Name, out var item); if ((Object)(object)item != (Object)null) { if (value.ItemCategory == ItemCategory.Weapon) { DamageTypes damages = item.m_itemData.m_shared.m_damages; int maxQuality = item.m_itemData.m_shared.m_maxQuality; DamageTypes damagesPerLevel = item.m_itemData.m_shared.m_damagesPerLevel; value.SetVanillaData(damages, maxQuality, damagesPerLevel); } else if (value.ItemCategory == ItemCategory.Armor) { float armor = item.m_itemData.m_shared.m_armor; int maxQuality2 = item.m_itemData.m_shared.m_maxQuality; float armorPerLevel = item.m_itemData.m_shared.m_armorPerLevel; value.SetVanillaData(armor, maxQuality2, armorPerLevel); } else if (value.ItemCategory == ItemCategory.Shield) { float blockPower = item.m_itemData.m_shared.m_blockPower; int maxQuality3 = item.m_itemData.m_shared.m_maxQuality; float blockPowerPerLevel = item.m_itemData.m_shared.m_blockPowerPerLevel; value.SetVanillaData(blockPower, maxQuality3, blockPowerPerLevel); } } else { ScalingPlugin.VentureScalingLogger.LogDebug((object)("Vanilla backup for " + value.Name + " not created, ItemDrop not found.")); } } } public void VanillaReset() { foreach (ItemClassification value in _itemData.Values) { ScalingAPI.GetItemDrop(value.Name, out var item); if ((Object)(object)item != (Object)null) { if (value.ItemCategory == ItemCategory.Weapon) { UpdateWeapon(ref item, value.VanillaDamageValue, value.VanillaUpgradeLevels, value.VanillaUpgradeDamageValue); } else if (value.ItemCategory == ItemCategory.Armor) { UpdateArmor(ref item, value.VanillaValue, value.VanillaUpgradeLevels, value.VanillaUpgradeValue); } else if (value.ItemCategory == ItemCategory.Shield) { UpdateShield(ref item, value.VanillaValue, value.VanillaUpgradeLevels, value.VanillaUpgradeValue); } } } } protected virtual void ReadCustomValues() { try { ItemOverrides.ItemOverridesList itemOverridesList = ItemOverrides.ReadYaml(); if (itemOverridesList == null) { return; } ScalingPlugin.VentureScalingLogger.LogDebug((object)"Deserializer successfully parsed yaml data."); ScalingPlugin.VentureScalingLogger.LogDebug((object)itemOverridesList.ToString()); foreach (ItemOverrides.ItemOverride item in itemOverridesList.items) { AddItemConfiguration(item); } foreach (ItemOverrides.BaseItemValueOverride baseItemValue in itemOverridesList.baseItemValues) { AddBaseItemValue(baseItemValue); } } catch (Exception ex) { ScalingPlugin.VentureScalingLogger.LogWarning((object)"Error loading VWS.ItemOverrides.yaml file."); ScalingPlugin.VentureScalingLogger.LogWarning((object)ex); ScalingPlugin.VentureScalingLogger.LogWarning((object)"Continuing without custom values..."); } } private void InitializeBaseArmorValues() { AddBaseItemValue(ItemType.Shoulder, 1f); AddBaseItemValue(ItemType.PrimativeArmor, 2f); AddBaseItemValue(ItemType.Helmet, 4f); AddBaseItemValue(ItemType.Chest, 4f); AddBaseItemValue(ItemType.Legs, 4f); AddBaseItemValue(ItemType.HelmetMedium, 3f); AddBaseItemValue(ItemType.ChestMedium, 3f); AddBaseItemValue(ItemType.LegsMedium, 3f); AddBaseItemValue(ItemType.HelmetRobe, 2f); AddBaseItemValue(ItemType.ChestRobe, 2f); AddBaseItemValue(ItemType.LegsRobe, 2f); AddBaseItemValue(ItemType.BucklerShield, 8f); AddBaseItemValue(ItemType.Shield, 10f); AddBaseItemValue(ItemType.TowerShield, 15f); AddBaseItemValue(ItemType.MagicShield, 10f); } private void InitializeArmor() { AddItemConfiguration("ArmorRagsChest", WorldConfiguration.Biome.Meadow, ItemType.PrimativeArmor); AddItemConfiguration("ArmorRagsLegs", WorldConfiguration.Biome.Meadow, ItemType.PrimativeArmor); AddItemConfiguration("HelmetLeather", WorldConfiguration.Biome.Meadow, ItemType.Helmet); AddItemConfiguration("ArmorLeatherChest", WorldConfiguration.Biome.Meadow, ItemType.Chest); AddItemConfiguration("ArmorLeatherLegs", WorldConfiguration.Biome.Meadow, ItemType.Legs); AddItemConfiguration("HelmetBronze", WorldConfiguration.Biome.BlackForest, ItemType.Helmet); AddItemConfiguration("ArmorBronzeChest", WorldConfiguration.Biome.BlackForest, ItemType.Chest); AddItemConfiguration("ArmorBronzeLegs", WorldConfiguration.Biome.BlackForest, ItemType.Legs); AddItemConfiguration("HelmetTrollLeather", WorldConfiguration.Biome.BlackForest, ItemType.HelmetRobe); AddItemConfiguration("ArmorTrollLeatherChest", WorldConfiguration.Biome.BlackForest, ItemType.ChestRobe); AddItemConfiguration("ArmorTrollLeatherLegs", WorldConfiguration.Biome.BlackForest, ItemType.LegsRobe); AddItemConfiguration("HelmetIron", WorldConfiguration.Biome.Swamp, ItemType.Helmet); AddItemConfiguration("ArmorIronChest", WorldConfiguration.Biome.Swamp, ItemType.Chest); AddItemConfiguration("ArmorIronLegs", WorldConfiguration.Biome.Swamp, ItemType.Legs); AddItemConfiguration("HelmetRoot", WorldConfiguration.Biome.Swamp, ItemType.HelmetRobe); AddItemConfiguration("ArmorRootChest", WorldConfiguration.Biome.Swamp, ItemType.ChestRobe); AddItemConfiguration("ArmorRootLegs", WorldConfiguration.Biome.Swamp, ItemType.LegsRobe); AddItemConfiguration("HelmetFenring", WorldConfiguration.Biome.Mountain, ItemType.HelmetRobe); AddItemConfiguration("ArmorFenringChest", WorldConfiguration.Biome.Mountain, ItemType.ChestRobe); AddItemConfiguration("ArmorFenringLegs", WorldConfiguration.Biome.Mountain, ItemType.LegsRobe); AddItemConfiguration("HelmetDrake", WorldConfiguration.Biome.Mountain, ItemType.Helmet); AddItemConfiguration("ArmorWolfChest", WorldConfiguration.Biome.Mountain, ItemType.Chest); AddItemConfiguration("ArmorWolfLegs", WorldConfiguration.Biome.Mountain, ItemType.Legs); AddItemConfiguration("HelmetPadded", WorldConfiguration.Biome.Plain, ItemType.Helmet); AddItemConfiguration("ArmorPaddedCuirass", WorldConfiguration.Biome.Plain, ItemType.Chest); AddItemConfiguration("ArmorPaddedGreaves", WorldConfiguration.Biome.Plain, ItemType.Legs); AddItemConfiguration("HelmetMage", WorldConfiguration.Biome.Mistland, ItemType.HelmetRobe); AddItemConfiguration("ArmorMageChest", WorldConfiguration.Biome.Mistland, ItemType.ChestRobe); AddItemConfiguration("ArmorMageLegs", WorldConfiguration.Biome.Mistland, ItemType.LegsRobe); AddItemConfiguration("HelmetCarapace", WorldConfiguration.Biome.Mistland, ItemType.Helmet); AddItemConfiguration("ArmorCarapaceChest", WorldConfiguration.Biome.Mistland, ItemType.Chest); AddItemConfiguration("ArmorCarapaceLegs", WorldConfiguration.Biome.Mistland, ItemType.Legs); AddItemConfiguration("HelmetFlametal", WorldConfiguration.Biome.AshLand, ItemType.Helmet); AddItemConfiguration("ArmorFlametalChest", WorldConfiguration.Biome.AshLand, ItemType.Chest); AddItemConfiguration("ArmorFlametalLegs", WorldConfiguration.Biome.AshLand, ItemType.Legs); AddItemConfiguration("HelmetAshlandsMediumHood", WorldConfiguration.Biome.AshLand, ItemType.HelmetMedium); AddItemConfiguration("ArmorAshlandsMediumChest", WorldConfiguration.Biome.AshLand, ItemType.ChestMedium); AddItemConfiguration("ArmorAshlandsMediumlegs", WorldConfiguration.Biome.AshLand, ItemType.LegsMedium); AddItemConfiguration("HelmetMage_Ashlands", WorldConfiguration.Biome.AshLand, ItemType.HelmetRobe); AddItemConfiguration("ArmorMageChest_Ashlands", WorldConfiguration.Biome.AshLand, ItemType.ChestRobe); AddItemConfiguration("ArmorMageLegs_Ashlands", WorldConfiguration.Biome.AshLand, ItemType.LegsRobe); } private void InitializeShields() { AddItemConfiguration("ShieldBronzeBuckler", WorldConfiguration.Biome.BlackForest, ItemType.BucklerShield); AddItemConfiguration("ShieldIronBuckler", WorldConfiguration.Biome.Swamp, ItemType.BucklerShield); AddItemConfiguration("ShieldCarapaceBuckler", WorldConfiguration.Biome.Mistland, ItemType.BucklerShield); AddItemConfiguration("ShieldWood", WorldConfiguration.Biome.Meadow, ItemType.Shield); AddItemConfiguration("ShieldBanded", WorldConfiguration.Biome.Swamp, ItemType.Shield); AddItemConfiguration("ShieldSilver", WorldConfiguration.Biome.Swamp, ItemType.Shield); AddItemConfiguration("ShieldBlackmetal", WorldConfiguration.Biome.Plain, ItemType.Shield); AddItemConfiguration("ShieldCarapace", WorldConfiguration.Biome.Mistland, ItemType.Shield); AddItemConfiguration("ShieldFlametal", WorldConfiguration.Biome.AshLand, ItemType.Shield); AddItemConfiguration("ShieldSerpentscale", WorldConfiguration.Biome.Ocean, ItemType.TowerShield); AddItemConfiguration("ShieldWoodTower", WorldConfiguration.Biome.Meadow, ItemType.TowerShield); AddItemConfiguration("ShieldBoneTower", WorldConfiguration.Biome.BlackForest, ItemType.TowerShield); AddItemConfiguration("ShieldIronTower", WorldConfiguration.Biome.Swamp, ItemType.TowerShield); AddItemConfiguration("ShieldBlackmetalTower", WorldConfiguration.Biome.Plain, ItemType.TowerShield); AddItemConfiguration("ShieldFlametalTower", WorldConfiguration.Biome.AshLand, ItemType.TowerShield); AddItemConfiguration("StaffShield", WorldConfiguration.Biome.Mistland, ItemType.MagicShield); } public float CalculateUpgradeValue(WorldConfiguration.Biome biome, float baseValue, int quality) { float biomeScaling = WorldConfiguration.Instance.GetBiomeScaling(biome); float nextBiomeScale = WorldConfiguration.Instance.GetNextBiomeScale(biome); return CalculateUpgradeValue(biomeScaling, nextBiomeScale, baseValue, quality); } protected float CalculateUpgradeValue(float scale, float nextScale, float baseValue, int quality) { if (quality <= 1) { return 0f; } float num = baseValue * scale; float num2 = baseValue * nextScale - num; if (num2 > 0f) { return (float)Math.Round(num2 / (float)quality, 1); } return 0f; } public void UpdateArmor(ref ItemDrop item, float? value, int? upgrades, float? upgradeValue) { if (!value.HasValue) { ScalingPlugin.VentureScalingLogger.LogWarning((object)(((Object)item).name + " NOT updated with new armor value. Value undefined.")); return; } float armor = item.m_itemData.m_shared.m_armor; item.m_itemData.m_shared.m_armor = value.Value; ScalingPlugin.VentureScalingLogger.LogDebug((object)$"{((Object)item).name}: Total armor changed from {armor} to {value}."); if (!upgrades.HasValue) { ScalingPlugin.VentureScalingLogger.LogWarning((object)(((Object)item).name + " NOT updated with new upgrade value. Total upgrades undefined.")); return; } if (!upgradeValue.HasValue) { ScalingPlugin.VentureScalingLogger.LogWarning((object)(((Object)item).name + " NOT updated with new upgrade value. Value for item upgrade undefined.")); return; } int maxQuality = item.m_itemData.m_shared.m_maxQuality; float armorPerLevel = item.m_itemData.m_shared.m_armorPerLevel; item.m_itemData.m_shared.m_maxQuality = upgrades.Value; item.m_itemData.m_shared.m_armorPerLevel = upgradeValue.Value; ScalingPlugin.VentureScalingLogger.LogDebug((object)($"{((Object)item).name}: Total item upgrades changed from {maxQuality} to {upgrades}. " + $"Total upgrade armor changed from {armorPerLevel} to {upgradeValue}.")); } public void UpdateShield(ref ItemDrop item, float? value, int? upgrades, float? upgradeValue) { if (!value.HasValue) { ScalingPlugin.VentureScalingLogger.LogWarning((object)(((Object)item).name + " NOT updated with new block value. Value undefined.")); return; } float blockPower = item.m_itemData.m_shared.m_blockPower; item.m_itemData.m_shared.m_blockPower = value.Value; ScalingPlugin.VentureScalingLogger.LogDebug((object)$"{((Object)item).name}: Total block changed from {blockPower} to {value}."); if (!upgrades.HasValue) { ScalingPlugin.VentureScalingLogger.LogWarning((object)(((Object)item).name + " NOT updated with new upgrade value. Total upgrades undefined.")); return; } if (!upgradeValue.HasValue) { ScalingPlugin.VentureScalingLogger.LogWarning((object)(((Object)item).name + " NOT updated with new upgrade value. Value for item upgrade undefined.")); return; } int maxQuality = item.m_itemData.m_shared.m_maxQuality; float blockPowerPerLevel = item.m_itemData.m_shared.m_blockPowerPerLevel; item.m_itemData.m_shared.m_maxQuality = upgrades.Value; item.m_itemData.m_shared.m_blockPowerPerLevel = upgradeValue.Value; ScalingPlugin.VentureScalingLogger.LogDebug((object)($"{((Object)item).name}: Total item upgrades changed from {maxQuality} to {upgrades}. " + $"Total upgrade block changed from {blockPowerPerLevel} to {upgradeValue}.")); } private void InitializeBaseDamageValues() { AddBaseItemValue(ItemType.Primative, 8f); AddBaseItemValue(ItemType.Knife, 8f); AddBaseItemValue(ItemType.GemKnife, 9f); AddBaseItemValue(ItemType.Fist, 8f); AddBaseItemValue(ItemType.Ammo, 12f); AddBaseItemValue(ItemType.Bolt, 12f); AddBaseItemValue(ItemType.TurretBolt, 25f); AddBaseItemValue(ItemType.PickAxe, 10f); AddBaseItemValue(ItemType.Sword, 12f); AddBaseItemValue(ItemType.GemSword, 13f); AddBaseItemValue(ItemType.Mace, 12f); AddBaseItemValue(ItemType.GemMace, 13f); AddBaseItemValue(ItemType.Spear, 12f); AddBaseItemValue(ItemType.GemSpear, 13f); AddBaseItemValue(ItemType.Axe, 12f); AddBaseItemValue(ItemType.GemAxe, 13f); AddBaseItemValue(ItemType.Sledge, 15f); AddBaseItemValue(ItemType.GemSledge, 16f); AddBaseItemValue(ItemType.Atgeir, 15f); AddBaseItemValue(ItemType.GemAtgeir, 16f); AddBaseItemValue(ItemType.Battleaxe, 15f); AddBaseItemValue(ItemType.GemBattleaxe, 16f); AddBaseItemValue(ItemType.Bow, 18f); AddBaseItemValue(ItemType.GemBow, 19f); AddBaseItemValue(ItemType.Crossbow, 40f); AddBaseItemValue(ItemType.GemCrossbow, 42f); AddBaseItemValue(ItemType.StaffRapid, 5f); AddBaseItemValue(ItemType.StaffSlow, 24f); AddBaseItemValue(ItemType.Tool, 0f); AddBaseItemValue(ItemType.Utility, 0f); AddBaseItemValue(ItemType.None, 0f); AddBaseItemValue(ItemType.Undefined, 0f); } private void InitializeWeapons() { AddItemConfiguration("PlayerUnarmed", WorldConfiguration.Biome.Meadow, ItemType.Fist); AddItemConfiguration("Club", WorldConfiguration.Biome.Meadow, ItemType.Primative); AddItemConfiguration("AxeStone", WorldConfiguration.Biome.Meadow, ItemType.Primative); AddItemConfiguration("PickaxeStone", WorldConfiguration.Biome.Meadow, ItemType.Primative); AddItemConfiguration("Torch", WorldConfiguration.Biome.Meadow, ItemType.Primative); AddItemConfiguration("AxeFlint", WorldConfiguration.Biome.Meadow, ItemType.Axe); AddItemConfiguration("AxeBronze", WorldConfiguration.Biome.BlackForest, ItemType.Axe); AddItemConfiguration("AxeIron", WorldConfiguration.Biome.Swamp, ItemType.Axe); AddItemConfiguration("AxeBlackMetal", WorldConfiguration.Biome.Plain, ItemType.Axe); AddItemConfiguration("AxeJotunBane", WorldConfiguration.Biome.Mistland, ItemType.Axe); AddItemConfiguration("AxeBerzerkr", WorldConfiguration.Biome.AshLand, ItemType.Axe); AddItemConfiguration("AxeBerzerkrBlood", WorldConfiguration.Biome.AshLand, ItemType.Axe); AddItemConfiguration("AxeBerzerkrLightning", WorldConfiguration.Biome.AshLand, ItemType.GemAxe); AddItemConfiguration("AxeBerzerkrNature", WorldConfiguration.Biome.AshLand, ItemType.GemAxe); AddItemConfiguration("PickaxeAntler", WorldConfiguration.Biome.Meadow, ItemType.PickAxe); AddItemConfiguration("PickaxeBronze", WorldConfiguration.Biome.BlackForest, ItemType.PickAxe); AddItemConfiguration("PickaxeIron", WorldConfiguration.Biome.Swamp, ItemType.PickAxe); AddItemConfiguration("PickaxeBlackMetal", WorldConfiguration.Biome.Plain, ItemType.PickAxe); AddItemConfiguration("KnifeChitin", WorldConfiguration.Biome.Ocean, ItemType.Knife); AddItemConfiguration("KnifeFlint", WorldConfiguration.Biome.Meadow, ItemType.Knife); AddItemConfiguration("KnifeCopper", WorldConfiguration.Biome.BlackForest, ItemType.Knife); AddItemConfiguration("KnifeSilver", WorldConfiguration.Biome.Mountain, ItemType.Knife); AddItemConfiguration("KnifeBlackMetal", WorldConfiguration.Biome.Plain, ItemType.Knife); AddItemConfiguration("KnifeSkollAndHati", WorldConfiguration.Biome.Mistland, ItemType.Knife); AddItemConfiguration("MaceBronze", WorldConfiguration.Biome.BlackForest, ItemType.Mace); AddItemConfiguration("MaceIron", WorldConfiguration.Biome.Swamp, ItemType.Mace); AddItemConfiguration("MaceSilver", WorldConfiguration.Biome.Mountain, ItemType.Mace); AddItemConfiguration("MaceNeedle", WorldConfiguration.Biome.Plain, ItemType.Mace); AddItemConfiguration("MaceEldner", WorldConfiguration.Biome.AshLand, ItemType.Mace); AddItemConfiguration("MaceEldnerBlood", WorldConfiguration.Biome.AshLand, ItemType.Mace); AddItemConfiguration("MaceEldnerLightning", WorldConfiguration.Biome.AshLand, ItemType.GemMace); AddItemConfiguration("MaceEldnerNature", WorldConfiguration.Biome.AshLand, ItemType.GemMace); AddItemConfiguration("SwordBronze", WorldConfiguration.Biome.BlackForest, ItemType.Sword); AddItemConfiguration("SwordIron", WorldConfiguration.Biome.Swamp, ItemType.Sword); AddItemConfiguration("SwordIronFire", WorldConfiguration.Biome.Swamp, ItemType.Sword); AddItemConfiguration("SwordSilver", WorldConfiguration.Biome.Mountain, ItemType.Sword); AddItemConfiguration("SwordBlackmetal", WorldConfiguration.Biome.Plain, ItemType.Sword); AddItemConfiguration("SwordMistwalker", WorldConfiguration.Biome.Mistland, ItemType.Sword); AddItemConfiguration("SwordDyrnwyn", WorldConfiguration.Biome.AshLand, ItemType.GemSword); AddItemConfiguration("SwordNiedhogg", WorldConfiguration.Biome.AshLand, ItemType.Sword); AddItemConfiguration("SwordNiedhoggBlood", WorldConfiguration.Biome.AshLand, ItemType.Sword); AddItemConfiguration("SwordNiedhoggLightning", WorldConfiguration.Biome.AshLand, ItemType.GemSword); AddItemConfiguration("SwordNiedhoggNature", WorldConfiguration.Biome.AshLand, ItemType.GemSword); AddItemConfiguration("AtgeirBronze", WorldConfiguration.Biome.BlackForest, ItemType.Atgeir); AddItemConfiguration("AtgeirIron", WorldConfiguration.Biome.Swamp, ItemType.Atgeir); AddItemConfiguration("AtgeirBlackmetal", WorldConfiguration.Biome.Plain, ItemType.Atgeir); AddItemConfiguration("AtgeirHimminAfl", WorldConfiguration.Biome.Mistland, ItemType.Atgeir); AddItemConfiguration("Battleaxe", WorldConfiguration.Biome.Swamp, ItemType.Battleaxe); AddItemConfiguration("BattleaxeCrystal", WorldConfiguration.Biome.Mountain, ItemType.Battleaxe); AddItemConfiguration("THSwordKrom", WorldConfiguration.Biome.Mistland, ItemType.Battleaxe); AddItemConfiguration("THSwordSlayer", WorldConfiguration.Biome.AshLand, ItemType.Battleaxe); AddItemConfiguration("THSwordSlayerBlood", WorldConfiguration.Biome.AshLand, ItemType.Battleaxe); AddItemConfiguration("THSwordSlayerLightning", WorldConfiguration.Biome.AshLand, ItemType.GemBattleaxe); AddItemConfiguration("THSwordSlayerNature", WorldConfiguration.Biome.AshLand, ItemType.GemBattleaxe); AddItemConfiguration("SledgeStagbreaker", WorldConfiguration.Biome.Meadow, ItemType.Sledge); AddItemConfiguration("SledgeIron", WorldConfiguration.Biome.Swamp, ItemType.Sledge); AddItemConfiguration("SledgeDemolisher", WorldConfiguration.Biome.Mistland, ItemType.Sledge); AddItemConfiguration("SpearChitin", WorldConfiguration.Biome.Ocean, ItemType.Spear); AddItemConfiguration("SpearFlint", WorldConfiguration.Biome.Meadow, ItemType.Spear); AddItemConfiguration("SpearBronze", WorldConfiguration.Biome.BlackForest, ItemType.Spear); AddItemConfiguration("SpearElderbark", WorldConfiguration.Biome.Swamp, ItemType.Spear); AddItemConfiguration("SpearWolfFang", WorldConfiguration.Biome.Mountain, ItemType.Spear); AddItemConfiguration("SpearCarapace", WorldConfiguration.Biome.Mistland, ItemType.Spear); AddItemConfiguration("SpearSplitner", WorldConfiguration.Biome.AshLand, ItemType.Spear); AddItemConfiguration("SpearSplitner_Blood", WorldConfiguration.Biome.AshLand, ItemType.Spear); AddItemConfiguration("SpearSplitner_Lightning", WorldConfiguration.Biome.AshLand, ItemType.GemSpear); AddItemConfiguration("SpearSplitner_Nature", WorldConfiguration.Biome.AshLand, ItemType.GemSpear); AddItemConfiguration("FistFenrirClaw", WorldConfiguration.Biome.Mountain, ItemType.Fist); AddItemConfiguration("Bow", WorldConfiguration.Biome.Meadow, ItemType.Bow); AddItemConfiguration("BowFineWood", WorldConfiguration.Biome.BlackForest, ItemType.Bow); AddItemConfiguration("BowHuntsman", WorldConfiguration.Biome.Swamp, ItemType.Bow); AddItemConfiguration("BowDraugrFang", WorldConfiguration.Biome.Mountain, ItemType.Bow); AddItemConfiguration("BowSpineSnap", WorldConfiguration.Biome.Mistland, ItemType.Bow); AddItemConfiguration("BowAshlands", WorldConfiguration.Biome.AshLand, ItemType.Bow); AddItemConfiguration("BowAshlandsBlood", WorldConfiguration.Biome.AshLand, ItemType.Bow); AddItemConfiguration("BowAshlandsRoot", WorldConfiguration.Biome.AshLand, ItemType.GemBow); AddItemConfiguration("BowAshlandsStorm", WorldConfiguration.Biome.AshLand, ItemType.GemBow); AddItemConfiguration("ArrowWood", WorldConfiguration.Biome.Meadow, ItemType.Ammo); AddItemConfiguration("ArrowFlint", WorldConfiguration.Biome.Meadow, ItemType.Ammo); AddItemConfiguration("ArrowFire", WorldConfiguration.Biome.Meadow, ItemType.Ammo); AddItemConfiguration("ArrowBronze", WorldConfiguration.Biome.BlackForest, ItemType.Ammo); AddItemConfiguration("ArrowIron", WorldConfiguration.Biome.Plain, ItemType.Ammo); AddItemConfiguration("ArrowSilver", WorldConfiguration.Biome.Mountain, ItemType.Ammo); AddItemConfiguration("ArrowPoison", WorldConfiguration.Biome.Mountain, ItemType.Ammo); AddItemConfiguration("ArrowObsidian", WorldConfiguration.Biome.Mountain, ItemType.Ammo); AddItemConfiguration("ArrowFrost", WorldConfiguration.Biome.Mountain, ItemType.Ammo); AddItemConfiguration("ArrowNeedle", WorldConfiguration.Biome.Plain, ItemType.Ammo); AddItemConfiguration("ArrowCarapace", WorldConfiguration.Biome.Mistland, ItemType.Ammo); AddItemConfiguration("ArrowCharred", WorldConfiguration.Biome.AshLand, ItemType.Ammo); AddItemConfiguration("CrossbowArbalest", WorldConfiguration.Biome.Mistland, ItemType.Crossbow); AddItemConfiguration("CrossbowRipper", WorldConfiguration.Biome.AshLand, ItemType.Crossbow); AddItemConfiguration("CrossbowRipperBlood", WorldConfiguration.Biome.AshLand, ItemType.Crossbow); AddItemConfiguration("CrossbowRipperLightning", WorldConfiguration.Biome.AshLand, ItemType.GemCrossbow); AddItemConfiguration("CrossbowRipperNature", WorldConfiguration.Biome.AshLand, ItemType.GemCrossbow); AddItemConfiguration("BoltBone", WorldConfiguration.Biome.BlackForest, ItemType.Bolt); AddItemConfiguration("BoltIron", WorldConfiguration.Biome.Swamp, ItemType.Bolt); AddItemConfiguration("BoltBlackmetal", WorldConfiguration.Biome.Plain, ItemType.Bolt); AddItemConfiguration("BoltCarapace", WorldConfiguration.Biome.Mistland, ItemType.Bolt); AddItemConfiguration("BoltCharred", WorldConfiguration.Biome.AshLand, ItemType.Bolt); AddItemConfiguration("TurretBoltWood", WorldConfiguration.Biome.BlackForest, ItemType.TurretBolt); AddItemConfiguration("TurretBolt", WorldConfiguration.Biome.Plain, ItemType.TurretBolt); AddItemConfiguration("TurretBoltFlametal", WorldConfiguration.Biome.AshLand, ItemType.TurretBolt); AddItemConfiguration("StaffIceShards", WorldConfiguration.Biome.Mistland, ItemType.StaffRapid); AddItemConfiguration("StaffFireball", WorldConfiguration.Biome.Mistland, ItemType.StaffSlow); AddItemConfiguration("StaffClusterbomb", WorldConfiguration.Biome.AshLand, ItemType.StaffRapid); AddItemConfiguration("StaffLightning", WorldConfiguration.Biome.AshLand, ItemType.StaffRapid); } public float GetTotalDamage(DamageTypes originalDamage) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) return originalDamage.m_damage + originalDamage.m_blunt + originalDamage.m_slash + originalDamage.m_pierce + originalDamage.m_fire + originalDamage.m_frost + originalDamage.m_lightning + originalDamage.m_poison + originalDamage.m_spirit; } public DamageTypes CalculateCreatureDamageTypes(float biomeScale, DamageTypes originalDamage, float baseTotalDamage, float maxTotalDamage) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) Normalize(ref originalDamage); float multiplier = DamageRatio(GetTotalDamage(originalDamage), maxTotalDamage) * biomeScale; return CalculateDamageTypesFinal(originalDamage, baseTotalDamage, multiplier); } public DamageTypes CalculateItemDamageTypes(float biomeScale, DamageTypes originalDamage, float baseTotalDamage) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) Normalize(ref originalDamage); return CalculateDamageTypesFinal(originalDamage, baseTotalDamage, biomeScale); } public DamageTypes CalculateDamageTypesFinal(DamageTypes OriginalDamage, float baseTotalDamage, float multiplier) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) DamageTypes result = default(DamageTypes); float totalDamage = GetTotalDamage(OriginalDamage); result.m_chop = OriginalDamage.m_chop; result.m_pickaxe = OriginalDamage.m_pickaxe; result.m_damage = ScaleDamage(totalDamage, OriginalDamage.m_damage, baseTotalDamage, multiplier); result.m_blunt = ScaleDamage(totalDamage, OriginalDamage.m_blunt, baseTotalDamage, multiplier); result.m_slash = ScaleDamage(totalDamage, OriginalDamage.m_slash, baseTotalDamage, multiplier); result.m_pierce = ScaleDamage(totalDamage, OriginalDamage.m_pierce, baseTotalDamage, multiplier); result.m_fire = ScaleDamage(totalDamage, OriginalDamage.m_fire, baseTotalDamage, multiplier); result.m_frost = ScaleDamage(totalDamage, OriginalDamage.m_frost, baseTotalDamage, multiplier); result.m_lightning = ScaleDamage(totalDamage, OriginalDamage.m_lightning, baseTotalDamage, multiplier); result.m_poison = ScaleDamage(totalDamage, OriginalDamage.m_poison, baseTotalDamage, multiplier); result.m_spirit = ScaleDamage(totalDamage, OriginalDamage.m_spirit, baseTotalDamage, multiplier); return result; } protected float DamageRatio(float totalDamage, float maxDamageOfAnyAttackType) { if (totalDamage == 0f || maxDamageOfAnyAttackType == 0f) { return 0f; } return totalDamage / maxDamageOfAnyAttackType; } protected float ScaleDamage(float originalSum, float original, float baseTotalDamage, float multiplier) { if (original <= 0f || baseTotalDamage <= 0f) { return 0f; } return (float)Math.Round(baseTotalDamage * multiplier * (original / originalSum), 1); } private void Normalize(ref DamageTypes OriginalDamage) { OriginalDamage.m_damage = Normalize(OriginalDamage.m_damage); OriginalDamage.m_blunt = Normalize(OriginalDamage.m_blunt); OriginalDamage.m_slash = Normalize(OriginalDamage.m_slash); OriginalDamage.m_pierce = Normalize(OriginalDamage.m_pierce); OriginalDamage.m_chop = Normalize(OriginalDamage.m_chop); OriginalDamage.m_pickaxe = Normalize(OriginalDamage.m_pickaxe); OriginalDamage.m_fire = Normalize(OriginalDamage.m_fire); OriginalDamage.m_frost = Normalize(OriginalDamage.m_frost); OriginalDamage.m_lightning = Normalize(OriginalDamage.m_lightning); OriginalDamage.m_poison = Normalize(OriginalDamage.m_poison); OriginalDamage.m_spirit = Normalize(OriginalDamage.m_spirit); } private float Normalize(float num) { if (num < 0f) { return 0f; } return num; } public DamageTypes CalculateUpgradeValue(WorldConfiguration.Biome biome, DamageTypes original, float baseTotalDamage, int quality) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) float biomeScaling = WorldConfiguration.Instance.GetBiomeScaling(biome); float nextBiomeScale = WorldConfiguration.Instance.GetNextBiomeScale(biome); return CalculateUpgradeValue(biomeScaling, nextBiomeScale, original, baseTotalDamage, quality); } protected DamageTypes CalculateUpgradeValue(float scale, float nextScale, DamageTypes original, float baseTotalDamage, int quality) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (quality <= 1) { return original; } float num = baseTotalDamage * scale; float num2 = baseTotalDamage * nextScale - num; if (num2 > 0f) { float baseTotalDamage2 = num2 / (float)quality; return CalculateDamageTypesFinal(original, baseTotalDamage2, 1f); } return original; } public void UpdateWeapon(ref ItemDrop item, DamageTypes? value, int? upgrades, DamageTypes? upgradeValue, bool playerItem = true) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) if (!value.HasValue) { ScalingPlugin.VentureScalingLogger.LogWarning((object)(((Object)item).name + " NOT updated with new scaled damage values. DamageTypes undefined.")); return; } DamageTypes damages = item.m_itemData.m_shared.m_damages; float totalDamage = GetTotalDamage(damages); float totalDamage2 = GetTotalDamage(value.Value); item.m_itemData.m_shared.m_damages = value.Value; ScalingPlugin.VentureScalingLogger.LogDebug((object)$"{((Object)item).name}: Total damage changed from {totalDamage} to {totalDamage2}."); if (playerItem) { if (!upgrades.HasValue) { ScalingPlugin.VentureScalingLogger.LogWarning((object)(((Object)item).name + " NOT updated with new scaled upgrade damage values. Total upgrades undefined.")); return; } if (!upgradeValue.HasValue) { ScalingPlugin.VentureScalingLogger.LogWarning((object)(((Object)item).name + " NOT updated with new scaled upgrade damage values. DamageTypes for item upgrades undefined.")); return; } int maxQuality = item.m_itemData.m_shared.m_maxQuality; DamageTypes damagesPerLevel = item.m_itemData.m_shared.m_damagesPerLevel; float totalDamage3 = GetTotalDamage(damagesPerLevel); float totalDamage4 = GetTotalDamage(upgradeValue.Value); item.m_itemData.m_shared.m_maxQuality = upgrades.Value; item.m_itemData.m_shared.m_damagesPerLevel = upgradeValue.Value; ScalingPlugin.VentureScalingLogger.LogDebug((object)($"{((Object)item).name}: Total item upgrades changed from {maxQuality} to {upgrades}." + $"Total upgrade damage changed from {totalDamage3} to {totalDamage4}")); } } } [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] public class ItemOverrides { [Serializable] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] public class ItemOverridesList { public IEnumerable<ItemOverride> items { get; set; } public IEnumerable<BaseItemValueOverride> baseItemValues { get; set; } public override string ToString() { if (items == null) { return "No Data."; } string text = $"Items in list {items.Count()}:\n"; foreach (ItemOverride item in items) { text += item.ToString(); } return text; } } [Serializable] [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] public class ItemOverride { public string name { get; set; } public int? biome { get; set; } public int? itemType { get; set; } public float? value { get; set; } public int? quality { get; set; } public float? upgradeValue { get; set; } public CreatureOverrides.AttackOverride damageValue { get; set; } public CreatureOverrides.AttackOverride upgradeDamageValue { get; set; } public override string ToString() { string text = $"{name}: Biome {biome}, Item Type {itemType}, Value {value}, Quality {quality}, Upgrade Value {upgradeValue}\n"; if (damageValue != null) { text = text + "+Damage Value: " + damageValue.ToString(); } if (upgradeDamageValue != null) { text = text + "+Upgrade Damage Value: " + upgradeDamageValue.ToString(); } return text; } } [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(0)] public class BaseItemValueOverride { public int? itemType { get; set; } public float? value { get; set; } } private static string filePath; public static ItemOverridesList ReadYaml() { if (File.Exists(filePath)) { using (new StreamReader(filePath)) { string input = File.ReadAllText(filePath); return new DeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build().Deserialize<ItemOverridesList>(input); } } ScalingPlugin.VentureScalingLogger.LogWarning((object)"No yaml file found, to use overrides the VWS.ItemOverrides.yaml file must be in your bepinex config folder."); return null; } static ItemOverrides() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; filePath = configPath + directorySeparatorChar + "VWS.ItemOverrides.yaml"; } } public interface IScalingAPI { } [<9eed9c0a-9fd3-449f-9769-233bc050d602>Nullable(0)] [PublicAPI] [<b9fea6d5-68cd-496d-aaa1-f4835254cf4a>NullableContext(1)] public class ScalingAPI : IScalingAPI { private static readonly ScalingAPI _instance; public static ScalingAPI Instance => _instance; static ScalingAPI() { _instance = new ScalingAPI(); } protected ScalingAPI() { } public static void AddCustomBiome(Biome biome, int order, bool overrideBiome = false) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) WorldConfiguration.Biome progressionBiome = GetProgressionBiome(biome); WorldConfiguration.Instance.AddBiome(progressionBiome, order, overrideBiome); } public static void AddCustomBiome(Biome biome, int order, float scale, bool overrideBiome = false) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) WorldConfiguration.Biome progressionBiome = GetProgressionBiome(biome); WorldConfiguration.Instance.AddCustomBiome(progressionBiome, scale, order, overrideBiome); } public static WorldConfiguration.Biome GetProgressionBiome(Biome biome) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Invalid comparison between Unknown and I4 //IL_0005: 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) //IL_001d: Expected I4, but got Unknown //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Invalid comparison between Unknown and I4 //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Invalid comparison between Unknown and I4 //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Invalid comparison between Unknown and I4 //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Invalid comparison between Unknown and I4 //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Invalid comparison between Unknown and I4 if ((int)biome <= 16) { switch (biome - 1) { default: if ((int)biome != 8) { if ((int)biome != 16) { break; } return WorldConfiguration.Biome.Plain; } return WorldConfiguration.Biome.BlackForest; case 0: return WorldConfiguration.Biome.Meadow; case 1: return WorldConfiguration.Biome.Swamp; case 3: return WorldConfiguration.Biome.Mountain; case 2: break; } } else if ((int)biome <= 64) { if ((int)biome == 32) { return WorldConfiguration.Biome.AshLand; } if ((int)biome == 64) { return WorldConfiguration.Biome.DeepNorth; } } else { if ((int)biome == 256) { return WorldConfiguration.Biome.Ocean; } if ((int)biome == 512) { return WorldConfiguration.Biome.Mistland; } } return WorldConfiguration.Biome.Undefined; } public static bool GetItemDrop(string name, out ItemDrop item) { item = null; if (!Utility.IsNullOrWhiteSpace(name)) { GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(StringExtensionMethods.GetStableHashCode(name)); if ((Object)(object)itemPrefab == (Object)null) { itemPrefab = ObjectDB.instance.GetItemPrefab(name); } if ((Object)(object)itemPrefab != (Object)null) { item = itemPrefab.GetComponent<ItemDrop>(); if ((Object)(object)item != (Object)null) { return true; } } } return false; } public static Humanoid GetHumanoid(string name) { if (!Utility.IsNullOrWhiteSpace(name) && (Object)(object)ZNetScene.instance != (Object)null) { int stableHashCode = StringExtensionMethods.GetStableHashCode(name); if (ZNetScene.instance.m_namedPrefabs != null && ZNetScene.instance.m_namedPrefabs.ContainsKey(stableHashCode)) { return ZNetScene.instance.m_namedPrefabs[stableHashCode].GetComponent<Humanoid>(); } if (ZNetScene.instance.m_prefabs != null) { List<GameObject> prefabs = ZNetScene.instance.m_prefabs; for (int i = 0; i < prefabs.Count; i++) { if (((Object)prefabs[i]).name.Equals(name, StringComparison.OrdinalIgnoreCase)) { return prefabs[i].GetComponent<Humanoid>(); } } } } return null; } public static void GenerateData(bool overwrite = false) { //IL_02fd: Unknown result type (might be due to invalid IL or missing references) string text = string.Format("{0}{1}{2}", Paths.ConfigPath, Path.DirectorySeparatorChar, "ItemDropData"); if (!Directory.Exists(text) || overwrite) { Directory.CreateDirectory(text); foreach (GameObject item in ObjectDB.instance.m_items) { try { ItemDrop component = item.GetComponent<ItemDrop>(); File.WriteAllText($"{text}{Path.DirectorySeparatorChar}{((Object)component).name}.json", JsonUtility.ToJson((object)component, true)); } catch { ScalingPlugin.VentureScalingLogger.LogDebug((object)("Failed to write to file for GameObject: " + ((Object)item).name + ".")); } } } text = string.Format("{0}{1}{2}", Paths.ConfigPath, Path.DirectorySeparatorChar, "CreatureData"); if (Directory.Exists(text) && !overwrite) { return; } Directory.CreateDirectory(text); foreach (GameObject prefab in ZNetScene.instance.m_prefabs) { try { Humanoid component2 = prefab.GetComponent<Humanoid>(); if (!((Object)(object)component2 != (Object)null)) { continue; } File.WriteAllText($"{text}{Path.DirectorySeparatorChar}{((Object)component2).name}.json", JsonUtility.ToJson((object)component2, true)); Dictionary<string, GameObject> dictionary = new Dictionary<string, GameObject>(); if (component2.m_defaultItems != null) { GameObject[] defaultItems = component2.m_defaultItems; foreach (GameObject val in defaultItems) { if (!dictionary.ContainsKey(((Object)val).name)) { dictionary.Add(((Object)val).name, val); } } } if (component2.m_randomWeapon != null) { GameObject[] defaultItems = component2.m_randomWeapon; foreach (GameObject val2 in defaultItems) { if (!dictionary.ContainsKey(((Object)val2).name)) { dictionary.Add(((Object)val2).name, val2); } } } if (