local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local workspace = game:GetService("Workspace") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local PALETTES = { { id="Blue", label="🔵 NEON BLUE", accent=Color3.fromRGB(0,200,255), colors={Color3.fromRGB(0,200,255),Color3.fromRGB(0,150,255),Color3.fromRGB(50,220,255)}, beam={Color3.fromRGB(0,180,255),Color3.fromRGB(50,230,255),Color3.fromRGB(0,100,200)} }, { id="Green", label="🟢 NEON GREEN", accent=Color3.fromRGB(0,255,70), colors={Color3.fromRGB(0,255,70),Color3.fromRGB(57,255,20),Color3.fromRGB(0,255,140)}, beam={Color3.fromRGB(0,255,70),Color3.fromRGB(0,220,180),Color3.fromRGB(0,255,200)} }, { id="Yellow", label="🟡 NEON YELLOW", accent=Color3.fromRGB(255,240,0), colors={Color3.fromRGB(255,255,0),Color3.fromRGB(255,230,30),Color3.fromRGB(240,255,50)}, beam={Color3.fromRGB(255,255,0),Color3.fromRGB(255,220,50),Color3.fromRGB(200,180,0)} }, { id="Red", label="🔴 NEON RED", accent=Color3.fromRGB(255,30,30), colors={Color3.fromRGB(255,20,20),Color3.fromRGB(255,0,80),Color3.fromRGB(255,60,30)}, beam={Color3.fromRGB(255,0,50),Color3.fromRGB(255,80,30),Color3.fromRGB(200,0,0)} }, { id="Purple", label="🟣 NEON PURPLE", accent=Color3.fromRGB(180,0,255), colors={Color3.fromRGB(180,0,255),Color3.fromRGB(200,50,255),Color3.fromRGB(255,0,200)}, beam={Color3.fromRGB(180,0,255),Color3.fromRGB(200,50,255),Color3.fromRGB(100,0,180)} }, { id="White", label="⚪ NEON WHITE", accent=Color3.fromRGB(220,240,255), colors={Color3.fromRGB(255,255,255),Color3.fromRGB(220,240,255),Color3.fromRGB(200,220,255)}, beam={Color3.fromRGB(255,255,255),Color3.fromRGB(220,240,255),Color3.fromRGB(180,210,255)} }, } local VFX_TYPES = { ParticleEmitter=true, Beam=true, Trail=true, Fire=true, Smoke=true, Sparkles=true, SelectionBox=true, Decal=true, Texture=true, PointLight=true, SpotLight=true, Highlight=true, ImageLabel=true, ImageButton=true, Explosion=true, } local COLOR_PROPS = {"Color","Color3","ImageColor3","FillColor"} local BLACKOUT = 0.10 local currentPalette = PALETTES[1] local nextPaletteId = nil local guiColorButtons = {} local MIN_SPAWN_RADIUS = 15 -- mínimo permitido no slider/presets local MAX_SPAWN_RADIUS = 100 -- máximo permitido no slider/presets local SPAWN_RADIUS = 20 -- ativo agora local nextSpawnRadius = 20 -- aplicado no próximo respawn local trackedVFX = {} local trackedList = {} local function getPartPosition(inst) local node = inst.Parent for _ = 1, 8 do if not node or node == workspace then break end if node:IsA("BasePart") then return node.Position end node = node.Parent end if inst:IsA("BasePart") then return inst.Position end return nil end local function isMyVFX(inst) local char = LocalPlayer.Character if not char then return false end local anc = inst.Parent while anc do if anc == char then return true end anc = anc.Parent end for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer and p.Character then local a = inst.Parent while a do if a == p.Character then return false end a = a.Parent end end end local hrp = char:FindFirstChild("HumanoidRootPart") if not hrp then return false end local pos = getPartPosition(inst) if pos then return (pos - hrp.Position).Magnitude <= SPAWN_RADIUS else return true end end local function rndColor() local c = currentPalette.colors return c[math.random(1, #c)] end local function applyGlitch(inst) local color = rndColor() local blackout = math.random() < BLACKOUT local cn = inst.ClassName pcall(function() if cn == "ParticleEmitter" then inst.Color = ColorSequence.new(blackout and Color3.new(0,0,0) or color) inst.Brightness = blackout and 0 or math.random(6, 18) elseif cn == "Beam" then local b = currentPalette.beam inst.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, b[1]), ColorSequenceKeypoint.new(0.5, b[2]), ColorSequenceKeypoint.new(1, b[3]), }) inst.FaceCamera = true elseif cn == "Trail" then inst.Color = ColorSequence.new(blackout and Color3.new(0,0,0) or color) elseif cn == "Fire" then inst.Color = blackout and Color3.new(0,0,0) or color inst.SecondaryColor = color:Lerp(Color3.new(0,0,0), 0.5) inst.Heat = math.random(15, 28) elseif cn == "Smoke" then inst.Color = blackout and Color3.new(0,0,0) or color inst.Opacity = blackout and 0 or math.random(60, 100) / 100 elseif cn == "Sparkles" then inst.SparkleColor = blackout and Color3.new(0,0,0) or color elseif cn == "SelectionBox" then inst.Color3 = blackout and Color3.new(0,0,0) or color inst.LineThickness = math.random(2, 5) / 10 elseif cn == "Decal" or cn == "Texture" then inst.Color3 = blackout and Color3.new(0,0,0) or color elseif cn == "PointLight" or cn == "SpotLight" then inst.Color = blackout and Color3.new(0,0,0) or color inst.Brightness = blackout and 0 or math.random(8, 20) / 10 elseif cn == "Highlight" then inst.FillColor = blackout and Color3.new(0,0,0) or color inst.OutlineColor = blackout and Color3.new(0,0,0) or color elseif cn == "ImageLabel" or cn == "ImageButton" then inst.ImageColor3 = blackout and Color3.new(0,0,0) or color else local applied = false for _, prop in ipairs(COLOR_PROPS) do local ok = pcall(function() inst[prop] = blackout and Color3.new(0,0,0) or color end) if ok then applied = true end end if not applied then pcall(function() inst.Color = ColorSequence.new(blackout and Color3.new(0,0,0) or color) end) end end end) end local function randInterval() return 0.15 + math.random() * 0.25 end RunService.Heartbeat:Connect(function() local now = tick() local i = 1 while i <= #trackedList do local inst = trackedList[i] if not inst or not inst.Parent then trackedVFX[inst] = nil table.remove(trackedList, i) else if now >= trackedVFX[inst] then applyGlitch(inst) trackedVFX[inst] = now + randInterval() end i = i + 1 end end end) local function registerVFX(inst) if not inst or not inst.Parent then return end if not VFX_TYPES[inst.ClassName] then return end if trackedVFX[inst] then return end if not isMyVFX(inst) then return end trackedVFX[inst] = tick() table.insert(trackedList, inst) end workspace.DescendantAdded:Connect(function(inst) if VFX_TYPES[inst.ClassName] then registerVFX(inst) end end) local function buildGUI() local old = PlayerGui:FindFirstChild("VFXColorGUI") local savedPos = old and old:FindFirstChild("Main") and old.Main.Position or nil if old then old:Destroy() end guiColorButtons = {} local sg = Instance.new("ScreenGui") sg.Name="VFXColorGUI"; sg.ResetOnSpawn=false; sg.DisplayOrder=10; sg.Parent=PlayerGui local main = Instance.new("Frame", sg) main.Name="Main" main.Size=UDim2.new(0,250,0,320) main.Position = savedPos or UDim2.new(0,20,0.5,-160) main.BackgroundColor3=Color3.fromRGB(10,10,18) main.BackgroundTransparency=0.1; main.BorderSizePixel=0; main.Active=true Instance.new("UICorner",main).CornerRadius=UDim.new(0,12) local stroke=Instance.new("UIStroke",main) stroke.Color=currentPalette.accent; stroke.Thickness=2 local header=Instance.new("Frame",main) header.Name="Header"; header.Size=UDim2.new(1,0,0,36) header.BackgroundColor3=Color3.fromRGB(20,20,35); header.BorderSizePixel=0 Instance.new("UICorner",header).CornerRadius=UDim.new(0,12) local tl=Instance.new("TextLabel",header) tl.Text="✦ VFX COLORIZER"; tl.Font=Enum.Font.GothamBold; tl.TextSize=13 tl.TextColor3=Color3.fromRGB(200,200,220); tl.BackgroundTransparency=1 tl.Size=UDim2.new(1,-10,1,0); tl.Position=UDim2.new(0,10,0,0) tl.TextXAlignment=Enum.TextXAlignment.Left local tabBar=Instance.new("Frame",main) tabBar.Size=UDim2.new(1,0,0,28); tabBar.Position=UDim2.new(0,0,0,36) tabBar.BackgroundColor3=Color3.fromRGB(15,15,25); tabBar.BorderSizePixel=0 local function makeTab(label, x, active) local btn=Instance.new("TextButton",tabBar) btn.Size=UDim2.new(0.5,0,1,0); btn.Position=UDim2.new(x,0,0,0) btn.Text=label; btn.Font=Enum.Font.GothamBold; btn.TextSize=11 btn.BackgroundColor3= active and Color3.fromRGB(30,30,50) or Color3.fromRGB(15,15,25) btn.TextColor3= active and Color3.fromRGB(220,220,255) or Color3.fromRGB(120,120,150) btn.BorderSizePixel=0 return btn end local tabCores = makeTab("🎨 Colors", 0, true) local tabConfig = makeTab("⚙ Settings", 0.5, false) local panelCores=Instance.new("Frame",main) panelCores.Size=UDim2.new(1,0,1,-64); panelCores.Position=UDim2.new(0,0,0,64) panelCores.BackgroundTransparency=1; panelCores.BorderSizePixel=0 local cl=Instance.new("TextLabel",panelCores) cl.Name="CurrentLabel"; cl.Text="ACTIVE: "..currentPalette.label cl.Font=Enum.Font.GothamBold; cl.TextSize=12; cl.TextColor3=currentPalette.accent cl.BackgroundTransparency=1; cl.Size=UDim2.new(1,-20,0,22) cl.Position=UDim2.new(0,10,0,6); cl.TextXAlignment=Enum.TextXAlignment.Left local sl=Instance.new("TextLabel",panelCores) sl.Name="SubLabel"; sl.Text="Pick the color for next respawn:" sl.Font=Enum.Font.Gotham; sl.TextSize=10; sl.TextColor3=Color3.fromRGB(150,150,170) sl.BackgroundTransparency=1; sl.Size=UDim2.new(1,-20,0,16) sl.Position=UDim2.new(0,10,0,28); sl.TextXAlignment=Enum.TextXAlignment.Left local bW,bH,pX,pY=108,36,8,5 for i,pal in ipairs(PALETTES) do local col=(i-1)%2; local row=math.floor((i-1)/2) local btn=Instance.new("TextButton",panelCores) btn.Text=pal.label; btn.Font=Enum.Font.GothamBold; btn.TextSize=10 btn.TextColor3=pal.accent; btn.BackgroundColor3=pal.accent btn.BackgroundTransparency=(pal.id==currentPalette.id) and 0.2 or 0.55 btn.BorderSizePixel=(pal.id==currentPalette.id) and 3 or 0 btn.BorderColor3=Color3.fromRGB(255,255,255) btn.Size=UDim2.new(0,bW,0,bH) btn.Position=UDim2.new(0,pX+col*(bW+pX),0,48+row*(bH+pY)) Instance.new("UICorner",btn).CornerRadius=UDim.new(0,8) guiColorButtons[pal.id]=btn btn.MouseButton1Click:Connect(function() nextPaletteId=pal.id for id,b in pairs(guiColorButtons) do b.BackgroundTransparency=(id==nextPaletteId) and 0.2 or 0.55 b.BorderSizePixel=(id==nextPaletteId) and 3 or 0 end stroke.Color=pal.accent sl.Text="✔ "..pal.label.." on next spawn!" sl.TextColor3=pal.accent end) end local panelConfig=Instance.new("Frame",main) panelConfig.Size=UDim2.new(1,0,1,-64); panelConfig.Position=UDim2.new(0,0,0,64) panelConfig.BackgroundTransparency=1; panelConfig.BorderSizePixel=0 panelConfig.Visible=false local cfgTitle=Instance.new("TextLabel",panelConfig) cfgTitle.Text="VFX Detection Radius" cfgTitle.Font=Enum.Font.GothamBold; cfgTitle.TextSize=12 cfgTitle.TextColor3=Color3.fromRGB(200,200,220); cfgTitle.BackgroundTransparency=1 cfgTitle.Size=UDim2.new(1,-20,0,20); cfgTitle.Position=UDim2.new(0,10,0,10) cfgTitle.TextXAlignment=Enum.TextXAlignment.Left local cfgSub=Instance.new("TextLabel",panelConfig) cfgSub.Text="VFX spawning within this radius\nare considered yours. (studs)" cfgSub.Font=Enum.Font.Gotham; cfgSub.TextSize=10 cfgSub.TextColor3=Color3.fromRGB(140,140,160); cfgSub.BackgroundTransparency=1 cfgSub.Size=UDim2.new(1,-20,0,36); cfgSub.Position=UDim2.new(0,10,0,32) cfgSub.TextXAlignment=Enum.TextXAlignment.Left; cfgSub.TextWrapped=true local cfgVal=Instance.new("TextLabel",panelConfig) cfgVal.Name="RadiusLabel" cfgVal.Text=tostring(nextSpawnRadius).." studs" cfgVal.Font=Enum.Font.GothamBold; cfgVal.TextSize=22 cfgVal.TextColor3=currentPalette.accent; cfgVal.BackgroundTransparency=1 cfgVal.Size=UDim2.new(1,0,0,32); cfgVal.Position=UDim2.new(0,0,0,74) cfgVal.TextXAlignment=Enum.TextXAlignment.Center local sliderBg=Instance.new("Frame",panelConfig) sliderBg.Size=UDim2.new(1,-20,0,10); sliderBg.Position=UDim2.new(0,10,0,116) sliderBg.BackgroundColor3=Color3.fromRGB(40,40,60); sliderBg.BorderSizePixel=0 Instance.new("UICorner",sliderBg).CornerRadius=UDim.new(1,0) local function radiusToAlpha(v) return (v - MIN_SPAWN_RADIUS) / (MAX_SPAWN_RADIUS - MIN_SPAWN_RADIUS) end local function alphaToRadius(t) return math.floor(MIN_SPAWN_RADIUS + t * (MAX_SPAWN_RADIUS - MIN_SPAWN_RADIUS) + 0.5) end local sliderFill=Instance.new("Frame",sliderBg) sliderFill.Size=UDim2.new(radiusToAlpha(nextSpawnRadius),0,1,0) sliderFill.BackgroundColor3=currentPalette.accent; sliderFill.BorderSizePixel=0 Instance.new("UICorner",sliderFill).CornerRadius=UDim.new(1,0) local sliderKnob=Instance.new("TextButton",sliderBg) sliderKnob.Size=UDim2.new(0,18,0,18) sliderKnob.Position=UDim2.new(radiusToAlpha(nextSpawnRadius),-9,-0.4,0) sliderKnob.BackgroundColor3=Color3.fromRGB(255,255,255) sliderKnob.Text=""; sliderKnob.BorderSizePixel=0 Instance.new("UICorner",sliderKnob).CornerRadius=UDim.new(1,0) local lblMin=Instance.new("TextLabel",panelConfig) lblMin.Text=tostring(MIN_SPAWN_RADIUS); lblMin.Font=Enum.Font.Gotham; lblMin.TextSize=10 lblMin.TextColor3=Color3.fromRGB(120,120,140); lblMin.BackgroundTransparency=1 lblMin.Size=UDim2.new(0,30,0,14); lblMin.Position=UDim2.new(0,10,0,130) local lblMax=Instance.new("TextLabel",panelConfig) lblMax.Text=tostring(MAX_SPAWN_RADIUS); lblMax.Font=Enum.Font.Gotham; lblMax.TextSize=10 lblMax.TextColor3=Color3.fromRGB(120,120,140); lblMax.BackgroundTransparency=1 lblMax.Size=UDim2.new(0,30,0,14); lblMax.Position=UDim2.new(1,-40,0,130) lblMax.TextXAlignment=Enum.TextXAlignment.Right local presets = {{label="15",val=15},{label="20",val=20},{label="35",val=35},{label="50",val=50},{label="100",val=100}} for i,p in ipairs(presets) do local pb=Instance.new("TextButton",panelConfig) pb.Text=p.label; pb.Font=Enum.Font.GothamBold; pb.TextSize=11 pb.TextColor3=Color3.fromRGB(200,200,220) pb.BackgroundColor3=Color3.fromRGB(30,30,50); pb.BorderSizePixel=0 pb.Size=UDim2.new(0,38,0,26) pb.Position=UDim2.new(0, 10+(i-1)*46, 0, 152) Instance.new("UICorner",pb).CornerRadius=UDim.new(0,6) pb.MouseButton1Click:Connect(function() nextSpawnRadius=p.val cfgVal.Text=tostring(nextSpawnRadius).." studs" local t=radiusToAlpha(nextSpawnRadius) sliderFill.Size=UDim2.new(t,0,1,0) sliderKnob.Position=UDim2.new(t,-9,-0.4,0) end) end local cfgNote=Instance.new("TextLabel",panelConfig) cfgNote.Text="⚠ Applies on next respawn" cfgNote.Font=Enum.Font.Gotham; cfgNote.TextSize=10 cfgNote.TextColor3=Color3.fromRGB(200,160,60); cfgNote.BackgroundTransparency=1 cfgNote.Size=UDim2.new(1,-20,0,16); cfgNote.Position=UDim2.new(0,10,0,186) cfgNote.TextXAlignment=Enum.TextXAlignment.Left local draggingSlider=false local function updateSlider(absX) local bgAbs=sliderBg.AbsolutePosition local bgW=sliderBg.AbsoluteSize.X local t=math.clamp((absX-bgAbs.X)/bgW,0,1) nextSpawnRadius=alphaToRadius(t) cfgVal.Text=tostring(nextSpawnRadius).." studs" sliderFill.Size=UDim2.new(t,0,1,0) sliderKnob.Position=UDim2.new(t,-9,-0.4,0) end sliderBg.InputBegan:Connect(function(inp) if inp.UserInputType==Enum.UserInputType.MouseButton1 then draggingSlider=true; updateSlider(inp.Position.X) end end) sliderKnob.InputBegan:Connect(function(inp) if inp.UserInputType==Enum.UserInputType.MouseButton1 then draggingSlider=true end end) UserInputService.InputChanged:Connect(function(inp) if draggingSlider and inp.UserInputType==Enum.UserInputType.MouseMovement then updateSlider(inp.Position.X) end end) UserInputService.InputEnded:Connect(function(inp) if inp.UserInputType==Enum.UserInputType.MouseButton1 then draggingSlider=false end end) tabCores.MouseButton1Click:Connect(function() panelCores.Visible=true; panelConfig.Visible=false tabCores.BackgroundColor3=Color3.fromRGB(30,30,50) tabCores.TextColor3=Color3.fromRGB(220,220,255) tabConfig.BackgroundColor3=Color3.fromRGB(15,15,25) tabConfig.TextColor3=Color3.fromRGB(120,120,150) end) tabConfig.MouseButton1Click:Connect(function() panelCores.Visible=false; panelConfig.Visible=true tabConfig.BackgroundColor3=Color3.fromRGB(30,30,50) tabConfig.TextColor3=Color3.fromRGB(220,220,255) tabCores.BackgroundColor3=Color3.fromRGB(15,15,25) tabCores.TextColor3=Color3.fromRGB(120,120,150) end) local dragging,dragStart,startPos=false,nil,nil header.InputBegan:Connect(function(inp) if inp.UserInputType==Enum.UserInputType.MouseButton1 or inp.UserInputType==Enum.UserInputType.Touch then dragging=true; dragStart=inp.Position; startPos=main.Position end end) UserInputService.InputChanged:Connect(function(inp) if not dragging then return end if inp.UserInputType==Enum.UserInputType.MouseMovement or inp.UserInputType==Enum.UserInputType.Touch then local d=inp.Position-dragStart main.Position=UDim2.new(startPos.X.Scale,startPos.X.Offset+d.X, startPos.Y.Scale,startPos.Y.Offset+d.Y) end end) UserInputService.InputEnded:Connect(function(inp) if inp.UserInputType==Enum.UserInputType.MouseButton1 or inp.UserInputType==Enum.UserInputType.Touch then if not draggingSlider then dragging=false end end end) end local lastIdx=0 local function pickPalette() if nextPaletteId then for _,p in ipairs(PALETTES) do if p.id==nextPaletteId then currentPalette=p; break end end nextPaletteId=nil else local idx; repeat idx=math.random(1,#PALETTES) until idx~=lastIdx lastIdx=idx; currentPalette=PALETTES[idx] end SPAWN_RADIUS=math.clamp(nextSpawnRadius, MIN_SPAWN_RADIUS, MAX_SPAWN_RADIUS) end local function onCharacterAdded(character) trackedVFX={}; trackedList={} pickPalette() buildGUI() task.wait(0.3) for _,d in ipairs(character:GetDescendants()) do registerVFX(d) end character.DescendantAdded:Connect(function(inst) if VFX_TYPES[inst.ClassName] then registerVFX(inst) end end) end LocalPlayer.CharacterAdded:Connect(onCharacterAdded) if LocalPlayer.Character then onCharacterAdded(LocalPlayer.Character) end