int Pickup_Team(Gentity *ent, Gentity *other) { int team; Gclient *cl = other->client; /* figure out what team this flag is */ if(strcmp(ent->classname, "team_CTF_redflag") == 0) team = TEAM_RED; else if(strcmp(ent->classname, "team_CTF_blueflag") == 0) team = TEAM_BLUE; else if(strcmp(ent->classname, "team_CTF_neutralflag") == 0) team = TEAM_FREE; else{ PrintMsg (other, "Don't know what team the flag is on.\n"); return 0; } if(g_gametype.integer == GT_1FCTF){ if(team == TEAM_FREE) return Team_TouchEnemyFlag(ent, other, cl->sess.team); if(team != cl->sess.team) return Team_TouchOurFlag(ent, other, cl->sess.team); return 0; } /* GT_CTF */ if(team == cl->sess.team) return Team_TouchOurFlag(ent, other, team); return Team_TouchEnemyFlag(ent, other, team); }
int Pickup_Team( gentity_t *ent, gentity_t *other ) { int team; gclient_t *cl = other->client; // figure out what team this flag is if( strcmp(ent->classname, "team_CTF_redflag") == 0 ) { team = TEAM_RED; } else if( strcmp(ent->classname, "team_CTF_blueflag") == 0 ) { team = TEAM_BLUE; } else if( strcmp(ent->classname, "team_CTF_neutralflag") == 0 ) { team = TEAM_FREE; } else { PrintMsg ( other, "Don't know what team the flag is on.\n"); return 0; } if( g_gametype.integer == GT_1FCTF ) { if( team == TEAM_FREE ) { return Team_TouchEnemyFlag( ent, other, cl->sess.sessionTeam ); } if( team != cl->sess.sessionTeam) { return Team_TouchOurFlag( ent, other, cl->sess.sessionTeam ); } return 0; } // GT_CTF if( team == cl->sess.sessionTeam) { return Team_TouchOurFlag( ent, other, team ); } return Team_TouchEnemyFlag( ent, other, team ); }
int Pickup_Team( gentity_t *ent, gentity_t *other ) { int team; gclient_t *cl = other->client; #ifdef MISSIONPACK if( g_gametype.integer == GT_OBELISK ) { // there are no team items that can be picked up in obelisk G_FreeEntity( ent ); return 0; } if( g_gametype.integer == GT_HARVESTER ) { // the only team items that can be picked up in harvester are the cubes if( ent->spawnflags != cl->sess.sessionTeam ) { cl->ps.generic1 += 1; } G_FreeEntity( ent ); return 0; } #endif // figure out what team this flag is if( strcmp(ent->classname, "team_CTF_redflag") == 0 ) { team = TEAM_RED; } else if( strcmp(ent->classname, "team_CTF_blueflag") == 0 ) { team = TEAM_BLUE; } #ifdef MISSIONPACK else if( strcmp(ent->classname, "team_CTF_neutralflag") == 0 ) { team = TEAM_FREE; } #endif else { PrintMsg ( other, "Don't know what team the flag is on.\n"); return 0; } #ifdef MISSIONPACK if( g_gametype.integer == GT_1FCTF ) { if( team == TEAM_FREE ) { return Team_TouchEnemyFlag( ent, other, cl->sess.sessionTeam ); } if( team != cl->sess.sessionTeam) { return Team_TouchOurFlag( ent, other, cl->sess.sessionTeam ); } return 0; } #endif // GT_CTF if( team == cl->sess.sessionTeam) { return Team_TouchOurFlag( ent, other, team ); } return Team_TouchEnemyFlag( ent, other, team ); }
int Pickup_Team( gentity_t *ent, gentity_t *other ) { int team; gclient_t *cl = other->client; // figure out what team this flag is if( strcmp(ent->classname, "team_CTL_redlolly") == 0 ) { team = TEAM_RED; } else if( strcmp(ent->classname, "team_CTL_bluelolly") == 0 ) { team = TEAM_BLUE; } else { PrintMsg ( other, "Don't know what team the lolly is on.\n"); return 0; } // GT_CTF if( team == cl->sess.sessionTeam) { return Team_TouchOurFlag( ent, other, team ); } return Team_TouchEnemyFlag( ent, other, team ); }
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 }