public CBase_PlayerPre_Spawn( id )
if( !get_pcvar_num( g_iSpawnMode ) || !is_user_connected( id ) )
Connected check should come first. So if it is a player joining ( Spawn() called on connect
) then your not checking the cvar for no reason.
public CBase_PlayerPost_Spawn( id )
if( !get_pcvar_num( g_iSpawnMode ) )
if( g_bDiedLastRound[ id ] )
if( is_user_alive( id ) )
GiveStartWeapons( id, cs_get_user_team( id ), get_pcvar_num( g_iSpawnMode ) );
Alive check should come before all others, again so your not checking the cvar and bool if its just a player joining.
Other thing I would recommend is caching the cvar once per round at start, since it will only have an effect once per round.
Also your code hurts my eyes a bit - perhaps you should consider
using a bit of spacing between lines where necessary