mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-02-05 11:34:41 +00:00
Spawnpoint select
This commit is contained in:
parent
18976a4c58
commit
18e1772857
@ -78,16 +78,22 @@ Vector FixupSpawnPoint(Vector spawn)
|
|||||||
}
|
}
|
||||||
return spawn;
|
return spawn;
|
||||||
}
|
}
|
||||||
|
extern EHANDLE g_pLastSpawn;
|
||||||
//=========================================================
|
//=========================================================
|
||||||
//=========================================================
|
//=========================================================
|
||||||
edict_t *CGameRules::GetPlayerSpawnSpot( CBasePlayer *pPlayer )
|
edict_t *CGameRules::GetPlayerSpawnSpot( CBasePlayer *pPlayer )
|
||||||
{
|
{
|
||||||
edict_t *pentSpawnSpot = EntSelectSpawnPoint( pPlayer );
|
edict_t *pentSpawnSpot = EntSelectSpawnPoint( pPlayer );
|
||||||
|
if( pPlayer->m_state == STATE_POINT_SELECT )
|
||||||
|
{
|
||||||
|
pPlayer->m_state = STATE_SPAWNED;
|
||||||
|
return pentSpawnSpot;
|
||||||
|
}
|
||||||
|
|
||||||
if( mp_coop.value )
|
if( mp_coop.value )
|
||||||
UTIL_CleanSpawnPoint( pentSpawnSpot->v.origin, 100 );
|
UTIL_CleanSpawnPoint( pentSpawnSpot->v.origin, 100 );
|
||||||
|
|
||||||
|
if( g_pLastSpawn )
|
||||||
pPlayer->pev->origin = VARS( pentSpawnSpot )->origin + Vector( 0, 0, 1 );
|
pPlayer->pev->origin = VARS( pentSpawnSpot )->origin + Vector( 0, 0, 1 );
|
||||||
pPlayer->pev->v_angle = g_vecZero;
|
pPlayer->pev->v_angle = g_vecZero;
|
||||||
pPlayer->pev->velocity = g_vecZero;
|
pPlayer->pev->velocity = g_vecZero;
|
||||||
@ -95,7 +101,25 @@ edict_t *CGameRules::GetPlayerSpawnSpot( CBasePlayer *pPlayer )
|
|||||||
pPlayer->pev->punchangle = g_vecZero;
|
pPlayer->pev->punchangle = g_vecZero;
|
||||||
if( !(pPlayer->pev->flags & FL_SPECTATOR ) )
|
if( !(pPlayer->pev->flags & FL_SPECTATOR ) )
|
||||||
if( mp_coop_changelevel.value && !CoopRestorePlayerCoords( pPlayer, &pPlayer->pev->origin, &pPlayer->pev->angles ))
|
if( mp_coop_changelevel.value && !CoopRestorePlayerCoords( pPlayer, &pPlayer->pev->origin, &pPlayer->pev->angles ))
|
||||||
CoopGetSpawnPoint( &pPlayer->pev->origin, &pPlayer->pev->angles );
|
if( !CoopGetSpawnPoint( &pPlayer->pev->origin, &pPlayer->pev->angles ) )
|
||||||
|
{
|
||||||
|
if( pPlayer->m_state == STATE_SPAWNED && !g_pLastSpawn )
|
||||||
|
{
|
||||||
|
hudtextparms_t params = {};
|
||||||
|
params.fadeinTime = 0.5;
|
||||||
|
params.fadeoutTime = .5;
|
||||||
|
params.holdTime = 10;
|
||||||
|
params.channel = 1;
|
||||||
|
params.y = 100;
|
||||||
|
params.r2 = params.g2 = params.b2 = params.a2 = params.r1 = params.g1 = params.b1 = params.a1 = 255;
|
||||||
|
|
||||||
|
|
||||||
|
UTIL_HudMessage( pPlayer, params, "Server cannot select a spawnpoint, please fly to it manually and press attack button\n" );
|
||||||
|
// select spawn point
|
||||||
|
pPlayer->m_state = STATE_POINT_SELECT;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
pPlayer->pev->fixangle = TRUE;
|
pPlayer->pev->fixangle = TRUE;
|
||||||
pPlayer->pev->origin = FixupSpawnPoint( pPlayer->pev->origin );
|
pPlayer->pev->origin = FixupSpawnPoint( pPlayer->pev->origin );
|
||||||
if( g_fSavedDuck )
|
if( g_fSavedDuck )
|
||||||
|
@ -749,6 +749,12 @@ void CHalfLifeMultiplay::PlayerThink( CBasePlayer *pPlayer )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( pPlayer->m_state == STATE_POINT_SELECT )
|
||||||
|
{
|
||||||
|
if( pPlayer->m_afButtonPressed & ( IN_DUCK | IN_ATTACK | IN_ATTACK2 | IN_USE | IN_JUMP ) )
|
||||||
|
SpawnPlayer( pPlayer );
|
||||||
|
}
|
||||||
|
|
||||||
if( g_fGameOver )
|
if( g_fGameOver )
|
||||||
{
|
{
|
||||||
// check for button presses
|
// check for button presses
|
||||||
@ -783,6 +789,13 @@ void CHalfLifeMultiplay::PlayerSpawn( CBasePlayer *pPlayer )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( pPlayer->m_state == STATE_POINT_SELECT )
|
||||||
|
{
|
||||||
|
pPlayer->RemoveAllItems( TRUE );
|
||||||
|
BecomeSpectator( pPlayer );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pPlayer->pev->weapons |= ( 1 << WEAPON_SUIT );
|
pPlayer->pev->weapons |= ( 1 << WEAPON_SUIT );
|
||||||
|
|
||||||
addDefault = TRUE;
|
addDefault = TRUE;
|
||||||
|
@ -2743,6 +2743,8 @@ edict_t *EntSelectSpawnPoint( CBaseEntity *pPlayer )
|
|||||||
goto ReturnSpot;
|
goto ReturnSpot;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
// landmark may still exists when no spawn spot
|
// landmark may still exists when no spawn spot
|
||||||
if( FNullEnt( pSpot ) )
|
if( FNullEnt( pSpot ) )
|
||||||
{
|
{
|
||||||
@ -2754,11 +2756,13 @@ edict_t *EntSelectSpawnPoint( CBaseEntity *pPlayer )
|
|||||||
|
|
||||||
if( FNullEnt( pSpot ) )
|
if( FNullEnt( pSpot ) )
|
||||||
pSpot = UTIL_FindEntityByClassname( NULL, "info_player_start" );
|
pSpot = UTIL_FindEntityByClassname( NULL, "info_player_start" );
|
||||||
|
#endif
|
||||||
|
|
||||||
ReturnSpot:
|
ReturnSpot:
|
||||||
if( FNullEnt( pSpot ) )
|
if( FNullEnt( pSpot ) )
|
||||||
{
|
{
|
||||||
ALERT( at_error, "PutClientInServer: no info_player_start on level" );
|
ALERT( at_error, "PutClientInServer: no info_player_start on level" );
|
||||||
|
g_pLastSpawn = NULL;
|
||||||
return INDEXENT( 0 );
|
return INDEXENT( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user