Browse Source

Merge branch 'dev' of github.com:DragonAura/THUAI6 into dev

tags/0.1.0^2^2
DragonAura 2 years ago
parent
commit
ef06d5d1b1
10 changed files with 91 additions and 39 deletions
  1. +2
    -2
      CAPI/python/requirements.txt
  2. +1
    -1
      dependency/proto/Protos.csproj
  3. +1
    -1
      dependency/shell/run.sh
  4. +1
    -1
      docs/使用文档.md
  5. +9
    -0
      logic/Client/MainWindow.xaml
  6. +7
    -7
      logic/Gaming/AttackManager.cs
  7. +7
    -6
      logic/Gaming/CharacterManager .cs
  8. +1
    -1
      logic/Server/GameServer.cs
  9. +61
    -19
      logic/Server/RpcServices.cs
  10. +1
    -1
      logic/Server/Server.csproj

+ 2
- 2
CAPI/python/requirements.txt View File

@@ -1,3 +1,3 @@
grpcio==1.52.0
grpcio-tools==1.52.0
grpcio==1.54.0
grpcio-tools==1.54.0
numpy numpy

+ 1
- 1
dependency/proto/Protos.csproj View File

@@ -18,7 +18,7 @@
<PackageReference Include="Google.Protobuf.Tools" Version="3.22.3" /> <PackageReference Include="Google.Protobuf.Tools" Version="3.22.3" />
<PackageReference Include="Grpc" Version="2.46.6" /> <PackageReference Include="Grpc" Version="2.46.6" />
<PackageReference Include="Grpc.Core" Version="2.46.6" /> <PackageReference Include="Grpc.Core" Version="2.46.6" />
<PackageReference Include="Grpc.Tools" Version="2.53.0">
<PackageReference Include="Grpc.Tools" Version="2.54.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>


+ 1
- 1
dependency/shell/run.sh View File

@@ -51,7 +51,7 @@ if [ -f $playback_dir/start.lock ]; then
while [ $? -eq 0 ] while [ $? -eq 0 ]
do do
sleep 1 sleep 1
ps -p $server_pid
ps -p $server_pid > /dev/null 2>&1
done done
touch $playback_dir/finish.lock touch $playback_dir/finish.lock
echo "Finish" echo "Finish"


+ 1
- 1
docs/使用文档.md View File

@@ -170,7 +170,7 @@ start cmd /k win64\Client.exe --cl --playbackFile .\video.thuaipb --playbackSpee


## WPF简易调试界面 ## WPF简易调试界面


![client](https://raw.githubusercontent.com/shangfengh/THUAI6/new/resource/clientsmaller.png)
![client](https://raw.githubusercontent.com/eesast/THUAI6/dev/resource/clientsmaller.png)


### 界面介绍 ### 界面介绍




+ 9
- 0
logic/Client/MainWindow.xaml View File

@@ -10,8 +10,17 @@


<Window.Resources> <Window.Resources>
<ImageBrush x:Key="Logo" ImageSource="Logo.png"/> <ImageBrush x:Key="Logo" ImageSource="Logo.png"/>
<RoutedUICommand x:Key="maximize_Pressed" Text="maximize_Pressed"/>
</Window.Resources> </Window.Resources>


<Window.CommandBindings>
<CommandBinding Command="{StaticResource maximize_Pressed}" Executed="ClickToMaxmize"/>
</Window.CommandBindings>

<Window.InputBindings>
<KeyBinding Key="F11" Command="{StaticResource maximize_Pressed}"/>
</Window.InputBindings>

<Grid Name="MainGrid" Margin="0,0,0,0"> <Grid Name="MainGrid" Margin="0,0,0,0">
<!--Title行删去了两个赋值语句,等之后补回来--> <!--Title行删去了两个赋值语句,等之后补回来-->
<Grid.RowDefinitions> <Grid.RowDefinitions>


+ 7
- 7
logic/Gaming/AttackManager.cs View File

@@ -48,7 +48,7 @@ namespace Gaming
{ {
case GameObjType.Character: case GameObjType.Character:


if ((!(((Character)objBeingShot).IsGhost())) && bullet.Parent.IsGhost())
if ((!(((Character)objBeingShot).IsGhost())) && bullet.Parent!.IsGhost())
{ {
characterManager.BeAttacked((Student)objBeingShot, bullet); characterManager.BeAttacked((Student)objBeingShot, bullet);
} }
@@ -57,7 +57,7 @@ namespace Gaming
break; break;
case GameObjType.Generator: case GameObjType.Generator:
if (bullet.CanBeBombed(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; break;
default: default:
break; break;
@@ -101,12 +101,12 @@ namespace Gaming
{ {
if (objBeingShot == null) if (objBeingShot == null)
{ {
characterManager.BackSwing((Character)bullet.Parent, bullet.Backswing);
characterManager.BackSwing((Character)bullet.Parent!, bullet.Backswing);
return; return;
} }


BombObj(bullet, objBeingShot); BombObj(bullet, objBeingShot);
characterManager.BackSwing((Character)bullet.Parent, bullet.RecoveryFromHit);
characterManager.BackSwing((Character)bullet.Parent!, bullet.RecoveryFromHit);
return; return;
} }


@@ -122,7 +122,7 @@ namespace Gaming


if (bullet.TypeOfBullet == BulletType.BombBomb && objBeingShot != null) 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()); 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 / 2.0);
Attack((Character)bullet.Parent, bullet.FacingDirection.Angle() + Math.PI * 3.0 / 2.0); Attack((Character)bullet.Parent, bullet.FacingDirection.Angle() + Math.PI * 3.0 / 2.0);
@@ -159,10 +159,10 @@ namespace Gaming


if (objBeingShot == null) if (objBeingShot == null)
{ {
characterManager.BackSwing((Character)bullet.Parent, bullet.Backswing);
characterManager.BackSwing((Character)bullet.Parent!, bullet.Backswing);
} }
else else
characterManager.BackSwing((Character)bullet.Parent, bullet.RecoveryFromHit);
characterManager.BackSwing((Character)bullet.Parent!, bullet.RecoveryFromHit);
} }


public bool Attack(Character player, double angle) public bool Attack(Character player, double angle)


+ 7
- 6
logic/Gaming/CharacterManager .cs View File

@@ -25,11 +25,11 @@ namespace Gaming
switch (player.PlayerState) switch (player.PlayerState)
{ {
case PlayerStateType.OpeningTheChest: case PlayerStateType.OpeningTheChest:
((Chest)player.WhatInteractingWith).StopOpen();
((Chest)player.WhatInteractingWith!).StopOpen();
player.ChangePlayerState(value, gameObj); player.ChangePlayerState(value, gameObj);
break; break;
case PlayerStateType.OpeningTheDoorway: case PlayerStateType.OpeningTheDoorway:
Doorway doorway = (Doorway)player.WhatInteractingWith;
Doorway doorway = (Doorway)player.WhatInteractingWith!;
doorway.OpenDegree += gameMap.Timer.nowTime() - doorway.OpenStartTime; doorway.OpenDegree += gameMap.Timer.nowTime() - doorway.OpenStartTime;
doorway.OpenStartTime = 0; doorway.OpenStartTime = 0;
player.ChangePlayerState(value, gameObj); player.ChangePlayerState(value, gameObj);
@@ -302,7 +302,7 @@ namespace Gaming
if (character.CanBeAwed()) if (character.CanBeAwed())
{ {
if (BeStunned(character, GameData.basicStunnedTimeOfStudent)) if (BeStunned(character, GameData.basicStunnedTimeOfStudent))
bullet.Parent.AddScore(GameData.TrickerScoreStudentBeStunned(GameData.basicStunnedTimeOfStudent));
bullet.Parent!.AddScore(GameData.TrickerScoreStudentBeStunned(GameData.basicStunnedTimeOfStudent));
return true; return true;
} }
return false; return false;
@@ -321,7 +321,7 @@ namespace Gaming
Debugger.Output(student, "is being shot!"); Debugger.Output(student, "is being shot!");
#endif #endif
if (student.NoHp()) return; // 原来已经死了 if (student.NoHp()) return; // 原来已经死了
if (!bullet.Parent.IsGhost()) return;
if (!bullet.Parent!.IsGhost()) return;


if (student.CharacterType == CharacterType.StraightAStudent) if (student.CharacterType == CharacterType.StraightAStudent)
{ {
@@ -413,9 +413,10 @@ namespace Gaming
} }
if (player.CharacterType == CharacterType.Robot) 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; player.FindIActiveSkill(ActiveSkillType.UseRobot).IsBeingUsed = false;
} }
return; return;


+ 1
- 1
logic/Server/GameServer.cs View File

@@ -123,7 +123,7 @@ namespace Server
mwr?.Flush(); mwr?.Flush();
if (options.ResultFileName != DefaultArgumentOptions.FileName) if (options.ResultFileName != DefaultArgumentOptions.FileName)
SaveGameResult(options.ResultFileName.EndsWith(".json") ? options.ResultFileName : options.ResultFileName + ".json"); SaveGameResult(options.ResultFileName.EndsWith(".json") ? options.ResultFileName : options.ResultFileName + ".json");
SendGameResult();
// SendGameResult();
this.endGameSem.Release(); this.endGameSem.Release();
} }
public void ReportGame(GameState gameState, bool requiredGaming = true) public void ReportGame(GameState gameState, bool requiredGaming = true)


+ 61
- 19
logic/Server/RpcServices.cs View File

@@ -139,6 +139,7 @@ namespace Server
if (start) StartGame(); if (start) StartGame();
} }


bool exitFlag = false;
do do
{ {
semaDict[request.PlayerId].Item1.Wait(); semaDict[request.PlayerId].Item1.Wait();
@@ -152,7 +153,11 @@ namespace Server
} }
catch (Exception) catch (Exception)
{ {
//Console.WriteLine(ex);
if (!exitFlag)
{
Console.WriteLine($"The client {request.PlayerId} exited");
exitFlag = true;
}
} }
finally finally
{ {
@@ -219,30 +224,67 @@ namespace Server
boolRes.ActSuccess = false; boolRes.ActSuccess = false;
return Task.FromResult(boolRes); return Task.FromResult(boolRes);
} }
if (request.Message.Length > 256)

switch (request.MessageCase)
{ {
case SendMsg.MessageOneofCase.TextMessage:
{
if (request.TextMessage.Length > 256)
{
#if DEBUG #if DEBUG
Console.WriteLine("Message string is too long!");
Console.WriteLine("Text message string is too long!");
#endif #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 #if DEBUG
Console.WriteLine(news.News);
Console.WriteLine(news.TextMessage);
#endif #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<BoolRes> PickProp(PropMsg request, ServerCallContext context) public override Task<BoolRes> PickProp(PropMsg request, ServerCallContext context)
{ {


+ 1
- 1
logic/Server/Server.csproj View File

@@ -13,7 +13,7 @@
<PackageReference Include="Google.Protobuf" Version="3.22.3" /> <PackageReference Include="Google.Protobuf" Version="3.22.3" />
<PackageReference Include="Grpc" Version="2.46.6" /> <PackageReference Include="Grpc" Version="2.46.6" />
<PackageReference Include="Grpc.Core" Version="2.46.6" /> <PackageReference Include="Grpc.Core" Version="2.46.6" />
<PackageReference Include="Grpc.Tools" Version="2.53.0">
<PackageReference Include="Grpc.Tools" Version="2.54.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>


Loading…
Cancel
Save