Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of MidRunArtifacts v1.2.1
plugins/MidRunArtifacts/MidRunArtifacts.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HG.Reflection; using MonoMod.RuntimeDetour.HookGen; using RoR2; using UnityEngine; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.2.1.0")] namespace MidRunArtifacts; [BepInPlugin("com.KingEnderBrine.MidRunArtifacts", "Mid Run Artifacts", "1.2.1")] public class MidRunArtifactsPlugin : BaseUnityPlugin { public const string GUID = "com.KingEnderBrine.MidRunArtifacts"; public const string Name = "Mid Run Artifacts"; public const string Version = "1.2.1"; private static readonly ConstructorInfo autoCompleteCtor = typeof(AutoComplete).GetConstructor(new Type[1] { typeof(Console) }); private static readonly MethodInfo chatAddMessage = typeof(Chat).GetMethod("CCSay", BindingFlags.Static | BindingFlags.NonPublic, null, new Type[1] { typeof(ConCommandArgs) }, null); private static List<string> commandsAutocomplete; private static string autocompleteLanguage; internal static MidRunArtifactsPlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { MidRunArtifactsPlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private static List<string> CommandsAutocomplete { get { if (autocompleteLanguage == Language.currentLanguageName) { return commandsAutocomplete; } autocompleteLanguage = Language.currentLanguageName; return commandsAutocomplete = GatherCommandsAutocomplete(); } } public static ConfigEntry<bool> EnableChatCommands { get; set; } private void Awake() { Instance = this; EnableChatCommands = ((BaseUnityPlugin)this).Config.Bind<bool>("Main", "EnableChatCommands", false, "Accept commands from any player in chat"); HookEndpointManager.Add((MethodBase)autoCompleteCtor, (Delegate)new Action<Action<AutoComplete, Console>, AutoComplete, Console>(CommandArgsAutoCompletion)); if (EnableChatCommands.Value) { HookEndpointManager.Add((MethodBase)chatAddMessage, (Delegate)new Action<Action<ConCommandArgs>, ConCommandArgs>(OnChatAddMessage)); } } private void Destroy() { Instance = null; HookEndpointManager.Remove((MethodBase)autoCompleteCtor, (Delegate)new Action<Action<AutoComplete, Console>, AutoComplete, Console>(CommandArgsAutoCompletion)); if (EnableChatCommands.Value) { HookEndpointManager.Remove((MethodBase)chatAddMessage, (Delegate)new Action<Action<ConCommandArgs>, ConCommandArgs>(OnChatAddMessage)); } } private static void OnChatAddMessage(Action<ConCommandArgs> orig, ConCommandArgs args) { //IL_0001: 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_003e: Expected O, but got Unknown //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: 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) orig(args); if (!NetworkServer.active || !Object.op_Implicit((Object)(object)RunArtifactManager.instance) || !((ConCommandArgs)(ref args))[0].StartsWith("/")) { return; } Lexer val = new Lexer(((ConCommandArgs)(ref args))[0]); string text = val.NextToken(); if (text == null) { return; } bool? newState; switch (text) { default: return; case "mra_enable": newState = true; break; case "mra_disable": newState = false; break; case "mra_toggle": newState = null; break; } List<string> list = new List<string>(); while (true) { string text2 = val.NextToken(); if (text2 == null || text2 == ";") { break; } list.Add(text2); } ConCommandArgs args2 = default(ConCommandArgs); args2.userArgs = list; args2.commandName = text; args2.sender = args.sender; ToggleArtifact(args2, newState, fromChat: true); } private static void CommandArgsAutoCompletion(Action<AutoComplete, Console> orig, AutoComplete self, Console console) { orig(self, console); try { self.searchableStrings.AddRange(CommandsAutocomplete); } catch (Exception ex) { InstanceLogger.LogWarning((object)"Failed to gather autocomplete options"); InstanceLogger.LogError((object)ex); } } private static List<string> GatherCommandsAutocomplete() { IEnumerable<string> enumerable = ArtifactCatalog.artifactDefs.Select((ArtifactDef a) => GetArgNameForArtifact(a, english: false)); if (Language.currentLanguage.name != Language.english.name) { enumerable = enumerable.Union(ArtifactCatalog.artifactDefs.Select((ArtifactDef a) => GetArgNameForArtifact(a, english: true))); } List<string> list = new List<string>(); list.AddRange(enumerable.Select((string el) => "mra_enable " + el)); list.AddRange(enumerable.Select((string el) => "mra_disable " + el)); list.AddRange(enumerable.Select((string el) => "mra_toggle " + el)); list.Sort(); return list; } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCEnable(ConCommandArgs args) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) ToggleArtifact(args, true); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCDisable(ConCommandArgs args) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) ToggleArtifact(args, false); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCToggle(ConCommandArgs args) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) ToggleArtifact(args); } private static void ToggleArtifact(ConCommandArgs args, bool? newState = null, bool fromChat = false) { if (!Object.op_Implicit((Object)(object)RunArtifactManager.instance)) { LogMessage("You can only use this command while in a run"); return; } if (!NetworkServer.active) { LogMessage("You must be a host to use this command"); return; } if (((ConCommandArgs)(ref args)).Count == 0) { LogMessage("No arguments supplied"); return; } ArtifactDef artifactDefFromString = GetArtifactDefFromString(((ConCommandArgs)(ref args))[0]); if (!Object.op_Implicit((Object)(object)artifactDefFromString)) { LogMessage("Artifact with a given name was not found."); } else { RunArtifactManager.instance.SetArtifactEnabledServer(artifactDefFromString, newState ?? (!RunArtifactManager.instance.IsArtifactEnabled(artifactDefFromString))); } void LogMessage(string message) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown if (fromChat) { Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = message }); } else { Debug.Log((object)message); } } } private static ArtifactDef GetArtifactDefFromString(string partialName) { ArtifactDef[] artifactDefs = ArtifactCatalog.artifactDefs; foreach (ArtifactDef val in artifactDefs) { if (GetArgNameForArtifact(val, english: false).ToLower().Contains(partialName.ToLower()) || (Language.english.name != Language.currentLanguage.name && GetArgNameForArtifact(val, english: true).ToLower().Contains(partialName.ToLower()))) { return val; } } return null; } private static string GetArgNameForArtifact(ArtifactDef artifactDef, bool english) { return Regex.Replace(Language.GetString(artifactDef.nameToken, english ? Language.english.name : Language.currentLanguage.name), "[ '-]", string.Empty); } }