using System;
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 IL.RoR2;
using IL.RoR2.UI;
using KookehsDropItemMod_Fork;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.Options;
using RoR2;
using RoR2.UI;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Networking;
[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.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("KookehsDropItemMod_Fork")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+265115e5ce6a4e7343218e83e6fcc688434bf13d")]
[assembly: AssemblyProduct("KookehsDropItemMod_Fork")]
[assembly: AssemblyTitle("KookehsDropItemMod_Fork")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
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;
}
}
}
namespace KookehsDropItemMod_Fork
{
public class MarkNonRecyclableComponent : MonoBehaviour
{
public void Start()
{
GenericPickupController component = ((Component)this).GetComponent<GenericPickupController>();
if (Object.op_Implicit((Object)(object)component))
{
component.Recycled = true;
Object.Destroy((Object)(object)this);
}
}
}
}
namespace DropItems_Fork
{
public class DropItemHandler : MonoBehaviour, IPointerClickHandler, IEventSystemHandler
{
private Func<CharacterMaster> getMaster;
private Func<PickupIndex> getPickupIndex;
public void SetData(Func<CharacterMaster> getMaster, Func<PickupIndex> getPickupIndex)
{
this.getMaster = getMaster;
this.getPickupIndex = getPickupIndex;
}
public void OnPointerClick(PointerEventData eventData)
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
KookehsDropItemMod.Logger.LogDebug((object)"KDI: Pointer click, trying to send network message");
CharacterMaster val = getMaster();
if (((NetworkBehaviour)val.inventory).hasAuthority)
{
PickupIndex pickupIndex = getPickupIndex();
NetworkIdentity component = ((Component)val.GetBody()).gameObject.GetComponent<NetworkIdentity>();
if (VerifyIsDroppable(pickupIndex))
{
KookehsDropItemMod.Logger.LogDebug((object)"KDI: Sending network message");
DropItemMessage dropItemMessage = new DropItemMessage(component.netId, pickupIndex);
NetMessageExtensions.Send((INetMessage)(object)dropItemMessage, (NetworkDestination)2);
}
}
}
public static void DropItem(Vector3 position, Vector3 direction, Inventory inventory, PickupIndex pickupIndex)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Invalid comparison between Unknown and I4
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: 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_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Unknown result type (might be due to invalid IL or missing references)
//IL_0116: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0127: Unknown result type (might be due to invalid IL or missing references)
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_0130: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
if (!VerifyIsDroppable(pickupIndex))
{
return;
}
ManualLogSource logger = KookehsDropItemMod.Logger;
Vector3 val = position;
logger.LogDebug((object)("Position: " + ((object)(Vector3)(ref val)).ToString()));
ManualLogSource logger2 = KookehsDropItemMod.Logger;
val = direction;
logger2.LogDebug((object)("Direction: " + ((object)(Vector3)(ref val)).ToString()));
KookehsDropItemMod.Logger.LogDebug((object)("Inventory: " + ((Object)inventory).name));
ManualLogSource logger3 = KookehsDropItemMod.Logger;
PickupIndex val2 = pickupIndex;
logger3.LogDebug((object)("Pickup Index: " + ((object)(PickupIndex)(ref val2)).ToString()));
if ((int)PickupCatalog.GetPickupDef(pickupIndex).equipmentIndex != -1)
{
if (inventory.GetEquipmentIndex() != PickupCatalog.GetPickupDef(pickupIndex).equipmentIndex)
{
return;
}
inventory.SetEquipmentIndex((EquipmentIndex)(-1));
}
else
{
if (inventory.GetItemCount(PickupCatalog.GetPickupDef(pickupIndex).itemIndex) <= 0)
{
return;
}
inventory.RemoveItem(PickupCatalog.GetPickupDef(pickupIndex).itemIndex, 1);
}
CreatePickupInfo val3 = default(CreatePickupInfo);
((CreatePickupInfo)(ref val3)).pickupIndex = pickupIndex;
val3.position = position;
CreatePickupInfo pickupInfo = val3;
CreatePickupDroplet(pickupInfo, Vector3.up * 20f + direction * 10f);
}
private static void CreatePickupDroplet(CreatePickupInfo pickupInfo, Vector3 velocity)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(PickupDropletController.pickupDropletPrefab, pickupInfo.position, Quaternion.identity);
PickupDropletController component = val.GetComponent<PickupDropletController>();
if (Object.op_Implicit((Object)(object)component))
{
component.createPickupInfo = pickupInfo;
component.NetworkpickupIndex = ((CreatePickupInfo)(ref pickupInfo)).pickupIndex;
}
Rigidbody component2 = val.GetComponent<Rigidbody>();
component2.velocity = velocity;
component2.AddTorque(Random.Range(150f, 120f) * Random.onUnitSphere);
if (KookehsDropItemMod.preventRecycle.Value)
{
val.AddComponent<MarkNonRecyclableComponent>();
}
NetworkServer.Spawn(val);
}
private static bool VerifyIsDroppable(PickupIndex pickupIndex)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Invalid comparison between Unknown and I4
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Invalid comparison between Unknown and I4
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Invalid comparison between Unknown and I4
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Invalid comparison between Unknown and I4
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Invalid comparison between Unknown and I4
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Invalid comparison between Unknown and I4
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: Invalid comparison between Unknown and I4
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_0137: Invalid comparison between Unknown and I4
//IL_013a: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: Invalid comparison between Unknown and I4
PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
if (pickupDef == null)
{
return false;
}
if ((int)pickupDef.equipmentIndex != -1)
{
return true;
}
bool result = false;
ItemTierDef itemTierDef = ItemTierCatalog.GetItemTierDef(pickupDef.itemTier);
if ((Object)(object)itemTierDef != (Object)null)
{
if (KookehsDropItemMod.preventPrayerBeadsAbuse.Value && (int)pickupDef.itemIndex != -1 && (Object)(object)ItemCatalog.GetItemDef(pickupDef.itemIndex) == (Object)(object)Items.ExtraStatsOnLevelUp)
{
return false;
}
if (!KookehsDropItemMod.allowInBazaar.Value)
{
SceneDef sceneDefForCurrentScene = SceneCatalog.GetSceneDefForCurrentScene();
if (Object.op_Implicit((Object)(object)sceneDefForCurrentScene) && sceneDefForCurrentScene.baseSceneName == "bazaar")
{
return false;
}
}
result = itemTierDef.isDroppable && (int)itemTierDef.tier != 5;
if ((int)itemTierDef.tier == 3)
{
result = KookehsDropItemMod.allowDropLunar.Value || (int)pickupDef.equipmentIndex != -1;
}
else if ((int)itemTierDef.tier == 9 || (int)itemTierDef.tier == 6 || (int)itemTierDef.tier == 7 || (int)itemTierDef.tier == 8)
{
result = KookehsDropItemMod.allowDropVoid.Value;
}
}
return result;
}
public static void CreateNotification(CharacterBody character, PickupIndex pickupIndex)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Invalid comparison between Unknown and I4
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
if ((int)PickupCatalog.GetPickupDef(pickupIndex).equipmentIndex != -1)
{
CreateNotification(character, character.transform, PickupCatalog.GetPickupDef(pickupIndex).equipmentIndex);
}
else
{
CreateNotification(character, character.transform, PickupCatalog.GetPickupDef(pickupIndex).itemIndex);
}
}
private static void CreateNotification(CharacterBody character, Transform transform, EquipmentIndex equipmentIndex)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(equipmentIndex);
string @string = Language.GetString(equipmentDef.nameToken);
Texture pickupIconTexture = equipmentDef.pickupIconTexture;
CreateNotification(character, transform, "Equipment dropped", @string, pickupIconTexture);
}
private static void CreateNotification(CharacterBody character, Transform transform, ItemIndex itemIndex)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex);
string @string = Language.GetString(itemDef.nameToken);
Texture pickupIconTexture = itemDef.pickupIconTexture;
CreateNotification(character, transform, "Item dropped", @string, pickupIconTexture);
}
private static void CreateNotification(CharacterBody character, Transform transform, string title, string description, Texture texture)
{
DropItemNotification dropItemNotification = ((Component)character).gameObject.GetComponent<DropItemNotification>();
if ((Object)(object)dropItemNotification == (Object)null)
{
dropItemNotification = ((Component)character).gameObject.AddComponent<DropItemNotification>();
((Component)dropItemNotification).transform.SetParent(transform);
}
dropItemNotification.SetNotification(title, description, texture);
}
}
public class DropItemMessage : INetMessage, ISerializableObject
{
private NetworkInstanceId netId;
private PickupIndex pickupIndex;
public DropItemMessage()
{
}
public DropItemMessage(NetworkInstanceId netId, PickupIndex pickupIndex)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: 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)
this.netId = netId;
this.pickupIndex = pickupIndex;
}
public void Serialize(NetworkWriter writer)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
writer.Write(netId);
PickupIndex.WriteToNetworkWriter(writer, pickupIndex);
}
public void Deserialize(NetworkReader reader)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
netId = reader.ReadNetworkId();
pickupIndex = NetworkExtensions.ReadPickupIndex(reader);
}
public override string ToString()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return $"DropItemMessage: {pickupIndex}";
}
private void Log(string message)
{
KookehsDropItemMod.Logger.LogDebug((object)message);
}
public void OnReceived()
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: 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_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_011b: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
//IL_0163: Unknown result type (might be due to invalid IL or missing references)
if (!NetworkServer.active)
{
return;
}
Log("Received kookeh drop message");
Log("NetworkID" + ((object)(NetworkInstanceId)(ref netId)).ToString());
Log("PickupIndex" + ((object)(PickupIndex)(ref pickupIndex)).ToString());
GameObject val = Util.FindNetworkObject(netId);
if (!Object.op_Implicit((Object)(object)val))
{
return;
}
CharacterBody component = val.GetComponent<CharacterBody>();
Log("Body is null: " + ((Object)(object)component == (Object)null));
if (Object.op_Implicit((Object)(object)component))
{
Inventory inventory = component.master.inventory;
Transform transform = component.transform;
Vector3 corePosition = component.corePosition;
Vector3 direction = (Object.op_Implicit((Object)(object)component.characterDirection) ? component.characterDirection.forward : component.transform.forward);
if (Object.op_Implicit((Object)(object)component.inputBank))
{
Ray aimRay = component.inputBank.GetAimRay();
direction = ((Ray)(ref aimRay)).direction;
direction.y = 0f;
((Vector3)(ref direction)).Normalize();
}
DropItemHandler.DropItem(corePosition, direction, inventory, pickupIndex);
if (KookehsDropItemMod.enableNotifications.Value)
{
DropItemHandler.CreateNotification(component, pickupIndex);
}
}
}
}
public class DropItemNotification : MonoBehaviour
{
private Notification notification;
private float startTime = 0f;
private float duration = 3f;
private void Update()
{
if ((Object)(object)notification != (Object)null && Run.instance.fixedTime - startTime > duration)
{
Object.Destroy((Object)(object)notification);
Object.Destroy((Object)(object)this);
}
float notificationT = (Run.instance.fixedTime - startTime) / duration;
notification.GenericNotification.SetNotificationT(notificationT);
}
private void OnDestroy()
{
if ((Object)(object)notification != (Object)null)
{
Object.Destroy((Object)(object)notification);
}
}
public void SetNotification(string title, string description, Texture texture)
{
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)notification == (Object)null)
{
notification = ((Component)this).gameObject.AddComponent<Notification>();
((Component)notification).transform.SetParent(((Component)this).transform);
notification.SetPosition(new Vector3((float)((double)Screen.width * 0.8), (float)((double)Screen.height * 0.25), 0f));
}
startTime = Run.instance.fixedTime;
notification.SetIcon(texture);
notification.GetTitle = () => title;
notification.GetDescription = () => description;
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("KookehsDropItemMod_Fork", "Kookeh's Drop Item Mod (Fork)", "2.4.3")]
[R2APISubmoduleDependency(new string[] { "NetworkingAPI", "CommandHelper" })]
public class KookehsDropItemMod : BaseUnityPlugin
{
private const string ModGuid = "KookehsDropItemMod_Fork";
private const string ModName = "Kookeh's Drop Item Mod (Fork)";
private const string ModVersion = "2.4.3";
public static ConfigEntry<bool> allowDropLunar;
public static ConfigEntry<bool> allowDropVoid;
public static ConfigEntry<bool> enableNotifications;
public static ConfigEntry<bool> allowInBazaar;
public static ConfigEntry<bool> preventRecycle;
public static ConfigEntry<bool> preventPrayerBeadsAbuse;
public static GameObject RootObject { get; set; }
public static DropItemHandler DropItemHandler { get; set; }
internal static ManualLogSource Logger { get; set; }
public static event Action<ItemIcon> OnItemIconAdded;
public static event Action<EquipmentIcon> OnEquipmentIconAdded;
public void Awake()
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Expected O, but got Unknown
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Expected O, but got Unknown
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Expected O, but got Unknown
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Expected O, but got Unknown
ReadConfig();
Logger = ((BaseUnityPlugin)this).Logger;
NetworkingAPI.RegisterMessageType<DropItemMessage>();
ItemInventoryDisplay.AllocateIcons += new Manipulator(OnItemIconAddedHook);
ScoreboardStrip.SetMaster += new Manipulator(OnEquipmentIconAddedHook);
RootObject = new GameObject("DropItemsMod");
Object.DontDestroyOnLoad((Object)(object)RootObject);
DropItemHandler = RootObject.AddComponent<DropItemHandler>();
CommandHelper.AddToConsoleWhenReady();
OnItemIconAdded += delegate(ItemIcon itemIcon)
{
if (!((Object)(object)((Component)itemIcon).GetComponent<DropItemHandler>() != (Object)null))
{
Func<CharacterMaster> getMaster = () => ((Component)Reflection.GetFieldValue<Inventory>((object)((Component)((Transform)itemIcon.rectTransform).parent).GetComponent<ItemInventoryDisplay>(), "inventory")).GetComponent<CharacterMaster>();
DropItemHandler dropItemHandler2 = ((Component)((Component)itemIcon).transform).gameObject.AddComponent<DropItemHandler>();
dropItemHandler2.SetData(getMaster, () => PickupCatalog.FindPickupIndex(Reflection.GetFieldValue<ItemIndex>((object)itemIcon, "itemIndex")));
}
};
OnEquipmentIconAdded += delegate(EquipmentIcon equipmentIcon)
{
if (!((Object)(object)((Component)equipmentIcon).GetComponent<DropItemHandler>() != (Object)null))
{
DropItemHandler dropItemHandler = ((Component)((Component)equipmentIcon).transform).gameObject.AddComponent<DropItemHandler>();
dropItemHandler.SetData(() => ((Component)equipmentIcon.targetInventory).GetComponent<CharacterMaster>(), () => PickupCatalog.FindPickupIndex(equipmentIcon.targetInventory.GetEquipmentIndex()));
}
};
PickupDropletController.CreatePickup += new Manipulator(PickupDropletController_CreatePickup);
}
private void PickupDropletController_CreatePickup(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
val.GotoNext((MoveType)2, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCall(x, typeof(GenericPickupController), "CreatePickup")
});
val.Emit(OpCodes.Ldarg_0);
val.EmitDelegate<Func<GenericPickupController, PickupDropletController, GenericPickupController>>((Func<GenericPickupController, PickupDropletController, GenericPickupController>)delegate(GenericPickupController pickup, PickupDropletController self)
{
MarkNonRecyclableComponent component = ((Component)self).GetComponent<MarkNonRecyclableComponent>();
if (Object.op_Implicit((Object)(object)component))
{
((Component)pickup).gameObject.AddComponent<MarkNonRecyclableComponent>();
}
return pickup;
});
}
private void ReadConfig()
{
//IL_0011: 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_002c: Expected O, but got Unknown
//IL_002c: Expected O, but got Unknown
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Expected O, but got Unknown
//IL_005c: Expected O, but got Unknown
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Expected O, but got Unknown
//IL_008c: Expected O, but got Unknown
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Expected O, but got Unknown
//IL_00bc: Expected O, but got Unknown
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Expected O, but got Unknown
//IL_00ec: Expected O, but got Unknown
//IL_0101: 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)
//IL_011c: Expected O, but got Unknown
//IL_011c: Expected O, but got Unknown
enableNotifications = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("General", "Enable Notifications"), false, new ConfigDescription("Display a notification when an item is dropped. Not sure if this is even networked properly.", (AcceptableValueBase)null, Array.Empty<object>()));
allowInBazaar = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("General", "Allow in Bazaar (Server-Side)"), true, new ConfigDescription("Allow items to be dropped while in the Bazaar.", (AcceptableValueBase)null, Array.Empty<object>()));
preventRecycle = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("General", "Prevent Recycle (Server-Side)"), true, new ConfigDescription("Dropped items cannot be recycled.", (AcceptableValueBase)null, Array.Empty<object>()));
preventPrayerBeadsAbuse = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("General", "Prevent Prayer Beads Abuse (Server-Side)"), true, new ConfigDescription("Prayer Beads are undroppable to prevent players from repeatedly gaining stats.", (AcceptableValueBase)null, Array.Empty<object>()));
allowDropLunar = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Tiers (Server-Side)", "Allow Lunar"), false, new ConfigDescription("Allow items of this tier to be dropped.", (AcceptableValueBase)null, Array.Empty<object>()));
allowDropVoid = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Tiers (Server-Side)", "Allow Void"), false, new ConfigDescription("Allow items of this tier to be dropped.", (AcceptableValueBase)null, Array.Empty<object>()));
if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"))
{
RiskOfOptionsCompat();
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
private void RiskOfOptionsCompat()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Expected O, but got Unknown
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(enableNotifications));
}
private static void OnItemIconAddedHook(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il).Goto(0, (MoveType)0, false);
int num = default(int);
val.GotoNext(new Func<Instruction, bool>[3]
{
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num),
(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
(Instruction x) => ILPatternMatchingExt.MatchLdfld<ItemInventoryDisplay>(x, "itemIcons")
});
val.Emit(OpCodes.Dup);
val.EmitDelegate<Action<ItemIcon>>((Action<ItemIcon>)delegate(ItemIcon i)
{
KookehsDropItemMod.OnItemIconAdded?.Invoke(i);
});
}
private static void OnEquipmentIconAddedHook(ILContext il)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il).Goto(0, (MoveType)0, false);
MethodInfo setSubscribedInventory = Reflection.GetMethodCached(typeof(ItemInventoryDisplay), "SetSubscribedInventory");
val.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, (MethodBase)setSubscribedInventory)
});
val.Index += 1;
val.Emit(OpCodes.Ldarg_0);
val.EmitDelegate<Action<ScoreboardStrip>>((Action<ScoreboardStrip>)delegate(ScoreboardStrip eq)
{
if ((Object)(object)eq != (Object)null && (Object)(object)eq.equipmentIcon != (Object)null)
{
KookehsDropItemMod.OnEquipmentIconAdded?.Invoke(eq.equipmentIcon);
}
});
}
}
}