Скрипты для роблокс
Обби скрипты (лидер борд)
50 на 50 работает 🏆
Ниже — базовый скрипт для создания лидерборда в Roblox (отображает статистику игроков, например очки). Работает на сервере через ServerScriptService.
Шаг 1. Создание скрипта лидерборда
Вставьте этот код в ServerScriptService (название скрипта — например, LeaderboardScript):
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. Обновление статистики (пример)
Чтобы менять значения в лидерборде (например, добавлять очки), используйте такой код. Его можно разместить в скрипте объекта (например, при сборе монеты):
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):
-- Делаем "Score" первой колонкой в лидерборде
local isPrimary = Instance.new("BoolValue")
isPrimary.Name = "IsPrimary"
isPrimary.Value = true
isPrimary.Parent = score
Как это работает
При входе игрока создаётся папка leaderstats в объекте игрока.
В папке — значения типа IntValue (например, Score), которые отображаются в лидерборде.
Меняя score.Value, вы обновляете статистику в реальном времени.
Важные заметки
Папка обязательно должна называться leaderstats (строчными буквами).
Имена статистик (Score, Coins и т. п.) будут заголовками колонок в лидерборде.
Лидерборд отображается автоматически — не требуется дополнительный UI-код.
Для сохранения данных между сессиями используйте DataStoreService (это отдельный скрипт).
Ниже с UI
Добавим кастомный UI‑интерфейс для лидерборда (таблицу с именами и очками), который будет отображаться у всех игроков.
Что нужно сделать
Создать GUI в StarterGUI → ScreenGui.
Добавить скрипт в ServerScriptService для синхронизации данных.
Добавить локальный скрипт в GUI для отображения.
Шаг 1. Создаём GUI (интерфейс)
В Explorer перейдите в StarterGUI.
Кликните правой кнопкой → Insert Object → ScreenGui. Назовите его, например, LeaderboardUI.
Внутри 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):
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 и вставьте код:
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
В ReplicatedStorage создайте RemoteEvent.
Назовите его UpdateLeaderboard.
Это канал связи между сервером и клиентами для передачи данных лидерборда.