int Team_TouchEnemyFlag(Gentity *ent, Gentity *other, int team) { Gclient *cl = other->client; if(g_gametype.integer == GT_1FCTF){ PrintMsg (NULL, "%s" S_COLOR_WHITE " got the flag!\n", other->client->pers.netname); cl->ps.powerups[PW_NEUTRALFLAG] = INT_MAX; /* flags never expire */ if(team == TEAM_RED) Team_SetFlagStatus(TEAM_FREE, FLAG_TAKEN_RED); else Team_SetFlagStatus(TEAM_FREE, FLAG_TAKEN_BLUE); }else{ PrintMsg (NULL, "%s" S_COLOR_WHITE " got the %s flag!\n", other->client->pers.netname, TeamName(team)); if(team == TEAM_RED) cl->ps.powerups[PW_REDFLAG] = INT_MAX; /* flags never expire */ else cl->ps.powerups[PW_BLUEFLAG] = INT_MAX; /* flags never expire */ Team_SetFlagStatus(team, FLAG_TAKEN); } AddScore(other, ent->r.currentOrigin, CTF_FLAG_BONUS); cl->pers.teamState.flagsince = level.time; Team_TakeFlagSound(ent, team); return -1; /* Do not respawn this automatically, but do delete it if it was FL_DROPPED */ }
/* ======================================================================================================================================= Team_TouchEnemyFlag ======================================================================================================================================= */ int Team_TouchEnemyFlag(gentity_t *ent, gentity_t *other, int team) { gclient_t *cl = other->client; if (g_gametype.integer == GT_1FCTF) { PrintMsg(NULL, "%s" S_COLOR_WHITE " got the flag!\n", other->client->pers.netname); cl->ps.powerups[PW_NEUTRALFLAG] = INT_MAX; // flags never expire if (team == TEAM_RED) { Team_SetFlagStatus(TEAM_FREE, FLAG_TAKEN_RED); } else { Team_SetFlagStatus(TEAM_FREE, FLAG_TAKEN_BLUE); } } else { PrintMsg(NULL, "%s" S_COLOR_WHITE " got the %s flag!\n", other->client->pers.netname, TeamName(team)); if (team == TEAM_RED) { cl->ps.powerups[PW_REDFLAG] = INT_MAX; // flags never expire } else { cl->ps.powerups[PW_BLUEFLAG] = INT_MAX; // flags never expire } Team_SetFlagStatus(team, FLAG_TAKEN); } AddScore(other, ent->r.currentOrigin, CTF_FLAG_BONUS); Team_TakeFlagSound(ent, team); return -1; // do not respawn this automatically, but do delete it if it was FL_DROPPED }
int Team_TouchEnemyFlag( gentity_t *ent, gentity_t *other, int team ) { gclient_t *cl = other->client; //PrintMsg (NULL, "%s" S_COLOR_WHITE " got the %s flag!\n", // other->client->pers.netname, TeamName(team)); PrintCTFMessage(other->s.number, team, CTFMESSAGE_PLAYER_GOT_FLAG); if (team == TEAM_RED) cl->ps.powerups[PW_REDFLAG] = INT_MAX; // flags never expire else cl->ps.powerups[PW_BLUEFLAG] = INT_MAX; // flags never expire Team_SetFlagStatus( team, FLAG_TAKEN ); AddScore(other, ent->r.currentOrigin, CTF_FLAG_BONUS); cl->pers.teamState.flagsince = level.time; Team_TakeFlagSound( ent, team ); return -1; // Do not respawn this automatically, but do delete it if it was FL_DROPPED }
int Team_TouchEnemyFlag( gentity_t *ent, gentity_t *other, int team ) { gclient_t *cl = other->client; #ifdef MISSIONPACK if( g_gametype.integer == GT_1FCTF ) { PrintMsg (NULL, "%s" S_COLOR_WHITE " got the flag!\n", other->client->pers.netname ); cl->ps.powerups[PW_NEUTRALFLAG] = INT_MAX; // flags never expire if( team == TEAM_RED ) { Team_SetFlagStatus( TEAM_FREE, FLAG_TAKEN_RED ); } else { Team_SetFlagStatus( TEAM_FREE, FLAG_TAKEN_BLUE ); } } else{ #endif PrintMsg (NULL, "%s" S_COLOR_WHITE " got the %s flag!\n", other->client->pers.netname, TeamName(team)); /* if (team == TEAM_RED) cl->ps.powerups[PW_REDFLAG] = INT_MAX; // flags never expire else cl->ps.powerups[PW_BLUEFLAG] = INT_MAX; // flags never expire*/ Team_SetFlagStatus( team, FLAG_TAKEN ); #ifdef MISSIONPACK } #endif AddScore(other, CTF_FLAG_BONUS); cl->pers.teamState.flagsince = level.time; Team_TakeFlagSound( ent, team ); return -1; // Do not respawn this automatically, but do delete it if it was FL_DROPPED }
int Team_TouchEnemyFlag( gentity_t *ent, gentity_t *other, int team ) { gclient_t *cl = other->client; vec3_t mins, maxs; int num, j, ourFlag; int touch[MAX_GENTITIES]; gentity_t* enemy; float enemyDist, dist; VectorSubtract( ent->s.pos.trBase, minFlagRange, mins ); VectorAdd( ent->s.pos.trBase, maxFlagRange, maxs ); num = trap_EntitiesInBox( mins, maxs, touch, MAX_GENTITIES ); dist = Distance(ent->s.pos.trBase, other->client->ps.origin); if (other->client->sess.sessionTeam == TEAM_RED){ ourFlag = PW_REDFLAG; } else { ourFlag = PW_BLUEFLAG; } for(j = 0; j < num; ++j){ enemy = (g_entities + touch[j]); if (!enemy || !enemy->inuse || !enemy->client){ continue; } //ignore specs if (enemy->client->sess.sessionTeam == TEAM_SPECTATOR) continue; //check if its alive if (enemy->health < 1) continue; // dead people can't pick up items //lets check if he has our flag if (!enemy->client->ps.powerups[ourFlag]) continue; //check if enemy is closer to our flag than us enemyDist = Distance(ent->s.pos.trBase,enemy->client->ps.origin); if (enemyDist < dist){ // possible recursion is hidden in this, but // infinite recursion wont happen, because we cant // have a < b and b < a at the same time return Team_TouchOurFlag( ent, enemy, team ); } } //PrintMsg (NULL, "%s" S_COLOR_WHITE " got the %s flag!\n", // other->client->pers.netname, TeamName(team)); PrintCTFMessage(other->s.number, team, CTFMESSAGE_PLAYER_GOT_FLAG); if (team == TEAM_RED) cl->ps.powerups[PW_REDFLAG] = INT_MAX; // flags never expire else cl->ps.powerups[PW_BLUEFLAG] = INT_MAX; // flags never expire Team_SetFlagStatus( team, FLAG_TAKEN ); AddScore(other, ent->r.currentOrigin, CTF_FLAG_BONUS); cl->pers.teamState.flagsince = level.time; Team_TakeFlagSound( ent, team ); return -1; // Do not respawn this automatically, but do delete it if it was FL_DROPPED }