tf2: fix jump counter & shavit_core_blockprejump

This commit is contained in:
rtldg 2022-11-02 21:46:41 +00:00
parent 91f05dfbf9
commit fefb0ffe6f

View File

@ -1572,17 +1572,6 @@ void ChangeClientStyle(int client, int style, bool manual)
SetClientCookie(client, gH_StyleCookie, sStyle); SetClientCookie(client, gH_StyleCookie, sStyle);
} }
// used as an alternative for games where player_jump isn't a thing, such as TF2
public void Shavit_Bhopstats_OnLeaveGround(int client, bool jumped, bool ladder)
{
if(gB_HookedJump || !jumped || ladder)
{
return;
}
DoJump(client);
}
public void Player_Jump(Event event, const char[] name, bool dontBroadcast) public void Player_Jump(Event event, const char[] name, bool dontBroadcast)
{ {
int client = GetClientOfUserId(event.GetInt("userid")); int client = GetClientOfUserId(event.GetInt("userid"));
@ -3444,21 +3433,36 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
} }
bool bInWater = (GetEntProp(client, Prop_Send, "m_nWaterLevel") >= 2); bool bInWater = (GetEntProp(client, Prop_Send, "m_nWaterLevel") >= 2);
int iOldButtons = GetEntProp(client, Prop_Data, "m_nOldButtons");
if (GetStyleSettingBool(gA_Timers[client].bsStyle, "autobhop") && gB_Auto[client] && (buttons & IN_JUMP) > 0 && mtMoveType == MOVETYPE_WALK && !bInWater)
{
SetEntProp(client, Prop_Data, "m_nOldButtons", (iOldButtons &= ~IN_JUMP));
}
int blockprejump = GetStyleSettingInt(gA_Timers[client].bsStyle, "blockprejump");
if (blockprejump < 0)
{
blockprejump = gCV_BlockPreJump.BoolValue;
}
if (bInStart && blockprejump && GetStyleSettingInt(gA_Timers[client].bsStyle, "prespeed") == 0 && (vel[2] > 0 || (buttons & IN_JUMP) > 0))
{
vel[2] = 0.0;
buttons &= ~IN_JUMP;
}
// enable duck-jumping/bhop in tf2 // enable duck-jumping/bhop in tf2
if (gEV_Type == Engine_TF2 && GetStyleSettingBool(gA_Timers[client].bsStyle, "bunnyhopping") && (buttons & IN_JUMP) > 0 && iGroundEntity != -1) if (gEV_Type == Engine_TF2 && GetStyleSettingBool(gA_Timers[client].bsStyle, "bunnyhopping") && (buttons & IN_JUMP) > 0 && !(iOldButtons & IN_JUMP) && iGroundEntity != -1)
{ {
float fSpeed[3]; float fSpeed[3];
GetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", fSpeed); GetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", fSpeed);
fSpeed[2] = 289.0; fSpeed[2] = 289.0;
SetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", fSpeed); SetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", fSpeed);
}
if (GetStyleSettingBool(gA_Timers[client].bsStyle, "autobhop") && gB_Auto[client] && (buttons & IN_JUMP) > 0 && mtMoveType == MOVETYPE_WALK && !bInWater) DoJump(client);
{
int iOldButtons = GetEntProp(client, Prop_Data, "m_nOldButtons");
SetEntProp(client, Prop_Data, "m_nOldButtons", (iOldButtons & ~IN_JUMP));
} }
// perf jump measuring // perf jump measuring
@ -3491,19 +3495,6 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
} }
} }
int blockprejump = GetStyleSettingInt(gA_Timers[client].bsStyle, "blockprejump");
if (blockprejump < 0)
{
blockprejump = gCV_BlockPreJump.BoolValue;
}
if (bInStart && blockprejump && GetStyleSettingInt(gA_Timers[client].bsStyle, "prespeed") == 0 && (vel[2] > 0 || (buttons & IN_JUMP) > 0))
{
vel[2] = 0.0;
buttons &= ~IN_JUMP;
}
// This can be bypassed by spamming +duck on CSS which causes `iGroundEntity` to be `-1` here... // This can be bypassed by spamming +duck on CSS which causes `iGroundEntity` to be `-1` here...
// (e.g. an autobhop + velocity_limit style...) // (e.g. an autobhop + velocity_limit style...)
// m_hGroundEntity changes from 0 -> -1 same tick which causes problems and I'm not sure what the best way / place to handle that is... // m_hGroundEntity changes from 0 -> -1 same tick which causes problems and I'm not sure what the best way / place to handle that is...