Handle SetRole properly

This commit is contained in:
miniduikboot committed 2024-06-22 12:53:02 +02:00
1 parent 19f4821c2a
commit 5cac18723d
3 files changed
+8 -4

No files matched your search

@@ -4,14 +4,16 @@ namespace Impostor.Api.Net.Messages.Rpcs
{
public static class Rpc44SetRole
{
public static void Serialize(IMessageWriter writer, RoleTypes role)
public static void Serialize(IMessageWriter writer, RoleTypes role, bool canOverrideRole)
{
writer.Write((ushort)role);
writer.Write(canOverrideRole);
}
public static void Deserialize(IMessageReader reader, out RoleTypes role)
public static void Deserialize(IMessageReader reader, out RoleTypes role, out bool canOverrideRole)
{
role = (RoleTypes)reader.ReadUInt16();
canOverrideRole = reader.ReadBoolean();
}
}
}
@@ -383,8 +383,9 @@ namespace Impostor.Server.Net.Inner.Objects
return false;
}
Rpc44SetRole.Deserialize(reader, out var role);
Rpc44SetRole.Deserialize(reader, out var role, out var _);
PlayerInfo.RoleType = role;
PlayerInfo.IsDirty = true;
if (Game.GameState == GameStates.Starting && Game.Players.All(clientPlayer => clientPlayer.Character?.PlayerInfo.RoleType != null))
{
@@ -530,6 +531,7 @@ namespace Impostor.Server.Net.Inner.Objects
{
PlayerInfo.IsDead = true;
PlayerInfo.LastDeathReason = reason;
PlayerInfo.IsDirty = true;
}
internal void Protect(InnerPlayerControl guardianAngel)
@@ -120,7 +120,7 @@ namespace Impostor.Server.Net.Inner.Objects
flag = (byte)(flag | 4u);
}
writer.Write(flag);
writer.Write((byte)flag);
writer.Write((ushort)(RoleType ?? 0));
writer.Write(RoleWhenAlive.HasValue);