
KeylessUniversal

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



Will the skins be visible to everyone?
@Bloxxerner hell no
@90909 yes he's right
How i MAKE The frames appears?