diff --git a/logic/Server/ArgumentOption.cs b/logic/Server/ArgumentOption.cs index c39204e..a9032c8 100644 --- a/logic/Server/ArgumentOption.cs +++ b/logic/Server/ArgumentOption.cs @@ -39,8 +39,8 @@ namespace Server [Option('f', "fileName", Required = false, HelpText = "The file to store playback file or to read file.")] public string FileName { get; set; } = DefaultArgumentOptions.FileName; - [Option('s', "allowSpectator", Required = false, HelpText = "Whether to allow a spectator to watch the game.")] - public bool AllowSpectator { get; set; } = false; + [Option("notAllowSpectator", Required = false, HelpText = "Whether to allow a spectator to watch the game.")] + public bool NotAllowSpectator { get; set; } = false; [Option('b', "playback", Required = false, HelpText = "Whether open the server in a playback mode.")] public bool Playback { get; set; } = false; diff --git a/logic/Server/GameServer.cs b/logic/Server/GameServer.cs index b81bfe7..b7e3048 100644 --- a/logic/Server/GameServer.cs +++ b/logic/Server/GameServer.cs @@ -168,6 +168,23 @@ namespace Server kvp.Value.Item2.Wait(); } } + private bool playerDeceased(int playerID) + { + game.GameMap.GameObjLockDict[GameObjType.Character].EnterReadLock(); + try + { + foreach (Character character in game.GameMap.GameObjDict[GameObjType.Character]) + { + if (character.PlayerID == playerID && character.PlayerState == PlayerStateType.Deceased) return true; + } + } + finally + { + game.GameMap.GameObjLockDict[GameObjType.Character].ExitReadLock(); + } + return false; + } + public int[] GetScore() { int[] score = new int[2]; // 0代表Student,1代表Tricker @@ -222,9 +239,6 @@ namespace Server int[] score = GetScore(); msg.StudentScore = score[0]; msg.TrickerScore = score[1]; - //msg.GateOpened - //msg.HiddenGateRefreshed - //msg.HiddenGateOpened return msg; } diff --git a/logic/Server/RpcServices.cs b/logic/Server/RpcServices.cs index 0e95b63..44de1bd 100644 --- a/logic/Server/RpcServices.cs +++ b/logic/Server/RpcServices.cs @@ -56,7 +56,7 @@ namespace Server { Console.WriteLine($"AddPlayer: {request.PlayerId}"); - if (request.PlayerId >= spectatorMinPlayerID && options.AllowSpectator == true) + if (request.PlayerId >= spectatorMinPlayerID && options.NotAllowSpectator == false) { // 观战模式 uint tp = (uint)request.PlayerId; @@ -194,7 +194,7 @@ namespace Server public override Task SendMessage(SendMsg request, ServerCallContext context) { var boolRes = new BoolRes(); - if (request.PlayerId >= spectatorMinPlayerID) + if (request.PlayerId >= spectatorMinPlayerID || playerDeceased((int)request.PlayerId)) { boolRes.ActSuccess = false; return Task.FromResult(boolRes);