-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6aaf594277fd29f402f107e3"))() end) end) --[[rscripts:analytics:end]] --// SERVICES local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") --// REMOVE OLD GUI for _, gui in ipairs(PlayerGui:GetChildren()) do if gui.Name == "ESP_GUI" then gui:Destroy() end end --// REMOVE OLD CHAMS FOLDER local OldChamsFolder = workspace:FindFirstChild("ESP_CharacterChams") if OldChamsFolder then OldChamsFolder:Destroy() end --// SETTINGS local PaperEnabled = false local DoorEnabled = false local SafeEnabled = false local WillowEnabled = false local PlayerEnabled = false local KillerEnabled = false local RenderDistance = 250 local OpenKey = Enum.KeyCode.RightShift --// COLORS local Colors = { Paper = Color3.fromRGB(220, 210, 50), Door = Color3.fromRGB(210, 210, 210), Safe = Color3.fromRGB(220, 60, 60), Willow = Color3.fromRGB(220, 90, 155), Survivor = Color3.fromRGB(60, 210, 90), Interest = Color3.fromRGB(145, 70, 210), Friend = Color3.fromRGB(60, 140, 210), Killer = Color3.fromRGB(220, 60, 60) } --// GUI COLORS local GUIBackground = Color3.fromRGB(22, 22, 27) local GUIButton = Color3.fromRGB(30, 30, 36) local GUIButtonOn = Color3.fromRGB(38, 38, 45) local GUIStroke = Color3.fromRGB(60, 60, 68) local GUISecondary = Color3.fromRGB(48, 48, 55) --// STORAGE local ESPObjects = {} local CharacterConnections = {} local HealthBars = {} local PlayerNameESP = {} local CharacterChams = {} --// CHARACTER CHAMS FOLDER -- Os Highlights ficam aqui em vez de dentro do personagem. local CharacterChamsFolder = Instance.new("Folder") CharacterChamsFolder.Name = "ESP_CharacterChams" CharacterChamsFolder.Parent = workspace --// GUI local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "ESP_GUI" ScreenGui.ResetOnSpawn = false ScreenGui.IgnoreGuiInset = true ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling ScreenGui.Parent = PlayerGui --// MAIN FRAME local Main = Instance.new("Frame") Main.Name = "Main" Main.Size = UDim2.fromOffset(220, 420) Main.Position = UDim2.new(0, 25, 0.5, -210) Main.BackgroundColor3 = GUIBackground Main.BorderSizePixel = 0 Main.Active = true Main.Parent = ScreenGui local MainCorner = Instance.new("UICorner") MainCorner.CornerRadius = UDim.new(0, 10) MainCorner.Parent = Main local MainStroke = Instance.new("UIStroke") MainStroke.Color = GUIStroke MainStroke.Thickness = 1 MainStroke.Parent = Main --// DRAG MAIN GUI local MainDragging = false local MainDragStart local MainStartPosition Main.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then MainDragging = true MainDragStart = input.Position MainStartPosition = Main.Position end end) UserInputService.InputChanged:Connect(function(input) if MainDragging then if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local Delta = input.Position - MainDragStart Main.Position = UDim2.new( MainStartPosition.X.Scale, MainStartPosition.X.Offset + Delta.X, MainStartPosition.Y.Scale, MainStartPosition.Y.Offset + Delta.Y ) end end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then MainDragging = false end end) --// TITLE local Title = Instance.new("TextLabel") Title.Size = UDim2.new(1, 0, 0, 45) Title.BackgroundTransparency = 1 Title.Text = "FIXATION ESP" Title.TextColor3 = Color3.fromRGB(225, 225, 225) Title.TextSize = 19 Title.Font = Enum.Font.GothamBold Title.Parent = Main --// BUTTON CREATOR local function CreateButton(text, y, color) local Button = Instance.new("TextButton") Button.Size = UDim2.new(1, -20, 0, 38) Button.Position = UDim2.fromOffset(10, y) Button.BackgroundColor3 = GUIButton Button.BorderSizePixel = 0 Button.Text = text .. " [OFF]" Button.TextColor3 = color Button.TextSize = 14 Button.Font = Enum.Font.GothamBold Button.AutoButtonColor = false Button.Active = true Button.Parent = Main local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 7) Corner.Parent = Button local Stroke = Instance.new("UIStroke") Stroke.Color = color Stroke.Transparency = 0.78 Stroke.Thickness = 1 Stroke.Parent = Button return Button end local PaperButton = CreateButton( "Papers", 50, Colors.Paper ) local DoorButton = CreateButton( "Doors", 95, Colors.Door ) local SafeButton = CreateButton( "Safes", 140, Colors.Safe ) local WillowButton = CreateButton( "Willow", 185, Colors.Willow ) local PlayerButton = CreateButton( "ESP Player", 230, Colors.Survivor ) local KillerButton = CreateButton( "Killer", 275, Colors.Killer ) --// DISTANCE LABEL local DistanceLabel = Instance.new("TextLabel") DistanceLabel.Size = UDim2.new(1, -20, 0, 25) DistanceLabel.Position = UDim2.fromOffset(10, 320) DistanceLabel.BackgroundTransparency = 1 DistanceLabel.Text = "Render Distance: 250" DistanceLabel.TextColor3 = Color3.fromRGB(190, 190, 195) DistanceLabel.TextSize = 13 DistanceLabel.Font = Enum.Font.Gotham DistanceLabel.Parent = Main --// SLIDER local SliderBackground = Instance.new("Frame") SliderBackground.Size = UDim2.new(1, -30, 0, 6) SliderBackground.Position = UDim2.fromOffset(15, 350) SliderBackground.BackgroundColor3 = GUISecondary SliderBackground.BorderSizePixel = 0 SliderBackground.Active = true SliderBackground.Parent = Main local SliderCorner = Instance.new("UICorner") SliderCorner.CornerRadius = UDim.new(1, 0) SliderCorner.Parent = SliderBackground local SliderFill = Instance.new("Frame") SliderFill.Size = UDim2.new(RenderDistance / 500, 0, 1, 0) SliderFill.BackgroundColor3 = Color3.fromRGB(105, 75, 180) SliderFill.BorderSizePixel = 0 SliderFill.Parent = SliderBackground local FillCorner = Instance.new("UICorner") FillCorner.CornerRadius = UDim.new(1, 0) FillCorner.Parent = SliderFill local SliderButton = Instance.new("TextButton") SliderButton.Size = UDim2.fromOffset(16, 16) SliderButton.Position = UDim2.new( RenderDistance / 500, -8, 0.5, -8 ) SliderButton.BackgroundColor3 = Color3.fromRGB(205, 205, 210) SliderButton.Text = "" SliderButton.BorderSizePixel = 0 SliderButton.Parent = SliderBackground local SliderButtonCorner = Instance.new("UICorner") SliderButtonCorner.CornerRadius = UDim.new(1, 0) SliderButtonCorner.Parent = SliderButton --// KEYBIND LABEL local KeybindLabel = Instance.new("TextLabel") KeybindLabel.Size = UDim2.new(1, -20, 0, 25) KeybindLabel.Position = UDim2.fromOffset(10, 370) KeybindLabel.BackgroundTransparency = 1 KeybindLabel.Text = "Menu Key: RightShift" KeybindLabel.TextColor3 = Color3.fromRGB(180, 180, 185) KeybindLabel.TextSize = 12 KeybindLabel.Font = Enum.Font.Gotham KeybindLabel.Parent = Main --// KEYBIND BOX local KeybindBox = Instance.new("TextButton") KeybindBox.Size = UDim2.new(1, -20, 0, 25) KeybindBox.Position = UDim2.fromOffset(10, 395) KeybindBox.BackgroundColor3 = GUIButton KeybindBox.Text = "Click to change key" KeybindBox.TextColor3 = Color3.fromRGB(160, 160, 165) KeybindBox.TextSize = 11 KeybindBox.Font = Enum.Font.Gotham KeybindBox.BorderSizePixel = 0 KeybindBox.Parent = Main local KeyCorner = Instance.new("UICorner") KeyCorner.CornerRadius = UDim.new(0, 6) KeyCorner.Parent = KeybindBox --// FLOATING BUTTON local FloatButton = Instance.new("TextButton") FloatButton.Name = "FloatingButton" FloatButton.Size = UDim2.fromOffset(52, 52) FloatButton.Position = UDim2.new(0, 20, 0.5, -26) FloatButton.BackgroundColor3 = Color3.fromRGB(30, 25, 40) FloatButton.Text = "×" FloatButton.TextColor3 = Color3.fromRGB(220, 220, 225) FloatButton.TextSize = 25 FloatButton.Font = Enum.Font.GothamBold FloatButton.BorderSizePixel = 0 FloatButton.Active = true FloatButton.AutoButtonColor = false FloatButton.ZIndex = 100 FloatButton.Parent = ScreenGui local FloatCorner = Instance.new("UICorner") FloatCorner.CornerRadius = UDim.new(1, 0) FloatCorner.Parent = FloatButton local FloatStroke = Instance.new("UIStroke") FloatStroke.Color = Color3.fromRGB(105, 70, 150) FloatStroke.Thickness = 2 FloatStroke.Parent = FloatButton --// FLOATING BUTTON DRAG local FloatDragging = false local FloatDragStart local FloatStartPosition local FloatMoved = false FloatButton.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then FloatDragging = true FloatMoved = false FloatDragStart = input.Position FloatStartPosition = FloatButton.Position end end) UserInputService.InputChanged:Connect(function(input) if FloatDragging then if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local Delta = input.Position - FloatDragStart if math.abs(Delta.X) > 5 or math.abs(Delta.Y) > 5 then FloatMoved = true end FloatButton.Position = UDim2.new( FloatStartPosition.X.Scale, FloatStartPosition.X.Offset + Delta.X, FloatStartPosition.Y.Scale, FloatStartPosition.Y.Offset + Delta.Y ) end end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then FloatDragging = false end end) --// MENU TOGGLE local MenuOpen = true local function ToggleMenu() MenuOpen = not MenuOpen Main.Visible = MenuOpen if MenuOpen then FloatButton.Text = "×" else FloatButton.Text = "☰" end end FloatButton.Activated:Connect(function() if not FloatMoved then ToggleMenu() end end) --// LOBBY CHECK local function IsInLobby(object) local Lobby = workspace:FindFirstChild("Lobby") if not Lobby then return false end return object:IsDescendantOf(Lobby) end --// GET ROLE local function GetRole(character) if not character then return nil end local Role = character:FindFirstChild( "FixationRole" ) if Role then if Role:IsA("StringValue") then return Role.Value end local Attribute = Role:GetAttribute("Value") if Attribute then return Attribute end end local AttributeRole = character:GetAttribute( "FixationRole" ) if AttributeRole then return AttributeRole end return nil end --// HEALTH BAR local function RemoveHealthBar(character) local Bar = HealthBars[character] if Bar then Bar:Destroy() HealthBars[character] = nil end end local function CreateHealthBar(character) if not character then return end local Role = GetRole(character) if Role == "Nikki" then RemoveHealthBar(character) return end local Root = character:FindFirstChild( "HumanoidRootPart" ) if not Root then return end if HealthBars[character] then local Existing = HealthBars[character] if Existing.Parent then return end HealthBars[character] = nil end local Billboard = Instance.new("BillboardGui") Billboard.Name = "HealthBar" Billboard.Adornee = Root Billboard.Size = UDim2.fromOffset(4, 30) Billboard.StudsOffset = Vector3.new(2.8, 1.5, 0) Billboard.AlwaysOnTop = true Billboard.MaxDistance = RenderDistance Billboard.Enabled = PlayerEnabled Billboard.Parent = Root local Background = Instance.new("Frame") Background.Name = "Background" Background.Size = UDim2.fromScale(1, 1) Background.BackgroundColor3 = Color3.fromRGB(25, 25, 25) Background.BorderSizePixel = 0 Background.Parent = Billboard local BackgroundCorner = Instance.new("UICorner") BackgroundCorner.CornerRadius = UDim.new(0, 2) BackgroundCorner.Parent = Background local Fill = Instance.new("Frame") Fill.Name = "Fill" Fill.AnchorPoint = Vector2.new(0, 1) Fill.Position = UDim2.fromScale(0, 1) Fill.Size = UDim2.fromScale(1, 1) Fill.BackgroundColor3 = Color3.fromRGB(0, 220, 70) Fill.BorderSizePixel = 0 Fill.ZIndex = 2 Fill.Parent = Background local FillCorner = Instance.new("UICorner") FillCorner.CornerRadius = UDim.new(0, 2) FillCorner.Parent = Fill local HealthText = Instance.new("TextLabel") HealthText.Name = "HealthText" HealthText.Size = UDim2.fromOffset(35, 20) HealthText.Position = UDim2.new( 0.5, -17.5, 0.5, -10 ) HealthText.BackgroundTransparency = 1 HealthText.Text = "100" HealthText.TextColor3 = Color3.fromRGB(255, 255, 255) HealthText.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) HealthText.TextStrokeTransparency = 0 HealthText.TextSize = 11 HealthText.Font = Enum.Font.GothamBold HealthText.TextXAlignment = Enum.TextXAlignment.Center HealthText.TextYAlignment = Enum.TextYAlignment.Center HealthText.ZIndex = 3 HealthText.Parent = Background HealthBars[character] = Billboard end local function UpdateHealthBar(character) local Billboard = HealthBars[character] if not Billboard then return end if not Billboard.Parent then HealthBars[character] = nil if PlayerEnabled then CreateHealthBar(character) end return end local Humanoid = character:FindFirstChildOfClass( "Humanoid" ) if not Humanoid then return end local Background = Billboard:FindFirstChild( "Background" ) if not Background then return end local Fill = Background:FindFirstChild( "Fill" ) local HealthText = Background:FindFirstChild( "HealthText" ) if not Fill or not HealthText then return end local Health = math.clamp( Humanoid.Health / math.max( Humanoid.MaxHealth, 1 ), 0, 1 ) Fill.Size = UDim2.new( 1, 0, Health, 0 ) HealthText.Text = tostring( math.max( 0, math.floor( Humanoid.Health + 0.5 ) ) ) if Health > 0.5 then Fill.BackgroundColor3 = Color3.fromRGB( 0, 220, 70 ) elseif Health > 0.25 then Fill.BackgroundColor3 = Color3.fromRGB( 225, 190, 0 ) else Fill.BackgroundColor3 = Color3.fromRGB( 220, 45, 45 ) end Billboard.MaxDistance = RenderDistance Billboard.Enabled = PlayerEnabled end --// PLAYER NAME ESP local function RemovePlayerNameESP(character) local Billboard = PlayerNameESP[character] if Billboard then Billboard:Destroy() PlayerNameESP[character] = nil end end local function CreatePlayerNameESP( character, text, color ) if not character then return end local Root = character:FindFirstChild( "HumanoidRootPart" ) if not Root then return end RemovePlayerNameESP(character) local Billboard = Instance.new("BillboardGui") Billboard.Name = "PlayerNameESP" Billboard.Adornee = Root Billboard.Size = UDim2.fromOffset( 130, 24 ) Billboard.StudsOffset = Vector3.new(0, 2.7, 0) Billboard.AlwaysOnTop = true Billboard.MaxDistance = RenderDistance Billboard.Parent = Root local Label = Instance.new("TextLabel") Label.Name = "Name" Label.Size = UDim2.fromScale(1, 1) Label.BackgroundTransparency = 1 Label.Text = text Label.TextColor3 = color Label.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) Label.TextStrokeTransparency = 0 Label.TextSize = 14 Label.Font = Enum.Font.GothamBold Label.TextXAlignment = Enum.TextXAlignment.Center Label.TextYAlignment = Enum.TextYAlignment.Center Label.Parent = Billboard PlayerNameESP[character] = Billboard end local function UpdatePlayerNameESP(character) local Billboard = PlayerNameESP[character] if not Billboard then return end if not Billboard.Parent then PlayerNameESP[character] = nil return end Billboard.MaxDistance = RenderDistance end --// CHARACTER CHAMS local function RemoveCharacterChams(character) local Highlight = CharacterChams[character] if Highlight then if Highlight.Parent then Highlight:Destroy() end CharacterChams[character] = nil end end local function CreateCharacterChams( character, color ) if not character then return end if not character.Parent then return end -- Verifica se já existe um Highlight válido. local Existing = CharacterChams[character] if Existing then if Existing.Parent and Existing.Adornee == character then Existing.FillColor = color Existing.OutlineColor = color Existing.FillTransparency = 0.85 Existing.OutlineTransparency = 0 Existing.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop return end -- Referência antiga inválida. if Existing.Parent then Existing:Destroy() end CharacterChams[character] = nil end -- Cria um novo Highlight. local Highlight = Instance.new("Highlight") Highlight.Name = "CharacterChams" Highlight.Adornee = character Highlight.FillColor = color Highlight.FillTransparency = 0.85 Highlight.OutlineColor = color Highlight.OutlineTransparency = 0 Highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop -- IMPORTANTE: -- O Highlight não fica mais dentro do Character. Highlight.Parent = CharacterChamsFolder CharacterChams[character] = Highlight end --// REPAIR CHARACTER CHAMS -- Recria automaticamente um Chams que tenha desaparecido. local function RepairCharacterChams(character) if not character then return end if not character.Parent then return end if character == LocalPlayer.Character then return end local Role = GetRole(character) local WantedColor = nil if Role == "Nikki" then if KillerEnabled then WantedColor = Colors.Killer end elseif PlayerEnabled then if Role == "Survivor" then WantedColor = Colors.Survivor elseif Role == "Interest" then WantedColor = Colors.Interest elseif Role == "Friend" then WantedColor = Colors.Friend end end if WantedColor then local Highlight = CharacterChams[character] if not Highlight or not Highlight.Parent or Highlight.Adornee ~= character then CharacterChams[character] = nil if Highlight then pcall(function() Highlight:Destroy() end) end CreateCharacterChams( character, WantedColor ) else -- Reforça propriedades caso algo tenha alterado. Highlight.FillColor = WantedColor Highlight.OutlineColor = WantedColor Highlight.FillTransparency = 0.85 Highlight.OutlineTransparency = 0 Highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop end else -- Não deveria existir Chams para esse personagem. if CharacterChams[character] then RemoveCharacterChams(character) end end end --// CREATE OBJECT ESP local function CreateESP( object, text, color ) if not object then return end if ESPObjects[object] then local Data = ESPObjects[object] if Data.Highlight and Data.Highlight.Parent and Data.Billboard and Data.Billboard.Parent then return end ESPObjects[object] = nil end if IsInLobby(object) then return end local Highlight = Instance.new("Highlight") Highlight.Name = "ESP_Highlight" Highlight.FillColor = color Highlight.OutlineColor = color Highlight.FillTransparency = 0.85 Highlight.OutlineTransparency = 0 Highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop Highlight.Adornee = object Highlight.Parent = object local Billboard = Instance.new("BillboardGui") Billboard.Name = "ESP_Label" Billboard.Size = UDim2.fromOffset( 120, 25 ) Billboard.AlwaysOnTop = true Billboard.MaxDistance = RenderDistance Billboard.StudsOffset = Vector3.new( 0, 2.5, 0 ) local Label = Instance.new("TextLabel") Label.Size = UDim2.fromScale(1, 1) Label.BackgroundTransparency = 1 Label.Text = text Label.TextColor3 = color Label.TextStrokeTransparency = 0 Label.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) Label.TextSize = 14 Label.Font = Enum.Font.GothamBold Label.Parent = Billboard Billboard.Parent = object ESPObjects[object] = { Highlight = Highlight, Billboard = Billboard } end --// REMOVE OBJECT ESP local function RemoveESP(object) local Data = ESPObjects[object] if not Data then return end if Data.Highlight then Data.Highlight:Destroy() end if Data.Billboard then Data.Billboard:Destroy() end ESPObjects[object] = nil end --// SCAN OBJECTS local function ScanObjects() for _, object in ipairs( workspace:GetDescendants() ) do if object:IsA("Model") or object:IsA("BasePart") then if PaperEnabled and object.Name == "FixationPolaroid" then CreateESP( object, "Paper", Colors.Paper ) end if DoorEnabled and object.Name == "Door" then if not IsInLobby(object) then CreateESP( object, "Door", Colors.Door ) end end if SafeEnabled and object.Name == "FixationSafe" then CreateESP( object, "Safe", Colors.Safe ) end if WillowEnabled and object.Name == "FixationWillowBox" then CreateESP( object, "Willow", Colors.Willow ) end if PlayerEnabled and object.Name == "INTERESSE" then CreateESP( object, "Interest", Colors.Interest ) end end end end --// CHARACTER ESP local function CreateCharacterESP(character) if not character or not character.Parent then return end if character == LocalPlayer.Character then return end local Role = GetRole(character) --// KILLER if Role == "Nikki" then if KillerEnabled then CreateCharacterChams( character, Colors.Killer ) CreatePlayerNameESP( character, "Killer", Colors.Killer ) else RemoveCharacterChams( character ) RemovePlayerNameESP( character ) end RemoveHealthBar(character) return end --// NORMAL PLAYER if PlayerEnabled then if Role == "Survivor" then CreateCharacterChams( character, Colors.Survivor ) CreatePlayerNameESP( character, "Survivor", Colors.Survivor ) CreateHealthBar(character) elseif Role == "Interest" then CreateCharacterChams( character, Colors.Interest ) CreatePlayerNameESP( character, "Interest", Colors.Interest ) CreateHealthBar(character) elseif Role == "Friend" then CreateCharacterChams( character, Colors.Friend ) CreatePlayerNameESP( character, "Friend", Colors.Friend ) CreateHealthBar(character) else RemoveCharacterChams( character ) RemovePlayerNameESP( character ) RemoveHealthBar( character ) end else RemoveCharacterChams( character ) RemovePlayerNameESP( character ) RemoveHealthBar( character ) end end --// REMOVE CHARACTER ESP local function RemoveCharacterESP(character) if not character then return end RemoveCharacterChams(character) RemoveESP(character) RemovePlayerNameESP(character) RemoveHealthBar(character) end --// ENABLE CATEGORY local function EnableCategory(category) task.spawn(function() if category == "Paper" then PaperEnabled = true elseif category == "Door" then DoorEnabled = true elseif category == "Safe" then SafeEnabled = true elseif category == "Willow" then WillowEnabled = true elseif category == "Player" then PlayerEnabled = true elseif category == "Killer" then KillerEnabled = true end ScanObjects() for _, player in ipairs( Players:GetPlayers() ) do if player.Character then CreateCharacterESP( player.Character ) end task.wait() end end) end --// DISABLE CATEGORY local function DisableCategory(category) task.spawn(function() if category == "Paper" then PaperEnabled = false for object in pairs( ESPObjects ) do if object.Name == "FixationPolaroid" then RemoveESP(object) end end elseif category == "Door" then DoorEnabled = false for object in pairs( ESPObjects ) do if object.Name == "Door" then RemoveESP(object) end end elseif category == "Safe" then SafeEnabled = false for object in pairs( ESPObjects ) do if object.Name == "FixationSafe" then RemoveESP(object) end end elseif category == "Willow" then WillowEnabled = false for object in pairs( ESPObjects ) do if object.Name == "FixationWillowBox" then RemoveESP(object) end end elseif category == "Player" then PlayerEnabled = false for _, player in ipairs( Players:GetPlayers() ) do if player.Character and player.Character ~= LocalPlayer.Character then local Role = GetRole( player.Character ) if Role == "Survivor" or Role == "Interest" or Role == "Friend" then RemoveCharacterChams( player.Character ) RemovePlayerNameESP( player.Character ) RemoveHealthBar( player.Character ) end end end for character in pairs( HealthBars ) do RemoveHealthBar( character ) end for character in pairs( PlayerNameESP ) do local Role = GetRole(character) if Role ~= "Nikki" then RemovePlayerNameESP( character ) end end for character in pairs( CharacterChams ) do local Role = GetRole(character) if Role ~= "Nikki" then RemoveCharacterChams( character ) end end for object in pairs( ESPObjects ) do if object.Name == "INTERESSE" then RemoveESP(object) end end elseif category == "Killer" then KillerEnabled = false for _, player in ipairs( Players:GetPlayers() ) do if player.Character then if GetRole( player.Character ) == "Nikki" then RemoveCharacterChams( player.Character ) RemovePlayerNameESP( player.Character ) RemoveHealthBar( player.Character ) end end end end end) end --// BUTTON UPDATE local function UpdateButton( Button, enabled, text ) if enabled then Button.Text = text .. " [ON]" Button.BackgroundColor3 = GUIButtonOn else Button.Text = text .. " [OFF]" Button.BackgroundColor3 = GUIButton end end --// BUTTONS PaperButton.MouseButton1Click:Connect(function() PaperEnabled = not PaperEnabled if PaperEnabled then EnableCategory("Paper") else DisableCategory("Paper") end UpdateButton( PaperButton, PaperEnabled, "Papers" ) end) DoorButton.MouseButton1Click:Connect(function() DoorEnabled = not DoorEnabled if DoorEnabled then EnableCategory("Door") else DisableCategory("Door") end UpdateButton( DoorButton, DoorEnabled, "Doors" ) end) SafeButton.MouseButton1Click:Connect(function() SafeEnabled = not SafeEnabled if SafeEnabled then EnableCategory("Safe") else DisableCategory("Safe") end UpdateButton( SafeButton, SafeEnabled, "Safes" ) end) WillowButton.MouseButton1Click:Connect(function() WillowEnabled = not WillowEnabled if WillowEnabled then EnableCategory("Willow") else DisableCategory("Willow") end UpdateButton( WillowButton, WillowEnabled, "Willow" ) end) PlayerButton.MouseButton1Click:Connect(function() PlayerEnabled = not PlayerEnabled if PlayerEnabled then EnableCategory("Player") else DisableCategory("Player") end UpdateButton( PlayerButton, PlayerEnabled, "ESP Player" ) end) KillerButton.MouseButton1Click:Connect(function() KillerEnabled = not KillerEnabled if KillerEnabled then EnableCategory("Killer") else DisableCategory("Killer") end UpdateButton( KillerButton, KillerEnabled, "Killer" ) end) --// SLIDER local DraggingSlider = false local function UpdateSlider(mouseX) local AbsolutePosition = SliderBackground.AbsolutePosition.X local AbsoluteSize = SliderBackground.AbsoluteSize.X local Percent = math.clamp( (mouseX - AbsolutePosition) / AbsoluteSize, 0, 1 ) RenderDistance = math.floor( Percent * 500 ) SliderFill.Size = UDim2.new( Percent, 0, 1, 0 ) SliderButton.Position = UDim2.new( Percent, -8, 0.5, -8 ) DistanceLabel.Text = "Render Distance: " .. RenderDistance for _, Data in pairs( ESPObjects ) do if Data.Billboard then Data.Billboard.MaxDistance = RenderDistance end end for _, Bar in pairs( HealthBars ) do Bar.MaxDistance = RenderDistance end for _, Billboard in pairs( PlayerNameESP ) do Billboard.MaxDistance = RenderDistance end end SliderButton.MouseButton1Down:Connect( function() DraggingSlider = true end ) SliderBackground.InputBegan:Connect( function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then DraggingSlider = true UpdateSlider( input.Position.X ) end end ) UserInputService.InputChanged:Connect( function(input) if DraggingSlider and input.UserInputType == Enum.UserInputType.MouseMovement then UpdateSlider( input.Position.X ) end end ) UserInputService.InputEnded:Connect( function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then DraggingSlider = false end end ) --// KEYBIND local WaitingForKey = false KeybindBox.MouseButton1Click:Connect( function() WaitingForKey = true KeybindBox.Text = "Press a key..." end ) --// KEYBOARD INPUT UserInputService.InputBegan:Connect( function( input, gameProcessed ) if WaitingForKey then if input.UserInputType == Enum.UserInputType.Keyboard then OpenKey = input.KeyCode KeybindLabel.Text = "Menu Key: " .. input.KeyCode.Name KeybindBox.Text = "Click to change key" WaitingForKey = false end return end if gameProcessed then return end if input.KeyCode == OpenKey then ToggleMenu() end end ) --// CHARACTER WATCHER local function WatchCharacter(character) if not character then return end if CharacterConnections[character] then return end CharacterConnections[character] = true task.spawn(function() local Root = character:WaitForChild( "HumanoidRootPart", 10 ) if Root then task.wait(0.5) CreateCharacterESP( character ) end end) character.AncestryChanged:Connect( function(_, parent) if not parent then RemoveCharacterESP( character ) CharacterConnections[ character ] = nil end end ) end --// PLAYER WATCHER local function WatchPlayer(player) if player == LocalPlayer then return end if player.Character then WatchCharacter( player.Character ) end player.CharacterAdded:Connect( function(character) WatchCharacter( character ) end ) end for _, player in ipairs( Players:GetPlayers() ) do WatchPlayer(player) end Players.PlayerAdded:Connect( function(player) WatchPlayer(player) end ) --// NEW OBJECTS workspace.DescendantAdded:Connect( function(object) if not object then return end task.wait() if PaperEnabled and object.Name == "FixationPolaroid" then CreateESP( object, "Paper", Colors.Paper ) end if DoorEnabled and object.Name == "Door" then if not IsInLobby(object) then CreateESP( object, "Door", Colors.Door ) end end if SafeEnabled and object.Name == "FixationSafe" then CreateESP( object, "Safe", Colors.Safe ) end if WillowEnabled and object.Name == "FixationWillowBox" then CreateESP( object, "Willow", Colors.Willow ) end if PlayerEnabled and object.Name == "INTERESSE" then CreateESP( object, "Interest", Colors.Interest ) end end ) --// OPTIMIZED UPDATE LOOP task.spawn(function() while true do task.wait(0.25) --======================================== -- OBJECT ESP --======================================== for object, Data in pairs( ESPObjects ) do if not object or not object.Parent then RemoveESP(object) else if Data.Billboard then if not Data.Billboard.Parent then RemoveESP(object) else Data.Billboard.MaxDistance = RenderDistance end end end end --======================================== -- HEALTH BARS --======================================== if PlayerEnabled then for character in pairs( HealthBars ) do if character and character.Parent then UpdateHealthBar( character ) else RemoveHealthBar( character ) end end end --======================================== -- PLAYER NAMES --======================================== if PlayerEnabled or KillerEnabled then for character, Billboard in pairs( PlayerNameESP ) do if character and character.Parent then UpdatePlayerNameESP( character ) else RemovePlayerNameESP( character ) end end end --======================================== -- ROLE CHECK --======================================== if PlayerEnabled or KillerEnabled then for _, player in ipairs( Players:GetPlayers() ) do if player ~= LocalPlayer and player.Character then CreateCharacterESP( player.Character ) end end end --======================================== -- CHAMS REPAIR --======================================== -- Esta é a parte nova mais importante. -- Se um Highlight sumir, ele é recriado. if PlayerEnabled or KillerEnabled then for _, player in ipairs( Players:GetPlayers() ) do if player ~= LocalPlayer and player.Character then RepairCharacterChams( player.Character ) end end end --======================================== -- LIMPEZA DE CHAMS ANTIGOS --======================================== for character, Highlight in pairs( CharacterChams ) do if not character or not character.Parent then if Highlight then pcall(function() Highlight:Destroy() end) end CharacterChams[character] = nil elseif not Highlight or not Highlight.Parent then CharacterChams[character] = nil if (PlayerEnabled or KillerEnabled) then RepairCharacterChams( character ) end end end end end) print( "FIXATION ESP loaded successfully." )