/*QUAKED target_print (1 0 0) (-8 -8 -8) (8 8 8) humanteam alienteam private "message" text to print If "private", only the activator gets the message. If no checks, all clients get the message. */ void Use_Target_Print( gentity_t *ent, gentity_t *other, gentity_t *activator ) { if ( activator->client && ( ent->spawnflags & 4 ) ) { G_SendCommandFromServer( activator - g_entities, va( "cp \"%s\"", ent->message ) ); return; } if ( ent->spawnflags & 3 ) { if ( ent->spawnflags & 1 ) { G_TeamCommand( PTE_HUMANS, va( "cp \"%s\"", ent->message ) ); } if ( ent->spawnflags & 2 ) { G_TeamCommand( PTE_ALIENS, va( "cp \"%s\"", ent->message ) ); } return; } G_SendCommandFromServer( -1, va( "cp \"%s\"", ent->message ) ); }
/* ================= ClientInactivityTimer Returns qfalse if the client is dropped ================= */ qboolean ClientInactivityTimer( gclient_t *client ) { if( ! g_inactivity.integer ) { // give everyone some time, so if the operator sets g_inactivity during // gameplay, everyone isn't kicked client->inactivityTime = level.time + 60 * 1000; client->inactivityWarning = qfalse; } else if( client->pers.cmd.forwardmove || client->pers.cmd.rightmove || client->pers.cmd.upmove || ( client->pers.cmd.buttons & BUTTON_ATTACK ) ) { client->inactivityTime = level.time + g_inactivity.integer * 1000; client->inactivityWarning = qfalse; } else if( !client->pers.localClient ) { if( level.time > client->inactivityTime ) { trap_DropClient( client - level.clients, "Dropped due to inactivity", 0 ); return qfalse; } if( level.time > client->inactivityTime - 10000 && !client->inactivityWarning ) { client->inactivityWarning = qtrue; G_SendCommandFromServer( client - level.clients, "cp \"Ten seconds until inactivity drop!\n\"" ); } } return qtrue; }
/* =============== G_CloseMenus Close all open menus on some client =============== */ void G_CloseMenus( int clientNum ) { char buffer[ 32 ]; Com_sprintf( buffer, 32, "serverclosemenus" ); G_SendCommandFromServer( clientNum, buffer ); }
/* =============== G_TriggerMenu Trigger a menu on some client =============== */ void G_TriggerMenu( int clientNum, dynMenu_t menu ) { char buffer[ 32 ]; Com_sprintf( buffer, 32, "servermenu %d", menu ); G_SendCommandFromServer( clientNum, buffer ); }
/* ================ G_TeamCommand Broadcasts a command to only a specific team ================ */ void G_TeamCommand( pTeam_t team, char *cmd ) { int i; for( i = 0 ; i < level.maxclients ; i++ ) { if( level.clients[ i ].pers.connected == CON_CONNECTED ) { if( level.clients[ i ].ps.stats[ STAT_PTEAM ] == team ) G_SendCommandFromServer( i, va( "%s", cmd ) ); } } }
/* =============== poisonCloud =============== */ void poisonCloud( gentity_t *ent ) { int entityList[ MAX_GENTITIES ]; vec3_t range = { LEVEL1_PCLOUD_RANGE, LEVEL1_PCLOUD_RANGE, LEVEL1_PCLOUD_RANGE }; vec3_t mins, maxs; int i, num; gentity_t *humanPlayer; trace_t tr; VectorAdd( ent->client->ps.origin, range, maxs ); VectorSubtract( ent->client->ps.origin, range, mins ); num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES ); for( i = 0; i < num; i++ ) { humanPlayer = &g_entities[ entityList[ i ] ]; if( humanPlayer->client && humanPlayer->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS ) { if( BG_InventoryContainsUpgrade( UP_LIGHTARMOUR, humanPlayer->client->ps.stats ) ) continue; if( BG_InventoryContainsUpgrade( UP_BATTLESUIT, humanPlayer->client->ps.stats ) ) continue; trap_Trace( &tr, muzzle, NULL, NULL, humanPlayer->s.origin, humanPlayer->s.number, MASK_SHOT ); //can't see target from here if( tr.entityNum == ENTITYNUM_WORLD ) continue; if( !( humanPlayer->client->ps.stats[ STAT_STATE ] & SS_POISONCLOUDED ) ) { humanPlayer->client->ps.stats[ STAT_STATE ] |= SS_POISONCLOUDED; humanPlayer->client->lastPoisonCloudedTime = level.time; humanPlayer->client->lastPoisonCloudedClient = ent; G_SendCommandFromServer( humanPlayer->client->ps.clientNum, "poisoncloud" ); } } } }