Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of LunarConfig v0.3.13
plugins/LunarConfig/Crafty.LunarConfig.dll
Decompiled 3 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Dawn; using Dawn.Utils; using DunGen.Graph; using Dusk; using Dusk.Weights; using HarmonyLib; using LunarConfig.Objects.Config; using LunarConfig.Patches; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: IgnoresAccessChecksTo("com.github.teamxiaolan.dawnlib")] [assembly: IgnoresAccessChecksTo("com.github.teamxiaolan.dawnlib.dusk")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Crafty.LunarConfig")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+fc76509bb907c5533917ecc2175e1edb3a689811")] [assembly: AssemblyProduct("LunarConfig")] [assembly: AssemblyTitle("Crafty.LunarConfig")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LunarConfig { [BepInPlugin("Crafty.LunarConfig", "LunarConfig", "1.0.0")] public class LunarConfig : BaseUnityPlugin { internal static readonly string EXPORT_DIRECTORY = Path.Combine(Paths.ConfigPath, "LunarConfig"); internal static readonly string ITEM_FILE_NAME = "LunarConfigItems.cfg"; internal static readonly string ITEM_FILE = Path.Combine(EXPORT_DIRECTORY, ITEM_FILE_NAME); internal static readonly string ENEMY_FILE_NAME = "LunarConfigEnemies.cfg"; internal static readonly string ENEMY_FILE = Path.Combine(EXPORT_DIRECTORY, ENEMY_FILE_NAME); internal static readonly string MOON_FILE_NAME = "LunarConfigMoons.cfg"; internal static readonly string MOON_FILE = Path.Combine(EXPORT_DIRECTORY, MOON_FILE_NAME); internal static readonly string MAP_OBJECT_FILE_NAME = "LunarConfigMapObjects.cfg"; internal static readonly string MAP_OBJECT_FILE = Path.Combine(EXPORT_DIRECTORY, MAP_OBJECT_FILE_NAME); internal static readonly string DUNGEON_FILE_NAME = "LunarConfigDungeons.cfg"; internal static readonly string DUNGEON_FILE = Path.Combine(EXPORT_DIRECTORY, DUNGEON_FILE_NAME); internal static readonly string BUYABLE_FILE_NAME = "LunarConfigUnlockables.cfg"; internal static readonly string BUYABLE_FILE = Path.Combine(EXPORT_DIRECTORY, BUYABLE_FILE_NAME); internal static readonly string CENTRAL_FILE_NAME = "LunarConfigCentral.cfg"; internal static readonly string CENTRAL_FILE = Path.Combine(Paths.ConfigPath, CENTRAL_FILE_NAME); internal static readonly string WEATHER_INJECTION_FILE_NAME = "LunarConfigWeatherInjection.cfg"; internal static readonly string WEATHER_INJECTION_FILE = Path.Combine(Paths.ConfigPath, WEATHER_INJECTION_FILE_NAME); internal static readonly string DUNGEON_INJECTION_FILE_NAME = "LunarConfigDungeonInjection.cfg"; internal static readonly string DUNGEON_INJECTION_FILE = Path.Combine(Paths.ConfigPath, DUNGEON_INJECTION_FILE_NAME); internal static readonly string TAG_INJECTION_FILE_NAME = "LunarConfigTagInjection.cfg"; internal static readonly string TAG_INJECTION_FILE = Path.Combine(Paths.ConfigPath, TAG_INJECTION_FILE_NAME); public static LunarConfig Instance { get; private set; } = null; internal static ManualLogSource Logger { get; private set; } = null; internal static Harmony? Harmony { get; set; } public static LunarCentral central { get; set; } = new LunarCentral(); private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Instance = this; Patch(); Logger.LogInfo((object)"Crafty.LunarConfig v1.0.0 has loaded!"); } internal static void Patch() { //IL_000d: 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_0018: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("Crafty.LunarConfig"); } Logger.LogDebug((object)"Patching..."); Harmony.PatchAll(typeof(RoundManagerPatch)); Harmony.PatchAll(typeof(StartOfRoundPatch)); ((Registry<DawnItemInfo>)(object)LethalContent.Items).OnFreeze += central.InitItems; ((Registry<DawnEnemyInfo>)(object)LethalContent.Enemies).OnFreeze += central.InitEnemies; ((Registry<DawnDungeonInfo>)(object)LethalContent.Dungeons).OnFreeze += central.InitDungeons; ((Registry<DawnMoonInfo>)(object)LethalContent.Moons).OnFreeze += central.InitMoons; ((Registry<DawnMapObjectInfo>)(object)LethalContent.MapObjects).OnFreeze += central.InitMapObjects; ((Registry<DawnUnlockableItemInfo>)(object)LethalContent.Unlockables).OnFreeze += central.InitUnlockables; ((Registry<DawnWeatherEffectInfo>)(object)LethalContent.Weathers).OnFreeze += central.InitWeatherInjection; ((Registry<DawnDungeonInfo>)(object)LethalContent.Dungeons).OnFreeze += central.InitDungeonInjection; Logger.LogDebug((object)"Finished patching!"); } internal static void Unpatch() { Logger.LogDebug((object)"Unpatching..."); Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } Logger.LogDebug((object)"Finished unpatching!"); } } public static class MiniLogger { private static ManualLogSource logger = Logger.CreateLogSource("LunarConfig"); public static void LogInfo(string message) { logger.LogInfo((object)message); } public static void LogWarning(string message) { logger.LogWarning((object)message); } public static void LogError(string message) { logger.LogError((object)message); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "Crafty.LunarConfig"; public const string PLUGIN_NAME = "LunarConfig"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace LunarConfig.Patches { internal class RoundManagerPatch { [HarmonyPatch(typeof(RoundManager), "SpawnScrapInLevel")] [HarmonyPriority(400)] [HarmonyBefore(new string[] { "mrov.WeatherRegistry" })] [HarmonyPrefix] private static void resetScrapMultipliers(RoundManager __instance) { try { __instance.scrapAmountMultiplier = 1f; __instance.scrapValueMultiplier = 0.4f; } catch (Exception arg) { MiniLogger.LogError($"An error occured while setting moon values, please report this!\n{arg}"); } } [HarmonyPatch(typeof(RoundManager), "SpawnScrapInLevel")] [HarmonyPriority(0)] [HarmonyAfter(new string[] { "mrov.WeatherRegistry" })] [HarmonyPrefix] private static void onScrapSpawnPrefix(RoundManager __instance) { LunarCentral central = LunarConfig.central; try { if (!LunarCentral.configureMoons) { return; } LunarConfigFile lunarConfigFile = central.files[LunarConfig.MOON_FILE_NAME]; DawnMoonInfo dawnInfo = SelectableLevelExtensions.GetDawnInfo(__instance.currentLevel); string text = LunarCentral.UUIDify(((object)((DawnBaseInfo<DawnMoonInfo>)(object)dawnInfo).Key).ToString()); LunarConfigEntry lunarConfigEntry = lunarConfigFile.entries[LunarCentral.NiceifyDawnUUID(((DawnBaseInfo<DawnMoonInfo>)(object)dawnInfo).Key.Key) + " - " + text]; HashSet<string> enabledMoonSettings = LunarCentral.enabledMoonSettings; if (lunarConfigEntry.GetValue<bool>("Configure Content")) { if (enabledMoonSettings.Contains("Amount Multiplier")) { __instance.scrapAmountMultiplier *= lunarConfigEntry.GetValue<float>("Amount Multiplier"); } if (enabledMoonSettings.Contains("Value Multiplier")) { __instance.scrapValueMultiplier *= lunarConfigEntry.GetValue<float>("Value Multiplier"); } } } catch (Exception arg) { MiniLogger.LogError($"An error occured while setting moon values, please report this!\n{arg}"); } } } internal class StartOfRoundPatch { [HarmonyPatch(typeof(StartOfRound), "SetTimeAndPlanetToSavedSettings")] [HarmonyPriority(-2000)] [HarmonyPrefix] private static void challengePrefix() { try { foreach (KeyValuePair<SelectableLevel, bool> definedChallengeMoon in LunarCentral.definedChallengeMoons) { definedChallengeMoon.Deconstruct(out var key, out var value); SelectableLevel val = key; bool planetHasTime = value; val.planetHasTime = planetHasTime; } } catch (Exception arg) { MiniLogger.LogError($"An error occured while setting challenge moons, please report this!{arg}"); } } [HarmonyPatch(typeof(StartOfRound), "SetTimeAndPlanetToSavedSettings")] [HarmonyPriority(-2000)] [HarmonyPostfix] private static void challengePostfix() { try { foreach (KeyValuePair<SelectableLevel, bool> definedChallengeMoonTime in LunarCentral.definedChallengeMoonTimes) { definedChallengeMoonTime.Deconstruct(out var key, out var value); SelectableLevel val = key; bool planetHasTime = value; val.planetHasTime = planetHasTime; } } catch (Exception arg) { MiniLogger.LogError($"An error occured while setting challenge moons, please report this!{arg}"); } } } } namespace LunarConfig.Objects.Config { public class LunarCentral { public Dictionary<string, LunarConfigFile> files = new Dictionary<string, LunarConfigFile>(); public static HashSet<string> everyMoonTag = new HashSet<string>(); public static bool mapObjectKeysInitialized = false; public static Dictionary<string, string> mapObjectKeys = new Dictionary<string, string>(); public static Dictionary<string, string> items = new Dictionary<string, string>(); public static Dictionary<string, string> enemies = new Dictionary<string, string>(); public static Dictionary<string, string> moons = new Dictionary<string, string>(); public static Dictionary<string, string> dungeons = new Dictionary<string, string>(); public static Dictionary<string, string> mapObjects = new Dictionary<string, string>(); public static Dictionary<string, NamespacedKey<DawnMoonInfo>> moonKeys = new Dictionary<string, NamespacedKey<DawnMoonInfo>>(); public static Dictionary<string, NamespacedKey<DawnWeatherEffectInfo>> weatherKeys = new Dictionary<string, NamespacedKey<DawnWeatherEffectInfo>>(); public static Dictionary<string, NamespacedKey<DawnDungeonInfo>> dungeonKeys = new Dictionary<string, NamespacedKey<DawnDungeonInfo>>(); public static bool clearOrphans = false; public static bool backCompat = true; public static Dictionary<SelectableLevel, bool> definedChallengeMoons = new Dictionary<SelectableLevel, bool>(); public static Dictionary<SelectableLevel, bool> definedChallengeMoonTimes = new Dictionary<SelectableLevel, bool>(); public static bool centralInitialized = false; public static bool itemsInitialized = false; public static bool enemiesInitialized = false; public static bool moonsInitialized = false; public static bool dungeonsInitialized = false; public static bool mapObjectsInitialized = false; public static bool itemWeightsInitialized = false; public static bool enemyWeightsInitialized = false; public static bool dungeonWeightsInitialized = false; public static bool mapObjectCurvesInitialized = false; public static bool weatherInjectionInitialized = false; public static bool dungeonInjectionInitialized = false; public static bool tagInjectionInitialized = false; public static bool configureItems = false; public static bool configureEnemies = false; public static bool configureMoons = false; public static bool configureDungeons = false; public static bool configureMapObjects = false; public static bool configureUnlockables = false; public static bool configureWeatherInjection = false; public static bool configureDungeonInjection = false; public static bool configureTagInjection = false; public static bool useZeekScrap = true; public static bool useZeekWeight = false; public static HashSet<string> enabledItemSettings = new HashSet<string>(); public static HashSet<string> enabledEnemySettings = new HashSet<string>(); public static HashSet<string> enabledMoonSettings = new HashSet<string>(); public static HashSet<string> enabledDungeonSettings = new HashSet<string>(); public static HashSet<string> enabledMapObjectSettings = new HashSet<string>(); public static HashSet<string> enabledUnlockableSettings = new HashSet<string>(); public static HashSet<string> enabledWeatherInjectionSettings = new HashSet<string>(); public static HashSet<string> enabledDungeonInjectionSettings = new HashSet<string>(); public static HashSet<string> enabledTagInjectionSettings = new HashSet<string>(); public static HashSet<string> enabledLockingMoons = new HashSet<string>(); public static Dictionary<string, string> cachedSpawnableScrap = new Dictionary<string, string>(); public static Dictionary<string, string> cachedDaytimeEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedInteriorEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedOutsideEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedDungeons = new Dictionary<string, string>(); public static Dictionary<NamespacedKey<DawnMoonInfo>, Dictionary<string, string>> cachedInsideMapObjects = new Dictionary<NamespacedKey<DawnMoonInfo>, Dictionary<string, string>>(); public static Dictionary<NamespacedKey<DawnMoonInfo>, Dictionary<string, string>> cachedOutsideMapObjects = new Dictionary<NamespacedKey<DawnMoonInfo>, Dictionary<string, string>>(); public static Dictionary<string, string> cachedWeatherSpawnableScrap = new Dictionary<string, string>(); public static Dictionary<string, string> cachedWeatherDaytimeEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedWeatherInteriorEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedWeatherOutsideEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedWeatherDungeons = new Dictionary<string, string>(); public static Dictionary<string, string> cachedDungeonSpawnableScrap = new Dictionary<string, string>(); public static Dictionary<string, string> cachedDungeonDaytimeEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedDungeonInteriorEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedDungeonOutsideEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedTagSpawnableScrap = new Dictionary<string, string>(); public static Dictionary<string, string> cachedTagDaytimeEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedTagInteriorEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedTagOutsideEnemies = new Dictionary<string, string>(); public static Dictionary<string, string> cachedTagDungeons = new Dictionary<string, string>(); public static Dictionary<string, Dictionary<NamespacedKey<DawnMoonInfo>, AnimationCurve>> defaultInsideMapObjectCurves = new Dictionary<string, Dictionary<NamespacedKey<DawnMoonInfo>, AnimationCurve>>(); public static Dictionary<string, Dictionary<NamespacedKey<DawnMoonInfo>, AnimationCurve>> defaultOutsideMapObjectCurves = new Dictionary<string, Dictionary<NamespacedKey<DawnMoonInfo>, AnimationCurve>>(); public static Dictionary<string, string> itemWeightString = new Dictionary<string, string>(); public static Dictionary<string, string> daytimeEnemyWeightString = new Dictionary<string, string>(); public static Dictionary<string, string> interiorEnemyWeightString = new Dictionary<string, string>(); public static Dictionary<string, string> outsideEnemyWeightString = new Dictionary<string, string>(); public static Dictionary<string, string> dungeonWeightString = new Dictionary<string, string>(); public static Dictionary<string, string> itemWeatherString = new Dictionary<string, string>(); public static Dictionary<string, string> daytimeEnemyWeatherString = new Dictionary<string, string>(); public static Dictionary<string, string> interiorEnemyWeatherString = new Dictionary<string, string>(); public static Dictionary<string, string> outsideEnemyWeatherString = new Dictionary<string, string>(); public static Dictionary<string, string> dungeonWeatherString = new Dictionary<string, string>(); public static Dictionary<string, string> itemDungeonString = new Dictionary<string, string>(); public static Dictionary<string, string> daytimeEnemyDungeonString = new Dictionary<string, string>(); public static Dictionary<string, string> interiorEnemyDungeonString = new Dictionary<string, string>(); public static Dictionary<string, string> outsideEnemyDungeonString = new Dictionary<string, string>(); public static HashSet<DawnMoonInfo> notConfiguredScrapMoons = new HashSet<DawnMoonInfo>(); public static HashSet<DawnMoonInfo> notConfiguredDaytimeMoons = new HashSet<DawnMoonInfo>(); public static HashSet<DawnMoonInfo> notConfiguredInteriorMoons = new HashSet<DawnMoonInfo>(); public static HashSet<DawnMoonInfo> notConfiguredOutsideMoons = new HashSet<DawnMoonInfo>(); public static HashSet<DawnMoonInfo> notConfiguredDungeonMoons = new HashSet<DawnMoonInfo>(); public static HashSet<DawnMoonInfo> notConfiguredInsideMapObjectMoons = new HashSet<DawnMoonInfo>(); public static HashSet<DawnMoonInfo> notConfiguredOutsideMapObjectMoons = new HashSet<DawnMoonInfo>(); public static string UUIDify(string uuid) { return uuid.Replace("=", "").Replace("\n", "").Replace("\t", "") .Replace("\\", "") .Replace("\"", "") .Replace("'", "") .Replace("[", "") .Replace("]", "") .Replace("`", ""); } public static string CleanString(string str) { return RemoveWhitespace(str.ToLower()); } public static string CleanNumber(string str) { return RemoveWhitespace(str).Replace("=", "").Replace("+", "").Replace("*", "") .Replace("/", ""); } public static string NiceifyDawnUUID(string uuid) { return NamespacedKey.NormalizeStringForNamespacedKey(uuid, true); } public static string RemoveWhitespace(string input) { return new string((from c in input.ToCharArray() where !char.IsWhiteSpace(c) select c).ToArray()); } public string CurveToString(AnimationCurve curve) { return ConfigManager.ParseString(curve); } public string? GetDawnUUID(Dictionary<string, string> dic, string uuid) { string result = null; try { result = dic[CleanString(uuid)]; } catch { MiniLogger.LogWarning("Could not find " + uuid + " in dictionaries. Check your config files!"); } return result; } public static void MigrateSection(ConfigFile config, string oldSection, string newSection) { string newSection2 = newSection; PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries"); if (propertyInfo == null) { return; } Dictionary<ConfigDefinition, string> dictionary = (Dictionary<ConfigDefinition, string>)propertyInfo.GetValue(config); if (dictionary == null || dictionary.Count == 0) { return; } foreach (KeyValuePair<ConfigDefinition, string> item in dictionary.ToList()) { ConfigDefinition oldDef = item.Key; string value = item.Value; if (oldDef.Section.StartsWith(oldSection)) { ConfigEntryBase val = ((IEnumerable<ConfigEntryBase>)config.GetConfigEntries()).FirstOrDefault((Func<ConfigEntryBase, bool>)((ConfigEntryBase e) => e.Definition.Section == newSection2 && e.Definition.Key == oldDef.Key)); if (val != null) { val.SetSerializedValue(value); } } } } public static void ClearOrphanedEntries(ConfigFile cfg) { if (clearOrphans) { PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries"); Dictionary<ConfigDefinition, string> dictionary = (Dictionary<ConfigDefinition, string>)propertyInfo.GetValue(cfg); dictionary.Clear(); } } public static AnimationCurve StringToCurve(string data) { return ConfigManager.ParseCurve(Regex.Replace(data, "[^0-9,E.;\\-]", "")); } public static void TrySetInsideCurve(string item, AnimationCurve curve, NamespacedKey<DawnMoonInfo> moon) { if (curve.keys.Length != 0) { if (!defaultInsideMapObjectCurves.TryGetValue(item, out Dictionary<NamespacedKey<DawnMoonInfo>, AnimationCurve> value)) { value = new Dictionary<NamespacedKey<DawnMoonInfo>, AnimationCurve>(); defaultInsideMapObjectCurves[item] = value; } value[moon] = curve; } } public static void TrySetOutsideCurve(string item, AnimationCurve curve, NamespacedKey<DawnMoonInfo> moon) { if (curve.keys.Length != 0) { if (!defaultOutsideMapObjectCurves.TryGetValue(item, out Dictionary<NamespacedKey<DawnMoonInfo>, AnimationCurve> value)) { value = new Dictionary<NamespacedKey<DawnMoonInfo>, AnimationCurve>(); defaultOutsideMapObjectCurves[item] = value; } value[moon] = curve; } } public static string ComprehendWeights(string weightString) { Dictionary<string, int> dictionary = new Dictionary<string, int>(); Dictionary<string, float> dictionary2 = new Dictionary<string, float>(); string[] array = weightString.Split(","); string[] array2 = array; foreach (string text in array2) { try { string[] array3 = text.Split(":"); string key = array3[0] + ":" + array3[1]; string text2 = array3[2]; if (text2.Contains("*")) { dictionary2[key] = dictionary2.GetValueOrDefault(key, 1f) * float.Parse(CleanNumber(text2)); } else if (text2.Contains("/")) { dictionary2[key] = dictionary2.GetValueOrDefault(key, 1f) / float.Parse(CleanNumber(text2)); } else { dictionary[key] = dictionary.GetValueOrDefault(key, 0) + int.Parse(CleanNumber(text2)); } } catch { } } dictionary = dictionary.Where((KeyValuePair<string, int> kvp) => kvp.Value != 0).ToDictionary((KeyValuePair<string, int> kvp) => kvp.Key, (KeyValuePair<string, int> kvp) => kvp.Value); dictionary2 = dictionary2.Where((KeyValuePair<string, float> kvp) => kvp.Value != 1f).ToDictionary((KeyValuePair<string, float> kvp) => kvp.Key, (KeyValuePair<string, float> kvp) => kvp.Value); return string.Join(", ", dictionary.Select((KeyValuePair<string, int> kvp) => $"{kvp.Key}={kvp.Value}")) + ((dictionary.Count > 0 && dictionary2.Count > 0) ? ", " : "") + string.Join(", ", dictionary2.Select((KeyValuePair<string, float> kvp) => $"{kvp.Key}=*{kvp.Value}")); } public void InitObjectKeys() { foreach (KeyValuePair<NamespacedKey<DawnMapObjectInfo>, DawnMapObjectInfo> item in (Registry<DawnMapObjectInfo>)(object)LethalContent.MapObjects) { mapObjectKeys[NiceifyDawnUUID(((NamespacedKey)item.Key).Key)] = ((object)item.Key).ToString(); } } public void InitConfig() { LunarConfigEntry lunarConfigEntry = files[LunarConfig.CENTRAL_FILE_NAME].entries["Configuration"]; } public void InitCentral() { MiniLogger.LogInfo("Initializing Central"); LunarConfigFile lunarConfigFile = AddFile(LunarConfig.CENTRAL_FILE, LunarConfig.CENTRAL_FILE_NAME); lunarConfigFile.file.SaveOnConfigSet = false; LunarConfigEntry lunarConfigEntry = lunarConfigFile.AddEntry("Configuration"); lunarConfigEntry.AddField("Configure Items", "Check this to generate and use configuration files for items.", defaultValue: true); lunarConfigEntry.AddField("Configure Enemies", "Check this to generate and use configuration files for enemies.", defaultValue: true); lunarConfigEntry.AddField("Configure Moons", "Check this to generate and use configuration files for moons.", defaultValue: true); lunarConfigEntry.AddField("Configure Dungeons", "Check this to generate and use configuration files for dungeons.", defaultValue: true); lunarConfigEntry.AddField("Configure Map Objects", "Check this to generate and use configuration files for map objects.", defaultValue: true); lunarConfigEntry.AddField("Configure Unlockables", "Check this to generate and use configuration files for unlockables.", defaultValue: true); lunarConfigEntry.AddField("Configure Weather Injection", "Check this to generate and use configuration files for weather injection.", defaultValue: true); lunarConfigEntry.AddField("Configure Dungeon Injection", "Check this to generate and use configuration files for dungeon injection.", defaultValue: true); lunarConfigEntry.AddField("Configure Tag Injection", "Check this to generate and use configuration files for tag injection.", defaultValue: true); lunarConfigEntry.AddField("Enable Backwards Compat", "Allows Lunar to look for config entries that are named using the previous v0.1.x system, I would advise turning this off after you have all your previous values.", defaultValue: false); lunarConfigEntry.AddField("Clear Orphaned Entries", "WARNING: Enabling this will delete any config entries that get disabled when the configuration is refreshed!", defaultValue: false); lunarConfigEntry.AddField("Use Simple Scrap Value", "Checking this will make items have a scrap value that already anticipates the *0.4.", defaultValue: false); lunarConfigEntry.AddField("Use Simple Weight", "Checking this will make items have their weight in pounds, already converting from Zeeker's formula.", defaultValue: false); backCompat = lunarConfigEntry.GetValue<bool>("Enable Backwards Compat"); clearOrphans = lunarConfigEntry.GetValue<bool>("Clear Orphaned Entries"); configureItems = lunarConfigEntry.GetValue<bool>("Configure Items"); configureEnemies = lunarConfigEntry.GetValue<bool>("Configure Enemies"); configureMoons = lunarConfigEntry.GetValue<bool>("Configure Moons"); configureDungeons = lunarConfigEntry.GetValue<bool>("Configure Dungeons"); configureMapObjects = lunarConfigEntry.GetValue<bool>("Configure Map Objects"); configureUnlockables = lunarConfigEntry.GetValue<bool>("Configure Unlockables"); configureWeatherInjection = lunarConfigEntry.GetValue<bool>("Configure Weather Injection"); configureDungeonInjection = lunarConfigEntry.GetValue<bool>("Configure Dungeon Injection"); configureTagInjection = lunarConfigEntry.GetValue<bool>("Configure Tag Injection"); useZeekScrap = !lunarConfigEntry.GetValue<bool>("Use Simple Scrap Value"); useZeekWeight = !lunarConfigEntry.GetValue<bool>("Use Simple Weight"); if (configureItems) { LunarConfigEntry lunarConfigEntry2 = lunarConfigFile.AddEntry("Enabled Item Settings"); lunarConfigEntry2.AddField("Display Name", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Scan Name", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Scan Subtext", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Scan Min Range", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Scan Max Range", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Minimum Value", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Maximum Value", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Weight", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Conductivity", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Two-Handed", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Is Scrap?", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Sold In Shop?", "Enable this to enable configuring this property in item config entries.", defaultValue: false); lunarConfigEntry2.AddField("Info Node Text", "Enable this to enable configuring this property in item config entries.", defaultValue: false); lunarConfigEntry2.AddField("Request Node Text", "Enable this to enable configuring this property in item config entries.", defaultValue: false); lunarConfigEntry2.AddField("Receipt Node Text", "Enable this to enable configuring this property in item config entries.", defaultValue: false); lunarConfigEntry2.AddField("Cost", "Disable this to disable configuring this property in item config entries.", defaultValue: true); lunarConfigEntry2.AddField("Tags", "Disable this to disable configuring this property in item config entries.", defaultValue: true); foreach (string key in lunarConfigEntry2.fields.Keys) { if (lunarConfigEntry2.GetValue<bool>(key)) { enabledItemSettings.Add(key); } } } if (configureEnemies) { LunarConfigEntry lunarConfigEntry3 = lunarConfigFile.AddEntry("Enabled Enemy Settings"); lunarConfigEntry3.AddField("Display Name", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Scan Name", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Scan Subtext", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Scan Min Range", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Scan Max Range", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Can See Through Fog?", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Door Speed Multiplier", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Is Daytime Enemy?", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Is Outdoor Enemy?", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Loudness Multiplier", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Max Count", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Power Level", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Diversity Power Level", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Probability Curve", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Use Falloff?", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Falloff Curve", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Group Spawn Count", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Normalized Time To Leave", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Enemy HP", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Can Die?", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Destroy On Death?", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Can Destroy?", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Can Stun?", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Stun Difficulty", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Stun Time", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); lunarConfigEntry3.AddField("Bestiary Text", "Enable this to enable configuring this property in enemy config entries.", defaultValue: false); lunarConfigEntry3.AddField("Bestiary Keyword", "Enable this to enable configuring this property in enemy config entries.", defaultValue: false); lunarConfigEntry3.AddField("Tags", "Disable this to disable configuring this property in enemy config entries.", defaultValue: true); foreach (string key2 in lunarConfigEntry3.fields.Keys) { if (lunarConfigEntry3.GetValue<bool>(key2)) { enabledEnemySettings.Add(key2); } } } if (configureMoons) { LunarConfigEntry lunarConfigEntry4 = lunarConfigFile.AddEntry("Enabled Moon Settings"); lunarConfigEntry4.AddField("Display Name", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Risk Level", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Description", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Route Price", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Is Hidden? & Is Locked?", "Disable this to disable configuring these properties in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Offset Time", "Enable this to enable configuring this property in moon config entries.", defaultValue: false); lunarConfigEntry4.AddField("Can Spawn Shrouds?", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Can Be Challenge Moon?", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Has Time?", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Time Multiplier", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Daytime Probability Range", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Daytime Curve", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Max Daytime Power", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Spawnable Daytime Enemies", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Interior Probability Range", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Interior Curve", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Max Interior Power", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Max Interior Diversity", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Spawnable Interior Enemies", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Outside Probability Range", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Outside Curve", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Max Outside Power", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Max Outside Diversity", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Spawnable Outside Enemies", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Min Scrap", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Max Scrap", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Min Scrap Total", "Enable this to enable configuring this property in moon config entries.", defaultValue: false); lunarConfigEntry4.AddField("Max Scrap Total", "Enable this to enable configuring this property in moon config entries.", defaultValue: false); lunarConfigEntry4.AddField("Interior Multiplier", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Value Multiplier", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Amount Multiplier", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Spawnable Scrap", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Possible Interiors", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Tags", "Disable this to disable configuring this property in moon config entries.", defaultValue: true); lunarConfigEntry4.AddField("Is Hidden? & Is Locked? Blacklist", "Add moons here that LunarConfig will ignore Is Hidden? and Is Locked? settings for, regardless of whether Configure Content is enabled.\nThis setting uses the Appropriate Aliases of moons!", ""); foreach (string key3 in lunarConfigEntry4.fields.Keys) { if (!key3.Equals("Is Hidden? & Is Locked? Blacklist") && lunarConfigEntry4.GetValue<bool>(key3)) { enabledMoonSettings.Add(key3); } } string[] array = lunarConfigEntry4.GetValue<string>("Is Hidden? & Is Locked? Blacklist").Split(","); foreach (string text in array) { if (text != "") { enabledLockingMoons.Add(CleanString(text)); } } } if (configureDungeons) { LunarConfigEntry lunarConfigEntry5 = lunarConfigFile.AddEntry("Enabled Dungeon Settings"); lunarConfigEntry5.AddField("Random Size Min", "Disable this to disable configuring this property in dungeon config entries.", defaultValue: true); lunarConfigEntry5.AddField("Random Size Max", "Disable this to disable configuring this property in dungeon config entries.", defaultValue: true); lunarConfigEntry5.AddField("Map Tile Size", "Disable this to disable configuring this property in dungeon config entries.", defaultValue: true); lunarConfigEntry5.AddField("Clamp Range Min", "Disable this to disable configuring this property in dungeon config entries.", defaultValue: true); lunarConfigEntry5.AddField("Clamp Range Max", "Disable this to disable configuring this property in dungeon config entries.", defaultValue: true); lunarConfigEntry5.AddField("Tags", "Disable this to disable configuring this property in dungeon config entries.", defaultValue: true); foreach (string key4 in lunarConfigEntry5.fields.Keys) { if (lunarConfigEntry5.GetValue<bool>(key4)) { enabledDungeonSettings.Add(key4); } } } if (configureMapObjects) { LunarConfigEntry lunarConfigEntry6 = lunarConfigFile.AddEntry("Enabled Map Object Settings"); lunarConfigEntry6.AddField("(Inside) Face Away From Wall?", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Inside) Face Towards Wall?", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Inside) Disallow Near Entrance?", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Inside) Require Distance Between Spawns?", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Inside) Flush Against Wall?", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Inside) Spawn Against Wall?", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Inside) Allow In Mineshaft?", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Inside) Level Curves", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Outside) Align With Terrain?", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Outside) Object Width", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Outside) Spawnable Floor Tags", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Outside) Face Away From Wall?", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Outside) Minimum AI Nodes Before Spawning", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("(Outside) Level Curves", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); lunarConfigEntry6.AddField("Tags", "Disable this to disable configuring this property in map object config entries.", defaultValue: true); foreach (string key5 in lunarConfigEntry6.fields.Keys) { if (lunarConfigEntry6.GetValue<bool>(key5)) { enabledMapObjectSettings.Add(key5); } } } if (configureUnlockables) { LunarConfigEntry lunarConfigEntry7 = lunarConfigFile.AddEntry("Enabled Unlockable Settings"); lunarConfigEntry7.AddField("Already Unlocked", "Disable this to disable configuring this property in unlockable config entries.", defaultValue: true); lunarConfigEntry7.AddField("Always In Stock", "Disable this to disable configuring this property in unlockable config entries.", defaultValue: true); lunarConfigEntry7.AddField("Can Store?", "Disable this to disable configuring this property in unlockable config entries.", defaultValue: true); lunarConfigEntry7.AddField("Is Placeable?", "Disable this to disable configuring this property in unlockable config entries.", defaultValue: true); lunarConfigEntry7.AddField("Luck Value", "Disable this to disable configuring this property in unlockable config entries.", defaultValue: true); lunarConfigEntry7.AddField("Max Number", "Disable this to disable configuring this property in unlockable config entries.", defaultValue: true); lunarConfigEntry7.AddField("Unlocked In Challenge File", "Disable this to disable configuring this property in unlockable config entries.", defaultValue: true); lunarConfigEntry7.AddField("Buy Keyword", "Enable this to enable configuring this property in unlockable config entries.", defaultValue: false); lunarConfigEntry7.AddField("Confirm Node Text", "Enable this to enable configuring this property in unlockable config entries.", defaultValue: false); lunarConfigEntry7.AddField("Info Node Text", "Enable this to enable configuring this property in unlockable config entries.", defaultValue: false); lunarConfigEntry7.AddField("Request Node Text", "Enable this to enable configuring this property in unlockable config entries.", defaultValue: false); lunarConfigEntry7.AddField("Shop Selection Node Text", "Enable this to enable configuring this property in unlockable config entries.", defaultValue: false); lunarConfigEntry7.AddField("Cost", "Disable this to disable configuring this property in unlockable config entries.", defaultValue: true); lunarConfigEntry7.AddField("Tags", "Disable this to disable configuring this property in unlockable config entries.", defaultValue: true); foreach (string key6 in lunarConfigEntry7.fields.Keys) { if (lunarConfigEntry7.GetValue<bool>(key6)) { enabledUnlockableSettings.Add(key6); } } } if (configureWeatherInjection) { LunarConfigEntry lunarConfigEntry8 = lunarConfigFile.AddEntry("Enabled Weather Injection Settings"); lunarConfigEntry8.AddField("Spawnable Scrap", "Disable this to disable configuring this property in weather injection config entries.", defaultValue: true); lunarConfigEntry8.AddField("Spawnable Daytime Enemies", "Disable this to disable configuring this property in weather injection config entries.", defaultValue: true); lunarConfigEntry8.AddField("Spawnable Interior Enemies", "Disable this to disable configuring this property in weather injection config entries.", defaultValue: true); lunarConfigEntry8.AddField("Spawnable Outside Enemies", "Disable this to disable configuring this property in weather injection config entries.", defaultValue: true); lunarConfigEntry8.AddField("Possible Interiors", "Disable this to disable configuring this property in weather injection config entries.", defaultValue: true); foreach (string key7 in lunarConfigEntry8.fields.Keys) { if (lunarConfigEntry8.GetValue<bool>(key7)) { enabledWeatherInjectionSettings.Add(key7); } } } if (configureDungeonInjection) { LunarConfigEntry lunarConfigEntry9 = lunarConfigFile.AddEntry("Enabled Dungeon Injection Settings"); lunarConfigEntry9.AddField("Spawnable Scrap", "Disable this to disable configuring this property in dungeon injection config entries.", defaultValue: true); lunarConfigEntry9.AddField("Spawnable Daytime Enemies", "Disable this to disable configuring this property in dungeon injection config entries.", defaultValue: true); lunarConfigEntry9.AddField("Spawnable Interior Enemies", "Disable this to disable configuring this property in dungeon injection config entries.", defaultValue: true); lunarConfigEntry9.AddField("Spawnable Outside Enemies", "Disable this to disable configuring this property in dungeon injection config entries.", defaultValue: true); foreach (string key8 in lunarConfigEntry9.fields.Keys) { if (lunarConfigEntry9.GetValue<bool>(key8)) { enabledDungeonInjectionSettings.Add(key8); } } } if (configureTagInjection) { LunarConfigEntry lunarConfigEntry10 = lunarConfigFile.AddEntry("Enabled Tag Injection Settings"); lunarConfigEntry10.AddField("Spawnable Scrap", "Disable this to disable configuring this property in tag injection config entries.", defaultValue: true); lunarConfigEntry10.AddField("Spawnable Daytime Enemies", "Disable this to disable configuring this property in tag injection config entries.", defaultValue: true); lunarConfigEntry10.AddField("Spawnable Interior Enemies", "Disable this to disable configuring this property in tag injection config entries.", defaultValue: true); lunarConfigEntry10.AddField("Spawnable Outside Enemies", "Disable this to disable configuring this property in tag injection config entries.", defaultValue: true); lunarConfigEntry10.AddField("Possible Interiors", "Disable this to disable configuring this property in tag injection config entries.", defaultValue: true); foreach (string key9 in lunarConfigEntry10.fields.Keys) { if (lunarConfigEntry10.GetValue<bool>(key9)) { enabledTagInjectionSettings.Add(key9); } } } ClearOrphanedEntries(lunarConfigFile.file); lunarConfigFile.file.Save(); lunarConfigFile.file.SaveOnConfigSet = true; everyMoonTag.Add("all"); everyMoonTag.Add("free"); everyMoonTag.Add("paid"); everyMoonTag.Add("custom"); everyMoonTag.Add("vanilla"); centralInitialized = true; } public void InitItems() { //IL_0617: Unknown result type (might be due to invalid IL or missing references) //IL_0621: Expected O, but got Unknown //IL_064e: Unknown result type (might be due to invalid IL or missing references) //IL_0658: Expected O, but got Unknown //IL_0a52: Unknown result type (might be due to invalid IL or missing references) //IL_0a59: Expected O, but got Unknown //IL_0a63: Unknown result type (might be due to invalid IL or missing references) //IL_0a6d: Expected O, but got Unknown //IL_0996: Unknown result type (might be due to invalid IL or missing references) //IL_09a0: Expected O, but got Unknown if (!centralInitialized) { InitCentral(); } MiniLogger.LogInfo("Initializing Items"); if (configureItems) { LunarConfigFile lunarConfigFile = AddFile(LunarConfig.ITEM_FILE, LunarConfig.ITEM_FILE_NAME); lunarConfigFile.file.SaveOnConfigSet = false; foreach (KeyValuePair<NamespacedKey<DawnItemInfo>, DawnItemInfo> item2 in (Registry<DawnItemInfo>)(object)LethalContent.Items) { string text = UUIDify(((object)item2.Key).ToString()); try { string text2 = NiceifyDawnUUID(((NamespacedKey)item2.Key).Key); DawnItemInfo value = item2.Value; LunarConfigEntry lunarConfigEntry = lunarConfigFile.AddEntry(text2 + " - " + text); Item item = value.Item; ScanNodeProperties val = null; DawnShopItemInfo val2 = null; DawnPurchaseInfo val3 = null; TerminalNode val4 = null; TerminalNode val5 = null; TerminalNode val6 = null; if ((Object)(object)item.spawnPrefab != (Object)null) { val = item.spawnPrefab.GetComponentInChildren<ScanNodeProperties>(); } if (value.ShopInfo != null) { val2 = value.ShopInfo; if ((Object)(object)val2.InfoNode != (Object)null) { val4 = val2.InfoNode; } if ((Object)(object)val2.RequestNode != (Object)null) { val5 = val2.RequestNode; } if ((Object)(object)val2.ReceiptNode != (Object)null) { val6 = val2.ReceiptNode; } if (val2.DawnPurchaseInfo != null) { val3 = val2.DawnPurchaseInfo; } } lunarConfigEntry.AddField("Configure Content", "Enable to change any of the settings below.", defaultValue: false); lunarConfigEntry.AddField("Appropriate Aliases", "These are the names which LunarConfig will recognize as this object in other config options.\nThey are case-insensitve and do not regard whitespace.", item.itemName + ", " + ((Object)item).name + ", " + text2); lunarConfigEntry.TryAddField(enabledItemSettings, "Display Name", "Specifies the name that appears on the item's tooltip.", item.itemName); if ((Object)(object)val != (Object)null) { lunarConfigEntry.TryAddField(enabledItemSettings, "Scan Name", "Specifies the name of the item that appears on its scan node.", val.headerText); lunarConfigEntry.TryAddField(enabledItemSettings, "Scan Subtext", "Specifies the subtext that appears on the item's scan node. NOTE: This setting may be overridden if the item has a scrap value.", val.subText); lunarConfigEntry.TryAddField(enabledItemSettings, "Scan Min Range", "Specifies the minimum distance the scan node can be scanned.", val.minRange); lunarConfigEntry.TryAddField(enabledItemSettings, "Scan Max Range", "Specifies the maximum distance the scan node can be scanned.", val.maxRange); } lunarConfigEntry.TryAddField(enabledItemSettings, "Minimum Value", "The minimum scrap value and item can have.\nTypically multiplied by 0.4, setting not applicable to non-scrap.\nDoes not work on items like Apparatus and items from enemies (Hives, Double-barrel).", useZeekScrap ? item.minValue : ((int)Math.Round((double)item.minValue * 0.4))); lunarConfigEntry.TryAddField(enabledItemSettings, "Maximum Value", "The maximum scrap value and item can have.\nTypically multiplied by 0.4, setting not applicable to non-scrap.\nDoes not work on items like Apparatus and items from enemies (Hives, Double-barrel).", useZeekScrap ? item.maxValue : ((int)Math.Round((double)item.maxValue * 0.4))); lunarConfigEntry.TryAddField(enabledItemSettings, "Weight", "Specifies the weight of an item.\nCalculated with: (x - 1) * 105 = weight in pounds.", useZeekWeight ? item.weight : ((item.weight - 1f) * 105f)); lunarConfigEntry.TryAddField(enabledItemSettings, "Conductivity", "Specifies whether an item is conductive.", item.isConductiveMetal); lunarConfigEntry.TryAddField(enabledItemSettings, "Two-Handed", "Specifies whether an item is two-handed.", item.twoHanded); lunarConfigEntry.TryAddField(enabledItemSettings, "Is Scrap?", "Specifies if an item is scrap or gear.\nThis decides whether an item can be sold to the company for credits.", item.isScrap); string defaultValue = "This is probably an item."; string defaultValue2 = "You are trying to buy an item."; string defaultValue3 = "You bought an item!"; int defaultValue4 = 15; if ((Object)(object)val4 != (Object)null) { defaultValue = val4.displayText.Replace("\n", ";"); } if ((Object)(object)val5 != (Object)null) { defaultValue2 = val5.displayText.Replace("\n", ";"); } if ((Object)(object)val6 != (Object)null) { defaultValue3 = val6.displayText.Replace("\n", ";"); } if (val3 != null) { defaultValue4 = val3.Cost.Provide(); } lunarConfigEntry.TryAddField(enabledItemSettings, "Sold In Shop?", "Whether or not an item is sold in the shop. If you are enabling this on an item that has it false by default, I advise you change the settings below.", val2 != null); lunarConfigEntry.TryAddField(enabledItemSettings, "Info Node Text", "The text of the terminal when viewing the info of an item. New lines are represented by semi-colons.", defaultValue); lunarConfigEntry.TryAddField(enabledItemSettings, "Request Node Text", "The text of the terminal when requesting an item. New lines are represented by semi-colons.", defaultValue2); lunarConfigEntry.TryAddField(enabledItemSettings, "Receipt Node Text", "The text of the terminal after purchasing an item. New lines are represented by semi-colons.", defaultValue3); lunarConfigEntry.TryAddField(enabledItemSettings, "Cost", "The cost of the item if it is sold in the shop.", defaultValue4); lunarConfigEntry.TryAddField(enabledItemSettings, "Tags", "Tags allocated to the item.\nSeparate tags with commas.", string.Join(", ", from tag in ((DawnBaseInfo<DawnItemInfo>)(object)value).AllTags() where tag.Namespace != "dawn_lib" select tag)); if (backCompat) { MigrateSection(lunarConfigFile.file, "LLL - " + item.itemName, text2 + " - " + text); } if (backCompat) { MigrateSection(lunarConfigFile.file, "LL - " + item.itemName, text2 + " - " + text); } if (lunarConfigEntry.GetValue<bool>("Configure Content")) { if (enabledItemSettings.Contains("Tags")) { HashSet<NamespacedKey> hashSet = new HashSet<NamespacedKey>(); string[] array = RemoveWhitespace(lunarConfigEntry.GetValue<string>("Tags")).ToLower().Split(","); foreach (string text3 in array) { string[] array2 = text3.Split(":"); if (array2.Length == 1 && !Utility.IsNullOrWhiteSpace(array2[0])) { hashSet.Add(new NamespacedKey("lunarcontenttag", array2[0])); } else if (array2.Length == 2 && array2[0] != "dawn_lib") { hashSet.Add(new NamespacedKey(array2[0], array2[1])); } else { MiniLogger.LogWarning("Incorrectly formatted tag '" + text3 + "' found on " + text); } } foreach (NamespacedKey tag in ((DawnBaseInfo<DawnItemInfo>)(object)value)._tags) { if (tag.Namespace == "dawn_lib") { hashSet.Add(tag); } } ((DawnBaseInfo<DawnItemInfo>)(object)value)._tags = hashSet; } ((DawnBaseInfo<DawnItemInfo>)(object)value).Internal_AddTag(DawnLibTags.LunarConfig); string[] array3 = lunarConfigEntry.GetValue<string>("Appropriate Aliases").Split(","); foreach (string text4 in array3) { if (!Utility.IsNullOrWhiteSpace(text4)) { items[CleanString(text4)] = text; } } lunarConfigEntry.TrySetValue(enabledItemSettings, "Display Name", ref item.itemName); if ((Object)(object)val != (Object)null) { lunarConfigEntry.TrySetValue(enabledItemSettings, "Scan Name", ref val.headerText); lunarConfigEntry.TrySetValue(enabledItemSettings, "Scan Subtext", ref val.subText); lunarConfigEntry.TrySetValue(enabledItemSettings, "Scan Min Range", ref val.minRange); lunarConfigEntry.TrySetValue(enabledItemSettings, "Scan Max Range", ref val.maxRange); } if (useZeekScrap) { lunarConfigEntry.TrySetValue(enabledItemSettings, "Minimum Value", ref item.minValue); lunarConfigEntry.TrySetValue(enabledItemSettings, "Maximum Value", ref item.maxValue); } else { if (enabledItemSettings.Contains("Minimum Value")) { item.minValue = (int)Math.Round((double)lunarConfigEntry.GetValue<int>("Minimum Value") * 2.5); } if (enabledItemSettings.Contains("Maximum Value")) { item.maxValue = (int)Math.Round((double)lunarConfigEntry.GetValue<int>("Maximum Value") * 2.5); } } if (useZeekWeight) { lunarConfigEntry.TrySetValue(enabledItemSettings, "Weight", ref item.weight); } else if (enabledItemSettings.Contains("Weight")) { item.weight = lunarConfigEntry.GetValue<float>("Weight") / 105f + 1f; } lunarConfigEntry.TrySetValue(enabledItemSettings, "Conductivity", ref item.isConductiveMetal); lunarConfigEntry.TrySetValue(enabledItemSettings, "Two-Handed", ref item.twoHanded); lunarConfigEntry.TrySetValue(enabledItemSettings, "Is Scrap?", ref item.isScrap); if (enabledItemSettings.Contains("Sold In Shop?")) { if (val2 != null) { if (!lunarConfigEntry.GetValue<bool>("Sold In Shop?") && val3 != null) { val3.PurchasePredicate = (ITerminalPurchasePredicate)new ConstantTerminalPredicate((TerminalPurchaseResult)(object)TerminalPurchaseResult.Hidden().SetFailure(true)); } } else if (lunarConfigEntry.GetValue<bool>("Sold In Shop?")) { TerminalNode val7 = ScriptableObject.CreateInstance<TerminalNode>(); TerminalNode val8 = ScriptableObject.CreateInstance<TerminalNode>(); TerminalNode val9 = ScriptableObject.CreateInstance<TerminalNode>(); ((Object)val7).name = "info_" + text; val7.displayText = "This is probably an item."; ((Object)val8).name = "request_" + text; val8.displayText = "You are trying to buy an item."; val8.itemCost = 15; ((Object)val9).name = "receipt_" + text; val9.displayText = "You bought an item!"; val9.itemCost = 15; DawnPurchaseInfo val10 = new DawnPurchaseInfo((IProvider<int>)(object)new SimpleProvider<int>(15), ITerminalPurchasePredicate.AlwaysSuccess()); value.ShopInfo = new DawnShopItemInfo(val10, val7, val8, val9); val2 = value.ShopInfo; val4 = val2.InfoNode; val5 = val2.RequestNode; val6 = val2.ReceiptNode; val3 = val2.DawnPurchaseInfo; val2.ParentInfo = value; ItemRegistrationHandler.TryRegisterItemIntoShop(item); } } if ((Object)(object)val4 != (Object)null && enabledItemSettings.Contains("Info Node Text")) { val4.displayText = lunarConfigEntry.GetValue<string>("Info Node Text").Replace(";", "\n"); } if ((Object)(object)val5 != (Object)null && enabledItemSettings.Contains("Request Node Text")) { val5.displayText = lunarConfigEntry.GetValue<string>("Request Node Text").Replace(";", "\n"); } if ((Object)(object)val6 != (Object)null && enabledItemSettings.Contains("Receipt Node Text")) { val6.displayText = lunarConfigEntry.GetValue<string>("Receipt Node Text").Replace(";", "\n"); } if (val3 != null && enabledItemSettings.Contains("Cost")) { val3.Cost = (IProvider<int>)(object)new SimpleProvider<int>(lunarConfigEntry.GetValue<int>("Cost")); } } else { items[CleanString(item2.Value.Item.itemName)] = text; items[CleanString(((Object)item2.Value.Item).name)] = text; items[CleanString(text2)] = text; } } catch (Exception arg) { MiniLogger.LogError($"LunarConfig encountered an issue while configuring {text}, please report this!\n{arg}"); } } ClearOrphanedEntries(lunarConfigFile.file); lunarConfigFile.file.Save(); lunarConfigFile.file.SaveOnConfigSet = true; } else { foreach (KeyValuePair<NamespacedKey<DawnItemInfo>, DawnItemInfo> item3 in (Registry<DawnItemInfo>)(object)LethalContent.Items) { string text5 = UUIDify(((object)item3.Key).ToString()); items[CleanString(item3.Value.Item.itemName)] = text5; items[CleanString(((Object)item3.Value.Item).name)] = text5; items[CleanString(NiceifyDawnUUID(text5))] = text5; } } itemsInitialized = true; MiniLogger.LogInfo("Completed Initializing Items"); InitItemWeights(); } public void InitItemWeights() { //IL_05cc: Unknown result type (might be due to invalid IL or missing references) //IL_05d3: Expected O, but got Unknown //IL_0689: Unknown result type (might be due to invalid IL or missing references) //IL_0693: Expected O, but got Unknown if ((!enabledMoonSettings.Contains("Spawnable Scrap") && !enabledWeatherInjectionSettings.Contains("Spawnable Scrap") && !enabledDungeonInjectionSettings.Contains("Spawnable Scrap") && !enabledTagInjectionSettings.Contains("Spawnable Scrap")) || !moonsInitialized || !itemsInitialized || !weatherInjectionInitialized || !dungeonInjectionInitialized || !tagInjectionInitialized || itemWeightsInitialized) { return; } MiniLogger.LogInfo("Initializing Item Weights"); foreach (KeyValuePair<string, string> item in cachedSpawnableScrap) { string[] array = item.Value.Split(","); foreach (string text in array) { string[] array2 = text.Split(":"); string uuid = array2[0]; string dawnUUID = GetDawnUUID(items, uuid); if (dawnUUID != null) { itemWeightString[dawnUUID] = itemWeightString.GetValueOrDefault(dawnUUID, "") + item.Key + ":" + CleanString(array2[1]) + ","; } } } foreach (KeyValuePair<string, string> item2 in cachedWeatherSpawnableScrap) { string[] array3 = item2.Value.Split(","); foreach (string text2 in array3) { string[] array4 = text2.Split(":"); string uuid2 = array4[0]; string dawnUUID2 = GetDawnUUID(items, uuid2); if (dawnUUID2 != null) { itemWeatherString[dawnUUID2] = itemWeatherString.GetValueOrDefault(dawnUUID2, "") + item2.Key + ":" + CleanString(array4[1]) + ","; } } } foreach (KeyValuePair<string, string> item3 in cachedDungeonSpawnableScrap) { string[] array5 = item3.Value.Split(","); foreach (string text3 in array5) { string[] array6 = text3.Split(":"); string uuid3 = array6[0]; string dawnUUID3 = GetDawnUUID(items, uuid3); if (dawnUUID3 != null) { itemDungeonString[dawnUUID3] = itemDungeonString.GetValueOrDefault(dawnUUID3, "") + item3.Key + ":" + CleanString(array6[1]) + ","; } } } foreach (KeyValuePair<string, string> item4 in cachedTagSpawnableScrap) { string[] array7 = item4.Value.Split(","); foreach (string text4 in array7) { string[] array8 = text4.Split(":"); string uuid4 = array8[0]; string dawnUUID4 = GetDawnUUID(items, uuid4); if (dawnUUID4 != null) { itemWeightString[dawnUUID4] = itemWeightString.GetValueOrDefault(dawnUUID4, "") + item4.Key + ":" + CleanString(array8[1]) + ","; } } } SpawnWeightContext val2 = default(SpawnWeightContext); foreach (KeyValuePair<NamespacedKey<DawnItemInfo>, DawnItemInfo> item5 in (Registry<DawnItemInfo>)(object)LethalContent.Items) { string arg = UUIDify(((object)item5.Key).ToString()); try { DawnItemInfo value = item5.Value; DawnScrapItemInfo val = null; if (value.ScrapInfo != null) { val = value.ScrapInfo; string key = ((object)item5.Key).ToString(); foreach (DawnMoonInfo notConfiguredScrapMoon in notConfiguredScrapMoons) { ((SpawnWeightContext)(ref val2))..ctor(notConfiguredScrapMoon, (DawnDungeonInfo)null, (DawnWeatherEffectInfo)null); int? @for = val.Weights.GetFor(notConfiguredScrapMoon, ref val2); if (@for.HasValue && @for > 0) { Dictionary<string, string> dictionary = itemWeightString; string[] obj = new string[5] { itemWeightString.GetValueOrDefault(key, ""), ((object)((DawnBaseInfo<DawnMoonInfo>)(object)notConfiguredScrapMoon).Key).ToString(), ":", null, null }; int? num = @for; obj[3] = num.ToString(); obj[4] = ","; dictionary[key] = string.Concat(obj); } } } if (!((DawnBaseInfo<DawnItemInfo>)(object)value).HasTag(DawnLibTags.LunarConfig)) { ((DawnBaseInfo<DawnItemInfo>)(object)value).Internal_AddTag(DawnLibTags.LunarConfig); } WeightTableBuilder<DawnMoonInfo, SpawnWeightContext> val3 = new WeightTableBuilder<DawnMoonInfo, SpawnWeightContext>(); SpawnWeightsPreset val4 = new SpawnWeightsPreset(); List<NamespacedConfigWeight> list = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(itemWeightString.GetValueOrDefault(((object)item5.Key).ToString(), ""))); List<NamespacedConfigWeight> list2 = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(itemWeatherString.GetValueOrDefault(((object)item5.Key).ToString(), ""))); List<NamespacedConfigWeight> list3 = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(itemDungeonString.GetValueOrDefault(((object)item5.Key).ToString(), ""))); val4.SetupSpawnWeightsPreset(list, list3, list2, 0); val3.SetGlobalWeight((IWeighted)(object)val4); if (val != null) { val.Weights = val3.Build(); } else { value.ScrapInfo = new DawnScrapItemInfo(val3.Build()); } } catch (Exception arg2) { MiniLogger.LogError($"LunarConfig encountered an issue while configuring weights for {arg}, please report this!\n{arg2}"); } } itemWeightsInitialized = true; MiniLogger.LogInfo("Completed Initializing Item Weights"); } public void InitEnemies() { //IL_0624: Unknown result type (might be due to invalid IL or missing references) //IL_062e: Expected O, but got Unknown //IL_065b: Unknown result type (might be due to invalid IL or missing references) //IL_0665: Expected O, but got Unknown if (!centralInitialized) { InitCentral(); } MiniLogger.LogInfo("Initializing Enemies"); if (configureEnemies) { LunarConfigFile lunarConfigFile = AddFile(LunarConfig.ENEMY_FILE, LunarConfig.ENEMY_FILE_NAME); lunarConfigFile.file.SaveOnConfigSet = false; foreach (KeyValuePair<NamespacedKey<DawnEnemyInfo>, DawnEnemyInfo> item in (Registry<DawnEnemyInfo>)(object)LethalContent.Enemies) { string text = UUIDify(((object)item.Key).ToString()); try { string text2 = NiceifyDawnUUID(((NamespacedKey)item.Key).Key); DawnEnemyInfo value = item.Value; LunarConfigEntry lunarConfigEntry = lunarConfigFile.AddEntry(text2 + " - " + text); EnemyType enemyType = value.EnemyType; ScanNodeProperties val = null; string text3 = null; EnemyAI val2 = null; TerminalNode val3 = null; TerminalKeyword val4 = null; if ((Object)(object)enemyType.enemyPrefab != (Object)null) { val = enemyType.enemyPrefab.GetComponentInChildren<ScanNodeProperties>(); if ((Object)(object)val != (Object)null) { text3 = val.headerText; } val2 = enemyType.enemyPrefab.GetComponent<EnemyAI>(); } if ((Object)(object)value.BestiaryNode != (Object)null) { val3 = value.BestiaryNode; } if ((Object)(object)value.NameKeyword != (Object)null) { val4 = value.NameKeyword; } lunarConfigEntry.AddField("Configure Content", "Enable to change any of the settings below.", defaultValue: false); lunarConfigEntry.AddField("Appropriate Aliases", "These are the names which LunarConfig will recognize as this object in other config options.\nThey are case-insensitve and do not regard whitespace.", enemyType.enemyName + ", " + text3 + ", " + text2); if ((Object)(object)val != (Object)null) { lunarConfigEntry.TryAddField(enabledEnemySettings, "Scan Name", "Specifies the name of the enemy that appears on its scan node.", val.headerText); lunarConfigEntry.TryAddField(enabledEnemySettings, "Scan Subtext", "Specifies the subtext that appears on the enemy's scan node.", val.subText); lunarConfigEntry.TryAddField(enabledEnemySettings, "Scan Min Range", "Specifies the minimum distance the scan node can be scanned.", val.minRange); lunarConfigEntry.TryAddField(enabledEnemySettings, "Scan Max Range", "Specifies the maximum distance the scan node can be scanned.", val.maxRange); } lunarConfigEntry.TryAddField(enabledEnemySettings, "Can See Through Fog?", "Specifies if an enemy can see through fog in foggy weather.", enemyType.canSeeThroughFog); lunarConfigEntry.TryAddField(enabledEnemySettings, "Door Speed Multiplier", "Decides the speed at which enemies can open doors.\nCalculated with: 1 / x = time to open door in seconds.", enemyType.doorSpeedMultiplier); lunarConfigEntry.TryAddField(enabledEnemySettings, "Loudness Multiplier", "Multiplies the volume of an enemy's sounds.", enemyType.loudnessMultiplier); lunarConfigEntry.TryAddField(enabledEnemySettings, "Max Count", "The maximum amount of an enemy that can be alive.", enemyType.MaxCount); lunarConfigEntry.TryAddField(enabledEnemySettings, "Power Level", "The power level an enemy occupies.", enemyType.PowerLevel); lunarConfigEntry.TryAddField(enabledEnemySettings, "Diversity Power Level", "The diversity power level an enemy occupies.", enemyType.DiversityPowerLevel); lunarConfigEntry.TryAddField(enabledEnemySettings, "Probability Curve", "Multiplies enemy spawn weight depending on time of day.\nKeyframes represented by x,y and separated by semicolons.", CurveToString(enemyType.probabilityCurve)); lunarConfigEntry.TryAddField(enabledEnemySettings, "Use Falloff?", "Whether or not to use the falloff curve.", enemyType.useNumberSpawnedFalloff); lunarConfigEntry.TryAddField(enabledEnemySettings, "Falloff Curve", "Multiplier to enemy spawn weight depending on how many are already spawned.\nKeyframes represented by x,y and separated by semicolons.", CurveToString(enemyType.numberSpawnedFalloff)); lunarConfigEntry.TryAddField(enabledEnemySettings, "Group Spawn Count", "The amount of entities that will spawn of this type at once.\nNOTICE: In order for this setting to work, you may need VentSpawnFixes or a similar mod.", enemyType.spawnInGroupsOf); lunarConfigEntry.TryAddField(enabledEnemySettings, "Normalized Time To Leave", "The time that an enemy leaves represented between 0 and 1 for the start and end of the day respectively.\nWARNING: Changing this for enemies that do not normally leave during the day may cause issues.", enemyType.normalizedTimeInDayToLeave); if ((Object)(object)val2 != (Object)null) { lunarConfigEntry.TryAddField(enabledEnemySettings, "Enemy HP", "The amount of HP an enemy has.", val2.enemyHP); } lunarConfigEntry.TryAddField(enabledEnemySettings, "Can Die?", "Whether or not an enemy can die.", enemyType.canDie); lunarConfigEntry.TryAddField(enabledEnemySettings, "Destroy On Death?", "Whether or not an enemy is destroyed on death.", enemyType.destroyOnDeath); lunarConfigEntry.TryAddField(enabledEnemySettings, "Can Destroy?", "Whether or not an enemy can be destroyed.", enemyType.canBeDestroyed); lunarConfigEntry.TryAddField(enabledEnemySettings, "Can Stun?", "Whether or not an enemy can be stunned.\nWARNING: Enabling this for enemies that have it disabled by default will likely cause issues, as the enemy most likely does not have stunning mechanics.", enemyType.canBeStunned); lunarConfigEntry.TryAddField(enabledEnemySettings, "Stun Difficulty", "Modifies the difficulty of using the zap gun on this enemy.", enemyType.stunGameDifficultyMultiplier); lunarConfigEntry.TryAddField(enabledEnemySettings, "Stun Time", "Modifies the duration this enemy stays stunned.", enemyType.stunTimeMultiplier); if ((Object)(object)val3 != (Object)null) { lunarConfigEntry.TryAddField(enabledEnemySettings, "Bestiary Text", "The text of the terminal when viewing the bestiary of an enemy. New lines are represented by semi-colons.", val3.displayText.Replace("\n", ";")); } if ((Object)(object)val4 != (Object)null) { lunarConfigEntry.TryAddField(enabledEnemySettings, "Bestiary Keyword", "The keyword to view the bestiary entry of an enemy.", val4.word); } lunarConfigEntry.TryAddField(enabledEnemySettings, "Tags", "Tags allocated to the enemy.\nSeparate tags with commas.", string.Join(", ", from tag in ((DawnBaseInfo<DawnEnemyInfo>)(object)value).AllTags() where tag.Namespace != "dawn_lib" select tag)); if (backCompat) { MigrateSection(lunarConfigFile.file, "LLL - " + enemyType.enemyName, text2 + " - " + text); } if (backCompat) { MigrateSection(lunarConfigFile.file, "LL - " + enemyType.enemyName, text2 + " - " + text); } if (lunarConfigEntry.GetValue<bool>("Configure Content")) { if (enabledEnemySettings.Contains("Tags")) { HashSet<NamespacedKey> hashSet = new HashSet<NamespacedKey>(); string[] array = RemoveWhitespace(lunarConfigEntry.GetValue<string>("Tags")).ToLower().Split(","); foreach (string text4 in array) { string[] array2 = text4.Split(":"); if (array2.Length == 1 && !Utility.IsNullOrWhiteSpace(array2[0])) { hashSet.Add(new NamespacedKey("lunarcontenttag", array2[0])); } else if (array2.Length == 2 && array2[0] != "dawn_lib") { hashSet.Add(new NamespacedKey(array2[0], array2[1])); } else { MiniLogger.LogWarning("Incorrectly formatted tag '" + text4 + "' found on " + text); } } foreach (NamespacedKey tag in ((DawnBaseInfo<DawnEnemyInfo>)(object)value)._tags) { if (tag.Namespace == "dawn_lib") { hashSet.Add(tag); } } ((DawnBaseInfo<DawnEnemyInfo>)(object)value)._tags = hashSet; } ((DawnBaseInfo<DawnEnemyInfo>)(object)value).Internal_AddTag(DawnLibTags.LunarConfig); string[] array3 = lunarConfigEntry.GetValue<string>("Appropriate Aliases").Split(","); foreach (string text5 in array3) { if (!Utility.IsNullOrWhiteSpace(text5)) { enemies[CleanString(text5)] = text; } } if ((Object)(object)val != (Object)null) { lunarConfigEntry.TrySetValue(enabledEnemySettings, "Scan Name", ref val.headerText); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Scan Subtext", ref val.subText); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Scan Min Range", ref val.minRange); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Scan Max Range", ref val.maxRange); } lunarConfigEntry.TrySetValue(enabledEnemySettings, "Can See Through Fog?", ref enemyType.canSeeThroughFog); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Door Speed Multiplier", ref enemyType.doorSpeedMultiplier); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Loudness Multiplier", ref enemyType.loudnessMultiplier); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Max Count", ref enemyType.MaxCount); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Power Level", ref enemyType.PowerLevel); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Diversity Power Level", ref enemyType.DiversityPowerLevel); if (enabledEnemySettings.Contains("Probability Curve")) { enemyType.probabilityCurve = StringToCurve(lunarConfigEntry.GetValue<string>("Probability Curve")); } lunarConfigEntry.TrySetValue(enabledEnemySettings, "Use Falloff?", ref enemyType.useNumberSpawnedFalloff); if (enabledEnemySettings.Contains("Falloff Curve")) { enemyType.numberSpawnedFalloff = StringToCurve(lunarConfigEntry.GetValue<string>("Falloff Curve")); } lunarConfigEntry.TrySetValue(enabledEnemySettings, "Group Spawn Count", ref enemyType.spawnInGroupsOf); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Normalized Time To Leave", ref enemyType.normalizedTimeInDayToLeave); if ((Object)(object)val2 != (Object)null) { lunarConfigEntry.TrySetValue(enabledEnemySettings, "Enemy HP", ref val2.enemyHP); } lunarConfigEntry.TrySetValue(enabledEnemySettings, "Can Die?", ref enemyType.canDie); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Destroy On Death?", ref enemyType.destroyOnDeath); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Can Destroy?", ref enemyType.canBeDestroyed); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Can Stun?", ref enemyType.canBeStunned); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Stun Difficulty", ref enemyType.stunGameDifficultyMultiplier); lunarConfigEntry.TrySetValue(enabledEnemySettings, "Stun Time", ref enemyType.stunTimeMultiplier); if ((Object)(object)val3 != (Object)null && enabledEnemySettings.Contains("Bestiary Text")) { val3.displayText = lunarConfigEntry.GetValue<string>("Bestiary Text").Replace(";", "\n"); } if ((Object)(object)val4 != (Object)null) { lunarConfigEntry.TrySetValue(enabledEnemySettings, "Bestiary Keyword", ref val4.word); } } else { enemies[CleanString(enemyType.enemyName)] = text; if (!Utility.IsNullOrWhiteSpace(text3)) { enemies[CleanString(text3)] = text; } enemies[CleanString(text2)] = text; } } catch (Exception arg) { MiniLogger.LogError($"LunarConfig encountered an issue while configuring {text}, please report this!\n{arg}"); } } ClearOrphanedEntries(lunarConfigFile.file); lunarConfigFile.file.Save(); lunarConfigFile.file.SaveOnConfigSet = true; } else { foreach (KeyValuePair<NamespacedKey<DawnEnemyInfo>, DawnEnemyInfo> item2 in (Registry<DawnEnemyInfo>)(object)LethalContent.Enemies) { string text6 = UUIDify(((object)item2.Key).ToString()); EnemyType enemyType2 = item2.Value.EnemyType; string text7 = null; if ((Object)(object)enemyType2.enemyPrefab != (Object)null) { ScanNodeProperties componentInChildren = enemyType2.enemyPrefab.GetComponentInChildren<ScanNodeProperties>(); if ((Object)(object)componentInChildren != (Object)null) { text7 = componentInChildren.headerText; } } enemies[CleanString(enemyType2.enemyName)] = text6; if (!Utility.IsNullOrWhiteSpace(text7)) { enemies[CleanString(text7)] = text6; } enemies[CleanString(NiceifyDawnUUID(text6))] = text6; } } enemiesInitialized = true; MiniLogger.LogInfo("Completed Initializing Enemies"); InitEnemyWeights(); } public void InitEnemyWeights() { //IL_05d1: Unknown result type (might be due to invalid IL or missing references) //IL_05d8: Expected O, but got Unknown //IL_0c93: Unknown result type (might be due to invalid IL or missing references) //IL_0c9a: Expected O, but got Unknown //IL_1355: Unknown result type (might be due to invalid IL or missing references) //IL_135c: Expected O, but got Unknown //IL_068e: Unknown result type (might be due to invalid IL or missing references) //IL_0698: Expected O, but got Unknown //IL_0d50: Unknown result type (might be due to invalid IL or missing references) //IL_0d5a: Expected O, but got Unknown //IL_1412: Unknown result type (might be due to invalid IL or missing references) //IL_141c: Expected O, but got Unknown if (!moonsInitialized || !enemiesInitialized || !weatherInjectionInitialized || !dungeonInjectionInitialized || enemyWeightsInitialized) { return; } if (enabledMoonSettings.Contains("Spawnable Daytime Enemies") || enabledDungeonInjectionSettings.Contains("Spawnable Daytime Enemies") || enabledWeatherInjectionSettings.Contains("Spawnable Daytime Enemies") || enabledTagInjectionSettings.Contains("Spawnable Daytime Enemies")) { MiniLogger.LogInfo("Initializing Daytime Weights"); foreach (KeyValuePair<string, string> cachedDaytimeEnemy in cachedDaytimeEnemies) { string[] array = cachedDaytimeEnemy.Value.Split(","); foreach (string text in array) { string[] array2 = text.Split(":"); string uuid = array2[0]; string dawnUUID = GetDawnUUID(enemies, uuid); if (dawnUUID != null) { daytimeEnemyWeightString[dawnUUID] = daytimeEnemyWeightString.GetValueOrDefault(dawnUUID, "") + cachedDaytimeEnemy.Key + ":" + CleanString(array2[1]) + ","; } } } foreach (KeyValuePair<string, string> cachedWeatherDaytimeEnemy in cachedWeatherDaytimeEnemies) { string[] array3 = cachedWeatherDaytimeEnemy.Value.Split(","); foreach (string text2 in array3) { string[] array4 = text2.Split(":"); string uuid2 = array4[0]; string dawnUUID2 = GetDawnUUID(enemies, uuid2); if (dawnUUID2 != null) { daytimeEnemyWeatherString[dawnUUID2] = daytimeEnemyWeatherString.GetValueOrDefault(dawnUUID2, "") + cachedWeatherDaytimeEnemy.Key + ":" + CleanString(array4[1]) + ","; } } } foreach (KeyValuePair<string, string> cachedDungeonDaytimeEnemy in cachedDungeonDaytimeEnemies) { string[] array5 = cachedDungeonDaytimeEnemy.Value.Split(","); foreach (string text3 in array5) { string[] array6 = text3.Split(":"); string uuid3 = array6[0]; string dawnUUID3 = GetDawnUUID(enemies, uuid3); if (dawnUUID3 != null) { daytimeEnemyDungeonString[dawnUUID3] = daytimeEnemyDungeonString.GetValueOrDefault(dawnUUID3, "") + cachedDungeonDaytimeEnemy.Key + ":" + CleanString(array6[1]) + ","; } } } foreach (KeyValuePair<string, string> cachedTagDaytimeEnemy in cachedTagDaytimeEnemies) { string[] array7 = cachedTagDaytimeEnemy.Value.Split(","); foreach (string text4 in array7) { string[] array8 = text4.Split(":"); string uuid4 = array8[0]; string dawnUUID4 = GetDawnUUID(enemies, uuid4); if (dawnUUID4 != null) { daytimeEnemyWeightString[dawnUUID4] = daytimeEnemyWeightString.GetValueOrDefault(dawnUUID4, "") + cachedTagDaytimeEnemy.Key + ":" + CleanString(array8[1]) + ","; } } } SpawnWeightContext val2 = default(SpawnWeightContext); foreach (KeyValuePair<NamespacedKey<DawnEnemyInfo>, DawnEnemyInfo> item in (Registry<DawnEnemyInfo>)(object)LethalContent.Enemies) { string arg = UUIDify(((object)item.Key).ToString()); try { DawnEnemyInfo value = item.Value; DawnEnemyLocationInfo val = null; if (value.Daytime != null) { val = value.Daytime; string key = ((object)item.Key).ToString(); foreach (DawnMoonInfo notConfiguredDaytimeMoon in notConfiguredDaytimeMoons) { ((SpawnWeightContext)(ref val2))..ctor(notConfiguredDaytimeMoon, (DawnDungeonInfo)null, (DawnWeatherEffectInfo)null); int? @for = val.Weights.GetFor(notConfiguredDaytimeMoon, ref val2); if (@for.HasValue && @for > 0) { Dictionary<string, string> dictionary = daytimeEnemyWeightString; string[] obj = new string[5] { daytimeEnemyWeightString.GetValueOrDefault(key, ""), ((object)((DawnBaseInfo<DawnMoonInfo>)(object)notConfiguredDaytimeMoon).Key).ToString(), ":", null, null }; int? num = @for; obj[3] = num.ToString(); obj[4] = ","; dictionary[key] = string.Concat(obj); } } } if (!((DawnBaseInfo<DawnEnemyInfo>)(object)value).HasTag(DawnLibTags.LunarConfig)) { ((DawnBaseInfo<DawnEnemyInfo>)(object)value).Internal_AddTag(DawnLibTags.LunarConfig); } WeightTableBuilder<DawnMoonInfo, SpawnWeightContext> val3 = new WeightTableBuilder<DawnMoonInfo, SpawnWeightContext>(); SpawnWeightsPreset val4 = new SpawnWeightsPreset(); List<NamespacedConfigWeight> list = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(daytimeEnemyWeightString.GetValueOrDefault(((object)item.Key).ToString(), ""))); List<NamespacedConfigWeight> list2 = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(daytimeEnemyWeatherString.GetValueOrDefault(((object)item.Key).ToString(), ""))); List<NamespacedConfigWeight> list3 = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(daytimeEnemyDungeonString.GetValueOrDefault(((object)item.Key).ToString(), ""))); val4.SetupSpawnWeightsPreset(list, list3, list2, 0); val3.SetGlobalWeight((IWeighted)(object)val4); if (val != null) { val.Weights = val3.Build(); continue; } value.Daytime = new DawnEnemyLocationInfo(val3.Build()); value.Daytime.ParentInfo = value; } catch (Exception arg2) { MiniLogger.LogError($"LunarConfig encountered an issue while configuring weights for {arg}, please report this!\n{arg2}"); } } MiniLogger.LogInfo("Completed Initializing Daytime Weights"); } if (enabledMoonSettings.Contains("Spawnable Interior Enemies") || enabledDungeonInjectionSettings.Contains("Spawnable Interior Enemies") || enabledWeatherInjectionSettings.Contains("Spawnable Interior Enemies") || enabledTagInjectionSettings.Contains("Spawnable Interior Enemies")) { MiniLogger.LogInfo("Initializing Interior Weights"); foreach (KeyValuePair<string, string> cachedInteriorEnemy in cachedInteriorEnemies) { string[] array9 = cachedInteriorEnemy.Value.Split(","); foreach (string text5 in array9) { string[] array10 = text5.Split(":"); string uuid5 = array10[0]; string dawnUUID5 = GetDawnUUID(enemies, uuid5); if (dawnUUID5 != null) { interiorEnemyWeightString[dawnUUID5] = interiorEnemyWeightString.GetValueOrDefault(dawnUUID5, "") + cachedInteriorEnemy.Key + ":" + CleanString(array10[1]) + ","; } } } foreach (KeyValuePair<string, string> cachedWeatherInteriorEnemy in cachedWeatherInteriorEnemies) { string[] array11 = cachedWeatherInteriorEnemy.Value.Split(","); foreach (string text6 in array11) { string[] array12 = text6.Split(":"); string uuid6 = array12[0]; string dawnUUID6 = GetDawnUUID(enemies, uuid6); if (dawnUUID6 != null) { interiorEnemyWeatherString[dawnUUID6] = interiorEnemyWeatherString.GetValueOrDefault(dawnUUID6, "") + cachedWeatherInteriorEnemy.Key + ":" + CleanString(array12[1]) + ","; } } } foreach (KeyValuePair<string, string> cachedDungeonInteriorEnemy in cachedDungeonInteriorEnemies) { string[] array13 = cachedDungeonInteriorEnemy.Value.Split(","); foreach (string text7 in array13) { string[] array14 = text7.Split(":"); string uuid7 = array14[0]; string dawnUUID7 = GetDawnUUID(enemies, uuid7); if (dawnUUID7 != null) { interiorEnemyDungeonString[dawnUUID7] = interiorEnemyDungeonString.GetValueOrDefault(dawnUUID7, "") + cachedDungeonInteriorEnemy.Key + ":" + CleanString(array14[1]) + ","; } } } foreach (KeyValuePair<string, string> cachedTagInteriorEnemy in cachedTagInteriorEnemies) { string[] array15 = cachedTagInteriorEnemy.Value.Split(","); foreach (string text8 in array15) { string[] array16 = text8.Split(":"); string uuid8 = array16[0]; string dawnUUID8 = GetDawnUUID(enemies, uuid8); if (dawnUUID8 != null) { interiorEnemyWeightString[dawnUUID8] = interiorEnemyWeightString.GetValueOrDefault(dawnUUID8, "") + cachedTagInteriorEnemy.Key + ":" + CleanString(array16[1]) + ","; } } } SpawnWeightContext val6 = default(SpawnWeightContext); foreach (KeyValuePair<NamespacedKey<DawnEnemyInfo>, DawnEnemyInfo> item2 in (Registry<DawnEnemyInfo>)(object)LethalContent.Enemies) { string arg3 = UUIDify(((object)item2.Key).ToString()); try { DawnEnemyInfo value2 = item2.Value; DawnEnemyLocationInfo val5 = null; if (value2.Inside != null) { val5 = value2.Inside; string key2 = ((object)item2.Key).ToString(); foreach (DawnMoonInfo notConfiguredInteriorMoon in notConfiguredInteriorMoons) { ((SpawnWeightContext)(ref val6))..ctor(notConfiguredInteriorMoon, (DawnDungeonInfo)null, (DawnWeatherEffectInfo)null); int? for2 = val5.Weights.GetFor(notConfiguredInteriorMoon, ref val6); if (for2.HasValue && for2 > 0) { Dictionary<string, string> dictionary2 = interiorEnemyWeightString; string[] obj2 = new string[5] { interiorEnemyWeightString.GetValueOrDefault(key2, ""), ((object)((DawnBaseInfo<DawnMoonInfo>)(object)notConfiguredInteriorMoon).Key).ToString(), ":", null, null }; int? num = for2; obj2[3] = num.ToString(); obj2[4] = ","; dictionary2[key2] = string.Concat(obj2); } } } if (!((DawnBaseInfo<DawnEnemyInfo>)(object)value2).HasTag(DawnLibTags.LunarConfig)) { ((DawnBaseInfo<DawnEnemyInfo>)(object)value2).Internal_AddTag(DawnLibTags.LunarConfig); } WeightTableBuilder<DawnMoonInfo, SpawnWeightContext> val7 = new WeightTableBuilder<DawnMoonInfo, SpawnWeightContext>(); SpawnWeightsPreset val8 = new SpawnWeightsPreset(); List<NamespacedConfigWeight> list4 = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(interiorEnemyWeightString.GetValueOrDefault(((object)item2.Key).ToString(), ""))); List<NamespacedConfigWeight> list5 = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(interiorEnemyWeatherString.GetValueOrDefault(((object)item2.Key).ToString(), ""))); List<NamespacedConfigWeight> list6 = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(interiorEnemyDungeonString.GetValueOrDefault(((object)item2.Key).ToString(), ""))); val8.SetupSpawnWeightsPreset(list4, list6, list5, 0); val7.SetGlobalWeight((IWeighted)(object)val8); if (val5 != null) { val5.Weights = val7.Build(); continue; } value2.Inside = new DawnEnemyLocationInfo(val7.Build()); value2.Inside.ParentInfo = value2; } catch (Exception arg4) { MiniLogger.LogError($"LunarConfig encountered an issue while configuring weights for {arg3}, please report this!\n{arg4}"); } } MiniLogger.LogInfo("Completed Initializing Interior Weights"); } if (enabledMoonSettings.Contains("Spawnable Outside Enemies") || enabledDungeonInjectionSettings.Contains("Spawnable Outside Enemies") || enabledWeatherInjectionSettings.Contains("Spawnable Outside Enemies") || enabledTagInjectionSettings.Contains("Spawnable Outside Enemies")) { MiniLogger.LogInfo("Initializing Outside Weights"); foreach (KeyValuePair<string, string> cachedOutsideEnemy in cachedOutsideEnemies) { string[] array17 = cachedOutsideEnemy.Value.Split(","); foreach (string text9 in array17) { string[] array18 = text9.Split(":"); string uuid9 = array18[0]; string dawnUUID9 = GetDawnUUID(enemies, uuid9); if (dawnUUID9 != null) { outsideEnemyWeightString[dawnUUID9] = outsideEnemyWeightString.GetValueOrDefault(dawnUUID9, "") + cachedOutsideEnemy.Key + ":" + CleanString(array18[1]) + ","; } } } foreach (KeyValuePair<string, string> cachedWeatherOutsideEnemy in cachedWeatherOutsideEnemies) { string[] array19 = cachedWeatherOutsideEnemy.Value.Split(","); foreach (string text10 in array19) { string[] array20 = text10.Split(":"); string uuid10 = array20[0]; string dawnUUID10 = GetDawnUUID(enemies, uuid10); if (dawnUUID10 != null) { outsideEnemyWeatherString[dawnUUID10] = outsideEnemyWeatherString.GetValueOrDefault(dawnUUID10, "") + cachedWeatherOutsideEnemy.Key + ":" + CleanString(array20[1]) + ","; } } } foreach (KeyValuePair<string, string> cachedDungeonOutsideEnemy in cachedDungeonOutsideEnemies) { string[] array21 = cachedDungeonOutsideEnemy.Value.Split(","); foreach (string text11 in array21) { string[] array22 = text11.Split(":"); string uuid11 = array22[0]; string dawnUUID11 = GetDawnUUID(enemies, uuid11); if (dawnUUID11 != null) { outsideEnemyDungeonString[dawnUUID11] = outsideEnemyDungeonString.GetValueOrDefault(dawnUUID11, "") + cachedDungeonOutsideEnemy.Key + ":" + CleanString(array22[1]) + ","; } } } foreach (KeyValuePair<string, string> cachedTagOutsideEnemy in cachedTagOutsideEnemies) { string[] array23 = cachedTagOutsideEnemy.Value.Split(","); foreach (string text12 in array23) { string[] array24 = text12.Split(":"); string uuid12 = array24[0]; string dawnUUID12 = GetDawnUUID(enemies, uuid12); if (dawnUUID12 != null) { outsideEnemyWeightString[dawnUUID12] = outsideEnemyWeightString.GetValueOrDefault(dawnUUID12, "") + cachedTagOutsideEnemy.Key + ":" + CleanString(array24[1]) + ","; } } } SpawnWeightContext val10 = default(SpawnWeightContext); foreach (KeyValuePair<NamespacedKey<DawnEnemyInfo>, DawnEnemyInfo> item3 in (Registry<DawnEnemyInfo>)(object)LethalContent.Enemies) { string arg5 = UUIDify(((object)item3.Key).ToString()); try { DawnEnemyInfo value3 = item3.Value; DawnEnemyLocationInfo val9 = null; if (value3.Outside != null) { val9 = value3.Outside; string key3 = ((object)item3.Key).ToString(); foreach (DawnMoonInfo notConfiguredOutsideMoon in notConfiguredOutsideMoons) { ((SpawnWeightContext)(ref val10))..ctor(notConfiguredOutsideMoon, (DawnDungeonInfo)null, (DawnWeatherEffectInfo)null); int? for3 = val9.Weights.GetFor(notConfiguredOutsideMoon, ref val10); if (for3.HasValue && for3 > 0) { Dictionary<string, string> dictionary3 = outsideEnemyWeightString; string[] obj3 = new string[5] { outsideEnemyWeightString.GetValueOrDefault(key3, ""), ((object)((DawnBaseInfo<DawnMoonInfo>)(object)notConfiguredOutsideMoon).Key).ToString(), ":", null, null }; int? num = for3; obj3[3] = num.ToString(); obj3[4] = ","; dictionary3[key3] = string.Concat(obj3); } } } if (!((DawnBaseInfo<DawnEnemyInfo>)(object)value3).HasTag(DawnLibTags.LunarConfig)) { ((DawnBaseInfo<DawnEnemyInfo>)(object)value3).Internal_AddTag(DawnLibTags.LunarConfig); } WeightTableBuilder<DawnMoonInfo, SpawnWeightContext> val11 = new WeightTableBuilder<DawnMoonInfo, SpawnWeightContext>(); SpawnWeightsPreset val12 = new SpawnWeightsPreset(); List<NamespacedConfigWeight> list7 = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(outsideEnemyWeightString.GetValueOrDefault(((object)item3.Key).ToString(), ""))); List<NamespacedConfigWeight> list8 = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(outsideEnemyWeatherString.GetValueOrDefault(((object)item3.Key).ToString(), ""))); List<NamespacedConfigWeight> list9 = NamespacedConfigWeight.ConvertManyFromString(ComprehendWeights(outsideEnemyDungeonString.GetValueOrDefault(((object)item3.Key).ToString(), ""))); val12.SetupSpawnWeightsPreset(list7, list9, list8, 0); val11.SetGlobalWeight((IWeighted)(object)val12); if (val9 != null) { val9.Weights = val11.Build(); continue; } value3.Outside = new DawnEnemyLocationInfo(val11.Build()); value3.Outside.ParentInfo = value3; } catch (Exception arg6) { MiniLogger.LogError($"LunarConfig encountered an issue while configuring weights for {arg5}, please report this!\n{arg6}"); } } MiniLogger.LogInfo("Completed Initializing Outside Weights"); } enemyWeightsInitialized = true; } public void InitDungeons() { //IL_045a: Unknown result type (might be due to invalid IL or missing references) //IL_0464: Expected O, but got Unknown //IL_0496: Unknown result type (might be due to invalid IL or missing references) //IL_04a0: Expected O, but got Unknown //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Expected O, but got Unknown //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02