public static void Prefix(ExileController __instance, [HarmonyArgument(0)] ref GameData.PlayerInfo exiled, [HarmonyArgument(1)] bool tie) { // Shifter shift if (Shifter.shifter != null && AmongUsClient.Instance.AmHost && Shifter.futureShift != null) // We need to send the RPC from the host here, to make sure that the order of shifting and erasing is correct (for that reason the futureShifted and futureErased are being synced) { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.ShifterShift, Hazel.SendOption.Reliable, -1); writer.Write(Shifter.futureShift.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.shifterShift(Shifter.futureShift.PlayerId); } Shifter.futureShift = null; // Eraser erase if (Eraser.eraser != null && AmongUsClient.Instance.AmHost && Eraser.futureErased != null) // We need to send the RPC from the host here, to make sure that the order of shifting and erasing is correct (for that reason the futureShifted and futureErased are being synced) { foreach (PlayerControl target in Eraser.futureErased) { if (target != null) { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.ErasePlayerRole, Hazel.SendOption.Reliable, -1); writer.Write(target.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.erasePlayerRole(target.PlayerId); } } } Eraser.futureErased = new List <PlayerControl>(); // Trickster boxes if (Trickster.trickster != null && JackInTheBox.hasJackInTheBoxLimitReached()) { JackInTheBox.convertToVents(); } // SecurityGuard vents and cameras MapOptions.camerasToAdd.ForEach(x => x.gameObject.SetActive(true)); var allCameras = ShipStatus.Instance.AllCameras.ToList(); allCameras.AddRange(MapOptions.camerasToAdd); ShipStatus.Instance.AllCameras = allCameras.ToArray(); MapOptions.camerasToAdd = new List <SurvCamera>(); foreach (Vent vent in MapOptions.ventsToSeal) { PowerTools.SpriteAnim animator = vent.GetComponent <PowerTools.SpriteAnim>(); animator?.Stop(); vent.myRend.sprite = animator == null?SecurityGuard.getStaticVentSealedSprite() : SecurityGuard.getAnimatedVentSealedSprite(); vent.name = "SealedVent_" + vent.name; } MapOptions.ventsToSeal = new List <Vent>(); }
public static void sealVent(int ventId) { Vent vent = ShipStatus.Instance.AllVents.FirstOrDefault((x) => x != null && x.Id == ventId); if (vent == null) { return; } SecurityGuard.remainingScrews -= SecurityGuard.ventPrice; if (PlayerControl.LocalPlayer == SecurityGuard.securityGuard) { PowerTools.SpriteAnim animator = vent.GetComponent <PowerTools.SpriteAnim>(); animator?.Stop(); vent.EnterVentAnim = vent.ExitVentAnim = null; vent.myRend.sprite = animator == null?SecurityGuard.getStaticVentSealedSprite() : SecurityGuard.getAnimatedVentSealedSprite(); vent.myRend.color = new Color(1f, 1f, 1f, 0.5f); vent.name = "FutureSealedVent_" + vent.name; } MapOptions.ventsToSeal.Add(vent); }