Top.Mail.Ru
Ответы

Скрипты для роблокс

Обби скрипты (лидер борд)

50 на 50 работает 🏆

Ниже — базовый скрипт для создания лидерборда в Roblox (отображает статистику игроков, например очки). Работает на сервере через ServerScriptService.

Шаг 1. Создание скрипта лидерборда

Вставьте этот код в ServerScriptService (название скрипта — например, LeaderboardScript):

1234567891011121314151617181920212223242526
local Players = game:GetService("Players")


-- Функция настройки лидерборда для нового игрока
local function leaderboardSetup(player)
    -- Создаём папку leaderstats (обязательно строчными буквами!)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player

    -- Добавляем статистику: например, "Score" (очки)
    local score = Instance.new("IntValue")
    score.Name = "Score"
    score.Value = 0  -- Начальное значение
    score.Parent = leaderstats

    -- Можно добавить другие статистики, например:
    -- local coins = Instance.new("IntValue")
    -- coins.Name = "Coins"
    -- coins.Value = 100
    -- coins.Parent = leaderstats
end

-- Подключаем функцию к событию появления игрока
Players.PlayerAdded:Connect(leaderboardSetup)

Шаг 2. Обновление статистики (пример)

Чтобы менять значения в лидерборде (например, добавлять очки), используйте такой код. Его можно разместить в скрипте объекта (например, при сборе монеты):

12345678910111213141516
local Players = game:GetService("Players")

-- Пример: при касании части игрок получает +10 очков
script.Parent.Touched:Connect(function(hit)
    local player = Players:GetPlayerFromCharacter(hit.Parent)
    if player then
        local leaderstats = player:FindFirstChild("leaderstats")
        if leaderstats then
            local score = leaderstats:FindFirstChild("Score")
            if score then
                score.Value += 10  -- Увеличиваем очки
            end
        end
    end
end)

Шаг 3. Порядок отображения статистики (опционально)

Чтобы задать порядок колонок в лидерборде, добавьте к статистике BoolValue с именем IsPrimary (будет первой колонкой) или NumberValue с именем Priority (чем больше число, тем левее колонка).

Пример (добавляем в функцию leaderboardSetup после создания score):

123456
-- Делаем "Score" первой колонкой в лидерборде
local isPrimary = Instance.new("BoolValue")
isPrimary.Name = "IsPrimary"
isPrimary.Value = true
isPrimary.Parent = score

Как это работает

  1. При входе игрока создаётся папка leaderstats в объекте игрока.

  2. В папке — значения типа IntValue (например, Score), которые отображаются в лидерборде.

  3. Меняя score.Value, вы обновляете статистику в реальном времени.

Важные заметки

  • Папка обязательно должна называться leaderstats (строчными буквами).

  • Имена статистик (Score, Coins и т. п.) будут заголовками колонок в лидерборде.

  • Лидерборд отображается автоматически — не требуется дополнительный UI-код.

  • Для сохранения данных между сессиями используйте DataStoreService (это отдельный скрипт).

Ниже с UI

Добавим кастомный UI‑интерфейс для лидерборда (таблицу с именами и очками), который будет отображаться у всех игроков.

Что нужно сделать

  1. Создать GUI в StarterGUI → ScreenGui.

  2. Добавить скрипт в ServerScriptService для синхронизации данных.

  3. Добавить локальный скрипт в GUI для отображения.

Шаг 1. Создаём GUI (интерфейс)

  1. В Explorer перейдите в StarterGUI.

  2. Кликните правой кнопкой → Insert Object → ScreenGui. Назовите его, например, LeaderboardUI.

  3. Внутри LeaderboardUI создайте:

    • Frame (основная рамка таблицы)

    • TextLabel (заголовок: «Лидерборд»)

    • ScrollingFrame (для списка игроков)

Настройки Frame (основная рамка):

  • Size: {0.3, 0} {0.5, 0} (30% ширины, 50% высоты)

  • Position: {0.05, 0} {0.1, 0} (отступ от края)

  • BackgroundColor3: Color3.fromRGB(30, 30, 30)

  • BorderSizePixel: 0

  • AnchorPoint: {0, 0}

Настройки TextLabel (внутри Frame):

  • Text: «Лидерборд»

  • TextColor3: Color3.fromRGB(255, 255, 255)

  • TextSize: 24

  • Size: {1, 0} {0.1, 0}

  • Position: {0, 0} {0, 0}

Настройки ScrollingFrame (под TextLabel):

  • Size: {1, 0} {0.9, 0}

  • Position: {0, 0} {0.1, 0}

  • BackgroundTransparency: 1

  • ScrollBarImageColor3: Color3.fromRGB(50, 50, 50)

  • CanvasSize: {0, 0} {0, 1000} (высота подстроится автоматически)

Шаг 2. Серверный скрипт (синхронизация данных)

Вставьте в ServerScriptService новый скрипт (например, CustomLeaderboard):

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
local Players = game:GetService("Players")

-- Таблица для хранения данных лидерборда
local leaderboardData = {}

-- Функция обновления данных игрока
local function updatePlayerData(player)
    local leaderstats = player:FindFirstChild("leaderstats")
    if leaderstats then
        local score = leaderstats:FindFirstChild("Score")
        if score then
            leaderboardData[player.UserId] = {
                name = player.Name,
                score = score.Value
            }
        end
    end
end

-- Событие: игрок зашёл
Players.PlayerAdded:Connect(function(player)
    -- Настраиваем leaderstats (как в базовом скрипте)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player

    local score = Instance.new("IntValue")
    score.Name = "Score"
    score.Value = 0
    score.Parent = leaderstats

    -- Обновляем данные
    updatePlayerData(player)

    -- Следим за изменением Score
    score:GetPropertyChangedSignal("Value"):Connect(function()
        updatePlayerData(player)
        -- Отправляем обновление всем клиентам
        game.ReplicatedStorage:FindFirstChild("UpdateLeaderboard"):FireAllClients(leaderboardData)
    end)
end)

-- Событие: игрок вышел
Players.PlayerRemoving:Connect(function(player)
    leaderboardData[player.UserId] = nil
    game.ReplicatedStorage:FindFirstChild("UpdateLeaderboard"):FireAllClients(leaderboardData)
end)

Шаг 3. Локальный скрипт (отображение в GUI)

Внутри LeaderboardUI создайте LocalScript и вставьте код:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local player = Players.LocalPlayer

-- Находим элементы GUI
local frame = script.Parent:WaitForChild("Frame")
local scrollingFrame = frame:WaitForChild("ScrollingFrame")

-- Создаём RemoteEvent для получения данных
local updateEvent = ReplicatedStorage:WaitForChild("UpdateLeaderboard")

-- Функция очистки списка
local function clearList()
    for _, child in ipairs(scrollingFrame:GetChildren()) do
        if child:IsA("Frame") then
            child:Destroy()
        end
    end
end

-- Функция добавления игрока в список
local function addPlayerToLeaderboard(data)
    local playerFrame = Instance.new("Frame")
    playerFrame.Name = tostring(data.userId)
    playerFrame.Size = UDim2.new(1, 0, 0.1, 0)
    playerFrame.BackgroundTransparency = 0.8
    playerFrame.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
    playerFrame.BorderSizePixel = 0
    playerFrame.Parent = scrollingFrame

    local nameLabel = Instance.new("TextLabel")
    nameLabel.Text = data.name
    nameLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
    nameLabel.TextSize = 18
    nameLabel.Size = UDim2.new(0.6, 0, 1, 0)
    nameLabel.Position = UDim2.new(0, 0, 0, 0)
    nameLabel.BackgroundTransparency = 1
    nameLabel.Parent = playerFrame

    local scoreLabel = Instance.new("TextLabel")
    scoreLabel.Text = tostring(data.score)
    scoreLabel.TextColor3 = Color3.fromRGB(255, 215, 0)  -- Золотой цвет для очков
    scoreLabel.TextSize = 18
    scoreLabel.Size = UDim2.new(0.3, 0, 1, 0)
    scoreLabel.Position = UDim2.new(0.7, 0, 0, 0)
    scoreLabel.BackgroundTransparency = 1
    scoreLabel.Parent = playerFrame
end

-- Обработчик обновления
updateEvent.OnClientEvent:Connect(function(data)
    clearList()
    -- Сортируем по очкам (убывание)
    local sortedData = {}
    for userId, info in pairs(data) do
        table.insert(sortedData, {
            userId = userId,
            name = info.name,
            score = info.score
        })
    end
    table.sort(sortedData, function(a, b) return a.score > b.score end)

    -- Добавляем в GUI
    for i, playerInfo in ipairs(sortedData) do
        addPlayerToLeaderboard(playerInfo)
    end
end)

-- Инициализация: запрашиваем текущие данные
updateEvent:FireServer()

Шаг 4. Создаём RemoteEvent

  1. В ReplicatedStorage создайте RemoteEvent.

  2. Назовите его UpdateLeaderboard.

Это канал связи между сервером и клиентами для передачи данных лидерборда.



Видео по теме