#include #include #include #include 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); }