Merge branch 'master' of http://git.unloze.com/UNLOZE/sm-plugins
This commit is contained in:
		
						commit
						93dcb84f20
					
				| @ -1,18 +1,33 @@ | ||||
| #pragma semicolon 1 | ||||
| 
 | ||||
| #include <sourcemod> | ||||
| 
 | ||||
| char g_sAdmGroup[32] = "Game-Donator"; | ||||
| #pragma newdecls required | ||||
| 
 | ||||
| /* STRINGS */ | ||||
| char g_sAdmGroup[32] = "Game-Donator"; | ||||
| char g_sGroup[MAXPLAYERS+1][64]; | ||||
| 
 | ||||
| /* CONVARS */ | ||||
| ConVar g_cvFreeVIPDuration; | ||||
| 
 | ||||
| /* DATABASE */ | ||||
| Database g_hDatabase; | ||||
| 
 | ||||
| /* BOOLS */ | ||||
| bool g_bPreAdminChecked[MAXPLAYERS+1]; | ||||
| bool g_bResponseFailed[MAXPLAYERS+1]; | ||||
| bool g_bResponsePassed[MAXPLAYERS+1]; | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public Plugin myinfo = | ||||
| { | ||||
| 	name        = "Unloze_VIP_Test", | ||||
| 	name        = "UNLOZE_VIP_Test", | ||||
| 	author      = "Neon", | ||||
| 	description = "", | ||||
| 	version     = "1.0", | ||||
| 	version     = "2.0", | ||||
| 	url         = "https://steamcommunity.com/id/n3ontm" | ||||
| } | ||||
| 
 | ||||
| @ -26,18 +41,15 @@ public void OnPluginStart() | ||||
| 	RegConsoleCmd("sm_viptest", Command_VIP, "Activate free VIP period"); | ||||
| 	RegConsoleCmd("sm_testvip", Command_VIP, "Activate free VIP period"); | ||||
| 	RegConsoleCmd("sm_vip", Command_VIP, "Activate free VIP period"); | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public Action Command_VIP(int iClient, int iArgs) | ||||
| { | ||||
| 	if (!IsValidClient(iClient)) | ||||
| 		return Plugin_Handled; | ||||
| 	AutoExecConfig(); | ||||
| 
 | ||||
| 	CheckMYSQL(iClient, true); | ||||
| 	return Plugin_Handled; | ||||
| 	char sError[256]; | ||||
| 	if (SQL_CheckConfig("testvip")) | ||||
| 		g_hDatabase = SQL_Connect("testvip", true, sError, sizeof(sError)); | ||||
| 
 | ||||
| 	if (g_hDatabase == null) | ||||
| 		LogError("Could not connect to database: %s", sError); | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| @ -54,120 +66,169 @@ public void OnRebuildAdminCache(AdminCachePart part) | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public void OnClientPostAdminFilter(int client) | ||||
| public Action OnRebuildAdminCachePost(Handle hTimer) | ||||
| { | ||||
| 	CheckMYSQL(client); | ||||
| 	for (int client = 1; client <= MaxClients; client++) | ||||
| 	{ | ||||
| 		if(g_bResponsePassed[client] && g_bPreAdminChecked[client]) | ||||
| 			ApplyGroupFlags(client); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| bool CheckMYSQL(int client, bool add = false) | ||||
| public void OnClientConnected(int client) | ||||
| { | ||||
| 	if (client == 0) | ||||
| 		return false; | ||||
| 	g_bPreAdminChecked[client] = false; | ||||
| 	g_bResponseFailed[client] = false; | ||||
| 	g_bResponsePassed[client] = false; | ||||
| 
 | ||||
| 	char error[255]; | ||||
| 	Database db; | ||||
| 	g_sGroup[client][0] = 0; | ||||
| } | ||||
| 
 | ||||
| 	if (SQL_CheckConfig("testvip")) | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // 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 sSteamID[32]; | ||||
| 	GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); | ||||
| 
 | ||||
| 	char sQuery[256]; | ||||
| 	Format(sQuery, sizeof(sQuery), "SELECT * FROM testvip_table WHERE steam_auth = '%s'", sSteamID); | ||||
| 	SQL_TQuery(g_hDatabase, TQueryCBConnect, sQuery, GetClientUserId(client)); | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public void TQueryCBConnect(Handle owner, Handle rs, const char[] error, any data) | ||||
| { | ||||
| 	int client = 0; | ||||
| 
 | ||||
| 	if ((client = GetClientOfUserId(data)) == 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	if (SQL_GetRowCount(rs) > 0) | ||||
| 	{ | ||||
| 		db = SQL_Connect("testvip", true, error, sizeof(error)); | ||||
| 	} | ||||
| 
 | ||||
| 	if (db == null) | ||||
| 	{ | ||||
| 		LogError("Could not connect to database: %s", error); | ||||
| 		delete db; | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	if (!IsFakeClient(client) && !IsClientSourceTV(client)) | ||||
| 	{ | ||||
| 		char sSID[64]; | ||||
| 		GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID)); | ||||
| 
 | ||||
| 		char sQuery[255]; | ||||
| 		Format(sQuery, sizeof(sQuery), "SELECT * FROM testvip_table WHERE steam_auth = '%s'", sSID); | ||||
| 		DBResultSet rs; | ||||
| 		if ((rs = SQL_Query(db, sQuery)) == null) | ||||
| 		{ | ||||
| 			delete db; | ||||
| 			delete rs; | ||||
| 			LogError("Database Error: %s", error); | ||||
| 			return false; | ||||
| 		} | ||||
| 		int iField; | ||||
| 		SQL_FetchRow(rs); | ||||
| 		SQL_FieldNameToNum(rs, "activated", iField); | ||||
| 		int iTimestampActivated = SQL_FetchInt(rs, iField); | ||||
| 		int iTimestamp = GetTime(); | ||||
| 		int iTimestampActivated = GetTime(); | ||||
| 		bool bFound = false; | ||||
| 
 | ||||
| 		if (!(rs.RowCount > 0)) | ||||
| 		{ | ||||
| 			if (add) | ||||
| 			{ | ||||
| 				bool bHasVIP = false; | ||||
| 				AdminId AdmID; | ||||
| 
 | ||||
| 				if ((AdmID = GetUserAdmin(client)) == INVALID_ADMIN_ID) | ||||
| 					bHasVIP = false; | ||||
| 				else | ||||
| 				{ | ||||
| 					for (int i = 0; i <= GetAdminGroupCount(AdmID); i++) | ||||
| 					{ | ||||
| 						char sGroup[32]; | ||||
| 						if ((GetAdminGroup(AdmID, i, sGroup, sizeof(sGroup)) != INVALID_GROUP_ID)) | ||||
| 						{ | ||||
| 							if (StrEqual(sGroup, g_sAdmGroup)) | ||||
| 								bHasVIP = true; | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 				if (!bHasVIP) | ||||
| 				{ | ||||
| 					Format(sQuery, sizeof(sQuery), "INSERT INTO testvip_table (steam_auth, activated) VALUES ('%s', '%d')", sSID, iTimestamp); | ||||
| 					SQL_FastQuery(db, sQuery); | ||||
| 
 | ||||
| 					ApplyGroupFlags(client); | ||||
| 					PrintToChat(client, "[Unloze] Your TEST VIP will expire in %d minutes!", g_cvFreeVIPDuration.IntValue - (iTimestamp - iTimestampActivated) / 60); | ||||
| 					PrintToChat(client, "[Unloze] You have now access to !zclass, !tag and !glow."); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					PrintToChat(client, "[Unloze] You already have VIP activated!"); | ||||
| 					delete db; | ||||
| 					delete rs; | ||||
| 					return false; | ||||
| 				} | ||||
| 
 | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			int iField; | ||||
| 			rs.FetchRow(); | ||||
| 			rs.FieldNameToNum("activated", iField); | ||||
| 			iTimestampActivated = rs.FetchInt(iField); | ||||
| 			bFound = true; | ||||
| 		} | ||||
| 		delete rs; | ||||
| 
 | ||||
| 		if (bFound) | ||||
| 		if ((iTimestamp - iTimestampActivated) < g_cvFreeVIPDuration.IntValue *60) | ||||
| 		{ | ||||
| 			if ((iTimestamp - iTimestampActivated) < g_cvFreeVIPDuration.IntValue *60) | ||||
| 			{ | ||||
| 				ApplyGroupFlags(client); | ||||
| 				PrintToChat(client, "[Unloze] Your TEST VIP will expire in %d minutes!", g_cvFreeVIPDuration.IntValue - (iTimestamp - iTimestampActivated) / 60); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				if (add) | ||||
| 					PrintToChat(client, "[Unloze] Your TEST VIP expired already!", g_cvFreeVIPDuration.IntValue - (iTimestamp - iTimestampActivated) / 60); | ||||
| 			} | ||||
| 			strcopy(g_sGroup[client], sizeof(g_sGroup[]), g_sAdmGroup); | ||||
| 		} | ||||
| 	} | ||||
| 	delete db; | ||||
| 	return true; | ||||
| 
 | ||||
| 	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: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public Action Command_VIP(int client, int iArgs) | ||||
| { | ||||
| 	if (!IsValidClient(client)) | ||||
| 		return Plugin_Handled; | ||||
| 
 | ||||
| 	char sSteamID[32]; | ||||
| 	GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); | ||||
| 
 | ||||
| 	char sQuery[255]; | ||||
| 	Format(sQuery, sizeof(sQuery), "SELECT * FROM testvip_table WHERE steam_auth = '%s'", sSteamID); | ||||
| 	SQL_TQuery(g_hDatabase, TQueryCBCommand, sQuery, GetClientUserId(client)); | ||||
| 
 | ||||
| 	return Plugin_Handled; | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public void TQueryCBCommand(Handle owner, Handle rs, const char[] error, any data) | ||||
| { | ||||
| 	int client = 0; | ||||
| 
 | ||||
| 	if ((client = GetClientOfUserId(data)) == 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	int iTimestamp = GetTime(); | ||||
| 
 | ||||
| 	if (SQL_GetRowCount(rs) > 0) | ||||
| 	{ | ||||
| 		int iField; | ||||
| 		SQL_FetchRow(rs); | ||||
| 		SQL_FieldNameToNum(rs, "activated", iField); | ||||
| 		int iTimestampActivated = SQL_FetchInt(rs, iField); | ||||
| 		delete rs; | ||||
| 
 | ||||
| 		if ((iTimestamp - iTimestampActivated) < g_cvFreeVIPDuration.IntValue *60) | ||||
| 			PrintToChat(client, "[UNLOZE] Your TEST VIP will expire in %d minutes!", g_cvFreeVIPDuration.IntValue - (iTimestamp - iTimestampActivated) / 60); | ||||
| 		else | ||||
| 			PrintToChat(client, "[UNLOZE] Your TEST VIP expired already!"); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (IsVIP(client)) | ||||
| 		{ | ||||
| 			PrintToChat(client, "[UNLOZE] You already have VIP activated!"); | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		char sSteamID[32]; | ||||
| 		GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); | ||||
| 
 | ||||
| 		char sQuery[255]; | ||||
| 		Format(sQuery, sizeof(sQuery), "INSERT INTO testvip_table (steam_auth, activated) VALUES ('%s', '%d')", sSteamID, iTimestamp); | ||||
| 		SQL_FastQuery(g_hDatabase, sQuery); | ||||
| 		strcopy(g_sGroup[client], sizeof(g_sGroup[]), g_sAdmGroup); | ||||
| 		ApplyGroupFlags(client); | ||||
| 		PrintToChat(client, "[UNLOZE] You have now access to !zclass, !tag and !glow and other VIP-Perks."); | ||||
| 		PrintToChat(client, "[UNLOZE] Your TEST VIP will expire in %d minutes!", g_cvFreeVIPDuration.IntValue); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| @ -175,6 +236,12 @@ bool CheckMYSQL(int client, bool add = false) | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| stock void ApplyGroupFlags(int client) | ||||
| { | ||||
| 	if (!g_bResponsePassed[client]) | ||||
| 		return; | ||||
| 
 | ||||
| 	if (g_sGroup[client][0] == 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	AdminId AdmID; | ||||
| 	GroupId GrpID; | ||||
| 
 | ||||
| @ -186,27 +253,13 @@ stock void ApplyGroupFlags(int client) | ||||
| 		SetUserAdmin(client, AdmID, true); | ||||
| 	} | ||||
| 
 | ||||
| 	if ((GrpID = FindAdmGroup(g_sAdmGroup)) != INVALID_GROUP_ID) | ||||
| 	if ((GrpID = FindAdmGroup(g_sGroup[client])) != INVALID_GROUP_ID) | ||||
| 	{ | ||||
| 		if (AdminInheritGroup(AdmID, GrpID)) | ||||
| 			LogMessage("%L added to group %s", client, g_sAdmGroup); | ||||
| 			LogMessage("%L added to group %s", client, g_sGroup[client]); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		LogMessage("%L group not found %s", client, g_sAdmGroup); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public Action OnRebuildAdminCachePost(Handle hTimer) | ||||
| { | ||||
| 	for (int client = 1; client <= MaxClients; client++) | ||||
| 	{ | ||||
| 		if (IsValidClient(client)) | ||||
| 			CheckMYSQL(client); | ||||
| 	} | ||||
| 		LogMessage("%L group not found %s", client, g_sGroup[client]); | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| @ -215,8 +268,31 @@ public Action OnRebuildAdminCachePost(Handle hTimer) | ||||
| stock int IsValidClient(int client, bool nobots = true) | ||||
| { | ||||
| 	if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client))) | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	return IsClientInGame(client); | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public bool IsVIP(int client) | ||||
| { | ||||
| 	AdminId AdmID; | ||||
| 
 | ||||
| 	if ((AdmID = GetUserAdmin(client)) == INVALID_ADMIN_ID) | ||||
| 		return false; | ||||
| 	else | ||||
| 	{ | ||||
| 		for (int i = 0; i <= GetAdminGroupCount(AdmID); i++) | ||||
| 		{ | ||||
| 			char sGroup[32]; | ||||
| 			if ((GetAdminGroup(AdmID, i, sGroup, sizeof(sGroup)) != INVALID_GROUP_ID)) | ||||
| 			{ | ||||
| 				if (StrEqual(sGroup, g_sAdmGroup)) | ||||
| 					return true; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return false; | ||||
| } | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user