本文整理汇总了C++中CalculateRanks函数的典型用法代码示例。如果您正苦于以下问题:C++ CalculateRanks函数的具体用法?C++ CalculateRanks怎么用?C++ CalculateRanks使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CalculateRanks函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: wopSP_calcWon
static qboolean wopSP_calcWon(void) {
int i;
gentity_t *player;
int playerClientNum;
// find the real player
player = NULL;
for (i = 0; i < level.maxclients; i++ ) {
player = &g_entities[i];
if ( !player->inuse ) {
continue;
}
if ( !( player->r.svFlags & SVF_BOT ) ) {
break;
}
}
if ( !player || i == level.maxclients ) {
return qfalse;
}
playerClientNum = i;
if ( g_gametype.integer >= GT_TEAM ) {
if((player->client->sess.sessionTeam == TEAM_RED && level.teamScores[TEAM_RED] > level.teamScores[TEAM_BLUE])
|| (player->client->sess.sessionTeam == TEAM_BLUE && level.teamScores[TEAM_RED] < level.teamScores[TEAM_BLUE]))
return qtrue;
else
return qfalse;
}
else {
CalculateRanks();
return (player->client->ps.persistant[PERS_RANK] == 0);
}
}
示例2: ObeliskDie
/*
=======================================================================================================================================
ObeliskDie
=======================================================================================================================================
*/
static void ObeliskDie(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod) {
int otherTeam;
otherTeam = OtherTeam(self->spawnflags);
self->takedamage = qfalse;
self->think = ObeliskRespawn;
self->nextthink = level.time + g_obeliskRespawnDelay.integer * 1000;
self->activator->s.modelindex2 = 0xff;
self->activator->s.frame = 2;
G_AddEvent(self->activator, EV_OBELISKEXPLODE, 0);
if (self->spawnflags == attacker->client->sess.sessionTeam) {
AddScore(attacker, self->r.currentOrigin, -CTF_CAPTURE_BONUS);
} else {
AddScore(attacker, self->r.currentOrigin, CTF_CAPTURE_BONUS);
attacker->client->rewardTime = level.time + REWARD_TIME;
attacker->client->ps.persistant[PERS_CAPTURES]++;
}
AddTeamScore(self->s.pos.trBase, otherTeam, 1);
CalculateRanks();
Team_CaptureFlagSound(self, self->spawnflags);
Team_ForceGesture(otherTeam);
teamgame.redObeliskAttackedTime = 0;
teamgame.blueObeliskAttackedTime = 0;
trap_SendServerCommand(-1, va("cp \"%s" S_COLOR_WHITE "\ndestroyed the %s obelisk!\n\"", attacker->client->pers.netname, TeamName(self->spawnflags)));
}
示例3: ObeliskTouch
static void ObeliskTouch( gentity_t *self, gentity_t *other, trace_t *trace ) {
int tokens;
if ( !other->client ) {
return;
}
if ( OtherTeam(other->client->sess.sessionTeam) != self->spawnflags ) {
return;
}
tokens = other->client->ps.generic1;
if( tokens <= 0 ) {
return;
}
PrintMsg(NULL, "%s" S_COLOR_WHITE " brought in %i skull%s.\n",
other->client->pers.netname, tokens, tokens ? "s" : "" );
AddTeamScore(self->s.pos.trBase, other->client->sess.sessionTeam, tokens);
Team_ForceGesture(other->client->sess.sessionTeam);
AddScore(other, self->r.currentOrigin, CTF_CAPTURE_BONUS*tokens);
// add the sprite over the player's head
other->client->ps.eFlags &= ~(EF_AWARD_IMPRESSIVE | EF_AWARD_EXCELLENT | EF_AWARD_GAUNTLET | EF_AWARD_ASSIST | EF_AWARD_DEFEND | EF_AWARD_CAP );
other->client->ps.eFlags |= EF_AWARD_CAP;
other->client->rewardTime = level.time + REWARD_SPRITE_TIME;
other->client->ps.persistant[PERS_CAPTURES] += tokens;
other->client->ps.generic1 = 0;
CalculateRanks();
Team_CaptureFlagSound( self, self->spawnflags );
}
示例4: AddScore
/*
============
AddScore
Adds score to both the client and his team
============
*/
void AddScore(gentity_t * ent, vec3_t origin, int score)
{
if(!ent->client)
{
return;
}
// no scoring during pre-match warmup
if(level.warmupTime)
{
return;
}
// Tr3B: don't draw zero skills scores
if(score == 0)
{
return;
}
// show score plum
ScorePlum(ent, origin, score);
//
ent->client->ps.persistant[PERS_SCORE] += score;
if(g_gametype.integer == GT_TEAM)
level.teamScores[ent->client->ps.persistant[PERS_TEAM]] += score;
CalculateRanks();
}
示例5: ObeliskTouch
/*
=======================================================================================================================================
ObeliskTouch
=======================================================================================================================================
*/
static void ObeliskTouch(gentity_t *self, gentity_t *other, trace_t *trace) {
int tokens;
team_t otherTeam;
if (!other->client) {
return;
}
otherTeam = OtherTeam(other->client->sess.sessionTeam);
if (otherTeam != self->spawnflags) {
return;
}
tokens = other->client->ps.tokens;
if (tokens <= 0) {
return;
}
trap_SendServerCommand(-1, va("cp \"%s" S_COLOR_WHITE "\nbrought in %i %s %s!\n\"", other->client->pers.netname, tokens, TeamName(otherTeam), (tokens == 1) ? "skull" : "skulls"));
other->client->rewardTime = level.time + REWARD_TIME;
other->client->ps.persistant[PERS_CAPTURES] += tokens;
other->client->ps.tokens = 0;
AddScore(other, self->r.currentOrigin, CTF_CAPTURE_BONUS * tokens);
AddTeamScore(self->s.pos.trBase, other->client->sess.sessionTeam, tokens);
CalculateRanks();
Team_CaptureFlagSound(self, self->spawnflags);
Team_ForceGesture(other->client->sess.sessionTeam);
}
示例6: ObeliskDie
static void
ObeliskDie(Gentity *self, Gentity *inflictor, Gentity *attacker,
int damage,
int mod)
{
int otherTeam;
otherTeam = OtherTeam(self->spawnflags);
AddTeamScore(self->s.pos.base, otherTeam, 1);
Team_ForceGesture(otherTeam);
CalculateRanks();
self->takedamage = qfalse;
self->think = ObeliskRespawn;
self->nextthink = level.time + g_obeliskRespawnDelay.integer * 1000;
self->activator->s.modelindex2 = 0xff;
self->activator->s.frame = 2;
G_AddEvent(self->activator, EV_OBELISKEXPLODE, 0);
AddScore(attacker, self->r.currentOrigin, CTF_CAPTURE_BONUS);
/* add the sprite over the player's head */
attacker->client->ps.eFlags &=
~(EF_AWARD_IMPRESSIVE | EF_AWARD_EXCELLENT | EF_AWARD_GAUNTLET |
EF_AWARD_ASSIST | EF_AWARD_DEFEND | EF_AWARD_CAP);
attacker->client->ps.eFlags |= EF_AWARD_CAP;
attacker->client->rewardTime = level.time + REWARD_SPRITE_TIME;
attacker->client->ps.persistant[PERS_CAPTURES]++;
teamgame.redObeliskAttackedTime = 0;
teamgame.blueObeliskAttackedTime = 0;
}
示例7: ClientBegin
/*
===========
ClientBegin
called when a client 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 ClientBegin( int clientNum )
{
gentity_t *ent;
gclient_t *client;
int flags;
ent = g_entities + clientNum;
client = level.clients + clientNum;
if( ent->r.linked )
trap_UnlinkEntity( ent );
G_InitGentity( ent );
ent->touch = 0;
ent->pain = 0;
ent->client = client;
client->pers.connected = CON_CONNECTED;
client->pers.enterTime = level.time;
client->pers.teamState.state = TEAM_BEGIN;
client->pers.classSelection = PCL_NONE;
// 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 = client->ps.eFlags;
memset( &client->ps, 0, sizeof( client->ps ) );
memset( &client->pmext, 0, sizeof( client->pmext ) );
client->ps.eFlags = flags;
// locate ent at a spawn point
ClientSpawn( ent, NULL, NULL, NULL );
trap_SendServerCommand( -1, va( "print \"%s" S_COLOR_WHITE " entered the game\n\"", client->pers.netname ) );
// name can change between ClientConnect() and ClientBegin()
G_admin_namelog_update( client, qfalse );
// request the clients PTR code
trap_SendServerCommand( ent - g_entities, "ptrcrequest" );
G_LogPrintf( "ClientBegin: %i\n", clientNum );
if( g_clientUpgradeNotice.integer )
{
if( !Q_stricmp( ent->client->pers.guid, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ) )
{
trap_SendServerCommand( client->ps.clientNum, va( "print \"^1Your client is out of date. Updating your client will allow you to "
"become an admin on servers and download maps much more quickly. Please replace your client executable with the one "
"at ^2http://trem.tjw.org/backport/^1 and reconnect. \n\"" ) );
}
}
// count current clients and rank for scoreboard
CalculateRanks( );
}
示例8: PlayerBegin
/*
===========
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();
}
示例9: AddScore
/*
============
AddScore
Adds score to both the client and his team
============
*/
void AddScore( gentity_t *ent, int score )
{
if( !ent->client )
return;
ent->client->ps.persistant[ PERS_SCORE ] += score;
CalculateRanks( );
}
示例10: trap_DropClient
/*
===========
ClientDisconnect
Called when a player drops from the server.
Will not be called between levels.
This should NOT be called directly by any game logic,
call trap_DropClient(), which will call this and do
server system housekeeping.
============
*/
void ClientDisconnect( int clientNum ) {
gentity_t *ent;
gentity_t *tent;
int i;
// cleanup if we are kicking a bot that
// hasn't spawned yet
G_RemoveQueuedBotBegin( clientNum );
ent = g_entities + clientNum;
if ( !ent->client ) {
return;
}
// stop any following clients
for ( i = 0 ; i < level.maxclients ; i++ ) {
if ( level.clients[i].sess.sessionTeam == TEAM_SPECTATOR
&& level.clients[i].sess.spectatorState == SPECTATOR_FOLLOW
&& level.clients[i].sess.spectatorClient == clientNum ) {
StopFollowing( &g_entities[i] );
}
}
// send effect if they were completely connected
if ( ent->client->pers.connected == CON_CONNECTED
&& ent->client->sess.sessionTeam != TEAM_SPECTATOR ) {
// They don't get to take powerups with them!
// Especially important for stuff like CTF flags
TossClientItems( ent );
#ifdef MISSIONPACK
TossClientPersistantPowerups( ent );
if( g_gametype.integer == GT_HARVESTER ) {
TossClientCubes( ent );
}
#endif
}
G_LogPrintf( "ClientDisconnect: %i\n", clientNum );
trap_UnlinkEntity (ent);
ent->s.modelindex = 0;
ent->inuse = qfalse;
ent->classname = "disconnected";
ent->client->pers.connected = CON_DISCONNECTED;
ent->client->ps.stats[STAT_TEAM] = TEAM_FREE;
ent->client->sess.sessionTeam = TEAM_FREE;
trap_SetConfigstring( CS_PLAYERS + clientNum, "");
CalculateRanks();
if ( ent->r.svFlags & SVF_BOT ) {
BotAIShutdownClient( clientNum, qfalse );
}
}
示例11: UpdateTournamentInfo
/*
==================
UpdateTournamentInfo
==================
*/
void UpdateTournamentInfo( void )
{
int n, accuracy, perfect;
char buf[32], msg[MAX_STRING_CHARS];
unsigned int playerClientNum, i, buflen, msglen;
gentity_t *player;
// find the real player
player = NULL;
for (i = 0; i < level.maxclients; i++ )
{
player = &g_entities[i];
if ( !player->inuse )
continue;
if ( !( player->r.svFlags & SVF_BOT ) )
break;
}
// this should never happen!
if ( !player || i == level.maxclients )
return;
playerClientNum = i;
CalculateRanks();
if ( level.clients[playerClientNum].sess.sessionTeam == TEAM_SPECTATOR )
{
Com_sprintf( msg, sizeof(msg), "postgame %i %i 0 0 0 0 0 0", level.numNonSpectatorClients, playerClientNum );
}
else
{
if( player->client->accuracy_shots )
accuracy = player->client->accuracy_hits * 100 / player->client->accuracy_shots;
else
accuracy = 0;
perfect = ( level.clients[playerClientNum].ps.persistant[PERS_RANK] == 0 && player->client->ps.persistant[PERS_KILLED] == 0 ) ? 1 : 0;
Com_sprintf( msg, sizeof(msg), "postgame %i %i %i %i %i %i %i %i", level.numNonSpectatorClients, playerClientNum, accuracy,
player->client->ps.persistant[PERS_IMPRESSIVE_COUNT], player->client->ps.persistant[PERS_EXCELLENT_COUNT],
player->client->ps.persistant[PERS_GAUNTLET_FRAG_COUNT], player->client->ps.persistant[PERS_SCORE],
perfect );
}
msglen = strlen( msg );
for( i = 0; i < level.numNonSpectatorClients; i++ )
{
n = level.sortedClients[i];
Com_sprintf( buf, sizeof(buf), " %i %i %i", n, level.clients[n].ps.persistant[PERS_RANK], level.clients[n].ps.persistant[PERS_SCORE] );
buflen = strlen( buf );
if( msglen + buflen + 1 >= sizeof(msg) )
{
break;
}
strcat( msg, buf );
}
Cbuf_ExecuteText(EXEC_APPEND, msg );
}
示例12: trap_DropClient
/*
===========
ClientDisconnect
Called when a player drops from the server.
Will not be called between levels.
This should NOT be called directly by any game logic,
call trap_DropClient(), which will call this and do
server system housekeeping.
============
*/
void ClientDisconnect( int clientNum )
{
gentity_t *ent;
gentity_t *tent;
int i;
buildHistory_t *ptr;
ent = g_entities + clientNum;
if( !ent->client )
return;
// look through the bhist and readjust it if the referenced ent has left
for( ptr = level.buildHistory; ptr; ptr = ptr->next )
{
if( ptr->ent == ent )
{
ptr->ent = NULL;
Q_strncpyz( ptr->name, ent->client->pers.netname, MAX_NETNAME );
}
}
G_admin_namelog_update( ent->client, qtrue );
G_LeaveTeam( ent );
// stop any following clients
for( i = 0; i < level.maxclients; i++ )
{
// remove any /ignore settings for this clientNum
BG_ClientListRemove( &level.clients[ i ].sess.ignoreList, clientNum );
}
// send effect if they were completely connected
if( ent->client->pers.connected == CON_CONNECTED &&
ent->client->sess.sessionTeam != TEAM_SPECTATOR )
{
tent = G_TempEntity( ent->client->ps.origin, EV_PLAYER_TELEPORT_OUT );
tent->s.clientNum = ent->s.clientNum;
}
if( ent->client->pers.connection )
ent->client->pers.connection->clientNum = -1;
G_LogPrintf( "ClientDisconnect: %i [%s] (%s) \"%s\"\n", clientNum,
ent->client->pers.ip, ent->client->pers.guid, ent->client->pers.netname );
trap_UnlinkEntity( ent );
ent->s.modelindex = 0;
ent->inuse = qfalse;
ent->classname = "disconnected";
ent->client->pers.connected = CON_DISCONNECTED;
ent->client->ps.persistant[ PERS_TEAM ] = TEAM_FREE;
ent->client->sess.sessionTeam = TEAM_FREE;
trap_SetConfigstring( CS_PLAYERS + clientNum, "");
CalculateRanks( );
}
示例13: ClientBegin
/*
===========
ClientBegin
called when a client 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 ClientBegin(int clientNum)
{
gentity_t *ent;
gclient_t *client;
gentity_t *tent;
int flags;
ent = g_entities + clientNum;
client = level.clients + clientNum;
if(ent->r.linked)
{
trap_UnlinkEntity(ent);
}
G_InitGentity(ent);
ent->touch = 0;
ent->pain = 0;
ent->client = client;
client->pers.connected = CON_CONNECTED;
client->pers.enterTime = level.time;
client->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 = client->ps.eFlags;
memset(&client->ps, 0, sizeof(client->ps));
client->ps.eFlags = flags;
// locate ent at a spawn point
ClientSpawn(ent);
if(client->sess.sessionTeam != TEAM_SPECTATOR)
{
// send event
tent = G_TempEntity(ent->client->ps.origin, EV_PLAYER_TELEPORT_IN);
tent->s.clientNum = ent->s.clientNum;
if(g_gametype.integer != GT_TOURNAMENT)
{
trap_SendServerCommand(-1, va("print \"%s" S_COLOR_WHITE " entered the game\n\"", client->pers.netname));
}
}
G_LogPrintf("ClientBegin: %i\n", clientNum);
// count current clients and rank for scoreboard
CalculateRanks();
#ifdef G_LUA
// Lua API callbacks
G_LuaHook_ClientBegin(clientNum);
#endif
}
示例14: AddTeamScore
// TODO: Draw a ScorePlum() as well? Needs cgame fixes to draw plum regardless of "owner"
void AddTeamScore( vec3_t origin, int team, int score, char *reason ) {
gentity_t *te;
te = G_TempEntity(origin, EV_GLOBAL_TEAM_SOUND );
te->r.svFlags |= SVF_BROADCAST;
if ( team == TEAM_RED ) {
if ( level.teamScores[ TEAM_RED ] + score == level.teamScores[ TEAM_BLUE ] ) {
//teams are tied sound
te->s.eventParm = GTS_TEAMS_ARE_TIED;
}
else if ( level.teamScores[ TEAM_RED ] <= level.teamScores[ TEAM_BLUE ] &&
level.teamScores[ TEAM_RED ] + score > level.teamScores[ TEAM_BLUE ]) {
// red took the lead sound
te->s.eventParm = GTS_REDTEAM_TOOK_LEAD;
}
else {
// red scored sound
te->s.eventParm = GTS_REDTEAM_SCORED;
// Hackity! In BB teams score continously, which makes for annoying
// sound spam. Thus disable sound.
// Better solution would be to either only do this sound on captures/destroys
// or continously at fixed time offsets.
// Also note that there already is a "blue/red balloon" sound in cgame CG_UpdateBalloonStates
if ( g_gametype.integer == GT_BALLOON ) {
G_FreeEntity( te );
}
}
}
else {
if ( level.teamScores[ TEAM_BLUE ] + score == level.teamScores[ TEAM_RED ] ) {
//teams are tied sound
te->s.eventParm = GTS_TEAMS_ARE_TIED;
}
else if ( level.teamScores[ TEAM_BLUE ] <= level.teamScores[ TEAM_RED ] &&
level.teamScores[ TEAM_BLUE ] + score > level.teamScores[ TEAM_RED ]) {
// blue took the lead sound
te->s.eventParm = GTS_BLUETEAM_TOOK_LEAD;
}
else {
// blue scored sound
te->s.eventParm = GTS_BLUETEAM_SCORED;
// See note above
if ( g_gametype.integer == GT_BALLOON ) {
G_FreeEntity( te );
}
}
}
level.teamScores[ team ] += score;
CalculateRanks();
G_LogPrintf( "AddTeamScore: %s %i %s\n", TeamName( team ), score, reason );
}
示例15: ClientBegin
/*
===========
ClientBegin
called when a client 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 ClientBegin( int clientNum )
{
gentity_t *ent;
gclient_t *client;
int flags;
ent = g_entities + clientNum;
client = level.clients + clientNum;
// ignore if client already entered the game
if( client->pers.connected != CON_CONNECTING )
return;
if( ent->r.linked )
trap_UnlinkEntity( ent );
G_InitGentity( ent );
ent->touch = 0;
ent->pain = 0;
ent->client = client;
client->pers.connected = CON_CONNECTED;
client->pers.enterTime = level.time;
// 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 = client->ps.eFlags;
memset( &client->ps, 0, sizeof( client->ps ) );
memset( &client->pmext, 0, sizeof( client->pmext ) );
client->ps.eFlags = flags;
// locate ent at a spawn point
ClientSpawn( ent, NULL, NULL, NULL );
trap_SendServerCommand( -1, va( "print \"%s" S_COLOR_WHITE " entered the game\n\"", client->pers.netname ) );
G_namelog_restore( client );
G_LogPrintf( "ClientBegin: %i\n", clientNum );
// count current clients and rank for scoreboard
CalculateRanks( );
// send the client a list of commands that can be used
G_ListCommands( ent );
// reset cuboidSelection
client->cuboidSelection[ 0 ] =
client->cuboidSelection[ 1 ] =
client->cuboidSelection[ 2 ] = 32;
}