sm-plugins/VIP_Reward/scripting/VIP_Reward.sp
Rawrington 72f2d3168e Make ForumIntegration request username, and thus use this in listwinners to make the whole thing async.
Rework listwinners (reward) plugin so now it's async and simple.

go back to ded
2021-08-21 20:54:00 +01:00

127 lines
3.9 KiB
SourcePawn

#include <sourcemod>
#include <unloze>
#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)
{
static char sSID[64];
static char sName[64];
for (int client = 1; client <= MaxClients; client++)
{
if(IsValidWinner(client))
{
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
GetForumNameFormat(client, sName, sizeof(sName));
PrintToConsole(iClient, "%s --- %N --- %s", sSID, client, sName);
}
}
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);
static char sSID[64];
static char sName[64];
for (int client = 1; client <= MaxClients; client++)
{
if(IsValidWinner(client))
{
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
GetForumNameFormat(client, sName, sizeof(sName));
WriteFileLine(file_handle, "%s --- %N --- %s", sSID, client, sName);
}
}
WriteFileLine(file_handle, "\n");
CloseHandle(file_handle);
}
}
GetForumNameFormat(int client, char[] sName, int sNameLen)
{
char sForumName[64];
GetClientForumName(client, sForumName, sizeof(sForumName));
if(strlen(sForumName) > 0)
Format(sName, sNameLen, "FORUM NAME: %s", sForumName);
else
Format(sName, sNameLen, "NO FORUM ACCOUNT");
}
stock bool IsValidWinner(int client)
{
if (IsValidClient(client, true) && IsPlayerAlive(client) && GetClientTeam(client) == CS_TEAM_CT && !IsClientSourceTV(client))
return true;
return false;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
stock int IsValidClient(int client, bool nobots = true)
{
if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client)))
{
return false;
}
return IsClientInGame(client);
}