using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using DroppableThings.Properties;
using HarmonyLib;
using R2API.Networking;
using R2API.Networking.Interfaces;
using RiskOfOptions;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Artifacts;
using RoR2.UI;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Networking;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("DroppableThings")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DroppableThings")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("dde6bced-877a-4e2a-b8ba-a7f4a52d3261")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace DroppableThings
{
public static class ModdedScraps
{
public static void Register(ItemTier targetTier, ItemIndex scrapItemIndex)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: 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_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
PickupIndex val = PickupCatalog.FindScrapIndexForItemTier(targetTier);
if (val != PickupIndex.none || Plugin.instance.moddedScraps.ContainsKey(targetTier))
{
Plugin.instance.logger.LogMessage((object)("This tier \"" + ((object)(ItemTier)(ref targetTier)).ToString() + "\" already has a scrap."));
}
else
{
Plugin.instance.moddedScraps.Add(targetTier, scrapItemIndex);
}
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("bulletbot.droppablethings", "DroppableThings", "1.0.7")]
public class Plugin : BaseUnityPlugin
{
private static class RiskOfOptions
{
public static bool IsLoaded()
{
return Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions");
}
public static void OnAwake()
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Expected O, but got Unknown
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Expected O, but got Unknown
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Expected O, but got Unknown
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Expected O, but got Unknown
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Expected O, but got Unknown
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Expected O, but got Unknown
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Expected O, but got Unknown
Bitmap icon = Resources.icon;
using (MemoryStream memoryStream = new MemoryStream())
{
((Image)icon).Save((Stream)memoryStream, ImageFormat.Png);
Texture2D val = new Texture2D(((Image)icon).Width, ((Image)icon).Height, (TextureFormat)5, false, false);
ImageConversion.LoadImage(val, memoryStream.ToArray());
((Texture)val).filterMode = (FilterMode)0;
ModSettingsManager.SetModIcon(Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f)));
}
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(instance.dropItems));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(instance.dropEquipments));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(instance.useCommandEssence));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(instance.dropCoins));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(instance.scrapItems));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(instance.scrapDropOnGround));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(instance.rightClick));
}
}
internal class ClickHandler : MonoBehaviour, IPointerClickHandler, IEventSystemHandler
{
public PickupIndex pickupIndex;
private void Awake()
{
if (!Object.op_Implicit((Object)(object)((Component)this).gameObject.GetComponent<GraphicRaycaster>()))
{
((Component)this).gameObject.AddComponent<GraphicRaycaster>();
}
}
public void OnPointerClick(PointerEventData eventData)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Invalid comparison between Unknown and I4
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: 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_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: 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_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: Invalid comparison between Unknown and I4
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_018e: Unknown result type (might be due to invalid IL or missing references)
//IL_0190: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: Unknown result type (might be due to invalid IL or missing references)
//IL_0199: Unknown result type (might be due to invalid IL or missing references)
//IL_019e: Unknown result type (might be due to invalid IL or missing references)
//IL_0172: Unknown result type (might be due to invalid IL or missing references)
//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
//IL_01e7: Invalid comparison between Unknown and I4
//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
//IL_01fc: Invalid comparison between Unknown and I4
//IL_0225: Unknown result type (might be due to invalid IL or missing references)
CharacterBody cachedBody = LocalUserManager.GetFirstLocalUser().cachedBody;
if (((PickupCatalog.FindPickupIndex(MiscPickups.LunarCoin.miscPickupIndex) == pickupIndex || PickupCatalog.FindPickupIndex(MiscPickups.VoidCoin.miscPickupIndex) == pickupIndex) && !instance.dropCoins.Value) || ((((int)eventData.button != 1 && instance.rightClick.Value) || ((int)eventData.button != 0 && !instance.rightClick.Value)) && pickupIndex != PickupIndex.none && (Object)(object)cachedBody != (Object)null && (Object)(object)cachedBody.currentVehicle == (Object)null))
{
return;
}
ItemIndex val = (ItemIndex)(-1);
GenericStaticEnumerable<ItemIndex, AllItemsEnumerator> allItems = ItemCatalog.allItems;
AllItemsEnumerator enumerator = allItems.GetEnumerator();
try
{
while (((AllItemsEnumerator)(ref enumerator)).MoveNext())
{
ItemIndex current = ((AllItemsEnumerator)(ref enumerator)).Current;
if (PickupCatalog.FindPickupIndex(current) == pickupIndex && (Object)(object)ItemTierCatalog.GetItemTierDef(ItemCatalog.GetItemDef(current).tier) != (Object)null)
{
val = current;
break;
}
}
}
finally
{
((IDisposable)(AllItemsEnumerator)(ref enumerator)).Dispose();
}
if (Input.GetKey((KeyCode)308) && (int)val != -1)
{
if (instance.scrapItems.Value)
{
instance.TryScrap(cachedBody, val, instance.scrapDropOnGround.Value);
}
return;
}
EquipmentIndex val2 = (EquipmentIndex)(-1);
GenericStaticEnumerable<EquipmentIndex, AllEquipmentEnumerator> allEquipment = EquipmentCatalog.allEquipment;
AllEquipmentEnumerator enumerator2 = allEquipment.GetEnumerator();
try
{
while (((AllEquipmentEnumerator)(ref enumerator2)).MoveNext())
{
EquipmentIndex current2 = ((AllEquipmentEnumerator)(ref enumerator2)).Current;
if (PickupCatalog.FindPickupIndex(current2) == pickupIndex)
{
val2 = current2;
break;
}
}
}
finally
{
((IDisposable)(AllEquipmentEnumerator)(ref enumerator2)).Dispose();
}
if (((int)val == -1 || instance.dropItems.Value) && ((int)val2 == -1 || instance.dropEquipments.Value))
{
instance.TryDrop(cachedBody, pickupIndex, instance.useCommandEssence.Value);
}
}
}
internal class DropRequest : INetMessage, ISerializableObject
{
public CharacterBody body;
public PickupIndex pickupIndex;
public bool useCommandEssence;
public void Serialize(NetworkWriter writer)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
writer.Write(((Component)body).gameObject);
NetworkExtensions.Write(writer, pickupIndex);
writer.Write(useCommandEssence);
}
public void Deserialize(NetworkReader reader)
{
//IL_0014: 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)
body = reader.ReadGameObject().GetComponent<CharacterBody>();
pickupIndex = NetworkExtensions.ReadPickupIndex(reader);
useCommandEssence = reader.ReadBoolean();
}
public void OnReceived()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
if (NetworkServer.active)
{
instance.TryDrop(body, pickupIndex, useCommandEssence);
}
}
}
internal class ScrapRequest : INetMessage, ISerializableObject
{
public CharacterBody body;
public ItemIndex itemIndex;
public bool dropOnGround;
public void Serialize(NetworkWriter writer)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
writer.Write(((Component)body).gameObject);
NetworkExtensions.Write(writer, itemIndex);
writer.Write(dropOnGround);
}
public void Deserialize(NetworkReader reader)
{
//IL_0014: 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)
body = reader.ReadGameObject().GetComponent<CharacterBody>();
itemIndex = NetworkExtensions.ReadItemIndex(reader);
dropOnGround = reader.ReadBoolean();
}
public void OnReceived()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
if (NetworkServer.active)
{
instance.TryScrap(body, itemIndex, dropOnGround);
}
}
}
private const string modGUID = "bulletbot.droppablethings";
private const string modName = "DroppableThings";
private const string modVer = "1.0.7";
private const string riskOfOptionsModGUID = "com.rune580.riskofoptions";
internal static Plugin instance;
internal ManualLogSource logger;
private readonly Harmony harmony = new Harmony("bulletbot.droppablethings");
private ConfigEntry<bool> dropItems;
private ConfigEntry<bool> dropEquipments;
private ConfigEntry<bool> useCommandEssence;
private ConfigEntry<bool> dropCoins;
private ConfigEntry<bool> scrapItems;
private ConfigEntry<bool> scrapDropOnGround;
private ConfigEntry<bool> rightClick;
private Dictionary<EquipmentIcon, EquipmentIndex> equipmentIcons = new Dictionary<EquipmentIcon, EquipmentIndex>();
internal Dictionary<ItemTier, ItemIndex> moddedScraps = new Dictionary<ItemTier, ItemIndex>();
private void Awake()
{
instance = this;
logger = Logger.CreateLogSource("DroppableThings");
string text = "General";
dropItems = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "Drop Items", true, "Determines whether to be able to drop items.");
dropEquipments = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "Drop Equipments", true, "Determines whether to be able to drop equipments.");
useCommandEssence = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "Use Command Essence", false, "Determines whether the dropped item becomes an essence when the Artifact of Command is enabled. Note: If the item didn't turn into an essence, only one item was available for selection.");
dropCoins = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "Drop Coins", true, "Determines whether to be able to drop coins.");
scrapItems = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "Scrap Items", true, "Determines whether to be able to scrap items. Note: To scrap items, hold left-alt and click on them.");
scrapDropOnGround = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "Drop Scrap On Ground", true, "Determines whether the scrapped item should drop on the ground.");
rightClick = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "Right-click Instead Of Left-click", false, "Determines whether to drop/scrap with right-click instead of left-click.");
NetworkingAPI.RegisterMessageType<DropRequest>();
NetworkingAPI.RegisterMessageType<ScrapRequest>();
if (RiskOfOptions.IsLoaded())
{
RiskOfOptions.OnAwake();
}
Stage.onStageStartGlobal += delegate
{
equipmentIcons.Clear();
};
harmony.PatchAll();
}
internal void HandleEquipmentIcon(EquipmentIcon equipmentIcon)
{
//IL_0002: 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_0049: Expected O, but got Unknown
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: 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)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Invalid comparison between Unknown and I4
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Invalid comparison between Unknown and I4
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: 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)
EquipmentIndex val = (EquipmentIndex)(-1);
if (equipmentIcon.hasEquipment)
{
object value = AccessTools.Field(typeof(EquipmentIcon), "currentDisplayData").GetValue(equipmentIcon);
EquipmentDef val2 = (EquipmentDef)AccessTools.Field(value.GetType(), "equipmentDef").GetValue(value);
val = val2.equipmentIndex;
}
if (!equipmentIcons.ContainsKey(equipmentIcon) || equipmentIcons[equipmentIcon] != val)
{
equipmentIcons[equipmentIcon] = val;
if ((int)val == -1)
{
equipmentIcon.tooltipProvider.overrideTitleText = "";
equipmentIcon.tooltipProvider.overrideBodyText = "";
EventSystem current = EventSystem.current;
TooltipController.RemoveTooltip((MPEventSystem)(object)((current is MPEventSystem) ? current : null), equipmentIcon.tooltipProvider);
}
GameObject gameObject = ((Component)equipmentIcon).gameObject;
ClickHandler clickHandler = gameObject.GetComponent<ClickHandler>();
if ((Object)(object)clickHandler == (Object)null)
{
clickHandler = gameObject.AddComponent<ClickHandler>();
}
clickHandler.pickupIndex = (((int)val == -1) ? PickupIndex.none : PickupCatalog.FindPickupIndex(val));
}
}
private void TryDrop(CharacterBody body, PickupIndex pickupIndex, bool useCommandEssence)
{
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_026d: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: 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_012a: 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_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_019d: Unknown result type (might be due to invalid IL or missing references)
//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_0155: Unknown result type (might be due to invalid IL or missing references)
//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: 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_01cb: Unknown result type (might be due to invalid IL or missing references)
//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
//IL_0173: Unknown result type (might be due to invalid IL or missing references)
//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)body == (Object)null || (Object)(object)body.currentVehicle != (Object)null)
{
return;
}
if (!NetworkServer.active)
{
NetMessageExtensions.Send((INetMessage)(object)new DropRequest
{
body = body,
pickupIndex = pickupIndex,
useCommandEssence = useCommandEssence
}, (NetworkDestination)2);
return;
}
CharacterMaster master = body.master;
if (PickupCatalog.FindPickupIndex(MiscPickups.LunarCoin.miscPickupIndex) == pickupIndex)
{
NetworkUser networkUser = master.playerCharacterMasterController.networkUser;
if (networkUser.lunarCoins == 0)
{
return;
}
networkUser.DeductLunarCoins(1u);
}
else if (PickupCatalog.FindPickupIndex(MiscPickups.VoidCoin.miscPickupIndex) == pickupIndex)
{
if (master.voidCoins == 0)
{
return;
}
uint voidCoins = master.voidCoins;
master.voidCoins = voidCoins - 1;
}
else
{
Inventory inventory = master.inventory;
bool flag = false;
GenericStaticEnumerable<ItemIndex, AllItemsEnumerator> allItems = ItemCatalog.allItems;
AllItemsEnumerator enumerator = allItems.GetEnumerator();
try
{
while (((AllItemsEnumerator)(ref enumerator)).MoveNext())
{
ItemIndex current = ((AllItemsEnumerator)(ref enumerator)).Current;
ItemDef itemDef = ItemCatalog.GetItemDef(current);
if (PickupCatalog.FindPickupIndex(current) == pickupIndex && (Object)(object)ItemTierCatalog.GetItemTierDef(itemDef.tier) != (Object)null)
{
if (inventory.GetItemCount(current) > 0 && !itemDef.hidden)
{
inventory.RemoveItem(current, 1);
flag = true;
}
break;
}
}
}
finally
{
((IDisposable)(AllItemsEnumerator)(ref enumerator)).Dispose();
}
GenericStaticEnumerable<EquipmentIndex, AllEquipmentEnumerator> allEquipment = EquipmentCatalog.allEquipment;
AllEquipmentEnumerator enumerator2 = allEquipment.GetEnumerator();
try
{
while (((AllEquipmentEnumerator)(ref enumerator2)).MoveNext())
{
EquipmentIndex current2 = ((AllEquipmentEnumerator)(ref enumerator2)).Current;
if (flag)
{
break;
}
if (!(PickupCatalog.FindPickupIndex(current2) == pickupIndex))
{
continue;
}
int num = -1;
for (uint num2 = 0u; num2 < inventory.GetEquipmentSlotCount(); num2++)
{
if (inventory.GetEquipment(num2).equipmentIndex == current2)
{
num = (int)num2;
break;
}
}
if (num != -1)
{
inventory.SetEquipmentIndexForSlot((EquipmentIndex)(-1), (uint)num);
flag = true;
break;
}
}
}
finally
{
((IDisposable)(AllEquipmentEnumerator)(ref enumerator2)).Dispose();
}
if (!flag)
{
return;
}
}
CreateDroplet(body, pickupIndex, useCommandEssence);
}
private void TryScrap(CharacterBody body, ItemIndex itemIndex, bool dropOnGround)
{
//IL_0059: 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_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: 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_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: 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_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: 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_00b7: 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_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: 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_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Invalid comparison between Unknown and I4
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)body == (Object)null || (Object)(object)body.currentVehicle != (Object)null)
{
return;
}
if (!NetworkServer.active)
{
NetMessageExtensions.Send((INetMessage)(object)new ScrapRequest
{
body = body,
itemIndex = itemIndex,
dropOnGround = dropOnGround
}, (NetworkDestination)2);
return;
}
PickupIndex none = PickupIndex.none;
ItemIndex val = (ItemIndex)(-1);
ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex);
if ((Object)(object)itemDef == (Object)null)
{
return;
}
ItemTier tier = itemDef.tier;
if (moddedScraps.ContainsKey(tier))
{
ItemIndex val2 = moddedScraps[tier];
none = PickupCatalog.FindPickupIndex(val2);
val = val2;
}
else
{
none = PickupCatalog.FindScrapIndexForItemTier(tier);
PickupDef pickupDef = PickupCatalog.GetPickupDef(none);
if (pickupDef == null)
{
return;
}
val = pickupDef.itemIndex;
}
if ((int)val != -1 && val != itemIndex)
{
Inventory inventory = body.inventory;
inventory.RemoveItem(itemIndex, 1);
if (dropOnGround)
{
CreateDroplet(body, none, useCommandEssence: false);
}
else
{
inventory.GiveItem(val, 1);
}
}
}
private void CreateDroplet(CharacterBody body, PickupIndex pickupIndex, bool useCommandEssence)
{
//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_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: 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)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
Vector3 position = ((Component)body).transform.position;
CreatePickupInfo val = default(CreatePickupInfo);
val.position = position;
val.rotation = Quaternion.identity;
((CreatePickupInfo)(ref val)).pickupIndex = pickupIndex;
CreatePickupInfo pickupInfo = val;
CreateDroplet(pickupInfo, position, body.inputBank.aimDirection, useCommandEssence);
}
private void CreateDroplet(CreatePickupInfo pickupInfo, Vector3 position, Vector3 direction, bool useCommandEssence)
{
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: 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)
//IL_008e: Expected O, but got Unknown
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: 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_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: 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_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
if (useCommandEssence && CommandArtifactManager.IsCommandArtifactEnabled)
{
Option[] array = (Option[])AccessTools.Method(typeof(PickupPickerController), "GetOptionsFromPickupIndex", (Type[])null, (Type[])null).Invoke(null, new object[1] { ((CreatePickupInfo)(ref pickupInfo)).pickupIndex });
if (array.Length > 1)
{
ref PickupArtifactFlag artifactFlag = ref pickupInfo.artifactFlag;
artifactFlag = (PickupArtifactFlag)((uint)artifactFlag | 1u);
}
}
GameObject val = Object.Instantiate<GameObject>((GameObject)AccessTools.Field(typeof(PickupDropletController), "pickupDropletPrefab").GetValue(null), position, Quaternion.identity);
PickupDropletController component = val.GetComponent<PickupDropletController>();
if ((Object)(object)component != (Object)null)
{
AccessTools.Field(typeof(PickupDropletController), "createPickupInfo").SetValue(component, pickupInfo);
component.NetworkpickupIndex = ((CreatePickupInfo)(ref pickupInfo)).pickupIndex;
}
Rigidbody component2 = val.GetComponent<Rigidbody>();
component2.velocity = Quaternion.AngleAxis(Vector3.SignedAngle(Vector3.forward, new Vector3(direction.x, 0f, direction.z), Vector3.up), Vector3.up) * (Vector3.up * 15f + Vector3.forward * 5f);
component2.AddTorque(Random.Range(150f, 120f) * Random.onUnitSphere);
NetworkServer.Spawn(val);
}
}
}
namespace DroppableThings.Properties
{
[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[DebuggerNonUserCode]
[CompilerGenerated]
internal class Resources
{
private static ResourceManager resourceMan;
private static CultureInfo resourceCulture;
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static ResourceManager ResourceManager
{
get
{
if (resourceMan == null)
{
ResourceManager resourceManager = new ResourceManager("DroppableThings.Properties.Resources", typeof(Resources).Assembly);
resourceMan = resourceManager;
}
return resourceMan;
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
internal static Bitmap icon
{
get
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Expected O, but got Unknown
object @object = ResourceManager.GetObject("icon", resourceCulture);
return (Bitmap)@object;
}
}
internal Resources()
{
}
}
}
namespace DroppableThings.Patches
{
[HarmonyPatch(typeof(ScoreboardStrip))]
internal class ScoreboardStripPatch
{
[HarmonyPatch("Update")]
[HarmonyPostfix]
private static void Update(EquipmentIcon ___equipmentIcon, CharacterMaster ___userPlayerCharacterMasterController)
{
if (!((Object)(object)LocalUserManager.GetFirstLocalUser().cachedMasterController != (Object)(object)___userPlayerCharacterMasterController))
{
Plugin.instance.HandleEquipmentIcon(___equipmentIcon);
}
}
}
[HarmonyPatch(typeof(EquipmentIcon))]
internal class EquipmentIconPatch
{
[HarmonyPatch("SetDisplayData")]
[HarmonyPostfix]
private static void SetDisplayData(EquipmentIcon __instance, CharacterMaster ___playerCharacterMasterController)
{
if (!((Object)(object)LocalUserManager.GetFirstLocalUser().cachedMasterController != (Object)(object)___playerCharacterMasterController))
{
Plugin.instance.HandleEquipmentIcon(__instance);
}
}
}
[HarmonyPatch(typeof(ItemInventoryDisplay))]
internal class ItemInventoryDisplayPatch
{
[HarmonyPatch("UpdateDisplay")]
[HarmonyPostfix]
private static void UpdateDisplay(List<ItemIcon> ___itemIcons)
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
foreach (ItemIcon ___itemIcon in ___itemIcons)
{
GameObject gameObject = ((Component)___itemIcon).gameObject;
Plugin.ClickHandler clickHandler = gameObject.GetComponent<Plugin.ClickHandler>();
if ((Object)(object)clickHandler == (Object)null)
{
clickHandler = gameObject.AddComponent<Plugin.ClickHandler>();
}
clickHandler.pickupIndex = PickupCatalog.FindPickupIndex((ItemIndex)AccessTools.Field(typeof(ItemIcon), "itemIndex").GetValue(___itemIcon));
}
}
}
[HarmonyPatch(typeof(HUD))]
internal class HUDPatch
{
[HarmonyPatch("Awake")]
[HarmonyPostfix]
private static void Awake(HUD __instance)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
__instance.lunarCoinContainer.AddComponent<Plugin.ClickHandler>().pickupIndex = PickupCatalog.FindPickupIndex(MiscPickups.LunarCoin.miscPickupIndex);
__instance.voidCoinContainer.AddComponent<Plugin.ClickHandler>().pickupIndex = PickupCatalog.FindPickupIndex(MiscPickups.VoidCoin.miscPickupIndex);
}
}
}