Added Allstats (Issue 123)
Cleaned a bit of !nobuild (Issue 128)
This commit is contained in:
1 parent
022659c3d7
commit
8062f15b5a
5 files changed
+108
-55
No files matched your search
+9
-9
@@ -2848,14 +2848,6 @@ qboolean G_admin_layoutsave( gentity_t *ent, int skiparg )
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
qboolean G_admin_nobuildsave( gentity_t *ent, int skiparg )
|
||||
{
|
||||
|
||||
trap_SendConsoleCommand( EXEC_APPEND, "nobuildsave" );
|
||||
AP( va( "print \"^3!nobuildsave: ^7nobuild saved by %s\n\"", ( ent ) ? ent->client->pers.netname : "console" ) );
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
qboolean G_admin_mute( gentity_t *ent, int skiparg )
|
||||
{
|
||||
int pids[ MAX_CLIENTS ];
|
||||
@@ -7740,7 +7732,7 @@ qboolean G_admin_nobuild( gentity_t *ent, int skiparg )
|
||||
|
||||
if( G_SayArgc() < minargc )
|
||||
{
|
||||
ADMP( "^3!buildno: ^7usage: !nobuild [game units]\n" );
|
||||
ADMP( "^3!nobuild: ^7usage: !nobuild [game units]\n" );
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
@@ -7771,3 +7763,11 @@ qboolean G_admin_nobuild( gentity_t *ent, int skiparg )
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
qboolean G_admin_nobuildsave( gentity_t *ent, int skiparg )
|
||||
{
|
||||
|
||||
trap_SendConsoleCommand( EXEC_APPEND, "nobuildsave" );
|
||||
AP( va( "print \"^3!nobuildsave: ^7nobuild markers saved by %s\n\"", ( ent ) ? ent->client->pers.netname : "console" ) );
|
||||
|
||||
return qtrue;
|
||||
}
|
||||
+4
-45
@@ -3086,11 +3086,10 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance
|
||||
|
||||
range[0] = nbent->nobuildarea;
|
||||
range[1] = nbent->nobuildarea;
|
||||
range[2] = 0;
|
||||
range[2] = 5;
|
||||
|
||||
VectorAdd( nbent->r.currentOrigin, range, maxs3 );
|
||||
VectorSubtract( nbent->r.currentOrigin, range, mins3 );
|
||||
maxs[2] += 5;
|
||||
|
||||
num2 = trap_EntitiesInBox( mins3, maxs3, entitylist, MAX_GENTITIES );
|
||||
for(i = 0; i < num2; i++)
|
||||
@@ -4522,47 +4521,6 @@ void G_NobuildSave( void )
|
||||
trap_FS_FCloseFile( f );
|
||||
}
|
||||
|
||||
int G_NobuildList( char *list, int len )
|
||||
{
|
||||
// up to 128 single character nobuild names could fit in nobuilds
|
||||
char fileList[ ( MAX_CVAR_VALUE_STRING / 2 ) * 5 ] = {""};
|
||||
char nobuild[ MAX_CVAR_VALUE_STRING ] = {""};
|
||||
int numFiles, i, fileLen = 0, listLen;
|
||||
int count = 0;
|
||||
char *filePtr;
|
||||
|
||||
numFiles = trap_FS_GetFileList( va( "nobuild" ), ".dat",
|
||||
fileList, sizeof( fileList ) );
|
||||
filePtr = fileList;
|
||||
for( i = 0; i < numFiles; i++, filePtr += fileLen + 1 )
|
||||
{
|
||||
fileLen = strlen( filePtr );
|
||||
listLen = strlen( nobuild );
|
||||
if( fileLen < 5 )
|
||||
continue;
|
||||
|
||||
// list is full, stop trying to add to it
|
||||
if( ( listLen + fileLen ) >= sizeof( nobuild ) )
|
||||
break;
|
||||
|
||||
Q_strcat( nobuild, sizeof( nobuild ), filePtr );
|
||||
listLen = strlen( nobuild );
|
||||
|
||||
// strip extension and add space delimiter
|
||||
nobuild[ listLen - 4 ] = ' ';
|
||||
nobuild[ listLen - 3 ] = '\0';
|
||||
count++;
|
||||
}
|
||||
if( count != numFiles )
|
||||
{
|
||||
G_Printf( S_COLOR_YELLOW "WARNING: nobuild list was truncated to %d "
|
||||
"nobuilds, but %d nobuild files exist in /nobuilds/.\n",
|
||||
count, numFiles );
|
||||
}
|
||||
Q_strncpyz( list, nobuild, len );
|
||||
return count + 1;
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
G_NobuildLoad
|
||||
@@ -4598,8 +4556,9 @@ void G_NobuildLoad( void )
|
||||
{
|
||||
if( i >= sizeof( line ) - 1 )
|
||||
{
|
||||
G_Printf( S_COLOR_RED "ERROR: line overflow in %s before \"%s\"\n",
|
||||
va( "nobuild/%s.dat", map ), line );
|
||||
// Since nobuild will be loaded on every map load, or atleast attmepted to be loaded, im just going to disable this warning since its just spam.
|
||||
/*G_Printf( S_COLOR_RED "ERROR: line overflow in %s before \"%s\"\n",
|
||||
va( "nobuild/%s.dat", map ), line );*/
|
||||
return;
|
||||
}
|
||||
line[ i++ ] = *nobuild;
|
||||
|
||||
@@ -4069,6 +4069,89 @@ 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;
|
||||
qboolean HasResults;
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
//display a header describing the data
|
||||
ADMP( "^3 K A SK| D F S TK| DD| SB| Name\n" );
|
||||
HasResults = qfalse;
|
||||
//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 )
|
||||
{
|
||||
ADMP( va( "^7%3i %3i %3i^3|^7%3i %3i %3i %3i^3|^7%5i^3|^7%3i^3|^7 %s\n",
|
||||
( 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,
|
||||
( 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,
|
||||
( tmpent->client->pers.statscounters.dmgdone ) ? tmpent->client->pers.statscounters.dmgdone : 0,
|
||||
( tmpent->client->pers.statscounters.structsbuilt ) ? tmpent->client->pers.statscounters.structsbuilt : 0,
|
||||
( tmpent->client->pers.netname ) ? tmpent->client->pers.netname : "Unknown" ) );
|
||||
HasResults = qtrue;
|
||||
}
|
||||
}
|
||||
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 ) )
|
||||
{
|
||||
ADMP( va( "^7%3i %3i %3i^3|^7%3i %3i %3i %3i^3|^7%5i^3|^7%3i^3|^7 %s\n",
|
||||
( 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,
|
||||
( 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,
|
||||
( tmpent->client->pers.statscounters.dmgdone ) ? tmpent->client->pers.statscounters.dmgdone : 0,
|
||||
( tmpent->client->pers.statscounters.structsbuilt ) ? tmpent->client->pers.statscounters.structsbuilt : 0,
|
||||
( tmpent->client->pers.netname ) ? tmpent->client->pers.netname : "Unknown" ) );
|
||||
HasResults = qtrue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if( HasResults == qfalse ) ADMP( " ^3EMPTY!\n" );
|
||||
//update time last viewed
|
||||
ent->client->pers.statscounters.AllstatstimeLastViewed = level.time;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
@@ -4942,6 +5025,7 @@ commands_t cmds[ ] = {
|
||||
|
||||
{ "score", CMD_INTERMISSION, ScoreboardMessage },
|
||||
{ "mystats", CMD_TEAM|CMD_INTERMISSION, Cmd_MyStats_f },
|
||||
{ "allstats", 0|CMD_INTERMISSION, Cmd_AllStats_f },
|
||||
{ "teamstatus", CMD_TEAM, Cmd_TeamStatus_f },
|
||||
|
||||
|
||||
|
||||
@@ -348,6 +348,7 @@ typedef struct
|
||||
int dretchbasytime;
|
||||
int jetpackusewallwalkusetime;
|
||||
int timeLastViewed;
|
||||
int AllstatstimeLastViewed;
|
||||
} statsCounters_t;
|
||||
|
||||
// client data that stays across multiple respawns, but is cleared
|
||||
@@ -1441,6 +1442,9 @@ extern vmCvar_t g_instantBuild; // Enable instant building outside of d
|
||||
extern vmCvar_t g_teamStatus; // Allow the use of /teamstatus
|
||||
extern vmCvar_t g_teamStatusTime; // Allow the use of /teamstatus
|
||||
|
||||
extern vmCvar_t g_AllStats;
|
||||
extern vmCvar_t g_AllStatsTime;
|
||||
|
||||
void trap_Printf( const char *fmt );
|
||||
void trap_Error( const char *fmt );
|
||||
int trap_Milliseconds( void );
|
||||
|
||||
+7
-1
@@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#include "g_local.h"
|
||||
|
||||
#define QVM_VARIANT "P-G-QVM"
|
||||
#define QVM_VERSION "SVN r71"
|
||||
#define QVM_VERSION "SVN r72"
|
||||
|
||||
level_locals_t level;
|
||||
|
||||
@@ -248,6 +248,9 @@ vmCvar_t g_teamStatusTime;
|
||||
|
||||
vmCvar_t g_instantBuild;
|
||||
|
||||
vmCvar_t g_AllStats;
|
||||
vmCvar_t g_AllStatsTime;
|
||||
|
||||
static cvarTable_t gameCvarTable[ ] =
|
||||
{
|
||||
// don't override the cheat state set by the system
|
||||
@@ -475,6 +478,9 @@ static cvarTable_t gameCvarTable[ ] =
|
||||
{ &g_randomLayoutPercent, "g_randomLayoutPercent", "100", CVAR_ARCHIVE, 0, qfalse },
|
||||
{ &g_randomMaps, "g_randomMaps", "1", CVAR_ARCHIVE, 0, qfalse },
|
||||
{ &g_randomMapList, "g_randomMapList", "", CVAR_ARCHIVE, 0, qfalse },
|
||||
|
||||
{ &g_AllStats, "g_AllStats", "", CVAR_ARCHIVE, 0, qfalse },
|
||||
{ &g_AllStatsTime, "g_AllStatsTime", "", CVAR_ARCHIVE, 0, qfalse },
|
||||
};
|
||||
|
||||
static int gameCvarTableSize = sizeof( gameCvarTable ) / sizeof( gameCvarTable[ 0 ] );
|
||||
|
||||
Reference in new issue
Block a user