public static void clearAndReloadRoles() { Jester.clearAndReload(); Mayor.clearAndReload(); Engineer.clearAndReload(); Sheriff.clearAndReload(); Lighter.clearAndReload(); Godfather.clearAndReload(); Mafioso.clearAndReload(); Janitor.clearAndReload(); Detective.clearAndReload(); TimeMaster.clearAndReload(); Medic.clearAndReload(); Shifter.clearAndReload(); Swapper.clearAndReload(); Lovers.clearAndReload(); Seer.clearAndReload(); Morphling.clearAndReload(); Camouflager.clearAndReload(); Hacker.clearAndReload(); Child.clearAndReload(); Tracker.clearAndReload(); Vampire.clearAndReload(); Snitch.clearAndReload(); Jackal.clearAndReload(); Sidekick.clearAndReload(); Eraser.clearAndReload(); Spy.clearAndReload(); Trickster.clearAndReload(); }
public static void setCustomButtonCooldowns() { Ninja.SetButtonCooldowns(); Sheriff.SetButtonCooldowns(); PlagueDoctor.SetButtonCooldowns(); Lighter.SetButtonCooldowns(); SerialKiller.SetButtonCooldowns(); Immoralist.SetButtonCooldowns(); SchrodingersCat.SetButtonCooldowns(); Trapper.SetButtonCooldowns(); BomberA.SetButtonCooldowns(); BomberB.SetButtonCooldowns(); EvilTracker.SetButtonCooldowns(); Puppeteer.SetButtonCooldowns(); MimicK.SetButtonCooldowns(); MimicA.SetButtonCooldowns(); SoulPlayer.SetButtonCooldowns(); foreach (CustomButton gmButton in gmButtons) { gmButton.MaxTimer = 0.0f; } foreach (CustomButton gmButton in gmKillButtons) { gmButton.MaxTimer = 0.0f; } gmZoomIn.MaxTimer = 0.0f; gmZoomOut.MaxTimer = 0.0f; }
public static void erasePlayerRole(byte playerId) { PlayerControl player = Helpers.playerById(playerId); if (player == null) { return; } // Crewmate roles if (player == Mayor.mayor) { Mayor.clearAndReload(); } if (player == Engineer.engineer) { Engineer.clearAndReload(); } if (player == Sheriff.sheriff) { Sheriff.clearAndReload(); } if (player == Lighter.lighter) { Lighter.clearAndReload(); } if (player == Detective.detective) { Detective.clearAndReload(); } if (player == TimeMaster.timeMaster) { TimeMaster.clearAndReload(); } if (player == Medic.medic) { Medic.clearAndReload(); } if (player == Shifter.shifter) { Shifter.clearAndReload(); } if (player == Seer.seer) { Seer.clearAndReload(); } if (player == Hacker.hacker) { Hacker.clearAndReload(); } if (player == Child.child) { Child.clearAndReload(); } if (player == Tracker.tracker) { Tracker.clearAndReload(); } if (player == Snitch.snitch) { Snitch.clearAndReload(); } if (player == Swapper.swapper) { Swapper.clearAndReload(); } if (player == Spy.spy) { Spy.clearAndReload(); } // Impostor roles if (player == Morphling.morphling) { Morphling.clearAndReload(); } if (player == Camouflager.camouflager) { Camouflager.clearAndReload(); } if (player == Godfather.godfather) { Godfather.clearAndReload(); } if (player == Mafioso.mafioso) { Mafioso.clearAndReload(); } if (player == Janitor.janitor) { Janitor.clearAndReload(); } if (player == Vampire.vampire) { Vampire.clearAndReload(); } if (player == Eraser.eraser) { Eraser.clearAndReload(); } if (player == Trickster.trickster) { Trickster.clearAndReload(); } if (player == Cleaner.cleaner) { Cleaner.clearAndReload(); } if (player == Warlock.warlock) { Warlock.clearAndReload(); } // Other roles if (player == Jester.jester) { Jester.clearAndReload(); } if (player == Lovers.lover1 || player == Lovers.lover2) // The whole Lover couple is being erased { Lovers.clearAndReload(); } if (player == Jackal.jackal) // Promote Sidekick and hence override the the Jackal or erase Jackal { if (Sidekick.promotesToJackal && Sidekick.sidekick != null && !Sidekick.sidekick.Data.IsDead) { RPCProcedure.sidekickPromotes(); } else { Jackal.clearAndReload(); } } if (player == Sidekick.sidekick) { Sidekick.clearAndReload(); } }
public static void makeButtons(HudManager hm) { Ninja.MakeButtons(hm); Sheriff.MakeButtons(hm); PlagueDoctor.MakeButtons(hm); Lighter.MakeButtons(hm); SerialKiller.MakeButtons(hm); Fox.MakeButtons(hm); Immoralist.MakeButtons(hm); FortuneTeller.MakeButtons(hm); LastImpostor.MakeButtons(hm); SoulPlayer.MakeButtons(hm); SchrodingersCat.MakeButtons(hm); Trapper.MakeButtons(hm); BomberA.MakeButtons(hm); BomberB.MakeButtons(hm); EvilTracker.MakeButtons(hm); Puppeteer.MakeButtons(hm); MimicK.MakeButtons(hm); MimicA.MakeButtons(hm); gmButtons = new List <CustomButton>(); gmKillButtons = new List <CustomButton>(); Vector3 gmCalcPos(byte index) { return(new Vector3(-0.25f, -0.25f, 1.0f) + Vector3.right * index * 0.55f); } Action gmButtonOnClick(byte index) { return(() => { PlayerControl target = Helpers.playerById(index); if (!MapOptions.playerIcons.ContainsKey(index) || target.Data.Disconnected) { return; } if (GM.gm.transform.position != target.transform.position) { GM.gm.transform.position = target.transform.position; } }); }; Action gmKillButtonOnClick(byte index) { return(() => { PlayerControl target = Helpers.playerById(index); if (!MapOptions.playerIcons.ContainsKey(index) || target.Data.Disconnected) { return; } if (!target.Data.IsDead) { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.GMKill, Hazel.SendOption.Reliable, -1); writer.Write(index); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.GMKill(index); } else { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.GMRevive, Hazel.SendOption.Reliable, -1); writer.Write(index); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.GMRevive(index); } }); }; Func <bool> gmHasButton(byte index) { return(() => { if ((GM.gm == null || PlayerControl.LocalPlayer != GM.gm) || (!MapOptions.playerIcons.ContainsKey(index)) || (!GM.canWarp) || (Helpers.playerById(index).Data.Disconnected)) { return false; } return true; }); } Func <bool> gmHasKillButton(byte index) { return(() => { if ((GM.gm == null || PlayerControl.LocalPlayer != GM.gm) || (!MapOptions.playerIcons.ContainsKey(index)) || (!GM.canKill) || (Helpers.playerById(index).Data.Disconnected)) { return false; } return true; }); } Func <bool> gmCouldUse(byte index) { return(() => { if (!MapOptions.playerIcons.ContainsKey(index) || !GM.canWarp) { return false; } Vector3 pos = gmCalcPos(index); Vector3 scale = new Vector3(0.4f, 0.8f, 1.0f); Vector3 iconBase = hm.UseButton.transform.localPosition; iconBase.x *= -1; if (gmButtons[index].PositionOffset != pos) { gmButtons[index].PositionOffset = pos; gmButtons[index].LocalScale = scale; MapOptions.playerIcons[index].transform.localPosition = iconBase + pos; //TheOtherRolesPlugin.Instance.Log.LogInfo($"Updated {index}: {pos.x}, {pos.y}, {pos.z}"); } //MapOptions.playerIcons[index].gameObject.SetActive(PlayerControl.LocalPlayer.CanMove); return PlayerControl.LocalPlayer.CanMove; }); } Func <bool> gmCouldKill(byte index) { return(() => { if (!MapOptions.playerIcons.ContainsKey(index) || !GM.canKill) { return false; } Vector3 pos = gmCalcPos(index) + Vector3.up * 0.55f; Vector3 scale = new Vector3(0.4f, 0.25f, 1.0f); if (gmKillButtons[index].PositionOffset != pos) { gmKillButtons[index].PositionOffset = pos; gmKillButtons[index].LocalScale = scale; } PlayerControl target = Helpers.playerById(index); if (target.Data.IsDead) { gmKillButtons[index].buttonText = ModTranslation.getString("gmRevive"); } else { gmKillButtons[index].buttonText = ModTranslation.getString("gmKill"); } //MapOptions.playerIcons[index].gameObject.SetActive(PlayerControl.LocalPlayer.CanMove); return true; }); } for (byte i = 0; i < 15; i++) { //TheOtherRolesPlugin.Instance.Log.LogInfo($"Added {i}"); CustomButton gmButton = new CustomButton( // Action OnClick gmButtonOnClick(i), // bool HasButton gmHasButton(i), // bool CouldUse gmCouldUse(i), // Action OnMeetingEnds () => { }, // sprite null, // position Vector3.zero, // hudmanager hm, hm.UseButton, // keyboard shortcut null, true ); gmButton.Timer = 0.0f; gmButton.MaxTimer = 0.0f; gmButton.showButtonText = false; gmButtons.Add(gmButton); CustomButton gmKillButton = new CustomButton( // Action OnClick gmKillButtonOnClick(i), // bool HasButton gmHasKillButton(i), // bool CouldUse gmCouldKill(i), // Action OnMeetingEnds () => { }, // sprite null, // position Vector3.zero, // hudmanager hm, hm.KillButton, // keyboard shortcut null, true ); gmKillButton.Timer = 0.0f; gmKillButton.MaxTimer = 0.0f; gmKillButton.showButtonText = true; var buttonPos = gmKillButton.actionButton.buttonLabelText.transform.localPosition; gmKillButton.actionButton.buttonLabelText.transform.localPosition = new Vector3(buttonPos.x, buttonPos.y + 0.6f, -500f); gmKillButton.actionButton.buttonLabelText.transform.localScale = new Vector3(1.5f, 1.8f, 1.0f); gmKillButtons.Add(gmKillButton); } gmZoomOut = new CustomButton( () => { if (Camera.main.orthographicSize < 18.0f) { Camera.main.orthographicSize *= 1.5f; hm.UICamera.orthographicSize *= 1.5f; } if (hm.transform.localScale.x < 6.0f) { hm.transform.localScale *= 1.5f; } /*TheOtherRolesPlugin.Instance.Log.LogInfo($"Camera zoom {Camera.main.orthographicSize} / {TaskPanelBehaviour.Instance.transform.localPosition.x}");*/ }, () => { return(!(GM.gm == null || PlayerControl.LocalPlayer != GM.gm)); }, () => { return(true); }, () => { }, GM.getZoomOutSprite(), // position Vector3.zero + Vector3.up * 3.75f + Vector3.right * 0.55f, // hudmanager hm, hm.UseButton, // keyboard shortcut KeyCode.PageDown, false ); gmZoomOut.Timer = 0.0f; gmZoomOut.MaxTimer = 0.0f; gmZoomOut.showButtonText = false; gmZoomOut.LocalScale = Vector3.one * 0.275f; gmZoomIn = new CustomButton( () => { if (Camera.main.orthographicSize > 3.0f) { Camera.main.orthographicSize /= 1.5f; hm.UICamera.orthographicSize /= 1.5f; } if (hm.transform.localScale.x > 1.0f) { hm.transform.localScale /= 1.5f; } /*TheOtherRolesPlugin.Instance.Log.LogInfo($"Camera zoom {Camera.main.orthographicSize} / {TaskPanelBehaviour.Instance.transform.localPosition.x}");*/ }, () => { return(!(GM.gm == null || PlayerControl.LocalPlayer != GM.gm)); }, () => { return(true); }, () => { }, GM.getZoomInSprite(), // position Vector3.zero + Vector3.up * 3.75f + Vector3.right * 0.2f, // hudmanager hm, hm.UseButton, // keyboard shortcut KeyCode.PageUp, false ); gmZoomIn.Timer = 0.0f; gmZoomIn.MaxTimer = 0.0f; gmZoomIn.showButtonText = false; gmZoomIn.LocalScale = Vector3.one * 0.275f; }
public static void jackalCreatesSidekick(byte targetId) { foreach (PlayerControl player in PlayerControl.AllPlayerControls) { if (player.PlayerId == targetId) { if (!Jackal.canCreateSidekickFromImpostor && player.Data.IsImpostor) { Jackal.fakeSidekick = player; return; } Sidekick.sidekick = player; player.RemoveInfected(); // Crewmate roles if (player == Jester.jester) { Jester.clearAndReload(); } if (player == Mayor.mayor) { Mayor.clearAndReload(); } if (player == Engineer.engineer) { Engineer.clearAndReload(); } if (player == Sheriff.sheriff) { Sheriff.clearAndReload(); } if (player == Lighter.lighter) { Lighter.clearAndReload(); } if (player == Detective.detective) { Detective.clearAndReload(); } if (player == TimeMaster.timeMaster) { TimeMaster.clearAndReload(); } if (player == Medic.medic) { Medic.clearAndReload(); } if (player == Shifter.shifter) { Shifter.clearAndReload(); } if (player == Seer.seer) { Seer.clearAndReload(); } if (player == Spy.spy) { Spy.clearAndReload(); } if (player == Child.child) { Child.clearAndReload(); } if (player == Tracker.tracker) { Tracker.clearAndReload(); } if (player == BountyHunter.bountyHunter) { BountyHunter.clearAndReload(); } if (player == Snitch.snitch) { Snitch.clearAndReload(); } if (player == Swapper.swapper) { Swapper.clearAndReload(); } // Impostor roles if (player == Morphling.morphling) { Morphling.clearAndReload(); } if (player == Camouflager.camouflager) { Camouflager.clearAndReload(); } if (player == Godfather.godfather) { Godfather.clearAndReload(); } if (player == Mafioso.mafioso) { Mafioso.clearAndReload(); } if (player == Janitor.janitor) { Janitor.clearAndReload(); } if (player == Vampire.vampire) { Vampire.clearAndReload(); } // The Sidekick stays a part of the lover couple! if (PlayerControl.LocalPlayer == null) { return; } if (PlayerControl.LocalPlayer == player) { //Only the Lover keeps his ImportantTextTask Helpers.removeTasksFromPlayer(player, player != Lovers.lover1 && player != Lovers.lover2); var task = new GameObject("RoleTask").AddComponent <ImportantTextTask>(); task.transform.SetParent(player.transform, false); task.Text = "[00B4EBFF]Sidekick: Help your Jackal to kill everyone"; player.myTasks.Insert(0, task); } return; } } }