using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
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 HG.Reflection;
using On.RoR2;
using On.RoR2.UI;
using R2API;
using RoR2;
using RoR2.UI;
using TILER2;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.EventSystems;
using UnityEngine.Networking;
using UnityEngine.ResourceManagement.AsyncOperations;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("Yeet")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Yeet")]
[assembly: AssemblyTitle("Yeet")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace ThinkInvisible.Yeet;
[BepInPlugin("com.ThinkInvisible.Yeet", "Yeet", "3.0.4")]
[BepInDependency("com.bepis.r2api", "5.1.1")]
[BepInDependency("com.ThinkInvisible.TILER2", "7.4.1")]
public class YeetPlugin : BaseUnityPlugin
{
public class ServerBlacklist : AutoConfigContainer
{
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOCheckbox(null, null)]
public bool preventEquipment { get; private set; }
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOCheckbox(null, null)]
public bool preventLunarEquipment { get; private set; }
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOCheckbox(null, null)]
public bool preventNonLunarEquipment { get; private set; }
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOCheckbox(null, null)]
public bool preventItems { get; private set; }
[AutoConfig(/*Could not decode attribute arguments.*/)]
public bool preventHidden { get; private set; } = true;
[AutoConfig(/*Could not decode attribute arguments.*/)]
public bool preventCantRemove { get; private set; } = true;
[AutoConfig(/*Could not decode attribute arguments.*/)]
public bool preventTierless { get; private set; } = true;
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOString(null, null)]
public string blacklistTier { get; private set; } = "LunarTierDef, VoidTier1Def, VoidTier2Def, VoidTier3Def, VoidBossDef";
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOString(null, null)]
public string blacklistItem { get; private set; } = "";
}
public class ServerConfig : AutoConfigContainer
{
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOCheckbox(null, null)]
public bool allowYeet { get; private set; } = true;
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOCheckbox(null, null)]
public bool preventRecycling { get; private set; }
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOCheckbox(null, null)]
public bool commandExtraCheesyMode { get; private set; }
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOCheckbox(null, null)]
public bool announce { get; private set; } = true;
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOSlider("{0:N1} m/s", 0f, 500f, null, null)]
public float lowThrowForce { get; private set; } = 30f;
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOSlider("{0:N1} m/s", 0f, 500f, null, null)]
public float highThrowForce { get; private set; } = 150f;
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOIntSlider("{0:N0}", 1, 100, null, null)]
public int maxThrowCount { get; private set; } = 1;
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOSlider("{0:N1} s", 0f, 300f, null, null)]
public float yoinkCooldown { get; private set; } = 5f;
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOSlider("{0:N1} s", 0f, 300f, null, null)]
public float yeetCooldown { get; private set; } = 10f;
}
public class ClientConfig : AutoConfigContainer
{
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOSlider("{0:N1} s", 0f, 10f, null, null)]
public float highThrowTime { get; private set; } = 2f;
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOIntSlider("{0:N0}", -100, 100, null, null)]
public int primaryQuantity { get; private set; } = 1;
[AutoConfig(/*Could not decode attribute arguments.*/)]
[AutoConfigRoOIntSlider("{0:N0}", -100, 100, null, null)]
public int secondaryQuantity { get; private set; } = 1;
}
public const string ModVer = "3.0.4";
public const string ModName = "Yeet";
public const string ModGuid = "com.ThinkInvisible.Yeet";
public static readonly ServerConfig serverConfig = new ServerConfig();
public static readonly ClientConfig clientConfig = new ClientConfig();
public static readonly ServerBlacklist serverBlacklist = new ServerBlacklist();
internal static ManualLogSource _logger;
private static GameObject yeetPickupPrefab;
private static readonly HashSet<string> _blacklistTier = new HashSet<string>();
private static readonly HashSet<string> _blacklistItem = new HashSet<string>();
public void Awake()
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Expected O, but got Unknown
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Expected O, but got Unknown
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Expected O, but got Unknown
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Expected O, but got Unknown
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00d1: Expected O, but got Unknown
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Expected O, but got Unknown
//IL_00e7: 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)
_logger = ((BaseUnityPlugin)this).Logger;
ConfigFile val = new ConfigFile(Path.Combine(Paths.ConfigPath, "com.ThinkInvisible.Yeet.cfg"), true);
((AutoConfigContainer)serverBlacklist).ConfigEntryChanged += delegate(object sender, AutoConfigUpdateActionEventArgs args)
{
if (args.target.boundProperty.Name == "blacklistTier" || args.target.boundProperty.Name == "blacklistItem")
{
UpdateBlacklists();
}
};
((AutoConfigContainer)serverConfig).BindAll(val, "Yeet", "Server");
((AutoConfigContainer)clientConfig).BindAll(val, "Yeet", "Client");
((AutoConfigContainer)serverBlacklist).BindAll(val, "Yeet", "ServerBlacklist");
UpdateBlacklists();
ItemIcon.Awake += new hook_Awake(ItemIcon_Awake);
EquipmentIcon.Update += new hook_Update(EquipmentIcon_Update);
PickupDropletController.OnCollisionEnter += new hook_OnCollisionEnter(PickupDropletController_OnCollisionEnter);
GenericPickupController.CreatePickup += new hook_CreatePickup(GenericPickupController_CreatePickup);
GenericPickupController.GetInteractability += new hook_GetInteractability(GenericPickupController_GetInteractability);
GenericPickupController.OnTriggerStay += new hook_OnTriggerStay(GenericPickupController_OnTriggerStay);
AsyncOperationHandle<GameObject> val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/GenericPickup.prefab");
val2.Completed += delegate(AsyncOperationHandle<GameObject> obj)
{
GameObject result = obj.Result;
if (!Object.op_Implicit((Object)(object)result))
{
_logger.LogError((object)"Failed to load GenericPickup prefab to copy homework off of. The YoinkCooldown setting will not work (no extra cooldown will be added).");
}
else
{
GameObject val3 = PrefabAPI.InstantiateClone(result, "YeetPickupPrefabPrefab");
val3.AddComponent<YeetData>();
yeetPickupPrefab = PrefabAPI.InstantiateClone(val3, "YeetPickupPrefab", true);
}
};
}
private void UpdateBlacklists()
{
_blacklistItem.Clear();
_blacklistItem.UnionWith(from x in serverBlacklist.blacklistItem.Split(',')
select x.Trim());
_blacklistTier.Clear();
_blacklistTier.UnionWith(from x in serverBlacklist.blacklistTier.Split(',')
select x.Trim());
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void ConCmdYeet(ConCommandArgs args)
{
//IL_0012: 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_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_01f7: 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_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_015d: Unknown result type (might be due to invalid IL or missing references)
//IL_0249: Unknown result type (might be due to invalid IL or missing references)
//IL_024f: Expected I4, but got Unknown
//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
//IL_01f5: Expected I4, but got Unknown
//IL_0293: Unknown result type (might be due to invalid IL or missing references)
//IL_02e4: Unknown result type (might be due to invalid IL or missing references)
//IL_02ea: Invalid comparison between Unknown and I4
//IL_02fb: Unknown result type (might be due to invalid IL or missing references)
//IL_03e4: Unknown result type (might be due to invalid IL or missing references)
//IL_03f2: Unknown result type (might be due to invalid IL or missing references)
//IL_044b: Unknown result type (might be due to invalid IL or missing references)
//IL_0339: Unknown result type (might be due to invalid IL or missing references)
//IL_04ba: Unknown result type (might be due to invalid IL or missing references)
//IL_0399: Unknown result type (might be due to invalid IL or missing references)
//IL_039e: Unknown result type (might be due to invalid IL or missing references)
//IL_0369: Unknown result type (might be due to invalid IL or missing references)
//IL_0588: Unknown result type (might be due to invalid IL or missing references)
//IL_04ea: Unknown result type (might be due to invalid IL or missing references)
//IL_05c4: Unknown result type (might be due to invalid IL or missing references)
//IL_05c9: Unknown result type (might be due to invalid IL or missing references)
//IL_0644: Unknown result type (might be due to invalid IL or missing references)
//IL_064b: Unknown result type (might be due to invalid IL or missing references)
//IL_0666: Unknown result type (might be due to invalid IL or missing references)
//IL_066b: Unknown result type (might be due to invalid IL or missing references)
//IL_0600: Unknown result type (might be due to invalid IL or missing references)
//IL_060b: Unknown result type (might be due to invalid IL or missing references)
//IL_0613: Unknown result type (might be due to invalid IL or missing references)
//IL_0618: Unknown result type (might be due to invalid IL or missing references)
//IL_061f: Unknown result type (might be due to invalid IL or missing references)
//IL_0626: Unknown result type (might be due to invalid IL or missing references)
//IL_0628: Unknown result type (might be due to invalid IL or missing references)
//IL_0570: Unknown result type (might be due to invalid IL or missing references)
//IL_0575: Unknown result type (might be due to invalid IL or missing references)
if (!serverConfig.allowYeet)
{
if (Object.op_Implicit((Object)(object)args.sender))
{
NetUtil.ServerSendChatMsg(args.sender, "Yeet mod has been temporarily disabled by the server host.");
}
return;
}
if (!Object.op_Implicit((Object)(object)((ConCommandArgs)(ref args)).senderBody))
{
_logger.LogError((object)"ConCmdYeet: called by nonexistent player!");
return;
}
if (((ConCommandArgs)(ref args)).Count < 1)
{
_logger.LogError((object)"ConCmdYeet: not enough arguments! Need at least 1 (item ID), received 0.");
return;
}
YeetData yeetData = ((Component)((ConCommandArgs)(ref args)).senderBody).GetComponent<YeetData>();
if (!Object.op_Implicit((Object)(object)yeetData))
{
yeetData = ((Component)((ConCommandArgs)(ref args)).senderBody).gameObject.AddComponent<YeetData>();
yeetData.age = serverConfig.yeetCooldown;
}
if (yeetData.age < serverConfig.yeetCooldown)
{
float num = serverConfig.yeetCooldown - yeetData.age;
NetUtil.ServerSendChatMsg(args.sender, string.Format("You must wait {0:0} second{1} before yeeting another item.", num, (num < 2f) ? "" : "s"));
return;
}
bool valueOrDefault = ((ConCommandArgs)(ref args)).TryGetArgBool(1).GetValueOrDefault();
if (valueOrDefault ? serverBlacklist.preventEquipment : serverBlacklist.preventItems)
{
return;
}
string itemSearch = ((ConCommandArgs)(ref args)).TryGetArgString(0);
if (itemSearch == null)
{
_logger.LogError((object)"ConCmdYeet: could not read first argument (item ID)!");
return;
}
if (int.TryParse(itemSearch, out var result))
{
if (valueOrDefault)
{
EquipmentIndex val = (EquipmentIndex)result;
if (!EquipmentCatalog.IsIndexValid(ref val))
{
_logger.LogError((object)"ConCmdYeet: first argument (equipment ID as integer EquipmentIndex) is out of range; no equipment with that ID exists!");
return;
}
}
else
{
ItemIndex val2 = (ItemIndex)result;
if (!ItemCatalog.IsIndexValid(ref val2))
{
_logger.LogError((object)"ConCmdYeet: first argument (item ID as integer ItemIndex) is out of range; no item with that ID exists!");
return;
}
}
}
else if (valueOrDefault)
{
IEnumerable<EquipmentIndex> source = ((IEnumerable<EquipmentIndex>)(object)EquipmentCatalog.allEquipment).Where(delegate(EquipmentIndex searchInd)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
string nameToken2 = EquipmentCatalog.GetEquipmentDef(searchInd).nameToken;
string string2 = Language.GetString(nameToken2);
return string2.ToUpper().Contains(itemSearch.ToUpper());
});
if (source.Count() < 1)
{
_logger.LogError((object)"ConCmdYeet: first argument (equipment ID as string EquipmentName) not found in EquipmentCatalog; no equipment with a name containing that string exists!");
return;
}
if (source.Count() > 1)
{
_logger.LogWarning((object)"ConCmdYeet: first argument (item ID as string EquipmentName) matched multiple equipments; using first.");
}
result = (int)source.First();
}
else
{
IEnumerable<ItemIndex> source2 = ((IEnumerable<ItemIndex>)(object)ItemCatalog.allItems).Where(delegate(ItemIndex searchInd)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
string nameToken = ItemCatalog.GetItemDef(searchInd).nameToken;
string @string = Language.GetString(nameToken);
return @string.ToUpper().Contains(itemSearch.ToUpper());
});
if (source2.Count() < 1)
{
_logger.LogError((object)"ConCmdYeet: first argument (item ID as string ItemName) not found in ItemCatalog; no item with a name containing that string exists!");
return;
}
if (source2.Count() > 1)
{
_logger.LogWarning((object)"ConCmdYeet: first argument (item ID as string ItemName) matched multiple items; using first.");
}
result = (int)source2.First();
}
float num2 = Mathf.Lerp(serverConfig.lowThrowForce, serverConfig.highThrowForce, Mathf.Clamp01(((ConCommandArgs)(ref args)).TryGetArgFloat(2).GetValueOrDefault()));
int num3 = 1;
string text;
PickupIndex val3;
if (valueOrDefault)
{
EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef((EquipmentIndex)result);
string colorHexString = ColorCatalog.GetColorHexString(equipmentDef.colorIndex);
text = "<color=#" + colorHexString + ">" + Language.GetString(equipmentDef.nameToken) + "</color>";
if ((int)((ConCommandArgs)(ref args)).senderBody.inventory.GetEquipmentIndex() != result)
{
_logger.LogWarning((object)"ConCmdYeet: someone's trying to drop an equipment they don't have");
NetUtil.ServerSendChatMsg(args.sender, "Can't yeet " + text + ": you don't have it.");
return;
}
if (equipmentDef.isLunar ? serverBlacklist.preventLunarEquipment : serverBlacklist.preventNonLunarEquipment)
{
NetUtil.ServerSendChatMsg(args.sender, "Can't yeet " + text + ": tier blacklisted by server.");
return;
}
if (_blacklistItem.Contains(equipmentDef.nameToken))
{
NetUtil.ServerSendChatMsg(args.sender, "Can't yeet " + text + ": equipment blacklisted by server.");
return;
}
((ConCommandArgs)(ref args)).senderBody.inventory.SetEquipmentIndex((EquipmentIndex)(-1));
val3 = PickupCatalog.FindPickupIndex((EquipmentIndex)result);
}
else
{
FakeInventory component = ((Component)((ConCommandArgs)(ref args)).senderBody).GetComponent<FakeInventory>();
int num4 = (Object.op_Implicit((Object)(object)component) ? component.GetRealItemCount((ItemIndex)result) : ((ConCommandArgs)(ref args)).senderBody.inventory.GetItemCount((ItemIndex)result));
ItemDef itemDef = ItemCatalog.GetItemDef((ItemIndex)result);
ItemTierDef itemTierDef = ItemTierCatalog.GetItemTierDef(itemDef.tier);
string colorHexString2 = ColorCatalog.GetColorHexString(itemTierDef.colorIndex);
text = "<color=#" + colorHexString2 + ">" + Language.GetString(itemDef.nameToken) + "</color>";
if (num4 < 1)
{
_logger.LogWarning((object)"ConCmdYeet: someone's trying to drop an item they don't have any of");
NetUtil.ServerSendChatMsg(args.sender, "Can't yeet " + text + ": you don't have any.");
return;
}
if ((serverBlacklist.preventHidden && itemDef.hidden) || (serverBlacklist.preventCantRemove && !itemDef.canRemove) || ((!Object.op_Implicit((Object)(object)itemTierDef)) ? serverBlacklist.preventTierless : _blacklistTier.Contains(((Object)itemTierDef).name)))
{
NetUtil.ServerSendChatMsg(args.sender, "Can't yeet " + text + ": tier blacklisted by server.");
return;
}
if (_blacklistItem.Contains(itemDef.nameToken))
{
NetUtil.ServerSendChatMsg(args.sender, "Can't yeet " + text + ": item blacklisted by server.");
return;
}
int num5 = ((ConCommandArgs)(ref args)).TryGetArgInt(3) ?? 1;
if (num5 < 0)
{
num5 = Mathf.CeilToInt((float)num4 / ((float)(-num5) * 100f));
}
num3 = Mathf.Clamp(num5, 1, Mathf.Min(serverConfig.maxThrowCount, num4));
((ConCommandArgs)(ref args)).senderBody.inventory.RemoveItem((ItemIndex)result, num3);
val3 = PickupCatalog.FindPickupIndex((ItemIndex)result);
}
if (serverConfig.announce)
{
NetUtil.ServerSendGlobalChatMsg($"{Util.EscapeRichTextForTextMeshPro(args.sender.userName)} yeeted {num3}x {text}");
}
for (int i = 0; i < num3; i++)
{
GameObject val4 = Object.Instantiate<GameObject>(PickupDropletController.pickupDropletPrefab, ((ConCommandArgs)(ref args)).senderBody.inputBank.aimOrigin, Quaternion.identity);
YeetData yeetData2 = val4.AddComponent<YeetData>();
yeetData2.yeeter = ((ConCommandArgs)(ref args)).senderBody;
PickupDropletController component2 = val4.GetComponent<PickupDropletController>();
if (Object.op_Implicit((Object)(object)component2))
{
component2.NetworkpickupIndex = val3;
CreatePickupInfo createPickupInfo = new CreatePickupInfo
{
rotation = Quaternion.identity
};
((CreatePickupInfo)(ref createPickupInfo)).pickupIndex = val3;
component2.createPickupInfo = createPickupInfo;
}
Rigidbody component3 = val4.GetComponent<Rigidbody>();
component3.velocity = ((ConCommandArgs)(ref args)).senderBody.inputBank.aimDirection * num2;
component3.AddTorque(Random.Range(150f, 120f) * Random.onUnitSphere);
NetworkServer.Spawn(val4);
}
yeetData.age = 0f;
}
private void GenericPickupController_OnTriggerStay(orig_OnTriggerStay orig, GenericPickupController self, Collider other)
{
if (NetworkServer.active)
{
CharacterBody component = ((Component)other).GetComponent<CharacterBody>();
YeetData component2 = ((Component)self).GetComponent<YeetData>();
if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2) && (Object)(object)component2.yeeter == (Object)(object)component && component2.age < serverConfig.yoinkCooldown)
{
return;
}
}
orig.Invoke(self, other);
}
private Interactability GenericPickupController_GetInteractability(orig_GetInteractability orig, GenericPickupController self, Interactor activator)
{
//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_0049: Unknown result type (might be due to invalid IL or missing references)
Interactability result = orig.Invoke(self, activator);
YeetData component = ((Component)self).GetComponent<YeetData>();
CharacterBody component2 = ((Component)activator).GetComponent<CharacterBody>();
if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2) && (Object)(object)component.yeeter == (Object)(object)component2 && component.age < serverConfig.yoinkCooldown)
{
return (Interactability)0;
}
return result;
}
private void PickupDropletController_OnCollisionEnter(orig_OnCollisionEnter orig, PickupDropletController self, Collision collision)
{
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: 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_00cd: 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)
if (!NetworkServer.active || !self.alive)
{
orig.Invoke(self, collision);
return;
}
bool flag = false;
YeetData component = ((Component)self).GetComponent<YeetData>();
if (Object.op_Implicit((Object)(object)component))
{
if (!serverConfig.commandExtraCheesyMode)
{
flag = ((IEnumerable<ArtifactDef>)(object)RunArtifactManager.enabledArtifactsEnumerable).Contains(Artifacts.Command);
}
if (flag)
{
RunArtifactManager.instance.SetArtifactEnabledServer(Artifacts.Command, false);
}
if (!Object.op_Implicit((Object)(object)yeetPickupPrefab))
{
orig.Invoke(self, collision);
}
else
{
self.alive = false;
self.createPickupInfo.position = ((Component)self).transform.position;
GameObject val = Object.Instantiate<GameObject>(yeetPickupPrefab, self.createPickupInfo.position, self.createPickupInfo.rotation);
GenericPickupController component2 = val.GetComponent<GenericPickupController>();
if (Object.op_Implicit((Object)(object)component2))
{
component2.NetworkpickupIndex = ((CreatePickupInfo)(ref self.createPickupInfo)).pickupIndex;
if (serverConfig.preventRecycling)
{
component2.NetworkRecycled = true;
}
}
PickupIndexNetworker component3 = val.GetComponent<PickupIndexNetworker>();
if (Object.op_Implicit((Object)(object)component3))
{
component3.NetworkpickupIndex = ((CreatePickupInfo)(ref self.createPickupInfo)).pickupIndex;
}
YeetData component4 = val.GetComponent<YeetData>();
component4.age = component.age;
component4.yeeter = component.yeeter;
NetworkServer.Spawn(val);
Object.Destroy((Object)(object)((Component)self).gameObject);
}
if (flag)
{
RunArtifactManager.instance.SetArtifactEnabledServer(Artifacts.Command, true);
}
}
else
{
orig.Invoke(self, collision);
}
}
private GenericPickupController GenericPickupController_CreatePickup(orig_CreatePickup orig, ref CreatePickupInfo createPickupInfo)
{
return orig.Invoke(ref createPickupInfo);
}
private void ItemIcon_Awake(orig_Awake orig, ItemIcon self)
{
orig.Invoke(self);
((Component)self).gameObject.AddComponent<YeetButton>();
}
private void EquipmentIcon_Update(orig_Update orig, EquipmentIcon self)
{
orig.Invoke(self);
if (!Object.op_Implicit((Object)(object)((Component)self).gameObject.GetComponent<YeetButton>()))
{
YeetButton yeetButton = ((Component)self).gameObject.AddComponent<YeetButton>();
yeetButton.isEquipment = true;
}
}
}
public class YeetData : MonoBehaviour
{
public CharacterBody yeeter;
public float age;
private void FixedUpdate()
{
age += Time.fixedDeltaTime;
}
}
public class YeetButton : MonoBehaviour, IPointerDownHandler, IEventSystemHandler, IPointerUpHandler
{
private float holdTimeL;
private float holdTimeR;
public bool isEquipment;
void IPointerDownHandler.OnPointerDown(PointerEventData eventData)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Invalid comparison between Unknown and I4
if ((int)eventData.button == 0)
{
holdTimeL = Time.unscaledTime;
}
else if ((int)eventData.button == 1)
{
holdTimeR = Time.unscaledTime;
}
}
void IPointerUpHandler.OnPointerUp(PointerEventData eventData)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Invalid comparison between Unknown and I4
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Invalid comparison between Unknown and I4
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Expected I4, but got Unknown
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Expected I4, but got Unknown
bool flag = (int)eventData.button == 0;
bool flag2 = (int)eventData.button == 1;
if (flag || flag2)
{
float num = Time.unscaledTime - (flag ? holdTimeL : holdTimeR);
string text = (isEquipment ? ((int)((Component)this).GetComponent<EquipmentIcon>().targetInventory.GetEquipmentIndex()).ToString() : ((int)((Component)this).GetComponent<ItemIcon>().itemIndex).ToString());
if (NetworkUser.readOnlyLocalPlayersList.Count > 0)
{
Console.instance.SubmitCmd(NetworkUser.readOnlyLocalPlayersList[0], $"yeet {text} {(isEquipment ? 1 : 0)} {num:N4} {(flag ? YeetPlugin.clientConfig.primaryQuantity : YeetPlugin.clientConfig.secondaryQuantity)}", false);
}
else
{
YeetPlugin._logger.LogError((object)"Received inventory click event with no active local players!");
}
}
}
}