| @@ -39,8 +39,8 @@ namespace Server | |||||
| [Option('f', "fileName", Required = false, HelpText = "The file to store playback file or to read file.")] | [Option('f', "fileName", Required = false, HelpText = "The file to store playback file or to read file.")] | ||||
| public string FileName { get; set; } = DefaultArgumentOptions.FileName; | 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.")] | [Option('b', "playback", Required = false, HelpText = "Whether open the server in a playback mode.")] | ||||
| public bool Playback { get; set; } = false; | public bool Playback { get; set; } = false; | ||||
| @@ -168,6 +168,23 @@ namespace Server | |||||
| kvp.Value.Item2.Wait(); | 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() | public int[] GetScore() | ||||
| { | { | ||||
| int[] score = new int[2]; // 0代表Student,1代表Tricker | int[] score = new int[2]; // 0代表Student,1代表Tricker | ||||
| @@ -222,9 +239,6 @@ namespace Server | |||||
| int[] score = GetScore(); | int[] score = GetScore(); | ||||
| msg.StudentScore = score[0]; | msg.StudentScore = score[0]; | ||||
| msg.TrickerScore = score[1]; | msg.TrickerScore = score[1]; | ||||
| //msg.GateOpened | |||||
| //msg.HiddenGateRefreshed | |||||
| //msg.HiddenGateOpened | |||||
| return msg; | return msg; | ||||
| } | } | ||||
| @@ -56,7 +56,7 @@ namespace Server | |||||
| { | { | ||||
| Console.WriteLine($"AddPlayer: {request.PlayerId}"); | Console.WriteLine($"AddPlayer: {request.PlayerId}"); | ||||
| if (request.PlayerId >= spectatorMinPlayerID && options.AllowSpectator == true) | |||||
| if (request.PlayerId >= spectatorMinPlayerID && options.NotAllowSpectator == false) | |||||
| { | { | ||||
| // 观战模式 | // 观战模式 | ||||
| uint tp = (uint)request.PlayerId; | uint tp = (uint)request.PlayerId; | ||||
| @@ -194,7 +194,7 @@ namespace Server | |||||
| public override Task<BoolRes> SendMessage(SendMsg request, ServerCallContext context) | public override Task<BoolRes> SendMessage(SendMsg request, ServerCallContext context) | ||||
| { | { | ||||
| var boolRes = new BoolRes(); | var boolRes = new BoolRes(); | ||||
| if (request.PlayerId >= spectatorMinPlayerID) | |||||
| if (request.PlayerId >= spectatorMinPlayerID || playerDeceased((int)request.PlayerId)) | |||||
| { | { | ||||
| boolRes.ActSuccess = false; | boolRes.ActSuccess = false; | ||||
| return Task.FromResult(boolRes); | return Task.FromResult(boolRes); | ||||