From 8ba89d98443a8f26d239a9acddca401698c201b1 Mon Sep 17 00:00:00 2001 From: miniduikboot Date: Tue, 9 Sep 2025 20:40:07 +0200 Subject: [PATCH] Add GameOptions V10 Manually added roles to RoleTypes, will clean up later --- .../Innersloth/Data/enums/RoleTypes.json | 6 ++-- .../GameOptions/HideNSeekGameOptions.cs | 2 +- .../GameOptions/NormalGameOptions.cs | 2 +- .../RoleOptions/DetectiveRoleOptions.cs | 29 +++++++++++++++++++ .../RoleOptions/RoleOptionsCollection.cs | 2 ++ .../RoleOptions/ViperRoleOptions.cs | 29 +++++++++++++++++++ 6 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 src/Impostor.Api/Innersloth/GameOptions/RoleOptions/DetectiveRoleOptions.cs create mode 100644 src/Impostor.Api/Innersloth/GameOptions/RoleOptions/ViperRoleOptions.cs diff --git a/src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json b/src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json index 8fe73d0..4045c25 100644 --- a/src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json +++ b/src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json @@ -9,5 +9,7 @@ "ImpostorGhost": 7, "Noisemaker": 8, "Phantom": 9, - "Tracker": 10 -} \ No newline at end of file + "Tracker": 10, + "Detective": 12, + "Viper": 18 +} diff --git a/src/Impostor.Api/Innersloth/GameOptions/HideNSeekGameOptions.cs b/src/Impostor.Api/Innersloth/GameOptions/HideNSeekGameOptions.cs index a3d494a..74b3fd1 100644 --- a/src/Impostor.Api/Innersloth/GameOptions/HideNSeekGameOptions.cs +++ b/src/Impostor.Api/Innersloth/GameOptions/HideNSeekGameOptions.cs @@ -2,7 +2,7 @@ namespace Impostor.Api.Innersloth.GameOptions; public class HideNSeekGameOptions : IGameOptions { - public const int LatestVersion = 9; + public const int LatestVersion = 10; public HideNSeekGameOptions(byte version = LatestVersion) { diff --git a/src/Impostor.Api/Innersloth/GameOptions/NormalGameOptions.cs b/src/Impostor.Api/Innersloth/GameOptions/NormalGameOptions.cs index 4488b17..4055f82 100644 --- a/src/Impostor.Api/Innersloth/GameOptions/NormalGameOptions.cs +++ b/src/Impostor.Api/Innersloth/GameOptions/NormalGameOptions.cs @@ -4,7 +4,7 @@ namespace Impostor.Api.Innersloth.GameOptions; public class NormalGameOptions : IGameOptions { - public const int LatestVersion = 9; + public const int LatestVersion = 10; public NormalGameOptions(byte version = LatestVersion) { diff --git a/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/DetectiveRoleOptions.cs b/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/DetectiveRoleOptions.cs new file mode 100644 index 0000000..4bd29b3 --- /dev/null +++ b/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/DetectiveRoleOptions.cs @@ -0,0 +1,29 @@ +namespace Impostor.Api.Innersloth.GameOptions.RoleOptions; + +public class DetectiveRoleOptions : IRoleOptions +{ + public DetectiveRoleOptions(byte version) + { + Version = version; + } + + public byte Version { get; } + + public RoleTypes Type => RoleTypes.Detective; + + public byte DetectiveSuspectLimit { get; set; } = 3; + + public static DetectiveRoleOptions Deserialize(IMessageReader reader, byte version) + { + var options = new DetectiveRoleOptions(version); + + options.DetectiveSuspectLimit = reader.ReadByte(); + + return options; + } + + public void Serialize(IMessageWriter writer) + { + writer.Write((byte)DetectiveSuspectLimit); + } +} diff --git a/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/RoleOptionsCollection.cs b/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/RoleOptionsCollection.cs index 91919d8..187987b 100644 --- a/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/RoleOptionsCollection.cs +++ b/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/RoleOptionsCollection.cs @@ -32,6 +32,8 @@ public class RoleOptionsCollection RoleTypes.Noisemaker => NoisemakerRoleOptions.Deserialize(roleOptionsReader, Version), RoleTypes.Phantom => PhantomRoleOptions.Deserialize(roleOptionsReader, Version), RoleTypes.Tracker => TrackerRoleOptions.Deserialize(roleOptionsReader, Version), + RoleTypes.Detective => DetectiveRoleOptions.Deserialize(roleOptionsReader, Version), + RoleTypes.Viper => ViperRoleOptions.Deserialize(roleOptionsReader, Version), _ => throw new ArgumentOutOfRangeException(nameof(roleType), roleType, null), }; diff --git a/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/ViperRoleOptions.cs b/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/ViperRoleOptions.cs new file mode 100644 index 0000000..56185ad --- /dev/null +++ b/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/ViperRoleOptions.cs @@ -0,0 +1,29 @@ +namespace Impostor.Api.Innersloth.GameOptions.RoleOptions; + +public class ViperRoleOptions : IRoleOptions +{ + public ViperRoleOptions(byte version) + { + Version = version; + } + + public byte Version { get; } + + public RoleTypes Type => RoleTypes.Viper; + + public byte ViperDissolveTime { get; set; } = 15; + + public static ViperRoleOptions Deserialize(IMessageReader reader, byte version) + { + var options = new ViperRoleOptions(version); + + options.ViperDissolveTime = reader.ReadByte(); + + return options; + } + + public void Serialize(IMessageWriter writer) + { + writer.Write((byte)ViperDissolveTime); + } +} -- 2.39.5