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