2018-10-29 16:39:02 +01:00
# pragma semicolon 1
# include <sourcemod>
# include <multicolors>
# pragma newdecls required
/* CONVARS */
ConVar g_cvInterval ;
/* DATABASE */
Database g_hDatabase ;
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Plugin myinfo =
{
2019-06-09 10:24:18 +02:00
name = " UNLOZE Donation Alert " ,
2018-10-29 16:39:02 +01:00
author = " Neon " ,
description = " " ,
version = " 1.0 " ,
url = " https://steamcommunity.com/id/n3ontm "
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnPluginStart ( )
{
g_cvInterval = CreateConVar ( " sm_unloze_donation_alert_interval " , " 60 " , " " , FCVAR_NONE ) ;
AutoExecConfig ( ) ;
char sError [ 256 ] ;
if ( SQL_CheckConfig ( " xenforo " ) )
g_hDatabase = SQL_Connect ( " xenforo " , true , sError , sizeof ( sError ) ) ;
if ( g_hDatabase = = null )
LogError ( " Could not connect to database: %s " , sError ) ;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnMapStart ( )
{
CreateTimer ( g_cvInterval . FloatValue , CheckForNewDonations , INVALID_HANDLE , TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE ) ;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action CheckForNewDonations ( Handle timer )
{
char sDataFile [ PLATFORM_MAX_PATH ] ;
BuildPath ( Path_SM , sDataFile , sizeof ( sDataFile ) , " configs/unloze_donation_alert/data.cfg " ) ;
if ( ! FileExists ( sDataFile ) )
{
LogError ( " Could not find data file: \" %s \" " , sDataFile ) ;
return Plugin_Stop ;
}
KeyValues Data = new KeyValues ( " unloze_donation_alert " ) ;
if ( ! Data . ImportFromFile ( sDataFile ) )
{
LogError ( " Unable to load data file: \" %s \" " , sDataFile ) ;
delete Data ;
return Plugin_Stop ;
}
if ( ! Data . JumpToKey ( " last_processed_donation " , false ) )
{
LogError ( " Unable to find section last_processed_donation: \" %s \" " , sDataFile ) ;
delete Data ;
return Plugin_Stop ;
}
int iID ;
iID = Data . GetNum ( " id " , - 1 ) ;
if ( iID = = - 1 )
{
LogError ( " Unable to ID of last_processed_donation: \" %s \" " , sDataFile ) ;
delete Data ;
return Plugin_Stop ;
}
char sQuery [ 255 ] ;
Format ( sQuery , sizeof ( sQuery ) , " SELECT * FROM xf_bdpaygate_log WHERE log_id = %d " , iID + 1 ) ;
g_hDatabase . Query ( TQueryCB , sQuery , iID + 1 ) ;
delete Data ;
return Plugin_Continue ;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void TQueryCB ( Database db , DBResultSet results , const char [ ] error , any data )
{
int iID = data ;
if ( results . RowCount > 0 )
{
int iField ;
char sLogType [ 64 ] ;
char sLogDetails [ 4096 ] ;
results . FetchRow ( ) ;
results . FieldNameToNum ( " log_type " , iField ) ;
results . FetchString ( iField , sLogType , sizeof ( sLogType ) ) ;
if ( ! StrEqual ( sLogType , " accepted " ) )
{
HandleDonation ( iID ) ;
char sQuery [ 255 ] ;
Format ( sQuery , sizeof ( sQuery ) , " SELECT * FROM xf_bdpaygate_log WHERE log_id = %d " , iID + 1 ) ;
g_hDatabase . Query ( TQueryCB , sQuery , iID + 1 ) ;
return ;
}
results . FieldNameToNum ( " log_details " , iField ) ;
results . FetchString ( iField , sLogDetails , sizeof ( sLogDetails ) ) ;
static char sStrings [ 256 ] [ 256 ] ;
char sMessage [ 256 ] ;
char sMessageWhite [ 256 ] ;
int iStrings = ExplodeString ( sLogDetails , " \" " , sStrings , 256 , 256 ) ;
if ( StrContains ( sLogDetails , " user_upgrade " ) ! = - 1 )
{
for ( int i = 0 ; i < iStrings ; i + + )
{
if ( StrContains ( sStrings [ i ] , " Account Upgrade: " ) ! = - 1 )
{
char sBuffer [ 256 ] ;
char sUpgrade [ 256 ] ;
char sName [ 256 ] ;
strcopy ( sBuffer , sizeof ( sBuffer ) , sStrings [ i ] ) ;
int iStart = FindCharInString ( sBuffer , ':' , false ) ;
strcopy ( sBuffer , sizeof ( sBuffer ) , sBuffer [ iStart + 2 ] ) ;
iStart = FindCharInString ( sBuffer , '(' , false ) ;
strcopy ( sName , sizeof ( sName ) , sBuffer [ iStart + 1 ] ) ;
int iLength = strlen ( sName ) ;
sName [ iLength - 1 ] = 0 ;
SplitString ( sBuffer , " ( " , sUpgrade , sizeof ( sUpgrade ) ) ;
2019-09-25 16:09:35 +02:00
Format ( sMessage , sizeof ( sMessage ) , " {unique}[UNLOZE] {lime}%s {white}just bought {unique}%s{white}! Thank you for supporting our servers!!! " , sName , sUpgrade ) ;
2018-10-29 16:39:02 +01:00
Format ( sMessageWhite , sizeof ( sMessageWhite ) , " %s just bought %s! Thank you for supporting our servers!!! " , sName , sUpgrade ) ;
}
}
}
else if ( StrContains ( sLogDetails , " gift_upgrade " ) ! = - 1 )
{
for ( int i = 0 ; i < iStrings ; i + + )
{
if ( StrContains ( sStrings [ i ] , " Account Upgrade: " ) ! = - 1 )
{
char sBuffer [ 256 ] ;
char sUpgrade [ 256 ] ;
char sName [ 256 ] ;
strcopy ( sBuffer , sizeof ( sBuffer ) , sStrings [ i ] ) ;
int iStart = FindCharInString ( sBuffer , ':' , false ) ;
strcopy ( sBuffer , sizeof ( sBuffer ) , sBuffer [ iStart + 2 ] ) ;
iStart = FindCharInString ( sBuffer , '(' , false ) ;
strcopy ( sName , sizeof ( sName ) , sBuffer [ iStart + 1 ] ) ;
int iLength = strlen ( sName ) ;
sName [ iLength - 1 ] = 0 ;
SplitString ( sBuffer , " ( " , sUpgrade , sizeof ( sUpgrade ) ) ;
2019-09-25 16:09:35 +02:00
Format ( sMessage , sizeof ( sMessage ) , " {unique}[UNLOZE] {lime}%s {white}just recieved {unique}%s {white}as a gift! Thank you for supporting our servers!!! " , sName , sUpgrade ) ;
2018-10-29 16:39:02 +01:00
Format ( sMessageWhite , sizeof ( sMessageWhite ) , " %s just recieved %s as a gift! Thank you for supporting our servers!!! " , sName , sUpgrade ) ;
}
}
}
CPrintToChatAll ( sMessage ) ;
for ( int client = 1 ; client < = MaxClients ; client + + )
{
if ( IsClientInGame ( client ) )
{
PrintHintText ( client , sMessageWhite ) ;
}
}
HandleDonation ( iID ) ;
char sQuery [ 255 ] ;
Format ( sQuery , sizeof ( sQuery ) , " SELECT * FROM xf_bdpaygate_log WHERE log_id = %d " , iID + 1 ) ;
g_hDatabase . Query ( TQueryCB , sQuery , iID + 1 ) ;
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void HandleDonation ( int iID )
{
char sDataFile [ PLATFORM_MAX_PATH ] ;
BuildPath ( Path_SM , sDataFile , sizeof ( sDataFile ) , " configs/unloze_donation_alert/data.cfg " ) ;
if ( ! FileExists ( sDataFile ) )
{
LogError ( " Could not find data file: \" %s \" " , sDataFile ) ;
return ;
}
KeyValues Data = new KeyValues ( " unloze_donation_alert " ) ;
if ( ! Data . JumpToKey ( " last_processed_donation " , true ) )
{
LogError ( " Unable to create section last_processed_donation: \" %s \" " , sDataFile ) ;
delete Data ;
return ;
}
Data . SetNum ( " id " , iID ) ;
Data . Rewind ( ) ;
if ( ! Data . ExportToFile ( sDataFile ) )
{
LogError ( " Unable to export data file: \" %s \" " , sDataFile ) ;
delete Data ;
return ;
}
delete Data ;
}