- Copy art from ANY Player
Script:
local Target = 'target_user'; -- name (NOT DisplayName) of the target i.e. my_original_user
local Canvas = 1; -- which easel you intend to copy (1, 2, 3, etc.)
local TryCloneTextures = false; -- true/false whether you'd like to TRY and copy textures (except idk what I'm doing so it looks shit)
local CopyCloneToClipboard = false; -- clone canvas then copy in form of JSON table for redrawing later
local Players = game:GetService('Players');
local Plots = game:GetService('Workspace').Plots;
local HttpService = game:GetService('HttpService');
local SquareSize = 7.231;
local LowestX, LowestY = 1.231, 3.231;
local UI = Players.LocalPlayer.PlayerGui.MainGui.PaintFrame.GridHolder.Grid;
local function CloneGrid(GridObject, Texture)
if not Texture then
for _, GridPart in ipairs(GridObject:GetChildren()) do
if (GridPart:IsA('GuiObject')) then
local AbsolutePosition = GridPart.AbsolutePosition;
local Ax, Ay = AbsolutePosition.X, AbsolutePosition.Y;
local AbsoluteSize = GridPart.AbsoluteSize;
local Asx, Asy = math.round(AbsoluteSize.X * 1000) / 1000, math.round(AbsoluteSize.Y * 1000) / 1000;
local Rcx, Rcy = (Asx / SquareSize) - 1, (Asy / SquareSize) - 1;
Ax = math.round(Ax * 1000) / 1000;
Ay = math.round(Ay * 1000) / 1000;
local Column = math.round((Ax - LowestX) / SquareSize);
local Row = math.round((Ay - LowestY) / SquareSize);
local CellNumber = math.floor((Row * 32) + Column + 1);
UI:FindFirstChild(CellNumber).BackgroundColor3 = GridPart['BackgroundColor3'];
if (Rcx > 0) and (Rcy > 0) then
local NewRow, NewColumn = Row, Column;
for rX = 1, Rcx do
NewColumn = Column + rX;
for rY = 1, Rcy do
NewRow = Row + rY;
local NewCell = math.floor((NewRow * 32) + NewColumn + 1);
UI:FindFirstChild(NewCell).BackgroundColor3 = GridPart['BackgroundColor3'];
end
end
end
if (Rcx > 0) then
for rX = 1, Rcx do
local NewColumn = Column + rX;
local NewCell = math.floor((Row * 32) + NewColumn + 1);
UI:FindFirstChild(NewCell).BackgroundColor3 = GridPart['BackgroundColor3'];
end
end
if (Rcy > 0) then
for rY = 1, Rcy do
local NewRow = Row + rY;
local NewCell = math.floor((NewRow * 32) + Column + 1);
UI:FindFirstChild(NewCell).BackgroundColor3 = GridPart['BackgroundColor3'];
end
end
end;
end;
else
for _, GridPart in ipairs(GridObject:GetChildren()) do
if (GridPart:IsA('GuiObject')) then
local AbsolutePosition = GridPart.AbsolutePosition;
local Ax, Ay = AbsolutePosition.X, AbsolutePosition.Y;
local AbsoluteSize = GridPart.AbsoluteSize;
local Asx, Asy = math.round(AbsoluteSize.X * 1000) / 1000, math.round(AbsoluteSize.Y * 1000) / 1000;
local Rcx, Rcy = (Asx / SquareSize) - 1, (Asy / SquareSize) - 1;
Ax = math.round(Ax * 1000) / 1000;
Ay = math.round(Ay * 1000) / 1000;
local Column = math.round((Ax - LowestX) / SquareSize);
local Row = math.round((Ay - LowestY) / SquareSize);
local CellNumber = math.floor((Row * 32) + Column + 1);
local TextureCopy = GridPart:Clone()
TextureCopy.Size = UDim2.fromScale(1, 1);
TextureCopy.Parent = UI:FindFirstChild(CellNumber);
end;
end;
end;
end
local function ClonePlayerCanvas(Player, CanvasNumber)
local Easel = Plots[Player].Easels[tostring(CanvasNumber)].Canvas.SurfaceGui
local ArtGrid = Easel.Grid;
local ArtTextures = Easel.TexturesFrame;
CloneGrid(ArtGrid);
if (TryCloneTextures) then
CloneGrid(ArtTextures, true);
end
end;
local function ClonePlayerCanvasWithBytes(Player, CanvasNumber)
ClonePlayerCanvas(Target, Canvas);
local Bytes = {};
for _, GridPart in ipairs(UI:GetChildren()) do
if (GridPart:IsA('GuiObject')) then
local Colour = GridPart.BackgroundColor3;
Bytes[GridPart.Name] = {
R = math.floor(Colour.R * 255),
G = math.floor(Colour.G * 255),
B = math.floor(Colour.B * 255)
};
end
end
setclipboard(HttpService:JSONEncode(Bytes));
end
if (CopyCloneToClipboard) then
ClonePlayerCanvasWithBytes(Target, Canvas);
else
ClonePlayerCanvas(Target, Canvas);
end
Post a Comment