//========================================== // BOT_SpawnBot // Used Spawn the bot //========================================== void BOT_SpawnBot( const char *team_name ) { edict_t *spawner; int team; if( level.spawnedTimeStamp + 5000 > game.realtime || !level.canSpawnEntities ) return; if( !nav.loaded ) { Com_Printf( "AI: Can't spawn bots without a valid navigation file\n" ); if( g_numbots->integer ) trap_Cvar_Set( "g_numbots", "0" ); return; } // create a entity which will call the bot spawn spawner = G_Spawn(); spawner->think = BOT_SpawnerThink; team = GS_Teams_TeamFromName( team_name ); if( team != -1 ) spawner->s.team = team; spawner->nextThink = level.time + random() * 3000; spawner->movetype = MOVETYPE_NONE; spawner->r.solid = SOLID_NOT; spawner->r.svflags |= SVF_NOCLIENT; GClip_LinkEntity( spawner ); game.numBots++; }
/* * G_Teams_Join_Cmd */ void G_Teams_Join_Cmd( edict_t *ent ) { char *t; int team; if( !ent->r.client || trap_GetClientState( PLAYERNUM( ent ) ) < CS_SPAWNED ) return; t = trap_Cmd_Argv( 1 ); if( !t || *t == 0 ) { G_Teams_JoinAnyTeam( ent, false ); return; } team = GS_Teams_TeamFromName( t ); if( team != -1 ) { if( team == TEAM_SPECTATOR ) { // special handling for spectator team Cmd_Spec_f( ent ); return; } if( team == ent->s.team ) { G_PrintMsg( ent, "You are already in %s team\n", GS_TeamName( team ) ); return; } if( G_Teams_JoinTeam( ent, team ) ) { G_PrintMsg( NULL, "%s%s joined the %s%s team.\n", ent->r.client->netname, S_COLOR_WHITE, GS_TeamName( ent->s.team ), S_COLOR_WHITE ); return; } } else { G_PrintMsg( ent, "No such team.\n" ); return; } }