--[================================================================]-- -- FIXED ROBLOX CUSTOMIZATION & ENVIRONMENT HUB (RAYFIELD) -- --[================================================================]-- local Players = game:GetService("Players") local Lighting = game:GetService("Lighting") local Workspace = game:GetService("Workspace") local RunService = game:GetService("RunService") local player = Players.LocalPlayer -- Load Rayfield UI Library safely via loadstring local success, Rayfield = pcall(function() return loadstring(game:HttpGet('https://sirius.menu/rayfield'))() end) if not success or not Rayfield then warn("Failed to load Rayfield UI Library. Check your internet connection or executor support.") return end -- Create Window local Window = Rayfield:CreateWindow({ Name = "🎨 World Customization Hub", LoadingTitle = "Loading Customization Hub...", LoadingSubtitle = "by AI Collaborator", ConfigurationSaving = { Enabled = false, FolderName = "RayfieldHub", FileName = "CustomHub" }, Discord = { Enabled = false, Invite = "noinvite", RememberJoins = true }, KeySystem = false, }) -- ========================================================== -- TABS (Using 0 for icons to prevent asset load errors) -- ========================================================== local DecalTab = Window:CreateTab("Decals", 0) local ParticleTab = Window:CreateTab("Particles", 0) local ThemeTab = Window:CreateTab("Color Themes", 0) -- ========================================================== -- 1. CUSTOM DECAL MAP TAB -- ========================================================== DecalTab:CreateSection("Marketplace Decal Changer") local inputDecalId = "" DecalTab:CreateInput({ Name = "Decal Asset ID", PlaceholderText = "e.g. 6023426915", RemoveTextAfterFocusLost = false, Callback = function(Text) inputDecalId = Text end, }) DecalTab:CreateButton({ Name = "Apply Decals to All Parts", Callback = function() local assetId = inputDecalId:gsub("%D", "") -- Extract numbers only if assetId == "" then Rayfield:Notify({ Title = "Error", Content = "Please enter a valid Asset ID!", Duration = 3, }) return end local fullAssetString = "rbxassetid://" .. assetId local count = 0 for _, obj in ipairs(Workspace:GetDescendants()) do if obj:IsA("BasePart") then -- Safe check to avoid restricted or locked parts local successApply, err = pcall(function() local decal = obj:FindFirstChildOfClass("Decal") if not decal then decal = Instance.new("Decal") decal.Face = Enum.NormalId.Front decal.Parent = obj end decal.Texture = fullAssetString end) if successApply then count = count + 1 end end end Rayfield:Notify({ Title = "Success", Content = "Applied decals to " .. count .. " parts!", Duration = 3, }) end, }) -- ========================================================== -- 2. CUSTOM PARTICLES TAB -- ========================================================== ParticleTab:CreateSection("Environment Particles") local particlePart = nil local particlesActive = false ParticleTab:CreateToggle({ Name = "Toggle Custom Particles", CurrentValue = false, Flag = "ParticleToggle", Callback = function(Value) particlesActive = Value if particlesActive then particlePart = Instance.new("Part") particlePart.Name = "HubParticleEmitterAnchor" particlePart.Size = Vector3.new(1, 1, 1) particlePart.Transparency = 1 particlePart.Anchored = true particlePart.CanCollide = false if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then particlePart.Position = player.Character.HumanoidRootPart.Position + Vector3.new(0, 15, 0) else particlePart.Position = Vector3.new(0, 20, 0) end particlePart.Parent = Workspace local emitter = Instance.new("ParticleEmitter") emitter.Name = "HubParticles" emitter.Rate = 50 emitter.Speed = NumberRange.new(5, 10) emitter.Size = NumberSequence.new({NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(1, 0)}) emitter.Transparency = NumberSequence.new({NumberSequenceKeypoint.new(0, 0), NumberSequenceKeypoint.new(1, 1)}) emitter.Lifetime = NumberRange.new(4, 6) emitter.Texture = "rbxassetid://1084260273" emitter.Parent = particlePart else if particlePart then particlePart:Destroy() particlePart = nil end end end, }) -- Keep particle anchor locked above character safely RunService.RenderStepped:Connect(function() if particlesActive and particlePart and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then particlePart.Position = player.Character.HumanoidRootPart.Position + Vector3.new(0, 20, 0) end end) -- ========================================================== -- 3. COLOR MAP (THEMES) TAB -- ========================================================== ThemeTab:CreateSection("Environment Color Themes") local rainbowActive = false ThemeTab:CreateButton({ Name = "🟢 Green Theme", Callback = function() rainbowActive = false Lighting.OutdoorAmbient = Color3.fromRGB(50, 120, 50) Lighting.ColorShift_Top = Color3.fromRGB(100, 255, 100) end, }) ThemeTab:CreateButton({ Name = "🟡 Yellow Theme", Callback = function() rainbowActive = false Lighting.OutdoorAmbient = Color3.fromRGB(120, 120, 50) Lighting.ColorShift_Top = Color3.fromRGB(255, 255, 100) end, }) ThemeTab:CreateButton({ Name = "🔴 Red Theme", Callback = function() rainbowActive = false Lighting.OutdoorAmbient = Color3.fromRGB(120, 50, 50) Lighting.ColorShift_Top = Color3.fromRGB(255, 100, 100) end, }) ThemeTab:CreateToggle({ Name = "🌈 Rainbow Cycle Theme", CurrentValue = false, Flag = "RainbowToggle", Callback = function(Value) rainbowActive = Value end, }) ThemeTab:CreateButton({ Name = "Reset Environment Lighting", Callback = function() rainbowActive = false Lighting.OutdoorAmbient = Color3.fromRGB(128, 128, 128) Lighting.ColorShift_Top = Color3.fromRGB(0, 0, 0) end, }) -- Rainbow loop runner task.spawn(function() while true do if rainbowActive then local hue = (tick() % 10) / 10 local rainbowColor = Color3.fromHSV(hue, 0.8, 1) Lighting.ColorShift_Top = rainbowColor Lighting.OutdoorAmbient = Color3.fromHSV(hue, 0.5, 0.5) end task.wait(0.1) end end)