312 lines
8.3 KiB
SourcePawn
312 lines
8.3 KiB
SourcePawn
|
#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);
|
||
|
}
|