Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of Artifact of Eternity v1.0.1
plugins/ArtifactOfEternity.dll
Decompiled 3 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HG.Reflection; using Microsoft.CodeAnalysis; using ReviveAPI; using RoR2; using RoR2.ContentManagement; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ArtifactOfEternity")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("ArtifactOfEternity")] [assembly: AssemblyTitle("ArtifactOfEternity")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] [module: UnverifiableCode] 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 ArtifactOfEternity { [Serializable] [BepInPlugin("com.brynzananas.artifactofeternity", "Artifact Of Eternity", "1.0.0")] public class ArtifactOfEternity : BaseUnityPlugin { [CompilerGenerated] private static class <>O { public static CanReviveDelegate <0>__EternityCondition; public static OnReviveDelegate <1>__OnEternityRevive; } public const string ModGuid = "com.brynzananas.artifactofeternity"; public const string ModName = "Artifact Of Eternity"; public const string ModVer = "1.0.0"; public static AssetBundle assetBundle; public static ArtifactDef artifactDef; public static int eternityCount; public static bool messageDisplayed; public static bool takeItem; public void Awake() { //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: Expected O, but got Unknown //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown object obj = <>O.<0>__EternityCondition; if (obj == null) { CanReviveDelegate val = EternityCondition; <>O.<0>__EternityCondition = val; obj = (object)val; } object obj2 = <>O.<1>__OnEternityRevive; if (obj2 == null) { OnReviveDelegate val2 = OnEternityRevive; <>O.<1>__OnEternityRevive = val2; obj2 = (object)val2; } ReviveAPI.AddCustomRevive((CanReviveDelegate)obj, (OnReviveDelegate)obj2); assetBundle = AssetBundle.LoadFromFileAsync(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "assetbundles", "artifactofeternityassets")).assetBundle; artifactDef = assetBundle.LoadAsset<ArtifactDef>("Assets/CaeliImperium/Artifacts/ArtifactOfEternity.asset"); ContentPacks.artifacts.Add(artifactDef); ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); RoR2Application.onLoadFinished = (Action)Delegate.Combine(RoR2Application.onLoadFinished, new Action(AddLanguageTokens)); } private void AddLanguageTokens() { AddLanguageToken(artifactDef.nameToken, "Artifact of Eternity"); AddLanguageToken(artifactDef.descriptionToken, "Players revive infinitely."); AddLanguageToken(artifactDef.nameToken, "Артифакт вечности", "ru"); AddLanguageToken(artifactDef.descriptionToken, "Игроки возрождаются бесконечно.", "ru"); AddLanguageToken("CI_ARTIFACT_ETERNITY_MESSAGE", "It's eternity in here..."); AddLanguageToken("CI_ARTIFACT_ETERNITY_MESSAGE", "Здесь целая вечность...", "ru"); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)new ContentPacks()); } private static bool EternityCondition(CharacterMaster characterMaster) { return RunArtifactManager.instance.IsArtifactEnabled(artifactDef) && Object.op_Implicit((Object)(object)characterMaster.playerCharacterMasterController); } private static void OnEternityRevive(CharacterMaster characterMaster) { if (!messageDisplayed) { eternityCount++; if (eternityCount > 100) { messageDisplayed = true; Chat.AddMessage(Language.GetString("CI_ARTIFACT_ETERNITY_MESSAGE")); } } if (!takeItem) { return; } Inventory inventory = characterMaster.inventory; if ((Object)(object)inventory == (Object)null) { return; } List<ItemDef> list = new List<ItemDef>(); int num = 0; for (int i = 0; i < ItemCatalog.itemCount; i++) { int num2 = inventory.itemStacks[i]; if (num2 <= 0) { continue; } ItemDef itemDef = ItemCatalog.GetItemDef((ItemIndex)i); if (itemDef.canRemove) { for (int j = 0; j < num2; j++) { list.Add(itemDef); num++; } } } if (num > 0) { ItemDef val = list[Random.Range(0, num)]; inventory.RemoveItem(val, 1); } } public static void AddLanguageToken(string token, string output, string language) { Dictionary<string, string> dictionary = (Language.languagesByName.ContainsKey(language) ? Language.languagesByName[language].stringsByToken : null); Debug.Log((object)dictionary); if (dictionary != null) { if (dictionary.ContainsKey(token)) { dictionary[token] = output; } else { dictionary.Add(token, output); } } } public static void AddLanguageToken(string token, string output) { AddLanguageToken(token, output, "en"); } } public class ContentPacks : IContentPackProvider { [CompilerGenerated] private sealed class <FinalizeAsync>d__4 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public FinalizeAsyncArgs args; public ContentPacks <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FinalizeAsync>d__4(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; args.ReportProgress(1f); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <GenerateContentPackAsync>d__5 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public GetContentPackAsyncArgs args; public ContentPacks <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <GenerateContentPackAsync>d__5(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; ContentPack.Copy(<>4__this.contentPack, args.output); args.ReportProgress(1f); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <LoadStaticContentAsync>d__6 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LoadStaticContentAsyncArgs args; public ContentPacks <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LoadStaticContentAsync>d__6(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; <>4__this.contentPack.identifier = <>4__this.identifier; <>4__this.contentPack.artifactDefs.Add(artifacts.ToArray()); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } internal ContentPack contentPack = new ContentPack(); public static List<ArtifactDef> artifacts = new List<ArtifactDef>(); public string identifier => "com.brynzananas.artifactofeternity.ContentProvider"; [IteratorStateMachine(typeof(<FinalizeAsync>d__4))] public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <FinalizeAsync>d__4(0) { <>4__this = this, args = args }; } [IteratorStateMachine(typeof(<GenerateContentPackAsync>d__5))] public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <GenerateContentPackAsync>d__5(0) { <>4__this = this, args = args }; } [IteratorStateMachine(typeof(<LoadStaticContentAsync>d__6))] public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LoadStaticContentAsync>d__6(0) { <>4__this = this, args = args }; } } }