sm-plugins/UNLOZE_Donation_Alert/scripting/UNLOZE_Donation_Alert.sp

226 lines
6.9 KiB
SourcePawn

#pragma semicolon 1
#include <sourcemod>
#include <multicolors>
#pragma newdecls required
/* CONVARS */
ConVar g_cvInterval;
/* DATABASE */
Database g_hDatabase;
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Plugin myinfo =
{
name = "UNLOZE Donation Alert",
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));
Format(sMessage, sizeof(sMessage), "{unique}[UNLOZE] {lime}%s {white}just bought {unique}%s{white}! Thank you for supporting our servers!!!", sName, sUpgrade);
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));
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);
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;
}