/*
Player's join msg.
*/
#include <sourcemod>
#pragma newdecls required
#pragma semicolon 1
#define FLAGS(%0) GetUserFlagBits(%0) & (ADMFLAG_ROOT | ADMFLAG_BAN)
Handle gh_SyncHUD = null;
ConVar cv_Color = null,
cv_INVisADMIN = null,
cv_Position = null,
cv_Flag = null;
bool gb_INVisADMIN;
char gszColorHUD[16];
char gszPositionHUD[16];
char gszFlag[8];
int gi_ColorHUD[4];
float gf_Position[2];
static const char g_szFrazeList[][] =
{
"[%N] пришел. Вечеринка окончена!", "Это [%N]! Восславь солнце!",
"Держитесь. [%N] только что зашел на сервер!", "Игрок [%N] готов!",
"Дикий [%N] появился", "Вызов брошен - [%N] явился",
"Вжух. [%N] только что приземлился", "Показался большой [%N]",
"[%N] заспавнился на сервере", "[%N] здесь, как и было предсказано",
"Эй, друзья! [%N] уже здесь!", "[%N] заскочил на сервер. Кенгуру!!",
"Мы ожидали Вас [%N]", "[%N] уже тут. Прячьте свои бананы."
};
public Plugin myinfo =
{
name = "Connected Msg [HUD]",
author = "Skeriiz, HLmod",
description = "Оповещание о подключении в HUD",
version = "1.0",
url = "https://neserv.ru/"
};
public void OnPluginStart(){
cv_Color = CreateConVar("JM_COLORHUD", "244 12 15 255", "Цвет HUD msg в RGBA");
cv_Color.AddChangeHook(OnCvarChange);
cv_Position = CreateConVar("JM_POSITION", "0.005 0.5", "Позиция HUD msg на экране XY");
cv_Position.AddChangeHook(OnCvarChange);
cv_INVisADMIN = CreateConVar("JM_VISADMIN", "0", "Включить/ Выключить скрытие админов",_, true, 0.0, true, 1.0);
cv_INVisADMIN.AddChangeHook(OnCvarChange);
cv_Flag = CreateConVar("JM_ACCESSFLAG", "s", "Флаг доступа, оставить пустым, если для всех");
cv_Flag.AddChangeHook(OnCvarChange);
HookEvent("player_connect_full", _FullConnect, EventHookMode_Post);
gh_SyncHUD = CreateHudSynchronizer();
AutoExecConfig(true,"joinmsg");
}
public void OnCvarChange(ConVar cv, const char[] oldValue, const char[] newValue) {
if(cv == cv_INVisADMIN)
gb_INVisADMIN = cv.BoolValue;
else if(cv == cv_Color)
cv.GetString(gszColorHUD, sizeof(gszColorHUD));
else if(cv == cv_Position)
cv.GetString(gszPositionHUD, sizeof(gszPositionHUD));
else if(cv == cv_Flag)
cv.GetString(gszFlag, sizeof(gszFlag));
}
public void OnConfigsExecuted() {
cv_Color.GetString(gszColorHUD, sizeof(gszColorHUD));
SetColor();
cv_Position.GetString(gszPositionHUD, sizeof(gszPositionHUD));
SetPosition();
gb_INVisADMIN = cv_INVisADMIN.BoolValue;
cv_Flag.GetString(gszFlag, sizeof(gszFlag));
TrimString(gszFlag);
}
public Action _FullConnect(Event event, const char[] name, bool dontBroadcast){
int client = GetClientOfUserId(event.GetInt("userid"));
if(!ValidPlayer(client))
return Plugin_Handled;
if(gszFlag[0] != 0){
if(!HAS_Flag(client))
return Plugin_Handled;
}
if(gb_INVisADMIN){
if (FLAGS(client))
return Plugin_Handled;
}
char szHUD[128];
FormatEx(szHUD, sizeof(szHUD), g_szFrazeList[GetRandomInt(1, sizeof(g_szFrazeList))-1], client);
for(int i=1; i<=MaxClients; i++)
if(ValidPlayer(i)){
SetHudTextParams(gf_Position[0], gf_Position[1], 3.0, gi_ColorHUD[0] , gi_ColorHUD[1], gi_ColorHUD[2], gi_ColorHUD[3], 0, 0.25, 1.0, 1.0);
ShowSyncHudText(i, gh_SyncHUD, szHUD);
}
return Plugin_Handled;
}
void SetColor(){
char sExplodedColors[4][16];
ExplodeString(gszColorHUD, " ", sExplodedColors, 4, 16);
for(int i = 0; i <= 3; i++)
gi_ColorHUD[i] = StringToInt(sExplodedColors[i]);
}
void SetPosition(){
char sExplodedPosition[2][16];
ExplodeString(gszPositionHUD, " ", sExplodedPosition, 2, 16);
gf_Position[0] = StringToFloat(sExplodedPosition[0]);
gf_Position[1] = StringToFloat(sExplodedPosition[1]);
}
bool HAS_Flag(int client) { return (GetUserFlagBits(client) & ReadFlagString(gszFlag)) ? true : false; }
bool ValidPlayer(int client) { return (client>0 && client<=MaxClients && IsClientInGame(client) && !IsFakeClient(client) && !IsClientSourceTV(client)); }