diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc44SetRole.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc44SetRole.cs new file mode 100644 index 00000000..fed43113 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/Rpcs/Rpc44SetRole.cs @@ -0,0 +1,17 @@ +using Impostor.Api.Innersloth; + +namespace Impostor.Api.Net.Messages.Rpcs +{ + public static class Rpc44SetRole + { + public static void Serialize(IMessageWriter writer, RoleTypes role) + { + writer.Write((ushort)role); + } + + public static void Deserialize(IMessageReader reader, out RoleTypes role) + { + role = (RoleTypes)reader.ReadUInt16(); + } + } +} diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs index 8969d5ef..cf892068 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs @@ -342,6 +342,19 @@ namespace Impostor.Server.Net.Inner.Objects break; } + case RpcCalls.SetRole: + { + if (!await ValidateHost(call, sender)) + { + return false; + } + + Rpc44SetRole.Deserialize(reader, out var role); + PlayerInfo.RoleType = role; + + break; + } + default: return await base.HandleRpcAsync(sender, target, call, reader); }