--- /dev/null
+using Impostor.Api.Games;
+using Impostor.Api.Innersloth.Customization;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Api.Net.Messages.Rpcs
+{
+ public static class Rpc45ProtectPlayer
+ {
+ public static void Serialize(IMessageWriter writer, IInnerPlayerControl playerControl, ColorType color)
+ {
+ writer.Write(playerControl.NetId);
+ writer.Write((byte)color);
+ }
+
+ public static void Deserialize(IMessageReader reader, IGame game, out IInnerPlayerControl? playerControl, out ColorType color)
+ {
+ playerControl = reader.ReadNetObject<IInnerPlayerControl>(game);
+ color = (ColorType)reader.ReadByte();
+ }
+ }
+}
--- /dev/null
+using Impostor.Api.Games;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Api.Net.Messages.Rpcs
+{
+ public static class Rpc48CheckProtect
+ {
+ public static void Serialize(IMessageWriter writer, IInnerPlayerControl playerControl)
+ {
+ writer.Write(playerControl.NetId);
+ }
+
+ public static void Deserialize(IMessageReader reader, IGame game, out IInnerPlayerControl? playerControl)
+ {
+ playerControl = reader.ReadNetObject<IInnerPlayerControl>(game);
+ }
+ }
+}
break;
}
+ case RpcCalls.ProtectPlayer:
+ {
+ if (!await ValidateHost(call, sender))
+ {
+ return false;
+ }
+
+ Rpc45ProtectPlayer.Deserialize(reader, Game, out _, out _);
+ break;
+ }
+
case RpcCalls.Shapeshift:
{
if (!await ValidateRole(call, sender, PlayerInfo, RoleTypes.Shapeshifter))
return await HandleCheckMurder(sender, murdered);
}
+ case RpcCalls.CheckProtect:
+ {
+ if (!await ValidateRole(call, sender, PlayerInfo, RoleTypes.GuardianAngel))
+ {
+ return false;
+ }
+
+ Rpc48CheckProtect.Deserialize(reader, Game, out _);
+
+ break;
+ }
+
default:
return await base.HandleRpcAsync(sender, target, call, reader);
}