コード例 #1
0
/*
   fills the ratings struct pointed to by r with the stats for the player
   pointed to by j [BDyess]
*/
struct ratings *
get_ratings(struct player *j, struct ratings *r)
{
    if (paradise) {
	struct stats2 *s;	/* point to player's paradise stats */
	float   t, t2;		/* temps */

	s = &(j->p_stats2);
	/* fill in kills, losses, and maxkills based on ship type */
	if (j->p_ship->s_type == STARBASE) {
	    r->r_kills = s->st_sbkills;
	    r->r_losses = s->st_sblosses;
	    r->r_maxkills = s->st_sbmaxkills;
	} else if (j->p_ship->s_type == WARBASE) {
	    r->r_kills = s->st_wbkills;
	    r->r_losses = s->st_wblosses;
	    r->r_maxkills = s->st_wbmaxkills;
	} else {
	    r->r_kills = s->st_tkills;
	    r->r_losses = s->st_tlosses;
	    r->r_maxkills = s->st_tmaxkills;
	}
	/* calculate ratio */
	r->r_ratio = (r->r_losses != 0) ? r->r_kills / (float) r->r_losses
	    : r->r_kills;
	/*
	   r->r_ratio = (s->st_tlosses != 0) ? (float) s->st_tkills / (float)
	   s->st_tlosses : s->st_tkills;
	*/
	status2->timeprod = status2->timeprod ? status2->timeprod : 1;
	t = (float) s->st_tticks / (float) status2->timeprod;	/* hour ratio */
	if (t == 0.0)
	    t = 1.0;
	t2 = t * (float) status2->losses;	/* get expected losses */
	if(t2 == 0) t2=1;
	r->r_defrat = s->st_tlosses / t2;	/* calc defense rating */

	t2 = t * (float) status2->kills;	/* get expected kills */
	if(t2 == 0) t2=1;
	r->r_offrat = s->st_tkills / t2;	/* calc offense rating */

	t2 = t * (float) status2->armsbomb;	/* expected armies bombed */
	if(t2 == 0) t2=1;
	r->r_bombrat = (float) s->st_tarmsbomb / t2;	/* bomb rating */

	t2 = t * (float) status2->resbomb;	/* expected resources bmbd */
	if(t2 == 0) t2=1;
	r->r_resrat = (float) s->st_tresbomb / t2;	/* resrce bmbd rating */

	t2 = t * (float) status2->dooshes;	/* expected armies dooshed */
	if(t2 == 0) t2=1;
	r->r_dooshrat = (float) s->st_tdooshes / t2;	/* doosh rating */

	r->r_batrat = r->r_dooshrat + r->r_offrat;	/* get battle rating */

	t2 = t * (float) status2->planets;	/* expected planets */
	if(t2 == 0) t2=1;
	r->r_planetrat = (float) s->st_tplanets / t2;	/* get planet rating */
	/* strategy rating */
	r->r_stratrat = r->r_bombrat + r->r_resrat + r->r_planetrat;
	/* calculate sb rating */
	t2 = (float) status2->sbkills / (float)( (status2->sblosses > 0) ? status2->sblosses : 1);
	if (s->st_sblosses == 0)
	    r->r_sbrat = 0.0;
	else if (t2 == 0)
	    r->r_sbrat = 99.0;
	else
	    r->r_sbrat = ((float) s->st_sbkills / (float) s->st_sblosses) / t2;
	/* calculate wb rating */
	t2 = (float) status2->wbkills / (float)( (status2->wblosses > 0) ? status2->wblosses : 1);
	if (s->st_wblosses == 0)
	    r->r_wbrat = 0.0;
	else if (t2 == 0)
	    r->r_wbrat = 99.0;
	else
	    r->r_wbrat = ((float) s->st_wbkills / (float) s->st_wblosses) / t2;
	/* calculate js rating */
	t = (float) s->st_jsticks / (float)( (status2->jstime > 0) ? status2->jstime : 1);
	t2 = t * (float) status2->jsplanets;	/* get expected js planets */
	if (t2 == 0.0)
	    r->r_jsrat = 0.0;
	else if (t2 == 0)
	    r->r_jsrat = 99.0;
	else
	    r->r_jsrat = (float) s->st_jsplanets / t2;	/* js rating */
	r->r_jsplanets = s->st_jsplanets;	/* store js planets */

	r->r_specrat = r->r_sbrat + r->r_wbrat + r->r_jsrat;	/* get special ship
								   rating */
	/* put the sum of the three major ratings in the 'ratings' slot */
	r->r_ratings = r->r_specrat + r->r_batrat + r->r_stratrat;
	r->r_genocides = s->st_genocides;	/* get # genocides */
	r->r_di = s->st_di;	/* get player's DI */
	t = (s->st_tticks) ? s->st_tticks : 1.0;
	r->r_killsPerHour = r->r_kills * 36000.0 / t;
	r->r_lossesPerHour = r->r_losses * 36000.0 / t;
	r->r_planets = s->st_tplanets;
	r->r_armies = s->st_tarmsbomb;
	r->r_resources = s->st_tresbomb;
	r->r_dooshes = s->st_tdooshes;
	/* r->r_jsplanets = s->st_jsplanets; */
    } else {			/* bronco stats */
	struct stats *s = &j->p_stats;

	r->r_offrat = offenseRating(j);	/* offense */
	r->r_planetrat = planetRating(j);	/* planet */
	r->r_bombrat = bombingRating(j);	/* bombing */
	r->r_offrat = offenseRating(j);	/* offense */
	r->r_defrat = defenseRating(j);	/* defense */
	r->r_resrat = 0;	/* these don't apply */
	r->r_dooshrat = 0;
	r->r_stratrat = 0;
	r->r_batrat = 0;
	r->r_sbrat = 0;
	r->r_wbrat = 0;
	r->r_jsrat = 0;
	r->r_jsplanets = 0;
	r->r_specrat = 0;
	r->r_ratings = r->r_offrat + r->r_planetrat + r->r_bombrat;	/* ratings */
	r->r_di = r->r_ratings * s->st_tticks / 36000.0;	/* di */
	/* fill in kills, losses, and ratio based on ship type */
	if (j->p_ship->s_type == STARBASE) {
	    r->r_kills = s->st_sbkills;
	    r->r_losses = s->st_sblosses;
	    r->r_ratio = (s->st_sblosses != 0)
		? (float) r->r_kills / (float) r->r_losses
		: (float) j->p_stats.st_sbkills;
	    r->r_maxkills = j->p_stats.st_sbmaxkills;
	} else {
	    r->r_kills = s->st_kills + s->st_tkills;
	    r->r_losses = s->st_losses + s->st_tlosses;
	    r->r_ratio = (r->r_losses != 0)
		? (float) r->r_kills / (float) r->r_losses
		: r->r_kills;
	    r->r_maxkills = s->st_maxkills;
	}
	r->r_planets = s->st_tplanets + s->st_planets;
	r->r_armies = s->st_armsbomb + s->st_tarmsbomb;
	/* not recorded in bronco */
	r->r_resources = 0;
	/* r->r_jsplanets = 0; */
	r->r_dooshes = 0;
	r->r_genocides = 0;
    }
    return r;
}
コード例 #2
0
ファイル: playerlist.c プロジェクト: quozl/netrek-server
playerlist1()
{
    register int i;
    char buf[100];
    register struct player *j;
    int kills, losses;
    double ratio;
    float pRating, oRating, dRating, bRating;

    if (!W_IsMapped(plstatw)) return;
    for (i = 0, j = &players[i]; i < MAXPLAYER; i++, j++) {
	if (!updatePlayer[i]) continue;
	updatePlayer[i]=0;
/*	if (j->p_status != PALIVE) {*/
	if (j->p_status == PFREE) {
	    W_ClearArea(plstatw, 0, i+2, 83, 1, backColor);
	    continue;
	}
#ifndef LTD_STATS
	if (j->p_ship.s_type == STARBASE) {
	    kills=j->p_stats.st_sbkills;
	    losses=j->p_stats.st_sblosses;
	} else {
	    kills=j->p_stats.st_kills + j->p_stats.st_tkills;
	    losses=j->p_stats.st_losses + j->p_stats.st_tlosses;
	}
	if (losses==0) {
	    ratio=kills;
	} else {
	    ratio=(double) kills/losses;
	}
	oRating = offenseRating(j);
	dRating = defenseRating(j);
	pRating = planetRating(j);
	bRating = bombingRating(j);
#else /* LTD_STATS */
	kills = 0;
	losses = 0;
	ratio = 0;
	oRating = 0;
	dRating = 0;
	pRating = 0;
	bRating = 0;
#endif /* LTD_STATS */
	(void) sprintf(buf, "%c%c %s  %-9.9s %-16.16s%5.2f %5d %5d %6.2lf   %5.2f   %5.2f %8.2f",
	    teamlet[j->p_team],
	    shipnos[j->p_no],
	    (j->p_status == PALIVE) ? classes[j->p_ship.s_type] : 
	       statchars(j->p_status),
	    ranks[j->p_stats.st_rank].name,
	    j->p_name,
	    j->p_kills,
	    kills,
	    losses,
	    ratio,
	    oRating,
	    dRating,
#ifndef LTD_STATS
	    (oRating+pRating+bRating)*(j->p_stats.st_tticks/36000.0));
#else /* LTD_STATS */
	    0.0);
#endif /* LTD_STATS */
	W_WriteText(plstatw, 0, i+2, 
		/* TSH 2/10/93 */
		(me->p_flags & PFPLOCK && j->p_no == me->p_playerl)?
		myColor: playerColor(j), buf, strlen(buf),
	    shipFont(j));
    }
}