-- ============================================================================== -- ObsidianBox AI - DetailedCasting_PlayerHeadInfo (v2.5 Pro) -- Script Type: LocalScript -- Location: StarterPlayerScripts -- Description: The ultimate real-time player data scraper & visualizer. -- ============================================================================== local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer -- Configuration local UPDATE_INTERVAL = 0.5 -- UI Configuration (Expanded to fit immense data payload) local GUI_SIZE = UDim2.new(0, 320, 0, 240) local STUDS_OFFSET = Vector3.new(0, 4.5, 0) -- Global State local isInfoVisible = true -- ============================================================================== -- TOGGLE UI SETUP (Obsidian Theme) -- ============================================================================== local playerGui = LocalPlayer:WaitForChild("PlayerGui") local screenGui = Instance.new("ScreenGui") screenGui.Name = "ObsidianInfoToggle" screenGui.ResetOnSpawn = false screenGui.Parent = playerGui local toggleButton = Instance.new("TextButton") toggleButton.Name = "ToggleButton" toggleButton.Size = UDim2.new(0, 150, 0, 40) toggleButton.Position = UDim2.new(1, -170, 1, -60) toggleButton.AnchorPoint = Vector2.new(0, 0) toggleButton.BackgroundColor3 = Color3.fromRGB(15, 15, 15) -- Obsidian black toggleButton.BorderColor3 = Color3.fromRGB(60, 60, 60) toggleButton.BorderSizePixel = 2 toggleButton.Font = Enum.Font.GothamBold toggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) toggleButton.TextSize = 14 toggleButton.Text = "Hide Player Info" toggleButton.Parent = screenGui local uiCorner = Instance.new("UICorner") uiCorner.CornerRadius = UDim.new(0, 6) uiCorner.Parent = toggleButton toggleButton.MouseButton1Click:Connect(function() isInfoVisible = not isInfoVisible toggleButton.Text = isInfoVisible and "Hide Player Info" or "Show Player Info" toggleButton.BackgroundColor3 = isInfoVisible and Color3.fromRGB(15, 15, 15) or Color3.fromRGB(40, 15, 15) for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character then local head = player.Character:FindFirstChild("Head") if head then local billboard = head:FindFirstChild("DetailedCasting_PlayerHeadInfo") if billboard then billboard.Enabled = isInfoVisible end end end end end) -- ============================================================================== -- DATA EXTRACTION UTILITIES -- ============================================================================== local function getPlayerWealth(player) local leaderstats = player:FindFirstChild("leaderstats") if leaderstats then local currency = leaderstats:FindFirstChild("Cash") or leaderstats:FindFirstChild("Coins") if currency then return tostring(currency.Value) end end return "N/A" end local function getEquippedTool(character) local tool = character:FindFirstChildOfClass("Tool") return tool and tool.Name or "None" end local function getJumpStat(humanoid) if humanoid.UseJumpPower then return math.floor(humanoid.JumpPower) else return math.floor(humanoid.JumpHeight) end end -- ============================================================================== -- LIVE PLAYER TRACKING LOGIC -- ============================================================================== local function updateInformation(targetPlayer, character, textLabel) if not character or not character.Parent then return end local head = character:FindFirstChild("Head") local humanoid = character:FindFirstChild("Humanoid") local hrp = character:FindFirstChild("HumanoidRootPart") local localChar = LocalPlayer.Character local localHrp = localChar and localChar:FindFirstChild("HumanoidRootPart") if head and humanoid and hrp then -- Core Identity local displayName = targetPlayer.DisplayName local name = targetPlayer.Name local userId = targetPlayer.UserId local accountAge = targetPlayer.AccountAge local premiumStatus = (targetPlayer.MembershipType == Enum.MembershipType.Premium) and "Premium" or "Standard" -- Vitals & Factions local health = math.floor(humanoid.Health) local maxHealth = math.floor(humanoid.MaxHealth) local team = targetPlayer.Team and targetPlayer.Team.Name or "None" local wealth = getPlayerWealth(targetPlayer) -- Physics & Mechanics local walkSpeed = math.floor(humanoid.WalkSpeed) local jumpStat = getJumpStat(humanoid) local currentState = humanoid:GetState().Name -- E.g., "Freefall", "Running", "Seated" local toolName = getEquippedTool(character) -- Spatial Data local distance = 0 if localHrp then distance = math.floor((hrp.Position - localHrp.Position).Magnitude) end -- Dynamic String Assembly (Clean & Modular) local text = string.format("👤 %s (@%s)\n", displayName, name) text ..= string.format("🆔 ID: %d | 📅 %dd | 💎 %s\n", userId, accountAge, premiumStatus) text ..= string.format("❤️ HP: %d/%d | 🛡️ %s\n", health, maxHealth, team) text ..= string.format("📏 Dist: %d studs | 💰 %s\n", distance, wealth) text ..= string.format("⚡ Spd: %d | 🚀 Jmp: %d\n", walkSpeed, jumpStat) text ..= string.format("🏃 Action: %s\n", currentState) text ..= string.format("⚔️ Eqp: %s", toolName) -- Apply text textLabel.Text = text end end local function setupCharacter(targetPlayer, character) if targetPlayer == LocalPlayer then return end local head = character:WaitForChild("Head", 5) if not head then return end local billboardGui = Instance.new("BillboardGui") billboardGui.Name = "DetailedCasting_PlayerHeadInfo" billboardGui.Size = GUI_SIZE billboardGui.StudsOffset = STUDS_OFFSET billboardGui.AlwaysOnTop = true billboardGui.Enabled = isInfoVisible billboardGui.Adornee = head billboardGui.Parent = head local textLabel = Instance.new("TextLabel") textLabel.Name = "InfoText" textLabel.Size = UDim2.new(1, 0, 1, 0) textLabel.BackgroundTransparency = 1 textLabel.Font = Enum.Font.GothamBold textLabel.TextScaled = true textLabel.TextColor3 = Color3.new(1, 1, 1) textLabel.TextStrokeTransparency = 0.2 -- Slight transparency for a softer, premium shadow textLabel.TextStrokeColor3 = Color3.new(0, 0, 0) textLabel.Parent = billboardGui updateInformation(targetPlayer, character, textLabel) task.spawn(function() while character and character.Parent and textLabel and textLabel.Parent do task.wait(UPDATE_INTERVAL) if billboardGui.Enabled then updateInformation(targetPlayer, character, textLabel) end end end) end local function handlePlayer(player) if player == LocalPlayer then return end if player.Character then task.spawn(setupCharacter, player, player.Character) end player.CharacterAdded:Connect(function(character) setupCharacter(player, character) end) end for _, player in ipairs(Players:GetPlayers()) do handlePlayer(player) end Players.PlayerAdded:Connect(handlePlayer)