Ejemplo n.º 1
0
        public override void ReportBody(PlayerControl Reporter, DeadPlayer Body)
        {
            if (!ShowReports)
            {
                return;
            }
            if (!IsLocalPlayer())
            {
                return;
            }
            if (Reporter.PlayerId != Player.PlayerId)
            {
                return;
            }

            var ReportMessage = BodyReport.ParseBodyReport(new BodyReport {
                Killer      = PlayerTools.GetPlayerById(Body.KillerId),
                Reporter    = Reporter,
                KillAge     = (float)(DateTime.UtcNow - Body.KillTime).TotalMilliseconds,
                DeathReason = Body.DeathReason
            });

            if (!string.IsNullOrWhiteSpace(ReportMessage))
            {
                HudManager.Instance.Chat.AddSimpleChat(ReportMessage);

                if (ReportMessage.IndexOf("who", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    DestroyableSingleton <Telemetry> .Instance.SendWho();
                }
            }
        }
Ejemplo n.º 2
0
 public void RespawnTick(TriggerArgs args)
 {
     if (m_deadPlayers.Count > 0)
     {
         for (int i = m_deadPlayers.Count - 1; i >= 0; i--)
         { // traverse list backwards for easy removal of elements in list
             DeadPlayer deadPlayer = m_deadPlayers[i];
             if (deadPlayer.Timestamp + USER_RESPAWN_DELAY_MS < Game.TotalElapsedGameTime)
             {
                 // time to respawn this user
                 // remove entry from list over deadPlayers
                 m_deadPlayers.RemoveAt(i);
                 // remove old body (if any)
                 if (deadPlayer.DeadBody != null)
                 {
                     if (GIB_CORPSES)
                     {
                         deadPlayer.DeadBody.Gib();
                     }
                     else
                     {
                         (deadPlayer.DeadBody).Remove();
                     }
                 }
                 // respawn user
                 IPlayer ply = deadPlayer.User.GetPlayer();
                 if (((ply == null) || (ply.IsDead)))
                 {
                     SpawnUser(deadPlayer.User, deadPlayer.Team);
                 }
             }
         }
     }
 }
Ejemplo n.º 3
0
            static void Postfix(VitalsMinigame __instance)
            {
                // Hacker show time since death
                if (Hacker.hacker != null && Hacker.hacker == PlayerControl.LocalPlayer && Hacker.hackerTimer > 0)
                {
                    for (int k = 0; k < __instance.vitals.Length; k++)
                    {
                        VitalsPanel         vitalsPanel = __instance.vitals[k];
                        GameData.PlayerInfo player      = GameData.Instance.AllPlayers[k];

                        // Hacker update
                        if (vitalsPanel.IsDead)
                        {
                            DeadPlayer deadPlayer = deadPlayers?.Where(x => x.player?.PlayerId == player?.PlayerId)?.FirstOrDefault();
                            if (deadPlayer != null && deadPlayer.timeOfDeath != null && k < hackerTexts.Count && hackerTexts[k] != null)
                            {
                                float timeSinceDeath = ((float)(DateTime.UtcNow - deadPlayer.timeOfDeath).TotalMilliseconds);
                                hackerTexts[k].gameObject.SetActive(true);
                                hackerTexts[k].text = Math.Round(timeSinceDeath / 1000) + "s";
                            }
                        }
                    }
                }
                else
                {
                    foreach (TMPro.TextMeshPro text in hackerTexts)
                    {
                        if (text != null && text.gameObject != null)
                        {
                            text.gameObject.SetActive(false);
                        }
                    }
                }
            }
        private static void AddDeathReason(DeadPlayer deadPlayer, string reasons)
        {
            var deathReasons = reasons.Split(";");
            var detail       = deathReasons[PopeyesRolesModPlugin.Random.Next(0, deathReasons.Length)];

            deadPlayer.DeathDetails.Add(detail);
        }
Ejemplo n.º 5
0
    public void playerDied(KeyCode _tag, Color _col, GameObject lastCollision)
    {
        GameObject    wc       = GameObject.Find("WinnerChecker");
        WinnerChecker wcscript = wc.GetComponent <WinnerChecker>();

        if (lastCollision != null && lastCollision.tag == "deadplayer" && wcscript.getNumPlayersActive() > 1)
        {
            KeyCode    rpk;
            Color      rpc;
            DeadPlayer rpscript = lastCollision.GetComponent <DeadPlayer>();
            rpscript.getInfo(out rpk, out rpc);
            DeadPlayerInfo respawnPlayerInfo = new DeadPlayerInfo(rpk, rpc);
            if (!mDeadPlayers.Contains(respawnPlayerInfo))
            {
                obstaclePrefabs.Add(deadPlayer);
            }
            else
            {
                mDeadPlayers.Remove(respawnPlayerInfo);
                GameObject    ps       = GameObject.Find("PlayerSpawner");
                PlayerSpawner psscript = ps.GetComponent <PlayerSpawner>();
                psscript.respawnPlayer(rpk, rpc);
            }

            mDeadPlayers.Add(new DeadPlayerInfo(_tag, _col));
        }
        else
        {
            mDeadPlayers.Add(new DeadPlayerInfo(_tag, _col));
            obstaclePrefabs.Add(deadPlayer);
        }
    }
Ejemplo n.º 6
0
        public static void Postfix(PlayerControl __instance)
        {
            // Collect dead player info
            DeadPlayer deadPlayer = new DeadPlayer(__instance, DateTime.UtcNow, DeathReason.Exile, null);

            GameHistory.deadPlayers.Add(deadPlayer);
        }
        public static void Postfix(PlayerControl __instance, [HarmonyArgument(0)] PlayerControl target)
        {
            var murderer = __instance;

            if (!murderer.HasPlayerRole(Role.Impostor) && !murderer.HasPlayerRole(Role.ShapeShifter))
            {
                murderer.Data.IsImpostor = false;
            }
            if (PlayerControl.LocalPlayer.HasPlayerRole(Role.Detective))
            {
                var playerData = PlayerControl.LocalPlayer.GetPlayerData();
                var deadPlayer = new DeadPlayer
                {
                    Player   = target,
                    Murderer = murderer
                };
                playerData.DeadPlayers.Add(deadPlayer);

                if (murderer.PlayerId == target.PlayerId)
                {
                    // suicide
                    var deathReasons = Properties.Resources.SuicideDeath;
                    AddDeathReason(deadPlayer, deathReasons);
                }
                else
                {
                    // normal murder
                    if (murderer.GetComponent <MorphBehaviour>())
                    {
                        var deathReasons = Properties.Resources.ShapeShifterDeath;
                        AddDeathReason(deadPlayer, deathReasons);
                    }
                    else if (murderer.HasPlayerRole(Role.Hunter))
                    {
                        var deathReasons = Properties.Resources.HunterDeath;
                        AddDeathReason(deadPlayer, deathReasons);
                    }
                    else if (murderer.Data.IsImpostor)
                    {
                        var deathReasons = Properties.Resources.ImpostorDeath;
                        AddDeathReason(deadPlayer, deathReasons);
                    }
                }
            }
            if (target.HasPlayerRole(Role.Detective))
            {
                PlayerDataManager.Instance.ShieldedPlayer = null;
                foreach (var player in PlayerControl.AllPlayerControls)
                {
                    var shield = player.GetComponent <ShieldBehaviour>();
                    if (shield)
                    {
                        shield.Stop();
                    }
                }
            }
        }
Ejemplo n.º 8
0
        // TODO: Move Functionality to Sheriff-Class and only call from here
        public static void Postfix(PlayerControl __instance, [HarmonyArgument(0)] GameData.PlayerInfo target)
        {
            if (__instance == null || LocalPlayer == null || DeadPlayers.Count <= 0)
            {
                return;
            }

            if (!(LocalRole is Sheriff sheriff))
            {
                return;
            }

            DeadPlayer deadPlayer =
                DeadPlayers.FirstOrDefault(x => target != null && x.Victim?.PlayerId == target.PlayerId);

            if (deadPlayer == null)
            {
                return;
            }

            if (__instance.PlayerId != sheriff.Owner.PlayerId)
            {
                return;
            }

            List <string> hints = deadPlayer.hintMessages.ToList();

            var hintAmount = (int)(Main.OptionSheriffMaxHintAmount -
                                   (int)(deadPlayer.KillAge / 1000F /
                                         Main.OptionSheriffHintDecreaseInterval));

            if (hintAmount < Main.OptionSheriffMinHintAmount)
            {
                hintAmount = (int)Main.OptionSheriffMinHintAmount;
            }

            for (var i = 0; i < hintAmount; i++)
            {
                string hint = hints[Rng.Next(hints.Count)];
                hints.Remove(hint);

                if (string.IsNullOrWhiteSpace(hint))
                {
                    return;
                }

                if (AmongUsClient.Instance.AmClient)
                {
                    HudManager.Instance?.Chat.AddChat(LocalPlayer, $"{deadPlayer.Victim.Data.PlayerName}: {hint}");
                }

                if (hint.IndexOf("who", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    Telemetry.Instance?.SendWho();
                }
            }
        }
Ejemplo n.º 9
0
 //Utility function to end the game and display the Score
 private void ENDGAME()
 {
     //Play an ending sound
     DeadPlayer.Play();
     timer.Stop();
     UpdatePaintTimer.Stop();
     MessageBox.Show("You Lose! Your score is " +
                     Score.ToString(), "Game Over", MessageBoxButton.OK);
     this.Close();
 }
Ejemplo n.º 10
0
    private void death()
    {
        DeadPlayer dead = Instantiate(DeadPlayer, transform.position, transform.rotation).GetComponent <DeadPlayer>();

        dead.fallGravity = controller.fallGravity;
        dead.setVelocity(rb2d.velocity);


        transform.position = respawnPoint.transform.position;
        rb2d.velocity      = Vector3.zero;
        StartCoroutine("respawn");
    }
Ejemplo n.º 11
0
        public static void Postfix(PlayerControl __instance, [HarmonyArgument(0)] PlayerControl target)
        {
            // Collect dead player info
            DeadPlayer deadPlayer = new DeadPlayer(target, DateTime.UtcNow, DeathReason.Kill, __instance);

            GameHistory.deadPlayers.Add(deadPlayer);

            // Reset killer to crewmate if resetToCrewmate
            if (resetToCrewmate)
            {
                __instance.Data.IsImpostor = false;
            }
            if (resetToDead)
            {
                __instance.Data.IsDead = true;
            }
        }
Ejemplo n.º 12
0
    void PropagateDeadPlayer(NetworkPlayer np)
    {
        //DeadPlayer deadP = new DeadPlayer(GetPlayerObjectFromNP(np));
        //if(!m_deadPlayers.Contains(deadP))
        //m_deadPlayers.Add(deadP);
        string name = GetNameFromNetworkPlayer(np);

        Debug.Log("Recieved notification that player: " + np + ", aka '" + name + "' has died.");
        DeadPlayer deadP = new DeadPlayer(GetPlayerObjectFromNP(np));

        m_deadPlayers.Add(deadP);

        if (GetPlayerFromNetworkPlayer(np) != null)
        {
            Destroy(GetPlayerFromNetworkPlayer(np));
        }
    }
Ejemplo n.º 13
0
    private bool spawnObstacle()
    {
        if (obstaclePrefabs.Count == 0)
        {
            return(false);
        }

        mTimeSinceLastObstacle += Time.deltaTime;
        mSequenceTimer         += Time.deltaTime;

        if (mSequenceTimer > obstacleTypeTimer * mObstacleSequenceTypes && mObstacleSequenceTypes < obstacleSequences.Count)
        {
            mSequenceTimer = 0;
            mObstacleSequenceTypes++;
        }

        if (mRng.Next(0, 100) < obsPercChance && mTimeSinceLastObstacle > obstacleTimeLimit)
        {
            int itemType = mRng.Next(0, obstaclePrefabs.Count);

            if (obstaclePrefabs[itemType] == deadPlayer)
            {
                GameObject newItem          = (GameObject)Instantiate(obstaclePrefabs[itemType]);
                int        chosenDeadPlayer = mRng.Next(0, mDeadPlayers.Count);
                DeadPlayer deadScript       = newItem.GetComponent <DeadPlayer>();
                deadScript.setInfo(mDeadPlayers[chosenDeadPlayer].name, mDeadPlayers[chosenDeadPlayer].colour);
                newItem.transform.position = new Vector2(Camera.main.transform.position.x + spawnAheadDistance, deadPlayer.transform.position.y);
                mSpawnedItems.Add(newItem);
            }
            else
            {
                List <GameObject> newObstacles = generateObstacleSequence();
                mSpawnedItems.AddRange(newObstacles);
            }

            mTimeSinceLastObstacle = 0;
            return(true);
        }

        return(false);
    }
        //handle the murder after it's ran
        public static void Postfix(PlayerControl __instance, PlayerControl PAIBDFDMIGK)
        {
            var deadBody = new DeadPlayer
            {
                PlayerId    = PAIBDFDMIGK.PlayerId,
                KillerId    = __instance.PlayerId,
                KillTime    = DateTime.UtcNow,
                DeathReason = DeathReason.Kill
            };

            if (__instance.isPlayerRole(Role.Officer))
            {
                __instance.Data.IsImpostor = false;
            }

            if (__instance.PlayerId == PAIBDFDMIGK.PlayerId)
            {
                deadBody.DeathReason = (DeathReason)3;
            }

            killedPlayers.Add(deadBody);
        }
Ejemplo n.º 15
0
    private void explode(Vector2 top, Vector2 bottom)
    {
        audio.PlayOneShot(explosion);
        var hit = Physics2D.CircleCastAll(transform.position, 5, Vector2.zero, 0, explosionLayers);

        foreach (var wall in hit) // I WANNA PUKE;
        {
            wall.transform.GetComponent <Rigidbody2D>().bodyType = RigidbodyType2D.Dynamic;
        }
        DeadPlayer legsHalf = Instantiate(legs, transform.position, transform.rotation).GetComponent <DeadPlayer>();

        legsHalf.fallGravity = controller.fallGravity;
        legsHalf.setVelocity(bottom);

        DeadPlayer torsoHalf = Instantiate(torso, transform.position, transform.rotation).GetComponent <DeadPlayer>();

        torsoHalf.fallGravity = controller.fallGravity;
        torsoHalf.setVelocity(top);

        transform.position = respawnPoint.transform.position;
        rb2d.velocity      = Vector3.zero;
        StartCoroutine("respawn");
    }
Ejemplo n.º 16
0
        private static void MurderPlayer(
            PlayerVoteArea voteArea,
            PlayerControl player,
            bool checkLover = true
            )
        {
            var hudManager = DestroyableSingleton <HudManager> .Instance;

            if (checkLover)
            {
                SoundManager.Instance.PlaySound(player.KillSfx, false, 0.8f);
                hudManager.KillOverlay.ShowKillAnimation(player.Data, player.Data);
            }
            var amOwner = player.AmOwner;

            if (amOwner)
            {
                hudManager.ShadowQuad.gameObject.SetActive(false);
                player.nameText.GetComponent <MeshRenderer>().material.SetInt("_Mask", 0);
                player.RpcSetScanner(false);
                ImportantTextTask importantTextTask = new GameObject("_Player").AddComponent <ImportantTextTask>();
                importantTextTask.transform.SetParent(AmongUsClient.Instance.transform, false);
                if (!PlayerControl.GameOptions.GhostsDoTasks)
                {
                    for (int i = 0; i < player.myTasks.Count; i++)
                    {
                        PlayerTask playerTask = player.myTasks.ToArray()[i];
                        playerTask.OnRemove();
                        Object.Destroy(playerTask.gameObject);
                    }

                    player.myTasks.Clear();
                    importantTextTask.Text = DestroyableSingleton <TranslationController> .Instance.GetString(
                        StringNames.GhostIgnoreTasks,
                        new UnhollowerBaseLib.Il2CppReferenceArray <Il2CppSystem.Object>(0)
                        );
                }
                else
                {
                    importantTextTask.Text = DestroyableSingleton <TranslationController> .Instance.GetString(
                        StringNames.GhostDoTasks,
                        new UnhollowerBaseLib.Il2CppReferenceArray <Il2CppSystem.Object>(0));
                }

                player.myTasks.Insert(0, importantTextTask);

                if (player.Is(RoleEnum.Swapper))
                {
                    var buttons = Role.GetRole <Swapper>(player).Buttons;
                    foreach (var button in buttons)
                    {
                        button.SetActive(false);
                        button.GetComponent <PassiveButton>().OnClick = new Button.ButtonClickedEvent();
                    }
                }
            }
            player.Die(DeathReason.Kill);
            if (checkLover && player.isLover() && CustomGameOptions.BothLoversDie)
            {
                MurderPlayer(Role.GetRole <Lover>(player).OtherLover.Player, false);
            }

            var meetingHud = MeetingHud.Instance;

            if (amOwner)
            {
                meetingHud.SetForegroundForDead();
            }
            var deadPlayer = new DeadPlayer
            {
                PlayerId = player.PlayerId,
                KillerId = player.PlayerId,
                KillTime = System.DateTime.UtcNow,
            };

            Murder.KilledPlayers.Add(deadPlayer);
            if (voteArea == null)
            {
                return;
            }
            if (voteArea.DidVote)
            {
                voteArea.UnsetVote();
            }
            voteArea.AmDead = true;
            voteArea.Overlay.gameObject.SetActive(true);
            voteArea.Overlay.color = Color.white;
            voteArea.XMark.gameObject.SetActive(true);
            voteArea.XMark.transform.localScale = Vector3.one;

            voteArea.Buttons.SetActive(false);
            var amHost = AmongUsClient.Instance.AmHost;

            foreach (var playerVoteArea in meetingHud.playerStates)
            {
                if (playerVoteArea.VotedFor != player.PlayerId)
                {
                    continue;
                }
                playerVoteArea.UnsetVote();
                var voteAreaPlayer = Utils.PlayerById(playerVoteArea.TargetPlayerId);
                if (!voteAreaPlayer.AmOwner)
                {
                    continue;
                }
                meetingHud.ClearVote();
            }

            if (!amHost)
            {
                return;
            }
            foreach (var role in Role.GetRoles(RoleEnum.Mayor))
            {
                var mayor = (Mayor)role;
                if (role.Player.PlayerId == player.PlayerId)
                {
                    mayor.ExtraVotes.Clear();
                }
                else
                {
                    var votesRegained = mayor.ExtraVotes.RemoveAll(x => x == player.PlayerId);

                    if (mayor.Player == PlayerControl.LocalPlayer)
                    {
                        mayor.VoteBank += votesRegained;
                    }

                    var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                                                                            (byte)CustomRPC.AddMayorVoteBank, SendOption.Reliable, -1);
                    writer.Write(mayor.Player.PlayerId);
                    writer.Write(votesRegained);
                    AmongUsClient.Instance.FinishRpcImmediately(writer);
                }
            }
            meetingHud.CheckForEndVoting();
        }
Ejemplo n.º 17
0
 public virtual void ReportBody(PlayerControl Reporter, DeadPlayer Body)
 {
 }
Ejemplo n.º 18
0
 public virtual void PostMurderPlayer(PlayerControl Killer, PlayerControl Target,
                                      DeadPlayer Body)
 {
 }
Ejemplo n.º 19
0
        public override void PostMurderPlayer(PlayerControl Killer, PlayerControl Target, DeadPlayer Body)
        {
            if (Player == null)
            {
                return;
            }

            if (Killer == Player)
            {
                Killer.Data.IsImpostor = false;
            }

            Body.DeathReason = (DeathReason)4;
        }
Ejemplo n.º 20
0
        public async Task LoadObjectsTask()
        {
            string curSceneName = SceneManager.GetActiveScene().name.ToLower();

            while (!curSceneName.Contains("menu") && !curSceneName.Contains("new"))
            {
                await Task.Delay(4000);

                if (SceneManager.sceneLoaded != null)
                {
                    Main.gameController = GameObject.FindObjectOfType <GameController>();
                    await Task.Delay(150);

                    Main.levelController = GameObject.FindObjectOfType <LevelController>();
                    await Task.Delay(150);

                    Main.levelSelectionManager = GameObject.FindObjectOfType <LevelSelectionManager>();
                    await Task.Delay(150);

                    Main.walkieTalkie = GameObject.FindObjectOfType <WalkieTalkie>();
                    await Task.Delay(150);

                    Main.handCamera = GameObject.FindObjectOfType <HandCamera>();
                    await Task.Delay(150);

                    Main.inventoryManager = GameObject.FindObjectOfType <InventoryManager>();
                    await Task.Delay(150);

                    Main.liftButton = GameObject.FindObjectOfType <LiftButton>();
                    await Task.Delay(150);

                    Main.contract = GameObject.FindObjectOfType <Contract>();
                    await Task.Delay(150);

                    Main.pCMenu = GameObject.FindObjectOfType <PCMenu>();
                    await Task.Delay(150);

                    Main.exitLevel = GameObject.FindObjectOfType <ExitLevel>();
                    await Task.Delay(150);

                    Main.ghostAI = GameObject.FindObjectOfType <GhostAI>();
                    await Task.Delay(150);

                    Main.lightSwitch = GameObject.FindObjectOfType <LightSwitch>();
                    await Task.Delay(150);

                    Main.light = GameObject.FindObjectOfType <Light>();
                    await Task.Delay(150);

                    Main.dNAEvidences = Enumerable.ToList <DNAEvidence>(GameObject.FindObjectsOfType <DNAEvidence>());
                    await Task.Delay(150);

                    Main.contracts = Enumerable.ToList <Contract>(GameObject.FindObjectsOfType <Contract>());
                    await Task.Delay(150);

                    Main.items = Enumerable.ToList <InventoryItem>(GameObject.FindObjectsOfType <InventoryItem>());
                    await Task.Delay(150);

                    Main.players = Enumerable.ToList <Player>(GameObject.FindObjectsOfType <Player>());
                    await Task.Delay(150);

                    Main.photonView = GameObject.FindObjectOfType <PhotonView>();
                    await Task.Delay(150);

                    Main.ghostInfo = GameObject.FindObjectOfType <GhostInfo>();
                    await Task.Delay(150);

                    Main.deadPlayer = GameObject.FindObjectOfType <DeadPlayer>();
                    await Task.Delay(150);

                    Main.player = GameObject.FindObjectOfType <Player>();
                    await Task.Delay(150);

                    Main.rigidbody = GameObject.FindObjectOfType <Rigidbody>();
                    await Task.Delay(150);

                    Main.itemSpawner = GameObject.FindObjectOfType <ItemSpawner>();
                    await Task.Delay(150);

                    Main.ghostInteraction = GameObject.FindObjectOfType <GhostInteraction>();
                    await Task.Delay(150);

                    //Main.baseController = GameObject.FindObjectOfType<BaseController>();
                    await Task.Delay(150);

                    Main.ouijaBoard = GameObject.FindObjectOfType <OuijaBoard>();
                    await Task.Delay(150);

                    Main.ouijaBoards = Enumerable.ToList <OuijaBoard>(GameObject.FindObjectsOfType <OuijaBoard>());
                    await Task.Delay(150);

                    Main.keys = Enumerable.ToList <Key>(GameObject.FindObjectsOfType <Key>());
                    await Task.Delay(150);

                    Main.ghosts = Enumerable.ToList <GhostAI>(GameObject.FindObjectsOfType <GhostAI>());
                    await Task.Delay(150);

                    Main.serverManager = GameObject.FindObjectOfType <ServerManager>();
                    await Task.Delay(150);

                    Main.torches = Enumerable.ToList <Torch>(GameObject.FindObjectsOfType <Torch>());
                    await Task.Delay(150);

                    Main.ghostAudio = GameObject.FindObjectOfType <GhostAudio>();
                    await Task.Delay(150);

                    Main.fuseBox = GameObject.FindObjectOfType <FuseBox>();
                    await Task.Delay(150);

                    Main.doors = Enumerable.ToList <Door>(GameObject.FindObjectsOfType <Door>());
                    await Task.Delay(150);

                    Main.lightSwitches = Enumerable.ToList <LightSwitch>(GameObject.FindObjectsOfType <LightSwitch>());
                }
            }
        }
Ejemplo n.º 21
0
        public static void MurderPlayer(PlayerControl killer, PlayerControl target)
        {
            GameData.PlayerInfo data = target.Data;
            if (data != null && !data.IsDead)
            {
                if (killer == PlayerControl.LocalPlayer)
                {
                    SoundManager.Instance.PlaySound(PlayerControl.LocalPlayer.KillSfx, false, 0.8f);
                }

                target.gameObject.layer = LayerMask.NameToLayer("Ghost");
                if (target.AmOwner)
                {
                    try
                    {
                        if (Minigame.Instance)
                        {
                            Minigame.Instance.Close();
                            Minigame.Instance.Close();
                        }

                        if (MapBehaviour.Instance)
                        {
                            MapBehaviour.Instance.Close();
                            MapBehaviour.Instance.Close();
                        }
                    }
                    catch
                    {
                    }

                    DestroyableSingleton <HudManager> .Instance.KillOverlay.ShowOne(killer.Data, data);

                    DestroyableSingleton <HudManager> .Instance.ShadowQuad.gameObject.SetActive(false);

                    target.nameText.GetComponent <MeshRenderer>().material.SetInt("_Mask", 0);
                    target.RpcSetScanner(false);
                    ImportantTextTask importantTextTask = new GameObject("_Player").AddComponent <ImportantTextTask>();
                    importantTextTask.transform.SetParent(AmongUsClient.Instance.transform, false);
                    if (!PlayerControl.GameOptions.GhostsDoTasks)
                    {
                        for (int i = 0; i < target.myTasks.Count; i++)
                        {
                            PlayerTask playerTask = target.myTasks.ToArray()[i];
                            playerTask.OnRemove();
                            UnityEngine.Object.Destroy(playerTask.gameObject);
                        }

                        target.myTasks.Clear();
                        importantTextTask.Text = DestroyableSingleton <TranslationController> .Instance.GetString(
                            StringNames.GhostIgnoreTasks,
                            new UnhollowerBaseLib.Il2CppReferenceArray <Il2CppSystem.Object>(0));
                    }
                    else
                    {
                        importantTextTask.Text = DestroyableSingleton <TranslationController> .Instance.GetString(
                            StringNames.GhostDoTasks,
                            new UnhollowerBaseLib.Il2CppReferenceArray <Il2CppSystem.Object>(0));
                    }

                    target.myTasks.Insert(0, importantTextTask);
                }

                killer.MyPhysics.StartCoroutine(killer.KillAnimations.Random <KillAnimation>()
                                                .CoPerformKill(killer, target));
                var deadBody = new DeadPlayer
                {
                    PlayerId = target.PlayerId,
                    KillerId = killer.PlayerId,
                    KillTime = DateTime.UtcNow,
                };

                Murder.KilledPlayers.Add(deadBody);
                if (!killer.Is(RoleEnum.Glitch) && !killer.Is(RoleEnum.Arsonist))
                {
                    ChildMod.Murder.CheckChild(target);
                }

                if (target.Is(ModifierEnum.Diseased) && killer.Is(RoleEnum.Glitch))
                {
                    var glitch = Roles.Role.GetRole <Roles.Glitch>(killer);
                    glitch.LastKill = DateTime.UtcNow.AddSeconds(2 * CustomGameOptions.GlitchKillCooldown);
                    glitch.Player.SetKillTimer(CustomGameOptions.GlitchKillCooldown * 3);
                }
            }
        }
Ejemplo n.º 22
0
        public IEnumerator LoadObjectsTask()
        {
            yield return(new WaitForSeconds(0.15f));

            Main.missionManager = GameObject.FindObjectOfType <MissionManager>();
            yield return(new WaitForSeconds(0.15f));;
            Main.gameController = GameObject.FindObjectOfType <GameController>();
            yield return(new WaitForSeconds(0.15f));

            Main.levelController = GameObject.FindObjectOfType <LevelController>();
            yield return(new WaitForSeconds(0.15f));;
            Main.levelSelectionManager = GameObject.FindObjectOfType <LevelSelectionManager>();
            yield return(new WaitForSeconds(0.15f));

            Main.walkieTalkie = GameObject.FindObjectOfType <WalkieTalkie>();
            yield return(new WaitForSeconds(0.15f));

            Main.handCamera = GameObject.FindObjectOfType <HandCamera>();
            yield return(new WaitForSeconds(0.15f));

            Main.inventoryManager = GameObject.FindObjectOfType <InventoryManager>();
            yield return(new WaitForSeconds(0.15f));

            Main.liftButton = GameObject.FindObjectOfType <LiftButton>();
            yield return(new WaitForSeconds(0.15f));

            Main.contract = GameObject.FindObjectOfType <Contract>();
            yield return(new WaitForSeconds(0.15f));

            Main.pCMenu = GameObject.FindObjectOfType <PCMenu>();
            yield return(new WaitForSeconds(0.15f));

            Main.exitLevel = GameObject.FindObjectOfType <ExitLevel>();
            yield return(new WaitForSeconds(0.15f));

            Main.ghostAI = UnityEngine.Object.FindObjectOfType <GhostAI>();
            yield return(new WaitForSeconds(0.15f));

            Main.lightSwitch = GameObject.FindObjectOfType <LightSwitch>();
            yield return(new WaitForSeconds(0.15f));

            Main.light = GameObject.FindObjectOfType <Light>();
            yield return(new WaitForSeconds(0.15f));

            Main.dNAEvidences = Enumerable.ToList <DNAEvidence>(GameObject.FindObjectsOfType <DNAEvidence>());
            yield return(new WaitForSeconds(0.15f));

            Main.contracts = Enumerable.ToList <Contract>(GameObject.FindObjectsOfType <Contract>());
            yield return(new WaitForSeconds(0.15f));

            Main.items = Enumerable.ToList <InventoryItem>(GameObject.FindObjectsOfType <InventoryItem>());
            yield return(new WaitForSeconds(0.15f));

            Main.players = Enumerable.ToList <Player>(GameObject.FindObjectsOfType <Player>());
            yield return(new WaitForSeconds(0.15f));

            if (Main.levelController != null)
            {
                Main.photonView = (Main.ghostAI.field_Public_PhotonView_0 ?? null);
                yield return(new WaitForSeconds(0.15f));
            }
            Main.ghostInfo = GameObject.FindObjectOfType <GhostInfo>();
            yield return(new WaitForSeconds(0.15f));

            Main.deadPlayer = GameObject.FindObjectOfType <DeadPlayer>();
            yield return(new WaitForSeconds(0.15f));

            Main.player = GameObject.FindObjectOfType <Player>();
            yield return(new WaitForSeconds(0.15f));

            Main.rigidbody = GameObject.FindObjectOfType <Rigidbody>();
            yield return(new WaitForSeconds(0.15f));

            Main.itemSpawner = GameObject.FindObjectOfType <ItemSpawner>();
            yield return(new WaitForSeconds(0.15f));

            Main.ghostInteraction = GameObject.FindObjectOfType <GhostInteraction>();
            yield return(new WaitForSeconds(0.15f));

            //Main.baseController = GameObject.FindObjectOfType<BaseController>();
            yield return(new WaitForSeconds(0.15f));

            Main.ouijaBoard = GameObject.FindObjectOfType <OuijaBoard>();
            yield return(new WaitForSeconds(0.15f));

            Main.ouijaBoards = Enumerable.ToList <OuijaBoard>(GameObject.FindObjectsOfType <OuijaBoard>());
            yield return(new WaitForSeconds(0.15f));

            Main.keys = Enumerable.ToList <Key>(GameObject.FindObjectsOfType <Key>());
            yield return(new WaitForSeconds(0.15f));

            Main.ghosts = Enumerable.ToList <GhostAI>(GameObject.FindObjectsOfType <GhostAI>());
            yield return(new WaitForSeconds(0.15f));

            Main.serverManager = GameObject.FindObjectOfType <ServerManager>();
            yield return(new WaitForSeconds(0.15f));

            Main.torches = Enumerable.ToList <Torch>(GameObject.FindObjectsOfType <Torch>());
            yield return(new WaitForSeconds(0.15f));

            Main.ghostAudio = GameObject.FindObjectOfType <GhostAudio>();
            yield return(new WaitForSeconds(0.15f));

            Main.fuseBox = GameObject.FindObjectOfType <FuseBox>();
            yield return(new WaitForSeconds(0.15f));

            Main.doors = Enumerable.ToList <Door>(GameObject.FindObjectsOfType <Door>());
            yield return(new WaitForSeconds(0.15f));

            Main.lightSwitches = Enumerable.ToList <LightSwitch>(GameObject.FindObjectsOfType <LightSwitch>());

            if (UnityEngine.Object.FindObjectOfType <Player>() != null)
            {
                Main.player = (UnityEngine.Object.FindObjectOfType <Player>() ?? null);
                yield return(new WaitForSeconds(0.15f));

                Main.playerAnim = (Main.player.field_Public_Animator_0 ?? null);
                yield return(new WaitForSeconds(0.15f));

                if (Main.playerAnim != null)
                {
                    Main.boneTransform = (Main.playerAnim.GetBoneTransform((HumanBodyBones)10) ?? null);
                    yield return(new WaitForSeconds(0.15f));

                    if (Main.boneTransform != null)
                    {
                        Main.light = (Main.boneTransform.GetComponent <Light>() ?? null);
                        yield return(new WaitForSeconds(0.15f));
                    }
                }
            }
            yield return(null);

            yield break;
        }