Implement CBasePlayer::HasTimePassedSinceDeath() for m_fDeadTime (#648)

* Implement CBasePlayer::HasTimePassedSinceDied() for m_fDeadTime
This commit is contained in:
Sergey Shorokhov 2021-06-21 11:59:34 +03:00 committed by GitHub
parent 59c297d26d
commit 1ac96b8180
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 3 deletions

View File

@ -288,12 +288,12 @@ void CBasePlayer::Observer_CheckTarget()
else if (target->pev->effects & EF_NODRAW) else if (target->pev->effects & EF_NODRAW)
{ {
#ifdef REGAMEDLL_FIXES #ifdef REGAMEDLL_FIXES
bool bStillDying = (target->pev->deadflag == DEAD_DYING || (target->pev->deadflag == DEAD_DEAD && (gpGlobals->time <= target->m_fDeadTime + 2.0f))); bool bStillDying = (target->pev->deadflag == DEAD_DYING || (target->pev->deadflag == DEAD_DEAD && !target->HasTimePassedSinceDeath(2.0f)));
if (!bStillDying || (target->m_afPhysicsFlags & PFLAG_OBSERVER)) // keep observing to victim until dying, even if it is invisible if (!bStillDying || (target->m_afPhysicsFlags & PFLAG_OBSERVER)) // keep observing to victim until dying, even if it is invisible
#endif #endif
Observer_FindNextPlayer(false); Observer_FindNextPlayer(false);
} }
else if (target->pev->deadflag == DEAD_DEAD && gpGlobals->time > target->m_fDeadTime + 2.0f) else if (target->pev->deadflag == DEAD_DEAD && target->HasTimePassedSinceDeath(2.0f))
{ {
// 2 secs after death change target // 2 secs after death change target
Observer_FindNextPlayer(false); Observer_FindNextPlayer(false);

View File

@ -3762,7 +3762,7 @@ void CBasePlayer::PlayerDeathThink()
{ {
// if the player has been dead for one second longer than allowed by forcerespawn, // if the player has been dead for one second longer than allowed by forcerespawn,
// forcerespawn isn't on. Send the player off to an intermission camera until they choose to respawn. // forcerespawn isn't on. Send the player off to an intermission camera until they choose to respawn.
if (g_pGameRules->IsMultiplayer() && gpGlobals->time > m_fDeadTime + 3 && !(m_afPhysicsFlags & PFLAG_OBSERVER)) if (g_pGameRules->IsMultiplayer() && HasTimePassedSinceDeath(3.0f) && !(m_afPhysicsFlags & PFLAG_OBSERVER))
{ {
// Send message to everybody to spawn a corpse. // Send message to everybody to spawn a corpse.
SpawnClientSideCorpse(); SpawnClientSideCorpse();

View File

@ -578,6 +578,7 @@ public:
bool IsHittingShield(Vector &vecDirection, TraceResult *ptr); bool IsHittingShield(Vector &vecDirection, TraceResult *ptr);
bool SelectSpawnSpot(const char *pEntClassName, CBaseEntity* &pSpot); bool SelectSpawnSpot(const char *pEntClassName, CBaseEntity* &pSpot);
bool IsReloading() const; bool IsReloading() const;
bool HasTimePassedSinceDeath(float duration) const;
bool IsBlind() const { return (m_blindUntilTime > gpGlobals->time); } bool IsBlind() const { return (m_blindUntilTime > gpGlobals->time); }
bool IsAutoFollowAllowed() const { return (gpGlobals->time > m_allowAutoFollowTime); } bool IsAutoFollowAllowed() const { return (gpGlobals->time > m_allowAutoFollowTime); }
void InhibitAutoFollow(float duration) { m_allowAutoFollowTime = gpGlobals->time + duration; } void InhibitAutoFollow(float duration) { m_allowAutoFollowTime = gpGlobals->time + duration; }
@ -928,6 +929,11 @@ inline bool CBasePlayer::IsReloading() const
return false; return false;
} }
inline bool CBasePlayer::HasTimePassedSinceDeath(float duration) const
{
return gpGlobals->time > (m_fDeadTime + duration);
}
#ifdef REGAMEDLL_API #ifdef REGAMEDLL_API
inline CCSPlayer *CBasePlayer::CSPlayer() const { inline CCSPlayer *CBasePlayer::CSPlayer() const {
return reinterpret_cast<CCSPlayer *>(this->m_pEntity); return reinterpret_cast<CCSPlayer *>(this->m_pEntity);