//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ // //=============================================================================// #include "cbase.h" #include "EventLog.h" #include "team.h" #include "KeyValues.h" // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" CEventLog::CEventLog() { } CEventLog::~CEventLog() { } void CEventLog::FireGameEvent( IGameEvent *event ) { PrintEvent ( event ); } bool CEventLog::PrintEvent( IGameEvent *event ) { const char * name = event->GetName(); if ( Q_strncmp(name, "server_", strlen("server_")) == 0 ) { return true; // we don't care about server events (engine does) } else if ( Q_strncmp(name, "player_", strlen("player_")) == 0 ) { return PrintPlayerEvent( event ); } else if ( Q_strncmp(name, "team_", strlen("team_")) == 0 ) { return PrintTeamEvent( event ); } else if ( Q_strncmp(name, "game_", strlen("game_")) == 0 ) { return PrintGameEvent( event ); } else { return PrintOtherEvent( event ); // bomb_, round_, et al } } bool CEventLog::PrintGameEvent( IGameEvent *event ) { // const char * name = event->GetName() + Q_strlen("game_"); // remove prefix return false; } bool CEventLog::PrintPlayerEvent( IGameEvent *event ) { const char * eventName = event->GetName(); const int userid = event->GetInt( "userid" ); if ( !Q_strncmp( eventName, "player_connect", Q_strlen("player_connect") ) ) // player connect is before the CBasePlayer pointer is setup { const char *name = event->GetString( "name" ); const char *address = event->GetString( "address" ); const char *networkid = event->GetString("networkid" ); UTIL_LogPrintf( "\"%s<%i><%s><>\" connected, address \"%s\"\n", name, userid, networkid, address); return true; } else if ( !Q_strncmp( eventName, "player_disconnect", Q_strlen("player_disconnect") ) ) { const char *reason = event->GetString("reason" ); const char *name = event->GetString("name" ); const char *networkid = event->GetString("networkid" ); CTeam *team = NULL; CBasePlayer *pPlayer = UTIL_PlayerByUserId( userid ); if ( pPlayer ) { team = pPlayer->GetTeam(); } UTIL_LogPrintf( "\"%s<%i><%s><%s>\" disconnected (reason \"%s\")\n", name, userid, networkid, team ? team->GetName() : "", reason ); return true; } CBasePlayer *pPlayer = UTIL_PlayerByUserId( userid ); if ( !pPlayer) { DevMsg( "CEventLog::PrintPlayerEvent: Failed to find player (userid: %i, event: %s)\n", userid, eventName ); return false; } if ( !Q_strncmp( eventName, "player_team", Q_strlen("player_team") ) ) { const bool bDisconnecting = event->GetBool( "disconnect" ); if ( !bDisconnecting ) { const int newTeam = event->GetInt( "team" ); const int oldTeam = event->GetInt( "oldteam" ); CTeam *team = GetGlobalTeam( newTeam ); CTeam *oldteam = GetGlobalTeam( oldTeam ); UTIL_LogPrintf( "\"%s<%i><%s><%s>\" joined team \"%s\"\n", pPlayer->GetPlayerName(), pPlayer->GetUserID(), pPlayer->GetNetworkIDString(), oldteam->GetName(), team->GetName() ); } return true; } else if ( !Q_strncmp( eventName, "player_death", Q_strlen("player_death") ) ) { const int attackerid = event->GetInt("attacker" ); #ifdef HL2MP const char *weapon = event->GetString( "weapon" ); #endif CBasePlayer *pAttacker = UTIL_PlayerByUserId( attackerid ); CTeam *team = pPlayer->GetTeam(); CTeam *attackerTeam = NULL; if ( pAttacker ) { attackerTeam = pAttacker->GetTeam(); } if ( pPlayer == pAttacker && pPlayer ) { #ifdef HL2MP UTIL_LogPrintf( "\"%s<%i><%s><%s>\" committed suicide with \"%s\"\n", pPlayer->GetPlayerName(), userid, pPlayer->GetNetworkIDString(), team ? team->GetName() : "", weapon ); #else UTIL_LogPrintf( "\"%s<%i><%s><%s>\" committed suicide with \"%s\"\n", pPlayer->GetPlayerName(), userid, pPlayer->GetNetworkIDString(), team ? team->GetName() : "", pAttacker->GetClassname() ); #endif } else if ( pAttacker ) { CTeam *attackerTeam = pAttacker->GetTeam(); #ifdef HL2MP UTIL_LogPrintf( "\"%s<%i><%s><%s>\" killed \"%s<%i><%s><%s>\" with \"%s\"\n", pAttacker->GetPlayerName(), attackerid, pAttacker->GetNetworkIDString(), attackerTeam ? attackerTeam->GetName() : "", pPlayer->GetPlayerName(), userid, pPlayer->GetNetworkIDString(), team ? team->GetName() : "", weapon ); #else UTIL_LogPrintf( "\"%s<%i><%s><%s>\" killed \"%s<%i><%s><%s>\"\n", pAttacker->GetPlayerName(), attackerid, pAttacker->GetNetworkIDString(), attackerTeam ? attackerTeam->GetName() : "", pPlayer->GetPlayerName(), userid, pPlayer->GetNetworkIDString(), team ? team->GetName() : "" ); #endif } else { // killed by the world UTIL_LogPrintf( "\"%s<%i><%s><%s>\" committed suicide with \"world\"\n", pPlayer->GetPlayerName(), userid, pPlayer->GetNetworkIDString(), team ? team->GetName() : "" ); } return true; } else if ( !Q_strncmp( eventName, "player_activate", Q_strlen("player_activate") ) ) { UTIL_LogPrintf( "\"%s<%i><%s><>\" entered the game\n", pPlayer->GetPlayerName(), userid, pPlayer->GetNetworkIDString() ); return true; } else if ( !Q_strncmp( eventName, "player_changename", Q_strlen("player_changename") ) ) { const char *newName = event->GetString( "newname" ); const char *oldName = event->GetString( "oldname" ); CTeam *team = pPlayer->GetTeam(); UTIL_LogPrintf( "\"%s<%i><%s><%s>\" changed name to \"%s\"\n", oldName, userid, pPlayer->GetNetworkIDString(), team ? team->GetName() : "", newName ); return true; } // ignored events //player_hurt return false; } bool CEventLog::PrintTeamEvent( IGameEvent *event ) { // const char * name = event->GetName() + Q_strlen("team_"); // remove prefix return false; } bool CEventLog::PrintOtherEvent( IGameEvent *event ) { return false; } bool CEventLog::Init() { ListenForGameEvent( "player_changename" ); ListenForGameEvent( "player_activate" ); ListenForGameEvent( "player_death" ); ListenForGameEvent( "player_team" ); ListenForGameEvent( "player_disconnect" ); ListenForGameEvent( "player_connect" ); return true; } void CEventLog::Shutdown() { StopListeningForAllEvents(); }