-- Title Name By Kitoo
-- Pasang Di SPS ( Local Script )
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Config = require(ReplicatedStorage:WaitForChild("Config"))
local LocalPlayer = Players.LocalPlayer
-- All titles
local AllTitles = {}
-- Rank system
local function getRank(summit)
if summit >= 1000 then return "Pengangguran", Color3.fromHSV(tick()%20/20,1,1)
elseif summit >= 550 then return "Pendaki Tak Terbatas", Color3.fromRGB(255,215,0)
elseif summit >= 450 then return "Pendaki Titan", Color3.fromRGB(255,100,100)
elseif summit >= 300 then return "Pendaki Dewa", Color3.fromRGB(255,0,0)
elseif summit >= 250 then return "Pendaki Mitos", Color3.fromRGB(232,42,159)
elseif summit >= 100 then return "Pendaki Legendaris", Color3.fromRGB(255,225,0)
elseif summit >= 50 then return "Pendaki Master", Color3.fromRGB(235,33,43)
elseif summit >= 40 then return "Pendaki Elite", Color3.fromRGB(186,85,211)
elseif summit >= 30 then return "Pendaki Ahli", Color3.fromRGB(153,0,255)
elseif summit >= 20 then return "Pendaki Pro", Color3.fromRGB(30,144,255)
elseif summit >= 10 then return "Pendaki Berpengalaman", Color3.fromRGB(189,232,35)
elseif summit >= 1 then return "Pendaki", Color3.fromRGB(113,214,36)
else return "Pendaki Pemula", Color3.fromRGB(145,66,38)
end
end
local function getRandomRGB()
return Color3.fromHSV(tick()%7/7,0.9,1)
end
-- Device icon
local function getDeviceIcon()
if UserInputService.GamepadEnabled then
return "🎮", Color3.fromRGB(255,255,255)
elseif UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled then
return "📱", Color3.fromRGB(255,255,255)
else
return "💻", Color3.fromRGB(255,255,255)
end
end
-- Create Billboard
local function createBillboard(player)
local char = player.Character or player.CharacterAdded:Wait()
local head = char:WaitForChild("Head")
for _, v in pairs(head:GetChildren()) do
if v:IsA("BillboardGui") then v:Destroy() end
end
local billboard = Instance.new("BillboardGui")
billboard.Size = UDim2.new(0,200,0,100)
billboard.Adornee = head
billboard.AlwaysOnTop = true
billboard.StudsOffset = Vector3.new(0,3,0)
billboard.MaxDistance = 30
billboard.Parent = head
local nameLabel = Instance.new("TextLabel")
nameLabel.Size = UDim2.new(1,0,0.12,0)
nameLabel.Position = UDim2.new(0,0,0.67,0)
nameLabel.BackgroundTransparency = 1
nameLabel.TextScaled = true
nameLabel.Font = Enum.Font.SourceSansBold
nameLabel.Text = player.DisplayName
nameLabel.TextColor3 = Color3.fromRGB(255,255,255)
nameLabel.TextStrokeTransparency = 0.3
nameLabel.TextStrokeColor3 = Color3.fromRGB(0,0,0)
nameLabel.Parent = billboard
local titleLabel = Instance.new("TextLabel")
titleLabel.Size = UDim2.new(1,0,0.18,0)
titleLabel.Position = UDim2.new(0,0,0.39,0)
titleLabel.BackgroundTransparency = 1
titleLabel.TextScaled = true
titleLabel.Font = Enum.Font.SourceSansBold
titleLabel.TextStrokeTransparency = 0.3
titleLabel.TextStrokeColor3 = Color3.fromRGB(0,0,0)
titleLabel.TextColor3 = Color3.fromRGB(255,255,255)
titleLabel.TextXAlignment = Enum.TextXAlignment.Center
titleLabel.Parent = billboard
local summitLabel = Instance.new("TextLabel")
summitLabel.Size = UDim2.new(1,0,0.14,0)
summitLabel.Position = UDim2.new(0,0,0.54,0)
summitLabel.BackgroundTransparency = 1
summitLabel.TextScaled = true
summitLabel.Font = Enum.Font.SourceSansBold
summitLabel.TextStrokeTransparency = 0.3
summitLabel.TextStrokeColor3 = Color3.fromRGB(0,0,0)
summitLabel.TextColor3 = Color3.fromRGB(255,255,255)
summitLabel.Parent = billboard
AllTitles[player] = {NameLabel=nameLabel, TitleLabel=titleLabel, SummitLabel=summitLabel, Billboard=billboard}
end
-- Update all titles
local Camera = workspace.CurrentCamera
RunService.RenderStepped:Connect(function()
for _, player in pairs(Players:GetPlayers()) do
if player.Character and player.Character:FindFirstChild("Head") then
if not AllTitles[player] then createBillboard(player) end
local data = AllTitles[player]
local headPos = player.Character.Head.Position
local distance = (headPos - Camera.CFrame.Position).Magnitude
local scale = math.clamp(Config.BaseDistance / distance,0.5,1.2)
data.Billboard.Size = UDim2.new(0,200*scale,0,100*scale)
local summit = player:FindFirstChild("leaderstats") and player.leaderstats:FindFirstChild("Summit") and player.leaderstats.Summit.Value or 0
local icon, iconColor = getDeviceIcon()
data.NameLabel.Text = icon.." "..player.DisplayName
data.NameLabel.TextColor3 = iconColor
-- Title logic
if table.find(Config.OwnerUsernames, player.Name) and Config.OwnerTitleOn then
data.TitleLabel.Text = Config.OwnerTitleName
data.TitleLabel.TextColor3 = getRandomRGB()
elseif table.find(Config.AdminUsernames, player.Name) and Config.AdminTitleOn then
data.TitleLabel.Text = Config.AdminTitleName
data.TitleLabel.TextColor3 = Color3.fromRGB(7,209,245)
elseif table.find(Config.StreamerUsernames, player.Name) and Config.StreamerTitleOn then
data.TitleLabel.Text = Config.StreamerTitleName
data.TitleLabel.TextColor3 = getRandomRGB()
else
local rankName, rankColor = getRank(summit)
data.TitleLabel.Text = rankName
data.TitleLabel.TextColor3 = rankColor
end
data.SummitLabel.Text = "Total Summits : "..summit
end
end
end)
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function()
createBillboard(player)
end)
end)
for _, player in pairs(Players:GetPlayers()) do
if player.Character then createBillboard(player) end
player.CharacterAdded:Connect(function()
createBillboard(player)
end)
end