Syntax: Select all
@PostHook(airaccelerate)
def post_hook(stack_data, ret):
# CBasePlayer pointer.
pointer = stack_data[0].get_pointer(0x4)
index = index_from_pointer(pointer)
player = playerdict[index]
# CMoveData pointer.
pointer = stack_data[0].get_pointer(0x8)
new_velocity = make_object(Vector, pointer + 0x40)
old_velocity = player.velocity
if stack_data[2] > 0.00001:
for i in range(2):
d = new_velocity[i] - old_velocity[i]
if d != 0.0:
wishdir = make_object(Vector, stack_data[1])
gain = d / wishdir[i]
accelspeed = stack_data[3] * stack_data[2] * TICKINTERVAL
print(gain, accelspeed)
if gain == accelspeed:
print('ff')
break
Output with airaccelerate 1.0:
Syntax: Select all
2.5999991896173777 2.599999636709697
2.5999982694367216 2.599999636709697
2.5999983129257602 2.599999636709697
2.599997708347497 2.599999636709697
2.5999983641270976 2.5999999418854713
2.5999988814964086 2.599999636709697
2.5999978331397577 2.599999636709697
In theory they should be equal, because:
Syntax: Select all
// Determine acceleration speed after acceleration
accelspeed = accel * wishspeed * gpGlobals->frametime * player->m_surfaceFriction;
// Cap it
if (accelspeed > addspeed)
accelspeed = addspeed;