콘텐츠로 건너뛰기
작동 중

XCMEN HUB - DEFUSAL AIMBOT/ESP LEGIT

CLclarkdevlinorg0 조회수Universal2026년 7월 26일
공유
XCMEN HUB - DEFUSAL  AIMBOT/ESP LEGIT

스크립트 코드

Lua
--[[
    Defusal Suite | Rayfield UI | Hold RMB Aimbot
    Paste into executor while in-game.
--]]

-- ===================== [ SERVICES ] =====================
local Players           = game:GetService("Players")
local RunService        = game:GetService("RunService")
local Workspace         = game:GetService("Workspace")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService  = game:GetService("UserInputService")
local TweenService      = game:GetService("TweenService")
local CollectionService = game:GetService("CollectionService")
local Lighting          = game:GetService("Lighting")

local LocalPlayer = Players.LocalPlayer
local Camera      = Workspace.CurrentCamera

Workspace:GetPropertyChangedSignal("CurrentCamera"):Connect(function()
    Camera = Workspace.CurrentCamera
end)

-- ===================== [ GAME REFERENCES ] =====================
local GAME = {
    PlayersFolder = Workspace:WaitForChild("Players"),
    Values        = ReplicatedStorage:WaitForChild("Values"),
    Modules       = ReplicatedStorage:WaitForChild("Modules"),
    Events        = ReplicatedStorage:WaitForChild("Events"),
    Weapons       = ReplicatedStorage:WaitForChild("Weapons"),
    Map           = Workspace:WaitForChild("Map"),
}

-- ===================== [ CONFIGURATION ] =====================
local Config = {
    ESP = {
        Enabled          = true,
        TeamCheck        = true,
        MaxDistance      = 2000,
        ShowBox          = true,
        ShowTracer       = true,
        ShowName         = true,
        ShowHealth       = true,
        ShowDistance     = true,
        ShowWeapon       = true,
        ShowHeadDot      = true,
        HighlightColor   = Color3.fromRGB(255, 60, 60),
        VisibleColor     = Color3.fromRGB(60, 255, 60),
        TracerOrigin     = "Bottom",
        TextSize         = 13,
    },
    Combat = {
        NoRecoil  = false,
        NoFlash   = false,
        NoSmoke   = false,
    },
    Visuals = {
        DynamicCrosshair     = true,
        HideDefaultCrosshair = true,
        CrosshairSize        = 8,
        CrosshairColor       = Color3.fromRGB(255, 255, 255),
        HitMarker            = true,
        HeadshotMarker       = true,
        FullBright           = false,
        CameraFOV            = 90,
    },
    Audio = {
        FootstepIndicator = true,
        GunshotIndicator  = true,
        IndicatorSize     = 6,
        IndicatorColor    = Color3.fromRGB(255, 170, 0),
        MaxAudioDist      = 600,
    },
    Misc = {
        BombESP = true,
    },
    Aimbot = {
        Enabled         = false,
        Smoothness      = 0.08,
        FOV             = 150,
        MaxDistance     = 1000,
        TeamCheck       = true,
        VisibilityCheck = true,
        TargetPart      = "Head",
        ShowFOV         = true,
    }
}

-- ===================== [ RAYFIELD UI LOADER ] =====================
local Rayfield = nil
local loadOk, loadErr = pcall(function()
    Rayfield = loadstring(game:HttpGet("https://sirius.menu/rayfield"))()
end)

if not Rayfield then
    warn("[DefusalLib] Rayfield load failed: "..tostring(loadErr or "unknown")..". Using built-in fallback.")
    local fallbackGui = Instance.new("ScreenGui")
    pcall(function() fallbackGui.Parent = game:GetService("CoreGui") end)
    if not fallbackGui.Parent then fallbackGui.Parent = LocalPlayer:WaitForChild("PlayerGui") end

    local main = Instance.new("Frame", fallbackGui)
    main.Size = UDim2.new(0, 420, 0, 540)
    main.Position = UDim2.new(0.5, -210, 0.5, -270)
    main.BackgroundColor3 = Color3.fromRGB(30,30,30); main.BorderSizePixel = 0; main.Active = true; main.Draggable = true

    local title = Instance.new("TextLabel", main); title.Text = "Defusal Suite (Fallback)"; title.Size = UDim2.new(1,0,0,28)
    title.BackgroundColor3 = Color3.fromRGB(45,45,45); title.TextColor3 = Color3.new(1,1,1); title.Font = Enum.Font.SourceSansBold; title.TextSize = 18

    local tabBar = Instance.new("Frame", main); tabBar.Size = UDim2.new(0,100,1,-28); tabBar.Position = UDim2.new(0,0,0,28); tabBar.BackgroundColor3 = Color3.fromRGB(35,35,35)
    local content = Instance.new("Frame", main); content.Size = UDim2.new(1,-100,1,-28); content.Position = UDim2.new(0,100,0,28); content.BackgroundTransparency = 1

    Rayfield = { _tabs = {}, _content = content }
    function Rayfield:CreateWindow(cfg) return self end
    function Rayfield:CreateTab(name)
        local btn = Instance.new("TextButton", tabBar)
        btn.Size = UDim2.new(1,-4,0,26); btn.Position = UDim2.new(0,2,0,2 + #self._tabs*28)
        btn.Text = name; btn.TextColor3 = Color3.new(1,1,1); btn.BackgroundColor3 = Color3.fromRGB(55,55,55); btn.Font = Enum.Font.SourceSansBold; btn.TextSize = 14; btn.BorderSizePixel = 0
        local panel = Instance.new("ScrollingFrame", content)
        panel.Size = UDim2.new(1,0,1,0); panel.BackgroundTransparency = 1; panel.ScrollBarThickness = 4; panel.Visible = false
        panel.CanvasSize = UDim2.new(0,0,0,0)
        local list = Instance.new("UIListLayout", panel); list.Padding = UDim.new(0,5)
        list:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
            panel.CanvasSize = UDim2.new(0,0,0,list.AbsoluteContentSize.Y + 10)
        end)
        local tabObj = {
            _panel = panel,
            CreateSection = function(s, txt)
                local l = Instance.new("TextLabel", panel); l.Text = txt; l.Size = UDim2.new(1,-10,0,20); l.TextColor3 = Color3.fromRGB(200,200,200)
                l.Font = Enum.Font.SourceSansBold; l.TextSize = 15; l.BackgroundTransparency = 1
            end,
            CreateToggle = function(s, args)
                local b = Instance.new("TextButton", panel); b.Size = UDim2.new(1,-10,0,24); b.Text = args.Name .. ": OFF"
                b.BackgroundColor3 = Color3.fromRGB(55,55,55); b.TextColor3 = Color3.new(1,1,1); b.BorderSizePixel = 0
                local st = args.CurrentValue or false
                b.MouseButton1Click:Connect(function()
                    st = not st; b.Text = args.Name .. (st and ": ON" or ": OFF")
                    b.BackgroundColor3 = st and Color3.fromRGB(0,130,0) or Color3.fromRGB(55,55,55)
                    pcall(args.Callback, st)
                end)
                if st then b.Text = args.Name .. ": ON"; b.BackgroundColor3 = Color3.fromRGB(0,130,0) end
            end,
            CreateSlider = function(s, args)
                local f = Instance.new("Frame", panel); f.Size = UDim2.new(1,-10,0,42); f.BackgroundTransparency = 1
                local lbl = Instance.new("TextLabel", f); lbl.Size = UDim2.new(1,0,0,16); lbl.Text = args.Name .. ": " .. tostring(args.CurrentValue or args.Range[1]); lbl.TextColor3 = Color3.new(1,1,1); lbl.BackgroundTransparency = 1; lbl.TextSize = 14
                local track = Instance.new("Frame", f); track.Size = UDim2.new(1,0,0,10); track.Position = UDim2.new(0,0,0,18); track.BackgroundColor3 = Color3.fromRGB(40,40,40); track.BorderSizePixel = 0
                local fill = Instance.new("Frame", track); fill.Size = UDim2.new(0,0,1,0); fill.BackgroundColor3 = Color3.fromRGB(0,120,255); fill.BorderSizePixel = 0
                local min, max = args.Range[1], args.Range[2]
                local function update(inp)
                    local scale = math.clamp((inp.Position.X - track.AbsolutePosition.X)/track.AbsoluteSize.X, 0, 1)
                    local val = math.floor((min + scale*(max-min)) / (args.Increment or 1)) * (args.Increment or 1)
                    fill.Size = UDim2.new(scale,0,1,0)
                    lbl.Text = args.Name .. ": " .. val
                    pcall(args.Callback, val)
                end
                local dragging = false
                track.InputBegan:Connect(function(inp) if inp.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true; update(inp) end end)
                UserInputService.InputChanged:Connect(function(inp) if dragging and inp.UserInputType == Enum.UserInputType.MouseMovement then update(inp) end end)
                UserInputService.InputEnded:Connect(function(inp) if inp.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end)
            end,
            CreateDropdown = function(s, args)
                local b = Instance.new("TextButton", panel); b.Size = UDim2.new(1,-10,0,24); b.Text = args.Name .. ": " .. tostring(args.CurrentOption or args.Options[1])
                b.BackgroundColor3 = Color3.fromRGB(55,55,55); b.TextColor3 = Color3.new(1,1,1); b.BorderSizePixel = 0
                b.MouseButton1Click:Connect(function()
                    local idx = table.find(args.Options, args.CurrentOption) or 1
                    idx = idx % #args.Options + 1
                    args.CurrentOption = args.Options[idx]
                    b.Text = args.Name .. ": " .. tostring(args.CurrentOption)
                    pcall(args.Callback, args.CurrentOption)
                end)
            end,
            CreateColorPicker = function(s, args)
                pcall(args.Callback, args.Color)
            end,
            CreateButton = function(s, args)
                local b = Instance.new("TextButton", panel); b.Size = UDim2.new(1,-10,0,24); b.Text = args.Name
                b.BackgroundColor3 = Color3.fromRGB(70,70,70); b.TextColor3 = Color3.new(1,1,1); b.BorderSizePixel = 0
                b.MouseButton1Click:Connect(function() pcall(args.Callback) end)
            end,
        }
        btn.MouseButton1Click:Connect(function()
            for _, t in ipairs(self._tabs) do t._panel.Visible = false; t._btn.BackgroundColor3 = Color3.fromRGB(55,55,55) end
            panel.Visible = true; btn.BackgroundColor3 = Color3.fromRGB(80,80,80)
        end)
        tabObj._btn = btn
        table.insert(self._tabs, tabObj)
        if #self._tabs == 1 then panel.Visible = true; btn.BackgroundColor3 = Color3.fromRGB(80,80,80) end
        return tabObj
    end
    Rayfield = Rayfield:CreateWindow({})
end

local Window = Rayfield:CreateWindow({
    Name = "XCMEN HUB - DEFUSAL",
    LoadingTitle = "XCMEN HUB - DEFUSAL",
    LoadingSubtitle = "wait its loading...",
    ConfigurationSaving = { Enabled = true, FolderName = "DefusalSuite", FileName = "Config" },
    Discord = { Enabled = false },
    KeySystem = false,
})

-- ===================== [ UTILITY ] =====================
local Utils = {}

function Utils.GetCharacter(player)
    if player.Character and player.Character.Parent then return player.Character end
    return GAME.PlayersFolder:FindFirstChild(player.Name)
end

function Utils.GetTeam(player)
    return player:GetAttribute("Team") or "Spectator"
end

function Utils.IsEnemy(player)
    if not Config.ESP.TeamCheck then return true end
    if player == LocalPlayer then return false end
    return Utils.GetTeam(LocalPlayer) ~= Utils.GetTeam(player) and Utils.GetTeam(player) ~= "Spectator"
end

function Utils.IsAlivePlayer(player)
    local h = player:GetAttribute("Health")
    return h and h > 0 and Utils.GetTeam(player) ~= "Spectator"
end

function Utils.IsValidTarget(character)
    if not character then return false end
    if not character:IsDescendantOf(Workspace) then return false end
    local hum = character:FindFirstChildOfClass("Humanoid")
    local hrp = character:FindFirstChild("HumanoidRootPart")
    return hum and hrp and hum.Health > 0
end

function Utils.WorldToScreen(pos)
    local sp, onScreen = Camera:WorldToViewportPoint(pos)
    return Vector2.new(sp.X, sp.Y), onScreen, sp.Z
end

function Utils.GetWeaponName(character)
    local g = character:GetAttribute("WhatGun")
    if g and g ~= "" then return g end
    local tool = character:FindFirstChildOfClass("Tool")
    return tool and tool.Name or "Hands"
end

-- ===================== [ OVERLAY GUI ] =====================
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "DefusalSuiteOverlay"
ScreenGui.ResetOnSpawn = false
ScreenGui.IgnoreGuiInset = true
ScreenGui.DisplayOrder = 999998
pcall(function() ScreenGui.Parent = game.CoreGui end)
if not ScreenGui.Parent then ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui") end

-- ===================== [ ESP SYSTEM ] =====================
local ESP = { objects = {} }

function ESP:CreateObject(player)
    local t = {}
    local hl = Instance.new("Highlight")
    hl.Name = "D_HL"; hl.FillTransparency = 0.65; hl.OutlineTransparency = 0
    hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop; hl.Enabled = false; hl.Parent = ScreenGui
    t.Highlight = hl

    local bb = Instance.new("BillboardGui")
    bb.Name = "D_BB"; bb.AlwaysOnTop = true; bb.Size = UDim2.new(0, 200, 0, 100)
    bb.StudsOffset = Vector3.new(0, 2.6, 0)

    local nl = Instance.new("TextLabel", bb); nl.Name = "Name"
    nl.BackgroundTransparency = 1; nl.Size = UDim2.new(1, 0, 0, 15)
    nl.TextColor3 = Color3.new(1, 1, 1); nl.TextStrokeTransparency = 0
    nl.Font = Enum.Font.SourceSansBold; nl.TextSize = Config.ESP.TextSize

    local hbBg = Instance.new("Frame", bb); hbBg.Name = "HBbg"
    hbBg.BackgroundColor3 = Color3.new(0.12, 0.12, 0.12); hbBg.BorderSizePixel = 0
    hbBg.Size = UDim2.new(0.55, 0, 0, 3); hbBg.Position = UDim2.new(0.225, 0, 0, 17)

    local hb = Instance.new("Frame", hbBg); hb.Name = "HB"
    hb.BackgroundColor3 = Color3.fromRGB(0, 255, 0); hb.BorderSizePixel = 0; hb.Size = UDim2.new(1, 0, 1, 0)

    local il = Instance.new("TextLabel", bb); il.Name = "Info"
    il.BackgroundTransparency = 1; il.Position = UDim2.new(0, 0, 0, 22)
    il.Size = UDim2.new(1, 0, 0, 13); il.TextColor3 = Color3.new(1, 1, 1)
    il.TextStrokeTransparency = 0; il.Font = Enum.Font.SourceSans; il.TextSize = Config.ESP.TextSize - 1

    bb.Parent = ScreenGui
    t.Billboard = bb; t.NameLabel = nl; t.HealthBar = hb; t.HealthBg = hbBg; t.InfoLabel = il

    t.BoxLines = {}
    for i = 1, 4 do
        local f = Instance.new("Frame", ScreenGui); f.Name = "BL"..i; f.BorderSizePixel = 0
        f.BackgroundColor3 = Config.ESP.HighlightColor; f.Visible = false
        table.insert(t.BoxLines, f)
    end

    local dot = Instance.new("Frame", ScreenGui); dot.Name = "HD"; dot.BorderSizePixel = 0
    dot.BackgroundColor3 = Color3.new(1,1,1); dot.Size = UDim2.new(0,4,0,4)
    dot.AnchorPoint = Vector2.new(0.5,0.5); dot.Visible = false
    Instance.new("UICorner", dot).CornerRadius = UDim.new(1,0)
    t.HeadDot = dot

    local tr = Instance.new("Frame", ScreenGui); tr.Name = "TR"; tr.BorderSizePixel = 0
    tr.BackgroundColor3 = Config.ESP.HighlightColor; tr.Visible = false; tr.AnchorPoint = Vector2.new(0.5,0.5)
    t.Tracer = tr

    self.objects[player] = t
    return t
end

function ESP:CleanPlayer(player)
    local t = self.objects[player]; if not t then return end
    if t.Highlight then t.Highlight:Destroy() end
    if t.Billboard then t.Billboard:Destroy() end
    for _, l in ipairs(t.BoxLines or {}) do l:Destroy() end
    if t.HeadDot then t.HeadDot:Destroy() end
    if t.Tracer then t.Tracer:Destroy() end
    self.objects[player] = nil
end

function ESP:SetVisible(t, state)
    if not t then return end
    if t.Highlight then t.Highlight.Enabled = state and Config.ESP.Enabled end
    if t.Billboard then t.Billboard.Enabled = state end
    for _, l in ipairs(t.BoxLines or {}) do l.Visible = state and Config.ESP.ShowBox end
    if t.Tracer then t.Tracer.Visible = state and Config.ESP.ShowTracer end
    if t.HeadDot then t.HeadDot.Visible = state and Config.ESP.ShowHeadDot end
end

function ESP:Update()
    if not Config.ESP.Enabled then
        for _, t in pairs(self.objects) do self:SetVisible(t, false) end
        return
    end
    local myChar = Utils.GetCharacter(LocalPlayer)
    local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart")

    for _, plr in ipairs(Players:GetPlayers()) do
        if plr == LocalPlayer then continue end
        if not Utils.IsEnemy(plr) then
            if self.objects[plr] then self:SetVisible(self.objects[plr], false) end
            continue
        end
        if not Utils.IsAlivePlayer(plr) then
            if self.objects[plr] then self:SetVisible(self.objects[plr], false) end
            continue
        end
        local char = Utils.GetCharacter(plr)
        if not Utils.IsValidTarget(char) then
            if self.objects[plr] then self:SetVisible(self.objects[plr], false) end
            continue
        end
        local hrp = char:FindFirstChild("HumanoidRootPart")
        local head = char:FindFirstChild("Head")
        local hum = char:FindFirstChildOfClass("Humanoid")
        if not hrp or not head or not hum then continue end

        local dist = myRoot and (hrp.Position - myRoot.Position).Magnitude or 0
        if dist > Config.ESP.MaxDistance then
            if self.objects[plr] then self:SetVisible(self.objects[plr], false) end
            continue
        end

        local obj = self.objects[plr] or self:CreateObject(plr)
        self:SetVisible(obj, true)

        if Config.ESP.Enabled then
            obj.Highlight.Parent = char
            local rp = RaycastParams.new(); rp.FilterType = Enum.RaycastFilterType.Blacklist; rp.FilterDescendantsInstances = {Camera, myChar}
            local res = Workspace:Raycast(Camera.CFrame.Position, head.Position - Camera.CFrame.Position, rp)
            local visible = not res or res.Instance:IsDescendantOf(char)
            local col = visible and Config.ESP.VisibleColor or Config.ESP.HighlightColor
            obj.Highlight.FillColor = col; obj.Highlight.OutlineColor = col
        end

        obj.Billboard.Adornee = head
        obj.NameLabel.Text = plr.Name; obj.NameLabel.Visible = Config.ESP.ShowName

        local r = math.clamp(hum.Health / hum.MaxHealth, 0, 1)
        obj.HealthBar.Size = UDim2.new(r, 0, 1, 0)
        obj.HealthBar.BackgroundColor3 = Color3.fromRGB(255*(1-r), 255*r, 0)
        obj.HealthBar.Visible = Config.ESP.ShowHealth; obj.HealthBg.Visible = Config.ESP.ShowHealth

        local info = {}
        if Config.ESP.ShowDistance then table.insert(info, math.floor(dist).."m") end
        if Config.ESP.ShowWeapon then table.insert(info, "["..Utils.GetWeaponName(char).."]") end
        obj.InfoLabel.Text = table.concat(info, " "); obj.InfoLabel.Visible = #info > 0

        local tp, tv = Utils.WorldToScreen(head.Position + Vector3.new(0, 0.5, 0))
        local bp, bv = Utils.WorldToScreen(hrp.Position - Vector3.new(0, 3, 0))
        if Config.ESP.ShowBox and tv and bv then
            local h = math.abs(bp.Y-tp.Y); local w = h*0.55; local cx=(tp.X+bp.X)/2; local cy=(tp.Y+bp.Y)/2
            local function line(i,px,py,sx,sy)
                local f=obj.BoxLines[i]; f.Position=UDim2.new(0,px,0,py); f.Size=UDim2.new(0,sx,0,sy); f.Visible=true
            end
            line(1,cx-w/2,cy-h/2,w,1); line(2,cx-w/2,cy+h/2,w,1); line(3,cx-w/2,cy-h/2,1,h); line(4,cx+w/2,cy-h/2,1,h)
        else
            for _, f in ipairs(obj.BoxLines) do f.Visible=false end
        end

        if Config.ESP.ShowTracer then
            local origin = Config.ESP.TracerOrigin=="Center" and Vector2.new(Camera.ViewportSize.X/2,Camera.ViewportSize.Y/2)
                or (Config.ESP.TracerOrigin=="Mouse" and UserInputService:GetMouseLocation() or Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y))
            local tgt = Vector2.new(tp.X,tp.Y); local d=tgt-origin; local len=d.Magnitude
            if len>0 then
                local mid=origin+d/2; local ang=math.deg(math.atan2(d.Y,d.X))
                obj.Tracer.Position=UDim2.new(0,mid.X,0,mid.Y); obj.Tracer.Size=UDim2.new(0,len,0,1.2); obj.Tracer.Rotation=ang; obj.Tracer.Visible=true
            else
                obj.Tracer.Visible=false
            end
        else
            obj.Tracer.Visible=false
        end

        if Config.ESP.ShowHeadDot then
            local hp,hv = Utils.WorldToScreen(head.Position)
            obj.HeadDot.Position = UDim2.new(0,hp.X,0,hp.Y); obj.HeadDot.Visible = hv
        end
    end
end

-- ===================== [ TARGET HIGHLIGHT ] =====================
local Targeting = {}
function Targeting:Update()
    for _,obj in pairs(ESP.objects) do if obj.NameLabel then obj.NameLabel.TextColor3 = Color3.new(1,1,1) end end
    local best,bestDist,center = nil,math.huge,Camera.ViewportSize/2
    for _,plr in ipairs(Players:GetPlayers()) do
        if plr==LocalPlayer or not Utils.IsEnemy(plr) then continue end
        local char=Utils.GetCharacter(plr); if not Utils.IsValidTarget(char) then continue end
        local head=char:FindFirstChild("Head"); if not head then continue end
        local p,o=Utils.WorldToScreen(head.Position); if not o then continue end
        local d=(p-center).Magnitude; if d<bestDist and d<250 then bestDist=d; best=ESP.objects[plr] end
    end
    if best and best.NameLabel then best.NameLabel.TextColor3 = Color3.fromRGB(255,0,255) end
end

-- ===================== [ VISUALS ] =====================
local Visuals = { crossLines = {}, defaultCrosshairParts = {} }

function Visuals:InitCrosshair()
    for i = 1, 4 do
        local f = Instance.new("Frame", ScreenGui)
        f.Name = "CC"..i; f.BorderSizePixel = 0; f.BackgroundColor3 = Config.Visuals.CrosshairColor; f.Visible = false; f.ZIndex = 10
        table.insert(self.crossLines, f)
    end
end

function Visuals:FindDefaultCrosshair()
    local hud = LocalPlayer.PlayerGui:FindFirstChild("HUD", true); if not hud then return end
    local cross = hud:FindFirstChild("Crosshair", true) or hud:FindFirstChild("reticle", true); if not cross then return end
    for _,v in ipairs(cross:GetDescendants()) do if v:IsA("GuiObject") then table.insert(self.defaultCrosshairParts, v) end end
end

function Visuals:UpdateDefaultCrosshair()
    for _,v in ipairs(self.defaultCrosshairParts) do
        v.Visible = not (Config.Visuals.HideDefaultCrosshair and Config.Visuals.DynamicCrosshair)
    end
end

function Visuals:UpdateCrosshair()
    self:UpdateDefaultCrosshair()
    if not Config.Visuals.DynamicCrosshair then
        for _,f in ipairs(self.crossLines) do f.Visible=false end
        return
    end
    local c = Camera.ViewportSize/2; local base = Config.Visuals.CrosshairSize
    local char = Utils.GetCharacter(LocalPlayer); local hum = char and char:FindFirstChildOfClass("Humanoid")
    local spread = base
    if hum then
        if hum.MoveDirection.Magnitude > 0.1 then spread = spread + 4 end
        local s = hum:GetState()
        if s == Enum.HumanoidStateType.Jumping or s == Enum.HumanoidStateType.Freefall then spread = spread + 8 end
    end
    local l = self.crossLines
    l[1].Position = UDim2.new(0, c.X, 0, c.Y - spread - 6); l[1].Size = UDim2.new(0, 2, 0, 5)
    l[2].Position = UDim2.new(0, c.X, 0, c.Y + spread + 1); l[2].Size = UDim2.new(0, 2, 0, 5)
    l[3].Position = UDim2.new(0, c.X - spread - 6, 0, c.Y); l[3].Size = UDim2.new(0, 5, 0, 2)
    l[4].Position = UDim2.new(0, c.X + spread + 1, 0, c.Y); l[4].Size = UDim2.new(0, 5, 0, 2)
    for _,f in ipairs(l) do f.Visible = true; f.BackgroundColor3 = Config.Visuals.CrosshairColor end
end

function Visuals:HitMarker(headshot)
    if headshot and not Config.Visuals.HeadshotMarker then return end
    if not headshot and not Config.Visuals.HitMarker then return end
    local col = headshot and Color3.fromRGB(255, 215, 0) or Config.Visuals.CrosshairColor
    local size = headshot and 28 or 18
    local f = Instance.new("Frame", ScreenGui)
    f.AnchorPoint = Vector2.new(0.5, 0.5); f.Position = UDim2.new(0, Camera.ViewportSize.X/2, 0, Camera.ViewportSize.Y/2)
    f.Size = UDim2.new(0, size, 0, size); f.BackgroundTransparency = 1; f.ZIndex = 20
    local t = Instance.new("TextLabel", f); t.Text = headshot and "" or "+"; t.Size = UDim2.new(1, 0, 1, 0)
    t.BackgroundTransparency = 1; t.TextColor3 = col; t.TextStrokeTransparency = 0
    t.TextSize = size; t.Font = Enum.Font.SourceSansBold
    task.delay(0.25, function()
        local tw = TweenService:Create(f, TweenInfo.new(0.2), {Size = UDim2.new(0, 0, 0, 0), Rotation = 90})
        tw:Play(); tw.Completed:Wait(); f:Destroy()
    end)
end

local fovFrame = Instance.new("Frame", ScreenGui)
fovFrame.Name = "FOVC"; fovFrame.AnchorPoint = Vector2.new(0.5, 0.5); fovFrame.BackgroundTransparency = 1
fovFrame.BorderSizePixel = 2; fovFrame.BorderColor3 = Color3.new(1, 1, 1); fovFrame.Size = UDim2.new(0, 300, 0, 300)
fovFrame.Position = UDim2.new(0.5, 0, 0.5, 0); fovFrame.Visible = false; fovFrame.ZIndex = 5
Instance.new("UICorner", fovFrame).CornerRadius = UDim.new(1, 0)

-- ===================== [ COMBAT ] =====================
local Combat = {}

function Combat:ApplyRecoil()
    if not Config.Combat.NoRecoil then return end
    local vm = Workspace:FindFirstChild("DummyVM"); if not vm then return end
    for _, v in ipairs(vm:GetChildren()) do
        if v:IsA("CFrameValue") then v.Value = CFrame.new()
        elseif v:IsA("Vector3Value") then v.Value = Vector3.zero end
    end
end

function Combat:UpdateFrame()
    if Config.Combat.NoFlash then
        local pg = LocalPlayer:FindFirstChild("PlayerGui"); if pg then
            for _, g in ipairs(pg:GetDescendants()) do
                if g:IsA("Frame") and g.BackgroundColor3 == Color3.new(1, 1, 1) and g.Size.X.Scale >= 1 and g.Size.Y.Scale >= 1 and g.BackgroundTransparency < 1 then
                    g.BackgroundTransparency = 1
                end
            end
        end
        for _, e in ipairs(Lighting:GetChildren()) do
            if e.Name:lower():find("flash") and (e:IsA("BlurEffect") or e:IsA("ColorCorrectionEffect")) then e.Enabled = false end
        end
    end
    if Config.Combat.NoSmoke then
        for _, obj in ipairs(CollectionService:GetTagged("Smoke")) do
            if obj:IsA("BasePart") then obj.Transparency = 1 end
            for _, d in ipairs(obj:GetDescendants()) do
                if d:IsA("ParticleEmitter") or d:IsA("Smoke") then d.Enabled = false end
            end
        end
    end
end

-- ===================== [ AUDIO ESP ] =====================
local AudioESP = {}

function AudioESP:CreateIndicator(pos, icon)
    local myChar = Utils.GetCharacter(LocalPlayer); local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart"); if not myRoot then return end
    if (pos - myRoot.Position).Magnitude > Config.Audio.MaxAudioDist then return end
    local part = Instance.new("Part")
    part.Anchored = true; part.CanCollide = false; part.Transparency = 1; part.Size = Vector3.new(1, 1, 1)
    part.Position = pos; part.Parent = Workspace.Terrain
    local bb = Instance.new("BillboardGui")
    bb.Size = UDim2.new(0, 40, 0, 40); bb.AlwaysOnTop = true; bb.StudsOffset = Vector3.new(0, 2.5, 0)
    bb.Adornee = part; bb.Parent = ScreenGui
    local lbl = Instance.new("TextLabel", bb); lbl.Text = icon; lbl.Size = UDim2.new(1, 0, 1, 0)
    lbl.BackgroundTransparency = 1; lbl.TextSize = Config.Audio.IndicatorSize * 3; lbl.TextStrokeTransparency = 0
    task.delay(1.2, function() bb:Destroy(); part:Destroy() end)
end

function AudioESP:Listen()
    CollectionService:GetInstanceAddedSignal("SoundYes"):Connect(function(inst)
        if not inst:IsA("Sound") then return end
        local parent = inst.Parent; if not parent then return end; if parent:IsA("Camera") then return end
        local isGun = inst:GetAttribute("ShootSound") or (inst.Name and inst.Name:lower():find("shoot"))
        local isStep = inst.Name and inst.Name:lower():find("step")
        local pos = nil
        if parent:IsA("BasePart") then pos = parent.Position elseif parent:IsA("Attachment") then pos = parent.WorldPosition end
        if isGun and Config.Audio.GunshotIndicator and pos then self:CreateIndicator(pos, "") end
        if isStep and Config.Audio.FootstepIndicator and pos then self:CreateIndicator(pos, "") end
    end)
end

-- ===================== [ EXTRAS ] =====================
local Extras = { bombGui = nil, lastBombSearch = 0, bombCache = nil }

function Extras:FindBomb()
    local now = tick(); if now - self.lastBombSearch < 2 then return self.bombCache end; self.lastBombSearch = now
    for _, n in ipairs({"C4", "Bomb", "PlantedBomb", "PlantedC4"}) do
        local b = Workspace:FindFirstChild(n); if b then self.bombCache = b; return b end
    end
    for _, obj in ipairs(Workspace:GetChildren()) do
        for _, n in ipairs({"C4", "Bomb", "PlantedBomb", "PlantedC4"}) do
            if obj.Name == n then self.bombCache = obj; return obj end
        end
    end
    self.bombCache = nil; return nil
end

function Extras:BombESP()
    if not Config.Misc.BombESP then
        if self.bombGui then self.bombGui.Enabled = false end
        return
    end
    local bomb = self:FindBomb()
    if not bomb then
        if self.bombGui then self.bombGui.Enabled = false end
        return
    end
    if not self.bombGui then
        local bb = Instance.new("BillboardGui")
        bb.Size = UDim2.new(0, 120, 0, 36); bb.AlwaysOnTop = true; bb.StudsOffset = Vector3.new(0, 3, 0)
        local lbl = Instance.new("TextLabel", bb); lbl.Text = " BOMB"; lbl.TextColor3 = Color3.fromRGB(255, 0, 0)
        lbl.TextStrokeTransparency = 0; lbl.Size = UDim2.new(1, 0, 1, 0); lbl.BackgroundTransparency = 1
        lbl.Font = Enum.Font.SourceSansBold; lbl.TextSize = 18; bb.Parent = ScreenGui; self.bombGui = bb
    end
    self.bombGui.Adornee = bomb:IsA("Model") and bomb:FindFirstChildWhichIsA("BasePart", true) or bomb
    self.bombGui.Enabled = true
end

local defBrightness, defShadows = Lighting.Brightness, Lighting.GlobalShadows

function Extras:Fullbright()
    if Config.Visuals.FullBright then Lighting.Brightness = 8; Lighting.GlobalShadows = false
    else Lighting.Brightness = defBrightness; Lighting.GlobalShadows = defShadows end
end

-- ===================== [ AIMBOT ] =====================
local Aimbot = { Lock = false }

function Aimbot:GetTarget()
    local bestDist, bestPart, center = math.huge, nil, Camera.ViewportSize / 2
    local myChar = Utils.GetCharacter(LocalPlayer); local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart")

    for _, plr in ipairs(Players:GetPlayers()) do
        if plr == LocalPlayer then continue end
        if Config.Aimbot.TeamCheck and not Utils.IsEnemy(plr) then continue end
        if not Utils.IsAlivePlayer(plr) then continue end
        local char = Utils.GetCharacter(plr)
        if not Utils.IsValidTarget(char) then continue end
        local part = char:FindFirstChild(Config.Aimbot.TargetPart)
        if not part then continue end

        local d3d = myRoot and (part.Position - myRoot.Position).Magnitude or 0
        if d3d > Config.Aimbot.MaxDistance then continue end

        local pos, onScreen = Utils.WorldToScreen(part.Position)
        if not onScreen then continue end
        local dist2D = (pos - center).Magnitude
        if dist2D > Config.Aimbot.FOV then continue end

        if Config.Aimbot.VisibilityCheck then
            local rp = RaycastParams.new()
            rp.FilterType = Enum.RaycastFilterType.Blacklist
            rp.FilterDescendantsInstances = {Camera, myChar}
            local res = Workspace:Raycast(Camera.CFrame.Position, part.Position - Camera.CFrame.Position, rp)
            if res and not res.Instance:IsDescendantOf(char) then continue end
        end

        if dist2D < bestDist then
            bestDist = dist2D
            bestPart = part
        end
    end
    return bestPart
end

-- ===================== [ SAFE UI BUILDER ] =====================
local function safeCreate(tab, method, args)
    if not tab then return end
    local fn = tab[method]
    if type(fn) ~= "function" then return end
    local ok, res = pcall(fn, tab, args)
    if not ok then warn("[UI] " .. tostring(method) .. " failed: " .. tostring(res)) end
    return res
end

-- TAB ORDER: Aimbot, ESP, Combat, Visuals, Audio, Misc
local TabAimbot = Window:CreateTab("Aimbot")
local TabESP    = Window:CreateTab("ESP")
local TabCombat = Window:CreateTab("Combat")
local TabVis    = Window:CreateTab("Visuals")
local TabAudio  = Window:CreateTab("Audio")
local TabMisc   = Window:CreateTab("Misc")

-- Aimbot Tab
TabAimbot:CreateSection("Aimbot (Hold RMB)")
safeCreate(TabAimbot, "CreateToggle", {Name="Enabled", CurrentValue=Config.Aimbot.Enabled, Flag="Aim_Enabled", Callback=function(v) Config.Aimbot.Enabled=v end})
safeCreate(TabAimbot, "CreateSlider", {Name="Smoothness (0.1 Hard / 1 Smooth)", Range={0.01,1}, Increment=0.01, CurrentValue=Config.Aimbot.Smoothness, Flag="Aim_Smooth", Callback=function(v) Config.Aimbot.Smoothness=v end})
safeCreate(TabAimbot, "CreateSlider", {Name="Aim FOV", Range={10,800}, Increment=10, CurrentValue=Config.Aimbot.FOV, Flag="Aim_FOV", Callback=function(v) Config.Aimbot.FOV=v end})
safeCreate(TabAimbot, "CreateSlider", {Name="Max Distance", Range={0,5000}, Increment=50, CurrentValue=Config.Aimbot.MaxDistance, Flag="Aim_MaxDist", Callback=function(v) Config.Aimbot.MaxDistance=v end})
safeCreate(TabAimbot, "CreateToggle", {Name="Team Check", CurrentValue=Config.Aimbot.TeamCheck, Flag="Aim_Team", Callback=function(v) Config.Aimbot.TeamCheck=v end})
safeCreate(TabAimbot, "CreateToggle", {Name="Visibility Check", CurrentValue=Config.Aimbot.VisibilityCheck, Flag="Aim_Vis", Callback=function(v) Config.Aimbot.VisibilityCheck=v end})
safeCreate(TabAimbot, "CreateDropdown", {Name="Target Part", Options={"Head","HumanoidRootPart","Torso"}, CurrentOption=Config.Aimbot.TargetPart, Flag="Aim_Part", Callback=function(v) Config.Aimbot.TargetPart=v end})
safeCreate(TabAimbot, "CreateToggle", {Name="Show FOV Circle", CurrentValue=Config.Aimbot.ShowFOV, Flag="Aim_ShowFOV", Callback=function(v) Config.Aimbot.ShowFOV=v end})

-- ESP Tab
TabESP:CreateSection("Enemy ESP")
safeCreate(TabESP, "CreateToggle", {Name="Enabled", CurrentValue=Config.ESP.Enabled, Flag="ESP_Enabled", Callback=function(v) Config.ESP.Enabled=v end})
safeCreate(TabESP, "CreateToggle", {Name="Team Check", CurrentValue=Config.ESP.TeamCheck, Flag="ESP_Team", Callback=function(v) Config.ESP.TeamCheck=v end})
safeCreate(TabESP, "CreateToggle", {Name="Box", CurrentValue=Config.ESP.ShowBox, Flag="ESP_Box", Callback=function(v) Config.ESP.ShowBox=v end})
safeCreate(TabESP, "CreateToggle", {Name="Tracers", CurrentValue=Config.ESP.ShowTracer, Flag="ESP_Tracer", Callback=function(v) Config.ESP.ShowTracer=v end})
safeCreate(TabESP, "CreateToggle", {Name="Names", CurrentValue=Config.ESP.ShowName, Flag="ESP_Name", Callback=function(v) Config.ESP.ShowName=v end})
safeCreate(TabESP, "CreateToggle", {Name="Health", CurrentValue=Config.ESP.ShowHealth, Flag="ESP_HP", Callback=function(v) Config.ESP.ShowHealth=v end})
safeCreate(TabESP, "CreateToggle", {Name="Distance", CurrentValue=Config.ESP.ShowDistance, Flag="ESP_Dist", Callback=function(v) Config.ESP.ShowDistance=v end})
safeCreate(TabESP, "CreateToggle", {Name="Weapon", CurrentValue=Config.ESP.ShowWeapon, Flag="ESP_Weap", Callback=function(v) Config.ESP.ShowWeapon=v end})
safeCreate(TabESP, "CreateToggle", {Name="Head Dot", CurrentValue=Config.ESP.ShowHeadDot, Flag="ESP_Dot", Callback=function(v) Config.ESP.ShowHeadDot=v end})
safeCreate(TabESP, "CreateSlider", {Name="Max Distance", Range={0,5000}, Increment=10, CurrentValue=Config.ESP.MaxDistance, Flag="ESP_MaxDist", Callback=function(v) Config.ESP.MaxDistance=v end})
safeCreate(TabESP, "CreateDropdown", {Name="Tracer Origin", Options={"Bottom","Center","Mouse"}, CurrentOption=Config.ESP.TracerOrigin, Flag="ESP_TracerOrg", Callback=function(v) Config.ESP.TracerOrigin=v end})

-- Combat Tab
TabCombat:CreateSection("Combat")
safeCreate(TabCombat, "CreateToggle", {Name="No Recoil", CurrentValue=Config.Combat.NoRecoil, Flag="Cbt_Recoil", Callback=function(v) Config.Combat.NoRecoil=v end})
safeCreate(TabCombat, "CreateToggle", {Name="No Flash", CurrentValue=Config.Combat.NoFlash, Flag="Cbt_Flash", Callback=function(v) Config.Combat.NoFlash=v end})
safeCreate(TabCombat, "CreateToggle", {Name="No Smoke", CurrentValue=Config.Combat.NoSmoke, Flag="Cbt_Smoke", Callback=function(v) Config.Combat.NoSmoke=v end})

-- Visuals Tab
TabVis:CreateSection("Visuals")
safeCreate(TabVis, "CreateToggle", {Name="Dynamic Crosshair", CurrentValue=Config.Visuals.DynamicCrosshair, Flag="Vis_Cross", Callback=function(v) Config.Visuals.DynamicCrosshair=v end})
safeCreate(TabVis, "CreateToggle", {Name="Hide Default Crosshair", CurrentValue=Config.Visuals.HideDefaultCrosshair, Flag="Vis_HideDef", Callback=function(v) Config.Visuals.HideDefaultCrosshair=v end})
safeCreate(TabVis, "CreateSlider", {Name="Crosshair Size", Range={0,50}, Increment=1, CurrentValue=Config.Visuals.CrosshairSize, Flag="Vis_CrossSize", Callback=function(v) Config.Visuals.CrosshairSize=v end})
safeCreate(TabVis, "CreateToggle", {Name="Hit Markers", CurrentValue=Config.Visuals.HitMarker, Flag="Vis_Hit", Callback=function(v) Config.Visuals.HitMarker=v end})
safeCreate(TabVis, "CreateToggle", {Name="Headshot Markers", CurrentValue=Config.Visuals.HeadshotMarker, Flag="Vis_Headshot", Callback=function(v) Config.Visuals.HeadshotMarker=v end})
safeCreate(TabVis, "CreateToggle", {Name="Full Bright", CurrentValue=Config.Visuals.FullBright, Flag="Vis_FB", Callback=function(v) Config.Visuals.FullBright=v end})
safeCreate(TabVis, "CreateSlider", {Name="Camera FOV", Range={30,120}, Increment=1, CurrentValue=Config.Visuals.CameraFOV, Flag="Vis_FOV", Callback=function(v) Config.Visuals.CameraFOV=v; Camera.FieldOfView=v end})

-- Audio Tab
TabAudio:CreateSection("Audio ESP")
safeCreate(TabAudio, "CreateToggle", {Name="Footsteps", CurrentValue=Config.Audio.FootstepIndicator, Flag="Aud_Step", Callback=function(v) Config.Audio.FootstepIndicator=v end})
safeCreate(TabAudio, "CreateToggle", {Name="Gunshots", CurrentValue=Config.Audio.GunshotIndicator, Flag="Aud_Gun", Callback=function(v) Config.Audio.GunshotIndicator=v end})
safeCreate(TabAudio, "CreateSlider", {Name="Max Audio Dist", Range={0,2000}, Increment=10, CurrentValue=Config.Audio.MaxAudioDist, Flag="Aud_Max", Callback=function(v) Config.Audio.MaxAudioDist=v end})

-- Misc Tab
TabMisc:CreateSection("Extras")
safeCreate(TabMisc, "CreateToggle", {Name="Bomb ESP", CurrentValue=Config.Misc.BombESP, Flag="Misc_Bomb", Callback=function(v) Config.Misc.BombESP=v end})

-- ===================== [ MAIN LOOPS ] =====================
Visuals:InitCrosshair()
Visuals:FindDefaultCrosshair()

RunService.RenderStepped:Connect(function()
    ESP:Update(); Targeting:Update(); Visuals:UpdateCrosshair(); Combat:UpdateFrame(); Extras:BombESP(); Extras:Fullbright()
    Camera.FieldOfView = Config.Visuals.CameraFOV

    if Config.Aimbot.ShowFOV then
        fovFrame.Visible = true
        local d = Config.Aimbot.FOV * 2
        fovFrame.Size = UDim2.new(0, d, 0, d)
    else
        fovFrame.Visible = false
    end

    if Config.Aimbot.Enabled and Aimbot.Lock then
        local target = Aimbot:GetTarget()
        if target then
            local alpha = math.clamp(1.05 - Config.Aimbot.Smoothness, 0.02, 1)
            Camera.CFrame = Camera.CFrame:Lerp(CFrame.new(Camera.CFrame.Position, target.Position), alpha)
        end
    end
end)

RunService.Heartbeat:Connect(function()
    Combat:ApplyRecoil()
end)

UserInputService.InputBegan:Connect(function(input, gp)
    if gp then return end
    if input.UserInputType == Enum.UserInputType.MouseButton2 then
        Aimbot.Lock = true
    end
    if input.UserInputType ~= Enum.UserInputType.MouseButton1 then return end
    if not (Config.Visuals.HitMarker or Config.Visuals.HeadshotMarker) then return end
    if not Utils.IsAlivePlayer(LocalPlayer) then return end
    local myChar = Utils.GetCharacter(LocalPlayer); if not myChar then return end
    if not myChar:GetAttribute("WhatGun") then return end
    local rp = RaycastParams.new(); rp.FilterType = Enum.RaycastFilterType.Blacklist; rp.FilterDescendantsInstances = {Camera, myChar}
    local res = Workspace:Raycast(Camera.CFrame.Position, Camera.CFrame.LookVector * 5000, rp)
    if not res then return end
    local hitModel = res.Instance:FindFirstAncestorOfClass("Model")
    if not hitModel or hitModel:IsDescendantOf(myChar) then return end
    local humanoid = hitModel:FindFirstChildOfClass("Humanoid"); if not humanoid then return end
    local head = hitModel:FindFirstChild("Head")
    if head and (res.Instance == head or res.Instance:IsDescendantOf(head)) then
        if Config.Visuals.HeadshotMarker then Visuals:HitMarker(true) end
    else
        if Config.Visuals.HitMarker then Visuals:HitMaker(false) end
    end
end)

UserInputService.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton2 then
        Aimbot.Lock = false
    end
end)

AudioESP:Listen()
Players.PlayerRemoving:Connect(function(plr) ESP:CleanPlayer(plr) end)

print("[Defusal Suite] Loaded | Hold RMB to aimbot | Tabs: Aimbot, ESP, Combat, Visuals, Audio, Misc")

설명

🎯 Aimbot Hold RMB lock-on Adjustable FOV & smoothness Team & visibility check Head/Torso targeting 👀 ESP Boxes 📦 Tracers ➖ Names 🏷️ Health ❤️ Distance 📏 Weapon 🔫 Head Dot 🎯 💣 Extra: Bomb ESP 💣

댓글 (0)

대화에 참여하려면 로그인하세요

  • 첫 댓글을 작성하세요.

자주 묻는 질문

XCMEN HUB - DEFUSAL AIMBOT/ESP LEGIT 스크립트는 어떻게 사용하나요?
위의 스크립트 코드를 복사하고, Roblox 엑시큐터를 열어 붙여넣은 후, 게임 중에 실행을 누르세요. 스크립트가 실행되면 기능이 즉시 활성화됩니다.
XCMEN HUB - DEFUSAL AIMBOT/ESP LEGIT 스크립트는 무료인가요?
네. 이 스크립트는 무료로 복사하고 사용할 수 있습니다. 키 시스템을 사용하는 경우, 링크를 통해 무료로 키를 받으세요.
XCMEN HUB - DEFUSAL AIMBOT/ESP LEGIT 스크립트는 안전한가요?
전체 소스 코드가 이 페이지에 표시되어 실행 전에 정확히 무엇을 하는지 확인할 수 있습니다. 항상 신뢰할 수 있는 엑시큐터를 사용하고, 스크립트 사용은 Roblox 이용 약관에 위반되므로 자의적 위험으로 사용하세요.
XCMEN HUB - DEFUSAL AIMBOT/ESP LEGIT에 호환되는 엑시큐터는?
이 스크립트는 대부분의 인기 Roblox 엑시큐터에서 작동합니다. 기기에 맞는 신뢰할 수 있는 무료 또는 유료 엑시큐터를 찾으려면 엑시큐터 페이지를 확인하세요.
XCMEN HUB - DEFUSAL AIMBOT/ESP LEGIT | BloxScripter