local Players = game:GetService("Players") local TweenService = game:GetService("TweenService") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local isShowing = false -- <<< Config UI Modern Style >>> local FRAME_WIDTH_SCALE = 0.8 local FRAME_SIZE = UDim2.new(FRAME_WIDTH_SCALE, 0, 1, -60) local FRAME_POSITION_HIDDEN = UDim2.new(1.1, 0, 0.5, 0) local FRAME_POSITION_SHOW = UDim2.new(1 - FRAME_WIDTH_SCALE, 0, 0.5, 0) local FRAME_ANCHOR = Vector2.new(0, 0.5) local CORNER_RADIUS = UDim.new(0.08, 0) -- สร้าง ScreenGui หลัก local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "ModernEditorUI" ScreenGui.Parent = PlayerGui ScreenGui.ResetOnSpawn = false -- ========================================================================= -- *** 1. Editor Frame หลัก (สไลด์จากขวา) *** -- ========================================================================= local EditorFrame = Instance.new("Frame") EditorFrame.Name = "ScriptEditor" EditorFrame.Size = FRAME_SIZE EditorFrame.Position = FRAME_POSITION_HIDDEN EditorFrame.AnchorPoint = FRAME_ANCHOR EditorFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 30) EditorFrame.BorderSizePixel = 0 EditorFrame.Parent = ScreenGui -- *** ขอบโค้งมน, แสงขอบ, เส้นขอบ *** local EditorCorner = Instance.new("UICorner") EditorCorner.CornerRadius = CORNER_RADIUS EditorCorner.Parent = EditorFrame local EditorGradient = Instance.new("UIGradient") EditorGradient.Color = ColorSequence.new{ ColorSequenceKeypoint.new(0, Color3.fromRGB(50, 50, 60)), ColorSequenceKeypoint.new(0.5, Color3.fromRGB(80, 80, 100)), ColorSequenceKeypoint.new(1, Color3.fromRGB(50, 50, 60)) } EditorGradient.Rotation = 90 EditorGradient.Parent = EditorFrame local EditorStroke = Instance.new("UIStroke") EditorStroke.Color = Color3.fromRGB(70, 70, 90) EditorStroke.Thickness = 1.5 EditorStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border EditorStroke.Parent = EditorFrame -- ========================================================================= -- *** 2. Script Text Box *** -- ========================================================================= local ScriptBox = Instance.new("TextBox") ScriptBox.Name = "CodeInput" ScriptBox.Size = UDim2.new(1, -20, 1, -60) ScriptBox.Position = UDim2.new(0, 10, 0, 10) ScriptBox.Text = "-- มึงใส่โค้ด Lua ตรงนี้\n-- เช่น loadstring(game:HttpGet('...'))()" ScriptBox.TextXAlignment = Enum.TextXAlignment.Left ScriptBox.TextYAlignment = Enum.TextYAlignment.Top ScriptBox.MultiLine = true ScriptBox.TextWrapped = true ScriptBox.TextColor3 = Color3.fromRGB(220, 220, 220) ScriptBox.TextSize = 16 ScriptBox.Font = Enum.Font.Code ScriptBox.BackgroundColor3 = Color3.fromRGB(35, 35, 45) ScriptBox.PlaceholderText = "Paste your Lua script here..." ScriptBox.Parent = EditorFrame local ScriptBoxCorner = Instance.new("UICorner") ScriptBoxCorner.CornerRadius = UDim.new(0, 8) ScriptBoxCorner.Parent = ScriptBox -- ========================================================================= -- *** 3. Control Panel (ปุ่มควบคุมด้านล่าง) *** -- ========================================================================= local ControlPanel = Instance.new("Frame") ControlPanel.Name = "ControlPanel" ControlPanel.Size = UDim2.new(1, 0, 0, 50) ControlPanel.Position = UDim2.new(0, 0, 1, 0) ControlPanel.AnchorPoint = Vector2.new(0, 1) ControlPanel.BackgroundColor3 = Color3.fromRGB(15, 15, 20) ControlPanel.BackgroundTransparency = 0.3 ControlPanel.BorderSizePixel = 0 ControlPanel.Parent = EditorFrame local ControlLayout = Instance.new("UIListLayout") ControlLayout.Name = "ControlLayout" ControlLayout.FillDirection = Enum.FillDirection.Horizontal ControlLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center ControlLayout.VerticalAlignment = Enum.VerticalAlignment.Center ControlLayout.Padding = UDim.new(0, 15) ControlLayout.Parent = ControlPanel -- ปุ่ม Execute (▶) local ExecuteButton = Instance.new("TextButton") ExecuteButton.Name = "ExecuteButton" ExecuteButton.Size = UDim2.new(0, 50, 0, 50) ExecuteButton.Text = "▶" ExecuteButton.TextColor3 = Color3.fromRGB(0, 255, 100) ExecuteButton.TextSize = 30 ExecuteButton.Font = Enum.Font.SourceSansBold ExecuteButton.BackgroundColor3 = Color3.fromRGB(40, 40, 50) ExecuteButton.Parent = ControlPanel local ExecuteCorner = Instance.new("UICorner") ExecuteCorner.CornerRadius = UDim.new(0, 15) ExecuteCorner.Parent = ExecuteButton -- *** ปุ่ม Save Script (💾) *** local SaveButton = Instance.new("TextButton") SaveButton.Name = "SaveButton" SaveButton.Size = UDim2.new(0, 50, 0, 50) SaveButton.Text = "💾" SaveButton.TextColor3 = Color3.fromRGB(255, 255, 255) SaveButton.TextSize = 30 SaveButton.Font = Enum.Font.SourceSansBold SaveButton.BackgroundColor3 = Color3.fromRGB(50, 90, 180) -- สีน้ำเงิน SaveButton.Parent = ControlPanel local SaveCorner = Instance.new("UICorner") SaveCorner.CornerRadius = UDim.new(0, 15) SaveCorner.Parent = SaveButton -- Logic การเซฟสคริปต์ SaveButton.MouseButton1Click:Connect(function() local codeToSave = ScriptBox.Text if codeToSave and codeToSave ~= "" then pcall(function() -- ใช้ SetClipboard เพื่อคัดลอกข้อความไปยังคลิปบอร์ด game:SetClipboard(codeToSave) print("ไอ้กวนตีน! สคริปต์ถูกเซฟลงคลิปบอร์ดแล้ว!") -- อัปเดต Placeholder เพื่อยืนยัน ScriptBox.PlaceholderText = "Script saved to clipboard!" end) else warn("ไม่พบสคริปต์ให้เซฟ!") end end) -- *********************************** -- ปุ่ม Clear Script (🗑️) local ClearButton = Instance.new("TextButton") ClearButton.Name = "ClearButton" ClearButton.Size = UDim2.new(0, 50, 0, 50) ClearButton.Text = "🗑️" ClearButton.TextColor3 = Color3.fromRGB(255, 255, 255) ClearButton.TextSize = 30 ClearButton.Font = Enum.Font.SourceSansBold ClearButton.BackgroundColor3 = Color3.fromRGB(180, 50, 50) ClearButton.Parent = ControlPanel local ClearCorner = Instance.new("UICorner") ClearCorner.CornerRadius = UDim.new(0, 15) ClearCorner.Parent = ClearButton ClearButton.MouseButton1Click:Connect(function() ScriptBox.Text = "" ScriptBox.PlaceholderText = "Script Cleared! Paste your Lua script here..." print("Script Cleared!") end) -- *********************************** -- ========================================================================= -- *** 4. ปุ่ม Toggle (P) และ Puner Executor Label *** -- ========================================================================= local ToggleButton = Instance.new("TextButton") ToggleButton.Name = "EditorToggleButton" ToggleButton.Size = UDim2.new(0, 55, 0, 55) ToggleButton.Position = UDim2.new(0.97, 0, 0.03, 0) ToggleButton.AnchorPoint = Vector2.new(1, 0) ToggleButton.Text = "P" -- เปลี่ยนเป็นตัว P ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) ToggleButton.TextSize = 35 ToggleButton.Font = Enum.Font.SourceSansBold ToggleButton.BackgroundColor3 = Color3.fromRGB(80, 80, 90) ToggleButton.Parent = ScreenGui local ToggleCorner = Instance.new("UICorner") ToggleCorner.CornerRadius = UDim.new(0.5, 0) ToggleCorner.Parent = ToggleButton -- *** UIGradient และ UIStroke สำหรับปุ่ม Toggle *** local ToggleGradient = Instance.new("UIGradient") ToggleGradient.Color = ColorSequence.new{ ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 100, 120)), ColorSequenceKeypoint.new(0.5, Color3.fromRGB(150, 150, 180)), ColorSequenceKeypoint.new(1, Color3.fromRGB(100, 100, 120)) } ToggleGradient.Rotation = 45 ToggleGradient.Parent = ToggleButton local ToggleStroke = Instance.new("UIStroke") ToggleStroke.Color = Color3.fromRGB(120, 120, 150) ToggleStroke.Thickness = 1 ToggleStroke.Parent = ToggleButton -- *** TextLabel "Puner Executor" ใต้ปุ่ม Toggle *** local PunerHubLabel = Instance.new("TextLabel") PunerHubLabel.Name = "PunerExecutorLabel" -- เปลี่ยนชื่อตรงนี้ PunerHubLabel.Size = UDim2.new(0, 150, 0, 15) -- ขยายขนาดนิดหน่อยเพื่อรองรับชื่อที่ยาวขึ้น PunerHubLabel.Position = UDim2.new(0.97, 0, 0.03, 55) -- ตำแหน่งอยู่ใต้ปุ่ม P PunerHubLabel.AnchorPoint = Vector2.new(1, 0) PunerHubLabel.Text = "Puner Executor" -- เปลี่ยนข้อความตรงนี้ PunerHubLabel.TextColor3 = Color3.fromRGB(180, 180, 200) PunerHubLabel.TextSize = 14 PunerHubLabel.Font = Enum.Font.SourceSans PunerHubLabel.BackgroundTransparency = 1 PunerHubLabel.Parent = ScreenGui -- ฟังก์ชันเปิด/ปิด Editor ToggleButton.MouseButton1Click:Connect(function() isShowing = not isShowing local targetPosition = isShowing and FRAME_POSITION_SHOW or FRAME_POSITION_HIDDEN -- เลื่อน Editor เข้า/ออกทางด้านขวา TweenService:Create( EditorFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Position = targetPosition} ):Play() -- Tween สีปุ่ม Toggle local targetColor = isShowing and Color3.fromRGB(180, 0, 0) or Color3.fromRGB(80, 80, 90) TweenService:Create( ToggleButton, TweenInfo.new(0.2), {BackgroundColor3 = targetColor} ):Play() -- Tween สี Gradient ของปุ่ม Toggle local targetGradientColors = isShowing and ColorSequence.new{ ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)), ColorSequenceKeypoint.new(0.5, Color3.fromRGB(255, 100, 100)), ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 0, 0)) } or ColorSequence.new{ ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 100, 120)), ColorSequenceKeypoint.new(0.5, Color3.fromRGB(150, 150, 180)), ColorSequenceKeypoint.new(1, Color3.fromRGB(100, 100, 120)) } TweenService:Create( ToggleGradient, TweenInfo.new(0.2), {Color = targetGradientColors} ):Play() end) -- ========================================================================= -- *** 5. Logic การรันโค้ด *** -- ========================================================================= ExecuteButton.MouseButton1Click:Connect(function() local codeToRun = ScriptBox.Text if pcall(loadstring, codeToRun) then local success, result = pcall(loadstring(codeToRun)) if success then print("ไอ้กวนตีน! โค้ดมึงรันเสร็จแล้ว!") else warn("รันโค้ดไม่สำเร็จ: " .. result) ScriptBox.Text = ScriptBox.Text .. "\n-- ERROR: " .. result end else warn("ไม่สามารถใช้ loadstring ในสภาพแวดล้อมนี้ได้ (Roblox ปกติบล็อก)") ScriptBox.Text = ScriptBox.Text .. "\n-- WARNING: loadstring() is restricted here." end end)