From a10bfe7f330fdbeb2ddc780ce545aed84942f5b4 Mon Sep 17 00:00:00 2001 From: shangfengh <3495281661@qq.com> Date: Mon, 22 May 2023 10:45:06 +0800 Subject: [PATCH] fix: :bug: fix the bug about OpenDoorWay --- logic/GameClass/GameObj/Character/Character.cs | 14 ++++++++++---- logic/Gaming/ActionManager.cs | 14 +++++++++++--- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/logic/GameClass/GameObj/Character/Character.cs b/logic/GameClass/GameObj/Character/Character.cs index 88940f2..26655d8 100644 --- a/logic/GameClass/GameObj/Character/Character.cs +++ b/logic/GameClass/GameObj/Character/Character.cs @@ -516,10 +516,16 @@ namespace GameClass.GameObj ((Chest)whatInteractingWith!).StopOpen(); return ChangePlayerState(value, gameObj); case PlayerStateType.OpeningTheDoorway: - Doorway doorway = (Doorway)whatInteractingWith!; - doorway.StopOpenning(); - return ChangePlayerState(value, gameObj); - + try + { + Doorway doorway = (Doorway)whatInteractingWith!; + doorway.StopOpenning(); + return ChangePlayerState(value, gameObj); + } + finally + { + ThreadNum.Release(); + } case PlayerStateType.OpeningTheDoor: Door door = (Door)whatInteractingWith!; try diff --git a/logic/Gaming/ActionManager.cs b/logic/Gaming/ActionManager.cs index 18b5e39..6edb986 100644 --- a/logic/Gaming/ActionManager.cs +++ b/logic/Gaming/ActionManager.cs @@ -126,8 +126,6 @@ namespace Gaming public bool OpenDoorway(Student player) { - if (!(player.Commandable())) - return false; Doorway? doorwayToOpen = (Doorway?)gameMap.OneForInteract(player.Position, GameObjType.Doorway); if (doorwayToOpen == null) return false; @@ -137,7 +135,16 @@ namespace Gaming ( () => { - //player.ThreadNum.WaitOne(); + player.ThreadNum.WaitOne(); + lock (player.ActionLock) + { + if (stateNum != player.StateNum) + { + player.ThreadNum.Release(); + return; + } + } + doorwayToOpen.TryToOpen(); Thread.Sleep(GameData.degreeOfOpenedDoorway - doorwayToOpen.OpenDegree); lock (player.ActionLock) { @@ -145,6 +152,7 @@ namespace Gaming { player.SetPlayerStateNaturally(); doorwayToOpen.FinishOpenning(); + player.ThreadNum.Release(); } } }