(BETA) : The Archives [Hub]
Key Required

(BETA) : The Archives [Hub]

DOORS 🚨N0rxplaysN0rxplays 5.2K views 11.7K executesUpdated Sep 2, 2026
1.7/ 5(3 votes)
1233% Positive
Lua Script•1480 lines (27127 chars)
--[[
    Doors: The Archives Hub

    Features:
    - Noclip
    - Fullbright
    - WalkSpeed slider: 17-21
    - Entity warnings
    - Infinite jump (~25 studs vertical height)
    - Item ESP with distance
    - ESP refresh every 2 seconds
]]

local Players = game:GetService("Players")
local Lighting = game:GetService("Lighting")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")

----------------------------------------------------------------
-- CLEAN OLD GUI
----------------------------------------------------------------

local oldGui = playerGui:FindFirstChild("DoorsArchivesHub")
if oldGui then
	oldGui:Destroy()
end

----------------------------------------------------------------
-- SETTINGS
----------------------------------------------------------------

local settings = {
	Noclip = false,
	Fullbright = false,
	InfiniteJump = false,
	ItemESP = false,

	WalkSpeed = 17,
	JumpHeightStuds = 25,

	ESPUpdateRate = 2,
}

----------------------------------------------------------------
-- CHARACTER
----------------------------------------------------------------

local character
local humanoid
local rootPart

local function updateCharacter(char)
	character = char
	humanoid = char:WaitForChild("Humanoid")
	rootPart = char:WaitForChild("HumanoidRootPart")

	humanoid.WalkSpeed = settings.WalkSpeed
end

if player.Character then
	task.spawn(updateCharacter, player.Character)
end

player.CharacterAdded:Connect(updateCharacter)

----------------------------------------------------------------
-- GUI
----------------------------------------------------------------

local gui = Instance.new("ScreenGui")
gui.Name = "DoorsArchivesHub"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = false
gui.Parent = playerGui

local frame = Instance.new("Frame")
frame.Name = "Main"
frame.Size = UDim2.fromOffset(440, 570)
frame.Position = UDim2.new(0.5, -220, 0.1, 0)
frame.BackgroundColor3 = Color3.fromRGB(18, 15, 13)
frame.BorderSizePixel = 0
frame.Parent = gui

local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 12)
corner.Parent = frame

local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(175, 135, 85)
stroke.Thickness = 3
stroke.Parent = frame

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 65)
title.BackgroundTransparency = 1
title.Text = "Doors: The Archives Hub"
title.TextColor3 = Color3.fromRGB(235, 220, 190)
title.TextScaled = true
title.Font = Enum.Font.GothamBlack
title.Parent = frame

local titlePadding = Instance.new("UIPadding")
titlePadding.PaddingLeft = UDim.new(0, 18)
titlePadding.PaddingRight = UDim.new(0, 18)
titlePadding.PaddingTop = UDim.new(0, 10)
titlePadding.PaddingBottom = UDim.new(0, 10)
titlePadding.Parent = title

local container = Instance.new("Frame")
container.Size = UDim2.new(1, -30, 1, -80)
container.Position = UDim2.fromOffset(15, 70)
container.BackgroundTransparency = 1
container.Parent = frame

local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 9)
layout.FillDirection = Enum.FillDirection.Vertical
layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Parent = container

----------------------------------------------------------------
-- GUI HELPERS
----------------------------------------------------------------

local function makeButton(text)
	local button = Instance.new("TextButton")

	button.Size = UDim2.new(1, 0, 0, 48)
	button.BackgroundColor3 = Color3.fromRGB(39, 33, 28)
	button.BorderSizePixel = 0

	button.Text = text
	button.TextColor3 = Color3.fromRGB(235, 220, 190)
	button.TextSize = 18
	button.Font = Enum.Font.GothamBold

	local buttonCorner = Instance.new("UICorner")
	buttonCorner.CornerRadius = UDim.new(0, 8)
	buttonCorner.Parent = button

	local buttonStroke = Instance.new("UIStroke")
	buttonStroke.Color = Color3.fromRGB(91, 72, 52)
	buttonStroke.Thickness = 1
	buttonStroke.Parent = button

	button.Parent = container

	return button
end

local function updateToggleButton(button, titleText, enabled)
	if enabled then
		button.Text = titleText .. ": ON"
		button.BackgroundColor3 = Color3.fromRGB(55, 72, 45)
	else
		button.Text = titleText .. ": OFF"
		button.BackgroundColor3 = Color3.fromRGB(39, 33, 28)
	end
end

----------------------------------------------------------------
-- NOCLIP
----------------------------------------------------------------

local noclipButton = makeButton("Noclip: OFF")

noclipButton.MouseButton1Click:Connect(function()
	settings.Noclip = not settings.Noclip

	updateToggleButton(
		noclipButton,
		"Noclip",
		settings.Noclip
	)
end)

RunService.Stepped:Connect(function()
	if not settings.Noclip then
		return
	end

	if not character then
		return
	end

	for _, object in ipairs(character:GetDescendants()) do
		if object:IsA("BasePart") then
			object.CanCollide = false
		end
	end
end)

----------------------------------------------------------------
-- FULLBRIGHT
----------------------------------------------------------------

local oldLighting = {
	Brightness = Lighting.Brightness,
	ClockTime = Lighting.ClockTime,
	FogEnd = Lighting.FogEnd,
	GlobalShadows = Lighting.GlobalShadows,
	Ambient = Lighting.Ambient,
	OutdoorAmbient = Lighting.OutdoorAmbient,
}

local fullbrightButton = makeButton("Fullbright: OFF")

local function enableFullbright()
	Lighting.Brightness = 3
	Lighting.ClockTime = 14
	Lighting.FogEnd = 100000
	Lighting.GlobalShadows = false

	Lighting.Ambient = Color3.fromRGB(
		255,
		255,
		255
	)

	Lighting.OutdoorAmbient = Color3.fromRGB(
		255,
		255,
		255
	)
end

local function disableFullbright()
	Lighting.Brightness = oldLighting.Brightness
	Lighting.ClockTime = oldLighting.ClockTime
	Lighting.FogEnd = oldLighting.FogEnd
	Lighting.GlobalShadows = oldLighting.GlobalShadows
	Lighting.Ambient = oldLighting.Ambient
	Lighting.OutdoorAmbient = oldLighting.OutdoorAmbient
end

fullbrightButton.MouseButton1Click:Connect(function()
	settings.Fullbright = not settings.Fullbright

	if settings.Fullbright then
		enableFullbright()
	else
		disableFullbright()
	end

	updateToggleButton(
		fullbrightButton,
		"Fullbright",
		settings.Fullbright
	)
end)

----------------------------------------------------------------
-- SPEED SLIDER
----------------------------------------------------------------

local speedFrame = Instance.new("Frame")
speedFrame.Size = UDim2.new(1, 0, 0, 75)
speedFrame.BackgroundColor3 = Color3.fromRGB(39, 33, 28)
speedFrame.BorderSizePixel = 0
speedFrame.Parent = container

local speedCorner = Instance.new("UICorner")
speedCorner.CornerRadius = UDim.new(0, 8)
speedCorner.Parent = speedFrame

local speedLabel = Instance.new("TextLabel")
speedLabel.Size = UDim2.new(1, 0, 0, 32)
speedLabel.BackgroundTransparency = 1
speedLabel.Text = "Speed: 17 studs/sec"
speedLabel.TextColor3 = Color3.fromRGB(235, 220, 190)
speedLabel.Font = Enum.Font.GothamBold
speedLabel.TextSize = 17
speedLabel.Parent = speedFrame

local sliderBar = Instance.new("Frame")
sliderBar.Size = UDim2.new(1, -40, 0, 10)
sliderBar.Position = UDim2.new(0, 20, 0, 49)
sliderBar.BackgroundColor3 = Color3.fromRGB(82, 68, 54)
sliderBar.BorderSizePixel = 0
sliderBar.Parent = speedFrame

local sliderCorner = Instance.new("UICorner")
sliderCorner.CornerRadius = UDim.new(1, 0)
sliderCorner.Parent = sliderBar

local sliderKnob = Instance.new("TextButton")
sliderKnob.Size = UDim2.fromOffset(22, 22)
sliderKnob.AnchorPoint = Vector2.new(0.5, 0.5)
sliderKnob.Position = UDim2.new(0, 0, 0.5, 0)

sliderKnob.BackgroundColor3 = Color3.fromRGB(
	235,
	220,
	190
)

sliderKnob.BorderSizePixel = 0
sliderKnob.Text = ""
sliderKnob.Parent = sliderBar

local knobCorner = Instance.new("UICorner")
knobCorner.CornerRadius = UDim.new(1, 0)
knobCorner.Parent = sliderKnob

local MIN_SPEED = 17
local MAX_SPEED = 21

local draggingSlider = false

local function setSpeedFromX(mouseX)
	local left = sliderBar.AbsolutePosition.X
	local width = sliderBar.AbsoluteSize.X

	if width <= 0 then
		return
	end

	local alpha = math.clamp(
		(mouseX - left) / width,
		0,
		1
	)

	local rawSpeed =
		MIN_SPEED
		+
		(MAX_SPEED - MIN_SPEED)
		* alpha

	local speed = math.round(rawSpeed)

	settings.WalkSpeed = speed

	local normalized =
		(speed - MIN_SPEED)
		/
		(MAX_SPEED - MIN_SPEED)

	sliderKnob.Position =
		UDim2.new(
			normalized,
			0,
			0.5,
			0
		)

	speedLabel.Text =
		"Speed: "
		.. tostring(speed)
		.. " studs/sec"

	if humanoid then
		humanoid.WalkSpeed = speed
	end
end

sliderKnob.MouseButton1Down:Connect(function()
	draggingSlider = true
end)

sliderBar.InputBegan:Connect(function(input)
	if
		input.UserInputType
		== Enum.UserInputType.MouseButton1
	then
		draggingSlider = true
		setSpeedFromX(input.Position.X)
	end
end)

UserInputService.InputChanged:Connect(function(input)
	if not draggingSlider then
		return
	end

	if
		input.UserInputType
		== Enum.UserInputType.MouseMovement
	then
		setSpeedFromX(input.Position.X)
	end
end)

UserInputService.InputEnded:Connect(function(input)
	if
		input.UserInputType
		== Enum.UserInputType.MouseButton1
	then
		draggingSlider = false
	end
end)

----------------------------------------------------------------
-- ENTITY WARNING
----------------------------------------------------------------

local entityWarningButton =
	makeButton("Entity Warning: ON")

local entityWarningsEnabled = true

updateToggleButton(
	entityWarningButton,
	"Entity Warning",
	true
)

entityWarningButton.MouseButton1Click:Connect(function()
	entityWarningsEnabled =
		not entityWarningsEnabled

	updateToggleButton(
		entityWarningButton,
		"Entity Warning",
		entityWarningsEnabled
	)
end)

----------------------------------------------------------------
-- ENTITY NAME NORMALIZER
----------------------------------------------------------------

local function normalizeName(name)
	name = string.lower(name)

	-- Remove spaces, punctuation, underscores, etc.
	name = string.gsub(
		name,
		"[^%w]",
		""
	)

	return name
end

----------------------------------------------------------------
-- LEVENSHTEIN DISTANCE
--
-- Allows small spelling mistakes:
--
-- AmbushMoving
-- AmbshMoving
-- AmbushMovin
-- ambush_moving
-- Ambush-Moving
-- etc.
----------------------------------------------------------------

local function levenshtein(a, b)
	local lenA = #a
	local lenB = #b

	local matrix = {}

	for i = 0, lenA do
		matrix[i] = {}
		matrix[i][0] = i
	end

	for j = 0, lenB do
		matrix[0][j] = j
	end

	for i = 1, lenA do
		for j = 1, lenB do
			local cost

			if
				string.sub(a, i, i)
				==
				string.sub(b, j, j)
			then
				cost = 0
			else
				cost = 1
			end

			matrix[i][j] =
				math.min(
					matrix[i - 1][j] + 1,
					matrix[i][j - 1] + 1,
					matrix[i - 1][j - 1] + cost
				)
		end
	end

	return matrix[lenA][lenB]
end

----------------------------------------------------------------
-- ENTITY DATABASE
----------------------------------------------------------------

local entities = {
	{
		Display = "Ambush",
		Aliases = {
			"AmbushMoving",
			"Ambush Move",
			"AmbushMover",
			"Ambush",
		},
	},

	{
		Display = "Rush",
		Aliases = {
			"RushMoving",
			"Rush Move",
			"RushMover",
			"Rush",
		},
	},

	{
		Display = "A-60",
		Aliases = {
			"A60Moving",
			"A-60Moving",
			"A_60Moving",
			"A60 Moving",
			"A60",
		},
	},

	{
		Display = "A-120",
		Aliases = {
			"A120Moving",
			"A-120Moving",
			"A_120Moving",
			"A120 Moving",
			"A120",
		},
	},

	{
		Display = "Bash",
		Aliases = {
			"BashMoving",
			"Bash Move",
			"BashMover",
			"Bash",
		},
	},

	{
		Display = "Scribbles",
		Aliases = {
			"ScribblesMoving",
			"ScribbleMoving",
			"SrcibblesMoving",
			"ScrriblesMoving",
			"Scribbles Move",
			"Scribbles",
		},
	},
}

local normalizedEntityAliases = {}

for _, entity in ipairs(entities) do
	for _, alias in ipairs(entity.Aliases) do
		table.insert(
			normalizedEntityAliases,
			{
				Name = entity.Display,
				Alias = normalizeName(alias),
			}
		)
	end
end

local function identifyEntity(name)
	local normalized =
		normalizeName(name)

	for _, entry in ipairs(
		normalizedEntityAliases
	) do

		if normalized == entry.Alias then
			return entry.Name
		end

		-- Only fuzzy-match reasonably similar
		-- length names to reduce false warnings.

		if
			math.abs(
				#normalized - #entry.Alias
			)
			<= 2
		then
			local distance =
				levenshtein(
					normalized,
					entry.Alias
				)

			if distance <= 2 then
				return entry.Name
			end
		end
	end

	return nil
end

----------------------------------------------------------------
-- WARNING GUI
----------------------------------------------------------------

local warningFrame = Instance.new("Frame")
warningFrame.Size = UDim2.fromOffset(500, 75)

warningFrame.Position =
	UDim2.new(
		0.5,
		-250,
		0.02,
		0
	)

warningFrame.BackgroundColor3 =
	Color3.fromRGB(
		100,
		20,
		20
	)

warningFrame.BorderSizePixel = 0
warningFrame.Visible = false
warningFrame.Parent = gui

local warningCorner =
	Instance.new("UICorner")

warningCorner.CornerRadius =
	UDim.new(0, 10)

warningCorner.Parent =
	warningFrame

local warningStroke =
	Instance.new("UIStroke")

warningStroke.Color =
	Color3.fromRGB(
		255,
		90,
		90
	)

warningStroke.Thickness = 3
warningStroke.Parent = warningFrame

local warningText =
	Instance.new("TextLabel")

warningText.Size =
	UDim2.fromScale(1, 1)

warningText.BackgroundTransparency = 1

warningText.TextColor3 =
	Color3.fromRGB(
		255,
		230,
		220
	)

warningText.TextScaled = true
warningText.Font =
	Enum.Font.GothamBlack

warningText.Parent =
	warningFrame

local warningID = 0

local function showWarning(entityName)
	if not entityWarningsEnabled then
		return
	end

	warningID += 1

	local thisWarning =
		warningID

	warningText.Text =
		entityName
		.. " is moving!"

	warningFrame.Visible = true

	task.delay(4, function()
		if
			thisWarning
			==
			warningID
		then
			warningFrame.Visible = false
		end
	end)
end

----------------------------------------------------------------
-- WATCH FOR ENTITIES
----------------------------------------------------------------

local warnedInstances = {}

local function inspectEntityObject(object)
	if warnedInstances[object] then
		return
	end

	local entity =
		identifyEntity(object.Name)

	if entity then
		warnedInstances[object] = true
		showWarning(entity)
	end
end

for _, object in ipairs(
	Workspace:GetDescendants()
) do
	inspectEntityObject(object)
end

Workspace.DescendantAdded:Connect(
	function(object)

		task.defer(function()
			inspectEntityObject(object)
		end)

	end
)

Workspace.DescendantRemoving:Connect(
	function(object)

		warnedInstances[object] = nil

	end
)

----------------------------------------------------------------
-- INFINITE JUMP
----------------------------------------------------------------

local jumpButton =
	makeButton("Infinite Jump: OFF")

jumpButton.MouseButton1Click:Connect(function()
	settings.InfiniteJump =
		not settings.InfiniteJump

	updateToggleButton(
		jumpButton,
		"Infinite Jump",
		settings.InfiniteJump
	)
end)

----------------------------------------------------------------
-- Calculate velocity required to rise ~25 studs.
--
-- v = sqrt(2gh)
--
-- Roblox default gravity is usually 196.2,
-- but using Workspace.Gravity makes it work
-- with custom gravity too.
----------------------------------------------------------------

local function getJumpVelocity()
	local height =
		settings.JumpHeightStuds

	local gravity =
		Workspace.Gravity

	return math.sqrt(
		2
		*
		gravity
		*
		height
	)
end

UserInputService.JumpRequest:Connect(function()
	if not settings.InfiniteJump then
		return
	end

	if
		not rootPart
		or not humanoid
		or humanoid.Health <= 0
	then
		return
	end

	local currentVelocity =
		rootPart.AssemblyLinearVelocity

	rootPart.AssemblyLinearVelocity =
		Vector3.new(
			currentVelocity.X,
			getJumpVelocity(),
			currentVelocity.Z
		)

	humanoid:ChangeState(
		Enum.HumanoidStateType.Jumping
	)
end)

----------------------------------------------------------------
-- ITEM ESP
----------------------------------------------------------------

local itemESPButton =
	makeButton("Item ESP: OFF")

----------------------------------------------------------------
-- ITEM DATABASE
----------------------------------------------------------------

local itemNames = {
	"STARLIGHT BOTTLE",
	"BATTERY PACK",
	"STRAPLIGHT",
	"SKELETON KEY",
	"LOCKPICK",
	"LASER POINTER",
	"SHEARS",
	"FLASHLIGHT",
	"SMOOTHIE",
	"MULTITOOL",
	"CRUCIFIX",
	"VITAMINS",
	"PIZZA",
	"MINI-SHIELD POTION",
	"SHIELD POTION",
	"BATTERIES",
	"BANDAGES",
	"GREEN HERB",
	"GLITCH FRAGMENT",
	"ELECTRICAL ROOM KEY",
	"BOOK",
	"HOTEL KEY",
	"BREAKER POLE",
	"FUSE",
	"DONUT",
	"GWEEN SODA",
	"BREAD",
	"CHEESE",
	"BANDAGE PACK",
	"STARLIGHT VIAL",
	"ALARM CLOCK",
	"BULKLIGHT",
	"CANDLE",
	"GLOWSTICK",
	"RETRO KEY",
	"HOLY HAND GRENADE",
	"LIGHTER",
}

----------------------------------------------------------------
-- EXTRA ALIASES / MISSPELLINGS
----------------------------------------------------------------

local extraItemAliases = {

	-- LIGHTER
	["LITER"] = "LIGHTER",
	["LIGTER"] = "LIGHTER",
	["LIGHER"] = "LIGHTER",
	["LIGHTER"] = "LIGHTER",
	["LIGHHTER"] = "LIGHTER",
	["LIGTHER"] = "LIGHTER",
	["LIGHETR"] = "LIGHTER",

	-- SCRATCH/FORMAT VARIANTS
	["STARLIGHTBOTTLE"] =
		"STARLIGHT BOTTLE",

	["BATTERYPACK"] =
		"BATTERY PACK",

	["SKELETONKEY"] =
		"SKELETON KEY",

	["LASERPOINTER"] =
		"LASER POINTER",

	["MINISHIELDPOTION"] =
		"MINI-SHIELD POTION",

	["SHIELDPOTION"] =
		"SHIELD POTION",

	["GREENHERB"] =
		"GREEN HERB",

	["GLITCHFRAGMENT"] =
		"GLITCH FRAGMENT",

	["ELECTRICALROOMKEY"] =
		"ELECTRICAL ROOM KEY",

	["HOTELKEY"] =
		"HOTEL KEY",

	["BREAKERPOLE"] =
		"BREAKER POLE",

	["BANDAGEPACK"] =
		"BANDAGE PACK",

	["STARLIGHTVIAL"] =
		"STARLIGHT VIAL",

	["ALARMCLOCK"] =
		"ALARM CLOCK",

	["RETROKEY"] =
		"RETRO KEY",

	["HOLYHANDGRENADE"] =
		"HOLY HAND GRENADE",

	["GWEENSODA"] =
		"GWEEN SODA",

	-- common "green soda" variation
	["GREENSODA"] =
		"GWEEN SODA",
}

----------------------------------------------------------------
-- NORMALIZED ITEM LOOKUP
----------------------------------------------------------------

local itemLookup = {}

for _, itemName in ipairs(itemNames) do
	itemLookup[
		normalizeName(itemName)
	] = itemName
end

for alias, realName in pairs(
	extraItemAliases
) do
	itemLookup[
		normalizeName(alias)
	] = realName
end

----------------------------------------------------------------
-- FUZZY ITEM MATCHING
----------------------------------------------------------------

local function identifyItem(name)
	local normalized =
		normalizeName(name)

	local exact =
		itemLookup[normalized]

	if exact then
		return exact
	end

	-- Use fuzzy spelling matching,
	-- but only for sufficiently long names.
	if #normalized < 5 then
		return nil
	end

	local bestMatch = nil
	local bestDistance = math.huge

	for alias, displayName in pairs(
		itemLookup
	) do

		if
			math.abs(
				#normalized - #alias
			)
			<= 2
		then

			local distance =
				levenshtein(
					normalized,
					alias
				)

			if distance < bestDistance then
				bestDistance = distance
				bestMatch = displayName
			end
		end
	end

	if bestDistance <= 2 then
		return bestMatch
	end

	return nil
end

----------------------------------------------------------------
-- ESP STORAGE
----------------------------------------------------------------

local activeESP = {}

local function getObjectPart(object)
	if object:IsA("BasePart") then
		return object
	end

	if object:IsA("Tool") then
		return object:FindFirstChildWhichIsA(
			"BasePart",
			true
		)
	end

	if object:IsA("Model") then
		if object.PrimaryPart then
			return object.PrimaryPart
		end

		return object:FindFirstChildWhichIsA(
			"BasePart",
			true
		)
	end

	return nil
end

----------------------------------------------------------------
-- CREATE ESP
----------------------------------------------------------------

local function createESP(
	object,
	displayName
)

	if activeESP[object] then
		return
	end

	local part =
		getObjectPart(object)

	if not part then
		return
	end

	------------------------------------------------------------
	-- HIGHLIGHT
	------------------------------------------------------------

	local highlight =
		Instance.new("Highlight")

	highlight.Name =
		"ArchivesItemESP"

	highlight.Adornee =
		object

	highlight.DepthMode =
		Enum.HighlightDepthMode.AlwaysOnTop

	highlight.FillTransparency = 0.65
	highlight.OutlineTransparency = 0

	highlight.Parent = gui

	------------------------------------------------------------
	-- BILLBOARD
	------------------------------------------------------------

	local billboard =
		Instance.new("BillboardGui")

	billboard.Name =
		"ArchivesItemLabel"

	billboard.Adornee = part

	billboard.Size =
		UDim2.fromOffset(
			230,
			55
		)

	billboard.StudsOffset =
		Vector3.new(
			0,
			2.5,
			0
		)

	billboard.AlwaysOnTop = true
	billboard.Parent = gui

	local label =
		Instance.new("TextLabel")

	label.Size =
		UDim2.fromScale(1, 1)

	label.BackgroundColor3 =
		Color3.fromRGB(
			20,
			17,
			14
		)

	label.BackgroundTransparency =
		0.2

	label.TextColor3 =
		Color3.fromRGB(
			255,
			233,
			176
		)

	label.TextStrokeTransparency =
		0.4

	label.TextScaled = true

	label.Font =
		Enum.Font.GothamBold

	label.Parent =
		billboard

	local labelCorner =
		Instance.new("UICorner")

	labelCorner.CornerRadius =
		UDim.new(0, 6)

	labelCorner.Parent =
		label

	activeESP[object] = {
		Highlight = highlight,
		Billboard = billboard,
		Label = label,
		Part = part,
		DisplayName = displayName,
	}
end

----------------------------------------------------------------
-- REMOVE ESP
----------------------------------------------------------------

local function removeESP(object)
	local data =
		activeESP[object]

	if not data then
		return
	end

	if data.Highlight then
		data.Highlight:Destroy()
	end

	if data.Billboard then
		data.Billboard:Destroy()
	end

	activeESP[object] = nil
end

local function clearAllESP()
	local objects = {}

	for object in pairs(activeESP) do
		table.insert(objects, object)
	end

	for _, object in ipairs(objects) do
		removeESP(object)
	end
end

----------------------------------------------------------------
-- DETERMINE WHICH INSTANCE COUNTS AS ITEM
----------------------------------------------------------------

local function inspectItem(object)
	if activeESP[object] then
		return
	end

	-- Prefer Tools and Models because otherwise every
	-- child part of a model could get its own label.

	if
		not object:IsA("Tool")
		and not object:IsA("Model")
		and not object:IsA("BasePart")
	then
		return
	end

	-- Don't tag pieces nested inside a Tool/Model that is
	-- already recognized as the actual item.

	local parent =
		object.Parent

	if parent then
		if
			parent:IsA("Tool")
			or parent:IsA("Model")
		then

			if identifyItem(parent.Name) then
				return
			end
		end
	end

	local itemName =
		identifyItem(object.Name)

	if itemName then
		createESP(
			object,
			itemName
		)
	end
end

----------------------------------------------------------------
-- SCAN ITEMS
----------------------------------------------------------------

local function scanItems()
	if not settings.ItemESP then
		return
	end

	for _, object in ipairs(
		Workspace:GetDescendants()
	) do
		inspectItem(object)
	end
end

----------------------------------------------------------------
-- UPDATE DISTANCES
----------------------------------------------------------------

local function updateESPDistances()
	if not rootPart then
		return
	end

	local removeList = {}

	for object, data in pairs(
		activeESP
	) do

		if
			not object.Parent
			or not data.Part
			or not data.Part.Parent
		then
			table.insert(
				removeList,
				object
			)
		else
			local distance =
				(
					rootPart.Position
					-
					data.Part.Position
				).Magnitude

			data.Label.Text =
				data.DisplayName
				.. "\n"
				.. tostring(
					math.floor(
						distance + 0.5
					)
				)
				.. " studs"
		end
	end

	for _, object in ipairs(removeList) do
		removeESP(object)
	end
end

----------------------------------------------------------------
-- ESP BUTTON
----------------------------------------------------------------

itemESPButton.MouseButton1Click:Connect(function()
	settings.ItemESP =
		not settings.ItemESP

	updateToggleButton(
		itemESPButton,
		"Item ESP",
		settings.ItemESP
	)

	if settings.ItemESP then
		scanItems()
		updateESPDistances()
	else
		clearAllESP()
	end
end)

----------------------------------------------------------------
-- WATCH FOR NEW ITEMS
----------------------------------------------------------------

Workspace.DescendantAdded:Connect(function(object)
	if not settings.ItemESP then
		return
	end

	task.defer(function()
		inspectItem(object)
	end)
end)

Workspace.DescendantRemoving:Connect(
	function(object)

		if activeESP[object] then
			removeESP(object)
		end

	end
)

----------------------------------------------------------------
-- UPDATE ESP EVERY 2 SECONDS
----------------------------------------------------------------

task.spawn(function()
	while gui.Parent do
		if settings.ItemESP then
			scanItems()
			updateESPDistances()
		end

		task.wait(
			settings.ESPUpdateRate
		)
	end
end)

----------------------------------------------------------------
-- KEEP SPEED APPLIED
----------------------------------------------------------------

task.spawn(function()
	while gui.Parent do
		if
			humanoid
			and humanoid.Parent
			and humanoid.WalkSpeed
				~= settings.WalkSpeed
		then
			humanoid.WalkSpeed =
				settings.WalkSpeed
		end

		task.wait(0.5)
	end
end)

----------------------------------------------------------------
-- INITIAL SLIDER LOCATION
----------------------------------------------------------------

task.defer(function()
	setSpeedFromX(
		sliderBar.AbsolutePosition.X
	)
end)

----------------------------------------------------------------
-- OPTIONAL GUI DRAGGING
----------------------------------------------------------------

local draggingWindow = false
local dragStart
local startPosition

title.InputBegan:Connect(function(input)
	if
		input.UserInputType
		== Enum.UserInputType.MouseButton1
	then
		draggingWindow = true
		dragStart = input.Position
		startPosition = frame.Position
	end
end)

UserInputService.InputChanged:Connect(function(input)
	if not draggingWindow then
		return
	end

	if
		input.UserInputType
		~= Enum.UserInputType.MouseMovement
	then
		return
	end

	local delta =
		input.Position - dragStart

	frame.Position =
		UDim2.new(
			startPosition.X.Scale,
			startPosition.X.Offset
				+ delta.X,

			startPosition.Y.Scale,
			startPosition.Y.Offset
				+ delta.Y
		)
end)

UserInputService.InputEnded:Connect(function(input)
	if
		input.UserInputType
		== Enum.UserInputType.MouseButton1
	then
		draggingWindow = false
	end
end)

print(
	"[Doors Archives Hub] Loaded successfully."
)

Features & Information

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]===========[+]===========[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀=[+⠀⠀⠀⠀⠀⠀⠀Inf Jumping⠀⠀⠀⠀⠀⠀⠀⠀+]= ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀=[+⠀⠀⠀⠀⠀⠀⠀ESP⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀+]= ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀=[+⠀⠀⠀⠀⠀⠀⠀Enitiy Warning⠀⠀⠀⠀⠀⠀+]= ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀=[+⠀⠀⠀⠀⠀⠀⠀Fullbright⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀+]= ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀=[+⠀⠀⠀⠀⠀⠀⠀Walkspeed⠀⠀⠀⠀⠀⠀⠀⠀⠀+]= ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀=[+⠀⠀⠀⠀⠀⠀⠀Version: 0.001⠀⠀⠀⠀⠀⠀⠀+]=
#Doors#RobloxDoors

Community Comments (4)

varden457varden457Sep 5, 2026

absolute bull*, makes your game lag heavily + shows fake items + shows fake en*ies coming dont use this script its an absolute bull*

Replying to @varden457
N0rxplaysN0rxplaysSep 10, 2026(edited)

@varden457 i told u this is a AI code.

Fr bro 😭. This is AI script.

Replying to @NPC_PlayersNoob_Alt
N0rxplaysN0rxplaysSep 10, 2026

@NPC_PlayersNoob_Alt dude read. i told u this is a AI code.

More Scripts for DOORS 🚨