-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] if type(setthreadidentity)=="function"then setthreadidentity(8)end assert(game.GameId==10768418427,"First Person Boxing only") local Players=game:GetService("Players") local Input=game:GetService("UserInputService") local Run=game:GetService("RunService") local Http=game:GetService("HttpService") local guardsConfig=require(game:GetService("ReplicatedStorage"):WaitForChild("VRBoxingGuards")) local player=Players.LocalPlayer local gui=player:WaitForChild("PlayerGui") local previous=gui:FindFirstChild("CinderBoxingCleanup") if previous then previous:Fire();task.wait();if previous.Parent then previous:Destroy()end end if type(filtergc)=="function"then local ok,windows=pcall(filtergc,"table",{Keys={"name","main","screenGui","controls"}},false) if ok then for _,old in ipairs(windows or {})do if old.name=="First Person Boxing | Cinder HUB"and old.screenGui and old.screenGui.Parent then pcall(function()old:Unload()end) for _,c in pairs(old.connections or {})do pcall(function()c:Disconnect()end)end old.unloaded=true if type(setthreadidentity)=="function"then setthreadidentity(8)end old.screenGui:Destroy() end end end end local guiRoot=type(gethui)=="function"and gethui()or game:GetService("CoreGui") for _,old in ipairs(guiRoot:GetChildren())do if old:IsA("ScreenGui")and old:GetAttribute("CinderOwnerHub")=="FirstPersonBoxing"then old:Destroy()end end local sentinel=Instance.new("BindableEvent") sentinel.Name="CinderBoxingCleanup";sentinel.Parent=gui local settings={Enabled=false,AutoPunch=true,AutoGuard=true,AutoCounter=true,AutoDodge=false,AutoGetUp=false,AutoFace=false,StaminaSaver=true,PlayerESP=false,CPU_ESP=false,ShowHP=true,SpeedBoost=false,WalkSpeed=12,Teleport="Off",Target="Head",Combo="Balanced",Interval=0.55,Range=5.5,FatigueLimit=0.7,PendingScript=""} local alive,connections,owned=true,{},{} local state,window,card,master local controls={} local cursorCleanup,validationTask local esp={} local menuOpen local movementOwned,lockOwned,getUpOwned={},nil,false local nativeConfig,lastDodge,lastTeleport,lastCounter,getUpPos,getUpAt=nil,-math.huge,-math.huge,0,nil,0 local count,nextPunch,lastScan,lastUI,guardUntil=0,0,-math.huge,0,0 local resting=false local guardHoldUntil=0 local lastEnemyHealth={entity=nil,head=nil,body=nil,at=0} local tactics={entity=nil,attacks=0,lastThreat=false,lastAttack=0,rate=0,lastIncoming=nil,lastDecision="Idle",samples=0,damageDealt=0,damageTaken=0,lastOwnHead=nil,lastOwnBody=nil,lastEnemyHead=nil,lastEnemyBody=nil} local angleState={entity=nil,side=1,untilAt=0,cooldown=0,openingUntil=0,reason="Waiting",lastPunchAt=0,lastEvadeAt=0,evadeCounterUntil=0,closeAngleUntil=0,hookUntil=0,overcommit=false} local gloveSample settings.AutoPlay=false settings.Tracking="Snap" settings.Playstyle="Balanced" settings.Stance="Orthodox" local trackingOwned={} local targetMotion local trackingMessage="Native" local function restoreTracking() for key,v in pairs(trackingOwned)do if v.t[key]==v.value then v.t[key]=v.original end;trackingOwned[key]=nil end trackingMessage="Native" end local function ownTracking(t,key,value) local v=trackingOwned[key] if v and v.t~=t then restoreTracking();v=nil end if not v then v={t=t,original=t[key]};trackingOwned[key]=v end t[key]=value;v.value=value end local footworkHumanoid local footworkMove=Vector3.zero local footworkBound=false local comboIndex,comboTarget,comboStyle,lastComboAt=0,nil,nil,0 local function stopFootwork() footworkMove=Vector3.zero targetMotion=nil if footworkHumanoid then pcall(function()footworkHumanoid:Move(Vector3.zero,false)end);footworkHumanoid=nil end end local message="Paused — lock on with Q, then enable assistance" local function attach(signal,fn) local c=signal:Connect(function(...) if not alive then return end if type(setthreadidentity)=="function"then setthreadidentity(8)end fn(...) end) table.insert(connections,c);return c end local function writeOwned(t,k,value) for _,v in ipairs(owned)do if v.t==t and v.k==k then t[k]=value;v.value=value;return end end table.insert(owned,{t=t,k=k,original=t[k],value=value});t[k]=value end local function release() for i=#owned,1,-1 do local v=owned[i] if v.t[v.k]==v.value then v.t[v.k]=v.original end owned[i]=nil end end local function restoreMovement() for k,v in pairs(movementOwned)do if v.t[k]==v.value then v.t[k]=v.original end;movementOwned[k]=nil end end local function restoreExtras() stopFootwork() restoreTracking() restoreMovement() if state and getUpOwned then pcall(state.GetUp.setInput,0)end getUpOwned=false;getUpPos=nil if lockOwned then local s=lockOwned if type(debug.getupvalue)=="function"and debug.getupvalue(s.act.toggle,1)==true then pcall(s.act.toggle,"lock")end lockOwned=nil end end local function enabled(value) settings.Enabled=value==true if not settings.Enabled then release();restoreExtras();resting=false;guardUntil=0;guardHoldUntil=0;angleState.untilAt=0;angleState.openingUntil=0;comboIndex=0;comboTarget=nil;message="Paused"end end local function syncMaster() if type(setthreadidentity)=="function"then setthreadidentity(8)end if master then master:Set(settings.Enabled,true)end end local function cleanup() if not alive then return end if type(setthreadidentity)=="function"then setthreadidentity(8)end alive=false;settings.Enabled=false if footworkBound then Run:UnbindFromRenderStep("CinderBoxingFootwork");Run:UnbindFromRenderStep("CinderBoxingTracking");footworkBound=false end pcall(release);pcall(restoreExtras) for _,c in ipairs(connections)do pcall(function()c:Disconnect()end)end for _,label in pairs(esp)do pcall(function()label:Destroy()end)end;table.clear(esp) if cursorCleanup then pcall(cursorCleanup);cursorCleanup=nil end if validationTask then pcall(task.cancel,validationTask);validationTask=nil end if window and not window.unloaded then pcall(function()window:Unload()end)end if window then for _,c in pairs(window.connections or {})do pcall(function()c:Disconnect()end)end window.unloaded=true pcall(function() if type(setthreadidentity)=="function"then setthreadidentity(8)end window.screenGui:Destroy() end) end pcall(function()sentinel:Destroy()end) end attach(sentinel.Event,cleanup) if STATE and STATE.onCleanup then STATE.onCleanup(cleanup)end local function findState() if type(filtergc)~="function"then return nil,"Executor needs filtergc"end local ok,s=pcall(filtergc,"table",{Keys={"act","holds","P"}},true) if not ok or type(s)~="table"or type(s.act)~="table"or type(s.act.punch)~="function"then return nil,"Waiting for native boxing controller" end local source=debug.info(s.act.punch,"s") if not tostring(source):find("PlayerScripts.VRBoxing",1,true)then return nil,"Controller identity mismatch"end return s end local function styleParameters(name) if name=="Angle Fighter"then return {distance=4.35,retreat=5.85,orbit=0.65,lead=0.08,switch=2.8,rest=0.38,resume=0.72,combo="Smart",stance="Orthodox",interval=0.58,range=5.2,fatigue=0.7}end if name=="Adaptive Defense"then return {distance=4.65,retreat=6.4,orbit=0.55,lead=0.1,switch=2.8,rest=0.43,resume=0.78,combo="Smart",stance="Orthodox",interval=0.55}end if name=="Pressure (CPU)"then return {distance=2.65,retreat=4.4,orbit=0.28,lead=0.24,switch=0.9,rest=0.22,resume=0.5,combo="Body-Head",stance="Southpaw",interval=0.35}end if name=="Pacquiao-inspired"then return {distance=2.9,retreat=4.8,orbit=0.7,lead=0.16,switch=1.4,rest=0.25,resume=0.55,combo="Body-Head",stance="Southpaw",interval=0.35}end if name=="Mayweather-inspired"then return {distance=4.1,retreat=6.0,orbit=0.5,lead=0.1,switch=3.5,rest=0.4,resume=0.75,combo="Jab-Cross",stance="Orthodox",interval=0.6}end return {distance=3.5,retreat=5.5,orbit=0.45,lead=0.12,switch=2.5,rest=0.3,resume=0.65,combo="Boxing mix",stance="Orthodox",interval=0.45} end local function observeTactics(view,now) if tactics.entity~=view.entity then tactics={entity=view.entity,attacks=0,lastThreat=false,lastAttack=0,rate=0,lastIncoming=nil,lastDecision="Observe",samples=0,damageDealt=0,damageTaken=0,lastOwnHead=nil,lastOwnBody=nil,lastEnemyHead=nil,lastEnemyBody=nil} end if view.threat and not tactics.lastThreat then local dt=now-tactics.lastAttack if tactics.lastAttack>0 and dt>0.15 and dt<5 then tactics.rate=tactics.rate==0 and 1/dt or tactics.rate*0.75+(1/dt)*0.25 end tactics.lastAttack=now;tactics.attacks+=1 end tactics.lastThreat=view.threat if view.incoming then tactics.lastIncoming=view.incoming.kind end local e=view.entity if typeof(e)=="Instance"then local h,b=tonumber(e:GetAttribute("HeadHP")),tonumber(e:GetAttribute("BodyHP")) if h and b and tactics.lastEnemyHead and tactics.lastEnemyBody then tactics.damageDealt+=math.max(0,tactics.lastEnemyHead-h)+math.max(0,tactics.lastEnemyBody-b)end tactics.lastEnemyHead=h;tactics.lastEnemyBody=b end local h,b=tonumber(player:GetAttribute("HeadHP")),tonumber(player:GetAttribute("BodyHP")) if h and b and tactics.lastOwnHead and tactics.lastOwnBody then tactics.damageTaken+=math.max(0,tactics.lastOwnHead-h)+math.max(0,tactics.lastOwnBody-b)end tactics.lastOwnHead=h;tactics.lastOwnBody=b tactics.samples+=1 end local function plan(snapshot,config,wasResting) if not config.Enabled or snapshot.blocked then return "wait",false end if not snapshot.target then return "target",false end local tired local style=styleParameters(config.Playstyle) if type(snapshot.stamina)=="number"then tired=snapshot.stamina=config.FatigueLimit or wasResting and snapshot.fatigue>math.max(0,config.FatigueLimit-0.25)end tired=config.StaminaSaver~=false and tired local reach=config.Combo=="Smart"and math.min(config.Range,5.2)or config.Range local inRange=snapshot.distance<=reach and snapshot.facing>=0.4 if config.AutoCounter and snapshot.counter and inRange and not tired and not snapshot.incoming and not snapshot.threat and not snapshot.guardPending and not (config.Playstyle=="Angle Fighter" and snapshot.hookOpening) then return "counter",false end if (snapshot.threat or snapshot.incoming or snapshot.guardPending or snapshot.predictedDanger) and snapshot.distance<=math.max(config.Range,8.2)then if config.AutoDodge and snapshot.incoming and snapshot.incoming.time>0.055 and snapshot.incoming.time<0.36 and not tired then return "dodge",false end if config.AutoGuard then return "guard",tired end end if not inRange then return "target",tired end if config.Playstyle=="Angle Fighter"then if snapshot.threat or snapshot.incoming or snapshot.predictedDanger then return config.AutoGuard and "guard"or "watch",tired end if tired then return "recover",true end if snapshot.hookOpening and snapshot.distance<=4.4 and snapshot.facing>=0.35 and not snapshot.guardPending then return config.AutoPunch and "angleHook"or "watch",false end if (snapshot.angleOpening or snapshot.evadeOpening) and inRange and snapshot.distance<=5.0 and not snapshot.guardPending then return config.AutoPunch and "punch"or "watch",false end if inRange and snapshot.distance<=4.7 and snapshot.facing>=0.55 and snapshot.safeProbe and not snapshot.guardPending then return config.AutoPunch and "punch"or "watch",false end return "watch",false end if config.Playstyle=="Adaptive Defense"then if snapshot.predictedDanger then return config.AutoGuard and "guard"or "watch",tired end if snapshot.recentAttack and not snapshot.counter then return "watch",tired end if snapshot.threat or snapshot.guardPending then return "guard",tired end if snapshot.stamina and snapshot.stamina<0.58 then return "recover",true end if not snapshot.counter and snapshot.distance>4.4 then return "watch",false end end if tired then return "recover",true end if config.AutoPunch then return "punch",false end return "watch",false end local function incomingPunch(position,velocity) local distance=position.Magnitude if distance<0.05 or distance>7.2 then return end local closing=-velocity:Dot(position.Unit) if closing<1.5 then return end local impactTime=distance/closing if impactTime>0.38 then return end local predicted=position+velocity*math.min(impactTime,0.3) if math.abs(predicted.X)>2.3 or math.abs(predicted.Y)>3.2 then return end local forward=math.max(velocity.Z,0.1) local kind=position.Y < -1.05 and "body"or (velocity.Y>forward*0.8 and math.abs(velocity.X)forward*0.55 and "hook"or "straight"))) local mode=(kind=="hook"or kind=="over")and "weave"or(kind=="body"or kind=="upper")and "pull"or "slip" local direction=position.X>0 and -1 or 1 if mode=="weave"and math.abs(velocity.X)>0.5 then direction=velocity.X>0 and 1 or -1 end return {kind=kind,mode=mode,direction=direction,time=impactTime,headThreat=kind~="body"} end local function leadOffset(velocity,seconds) local flat=Vector3.new(velocity.X,0,velocity.Z) local lead=flat*seconds return lead.Magnitude>2 and lead.Unit*2 or lead end local function angleMovement(root,enemyRoot,center,now) if settings.Playstyle~="Angle Fighter"or not enemyRoot or not root then return nil end if angleState.entity~=enemyRoot then angleState={entity=enemyRoot,side=1,untilAt=0,cooldown=0,openingUntil=0,reason="Observing",lastPunchAt=0,lastEvadeAt=0,evadeCounterUntil=0,closeAngleUntil=0,hookUntil=0,overcommit=false}end local delta=enemyRoot.Position-root.Position local flat=Vector3.new(delta.X,0,delta.Z) if flat.Magnitude<0.1 then return nil end local enemyFacing=enemyRoot.CFrame.LookVector local facing=Vector3.new(enemyFacing.X,0,enemyFacing.Z) if facing.Magnitude<0.1 then return nil end local toUs=-flat.Unit local frontal=facing.Unit:Dot(toUs)>0.3 local attackAge=now-tactics.lastAttack local attacking=tactics.entity and tactics.lastAttack>0 and attackAge>=0.18 and attackAge<0.55 and not tactics.lastThreat local closing=enemyRoot.AssemblyLinearVelocity:Dot(toUs) local overcommit=flat.Magnitude<3.7 and frontal and closing>3 and (tactics.lastThreat or attackAge<0.5) and tactics.attacks>=2 local closePressure=flat.Magnitude<2.7 and frontal and (tactics.lastThreat or attackAge<0.42) if (overcommit or closePressure or attacking) and frontal and now>=angleState.cooldown and now>=angleState.untilAt and flat.Magnitude<7 then local left=Vector3.new(-flat.Unit.Z,0,flat.Unit.X) local test=left*3.2 local leftPos=center.CFrame:PointToObjectSpace(root.Position+test) local rightPos=center.CFrame:PointToObjectSpace(root.Position-test) local leftSpace=math.max(math.abs(leftPos.X),math.abs(leftPos.Z)) local rightSpace=math.max(math.abs(rightPos.X),math.abs(rightPos.Z)) angleState.side=leftSpace<=rightSpace and 1 or -1 local punish=overcommit or closePressure angleState.untilAt=now+(punish and 0.3 or 0.28) angleState.openingUntil=now+(punish and 1.12 or 1.05) angleState.closeAngleUntil=punish and angleState.untilAt or 0 angleState.hookUntil=punish and now+1.65 or 0 angleState.overcommit=overcommit angleState.cooldown=now+(punish and 1.1 or 0.9) angleState.reason=punish and "Escaping close pressure"or "Weave and circle after punch" end if tactics.lastThreat and now>=angleState.closeAngleUntil then angleState.untilAt=0;angleState.openingUntil=0 end if now8 then angleState.untilAt=0;return nil end local move=tangent*0.9+radial return move.Magnitude>1 and move.Unit or move end return nil end local function footworkVector(delta,offset,retreat,orbit,style) style=style or styleParameters("Balanced") local flat=Vector3.new(delta.X,0,delta.Z) if flat.Magnitude<0.05 then return Vector3.zero end if offset and math.max(math.abs(offset.X),math.abs(offset.Z))>8.5 then local inward=Vector3.new(-offset.X,0,-offset.Z) if inward.Magnitude>0 then return inward.Unit end end local distance=flat.Magnitude local radial=flat.Unit local desired=retreat and style.retreat or style.distance local advance=math.clamp((distance-desired)*2.2,-1,1) local tangent=Vector3.new(-radial.Z,0,radial.X)*(math.abs(distance-desired)<1.6 and orbit*style.orbit or 0) local move=radial*advance+tangent return move.Magnitude>1 and move.Unit or move end local function ringOpponent(ownRing,otherRing,isSelf,knockedOut) return type(ownRing)=="string"and ownRing~=""and ownRing==otherRing and not isSelf and not knockedOut end local function stanceSide(side,stance) return stance=="Southpaw"and(side=="L"and "R"or "L")or side end local function boxingPunch(style,index,distance) local sequences={ ["Jab-Cross"]={{"L","straight","head"},{"R","straight","head"}}, ["1-2-3"]={{"L","straight","head"},{"R","straight","head"},{"L","hook","head"}}, ["Body-Head"]={{"L","straight","body"},{"R","straight","head"},{"L","hook","head"}}, ["Uppercut-Hook"]={{"R","upper","body"},{"L","hook","head"}}, } if style=="Boxing mix"then style=({"1-2-3","Body-Head","Uppercut-Hook"})[math.floor(index/6)%3+1]end local sequence=sequences[style] if not sequence then return end local position=index%#sequence+1 local punch=sequence[position] if distance>(punch[2]=="straight"and 5.2 or 4.2)then return "range"end return punch[2],punch[3],punch[1],position==#sequence end local function nativeStamina(s) if type(debug.getupvalue)~="function"or type(s.doThrow)~="function"then return nil end local ok,current,capacity=pcall(function() local fire=debug.getupvalue(s.doThrow,12) if type(fire)~="function"or debug.info(fire,"n")~="firePunch"then return end return debug.getupvalue(fire,3),debug.getupvalue(fire,11) end) if ok and type(current)=="number"and type(capacity)=="number"and capacity>0 and capacity<=100.1 and current>=0 and current<=capacity+1 then return math.clamp(current/capacity,0,1),current,capacity end return nil end local function smartPunch(entity,distance,fatigue,index) local zone=settings.Target=="Alternate"and(index%4<2 and "head"or "body")or settings.Target:lower() local kind=settings.Combo=="Hooks"and "hook"or(settings.Combo=="Balanced"and index%4==3 and "hook"or "straight") if settings.Combo=="Smart"then local head=tonumber(entity:GetAttribute("HeadHP")) local body=tonumber(entity:GetAttribute("BodyHP")) local headCap=tonumber(entity:GetAttribute("HeadCap")) local bodyCap=tonumber(entity:GetAttribute("BodyCap")) if head and body and headCap and headCap>0 and bodyCap and bodyCap>0 then zone=head/headCap<=body/bodyCap and "head"or "body"end local guard=entity:GetAttribute("AIGuard")or guardsConfig.KEYS[tonumber(entity:GetAttribute("GuardStyle"))or 0] local rules=guard and guardsConfig.AUTO[guard] if rules and(not head or not headCap or head/headCap>0.15)then local headDefense=((rules.evade or {}).straight or 0)+((rules.roll or {}).jab or 0)+((rules.block or {}).jab or 0) local bodyDefense=((rules.evade or {}).body or 0)+((rules.roll or {}).body or 0)+((rules.block or {}).body or 0) if headDefense>bodyDefense+0.15 then zone="body"end end kind=distance<4 and fatigue<0.5 and(index%3==2 and "upper"or "hook")or "straight" end return kind,zone end local function getUpControl(sample,previous,dt) local target=(sample.zoneMin+sample.zoneMax)*0.5 local velocity=previous and(sample.pos-previous)/math.max(dt,0.01)or 0 return math.clamp((target-sample.pos)*9-velocity*2.5,-1,1) end local function extras(s,now) if settings.AutoFace and type(debug.getupvalue)=="function"then local lock=debug.getupvalue(s.act.toggle,1) if lock==false then s.act.toggle("lock");lockOwned=s end elseif lockOwned then if debug.getupvalue(lockOwned.act.toggle,1)==true then lockOwned.act.toggle("lock")end;lockOwned=nil end if settings.AutoGetUp and s.GetUp.isActive()then local v=s.GetUp.state() if v and type(v.pos)=="number"and type(v.zoneMin)=="number"and type(v.zoneMax)=="number"then s.GetUp.setInput(getUpControl(v,getUpPos,now-getUpAt));getUpPos=v.pos;getUpAt=now;getUpOwned=true end elseif getUpOwned then s.GetUp.setInput(0);getUpOwned=false;getUpPos=nil end if settings.SpeedBoost and not s.locked()and player:GetAttribute("BoxKO")~=true and not menuOpen(s)then if not nativeConfig then nativeConfig=filtergc("table",{Keys={"PunchExt","WalkSpeed","HeadR","BodyR"}},true)end if nativeConfig then if not movementOwned.WalkSpeed then movementOwned.WalkSpeed={t=nativeConfig,original=nativeConfig.WalkSpeed}end nativeConfig.WalkSpeed=settings.WalkSpeed;movementOwned.WalkSpeed.value=settings.WalkSpeed end else restoreMovement()end end local function updateESP() local keep={} local camera=workspace.CurrentCamera local function add(entity,character,cpu) local show=cpu and settings.CPU_ESP or not cpu and settings.PlayerESP local head=character and character:FindFirstChild("Head") if not show or not head or not camera or entity:GetAttribute("BoxKO")==true or(head.Position-camera.CFrame.Position).Magnitude>175 then return end keep[entity]=true local tag=esp[entity] if not tag then tag=Instance.new("BillboardGui");tag.Name="CinderBoxingESP";tag.Size=UDim2.fromOffset(200,52);tag.StudsOffset=Vector3.new(0,2,0);tag.AlwaysOnTop=true;tag.MaxDistance=175 local text=Instance.new("TextLabel");text.Name="Info";text.Size=UDim2.fromScale(1,1);text.BackgroundTransparency=1;text.TextSize=13;text.Font=Enum.Font.GothamSemibold;text.TextStrokeTransparency=0.2;text.RichText=false;text.Parent=tag tag.Parent=gui;esp[entity]=tag end tag.Adornee=head tag.Info.TextColor3=cpu and Color3.fromRGB(255,196,99)or Color3.fromRGB(102,211,255) local name=cpu and(entity:GetAttribute("DisplayName")or entity.Name)or entity.DisplayName local hp="" if settings.ShowHP then local h,b=entity:GetAttribute("HeadHP"),entity:GetAttribute("BodyHP") hp="\nHead "..(type(h)=="number"and tostring(math.ceil(h))or "?").." • Body "..(type(b)=="number"and tostring(math.ceil(b))or "?") end tag.Info.Text=(cpu and "CPU • "or "")..name..hp end for _,p in ipairs(Players:GetPlayers())do if p~=player then add(p,p.Character,false)end end for _,model in ipairs(workspace:GetChildren())do if model:IsA("Model")and model:GetAttribute("VRB_AI")==true then add(model,model,true)end end for entity,label in pairs(esp)do if not keep[entity]then label:Destroy();esp[entity]=nil end end end menuOpen=function(s) for _,name in ipairs({"ShopOpen","StylesOpen","DailyOpen","CustomizeOpen","ServerBrowserOpen"})do if player:GetAttribute(name)==true then return true end end if Input:GetFocusedTextBox()then return true end return s.UI and s.UI.isSettingsOpen and s.UI.isSettingsOpen() end local function snapshot(s,now) local target=s.lockTgt local camera=workspace.CurrentCamera local entity=target and target.player local head=target and target.headWorld local valid=entity and typeof(entity)=="Instance"and entity.Parent~=nil and head and typeof(head)=="Vector3" if valid and (entity==player or entity:GetAttribute("BoxKO")==true)then valid=false end if valid and settings.AutoPlay and not ringOpponent(player:GetAttribute("InRing"),entity:GetAttribute("InRing"),entity==player,false)then valid=false end local delta=valid and camera and head-camera.CFrame.Position local distance=delta and delta.Magnitude or math.huge local facing=delta and distance>0.01 and camera.CFrame.LookVector:Dot(delta.Unit)or 0 local threat=target and type(target.punching)=="table"and(target.punching[1]==true or target.punching[2]==true) local incoming local root=player.Character and player.Character:FindFirstChild("HumanoidRootPart") if valid and camera and root and type(target.glove)=="table"then local frame=CFrame.new(camera.CFrame.Position)*root.CFrame.Rotation local dt=gloveSample and now-gloveSample.at or 0 if gloveSample and gloveSample.target==target and dt>=0.008 and dt<=0.15 then for i=1,2 do local point,previous=target.glove[i],gloveSample[i] if target.punching and target.punching[i]and typeof(point)=="Vector3"and typeof(previous)=="Vector3"then local candidate=incomingPunch(frame:PointToObjectSpace(point),frame:VectorToObjectSpace((point-previous)/dt)) if candidate and(not incoming or candidate.time0.9 and attackAge>0.12 and attackAge=angleState.untilAt,evadeOpening=now<(angleState.evadeCounterUntil or 0),hookOpening=now<(angleState.hookUntil or 0) and now>=(angleState.closeAngleUntil or 0) and angleState.closeAngleUntil>0,safeProbe=tactics.entity==entity and not threat and not incoming and now-tactics.lastAttack>0.7 and now-(angleState.lastPunchAt or 0)>1.15, threat=threat==true,incoming=incoming,entity=entity, counter=(tonumber(s.counterOpenAt)or 0)>lastCounter and os.clock()-(tonumber(s.counterOpenAt)or 0)<0.65, blocked=player:GetAttribute("BoxKO")==true or not player.Character or s.locked()or menuOpen(s)} end local function autoFootwork(view,action,now) local entity=view.entity local ringName=player:GetAttribute("InRing") if type(ringName)~="string"or ringName==""then stopFootwork();return end if not settings.AutoPlay or view.blocked or not view.target or typeof(entity)~="Instance"or not ringOpponent(ringName,entity:GetAttribute("InRing"),entity==player,entity:GetAttribute("BoxKO")==true)then stopFootwork();return end for _,key in ipairs({Enum.KeyCode.W,Enum.KeyCode.A,Enum.KeyCode.S,Enum.KeyCode.D})do if Input:IsKeyDown(key)then stopFootwork();return end end local character=player.Character local root=character and character:FindFirstChild("HumanoidRootPart") local humanoid=character and character:FindFirstChildOfClass("Humanoid") local targetCharacter=entity:IsA("Player")and entity.Character or entity local targetRoot=targetCharacter and targetCharacter:FindFirstChild("HumanoidRootPart") local gym=workspace:FindFirstChild("BoxingGym") local rings=gym and gym:FindFirstChild("Rings") local ring=rings and rings:FindFirstChild(ringName) local center=ring and ring:FindFirstChild("Center") if not root or not humanoid or not targetRoot or not center then stopFootwork();return end local retreat=resting or action=="recover"or action=="guard"or action=="dodge"or view.incoming~=nil or (settings.Playstyle=="Angle Fighter"and (view.threat or view.recentAttack)) local style=styleParameters(settings.Playstyle) local velocity=targetRoot.AssemblyLinearVelocity if targetMotion and targetMotion.entity==entity then local dt=now-targetMotion.at if dt>=0.008 and dt<0.15 then local sampled=(targetRoot.Position-targetMotion.position)/dt if sampled.Magnitude<45 then velocity=sampled*0.45+targetMotion.velocity*0.55 end end end targetMotion={entity=entity,at=now,position=targetRoot.Position,velocity=velocity} local offset=center.CFrame:PointToObjectSpace(root.Position) local predicted=targetRoot.Position+leadOffset(velocity,style.lead) local delta=center.CFrame:VectorToObjectSpace(predicted-root.Position) local move=angleMovement(root,targetRoot,center,now) or footworkVector(delta,offset,retreat,math.floor(now/style.switch)%2==0 and 1 or -1,style) footworkMove=center.CFrame:VectorToWorldSpace(move);footworkHumanoid=humanoid humanoid:Move(footworkMove,false) end local function refreshFootwork() if not settings.Enabled or not settings.AutoPlay or not state or state.locked()or menuOpen(state)then stopFootwork();return end local ringName=player:GetAttribute("InRing") if type(ringName)~="string"or ringName==""then stopFootwork();return end local target=state.lockTgt local entity=target and target.player if typeof(entity)~="Instance"or not ringOpponent(ringName,entity:GetAttribute("InRing"),entity==player,entity:GetAttribute("BoxKO")==true)then stopFootwork();return end local character=player.Character local root=character and character:FindFirstChild("HumanoidRootPart") local humanoid=character and character:FindFirstChildOfClass("Humanoid") local enemy=entity:IsA("Player")and entity.Character or entity local enemyRoot=enemy and enemy:FindFirstChild("HumanoidRootPart") local gym=workspace:FindFirstChild("BoxingGym") local rings=gym and gym:FindFirstChild("Rings") local ring=rings and rings:FindFirstChild(ringName) local center=ring and ring:FindFirstChild("Center") if not root or not humanoid or not enemyRoot or not center then stopFootwork();return end local style=styleParameters(settings.Playstyle) local velocity=enemyRoot.AssemblyLinearVelocity local predicted=enemyRoot.Position+leadOffset(velocity,style.lead) local delta=center.CFrame:VectorToObjectSpace(predicted-root.Position) local offset=center.CFrame:PointToObjectSpace(root.Position) local retreat=resting or os.clock()0 and os.clock()-tactics.lastAttack<0.55) local move=angleMovement(root,enemyRoot,center,os.clock()) or footworkVector(delta,offset,retreat,math.floor(os.clock()/style.switch)%2==0 and 1 or -1,style) footworkMove=center.CFrame:VectorToWorldSpace(move) footworkHumanoid=humanoid end local function trackOpponent() if not settings.Enabled or not settings.AutoPlay or not settings.AutoFace or settings.Tracking=="Native"or not state or state.locked()or menuOpen(state)or player:GetAttribute("BoxKO")==true then restoreTracking();return end local target=state.lockTgt local entity=target and target.player if typeof(entity)~="Instance"or not ringOpponent(player:GetAttribute("InRing"),entity:GetAttribute("InRing"),entity==player,entity:GetAttribute("BoxKO")==true)or typeof(target.headWorld)~="Vector3"then restoreTracking();return end ownTracking(state.prefs,"lockSpeed",4) ownTracking(state,"lockRaw",true) trackingMessage="Fast native" if settings.Tracking~="Snap"or type(debug.setupvalue)~="function"or type(debug.getupvalue)~="function"then return end local root=player.Character and player.Character:FindFirstChild("HumanoidRootPart") local hum=player.Character and player.Character:FindFirstChildOfClass("Humanoid") if not root or not hum then return end local ok=pcall(function() if type(state.doThrow)~="function"or debug.info(state.doThrow,"n")~="doThrow"or debug.getupvalue(state.doThrow,3)~=state or debug.getupvalue(state.doThrow,4)~=hum or type(debug.getupvalue(state.doThrow,5))~="number"then return end local delta=target.headWorld-root.Position if Vector3.new(delta.X,0,delta.Z).Magnitude<0.1 then return end debug.setupvalue(state.doThrow,5,math.atan2(-delta.X,-delta.Z));trackingMessage="Snap" end) if not ok then trackingMessage="Fast native (snap unavailable)"end end local function applyPlaystyle(name) local style=styleParameters(name) settings.Playstyle=name;settings.Combo=style.combo;settings.Stance=style.stance;settings.Interval=style.interval settings.Range=style.range or math.clamp(style.distance+0.85,3,6) settings.FatigueLimit=style.fatigue or 0.7 settings.AutoPunch=true;settings.AutoCounter=true;settings.AutoGuard=true;settings.AutoDodge=true;settings.AutoFace=true;settings.AutoGetUp=true;settings.StaminaSaver=true comboIndex=0;comboTarget=nil for _,key in ipairs({"Playstyle","Combo","Stance","Interval","Range","FatigueLimit","AutoPunch","AutoCounter","AutoGuard","AutoDodge","AutoFace","AutoGetUp","StaminaSaver"})do if controls[key]then if type(setthreadidentity)=="function"then setthreadidentity(8)end;controls[key]:Set(settings[key],true)end end message=name.." preset applied" end local function tick(now) if window and window.unloaded then cleanup();return end if not state or now-lastScan>2 then lastScan=now local current,why=findState() if current~=state then release();restoreExtras();state=current;resting=false end if not state then message=why;return end end if not settings.Enabled then release();return end extras(state,now) local view=snapshot(state,now) if settings.AutoPlay and view.target then observeTactics(view,now)end if not view.blocked and settings.Teleport~="Off"and state.lockTgt and view.entity and now-lastTeleport>0.7 then local character=view.entity:IsA("Player")and view.entity.Character or view.entity local targetRoot=character and character:FindFirstChild("HumanoidRootPart") local root=player.Character and player.Character:FindFirstChild("HumanoidRootPart") if root and targetRoot and(targetRoot.Position-root.Position).Magnitude<25 and view.entity:GetAttribute("BoxKO")~=true then local desired=(targetRoot.CFrame*CFrame.new(0,0,3.2)).Position if settings.Teleport=="TP behind target"or(targetRoot.Position-root.Position).Magnitude>4.5 then root.CFrame=CFrame.lookAt(desired,Vector3.new(targetRoot.Position.X,desired.Y,targetRoot.Position.Z)) lastTeleport=now;message="Position step requested";return end end end if view.threat or view.incoming then local hold=settings.Playstyle=="Angle Fighter"and 0.4 or 0.32 guardUntil=now+hold;guardHoldUntil=now+hold end view.threat=view.threat or now0.2 and view.incoming then local evadeMode=view.incoming.mode if settings.Playstyle=="Angle Fighter"and view.incoming.headThreat and (view.incoming.kind=="hook"or view.incoming.kind=="over")then evadeMode="weave"end state.startEvade(evadeMode,view.incoming.direction);lastDodge=now if settings.Playstyle=="Angle Fighter"then angleState.lastEvadeAt=now;angleState.evadeCounterUntil=now+0.65 end if settings.AutoGuard then writeOwned(state.holds,"guard",true)end message="Evading "..view.incoming.kind.." • "..evadeMode;return end if settings.AutoGuard then writeOwned(state.holds,"guard",true)end message="Guarding while dodge recovers";return end if action=="guard"then writeOwned(state.holds,"guard",true);message="Guarding incoming punch";return end release() if action=="recover"then message=view.stamina and "Recovering — stamina "..math.floor(view.stamina*100).."% of current capacity"or "Recovering — fatigue "..math.floor(view.fatigue*100).."%";return end if action=="target"then message="Lock on with Q and face a standing opponent within range";return end if action=="wait"then message="Waiting — menu, replay, knockout or round pause";return end if action=="watch"then message="Watching opponent";return end local kind,zone=smartPunch(view.entity,view.distance,view.stamina and 1-view.stamina or view.fatigue,count) if settings.Playstyle=="Adaptive Defense"or settings.Playstyle=="Angle Fighter"or settings.Combo=="Smart"then local e=view.entity local h,b=tonumber(e:GetAttribute("HeadHP")),tonumber(e:GetAttribute("BodyHP")) local hc,bc=tonumber(e:GetAttribute("HeadCap")),tonumber(e:GetAttribute("BodyCap")) if h and b and hc and bc and hc>0 and bc>0 then local hr,br=h/hc,b/bc zone=hr<=br and "head"or "body" if lastEnemyHealth.entity==e and lastEnemyHealth.head and lastEnemyHealth.body then local dh=lastEnemyHealth.head-hr local db=lastEnemyHealth.body-br if math.max(dh,db)>0.025 then zone=dh>=db and "head"or "body"end end lastEnemyHealth={entity=e,head=hr,body=br,at=now} end end local side=count%2==0 and "L"or "R" local comboEnd if comboTarget~=view.entity or comboStyle~=settings.Combo or now-lastComboAt>1.5 then comboIndex=0 end if action~="counter"and action~="angleHook"then local comboKind,comboZone,comboSide,finished=boxingPunch(settings.Combo,comboIndex,view.distance) if comboKind=="range"then message="Closing distance for combination";return end if comboKind then kind,side,comboEnd=comboKind,comboSide,finished;if settings.Combo~="Smart"and settings.Playstyle~="Adaptive Defense"and settings.Playstyle~="Angle Fighter"then zone=comboZone end end end writeOwned(state.holds,"body",zone=="body") writeOwned(state,"spaceTarget",zone) if now0.1 then camera.CFrame=CFrame.lookAt(camera.CFrame.Position,target.headWorld) end end if not alive or not settings.Enabled or not settings.AutoPlay then return end local now=os.clock() if now-footworkElapsed<1/30 then if footworkHumanoid and footworkHumanoid.Parent then footworkHumanoid:Move(footworkMove,false)end return end footworkElapsed=now if player:GetAttribute("BoxKO")==true or not state or state.locked()or menuOpen(state)then stopFootwork();return end for _,key in ipairs({Enum.KeyCode.W,Enum.KeyCode.A,Enum.KeyCode.S,Enum.KeyCode.D})do if Input:IsKeyDown(key)then return end end local ok2,err2=pcall(refreshFootwork) if not ok2 then stopFootwork();message="Footwork error: "..tostring(err2);return end if footworkHumanoid and footworkHumanoid.Parent then footworkHumanoid:Move(footworkMove,false)end end) footworkBound=true local elapsed=0 local uiElapsed=0 local consecutiveTickErrors=0 attach(Run.Heartbeat,function(dt) elapsed+=dt local interval=Input.TouchEnabled and 1/30 or 1/45 if elapsed=5 then enabled(false);syncMaster();message="Paused after repeated errors: "..detail else message="Recovering from tick error ("..consecutiveTickErrors.."/5): "..detail end end if alive and card and now-lastUI>1 then lastUI=now if type(setthreadidentity)=="function"then setthreadidentity(8)end local displayOK,displayError=pcall(function() if settings.PlayerESP or settings.CPU_ESP or next(esp) then updateESP()end card.body.Text=(settings.Enabled and "ON"or "PAUSED").." • Requests "..count.."\n"..message if controls.TacticalCard then controls.TacticalCard.body.Text=string.format("Mode: %s | Opponent: %s\nAttacks: %d | Pace: %.1f/s | Last: %s\nDamage dealt: %.0f | Taken: %.0f",tactics.lastDecision,tactics.entity and tactics.entity.Name or "none",tactics.attacks,tactics.rate,tactics.lastIncoming or "unknown",tactics.damageDealt,tactics.damageTaken)end end) if not displayOK then message="Display error: "..tostring(displayError)end end end)