Ejemplo n.º 1
0
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 */
}
Ejemplo n.º 2
0
/*
=======================================================================================================================================
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
}
Ejemplo n.º 3
0
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
}
Ejemplo n.º 4
0
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
}
Ejemplo n.º 5
0
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
}