diff --git a/regamedll/dlls/API/CSPlayer.cpp b/regamedll/dlls/API/CSPlayer.cpp index 41a7fef46..2f3afa492 100644 --- a/regamedll/dlls/API/CSPlayer.cpp +++ b/regamedll/dlls/API/CSPlayer.cpp @@ -533,3 +533,23 @@ void CCSPlayer::Reset() m_iWeaponInfiniteAmmo = 0; m_iWeaponInfiniteIds = 0; } + +void CCSPlayer::OnSpawn() +{ + m_flRespawnPending = 0.0f; +} + +void CCSPlayer::OnKilled() +{ +#ifdef REGAMEDLL_ADD + if (forcerespawn.value > 0) + { + m_flRespawnPending = gpGlobals->time + forcerespawn.value; + } + + if (GetProtectionState() == ProtectionSt_Active) + { + BasePlayer()->RemoveSpawnProtection(); + } +#endif +} diff --git a/regamedll/dlls/player.cpp b/regamedll/dlls/player.cpp index f94613310..5218b53ba 100644 --- a/regamedll/dlls/player.cpp +++ b/regamedll/dlls/player.cpp @@ -2168,13 +2168,7 @@ void EXT_FUNC CBasePlayer::__API_HOOK(Killed)(entvars_t *pevAttacker, int iGib) BuyZoneIcon_Clear(this); #ifdef REGAMEDLL_ADD - if (forcerespawn.value > 0) { - CSPlayer()->m_flRespawnPending = gpGlobals->time + forcerespawn.value; - } - - if (CSPlayer()->GetProtectionState() == CCSPlayer::ProtectionSt_Active) { - RemoveSpawnProtection(); - } + CSPlayer()->OnKilled(); #endif SetThink(&CBasePlayer::PlayerDeathThink); @@ -5294,6 +5288,10 @@ void EXT_FUNC CBasePlayer::__API_HOOK(Spawn)() m_idrowndmg = 0; m_idrownrestored = 0; +#ifdef REGAMEDLL_ADD + CSPlayer()->OnSpawn(); +#endif + if (m_iObserverC4State) { m_iObserverC4State = 0; @@ -9800,7 +9798,9 @@ void CBasePlayer::PlayerRespawnThink() if (pev->deadflag < DEAD_DYING) return; - if (forcerespawn.value > 0 && gpGlobals->time > CSPlayer()->m_flRespawnPending) + if (forcerespawn.value > 0 && + CSPlayer()->m_flRespawnPending > 0 && + CSPlayer()->m_flRespawnPending <= gpGlobals->time) { Spawn(); pev->button = 0; diff --git a/regamedll/public/regamedll/API/CSPlayer.h b/regamedll/public/regamedll/API/CSPlayer.h index 6525c1cac..7fa8fac9a 100644 --- a/regamedll/public/regamedll/API/CSPlayer.h +++ b/regamedll/public/regamedll/API/CSPlayer.h @@ -96,6 +96,10 @@ class CCSPlayer: public CCSMonster { virtual bool HintMessageEx(const char *pMessage, float duration = 6.0f, bool bDisplayIfPlayerDead = false, bool bOverride = false); void Reset(); + + void OnSpawn(); + void OnKilled(); + CBasePlayer *BasePlayer() const; public: