From e320ce0b6249f0273a90d9ccb05c8d0d10042d3f Mon Sep 17 00:00:00 2001 From: shangfengh <3495281661@qq.com> Date: Fri, 26 May 2023 11:26:16 +0800 Subject: [PATCH] fix: :ambulance:fix the bug about interrupting of rescuing --- docs/版本更新说明.md | 6 +++++- logic/GameClass/GameObj/Character/Character.cs | 12 ++++++++++++ logic/Gaming/ActionManager.cs | 6 +++--- logic/Gaming/CharacterManager.cs | 2 +- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/docs/版本更新说明.md b/docs/版本更新说明.md index c6065cc..f29b9d2 100644 --- a/docs/版本更新说明.md +++ b/docs/版本更新说明.md @@ -84,5 +84,9 @@ - fix:修复了开校门的问题 - docs:摧毁一个TechOtaku的机器人,得50分。 +# 5月26日10:30更新 +- fix:修复了卡窗的问题 +- hotfix:修复了救人线程崩溃的问题 + # 5月26日更新 -- fix:修复了卡窗的问题 \ No newline at end of file +- fix:修复了救人中断后不继续沉迷的问题 \ No newline at end of file diff --git a/logic/GameClass/GameObj/Character/Character.cs b/logic/GameClass/GameObj/Character/Character.cs index 56a8647..77280bd 100644 --- a/logic/GameClass/GameObj/Character/Character.cs +++ b/logic/GameClass/GameObj/Character/Character.cs @@ -607,6 +607,18 @@ namespace GameClass.GameObj } } + public bool ResetPlayerStateInOneThread(long state, RunningStateType running = RunningStateType.Null, PlayerStateType value = PlayerStateType.Null, IGameObj? obj = null) + { + lock (actionLock) + { + if (state != stateNum) return false; + this.runningState = running; + whatInteractingWith = (GameObj?)obj; + playerState = value; + return true; + } + } + public bool TryToRemoveFromGame(PlayerStateType playerStateType) { lock (actionLock) diff --git a/logic/Gaming/ActionManager.cs b/logic/Gaming/ActionManager.cs index f7deca9..b71beec 100644 --- a/logic/Gaming/ActionManager.cs +++ b/logic/Gaming/ActionManager.cs @@ -307,7 +307,7 @@ namespace Gaming long stateNum = player.SetPlayerState(RunningStateType.Waiting, PlayerStateType.Rescuing); if (stateNum == -1) { - playerRescued.ResetPlayerState(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted); + playerRescued.ResetPlayerStateInOneThread(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted); return false; } @@ -319,7 +319,7 @@ namespace Gaming if (!player.StartThread(stateNum, RunningStateType.RunningActively)) { player.ThreadNum.Release(); - playerRescued.ResetPlayerState(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted); + playerRescued.ResetPlayerStateInOneThread(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted); return; } @@ -363,7 +363,7 @@ namespace Gaming playerRescued.ThreadNum.Release(); if (player.ResetPlayerState(stateNum)) return; - playerRescued.ResetPlayerState(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted); + playerRescued.ResetPlayerStateInOneThread(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted); } ) { IsBackground = true }.Start(); diff --git a/logic/Gaming/CharacterManager.cs b/logic/Gaming/CharacterManager.cs index 3f662ef..a95ca20 100644 --- a/logic/Gaming/CharacterManager.cs +++ b/logic/Gaming/CharacterManager.cs @@ -218,7 +218,7 @@ namespace Gaming public void BeAddictedToGame(Student player, Ghost ghost) { - long stateNum = player.SetPlayerState(RunningStateType.Waiting, PlayerStateType.Addicted); + long stateNum = player.SetPlayerState(RunningStateType.RunningForcibly, PlayerStateType.Addicted); if (stateNum == -1) return; if (player.CharacterType == CharacterType.Robot)