Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of AnySilkBoss v0.2.2
AnySilkBoss/AnySilkBoss/AnySilkBoss.dll
Decompiled 3 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using AnySilkBoss.Source.Actions; using AnySilkBoss.Source.Behaviours.Common; using AnySilkBoss.Source.Behaviours.Memory; using AnySilkBoss.Source.Behaviours.Normal; using AnySilkBoss.Source.Handlers; using AnySilkBoss.Source.Managers; using AnySilkBoss.Source.Patches; using AnySilkBoss.Source.Tools; using BepInEx; using BepInEx.Logging; using GlobalEnums; using GlobalSettings; using HarmonyLib; using HutongGames.PlayMaker; using HutongGames.PlayMaker.Actions; using Microsoft.CodeAnalysis; using TMProOld; using TeamCherry.Localization; using TeamCherry.SharedUtils; using UnityEngine; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("AnySilkBoss")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("0.2.2.0")] [assembly: AssemblyInformationalVersion("0.2.2+cfe610e7b6873c430a5eca4f987ab57a6eb0994d")] [assembly: AssemblyProduct("AnySilkBoss")] [assembly: AssemblyTitle("AnySilkBoss")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.2.2.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 AnySilkBoss { public static class MyPluginInfo { public const string PLUGIN_GUID = "AnySilkBoss"; public const string PLUGIN_NAME = "AnySilkBoss"; public const string PLUGIN_VERSION = "0.2.2"; } } namespace AnySilkBoss.Source { [BepInPlugin("AnySilkBoss", "AnySilkBoss", "0.2.2")] public class Plugin : BaseUnityPlugin { [CompilerGenerated] private sealed class <DelayedPatchApplication>d__27 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Plugin <>4__this; private Exception <ex>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DelayedPatchApplication>d__27(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <ex>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; case 1: <>1__state = -1; try { _harmony = new Harmony("AnySilkBoss"); _harmony.PatchAll(typeof(BossPatches)); _harmony.PatchAll(typeof(I18nPatches)); _harmony.PatchAll(typeof(DamageReductionPatches)); _harmony.PatchAll(typeof(MemoryCustomSceneManagerPatch)); _harmony.PatchAll(typeof(MemorySceneTransitionPatch)); _harmony.PatchAll(typeof(MemoryClashTinkPatch)); _harmony.PatchAll(typeof(MemoryParryDownspikePatch)); _harmony.PatchAll(typeof(HeroDamageStackPatch)); _harmony.PatchAll(typeof(HeroControllerDeathPatches)); _harmony.PatchAll(typeof(GameManagerRespawnPatches)); _harmony.PatchAll(typeof(ToolItemPatches)); AudioHandler.Initialize(); AudioHandler.ApplyPatches(_harmony); Log.Info("Harmony patches applied successfully"); } catch (Exception ex) { <ex>5__1 = ex; Log.Error("Failed to apply Harmony patches: " + <ex>5__1.Message); Log.Error("Stack trace: " + <ex>5__1.StackTrace); } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <ReinitializeSilkBallManagerDelayed>d__29 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Plugin <>4__this; private SilkBallManager <silkBallManager>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ReinitializeSilkBallManagerDelayed>d__29(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <silkBallManager>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(0.5f); <>1__state = 1; return true; case 1: { <>1__state = -1; GameObject anySilkBossManager = <>4__this.AnySilkBossManager; <silkBallManager>5__1 = ((anySilkBossManager != null) ? anySilkBossManager.GetComponent<SilkBallManager>() : null); if ((Object)(object)<silkBallManager>5__1 != (Object)null) { <silkBallManager>5__1.ReinitializeOnEnterGame(); } return false; } } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <ResetBossPlatformsDelay>d__31 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Plugin <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ResetBossPlatformsDelay>d__31(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(2.5f); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.ResetBossPlatforms(); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static Harmony _harmony; private GameObject AnySilkBossManager = null; public static Plugin Instance { get; private set; } public static bool IsBossSaveLoaded { get; set; } public static string OriginalSaveBackupPath { get; set; } public static bool IsInBossRoom { get; set; } public static string CurrentSaveFileName { get; set; } public static Texture2D? BoulderTexture { get; private set; } private void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); Instance = this; LoadEmbeddedTextures(); SceneManager.activeSceneChanged += OnSceneChange; ((MonoBehaviour)this).StartCoroutine(DelayedPatchApplication()); Log.Info("AnySilkBoss plugin loaded!"); } [IteratorStateMachine(typeof(<DelayedPatchApplication>d__27))] private IEnumerator DelayedPatchApplication() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedPatchApplication>d__27(0) { <>4__this = this }; } private void OnSceneChange(Scene oldScene, Scene newScene) { IsInBossRoom = ((Scene)(ref newScene)).name == "Cradle_03"; if (((Scene)(ref newScene)).name == "Menu_Title") { Log.Info("[Plugin] 切换到主菜单,清空丝球池和缓存..."); GameObject anySilkBossManager = AnySilkBossManager; SilkBallManager silkBallManager = ((anySilkBossManager != null) ? anySilkBossManager.GetComponent<SilkBallManager>() : null); if ((Object)(object)silkBallManager != (Object)null) { silkBallManager.ResetOnReturnToMenu(); } return; } if (((Scene)(ref newScene)).name == "Cradle_03") { ((MonoBehaviour)this).StartCoroutine(ResetBossPlatformsDelay()); DamageStackManager.Reset(); } if (((Scene)(ref oldScene)).name == "Menu_Title") { CreateManager(); ((MonoBehaviour)this).StartCoroutine(ReinitializeSilkBallManagerDelayed()); } } [IteratorStateMachine(typeof(<ReinitializeSilkBallManagerDelayed>d__29))] private IEnumerator ReinitializeSilkBallManagerDelayed() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <ReinitializeSilkBallManagerDelayed>d__29(0) { <>4__this = this }; } private void CreateManager() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown AnySilkBossManager = GameObject.Find("AnySilkBossManager"); if ((Object)(object)AnySilkBossManager == (Object)null) { AnySilkBossManager = new GameObject("AnySilkBossManager"); Object.DontDestroyOnLoad((Object)(object)AnySilkBossManager); AssetManager assetManager = AnySilkBossManager.AddComponent<AssetManager>(); AnySilkBossManager.AddComponent<DamageHeroEventManager>(); AnySilkBossManager.AddComponent<SilkBallManager>(); AnySilkBossManager.AddComponent<BigSilkBallManager>(); AnySilkBossManager.AddComponent<MemoryManager>(); AnySilkBossManager.AddComponent<DeathManager>(); AnySilkBossManager.AddComponent<SingleWebManager>(); AnySilkBossManager.AddComponent<FWPinManager>(); AnySilkBossManager.AddComponent<FWBlastManager>(); AnySilkBossManager.AddComponent<LaceCircleSlashManager>(); Log.Info("创建持久化管理器和所有组件"); ((MonoBehaviour)this).StartCoroutine(assetManager.PreloadAllExternalAssets()); } else { Log.Info("找到已存在的持久化管理器"); } } [IteratorStateMachine(typeof(<ResetBossPlatformsDelay>d__31))] private IEnumerator ResetBossPlatformsDelay() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <ResetBossPlatformsDelay>d__31(0) { <>4__this = this }; } private void ResetBossPlatforms() { //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) try { if (IsInBossRoom) { GameObject[] source = Resources.FindObjectsOfTypeAll<GameObject>(); List<GameObject> list = source.Where((GameObject x) => ((Object)x).name.Contains("cradle_plat") && !((Object)x).name.Contains("spike")).ToList(); List<GameObject> list2 = source.Where((GameObject x) => ((Object)x).name.Contains("cradle_spike_plat")).ToList(); foreach (GameObject item in list) { Transform val = item.transform.Find("crank_hit"); if ((Object)(object)val != (Object)null) { ((Component)val).gameObject.SetActive(false); } switch (((Object)item).name) { case "cradle_plat (6)": item.transform.position = new Vector3(39.81f, 58.35f, -0.2602f); Log.Info("重置 " + ((Object)item).name + " 的位置"); break; case "cradle_plat (1)": item.transform.position = new Vector3(49.01f, 64.94f, -0.2602f); Log.Info("重置 " + ((Object)item).name + " 的位置"); break; case "cradle_plat (7)": item.transform.position = new Vector3(31.81f, 80.87f, -0.2602f); Log.Info("重置 " + ((Object)item).name + " 的位置"); break; case "cradle_plat (8)": item.transform.position = new Vector3(48.9f, 93.74f, -0.2602f); Log.Info("重置 " + ((Object)item).name + " 的位置"); break; case "cradle_plat": item.transform.position = new Vector3(31.27f, 108.25f, -0.2602f); Log.Info("重置 " + ((Object)item).name + " 的位置"); break; } } foreach (GameObject item2 in list2) { Transform val2 = item2.transform.Find("spikes hit"); if ((Object)(object)val2 != (Object)null) { DamageHero component = ((Component)val2).GetComponent<DamageHero>(); if ((Object)(object)component != (Object)null) { component.damageDealt = 2; component.hazardType = (HazardType)0; } } else { Log.Warn(((Object)item2).name + " 没有找到子物品 spikes hit"); } } } if ((Object)(object)GameManager.instance == (Object)null) { Log.Warn("GameManager.instance 为 null,无法重置平台"); return; } SceneData sceneData = GameManager.instance.sceneData; if (sceneData == null) { Log.Warn("sceneData 为 null,无法重置平台"); return; } if (sceneData.persistentBools == null) { Log.Warn("persistentBools 为 null,无法重置平台"); return; } if (((PersistentItemDataCollection<bool, SerializableBoolData>)(object)sceneData.persistentBools).serializedList == null) { Log.Warn("serializedList 为 null,无法重置平台"); return; } List<SerializableBoolData> list3 = ((PersistentItemDataCollection<bool, SerializableBoolData>)(object)sceneData.persistentBools).serializedList.FindAll((SerializableBoolData x) => ((SerializableItemData<bool>)(object)x).SceneName == "Cradle_03" && ((SerializableItemData<bool>)(object)x).ID.Contains("plat")); if (list3.Count == 0) { return; } int num = 0; foreach (SerializableBoolData item3 in list3) { bool value = ((SerializableItemData<bool>)(object)item3).Value; ((SerializableItemData<bool>)(object)item3).Value = false; num++; } } catch (Exception ex) { Log.Error("重置平台失败: " + ex.Message); Log.Error("堆栈跟踪: " + ex.StackTrace); } } private void LoadEmbeddedTextures() { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown Assembly executingAssembly = Assembly.GetExecutingAssembly(); string[] manifestResourceNames = executingAssembly.GetManifestResourceNames(); foreach (string text in manifestResourceNames) { using Stream stream = executingAssembly.GetManifestResourceStream(text); if (stream != null && text.Contains("SLIK")) { byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); BoulderTexture = new Texture2D(2, 2); ImageConversion.LoadImage(BoulderTexture, array); ((Texture)BoulderTexture).filterMode = (FilterMode)0; ((Texture)BoulderTexture).wrapMode = (TextureWrapMode)1; Log.Info("成功加载 Boulder 贴图: " + text); } } } private void OnDestroy() { _harmony.UnpatchSelf(); } } } namespace AnySilkBoss.Source.Tools { internal static class FsmAnalyzer { public static void WriteFsmReport(PlayMakerFSM fsm, string outputPath) { if ((Object)(object)fsm == (Object)null) { return; } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("=== FSM 报告: " + fsm.FsmName + " ==="); stringBuilder.AppendLine("当前状态: " + fsm.ActiveStateName); FsmState[] fsmStates = fsm.FsmStates; stringBuilder.AppendLine($"\n--- 所有状态 ({fsmStates.Length}个) ---"); FsmState[] array = fsmStates; foreach (FsmState val in array) { stringBuilder.AppendLine("状态: " + val.Name); } FsmEvent[] fsmEvents = fsm.FsmEvents; stringBuilder.AppendLine($"\n--- 所有事件 ({fsmEvents.Length}个) ---"); FsmEvent[] array2 = fsmEvents; foreach (FsmEvent val2 in array2) { stringBuilder.AppendLine("事件: " + val2.Name); } FsmTransition[] fsmGlobalTransitions = fsm.FsmGlobalTransitions; stringBuilder.AppendLine($"\n--- 所有全局转换 ({fsmGlobalTransitions.Length}个) ---"); FsmTransition[] array3 = fsmGlobalTransitions; foreach (FsmTransition val3 in array3) { FsmEvent fsmEvent = val3.FsmEvent; stringBuilder.AppendLine("全局转换: " + ((fsmEvent != null) ? fsmEvent.Name : null) + " -> " + val3.toState); } stringBuilder.AppendLine("\n--- 各状态转换与动作 ---"); FsmState[] array4 = fsmStates; foreach (FsmState val4 in array4) { stringBuilder.AppendLine("状态 " + val4.Name + " 的转换:"); if (val4.Transitions != null && val4.Transitions.Length != 0) { FsmTransition[] transitions = val4.Transitions; foreach (FsmTransition val5 in transitions) { FsmEvent fsmEvent2 = val5.FsmEvent; stringBuilder.AppendLine(" " + ((fsmEvent2 != null) ? fsmEvent2.Name : null) + " -> " + val5.toState); } } else { stringBuilder.AppendLine(" (无转换)"); } if (val4.Actions != null && val4.Actions.Length != 0) { stringBuilder.AppendLine($"动作 ({val4.Actions.Length}个):"); for (int n = 0; n < val4.Actions.Length; n++) { FsmStateAction val6 = val4.Actions[n]; stringBuilder.AppendLine($" [{n}] {((object)val6).GetType().Name}"); AnalyzeActionVariables(stringBuilder, val6, n); } } else { stringBuilder.AppendLine("动作: 无"); } } FsmVariables fsmVariables = fsm.FsmVariables; stringBuilder.AppendLine("\n--- 变量 ---"); stringBuilder.AppendLine($"Bool: {fsmVariables.BoolVariables.Length}, Int: {fsmVariables.IntVariables.Length}, Float: {fsmVariables.FloatVariables.Length}, String: {fsmVariables.StringVariables.Length}"); FsmFloat[] floatVariables = fsmVariables.FloatVariables; foreach (FsmFloat val7 in floatVariables) { stringBuilder.AppendLine($"Float {((NamedVariable)val7).Name} = {val7.Value}"); } FsmBool[] boolVariables = fsmVariables.BoolVariables; foreach (FsmBool val8 in boolVariables) { stringBuilder.AppendLine($"Bool {((NamedVariable)val8).Name} = {val8.Value}"); } FsmInt[] intVariables = fsmVariables.IntVariables; foreach (FsmInt val9 in intVariables) { stringBuilder.AppendLine($"Int {((NamedVariable)val9).Name} = {val9.Value}"); } FsmString[] stringVariables = fsmVariables.StringVariables; foreach (FsmString val10 in stringVariables) { stringBuilder.AppendLine("String " + ((NamedVariable)val10).Name + " = " + val10.Value); } Directory.CreateDirectory(Path.GetDirectoryName(outputPath) ?? "."); File.WriteAllText(outputPath, stringBuilder.ToString(), Encoding.UTF8); } private static void AnalyzeActionVariables(StringBuilder sb, FsmStateAction action, int actionIndex) { try { Type type = ((object)action).GetType(); FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public); sb.AppendLine($" 行为 {actionIndex} 的变量:"); FieldInfo[] array = fields; foreach (FieldInfo fieldInfo in array) { object value = fieldInfo.GetValue(action); if (value == null) { continue; } sb.AppendLine($" {fieldInfo.Name}: {value} ({value.GetType().Name})"); FsmFloat val = (FsmFloat)((value is FsmFloat) ? value : null); if (val != null) { sb.AppendLine($" -> FsmFloat值: {val.Value}"); if (((NamedVariable)val).UseVariable && ((NamedVariable)val).Name != null) { sb.AppendLine(" -> 使用变量: " + ((NamedVariable)val).Name); } continue; } FsmString val2 = (FsmString)((value is FsmString) ? value : null); if (val2 != null) { sb.AppendLine(" -> FsmString值: " + val2.Value); if (((NamedVariable)val2).UseVariable && ((NamedVariable)val2).Name != null) { sb.AppendLine(" -> 使用变量: " + ((NamedVariable)val2).Name); } continue; } FsmBool val3 = (FsmBool)((value is FsmBool) ? value : null); if (val3 != null) { sb.AppendLine($" -> FsmBool值: {val3.Value}"); if (((NamedVariable)val3).UseVariable && ((NamedVariable)val3).Name != null) { sb.AppendLine(" -> 使用变量: " + ((NamedVariable)val3).Name); } continue; } FsmInt val4 = (FsmInt)((value is FsmInt) ? value : null); if (val4 != null) { sb.AppendLine($" -> FsmInt值: {val4.Value}"); if (((NamedVariable)val4).UseVariable && ((NamedVariable)val4).Name != null) { sb.AppendLine(" -> 使用变量: " + ((NamedVariable)val4).Name); } continue; } FsmGameObject val5 = (FsmGameObject)((value is FsmGameObject) ? value : null); if (val5 != null) { AnalyzeFsmGameObject(sb, val5, action); continue; } FsmOwnerDefault val6 = (FsmOwnerDefault)((value is FsmOwnerDefault) ? value : null); if (val6 != null) { AnalyzeFsmOwnerDefault(sb, val6, action); continue; } FsmEvent val7 = (FsmEvent)((value is FsmEvent) ? value : null); if (val7 != null) { sb.AppendLine(" -> FsmEvent: " + val7.Name); continue; } GameObject val8 = (GameObject)((value is GameObject) ? value : null); if (val8 != null) { sb.AppendLine(" -> GameObject名称: " + ((Object)val8).name); sb.AppendLine(" -> GameObject路径: " + GetGameObjectPath(val8)); } } } catch (Exception ex) { sb.AppendLine($" 分析行为 {actionIndex} 变量时出错: {ex.Message}"); } } private static void AnalyzeFsmGameObject(StringBuilder sb, FsmGameObject fsmGameObject, FsmStateAction action) { sb.AppendLine(" -> FsmGameObject详情:"); if (((NamedVariable)fsmGameObject).UseVariable) { sb.AppendLine(" 使用变量: " + ((NamedVariable)fsmGameObject).Name); } GameObject value = fsmGameObject.Value; if ((Object)(object)value != (Object)null) { sb.AppendLine(" GameObject名称: " + ((Object)value).name); sb.AppendLine(" GameObject路径: " + GetGameObjectPath(value)); sb.AppendLine($" 是否激活: {value.activeSelf}"); Component[] components = value.GetComponents<Component>(); if (components.Length != 0) { sb.AppendLine(" 组件列表: " + string.Join(", ", components.Select((Component c) => ((object)c).GetType().Name))); } } else { sb.AppendLine(" GameObject值: null (可能在运行时设置)"); } } private static void AnalyzeFsmOwnerDefault(StringBuilder sb, FsmOwnerDefault fsmOwnerDefault, FsmStateAction action) { sb.AppendLine(" -> FsmOwnerDefault详情:"); try { FieldInfo field = ((object)fsmOwnerDefault).GetType().GetField("OwnerOption"); if (field != null) { object value = field.GetValue(fsmOwnerDefault); sb.AppendLine($" OwnerOption: {value}"); } } catch { } try { PropertyInfo property = ((object)fsmOwnerDefault).GetType().GetProperty("GameObject"); if (property != null) { object? value2 = property.GetValue(fsmOwnerDefault); FsmGameObject val = (FsmGameObject)((value2 is FsmGameObject) ? value2 : null); if (val != null && (Object)(object)val.Value != (Object)null) { sb.AppendLine(" 指定GameObject名称: " + ((Object)val.Value).name); sb.AppendLine(" 指定GameObject路径: " + GetGameObjectPath(val.Value)); } } } catch { } if (action.Fsm != null && (Object)(object)action.Fsm.GameObject != (Object)null) { sb.AppendLine(" Owner(FSM宿主)名称: " + ((Object)action.Fsm.GameObject).name); sb.AppendLine(" Owner(FSM宿主)路径: " + GetGameObjectPath(action.Fsm.GameObject)); } } private static string GetGameObjectPath(GameObject obj) { if ((Object)(object)obj == (Object)null) { return "null"; } string text = ((Object)obj).name; Transform parent = obj.transform.parent; while ((Object)(object)parent != (Object)null) { text = ((Object)parent).name + "/" + text; parent = parent.parent; } return text; } } public static class FsmStateBuilder { public struct StateDefinition { public string Name; public string Description; public StateDefinition(string name, string description = "") { Name = name; Description = description; } } public static FsmState CreateState(Fsm fsm, string name, string description = "") { //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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown return new FsmState(fsm) { Name = name, Description = description }; } public static FsmState CreateState(PlayMakerFSM pmFsm, string name, string description = "") { return CreateState(pmFsm.Fsm, name, description); } public static FsmState CreateAndAddState(PlayMakerFSM pmFsm, string name, string description = "") { FsmState val = CreateState(pmFsm.Fsm, name, description); AddStateToFsm(pmFsm, val); return val; } public static void AddStateToFsm(PlayMakerFSM pmFsm, FsmState state) { List<FsmState> list = pmFsm.Fsm.States.ToList(); list.Add(state); pmFsm.Fsm.States = list.ToArray(); } public static void AddStatesToFsm(PlayMakerFSM pmFsm, params FsmState[] statesToAdd) { List<FsmState> list = pmFsm.Fsm.States.ToList(); list.AddRange(statesToAdd); pmFsm.Fsm.States = list.ToArray(); } public static FsmState[] CreateStates(Fsm fsm, params StateDefinition[] definitions) { FsmState[] array = (FsmState[])(object)new FsmState[definitions.Length]; for (int i = 0; i < definitions.Length; i++) { array[i] = CreateState(fsm, definitions[i].Name, definitions[i].Description); } return array; } public static FsmState[] CreateStates(Fsm fsm, params (string name, string description)[] definitions) { FsmState[] array = (FsmState[])(object)new FsmState[definitions.Length]; for (int i = 0; i < definitions.Length; i++) { array[i] = CreateState(fsm, definitions[i].name, definitions[i].description); } return array; } public static FsmState[] CreateAndAddStates(PlayMakerFSM pmFsm, params (string name, string description)[] definitions) { FsmState[] array = CreateStates(pmFsm.Fsm, definitions); AddStatesToFsm(pmFsm, array); return array; } public static FsmState? FindState(PlayMakerFSM pmFsm, string stateName) { string stateName2 = stateName; return ((IEnumerable<FsmState>)pmFsm.FsmStates).FirstOrDefault((Func<FsmState, bool>)((FsmState s) => s.Name == stateName2)); } public static bool StateExists(PlayMakerFSM pmFsm, string stateName) { string stateName2 = stateName; return pmFsm.FsmStates.Any((FsmState s) => s.Name == stateName2); } public static FsmState GetOrCreateState(PlayMakerFSM pmFsm, string name, string description = "") { FsmState val = FindState(pmFsm, name); if (val != null) { return val; } return CreateAndAddState(pmFsm, name, description); } public static FsmTransition CreateFinishedTransition(FsmState targetState) { //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_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown return new FsmTransition { FsmEvent = FsmEvent.Finished, toState = targetState.Name, toFsmState = targetState }; } public static FsmTransition CreateTransition(FsmEvent fsmEvent, FsmState targetState) { //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_000e: 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_0022: Expected O, but got Unknown return new FsmTransition { FsmEvent = fsmEvent, toState = targetState.Name, toFsmState = targetState }; } public static void SetFinishedTransition(FsmState state, FsmState targetState) { state.Transitions = (FsmTransition[])(object)new FsmTransition[1] { CreateFinishedTransition(targetState) }; } public static void AddTransition(FsmState state, FsmTransition transition) { List<FsmTransition> list = state.Transitions?.ToList() ?? new List<FsmTransition>(); list.Add(transition); state.Transitions = list.ToArray(); } public static FsmEvent GetOrCreateEvent(PlayMakerFSM pmFsm, string eventName) { FsmEvent fsmEvent = FsmEvent.GetFsmEvent(eventName); List<FsmEvent> list = pmFsm.Fsm.Events.ToList(); if (!list.Contains(fsmEvent)) { list.Add(fsmEvent); pmFsm.Fsm.Events = list.ToArray(); } return fsmEvent; } public static FsmEvent[] RegisterEvents(PlayMakerFSM pmFsm, params string[] eventNames) { List<FsmEvent> list = pmFsm.Fsm.Events.ToList(); FsmEvent[] array = (FsmEvent[])(object)new FsmEvent[eventNames.Length]; for (int i = 0; i < eventNames.Length; i++) { array[i] = FsmEvent.GetFsmEvent(eventNames[i]); if (!list.Contains(array[i])) { list.Add(array[i]); } } pmFsm.Fsm.Events = list.ToArray(); return array; } public static void ReinitializeFsm(PlayMakerFSM pmFsm) { } public static void ReinitializeFsmVariables(PlayMakerFSM pmFsm) { pmFsm.FsmVariables.Init(); } } internal static class Log { private static ManualLogSource? _logSource; private static string LogPrefix => $"[{Assembly.GetExecutingAssembly().GetName().Version}] "; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object debug) { ManualLogSource? logSource = _logSource; if (logSource != null) { logSource.LogDebug((object)(LogPrefix + debug)); } } internal static void Error(object error) { ManualLogSource? logSource = _logSource; if (logSource != null) { logSource.LogError((object)(LogPrefix + error)); } } internal static void Fatal(object fatal) { ManualLogSource? logSource = _logSource; if (logSource != null) { logSource.LogFatal((object)(LogPrefix + fatal)); } } internal static void Info(object info) { ManualLogSource? logSource = _logSource; if (logSource != null) { logSource.LogInfo((object)(LogPrefix + info)); } } internal static void Message(object message) { ManualLogSource? logSource = _logSource; if (logSource != null) { logSource.LogMessage((object)(LogPrefix + message)); } } internal static void Warn(object warning) { ManualLogSource? logSource = _logSource; if (logSource != null) { logSource.LogWarning((object)(LogPrefix + warning)); } } } } namespace AnySilkBoss.Source.Patches { internal static class BossPatches { [HarmonyPrefix] [HarmonyPatch(typeof(PlayMakerFSM), "Start")] private static void ModifyBoss(PlayMakerFSM __instance) { if (((Object)__instance).name == "Silk Boss" && __instance.FsmName == "Control") { HandleBossControl(__instance); } else if (((Object)__instance).name == "Silk Boss" && __instance.FsmName == "Stun Control") { HandleStunControl(__instance); } else if (((Object)__instance).name == "Silk Boss" && __instance.FsmName == "Phase Control") { HandlePhaseControl(__instance); } else if (((Object)__instance).name == "Silk Boss" && __instance.FsmName == "Attack Control") { HandleAttackControl(__instance); } else if ((((Object)__instance).name == "Rubble Field M" || ((Object)__instance).name == "Rubble Field L" || ((Object)__instance).name == "Rubble Field R") && __instance.FsmName == "FSM") { HandleRubbleField(__instance); } else if (((Object)__instance).name.Contains("Silk Boulder") && __instance.FsmName == "Control") { HandleSilkBoulder(__instance); } } private static void HandleBossControl(PlayMakerFSM __instance) { if (MemoryManager.IsInMemoryMode) { BossBehavior component = ((Component)__instance).gameObject.GetComponent<BossBehavior>(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); Log.Info("[Memory模式] 移除普通BossBehavior组件"); } if ((Object)(object)((Component)__instance).gameObject.GetComponent<MemoryBossBehavior>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<MemoryBossBehavior>(); Log.Info("[Memory模式] 添加梦境版 MemoryBossBehavior 组件"); } DamageReductionManager component2 = ((Component)__instance).gameObject.GetComponent<DamageReductionManager>(); if ((Object)(object)component2 != (Object)null) { Object.Destroy((Object)(object)component2); Log.Info("[Memory模式] 移除普通DamageReductionManager组件"); } if ((Object)(object)((Component)__instance).gameObject.GetComponent<MemoryDamageReductionManager>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<MemoryDamageReductionManager>(); Log.Info("[Memory模式] 添加梦境版 MemoryDamageReductionManager 组件"); } } else { MemoryBossBehavior component3 = ((Component)__instance).gameObject.GetComponent<MemoryBossBehavior>(); if ((Object)(object)component3 != (Object)null) { Object.Destroy((Object)(object)component3); Log.Info("[普通模式] 移除梦境版 MemoryBossBehavior 组件"); } if ((Object)(object)((Component)__instance).gameObject.GetComponent<BossBehavior>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<BossBehavior>(); Log.Info("检测到没有BossBehavior组件,添加BossBehavior组件"); } MemoryDamageReductionManager component4 = ((Component)__instance).gameObject.GetComponent<MemoryDamageReductionManager>(); if ((Object)(object)component4 != (Object)null) { Object.Destroy((Object)(object)component4); Log.Info("[普通模式] 移除梦境版 MemoryDamageReductionManager 组件"); } if ((Object)(object)((Component)__instance).gameObject.GetComponent<DamageReductionManager>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<DamageReductionManager>(); Log.Info("添加DamageReductionManager组件,启用动态减伤系统"); } } } private static void HandleStunControl(PlayMakerFSM __instance) { if (MemoryManager.IsInMemoryMode) { StunControlBehavior component = ((Component)__instance).gameObject.GetComponent<StunControlBehavior>(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); Log.Info("[Memory模式] 移除普通StunControlBehavior组件"); } if ((Object)(object)((Component)__instance).gameObject.GetComponent<MemoryStunControlBehavior>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<MemoryStunControlBehavior>(); Log.Info("[Memory模式] 添加梦境版 MemoryStunControlBehavior 组件"); } } else { MemoryStunControlBehavior component2 = ((Component)__instance).gameObject.GetComponent<MemoryStunControlBehavior>(); if ((Object)(object)component2 != (Object)null) { Object.Destroy((Object)(object)component2); Log.Info("[普通模式] 移除梦境版 MemoryStunControlBehavior 组件"); } if ((Object)(object)((Component)__instance).gameObject.GetComponent<StunControlBehavior>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<StunControlBehavior>(); Log.Info("检测到没有StunControlBehavior组件,添加StunControlBehavior组件"); } } } private static void HandlePhaseControl(PlayMakerFSM __instance) { if (MemoryManager.IsInMemoryMode) { PhaseControlBehavior component = ((Component)__instance).gameObject.GetComponent<PhaseControlBehavior>(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); Log.Info("[Memory模式] 移除普通 PhaseControlBehavior 组件"); } if ((Object)(object)((Component)__instance).gameObject.GetComponent<MemoryPhaseControlBehavior>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<MemoryPhaseControlBehavior>(); Log.Info("[Memory模式] 添加梦境版 MemoryPhaseControl 组件"); } } else { MemoryPhaseControlBehavior component2 = ((Component)__instance).gameObject.GetComponent<MemoryPhaseControlBehavior>(); if ((Object)(object)component2 != (Object)null) { Object.Destroy((Object)(object)component2); Log.Info("[普通模式] 移除梦境版 MemoryPhaseControl 组件"); } if ((Object)(object)((Component)__instance).gameObject.GetComponent<PhaseControlBehavior>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<PhaseControlBehavior>(); Log.Info("[普通模式] 添加 PhaseControlBehavior 组件"); } } } private static void HandleAttackControl(PlayMakerFSM __instance) { if (MemoryManager.IsInMemoryMode) { AttackControlBehavior component = ((Component)__instance).gameObject.GetComponent<AttackControlBehavior>(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); Log.Info("[Memory模式] 移除普通 AttackControlBehavior 组件"); } if ((Object)(object)((Component)__instance).gameObject.GetComponent<MemoryAttackControlBehavior>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<MemoryAttackControlBehavior>(); Log.Info("[Memory模式] 添加梦境版 MemoryAttackControlBehavior 组件"); } } else { MemoryAttackControlBehavior component2 = ((Component)__instance).gameObject.GetComponent<MemoryAttackControlBehavior>(); if ((Object)(object)component2 != (Object)null) { Object.Destroy((Object)(object)component2); Log.Info("[普通模式] 移除梦境版 MemoryAttackControlBehavior 组件"); } if ((Object)(object)((Component)__instance).gameObject.GetComponent<AttackControlBehavior>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<AttackControlBehavior>(); Log.Info("检测到没有AttackControlBehavior组件,添加AttackControlBehavior组件"); } } } private static void HandleRubbleField(PlayMakerFSM __instance) { if ((Object)(object)((Component)__instance).gameObject.GetComponent<RubbleFieldBehavior>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<RubbleFieldBehavior>(); Log.Info("检测到没有RubbleFieldBehavior组件,添加RubbleFieldBehavior组件"); } } private static void HandleSilkBoulder(PlayMakerFSM __instance) { if ((Object)(object)((Component)__instance).gameObject.GetComponent<RubbleRockBehavior>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<RubbleRockBehavior>(); } } } internal static class DamageReductionPatches { [HarmonyPrefix] [HarmonyPatch(typeof(HealthManager), "TakeDamage")] public static void Prefix(HealthManager __instance, ref HitInstance hitInstance) { if (((Object)((Component)__instance).gameObject).name != "Silk Boss") { return; } DamageReductionManager component = ((Component)__instance).GetComponent<DamageReductionManager>(); if ((Object)(object)component == (Object)null) { Log.Error("[减伤系统] ❌ 未找到DamageReductionManager组件!"); return; } int damageDealt = hitInstance.DamageDealt; float num = component.CalculateReductionForIncomingDamage(damageDealt); if (num <= 0f) { component.RecordReducedDamage(damageDealt); return; } float num2 = DamageReductionManager.ApplyReductionRatio(damageDealt, num); int num3 = (hitInstance.DamageDealt = Mathf.Max(1, Mathf.RoundToInt(num2))); component.RecordReducedDamage(num3); Log.Info($"[减伤系统] 原始伤害: {damageDealt} → 减伤后: {num3} (减伤率: {num:P0})"); } } [HarmonyPatch(typeof(HeroController))] internal static class HeroControllerDeathPatches { [HarmonyPostfix] [HarmonyPatch("Die")] private static void OnPlayerDiePostfix(bool nonLethal) { try { BigSilkBallManager.Instance?.ResetBigSilkBallPhaseEffects("hero death"); if ((Object)(object)DeathManager.Instance != (Object)null && MemoryManager.IsInMemoryMode && MemoryManager.IsCurrentPlayerHornet()) { Log.Info($"[DeathManager] 梦境中死亡,nonLethal={nonLethal},设置等待重生标志"); DeathManager.Instance.SetWaitingForMemoryRespawn(); } } catch (Exception ex) { Log.Error("[DeathManager] Die 补丁失败: " + ex.Message); } } } [HarmonyPatch(typeof(GameManager))] internal static class GameManagerRespawnPatches { [HarmonyPostfix] [HarmonyPatch("GetRespawnInfo")] private static void OnGetRespawnInfoPostfix(ref string scene, ref string marker) { try { if (MemoryManager.IsInMemoryMode) { if (!MemoryManager.IsCurrentPlayerHornet()) { Log.Info("[DeathManager] 非大黄蜂玩家梦境死亡,保留原重生信息: " + scene + "/" + marker); return; } string text = scene; string text2 = marker; scene = "Cradle_03"; marker = "MemoryRespawnMarker"; Log.Info("[DeathManager] 梦境模式修改重生信息: " + text + "/" + text2 + " → " + scene + "/" + marker); } } catch (Exception ex) { Log.Error("[DeathManager] GetRespawnInfo 补丁失败: " + ex.Message); } } } internal static class I18nPatches { [HarmonyPostfix] [HarmonyPatch(typeof(Language), "Get", new Type[] { typeof(string), typeof(string) })] private static void ChangeBossTitle(string key, string sheetTitle, ref string __result) { //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: 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_0065: 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_0118: Invalid comparison between Unknown and I4 //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: 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_006f: Invalid comparison between Unknown and I4 //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Invalid comparison between Unknown and I4 //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Invalid comparison between Unknown and I4 //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Invalid comparison between Unknown and I4 //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Invalid comparison between Unknown and I4 //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Invalid comparison between Unknown and I4 try { if (new Func<LanguageCode>(Language.CurrentLanguage) == null || !Plugin.IsInBossRoom) { return; } string text2; if (MemoryManager.IsInMemoryMode) { if (1 == 0) { } if (!(key == "SILK_SUPER")) { if (key == "SILK_MAIN") { LanguageCode val = Language.CurrentLanguage(); if (1 == 0) { } string text = (((int)val == 44) ? "Dawn" : (((int)val != 199) ? __result : "破晓")); if (1 == 0) { } text2 = text; } else { text2 = __result; } } else { LanguageCode val2 = Language.CurrentLanguage(); if (1 == 0) { } string text = (((int)val2 == 44) ? "Astral Oblivion" : (((int)val2 != 199) ? __result : "苍耀归墟")); if (1 == 0) { } text2 = text; } if (1 == 0) { } __result = text2; return; } if (1 == 0) { } if (!(key == "SILK_SUPER")) { if (key == "SILK_MAIN") { LanguageCode val3 = Language.CurrentLanguage(); if (1 == 0) { } string text = (((int)val3 == 44) ? "Silk" : (((int)val3 != 199) ? __result : "灵丝")); if (1 == 0) { } text2 = text; } else { text2 = __result; } } else { LanguageCode val4 = Language.CurrentLanguage(); if (1 == 0) { } string text = (((int)val4 == 44) ? "Loombinder Matriarch" : (((int)val4 != 199) ? __result : "织狱圣母")); if (1 == 0) { } text2 = text; } if (1 == 0) { } __result = text2; } catch (Exception ex) { Log.Error("Language.Get补丁执行失败: " + ex.Message); } } } [HarmonyPatch(typeof(CustomSceneManager), "UpdateSceneSettings")] internal static class MemoryCustomSceneManagerPatch { private const string TargetScene = "Cradle_03"; [HarmonyPostfix] private static void Postfix(CustomSceneManager __instance) { //IL_0033: 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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Invalid comparison between Unknown and I4 //IL_006f: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance == (Object)null || !MemoryManager.IsInMemoryMode || (Object)(object)((Component)__instance).gameObject == (Object)null) { return; } Scene scene = ((Component)__instance).gameObject.scene; if (!(((Scene)(ref scene)).name != "Cradle_03")) { if ((int)__instance.mapZone == 33) { MemoryManager.SetForceCurrentSceneMemoryFlag(value: true); return; } MapZone mapZone = __instance.mapZone; __instance.mapZone = (MapZone)33; MemoryManager.SetForceCurrentSceneMemoryFlag(value: true); CustomSceneManager.IncrementVersion(); Log.Info(string.Format("[MemoryCustomSceneManagerPatch] {0} mapZone: {1} -> {2}", "Cradle_03", mapZone, (object)(MapZone)33)); } } } [HarmonyPatch(typeof(GameManager))] internal static class MemorySceneTransitionPatch { private const string TARGET_SCENE = "Cradle_03"; private const string TRIGGER_SCENE = "Cradle_03_Destroyed"; [HarmonyPrefix] [HarmonyPatch("BeginSceneTransition")] private static bool OnBeginSceneTransition(GameManager __instance, SceneLoadInfo info) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) if (!MemoryManager.IsInMemoryMode) { return true; } Scene activeScene = SceneManager.GetActiveScene(); string name = ((Scene)(ref activeScene)).name; if (name != "Cradle_03") { return true; } if (!MemoryManager.IsCurrentPlayerHornet()) { Log.Info("[MemoryPatch] 非大黄蜂玩家允许梦境场景切换: " + name + " → " + info.SceneName); return true; } if (info.SceneName == "Menu_Title" || info.SceneName == "Quit_To_Menu" || info.SceneName == "PermaDeath" || string.IsNullOrEmpty(info.SceneName)) { return true; } if (info.SceneName == "Cradle_03_Destroyed") { return true; } if (info.SceneName == name) { Log.Info("[MemoryPatch] 允许同场景重生: " + name); return true; } Log.Info("[MemoryPatch] 拦截梦境中的场景切换: " + name + " → " + info.SceneName + ",改为退出梦境"); MemoryManager.Instance?.TriggerExitMemory(); return false; } } [HarmonyPatch(typeof(DamageEnemies), "HasBeenDamaged", new Type[] { typeof(IHitResponder) })] internal static class MemoryClashTinkPatch { [HarmonyPrefix] private static bool Prefix(DamageEnemies __instance, IHitResponder hitResponder, ref bool __result) { if (!MemoryManager.IsInMemoryMode) { return true; } HealthManager val = (HealthManager)(object)((hitResponder is HealthManager) ? hitResponder : null); if ((Object)(object)val == (Object)null) { return true; } if (((Object)((Component)val).gameObject).name != "Silk Boss") { return true; } __result = false; return false; } } [HarmonyPatch(typeof(HeroController), "NailParryRecover")] internal static class MemoryParryDownspikePatch { [HarmonyPostfix] private static void Postfix(HeroController __instance) { if (MemoryManager.IsInMemoryMode) { FieldInfo field = typeof(HeroController).GetField("allowAttackCancellingDownspikeRecovery", BindingFlags.Instance | BindingFlags.NonPublic); if (field != null) { field.SetValue(__instance, true); Log.Info("[MemoryParryDownspikePatch] 梦境模式下拼刀刷新下劈"); } } } } [HarmonyPatch(typeof(HeroController), "TakeDamage", new Type[] { typeof(GameObject), typeof(CollisionSide), typeof(int), typeof(HazardType), typeof(DamagePropertyFlags) })] internal static class HeroDamageStackPatch { [HarmonyPrefix] private static void Prefix(GameObject go, CollisionSide damageSide, ref int damageAmount, HazardType hazardType, DamagePropertyFlags damagePropertyFlags) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Invalid comparison between Unknown and I4 if (MemoryManager.IsInMemoryMode && (int)hazardType == 1 && !((Object)(object)go == (Object)null)) { DamageStackManager.DamageSourceType damageSourceType = DamageStackManager.IdentifyDamageSource(go); if (damageSourceType != 0) { int damageMultiplier = DamageStackManager.GetDamageMultiplier(damageSourceType); int num = damageAmount * damageMultiplier; DamageStackManager.RecordDamage(damageSourceType); damageAmount = num; } } } } [HarmonyPatch(typeof(ToolItemManager))] internal static class ToolItemPatches { [HarmonyPatch("SetEquippedCrest")] [HarmonyPostfix] private static void SetEquippedCrest_Postfix(string crestId) { Log.Info("[ToolItemPatches] 护符装备状态已改变: " + crestId); SilkBallManager.UpdateReaperCrestState(); } [HarmonyPatch("RefreshEquippedState")] [HarmonyPostfix] private static void RefreshEquippedState_Postfix() { Log.Info("[ToolItemPatches] 护符装备状态已刷新"); SilkBallManager.UpdateReaperCrestState(); } [HarmonyPatch("SendEquippedChangedEvent")] [HarmonyPostfix] private static void SendEquippedChangedEvent_Postfix(bool force) { Log.Info("[ToolItemPatches] 护符装备变更事件已发送"); SilkBallManager.UpdateReaperCrestState(); } } } namespace AnySilkBoss.Source.Managers { internal sealed class AssetManager : MonoBehaviour { private class AssetConfig { public string? BundleName { get; set; } public string? ObjectPath { get; set; } } [CompilerGenerated] private sealed class <LoadAssetAsync>d__26 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public string assetName; public AssetManager <>4__this; private AssetConfig <config>5__1; private Object <cached>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LoadAssetAsync>d__26(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <config>5__1 = null; <cached>5__2 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (string.IsNullOrEmpty(assetName)) { Log.Error("[AssetManager] 资源名称不能为空"); return false; } if (!_assetConfig.TryGetValue(assetName, out <config>5__1)) { Log.Error("[AssetManager] 未配置的资源: '" + assetName + "'。请在 AssetManager._assetConfig 中显式声明。"); return false; } if (<config>5__1.BundleName == null) { Log.Debug("[AssetManager] '" + assetName + "' 是全局资源,直接同步获取"); return false; } if (<>4__this._externalAssetCache.TryGetValue(assetName, out <cached>5__2) && <cached>5__2 != (Object)null) { Log.Debug("[AssetManager] 资源 '" + assetName + "' 已在缓存中"); return false; } if (<>4__this._loadingAssets.Contains(assetName)) { Log.Debug("[AssetManager] 资源 '" + assetName + "' 正在加载中,等待完成..."); goto IL_0166; } <>4__this._loadingAssets.Add(assetName); if (<config>5__1.ObjectPath == null) { <>2__current = <>4__this.LoadFromExternalBundle(assetName, <config>5__1.BundleName); <>1__state = 2; return true; } <>2__current = <>4__this.LoadFromSceneBundle(assetName, <config>5__1.BundleName, <config>5__1.ObjectPath); <>1__state = 3; return true; case 1: <>1__state = -1; goto IL_0166; case 2: <>1__state = -1; break; case 3: { <>1__state = -1; break; } IL_0166: if (<>4__this._loadingAssets.Contains(assetName)) { <>2__current = null; <>1__state = 1; return true; } return false; } <>4__this._loadingAssets.Remove(assetName); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <LoadAssetsAsync>d__28 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public string[] assetNames; public AssetManager <>4__this; private Dictionary<string, List<string>> <groupedByBundle>5__1; private string[] <>s__2; private int <>s__3; private string <assetName>5__4; private AssetConfig <config>5__5; private Dictionary<string, List<string>>.Enumerator <>s__6; private KeyValuePair<string, List<string>> <group>5__7; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LoadAssetsAsync>d__28(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { int num = <>1__state; if (num == -3 || num == 1) { try { } finally { <>m__Finally1(); } } <groupedByBundle>5__1 = null; <>s__2 = null; <assetName>5__4 = null; <config>5__5 = null; <>s__6 = default(Dictionary<string, List<string>>.Enumerator); <group>5__7 = default(KeyValuePair<string, List<string>>); <>1__state = -2; } private bool MoveNext() { try { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <groupedByBundle>5__1 = new Dictionary<string, List<string>>(); <>s__2 = assetNames; for (<>s__3 = 0; <>s__3 < <>s__2.Length; <>s__3++) { <assetName>5__4 = <>s__2[<>s__3]; if (_assetConfig.TryGetValue(<assetName>5__4, out <config>5__5) && <config>5__5.BundleName != null && !<>4__this.IsAssetLoaded(<assetName>5__4) && !<>4__this.IsAssetLoading(<assetName>5__4)) { if (!<groupedByBundle>5__1.ContainsKey(<config>5__5.BundleName)) { <groupedByBundle>5__1[<config>5__5.BundleName] = new List<string>(); } <groupedByBundle>5__1[<config>5__5.BundleName].Add(<assetName>5__4); <config>5__5 = null; <assetName>5__4 = null; } } <>s__2 = null; <>s__6 = <groupedByBundle>5__1.GetEnumerator(); <>1__state = -3; break; case 1: <>1__state = -3; <group>5__7 = default(KeyValuePair<string, List<string>>); break; } if (<>s__6.MoveNext()) { <group>5__7 = <>s__6.Current; <>2__current = <>4__this.LoadFromBundleBatch(<group>5__7.Key, <group>5__7.Value); <>1__state = 1; return true; } <>m__Finally1(); <>s__6 = default(Dictionary<string, List<string>>.Enumerator); return false; } catch { //try-fault ((IDisposable)this).Dispose(); throw; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } private void <>m__Finally1() { <>1__state = -1; ((IDisposable)<>s__6).Dispose(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <LoadFromBundleBatch>d__34 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public string bundleName; public List<string> assetNames; public AssetManager <>4__this; private List<string> <exactMatchAssets>5__1; private List<string> <scenePathAssets>5__2; private string <bundlePath>5__3; private AssetBundle <bundle>5__4; private List<string>.Enumerator <>s__5; private string <name>5__6; private List<string>.Enumerator <>s__7; private string <assetName>5__8; private AssetConfig <config>5__9; private List<string>.Enumerator <>s__10; private string <name>5__11; private List<string>.Enumerator <>s__12; private string <name>5__13; private string[] <bundleAssetPaths>5__14; private List<string>.Enumerator <>s__15; private string <assetName>5__16; private string[] <>s__17; private int <>s__18; private string <assetPath>5__19; private string <currentAssetName>5__20; private Object <asset>5__21; private GameObject <go>5__22; private bool <wasActive>5__23; private GameObject <copy>5__24; private string <sceneName>5__25; private string[] <scenePaths>5__26; private string <sceneToLoad>5__27; private GameObject <tempCamera>5__28; private AsyncOperation <loadOp>5__29; private Scene <scene>5__30; private AsyncOperation <unloadOp>5__31; private List<string>.Enumerator <>s__32; private string <assetName>5__33; private AssetConfig <config>5__34; private GameObject <sourceObject>5__35; private GameObject <copy>5__36; private List<string>.Enumerator <>s__37; private string <name>5__38; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LoadFromBundleBatch>d__34(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <exactMatchAssets>5__1 = null; <scenePathAssets>5__2 = null; <bundlePath>5__3 = null; <bundle>5__4 = null; <>s__5 = default(List<string>.Enumerator); <name>5__6 = null; <>s__7 = default(List<string>.Enumerator); <assetName>5__8 = null; <config>5__9 = null; <>s__10 = default(List<string>.Enumerator); <name>5__11 = null; <>s__12 = default(List<string>.Enumerator); <name>5__13 = null; <bundleAssetPaths>5__14 = null; <>s__15 = default(List<string>.Enumerator); <assetName>5__16 = null; <>s__17 = null; <assetPath>5__19 = null; <currentAssetName>5__20 = null; <asset>5__21 = null; <go>5__22 = null; <copy>5__24 = null; <sceneName>5__25 = null; <scenePaths>5__26 = null; <sceneToLoad>5__27 = null; <tempCamera>5__28 = null; <loadOp>5__29 = null; <unloadOp>5__31 = null; <>s__32 = default(List<string>.Enumerator); <assetName>5__33 = null; <config>5__34 = null; <sourceObject>5__35 = null; <copy>5__36 = null; <>s__37 = default(List<string>.Enumerator); <name>5__38 = null; <>1__state = -2; } private bool MoveNext() { //IL_064d: Unknown result type (might be due to invalid IL or missing references) //IL_0652: Unknown result type (might be due to invalid IL or missing references) //IL_0678: Unknown result type (might be due to invalid IL or missing references) //IL_067d: Unknown result type (might be due to invalid IL or missing references) //IL_06da: Unknown result type (might be due to invalid IL or missing references) //IL_072c: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>s__5 = assetNames.GetEnumerator(); try { while (<>s__5.MoveNext()) { <name>5__6 = <>s__5.Current; <>4__this._loadingAssets.Add(<name>5__6); <name>5__6 = null; } } finally { ((IDisposable)<>s__5).Dispose(); } <>s__5 = default(List<string>.Enumerator); <exactMatchAssets>5__1 = new List<string>(); <scenePathAssets>5__2 = new List<string>(); <>s__7 = assetNames.GetEnumerator(); try { while (<>s__7.MoveNext()) { <assetName>5__8 = <>s__7.Current; <config>5__9 = _assetConfig[<assetName>5__8]; if (<config>5__9.ObjectPath == null) { <exactMatchAssets>5__1.Add(<assetName>5__8); } else { <scenePathAssets>5__2.Add(<assetName>5__8); } <config>5__9 = null; <assetName>5__8 = null; } } finally { ((IDisposable)<>s__7).Dispose(); } <>s__7 = default(List<string>.Enumerator); <bundlePath>5__3 = Path.Combine(BundleRootFolder, bundleName); if (!File.Exists(<bundlePath>5__3)) { Log.Error("[AssetManager] Bundle 文件不存在: " + <bundlePath>5__3); <>s__10 = assetNames.GetEnumerator(); try { while (<>s__10.MoveNext()) { <name>5__11 = <>s__10.Current; <>4__this._loadingAssets.Remove(<name>5__11); <name>5__11 = null; } } finally { ((IDisposable)<>s__10).Dispose(); } <>s__10 = default(List<string>.Enumerator); return false; } <bundle>5__4 = AssetBundle.LoadFromFile(<bundlePath>5__3); if ((Object)(object)<bundle>5__4 == (Object)null) { Log.Error("[AssetManager] 无法加载 Bundle: " + <bundlePath>5__3); <>s__12 = assetNames.GetEnumerator(); try { while (<>s__12.MoveNext()) { <name>5__13 = <>s__12.Current; <>4__this._loadingAssets.Remove(<name>5__13); <name>5__13 = null; } } finally { ((IDisposable)<>s__12).Dispose(); } <>s__12 = default(List<string>.Enumerator); return false; } if (<exactMatchAssets>5__1.Count > 0) { Log.Info($"[AssetManager] 从 Bundle '{bundleName}' 批量加载 {<exactMatchAssets>5__1.Count} 个精确匹配资源..."); <bundleAssetPaths>5__14 = <bundle>5__4.GetAllAssetNames(); <>s__15 = <exactMatchAssets>5__1.GetEnumerator(); try { while (<>s__15.MoveNext()) { <assetName>5__16 = <>s__15.Current; <>s__17 = <bundleAssetPaths>5__14; for (<>s__18 = 0; <>s__18 < <>s__17.Length; <>s__18++) { <assetPath>5__19 = <>s__17[<>s__18]; <currentAssetName>5__20 = Path.GetFileNameWithoutExtension(<assetPath>5__19); if (<currentAssetName>5__20.Equals(<assetName>5__16, StringComparison.OrdinalIgnoreCase)) { <asset>5__21 = <bundle>5__4.LoadAsset<Object>(<assetPath>5__19); if (<asset>5__21 != (Object)null) { ref GameObject reference = ref <go>5__22; Object obj = <asset>5__21; reference = (GameObject)(object)((obj is GameObject) ? obj : null); if (<go>5__22 != null && (Object)(object)<>4__this._assetPool != (Object)null) { <wasActive>5__23 = <go>5__22.activeSelf; <go>5__22.SetActive(false); <copy>5__24 = Object.Instantiate<GameObject>(<go>5__22); ((Object)<copy>5__24).name = <assetName>5__16 + " (Prefab)"; <go>5__22.SetActive(<wasActive>5__23); <>4__this.DisableAutoDestructComponents(<copy>5__24); <copy>5__24.transform.SetParent(<>4__this._assetPool.transform); <>4__this._externalAssetCache[<assetName>5__16] = (Object)(object)<copy>5__24; <copy>5__24 = null; } else { <>4__this._externalAssetCache[<assetName>5__16] = <asset>5__21; } Log.Info("[AssetManager] 资源 '" + <assetName>5__16 + "' 加载成功"); <go>5__22 = null; } break; } <currentAssetName>5__20 = null; <assetPath>5__19 = null; } <>s__17 = null; <assetName>5__16 = null; } } finally { ((IDisposable)<>s__15).Dispose(); } <>s__15 = default(List<string>.Enumerator); <bundleAssetPaths>5__14 = null; } if (<scenePathAssets>5__2.Count > 0) { Log.Info($"[AssetManager] 从场景 Bundle '{bundleName}' 批量加载 {<scenePathAssets>5__2.Count} 个场景对象..."); <sceneName>5__25 = Path.GetFileNameWithoutExtension(bundleName); <scenePaths>5__26 = <bundle>5__4.GetAllScenePaths(); <sceneToLoad>5__27 = <sceneName>5__25; if (<scenePaths>5__26.Length != 0) { <sceneToLoad>5__27 = <scenePaths>5__26[0]; } <tempCamera>5__28 = <>4__this.CreateTempCamera(); <loadOp>5__29 = SceneManager.LoadSceneAsync(<sceneToLoad>5__27, (LoadSceneMode)1); <>2__current = <loadOp>5__29; <>1__state = 1; return true; } break; case 1: <>1__state = -1; <scene>5__30 = SceneManager.GetSceneByPath(<sceneToLoad>5__27); if (!((Scene)(ref <scene>5__30)).IsValid()) { <scene>5__30 = SceneManager.GetSceneByName(Path.GetFileNameWithoutExtension(<sceneToLoad>5__27)); } if (!((Scene)(ref <scene>5__30)).isLoaded) { Log.Error("[AssetManager] 场景加载失败: " + <sceneToLoad>5__27); if ((Object)(object)<tempCamera>5__28 != (Object)null) { Object.Destroy((Object)(object)<tempCamera>5__28); } goto IL_08f0; } <>4__this.DisableProblematicComponents(<scene>5__30); <>s__32 = <scenePathAssets>5__2.GetEnumerator(); try { while (<>s__32.MoveNext()) { <assetName>5__33 = <>s__32.Current; <config>5__34 = _assetConfig[<assetName>5__33]; <sourceObject>5__35 = <>4__this.FindObjectInScene(<scene>5__30, <config>5__34.ObjectPath); if ((Object)(object)<sourceObject>5__35 == (Object)null) { Log.Error("[AssetManager] 在场景 '" + <sceneName>5__25 + "' 中未找到对象 '" + <config>5__34.ObjectPath + "'"); continue; } <copy>5__36 = Object.Instantiate<GameObject>(<sourceObject>5__35); ((Object)<copy>5__36).name = <assetName>5__33 + " (Prefab)"; <copy>5__36.SetActive(false); if ((Object)(object)<>4__this._assetPool != (Object)null) { <copy>5__36.transform.SetParent(<>4__this._assetPool.transform); } <>4__this._externalAssetCache[<assetName>5__33] = (Object)(object)<copy>5__36; Log.Info("[AssetManager] 场景对象 '" + <assetName>5__33 + "' 加载成功"); <config>5__34 = null; <sourceObject>5__35 = null; <copy>5__36 = null; <assetName>5__33 = null; } } finally { ((IDisposable)<>s__32).Dispose(); } <>s__32 = default(List<string>.Enumerator); <unloadOp>5__31 = SceneManager.UnloadSceneAsync(((Scene)(ref <scene>5__30)).name); <>2__current = <unloadOp>5__31; <>1__state = 2; return true; case 2: { <>1__state = -1; if ((Object)(object)<tempCamera>5__28 != (Object)null) { Object.Destroy((Object)(object)<tempCamera>5__28); } <unloadOp>5__31 = null; goto IL_08f0; } IL_08f0: <sceneName>5__25 = null; <scenePaths>5__26 = null; <sceneToLoad>5__27 = null; <tempCamera>5__28 = null; <loadOp>5__29 = null; break; } <bundle>5__4.Unload(false); <>s__37 = assetNames.GetEnumerator(); try { while (<>s__37.MoveNext()) { <name>5__38 = <>s__37.Current; <>4__this._loadingAssets.Remove(<name>5__38); <name>5__38 = null; } } finally { ((IDisposable)<>s__37).Dispose(); } <>s__37 = default(List<string>.Enumerator); Log.Info("[AssetManager] Bundle '" + bundleName + "' 批量加载完成"); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <LoadFromExternalBundle>d__32 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public string assetName; public string bundleName; public AssetManager <>4__this; private string <bundlePath>5__1; private AssetBundle <bundle>5__2; private string[] <assetPaths>5__3; private string[] <>s__4; private int <>s__5; private string <assetPath>5__6; private string <currentAssetName>5__7; private Object <asset>5__8; private GameObject <go>5__9; private bool <wasActive>5__10; private GameObject <copy>5__11; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LoadFromExternalBundle>d__32(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <bundlePath>5__1 = null; <bundle>5__2 = null; <assetPaths>5__3 = null; <>s__4 = null; <assetPath>5__6 = null; <currentAssetName>5__7 = null; <asset>5__8 = null; <go>5__9 = null; <copy>5__11 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; Log.Info("[AssetManager] 从 Bundle '" + bundleName + "' 加载资源: " + assetName); <bundlePath>5__1 = Path.Combine(BundleRootFolder, bundleName); if (!File.Exists(<bundlePath>5__1)) { Log.Error("[AssetManager] Bundle 文件不存在: " + <bundlePath>5__1); return false; } <bundle>5__2 = AssetBundle.LoadFromFile(<bundlePath>5__1); if ((Object)(object)<bundle>5__2 == (Object)null) { Log.Error("[AssetManager] 无法加载 Bundle: " + <bundlePath>5__1); return false; } try { <assetPaths>5__3 = <bundle>5__2.GetAllAssetNames(); <>s__4 = <assetPaths>5__3; for (<>s__5 = 0; <>s__5 < <>s__4.Length; <>s__5++) { <assetPath>5__6 = <>s__4[<>s__5]; <currentAssetName>5__7 = Path.GetFileNameWithoutExtension(<assetPath>5__6); if (<currentAssetName>5__7.Equals(assetName, StringComparison.OrdinalIgnoreCase)) { <asset>5__8 = <bundle>5__2.LoadAsset<Object>(<assetPath>5__6); if (<asset>5__8 != (Object)null) { ref GameObject reference = ref <go>5__9; Object obj = <asset>5__8; reference = (GameObject)(object)((obj is GameObject) ? obj : null); if (<go>5__9 != null && (Object)(object)<>4__this._assetPool != (Object)null) { <wasActive>5__10 = <go>5__9.activeSelf; <go>5__9.SetActive(false); <copy>5__11 = Object.Instantiate<GameObject>(<go>5__9); ((Object)<copy>5__11).name = assetName + " (Prefab)"; <go>5__9.SetActive(<wasActive>5__10); <>4__this.DisableAutoDestructComponents(<copy>5__11); <copy>5__11.transform.SetParent(<>4__this._assetPool.transform); <>4__this._externalAssetCache[assetName] = (Object)(object)<copy>5__11; <copy>5__11 = null; } else { <>4__this._externalAssetCache[assetName] = <asset>5__8; } Log.Info("[AssetManager] 资源 '" + assetName + "' 加载成功并已持久化"); break; } <asset>5__8 = null; } <currentAssetName>5__7 = null; <assetPath>5__6 = null; } <>s__4 = null; <assetPaths>5__3 = null; } finally { <bundle>5__2.Unload(false); } <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <LoadFromSceneBundle>d__33 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public string assetName; public string bundleName; public string objectPath; public AssetManager <>4__this; private string <bundlePath>5__1; private AssetBundle <bundle>5__2; private string <sceneName>5__3; private string[] <scenePaths>5__4; private string <sceneToLoad>5__5; private GameObject <tempCamera>5__6; private AsyncOperation <loadOp>5__7; private Scene <scene>5__8; private GameObject <sourceObject>5__9; private AsyncOperation <unloadOp>5__10; private GameObject <copy>5__11; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LoadFromSceneBundle>d__33(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <bundlePath>5__1 = null; <bundle>5__2 = null; <sceneName>5__3 = null; <scenePaths>5__4 = null; <sceneToLoad>5__5 = null; <tempCamera>5__6 = null; <loadOp>5__7 = null; <sourceObject>5__9 = null; <unloadOp>5__10 = null; <copy>5__11 = null; <>1__state = -2; } private bool MoveNext() { //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; Log.Info("[AssetManager] 从场景 Bundle '" + bundleName + "' 加载对象: " + assetName + " (路径: " + objectPath + ")"); <bundlePath>5__1 = Path.Combine(BundleRootFolder, bundleName); if (!File.Exists(<bundlePath>5__1)) { Log.Error("[AssetManager] 场景 Bundle 文件不存在: " + <bundlePath>5__1); return false; } <bundle>5__2 = AssetBundle.LoadFromFile(<bundlePath>5__1); if ((Object)(object)<bundle>5__2 == (Object)null) { Log.Error("[AssetManager] 无法加载场景 Bundle: " + <bundlePath>5__1); return false; } <sceneName>5__3 = Path.GetFileNameWithoutExtension(bundleName); <scenePaths>5__4 = <bundle>5__2.GetAllScenePaths(); <sceneToLoad>5__5 = <sceneName>5__3; if (<scenePaths>5__4.Length != 0) { <sceneToLoad>5__5 = <scenePaths>5__4[0]; } <tempCamera>5__6 = <>4__this.CreateTempCamera(); <loadOp>5__7 = SceneManager.LoadSceneAsync(<sceneToLoad>5__5, (LoadSceneMode)1); <>2__current = <loadOp>5__7; <>1__state = 1; return true; case 1: <>1__state = -1; <scene>5__8 = SceneManager.GetSceneByPath(<sceneToLoad>5__5); if (!((Scene)(ref <scene>5__8)).IsValid()) { <scene>5__8 = SceneManager.GetSceneByName(Path.GetFileNameWithoutExtension(<sceneToLoad>5__5)); } if (!((Scene)(ref <scene>5__8)).isLoaded) { Log.Error("[AssetManager] 场景加载失败: " + <sceneToLoad>5__5); <bundle>5__2.Unload(true); if ((Object)(object)<tempCamera>5__6 != (Object)null) { Object.Destroy((Object)(object)<tempCamera>5__6); } return false; } <>4__this.DisableProblematicComponents(<scene>5__8); <sourceObject>5__9 = <>4__this.FindObjectInScene(<scene>5__8, objectPath); if ((Object)(object)<sourceObject>5__9 != (Object)null) { <copy>5__11 = Object.Instantiate<GameObject>(<sourceObject>5__9); ((Object)<copy>5__11).name = assetName + " (Prefab)"; <copy>5__11.SetActive(false); if ((Object)(object)<>4__this._assetPool != (Object)null) { <copy>5__11.transform.SetParent(<>4__this._assetPool.transform); } <>4__this._externalAssetCache[assetName] = (Object)(object)<copy>5__11; Log.Info("[AssetManager] 场景对象 '" + assetName + "' 加载成功并已持久化"); <copy>5__11 = null; } else { Log.Error("[AssetManager] 在场景 '" + <sceneName>5__3 + "' 中未找到对象 '" + objectPath + "'"); } <unloadOp>5__10 = SceneManager.UnloadSceneAsync(((Scene)(ref <scene>5__8)).name); <>2__current = <unloadOp>5__10; <>1__state = 2; return true; case 2: <>1__state = -1; <bundle>5__2.Unload(false); if ((Object)(object)<tempCamera>5__6 != (Object)null) { Object.Destroy((Object)(object)<tempCamera>5__6); } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <LoadSceneObjectAsync>d__27 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public string assetName; public AssetManager <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LoadSceneObjectAsync>d__27(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = <>4__this.LoadAssetAsync(assetName); <>1__state = 1; return true; case 1: <>1__state = -1; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <LoadSceneObjectsAsync>d__29 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public string[] assetNames; public AssetManager <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LoadSceneObjectsAsync>d__29(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = <>4__this.LoadAssetsAsync(assetNames); <>1__state = 1; return true; case 1: <>1__state = -1; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <PreloadAllExternalAssets>d__13 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public AssetManager <>4__this; private List<string> <externalAssets>5__1; private int <loadedCount>5__2; private int <failedCount>5__3; private Dictionary<string, AssetConfig>.Enumerator <>s__4; private KeyValuePair<string, AssetConfig> <kvp>5__5; private List<string>.Enumerator <>s__6; private string <assetName>5__7; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <PreloadAllExternalAssets>d__13(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <externalAssets>5__1 = null; <>s__4 = default(Dictionary<string, AssetConfig>.Enumerator); <kvp>5__5 = default(KeyValuePair<string, AssetConfig>); <>s__6 = default(List<string>.Enumerator); <assetName>5__7 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (<>4__this._externalAssetsPreloaded || <>4__this._preloadingExternalAssets) { Log.Debug("[AssetManager] 外部资源已预加载或正在预加载,跳过"); goto IL_0074; } <>4__this._preloadingExternalAssets = true; Log.Info("[AssetManager] 开始预加载所有外部资源..."); <externalAssets>5__1 = new List<string>(); <>s__4 = _assetConfig.GetEnumerator(); try { while (<>s__4.MoveNext()) { <kvp>5__5 = <>s__4.Current; if (<kvp>5__5.Value.BundleName != null) { <externalAssets>5__1.Add(<kvp>5__5.Key); } <kvp>5__5 = default(KeyValuePair<string, AssetConfig>); } } finally { ((IDisposable)<>s__4).Dispose(); } <>s__4 = default(Dictionary<string, AssetConfig>.Enumerator); if (<externalAssets>5__1.Count == 0) { Log.Info("[AssetManager] 没有需要预加载的外部资源"); <>4__this._externalAssetsPreloaded = true; <>4__this._preloadingExternalAssets = false; return false; } Log.Info(string.Format("[AssetManager] 需要预加载 {0} 个外部资源: {1}", <externalAssets>5__1.Count, string.Join(", ", <externalAssets>5__1))); <>2__current = <>4__this.LoadAssetsAsync(<externalAssets>5__1.ToArray()); <>1__state = 2; return true; case 1: <>1__state = -1; goto IL_0074; case 2: { <>1__state = -1; <loadedCount>5__2 = 0; <failedCount>5__3 = 0; <>s__6 = <externalAssets>5__1.GetEnumerator(); try { while (<>s__6.MoveNext()) { <assetName>5__7 = <>s__6.Current; if (<>4__this.IsAssetLoaded(<assetName>5__7)) { <loadedCount>5__2++; } else { <failedCount>5__3++; Log.Warn("[AssetManager] 预加载失败: " + <assetName>5__7); } <assetName>5__7 = null; } } finally { ((IDisposable)<>s__6).Dispose(); } <>s__6 = default(List<string>.Enumerator); <>4__this._externalAssetsPreloaded = true; <>4__this._preloadingExternalAssets = false; Log.Info($"[AssetManager] 外部资源预加载完成: 成功 {<loadedCount>5__2},失败 {<failedCount>5__3}"); return false; } IL_0074: if (<>4__this._preloadingExternalAssets) { <>2__current = null; <>1__state = 1; return true; } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <WaitForPreload>d__14 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public AssetManager <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <WaitForPreload>d__14(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } if (!<>4__this._externalAssetsPreloaded) { <>2__current = null; <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static readonly Dictionary<string, AssetConfig> _assetConfig = new Dictionary<string, AssetConfig> { { "Reaper Silk Bundle", new AssetConfig { BundleName = null } }, { "Abyss Bullet", new AssetConfig { BundleName = null } }, { "lace_circle_slash", new AssetConfig { BundleName = "localpoolprefabs_assets_laceboss.bundle" } }, { "First Weaver Anim", new AssetConfig { BundleName = "tk2danimations_assets_areaslab.bundle" } }, { "First Weaver Cln", new AssetConfig { BundleName = "tk2dcollections_assets_areaslab.bundle" } }, { "First Weaver Bomb Blast", new AssetConfig { BundleName = "localpoolprefabs_assets_areaslab.bundle" } }, { "focus_blast_first_weaver", new AssetConfig { BundleName = "animations_assets_areaslab.bundle" } }, { "FW Pin Projectile", new AssetConfig { BundleName = "scenes_scenes_scenes/slab_10b.bundle", ObjectPath = "Boss Scene/Pin Projectiles/FW Pin Projectile (3)" } } }; private static readonly string BundleRootFolder; private readonly Dictionary<(Type, string), Object> _globalBundleCache = new Dictionary<(Type, string), Object>(); private readonly Dictionary<string, Object> _externalAssetCache = new Dictionary<string, Object>(); private GameObject? _assetPool; private bool _initialized = false; private readonly HashSet<string> _loadingAssets = new HashSet<string>(); private bool _externalAssetsPreloaded = false; private bool _preloadingExternalAssets = false; public bool IsExternalAssetsPreloaded => _externalAssetsPreloaded; private void Awake() { CreateAssetPool(); _initialized = true; Log.Info("[AssetManager] 已初始化(统一持久化缓存架构)"); } [IteratorStateMachine(typeof(<PreloadAllExternalAssets>d__13))] public IEnumerator PreloadAllExternalAssets() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <PreloadAllExternalAssets>d__13(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<WaitForPreload>d__14))] public IEnumerator WaitForPreload() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <WaitForPreload>d__14(0) { <>4__this = this }; } private void CreateAssetPool() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown if ((Object)(object)_assetPool == (Object)null) { _assetPool = new GameObject("AssetPool"); _assetPool.transform.SetParent(((Component)this).transform); _assetPool.SetActive(false); Log.Info("[AssetManager] AssetPool 容器已创建"); } } private void OnEnable() { SceneManager.sceneLoaded += OnSceneLoaded; } private void OnDisable() { SceneManager.sceneLoaded -= OnSceneLoaded; } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if (_preloadingExternalAssets) { Log.Debug("[AssetManager] 场景切换: " + ((Scene)(ref scene)).name + ",预加载中,跳过缓存清理"); return; } if ((int)mode == 1) { Log.Debug("[AssetManager] 场景切换: " + ((Scene)(ref scene)).name + "(Additive),跳过缓存清理"); return; } Log.Debug("[AssetManager] 场景切换: " + ((Scene)(ref scene)).name + ",检查缓存有效性"); CleanupInvalidCaches(); } private void CleanupInvalidCaches() { List<(Type, string)> list = new List<(Type, string)>(); foreach (KeyValuePair<(Type, string), Object> item in _globalBundleCache) { if (item.Value == (Object)null) { list.Add(item.Key); } } foreach (var item2 in list) { _globalBundleCache.Remove(item2); Log.Debug("[AssetManager] 移除失效的全局缓存: " + item2.Item2); } List<string> list2 = new List<string>(); foreach (KeyValuePair<string, Object> item3 in _externalAssetCache) { if (item3.Value == (Object)null) { list2.Add(item3.Key); } } foreach (string item4 in list2) { _externalAssetCache.Remove(item4); Log.Debug("[AssetManager] 移除失效的外部资源缓存: " + item4); } int num = list.Count + list2.Count; if (num > 0) { Log.Info($"[AssetManager] 清理了 {num} 个失效的缓存引用"); } } public T? Get<T>(string assetName) where T : Object { if (string.IsNullOrEmpty(assetName)) { Log.Error("[AssetManager] 资源名称不能为空"); return default(T); } if (!_assetConfig.TryGetValue(assetName, out AssetConfig value)) { Log.Error("[AssetManager] 未配置的资源: '" + assetName + "'。请在 AssetManager._assetConfig 中显式声明。"); return default(T); } if (value.BundleName == null) { return GetFromGlobalBundle<T>(assetName); } return GetFromExternalCache<T>(assetName); } public GameObject? GetSceneObject(string assetName) { return this.Get<GameObject>(assetName); } public bool IsAssetLoaded(string assetName) { string assetName2 = assetName; if (!_assetConfig.TryGetValue(assetName2, out AssetConfig value)) { return false; } if (value.BundleName == null) { return _globalBundleCache.Keys.Any<(Type, string)>(((Type, string) k) => k.Item2 == assetName2); } Object value2; return _externalAssetCache.TryGetValue(assetName2, out value2) && value2 != (Object)null; } public bool IsSceneObjectLoaded(string assetName) { return IsAssetLoaded(assetName); } public bool IsAssetLoading(string assetName) { return _loadingAssets.Contains(assetName); } public bool IsSceneObjectLoading(string assetName) { return IsAssetLoading(assetName); } [IteratorStateMachine(typeof(<LoadAssetAsync>d__26))] public IEnumerator LoadAssetAsync(string assetName) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LoadAssetAsync>d__26(0) { <>4__this = this, assetName = assetName }; } [IteratorStateMachine(typeof(<LoadSceneObjectAsync>d__27))] public IEnumerator LoadSceneObjectAsync(string assetName) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LoadSceneObjectAsync>d__27(0) { <>4__this = this, assetName = assetName }; } [IteratorStateMachine(typeof(<LoadAssetsAsync>d__28))] public IEnumerator LoadAssetsAsync(params string[] assetNames) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LoadAssetsAsync>d__28(0) { <>4__this = this, assetNames = assetNames }; } [IteratorStateMachine(typeof(<LoadSceneObjectsAsync>d__29))] public IEnumerator LoadSceneObjectsAsync(params string[] assetNames) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LoadSceneObjectsAsync>d__29(0) { <>4__this = this, assetNames = assetNames }; } private T? GetFromGlobalBundle<T>(string assetName) where T : Object { (Type, string) key = (typeof(T), assetName); if (_globalBundleCache.TryGetValue(key, out Object value)) { if (value != (Object)null) { Log.Debug("[AssetManager] 从全局缓存中找到资源: " + assetName); return (T)(object)((value is T) ? value : null); } _globalBundleCache.Remove(key); } foreach (AssetBundle allLoadedAssetBundle in AssetBundle.GetAllLoadedAssetBundles()) { if ((Object)(object)allLoadedAssetBundle == (Object)null) { continue; } try { string[] allAssetNames = allLoadedAssetBundle.GetAllAssetNames(); string[] array = allAssetNames; foreach (string text in array) { string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(text); if (fileNameWithoutExtension.Equals(assetName, StringComparison.OrdinalIgnoreCase)) { T val = allLoadedAssetBundle.LoadAsset<T>(text); if ((Object)(object)val != (Object)null) { _globalBundleCache[key] = (Object)(object)val; Log.Info("[AssetManager] 从全局 Bundle '" + ((Object)allLoadedAssetBundle).name + "' 加载资源: " + assetName); return val; } } } } catch (Exception ex) { Log.Error("[AssetManager] 从 Bundle '" + ((Object)allLoadedAssetBundle).name + "' 查找资源时出错: " + ex.Message); } } Log.Error("[AssetManager] 未找到全局资源: '" + assetName + "' (" + typeof(T).Name + ")"); return default(T); } private T? GetFromExternalCache<T>(string assetName) where T : Object { if (_externalAssetCache.TryGetValue(assetName, out Object value) && value != (Object)null) { T val = (T)(object)((value is T) ? value : null); if (val != null) { return val; } Log.Warn("[AssetManager] 资源 '" + assetName + "' 类型不匹配: 期望 " + typeof(T).Name + ",实际 " + ((object)value).GetType().Name); return default(T); } Log.Warn("[AssetManager] 资源 '" + assetName + "' 尚未加载,请先调用 LoadAssetAsync"); return default(T); } [IteratorStateMachine(typeof(<LoadFromExternalBundle>d__32))] private IEnumerator LoadFromExternalBundle(string assetName, string bundleName) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LoadFromExternalBundle>d__32(0) { <>4__this = this, assetName = assetName, bundleName = bundleName }; } [IteratorStateMachine(typeof(<LoadFromSceneBundle>d__33))] private IEnumerator LoadFromSceneBundle(string assetName, string bundleName, string objectPath) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LoadFromSceneBundle>d__33(0) { <>4__this = this, assetName = assetName, bundleName = bundleName, objectPath = objectPath }; } [IteratorStateMachine(typeof(<LoadFromBundleBatch>d__34))] private IEnumerator LoadFromBundleBatch(string bundleName, List<string> assetNames) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LoadFromBundleBatch>d__34(0) { <>4__this = this, bundleName = bundleName, assetNames = assetNames }; } private GameObject CreateTempCamera() { //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_0014: Unknown result type (might be due to invalid IL or missing re