Roblox · Интерфейсы
Над каждым игроком — ник, уровень из таблицы по Tab и ранг: «Игрок», «VIP», «Админ». Уровень обновляется сам.
Синим — что нужно создать.
ReplicatedStorage └─ Overhead (BillboardGui) — шаблон: Size {5,0},{1.6,0}, StudsOffset 0, 2.8, 0 ├─ RankLabel (TextLabel) — ранг, золотой ├─ NameLabel (TextLabel) — ник └─ LevelLabel (TextLabel) — уровень, голубой ServerScriptService ├─ OverheadServer (Script) └─ LevelDemo (Script) — уровень для проверки (по желанию)
Где: ServerScriptService · Script
Зачем: Табличка над каждым игроком.
-- игроки
local Players = game:GetService("Players")
-- шаблон таблички
local RS = game:GetService("ReplicatedStorage")
-- BillboardGui
local template = RS:WaitForChild("Overhead")
-- особые ранги: UserId → название
local RANKS = {
-- впиши свой UserId (create.roblox.com или профиль)
-- [123456789] = "Админ",
-- конец таблицы
}
-- ранг остальных
local DEFAULT_RANK = "Игрок"
-- свою табличку игрок не видит — не мешает смотреть
local HIDE_OWN = true
-- табличка новому персонажу
local function Setup(player, character)
-- голова
local head = character:WaitForChild("Head")
-- прячем стандартное имя
character:WaitForChild("Humanoid").DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
-- копия шаблона
local gui = template:Clone()
-- над головой
gui.Adornee = head
-- хозяину не показываем
if HIDE_OWN then gui.PlayerToHideFrom = player end
-- ник
gui.NameLabel.Text = player.DisplayName
-- ранг: из таблицы, из атрибута Rank или обычный
gui.RankLabel.Text = RANKS[player.UserId] or player:GetAttribute("Rank") or DEFAULT_RANK
-- таблица игрока (ждём до 5 секунд)
local stats = player:WaitForChild("leaderstats", 5)
-- уровень, если есть
local level = stats and stats:WaitForChild("Level", 2)
-- обновить уровень
local function UpdateLevel()
-- «Ур. 5» или пусто
gui.LevelLabel.Text = level and ("Ур. " .. level.Value) or ""
-- конец функции
end
-- сразу
UpdateLevel()
-- уровень есть
if level then
-- уровень вырос — обновляем
local connection = level.Changed:Connect(UpdateLevel)
-- персонаж удалён — отписываемся
gui.Destroying:Connect(function() connection:Disconnect() end)
-- конец проверки
end
-- табличка на месте
gui.Parent = head
-- конец функции
end
-- игрок зашёл
local function OnPlayer(player)
-- каждое появление
player.CharacterAdded:Connect(function(character) Setup(player, character) end)
-- персонаж уже есть
if player.Character then task.spawn(Setup, player, player.Character) end
-- конец функции
end
-- новые игроки
Players.PlayerAdded:Connect(OnPlayer)
-- кто зашёл раньше скрипта
for _, player in ipairs(Players:GetPlayers()) do OnPlayer(player) endГде: ServerScriptService · Script
Зачем: Уровень для проверки.
-- игроки
local Players = game:GetService("Players")
-- игрок зашёл
Players.PlayerAdded:Connect(function(player)
-- таблица по Tab
local stats = player:FindFirstChild("leaderstats") or Instance.new("Folder")
-- имя строго такое
stats.Name = "leaderstats"
-- в игрока
stats.Parent = player
-- уровень
local level = Instance.new("IntValue")
-- имя — его ищет табличка
level.Name = "Level"
-- первый
level.Value = 1
-- в таблицу
level.Parent = stats
-- пока игрок в игре
while player.Parent do
-- каждые 20 секунд
task.wait(20)
-- уровень растёт — для проверки
level.Value += 1
-- конец цикла
end
-- конец функции
end)Запусти Play (или Run) и убедись: