using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Peak.Afflictions; using Photon.Realtime; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace PandoraEnhanced { [BepInPlugin("jill920.pandoraenhanced", "Pandora Enhanced", "1.0.0")] public class PandoraEnhancedPlugin : BaseUnityPlugin { public const string MOD_GUID = "jill920.pandoraenhanced"; public const string MOD_NAME = "Pandora Enhanced"; public const string MOD_VERSION = "1.0.0"; public static PandoraEnhancedPlugin Instance; public static ManualLogSource Logger; public static bool IsDizzinessModInstalled { get; private set; } public static bool IsFatigueModInstalled { get; private set; } private void Awake() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown Instance = this; Logger = ((BaseUnityPlugin)this).Logger; CheckForInstalledMods(); try { Harmony val = new Harmony("jill920.pandoraenhanced"); val.PatchAll(); Logger.LogInfo((object)"[Pandora Enhanced 1.0.0] Loaded successfully!"); Logger.LogInfo((object)$" Dizziness Mod detected: {IsDizzinessModInstalled}"); Logger.LogInfo((object)$" Fatigue Mod detected: {IsFatigueModInstalled}"); } catch (Exception ex) { Logger.LogError((object)("Failed to load: " + ex.Message)); } } private void CheckForInstalledMods() { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { try { if (assembly.GetType("DizzinessMod.DizzinessTracker") != null) { IsDizzinessModInstalled = true; } if (assembly.GetType("FatigueMod.FatigueTracker") != null) { IsFatigueModInstalled = true; } } catch { } } } } } namespace PandoraEnhanced.Patches { [HarmonyPatch(typeof(Affliction_Chaos), "OnApplied")] internal static class Affliction_Chaos_Patch_PreserveTotal { private static FieldInfo _isInvincibleField; private static bool IsInvincible(Character character) { if ((Object)(object)character == (Object)null || (Object)(object)character.data == (Object)null) { return false; } try { if (_isInvincibleField == null) { _isInvincibleField = typeof(CharacterData).GetField("isInvincible", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } if (_isInvincibleField != null) { return (bool)_isInvincibleField.GetValue(character.data); } } catch (Exception ex) { PandoraEnhancedPlugin.Logger.LogWarning((object)("Failed to check invincibility: " + ex.Message)); } return false; } private static void ClearDizziness(Character character) { try { PandoraEnhancedPlugin.Logger.LogInfo((object)"ClearDizziness: Looking for tracker..."); Component component = ((Component)character).GetComponent("DizzinessMod.DizzinessTracker"); if ((Object)(object)component == (Object)null) { PandoraEnhancedPlugin.Logger.LogWarning((object)"ClearDizziness: Tracker not found!"); return; } PandoraEnhancedPlugin.Logger.LogInfo((object)"ClearDizziness: Tracker found, getting field..."); FieldInfo field = ((object)component).GetType().GetField("dizzinessValue", BindingFlags.Instance | BindingFlags.Public); if (field == null) { PandoraEnhancedPlugin.Logger.LogWarning((object)"ClearDizziness: dizzinessValue field not found!"); return; } float num = (float)field.GetValue(component); PandoraEnhancedPlugin.Logger.LogInfo((object)$"ClearDizziness: Current value = {num:F3}"); if (num > 0.01f) { field.SetValue(component, 0f); PandoraEnhancedPlugin.Logger.LogInfo((object)$"Cleared Dizziness: {num:F3} → 0"); } else { PandoraEnhancedPlugin.Logger.LogInfo((object)"ClearDizziness: Value already near 0, nothing to clear"); } } catch (Exception ex) { PandoraEnhancedPlugin.Logger.LogError((object)("ClearDizziness failed: " + ex.Message + "\n" + ex.StackTrace)); } } private static bool IsLivingSkeleton(Character character) { if ((Object)(object)character == (Object)null || (Object)(object)character.data == (Object)null) { return false; } if (character.data.isSkeleton && !character.data.dead && !character.data.fullyPassedOut) { return true; } return false; } private static void ClearFatigue(Character character) { try { Component component = ((Component)character).GetComponent("FatigueMod.FatigueTracker"); if ((Object)(object)component == (Object)null) { return; } FieldInfo field = ((object)component).GetType().GetField("fatigueValue", BindingFlags.Instance | BindingFlags.Public); if (!(field == null)) { float num = (float)field.GetValue(component); if (num > 0.01f) { field.SetValue(component, 0f); PandoraEnhancedPlugin.Logger.LogInfo((object)$"Cleared Fatigue: {num:F3} → 0"); } } } catch (Exception ex) { PandoraEnhancedPlugin.Logger.LogWarning((object)("Failed to clear Fatigue: " + ex.Message)); } } [HarmonyPrefix] private static void Prefix(Affliction_Chaos __instance) { Character character = ((Affliction)__instance).character; if ((Object)(object)character == (Object)null || !character.IsLocal) { return; } if (IsLivingSkeleton(character)) { if (PandoraEnhancedPlugin.IsDizzinessModInstalled) { ClearDizziness(character); } if (PandoraEnhancedPlugin.IsFatigueModInstalled) { ClearFatigue(character); } return; } PandoraEnhancedPlugin.Logger.LogInfo((object)"Pandora Prefix - Starting clear"); bool flag = IsInvincible(character); PandoraEnhancedPlugin.Logger.LogInfo((object)$"Pandora Prefix - Invincible: {flag}"); PandoraEnhancedPlugin.Logger.LogInfo((object)$"Pandora Prefix - Dizziness mod installed: {PandoraEnhancedPlugin.IsDizzinessModInstalled}"); PandoraEnhancedPlugin.Logger.LogInfo((object)$"Pandora Prefix - Fatigue mod installed: {PandoraEnhancedPlugin.IsFatigueModInstalled}"); if (PandoraEnhancedPlugin.IsDizzinessModInstalled) { PandoraEnhancedPlugin.Logger.LogInfo((object)"Attempting to clear Dizziness..."); ClearDizziness(character); } if (PandoraEnhancedPlugin.IsFatigueModInstalled) { PandoraEnhancedPlugin.Logger.LogInfo((object)"Attempting to clear Fatigue..."); ClearFatigue(character); } if (flag) { PandoraEnhancedPlugin.Logger.LogInfo((object)"Pandora's Chaos: Invincible active - skipping Dizziness/Fatigue addition after clear"); } } [HarmonyPostfix] private static void Postfix(Affliction_Chaos __instance) { Character character = ((Affliction)__instance).character; if ((Object)(object)character == (Object)null || !character.IsLocal) { return; } if (IsLivingSkeleton(character)) { PandoraEnhancedPlugin.Logger.LogInfo((object)"Pandora's Chaos: Living skeleton - skipping Dizziness/Fatigue entirely"); return; } if (IsInvincible(character)) { PandoraEnhancedPlugin.Logger.LogInfo((object)"Pandora's Chaos: Invincible active - no Dizziness/Fatigue added"); return; } bool isDizzinessModInstalled = PandoraEnhancedPlugin.IsDizzinessModInstalled; bool isFatigueModInstalled = PandoraEnhancedPlugin.IsFatigueModInstalled; if (!isDizzinessModInstalled && !isFatigueModInstalled) { return; } float statusSum = character.refs.afflictions.statusSum; float num = 1f - statusSum; if (num <= 0.01f) { PandoraEnhancedPlugin.Logger.LogInfo((object)$"Pandora's Chaos: No space for Dizziness/Fatigue (total={statusSum:F3})"); return; } float num2 = 0f; float num3 = 0f; if (isDizzinessModInstalled && isFatigueModInstalled) { num2 = num * Random.Range(0f, 0.35f); float num4 = num - num2; num3 = num4 * Random.Range(0f, 0.5f); } else if (isDizzinessModInstalled) { num2 = num * Random.Range(0f, 0.35f); } else if (isFatigueModInstalled) { num3 = num * Random.Range(0f, 0.35f); } float num5 = num2 + num3; if (num5 > 0.01f) { if (isDizzinessModInstalled && num2 > 0.01f) { AddDizziness(character, num2); } if (isFatigueModInstalled && num3 > 0.01f) { AddFatigue(character, num3); } character.refs.afflictions.PushStatuses((Player)null); GUIManager.instance.bar.ChangeBar(); PandoraEnhancedPlugin.Logger.LogInfo((object)($"Pandora's Chaos: Total={statusSum:F3}, " + $"Added Dizziness={num2:F3}, Fatigue={num3:F3}")); } } private static void AddDizziness(Character character, float amount) { try { if (IsInvincible(character)) { return; } Component component = ((Component)character).GetComponent("DizzinessMod.DizzinessTracker"); if (!((Object)(object)component == (Object)null)) { FieldInfo field = ((object)component).GetType().GetField("dizzinessValue", BindingFlags.Instance | BindingFlags.Public); if (!(field == null)) { float num = (float)field.GetValue(component); field.SetValue(component, Mathf.Clamp01(num + amount)); } } } catch (Exception ex) { PandoraEnhancedPlugin.Logger.LogWarning((object)("Dizziness failed: " + ex.Message)); } } private static void AddFatigue(Character character, float amount) { try { if (IsInvincible(character)) { return; } Component component = ((Component)character).GetComponent("FatigueMod.FatigueTracker"); if (!((Object)(object)component == (Object)null)) { FieldInfo field = ((object)component).GetType().GetField("fatigueValue", BindingFlags.Instance | BindingFlags.Public); if (!(field == null)) { float num = (float)field.GetValue(component); field.SetValue(component, Mathf.Clamp01(num + amount)); } } } catch (Exception ex) { PandoraEnhancedPlugin.Logger.LogWarning((object)("Fatigue failed: " + ex.Message)); } } } }