
Key RequiredUniversal

local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
pcall(function()
Players.CharacterAutoLoads = false
end)
local currentTargetName = nil
-- GUI
local Copier = Instance.new("ScreenGui")
local Main = Instance.new("Frame")
local Line = Instance.new("Frame")
local TextLabel = Instance.new("TextLabel")
local CopierPage = Instance.new("Frame")
local Username = Instance.new("TextBox")
local tutorial = Instance.new("TextLabel")
local UserPFP = Instance.new("ImageLabel")
local Copy = Instance.new("TextButton")
local Buttons = Instance.new("Frame")
local CopierPage_2 = Instance.new("TextButton")
local PremadePage = Instance.new("TextButton")
local IngamePage = Instance.new("TextButton")
local Premade = Instance.new("Frame")
local Ingame = Instance.new("Frame")
local ScrollingFrame = Instance.new("ScrollingFrame")
local Frame = Instance.new("Frame")
Copier.Name = "Copier"
Copier.Parent = LocalPlayer:WaitForChild("PlayerGui")
Copier.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
Copier.ResetOnSpawn = false
Main.Name = "Main"
Main.Parent = Copier
Main.BackgroundColor3 = Color3.fromRGB(33, 42, 42)
Main.BorderColor3 = Color3.fromRGB(255, 255, 255)
Main.Position = UDim2.new(0.304305285, 0, 0.286624104, 0)
Main.Size = UDim2.new(0, 418, 0, 328)
Main.ZIndex = 2
Line.Name = "Line"
Line.Parent = Main
Line.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Line.BorderColor3 = Color3.fromRGB(0, 0, 0)
Line.BorderSizePixel = 0
Line.Position = UDim2.new(0, 0, 0.120575413, 0)
Line.Size = UDim2.new(0, 418, 0, 1)
TextLabel.Parent = Line
TextLabel.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TextLabel.BackgroundTransparency = 1
TextLabel.BorderColor3 = Color3.fromRGB(0, 0, 0)
TextLabel.BorderSizePixel = 0
TextLabel.Position = UDim2.new(0, 0, -41, 0)
TextLabel.Size = UDim2.new(0, 417, 0, 41)
TextLabel.Font = Enum.Font.Unknown
TextLabel.Text = "Avatar Copier - By ProjectLigma"
TextLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
TextLabel.TextScaled = true
TextLabel.TextSize = 14
TextLabel.TextWrapped = true
CopierPage.Name = "CopierPage"
CopierPage.Parent = Main
CopierPage.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
CopierPage.BackgroundTransparency = 1
CopierPage.BorderColor3 = Color3.fromRGB(0, 0, 0)
CopierPage.BorderSizePixel = 0
CopierPage.Position = UDim2.new(0, 0, 0.123624288, 0)
CopierPage.Size = UDim2.new(0, 418, 0, 229)
Username.Name = "Username"
Username.Parent = CopierPage
Username.BackgroundColor3 = Color3.fromRGB(100, 124, 119)
Username.BorderColor3 = Color3.fromRGB(92, 118, 121)
Username.Position = UDim2.new(0.344497621, 0, 0.0436681211, 0)
Username.Size = UDim2.new(0, 266, 0, 55)
Username.ClearTextOnFocus = false
Username.Font = Enum.Font.Unknown
Username.Text = "ProjectLigma"
Username.TextColor3 = Color3.fromRGB(255, 255, 255)
Username.TextScaled = true
Username.TextSize = 14
Username.TextWrapped = true
tutorial.Name = "tutorial"
tutorial.Parent = CopierPage
tutorial.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
tutorial.BackgroundTransparency = 1
tutorial.BorderColor3 = Color3.fromRGB(0, 0, 0)
tutorial.BorderSizePixel = 0
tutorial.Position = UDim2.new(0.0167464111, 0, 0.602620065, 0)
tutorial.Size = UDim2.new(0, 402, 0, 92)
tutorial.Font = Enum.Font.Unknown
tutorial.Text = "Put the target name on the textbox, then click \"Copy this avatar!\" to get the target's avatar!"
tutorial.TextColor3 = Color3.fromRGB(255, 255, 255)
tutorial.TextScaled = true
tutorial.TextSize = 22
tutorial.TextWrapped = true
tutorial.TextXAlignment = Enum.TextXAlignment.Left
tutorial.TextYAlignment = Enum.TextYAlignment.Top
UserPFP.Name = "UserPFP"
UserPFP.Parent = CopierPage
UserPFP.BackgroundColor3 = Color3.fromRGB(33, 42, 42)
UserPFP.BorderColor3 = Color3.fromRGB(170, 170, 255)
UserPFP.Position = UDim2.new(0.0167464111, 0, 0.0436681211, 0)
UserPFP.Size = UDim2.new(0, 128, 0, 120)
UserPFP.Image = "rbxasset://textures/ui/GuiImagePlaceholder.png"
Copy.Name = "Copy"
Copy.Parent = CopierPage
Copy.BackgroundColor3 = Color3.fromRGB(100, 124, 119)
Copy.BorderColor3 = Color3.fromRGB(92, 118, 121)
Copy.Position = UDim2.new(0.344497621, 0, 0.336244553, 0)
Copy.Size = UDim2.new(0, 265, 0, 53)
Copy.Font = Enum.Font.SourceSansLight
Copy.Text = "Copy this avatar!"
Copy.TextColor3 = Color3.fromRGB(171, 203, 198)
Copy.TextScaled = true
Copy.TextSize = 14
Copy.TextWrapped = true
Buttons.Name = "Buttons"
Buttons.Parent = Main
Buttons.BackgroundColor3 = Color3.fromRGB(33, 42, 42)
Buttons.BorderColor3 = Color3.fromRGB(255, 255, 255)
Buttons.Position = UDim2.new(0, 0, 0.843136489, 0)
Buttons.Size = UDim2.new(0, 418, 0, 51)
CopierPage_2.Name = "CopierPage"
CopierPage_2.Parent = Buttons
CopierPage_2.BackgroundColor3 = Color3.fromRGB(60, 77, 79)
CopierPage_2.BorderColor3 = Color3.fromRGB(92, 118, 121)
CopierPage_2.Position = UDim2.new(0.0189999659, 0, 0.0899999291, 0)
CopierPage_2.Size = UDim2.new(0, 128, 0, 43)
CopierPage_2.Font = Enum.Font.SourceSansLight
CopierPage_2.Text = "Avatar Copier"
CopierPage_2.TextColor3 = Color3.fromRGB(171, 203, 198)
CopierPage_2.TextScaled = true
CopierPage_2.TextSize = 14
CopierPage_2.TextWrapped = true
PremadePage.Name = "PremadePage"
PremadePage.Parent = Buttons
PremadePage.BackgroundColor3 = Color3.fromRGB(60, 77, 79)
PremadePage.BorderColor3 = Color3.fromRGB(92, 118, 121)
PremadePage.Position = UDim2.new(0.674287081, 0, 0.0799997374, 0)
PremadePage.Size = UDim2.new(0, 129, 0, 43)
PremadePage.Font = Enum.Font.SourceSansLight
PremadePage.Text = "Premade avatars"
PremadePage.TextColor3 = Color3.fromRGB(171, 203, 198)
PremadePage.TextScaled = true
PremadePage.TextSize = 14
PremadePage.TextWrapped = true
IngamePage.Name = "IngamePage"
IngamePage.Parent = Buttons
IngamePage.BackgroundColor3 = Color3.fromRGB(60, 77, 79)
IngamePage.BorderColor3 = Color3.fromRGB(92, 118, 121)
IngamePage.Position = UDim2.new(0.344999999, 0, 0.0900000036, 0)
IngamePage.Size = UDim2.new(0, 131, 0, 43)
IngamePage.Font = Enum.Font.SourceSansLight
IngamePage.Text = "Ingame Avatars"
IngamePage.TextColor3 = Color3.fromRGB(171, 203, 198)
IngamePage.TextScaled = true
IngamePage.TextSize = 14
IngamePage.TextWrapped = true
Premade.Name = "Premade"
Premade.Parent = Main
Premade.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Premade.BackgroundTransparency = 1
Premade.BorderColor3 = Color3.fromRGB(0, 0, 0)
Premade.BorderSizePixel = 0
Premade.Position = UDim2.new(0, 0, 0.123624288, 0)
Premade.Size = UDim2.new(0, 418, 0, 229)
Premade.Visible = false
local function makePremadeButton(name, posX, posY, sizeX, sizeY, text)
local btn = Instance.new("TextButton")
btn.Name = name
btn.Parent = Premade
btn.BackgroundColor3 = Color3.fromRGB(100, 124, 119)
btn.BorderColor3 = Color3.fromRGB(92, 118, 121)
btn.Position = UDim2.new(posX, 0, posY, 0)
btn.Size = UDim2.new(0, sizeX, 0, sizeY)
btn.Font = Enum.Font.SourceSansLight
btn.Text = text
btn.TextColor3 = Color3.fromRGB(171, 203, 198)
btn.TextScaled = true
btn.TextSize = 14
btn.TextWrapped = true
return btn
end
local ProjectLigma = makePremadeButton("ProjectLigma", 0.0172487106, 0.0262008738, 128, 50, "ProjectLigma")
local UXI_302 = makePremadeButton("UXI_302", 0.344999909, 0.0262008738, 131, 50, "UXI_302")
local babyoutmooooooon2o22 = makePremadeButton("babyoutmooooooon2o22", 0.6742872, 0.0262008738, 128, 50, "babyoutmooooooon2o22")
local Shedletsky = makePremadeButton("Shedletsky", 0.0172487106, 0.275109172, 128, 49, "Shedletsky")
local MrDoomBringer = makePremadeButton("MrDoomBringer", 0.344999909, 0.275109172, 131, 49, "MrDoomBringer")
local johnnyschwehel1234 = makePremadeButton("johnnyschwehel1234", 0.6742872, 0.275109172, 128, 49, "ProjectLigma's brother avatar")
Ingame.Name = "Ingame"
Ingame.Parent = Main
Ingame.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Ingame.BackgroundTransparency = 1
Ingame.BorderColor3 = Color3.fromRGB(0, 0, 0)
Ingame.BorderSizePixel = 0
Ingame.Position = UDim2.new(0, 0, 0.123624288, 0)
Ingame.Size = UDim2.new(0, 418, 0, 229)
Ingame.Visible = false
ScrollingFrame.Parent = Ingame
ScrollingFrame.Active = true
ScrollingFrame.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
ScrollingFrame.BackgroundTransparency = 1
ScrollingFrame.BorderColor3 = Color3.fromRGB(0, 0, 0)
ScrollingFrame.BorderSizePixel = 0
ScrollingFrame.Position = UDim2.new(0.0167464837, 0, 0.0262008738, 0)
ScrollingFrame.Size = UDim2.new(0, 403, 0, 224)
ScrollingFrame.ScrollBarImageColor3 = Color3.fromRGB(0, 0, 0)
ScrollingFrame.CanvasSize = UDim2.new(0, 0, 6, 0)
Frame.Parent = ScrollingFrame
Frame.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Frame.BackgroundTransparency = 1
Frame.BorderColor3 = Color3.fromRGB(0, 0, 0)
Frame.BorderSizePixel = 0
Frame.Size = UDim2.new(0, 403, 1, 0)
-- In-game player list buttons
local tehbuttons = 72
local positionsX = {0.024813896, 0.362282872, 0.679900765}
local startY = 0.0043668123
local stepY = 0.0429403214
local sizeX = {112, 110, 109}
local sizeY = 43
local ingameButtons = {}
for i = 1, tehbuttons do
local col = ((i - 1) % 3) + 1
local row = math.floor((i - 1) / 3)
local plrqq = Instance.new("TextButton")
plrqq.Parent = Frame
plrqq.BackgroundColor3 = Color3.fromRGB(60, 77, 79)
plrqq.BorderSizePixel = 0
plrqq.Font = Enum.Font.SourceSansLight
plrqq.TextScaled = true
plrqq.TextWrapped = true
plrqq.TextColor3 = Color3.fromRGB(171, 203, 198)
plrqq.Visible = false
plrqq.Size = UDim2.new(0, sizeX[col], 0, sizeY)
plrqq.Position = UDim2.new(positionsX[col], 0, startY + (row * stepY), 0)
plrqq:SetAttribute("PlayerName", "")
plrqq.MouseButton1Click:Connect(function()
local name = plrqq:GetAttribute("PlayerName")
if name ~= "" then
Ingame.Visible = false
CopierPage.Visible = true
Username.Text = name
end
end)
table.insert(ingameButtons, plrqq)
end
local function refreshIngameButtons()
local plrs = Players:GetPlayers()
for i, btn in ipairs(ingameButtons) do
local plr = plrs[i]
if plr then
btn.Visible = true
btn.Text = plr.Name
btn:SetAttribute("PlayerName", plr.Name)
else
btn.Visible = false
btn:SetAttribute("PlayerName", "")
end
end
end
Players.PlayerAdded:Connect(refreshIngameButtons)
Players.PlayerRemoving:Connect(refreshIngameButtons)
refreshIngameButtons()
task.spawn(function()
while true do
refreshIngameButtons()
task.wait(1)
end
end)
-- Draggable window
local function dragify(frame)
local dragToggle, dragSpeed, dragInput, dragStart, startPos
local function updateInput(input)
local delta = input.Position - dragStart
local pos = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
TweenService:Create(frame, TweenInfo.new(dragSpeed or 0), {Position = pos}):Play()
end
frame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragToggle = true
dragSpeed = 0
dragStart = input.Position
startPos = frame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragToggle = false
end
end)
end
end)
frame.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragToggle then
updateInput(input)
end
end)
end
dragify(Main)
-- Live avatar-picture preview while typing
task.spawn(function()
while true do
local name = Username.Text
local ok, userId = pcall(function()
return Players:GetUserIdFromNameAsync(name)
end)
if ok then
UserPFP.Image = string.format("rbxthumb://type=AvatarHeadShot&id=%s&w=420&h=420", userId)
end
task.wait(0.1)
end
end)
-- R6 / R15 idle-walk-run-jump animation setup (shared, not duplicated)
local function setupR6Animate(character, humanoid)
local animNames = {
idle = "http://www.roblox.com/asset/?id=180435571",
walk = "http://www.roblox.com/asset/?id=180426354",
jump = "http://www.roblox.com/asset/?id=125750702",
fall = "http://www.roblox.com/asset/?id=180436148",
climb = "http://www.roblox.com/asset/?id=180436334",
sit = "http://www.roblox.com/asset/?id=178130996",
}
local tracks = {}
for name, id in pairs(animNames) do
local anim = Instance.new("Animation")
anim.AnimationId = id
tracks[name] = humanoid:LoadAnimation(anim)
end
local current
local function play(name)
if current == name then return end
if tracks[current] then tracks[current]:Stop(0.1) end
current = name
if tracks[name] then tracks[name]:Play(0.1) end
end
humanoid.Running:Connect(function(speed)
play(speed > 0.5 and "walk" or "idle")
end)
humanoid.Jumping:Connect(function() play("jump") end)
humanoid.FreeFalling:Connect(function() play("fall") end)
humanoid.Climbing:Connect(function() play("climb") end)
humanoid.Seated:Connect(function() play("sit") end)
play("idle")
task.spawn(function()
while character.Parent do
while humanoid.Health < humanoid.MaxHealth and character.Parent do
task.wait(1)
humanoid.Health = math.min(humanoid.Health + humanoid.MaxHealth * 0.01, humanoid.MaxHealth)
end
if not character.Parent then break end
humanoid.HealthChanged:Wait()
end
end)
end
local function setupR15Animate(character, humanoid)
local animNames = {
idle = "http://www.roblox.com/asset/?id=507766388",
walk = "http://www.roblox.com/asset/?id=507777826",
jump = "http://www.roblox.com/asset/?id=507765000",
fall = "http://www.roblox.com/asset/?id=507767968",
climb = "http://www.roblox.com/asset/?id=507765644",
sit = "http://www.roblox.com/asset/?id=2506281703",
}
local tracks = {}
for name, id in pairs(animNames) do
local anim = Instance.new("Animation")
anim.AnimationId = id
tracks[name] = humanoid:LoadAnimation(anim)
end
local current
local function play(name)
if current == name then return end
if tracks[current] then tracks[current]:Stop(0.15) end
current = name
if tracks[name] then tracks[name]:Play(0.15) end
end
humanoid.Running:Connect(function(speed)
play(speed > 0.75 and "walk" or "idle")
end)
humanoid.Jumping:Connect(function() play("jump") end)
humanoid.FreeFalling:Connect(function() play("fall") end)
humanoid.Climbing:Connect(function() play("climb") end)
humanoid.Seated:Connect(function() play("sit") end)
play("idle")
end
local function applyAnimate(character, humanoid)
if humanoid.RigType == Enum.HumanoidRigType.R6 then
setupR6Animate(character, humanoid)
elseif humanoid.RigType == Enum.HumanoidRigType.R15 then
setupR15Animate(character, humanoid)
end
end
-- Core swap logic -- this is where the bug is actually fixed
local function LoadAvatar(targetName)
if not targetName or targetName == "" then return end
-- Do not allow copying myself
if string.lower(targetName) == string.lower(LocalPlayer.Name) then
warn("[AvatarCopier] Không thể copy chính mình!")
return
end
local ok, userId = pcall(function()
return Players:GetUserIdFromNameAsync(targetName)
end)
-- Does not exist
if not ok or not userId then
warn("[AvatarCopier] Người dùng không tồn tại:", targetName)
return
end
-- Check if banned / account deleted
local okDesc, desc = pcall(function()
return Players:GetHumanoidDescriptionFromUserId(userId)
end)
if not okDesc or not desc then
warn("[AvatarCopier] Không thể copy (có thể bị ban hoặc account đã bị xóa):", targetName)
return
end
local ok, userId = pcall(function()
return Players:GetUserIdFromNameAsync(targetName)
end)
if not ok or not userId then
warn("[AvatarCopier] Couldn't find user:", targetName)
return
end
local ok2, character = pcall(function()
return Players:CreateHumanoidModelFromUserId(userId)
end)
if not ok2 or not character then
warn("[AvatarCopier] Couldn't build avatar for:", targetName)
return
end
local humanoid = character:WaitForChild("Humanoid")
-- Remove default animation
local oldAnimate = character:FindFirstChild("Animate")
if oldAnimate then
oldAnimate:Destroy()
end
local oldChar = LocalPlayer.Character
local position = CFrame.new(0, 5, 0)
if oldChar and oldChar:FindFirstChild("HumanoidRootPart") then
position = oldChar.HumanoidRootPart.CFrame
end
character.Name = LocalPlayer.Name
character.Parent = workspace
-- Set location now
local root = character:WaitForChild("HumanoidRootPart")
root.CFrame = position
for _, v in ipairs(character:GetDescendants()) do
if v:IsA("BasePart") then
v.Anchored = false
end
end
--Hide old character
if oldChar and oldChar ~= character then
pcall(function()
for _, v in ipairs(oldChar:GetDescendants()) do
if v:IsA("BasePart") then
v.Anchored = true
v.CanCollide = false
v.Transparency = 1
elseif v:IsA("Decal") then
v.Transparency = 1
end
end
local oldHumanoid = oldChar:FindFirstChildOfClass("Humanoid")
if oldHumanoid then
oldHumanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
end
oldChar.Parent = nil
end)
end
LocalPlayer.Character = character
-- Force camera + position again after 1 frame
task.defer(function()
if character and character.Parent then
local hrp = character:FindFirstChild("HumanoidRootPart")
if hrp then
hrp.CFrame = position
end
workspace.CurrentCamera.CameraSubject = humanoid
workspace.CurrentCamera.CameraType = Enum.CameraType.Custom
end
end)
-- Press again after 0.15s to prevent being pulled back.
task.delay(0.15, function()
if character and character.Parent then
local hrp = character:FindFirstChild("HumanoidRootPart")
if hrp then
hrp.CFrame = position
end
workspace.CurrentCamera.CameraSubject = humanoid
end
end)
applyAnimate(character, humanoid)
currentTargetName = targetName
end
local isSwapping = false
LocalPlayer.CharacterAdded:Connect(function(char)
if currentTargetName and not isSwapping then
isSwapping = true
task.wait(0.3)
LoadAvatar(currentTargetName)
task.wait(0.5)
isSwapping = false
end
end)
-- Button hookups
CopierPage_2.MouseButton1Click:Connect(function()
CopierPage.Visible = true
Ingame.Visible = false
Premade.Visible = false
end)
IngamePage.MouseButton1Click:Connect(function()
CopierPage.Visible = false
Ingame.Visible = true
Premade.Visible = false
end)
PremadePage.MouseButton1Click:Connect(function()
CopierPage.Visible = false
Ingame.Visible = false
Premade.Visible = true
end)
Copy.MouseButton1Click:Connect(function()
LoadAvatar(Username.Text)
end)
ProjectLigma.MouseButton1Click:Connect(function() LoadAvatar("ProjectLigma") end)
UXI_302.MouseButton1Click:Connect(function() LoadAvatar("UXI_302") end)
babyoutmooooooon2o22.MouseButton1Click:Connect(function() LoadAvatar("babyoutmooooooon2o22") end)
Shedletsky.MouseButton1Click:Connect(function() LoadAvatar("Shedletsky") end)
MrDoomBringer.MouseButton1Click:Connect(function() LoadAvatar("MrDoomBringer") end)
johnnyschwehel1234.MouseButton1Click:Connect(function() LoadAvatar("johnnyschwehel1234") end)



like if you like it
@Near404 idk