-- LocalScript (StarterPlayerScripts) local Players = game:GetService("Players") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer -- Wait for character local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() local HRP = Character:WaitForChild("HumanoidRootPart") local Humanoid = Character:WaitForChild("Humanoid") -- ==================== SCREEN GUI ==================== local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local screenGui = Instance.new("ScreenGui") screenGui.Name = "BillboardEditorGui" screenGui.Parent = PlayerGui -- ==================== LEFT FRAME (EDITOR) ==================== local frame = Instance.new("Frame") frame.Size = UDim2.new(0,360,0,400) frame.Position = UDim2.new(0,50,0,50) frame.BackgroundColor3 = Color3.fromRGB(30,30,30) frame.Parent = screenGui -- Helper: label + textbox local function createLabelAndBox(name, yPos, placeholder) local label = Instance.new("TextLabel") label.Text = name label.TextColor3 = Color3.fromRGB(255,255,255) label.Size = UDim2.new(0,140,0,25) label.Position = UDim2.new(0,10,0,yPos) label.BackgroundTransparency = 1 label.Parent = frame local box = Instance.new("TextBox") box.Size = UDim2.new(0,200,0,25) box.Position = UDim2.new(0,160,0,yPos) box.PlaceholderText = placeholder box.Text = placeholder -- Set the template value as default box.TextColor3 = Color3.fromRGB(0,0,0) box.BackgroundColor3 = Color3.fromRGB(200,200,200) box.Parent = frame return box end -- Textboxes (default template values included) local studsOffsetBox = createLabelAndBox("StudsOffset",10,'0,1.3,0') local billboardSizeBox = createLabelAndBox("BillboardSize",50,'9,0,9,0') local imgPosBox = createLabelAndBox("ImageLabelPosition",90,'0,0,0,0') local imgSizeBox = createLabelAndBox("ImageLabelSize",130,'1,0,1,0') local idleBox = createLabelAndBox("Idle",170,'5563198794') local walk1Box = createLabelAndBox("Walk1",210,'138441800759661') local walk2Box = createLabelAndBox("Walk2",250,'18867835362') local playerTransparencyBox = createLabelAndBox("PlayerTransparency",290,'0') -- Apply button local applyButton = Instance.new("TextButton") applyButton.Size = UDim2.new(0,100,0,30) applyButton.Position = UDim2.new(0,50,0,330) applyButton.Text = "Apply" applyButton.Parent = frame -- Destroy Everything button local destroyButton = Instance.new("TextButton") destroyButton.Size = UDim2.new(0,140,0,30) destroyButton.Position = UDim2.new(0,200,0,330) destroyButton.Text = "Destroy Everything" destroyButton.BackgroundColor3 = Color3.fromRGB(180,50,50) destroyButton.TextColor3 = Color3.fromRGB(255,255,255) destroyButton.Parent = frame -- ==================== HELPERS ==================== local function parseUDim2(str) local a,b,c,d = str:match("(%-?%d*%.?%d*),(%-?%d+),(%-?%d*%.?%d*),(%-?%d+)") return UDim2.new(tonumber(a) or 0, tonumber(b) or 0, tonumber(c) or 0, tonumber(d) or 0) end local function parseVector3(str) local x,y,z = str:match("(%-?%d*%.?%d*),(%-?%d*%.?%d*),(%-?%d*%.?%d*)") return Vector3.new(tonumber(x) or 0, tonumber(y) or 0, tonumber(z) or 0) end local function formatImage(input) if input == "" then return "" end if input:match("^rbxassetid://") or input:match("^https?://") then return input else return "rbxassetid://"..input end end -- ==================== BILLBOARD GUI ==================== local billboardGui local imageLabel local Idle, Walk1, Walk2 = "", "", "" local walkImages = {} local walkIndex = 1 local lastStep = 0 local function createBillboard() if billboardGui then billboardGui:Destroy() billboardGui = nil imageLabel = nil end -- Ensure Character and HRP Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() HRP = Character:WaitForChild("HumanoidRootPart") billboardGui = Instance.new("BillboardGui") billboardGui.Name = "PlayerBillboard" billboardGui.Adornee = HRP billboardGui.Size = parseUDim2(billboardSizeBox.Text or '9,0,9,0') billboardGui.StudsOffset = parseVector3(studsOffsetBox.Text or '0,2,0') billboardGui.AlwaysOnTop = false billboardGui.Parent = workspace imageLabel = Instance.new("ImageLabel") imageLabel.Size = parseUDim2(imgSizeBox.Text or '1,0,1,0') imageLabel.Position = parseUDim2(imgPosBox.Text or '0,0,0,0') imageLabel.BackgroundTransparency = 1 imageLabel.Image = formatImage(idleBox.Text) imageLabel.Parent = billboardGui end -- ==================== APPLY BUTTON ==================== applyButton.MouseButton1Click:Connect(function() createBillboard() Idle = formatImage(idleBox.Text) Walk1 = formatImage(walk1Box.Text) Walk2 = formatImage(walk2Box.Text) -- Handle player transparency local transparencyValue = tonumber(playerTransparencyBox.Text) or 0 for _, part in pairs(Character:GetDescendants()) do if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then if transparencyValue == 1 then part.Transparency = 1 else part.Transparency = 0 end end end end) -- ==================== DESTROY EVERYTHING ==================== destroyButton.MouseButton1Click:Connect(function() if billboardGui then billboardGui:Destroy() billboardGui = nil imageLabel = nil end if frame then frame:Destroy() end if screenGui then screenGui:Destroy() end end) -- ==================== ANIMATION ==================== RunService.RenderStepped:Connect(function() if imageLabel and Humanoid.MoveDirection.Magnitude > 0 then walkImages = {Walk1,Walk2} if tick() - (lastStep or 0) > 0.2 then imageLabel.Image = walkImages[walkIndex] or Idle walkIndex = walkIndex % #walkImages + 1 lastStep = tick() end elseif imageLabel then imageLabel.Image = Idle end end)