local Camera = workspace.CurrentCamera local ESPObjects = {} local HighlightedParts = {} local ESP = { Enabled = true, MaxDistance = 1000, ShowName = true, ShowDistance = true, HighlightEnabled = true, HighlightColor = Color3.fromRGB(255, 0, 0), HighlightTransparency = 0.3 } local function IsAnimatronic(obj) if not obj or not obj:IsA("Model") then return false end local name = obj.Name local animatronicNames = { "Bonnie", "Freddy", "Chica", "Foxy", "GoldenFreddy", "ToyBonnie", "ToyFreddy", "ToyChica", "Mangle", "BB", "JJ", "Puppet", "WitheredBonnie", "WitheredFreddy", "WitheredChica", "WitheredFoxy", "Endo01", "Endo02", "ShadowFreddy", "RWQFSFASXC", "PaperPal", "Springtrap", "SpringBonnie", "Fredbear", "Nightmare", "NightmareFreddy", "NightmareBonnie", "NightmareChica", "NightmareFoxy", "Nightmarionne", "Plushtrap", "NightmareBB", "NightmareMangle", "JackOChica", "JackOBonnie", "CircusBaby", "Ballora", "FuntimeFreddy", "FuntimeFoxy", "BonBon", "Bonnet", "Ennard", "Bidybab", "Electrobab", "Minireena", "Lolbit", "ScrapBaby", "ScrapTrap", "MoltenFreddy", "Lefty", "MusicMan", "Helpy", "RockstarFreddy", "RockstarBonnie", "RockstarChica", "RockstarFoxy", "Orville", "MrHippo", "HappyFrog", "NeddBear", "PigPatch", "GlamrockFreddy", "GlamrockChica", "RoxanneWolf", "MontgomeryGator", "Vanny", "Sun", "Moon", "Daycare", "DJMusicMan", "MapBot", "GlamrockBonnie", "WetFloorBot", "StaffBot", "SecurityBot", "WindUpMusicMan", "MXES", "Mimic", "Tangle", "Blob", "IgnitedBonnie", "IgnitedFreddy", "IgnitedChica", "IgnitedFoxy", "IgnitedGoldenFreddy", "Creation", "Lockjaw", "Sugar", "Popgoes", "Candy", "Cindy", "Chester", "Blank", "Penguin", "Chipper", "Animdude", "Freddles", "Cupcake", "NightmareCupcake", "GrimmFoxy", "Dreadbear", "DarkFreddy", "DarkBonnie", "DarkChica", "DarkFoxy" } for _, animName in ipairs(animatronicNames) do if name == animName then return true end end if name:find("Animatronic") or name:find("Bot") or name:find("Endo") or name:find("Nightmare") or name:find("Phantom") or name:find("Shadow") then return true end return false end local function GetHeadPart(model) return model:FindFirstChild("Head") or model:FindFirstChild("MeshHead") or model:FindFirstChild("HeadMesh") or model.PrimaryPart or model:FindFirstChildOfClass("BasePart") end local function HighlightModel(model) if HighlightedParts[model] then return end local parts = {} for _, part in ipairs(model:GetDescendants()) do if part:IsA("BasePart") or part:IsA("MeshPart") then local highlight = Instance.new("Highlight") highlight.Name = "ESP_Highlight" highlight.FillColor = ESP.HighlightColor highlight.FillTransparency = ESP.HighlightTransparency highlight.OutlineColor = ESP.HighlightColor highlight.OutlineTransparency = 0 highlight.Parent = part table.insert(parts, highlight) end end HighlightedParts[model] = parts end local function UnhighlightModel(model) if HighlightedParts[model] then for _, highlight in ipairs(HighlightedParts[model]) do if highlight and highlight.Parent then highlight:Destroy() end end HighlightedParts[model] = nil end end local function CreateESP(model) if ESPObjects[model] then return end local head = GetHeadPart(model) if not head then return end local billboard = Instance.new("BillboardGui") billboard.Name = "ESP_FNAF2" billboard.Adornee = head billboard.AlwaysOnTop = true billboard.Size = UDim2.new(0, 250, 0, 50) billboard.StudsOffset = Vector3.new(0, 5, 0) billboard.MaxDistance = ESP.MaxDistance billboard.Parent = head local nameLabel = Instance.new("TextLabel") nameLabel.Size = UDim2.new(1, 0, 0, 24) nameLabel.Position = UDim2.new(0, 0, 0, 0) nameLabel.BackgroundTransparency = 1 nameLabel.TextColor3 = Color3.fromRGB(255, 0, 0) nameLabel.TextStrokeTransparency = 0 nameLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) nameLabel.Font = Enum.Font.GothamBold nameLabel.TextSize = 18 nameLabel.Text = model.Name nameLabel.Parent = billboard local distLabel = Instance.new("TextLabel") distLabel.Size = UDim2.new(1, 0, 0, 20) distLabel.Position = UDim2.new(0, 0, 0, 26) distLabel.BackgroundTransparency = 1 distLabel.TextColor3 = Color3.fromRGB(255, 100, 100) distLabel.TextStrokeTransparency = 0 distLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) distLabel.Font = Enum.Font.GothamBold distLabel.TextSize = 15 distLabel.Text = "..." distLabel.Parent = billboard ESPObjects[model] = { Billboard = billboard, Name = nameLabel, Distance = distLabel } if ESP.HighlightEnabled then HighlightModel(model) end end local function RemoveESP(model) if ESPObjects[model] then ESPObjects[model].Billboard:Destroy() ESPObjects[model] = nil end UnhighlightModel(model) end local function UpdateESP() if not Camera then Camera = workspace.CurrentCamera end if not Camera then return end for model, obj in pairs(ESPObjects) do if not model or not model.Parent then obj.Billboard.Enabled = false continue end if not ESP.Enabled then obj.Billboard.Enabled = false if HighlightedParts[model] then for _, h in ipairs(HighlightedParts[model]) do if h and h.Parent then h.Enabled = false end end end continue end local head = GetHeadPart(model) if not head then obj.Billboard.Enabled = false continue end local dist = (head.Position - Camera.CFrame.Position).Magnitude if dist > ESP.MaxDistance then obj.Billboard.Enabled = false if HighlightedParts[model] then for _, h in ipairs(HighlightedParts[model]) do if h and h.Parent then h.Enabled = false end end end continue end obj.Billboard.Enabled = true obj.Billboard.Adornee = head if ESP.ShowName then obj.Name.Visible = true obj.Name.Text = model.Name else obj.Name.Visible = false end if ESP.ShowDistance then obj.Distance.Visible = true obj.Distance.Text = string.format("%.0f m", dist) else obj.Distance.Visible = false end if HighlightedParts[model] then for _, h in ipairs(HighlightedParts[model]) do if h and h.Parent then h.Enabled = ESP.HighlightEnabled h.FillColor = ESP.HighlightColor h.FillTransparency = ESP.HighlightTransparency end end end end end local function ScanWorkspace() for _, obj in ipairs(workspace:GetDescendants()) do if IsAnimatronic(obj) and not ESPObjects[obj] then CreateESP(obj) end end end workspace.DescendantAdded:Connect(function(descendant) if IsAnimatronic(descendant) then task.wait(0.3) if descendant and descendant.Parent then CreateESP(descendant) end end end) workspace.DescendantRemoving:Connect(function(descendant) if IsAnimatronic(descendant) then RemoveESP(descendant) end end) ScanWorkspace() local RunService = game:GetService("RunService") RunService.RenderStepped:Connect(function() pcall(UpdateESP) end)