@@ -58,8 +58,8 @@ local Menu = {
58
58
Silent = true ,
59
59
AimbotFOV = 360 ,
60
60
SwingTime = 13 ,
61
- AlwaysUseMaxSwingTime = true , -- Default to always use max for best experience
62
- MaxSwingTime = 13 , -- Starting value, will be updated based on weapon
61
+ AlwaysUseMaxSwingTime = false , -- Default to always use max for best experience
62
+ MaxSwingTime = 11 , -- Starting value, will be updated based on weapon
63
63
ChargeBot = true , -- Moved to Charge tab in UI but kept here for backward compatibility
64
64
},
65
65
@@ -70,6 +70,7 @@ local Menu = {
70
70
ChargeSensitivity = 1.0 ,
71
71
ChargeReach = true ,
72
72
ChargeJump = true ,
73
+ LateCharge = true ,
73
74
},
74
75
75
76
-- Visuals settings
@@ -202,6 +203,8 @@ local function SafeInitMenu()
202
203
-- Initialize other sections if needed
203
204
Menu .Charge = Menu .Charge or {}
204
205
Menu .Visuals = Menu .Visuals or {}
206
+ -- LateCharge default
207
+ Menu .Charge .LateCharge = Menu .Charge .LateCharge ~= nil and Menu .Charge .LateCharge or true
205
208
end
206
209
207
210
-- Call the initialization function to ensure no nil values
@@ -237,6 +240,20 @@ local pLocalPath = {}
237
240
local vPlayerPath = {}
238
241
local drawVhitbox = {}
239
242
243
+ -- Track swing ticks after +attack is sent
244
+ local swingTickCounter = 0
245
+
246
+ -- Helpers for charge-bot yaw clamping
247
+ local function NormalizeYaw (y )
248
+ return ((y + 180 ) % 360 ) - 180
249
+ end
250
+ local function Clamp (val , min , max )
251
+ if val < min then return min
252
+ elseif val > max then return max end
253
+ return val
254
+ end
255
+ local MAX_CHARGE_BOT_TURN = 17
256
+
240
257
-- Variables to track attack and charge state
241
258
local attackStarted = false
242
259
local attackTickCount = 0
@@ -903,8 +920,7 @@ local function ChargeControl(pCmd)
903
920
end
904
921
905
922
-- CRITICAL: Limit maximum turn per frame to 73.04 degrees
906
- turnAmount = math.max (- CHARGE_CONSTANTS .MAX_ROTATION_PER_FRAME ,
907
- math.min (CHARGE_CONSTANTS .MAX_ROTATION_PER_FRAME , turnAmount ))
923
+ turnAmount = Clamp (turnAmount , - MAX_CHARGE_BOT_TURN , MAX_CHARGE_BOT_TURN )
908
924
909
925
-- Calculate new yaw angle
910
926
local newYaw = currentAngles .yaw + turnAmount
@@ -1301,7 +1317,7 @@ local function OnCreateMove(pCmd)
1301
1317
1302
1318
-- If charge-reach exploit is READY (full meter, demo, exploit enabled) but we're **not yet charging**,
1303
1319
-- run a secondary prediction that simulates starting a charge right now.
1304
- local simulateCharge = (not isCurrentlyCharging ) and isExploitReady
1320
+ local simulateCharge = (not isCurrentlyCharging ) and isExploitReady and ( not Menu . Charge . LateCharge )
1305
1321
local fixedAngles = nil
1306
1322
if simulateCharge and CurrentTarget then
1307
1323
-- Use current target's position to define intended charge heading for prediction
@@ -1408,17 +1424,23 @@ local function OnCreateMove(pCmd)
1408
1424
if trace .fraction == 1 or trace .entity == CurrentTarget then
1409
1425
-- If the trace hit something, set the view angles to the position of the hit
1410
1426
aim_angles = Math .PositionAngles (pLocalOrigin , UpdateHomingMissile ())
1411
- -- Set view angles based on the future position of the local player
1412
- engine .SetViewAngles (EulerAngles (engine .GetViewAngles ().pitch , aim_angles .yaw , 0 ))
1427
+ -- Limit yaw change to MAX_CHARGE_BOT_TURN per tick
1428
+ local currentAng = engine .GetViewAngles ()
1429
+ local yawDiff = NormalizeYaw (aim_angles .yaw - currentAng .yaw )
1430
+ local limitedYaw = currentAng .yaw + Clamp (yawDiff , - MAX_CHARGE_BOT_TURN , MAX_CHARGE_BOT_TURN )
1431
+ engine .SetViewAngles (EulerAngles (currentAng .pitch , limitedYaw , 0 ))
1413
1432
end
1414
1433
elseif Menu .Aimbot .ChargeBot and chargeLeft == 100 and input .IsButtonDown (MOUSE_RIGHT ) and not can_attack and fDistance < 750 then
1415
1434
local trace = engine .TraceHull (pLocalFuture , UpdateHomingMissile (), vHitbox [1 ], vHitbox [2 ],
1416
1435
MASK_PLAYERSOLID_BRUSHONLY )
1417
1436
if trace .fraction == 1 or trace .entity == CurrentTarget then
1418
1437
-- If the trace hit something, set the view angles to the position of the hit
1419
1438
aim_angles = Math .PositionAngles (pLocalOrigin , UpdateHomingMissile ())
1420
- -- Set view angles based on the future position of the local player
1421
- engine .SetViewAngles (EulerAngles (engine .GetViewAngles ().pitch , aim_angles .yaw , 0 ))
1439
+ -- Limit yaw change to MAX_CHARGE_BOT_TURN per tick
1440
+ local currentAng = engine .GetViewAngles ()
1441
+ local yawDiff = NormalizeYaw (aim_angles .yaw - currentAng .yaw )
1442
+ local limitedYaw = currentAng .yaw + Clamp (yawDiff , - MAX_CHARGE_BOT_TURN , MAX_CHARGE_BOT_TURN )
1443
+ engine .SetViewAngles (EulerAngles (currentAng .pitch , limitedYaw , 0 ))
1422
1444
end
1423
1445
elseif can_attack and aim_angles and aim_angles .pitch and aim_angles .yaw then
1424
1446
-- Use normal aimbot behavior regardless of charging state
@@ -2336,6 +2358,10 @@ local function doDraw()
2336
2358
if oldChargeReach ~= Menu .Charge .ChargeReach then
2337
2359
Menu .Misc .ChargeReach = Menu .Charge .ChargeReach
2338
2360
end
2361
+ -- Late Charge option appears only if Charge Reach enabled
2362
+ if Menu .Charge .ChargeReach then
2363
+ Menu .Charge .LateCharge = ImMenu .Checkbox (" Late Charge" , Menu .Charge .LateCharge )
2364
+ end
2339
2365
ImMenu .EndFrame ()
2340
2366
2341
2367
ImMenu .BeginFrame (1 )
0 commit comments