-- m1gxx c00lify v3 - versão "visual multiplayer" (somente local) -- Tudo é local: cria guis/partículas que seguem os outros jogadores, sem alterar o servidor. local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Lighting = game:GetService("Lighting") local SoundService = game:GetService("SoundService") local localPlayer = Players.LocalPlayer local playerGui = localPlayer:WaitForChild("PlayerGui") -- IDs local SKY_ID = 158118263 local DECAL_ID = 158118263 local PARTICLE_ID = 158118263 local MUSIC_ID = 1839246711 local function aid(id) return "rbxassetid://" .. tostring(id) end -- Container para visuais locais (no workspace) local VIS_ROOT = Instance.new("Folder") VIS_ROOT.Name = "m1gxx_v3_visroot" VIS_ROOT.Parent = workspace -- Container para guis locais local GUI_ROOT = Instance.new("Folder") GUI_ROOT.Name = "m1gxx_v3_guiroot" GUI_ROOT.Parent = playerGui -- ===== GUI principal (m1gxx c00lify v3) ===== local screenGui = Instance.new("ScreenGui") screenGui.Name = "m1gxx_c00lify_v3" screenGui.ResetOnSpawn = false screenGui.Parent = playerGui local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 320, 0, 200) frame.Position = UDim2.new(0.35, 0, 0.3, 0) frame.BackgroundColor3 = Color3.fromRGB(0,0,0) frame.BackgroundTransparency = 0.15 frame.BorderSizePixel = 0 frame.Active = true frame.Draggable = true frame.Parent = screenGui local uiStroke = Instance.new("UIStroke", frame) uiStroke.Thickness = 3 local title = Instance.new("TextLabel", frame) title.Size = UDim2.new(1,0,0,40) title.Position = UDim2.new(0,0,0,0) title.BackgroundTransparency = 1 title.Font = Enum.Font.GothamBold title.TextSize = 20 title.TextScaled = true title.Text = "🌈 m1gxx c00lify v3 🌈" title.TextColor3 = Color3.fromRGB(255,255,255) local button = Instance.new("TextButton", frame) button.Size = UDim2.new(0, 200, 0, 50) button.Position = UDim2.new(0.125, 0, 0.55, 0) button.Text = "💫 c00lify 💫" button.Font = Enum.Font.GothamBold button.TextScaled = true button.Parent = frame local status = Instance.new("TextLabel", frame) status.Size = UDim2.new(1,0,0,20) status.Position = UDim2.new(0,0,1,-22) status.BackgroundTransparency = 1 status.Text = "Desligado" status.Font = Enum.Font.Gotham status.TextColor3 = Color3.fromRGB(200,200,200) status.TextScaled = false status.TextSize = 16 status.Parent = frame -- animações de cor task.spawn(function() while frame.Parent do for h = 0, 1, 0.01 do uiStroke.Color = Color3.fromHSV(h, 1, 1) title.TextColor3 = Color3.fromHSV((h+0.15)%1, 1, 1) button.BackgroundColor3 = Color3.fromHSV((h+0.3)%1, 0.9, 0.9) task.wait(0.03) end end end) -- ===== helpers e estado ===== local active = false local created = { -- sky = Sky, sound = Sound, decals = {Decal}, localParticles = {Part/Emitter}, remoteVisuals = {player = {part, emitter, billboardGui}} decals = {}, localParticles = {}, remoteVisuals = {} -- map player -> {visPart, emitter, billboard} } local function clearDecals() for _, d in ipairs(created.decals) do if d and d.Parent then pcall(d.Destroy, d) end end created.decals = {} end local function clearLocalParticles() for _, e in ipairs(created.localParticles) do if e and e.Parent then pcall(e.Destroy, e) end end created.localParticles = {} end local function clearRemoteVisuals() for plr, v in pairs(created.remoteVisuals) do if v.billboard and v.billboard.Parent then pcall(v.billboard.Destroy, v.billboard) end if v.part and v.part.Parent then pcall(v.part.Destroy, v.part) end created.remoteVisuals[plr] = nil end end local function aidstr(id) return aid(id) end -- cria sky local local function createLocalSky() -- remove sky local anterior com mesmo nome for _, c in ipairs(Lighting:GetChildren()) do if c:IsA("Sky") and c.Name == "m1gxx_sky_v3" then c:Destroy() end end local sky = Instance.new("Sky") sky.Name = "m1gxx_sky_v3" local tex = aidstr(SKY_ID) sky.SkyboxBk = tex sky.SkyboxDn = tex sky.SkyboxFt = tex sky.SkyboxLf = tex sky.SkyboxRt = tex sky.SkyboxUp = tex sky.Parent = Lighting return sky end -- cria música local local function createLocalMusic() local s = Instance.new("Sound") s.Name = "m1gxx_sound_v3" s.SoundId = aidstr(MUSIC_ID) s.Looped = true s.Volume = 2 s.PlayOnRemove = false s.Parent = workspace -- mantemos no workspace para executores pcall(function() s:Play() end) return s end -- aplica decal em todas as partes (em todas as faces) local function applyDecalToAllParts() for _, obj in ipairs(workspace:GetDescendants()) do if obj:IsA("BasePart") and obj ~= workspace.Terrain then for _, face in ipairs(Enum.NormalId:GetEnumItems()) do local d = Instance.new("Decal") d.Name = "m1gxx_v3_decal" d.Face = face d.Texture = aidstr(DECAL_ID) -- guardamos para deletar depois d.Parent = obj table.insert(created.decals, d) end end end end -- cria partículas locais no meu personagem local function createParticlesOnLocalCharacter() if not localPlayer.Character then return end for _, part in ipairs(localPlayer.Character:GetDescendants()) do if part:IsA("BasePart") then local emitter = Instance.new("ParticleEmitter") emitter.Name = "m1gxx_local_particle" emitter.Texture = aidstr(PARTICLE_ID) emitter.Rate = 30 emitter.Lifetime = NumberRange.new(1, 2) emitter.Speed = NumberRange.new(0.5, 2) emitter.Size = NumberSequence.new(0.5) emitter.LightEmission = 0.6 emitter.Parent = part table.insert(created.localParticles, emitter) end end end -- cria para um jogador VISUAL local: uma part invisível que segue a cabeça + particle emitter + billboard GUI local function createRemoteVisualForPlayer(plr) if not plr.Character then return end local head = plr.Character:FindFirstChild("Head") if not head then return end -- já existe? if created.remoteVisuals[plr] then return end -- invisível part que seguirá a cabeça local vpart = Instance.new("Part") vpart.Name = "m1gxx_v3_vispart_" .. plr.Name vpart.Size = Vector3.new(0.5,0.5,0.5) vpart.Transparency = 1 vpart.Anchored = true vpart.CanCollide = false vpart.Parent = VIS_ROOT -- particle emitter no vpart local emitter = Instance.new("ParticleEmitter") emitter.Name = "m1gxx_v3_remoteEmitter" emitter.Texture = aidstr(PARTICLE_ID) emitter.Rate = 40 emitter.Lifetime = NumberRange.new(1,2) emitter.Speed = NumberRange.new(0.5,2) emitter.Size = NumberSequence.new(0.5) emitter.LightEmission = 0.6 emitter.Parent = vpart -- BillboardGui para colocar a imagem "máscara" local billboard = Instance.new("BillboardGui") billboard.Name = "m1gxx_v3_faceBillboard_" .. plr.Name billboard.Adornee = vpart billboard.Size = UDim2.new(0, 140, 0, 140) -- ajuste conforme necessário billboard.StudsOffset = Vector3.new(0, 0, 0) billboard.AlwaysOnTop = true billboard.Parent = GUI_ROOT local img = Instance.new("ImageLabel") img.Size = UDim2.new(1,0,1,0) img.BackgroundTransparency = 1 img.Image = aidstr(DECAL_ID) img.Parent = billboard -- guardar referência created.remoteVisuals[plr] = { part = vpart, emitter = emitter, billboard = billboard } end -- atualiza posições dos visParts para seguir a cabeça do respectivo jogador local function updateRemoteVisuals() for plr, v in pairs(created.remoteVisuals) do -- se player saiu ou character nil, limpar if not plr.Parent or not plr.Character or not plr.Character:FindFirstChild("Head") then if v.billboard and v.billboard.Parent then pcall(v.billboard.Destroy, v.billboard) end if v.part and v.part.Parent then pcall(v.part.Destroy, v.part) end created.remoteVisuals[plr] = nil else local head = plr.Character:FindFirstChild("Head") if head then -- posicionar o v.part exatamente onde a face está (um pouco à frente) local cf = head.CFrame * CFrame.new(0, 0, -0.1) -- ligeiramente à frente da face v.part.CFrame = cf -- ajustar billboard offset para cobrir a face: studs offset pode ser zero porque Adornee é a part v.billboard.StudsOffset = Vector3.new(0, 0, 0) end end end end -- cria visuals locais para TODOS os players (inclui você também se quiser máscara em você) local function createRemoteVisualsForAllPlayers() for _, plr in ipairs(Players:GetPlayers()) do -- ignorar o seu próprio personagem se já tem face decal local (mas podemos opcionalmente criar também) if plr ~= localPlayer then createRemoteVisualForPlayer(plr) else -- manter máscara também no seu player via billboard (opcional) createRemoteVisualForPlayer(plr) end end end -- remove visuals para um jogador específico (quando sair) local function removeRemoteVisualForPlayer(plr) local v = created.remoteVisuals[plr] if v then if v.billboard and v.billboard.Parent then pcall(v.billboard.Destroy, v.billboard) end if v.part and v.part.Parent then pcall(v.part.Destroy, v.part) end created.remoteVisuals[plr] = nil end end -- conexões para players entrarem/sairem/respawnarem Players.PlayerAdded:Connect(function(plr) -- aguardar character plr.CharacterAdded:Connect(function() if active then createRemoteVisualForPlayer(plr) end end) end) Players.PlayerRemoving:Connect(function(plr) removeRemoteVisualForPlayer(plr) end) -- RenderStepped para atualizar posições local updateConn local function startUpdating() if updateConn then return end updateConn = RunService.RenderStepped:Connect(function() if active then updateRemoteVisuals() end end) end local function stopUpdating() if updateConn then updateConn:Disconnect() updateConn = nil end end -- função principal ligar/desligar local function activate() if active then return end active = true status.Text = "Ligado" -- sky created.sky = createLocalSky() -- music created.sound = createLocalMusic() -- decals no mapa applyDecalToAllParts() -- partículas no meu personagem createParticlesOnLocalCharacter() -- criar visuals locais para todos os players (máscaras e partículas) createRemoteVisualsForAllPlayers() -- iniciar atualização contínua startUpdating() end local function deactivate() if not active then return end active = false status.Text = "Desligado" -- remover sky if created.sky and created.sky.Parent then pcall(created.sky.Destroy, created.sky) end -- remover música if created.sound and created.sound.Parent then pcall(function() created.sound:Stop() end) pcall(created.sound.Destroy, created.sound) end -- limpar decals/particles locais clearDecals() clearLocalParticles() clearRemoteVisuals() -- stop update stopUpdating() end -- botão alterna button.MouseButton1Click:Connect(function() if active then deactivate() button.Text = "💫 c00lify 💫" else activate() button.Text = "✅ c00lify Ativado!" end end) -- limpar caso o jogador saia / reinicie client local function cleanupAll() deactivate() if VIS_ROOT and VIS_ROOT.Parent then pcall(VIS_ROOT.Destroy, VIS_ROOT) end if GUI_ROOT and GUI_ROOT.Parent then pcall(GUI_ROOT.Destroy, GUI_ROOT) end if screenGui and screenGui.Parent then pcall(screenGui.Destroy, screenGui) end end local closeConn local playerAncestry = localPlayer:GetPropertyChangedSignal("Parent") playerAncestry:Connect(function() if not localPlayer.Parent then cleanupAll() end end) -- mensagem print("m1gxx c00lify v3 (visual local) pronto. Clique no botão para ativar os efeitos (apenas visível para você).")