Exemplo n.º 1
0
void G_AwardPlayerPickup( edict_t *self, edict_t *item )
{
    if( GS_RaceGametype() ) //racesow: no awards for item timings; will be included in basewsw
        return;

	if( !item )
		return;

	// MH control
	if( item->item->tag == HEALTH_MEGA )
	{
		self->r.client->resp.awardInfo.mh_control_award++;
		if( self->r.client->resp.awardInfo.mh_control_award % 5 == 0 )
			G_PlayerAward( self, S_COLOR_CYAN "Mega-Health Control!" );
	}

	// UH control
	if( item->item->tag == HEALTH_ULTRA )
	{
		self->r.client->resp.awardInfo.uh_control_award++;
		if( self->r.client->resp.awardInfo.uh_control_award % 5 == 0 )
			G_PlayerAward( self, S_COLOR_CYAN "Ultra-Health Control!" );
	}

	// RA control
	if( item->item->tag == ARMOR_RA )
	{
		self->r.client->resp.awardInfo.ra_control_award++;
		if( self->r.client->resp.awardInfo.ra_control_award % 5 == 0 )
			G_PlayerAward( self, S_COLOR_CYAN "Red Armor Control!" );
	}
}
Exemplo n.º 2
0
void G_AwardFairPlay( edict_t *ent )
{
	// only award during postmatch
	if( GS_MatchState() != MATCH_STATE_POSTMATCH ) {
		return;
	}
	if( level.finalMatchDuration <= SIGNIFICANT_MATCH_DURATION ) {
		return;
	}

	gclient_t *client = ent->r.client;
	// don't try to give the award to the server console
	if( !client ) {
		return;
	}

	// already awarded
	if( client->resp.awardInfo.fairplay_award ) {
		return;
	}

	// the player must not be muted during the match
	if( client->level.stats.muted_count > 0 ) {
		return;
	}

	// has he actually played?
	if( !client->level.stats.had_playtime ) {
		return;
	}

	client->level.stats.fairplay_count++;
	client->resp.awardInfo.fairplay_award = true;
	G_PlayerAward( ent, S_COLOR_CYAN "Fair Play!" );
}
Exemplo n.º 3
0
void G_AwardPlayerPickup( edict_t *self, edict_t *item )
{
    if( GS_RaceGametype() ) //racesow: no awards for item timings; will be included in basewsw //FIXME: Doesn't seem like it was included ... -K1ll
        return;

    if( !item )
        return;

    // MH control
    if( item->item->tag == HEALTH_MEGA )
    {
        self->r.client->level.stats.mh_taken++;
        self->r.client->resp.awardInfo.mh_control_award++;
        if( self->r.client->resp.awardInfo.mh_control_award % 5 == 0 )
            G_PlayerAward( self, S_COLOR_CYAN "Mega-Health Control!" );
    }

    // UH control
    else if( item->item->tag == HEALTH_ULTRA )
    {
        self->r.client->level.stats.uh_taken++;
        self->r.client->resp.awardInfo.uh_control_award++;
        if( self->r.client->resp.awardInfo.uh_control_award % 5 == 0 )
            G_PlayerAward( self, S_COLOR_CYAN "Ultra-Health Control!" );
    }

    // RA control
    else if( item->item->tag == ARMOR_RA )
    {
        self->r.client->level.stats.ra_taken++;
        self->r.client->resp.awardInfo.ra_control_award++;
        if( self->r.client->resp.awardInfo.ra_control_award % 5 == 0 )
            G_PlayerAward( self, S_COLOR_CYAN "Red Armor Control!" );
    }

    // Other items counts
    else if( item->item->tag == ARMOR_GA )
        self->r.client->level.stats.ga_taken++;
    else if( item->item->tag == ARMOR_YA )
        self->r.client->level.stats.ya_taken++;
    else if( item->item->tag == POWERUP_QUAD )
        self->r.client->level.stats.quads_taken++;
    else if( item->item->tag == POWERUP_REGEN )
        self->r.client->level.stats.regens_taken++;
    else if( item->item->tag == POWERUP_SHELL )
        self->r.client->level.stats.shells_taken++;
}
Exemplo n.º 4
0
void G_AwardPlayerPickup( edict_t *self, edict_t *item )
{
	if( !item )
		return;

	// MH control
	if( item->item->tag == HEALTH_MEGA )
	{
		self->r.client->level.stats.mh_taken++;
		self->r.client->resp.awardInfo.mh_control_award++;
		if( self->r.client->resp.awardInfo.mh_control_award % 5 == 0 )
			G_PlayerAward( self, S_COLOR_CYAN "Mega-Health Control!" );
	}

	// UH control
	else if( item->item->tag == HEALTH_ULTRA )
	{
		self->r.client->level.stats.uh_taken++;
		self->r.client->resp.awardInfo.uh_control_award++;
		if( self->r.client->resp.awardInfo.uh_control_award % 5 == 0 )
			G_PlayerAward( self, S_COLOR_CYAN "Ultra-Health Control!" );
	}

	// RA control
	else if( item->item->tag == ARMOR_RA )
	{
		self->r.client->level.stats.ra_taken++;
		self->r.client->resp.awardInfo.ra_control_award++;
		if( self->r.client->resp.awardInfo.ra_control_award % 5 == 0 )
			G_PlayerAward( self, S_COLOR_CYAN "Red Armor Control!" );
	}

	// Other items counts
	else if( item->item->tag == ARMOR_GA )
		self->r.client->level.stats.ga_taken++;
	else if( item->item->tag == ARMOR_YA )
		self->r.client->level.stats.ya_taken++;
	else if( item->item->tag == POWERUP_QUAD )
		self->r.client->level.stats.quads_taken++;
	else if( item->item->tag == POWERUP_REGEN )
		self->r.client->level.stats.regens_taken++;
	else if( item->item->tag == POWERUP_SHELL )
		self->r.client->level.stats.shells_taken++;
}
Exemplo n.º 5
0
void G_AwardRaceRecord( edict_t *self )
{
    G_PlayerAward( self, S_COLOR_CYAN "New Record!" );
}
Exemplo n.º 6
0
void G_AwardPlayerKilled( edict_t *self, edict_t *inflictor, edict_t *attacker, int mod )
{
    trace_t trace;
    score_stats_t *stats;
    loggedFrag_t *lfrag;

    if( self->r.svflags & SVF_CORPSE )
        return;

    if( !attacker->r.client )
        return;

    if( !self->r.client )
        return;

    if( attacker == self )
        return;

    if( attacker->s.team == self->s.team && attacker->s.team > TEAM_PLAYERS )
        return;

    if( mod == MOD_ROCKET_W || mod == MOD_ROCKET_S )
    {
        // direct hit
        attacker->r.client->resp.awardInfo.directrocket_count++;
        if( attacker->r.client->resp.awardInfo.directrocket_count == DIRECTROCKET_FOR_AWARD )
        {
            attacker->r.client->resp.awardInfo.directrocket_count = 0;
            attacker->r.client->resp.awardInfo.directrocket_award++;
            G_PlayerAward( attacker, S_COLOR_BLUE "Direct Rocket Hit!" );
        }
        // Midair
        if( self->groundentity == NULL && !self->waterlevel )
        {
            // check for height to the ground
            G_Trace( &trace, self->s.origin, self->r.mins, self->r.maxs, tv( self->s.origin[0], self->s.origin[1], self->s.origin[2] - 64 ), self, MASK_SOLID );
            if( trace.fraction == 1.0f )
            {
                attacker->r.client->resp.awardInfo.rl_midair_award++;
                G_PlayerAward( attacker, S_COLOR_BLUE "Air Rocket!" );
            }
        }
    }
    if( mod == MOD_GRENADE_W || mod == MOD_GRENADE_S )
    {
        // direct hit
        attacker->r.client->resp.awardInfo.directgrenade_count++;
        if( attacker->r.client->resp.awardInfo.directgrenade_count == DIRECTGRENADE_FOR_AWARD )
        {
            attacker->r.client->resp.awardInfo.directgrenade_count = 0;
            attacker->r.client->resp.awardInfo.directgrenade_award++;
            G_PlayerAward( attacker, S_COLOR_BLUE "Direct Grenade Hit!" );
        }

        // Midair
        if( self->groundentity == NULL && !self->waterlevel )
        {
            // check for height to the ground
            G_Trace( &trace, self->s.origin, self->r.mins, self->r.maxs, tv( self->s.origin[0], self->s.origin[1], self->s.origin[2] - 64 ), self, MASK_SOLID );
            if( trace.fraction == 1.0f )
            {
                attacker->r.client->resp.awardInfo.gl_midair_award++;
                G_PlayerAward( attacker, S_COLOR_BLUE "Air Grenade!" );
            }
        }
    }

    // Multikill
    if( game.serverTime - attacker->r.client->resp.awardInfo.multifrag_timer < MULTIKILL_INTERVAL )
        attacker->r.client->resp.awardInfo.multifrag_count++;
    else
        attacker->r.client->resp.awardInfo.multifrag_count = 1;

    attacker->r.client->resp.awardInfo.multifrag_timer = game.serverTime;

    if( attacker->r.client->resp.awardInfo.multifrag_count > 1 )
    {
        char s[MAX_CONFIGSTRING_CHARS];

        s[0] = 0;

        switch( attacker->r.client->resp.awardInfo.multifrag_count )
        {
        case 0:
        case 1:
            break;
        case 2:
            Q_strncpyz( s, S_COLOR_GREEN "Double Frag!", sizeof( s ) );
            break;
        case 3:
            Q_strncpyz( s, S_COLOR_GREEN "Triple Frag!", sizeof( s ) );
            break;
        case 4:
            Q_strncpyz( s, S_COLOR_GREEN "Quadruple Frag!", sizeof( s ) );
            break;
        default:
            Q_snprintfz( s, sizeof( s ), S_COLOR_GREEN "Extermination! %i in a row!", attacker->r.client->resp.awardInfo.multifrag_count );
            break;
        }

        G_PlayerAward( attacker, s );
    }

    // Sprees
    attacker->r.client->resp.awardInfo.frag_count++;

    if( attacker->r.client->resp.awardInfo.frag_count &&
            ( attacker->r.client->resp.awardInfo.frag_count % 5 == 0 ) )
    {
        char s[MAX_CONFIGSTRING_CHARS];

        s[0] = 0;

        switch( (int)( attacker->r.client->resp.awardInfo.frag_count / 5 ) )
        {
        case 1:
            Q_strncpyz( s, S_COLOR_YELLOW "On Fire!", sizeof( s ) );
            G_PrintMsg( NULL, "%s" S_COLOR_YELLOW " is On Fire!\n", attacker->r.client->netname );
            break;
        case 2:
            Q_strncpyz( s, S_COLOR_YELLOW "Raging!", sizeof( s ) );
            G_PrintMsg( NULL, "%s" S_COLOR_YELLOW " is Raging!\n", attacker->r.client->netname );
            break;
        case 3:
            Q_strncpyz( s, S_COLOR_YELLOW "Fraglord!", sizeof( s ) );
            G_PrintMsg( NULL, "%s" S_COLOR_YELLOW " is the Fraglord!\n", attacker->r.client->netname );
            break;
        case 4:
            Q_strncpyz( s, S_COLOR_YELLOW "Extermination!", sizeof( s ) );
            G_PrintMsg( NULL, "%s" S_COLOR_YELLOW " is Exterminating!\n", attacker->r.client->netname );
            break;
        default:
            Q_strncpyz( s, S_COLOR_YELLOW "God Mode!", sizeof( s ) );
            G_PrintMsg( NULL, "%s" S_COLOR_YELLOW " is in God Mode!\n", attacker->r.client->netname );
            break;
        }

        G_PlayerAward( attacker, s );
    }

    // ch : weapon specific frags
    if ( G_ModToAmmo( mod ) != AMMO_NONE )
        attacker->r.client->level.stats.accuracy_frags[G_ModToAmmo( mod )-AMMO_GUNBLADE]++;

    if( GS_MatchState() == MATCH_STATE_PLAYTIME /* && !strcmp( "duel", gs.gametypeName ) */)
    {
        // ch : frag log
        stats = &attacker->r.client->level.stats;
        if( !stats->fragAllocator )
            stats->fragAllocator = LinearAllocator( sizeof( loggedFrag_t ), 0, _G_LevelMalloc, _G_LevelFree );

        lfrag = LA_Alloc( stats->fragAllocator );
        lfrag->mm_attacker = attacker->r.client->mm_session;
        lfrag->mm_victim = self->r.client->mm_session;
        lfrag->weapon = G_ModToAmmo( mod ) - AMMO_GUNBLADE;
        lfrag->time = ( game.serverTime - GS_MatchStartTime() ) / 1000;
    }
}
Exemplo n.º 7
0
void G_AwardPlayerHit( edict_t *targ, edict_t *attacker, int mod )
{
    int flag = -1;

    if( attacker->s.team == targ->s.team && attacker->s.team > TEAM_PLAYERS )
        return;

    switch( mod )
    {
    case MOD_INSTAGUN_W:
    case MOD_INSTAGUN_S:
        attacker->r.client->resp.awardInfo.ebhit_count++;
        if( attacker->r.client->resp.awardInfo.ebhit_count == EBHIT_FOR_AWARD )
        {
            attacker->r.client->resp.awardInfo.ebhit_count = 0;
            attacker->r.client->resp.awardInfo.accuracy_award++;
            G_PlayerAward( attacker, S_COLOR_BLUE "Accuracy!" );
        }
        flag = COMBO_FLAG( WEAP_INSTAGUN );
        break;
    case MOD_ELECTROBOLT_W:
    case MOD_ELECTROBOLT_S:
        attacker->r.client->resp.awardInfo.ebhit_count++;
        if( attacker->r.client->resp.awardInfo.ebhit_count == EBHIT_FOR_AWARD )
        {
            attacker->r.client->resp.awardInfo.ebhit_count = 0;
            attacker->r.client->resp.awardInfo.accuracy_award++;
            G_PlayerAward( attacker, S_COLOR_BLUE "Accuracy!" );
        }
        flag = COMBO_FLAG( WEAP_ELECTROBOLT );
        break;
    case MOD_ROCKET_W:
    case MOD_ROCKET_S:
    case MOD_ROCKET_SPLASH_W:
    case MOD_ROCKET_SPLASH_S:
        flag = COMBO_FLAG( WEAP_ROCKETLAUNCHER );
        break;
    case MOD_GUNBLADE_W:
    case MOD_GUNBLADE_S:
        flag = COMBO_FLAG( WEAP_GUNBLADE );
        break;
    case MOD_MACHINEGUN_W:
    case MOD_MACHINEGUN_S:
        flag = COMBO_FLAG( WEAP_MACHINEGUN );
        break;
    case MOD_RIOTGUN_W:
    case MOD_RIOTGUN_S:
        flag = COMBO_FLAG( WEAP_RIOTGUN );
        break;
    case MOD_GRENADE_W:
    case MOD_GRENADE_S:
    case MOD_GRENADE_SPLASH_W:
    case MOD_GRENADE_SPLASH_S:
        flag = COMBO_FLAG( WEAP_GRENADELAUNCHER );
        break;
    case MOD_PLASMA_W:
    case MOD_PLASMA_S:
    case MOD_PLASMA_SPLASH_W:
    case MOD_PLASMA_SPLASH_S:
        flag = COMBO_FLAG( WEAP_PLASMAGUN );
        break;
    case MOD_LASERGUN_W:
    case MOD_LASERGUN_S:
        flag = COMBO_FLAG( WEAP_LASERGUN );
        break;
    default:
        break;
    }

    if( flag )
    {
        if( attacker->r.client->resp.awardInfo.combo[PLAYERNUM( targ )] == COMBO_FLAG( WEAP_ROCKETLAUNCHER ) && G_IsDead( targ ) ) // RL...
        {
            if( flag == COMBO_FLAG( WEAP_ELECTROBOLT ) )  // to EB
                G_PlayerAward( attacker, S_COLOR_BLUE "RL to EB!" );
            else if( flag == COMBO_FLAG( WEAP_LASERGUN ) )  // to LG
                G_PlayerAward( attacker, S_COLOR_BLUE "RL to LG!" );
            else if( flag == COMBO_FLAG( WEAP_RIOTGUN ) )  // to RG
                G_PlayerAward( attacker, S_COLOR_BLUE "RL to RG!" );
            else if( flag == COMBO_FLAG( WEAP_GRENADELAUNCHER ) )  // to GL
                G_PlayerAward( attacker, S_COLOR_BLUE "RL to GL!" );
            //else if( flag == COMBO_FLAG( WEAP_ROCKETLAUNCHER ) )  // to RL
            //	G_PlayerAward( attacker, S_COLOR_BLUE "RL to RL!" );
        }
        else if( attacker->r.client->resp.awardInfo.combo[PLAYERNUM( targ )] == COMBO_FLAG( WEAP_ROCKETLAUNCHER ) && G_IsDead( targ ) ) // GL...
        {
            if( flag == COMBO_FLAG( WEAP_ELECTROBOLT ) )  // to EB
                G_PlayerAward( attacker, S_COLOR_BLUE "GL to EB!" );
            else if( flag == COMBO_FLAG( WEAP_LASERGUN ) )  // to LG
                G_PlayerAward( attacker, S_COLOR_BLUE "GL to LG!" );
            else if( flag == COMBO_FLAG( WEAP_RIOTGUN ) )  // to RG
                G_PlayerAward( attacker, S_COLOR_BLUE "GL to RG!" );
            else if( flag == COMBO_FLAG( WEAP_ROCKETLAUNCHER ) )  // to RL
                G_PlayerAward( attacker, S_COLOR_BLUE "GL to RL!" );
            //else if( flag == COMBO_FLAG( WEAP_GRENADELAUNCHER ) )  // to GL
            //	G_PlayerAward( attacker, S_COLOR_BLUE "GL to GL!" );
        }
        else if( attacker->r.client->resp.awardInfo.combo[PLAYERNUM( targ )] == COMBO_FLAG( WEAP_LASERGUN ) && G_IsDead( targ ) ) // LG...
        {
            if( flag == COMBO_FLAG( WEAP_ELECTROBOLT ) )  // to EB
                if( attacker->r.client->resp.awardInfo.lasthit == targ && level.time < attacker->r.client->resp.awardInfo.lasthit_time + LB_TIMEOUT_FOR_COMBO )
                    G_PlayerAward( attacker, S_COLOR_BLUE "LG to EB!" );
        }
        else if( attacker->r.client->resp.awardInfo.combo[PLAYERNUM( targ )] == COMBO_FLAG( WEAP_GUNBLADE ) && G_IsDead( targ ) )
        {
            if( flag == COMBO_FLAG( WEAP_GUNBLADE ) )
                if( attacker->r.client->resp.awardInfo.lasthit == targ && level.time < attacker->r.client->resp.awardInfo.lasthit_time + GUNBLADE_TIMEOUT_FOR_COMBO )
                    G_PlayerAward( attacker, S_COLOR_BLUE "Gunblade Combo!" );
        }

        attacker->r.client->resp.awardInfo.combo[PLAYERNUM( targ )] = flag;
    }

    attacker->r.client->resp.awardInfo.lasthit = targ;
    attacker->r.client->resp.awardInfo.lasthit_time = level.time;
}
Exemplo n.º 8
0
void G_AwardPlayerKilled( edict_t *self, edict_t *inflictor, edict_t *attacker, int mod )
{
	trace_t trace;

	if( self->r.svflags & SVF_CORPSE )
		return;

	if( !attacker->r.client )
		return;

	if( !self->r.client )
		return;

	if( attacker == self )
		return;

	if( attacker->s.team == self->s.team && attacker->s.team > TEAM_PLAYERS )
		return;

	if( mod == MOD_ROCKET_W || mod == MOD_ROCKET_S )
	{
		// direct hit
		attacker->r.client->resp.awardInfo.directrocket_count++;
		if( attacker->r.client->resp.awardInfo.directrocket_count == DIRECTROCKET_FOR_AWARD )
		{
			attacker->r.client->resp.awardInfo.directrocket_count = 0;
			attacker->r.client->resp.awardInfo.directrocket_award++;
			G_PlayerAward( attacker, S_COLOR_BLUE "Direct Rocket Hit!" );
		}
		// Midair
		if( self->groundentity == NULL && !self->waterlevel )
		{
			// check for height to the ground
			G_Trace( &trace, self->s.origin, self->r.mins, self->r.maxs, tv( self->s.origin[0], self->s.origin[1], self->s.origin[2] - 64 ), self, MASK_SOLID );
			if( trace.fraction == 1.0f )
			{
				attacker->r.client->resp.awardInfo.rl_midair_award++;
				G_PlayerAward( attacker, S_COLOR_BLUE "Air Rocket!" );
			}
		}
	}
	if( mod == MOD_GRENADE_W || mod == MOD_GRENADE_S )
	{
		// direct hit
		attacker->r.client->resp.awardInfo.directgrenade_count++;
		if( attacker->r.client->resp.awardInfo.directgrenade_count == DIRECTGRENADE_FOR_AWARD )
		{
			attacker->r.client->resp.awardInfo.directgrenade_count = 0;
			attacker->r.client->resp.awardInfo.directgrenade_award++;
			G_PlayerAward( attacker, S_COLOR_BLUE "Direct Grenade Hit!" );
		}

		// Midair
		if( self->groundentity == NULL && !self->waterlevel )
		{
			// check for height to the ground
			G_Trace( &trace, self->s.origin, self->r.mins, self->r.maxs, tv( self->s.origin[0], self->s.origin[1], self->s.origin[2] - 64 ), self, MASK_SOLID );
			if( trace.fraction == 1.0f )
			{
				attacker->r.client->resp.awardInfo.gl_midair_award++;
				G_PlayerAward( attacker, S_COLOR_BLUE "Air Grenade!" );
			}
		}
	}

	// Multikill
	if( game.serverTime - attacker->r.client->resp.awardInfo.multifrag_timer < MULTIKILL_INTERVAL )
		attacker->r.client->resp.awardInfo.multifrag_count++;
	else
		attacker->r.client->resp.awardInfo.multifrag_count = 1;

	attacker->r.client->resp.awardInfo.multifrag_timer = game.serverTime;

	if( attacker->r.client->resp.awardInfo.multifrag_count > 1 )
	{
		char s[MAX_CONFIGSTRING_CHARS];

		s[0] = 0;

		switch( attacker->r.client->resp.awardInfo.multifrag_count )
		{
		case 0:
		case 1:
			break;
		case 2:
			Q_strncpyz( s, S_COLOR_GREEN "Double Frag!", sizeof( s ) );
			break;
		case 3:
			Q_strncpyz( s, S_COLOR_GREEN "Triple Frag!", sizeof( s ) );
			break;
		case 4:
			Q_strncpyz( s, S_COLOR_GREEN "Quadruple Frag!", sizeof( s ) );
			break;
		default:
			Q_snprintfz( s, sizeof( s ), S_COLOR_GREEN "Extermination! %i in a row!", attacker->r.client->resp.awardInfo.multifrag_count );
			break;
		}

		G_PlayerAward( attacker, s );
	}

	// Sprees
	attacker->r.client->resp.awardInfo.frag_count++;

	if( attacker->r.client->resp.awardInfo.frag_count &&
		( attacker->r.client->resp.awardInfo.frag_count % 5 == 0 ) )
	{
		char s[MAX_CONFIGSTRING_CHARS];

		s[0] = 0;

		switch( (int)( attacker->r.client->resp.awardInfo.frag_count / 5 ) )
		{
		case 1:
			Q_strncpyz( s, S_COLOR_YELLOW "On Fire!", sizeof( s ) );
			G_PrintMsg( NULL, "%s" S_COLOR_YELLOW " is On Fire!\n", attacker->r.client->netname );
			break;
		case 2:
			Q_strncpyz( s, S_COLOR_YELLOW "Raging!", sizeof( s ) );
			G_PrintMsg( NULL, "%s" S_COLOR_YELLOW " is Raging!\n", attacker->r.client->netname );
			break;
		case 3:
			Q_strncpyz( s, S_COLOR_YELLOW "Fraglord!", sizeof( s ) );
			G_PrintMsg( NULL, "%s" S_COLOR_YELLOW " is the Fraglord!\n", attacker->r.client->netname );
			break;
		case 4:
			Q_strncpyz( s, S_COLOR_YELLOW "Extermination!", sizeof( s ) );
			G_PrintMsg( NULL, "%s" S_COLOR_YELLOW " is Exterminating!\n", attacker->r.client->netname );
			break;
		default:
			Q_strncpyz( s, S_COLOR_YELLOW "God Mode!", sizeof( s ) );
			G_PrintMsg( NULL, "%s" S_COLOR_YELLOW " is in God Mode!\n", attacker->r.client->netname );
			break;
		}

		G_PlayerAward( attacker, s );
	}
}