-- TeleportMenuScript (LocalScript)

-- Получение необходимых сервисов
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local localPlayer = Players.LocalPlayer
local workspace = game:GetService("Workspace")
local RunService = game:GetService("RunService")

-- Создание ScreenGui
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "TeleportMenuGui"
screenGui.Parent = localPlayer:WaitForChild("PlayerGui")
screenGui.ResetOnSpawn = false

-- Создание основного фрейма меню
local menuFrame = Instance.new("Frame")
menuFrame.Name = "MainFrame"
menuFrame.Size = UDim2.new(0, 300, 0, 500) -- Ширина 300, высота 500
menuFrame.Position = UDim2.new(0.5, -150, 0.5, -250) -- Центрирование на экране
menuFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
menuFrame.BorderSizePixel = 0
menuFrame.Visible = false -- Скрыто по умолчанию
menuFrame.Parent = screenGui

-- Добавление заголовка меню
local title = Instance.new("TextLabel")
title.Name = "Title"
title.Size = UDim2.new(1, 0, 0, 50)
title.Position = UDim2.new(0, 0, 0, 0)
title.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
title.BorderSizePixel = 0
title.Font = Enum.Font.GothamBold
title.Text = "Телепорт Меню"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.TextSize = 24
title.Parent = menuFrame

-- Создание кнопки закрытия меню (крестик)
local closeButton = Instance.new("TextButton")
closeButton.Name = "CloseButton"
closeButton.Size = UDim2.new(0, 30, 0, 30)
closeButton.Position = UDim2.new(1, -35, 0, 10)
closeButton.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
closeButton.BorderSizePixel = 0
closeButton.Font = Enum.Font.Gotham
closeButton.Text = "X"
closeButton.TextColor3 = Color3.fromRGB(255, 0, 0)
closeButton.TextSize = 18
closeButton.Parent = menuFrame

-- Создание ScrollingFrame для списка игроков
local playerList = Instance.new("ScrollingFrame")
playerList.Name = "PlayerList"
playerList.Size = UDim2.new(0.9, 0, 0.8, 0)
playerList.Position = UDim2.new(0.05, 0, 0.15, 0)
playerList.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
playerList.BorderSizePixel = 0
playerList.CanvasSize = UDim2.new(0, 0, 5, 0) -- Будет обновлено динамически
playerList.ScrollBarThickness = 6
playerList.Parent = menuFrame

-- Создание Layout для ScrollingFrame
local uiListLayout = Instance.new("UIListLayout")
uiListLayout.Parent = playerList
uiListLayout.SortOrder = Enum.SortOrder.LayoutOrder
uiListLayout.Padding = UDim.new(0, 5)

-- Функция для обновления списка игроков
local function updatePlayerList()
    playerList:ClearAllChildren()
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player ~= localPlayer and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
            -- Создание кнопки для каждого игрока
            local playerButton = Instance.new("TextButton")
            playerButton.Size = UDim2.new(1, -10, 0, 40) -- Ширина 100% минус отступы, высота 40
            playerButton.Position = UDim2.new(0, 5, 0, 0)
            playerButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
            playerButton.BorderSizePixel = 0
            playerButton.Font = Enum.Font.Gotham
            playerButton.Text = player.Name
            playerButton.TextColor3 = Color3.fromRGB(255, 255, 255)
            playerButton.TextSize = 16
            playerButton.Parent = playerList

            -- Обработчик нажатия на кнопку игрока
            playerButton.MouseButton1Click:Connect(function()
                if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
                    local targetPosition = player.Character.HumanoidRootPart.Position + Vector3.new(0, 5, 0)
                    localPlayer.Character:MoveTo(targetPosition)
                    menuFrame.Visible = false
                else
                    -- Если персонаж игрока не загружен
                    local errorLabel = Instance.new("TextLabel")
                    errorLabel.Size = UDim2.new(0, 200, 0, 50)
                    errorLabel.Position = UDim2.new(0.5, -100, 0.8, -25)
                    errorLabel.BackgroundColor3 = Color3.fromRGB(255, 0, 0)
                    errorLabel.BorderSizePixel = 0
                    errorLabel.Font = Enum.Font.Gotham
                    errorLabel.Text = "Не удалось телепортироваться к " .. player.Name
                    errorLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
                    errorLabel.TextSize = 16
                    errorLabel.Parent = screenGui

                    -- Удаление уведомления через 3 секунды
                    delay(3, function()
                        if errorLabel and errorLabel.Parent then
                            errorLabel:Destroy()
                        end
                    end)
                end
            end)
        end
    end
end

-- Обработчик нажатия на кнопку закрытия меню
closeButton.MouseButton1Click:Connect(function()
    menuFrame.Visible = false
end)

-- Обновление списка при подключении/отключении игроков
Players.PlayerAdded:Connect(function()
    if menuFrame.Visible then
        updatePlayerList()
    end
end)

Players.PlayerRemoving:Connect(function()
    if menuFrame.Visible then
        updatePlayerList()
    end
end)

-- Функция для переключения видимости меню
local function toggleMenu()
    menuFrame.Visible = not menuFrame.Visible
    if menuFrame.Visible then
        UserInputService.MouseIconEnabled = true -- Показать курсор
        updatePlayerList() -- Обновить список игроков при открытии меню
    else
        UserInputService.MouseIconEnabled = false -- Скрыть курсор
    end
end

-- Обработка нажатия клавиши P
UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed then return end
    if input.KeyCode == Enum.KeyCode.P then
        toggleMenu()
    end
end)

-- Обновление CanvasSize для ScrollingFrame при изменении списка игроков
Players.PlayerAdded:Connect(function()
    if menuFrame.Visible then
        playerList.CanvasSize = UDim2.new(0, 0, 0, #playerList:GetChildren() * 45)
    end
end)

Players.PlayerRemoving:Connect(function()
    if menuFrame.Visible then
        playerList.CanvasSize = UDim2.new(0, 0, 0, #playerList:GetChildren() * 45)
    end
end)
сделай в этом меню пункт подсветка которую можно включить выключить и чтобы в меню были все игроки сервера и  список обновлялся