Пример #1
0
        public static void SetTarget(KillButtonManager __instance, DeadBody target, Altruist role)
        {
            if (role.CurrentTarget && role.CurrentTarget != target)
            {
                role.CurrentTarget.bodyRenderer.material.SetFloat("_Outline", 0f);
            }


            if (target != null && target.ParentId == DontRevive)
            {
                target = null;
            }
            role.CurrentTarget = target;
            if (role.CurrentTarget && __instance.enabled)
            {
                var component = role.CurrentTarget.bodyRenderer;
                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);
        }
Пример #2
0
        public static IEnumerator AltruistRevive(DeadBody target, Altruist role)
        {
            var parentId = target.ParentId;
            var position = target.TruePosition;

            var revived = new List <PlayerControl>();


            Utils.MurderPlayer(role.Player, role.Player);

            if (CustomGameOptions.AltruistTargetBody)
            {
                if (target != null)
                {
                    Object.Destroy(target.gameObject);
                }
            }

            var startTime = DateTime.UtcNow;

            while (true)
            {
                var now     = DateTime.UtcNow;
                var seconds = (now - startTime).TotalSeconds;
                if (seconds < CustomGameOptions.ReviveDuration)
                {
                    yield return(null);
                }
                else
                {
                    break;
                }

                if (MeetingHud.Instance)
                {
                    yield break;
                }
            }

            var altruistBody = Object.FindObjectsOfType <DeadBody>().FirstOrDefault(b => b.ParentId == role.Player.PlayerId);

            if (altruistBody != null)
            {
                Object.Destroy(altruistBody.gameObject);
            }

            var player = Utils.PlayerById(parentId);


            player.Revive();
            MedicMod.Murder.KilledPlayers.Remove(
                MedicMod.Murder.KilledPlayers.FirstOrDefault(x => x.PlayerId == player.PlayerId));
            revived.Add(player);
            player.NetTransform.SnapTo(position);

            if (target != null)
            {
                Object.Destroy(target.gameObject);
            }

            if (player.isLover())
            {
                var lover = Roles.Role.GetRole <Lover>(player).OtherLover.Player;

                lover.Revive();
                MedicMod.Murder.KilledPlayers.Remove(
                    MedicMod.Murder.KilledPlayers.FirstOrDefault(x => x.PlayerId == lover.PlayerId));
                revived.Add(lover);

                var loverBody = Object.FindObjectsOfType <DeadBody>().FirstOrDefault(b => b.ParentId == lover.PlayerId);

                if (loverBody != null)
                {
                    lover.NetTransform.SnapTo(loverBody.TruePosition);
                    Object.Destroy(loverBody.gameObject);
                }
            }

            if (revived.Any(x => x.AmOwner))
            {
                try
                {
                    Minigame.Instance.Close();
                    Minigame.Instance.Close();
                }
                catch
                {
                }
            }


            if (PlayerControl.LocalPlayer.Data.IsImpostor)
            {
                var gameObj = new GameObject();
                Arrow = gameObj.AddComponent <ArrowBehaviour>();
                gameObj.transform.parent = PlayerControl.LocalPlayer.gameObject.transform;
                var renderer = gameObj.AddComponent <SpriteRenderer>();
                renderer.sprite = Sprite;
                Arrow.image     = renderer;
                gameObj.layer   = 5;
                Target          = player;
                yield return(Utils.FlashCoroutine(role.Color, 1f, 0.5f));
            }
        }
Пример #3
0
        public static IEnumerator AltruistRevive(DeadBody target, Altruist role)
        {
            var parentId = target.ParentId;
            var position = target.TruePosition;

            var revived = new List <PlayerControl>();


            if (AmongUsClient.Instance.AmHost)
            {
                Utils.RpcMurderPlayer(role.Player, role.Player);
            }

            if (CustomGameOptions.AltruistTargetBody)
            {
                if (target != null)
                {
                    foreach (DeadBody deadBody in GameObject.FindObjectsOfType <DeadBody>())
                    {
                        if (deadBody.ParentId == target.ParentId)
                        {
                            deadBody.gameObject.Destroy();
                        }
                    }
                }
            }

            var startTime = DateTime.UtcNow;

            while (true)
            {
                var now     = DateTime.UtcNow;
                var seconds = (now - startTime).TotalSeconds;
                if (seconds < CustomGameOptions.ReviveDuration)
                {
                    yield return(null);
                }
                else
                {
                    break;
                }

                if (MeetingHud.Instance)
                {
                    yield break;
                }
            }

            foreach (DeadBody deadBody in GameObject.FindObjectsOfType <DeadBody>())
            {
                if (deadBody.ParentId == role.Player.PlayerId)
                {
                    deadBody.gameObject.Destroy();
                }
            }

            var player = Utils.PlayerById(parentId);

            // if (player == null || AmongUsClient.Instance.GameState != InnerNetClient.GameStates.Started)
            //     yield break;

            player.Revive();
            Murder.KilledPlayers.Remove(
                Murder.KilledPlayers.FirstOrDefault(x => x.PlayerId == player.PlayerId));
            revived.Add(player);
            player.NetTransform.SnapTo(position);

            if (target != null)
            {
                Object.Destroy(target.gameObject);
            }

            if (player.isLover() && CustomGameOptions.BothLoversDie)
            {
                var lover = Role.GetRole <Lover>(player).OtherLover.Player;

                lover.Revive();
                Murder.KilledPlayers.Remove(
                    Murder.KilledPlayers.FirstOrDefault(x => x.PlayerId == lover.PlayerId));
                revived.Add(lover);

                foreach (DeadBody deadBody in GameObject.FindObjectsOfType <DeadBody>())
                {
                    if (deadBody.ParentId == lover.PlayerId)
                    {
                        deadBody.gameObject.Destroy();
                    }
                }
            }

            if (revived.Any(x => x.AmOwner))
            {
                try
                {
                    Minigame.Instance.Close();
                    Minigame.Instance.Close();
                }
                catch
                {
                }
            }


            if (PlayerControl.LocalPlayer.Data.IsImpostor || PlayerControl.LocalPlayer.Is(RoleEnum.Glitch))
            {
                var gameObj = new GameObject();
                Arrow = gameObj.AddComponent <ArrowBehaviour>();
                gameObj.transform.parent = PlayerControl.LocalPlayer.gameObject.transform;
                var renderer = gameObj.AddComponent <SpriteRenderer>();
                renderer.sprite = Sprite;
                Arrow.image     = renderer;
                gameObj.layer   = 5;
                Target          = player;
                yield return(Utils.FlashCoroutine(role.Color, 1f, 0.5f));
            }
        }