private static Action Guess(Assassin role, PlayerVoteArea voteArea) { void Listener() { if ( MeetingHud.Instance.state == MeetingHud.VoteStates.Discussion || IsExempt(voteArea) ) { return; } var targetId = voteArea.TargetPlayerId; var currentGuess = role.Guesses[targetId]; if (currentGuess == "None") { return; } var playerRole = Role.GetRole(voteArea); var toDie = playerRole.Name == currentGuess ? playerRole.Player : role.Player; AssassinKill.RpcMurderPlayer(toDie); role.RemainingKills--; ShowHideButtons.HideSingle(role, targetId, toDie == role.Player); if (toDie.isLover() && CustomGameOptions.BothLoversDie) { var lover = ((Lover)playerRole).OtherLover.Player; ShowHideButtons.HideSingle(role, lover.PlayerId, false); } } return(Listener); }
static void addSwapperSwapButtons(MeetingHud __instance) { if (Swapper.swapper == null || PlayerControl.LocalPlayer != Swapper.swapper || Swapper.swapper.IDOFAMCIJKE.FGNJJFABIHJ) { return; } selections = new bool[__instance.DHCOPOOJCLN.Length]; renderers = new SpriteRenderer[__instance.DHCOPOOJCLN.Length]; for (int i = 0; i < __instance.DHCOPOOJCLN.Length; i++) { PlayerVoteArea playerVoteArea = __instance.DHCOPOOJCLN[i]; GameObject template = playerVoteArea.Buttons.transform.Find("CancelButton").gameObject; GameObject checkbox = UnityEngine.Object.Instantiate(template); checkbox.transform.SetParent(playerVoteArea.transform); checkbox.transform.position = template.transform.position; checkbox.transform.localPosition = new Vector3(0f, 0.03f, template.transform.localPosition.z); SpriteRenderer renderer = checkbox.GetComponent <SpriteRenderer>(); renderer.sprite = Swapper.getCheckSprite(); renderer.color = Color.red; PassiveButton button = checkbox.GetComponent <PassiveButton>(); button.OnClick.RemoveAllListeners(); int copiedIndex = i; button.OnClick.AddListener((UnityEngine.Events.UnityAction)(() => onClick(copiedIndex, __instance))); selections[i] = false; renderers[i] = renderer; } }
protected override string NameText(PlayerVoteArea player = null) { if (CamouflageMod.CamouflageUnCamouflage.IsCamoed && player == null) { return(""); } if (PlayerControl.LocalPlayer.Data.IsDead || PlayerControl.LocalPlayer == Player) { return(base.NameText(player)); } if (player != null && (MeetingHud.Instance.state == MeetingHud.VoteStates.Proceeding || MeetingHud.Instance.state == MeetingHud.VoteStates.Results)) { return(Player.name); } Player.nameText.transform.localPosition = new Vector3(0f, (Player.Data.HatId == 0U) ? 1.05f : 1.4f, -0.5f); if (PlayerControl.LocalPlayer.Data.IsImpostor && RoleType == RoleEnum.LoverImpostor) { Player.nameText.Color = Palette.ImpostorRed; if (player != null) { player.NameText.Color = Palette.ImpostorRed; } return(Player.name + "\n" + "Impostor"); } return(Player.name + "\n" + "Lover"); }
protected override string NameText(PlayerVoteArea player = null) { if (CamouflageUnCamouflage.IsCamoed && player == null) { return(""); } if (PlayerControl.LocalPlayer.Data.IsDead) { return(base.NameText(player)); } if (OneTaskLeft || !Hidden) { return(base.NameText(player)); } Player.nameText.color = Color.white; if (player != null) { player.NameText.color = Color.white; } if (player != null && (MeetingHud.Instance.state == MeetingHud.VoteStates.Proceeding || MeetingHud.Instance.state == MeetingHud.VoteStates.Results)) { return(Player.name); } if (!CustomGameOptions.RoleUnderName && player == null) { return(Player.name); } Player.nameText.transform.localPosition = new Vector3( 0f, Player.Data.HatId == 0U ? 1.5f : 2.0f, -0.5f ); return(Player.name + "\n" + "Crewmate"); }
private static void Vote(MeetingHud __instance, PlayerVoteArea area2, int num, Component origin, bool isMayor = false) { ////System.Console.WriteLine(PlayerControl.GameOptions.AnonymousVotes); var playerById = GameData.Instance.GetPlayerById((byte)area2.TargetPlayerId); var renderer = UnityEngine.Object.Instantiate(__instance.PlayerVotePrefab); if (PlayerControl.GameOptions.AnonymousVotes || CustomGameOptions.MayorAnonymous && isMayor ) //Should be AnonymousVotes but weird { //System.Console.WriteLine("ANONS"); PlayerControl.SetPlayerMaterialColors(Palette.DisabledGrey, renderer); } else { //System.Console.WriteLine("NONANONS"); PlayerControl.SetPlayerMaterialColors(playerById.ColorId, renderer); } var transform = renderer.transform; transform.SetParent(origin.transform); transform.localPosition = __instance.CounterOrigin + new Vector3(__instance.CounterOffsets.x * num, 0f, 0f); transform.localScale = Vector3.zero; __instance.StartCoroutine(Effects.Bloop(num * 0.5f, transform, 1f, 0.5f)); }
private static Action Cycle(Assassin role, PlayerVoteArea voteArea, TextMeshPro nameText) { void Listener() { if (MeetingHud.Instance.state == MeetingHud.VoteStates.Discussion) { return; } var currentGuess = role.Guesses[voteArea.TargetPlayerId]; var guessIndex = currentGuess == "None" ? -1 : role.PossibleGuesses.IndexOf(currentGuess); if (++guessIndex == role.PossibleGuesses.Count) { guessIndex = 0; } var newGuess = role.Guesses[voteArea.TargetPlayerId] = role.PossibleGuesses[guessIndex]; nameText.text = newGuess == "None" ? "Guess" : $"<color=#{role.ColorMapping[newGuess].ToHtmlStringRGBA()}>{newGuess}</color>"; } return(Listener); }
static bool Prefix(MeetingHud __instance) { if (__instance.DHCOPOOJCLN.All((PlayerVoteArea ps) => ps.isDead || ps.didVote)) { byte[] self = calculateVotes(__instance); bool tie; int maxIdx = IndexOfMax(self, (byte p) => (int)p, out tie) - 1; GameData.OFKOJOKOOAK exiled = null; foreach (GameData.OFKOJOKOOAK pi in GameData.Instance.AllPlayers) { if (pi.GMBAIPNOKLP == maxIdx) { exiled = pi; break; } } byte[] array = new byte[10]; for (int i = 0; i < __instance.DHCOPOOJCLN.Length; i++) { PlayerVoteArea playerVoteArea = __instance.DHCOPOOJCLN[i]; array[(int)playerVoteArea.HMPHKKGPLAG] = playerVoteArea.GetState(); } // RPCVotingComplete if (AmongUsClient.Instance.HNMILJEOEKN) { __instance.MJIJGEBBMAO(array, exiled, tie); } MessageWriter messageWriter = AmongUsClient.Instance.StartRpc(__instance.NetId, 23, Hazel.SendOption.Reliable); messageWriter.WriteBytesAndSize(array); messageWriter.Write((exiled != null) ? exiled.GMBAIPNOKLP : byte.MaxValue); messageWriter.Write(tie); messageWriter.EndMessage(); } return(false); }
public static Modifier GetModifier(PlayerVoteArea area) { var player = PlayerControl.AllPlayerControls.ToArray() .FirstOrDefault(x => x.PlayerId == area.TargetPlayerId); return(player == null ? null : GetModifier(player)); }
private async ValueTask HandleVote(PlayerVoteArea playerState) { if (playerState.DidVote && !playerState.IsDead) { var player = _game.GameNet.GameData !.GetPlayerById(playerState.TargetPlayerId); if (player != null) { VoteType voteType; InnerPlayerControl?votedForPlayer = null; switch ((VoteType)playerState.VotedFor) { case VoteType.Skip: voteType = VoteType.Skip; break; case VoteType.None: voteType = VoteType.None; break; default: voteType = VoteType.Player; votedForPlayer = _game.GameNet.GameData.GetPlayerById((byte)playerState.VotedFor)?.Controller; break; } await _eventManager.CallAsync(new PlayerVotedEvent(_game, _game.GetClientPlayer(player.Controller !.OwnerId) !, player.Controller, voteType, votedForPlayer)); } } }
public static bool Prefix(PlayerVoteArea __instance) { if (!PlayerControl.LocalPlayer.Is(RoleEnum.Mayor)) { return(true); } var role = Roles.Role.GetRole <Mayor>(PlayerControl.LocalPlayer); if (__instance.Parent.state == MeetingHud.VoteStates.Proceeding || __instance.Parent.state == MeetingHud.VoteStates.Results) { return(false); } if (!role.CanVote) { return(false); } if (__instance != role.Abstain) { role.VoteBank--; role.VotedOnce = true; } else { role.SelfVote = true; } __instance.Parent.Confirm(__instance.TargetPlayerId); return(false); }
private static bool CheckVoted(PlayerVoteArea playerVoteArea) { if (playerVoteArea.AmDead || playerVoteArea.DidVote) { return(true); } var playerInfo = GameData.Instance.GetPlayerById(playerVoteArea.TargetPlayerId); if (playerInfo == null) { return(true); } var playerControl = playerInfo.Object; if (playerControl.Is(RoleEnum.Assassin) && playerInfo.IsDead) { playerVoteArea.VotedFor = PlayerVoteArea.DeadVote; playerVoteArea.SetDead(false, true); return(true); } return(true); }
public static void updateGhostInfo() { foreach (PlayerControl p in PlayerControl.AllPlayerControls) { if (p != PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.Data.IsDead) { continue; } Transform playerGhostInfoTransform = p.transform.FindChild("GhostInfo"); TMPro.TextMeshPro playerGhostInfo = playerGhostInfoTransform != null?playerGhostInfoTransform.GetComponent <TMPro.TextMeshPro>() : null; if (playerGhostInfo == null) { playerGhostInfo = UnityEngine.Object.Instantiate(p.nameText, p.nameText.transform.parent); playerGhostInfo.transform.localPosition += Vector3.up * 0.25f; playerGhostInfo.fontSize *= 0.75f; playerGhostInfo.gameObject.name = "GhostInfo"; } PlayerVoteArea playerVoteArea = MeetingHud.Instance?.playerStates?.FirstOrDefault(x => x.TargetPlayerId == p.PlayerId); Transform meetingGhostInfoTransform = playerVoteArea != null?playerVoteArea.transform.FindChild("GhostInfo") : null; TMPro.TextMeshPro meetingGhostInfo = meetingGhostInfoTransform != null?meetingGhostInfoTransform.GetComponent <TMPro.TextMeshPro>() : null; if (meetingGhostInfo == null && playerVoteArea != null) { meetingGhostInfo = UnityEngine.Object.Instantiate(playerVoteArea.NameText, playerVoteArea.NameText.transform.parent); meetingGhostInfo.transform.localPosition += Vector3.down * (MeetingHud.Instance.playerStates.Length > 10 ? 0.4f : 0.25f); meetingGhostInfo.fontSize *= 0.75f; meetingGhostInfo.gameObject.name = "GhostInfo"; } var(tasksCompleted, tasksTotal) = TasksHandler.taskInfo(p.Data); string roleNames = String.Join(", ", RoleInfo.getRoleInfoForPlayer(p).Select(x => Helpers.cs(x.color, x.name)).ToArray()); string taskInfo = tasksTotal > 0 ? $"<color=#FAD934FF>({tasksCompleted}/{tasksTotal})</color>" : ""; string info = ""; if (p == PlayerControl.LocalPlayer || (MapOptions.ghostsSeeRoles && MapOptions.ghostsSeeTasks)) { info = $"{roleNames} {taskInfo}".Trim(); } else if (MapOptions.ghostsSeeTasks) { info = $"{taskInfo}".Trim(); } else if (MapOptions.ghostsSeeRoles) { info = $"{roleNames}"; } playerGhostInfo.text = info; playerGhostInfo.gameObject.SetActive(p.Visible); if (meetingGhostInfo != null) { meetingGhostInfo.text = MeetingHud.Instance.state == MeetingHud.VoteStates.Results ? "" : info; } } }
public static void MurderPlayer(PlayerControl player, bool checkLover = true) { PlayerVoteArea voteArea = MeetingHud.Instance.playerStates.First( x => x.TargetPlayerId == player.PlayerId ); MurderPlayer(voteArea, player, checkLover); }
public static void RpcMurderPlayer(PlayerControl player) { PlayerVoteArea voteArea = MeetingHud.Instance.playerStates.First( x => x.TargetPlayerId == player.PlayerId ); RpcMurderPlayer(voteArea, player); }
private static void RpcMurderPlayer(PlayerVoteArea voteArea, PlayerControl player) { MurderPlayer(voteArea, player); MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.AssassinKill, SendOption.Reliable, -1); writer.Write(player.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); }
public static void Postfix(GameData.PlayerInfo PPIKPNJEAKJ, ref PlayerVoteArea __result) { if (PPIKPNJEAKJ.Object.AmOwner && customRoles.ContainsKey(PPIKPNJEAKJ.PlayerId)) { var role = customRoles[PlayerControl.LocalPlayer.PlayerId]; __result.NameText.Color = role[0].Colour; } }
public static bool Prefix(PlayerVoteArea __instance) { if (!PlayerControl.LocalPlayer.isMayor()) return true; if (PlayerControl.LocalPlayer.Data.IsDead) return false; if (__instance.isDead) return false; if (VoteBank <= 0 || !__instance.Parent.Select(__instance.TargetPlayerId)) return false; __instance.Buttons.SetActive(true); return false; }
static void Postfix(ref GameData.PlayerInfo PPIKPNJEAKJ, ref PlayerVoteArea __result) { if ( PPIKPNJEAKJ.PlayerId == PlayerControl.LocalPlayer.PlayerId && IsSheriff(PPIKPNJEAKJ.PlayerId) ) { __result.NameText.Color = Palette.Orange; } }
private void PopulateButtons(byte reporter) { _playerStates = _gameNet.GameData.Players .Select(x => { var area = new PlayerVoteArea(this, x.Key); area.SetDead(x.Value.PlayerId == reporter, x.Value.Disconnected || x.Value.IsDead); return(area); }) .ToArray(); }
private void PopulateButtons(byte reporter) { _playerStates = _gameNet.GameData !.Players .OrderBy(x => x.Value.Controller?.OwnerId) // The host player hold MeetingHud players list sorted by NetId/OwnerId .Select(x => { var area = new PlayerVoteArea(this, x.Key); area.SetDead(x.Value.PlayerId == reporter, x.Value.Disconnected || x.Value.IsDead); return(area); }) .ToArray(); }
static bool Prefix(MeetingHud __instance, ref Il2CppStructArray <byte> __result) { Il2CppStructArray <byte> array = new Il2CppStructArray <byte>(11); for (int i = 0; i < __instance.playerStates.Length; i++) { PlayerVoteArea playerVoteArea = __instance.playerStates[i]; if (playerVoteArea.didVote) { int num = (int)(playerVoteArea.votedFor + 1); if (num >= 0 && num < array.Length) { Il2CppStructArray <byte> array2 = array; int num2 = num; // Mayor count vote twice if (Mayor.mayor != null && playerVoteArea.TargetPlayerId == (sbyte)Mayor.mayor.PlayerId) { array2[num2] += 2; } else { array2[num2] += 1; } } } } // Swapper swap votes PlayerVoteArea swapped1 = null; PlayerVoteArea swapped2 = null; foreach (PlayerVoteArea playerVoteArea in __instance.playerStates) { if (playerVoteArea.TargetPlayerId == Swapper.playerId1) { swapped1 = playerVoteArea; } if (playerVoteArea.TargetPlayerId == Swapper.playerId2) { swapped2 = playerVoteArea; } } if (swapped1 != null && swapped2 != null && swapped1.TargetPlayerId + 1 >= 0 && swapped1.TargetPlayerId + 1 < array.Length && swapped2.TargetPlayerId + 1 >= 0 && swapped2.TargetPlayerId + 1 < array.Length) { byte tmp = array[swapped1.TargetPlayerId + 1]; array[swapped1.TargetPlayerId + 1] = array[swapped2.TargetPlayerId + 1]; array[swapped2.TargetPlayerId + 1] = tmp; } __result = array; return(false); }
public static bool Prefix2(PlayerVoteArea __instance) { if (!PlayerControl.LocalPlayer.isMayor()) return true; if (__instance.Parent.state == MeetingHud.VoteStates.Proceeding || __instance.Parent.state == MeetingHud.VoteStates.Results) { return false; } if (VoteBank <= 0) return false; VoteBank--; __instance.Parent.Confirm(__instance.TargetPlayerId); return false; }
private static void PopulateResults(MeetingHud __instance, byte[] states, byte[] votes) { __instance.TitleText.text = TranslationController.Instance.GetString(StringNames.MeetingVotingResults, Array.Empty <Il2CppSystem.Object>()); int num = 0; for (int i = 0; i < __instance.playerStates.Length; i++) { PlayerVoteArea playerVoteArea = __instance.playerStates[i]; playerVoteArea.ClearForResults(); int num2 = 0; for (int j = 0; j < states.Length; j++) { if ((states[j] & 128) == 0) // !isDead { GameData.PlayerInfo playerById = GameData.Instance.GetPlayerById((byte)__instance.playerStates[j].TargetPlayerId); int votedFor = (sbyte)votes[j]; SpriteRenderer spriteRenderer = Object.Instantiate(__instance.PlayerVotePrefab); if (PlayerControl.GameOptions.AnonymousVotes) { PlayerControl.SetPlayerMaterialColors(Palette.DisabledGrey, spriteRenderer); } else { PlayerControl.SetPlayerMaterialColors(playerById.ColorId, spriteRenderer); } spriteRenderer.transform.localScale = Vector3.zero; if (playerVoteArea.TargetPlayerId == votedFor) { Transform transform; (transform = spriteRenderer.transform).SetParent(playerVoteArea.transform); transform.localPosition = __instance.CounterOrigin + new Vector3(__instance.CounterOffsets.x * num2, 0f, 0f); __instance.StartCoroutine(Effects.Bloop(num2 * 0.5f, transform, 1f, 0.5f)); num2++; } else if (i == 0 && votedFor == -1) { Transform transform; (transform = spriteRenderer.transform).SetParent(__instance.SkippedVoting.transform); transform.localPosition = __instance.CounterOrigin + new Vector3(__instance.CounterOffsets.x * num, 0f, 0f); __instance.StartCoroutine(Effects.Bloop(num * 0.5f, transform, 1f, 0.5f)); num++; } } } } }
private static byte[] calculateVotes(MeetingHud __instance) { byte[] array = new byte[16]; for (int i = 0; i < __instance.playerStates.Length; i++) { PlayerVoteArea playerVoteArea = __instance.playerStates[i]; if (playerVoteArea.didVote) { int num = (int)(playerVoteArea.votedFor + 1); if (num >= 0 && num < array.Length) { byte[] array2 = array; int num2 = num; // Mayor count vote twice if (Mayor.mayor != null && playerVoteArea.TargetPlayerId == (sbyte)Mayor.mayor.PlayerId) { array2[num2] += 2; } else { array2[num2] += 1; } } } } // Swapper swap votes PlayerVoteArea swapped1 = null; PlayerVoteArea swapped2 = null; foreach (PlayerVoteArea playerVoteArea in __instance.playerStates) { if (playerVoteArea.TargetPlayerId == Swapper.playerId1) { swapped1 = playerVoteArea; } if (playerVoteArea.TargetPlayerId == Swapper.playerId2) { swapped2 = playerVoteArea; } } if (swapped1 != null && swapped2 != null && swapped1.TargetPlayerId + 1 >= 0 && swapped1.TargetPlayerId + 1 < array.Length && swapped2.TargetPlayerId + 1 >= 0 && swapped2.TargetPlayerId + 1 < array.Length) { byte tmp = array[swapped1.TargetPlayerId + 1]; array[swapped1.TargetPlayerId + 1] = array[swapped2.TargetPlayerId + 1]; array[swapped2.TargetPlayerId + 1] = tmp; } return(array); }
static void populateButtonsPostfix(MeetingHud __instance) { // Reposition button if there are more than 10 players float scale = 5f / 8f; // 8 rows are needed instead of 5 if (__instance.GBKFCOAKLAH != null && __instance.GBKFCOAKLAH.Length > 10) { for (int i = 0; i < __instance.GBKFCOAKLAH.Length; i++) { PlayerVoteArea area = __instance.GBKFCOAKLAH[i]; bool isLeft = i % 2 == 0; int num2 = i / 2; area.transform.localPosition = __instance.VoteOrigin + new Vector3(isLeft ? 1f : 3.9f, __instance.VoteButtonOffsets.y * (float)num2 * scale, area.transform.localPosition.z); area.transform.localScale = new Vector3(area.transform.localScale.x * scale, area.transform.localScale.y * scale, area.transform.localScale.z); } } // Add Swapper Buttons if (Swapper.swapper == null || PlayerControl.LocalPlayer != Swapper.swapper || Swapper.swapper.PPMOEEPBHJO.IAGJEKLJCCI) { return; } selections = new bool[__instance.GBKFCOAKLAH.Length]; renderers = new SpriteRenderer[__instance.GBKFCOAKLAH.Length]; for (int i = 0; i < __instance.GBKFCOAKLAH.Length; i++) { PlayerVoteArea playerVoteArea = __instance.GBKFCOAKLAH[i]; GameObject template = playerVoteArea.Buttons.transform.Find("CancelButton").gameObject; GameObject checkbox = UnityEngine.Object.Instantiate(template); checkbox.transform.SetParent(playerVoteArea.transform); checkbox.transform.position = template.transform.position; checkbox.transform.localPosition = new Vector3(0f, 0.03f, template.transform.localPosition.z); SpriteRenderer renderer = checkbox.GetComponent <SpriteRenderer>(); renderer.sprite = Swapper.getCheckSprite(); renderer.color = Color.red; PassiveButton button = checkbox.GetComponent <PassiveButton>(); button.OnClick.RemoveAllListeners(); int copiedIndex = i; button.OnClick.AddListener((UnityEngine.Events.UnityAction)(() => onClick(copiedIndex, __instance))); selections[i] = false; renderers[i] = renderer; } }
static bool Prefix(MeetingHud __instance) { if (__instance.playerStates.All((PlayerVoteArea ps) => ps.isDead || ps.didVote)) { // If skipping is disabled, replace skipps/no-votes with self vote if (target == null && blockSkippingInEmergencyMeetings && noVoteIsSelfVote) { foreach (PlayerVoteArea playerVoteArea in __instance.playerStates) { if (playerVoteArea.votedFor < 0) { playerVoteArea.votedFor = playerVoteArea.TargetPlayerId; // TargetPlayerId } } } byte[] self = calculateVotes(__instance); bool tie; int maxIdx = IndexOfMax(self, (byte p) => (int)p, out tie) - 1; GameData.PlayerInfo exiled = null; foreach (GameData.PlayerInfo pi in GameData.Instance.AllPlayers) { if (pi.PlayerId == maxIdx) { exiled = pi; break; } } byte[] array = new byte[15]; for (int i = 0; i < __instance.playerStates.Length; i++) { PlayerVoteArea playerVoteArea = __instance.playerStates[i]; array[(int)playerVoteArea.TargetPlayerId] = playerVoteArea.GetState(); } // RPCVotingComplete if (AmongUsClient.Instance.AmClient) { __instance.VotingComplete(array, exiled, tie); } MessageWriter messageWriter = AmongUsClient.Instance.StartRpc(__instance.NetId, 23, Hazel.SendOption.Reliable); messageWriter.WriteBytesAndSize(array); messageWriter.Write((exiled != null) ? exiled.PlayerId : byte.MaxValue); messageWriter.Write(tie); messageWriter.EndMessage(); } return(false); }
private static bool SetVote(PlayerVoteArea area, sbyte suspectPlayerId) { if (area.didVote) { AllowExtraVotes.ExtraVotes.Add((byte)(suspectPlayerId + 1)); if (!PlayerControl.LocalPlayer.isMayor()) { AllowExtraVotes.VoteBank--; } return(false); } area.didVote = true; area.votedFor = suspectPlayerId; area.Flag.enabled = true; return(true); }
private static bool SetVote(PlayerVoteArea area, sbyte suspectPlayerId, Mayor role) { if (area.didVote) { role.ExtraVotes.Add((byte)(suspectPlayerId + 1)); if (!PlayerControl.LocalPlayer.Is(RoleEnum.Mayor)) { role.VoteBank--; } return(false); } area.didVote = true; area.votedFor = suspectPlayerId; area.Flag.enabled = true; return(true); }
private static bool IsExempt(PlayerVoteArea voteArea) { if (voteArea.AmDead) { return(true); } var player = Utils.PlayerById(voteArea.TargetPlayerId); if ( player == null || player.Data.IsImpostor || player.Data.IsDead || player.Data.Disconnected ) { return(true); } var role = Role.GetRole(player); return(role != null && role.Criteria()); }
public static void Postfix(MeetingHud __instance, [HarmonyArgument(0)] byte reporter) { if (!(LocalRole is Transporter transporter)) { return; } if (LocalPlayer != transporter.Owner) { return; } selected = new bool[__instance.playerStates.Length]; renderers = new SpriteRenderer[__instance.playerStates.Length]; for (var i = 0; i < __instance.playerStates.Count; i++) { PlayerVoteArea playerVoteArea = __instance.playerStates[i]; GameObject template = playerVoteArea.Buttons.transform.Find("CancelButton").gameObject; GameObject transporterButtonObject = Object.Instantiate(template, playerVoteArea.transform); transporterButtonObject.transform.position = template.transform.position; transporterButtonObject.transform.localPosition = new Vector3(0F, 0.03F, template.transform.localPosition.z); var renderer = transporterButtonObject.GetComponent <SpriteRenderer>(); renderer.sprite = ButtonTransport; renderer.color = Color.red; var button = transporterButtonObject.GetComponent <PassiveButton>(); button.OnClick = new Button.ButtonClickedEvent(); int index = i; button.OnClick.AddListener((UnityAction)Listener); selected[i] = false; renderers[i] = renderer; void Listener() { OnClick(index, __instance); } } }