Bot Disguise Gui
Key RequiredUniversal

Bot Disguise Gui

Universal ScriptWeakestDummy344WeakestDummy344 1.1K views 426 executesUpdated Jun 27, 2026
Unrated
00
Lua Script•240 lines (6422 chars)
-- 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)

Features & Information

1: Created an Account Named something like BotAccount4721 2: Execute The Script 3: Type Common, Pathfind, Or Sentient Entity 4: People Will Think you're a Bot Note: This is Good for catching Toxic People, Gooners and more

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts