Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of Redemption v1.1.1
BepInEx/plugins/ExamplePlugin.dll
Decompiled 5 months agousing System; using System.Collections.Generic; 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.Logging; using EntityStates.TeleporterHealNovaController; using Microsoft.CodeAnalysis; using On.EntityStates.TeleporterHealNovaController; using R2API; using RoR2; using UnityEngine; [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("ExamplePlugin")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("ExamplePlugin")] [assembly: AssemblyTitle("ExamplePlugin")] [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 ExamplePlugin { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("Phorg.Redemption", "Redemption", "1.0.0")] public class ExamplePlugin : BaseUnityPlugin { public const string PluginGUID = "Phorg.Redemption"; public const string PluginAuthor = "Phorg"; public const string PluginName = "Redemption"; public const string PluginVersion = "1.0.0"; private static bool pulseHooked; public void Awake() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown Log.Init(((BaseUnityPlugin)this).Logger); GameObject val = new GameObject("InputMonitor"); val.AddComponent<InputMonitor>(); Object.DontDestroyOnLoad((Object)(object)val); Language.onCurrentLanguageChanged += RegisterLanguage; try { if (!pulseHooked) { TeleporterHealNovaGeneratorMain.Pulse += new hook_Pulse(RestoreConsumedItem); pulseHooked = true; } } catch (Exception ex) { Log.Error(ex.Message + " - " + ex.StackTrace); } } private void RegisterLanguage() { Log.Info("Registering language tokens"); LanguageAPI.Add("ITEM_TPHEALINGNOVA_NAME", "Redemption"); LanguageAPI.Add("ITEM_TPHEALINGNOVA_PICKUP", "Calls down a healing aura. Restores a broken item upon activation."); LanguageAPI.Add("ITEM_TPHEALINGNOVA_DESC", "Release a <style=cIsHealing>healing nova</style> during the Teleporter event, <style=cIsHealing>healing</style> all nearby allies for <style=cIsHealing>50%</style> of their maximum health and <style=cIsUtility>restores one broken item</style>. Occurs <style=cIsHealing>1</style> <style=cStack>(+1 per stack)</style> times."); } private void RestoreConsumedItem(orig_Pulse orig, TeleporterHealNovaGeneratorMain self) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0069: 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_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0097: 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_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: 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_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: 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_0107: 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_0165: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: 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_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Expected I4, but got Unknown //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Expected I4, but got Unknown //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); try { foreach (CharacterBody readOnlyInstances in CharacterBody.readOnlyInstancesList) { if (!Object.op_Implicit((Object)(object)readOnlyInstances.teamComponent) || (int)readOnlyInstances.teamComponent.teamIndex != 1) { continue; } Inventory inventory = readOnlyInstances.inventory; Dictionary<ItemIndex, ItemIndex> dictionary = new Dictionary<ItemIndex, ItemIndex>(); try { dictionary[Items.FragileDamageBonusConsumed.itemIndex] = Items.FragileDamageBonus.itemIndex; dictionary[Items.HealingPotionConsumed.itemIndex] = Items.HealingPotion.itemIndex; dictionary[Items.ExtraLifeConsumed.itemIndex] = Items.ExtraLife.itemIndex; dictionary[Items.LowerPricedChestsConsumed.itemIndex] = Items.LowerPricedChests.itemIndex; dictionary[Items.TeleportOnLowHealthConsumed.itemIndex] = Items.TeleportOnLowHealth.itemIndex; dictionary[Items.ExtraLifeVoidConsumed.itemIndex] = Items.ExtraLifeVoid.itemIndex; dictionary[Items.RegeneratingScrapConsumed.itemIndex] = Items.RegeneratingScrap.itemIndex; } catch (Exception ex) { Log.Error("Error building item map: " + ex); break; } List<(string, int)> list = new List<(string, int)>(); foreach (KeyValuePair<ItemIndex, ItemIndex> item in dictionary) { int itemCount = inventory.GetItemCount(item.Key); for (int i = 0; i < itemCount; i++) { list.Add(("item", (int)item.Key)); } } if (inventory.GetEquipmentIndex() == Equipment.BossHunterConsumed.equipmentIndex) { list.Add(("equipment", (int)Equipment.BossHunterConsumed.equipmentIndex)); } (string, int) tuple = list[Random.Range(0, list.Count)]; if (tuple.Item1 == "item") { ItemIndex val = (ItemIndex)tuple.Item2; ItemIndex val2 = dictionary[val]; inventory.RemoveItem(val, 1); inventory.GiveItem(val2, 1); Chat.AddMessage("Restored item: " + Language.GetString(ItemCatalog.GetItemDef(val2).nameToken)); } else if (tuple.Item1 == "equipment") { inventory.SetEquipmentIndex(Equipment.BossHunter.equipmentIndex); Chat.AddMessage("Restored equipment"); } } } catch (Exception ex2) { Debug.LogError((object)("[Redemption] Static init crash: " + ex2.Message + "\n " + ex2.StackTrace)); } } } public class InputMonitor : MonoBehaviour { public void Update() { } } 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); } } }