From 8bbe6be4b0a695056e9ab1f1a173c4f5c731f02b Mon Sep 17 00:00:00 2001 From: miniduikboot Date: Tue, 29 Sep 2026 19:45:36 +0200 Subject: [PATCH] Add SpiritGuide role --- .../Innersloth/Data/enums/RoleTypes.json | 5 ++-- .../GameOptions/HideNSeekGameOptions.cs | 2 +- .../GameOptions/NormalGameOptions.cs | 2 +- .../RoleOptions/RoleOptionsCollection.cs | 1 + .../RoleOptions/SpiritGuideRoleOptions.cs | 29 +++++++++++++++++++ 5 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/Impostor.Api/Innersloth/GameOptions/RoleOptions/SpiritGuideRoleOptions.cs diff --git a/src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json b/src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json index 2b4dbed1..27209d0a 100644 --- a/src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json +++ b/src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json @@ -12,5 +12,6 @@ "Tracker": 10, "Detective": 12, "Viper": 18, - "Judge": 19 -} \ No newline at end of file + "Judge": 19, + "SpiritGuide": 21 +} diff --git a/src/Impostor.Api/Innersloth/GameOptions/HideNSeekGameOptions.cs b/src/Impostor.Api/Innersloth/GameOptions/HideNSeekGameOptions.cs index 457ba166..89bc356c 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 = 11; + public const int LatestVersion = 12; public HideNSeekGameOptions(byte version = LatestVersion) { diff --git a/src/Impostor.Api/Innersloth/GameOptions/NormalGameOptions.cs b/src/Impostor.Api/Innersloth/GameOptions/NormalGameOptions.cs index ac2a5a60..062da552 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 = 11; + public const int LatestVersion = 12; public NormalGameOptions(byte version = LatestVersion) { diff --git a/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/RoleOptionsCollection.cs b/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/RoleOptionsCollection.cs index b90c3ad4..9caea06c 100644 --- a/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/RoleOptionsCollection.cs +++ b/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/RoleOptionsCollection.cs @@ -35,6 +35,7 @@ public class RoleOptionsCollection RoleTypes.Detective => DetectiveRoleOptions.Deserialize(roleOptionsReader, Version), RoleTypes.Viper => ViperRoleOptions.Deserialize(roleOptionsReader, Version), RoleTypes.Judge => JudgeRoleOptions.Deserialize(roleOptionsReader, Version), + RoleTypes.SpiritGuide => SpiritGuideRoleOptions.Deserialize(roleOptionsReader, Version), _ => throw new ArgumentOutOfRangeException(nameof(roleType), roleType, null), }; diff --git a/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/SpiritGuideRoleOptions.cs b/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/SpiritGuideRoleOptions.cs new file mode 100644 index 00000000..f541ce63 --- /dev/null +++ b/src/Impostor.Api/Innersloth/GameOptions/RoleOptions/SpiritGuideRoleOptions.cs @@ -0,0 +1,29 @@ +namespace Impostor.Api.Innersloth.GameOptions.RoleOptions; + +public class SpiritGuideRoleOptions : IRoleOptions +{ + public SpiritGuideRoleOptions(byte version) + { + Version = version; + } + + public byte Version { get; } + + public RoleTypes Type => RoleTypes.SpiritGuide; + + public float SpiritGuideCooldownSeconds { get; set; } = 20f; + + public static SpiritGuideRoleOptions Deserialize(IMessageReader reader, byte version) + { + var options = new SpiritGuideRoleOptions(version); + + options.SpiritGuideCooldownSeconds = (int)reader.ReadByte(); + + return options; + } + + public void Serialize(IMessageWriter writer) + { + writer.Write((byte)SpiritGuideCooldownSeconds); + } +}