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;
 | |
| } |