diff --git a/CAPI/python/requirements.txt b/CAPI/python/requirements.txt index 3f4ef6c..26f017f 100644 --- a/CAPI/python/requirements.txt +++ b/CAPI/python/requirements.txt @@ -1,3 +1,3 @@ -grpcio==1.52.0 -grpcio-tools==1.52.0 +grpcio==1.54.0 +grpcio-tools==1.54.0 numpy diff --git a/dependency/proto/Protos.csproj b/dependency/proto/Protos.csproj index 3d025bc..87fe468 100755 --- a/dependency/proto/Protos.csproj +++ b/dependency/proto/Protos.csproj @@ -18,7 +18,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/dependency/shell/run.sh b/dependency/shell/run.sh index 6a30e94..9046d3e 100644 --- a/dependency/shell/run.sh +++ b/dependency/shell/run.sh @@ -51,7 +51,7 @@ if [ -f $playback_dir/start.lock ]; then while [ $? -eq 0 ] do sleep 1 - ps -p $server_pid + ps -p $server_pid > /dev/null 2>&1 done touch $playback_dir/finish.lock echo "Finish" diff --git a/docs/使用文档.md b/docs/使用文档.md index b9f3d46..50d250c 100644 --- a/docs/使用文档.md +++ b/docs/使用文档.md @@ -170,7 +170,7 @@ start cmd /k win64\Client.exe --cl --playbackFile .\video.thuaipb --playbackSpee ## WPF简易调试界面 -![client](https://raw.githubusercontent.com/shangfengh/THUAI6/new/resource/clientsmaller.png) +![client](https://raw.githubusercontent.com/eesast/THUAI6/dev/resource/clientsmaller.png) ### 界面介绍 diff --git a/logic/Client/MainWindow.xaml b/logic/Client/MainWindow.xaml index 7046f39..6d82564 100644 --- a/logic/Client/MainWindow.xaml +++ b/logic/Client/MainWindow.xaml @@ -10,8 +10,17 @@ + + + + + + + + + diff --git a/logic/Gaming/AttackManager.cs b/logic/Gaming/AttackManager.cs index 0db4748..9b9fc1e 100644 --- a/logic/Gaming/AttackManager.cs +++ b/logic/Gaming/AttackManager.cs @@ -48,7 +48,7 @@ namespace Gaming { case GameObjType.Character: - if ((!(((Character)objBeingShot).IsGhost())) && bullet.Parent.IsGhost()) + if ((!(((Character)objBeingShot).IsGhost())) && bullet.Parent!.IsGhost()) { characterManager.BeAttacked((Student)objBeingShot, bullet); } @@ -57,7 +57,7 @@ namespace Gaming break; case GameObjType.Generator: if (bullet.CanBeBombed(GameObjType.Generator)) - ((Generator)objBeingShot).Repair(-bullet.AP * GameData.factorDamageGenerator, (Character)bullet.Parent); + ((Generator)objBeingShot).Repair(-bullet.AP * GameData.factorDamageGenerator, (Character)bullet.Parent!); break; default: break; @@ -101,12 +101,12 @@ namespace Gaming { if (objBeingShot == null) { - characterManager.BackSwing((Character)bullet.Parent, bullet.Backswing); + characterManager.BackSwing((Character)bullet.Parent!, bullet.Backswing); return; } BombObj(bullet, objBeingShot); - characterManager.BackSwing((Character)bullet.Parent, bullet.RecoveryFromHit); + characterManager.BackSwing((Character)bullet.Parent!, bullet.RecoveryFromHit); return; } @@ -122,7 +122,7 @@ namespace Gaming if (bullet.TypeOfBullet == BulletType.BombBomb && objBeingShot != null) { - bullet.Parent.BulletOfPlayer = BulletType.JumpyDumpty; + bullet.Parent!.BulletOfPlayer = BulletType.JumpyDumpty; Debugger.Output(bullet.Parent, bullet.Parent.CharacterType.ToString() + " " + bullet.Parent.BulletNum.ToString()); Attack((Character)bullet.Parent, bullet.FacingDirection.Angle() + Math.PI / 2.0); Attack((Character)bullet.Parent, bullet.FacingDirection.Angle() + Math.PI * 3.0 / 2.0); @@ -159,10 +159,10 @@ namespace Gaming if (objBeingShot == null) { - characterManager.BackSwing((Character)bullet.Parent, bullet.Backswing); + characterManager.BackSwing((Character)bullet.Parent!, bullet.Backswing); } else - characterManager.BackSwing((Character)bullet.Parent, bullet.RecoveryFromHit); + characterManager.BackSwing((Character)bullet.Parent!, bullet.RecoveryFromHit); } public bool Attack(Character player, double angle) diff --git a/logic/Gaming/CharacterManager .cs b/logic/Gaming/CharacterManager .cs index c7aefaf..2a12664 100644 --- a/logic/Gaming/CharacterManager .cs +++ b/logic/Gaming/CharacterManager .cs @@ -25,11 +25,11 @@ namespace Gaming switch (player.PlayerState) { case PlayerStateType.OpeningTheChest: - ((Chest)player.WhatInteractingWith).StopOpen(); + ((Chest)player.WhatInteractingWith!).StopOpen(); player.ChangePlayerState(value, gameObj); break; case PlayerStateType.OpeningTheDoorway: - Doorway doorway = (Doorway)player.WhatInteractingWith; + Doorway doorway = (Doorway)player.WhatInteractingWith!; doorway.OpenDegree += gameMap.Timer.nowTime() - doorway.OpenStartTime; doorway.OpenStartTime = 0; player.ChangePlayerState(value, gameObj); @@ -302,7 +302,7 @@ namespace Gaming if (character.CanBeAwed()) { if (BeStunned(character, GameData.basicStunnedTimeOfStudent)) - bullet.Parent.AddScore(GameData.TrickerScoreStudentBeStunned(GameData.basicStunnedTimeOfStudent)); + bullet.Parent!.AddScore(GameData.TrickerScoreStudentBeStunned(GameData.basicStunnedTimeOfStudent)); return true; } return false; @@ -321,7 +321,7 @@ namespace Gaming Debugger.Output(student, "is being shot!"); #endif if (student.NoHp()) return; // 原来已经死了 - if (!bullet.Parent.IsGhost()) return; + if (!bullet.Parent!.IsGhost()) return; if (student.CharacterType == CharacterType.StraightAStudent) { @@ -413,9 +413,10 @@ namespace Gaming } if (player.CharacterType == CharacterType.Robot) { - if (((Golem)player).Parent != null && ((Golem)player).Parent.CharacterType == CharacterType.TechOtaku) + var parent = ((Golem)player).Parent; + if (parent != null && parent.CharacterType == CharacterType.TechOtaku) { - ((SummonGolem)(((Golem)player).Parent.FindIActiveSkill(ActiveSkillType.SummonGolem))).GolemSummoned = null; + ((SummonGolem)(parent.FindIActiveSkill(ActiveSkillType.SummonGolem))).GolemSummoned = null; player.FindIActiveSkill(ActiveSkillType.UseRobot).IsBeingUsed = false; } return; diff --git a/logic/Server/GameServer.cs b/logic/Server/GameServer.cs index 6573e7b..17f9ce8 100644 --- a/logic/Server/GameServer.cs +++ b/logic/Server/GameServer.cs @@ -123,7 +123,7 @@ namespace Server mwr?.Flush(); if (options.ResultFileName != DefaultArgumentOptions.FileName) SaveGameResult(options.ResultFileName.EndsWith(".json") ? options.ResultFileName : options.ResultFileName + ".json"); - SendGameResult(); + // SendGameResult(); this.endGameSem.Release(); } public void ReportGame(GameState gameState, bool requiredGaming = true) diff --git a/logic/Server/RpcServices.cs b/logic/Server/RpcServices.cs index 2db93b2..30563d5 100644 --- a/logic/Server/RpcServices.cs +++ b/logic/Server/RpcServices.cs @@ -139,6 +139,7 @@ namespace Server if (start) StartGame(); } + bool exitFlag = false; do { semaDict[request.PlayerId].Item1.Wait(); @@ -152,7 +153,11 @@ namespace Server } catch (Exception) { - //Console.WriteLine(ex); + if (!exitFlag) + { + Console.WriteLine($"The client {request.PlayerId} exited"); + exitFlag = true; + } } finally { @@ -219,30 +224,67 @@ namespace Server boolRes.ActSuccess = false; return Task.FromResult(boolRes); } - if (request.Message.Length > 256) + + switch (request.MessageCase) { + case SendMsg.MessageOneofCase.TextMessage: + { + if (request.TextMessage.Length > 256) + { #if DEBUG - Console.WriteLine("Message string is too long!"); + Console.WriteLine("Text message string is too long!"); #endif - boolRes.ActSuccess = false; - return Task.FromResult(boolRes); - } - else - { - MessageOfNews news = new(); - news.News = request.Message; - news.FromId = request.PlayerId; - news.ToId = request.ToPlayerId; - lock (newsLock) - { - currentNews.Add(news); - } + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } + MessageOfNews news = new(); + news.TextMessage = request.TextMessage; + news.FromId = request.PlayerId; + news.ToId = request.ToPlayerId; + lock (newsLock) + { + currentNews.Add(news); + } #if DEBUG - Console.WriteLine(news.News); + Console.WriteLine(news.TextMessage); #endif + boolRes.ActSuccess = true; + return Task.FromResult(boolRes); + } + case SendMsg.MessageOneofCase.BinaryMessage: + { + + if (request.BinaryMessage.Length > 256) + { +#if DEBUG + Console.WriteLine("Binary message string is too long!"); +#endif + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } + MessageOfNews news = new(); + news.BinaryMessage = request.BinaryMessage; + news.FromId = request.PlayerId; + news.ToId = request.ToPlayerId; + lock (newsLock) + { + currentNews.Add(news); + } +#if DEBUG + Console.Write("BinaryMessageLength: "); + Console.WriteLine(news.BinaryMessage.Length); +#endif + boolRes.ActSuccess = true; + return Task.FromResult(boolRes); + } + default: + { + boolRes.ActSuccess = false; + return Task.FromResult(boolRes); + } } - boolRes.ActSuccess = true; - return Task.FromResult(boolRes); + + } public override Task PickProp(PropMsg request, ServerCallContext context) { diff --git a/logic/Server/Server.csproj b/logic/Server/Server.csproj index 43c37b5..25d1f5c 100644 --- a/logic/Server/Server.csproj +++ b/logic/Server/Server.csproj @@ -13,7 +13,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive