-- COMBAT HUB — all modules -- RShift = menu local Players = game:GetService("Players") local RS = game:GetService("RunService") local UIS = game:GetService("UserInputService") local TS = game:GetService("TweenService") local VIM pcall(function() VIM=game:GetService("VirtualInputManager") end) local Lighting = game:GetService("Lighting") local TP = game:GetService("TeleportService") local HS = game:GetService("HttpService") local StarterGui = game:GetService("StarterGui") local Cam = workspace.CurrentCamera local LP = Players.LocalPlayer local Mouse = LP:GetMouse() local S = { -- aim Aimbot=false, SilentAim=false, AimAssist=false, MagnetAim=false, AimMethod="Camera", AimKey=Enum.UserInputType.MouseButton2, AimKeyMouse=true, AimMode="Hold", AimOn=false, HeadOnly=true, LockPart="Head", StickyAim=true, Humanize=false, Jitter=0.4, Triggerbot=false, AutoShoot=false, Prediction=0.12, Smooth=0.22, AssistStr=0.08, MagnetStr=0.35, FOV=160, DynFOV=false, DynFOVAdd=40, ShowFOV=true, TeamCheck=true, WallCheck=false, VisibleOnly=false, IgnoreFriends=true, IgnoreDowned=true, MaxDist=2000, SwitchDelay=0.15, Priority="Crosshair", HitChance=100, ADSOnly=false, HipfireSmooth=0.4, SnapBlend=0.5, FirstBullet=true, -- rage Hitbox=false, HitboxSize=8, KillAura=false, AuraRange=15, MeleeAim=false, DoubleTap=false, ForceHeadClose=false, CloseRange=25, AutoWall=false, -- legit / recoil AntiRecoil=true, LockPitch=true, VStr=2.4, HStr=0.6, Pattern=true, PatternScale=0.15, PatternCap=3.2, RCSAfter=0, NoSpread=false, RapidFire=false, AutoReload=false, -- visuals Chams=false, NameESP=false, DistESP=false, HPESP=false, WeaponESP=false, BoxESP=false, Tracers=false, Radar=false, HitMarker=true, DmgNum=true, BulletTrace=false, Crosshair=false, ESPColor=Color3.fromRGB(255,60,80), -- move Speed=false, SpeedVal=28, Fly=false, FlySpeed=55, InfJump=false, Noclip=false, Bhop=false, JumpPow=false, JumpVal=100, LongJump=false, Orbit=false, OrbitSpd=10, OrbitRng=8, ClickTP=false, AirStrafe=false, EdgeJump=false, CrouchSpam=false, Dash=false, DashPower=80, -- player InfAmmo=false, God=false, AntiAFK=true, Spinbot=false, SpinSpd=20, AntiAim=false, NoFall=false, AntiStun=false, AutoHeal=false, InfStamina=false, -- world Fullbright=false, NoFog=false, NoFlash=false, NoParticles=false, NoShadows=false, CustomFOV=false, FOVVal=90, ThirdPerson=false, Freecam=false, TimeChanger=false, TimeVal=12, -- util Watermark=true, PanicKey=Enum.KeyCode.End, Panic=false, -- social ChatSpam=false, ChatMsg="gg", ChatDelay=3, EmoteSpam=false, -- extra per-module settings TriggerDelay=0.08, TriggerRange=22, AutoShootDelay=0.08, DoubleTapDelay=0.04, ChamsFill=0.5, ChamsOutline=0, CrosshairSize=6, CrosshairGap=3, RadarScale=2, ESPMaxDist=2000, SilentFovOnly=false, FlyKey=Enum.KeyCode.F, NoclipKey=Enum.KeyCode.V, HitMarkerSize=18, HitMarkerTime=0.12, BulletTraceTime=0.15, AutoReloadKey=Enum.KeyCode.R, -- anti-recoil extras ARMode="Camera", ARSmooth=1, AROnlyShoot=true, ARReset=0.2, -- visuals extras BoxThickness=1.5, TracerThickness=1.5, TracerOrigin="Bottom", NameSize=12, ESPTextOutline=true, HPBar=false, HPBarH=3, ChamsDepth="Always", ESPTeamColor=false, RainbowESP=false, RainbowSpeed=0.4, RadarSize=140, RadarPosX=160, RadarPosY=20, -- grenade trajectory GrenadeTraj=false, GrenTrajAlways=false, GrenTrajSteps=40, GrenTrajTime=0.05, GrenGravity=196.2, GrenSpeed=100, GrenUp=20, GrenThickness=4, GrenColor=Color3.fromRGB(80,220,120), GrenBounce=false, GrenMaxBounces=2, PerfectThrow=false, PerfectThrowKey=Enum.UserInputType.MouseButton1, PerfectThrowAuto=false, PerfectThrowLead=0.15, PerfectThrowSmooth=0.35, PerfectThrowHeight=2, AutoCrouchShoot=false, StopMoveShoot=false, CrouchKey=Enum.KeyCode.LeftShift, StopMoveStrict=true, GrenAutoCalibrate=false, GrenCalibStatus="idle", JigglePeek=false, JiggleKey=Enum.KeyCode.LeftAlt, JiggleMode="Hold", JiggleSpeed=12, JiggleDist=2.5, JiggleADS=true, JiggleShoot=false, AutoInspect=false, InspectKey=Enum.KeyCode.F, InspectDelay=0.35, AutoEmote=false, EmoteDelay=0.6, EmoteKey=Enum.KeyCode.Period, InspectOnKill=true, EmoteOnKill=true, AutoRejoin=true, RejoinDelay=2, RejoinSameServer=true, RejoinOnKick=true, RejoinOnLeave=true, } -- Audit: managed connections and reversible property overrides. local running=true local connections={} local function connect(signal,fn) local connection=signal:Connect(function(...) if running then fn(...) end end) table.insert(connections,connection) return connection end local mutations={} local humanoidStates={} local writeOrder=0 local function setProperty(module,object,property,value) if not object then return end local ok=pcall(function() local properties=mutations[object] if not properties then properties={}; mutations[object]=properties end local record=properties[property] if not record then record={original=object[property],layers={}}; properties[property]=record end writeOrder+=1 record.layers[module]={value=value,order=writeOrder} object[property]=value end) return ok end local function restoreModule(module) for object,properties in pairs(mutations) do for property,record in pairs(properties) do if record.layers[module] then record.layers[module]=nil local top for _,layer in pairs(record.layers) do if not top or layer.order>top.order then top=layer end end pcall(function() if top then object[property]=top.value else object[property]=record.original end end) if not top then properties[property]=nil end end end if not next(properties) then mutations[object]=nil end end if module=="NoFall" then for hum,states in pairs(humanoidStates) do for state,enabled in pairs(states) do pcall(function() hum:SetStateEnabled(state,enabled) end) end end table.clear(humanoidStates) end end local function restoreAll() for object,properties in pairs(mutations) do for property,record in pairs(properties) do pcall(function() object[property]=record.original end) end end table.clear(mutations) restoreModule("NoFall") end local unsupported={MeleeAim=true,DmgNum=true,InfStamina=true,EmoteSpam=true} for key in pairs(unsupported) do S[key]=false end local particlesApplied=false local lastFlashScan=0 local cancelCapture -- Config profiles local configDefaults=table.clone(S) local configRefresh,configCallbacks,configRules={},{},{} local function encodeConfig() local values={} for k,v in pairs(S) do if k~="AimOn" and k~="Panic" then if typeof(v)=="EnumItem" then values[k]={enum=tostring(v.EnumType):match("Enum%.(.+)"),name=v.Name} elseif typeof(v)=="Color3" then values[k]={r=v.R,g=v.G,b=v.B} else values[k]=v end end end return HS:JSONEncode({version=1,settings=values}) end local function applyConfig(values) local nextValues=table.clone(configDefaults) local function finite(v) return type(v)=="number" and v==v and math.abs(v) 0 and #data.profile <= 48 and data.profile:match("^[%w_-]+$") then autoExecProfile = data.profile end end end) end local function saveAutoExecPrefs() if type(writefile) ~= "function" then return false, "File storage unavailable" end if type(isfolder) == "function" and type(makefolder) == "function" then if not isfolder("CombatHubConfigs") then makefolder("CombatHubConfigs") end end writefile(AUTOEXEC_PATH, HS:JSONEncode({ enabled = autoExecEnabled, profile = autoExecProfile, })) return true end local function runAutoExec() if not autoExecEnabled then return end if type(readfile) ~= "function" then warn("[combat hub] auto-exec skipped: no readfile") return end local name = tostring(autoExecProfile or ""):match("^%s*(.-)%s*$") or "" if name == "" or not name:match("^[%w_-]+$") then warn("[combat hub] auto-exec skipped: bad profile name") return end local path = "CombatHubConfigs/" .. name .. ".json" local ok, err = pcall(function() local text = readfile(path) local data = HS:JSONDecode(text) assert(type(data) == "table" and data.version == 1 and type(data.settings) == "table", "invalid profile") applyConfig(data.settings) HK = false CT = nil end) if ok then print("[combat hub] auto-exec loaded: " .. name) else warn("[combat hub] auto-exec failed: " .. tostring(err)) end end loadAutoExecPrefs() local CT, HK, lastSwitch, ESP, OSZ = nil, false, 0, {}, {} local intentionalLeave, rejoinScheduled = false, false local savedPlaceId, savedJobId = game.PlaceId, game.JobId local bindingCapture=false local function aimPosition() local camera=workspace.CurrentCamera if camera and (S.AimMethod=="Camera" or UIS.MouseBehavior==Enum.MouseBehavior.LockCenter) then return camera.ViewportSize/2 end return UIS:GetMouseLocation() end local BV, BG, FOVc, CH, radarDots = nil, nil, nil, {}, {} local savedPitch, orbitAng, patternMul, shootStart = nil, 0, 1, 0 local oldAmb, oldBri, oldFog, oldShadow local lastChat, hitMarks, dmgLabels = 0, {}, {} local freecamConn, freecamPos local panicAll,dispose local function stopFreecam() if freecamConn then freecamConn:Disconnect(); freecamConn=nil end restoreModule("Freecam") end configCallbacks.Freecam=function(value) if not value then stopFreecam() end end pcall(function() FOVc=Drawing.new("Circle"); FOVc.Thickness=1.5; FOVc.NumSides=64; FOVc.Filled=false; FOVc.Visible=false; FOVc.ZIndex=999; FOVc.Transparency=1; FOVc.Color=Color3.fromRGB(255,255,255) end) pcall(function() for i=1,4 do local l=Drawing.new("Line"); l.Thickness=1.5; l.Color=Color3.fromRGB(255,255,255); l.Visible=false; CH[i]=l end end) local grenLines = {} local grenDots = {} local grenImpact = nil local grenImpactX1, grenImpactX2 = nil, nil pcall(function() for i=1,80 do local l=Drawing.new("Line") l.Thickness=3 l.Color=Color3.fromRGB(80,255,120) l.Visible=false l.ZIndex=80 l.Transparency=1 grenLines[i]=l end for i=1,40 do local c=Drawing.new("Circle") c.Thickness=1 c.NumSides=12 c.Radius=3 c.Filled=true c.Visible=false c.ZIndex=81 c.Color=Color3.fromRGB(255,255,255) c.Transparency=1 grenDots[i]=c end grenImpact=Drawing.new("Circle") grenImpact.Thickness=2 grenImpact.NumSides=24 grenImpact.Radius=10 grenImpact.Filled=false grenImpact.Visible=false grenImpact.ZIndex=82 grenImpact.Color=Color3.fromRGB(255,80,80) grenImpact.Transparency=1 grenImpactX1=Drawing.new("Line") grenImpactX1.Thickness=3 grenImpactX1.Visible=false grenImpactX1.ZIndex=82 grenImpactX1.Color=Color3.fromRGB(255,60,60) grenImpactX2=Drawing.new("Line") grenImpactX2.Thickness=3 grenImpactX2.Visible=false grenImpactX2.ZIndex=82 grenImpactX2.Color=Color3.fromRGB(255,60,60) end) local function hideGrenTraj() for _,l in ipairs(grenLines) do if l then l.Visible=false end end for _,c in ipairs(grenDots) do if c then c.Visible=false end end if grenImpact then grenImpact.Visible=false end if grenImpactX1 then grenImpactX1.Visible=false end if grenImpactX2 then grenImpactX2.Visible=false end end local function isGrenadeTool(tool) if not tool then return false end local n=tool.Name:lower() return n:find("grenade",1,true) or n:find("nade",1,true) or n:find("throw",1,true) or n:find("molotov",1,true) or n:find("flash",1,true) or n:find("smoke",1,true) or n:find("frag",1,true) or n:find("semtex",1,true) or n:find("beanbag",1,true) end local function updateGrenadeTrajectory() if not S.GrenadeTraj or S.Panic or not running then hideGrenTraj() return end local cam = workspace.CurrentCamera if not cam then hideGrenTraj() return end local char = LP.Character local tool = char and char:FindFirstChildOfClass("Tool") if not S.GrenTrajAlways and not isGrenadeTool(tool) then hideGrenTraj() return end local origin = cam.CFrame.Position + cam.CFrame.LookVector*2 local vel = cam.CFrame.LookVector * (S.GrenSpeed or 100) + Vector3.new(0, S.GrenUp or 20, 0) local g = Vector3.new(0, -(S.GrenGravity or 196.2), 0) local dt = S.GrenTrajTime or 0.05 local steps = math.clamp(math.floor(S.GrenTrajSteps or 40), 8, 80) local points = {origin} local pos, v = origin, vel local bounces = 0 local maxB = S.GrenMaxBounces or 2 local landPos = nil local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Exclude local ex = {cam} if char then table.insert(ex, char) end params.FilterDescendantsInstances = ex params.IgnoreWater = false for i=1,steps do local nextV = v + g*dt local nextPos = pos + v*dt + g*(0.5*dt*dt) local dir = nextPos - pos local hit = workspace:Raycast(pos, dir, params) if hit then table.insert(points, hit.Position) landPos = hit.Position if S.GrenBounce and bounces < maxB then local n = hit.Normal v = nextV - 2*nextV:Dot(n)*n v = v * 0.55 pos = hit.Position + n*0.05 bounces += 1 landPos = nil -- keep going else break end else pos = nextPos v = nextV table.insert(points, pos) end end if not landPos and #points > 0 then landPos = points[#points] end local baseThick = math.max(S.GrenThickness or 3, 2) local colA = S.GrenColor or Color3.fromRGB(80, 255, 140) local colB = Color3.fromRGB(255, 70, 70) local drawn = 0 local nseg = #points - 1 for i=1,nseg do local a,b = points[i], points[i+1] local pa, oa = cam:WorldToViewportPoint(a) local pb, ob = cam:WorldToViewportPoint(b) local line = grenLines[i] if line and oa and ob and pa.Z > 0 and pb.Z > 0 then local t = nseg > 1 and ((i-1)/(nseg-1)) or 0 -- gradient: start color -> red toward impact local r = colA.R + (colB.R - colA.R) * t local gch = colA.G + (colB.G - colA.G) * t local bl = colA.B + (colB.B - colA.B) * t line.From = Vector2.new(pa.X, pa.Y) line.To = Vector2.new(pb.X, pb.Y) line.Thickness = baseThick + (1 - t) * 2 -- thicker near start line.Color = Color3.new(r, gch, bl) line.Transparency = 0.05 + t * 0.15 line.Visible = true drawn = i elseif line then line.Visible = false end end for i=drawn+1,#grenLines do if grenLines[i] then grenLines[i].Visible=false end end -- dots along path for readability local dotCount = 0 local stepDot = math.max(1, math.floor(#points / 12)) for i=1,#points,stepDot do dotCount += 1 local c = grenDots[dotCount] if not c then break end local p, on = cam:WorldToViewportPoint(points[i]) if on and p.Z > 0 then local t = #points > 1 and ((i-1)/(#points-1)) or 0 c.Position = Vector2.new(p.X, p.Y) c.Radius = 3 + (1-t)*2 c.Color = Color3.new( colA.R + (colB.R-colA.R)*t, colA.G + (colB.G-colA.G)*t, colA.B + (colB.B-colA.B)*t ) c.Filled = true c.Visible = true c.Transparency = 0.1 else c.Visible = false end end for i=dotCount+1,#grenDots do if grenDots[i] then grenDots[i].Visible=false end end -- impact marker if landPos and grenImpact then local ip, on = cam:WorldToViewportPoint(landPos) if on and ip.Z > 0 then local pulse = 10 + math.sin(os.clock()*8)*3 grenImpact.Position = Vector2.new(ip.X, ip.Y) grenImpact.Radius = pulse grenImpact.Color = Color3.fromRGB(255, 60, 60) grenImpact.Thickness = 3 grenImpact.Visible = true grenImpact.Transparency = 0.05 local s = 9 if grenImpactX1 then grenImpactX1.From = Vector2.new(ip.X - s, ip.Y - s) grenImpactX1.To = Vector2.new(ip.X + s, ip.Y + s) grenImpactX1.Visible = true grenImpactX1.Thickness = 3 end if grenImpactX2 then grenImpactX2.From = Vector2.new(ip.X + s, ip.Y - s) grenImpactX2.To = Vector2.new(ip.X - s, ip.Y + s) grenImpactX2.Visible = true grenImpactX2.Thickness = 3 end else grenImpact.Visible = false if grenImpactX1 then grenImpactX1.Visible=false end if grenImpactX2 then grenImpactX2.Visible=false end end elseif grenImpact then grenImpact.Visible = false if grenImpactX1 then grenImpactX1.Visible=false end if grenImpactX2 then grenImpactX2.Visible=false end end end local function solveThrowDirection(fromPos, targetPos, speed, gravity, upBoost) -- Ballistic aim: find look direction so projectile with speed+upBoost lands near target local g = gravity or 196.2 local v0 = speed or 100 local to = targetPos - fromPos local distXZ = Vector3.new(to.X, 0, to.Z).Magnitude if distXZ < 0.5 then return (targetPos - fromPos).Unit end local y = to.Y -- quadratic for angle: use flat speed approximation with extra up -- try multiple pitch angles, pick best landing error local bestDir, bestErr = nil, math.huge local flat = Vector3.new(to.X, 0, to.Z).Unit for deg = 5, 70, 0.75 do local pitch = math.rad(deg) local dir = (flat * math.cos(pitch) + Vector3.yAxis * math.sin(pitch)).Unit local vel = dir * v0 + Vector3.new(0, upBoost or 0, 0) local pos = fromPos local v = vel local dt = 0.05 local err = math.huge for _=1,80 do v = v + Vector3.new(0, -g, 0) * dt local nextPos = pos + v * dt -- hit ground-ish near target height band if (nextPos - targetPos).Magnitude < err then err = (nextPos - targetPos).Magnitude end -- stop if passed target in XZ and going down local xz = Vector3.new(nextPos.X - fromPos.X, 0, nextPos.Z - fromPos.Z).Magnitude if xz > distXZ + 5 and v.Y < 0 then break end if nextPos.Y < targetPos.Y - 40 and v.Y < 0 then break end pos = nextPos end if err < bestErr then bestErr = err bestDir = dir end end return bestDir, bestErr end local function perfectThrowActive() if not S.PerfectThrow or S.Panic or not running then return false end local char = LP.Character local tool = char and char:FindFirstChildOfClass("Tool") local holdingNade = isGrenadeTool(tool) if S.PerfectThrowAuto and holdingNade then return true end if not holdingNade and not S.GrenTrajAlways then return false end local key = S.PerfectThrowKey if typeof(key)=="EnumItem" then if key.EnumType==Enum.UserInputType then return UIS:IsMouseButtonPressed(key) elseif key.EnumType==Enum.KeyCode then return UIS:IsKeyDown(key) end end return false end local function getNearestEnemyRoot() local cam = workspace.CurrentCamera if not cam then return nil end local origin = cam.CFrame.Position local me = LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") if me then origin = me.Position end local best, bestDist = nil, math.huge for _,p in ipairs(Players:GetPlayers()) do if alive(p) and p.Character then local root = p.Character:FindFirstChild("HumanoidRootPart") if root then local d = (root.Position - origin).Magnitude if d < bestDist and d <= (S.MaxDist or 2000) then bestDist = d best = root end end end end return best, bestDist end local function updatePerfectThrow(dt) if not perfectThrowActive() then return end if bindingCapture or UIS:GetFocusedTextBox() or pointerOverMenu() then return end local cam = workspace.CurrentCamera if not cam then return end -- always prefer nearest enemy for grenade lead local target = getNearestEnemyRoot() if not target then return end local lead = S.PerfectThrowLead or 0.15 local aimPos = target.Position + Vector3.new(0, S.PerfectThrowHeight or 2, 0) local vel = target.AssemblyLinearVelocity if vel and vel.Magnitude > 0.5 then aimPos = aimPos + vel * lead end local from = cam.CFrame.Position + cam.CFrame.LookVector * 1.5 local dir = solveThrowDirection(from, aimPos, S.GrenSpeed or 100, S.GrenGravity or 196.2, S.GrenUp or 20) if not dir then return end local smooth = math.clamp(S.PerfectThrowSmooth or 0.35, 0.05, 1) local alpha = 1 - (1 - smooth) ^ (math.clamp(dt or 1/60, 0, 0.1) * 60) local want = CFrame.lookAt(cam.CFrame.Position, cam.CFrame.Position + dir) cam.CFrame = cam.CFrame:Lerp(want, alpha) end -- theme local T={bg=Color3.fromRGB(12,12,16),panel=Color3.fromRGB(18,18,24),p2=Color3.fromRGB(24,24,32),card=Color3.fromRGB(22,22,30),stroke=Color3.fromRGB(40,40,55),acc=Color3.fromRGB(168,85,255),txt=Color3.fromRGB(235,235,245),dim=Color3.fromRGB(140,140,160),mut=Color3.fromRGB(90,90,110),ok=Color3.fromRGB(80,200,120),bad=Color3.fromRGB(220,70,80)} local function corner(p,r) local c=Instance.new("UICorner"); c.CornerRadius=UDim.new(0,r or 8); c.Parent=p end local function stroke(p,c) local s=Instance.new("UIStroke"); s.Color=c or T.stroke; s.Thickness=1; s.Parent=p end -- Hover tooltips for every module/control local TIPS = { ["Aimbot"]="Locks your aim toward valid targets while the aim key is held/toggled.", ["Silent Aim"]="Redirects shots to the target without fully moving your camera.", ["Aim Assist"]="Soft pull toward targets instead of a hard lock.", ["Magnet Aim"]="Stronger pull when your crosshair is already near the target.", ["Sticky Aim"]="Stays on the same target instead of swapping every frame.", ["Head Only"]="Forces aim part to Head when possible.", ["Humanize / Jitter"]="Adds small random movement so aim is less robotic.", ["Jitter Amount"]="How strong humanize shake is.", ["FOV"]="Aim field-of-view radius in pixels around crosshair/center.", ["Dynamic FOV"]="Temporarily widens FOV while aiming.", ["Dynamic FOV Add"]="Extra FOV pixels added when Dynamic FOV is on.", ["Smoothness"]="How fast aim moves to target (lower = slower/legit, higher = snappier).", ["Prediction"]="Leads moving targets using their velocity.", ["Assist Strength"]="How hard Aim Assist pulls.", ["Magnet Strength"]="How hard Magnet Aim pulls when close.", ["Hit Chance %"]="Chance each frame/shot actually applies aim/silent redirect.", ["Max Distance"]="Ignore players farther than this (studs).", ["Switch Delay"]="Minimum time before switching sticky targets.", ["Snap Blend"]="Extra snap boost when already close to the target.", ["Hipfire Smoothness"]="Aim speed used when not holding ADS (RMB).", ["Aim Method"]="Camera = rotate camera; Mouse = mousemoverel when available.", ["Team Check"]="Skip teammates.", ["Wall Check"]="Aim only: require line-of-sight. Does not hide ESP.", ["Visible Only"]="Aim only: only lock targets on-screen. Does not hide ESP.", ["Ignore Friends"]="Skip Roblox friends.", ["Ignore Downed"]="Skip very low HP / downed players.", ["ADS Only"]="Aimbot only works while holding RMB (ADS).", ["First Bullet Accuracy"]="Not implemented in this build.", ["Priority"]="How targets are ranked: crosshair, distance, or lowest HP.", ["Lock Part"]="Body part to aim at (Head / Torso / Random).", ["Aim Mode"]="Hold = must hold key; Toggle = press to on/off.", ["Show FOV"]="Draws the aim FOV circle.", ["Aim Key"]="Key/mouse button that activates aimbot.", ["Triggerbot"]="Auto-clicks when crosshair ray hits a valid player.", ["Auto Shoot"]="Keeps firing while a valid aim target exists.", ["Double Tap"]="Fires a second click shortly after the first.", ["Kill Aura"]="Activates your tool when an enemy is in range.", ["Aura Range"]="Kill Aura distance in studs.", ["Melee Aimbot"]="Not implemented in this build.", ["Force Head Close"]="Force head aim when enemy is within Close Range.", ["Close Range"]="Distance used by Force Head Close.", ["Auto Wall (soft)"]="Allows soft wall penetration checks when enabled.", ["Hitbox Expand"]="Grows enemy parts on your client for easier hits.", ["Hitbox Size"]="Expanded hitbox size.", ["Anti Recoil"]="Counters vertical recoil while shooting.", ["Lock Pitch"]="Keeps camera pitch stable while anti-recoil is active.", ["Vertical Strength"]="How hard anti-recoil pushes mouse down.", ["Horizontal Strength"]="Sideways anti-recoil compensation.", ["Pattern Ramp"]="Increases compensation the longer you spray.", ["Pattern Scale"]="How fast pattern ramp grows.", ["Pattern Cap"]="Max multiplier for pattern ramp.", ["RCS After Shots"]="Not implemented in this build.", ["No Spread"]="Zeros weapon spread values when found.", ["Rapid Fire"]="Lowers fire delay/cooldown values when found.", ["Auto Reload"]="Not implemented in this build.", ["Chams"]="Highlight players (see-through style).", ["Name ESP"]="Shows player names above them.", ["Distance ESP"]="Shows distance in studs.", ["Health ESP"]="Shows health.", ["Weapon ESP"]="Shows held tool name.", ["Box ESP"]="2D boxes around players.", ["Tracers"]="Lines from screen bottom to players.", ["Radar"]="Top-down radar of nearby players.", ["Hit Markers"]="Not implemented in this build.", ["Damage Numbers"]="Not implemented in this build.", ["Bullet Tracers"]="Not implemented in this build.", ["Crosshair"]="Custom crosshair overlay.", ["Speed"]="Overrides local walkspeed.", ["Speed Value"]="Walkspeed when Speed is on.", ["Fly"]="Free-fly with WASD + Space/Ctrl.", ["Fly Speed"]="Fly movement speed.", ["Inf Jump"]="Jump again in the air.", ["Bhop"]="Auto-jump while holding Space on ground.", ["Edge Jump"]="Jumps when walking off ledges.", ["Jump Power"]="Overrides jump power.", ["Jump Value"]="Jump power amount.", ["Long Jump"]="Boosts forward/up on jump request.", ["Air Strafe"]="Lets you redirect momentum in air with A/D.", ["Crouch Spam"]="Rapidly toggles hip height.", ["Noclip"]="Disables local collision.", ["Dash (Q)"]="Launch forward with Q.", ["Dash Power"]="Dash strength.", ["Orbit"]="Orbits around current target.", ["Orbit Speed"]="How fast orbit rotates.", ["Orbit Range"]="Orbit radius.", ["Click TP"]="Click to teleport to mouse hit (when enabled).", ["Infinite Ammo"]="Tries to keep ammo values high (client).", ["God Mode (local only)"]="Keeps local health full (client only).", ["God Mode"]="Keeps local health full (client only).", ["Anti AFK"]="Clicks to prevent idle kick.", ["No Fall Damage"]="Disables falling/ragdoll states locally.", ["Anti Stun / Slow"]="Tries to keep walkspeed from being slowed.", ["Auto Heal (local only)"]="Tops up local health when low (client only).", ["Auto Heal"]="Tops up local health when low (client only).", ["Inf Stamina (best effort)"]="Not implemented in this build.", ["Spinbot"]="Spins character yaw.", ["Spin Speed"]="Spin rate.", ["Anti Aim"]="Random small yaw offsets.", ["Fullbright"]="Brightens the map.", ["No Fog"]="Removes fog distance limit.", ["No Shadows"]="Disables global shadows.", ["No Particles"]="Disables particles/trails/smoke.", ["No Flash / Blind"]="Hides common flash/blind GUI overlays.", ["Time Changer"]="Overrides Lighting.ClockTime.", ["Clock Time"]="Time of day value.", ["Custom FOV"]="Overrides camera field of view.", ["FOV Value"]="Camera FOV amount.", ["Third Person"]="Forces third-person zoom distances.", ["Freecam (Shift+P)"]="Detach camera; Shift+P toggles freecam.", ["Watermark"]="FPS/ping overlay.", ["Panic Key"]="Key that disables combat features.", ["Chat Spam"]="Repeatedly sends chat message.", ["Chat Delay"]="Seconds between spam messages.", ["Emote Spam (best effort)"]="Not implemented in this build.", ["Auto Execute on Inject"]="Loads a saved profile automatically next script inject.", ["Profile name to auto-load"]="Which saved profile auto-execute should load.", ["Trigger Delay"]="Seconds between triggerbot shots.", ["Trigger Range"]="How close crosshair must be to a player (pixels) to fire.", ["Auto Shoot Delay"]="Seconds between auto-shoot clicks.", ["Double Tap Delay"]="Delay between first and second click.", ["Chams Fill"]="Highlight fill transparency (0=solid, 1=invisible).", ["Chams Outline"]="Highlight outline transparency.", ["Radar Scale"]="Radar zoom (higher = more zoomed out).", ["ESP Max Dist"]="Hide ESP beyond this distance.", ["Hit Marker Size"]="Size of the X hit marker.", ["Hit Marker Time"]="How long hit marker stays on screen.", ["Trace Time"]="How long bullet traces stay visible.", ["Crosshair Size"]="Length of crosshair lines.", ["Crosshair Gap"]="Gap at center of crosshair.", ["Silent FOV Only"]="Silent aim only redirects if target is inside FOV.", ["Reload Key"]="Key pressed for auto-reload.", ["AR Mode"]="Camera = rotate camera like mouse; Mouse = mousemoverel; Both = do both.", ["AR Smooth"]="How strongly anti-recoil applies (1 = full).", ["Only While Shooting"]="Only compensate while holding attack.", ["Reset Delay"]="How long after shooting before spray pattern resets.", ["Box Thickness"]="ESP box outline thickness.", ["Tracer Thickness"]="Tracer line thickness.", ["Tracer Origin"]="Where tracers start (Bottom / Center / Top).", ["Name Size"]="ESP text size.", ["Text Outline"]="Dark outline behind ESP text.", ["Health Bar"]="Draw a small HP bar under the box.", ["HP Bar Height"]="Height of the HP bar in pixels.", ["Chams Depth"]="Always = see through walls; Occluded = only visible parts.", ["Team Color ESP"]="Color ESP by team color.", ["Rainbow ESP"]="Cycle ESP colors.", ["Rainbow Speed"]="How fast rainbow cycles.", ["Radar Size"]="Radar frame size.", ["Radar Offset X"]="Radar distance from right edge.", ["Radar Offset Y"]="Radar distance from top.", ["Grenade Trajectory"]="Draw predicted grenade / throw arc from camera.", ["Always Show"]="Show trajectory even when not holding a grenade tool.", ["Sim Steps"]="How many points along the arc (higher = smoother).", ["Step Time"]="Time between simulation steps (seconds).", ["Gravity"]="Gravity strength used for the arc (studs/s²).", ["Throw Speed"]="Initial throw velocity.", ["Up Boost"]="Extra upward velocity on throw.", ["Line Thickness"]="Trajectory line thickness.", ["Simulate Bounce"]="Bounce the path off the floor/walls.", ["Max Bounces"]="How many bounces to simulate.", ["Perfect Grenade Throw"]="Aims camera so the grenade arc lands on the nearest enemy (with lead).", ["Auto On Nade"]="Auto-enables perfect throw while holding a grenade tool.", ["Target Lead"]="Seconds of velocity lead on the nearest enemy.", ["Aim Smooth"]="How fast camera moves to the perfect throw angle.", ["Land Height"]="Aim this many studs above the target's feet/root.", ["Throw Aim Key"]="Hold this key to apply perfect throw aim (if Auto Off).", ["Auto Crouch On Shoot"]="Holds crouch (LeftShift by default) while you are shooting.", ["Crouch Key"]="Key used for auto-crouch (usually LeftShift).", ["Stop Move On Shoot"]="Stops WASD movement while holding attack.", ["Hard Stop (zero vel)"]="Also zeros horizontal velocity for a full stop.", ["Auto Find Perfect Settings"]="Throw one grenade after clicking; samples the path and sets gravity/speed/up for trajectory + perfect throw.", ["Jiggle Peek"]="Auto left/right strafe peek (jiggle) to slice angles.", ["Jiggle Key"]="Hold or toggle key for jiggle peek.", ["Jiggle Mode"]="Hold = must hold key; Toggle = press to on/off.", ["Jiggle Speed"]="How fast the left/right oscillation is.", ["Jiggle Distance"]="How far each side of the jiggle moves.", ["Only While ADS"]="Only jiggle while holding RMB.", ["Allow While Shooting"]="If off, jiggle pauses while M1 is held.", ["Auto Inspect Gun"]="Master toggle for auto weapon inspect.", ["Inspect On Kill"]="Inspect after you get a kill.", ["Inspect Key"]="Key sent for weapon inspect (game-dependent, often F).", ["Inspect Delay After Kill"]="Seconds to wait after a kill before inspecting.", ["Auto Emote"]="Master toggle for auto emote.", ["Emote On Kill"]="Emote after you get a kill.", ["Emote Key"]="Key used for emote (often . or B — depends on game).", ["Emote Delay After Kill"]="Seconds to wait after a kill before emoting.", ["Auto Rejoin"]="Automatically rejoin if kicked or disconnected.", ["Rejoin Delay"]="Seconds to wait before rejoining.", ["Same Server"]="Try to rejoin the same server instance (JobId).", ["On Kick / Error"]="Rejoin when a kick/error disconnect is detected.", ["On Accidental Leave"]="Rejoin if you leave/disconnect unexpectedly.", } local Gui=Instance.new("ScreenGui"); Gui.Name="CombatHub"; Gui.ResetOnSpawn=false; Gui.DisplayOrder=999; Gui.ZIndexBehavior=Enum.ZIndexBehavior.Sibling pcall(function() Gui.Parent=game:GetService("CoreGui") end); if not Gui.Parent then Gui.Parent=LP:WaitForChild("PlayerGui") end -- Tooltip UI (after Gui exists) local Tip = Instance.new("Frame") Tip.Name = "ModuleTip" Tip.Size = UDim2.new(0, 280, 0, 0) Tip.AutomaticSize = Enum.AutomaticSize.Y Tip.BackgroundColor3 = Color3.fromRGB(22, 26, 34) Tip.BorderSizePixel = 0 Tip.Visible = false Tip.ZIndex = 200 Tip.Parent = Gui corner(Tip, 8) local tipStroke = Instance.new("UIStroke", Tip) tipStroke.Color = Color3.fromRGB(168, 85, 255) local tipPad = Instance.new("UIPadding", Tip) tipPad.PaddingTop = UDim.new(0, 8) tipPad.PaddingBottom = UDim.new(0, 8) tipPad.PaddingLeft = UDim.new(0, 10) tipPad.PaddingRight = UDim.new(0, 10) local tipTitle = Instance.new("TextLabel", Tip) tipTitle.Size = UDim2.new(1, 0, 0, 16) tipTitle.BackgroundTransparency = 1 tipTitle.TextColor3 = Color3.fromRGB(200, 160, 255) tipTitle.Font = Enum.Font.GothamBold tipTitle.TextSize = 12 tipTitle.TextXAlignment = Enum.TextXAlignment.Left tipTitle.ZIndex = 201 local tipBody = Instance.new("TextLabel", Tip) tipBody.Size = UDim2.new(1, 0, 0, 0) tipBody.Position = UDim2.new(0, 0, 0, 18) tipBody.AutomaticSize = Enum.AutomaticSize.Y tipBody.BackgroundTransparency = 1 tipBody.TextColor3 = Color3.fromRGB(210, 210, 220) tipBody.Font = Enum.Font.Gotham tipBody.TextSize = 11 tipBody.TextXAlignment = Enum.TextXAlignment.Left tipBody.TextWrapped = true tipBody.ZIndex = 201 local tipConn local function showTip(name) local d = TIPS[name] if not d then Tip.Visible = false return end tipTitle.Text = name tipBody.Text = d Tip.Visible = true if tipConn then tipConn:Disconnect() end tipConn = RS.RenderStepped:Connect(function() if not Tip.Visible then return end local mp = UIS:GetMouseLocation() local cam = workspace.CurrentCamera local vs = cam and cam.ViewportSize or Vector2.new(1920, 1080) local x, y = mp.X + 16, mp.Y + 16 if x + 290 > vs.X then x = mp.X - 296 end if y + 110 > vs.Y then y = mp.Y - 100 end Tip.Position = UDim2.fromOffset(x, y) end) end local function hideTip() Tip.Visible = false if tipConn then tipConn:Disconnect(); tipConn = nil end end local function bindTip(row, name) if not row or not name then return end row.MouseEnter:Connect(function() showTip(name) end) row.MouseLeave:Connect(hideTip) end local Main=Instance.new("Frame",Gui); Main.Size=UDim2.new(0,760,0,540); Main.Position=UDim2.new(.5,-380,.5,-270); Main.BackgroundColor3=T.bg; Main.BorderSizePixel=0; Main.Active=true; Main.Draggable=true; corner(Main,12); stroke(Main) local function pointerOverMenu() if not Main.Visible then return false end local point=UIS:GetMouseLocation()-game:GetService("GuiService"):GetGuiInset() local origin,size=Main.AbsolutePosition,Main.AbsoluteSize return point.X>=origin.X and point.Y>=origin.Y and point.X<=origin.X+size.X and point.Y<=origin.Y+size.Y end local Top=Instance.new("Frame",Main); Top.Size=UDim2.new(1,0,0,44); Top.BackgroundColor3=T.panel; Top.BorderSizePixel=0; corner(Top,12) local tf=Instance.new("Frame",Top); tf.Size=UDim2.new(1,0,0,14); tf.Position=UDim2.new(0,0,1,-14); tf.BackgroundColor3=T.panel; tf.BorderSizePixel=0 local Title=Instance.new("TextLabel",Top); Title.Size=UDim2.new(0,220,1,0); Title.Position=UDim2.new(0,16,0,0); Title.BackgroundTransparency=1; Title.Text="COMBAT HUB"; Title.TextColor3=T.txt; Title.Font=Enum.Font.GothamBold; Title.TextSize=15; Title.TextXAlignment=Enum.TextXAlignment.Left local Ver=Instance.new("TextLabel",Top); Ver.Size=UDim2.new(0,48,0,18); Ver.Position=UDim2.new(0,160,0.5,-9); Ver.BackgroundColor3=T.p2; Ver.Text="ALL"; Ver.TextColor3=T.acc; Ver.Font=Enum.Font.GothamBold; Ver.TextSize=11; corner(Ver,4) local Close=Instance.new("TextButton",Top); Close.Size=UDim2.new(0,28,0,28); Close.Position=UDim2.new(1,-36,0.5,-14); Close.BackgroundColor3=T.p2; Close.Text="x"; Close.TextColor3=T.dim; Close.Font=Enum.Font.GothamBold; Close.TextSize=16; corner(Close,6) connect(Close.MouseButton1Click,function() Main.Visible=false end) local Side=Instance.new("ScrollingFrame",Main); Side.Size=UDim2.new(0,150,1,-44); Side.Position=UDim2.new(0,0,0,44); Side.BackgroundColor3=T.panel; Side.BorderSizePixel=0; Side.ScrollBarThickness=2; Side.CanvasSize=UDim2.new(0,0,0,400) local SideList=Instance.new("UIListLayout",Side); SideList.Padding=UDim.new(0,4); local SidePad=Instance.new("UIPadding",Side); SidePad.PaddingTop=UDim.new(0,10); SidePad.PaddingLeft=UDim.new(0,8); SidePad.PaddingRight=UDim.new(0,8) local Content=Instance.new("Frame",Main); Content.Size=UDim2.new(1,-150,1,-44); Content.Position=UDim2.new(0,150,0,44); Content.BackgroundColor3=T.bg; Content.BorderSizePixel=0; Content.ClipsDescendants=true local PageTitle=Instance.new("TextLabel",Content); PageTitle.Size=UDim2.new(1,-24,0,22); PageTitle.Position=UDim2.new(0,16,0,10); PageTitle.BackgroundTransparency=1; PageTitle.Text="Aim"; PageTitle.TextColor3=T.txt; PageTitle.Font=Enum.Font.GothamBold; PageTitle.TextSize=18; PageTitle.TextXAlignment=Enum.TextXAlignment.Left local PageDesc=Instance.new("TextLabel",Content); PageDesc.Size=UDim2.new(1,-24,0,14); PageDesc.Position=UDim2.new(0,16,0,32); PageDesc.BackgroundTransparency=1; PageDesc.Text=""; PageDesc.TextColor3=T.mut; PageDesc.Font=Enum.Font.Gotham; PageDesc.TextSize=11; PageDesc.TextXAlignment=Enum.TextXAlignment.Left local Scroll=Instance.new("ScrollingFrame",Content); Scroll.Size=UDim2.new(1,0,1,-52); Scroll.Position=UDim2.new(0,0,0,52); Scroll.BackgroundTransparency=1; Scroll.BorderSizePixel=0; Scroll.ScrollBarThickness=3; Scroll.AutomaticCanvasSize=Enum.AutomaticSize.Y; Scroll.CanvasSize=UDim2.new(0,0,0,0) local SPad=Instance.new("UIPadding",Scroll); SPad.PaddingLeft=UDim.new(0,14); SPad.PaddingRight=UDim.new(0,14); SPad.PaddingBottom=UDim.new(0,16); SPad.PaddingTop=UDim.new(0,4) local SList=Instance.new("UIListLayout",Scroll); SList.Padding=UDim.new(0,10); SList.SortOrder=Enum.SortOrder.LayoutOrder local cats={ {id="aim",n="Aim",d="Aimbot, silent, assist, FOV, filters"}, {id="rage",n="Rage",d="Triggerbot, aura, hitbox, perfect nade"}, {id="legit",n="Legit",d="Recoil, spread, reload, crouch/stop on shoot"}, {id="visuals",n="Visuals",d="ESP, radar, grenade arc, watermark"}, {id="move",n="Move",d="Speed, fly, jiggle peek, parkour"}, {id="player",n="Player",d="God, heal, inspect on kill, anti-aim"}, {id="world",n="World",d="Lighting, FOV, freecam"}, {id="util",n="Util",d="Auto rejoin, server hop, panic"}, {id="social",n="Social",d="Chat spam, emotes on kill"}, {id="config",n="Configs",d="Save, load, import, export, auto execute"}, } local pages, sideBtns, cur, ord = {}, {}, nil, {} local function nord(p) ord[p]=(ord[p] or 0)+1; return ord[p] end for i,c in ipairs(cats) do local b=Instance.new("TextButton",Side); b.Size=UDim2.new(1,0,0,32); b.BackgroundColor3=T.p2; b.BackgroundTransparency=1; b.Text=""; b.LayoutOrder=i; corner(b,8) local lab=Instance.new("TextLabel",b); lab.Name="L"; lab.Size=UDim2.new(1,-12,1,0); lab.Position=UDim2.new(0,10,0,0); lab.BackgroundTransparency=1; lab.Text=c.n; lab.TextColor3=T.dim; lab.Font=Enum.Font.GothamMedium; lab.TextSize=13; lab.TextXAlignment=Enum.TextXAlignment.Left sideBtns[c.id]=b local page=Instance.new("Frame",Scroll); page.Name=c.id; page.Size=UDim2.new(1,0,0,0); page.AutomaticSize=Enum.AutomaticSize.Y; page.BackgroundTransparency=1; page.Visible=false; page.LayoutOrder=1 local pl=Instance.new("UIListLayout",page); pl.Padding=UDim.new(0,10); pl.SortOrder=Enum.SortOrder.LayoutOrder pages[c.id]=page connect(b.MouseButton1Click,function() cur=c.id; PageTitle.Text=c.n; PageDesc.Text=c.d for id,pg in pairs(pages) do pg.Visible=(id==c.id) end for id,btn in pairs(sideBtns) do local on=id==c.id; btn.BackgroundTransparency=on and 0 or 1; btn.BackgroundColor3=T.p2; btn.L.TextColor3=on and T.txt or T.dim end end) end Side.CanvasSize=UDim2.new(0,0,0,#cats*36+20) local function card(page,title,sub) local c=Instance.new("Frame",page); c.Size=UDim2.new(1,0,0,0); c.AutomaticSize=Enum.AutomaticSize.Y; c.BackgroundColor3=T.card; c.BorderSizePixel=0; c.LayoutOrder=nord(page); corner(c,10); stroke(c) local p=Instance.new("UIPadding",c); p.PaddingTop=UDim.new(0,10); p.PaddingBottom=UDim.new(0,10); p.PaddingLeft=UDim.new(0,12); p.PaddingRight=UDim.new(0,12) local l=Instance.new("UIListLayout",c); l.Padding=UDim.new(0,6); l.SortOrder=Enum.SortOrder.LayoutOrder local h=Instance.new("TextLabel",c); h.Size=UDim2.new(1,0,0,16); h.BackgroundTransparency=1; h.Text=title; h.TextColor3=T.txt; h.Font=Enum.Font.GothamBold; h.TextSize=13; h.TextXAlignment=Enum.TextXAlignment.Left; h.LayoutOrder=0 if sub then local s=Instance.new("TextLabel",c); s.Size=UDim2.new(1,0,0,12); s.BackgroundTransparency=1; s.Text=sub; s.TextColor3=T.mut; s.Font=Enum.Font.Gotham; s.TextSize=10; s.TextXAlignment=Enum.TextXAlignment.Left; s.LayoutOrder=0 end local d=Instance.new("Frame",c); d.Size=UDim2.new(1,0,0,1); d.BackgroundColor3=T.stroke; d.BorderSizePixel=0; d.LayoutOrder=1 return c end local modulePanels={} local settingsOwner={ StickyAim="Aimbot",HeadOnly="Aimbot",Humanize="Aimbot",Jitter="Humanize", FOV="Aimbot",DynFOV="Aimbot",DynFOVAdd="DynFOV",Smooth="Aimbot",Prediction="Aimbot", AssistStr="AimAssist",MagnetStr="MagnetAim",HitChance="SilentAim",MaxDist="Aimbot", SwitchDelay="Aimbot",SnapBlend="Aimbot",HipfireSmooth="Aimbot",AimMethod="Aimbot", TeamCheck="Aimbot",WallCheck="Aimbot",VisibleOnly="Aimbot",IgnoreFriends="Aimbot", IgnoreDowned="Aimbot",ADSOnly="Aimbot",FirstBullet="Aimbot",Priority="Aimbot", LockPart="Aimbot",AimMode="Aimbot",ShowFOV="Aimbot",AimKey="Aimbot", SilentFovOnly="SilentAim", TriggerDelay="Triggerbot",TriggerRange="Triggerbot", AutoShootDelay="AutoShoot", DoubleTapDelay="DoubleTap", AuraRange="KillAura",CloseRange="ForceHeadClose",HitboxSize="Hitbox", LockPitch="AntiRecoil",VStr="AntiRecoil",HStr="AntiRecoil",Pattern="AntiRecoil", PatternScale="Pattern",PatternCap="Pattern",RCSAfter="AntiRecoil", SpeedVal="Speed",FlySpeed="Fly",JumpVal="JumpPow",DashPower="Dash", OrbitSpd="Orbit",OrbitRng="Orbit",SpinSpd="Spinbot",TimeVal="TimeChanger", FOVVal="CustomFOV",ChatDelay="ChatSpam", ChamsFill="Chams",ChamsOutline="Chams", CrosshairSize="Crosshair",CrosshairGap="Crosshair", RadarScale="Radar", ESPMaxDist="NameESP", HitMarkerSize="HitMarker",HitMarkerTime="HitMarker", BulletTraceTime="BulletTrace", AutoReloadKey="AutoReload", ARMode="AntiRecoil",ARSmooth="AntiRecoil",AROnlyShoot="AntiRecoil",ARReset="AntiRecoil", BoxThickness="BoxESP",TracerThickness="Tracers",TracerOrigin="Tracers", NameSize="NameESP",ESPTextOutline="NameESP",HPBar="HPESP",HPBarH="HPESP", ChamsDepth="Chams",ESPTeamColor="Chams",RainbowESP="Chams",RainbowSpeed="Chams", RadarSize="Radar",RadarPosX="Radar",RadarPosY="Radar", GrenTrajAlways="GrenadeTraj",GrenTrajSteps="GrenadeTraj",GrenTrajTime="GrenadeTraj", GrenGravity="GrenadeTraj",GrenSpeed="GrenadeTraj",GrenUp="GrenadeTraj", GrenThickness="GrenadeTraj",GrenBounce="GrenadeTraj",GrenMaxBounces="GrenadeTraj", PerfectThrowAuto="PerfectThrow",PerfectThrowLead="PerfectThrow",PerfectThrowSmooth="PerfectThrow", PerfectThrowHeight="PerfectThrow",PerfectThrowKey="PerfectThrow", CrouchKey="AutoCrouchShoot",StopMoveStrict="StopMoveShoot", JiggleKey="JigglePeek",JiggleMode="JigglePeek",JiggleSpeed="JigglePeek", JiggleDist="JigglePeek",JiggleADS="JigglePeek",JiggleShoot="JigglePeek", InspectKey="AutoInspect",InspectDelay="AutoInspect",InspectOnKill="AutoInspect", EmoteDelay="AutoEmote",EmoteKey="AutoEmote",EmoteOnKill="AutoEmote", RejoinDelay="AutoRejoin",RejoinSameServer="AutoRejoin",RejoinOnKick="AutoRejoin",RejoinOnLeave="AutoRejoin", } local function settingsParent(parent,key) return modulePanels[settingsOwner[key]] or parent end local function tog(parent,name,key,cb) if key=="God" or key=="AutoHeal" then name=name.." (local only)" end if cb then configCallbacks[key]=cb end parent=settingsParent(parent,key) local wrapper=Instance.new("Frame",parent) wrapper.Name="Module_"..key; wrapper.Size=UDim2.new(1,0,0,0); wrapper.AutomaticSize=Enum.AutomaticSize.Y wrapper.BackgroundTransparency=1; wrapper.LayoutOrder=nord(parent) local layout=Instance.new("UIListLayout",wrapper); layout.SortOrder=Enum.SortOrder.LayoutOrder; layout.Padding=UDim.new(0,4) local body=Instance.new("Frame",wrapper); body.Name="Settings"; body.Size=UDim2.new(1,0,0,0); body.AutomaticSize=Enum.AutomaticSize.Y; body.BackgroundTransparency=1; body.Visible=false; body.LayoutOrder=1 local bodyLayout=Instance.new("UIListLayout",body); bodyLayout.SortOrder=Enum.SortOrder.LayoutOrder; bodyLayout.Padding=UDim.new(0,6) local padding=Instance.new("UIPadding",body); padding.PaddingLeft=UDim.new(0,12); padding.PaddingBottom=UDim.new(0,6) modulePanels[key]=body local r=Instance.new("Frame",wrapper); r.Size=UDim2.new(1,0,0,28); r.BackgroundTransparency=1; r.LayoutOrder=0 local lab=Instance.new("TextLabel",r); lab.Size=UDim2.new(1,-82,1,0); lab.Position=UDim2.fromOffset(28,0); lab.BackgroundTransparency=1; lab.Text=name..(unsupported[key] and " (not implemented)" or ""); lab.TextColor3=unsupported[key] and T.mut or T.txt; lab.Font=Enum.Font.Gotham; lab.TextSize=12; lab.TextXAlignment=Enum.TextXAlignment.Left local track=Instance.new("Frame",r); track.Size=UDim2.new(0,36,0,18); track.Position=UDim2.new(1,-36,0.5,-9); track.BackgroundColor3=S[key] and T.acc or Color3.fromRGB(45,45,55); track.BorderSizePixel=0; corner(track,9) local knob=Instance.new("Frame",track); knob.Size=UDim2.new(0,14,0,14); knob.Position=S[key] and UDim2.new(1,-16,0.5,-7) or UDim2.new(0,2,0.5,-7); knob.BackgroundColor3=Color3.fromRGB(255,255,255); knob.BorderSizePixel=0; corner(knob,7) local b=Instance.new("TextButton",r); b.Size=UDim2.new(1,-28,1,0); b.Position=UDim2.fromOffset(28,0); b.BackgroundTransparency=1; b.Text="" local arrow=Instance.new("TextButton",r); arrow.Name="ExpandSettings"; arrow.Size=UDim2.fromOffset(24,24); arrow.Position=UDim2.new(0,0,0.5,-12); arrow.BackgroundTransparency=1; arrow.Text=">"; arrow.TextColor3=T.acc; arrow.Font=Enum.Font.GothamBold; arrow.TextSize=16 connect(arrow.MouseButton1Click,function() body.Visible=not body.Visible; arrow.Rotation=body.Visible and 90 or 0 end) table.insert(configRefresh,function() track.BackgroundColor3=S[key] and T.acc or Color3.fromRGB(45,45,55); knob.Position=S[key] and UDim2.new(1,-16,0.5,-7) or UDim2.new(0,2,0.5,-7) end) connect(b.MouseButton1Click,function() if unsupported[key] then return end; S[key]=not S[key]; if not S[key] then restoreModule(key) end; if key=="NoParticles" then particlesApplied=false end; track.BackgroundColor3=S[key] and T.acc or Color3.fromRGB(45,45,55); knob.Position=S[key] and UDim2.new(1,-16,0.5,-7) or UDim2.new(0,2,0.5,-7); if cb then cb(S[key]) end end) bindTip(r, name) end local function slider(parent,name,key,min,max,dec) if key=="RCSAfter" then name=name.." (not implemented)" end parent=settingsParent(parent,key) configRules[key]={min=min,max=max,dec=dec} local r=Instance.new("Frame",parent); r.Size=UDim2.new(1,0,0,40); r.BackgroundTransparency=1; r.LayoutOrder=nord(parent) local lab=Instance.new("TextLabel",r); lab.Size=UDim2.new(0.7,0,0,14); lab.BackgroundTransparency=1; lab.Text=name; lab.TextColor3=T.txt; lab.Font=Enum.Font.Gotham; lab.TextSize=12; lab.TextXAlignment=Enum.TextXAlignment.Left local function fmt(v) if dec>0 then return string.format("%."..dec.."f",v) end return tostring(math.floor(v+.5)) end local val=Instance.new("TextLabel",r); val.Size=UDim2.new(0.3,0,0,14); val.Position=UDim2.new(0.7,0,0,0); val.BackgroundTransparency=1; val.Text=fmt(S[key]); val.TextColor3=T.acc; val.Font=Enum.Font.GothamBold; val.TextSize=11; val.TextXAlignment=Enum.TextXAlignment.Right local bar=Instance.new("Frame",r); bar.Size=UDim2.new(1,0,0,7); bar.Position=UDim2.new(0,0,0,22); bar.BackgroundColor3=Color3.fromRGB(40,40,52); bar.BorderSizePixel=0; corner(bar,4) local fill=Instance.new("Frame",bar); local pct=(S[key]-min)/(max-min); fill.Size=UDim2.new(pct,0,1,0); fill.BackgroundColor3=T.acc; fill.BorderSizePixel=0; corner(fill,4) table.insert(configRefresh,function() fill.Size=UDim2.new(math.clamp((S[key]-min)/(max-min),0,1),0,1,0); val.Text=fmt(S[key]) end) local hold=false local function upd(x) if key=="RCSAfter" then return end local rel=math.clamp((x-bar.AbsolutePosition.X)/math.max(bar.AbsoluteSize.X,1),0,1) local v=min+(max-min)*rel; if dec==0 then v=math.floor(v+.5) else v=math.floor(v*10^dec+.5)/10^dec end S[key]=v; fill.Size=UDim2.new(rel,0,1,0); val.Text=fmt(v) end connect(bar.InputBegan,function(i) if i.UserInputType==Enum.UserInputType.MouseButton1 then hold=true; upd(i.Position.X) end end) connect(UIS.InputChanged,function(i) if hold and i.UserInputType==Enum.UserInputType.MouseMovement then upd(i.Position.X) end end) connect(UIS.InputEnded,function(i) if i.UserInputType==Enum.UserInputType.MouseButton1 then hold=false end end) bindTip(r, name) end local function drop(parent,name,key,options) parent=settingsParent(parent,key) configRules[key]={options=options} local r=Instance.new("Frame",parent); r.Size=UDim2.new(1,0,0,28); r.BackgroundTransparency=1; r.LayoutOrder=nord(parent) local lab=Instance.new("TextLabel",r); lab.Size=UDim2.new(0.5,0,1,0); lab.BackgroundTransparency=1; lab.Text=name; lab.TextColor3=T.txt; lab.Font=Enum.Font.Gotham; lab.TextSize=12; lab.TextXAlignment=Enum.TextXAlignment.Left local b=Instance.new("TextButton",r); b.Size=UDim2.new(0,120,0,24); b.Position=UDim2.new(1,-120,0.5,-12); b.BackgroundColor3=T.p2; b.Text=tostring(S[key]).." ▾"; b.TextColor3=T.txt; b.Font=Enum.Font.GothamBold; b.TextSize=11; corner(b,6) local idx=table.find(options,S[key]) or 1 table.insert(configRefresh,function() idx=table.find(options,S[key]) or 1; b.Text=tostring(S[key]).." ▾" end) connect(b.MouseButton1Click,function() idx=(idx%#options)+1; S[key]=options[idx]; if key=="LockPart" then S.HeadOnly=(S[key]=="Head"); for _,refresh in ipairs(configRefresh) do pcall(refresh) end end; b.Text=tostring(S[key]).." ▾" end) bindTip(r, name) end local function keybind(parent,name,setFn,defaultText,configKey) parent=settingsParent(parent,configKey) local r=Instance.new("Frame",parent); r.Size=UDim2.new(1,0,0,28); r.BackgroundTransparency=1; r.LayoutOrder=nord(parent) local lab=Instance.new("TextLabel",r); lab.Size=UDim2.new(0.5,0,1,0); lab.BackgroundTransparency=1; lab.Text=name; lab.TextColor3=T.txt; lab.Font=Enum.Font.Gotham; lab.TextSize=12; lab.TextXAlignment=Enum.TextXAlignment.Left local b=Instance.new("TextButton",r); b.Size=UDim2.new(0,120,0,24); b.Position=UDim2.new(1,-120,0.5,-12); b.BackgroundColor3=T.p2; b.Text=defaultText; b.TextColor3=T.acc; b.Font=Enum.Font.GothamBold; b.TextSize=11; corner(b,6) local listen=false if configKey then table.insert(configRefresh,function() listen=false; bindingCapture=false; b.Text=S[configKey].Name end) end connect(b.MouseButton1Click,function() if cancelCapture then cancelCapture() end listen=true; bindingCapture=true; b.Text="..." cancelCapture=function() listen=false; bindingCapture=false; b.Text=configKey and S[configKey].Name or defaultText end end) connect(UIS.InputBegan,function(i) if not listen then return end if configKey=="PanicKey" and i.UserInputType~=Enum.UserInputType.Keyboard then return end if i.KeyCode==Enum.KeyCode.Escape then listen=false; b.Text=configKey and S[configKey].Name or defaultText; task.defer(function() bindingCapture=false end); return end if i.UserInputType==Enum.UserInputType.Keyboard then listen=false; b.Text=i.KeyCode.Name; setFn(i.KeyCode,false); task.defer(function() bindingCapture=false end) elseif i.UserInputType==Enum.UserInputType.MouseButton1 or i.UserInputType==Enum.UserInputType.MouseButton2 then listen=false; b.Text=i.UserInputType.Name; setFn(i.UserInputType,true); task.defer(function() bindingCapture=false end) end end) bindTip(r, name) end local function btn(parent,name,fn,danger) local r=Instance.new("Frame",parent); r.Size=UDim2.new(1,0,0,32); r.BackgroundTransparency=1; r.LayoutOrder=nord(parent) local b=Instance.new("TextButton",r); b.Size=UDim2.new(1,0,1,0); b.BackgroundColor3=danger and T.bad or T.p2; b.Text=name; b.TextColor3=T.txt; b.Font=Enum.Font.GothamBold; b.TextSize=12; corner(b,8) connect(b.MouseButton1Click,fn) bindTip(r, name) end -- AIM do local p=pages.aim local c=card(p,"Targeting","Main aim modules") tog(c,"Aimbot","Aimbot",function(v) if not v then S.AimOn=false end end) tog(c,"Silent Aim","SilentAim") tog(c,"Aim Assist","AimAssist") tog(c,"Magnet Aim","MagnetAim") tog(c,"Sticky Aim","StickyAim") tog(c,"Head Only","HeadOnly") tog(c,"Humanize / Jitter","Humanize") slider(c,"Jitter Amount","Jitter",0,2,1) local c2=card(p,"Values","") slider(c2,"FOV","FOV",40,400,0) tog(c2,"Dynamic FOV","DynFOV") slider(c2,"Dynamic FOV Add","DynFOVAdd",0,120,0) slider(c2,"Smoothness","Smooth",0.05,1,2) slider(c2,"Prediction","Prediction",0,0.4,2) slider(c2,"Assist Strength","AssistStr",0.02,0.3,2) slider(c2,"Magnet Strength","MagnetStr",0.1,0.8,2) slider(c2,"Hit Chance %","HitChance",1,100,0) tog(c2,"Silent FOV Only","SilentFovOnly") slider(c2,"Max Distance","MaxDist",50,4000,0) slider(c2,"Switch Delay","SwitchDelay",0,0.5,2) slider(c2,"Snap Blend","SnapBlend",0,1,2) slider(c2,"Hipfire Smoothness","HipfireSmooth",0.05,1,2) drop(c2,"Aim Method","AimMethod",{"Camera","Mouse"}) local c3=card(p,"Filters","") tog(c3,"Team Check","TeamCheck") tog(c3,"Wall Check","WallCheck") tog(c3,"Visible Only","VisibleOnly") tog(c3,"Ignore Friends","IgnoreFriends") tog(c3,"Ignore Downed","IgnoreDowned") tog(c3,"ADS Only","ADSOnly") tog(c3,"First Bullet Accuracy","FirstBullet") drop(c3,"Priority","Priority",{"Crosshair","Distance","LowestHP"}) drop(c3,"Lock Part","LockPart",{"Head","Torso","Random"}) drop(c3,"Aim Mode","AimMode",{"Hold","Toggle"}) tog(c3,"Show FOV","ShowFOV") keybind(c3,"Aim Key",function(k,m) S.AimKey=k; S.AimKeyMouse=m end,"MouseButton2","AimKey") end -- RAGE do local p=pages.rage local c=card(p,"Combat","") tog(c,"Triggerbot","Triggerbot") slider(c,"Trigger Delay","TriggerDelay",0.02,0.25,2) slider(c,"Trigger Range","TriggerRange",5,80,0) tog(c,"Auto Shoot","AutoShoot") slider(c,"Auto Shoot Delay","AutoShootDelay",0.02,0.25,2) tog(c,"Double Tap","DoubleTap") slider(c,"Double Tap Delay","DoubleTapDelay",0.02,0.15,2) tog(c,"Kill Aura","KillAura") slider(c,"Aura Range","AuraRange",5,40,0) tog(c,"Melee Aimbot","MeleeAim") tog(c,"Force Head Close","ForceHeadClose") slider(c,"Close Range","CloseRange",5,60,0) tog(c,"Auto Wall (soft)","AutoWall") local c2=card(p,"Hitbox","") tog(c2,"Hitbox Expand","Hitbox") slider(c2,"Hitbox Size","HitboxSize",2,30,0) local c3=card(p,"Grenades","") tog(c3,"Perfect Grenade Throw","PerfectThrow") tog(c3,"Auto On Nade","PerfectThrowAuto") slider(c3,"Target Lead","PerfectThrowLead",0,0.5,2) slider(c3,"Aim Smooth","PerfectThrowSmooth",0.05,1,2) slider(c3,"Land Height","PerfectThrowHeight",0,8,1) keybind(c3,"Throw Aim Key",function(k,m) S.PerfectThrowKey=k end,"MouseButton1","PerfectThrowKey") end -- LEGIT do local p=pages.legit local c=card(p,"Recoil","") tog(c,"Anti Recoil","AntiRecoil") drop(c,"AR Mode","ARMode",{"Camera","Mouse","Both"}) slider(c,"AR Smooth","ARSmooth",0.2,1,2) tog(c,"Only While Shooting","AROnlyShoot") slider(c,"Reset Delay","ARReset",0.05,1,2) tog(c,"Lock Pitch","LockPitch") slider(c,"Vertical Strength","VStr",0,15,1) slider(c,"Horizontal Strength","HStr",0,10,1) tog(c,"Pattern Ramp","Pattern") slider(c,"Pattern Scale","PatternScale",0.01,0.5,2) slider(c,"Pattern Cap","PatternCap",1,8,1) slider(c,"RCS After Shots","RCSAfter",0,10,0) local c2=card(p,"Weapon","") tog(c2,"No Spread","NoSpread") tog(c2,"Rapid Fire","RapidFire") tog(c2,"Auto Reload","AutoReload") keybind(c2,"Reload Key",function(k) if typeof(k)=="EnumItem" and k.EnumType==Enum.KeyCode then S.AutoReloadKey=k end end,"R","AutoReloadKey") tog(c2,"Infinite Ammo","InfAmmo") tog(c2,"Auto Crouch On Shoot","AutoCrouchShoot") keybind(c2,"Crouch Key",function(k) if typeof(k)=="EnumItem" and k.EnumType==Enum.KeyCode then S.CrouchKey=k end end,"LeftShift","CrouchKey") tog(c2,"Stop Move On Shoot","StopMoveShoot") tog(c2,"Hard Stop (zero vel)","StopMoveStrict") end -- VISUALS do local p=pages.visuals local c=card(p,"ESP","") tog(c,"Chams","Chams") slider(c,"Chams Fill","ChamsFill",0,1,2) slider(c,"Chams Outline","ChamsOutline",0,1,2) tog(c,"Name ESP","NameESP") tog(c,"Distance ESP","DistESP") tog(c,"Health ESP","HPESP") tog(c,"Weapon ESP","WeaponESP") tog(c,"Box ESP","BoxESP") tog(c,"Tracers","Tracers") tog(c,"Radar","Radar") slider(c,"Radar Scale","RadarScale",1,5,1) slider(c,"ESP Max Dist","ESPMaxDist",50,4000,0) local c2=card(p,"Feedback","") tog(c2,"Hit Markers","HitMarker") slider(c2,"Hit Marker Size","HitMarkerSize",8,40,0) slider(c2,"Hit Marker Time","HitMarkerTime",0.05,0.4,2) tog(c2,"Damage Numbers","DmgNum") tog(c2,"Bullet Tracers","BulletTrace") slider(c2,"Trace Time","BulletTraceTime",0.05,0.5,2) tog(c2,"Crosshair","Crosshair") slider(c2,"Crosshair Size","CrosshairSize",2,20,0) slider(c2,"Crosshair Gap","CrosshairGap",0,12,0) tog(c2,"Watermark","Watermark") local c3=card(p,"ESP Style","") slider(c3,"Box Thickness","BoxThickness",1,4,1) slider(c3,"Tracer Thickness","TracerThickness",1,4,1) drop(c3,"Tracer Origin","TracerOrigin",{"Bottom","Center","Top"}) slider(c3,"Name Size","NameSize",10,20,0) tog(c3,"Text Outline","ESPTextOutline") tog(c3,"Health Bar","HPBar") slider(c3,"HP Bar Height","HPBarH",2,8,0) drop(c3,"Chams Depth","ChamsDepth",{"Always","Occluded"}) tog(c3,"Team Color ESP","ESPTeamColor") tog(c3,"Rainbow ESP","RainbowESP") slider(c3,"Rainbow Speed","RainbowSpeed",0.1,2,1) slider(c3,"Radar Size","RadarSize",80,220,0) slider(c3,"Radar Offset X","RadarPosX",10,400,0) slider(c3,"Radar Offset Y","RadarPosY",10,400,0) local c4=card(p,"Grenade Trajectory","Predict throw arc") tog(c4,"Grenade Trajectory","GrenadeTraj") tog(c4,"Always Show","GrenTrajAlways") slider(c4,"Sim Steps","GrenTrajSteps",10,80,0) slider(c4,"Step Time","GrenTrajTime",0.02,0.12,2) slider(c4,"Gravity","GrenGravity",50,400,1) slider(c4,"Throw Speed","GrenSpeed",40,200,0) slider(c4,"Up Boost","GrenUp",0,80,0) slider(c4,"Line Thickness","GrenThickness",1,5,0) tog(c4,"Simulate Bounce","GrenBounce") slider(c4,"Max Bounces","GrenMaxBounces",0,5,0) local c6=card(p,"Grenade Auto Setup","Watch a real throw and tune both modules") btn(c6,"Auto Find Perfect Settings",function() startGrenadeCalibrate() end) local calibLab=Instance.new("TextLabel",c6) calibLab.Name="CalibStatus" calibLab.Size=UDim2.new(1,0,0,28) calibLab.BackgroundTransparency=1 calibLab.TextColor3=T.dim calibLab.Font=Enum.Font.Gotham calibLab.TextSize=11 calibLab.TextWrapped=true calibLab.TextXAlignment=Enum.TextXAlignment.Left calibLab.Text="Idle — equip a grenade, press button, then throw once" calibLab.LayoutOrder=nord(c6) _G.CombatHubCalibLabel = calibLab btn(c6,"Apply FPS Preset (196 gravity)",function() S.GrenGravity=196.2; S.GrenSpeed=100; S.GrenUp=20; S.GrenTrajTime=0.05; S.GrenTrajSteps=40 S.PerfectThrowLead=0.15; S.PerfectThrowHeight=2 for _,fn in ipairs(configRefresh) do pcall(fn) end if _G.CombatHubCalibLabel then _G.CombatHubCalibLabel.Text="Applied FPS preset (196.2 / 100 / 20)" _G.CombatHubCalibLabel.TextColor3=T.ok end end) btn(c6,"Apply Soft Preset (120 gravity)",function() S.GrenGravity=120; S.GrenSpeed=85; S.GrenUp=28; S.GrenTrajTime=0.05; S.GrenTrajSteps=45 S.PerfectThrowLead=0.12; S.PerfectThrowHeight=2.5 for _,fn in ipairs(configRefresh) do pcall(fn) end if _G.CombatHubCalibLabel then _G.CombatHubCalibLabel.Text="Applied soft preset (120 / 85 / 28)" _G.CombatHubCalibLabel.TextColor3=T.ok end end) end -- MOVE do local p=pages.move local c=card(p,"Speed / Fly","") tog(c,"Speed","Speed"); slider(c,"Speed Value","SpeedVal",16,200,0) tog(c,"Fly","Fly",function(v) if not v and BV then BV:Destroy() BV=nil end if not v and BG then BG:Destroy() BG=nil end end) slider(c,"Fly Speed","FlySpeed",20,200,0) local c2=card(p,"Parkour","") tog(c2,"Inf Jump","InfJump"); tog(c2,"Bhop","Bhop"); tog(c2,"Edge Jump","EdgeJump") tog(c2,"Jump Power","JumpPow"); slider(c2,"Jump Value","JumpVal",50,300,0) tog(c2,"Long Jump","LongJump"); tog(c2,"Air Strafe","AirStrafe"); tog(c2,"Crouch Spam","CrouchSpam") tog(c2,"Noclip","Noclip"); tog(c2,"Dash (Q)","Dash"); slider(c2,"Dash Power","DashPower",20,150,0) local c3=card(p,"Position","") tog(c3,"Orbit","Orbit"); slider(c3,"Orbit Speed","OrbitSpd",1,30,0); slider(c3,"Orbit Range","OrbitRng",3,25,0) tog(c3,"Jiggle Peek","JigglePeek") keybind(c3,"Jiggle Key",function(k) if typeof(k)=="EnumItem" then S.JiggleKey=k end end,"LeftAlt","JiggleKey") drop(c3,"Jiggle Mode","JiggleMode",{"Hold","Toggle"}) slider(c3,"Jiggle Speed","JiggleSpeed",4,30,0) slider(c3,"Jiggle Distance","JiggleDist",0.5,6,1) tog(c3,"Only While ADS","JiggleADS") tog(c3,"Allow While Shooting","JiggleShoot") tog(c3,"Click TP","ClickTP") btn(c3,"TP Nearest Enemy",function() local best,bd=nil,math.huge for _,pl in ipairs(Players:GetPlayers()) do if pl~=LP and pl.Character and pl.Character:FindFirstChild("HumanoidRootPart") and LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then if S.TeamCheck and pl.Team and LP.Team and pl.Team==LP.Team then continue end local d=(pl.Character.HumanoidRootPart.Position-LP.Character.HumanoidRootPart.Position).Magnitude if d0 and #name<=48 and name:match("^[%w_-]+$"),"Profile names: letters, numbers, _ and - only") return "CombatHubConfigs/"..name..".json" end local function import(text) assert(#text<=262144,"Config exceeds 256 KB") local data=HS:JSONDecode(text) assert(type(data)=="table" and data.version==1 and type(data.settings)=="table","Invalid config or unsupported version") applyConfig(data.settings); HK=false; CT=nil end btn(c,"Save Profile",function() run(function() assert(type(writefile)=="function" and type(isfolder)=="function" and type(makefolder)=="function","File storage unavailable; use Export JSON") local target=path(); if not isfolder("CombatHubConfigs") then makefolder("CombatHubConfigs") end writefile(target,encodeConfig()); return "Profile saved" end) end) btn(c,"Load Profile",function() run(function() assert(type(readfile)=="function","File storage unavailable; use Import JSON") import(readfile(path())); return "Profile loaded" end) end) btn(c,"Export JSON",function() run(function() json.Text=encodeConfig(); return "JSON exported into the text box" end) end) btn(c,"Import JSON",function() run(function() import(json.Text); return "JSON imported" end) end) btn(c,"Reset Defaults",function() run(function() applyConfig({}); HK=false; CT=nil; return "Defaults restored" end) end) -- Auto Execute UI (additive) do local ae = card(pages.config, "Auto Execute", "Load a profile automatically when the script starts") local aeRow = Instance.new("Frame", ae) aeRow.Size = UDim2.new(1, 0, 0, 28) aeRow.BackgroundTransparency = 1 aeRow.LayoutOrder = nord(ae) local aeLab = Instance.new("TextLabel", aeRow) aeLab.Size = UDim2.new(1, -50, 1, 0) aeLab.BackgroundTransparency = 1 aeLab.Text = "Auto Execute on Inject" aeLab.TextColor3 = T.txt aeLab.Font = Enum.Font.Gotham aeLab.TextSize = 12 aeLab.TextXAlignment = Enum.TextXAlignment.Left local aeTrack = Instance.new("Frame", aeRow) aeTrack.Size = UDim2.new(0, 36, 0, 18) aeTrack.Position = UDim2.new(1, -36, 0.5, -9) aeTrack.BackgroundColor3 = autoExecEnabled and T.acc or Color3.fromRGB(45, 45, 55) aeTrack.BorderSizePixel = 0 corner(aeTrack, 9) local aeKnob = Instance.new("Frame", aeTrack) aeKnob.Size = UDim2.new(0, 14, 0, 14) aeKnob.Position = autoExecEnabled and UDim2.new(1, -16, 0.5, -7) or UDim2.new(0, 2, 0.5, -7) aeKnob.BackgroundColor3 = Color3.fromRGB(255, 255, 255) aeKnob.BorderSizePixel = 0 corner(aeKnob, 7) local aeHit = Instance.new("TextButton", aeRow) aeHit.Size = UDim2.new(1, 0, 1, 0) aeHit.BackgroundTransparency = 1 aeHit.Text = "" connect(aeHit.MouseButton1Click, function() autoExecEnabled = not autoExecEnabled aeTrack.BackgroundColor3 = autoExecEnabled and T.acc or Color3.fromRGB(45, 45, 55) aeKnob.Position = autoExecEnabled and UDim2.new(1, -16, 0.5, -7) or UDim2.new(0, 2, 0.5, -7) end) bindTip(aeRow, "Auto Execute on Inject") bindTip(aeProfile, "Profile name to auto-load") local aeNameLab = Instance.new("TextLabel", ae) aeNameLab.Size = UDim2.new(1, 0, 0, 14) aeNameLab.BackgroundTransparency = 1 aeNameLab.Text = "Profile name to auto-load" aeNameLab.TextColor3 = T.mut aeNameLab.Font = Enum.Font.Gotham aeNameLab.TextSize = 11 aeNameLab.TextXAlignment = Enum.TextXAlignment.Left aeNameLab.LayoutOrder = nord(ae) local aeProfile = Instance.new("TextBox", ae) aeProfile.Size = UDim2.new(1, 0, 0, 28) aeProfile.BackgroundColor3 = T.p2 aeProfile.TextColor3 = T.txt aeProfile.Font = Enum.Font.Code aeProfile.TextSize = 12 aeProfile.ClearTextOnFocus = false aeProfile.Text = autoExecProfile aeProfile.LayoutOrder = nord(ae) corner(aeProfile, 6) local aeStatus = Instance.new("TextLabel", ae) aeStatus.Size = UDim2.new(1, 0, 0, 28) aeStatus.BackgroundTransparency = 1 aeStatus.TextColor3 = T.dim aeStatus.Font = Enum.Font.Gotham aeStatus.TextSize = 11 aeStatus.TextWrapped = true aeStatus.Text = autoExecEnabled and ('ON → loads "' .. autoExecProfile .. '" next inject') or "OFF" aeStatus.LayoutOrder = nord(ae) btn(ae, "Save Auto Execute Settings", function() local name = aeProfile.Text:match("^%s*(.-)%s*$") or "" if not (#name > 0 and #name <= 48 and name:match("^[%w_-]+$")) then aeStatus.Text = "Error: bad profile name (letters, numbers, _, -)" aeStatus.TextColor3 = T.bad return end autoExecProfile = name local ok, err = saveAutoExecPrefs() if not ok then aeStatus.Text = "Error: " .. tostring(err) aeStatus.TextColor3 = T.bad return end aeStatus.Text = autoExecEnabled and ('ON → loads "' .. autoExecProfile .. '" next inject') or "OFF (prefs saved)" aeStatus.TextColor3 = T.ok end) end end sideBtns.aim.BackgroundTransparency=0; sideBtns.aim.L.TextColor3=T.txt; pages.aim.Visible=true; cur="aim"; PageTitle.Text="Aim"; PageDesc.Text=cats[1].d -- watermark local WM=Instance.new("TextLabel",Gui); WM.Size=UDim2.new(0,260,0,20); WM.Position=UDim2.new(0,10,0,10); WM.BackgroundTransparency=0.3; WM.BackgroundColor3=T.bg; WM.TextColor3=T.txt; WM.Font=Enum.Font.GothamBold; WM.TextSize=11; WM.TextXAlignment=Enum.TextXAlignment.Left; WM.Text=" COMBAT HUB | loading"; corner(WM,4) -- radar frame local RadarF=Instance.new("Frame",Gui); RadarF.Size=UDim2.new(0,140,0,140); RadarF.Position=UDim2.new(1,-160,0,20); RadarF.BackgroundColor3=Color3.fromRGB(10,10,14); RadarF.BackgroundTransparency=0.2; RadarF.BorderSizePixel=0; RadarF.Visible=false; corner(RadarF,8); stroke(RadarF) local RadarC=Instance.new("Frame",RadarF); RadarC.Size=UDim2.new(0,4,0,4); RadarC.Position=UDim2.new(0.5,-2,0.5,-2); RadarC.BackgroundColor3=T.acc; RadarC.BorderSizePixel=0; corner(RadarC,2) -- Hit marker + bullet trace helpers local hitMarkerGui, hitMarkerLine1, hitMarkerLine2 local function showHitMarker() pcall(function() if not hitMarkerGui or not hitMarkerGui.Parent then hitMarkerGui = Instance.new("ScreenGui") hitMarkerGui.Name = "CombatHub_HitMarker" hitMarkerGui.IgnoreGuiInset = true hitMarkerGui.ResetOnSpawn = false hitMarkerGui.DisplayOrder = 1000 hitMarkerGui.Parent = Gui.Parent local function mk() local f = Instance.new("Frame") f.BorderSizePixel = 0 f.BackgroundColor3 = Color3.fromRGB(255,255,255) f.AnchorPoint = Vector2.new(0.5,0.5) f.Parent = hitMarkerGui return f end hitMarkerLine1 = mk() hitMarkerLine2 = mk() end local size = S.HitMarkerSize or 18 local cam = workspace.CurrentCamera local c = cam and cam.ViewportSize/2 or Vector2.new(400,300) hitMarkerLine1.Size = UDim2.fromOffset(size, 2) hitMarkerLine2.Size = UDim2.fromOffset(size, 2) hitMarkerLine1.Position = UDim2.fromOffset(c.X, c.Y) hitMarkerLine2.Position = UDim2.fromOffset(c.X, c.Y) hitMarkerLine1.Rotation = 45 hitMarkerLine2.Rotation = -45 hitMarkerLine1.Visible = true hitMarkerLine2.Visible = true local life = S.HitMarkerTime or 0.12 task.delay(life, function() if hitMarkerLine1 then hitMarkerLine1.Visible = false end if hitMarkerLine2 then hitMarkerLine2.Visible = false end end) end) end local activeTraces = {} local function showBulletTrace(worldPos) pcall(function() local cam = workspace.CurrentCamera if not cam then return end local att0 = Instance.new("Attachment") local att1 = Instance.new("Attachment") local part = Instance.new("Part") part.Anchored = true part.CanCollide = false part.Transparency = 1 part.Size = Vector3.new(0.1,0.1,0.1) part.CFrame = CFrame.new(cam.CFrame.Position) part.Parent = workspace att0.Parent = part att1.WorldPosition = worldPos att1.Parent = part local beam = Instance.new("Beam") beam.Attachment0 = att0 beam.Attachment1 = att1 beam.Width0 = 0.15 beam.Width1 = 0.05 beam.Color = ColorSequence.new(S.ESPColor or Color3.fromRGB(255,60,80)) beam.FaceCamera = true beam.Parent = part table.insert(activeTraces, part) task.delay(S.BulletTraceTime or 0.15, function() pcall(function() part:Destroy() end) end) end) end -- Auto reload best-effort local lastReload = 0 local function tryAutoReload() if not S.AutoReload or S.Panic then return end if tick() - lastReload < 0.4 then return end local char = LP.Character local tool = char and char:FindFirstChildOfClass("Tool") if not tool then return end local need = false for _, v in ipairs(tool:GetDescendants()) do if v:IsA("IntValue") or v:IsA("NumberValue") then local n = v.Name:lower() if (n:find("ammo",1,true) or n:find("clip",1,true) or n:find("mag",1,true)) and v.Value <= 0 then need = true break end end end if need then lastReload = tick() pcall(function() if VIM then VIM:SendKeyEvent(true, S.AutoReloadKey or Enum.KeyCode.R, false, game) task.delay(0.05, function() pcall(function() VIM:SendKeyEvent(false, S.AutoReloadKey or Enum.KeyCode.R, false, game) end) end) end end) end end -- Auto crouch + stop move while shooting local crouchHeld = false local function updateShootStance() if S.Panic or not running then if crouchHeld then pcall(function() if VIM then VIM:SendKeyEvent(false, S.CrouchKey or Enum.KeyCode.LeftShift, false, game) end end) crouchHeld = false end return end local shooting = UIS:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) local char = LP.Character local hum = char and char:FindFirstChildOfClass("Humanoid") local hrp = char and char:FindFirstChild("HumanoidRootPart") if S.AutoCrouchShoot and shooting then if not crouchHeld then pcall(function() if VIM then VIM:SendKeyEvent(true, S.CrouchKey or Enum.KeyCode.LeftShift, false, game) end end) crouchHeld = true end if hum then pcall(function() hum.Crouching = true end) end elseif crouchHeld then pcall(function() if VIM then VIM:SendKeyEvent(false, S.CrouchKey or Enum.KeyCode.LeftShift, false, game) end end) crouchHeld = false end if S.StopMoveShoot and shooting and hum then hum:Move(Vector3.zero, false) if S.StopMoveStrict and hrp then local v = hrp.AssemblyLinearVelocity hrp.AssemblyLinearVelocity = Vector3.new(0, v.Y, 0) end if hum then setProperty("StopMoveShoot", hum, "WalkSpeed", 0) end elseif not shooting then restoreModule("StopMoveShoot") end end -- Grenade auto-calibrate: sample a real thrown projectile and fit gravity/speed local calibrating = false local calibConn = nil local calibSamples = {} local calibStart = 0 local function setCalibText(t, ok) local lab = rawget(_G, "CombatHubCalibLabel") if lab then lab.Text = t lab.TextColor3 = ok==true and T.ok or (ok==false and T.bad or T.dim) end end local function finishCalibrate(gravity, speed, upBoost) calibrating = false S.GrenAutoCalibrate = false if calibConn then pcall(function() calibConn:Disconnect() end) calibConn=nil end if gravity then S.GrenGravity = math.clamp(gravity, 40, 400) end if speed then S.GrenSpeed = math.clamp(speed, 30, 250) end if upBoost then S.GrenUp = math.clamp(upBoost, 0, 100) end -- tune related perfect-throw helpers for current values S.GrenTrajSteps = math.clamp(math.floor((S.GrenSpeed or 100) / 2), 24, 64) S.PerfectThrowLead = math.clamp((S.GrenSpeed or 100) / 700, 0.08, 0.35) for _,fn in ipairs(configRefresh) do pcall(fn) end setCalibText(string.format("Calibrated: g=%.1f speed=%.1f up=%.1f (applied to both modules)", S.GrenGravity, S.GrenSpeed, S.GrenUp), true) print(string.format("[combat hub] grenade calib g=%.2f speed=%.2f up=%.2f", S.GrenGravity, S.GrenSpeed, S.GrenUp)) end local function estimateFromSamples(samples) if #samples < 4 then return nil end -- samples: {t, pos} local t0 = samples[1].t local p0 = samples[1].pos -- initial velocity from early samples local early = samples[math.min(3, #samples)] local dt1 = early.t - t0 if dt1 <= 1e-3 then return nil end local v0 = (early.pos - p0) / dt1 local speed = Vector3.new(v0.X, 0, v0.Z).Magnitude local up = math.max(0, v0.Y) -- gravity from vertical motion: y = y0 + v0y*t - 0.5*g*t^2 local gSum, gN = 0, 0 for i=3,#samples do local t = samples[i].t - t0 if t > 0.05 then local y = samples[i].pos.Y - p0.Y -- y = v0y*t - 0.5*g*t^2 => g = 2*(v0y*t - y)/t^2 local g = 2 * (v0.Y * t - y) / (t * t) if g > 20 and g < 500 then gSum += g gN += 1 end end end if gN < 1 then return nil end return gSum / gN, speed, up end function startGrenadeCalibrate() if calibrating then setCalibText("Already calibrating — throw the grenade now", false) return end calibrating = true calibSamples = {} calibStart = tick() setCalibText("Calibrating… equip grenade and THROW once (4s window)", nil) local watched = {} if calibConn then pcall(function() calibConn:Disconnect() end) end calibConn = workspace.DescendantAdded:Connect(function(obj) if not calibrating then return end if not obj:IsA("BasePart") then return end local n = obj.Name:lower() local look = n:find("grenade",1,true) or n:find("nade",1,true) or n:find("projectile",1,true) or n:find("throw",1,true) or n:find("frag",1,true) or n:find("molotov",1,true) or n:find("flash",1,true) or n:find("smoke",1,true) or n:find("ball",1,true) -- also accept unanchored parts spawned near camera with velocity task.defer(function() if not calibrating or not obj.Parent then return end local ok,vel = pcall(function() return obj.AssemblyLinearVelocity end) if not ok or not vel then return end local cam = workspace.CurrentCamera if not cam then return end local near = (obj.Position - cam.CFrame.Position).Magnitude < 25 local moving = vel.Magnitude > 20 if (look or (near and moving and not obj.Anchored)) and not watched[obj] then watched[obj] = true setCalibText("Tracking projectile…", nil) local samples = {} local start = tick() local conn conn = RS.Heartbeat:Connect(function() if not obj.Parent or tick()-start > 2.5 then conn:Disconnect() local g,sp,up = estimateFromSamples(samples) if g then finishCalibrate(g, sp, up) else setCalibText("Track failed — try a longer open throw", false) calibrating = false end return end local ok2,pos = pcall(function() return obj.Position end) if ok2 then table.insert(samples, {t=tick(), pos=pos}) end end) end end) end) -- timeout task.delay(5, function() if calibrating then calibrating = false if calibConn then pcall(function() calibConn:Disconnect() end) calibConn=nil end setCalibText("Timed out — press again and throw quickly", false) end end) end -- Auto jiggle peek (fixed) local jiggleOn = false local jigglePhase = 0 local jiggleOrigin = nil local function jiggleActive() if not S.JigglePeek or S.Panic or not running then return false end if bindingCapture or UIS:GetFocusedTextBox() or pointerOverMenu() then return false end if S.JiggleADS and not UIS:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) then return false end if not S.JiggleShoot and UIS:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) then return false end local key = S.JiggleKey if S.JiggleMode == "Toggle" then return jiggleOn end if typeof(key)=="EnumItem" then if key.EnumType==Enum.KeyCode then return UIS:IsKeyDown(key) end if key.EnumType==Enum.UserInputType then return UIS:IsMouseButtonPressed(key) end end return UIS:IsKeyDown(Enum.KeyCode.LeftAlt) end local function updateJigglePeek(dt) local char = LP.Character local hum = char and char:FindFirstChildOfClass("Humanoid") local hrp = char and char:FindFirstChild("HumanoidRootPart") if not hum or not hrp then jiggleOrigin=nil return end if not jiggleActive() then jiggleOrigin = nil return end local cam = workspace.CurrentCamera if not cam then return end dt = math.clamp(dt or 1/60, 0, 0.1) if not jiggleOrigin then jiggleOrigin = hrp.Position jigglePhase = 0 end jigglePhase = jigglePhase + (S.JiggleSpeed or 12) * dt local side = math.sin(jigglePhase * math.pi * 2) -- full left-right cycle local right = Vector3.new(cam.CFrame.RightVector.X, 0, cam.CFrame.RightVector.Z) if right.Magnitude < 1e-3 then return end right = right.Unit local dist = S.JiggleDist or 2.5 -- target offset from origin along camera right local target = jiggleOrigin + right * (side * dist) local to = target - hrp.Position local flat = Vector3.new(to.X, 0, to.Z) local speed = math.max(hum.WalkSpeed, 18) * 1.35 if flat.Magnitude > 0.05 then local dir = flat.Unit hum:Move(dir, false) local v = hrp.AssemblyLinearVelocity hrp.AssemblyLinearVelocity = Vector3.new(dir.X * speed, v.Y, dir.Z * speed) else hum:Move(Vector3.zero, false) end -- slowly recenter origin so you can walk while jiggling jiggleOrigin = jiggleOrigin:Lerp(Vector3.new(hrp.Position.X, jiggleOrigin.Y, hrp.Position.Z), dt * 2) end -- Auto inspect / emote on kill local lastInspect, lastEmote = 0, 0 local lastKills = nil local healthCache = {} local recentCombat = {} -- player -> last time we aimed/shot near them local function pressKey(key, dur) if typeof(key)~="EnumItem" or key.EnumType~=Enum.KeyCode then return end pcall(function() if VIM then VIM:SendKeyEvent(true, key, false, game) task.delay(dur or 0.08, function() pcall(function() VIM:SendKeyEvent(false, key, false, game) end) end) end end) end local function doInspect() if not S.AutoInspect or S.Panic then return end local now = tick() if now - lastInspect < 0.2 then return end lastInspect = now local delay = S.InspectDelay or 0.35 task.delay(delay, function() if S.Panic or not S.AutoInspect then return end if UIS:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) then return end pressKey(S.InspectKey or Enum.KeyCode.F, 0.1) local char = LP.Character local tool = char and char:FindFirstChildOfClass("Tool") if tool then pcall(function() for _,v in ipairs(tool:GetDescendants()) do if v:IsA("BindableEvent") and v.Name:lower():find("inspect",1,true) then v:Fire(); break end end end) end end) end local function doEmote() if not S.AutoEmote or S.Panic then return end local now = tick() if now - lastEmote < 0.2 then return end lastEmote = now local delay = S.EmoteDelay or 0.6 task.delay(delay, function() if S.Panic or not S.AutoEmote then return end if UIS:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) then return end pressKey(S.EmoteKey or Enum.KeyCode.Period, 0.1) pcall(function() local char = LP.Character local animate = char and char:FindFirstChild("Animate") if animate then local emote = animate:FindFirstChild("PlayEmote") or animate:FindFirstChildWhichIsA("BindableFunction") if emote and emote:IsA("BindableFunction") then pcall(function() emote:Invoke("wave") end) end end end) end) end local function onGotKill() if S.InspectOnKill then doInspect() end if S.EmoteOnKill then doEmote() end end local function markCombat(player) if player and player ~= LP then recentCombat[player] = tick() end end local function updateInspectEmote() if S.Panic or not running then return end -- track combat via current aim target if CT and CT.Parent then local pl = Players:GetPlayerFromCharacter(CT.Parent) if pl then markCombat(pl) end end if UIS:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) then local cam = workspace.CurrentCamera if cam then local origin = cam.CFrame.Position for _,p in ipairs(Players:GetPlayers()) do if p ~= LP and p.Character then local root = p.Character:FindFirstChild("HumanoidRootPart") if root and (root.Position - origin).Magnitude < 120 then markCombat(p) end end end end end -- leaderstats kills pcall(function() local ls = LP:FindFirstChild("leaderstats") local kills = ls and (ls:FindFirstChild("Kills") or ls:FindFirstChild("Kill") or ls:FindFirstChild("Wipes")) if kills and (kills:IsA("IntValue") or kills:IsA("NumberValue")) then if lastKills ~= nil and kills.Value > lastKills then onGotKill() end lastKills = kills.Value end end) -- health drop to 0 while recently in combat with them for _,p in ipairs(Players:GetPlayers()) do if p ~= LP and p.Character then local hum = p.Character:FindFirstChildOfClass("Humanoid") if hum then local prev = healthCache[p] local hp = hum.Health if prev and prev > 0 and hp <= 0 then local t = recentCombat[p] if t and tick() - t < 8 then onGotKill() end end healthCache[p] = hp end else healthCache[p] = nil end end end connect(Players.PlayerRemoving, function(p) healthCache[p] = nil recentCombat[p] = nil end) -- Auto rejoin on kick / disconnect / accidental leave local function doRejoin(reason) if not S.AutoRejoin or rejoinScheduled then return end if intentionalLeave and not S.RejoinOnLeave then return end rejoinScheduled = true local delay = S.RejoinDelay or 2 print("[combat hub] auto-rejoin in "..tostring(delay).."s ("..tostring(reason)..")") task.delay(delay, function() pcall(function() if S.RejoinSameServer and savedJobId and #tostring(savedJobId) > 0 then TP:TeleportToPlaceInstance(savedPlaceId, savedJobId, LP) else TP:Teleport(savedPlaceId, LP) end end) task.delay(5, function() rejoinScheduled = false end) end) end pcall(function() local GuiService = game:GetService("GuiService") connect(GuiService.ErrorMessageChanged, function(msg) if not S.AutoRejoin or not S.RejoinOnKick then return end if msg and #tostring(msg) > 0 then doRejoin("error: "..tostring(msg):sub(1,80)) end end) end) pcall(function() connect(TP.TeleportInitFailed, function(player, result, err) if player ~= LP then return end if not S.AutoRejoin then return end rejoinScheduled = false doRejoin("teleport failed: "..tostring(err)) end) end) -- detect kick-style prompts in CoreGui pcall(function() local core = game:GetService("CoreGui") connect(core.DescendantAdded, function(obj) if not S.AutoRejoin or not S.RejoinOnKick then return end local n = obj.Name:lower() if n:find("error",1,true) or n:find("kick",1,true) or n:find("disconnect",1,true) or n:find("prompt",1,true) then local text = "" pcall(function() if obj:IsA("TextLabel") or obj:IsA("TextButton") then text = obj.Text:lower() end end) if text:find("kick") or text:find("disconnect") or text:find("lost connection") or text:find("same account") or text:find("error") then doRejoin("coregui: "..text:sub(1,60)) end end end) end) -- accidental leave / player removal pcall(function() connect(Players.PlayerRemoving, function(p) if p ~= LP then return end if not S.AutoRejoin then return end if intentionalLeave and not S.RejoinOnLeave then return end if S.RejoinOnLeave or S.RejoinOnKick then doRejoin("player removing") end end) end) -- network disconnect hint via LocalPlayer parent pcall(function() connect(LP.AncestryChanged, function(_, parent) if parent == nil and S.AutoRejoin then doRejoin("ancestry nil") end end) end) -- mark intentional leave when user hits unload/rejoin buttons we control local _oldDispose = dispose -- wrapped later if dispose exists; also hook REJOIN button is intentional -------------------------------------------------------------------- -- LOGIC -------------------------------------------------------------------- local friendshipCache={} local function alive(p) if not p or p==LP then return false end local char=p.Character local hum=char and char:FindFirstChildOfClass("Humanoid") if not hum or hum.Health<=0 then return false end if S.IgnoreDowned and hum.Health<=5 then return false end if S.TeamCheck and not p.Neutral and not LP.Neutral and p.Team and p.Team==LP.Team then return false end if S.IgnoreFriends then local cached=friendshipCache[p.UserId] if cached==nil then friendshipCache[p.UserId]="pending" task.spawn(function() local ok,result=pcall(function() return LP:IsFriendsWith(p.UserId) end) if running and p.Parent then friendshipCache[p.UserId]=ok and result or false end end) return false elseif cached=="pending" or cached==true then return false end end return true end connect(Players.PlayerRemoving,function(p) friendshipCache[p.UserId]=nil end) local function lineOfSight(part) if not part or not part.Parent then return false end local camera=workspace.CurrentCamera if not camera then return false end local origin=camera.CFrame.Position local direction=part.Position-origin local character=part:FindFirstAncestorOfClass("Model") or part.Parent if direction.Magnitude<0.001 then return true end local exclusions={camera} if LP.Character then table.insert(exclusions,LP.Character) end local params=RaycastParams.new() params.FilterType=Enum.RaycastFilterType.Exclude params.IgnoreWater=true for _=1,12 do params.FilterDescendantsInstances=exclusions local hit=workspace:Raycast(origin,direction,params) if not hit or hit.Instance:IsDescendantOf(character) then return true end local obstacle=hit.Instance if obstacle:IsA("BasePart") and obstacle.Transparency>=0.95 then table.insert(exclusions,obstacle) else return false end end return false end local function wallOk(part) local camera=workspace.CurrentCamera if not camera or not part or not part.Parent then return false end if S.VisibleOnly then local projected,onScreen=camera:WorldToViewportPoint(part.Position) if not onScreen or projected.Z<=0 then return false end end if S.WallCheck or S.VisibleOnly or S.AutoWall then return lineOfSight(part) end return true end local randomAimParts=setmetatable({},{__mode="k"}) local function aimPart(char) if not char then return nil end local root=char:FindFirstChild("HumanoidRootPart") local mine=LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") if S.ForceHeadClose and root and mine and (root.Position-mine.Position).Magnitude<=S.CloseRange then return char:FindFirstChild("Head") or root end if S.HeadOnly then return char:FindFirstChild("Head") or root end if S.LockPart=="Torso" then return char:FindFirstChild("UpperTorso") or char:FindFirstChild("Torso") or root end if S.LockPart=="Random" then local cached=randomAimParts[char] if cached and cached.Parent==char then return cached end local candidates={} for _,name in ipairs({"Head","UpperTorso","Torso","HumanoidRootPart"}) do local part=char:FindFirstChild(name); if part and part:IsA("BasePart") then table.insert(candidates,part) end end if #candidates>0 then local part=candidates[math.random(1,#candidates)]; randomAimParts[char]=part; return part end end return char:FindFirstChild("Head") or root end local function targetMetrics(part,camera,origin,root,fov) if not part or not part.Parent or not part:IsA("BasePart") then return nil end if root and (part.Position-root.Position).Magnitude>S.MaxDist then return nil end if not wallOk(part) then return nil end local point,onScreen=camera:WorldToViewportPoint(part.Position) if not onScreen or point.Z<=0 then return nil end local cross=(Vector2.new(point.X,point.Y)-origin).Magnitude if cross>fov then return nil end return cross end local function getTarget() local camera=workspace.CurrentCamera if not camera then CT=nil; return nil end Cam=camera local origin=aimPosition() local root=LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") local fov=S.FOV+(S.DynFOV and S.DynFOVAdd or 0) local current if CT and CT.Parent then local player=Players:GetPlayerFromCharacter(CT.Parent) if player and alive(player) then local part=aimPart(player.Character) if targetMetrics(part,camera,origin,root,fov) then current=part end end end if current and (S.StickyAim or os.clock()-lastSwitch0.001 then camera.CFrame=camera.CFrame:Lerp(CFrame.lookAt(camera.CFrame.Position,pos),alpha) end end end local function click() if not running or S.Panic or bindingCapture then return end local function single() if not running or S.Panic then return end if type(mouse1click)=="function" then pcall(mouse1click) else local point=aimPosition() if not VIM then return end local ok=pcall(function() VIM:SendMouseButtonEvent(point.X,point.Y,0,true,game,0) end) if ok then task.defer(function() pcall(function() VIM:SendMouseButtonEvent(point.X,point.Y,0,false,game,0) end) end) end end end single() if S.DoubleTap then task.delay(S.DoubleTapDelay or 0.04,single) end end pcall(function() if type(hookmetamethod)~="function" or type(checkcaller)~="function" then return end local old; old=hookmetamethod(game,"__index",function(self,key) if running and S.SilentAim and not S.Panic and not bindingCapture and not checkcaller() and typeof(self)=="Instance" and self:IsA("Mouse") and (key=="Hit" or key=="Target") then local chance=S.HitChance if S.FirstBullet and (not shootStart or tick()-shootStart < 0.05) then chance=100 end if math.random(1,100)<=chance then local t=CT if t and t.Parent then if S.SilentFovOnly then local cam=workspace.CurrentCamera if cam then local p,on=cam:WorldToViewportPoint(t.Position) local origin=aimPosition() local fov=S.FOV+(S.DynFOV and S.DynFOVAdd or 0) if not on or (Vector2.new(p.X,p.Y)-origin).Magnitude>fov then return old(self,key) end end end local cf=t.CFrame+(t.AssemblyLinearVelocity*S.Prediction) if key=="Hit" then return cf end if key=="Target" then return t end end end end return old(self,key) end) end) connect(RS.RenderStepped,function(dt) Cam=workspace.CurrentCamera; if not Cam then return end if S.Panic then WM.Visible=false; RadarF.Visible=false if FOVc then FOVc.Visible=false end for _,line in pairs(CH) do line.Visible=false end hideGrenTraj() return end if S.Watermark then WM.Visible=true WM.Text=string.format(" COMBAT HUB | %d fps | %d ms",math.floor(1/math.max(dt,0.001)),math.floor(LP:GetNetworkPing()*1000)) else WM.Visible=false end pcall(updateShootStance) pcall(function() updateJigglePeek(dt) end) pcall(updateInspectEmote) local fov=S.FOV+(S.DynFOV and S.DynFOVAdd or 0) if FOVc then local mp=aimPosition(); FOVc.Position=Vector2.new(mp.X,mp.Y); FOVc.Radius=fov; FOVc.Visible=S.ShowFOV and (S.Aimbot or S.AimAssist or S.SilentAim) and not S.Panic; FOVc.Color=CT and Color3.fromRGB(255,70,70) or Color3.fromRGB(255,255,255) end if CH[1] then local mp=aimPosition(); local s,g=S.CrosshairSize or 6,S.CrosshairGap or 3; local v=S.Crosshair CH[1].From=Vector2.new(mp.X-s-g,mp.Y) CH[1].To=Vector2.new(mp.X-g,mp.Y) CH[1].Visible=v CH[2].From=Vector2.new(mp.X+g,mp.Y) CH[2].To=Vector2.new(mp.X+s+g,mp.Y) CH[2].Visible=v CH[3].From=Vector2.new(mp.X,mp.Y-s-g) CH[3].To=Vector2.new(mp.X,mp.Y-g) CH[3].Visible=v CH[4].From=Vector2.new(mp.X,mp.Y+g) CH[4].To=Vector2.new(mp.X,mp.Y+s+g) CH[4].Visible=v end pcall(updateGrenadeTrajectory) pcall(function() updatePerfectThrow(dt) end) -- anti recoil (camera moves like mouse) local shooting = UIS:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) if S.AntiRecoil and not S.Panic and (not S.AROnlyShoot or shooting) and shooting then if not savedPitch then savedPitch=Cam.CFrame; shootStart=tick(); patternMul=1 end if S.Pattern then patternMul=math.min(S.PatternCap,patternMul+(S.PatternScale or 0.15)*dt*60) end local v = math.clamp((S.VStr or 2.4)*patternMul, 0, 20) local h = ((math.floor((tick()-(shootStart or tick()))*10)%2==0) and 1 or -1)*(S.HStr or 0.6)*patternMul local smooth = math.clamp(S.ARSmooth or 1, 0.2, 1) local mode = S.ARMode or "Camera" local skipAim = aimOn() or S.AimAssist if not skipAim then -- pixel deltas similar to mouse movement local dx = h * dt * 60 * smooth local dy = -v * dt * 60 * smooth if (mode=="Mouse" or mode=="Both") and type(mousemoverel)=="function" then mousemoverel(dx, dy) end if mode=="Camera" or mode=="Both" or type(mousemoverel)~="function" then -- convert mouse-like deltas into camera pitch/yaw (approx degrees) local sens = 0.0022 -- similar feel to mouse look local yaw = -dx * sens local pitch = -dy * sens local cf = Cam.CFrame local pos = cf.Position -- yaw around world up, pitch around camera right local rotated = CFrame.fromAxisAngle(Vector3.yAxis, yaw) * (cf - pos) rotated = CFrame.fromAxisAngle(rotated.RightVector, pitch) * rotated local look = rotated.LookVector if S.LockPitch and savedPitch then look = Vector3.new(look.X, savedPitch.LookVector.Y, look.Z) if look.Magnitude > 1e-4 then look = look.Unit end end Cam.CFrame = CFrame.new(pos, pos + look) end elseif S.LockPitch and savedPitch and not aimOn() then local look,pos,base=Cam.CFrame.LookVector,Cam.CFrame.Position,savedPitch.LookVector local flat=Vector3.new(look.X,0,look.Z) if flat.Magnitude>0.001 then Cam.CFrame=CFrame.new(pos,pos+Vector3.new(flat.Unit.X,base.Y,flat.Unit.Z).Unit) end end else if savedPitch and (not shooting) then -- small grace then reset spray state if shootStart and tick()-shootStart > (S.ARReset or 0.2) then savedPitch=nil; patternMul=1; shootStart=0 end elseif not shooting then savedPitch=nil; patternMul=1 end end if S.AntiRecoil or S.NoSpread or S.RapidFire or S.InfAmmo then local char=LP.Character; local tool=char and char:FindFirstChildOfClass("Tool") if tool then for _,value in ipairs(tool:GetDescendants()) do if value:IsA("NumberValue") or value:IsA("IntValue") then local name=value.Name:lower() if S.AntiRecoil and (name:find("recoil",1,true) or name:find("kick",1,true) or name:find("punch",1,true) or name:find("shake",1,true)) then setProperty("AntiRecoil",value,"Value",0) end if S.NoSpread and (name:find("spread",1,true) or name:find("bloom",1,true)) then setProperty("NoSpread",value,"Value",0) end if S.RapidFire and value:IsA("NumberValue") and (name:find("cooldown",1,true) or name:find("delay",1,true)) then setProperty("RapidFire",value,"Value",0.02) end if S.InfAmmo and (name:find("ammo",1,true) or name:find("clip",1,true)) then setProperty("InfAmmo",value,"Value",999) end end end end end if S.CustomFOV then setProperty("CustomFOV",Cam,"FieldOfView",S.FOVVal) end if S.ThirdPerson then setProperty("ThirdPerson",LP,"CameraMaxZoomDistance",12); setProperty("ThirdPerson",LP,"CameraMinZoomDistance",8) end if S.TimeChanger then setProperty("TimeChanger",Lighting,"ClockTime",S.TimeVal) end if S.NoFlash and os.clock()-lastFlashScan>0.25 then lastFlashScan=os.clock() local playerGui=LP:FindFirstChildOfClass("PlayerGui") if playerGui then for _,g in ipairs(playerGui:GetDescendants()) do if g:IsA("Frame") or g:IsA("ImageLabel") then local name=g.Name:lower() if name:find("flash",1,true) or name:find("blind",1,true) then setProperty("NoFlash",g,"Visible",false) end end end end end if S.NoParticles and not particlesApplied then particlesApplied=true for _,object in ipairs(workspace:GetDescendants()) do if object:IsA("ParticleEmitter") or object:IsA("Trail") or object:IsA("Smoke") then setProperty("NoParticles",object,"Enabled",false) end end end if S.Orbit and not S.Panic and LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then local t=getTarget(); if t then orbitAng+=S.OrbitSpd*dt; local o=Vector3.new(math.cos(orbitAng)*S.OrbitRng,0,math.sin(orbitAng)*S.OrbitRng); LP.Character.HumanoidRootPart.CFrame=CFrame.new(t.Position+o,t.Position) end end if LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then local hrp=LP.Character.HumanoidRootPart if S.Spinbot then hrp.CFrame=hrp.CFrame*CFrame.Angles(0,math.rad(S.SpinSpd)*dt*60,0) elseif S.AntiAim then hrp.CFrame=hrp.CFrame*CFrame.Angles(0,math.rad(math.random(-25,25)),0) end end -- Radar markers are reused until a player becomes invalid. RadarF.Visible=S.Radar; RadarF.Size=UDim2.fromOffset(S.RadarSize or 140,S.RadarSize or 140); RadarF.Position=UDim2.new(1,-(S.RadarPosX or 160),0,S.RadarPosY or 20) local radarRoot=LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") local seen={} if S.Radar and radarRoot then for _,player in ipairs(Players:GetPlayers()) do local root=player.Character and player.Character:FindFirstChild("HumanoidRootPart") if root and alive(player) then seen[player]=true local dot=radarDots[player] if not dot then dot=Instance.new("Frame",RadarF); dot.Size=UDim2.fromOffset(4,4); dot.BorderSizePixel=0; corner(dot,2); radarDots[player]=dot end local rel=radarRoot.CFrame:PointToObjectSpace(root.Position) local sc=S.RadarScale or 2; dot.Position=UDim2.new(0.5,math.clamp(rel.X/sc,-65,65)-2,0.5,math.clamp(rel.Z/sc,-65,65)-2) dot.BackgroundColor3=S.ESPColor end end end for player,dot in pairs(radarDots) do if not seen[player] then dot:Destroy(); radarDots[player]=nil end end end) local aimRenderName="CombatHubAim_"..HS:GenerateGUID(false) RS:BindToRenderStep(aimRenderName,Enum.RenderPriority.Camera.Value+1,function(dt) if not running or S.Panic or not Gui.Parent or freecamConn then CT=nil; return end local active=aimOn() local assist=S.AimAssist and not bindingCapture and not UIS:GetFocusedTextBox() and not pointerOverMenu() if not active and not assist then if S.SilentAim then getTarget() else CT=nil end; return end local target=getTarget() if not target then return end local strength=active and S.Smooth or S.AssistStr if active and not UIS:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) then strength=S.HipfireSmooth end if active then local camera=workspace.CurrentCamera if not camera then return end local point=camera:WorldToViewportPoint(target.Position) local distance=(Vector2.new(point.X,point.Y)-aimPosition()).Magnitude local close=math.clamp(1-distance/math.max(S.FOV,1),0,1) strength=strength+(1-strength)*S.SnapBlend*close end moveTo(target,strength,dt) end) connect(Gui.Destroying,function() RS:UnbindFromRenderStep(aimRenderName); S.Panic=true; CT=nil; HK=false; S.AimOn=false end) connect(UIS.WindowFocusReleased,function() HK=false; S.AimOn=false; if cancelCapture then cancelCapture() end end) connect(LP.CharacterAdded,function() CT=nil; HK=false; S.AimOn=false; savedPitch=nil end) local lastShot=0 connect(RS.Heartbeat,function() if S.Panic then return end local shotDelay = (S.AutoShoot and S.AutoShootDelay) or S.TriggerDelay or 0.08 if (S.Triggerbot or S.AutoShoot) and tick()-lastShot>shotDelay and not bindingCapture and not UIS:GetFocusedTextBox() then local menuHover=pointerOverMenu() if not menuHover then local fire=false local camera=workspace.CurrentCamera if S.Triggerbot and camera then local aimPoint=aimPosition(); local ray=camera:ViewportPointToRay(aimPoint.X,aimPoint.Y) local params=RaycastParams.new() params.FilterType=Enum.RaycastFilterType.Exclude local exclude={camera} if LP.Character then table.insert(exclude,LP.Character) end params.FilterDescendantsInstances=exclude; params.IgnoreWater=true local range = math.max(S.TriggerRange or 22, 5) local hit=workspace:Raycast(ray.Origin,ray.Direction*math.min(S.MaxDist, range*20),params) if hit then local model=hit.Instance local player while model and model~=workspace do if model:IsA("Model") then player=Players:GetPlayerFromCharacter(model); if player then break end end model=model.Parent end if player and alive(player) then local sp,on = camera:WorldToViewportPoint(hit.Position) local dist2d = on and (Vector2.new(sp.X,sp.Y)-aimPoint).Magnitude or math.huge if dist2d <= (S.TriggerRange or 22) and wallOk(hit.Instance) then fire=true end end end end if not fire and S.AutoShoot then local target=getTarget() fire=target~=nil and lineOfSight(target) end if fire then lastShot=tick() click() if S.HitMarker then showHitMarker() end if S.BulletTrace then local t=CT; if t then showBulletTrace(t.Position) end end end end end if S.KillAura and LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then local my=LP.Character.HumanoidRootPart.Position for _,p in ipairs(Players:GetPlayers()) do if alive(p) and p.Character:FindFirstChild("HumanoidRootPart") and (p.Character.HumanoidRootPart.Position-my).Magnitude<=S.AuraRange then local tool=LP.Character:FindFirstChildOfClass("Tool"); if tool then pcall(function() tool:Activate() end) end; break end end end if S.Hitbox then for _,p in ipairs(Players:GetPlayers()) do if alive(p) then for _,n in ipairs(S.HeadOnly and {"Head"} or {"Head","HumanoidRootPart","UpperTorso","Torso"}) do local part=p.Character and p.Character:FindFirstChild(n) if part and part:IsA("BasePart") then setProperty("Hitbox",part,"Size",Vector3.new(S.HitboxSize,S.HitboxSize,S.HitboxSize)); setProperty("Hitbox",part,"Transparency",0.65); setProperty("Hitbox",part,"CanCollide",false) end end end end else restoreModule("Hitbox") end local char=LP.Character; if not char then return end local hum=char:FindFirstChildOfClass("Humanoid"); if not hum then return end if S.Speed then setProperty("Speed",hum,"WalkSpeed",S.SpeedVal) end if S.JumpPow then setProperty("JumpPow",hum,"UseJumpPower",true); setProperty("JumpPow",hum,"JumpPower",S.JumpVal) end if S.Bhop and hum.FloorMaterial~=Enum.Material.Air and UIS:IsKeyDown(Enum.KeyCode.Space) then hum.Jump=true end if S.EdgeJump and hum.FloorMaterial~=Enum.Material.Air then local root=char:FindFirstChild("HumanoidRootPart") if root then local params=RaycastParams.new(); params.FilterType=Enum.RaycastFilterType.Exclude; params.FilterDescendantsInstances={char}; local r=workspace:Raycast(root.Position,Vector3.new(0,-(hum.HipHeight+root.Size.Y/2+0.6),0),params) if not r then hum.Jump=true end end end if S.CrouchSpam then setProperty("CrouchSpam",hum,"HipHeight",(os.clock()%.2<0.1) and 0.5 or 2) end if S.God then hum.Health=hum.MaxHealth end if S.AutoHeal and hum.Health0 then hrp.AssemblyLinearVelocity=Vector3.new(dir.Unit.X*hrp.AssemblyLinearVelocity.Magnitude,hrp.AssemblyLinearVelocity.Y,dir.Unit.Z*hrp.AssemblyLinearVelocity.Magnitude) end end if S.ChatSpam and not chatBusy and tick()-lastChat>=S.ChatDelay then lastChat=tick(); sendChatMessage(S.ChatMsg) end end) connect(RS.RenderStepped,function() if not S.Fly or S.Panic then return end local char=LP.Character; if not char then return end; local hrp=char:FindFirstChild("HumanoidRootPart"); if not hrp then return end if not BV or BV.Parent~=hrp or not BG or BG.Parent~=hrp then if BV then BV:Destroy() end; if BG then BG:Destroy() end; BV=Instance.new("BodyVelocity"); BV.MaxForce=Vector3.new(9e9,9e9,9e9); BV.Parent=hrp; BG=Instance.new("BodyGyro"); BG.MaxTorque=Vector3.new(9e9,9e9,9e9); BG.Parent=hrp end Cam=workspace.CurrentCamera; if not Cam then return end BG.CFrame=Cam.CFrame; local dir=Vector3.zero if UIS:IsKeyDown(Enum.KeyCode.W) then dir+=Cam.CFrame.LookVector end if UIS:IsKeyDown(Enum.KeyCode.S) then dir-=Cam.CFrame.LookVector end if UIS:IsKeyDown(Enum.KeyCode.A) then dir-=Cam.CFrame.RightVector end if UIS:IsKeyDown(Enum.KeyCode.D) then dir+=Cam.CFrame.RightVector end if UIS:IsKeyDown(Enum.KeyCode.Space) then dir+=Vector3.yAxis end if UIS:IsKeyDown(Enum.KeyCode.LeftControl) then dir-=Vector3.yAxis end BV.Velocity=dir.Magnitude>0 and dir.Unit*S.FlySpeed or Vector3.zero end) connect(UIS.JumpRequest,function() if S.Panic then return end if S.InfJump and LP.Character then local h=LP.Character:FindFirstChildOfClass("Humanoid"); if h then h:ChangeState(Enum.HumanoidStateType.Jumping) end end if S.LongJump and LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then local hrp=LP.Character.HumanoidRootPart; hrp.AssemblyLinearVelocity=hrp.AssemblyLinearVelocity+Cam.CFrame.LookVector*80+Vector3.new(0,40,0) end end) connect(RS.Stepped,function() if S.Noclip and not S.Panic and LP.Character then for _,p in ipairs(LP.Character:GetDescendants()) do if p:IsA("BasePart") then setProperty("Noclip",p,"CanCollide",false) end end end end) local ESPGui=Instance.new("ScreenGui") ESPGui.Name="CombatHubESP"; ESPGui.IgnoreGuiInset=true; ESPGui.ResetOnSpawn=false; ESPGui.DisplayOrder=998 ESPGui.Parent=Gui.Parent local function clearESP(p) local pack=ESP[p] if not pack then return end for key,object in pairs(pack) do if key~="character" and typeof(object)=="Instance" then pcall(function() object:Destroy() end) end end ESP[p]=nil end local function makeESP(p) clearESP(p) local pack={} local box=Instance.new("Frame",ESPGui); box.BackgroundTransparency=1; box.BorderSizePixel=0; box.Visible=false local outline=Instance.new("UIStroke",box); outline.Thickness=S.BoxThickness or 1.5 pack.box=box; pack.outline=outline local text=Instance.new("TextLabel",ESPGui); text.BackgroundTransparency=1; text.TextStrokeTransparency=0.25; text.Font=Enum.Font.GothamBold; text.TextSize=S.NameSize or 12; text.TextWrapped=false; text.Visible=false pack.text=text local line=Instance.new("Frame",ESPGui); line.BorderSizePixel=0; line.AnchorPoint=Vector2.new(0.5,0.5); line.Visible=false pack.line=line pack.character=p.Character ESP[p]=pack return pack end local function projectedBounds(char,camera) local cf,size=char:GetBoundingBox() local minX,minY,maxX,maxY=math.huge,math.huge,-math.huge,-math.huge for x=-1,1,2 do for y=-1,1,2 do for z=-1,1,2 do local point=camera:WorldToViewportPoint(cf:PointToWorldSpace(Vector3.new(x*size.X/2,y*size.Y/2,z*size.Z/2))) if point.Z<=0.1 then return nil end minX=math.min(minX,point.X); minY=math.min(minY,point.Y) maxX=math.max(maxX,point.X); maxY=math.max(maxY,point.Y) end end end local viewport=camera.ViewportSize if maxX<0 or maxY<0 or minX>viewport.X or minY>viewport.Y then return nil end return minX,minY,maxX,maxY end local espConnection=connect(RS.RenderStepped,function() local camera=workspace.CurrentCamera local enabled=not S.Panic and (S.Chams or S.NameESP or S.DistESP or S.HPESP or S.WeaponESP or S.BoxESP or S.Tracers) if not camera or not enabled then for p in pairs(ESP) do clearESP(p) end; return end for _,p in ipairs(Players:GetPlayers()) do if p~=LP then local char=p.Character local root=char and char:FindFirstChild("HumanoidRootPart") local localRoot=LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") local checkPart=char and (char:FindFirstChild("Head") or root) local withinRange=root and (not localRoot or (root.Position-localRoot.Position).Magnitude<=(S.ESPMaxDist or S.MaxDist)) if not alive(p) or not root or not withinRange then clearESP(p) else local pack=ESP[p] if not pack or pack.character~=char then pack=makeESP(p) end local color=S.ESPColor if S.Chams then if not pack.hl then local h=Instance.new("Highlight"); h.Adornee=char; h.FillTransparency=S.ChamsFill or 0.5; h.OutlineTransparency=S.ChamsOutline or 0; h.Parent=char; pack.hl=h end pack.hl.FillColor=color; pack.hl.OutlineColor=color; pack.hl.FillTransparency=S.ChamsFill or 0.5; pack.hl.OutlineTransparency=S.ChamsOutline or 0 pack.hl.DepthMode=(S.ChamsDepth=="Occluded") and Enum.HighlightDepthMode.Occluded or Enum.HighlightDepthMode.AlwaysOnTop elseif pack.hl then pack.hl:Destroy(); pack.hl=nil end local x1,y1,x2,y2=projectedBounds(char,camera) pack.box.Visible=S.BoxESP and x1~=nil pack.text.Visible=(S.NameESP or S.DistESP or S.HPESP or S.WeaponESP) and x1~=nil pack.line.Visible=S.Tracers and x1~=nil if x1 then pack.box.Position=UDim2.fromOffset(x1,y1); pack.box.Size=UDim2.fromOffset(x2-x1,y2-y1); pack.outline.Color=color; pack.outline.Thickness=S.BoxThickness or 1.5 if S.HPBar then if not pack.hpBg then local bg=Instance.new("Frame",ESPGui); bg.BorderSizePixel=0; bg.BackgroundColor3=Color3.fromRGB(30,30,30); bg.Visible=false local fill=Instance.new("Frame",bg); fill.BorderSizePixel=0; fill.BackgroundColor3=Color3.fromRGB(80,220,120); fill.Size=UDim2.new(1,0,1,0) pack.hpBg=bg; pack.hpFill=fill end local hum=char:FindFirstChildOfClass("Humanoid") local pct=hum and math.clamp(hum.Health/math.max(hum.MaxHealth,1),0,1) or 1 local bh=S.HPBarH or 3 pack.hpBg.Visible=true pack.hpBg.Position=UDim2.fromOffset(x1,y2+2) pack.hpBg.Size=UDim2.fromOffset(math.max(x2-x1,4),bh) pack.hpFill.Size=UDim2.new(pct,0,1,0) pack.hpFill.BackgroundColor3=Color3.fromRGB(255*(1-pct),220*pct,80) elseif pack.hpBg then pack.hpBg.Visible=false end local bits={} if S.NameESP then table.insert(bits,p.DisplayName.." (@"..p.Name..")") end if S.DistESP and localRoot then table.insert(bits,tostring(math.floor((root.Position-localRoot.Position).Magnitude)).." studs") end if S.HPESP then local h=char:FindFirstChildOfClass("Humanoid"); if h then table.insert(bits,tostring(math.floor(h.Health)).." HP") end end if S.WeaponESP then local tool=char:FindFirstChildOfClass("Tool"); if tool then table.insert(bits,tool.Name) end end pack.text.Text=table.concat(bits," | "); pack.text.TextSize=S.NameSize or 12; pack.text.TextStrokeTransparency=(S.ESPTextOutline~=false) and 0.25 or 1 local drawColor=color if S.RainbowESP then local h=(os.clock()*(S.RainbowSpeed or 0.4))%1 drawColor=Color3.fromHSV(h,0.9,1) elseif S.ESPTeamColor and p.Team and p.Team.TeamColor then drawColor=p.Team.TeamColor.Color end pack.text.TextColor3=drawColor; color=drawColor local width=math.max(x2-x1,360) pack.text.Size=UDim2.fromOffset(width,20); pack.text.Position=UDim2.fromOffset((x1+x2-width)/2,y1-22) local originMode=S.TracerOrigin or "Bottom" local a if originMode=="Center" then a=Vector2.new(camera.ViewportSize.X/2,camera.ViewportSize.Y/2) elseif originMode=="Top" then a=Vector2.new(camera.ViewportSize.X/2,4) else a=Vector2.new(camera.ViewportSize.X/2,camera.ViewportSize.Y-4) end local b=Vector2.new((x1+x2)/2,y2); local delta=b-a; local center=(a+b)/2 pack.line.Position=UDim2.fromOffset(center.X,center.Y); pack.line.Size=UDim2.fromOffset(delta.Magnitude,S.TracerThickness or 1.5) pack.line.Rotation=math.deg(math.atan2(delta.Y,delta.X)); pack.line.BackgroundColor3=color end end end end end) local espRemoving=connect(Players.PlayerRemoving,clearESP) connect(Gui.Destroying,function() espConnection:Disconnect(); espRemoving:Disconnect() for p in pairs(ESP) do clearESP(p) end ESPGui:Destroy() end) pcall(function() local vu=game:GetService("VirtualUser"); connect(LP.Idled,function() if S.AntiAFK then vu:CaptureController(); vu:ClickButton2(Vector2.new()) end end) end) local function isAimKey(i) if S.AimKeyMouse then return i.UserInputType==S.AimKey end return i.KeyCode==S.AimKey end connect(UIS.InputBegan,function(i,g) if isAimKey(i) and S.Aimbot and not bindingCapture and not UIS:GetFocusedTextBox() and not pointerOverMenu() then if S.AimMode=="Toggle" then S.AimOn=not S.AimOn else HK=true end end if g or bindingCapture or UIS:GetFocusedTextBox() then return end if i.KeyCode==Enum.KeyCode.RightShift then Main.Visible=not Main.Visible end if S.JigglePeek and S.JiggleMode=="Toggle" and typeof(S.JiggleKey)=="EnumItem" and S.JiggleKey.EnumType==Enum.KeyCode and i.KeyCode==S.JiggleKey then jiggleOn = not jiggleOn end if i.KeyCode==S.PanicKey then if S.Panic then S.Panic=false else panicAll() end; return end if S.Panic then return end Cam=workspace.CurrentCamera; if not Cam then return end if S.Dash and not pointerOverMenu() and i.KeyCode==Enum.KeyCode.Q and LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then local hrp=LP.Character.HumanoidRootPart; hrp.AssemblyLinearVelocity=Cam.CFrame.LookVector*S.DashPower+Vector3.new(0,20,0) end if S.ClickTP and not pointerOverMenu() and i.UserInputType==Enum.UserInputType.MouseButton1 and Mouse.Hit and LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then LP.Character.HumanoidRootPart.CFrame=CFrame.new(Mouse.Hit.Position+Vector3.new(0,3,0)) end if S.Freecam and i.KeyCode==Enum.KeyCode.P and UIS:IsKeyDown(Enum.KeyCode.LeftShift) then if freecamConn then stopFreecam() else Cam=workspace.CurrentCamera; if not Cam then return end; freecamPos=Cam.CFrame; setProperty("Freecam",Cam,"CameraType",Enum.CameraType.Scriptable); setProperty("Freecam",Cam,"CFrame",freecamPos) freecamConn=connect(RS.RenderStepped,function(dt) if S.Panic or not S.Freecam or UIS:GetFocusedTextBox() then return end local dir=Vector3.zero if UIS:IsKeyDown(Enum.KeyCode.W) then dir+=Cam.CFrame.LookVector end if UIS:IsKeyDown(Enum.KeyCode.S) then dir-=Cam.CFrame.LookVector end if UIS:IsKeyDown(Enum.KeyCode.A) then dir-=Cam.CFrame.RightVector end if UIS:IsKeyDown(Enum.KeyCode.D) then dir+=Cam.CFrame.RightVector end if UIS:IsKeyDown(Enum.KeyCode.E) then dir+=Vector3.yAxis end if UIS:IsKeyDown(Enum.KeyCode.Q) then dir-=Vector3.yAxis end freecamPos=freecamPos+dir*60*dt; Cam.CFrame=CFrame.new(freecamPos.Position,freecamPos.Position+freecamPos.LookVector) end) end end end) connect(UIS.InputEnded,function(i) if isAimKey(i) then HK=false end end) connect(workspace.DescendantAdded,function(object) if not S.Panic and S.NoParticles and (object:IsA("ParticleEmitter") or object:IsA("Trail") or object:IsA("Smoke")) then setProperty("NoParticles",object,"Enabled",false) end end) panicAll=function() for key,value in pairs(S) do if type(value)=="boolean" and key~="AimKeyMouse" and key~="Panic" then S[key]=false end end S.Panic=true; S.AimOn=false; HK=false; CT=nil; bindingCapture=false; jiggleOn=false if cancelCapture then cancelCapture() end stopFreecam() pcall(function() if VIM then VIM:SendKeyEvent(false, S.CrouchKey or Enum.KeyCode.LeftShift, false, game) end end) if BV then BV:Destroy(); BV=nil end if BG then BG:Destroy(); BG=nil end restoreAll(); particlesApplied=false for player in pairs(ESP) do clearESP(player) end for player,dot in pairs(radarDots) do dot:Destroy(); radarDots[player]=nil end WM.Visible=false; RadarF.Visible=false if FOVc then FOVc.Visible=false end for _,line in pairs(CH) do line.Visible=false end for _,refresh in ipairs(configRefresh) do pcall(refresh) end end dispose=function(destroyGui) if not running then return end intentionalLeave=true panicAll() running=false pcall(function() RS:UnbindFromRenderStep(aimRenderName) end) for _,connection in ipairs(connections) do pcall(function() connection:Disconnect() end) end table.clear(connections) if FOVc then pcall(function() FOVc:Remove() end); FOVc=nil end for key,line in pairs(CH) do pcall(function() line:Remove() end); CH[key]=nil end for _,line in ipairs(grenLines) do pcall(function() line:Remove() end) end table.clear(grenLines) for _,c in ipairs(grenDots) do pcall(function() c:Remove() end) end table.clear(grenDots) pcall(function() if grenImpact then grenImpact:Remove() end end) pcall(function() if grenImpactX1 then grenImpactX1:Remove() end end) pcall(function() if grenImpactX2 then grenImpactX2:Remove() end end) grenImpact,grenImpactX1,grenImpactX2=nil,nil,nil pcall(function() ESPGui:Destroy() end) if destroyGui then pcall(function() Gui:Destroy() end) end end Gui.Destroying:Connect(function() dispose(false) end) print("[combat hub] audited build loaded | RShift = menu | End = panic | unimplemented modules are labeled") task.defer(runAutoExec)