5 Keyless Jump Showdown Scripts (ESP, Auto QTE, Kill Aura, God Tier Defense, Xeno)

Photo of author
By Ali
Published by

The Roblox platform has recently become the home for some of the most intense and visually stunning anime-based combat simulators. Among the crowd of battlegrounds and arena games, Jump Showdown has emerged as a title where precision, reaction time, and character mastery are the only things keeping you from a quick defeat. Players are thrown into a high-stakes arena where they can inhabit the bodies of iconic anime warriors. The mechanics are layered: from complex Quick Time Events to frame-perfect parrying systems, the skill ceiling is sky-high. However, the sheer competitiveness of the community often means new players are hunted down the moment they spawn. This environment has created a massive surge in users looking for an Jump Showdown script to help them survive and thrive against veteran players.

Whether you are looking to find rare items with Extrasensory Perception or want to automate your combat sequences, a high-quality Jump Showdown script is the ultimate solution. Roblox scripts act as tactical overlays or mechanical assistants that execute actions with speeds human fingers cannot replicate. Many competitive sorcerers and warriors hunt for terms like Jump Showdown Xeno or Jump Showdown Xeno Script to find reliable ways to load these utilities. Using these tools does not just grant you an unfair advantage; it provides a bridge for casual players to experience late-game techniques like Nanami’s Ratio Technique or Higuruma’s Judgement without months of mechanical practice.

In this comprehensive and massive guide, we are diving deep into the five most powerful scripts currently working for this game. We will explore advanced item detectors, fully automated combat modules, and character-specific bots designed to win every QTE. If you have been searching for a Jump Showdown script pastebin link or a simple keyless Jump Showdown script to get ahead in the 2026 meta, this article is the definitive resource. Let’s break down the world of scripts Jump Showdown has available for its dedicated player base.

Jump Showdown God Tier Defense Script
Jump Showdown God Tier Defense Script

1. Keyless Hub – (Events & Character ESP, Teleport Utility)

If you are looking for awareness, the Keyless hub is the most effective entry-level tool. It focuses on removing the “fog of war” that often leads to players being blindsided by enemy characters or event spawns. Many players seek out an free Jump Showdown script that doesn’t just cheat, but actually assists with informational awareness, and this loader delivers that in spades. It is designed to work efficiently on injectors such as Potassium, ensuring a smooth and responsive experience.

Feature CategoryAbilityAdvantage
AwarenessReal-time Chara ESPTracks every anime character model through walls
LogisticsInstant TPWarps your character to specific map events or locations
Alert SystemSound AccompanimentAuditory cues play when rare characters spawn or target you
InteractionNotification UIPop-up windows keep you informed of global arena changes

The core functionality of this script Jump Showdown tool revolves around the ESP (Extra Sensory Perception). In the heat of a chaotic lobby, it is easy to lose track of where a heavy hitter like Gojo or Sukuna is positioned. By using this tool, the game draws highlighted boxes and text overlays around other players, showing their exact distance and username through solid geometry. This is essentially why so many hunt for Jump Showdown Xeno setups—they need a reliable visual assistance layer to navigate the map safely.

Another impressive addition to this version is the TP (Teleport) functionality. When map-wide events occur, time is often of the essence. Instead of running across the terrain and risking a backstab from a lurker, this keyless Jump Showdown scripts utility lets you jump straight to the action. It even includes specialized error handling to prevent your character from falling into the void if the game logic updates during the warp. It is a highly respected utility within the scripting community because of its simplicity and lack of “bloat.”


-- LocalScript (place in StarterGui)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")

local player = Players.LocalPlayer
if not player then return end

-- ==================== PATH CONFIGURATION ====================
local PATH_STRINGS = {
	Boss = "Models.Chara",
	FallingCrate = "Visuals.fallingcrate",
	Crate = "Visuals.Crate",
	Portal = "Visuals.Portal"
}

-- ==================== CUSTOM NAMES ====================
local CUSTOM_NAMES = {
	Boss = "⚠ Chara ⚠",
	FallingCrate = "📦 Falling Crate",
	Crate = "📦 Crate",
	Portal = "🌀 Mystic Portal"
}

-- ==================== SOUNDS ====================
local SOUND_VOLUME = 1.5
local SOUNDS = {
	BossSpawn = "rbxassetid://127863687687397",
	LowHealth = "rbxassetid://104973625032761",
	BossDeath = "rbxassetid://73834717157581"
}

local function getObjectFromPath(pathString)
	local current = workspace
	for part in string.gmatch(pathString, "[^%.]+") do
		current = current:FindFirstChild(part)
		if not current then return nil end
	end
	return current
end

-- Data stores
local espCache = {}
local connections = {}
local soundCache = {}

local bossWasPresent = false
local lowHealthPlayed = {}          -- объект -> true (один раз за жизнь)
local lastLowHealthTime = 0         -- антиспам по времени
local lastDeathTime = 0             -- антиспам смерти

-- ==================== SOUND FUNCTIONS ====================
local function playSound(soundName)
	local soundId = SOUNDS[soundName]
	if not soundId then return end
	if not soundCache[soundName] then
		local sound = Instance.new("Sound")
		sound.SoundId = soundId
		sound.Volume = SOUND_VOLUME
		sound.Parent = player.PlayerGui
		soundCache[soundName] = sound
	else
		soundCache[soundName].Volume = SOUND_VOLUME
	end
	local sound = soundCache[soundName]
	sound:Stop()
	sound:Play()
end

-- ==================== GUI CREATION ====================
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "EventListGUI"
screenGui.ResetOnSpawn = false
screenGui.Parent = player:WaitForChild("PlayerGui")

-- Notifications
local notificationHolder = Instance.new("Frame")
notificationHolder.Name = "NotificationHolder"
notificationHolder.Size = UDim2.new(0, 300, 1, -20)
notificationHolder.Position = UDim2.new(1, -310, 0, 10)
notificationHolder.BackgroundTransparency = 1
notificationHolder.Parent = screenGui

local notificationLayout = Instance.new("UIListLayout")
notificationLayout.Parent = notificationHolder
notificationLayout.HorizontalAlignment = Enum.HorizontalAlignment.Right
notificationLayout.VerticalAlignment = Enum.VerticalAlignment.Top
notificationLayout.SortOrder = Enum.SortOrder.LayoutOrder
notificationLayout.Padding = UDim.new(0, 5)

local function createNotification(title, text, duration, color)
	duration = duration or 5
	color = color or Color3.new(0.3, 0.6, 1)
	
	local frame = Instance.new("Frame")
	frame.Name = "Notification"
	frame.Size = UDim2.new(0, 280, 0, 60)
	frame.BackgroundColor3 = Color3.new(0.1, 0.1, 0.1)
	frame.BackgroundTransparency = 0.2
	frame.BorderSizePixel = 0
	frame.Parent = notificationHolder
	frame.LayoutOrder = -os.clock()
	frame.ClipsDescendants = true
	
	local corner = Instance.new("UICorner")
	corner.CornerRadius = UDim.new(0, 8)
	corner.Parent = frame
	
	local stroke = Instance.new("UIStroke")
	stroke.Thickness = 2
	stroke.Color = color
	stroke.Parent = frame
	
	local titleLabel = Instance.new("TextLabel")
	titleLabel.Name = "Title"
	titleLabel.Size = UDim2.new(1, -10, 0, 20)
	titleLabel.Position = UDim2.new(0, 5, 0, 5)
	titleLabel.BackgroundTransparency = 1
	titleLabel.Text = title
	titleLabel.TextColor3 = Color3.new(1, 1, 1)
	titleLabel.TextXAlignment = Enum.TextXAlignment.Left
	titleLabel.TextScaled = true
	titleLabel.Font = Enum.Font.GothamBold
	titleLabel.Parent = frame
	
	local textLabel = Instance.new("TextLabel")
	textLabel.Name = "Text"
	textLabel.Size = UDim2.new(1, -10, 0, 30)
	textLabel.Position = UDim2.new(0, 5, 0, 25)
	textLabel.BackgroundTransparency = 1
	textLabel.Text = text
	textLabel.TextColor3 = Color3.new(0.8, 0.8, 0.8)
	textLabel.TextXAlignment = Enum.TextXAlignment.Left
	textLabel.TextWrapped = true
	textLabel.TextScaled = true
	textLabel.Font = Enum.Font.Gotham
	textLabel.Parent = frame
	
	frame.Size = UDim2.new(0, 0, 0, 60)
	local tween = TweenService:Create(frame, TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Size = UDim2.new(0, 280, 0, 60)})
	tween:Play()
	
	task.wait(duration)
	
	local fadeOut = TweenService:Create(frame, TweenInfo.new(0.3), {BackgroundTransparency = 1})
	fadeOut:Play()
	local fadeTitle = TweenService:Create(titleLabel, TweenInfo.new(0.3), {TextTransparency = 1})
	local fadeText = TweenService:Create(textLabel, TweenInfo.new(0.3), {TextTransparency = 1})
	local fadeStroke = TweenService:Create(stroke, TweenInfo.new(0.3), {Transparency = 1})
	fadeTitle:Play()
	fadeText:Play()
	fadeStroke:Play()
	
	fadeOut.Completed:Connect(function()
		frame:Destroy()
	end)
end

-- Show/Hide list button
local showButton = Instance.new("TextButton")
showButton.Name = "ShowListButton"
showButton.Size = UDim2.new(0, 50, 0, 50)
showButton.Position = UDim2.new(0, 10, 0, 10)
showButton.BackgroundColor3 = Color3.new(0.2, 0.2, 0.2)
showButton.BackgroundTransparency = 0.3
showButton.Text = "📋"
showButton.TextColor3 = Color3.new(1, 1, 1)
showButton.TextScaled = true
showButton.Visible = false
showButton.Parent = screenGui

local showCorner = Instance.new("UICorner")
showCorner.CornerRadius = UDim.new(0, 8)
showCorner.Parent = showButton

-- Main list window
local listFrame = Instance.new("Frame")
listFrame.Name = "ListFrame"
listFrame.Size = UDim2.new(0, 340, 0, 450)
listFrame.Position = UDim2.new(0, 10, 0.5, -225)
listFrame.BackgroundColor3 = Color3.new(0.05, 0.05, 0.1)
listFrame.BackgroundTransparency = 0.1
listFrame.BorderSizePixel = 0
listFrame.ClipsDescendants = true
listFrame.Parent = screenGui

local shadow = Instance.new("ImageLabel")
shadow.Name = "Shadow"
shadow.Size = UDim2.new(1, 20, 1, 20)
shadow.Position = UDim2.new(0, -10, 0, -10)
shadow.BackgroundTransparency = 1
shadow.Image = "rbxasset://textures/ui/GuiImagePlaceholder.png"
shadow.ImageColor3 = Color3.new(0, 0, 0)
shadow.ImageTransparency = 0.7
shadow.ScaleType = Enum.ScaleType.Slice
shadow.SliceCenter = Rect.new(10, 10, 10, 10)
shadow.Parent = listFrame

local listCorner = Instance.new("UICorner")
listCorner.CornerRadius = UDim.new(0, 12)
listCorner.Parent = listFrame

local listGradient = Instance.new("UIGradient")
listGradient.Color = ColorSequence.new({
	ColorSequenceKeypoint.new(0, Color3.new(0.1, 0.1, 0.15)),
	ColorSequenceKeypoint.new(1, Color3.new(0.05, 0.05, 0.1))
})
listGradient.Rotation = 90
listGradient.Parent = listFrame

local listStroke = Instance.new("UIStroke")
listStroke.Thickness = 2
listStroke.Color = Color3.new(0.3, 0.3, 0.4)
listStroke.Parent = listFrame

-- Title bar
local titleFrame = Instance.new("Frame")
titleFrame.Name = "TitleFrame"
titleFrame.Size = UDim2.new(1, 0, 0, 50)
titleFrame.BackgroundTransparency = 1
titleFrame.Parent = listFrame

local listTitle = Instance.new("TextLabel")
listTitle.Name = "Title"
listTitle.Size = UDim2.new(1, -80, 0, 30)
listTitle.Position = UDim2.new(0, 10, 0, 10)
listTitle.BackgroundTransparency = 1
listTitle.Text = "EVENTS & BOSSES"
listTitle.TextColor3 = Color3.new(1, 1, 1)
listTitle.TextXAlignment = Enum.TextXAlignment.Left
listTitle.TextScaled = true
listTitle.Font = Enum.Font.GothamBold
listTitle.Parent = titleFrame

local closeButton = Instance.new("TextButton")
closeButton.Name = "CloseButton"
closeButton.Size = UDim2.new(0, 30, 0, 30)
closeButton.Position = UDim2.new(1, -40, 0, 10)
closeButton.BackgroundColor3 = Color3.new(0.8, 0.2, 0.2)
closeButton.BackgroundTransparency = 0.2
closeButton.Text = "✕"
closeButton.TextColor3 = Color3.new(1, 1, 1)
closeButton.TextScaled = true
closeButton.Font = Enum.Font.GothamBold
closeButton.Parent = titleFrame

local closeCorner = Instance.new("UICorner")
closeCorner.CornerRadius = UDim.new(0, 6)
closeCorner.Parent = closeButton

local minimizeButton = Instance.new("TextButton")
minimizeButton.Name = "MinimizeButton"
minimizeButton.Size = UDim2.new(0, 30, 0, 30)
minimizeButton.Position = UDim2.new(1, -75, 0, 10)
minimizeButton.BackgroundColor3 = Color3.new(0.3, 0.3, 0.4)
minimizeButton.BackgroundTransparency = 0.2
minimizeButton.Text = "−"
minimizeButton.TextColor3 = Color3.new(1, 1, 1)
minimizeButton.TextScaled = true
minimizeButton.Font = Enum.Font.GothamBold
minimizeButton.Parent = titleFrame

local minimizeCorner = Instance.new("UICorner")
minimizeCorner.CornerRadius = UDim.new(0, 6)
minimizeCorner.Parent = minimizeButton

-- Scrolling list
local scrollingFrame = Instance.new("ScrollingFrame")
scrollingFrame.Name = "ScrollingFrame"
scrollingFrame.Size = UDim2.new(1, -10, 1, -60)
scrollingFrame.Position = UDim2.new(0, 5, 0, 55)
scrollingFrame.BackgroundTransparency = 1
scrollingFrame.ScrollBarThickness = 6
scrollingFrame.ScrollBarImageColor3 = Color3.new(0.5, 0.5, 0.6)
scrollingFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
scrollingFrame.Parent = listFrame

local listLayout = Instance.new("UIListLayout")
listLayout.Parent = scrollingFrame
listLayout.SortOrder = Enum.SortOrder.Name
listLayout.Padding = UDim.new(0, 6)

-- ==================== CORE FUNCTIONS ====================

local function teleportTo(obj)
	local character = player.Character
	if not character then
		createNotification("Error", "No character", 3, Color3.new(1, 0.3, 0.3))
		return
	end
	local rootPart = character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("Torso")
	if not rootPart then
		createNotification("Error", "No root part", 3, Color3.new(1, 0.3, 0.3))
		return
	end
	local success, pos = pcall(function() return obj:GetPivot().Position end)
	if success and pos then
		rootPart.CFrame = CFrame.new(pos + Vector3.new(0, 3, 0))
		createNotification("Teleport", "Teleported to " .. obj.Name, 3, Color3.new(0.3, 0.8, 0.3))
	else
		createNotification("Error", "Could not determine position", 3, Color3.new(1, 0.3, 0.3))
	end
end

local function createESP(obj, objType)
	if espCache[obj] then return end

	local isBoss = (objType == "Boss")
	local billboardHeight = isBoss and 80 or 60
	local displayName = CUSTOM_NAMES[objType] or obj.Name

	local iconText = ""
	if not isBoss then
		iconText = (objType == "Portal") and "🌀" or "📦"
	end

	-- Billboard
	local billboard = Instance.new("BillboardGui")
	billboard.Name = "ESP_" .. obj.Name
	billboard.Size = UDim2.new(0, 240, 0, billboardHeight)
	billboard.StudsOffset = Vector3.new(0, 3.5, 0)
	billboard.AlwaysOnTop = true
	billboard.LightInfluence = 0
	billboard.Parent = obj

	local background = Instance.new("Frame")
	background.Name = "Background"
	background.Size = UDim2.new(1, 0, 1, 0)
	background.BackgroundTransparency = 0.15
	background.BorderSizePixel = 0
	background.Parent = billboard

	local bgCorner = Instance.new("UICorner")
	bgCorner.CornerRadius = UDim.new(0, 8)
	bgCorner.Parent = background

	local stroke = Instance.new("UIStroke")
	stroke.Thickness = 2
	stroke.Color = isBoss and Color3.new(1, 0.4, 0) or Color3.new(0, 1, 0)
	stroke.Parent = background

	local gradient = Instance.new("UIGradient")
	if isBoss then
		gradient.Color = ColorSequence.new({
			ColorSequenceKeypoint.new(0, Color3.new(0.9, 0.3, 0)),
			ColorSequenceKeypoint.new(1, Color3.new(0.6, 0.1, 0))
		})
	else
		gradient.Color = ColorSequence.new({
			ColorSequenceKeypoint.new(0, Color3.new(0.2, 0.8, 0.2)),
			ColorSequenceKeypoint.new(1, Color3.new(0, 0.5, 0))
		})
	end
	gradient.Rotation = 90
	gradient.Parent = background

	local textLabel = Instance.new("TextLabel")
	textLabel.Name = "Info"
	textLabel.Size = isBoss and UDim2.new(1, -10, 0, 30) or UDim2.new(1, -10, 1, 0)
	textLabel.Position = UDim2.new(0, 5, 0, 5)
	textLabel.BackgroundTransparency = 1
	textLabel.TextColor3 = Color3.new(1, 1, 1)
	textLabel.TextStrokeTransparency = 0.3
	textLabel.TextStrokeColor3 = Color3.new(0, 0, 0)
	textLabel.TextScaled = true
	textLabel.Font = Enum.Font.GothamSemibold
	textLabel.Parent = background

	if iconText ~= "" then
		local iconLabel = Instance.new("TextLabel")
		iconLabel.Name = "Icon"
		iconLabel.Size = UDim2.new(0, 20, 0, 20)
		iconLabel.Position = UDim2.new(1, -25, 0, 5)
		iconLabel.BackgroundTransparency = 1
		iconLabel.TextColor3 = Color3.new(1, 1, 1)
		iconLabel.TextStrokeTransparency = 0.3
		iconLabel.TextScaled = true
		iconLabel.Font = Enum.Font.GothamBold
		iconLabel.Text = iconText
		iconLabel.Parent = background
	end

	local healthBarFrame, healthPercentLabel
	if isBoss then
		local barBg = Instance.new("Frame")
		barBg.Name = "HealthBarBg"
		barBg.Size = UDim2.new(0.8, -10, 0, 12)
		barBg.Position = UDim2.new(0, 5, 1, -20)
		barBg.BackgroundColor3 = Color3.new(0.2, 0.2, 0.2)
		barBg.BackgroundTransparency = 0.5
		barBg.BorderSizePixel = 0
		barBg.Parent = background
		
		local barBgCorner = Instance.new("UICorner")
		barBgCorner.CornerRadius = UDim.new(0, 4)
		barBgCorner.Parent = barBg
		
		local barFill = Instance.new("Frame")
		barFill.Name = "HealthBarFill"
		barFill.Size = UDim2.new(1, 0, 1, 0)
		barFill.BackgroundColor3 = Color3.new(1, 0.2, 0.2)
		barFill.BorderSizePixel = 0
		barFill.Parent = barBg
		
		local barFillCorner = Instance.new("UICorner")
		barFillCorner.CornerRadius = UDim.new(0, 4)
		barFillCorner.Parent = barFill
		
		local percentLabel = Instance.new("TextLabel")
		percentLabel.Name = "HealthPercent"
		percentLabel.Size = UDim2.new(0.2, -5, 0, 14)
		percentLabel.Position = UDim2.new(0.8, 0, 1, -22)
		percentLabel.BackgroundTransparency = 1
		percentLabel.TextColor3 = Color3.new(1, 1, 1)
		percentLabel.TextStrokeTransparency = 0.3
		percentLabel.TextScaled = true
		percentLabel.Font = Enum.Font.GothamBold
		percentLabel.Text = "100%"
		percentLabel.Parent = background
		
		healthBarFrame = barFill
		healthPercentLabel = percentLabel
	end

	-- Highlight
	local highlight = Instance.new("Highlight")
	highlight.Name = "Highlight_" .. obj.Name
	highlight.FillColor = isBoss and Color3.new(1, 0, 0) or Color3.new(0, 1, 0)
	highlight.OutlineColor = Color3.new(1, 1, 1)
	highlight.FillTransparency = 0.5
	highlight.OutlineTransparency = 0
	highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
	highlight.Parent = obj

	-- List item
	local listItem = Instance.new("Frame")
	listItem.Name = obj.Name
	listItem.Size = UDim2.new(1, 0, 0, 60)
	listItem.BackgroundColor3 = Color3.new(0.15, 0.15, 0.2)
	listItem.BackgroundTransparency = 0.3
	listItem.BorderSizePixel = 0
	listItem.Parent = scrollingFrame

	local itemCorner = Instance.new("UICorner")
	itemCorner.CornerRadius = UDim.new(0, 8)
	itemCorner.Parent = listItem

	local itemStroke = Instance.new("UIStroke")
	itemStroke.Thickness = 1
	itemStroke.Color = isBoss and Color3.new(1, 0.5, 0) or Color3.new(0, 1, 0)
	itemStroke.Transparency = 0.7
	itemStroke.Parent = listItem

	local itemIcon = Instance.new("TextLabel")
	itemIcon.Name = "Icon"
	itemIcon.Size = UDim2.new(0, 40, 0, 40)
	itemIcon.Position = UDim2.new(0, 5, 0.5, -20)
	itemIcon.BackgroundTransparency = 1
	itemIcon.TextColor3 = Color3.new(1, 1, 1)
	itemIcon.TextStrokeTransparency = 0.3
	itemIcon.TextScaled = true
	itemIcon.Font = Enum.Font.GothamBold
	itemIcon.Text = iconText
	itemIcon.Parent = listItem

	local itemText = Instance.new("TextLabel")
	itemText.Name = "Info"
	itemText.Size = UDim2.new(0.6, -50, 0, 20)
	itemText.Position = UDim2.new(0, 50, 0, 10)
	itemText.BackgroundTransparency = 1
	itemText.TextColor3 = isBoss and Color3.new(1, 0.5, 0) or Color3.new(0, 1, 0)
	itemText.TextXAlignment = Enum.TextXAlignment.Left
	itemText.TextScaled = true
	itemText.Font = Enum.Font.Gotham
	itemText.Parent = listItem

	local itemPercent = nil
	if isBoss then
		itemPercent = Instance.new("TextLabel")
		itemPercent.Name = "Percent"
		itemPercent.Size = UDim2.new(0.6, -50, 0, 16)
		itemPercent.Position = UDim2.new(0, 50, 0, 32)
		itemPercent.BackgroundTransparency = 1
		itemPercent.TextColor3 = Color3.new(1, 1, 1)
		itemPercent.TextXAlignment = Enum.TextXAlignment.Left
		itemPercent.TextScaled = true
		itemPercent.Font = Enum.Font.Gotham
		itemPercent.Text = "100%"
		itemPercent.Parent = listItem
	end

	local tpButton = Instance.new("TextButton")
	tpButton.Name = "TeleportButton"
	tpButton.Size = UDim2.new(0, 45, 0, 30)
	tpButton.Position = UDim2.new(1, -50, 0.5, -15)
	tpButton.BackgroundColor3 = Color3.new(0.3, 0.6, 1)
	tpButton.BackgroundTransparency = 0.2
	tpButton.Text = "TP"
	tpButton.TextColor3 = Color3.new(1, 1, 1)
	tpButton.TextScaled = true
	tpButton.Font = Enum.Font.GothamBold
	tpButton.Parent = listItem

	local tpCorner = Instance.new("UICorner")
	tpCorner.CornerRadius = UDim.new(0, 6)
	tpCorner.Parent = tpButton

	local tpConn = tpButton.MouseButton1Click:Connect(function()
		if obj and obj.Parent then
			teleportTo(obj)
		else
			createNotification("Error", "Object no longer exists", 3, Color3.new(1, 0.3, 0.3))
		end
	end)
	table.insert(connections, tpConn)

	espCache[obj] = {
		billboard = billboard,
		textLabel = textLabel,
		healthBar = healthBarFrame,
		healthPercent = healthPercentLabel,
		highlight = highlight,
		listItem = listItem,
		itemText = itemText,
		itemPercent = itemPercent,
		type = objType,
		customName = displayName
	}
end

local function collectTargets()
	local targets = {}
	for objType, pathString in pairs(PATH_STRINGS) do
		local obj = getObjectFromPath(pathString)
		if obj then
			if obj:IsA("BasePart") or obj:IsA("Model") then
				table.insert(targets, {obj = obj, type = objType})
			else
				for _, child in ipairs(obj:GetChildren()) do
					if child:IsA("BasePart") or child:IsA("Model") then
						table.insert(targets, {obj = child, type = objType})
					end
				end
			end
		end
	end
	return targets
end

local function updateESP()
	if not espCache then return end

	local character = player.Character
	if not character then return end
	local rootPart = character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("Torso")
	if not rootPart then return end

	local targets = collectTargets()
	local currentTargetsSet = {}
	for _, target in ipairs(targets) do
		currentTargetsSet[target.obj] = true
	end

	local bossCurrentlyPresent = false

	-- Remove ESP for objects that are no longer targets
	for obj, data in pairs(espCache) do
		if not currentTargetsSet[obj] or not obj or not obj.Parent then
			if data.billboard then pcall(function() data.billboard:Destroy() end) end
			if data.listItem then pcall(function() data.listItem:Destroy() end) end
			if data.highlight then pcall(function() data.highlight:Destroy() end) end
			espCache[obj] = nil
		end
	end

	-- Update existing and create new
	for _, target in ipairs(targets) do
		local obj = target.obj
		local objType = target.type

		if not espCache[obj] then
			createESP(obj, objType)
			if objType == "Boss" then
				playSound("BossSpawn")
				createNotification("Boss Spawned", CUSTOM_NAMES.Boss .. " has appeared!", 5, Color3.new(1, 0.5, 0))
			end
		end

		local data = espCache[obj]
		if data then
			if not obj or not obj.Parent then
				if data.billboard then pcall(function() data.billboard:Destroy() end) end
				if data.listItem then pcall(function() data.listItem:Destroy() end) end
				if data.highlight then pcall(function() data.highlight:Destroy() end) end
				espCache[obj] = nil
				continue
			end

			if objType == "Boss" then
				bossCurrentlyPresent = true
			end

			local posSuccess, pos = pcall(function() return obj:GetPivot().Position end)
			if not posSuccess then pos = rootPart.Position end
			local dist = math.floor((pos - rootPart.Position).Magnitude)

			local healthText = ""
			local emoji = ""
			local healthPercent = 100
			if objType == "Boss" then
				local humanoid = obj:FindFirstChildOfClass("Humanoid")
				if humanoid then
					local health = math.floor(humanoid.Health)
					local maxHealth = math.floor(humanoid.MaxHealth)
					if maxHealth > 0 then
						healthText = string.format(" ❤️ %d/%d", health, maxHealth)
						healthPercent = math.floor((health / maxHealth) * 100)
					end
					-- Low health notification (once per boss life AND cooldown 10 sec)
					if health < 450 and not lowHealthPlayed[obj] and os.clock() - lastLowHealthTime > 10 then
						lastLowHealthTime = os.clock()
						lowHealthPlayed[obj] = true
						playSound("LowHealth")
						createNotification("Low Health", CUSTOM_NAMES.Boss .. " is below 450 HP!", 5, Color3.new(1, 0.8, 0))
					end
					if health < 450 then emoji = " ✨" end
				end
			end

			local displayName = data.customName or (objType == "Boss" and "Chara" or obj.Name)
			local billboardText = string.format("%s [%dm]%s%s", displayName, dist, healthText, emoji)
			data.textLabel.Text = billboardText

			if objType == "Boss" and data.healthBar and data.healthPercent then
				data.healthBar.Size = UDim2.new(healthPercent/100, 0, 1, 0)
				data.healthPercent.Text = healthPercent .. "%"
			end

			local listText = string.format("%s [%dm]%s%s", displayName, dist, healthText, emoji)
			data.itemText.Text = listText
			if data.itemPercent then
				data.itemPercent.Text = healthPercent .. "% HP"
			end
		end
	end

	-- Boss death notification with anti-spam (5 sec)
	if bossWasPresent and not bossCurrentlyPresent and os.clock() - lastDeathTime > 5 then
		lastDeathTime = os.clock()
		playSound("BossDeath")
		createNotification("Boss Defeated", CUSTOM_NAMES.Boss .. " has been defeated!", 5, Color3.new(1, 0.5, 0))
		lowHealthPlayed = {}
		lastLowHealthTime = 0  -- разрешить уведомление для нового босса
	end
	bossWasPresent = bossCurrentlyPresent

	scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, listLayout.AbsoluteContentSize.Y)
end

-- Start update loop
local renderSteppedConnection = RunService.RenderStepped:Connect(updateESP)
table.insert(connections, renderSteppedConnection)

-- ==================== BUTTON CONNECTIONS ====================
local function safeConnect(btn, func)
	if btn and btn:IsA("TextButton") then
		local conn = btn.MouseButton1Click:Connect(func)
		table.insert(connections, conn)
	end
end

safeConnect(closeButton, function()
	listFrame.Visible = false
	showButton.Visible = true
end)

safeConnect(showButton, function()
	listFrame.Visible = true
	showButton.Visible = false
end)

local minimized = false
safeConnect(minimizeButton, function()
	if minimized then
		listFrame:TweenSize(UDim2.new(0, 340, 0, 450), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 0.3, true)
		minimized = false
	else
		listFrame:TweenSize(UDim2.new(0, 340, 0, 50), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 0.3, true)
		minimized = true
	end
end)

-- Dragging
local dragging = false
local dragInput, dragStart, startPos

local function updateDrag(input)
	local delta = input.Position - dragStart
	listFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end

if listFrame then
	local dragBeginConn = listFrame.InputBegan:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
			dragging = true
			dragStart = input.Position
			startPos = listFrame.Position
			local conn = input.Changed:Connect(function()
				if input.UserInputState == Enum.UserInputState.End then
					dragging = false
					if conn then conn:Disconnect() end
				end
			end)
			if conn then table.insert(connections, conn) end
		end
	end)
	table.insert(connections, dragBeginConn)

	local dragChangeConn = listFrame.InputChanged:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
			dragInput = input
		end
	end)
	table.insert(connections, dragChangeConn)

	local inputChangeConn = UserInputService.InputChanged:Connect(function(input)
		if input == dragInput and dragging then
			updateDrag(input)
		end
	end)
	table.insert(connections, inputChangeConn)
end

-- Cleanup
script.Destroying:Connect(function()
	if renderSteppedConnection then
		renderSteppedConnection:Disconnect()
	end
	for _, conn in ipairs(connections) do
		if conn then conn:Disconnect() end
	end
	if espCache then
		for obj, data in pairs(espCache) do
			if data then
				if data.billboard then pcall(function() data.billboard:Destroy() end) end
				if data.listItem then pcall(function() data.listItem:Destroy() end) end
				if data.highlight then pcall(function() data.highlight:Destroy() end) end
			end
		end
	end
	if screenGui then
		pcall(function() screenGui:Destroy() end)
	end
	for _, sound in pairs(soundCache) do
		pcall(function() sound:Destroy() end)
	end
end)

2. Death Note & Items ESP Hub – (Persistent Configuration, Favorite System, Quick Teleport)

While character tracking is great for fighting, finding the rarest items is how you truly progress. The Death Note hub by Andrei228_12t is one of the most technical and data-heavy Jump Showdown script options on the market. It doesn’t just draw boxes; it provides a comprehensive database management system for every spawned tool and model on the map, including the highly sought-after “Notes.”

Item FeatureImplementationPlayer Perk
Object DetectionAutomated ScannerIdentifies tools and specific models like “Note” instantly
Search FilterText-based SortingLets you isolate specific gear while ignoring garbage items
Saved LayoutWindow Position PersistenceGUI remembers exactly where you placed it across sessions
Smart ESPCard-based Billboard GUIsDisplays high-quality cards with item rarity and tier data

The sophistication of this script Jump Showdown provides is most evident in its “Interactive Item List.” In a massive match, your screen can get cluttered with ESP boxes. This tool solves that by allowing you to star certain items. Favorites always appear at the top of the sorting list, making it an incredibly popular keyless Jump Showdown script for those hunting legendary-tier items. You can toggle ESP for specific items individually directly from the interactive list, keeping your view clear during combat while still keeping an eye on a specific drop.

Moreover, if your software environment (like Xeno Jump Showdown injectors) supports read/write files, all your favorites and toggle states are saved locally. This means you don’t have to reconfigure your search every time you join a new server. It also includes hotkeys (H, I, O, P) to quickly manage your inventory view or settings. For users looking for Jump Showdown script pastebin resources, this tool is frequently cited as the standard for informational GUIs because it includes robust error handling that prevents your Roblox client from crashing when thousands of parts load in simultaneously.


local Settings = {
    UPDATE_INTERVAL = 0.05,
    LIST_UPDATE_INTERVAL = 0.5,
    MAX_DISTANCE = 15000,
    FADE_START_DISTANCE = 300,
    NOTIFICATION_DURATION = 5,
    TELEPORT_RANGE = 15000,
    
    -- Colors
    PRIMARY_COLOR = Color3.fromRGB(0, 184, 255),
    SECONDARY_COLOR = Color3.fromRGB(147, 112, 255),
    TEXT_COLOR = Color3.fromRGB(255, 255, 255),
    BACKGROUND_COLOR = Color3.fromRGB(20, 20, 30),
    BACKGROUND_TRANSPARENCY = 0.7,
    GLOW_COLOR = Color3.fromRGB(100, 200, 255),
    NOTIFICATION_COLOR = Color3.fromRGB(46, 204, 113),
    TELEPORT_COLOR = Color3.fromRGB(241, 196, 15),
    TOGGLE_COLOR = Color3.fromRGB(52, 152, 219),
    DISABLED_COLOR = Color3.fromRGB(231, 76, 60),
    LIST_COLOR = Color3.fromRGB(30, 40, 50),
    LIST_HOVER_COLOR = Color3.fromRGB(40, 50, 70),
    FAVORITE_COLOR = Color3.fromRGB(255, 215, 0),
    ESP_ENABLED_COLOR = Color3.fromRGB(46, 204, 113),
    ESP_DISABLED_COLOR = Color3.fromRGB(150, 150, 150)
}

-- Services
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local HttpService = game:GetService("HttpService")

-- File system check
local canSaveToFile = (writefile ~= nil and readfile ~= nil)
local SETTINGS_FILE = "NexusTracker_Settings.json"

-- ========== AUTO PATH DETECTION ==========
local TRACK_PATH = workspace:FindFirstChild("Visuals") or workspace
local SPECIFIC_MODEL_NAME = "Note"

local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera

-- ========== DATA STRUCTURE ==========
local objectCache = {}          -- [obj] = { esp, espEnabled, favorite, addedTime, className, displayName, position, fullPath }
local notifications = {}
local connections = {}
local tweens = {}
local teleportQueue = {}
local guiEnabled = true
local itemListGUI = nil
local itemListVisible = false
local settingsGUI = nil
local settingsVisible = false
local screenGui = nil
local notificationContainer = nil
local mainToggle = nil
local listToggle = nil
local settingsToggle = nil

-- Saved window positions
local savedMainTogglePos = nil
local savedListTogglePos = nil
local savedSettingsTogglePos = nil
local savedItemListGUIPos = nil
local savedSettingsGUIPos = nil

-- Saved object-specific states (favorite, espEnabled)
local savedObjectFavorites = {}   -- key = full path, value = boolean
local savedObjectESP = {}         -- key = full path, value = boolean

-- List state
local listState = {
    filterType = "all",      -- "all", "tool", "note"
    sortMode = "distance",   -- "name", "distance", "favorite"
    sortAsc = true,
    searchText = ""
}

-- Debug
local DEBUG = true
local function debugPrint(...)
    if DEBUG then
        print("[NexusTracker]", ...)
    end
end

debugPrint("📁 Tracking path:", TRACK_PATH:GetFullName())
debugPrint("File system available:", canSaveToFile)

--------------------------------------------------------------------
-- 1. BASIC FUNCTIONS
--------------------------------------------------------------------
local function shouldTrackObject(object)
    return object:IsA("Tool") or (object:IsA("Model") and object.Name == SPECIFIC_MODEL_NAME)
end

local function createGradient(parent, color1, color2, rotation)
    local gradient = Instance.new("UIGradient")
    gradient.Color = ColorSequence.new({ColorSequenceKeypoint.new(0, color1), ColorSequenceKeypoint.new(1, color2)})
    gradient.Rotation = rotation or 90
    gradient.Parent = parent
    return gradient
end

local function getObjectPosition(object)
    if object:IsA("BasePart") then
        return object.Position
    elseif object:IsA("Model") then
        local primaryPart = object.PrimaryPart
        if primaryPart then return primaryPart.Position end
        for _, child in ipairs(object:GetChildren()) do
            if child:IsA("BasePart") then return child.Position end
        end
        local success, result = pcall(function() return object:GetPivot().Position end)
        if success then return result end
    end
    local handle = object:FindFirstChild("Handle") or object:FindFirstChildWhichIsA("BasePart")
    if handle then return handle.Position end
    return Vector3.new(0,0,0)
end

local function getDisplayName(object)
    if object:IsA("Model") and object.Name == SPECIFIC_MODEL_NAME then
        return "📝 " .. object.Name
    elseif object:IsA("Tool") then
        return "🛠️ " .. object.Name
    end
    return object.Name
end

--------------------------------------------------------------------
-- 2. TELEPORT
--------------------------------------------------------------------
local function teleportToObject(object)
    if not object or not object.Parent then return false, "Object no longer exists" end
    local character = LocalPlayer.Character
    if not character then return false, "No character" end
    local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
    if not humanoidRootPart then return false, "No HumanoidRootPart" end
    local objectPos = getObjectPosition(object)
    if objectPos == Vector3.new(0,0,0) then return false, "Cannot determine position" end
    local distance = (humanoidRootPart.Position - objectPos).Magnitude
    if distance > Settings.TELEPORT_RANGE then return false, "Too far (" .. math.floor(distance) .. " studs)" end
    teleportQueue[object] = true
    humanoidRootPart.CFrame = CFrame.new(objectPos + Vector3.new(0,3,0))
    task.wait(0.1)
    teleportQueue[object] = nil
    return true, "Teleported"
end

local function teleportToNearest()
    local character = LocalPlayer.Character
    if not character then return false, "No character" end
    local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
    if not humanoidRootPart then return false, "No HumanoidRootPart" end
    local nearestDist = math.huge
    local nearestObj = nil
    for obj, data in pairs(objectCache) do
        if obj and obj.Parent then
            local dist = (humanoidRootPart.Position - getObjectPosition(obj)).Magnitude
            if dist < nearestDist and dist <= Settings.TELEPORT_RANGE then
                nearestDist = dist
                nearestObj = obj
            end
        end
    end
    if nearestObj then return teleportToObject(nearestObj) end
    return false, "No objects in range"
end

--------------------------------------------------------------------
-- 3. NOTIFICATIONS
--------------------------------------------------------------------
local function closeNotification(notifFrame)
    for i, data in ipairs(notifications) do
        if data.frame == notifFrame then
            if data.timerThread then
                pcall(function() task.cancel(data.timerThread) end)
                data.timerThread = nil
            end
            local tween = TweenService:Create(notifFrame, TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.In), {
                Position = UDim2.new(1, 320, 1, -90),
                BackgroundTransparency = 1
            })
            tween:Play()
            tween.Completed:Wait()
            if notifFrame and notifFrame.Parent then notifFrame:Destroy() end
            table.remove(notifications, i)
            break
        end
    end
end

local function createSpawnNotification(objectName, object)
    local displayName = getDisplayName(object)
    local notification = Instance.new("Frame")
    notification.Name = "SpawnNotification"
    notification.BackgroundColor3 = Settings.NOTIFICATION_COLOR
    notification.BackgroundTransparency = 0.9
    notification.Size = UDim2.new(0, 300, 0, 90)
    notification.Position = UDim2.new(1, 10, 1, -100)
    notification.BorderSizePixel = 0
    notification.LayoutOrder = #notifications + 1
    notification.Active = true
    notification.Selectable = true
    
    local corner = Instance.new("UICorner")
    corner.CornerRadius = UDim.new(0, 12)
    corner.Parent = notification
    
    local glow = Instance.new("Frame")
    glow.Name = "Glow"
    glow.BackgroundColor3 = Settings.NOTIFICATION_COLOR
    glow.BackgroundTransparency = 0.7
    glow.Size = UDim2.new(1, 10, 1, 10)
    glow.Position = UDim2.new(0, -5, 0, -5)
    glow.BorderSizePixel = 0
    glow.ZIndex = -1
    Instance.new("UICorner", glow).CornerRadius = UDim.new(0, 16)
    
    local timerBar = Instance.new("Frame")
    timerBar.Name = "TimerBar"
    timerBar.BackgroundColor3 = Color3.fromRGB(255,255,255)
    timerBar.BackgroundTransparency = 0.7
    timerBar.Size = UDim2.new(1, -20, 0, 3)
    timerBar.Position = UDim2.new(0, 10, 1, -5)
    timerBar.BorderSizePixel = 0
    timerBar.ZIndex = 23
    
    local timerProgress = Instance.new("Frame")
    timerProgress.Name = "TimerProgress"
    timerProgress.BackgroundColor3 = Settings.NOTIFICATION_COLOR
    timerProgress.Size = UDim2.new(1, 0, 1, 0)
    timerProgress.BorderSizePixel = 0
    timerProgress.ZIndex = 24
    timerProgress.Parent = timerBar
    
    local icon = Instance.new("TextLabel")
    icon.Name = "Icon"
    icon.Text = "✨"
    icon.TextColor3 = Settings.TEXT_COLOR
    icon.TextSize = 30
    icon.Font = Enum.Font.GothamBold
    icon.BackgroundTransparency = 1
    icon.Size = UDim2.new(0, 40, 0, 40)
    icon.Position = UDim2.new(0, 10, 0.5, -20)
    
    local title = Instance.new("TextLabel")
    title.Name = "Title"
    title.Text = "✨ NEW ITEM SPAWNED"
    title.TextColor3 = Settings.TEXT_COLOR
    title.TextSize = 16
    title.Font = Enum.Font.GothamBold
    title.BackgroundTransparency = 1
    title.Size = UDim2.new(1, -60, 0, 25)
    title.Position = UDim2.new(0, 60, 0, 10)
    title.TextXAlignment = Enum.TextXAlignment.Left
    
    local itemName = Instance.new("TextLabel")
    itemName.Name = "ItemName"
    itemName.Text = displayName
    itemName.TextColor3 = Settings.TEXT_COLOR
    itemName.TextSize = 18
    itemName.Font = Enum.Font.GothamBold
    itemName.BackgroundTransparency = 1
    itemName.Size = UDim2.new(1, -60, 0, 30)
    itemName.Position = UDim2.new(0, 60, 0, 35)
    itemName.TextXAlignment = Enum.TextXAlignment.Left
    
    local closeNotifButton = Instance.new("TextButton")
    closeNotifButton.Name = "CloseNotificationButton"
    closeNotifButton.Text = "✕"
    closeNotifButton.TextColor3 = Settings.TEXT_COLOR
    closeNotifButton.TextSize = 16
    closeNotifButton.Font = Enum.Font.GothamBold
    closeNotifButton.BackgroundColor3 = Color3.fromRGB(231, 76, 60)
    closeNotifButton.BackgroundTransparency = 0.3
    closeNotifButton.Size = UDim2.new(0, 25, 0, 25)
    closeNotifButton.Position = UDim2.new(1, -30, 0, 5)
    closeNotifButton.BorderSizePixel = 0
    closeNotifButton.ZIndex = 22
    closeNotifButton.AutoButtonColor = true
    Instance.new("UICorner", closeNotifButton).CornerRadius = UDim.new(0, 6)
    
    local teleportButton = Instance.new("TextButton")
    teleportButton.Name = "TeleportButton"
    teleportButton.Text = "TELEPORT"
    teleportButton.TextColor3 = Settings.TEXT_COLOR
    teleportButton.TextSize = 14
    teleportButton.Font = Enum.Font.GothamBold
    teleportButton.BackgroundColor3 = Settings.TELEPORT_COLOR
    teleportButton.BackgroundTransparency = 0.2
    teleportButton.Size = UDim2.new(0, 100, 0, 30)
    teleportButton.Position = UDim2.new(1, -110, 1, -45)
    teleportButton.BorderSizePixel = 0
    teleportButton.AutoButtonColor = true
    Instance.new("UICorner", teleportButton).CornerRadius = UDim.new(0, 8)
    local buttonGradient = createGradient(teleportButton, Settings.TELEPORT_COLOR, Color3.fromRGB(230,126,34), 45)
    
    closeNotifButton.MouseButton1Click:Connect(function() closeNotification(notification) end)
    
    teleportButton.MouseEnter:Connect(function()
        TweenService:Create(teleportButton, TweenInfo.new(0.2), {BackgroundTransparency=0, Size=UDim2.new(0,110,0,32)}):Play()
    end)
    teleportButton.MouseLeave:Connect(function()
        TweenService:Create(teleportButton, TweenInfo.new(0.2), {BackgroundTransparency=0.2, Size=UDim2.new(0,100,0,30)}):Play()
    end)
    
    local tpDebounce = false
    teleportButton.MouseButton1Click:Connect(function()
        if tpDebounce then return end
        tpDebounce = true
        local success, msg = teleportToObject(object)
        if success then
            teleportButton.Text = "✓ SUCCESS"
            teleportButton.BackgroundColor3 = Color3.fromRGB(46,204,113)
            teleportButton.AutoButtonColor = false
            task.wait(1)
            teleportButton.Text = "TELEPORT"
            teleportButton.BackgroundColor3 = Settings.TELEPORT_COLOR
            teleportButton.AutoButtonColor = true
        else
            local old = teleportButton.Text
            teleportButton.Text = msg
            teleportButton.BackgroundColor3 = Color3.fromRGB(231,76,60)
            teleportButton.AutoButtonColor = false
            task.wait(1.5)
            teleportButton.Text = old
            teleportButton.BackgroundColor3 = Settings.TELEPORT_COLOR
            teleportButton.AutoButtonColor = true
        end
        tpDebounce = false
    end)
    
    glow.Parent = notification
    timerBar.Parent = notification
    icon.Parent = notification
    title.Parent = notification
    itemName.Parent = notification
    closeNotifButton.Parent = notification
    teleportButton.Parent = notification
    
    if notificationContainer then notification.Parent = notificationContainer end
    
    notification.Position = UDim2.new(1, 320, 1, -100)
    TweenService:Create(notification, TweenInfo.new(0.4, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
        Position = UDim2.new(1, 10, 1, -100)
    }):Play()
    
    local notifData = {frame = notification, timer = tick(), teleportButton = teleportButton, timerProgress = timerProgress}
    table.insert(notifications, notifData)
    
    notifData.timerThread = task.spawn(function()
        local start = tick()
        local finish = start + Settings.NOTIFICATION_DURATION
        while tick() < finish and notification and notification.Parent do
            timerProgress.Size = UDim2.new(1 - (tick()-start)/Settings.NOTIFICATION_DURATION, 0, 1, 0)
            task.wait(0.1)
        end
        if notification and notification.Parent then closeNotification(notification) end
    end)
    
    return notification
end

--------------------------------------------------------------------
-- 4. SAVE / LOAD (расширенная версия)
--------------------------------------------------------------------
local function encodeUDim2(udim2)
    if not udim2 then return nil end
    return {
        X = {Scale = udim2.X.Scale, Offset = udim2.X.Offset},
        Y = {Scale = udim2.Y.Scale, Offset = udim2.Y.Offset}
    }
end

local function decodeUDim2(data)
    if not data then return nil end
    return UDim2.new(data.X.Scale, data.X.Offset, data.Y.Scale, data.Y.Offset)
end

local function saveSettings()
    if not canSaveToFile then 
        debugPrint("⚠️ Cannot save: file system not available")
        return 
    end
    
    -- Собираем состояния объектов по их полному пути
    local objectFavorites = {}
    local objectESP = {}
    for obj, data in pairs(objectCache) do
        if obj and obj.Parent then
            local path = obj:GetFullName()
            objectFavorites[path] = data.favorite or false
            objectESP[path] = data.espEnabled or false
        end
    end
    
    local settingsData = {
        mainTogglePos = mainToggle and encodeUDim2(mainToggle.Position) or nil,
        listTogglePos = listToggle and encodeUDim2(listToggle.Position) or nil,
        settingsTogglePos = settingsToggle and encodeUDim2(settingsToggle.Position) or nil,
        itemListPos = itemListGUI and encodeUDim2(itemListGUI.Position) or nil,
        settingsGUIPos = settingsGUI and encodeUDim2(settingsGUI.Position) or nil,
        guiEnabled = guiEnabled,
        MAX_DISTANCE = Settings.MAX_DISTANCE,
        FADE_START_DISTANCE = Settings.FADE_START_DISTANCE,
        NOTIFICATION_DURATION = Settings.NOTIFICATION_DURATION,
        TELEPORT_RANGE = Settings.TELEPORT_RANGE,
        UPDATE_INTERVAL = Settings.UPDATE_INTERVAL,
        LIST_UPDATE_INTERVAL = Settings.LIST_UPDATE_INTERVAL,
        DEBUG = DEBUG,
        -- Сохраняем состояние списка
        listFilter = listState.filterType,
        listSortMode = listState.sortMode,
        listSortAsc = listState.sortAsc,
        -- Сохраняем объектные настройки
        objectFavorites = objectFavorites,
        objectESP = objectESP
    }
    
    local jsonData = HttpService:JSONEncode(settingsData)
    local success = pcall(function()
        writefile(SETTINGS_FILE, jsonData)
    end)
    
    if success then
        debugPrint("✅ Settings saved")
    else
        debugPrint("❌ Failed to save settings")
    end
end

local function loadSettings()
    if not canSaveToFile then return nil end
    
    local success, data = pcall(function()
        local json = readfile(SETTINGS_FILE)
        if json and json ~= "" then
            return HttpService:JSONDecode(json)
        end
        return nil
    end)
    
    if success and data then
        debugPrint("✅ Settings loaded")
        return data
    else
        debugPrint("ℹ️ No settings file, using defaults")
        return nil
    end
end

local function applyLoadedSettings(settingsData)
    if not settingsData then return end
    if settingsData.mainTogglePos then savedMainTogglePos = decodeUDim2(settingsData.mainTogglePos) end
    if settingsData.listTogglePos then savedListTogglePos = decodeUDim2(settingsData.listTogglePos) end
    if settingsData.settingsTogglePos then savedSettingsTogglePos = decodeUDim2(settingsData.settingsTogglePos) end
    if settingsData.itemListPos then savedItemListGUIPos = decodeUDim2(settingsData.itemListPos) end
    if settingsData.settingsGUIPos then savedSettingsGUIPos = decodeUDim2(settingsData.settingsGUIPos) end
    if settingsData.MAX_DISTANCE then Settings.MAX_DISTANCE = settingsData.MAX_DISTANCE end
    if settingsData.FADE_START_DISTANCE then Settings.FADE_START_DISTANCE = settingsData.FADE_START_DISTANCE end
    if settingsData.NOTIFICATION_DURATION then Settings.NOTIFICATION_DURATION = settingsData.NOTIFICATION_DURATION end
    if settingsData.TELEPORT_RANGE then Settings.TELEPORT_RANGE = settingsData.TELEPORT_RANGE end
    if settingsData.UPDATE_INTERVAL then Settings.UPDATE_INTERVAL = settingsData.UPDATE_INTERVAL end
    if settingsData.LIST_UPDATE_INTERVAL then Settings.LIST_UPDATE_INTERVAL = settingsData.LIST_UPDATE_INTERVAL end
    if settingsData.guiEnabled ~= nil then guiEnabled = settingsData.guiEnabled end
    if settingsData.DEBUG ~= nil then DEBUG = settingsData.DEBUG end
    
    -- Загружаем состояние списка
    if settingsData.listFilter then listState.filterType = settingsData.listFilter end
    if settingsData.listSortMode then listState.sortMode = settingsData.listSortMode end
    if settingsData.listSortAsc ~= nil then listState.sortAsc = settingsData.listSortAsc end
    
    -- Загружаем объектные настройки
    if settingsData.objectFavorites then savedObjectFavorites = settingsData.objectFavorites end
    if settingsData.objectESP then savedObjectESP = settingsData.objectESP end
end

local saveDebounce = false
local function debouncedSaveSettings()
    if not canSaveToFile then return end
    if saveDebounce then return end
    saveDebounce = true
    task.delay(1, function()
        saveSettings()
        saveDebounce = false
    end)
end

--------------------------------------------------------------------
-- 5. ESP CARDS
--------------------------------------------------------------------
local function createInfoCard(object)
    if not guiEnabled then return nil end
    local success, container = pcall(function()
        local container = Instance.new("BillboardGui")
        container.Name = "ObjectInfoCard"
        container.AlwaysOnTop = true
        container.Size = UDim2.new(0, 320, 0, 140)
        container.StudsOffset = Vector3.new(0, 3, 0)
        container.MaxDistance = Settings.MAX_DISTANCE
        container.Enabled = true
        container.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
        container.Active = true
        
        local adornee
        if object:IsA("BasePart") then adornee = object
        elseif object:IsA("Model") then adornee = object.PrimaryPart or object:FindFirstChildWhichIsA("BasePart")
        elseif object:IsA("Tool") then adornee = object:FindFirstChild("Handle") or object:FindFirstChildWhichIsA("BasePart") end
        if adornee then container.Adornee = adornee end
        
        local main = Instance.new("Frame")
        main.Name = "MainFrame"
        main.BackgroundColor3 = Settings.BACKGROUND_COLOR
        main.BackgroundTransparency = Settings.BACKGROUND_TRANSPARENCY
        main.Size = UDim2.new(1,0,1,0)
        main.BorderSizePixel = 0
        main.ZIndex = 1
        Instance.new("UICorner", main).CornerRadius = UDim.new(0,12)
        
        local glow = Instance.new("Frame")
        glow.BackgroundColor3 = Settings.GLOW_COLOR
        glow.BackgroundTransparency = 0.9
        glow.Size = UDim2.new(1,10,1,10)
        glow.Position = UDim2.new(0,-5,0,-5)
        glow.BorderSizePixel = 0
        glow.ZIndex = 0
        Instance.new("UICorner", glow).CornerRadius = UDim.new(0,16)
        glow.Parent = main
        
        local header = Instance.new("Frame")
        header.BackgroundColor3 = Settings.PRIMARY_COLOR
        header.Size = UDim2.new(1,0,0,40)
        header.BorderSizePixel = 0
        header.ZIndex = 2
        Instance.new("UICorner", header).CornerRadius = UDim.new(0,12,0,0)
        createGradient(header, Settings.PRIMARY_COLOR, Settings.SECONDARY_COLOR, 45)
        
        local icon = Instance.new("TextLabel")
        icon.Text = object:IsA("Tool") and "🛠️" or "📝"
        icon.TextColor3 = Settings.TEXT_COLOR
        icon.TextSize = 28
        icon.Font = Enum.Font.GothamBold
        icon.BackgroundTransparency = 1
        icon.Size = UDim2.new(0,28,0,28)
        icon.Position = UDim2.new(0,10,0.5,-14)
        icon.ZIndex = 3
        icon.Parent = header
        
        local nameLabel = Instance.new("TextLabel")
        nameLabel.Text = getDisplayName(object)
        nameLabel.TextColor3 = Settings.TEXT_COLOR
        nameLabel.TextSize = 18
        nameLabel.Font = Enum.Font.GothamBold
        nameLabel.BackgroundTransparency = 1
        nameLabel.Size = UDim2.new(1,-50,1,0)
        nameLabel.Position = UDim2.new(0,50,0,0)
        nameLabel.TextXAlignment = Enum.TextXAlignment.Left
        nameLabel.ZIndex = 3
        nameLabel.Parent = header
        header.Parent = main
        
        local content = Instance.new("Frame")
        content.BackgroundTransparency = 1
        content.Size = UDim2.new(1,-20,0,90)
        content.Position = UDim2.new(0,10,0,45)
        content.ZIndex = 2
        
        local layout = Instance.new("UIListLayout")
        layout.Padding = UDim.new(0,8)
        layout.HorizontalAlignment = Enum.HorizontalAlignment.Left
        layout.VerticalAlignment = Enum.VerticalAlignment.Top
        layout.Parent = content
        
        -- Type row
        local typeRow = Instance.new("Frame")
        typeRow.BackgroundTransparency = 1
        typeRow.Size = UDim2.new(1,0,0,24)
        local typeIcon = Instance.new("TextLabel")
        typeIcon.Text = "📦"
        typeIcon.TextColor3 = Settings.TEXT_COLOR
        typeIcon.TextSize = 20
        typeIcon.Font = Enum.Font.GothamBold
        typeIcon.BackgroundTransparency = 1
        typeIcon.Size = UDim2.new(0,20,0,20)
        typeIcon.Position = UDim2.new(0,0,0.5,-10)
        typeIcon.Parent = typeRow
        local typeLabel = Instance.new("TextLabel")
        typeLabel.Text = "Type: "..object.ClassName
        typeLabel.TextColor3 = Color3.fromRGB(200,200,200)
        typeLabel.TextSize = 14
        typeLabel.Font = Enum.Font.Gotham
        typeLabel.BackgroundTransparency = 1
        typeLabel.Size = UDim2.new(1,-30,1,0)
        typeLabel.Position = UDim2.new(0,30,0,0)
        typeLabel.TextXAlignment = Enum.TextXAlignment.Left
        typeLabel.Parent = typeRow
        typeRow.Parent = content
        
        -- Distance row
        local distRow = Instance.new("Frame")
        distRow.BackgroundTransparency = 1
        distRow.Size = UDim2.new(1,0,0,24)
        local distIcon = Instance.new("TextLabel")
        distIcon.Text = "📍"
        distIcon.TextColor3 = Settings.TEXT_COLOR
        distIcon.TextSize = 20
        distIcon.Font = Enum.Font.GothamBold
        distIcon.BackgroundTransparency = 1
        distIcon.Size = UDim2.new(0,20,0,20)
        distIcon.Position = UDim2.new(0,0,0.5,-10)
        distIcon.Parent = distRow
        local distLabel = Instance.new("TextLabel")
        distLabel.Name = "DistanceLabel"
        distLabel.Text = "Distance: 0 studs"
        distLabel.TextColor3 = Color3.fromRGB(200,200,200)
        distLabel.TextSize = 14
        distLabel.Font = Enum.Font.Gotham
        distLabel.BackgroundTransparency = 1
        distLabel.Size = UDim2.new(1,-30,1,0)
        distLabel.Position = UDim2.new(0,30,0,0)
        distLabel.TextXAlignment = Enum.TextXAlignment.Left
        distLabel.Parent = distRow
        distRow.Parent = content
        
        local quickTeleport = Instance.new("TextButton")
        quickTeleport.Name = "QuickTeleport"
        quickTeleport.Text = "TELEPORT"
        quickTeleport.TextColor3 = Settings.TEXT_COLOR
        quickTeleport.TextSize = 12
        quickTeleport.Font = Enum.Font.GothamBold
        quickTeleport.BackgroundColor3 = Settings.TELEPORT_COLOR
        quickTeleport.BackgroundTransparency = 0.3
        quickTeleport.Size = UDim2.new(0,80,0,25)
        quickTeleport.Position = UDim2.new(1,-85,1,-30)
        quickTeleport.BorderSizePixel = 0
        quickTeleport.ZIndex = 3
        quickTeleport.AutoButtonColor = true
        Instance.new("UICorner", quickTeleport).CornerRadius = UDim.new(0,6)
        
        local tpDeb = false
        quickTeleport.MouseButton1Click:Connect(function()
            if tpDeb then return end
            tpDeb = true
            local ok, msg = teleportToObject(object)
            if ok then
                quickTeleport.Text = "✓ DONE"
                quickTeleport.BackgroundColor3 = Color3.fromRGB(46,204,113)
                quickTeleport.AutoButtonColor = false
                task.wait(0.5)
                quickTeleport.Text = "TELEPORT"
                quickTeleport.BackgroundColor3 = Settings.TELEPORT_COLOR
                quickTeleport.AutoButtonColor = true
            else
                quickTeleport.Text = msg
                quickTeleport.BackgroundColor3 = Color3.fromRGB(231,76,60)
                quickTeleport.AutoButtonColor = false
                task.wait(1.5)
                quickTeleport.Text = "TELEPORT"
                quickTeleport.BackgroundColor3 = Settings.TELEPORT_COLOR
                quickTeleport.AutoButtonColor = true
            end
            tpDeb = false
        end)
        quickTeleport.Parent = main
        
        local status = Instance.new("Frame")
        status.Name = "StatusIndicator"
        status.BackgroundColor3 = Color3.fromRGB(0,255,127)
        status.Size = UDim2.new(0,8,0,8)
        status.Position = UDim2.new(1,-100,0,10)
        status.BorderSizePixel = 0
        status.ZIndex = 3
        Instance.new("UICorner", status).CornerRadius = UDim.new(1,0)
        local statusTween = TweenService:Create(status, TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true), {BackgroundTransparency = 0.5})
        statusTween:Play()
        status.Parent = main
        
        content.Parent = main
        main.Parent = container
        
        container.Size = UDim2.new(0,10,0,10)
        main.BackgroundTransparency = 1
        TweenService:Create(container, TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Size = UDim2.new(0,320,0,140)}):Play()
        TweenService:Create(main, TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {BackgroundTransparency = Settings.BACKGROUND_TRANSPARENCY}):Play()
        
        container.Parent = Camera
        return container
    end)
    if success then
        return container
    else
        debugPrint("❌ Failed to create ESP for", object.Name)
        return nil
    end
end

--------------------------------------------------------------------
-- 6. ESP & FAVORITE MANAGEMENT
--------------------------------------------------------------------
local function setESPEnabled(obj, enabled)
    local data = objectCache[obj]
    if not data then return end
    data.espEnabled = enabled
    if data.esp then
        data.esp.Enabled = enabled and guiEnabled
    end
    if itemListVisible then
        pcall(updateItemList)
    end
    debouncedSaveSettings()
end

local function toggleFavorite(obj)
    local data = objectCache[obj]
    if not data then return end
    data.favorite = not data.favorite
    if itemListVisible then
        pcall(updateItemList)
    end
    debouncedSaveSettings()
end

--------------------------------------------------------------------
-- 7. UI COMPONENTS (INPUTS, TOGGLES, SLIDERS)
--------------------------------------------------------------------
local function createValueInput(parent, currentValue, minValue, maxValue, suffix, callback)
    local frame = Instance.new("Frame")
    frame.Name = "ValueInputFrame"
    frame.BackgroundTransparency = 1
    frame.Size = UDim2.new(0, 120, 0, 30)
    
    local box = Instance.new("TextBox")
    box.Name = "ValueInputBox"
    box.Text = tostring(currentValue)
    box.PlaceholderText = "Enter value..."
    box.TextColor3 = Settings.TEXT_COLOR
    box.PlaceholderColor3 = Color3.fromRGB(150,150,150)
    box.TextSize = 14
    box.Font = Enum.Font.Gotham
    box.BackgroundColor3 = Color3.fromRGB(40,40,50)
    box.BackgroundTransparency = 0.2
    box.Size = UDim2.new(1,0,1,0)
    box.BorderSizePixel = 0
    Instance.new("UICorner", box).CornerRadius = UDim.new(0,6)
    Instance.new("UIPadding", box).PaddingLeft = UDim.new(0,8)
    
    box.FocusLost:Connect(function()
        local val = tonumber(box.Text)
        if val then
            val = math.clamp(val, minValue, maxValue)
            box.Text = tostring(val)
            if callback then callback(val) end
            debouncedSaveSettings()
        else
            box.Text = tostring(currentValue)
        end
    end)
    box.Parent = frame
    return frame
end

local function createToggleSetting(parent, labelText, value, callback)
    local frame = Instance.new("Frame")
    frame.Name = labelText.."Toggle"
    frame.BackgroundTransparency = 1
    frame.Size = UDim2.new(1,0,0,50)
    
    local label = Instance.new("TextLabel")
    label.Text = labelText
    label.TextColor3 = Settings.TEXT_COLOR
    label.TextSize = 16
    label.Font = Enum.Font.GothamBold
    label.BackgroundTransparency = 1
    label.Size = UDim2.new(1,-100,0,25)
    label.TextXAlignment = Enum.TextXAlignment.Left
    label.Parent = frame
    
    local btn = Instance.new("TextButton")
    btn.Text = value and "ON" or "OFF"
    btn.TextColor3 = Settings.TEXT_COLOR
    btn.TextSize = 14
    btn.Font = Enum.Font.GothamBold
    btn.BackgroundColor3 = value and Color3.fromRGB(46,204,113) or Color3.fromRGB(231,76,60)
    btn.BackgroundTransparency = 0.3
    btn.Size = UDim2.new(0,80,0,30)
    btn.Position = UDim2.new(1,-80,0,0)
    btn.BorderSizePixel = 0
    btn.AutoButtonColor = true
    Instance.new("UICorner", btn).CornerRadius = UDim.new(0,8)
    
    btn.MouseButton1Click:Connect(function()
        local new = not value
        btn.Text = new and "ON" or "OFF"
        btn.BackgroundColor3 = new and Color3.fromRGB(46,204,113) or Color3.fromRGB(231,76,60)
        value = new
        if callback then callback(new) end
        debouncedSaveSettings()
    end)
    btn.Parent = frame
    return frame
end

local function createSettingSliderWithInput(labelText, value, minValue, maxValue, suffix, callback)
    local frame = Instance.new("Frame")
    frame.Name = labelText.."Slider"
    frame.BackgroundTransparency = 1
    frame.Size = UDim2.new(1,0,0,80)
    
    local label = Instance.new("TextLabel")
    label.Text = labelText
    label.TextColor3 = Settings.TEXT_COLOR
    label.TextSize = 16
    label.Font = Enum.Font.GothamBold
    label.BackgroundTransparency = 1
    label.Size = UDim2.new(1,0,0,25)
    label.TextXAlignment = Enum.TextXAlignment.Left
    label.Parent = frame
    
    local input = createValueInput(frame, value, minValue, maxValue, suffix, function(newVal)
        local pct = (newVal - minValue) / (maxValue - minValue)
        fill.Size = UDim2.new(pct, 0, 1, 0)
        btn.Position = UDim2.new(pct, -10, 0.5, -10)
        valLabel.Text = tostring(newVal)..suffix
        if callback then callback(newVal) end
        debouncedSaveSettings()
    end)
    input.Position = UDim2.new(1, -120, 0, 0)
    input.Size = UDim2.new(0, 120, 0, 30)
    input.Parent = frame
    
    local valLabel = Instance.new("TextLabel")
    valLabel.Name = "ValueLabel"
    valLabel.Text = tostring(value)..suffix
    valLabel.TextColor3 = Settings.PRIMARY_COLOR
    valLabel.TextSize = 16
    valLabel.Font = Enum.Font.GothamBold
    valLabel.BackgroundTransparency = 1
    valLabel.Size = UDim2.new(0,120,0,25)
    valLabel.Position = UDim2.new(0,0,0,25)
    valLabel.TextXAlignment = Enum.TextXAlignment.Left
    valLabel.Parent = frame
    
    local bg = Instance.new("Frame")
    bg.Name = "SliderBackground"
    bg.BackgroundColor3 = Color3.fromRGB(40,40,50)
    bg.BackgroundTransparency = 0.2
    bg.Size = UDim2.new(1,0,0,10)
    bg.Position = UDim2.new(0,0,0,55)
    bg.BorderSizePixel = 0
    Instance.new("UICorner", bg).CornerRadius = UDim.new(1,0)
    
    local fill = Instance.new("Frame")
    fill.Name = "SliderFill"
    fill.BackgroundColor3 = Settings.PRIMARY_COLOR
    fill.Size = UDim2.new((value-minValue)/(maxValue-minValue),0,1,0)
    fill.BorderSizePixel = 0
    Instance.new("UICorner", fill).CornerRadius = UDim.new(1,0)
    createGradient(fill, Settings.PRIMARY_COLOR, Settings.SECONDARY_COLOR, 0)
    
    local btn = Instance.new("TextButton")
    btn.Name = "SliderButton"
    btn.Text = ""
    btn.BackgroundColor3 = Color3.fromRGB(255,255,255)
    btn.Size = UDim2.new(0,20,0,20)
    btn.Position = UDim2.new((value-minValue)/(maxValue-minValue), -10, 0.5, -10)
    btn.BorderSizePixel = 0
    btn.ZIndex = 5
    btn.AutoButtonColor = false
    Instance.new("UICorner", btn).CornerRadius = UDim.new(1,0)
    
    local dragging = false
    local function updateFromMouse(x)
        local relX = math.clamp(x - bg.AbsolutePosition.X, 0, bg.AbsoluteSize.X)
        local pct = relX / bg.AbsoluteSize.X
        local newVal = minValue + pct * (maxValue - minValue)
        if suffix == " studs" then newVal = math.floor(newVal)
        elseif suffix == " sec" then newVal = math.floor(newVal)
        elseif suffix == " ms" then newVal = math.floor(newVal/10)*10 end
        newVal = math.clamp(newVal, minValue, maxValue)
        local fillPct = (newVal - minValue) / (maxValue - minValue)
        fill.Size = UDim2.new(fillPct, 0, 1, 0)
        btn.Position = UDim2.new(fillPct, -10, 0.5, -10)
        valLabel.Text = tostring(newVal)..suffix
        local inp = input:FindFirstChild("ValueInputBox")
        if inp then inp.Text = tostring(newVal) end
        if callback then callback(newVal) end
    end
    
    btn.MouseButton1Down:Connect(function() dragging = true end)
    bg.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = true
            updateFromMouse(i.Position.X)
        end
    end)
    UserInputService.InputChanged:Connect(function(i)
        if dragging and i.UserInputType == Enum.UserInputType.MouseMovement then
            updateFromMouse(i.Position.X)
        end
    end)
    UserInputService.InputEnded:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 and dragging then
            dragging = false
            debouncedSaveSettings()
        end
    end)
    
    fill.Parent = bg
    btn.Parent = bg
    bg.Parent = frame
    return frame
end

--------------------------------------------------------------------
-- 8. LIST FUNCTIONS
--------------------------------------------------------------------
function updateListToggleIcon()
    if not listToggle then return end
    local total = 0
    for _ in pairs(objectCache) do total = total + 1 end
    listToggle.Text = "📋 "..total
end

function updateItemList()
    if not itemListGUI or not itemListGUI.Visible then return end
    
    local container = itemListGUI:FindFirstChild("ItemsContainer")
    local countLabel = itemListGUI:FindFirstChild("ItemCount")
    if not container or not countLabel then return end
    
    -- Clear container
    for _, c in ipairs(container:GetChildren()) do 
        if c:IsA("Frame") then 
            pcall(function() c:Destroy() end)
        end 
    end
    
    -- Collect items
    local items = {}
    for obj, data in pairs(objectCache) do
        if obj and obj.Parent then
            data.position = getObjectPosition(obj)
            data.className = obj.ClassName
            data.displayName = getDisplayName(obj)
            table.insert(items, {
                obj = obj,
                data = data
            })
        else
            if data and data.esp then pcall(function() data.esp:Destroy() end) end
            objectCache[obj] = nil
        end
    end
    
    -- Apply filters
    local filtered = {}
    for _, it in ipairs(items) do
        local isTool = it.obj:IsA("Tool")
        local isNote = it.obj:IsA("Model") and it.obj.Name == SPECIFIC_MODEL_NAME
        
        if listState.filterType == "all" then
            table.insert(filtered, it)
        elseif listState.filterType == "tool" and isTool then
            table.insert(filtered, it)
        elseif listState.filterType == "note" and isNote then
            table.insert(filtered, it)
        end
    end
    
    -- Apply search
    if listState.searchText and listState.searchText ~= "" then
        local search = string.lower(listState.searchText)
        local searchFiltered = {}
        for _, it in ipairs(filtered) do
            local name = string.lower(it.data.displayName or "")
            if string.find(name, search, 1, true) then
                table.insert(searchFiltered, it)
            end
        end
        filtered = searchFiltered
    end
    
    -- Sorting
    local root = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
    local sortSuccess = pcall(function()
        table.sort(filtered, function(a, b)
            local da, db = a.data, b.data
            local distA = root and (root.Position - da.position).Magnitude or math.huge
            local distB = root and (root.Position - db.position).Magnitude or math.huge
            
            if listState.sortMode == "name" then
                local nameA = da.displayName or ""
                local nameB = db.displayName or ""
                if listState.sortAsc then
                    return nameA < nameB
                else
                    return nameA > nameB
                end
            elseif listState.sortMode == "distance" then
                if listState.sortAsc then
                    return distA < distB
                else
                    return distA > distB
                end
            elseif listState.sortMode == "favorite" then
                if da.favorite ~= db.favorite then
                    return da.favorite and not db.favorite
                else
                    return distA < distB
                end
            else
                return distA < distB
            end
        end)
    end)
    if not sortSuccess then
        debugPrint("Sort failed, using unsorted")
    end
    
    -- Update count
    local total = 0
    for _ in pairs(objectCache) do total = total + 1 end
    countLabel.Text = string.format("Items: %d (showing %d)", total, #filtered)
    updateListToggleIcon()
    
    -- Create cards
    for i, it in ipairs(filtered) do
        local obj = it.obj
        local data = it.data
        local dist = root and (root.Position - data.position).Magnitude or 0
        local distText = root and string.format("%.0f studs", dist) or "Unknown"
        local isTool = obj:IsA("Tool")
        local icon = isTool and "🛠️" or "📝"
        
        local card = Instance.new("Frame")
        card.Name = "ItemCard"
        card.BackgroundColor3 = Color3.fromRGB(40,50,60)
        card.BackgroundTransparency = 0.1
        card.Size = UDim2.new(1, -20, 0, 60)
        card.BorderSizePixel = 0
        card.LayoutOrder = i
        Instance.new("UICorner", card).CornerRadius = UDim.new(0, 8)
        
        -- Icon
        local iconLabel = Instance.new("TextLabel")
        iconLabel.Text = icon
        iconLabel.TextColor3 = Settings.TEXT_COLOR
        iconLabel.TextSize = 24
        iconLabel.Font = Enum.Font.GothamBold
        iconLabel.BackgroundTransparency = 1
        iconLabel.Size = UDim2.new(0, 30, 0, 30)
        iconLabel.Position = UDim2.new(0, 5, 0.5, -15)
        iconLabel.Parent = card
        
        -- Name
        local nameLabel = Instance.new("TextLabel")
        nameLabel.Text = data.displayName or obj.Name
        nameLabel.TextColor3 = Settings.TEXT_COLOR
        nameLabel.TextSize = 14
        nameLabel.Font = Enum.Font.GothamBold
        nameLabel.BackgroundTransparency = 1
        nameLabel.Size = UDim2.new(0, 150, 0, 30)
        nameLabel.Position = UDim2.new(0, 40, 0.5, -15)
        nameLabel.TextXAlignment = Enum.TextXAlignment.Left
        nameLabel.TextTruncate = Enum.TextTruncate.AtEnd
        nameLabel.Parent = card
        
        -- Distance
        local distLabel = Instance.new("TextLabel")
        distLabel.Text = distText
        distLabel.TextColor3 = Settings.PRIMARY_COLOR
        distLabel.TextSize = 12
        distLabel.Font = Enum.Font.Gotham
        distLabel.BackgroundTransparency = 1
        distLabel.Size = UDim2.new(0, 80, 0, 30)
        distLabel.Position = UDim2.new(0, 200, 0.5, -15)
        distLabel.Parent = card
        
        -- Favorite button
        local favBtn = Instance.new("TextButton")
        favBtn.Text = data.favorite and "★" or "☆"
        favBtn.TextColor3 = data.favorite and Settings.FAVORITE_COLOR or Color3.fromRGB(150,150,150)
        favBtn.TextSize = 20
        favBtn.Font = Enum.Font.GothamBold
        favBtn.BackgroundTransparency = 1
        favBtn.Size = UDim2.new(0, 30, 0, 30)
        favBtn.Position = UDim2.new(0, 290, 0.5, -15)
        favBtn.ZIndex = 23
        favBtn.AutoButtonColor = false
        favBtn.Parent = card
        favBtn.MouseButton1Click:Connect(function()
            toggleFavorite(obj)
        end)
        
        -- ESP button
        local espBtn = Instance.new("TextButton")
        espBtn.Text = "👁️"
        espBtn.TextColor3 = data.esp and data.espEnabled and Settings.ESP_ENABLED_COLOR or Settings.ESP_DISABLED_COLOR
        espBtn.TextSize = 20
        espBtn.Font = Enum.Font.GothamBold
        espBtn.BackgroundTransparency = 1
        espBtn.Size = UDim2.new(0, 30, 0, 30)
        espBtn.Position = UDim2.new(0, 330, 0.5, -15)
        espBtn.ZIndex = 23
        espBtn.AutoButtonColor = false
        espBtn.Parent = card
        espBtn.MouseButton1Click:Connect(function()
            if data.esp then
                setESPEnabled(obj, not data.espEnabled)
            else
                local esp = createInfoCard(obj)
                if esp then
                    data.esp = esp
                    data.espEnabled = true
                    esp.Enabled = guiEnabled
                end
            end
            espBtn.TextColor3 = data.esp and data.espEnabled and Settings.ESP_ENABLED_COLOR or Settings.ESP_DISABLED_COLOR
        end)
        
        -- Teleport button
        local tpBtn = Instance.new("TextButton")
        tpBtn.Text = "TP"
        tpBtn.TextColor3 = Settings.TEXT_COLOR
        tpBtn.TextSize = 12
        tpBtn.Font = Enum.Font.GothamBold
        tpBtn.BackgroundColor3 = Settings.TELEPORT_COLOR
        tpBtn.BackgroundTransparency = 0.2
        tpBtn.Size = UDim2.new(0, 40, 0, 30)
        tpBtn.Position = UDim2.new(1, -50, 0.5, -15)
        tpBtn.BorderSizePixel = 0
        tpBtn.ZIndex = 22
        tpBtn.AutoButtonColor = true
        Instance.new("UICorner", tpBtn).CornerRadius = UDim.new(0, 6)
        local deb = false
        tpBtn.MouseButton1Click:Connect(function()
            if deb then return end
            deb = true
            teleportToObject(obj)
            deb = false
        end)
        tpBtn.Parent = card
        
        card.Parent = container
    end
end

--------------------------------------------------------------------
-- 9. SETTINGS WINDOW
--------------------------------------------------------------------
local function createSettingsGUI()
    if settingsGUI and settingsGUI.Parent then settingsGUI:Destroy() end
    settingsGUI = Instance.new("Frame")
    settingsGUI.Name = "SettingsGUI"
    settingsGUI.BackgroundColor3 = Settings.LIST_COLOR
    settingsGUI.BackgroundTransparency = 0.2
    settingsGUI.Size = UDim2.new(0,450,0,650)
    settingsGUI.Position = savedSettingsGUIPos or UDim2.new(0.5,-225,0.5,-325)
    settingsGUI.BorderSizePixel = 0
    settingsGUI.Visible = false
    settingsGUI.ZIndex = 20
    Instance.new("UICorner", settingsGUI).CornerRadius = UDim.new(0,12)
    
    -- Title bar
    local titleBar = Instance.new("Frame")
    titleBar.Name = "TitleBar"
    titleBar.BackgroundColor3 = Settings.PRIMARY_COLOR
    titleBar.Size = UDim2.new(1,0,0,50)
    titleBar.BorderSizePixel = 0
    titleBar.ZIndex = 21
    Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0,12,0,0)
    createGradient(titleBar, Settings.PRIMARY_COLOR, Settings.SECONDARY_COLOR, 45)
    
    local closeBtn = Instance.new("TextButton")
    closeBtn.Text = "✕"
    closeBtn.TextColor3 = Settings.TEXT_COLOR
    closeBtn.TextSize = 24
    closeBtn.Font = Enum.Font.GothamBold
    closeBtn.BackgroundColor3 = Color3.fromRGB(231,76,60)
    closeBtn.BackgroundTransparency = 0.3
    closeBtn.Size = UDim2.new(0,40,0,40)
    closeBtn.Position = UDim2.new(1,-50,0,5)
    closeBtn.BorderSizePixel = 0
    closeBtn.ZIndex = 22
    Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0,8)
    closeBtn.MouseButton1Click:Connect(function() toggleSettings(false) end)
    closeBtn.Parent = titleBar
    
    local container = Instance.new("ScrollingFrame")
    container.Name = "SettingsContainer"
    container.BackgroundTransparency = 1
    container.Size = UDim2.new(1,-20,1,-100)
    container.Position = UDim2.new(0,10,0,60)
    container.BorderSizePixel = 0
    container.ScrollBarThickness = 8
    container.AutomaticCanvasSize = Enum.AutomaticSize.Y
    container.ZIndex = 21
    Instance.new("UIListLayout", container).Padding = UDim.new(0,15)
    
    -- Sliders
    createSettingSliderWithInput("Max Distance", Settings.MAX_DISTANCE, 100, 15000, " studs", function(v) Settings.MAX_DISTANCE = v end).Parent = container
    createSettingSliderWithInput("Fade Start", Settings.FADE_START_DISTANCE, 50, 10000, " studs", function(v) Settings.FADE_START_DISTANCE = v end).Parent = container
    createSettingSliderWithInput("Notif Duration", Settings.NOTIFICATION_DURATION, 1, 60, " sec", function(v) Settings.NOTIFICATION_DURATION = v end).Parent = container
    createSettingSliderWithInput("Teleport Range", Settings.TELEPORT_RANGE, 10, 5000, " studs", function(v) Settings.TELEPORT_RANGE = v end).Parent = container
    createSettingSliderWithInput("ESP Update (ms)", Settings.UPDATE_INTERVAL * 1000, 10, 5000, " ms", function(v) Settings.UPDATE_INTERVAL = v/1000 end).Parent = container
    createSettingSliderWithInput("List Refresh (ms)", Settings.LIST_UPDATE_INTERVAL * 1000, 100, 5000, " ms", function(v) Settings.LIST_UPDATE_INTERVAL = v/1000 end).Parent = container
    createToggleSetting(container, "Debug Mode", DEBUG, function(v) DEBUG = v end).Parent = container
    
    -- Save button
    local saveBtn = Instance.new("TextButton")
    saveBtn.Text = "💾 SAVE SETTINGS"
    saveBtn.TextColor3 = Settings.TEXT_COLOR
    saveBtn.TextSize = 16
    saveBtn.Font = Enum.Font.GothamBold
    saveBtn.BackgroundColor3 = Color3.fromRGB(46,204,113)
    saveBtn.BackgroundTransparency = 0.2
    saveBtn.Size = UDim2.new(1,-40,0,40)
    saveBtn.Position = UDim2.new(0,20,1,-60)
    saveBtn.BorderSizePixel = 0
    saveBtn.ZIndex = 22
    Instance.new("UICorner", saveBtn).CornerRadius = UDim.new(0,8)
    saveBtn.MouseButton1Click:Connect(saveSettings)
    saveBtn.Parent = settingsGUI
    
    -- Drag
    local dragging, dragStart, startPos = false, nil, nil
    titleBar.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = true
            dragStart = i.Position
            startPos = settingsGUI.Position
            i.Changed:Connect(function()
                if i.UserInputState == Enum.UserInputState.End then
                    dragging = false
                    savedSettingsGUIPos = settingsGUI.Position
                    debouncedSaveSettings()
                end
            end)
        end
    end)
    titleBar.InputChanged:Connect(function(i)
        if dragging and i.UserInputType == Enum.UserInputType.MouseMovement then
            local delta = i.Position - dragStart
            settingsGUI.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
        end
    end)
    
    titleBar.Parent = settingsGUI
    container.Parent = settingsGUI
    settingsGUI.Parent = screenGui
    return settingsGUI
end

--------------------------------------------------------------------
-- 10. ITEM LIST GUI
--------------------------------------------------------------------
local function createItemListGUI()
    if itemListGUI and itemListGUI.Parent then itemListGUI:Destroy() end
    
    itemListGUI = Instance.new("Frame")
    itemListGUI.Name = "ItemListGUI"
    itemListGUI.BackgroundColor3 = Settings.LIST_COLOR
    itemListGUI.BackgroundTransparency = 0.2
    itemListGUI.Size = UDim2.new(0, 650, 0, 500)
    itemListGUI.Position = savedItemListGUIPos or UDim2.new(0.5, -325, 0.5, -250)
    itemListGUI.BorderSizePixel = 0
    itemListGUI.Visible = false
    itemListGUI.ZIndex = 20
    Instance.new("UICorner", itemListGUI).CornerRadius = UDim.new(0, 12)
    
    -- Title bar
    local titleBar = Instance.new("Frame")
    titleBar.Name = "TitleBar"
    titleBar.BackgroundColor3 = Settings.PRIMARY_COLOR
    titleBar.Size = UDim2.new(1, 0, 0, 50)
    titleBar.BorderSizePixel = 0
    titleBar.ZIndex = 21
    Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0, 12, 0, 0)
    createGradient(titleBar, Settings.PRIMARY_COLOR, Settings.SECONDARY_COLOR, 45)
    
    local title = Instance.new("TextLabel")
    title.Text = "TRACKED ITEMS"
    title.TextColor3 = Settings.TEXT_COLOR
    title.TextSize = 22
    title.Font = Enum.Font.GothamBold
    title.BackgroundTransparency = 1
    title.Size = UDim2.new(1, -100, 1, 0)
    title.Position = UDim2.new(0, 20, 0, 0)
    title.TextXAlignment = Enum.TextXAlignment.Left
    title.ZIndex = 23
    title.Parent = titleBar
    
    local closeBtn = Instance.new("TextButton")
    closeBtn.Text = "✕"
    closeBtn.TextColor3 = Settings.TEXT_COLOR
    closeBtn.TextSize = 24
    closeBtn.Font = Enum.Font.GothamBold
    closeBtn.BackgroundColor3 = Color3.fromRGB(231, 76, 60)
    closeBtn.BackgroundTransparency = 0.3
    closeBtn.Size = UDim2.new(0, 40, 0, 40)
    closeBtn.Position = UDim2.new(1, -50, 0, 5)
    closeBtn.BorderSizePixel = 0
    closeBtn.ZIndex = 22
    Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0, 8)
    closeBtn.MouseButton1Click:Connect(function() toggleItemList(false) end)
    closeBtn.Parent = titleBar
    titleBar.Parent = itemListGUI
    
    -- Filter bar
    local filterBar = Instance.new("Frame")
    filterBar.Name = "FilterBar"
    filterBar.BackgroundTransparency = 1
    filterBar.Size = UDim2.new(1, -20, 0, 40)
    filterBar.Position = UDim2.new(0, 10, 0, 55)
    filterBar.ZIndex = 21
    filterBar.Parent = itemListGUI
    
    local filterAll = Instance.new("TextButton")
    filterAll.Name = "FilterAll"
    filterAll.Text = "📋 All"
    filterAll.TextColor3 = Settings.TEXT_COLOR
    filterAll.TextSize = 14
    filterAll.Font = Enum.Font.GothamBold
    filterAll.BackgroundColor3 = Settings.PRIMARY_COLOR
    filterAll.BackgroundTransparency = 0.3
    filterAll.Size = UDim2.new(0, 80, 0, 30)
    filterAll.Position = UDim2.new(0, 0, 0.5, -15)
    filterAll.BorderSizePixel = 0
    filterAll.ZIndex = 22
    filterAll.AutoButtonColor = true
    Instance.new("UICorner", filterAll).CornerRadius = UDim.new(0, 8)
    filterAll.Parent = filterBar
    
    local filterTools = Instance.new("TextButton")
    filterTools.Name = "FilterTools"
    filterTools.Text = "🛠️ Tools"
    filterTools.TextColor3 = Settings.TEXT_COLOR
    filterTools.TextSize = 14
    filterTools.Font = Enum.Font.GothamBold
    filterTools.BackgroundColor3 = Settings.SECONDARY_COLOR
    filterTools.BackgroundTransparency = 0.3
    filterTools.Size = UDim2.new(0, 90, 0, 30)
    filterTools.Position = UDim2.new(0, 90, 0.5, -15)
    filterTools.BorderSizePixel = 0
    filterTools.ZIndex = 22
    filterTools.AutoButtonColor = true
    Instance.new("UICorner", filterTools).CornerRadius = UDim.new(0, 8)
    filterTools.Parent = filterBar
    
    local filterNotes = Instance.new("TextButton")
    filterNotes.Name = "FilterNotes"
    filterNotes.Text = "📝 Notes"
    filterNotes.TextColor3 = Settings.TEXT_COLOR
    filterNotes.TextSize = 14
    filterNotes.Font = Enum.Font.GothamBold
    filterNotes.BackgroundColor3 = Settings.TELEPORT_COLOR
    filterNotes.BackgroundTransparency = 0.3
    filterNotes.Size = UDim2.new(0, 90, 0, 30)
    filterNotes.Position = UDim2.new(0, 190, 0.5, -15)
    filterNotes.BorderSizePixel = 0
    filterNotes.ZIndex = 22
    filterNotes.AutoButtonColor = true
    Instance.new("UICorner", filterNotes).CornerRadius = UDim.new(0, 8)
    filterNotes.Parent = filterBar
    
    local refreshBtn = Instance.new("TextButton")
    refreshBtn.Name = "RefreshButton"
    refreshBtn.Text = "🔄"
    refreshBtn.TextColor3 = Settings.TEXT_COLOR
    refreshBtn.TextSize = 20
    refreshBtn.Font = Enum.Font.GothamBold
    refreshBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
    refreshBtn.BackgroundTransparency = 0.3
    refreshBtn.Size = UDim2.new(0, 40, 0, 30)
    refreshBtn.Position = UDim2.new(1, -170, 0.5, -15)
    refreshBtn.BorderSizePixel = 0
    refreshBtn.ZIndex = 22
    refreshBtn.AutoButtonColor = true
    Instance.new("UICorner", refreshBtn).CornerRadius = UDim.new(0, 8)
    refreshBtn.MouseButton1Click:Connect(function()
        pcall(findAndSetupObjects)
        pcall(updateItemList)
    end)
    refreshBtn.Parent = filterBar
    
    local searchBar = Instance.new("TextBox")
    searchBar.Name = "SearchBar"
    searchBar.PlaceholderText = "🔍 Search..."
    searchBar.Text = ""
    searchBar.TextColor3 = Settings.TEXT_COLOR
    searchBar.PlaceholderColor3 = Color3.fromRGB(150,150,150)
    searchBar.TextSize = 14
    searchBar.Font = Enum.Font.Gotham
    searchBar.BackgroundColor3 = Color3.fromRGB(40,40,50)
    searchBar.BackgroundTransparency = 0.2
    searchBar.Size = UDim2.new(0, 120, 0, 30)
    searchBar.Position = UDim2.new(1, -120, 0.5, -15)
    searchBar.BorderSizePixel = 0
    searchBar.ZIndex = 21
    Instance.new("UICorner", searchBar).CornerRadius = UDim.new(0, 8)
    Instance.new("UIPadding", searchBar).PaddingLeft = UDim.new(0, 10)
    searchBar:GetPropertyChangedSignal("Text"):Connect(function()
        listState.searchText = searchBar.Text
        pcall(updateItemList)
    end)
    searchBar.Parent = filterBar
    
    -- Sort bar
    local sortBar = Instance.new("Frame")
    sortBar.Name = "SortBar"
    sortBar.BackgroundColor3 = Color3.fromRGB(40, 50, 60)
    sortBar.BackgroundTransparency = 0.5
    sortBar.Size = UDim2.new(1, -20, 0, 30)
    sortBar.Position = UDim2.new(0, 10, 0, 100)
    sortBar.BorderSizePixel = 0
    sortBar.ZIndex = 21
    Instance.new("UICorner", sortBar).CornerRadius = UDim.new(0, 6)
    sortBar.Parent = itemListGUI
    
    local iconHeader = Instance.new("TextLabel")
    iconHeader.Text = "📦"
    iconHeader.TextColor3 = Color3.fromRGB(200,200,200)
    iconHeader.TextSize = 18
    iconHeader.Font = Enum.Font.GothamBold
    iconHeader.BackgroundTransparency = 1
    iconHeader.Size = UDim2.new(0, 30, 1, 0)
    iconHeader.Position = UDim2.new(0, 5, 0, 0)
    iconHeader.ZIndex = 22
    iconHeader.Parent = sortBar
    
    local nameHeader = Instance.new("TextButton")
    nameHeader.Name = "SortName"
    nameHeader.Text = "Name ▲"
    nameHeader.TextColor3 = Settings.TEXT_COLOR
    nameHeader.TextSize = 14
    nameHeader.Font = Enum.Font.GothamBold
    nameHeader.BackgroundTransparency = 1
    nameHeader.Size = UDim2.new(0, 150, 1, 0)
    nameHeader.Position = UDim2.new(0, 40, 0, 0)
    nameHeader.ZIndex = 22
    nameHeader.TextXAlignment = Enum.TextXAlignment.Left
    nameHeader.Parent = sortBar
    
    local distanceHeader = Instance.new("TextButton")
    distanceHeader.Name = "SortDistance"
    distanceHeader.Text = "Distance ▲"
    distanceHeader.TextColor3 = Settings.PRIMARY_COLOR
    distanceHeader.TextSize = 14
    distanceHeader.Font = Enum.Font.GothamBold
    distanceHeader.BackgroundTransparency = 1
    distanceHeader.Size = UDim2.new(0, 100, 1, 0)
    distanceHeader.Position = UDim2.new(0, 200, 0, 0)
    distanceHeader.ZIndex = 22
    distanceHeader.TextXAlignment = Enum.TextXAlignment.Left
    distanceHeader.Parent = sortBar
    
    local favHeader = Instance.new("TextButton")
    favHeader.Name = "SortFavorite"
    favHeader.Text = "★"
    favHeader.TextColor3 = Color3.fromRGB(200,200,200)
    favHeader.TextSize = 18
    favHeader.Font = Enum.Font.GothamBold
    favHeader.BackgroundTransparency = 1
    favHeader.Size = UDim2.new(0, 40, 1, 0)
    favHeader.Position = UDim2.new(0, 310, 0, 0)
    favHeader.ZIndex = 22
    favHeader.Parent = sortBar
    
    local espHeader = Instance.new("TextLabel")
    espHeader.Text = "👁️"
    espHeader.TextColor3 = Color3.fromRGB(200,200,200)
    espHeader.TextSize = 18
    espHeader.Font = Enum.Font.GothamBold
    espHeader.BackgroundTransparency = 1
    espHeader.Size = UDim2.new(0, 40, 1, 0)
    espHeader.Position = UDim2.new(0, 360, 0, 0)
    espHeader.ZIndex = 22
    espHeader.Parent = sortBar
    
    local actionHeader = Instance.new("TextLabel")
    actionHeader.Text = "Action"
    actionHeader.TextColor3 = Color3.fromRGB(200,200,200)
    actionHeader.TextSize = 14
    actionHeader.Font = Enum.Font.GothamBold
    actionHeader.BackgroundTransparency = 1
    actionHeader.Size = UDim2.new(0, 60, 1, 0)
    actionHeader.Position = UDim2.new(0, 410, 0, 0)
    actionHeader.ZIndex = 22
    actionHeader.TextXAlignment = Enum.TextXAlignment.Center
    actionHeader.Parent = sortBar
    
    -- Items container
    local itemsContainer = Instance.new("ScrollingFrame")
    itemsContainer.Name = "ItemsContainer"
    itemsContainer.BackgroundTransparency = 1
    itemsContainer.Size = UDim2.new(1, -20, 1, -180)
    itemsContainer.Position = UDim2.new(0, 10, 0, 140)
    itemsContainer.BorderSizePixel = 0
    itemsContainer.ScrollBarThickness = 8
    itemsContainer.AutomaticCanvasSize = Enum.AutomaticSize.Y
    itemsContainer.ZIndex = 21
    local itemListLayout = Instance.new("UIListLayout")
    itemListLayout.Padding = UDim.new(0, 8)
    itemListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
    itemListLayout.Parent = itemsContainer
    itemsContainer.Parent = itemListGUI
    
    -- Item counter
    local itemCount = Instance.new("TextLabel")
    itemCount.Name = "ItemCount"
    itemCount.Text = "Items: 0"
    itemCount.TextColor3 = Color3.fromRGB(200,200,200)
    itemCount.TextSize = 14
    itemCount.Font = Enum.Font.Gotham
    itemCount.BackgroundTransparency = 1
    itemCount.Size = UDim2.new(1, -20, 0, 30)
    itemCount.Position = UDim2.new(0, 10, 1, -40)
    itemCount.TextXAlignment = Enum.TextXAlignment.Left
    itemCount.Parent = itemListGUI
    
    -- Filter handlers
    local function setActiveFilter(activeBtn)
        filterAll.BackgroundTransparency = 0.7
        filterTools.BackgroundTransparency = 0.7
        filterNotes.BackgroundTransparency = 0.7
        activeBtn.BackgroundTransparency = 0.1
    end
    
    filterAll.MouseButton1Click:Connect(function()
        listState.filterType = "all"
        setActiveFilter(filterAll)
        pcall(updateItemList)
    end)
    filterTools.MouseButton1Click:Connect(function()
        listState.filterType = "tool"
        setActiveFilter(filterTools)
        pcall(updateItemList)
    end)
    filterNotes.MouseButton1Click:Connect(function()
        listState.filterType = "note"
        setActiveFilter(filterNotes)
        pcall(updateItemList)
    end)
    setActiveFilter(filterAll)
    
    -- Sort handlers
    local function setSort(mode, asc)
        listState.sortMode = mode
        listState.sortAsc = asc
        nameHeader.Text = "Name" .. (mode == "name" and (asc and " ▲" or " ▼") or "")
        distanceHeader.Text = "Distance" .. (mode == "distance" and (asc and " ▲" or " ▼") or "")
        favHeader.Text = "★" .. (mode == "favorite" and (asc and " ▲" or " ▼") or "")
        nameHeader.TextColor3 = mode == "name" and Settings.PRIMARY_COLOR or Color3.fromRGB(200,200,200)
        distanceHeader.TextColor3 = mode == "distance" and Settings.PRIMARY_COLOR or Color3.fromRGB(200,200,200)
        favHeader.TextColor3 = mode == "favorite" and Settings.FAVORITE_COLOR or Color3.fromRGB(200,200,200)
        pcall(updateItemList)
    end
    
    nameHeader.MouseButton1Click:Connect(function()
        if listState.sortMode == "name" then
            setSort("name", not listState.sortAsc)
        else
            setSort("name", true)
        end
    end)
    distanceHeader.MouseButton1Click:Connect(function()
        if listState.sortMode == "distance" then
            setSort("distance", not listState.sortAsc)
        else
            setSort("distance", true)
        end
    end)
    favHeader.MouseButton1Click:Connect(function()
        if listState.sortMode == "favorite" then
            setSort("favorite", not listState.sortAsc)
        else
            setSort("favorite", true)
        end
    end)
    
    -- Window drag
    local dragging, dragStart, startPos = false, nil, nil
    titleBar.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = true
            dragStart = i.Position
            startPos = itemListGUI.Position
            i.Changed:Connect(function()
                if i.UserInputState == Enum.UserInputState.End then
                    dragging = false
                    savedItemListGUIPos = itemListGUI.Position
                    debouncedSaveSettings()
                end
            end)
        end
    end)
    titleBar.InputChanged:Connect(function(i)
        if dragging and i.UserInputType == Enum.UserInputType.MouseMovement then
            local delta = i.Position - dragStart
            itemListGUI.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
        end
    end)
    
    itemListGUI.Parent = screenGui
    return itemListGUI
end

--------------------------------------------------------------------
-- 11. WINDOW TOGGLE FUNCTIONS
--------------------------------------------------------------------
function toggleSettings(visible)
    if visible == nil then visible = not settingsVisible end
    settingsVisible = visible
    if not settingsGUI then settingsGUI = createSettingsGUI() end
    settingsGUI.Visible = visible
    if not visible then saveSettings() end
end

function toggleItemList(visible)
    if visible == nil then visible = not itemListVisible end
    itemListVisible = visible
    if not itemListGUI then itemListGUI = createItemListGUI() end
    itemListGUI.Visible = visible
    if visible then pcall(updateItemList) else saveSettings() end
end

--------------------------------------------------------------------
-- 12. DISTANCE UPDATE
--------------------------------------------------------------------
local lastESPUpdate = tick()
local lastListUpdate = tick()

local function updateDistances()
    if not LocalPlayer.Character then return end
    local root = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
    if not root then return end
    
    local now = tick()
    
    if now - lastESPUpdate >= Settings.UPDATE_INTERVAL then
        for obj, data in pairs(objectCache) do
            if obj and obj.Parent then
                data.position = getObjectPosition(obj)
                if data.esp then
                    local dist = (root.Position - data.position).Magnitude
                    data.esp.Enabled = guiEnabled and data.espEnabled and dist <= Settings.MAX_DISTANCE
                end
            else
                if data and data.esp then pcall(function() data.esp:Destroy() end) end
                objectCache[obj] = nil
                updateListToggleIcon()
            end
        end
        lastESPUpdate = now
    end
    
    if itemListVisible and now - lastListUpdate >= Settings.LIST_UPDATE_INTERVAL then
        pcall(updateItemList)
        lastListUpdate = now
    end
end

--------------------------------------------------------------------
-- 13. OBJECT SEARCH & TRACKING
--------------------------------------------------------------------
local function findAndSetupObjects()
    local count = 0
    local function scan(parent)
        for _, obj in ipairs(parent:GetChildren()) do
            if shouldTrackObject(obj) and not objectCache[obj] then
                -- Полный путь объекта для сохранения состояния
                local path = obj:GetFullName()
                local favorite = savedObjectFavorites[path] or false
                local espEnabled = savedObjectESP[path] or true -- по умолчанию ESP включён
                
                local esp = createInfoCard(obj)
                objectCache[obj] = {
                    esp = esp,
                    espEnabled = espEnabled,
                    favorite = favorite,
                    addedTime = tick(),
                    className = obj.ClassName,
                    displayName = getDisplayName(obj),
                    position = getObjectPosition(obj),
                    fullPath = path
                }
                if esp then 
                    esp.Enabled = guiEnabled and espEnabled
                end
                count = count + 1
            end
            if obj:IsA("Model") or obj:IsA("Folder") then pcall(scan, obj) end
        end
    end
    pcall(scan, TRACK_PATH)
    debugPrint("🔍 Initial scan:", count, "objects")
    updateListToggleIcon()
end

local function onChildAdded(child)
    if shouldTrackObject(child) and not objectCache[child] then
        task.wait(0.2)
        local path = child:GetFullName()
        local favorite = savedObjectFavorites[path] or false
        local espEnabled = savedObjectESP[path] or true
        
        createSpawnNotification(child.Name, child)
        local esp = createInfoCard(child)
        objectCache[child] = {
            esp = esp,
            espEnabled = espEnabled,
            favorite = favorite,
            addedTime = tick(),
            className = child.ClassName,
            displayName = getDisplayName(child),
            position = getObjectPosition(child),
            fullPath = path
        }
        if esp then 
            esp.Enabled = guiEnabled and espEnabled
        end
        updateListToggleIcon()
        if itemListVisible then pcall(updateItemList) end
    end
end

local function onChildRemoving(child)
    if objectCache[child] then
        if objectCache[child].esp then pcall(function() objectCache[child].esp:Destroy() end) end
        objectCache[child] = nil
        updateListToggleIcon()
        if itemListVisible then pcall(updateItemList) end
    end
end

--------------------------------------------------------------------
-- 14. TOGGLE BUTTONS
--------------------------------------------------------------------
local function createToggleButtons()
    mainToggle = Instance.new("TextButton")
    mainToggle.Name = "MainToggleButton"
    mainToggle.Text = "🔍"
    mainToggle.TextColor3 = Settings.TEXT_COLOR
    mainToggle.TextSize = 20
    mainToggle.Font = Enum.Font.GothamBold
    mainToggle.BackgroundColor3 = Settings.TOGGLE_COLOR
    mainToggle.BackgroundTransparency = 0.3
    mainToggle.Size = UDim2.new(0,50,0,50)
    mainToggle.Position = savedMainTogglePos or UDim2.new(0,20,0.5,-25)
    mainToggle.BorderSizePixel = 0
    mainToggle.ZIndex = 100
    mainToggle.Draggable = true
    Instance.new("UICorner", mainToggle).CornerRadius = UDim.new(1,0)
    
    listToggle = Instance.new("TextButton")
    listToggle.Name = "ListToggleButton"
    listToggle.Text = "📋 0"
    listToggle.TextColor3 = Settings.TEXT_COLOR
    listToggle.TextSize = 18
    listToggle.Font = Enum.Font.GothamBold
    listToggle.BackgroundColor3 = Settings.SECONDARY_COLOR
    listToggle.BackgroundTransparency = 0.3
    listToggle.Size = UDim2.new(0,40,0,40)
    listToggle.Position = savedListTogglePos or UDim2.new(0,75,0.5,-20)
    listToggle.BorderSizePixel = 0
    listToggle.ZIndex = 100
    listToggle.Draggable = true
    listToggle.Visible = guiEnabled
    Instance.new("UICorner", listToggle).CornerRadius = UDim.new(1,0)
    
    settingsToggle = Instance.new("TextButton")
    settingsToggle.Name = "SettingsToggleButton"
    settingsToggle.Text = "⚙️"
    settingsToggle.TextColor3 = Settings.TEXT_COLOR
    settingsToggle.TextSize = 18
    settingsToggle.Font = Enum.Font.GothamBold
    settingsToggle.BackgroundColor3 = Color3.fromRGB(155,89,182)
    settingsToggle.BackgroundTransparency = 0.3
    settingsToggle.Size = UDim2.new(0,40,0,40)
    settingsToggle.Position = savedSettingsTogglePos or UDim2.new(0,120,0.5,-20)
    settingsToggle.BorderSizePixel = 0
    settingsToggle.ZIndex = 100
    settingsToggle.Draggable = true
    settingsToggle.Visible = guiEnabled
    Instance.new("UICorner", settingsToggle).CornerRadius = UDim.new(1,0)
    
    -- Save position on drag end
    local function savePosOnDragEnd(btn)
        btn.InputEnded:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.MouseButton1 then
                if btn == mainToggle then savedMainTogglePos = btn.Position
                elseif btn == listToggle then savedListTogglePos = btn.Position
                elseif btn == settingsToggle then savedSettingsTogglePos = btn.Position end
                debouncedSaveSettings()
            end
        end)
    end
    savePosOnDragEnd(mainToggle)
    savePosOnDragEnd(listToggle)
    savePosOnDragEnd(settingsToggle)
    
    -- Main toggle functionality
    mainToggle.MouseButton1Click:Connect(function()
        guiEnabled = not guiEnabled
        if guiEnabled then
            mainToggle.BackgroundColor3 = Settings.TOGGLE_COLOR
            mainToggle.Text = "🔍"
            listToggle.Visible = true
            settingsToggle.Visible = true
        else
            mainToggle.BackgroundColor3 = Settings.DISABLED_COLOR
            mainToggle.Text = "👁️"
            listToggle.Visible = false
            settingsToggle.Visible = false
        end
        for _, data in pairs(objectCache) do
            if data.esp then data.esp.Enabled = guiEnabled and data.espEnabled end
        end
        debouncedSaveSettings()
    end)
    
    listToggle.MouseButton1Click:Connect(function() toggleItemList() end)
    settingsToggle.MouseButton1Click:Connect(function() toggleSettings() end)
    
    mainToggle.Parent = screenGui
    listToggle.Parent = screenGui
    settingsToggle.Parent = screenGui
end

--------------------------------------------------------------------
-- 15. SPLASH SCREEN
--------------------------------------------------------------------
local function createSplashScreen()
    local splash = Instance.new("Frame")
    splash.Name = "SplashScreen"
    splash.BackgroundColor3 = Color3.fromRGB(20,20,30)
    splash.BackgroundTransparency = 0.3
    splash.Size = UDim2.new(0,10,0,10)
    splash.Position = UDim2.new(0.5,-5,0.5,-5)
    splash.BorderSizePixel = 0
    splash.ZIndex = 200
    Instance.new("UICorner", splash).CornerRadius = UDim.new(0,16)
    
    local logo = Instance.new("TextLabel")
    logo.Text = "🔍"
    logo.TextColor3 = Settings.PRIMARY_COLOR
    logo.TextSize = 60
    logo.Font = Enum.Font.GothamBold
    logo.BackgroundTransparency = 1
    logo.Size = UDim2.new(0,80,0,80)
    logo.Position = UDim2.new(0.5,-40,0,20)
    logo.ZIndex = 201
    logo.Parent = splash
    
    local title = Instance.new("TextLabel")
    title.Text = "NEXUS TRACKER"
    title.TextColor3 = Settings.PRIMARY_COLOR
    title.TextSize = 28
    title.Font = Enum.Font.GothamBold
    title.BackgroundTransparency = 1
    title.Size = UDim2.new(1,0,0,50)
    title.Position = UDim2.new(0,0,0,100)
    title.ZIndex = 201
    title.Parent = splash
    
    local subtitle = Instance.new("TextLabel")
    subtitle.Text = "Object Tracking System"
    subtitle.TextColor3 = Color3.fromRGB(200,200,200)
    subtitle.TextSize = 16
    subtitle.Font = Enum.Font.Gotham
    subtitle.BackgroundTransparency = 1
    subtitle.Size = UDim2.new(1,0,0,30)
    subtitle.Position = UDim2.new(0,0,0,150)
    subtitle.ZIndex = 201
    subtitle.Parent = splash
    
    local version = Instance.new("TextLabel")
    version.Text = "v7.1.0"
    version.TextColor3 = Color3.fromRGB(150,150,150)
    version.TextSize = 14
    version.Font = Enum.Font.Gotham
    version.BackgroundTransparency = 1
    version.Size = UDim2.new(1,0,0,20)
    version.Position = UDim2.new(0,0,0,185)
    version.ZIndex = 201
    version.Parent = splash
    
    local fs = Instance.new("TextLabel")
    fs.Text = canSaveToFile and "✅ Settings autosave" or "⚠️ Settings will not persist"
    fs.TextColor3 = canSaveToFile and Color3.fromRGB(46,204,113) or Color3.fromRGB(241,196,15)
    fs.TextSize = 12
    fs.Font = Enum.Font.Gotham
    fs.BackgroundTransparency = 1
    fs.Size = UDim2.new(1,0,0,20)
    fs.Position = UDim2.new(0,0,0,210)
    fs.ZIndex = 201
    fs.Parent = splash
    
    splash.Parent = screenGui
    
    TweenService:Create(splash, TweenInfo.new(0.5, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
        Size = UDim2.new(0,400,0,250),
        Position = UDim2.new(0.5,-200,0.5,-125),
        BackgroundTransparency = 0.3
    }):Play()
    
    -- Автоматически скрываем через 3 секунды
    task.delay(3, function()
        if splash and splash.Parent then
            local t = TweenService:Create(splash, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {
                Size = UDim2.new(0,10,0,10),
                Position = UDim2.new(0.5,-5,0.5,-5),
                BackgroundTransparency = 1
            })
            t:Play()
            t.Completed:Wait()
            splash:Destroy()
        end
    end)
end

--------------------------------------------------------------------
-- 16. INITIALIZATION
--------------------------------------------------------------------
local function init()
    debugPrint("Initializing Nexus Tracker...")
    
    screenGui = Instance.new("ScreenGui")
    screenGui.Name = "NexusTrackerUI"
    screenGui.DisplayOrder = 10
    screenGui.ResetOnSpawn = false
    screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
    
    -- Показываем загрузочный экран
    createSplashScreen()
    
    notificationContainer = Instance.new("Frame")
    notificationContainer.Name = "NotificationContainer"
    notificationContainer.BackgroundTransparency = 1
    notificationContainer.Size = UDim2.new(1,0,1,0)
    notificationContainer.Parent = screenGui
    
    local notifLayout = Instance.new("UIListLayout")
    notifLayout.Padding = UDim.new(0,10)
    notifLayout.HorizontalAlignment = Enum.HorizontalAlignment.Right
    notifLayout.VerticalAlignment = Enum.VerticalAlignment.Bottom
    notifLayout.Parent = notificationContainer
    
    -- Load settings
    local saved = loadSettings()
    applyLoadedSettings(saved)
    
    createToggleButtons()
    
    -- Apply saved positions
    if savedMainTogglePos and mainToggle then mainToggle.Position = savedMainTogglePos end
    if savedListTogglePos and listToggle then listToggle.Position = savedListTogglePos end
    if savedSettingsTogglePos and settingsToggle then settingsToggle.Position = savedSettingsTogglePos end
    
    -- Set initial GUI state
    if not guiEnabled then
        mainToggle.BackgroundColor3 = Settings.DISABLED_COLOR
        mainToggle.Text = "👁️"
        listToggle.Visible = false
        settingsToggle.Visible = false
    end
    
    -- Connect events
    connections[#connections+1] = TRACK_PATH.DescendantAdded:Connect(onChildAdded)
    connections[#connections+1] = TRACK_PATH.DescendantRemoving:Connect(onChildRemoving)
    
    findAndSetupObjects()
    
    lastESPUpdate = tick()
    lastListUpdate = tick()
    
    connections[#connections+1] = RunService.Heartbeat:Connect(updateDistances)
    
    debugPrint("✅ Initialization complete")
end

--------------------------------------------------------------------
-- 17. START
--------------------------------------------------------------------
local function startScript()
    if LocalPlayer then
        if not LocalPlayer.Character then
            LocalPlayer.CharacterAdded:Wait()
        end
        task.wait(1)
        init()
    end
end

startScript()

--------------------------------------------------------------------
-- 18. API
--------------------------------------------------------------------
return {
    ToggleGUI = function() if mainToggle then mainToggle:MouseButton1Click() end end,
    ShowItemList = function() toggleItemList(true) end,
    ShowSettings = function() toggleSettings(true) end,
    TeleportToNearest = teleportToNearest,
    SaveSettings = saveSettings,
    LoadSettings = loadSettings
}

3. Angelwings Auto QTE – (Quick Time Event Automation, Performance Mode)

In many Jump Showdown characters, specifically ones like Chara, the difference between winning and losing a confrontation depends on your ability to hit a specific sequence of button presses within a fraction of a second. This is known as a Quick Time Event (QTE). The Angelwings loader is a specialized script Jump Showdown choice designed to ensure you hit every single QTE with perfect timing, every single time. It removes the stress of reflex-based mini-games entirely.

Mechanical FeatureSupport LevelStrategic Effect
Perfect QTEAutomated Key InputSolves the timing logic internally within a single frame
Special TargetChara ExclusiveDesigned specifically to master the Chara skill mechanics
Frame AssistCPU PrioritizationLogic runs as a fast background task to avoid missed clicks
No Key AccessNative SupportKeyless [Jump Showdown] script access for rapid testing

Many players find QTE mechanics frustrating due to varying network pings. A slight millisecond of server lag can mean you miss the final prompt and die to a boss. This free Jump Showdown script handles those requests at the memory level. As soon as the QTE object enters your character’s logic tree, the script sends a virtual keystroke back to the game to complete the action. This is the definition of efficiency for players on high-stakes competitive servers where losing means losing your leaderboard rank.

Because this is a PC-exclusive script, it leverages the high processing power of desktop executors to ensure zero failure rates. When you look at high-tier sorcerers who seem to never fail their domain mini-games, they are often using an scripts Jump Showdown utility like this. It is a highly focused tool that does one thing—win QTEs—better than any other script in the 2026 meta.

-- Angelwings Jump Showdown Automator
-- Specifically tuned for Chara mechanics
loadstring(game:HttpGet("https://raw.githubusercontent.com/Wingsrx/free-shit/refs/heads/main/QTE"))()

4. Quna JSD Combat Hub – (Xeno Optimization, Auto Block Dash, Auto Punch)

The Quna combat suite is for the players who treat combat as an optimized science. This is a very aggressive suite that provides what many call a “Close Range God Mode.” It focuses on physical interactions and blocking mechanics. This script Jump Showdown provides is specifically designed with Jump Showdown Xeno injection in mind, offering specialized stability patches for high-tier executor DLLs.

Tactical ModuleFunctionGameplay Change
Defensive LayerAuto Block & DashInstinctive defensive resets based on enemy animations
Attack LoopAuto Punch ModeCycles attacks without manual clicking, maximizing CPS
Ability SyncAuto Curse Child QTEExpands QTE coverage beyond Chara to other cursed entities
Fluid CombatAuto Move BlockAllows the player to stay mobile while keeping defenses active

One of the unique things about the Quna version is the “Auto Move Block.” In the standard game, players are often slowed or immobilized when they choose to hold the block button. This tool overrides the movement speed multiplier applied during blocking, effectively allowing you to run at full speed while maintaining a guarded state. This is an incredible tactical benefit for avoiding ranged attacks or repositioning while an enemy is spamming heavy M1 attacks at you.

For players searching for keyless Jump Showdown script variants, the Quna hub is an attractive option due to its direct API loading. It targets character abilities such as the “Curse Child” transformation, ensuring that your transition into your high-tier forms is perfectly managed by automation. It bridges the gap between purely visual assistance and aggressive combat cheating, making it a high-tier script Jump Showdown veteran’s primary loadout.

-- Quna Combat Suite for Jump Showdown
-- Optimized for Xeno injection stability
loadstring(game:HttpGet("https://api.jnkie.com/api/v1/luascripts/public/c2720814f80cfd4b1de00419267f97a649a9e5d84862ad8532d411eda74653a4/download"))()

5. Shoo Ultimate Hub (Washuu) – (Auto Parry V5, Silent Kill, Human Combo Logic)

The final entry is often regarded as the current King of combat scripts in the arena. Washuu’s hub (known simply as Shoo) is a highly professional, well-maintained product that brings elite defensive logic to the game. If you are aiming for top 10 rankings on the global sorcerer leaderboard, you have likely heard of the Xeno Jump Showdown script suite provided here. It uses some of the most advanced “Parry” logic ever developed for a Roblox battlegrounds-style game.

Premium ModuleFunctional PurposeSkill Elevation
Defense MasteryAuto Parry V5Detects and parries incoming skills and M1s universally
Field MasteryAnti-BackstabSnaps camera 180 degrees to defend against flankers
CounteringWhiff PunishmentAttacks the enemy precisely the moment they miss their strike
Tech AutomationHiguruma Judgement BotCompletes the instant typing for Final Judgement automatically

The Parry V5 system is truly frame-perfect. Unlike cheaper scripts that just hold the F key, this hub listens for enemy activation packets. It only parries at the perfect moment to stagger the opponent, allowing you to counter-hit instantly. It also includes “Smart M1 Chaining,” which ensures you don’t over-commit to combos that can be blocked. It follows a Max-3 hit logic that leaves you ready to dash out or block if the enemy manages to survive your initial onslaught.

This script also focuses on character specialists. Characters like Nanami require specific “7:3” timing for their techniques to deal maximum critical damage. Washuu’s hub automates that timing flawlessly. The Higuruma Judgement feature is also game-breaking; while legitimate players have to type out legal prompts or sentences during the domain event, the Shoo Hub uses a typing macro to finish the prompt in 0.01 seconds. This results in an immediate guilty verdict for your enemy every single match. While it may require a key to support the developers, it is frequently cited as the strongest script Jump Showdown enthusiasts have ever tested.

-- shoo best Jump Showdown script hub
-- Key required from discord.gg/shoo
script_key="your key here";
loadstring(game:HttpGet("https://api.luarmor.net/files/v4/loaders/5ccbe605e47d019e049a1198eb772603.lua"))()

How to Execute Jump Showdown Scripts on PC, Mac & Mobile

Getting your Jump Showdown scripts up and running involves using a specialized application known as an “Executor” or “Injector.” Since Roblox developers constantly patch exploits, staying updated with the correct software is as important as having the right code. Below is a detailed guide on how to start scripting depending on your device.

How to Execute on Windows (PC)

PC is the most powerful and common platform for aggressive combat mods and informational ESP.

  1. Obtain an Executor: Download a working and vetted tool. Current reliable options include Wave, Solara, or a specific injector optimized for Jump Showdown Xeno performance. Avoid clicking random pop-up ads; stick to official developer discords.
  2. Safety Preparation: Almost every executor is detected as a “false positive” by your Antivirus. This is because they hook into the memory of other processes (in this case, Roblox). You will likely need to disable real-time protection in Windows Defender or add an exclusion to your script folder.
  3. Enter the Match: Launch the Roblox client and enter Jump Showdown. Wait for your character to fully load into the lobby area.
  4. Attach and Inject: Open your executor window. Click the syringe icon or the Attach button. Wait for a confirmation popup that the console has successfully linked to the Roblox process.
  5. Paste and Execute: Copy the script Jump Showdown code of your choice from our list above. Paste it into the executor’s script terminal and press Run or Execute. The GUI menu should now overlap on your game screen.

How to Execute on Mobile (Android & iOS)

Many scripters find mobile more accessible due to various keyless injectors like Delta and Codex.

  1. Install an APK Executor: For Android, tools like Delta or Hydrogen are excellent. You must uninstall the standard Roblox app first, then install the modified APK provided by these developers. iOS users often utilize MacSploit for mobile or specific sideloaded tools like Arceus X via sideloading methods like Scarlet.
  2. Lobby Entry: Log into your Roblox account in the new executor app. Once inside Jump Showdown, a small, floating logo will appear on the side of your touchscreen.
  3. Editor Usage: Tap the logo, open the built-in terminal window, and paste the Jump Showdown script pastebin or raw code.
  4. Play: Hit the play/checkmark button. Your menu options will now appear, optimized for touch interaction. You can farm coins and stats while you’re out on the go!

How to Execute on Mac

While the Mac community is smaller, high-tier tools now allow Apple users to enjoy Jump Showdown mods safely.

  1. Executor Choice: Download MacSploit, currently one of the few high-stability tools built for the Mac OS.
  2. Installation and Sideloading: Drag the application to your folder. You will need to allow the app to run via your System Settings under Privacy & Security since it comes from an unidentified developer.
  3. Link and Script: The process mirrors the PC version—attach to the Roblox game client via the MacSploit menu, paste the free Jump Showdown script loader, and enjoy your new advantages.

Jump Showdown Beginner Guide: Strategies & Mastery

Jump Showdown is more than just mindless combat; it is an experience in management. While having a free Jump Showdown script gives you incredible power, understanding the game mechanics will help you win more matches legitimately when you want to avoid drawing attention from server moderators.

Understanding Mastery and Characters

Each anime character in the roster has a unique mastery track. Higher mastery tiers unlock destructive ultimate moves like Hollow Purple or Malevolent Shrine. A popular strategy for scripters is to use the “Combat Hub” or an auto-kill script in small, low-population servers overnight to hit max level mastery before participating in public events. This ensures that when you do engage in fair fights, your stats and gear are already at the cap.

Combat Mechanics

Legit survival in Jump Showdown relies heavily on the “Dash and Punish” system.

  • Dashing: Save your dash (usually Q) for the moments an enemy commitment is complete. Using it too early leaves you wide open for a Human Combo.
  • Counter-attacking: After a parry occurs, the opponent enters a tiny state of “stun.” This is your only chance to deal true damage that can’t be escaped.
  • Tactical Depth: Use your ESP settings to find players who are currently low on HP. Finishing off a battle between two other warriors is the fastest way to stack up trophies and cash on the scoreboard.

Using scripts responsively means not ruining the lobby for everyone. If you find a private server or use a low-key script like Andrei228’s Item ESP, you can find the high-yield items and get stronger while staying subtle. Respect the competitive landscape by knowing when to toggle your blatant features on or off. Utilizing Jump Showdown Xeno script setups during competitive seasons can help you stay ahead of “Sweat” clans who aim to farm new players for easy KDR.

Jump Showdown Game Codes

Redeemable codes provide a legitimate way to acquire rare gear, belly currency, and rerolls for your sorcerer abilities. While codes are less impactful than a full script for Jump Showdown, they are perfect for jumping-start your career or finding that perfect cosmetic aesthetic.

Status of Active Codes (Update 2026)

At this current version update of February 2026, the developer of Jump Showdown has moved rewards from traditional text codes into a task-based milestone system. However, they frequently cycle limited codes for million-visit milestones on their Twitter feed.

  • Currently active codes: No active codes as of late Feb 2026.
  • Redemption: To redeem if new codes drop, click the gear icon in the lobby, look for the text input box labeled ENTER CODE, and paste a verified code to gain instant gems.

To keep ahead of code expirations, we suggest joining the game’s official discord or bookmarking this guide, as we refresh this list weekly. In the absence of codes, utilizing a keyless Jump Showdown script remains the most reliable path to a fully upgraded sorcerer arsenal.

FAQs About Jump Showdown Scripts

Q: What is a keyless Jump Showdown script and why is it preferred?

A: A keyless script is one where the developer does not require you to go to third-party advertising sites to obtain a temporary 24-hour key. Keyless versions are highly sought after by the community because they are faster, safer for your browser health, and generally easier for mobile scripters to navigate.

Q: Are these Jump Showdown scripts safe from Byfron or Byfron/Hyperion?

A: While Roblox updates its platform-wide anti-cheat (Hyperion) weekly, high-end loaders such as Shoo and the Andrei hubs utilize internal “Anti-Detect” modules to hide the presence of the injector. To stay 100% safe, it is always a best practice to test a new Jump Showdown script on a backup or “alt” account before using it on your main account with expensive cosmetics.

Q: Does Jump Showdown Xeno support every feature?

A: Xeno refers to a specific DLL performance library. When you hear “Xeno Jump Showdown,” it usually implies a high-speed execution. All the scripts we’ve listed are fully verified for compatibility with Xeno, Delta, and other current injectors. If your menu fails to appear, simply check your software version.

Q: Where can I find a newer Jump Showdown script pastebin?

A: The world of scripts Jump Showdown fans use changes rapidly. Sites like Github and curated repositories provided by developers (like the ones in this guide) are the best place. Always be cautious clicking on old links found in random YouTube descriptions, as those often contain outdated or malware-injected strings.

Q: Will the Auto QTE work for Nanami or Sukuna?

A: Most of our combat scripts include a universal QTE module. Specifically, the Washuu hub listed above features dedicated “Ratio Tech” and “Judgment” solvers that cover character-specific events. It is a highly specialized bot that removes the error margin from anime techniques.

Conclusion

The combat-heavy, cinematic world of Jump Showdown offers some of the most rewarding high-speed arena fights on Roblox. However, the mountain you have to climb to become an elite sorcerer doesn’t have to be a slog of endless defeat. By utilizing the incredible hubs and scripts Jump Showdown enthusiasts have built—from Andrei’s tactical ESPs to Washuu’s frame-perfect auto parry—you give yourself the tools needed to dominate.

Always remember that consistency is the key to mastering your domain. Keep your executor updated, stay alert for new Jump Showdown script releases after game updates, and never forget to redeem official game codes for a legitimate boost. Bookmark this page for the latest updates on free Jump Showdown script loaders and meta guides. Whether you are using a keyless Jump Showdown script for speed or a performance hub for raids, the top of the leaderboard is now within your reach. See you in the showdown!

Leave a Comment