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 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; } } }