diff --git a/Modules/RPC.cs b/Modules/RPC.cs index 9a75086cb..7342fdd03 100644 --- a/Modules/RPC.cs +++ b/Modules/RPC.cs @@ -139,6 +139,7 @@ public enum CustomRPC SyncRogue, SyncEvolver, SyncTremor, + SyncAid, // Other Game Modes SyncKBPlayer, @@ -426,6 +427,9 @@ internal class RPCHandlerPatch case CustomRPC.SyncTremor: (Main.PlayerStates[reader.ReadByte()].Role as Tremor)?.ReceiveRPC(reader); break; + case CustomRPC.SyncAid: + (Main.PlayerStates[reader.ReadByte()].Role as Aid)?.ReceiveRPC(reader); + break; case CustomRPC.SetBountyTarget: { byte bountyId = reader.ReadByte(); diff --git a/Roles/Crewmate/Aid.cs b/Roles/Crewmate/Aid.cs index 8cd0b6936..5ea046681 100644 --- a/Roles/Crewmate/Aid.cs +++ b/Roles/Crewmate/Aid.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; using System.Linq; using AmongUs.GameOptions; +using EHR.Modules; +using Hazel; using UnityEngine; namespace EHR.Roles.Crewmate @@ -80,6 +82,7 @@ namespace EHR.Roles.Crewmate if (x.Value + AidDur.GetInt() <= Utils.TimeStamp || !GameStates.IsInTask) { ShieldedPlayers.Remove(x.Key); + Utils.SendRPC(CustomRPC.SyncAid, pc.PlayerId, 1, x.Key); change = true; } } @@ -97,6 +100,7 @@ namespace EHR.Roles.Crewmate { pc.RpcRemoveAbilityUse(); ShieldedPlayers[TargetId] = Utils.TimeStamp; + Utils.SendRPC(CustomRPC.SyncAid, pc.PlayerId, 0, TargetId); var target = Utils.GetPlayerById(TargetId); Utils.NotifyRoles(SpecifySeer: pc, SpecifyTarget: target); Utils.NotifyRoles(SpecifySeer: target, SpecifyTarget: target); @@ -106,6 +110,19 @@ namespace EHR.Roles.Crewmate LateTask.New(() => physics.RpcBootFromVent(ventId), 0.5f, log: false); } + public void ReceiveRPC(MessageReader reader) + { + switch (reader.ReadPackedInt32()) + { + case 0: + ShieldedPlayers[reader.ReadByte()] = Utils.TimeStamp; + break; + case 1: + ShieldedPlayers.Remove(reader.ReadByte()); + break; + } + } + public override string GetSuffix(PlayerControl seer, PlayerControl target, bool hud = false, bool meeting = false) { if (seer.PlayerId != target.PlayerId || (seer.IsModClient() && !hud)) return string.Empty;