Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        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");
        }
Esempio n. 4
0
 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");
 }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
 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);
 }
Esempio n. 8
0
        public static Modifier GetModifier(PlayerVoteArea area)
        {
            var player = PlayerControl.AllPlayerControls.ToArray()
                         .FirstOrDefault(x => x.PlayerId == area.TargetPlayerId);

            return(player == null ? null : GetModifier(player));
        }
Esempio n. 9
0
        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));
                }
            }
        }
Esempio n. 10
0
            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);
            }
Esempio n. 11
0
            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);
            }
Esempio n. 12
0
        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;
                }
            }
        }
Esempio n. 13
0
        public static void MurderPlayer(PlayerControl player, bool checkLover = true)
        {
            PlayerVoteArea voteArea = MeetingHud.Instance.playerStates.First(
                x => x.TargetPlayerId == player.PlayerId
                );

            MurderPlayer(voteArea, player, checkLover);
        }
Esempio n. 14
0
        public static void RpcMurderPlayer(PlayerControl player)
        {
            PlayerVoteArea voteArea = MeetingHud.Instance.playerStates.First(
                x => x.TargetPlayerId == player.PlayerId
                );

            RpcMurderPlayer(voteArea, player);
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
 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;
     }
 }
Esempio n. 17
0
 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;
 }
Esempio n. 18
0
 static void Postfix(ref GameData.PlayerInfo PPIKPNJEAKJ, ref PlayerVoteArea __result)
 {
     if (
         PPIKPNJEAKJ.PlayerId == PlayerControl.LocalPlayer.PlayerId &&
         IsSheriff(PPIKPNJEAKJ.PlayerId)
         )
     {
         __result.NameText.Color = Palette.Orange;
     }
 }
Esempio n. 19
0
 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();
 }
Esempio n. 20
0
 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();
 }
Esempio n. 21
0
        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);
        }
Esempio n. 22
0
 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;
 }
Esempio n. 23
0
        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++;
                        }
                    }
                }
            }
        }
Esempio n. 24
0
            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);
            }
Esempio n. 25
0
        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;
            }
        }
Esempio n. 26
0
            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);
            }
Esempio n. 27
0
 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);
 }
Esempio n. 28
0
        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);
        }
Esempio n. 29
0
        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());
        }
Esempio n. 30
0
        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);
                }
            }
        }