-- KWZLUP - Rob Catalog Avatar Creator
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local AvatarEditorService = game:GetService("AvatarEditorService")
local HttpService = game:GetService("HttpService")
local AutoSavedOutfit = nil
local SETTINGS_FILE = "RobCatalogSettings.json"
local OUTFITS_FILE = "RobCatalogOutfits.json"
local Settings = {
AutoLoad = true
}
local SavedOutfits = {}
if isfile and isfile(SETTINGS_FILE) then
pcall(function()
Settings = HttpService:JSONDecode(readfile(SETTINGS_FILE))
end)
end
if isfile and isfile(OUTFITS_FILE) then
pcall(function()
SavedOutfits = HttpService:JSONDecode(readfile(OUTFITS_FILE))
end)
end
local function SaveSettings()
if writefile then
writefile(SETTINGS_FILE, HttpService:JSONEncode(Settings))
end
end
local function SaveOutfits()
if writefile then
writefile(OUTFITS_FILE, HttpService:JSONEncode(SavedOutfits))
end
end
local player = Players.LocalPlayer
local gui = Instance.new("ScreenGui")
gui.Name = "KWZLUP"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.Parent = player.PlayerGui
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 700, 0, 360)
frame.Position = UDim2.new(0.5, -350, 0.5, -180)
frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
frame.BorderSizePixel = 0
frame.Active = true
frame.Visible = true
frame.Parent = gui
local corner = Instance.new("UICorner", frame)
corner.CornerRadius = UDim.new(0, 8)
-- BARRA SUPERIOR KWZLUP
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 44)
titleBar.Position = UDim2.new(0, 0, 0, 0)
titleBar.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
titleBar.BorderSizePixel = 0
titleBar.Parent = frame
local titleCorner = Instance.new("UICorner", titleBar)
titleCorner.CornerRadius = UDim.new(0, 8)
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -100, 1, 0)
title.Position = UDim2.new(0, 12, 0, 0)
title.BackgroundTransparency = 1
title.Text = "KWZLUP"
title.Font = Enum.Font.GothamBold
title.TextSize = 24
title.TextXAlignment = Enum.TextXAlignment.Left
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.Parent = titleBar
-- BOTÃO MINIMIZAR
local minimizePanelBtn = Instance.new("TextButton")
minimizePanelBtn.Text = "−"
minimizePanelBtn.Size = UDim2.new(0, 44, 1, 0)
minimizePanelBtn.Position = UDim2.new(1, -88, 0, 0)
minimizePanelBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
minimizePanelBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
minimizePanelBtn.Font = Enum.Font.GothamBold
minimizePanelBtn.TextSize = 25
minimizePanelBtn.Parent = titleBar
local minimizePanelCorner = Instance.new("UICorner", minimizePanelBtn)
minimizePanelCorner.CornerRadius = UDim.new(0, 6)
-- BOTÃO X
local closeBtn = Instance.new("TextButton")
closeBtn.Text = "X"
closeBtn.Size = UDim2.new(0, 44, 1, 0)
closeBtn.Position = UDim2.new(1, -44, 0, 0)
closeBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
closeBtn.Font = Enum.Font.GothamBold
closeBtn.TextSize = 20
closeBtn.Parent = titleBar
local closeCorner = Instance.new("UICorner", closeBtn)
closeCorner.CornerRadius = UDim.new(0, 6)
local searchBar = Instance.new("TextBox")
searchBar.Size = UDim2.new(0.55, 0, 0, 30)
searchBar.Position = UDim2.new(0.15, 0, 0, 50)
searchBar.PlaceholderText = "Search catalog items..."
searchBar.Text = ""
searchBar.TextColor3 = Color3.fromRGB(255, 255, 255)
searchBar.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
searchBar.Font = Enum.Font.Gotham
searchBar.TextSize = 14
searchBar.Parent = frame
local searchCorner = Instance.new("UICorner", searchBar)
searchCorner.CornerRadius = UDim.new(0, 6)
local clearSearchBtn = Instance.new("TextButton")
clearSearchBtn.Text = "✖"
clearSearchBtn.Size = UDim2.new(0, 30, 0, 30)
clearSearchBtn.Position = UDim2.new(0.85, -30, 0, 50)
clearSearchBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
clearSearchBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
clearSearchBtn.Font = Enum.Font.GothamBold
clearSearchBtn.TextSize = 16
clearSearchBtn.Parent = frame
local clearSearchCorner = Instance.new("UICorner", clearSearchBtn)
clearSearchCorner.CornerRadius = UDim.new(0, 6)
local scroll = Instance.new("ScrollingFrame")
scroll.Size = UDim2.new(0.72, 0, 1, -132)
scroll.Position = UDim2.new(0.27, 0, 0, 128)
scroll.BackgroundTransparency = 1
scroll.ScrollBarThickness = 6
scroll.CanvasSize = UDim2.new(0, 0, 0, 0)
scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
scroll.Parent = frame
local wearingFrame = Instance.new("Frame")
wearingFrame.Size = UDim2.new(0.24, 0, 1, -132)
wearingFrame.Position = UDim2.new(0.01, 0, 0, 128)
wearingFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
wearingFrame.Parent = frame
Instance.new("UICorner", wearingFrame)
local wearingTitle = Instance.new("TextLabel")
wearingTitle.Size = UDim2.new(1, 0, 0, 30)
wearingTitle.BackgroundTransparency = 1
wearingTitle.Text = "Wearing"
wearingTitle.Font = Enum.Font.GothamBold
wearingTitle.TextSize = 18
wearingTitle.TextColor3 = Color3.new(1, 1, 1)
wearingTitle.Parent = wearingFrame
local wearingScroll = Instance.new("ScrollingFrame")
wearingScroll.Size = UDim2.new(1, -10, 1, -35)
wearingScroll.Position = UDim2.new(0, 5, 0, 30)
wearingScroll.BackgroundTransparency = 1
wearingScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
wearingScroll.ScrollBarThickness = 5
wearingScroll.Parent = wearingFrame
local wearingLayout = Instance.new("UIListLayout")
wearingLayout.Padding = UDim.new(0, 5)
wearingLayout.Parent = wearingScroll
local bundleFrame = Instance.new("Frame")
bundleFrame.Size = UDim2.new(0, 250, 0, 300)
bundleFrame.Position = UDim2.new(.5, -125, .5, -150)
bundleFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
bundleFrame.Visible = false
bundleFrame.Parent = gui
Instance.new("UICorner", bundleFrame)
local bundleClose = Instance.new("TextButton")
bundleClose.Size = UDim2.new(0, 28, 0, 28)
bundleClose.Position = UDim2.new(1, -33, 0, 3)
bundleClose.BackgroundColor3 = Color3.fromRGB(180, 60, 60)
bundleClose.Text = "X"
bundleClose.TextColor3 = Color3.new(1, 1, 1)
bundleClose.Font = Enum.Font.GothamBold
bundleClose.TextSize = 16
bundleClose.Parent = bundleFrame
Instance.new("UICorner", bundleClose).CornerRadius = UDim.new(0, 6)
bundleClose.MouseButton1Click:Connect(function()
bundleFrame.Visible = false
end)
local bundleTitle = Instance.new("TextLabel")
bundleTitle.Size = UDim2.new(1, 0, 0, 30)
bundleTitle.BackgroundTransparency = 1
bundleTitle.TextColor3 = Color3.new(1, 1, 1)
bundleTitle.Font = Enum.Font.GothamBold
bundleTitle.TextSize = 18
bundleTitle.Parent = bundleFrame
local bundleScroll = Instance.new("ScrollingFrame")
bundleScroll.Size = UDim2.new(1, -10, 1, -40)
bundleScroll.Position = UDim2.new(0, 5, 0, 35)
bundleScroll.BackgroundTransparency = 1
bundleScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
bundleScroll.ScrollBarThickness = 5
bundleScroll.Parent = bundleFrame
local bundleLayout = Instance.new("UIListLayout")
bundleLayout.Padding = UDim.new(0, 5)
bundleLayout.Parent = bundleScroll
local categoryScroll = Instance.new("ScrollingFrame")
categoryScroll.Size = UDim2.new(0.98, 0, 0, 36)
categoryScroll.Position = UDim2.new(0.01, 0, 0, 86)
categoryScroll.BackgroundTransparency = 1
categoryScroll.ScrollBarThickness = 4
categoryScroll.ScrollingDirection = Enum.ScrollingDirection.X
categoryScroll.AutomaticCanvasSize = Enum.AutomaticSize.X
categoryScroll.CanvasSize = UDim2.new()
categoryScroll.Parent = frame
local categoryLayout = Instance.new("UIListLayout")
categoryLayout.FillDirection = Enum.FillDirection.Horizontal
categoryLayout.Padding = UDim.new(0, 6)
categoryLayout.Parent = categoryScroll
local layout = Instance.new("UIGridLayout")
layout.CellSize = UDim2.new(0, 100, 0, 120)
layout.CellPadding = UDim2.new(0, 5, 0, 5)
layout.Parent = scroll
local bodyFrame = Instance.new("Frame")
bodyFrame.Size = UDim2.new(0.72, 0, 1, -132)
bodyFrame.Position = UDim2.new(0.27, 0, 0, 128)
bodyFrame.BackgroundTransparency = 1
bodyFrame.Visible = false
bodyFrame.Parent = frame
local bodyScroll = Instance.new("ScrollingFrame")
bodyScroll.Size = UDim2.new(1, 0, 1, -40)
bodyScroll.BackgroundTransparency = 1
bodyScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
bodyScroll.ScrollBarThickness = 6
bodyScroll.Parent = bodyFrame
local bodyGrid = Instance.new("UIGridLayout")
bodyGrid.CellSize = UDim2.new(0, 50, 0, 50)
bodyGrid.CellPadding = UDim2.new(0, 5, 0, 5)
bodyGrid.Parent = bodyScroll
local rgbBox = Instance.new("TextBox")
rgbBox.Size = UDim2.new(1, 0, 0, 30)
rgbBox.Position = UDim2.new(0, 0, 1, -30)
rgbBox.PlaceholderText = "255,255,255"
rgbBox.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
rgbBox.TextColor3 = Color3.new(1, 1, 1)
rgbBox.Font = Enum.Font.Gotham
rgbBox.TextSize = 16
rgbBox.Parent = bodyFrame
Instance.new("UICorner", rgbBox)
local catalogPages
local loadMore
local AutoSaveOutfit
local updateWearing
local currentQuery = ""
local currentAssetType = Enum.AvatarAssetType.Shirt
local loading = false
local BundlesContainer = game:GetObjects(
getcustomasset("RBundles.rbxmx")
)[1]
local BodyColors = {
Color3.fromRGB(255,205,148),
Color3.fromRGB(255,220,177),
Color3.fromRGB(255,235,205),
Color3.fromRGB(242,215,180),
Color3.fromRGB(224,172,105),
Color3.fromRGB(198,134,66),
Color3.fromRGB(161,110,74),
Color3.fromRGB(120,82,45),
Color3.fromRGB(90,60,40),
Color3.fromRGB(60,40,30),
Color3.fromRGB(255,255,255),
Color3.fromRGB(220,220,220),
Color3.fromRGB(170,170,170),
Color3.fromRGB(100,100,100),
Color3.fromRGB(0,0,0),
Color3.fromRGB(255,0,0),
Color3.fromRGB(255,128,128),
Color3.fromRGB(255,128,0),
Color3.fromRGB(255,255,0),
Color3.fromRGB(128,255,0),
Color3.fromRGB(0,255,0),
Color3.fromRGB(0,255,128),
Color3.fromRGB(0,255,255),
Color3.fromRGB(0,170,255),
Color3.fromRGB(0,0,255),
Color3.fromRGB(128,0,255),
Color3.fromRGB(255,0,255),
Color3.fromRGB(255,0,128),
Color3.fromRGB(139,69,19),
Color3.fromRGB(210,180,140),
Color3.fromRGB(128,64,0),
Color3.fromRGB(64,32,0)
}
local originalHeadMesh
task.spawn(function()
local character = player.Character or player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local mesh = head:FindFirstChildOfClass("SpecialMesh")
if mesh then
originalHeadMesh = mesh:Clone()
end
end)
local function tryOn(item)
local character = player.Character or player.CharacterAdded:Wait()
local function AlreadyEquipped()
for _, v in ipairs(character:GetChildren()) do
if v:GetAttribute("CatalogId") == item.Id then
return true
end
end
local head = character:FindFirstChild("Head")
if head then
local mesh = head:FindFirstChildOfClass("SpecialMesh")
if mesh and mesh:GetAttribute("DisplayName") == item.Name then
return true
end
end
return false
end
if AlreadyEquipped() then
return
end
if item.AssetType == "Shirt" then
for _, v in ipairs(character:GetChildren()) do
if v:IsA("Shirt") then
v:Destroy()
end
end
local shirt = game:GetObjects("rbxassetid://" .. item.Id)[1]
if shirt then
shirt:SetAttribute("DisplayName", item.Name)
shirt.Parent = character
shirt:SetAttribute("CatalogId", item.Id)
end
updateWearing()
AutoSaveOutfit()
elseif item.AssetType == "Pants" then
for _, v in ipairs(character:GetChildren()) do
if v:IsA("Pants") then
v:Destroy()
end
end
local pants = game:GetObjects("rbxassetid://" .. item.Id)[1]
if pants then
pants:SetAttribute("DisplayName", item.Name)
pants.Parent = character
pants:SetAttribute("CatalogId", item.Id)
end
updateWearing()
AutoSaveOutfit()
elseif item.AssetType == "TShirt" then
for _, v in ipairs(character:GetChildren()) do
if v:IsA("ShirtGraphic") then
v:Destroy()
end
end
local shirtGraphic = game:GetObjects("rbxassetid://" .. item.Id)[1]
if shirtGraphic then
shirtGraphic:SetAttribute("DisplayName", item.Name)
shirtGraphic.Parent = character
shirtGraphic:SetAttribute("CatalogId", item.Id)
end
updateWearing()
AutoSaveOutfit()
elseif item.AssetType == "Hat" or string.find(item.AssetType, "Accessory") then
local success, accessory = pcall(function()
return game:GetObjects("rbxassetid://" .. item.Id)[1]
end)
if success and accessory then
accessory.Parent = character
accessory:SetAttribute("CatalogId", item.Id)
accessory:SetAttribute("DisplayName", item.Name)
local handle = accessory:FindFirstChild("Handle")
if handle then
local accessoryAttachment =
handle:FindFirstChildWhichIsA("Attachment")
if accessoryAttachment then
local characterAttachment =
character:FindFirstChild(
accessoryAttachment.Name,
true
)
if characterAttachment then
handle.CFrame =
characterAttachment.WorldCFrame
* accessoryAttachment.CFrame:Inverse()
local weld = Instance.new("WeldConstraint")
weld.Part0 = handle
weld.Part1 = characterAttachment.Parent
weld.Parent = handle
end
else
local head = character:FindFirstChild("Head")
if head then
handle.CFrame = head.CFrame
local weld = Instance.new("Weld")
weld.Part0 = handle
weld.Part1 = head
weld.Parent = handle
end
end
handle.Anchored = false
handle.CanCollide = false
end
updateWearing()
AutoSaveOutfit()
end
elseif item.AssetType == Enum.AvatarAssetType.Face then
local head = character:FindFirstChild("Head")
if head then
local old = head:FindFirstChild("face")
if old then
old:Destroy()
end
local decal = Instance.new("Decal")
decal.Name = "face"
decal.Texture = "rbxassetid://" .. item.Id
decal.Parent = head
end
end
end
local function equipBundleMesh(mesh)
local character = player.Character or player.CharacterAdded:Wait()
if mesh:IsA("CharacterMesh") then
for _, v in ipairs(character:GetChildren()) do
if v:IsA("CharacterMesh")
and v.BodyPart == mesh.BodyPart then
v:Destroy()
end
end
local clone = mesh:Clone()
clone:SetAttribute("DisplayName", mesh.Name)
clone:SetAttribute("BundleName", mesh.Parent.Name)
clone.Parent = character
updateWearing()
AutoSaveOutfit()
elseif mesh:IsA("SpecialMesh") then
local head = character:FindFirstChild("Head")
if head then
local old = head:FindFirstChildOfClass("SpecialMesh")
if old then
old:Destroy()
end
local clone = mesh:Clone()
clone:SetAttribute("DisplayName", mesh.Name)
clone:SetAttribute("BundleName", mesh.Parent.Name)
clone.Parent = head
updateWearing()
AutoSaveOutfit()
end
end
end
updateWearing = function()
local character = player.Character
if not character then
return
end
for _, v in ipairs(wearingScroll:GetChildren()) do
if v:IsA("Frame") then
v:Destroy()
end
end
local function addRow(instance, name)
local row = Instance.new("Frame")
row.Size = UDim2.new(1, -5, 0, 32)
row.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
row.Parent = wearingScroll
Instance.new("UICorner", row)
local label = Instance.new("TextLabel")
label.Size = UDim2.new(.65, 0, 1, 0)
label.BackgroundTransparency = 1
label.Text = name
label.TextScaled = true
label.TextColor3 = Color3.new(1, 1, 1)
label.Parent = row
local remove = Instance.new("TextButton")
remove.Size = UDim2.new(.35, -5, .8, 0)
remove.Position = UDim2.new(.65, 2, .1, 0)
remove.Text = "Take Off"
remove.Font = Enum.Font.GothamBold
remove.TextScaled = true
remove.BackgroundColor3 = Color3.fromRGB(170, 60, 60)
remove.TextColor3 = Color3.new(1, 1, 1)
remove.Parent = row
Instance.new("UICorner", remove)
remove.MouseButton1Click:Connect(function()
if instance:IsA("Accessory")
or instance:IsA("Shirt")
or instance:IsA("Pants")
or instance:IsA("ShirtGraphic")
or instance:IsA("CharacterMesh") then
instance:Destroy()
elseif instance:IsA("SpecialMesh")
and instance ~= originalHeadMesh then
local head = character:FindFirstChild("Head")
if head then
instance:Destroy()
if originalHeadMesh then
originalHeadMesh:Clone().Parent = head
end
end
end
updateWearing()
AutoSaveOutfit()
end)
end
for _, v in ipairs(character:GetChildren()) do
if v:IsA("Accessory")
or v:IsA("Shirt")
or v:IsA("Pants")
or v:IsA("ShirtGraphic")
or v:IsA("CharacterMesh") then
addRow(v, v:GetAttribute("DisplayName") or v.Name)
end
end
local head = character:FindFirstChild("Head")
if head then
local mesh = head:FindFirstChildOfClass("SpecialMesh")
if mesh and
(not originalHeadMesh
or mesh.MeshId ~= originalHeadMesh.MeshId) then
addRow(
mesh,
mesh:GetAttribute("DisplayName") or "Head"
)
end
end
end
local function GetCurrentOutfit()
local character = player.Character
if not character then
return nil
end
local data = {
Accessories = {},
Clothes = {},
Meshes = {},
BodyColors = {}
}
for _, v in ipairs(character:GetChildren()) do
if v:IsA("Accessory") then
table.insert(data.Accessories, {
Id = tonumber(v:GetAttribute("CatalogId")),
Name = v:GetAttribute("DisplayName")
})
elseif v:IsA("Shirt") then
data.Clothes.Shirt =
tonumber(v:GetAttribute("CatalogId"))
elseif v:IsA("Pants") then
data.Clothes.Pants =
tonumber(v:GetAttribute("CatalogId"))
elseif v:IsA("ShirtGraphic") then
data.Clothes.TShirt =
tonumber(v:GetAttribute("CatalogId"))
elseif v:IsA("CharacterMesh") then
table.insert(data.Meshes, {
Bundle = v:GetAttribute("BundleName"),
Name = v.Name,
BodyPart = v.BodyPart.Name
})
end
end
for _, part in ipairs(character:GetChildren()) do
if part:IsA("BasePart") then
data.BodyColors[part.Name] = {
part.Color.R,
part.Color.G,
part.Color.B
}
end
end
local head = character:FindFirstChild("Head")
if head then
local mesh = head:FindFirstChildOfClass("SpecialMesh")
if mesh and mesh ~= originalHeadMesh then
data.HeadMesh = {
MeshId = mesh.MeshId,
TextureId = mesh.TextureId,
Scale = {
mesh.Scale.X,
mesh.Scale.Y,
mesh.Scale.Z
},
Offset = {
mesh.Offset.X,
mesh.Offset.Y,
mesh.Offset.Z
},
VertexColor = {
mesh.VertexColor.X,
mesh.VertexColor.Y,
mesh.VertexColor.Z
}
}
end
end
return data
end
AutoSaveOutfit = function()
if Settings.AutoLoad then
AutoSavedOutfit = GetCurrentOutfit()
end
end
local function LoadSavedOutfit(data)
local character =
player.Character or player.CharacterAdded:Wait()
for _, v in ipairs(character:GetChildren()) do
if v:IsA("Accessory")
or v:IsA("Shirt")
or v:IsA("Pants")
or v:IsA("ShirtGraphic")
or v:IsA("CharacterMesh") then
v:Destroy()
end
end
local head = character:FindFirstChild("Head")
if head then
local mesh = head:FindFirstChildOfClass("SpecialMesh")
if mesh then
mesh:Destroy()
end
if originalHeadMesh then
originalHeadMesh:Clone().Parent = head
end
end
if data.Clothes.Shirt then
tryOn({
Id = data.Clothes.Shirt,
Name = "Shirt",
AssetType = "Shirt"
})
end
if data.Clothes.Pants then
tryOn({
Id = data.Clothes.Pants,
Name = "Pants",
AssetType = "Pants"
})
end
if data.Clothes.TShirt then
tryOn({
Id = data.Clothes.TShirt,
Name = "T-Shirt",
AssetType = "TShirt"
})
end
for _, acc in ipairs(data.Accessories) do
if acc.Id then
tryOn({
Id = acc.Id,
Name = acc.Name,
AssetType = "Hat"
})
end
end
if data.BodyColors then
for partName, color in pairs(data.BodyColors) do
local part =
character:FindFirstChild(partName)
if part then
part.Color =
Color3.new(
color[1],
color[2],
color[3]
)
end
end
end
if data.Meshes then
for _, meshInfo in ipairs(data.Meshes) do
local folder =
BundlesContainer:FindFirstChild(
meshInfo.Bundle
)
if folder then
for _, mesh in ipairs(folder:GetChildren()) do
if mesh:IsA("CharacterMesh")
and mesh.Name == meshInfo.Name
and mesh.BodyPart.Name == meshInfo.BodyPart then
equipBundleMesh(mesh)
break
end
end
end
end
end
if data.HeadMesh then
local head = character:FindFirstChild("Head")
if head then
local old =
head:FindFirstChildOfClass("SpecialMesh")
if old then
old:Destroy()
end
local mesh = Instance.new("SpecialMesh")
mesh.MeshId = data.HeadMesh.MeshId
mesh.TextureId = data.HeadMesh.TextureId
mesh.Scale =
Vector3.new(unpack(data.HeadMesh.Scale))
mesh.Offset =
Vector3.new(unpack(data.HeadMesh.Offset))
mesh.VertexColor =
Vector3.new(unpack(data.HeadMesh.VertexColor))
mesh.Parent = head
end
end
updateWearing()
AutoSaveOutfit()
end
local function openBundle(folder)
bundleFrame.Visible = true
bundleTitle.Text = folder.Name
for _, v in ipairs(bundleScroll:GetChildren()) do
if v:IsA("TextButton") then
v:Destroy()
end
end
for _, mesh in ipairs(folder:GetChildren()) do
local button = Instance.new("TextButton")
button.Size = UDim2.new(1, -5, 0, 35)
button.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
button.TextColor3 = Color3.new(1, 1, 1)
button.Font = Enum.Font.GothamBold
button.TextSize = 16
button.Text = mesh.Name
button.Parent = bundleScroll
Instance.new("UICorner", button)
button.MouseButton1Click:Connect(function()
equipBundleMesh(mesh)
end)
end
end
local function addItem(item)
local button = Instance.new("ImageButton")
button.Size = UDim2.new(0, 100, 0, 120)
button.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
button.Parent = scroll
local imgCorner = Instance.new("UICorner", button)
imgCorner.CornerRadius = UDim.new(0, 8)
local image = Instance.new("ImageLabel")
image.Size = UDim2.new(1, -10, 0, 90)
image.Position = UDim2.new(0, 5, 0, 5)
image.BackgroundTransparency = 1
image.Image =
"rbxthumb://type=Asset&id="
.. item.Id
.. "&w=150&h=150"
image.Parent = button
local imageCorner = Instance.new("UICorner", image)
imageCorner.CornerRadius = UDim.new(0, 8)
local text = Instance.new("TextLabel")
text.Name = "name"
text.Size = UDim2.new(1, -4, 0, 20)
text.Position = UDim2.new(0, 2, 1, -22)
text.BackgroundTransparency = 1
text.TextScaled = true
text.TextColor3 = Color3.new(1, 1, 1)
text.Text = item.Name
text.Parent = button
Instance.new("UICorner", text).CornerRadius =
UDim.new(0, 6)
button.MouseButton1Click:Connect(function()
local tryBtn = Instance.new("TextButton")
tryBtn.Size = UDim2.new(1, 0, 0, 25)
tryBtn.Position = UDim2.new(0, 0, 0, 95)
tryBtn.BackgroundColor3 =
Color3.fromRGB(0, 170, 255)
tryBtn.TextColor3 =
Color3.new(1, 1, 1)
tryBtn.Font = Enum.Font.GothamBold
tryBtn.TextSize = 14
tryBtn.Text = "Try On"
tryBtn.Parent = button
Instance.new("UICorner", tryBtn).CornerRadius =
UDim.new(0, 6)
task.delay(5, function()
if tryBtn then
tryBtn:Destroy()
end
end)
tryBtn.MouseButton1Click:Connect(function()
tryOn(item)
end)
end)
end
local function addCategoryButton(text, assetType)
local button = Instance.new("TextButton")
button.Size = UDim2.new(0, 90, 1, 0)
button.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
button.TextColor3 = Color3.new(1, 1, 1)
button.Font = Enum.Font.GothamBold
button.TextSize = 14
button.Text = text
button.Parent = categoryScroll
Instance.new("UICorner", button).CornerRadius =
UDim.new(0, 6)
button.MouseButton1Click:Connect(function()
currentAssetType = assetType
loadMore(true)
end)
end
local function clearItems()
for _, v in ipairs(scroll:GetChildren()) do
if v:IsA("GuiObject")
and not v:IsA("UIGridLayout") then
v:Destroy()
end
end
scroll.CanvasPosition = Vector2.zero
end
local SelectedBodyPart = "All"
local Parts = {
"All",
"Head",
"Torso",
"Left Arm",
"Right Arm",
"Left Leg",
"Right Leg"
}
local partSelector = Instance.new("TextButton")
partSelector.Size = UDim2.new(0, 120, 0, 30)
partSelector.Position = UDim2.new(0, 570, 0, 50)
partSelector.BackgroundColor3 =
Color3.fromRGB(45, 45, 45)
partSelector.Text = "All"
partSelector.TextColor3 = Color3.new(1, 1, 1)
partSelector.Parent = frame
partSelector.Visible = false
Instance.new("UICorner", partSelector)
local index = 1
partSelector.MouseButton1Click:Connect(function()
index += 1
if index > #Parts then
index = 1
end
SelectedBodyPart = Parts[index]
partSelector.Text = Parts[index]
end)
loadMore = function(reset)
if loading then
return
end
loading = true
if reset then
clearItems()
scroll.Visible = true
bodyFrame.Visible = false
partSelector.Visible = false
if currentAssetType == "Body" then
scroll.Visible = false
bodyFrame.Visible = true
partSelector.Visible = true
for _, v in ipairs(bodyScroll:GetChildren()) do
if v:IsA("TextButton") then
v:Destroy()
end
end
local function Apply(color)
local character = player.Character
if not character then
return
end
local Groups = {
["Head"] = {"Head"},
["Torso"] = {
"UpperTorso",
"LowerTorso"
},
["Left Arm"] = {
"LeftUpperArm",
"LeftLowerArm",
"LeftHand"
},
["Right Arm"] = {
"RightUpperArm",
"RightLowerArm",
"RightHand"
},
["Left Leg"] = {
"LeftUpperLeg",
"LeftLowerLeg",
"LeftFoot"
},
["Right Leg"] = {
"RightUpperLeg",
"RightLowerLeg",
"RightFoot"
}
}
if character:FindFirstChild("UpperTorso") then
if SelectedBodyPart == "All" then
for _, parts in pairs(Groups) do
for _, name in ipairs(parts) do
local p =
character:FindFirstChild(name)
if p then
p.Color = color
end
end
end
else
for _, name in ipairs(
Groups[SelectedBodyPart] or {}
) do
local p =
character:FindFirstChild(name)
if p then
p.Color = color
end
end
end
else
if SelectedBodyPart == "All" then
for _, name in ipairs({
"Head",
"Torso",
"Left Arm",
"Right Arm",
"Left Leg",
"Right Leg"
}) do
local p =
character:FindFirstChild(name)
if p then
p.Color = color
end
end
else
local p =
character:FindFirstChild(
SelectedBodyPart
)
if p then
p.Color = color
end
end
end
AutoSaveOutfit()
end
for _, color in ipairs(BodyColors) do
local b = Instance.new("TextButton")
b.Size = UDim2.new(0, 50, 0, 50)
b.BackgroundColor3 = color
b.Text = ""
b.Parent = bodyScroll
Instance.new("UICorner", b)
b.MouseButton1Click:Connect(function()
Apply(color)
end)
end
loading = false
return
end
if currentAssetType == "Outfits" then
clearItems()
local save = Instance.new("TextButton")
save.Size = UDim2.new(0, 220, 0, 40)
save.BackgroundColor3 =
Color3.fromRGB(45, 45, 45)
save.Text = "Save Current Outfit"
save.TextColor3 = Color3.new(1, 1, 1)
save.Font = Enum.Font.GothamBold
save.TextSize = 16
save.Parent = scroll
Instance.new("UICorner", save)
save.MouseButton1Click:Connect(function()
table.insert(SavedOutfits, {
Name =
"Outfit "
.. (#SavedOutfits + 1),
Data = GetCurrentOutfit()
})
SaveOutfits()
loadMore(true)
end)
for i, outfit in ipairs(SavedOutfits) do
local row = Instance.new("Frame")
row.Size =
UDim2.new(0, 260, 0, 75)
row.BackgroundColor3 =
Color3.fromRGB(45, 45, 45)
row.Parent = scroll
Instance.new("UICorner", row)
local label =
Instance.new("TextLabel")
label.Size =
UDim2.new(1, -10, 0, 28)
label.Position =
UDim2.new(0, 5, 0, 3)
label.BackgroundTransparency = 1
label.Text = outfit.Name
label.TextColor3 =
Color3.new(1, 1, 1)
label.Font =
Enum.Font.GothamBold
label.TextSize = 15
label.TextXAlignment =
Enum.TextXAlignment.Center
label.Parent = row
local equip =
Instance.new("TextButton")
equip.Size =
UDim2.new(.45, -5, 0, 30)
equip.Position =
UDim2.new(.03, 0, 0, 38)
equip.BackgroundColor3 =
Color3.fromRGB(0, 170, 255)
equip.Text = "Equip"
equip.TextColor3 =
Color3.new(1, 1, 1)
equip.Font =
Enum.Font.GothamBold
equip.TextSize = 14
equip.Parent = row
Instance.new("UICorner", equip)
local delete =
Instance.new("TextButton")
delete.Size =
UDim2.new(.45, -5, 0, 30)
delete.Position =
UDim2.new(.52, 0, 0, 38)
delete.BackgroundColor3 =
Color3.fromRGB(170, 60, 60)
delete.Text = "Delete"
delete.TextColor3 =
Color3.new(1, 1, 1)
delete.Font =
Enum.Font.GothamBold
delete.TextSize = 14
delete.Parent = row
Instance.new("UICorner", delete)
equip.MouseButton1Click:Connect(function()
LoadSavedOutfit(outfit.Data)
end)
delete.MouseButton1Click:Connect(function()
table.remove(SavedOutfits, i)
SaveOutfits()
loadMore(true)
end)
end
loading = false
return
end
if currentAssetType == "Settings" then
clearItems()
local container =
Instance.new("Frame")
container.Size =
UDim2.new(1, 0, 0, 50)
container.BackgroundTransparency = 1
container.Parent = scroll
local label =
Instance.new("TextLabel")
label.Size =
UDim2.new(0, 160, 0, 35)
label.Position =
UDim2.new(0, 10, 0, 5)
label.BackgroundTransparency = 1
label.Text = "Auto Char Load"
label.TextXAlignment =
Enum.TextXAlignment.Left
label.Font =
Enum.Font.GothamBold
label.TextSize = 18
label.TextColor3 =
Color3.new(1, 1, 1)
label.Parent = container
local toggle =
Instance.new("TextButton")
toggle.Size =
UDim2.new(0, 32, 0, 32)
toggle.Position =
UDim2.new(0, 180, 0, 7)
toggle.BackgroundColor3 =
Color3.fromRGB(45, 45, 45)
toggle.Text =
Settings.AutoLoad and "✓" or ""
toggle.TextColor3 =
Color3.fromRGB(0, 255, 0)
toggle.Font =
Enum.Font.GothamBold
toggle.TextSize = 22
toggle.Parent = container
Instance.new("UICorner", toggle)
toggle.MouseButton1Click:Connect(function()
Settings.AutoLoad =
not Settings.AutoLoad
toggle.Text =
Settings.AutoLoad
and "✓"
or ""
SaveSettings()
end)
loading = false
return
end
if currentAssetType == "Bundles" then
clearItems()
for _, folder in ipairs(
BundlesContainer:GetChildren()
) do
local button =
Instance.new("ImageButton")
button.Size =
UDim2.new(0, 100, 0, 120)
button.BackgroundColor3 =
Color3.fromRGB(45, 45, 45)
button.Parent = scroll
Instance.new("UICorner", button)
.CornerRadius =
UDim.new(0, 8)
local label =
Instance.new("TextLabel")
label.Size =
UDim2.new(1, 0, 1, 0)
label.BackgroundTransparency = 1
label.TextScaled = true
label.Text = folder.Name
label.TextColor3 =
Color3.new(1, 1, 1)
label.Parent = button
button.MouseButton1Click:Connect(function()
openBundle(folder)
end)
end
loading = false
return
end
local params =
CatalogSearchParams.new()
params.SearchKeyword =
currentQuery
params.AssetTypes =
{currentAssetType}
catalogPages =
AvatarEditorService:SearchCatalog(params)
else
if catalogPages then
pcall(function()
catalogPages:AdvanceToNextPageAsync()
end)
end
end
if not catalogPages then
loading = false
return
end
local items =
catalogPages:GetCurrentPage()
for _, item in ipairs(items) do
addItem(item)
end
scroll.CanvasSize =
UDim2.new(
0,
0,
0,
layout.AbsoluteContentSize.Y
)
loading = false
end
currentQuery = ""
loadMore(true)
updateWearing()
AutoSaveOutfit()
addCategoryButton(
"Shirts",
Enum.AvatarAssetType.Shirt
)
addCategoryButton(
"Pants",
Enum.AvatarAssetType.Pants
)
addCategoryButton(
"T-Shirts",
Enum.AvatarAssetType.TShirt
)
addCategoryButton(
"Hair",
Enum.AvatarAssetType.HairAccessory
)
addCategoryButton(
"Face",
Enum.AvatarAssetType.FaceAccessory
)
addCategoryButton(
"Neck",
Enum.AvatarAssetType.NeckAccessory
)
addCategoryButton(
"Shoulder",
Enum.AvatarAssetType.ShoulderAccessory
)
addCategoryButton(
"Front",
Enum.AvatarAssetType.FrontAccessory
)
addCategoryButton(
"Back",
Enum.AvatarAssetType.BackAccessory
)
addCategoryButton(
"Waist",
Enum.AvatarAssetType.WaistAccessory
)
addCategoryButton(
"Hat",
Enum.AvatarAssetType.Hat
)
addCategoryButton(
"Bundles",
"Bundles"
)
addCategoryButton(
"Body",
"Body"
)
addCategoryButton(
"Outfits",
"Outfits"
)
addCategoryButton(
"Settings",
"Settings"
)
scroll:GetPropertyChangedSignal(
"CanvasPosition"
):Connect(function()
if loading then
return
end
if scroll.CanvasPosition.Y >=
scroll.AbsoluteCanvasSize.Y
- scroll.AbsoluteWindowSize.Y
- 150 then
loadMore(false)
end
end)
local searchThread = 0
searchBar:GetPropertyChangedSignal(
"Text"
):Connect(function()
searchThread += 1
local id = searchThread
task.wait(0.4)
if id ~= searchThread then
return
end
currentQuery = searchBar.Text
loadMore(true)
end)
clearSearchBtn.MouseButton1Click:Connect(function()
searchBar.Text = ""
end)
-- ARRASTAR PAINEL
local dragging
local dragInput
local dragStart
local startPos
local function update(input)
local delta =
input.Position - dragStart
frame.Position =
UDim2.new(
startPos.X.Scale,
startPos.X.Offset + delta.X,
startPos.Y.Scale,
startPos.Y.Offset + delta.Y
)
end
titleBar.InputBegan:Connect(function(input)
if input.UserInputType ==
Enum.UserInputType.MouseButton1 then
dragging = true
dragStart = input.Position
startPos = frame.Position
input.Changed:Connect(function()
if input.UserInputState ==
Enum.UserInputState.End then
dragging = false
end
end)
end
end)
titleBar.InputChanged:Connect(function(input)
if input.UserInputType ==
Enum.UserInputType.MouseMovement then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput
and dragging then
update(input)
end
end)
-- BOTÃO FLUTUANTE QUANDO MINIMIZADO
local miniButton = Instance.new("TextButton")
miniButton.Size =
UDim2.new(0, 55, 0, 55)
miniButton.Position =
UDim2.new(0, 20, 1, -75)
miniButton.BackgroundColor3 =
Color3.fromRGB(30, 30, 30)
miniButton.Text = "LUP"
miniButton.TextColor3 =
Color3.fromRGB(255, 255, 255)
miniButton.Font =
Enum.Font.GothamBold
miniButton.TextSize = 17
miniButton.Visible = false
miniButton.Parent = gui
local miniCorner =
Instance.new("UICorner", miniButton)
miniCorner.CornerRadius =
UDim.new(1, 0)
miniButton.MouseEnter:Connect(function()
miniButton.BackgroundColor3 =
Color3.fromRGB(45, 45, 45)
end)
miniButton.MouseLeave:Connect(function()
miniButton.BackgroundColor3 =
Color3.fromRGB(30, 30, 30)
end)
local minimized = false
-- MINIMIZAR
minimizePanelBtn.MouseButton1Click:Connect(function()
minimized = true
frame.Visible = false
miniButton.Visible = true
end)
-- X
closeBtn.MouseButton1Click:Connect(function()
minimized = true
frame.Visible = false
miniButton.Visible = true
end)
-- ABRIR NOVAMENTE
miniButton.MouseButton1Click:Connect(function()
minimized = false
frame.Visible = true
miniButton.Visible = false
end)
-- ARRASTAR BOTÃO LUP
local draggingMin
local dragInputMin
local dragStartMin
local startPosMin
local function updateMin(input)
local delta =
input.Position - dragStartMin
miniButton.Position =
UDim2.new(
startPosMin.X.Scale,
startPosMin.X.Offset + delta.X,
startPosMin.Y.Scale,
startPosMin.Y.Offset + delta.Y
)
end
miniButton.InputBegan:Connect(function(input)
if input.UserInputType ==
Enum.UserInputType.MouseButton1 then
draggingMin = true
dragStartMin = input.Position
startPosMin = miniButton.Position
input.Changed:Connect(function()
if input.UserInputState ==
Enum.UserInputState.End then
draggingMin = false
end
end)
end
end)
miniButton.InputChanged:Connect(function(input)
if input.UserInputType ==
Enum.UserInputType.MouseMovement then
dragInputMin = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInputMin
and draggingMin then
updateMin(input)
end
end)
player.CharacterAdded:Connect(function(character)
character:WaitForChild("Humanoid")
task.wait(0.2)
local head =
character:FindFirstChild("Head")
if head then
local mesh =
head:FindFirstChildOfClass("SpecialMesh")
originalHeadMesh =
mesh and mesh:Clone() or nil
end
updateWearing()
if Settings.AutoLoad
and AutoSavedOutfit then
task.wait(1)
LoadSavedOutfit(
AutoSavedOutfit
)
end
end)