Starving Artists Script GUI | CLONE / COPY

Created by Fuu

Features:

  • Copy the selected painting to your easel.
  • Clone via remote (unstable and sometimes detected. Do not recommend.)
  • Automatically capture new paintings in the workspace.
  • Paintings can still be cloned even when owner leaves.

To use this you need to first claim a stand, and then start painting.

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

ENJOY!

Warning: DO NOT DOWNLOAD anything from this page, you’re only here to copy the script!

Share This Post

Share on facebook
Share on linkedin
Share on twitter
Share on email

More Scripts!

TOP 10 TRENDING SCRIPTS