Fixed crash while firing

This commit is contained in:
Kamay Xutax 2024-07-14 15:41:26 +02:00
parent a54eabf77a
commit 7625fd7947
6 changed files with 43 additions and 7 deletions

View file

@ -2232,6 +2232,16 @@ void C_CSPlayer::Simulate( void )
DrawClientHitboxes(0.0f, true);
}
void C_CSPlayer::PostThink()
{
BaseClass::PostThink();
// Reset this.. it gets reset each frame that we're in a bomb zone.
m_bInBombZone = false;
m_bInBuyZone = false;
m_bInHostageRescueZone = false;
}
void C_CSPlayer::ReleaseFlashlight( void )
{
if( m_pFlashlightBeam )

View file

@ -45,6 +45,7 @@ public:
~C_CSPlayer();
virtual void Simulate();
virtual void PostThink();
bool HasDefuser() const;
@ -227,7 +228,7 @@ public:
CNetworkVar( bool, m_bInBombZone );
CNetworkVar( bool, m_bInBuyZone );
CNetworkVar( int, m_iThrowGrenadeCounter ); // used to trigger grenade throw animations.
bool m_bInHostageRescueZone;
bool IsInHostageRescueZone( void );
// This is a combination of the ADDON_ flags in cs_shareddefs.h.
@ -324,7 +325,6 @@ private:
int m_ArmorValue;
QAngle m_angEyeAngles;
bool m_bHasDefuser;
bool m_bInHostageRescueZone;
float m_fNextThinkPushAway;
bool m_bPlayingFreezeCamSound;

View file

@ -5,6 +5,7 @@
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "iclientvehicle.h"
#include "prediction.h"
#include "c_cs_player.h"
#include "igamemovement.h"
@ -19,10 +20,19 @@ class CCSPrediction : public CPrediction
DECLARE_CLASS( CCSPrediction, CPrediction );
public:
virtual void StartCommand( CBasePlayer *player, CUserCmd *cmd );
virtual void SetupMove( C_BasePlayer *player, CUserCmd *ucmd, IMoveHelper *pHelper, CMoveData *move );
virtual void FinishMove( C_BasePlayer *player, CUserCmd *ucmd, CMoveData *move );
};
void CCSPrediction::StartCommand(CBasePlayer* player, CUserCmd* cmd)
{
CCSPlayer *pPlayer = ToCSPlayer( player );
BaseClass::StartCommand( player, cmd );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
@ -33,6 +43,12 @@ void CCSPrediction::SetupMove( C_BasePlayer *player, CUserCmd *ucmd, IMoveHelper
// Call the default SetupMove code.
BaseClass::SetupMove( player, ucmd, pHelper, move );
IClientVehicle *pVehicle = player->GetVehicle();
if (pVehicle && gpGlobals->frametime != 0)
{
pVehicle->SetupMove( player, ucmd, pHelper, move );
}
}
//-----------------------------------------------------------------------------
@ -42,6 +58,12 @@ void CCSPrediction::FinishMove( C_BasePlayer *player, CUserCmd *ucmd, CMoveData
{
// Call the default FinishMove code.
BaseClass::FinishMove( player, ucmd, move );
IClientVehicle *pVehicle = player->GetVehicle();
if (pVehicle && gpGlobals->frametime != 0)
{
pVehicle->FinishMove( player, ucmd, move );
}
}

View file

@ -883,6 +883,8 @@ void CPrediction::RunCommand( C_BasePlayer *player, CUserCmd *ucmd, IMoveHelper
PREDICTION_TRACKVALUECHANGESCOPE( sz );
#endif
StartCommand( player, ucmd );
g_pGameMovement->StartTrackPredictionErrors( player );
gpGlobals->frametime = m_bEnginePaused ? 0 : TICK_INTERVAL;
@ -893,8 +895,6 @@ void CPrediction::RunCommand( C_BasePlayer *player, CUserCmd *ucmd, IMoveHelper
gpGlobals->curtime = player->m_nTickBase * TICK_INTERVAL;
StartCommand( player, ucmd );
// TODO
// TODO: Check for impulse predicted?

View file

@ -1630,6 +1630,11 @@ void CCSPlayer::PostThink()
StopSound( "Player.AmbientUnderWater" );
SetPlayerUnderwater( false );
}
// Reset this.. it gets reset each frame that we're in a bomb zone.
m_bInBombZone = false;
m_bInBuyZone = false;
m_bInHostageRescueZone = false;
}

View file

@ -336,16 +336,15 @@ void CPlayerMove::RunCommand ( CBasePlayer *player, CUserCmd *ucmd, IMoveHelper
return; // Don't process this command
}
StartCommand( player, ucmd );
g_pGameMovement->StartTrackPredictionErrors( player );
gpGlobals->frametime = playerFrameTime;
gpGlobals->curtime = (player->m_nTickBase - 1) * TICK_INTERVAL;
// Run post think first, this will let some space for client side interpolation.
RunPostThink( player );
StartCommand( player, ucmd );
// Set globals appropriately
gpGlobals->curtime = player->m_nTickBase * TICK_INTERVAL;