CCCPaste

TitleName

-- 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