local Players = game:GetService("Players") local TweenService = game:GetService("TweenService") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local npcs = "NPCs" local anomaly = "Skinwalker" local patient = "IsPatient" local visitor = "IsVisitor" local HOTKEY = Enum.KeyCode.H local IGNORED_FLAGS = { StoryForced = true, AlwaysPatient = true } local RED_FILL = Color3.fromRGB(255, 45, 65) local RED_OUTLINE = Color3.fromRGB(255, 0, 25) local GREEN_FILL = Color3.fromRGB(55, 255, 120) local GREEN_OUTLINE = Color3.fromRGB(0, 255, 90) local CHECK_DELAY = 0.35 local highlights = {} local opened = true local panelPos = Vector2.new(12, 90) local dragging = false local dragStart = nil local startPos = nil local blockClick = false local screenGui = Instance.new("ScreenGui") screenGui.Name = "SkinwalkerScannerGui" screenGui.ResetOnSpawn = false screenGui.IgnoreGuiInset = true screenGui.Parent = playerGui local main = Instance.new("Frame") main.Name = "Main" main.Size = UDim2.fromOffset(295, 128) main.Position = UDim2.fromOffset(panelPos.X, panelPos.Y) main.BackgroundColor3 = Color3.fromRGB(12, 12, 18) main.BackgroundTransparency = 0.08 main.BorderSizePixel = 0 main.ClipsDescendants = true main.Parent = screenGui local mainCorner = Instance.new("UICorner") mainCorner.CornerRadius = UDim.new(0, 12) mainCorner.Parent = main local stroke = Instance.new("UIStroke") stroke.Thickness = 1.5 stroke.Color = Color3.fromRGB(255, 55, 75) stroke.Transparency = 0.2 stroke.Parent = main local gradient = Instance.new("UIGradient") gradient.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Color3.fromRGB(30, 0, 8)), ColorSequenceKeypoint.new(0.45, Color3.fromRGB(12, 12, 18)), ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 28, 12)) }) gradient.Rotation = 20 gradient.Parent = main local toggleButton = Instance.new("TextButton") toggleButton.Name = "ToggleButton" toggleButton.Size = UDim2.fromOffset(52, 25) toggleButton.Position = UDim2.fromOffset(panelPos.X + 234, panelPos.Y + 6) toggleButton.BackgroundColor3 = Color3.fromRGB(164, 53, 90) toggleButton.BorderSizePixel = 0 toggleButton.Text = "HIDE" toggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) toggleButton.TextStrokeTransparency = 1 toggleButton.Font = Enum.Font.GothamBold toggleButton.TextSize = 12 toggleButton.AutoButtonColor = false toggleButton.ZIndex = 20 toggleButton.Parent = screenGui local toggleCorner = Instance.new("UICorner") toggleCorner.CornerRadius = UDim.new(0, 8) toggleCorner.Parent = toggleButton local title = Instance.new("TextLabel") title.Name = "Title" title.Size = UDim2.new(1, -75, 0, 24) title.Position = UDim2.fromOffset(9, 6) title.BackgroundTransparency = 1 title.Text = "Anomaly esp" title.TextColor3 = Color3.fromRGB(255, 255, 255) title.Font = Enum.Font.GothamBlack title.TextSize = 16 title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = main local status = Instance.new("TextLabel") status.Name = "Status" status.Size = UDim2.new(1, -18, 0, 18) status.Position = UDim2.fromOffset(9, 29) status.BackgroundTransparency = 1 status.Text = "Scanning NPCs..." status.TextColor3 = Color3.fromRGB(190, 190, 200) status.Font = Enum.Font.GothamMedium status.TextSize = 12 status.TextXAlignment = Enum.TextXAlignment.Left status.Parent = main local counts = Instance.new("TextLabel") counts.Name = "Counts" counts.Size = UDim2.new(1, -18, 0, 20) counts.Position = UDim2.fromOffset(9, 48) counts.BackgroundTransparency = 1 counts.Text = "Normal: 0 | Anomalys: 0" counts.TextColor3 = Color3.fromRGB(235, 235, 240) counts.Font = Enum.Font.GothamBold counts.TextSize = 14 counts.TextXAlignment = Enum.TextXAlignment.Left counts.Parent = main local tracked = Instance.new("TextLabel") tracked.Name = "Tracked" tracked.Size = UDim2.new(1, -18, 0, 16) tracked.Position = UDim2.fromOffset(9, 69) tracked.BackgroundTransparency = 1 tracked.Text = "Patients: 0 | Visitors: 0" tracked.TextColor3 = Color3.fromRGB(170, 170, 190) tracked.Font = Enum.Font.GothamMedium tracked.TextSize = 11 tracked.TextXAlignment = Enum.TextXAlignment.Left tracked.Parent = main local ignored = Instance.new("TextLabel") ignored.Name = "Ignored" ignored.Size = UDim2.new(1, -18, 0, 16) ignored.Position = UDim2.fromOffset(9, 85) ignored.BackgroundTransparency = 1 ignored.Text = "Ignored: 0" ignored.TextColor3 = Color3.fromRGB(150, 150, 165) ignored.Font = Enum.Font.GothamMedium ignored.TextSize = 11 ignored.TextXAlignment = Enum.TextXAlignment.Left ignored.Parent = main local forcedIgnored = Instance.new("TextLabel") forcedIgnored.Name = "ForcedIgnored" forcedIgnored.Size = UDim2.new(1, -18, 0, 16) forcedIgnored.Position = UDim2.fromOffset(9, 100) forcedIgnored.BackgroundTransparency = 1 forcedIgnored.Text = "Doctor, Ron, Barney, Ratthew ignored: 0" forcedIgnored.TextColor3 = Color3.fromRGB(150, 150, 165) forcedIgnored.Font = Enum.Font.GothamMedium forcedIgnored.TextSize = 10 forcedIgnored.TextXAlignment = Enum.TextXAlignment.Left forcedIgnored.Parent = main local barBack = Instance.new("Frame") barBack.Name = "BarBack" barBack.Size = UDim2.new(1, -18, 0, 5) barBack.Position = UDim2.fromOffset(9, 117) barBack.BackgroundColor3 = Color3.fromRGB(35, 35, 45) barBack.BorderSizePixel = 0 barBack.ClipsDescendants = true barBack.Parent = main local barBackCorner = Instance.new("UICorner") barBackCorner.CornerRadius = UDim.new(1, 0) barBackCorner.Parent = barBack local bar = Instance.new("Frame") bar.Name = "Bar" bar.Size = UDim2.new(0.25, 0, 1, 0) bar.Position = UDim2.new(0, 0, 0, 0) bar.BackgroundColor3 = Color3.fromRGB(255, 55, 75) bar.BorderSizePixel = 0 bar.Parent = barBack local barCorner = Instance.new("UICorner") barCorner.CornerRadius = UDim.new(1, 0) barCorner.Parent = bar local function updateToggleText() toggleButton.Text = opened and "HIDE" or "SHOW" toggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) toggleButton.TextStrokeTransparency = 1 end local function toggleGui() opened = not opened main.Visible = opened updateToggleText() end local function setPos() main.Position = UDim2.fromOffset(panelPos.X, panelPos.Y) toggleButton.Position = UDim2.fromOffset(panelPos.X + 234, panelPos.Y + 6) end local function startDrag(input) if input.UserInputType ~= Enum.UserInputType.MouseButton1 and input.UserInputType ~= Enum.UserInputType.Touch then return end dragging = true blockClick = false dragStart = input.Position startPos = panelPos input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false task.delay(0.2, function() blockClick = false end) end end) end main.InputBegan:Connect(startDrag) toggleButton.InputBegan:Connect(startDrag) UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == HOTKEY then toggleGui() end end) UserInputService.InputChanged:Connect(function(input) if not dragging then return end if input.UserInputType ~= Enum.UserInputType.MouseMovement and input.UserInputType ~= Enum.UserInputType.Touch then return end local delta = input.Position - dragStart if math.abs(delta.X) > 5 or math.abs(delta.Y) > 5 then blockClick = true end local cam = workspace.CurrentCamera local size = cam and cam.ViewportSize or Vector2.new(800, 600) panelPos = Vector2.new( math.clamp(startPos.X + delta.X, 0, math.max(0, size.X - 60)), math.clamp(startPos.Y + delta.Y, 0, math.max(0, size.Y - 35)) ) setPos() end) toggleButton.MouseEnter:Connect(function() toggleButton.BackgroundColor3 = Color3.fromRGB(190, 65, 110) end) toggleButton.MouseLeave:Connect(function() toggleButton.BackgroundColor3 = Color3.fromRGB(164, 53, 90) end) toggleButton.Activated:Connect(function() if blockClick then return end toggleGui() end) local pulseInfo = TweenInfo.new(0.8, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true) TweenService:Create(stroke, pulseInfo, { Transparency = 0.65 }):Play() TweenService:Create(bar, pulseInfo, { BackgroundColor3 = Color3.fromRGB(50, 255, 125) }):Play() task.spawn(function() while screenGui.Parent do bar.Position = UDim2.new(0, 0, 0, 0) local tween = TweenService:Create(bar, TweenInfo.new(1.1, Enum.EasingStyle.Linear), { Position = UDim2.new(0.75, 0, 0, 0) }) tween:Play() tween.Completed:Wait() end end) local function getNPCFolder() return workspace:FindFirstChild(npcs) end local function modelHasParts(model) for _, descendant in ipairs(model:GetDescendants()) do if descendant:IsA("BasePart") then return true end end return false end local function getDataValue(model, name) local attribute = model:GetAttribute(name) if attribute ~= nil then return attribute end local child = model:FindFirstChild(name) if child and child:IsA("ValueBase") then return child.Value end return nil end local function hasData(model, name) if model:GetAttribute(name) ~= nil then return true end if model:FindFirstChild(name) then return true end return false end local function isForcedIgnored(model) for flagName in pairs(IGNORED_FLAGS) do if hasData(model, flagName) then return true end end return false end local function isPatient(model) return getDataValue(model, patient) == true end local function isVisitor(model) return typeof(getDataValue(model, visitor)) == "number" end local function shouldScan(model) if isForcedIgnored(model) then return false end return isPatient(model) or isVisitor(model) end local function removeHighlight(model) local highlight = highlights[model] if highlight then highlight:Destroy() end highlights[model] = nil end local function getHighlight(model) if highlights[model] and highlights[model].Parent then return highlights[model] end local highlight = Instance.new("Highlight") highlight.Name = "SkinwalkerHighlight" highlight.Adornee = model highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.FillTransparency = 0.45 highlight.OutlineTransparency = 0 highlight.Parent = model highlights[model] = highlight return highlight end local function setHighlight(model, skinwalker) local highlight = getHighlight(model) if skinwalker then highlight.FillColor = RED_FILL highlight.OutlineColor = RED_OUTLINE else highlight.FillColor = GREEN_FILL highlight.OutlineColor = GREEN_OUTLINE end end local function cleanup(npcFolder) for model, highlight in pairs(highlights) do if not model.Parent or not model:IsDescendantOf(npcFolder) or not shouldScan(model) then if highlight then highlight:Destroy() end highlights[model] = nil end end end while true do local npcFolder = getNPCFolder() if npcFolder then local safeCount = 0 local skinwalkerCount = 0 local ignoredCount = 0 local forcedIgnoredCount = 0 local patientCount = 0 local visitorCount = 0 for _, item in ipairs(npcFolder:GetChildren()) do if item:IsA("Model") and modelHasParts(item) then if isForcedIgnored(item) then forcedIgnoredCount += 1 removeHighlight(item) else local patient = isPatient(item) local visitor = isVisitor(item) if patient then patientCount += 1 end if visitor and not patient then visitorCount += 1 end if patient or visitor then local skinwalker = getDataValue(item, anomaly) == true if skinwalker then skinwalkerCount += 1 else safeCount += 1 end setHighlight(item, skinwalker) else ignoredCount += 1 removeHighlight(item) end end end end cleanup(npcFolder) status.Text = "Scanning patients and visitors" counts.Text = "Normal: " .. safeCount .. " | Anomalys: " .. skinwalkerCount tracked.Text = "Patients: " .. patientCount .. " | Visitors: " .. visitorCount ignored.Text = "Ignored: " .. ignoredCount forcedIgnored.Text = "Doctor, Ron, Barney, Ratthew ignored: " .. forcedIgnoredCount if skinwalkerCount > 0 then status.TextColor3 = Color3.fromRGB(255, 95, 110) stroke.Color = Color3.fromRGB(255, 55, 75) else status.TextColor3 = Color3.fromRGB(90, 255, 145) stroke.Color = Color3.fromRGB(60, 255, 130) end else for model in pairs(highlights) do removeHighlight(model) end status.Text = "Missing folder: workspace.NPCs" status.TextColor3 = Color3.fromRGB(255, 190, 80) counts.Text = "Normal: 0 | Anomalys: 0" tracked.Text = "Patients: 0 | Visitors: 0" ignored.Text = "Ignored: 0" forcedIgnored.Text = "Doctor, Ron, Barney, Ratthew ignored: 0" end task.wait(CHECK_DELAY) end