-- Loading the stable LinoriaLib from the official repository
local repo = 'https://raw.githubusercontent.com/violin-suzutsuki/LinoriaLib/main/'
local Library = loadstring(game:HttpGet(repo .. 'Library.lua'))()
-- Initializing the Window
local Window = Library:CreateWindow({
Title = 'Vanguard',
Center = true,
AutoShow = true,
TabPadding = 8,
MenuFadeTime = 0.2
})
-- Creating structured Tabs
local Tabs = {
Main = Window:AddTab('Visual ESP Hub'),
Settings = Window:AddTab('Settings')
}
-- Organizing the layout into clean Left and Right GroupBoxes
local FilterBox = Tabs.Main:AddLeftGroupbox('Search Parameters')
local ActionBox = Tabs.Main:AddRightGroupbox('Execution Engine')
local CleanupBox = Tabs.Settings:AddLeftGroupbox('Controls & Management')
-- Target Environment Paths
local Workspace = game:GetService("Workspace")
local thingsCrystals = Workspace:WaitForChild("Things"):WaitForChild("Crystals")
local droppedCrystals = Workspace:FindFirstChild("Dropped Crystals") or Workspace:FindFirstChild("DroppedCrystals")
local localPlayer = game:GetService("Players").LocalPlayer
-- Filter State Management (Plain Integers, Max bumped to 10,000kg / 10 Tons)
local filterTier = nil
local filterValue = nil
local filterLuck = nil
local minWeightSelected = 0
local maxWeightSelected = 10000
local scriptRunning = true
-- Visual Object Memory Trackers
local activeHighlights = {}
local activeBillboards = {}
-- Safely clear visual objects from workspace
local function clearVisuals()
for _, hl in ipairs(activeHighlights) do if hl and hl.Parent then hl:Destroy() end end
for _, bb in ipairs(activeBillboards) do if bb and bb.Parent then bb:Destroy() end end
activeHighlights = {}
activeBillboards = {}
end
-- Formats large values into clean metric displays
local function formatNumber(num)
if not num then return "0" end
if num >= 1e9 then return string.format("%.1fB", num / 1e9) end
if num >= 1e6 then return string.format("%.1fM", num / 1e6) end
if num >= 1e3 then return string.format("%.1fK", num / 1e3) end
return tostring(num)
end
-- Safely scans and combines standard and dropped world folders
local function getAllCrystals()
local list = {}
if thingsCrystals then
for _, c in ipairs(thingsCrystals:GetChildren()) do table.insert(list, c) end
end
droppedCrystals = Workspace:FindFirstChild("Dropped Crystals") or Workspace:FindFirstChild("DroppedCrystals")
if droppedCrystals then
for _, c in ipairs(droppedCrystals:GetChildren()) do table.insert(list, c) end
end
return list
end
-- Attaches outline highlights and 3D info panels
local function attachVisualsToCrystal(crystal, highlightColor)
local targetPart = crystal:IsA("BasePart") and crystal or crystal:FindFirstChildWhichIsA("BasePart")
if not targetPart then return end
-- Wallhack Silhouette Outline Glow
local highlight = Instance.new("Highlight")
highlight.FillColor = highlightColor
highlight.OutlineColor = Color3.fromRGB(255, 255, 255)
highlight.FillTransparency = 0.4
highlight.OutlineTransparency = 0
highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
highlight.Parent = crystal
table.insert(activeHighlights, highlight)
-- Clean Modernized 3D Info Billboard UI
local billboard = Instance.new("BillboardGui")
billboard.Size = UDim2.new(0, 200, 0, 115)
billboard.AlwaysOnTop = true
billboard.StudsOffset = Vector3.new(0, 4.5, 0)
billboard.Adornee = targetPart
billboard.Parent = targetPart
table.insert(activeBillboards, billboard)
local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(1, 0, 1, 0)
mainFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 20)
mainFrame.BackgroundTransparency = 0.15
mainFrame.BorderSizePixel = 0
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 8)
corner.Parent = mainFrame
local stroke = Instance.new("UIStroke")
stroke.Color = highlightColor
stroke.Thickness = 1.5
stroke.Transparency = 0.2
stroke.Parent = mainFrame
mainFrame.Parent = billboard
local cName = crystal:GetAttribute("CrystalName") or crystal.Name
local tier = crystal:GetAttribute("Tier") or 0
local value = crystal:GetAttribute("Value") or 0
local weight = crystal:GetAttribute("WeightKg") or 0
local rawLuck = crystal:GetAttribute("Luck") or crystal:GetAttribute("LuckBonus") or 0
local displayLuck = rawLuck
if rawLuck > 0 and rawLuck <= 1 then
displayLuck = rawLuck * 100
end
local isDropped = (droppedCrystals and crystal.Parent == droppedCrystals)
local sourceTag = isDropped and " [DROPPED]" or ""
local listLayout = Instance.new("UIListLayout")
listLayout.Padding = UDim.new(0, 4)
listLayout.SortOrder = Enum.SortOrder.LayoutOrder
listLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
listLayout.VerticalAlignment = Enum.VerticalAlignment.Center
listLayout.Parent = mainFrame
local headerLabel = Instance.new("TextLabel")
headerLabel.Size = UDim2.new(0, 180, 0, 22)
headerLabel.BackgroundTransparency = 1
headerLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
headerLabel.Font = Enum.Font.GothamBold
headerLabel.TextSize = 12
headerLabel.RichText = true
headerLabel.Text = string.format("%s%s [T%d]", cName, sourceTag, tier)
headerLabel.LayoutOrder = 1
headerLabel.Parent = mainFrame
local statsLabel = Instance.new("TextLabel")
statsLabel.Size = UDim2.new(0, 180, 0, 55)
statsLabel.BackgroundTransparency = 1
statsLabel.TextColor3 = Color3.fromRGB(220, 220, 225)
statsLabel.Font = Enum.Font.GothamSemibold
statsLabel.TextSize = 11
statsLabel.TextXAlignment = Enum.TextXAlignment.Left
statsLabel.RichText = true
statsLabel.LayoutOrder = 2
statsLabel.Parent = mainFrame
local distanceLabel = Instance.new("TextLabel")
distanceLabel.Size = UDim2.new(0, 180, 0, 15)
distanceLabel.BackgroundTransparency = 1
distanceLabel.TextColor3 = Color3.fromRGB(150, 150, 160)
distanceLabel.Font = Enum.Font.Gotham
distanceLabel.TextSize = 10
distanceLabel.LayoutOrder = 3
distanceLabel.Parent = mainFrame
-- Dynamic position updates running via background thread
task.spawn(function()
while scriptRunning and billboard and billboard.Parent and localPlayer.Character do
local char = localPlayer.Character
local root = char:FindFirstChild("HumanoidRootPart")
local distanceStr = "Distance: -- studs"
if root then
local distance = (targetPart.Position - root.Position).Magnitude
distanceStr = string.format("📍 Distance: %d studs", distance)
end
statsLabel.Text = string.format(
"💰 Value: %s\n" ..
"⚖️ Weight: %.2f kg\n" ..
"🍀 Luck Bonus: +%.0f%%",
formatNumber(value), weight, displayLuck
)
distanceLabel.Text = distanceStr
task.wait(0.4)
end
end)
end
-- Master Filtration Execution Engine
local function runFilters(isBestOnly)
clearVisuals()
local bestCrystal = nil
local maxTier, maxValue, maxLuck, maxWeight = -1, -1, -1, -1
local matchCount = 0
local currentCrystals = getAllCrystals()
if #currentCrystals == 0 then
Library:Notify("No active crystals found to filter right now.", 3)
return
end
for _, crystal in ipairs(currentCrystals) do
local crystalTier = crystal:GetAttribute("Tier") or 0
local crystalValue = crystal:GetAttribute("Value") or 0
local crystalWeight = crystal:GetAttribute("WeightKg") or 0
local rawLuck = crystal:GetAttribute("Luck") or crystal:GetAttribute("LuckBonus") or 0
local crystalLuck = rawLuck
if rawLuck > 0 and rawLuck <= 1 then
crystalLuck = rawLuck * 100
end
if isBestOnly then
if crystalTier > maxTier then
maxTier, maxValue, maxLuck, maxWeight, bestCrystal = crystalTier, crystalValue, crystalLuck, crystalWeight, crystal
elseif crystalTier == maxTier and crystalValue > maxValue then
maxValue, maxLuck, maxWeight, bestCrystal = crystalValue, crystalLuck, crystalWeight, crystal
elseif crystalTier == maxTier and crystalValue == maxValue and crystalLuck > maxLuck then
maxLuck, maxWeight, bestCrystal = crystalLuck, crystalWeight, crystal
elseif crystalTier == maxTier and crystalValue == maxValue and crystalLuck == maxLuck and crystalWeight > maxWeight then
maxWeight, bestCrystal = crystalWeight, crystal
end
else
-- Direct Integer Weight Range Check Logic
local passesTier = (not filterTier) or (crystalTier == filterTier)
local passesValue = (not filterValue) or (crystalValue >= filterValue)
local passesLuck = (not filterLuck) or (crystalLuck >= filterLuck)
local passesWeight = (crystalWeight >= minWeightSelected) and (crystalWeight <= maxWeightSelected)
if passesTier and passesValue and passesLuck and passesWeight then
local r = crystal:GetAttribute("TierColorR") or 0
local g = crystal:GetAttribute("TierColorG") or 255
local b = crystal:GetAttribute("TierColorB") or 255
attachVisualsToCrystal(crystal, Color3.fromRGB(r, g, b))
matchCount = matchCount + 1
end
end
end
if isBestOnly and bestCrystal then
attachVisualsToCrystal(bestCrystal, Color3.fromRGB(255, 30, 30))
local isDropped = (droppedCrystals and bestCrystal.Parent == droppedCrystals)
local cLoc = isDropped and "Dropped Folder" or "Spawn Folder"
Library:Notify("Target Acquired inside: " .. cLoc, 4)
elseif not isBestOnly then
Library:Notify("Scan Complete: Tagged " .. tostring(matchCount) .. " crystals globally.", 4)
end
end
-- ==========================================
-- Interface Building (Linoria Framework)
-- ==========================================
FilterBox:AddInput('TierInput', {
Default = '',
Numeric = true,
Finished = false,
Text = 'Filter by Tier Match (1-6)',
Placeholder = 'Empty = All',
Callback = function(Value) filterTier = tonumber(Value) end
})
FilterBox:AddInput('ValueInput', {
Default = '',
Numeric = true,
Finished = false,
Text = 'Filter by Minimum Value',
Placeholder = 'Ex: 100000',
Callback = function(Value) filterValue = tonumber(Value) end
})
FilterBox:AddInput('LuckInput', {
Default = '',
Numeric = true,
Finished = false,
Text = 'Filter by Minimum Luck (%)',
Placeholder = 'Ex: 50',
Callback = function(Value) filterLuck = tonumber(Value) end
})
-- Sliders bumped up to 10,000 Kg limits
FilterBox:AddSlider('MinW', {
Text = 'Weight Range: FROM',
Default = 0,
Min = 0,
Max = 10000,
Rounding = 0,
Compact = false,
Suffix = ' Kg',
Callback = function(Value) minWeightSelected = Value end
})
FilterBox:AddSlider('MaxW', {
Text = 'Weight Range: TO',
Default = 10000,
Min = 0,
Max = 10000,
Rounding = 0,
Compact = false,
Suffix = ' Kg',
Callback = function(Value) maxWeightSelected = Value end
})
ActionBox:AddButton('Target Absolute Best Crystal', function() runFilters(true) end)
ActionBox:AddButton('Execute Custom Query Filters', function() runFilters(false) end)
CleanupBox:AddButton('Wipe Existing ESP Visuals', function()
clearVisuals()
Library:Notify('All visual assets completely dropped.', 2)
end)
CleanupBox:AddButton('🔴 Completely Unload Script', function()
scriptRunning = false
clearVisuals()
Library:Unload()
end)
-- Initialize watermark in the top corner
Library:SetWatermark('Vanguard')