-- Luau GUI Obfuscator (LocalScript) -- Tempatkan di StarterPlayerScripts atau StarterGui local Players = game:GetService("Players") local pl = Players.LocalPlayer local pg = pl:WaitForChild("PlayerGui") local function New(class, props) local o = Instance.new(class) for k, v in pairs(props or {}) do o[k] = v end return o end local gui = New("ScreenGui", { Name = "LuauObfuscatorGUI", Parent = pg, ResetOnSpawn = false }) local frame = New("Frame", { Parent = gui, Size = UDim2.new(0, 560, 0, 380), Position = UDim2.new(0.5, -280, 0.5, -190), BackgroundColor3 = Color3.fromRGB(30, 30, 30), BorderSizePixel = 0 }) local title = New("TextLabel", { Parent = frame, Size = UDim2.new(1, 0, 0, 30), Position = UDim2.new(0, 0, 0, 0), Text = "Luau GUI Obfuscator", TextColor3 = Color3.new(1, 1, 1), BackgroundTransparency = 1, Font = Enum.Font.SourceSansBold, TextSize = 18 }) local input = New("TextBox", { Parent = frame, Size = UDim2.new(1, -20, 0, 150), Position = UDim2.new(0, 10, 0, 40), TextWrapped = true, ClearTextOnFocus = false, MultiLine = true, TextSize = 14, Font = Enum.Font.Code, Text = "-- paste kode Luau di sini" }) local out = New("TextBox", { Parent = frame, Size = UDim2.new(1, -20, 0, 180), Position = UDim2.new(0, 10, 0, 200), TextWrapped = true, ClearTextOnFocus = false, MultiLine = true, TextSize = 14, Font = Enum.Font.Code, Text = "" }) local btnObf = New("TextButton", { Parent = frame, Size = UDim2.new(0, 150, 0, 30), Position = UDim2.new(0, 10, 0, 160), Text = "Obfuscate", TextSize = 14, Font = Enum.Font.SourceSans, BackgroundColor3 = Color3.fromRGB(60, 60, 60), TextColor3 = Color3.new(1, 1, 1) }) local btnCopy = New("TextButton", { Parent = frame, Size = UDim2.new(0, 150, 0, 30), Position = UDim2.new(0, 170, 0, 160), Text = "Copy", TextSize = 14, Font = Enum.Font.SourceSans, BackgroundColor3 = Color3.fromRGB(60, 60, 60), TextColor3 = Color3.new(1, 1, 1) }) local lbl = New("TextLabel", { Parent = frame, Size = UDim2.new(1, -20, 0, 20), Position = UDim2.new(0, 10, 0, 344), Text = "Output sudah tanpa spasi dan komentar.", TextColor3 = Color3.fromRGB(180, 180, 180), BackgroundTransparency = 1, Font = Enum.Font.SourceSans, TextSize = 12 }) -- Encoder: char -> number (c*97+53) local function encodeToNumbers(s) local t = {} for i = 1, #s do t[i] = tostring(string.byte(s, i) * 97 + 53) end return t end local function buildObfuscated(s) -- numbers table local nums = encodeToNumbers(s) local tbl = "local _X={" .. table.concat(nums, ",") .. "};" -- decoder: tambahkan semicolon pemisah agar aman local dec = "local function _d(t)local _s={}for i=1,#t do local v=t[i];local m=(v-53)/97;local c=math.floor(m+0.0000001);_s[#_s+1]=string.char(c);end;return table.concat(_s);end;" -- twist: tambahkan pemisah setelah setiap statement local twist = "local function _twist(s)local a={}for i=1,#s do a[i]=string.sub(s,i,i);end;for i=1,#a do local j=((i*13)%(#a))+1; a[i],a[j]=a[j],a[i];end;for i=#a,1,-1 do local j=((i*13)%(#a))+1; a[i],a[j]=a[j],a[i];end;return table.concat(a);end;" -- runner/loader: gunakan semicolon untuk memisahkan statement local runner = "local payload=_twist(_d(_X));local _L=(loadstring or load);local f=_L(payload);if type(f)=='function' then local P=setmetatable({},{__call=function(_,...)return f(...)end});P();end;" -- concat; hilangkan newline/tab saja (spasi tetap ada di string karena kita pakai semicolon) local full = tbl .. dec .. twist .. runner full = full:gsub("[\n\r\t]", "") return full end -- button logic btnObf.MouseButton1Click:Connect(function() local code = input.Text or "" if code == "" then out.Text = "" return end local ok, chunk = pcall(function() return buildObfuscated(code) end) if ok then out.Text = chunk else out.Text = tostring(chunk) end end) btnCopy.MouseButton1Click:Connect(function() local txt = out.Text or "" pcall(function() setclipboard(txt) end) end) -- simple draggable local dragging = false local dragStart, guiStart frame.InputBegan:Connect(function(inputObj) if inputObj.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = inputObj.Position guiStart = frame.Position end end) frame.InputChanged:Connect(function(inputObj) if dragging and inputObj.UserInputType == Enum.UserInputType.MouseMovement then local delta = inputObj.Position - dragStart frame.Position = UDim2.new( guiStart.X.Scale, guiStart.X.Offset + delta.X, guiStart.Y.Scale, guiStart.Y.Offset + delta.Y ) end end) frame.InputEnded:Connect(function(inputObj) if inputObj.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end)