-- BOT DISGUISE SYSTEM (FULL ONE SCRIPT) local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer ------------------------------------------------ -- CHARACTER REFRESH HANDLING ------------------------------------------------ local char, humanoid, root local function bindCharacter(c) char = c humanoid = char:WaitForChild("Humanoid") root = char:WaitForChild("HumanoidRootPart") end bindCharacter(player.Character or player.CharacterAdded:Wait()) player.CharacterAdded:Connect(bindCharacter) ------------------------------------------------ -- GUI ------------------------------------------------ local gui = Instance.new("ScreenGui") gui.Name = "BotDisguiseGui" gui.Parent = player:WaitForChild("PlayerGui") local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 260, 0, 240) frame.Position = UDim2.new(0.05, 0, 0.3, 0) frame.BackgroundColor3 = Color3.fromRGB(0,0,0) frame.Active = true frame.Draggable = true frame.Parent = gui local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(255,0,0) stroke.Thickness = 2 stroke.Parent = frame local box = Instance.new("TextBox") box.Size = UDim2.new(0, 220, 0, 40) box.Position = UDim2.new(0, 20, 0, 15) box.PlaceholderText = "Pathfind / Common / Sentient Entity" box.TextColor3 = Color3.fromRGB(255,255,255) box.BackgroundColor3 = Color3.fromRGB(0,0,0) box.BorderColor3 = Color3.fromRGB(255,0,0) box.Parent = frame local setBtn = Instance.new("TextButton") setBtn.Size = UDim2.new(0, 220, 0, 40) setBtn.Position = UDim2.new(0, 20, 0, 70) setBtn.Text = "Change NPC Type" setBtn.TextColor3 = Color3.fromRGB(255,255,255) setBtn.BackgroundColor3 = Color3.fromRGB(0,0,0) setBtn.BorderColor3 = Color3.fromRGB(255,0,0) setBtn.Parent = frame local controlBtn = Instance.new("TextButton") controlBtn.Size = UDim2.new(0, 220, 0, 40) controlBtn.Position = UDim2.new(0, 20, 0, 120) controlBtn.Text = "Let him Control" controlBtn.TextColor3 = Color3.fromRGB(255,255,255) controlBtn.BackgroundColor3 = Color3.fromRGB(0,0,0) controlBtn.BorderColor3 = Color3.fromRGB(255,0,0) controlBtn.Parent = frame local disguiseBtn = Instance.new("TextButton") disguiseBtn.Size = UDim2.new(0, 220, 0, 40) disguiseBtn.Position = UDim2.new(0, 20, 0, 170) disguiseBtn.Text = "Disguise as NPC" disguiseBtn.TextColor3 = Color3.fromRGB(255,255,255) disguiseBtn.BackgroundColor3 = Color3.fromRGB(0,0,0) disguiseBtn.BorderColor3 = Color3.fromRGB(255,0,0) disguiseBtn.Parent = frame ------------------------------------------------ -- STATE ------------------------------------------------ local mode = "" local active = false local disguised = false local lastAttacker = nil ------------------------------------------------ -- DISGUISE FUNCTION ------------------------------------------------ local function disguiseAsNPC() if not char then return end disguised = not disguised -- reset appearance if toggled off if not disguised then print("Disguise removed") return end -- remove accessories for _, v in ipairs(char:GetChildren()) do if v:IsA("Accessory") then v:Destroy() end end -- simple NPC coloring local bodyColors = char:FindFirstChildOfClass("BodyColors") if bodyColors then local c = Color3.fromRGB(163, 162, 165) bodyColors.HeadColor3 = c bodyColors.LeftArmColor3 = c bodyColors.RightArmColor3 = c bodyColors.LeftLegColor3 = c bodyColors.RightLegColor3 = c bodyColors.TorsoColor3 = c end -- default NPC face local head = char:FindFirstChild("Head") if head then local face = head:FindFirstChild("face") if face then face.Texture = "rbxasset://textures/face.png" end end print("Disguised as NPC") end ------------------------------------------------ -- ATTACK DETECTION (simple) ------------------------------------------------ local function trackDamage() if not humanoid then return end local lastHealth = humanoid.Health humanoid.HealthChanged:Connect(function(h) if h < lastHealth then -- find nearest “attacker” local closest, dist = nil, math.huge for _, plr in pairs(Players:GetPlayers()) do if plr ~= player and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then local d = (plr.Character.HumanoidRootPart.Position - root.Position).Magnitude if d < dist and d < 60 then dist = d closest = plr.Character end end end lastAttacker = closest end lastHealth = h end) end ------------------------------------------------ -- HELPERS ------------------------------------------------ local function getTarget() return workspace:FindFirstChild("TargetDummy") end local function isBeingWatched() for _, plr in pairs(Players:GetPlayers()) do if plr ~= player then local c = plr.Character if c and c:FindFirstChild("Head") and root then local head = c.Head local dir = (root.Position - head.Position).Unit local look = head.CFrame.LookVector if look:Dot(dir) > 0.75 then return true end end end end return false end local function flee(attacker) if not attacker or not attacker:FindFirstChild("HumanoidRootPart") then return end local dir = (root.Position - attacker.HumanoidRootPart.Position).Unit humanoid.WalkSpeed = 24 humanoid:MoveTo(root.Position + dir * 60) end ------------------------------------------------ -- UI BUTTONS ------------------------------------------------ setBtn.MouseButton1Click:Connect(function() mode = box.Text end) controlBtn.MouseButton1Click:Connect(function() active = not active if active then trackDamage() end end) disguiseBtn.MouseButton1Click:Connect(disguiseAsNPC) ------------------------------------------------ -- MAIN LOOP ------------------------------------------------ RunService.RenderStepped:Connect(function() if not active then return end if not humanoid or not root then return end -- PRIORITY: FLEE IF ATTACKED if lastAttacker and lastAttacker.Parent then flee(lastAttacker) return end if mode == "Pathfind" then local target = getTarget() if target then humanoid:MoveTo(target.Position) end elseif mode == "Common" then if math.random(1,40) == 1 then local offset = Vector3.new(math.random(-20,20),0,math.random(-20,20)) humanoid:MoveTo(root.Position + offset) end elseif mode == "Sentient Entity" then if isBeingWatched() then humanoid.WalkSpeed = 0 else humanoid.WalkSpeed = 16 end end end)