sfcnr/gamemodes/irresistible/analytics.pwn

143 lines
2.9 KiB
Plaintext

/*
* Irresistible Gaming (c) 2018
* Developed by Lorenc
* Module: analytics.inc
* Purpose: track player connection analytics
*/
#if !defined ANAL_INCLUDED
#include < a_samp >
// Variables
enum E_ANALYTICS
{
E_CONNECTS,
E_DISCONNECTS[ 3 ],
E_BAN_USES,
E_KICK_USES,
E_CUSTOM_BAN_REJECTS,
};
new
g_Analytics [ E_ANALYTICS ]
;
// Function Hook (KickPlayer)
stock SAMPANALYTICS_Kick( playerid )
{
g_Analytics[ E_KICK_USES ] ++;
return Kick( playerid );
}
#if defined _ALS_Kick
#undef Kick
#else
#define _ALS_Kick
#endif
#define Kick SAMPANALYTICS_Kick
// Function Hook (KickPlayer)
stock SAMPANALYTICS_Ban( playerid )
{
g_Analytics[ E_BAN_USES ] ++;
return Ban( playerid );
}
#if defined _ALS_Ban
#undef Ban
#else
#define _ALS_Ban
#endif
#define Ban SAMPANALYTICS_Ban
// Function Hook (KickPlayer)
stock SAMPANALYTICS_BanEx( playerid, reason[ ] )
{
g_Analytics[ E_BAN_USES ] ++;
return BanEx( playerid, reason );
}
#if defined _ALS_BanEx
#undef BanEx
#else
#define _ALS_BanEx
#endif
#define BanEx SAMPANALYTICS_BanEx
// Callback Hook (OnPlayerConnect)
public OnPlayerConnect( playerid )
{
g_Analytics[ E_CONNECTS ] ++;
#if defined SAMPANAL_OnPlayerConnect
return SAMPANAL_OnPlayerConnect( playerid );
#else
return 1;
#endif
}
#if defined SAMPANAL_OnPlayerConnect
forward SAMPANAL_OnPlayerConnect( playerid );
#endif
#if defined _ALS_OnPlayerConnect
#undef OnPlayerConnect
#else
#define _ALS_OnPlayerConnect
#endif
#define OnPlayerConnect SAMPANAL_OnPlayerConnect
// Callback Hook (OnPlayerDisconnect)
public OnPlayerDisconnect( playerid, reason )
{
if( reason < 3 )
g_Analytics[ E_DISCONNECTS ] [ reason ] ++;
#if defined SAMPANAL_OnPlayerDisconnect
return SAMPANAL_OnPlayerDisconnect( playerid, reason );
#else
return 1;
#endif
}
#if defined SAMPANAL_OnPlayerDisconnect
forward SAMPANAL_OnPlayerDisconnect( playerid, reason );
#endif
#if defined _ALS_OnPlayerDisconnect
#undef OnPlayerDisconnect
#else
#define _ALS_OnPlayerDisconnect
#endif
#define OnPlayerDisconnect SAMPANAL_OnPlayerDisconnect
// Functions
stock IncremementAnalyticalValue( E_ANALYTICS: type, value = 1 )
return ( g_Analytics[ type ] += value );
stock AnalyticsToHumanReadable( )
{
new
szString[ 256 ],
iDisconnects = g_Analytics[ E_DISCONNECTS ] [ 0 ] + g_Analytics[ E_DISCONNECTS ] [ 1 ] + g_Analytics[ E_DISCONNECTS ] [ 2 ]
;
format( szString, sizeof( szString ),
"Connections: %d\nDisconnections: %d\n\nPlayer Timeout/Crash: %d\nPlayer Quits: %d\nPlayer Kick/Ban: %d\n\nServer Ban Uses: %d\nServer Kick Uses: %d\n\nCustom Ban Rejects: %d",
g_Analytics[ E_CONNECTS ], iDisconnects, g_Analytics[ E_DISCONNECTS ] [ 0 ], g_Analytics[ E_DISCONNECTS ] [ 1 ], g_Analytics[ E_DISCONNECTS ] [ 2 ], g_Analytics[ E_BAN_USES ],
g_Analytics[ E_KICK_USES ], g_Analytics[ E_CUSTOM_BAN_REJECTS ]
);
return szString;
}
#endif