--[[
╔═══════════════════════════════════════════════════════════════╗
║ XCMEN HUB - DesertStorm [EXTRACTION] ║
║ Educational Testing Only — Private Environment ║
╚═══════════════════════════════════════════════════════════════╝
Tabs: Combat | ESP | NPC | Containers | World | Misc | Settings
--]]
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local HttpService = game:GetService("HttpService")
local TeleportService = game:GetService("TeleportService")
local LocalPlayer = Players.LocalPlayer
-- ─── DYNAMISCHE CAMERA ─────────────────────────────────────────
local function GetCamera()
return Workspace.CurrentCamera
end
-- ─── WORKSPACE PFADE ───────────────────────────────────────────
local CONTAINER_FOLDER = Workspace:WaitForChild("Containers")
local BOT_FOLDER = Workspace:WaitForChild("IngameBots")
local EXTRACTION_FOLDER = Workspace:WaitForChild("Extractions")
local AIRDROP_FOLDER = Workspace:WaitForChild("AirdropPositions")
local DEAD_BODIES_FOLDER = Workspace:WaitForChild("DeadBodies")
local NATURE_FOLDER = Workspace:WaitForChild("Nature")
-- ─── REMOTES ───────────────────────────────────────────────────
local Remotes = {
OpenContainerEvent = ReplicatedStorage:WaitForChild("OpenContainerEvent"),
ExtractionSync = ReplicatedStorage:WaitForChild("ExtractionSync"),
HitmarkerEvent = ReplicatedStorage:WaitForChild("HitmarkerEvent"),
PingLocation = ReplicatedStorage:WaitForChild("PingLocation"),
RemoteEvent = ReplicatedStorage:WaitForChild("RemoteEvent"),
}
-- ─── MAPPINGS ──────────────────────────────────────────────────
local ContainerTypes = {
["Ammo Box"] = "ammo", ["Civilian Airdrop"] = "airdrop",
["Double Metal Crates"] = "crate", ["Duffel Bag"] = "bag",
["Food Crate"] = "crate", ["Leather Pouch"] = "pouch",
["Medical Pouch"] = "medical", ["Metal Crate"] = "crate",
["Military Laptop"] = "electronics", ["PC Tower"] = "electronics",
["Safe"] = "safe", ["Specops Supply Crate"] = "crate",
["Supply Crate"] = "crate", ["T.C.R Supply Crate"] = "crate",
["Tall Metal Crate"] = "crate", ["Tanker Truck"] = "vehicle",
["Vault"] = "safe", ["Wooden Crate"] = "crate",
["Abandoned Car"] = "vehicle", ["DroppedItemContainer"] = "loot",
}
local BotTypes = {
["GOVSoldier"] = "gov", ["RebelElite"] = "rebel",
["RebelSniper"] = "rebel", ["RebelSoldier"] = "rebel",
["Scav"] = "scav", ["TCRElite"] = "tcr",
["TCRGuard"] = "tcr", ["Tyrant"] = "boss",
}
local ExtractionNames = {
["Getaway Car"] = "Getaway Car", ["Mountain Cave"] = "Mountain Cave",
["North-Western Boat"] = "NW Boat", ["Northern Mountain"] = "N Mountain",
["Radio Tower"] = "Radio Tower", ["Ruined Hideout"] = "Ruined Hideout",
["Southern Boat"] = "S Boat", ["Southern Tunnel"] = "S Tunnel",
["Tunnel Exit"] = "Tunnel Exit", ["Western Boat"] = "W Boat",
}
-- ═══════════════════════════════════════════════════════════════
-- CONFIG MANAGER
-- ═══════════════════════════════════════════════════════════════
local ConfigManager = {}
ConfigManager.Current = {}
ConfigManager.Path = "XCMEN_HUB_DesertStorm/"
ConfigManager.FileName = "config.json"
ConfigManager.AutoSaveEnabled = true
function ConfigManager:Init()
if not isfolder(self.Path) then makefolder(self.Path) end
self:Load()
task.spawn(function()
while self.AutoSaveEnabled do
task.wait(30)
if self.AutoSaveEnabled then pcall(function() self:Save() end) end
end
end)
end
function ConfigManager:Load()
local fullPath = self.Path .. self.FileName
if isfile(fullPath) then
local ok, data = pcall(function() return HttpService:JSONDecode(readfile(fullPath)) end)
if ok and type(data) == "table" then self.Current = data; return end
end
self:Reset()
end
function ConfigManager:Save()
local ok, encoded = pcall(function() return HttpService:JSONEncode(self.Current) end)
if ok then pcall(function() writefile(self.Path .. self.FileName, encoded) end) end
end
function ConfigManager:Reset()
self.Current = {
-- Combat / Aimbot
AimbotEnabled = false, AimbotSmoothness = 0.5,
AimbotFOV = 150, AimbotMaxDistance = 1000,
AimbotTeamCheck = false, AimbotVisibilityCheck = false,
AimbotShowFOV = true, AimbotTargetBots = true,
-- Player ESP
PlayerESP = false, BoxESP = false, NameESP = false,
DistanceESP = false, HealthESP = false, Tracers = false,
Chams = false,
-- NPC ESP
BotESP = false, BotBoxESP = false, BotNameESP = false,
BotDistanceESP = false, BotHealthESP = false, BotTracers = false,
-- Container ESP
LootESP = false, LootNameESP = false, LootDistanceESP = false,
LootTracers = false,
-- Object ESP
ExtractionESP = false, AirdropESP = false, DeadBodyESP = false,
-- Colors
ESPEnemyColor = {R = 255, G = 50, B = 50},
ESPBotColor = {R = 255, G = 165, B = 0},
ESPLootColor = {R = 255, G = 215, B = 0},
ESPExtractionColor = {R = 0, G = 255, B = 255},
ESPAirdropColor = {R = 255, G = 0, B = 255},
ESPDeadBodyColor = {R = 128, G = 128, B = 128},
-- World
FullBright = false, TimeChanger = false, CustomTime = 12,
RemoveFog = false, WeatherToggle = false, ShowInteractive = false,
-- Misc
FPSBoost = false,
-- Settings
Theme = "Default", GUIBind = "RightShift",
Watermark = true, Notifications = true,
}
self:Save()
end
function ConfigManager:Set(key, value) self.Current[key] = value end
function ConfigManager:Get(key) return self.Current[key] end
-- ═══════════════════════════════════════════════════════════════
-- CONNECTION MANAGER
-- ═══════════════════════════════════════════════════════════════
local ConnectionManager = {}
ConnectionManager.Connections = {}
function ConnectionManager:Add(name, connection)
if self.Connections[name] then pcall(function() self.Connections[name]:Disconnect() end) end
self.Connections[name] = connection
end
function ConnectionManager:Clear()
for _, conn in pairs(self.Connections) do pcall(function() conn:Disconnect() end) end
table.clear(self.Connections)
end
-- ═══════════════════════════════════════════════════════════════
-- UTILITY
-- ═══════════════════════════════════════════════════════════════
local Utils = {}
Utils._cachedFolder = nil
function Utils:GetPlayerFolder()
if self._cachedFolder and self._cachedFolder.Parent and self._cachedFolder:FindFirstChild(LocalPlayer.Name) then
return self._cachedFolder
end
for _, child in pairs(Workspace:GetChildren()) do
if (child:IsA("Folder") or child:IsA("Model")) and child:FindFirstChild(LocalPlayer.Name) then
self._cachedFolder = child
return child
end
end
return nil
end
function Utils:GetCharacter(player)
if not player then return nil end
local folder = self:GetPlayerFolder()
if not folder then return nil end
local char = folder:FindFirstChild(player.Name)
if char and char:FindFirstChild("Humanoid") and char:FindFirstChild("HumanoidRootPart") then
return char
end
return nil
end
function Utils:GetHealth(char)
if not char then return 0, 100 end
local healthObj = char:FindFirstChild("Health")
if healthObj and healthObj:IsA("ValueBase") then return healthObj.Value, 100 end
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then return hum.Health, hum.MaxHealth end
return 0, 100
end
function Utils:IsAlive(char)
if not char then return false end
local hum = char:FindFirstChildOfClass("Humanoid")
return hum and hum.Health > 0
end
function Utils:GetDistance(pos)
if not LocalPlayer.Character then return 99999 end
local root = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if root then return (root.Position - pos).Magnitude end
return 99999
end
function Utils:WorldToScreen(pos)
local cam = GetCamera()
if not cam then return Vector2.new(0, 0), false end
local sp, onScreen = cam:WorldToViewportPoint(pos)
return Vector2.new(sp.X, sp.Y), onScreen
end
function Utils:ColorFromConfig(key)
local c = ConfigManager:Get(key)
return Color3.fromRGB(c.R, c.G, c.B)
end
function Utils:FormatNumber(n) return tostring(math.floor(n + 0.5)) end
function Utils:CopyToClipboard(text) pcall(function() setclipboard(text) end) end
-- ═══════════════════════════════════════════════════════════════
-- DRAWING POOL
-- ═══════════════════════════════════════════════════════════════
local DrawingPool = {}
function DrawingPool:Create(type)
local ok, d = pcall(function() return Drawing.new(type) end)
if ok then d.Visible = false; return d end
return nil
end
function DrawingPool:Destroy(d) pcall(function() d:Remove() end) end
-- ═══════════════════════════════════════════════════════════════
-- ESP ENGINE (ROBUST + CLEANUP)
-- ═══════════════════════════════════════════════════════════════
local ESPManager = {}
ESPManager.PlayerObjects = {}
ESPManager.BotObjects = {}
ESPManager.LootObjects = {}
ESPManager.OtherObjects = {}
-- Hilfsfunktion: Bounding Box aus Character-Parts
local function GetCharBounds(character)
if not character then return nil end
local cam = GetCamera()
if not cam then return nil end
local minX, minY = math.huge, math.huge
local maxX, maxY = -math.huge, -math.huge
local any = false
for _, part in pairs(character:GetChildren()) do
if part:IsA("BasePart") then
local size = part.Size
local cf = part.CFrame
local corners = {
cf * CFrame.new(-size.X/2, -size.Y/2, -size.Z/2),
cf * CFrame.new(-size.X/2, -size.Y/2, size.Z/2),
cf * CFrame.new(-size.X/2, size.Y/2, -size.Z/2),
cf * CFrame.new(-size.X/2, size.Y/2, size.Z/2),
cf * CFrame.new(size.X/2, -size.Y/2, -size.Z/2),
cf * CFrame.new(size.X/2, -size.Y/2, size.Z/2),
cf * CFrame.new(size.X/2, size.Y/2, -size.Z/2),
cf * CFrame.new(size.X/2, size.Y/2, size.Z/2),
}
for _, c in pairs(corners) do
local sp, onScreen = cam:WorldToViewportPoint(c.Position)
if onScreen then
any = true
minX = math.min(minX, sp.X)
minY = math.min(minY, sp.Y)
maxX = math.max(maxX, sp.X)
maxY = math.max(maxY, sp.Y)
end
end
end
end
if any and minX ~= math.huge then
return Vector2.new(minX, minY), Vector2.new(maxX, maxY)
end
return nil
end
-- ─── PLAYER ESP ────────────────────────────────────────────────
local PlayerESP = {}
PlayerESP.__index = PlayerESP
function PlayerESP.new(player)
local self = setmetatable({}, PlayerESP)
self.Player = player
self.Drawings = {
Box = DrawingPool:Create("Square"),
BoxOutline = DrawingPool:Create("Square"),
Name = DrawingPool:Create("Text"),
Distance = DrawingPool:Create("Text"),
Health = DrawingPool:Create("Text"),
HealthBar = DrawingPool:Create("Square"),
HealthBarOutline = DrawingPool:Create("Square"),
Tracer = DrawingPool:Create("Line"),
}
self.Highlight = nil
return self
end
function PlayerESP:Update()
local ok, err = pcall(function()
local char = Utils:GetCharacter(self.Player)
if not char or not Utils:IsAlive(char) then
self:Hide()
return
end
local topLeft, bottomRight = GetCharBounds(char)
if not topLeft then self:Hide(); return end
local size = bottomRight - topLeft
if size.X < 4 or size.Y < 4 then self:Hide(); return end
local root = char:FindFirstChild("HumanoidRootPart")
local dist = root and Utils:GetDistance(root.Position) or 0
local color = Utils:ColorFromConfig("ESPEnemyColor")
-- Box
if ConfigManager:Get("BoxESP") then
self.Drawings.BoxOutline.Size = size + Vector2.new(2, 2)
self.Drawings.BoxOutline.Position = topLeft - Vector2.new(1, 1)
self.Drawings.BoxOutline.Visible = true
self.Drawings.BoxOutline.Color = Color3.new(0, 0, 0)
self.Drawings.BoxOutline.Thickness = 1
self.Drawings.BoxOutline.Filled = false
self.Drawings.Box.Size = size
self.Drawings.Box.Position = topLeft
self.Drawings.Box.Visible = true
self.Drawings.Box.Color = color
self.Drawings.Box.Thickness = 1
self.Drawings.Box.Filled = false
else
self.Drawings.Box.Visible = false
self.Drawings.BoxOutline.Visible = false
end
-- Name
if ConfigManager:Get("NameESP") then
self.Drawings.Name.Text = self.Player.Name
self.Drawings.Name.Position = Vector2.new(topLeft.X + size.X/2, topLeft.Y - 16)
self.Drawings.Name.Size = 13
self.Drawings.Name.Center = true
self.Drawings.Name.Visible = true
self.Drawings.Name.Color = color
self.Drawings.Name.Outline = true
else
self.Drawings.Name.Visible = false
end
-- Distance
if ConfigManager:Get("DistanceESP") then
self.Drawings.Distance.Text = Utils:FormatNumber(dist) .. "m"
self.Drawings.Distance.Position = Vector2.new(topLeft.X + size.X/2, bottomRight.Y + 2)
self.Drawings.Distance.Size = 11
self.Drawings.Distance.Center = true
self.Drawings.Distance.Visible = true
self.Drawings.Distance.Color = Color3.new(1, 1, 1)
self.Drawings.Distance.Outline = true
else
self.Drawings.Distance.Visible = false
end
-- Health
if ConfigManager:Get("HealthESP") then
local hp, maxHp = Utils:GetHealth(char)
local pct = math.clamp(hp / maxHp, 0, 1)
self.Drawings.Health.Text = Utils:FormatNumber(hp) .. " HP"
self.Drawings.Health.Position = Vector2.new(topLeft.X + size.X/2, topLeft.Y - 30)
self.Drawings.Health.Size = 11
self.Drawings.Health.Center = true
self.Drawings.Health.Visible = true
self.Drawings.Health.Color = Color3.fromRGB(255*(1-pct), 255*pct, 0)
self.Drawings.Health.Outline = true
local barW = size.X
local barH = 3
local barPos = Vector2.new(topLeft.X, topLeft.Y - 8)
self.Drawings.HealthBarOutline.Size = Vector2.new(barW+2, barH+2)
self.Drawings.HealthBarOutline.Position = barPos - Vector2.new(1,1)
self.Drawings.HealthBarOutline.Visible = true
self.Drawings.HealthBarOutline.Color = Color3.new(0,0,0)
self.Drawings.HealthBarOutline.Filled = true
self.Drawings.HealthBar.Size = Vector2.new(barW * pct, barH)
self.Drawings.HealthBar.Position = barPos
self.Drawings.HealthBar.Visible = true
self.Drawings.HealthBar.Color = Color3.fromRGB(255*(1-pct), 255*pct, 0)
self.Drawings.HealthBar.Filled = true
else
self.Drawings.Health.Visible = false
self.Drawings.HealthBar.Visible = false
self.Drawings.HealthBarOutline.Visible = false
end
-- Tracer
if ConfigManager:Get("Tracers") then
local cam = GetCamera()
if cam then
self.Drawings.Tracer.From = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y)
self.Drawings.Tracer.To = Vector2.new(topLeft.X + size.X/2, topLeft.Y + size.Y/2)
self.Drawings.Tracer.Visible = true
self.Drawings.Tracer.Color = color
self.Drawings.Tracer.Thickness = 1
end
else
self.Drawings.Tracer.Visible = false
end
-- Chams
if ConfigManager:Get("Chams") then
if not self.Highlight then
self.Highlight = Instance.new("Highlight")
self.Highlight.Parent = char
end
self.Highlight.FillColor = color
self.Highlight.OutlineColor = Color3.new(1,1,1)
self.Highlight.FillTransparency = 0.5
self.Highlight.OutlineTransparency = 0
self.Highlight.Enabled = true
elseif self.Highlight then
self.Highlight.Enabled = false
end
end)
if not ok then self:Hide() end
end
function PlayerESP:Hide()
for _, d in pairs(self.Drawings) do d.Visible = false end
if self.Highlight then self.Highlight.Enabled = false end
end
function PlayerESP:Destroy()
self:Hide()
for _, d in pairs(self.Drawings) do DrawingPool:Destroy(d) end
if self.Highlight then self.Highlight:Destroy() end
end
-- ─── BOT / NPC ESP ─────────────────────────────────────────────
local BotESP = {}
BotESP.__index = BotESP
function BotESP.new(model)
local self = setmetatable({}, BotESP)
self.Model = model
self.Drawings = {
Box = DrawingPool:Create("Square"),
BoxOutline = DrawingPool:Create("Square"),
Name = DrawingPool:Create("Text"),
Distance = DrawingPool:Create("Text"),
Health = DrawingPool:Create("Text"),
HealthBar = DrawingPool:Create("Square"),
HealthBarOutline = DrawingPool:Create("Square"),
Tracer = DrawingPool:Create("Line"),
}
return self
end
function BotESP:Update()
local ok, err = pcall(function()
if not self.Model or not self.Model.Parent then self:Hide(); return end
local hum = self.Model:FindFirstChildOfClass("Humanoid")
if not hum or hum.Health <= 0 then self:Hide(); return end
local hrp = self.Model:FindFirstChild("HumanoidRootPart")
if not hrp then self:Hide(); return end
local topLeft, bottomRight = GetCharBounds(self.Model)
if not topLeft then self:Hide(); return end
local size = bottomRight - topLeft
if size.X < 4 or size.Y < 4 then self:Hide(); return end
local dist = Utils:GetDistance(hrp.Position)
local color = Utils:ColorFromConfig("ESPBotColor")
local botType = Utils:GetBotType(self.Model)
-- Box
if ConfigManager:Get("BotBoxESP") then
self.Drawings.BoxOutline.Size = size + Vector2.new(2,2)
self.Drawings.BoxOutline.Position = topLeft - Vector2.new(1,1)
self.Drawings.BoxOutline.Visible = true
self.Drawings.BoxOutline.Color = Color3.new(0,0,0)
self.Drawings.BoxOutline.Thickness = 1
self.Drawings.BoxOutline.Filled = false
self.Drawings.Box.Size = size
self.Drawings.Box.Position = topLeft
self.Drawings.Box.Visible = true
self.Drawings.Box.Color = color
self.Drawings.Box.Thickness = 1
self.Drawings.Box.Filled = false
else
self.Drawings.Box.Visible = false
self.Drawings.BoxOutline.Visible = false
end
-- Name
if ConfigManager:Get("BotNameESP") then
self.Drawings.Name.Text = self.Model.Name .. " [" .. botType .. "]"
self.Drawings.Name.Position = Vector2.new(topLeft.X + size.X/2, topLeft.Y - 16)
self.Drawings.Name.Size = 12
self.Drawings.Name.Center = true
self.Drawings.Name.Visible = true
self.Drawings.Name.Color = color
self.Drawings.Name.Outline = true
else
self.Drawings.Name.Visible = false
end
-- Distance
if ConfigManager:Get("BotDistanceESP") then
self.Drawings.Distance.Text = Utils:FormatNumber(dist) .. "m"
self.Drawings.Distance.Position = Vector2.new(topLeft.X + size.X/2, bottomRight.Y + 2)
self.Drawings.Distance.Size = 11
self.Drawings.Distance.Center = true
self.Drawings.Distance.Visible = true
self.Drawings.Distance.Color = Color3.new(1,1,1)
self.Drawings.Distance.Outline = true
else
self.Drawings.Distance.Visible = false
end
-- HealthBar
if ConfigManager:Get("BotHealthESP") then
local pct = math.clamp(hum.Health / hum.MaxHealth, 0, 1)
local barW = size.X
local barH = 3
local barPos = Vector2.new(topLeft.X, topLeft.Y - 8)
self.Drawings.HealthBarOutline.Size = Vector2.new(barW+2, barH+2)
self.Drawings.HealthBarOutline.Position = barPos - Vector2.new(1,1)
self.Drawings.HealthBarOutline.Visible = true
self.Drawings.HealthBarOutline.Color = Color3.new(0,0,0)
self.Drawings.HealthBarOutline.Filled = true
self.Drawings.HealthBar.Size = Vector2.new(barW * pct, barH)
self.Drawings.HealthBar.Position = barPos
self.Drawings.HealthBar.Visible = true
self.Drawings.HealthBar.Color = Color3.fromRGB(255*(1-pct), 255*pct, 0)
self.Drawings.HealthBar.Filled = true
self.Drawings.Health.Text = Utils:FormatNumber(hum.Health) .. " HP"
self.Drawings.Health.Position = Vector2.new(topLeft.X + size.X/2, topLeft.Y - 22)
self.Drawings.Health.Size = 10
self.Drawings.Health.Center = true
self.Drawings.Health.Visible = true
self.Drawings.Health.Color = Color3.fromRGB(255*(1-pct), 255*pct, 0)
self.Drawings.Health.Outline = true
else
self.Drawings.Health.Visible = false
self.Drawings.HealthBar.Visible = false
self.Drawings.HealthBarOutline.Visible = false
end
-- Tracer
if ConfigManager:Get("BotTracers") then
local cam = GetCamera()
if cam then
self.Drawings.Tracer.From = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y)
self.Drawings.Tracer.To = Vector2.new(topLeft.X + size.X/2, topLeft.Y + size.Y/2)
self.Drawings.Tracer.Visible = true
self.Drawings.Tracer.Color = color
self.Drawings.Tracer.Thickness = 1
end
else
self.Drawings.Tracer.Visible = false
end
end)
if not ok then self:Hide() end
end
function BotESP:Hide()
for _, d in pairs(self.Drawings) do d.Visible = false end
end
function BotESP:Destroy()
self:Hide()
for _, d in pairs(self.Drawings) do DrawingPool:Destroy(d) end
end
-- ─── LOOT / CONTAINER ESP ──────────────────────────────────────
local LootESP = {}
LootESP.__index = LootESP
function LootESP.new(model)
local self = setmetatable({}, LootESP)
self.Model = model
self.Drawings = {
Name = DrawingPool:Create("Text"),
Distance = DrawingPool:Create("Text"),
Tracer = DrawingPool:Create("Line"),
}
return self
end
function LootESP:Update()
local ok, err = pcall(function()
if not self.Model or not self.Model.Parent then self:Hide(); return end
local primary = self.Model:IsA("Model") and (self.Model.PrimaryPart or self.Model:FindFirstChildWhichIsA("BasePart")) or self.Model
if not primary then primary = self.Model:FindFirstChildWhichIsA("BasePart") end
if not primary then self:Hide(); return end
local pos, onScreen = Utils:WorldToScreen(primary.Position)
if not onScreen then self:Hide(); return end
local dist = Utils:GetDistance(primary.Position)
local color = Utils:ColorFromConfig("ESPLootColor")
if ConfigManager:Get("LootNameESP") then
self.Drawings.Name.Text = self.Model.Name
self.Drawings.Name.Position = pos
self.Drawings.Name.Size = 12
self.Drawings.Name.Center = true
self.Drawings.Name.Visible = true
self.Drawings.Name.Color = color
self.Drawings.Name.Outline = true
else
self.Drawings.Name.Visible = false
end
if ConfigManager:Get("LootDistanceESP") then
self.Drawings.Distance.Text = Utils:FormatNumber(dist) .. "m"
self.Drawings.Distance.Position = pos + Vector2.new(0, 14)
self.Drawings.Distance.Size = 10
self.Drawings.Distance.Center = true
self.Drawings.Distance.Visible = true
self.Drawings.Distance.Color = Color3.new(1,1,1)
self.Drawings.Distance.Outline = true
else
self.Drawings.Distance.Visible = false
end
if ConfigManager:Get("LootTracers") then
local cam = GetCamera()
if cam then
self.Drawings.Tracer.From = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y)
self.Drawings.Tracer.To = pos
self.Drawings.Tracer.Visible = true
self.Drawings.Tracer.Color = color
self.Drawings.Tracer.Thickness = 1
end
else
self.Drawings.Tracer.Visible = false
end
end)
if not ok then self:Hide() end
end
function LootESP:Hide()
for _, d in pairs(self.Drawings) do d.Visible = false end
end
function LootESP:Destroy()
self:Hide()
for _, d in pairs(self.Drawings) do DrawingPool:Destroy(d) end
end
-- ─── SIMPLE OBJECT ESP (Extractions, Airdrops, Bodies) ─────────
local SimpleESP = {}
SimpleESP.__index = SimpleESP
function SimpleESP.new(model, displayName, colorKey)
local self = setmetatable({}, SimpleESP)
self.Model = model
self.DisplayName = displayName
self.ColorKey = colorKey
self.Drawings = {
Name = DrawingPool:Create("Text"),
Distance = DrawingPool:Create("Text"),
Tracer = DrawingPool:Create("Line"),
}
return self
end
function SimpleESP:Update()
local ok, err = pcall(function()
if not self.Model or not self.Model.Parent then self:Hide(); return end
local primary = self.Model:IsA("Model") and (self.Model.PrimaryPart or self.Model:FindFirstChildWhichIsA("BasePart")) or self.Model
if not primary then primary = self.Model:FindFirstChildWhichIsA("BasePart") end
if not primary then self:Hide(); return end
local pos, onScreen = Utils:WorldToScreen(primary.Position)
if not onScreen then self:Hide(); return end
local dist = Utils:GetDistance(primary.Position)
local color = Utils:ColorFromConfig(self.ColorKey)
self.Drawings.Name.Text = self.DisplayName
self.Drawings.Name.Position = pos
self.Drawings.Name.Size = 12
self.Drawings.Name.Center = true
self.Drawings.Name.Visible = true
self.Drawings.Name.Color = color
self.Drawings.Name.Outline = true
self.Drawings.Distance.Text = Utils:FormatNumber(dist) .. "m"
self.Drawings.Distance.Position = pos + Vector2.new(0, 14)
self.Drawings.Distance.Size = 10
self.Drawings.Distance.Center = true
self.Drawings.Distance.Visible = true
self.Drawings.Distance.Color = Color3.new(1,1,1)
self.Drawings.Distance.Outline = true
local cam = GetCamera()
if cam then
self.Drawings.Tracer.From = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y)
self.Drawings.Tracer.To = pos
self.Drawings.Tracer.Visible = true
self.Drawings.Tracer.Color = color
self.Drawings.Tracer.Thickness = 1
end
end)
if not ok then self:Hide() end
end
function SimpleESP:Hide()
for _, d in pairs(self.Drawings) do d.Visible = false end
end
function SimpleESP:Destroy()
self:Hide()
for _, d in pairs(self.Drawings) do DrawingPool:Destroy(d) end
end
-- ─── ESP MANAGER LOGIC ─────────────────────────────────────────
function ESPManager:Init()
-- Player Tracking
for _, plr in pairs(Players:GetPlayers()) do
if plr ~= LocalPlayer then
self.PlayerObjects[plr] = PlayerESP.new(plr)
end
end
Players.PlayerAdded:Connect(function(plr)
if plr ~= LocalPlayer then self.PlayerObjects[plr] = PlayerESP.new(plr) end
end)
Players.PlayerRemoving:Connect(function(plr)
if self.PlayerObjects[plr] then
self.PlayerObjects[plr]:Destroy()
self.PlayerObjects[plr] = nil
end
end)
-- Bot Tracking
for _, bot in pairs(BOT_FOLDER:GetChildren()) do
if bot:IsA("Model") then
self.BotObjects[bot] = BotESP.new(bot)
end
end
BOT_FOLDER.ChildAdded:Connect(function(bot)
if bot:IsA("Model") then self.BotObjects[bot] = BotESP.new(bot) end
end)
BOT_FOLDER.ChildRemoved:Connect(function(bot)
if self.BotObjects[bot] then
self.BotObjects[bot]:Destroy()
self.BotObjects[bot] = nil
end
end)
-- Loot Tracking
for _, item in pairs(CONTAINER_FOLDER:GetChildren()) do
self.LootObjects[item] = LootESP.new(item)
end
CONTAINER_FOLDER.ChildAdded:Connect(function(item)
self.LootObjects[item] = LootESP.new(item)
end)
CONTAINER_FOLDER.ChildRemoved:Connect(function(item)
if self.LootObjects[item] then
self.LootObjects[item]:Destroy()
self.LootObjects[item] = nil
end
end)
-- Main Loop
ConnectionManager:Add("ESPMainLoop", RunService.RenderStepped:Connect(function()
self:Update()
end))
end
function ESPManager:Update()
-- Players
if ConfigManager:Get("PlayerESP") then
for plr, esp in pairs(self.PlayerObjects) do
esp:Update()
end
else
for _, esp in pairs(self.PlayerObjects) do esp:Hide() end
end
-- Bots
if ConfigManager:Get("BotESP") then
for bot, esp in pairs(self.BotObjects) do
if bot.Parent and bot:FindFirstChildOfClass("Humanoid") and bot:FindFirstChildOfClass("Humanoid").Health > 0 then
esp:Update()
else
esp:Hide()
end
end
else
for _, esp in pairs(self.BotObjects) do esp:Hide() end
end
-- Loot
if ConfigManager:Get("LootESP") then
for item, esp in pairs(self.LootObjects) do
if item.Parent then
esp:Update()
else
esp:Hide()
end
end
else
for _, esp in pairs(self.LootObjects) do esp:Hide() end
end
-- Extractions
if ConfigManager:Get("ExtractionESP") then
for _, extract in pairs(EXTRACTION_FOLDER:GetChildren()) do
if not self.OtherObjects[extract] then
local name = ExtractionNames[extract.Name] or extract.Name
self.OtherObjects[extract] = SimpleESP.new(extract, "[EXTRACT] " .. name, "ESPExtractionColor")
end
self.OtherObjects[extract]:Update()
end
end
-- Airdrops
if ConfigManager:Get("AirdropESP") then
for _, drop in pairs(AIRDROP_FOLDER:GetChildren()) do
if not self.OtherObjects[drop] then
self.OtherObjects[drop] = SimpleESP.new(drop, "[AIRDROP] " .. drop.Name, "ESPAirdropColor")
end
self.OtherObjects[drop]:Update()
end
end
-- Dead Bodies
if ConfigManager:Get("DeadBodyESP") then
for _, body in pairs(DEAD_BODIES_FOLDER:GetChildren()) do
if not self.OtherObjects[body] then
self.OtherObjects[body] = SimpleESP.new(body, "[BODY] " .. body.Name, "ESPDeadBodyColor")
end
self.OtherObjects[body]:Update()
end
end
-- Cleanup destroyed other objects
for model, esp in pairs(self.OtherObjects) do
if not model.Parent then
esp:Destroy()
self.OtherObjects[model] = nil
elseif not (ConfigManager:Get("ExtractionESP") and model.Parent == EXTRACTION_FOLDER)
and not (ConfigManager:Get("AirdropESP") and model.Parent == AIRDROP_FOLDER)
and not (ConfigManager:Get("DeadBodyESP") and model.Parent == DEAD_BODIES_FOLDER) then
esp:Hide()
end
end
end
function ESPManager:ClearAll()
for _, esp in pairs(self.PlayerObjects) do esp:Hide() end
for _, esp in pairs(self.BotObjects) do esp:Hide() end
for _, esp in pairs(self.LootObjects) do esp:Hide() end
for _, esp in pairs(self.OtherObjects) do esp:Hide() end
end
-- ═══════════════════════════════════════════════════════════════
-- AIMBOT
-- ═══════════════════════════════════════════════════════════════
local Aimbot = {}
Aimbot.Locked = false
Aimbot.Target = nil
Aimbot.FOVCircle = nil
function Aimbot:Init()
self.FOVCircle = DrawingPool:Create("Circle")
self.FOVCircle.Filled = false
self.FOVCircle.Thickness = 1.5
self.FOVCircle.NumSides = 64
self.FOVCircle.Color = Color3.new(1, 1, 1)
ConnectionManager:Add("AimbotLoop", RunService.RenderStepped:Connect(function()
self:Update()
end))
UserInputService.InputBegan:Connect(function(input, gp)
if gp then return end
if input.UserInputType == Enum.UserInputType.MouseButton2 then
self.Locked = true
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
self.Locked = false
self.Target = nil
end
end)
end
function Aimbot:GetClosestHead()
local closestHead = nil
local closestDist = math.huge
local cam = GetCamera()
if not cam then return nil end
local center = Vector2.new(cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2)
local fov = ConfigManager:Get("AimbotFOV")
local maxDist = ConfigManager:Get("AimbotMaxDistance")
local visCheck = ConfigManager:Get("AimbotVisibilityCheck")
local targetBots = ConfigManager:Get("AimbotTargetBots")
local myChar = LocalPlayer.Character
local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart")
-- Players
for _, plr in pairs(Players:GetPlayers()) do
if plr == LocalPlayer then continue end
local char = Utils:GetCharacter(plr)
if not char then continue end
local head = char:FindFirstChild("Head")
local hum = char:FindFirstChildOfClass("Humanoid")
if not head or not hum or hum.Health <= 0 then continue end
local dist3D = myRoot and (head.Position - myRoot.Position).Magnitude or 0
if dist3D > maxDist then continue end
local pos, onScreen = Utils:WorldToScreen(head.Position)
if not onScreen then continue end
local dist2D = (pos - center).Magnitude
if dist2D > fov then continue end
if visCheck then
local rp = RaycastParams.new()
rp.FilterType = Enum.RaycastFilterType.Blacklist
rp.FilterDescendantsInstances = {cam, myChar}
local res = Workspace:Raycast(cam.CFrame.Position, head.Position - cam.CFrame.Position, rp)
if res and not res.Instance:IsDescendantOf(char) then continue end
end
if dist2D < closestDist then
closestDist = dist2D
closestHead = head
end
end
-- Bots
if targetBots then
for _, bot in pairs(BOT_FOLDER:GetChildren()) do
if not bot:IsA("Model") then continue end
local head = bot:FindFirstChild("Head")
local hum = bot:FindFirstChildOfClass("Humanoid")
if not head or not hum or hum.Health <= 0 then continue end
local dist3D = myRoot and (head.Position - myRoot.Position).Magnitude or 0
if dist3D > maxDist then continue end
local pos, onScreen = Utils:WorldToScreen(head.Position)
if not onScreen then continue end
local dist2D = (pos - center).Magnitude
if dist2D > fov then continue end
if visCheck then
local rp = RaycastParams.new()
rp.FilterType = Enum.RaycastFilterType.Blacklist
rp.FilterDescendantsInstances = {cam, myChar}
local res = Workspace:Raycast(cam.CFrame.Position, head.Position - cam.CFrame.Position, rp)
if res and not res.Instance:IsDescendantOf(bot) then continue end
end
if dist2D < closestDist then
closestDist = dist2D
closestHead = head
end
end
end
return closestHead
end
function Aimbot:Update()
local cam = GetCamera()
if not cam then return end
if ConfigManager:Get("AimbotShowFOV") and ConfigManager:Get("AimbotEnabled") then
self.FOVCircle.Visible = true
self.FOVCircle.Radius = ConfigManager:Get("AimbotFOV")
self.FOVCircle.Position = Vector2.new(cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2)
self.FOVCircle.Color = self.Locked and Color3.fromRGB(0, 255, 0) or Color3.new(1, 1, 1)
else
self.FOVCircle.Visible = false
end
if not ConfigManager:Get("AimbotEnabled") or not self.Locked then return end
local target = self.Target or self:GetClosestHead()
if target and target.Parent then
self.Target = target
local smoothness = ConfigManager:Get("AimbotSmoothness")
local alpha = math.clamp(1.1 - smoothness, 0.02, 1)
cam.CFrame = cam.CFrame:Lerp(CFrame.new(cam.CFrame.Position, target.Position), alpha)
else
self.Target = nil
end
end
-- ═══════════════════════════════════════════════════════════════
-- WORLD MODULE
-- ═══════════════════════════════════════════════════════════════
local WorldModule = {}
function WorldModule:Init()
self.Original = {
Brightness = Lighting.Brightness,
ClockTime = Lighting.ClockTime,
FogStart = Lighting.FogStart,
FogEnd = Lighting.FogEnd,
FogColor = Lighting.FogColor,
GlobalShadows = Lighting.GlobalShadows,
OutdoorAmbient = Lighting.OutdoorAmbient,
Ambient = Lighting.Ambient,
}
ConnectionManager:Add("WorldLoop", RunService.Heartbeat:Connect(function()
if ConfigManager:Get("FullBright") then
Lighting.Brightness = 2
Lighting.GlobalShadows = false
Lighting.OutdoorAmbient = Color3.fromRGB(128, 128, 128)
Lighting.Ambient = Color3.fromRGB(128, 128, 128)
elseif not ConfigManager:Get("TimeChanger") then
Lighting.Brightness = self.Original.Brightness
Lighting.GlobalShadows = self.Original.GlobalShadows
Lighting.OutdoorAmbient = self.Original.OutdoorAmbient
Lighting.Ambient = self.Original.Ambient
end
if ConfigManager:Get("TimeChanger") then
Lighting.ClockTime = ConfigManager:Get("CustomTime")
elseif not ConfigManager:Get("FullBright") then
Lighting.ClockTime = self.Original.ClockTime
end
if ConfigManager:Get("RemoveFog") then
Lighting.FogStart = 0
Lighting.FogEnd = 100000
Lighting.FogColor = Color3.fromRGB(255, 255, 255)
elseif not ConfigManager:Get("FullBright") then
Lighting.FogStart = self.Original.FogStart
Lighting.FogEnd = self.Original.FogEnd
Lighting.FogColor = self.Original.FogColor
end
if ConfigManager:Get("WeatherToggle") and NATURE_FOLDER then
for _, obj in pairs(NATURE_FOLDER:GetDescendants()) do
if obj:IsA("ParticleEmitter") or obj:IsA("Beam") then obj.Enabled = false end
end
end
if ConfigManager:Get("ShowInteractive") then
for _, container in pairs(CONTAINER_FOLDER:GetChildren()) do
if container:IsA("Model") and not container:FindFirstChild("DS_Highlight") then
local hl = Instance.new("Highlight")
hl.Name = "DS_Highlight"
hl.FillColor = Color3.fromRGB(255, 255, 0)
hl.OutlineColor = Color3.fromRGB(255, 255, 0)
hl.FillTransparency = 0.8
hl.OutlineTransparency = 0
hl.Parent = container
end
end
else
for _, container in pairs(CONTAINER_FOLDER:GetChildren()) do
local hl = container:FindFirstChild("DS_Highlight")
if hl then hl:Destroy() end
end
end
end))
end
-- ═══════════════════════════════════════════════════════════════
-- MISC MODULE
-- ═══════════════════════════════════════════════════════════════
local MiscModule = {}
function MiscModule:Init()
ConnectionManager:Add("FPSBoost", RunService.Heartbeat:Connect(function()
if ConfigManager:Get("FPSBoost") then
settings().Rendering.QualityLevel = 1
for _, effect in pairs(Lighting:GetChildren()) do
if effect:IsA("PostEffect") then effect.Enabled = false end
end
end
end))
end
-- ═══════════════════════════════════════════════════════════════
-- RAYFIELD UI
-- ═══════════════════════════════════════════════════════════════
local RayfieldUI = {}
function RayfieldUI:Init()
local ok, RayfieldLib = pcall(function()
return loadstring(game:HttpGet("https://sirius.menu/rayfield"))()
end)
if not ok or not RayfieldLib then warn("[XCMEN] Rayfield failed"); return end
self.Library = RayfieldLib
local Window = RayfieldLib:CreateWindow({
Name = "XCMEN HUB - DesertStorm",
LoadingTitle = "XCMEN HUB",
LoadingSubtitle = "DesertStorm [EXTRACTION]",
ConfigurationSaving = { Enabled = false },
Discord = { Enabled = false },
KeySystem = false,
})
self.Window = Window
self:CreateCombatTab()
self:CreateESPTab()
self:CreateNPCTab()
self:CreateContainersTab()
self:CreateWorldTab()
self:CreateMiscTab()
self:CreateSettingsTab()
if ConfigManager:Get("Notifications") then
RayfieldLib:Notify({
Title = "XCMEN HUB",
Content = "DesertStorm loaded! Press " .. ConfigManager:Get("GUIBind") .. " to toggle.",
Duration = 5,
Image = 4483362458,
})
end
end
function RayfieldUI:CreateCombatTab()
local Tab = self.Window:CreateTab("Combat", 4483362458)
Tab:CreateSection("Aimbot (Hold RMB)")
Tab:CreateToggle({
Name = "Enable Aimbot",
CurrentValue = ConfigManager:Get("AimbotEnabled"),
Flag = "AimbotEnabled",
Callback = function(v) ConfigManager:Set("AimbotEnabled", v) end,
})
Tab:CreateSlider({
Name = "Smoothness (0.1 = Strong / 1 = Weak)",
Range = {0.1, 1}, Increment = 0.01,
CurrentValue = ConfigManager:Get("AimbotSmoothness"),
Flag = "AimbotSmoothness",
Callback = function(v) ConfigManager:Set("AimbotSmoothness", v) end,
})
Tab:CreateSlider({
Name = "FOV Radius", Range = {10, 500}, Increment = 5, Suffix = "px",
CurrentValue = ConfigManager:Get("AimbotFOV"),
Flag = "AimbotFOV",
Callback = function(v) ConfigManager:Set("AimbotFOV", v) end,
})
Tab:CreateSlider({
Name = "Max Distance", Range = {50, 3000}, Increment = 50, Suffix = "m",
CurrentValue = ConfigManager:Get("AimbotMaxDistance"),
Flag = "AimbotMaxDist",
Callback = function(v) ConfigManager:Set("AimbotMaxDistance", v) end,
})
Tab:CreateToggle({
Name = "Target Bots too",
CurrentValue = ConfigManager:Get("AimbotTargetBots"),
Flag = "AimbotTargetBots",
Callback = function(v) ConfigManager:Set("AimbotTargetBots", v) end,
})
Tab:CreateToggle({
Name = "Visibility Check",
CurrentValue = ConfigManager:Get("AimbotVisibilityCheck"),
Flag = "AimbotVisCheck",
Callback = function(v) ConfigManager:Set("AimbotVisibilityCheck", v) end,
})
Tab:CreateToggle({
Name = "Show FOV Circle",
CurrentValue = ConfigManager:Get("AimbotShowFOV"),
Flag = "AimbotShowFOV",
Callback = function(v) ConfigManager:Set("AimbotShowFOV", v) end,
})
end
function RayfieldUI:CreateESPTab()
local Tab = self.Window:CreateTab("ESP", 4483362458)
Tab:CreateSection("Player ESP")
Tab:CreateToggle({
Name = "Enable Player ESP", CurrentValue = ConfigManager:Get("PlayerESP"), Flag = "PlayerESP",
Callback = function(v) ConfigManager:Set("PlayerESP", v) end,
})
Tab:CreateToggle({
Name = "Box ESP", CurrentValue = ConfigManager:Get("BoxESP"), Flag = "BoxESP",
Callback = function(v) ConfigManager:Set("BoxESP", v) end,
})
Tab:CreateToggle({
Name = "Name ESP", CurrentValue = ConfigManager:Get("NameESP"), Flag = "NameESP",
Callback = function(v) ConfigManager:Set("NameESP", v) end,
})
Tab:CreateToggle({
Name = "Distance ESP", CurrentValue = ConfigManager:Get("DistanceESP"), Flag = "DistanceESP",
Callback = function(v) ConfigManager:Set("DistanceESP", v) end,
})
Tab:CreateToggle({
Name = "Health ESP", CurrentValue = ConfigManager:Get("HealthESP"), Flag = "HealthESP",
Callback = function(v) ConfigManager:Set("HealthESP", v) end,
})
Tab:CreateToggle({
Name = "Tracers", CurrentValue = ConfigManager:Get("Tracers"), Flag = "Tracers",
Callback = function(v) ConfigManager:Set("Tracers", v) end,
})
Tab:CreateToggle({
Name = "Chams", CurrentValue = ConfigManager:Get("Chams"), Flag = "Chams",
Callback = function(v) ConfigManager:Set("Chams", v) end,
})
Tab:CreateSection("Colors")
Tab:CreateColorPicker({
Name = "Enemy Color", Color = Utils:ColorFromConfig("ESPEnemyColor"), Flag = "EnemyColor",
Callback = function(v)
ConfigManager:Set("ESPEnemyColor", {R = math.floor(v.R*255), G = math.floor(v.G*255), B = math.floor(v.B*255)})
end,
})
end
function RayfieldUI:CreateNPCTab()
local Tab = self.Window:CreateTab("NPC", 4483362458)
Tab:CreateSection("Bot / NPC ESP")
Tab:CreateToggle({
Name = "Enable Bot ESP", CurrentValue = ConfigManager:Get("BotESP"), Flag = "BotESP",
Callback = function(v) ConfigManager:Set("BotESP", v) end,
})
Tab:CreateToggle({
Name = "Box ESP", CurrentValue = ConfigManager:Get("BotBoxESP"), Flag = "BotBoxESP",
Callback = function(v) ConfigManager:Set("BotBoxESP", v) end,
})
Tab:CreateToggle({
Name = "Name ESP", CurrentValue = ConfigManager:Get("BotNameESP"), Flag = "BotNameESP",
Callback = function(v) ConfigManager:Set("BotNameESP", v) end,
})
Tab:CreateToggle({
Name = "Distance ESP", CurrentValue = ConfigManager:Get("BotDistanceESP"), Flag = "BotDistanceESP",
Callback = function(v) ConfigManager:Set("BotDistanceESP", v) end,
})
Tab:CreateToggle({
Name = "Health ESP", CurrentValue = ConfigManager:Get("BotHealthESP"), Flag = "BotHealthESP",
Callback = function(v) ConfigManager:Set("BotHealthESP", v) end,
})
Tab:CreateToggle({
Name = "Tracers", CurrentValue = ConfigManager:Get("BotTracers"), Flag = "BotTracers",
Callback = function(v) ConfigManager:Set("BotTracers", v) end,
})
Tab:CreateSection("Colors")
Tab:CreateColorPicker({
Name = "Bot Color", Color = Utils:ColorFromConfig("ESPBotColor"), Flag = "BotColor",
Callback = function(v)
ConfigManager:Set("ESPBotColor", {R = math.floor(v.R*255), G = math.floor(v.G*255), B = math.floor(v.B*255)})
end,
})
end
function RayfieldUI:CreateContainersTab()
local Tab = self.Window:CreateTab("Containers", 4483362458)
Tab:CreateSection("Loot / Container ESP")
Tab:CreateToggle({
Name = "Enable Loot ESP", CurrentValue = ConfigManager:Get("LootESP"), Flag = "LootESP",
Callback = function(v) ConfigManager:Set("LootESP", v) end,
})
Tab:CreateToggle({
Name = "Name ESP", CurrentValue = ConfigManager:Get("LootNameESP"), Flag = "LootNameESP",
Callback = function(v) ConfigManager:Set("LootNameESP", v) end,
})
Tab:CreateToggle({
Name = "Distance ESP", CurrentValue = ConfigManager:Get("LootDistanceESP"), Flag = "LootDistanceESP",
Callback = function(v) ConfigManager:Set("LootDistanceESP", v) end,
})
Tab:CreateToggle({
Name = "Tracers", CurrentValue = ConfigManager:Get("LootTracers"), Flag = "LootTracers",
Callback = function(v) ConfigManager:Set("LootTracers", v) end,
})
Tab:CreateSection("Object ESP")
Tab:CreateToggle({
Name = "Extraction ESP", CurrentValue = ConfigManager:Get("ExtractionESP"), Flag = "ExtractionESP",
Callback = function(v) ConfigManager:Set("ExtractionESP", v) end,
})
Tab:CreateToggle({
Name = "Airdrop ESP", CurrentValue = ConfigManager:Get("AirdropESP"), Flag = "AirdropESP",
Callback = function(v) ConfigManager:Set("AirdropESP", v) end,
})
Tab:CreateToggle({
Name = "Dead Body ESP", CurrentValue = ConfigManager:Get("DeadBodyESP"), Flag = "DeadBodyESP",
Callback = function(v) ConfigManager:Set("DeadBodyESP", v) end,
})
Tab:CreateSection("Colors")
Tab:CreateColorPicker({
Name = "Loot Color", Color = Utils:ColorFromConfig("ESPLootColor"), Flag = "LootColor",
Callback = function(v)
ConfigManager:Set("ESPLootColor", {R = math.floor(v.R*255), G = math.floor(v.G*255), B = math.floor(v.B*255)})
end,
})
Tab:CreateColorPicker({
Name = "Extraction Color", Color = Utils:ColorFromConfig("ESPExtractionColor"), Flag = "ExtractColor",
Callback = function(v)
ConfigManager:Set("ESPExtractionColor", {R = math.floor(v.R*255), G = math.floor(v.G*255), B = math.floor(v.B*255)})
end,
})
Tab:CreateColorPicker({
Name = "Airdrop Color", Color = Utils:ColorFromConfig("ESPAirdropColor"), Flag = "AirdropColor",
Callback = function(v)
ConfigManager:Set("ESPAirdropColor", {R = math.floor(v.R*255), G = math.floor(v.G*255), B = math.floor(v.B*255)})
end,
})
end
function RayfieldUI:CreateWorldTab()
local Tab = self.Window:CreateTab("World", 4483362458)
Tab:CreateSection("Lighting")
Tab:CreateToggle({
Name = "FullBright", CurrentValue = ConfigManager:Get("FullBright"), Flag = "FullBright",
Callback = function(v) ConfigManager:Set("FullBright", v) end,
})
Tab:CreateToggle({
Name = "Time Changer", CurrentValue = ConfigManager:Get("TimeChanger"), Flag = "TimeChanger",
Callback = function(v) ConfigManager:Set("TimeChanger", v) end,
})
Tab:CreateSlider({
Name = "Custom Time", Range = {0, 24}, Increment = 0.5, Suffix = "hr",
CurrentValue = ConfigManager:Get("CustomTime"), Flag = "CustomTime",
Callback = function(v) ConfigManager:Set("CustomTime", v) end,
})
Tab:CreateToggle({
Name = "Remove Fog", CurrentValue = ConfigManager:Get("RemoveFog"), Flag = "RemoveFog",
Callback = function(v) ConfigManager:Set("RemoveFog", v) end,
})
Tab:CreateToggle({
Name = "Weather Toggle", CurrentValue = ConfigManager:Get("WeatherToggle"), Flag = "WeatherToggle",
Callback = function(v) ConfigManager:Set("WeatherToggle", v) end,
})
Tab:CreateToggle({
Name = "Show Interactive Objects", CurrentValue = ConfigManager:Get("ShowInteractive"), Flag = "ShowInteractive",
Callback = function(v) ConfigManager:Set("ShowInteractive", v) end,
})
end
function RayfieldUI:CreateMiscTab()
local Tab = self.Window:CreateTab("Misc", 4483362458)
Tab:CreateSection("Performance")
Tab:CreateToggle({
Name = "FPS Boost", CurrentValue = ConfigManager:Get("FPSBoost"), Flag = "FPSBoost",
Callback = function(v) ConfigManager:Set("FPSBoost", v) end,
})
Tab:CreateSection("Teleport (Tween)")
for _, extract in pairs(EXTRACTION_FOLDER:GetChildren()) do
local name = ExtractionNames[extract.Name] or extract.Name
Tab:CreateButton({
Name = "TP: " .. name,
Callback = function()
pcall(function()
if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
local primary = extract:IsA("Model") and (extract.PrimaryPart or extract:FindFirstChildWhichIsA("BasePart")) or extract
if primary then
local root = LocalPlayer.Character.HumanoidRootPart
TweenService:Create(root, TweenInfo.new(1.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
CFrame = primary.CFrame + Vector3.new(0, 5, 0)
}):Play()
end
end
end)
end,
})
end
Tab:CreateSection("Server")
Tab:CreateButton({
Name = "Rejoin Server",
Callback = function()
pcall(function() TeleportService:Teleport(game.PlaceId, LocalPlayer) end)
end,
})
Tab:CreateButton({
Name = "Server Hop",
Callback = function()
pcall(function()
local servers = game.HttpService:JSONDecode(game:HttpGet("https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?sortOrder=Asc&limit=100"))
for _, s in pairs(servers.data) do
if s.playing < s.maxPlayers and s.id ~= game.JobId then
TeleportService:TeleportToPlaceInstance(game.PlaceId, s.id, LocalPlayer)
break
end
end
end)
end,
})
Tab:CreateButton({
Name = "Copy JobId", Callback = function() Utils:CopyToClipboard(game.JobId) end,
})
Tab:CreateButton({
Name = "Copy PlaceId", Callback = function() Utils:CopyToClipboard(tostring(game.PlaceId)) end,
})
end
function RayfieldUI:CreateSettingsTab()
local Tab = self.Window:CreateTab("Settings", 4483362458)
Tab:CreateSection("Config")
Tab:CreateButton({
Name = "Save Config",
Callback = function()
ConfigManager:Save()
if ConfigManager:Get("Notifications") then
self.Library:Notify({Title = "Saved", Content = "Config saved.", Duration = 3})
end
end,
})
Tab:CreateButton({
Name = "Load Config",
Callback = function()
ConfigManager:Load()
if ConfigManager:Get("Notifications") then
self.Library:Notify({Title = "Loaded", Content = "Config loaded.", Duration = 3})
end
end,
})
Tab:CreateButton({
Name = "Reset Config",
Callback = function()
ConfigManager:Reset()
if ConfigManager:Get("Notifications") then
self.Library:Notify({Title = "Reset", Content = "Defaults restored.", Duration = 3})
end
end,
})
Tab:CreateToggle({
Name = "Auto Save", CurrentValue = ConfigManager.AutoSaveEnabled, Flag = "AutoSave",
Callback = function(v) ConfigManager.AutoSaveEnabled = v end,
})
Tab:CreateSection("UI")
Tab:CreateDropdown({
Name = "Theme", Options = {"Default", "Ocean", "Midnight", "Sentinel", "Synapse", "Serpent"},
CurrentOption = ConfigManager:Get("Theme"), Flag = "Theme",
Callback = function(v) ConfigManager:Set("Theme", v) end,
})
Tab:CreateToggle({
Name = "Notifications", CurrentValue = ConfigManager:Get("Notifications"), Flag = "Notifications",
Callback = function(v) ConfigManager:Set("Notifications", v) end,
})
Tab:CreateKeybind({
Name = "GUI Toggle", CurrentKeybind = ConfigManager:Get("GUIBind"), HoldToInteract = false, Flag = "GUIBind",
Callback = function(k) ConfigManager:Set("GUIBind", tostring(k)) end,
})
Tab:CreateSection("Danger Zone")
Tab:CreateButton({
Name = "Destroy GUI",
Callback = function()
ConnectionManager:Clear()
ESPManager:ClearAll()
self.Library:Destroy()
end,
})
end
-- ═══════════════════════════════════════════════════════════════
-- BOOTSTRAP
-- ═══════════════════════════════════════════════════════════════
local function Bootstrap()
ConfigManager:Init()
ESPManager:Init()
Aimbot:Init()
WorldModule:Init()
MiscModule:Init()
RayfieldUI:Init()
print("[XCMEN HUB] DesertStorm loaded!")
end
local ok, err = pcall(Bootstrap)
if not ok then
warn("[XCMEN HUB] Error: " .. tostring(err))
endhttps://www.roblox.com/games/115872975504419/DesertStorm
For you Guys i am XCMEN HUB on Robloxscripts and here idk why i changed my name dont ask
1--[[
2 ╔═══════════════════════════════════════════════════════════════╗
3 ║ XCMEN HUB - DesertStorm [EXTRACTION] ║
4 ║ Educational Testing Only — Private Environment ║
5 ╚═══════════════════════════════════════════════════════════════╝
6
7 Tabs: Combat | ESP | NPC | Containers | World | Misc | Settings
8--]]
9
10local Players = game:GetService("Players")
11local ReplicatedStorage = game:GetService("ReplicatedStorage")
12local RunService = game:GetService("RunService")
13local Workspace = game:GetService("Workspace")
14local Lighting = game:GetService("Lighting")
15local UserInputService = game:GetService("UserInputService")
16local TweenService = game:GetService("TweenService")
17local HttpService = game:GetService("HttpService")
18local TeleportService = game:GetService("TeleportService")
19
20local LocalPlayer = Players.LocalPlayer
21
22-- ─── DYNAMISCHE CAMERA ─────────────────────────────────────────
23local function GetCamera()
24 return Workspace.CurrentCamera
25end
26
27-- ─── WORKSPACE PFADE ───────────────────────────────────────────
28local CONTAINER_FOLDER = Workspace:WaitForChild("Containers")
29local BOT_FOLDER = Workspace:WaitForChild("IngameBots")
30local EXTRACTION_FOLDER = Workspace:WaitForChild("Extractions")
31local AIRDROP_FOLDER = Workspace:WaitForChild("AirdropPositions")
32local DEAD_BODIES_FOLDER = Workspace:WaitForChild("DeadBodies")
33local NATURE_FOLDER = Workspace:WaitForChild("Nature")
34
35-- ─── REMOTES ───────────────────────────────────────────────────
36local Remotes = {
37 OpenContainerEvent = ReplicatedStorage:WaitForChild("OpenContainerEvent"),
38 ExtractionSync = ReplicatedStorage:WaitForChild("ExtractionSync"),
39 HitmarkerEvent = ReplicatedStorage:WaitForChild("HitmarkerEvent"),
40 PingLocation = ReplicatedStorage:WaitForChild("PingLocation"),
41 RemoteEvent = ReplicatedStorage:WaitForChild("RemoteEvent"),
42}
43
44-- ─── MAPPINGS ──────────────────────────────────────────────────
45local ContainerTypes = {
46 ["Ammo Box"] = "ammo", ["Civilian Airdrop"] = "airdrop",
47 ["Double Metal Crates"] = "crate", ["Duffel Bag"] = "bag",
48 ["Food Crate"] = "crate", ["Leather Pouch"] = "pouch",
49 ["Medical Pouch"] = "medical", ["Metal Crate"] = "crate",
50 ["Military Laptop"] = "electronics", ["PC Tower"] = "electronics",
51 ["Safe"] = "safe", ["Specops Supply Crate"] = "crate",
52 ["Supply Crate"] = "crate", ["T.C.R Supply Crate"] = "crate",
53 ["Tall Metal Crate"] = "crate", ["Tanker Truck"] = "vehicle",
54 ["Vault"] = "safe", ["Wooden Crate"] = "crate",
55 ["Abandoned Car"] = "vehicle", ["DroppedItemContainer"] = "loot",
56}
57
58local BotTypes = {
59 ["GOVSoldier"] = "gov", ["RebelElite"] = "rebel",
60 ["RebelSniper"] = "rebel", ["RebelSoldier"] = "rebel",
61 ["Scav"] = "scav", ["TCRElite"] = "tcr",
62 ["TCRGuard"] = "tcr", ["Tyrant"] = "boss",
63}
64
65local ExtractionNames = {
66 ["Getaway Car"] = "Getaway Car", ["Mountain Cave"] = "Mountain Cave",
67 ["North-Western Boat"] = "NW Boat", ["Northern Mountain"] = "N Mountain",
68 ["Radio Tower"] = "Radio Tower", ["Ruined Hideout"] = "Ruined Hideout",
69 ["Southern Boat"] = "S Boat", ["Southern Tunnel"] = "S Tunnel",
70 ["Tunnel Exit"] = "Tunnel Exit", ["Western Boat"] = "W Boat",
71}
72
73-- ═══════════════════════════════════════════════════════════════
74-- CONFIG MANAGER
75-- ═══════════════════════════════════════════════════════════════
76local ConfigManager = {}
77ConfigManager.Current = {}
78ConfigManager.Path = "XCMEN_HUB_DesertStorm/"
79ConfigManager.FileName = "config.json"
80ConfigManager.AutoSaveEnabled = true
81
82function ConfigManager:Init()
83 if not isfolder(self.Path) then makefolder(self.Path) end
84 self:Load()
85 task.spawn(function()
86 while self.AutoSaveEnabled do
87 task.wait(30)
88 if self.AutoSaveEnabled then pcall(function() self:Save() end) end
89 end
90 end)
91end
92
93function ConfigManager:Load()
94 local fullPath = self.Path .. self.FileName
95 if isfile(fullPath) then
96 local ok, data = pcall(function() return HttpService:JSONDecode(readfile(fullPath)) end)
97 if ok and type(data) == "table" then self.Current = data; return end
98 end
99 self:Reset()
100end
101
102function ConfigManager:Save()
103 local ok, encoded = pcall(function() return HttpService:JSONEncode(self.Current) end)
104 if ok then pcall(function() writefile(self.Path .. self.FileName, encoded) end) end
105end
106
107function ConfigManager:Reset()
108 self.Current = {
109 -- Combat / Aimbot
110 AimbotEnabled = false, AimbotSmoothness = 0.5,
111 AimbotFOV = 150, AimbotMaxDistance = 1000,
112 AimbotTeamCheck = false, AimbotVisibilityCheck = false,
113 AimbotShowFOV = true, AimbotTargetBots = true,
114
115 -- Player ESP
116 PlayerESP = false, BoxESP = false, NameESP = false,
117 DistanceESP = false, HealthESP = false, Tracers = false,
118 Chams = false,
119
120 -- NPC ESP
121 BotESP = false, BotBoxESP = false, BotNameESP = false,
122 BotDistanceESP = false, BotHealthESP = false, BotTracers = false,
123
124 -- Container ESP
125 LootESP = false, LootNameESP = false, LootDistanceESP = false,
126 LootTracers = false,
127
128 -- Object ESP
129 ExtractionESP = false, AirdropESP = false, DeadBodyESP = false,
130
131 -- Colors
132 ESPEnemyColor = {R = 255, G = 50, B = 50},
133 ESPBotColor = {R = 255, G = 165, B = 0},
134 ESPLootColor = {R = 255, G = 215, B = 0},
135 ESPExtractionColor = {R = 0, G = 255, B = 255},
136 ESPAirdropColor = {R = 255, G = 0, B = 255},
137 ESPDeadBodyColor = {R = 128, G = 128, B = 128},
138
139 -- World
140 FullBright = false, TimeChanger = false, CustomTime = 12,
141 RemoveFog = false, WeatherToggle = false, ShowInteractive = false,
142
143 -- Misc
144 FPSBoost = false,
145
146 -- Settings
147 Theme = "Default", GUIBind = "RightShift",
148 Watermark = true, Notifications = true,
149 }
150 self:Save()
151end
152
153function ConfigManager:Set(key, value) self.Current[key] = value end
154function ConfigManager:Get(key) return self.Current[key] end
155
156-- ═══════════════════════════════════════════════════════════════
157-- CONNECTION MANAGER
158-- ═══════════════════════════════════════════════════════════════
159local ConnectionManager = {}
160ConnectionManager.Connections = {}
161
162function ConnectionManager:Add(name, connection)
163 if self.Connections[name] then pcall(function() self.Connections[name]:Disconnect() end) end
164 self.Connections[name] = connection
165end
166
167function ConnectionManager:Clear()
168 for _, conn in pairs(self.Connections) do pcall(function() conn:Disconnect() end) end
169 table.clear(self.Connections)
170end
171
172-- ═══════════════════════════════════════════════════════════════
173-- UTILITY
174-- ═══════════════════════════════════════════════════════════════
175local Utils = {}
176Utils._cachedFolder = nil
177
178function Utils:GetPlayerFolder()
179 if self._cachedFolder and self._cachedFolder.Parent and self._cachedFolder:FindFirstChild(LocalPlayer.Name) then
180 return self._cachedFolder
181 end
182 for _, child in pairs(Workspace:GetChildren()) do
183 if (child:IsA("Folder") or child:IsA("Model")) and child:FindFirstChild(LocalPlayer.Name) then
184 self._cachedFolder = child
185 return child
186 end
187 end
188 return nil
189end
190
191function Utils:GetCharacter(player)
192 if not player then return nil end
193 local folder = self:GetPlayerFolder()
194 if not folder then return nil end
195 local char = folder:FindFirstChild(player.Name)
196 if char and char:FindFirstChild("Humanoid") and char:FindFirstChild("HumanoidRootPart") then
197 return char
198 end
199 return nil
200end
201
202function Utils:GetHealth(char)
203 if not char then return 0, 100 end
204 local healthObj = char:FindFirstChild("Health")
205 if healthObj and healthObj:IsA("ValueBase") then return healthObj.Value, 100 end
206 local hum = char:FindFirstChildOfClass("Humanoid")
207 if hum then return hum.Health, hum.MaxHealth end
208 return 0, 100
209end
210
211function Utils:IsAlive(char)
212 if not char then return false end
213 local hum = char:FindFirstChildOfClass("Humanoid")
214 return hum and hum.Health > 0
215end
216
217function Utils:GetDistance(pos)
218 if not LocalPlayer.Character then return 99999 end
219 local root = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
220 if root then return (root.Position - pos).Magnitude end
221 return 99999
222end
223
224function Utils:WorldToScreen(pos)
225 local cam = GetCamera()
226 if not cam then return Vector2.new(0, 0), false end
227 local sp, onScreen = cam:WorldToViewportPoint(pos)
228 return Vector2.new(sp.X, sp.Y), onScreen
229end
230
231function Utils:ColorFromConfig(key)
232 local c = ConfigManager:Get(key)
233 return Color3.fromRGB(c.R, c.G, c.B)
234end
235
236function Utils:FormatNumber(n) return tostring(math.floor(n + 0.5)) end
237
238function Utils:CopyToClipboard(text) pcall(function() setclipboard(text) end) end
239
240-- ═══════════════════════════════════════════════════════════════
241-- DRAWING POOL
242-- ═══════════════════════════════════════════════════════════════
243local DrawingPool = {}
244function DrawingPool:Create(type)
245 local ok, d = pcall(function() return Drawing.new(type) end)
246 if ok then d.Visible = false; return d end
247 return nil
248end
249function DrawingPool:Destroy(d) pcall(function() d:Remove() end) end
250
251-- ═══════════════════════════════════════════════════════════════
252-- ESP ENGINE (ROBUST + CLEANUP)
253-- ═══════════════════════════════════════════════════════════════
254local ESPManager = {}
255ESPManager.PlayerObjects = {}
256ESPManager.BotObjects = {}
257ESPManager.LootObjects = {}
258ESPManager.OtherObjects = {}
259
260-- Hilfsfunktion: Bounding Box aus Character-Parts
261local function GetCharBounds(character)
262 if not character then return nil end
263 local cam = GetCamera()
264 if not cam then return nil end
265
266 local minX, minY = math.huge, math.huge
267 local maxX, maxY = -math.huge, -math.huge
268 local any = false
269
270 for _, part in pairs(character:GetChildren()) do
271 if part:IsA("BasePart") then
272 local size = part.Size
273 local cf = part.CFrame
274 local corners = {
275 cf * CFrame.new(-size.X/2, -size.Y/2, -size.Z/2),
276 cf * CFrame.new(-size.X/2, -size.Y/2, size.Z/2),
277 cf * CFrame.new(-size.X/2, size.Y/2, -size.Z/2),
278 cf * CFrame.new(-size.X/2, size.Y/2, size.Z/2),
279 cf * CFrame.new(size.X/2, -size.Y/2, -size.Z/2),
280 cf * CFrame.new(size.X/2, -size.Y/2, size.Z/2),
281 cf * CFrame.new(size.X/2, size.Y/2, -size.Z/2),
282 cf * CFrame.new(size.X/2, size.Y/2, size.Z/2),
283 }
284 for _, c in pairs(corners) do
285 local sp, onScreen = cam:WorldToViewportPoint(c.Position)
286 if onScreen then
287 any = true
288 minX = math.min(minX, sp.X)
289 minY = math.min(minY, sp.Y)
290 maxX = math.max(maxX, sp.X)
291 maxY = math.max(maxY, sp.Y)
292 end
293 end
294 end
295 end
296
297 if any and minX ~= math.huge then
298 return Vector2.new(minX, minY), Vector2.new(maxX, maxY)
299 end
300 return nil
301end
302
303-- ─── PLAYER ESP ────────────────────────────────────────────────
304local PlayerESP = {}
305PlayerESP.__index = PlayerESP
306
307function PlayerESP.new(player)
308 local self = setmetatable({}, PlayerESP)
309 self.Player = player
310 self.Drawings = {
311 Box = DrawingPool:Create("Square"),
312 BoxOutline = DrawingPool:Create("Square"),
313 Name = DrawingPool:Create("Text"),
314 Distance = DrawingPool:Create("Text"),
315 Health = DrawingPool:Create("Text"),
316 HealthBar = DrawingPool:Create("Square"),
317 HealthBarOutline = DrawingPool:Create("Square"),
318 Tracer = DrawingPool:Create("Line"),
319 }
320 self.Highlight = nil
321 return self
322end
323
324function PlayerESP:Update()
325 local ok, err = pcall(function()
326 local char = Utils:GetCharacter(self.Player)
327 if not char or not Utils:IsAlive(char) then
328 self:Hide()
329 return
330 end
331
332 local topLeft, bottomRight = GetCharBounds(char)
333 if not topLeft then self:Hide(); return end
334
335 local size = bottomRight - topLeft
336 if size.X < 4 or size.Y < 4 then self:Hide(); return end
337
338 local root = char:FindFirstChild("HumanoidRootPart")
339 local dist = root and Utils:GetDistance(root.Position) or 0
340 local color = Utils:ColorFromConfig("ESPEnemyColor")
341
342 -- Box
343 if ConfigManager:Get("BoxESP") then
344 self.Drawings.BoxOutline.Size = size + Vector2.new(2, 2)
345 self.Drawings.BoxOutline.Position = topLeft - Vector2.new(1, 1)
346 self.Drawings.BoxOutline.Visible = true
347 self.Drawings.BoxOutline.Color = Color3.new(0, 0, 0)
348 self.Drawings.BoxOutline.Thickness = 1
349 self.Drawings.BoxOutline.Filled = false
350
351 self.Drawings.Box.Size = size
352 self.Drawings.Box.Position = topLeft
353 self.Drawings.Box.Visible = true
354 self.Drawings.Box.Color = color
355 self.Drawings.Box.Thickness = 1
356 self.Drawings.Box.Filled = false
357 else
358 self.Drawings.Box.Visible = false
359 self.Drawings.BoxOutline.Visible = false
360 end
361
362 -- Name
363 if ConfigManager:Get("NameESP") then
364 self.Drawings.Name.Text = self.Player.Name
365 self.Drawings.Name.Position = Vector2.new(topLeft.X + size.X/2, topLeft.Y - 16)
366 self.Drawings.Name.Size = 13
367 self.Drawings.Name.Center = true
368 self.Drawings.Name.Visible = true
369 self.Drawings.Name.Color = color
370 self.Drawings.Name.Outline = true
371 else
372 self.Drawings.Name.Visible = false
373 end
374
375 -- Distance
376 if ConfigManager:Get("DistanceESP") then
377 self.Drawings.Distance.Text = Utils:FormatNumber(dist) .. "m"
378 self.Drawings.Distance.Position = Vector2.new(topLeft.X + size.X/2, bottomRight.Y + 2)
379 self.Drawings.Distance.Size = 11
380 self.Drawings.Distance.Center = true
381 self.Drawings.Distance.Visible = true
382 self.Drawings.Distance.Color = Color3.new(1, 1, 1)
383 self.Drawings.Distance.Outline = true
384 else
385 self.Drawings.Distance.Visible = false
386 end
387
388 -- Health
389 if ConfigManager:Get("HealthESP") then
390 local hp, maxHp = Utils:GetHealth(char)
391 local pct = math.clamp(hp / maxHp, 0, 1)
392
393 self.Drawings.Health.Text = Utils:FormatNumber(hp) .. " HP"
394 self.Drawings.Health.Position = Vector2.new(topLeft.X + size.X/2, topLeft.Y - 30)
395 self.Drawings.Health.Size = 11
396 self.Drawings.Health.Center = true
397 self.Drawings.Health.Visible = true
398 self.Drawings.Health.Color = Color3.fromRGB(255*(1-pct), 255*pct, 0)
399 self.Drawings.Health.Outline = true
400
401 local barW = size.X
402 local barH = 3
403 local barPos = Vector2.new(topLeft.X, topLeft.Y - 8)
404
405 self.Drawings.HealthBarOutline.Size = Vector2.new(barW+2, barH+2)
406 self.Drawings.HealthBarOutline.Position = barPos - Vector2.new(1,1)
407 self.Drawings.HealthBarOutline.Visible = true
408 self.Drawings.HealthBarOutline.Color = Color3.new(0,0,0)
409 self.Drawings.HealthBarOutline.Filled = true
410
411 self.Drawings.HealthBar.Size = Vector2.new(barW * pct, barH)
412 self.Drawings.HealthBar.Position = barPos
413 self.Drawings.HealthBar.Visible = true
414 self.Drawings.HealthBar.Color = Color3.fromRGB(255*(1-pct), 255*pct, 0)
415 self.Drawings.HealthBar.Filled = true
416 else
417 self.Drawings.Health.Visible = false
418 self.Drawings.HealthBar.Visible = false
419 self.Drawings.HealthBarOutline.Visible = false
420 end
421
422 -- Tracer
423 if ConfigManager:Get("Tracers") then
424 local cam = GetCamera()
425 if cam then
426 self.Drawings.Tracer.From = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y)
427 self.Drawings.Tracer.To = Vector2.new(topLeft.X + size.X/2, topLeft.Y + size.Y/2)
428 self.Drawings.Tracer.Visible = true
429 self.Drawings.Tracer.Color = color
430 self.Drawings.Tracer.Thickness = 1
431 end
432 else
433 self.Drawings.Tracer.Visible = false
434 end
435
436 -- Chams
437 if ConfigManager:Get("Chams") then
438 if not self.Highlight then
439 self.Highlight = Instance.new("Highlight")
440 self.Highlight.Parent = char
441 end
442 self.Highlight.FillColor = color
443 self.Highlight.OutlineColor = Color3.new(1,1,1)
444 self.Highlight.FillTransparency = 0.5
445 self.Highlight.OutlineTransparency = 0
446 self.Highlight.Enabled = true
447 elseif self.Highlight then
448 self.Highlight.Enabled = false
449 end
450 end)
451 if not ok then self:Hide() end
452end
453
454function PlayerESP:Hide()
455 for _, d in pairs(self.Drawings) do d.Visible = false end
456 if self.Highlight then self.Highlight.Enabled = false end
457end
458
459function PlayerESP:Destroy()
460 self:Hide()
461 for _, d in pairs(self.Drawings) do DrawingPool:Destroy(d) end
462 if self.Highlight then self.Highlight:Destroy() end
463end
464
465-- ─── BOT / NPC ESP ─────────────────────────────────────────────
466local BotESP = {}
467BotESP.__index = BotESP
468
469function BotESP.new(model)
470 local self = setmetatable({}, BotESP)
471 self.Model = model
472 self.Drawings = {
473 Box = DrawingPool:Create("Square"),
474 BoxOutline = DrawingPool:Create("Square"),
475 Name = DrawingPool:Create("Text"),
476 Distance = DrawingPool:Create("Text"),
477 Health = DrawingPool:Create("Text"),
478 HealthBar = DrawingPool:Create("Square"),
479 HealthBarOutline = DrawingPool:Create("Square"),
480 Tracer = DrawingPool:Create("Line"),
481 }
482 return self
483end
484
485function BotESP:Update()
486 local ok, err = pcall(function()
487 if not self.Model or not self.Model.Parent then self:Hide(); return end
488
489 local hum = self.Model:FindFirstChildOfClass("Humanoid")
490 if not hum or hum.Health <= 0 then self:Hide(); return end
491
492 local hrp = self.Model:FindFirstChild("HumanoidRootPart")
493 if not hrp then self:Hide(); return end
494
495 local topLeft, bottomRight = GetCharBounds(self.Model)
496 if not topLeft then self:Hide(); return end
497
498 local size = bottomRight - topLeft
499 if size.X < 4 or size.Y < 4 then self:Hide(); return end
500
501 local dist = Utils:GetDistance(hrp.Position)
502 local color = Utils:ColorFromConfig("ESPBotColor")
503 local botType = Utils:GetBotType(self.Model)
504
505 -- Box
506 if ConfigManager:Get("BotBoxESP") then
507 self.Drawings.BoxOutline.Size = size + Vector2.new(2,2)
508 self.Drawings.BoxOutline.Position = topLeft - Vector2.new(1,1)
509 self.Drawings.BoxOutline.Visible = true
510 self.Drawings.BoxOutline.Color = Color3.new(0,0,0)
511 self.Drawings.BoxOutline.Thickness = 1
512 self.Drawings.BoxOutline.Filled = false
513
514 self.Drawings.Box.Size = size
515 self.Drawings.Box.Position = topLeft
516 self.Drawings.Box.Visible = true
517 self.Drawings.Box.Color = color
518 self.Drawings.Box.Thickness = 1
519 self.Drawings.Box.Filled = false
520 else
521 self.Drawings.Box.Visible = false
522 self.Drawings.BoxOutline.Visible = false
523 end
524
525 -- Name
526 if ConfigManager:Get("BotNameESP") then
527 self.Drawings.Name.Text = self.Model.Name .. " [" .. botType .. "]"
528 self.Drawings.Name.Position = Vector2.new(topLeft.X + size.X/2, topLeft.Y - 16)
529 self.Drawings.Name.Size = 12
530 self.Drawings.Name.Center = true
531 self.Drawings.Name.Visible = true
532 self.Drawings.Name.Color = color
533 self.Drawings.Name.Outline = true
534 else
535 self.Drawings.Name.Visible = false
536 end
537
538 -- Distance
539 if ConfigManager:Get("BotDistanceESP") then
540 self.Drawings.Distance.Text = Utils:FormatNumber(dist) .. "m"
541 self.Drawings.Distance.Position = Vector2.new(topLeft.X + size.X/2, bottomRight.Y + 2)
542 self.Drawings.Distance.Size = 11
543 self.Drawings.Distance.Center = true
544 self.Drawings.Distance.Visible = true
545 self.Drawings.Distance.Color = Color3.new(1,1,1)
546 self.Drawings.Distance.Outline = true
547 else
548 self.Drawings.Distance.Visible = false
549 end
550
551 -- HealthBar
552 if ConfigManager:Get("BotHealthESP") then
553 local pct = math.clamp(hum.Health / hum.MaxHealth, 0, 1)
554 local barW = size.X
555 local barH = 3
556 local barPos = Vector2.new(topLeft.X, topLeft.Y - 8)
557
558 self.Drawings.HealthBarOutline.Size = Vector2.new(barW+2, barH+2)
559 self.Drawings.HealthBarOutline.Position = barPos - Vector2.new(1,1)
560 self.Drawings.HealthBarOutline.Visible = true
561 self.Drawings.HealthBarOutline.Color = Color3.new(0,0,0)
562 self.Drawings.HealthBarOutline.Filled = true
563
564 self.Drawings.HealthBar.Size = Vector2.new(barW * pct, barH)
565 self.Drawings.HealthBar.Position = barPos
566 self.Drawings.HealthBar.Visible = true
567 self.Drawings.HealthBar.Color = Color3.fromRGB(255*(1-pct), 255*pct, 0)
568 self.Drawings.HealthBar.Filled = true
569
570 self.Drawings.Health.Text = Utils:FormatNumber(hum.Health) .. " HP"
571 self.Drawings.Health.Position = Vector2.new(topLeft.X + size.X/2, topLeft.Y - 22)
572 self.Drawings.Health.Size = 10
573 self.Drawings.Health.Center = true
574 self.Drawings.Health.Visible = true
575 self.Drawings.Health.Color = Color3.fromRGB(255*(1-pct), 255*pct, 0)
576 self.Drawings.Health.Outline = true
577 else
578 self.Drawings.Health.Visible = false
579 self.Drawings.HealthBar.Visible = false
580 self.Drawings.HealthBarOutline.Visible = false
581 end
582
583 -- Tracer
584 if ConfigManager:Get("BotTracers") then
585 local cam = GetCamera()
586 if cam then
587 self.Drawings.Tracer.From = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y)
588 self.Drawings.Tracer.To = Vector2.new(topLeft.X + size.X/2, topLeft.Y + size.Y/2)
589 self.Drawings.Tracer.Visible = true
590 self.Drawings.Tracer.Color = color
591 self.Drawings.Tracer.Thickness = 1
592 end
593 else
594 self.Drawings.Tracer.Visible = false
595 end
596 end)
597 if not ok then self:Hide() end
598end
599
600function BotESP:Hide()
601 for _, d in pairs(self.Drawings) do d.Visible = false end
602end
603
604function BotESP:Destroy()
605 self:Hide()
606 for _, d in pairs(self.Drawings) do DrawingPool:Destroy(d) end
607end
608
609-- ─── LOOT / CONTAINER ESP ──────────────────────────────────────
610local LootESP = {}
611LootESP.__index = LootESP
612
613function LootESP.new(model)
614 local self = setmetatable({}, LootESP)
615 self.Model = model
616 self.Drawings = {
617 Name = DrawingPool:Create("Text"),
618 Distance = DrawingPool:Create("Text"),
619 Tracer = DrawingPool:Create("Line"),
620 }
621 return self
622end
623
624function LootESP:Update()
625 local ok, err = pcall(function()
626 if not self.Model or not self.Model.Parent then self:Hide(); return end
627
628 local primary = self.Model:IsA("Model") and (self.Model.PrimaryPart or self.Model:FindFirstChildWhichIsA("BasePart")) or self.Model
629 if not primary then primary = self.Model:FindFirstChildWhichIsA("BasePart") end
630 if not primary then self:Hide(); return end
631
632 local pos, onScreen = Utils:WorldToScreen(primary.Position)
633 if not onScreen then self:Hide(); return end
634
635 local dist = Utils:GetDistance(primary.Position)
636 local color = Utils:ColorFromConfig("ESPLootColor")
637
638 if ConfigManager:Get("LootNameESP") then
639 self.Drawings.Name.Text = self.Model.Name
640 self.Drawings.Name.Position = pos
641 self.Drawings.Name.Size = 12
642 self.Drawings.Name.Center = true
643 self.Drawings.Name.Visible = true
644 self.Drawings.Name.Color = color
645 self.Drawings.Name.Outline = true
646 else
647 self.Drawings.Name.Visible = false
648 end
649
650 if ConfigManager:Get("LootDistanceESP") then
651 self.Drawings.Distance.Text = Utils:FormatNumber(dist) .. "m"
652 self.Drawings.Distance.Position = pos + Vector2.new(0, 14)
653 self.Drawings.Distance.Size = 10
654 self.Drawings.Distance.Center = true
655 self.Drawings.Distance.Visible = true
656 self.Drawings.Distance.Color = Color3.new(1,1,1)
657 self.Drawings.Distance.Outline = true
658 else
659 self.Drawings.Distance.Visible = false
660 end
661
662 if ConfigManager:Get("LootTracers") then
663 local cam = GetCamera()
664 if cam then
665 self.Drawings.Tracer.From = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y)
666 self.Drawings.Tracer.To = pos
667 self.Drawings.Tracer.Visible = true
668 self.Drawings.Tracer.Color = color
669 self.Drawings.Tracer.Thickness = 1
670 end
671 else
672 self.Drawings.Tracer.Visible = false
673 end
674 end)
675 if not ok then self:Hide() end
676end
677
678function LootESP:Hide()
679 for _, d in pairs(self.Drawings) do d.Visible = false end
680end
681
682function LootESP:Destroy()
683 self:Hide()
684 for _, d in pairs(self.Drawings) do DrawingPool:Destroy(d) end
685end
686
687-- ─── SIMPLE OBJECT ESP (Extractions, Airdrops, Bodies) ─────────
688local SimpleESP = {}
689SimpleESP.__index = SimpleESP
690
691function SimpleESP.new(model, displayName, colorKey)
692 local self = setmetatable({}, SimpleESP)
693 self.Model = model
694 self.DisplayName = displayName
695 self.ColorKey = colorKey
696 self.Drawings = {
697 Name = DrawingPool:Create("Text"),
698 Distance = DrawingPool:Create("Text"),
699 Tracer = DrawingPool:Create("Line"),
700 }
701 return self
702end
703
704function SimpleESP:Update()
705 local ok, err = pcall(function()
706 if not self.Model or not self.Model.Parent then self:Hide(); return end
707
708 local primary = self.Model:IsA("Model") and (self.Model.PrimaryPart or self.Model:FindFirstChildWhichIsA("BasePart")) or self.Model
709 if not primary then primary = self.Model:FindFirstChildWhichIsA("BasePart") end
710 if not primary then self:Hide(); return end
711
712 local pos, onScreen = Utils:WorldToScreen(primary.Position)
713 if not onScreen then self:Hide(); return end
714
715 local dist = Utils:GetDistance(primary.Position)
716 local color = Utils:ColorFromConfig(self.ColorKey)
717
718 self.Drawings.Name.Text = self.DisplayName
719 self.Drawings.Name.Position = pos
720 self.Drawings.Name.Size = 12
721 self.Drawings.Name.Center = true
722 self.Drawings.Name.Visible = true
723 self.Drawings.Name.Color = color
724 self.Drawings.Name.Outline = true
725
726 self.Drawings.Distance.Text = Utils:FormatNumber(dist) .. "m"
727 self.Drawings.Distance.Position = pos + Vector2.new(0, 14)
728 self.Drawings.Distance.Size = 10
729 self.Drawings.Distance.Center = true
730 self.Drawings.Distance.Visible = true
731 self.Drawings.Distance.Color = Color3.new(1,1,1)
732 self.Drawings.Distance.Outline = true
733
734 local cam = GetCamera()
735 if cam then
736 self.Drawings.Tracer.From = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y)
737 self.Drawings.Tracer.To = pos
738 self.Drawings.Tracer.Visible = true
739 self.Drawings.Tracer.Color = color
740 self.Drawings.Tracer.Thickness = 1
741 end
742 end)
743 if not ok then self:Hide() end
744end
745
746function SimpleESP:Hide()
747 for _, d in pairs(self.Drawings) do d.Visible = false end
748end
749
750function SimpleESP:Destroy()
751 self:Hide()
752 for _, d in pairs(self.Drawings) do DrawingPool:Destroy(d) end
753end
754
755-- ─── ESP MANAGER LOGIC ─────────────────────────────────────────
756function ESPManager:Init()
757 -- Player Tracking
758 for _, plr in pairs(Players:GetPlayers()) do
759 if plr ~= LocalPlayer then
760 self.PlayerObjects[plr] = PlayerESP.new(plr)
761 end
762 end
763 Players.PlayerAdded:Connect(function(plr)
764 if plr ~= LocalPlayer then self.PlayerObjects[plr] = PlayerESP.new(plr) end
765 end)
766 Players.PlayerRemoving:Connect(function(plr)
767 if self.PlayerObjects[plr] then
768 self.PlayerObjects[plr]:Destroy()
769 self.PlayerObjects[plr] = nil
770 end
771 end)
772
773 -- Bot Tracking
774 for _, bot in pairs(BOT_FOLDER:GetChildren()) do
775 if bot:IsA("Model") then
776 self.BotObjects[bot] = BotESP.new(bot)
777 end
778 end
779 BOT_FOLDER.ChildAdded:Connect(function(bot)
780 if bot:IsA("Model") then self.BotObjects[bot] = BotESP.new(bot) end
781 end)
782 BOT_FOLDER.ChildRemoved:Connect(function(bot)
783 if self.BotObjects[bot] then
784 self.BotObjects[bot]:Destroy()
785 self.BotObjects[bot] = nil
786 end
787 end)
788
789 -- Loot Tracking
790 for _, item in pairs(CONTAINER_FOLDER:GetChildren()) do
791 self.LootObjects[item] = LootESP.new(item)
792 end
793 CONTAINER_FOLDER.ChildAdded:Connect(function(item)
794 self.LootObjects[item] = LootESP.new(item)
795 end)
796 CONTAINER_FOLDER.ChildRemoved:Connect(function(item)
797 if self.LootObjects[item] then
798 self.LootObjects[item]:Destroy()
799 self.LootObjects[item] = nil
800 end
801 end)
802
803 -- Main Loop
804 ConnectionManager:Add("ESPMainLoop", RunService.RenderStepped:Connect(function()
805 self:Update()
806 end))
807end
808
809function ESPManager:Update()
810 -- Players
811 if ConfigManager:Get("PlayerESP") then
812 for plr, esp in pairs(self.PlayerObjects) do
813 esp:Update()
814 end
815 else
816 for _, esp in pairs(self.PlayerObjects) do esp:Hide() end
817 end
818
819 -- Bots
820 if ConfigManager:Get("BotESP") then
821 for bot, esp in pairs(self.BotObjects) do
822 if bot.Parent and bot:FindFirstChildOfClass("Humanoid") and bot:FindFirstChildOfClass("Humanoid").Health > 0 then
823 esp:Update()
824 else
825 esp:Hide()
826 end
827 end
828 else
829 for _, esp in pairs(self.BotObjects) do esp:Hide() end
830 end
831
832 -- Loot
833 if ConfigManager:Get("LootESP") then
834 for item, esp in pairs(self.LootObjects) do
835 if item.Parent then
836 esp:Update()
837 else
838 esp:Hide()
839 end
840 end
841 else
842 for _, esp in pairs(self.LootObjects) do esp:Hide() end
843 end
844
845 -- Extractions
846 if ConfigManager:Get("ExtractionESP") then
847 for _, extract in pairs(EXTRACTION_FOLDER:GetChildren()) do
848 if not self.OtherObjects[extract] then
849 local name = ExtractionNames[extract.Name] or extract.Name
850 self.OtherObjects[extract] = SimpleESP.new(extract, "[EXTRACT] " .. name, "ESPExtractionColor")
851 end
852 self.OtherObjects[extract]:Update()
853 end
854 end
855
856 -- Airdrops
857 if ConfigManager:Get("AirdropESP") then
858 for _, drop in pairs(AIRDROP_FOLDER:GetChildren()) do
859 if not self.OtherObjects[drop] then
860 self.OtherObjects[drop] = SimpleESP.new(drop, "[AIRDROP] " .. drop.Name, "ESPAirdropColor")
861 end
862 self.OtherObjects[drop]:Update()
863 end
864 end
865
866 -- Dead Bodies
867 if ConfigManager:Get("DeadBodyESP") then
868 for _, body in pairs(DEAD_BODIES_FOLDER:GetChildren()) do
869 if not self.OtherObjects[body] then
870 self.OtherObjects[body] = SimpleESP.new(body, "[BODY] " .. body.Name, "ESPDeadBodyColor")
871 end
872 self.OtherObjects[body]:Update()
873 end
874 end
875
876 -- Cleanup destroyed other objects
877 for model, esp in pairs(self.OtherObjects) do
878 if not model.Parent then
879 esp:Destroy()
880 self.OtherObjects[model] = nil
881 elseif not (ConfigManager:Get("ExtractionESP") and model.Parent == EXTRACTION_FOLDER)
882 and not (ConfigManager:Get("AirdropESP") and model.Parent == AIRDROP_FOLDER)
883 and not (ConfigManager:Get("DeadBodyESP") and model.Parent == DEAD_BODIES_FOLDER) then
884 esp:Hide()
885 end
886 end
887end
888
889function ESPManager:ClearAll()
890 for _, esp in pairs(self.PlayerObjects) do esp:Hide() end
891 for _, esp in pairs(self.BotObjects) do esp:Hide() end
892 for _, esp in pairs(self.LootObjects) do esp:Hide() end
893 for _, esp in pairs(self.OtherObjects) do esp:Hide() end
894end
895
896-- ═══════════════════════════════════════════════════════════════
897-- AIMBOT
898-- ═══════════════════════════════════════════════════════════════
899local Aimbot = {}
900Aimbot.Locked = false
901Aimbot.Target = nil
902Aimbot.FOVCircle = nil
903
904function Aimbot:Init()
905 self.FOVCircle = DrawingPool:Create("Circle")
906 self.FOVCircle.Filled = false
907 self.FOVCircle.Thickness = 1.5
908 self.FOVCircle.NumSides = 64
909 self.FOVCircle.Color = Color3.new(1, 1, 1)
910
911 ConnectionManager:Add("AimbotLoop", RunService.RenderStepped:Connect(function()
912 self:Update()
913 end))
914
915 UserInputService.InputBegan:Connect(function(input, gp)
916 if gp then return end
917 if input.UserInputType == Enum.UserInputType.MouseButton2 then
918 self.Locked = true
919 end
920 end)
921
922 UserInputService.InputEnded:Connect(function(input)
923 if input.UserInputType == Enum.UserInputType.MouseButton2 then
924 self.Locked = false
925 self.Target = nil
926 end
927 end)
928end
929
930function Aimbot:GetClosestHead()
931 local closestHead = nil
932 local closestDist = math.huge
933 local cam = GetCamera()
934 if not cam then return nil end
935
936 local center = Vector2.new(cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2)
937 local fov = ConfigManager:Get("AimbotFOV")
938 local maxDist = ConfigManager:Get("AimbotMaxDistance")
939 local visCheck = ConfigManager:Get("AimbotVisibilityCheck")
940 local targetBots = ConfigManager:Get("AimbotTargetBots")
941
942 local myChar = LocalPlayer.Character
943 local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart")
944
945 -- Players
946 for _, plr in pairs(Players:GetPlayers()) do
947 if plr == LocalPlayer then continue end
948 local char = Utils:GetCharacter(plr)
949 if not char then continue end
950 local head = char:FindFirstChild("Head")
951 local hum = char:FindFirstChildOfClass("Humanoid")
952 if not head or not hum or hum.Health <= 0 then continue end
953
954 local dist3D = myRoot and (head.Position - myRoot.Position).Magnitude or 0
955 if dist3D > maxDist then continue end
956
957 local pos, onScreen = Utils:WorldToScreen(head.Position)
958 if not onScreen then continue end
959
960 local dist2D = (pos - center).Magnitude
961 if dist2D > fov then continue end
962
963 if visCheck then
964 local rp = RaycastParams.new()
965 rp.FilterType = Enum.RaycastFilterType.Blacklist
966 rp.FilterDescendantsInstances = {cam, myChar}
967 local res = Workspace:Raycast(cam.CFrame.Position, head.Position - cam.CFrame.Position, rp)
968 if res and not res.Instance:IsDescendantOf(char) then continue end
969 end
970
971 if dist2D < closestDist then
972 closestDist = dist2D
973 closestHead = head
974 end
975 end
976
977 -- Bots
978 if targetBots then
979 for _, bot in pairs(BOT_FOLDER:GetChildren()) do
980 if not bot:IsA("Model") then continue end
981 local head = bot:FindFirstChild("Head")
982 local hum = bot:FindFirstChildOfClass("Humanoid")
983 if not head or not hum or hum.Health <= 0 then continue end
984
985 local dist3D = myRoot and (head.Position - myRoot.Position).Magnitude or 0
986 if dist3D > maxDist then continue end
987
988 local pos, onScreen = Utils:WorldToScreen(head.Position)
989 if not onScreen then continue end
990
991 local dist2D = (pos - center).Magnitude
992 if dist2D > fov then continue end
993
994 if visCheck then
995 local rp = RaycastParams.new()
996 rp.FilterType = Enum.RaycastFilterType.Blacklist
997 rp.FilterDescendantsInstances = {cam, myChar}
998 local res = Workspace:Raycast(cam.CFrame.Position, head.Position - cam.CFrame.Position, rp)
999 if res and not res.Instance:IsDescendantOf(bot) then continue end
1000 end
1001
1002 if dist2D < closestDist then
1003 closestDist = dist2D
1004 closestHead = head
1005 end
1006 end
1007 end
1008
1009 return closestHead
1010end
1011
1012function Aimbot:Update()
1013 local cam = GetCamera()
1014 if not cam then return end
1015
1016 if ConfigManager:Get("AimbotShowFOV") and ConfigManager:Get("AimbotEnabled") then
1017 self.FOVCircle.Visible = true
1018 self.FOVCircle.Radius = ConfigManager:Get("AimbotFOV")
1019 self.FOVCircle.Position = Vector2.new(cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2)
1020 self.FOVCircle.Color = self.Locked and Color3.fromRGB(0, 255, 0) or Color3.new(1, 1, 1)
1021 else
1022 self.FOVCircle.Visible = false
1023 end
1024
1025 if not ConfigManager:Get("AimbotEnabled") or not self.Locked then return end
1026
1027 local target = self.Target or self:GetClosestHead()
1028 if target and target.Parent then
1029 self.Target = target
1030 local smoothness = ConfigManager:Get("AimbotSmoothness")
1031 local alpha = math.clamp(1.1 - smoothness, 0.02, 1)
1032 cam.CFrame = cam.CFrame:Lerp(CFrame.new(cam.CFrame.Position, target.Position), alpha)
1033 else
1034 self.Target = nil
1035 end
1036end
1037
1038-- ═══════════════════════════════════════════════════════════════
1039-- WORLD MODULE
1040-- ═══════════════════════════════════════════════════════════════
1041local WorldModule = {}
1042
1043function WorldModule:Init()
1044 self.Original = {
1045 Brightness = Lighting.Brightness,
1046 ClockTime = Lighting.ClockTime,
1047 FogStart = Lighting.FogStart,
1048 FogEnd = Lighting.FogEnd,
1049 FogColor = Lighting.FogColor,
1050 GlobalShadows = Lighting.GlobalShadows,
1051 OutdoorAmbient = Lighting.OutdoorAmbient,
1052 Ambient = Lighting.Ambient,
1053 }
1054
1055 ConnectionManager:Add("WorldLoop", RunService.Heartbeat:Connect(function()
1056 if ConfigManager:Get("FullBright") then
1057 Lighting.Brightness = 2
1058 Lighting.GlobalShadows = false
1059 Lighting.OutdoorAmbient = Color3.fromRGB(128, 128, 128)
1060 Lighting.Ambient = Color3.fromRGB(128, 128, 128)
1061 elseif not ConfigManager:Get("TimeChanger") then
1062 Lighting.Brightness = self.Original.Brightness
1063 Lighting.GlobalShadows = self.Original.GlobalShadows
1064 Lighting.OutdoorAmbient = self.Original.OutdoorAmbient
1065 Lighting.Ambient = self.Original.Ambient
1066 end
1067
1068 if ConfigManager:Get("TimeChanger") then
1069 Lighting.ClockTime = ConfigManager:Get("CustomTime")
1070 elseif not ConfigManager:Get("FullBright") then
1071 Lighting.ClockTime = self.Original.ClockTime
1072 end
1073
1074 if ConfigManager:Get("RemoveFog") then
1075 Lighting.FogStart = 0
1076 Lighting.FogEnd = 100000
1077 Lighting.FogColor = Color3.fromRGB(255, 255, 255)
1078 elseif not ConfigManager:Get("FullBright") then
1079 Lighting.FogStart = self.Original.FogStart
1080 Lighting.FogEnd = self.Original.FogEnd
1081 Lighting.FogColor = self.Original.FogColor
1082 end
1083
1084 if ConfigManager:Get("WeatherToggle") and NATURE_FOLDER then
1085 for _, obj in pairs(NATURE_FOLDER:GetDescendants()) do
1086 if obj:IsA("ParticleEmitter") or obj:IsA("Beam") then obj.Enabled = false end
1087 end
1088 end
1089
1090 if ConfigManager:Get("ShowInteractive") then
1091 for _, container in pairs(CONTAINER_FOLDER:GetChildren()) do
1092 if container:IsA("Model") and not container:FindFirstChild("DS_Highlight") then
1093 local hl = Instance.new("Highlight")
1094 hl.Name = "DS_Highlight"
1095 hl.FillColor = Color3.fromRGB(255, 255, 0)
1096 hl.OutlineColor = Color3.fromRGB(255, 255, 0)
1097 hl.FillTransparency = 0.8
1098 hl.OutlineTransparency = 0
1099 hl.Parent = container
1100 end
1101 end
1102 else
1103 for _, container in pairs(CONTAINER_FOLDER:GetChildren()) do
1104 local hl = container:FindFirstChild("DS_Highlight")
1105 if hl then hl:Destroy() end
1106 end
1107 end
1108 end))
1109end
1110
1111-- ═══════════════════════════════════════════════════════════════
1112-- MISC MODULE
1113-- ═══════════════════════════════════════════════════════════════
1114local MiscModule = {}
1115
1116function MiscModule:Init()
1117 ConnectionManager:Add("FPSBoost", RunService.Heartbeat:Connect(function()
1118 if ConfigManager:Get("FPSBoost") then
1119 settings().Rendering.QualityLevel = 1
1120 for _, effect in pairs(Lighting:GetChildren()) do
1121 if effect:IsA("PostEffect") then effect.Enabled = false end
1122 end
1123 end
1124 end))
1125end
1126
1127-- ═══════════════════════════════════════════════════════════════
1128-- RAYFIELD UI
1129-- ═══════════════════════════════════════════════════════════════
1130local RayfieldUI = {}
1131
1132function RayfieldUI:Init()
1133 local ok, RayfieldLib = pcall(function()
1134 return loadstring(game:HttpGet("https://sirius.menu/rayfield"))()
1135 end)
1136 if not ok or not RayfieldLib then warn("[XCMEN] Rayfield failed"); return end
1137
1138 self.Library = RayfieldLib
1139
1140 local Window = RayfieldLib:CreateWindow({
1141 Name = "XCMEN HUB - DesertStorm",
1142 LoadingTitle = "XCMEN HUB",
1143 LoadingSubtitle = "DesertStorm [EXTRACTION]",
1144 ConfigurationSaving = { Enabled = false },
1145 Discord = { Enabled = false },
1146 KeySystem = false,
1147 })
1148
1149 self.Window = Window
1150 self:CreateCombatTab()
1151 self:CreateESPTab()
1152 self:CreateNPCTab()
1153 self:CreateContainersTab()
1154 self:CreateWorldTab()
1155 self:CreateMiscTab()
1156 self:CreateSettingsTab()
1157
1158 if ConfigManager:Get("Notifications") then
1159 RayfieldLib:Notify({
1160 Title = "XCMEN HUB",
1161 Content = "DesertStorm loaded! Press " .. ConfigManager:Get("GUIBind") .. " to toggle.",
1162 Duration = 5,
1163 Image = 4483362458,
1164 })
1165 end
1166end
1167
1168function RayfieldUI:CreateCombatTab()
1169 local Tab = self.Window:CreateTab("Combat", 4483362458)
1170
1171 Tab:CreateSection("Aimbot (Hold RMB)")
1172
1173 Tab:CreateToggle({
1174 Name = "Enable Aimbot",
1175 CurrentValue = ConfigManager:Get("AimbotEnabled"),
1176 Flag = "AimbotEnabled",
1177 Callback = function(v) ConfigManager:Set("AimbotEnabled", v) end,
1178 })
1179
1180 Tab:CreateSlider({
1181 Name = "Smoothness (0.1 = Strong / 1 = Weak)",
1182 Range = {0.1, 1}, Increment = 0.01,
1183 CurrentValue = ConfigManager:Get("AimbotSmoothness"),
1184 Flag = "AimbotSmoothness",
1185 Callback = function(v) ConfigManager:Set("AimbotSmoothness", v) end,
1186 })
1187
1188 Tab:CreateSlider({
1189 Name = "FOV Radius", Range = {10, 500}, Increment = 5, Suffix = "px",
1190 CurrentValue = ConfigManager:Get("AimbotFOV"),
1191 Flag = "AimbotFOV",
1192 Callback = function(v) ConfigManager:Set("AimbotFOV", v) end,
1193 })
1194
1195 Tab:CreateSlider({
1196 Name = "Max Distance", Range = {50, 3000}, Increment = 50, Suffix = "m",
1197 CurrentValue = ConfigManager:Get("AimbotMaxDistance"),
1198 Flag = "AimbotMaxDist",
1199 Callback = function(v) ConfigManager:Set("AimbotMaxDistance", v) end,
1200 })
1201
1202 Tab:CreateToggle({
1203 Name = "Target Bots too",
1204 CurrentValue = ConfigManager:Get("AimbotTargetBots"),
1205 Flag = "AimbotTargetBots",
1206 Callback = function(v) ConfigManager:Set("AimbotTargetBots", v) end,
1207 })
1208
1209 Tab:CreateToggle({
1210 Name = "Visibility Check",
1211 CurrentValue = ConfigManager:Get("AimbotVisibilityCheck"),
1212 Flag = "AimbotVisCheck",
1213 Callback = function(v) ConfigManager:Set("AimbotVisibilityCheck", v) end,
1214 })
1215
1216 Tab:CreateToggle({
1217 Name = "Show FOV Circle",
1218 CurrentValue = ConfigManager:Get("AimbotShowFOV"),
1219 Flag = "AimbotShowFOV",
1220 Callback = function(v) ConfigManager:Set("AimbotShowFOV", v) end,
1221 })
1222end
1223
1224function RayfieldUI:CreateESPTab()
1225 local Tab = self.Window:CreateTab("ESP", 4483362458)
1226
1227 Tab:CreateSection("Player ESP")
1228
1229 Tab:CreateToggle({
1230 Name = "Enable Player ESP", CurrentValue = ConfigManager:Get("PlayerESP"), Flag = "PlayerESP",
1231 Callback = function(v) ConfigManager:Set("PlayerESP", v) end,
1232 })
1233
1234 Tab:CreateToggle({
1235 Name = "Box ESP", CurrentValue = ConfigManager:Get("BoxESP"), Flag = "BoxESP",
1236 Callback = function(v) ConfigManager:Set("BoxESP", v) end,
1237 })
1238
1239 Tab:CreateToggle({
1240 Name = "Name ESP", CurrentValue = ConfigManager:Get("NameESP"), Flag = "NameESP",
1241 Callback = function(v) ConfigManager:Set("NameESP", v) end,
1242 })
1243
1244 Tab:CreateToggle({
1245 Name = "Distance ESP", CurrentValue = ConfigManager:Get("DistanceESP"), Flag = "DistanceESP",
1246 Callback = function(v) ConfigManager:Set("DistanceESP", v) end,
1247 })
1248
1249 Tab:CreateToggle({
1250 Name = "Health ESP", CurrentValue = ConfigManager:Get("HealthESP"), Flag = "HealthESP",
1251 Callback = function(v) ConfigManager:Set("HealthESP", v) end,
1252 })
1253
1254 Tab:CreateToggle({
1255 Name = "Tracers", CurrentValue = ConfigManager:Get("Tracers"), Flag = "Tracers",
1256 Callback = function(v) ConfigManager:Set("Tracers", v) end,
1257 })
1258
1259 Tab:CreateToggle({
1260 Name = "Chams", CurrentValue = ConfigManager:Get("Chams"), Flag = "Chams",
1261 Callback = function(v) ConfigManager:Set("Chams", v) end,
1262 })
1263
1264 Tab:CreateSection("Colors")
1265
1266 Tab:CreateColorPicker({
1267 Name = "Enemy Color", Color = Utils:ColorFromConfig("ESPEnemyColor"), Flag = "EnemyColor",
1268 Callback = function(v)
1269 ConfigManager:Set("ESPEnemyColor", {R = math.floor(v.R*255), G = math.floor(v.G*255), B = math.floor(v.B*255)})
1270 end,
1271 })
1272end
1273
1274function RayfieldUI:CreateNPCTab()
1275 local Tab = self.Window:CreateTab("NPC", 4483362458)
1276
1277 Tab:CreateSection("Bot / NPC ESP")
1278
1279 Tab:CreateToggle({
1280 Name = "Enable Bot ESP", CurrentValue = ConfigManager:Get("BotESP"), Flag = "BotESP",
1281 Callback = function(v) ConfigManager:Set("BotESP", v) end,
1282 })
1283
1284 Tab:CreateToggle({
1285 Name = "Box ESP", CurrentValue = ConfigManager:Get("BotBoxESP"), Flag = "BotBoxESP",
1286 Callback = function(v) ConfigManager:Set("BotBoxESP", v) end,
1287 })
1288
1289 Tab:CreateToggle({
1290 Name = "Name ESP", CurrentValue = ConfigManager:Get("BotNameESP"), Flag = "BotNameESP",
1291 Callback = function(v) ConfigManager:Set("BotNameESP", v) end,
1292 })
1293
1294 Tab:CreateToggle({
1295 Name = "Distance ESP", CurrentValue = ConfigManager:Get("BotDistanceESP"), Flag = "BotDistanceESP",
1296 Callback = function(v) ConfigManager:Set("BotDistanceESP", v) end,
1297 })
1298
1299 Tab:CreateToggle({
1300 Name = "Health ESP", CurrentValue = ConfigManager:Get("BotHealthESP"), Flag = "BotHealthESP",
1301 Callback = function(v) ConfigManager:Set("BotHealthESP", v) end,
1302 })
1303
1304 Tab:CreateToggle({
1305 Name = "Tracers", CurrentValue = ConfigManager:Get("BotTracers"), Flag = "BotTracers",
1306 Callback = function(v) ConfigManager:Set("BotTracers", v) end,
1307 })
1308
1309 Tab:CreateSection("Colors")
1310
1311 Tab:CreateColorPicker({
1312 Name = "Bot Color", Color = Utils:ColorFromConfig("ESPBotColor"), Flag = "BotColor",
1313 Callback = function(v)
1314 ConfigManager:Set("ESPBotColor", {R = math.floor(v.R*255), G = math.floor(v.G*255), B = math.floor(v.B*255)})
1315 end,
1316 })
1317end
1318
1319function RayfieldUI:CreateContainersTab()
1320 local Tab = self.Window:CreateTab("Containers", 4483362458)
1321
1322 Tab:CreateSection("Loot / Container ESP")
1323
1324 Tab:CreateToggle({
1325 Name = "Enable Loot ESP", CurrentValue = ConfigManager:Get("LootESP"), Flag = "LootESP",
1326 Callback = function(v) ConfigManager:Set("LootESP", v) end,
1327 })
1328
1329 Tab:CreateToggle({
1330 Name = "Name ESP", CurrentValue = ConfigManager:Get("LootNameESP"), Flag = "LootNameESP",
1331 Callback = function(v) ConfigManager:Set("LootNameESP", v) end,
1332 })
1333
1334 Tab:CreateToggle({
1335 Name = "Distance ESP", CurrentValue = ConfigManager:Get("LootDistanceESP"), Flag = "LootDistanceESP",
1336 Callback = function(v) ConfigManager:Set("LootDistanceESP", v) end,
1337 })
1338
1339 Tab:CreateToggle({
1340 Name = "Tracers", CurrentValue = ConfigManager:Get("LootTracers"), Flag = "LootTracers",
1341 Callback = function(v) ConfigManager:Set("LootTracers", v) end,
1342 })
1343
1344 Tab:CreateSection("Object ESP")
1345
1346 Tab:CreateToggle({
1347 Name = "Extraction ESP", CurrentValue = ConfigManager:Get("ExtractionESP"), Flag = "ExtractionESP",
1348 Callback = function(v) ConfigManager:Set("ExtractionESP", v) end,
1349 })
1350
1351 Tab:CreateToggle({
1352 Name = "Airdrop ESP", CurrentValue = ConfigManager:Get("AirdropESP"), Flag = "AirdropESP",
1353 Callback = function(v) ConfigManager:Set("AirdropESP", v) end,
1354 })
1355
1356 Tab:CreateToggle({
1357 Name = "Dead Body ESP", CurrentValue = ConfigManager:Get("DeadBodyESP"), Flag = "DeadBodyESP",
1358 Callback = function(v) ConfigManager:Set("DeadBodyESP", v) end,
1359 })
1360
1361 Tab:CreateSection("Colors")
1362
1363 Tab:CreateColorPicker({
1364 Name = "Loot Color", Color = Utils:ColorFromConfig("ESPLootColor"), Flag = "LootColor",
1365 Callback = function(v)
1366 ConfigManager:Set("ESPLootColor", {R = math.floor(v.R*255), G = math.floor(v.G*255), B = math.floor(v.B*255)})
1367 end,
1368 })
1369
1370 Tab:CreateColorPicker({
1371 Name = "Extraction Color", Color = Utils:ColorFromConfig("ESPExtractionColor"), Flag = "ExtractColor",
1372 Callback = function(v)
1373 ConfigManager:Set("ESPExtractionColor", {R = math.floor(v.R*255), G = math.floor(v.G*255), B = math.floor(v.B*255)})
1374 end,
1375 })
1376
1377 Tab:CreateColorPicker({
1378 Name = "Airdrop Color", Color = Utils:ColorFromConfig("ESPAirdropColor"), Flag = "AirdropColor",
1379 Callback = function(v)
1380 ConfigManager:Set("ESPAirdropColor", {R = math.floor(v.R*255), G = math.floor(v.G*255), B = math.floor(v.B*255)})
1381 end,
1382 })
1383end
1384
1385function RayfieldUI:CreateWorldTab()
1386 local Tab = self.Window:CreateTab("World", 4483362458)
1387
1388 Tab:CreateSection("Lighting")
1389
1390 Tab:CreateToggle({
1391 Name = "FullBright", CurrentValue = ConfigManager:Get("FullBright"), Flag = "FullBright",
1392 Callback = function(v) ConfigManager:Set("FullBright", v) end,
1393 })
1394
1395 Tab:CreateToggle({
1396 Name = "Time Changer", CurrentValue = ConfigManager:Get("TimeChanger"), Flag = "TimeChanger",
1397 Callback = function(v) ConfigManager:Set("TimeChanger", v) end,
1398 })
1399
1400 Tab:CreateSlider({
1401 Name = "Custom Time", Range = {0, 24}, Increment = 0.5, Suffix = "hr",
1402 CurrentValue = ConfigManager:Get("CustomTime"), Flag = "CustomTime",
1403 Callback = function(v) ConfigManager:Set("CustomTime", v) end,
1404 })
1405
1406 Tab:CreateToggle({
1407 Name = "Remove Fog", CurrentValue = ConfigManager:Get("RemoveFog"), Flag = "RemoveFog",
1408 Callback = function(v) ConfigManager:Set("RemoveFog", v) end,
1409 })
1410
1411 Tab:CreateToggle({
1412 Name = "Weather Toggle", CurrentValue = ConfigManager:Get("WeatherToggle"), Flag = "WeatherToggle",
1413 Callback = function(v) ConfigManager:Set("WeatherToggle", v) end,
1414 })
1415
1416 Tab:CreateToggle({
1417 Name = "Show Interactive Objects", CurrentValue = ConfigManager:Get("ShowInteractive"), Flag = "ShowInteractive",
1418 Callback = function(v) ConfigManager:Set("ShowInteractive", v) end,
1419 })
1420end
1421
1422function RayfieldUI:CreateMiscTab()
1423 local Tab = self.Window:CreateTab("Misc", 4483362458)
1424
1425 Tab:CreateSection("Performance")
1426
1427 Tab:CreateToggle({
1428 Name = "FPS Boost", CurrentValue = ConfigManager:Get("FPSBoost"), Flag = "FPSBoost",
1429 Callback = function(v) ConfigManager:Set("FPSBoost", v) end,
1430 })
1431
1432 Tab:CreateSection("Teleport (Tween)")
1433
1434 for _, extract in pairs(EXTRACTION_FOLDER:GetChildren()) do
1435 local name = ExtractionNames[extract.Name] or extract.Name
1436 Tab:CreateButton({
1437 Name = "TP: " .. name,
1438 Callback = function()
1439 pcall(function()
1440 if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
1441 local primary = extract:IsA("Model") and (extract.PrimaryPart or extract:FindFirstChildWhichIsA("BasePart")) or extract
1442 if primary then
1443 local root = LocalPlayer.Character.HumanoidRootPart
1444 TweenService:Create(root, TweenInfo.new(1.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
1445 CFrame = primary.CFrame + Vector3.new(0, 5, 0)
1446 }):Play()
1447 end
1448 end
1449 end)
1450 end,
1451 })
1452 end
1453
1454 Tab:CreateSection("Server")
1455
1456 Tab:CreateButton({
1457 Name = "Rejoin Server",
1458 Callback = function()
1459 pcall(function() TeleportService:Teleport(game.PlaceId, LocalPlayer) end)
1460 end,
1461 })
1462
1463 Tab:CreateButton({
1464 Name = "Server Hop",
1465 Callback = function()
1466 pcall(function()
1467 local servers = game.HttpService:JSONDecode(game:HttpGet("https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?sortOrder=Asc&limit=100"))
1468 for _, s in pairs(servers.data) do
1469 if s.playing < s.maxPlayers and s.id ~= game.JobId then
1470 TeleportService:TeleportToPlaceInstance(game.PlaceId, s.id, LocalPlayer)
1471 break
1472 end
1473 end
1474 end)
1475 end,
1476 })
1477
1478 Tab:CreateButton({
1479 Name = "Copy JobId", Callback = function() Utils:CopyToClipboard(game.JobId) end,
1480 })
1481
1482 Tab:CreateButton({
1483 Name = "Copy PlaceId", Callback = function() Utils:CopyToClipboard(tostring(game.PlaceId)) end,
1484 })
1485end
1486
1487function RayfieldUI:CreateSettingsTab()
1488 local Tab = self.Window:CreateTab("Settings", 4483362458)
1489
1490 Tab:CreateSection("Config")
1491
1492 Tab:CreateButton({
1493 Name = "Save Config",
1494 Callback = function()
1495 ConfigManager:Save()
1496 if ConfigManager:Get("Notifications") then
1497 self.Library:Notify({Title = "Saved", Content = "Config saved.", Duration = 3})
1498 end
1499 end,
1500 })
1501
1502 Tab:CreateButton({
1503 Name = "Load Config",
1504 Callback = function()
1505 ConfigManager:Load()
1506 if ConfigManager:Get("Notifications") then
1507 self.Library:Notify({Title = "Loaded", Content = "Config loaded.", Duration = 3})
1508 end
1509 end,
1510 })
1511
1512 Tab:CreateButton({
1513 Name = "Reset Config",
1514 Callback = function()
1515 ConfigManager:Reset()
1516 if ConfigManager:Get("Notifications") then
1517 self.Library:Notify({Title = "Reset", Content = "Defaults restored.", Duration = 3})
1518 end
1519 end,
1520 })
1521
1522 Tab:CreateToggle({
1523 Name = "Auto Save", CurrentValue = ConfigManager.AutoSaveEnabled, Flag = "AutoSave",
1524 Callback = function(v) ConfigManager.AutoSaveEnabled = v end,
1525 })
1526
1527 Tab:CreateSection("UI")
1528
1529 Tab:CreateDropdown({
1530 Name = "Theme", Options = {"Default", "Ocean", "Midnight", "Sentinel", "Synapse", "Serpent"},
1531 CurrentOption = ConfigManager:Get("Theme"), Flag = "Theme",
1532 Callback = function(v) ConfigManager:Set("Theme", v) end,
1533 })
1534
1535 Tab:CreateToggle({
1536 Name = "Notifications", CurrentValue = ConfigManager:Get("Notifications"), Flag = "Notifications",
1537 Callback = function(v) ConfigManager:Set("Notifications", v) end,
1538 })
1539
1540 Tab:CreateKeybind({
1541 Name = "GUI Toggle", CurrentKeybind = ConfigManager:Get("GUIBind"), HoldToInteract = false, Flag = "GUIBind",
1542 Callback = function(k) ConfigManager:Set("GUIBind", tostring(k)) end,
1543 })
1544
1545 Tab:CreateSection("Danger Zone")
1546
1547 Tab:CreateButton({
1548 Name = "Destroy GUI",
1549 Callback = function()
1550 ConnectionManager:Clear()
1551 ESPManager:ClearAll()
1552 self.Library:Destroy()
1553 end,
1554 })
1555end
1556
1557-- ═══════════════════════════════════════════════════════════════
1558-- BOOTSTRAP
1559-- ═══════════════════════════════════════════════════════════════
1560local function Bootstrap()
1561 ConfigManager:Init()
1562 ESPManager:Init()
1563 Aimbot:Init()
1564 WorldModule:Init()
1565 MiscModule:Init()
1566 RayfieldUI:Init()
1567 print("[XCMEN HUB] DesertStorm loaded!")
1568end
1569
1570local ok, err = pcall(Bootstrap)
1571if not ok then
1572 warn("[XCMEN HUB] Error: " .. tostring(err))
1573end