Decompiled source of DiluvianArtifact v1.2.0
plugins/DiluvianArtifact/DiluvianArtifact.dll
Decompiled 3 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using EntityStates.BrotherHaunt; using EntityStates.LunarExploderMonster; using EntityStates.VagrantMonster; using IL.RoR2; using Mono.Cecil.Cil; using MonoMod.Cil; using On.EntityStates.BrotherHaunt; using On.RoR2; using On.RoR2.UI; using RoR2; using RoR2.ContentManagement; using RoR2.Navigation; using RoR2.Projectile; using RoR2.UI; using TMPro; using TPDespair.DiluvianArtifact.Properties; using UnityEngine; using UnityEngine.Networking; [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 = "")] [assembly: AssemblyCompany("DiluvianArtifact")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("DiluvianArtifact")] [assembly: AssemblyTitle("DiluvianArtifact")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace TPDespair.DiluvianArtifact { public class DiluvianArtifactContent : IContentPackProvider { public static class Artifacts { public static ArtifactDef Diluvifact; public static ArtifactDef ZetEclifact; public static ArtifactDef ZetUnstabifact; public static List<ArtifactDef> artifactDefs = new List<ArtifactDef>(); public static void Create() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) if (DiluvianArtifactPlugin.DiluvifactEnable.Value == 1) { Diluvifact = ScriptableObject.CreateInstance<ArtifactDef>(); Diluvifact.cachedName = "ARTIFACT_DILUVIFACT"; Diluvifact.nameToken = "ARTIFACT_DILUVIFACT_NAME"; Diluvifact.descriptionToken = "ARTIFACT_DILUVIFACT_DESC"; Diluvifact.smallIconSelectedSprite = DiluvianArtifactPlugin.CreateSprite(Resources.zetdiluvianabstract_selected, Color.magenta); Diluvifact.smallIconDeselectedSprite = DiluvianArtifactPlugin.CreateSprite(Resources.zetdiluvianabstract_deselected, Color.gray); artifactDefs.Add(Diluvifact); } if (DiluvianArtifactPlugin.UnstabifactEnable.Value == 1) { ZetUnstabifact = ScriptableObject.CreateInstance<ArtifactDef>(); ZetUnstabifact.cachedName = "ARTIFACT_ZETUNSTABIFACT"; ZetUnstabifact.nameToken = "ARTIFACT_ZETUNSTABIFACT_NAME"; ZetUnstabifact.descriptionToken = "ARTIFACT_ZETUNSTABIFACT_DESC"; ZetUnstabifact.smallIconSelectedSprite = DiluvianArtifactPlugin.CreateSprite(Resources.zetunstable_selected, Color.magenta); ZetUnstabifact.smallIconDeselectedSprite = DiluvianArtifactPlugin.CreateSprite(Resources.zetunstable_deselected, Color.gray); artifactDefs.Add(ZetUnstabifact); } if (DiluvianArtifactPlugin.EclifactEnable.Value == 1) { ZetEclifact = ScriptableObject.CreateInstance<ArtifactDef>(); ZetEclifact.cachedName = "ARTIFACT_ZETECLIFACT"; ZetEclifact.nameToken = "ARTIFACT_ZETECLIFACT_NAME"; ZetEclifact.descriptionToken = "ARTIFACT_ZETECLIFACT_DESC"; ZetEclifact.smallIconSelectedSprite = DiluvianArtifactPlugin.CreateSprite(Resources.zeteclipse_selected, Color.magenta); ZetEclifact.smallIconDeselectedSprite = DiluvianArtifactPlugin.CreateSprite(Resources.zeteclipse_deselected, Color.gray); artifactDefs.Add(ZetEclifact); } } } public static class Buffs { public static BuffDef ZetLunarBleed; public static List<BuffDef> buffDefs = new List<BuffDef>(); public static void Create() { //IL_0041: 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) if (DiluvianArtifactPlugin.UnstabifactEnable.Value > 0) { ZetLunarBleed = ScriptableObject.CreateInstance<BuffDef>(); ((Object)ZetLunarBleed).name = "ZetLunarBleed"; ZetLunarBleed.buffColor = new Color(0.3f, 0.6f, 1f); ZetLunarBleed.canStack = true; ZetLunarBleed.isDebuff = true; ZetLunarBleed.iconSprite = LegacyResourcesAPI.Load<BuffDef>("BuffDefs/Bleeding").iconSprite; buffDefs.Add(ZetLunarBleed); } } } public ContentPack contentPack = new ContentPack(); public string identifier => "DiluvianArtifactContent"; public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { Artifacts.Create(); Buffs.Create(); contentPack.artifactDefs.Add(Artifacts.artifactDefs.ToArray()); contentPack.buffDefs.Add(Buffs.buffDefs.ToArray()); args.ReportProgress(1f); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(contentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } } [BepInPlugin("com.TPDespair.DiluvianArtifact", "DiluvianArtifact", "1.2.0")] public class DiluvianArtifactPlugin : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_TokenIsRegistered <>9__53_0; public static hook_GetString_string <>9__53_1; internal bool <LanguageOverride>b__53_0(orig_TokenIsRegistered orig, Language self, string token) { if (token != null) { if (TriggerSyzygyText() && SyzygyTokens.ContainsKey(token)) { return true; } if (LangTokens.ContainsKey(token)) { return true; } } return orig.Invoke(self, token); } internal string <LanguageOverride>b__53_1(orig_GetString_string orig, string token) { if (token != null) { if (TriggerSyzygyText() && SyzygyTokens.ContainsKey(token)) { return SyzygyTokens[token]; } if (LangTokens.ContainsKey(token)) { return LangTokens[token]; } } return orig.Invoke(token); } } public const string ModVer = "1.2.0"; public const string ModName = "DiluvianArtifact"; public const string ModGuid = "com.TPDespair.DiluvianArtifact"; public static Dictionary<string, string> LangTokens = new Dictionary<string, string>(); public static Dictionary<string, string> SyzygyTokens = new Dictionary<string, string>(); public static ConfigEntry<int> DiluvifactEnable { get; set; } public static ConfigEntry<bool> SyzygyText { get; set; } public static ConfigEntry<bool> SyzygyHideScore { get; set; } public static ConfigEntry<float> DiluvifactDifficulty { get; set; } public static ConfigEntry<bool> DiluvifactAntiHeal { get; set; } public static ConfigEntry<int> UnstabifactEnable { get; set; } public static ConfigEntry<bool> UnstabifactDisplayDifficulty { get; set; } public static ConfigEntry<float> UnstabifactBaseTimer { get; set; } public static ConfigEntry<float> UnstabifactPhaseTimer { get; set; } public static ConfigEntry<int> EclifactEnable { get; set; } public void Awake() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown RoR2Application.isModded = true; NetworkModCompatibilityHelper.networkModList = NetworkModCompatibilityHelper.networkModList.Append("com.TPDespair.DiluvianArtifact:1.2.0"); ConfigSetup(((BaseUnityPlugin)this).Config); ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); LanguageOverride(); Diluvifact.Init(); ZetUnstabifact.Init(); ZetEclifact.Init(); RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(LateSetup)); } public void FixedUpdate() { InstabilityController.OnFixedUpdate(); } private static void LateSetup() { Diluvifact.LateSetup(); ZetUnstabifact.LateSetup(); } private static void ConfigSetup(ConfigFile Config) { DiluvifactEnable = Config.Bind<int>("Artifacts", "diluvifactEnable", 1, "Artifact of Diluvian. 0 = Disabled, 1 = Artifact Available, 2 = Always Active"); SyzygyText = Config.Bind<bool>("Artifacts", "syzygyText", true, "Diluvian and Eclipse 8 change some text."); SyzygyHideScore = Config.Bind<bool>("Artifacts", "syzygyHideScore", false, "Diluvian and Eclipse 8 hides scores on run report."); DiluvifactDifficulty = Config.Bind<float>("Artifacts", "diluvifactDifficultyMult", 1.2f, "Diluvian difficulty multiplier. Set to 1 or lower to disable."); DiluvifactAntiHeal = Config.Bind<bool>("Artifacts", "diluvifactAntiHeal", true, "Diluvian causes BloodShrines to disable healing for 8 seconds."); UnstabifactEnable = Config.Bind<int>("Artifacts", "unstabifactEnable", 1, "Artifact of Instability. 0 = Disabled, 1 = Artifact Available, 2 = Always Active"); UnstabifactDisplayDifficulty = Config.Bind<bool>("Artifacts", "unstabifactDisplayDifficulty", false, "Show Difficulty of Instability on HUD."); UnstabifactBaseTimer = Config.Bind<float>("Artifacts", "unstabifactBaseTime", 360f, "Instability base timer. Timer for first stage of lunar storm."); UnstabifactPhaseTimer = Config.Bind<float>("Artifacts", "unstabifactPhaseTime", 60f, "Instability phase timer. Timer for each phase of lunar storm after the first."); EclifactEnable = Config.Bind<int>("Artifacts", "eclifactEnable", 1, "Artifact of the Eclipse. 0 = Disabled, 1 = Artifact Available, 2 = Always Active"); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)new DiluvianArtifactContent()); } public static Sprite CreateSprite(byte[] resourceBytes, Color fallbackColor) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) Texture2D val = new Texture2D(32, 32, (TextureFormat)4, false); try { if (resourceBytes == null) { FillTexture(val, fallbackColor); } else { ImageConversion.LoadImage(val, resourceBytes, false); val.Apply(); CleanAlpha(val); } } catch (Exception ex) { Debug.LogError((object)ex.ToString()); FillTexture(val, fallbackColor); } return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(31f, 31f)); } public static Texture2D FillTexture(Texture2D tex, Color color) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) Color[] pixels = tex.GetPixels(); for (int i = 0; i < pixels.Length; i++) { pixels[i] = color; } tex.SetPixels(pixels); tex.Apply(); return tex; } public static Texture2D CleanAlpha(Texture2D tex) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) Color[] pixels = tex.GetPixels(); for (int i = 0; i < pixels.Length; i++) { if (pixels[i].a < 0.05f) { pixels[i] = Color.clear; } } tex.SetPixels(pixels); tex.Apply(); return tex; } private static void LanguageOverride() { //IL_0015: 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_0020: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown object obj = <>c.<>9__53_0; if (obj == null) { hook_TokenIsRegistered val = delegate(orig_TokenIsRegistered orig, Language self, string token) { if (token != null) { if (TriggerSyzygyText() && SyzygyTokens.ContainsKey(token)) { return true; } if (LangTokens.ContainsKey(token)) { return true; } } return orig.Invoke(self, token); }; <>c.<>9__53_0 = val; obj = (object)val; } Language.TokenIsRegistered += (hook_TokenIsRegistered)obj; object obj2 = <>c.<>9__53_1; if (obj2 == null) { hook_GetString_string val2 = delegate(orig_GetString_string orig, string token) { if (token != null) { if (TriggerSyzygyText() && SyzygyTokens.ContainsKey(token)) { return SyzygyTokens[token]; } if (LangTokens.ContainsKey(token)) { return LangTokens[token]; } } return orig.Invoke(token); }; <>c.<>9__53_1 = val2; obj2 = (object)val2; } Language.GetString_string += (hook_GetString_string)obj2; } private static bool TriggerSyzygyText() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 if (!SyzygyText.Value) { return false; } if (Object.op_Implicit((Object)(object)Run.instance) && Diluvifact.Enabled) { if ((int)Run.instance.selectedDifficulty >= 10) { return true; } if (ZetEclifact.Enabled) { return true; } } return false; } public static void RegisterLanguageToken(string token, string text) { if (!LangTokens.ContainsKey(token)) { LangTokens.Add(token, text); } else { LangTokens[token] = text; } } public static void RegisterSyzygyToken(string token, string text) { if (!SyzygyTokens.ContainsKey(token)) { SyzygyTokens.Add(token, text); } else { SyzygyTokens[token] = text; } } } public static class Diluvifact { private static BodyIndex artifactShellBodyIndex = (BodyIndex)(-1); private static BodyIndex goldenTitanBodyIndex = (BodyIndex)(-1); private static int state = 0; public static bool Enabled { get { if (state < 1) { return false; } if (state > 1) { return true; } if (Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled(DiluvianArtifactContent.Artifacts.Diluvifact)) { return true; } return false; } } private static void EnableEffects() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown Run.RecalculateDifficultyCoefficentInternal += new Manipulator(DifficultyHook); HealthComponent.Heal += new hook_Heal(HealMultHook); HealthComponent.TakeDamageProcess += new Manipulator(BlockChanceHook); CharacterBody.RecalculateStats += new hook_RecalculateStats(OneshotHook); CombatDirector.AttemptSpawnOnTarget += new Manipulator(EliteCostHook); SetStateOnHurt.Start += new hook_Start(HitStunHook); CharacterBody.RecalculateStats += new hook_RecalculateStats(MonsterRegenHook); ShrineBloodBehavior.AddShrineStack += new Manipulator(BloodShrineHook); } private static void DisableEffects() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown Run.RecalculateDifficultyCoefficentInternal -= new Manipulator(DifficultyHook); HealthComponent.Heal -= new hook_Heal(HealMultHook); HealthComponent.TakeDamageProcess -= new Manipulator(BlockChanceHook); CharacterBody.RecalculateStats -= new hook_RecalculateStats(OneshotHook); CombatDirector.AttemptSpawnOnTarget -= new Manipulator(EliteCostHook); SetStateOnHurt.Start -= new hook_Start(HitStunHook); CharacterBody.RecalculateStats -= new hook_RecalculateStats(MonsterRegenHook); ShrineBloodBehavior.AddShrineStack -= new Manipulator(BloodShrineHook); } private static void OnArtifactEnabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef) { if ((Object)(object)artifactDef == (Object)(object)DiluvianArtifactContent.Artifacts.Diluvifact) { EnableEffects(); } } private static void OnArtifactDisabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef) { if ((Object)(object)artifactDef == (Object)(object)DiluvianArtifactContent.Artifacts.Diluvifact) { DisableEffects(); } } internal static void Init() { //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Expected O, but got Unknown //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown state = DiluvianArtifactPlugin.DiluvifactEnable.Value; if (state >= 1) { DiluvianArtifactPlugin.RegisterLanguageToken("ARTIFACT_DILUVIFACT_NAME", "Artifact of Diluvian"); DiluvianArtifactPlugin.RegisterLanguageToken("ARTIFACT_DILUVIFACT_DESC", "Enables all Diluvian modifiers.\n" + GetDifficultyMultText() + "\n<style=cStack>>Ally Healing: <style=cDeath>-20%</style>\n>Ally Block Chance: <style=cDeath>Halved</style>\n>Oneshot Protection: <style=cDeath>Disabled</style>\n>Elite Cost: <style=cDeath>-20%</style>\n>Enemies <style=cDeath>cannot be stunned</style> from damage taken.\n>Enemies <style=cDeath>regenerate 2% HP/s</style> outside of combat." + GetBloodShrineText() + "</style>"); SetupSyzygyTokens(); if (state == 1) { RunArtifactManager.onArtifactEnabledGlobal += new ArtifactStateChangeDelegate(OnArtifactEnabled); RunArtifactManager.onArtifactDisabledGlobal += new ArtifactStateChangeDelegate(OnArtifactDisabled); } else { EnableEffects(); } } } private static string GetDifficultyMultText() { float value = DiluvianArtifactPlugin.DiluvifactDifficulty.Value; if (value > 1f) { return "\n<style=cStack>>Difficulty Multiplier: <style=cDeath>+" + ((value - 1f) * 100f).ToString("0.##") + "%</style>"; } return ""; } private static string GetBloodShrineText() { if (DiluvianArtifactPlugin.DiluvifactAntiHeal.Value) { return "\n>Blood Shrines <style=cDeath>disable healing</style> for <style=cDeath>8s</style>."; } return ""; } internal static void LateSetup() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: 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_001a: Unknown result type (might be due to invalid IL or missing references) artifactShellBodyIndex = BodyCatalog.FindBodyIndex("ArtifactShellBody"); goldenTitanBodyIndex = BodyCatalog.FindBodyIndex("TitanGoldBody"); } private static void SetupSyzygyTokens() { DiluvianArtifactPlugin.RegisterSyzygyToken("MSOBELISK_CONTEXT", "Escape the madness."); DiluvianArtifactPlugin.RegisterSyzygyToken("MSOBELISK_CONTEXT_CONFIRMATION", "Take the cowards way out."); DiluvianArtifactPlugin.RegisterSyzygyToken("COST_PERCENTHEALTH_FORMAT", "?"); DiluvianArtifactPlugin.RegisterSyzygyToken("SHRINE_BLOOD_USE_MESSAGE_2P", "<color=#c66>Look, it hurt itself. </color><style=cShrine>You have gained {1} gold.</color>"); DiluvianArtifactPlugin.RegisterSyzygyToken("SHRINE_BLOOD_USE_MESSAGE", "<color=#c66>{0} has shown us their blood. </color><style=cShrine>They gained {1} gold.</color>"); DiluvianArtifactPlugin.RegisterSyzygyToken("SHRINE_HEALING_USE_MESSAGE_2P", "<color=#6c6>A beacon? To the woods. </color><color=#96c>Primitive. Effective.</color>"); DiluvianArtifactPlugin.RegisterSyzygyToken("SHRINE_HEALING_USE_MESSAGE", "<color=#6c6>A haven for {0}. </color><color=#96c>Curious.</color>"); DiluvianArtifactPlugin.RegisterSyzygyToken("SHRINE_BOSS_BEGIN_TRIAL", "<color=#c66>Time to see what their mettle is worth.</color>"); DiluvianArtifactPlugin.RegisterSyzygyToken("SHRINE_BOSS_END_TRIAL", "<color=#96c> And our test goes on.</color>"); DiluvianArtifactPlugin.RegisterSyzygyToken("SHRINE_RESTACK_USE_MESSAGE_2P", "<color=#96c>Refined. Sharpened. Aligned.</color>"); DiluvianArtifactPlugin.RegisterSyzygyToken("SHRINE_RESTACK_USE_MESSAGE", "<color=#96c>{0} is one step closer.</color>"); DiluvianArtifactPlugin.RegisterSyzygyToken("SHRINE_COMBAT_USE_MESSAGE_2P", "<color=#c66>The threat widens. The struggle tightens.</color>"); DiluvianArtifactPlugin.RegisterSyzygyToken("SHRINE_COMBAT_USE_MESSAGE", "<color=#c66>{0} is acting odd. Inviting {1}s, vexing.</color>"); DiluvianArtifactPlugin.RegisterSyzygyToken("PAUSE_RESUME", "Continue"); DiluvianArtifactPlugin.RegisterSyzygyToken("PAUSE_SETTINGS", "Calibrate your senses"); DiluvianArtifactPlugin.RegisterSyzygyToken("PAUSE_QUIT_TO_MENU", "Stop the simulation"); DiluvianArtifactPlugin.RegisterSyzygyToken("PAUSE_QUIT_TO_DESKTOP", "End the universe"); DiluvianArtifactPlugin.RegisterSyzygyToken("QUIT_RUN_CONFIRM_DIALOG_BODY_SINGLEPLAYER", "Boring."); DiluvianArtifactPlugin.RegisterSyzygyToken("QUIT_RUN_CONFIRM_DIALOG_BODY_CLIENT", "A figment of our imagination. It will continue without you."); DiluvianArtifactPlugin.RegisterSyzygyToken("QUIT_RUN_CONFIRM_DIALOG_BODY_HOST", "With you, this world ends. The others aren't real."); DiluvianArtifactPlugin.RegisterSyzygyToken("OBJECTIVE_FIND_TELEPORTER", "Continue the simulation."); DiluvianArtifactPlugin.RegisterSyzygyToken("OBJECTIVE_DEFEAT_BOSS", "Complete the Act!"); DiluvianArtifactPlugin.RegisterSyzygyToken("STAT_KILLER_NAME_FORMAT", "Simulation ended by: <color=#FFFF7F>{0}</color>."); if (DiluvianArtifactPlugin.SyzygyHideScore.Value) { DiluvianArtifactPlugin.RegisterSyzygyToken("STAT_POINTS_FORMAT", ""); DiluvianArtifactPlugin.RegisterSyzygyToken("STAT_TOTAL", ""); } DiluvianArtifactPlugin.RegisterSyzygyToken("STATNAME_TOTALTIMEALIVE", "Screentime"); DiluvianArtifactPlugin.RegisterSyzygyToken("STATNAME_TOTALDEATHS", "Disruptions"); DiluvianArtifactPlugin.RegisterSyzygyToken("STATNAME_HIGHESTLEVEL", "Evolution"); DiluvianArtifactPlugin.RegisterSyzygyToken("STATNAME_TOTALGOLDCOLLECTED", "Wealth gotten"); DiluvianArtifactPlugin.RegisterSyzygyToken("STATNAME_TOTALITEMSCOLLECTED", "Props worn"); DiluvianArtifactPlugin.RegisterSyzygyToken("STATNAME_TOTALSTAGESCOMPLETED", "Acts progressed"); DiluvianArtifactPlugin.RegisterSyzygyToken("STATNAME_TOTALPURCHASES", "Assets acquired"); DiluvianArtifactPlugin.RegisterSyzygyToken("GAME_RESULT_LOST", "DISAPPOINTING."); DiluvianArtifactPlugin.RegisterSyzygyToken("GAME_RESULT_WON", "TIME REPEATS."); DiluvianArtifactPlugin.RegisterSyzygyToken("GAME_RESULT_UNKNOWN", "WELCOME."); } private static void DifficultyHook(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 9) })) { val.Index += 1; val.EmitDelegate<Func<float>>((Func<float>)(() => DiluvianArtifactPlugin.DiluvifactDifficulty.Value)); val.Emit(OpCodes.Dup); val.Emit(OpCodes.Ldloc, 7); val.Emit(OpCodes.Mul); val.Emit(OpCodes.Stloc, 7); val.Emit(OpCodes.Ldloc, 8); val.Emit(OpCodes.Mul); val.Emit(OpCodes.Stloc, 8); } else { Debug.LogWarning((object)"DifficultyHook Failed"); } } private static float HealMultHook(orig_Heal orig, HealthComponent self, float amount, ProcChainMask procChainMask, bool nonRegen) { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Invalid comparison between Unknown and I4 //IL_0034: 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) if (NetworkServer.active && Object.op_Implicit((Object)(object)self.body) && (int)self.body.teamComponent.teamIndex == 1 && (self.currentEquipmentIndex != Equipment.LunarPotion.equipmentIndex || ((ProcChainMask)(ref procChainMask)).HasProc((ProcType)11))) { amount *= 0.8f; } return orig.Invoke(self, amount, procChainMask, nonRegen); } private static void BlockChanceHook(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00b3: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.HealthComponent/ItemCounts", "bear"), (Instruction x) => ILPatternMatchingExt.MatchConvR4(x), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchCall(x, "RoR2.Util", "ConvertAmplificationPercentageIntoReductionPercentage") })) { val.Index += 4; val.Emit(OpCodes.Ldarg, 0); val.EmitDelegate<Func<float, HealthComponent, float>>((Func<float, HealthComponent, float>)delegate(float chance, HealthComponent healthComponent) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Invalid comparison between Unknown and I4 if (Object.op_Implicit((Object)(object)healthComponent.body) && (int)healthComponent.body.teamComponent.teamIndex == 1) { chance *= 0.5f; } return chance; }); } else { Debug.LogWarning((object)"BlockChanceHook Failed"); } } private static void OneshotHook(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); self.hasOneShotProtection = false; self.oneShotProtectionFraction = 0f; } private static void EliteCostHook(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchConvR4(x), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<CombatDirector>(x, "currentActiveEliteTier"), (Instruction x) => ILPatternMatchingExt.MatchLdfld(x, typeof(EliteTierDef).GetField("costMultiplier")) })) { val.Index += 4; val.EmitDelegate<Func<float, float>>((Func<float, float>)delegate(float mult) { if (Object.op_Implicit((Object)(object)Run.instance)) { float num = mult - 1f; mult -= num * 0.2f; } return mult; }); } else { Debug.LogWarning((object)"EliteCostHook Failed"); } } private static void HitStunHook(orig_Start orig, SetStateOnHurt self) { orig.Invoke(self); self.canBeHitStunned = false; } private static void MonsterRegenHook(orig_RecalculateStats orig, CharacterBody self) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Invalid comparison between Unknown and I4 //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (self.outOfDanger && (int)self.teamComponent.teamIndex == 2 && !ZetUnstabifact.HasInvulnBuff(self) && self.bodyIndex != artifactShellBodyIndex && self.bodyIndex != goldenTitanBodyIndex) { self.regen += self.maxHealth * 0.02f; } } private static void BloodShrineHook(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 0) })) { val.Index += 1; val.Emit(OpCodes.Ldloc, 0); val.EmitDelegate<Action<CharacterBody>>((Action<CharacterBody>)delegate(CharacterBody self) { if (Object.op_Implicit((Object)(object)self) && DiluvianArtifactPlugin.DiluvifactAntiHeal.Value) { self.AddTimedBuff(Buffs.HealingDisabled, 8f); } }); } else { Debug.LogWarning((object)"BloodShrineHook Failed"); } } } public static class InstabilityController { private class Blocker { internal float timer = 5f; internal Vector3 position; } internal static class Display { private static GameObject displayPanel; private static GameObject displayTimeText; private static HGTextMeshProUGUI timeTextMesh; private static GameObject displayDiffText; private static HGTextMeshProUGUI diffTextMesh; internal static bool sendSyncTime = false; internal static float syncTime = 0f; internal static float difficulty = 0f; private static string currentTimeText = ""; private static string currentDiffText = ""; private static float timeSinceSync = 0f; internal static void ResetServerSyncTime() { //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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown float runStopwatch = Run.instance.GetRunStopwatch(); timeSinceSync = 0f; EffectManager.SpawnEffect((EffectIndex)1758000, new EffectData { genericUInt = 2u, genericFloat = runStopwatch }, true); } internal static void SetServerSyncTime(float offset) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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) //IL_0040: Expected O, but got Unknown if (sendSyncTime) { float genericFloat = Run.instance.GetRunStopwatch() + offset; timeSinceSync = 0f; EffectManager.SpawnEffect((EffectIndex)1758000, new EffectData { genericUInt = 2u, genericFloat = genericFloat }, true); } } internal static void ServerSendSyncTime(float offset) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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) //IL_0040: Expected O, but got Unknown if (sendSyncTime) { float genericFloat = Run.instance.GetRunStopwatch() + offset; timeSinceSync = 0f; EffectManager.SpawnEffect((EffectIndex)1758000, new EffectData { genericUInt = 4u, genericFloat = genericFloat }, true); } } internal static void SetServerDifficulty(float value) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown EffectManager.SpawnEffect((EffectIndex)1758000, new EffectData { genericUInt = 3u, genericFloat = value }, true); } internal static void InitializeUI(HUD hud) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Expected O, but got Unknown //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) displayPanel = new GameObject("UnstabifactPanel"); RectTransform val = displayPanel.AddComponent<RectTransform>(); displayPanel.transform.SetParent(hud.gameModeUiInstance.transform); displayPanel.transform.SetAsLastSibling(); displayTimeText = new GameObject("UnstabifactTimeText"); RectTransform val2 = displayTimeText.AddComponent<RectTransform>(); timeTextMesh = displayTimeText.AddComponent<HGTextMeshProUGUI>(); displayTimeText.transform.SetParent(displayPanel.transform); displayDiffText = new GameObject("UnstabifactDiffText"); RectTransform val3 = displayDiffText.AddComponent<RectTransform>(); diffTextMesh = displayDiffText.AddComponent<HGTextMeshProUGUI>(); displayDiffText.transform.SetParent(displayPanel.transform); ((Transform)val).localPosition = new Vector3(0f, 0f, 0f); val.anchorMin = new Vector2(0f, 0f); val.anchorMax = new Vector2(0f, 0f); ((Transform)val).localScale = Vector3.one; val.pivot = new Vector2(0f, 1f); val.sizeDelta = new Vector2(80f, 40f); val.anchoredPosition = new Vector2(32f, 48f); ((Transform)val).eulerAngles = new Vector3(0f, 5f, 0f); ((Transform)val2).localPosition = Vector3.zero; val2.anchorMin = Vector2.zero; val2.anchorMax = Vector2.one; ((Transform)val2).localScale = Vector3.one; val2.sizeDelta = new Vector2(-12f, -12f); val2.anchoredPosition = Vector2.zero; ((TMP_Text)timeTextMesh).enableAutoSizing = false; ((TMP_Text)timeTextMesh).fontSize = 12f; ((TMP_Text)timeTextMesh).faceColor = Color32.op_Implicit(new Color(0.875f, 0.75f, 1f)); ((TMP_Text)timeTextMesh).alignment = (TextAlignmentOptions)4100; ((TMP_Text)timeTextMesh).richText = true; ((TMP_Text)timeTextMesh).SetText("", true); ((Transform)val3).localPosition = Vector3.zero; val3.anchorMin = Vector2.zero; val3.anchorMax = Vector2.one; ((Transform)val3).localScale = Vector3.one; val3.sizeDelta = new Vector2(-12f, -12f); val3.anchoredPosition = Vector2.zero; ((TMP_Text)diffTextMesh).enableAutoSizing = false; ((TMP_Text)diffTextMesh).fontSize = 10f; ((TMP_Text)diffTextMesh).faceColor = Color32.op_Implicit(new Color(0.65f, 0.65f, 0.65f)); ((TMP_Text)diffTextMesh).alignment = (TextAlignmentOptions)4097; ((TMP_Text)diffTextMesh).richText = true; ((TMP_Text)diffTextMesh).SetText("", true); } internal static void SyncTimer() { if (!(syncTime > 0f) || !Object.op_Implicit((Object)(object)Run.instance)) { return; } timeSinceSync += Time.fixedDeltaTime; if (!(timeSinceSync >= 10f)) { return; } float runStopwatch = Run.instance.GetRunStopwatch(); if (runStopwatch < syncTime) { float num = syncTime - runStopwatch; if (num >= 10f) { timeSinceSync = 0f; ServerSendSyncTime(num); } } } internal static void UpdateUI() { if ((Object)(object)timeTextMesh != (Object)null) { string text = ""; if (syncTime > 0f && Object.op_Implicit((Object)(object)Run.instance)) { float runStopwatch = Run.instance.GetRunStopwatch(); if (runStopwatch < syncTime) { float time = syncTime - runStopwatch; text = FormatTimer(time); } } if (text != currentTimeText) { currentTimeText = text; ((TMP_Text)timeTextMesh).SetText("<mspace=6.6>" + text + "</mspace>", true); } } if ((Object)(object)diffTextMesh != (Object)null) { string text2 = ""; float num = (DiluvianArtifactPlugin.UnstabifactDisplayDifficulty.Value ? difficulty : 0f); if (num > 0f) { text2 = FormatDifficulty(num); } if (text2 != currentDiffText) { currentDiffText = text2; ((TMP_Text)diffTextMesh).SetText("<mspace=5.5>" + text2 + "</mspace>", true); } } } private static string FormatTimer(float time) { time = Mathf.Ceil(time * 100f); float num; float num2; if (time >= 6000f) { num = Mathf.Floor(time / 6000f); num2 = Mathf.Floor(time % 6000f / 100f); return num + ":" + num2.ToString("00"); } num = Mathf.Floor(time / 100f); num2 = Mathf.Floor(time % 100f); return num + "." + num2.ToString("00"); } private static string FormatDifficulty(float value) { if (value < 10f) { return value.ToString("0.00"); } if (value < 100f) { return value.ToString("0.0"); } return Mathf.RoundToInt(difficulty).ToString(); } internal static void SetSyncTime(float time) { syncTime = time; } internal static void SetDifficulty(float value) { difficulty = value; } } public static class MeteorState { public static bool activated = false; public static float activation = 360f; public static bool activated2 = false; public static float activation2 = 600f; public static bool activated3 = false; public static float activation3 = 720f; private static int extraCharges = 0; private static float extraChargeTimer = 0f; private static float extraChargeInterval = 1f; private static float extraChargeFireChance = 0.05f; internal static MeteorStormController controller; internal static void StartStorm() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) GameObject val = Object.Instantiate<GameObject>(LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/MeteorStorm"), Vector3.zero, Quaternion.identity); controller = val.GetComponent<MeteorStormController>(); controller.ownerDamage = baseDamage; controller.waveCount = 9999999; NetworkServer.Spawn(((Component)controller).gameObject); } internal static void UpdateDamage() { if (Object.op_Implicit((Object)(object)controller)) { controller.ownerDamage = baseDamage; } } internal static void ResetState() { extraCharges = 0; extraChargeTimer = 0f; extraChargeInterval = 1f; extraChargeFireChance = 0.05f; } internal static void Hasten() { extraChargeInterval = 0.8f; extraChargeFireChance = 0.075f; } internal static void FixedUpdate() { if (enabled && activated && Object.op_Implicit((Object)(object)controller) && activated2) { extraChargeTimer -= Time.fixedDeltaTime; if (extraChargeTimer <= 0f) { extraChargeTimer += extraChargeInterval; extraCharges = Mathf.Min(extraCharges + 1, 10); } if (extraCharges > 0 && Random.value < extraChargeFireChance) { extraCharges--; MeteorActivePlayers(); } } } private static void MeteorActivePlayers() { //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Expected O, but got Unknown List<CharacterBody> list = new List<CharacterBody>(); ReadOnlyCollection<TeamComponent> teamMembers = TeamComponent.GetTeamMembers((TeamIndex)1); for (int i = 0; i < teamMembers.Count; i++) { CharacterBody body = teamMembers[i].body; if (Object.op_Implicit((Object)(object)body) && body.isPlayerControlled) { list.Add(body); } } if (list.Count <= 0) { return; } foreach (CharacterBody item in list) { HealthComponent healthComponent = item.healthComponent; if (Object.op_Implicit((Object)(object)healthComponent) && healthComponent.alive) { Meteor val = CreateMeteor(item); if (val.valid) { controller.meteorList.Add(val); EffectManager.SpawnEffect(controller.warningEffectPrefab, new EffectData { origin = val.impactPosition, scale = controller.blastRadius }, true); } } } } private static Meteor CreateMeteor(CharacterBody body) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0016: Unknown result type (might be due to invalid IL or missing references) //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_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: 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_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) Meteor val = new Meteor(); if (Object.op_Implicit((Object)(object)body)) { Vector3 nearbyGroundNodePosition = GetNearbyGroundNodePosition(body.corePosition); if (((Vector3)(ref nearbyGroundNodePosition)).sqrMagnitude > 1f) { val.impactPosition = nearbyGroundNodePosition; } else { val.impactPosition = body.corePosition; } Vector3 val2 = val.impactPosition + Vector3.up * 6f; Vector3 onUnitSphere = Random.onUnitSphere; onUnitSphere.y = -1f; RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(val2, onUnitSphere, ref val3, 12f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1)) { val.impactPosition = ((RaycastHit)(ref val3)).point; } else if (Physics.Raycast(val.impactPosition, Vector3.down, ref val3, float.PositiveInfinity, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1)) { val.impactPosition = ((RaycastHit)(ref val3)).point; } } else { val.valid = false; } val.startTime = Run.instance.time; return val; } } public static class FissureState { public static bool activated = false; public static float activation = 420f; public static bool activated2 = false; public static float activation2 = 540f; public static bool activated3 = false; public static float activation3 = 660f; private static int charges = 0; private static float chargeTimer = 0f; private static float chargeInterval = 0.125f; private static float chargeFireChance = 0.1f; private static int extraCharges = 0; private static float extraChargeTimer = 0f; private static float extraChargeInterval = 1f; private static float extraChargeFireChance = 0.05f; internal static void ResetState() { charges = 0; chargeTimer = 0f; extraCharges = 0; extraChargeTimer = 0f; extraChargeInterval = 1f; extraChargeFireChance = 0.05f; } internal static void Hasten() { extraChargeInterval = 0.8f; extraChargeFireChance = 0.075f; } internal static void FixedUpdate() { //IL_0080: 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_00a7: Unknown result type (might be due to invalid IL or missing references) if (!enabled || !activated) { return; } chargeTimer -= Time.fixedDeltaTime; if (chargeTimer <= 0f) { chargeTimer += chargeInterval; charges = Mathf.Min(charges + 1, 40); } if (charges > 0 && Random.value < chargeFireChance) { Vector3 position = FindFissureTarget(); if (((Vector3)(ref position)).sqrMagnitude > 1f) { charges--; FireFissure(position); } } if (activated2) { extraChargeTimer -= Time.fixedDeltaTime; if (extraChargeTimer <= 0f) { extraChargeTimer += extraChargeInterval; extraCharges = Mathf.Min(extraCharges + 1, 10); } if (extraCharges > 0 && Random.value < extraChargeFireChance) { extraCharges--; FissureActivePlayers(); } } } private static Vector3 FindFissureTarget() { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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) //IL_0043: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) NodeGraph groundNodes = SceneInfo.instance.groundNodes; if (Object.op_Implicit((Object)(object)groundNodes)) { List<NodeIndex> activeNodesForHullMaskWithFlagConditions = groundNodes.GetActiveNodesForHullMaskWithFlagConditions((HullMask)2, (NodeFlags)0, (NodeFlags)4); if (activeNodesForHullMaskWithFlagConditions.Count > 0) { NodeIndex val = activeNodesForHullMaskWithFlagConditions[Random.Range(0, activeNodesForHullMaskWithFlagConditions.Count - 1)]; Vector3 result = default(Vector3); groundNodes.GetNodePosition(val, ref result); return result; } } return Vector3.zero; } private static void FireFissure(Vector3 position) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) ProjectileManager.instance.FireProjectile(new FireProjectileInfo { projectilePrefab = fissurePrefab, owner = null, damage = baseDamage * 2f, position = position + Vector3.up * 3f, rotation = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f) }); } private static void FissureActivePlayers() { //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) List<CharacterBody> list = new List<CharacterBody>(); ReadOnlyCollection<TeamComponent> teamMembers = TeamComponent.GetTeamMembers((TeamIndex)1); for (int i = 0; i < teamMembers.Count; i++) { CharacterBody body = teamMembers[i].body; if (Object.op_Implicit((Object)(object)body) && body.isPlayerControlled) { list.Add(body); } } if (list.Count <= 0) { return; } foreach (CharacterBody item in list) { HealthComponent healthComponent = item.healthComponent; if (Object.op_Implicit((Object)(object)healthComponent) && healthComponent.alive) { Vector3 nearbyGroundNodePosition = GetNearbyGroundNodePosition(item.corePosition); if (((Vector3)(ref nearbyGroundNodePosition)).sqrMagnitude > 1f) { FireFissure(nearbyGroundNodePosition); } else { FireFissure(item.corePosition); } } } } } public static class ScorchState { public static bool activated = false; public static float activation = 480f; internal static void SpawnScorch(Vector3 position) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_004a: 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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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_0084: 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_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Expected O, but got Unknown Vector3 val = Quaternion.identity * Util.ApplySpread(Vector3.forward, 0f, 0f, 1f, 1f, 0f, 0f); FireProjectileInfo val2 = default(FireProjectileInfo); val2.projectilePrefab = scorchPrefab; val2.position = position; val2.rotation = Util.QuaternionSafeLookRotation(val); val2.owner = null; val2.damage = baseDamage * 1.5f; val2.crit = false; ProjectileManager.instance.FireProjectile(val2); if (Object.op_Implicit((Object)(object)deathExplosionEffect)) { EffectManager.SpawnEffect(deathExplosionEffect, new EffectData { origin = position, scale = 12.5f }, true); } } } public static class NovaState { private class Nova { private float stopwatch = 0f; private bool charge = false; internal bool fired = false; internal Vector3 position; private GameObject chargeVfxInstance; private GameObject areaIndicatorVfxInstance; internal void Update() { //IL_007a: Unknown result type (might be due to invalid IL or missing references) if (fired) { return; } stopwatch += Time.fixedDeltaTime; if (clearNovaList) { DestroyNovaVfx(); fired = true; } else if (stopwatch >= 7f) { DestroyNovaVfx(); fired = true; if (NetworkServer.active && enabled && activated) { FireNovaBlast(position); } } else if (stopwatch >= 5f && !charge) { SetupNovaVfx(); } } private void DestroyNovaVfx() { if (Object.op_Implicit((Object)(object)chargeVfxInstance)) { Object.Destroy((Object)(object)chargeVfxInstance); chargeVfxInstance = null; } if (Object.op_Implicit((Object)(object)areaIndicatorVfxInstance)) { Object.Destroy((Object)(object)areaIndicatorVfxInstance); areaIndicatorVfxInstance = null; } } private void SetupNovaVfx() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) charge = true; if (!Object.op_Implicit((Object)(object)chargeVfxInstance)) { chargeVfxInstance = Object.Instantiate<GameObject>(chargingEffectPrefab, position, Quaternion.identity); chargeVfxInstance.transform.localScale = Vector3.one * 0.125f; } if (!Object.op_Implicit((Object)(object)areaIndicatorVfxInstance)) { areaIndicatorVfxInstance = Object.Instantiate<GameObject>(areaIndicatorPrefab, position, Quaternion.identity); ObjectScaleCurve component = areaIndicatorVfxInstance.GetComponent<ObjectScaleCurve>(); component.timeMax = 2f; component.baseScale = Vector3.one * 25f; areaIndicatorVfxInstance.GetComponent<AnimateShaderAlpha>().timeMax = 2f; } } } public static bool activated = false; public static float activation = 480f; private static List<Nova> activeNova = new List<Nova>(); internal static bool clearNovaList = false; internal static void ServerSendNovaEffect(Vector3 position) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown EffectManager.SpawnEffect((EffectIndex)1758000, new EffectData { genericUInt = 1u, origin = position }, true); } internal static void FixedUpdate() { for (int i = 0; i < activeNova.Count; i++) { Nova nova = activeNova[i]; if (nova != null) { nova.Update(); if (nova.fired) { activeNova.RemoveAt(i); i--; } } } clearNovaList = false; } internal static void CreateNova(Vector3 position) { //IL_000c: 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) activeNova.Add(new Nova { position = position }); } private static void FireNovaBlast(Vector3 position) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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_0014: 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_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: 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) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: 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) new BlastAttack { attacker = null, inflictor = null, teamIndex = (TeamIndex)(-1), baseDamage = baseDamage * 3f, crit = false, baseForce = 0f, bonusForce = Vector3.zero, attackerFiltering = (AttackerFiltering)2, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)4194304), procCoefficient = 0f, position = position, radius = 12.5f }.Fire(); } } public static class LunarState { public static bool activated = false; public static float activation = 540f; public static bool activated2 = false; public static float activation2 = 720f; public static bool activated3 = false; public static float activation3 = 900f; private static int chimeraCount = 0; private static int chimeraLimit = 1; private static int failedSpawnAttempts = 0; private static float spawnInterval = 30f; private static float countStopwatch = 0f; private static float spawnStopwatch = 0f; private static float leashStopwatch = 0f; private static bool uberChimera = false; private static bool updateDelayed = false; internal static void ResetState(int count) { chimeraCount = GetActiveUberChimeraCount(); chimeraLimit = (RunArtifactManager.instance.IsArtifactEnabled(Artifacts.Swarms) ? (count * 2) : count); failedSpawnAttempts = 0; spawnInterval = 30f * timeFactor; countStopwatch = 0f; spawnStopwatch = ((chimeraCount >= chimeraLimit) ? 0f : spawnInterval); leashStopwatch = 0f; uberChimera = false; } internal static void DelayUpdate() { countStopwatch = 0f; leashStopwatch = 0f; updateDelayed = true; } internal static void FixedUpdate() { if (!enabled || !activated) { return; } if (updateDelayed || chimeraCount >= chimeraLimit) { countStopwatch += Time.fixedDeltaTime; if (countStopwatch >= 2.5f) { updateDelayed = false; countStopwatch = 0f; chimeraCount = GetActiveUberChimeraCount(); } } else { spawnStopwatch += Time.fixedDeltaTime; if (spawnStopwatch >= spawnInterval) { DelayUpdate(); spawnStopwatch = 0f; SummonUberChimera(); } } if (!updateDelayed && chimeraCount > 0) { leashStopwatch += Time.fixedDeltaTime; if (leashStopwatch >= 10f) { leashStopwatch = 0f; LeashUberChimera(); } } else { leashStopwatch = 0f; } } private static int GetActiveUberChimeraCount() { int num = 0; ReadOnlyCollection<TeamComponent> teamMembers = TeamComponent.GetTeamMembers((TeamIndex)2); for (int i = 0; i < teamMembers.Count; i++) { CharacterBody body = teamMembers[i].body; if (Object.op_Implicit((Object)(object)body) && IsUberChimera(body)) { num++; } } return num; } internal static bool IsUberChimera(CharacterBody body) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) if (body.bodyIndex != lunarChimeraBodyIndex) { return false; } Inventory inventory = body.inventory; if (Object.op_Implicit((Object)(object)inventory)) { if (inventory.currentEquipmentIndex != Equipment.AffixLunar.equipmentIndex) { return false; } if (inventory.GetItemCount(Items.ShieldOnly) > 0 && inventory.GetItemCount(Items.Knurl) > 0) { return true; } } return false; } private static void SummonUberChimera() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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_0033: 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) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)lunarChimeraSpawnCard)) { return; } CharacterBody randomControlledPlayer = GetRandomControlledPlayer(); if (!Object.op_Implicit((Object)(object)randomControlledPlayer)) { return; } DirectorPlacementRule val = new DirectorPlacementRule { placementMode = (PlacementMode)1, minDistance = 45f, maxDistance = 90f + Mathf.Min(30f * (float)failedSpawnAttempts, 90f), spawnOnTarget = randomControlledPlayer.transform }; DirectorSpawnRequest val2 = new DirectorSpawnRequest(lunarChimeraSpawnCard, val, RoR2Application.rng) { teamIndexOverride = (TeamIndex)2, ignoreTeamMemberLimit = true }; uberChimera = true; GameObject val3 = DirectorCore.instance.TrySpawnObject(val2); if (Object.op_Implicit((Object)(object)val3)) { failedSpawnAttempts = 0; } else { failedSpawnAttempts++; if (failedSpawnAttempts < 4) { spawnStopwatch = spawnInterval - 2.5f; } } uberChimera = false; } internal static void UberifyChimera(CharacterMaster master) { //IL_003c: Unknown result type (might be due to invalid IL or missing references) if (enabled && activated && uberChimera) { Inventory inventory = master.inventory; float num = damageFactor / 2f; inventory.SetEquipmentIndex(Equipment.AffixLunar.equipmentIndex); inventory.GiveItem(Items.ShieldOnly, 1); inventory.GiveItem(Items.Knurl, 1); inventory.GiveItem(Items.LunarBadLuck, 1); inventory.GiveItem(Items.BoostAttackSpeed, Mathf.RoundToInt(num)); inventory.GiveItem(Items.BoostDamage, Mathf.RoundToInt(3f * num)); inventory.GiveItem(Items.BoostHp, Mathf.RoundToInt(5f * num)); } } private static void LeashUberChimera() { //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008d: 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_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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_0104: Expected O, but got Unknown //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Expected O, but got Unknown //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) List<CharacterBody> list = new List<CharacterBody>(); ReadOnlyCollection<TeamComponent> teamMembers = TeamComponent.GetTeamMembers((TeamIndex)2); for (int i = 0; i < teamMembers.Count; i++) { CharacterBody body = teamMembers[i].body; if (Object.op_Implicit((Object)(object)body) && IsUberChimera(body) && !PlayerWithinRange(body.corePosition, 180f)) { list.Add(body); } } if (list.Count <= 0) { return; } SpawnCard val = ScriptableObject.CreateInstance<SpawnCard>(); val.hullSize = (HullClassification)0; val.nodeGraphType = (GraphType)0; val.prefab = LegacyResourcesAPI.Load<GameObject>("SpawnCards/HelperPrefab"); foreach (CharacterBody item in list) { CharacterBody randomControlledPlayer = GetRandomControlledPlayer(); if (!Object.op_Implicit((Object)(object)randomControlledPlayer)) { continue; } DirectorPlacementRule val2 = new DirectorPlacementRule { placementMode = (PlacementMode)1, minDistance = 45f, maxDistance = 90f, spawnOnTarget = randomControlledPlayer.transform }; GameObject val3 = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(val, val2, RoR2Application.rng)); if (Object.op_Implicit((Object)(object)val3)) { Vector3 position = val3.transform.position; Vector3 val4 = position - randomControlledPlayer.corePosition; if (((Vector3)(ref val4)).sqrMagnitude < 14400f) { TeleportHelper.TeleportBody(item, position); } Object.Destroy((Object)(object)val3); } } Object.Destroy((Object)(object)val); } } public static class BleedState { public static bool activated = false; public static float activation = 600f; public static bool activated2 = false; public static float activation2 = 900f; } internal static bool disableFixedUpdate = true; public static bool enabled = false; public static bool reset = false; public static float timer = 99999f; public static float stopwatch = -99999f; public static float baseDamage = 24f; public static float baseTime = 360f; public static float phaseInterval = 60f; public static float damageFactor = 1f; public static float timeFactor = 1f; private static List<Blocker> activeBlocker = new List<Blocker>(); internal static bool clearBlockerList = false; public static bool cachedEffectData = false; public static GameObject fissurePrefab; public static GameObject scorchPrefab; public static GameObject deathExplosionEffect; public static GameObject chargingEffectPrefab; public static GameObject areaIndicatorPrefab; public static BodyIndex lunarChimeraBodyIndex = (BodyIndex)(-1); public static SpawnCard lunarChimeraSpawnCard; private static void BlockerFixedUpdate() { for (int i = 0; i < activeBlocker.Count; i++) { Blocker blocker = activeBlocker[i]; if (blocker != null) { blocker.timer -= Time.fixedDeltaTime; if (blocker.timer <= 0f || clearBlockerList) { activeBlocker.RemoveAt(i); i--; } } } clearBlockerList = false; } internal static void OnMeteorImpact(Vector3 position) { //IL_0023: 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) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004a: 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_006e: Unknown result type (might be due to invalid IL or missing references) if ((ScorchState.activated || NovaState.activated) && activeBlocker.Count < 40 && PlayerWithinRange(position, 120f) && SpaceAvailable(position)) { activeBlocker.Add(new Blocker { position = position }); if (ScorchState.activated) { ScorchState.SpawnScorch(position); } if (NovaState.activated) { NovaState.ServerSendNovaEffect(position); } } } private static bool SpaceAvailable(Vector3 position) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) float num = ((activeBlocker.Count < 21) ? 225f : ((activeBlocker.Count >= 31) ? 625f : 400f)); for (int i = 0; i < activeBlocker.Count; i++) { Blocker blocker = activeBlocker[i]; if (blocker != null) { Vector3 val = position - blocker.position; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; if (sqrMagnitude <= num) { return false; } } } return true; } private static bool PlayerWithinRange(Vector3 position, float radius) { //IL_0036: 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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) float num = radius * radius; ReadOnlyCollection<TeamComponent> teamMembers = TeamComponent.GetTeamMembers((TeamIndex)1); for (int i = 0; i < teamMembers.Count; i++) { CharacterBody body = teamMembers[i].body; if (Object.op_Implicit((Object)(object)body) && body.isPlayerControlled) { Vector3 val = position - body.corePosition; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; if (sqrMagnitude <= num) { return true; } } } return false; } private static CharacterBody GetRandomControlledPlayer() { List<CharacterBody> list = new List<CharacterBody>(); ReadOnlyCollection<TeamComponent> teamMembers = TeamComponent.GetTeamMembers((TeamIndex)1); for (int i = 0; i < teamMembers.Count; i++) { CharacterBody body = teamMembers[i].body; if (Object.op_Implicit((Object)(object)body) && body.isPlayerControlled) { list.Add(body); } } if (list.Count > 0) { int index = Random.Range(0, list.Count - 1); return list[index]; } return null; } private static Vector3 GetNearbyGroundNodePosition(Vector3 origin) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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) NodeGraph groundNodes = SceneInfo.instance.groundNodes; if (Object.op_Implicit((Object)(object)groundNodes)) { List<NodeIndex> list = groundNodes.FindNodesInRangeWithFlagConditions(origin, 10f, 45f, (HullMask)2, (NodeFlags)0, (NodeFlags)0, false); if (list.Count > 0) { NodeIndex val = list[Random.Range(0, list.Count - 1)]; Vector3 result = default(Vector3); groundNodes.GetNodePosition(val, ref result); return result; } } return Vector3.zero; } internal static void MarkListsForClearing() { clearBlockerList = true; NovaState.clearNovaList = true; } internal static void MoonActivation() { if (!enabled && NetworkServer.active) { Display.sendSyncTime = false; enabled = true; reset = false; timer = 5f; stopwatch = 3600f; SetupValues(); Display.SetServerDifficulty(damageFactor); LunarState.activation2 = 3600f + 30f * timeFactor; LunarState.activation3 = 3600f + 60f * timeFactor; BleedState.activation2 = 3600f + 120f * timeFactor; } } internal static void Reset() { Display.sendSyncTime = false; enabled = false; reset = true; timer = 5f; stopwatch = -99999f; MeteorState.activated = false; MeteorState.activated2 = false; MeteorState.activated3 = false; MeteorState.controller = null; FissureState.activated = false; FissureState.activated2 = false; FissureState.activated3 = false; ScorchState.activated = false; NovaState.activated = false; LunarState.activated = false; LunarState.activated2 = false; LunarState.activated3 = false; BleedState.activated = false; BleedState.activated2 = false; } internal static void Disable() { Display.sendSyncTime = false; enabled = false; reset = false; timer = 99999f; stopwatch = -99999f; } private static void SetupValues() { damageFactor = Mathf.Pow(Run.instance.difficultyCoefficient, 0.75f); timeFactor = (1f + 2f * Mathf.Pow(0.9f, (float)Run.instance.loopClearCount)) / 3f; baseTime = DiluvianArtifactPlugin.UnstabifactBaseTimer.Value; phaseInterval = DiluvianArtifactPlugin.UnstabifactPhaseTimer.Value; baseDamage = 24f * damageFactor; baseTime *= timeFactor; phaseInterval *= timeFactor; MeteorState.activation = GetPhaseTime(0); FissureState.activation = GetPhaseTime(1); ScorchState.activation = GetPhaseTime(2); NovaState.activation = GetPhaseTime(2); FissureState.activation2 = GetPhaseTime(3); LunarState.activation = GetPhaseTime(3); MeteorState.activation2 = GetPhaseTime(4); BleedState.activation = GetPhaseTime(4); FissureState.activation3 = GetPhaseTime(5); MeteorState.activation3 = GetPhaseTime(6); LunarState.activation2 = GetPhaseTime(6); LunarState.activation3 = GetPhaseTime(9); BleedState.activation2 = GetPhaseTime(9); } private static float GetPhaseTime(int phase) { return baseTime + (float)phase * phaseInterval; } private static void RecalcDamageValue() { float num = Mathf.Pow(Run.instance.difficultyCoefficient, 0.75f); if (damageFactor != num) { damageFactor = num; baseDamage = 24f * damageFactor; MeteorState.UpdateDamage(); Display.SetServerDifficulty(damageFactor); } } internal static void OnFixedUpdate() { if (!disableFixedUpdate && Object.op_Implicit((Object)(object)Run.instance)) { CacheEffectData(); if (NetworkServer.active) { ServerUpdateTimer(); BlockerFixedUpdate(); MeteorState.FixedUpdate(); FissureState.FixedUpdate(); LunarState.FixedUpdate(); } NovaState.FixedUpdate(); } } private static void ServerUpdateTimer() { if (!Run.instance.isRunStopwatchPaused) { timer -= Time.fixedDeltaTime; stopwatch += Time.fixedDeltaTime; Display.SyncTimer(); } if (timer < 0f) { timer = 0.333f; ResetState(); if (enabled) { RecalcDamageValue(); AdvanceState(); } } } private static void ResetState() { if (reset) { reset = false; stopwatch = 0f; SetupValues(); Display.sendSyncTime = false; if (ZetUnstabifact.Enabled && Object.op_Implicit((Object)(object)TeleporterInteraction.instance)) { enabled = true; Display.sendSyncTime = true; Display.SetServerSyncTime(MeteorState.activation); Display.SetServerDifficulty(damageFactor); } } } private static void AdvanceState() { if (!MeteorState.activated && stopwatch > MeteorState.activation) { MeteorState.activated = true; MeteorState.ResetState(); MeteorState.StartStorm(); Display.SetServerSyncTime(FissureState.activation - stopwatch); } if (!FissureState.activated && stopwatch > FissureState.activation) { FissureState.activated = true; FissureState.ResetState(); Display.SetServerSyncTime(ScorchState.activation - stopwatch); } if (!ScorchState.activated && stopwatch > ScorchState.activation) { ScorchState.activated = true; } if (!NovaState.activated && stopwatch > NovaState.activation) { NovaState.activated = true; Display.SetServerSyncTime(LunarState.activation - stopwatch); } if (FissureState.activated && !FissureState.activated2 && stopwatch > FissureState.activation2) { FissureState.activated2 = true; } if (!LunarState.activated && stopwatch > LunarState.activation) { LunarState.activated = true; LunarState.ResetState(1); Display.SetServerSyncTime(BleedState.activation - stopwatch); } if (MeteorState.activated && !MeteorState.activated2 && stopwatch > MeteorState.activation2) { MeteorState.activated2 = true; } if (!BleedState.activated && stopwatch > BleedState.activation) { BleedState.activated = true; } if (FissureState.activated2 && !FissureState.activated3 && stopwatch > FissureState.activation3) { FissureState.activated3 = true; FissureState.Hasten(); } if (MeteorState.activated2 && !MeteorState.activated3 && stopwatch > MeteorState.activation3) { MeteorState.activated3 = true; MeteorState.Hasten(); } if (LunarState.activated && !LunarState.activated2 && stopwatch > LunarState.activation2) { LunarState.activated2 = true; LunarState.ResetState(2); } if (LunarState.activated2 && !LunarState.activated3 && stopwatch > LunarState.activation3) { LunarState.activated3 = true; LunarState.ResetState(3); } if (BleedState.activated && !BleedState.activated2 && stopwatch > BleedState.activation2) { BleedState.activated2 = true; } } private static void CacheEffectData() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) if (!cachedEffectData) { cachedEffectData = true; fissurePrefab = FireRandomProjectiles.projectilePrefab; scorchPrefab = DeathState.projectilePrefab; deathExplosionEffect = DeathState.deathExplosionEffect; chargingEffectPrefab = ChargeMegaNova.chargingEffectPrefab; areaIndicatorPrefab = ChargeMegaNova.areaIndicatorPrefab; lunarChimeraBodyIndex = BodyCatalog.FindBodyIndex("LunarGolemBody"); lunarChimeraSpawnCard = LegacyResourcesAPI.Load<SpawnCard>("SpawnCards/CharacterSpawnCards/cscLunarGolem"); } } } public static class ZetEclifact { private static int state; public static bool Enabled { get { if (state < 1) { return false; } if (state > 1) { return true; } if (Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled(DiluvianArtifactContent.Artifacts.ZetEclifact)) { return true; } return false; } } private static void EnableEffects() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown CharacterMaster.OnBodyStart += new Manipulator(Eclipse1Hook); HoldoutZoneController.DoUpdate += new Manipulator(Eclipse2Hook); GlobalEventManager.OnCharacterHitGroundServer += new Manipulator(Eclipse3Hook); CharacterBody.RecalculateStats += new Manipulator(Eclipse4Hook); HealthComponent.Heal += new Manipulator(Eclipse5Hook); DeathRewards.OnKilledServer += new Manipulator(Eclipse6Hook); CharacterBody.RecalculateStats += new Manipulator(Eclipse7Hook); HealthComponent.TakeDamageProcess += new Manipulator(Eclipse8Hook); } private static void DisableEffects() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown CharacterMaster.OnBodyStart -= new Manipulator(Eclipse1Hook); HoldoutZoneController.DoUpdate -= new Manipulator(Eclipse2Hook); GlobalEventManager.OnCharacterHitGroundServer -= new Manipulator(Eclipse3Hook); CharacterBody.RecalculateStats -= new Manipulator(Eclipse4Hook); HealthComponent.Heal -= new Manipulator(Eclipse5Hook); DeathRewards.OnKilledServer -= new Manipulator(Eclipse6Hook); CharacterBody.RecalculateStats -= new Manipulator(Eclipse7Hook); HealthComponent.TakeDamageProcess -= new Manipulator(Eclipse8Hook); } private static void OnArtifactEnabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef) { if ((Object)(object)artifactDef == (Object)(object)DiluvianArtifactContent.Artifacts.ZetEclifact) { EnableEffects(); } } private static void OnArtifactDisabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef) { if ((Object)(object)artifactDef == (Object)(object)DiluvianArtifactContent.Artifacts.ZetEclifact) { DisableEffects(); } } internal static void Init() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Expected O, but got Unknown //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Expected O, but got Unknown state = DiluvianArtifactPlugin.EclifactEnable.Value; if (state >= 1) { DiluvianArtifactPlugin.RegisterLanguageToken("ARTIFACT_ZETECLIFACT_NAME", "Artifact of the Eclipse"); DiluvianArtifactPlugin.RegisterLanguageToken("ARTIFACT_ZETECLIFACT_DESC", "Enables all Eclipse modifiers.\n\n<style=cStack>>Ally Starting Health: <style=cDeath>-50%</style>\n>Teleporter Radius: <style=cDeath>-50%</style>\n>Ally Fall Damage: <style=cDeath>+100% and lethal</style>\n>Enemy Speed: <style=cDeath>+40%</style>\n>Ally Healing: <style=cDeath>-50%</style>\n>Enemy Gold Drops: <style=cDeath>-20%</style>\n>Enemy Cooldowns: <style=cDeath>-50%</style>\n>Allies receive <style=cDeath>permanent damage</style></style>"); if (state == 1) { RunArtifactManager.onArtifactEnabledGlobal += new ArtifactStateChangeDelegate(OnArtifactEnabled); RunArtifactManager.onArtifactDisabledGlobal += new ArtifactStateChangeDelegate(OnArtifactDisabled); } else { EnableEffects(); } } } private static void Eclipse1Hook(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); bool flag = val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty"), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 3) }); if (flag) { val.Index += 2; val.EmitDelegate<Func<DifficultyIndex, DifficultyIndex>>((Func<DifficultyIndex, DifficultyIndex>)((DifficultyIndex diffIndex) => (DifficultyIndex)3)); } else { flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty") }); if (flag) { int index = val.Index; ILLabel val2 = default(ILLabel); flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 3), (Instruction x) => ILPatternMatchingExt.MatchBlt(x, ref val2) }); if (flag) { int num = val.Index - index; if (num <= 8) { val.EmitDelegate<Func<DifficultyIndex, DifficultyIndex>>((Func<DifficultyIndex, DifficultyIndex>)((DifficultyIndex diffIndex) => (DifficultyIndex)3)); } else { Debug.LogWarning((object)("EclipseHook(1) Failed! - LdcI4 Offset [" + num + "]")); } } } } if (!flag) { Debug.LogWarning((object)"EclipseHook(1) Failed!"); } } private static void Eclipse2Hook(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); bool flag = val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty"), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 4) }); if (flag) { val.Index += 2; val.EmitDelegate<Func<DifficultyIndex, DifficultyIndex>>((Func<DifficultyIndex, DifficultyIndex>)((DifficultyIndex diffIndex) => (DifficultyIndex)4)); } else { flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty") }); if (flag) { int index = val.Index; ILLabel val2 = default(ILLabel); flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 4), (Instruction x) => ILPatternMatchingExt.MatchBlt(x, ref val2) }); if (flag) { int num = val.Index - index; if (num <= 8) { val.EmitDelegate<Func<DifficultyIndex, DifficultyIndex>>((Func<DifficultyIndex, DifficultyIndex>)((DifficultyIndex diffIndex) => (DifficultyIndex)4)); } else { Debug.LogWarning((object)("EclipseHook(2) Failed! - LdcI4 Offset [" + num + "]")); } } } } if (!flag) { Debug.LogWarning((object)"EclipseHook(2) Failed!"); } } private static void Eclipse3Hook(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); bool flag = val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty"), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 5) }); if (flag) { val.Index += 2; val.EmitDelegate<Func<DifficultyIndex, DifficultyIndex>>((Func<DifficultyIndex, DifficultyIndex>)((DifficultyIndex diffIndex) => (DifficultyIndex)5)); } else { flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty") }); if (flag) { int index = val.Index; ILLabel val2 = default(ILLabel); flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 5), (Instruction x) => ILPatternMatchingExt.MatchBlt(x, ref val2) }); if (flag) { int num = val.Index - index; if (num <= 8) { val.EmitDelegate<Func<DifficultyIndex, DifficultyIndex>>((Func<DifficultyIndex, DifficultyIndex>)((DifficultyIndex diffIndex) => (DifficultyIndex)5)); } else { Debug.LogWarning((object)("EclipseHook(3) Failed! - LdcI4 Offset [" + num + "]")); } } } } if (!flag) { Debug.LogWarning((object)"EclipseHook(3) Failed!"); } } private static void Eclipse4Hook(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); bool flag = val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty"), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 6) }); if (flag) { val.Index += 2; val.EmitDelegate<Func<DifficultyIndex, DifficultyIndex>>((Func<DifficultyIndex, DifficultyIndex>)((DifficultyIndex diffIndex) => (DifficultyIndex)6)); } else { flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty") }); if (flag) { int index = val.Index; ILLabel val2 = default(ILLabel); flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 6), (Instruction x) => ILPatternMatchingExt.MatchBlt(x, ref val2) }); if (flag) { int num = val.Index - index; if (num <= 8) { val.EmitDelegate<Func<DifficultyIndex, DifficultyIndex>>((Func<DifficultyIndex, DifficultyIndex>)((DifficultyIndex diffIndex) => (DifficultyIndex)6)); } else { Debug.LogWarning((object)("EclipseHook(4) Failed! - LdcI4 Offset [" + num + "]")); } } } } if (!flag) { Debug.LogWarning((object)"EclipseHook(4) Failed!"); } } private static void Eclipse5Hook(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); bool flag = val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty"), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 7) }); if (flag) { val.Index += 2; val.EmitDelegate<Func<DifficultyIndex, DifficultyIndex>>((Func<DifficultyIndex, DifficultyIndex>)((DifficultyIndex diffIndex) => (DifficultyIndex)7)); } else { flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty") }); if (flag) { int index = val.Index; ILLabel val2 = default(ILLabel); flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 7), (Instruction x) => ILPatternMatchingExt.MatchBlt(x, ref val2) }); if (flag) { int num = val.Index - index; if (num <= 8) { val.EmitDelegate<Func<DifficultyIndex, DifficultyIndex>>((Func<DifficultyIndex, DifficultyIndex>)((DifficultyIndex diffIndex) => (DifficultyIndex)7)); } else { Debug.LogWarning((object)("EclipseHook(5) Failed! - LdcI4 Offset [" + num + "]")); } } } } if (!flag) { Debug.LogWarning((object)"EclipseHook(5) Failed!"); } } private static void Eclipse6Hook(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); bool flag = val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty"), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 8) }); if (flag) { val.Index += 2; val.EmitDelegate<Func<DifficultyIndex, DifficultyIndex>>((Func<DifficultyIndex, DifficultyIndex>)((DifficultyIndex diffIndex) => (DifficultyIndex)8)); } else { flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCall<Run>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Run>(x, "get_selectedDifficulty") }); if (flag) { int index = val.Index; ILLabel val2 = default(ILLabel); flag = val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 8), (Instruction x) => ILPatternMatchingExt.MatchBlt(x, ref val2) }); if (flag)