local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local StarterGui = game:GetService("StarterGui")
local LocalPlayer = Players.LocalPlayer
local COUNT_DESCENDANTS = true
local Y_OFFSET = 5
local TOGGLE_UI_KEY = Enum.KeyCode.H
local RENDER_TAG = "ForceMouseDefaultWhenUnlocked"
local Version = "1.6.41"
local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/download/" .. Version .. "/main.lua"))()
local LootRS = ReplicatedStorage:WaitForChild("Loot", 5)
local WorldLoot = workspace:FindFirstChild("Loot")
local function safeNotify(props)
local ok = pcall(function()
StarterGui:SetCore("SendNotification", props)
end)
if not ok then
task.spawn(function()
task.wait(1)
pcall(function()
StarterGui:SetCore("SendNotification", props)
end)
end)
end
end
local function readCategories()
local categories = {}
if not LootRS then return categories end
for _, cat in ipairs(LootRS:GetChildren()) do
if cat:IsA("Folder") then
local catName = cat.Name
categories[catName] = {}
for _, item in ipairs(cat:GetChildren()) do
categories[catName][item.Name] = 0
end
end
end
return categories
end
local function buildWorldCountMap()
local map = {}
if not WorldLoot then return map end
local list = COUNT_DESCENDANTS and WorldLoot:GetDescendants() or WorldLoot:GetChildren()
for _, inst in ipairs(list) do
map[inst.Name] = (map[inst.Name] or 0) + 1
end
return map
end
local function fillCounts(categories, worldMap)
for _, items in pairs(categories) do
for itemName in pairs(items) do
items[itemName] = worldMap[itemName] or 0
end
end
end
local function bringAllByName(itemName)
if not WorldLoot then return end
local char = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local hrp = char:WaitForChild("HumanoidRootPart")
local targetCF = hrp.CFrame + Vector3.new(0, Y_OFFSET, 0)
local list = COUNT_DESCENDANTS and WorldLoot:GetDescendants() or WorldLoot:GetChildren()
for _, inst in ipairs(list) do
if inst.Name == itemName then
local obj = inst:FindFirstAncestorOfClass("Model") or inst
if obj:IsA("Model") then
if obj.PrimaryPart then
obj:PivotTo(targetCF)
else
local p = obj:FindFirstChildWhichIsA("BasePart", true)
if p then
obj.PrimaryPart = p
obj:PivotTo(targetCF)
obj.PrimaryPart = nil
end
end
else
local bp = obj:IsA("BasePart") and obj or obj:FindFirstChildWhichIsA("BasePart", true)
if bp then bp.CFrame = targetCF end
end
end
end
end
local Window = WindUI:CreateWindow({
Title = "Loot Manager",
Icon = "box",
Theme = "Dark",
Size = UDim2.fromOffset(620, 520),
})
Window:SetToggleKey(Enum.KeyCode.H)
local ButtonRefs = {}
local function buildUI(categories)
for catName, items in pairs(categories) do
local Tab = Window:Tab({
Title = catName,
Icon = "folder",
})
ButtonRefs[catName] = {}
local available, unavailable = {}, {}
for itemName, count in pairs(items) do
if count > 0 then
table.insert(available, {name = itemName, count = count})
else
table.insert(unavailable, {name = itemName, count = count})
end
end
local ordered = {}
for _, v in ipairs(available) do table.insert(ordered, v) end
for _, v in ipairs(unavailable) do table.insert(ordered, v) end
for _, data in ipairs(ordered) do
local btn = Tab:Button({
Title = string.format("%s (%d)", data.name, data.count),
Desc = "Bring all items of this name to player",
Callback = function() bringAllByName(data.name) end,
})
if data.count <= 0 then
btn:Lock()
else
btn:Unlock()
end
ButtonRefs[catName][data.name] = btn
end
end
end
local function refreshUI(categories)
for catName, items in pairs(categories) do
for itemName, count in pairs(items) do
local btn = ButtonRefs[catName] and ButtonRefs[catName][itemName]
if btn then
btn:SetTitle(string.format("%s (%d)", itemName, count))
if count > 0 then btn:Unlock() else btn:Lock() end
end
end
end
end
local Categories = readCategories()
fillCounts(Categories, buildWorldCountMap())
buildUI(Categories)
if WorldLoot then
local function recalc()
fillCounts(Categories, buildWorldCountMap())
refreshUI(Categories)
end
WorldLoot.ChildAdded:Connect(recalc)
WorldLoot.ChildRemoved:Connect(recalc)
if COUNT_DESCENDANTS then
WorldLoot.DescendantAdded:Connect(recalc)
WorldLoot.DescendantRemoving:Connect(recalc)
end
end
local player = LocalPlayer
local playerScripts = player:WaitForChild("PlayerScripts")
local PlayerModule = require(playerScripts:WaitForChild("PlayerModule"))
local Controls = PlayerModule:GetControls()
player.CameraMode = Enum.CameraMode.LockFirstPerson
local unlocked = false
local function forceDefaultEachFrame(enable)
if enable then
RunService:BindToRenderStep(RENDER_TAG, Enum.RenderPriority.Camera.Value + 1, function()
if unlocked then
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end)
else
RunService:UnbindFromRenderStep(RENDER_TAG)
end
end
local function setUnlocked(on)
unlocked = on
if unlocked then
Controls:Disable()
UserInputService.MouseIconEnabled = true
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
forceDefaultEachFrame(true)
else
forceDefaultEachFrame(false)
UserInputService.MouseIconEnabled = false
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
Controls:Enable()
end
safeNotify({
Title = unlocked and "Mouse Unlocked" or "Mouse Locked",
Text = unlocked and "Mouse free / camera paused" or "Mouse locked / camera enabled",
Duration = 3
})
print("UnlockMouse:", unlocked)
end
UserInputService.InputBegan:Connect(function(input, gpe)
if gpe then return end
if input.KeyCode == TOGGLE_UI_KEY then
setUnlocked(not unlocked)
elseif input.KeyCode == TOGGLE_UI_KEY then
local frame = Window:GetMainFrame()
if frame then
frame.Visible = not frame.Visible
safeNotify({
Title = "Loot Manager",
Text = frame.Visible and "UI opened" or "UI hidden",
Duration = 2
})
end
end
end)
UserInputService.WindowFocusReleased:Connect(function()
if unlocked then
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
UserInputService.MouseIconEnabled = true
end
end)
setUnlocked(true)
safeNotify({
Title = "Controls",
Text = ("Press %s to toggle mouse | Press %s to toggle UI"):format(TOGGLE_UI_KEY.Name, TOGGLE_UI_KEY.Name),
Duration = 7
})
Comments
works but the game doesn't have a way to unlock the mouse so it's finnicky to use