Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local TweenService = game:GetService("TweenService")
- local ItemTab = Window:CreateTab("Item Tools", 4483362458)
- local ScannedItems = {}
- local ItemESPEnabled = false
- local ItemESPObjects = {}
- local ItemSearchText = ""
- local function IsItem(obj)
- if obj:IsA("Tool") then return true end
- local keywords = {
- "gold", "silver", "bonds", "bond", "money", "coal",
- "weapon", "gun", "sword", "knife", "pistol", "rifle", "shotgun", "katana", "jade katana",
- "spear", "crate", "orb",
- "treasure", "ammo", "bottle"
- }
- local lname = obj.Name:lower()
- for _, kw in ipairs(keywords) do
- if lname:find(kw) then
- return true
- end
- end
- -- Additional check for interactable items (universal scan enhancement)
- if obj:FindFirstChildWhichIsA("ProximityPrompt") or obj:FindFirstChildWhichIsA("ClickDetector") then
- return true
- end
- return false
- end
- local function ScanItems()
- ScannedItems = {}
- for _, obj in ipairs(workspace:GetDescendants()) do
- if IsItem(obj) then
- table.insert(ScannedItems, obj)
- end
- end
- end
- local function EnableItemESP()
- if ItemESPEnabled then
- for _, item in ipairs(ScannedItems) do
- if not ItemESPObjects[item] then
- local adornee =
- item:IsA("Model") and (item.PrimaryPart or item:FindFirstChildWhichIsA("BasePart"))
- or item:IsA("BasePart") and item
- if adornee then
- local gui = Instance.new("BillboardGui")
- gui.Adornee = adornee
- gui.Size = UDim2.new(0, 120, 0, 40)
- gui.StudsOffset = Vector3.new(0, 2, 0)
- gui.AlwaysOnTop = true
- gui.Parent = game.CoreGui
- local txt = Instance.new("TextLabel", gui)
- txt.Size = UDim2.new(1,0,1,0)
- txt.BackgroundTransparency = 1
- txt.TextColor3 = Color3.new(1,1,0)
- txt.TextScaled = true
- txt.Text = item.Name
- ItemESPObjects[item] = gui
- end
- end
- end
- else
- for _, gui in pairs(ItemESPObjects) do
- gui:Destroy()
- end
- ItemESPObjects = {}
- end
- end
- local SelectedItemESPEnabled = false
- local SelectedItemESPObjects = {}
- local SelectedItemNames = {}
- local function EnableSelectedItemESP()
- for _, gui in pairs(SelectedItemESPObjects) do gui:Destroy() end
- SelectedItemESPObjects = {}
- if SelectedItemESPEnabled and #SelectedItemNames > 0 then
- for _, item in ipairs(ScannedItems) do
- if table.find(SelectedItemNames, item.Name) then
- local adornee =
- item:IsA("Model") and (item.PrimaryPart or item:FindFirstChildWhichIsA("BasePart"))
- or item:IsA("BasePart") and item
- if adornee then
- local gui = Instance.new("BillboardGui")
- gui.Adornee = adornee
- gui.Size = UDim2.new(0, 120, 0, 40)
- gui.StudsOffset = Vector3.new(0, 2, 0)
- gui.AlwaysOnTop = true
- gui.Parent = game.CoreGui
- local txt = Instance.new("TextLabel", gui)
- txt.Size = UDim2.new(1,0,1,0)
- txt.BackgroundTransparency = 1
- txt.TextColor3 = Color3.new(0,1,0)
- txt.TextScaled = true
- txt.Text = item.Name .. " (Selected)"
- SelectedItemESPObjects[item] = gui
- end
- end
- end
- end
- end
- coroutine.wrap(function()
- while task.wait(1) do
- if ItemESPEnabled then
- EnableItemESP()
- end
- if SelectedItemESPEnabled then
- EnableSelectedItemESP()
- end
- end
- end)()
- local function GetItemRoot(item)
- if item:IsA("Tool") then
- return item:FindFirstChild("Handle")
- elseif item:IsA("Model") then
- return item.PrimaryPart or item:FindFirstChildWhichIsA("BasePart")
- elseif item:IsA("BasePart") then
- return item
- end
- end
- local function TeleportToItem(item)
- local root = GetItemRoot(item)
- local char = game.Players.LocalPlayer.Character
- if root and char and char:FindFirstChild("HumanoidRootPart") then
- local tweenInfo = TweenInfo.new(TweenDuration, Enum.EasingStyle.Linear)
- local goal = {CFrame = root.CFrame * CFrame.new(0,0,-3)}
- local tween = TweenService:Create(char.HumanoidRootPart, tweenInfo, goal)
- tween:Play()
- end
- end
- local function BringItem(item)
- local root = GetItemRoot(item)
- local pos = GetBringPosition()
- if root and pos then
- root.CFrame = CFrame.new(pos)
- end
- end
- local function BringAllItems()
- local pos = GetBringPosition()
- if not pos then return end
- for _, item in ipairs(ScannedItems) do
- local root = GetItemRoot(item)
- if root then
- root.CFrame = CFrame.new(pos)
- end
- end
- end
- local function GetFilteredItems()
- local set = {}
- local list = {}
- for _, item in ipairs(ScannedItems) do
- if (ItemSearchText == "" or item.Name:lower():find(ItemSearchText)) and not set[item.Name] then
- set[item.Name] = true
- table.insert(list, item.Name)
- end
- end
- return list
- end
- ItemTab:CreateToggle({
- Name = "ESP Items",
- CurrentValue = false,
- Callback = function(v)
- ItemESPEnabled = v
- EnableItemESP()
- end
- })
- ItemTab:CreateToggle({
- Name = "ESP Selected Item",
- CurrentValue = false,
- Callback = function(v)
- SelectedItemESPEnabled = v
- EnableSelectedItemESP()
- end
- })
- ItemTab:CreateInput({
- Name = "Search Items",
- PlaceholderText = "coin / box / food / money",
- Callback = function(txt)
- ItemSearchText = txt:lower()
- ItemDropdown:Refresh(GetFilteredItems())
- end
- })
- local ItemDropdown = ItemTab:CreateDropdown({
- Name = "Select Item",
- Options = {},
- CurrentOption = {},
- MultipleOptions = true,
- Callback = function(opt)
- SelectedItemNames = opt
- if SelectedItemESPEnabled then
- EnableSelectedItemESP()
- end
- end
- })
- ItemTab:CreateButton({
- Name = "Teleport To Item",
- Callback = function()
- if #SelectedItemNames > 0 then
- for _, item in ipairs(ScannedItems) do
- if table.find(SelectedItemNames, item.Name) then
- TeleportToItem(item)
- break -- Teleport to first matching item only
- end
- end
- end
- end
- })
- ItemTab:CreateButton({
- Name = "Bring Selected Items",
- Callback = function()
- if #SelectedItemNames > 0 then
- for _, item in ipairs(ScannedItems) do
- if table.find(SelectedItemNames, item.Name) then
- BringItem(item)
- end
- end
- end
- end
- })
- ItemTab:CreateButton({
- Name = "Bring ALL Items",
- Callback = BringAllItems
- })
- local AutoPickupEnabled = false
- local AutoPickupRange = 20
- local function AutoPickupLoop()
- while AutoPickupEnabled do
- local char = game.Players.LocalPlayer.Character
- if char and char:FindFirstChild("HumanoidRootPart") then
- local pos = char.HumanoidRootPart.Position
- local rootPart = char.HumanoidRootPart
- for _, item in ipairs(ScannedItems) do
- local root = GetItemRoot(item)
- if root and (pos - root.Position).Magnitude <= AutoPickupRange then
- -- Teleport to player
- root.CFrame = rootPart.CFrame
- -- Fire prompt if exists
- local prompt = item:FindFirstChildOfClass("ProximityPrompt", true)
- if prompt then
- fireproximityprompt(prompt)
- end
- -- If tool, try to parent to backpack
- if item:IsA("Tool") then
- item.Parent = game.Players.LocalPlayer.Backpack
- end
- end
- end
- end
- wait(0.1)
- end
- end
- ItemTab:CreateToggle({
- Name = "Auto Pickup Items",
- CurrentValue = false,
- Callback = function(Value)
- AutoPickupEnabled = Value
- if Value then
- coroutine.wrap(AutoPickupLoop)()
- end
- end,
- })
- ItemTab:CreateInput({
- Name = "Auto Pickup Range",
- PlaceholderText = "Enter range (10 - 100)",
- RemoveTextAfterFocusLost = false,
- Callback = function(Text)
- local num = tonumber(Text)
- if num then
- AutoPickupRange = math.clamp(num, 10, 100)
- end
- end,
- })
- -- ==================== SCAN TAB ====================
- local AutoScanInterval = 5
- local AutoScanNPCsEnabled = false
- local AutoScanItemsEnabled = false
- local AutoScanPlayersEnabled = false
- ScanTab:CreateButton({
- Name = "Scan NPCs",
- Callback = function()
- ScanNPCs()
- UpdateNPCList()
- if NPCDropdown then NPCDropdown:Refresh(NPCList) end
- end,
- })
- ScanTab:CreateToggle({
- Name = "Auto Scan NPCs",
- CurrentValue = false,
- Callback = function(Value)
- AutoScanNPCsEnabled = Value
- if Value then
- coroutine.wrap(function()
- while AutoScanNPCsEnabled do
- ScanNPCs()
- UpdateNPCList()
- if NPCDropdown then NPCDropdown:Refresh(NPCList) end
- wait(AutoScanInterval)
- end
- end)()
- end
- end,
- })
- ScanTab:CreateButton({
- Name = "Scan Items",
- Callback = function()
- ScanItems()
- if ItemDropdown then ItemDropdown:Refresh(GetFilteredItems()) end
- end,
- })
- ScanTab:CreateToggle({
- Name = "Auto Scan Items",
- CurrentValue = false,
- Callback = function(Value)
- AutoScanItemsEnabled = Value
- if Value then
- coroutine.wrap(function()
- while AutoScanItemsEnabled do
- ScanItems()
- if ItemDropdown then ItemDropdown:Refresh(GetFilteredItems()) end
- wait(AutoScanInterval)
- end
- end)()
- end
- end,
- })
Advertisement
Add Comment
Please, Sign In to add comment