From 679261bf99df9365f55e75457c94b6b5d7189068 Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Wed, 15 Apr 2020 22:59:31 +0200 Subject: Track funds fed; rework /allstats --- src/game/g_cmds.c | 200 +++++++++++++++++++++++++--------------------------- src/game/g_combat.c | 3 + src/game/g_local.h | 1 + 3 files changed, 102 insertions(+), 102 deletions(-) (limited to 'src/game') diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index e39c465..10bb2aa 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -4102,7 +4102,7 @@ char *G_statsString( statsCounters_t *sc, pTeam_t *pt ) if( sc->hitslocational ) percentHeadshots = (int)(100 * (float) sc->headshots / ((float) (sc->hitslocational) ) ); - s = va( "^3Kills:^7 %3i ^3StructKills:^7 %3i ^3Assists:^7 %3i^7 ^3Poisons:^7 %3i ^3Headshots:^7 %3i (%3i)\n^3Deaths:^7 %3i ^3Feeds:^7 %3i ^3Suicides:^7 %3i ^3TKs:^7 %3i ^3Avg Lifespan:^7 %4d:%02d\n^3Damage to:^7 ^3Enemies:^7 %5i ^3Structs:^7 %5i ^3Friendlies:^7 %3i \n^3Structs Built:^7 %3i ^3Time Near Base:^7 %3i ^3Time wallwalking:^7 %3i\n^3Earned:^7 %6.3f ^3Shared:^7 %6.3f ^3Overflowed:^7 %6.3f ^3Recvd:^7 %6.3f\n", + s = va( "^3Kills:^7 %3i ^3StructKills:^7 %3i ^3Assists:^7 %3i^7 ^3Poisons:^7 %3i ^3Headshots:^7 %3i (%3i)\n^3Deaths:^7 %3i ^3Feeds:^7 %3i ^3Suicides:^7 %3i ^3TKs:^7 %3i ^3Avg Lifespan:^7 %4d:%02d\n^3Damage to:^7 ^3Enemies:^7 %5i ^3Structs:^7 %5i ^3Friendlies:^7 %3i \n^3Structs Built:^7 %3i ^3Time Near Base:^7 %3i ^3Time wallwalking:^7 %3i\n^3Earned:^7 %6.3f ^3Fed:^7 %6.3f ^3Shared:^7 %6.3f ^3Overflowed:^7 %6.3f ^3Recvd:^7 %6.3f\n", sc->kills, sc->structskilled, sc->assists, @@ -4122,6 +4122,7 @@ char *G_statsString( statsCounters_t *sc, pTeam_t *pt ) percentNearBase, percentJetpackWallwalk, sc->earned / EVO_TO_CREDS_RATE, + sc->fed / EVO_TO_CREDS_RATE, sc->shared / EVO_TO_CREDS_RATE, sc->overflowed / EVO_TO_CREDS_RATE, sc->received / EVO_TO_CREDS_RATE @@ -4131,7 +4132,7 @@ char *G_statsString( statsCounters_t *sc, pTeam_t *pt ) { if( sc->timealive ) percentJetpackWallwalk = (int)(100 * (float) sc->jetpackusewallwalkusetime / ((float) ( sc->timealive ) ) ); - s = va( "^3Kills:^7 %3i ^3StructKills:^7 %3i ^3Assists:^7 %3i \n^3Deaths:^7 %3i ^3Feeds:^7 %3i ^3Suicides:^7 %3i ^3TKs:^7 %3i ^3Avg Lifespan:^7 %4d:%02d\n^3Damage to:^7 ^3Enemies:^7 %5i ^3Structs:^7 %5i ^3Friendlies:^7 %3i \n^3Structs Built:^7 %3i ^3Repairs:^7 %4i ^3Time Near Base:^7 %3i ^3Time Jetpacking:^7 %3i\n^3Earned:^7 %6d ^3Shared:^7 %6d ^3Overflowed:^7 %6d ^3Recvd:^7 %6d\n", + s = va( "^3Kills:^7 %3i ^3StructKills:^7 %3i ^3Assists:^7 %3i \n^3Deaths:^7 %3i ^3Feeds:^7 %3i ^3Suicides:^7 %3i ^3TKs:^7 %3i ^3Avg Lifespan:^7 %4d:%02d\n^3Damage to:^7 ^3Enemies:^7 %5i ^3Structs:^7 %5i ^3Friendlies:^7 %3i \n^3Structs Built:^7 %3i ^3Repairs:^7 %4i ^3Time Near Base:^7 %3i ^3Time Jetpacking:^7 %3i\n^3Earned:^7 %6d ^3Fed:^7 %6d ^3Shared:^7 %6d ^3Overflowed:^7 %6d ^3Recvd:^7 %6d\n", sc->kills, sc->structskilled, sc->assists, @@ -4149,6 +4150,7 @@ char *G_statsString( statsCounters_t *sc, pTeam_t *pt ) percentNearBase, percentJetpackWallwalk, sc->earned, + sc->fed, sc->shared, sc->overflowed, sc->received @@ -4159,112 +4161,106 @@ char *G_statsString( statsCounters_t *sc, pTeam_t *pt ) return s; } - /* - ================= - Cmd_AllStats_f - ================= - */ - void Cmd_AllStats_f( gentity_t *ent ) - { - int i; - int NextViewTime; - int NumResults = 0; - int Teamcolor = 3; - gentity_t *tmpent; - - //check if ent exists - if(!ent) return; - - NextViewTime = ent->client->pers.statscounters.AllstatstimeLastViewed + g_AllStatsTime.integer * 1000; - //check if you can use the cmd at this time - if( !level.intermissiontime && level.time < NextViewTime) +/* +================= +Cmd_AllStats_f +================= +*/ +void Cmd_AllStats_f( gentity_t *ent ) +{ + int i; + int NextViewTime; + int NumResults = 0; + float divisor = 0.0f; + char Teamcolor = 'c'; + gentity_t *other; + + //check if ent exists + if(!ent) return; + + NextViewTime = ent->client->pers.statscounters.AllstatstimeLastViewed + g_AllStatsTime.integer * 1000; + //check if you can use the cmd at this time + if( !level.intermissiontime && level.time < NextViewTime) + { + ADMP( va("You may only check your stats every %i Seconds and during intermission. Next valid time is %d:%02d\n", + ( g_AllStatsTime.integer ) ? ( g_AllStatsTime.integer ) : 60, + ( NextViewTime / 60000 ), ( NextViewTime / 1000 ) % 60 ) ); + return; + } + + //see if allstats is enabled + if( !g_AllStats.integer ) + { + ADMP( "AllStats has been disabled\n"); + return; + } + + ADMP("^cK^B=^7Kills ^cA^B=^7Assists ^cSK^B=^7StructKills\n^cD^B=^7Deaths ^cF^B=^7Feeds ^cS^B=^7Suicides ^cTK^B=^7Teamkills\n^cDD^B=^7Damage done ^cTDD^B=^7Team Damage done\n^cSB^B=^7Structs Built\n^cEA^B=^7Funds Earned (Humans x100) ^cFE^B=^7Funds Earned by Enemies\n\n" ); + //display a header describing the data + ADMP( "^c #| K A SK| D F S TK| DD TDD| SB| EA FE| Name\n" ); + + //loop through the clients that are connected + for( i = 0; i < level.numConnectedClients; i++ ) + { + other = g_entities + level.sortedClients[ i ]; + + if( !other->client || other->client->pers.connected != CON_CONNECTED ) + continue; + + if( other->client->pers.teamSelection == PTE_NONE ) + continue; + + // g_AllStats 1 shows only teammates + if( g_AllStats.integer == 1 && ent->client->pers.teamSelection != PTE_NONE + && other->client->pers.teamSelection != ent->client->pers.teamSelection ) + continue; + + NumResults++; + if( other->client->pers.teamSelection == PTE_ALIENS ) { - ADMP( va("You may only check your stats every %i Seconds and during intermission. Next valid time is %d:%02d\n",( g_AllStatsTime.integer ) ? ( g_AllStatsTime.integer ) : 60, ( NextViewTime / 60000 ), ( NextViewTime / 1000 ) % 60 ) ); - return; + Teamcolor = 'F'; + divisor = EVO_TO_CREDS_RATE; } - //see if allstats is enabled - if( !g_AllStats.integer ) + else if( other->client->pers.teamSelection == PTE_HUMANS ) { - ADMP( "AllStats has been disabled\n"); - return; + Teamcolor = 't'; + divisor = 100.0f; } - ADMP("^3K^2=^7Kills ^3A^2=^7Assists ^3SK^2=^7StructKills\n^3D^2=^7Deaths ^3F^2=^7Feeds ^3S^2=^7Suicides ^3TK^2=^7Teamkills\n^3DD^2=^7Damage done ^3TDD^2=^7Team Damage done\n^3SB^2=^7Structs Built\n\n" ); - //display a header describing the data - ADMP( "^3 #| K A SK| D F S TK| DD TDD| SB| Name\n" ); - //loop through the clients that are connected - for( i = 0; i < level.numConnectedClients; i++ ) - { - //assign a tempent 4 the hell of it - tmpent = &g_entities[ level.sortedClients[ i ] ]; - - //check for what mode we are working in and display relevent data - if( g_AllStats.integer == 1 ) - { - //check if client is connected and on same team - if( tmpent->client && tmpent->client->pers.connected == CON_CONNECTED && tmpent->client->pers.teamSelection == ent->client->pers.teamSelection && tmpent->client->pers.teamSelection != PTE_NONE ) - { - NumResults++; - if( tmpent->client->pers.teamSelection == PTE_ALIENS ) Teamcolor = 1; - if( tmpent->client->pers.teamSelection == PTE_HUMANS ) Teamcolor = 5; - ADMP( va( "^%i%2i^3|^%i%3i %3i %3i^3|^%i%3i %3i %3i %3i^3|^%i%5i %5i^3|^%i%3i^3|^7 %s\n", - Teamcolor, - NumResults, - Teamcolor, - ( tmpent->client->pers.statscounters.kills ) ? tmpent->client->pers.statscounters.kills : 0, - ( tmpent->client->pers.statscounters.assists ) ? tmpent->client->pers.statscounters.assists : 0, - ( tmpent->client->pers.statscounters.structskilled ) ? tmpent->client->pers.statscounters.structskilled : 0, - Teamcolor, - ( tmpent->client->pers.statscounters.deaths ) ? tmpent->client->pers.statscounters.deaths : 0, - ( tmpent->client->pers.statscounters.feeds ) ? tmpent->client->pers.statscounters.feeds : 0, - ( tmpent->client->pers.statscounters.suicides ) ? tmpent->client->pers.statscounters.suicides : 0, - ( tmpent->client->pers.statscounters.teamkills ) ? tmpent->client->pers.statscounters.teamkills : 0, - Teamcolor, - ( tmpent->client->pers.statscounters.dmgdone ) ? tmpent->client->pers.statscounters.dmgdone : 0, - ( tmpent->client->pers.statscounters.ffdmgdone ) ? tmpent->client->pers.statscounters.ffdmgdone : 0, - Teamcolor, - ( tmpent->client->pers.statscounters.structsbuilt ) ? tmpent->client->pers.statscounters.structsbuilt : 0, - ( tmpent->client->pers.netname ) ? tmpent->client->pers.netname : "Unknown" ) ); - } - } - else if( g_AllStats.integer == 2 ) - { - //check if client is connected and has some stats or atleast is on a team - if( tmpent->client && tmpent->client->pers.connected == CON_CONNECTED && ( tmpent->client->pers.teamSelection != PTE_NONE ) ) - { - NumResults++; - if( tmpent->client->pers.teamSelection == PTE_ALIENS ) Teamcolor = 1; - if( tmpent->client->pers.teamSelection == PTE_HUMANS ) Teamcolor = 5; - ADMP( va( "^%i%2i^3|^%i%3i %3i %3i^3|^%i%3i %3i %3i %3i^3|^%i%5i %5i^3|^%i%3i^3|^7 %s\n", - Teamcolor, - NumResults, - Teamcolor, - ( tmpent->client->pers.statscounters.kills ) ? tmpent->client->pers.statscounters.kills : 0, - ( tmpent->client->pers.statscounters.assists ) ? tmpent->client->pers.statscounters.assists : 0, - ( tmpent->client->pers.statscounters.structskilled ) ? tmpent->client->pers.statscounters.structskilled : 0, - Teamcolor, - ( tmpent->client->pers.statscounters.deaths ) ? tmpent->client->pers.statscounters.deaths : 0, - ( tmpent->client->pers.statscounters.feeds ) ? tmpent->client->pers.statscounters.feeds : 0, - ( tmpent->client->pers.statscounters.suicides ) ? tmpent->client->pers.statscounters.suicides : 0, - ( tmpent->client->pers.statscounters.teamkills ) ? tmpent->client->pers.statscounters.teamkills : 0, - Teamcolor, - ( tmpent->client->pers.statscounters.dmgdone ) ? tmpent->client->pers.statscounters.dmgdone : 0, - ( tmpent->client->pers.statscounters.ffdmgdone ) ? tmpent->client->pers.statscounters.ffdmgdone : 0, - Teamcolor, - ( tmpent->client->pers.statscounters.structsbuilt ) ? tmpent->client->pers.statscounters.structsbuilt : 0, - ( tmpent->client->pers.netname ) ? tmpent->client->pers.netname : "Unknown" ) ); - } - } - } - if( NumResults == 0 ) { - ADMP( " ^3EMPTY!\n" ); - } else { - ADMP( va( "^7 %i Players found!\n", NumResults ) ); - } - //update time last viewed + ADMP( va( "^%c%2i^c|^%c%3i %3i %3i^c|^%c%3i %3i %3i %3i^c|^%c%5i %5i^c|^%c%3i^c|^%c%4i %4i^c|^7 %s\n", + Teamcolor, NumResults, Teamcolor, + other->client->pers.statscounters.kills, + other->client->pers.statscounters.assists, + other->client->pers.statscounters.structskilled, + Teamcolor, + other->client->pers.statscounters.deaths, + other->client->pers.statscounters.feeds, + other->client->pers.statscounters.suicides, + other->client->pers.statscounters.teamkills, + Teamcolor, + other->client->pers.statscounters.dmgdone, + other->client->pers.statscounters.ffdmgdone, + Teamcolor, + other->client->pers.statscounters.structsbuilt, + Teamcolor, + (int)floor( other->client->pers.statscounters.earned / divisor ), + (int)floor( other->client->pers.statscounters.fed / divisor ), + other->client->pers.netname ) ); + } - ent->client->pers.statscounters.AllstatstimeLastViewed = level.time; - return; + if( NumResults == 0 ) + { + ADMP( " ^cEMPTY!\n" ); + } + else + { + ADMP( va( "^7 %i player%s found!\n", NumResults, NumResults == 1 ? "" : "s" ) ); + } + + //update time last viewed + ent->client->pers.statscounters.AllstatstimeLastViewed = level.time; + + return; } /* diff --git a/src/game/g_combat.c b/src/game/g_combat.c index 60d4f28..2bfa6f6 100644 --- a/src/game/g_combat.c +++ b/src/game/g_combat.c @@ -530,6 +530,7 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int amount = classValue * percentDamage; G_AddCreditToClient( player->client, amount, qtrue ); player->client->pers.statscounters.earned += amount; + self->client->pers.statscounters.fed += amount; if( g_debugRewards.integer ) Com_Printf( ", %d credit(s) to #%d for %.1f%% of damage", amount, @@ -587,6 +588,7 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int //add kills G_AddCreditToClient( player->client, frags, qtrue ); player->client->pers.statscounters.earned += frags; + self->client->pers.statscounters.fed += frags; if( g_debugRewards.integer ) Com_Printf( ", %d/%d evo(s) to #%d for %.1f%% of damage", frags, @@ -634,6 +636,7 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int //add kills G_AddCreditToClient( player->client, 1, qtrue ); player->client->pers.statscounters.earned += 1; + self->client->pers.statscounters.fed += 1; if( g_debugRewards.integer ) Com_Printf( ", 1/%d to #%d (unclaimed)", (int)EVO_TO_CREDS_RATE, diff --git a/src/game/g_local.h b/src/game/g_local.h index 635ceb1..af29793 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -365,6 +365,7 @@ typedef struct int AllstatstimeLastViewed; int spreebleeds; int earned; + int fed; int shared; int overflowed; int received; -- cgit