]> git.deb.at Git - rhonda/impostor.git/commitdiff
Add GameOverReason (#129)
authorAlexejheroYTB <alexejhero@gmail.com>
Thu, 12 Nov 2020 03:07:20 +0000 (05:07 +0200)
committerGitHub <noreply@github.com>
Thu, 12 Nov 2020 03:07:20 +0000 (04:07 +0100)
* Add GameOverReason

* Remove showAd from deserialization

* Update GameEventListener.cs

src/Impostor.Api/Events/Game/IGameEndedEvent.cs
src/Impostor.Api/Innersloth/GameOverReason.cs [new file with mode: 0644]
src/Impostor.Api/Net/Messages/C2S/Message08EndGameC2S.cs [new file with mode: 0644]
src/Impostor.Plugins.Example/Handlers/GameEventListener.cs
src/Impostor.Server/Events/Game/GameEndedEvent.cs
src/Impostor.Server/Net/Client.cs
src/Impostor.Server/Net/State/Game.Incoming.cs

index 215852c950ce938e0f51c832de8872a0951b6170..d8ae159df644e977f05eba9a3950329395cf94cf 100644 (file)
@@ -1,6 +1,9 @@
-namespace Impostor.Api.Events
+using Impostor.Api.Innersloth;
+
+namespace Impostor.Api.Events
 {
     public interface IGameEndedEvent : IGameEvent
     {
+        public GameOverReason GameOverReason { get; }
     }
 }
diff --git a/src/Impostor.Api/Innersloth/GameOverReason.cs b/src/Impostor.Api/Innersloth/GameOverReason.cs
new file mode 100644 (file)
index 0000000..6a95d37
--- /dev/null
@@ -0,0 +1,15 @@
+namespace Impostor.Api.Innersloth
+{
+    public enum GameOverReason : byte
+    {
+        HumansByVote = 0,
+        HumansByTask = 1,
+        ImpostorByVote = 2,
+        ImpostorByKill = 3,
+        ImpostorBySabotage = 4,
+        
+        // Unused (?)
+        ImpostorDisconnect = 5,
+        HumansDisconnect = 6,
+    }
+}
\ No newline at end of file
diff --git a/src/Impostor.Api/Net/Messages/C2S/Message08EndGameC2S.cs b/src/Impostor.Api/Net/Messages/C2S/Message08EndGameC2S.cs
new file mode 100644 (file)
index 0000000..7ca5e3a
--- /dev/null
@@ -0,0 +1,18 @@
+using Impostor.Api.Innersloth;
+
+namespace Impostor.Api.Net.Messages.C2S
+{
+    public class Message08EndGameC2S
+    {
+        public static void Serialize(IMessageWriter writer)
+        {
+            throw new System.NotImplementedException();
+        }
+
+        public static void Deserialize(IMessageReader reader, out GameOverReason gameOverReason)
+        {
+            gameOverReason = (GameOverReason)reader.ReadByte();
+            reader.ReadBoolean(); // showAd
+        }
+    }
+}
\ No newline at end of file
index fe06d51ff828c1f8419067f033758856396d2bf4..be2d0f3ff63c63766b4080a2c7f0bf99598d7071 100644 (file)
@@ -40,6 +40,7 @@ namespace Impostor.Plugins.Example.Handlers
         public void OnGameEnded(IGameEndedEvent e)
         {
             Console.WriteLine("Game > ended");
+            Console.WriteLine("- Reason: " + e.GameOverReason);
         }
 
         [EventListener]
index 621b58122ebbd28206789abbe128cf0ab9b47eb5..4ec4dcf9214f15bf7e919f136baeaa0b51c05a3a 100644 (file)
@@ -1,15 +1,19 @@
 using Impostor.Api.Events;
 using Impostor.Api.Games;
+using Impostor.Api.Innersloth;
 
 namespace Impostor.Server.Events
 {
     public class GameEndedEvent : IGameEndedEvent
     {
-        public GameEndedEvent(IGame game)
+        public GameEndedEvent(IGame game, GameOverReason gameOverReason)
         {
             Game = game;
+            GameOverReason = gameOverReason;
         }
 
         public IGame Game { get; }
+        
+        public GameOverReason GameOverReason { get; }
     }
 }
index 0036cdd366c41be450747cd041fa896bab8b15d8..87a1bb40e967bd208c82e532445b013aabdb9c63 100644 (file)
@@ -193,7 +193,11 @@ namespace Impostor.Server.Net
                         return;
                     }
 
-                    await Player.Game.HandleEndGame(reader);
+                    Message08EndGameC2S.Deserialize(
+                        reader,
+                        out var gameOverReason);
+                    
+                    await Player.Game.HandleEndGame(reader, gameOverReason);
                     break;
                 }
 
index 4fcc83b142b978a80cf898b4ca743ecd290d5dd0..4bf1c43c0b06f16405c8091711bc86e3de21b6e8 100644 (file)
@@ -111,7 +111,7 @@ namespace Impostor.Server.Net.State
             return GameJoinResult.CreateSuccess(player);
         }
 
-        public async ValueTask HandleEndGame(IMessageReader message)
+        public async ValueTask HandleEndGame(IMessageReader message, GameOverReason gameOverReason)
         {
             GameState = GameStates.Ended;
 
@@ -128,7 +128,7 @@ namespace Impostor.Server.Net.State
                 player.Value.Limbo = LimboStates.PreSpawn;
             }
 
-            await _eventManager.CallAsync(new GameEndedEvent(this));
+            await _eventManager.CallAsync(new GameEndedEvent(this, gameOverReason));
         }
 
         public async ValueTask HandleAlterGame(IMessageReader message, IClientPlayer sender, bool isPublic)