-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] local players = game:GetService("Players") local storage = game:GetService("ReplicatedStorage") local me = players.LocalPlayer local Menu = me:WaitForChild("PlayerGui"):WaitForChild("ViewPlayer").Main.Menu.ScrollingFrame local viewbtn = Menu:WaitForChild("ViewOutfit") local wearbtn = Menu:WaitForChild("WearOutfit") local syncbtn = Menu:WaitForChild("SyncEmote") local getSignalConns = getconnections or get_signal_cons or getsignals or function() return {} end local getFnUpvalues = getupvalues or (debug and debug.getupvalues) or function() return nil end local function findchannel(channelname) local direct = storage:FindFirstChild(channelname) if direct then return direct end for _, node in ipairs(storage:GetDescendants()) do if node.Name == channelname then return node end end return nil end local function warnUser(message) local popup = findchannel("ClientPopupMessage") if popup then pcall(function() popup:Fire(message) end) else warn("Outfit Tools " .. message) end end local catalogremote = findchannel("CatalogGuiRemote") local inspectoutfit = findchannel("ClientInspectHumanoidDescription") for _, tag in ipairs({"StealOutfit", "ForceViewOutfit"}) do local old = Menu:FindFirstChild(tag) if old then old:Destroy() end end local function findhook() for _, conn in ipairs(getSignalConns(wearbtn.Activated)) do local fn = conn and conn.Function if type(fn) == "function" then local ok, ups = pcall(getFnUpvalues, fn) if ok and type(ups) == "table" then local target = ups[2] if typeof(target) == "Instance" and target:IsA("Player") then return conn end end end end return nil end local function grab() local conn = findhook() if not conn then warnUser("Open a player's profile before using an outfit tool.") return nil end local ok, ups = pcall(getFnUpvalues, conn.Function) if not ok or type(ups) ~= "table" then warnUser("Could not read the profile.") return nil end local target = ups[2] if typeof(target) ~= "Instance" or not target:IsA("Player") then warnUser("No player is selected.") return nil end local desc = ups[4] local rig = ups[5] local char = target.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum then local gotDesc, liveDesc = pcall(function() return hum:GetAppliedDescription() end) if gotDesc and liveDesc and liveDesc:IsA("HumanoidDescription") then desc = liveDesc rig = hum.RigType end end if typeof(desc) ~= "Instance" or not desc:IsA("HumanoidDescription") then warnUser("The selected player's avatar has not loaded yet.") return nil end if rig ~= Enum.HumanoidRigType.R6 and rig ~= Enum.HumanoidRigType.R15 then warnUser("The selected player's rig type is unavailable.") return nil end return target, desc, rig, ups[3] end local function createButton(template, name, text, layoutOrder, callback) local button = template:Clone() button.Name = name button.Text = text button.LayoutOrder = layoutOrder button.Parent = Menu button.Activated:Connect(callback) end createButton(viewbtn, "ForceViewOutfit", "Force View Outfit", -1, function() local target, desc, rig = grab() if not target then return end if not inspectoutfit then warnUser("Could not locate the outfit viewer channel.") return end local ok, err = pcall(function() inspectoutfit:Fire({ HumanoidDescription = desc, RigType = rig, Title = "@" .. target.Name .. "'s Current Outfit", }) end) if not ok then warnUser("Could not open the outfit viewer: " .. tostring(err)) end end) createButton(wearbtn, "StealOutfit", "Steal Outfit", -2, function() local target, desc, rig, mod = grab() if not target then return end if type(mod) ~= "table" or type(mod.ToDictionary) ~= "function" then warnUser("outfit serializer is unavailable.") return end local encodedOk, properties = pcall(function() return mod:ToDictionary(desc) end) if not encodedOk then warnUser("Could not encode the selected outfit: " .. tostring(properties)) return end if not catalogremote then warnUser("Could not locate the outfit remote.") return end local applied, err = pcall(function() if catalogremote:IsA("RemoteFunction") then return catalogremote:InvokeServer({ Action = "CreateAndWearHumanoidDescription", Properties = properties, RigType = rig, }) else return catalogremote:FireServer({ Action = "CreateAndWearHumanoidDescription", Properties = properties, RigType = rig, }) end end) if not applied then warnUser("did not apply the outfit: " .. tostring(err)) end end) syncbtn.Visible = true syncbtn:GetPropertyChangedSignal("Visible"):Connect(function() syncbtn.Visible = true end)