-- Roblox Mobile 3D Drawing Exploit GUI (Full Features + Delete Last + RU/EN) local Players = game:GetService("Players") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") if playerGui:FindFirstChild("DrawingExploitGUI") then playerGui.DrawingExploitGUI:Destroy() end local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "DrawingExploitGUI" ScreenGui.ResetOnSpawn = false ScreenGui.Parent = playerGui local MainFrame = Instance.new("Frame") MainFrame.Size = UDim2.new(0, 320, 0, 535) MainFrame.Position = UDim2.new(0.5, -160, 0.5, -265) MainFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35) MainFrame.BorderSizePixel = 0 MainFrame.Active = true MainFrame.Draggable = true MainFrame.Parent = ScreenGui local UICorner = Instance.new("UICorner", MainFrame) UICorner.CornerRadius = UDim.new(0, 10) -- Language State / Состояние языка local currentLang = "RU" local texts = { RU = { Title = "3D Рисование (Мобильный)", ModeDraw = "Режим: Рису.", ModeErase = "Режим: Ластик", VolOff = "3D: ВЫКЛ", VolOn = "3D: ВКЛ", SizePlace = "Размер (напр. 1)", DistPlace = "Расстояние (напр. 5)", Dirs = {"Вперед", "Назад", "Влево", "Вправо"}, Create = "СОЗДАТЬ", Clear = "Очистить холст", Undo = "Отменить", DelLast = "Удалить посл.", DelWorld = "Удалить все", LangBtn = "RU / EN" }, EN = { Title = "3D Drawing Tool (Mobile)", ModeDraw = "Mode: Draw", ModeErase = "Mode: Erase", VolOff = "3D: OFF", VolOn = "3D: ON", SizePlace = "Size (e.g. 1)", DistPlace = "Distance (e.g. 5)", Dirs = {"Forward", "Backward", "Left", "Right"}, Create = "CREATE", Clear = "Clear Canvas", Undo = "Undo Last", DelLast = "Delete Last", DelWorld = "Delete All", LangBtn = "EN / RU" } } -- Title local Title = Instance.new("TextLabel") Title.Size = UDim2.new(1, -65, 0, 30) Title.Position = UDim2.new(0, 10, 0, 0) Title.BackgroundTransparency = 1 Title.Text = texts[currentLang].Title Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.TextSize = 14 Title.Font = Enum.Font.SourceSansBold Title.TextXAlignment = Enum.TextXAlignment.Left Title.Parent = MainFrame -- Language Toggle Button local LangBtn = Instance.new("TextButton") LangBtn.Size = UDim2.new(0, 55, 0, 24) LangBtn.Position = UDim2.new(1, -65, 0, 3) LangBtn.Text = texts[currentLang].LangBtn LangBtn.TextSize = 11 LangBtn.TextColor3 = Color3.fromRGB(255, 255, 255) LangBtn.BackgroundColor3 = Color3.fromRGB(70, 70, 70) LangBtn.Parent = MainFrame Instance.new("UICorner", LangBtn).CornerRadius = UDim.new(0, 4) -- Canvas Frame (12x12 grid) local CanvasFrame = Instance.new("Frame") CanvasFrame.Size = UDim2.new(0, 200, 0, 200) CanvasFrame.Position = UDim2.new(0.5, -100, 0, 38) CanvasFrame.BackgroundColor3 = Color3.fromRGB(50, 50, 50) CanvasFrame.Parent = MainFrame local gridSize = 12 local gridData = {} local cellButtons = {} local drawHistory = {} local spawnedDrawings = {} -- Список всех созданных папок с рисунками local currentColor = Color3.fromRGB(255, 255, 255) local currentMode = "Draw" local selectedDirectionIndex = 1 local isVolumetric = false for x = 1, gridSize do gridData[x] = {} cellButtons[x] = {} for y = 1, gridSize do gridData[x][y] = Color3.fromRGB(50, 50, 50) local cell = Instance.new("TextButton") cell.Size = UDim2.new(0, 200/gridSize, 0, 200/gridSize) cell.Position = UDim2.new(0, (x-1)*(200/gridSize), 0, (y-1)*(200/gridSize)) cell.BackgroundColor3 = Color3.fromRGB(50, 50, 50) cell.Text = "" cell.Parent = CanvasFrame cellButtons[x][y] = cell cell.MouseButton1Down:Connect(function() local prevColor = gridData[x][y] local newColor = (currentMode == "Draw") and currentColor or Color3.fromRGB(50, 50, 50) if prevColor ~= newColor then table.insert(drawHistory, {x = x, y = y, oldColor = prevColor}) gridData[x][y] = newColor cell.BackgroundColor3 = newColor end end) cell.MouseEnter:Connect(function() if game:GetService("UserInputService"):IsMouseButtonPressed(Enum.UserInputType.MouseButton1) or game:GetService("UserInputService").TouchEnabled then local prevColor = gridData[x][y] local newColor = (currentMode == "Draw") and currentColor or Color3.fromRGB(50, 50, 50) if prevColor ~= newColor then table.insert(drawHistory, {x = x, y = y, oldColor = prevColor}) gridData[x][y] = newColor cell.BackgroundColor3 = newColor end end end) end end -- 10 Colors Palette local colors = { Color3.fromRGB(255, 255, 255), Color3.fromRGB(0, 0, 0), Color3.fromRGB(255, 0, 0), Color3.fromRGB(0, 255, 0), Color3.fromRGB(0, 0, 255), Color3.fromRGB(255, 255, 0), Color3.fromRGB(255, 128, 0), Color3.fromRGB(128, 0, 128), Color3.fromRGB(0, 255, 255), Color3.fromRGB(139, 69, 19) } local PaletteFrame = Instance.new("Frame") PaletteFrame.Size = UDim2.new(0, 300, 0, 25) PaletteFrame.Position = UDim2.new(0.5, -150, 0, 245) PaletteFrame.BackgroundTransparency = 1 PaletteFrame.Parent = MainFrame for i, col in ipairs(colors) do local btn = Instance.new("TextButton") btn.Size = UDim2.new(0, 26, 0, 25) btn.Position = UDim2.new(0, (i-1)*28, 0, 0) btn.BackgroundColor3 = col btn.Text = "" btn.Parent = PaletteFrame btn.MouseButton1Down:Connect(function() currentColor = col currentMode = "Draw" end) end -- Mode Button & 3D Toggle & Size Box local ModeBtn = Instance.new("TextButton") ModeBtn.Size = UDim2.new(0, 90, 0, 25) ModeBtn.Position = UDim2.new(0, 10, 0, 275) ModeBtn.Text = texts[currentLang].ModeDraw ModeBtn.TextColor3 = Color3.fromRGB(255, 255, 255) ModeBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) ModeBtn.Parent = MainFrame Instance.new("UICorner", ModeBtn).CornerRadius = UDim.new(0, 4) ModeBtn.MouseButton1Down:Connect(function() if currentMode == "Draw" then currentMode = "Eraser" ModeBtn.Text = (currentLang == "RU") and "Режим: Ластик" or "Mode: Erase" else currentMode = "Draw" ModeBtn.Text = (currentLang == "RU") and "Режим: Рису." or "Mode: Draw" end end) local VolBtn = Instance.new("TextButton") VolBtn.Size = UDim2.new(0, 90, 0, 25) VolBtn.Position = UDim2.new(0, 115, 0, 275) VolBtn.Text = texts[currentLang].VolOff VolBtn.TextColor3 = Color3.fromRGB(255, 255, 255) VolBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) VolBtn.Parent = MainFrame Instance.new("UICorner", VolBtn).CornerRadius = UDim.new(0, 4) VolBtn.MouseButton1Down:Connect(function() isVolumetric = not isVolumetric if currentLang == "RU" then VolBtn.Text = isVolumetric and "3D: ВКЛ" or "3D: ВЫКЛ" else VolBtn.Text = isVolumetric and "3D: ON" or "3D: OFF" end end) local SizeBox = Instance.new("TextBox") SizeBox.Size = UDim2.new(0, 90, 0, 25) SizeBox.Position = UDim2.new(0, 220, 0, 275) SizeBox.PlaceholderText = texts[currentLang].SizePlace SizeBox.Text = "1" SizeBox.TextColor3 = Color3.fromRGB(255, 255, 255) SizeBox.BackgroundColor3 = Color3.fromRGB(60, 60, 60) SizeBox.Parent = MainFrame Instance.new("UICorner", SizeBox).CornerRadius = UDim.new(0, 4) -- Distance & Clear & Undo Row local DistBox = Instance.new("TextBox") DistBox.Size = UDim2.new(0, 95, 0, 25) DistBox.Position = UDim2.new(0, 10, 0, 310) DistBox.PlaceholderText = texts[currentLang].DistPlace DistBox.Text = "5" DistBox.TextColor3 = Color3.fromRGB(255, 255, 255) DistBox.BackgroundColor3 = Color3.fromRGB(60, 60, 60) DistBox.Parent = MainFrame Instance.new("UICorner", DistBox).CornerRadius = UDim.new(0, 4) local UndoBtn = Instance.new("TextButton") UndoBtn.Size = UDim2.new(0, 95, 0, 25) UndoBtn.Position = UDim2.new(0, 112, 0, 310) UndoBtn.Text = texts[currentLang].Undo UndoBtn.TextColor3 = Color3.fromRGB(255, 255, 255) UndoBtn.BackgroundColor3 = Color3.fromRGB(120, 80, 0) UndoBtn.Parent = MainFrame Instance.new("UICorner", UndoBtn).CornerRadius = UDim.new(0, 4) UndoBtn.MouseButton1Down:Connect(function() if #drawHistory > 0 then local lastAction = table.remove(drawHistory) gridData[lastAction.x][lastAction.y] = lastAction.oldColor cellButtons[lastAction.x][lastAction.y].BackgroundColor3 = lastAction.oldColor end end) local ClearBtn = Instance.new("TextButton") ClearBtn.Size = UDim2.new(0, 93, 0, 25) ClearBtn.Position = UDim2.new(0, 217, 0, 310) ClearBtn.Text = texts[currentLang].Clear ClearBtn.TextSize = 11 ClearBtn.TextColor3 = Color3.fromRGB(255, 255, 255) ClearBtn.BackgroundColor3 = Color3.fromRGB(150, 40, 40) ClearBtn.Parent = MainFrame Instance.new("UICorner", ClearBtn).CornerRadius = UDim.new(0, 4) ClearBtn.MouseButton1Down:Connect(function() drawHistory = {} for x = 1, gridSize do for y = 1, gridSize do gridData[x][y] = Color3.fromRGB(50, 50, 50) cellButtons[x][y].BackgroundColor3 = Color3.fromRGB(50, 50, 50) end end end) -- 4 Direction Buttons (Forward, Backward, Left, Right) local DirFrame = Instance.new("Frame") DirFrame.Size = UDim2.new(0, 300, 0, 30) DirFrame.Position = UDim2.new(0.5, -150, 0, 345) DirFrame.BackgroundTransparency = 1 DirFrame.Parent = MainFrame local dirButtons = {} for i = 1, 4 do local dBtn = Instance.new("TextButton") dBtn.Size = UDim2.new(0, 70, 0, 30) dBtn.Position = UDim2.new(0, (i-1)*76, 0, 0) dBtn.Text = texts[currentLang].Dirs[i] dBtn.TextColor3 = Color3.fromRGB(255, 255, 255) dBtn.BackgroundColor3 = (selectedDirectionIndex == i) and Color3.fromRGB(0, 120, 255) or Color3.fromRGB(60, 60, 60) dBtn.Parent = DirFrame Instance.new("UICorner", dBtn).CornerRadius = UDim.new(0, 4) dBtn.MouseButton1Down:Connect(function() selectedDirectionIndex = i for _, child in ipairs(dirButtons) do child.BackgroundColor3 = Color3.fromRGB(60, 60, 60) end dBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 255) end) table.insert(dirButtons, dBtn) end -- Create Button local CreateBtn = Instance.new("TextButton") CreateBtn.Size = UDim2.new(0, 300, 0, 38) CreateBtn.Position = UDim2.new(0.5, -150, 0, 385) CreateBtn.Text = texts[currentLang].Create CreateBtn.TextSize = 18 CreateBtn.Font = Enum.Font.SourceSansBold CreateBtn.TextColor3 = Color3.fromRGB(255, 255, 255) CreateBtn.BackgroundColor3 = Color3.fromRGB(0, 180, 0) CreateBtn.Parent = MainFrame Instance.new("UICorner", CreateBtn).CornerRadius = UDim.new(0, 6) -- Delete Last & Delete All Buttons (Row at the bottom) local DelLastBtn = Instance.new("TextButton") DelLastBtn.Size = UDim2.new(0, 145, 0, 32) DelLastBtn.Position = UDim2.new(0, 10, 0, 430) DelLastBtn.Text = texts[currentLang].DelLast DelLastBtn.TextSize = 13 DelLastBtn.Font = Enum.Font.SourceSansBold DelLastBtn.TextColor3 = Color3.fromRGB(255, 255, 255) DelLastBtn.BackgroundColor3 = Color3.fromRGB(180, 100, 0) DelLastBtn.Parent = MainFrame Instance.new("UICorner", DelLastBtn).CornerRadius = UDim.new(0, 6) DelLastBtn.MouseButton1Down:Connect(function() while #spawnedDrawings > 0 do local lastFolder = table.remove(spawnedDrawings) if lastFolder and lastFolder.Parent then lastFolder:Destroy() break end end end) local DelWorldBtn = Instance.new("TextButton") DelWorldBtn.Size = UDim2.new(0, 145, 0, 32) DelWorldBtn.Position = UDim2.new(0, 165, 0, 430) DelWorldBtn.Text = texts[currentLang].DelWorld DelWorldBtn.TextSize = 13 DelWorldBtn.Font = Enum.Font.SourceSansBold DelWorldBtn.TextColor3 = Color3.fromRGB(255, 255, 255) DelWorldBtn.BackgroundColor3 = Color3.fromRGB(180, 40, 40) DelWorldBtn.Parent = MainFrame Instance.new("UICorner", DelWorldBtn).CornerRadius = UDim.new(0, 6) DelWorldBtn.MouseButton1Down:Connect(function() for _, obj in ipairs(workspace:GetChildren()) do if obj.Name:match("^UserDrawing") then obj:Destroy() end end spawnedDrawings = {} end) -- Language Toggle Logic LangBtn.MouseButton1Down:Connect(function() currentLang = (currentLang == "RU") and "EN" or "RU" LangBtn.Text = texts[currentLang].LangBtn Title.Text = texts[currentLang].Title SizeBox.PlaceholderText = texts[currentLang].SizePlace DistBox.PlaceholderText = texts[currentLang].DistPlace CreateBtn.Text = texts[currentLang].Create ClearBtn.Text = texts[currentLang].Clear UndoBtn.Text = texts[currentLang].Undo DelLastBtn.Text = texts[currentLang].DelLast DelWorldBtn.Text = texts[currentLang].DelWorld if currentMode == "Draw" then ModeBtn.Text = texts[currentLang].ModeDraw else ModeBtn.Text = texts[currentLang].ModeErase end VolBtn.Text = isVolumetric and texts[currentLang].VolOn or texts[currentLang].VolOff for i, btn in ipairs(dirButtons) do btn.Text = texts[currentLang].Dirs[i] end end) -- Spawning Logic CreateBtn.MouseButton1Down:Connect(function() local char = player.Character if not char or not char:FindFirstChild("HumanoidRootPart") then return end local hrp = char.HumanoidRootPart local blockSize = tonumber(SizeBox.Text) or 1 local distance = tonumber(DistBox.Text) or 5 local rootPos = hrp.Position local raycastParams = RaycastParams.new() raycastParams.FilterDescendantsInstances = {char} raycastParams.FilterType = Enum.RaycastFilterType.Exclude local raycastResult = workspace:Raycast(rootPos, Vector3.new(0, -20, 0), raycastParams) local floorY = raycastResult and raycastResult.Position.Y or (rootPos.Y - 3) local flatLook = Vector3.new(hrp.CFrame.LookVector.X, 0, hrp.CFrame.LookVector.Unit.Z).Unit local flatRight = Vector3.new(hrp.CFrame.RightVector.X, 0, hrp.CFrame.RightVector.Unit.Z).Unit local spawnPos = rootPos local targetLook = flatLook -- 1: Forward, 2: Backward, 3: Left, 4: Right if selectedDirectionIndex == 1 then spawnPos = rootPos + flatLook * distance targetLook = -flatLook elseif selectedDirectionIndex == 2 then spawnPos = rootPos - flatLook * distance targetLook = flatLook elseif selectedDirectionIndex == 3 then spawnPos = rootPos - flatRight * distance targetLook = flatRight elseif selectedDirectionIndex == 4 then spawnPos = rootPos + flatRight * distance targetLook = -flatRight end spawnPos = Vector3.new(spawnPos.X, floorY, spawnPos.Z) local spawnCF = CFrame.new(spawnPos, spawnPos + targetLook) local folder = Instance.new("Folder") folder.Name = "UserDrawing_" .. tostring(tick()) folder.Parent = workspace table.insert(spawnedDrawings, folder) local depth = isVolumetric and 3 or 1 for x = 1, gridSize do for y = 1, gridSize do local col = gridData[x][y] if col ~= Color3.fromRGB(50, 50, 50) then for z = 0, depth - 1 do local part = Instance.new("Part") part.Size = Vector3.new(blockSize, blockSize, blockSize) part.Color = col part.Anchored = true part.Material = Enum.Material.SmoothPlastic local xOffset = (x - gridSize / 2 - 0.5) * blockSize local yOffset = ((gridSize - y) * blockSize) + (blockSize / 2) local zOffset = z * blockSize part.CFrame = spawnCF * CFrame.new(xOffset, yOffset, zOffset) part.Parent = folder end end end end end)