delete 2 obsolete gfl plugins
This commit is contained in:
		
							parent
							
								
									f09ca334ae
								
							
						
					
					
						commit
						f300576a1b
					
				| @ -1,505 +0,0 @@ | |||||||
| #pragma semicolon 1 |  | ||||||
| #include <sourcemod> |  | ||||||
| #include <SteamWorks> |  | ||||||
| 
 |  | ||||||
| #pragma newdecls required |  | ||||||
| #include <GFLClanru> |  | ||||||
| 
 |  | ||||||
| //#define GFL_API_KEY "secret" |  | ||||||
| #include "GFLClanruAPI.secret" |  | ||||||
| 
 |  | ||||||
| bool g_bLateLoad = false; |  | ||||||
| float g_fMonthlyCosts = 45.0; |  | ||||||
| KeyValues g_Response[MAXPLAYERS + 1]; |  | ||||||
| bool g_bResponseFailed[MAXPLAYERS + 1]; |  | ||||||
| bool g_bClientPreAdminChecked[MAXPLAYERS + 1]; |  | ||||||
| 
 |  | ||||||
| public Plugin myinfo = |  | ||||||
| { |  | ||||||
| 	name = "GFLCLan.ru API Integration", |  | ||||||
| 	author = "BotoX", |  | ||||||
| 	description = "Handles donators.", |  | ||||||
| 	version = "0.1", |  | ||||||
| 	url = "" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public void OnPluginStart() |  | ||||||
| { |  | ||||||
| 	RegConsoleCmd("sm_tier", Command_Tier, "[GFLClan.ru] Displays donator info."); |  | ||||||
| 	RegConsoleCmd("sm_vip", Command_Tier, "[GFLClan.ru] Displays donator info."); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) |  | ||||||
| { |  | ||||||
| 	CreateNative("AsyncHasSteamIDReservedSlot", Native_AsyncHasSteamIDReservedSlot); |  | ||||||
| 	RegPluginLibrary("GFLClanru"); |  | ||||||
| 
 |  | ||||||
| 	g_bLateLoad = late; |  | ||||||
| 	return APLRes_Success; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public void OnRebuildAdminCache(AdminCachePart part) |  | ||||||
| { |  | ||||||
| 	if(part != AdminCache_Admins) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	CreateTimer(1.0, OnRebuildAdminCachePost, 0, TIMER_FLAG_NO_MAPCHANGE); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public Action OnRebuildAdminCachePost(Handle timer) |  | ||||||
| { |  | ||||||
| 	for(int client = 1; client <= MaxClients; client++) |  | ||||||
| 	{ |  | ||||||
| 		if(g_bClientPreAdminChecked[client] && g_Response[client]) |  | ||||||
| 			OnReceiveUser(client); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return Plugin_Stop; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public void OnClientConnected(int client) |  | ||||||
| { |  | ||||||
| 	g_bClientPreAdminChecked[client] = false; |  | ||||||
| 	g_bResponseFailed[client] = false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public void OnClientAuthorized(int client, const char[] auth) |  | ||||||
| { |  | ||||||
| 	if(IsFakeClient(client)) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	char sSteam64ID[32]; |  | ||||||
| 	Steam32IDtoSteam64ID(auth, sSteam64ID, sizeof(sSteam64ID)); |  | ||||||
| 
 |  | ||||||
| 	int UserSerial = GetClientSerial(client); |  | ||||||
| 
 |  | ||||||
| 	static char sRequest[256]; |  | ||||||
| 	FormatEx(sRequest, sizeof(sRequest), "http://direct.gflclan.ru/api/self/Server/OnClientAuthorized?key=%s&steamid=%s", GFL_API_KEY, sSteam64ID); |  | ||||||
| 
 |  | ||||||
| 	Handle hRequest = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, sRequest); |  | ||||||
| 	if (!hRequest || |  | ||||||
| 		!SteamWorks_SetHTTPRequestContextValue(hRequest, UserSerial) || |  | ||||||
| 		!SteamWorks_SetHTTPCallbacks(hRequest, OnClientAuthorized_OnTransferComplete) || |  | ||||||
| 		!SteamWorks_SetHTTPRequestHeaderValue(hRequest, "Accept", "application/vdf") || |  | ||||||
| 		!SteamWorks_SendHTTPRequest(hRequest)) |  | ||||||
| 	{ |  | ||||||
| 		LogError("%L SteamWorks_CreateHTTPRequest failed.", client); |  | ||||||
| 		CloseHandle(hRequest); |  | ||||||
| 		g_bResponseFailed[client] = true; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public int OnClientAuthorized_OnTransferComplete(Handle hRequest, bool bFailure, bool bRequestSuccessful, EHTTPStatusCode eStatusCode, int UserSerial) |  | ||||||
| { |  | ||||||
| 	int client = GetClientFromSerial(UserSerial); |  | ||||||
| 	if(!client) // Player disconnected |  | ||||||
| 	{ |  | ||||||
| 		CloseHandle(hRequest); |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if(bFailure || !bRequestSuccessful || eStatusCode != k_EHTTPStatusCode200OK) |  | ||||||
| 	{ |  | ||||||
| 		LogError("%L OnClientAuthorized HTTP Response failed: %d", client, eStatusCode); |  | ||||||
| 		CloseHandle(hRequest); |  | ||||||
| 		g_bResponseFailed[client] = true; |  | ||||||
| 
 |  | ||||||
| 		if(g_bClientPreAdminChecked[client]) |  | ||||||
| 			NotifyPostAdminCheck(client); |  | ||||||
| 
 |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	SteamWorks_GetHTTPResponseBodyCallback(hRequest, OnClientAuthorized_APIWebResponse, UserSerial); |  | ||||||
| 	CloseHandle(hRequest); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public int OnClientAuthorized_APIWebResponse(const char[] sData, int UserSerial) |  | ||||||
| { |  | ||||||
| 	int client = GetClientFromSerial(UserSerial); |  | ||||||
| 	if(!client) // Player disconnected |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	KeyValues Response = new KeyValues("OnClientAuthorized_APIWebResponse"); |  | ||||||
| 	if(!Response.ImportFromString(sData, "OnClientAuthorized_APIWebResponse")) |  | ||||||
| 	{ |  | ||||||
| 		LogError("%L ImportFromString(sData, \"OnClientAuthorized_APIWebResponse\") failed.", client); |  | ||||||
| 		delete Response; |  | ||||||
| 
 |  | ||||||
| 		if(g_bClientPreAdminChecked[client]) |  | ||||||
| 			NotifyPostAdminCheck(client); |  | ||||||
| 
 |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	g_Response[client] = Response; |  | ||||||
| 
 |  | ||||||
| 	if(g_bClientPreAdminChecked[client]) |  | ||||||
| 	{ |  | ||||||
| 		LogMessage("%L APIWebResponse late.", client); |  | ||||||
| 		NotifyPostAdminCheck(client); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public Action OnClientPreAdminCheck(int client) |  | ||||||
| { |  | ||||||
| 	g_bClientPreAdminChecked[client] = true; |  | ||||||
| 	if(g_Response[client] || g_bResponseFailed[client]) |  | ||||||
| 		return Plugin_Continue; |  | ||||||
| 
 |  | ||||||
| 	RunAdminCacheChecks(client); |  | ||||||
| 
 |  | ||||||
| 	return Plugin_Handled; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public void OnClientPostAdminFilter(int client) |  | ||||||
| { |  | ||||||
| 	OnReceiveUser(client); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public void OnClientDisconnect(int client) |  | ||||||
| { |  | ||||||
| 	g_bClientPreAdminChecked[client] = false; |  | ||||||
| 	g_bResponseFailed[client] = false; |  | ||||||
| 	delete g_Response[client]; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void OnReceiveUser(int client) |  | ||||||
| { |  | ||||||
| 	KeyValues Response = g_Response[client]; |  | ||||||
| 	if(!Response) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	ArrayList Groups = new ArrayList(ByteCountToCells(32)); |  | ||||||
| 
 |  | ||||||
| 	if(Response.JumpToKey("forum")) |  | ||||||
| 	{ |  | ||||||
| 		int Member = Response.GetNum("member"); |  | ||||||
| 		if(Member) |  | ||||||
| 		{ |  | ||||||
| 			int LastSeen = Response.GetNum("last_seen"); |  | ||||||
| 			int Expires = RoundFloat(LastSeen + 86400.0 * 7.0); |  | ||||||
| 			int Now = GetTime(); |  | ||||||
| 
 |  | ||||||
| 			if(Now < Expires) |  | ||||||
| 			{ |  | ||||||
| 				Groups.PushString("Member"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	Response.Rewind(); |  | ||||||
| 
 |  | ||||||
| 	if(Response.JumpToKey("donations") && Response.GotoFirstSubKey()) |  | ||||||
| 	{ |  | ||||||
| 		do |  | ||||||
| 		{ |  | ||||||
| 			char sGroup[32]; |  | ||||||
| 			Response.GetString("group", sGroup, sizeof(sGroup)); |  | ||||||
| 			char sState[32]; |  | ||||||
| 			Response.GetString("state", sState, sizeof(sState)); |  | ||||||
| 			int Tier = Response.GetNum("tier"); |  | ||||||
| 			int Deactivate = Response.GetNum("deactivate", 0); |  | ||||||
| 
 |  | ||||||
| 			if(StrEqual(sState, "active")) |  | ||||||
| 			{ |  | ||||||
| 				Groups.PushString(sGroup); |  | ||||||
| 			} |  | ||||||
| 			else if(Deactivate && (StrEqual(sState, "expired") || StrEqual(sState, "refunded") || StrEqual(sState, "reversed"))) |  | ||||||
| 			{ |  | ||||||
| 				0; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		while(Response.GotoNextKey()); |  | ||||||
| 	} |  | ||||||
| 	Response.Rewind(); |  | ||||||
| 
 |  | ||||||
| 	if(!Groups.Length) |  | ||||||
| 	{ |  | ||||||
| 		delete Groups; |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	AdminId adm; |  | ||||||
| 	// Use a pre-existing admin if we can |  | ||||||
| 	if((adm = GetUserAdmin(client)) == INVALID_ADMIN_ID) |  | ||||||
| 	{ |  | ||||||
| 		LogMessage("Creating new admin for %L", client); |  | ||||||
| 		adm = CreateAdmin(""); |  | ||||||
| 		SetUserAdmin(client, adm, true); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for(int i = 0; i < Groups.Length; i++) |  | ||||||
| 	{ |  | ||||||
| 		char sGroup[32]; |  | ||||||
| 		Groups.GetString(i, sGroup, sizeof(sGroup)); |  | ||||||
| 
 |  | ||||||
| 		GroupId grp; |  | ||||||
| 		if((grp = FindAdmGroup(sGroup)) != INVALID_GROUP_ID) |  | ||||||
| 		{ |  | ||||||
| 			LogMessage("Adding %L to group %s", client, sGroup); |  | ||||||
| 			AdminInheritGroup(adm, grp); |  | ||||||
| 		} |  | ||||||
| 		else |  | ||||||
| 			LogError("%L Group %s not found!", client, sGroup); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	delete Groups; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public void OnClientPostAdminCheck(int client) |  | ||||||
| { |  | ||||||
| 	KeyValues Response = g_Response[client]; |  | ||||||
| 	if(!Response) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	Response.JumpToKey("donations"); |  | ||||||
| 	Response.GotoFirstSubKey(); |  | ||||||
| 	do |  | ||||||
| 	{ |  | ||||||
| 		int Created = Response.GetNum("created"); |  | ||||||
| 		int Activated = Response.GetNum("activated"); |  | ||||||
| 		int Expires = Response.GetNum("expires"); |  | ||||||
| 		int Length = Response.GetNum("length"); |  | ||||||
| 		char sGroup[32]; |  | ||||||
| 		Response.GetString("group", sGroup, sizeof(sGroup)); |  | ||||||
| 		char sState[32]; |  | ||||||
| 		Response.GetString("state", sState, sizeof(sState)); |  | ||||||
| 		int Tier = Response.GetNum("tier"); |  | ||||||
| 		int Anonymous = Response.GetNum("anonymous"); |  | ||||||
| 		int New = Response.GetNum("new"); |  | ||||||
| 		int Deactivate = Response.GetNum("deactivate", 0); |  | ||||||
| 		float fNetAmount = Response.GetFloat("net_amount", 0.0); |  | ||||||
| 
 |  | ||||||
| 		if(StrEqual(sState, "active")) |  | ||||||
| 		{ |  | ||||||
| 			static char sExpireDate[32]; |  | ||||||
| 			FormatTime(sExpireDate, sizeof(sExpireDate), "%a, %d %b %Y %H:%M:%S +00", Expires); |  | ||||||
| 
 |  | ||||||
| 			int Remaining = Expires - Created; |  | ||||||
| 			float RemainingDays = Remaining / 3600.0 / 24.0; |  | ||||||
| 
 |  | ||||||
| 			PrintToChat(client, "\x04[GFLClan.ru]\x01 Donator \x03Tier %d\x01 enabled. Valid until %s (%.1f days)", |  | ||||||
| 				Tier, sExpireDate, RemainingDays); |  | ||||||
| 
 |  | ||||||
| 			if(New) |  | ||||||
| 			{ |  | ||||||
| 				float fDays = fNetAmount * (30.5 / g_fMonthlyCosts); |  | ||||||
| 				PrintCenterText(client, "Your Tier %d donation has been activated! Thank you <3", Tier); |  | ||||||
| 				if(fNetAmount && !Anonymous) |  | ||||||
| 					PrintToChatAll("\x04[GFLClan.ru]\x01 \x03%N\x01's donation paid for %.1f days of server uptime, thanks!", client, fDays); |  | ||||||
| 			} |  | ||||||
| 			else if(Remaining < 86400) // less than 24 hours |  | ||||||
| 			{ |  | ||||||
| 				int Hours = RoundToFloor(Remaining / 3600.0); |  | ||||||
| 				int Minutes = Remaining % 60; |  | ||||||
| 				PrintCenterText(client, "Oy vey goyim! Your tier %d donation will expire in %d hours and %d minutes.", Tier, Hours, Minutes); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		else if(StrEqual(sState, "queued")) |  | ||||||
| 		{ |  | ||||||
| 			float Days = Length / 3600.0 / 24.0; |  | ||||||
| 			PrintToChat(client, "\x04[GFLClan.ru]\x01 Donator \x03Tier %d\x01 queued. Length: %.1f days", |  | ||||||
| 				Tier, Days); |  | ||||||
| 		} |  | ||||||
| 		else if(StrEqual(sState, "expired")) |  | ||||||
| 		{ |  | ||||||
| 			PrintCenterText(client, "Oy gevalt goyim! Your tier %d donation has expired.", Tier); |  | ||||||
| 		} |  | ||||||
| 		else if(StrEqual(sState, "refunded")) |  | ||||||
| 		{ |  | ||||||
| 			PrintCenterText(client, "OY GEVALT GOYIM YOUR DONATION HAS BEEN REFUNDED!"); |  | ||||||
| 		} |  | ||||||
| 		else if(StrEqual(sState, "reversed")) |  | ||||||
| 		{ |  | ||||||
| 			PrintCenterText(client, "OY GEVALT GOYIM YOUR DONATION HAS BEEN REVERSED!"); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	while(Response.GotoNextKey()); |  | ||||||
| 	Response.Rewind(); |  | ||||||
| 
 |  | ||||||
| 	Response.JumpToKey("forum"); |  | ||||||
| 	Response.GotoFirstSubKey(); |  | ||||||
| 	int Member = Response.GetNum("member"); |  | ||||||
| 	if(Member) |  | ||||||
| 	{ |  | ||||||
| 		int LastSeen = Response.GetNum("last_seen"); |  | ||||||
| 		int Expires = RoundFloat(LastSeen + 86400.0 * 7.0); |  | ||||||
| 		int Now = GetTime(); |  | ||||||
| 
 |  | ||||||
| 		if(Now < Expires) |  | ||||||
| 		{ |  | ||||||
| 			static char sExpireDate[32]; |  | ||||||
| 			FormatTime(sExpireDate, sizeof(sExpireDate), "%a, %d %b %Y %H:%M:%S +00", Expires); |  | ||||||
| 
 |  | ||||||
| 			PrintToChat(client, "\x04[GFLClan.ru]\x01 \x03Member\x01 enabled. Remember to log in until %s (%.1f days)", |  | ||||||
| 				sExpireDate, (Expires - Now) / 3600.0 / 24.0); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public Action Command_Tier(int client, int args) |  | ||||||
| { |  | ||||||
| 	KeyValues Response = g_Response[client]; |  | ||||||
| 	if(!Response) |  | ||||||
| 	{ |  | ||||||
| 		ReplyToCommand(client, "\x04[GFLClan.ru]\x01 No donator info available!"); |  | ||||||
| 		return Plugin_Handled; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	Response.JumpToKey("donations"); |  | ||||||
| 	Response.GotoFirstSubKey(); |  | ||||||
| 	do |  | ||||||
| 	{ |  | ||||||
| 		int Created = Response.GetNum("created"); |  | ||||||
| 		int Expires = Response.GetNum("expires"); |  | ||||||
| 		int Length = Response.GetNum("length"); |  | ||||||
| 		char sState[32]; |  | ||||||
| 		Response.GetString("state", sState, sizeof(sState)); |  | ||||||
| 		int Tier = Response.GetNum("tier"); |  | ||||||
| 
 |  | ||||||
| 		if(StrEqual(sState, "active")) |  | ||||||
| 		{ |  | ||||||
| 			static char sExpireDate[32]; |  | ||||||
| 			FormatTime(sExpireDate, sizeof(sExpireDate), "%a, %d %b %Y %H:%M:%S +00", Expires); |  | ||||||
| 
 |  | ||||||
| 			int Remaining = Expires - Created; |  | ||||||
| 			float RemainingDays = Remaining / 3600.0 / 24.0; |  | ||||||
| 
 |  | ||||||
| 			PrintToChat(client, "\x04[GFLClan.ru]\x01 Donator \x03Tier %d\x01 active. Valid until %s (%.1f days)", |  | ||||||
| 				Tier, sExpireDate, RemainingDays); |  | ||||||
| 		} |  | ||||||
| 		else if(StrEqual(sState, "queued")) |  | ||||||
| 		{ |  | ||||||
| 			float Days = Length / 3600.0 / 24.0; |  | ||||||
| 			PrintToChat(client, "\x04[GFLClan.ru]\x01 Donator \x03Tier %d\x01 queued. Length: %.1f days", |  | ||||||
| 				Tier, Days); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	while(Response.GotoNextKey()); |  | ||||||
| 	Response.Rewind(); |  | ||||||
| 
 |  | ||||||
| 	Response.JumpToKey("forum"); |  | ||||||
| 	Response.GotoFirstSubKey(); |  | ||||||
| 	int Member = Response.GetNum("member"); |  | ||||||
| 	if(Member) |  | ||||||
| 	{ |  | ||||||
| 		int LastSeen = Response.GetNum("last_seen"); |  | ||||||
| 		int Expires = RoundFloat(LastSeen + 86400.0 * 7.0); |  | ||||||
| 		int Now = GetTime(); |  | ||||||
| 
 |  | ||||||
| 		if(Now < Expires) |  | ||||||
| 		{ |  | ||||||
| 			static char sExpireDate[32]; |  | ||||||
| 			FormatTime(sExpireDate, sizeof(sExpireDate), "%a, %d %b %Y %H:%M:%S +00", Expires); |  | ||||||
| 
 |  | ||||||
| 			PrintToChat(client, "\x04[GFLClan.ru]\x01 \x03Member\x01 active. Remember to log in until %s (%.1f days)", |  | ||||||
| 				sExpireDate, (Expires - Now) / 3600.0 / 24.0); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return Plugin_Handled; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public int Native_AsyncHasSteamIDReservedSlot(Handle plugin, int numParams) |  | ||||||
| { |  | ||||||
| 	char sSteam32ID[32]; |  | ||||||
| 	GetNativeString(1, sSteam32ID, sizeof(sSteam32ID)); |  | ||||||
| 
 |  | ||||||
| 	AsyncHasSteamIDReservedSlotCallbackFunc Callback; |  | ||||||
| 	Callback = GetNativeCell(2); |  | ||||||
| 
 |  | ||||||
| 	any Data; |  | ||||||
| 	Data = GetNativeCell(3); |  | ||||||
| 
 |  | ||||||
| 	char sSteam64ID[32]; |  | ||||||
| 	Steam32IDtoSteam64ID(sSteam32ID, sSteam64ID, sizeof(sSteam64ID)); |  | ||||||
| 
 |  | ||||||
| 	static char sRequest[256]; |  | ||||||
| 	FormatEx(sRequest, sizeof(sRequest), "http://direct.gflclan.ru/api/self/Server/HasSteamIDReservedSlot?key=%s&steamid=%s", GFL_API_KEY, sSteam64ID); |  | ||||||
| 
 |  | ||||||
| 	DataPack Pack = new DataPack(); |  | ||||||
| 	Pack.WriteString(sSteam32ID); |  | ||||||
| 	Pack.WriteCell(plugin); |  | ||||||
| 	Pack.WriteFunction(Callback); |  | ||||||
| 	Pack.WriteCell(Data); |  | ||||||
| 
 |  | ||||||
| 	Handle hRequest = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, sRequest); |  | ||||||
| 	if (!hRequest || |  | ||||||
| 		!SteamWorks_SetHTTPRequestNetworkActivityTimeout(hRequest, 3) || |  | ||||||
| 		!SteamWorks_SetHTTPRequestContextValue(hRequest, Pack) || |  | ||||||
| 		!SteamWorks_SetHTTPCallbacks(hRequest, Native_AsyncHasSteamIDReservedSlot_OnTransferComplete) || |  | ||||||
| 		!SteamWorks_SendHTTPRequest(hRequest)) |  | ||||||
| 	{ |  | ||||||
| 		CloseHandle(hRequest); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public int Native_AsyncHasSteamIDReservedSlot_OnTransferComplete(Handle hRequest, bool bFailure, bool bRequestSuccessful, EHTTPStatusCode eStatusCode, DataPack Pack) |  | ||||||
| { |  | ||||||
| 	if(bFailure || !bRequestSuccessful || eStatusCode != k_EHTTPStatusCode200OK) |  | ||||||
| 	{ |  | ||||||
| 		LogError("Native_AsyncHasSteamIDReservedSlot HTTP Response failed: %d", eStatusCode); |  | ||||||
| 		CloseHandle(hRequest); |  | ||||||
| 		// Simulate false response |  | ||||||
| 		char sData[2] = "0"; |  | ||||||
| 		Native_AsyncHasSteamIDReservedSlot_APIWebResponse(sData, Pack); |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	SteamWorks_GetHTTPResponseBodyCallback(hRequest, Native_AsyncHasSteamIDReservedSlot_APIWebResponse, Pack); |  | ||||||
| 	CloseHandle(hRequest); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public int Native_AsyncHasSteamIDReservedSlot_APIWebResponse(char[] sData, DataPack Pack) |  | ||||||
| { |  | ||||||
| 	Pack.Reset(); |  | ||||||
| 	char sSteam32ID[32]; |  | ||||||
| 	Pack.ReadString(sSteam32ID, sizeof(sSteam32ID)); |  | ||||||
| 
 |  | ||||||
| 	Handle plugin; |  | ||||||
| 	plugin = Pack.ReadCell(); |  | ||||||
| 
 |  | ||||||
| 	AsyncHasSteamIDReservedSlotCallbackFunc Callback; |  | ||||||
| 	Callback = view_as<AsyncHasSteamIDReservedSlotCallbackFunc>(Pack.ReadFunction()); |  | ||||||
| 
 |  | ||||||
| 	any Data; |  | ||||||
| 	Data = Pack.ReadCell(); |  | ||||||
| 
 |  | ||||||
| 	delete Pack; |  | ||||||
| 
 |  | ||||||
| 	TrimString(sData); |  | ||||||
| 	int Result = StringToInt(sData); |  | ||||||
| 
 |  | ||||||
| 	Call_StartFunction(plugin, Callback); |  | ||||||
| 	Call_PushString(sSteam32ID); |  | ||||||
| 	Call_PushCell(Result); |  | ||||||
| 	Call_PushCell(Data); |  | ||||||
| 	Call_Finish(); |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| stock bool Steam32IDtoSteam64ID(const char[] sSteam32ID, char[] sSteam64ID, int Size) |  | ||||||
| { |  | ||||||
| 	if(strlen(sSteam32ID) < 11 || strncmp(sSteam32ID[0], "STEAM_", 6)) |  | ||||||
| 	{ |  | ||||||
| 		sSteam64ID[0] = 0; |  | ||||||
| 		return false; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	int iUpper = 765611979; |  | ||||||
| 	int isSteam64ID = StringToInt(sSteam32ID[10]) * 2 + 60265728 + sSteam32ID[8] - 48; |  | ||||||
| 
 |  | ||||||
| 	int iDiv = isSteam64ID / 100000000; |  | ||||||
| 	int iIdx = 9 - (iDiv ? (iDiv / 10 + 1) : 0); |  | ||||||
| 	iUpper += iDiv; |  | ||||||
| 
 |  | ||||||
| 	IntToString(isSteam64ID, sSteam64ID[iIdx], Size - iIdx); |  | ||||||
| 	iIdx = sSteam64ID[9]; |  | ||||||
| 	IntToString(iUpper, sSteam64ID, Size); |  | ||||||
| 	sSteam64ID[9] = iIdx; |  | ||||||
| 
 |  | ||||||
| 	return true; |  | ||||||
| } |  | ||||||
| @ -1,76 +0,0 @@ | |||||||
| #include <sourcemod> |  | ||||||
| #include <cstrike> |  | ||||||
| 
 |  | ||||||
| #define CLANID "33752602" |  | ||||||
| #define GROUP "Clantag" |  | ||||||
| 
 |  | ||||||
| bool g_bInGroup[MAXPLAYERS + 1]; |  | ||||||
| 
 |  | ||||||
| public Plugin myinfo = |  | ||||||
| { |  | ||||||
| 	name			= "GFLClan.com Clantag", |  | ||||||
| 	author			= "BotoX", |  | ||||||
| 	description		= "Assign group to people wearing gfl clantag", |  | ||||||
| 	version			= "1.0", |  | ||||||
| 	url				= "" |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| public void OnPluginStart() |  | ||||||
| { |  | ||||||
| 	/* Handle late load */ |  | ||||||
| 	for(int client = 1; client <= MaxClients; client++) |  | ||||||
| 	{ |  | ||||||
| 		if(IsClientInGame(client) && IsClientAuthorized(client)) |  | ||||||
| 		{ |  | ||||||
| 			OnClientPostAdminFilter(client); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public void OnClientPostAdminFilter(int client) |  | ||||||
| { |  | ||||||
| 	CheckClantag(client); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public void OnClientSettingsChanged(int client) |  | ||||||
| { |  | ||||||
| 	CheckClantag(client); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public void OnClientDisconnect(int client) |  | ||||||
| { |  | ||||||
| 	g_bInGroup[client] = false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool CheckClantag(int client) |  | ||||||
| { |  | ||||||
| 	if(!IsClientAuthorized(client) || g_bInGroup[client]) |  | ||||||
| 		return false; |  | ||||||
| 
 |  | ||||||
| 	char sClanID[32]; |  | ||||||
| 	GetClientInfo(client, "cl_clanid", sClanID, sizeof(sClanID)); |  | ||||||
| 
 |  | ||||||
| 	if(!StrEqual(sClanID, CLANID)) |  | ||||||
| 		return false; |  | ||||||
| 
 |  | ||||||
| 	AdminId adm; |  | ||||||
| 	// Use a pre-existing admin if we can |  | ||||||
| 	if((adm = GetUserAdmin(client)) == INVALID_ADMIN_ID) |  | ||||||
| 	{ |  | ||||||
| 		LogMessage("Creating new admin for %L", client); |  | ||||||
| 		adm = CreateAdmin(""); |  | ||||||
| 		SetUserAdmin(client, adm, true); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	GroupId grp; |  | ||||||
| 	if((grp = FindAdmGroup(GROUP)) != INVALID_GROUP_ID) |  | ||||||
| 	{ |  | ||||||
| 		if(adm.InheritGroup(grp)) |  | ||||||
| 		{ |  | ||||||
| 			LogMessage("Added %L to group %s", client, GROUP); |  | ||||||
| 			return true; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return false; |  | ||||||
| } |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user