- local collectionService = game:GetService("CollectionService")
- local player = game.Players.LocalPlayer
- _G.refreshing = true
- local cloneGui = {}
- function cloneGui.buildRoot()
- local paintFrame = player.PlayerGui.MainGui.PaintFrame
- local cloneFrame = paintFrame:Clone()
- -- Initialize root frame.
- cloneFrame.Name = 'CloneFrame'
- cloneFrame.Parent = paintFrame
- cloneFrame.ToolsFrame:Destroy()
- cloneFrame.ColorFrame:Destroy()
- cloneFrame.NextButton:Destroy()
- cloneFrame.UIAspectRatioConstraint:Destroy()
- cloneFrame.Grid:Destroy()
- cloneFrame.Confirmation:Destroy()
- cloneFrame.AnchorPoint = Vector2.new(0, 0.5)
- cloneFrame.Position = UDim2.new(1, 10, 0.5, 0)
- cloneFrame.Size = UDim2.new(0.5, 0, 1, 0)
- cloneFrame.Visible = true
- paintFrame.Position = UDim2.new(0.5, -((cloneFrame.AbsoluteSize.X / 2) + 5), 0.5, 0)
- cloneGui.root = cloneFrame
- end
- function cloneGui.buildButtons()
- local nextButton = player.PlayerGui.MainGui.PaintFrame.NextButton
- local copyButton = nextButton:Clone()
- local cloneButton = nextButton:Clone()
- local buttonSize = UDim2.new(0.4, 0, 0.09, 0)
- -- Initialize copy button.
- copyButton.Parent = cloneGui.root
- copyButton.Size = buttonSize
- copyButton.Position = UDim2.new(0.28, 0, 0.895)
- copyButton.Label.Text = 'COPY'
- copyButton.Name = 'CopyButton'
- -- Initialize clone button.
- cloneButton.Parent = cloneGui.root
- cloneButton.Size = buttonSize
- cloneButton.Position = UDim2.new(0.72, 0, 0.895)
- cloneButton.Label.Text = 'CLONE'
- cloneButton.Name = 'CloneButton'
- -- Animation functions.
- for i, button in pairs({cloneButton, copyButton}) do
- button.MouseEnter:Connect(function()
- button:TweenSize(UDim2.new(buttonSize.X.Scale + 0.015, 0, buttonSize.Y.Scale + 0.015, 0), 'Out', 'Quad', 0.2, true)
- end)
- button.MouseLeave:Connect(function()
- button:TweenSize(buttonSize, 'Out', 'Quad', 0.2, true)
- end)
- end
- -- Button actions.
- copyButton.MouseButton1Click:Connect(copyGrid)
- cloneButton.MouseButton1Click:Connect(cloneGrid)
- end
- function cloneGui.buildScrollingFrame()
- local scrollingFrame = Instance.new('ScrollingFrame')
- local uiListLayout = Instance.new('UIListLayout')
- local uiPadding = Instance.new('UIPadding')
- -- Initialize scrolling frame.
- scrollingFrame.Parent = cloneGui.root
- scrollingFrame.AnchorPoint = Vector2.new(0.5, 0)
- scrollingFrame.Position = UDim2.new(0.5, 0, 0.05, 0)
- scrollingFrame.Size = UDim2.new(0.8, 0, 0.75, 0)
- scrollingFrame.BackgroundTransparency = 1
- scrollingFrame.BorderSizePixel = 0
- scrollingFrame.ScrollBarImageColor3 = Color3.new((210 / 255), (76 / 255), (71 / 255))
- scrollingFrame.ScrollBarThickness = 4
- scrollingFrame.ZIndex = 3
- -- Configure layout.
- uiListLayout.Parent = scrollingFrame
- uiListLayout.Padding = UDim.new(0, 10)
- uiPadding.Parent = scrollingFrame
- uiPadding.PaddingLeft = UDim.new(0.08, 0)
- uiPadding.PaddingRight = UDim.new(0.08, 0)
- uiPadding.PaddingTop = UDim.new(0, 5)
- uiListLayout.Changed:Connect(function()
- scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, uiListLayout.AbsoluteContentSize.Y + 10)
- end)
- cloneGui.scrollingFrame = scrollingFrame
- end
- function cloneGui.addGrid(grid)
- local UIStroke = player.PlayerGui.MainGui.PaintFrame.Grid.UIStroke:Clone()
- local container = Instance.new('Frame')
- local preview = grid:Clone()
- -- Initialize new container.
- container.Parent = cloneGui.scrollingFrame
- container.Size = UDim2.new(1, 0, 1, 0)
- container.SizeConstraint = Enum.SizeConstraint.RelativeXX
- container.BackgroundTransparency = 0.8
- container.ZIndex = 4
- UIStroke.Thickness = 4.5
- UIStroke.Parent = container
- UIStroke.Enabled = false
- -- Clone grid into container.
- preview.Parent = container
- if (cloneGui.selected == nil) then
- cloneGui.selected = container
- UIStroke.Enabled = true
- end
- container.InputBegan:Connect(function(userInput)
- if (userInput.UserInputType == Enum.UserInputType.MouseButton1) then
- cloneGui.selected.UIStroke.Enabled = false
- UIStroke.Enabled = true
- cloneGui.selected = container
- end
- end)
- end
- function copyGrid()
- if (cloneGui.selected ~= nil) then
- local target = cloneGui.selected.Grid
- local destination = player.PlayerGui.MainGui.PaintFrame.Grid
- for i = 1, 1024 do
- destination[i].BackgroundColor3 = target[i].BackgroundColor3
- end
- end
- end
- function cloneGrid()
- local remote = game.ReplicatedStorage.Remotes.CreateArt
- local frameColor = "ffffff"
- local frame = "Starter Frame"
- local name = "a"
- local cells = {}
- local grid = cloneGui.selected.Grid
- for i = 1, 1024 do
- cells[i] = grid[i].BackgroundColor3:ToHex()
- end
- local payload = {}
- payload["FrameColor"] = frameColor
- payload["Frame"] = frame
- payload["Name"] = name
- payload["Cells"] = cells
- remote:InvokeServer(payload)
- end
- function refreshGrids()
- local objects = game.Workspace.Plots:GetDescendants()
- for i, v in ipairs(objects) do
- if (v.Name == 'Grid' and v.ClassName == 'Frame' and not collectionService:HasTag(v, 'cloned')) then
- if (#v:GetChildren() == 1027) then
- collectionService:AddTag(v, 'cloned')
- cloneGui.addGrid(v)
- end
- end
- end
- end
- cloneGui.buildRoot()
- cloneGui.buildButtons()
- cloneGui.buildScrollingFrame()
- while (_G.refreshing) do
- refreshGrids()
- wait(0.1)
- end