Index: src/game/g_cmds.c =================================================================== --- src/game/g_cmds.c (revision 819) +++ src/game/g_cmds.c (working copy) @@ -1123,8 +1134,66 @@ trap_SetConfigstring( CS_VOTE_NO, va( "%i", level.voteNo ) ); } + /* ================== +Cmd_TeamVote_f +================== +*/ +void Cmd_TeamVote_f( gentity_t *ent ) +{ + int team, cs_offset; + char msg[ 64 ]; + + team = ent->client->ps.stats[ STAT_PTEAM ]; + if( team == PTE_HUMANS ) + cs_offset = 0; + else if( team == PTE_ALIENS ) + cs_offset = 1; + else + return; + + if( !level.teamVoteTime[ cs_offset ] ) + { + trap_SendServerCommand( ent-g_entities, "print \"No team vote in progress\n\"" ); + return; + } + + if( ent->client->ps.eFlags & EF_TEAMVOTED ) + { + trap_SendServerCommand( ent-g_entities, "print \"Team vote already cast\n\"" ); + return; + } + + if( ent->client->ps.stats[ STAT_PTEAM ] == PTE_NONE ) + { + trap_SendServerCommand( ent-g_entities, "print \"Not allowed to vote as spectator\n\"" ); + return; + } + + trap_SendServerCommand( ent-g_entities, "print \"Team vote cast\n\"" ); + + ent->client->ps.eFlags |= EF_TEAMVOTED; + + trap_Argv( 1, msg, sizeof( msg ) ); + + if( msg[ 0 ] == 'y' || msg[ 1 ] == 'Y' || msg[ 1 ] == '1' ) + { + level.teamVoteYes[ cs_offset ]++; + trap_SetConfigstring( CS_TEAMVOTE_YES + cs_offset, va( "%i", level.teamVoteYes[ cs_offset ] ) ); + } + else + { + level.teamVoteNo[ cs_offset ]++; + trap_SetConfigstring( CS_TEAMVOTE_NO + cs_offset, va( "%i", level.teamVoteNo[ cs_offset ] ) ); + } + + // a majority will be determined in TeamCheckVote, which will also account + // for players entering or leaving +} + +/* +================== Cmd_Vote_f ================== */ @@ -1134,7 +1203,23 @@ if( !level.voteTime ) { - trap_SendServerCommand( ent-g_entities, "print \"No vote in progress\n\"" ); + int team, cs_offset; + + team = ent->client->ps.stats[ STAT_PTEAM ]; + if( team == PTE_HUMANS ) + cs_offset = 0; + else if( team == PTE_ALIENS ) + cs_offset = 1; + else { + trap_SendServerCommand( ent-g_entities, "print \"Not allowed to vote as spectator\n\"" ); + return; + } + + if( level.teamVoteTime[ cs_offset ] ) + Cmd_TeamVote_f( ent ); + else + trap_SendServerCommand( ent-g_entities, "print \"No vote in progress\n\"" ); + return; } @@ -1364,64 +1544,6 @@ /* -================== -Cmd_TeamVote_f -================== -*/ -void Cmd_TeamVote_f( gentity_t *ent ) -{ - int team, cs_offset; - char msg[ 64 ]; - - team = ent->client->ps.stats[ STAT_PTEAM ]; - if( team == PTE_HUMANS ) - cs_offset = 0; - else if( team == PTE_ALIENS ) - cs_offset = 1; - else - return; - - if( !level.teamVoteTime[ cs_offset ] ) - { - trap_SendServerCommand( ent-g_entities, "print \"No team vote in progress\n\"" ); - return; - } - - if( ent->client->ps.eFlags & EF_TEAMVOTED ) - { - trap_SendServerCommand( ent-g_entities, "print \"Team vote already cast\n\"" ); - return; - } - - if( ent->client->ps.stats[ STAT_PTEAM ] == PTE_NONE ) - { - trap_SendServerCommand( ent-g_entities, "print \"Not allowed to vote as spectator\n\"" ); - return; - } - - trap_SendServerCommand( ent-g_entities, "print \"Team vote cast\n\"" ); - - ent->client->ps.eFlags |= EF_TEAMVOTED; - - trap_Argv( 1, msg, sizeof( msg ) ); - - if( msg[ 0 ] == 'y' || msg[ 1 ] == 'Y' || msg[ 1 ] == '1' ) - { - level.teamVoteYes[ cs_offset ]++; - trap_SetConfigstring( CS_TEAMVOTE_YES + cs_offset, va( "%i", level.teamVoteYes[ cs_offset ] ) ); - } - else - { - level.teamVoteNo[ cs_offset ]++; - trap_SetConfigstring( CS_TEAMVOTE_NO + cs_offset, va( "%i", level.teamVoteNo[ cs_offset ] ) ); - } - - // a majority will be determined in TeamCheckVote, which will also account - // for players entering or leaving -} - - -/* ================= Cmd_SetViewpos_f =================