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 DropItem Addition v1.0.0
DropItemAddition.dll
Decompiled 5 months 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.Logging; using HarmonyLib; using RoR2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("DropItemAddition")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("DropItemAddition")] [assembly: AssemblyTitle("DropItemAddition")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace ShrineClamper.Utils { public static class ListHandlers { public static List<ItemDef> ItemDefList { get; } } } namespace DropItemAddition { [BepInPlugin("thebugreport.dropItemAddition", "DropItemAddition", "1.0.0")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Log; private Harmony _harmony; private void Awake() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; _harmony = new Harmony("thebugreport.dropItemAddition"); try { MethodInfo methodInfo = AccessTools.Method("Dropitem.Give:Give_Item", new Type[2] { typeof(NetworkUser), typeof(string[]) }, (Type[])null); if (methodInfo == null) { Log.LogError((object)"Failed to find Dropitem.Give.Give_Item(NetworkUser, string[]). Is Dropitem loaded?"); return; } _harmony.Patch((MethodBase)methodInfo, new HarmonyMethod(typeof(GiveItemPatch), "Prefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Log.LogInfo((object)"Patched Dropitem.Give.Give_Item successfully."); } catch (Exception arg) { Log.LogError((object)$"Error patching Dropitem.Give.Give_Item: {arg}"); } } private void OnDestroy() { try { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } catch (Exception arg) { ManualLogSource log = Log; if (log != null) { log.LogError((object)$"Error unpatching: {arg}"); } } } } public static class GiveItemPatch { public static bool Prefix(NetworkUser sender, string[] args, ref string __result) { ManualLogSource log = Plugin.Log; if (log != null) { log.LogInfo((object)string.Format("[GivePatch] Intercepted Give_Item from '{0}' with {1} arg(s).", sender?.userName ?? "null", (args != null) ? args.Length : 0)); } __result = DropReplacement.GiveItem(sender, args); return false; } } internal static class DropReplacement { public static string GiveItem(NetworkUser sender, string[] args) { //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Invalid comparison between Unknown and I4 //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Invalid comparison between Unknown and I4 //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_0299: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Invalid comparison between Unknown and I4 //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Invalid comparison between Unknown and I4 //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Invalid comparison between Unknown and I4 //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_0225: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0335: Unknown result type (might be due to invalid IL or missing references) //IL_0349: Unknown result type (might be due to invalid IL or missing references) //IL_034e: Unknown result type (might be due to invalid IL or missing references) //IL_036c: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_0372: Unknown result type (might be due to invalid IL or missing references) //IL_0379: Unknown result type (might be due to invalid IL or missing references) //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0385: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Unknown result type (might be due to invalid IL or missing references) //IL_038e: Expected I4, but got Unknown //IL_0390: Expected O, but got Unknown //IL_024a: Unknown result type (might be due to invalid IL or missing references) if (!DI.Users_CheckUserPerms(sender, out var text)) { return text; } Inventory inventory = sender.master.inventory; PlayerCharacterMasterController val = DI.StringParsers_GetNetUserFromString(args[1]); if (!Object.op_Implicit((Object)(object)val)) { return "<color=#FF8282>Could not find specified </color>player<color=#FF8282> '<color=#ff4646>" + args[1] + "</color>'</color>"; } Inventory inventory2 = val.master.inventory; if (!Object.op_Implicit((Object)(object)inventory) || !Object.op_Implicit((Object)(object)inventory2)) { return "<color=#ff4646>ERROR: null inventory</color>"; } if ((Object)(object)inventory == (Object)(object)inventory2) { return "<color=#FF8282>Target can not be the sender</color>"; } string name; if (Object.op_Implicit((Object)(object)val.networkUser)) { name = val.networkUser.userName; } else { if (!DI.Config_DropFromDisconnected()) { return "<color=#FF8282>Giving to disconnected players is disabled</color>"; } DI.Users_TryGetCachedName(val, out name); } name = "<color=#AAE6F0>" + name + "</color>"; string text2 = "<color=#AAE6F0>" + sender.masterController.GetDisplayName() + "</color>"; if (Object.op_Implicit((Object)(object)val.networkUser) && DI.Users_IsLocked(val.networkUser)) { return "<color=#FF8282>" + name + " has their inventory locked, failed to give item</color>"; } EquipmentIndex val2 = (EquipmentIndex)(-1); ItemIndex val3 = (ItemIndex)(-1); if (args[0].ToLower() == "e" || args[0].ToLower() == "equip" || args[0].ToLower() == "equipment") { val2 = inventory.GetEquipmentIndex(); if ((int)val2 == -1) { return "<color=#FF8282>Sender does not have an </color><color=#ff7d00>equipment</color>"; } } else { val3 = DI.StringParsers_FindItemInInventroy(args[0], inventory); } if ((int)val3 == -1) { if ((int)val2 == -1) { val2 = inventory.GetEquipmentIndex(); if ((int)val2 == -1 || !DI.StringParsers_ReformatString(Language.GetString(EquipmentCatalog.GetEquipmentDef(val2).nameToken)).Contains(DI.StringParsers_ReformatString(args[0]))) { return "<color=#FF8282>Could not find item '<color=#ff4646>" + args[0] + "</color>' in " + text2 + "<color=#AAE6F0>'s</color> inventory</color>"; } } if ((int)inventory2.GetEquipmentIndex() != -1) { return "<color=#FF8282>Target already has an equipment</color>"; } PickupIndex val4 = PickupCatalog.FindPickupIndex(val2); string text3 = Util.GenerateColoredString(Language.GetString(EquipmentCatalog.GetEquipmentDef(val2).nameToken), Color32.op_Implicit(PickupCatalog.GetPickupDef(val4).baseColor)); if (val2 != inventory.GetEquipmentIndex()) { return "<color=#FF8282>Sender does not have </color><color=#ff4646>" + text3 + "</color>"; } if (DI.Drop_IsBlacklisted(EquipmentCatalog.GetEquipmentDef(val2), !DI.Config_ApplyAllowToGive())) { return text3 + "<color=#FF8282> is not dropable</color>"; } inventory2.SetEquipmentIndex(val2); inventory.SetEquipmentIndex((EquipmentIndex)(-1)); return "<color=#96EBAA>" + text2 + " gave " + text3 + " to </color>" + name; } ItemDef itemDef = ItemCatalog.GetItemDef(val3); PickupIndex val5 = PickupCatalog.FindPickupIndex(val3); string text4 = Util.GenerateColoredString(Language.GetString(itemDef.nameToken), Color32.op_Implicit(PickupCatalog.GetPickupDef(val5).baseColor)); if (DI.Drop_IsBlacklisted(itemDef, !DI.Config_ApplyAllowToGive(), isItem: true)) { return text4 + "<color=#FF8282> is not dropable</color>"; } int num = inventory.GetItemCount(val3); if (num == 0) { return "<color=#FF8282>Sender does not have </color>" + text4; } if (num > 1) { text4 += Util.GenerateColoredString("s", Color32.op_Implicit(PickupCatalog.GetPickupDef(val5).baseColor)); } if (num > 30) { num = 30; } inventory2.GiveItem(val3, num); inventory.RemoveItem(val3, num); Vector3 corePosition = sender.master.GetBody().corePosition; GameObject gameObject = ((Component)val.master.GetBody()).gameObject; GameObject obj = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/OrbEffects/ItemTransferOrbEffect"); EffectData val6 = new EffectData { origin = corePosition, genericFloat = 1f, genericUInt = (uint)(val3 + 1) }; val6.SetNetworkedObjectReference(gameObject); EffectManager.SpawnEffect(obj, val6, true); return string.Format("{0}{1} gave {2} {3} to </color>{4}", "<color=#96EBAA>", text2, num, text4, name); } } internal static class DI { private static Type _tUsers; private static Type _tConfig; private static Type _tStringParsers; private static Type _tDrop; private static MethodInfo _miCheckUserPerms; private static FieldInfo _fiCachedPlayerNames; private static FieldInfo _fiLockedUserIds; private static FieldInfo _fiApplyAllowToGive; private static FieldInfo _fiDropFromDisconnected; private static PropertyInfo _piConfigValue; private static MethodInfo _miGetNetUserFromString; private static MethodInfo _miFindItemInInventroy; private static MethodInfo _miReformatString; private static MethodInfo _miIsBlacklistedItem; private static MethodInfo _miIsBlacklistedEquip; private static Type TUsers => _tUsers ?? (_tUsers = AccessTools.TypeByName("Dropitem.Users")); private static Type TConfig => _tConfig ?? (_tConfig = AccessTools.TypeByName("Dropitem.Config")); private static Type TStringParsers => _tStringParsers ?? (_tStringParsers = AccessTools.TypeByName("Dropitem.StringParsers")); private static Type TDrop => _tDrop ?? (_tDrop = AccessTools.TypeByName("Dropitem.Drop")); public static bool Users_CheckUserPerms(NetworkUser sender, out string text) { text = null; if ((object)_miCheckUserPerms == null) { _miCheckUserPerms = AccessTools.Method(TUsers, "CheckUserPerms", new Type[2] { typeof(NetworkUser), typeof(string).MakeByRefType() }, (Type[])null); } if (_miCheckUserPerms == null) { return true; } object[] array = new object[2] { sender, null }; bool result = (bool)_miCheckUserPerms.Invoke(null, array); text = (string)array[1]; return result; } public static bool Users_TryGetCachedName(PlayerCharacterMasterController pcmc, out string name) { name = null; if ((object)_fiCachedPlayerNames == null) { _fiCachedPlayerNames = AccessTools.Field(TUsers, "cachedPlayerNames"); } object obj = _fiCachedPlayerNames?.GetValue(null); if (obj == null || (Object)(object)pcmc == (Object)null) { return false; } MethodInfo method = obj.GetType().GetMethod("TryGetValue"); object[] array = new object[2] { pcmc, null }; bool flag = (bool)method.Invoke(obj, array); name = (flag ? ((string)array[1]) : null); return flag; } public static bool Users_IsLocked(NetworkUser target) { //IL_0058: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)target == (Object)null) { return false; } if ((object)_fiLockedUserIds == null) { _fiLockedUserIds = AccessTools.Field(TUsers, "lockedUserIds"); } object obj = _fiLockedUserIds?.GetValue(null); if (obj == null) { return false; } return (bool)obj.GetType().GetMethod("Contains").Invoke(obj, new object[1] { target.id }); } private static bool GetConfigBool(ref FieldInfo field, string fieldName) { if ((object)field == null) { field = AccessTools.Field(TConfig, fieldName); } object obj = field?.GetValue(null); if (obj == null) { return false; } if ((object)_piConfigValue == null) { _piConfigValue = obj.GetType().GetProperty("Value"); } return (bool)(_piConfigValue?.GetValue(obj) ?? ((object)false)); } public static bool Config_ApplyAllowToGive() { return GetConfigBool(ref _fiApplyAllowToGive, "applyAllowToGive"); } public static bool Config_DropFromDisconnected() { return GetConfigBool(ref _fiDropFromDisconnected, "dropFromDisconnected"); } public static PlayerCharacterMasterController StringParsers_GetNetUserFromString(string s) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown if ((object)_miGetNetUserFromString == null) { _miGetNetUserFromString = AccessTools.Method(TStringParsers, "GetNetUserFromString", new Type[1] { typeof(string) }, (Type[])null); } return (PlayerCharacterMasterController)(_miGetNetUserFromString?.Invoke(null, new object[1] { s })); } public static ItemIndex StringParsers_FindItemInInventroy(string s, Inventory inv) { //IL_0064: Unknown result type (might be due to invalid IL or missing references) if ((object)_miFindItemInInventroy == null) { _miFindItemInInventroy = AccessTools.Method(TStringParsers, "FindItemInInventroy", new Type[2] { typeof(string), typeof(Inventory) }, (Type[])null); } if (!(_miFindItemInInventroy != null)) { return (ItemIndex)(-1); } return (ItemIndex)_miFindItemInInventroy.Invoke(null, new object[2] { s, inv }); } public static string StringParsers_ReformatString(string s) { if ((object)_miReformatString == null) { _miReformatString = AccessTools.Method(TStringParsers, "ReformatString", new Type[1] { typeof(string) }, (Type[])null); } return (string)_miReformatString?.Invoke(null, new object[1] { s }); } public static bool Drop_IsBlacklisted(ItemDef itemDef, bool invertAllow, bool isItem, bool defaultArg = false) { if ((object)_miIsBlacklistedItem == null) { _miIsBlacklistedItem = AccessTools.Method(TDrop, "IsBlacklisted", new Type[4] { typeof(ItemDef), typeof(bool), typeof(bool), typeof(bool) }, (Type[])null); } if (_miIsBlacklistedItem == null) { return false; } return (bool)_miIsBlacklistedItem.Invoke(null, new object[4] { itemDef, invertAllow, true, defaultArg }); } public static bool Drop_IsBlacklisted(EquipmentDef equipDef, bool invertAllow, bool defaultArg = false) { if ((object)_miIsBlacklistedEquip == null) { _miIsBlacklistedEquip = AccessTools.Method(TDrop, "IsBlacklisted", new Type[3] { typeof(EquipmentDef), typeof(bool), typeof(bool) }, (Type[])null); } if (_miIsBlacklistedEquip == null) { return false; } return (bool)_miIsBlacklistedEquip.Invoke(null, new object[3] { equipDef, invertAllow, false }); } } }