VIP_Reward: the code is currently absolutely garbage... Whoever re-writes this for XF2, make sure to rewrite the mysql queries asynchronous!!!!!! The forum runs on a different machine than the gameserver now, so the current synchronized queries are a terrible practice (well they have always have been a terrible practice, but when this was created like 3 years ago I didnt know any better). Otherwise the server might just freeze from time to time.
This commit is contained in:
		
							parent
							
								
									5e8be5eace
								
							
						
					
					
						commit
						280dc0ca67
					
				
							
								
								
									
										312
									
								
								VIP_Reward/scripting/VIP_Reward.sp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										312
									
								
								VIP_Reward/scripting/VIP_Reward.sp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,312 @@
 | 
				
			|||||||
 | 
					#include <sourcemod>
 | 
				
			||||||
 | 
					#include <zombiereloaded>
 | 
				
			||||||
 | 
					#include <cstrike>
 | 
				
			||||||
 | 
					#include <sdktools>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ConVar g_cvarEventIsOn = null;
 | 
				
			||||||
 | 
					char g_directory_path[128];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose:
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					public Plugin myinfo =
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						name 		= "Unloze_VIP_Reward",
 | 
				
			||||||
 | 
						author 		= "Neon + WASD",
 | 
				
			||||||
 | 
						description = "",
 | 
				
			||||||
 | 
						version 	= "1.1",
 | 
				
			||||||
 | 
						url 		= "https://steamcommunity.com/id/n3ontm"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose:
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					public void OnPluginStart()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						RegAdminCmd("sm_listwinners", Command_Winners, ADMFLAG_GENERIC);
 | 
				
			||||||
 | 
						g_cvarEventIsOn = CreateConVar("sv_event_is_on", "0", "Cvar decides whether event mode is on or not.", _);
 | 
				
			||||||
 | 
						HookEvent("round_end", Event_Round_End)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						BuildPath(Path_SM, g_directory_path, sizeof(g_directory_path), "data/events/");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!DirExists(g_directory_path, false)) {
 | 
				
			||||||
 | 
							CreateDirectory(g_directory_path, 457, false);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose:
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					public Action Command_Winners(int iClient, int iArgs)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						CheckMYSQL(iClient);
 | 
				
			||||||
 | 
						return Plugin_Handled;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose:
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					public Action Event_Round_End(Handle event, const char[] name, bool dontBroadcast)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (g_cvarEventIsOn.IntValue == 1 && GetEventInt(event, "winner") == CS_TEAM_CT) {
 | 
				
			||||||
 | 
							int t_score = GetTeamScore(CS_TEAM_T);
 | 
				
			||||||
 | 
							int ct_score = GetTeamScore(CS_TEAM_CT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							char date[20];
 | 
				
			||||||
 | 
							FormatTime(date, sizeof(date), "%Y%m%d");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							char map[90];
 | 
				
			||||||
 | 
							GetCurrentMap(map, sizeof(map));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							char file_path[256];
 | 
				
			||||||
 | 
							Format(file_path, sizeof(file_path), "%s%s-%s.txt", g_directory_path, date, map);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Handle file_handle = OpenFile(file_path, "a", false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							WriteFileLine(file_handle, "Current score: (CT) : %d - (T): %d", ct_score, t_score);
 | 
				
			||||||
 | 
							CheckMYSQL_2(file_handle);
 | 
				
			||||||
 | 
							WriteFileLine(file_handle, "\n");
 | 
				
			||||||
 | 
							CloseHandle(file_handle);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose: Saves all winners into a textfile located in sourcemod/data/events/.
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					CheckMYSQL_2(Handle file_handle)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						char error[255];
 | 
				
			||||||
 | 
						Database db;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (SQL_CheckConfig("xenforo"))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							db = SQL_Connect("xenforo", true, error, sizeof(error));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (db == null)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							LogError("Could not connect to database: %s", error);
 | 
				
			||||||
 | 
							delete db;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (int client = 1; client <= MaxClients; client++)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (IsValidClient(client))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (IsPlayerAlive(client))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (GetClientTeam(client) == CS_TEAM_CT)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										if (!IsFakeClient(client) && !IsClientSourceTV(client))
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											char sSID[64];
 | 
				
			||||||
 | 
											GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											char sQuery[255];
 | 
				
			||||||
 | 
											Format(sQuery, sizeof(sQuery), "SELECT * FROM xf_user_field_value WHERE field_value = '%s'", sSID);
 | 
				
			||||||
 | 
											DBResultSet rs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											int iUserID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											if ((rs = SQL_Query(db, sQuery)) == null)
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
												delete rs;
 | 
				
			||||||
 | 
												delete db;
 | 
				
			||||||
 | 
												LogError("Database Error: %s", error);
 | 
				
			||||||
 | 
												return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											if (!(rs.RowCount > 0))
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
												char sSID64[64];
 | 
				
			||||||
 | 
												GetClientAuthId(client, AuthId_SteamID64, sSID64, sizeof(sSID64));
 | 
				
			||||||
 | 
												Format(sQuery, sizeof(sQuery), "SELECT * FROM xf_user_external_auth WHERE provider_key = '%s'", sSID64);
 | 
				
			||||||
 | 
												rs = SQL_Query(db, sQuery);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
												if (!(rs.RowCount > 0))
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
													WriteFileLine(file_handle, "%s --- %N --- NO FORUM ACCOUNT", sSID, client);
 | 
				
			||||||
 | 
													delete rs;
 | 
				
			||||||
 | 
													continue;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												else
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
													int iField;
 | 
				
			||||||
 | 
													rs.FetchRow();
 | 
				
			||||||
 | 
													rs.FieldNameToNum("user_id", iField);
 | 
				
			||||||
 | 
													iUserID = rs.FetchInt(iField);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													Format(sQuery, sizeof(sQuery), "SELECT * FROM xf_user WHERE user_id = '%d'", iUserID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													rs = SQL_Query(db, sQuery);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													rs.FetchRow();
 | 
				
			||||||
 | 
													rs.FieldNameToNum("username", iField);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													char sUsername[255];
 | 
				
			||||||
 | 
													rs.FetchString(iField, sUsername, sizeof(sUsername));
 | 
				
			||||||
 | 
													WriteFileLine(file_handle, "%s --- %N --- FORUM NAME: %s", sSID, client, sUsername);
 | 
				
			||||||
 | 
													delete rs;
 | 
				
			||||||
 | 
													continue;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											int iField;
 | 
				
			||||||
 | 
											rs.FetchRow();
 | 
				
			||||||
 | 
											rs.FieldNameToNum("user_id", iField);
 | 
				
			||||||
 | 
											iUserID = rs.FetchInt(iField);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											Format(sQuery, sizeof(sQuery), "SELECT * FROM xf_user WHERE user_id = '%d'", iUserID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											rs = SQL_Query(db, sQuery);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											rs.FetchRow();
 | 
				
			||||||
 | 
											rs.FieldNameToNum("username", iField);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											char sUsername[255];
 | 
				
			||||||
 | 
											rs.FetchString(iField, sUsername, sizeof(sUsername));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											WriteFileLine(file_handle, "%s --- %N --- FORUM NAME: %s", sSID, client, sUsername);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											delete rs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						delete db;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose: Prints all winners to the caller of sm_listwinners.
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					CheckMYSQL(int iCaller)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (iCaller == 0)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						char error[255];
 | 
				
			||||||
 | 
						Database db;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (SQL_CheckConfig("xenforo"))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							db = SQL_Connect("xenforo", true, error, sizeof(error));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (db == null)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							LogError("Could not connect to database: %s", error);
 | 
				
			||||||
 | 
							delete db;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (int client = 1; client <= MaxClients; client++)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (IsValidClient(client))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (IsPlayerAlive(client))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (GetClientTeam(client) == CS_TEAM_CT)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										if (!IsFakeClient(client) && !IsClientSourceTV(client))
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											char sSID[64];
 | 
				
			||||||
 | 
											GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											char sQuery[255];
 | 
				
			||||||
 | 
											Format(sQuery, sizeof(sQuery), "SELECT * FROM xf_user_field_value WHERE field_value = '%s'", sSID);
 | 
				
			||||||
 | 
											DBResultSet rs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											int iUserID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											if ((rs = SQL_Query(db, sQuery)) == null)
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
												delete rs;
 | 
				
			||||||
 | 
												delete db;
 | 
				
			||||||
 | 
												LogError("Database Error: %s", error);
 | 
				
			||||||
 | 
												return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											if (!(rs.RowCount > 0))
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
												char sSID64[64];
 | 
				
			||||||
 | 
												GetClientAuthId(client, AuthId_SteamID64, sSID64, sizeof(sSID64));
 | 
				
			||||||
 | 
												Format(sQuery, sizeof(sQuery), "SELECT * FROM xf_user_external_auth WHERE provider_key = '%s'", sSID64);
 | 
				
			||||||
 | 
												rs = SQL_Query(db, sQuery);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
												if (!(rs.RowCount > 0))
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
													PrintToConsole(iCaller, "%s --- %N --- NO FORUM ACCOUNT", sSID, client);
 | 
				
			||||||
 | 
													delete rs;
 | 
				
			||||||
 | 
													continue;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												else
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
													int iField;
 | 
				
			||||||
 | 
													rs.FetchRow();
 | 
				
			||||||
 | 
													rs.FieldNameToNum("user_id", iField);
 | 
				
			||||||
 | 
													iUserID = rs.FetchInt(iField);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													Format(sQuery, sizeof(sQuery), "SELECT * FROM xf_user WHERE user_id = '%d'", iUserID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													rs = SQL_Query(db, sQuery);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													rs.FetchRow();
 | 
				
			||||||
 | 
													rs.FieldNameToNum("username", iField);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													char sUsername[255];
 | 
				
			||||||
 | 
													rs.FetchString(iField, sUsername, sizeof(sUsername));
 | 
				
			||||||
 | 
													PrintToConsole(iCaller, "%s --- %N --- FORUM NAME: %s", sSID, client, sUsername);
 | 
				
			||||||
 | 
													delete rs;
 | 
				
			||||||
 | 
													continue;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											int iField;
 | 
				
			||||||
 | 
											rs.FetchRow();
 | 
				
			||||||
 | 
											rs.FieldNameToNum("user_id", iField);
 | 
				
			||||||
 | 
											iUserID = rs.FetchInt(iField);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											Format(sQuery, sizeof(sQuery), "SELECT * FROM xf_user WHERE user_id = '%d'", iUserID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											rs = SQL_Query(db, sQuery);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											rs.FetchRow();
 | 
				
			||||||
 | 
											rs.FieldNameToNum("username", iField);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											char sUsername[255];
 | 
				
			||||||
 | 
											rs.FetchString(iField, sUsername, sizeof(sUsername));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											PrintToConsole(iCaller, "%s --- %N --- FORUM NAME: %s", sSID, client, sUsername);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											delete rs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						delete db;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose:
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					stock int IsValidClient(int client, bool nobots = true)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client)))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return IsClientInGame(client);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user