226 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			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), "{chartreuse}[UNLOZE] {lightblue}%s {white}just bought {lightblue}%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), "{chartreuse}[UNLOZE] {lightblue}%s {white}just recieved {lightblue}%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;
 | 
						|
} |