-namespace Impostor.Api.Events
+using Impostor.Api.Innersloth;
+
+namespace Impostor.Api.Events
{
public interface IGameEndedEvent : IGameEvent
{
+ public GameOverReason GameOverReason { get; }
}
}
--- /dev/null
+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
--- /dev/null
+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
public void OnGameEnded(IGameEndedEvent e)
{
Console.WriteLine("Game > ended");
+ Console.WriteLine("- Reason: " + e.GameOverReason);
}
[EventListener]
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; }
}
}
return;
}
- await Player.Game.HandleEndGame(reader);
+ Message08EndGameC2S.Deserialize(
+ reader,
+ out var gameOverReason);
+
+ await Player.Game.HandleEndGame(reader, gameOverReason);
break;
}
return GameJoinResult.CreateSuccess(player);
}
- public async ValueTask HandleEndGame(IMessageReader message)
+ public async ValueTask HandleEndGame(IMessageReader message, GameOverReason gameOverReason)
{
GameState = GameStates.Ended;
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)