
KeylessUniversal

--[================================================================]--
-- 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)No comments yet for this script.



