IT WORKS YOU NIGGERS, I DONT WANT TO HEAR YOU COMPLAIN, YOU NIGGERS
This commit is contained in:
		
							parent
							
								
									f023abde25
								
							
						
					
					
						commit
						42dec7581b
					
				
							
								
								
									
										410
									
								
								_UNLOZE_ForumIntegration_MYSQL/UNLOZE_ForumIntegration.sp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										410
									
								
								_UNLOZE_ForumIntegration_MYSQL/UNLOZE_ForumIntegration.sp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,410 @@ | |||||||
|  | //==================================================================================================== | ||||||
|  | // | ||||||
|  | // Name: UNLOZE Forum Integration. | ||||||
|  | // Author: .George & zaCade (Original by Botox) | ||||||
|  | // Description: Handles forum access ingame. | ||||||
|  | // | ||||||
|  | //==================================================================================================== | ||||||
|  | #include <sourcemod> | ||||||
|  | #include <SteamWorks> | ||||||
|  | #include <unloze> | ||||||
|  | #include <UNLOZE.secret> //#define UNLOZE_APIKEY here | ||||||
|  | 
 | ||||||
|  | #pragma newdecls required | ||||||
|  | 
 | ||||||
|  | /* STRINGS */ | ||||||
|  | char G_sGroup[MAXPLAYERS+1][64]; | ||||||
|  | 
 | ||||||
|  | /* BOOLS */ | ||||||
|  | bool G_bPreAdminChecked[MAXPLAYERS+1]; | ||||||
|  | bool G_bResponseFailed[MAXPLAYERS+1]; | ||||||
|  | bool G_bResponsePassed[MAXPLAYERS+1]; | ||||||
|  | 
 | ||||||
|  | bool g_bLateLoad = false; | ||||||
|  | 
 | ||||||
|  | Database g_hDatabase = null; | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) | ||||||
|  | { | ||||||
|  | 	 | ||||||
|  | 	CreateNative("AsyncHasSteamIDReservedSlot", Native_AsyncHasSteamIDReservedSlot); | ||||||
|  | 	 | ||||||
|  | 	RegPluginLibrary("UNLOZE_ForumIntegration"); | ||||||
|  | 	 | ||||||
|  | 	g_bLateLoad = late; | ||||||
|  | 	 | ||||||
|  | 	return APLRes_Success; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public Plugin myinfo = | ||||||
|  | { | ||||||
|  | 	name         = "UNLOZE Forum Integration", | ||||||
|  | 	author       = ".George & zaCade (Original by Botox)", | ||||||
|  | 	description  = "Handles forum access ingame", | ||||||
|  | 	version      = "1.2.1" | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: Late load | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnPluginStart() | ||||||
|  | { | ||||||
|  | 	EstablishConnection(); | ||||||
|  | 	 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | public void EstablishConnection() | ||||||
|  | { | ||||||
|  | 	if (SQL_CheckConfig("xenforo")) | ||||||
|  | 	Database.Connect(ConnectionCallback, "xenforo"); | ||||||
|  | 	else | ||||||
|  | 	SetFailState("'xenforo' not found in 'sourcemod/configs/databases.cfg'"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | public void ConnectionCallback(Database db, const char[] error, any data) | ||||||
|  | { | ||||||
|  | 	if (db == null) | ||||||
|  | 	{ | ||||||
|  | 		SetFailState("Failed to connect to the database, will attempt to reconnect on map change"); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	g_hDatabase = db; | ||||||
|  | 	 | ||||||
|  | 	if (g_bLateLoad) | ||||||
|  | 	{ | ||||||
|  | 		/* Late load */ | ||||||
|  | 		for(int client = 1; client <= MaxClients; client++) | ||||||
|  | 		{ | ||||||
|  | 			if(IsClientConnected(client)) | ||||||
|  | 			OnClientConnected(client); | ||||||
|  | 			 | ||||||
|  | 			if(IsClientAuthorized(client) && !IsFakeClient(client)) | ||||||
|  | 			{ | ||||||
|  | 				char sSteamID32[32]; | ||||||
|  | 				if(GetClientAuthId(client, AuthId_Steam2, sSteamID32, sizeof(sSteamID32))) | ||||||
|  | 				OnClientAuthorized(client, sSteamID32); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnRebuildAdminCache(AdminCachePart part) | ||||||
|  | { | ||||||
|  | 	if (part != AdminCache_Admins) | ||||||
|  | 	return; | ||||||
|  | 	 | ||||||
|  | 	CreateTimer(1.0, OnRebuildAdminCachePost, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public Action OnRebuildAdminCachePost(Handle hTimer) | ||||||
|  | { | ||||||
|  | 	for (int client = 1; client <= MaxClients; client++) | ||||||
|  | 	{ | ||||||
|  | 		if(G_bResponsePassed[client] && G_bPreAdminChecked[client]) | ||||||
|  | 		ApplyGroupFlags(client); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnClientConnected(int client) | ||||||
|  | { | ||||||
|  | 	G_bPreAdminChecked[client] = false; | ||||||
|  | 	G_bResponseFailed[client] = false; | ||||||
|  | 	G_bResponsePassed[client] = false; | ||||||
|  | 	 | ||||||
|  | 	G_sGroup[client][0] = 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnClientDisconnect(int client) | ||||||
|  | { | ||||||
|  | 	G_bPreAdminChecked[client] = false; | ||||||
|  | 	G_bResponseFailed[client] = false; | ||||||
|  | 	G_bResponsePassed[client] = false; | ||||||
|  | 	 | ||||||
|  | 	G_sGroup[client][0] = 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnClientAuthorized(int client, const char[] sSteamID32) | ||||||
|  | { | ||||||
|  | 	if (IsFakeClient(client)) | ||||||
|  | 	return; | ||||||
|  | 	 | ||||||
|  | 	char sSteamID64[32]; | ||||||
|  | 	SteamID32toSteamID64(sSteamID32, sSteamID64, sizeof(sSteamID64)); | ||||||
|  | 	 | ||||||
|  | 	char sRequest[256]; | ||||||
|  | 	Format(sRequest, sizeof(sRequest), "select * from unloze_forum.xf_user_external_auth ka inner JOIN unloze_forum.xf_user_upgrade_active kak on ka.user_id = kak.user_id where provider_key  = '%s'", sSteamID64); | ||||||
|  | 	g_hDatabase.Query(SQL_FUCKYOU, sRequest, GetClientSerial(client)); | ||||||
|  | 	 | ||||||
|  |     /*FormatEx(sRequest, sizeof(sRequest), "https://unloze.com/api/private_api.php?api_key=%s&steam_id=%s", UNLOZE_APIKEY, sSteamID64); | ||||||
|  | 
 | ||||||
|  |     int iSerial = GetClientSerial(client); | ||||||
|  |     Handle hRequest = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, sRequest); | ||||||
|  |     if (!hRequest || | ||||||
|  | 	    !SteamWorks_SetHTTPCallbacks(hRequest, OnClientAuthorized_OnTransferComplete) || | ||||||
|  | 	    !SteamWorks_SetHTTPRequestContextValue(hRequest, iSerial) || | ||||||
|  | 	    !SteamWorks_SendHTTPRequest(hRequest)) | ||||||
|  |     { | ||||||
|  | 	    delete hRequest; | ||||||
|  |     }*/ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void SQL_FUCKYOU(Database db, DBResultSet results, const char[] error, int data) | ||||||
|  | { | ||||||
|  | 	int client; | ||||||
|  | 	if ((client = GetClientFromSerial(data)) == 0) | ||||||
|  | 	return; | ||||||
|  | 	 | ||||||
|  | 	if (results.RowCount && results.FetchRow()) | ||||||
|  | 	{ | ||||||
|  | 		OnClientAuthorized_OnTransferResponse("Game-Donator", data); | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		OnClientAuthorized_OnTransferResponse("NOGROUP", data); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public int OnClientAuthorized_OnTransferResponse(char[] sData, int iSerial) | ||||||
|  | { | ||||||
|  | 	int client = GetClientFromSerial(iSerial); | ||||||
|  | 	 | ||||||
|  | 	if (!client) //Player disconnected. | ||||||
|  | 	return; | ||||||
|  | 	 | ||||||
|  | 	TrimString(sData); | ||||||
|  | 	StripQuotes(sData); | ||||||
|  | 	 | ||||||
|  | 	LogMessage("reached sData with status 200: %s", sData); | ||||||
|  | 	strcopy(G_sGroup[client], sizeof(G_sGroup[]), sData); | ||||||
|  | 	 | ||||||
|  | 	G_bResponsePassed[client] = true; | ||||||
|  | 	 | ||||||
|  | 	if (G_bPreAdminChecked[client]) | ||||||
|  | 	NotifyPostAdminCheck(client); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public Action OnClientPreAdminCheck(int client) | ||||||
|  | { | ||||||
|  | 	G_bPreAdminChecked[client] = true; | ||||||
|  | 	 | ||||||
|  | 	if (G_bResponsePassed[client] || G_bResponseFailed[client]) | ||||||
|  | 	return Plugin_Continue; | ||||||
|  | 	 | ||||||
|  | 	RunAdminCacheChecks(client); | ||||||
|  | 	return Plugin_Handled; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public void OnClientPostAdminFilter(int client) | ||||||
|  | { | ||||||
|  | 	ApplyGroupFlags(client); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | stock void ApplyGroupFlags(int client) | ||||||
|  | { | ||||||
|  | 	if (!G_bResponsePassed[client]) | ||||||
|  | 	return; | ||||||
|  | 	 | ||||||
|  | 	AdminId AdmID; | ||||||
|  | 	GroupId GrpID; | ||||||
|  | 	 | ||||||
|  | 	if ((AdmID = GetUserAdmin(client)) == INVALID_ADMIN_ID) | ||||||
|  | 	{ | ||||||
|  | 		LogMessage("Creating new admin for %L", client); | ||||||
|  | 		 | ||||||
|  | 		AdmID = CreateAdmin(); | ||||||
|  | 		SetUserAdmin(client, AdmID, true); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	if ((GrpID = FindAdmGroup(G_sGroup[client])) != INVALID_GROUP_ID) | ||||||
|  | 	{ | ||||||
|  | 		if (AdminInheritGroup(AdmID, GrpID)) | ||||||
|  | 		{ | ||||||
|  | 			LogMessage("%L added to group %s", client, G_sGroup[client]); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		LogMessage("%L group not found %s", client, G_sGroup[client]); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public int Native_AsyncHasSteamIDReservedSlot(Handle plugin, int numParams) | ||||||
|  | { | ||||||
|  | 	char sSteamID32[32]; | ||||||
|  | 	GetNativeString(1, sSteamID32, sizeof(sSteamID32)); | ||||||
|  | 	 | ||||||
|  | 	AsyncHasSteamIDReservedSlotCallbackFunc callback; | ||||||
|  | 	callback = GetNativeCell(2); | ||||||
|  | 	 | ||||||
|  | 	any data; | ||||||
|  | 	data = GetNativeCell(3); | ||||||
|  | 	 | ||||||
|  | 	char sSteamID64[32]; | ||||||
|  | 	SteamID32toSteamID64(sSteamID32, sSteamID64, sizeof(sSteamID64)); | ||||||
|  | 	 | ||||||
|  | 	char sRequest[256]; | ||||||
|  | 	Format(sRequest, sizeof(sRequest), "select * from unloze_forum.xf_user_external_auth ka inner JOIN unloze_forum.xf_user_upgrade_active kak on ka.user_id = kak.user_id where provider_key  = '%s'", sSteamID64); | ||||||
|  | 	 | ||||||
|  | 	DataPack hDataPack = new DataPack(); | ||||||
|  | 	hDataPack.WriteString(sSteamID32); | ||||||
|  | 	hDataPack.WriteFunction(callback); | ||||||
|  | 	hDataPack.WriteCell(plugin); | ||||||
|  | 	hDataPack.WriteCell(data); | ||||||
|  | 	 | ||||||
|  | 	g_hDatabase.Query(SQL_FUCKYOU2, sRequest, hDataPack); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | public void SQL_FUCKYOU2(Database db, DBResultSet results, const char[] error, DataPack fuck) | ||||||
|  | { | ||||||
|  | 	if (results.RowCount && results.FetchRow()) | ||||||
|  | 	{ | ||||||
|  | 		Native_AsyncHasSteamIDReservedSlot_OnTransferResponse("Game-Donator", fuck); | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		Native_AsyncHasSteamIDReservedSlot_OnTransferResponse("NOGROUP", fuck); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | /*public int Native_AsyncHasSteamIDReservedSlot_OnTransferComplete(Handle hRequest, bool bFailure, bool bSuccessful, EHTTPStatusCode eStatusCode, DataPack hDataPack) | ||||||
|  | { | ||||||
|  | 	if (bFailure || !bSuccessful || eStatusCode != k_EHTTPStatusCode200OK) | ||||||
|  | 	{ | ||||||
|  | 		char sData[32] = "NOGROUP"; | ||||||
|  | 		Native_AsyncHasSteamIDReservedSlot_OnTransferResponse(sData, hDataPack); | ||||||
|  | 
 | ||||||
|  | 		delete hRequest; | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	SteamWorks_GetHTTPResponseBodyCallback(hRequest, Native_AsyncHasSteamIDReservedSlot_OnTransferResponse, hDataPack); | ||||||
|  | }*/ | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | public int Native_AsyncHasSteamIDReservedSlot_OnTransferResponse(char[] sData, DataPack hDataPack) | ||||||
|  | { | ||||||
|  | 	hDataPack.Reset(); | ||||||
|  | 	 | ||||||
|  | 	char sSteamID32[32]; | ||||||
|  | 	hDataPack.ReadString(sSteamID32, sizeof(sSteamID32)); | ||||||
|  | 	 | ||||||
|  | 	AsyncHasSteamIDReservedSlotCallbackFunc callback; | ||||||
|  | 	callback = view_as<AsyncHasSteamIDReservedSlotCallbackFunc>(hDataPack.ReadFunction()); | ||||||
|  | 	 | ||||||
|  | 	Handle plugin; | ||||||
|  | 	plugin = hDataPack.ReadCell(); | ||||||
|  | 	 | ||||||
|  | 	any data; | ||||||
|  | 	data = hDataPack.ReadCell(); | ||||||
|  | 	 | ||||||
|  | 	TrimString(sData); | ||||||
|  | 	StripQuotes(sData); | ||||||
|  | 	 | ||||||
|  | 	int result; | ||||||
|  | 	if (StrEqual(sData, "Game-Donator", false)) | ||||||
|  | 	result = 1; | ||||||
|  | 	else | ||||||
|  | 	result = 0; | ||||||
|  | 	 | ||||||
|  | 	Call_StartFunction(plugin, callback); | ||||||
|  | 	Call_PushString(sSteamID32); | ||||||
|  | 	Call_PushCell(result); | ||||||
|  | 	Call_PushCell(data); | ||||||
|  | 	Call_Finish(); | ||||||
|  | 	 | ||||||
|  | 	delete hDataPack; | ||||||
|  | 	return; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | // Purpose: | ||||||
|  | //---------------------------------------------------------------------------------------------------- | ||||||
|  | stock bool SteamID32toSteamID64(const char[] sSteamID32, char[] sSteamID64, int iSize) | ||||||
|  | { | ||||||
|  | 	if (strlen(sSteamID32) < 11 || strncmp(sSteamID32[0], "STEAM_", 6)) | ||||||
|  | 	{ | ||||||
|  | 		sSteamID64[0] = 0; | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	int iUpper = 765611979; | ||||||
|  | 	int isSteam64ID = StringToInt(sSteamID32[10]) * 2 + 60265728 + sSteamID32[8] - 48; | ||||||
|  | 	 | ||||||
|  | 	int iDiv = isSteam64ID / 100000000; | ||||||
|  | 	int iIdx = 9 - (iDiv ? (iDiv / 10 + 1) : 0); | ||||||
|  | 	 | ||||||
|  | 	iUpper += iDiv; | ||||||
|  | 	 | ||||||
|  | 	IntToString(isSteam64ID, sSteamID64[iIdx], iSize - iIdx); | ||||||
|  | 	iIdx = sSteamID64[9]; | ||||||
|  | 	 | ||||||
|  | 	IntToString(iUpper, sSteamID64, iSize); | ||||||
|  | 	sSteamID64[9] = iIdx; | ||||||
|  | 	 | ||||||
|  | 	return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | stock void PrintToMe(char[] sText, any:...) | ||||||
|  | { | ||||||
|  | 	char steamid[64]; | ||||||
|  | 	for (int i = 1; i < MaxClients; i++) | ||||||
|  | 	{ | ||||||
|  | 		if(IsClientConnected(i) && IsClientInGame(client) && GetUserFlagBits(i) & ADMFLAG_RCON) | ||||||
|  | 		{ | ||||||
|  | 			GetClientAuthId(i, AuthId_SteamID64, steamid, sizeof steamid); | ||||||
|  | 			if(StrEqual(steamid, "76561198018661517")) | ||||||
|  | 			{ | ||||||
|  | 				PrintToChat(i, sText); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user