Please disclose if your mod was created primarily 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 Weather Gains v2.0.1
WeatherGains.dll
Decompiled 3 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using WeatherGains.Types; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("WeatherGains")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+3201b9691bf80db83e32a866ee08c898a91e5efc")] [assembly: AssemblyProduct("WeatherGains")] [assembly: AssemblyTitle("WeatherGains")] [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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace WeatherGains { public static class MultiplierManager { public static int ApplyValueMultiplier(int initialValue) { if (!WeatherGains.BoundConfig.ValueMultiEnabled.Value) { return initialValue; } float num = GetMultiplierGroupForCurrentWeather().ValueMultiplier.Value; if (WeatherGains.BoundConfig.ValueMultiVariation.Value > 0f) { float value = WeatherGains.BoundConfig.ValueMultiVariation.Value; float num2 = 1f + Random.Range(0f - value, value) / 100f; num *= num2; } return (int)((float)initialValue * num); } public static float ApplyAmountMultiplier(float initialAmount) { if (!WeatherGains.BoundConfig.AmountMultiEnabled.Value) { return initialAmount; } float value = GetMultiplierGroupForCurrentWeather().AmountMultiplier.Value; return initialAmount * value; } private static MultiValueGroup GetMultiplierGroupForCurrentWeather() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) return WeatherGains.BoundConfig.Multipliers[TimeOfDay.Instance.currentLevelWeather]; } } public class PluginConfig { private const string SectionMultipliers = "Multipliers"; private const string SectionGeneral = "General"; private const int ConfigVersion = 2; public ConfigEntry<bool> LungValueMultiEnabled; public ConfigEntry<bool> AmountMultiEnabled; public ConfigEntry<bool> ValueMultiEnabled; public ConfigEntry<bool> CompatibilityMode; public ConfigEntry<bool> PluginEnabled; public ConfigEntry<float> ValueMultiVariation; public readonly Dictionary<LevelWeatherType, MultiValueGroup> Multipliers = new Dictionary<LevelWeatherType, MultiValueGroup>(); public PluginConfig(ConfigFile config) { config.SaveOnConfigSet = true; ApplyConfig(config); ClearOrphanedEntries(config); config.Save(); } private void ApplyConfig(ConfigFile config) { //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) config.Bind<int>("Meta", "ConfigVersion", 2, "!!! DO NOT CHANGE THIS VALUE !!!"); LungValueMultiEnabled = config.Bind<bool>("General", "ApparatusMultiplierEnabled", true, "Toggles the value multiplier on the apparatus (lung)."); ValueMultiVariation = config.Bind<float>("General", "ValueMultiVariation", 5f, "Sets the maximum random variation (in percent) for the value multiplier (makes scrap values more natural). Set to 0 to disable."); AmountMultiEnabled = config.Bind<bool>("General", "AmountMultiplierEnabled", true, "Toggles the amount multiplier on scrap."); ValueMultiEnabled = config.Bind<bool>("General", "ValueMultiplierEnabled", true, "Toggles the value multiplier on scrap."); CompatibilityMode = config.Bind<bool>("General", "CompatibilityMode", false, "Disables all transpilers for compatibility with other mods. This will prevent multipliers from being applied to bee hives."); PluginEnabled = config.Bind<bool>("General", "PluginEnabled", true, "Toggles the functionality of the plugin; an easy way to turn everything off!"); foreach (LevelWeatherType value in Enum.GetValues(typeof(LevelWeatherType))) { Multipliers[value] = new MultiValueGroup { AmountMultiplier = BindMultiplier(config, value, "Amount", DefaultAmount(value)), ValueMultiplier = BindMultiplier(config, value, "Value", DefaultValue(value)) }; } } private static ConfigEntry<float> BindMultiplier(ConfigFile config, LevelWeatherType weather, string type, float defaultValue) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) return config.Bind<float>("Multipliers", $"{weather}{type}Multiplier", defaultValue, type + " multiplier applied during " + ((object)(LevelWeatherType)(ref weather)).ToString().ToLower() + " weather. Set to 1 to disable."); } private static float DefaultAmount(LevelWeatherType weather) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected I4, but got Unknown return (weather - 1) switch { 2 => 1.1f, 0 => 1.1f, 1 => 1.2f, 3 => 1.2f, 4 => 1.3f, _ => 1f, }; } private static float DefaultValue(LevelWeatherType weather) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected I4, but got Unknown return (weather - 1) switch { 2 => 1.2f, 0 => 1.2f, 1 => 1.35f, 3 => 1.4f, 4 => 1.75f, _ => 1f, }; } private static void ClearOrphanedEntries(ConfigFile config) { if (AccessTools.Property(typeof(ConfigFile), "OrphanedEntries")?.GetValue(config) is IDictionary dictionary) { dictionary.Clear(); } } } internal static class PluginInfo { public const string GUID = "uk.co.sulphurdev.weathergains"; public const string NAME = "Weather Gains"; public const string VERSION = "2.0.1"; } [BepInPlugin("uk.co.sulphurdev.weathergains", "Weather Gains", "2.0.1")] public class WeatherGains : BaseUnityPlugin { internal static PluginConfig BoundConfig { get; private set; } private static ManualLogSource Logger { get; set; } private static Harmony Harmony { get; set; } private void Awake() { BoundConfig = new PluginConfig(((BaseUnityPlugin)this).Config); Logger = ((BaseUnityPlugin)this).Logger; if (!BoundConfig.PluginEnabled.Value) { Logger.LogWarning((object)"Weather Gains v2.0.1 is disabled! If this is not intentional, please enable it in the config file."); return; } Logger.LogInfo((object)"Weather Gains v2.0.1 is loading..."); ApplyPatches(); Logger.LogInfo((object)"Weather Gains v2.0.1 has loaded!"); } private static void ApplyPatches() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("uk.co.sulphurdev.weathergains"); } Logger.LogDebug((object)"Applying patches..."); Harmony.PatchAll(); Logger.LogDebug((object)"Successfully applied all patches!"); } internal static void RemovePatches() { if (Harmony != null) { Logger.LogDebug((object)"Removing patches..."); Harmony.UnpatchAll(Harmony.Id); Logger.LogDebug((object)"Successfully removed all patches!"); Harmony = null; } } } } namespace WeatherGains.Types { public class MultiValueGroup { public ConfigEntry<float> ValueMultiplier { get; set; } public ConfigEntry<float> AmountMultiplier { get; set; } } } namespace WeatherGains.Transpilers { [HarmonyPatch(typeof(RedLocustBees))] public class RedLocustBeesTranspiler { [HarmonyPatch("SpawnHiveNearEnemy")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> SpawnHiveNearEnemyTranspiler(IEnumerable<CodeInstruction> instructions) { //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown if (WeatherGains.BoundConfig.CompatibilityMode.Value) { return instructions; } List<CodeInstruction> list = new List<CodeInstruction>(instructions); MethodInfo methodInfo = AccessTools.Method(typeof(RedLocustBees), "SpawnHiveClientRpc", (Type[])null, (Type[])null); MethodInfo methodInfo2 = AccessTools.Method(typeof(MultiplierManager), "ApplyValueMultiplier", (Type[])null, (Type[])null); for (int i = 1; i < list.Count; i++) { if (!CodeInstructionExtensions.Calls(list[i], methodInfo)) { continue; } for (int num = i - 1; num >= 0; num--) { if (list[num].opcode == OpCodes.Ldloc_3) { list.Insert(num + 1, new CodeInstruction(OpCodes.Call, (object)methodInfo2)); return list; } } return list; } return list; } } } namespace WeatherGains.Patches { [HarmonyPatch(typeof(GrabbableObject))] public class GrabbableObjectPatch { [HarmonyPatch("SetScrapValue")] [HarmonyPrefix] private static void SetScrapValuePrefix(ref int setValueTo) { setValueTo = MultiplierManager.ApplyValueMultiplier(setValueTo); } } [HarmonyPatch(typeof(LungProp))] public class LungPropPatch { [HarmonyPatch("DisconnectFromMachinery")] [HarmonyPrefix] private static void DisconnectFromMachineryPatch(LungProp __instance) { if (WeatherGains.BoundConfig.LungValueMultiEnabled.Value) { ((GrabbableObject)__instance).SetScrapValue(MultiplierManager.ApplyValueMultiplier(((GrabbableObject)__instance).scrapValue)); } } } [HarmonyPatch(typeof(RoundManager))] public class RoundManagerPatch { private static float _appliedMultiplier = 1f; [HarmonyPatch("SpawnScrapInLevel")] [HarmonyPrefix] private static void SpawnScrapInLevelPrefix() { float num = MultiplierManager.ApplyAmountMultiplier(RoundManager.Instance.scrapAmountMultiplier); RoundManager.Instance.scrapAmountMultiplier = num; _appliedMultiplier = num; } [HarmonyPatch("SpawnScrapInLevel")] [HarmonyPostfix] private static void SpawnScrapInLevelPostfix() { RoundManager instance = RoundManager.Instance; instance.scrapAmountMultiplier /= _appliedMultiplier; _appliedMultiplier = 1f; } } }