Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of ScavRewardNerf v1.0.1
plugins/ScavRewardNerf/ScavRewardNerf.dll
Decompiled 2 years agousing System; 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.Configuration; using BepInEx.Logging; using Microsoft.CodeAnalysis; using RoR2; using ScavSackNerf; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("ScavRewardNerf")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("ScavRewardNerf")] [assembly: AssemblyTitle("ScavRewardNerf")] [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 ScavSackNerf { internal class ScavRewardNerfConfig { public static ConfigEntry<ushort> commonWeight; public static ConfigEntry<ushort> uncommonWeight; public static ConfigEntry<ushort> leginderWeight; public static ConfigEntry<short> maxItems; public static ConfigEntry<bool> disabledPreLoop; public static void Setup(ConfigFile config) { commonWeight = config.Bind<ushort>("Rarity Weights", "Common", (ushort)79, (ConfigDescription)null); uncommonWeight = config.Bind<ushort>("Rarity Weights", "Uncommon", (ushort)20, (ConfigDescription)null); leginderWeight = config.Bind<ushort>("Rarity Weights", "Legendary", (ushort)1, (ConfigDescription)null); maxItems = config.Bind<short>("Misc", "Maximum Items Per Stage", (short)5, "The maximum number of scavengers that can drop an item each stage\r\nSet to 0 to prevent scavengers from dropping anything\r\nSet to a negative number to remove the limit"); disabledPreLoop = config.Bind<bool>("Misc", "Disabled Before Looping", true, "Should scavengers drop vanilla scavenger sacks containing the full 10 items before looping?\r\nTrue by default since I think it's cool that you can get extra items on Sundered Grove to give you a boost on slow runs"); } } } namespace ExamplePlugin { internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(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); } } [BepInPlugin("acats.ScavRewardNerf", "ScavRewardNerf", "1.0.1")] public class ScavRewardNerf : BaseUnityPlugin { public const string PluginGUID = "acats.ScavRewardNerf"; public const string PluginAuthor = "acats"; public const string PluginName = "ScavRewardNerf"; public const string PluginVersion = "1.0.1"; private Xoroshiro128Plus itemDropRandom; private int scavsKilled; public void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); ScavRewardNerfConfig.Setup(((BaseUnityPlugin)this).Config); } private void OnEnable() { GlobalEventManager.onCharacterDeathGlobal += OnDeath; Stage.onServerStageBegin += ServerStageBegin; } private void OnDisable() { GlobalEventManager.onCharacterDeathGlobal -= OnDeath; Stage.onServerStageBegin -= ServerStageBegin; } private void ServerStageBegin(Stage stage) { scavsKilled = 0; if (Enabled()) { stage.scavPackDroppedServer = true; } } private ushort CommonWeight() { return ScavRewardNerfConfig.commonWeight.Value; } private ushort UncommonWeight() { return ScavRewardNerfConfig.uncommonWeight.Value; } private ushort LeginderWeight() { return ScavRewardNerfConfig.leginderWeight.Value; } private bool Enabled() { return !ScavRewardNerfConfig.disabledPreLoop.Value || Run.instance.stageClearCount >= 5; } private int MaxDropsAllowed() { return ScavRewardNerfConfig.maxItems.Value; } private bool ActuallyKilled(DamageReport damageReport) { CharacterMaster victimMaster = damageReport.victimMaster; Inventory val = ((victimMaster != null) ? victimMaster.inventory : null); return Object.op_Implicit((Object)(object)val) && val.GetItemCount(Items.ExtraLife) == 0 && !Object.op_Implicit((Object)(object)damageReport.victimMaster.minionOwnership.ownerMaster) && (!Object.op_Implicit((Object)(object)damageReport.victimBody) || !Object.op_Implicit((Object)(object)damageReport.victimBody.healthComponent) || !damageReport.victimBody.healthComponent.alive); } private void OnDeath(DamageReport damageReport) { //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Expected O, but got Unknown if (Enabled() && MaxDropsAllowed() != 0 && (MaxDropsAllowed() <= 0 || scavsKilled < MaxDropsAllowed()) && !(((Object)damageReport.victim).name != "ScavBody(Clone)") && ActuallyKilled(damageReport)) { scavsKilled++; if (itemDropRandom == null) { itemDropRandom = new Xoroshiro128Plus(Run.instance.seed); } List<PickupIndex> randomTier = GetRandomTier(); PickupIndex val = randomTier[itemDropRandom.RangeInt(0, randomTier.Count)]; PickupDropletController.CreatePickupDroplet(val, damageReport.victimBody.corePosition, Vector3.zero); } } private List<PickupIndex> GetRandomTier() { int num = itemDropRandom.RangeInt(0, CommonWeight() + UncommonWeight() + LeginderWeight()); if (num < CommonWeight()) { return Run.instance.availableTier1DropList; } if (num < CommonWeight() + UncommonWeight()) { return Run.instance.availableTier2DropList; } return Run.instance.availableTier3DropList; } } }