Exemplo n.º 1
0
        public async Task Stop()
        {
            CommandWindow.Log("Stopping round");
            RoundManager.Broadcast("Round has ended.");
            RoundTime = 600;

            State = RoundState.INTERMISSION;

            await Task.Delay(6000);

            Players.ToList().ForEach(p =>
            {
                if (p.Status == PlayerStatus.ALIVE)
                {
                    p.ReviveUnsafe();
                    TTTPlayer.ClearInventoryUnsafe(PlayerTool.getSteamPlayer(p.SteamID));
                }
            });

            await Task.Delay(6000);

            State = RoundState.SETUP;

            LevelManager.ClearBarricadesUnsafe();
            C4Manager.ClearC4();
            TrackerGunManager.ClearTrackedPlayers();
        }
Exemplo n.º 2
0
        protected override void execute(CSteamID executor, string parameter)
        {
            SteamPlayer ply = PlayerTool.getSteamPlayer(executor);

            if (ply is null)
            {
                return;
            }
            TTTPlayer tttplayer = PlayerManager.GetTTTPlayer(executor);

            switch (parameter)
            {
            case "t":
                tttplayer.Role = PlayerRole.TRAITOR;
                tttplayer.SendMessage("Role set to traitor");
                InterfaceManager.ToggleShop(ply.player, tttplayer, 8501);
                break;

            case "d":
                tttplayer.Role = PlayerRole.DETECTIVE;
                tttplayer.SendMessage("Role set to detective");
                InterfaceManager.ToggleShop(ply.player, tttplayer, 8502);
                break;
            }

            tttplayer.SendMessage(parameter);
        }
Exemplo n.º 3
0
        private void OnEnemyConnected(SteamPlayer steamPlayer)
        {
            TTTPlayer createdPlayer = PlayerManager.CreateTTTPlayer(steamPlayer.playerID.steamID, PlayerRole.NONE, PlayerStatus.DEAD);

            Round.AddPlayer(createdPlayer);

            createdPlayer.Revive();

            createdPlayer.SendMessage($"Welcome {steamPlayer.playerID.playerName} to TTTUnturned");
        }
Exemplo n.º 4
0
        private void OnPlayerDied(PlayerLife sender, EDeathCause cause, ELimb limb, CSteamID instigator)
        {
            TTTPlayer tttPly = PlayerManager.GetTTTPlayer(sender.channel.owner.playerID.steamID);


            tttPly.SetStatus(PlayerStatus.DEAD);
            tttPly.Revive();

            InterfaceManager.SendUIEffectTextUnsafe(8490, tttPly.SteamID, true, "RoleValue", "WAITING");
            InterfaceManager.SendUIEffectTextUnsafe(8490, tttPly.SteamID, true, "TimerValue", "00:00");
        }
Exemplo n.º 5
0
        private void OnChatted(SteamPlayer player, EChatMode mode, ref Color chatted, ref bool isRich, string text, ref bool isVisible)
        {
            TTTPlayer tttPlayer = PlayerManager.GetTTTPlayer(player.playerID.steamID);

            if (tttPlayer is null)
            {
                return;
            }

            if (mode == EChatMode.GLOBAL && GetState() != RoundState.SETUP && !player.isAdmin)
            {
                tttPlayer.SendMessage("Global chat is disabled during rounds, press K for area");
                isVisible = false;
            }
        }
Exemplo n.º 6
0
        private void OnPluginKeyTick(Player player, uint simulation, byte key, bool state)
        {
            if (!state || key != 0)
            {
                return;
            }
            TTTPlayer tttPlayer = PlayerManager.GetTTTPlayer(player.channel.owner.playerID.steamID);

            if (tttPlayer is null)
            {
                return;
            }

            if (tttPlayer.GetStatus() == PlayerStatus.DEAD)
            {
                return;
            }
            if (RoundManager.GetState() != RoundState.LIVE)
            {
                return;
            }


            if (KeyCooldowns.ContainsKey(player.channel.owner.playerID.steamID))
            {
                long lastPressed = KeyCooldowns[player.channel.owner.playerID.steamID];
                // 1 second key cooldown on menu
                if (DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - lastPressed < 300)
                {
                    return;
                }

                KeyCooldowns.Remove(player.channel.owner.playerID.steamID);
            }

            KeyCooldowns.Add(player.channel.owner.playerID.steamID, DateTimeOffset.UtcNow.ToUnixTimeMilliseconds());

            if (tttPlayer.Role == PlayerRole.TRAITOR)
            {
                ToggleShop(player, tttPlayer, 8501);
            }
            else if (tttPlayer.Role == PlayerRole.DETECTIVE)
            {
                ToggleShop(player, tttPlayer, 8502);
            }
        }
Exemplo n.º 7
0
 public static void ToggleShop(Player player, TTTPlayer tttPlayer, ushort effectID)
 {
     if (UIToggled.Contains(tttPlayer.SteamID))
     {
         UIToggled.Remove(tttPlayer.SteamID);
         ClearUIEffectUnsafe(effectID, tttPlayer.SteamID);
         player.setPluginWidgetFlag(EPluginWidgetFlags.Modal, false);
         player.setPluginWidgetFlag(EPluginWidgetFlags.ForceBlur, false);
     }
     else
     {
         UIToggled.Add(tttPlayer.SteamID);
         SendUIEffectUnsafe(effectID, 8470, tttPlayer.SteamID, true);
         SendUIEffectTextUnsafe(8470, tttPlayer.SteamID, true, "CreditsValue", tttPlayer.Credits.ToString());
         player.setPluginWidgetFlag(EPluginWidgetFlags.Modal, true);
         player.setPluginWidgetFlag(EPluginWidgetFlags.ForceBlur, true);
     }
 }
Exemplo n.º 8
0
        public async Task Start()
        {
            try
            {
                CommandWindow.Log("Warmup Starting");
                RoundManager.Broadcast("Warmup Starting");
                State = RoundState.WARMUP;

                LevelManager.RespawnItems();
                Players.ToList().ForEach(p => InterfaceManager.ClearAllUI(p.SteamID));

                await Task.Delay(6000);

                Players.ToList().ForEach(p =>
                {
                    p.SetStatus(PlayerStatus.ALIVE);
                    p.TeleportToMapUnsafe();
                    TTTPlayer.ClearInventoryUnsafe(PlayerTool.getSteamPlayer(p.SteamID));
                });

                await Task.Delay(15000);

                CommandWindow.Log("Round is live");
                RoundManager.Broadcast("The round has started.");

                RoleManager.GeneratePlayerRoles();

                Players.ToList().ForEach(p =>
                {
                    if (p.GetRole() == PlayerRole.TRAITOR || p.GetRole() == PlayerRole.DETECTIVE)
                    {
                        p.SetCredits(2);
                    }
                });

                State = RoundState.LIVE;
            } catch (Exception ex)
            {
                CommandWindow.Log(ex);
            }
        }
Exemplo n.º 9
0
        public static void Prefix(byte amount, Vector3 newRagdoll, EDeathCause newCause, ELimb newLimb, CSteamID newKiller, ref EPlayerKill kill, bool trackKill, ERagdollEffect newRagdollEffect, bool canCauseBleeding, PlayerLife __instance)
        {
            Player ply = __instance.channel.owner.player;

            if (ply is null)
            {
                return;
            }

            TTTPlayer player = PlayerManager.GetTTTPlayer(ply.channel.owner.playerID.steamID);

            if (player is null)
            {
                return;
            }

            if (player.Armor)
            {
                amount = (byte)Math.Floor(amount * 0.70f);
            }
        }
Exemplo n.º 10
0
        public static void GeneratePlayerRoles()
        {
            if (RoundManager.GetAllAlivePlayers().Count < Main.Config.MinimumPlayers)
            {
                RoundManager.StopRound();
                return;
            }

            Random          rng     = new Random();
            List <CSteamID> tickets = new List <CSteamID>();

            RoundManager.GetAllPlayers().ForEach(p =>
            {
                tickets.Add(p.SteamID);
            });

            int traitorCount   = (int)Math.Floor(RoundManager.GetAllPlayers().Count / 4.0);
            int detectiveCount = (int)Math.Floor(RoundManager.GetAllPlayers().Count / 8.0);

            if (traitorCount == 0)
            {
                traitorCount = 1;
            }
            if (detectiveCount == 0)
            {
                detectiveCount = 1;
            }

            GroupInfo oldTraitorGroup = GroupManager.getGroupInfo((CSteamID)1);

            if (!(oldTraitorGroup is null))
            {
                UnityThread.executeCoroutine(DeleteTraitorGroup());
            }

            UnityThread.executeCoroutine(CreateTraitorGroup());

            for (var i = 0; i < traitorCount; i++)
            {
                CSteamID selectedTraitor = tickets[rng.Next(tickets.Count)];

                TTTPlayer tttPlayer = PlayerManager.GetTTTPlayer(selectedTraitor);
                if (tttPlayer is null)
                {
                    return;
                }

                tttPlayer.SetRole(PlayerRole.TRAITOR);
                tttPlayer.SendMessageUnsafe("You are a <color=#C72D35>Traitor</color>");

                UnityThread.executeCoroutine(SetSteamGroupEnumerator(tttPlayer.SteamID));

                InterfaceManager.SendUIEffectUnsafe(8499, 8490, tttPlayer.SteamID, true);
                InterfaceManager.SendUIEffectTextUnsafe(8490, tttPlayer.SteamID, true, "RoleValue", "TRAITOR");

                tickets.RemoveAll(x => x == selectedTraitor);
            }

            for (var i = 0; i < detectiveCount; i++)
            {
                CSteamID selectedDetective = tickets[rng.Next(tickets.Count)];

                TTTPlayer tttPlayer = PlayerManager.GetTTTPlayer(selectedDetective);
                tttPlayer.SetRole(PlayerRole.DETECTIVE);
                tttPlayer.SendMessageUnsafe("You are a <color=#2263A9>Detective</color>");
                tttPlayer.AddItemUnsafe(10);

                InterfaceManager.SendUIEffectUnsafe(8496, 8490, tttPlayer.SteamID, true);
                InterfaceManager.SendUIEffectTextUnsafe(8490, tttPlayer.SteamID, true, "RoleValue", "DETECTIVE");

                tickets.RemoveAll(x => x == selectedDetective);
            }

            tickets.ToList().ForEach(steamID =>
            {
                TTTPlayer tttPlayer = PlayerManager.GetTTTPlayer(steamID);
                tttPlayer.SetRole(PlayerRole.INNOCENT);
                tttPlayer.SendMessageUnsafe("You are a <color=#24B938>Innocent</color>");

                InterfaceManager.SendUIEffectUnsafe(8497, 8490, tttPlayer.SteamID, true);
                InterfaceManager.SendUIEffectTextUnsafe(8490, tttPlayer.SteamID, true, "RoleValue", "INNOCENT");

                tickets.RemoveAll(x => x == steamID);
            });
        }
Exemplo n.º 11
0
 public void RemovePlayer(TTTPlayer player) => Players.Remove(player);
Exemplo n.º 12
0
 public void AddPlayer(TTTPlayer player) => Players.Add(player);
Exemplo n.º 13
0
        public void OnEffectButtonClicked(Player player, string buttonName)
        {
            TTTPlayer tttPlayer = PlayerManager.GetTTTPlayer(player.channel.owner.playerID.steamID);

            if (buttonName.Substring(0, 2) == "T_")
            {
                if (tttPlayer.Role != PlayerRole.TRAITOR)
                {
                    return;
                }
                switch (buttonName.Remove(0, 2))
                {
                case "ChargeButton":
                    if (tttPlayer.Credits >= 4)
                    {
                        player.inventory.forceAddItem(new Item(1241, true), true);
                        tttPlayer.SendMessage("You redeemed C4");
                        tttPlayer.RemoveCredits(4);
                    }
                    else
                    {
                        tttPlayer.SendMessage("You do not have enough credits");
                    }
                    break;

                case "LMGButton":
                    if (tttPlayer.Credits >= 3)
                    {
                        player.inventory.forceAddItem(new Item(126, true), true);
                        tttPlayer.SendMessage("You redeemed LMG");
                        tttPlayer.RemoveCredits(3);
                    }
                    else
                    {
                        tttPlayer.SendMessage("You do not have enough credits");
                    }
                    break;

                case "BombVestButton":
                    if (tttPlayer.Credits >= 5)
                    {
                        player.inventory.forceAddItem(new Item(1013, true), true);
                        tttPlayer.SendMessage("You redeemed Bomb Vest");
                        tttPlayer.RemoveCredits(5);
                    }
                    else
                    {
                        tttPlayer.SendMessage("You do not have enough credits");
                    }
                    break;

                case "BodyArmourButton":
                    if (tttPlayer.Armor == false)
                    {
                        if (tttPlayer.Credits >= 2)
                        {
                            tttPlayer.Armor = true;
                            tttPlayer.SendMessage("You redeemed Armor Vest");
                            tttPlayer.RemoveCredits(2);
                        }
                        else
                        {
                            tttPlayer.SendMessage("You do not have enough credits");
                        }
                    }
                    else
                    {
                        tttPlayer.SendMessage("You already have Armor Vest");
                    }
                    break;
                }
                SendUIEffectTextUnsafe(8470, tttPlayer.SteamID, true, "CreditsValue", tttPlayer.Credits.ToString());
            }
            else if (buttonName.Substring(0, 2) == "D_")
            {
                if (tttPlayer.Role != PlayerRole.DETECTIVE)
                {
                    return;
                }
                switch (buttonName.Remove(0, 2))
                {
                case "HealthStationButton":
                    if (tttPlayer.Credits >= 4)
                    {
                        player.inventory.forceAddItem(new Item(1050, true), true);
                        tttPlayer.SendMessage("You redeemed a Health Station");
                        tttPlayer.RemoveCredits(4);
                    }
                    else
                    {
                        tttPlayer.SendMessage("You do not have enough credits");
                    }
                    break;

                case "PrototypeButton":
                    if (tttPlayer.Credits >= 5)
                    {
                        player.inventory.forceAddItem(new Item(1447, true), true);
                        tttPlayer.SendMessage("You redeemed Prototype Scalar");
                        tttPlayer.RemoveCredits(5);
                    }
                    else
                    {
                        tttPlayer.SendMessage("You do not have enough credits");
                    }
                    break;

                case "DefuserButton":
                    if (tttPlayer.Defuser == false)
                    {
                        if (tttPlayer.Credits >= 3)
                        {
                            tttPlayer.Defuser = true;
                            tttPlayer.SendMessage("You redeemed a Defuser");
                            tttPlayer.RemoveCredits(3);
                        }
                        else
                        {
                            tttPlayer.SendMessage("You do not have enough credits");
                        }
                    }
                    else
                    {
                        tttPlayer.SendMessage("You already have a Defuser");
                    }
                    break;

                case "BodyArmourButton":
                    if (tttPlayer.Armor == false)
                    {
                        if (tttPlayer.Credits >= 2)
                        {
                            tttPlayer.Armor = true;
                            tttPlayer.SendMessage("You redeemed Armor Vest");
                            tttPlayer.RemoveCredits(2);
                        }
                        else
                        {
                            tttPlayer.SendMessage("You do not have enough credits");
                        }
                    }
                    else
                    {
                        tttPlayer.SendMessage("You already have Armor Vest");
                    }
                    break;
                }
                SendUIEffectTextUnsafe(8470, tttPlayer.SteamID, true, "CreditsValue", tttPlayer.Credits.ToString());
            }
        }
Exemplo n.º 14
0
        public static void Prefix(CSteamID steamID, byte id, PlayerAnimator __instance)
        {
            Player ply = __instance.channel.owner.player;

            if (ply is null)
            {
                return;
            }
            TTTPlayer tttplayer = PlayerManager.GetTTTPlayer(ply.channel.owner.playerID.steamID);

            if (tttplayer is null)
            {
                return;
            }
            if (tttplayer.Role == PlayerRole.TRAITOR)
            {
                return;
            }

            RaycastInfo traceResult = TraceRay(ply, 10f, RayMasks.BARRICADE_INTERACT);

            if (traceResult is null)
            {
                return;
            }
            if (traceResult.transform is null)
            {
                return;
            }

            InteractableCharge charge = traceResult.transform.gameObject.GetComponent <InteractableCharge>();

            if (charge is null)
            {
                return;
            }

            byte            x;
            byte            y;
            ushort          plant;
            ushort          index;
            BarricadeRegion region;

            if (!BarricadeManager.tryGetInfo(charge.transform, out x, out y, out plant, out index, out region))
            {
                return;
            }

            BarricadeManager.instance.channel.send("tellBarricadeOwnerAndGroup", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[]
            {
                x,
                y,
                plant,
                index,
                (ulong)ply.channel.owner.playerID.steamID,
                (ulong)0
            });

            if (PlayerManager.GetTTTPlayer(__instance.channel.owner.playerID.steamID).Defuser)
            {
                __instance.channel.owner.player.interact.sendSalvageTimeOverride(5f);
            }
            else
            {
                __instance.channel.owner.player.interact.sendSalvageTimeOverride(10f);
            }
            //CSteamID steamID, byte x, byte y, ushort plant, ushort index, ulong newOwner, ulong newGroup
        }