255 lines
7.8 KiB
SourcePawn
255 lines
7.8 KiB
SourcePawn
//====================================================================================================
|
|
//
|
|
// Name: [entWatch] Interface
|
|
// Author: zaCade & Prometheum
|
|
// Description: Handle the interface of [entWatch]
|
|
//
|
|
//====================================================================================================
|
|
#include <multicolors>
|
|
|
|
#pragma newdecls required
|
|
|
|
#include <sourcemod>
|
|
#include <clientprefs>
|
|
#include <entWatch_core>
|
|
#include <entWatch_helpers>
|
|
|
|
/* COOKIES */
|
|
Handle g_hCookie_InterfaceHidden;
|
|
|
|
/* BOOLEANS */
|
|
bool g_bInterfaceHidden[MAXPLAYERS+1];
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public Plugin myinfo =
|
|
{
|
|
name = "[entWatch] Interface",
|
|
author = "zaCade & Prometheum",
|
|
description = "Handle the interface of [entWatch]",
|
|
version = "4.0.0"
|
|
};
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void OnPluginStart()
|
|
{
|
|
LoadTranslations("entWatch.interface.phrases");
|
|
|
|
g_hCookie_InterfaceHidden = RegClientCookie("EW_InterfaceHidden", "", CookieAccess_Private);
|
|
|
|
RegConsoleCmd("sm_hud", Command_ToggleHUD);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void OnMapStart()
|
|
{
|
|
CreateTimer(1.0, OnDisplayHUD, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void OnClientCookiesCached(int client)
|
|
{
|
|
g_bInterfaceHidden[client] = GetClientCookieBool(client, g_hCookie_InterfaceHidden);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void OnClientDisconnect(int client)
|
|
{
|
|
g_bInterfaceHidden[client] = false;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public Action Command_ToggleHUD(int client, int args)
|
|
{
|
|
g_bInterfaceHidden[client] = !g_bInterfaceHidden[client];
|
|
|
|
if (g_bInterfaceHidden[client])
|
|
{
|
|
SetClientCookieBool(client, g_hCookie_InterfaceHidden, true);
|
|
|
|
CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou will now no longer see the HUD.", "E01B5D", "F16767");
|
|
return Plugin_Handled;
|
|
}
|
|
else
|
|
{
|
|
SetClientCookieBool(client, g_hCookie_InterfaceHidden, false);
|
|
|
|
CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou will now see the HUD again.", "E01B5D", "F16767");
|
|
return Plugin_Handled;
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public Action OnDisplayHUD(Handle timer)
|
|
{
|
|
int iHUDPages[3];
|
|
char sHUDPanels[3][8][255]
|
|
|
|
for (int index; index < EW_GetItemCount(); index++)
|
|
{
|
|
CItem item = EW_GetItemData(index);
|
|
|
|
if (item.bClient && item.dConfig.bDisplayInterface)
|
|
{
|
|
char sShort[32];
|
|
item.dConfig.GetShort(sShort, sizeof(sShort));
|
|
|
|
char sLine[96];
|
|
switch(item.dConfig.iMode)
|
|
{
|
|
case MODE_COOLDOWN:
|
|
{
|
|
if (item.flTimeReady > GetEngineTime())
|
|
{
|
|
Format(sLine, sizeof(sLine), "%s [%d]: %N", sShort, RoundToCeil(item.flTimeReady - GetEngineTime()), item.iClient);
|
|
}
|
|
else
|
|
{
|
|
Format(sLine, sizeof(sLine), "%s [%s]: %N", sShort, "R", item.iClient);
|
|
}
|
|
}
|
|
case MODE_MAXUSES:
|
|
{
|
|
if (item.iTimesUsed < item.dConfig.iMaxUses)
|
|
{
|
|
Format(sLine, sizeof(sLine), "%s [%d/%d]: %N", sShort, item.iTimesUsed, item.dConfig.iMaxUses, item.iClient);
|
|
}
|
|
else
|
|
{
|
|
Format(sLine, sizeof(sLine), "%s [%s]: %N", sShort, "D", item.iClient);
|
|
}
|
|
}
|
|
case MODE_COOLDOWNMAXUSES:
|
|
{
|
|
if (item.iTimesUsed < item.dConfig.iMaxUses)
|
|
{
|
|
if (item.flTimeReady > GetEngineTime())
|
|
{
|
|
Format(sLine, sizeof(sLine), "%s [%d]: %N", sShort, RoundToCeil(item.flTimeReady - GetEngineTime()), item.iClient);
|
|
}
|
|
else
|
|
{
|
|
Format(sLine, sizeof(sLine), "%s [%d/%d]: %N", sShort, item.iTimesUsed, item.dConfig.iMaxUses, item.iClient);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Format(sLine, sizeof(sLine), "%s [%s]: %N", sShort, "D", item.iClient);
|
|
}
|
|
}
|
|
case MODE_COOLDOWNCHARGES:
|
|
{
|
|
if (item.flTimeReady > GetEngineTime())
|
|
{
|
|
Format(sLine, sizeof(sLine), "%s [%d]: %N", sShort, RoundToCeil(item.flTimeReady - GetEngineTime()), item.iClient);
|
|
}
|
|
else
|
|
{
|
|
Format(sLine, sizeof(sLine), "%s [%d/%d]: %N", sShort, item.iTimesUsed, item.dConfig.iMaxUses, item.iClient);
|
|
}
|
|
}
|
|
default:
|
|
{
|
|
Format(sLine, sizeof(sLine), "%s [%s]: %N", sShort, "N/A", item.iClient);
|
|
}
|
|
}
|
|
|
|
switch(GetClientTeam(item.iClient))
|
|
{
|
|
case(2):
|
|
{
|
|
if (strlen(sHUDPanels[1][iHUDPages[1]]) + strlen(sLine) + 2 >= sizeof(sHUDPanels[][])) iHUDPages[1]++;
|
|
|
|
StrCat(sHUDPanels[1][iHUDPages[1]], sizeof(sHUDPanels[][]), sLine);
|
|
StrCat(sHUDPanels[1][iHUDPages[1]], sizeof(sHUDPanels[][]), "\n");
|
|
}
|
|
case(3):
|
|
{
|
|
if (strlen(sHUDPanels[2][iHUDPages[2]]) + strlen(sLine) + 2 >= sizeof(sHUDPanels[][])) iHUDPages[2]++;
|
|
|
|
StrCat(sHUDPanels[2][iHUDPages[2]], sizeof(sHUDPanels[][]), sLine);
|
|
StrCat(sHUDPanels[2][iHUDPages[2]], sizeof(sHUDPanels[][]), "\n");
|
|
}
|
|
}
|
|
|
|
if (strlen(sHUDPanels[0][iHUDPages[0]]) + strlen(sLine) + 2 >= sizeof(sHUDPanels[][])) iHUDPages[0]++;
|
|
|
|
StrCat(sHUDPanels[0][iHUDPages[0]], sizeof(sHUDPanels[][]), sLine);
|
|
StrCat(sHUDPanels[0][iHUDPages[0]], sizeof(sHUDPanels[][]), "\n");
|
|
}
|
|
}
|
|
|
|
static int iPageUpdate;
|
|
static int iPageCurrent[3];
|
|
|
|
if (iPageUpdate >= 5)
|
|
{
|
|
for (int iPageID; iPageID < 3; iPageID++)
|
|
{
|
|
if (iPageCurrent[iPageID] >= iHUDPages[iPageID])
|
|
iPageCurrent[iPageID] = 0;
|
|
else
|
|
iPageCurrent[iPageID]++;
|
|
}
|
|
|
|
iPageUpdate = 0;
|
|
}
|
|
else
|
|
iPageUpdate++;
|
|
|
|
for (int client = 1; client <= MaxClients; client++)
|
|
{
|
|
if (!IsClientInGame(client) || (IsFakeClient(client) && !IsClientSourceTV(client)) || g_bInterfaceHidden[client])
|
|
continue;
|
|
|
|
int iPanelID;
|
|
switch(GetClientTeam(client))
|
|
{
|
|
case(2): iPanelID = 1;
|
|
case(3): iPanelID = 2;
|
|
}
|
|
|
|
if (sHUDPanels[iPanelID][iPageCurrent[iPanelID]][0])
|
|
{
|
|
Handle hMessage = StartMessageOne("KeyHintText", client);
|
|
BfWriteByte(hMessage, 1);
|
|
BfWriteString(hMessage, sHUDPanels[iPanelID][iPageCurrent[iPanelID]]);
|
|
EndMessage();
|
|
}
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
stock void SetClientCookieBool(int client, Handle hCookie, bool value)
|
|
{
|
|
char sValue[32];
|
|
IntToString(view_as<int>(value), sValue, sizeof(sValue));
|
|
|
|
SetClientCookie(client, hCookie, sValue);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
stock bool GetClientCookieBool(int client, Handle hCookie)
|
|
{
|
|
char sValue[32];
|
|
GetClientCookie(client, hCookie, sValue, sizeof(sValue));
|
|
|
|
return view_as<bool>(StringToInt(sValue));
|
|
} |