#include #include #define VERSION "2.2" public Plugin:myinfo = { name = "SuperLogs: CSpromod", author = "NeoCortex, psychonic", description = "Rewrites the logs from CSProMod so HLStatsX:CE will understand them", version = VERSION, url = "http://www.sourcemod.net/" }; public OnPluginStart() { CreateConVar("superlogs_cspromod_version", VERSION, "SuperLogs: CSpromod", FCVAR_NOTIFY); HookEvent("player_death", Event_PlayerDeath) HookEvent("player_connect", Event_PlayerConnect) HookEvent("player_disconnect", Event_PlayerDisconnect) HookEvent("player_team", Event_PlayerTeam) HookEvent("round_start", Event_RoundStart) HookEvent("round_end", Event_RoundEnd) CreateTimer(1.0, LogMap); } public Action:LogMap(Handle:timer) { // Taken from superlogs-generic.sp by psychonic // Called 1 second after OnPluginStart since srcds does not log the first map loaded. Idea from Stormtrooper's "mapfix.sp" for psychostats LogMapLoad(); } public OnMapStart() { // For loghelper GetTeams(); } public Event_PlayerConnect(Handle:event, const String:name[], bool:dontBroadcast) { decl String:cname[MAX_NAME_LENGTH]; GetEventString(event, "name", cname, sizeof(cname)); decl String:steamid[24]; GetEventString(event, "networkid", steamid, sizeof(steamid)); decl String:ip[32]; GetEventString(event, "address", ip, sizeof(ip)); LogToGame("\"%s<%d><%s><>\" connected, address \"%s\"", cname, GetEventInt(event, "userid"), steamid, ip); } public Event_PlayerDisconnect(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); decl String:cname[MAX_NAME_LENGTH]; GetClientName(client, cname, sizeof(cname)); decl String:cauth[32]; GetClientAuthString(client, cauth, 32); decl String:creason[128]; GetEventString(event, "reason", creason, sizeof(creason)); LogToGame("\"%s<%d><%s><>\" disconnected (reason \"%s\")", cname, client, cauth, creason); } public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) { // Version 2 of this subroutine (using loghelper) is written by psychonic new victim = GetClientOfUserId(GetEventInt(event, "userid")); new attacker = GetClientOfUserId(GetEventInt(event, "attacker")); decl String:AWeapon[64]; GetEventString(event, "weapon", AWeapon, sizeof(AWeapon)); decl String:properties[12] = ""; if (GetEventBool(event, "headshot")) { strcopy(properties, sizeof(properties), " (headshot)"); } // Player_Suicide if (attacker == victim) { LogSuicide(victim, AWeapon, true, properties); return; } LogKill(attacker, victim, AWeapon, true, properties); } public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast) { LogToGame("World triggered \"Round_Start\""); } public Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast) { new winner = GetEventInt(event, "winner"); if (winner == 2 || winner == 3) { LogTeamEvent(winner, "triggered", "Round_Win"); } LogToGame("World triggered \"Round_End\""); } public Event_PlayerTeam(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); new NTeam = GetEventInt(event, "team"); decl String:STeam[32]; GetTeamName(NTeam, STeam, sizeof(STeam)); LogPlayerEvent(client, "joined team", STeam, true) }