--- DANDY'S WORLD OC SYNC (V14 - MARKETPLACE UPDATE) --- local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))() local Window = Rayfield:CreateWindow({ Name = "Dandy's World OC Sync (V14)", LoadingTitle = "OC Loader - Marketplace Edition", LoadingSubtitle = "V14: Public Assets & Outfit Sync", ConfigurationSaving = { Enabled = false }, KeySystem = false }) local MainTab = Window:CreateTab("Apply OC", 4483362458) local MarketTab = Window:CreateTab("Marketplace", 4483362458) -- NEW TAB local AdjustTab = Window:CreateTab("Adjust Model", 4483362458) local SyncTab = Window:CreateTab("Sync with Friends", 4483362458) local lp = game.Players.LocalPlayer local CurrentOC = nil local TargetID = "" local ActiveSyncModels = {} local ForceAnimate = false -- CLEANUP/FIXER FUNCTION local function DeepFix(model) if not model then return end for _, part in pairs(model:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false task.delay(1, function() if part then part.CanCollide = true end end) local hasTexture = false if (part:IsA("MeshPart") and part.TextureID ~= "") or (part:FindFirstChildWhichIsA("SpecialMesh") and part:FindFirstChildWhichIsA("SpecialMesh").TextureID ~= "") or part:FindFirstChildWhichIsA("SurfaceAppearance") then hasTexture = true end if hasTexture then part.Color = Color3.new(1, 1, 1) end end if part:IsA("Decal") or part:IsA("Texture") then part.ZIndex = 25 end -- Force Animations if enabled if ForceAnimate and part:IsA("Humanoid") then part.RigType = Enum.HumanoidRigType.R15 end end end -- MAIN APPLY LOGIC local function ApplyLocalOC(id) if id == "" then return end local char = lp.Character or lp.CharacterAdded:Wait() -- Marketplace IDs can be Models or Packages local s, result = pcall(function() return game:GetObjects("rbxassetid://" .. id)[1] end) if s and result then local oldPos = char:GetPrimaryPartCFrame() if CurrentOC then CurrentOC:Destroy() end CurrentOC = result:Clone() CurrentOC.Name = "OC_" .. lp.Name CurrentOC.Parent = workspace DeepFix(CurrentOC) lp.Character = CurrentOC CurrentOC:SetPrimaryPartCFrame(oldPos) char:Destroy() lp:SetAttribute("CurrentOCID", id) local hum = CurrentOC:FindFirstChildWhichIsA("Humanoid") if hum then workspace.CurrentCamera.CameraSubject = hum end Rayfield:Notify({Title = "OC Applied", Content = "Loaded ID: "..id, Duration = 3}) else Rayfield:Notify({Title = "Error", Content = "Failed to load ID. Ensure it's a Public Model.", Duration = 5}) end end -- MARKETPLACE OUTFIT LOGIC (FOR USERS) local function ApplyUserOutfit(username) local success, userId = pcall(function() return game.Players:GetUserIdFromNameAsync(username) end) if success then local char = lp.Character or lp.CharacterAdded:Wait() local hum = char:FindFirstChildOfClass("Humanoid") if hum then local description = game.Players:GetHumanoidDescriptionFromUserId(userId) hum:ApplyDescription(description) Rayfield:Notify({Title = "Outfit Synced", Content = "Applied " .. username .. "'s Marketplace items.", Duration = 3}) end else Rayfield:Notify({Title = "Error", Content = "User not found.", Duration = 3}) end end -- MAIN TAB UI MainTab:CreateInput({ Name = "Model ID", PlaceholderText = "Paste Model ID...", Callback = function(Text) TargetID = Text:gsub("%D", "") end, }) MainTab:CreateButton({ Name = "Apply Custom Model ID", Callback = function() ApplyLocalOC(TargetID) end, }) MainTab:CreateToggle({ Name = "Enable Basic Animations", CurrentValue = false, Flag = "AnimToggle", Callback = function(Value) ForceAnimate = Value end, }) -- MARKETPLACE TAB UI MarketTab:CreateSection("Marketplace Outfits") MarketTab:CreateParagraph({Title = "Instructions", Content = "Type a username to take their full Marketplace look (Clothes/Hats/Hair). This works on your current character."}) MarketTab:CreateInput({ Name = "Username", PlaceholderText = "Search User...", Callback = function(Text) ApplyUserOutfit(Text) end, }) MarketTab:CreateSection("Popular Tags") MarketTab:CreateButton({ Name = "Reset to Default Marketplace Look", Callback = function() lp:LoadCharacter() end, }) -- SYNC SYSTEM (Retained from V13) local FriendName = "" SyncTab:CreateSection("The Handshake") SyncTab:CreateInput({ Name = "Friend's Username", PlaceholderText = "Case Sensitive...", Callback = function(T) FriendName = T end }) SyncTab:CreateButton({ Name = "Set Sync Partner", Callback = function() if FriendName == "" then return end lp:SetAttribute("SyncPartner", FriendName) Rayfield:Notify({Title = "Partner Set", Content = "Looking for " .. FriendName, Duration = 5}) end }) -- BACKGROUND SYNC HANDLER task.spawn(function() while task.wait(1) do local partnerName = lp:GetAttribute("SyncPartner") if partnerName then local partner = game.Players:FindFirstChild(partnerName) if partner and partner:GetAttribute("SyncPartner") == lp.Name then local partnerModelID = partner:GetAttribute("CurrentOCID") if partnerModelID and partnerModelID ~= "" then if not ActiveSyncModels[partner.Name] or ActiveSyncModels[partner.Name].ID ~= partnerModelID then if ActiveSyncModels[partner.Name] then ActiveSyncModels[partner.Name].Model:Destroy() end local s, r = pcall(function() return game:GetObjects("rbxassetid://" .. partnerModelID)[1] end) if s and r then local fOC = r:Clone() fOC.Parent = workspace DeepFix(fOC) ActiveSyncModels[partner.Name] = {Model = fOC, ID = partnerModelID} task.spawn(function() while ActiveSyncModels[partner.Name] and ActiveSyncModels[partner.Name].ID == partnerModelID do if partner.Character and partner.Character:FindFirstChild("HumanoidRootPart") then fOC:SetPrimaryPartCFrame(partner.Character.HumanoidRootPart.CFrame) for _, p in pairs(partner.Character:GetDescendants()) do if p:IsA("BasePart") or p:IsA("Decal") then p.Transparency = 1 end end end task.wait() end fOC:Destroy() end) end end end else if ActiveSyncModels[partnerName] then ActiveSyncModels[partnerName].Model:Destroy() ActiveSyncModels[partnerName] = nil end end end end end) -- ADJUST TAB AdjustTab:CreateSection("Scaling") AdjustTab:CreateSlider({ Name = "Model Scale", Range = {0.1, 5}, Increment = 0.1, Suffix = "x Size", CurrentValue = 1, Callback = function(Value) if CurrentOC and CurrentOC:FindFirstChildOfClass("Humanoid") then local hum = CurrentOC:FindFirstChildOfClass("Humanoid") local description = hum:FindFirstChildOfClass("HumanoidDescription") or Instance.new("HumanoidDescription", hum) description.HeightScale = Value description.WidthScale = Value end end, }) SyncTab:CreateButton({ Name = "Clear All Syncs", Callback = function() lp:SetAttribute("SyncPartner", nil) for _, data in pairs(ActiveSyncModels) do data.Model:Destroy() end ActiveSyncModels = {} Rayfield:Notify({Title = "Cleaned", Content = "All syncs cleared.", Duration = 3}) end })