//--------------------------------------------------------------------------------- // Purpose: Check Player on disconnect //--------------------------------------------------------------------------------- void ManiVictimStats::ClientDisconnect(player_t *player_ptr) { if (war_mode) return; if ((gpManiGameType->IsGameType(MANI_GAME_CSS)) || (gpManiGameType->IsGameType(MANI_GAME_CSGO))) return; PlayerSpawn(player_ptr); }
/* =========== PlayerBegin called when a player has finished connecting, and is ready to be placed into the level. This will happen every level load, and on transition between teams, but doesn't happen on respawns ============ */ void PlayerBegin( int playerNum ) { gentity_t *ent; gplayer_t *player; int flags; int i; ent = g_entities + playerNum; player = level.players + playerNum; if ( ent->r.linked ) { trap_UnlinkEntity( ent ); } G_InitGentity( ent ); ent->touch = 0; ent->pain = 0; ent->player = player; player->pers.connected = CON_CONNECTED; player->pers.enterTime = level.time; player->pers.teamState.state = TEAM_BEGIN; // save eflags around this, because changing teams will // cause this to happen with a valid entity, and we // want to make sure the teleport bit is set right // so the viewpoint doesn't interpolate through the // world to the new position flags = player->ps.eFlags; memset( &player->ps, 0, sizeof( player->ps ) ); player->ps.eFlags = flags; // locate ent at a spawn point PlayerSpawn( ent ); if ( player->pers.initialSpawn && g_gametype.integer != GT_TOURNAMENT ) { // This is only sent to bots because for humans the "joining the battle" etc // make it clear that the player is now finished connecting. Bots on the other // hand have "entered the game" hard coded in botfiles/match.c so continue to // send it to them. for ( i = 0; i < level.maxplayers; i++ ) { if ( level.players[i].pers.connected == CON_DISCONNECTED ) { continue; } if ( !(g_entities[i].r.svFlags & SVF_BOT) ) { continue; } trap_SendServerCommand( i, va("print \"%s" S_COLOR_WHITE " entered the game\n\"", player->pers.netname) ); } if ( !g_singlePlayer.integer ) { BroadcastTeamChange( player, -1 ); } } player->pers.initialSpawn = qfalse; G_LogPrintf( "PlayerBegin: %i\n", playerNum ); // count current players and rank for scoreboard CalculateRanks(); }
/* =========== PlayerBegin called when a player has finished connecting, and is ready to be placed into the level. This will happen every level load, and on transition between teams, but doesn't happen on respawns ============ */ void PlayerBegin( int playerNum ) { gentity_t *ent; gplayer_t *player; int flags; ent = g_entities + playerNum; player = level.players + playerNum; if ( ent->r.linked ) { trap_UnlinkEntity( ent ); } G_InitGentity( ent ); ent->touch = 0; ent->pain = 0; ent->player = player; player->pers.connected = CON_CONNECTED; player->pers.enterTime = level.time; player->pers.teamState.state = TEAM_BEGIN; // save eflags around this, because changing teams will // cause this to happen with a valid entity, and we // want to make sure the teleport bit is set right // so the viewpoint doesn't interpolate through the // world to the new position flags = player->ps.eFlags; memset( &player->ps, 0, sizeof( player->ps ) ); player->ps.eFlags = flags; // locate ent at a spawn point PlayerSpawn( ent ); if ( player->pers.initialSpawn && !g_singlePlayer.integer ) { if ( g_gametype.integer != GT_TOURNAMENT ) { BroadcastTeamChange( player, -1 ); } } player->pers.initialSpawn = qfalse; G_LogPrintf( "PlayerBegin: %i\n", playerNum ); // count current players and rank for scoreboard CalculateRanks(); }
/* ================ PlayerRespawn ================ */ void PlayerRespawn( gentity_t *ent ) { CopyToBodyQue (ent); PlayerSpawn(ent); }