Пример #1
0
        private void CreateButton(HudManager hudManager)
        {
            if (killButtonManager != null || !hudManager?.KillButton /*|| imageData == null*/)
            {
                return;
            }

            killButtonManager = Object.Instantiate(hudManager.KillButton, hudManager.transform);

            PassiveButton button = killButtonManager.GetComponent <PassiveButton>();

            button.OnClick.RemoveAllListeners();
            button.OnClick.AddListener(new Action(() =>
            {
                if (!IsUsable)
                {
                    return;
                }

                PerformMorph();
            }));

            killButtonManager.gameObject.SetActive(HudVisible && Visible);
            killButtonManager.renderer.enabled = HudVisible && Visible;
        }
Пример #2
0
        public static void Postfix(KillButtonManager __instance, [HarmonyArgument(0)] PlayerControl target)
        {
            if (
                PlayerControl.AllPlayerControls.Count <= 1 ||
                PlayerControl.LocalPlayer == null ||
                PlayerControl.LocalPlayer.Data == null ||
                !PlayerControl.LocalPlayer.Is(RoleEnum.Concealer) ||
                target == null
                )
            {
                return;
            }
            Concealer role = Role.GetRole <Concealer>(PlayerControl.LocalPlayer);

            if (__instance != role.ConcealButton)
            {
                return;
            }

            if (target.Data.IsImpostor)
            {
                __instance.renderer.color = Palette.DisabledClear;
                __instance.renderer.material.SetFloat("_Desat", 1f);
            }
        }
Пример #3
0
            public static void KillButtonPress(Glitch __gInstance, KillButtonManager __instance)
            {
                if (__gInstance.KillTarget != null)
                {
                    if (__gInstance.KillTarget.isShielded())
                    {
                        var medic  = __gInstance.HackTarget.getMedic().Player.PlayerId;
                        var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                                                                                (byte)CustomRPC.AttemptSound, Hazel.SendOption.Reliable, -1);
                        writer.Write(medic);
                        writer.Write(__gInstance.KillTarget.PlayerId);
                        AmongUsClient.Instance.FinishRpcImmediately(writer);
                        if (CustomGameOptions.ShieldBreaks)
                        {
                            __gInstance.LastKill = DateTime.UtcNow;
                        }

                        MedicMod.StopKill.BreakShield(medic, __gInstance.KillTarget.PlayerId,
                                                      CustomGameOptions.ShieldBreaks);


                        return;
                    }

                    __gInstance.LastKill = DateTime.UtcNow;
                    __gInstance.Player.SetKillTimer(CustomGameOptions.GlitchKillCooldown);
                    Utils.RpcMurderPlayer(__gInstance.Player, __gInstance.KillTarget);
                }
            }
Пример #4
0
        public static bool Prefix(KillButtonManager __instance)
        {
            var flag = PlayerControl.LocalPlayer.isTimeMaster();

            if (!flag)
            {
                return(true);
            }
            if (!PlayerControl.LocalPlayer.CanMove)
            {
                return(false);
            }
            var flag2 = Methods.TimeMasterRewindTimer() == 0f & !RecordRewind.rewinding;

            if (!flag2)
            {
                return(false);
            }
            StartStop.StartRewind();
            var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                                                                    (byte)CustomRPC.Rewind, SendOption.Reliable, -1);

            AmongUsClient.Instance.FinishRpcImmediately(writer);
            return(false);
        }
Пример #5
0
        public static void Postfix(KillButtonManager __instance, [HarmonyArgument(0)] PlayerControl target)
        {
            if (PlayerControl.AllPlayerControls.Count <= 1)
            {
                return;
            }
            if (PlayerControl.LocalPlayer == null)
            {
                return;
            }
            if (PlayerControl.LocalPlayer.Data == null)
            {
                return;
            }
            if (!PlayerControl.LocalPlayer.Is(RoleEnum.Morphling))
            {
                return;
            }
            var role = Roles.Role.GetRole <Roles.Morphling>(PlayerControl.LocalPlayer);

            if (target != null && __instance == DestroyableSingleton <HudManager> .Instance.KillButton)
            {
                if (target.Data.IsImpostor)
                {
                    __instance.renderer.color = Palette.DisabledClear;
                    __instance.renderer.material.SetFloat("_Desat", 1f);
                }
            }
        }
Пример #6
0
        public static void SetTarget(KillButtonManager __instance, DeadBody target, Roles.Altruist role)
        {
            if (role.CurrentTarget && role.CurrentTarget != target)
            {
                role.CurrentTarget.GetComponent <SpriteRenderer>().material.SetFloat("_Outline", 0f);
            }


            if (target != null && target.ParentId == DontRevive)
            {
                target = null;
            }
            role.CurrentTarget = target;
            if (role.CurrentTarget && __instance.enabled)
            {
                var component = role.CurrentTarget.GetComponent <SpriteRenderer>();
                component.material.SetFloat("_Outline", 1f);
                component.material.SetColor("_OutlineColor", Color.red);
                __instance.renderer.color = Palette.EnabledColor;
                __instance.renderer.material.SetFloat("_Desat", 0f);
                return;
            }

            __instance.renderer.color = Palette.DisabledClear;
            __instance.renderer.material.SetFloat("_Desat", 1f);
        }
Пример #7
0
        private void Start()
        {
            killButtonManager = UnityEngine.Object.Instantiate(hudManager.KillButton, hudManager.transform);
            startColorButton  = killButtonManager.renderer.color;
            startColorText    = killButtonManager.TimerText.Color;
            killButtonManager.gameObject.SetActive(true);
            killButtonManager.renderer.enabled = true;
            Texture2D tex      = new Texture2D(2, 2, TextureFormat.ARGB32, false);
            Assembly  assembly = Assembly.GetExecutingAssembly();

            tex.LoadImage(assembly.GetManifestResourceStream(ResourceName).ReadFully(), false);
            killButtonManager.renderer.sprite = tex.CreateSprite();
            PassiveButton button = killButtonManager.GetComponent <PassiveButton>();

            button.OnClick.RemoveAllListeners();
            button.OnClick.AddListener((UnityEngine.Events.UnityAction)listener);
            void listener()
            {
                if (Timer < 0f && canUse)
                {
                    killButtonManager.renderer.color = new Color(1f, 1f, 1f, 0.3f);
                    if (hasEffectDuration)
                    {
                        isEffectActive = true;
                        Timer          = EffectDuration;
                        killButtonManager.TimerText.Color = new Color(0, 255, 0);
                    }
                    OnClick();
                }
            }
        }
Пример #8
0
            public static void MimicButtonUpdate(Glitch __gInstance, HudManager __instance)
            {
                if (__gInstance.MimicButton == null)
                {
                    __gInstance.MimicButton = KillButtonManager.Instantiate(__instance.KillButton);
                    __gInstance.MimicButton.gameObject.SetActive(true);
                    __gInstance.MimicButton.renderer.enabled = true;
                }

                __gInstance.MimicButton.renderer.sprite = MimicSprite;


                __gInstance.MimicButton.gameObject.SetActive(__instance.UseButton.isActiveAndEnabled &&
                                                             !__gInstance.Player.Data.IsDead);
                __gInstance.MimicButton.transform.position = new Vector3(
                    Camera.main.ScreenToWorldPoint(new Vector3(0, 0)).x + 0.75f,
                    __instance.UseButton.transform.position.y, __instance.UseButton.transform.position.z);
                __gInstance.MimicButton.SetCoolDown(
                    CustomGameOptions.MimicCooldown - (float)(DateTime.UtcNow - __gInstance.LastMimic).TotalSeconds,
                    CustomGameOptions.MimicCooldown);

                if (!__gInstance.MimicButton.isCoolingDown && !__gInstance.IsUsingMimic)
                {
                    __gInstance.MimicButton.isCoolingDown = false;
                    __gInstance.MimicButton.renderer.material.SetFloat("_Desat", 0f);
                    __gInstance.MimicButton.renderer.color = Palette.EnabledColor;
                }
                else
                {
                    __gInstance.MimicButton.isCoolingDown = true;
                    __gInstance.MimicButton.renderer.material.SetFloat("_Desat", 1f);
                    __gInstance.MimicButton.renderer.color = Palette.DisabledClear;
                }
            }
Пример #9
0
        public bool CheckCooldown(KillButtonManager instance)
        {
            if (!CanKill)
            {
                return(false);
            }

            PlayerControl closest = PlayerTools.FindClosestTarget(player);

            if (closest == null || SpecialRoleIsAssigned(out KeyValuePair <byte, Doctor> doctorKvp) && doctorKvp.Value.protectedPlayer?.PlayerId == closest.PlayerId)
            {
                return(false); // Sound is already checked with the impostor role, so no need to play here
            }

            if (!instance.isCoolingDown)
            {
                return(true);
            }
            if (DoubleKillUsed || closest.Data.IsImpostor)
            {
                return(false);
            }

            SoundManager.Instance.PlaySound(ninjaTwo, false, 100f);
            DoubleKillUsed = true;
            player.MurderPlayer(closest);
            MessageWriter writer = GetWriter(RPC.NinjaDoubleKill);

            writer.Write(player.PlayerId);
            writer.Write(closest.PlayerId);
            CloseWriter(writer);
            player.SetKillTimer(player.killTimer + PlayerControl.GameOptions.KillCooldown * 2);
            return(false);
        }
Пример #10
0
        public static bool Prefix(KillButtonManager __instance)
        {
            var target = __instance.CurrentTarget;

            if (target == null)
            {
                return(true);
            }
            if (target.isShielded())
            {
                if (__instance.isActiveAndEnabled && !__instance.isCoolingDown &&
                    CustomGameOptions.PlayerMurderIndicator)
                {
                    var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                                                                            (byte)CustomRPC.AttemptSound, Hazel.SendOption.None, -1);
                    writer.Write(target.PlayerId);
                    AmongUsClient.Instance.FinishRpcImmediately(writer);
                    BreakShield(target.PlayerId, false);
                }

                return(false);
            }


            return(true);
        }
Пример #11
0
        public static bool Prefix(KillButtonManager __instance)
        {
            if (!PlayerControl.LocalPlayer.Is(RoleEnum.Teleporter))
            {
                return(true);
            }

            if (
                !PlayerControl.LocalPlayer.CanMove ||
                PlayerControl.LocalPlayer.Data.IsDead
                )
            {
                return(false);
            }

            Teleporter role = Role.GetRole <Teleporter>(PlayerControl.LocalPlayer);

            if (__instance != role.TeleportButton)
            {
                return(true);
            }

            if (
                __instance.isCoolingDown ||
                !__instance.isActiveAndEnabled ||
                role.CooldownTimer() > 0 ||
                Utils.IsSabotageActive()
                )
            {
                return(false);
            }

            role.Teleport();
            return(false);
        }
Пример #12
0
        public static bool Prefix(KillButtonManager __instance)
        {
            if (!PlayerControl.LocalPlayer.Is(RoleEnum.Grenadier))
            {
                return(true);
            }
            if (!PlayerControl.LocalPlayer.CanMove || PlayerControl.LocalPlayer.Data.IsDead)
            {
                return(false);
            }
            var role = Role.GetRole <Grenadier>(PlayerControl.LocalPlayer);

            if (__instance != role.FlashButton)
            {
                return(true);
            }
            if (
                __instance.isCoolingDown ||
                !__instance.isActiveAndEnabled ||
                Utils.IsSabotageActive() ||
                role.CooldownTimer() != 0
                )
            {
                return(false);
            }

            var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                                                                    (byte)CustomRPC.FlashGrenade, SendOption.Reliable, -1);

            writer.Write(PlayerControl.LocalPlayer.PlayerId);
            AmongUsClient.Instance.FinishRpcImmediately(writer);
            role.TimeRemaining = CustomGameOptions.GrenadeDuration;
            role.Flash();
            return(false);
        }
Пример #13
0
        public static bool Prefix(KillButtonManager __instance)
        {
            if (__instance != DestroyableSingleton <HudManager> .Instance.KillButton)
            {
                return(true);
            }
            if (!PlayerControl.LocalPlayer.Data.IsImpostor)
            {
                return(true);
            }
            var target = __instance.CurrentTarget;

            if (target == null)
            {
                return(true);
            }
            if (target.isShielded())
            {
                if (__instance.isActiveAndEnabled && !__instance.isCoolingDown)
                {
                    Utils.BreakShield(target);

                    System.Console.WriteLine(CustomGameOptions.ShieldBreaks + "- shield break");
                    if (CustomGameOptions.ShieldBreaks)
                    {
                        PlayerControl.LocalPlayer.SetKillTimer(PlayerControl.GameOptions.KillCooldown);
                    }
                }

                return(false);
            }

            return(true);
        }
Пример #14
0
        public static bool Prefix(KillButtonManager __instance)
        {
            if (__instance != DestroyableSingleton<HudManager>.Instance.KillButton) return true;
            var flag = PlayerControl.LocalPlayer.Is(RoleEnum.Altruist);
            if (!flag) return true;
            if (!PlayerControl.LocalPlayer.CanMove) return false;
            if (PlayerControl.LocalPlayer.Data.IsDead) return false;
            var role = Roles.Role.GetRole<Altruist>(PlayerControl.LocalPlayer);
            
            var flag2 = __instance.isCoolingDown;
            if (flag2) return false;
            if (!__instance.enabled) return false;
            var maxDistance = GameOptionsData.KillDistances[PlayerControl.GameOptions.KillDistance];
            if (Vector2.Distance(role.CurrentTarget.TruePosition,
                PlayerControl.LocalPlayer.GetTruePosition()) > maxDistance) return false;
            var playerId = role.CurrentTarget.ParentId;

            var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                (byte) CustomRPC.AltruistRevive, SendOption.Reliable, -1);
            writer.Write(PlayerControl.LocalPlayer.PlayerId);
            writer.Write(playerId);
            AmongUsClient.Instance.FinishRpcImmediately(writer);

            Coroutines.Start(Coroutine.AltruistRevive(role.CurrentTarget, role));
            return false;
        }
Пример #15
0
        public static bool Prefix(KillButtonManager __instance)
        {
            var flag = PlayerControl.LocalPlayer.Is(RoleEnum.Medic);

            if (!flag)
            {
                return(true);
            }
            var role = Roles.Role.GetRole <Roles.Medic>(PlayerControl.LocalPlayer);

            if (!PlayerControl.LocalPlayer.CanMove)
            {
                return(false);
            }
            if (role.UsedAbility)
            {
                return(false);
            }

            var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                                                                    (byte)CustomRPC.Protect, SendOption.Reliable, -1);

            writer.Write(PlayerControl.LocalPlayer.PlayerId);
            writer.Write(role.ClosestPlayer.PlayerId);
            AmongUsClient.Instance.FinishRpcImmediately(writer);

            role.ShieldedPlayer = role.ClosestPlayer;
            role.UsedAbility    = true;
            return(false);
        }
Пример #16
0
        public override bool PerformKill(KillButtonManager __instance)
        {
            if (__instance != CurseButton)
            {
                return(true);
            }

            if (CurseButton.isCoolingDown)
            {
                return(false);
            }

            if (!CurseButton.isActiveAndEnabled)
            {
                return(false);
            }

            if (Owner._Object.Data.IsDead)
            {
                return(false);
            }

            if (Owner._Object.inVent && !Main.Instance.Config.SpellsInVents)
            {
                return(false);
            }

            Vector3 mouseWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);

            Main.Instance.RpcCreateCurse(mouseWorld, Owner);
            return(false);
        }
Пример #17
0
            public static void HackButtonUpdate(Glitch __gInstance, HudManager __instance)
            {
                if (__gInstance.HackButton == null)
                {
                    __gInstance.HackButton = KillButtonManager.Instantiate(__instance.KillButton);
                    __gInstance.HackButton.gameObject.SetActive(true);
                    __gInstance.HackButton.renderer.enabled = true;
                }

                __gInstance.HackButton.renderer.sprite = HackSprite;


                __gInstance.HackButton.gameObject.SetActive(__instance.UseButton.isActiveAndEnabled &&
                                                            !__gInstance.Player.Data.IsDead);
                __gInstance.HackButton.transform.position = new Vector3(__gInstance.MimicButton.transform.position.x,
                                                                        __instance.ReportButton.transform.position.y, __instance.ReportButton.transform.position.z);
                __gInstance.HackButton.SetCoolDown(
                    CustomGameOptions.HackCooldown - (float)(DateTime.UtcNow - __gInstance.LastHack).TotalSeconds,
                    CustomGameOptions.HackCooldown);

                __gInstance.HackButton.SetTarget(null);
                __gInstance.HackTarget = null;

                if (__gInstance.DistClosest < GameOptionsData.KillDistances[CustomGameOptions.GlitchHackDistance])
                {
                    __gInstance.HackButton.SetTarget(__gInstance.ClosestPlayer);
                    __gInstance.HackTarget = __gInstance.ClosestPlayer;
                }

                if (__gInstance.HackTarget != null)
                {
                    __gInstance.HackTarget.myRend.material.SetColor("_OutlineColor", __gInstance.Color);
                }
            }
Пример #18
0
    private void Start()
    {
        killButtonManager = UnityEngine.Object.Instantiate(hudManager.KillButton, hudManager.transform);
        startColorButton  = killButtonManager.renderer.color;
        startColorText    = killButtonManager.TimerText.Color;
        killButtonManager.gameObject.SetActive(true);
        killButtonManager.renderer.enabled = true;
        Texture2D tex      = GUIExtensions.CreateEmptyTexture();
        Assembly  assembly = Assembly.GetExecutingAssembly();
        Stream    myStream = assembly.GetManifestResourceStream(ResourceName);

        byte[] buttonTexture = Reactor.Extensions.Extensions.ReadFully(myStream);
        ImageConversion.LoadImage(tex, buttonTexture, false);
        killButtonManager.renderer.sprite = GUIExtensions.CreateSprite(tex);
        PassiveButton button = killButtonManager.GetComponent <PassiveButton>();

        button.OnClick.RemoveAllListeners();
        button.OnClick.AddListener((UnityEngine.Events.UnityAction)listener);
        void listener()
        {
            if (Timer < 0f && canUse)
            {
                killButtonManager.renderer.color = new Color(1f, 1f, 1f, 0.3f);
                if (hasEffectDuration)
                {
                    isEffectActive = true;
                    Timer          = EffectDuration;
                    killButtonManager.TimerText.Color = new Color(0, 255, 0);
                }
                OnClick();
            }
        }
    }
Пример #19
0
            public static void HackButtonPress(Glitch __gInstance, KillButtonManager __instance)
            {
                if (__gInstance.HackTarget != null)
                {
                    if (__gInstance.HackTarget.isShielded())
                    {
                        var medic  = __gInstance.HackTarget.getMedic().Player.PlayerId;
                        var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                                                                                (byte)CustomRPC.AttemptSound, Hazel.SendOption.Reliable, -1);
                        writer.Write(medic);
                        writer.Write(__gInstance.HackTarget.PlayerId);
                        AmongUsClient.Instance.FinishRpcImmediately(writer);
                        if (CustomGameOptions.ShieldBreaks)
                        {
                            __gInstance.LastHack = DateTime.UtcNow;
                        }

                        MedicMod.StopKill.BreakShield(medic, __gInstance.HackTarget.PlayerId,
                                                      CustomGameOptions.ShieldBreaks);

                        return;
                    }

                    __gInstance.LastHack = DateTime.UtcNow;
                    //System.Console.WriteLine("Hacking " + __gInstance.HackTarget.Data.PlayerName + "...");
                    __gInstance.RpcSetHacked(__gInstance.HackTarget);
                }
            }
Пример #20
0
        public static bool Prefix(KillButtonManager __instance)
        {
            var flag = PlayerControl.LocalPlayer.Is(RoleEnum.TimeLord);

            if (!flag)
            {
                return(true);
            }
            var role = Roles.Role.GetRole <Roles.TimeLord>(PlayerControl.LocalPlayer);

            if (!PlayerControl.LocalPlayer.CanMove)
            {
                return(false);
            }
            var flag2 = role.TimeLordRewindTimer() == 0f & !RecordRewind.rewinding;

            if (!flag2)
            {
                return(false);
            }
            if (!__instance.enabled)
            {
                return(false);
            }
            StartStop.StartRewind(role);
            var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                                                                    (byte)CustomRPC.Rewind, SendOption.Reliable, -1);

            writer.Write(PlayerControl.LocalPlayer.PlayerId);
            AmongUsClient.Instance.FinishRpcImmediately(writer);
            return(false);
        }
Пример #21
0
            static bool Prefix(ref KillButtonManager __instance)
            {
                if (IsSheriff(PlayerControl.LocalPlayer.PlayerId) && __instance.isActiveAndEnabled &&
                    __instance.CurrentTarget && !__instance.isCoolingDown &&
                    !PlayerControl.LocalPlayer.Data.IsImpostor && PlayerControl.LocalPlayer.CanMove)
                {
                    if (__instance.CurrentTarget.Data.IsImpostor) // target is an impostor
                    {
                        PlayerControl_FixedUpdate.RpcSheriffKill(PlayerControl.LocalPlayer,
                                                                 __instance.CurrentTarget.PlayerId);
                    }
                    else
                    {
                        if (CustomGameOptionsData.customGameOptions.doKillSheriffsTarget.value)
                        {
                            // TODO: uhm
                            PlayerControl_FixedUpdate.RpcSheriffKill(__instance.CurrentTarget,
                                                                     __instance.CurrentTarget.PlayerId);
                        }

                        PlayerControl_FixedUpdate.RpcSheriffKill(PlayerControl.LocalPlayer,
                                                                 PlayerControl.LocalPlayer.PlayerId);
                    }

                    __instance.SetTarget(null);
                    return(false);
                }

                return(true);
            }
Пример #22
0
            public static void MimicButtonPress(Glitch __gInstance, KillButtonManager __instance)
            {
                if (__gInstance.MimicList == null)
                {
                    __gInstance.MimicList = ChatController.Instantiate(HudManager.Instance.Chat);

                    __gInstance.MimicList.transform.SetParent(Camera.main.transform);
                    __gInstance.MimicList.SetVisible(true);
                    __gInstance.MimicList.Toggle();

                    __gInstance.MimicList.TextBubble.enabled = false;
                    __gInstance.MimicList.TextBubble.gameObject.SetActive(false);

                    __gInstance.MimicList.TextArea.enabled = false;
                    __gInstance.MimicList.TextArea.gameObject.SetActive(false);

                    __gInstance.MimicList.BanButton.enabled = false;
                    __gInstance.MimicList.BanButton.gameObject.SetActive(false);

                    __gInstance.MimicList.CharCount.enabled = false;
                    __gInstance.MimicList.CharCount.gameObject.SetActive(false);

                    __gInstance.MimicList.gameObject.transform.GetChild(0).gameObject.GetComponent <SpriteRenderer>().enabled = false;
                    __gInstance.MimicList.gameObject.transform.GetChild(0).gameObject.SetActive(false);

                    __gInstance.MimicList.BackgroundImage.enabled = false;

                    foreach (SpriteRenderer rend in __gInstance.MimicList.Content.GetComponentsInChildren <SpriteRenderer>())
                    {
                        if (rend.name == "SendButton" || rend.name == "QuickChatButton")
                        {
                            rend.enabled = false;
                            rend.gameObject.SetActive(false);
                        }
                    }

                    foreach (var bubble in __gInstance.MimicList.chatBubPool.activeChildren)
                    {
                        bubble.enabled = false;
                        bubble.gameObject.SetActive(false);
                    }
                    __gInstance.MimicList.chatBubPool.activeChildren.Clear();

                    foreach (PlayerControl player in PlayerControl.AllPlayerControls.ToArray().Where(x => x != PlayerControl.LocalPlayer))
                    {
                        bool oldDead = player.Data.IsDead;
                        player.Data.IsDead = false;
                        //System.Console.WriteLine(player.PlayerId);
                        __gInstance.MimicList.AddChat(player, "Click here");
                        player.Data.IsDead = oldDead;
                    }
                }
                else
                {
                    __gInstance.MimicList.Toggle();
                    __gInstance.MimicList.SetVisible(false);
                    __gInstance.MimicList = null;
                }
            }
Пример #23
0
 public static bool Prefix(KillButtonManager __instance)
 {
     if (!PlayerControl.LocalPlayer.Is(RoleEnum.Janitor))
     {
         return(true);
     }
     return(__instance == DestroyableSingleton <HudManager> .Instance.KillButton);
 }
Пример #24
0
        private static bool Prefix(KillButtonManager __instance)
        {
            KillEvent killEvent = new KillEvent(__instance);

            GameEventManager.callPerformKill(killEvent);

            return(killEvent.consume);
        }
Пример #25
0
 public static bool Prefix(KillButtonManager __instance)
 {
     if (!PlayerControl.LocalPlayer.Is(RoleEnum.Janitor))
     {
         return(true);
     }
     return(CustomGameOptions.JanitorKill && Utils.IsLastImp(PlayerControl.LocalPlayer));
 }
Пример #26
0
        public static bool Prefix(KillButtonManager __instance)
        {
            if (!PlayerControl.LocalPlayer.Is(RoleEnum.Concealer))
            {
                return(true);
            }

            if (
                !PlayerControl.LocalPlayer.CanMove ||
                PlayerControl.LocalPlayer.Data.IsDead
                )
            {
                return(false);
            }

            Concealer role = Role.GetRole <Concealer>(PlayerControl.LocalPlayer);

            if (__instance != role.ConcealButton)
            {
                return(true);
            }

            if (
                __instance.isCoolingDown ||
                !__instance.isActiveAndEnabled ||
                role.CooldownTimer() != 0 ||
                role.Target == null ||
                role.Target.Data.IsImpostor
                )
            {
                return(false);
            }

            if (role.Target.isShielded())
            {
                Utils.BreakShield(role.Target);

                if (CustomGameOptions.ShieldBreaks)
                {
                    role.ResetCooldownTimer();
                }

                return(false);
            }

            // Sets concealed player
            role.StartConceal(role.Target);

            MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                                                                              (byte)CustomRPC.Conceal,
                                                                              SendOption.Reliable, -1);

            writer.Write(PlayerControl.LocalPlayer.PlayerId);
            writer.Write(role.Concealed.PlayerId);
            AmongUsClient.Instance.FinishRpcImmediately(writer);

            return(false);
        }
Пример #27
0
        public static bool Prefix(KillButtonManager __instance)
        {
            if (__instance == null || PlayerControl.LocalPlayer == null || PlayerControl.LocalPlayer.Data.IsDead)
            {
                return(false);
            }

            if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Detective detective))
            {
                detective.KillOrCommitSuicide(__instance);
            }

            if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Engineer engineer))
            {
                engineer.ShowRepairMap();
            }

            if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Doctor doctor))
            {
                doctor.SetProtectedPlayer(__instance);
            }

            if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Tracker tracker))
            {
                tracker.ShowMarkTrapMap();
            }

            PlayerControl closest = PlayerTools.FindClosestTarget(PlayerControl.LocalPlayer);

            if (closest != null && PlayerControl.LocalPlayer.Data.IsImpostor &&
                SpecialRoleIsAssigned <Doctor>(out var doctorCheckProtected) &&
                doctorCheckProtected.Value.CheckProtectedPlayer(closest.PlayerId))
            {
                doctorCheckProtected.Value.AttemptKillShielded();
                if (doctorCheckProtected.Value.shieldKillAttemptIndicator)
                {
                    WriteImmediately(RPC.AttemptShield);
                }
                PlayerControl.LocalPlayer.SetKillTimer(PlayerControl.GameOptions.KillCooldown);
            }

            if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Ninja ninja))
            {
                if (ninja.CheckCooldown(__instance))
                {
                    SoundManager.Instance.PlaySound(ninjaOne, false, 100f);
                }
            }

            if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Doctor doctorClosestTarget))
            {
                return(doctorClosestTarget.protectedPlayer == null || PlayerTools.FindClosestTarget(PlayerControl.LocalPlayer)?.PlayerId != doctorClosestTarget.protectedPlayer?.PlayerId);
            }


            return(true);
        }
Пример #28
0
        /// <summary>
        /// Call in HudManager.Start
        /// </summary>
        private CooldownButton(Assembly asm, Action onClick, float cooldown, string embeddedResourcePath /*, float pixelsPerUnit*/, Vector2 positionOffset, ButtonCategory category, HudManager hudManager, bool hasEffectDuration, float effectDuration, Action onEffectEnd)
        {
            OnEffectEnd    = onEffectEnd;
            PositionOffset = positionOffset;
            EffectDuration = effectDuration;
            Category       = category;
            //PixelsPerUnit = pixelsPerUnit;
            MaxTimer = cooldown;
            Timer    = MaxTimer;

            Buttons.Add(this);

            string embeddedResourceFullPath = asm.GetManifestResourceNames().FirstOrDefault(resourceName => resourceName.EndsWith(embeddedResourcePath, StringComparison.Ordinal));

            if (string.IsNullOrEmpty(embeddedResourceFullPath))
            {
                throw new ArgumentNullException(nameof(embeddedResourcePath), $"The embedded resource \"{embeddedResourcePath}\" was not found in assembly \"{asm.GetName().Name}\".");
            }

            Stream resourceStream = asm.GetManifestResourceStream(embeddedResourceFullPath);

            KillButtonManager = Object.Instantiate(hudManager.KillButton, hudManager.transform);

            //StartColorButton = killButtonManager.renderer.color;
            StartColorText = KillButtonManager.TimerText.Color;

            KillButtonManager.gameObject.SetActive(true);
            KillButtonManager.renderer.enabled = true;

            Texture2D tex = GUIExtensions.CreateEmptyTexture();

            byte[] buttonTexture = Reactor.Extensions.Extensions.ReadFully(resourceStream);
            ImageConversion.LoadImage(tex, buttonTexture, false);
            KillButtonManager.renderer.sprite = GUIExtensions.CreateSprite(tex);

            PassiveButton button = KillButtonManager.GetComponent <PassiveButton>();

            button.OnClick.RemoveAllListeners();
            button.OnClick.AddListener(new Action(() =>
            {
                if (Timer < 0f && CanUse)
                {
                    KillButtonManager.renderer.color = new Color(1f, 1f, 1f, 0.3f);

                    if (hasEffectDuration)
                    {
                        IsEffectActive = true;

                        Timer = EffectDuration;

                        KillButtonManager.TimerText.Color = new Color(0, 255, 0);
                    }

                    onClick();
                }
            }));
        }
Пример #29
0
        private static void UpdateKillButton(HudManager __instance)
        {
            KillButton = __instance.KillButton;
            if (PlayerControl.AllPlayerControls.Count <= 1)
            {
                return;
            }
            if (PlayerControl.LocalPlayer == null)
            {
                return;
            }
            if (PlayerControl.LocalPlayer.Data == null)
            {
                return;
            }
            var flag8 = PlayerControl.LocalPlayer.Is(RoleEnum.Sheriff);

            if (flag8)
            {
                var role   = Role.GetRole <Sheriff>(PlayerControl.LocalPlayer);
                var isDead = PlayerControl.LocalPlayer.Data.IsDead;
                if (isDead)
                {
                    KillButton.gameObject.SetActive(false);
                    KillButton.isActive = false;
                }
                else
                {
                    KillButton.gameObject.SetActive(!MeetingHud.Instance);
                    KillButton.isActive = !MeetingHud.Instance;
                    KillButton.SetCoolDown(role.CooldownTimer(), CustomGameOptions.SheriffKillCd);

                    Utils.SetTarget(ref role.ClosestPlayer, KillButton);
                }
            }
            // TODO: Remove this?
            else
            {
                var isImpostor = PlayerControl.LocalPlayer.Data.IsImpostor;
                if (!isImpostor)
                {
                    return;
                }
                var isDead2 = PlayerControl.LocalPlayer.Data.IsDead;
                if (isDead2)
                {
                    KillButton.gameObject.SetActive(false);
                    KillButton.isActive = false;
                }
                else
                {
                    __instance.KillButton.gameObject.SetActive(!MeetingHud.Instance);
                    __instance.KillButton.isActive = !MeetingHud.Instance;
                }
            }
        }
Пример #30
0
        public static bool Prefix(KillButtonManager __instance)
        {
            if (!PlayerControl.LocalPlayer.Is(ModifierEnum.ButtonBarry))
            {
                return(true);
            }
            var role = Modifier.GetModifier <ButtonBarry>(PlayerControl.LocalPlayer);

            if (__instance != role.ButtonButton)
            {
                return(true);
            }
            if (!PlayerControl.LocalPlayer.CanMove)
            {
                return(false);
            }
            if (PlayerControl.LocalPlayer.Data.IsDead)
            {
                return(false);
            }
            if (role.ButtonUsed)
            {
                return(false);
            }
            if (PlayerControl.LocalPlayer.RemainingEmergencies <= 0)
            {
                return(false);
            }
            if (!__instance.enabled)
            {
                return(false);
            }

            System.Console.WriteLine("Reached here!");

            role.ButtonUsed = true;
            var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                                                                    (byte)CustomRPC.BarryButton, SendOption.Reliable, -1);

            writer.Write(PlayerControl.LocalPlayer.PlayerId);
            AmongUsClient.Instance.FinishRpcImmediately(writer);
            if (AmongUsClient.Instance.AmHost)
            {
                MeetingRoomManager.Instance.reporter = PlayerControl.LocalPlayer;
                MeetingRoomManager.Instance.target   = null;
                AmongUsClient.Instance.DisconnectHandlers.AddUnique(MeetingRoomManager.Instance.Cast <IDisconnectHandler>());
                if (ShipStatus.Instance.CheckTaskCompletion())
                {
                    return(false);
                }
                DestroyableSingleton <HudManager> .Instance.OpenMeetingRoom(PlayerControl.LocalPlayer);

                PlayerControl.LocalPlayer.RpcStartMeeting(null);
            }
            return(false);
        }