using System;
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 System.Text;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using On.RoR2;
using On.RoR2.Achievements;
using RoR2;
using RoR2.Achievements;
using UnityEngine;
using UnityEngine.Networking;
[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("Gimme")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+8344fe9933605c3c439197aecda52d719d8087eb")]
[assembly: AssemblyProduct("Gimme")]
[assembly: AssemblyTitle("Gimme")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace Gimme
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInProcess("Risk of Rain 2.exe")]
[BepInPlugin("com.nulldev.ror2.gimme", "Gimme", "1.0.3")]
public class Gimme : BaseUnityPlugin
{
[CompilerGenerated]
private static class <>O
{
public static hook_RunCmd <0>__Console_RunCmd;
public static hook_Grant <1>__AchievementBlocker;
}
private const string GUID = "com.nulldev.ror2.gimme";
private const string NAME = "Gimme";
private const string VERSION = "1.0.3";
internal static ManualLogSource log { get; set; }
public void Awake()
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Expected O, but got Unknown
//IL_003b: 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_0046: Expected O, but got Unknown
log = ((BaseUnityPlugin)this).Logger;
object obj = <>O.<0>__Console_RunCmd;
if (obj == null)
{
hook_RunCmd val = Console_RunCmd;
<>O.<0>__Console_RunCmd = val;
obj = (object)val;
}
Console.RunCmd += (hook_RunCmd)obj;
object obj2 = <>O.<1>__AchievementBlocker;
if (obj2 == null)
{
hook_Grant val2 = AchievementBlocker;
<>O.<1>__AchievementBlocker = val2;
obj2 = (object)val2;
}
BaseAchievement.Grant += (hook_Grant)obj2;
log.LogInfo((object)"Gimme loaded successfully.");
}
private static void AchievementBlocker(orig_Grant orig, BaseAchievement self)
{
log.LogDebug((object)("[Gimme::AchievementBlocker] Preventing the following achievement: " + (object)self));
}
private static void Console_RunCmd(orig_RunCmd orig, Console self, CmdSender sender, string concommandName, List<string> userArgs)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: 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_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Expected O, but got Unknown
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_0100: Expected O, but got Unknown
//IL_015d: 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_0163: 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_017f: Expected O, but got Unknown
//IL_017f: 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_01a7: 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_01b9: Expected O, but got Unknown
//IL_0191: Unknown result type (might be due to invalid IL or missing references)
//IL_0196: Unknown result type (might be due to invalid IL or missing references)
//IL_01a6: Expected O, but got Unknown
//IL_0127: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: Expected O, but got Unknown
//IL_0111: 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_0126: Expected O, but got Unknown
//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
//IL_01e6: Expected O, but got Unknown
if (!NetworkServer.active || (Object)(object)Run.instance == (Object)null || !concommandName.Equals("say", StringComparison.InvariantCultureIgnoreCase))
{
orig.Invoke(self, sender, concommandName, userArgs);
return;
}
string text = userArgs.FirstOrDefault();
if (string.IsNullOrWhiteSpace(text) || !text.StartsWith("/"))
{
orig.Invoke(self, sender, concommandName, userArgs);
return;
}
string[] source = text.Split(' ');
string text2 = source.FirstOrDefault().Substring(1);
string[] array = source.Skip(1).ToArray();
if (text2.ToUpperInvariant() == "GIMME" || text2.ToUpperInvariant() == "GI")
{
Chat.SendBroadcastChat((ChatMessageBase)new UserChatMessage
{
sender = ((Component)sender.networkUser).gameObject,
text = text
});
if (array.Length < 1 || array[0] == "" || array[0].ToUpperInvariant() == "HELP")
{
Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
{
baseToken = "<color=#AAE6F0>/gi itemname playername [amount]\n/gimme itemname playername [amount]\n/gr [itemname] [amount]\n/gimmerandom [itemname] [amount]\nWill give items into playername's inventory"
});
return;
}
string text3 = GimmeLogic.GiveItem(sender.networkUser, array);
if (text3 == null)
{
Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
{
baseToken = "<color=#ff4646>ERROR: null output</color>"
});
}
else
{
Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
{
baseToken = text3
});
}
}
else if (text2.ToUpperInvariant() == "GR" || text2.ToUpperInvariant() == "GIMMERANDOM")
{
Chat.SendBroadcastChat((ChatMessageBase)new UserChatMessage
{
sender = ((Component)sender.networkUser).gameObject,
text = text
});
string text4 = GimmeLogic.GiveRandomItem(sender.networkUser, array);
if (text4 == null)
{
Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
{
baseToken = "<color=#ff4646>ERROR: null output</color>"
});
}
else
{
Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
{
baseToken = text4
});
}
}
else if (text2.ToUpperInvariant() == "GIMME_DUMP_ITEMS")
{
GimmeLogic.DumpItems();
Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
{
baseToken = "Gimme wrote a gimme_items.txt into your game's directory."
});
}
else
{
orig.Invoke(self, sender, concommandName, userArgs);
}
}
}
internal class GimmeLogic
{
public const string RANDOM_ITEM = "#gimme-random";
public const string green = "<color=#96EBAA>";
public const string player = "<color=#AAE6F0>";
public const string error = "<color=#FF8282>";
public const string bold = "<color=#ff4646>";
private static readonly Dictionary<ItemDef, int> RESTRICTED_ITEMS;
static GimmeLogic()
{
RESTRICTED_ITEMS = new Dictionary<ItemDef, int>();
RESTRICTED_ITEMS.Add(Items.LunarDagger, 64);
RESTRICTED_ITEMS.Add(Items.RandomEquipmentTrigger, 128);
RESTRICTED_ITEMS.Add(Items.SprintBonus, 100);
RESTRICTED_ITEMS.Add(Items.Hoof, 100);
RESTRICTED_ITEMS.Add(Items.AttackSpeedAndMoveSpeed, 100);
RESTRICTED_ITEMS.Add(Items.AttackSpeedPerNearbyAllyOrEnemy, 100);
RESTRICTED_ITEMS.Add(Items.CookedSteak, 100);
RESTRICTED_ITEMS.Add(Items.JumpBoost, 10);
RESTRICTED_ITEMS.Add(Items.FallBoots, 10);
RESTRICTED_ITEMS.Add(Items.AutoCastEquipment, 32);
RESTRICTED_ITEMS.Add(Items.HalfAttackSpeedHalfCooldowns, 8);
RESTRICTED_ITEMS.Add(Items.Talisman, 69);
RESTRICTED_ITEMS.Add(Items.HalfSpeedDoubleHealth, 16);
RESTRICTED_ITEMS.Add(Items.TransferDebuffOnHit, 16);
RESTRICTED_ITEMS.Add(Items.EquipmentMagazine, 254);
RESTRICTED_ITEMS.Add(Items.ShinyPearl, 100);
RESTRICTED_ITEMS.Add(Items.LunarSun, 100);
RESTRICTED_ITEMS.Add(Items.LowerPricedChests, 100);
RESTRICTED_ITEMS.Add(Items.Duplicator, 100);
}
public static string GiveRandomItem(NetworkUser user, string[] args)
{
Inventory val = (((Object)(object)user != (Object)null) ? user.master.inventory : null);
NetworkUser randomUser = StringParsers.GetRandomUser();
Inventory val2 = (((Object)(object)randomUser != (Object)null) ? randomUser.master.inventory : null);
if (!Object.op_Implicit((Object)(object)val) || !Object.op_Implicit((Object)(object)val2))
{
return "<color=#ff4646>ERROR: Unable to get player inventory!</color>";
}
if (!ParsePlayerArguments(user, args, out var _, out var _, out var quantity))
{
return "<color=#ff4646>ERROR: ParsePlayerArguments() returned FALSE!</color>";
}
return ProvideItem(user, val, val2, randomUser, quantity, "#gimme-random");
}
public static string GiveItem(NetworkUser user, string[] args)
{
Inventory val = (((Object)(object)user != (Object)null) ? user.master.inventory : null);
if (!ParsePlayerArguments(user, args, out var item, out var netUserFromString, out var quantity))
{
if (args.Length != 2)
{
return "<color=#FF8282>No player name specified!</color>";
}
return "<color=#FF8282>Could not find specified </color>player<color=#FF8282> '<color=#ff4646>" + args[1] + "</color>'</color>";
}
Inventory val2 = (((Object)(object)netUserFromString != (Object)null) ? netUserFromString.master.inventory : null);
if (!Object.op_Implicit((Object)(object)val) || !Object.op_Implicit((Object)(object)val2))
{
return "<color=#ff4646>Player not found or invalid player name.</color>";
}
return ProvideItem(user, val, val2, netUserFromString, quantity, item);
}
internal static string ProvideItem(NetworkUser sender, Inventory inventory1, Inventory inventory2, NetworkUser netUserFromString, int num, string item)
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: 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: Invalid comparison between Unknown and I4
//IL_0074: 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_007c: 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_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: 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_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: 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)
string text = "<color=#AAE6F0>" + netUserFromString.masterController.GetDisplayName() + "</color>";
string text2 = "<color=#AAE6F0>" + sender.masterController.GetDisplayName() + "</color>";
ItemIndex val = (ItemIndex)(-1);
if (item.Equals("#gimme-random"))
{
do
{
val = StringParsers.RandomItem();
}
while (IsNotSpawnable(val));
}
else
{
val = StringParsers.FindItem(item);
}
if ((int)val == -1)
{
return "<color=#FF8282>Could not find specified </color>item<color=#FF8282> '<color=#ff4646>" + item + "</color>'</color>";
}
ItemDef itemDef = ItemCatalog.GetItemDef(val);
PickupIndex val2 = PickupCatalog.FindPickupIndex(val);
string @string = Language.GetString(itemDef.nameToken);
string text3 = Util.GenerateColoredString(@string, Color32.op_Implicit(PickupCatalog.GetPickupDef(val2).baseColor));
if (IsNotSpawnable(val))
{
return "<color=#FF8282>Item cannot be spawned in.</color>";
}
if (RESTRICTED_ITEMS.ContainsKey(itemDef))
{
int itemCountPermanent = inventory2.GetItemCountPermanent(itemDef);
int num2 = RESTRICTED_ITEMS[itemDef];
if (num >= num2)
{
return "<color=#FF8282>Too much of an item requested, the limit is '" + num2 + "'.</color>";
}
if (itemCountPermanent + num > num2)
{
return "<color=#FF8282>Player already has too much of item.</color>";
}
}
if (num > 1 && !@string.EndsWith("s"))
{
text3 += Util.GenerateColoredString("s", Color32.op_Implicit(PickupCatalog.GetPickupDef(val2).baseColor));
}
if (num > 1024)
{
num = 1024;
}
inventory2.GiveItemPermanent(val, num);
if (text.Equals(text2))
{
return string.Format("{0}{1} gave themselves {2} {3}</color>", "<color=#96EBAA>", text2, num, text3);
}
return string.Format("{0}{1} gave {2} {3} to </color>{4}", "<color=#96EBAA>", text2, num, text3, text);
}
internal static bool IsNotSpawnable(ItemIndex index)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
string @string = Language.GetString(ItemCatalog.GetItemDef(index).nameToken);
if (@string.StartsWith("ITEM_"))
{
return @string.EndsWith("_NAME");
}
return false;
}
internal static bool ParsePlayerArguments(NetworkUser sender, string[] args, out string item, out NetworkUser netUserFromString, out int quantity)
{
item = null;
netUserFromString = null;
quantity = -1;
if (args == null || args.Length == 0)
{
return false;
}
foreach (string text in args)
{
int result;
bool flag = int.TryParse(text, out result);
if (item == null)
{
item = text;
}
else if ((Object)(object)netUserFromString == (Object)null && !flag)
{
netUserFromString = StringParsers.GetNetUserFromString(text);
}
else if (quantity == -1 && flag)
{
int.TryParse(text, out quantity);
}
}
if (NetworkUser.readOnlyInstancesList.Count == 1)
{
netUserFromString = sender;
}
if (quantity == -1)
{
quantity = 1;
}
return true;
}
internal static NetworkUser GetPlayer(NetworkUser sender, string arg)
{
if (NetworkUser.readOnlyInstancesList.Count == 1)
{
return sender;
}
return StringParsers.GetNetUserFromString(arg);
}
internal static void DumpItems()
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: 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_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Expected I4, but got Unknown
using StreamWriter streamWriter = new StreamWriter("gimme_items.txt");
streamWriter.WriteLine("// Gimme FORMAT_ONE");
AllItemsEnumerator enumerator = ItemCatalog.allItems.GetEnumerator();
try
{
while (((AllItemsEnumerator)(ref enumerator)).MoveNext())
{
ItemIndex current = ((AllItemsEnumerator)(ref enumerator)).Current;
ItemDef itemDef = ItemCatalog.GetItemDef(current);
string @string = Language.GetString(itemDef.nameToken);
string text = "";
text += "{index:";
text += ((object)(ItemIndex)(ref current)).ToString();
text += ",tier:";
text += (int)itemDef.tier;
text += ",nameToken:\"";
text += ((Object)itemDef).name;
text += "\",localizedName:\"";
text += @string;
text += "\"}";
streamWriter.WriteLine(text);
}
}
finally
{
((IDisposable)(AllItemsEnumerator)(ref enumerator)).Dispose();
}
}
}
internal sealed class StringParsers
{
private static readonly Random rng = new Random();
internal static ItemIndex FindItemInInventory(string input, Inventory inventory)
{
//IL_0060: 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_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
List<ItemIndex> itemAcquisitionOrder = inventory.itemAcquisitionOrder;
if (!itemAcquisitionOrder.Any())
{
return (ItemIndex)(-1);
}
input = ReformatString(input);
if (int.TryParse(input, out var result))
{
if (result > itemAcquisitionOrder.Count || result < 0)
{
return (ItemIndex)(-1);
}
if (result == 0)
{
return itemAcquisitionOrder[itemAcquisitionOrder.Count - 1];
}
return itemAcquisitionOrder[itemAcquisitionOrder.Count - result];
}
for (int num = itemAcquisitionOrder.Count - 1; num >= 0; num--)
{
ItemDef itemDef = ItemCatalog.GetItemDef(itemAcquisitionOrder[num]);
if (ReformatString(Language.GetString(itemDef.nameToken)).Contains(input))
{
return itemDef.itemIndex;
}
}
return (ItemIndex)(-1);
}
public static EquipmentIndex GetEquipFromPartial(string name)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
name = ReformatString(name);
EquipmentDef[] equipmentDefs = EquipmentCatalog.equipmentDefs;
foreach (EquipmentDef val in equipmentDefs)
{
if (ReformatString(Language.GetString(val.nameToken)).Contains(name))
{
return val.equipmentIndex;
}
}
return (EquipmentIndex)(-1);
}
internal static NetworkUser GetRandomUser()
{
return NetworkUser.readOnlyInstancesList[rng.Next(NetworkUser.readOnlyInstancesList.Count)];
}
internal static NetworkUser GetNetUserFromString(string name)
{
if (int.TryParse(name, out var result))
{
if (result < NetworkUser.readOnlyInstancesList.Count && result >= 0)
{
return NetworkUser.readOnlyInstancesList[result];
}
return null;
}
name = ReformatString(name);
foreach (NetworkUser readOnlyInstances in NetworkUser.readOnlyInstancesList)
{
if (ReformatString(readOnlyInstances.userName).StartsWith(name))
{
return readOnlyInstances;
}
}
foreach (NetworkUser readOnlyInstances2 in NetworkUser.readOnlyInstancesList)
{
if (ReformatString(readOnlyInstances2.userName).Contains(name))
{
return readOnlyInstances2;
}
}
foreach (NetworkUser readOnlyInstances3 in NetworkUser.readOnlyInstancesList)
{
if (NormalizeString(readOnlyInstances3.userName).Contains(name))
{
return readOnlyInstances3;
}
}
return null;
}
internal static string ReformatString(string input)
{
return Regex.Replace(input, "[ '_.,-]", string.Empty).ToLower();
}
internal static string NormalizeString(string input)
{
return input.Normalize(NormalizationForm.FormKD);
}
internal static ItemIndex RandomItem()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: 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)
int index = rng.Next(((IEnumerable<ItemIndex>)(object)ItemCatalog.allItems).Count());
return ((IEnumerable<ItemIndex>)(object)ItemCatalog.allItems).AsParallel().DefaultIfEmpty((ItemIndex)(-1)).ElementAtOrDefault(index);
}
internal static ItemIndex FindItem(string item)
{
//IL_000d: 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)
return (from candidate in ((IEnumerable<ItemIndex>)(object)ItemCatalog.allItems).AsParallel()
where Language.GetString(ItemCatalog.GetItemDef(candidate).nameToken).IndexOf(item, StringComparison.OrdinalIgnoreCase) >= 0
select candidate).DefaultIfEmpty((ItemIndex)(-1)).First();
}
}
internal static class Log
{
private static ManualLogSource _logSource;
internal static void Init(ManualLogSource logSource)
{
_logSource = logSource;
}
internal static void Debug(object data)
{
_logSource.LogDebug(data);
}
internal static void Error(object data)
{
_logSource.LogError(data);
}
internal static void Fatal(object data)
{
_logSource.LogFatal(data);
}
internal static void Info(object data)
{
_logSource.LogInfo(data);
}
internal static void Message(object data)
{
_logSource.LogMessage(data);
}
internal static void Warning(object data)
{
_logSource.LogWarning(data);
}
}
}