diff --git a/Makefile b/Makefile index 460ee3c..47117f2 100644 --- a/Makefile +++ b/Makefile @@ -2241,6 +2241,7 @@ Q3GOBJ_ = \ $(B)/$(BASEGAME)/game/g_sql.o \ $(B)/$(BASEGAME)/game/g_breakable.o \ $(B)/$(BASEGAME)/game/g_cinematic.o \ + $(B)/$(BASEGAME)/game/g_logger.o \ $(B)/$(BASEGAME)/game/lua_game.o \ $(B)/$(BASEGAME)/game/lua_entity.o \ $(B)/$(BASEGAME)/game/lua_vector.o \ diff --git a/code/cgame/cg_consolecmds.c b/code/cgame/cg_consolecmds.c index bfdf5fc..ed1f969 100644 --- a/code/cgame/cg_consolecmds.c +++ b/code/cgame/cg_consolecmds.c @@ -924,5 +924,8 @@ void CG_InitConsoleCommands( void ) { /* precacheFile */ trap_AddCommand("generatePrecacheFile"); + + /* test new logger on game side */ + trap_AddCommand("testlogger"); } diff --git a/code/game/bg_public.h b/code/game/bg_public.h index 98d6db1..ede88e3 100644 --- a/code/game/bg_public.h +++ b/code/game/bg_public.h @@ -10,7 +10,7 @@ // second version that must match between game and cgame #define RPGX_VERSION "RPG-X V 2.3 CB 4" #define RPGX_COMPILEDATE __DATE__ " " __TIME__ -#define RPGX_COMPILEDBY "Jenkins" +#define RPGX_COMPILEDBY "Jenkins Buildserver" #define GAME_VERSION "RPG-X v" RPGX_VERSION #define INJURED_MODE_HEALTH 20 //! @@ -7565,6 +7566,22 @@ void Cmd_GeneratePrecacheFile(gentity_t *ent) { trap_FS_FCloseFile(f); } +static void Cmd_TestLogger(gentity_t* ent) { + G_Logger(LL_ALWAYS, "always print this %d %s\n", 42, "42"); + G_Logger(LL_ERROR, "this is an error %d %s\n", 42, "42"); + G_Logger(LL_WARN, "this is a warning %d %s\n", 42, "42"); + G_Logger(LL_INFO, "this is an info %d %s\n", 42, "42"); + G_Logger(LL_DEBUG, "this is a debug message %d %s\n", 42, "42"); + G_Logger(LL_TRACE, "this is a trace message %d %s\n", 42, "42"); + + G_LocLogger(LL_ALWAYS, "always print this %d %s\n", 42, "42"); + G_LocLogger(LL_ERROR, "this is an error %d %s\n", 42, "42"); + G_LocLogger(LL_WARN, "this is a warning %d %s\n", 42, "42"); + G_LocLogger(LL_INFO, "this is an info %d %s\n", 42, "42"); + G_LocLogger(LL_DEBUG, "this is a debug message %d %s\n", 42, "42"); + G_LocLogger(LL_TRACE, "this is a trace message %d %s\n", 42, "42"); +} + /* ================= G_Client_Command @@ -7832,6 +7849,9 @@ void G_Client_Command( int clientNum ) else if (Q_stricmp (cmd, "generatePrecacheFile") == 0) { Cmd_GeneratePrecacheFile(ent); } + else if (Q_stricmp (cmd, "testlogger") == 0) { + Cmd_TestLogger(ent); + } else if (Q_strncmp (cmd, "\n", 1) == 0 || Q_strncmp (cmd, " ", 1) == 0 || Q_strncmp (cmd, "\0", 1) == 0) // sorry (void)(0); else diff --git a/code/game/g_local.h b/code/game/g_local.h index 40bf96c..2141233 100644 --- a/code/game/g_local.h +++ b/code/game/g_local.h @@ -2317,6 +2317,7 @@ extern gentity_t g_entities[MAX_GENTITIES]; //extern int shaketimer; //Global shake timer varible //TiM: NOT NECESSARY! extern int RPGEntityCount; //Global entity count varible +extern vmCvar_t g_logLevel; extern vmCvar_t g_gametype; extern vmCvar_t g_dedicated; extern vmCvar_t g_cheats; diff --git a/code/game/g_logger.c b/code/game/g_logger.c new file mode 100644 index 0000000..fbeb9a0 --- /dev/null +++ b/code/game/g_logger.c @@ -0,0 +1,73 @@ +#include "g_logger.h" + +void QDECL G_Logger (int level, char* fmt, ...) { + va_list argptr; + char text[1024]; + + if(level > g_logLevel.integer && g_logLevel.integer != LL_ALWAYS) { + return; + } + + va_start (argptr, fmt); + vsnprintf (text, sizeof(text), fmt, argptr); + va_end (argptr); + + switch (level) + { + case LL_ERROR: + G_Printf(S_COLOR_RED "[game][error] %s", text); + break; + case LL_WARN: + G_Printf(S_COLOR_YELLOW "[game][warn] %s", text); + break; + case LL_INFO: + G_Printf("[game][info] %s", text); + break; + case LL_DEBUG: + G_Printf("[game][info] %s", text); + break; + case LL_TRACE: + G_Printf("[game][trace] %s", text); + break; + case LL_ALWAYS: + default: + G_Printf("[game] %s", text); + break; + } +} + +void QDECL _G_LocLogger (const char* file, int line, int level, char* fmt, ...) { + va_list argptr; + char text[1024]; + + if(level > g_logLevel.integer && g_logLevel.integer != LL_ALWAYS) { + return; + } + + va_start (argptr, fmt); + vsnprintf (text, sizeof(text), fmt, argptr); + va_end (argptr); + + switch (level) + { + case LL_ERROR: + G_Printf(S_COLOR_RED "[game][error] %s:%d - ", file, line); + break; + case LL_WARN: + G_Printf(S_COLOR_YELLOW "[game][warn] %s:%d - ", file, line); + break; + case LL_INFO: + G_Printf("[game][info] %s:%d - ", file, line); + break; + case LL_DEBUG: + G_Printf("[game][info] %s:%d - ", file, line); + break; + case LL_TRACE: + G_Printf("[game][trace] %s:%d - ", file, line); + break; + case LL_ALWAYS: + default: + G_Printf("[game] %s:%d - ", file, line); + break; + } +} diff --git a/code/game/g_logger.h b/code/game/g_logger.h new file mode 100644 index 0000000..c02810f --- /dev/null +++ b/code/game/g_logger.h @@ -0,0 +1,19 @@ +#ifndef G_LOGGER_H_ +#define G_LOGGER_H_ + +#include "g_local.h" + +enum { + LL_ERROR, + LL_WARN, + LL_INFO, + LL_DEBUG, + LL_TRACE, + LL_ALWAYS +}; + +#define G_LocLogger(X,...) _G_LocLogger(__FILE__, __LINE__, X, __VA_ARGS__) +void QDECL G_Logger(int level, char* fmt, ...) __attribute__ ((format (printf, 2, 3))); +void QDECL _G_LocLogger(const char* file, int line, int level, char* fmt, ...) __attribute__ ((format (printf, 4, 5))); + +#endif /* G_LOGGER_H_ */ diff --git a/code/game/g_main.c b/code/game/g_main.c index 9bcdf30..e983cbb 100644 --- a/code/game/g_main.c +++ b/code/game/g_main.c @@ -40,6 +40,7 @@ rankNames_t g_rankNames[MAX_RANKS]; g_classData_t g_classData[MAX_CLASSES]; +vmCvar_t g_logLevel; vmCvar_t g_gametype; vmCvar_t g_dmflags; vmCvar_t g_password; @@ -472,7 +473,8 @@ static cvarTable_t gameCvarTable[] = { { &rpg_tr116Damage, "rpg_tr116Damage", "150", CVAR_ARCHIVE, 0, qfalse }, { &rpg_photonDamage, "rpg_photonDamage", "140", CVAR_ARCHIVE, 0, qfalse }, { &rpg_photonAltDamage, "rpg_photonAltDamage", "140", CVAR_ARCHIVE, 0, qfalse }, - { &g_developer, "g_developer", "0", CVAR_ARCHIVE, 0, qfalse } + { &g_developer, "g_developer", "0", CVAR_ARCHIVE, 0, qfalse }, + { &g_logLevel, "g_loglevel", "1", CVAR_ARCHIVE, 0, qfalse } }; static int gameCvarTableSize = (int)(sizeof( gameCvarTable ) / sizeof( gameCvarTable[0] )); diff --git a/code/game/game.vcxproj b/code/game/game.vcxproj index 8aa1bcc..0bf8ea6 100644 --- a/code/game/game.vcxproj +++ b/code/game/game.vcxproj @@ -514,6 +514,7 @@ + diff --git a/code/game/game.vcxproj.filters b/code/game/game.vcxproj.filters index 320ebfb..e6dc403 100644 --- a/code/game/game.vcxproj.filters +++ b/code/game/game.vcxproj.filters @@ -497,6 +497,9 @@ Header Files + + Header Files +