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 AlternativeGoldScaling v1.0.5
plugins/AlternativeGoldScaling.dll
Decompiled 4 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Microsoft.CodeAnalysis; using MiscFixes.Modules; using Mono.Cecil.Cil; using MonoDetour; using MonoDetour.Cil; using MonoDetour.DetourTypes; using MonoDetour.HookGen; using MonoDetourHooks.RoR2.DeathRewards; using MonoDetourHooks.RoR2.Run; using MonoDetourHooks.SS2.Components.Empyrean; using MonoDetourHooks.SS2.Components.Ethereal; using MonoDetourHooks.SS2.Components.Ultra; using MonoMod.Cil; using RiskOfOptions; using RoR2; using SS2; using SS2.Components; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("Starstorm2")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LordVGames.AlternativeGoldScaling")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.5.0")] [assembly: AssemblyInformationalVersion("1.0.5+063178cb36875511687276023cea31689b8748de")] [assembly: AssemblyProduct("LordVGames.AlternativeGoldScaling")] [assembly: AssemblyTitle("AlternativeGoldScaling")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.5.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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 MonoDetourHooks.SS2.Components.Ultra { internal static class MakeElite { public delegate void PrefixSignature(Ultra self, ref CharacterBody body); public delegate void PostfixSignature(Ultra self, ref CharacterBody body); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(Ultra).GetMethod("MakeElite", (BindingFlags)(-1), null, new Type[1] { typeof(CharacterBody) }, null) ?? throw new MissingMethodException("SS2.Components.Ultra", "MakeElite"); } } internal static class get_EliteCreditCost { } internal static class get_CostMultiplier { } internal static class get_CostRequirement { } internal static class IsAvailable { } internal static class get_IsBoss { } internal static class _ctor { } internal static class _cctor { } } namespace MonoDetourHooks.SS2.Components.Ethereal { internal static class MakeElite { public delegate void PrefixSignature(Ethereal self, ref CharacterBody body); public delegate void PostfixSignature(Ethereal self, ref CharacterBody body); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(Ethereal).GetMethod("MakeElite", (BindingFlags)(-1), null, new Type[1] { typeof(CharacterBody) }, null) ?? throw new MissingMethodException("SS2.Components.Ethereal", "MakeElite"); } } internal static class get_EliteCreditCost { } internal static class get_CostMultiplier { } internal static class get_CostRequirement { } internal static class IsAvailable { } internal static class CanAfford { } internal static class _ctor { } internal static class _cctor { } } namespace MonoDetourHooks.SS2.Components.Empyrean { internal static class MakeElite { public delegate void PrefixSignature(Empyrean self, ref CharacterBody body); public delegate void PostfixSignature(Empyrean self, ref CharacterBody body); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(Empyrean).GetMethod("MakeElite", (BindingFlags)(-1), null, new Type[1] { typeof(CharacterBody) }, null) ?? throw new MissingMethodException("SS2.Components.Empyrean", "MakeElite"); } } internal static class get_EliteCreditCost { } internal static class get_CostMultiplier { } internal static class get_IsBoss { } internal static class IsAvailable { } internal static class CanAfford { } internal static class SubtractCost { } internal static class SetSpawnState { } internal static class MakeEmpyreanOLDstupidFUCK { } internal static class _ctor { } } namespace MonoDetourHooks.RoR2.Run { internal static class GetDifficultyScaledCost_System_Int32_System_Single { public delegate void PrefixSignature(Run self, ref int baseCost, ref float difficultyCoefficient); public delegate void PostfixSignature(Run self, ref int baseCost, ref float difficultyCoefficient, ref int returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(Run).GetMethod("GetDifficultyScaledCost", (BindingFlags)(-1), null, new Type[2] { typeof(int), typeof(float) }, null) ?? throw new MissingMethodException("RoR2.Run", "GetDifficultyScaledCost"); } } internal static class TimeStamp { internal static class Min { public delegate void PrefixSignature(ref TimeStamp a, ref TimeStamp b); public delegate void PostfixSignature(ref TimeStamp a, ref TimeStamp b, ref TimeStamp returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(TimeStamp).GetMethod("Min", (BindingFlags)(-1), null, new Type[2] { typeof(TimeStamp), typeof(TimeStamp) }, null) ?? throw new MissingMethodException("RoR2.Run+TimeStamp", "Min"); } } internal static class Max { public delegate void PrefixSignature(ref TimeStamp a, ref TimeStamp b); public delegate void PostfixSignature(ref TimeStamp a, ref TimeStamp b, ref TimeStamp returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(TimeStamp).GetMethod("Max", (BindingFlags)(-1), null, new Type[2] { typeof(TimeStamp), typeof(TimeStamp) }, null) ?? throw new MissingMethodException("RoR2.Run+TimeStamp", "Max"); } } internal static class _ctor { } internal static class get_timeUntil { } internal static class get_timeSince { } internal static class get_timeUntilClamped { } internal static class get_timeSinceClamped { } internal static class get_hasPassed { } internal new static class GetHashCode { } internal static class get_isInfinity { } internal static class get_isPositiveInfinity { } internal static class get_isNegativeInfinity { } internal static class Update { } internal static class get_now { } internal static class _ctor_System_Single { } internal static class Equals_RoR2_Run_TimeStamp { } internal static class Equals_System_Object { } internal static class CompareTo { } internal static class op_Addition { } internal static class op_Subtraction_RoR2_Run_TimeStamp_System_Single { } internal static class op_Subtraction_RoR2_Run_TimeStamp_RoR2_Run_TimeStamp { } internal static class op_LessThan { } internal static class op_GreaterThan { } internal static class op_LessThanOrEqual { } internal static class op_GreaterThanOrEqual { } internal static class op_Equality { } internal static class op_Inequality { } internal static class op_Subtraction_RoR2_Run_TimeStamp_RoR2_Run_FixedTimeStamp { } internal static class Deserialize { } internal static class Serialize { } internal static class ToXml { } internal static class FromXml { } internal static class InverseLerp { } internal static class _cctor { } } internal static class FixedTimeStamp { internal static class Min { public delegate void PrefixSignature(ref FixedTimeStamp a, ref FixedTimeStamp b); public delegate void PostfixSignature(ref FixedTimeStamp a, ref FixedTimeStamp b, ref FixedTimeStamp returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(FixedTimeStamp).GetMethod("Min", (BindingFlags)(-1), null, new Type[2] { typeof(FixedTimeStamp), typeof(FixedTimeStamp) }, null) ?? throw new MissingMethodException("RoR2.Run+FixedTimeStamp", "Min"); } } internal static class Max { public delegate void PrefixSignature(ref FixedTimeStamp a, ref FixedTimeStamp b); public delegate void PostfixSignature(ref FixedTimeStamp a, ref FixedTimeStamp b, ref FixedTimeStamp returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(FixedTimeStamp).GetMethod("Max", (BindingFlags)(-1), null, new Type[2] { typeof(FixedTimeStamp), typeof(FixedTimeStamp) }, null) ?? throw new MissingMethodException("RoR2.Run+FixedTimeStamp", "Max"); } } internal static class _ctor { } internal static class get_timeUntil { } internal static class get_timeSince { } internal static class get_timeUntilClamped { } internal static class get_timeSinceClamped { } internal static class get_hasPassed { } internal new static class GetHashCode { } internal static class get_isInfinity { } internal static class get_isPositiveInfinity { } internal static class get_isNegativeInfinity { } internal static class Update { } internal static class get_now { } internal static class _ctor_System_Single { } internal static class Equals_RoR2_Run_FixedTimeStamp { } internal static class Equals_System_Object { } internal static class CompareTo { } internal static class op_Addition { } internal static class op_Subtraction_RoR2_Run_FixedTimeStamp_System_Single { } internal static class op_Subtraction_RoR2_Run_FixedTimeStamp_RoR2_Run_FixedTimeStamp { } internal static class op_LessThan { } internal static class op_GreaterThan { } internal static class op_LessThanOrEqual { } internal static class op_GreaterThanOrEqual { } internal static class op_Equality { } internal static class op_Inequality { } internal static class Deserialize { } internal static class Serialize { } internal static class ToXml { } internal static class FromXml { } internal static class InverseLerp { } internal static class _cctor { } } internal static class get_instance { } internal static class set_instance { } internal static class OnEnable { } internal static class OnDisable { } internal static class Awake { } internal static class OnStageStartGlobal { } internal static class OnBeginExit { } internal static class get_ruleBook { } internal static class SetRuleBook { } internal static class OnRuleBookUpdated { } internal static class add_onServerRunSetRuleBookGlobal { } internal static class remove_onServerRunSetRuleBookGlobal { } internal static class add_onRunSetRuleBookGlobal { } internal static class remove_onRunSetRuleBookGlobal { } internal static class GetUniqueId { } internal static class AllowRemoteOperation { } internal static class IsRemoteOperationAllowed { } internal static class GetStartTimeUtc { } internal static class SetRunStopwatchPaused { } internal static class GetRunStopwatch { } internal static class SetRunStopwatch { } internal static class get_isRunStopwatchPaused { } internal static class get_loopClearCount { } internal static class get_stageClearCountInCurrentLoop { } internal static class add_onLoopBeginServer { } internal static class remove_onLoopBeginServer { } internal static class OnLoopBeginServer { } internal static class ShouldBeginLoop { } internal static class get_spawnWithPod { } internal static class get_autoGenerateSpawnPoints { } internal static class get_canFamilyEventTrigger { } internal static class get_uiInstances { } internal static class set_uiInstances { } internal static class InstantiateUi { } internal static class UnregisterUi { } internal static class get_seed { } internal static class set_seed { } internal static class GenerateStageRNG { } internal static class GenerateLoopRNG { } internal static class get_selectedDifficulty { } internal static class set_selectedDifficulty { } internal static class get_livingPlayerCount { } internal static class get_participatingPlayerCount { } internal static class get_ambientLevel { } internal static class set_ambientLevel { } internal static class get_ambientLevelFloor { } internal static class set_ambientLevelFloor { } internal static class add_onRunAmbientLevelUp { } internal static class remove_onRunAmbientLevelUp { } internal static class OnAmbientLevelUp { } internal static class get_teamlessDamageCoefficient { } internal static class FixedUpdate { } internal static class RecalculateDifficultyCoefficent { } internal static class RecalculateDifficultyCoefficentInternal { } internal static class InitializeTimeStamps { } internal static class OnFixedUpdate { } internal static class GetLowerPricedChestsTimer { } internal static class Update { } internal static class SetForcePauseRunStopwatch { } internal static class ShouldUpdateRunStopwatch { } internal static class CanUnlockableBeGrantedThisRun_System_String { } internal static class CanUnlockableBeGrantedThisRun_RoR2_UnlockableDef { } internal static class GrantUnlockToAllParticipatingPlayers_System_String { } internal static class GrantUnlockToAllParticipatingPlayers_RoR2_UnlockableDef { } internal static class GrantUnlockToSinglePlayer_System_String_RoR2_CharacterBody { } internal static class GrantUnlockToSinglePlayer_RoR2_UnlockableDef_RoR2_CharacterBody { } internal static class IsUnlockableUnlocked_System_String { } internal static class IsUnlockableUnlocked_RoR2_UnlockableDef { } internal static class DoesEveryoneHaveThisUnlockableUnlocked_System_String { } internal static class DoesEveryoneHaveThisUnlockableUnlocked_RoR2_UnlockableDef { } internal static class ForceUnlockImmediate_System_String { } internal static class ForceUnlockImmediate_RoR2_UnlockableDef { } internal static class PickNextStageSceneFromCurrentSceneDestinations { } internal static class CanPickStage { } internal static class PickNextStageScene { } internal static class GenerateSeedForNewRun { } internal static class RefreshUnlockAvailability { } internal static class BuildUnlockAvailability { } internal static class Start { } internal static class OnDestroy { } internal static class ServerGiveRebirthItems { } internal static class HandlePostRunDestination { } internal static class OnApplicationQuit { } internal static class GetUserMaster { } internal static class OnServerSceneChanged { } internal static class BeginStage { } internal static class EndStage { } internal static class OnUserAdded { } internal static class OnUserRemoved { } internal static class ShouldAllowNewParticipant { } internal static class SetupUserCharacterMaster { } internal static class add_onPlayerFirstCreatedServer { } internal static class remove_onPlayerFirstCreatedServer { } internal static class HandlePlayerFirstEntryAnimation { } internal static class OnServerBossAdded { } internal static class OnServerBossDefeated { } internal static class OnServerCharacterBodySpawned { } internal static class OnServerTeleporterPlaced { } internal static class OnPlayerSpawnPointsPlaced { } internal static class GetTeleportEffectPrefab { } internal static class GetDifficultyScaledCost_System_Int32 { } internal static class BuildDropTable { } internal static class IsItemAvailable { } internal static class IsEquipmentAvailable { } internal static class IsDroneAvailable { } internal static class IsItemExpansionLocked { } internal static class IsEquipmentExpansionLocked { } internal static class IsDroneExpansionLocked { } internal static class IsPickupAvailable { } internal static class IsPowerShape { } internal static class DisablePickupDrop { } internal static class DisableItemDrop { } internal static class DisableEquipmentDrop { } internal static class EnablePickupDrop { } internal static class EnableItemDrop { } internal static class EnableEquipmentDrop { } internal static class RefreshLunarCombinedDropList { } internal static class CCRunEnd { } internal static class CCRunPrintUnlockables { } internal static class CCRunPrintSeed { } internal static class CCRunSetStagesCleared { } internal static class CCRunPreventGameOver { } internal static class AdvanceStage { } internal static class get_preventGameOver { } internal static class set_preventGameOver { } internal static class ResetEventFlagsOnNewLoop { } internal static class get_isGameOverServer { } internal static class set_isGameOverServer { } internal static class add_onServerGameOver { } internal static class remove_onServerGameOver { } internal static class BeginGameOver { } internal static class OnClientGameOver { } internal static class add_onClientGameOverGlobal { } internal static class remove_onClientGameOverGlobal { } internal static class OverrideRuleChoices { } internal static class ForceChoice_RoR2_RuleChoiceMask_RoR2_RuleChoiceMask_RoR2_RuleChoiceDef { } internal static class ForceChoice_RoR2_RuleChoiceMask_RoR2_RuleChoiceMask_System_String { } internal static class FindSafeTeleportPosition_RoR2_CharacterBody_UnityEngine_Transform { } internal static class FindSafeTeleportPosition_RoR2_CharacterBody_UnityEngine_Transform_System_Single_System_Single { } internal static class FindSafeTeleportPositionSimplified { } internal static class add_onRunStartGlobal { } internal static class remove_onRunStartGlobal { } internal static class add_onRunDestroyGlobal { } internal static class remove_onRunDestroyGlobal { } internal static class add_onAvailablePickupsModified { } internal static class remove_onAvailablePickupsModified { } internal static class SetEventFlag { } internal static class GetEventFlag { } internal static class ResetEventFlag { } internal static class ShouldAllowNonChampionBossSpawn { } internal static class IsExpansionEnabled { } internal static class OnSeedSet { } internal static class _ctor { } internal static class _cctor { } internal static class _PickNextStageScene_g__IsValidNextStage_157_0 { } internal static class UNetVersion { } internal static class get_NetworkinSceneTransition { } internal static class set_NetworkinSceneTransition { } internal static class get_Network_uniqueId { } internal static class set_Network_uniqueId { } internal static class get_NetworkisRemoteOperationAllowed { } internal static class set_NetworkisRemoteOperationAllowed { } internal static class get_NetworkstartTimeUtc { } internal static class set_NetworkstartTimeUtc { } internal static class get_NetworkfixedTime { } internal static class set_NetworkfixedTime { } internal static class get_NetworkrunStopwatch { } internal static class set_NetworkrunStopwatch { } internal static class get_NetworkisRunStopwatchForcePaused { } internal static class set_NetworkisRunStopwatchForcePaused { } internal static class get_NetworkstageClearCount { } internal static class set_NetworkstageClearCount { } internal static class get_Network_loopClearCount { } internal static class set_Network_loopClearCount { } internal static class get_NetworkstageClearCountAtLoopStart { } internal static class set_NetworkstageClearCountAtLoopStart { } internal static class get_NetworkselectedDifficultyInternal { } internal static class set_NetworkselectedDifficultyInternal { } internal static class OnSerialize { } internal static class OnDeserialize { } internal static class PreStartClient { } internal static class RunStopwatch { internal static class _ctor { } internal static class Equals_RoR2_Run_RunStopwatch { } internal static class Equals_System_Object { } internal new static class GetHashCode { } } internal static class LoopBeginArgs { internal static class _ctor { } } } namespace MonoDetourHooks.RoR2.DeathRewards { internal static class OnKilledServer { public delegate void PrefixSignature(DeathRewards self, ref DamageReport damageReport); public delegate void PostfixSignature(DeathRewards self, ref DamageReport damageReport); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(DeathRewards).GetMethod("OnKilledServer", (BindingFlags)(-1), null, new Type[1] { typeof(DamageReport) }, null) ?? throw new MissingMethodException("RoR2.DeathRewards", "OnKilledServer"); } } internal static class get_goldReward { } internal static class set_goldReward { } internal static class get_expReward { } internal static class set_expReward { } internal static class get_spawnValue { } internal static class set_spawnValue { } internal static class LoadAssets { } internal static class Awake { } internal static class CCMigrateDeathRewardUnlockables { } internal static class _ctor { } internal static class __c { internal static class _cctor { } internal static class _ctor { } internal static class _LoadAssets_b__19_0 { } internal static class _LoadAssets_b__19_1 { } } } namespace MonoDetour.HookGen { internal static class DefaultMonoDetourManager { internal static MonoDetourManager Instance { get; } = New(); internal static MonoDetourManager New() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown return new MonoDetourManager(typeof(DefaultMonoDetourManager).Assembly.GetName().Name); } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class, AllowMultiple = true, Inherited = false)] internal class MonoDetourTargetsAttribute : Attribute, IMonoDetourTargets { public Type? TargetType { get; } public bool IncludeNestedTypes { get; set; } public string[]? Members { get; set; } public string[]? MemberNamePrefixes { get; set; } public string[]? MemberNameSuffixes { get; set; } public bool GenerateControlFlowVariants { get; set; } public MonoDetourTargetsAttribute(Type? targetType = null) { TargetType = targetType; IncludeNestedTypes = true; base..ctor(); } } } namespace BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Microsoft.CodeAnalysis.Embedded] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Microsoft.CodeAnalysis.Embedded] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace Microsoft.CodeAnalysis { [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace AlternativeGoldScaling { public static class ConfigOptions { internal static ConfigEntry<bool> EnableLoggingMoneyChange; private const string _wrbGoldRewardSectionName = "WRB - Enemy gold reward scaling"; public static ConfigEntry<bool> EnableWRBGoldScaling; public static ConfigEntry<float> BaseGoldScalingMultiplier; public static ConfigEntry<float> LoopMultiplier; public static ConfigEntry<float> StageDivisor; public static ConfigEntry<float> StageClearCountMultiplier; public static ConfigEntry<float> StageMultiplier; public static ConfigEntry<float> SquareRootMultiplier; public static ConfigEntry<float> StageAndLoopMultiplier; private const string _wrbMultiplayerCostSectionName = "WRB - Multiplayer cost scaling"; public static ConfigEntry<bool> EnableWRBMultiplayerCostScaling; public static ConfigEntry<float> BaseMultiplayerCostMultiplier; public static ConfigEntry<float> PerPlayerCostMultiplier; private const string _ss2EntireSectionName = "Starstorm 2 - Late-game elites support"; public static ConfigEntry<bool> EnableSS2Support; private const string _ss2EmpyreanSectionName = "Starstorm 2 - Empyrean Gold Reward"; public static ConfigEntry<bool> SS2Empyrean_EnableChange; public static ConfigEntry<float> SS2Empyrean_NerfBaseMultiplier; public static ConfigEntry<int> SS2Empyrean_StageOfNerfStart; public static ConfigEntry<float> SS2Empyrean_NerfPerStageMultiplier; private const string _ss2EtherealSectionName = "Starstorm 2 - Ethereal Gold Reward"; public static ConfigEntry<bool> SS2Ethereal_EnableChange; public static ConfigEntry<float> SS2Ethereal_NerfBaseMultiplier; public static ConfigEntry<float> SS2Ethereal_EtherealsUsedMultiplier; public static ConfigEntry<int> SS2Ethereal_StageOfNerfStart; public static ConfigEntry<float> SS2Ethereal_NerfPerStageMultiplier; private const string _ss2UltraSectionName = "Starstorm 2 - Ultra Gold Reward"; public static ConfigEntry<bool> SS2Ultra_EnableChange; public static ConfigEntry<float> SS2Ultra_NerfBaseMultiplier; public static ConfigEntry<float> SS2Ultra_EtherealsUsedMultiplier; public static ConfigEntry<int> SS2Ultra_StageOfNerfStart; public static ConfigEntry<float> SS2Ultra_NerfPerStageMultiplier; internal static void BindConfigOptions(ConfigFile config) { if (ModSupport.RiskOfOptionsMod.ModIsRunning) { ModSupport.RiskOfOptionsMod.SetRiskOfOptionsDescription(); } EnableLoggingMoneyChange = Extensions.BindOption<bool>(config, "Other", "Log before and after of money gained", "This is to help tune your formula values.", false, (ConfigFlags)0); BindWRBGoldRewardOptions(config); BindWRBMultiplayerGoldScalingOptions(config); BindSS2Options(config); Extensions.WipeConfig(config); } private static void BindWRBGoldRewardOptions(ConfigFile config) { EnableWRBGoldScaling = Extensions.BindOption<bool>(config, "WRB - Enemy gold reward scaling", "Enable", "Enable using the formula from Well-Rounded Balance (WRB) for scaling gold from enemy kills?\n\nFormula for gold reward: Minimum value between Vanilla Gold Reward * Base Multiplier and Base Multiplier * ((Vanilla Gold Reward / (Stage Divisor + (Stage Clear Count * Stage Clear Count Multiplier))) + Square Root(Square Root Multiplier * (Stage And Loop Multiplier + (Stage Clear Count * Stage Multiplier + Loop Clear Count * Loop Multiplier))))", true, (ConfigFlags)1); BaseGoldScalingMultiplier = Extensions.BindOptionSteppedSlider(config, "WRB - Enemy gold reward scaling", "Base Multiplier", "WRB's default value is 0.75", 1.13f, 0.01f, 0.01f, 2.5f, (ConfigFlags)0); LoopMultiplier = Extensions.BindOptionSteppedSlider(config, "WRB - Enemy gold reward scaling", "Loop Multiplier", "WRB's default value is unchanged", -660f, 5f, -1000f, 500f, (ConfigFlags)0); StageDivisor = Extensions.BindOptionSlider<float>(config, "WRB - Enemy gold reward scaling", "Stage Divisor", "WRB's default value is 3", 2f, (ConfigFlags)0); StageClearCountMultiplier = Extensions.BindOptionSlider<float>(config, "WRB - Enemy gold reward scaling", "Stage Clear Count Multiplier", "WRB's default value is 0.25", 0.5f, (ConfigFlags)0); StageMultiplier = Extensions.BindOptionSteppedSlider(config, "WRB - Enemy gold reward scaling", "Stage Multiplier", "WRB's default value is unchanged", 150f, 5f, 0f, 300f, (ConfigFlags)0); SquareRootMultiplier = Extensions.BindOptionSlider<float>(config, "WRB - Enemy gold reward scaling", "Square Root Multiplier", "WRB's default value is unchanged", 6f, (ConfigFlags)0); StageAndLoopMultiplier = Extensions.BindOptionSteppedSlider(config, "WRB - Enemy gold reward scaling", "Stage and Loop Multiplier", "WRB's default value is unchanged", 275f, 5f, 0f, 500f, (ConfigFlags)0); } private static void BindWRBMultiplayerGoldScalingOptions(ConfigFile config) { EnableWRBMultiplayerCostScaling = Extensions.BindOption<bool>(config, "WRB - Multiplayer cost scaling", "Enable", "Enable using the formula from Well-Rounded Balance (WRB) for scaling the cost of buyable things in multiplayer?\n\nFormula for cost scaling: Base Multiplier + (Per-Player Multiplier / Square Root(Player Count))", true, (ConfigFlags)0); BaseMultiplayerCostMultiplier = Extensions.BindOptionSlider<float>(config, "WRB - Multiplayer cost scaling", "Base Multiplier", "WRB's default value is unchanged", 1f, (ConfigFlags)0); PerPlayerCostMultiplier = Extensions.BindOptionSlider<float>(config, "WRB - Multiplayer cost scaling", "Per-Player cost multiplier", "WRB's default value is unchanged", 0.11f, (ConfigFlags)0); } private static void BindSS2Options(ConfigFile config) { EnableSS2Support = Extensions.BindOption<bool>(config, "Starstorm 2 - Late-game elites support", "Enable", "Enable special support for nerfing the gold reward from some late-game elites from Starstorm 2? The gold reward nerf for these elites are ON TOP OF the existing gold nerf from WRB if it's enabled.\n\nFormula for gold reward: Base Gold Reward * Highest value between 1 and (Base Multiplier + IF APPLICABLE (Ethereal Multiplier * Ethereals Used Count)) / (1 + (Highest value between 0 and ((Stage Clear Count + 1) - Starting Stage of Nerf) * Per-Stage Multiplier))", true, (ConfigFlags)1); SS2Empyrean_EnableChange = Extensions.BindOption<bool>(config, "Starstorm 2 - Empyrean Gold Reward", "Enable Empyrean Gold Reward Change", "", true, (ConfigFlags)1); SS2Empyrean_NerfBaseMultiplier = Extensions.BindOptionSlider<float>(config, "Starstorm 2 - Empyrean Gold Reward", "Empyrean - Base Multiplier", "", 10f, (ConfigFlags)0); SS2Empyrean_StageOfNerfStart = Extensions.BindOptionSlider<int>(config, "Starstorm 2 - Empyrean Gold Reward", "Empyrean - Starting stage of nerf", "", 9, (ConfigFlags)0); SS2Empyrean_NerfPerStageMultiplier = Extensions.BindOptionSlider<float>(config, "Starstorm 2 - Empyrean Gold Reward", "Empyrean - Per-Stage multiplier", "", 0.5f, (ConfigFlags)0); SS2Ethereal_EnableChange = Extensions.BindOption<bool>(config, "Starstorm 2 - Ethereal Gold Reward", "Enable Ethereal Gold Reward Change", "", false, (ConfigFlags)1); SS2Ethereal_NerfBaseMultiplier = Extensions.BindOptionSlider<float>(config, "Starstorm 2 - Ethereal Gold Reward", "Ethereal - Base Multiplier", "", 2f, (ConfigFlags)0); SS2Ethereal_EtherealsUsedMultiplier = Extensions.BindOptionSlider<float>(config, "Starstorm 2 - Ethereal Gold Reward", "Ethereal - Ethereals-used Multiplier", "", 2f, (ConfigFlags)0); SS2Ethereal_StageOfNerfStart = Extensions.BindOptionSlider<int>(config, "Starstorm 2 - Ethereal Gold Reward", "Ethereal - Starting stage of nerf", "", 8, (ConfigFlags)0); SS2Ethereal_NerfPerStageMultiplier = Extensions.BindOptionSlider<float>(config, "Starstorm 2 - Ethereal Gold Reward", "Ethereal - Per-Stage multiplier", "", 0.35f, (ConfigFlags)0); SS2Ultra_EnableChange = Extensions.BindOption<bool>(config, "Starstorm 2 - Ultra Gold Reward", "Enable Ultra Gold Reward Change", "", false, (ConfigFlags)1); SS2Ultra_NerfBaseMultiplier = Extensions.BindOptionSlider<float>(config, "Starstorm 2 - Ultra Gold Reward", "Ultra - Base Multiplier", "", 15f, (ConfigFlags)0); SS2Ultra_EtherealsUsedMultiplier = Extensions.BindOptionSlider<float>(config, "Starstorm 2 - Ultra Gold Reward", "Ultra - Ethereals-used Multiplier", "", 20f, (ConfigFlags)0); SS2Ultra_StageOfNerfStart = Extensions.BindOptionSlider<int>(config, "Starstorm 2 - Ultra Gold Reward", "Ultra - Starting stage of nerf", "", 12, (ConfigFlags)0); SS2Ultra_NerfPerStageMultiplier = Extensions.BindOptionSlider<float>(config, "Starstorm 2 - Ultra Gold Reward", "Ultra - Per-Stage multiplier", "", 0.8f, (ConfigFlags)0); } } internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } internal static void BeforeAndAfter(object data) { if (ConfigOptions.EnableLoggingMoneyChange != null && ConfigOptions.EnableLoggingMoneyChange.Value) { _logSource.LogInfo(data); } } } internal static class MainChanges { [MonoDetourTargets(typeof(DeathRewards))] [MonoDetourTargets(typeof(Run))] internal static class Hooks { [CompilerGenerated] private static class <>O { public static OnKilledServer.PrefixSignature <0>__SetWRBGoldReward; public static Manipulator <1>__SetNewMultiplayerCostScaling; } [MonoDetourHookInitialize] internal static void Setup() { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown if (ConfigOptions.EnableWRBGoldScaling.Value) { OnKilledServer.Prefix(SetWRBGoldReward); object obj = <>O.<1>__SetNewMultiplayerCostScaling; if (obj == null) { Manipulator val = SetNewMultiplayerCostScaling; <>O.<1>__SetNewMultiplayerCostScaling = val; obj = (object)val; } GetDifficultyScaledCost_System_Int32_System_Single.ILHook((Manipulator)obj); } } private static void SetWRBGoldReward(DeathRewards self, ref DamageReport damageReport) { Log.BeforeAndAfter($"Before WRB Gold Reward: {self.goldReward}"); self.goldReward = GetWRBGoldReward(self.goldReward); Log.BeforeAndAfter($"After WRB Gold Reward: {self.goldReward}"); } internal static uint GetWRBGoldReward(uint goldReward) { return Convert.ToUInt32(Mathf.Min((float)goldReward * ConfigOptions.BaseGoldScalingMultiplier.Value, ConfigOptions.BaseGoldScalingMultiplier.Value * ((float)goldReward / (ConfigOptions.StageDivisor.Value + (float)Run.instance.stageClearCount * ConfigOptions.StageClearCountMultiplier.Value) + Mathf.Sqrt(ConfigOptions.SquareRootMultiplier.Value * (ConfigOptions.StageAndLoopMultiplier.Value + ((float)Run.instance.stageClearCount * ConfigOptions.StageMultiplier.Value + (float)Run.instance.loopClearCount * ConfigOptions.LoopMultiplier.Value)))))); } private static void SetNewMultiplayerCostScaling(ILManipulationInfo info) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ILWeaver w = new ILWeaver(info); w.MatchRelaxed(new Predicate<Instruction>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1.25f) && w.SetCurrentTo(x) }).ThrowIfFailure(); w.InsertAfterCurrent((IEnumerable<InstructionOrEnumerable>)new <>z__ReadOnlySingleElementList<InstructionOrEnumerable>(InstructionOrEnumerable.op_Implicit(w.CreateDelegateCall<Func<float, float>>((Func<float, float>)delegate(float originalScaling) { int participatingPlayerCount = Run.instance.participatingPlayerCount; float num = ConfigOptions.BaseMultiplayerCostMultiplier.Value + ConfigOptions.PerPlayerCostMultiplier.Value / Mathf.Sqrt((float)participatingPlayerCount); return (participatingPlayerCount > 1) ? num : originalScaling; })))); } } internal static int CurrentStageNumber => Run.instance.stageClearCount + 1; } internal static class ModSupport { internal static class RiskOfOptionsMod { private static bool? _modexists; public static bool ModIsRunning { get { bool valueOrDefault = _modexists.GetValueOrDefault(); if (!_modexists.HasValue) { valueOrDefault = Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"); _modexists = valueOrDefault; } return _modexists.Value; } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static void SetRiskOfOptionsDescription() { ModSettingsManager.SetModDescription("A standalone version of the Well-Rounded Balance mod's gold scaling, with some more values now configurable + some mod support."); } } internal static class Starstorm2 { [MonoDetourTargets(typeof(Empyrean))] private static class EmpyreanGoldReward { [CompilerGenerated] private static class <>O { public static Manipulator <0>__ReplaceEmpyreanGoldReward; public static Func<uint, DeathRewards, uint> <1>__SetNewEmpyreanGoldReward; } [MonoDetourHookInitialize] internal static void Setup() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown if (ConfigOptions.SS2Empyrean_EnableChange.Value) { object obj = <>O.<0>__ReplaceEmpyreanGoldReward; if (obj == null) { Manipulator val = ReplaceEmpyreanGoldReward; <>O.<0>__ReplaceEmpyreanGoldReward = val; obj = (object)val; } MonoDetourHooks.SS2.Components.Empyrean.MakeElite.ILHook((Manipulator)obj); } } private static void ReplaceEmpyreanGoldReward(ILManipulationInfo info) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_004c: Unknown result type (might be due to invalid IL or missing references) ILWeaver w = new ILWeaver(info); w.MatchRelaxed(new Predicate<Instruction>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt<DeathRewards>(x, "set_goldReward") && w.SetCurrentTo(x) }).ThrowIfFailure(); w.InsertBeforeCurrent((IEnumerable<Instruction>)new <>z__ReadOnlyArray<Instruction>((Instruction[])(object)new Instruction[2] { w.Create(OpCodes.Ldloc_3), w.CreateCall((Delegate)new Func<uint, DeathRewards, uint>(SetNewEmpyreanGoldReward)) })); } private static uint SetNewEmpyreanGoldReward(uint oldGoldReward, DeathRewards deathRewards) { float value = ConfigOptions.SS2Empyrean_NerfBaseMultiplier.Value; int value2 = ConfigOptions.SS2Empyrean_StageOfNerfStart.Value; float value3 = ConfigOptions.SS2Empyrean_NerfPerStageMultiplier.Value; Log.BeforeAndAfter($"Before New Empyrean Gold Reward: {deathRewards.goldReward}"); deathRewards.goldReward *= Convert.ToUInt32(MathF.Max(1f, value / (1f + MathF.Max(0f, (float)(MainChanges.CurrentStageNumber - value2) * value3)))); Log.BeforeAndAfter($"After New Empyrean Gold Reward: {deathRewards.goldReward}"); return deathRewards.goldReward; } } [MonoDetourTargets(typeof(Ethereal))] private static class EtherealGoldReward { [CompilerGenerated] private static class <>O { public static Manipulator <0>__ReplaceEtherealGoldReward; public static Func<uint, DeathRewards, uint> <1>__SetNewEtherealGoldReward; } [MonoDetourHookInitialize] internal static void Setup() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown if (ConfigOptions.SS2Ethereal_EnableChange.Value) { object obj = <>O.<0>__ReplaceEtherealGoldReward; if (obj == null) { Manipulator val = ReplaceEtherealGoldReward; <>O.<0>__ReplaceEtherealGoldReward = val; obj = (object)val; } MonoDetourHooks.SS2.Components.Ethereal.MakeElite.ILHook((Manipulator)obj); } } private static void ReplaceEtherealGoldReward(ILManipulationInfo info) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_004c: Unknown result type (might be due to invalid IL or missing references) ILWeaver w = new ILWeaver(info); w.MatchRelaxed(new Predicate<Instruction>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt<DeathRewards>(x, "set_goldReward") && w.SetCurrentTo(x) }).ThrowIfFailure(); w.InsertBeforeCurrent((IEnumerable<Instruction>)new <>z__ReadOnlyArray<Instruction>((Instruction[])(object)new Instruction[2] { w.Create(OpCodes.Ldloc_3), w.CreateCall((Delegate)new Func<uint, DeathRewards, uint>(SetNewEtherealGoldReward)) })); } private static uint SetNewEtherealGoldReward(uint oldGoldReward, DeathRewards deathRewards) { EtherealBehavior instance = EtherealBehavior.instance; float value = ConfigOptions.SS2Ethereal_NerfBaseMultiplier.Value; float value2 = ConfigOptions.SS2Ethereal_EtherealsUsedMultiplier.Value; int value3 = ConfigOptions.SS2Ethereal_StageOfNerfStart.Value; float value4 = ConfigOptions.SS2Ethereal_NerfPerStageMultiplier.Value; Log.BeforeAndAfter($"Before New Ethereal Gold Reward: {deathRewards.goldReward}"); deathRewards.goldReward *= Convert.ToUInt32(MathF.Max(1f, (value + value2 * (float)instance.etherealsCompleted) / (1f + MathF.Max(0f, (float)(MainChanges.CurrentStageNumber - value3) * value4)))); Log.BeforeAndAfter($"After New Ethereal Gold Reward: {deathRewards.goldReward}"); return deathRewards.goldReward; } } [MonoDetourTargets(typeof(Ultra))] private static class UltraGoldReward { [CompilerGenerated] private static class <>O { public static Manipulator <0>__ReplaceUltraGoldReward; public static Func<uint, DeathRewards, uint> <1>__GetNewUltraGoldReward; } [MonoDetourHookInitialize] internal static void Setup() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown if (ConfigOptions.SS2Ultra_EnableChange.Value) { object obj = <>O.<0>__ReplaceUltraGoldReward; if (obj == null) { Manipulator val = ReplaceUltraGoldReward; <>O.<0>__ReplaceUltraGoldReward = val; obj = (object)val; } MonoDetourHooks.SS2.Components.Ultra.MakeElite.ILHook((Manipulator)obj); } } private static void ReplaceUltraGoldReward(ILManipulationInfo info) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_004c: Unknown result type (might be due to invalid IL or missing references) ILWeaver w = new ILWeaver(info); w.MatchRelaxed(new Predicate<Instruction>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt<DeathRewards>(x, "set_goldReward") && w.SetCurrentTo(x) }).ThrowIfFailure(); w.InsertBeforeCurrent((IEnumerable<Instruction>)new <>z__ReadOnlyArray<Instruction>((Instruction[])(object)new Instruction[2] { w.Create(OpCodes.Ldloc_3), w.CreateCall((Delegate)new Func<uint, DeathRewards, uint>(GetNewUltraGoldReward)) })); } private static uint GetNewUltraGoldReward(uint oldGoldReward, DeathRewards deathRewards) { EtherealBehavior instance = EtherealBehavior.instance; float value = ConfigOptions.SS2Ultra_NerfBaseMultiplier.Value; float value2 = ConfigOptions.SS2Ultra_EtherealsUsedMultiplier.Value; int value3 = ConfigOptions.SS2Ultra_StageOfNerfStart.Value; float value4 = ConfigOptions.SS2Ultra_NerfPerStageMultiplier.Value; Log.BeforeAndAfter($"Before New Ultra Gold Reward: {deathRewards.goldReward}"); deathRewards.goldReward *= Convert.ToUInt32(MathF.Max(1f, (value + value2 * (float)instance.etherealsCompleted) / (1f + MathF.Max(0f, (float)(MainChanges.CurrentStageNumber - value3) * value4)))); Log.BeforeAndAfter($"After New Ultra Gold Reward: {deathRewards.goldReward}"); return deathRewards.goldReward; } } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("LordVGames.AlternativeGoldScaling", "AlternativeGoldScaling", "1.0.5")] public class Plugin : BaseUnityPlugin { public const string Id = "LordVGames.AlternativeGoldScaling"; public static string Name => "AlternativeGoldScaling"; public static string Version => "1.0.5"; public void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); ConfigOptions.BindConfigOptions(((BaseUnityPlugin)this).Config); MonoDetourManager.InvokeHookInitializers(typeof(Plugin).Assembly); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } [CompilerGenerated] internal sealed class <>z__ReadOnlyArray<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { int ICollection.Count => _items.Length; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => _items.Length; T IReadOnlyList<T>.this[int index] => _items[index]; int ICollection<T>.Count => _items.Length; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } public <>z__ReadOnlyArray(T[] items) { _items = items; } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_items).GetEnumerator(); } void ICollection.CopyTo(Array array, int index) { ((ICollection)_items).CopyTo(array, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return ((IList)_items).Contains(value); } int IList.IndexOf(object value) { return ((IList)_items).IndexOf(value); } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return ((IEnumerable<T>)_items).GetEnumerator(); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return ((ICollection<T>)_items).Contains(item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { ((ICollection<T>)_items).CopyTo(array, arrayIndex); } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { return ((IList<T>)_items).IndexOf(item); } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } } [CompilerGenerated] internal sealed class <>z__ReadOnlySingleElementList<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { private sealed class Enumerator : IDisposable, IEnumerator, IEnumerator<T> { object IEnumerator.Current => _item; T IEnumerator<T>.Current => _item; public Enumerator(T item) { _item = item; } bool IEnumerator.MoveNext() { if (!_moveNextCalled) { return _moveNextCalled = true; } return false; } void IEnumerator.Reset() { _moveNextCalled = false; } void IDisposable.Dispose() { } } int ICollection.Count => 1; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => 1; T IReadOnlyList<T>.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } } int ICollection<T>.Count => 1; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } set { throw new NotSupportedException(); } } public <>z__ReadOnlySingleElementList(T item) { _item = item; } IEnumerator IEnumerable.GetEnumerator() { return new Enumerator(_item); } void ICollection.CopyTo(Array array, int index) { array.SetValue(_item, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return EqualityComparer<T>.Default.Equals(_item, (T)value); } int IList.IndexOf(object value) { if (!EqualityComparer<T>.Default.Equals(_item, (T)value)) { return -1; } return 0; } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return new Enumerator(_item); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return EqualityComparer<T>.Default.Equals(_item, item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { array[arrayIndex] = _item; } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { if (!EqualityComparer<T>.Default.Equals(_item, item)) { return -1; } return 0; } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } }