Skip to content

Commit c876b0e

Browse files
authored
fix:OneKeyEntryEnd的两个bug (#127)
1. 在1.65以上,如果开游客模式、一首歌不打直接结束PC,游戏会直接崩溃。由1.65新增的NetDataManager.GetGuestLogId函数引起,具体原因详见代码中的注释。 2. (轻微bug,不影响任何功能,只是会在控制台打印出一行Error不好看) `DoQuickSkip`调用AddProcess、尝试结束PC后,没有立即跳出循环,造成迭代器继续遍历时抛异常。
1 parent 58b8fc5 commit c876b0e

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

AquaMai.Mods/UX/OneKeyEntryEnd.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public static void DoQuickSkip()
8686
SharedInstances.ProcessDataContainer.processManager.AddProcess(new FadeProcess(SharedInstances.ProcessDataContainer, process.Process,
8787
new UnlockMusicProcess(SharedInstances.ProcessDataContainer)));
8888
}
89-
break;
89+
return; // 执行上面的AddProcess操作,会引起processList中链表中内容的改变,foreach继续遍历就会`System.InvalidOperationException: Collection was modified`. 但是反正该做的事已经做完了,所以直接return就好
9090
}
9191
}
9292

@@ -97,4 +97,16 @@ public static void DoQuickSkip()
9797
new MusicSelectProcess(SharedInstances.ProcessDataContainer)));
9898
}
9999
}
100+
101+
[EnableGameVersion(26500, noWarn: true)]
102+
[HarmonyPatch(typeof(NetDataManager), "GetGuestLogId")]
103+
[HarmonyFinalizer]
104+
public static Exception GetGuestLogIdFix(Exception __exception, ref ulong __result)
105+
{
106+
// 如果在游客模式下,一首歌都没打就跳关了:
107+
// NetDataManager.GetGuestLogId中会调用Singleton<GamePlayManager>.Instance.GetGameScore,这个函数查不到对应的GameScoreList对象,就会返回null;于是就NPE了
108+
// 我们则捕获这里的异常,返回数字0(这正是1.60之前的行为)
109+
if (__exception != null) __result = 0L;
110+
return null;
111+
}
100112
}

0 commit comments

Comments
 (0)