public static void MakeButtons(HudManager hm) { // Fox stealth foxButton = new CustomButton( () => { if (foxButton.isEffectActive) { foxButton.Timer = 0; return; } MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.FoxStealth, Hazel.SendOption.Reliable, -1); writer.Write(PlayerControl.LocalPlayer.PlayerId); writer.Write(true); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.foxStealth(PlayerControl.LocalPlayer.PlayerId, true); }, () => { return(PlayerControl.LocalPlayer.isRole(RoleType.Fox) && !PlayerControl.LocalPlayer.Data.IsDead); }, () => { if (foxButton.isEffectActive) { foxButton.buttonText = ModTranslation.getString("FoxUnstealthText"); } else { foxButton.buttonText = ModTranslation.getString("FoxStealthText"); } return(PlayerControl.LocalPlayer.CanMove); }, () => { foxButton.Timer = foxButton.MaxTimer = Fox.stealthCooldown; }, Fox.getHideButtonSprite(), new Vector3(-1.8f, -0.06f, 0), hm, hm.AbilityButton, KeyCode.F, true, Fox.stealthDuration, () => { foxButton.Timer = foxButton.MaxTimer = Fox.stealthCooldown; MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.FoxStealth, Hazel.SendOption.Reliable, -1); writer.Write(PlayerControl.LocalPlayer.PlayerId); writer.Write(false); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.foxStealth(PlayerControl.LocalPlayer.PlayerId, false); } ); foxButton.Timer = foxButton.MaxTimer = Fox.stealthCooldown; foxButton.buttonText = ModTranslation.getString("FoxStealthText"); foxButton.effectCancellable = true; foxRepairButton = new CustomButton( () => { bool sabotageActive = false; foreach (PlayerTask task in PlayerControl.LocalPlayer.myTasks) { if (task.TaskType == TaskTypes.FixLights || task.TaskType == TaskTypes.RestoreOxy || task.TaskType == TaskTypes.ResetReactor || task.TaskType == TaskTypes.ResetSeismic || task.TaskType == TaskTypes.FixComms || task.TaskType == TaskTypes.StopCharles) { sabotageActive = true; } } if (!sabotageActive) { return; } foreach (PlayerTask task in PlayerControl.LocalPlayer.myTasks) { if (task.TaskType == TaskTypes.FixLights) { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.EngineerFixLights, Hazel.SendOption.Reliable, -1); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.engineerFixLights(); } else if (task.TaskType == TaskTypes.RestoreOxy) { ShipStatus.Instance.RpcRepairSystem(SystemTypes.LifeSupp, 0 | 64); ShipStatus.Instance.RpcRepairSystem(SystemTypes.LifeSupp, 1 | 64); } else if (task.TaskType == TaskTypes.ResetReactor) { ShipStatus.Instance.RpcRepairSystem(SystemTypes.Reactor, 16); } else if (task.TaskType == TaskTypes.ResetSeismic) { ShipStatus.Instance.RpcRepairSystem(SystemTypes.Laboratory, 16); } else if (task.TaskType == TaskTypes.FixComms) { ShipStatus.Instance.RpcRepairSystem(SystemTypes.Comms, 16 | 0); ShipStatus.Instance.RpcRepairSystem(SystemTypes.Comms, 16 | 1); } else if (task.TaskType == TaskTypes.StopCharles) { ShipStatus.Instance.RpcRepairSystem(SystemTypes.Reactor, 0 | 16); ShipStatus.Instance.RpcRepairSystem(SystemTypes.Reactor, 1 | 16); } } numRepair -= 1; }, () => { return(PlayerControl.LocalPlayer.isRole(RoleType.Fox) && PlayerControl.LocalPlayer.isAlive() && numRepair > 0); }, () => { bool sabotageActive = false; foreach (PlayerTask task in PlayerControl.LocalPlayer.myTasks) { if (task.TaskType == TaskTypes.FixLights || task.TaskType == TaskTypes.RestoreOxy || task.TaskType == TaskTypes.ResetReactor || task.TaskType == TaskTypes.ResetSeismic || task.TaskType == TaskTypes.FixComms || task.TaskType == TaskTypes.StopCharles) { sabotageActive = true; } } return(sabotageActive && numRepair > 0 && PlayerControl.LocalPlayer.CanMove); }, () => { foxRepairButton.Timer = foxRepairButton.MaxTimer = 0f; }, Fox.getRepairButtonSprite(), new Vector3(-0.9f, 1f, 0), hm, hm.AbilityButton, KeyCode.G ); foxRepairButton.Timer = foxRepairButton.MaxTimer = 0f; foxRepairButton.buttonText = ModTranslation.getString("FoxRepairText");; foxImmoralistButton = new CustomButton( () => { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.FoxCreatesImmoralist, Hazel.SendOption.Reliable, -1); writer.Write(currentTarget.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.foxCreatesImmoralist(currentTarget.PlayerId); }, () => { return(!Immoralist.exists && canCreateImmoralist && PlayerControl.LocalPlayer.isRole(RoleType.Fox) && PlayerControl.LocalPlayer.isAlive()); }, () => { return(canCreateImmoralist && Fox.currentTarget != null && PlayerControl.LocalPlayer.CanMove); }, () => { foxImmoralistButton.Timer = foxImmoralistButton.MaxTimer = 20f; }, getImmoralistButtonSprite(), new Vector3(-1.8f, 1f, 0), hm, hm.AbilityButton, KeyCode.I ); foxImmoralistButton.Timer = foxImmoralistButton.MaxTimer = 20f; foxImmoralistButton.buttonText = ModTranslation.getString("FoxImmoralistText"); }