2017-08-04 03:07:07 +02:00
#define LOGHELPER_VERSION 3
#include <sourcemod>
#include <sdktools>
new String : g_team_list [ 16 ][ 64 ];
// Call this on map start to cache team names in g_team_list
stock GetTeams ( bool : insmod = false )
{
if ( ! insmod )
{
new max_teams_count = GetTeamCount ();
for ( new team_index = 0 ; ( team_index < max_teams_count ); team_index ++ )
{
decl String : team_name [ 64 ];
GetTeamName ( team_index , team_name , sizeof ( team_name ));
if ( strcmp ( team_name , " " ) != 0 )
{
g_team_list [ team_index ] = team_name ;
}
}
}
else
{
// they really need to get their act together... GetTeamName() would be awesome since they can't even keep their team indexes consistent
decl String : mapname [ 64 ];
GetCurrentMap ( mapname , sizeof ( mapname ));
if ( strcmp ( mapname , " ins_karam " ) == 0 || strcmp ( mapname , " ins_baghdad " ) == 0 )
{
g_team_list [ 1 ] = " Iraqi Insurgents " ;
g_team_list [ 2 ] = " U.S. Marines " ;
}
else
{
g_team_list [ 1 ] = " U.S. Marines " ;
g_team_list [ 2 ] = " Iraqi Insurgents " ;
}
g_team_list [ 0 ] = " Unassigned " ;
g_team_list [ 3 ] = " SPECTATOR " ;
}
}
stock LogPlayerEvent ( client , const String : verb [], const String : event [], bool : display_location = false , const String : properties [] = " " , iTeam =- 1 )
{
if ( IsValidPlayer ( client ))
{
decl String : player_authid [ 32 ];
2019-12-05 19:44:21 +01:00
if ( ! GetClientAuthId ( client , AuthId_Steam2 , player_authid , sizeof ( player_authid )))
2017-08-04 03:07:07 +02:00
{
strcopy ( player_authid , sizeof ( player_authid ), " UNKNOWN " );
}
if ( iTeam == - 1 )
iTeam = GetClientTeam ( client );
if ( display_location )
{
decl Float : player_origin [ 3 ];
GetClientAbsOrigin ( client , player_origin );
LogToGame ( " \" %N<%d><%s><%s> \" %s \" %s \" %s (position \" %d %d %d \" ) " , client , GetClientUserId ( client ), player_authid , g_team_list [ iTeam ], verb , event , properties , RoundFloat ( player_origin [ 0 ]), RoundFloat ( player_origin [ 1 ]), RoundFloat ( player_origin [ 2 ]));
}
else
{
LogToGame ( " \" %N<%d><%s><%s> \" %s \" %s \" %s " , client , GetClientUserId ( client ), player_authid , g_team_list [ iTeam ], verb , event , properties );
}
}
}
stock LogPlyrPlyrEvent ( client , victim , const String : verb [], const String : event [], bool : display_location = false , const String : properties [] = " " )
{
if ( IsValidPlayer ( client ) && IsValidPlayer ( victim ))
{
decl String : player_authid [ 32 ];
2019-12-05 19:44:21 +01:00
if ( ! GetClientAuthId ( client , AuthId_Steam2 , player_authid , sizeof ( player_authid )))
2017-08-04 03:07:07 +02:00
{
strcopy ( player_authid , sizeof ( player_authid ), " UNKNOWN " );
}
decl String : victim_authid [ 32 ];
2019-12-05 19:44:21 +01:00
if ( ! GetClientAuthId ( victim , AuthId_Steam2 , victim_authid , sizeof ( victim_authid )))
2017-08-04 03:07:07 +02:00
{
strcopy ( victim_authid , sizeof ( victim_authid ), " UNKNOWN " );
}
if ( display_location )
{
decl Float : player_origin [ 3 ];
GetClientAbsOrigin ( client , player_origin );
decl Float : victim_origin [ 3 ];
GetClientAbsOrigin ( victim , victim_origin );
LogToGame ( " \" %N<%d><%s><%s> \" %s \" %s \" against \" %N<%d><%s><%s> \" %s (position \" %d %d %d \" ) (victim_position \" %d %d %d \" ) " , client , GetClientUserId ( client ), player_authid , g_team_list [ GetClientTeam ( client )], verb , event , victim , GetClientUserId ( victim ), victim_authid , g_team_list [ GetClientTeam ( victim )], properties , RoundFloat ( player_origin [ 0 ]), RoundFloat ( player_origin [ 1 ]), RoundFloat ( player_origin [ 2 ]), RoundFloat ( victim_origin [ 0 ]), RoundFloat ( victim_origin [ 1 ]), RoundFloat ( victim_origin [ 2 ]));
}
else
{
LogToGame ( " \" %N<%d><%s><%s> \" %s \" %s \" against \" %N<%d><%s><%s> \" %s " , client , GetClientUserId ( client ), player_authid , g_team_list [ GetClientTeam ( client )], verb , event , victim , GetClientUserId ( victim ), victim_authid , g_team_list [ GetClientTeam ( victim )], properties );
}
}
}
stock LogKill ( attacker , victim , const String : weapon [], bool : display_location = false , const String : properties [] = " " )
{
if ( IsValidPlayer ( attacker ) && IsValidPlayer ( victim ))
{
decl String : attacker_authid [ 32 ];
2019-12-05 19:44:21 +01:00
if ( ! GetClientAuthId ( attacker , AuthId_Steam2 , attacker_authid , sizeof ( attacker_authid )))
2017-08-04 03:07:07 +02:00
{
strcopy ( attacker_authid , sizeof ( attacker_authid ), " UNKNOWN " );
}
decl String : victim_authid [ 32 ];
2019-12-05 19:44:21 +01:00
if ( ! GetClientAuthId ( victim , AuthId_Steam2 , victim_authid , sizeof ( victim_authid )))
2017-08-04 03:07:07 +02:00
{
strcopy ( victim_authid , sizeof ( victim_authid ), " UNKNOWN " );
}
if ( display_location )
{
decl Float : attacker_origin [ 3 ];
GetClientAbsOrigin ( attacker , attacker_origin );
decl Float : victim_origin [ 3 ];
GetClientAbsOrigin ( victim , victim_origin );
LogToGame ( " \" %N<%d><%s><%s> \" killed \" %N<%d><%s><%s> \" with \" %s \" %s (attacker_position \" %d %d %d \" ) (victim_position \" %d %d %d \" ) " , attacker , GetClientUserId ( attacker ), attacker_authid , g_team_list [ GetClientTeam ( attacker )], victim , GetClientUserId ( victim ), victim_authid , g_team_list [ GetClientTeam ( victim )], weapon , properties , RoundFloat ( attacker_origin [ 0 ]), RoundFloat ( attacker_origin [ 1 ]), RoundFloat ( attacker_origin [ 2 ]), RoundFloat ( victim_origin [ 0 ]), RoundFloat ( victim_origin [ 1 ]), RoundFloat ( victim_origin [ 2 ]));
}
else
{
LogToGame ( " \" %N<%d><%s><%s> \" killed \" %N<%d><%s><%s> \" with \" %s \" %s " , attacker , GetClientUserId ( attacker ), attacker_authid , g_team_list [ GetClientTeam ( attacker )], victim , GetClientUserId ( victim ), victim_authid , g_team_list [ GetClientTeam ( victim )], weapon , properties );
}
}
}
// For Psychostats "KTRAJ" kill trajectory log lines
stock LogPSKillTraj ( attacker , victim , const String : weapon [])
{
if ( IsValidPlayer ( attacker ) && IsValidPlayer ( victim ))
{
decl String : attacker_authid [ 32 ];
2019-12-05 19:44:21 +01:00
if ( ! GetClientAuthId ( attacker , AuthId_Steam2 , attacker_authid , sizeof ( attacker_authid )))
2017-08-04 03:07:07 +02:00
{
strcopy ( attacker_authid , sizeof ( attacker_authid ), " UNKNOWN " );
}
decl String : victim_authid [ 32 ];
2019-12-05 19:44:21 +01:00
if ( ! GetClientAuthId ( victim , AuthId_Steam2 , victim_authid , sizeof ( victim_authid )))
2017-08-04 03:07:07 +02:00
{
strcopy ( victim_authid , sizeof ( victim_authid ), " UNKNOWN " );
}
decl Float : attacker_origin [ 3 ];
GetClientAbsOrigin ( attacker , attacker_origin );
decl Float : victim_origin [ 3 ];
GetClientAbsOrigin ( victim , victim_origin );
LogToGame ( " [KTRAJ] \" %N<%d><%s><%s> \" killed \" %N<%d><%s><%s> \" with \" %s \" (attacker_position \" %d %d %d \" ) (victim_position \" %d %d %d \" ) " , attacker , GetClientUserId ( attacker ), attacker_authid , g_team_list [ GetClientTeam ( attacker )], victim , GetClientUserId ( victim ), victim_authid , g_team_list [ GetClientTeam ( victim )], weapon , RoundFloat ( attacker_origin [ 0 ]), RoundFloat ( attacker_origin [ 1 ]), RoundFloat ( attacker_origin [ 2 ]), RoundFloat ( victim_origin [ 0 ]), RoundFloat ( victim_origin [ 1 ]), RoundFloat ( victim_origin [ 2 ]));
}
}
// Verb should always be "triggered" for this.
stock LogTeamEvent ( team , const String : verb [], const String : event [], const String : properties [] = " " )
{
if ( team > - 1 )
{
LogToGame ( " Team \" %s \" %s \" %s \" %s " , g_team_list [ team ], verb , event , properties );
}
}
stock LogKillLoc ( attacker , victim )
{
if ( attacker > 0 && victim > 0 )
{
decl Float : attacker_origin [ 3 ];
GetClientAbsOrigin ( attacker , attacker_origin );
decl Float : victim_origin [ 3 ];
GetClientAbsOrigin ( victim , victim_origin );
LogToGame ( " World triggered \" killlocation \" (attacker_position \" %d %d %d \" ) (victim_position \" %d %d %d \" ) " , RoundFloat ( attacker_origin [ 0 ]), RoundFloat ( attacker_origin [ 1 ]), RoundFloat ( attacker_origin [ 2 ]), RoundFloat ( victim_origin [ 0 ]), RoundFloat ( victim_origin [ 1 ]), RoundFloat ( victim_origin [ 2 ]));
}
}
stock LogRoleChange ( client , const String : role [], const String : properties [] = " " )
{
LogPlayerEvent ( client , " changed role to " , role , false , properties );
}
stock LogMapLoad ()
{
decl String : map [ 64 ];
GetCurrentMap ( map , sizeof ( map ));
LogToGame ( " Loading map \" %s \" " , map );
}
stock IsValidPlayer ( client )
{
if ( client > 0 && client <= MaxClients && IsClientInGame ( client ))
{
return true ;
}
return false ;
}