Map game decal changer hub
Key RequiredUniversal

Map game decal changer hub

Universal ScriptSoggyCatScriptSoggyCatScript 52 views 125 executesUpdated Jul 24, 2026
Unrated
00
Lua Script•222 lines (7015 chars)
--[================================================================]--
--     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)

Features & Information

Change the game decals to an id that you like (requires and I'd) Here is an example id:6319951708

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts