#include <sourcemod>
#include <clientprefs>
public Plugin myinfo =
{
name = "acct",
author = "Hattrick HKS",
description = "Admin Colored Chat Tags",
version = "1.0",
url = "http://hattrick.go.ro/"
};
native bool IsGoldMember(int iId);
native bool IsClientVIP(int iId);
enum ChatTagOption:
{
CTO_Invalid = 0,
CTO_VIP,
CTO_GoldMember,
CTO_Admin,
CTO_Custom,
CTO_None
};
char g_Buffer[PLATFORM_MAX_PATH] = "";
Handle g_pGroups = INVALID_HANDLE;
Handle g_pTags = INVALID_HANDLE;
Handle g_pCookie = INVALID_HANDLE;
Handle g_pDb = INVALID_HANDLE;
bool __IsClientVIP(int iId)
{
return CanTestFeatures() && \
GetFeatureStatus(FeatureType_Native, "IsClientVIP") == FeatureStatus_Available && \
IsClientVIP(iId) ? true : false;
}
bool __IsGoldMember(int iId)
{
return CanTestFeatures() && \
GetFeatureStatus(FeatureType_Native, "IsGoldMember") == FeatureStatus_Available && \
IsGoldMember(iId) ? true : false;
}
void ReplaceColors(char[] szBuffer, int iSize)
{
static char pName[][] = { "{DEFAULT}", "{DARKRED}", "{VIOLET}", "{DARKGREEN}", \
"{LIGHTGREEN}", "{LIME}", "{LIGHTRED}", "{GREY}", \
"{YELLOW}", "{LIGHTORANGE}", "{LIGHTBLUE}", \
"{DARKBLUE}", "{PINK}", "{DARKORANGE}" };
static char pCode[][] = { "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", \
"\x07", "\x08", "\x09", "\x10", \
"\x0B", "\x0C", "\x0E", "\x0F" };
static int iIter = 0;
for (iIter = 0; iIter < sizeof(pName); iIter++)
{
ReplaceString(szBuffer, iSize, pName[iIter], pCode[iIter], false);
}
}
public Action CommandSay(int Client, int Args)
{
static char Raw[PLATFORM_MAX_PATH];
static char Command[PLATFORM_MAX_PATH];
if (Client >= 1 && Client <= MaxClients && IsClientInGame(Client))
{
GetCmdArgString(Raw, sizeof(Raw));
if (hCSGO_PureChatCommand(Raw, Command, sizeof(Command)) >= 2)
{
if (!strcmp(Command, "CTag", false) || !strcmp(Command[1], "CTag", false) || \
!strcmp(Command, "CHATTag", false) || !strcmp(Command[1], "CHATTag", false))
{
CreateTimer(0.1, Timer_AskClient, Client, TIMER_FLAG_NO_MAPCHANGE);
}
}
}
}
void StripColors(char[] szBuffer, int iSize)
{
static char pName[][] = { "{DEFAULT}", "{DARKRED}", "{VIOLET}", "{DARKGREEN}", \
"{LIGHTGREEN}", "{LIME}", "{LIGHTRED}", "{GREY}", \
"{YELLOW}", "{LIGHTORANGE}", "{LIGHTBLUE}", \
"{DARKBLUE}", "{PINK}", "{DARKORANGE}" };
static char pCode[][] = { "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", \
"\x07", "\x08", "\x09", "\x10", \
"\x0B", "\x0C", "\x0E", "\x0F" };
static int iIter = 0;
for (iIter = 0; iIter < sizeof(pName); iIter++)
{
ReplaceString(szBuffer, iSize, pName[iIter], "", false);
}
for (iIter = 0; iIter < sizeof(pCode); iIter++)
{
ReplaceString(szBuffer, iSize, pCode[iIter], "", false);
}
}
public void OnPluginStart()
{
UserMsg pMsgID = GetUserMessageId("SayText2");
if (pMsgID != INVALID_MESSAGE_ID)
HookUserMessage(pMsgID, OnMsg, true);
g_pGroups = CreateArray(PLATFORM_MAX_PATH);
g_pTags = CreateArray(PLATFORM_MAX_PATH);
HookEventEx("round_freeze_end", OnRoundFreezeEnd);
RegConsoleCmd("say", CommandSay);
RegConsoleCmd("say_team", CommandSay);
g_pCookie = RegClientCookie("ChatTagOption", "Provides a chat tag option.", CookieAccess_Private);
}
int HasCustomChatTag(int iId, \
char[] szTag, int iTagSize, \
char[] szGroupTag, int iGroupTagSize)
{
static int iIter = 0;
static char szSteam[PLATFORM_MAX_PATH] = "";
static char szToken[PLATFORM_MAX_PATH] = "";
static char szGroup[PLATFORM_MAX_PATH] = "";
static AdminId pId = INVALID_ADMIN_ID;
FormatEx(szTag, iTagSize, "");
FormatEx(szGroupTag, iGroupTagSize, "");
GetClientAuthId(iId, AuthId_Engine, szSteam, sizeof(szSteam));
hCSGO_ExtractSteamID(szSteam, szSteam, sizeof(szSteam));
for (iIter = 0; iIter < GetArraySize(g_pGroups); iIter++)
{
GetArrayString(g_pGroups, iIter, szToken, sizeof(szToken));
if (strcmp(szToken, szSteam) == 0 || StrContains(szToken, szSteam) != -1 || StrContains(szSteam, szToken) != -1)
{
GetArrayString(g_pTags, iIter, szTag, iTagSize);
StripColors(szTag, iTagSize);
break;
}
}
pId = GetUserAdmin(iId);
if (pId != INVALID_ADMIN_ID)
{
if (GetAdminGroupCount(pId) > 0)
{
GetAdminGroup(pId, 0, szGroup, sizeof(szGroup));
for (iIter = 0; iIter < GetArraySize(g_pGroups); iIter++)
{
GetArrayString(g_pGroups, iIter, szToken, sizeof(szToken));
if (strcmp(szToken, szGroup, false) == 0)
{
GetArrayString(g_pTags, iIter, szGroupTag, iGroupTagSize);
StripColors(szGroupTag, iGroupTagSize);
break;
}
}
}
}
return strlen(szTag);
}
public int Menu_ChatTagOption(Handle pMenu, MenuAction pAction, int iId, int iOption)
{
static char szInfo[PLATFORM_MAX_PATH] = "";
static char szDisplay[PLATFORM_MAX_PATH] = "";
static int iFlags = 0;
if (pAction == MenuAction_Select && IsClientInGame(iId))
{
GetMenuItem(pMenu, iOption, szInfo, sizeof(szInfo), iFlags, szDisplay, sizeof(szDisplay));
switch (StringToInt(szInfo))
{
case view_as<int>(CTO_Admin):
{
SetClientCookie(iId, g_pCookie, "3");
PrintToChat(iId, ">> You Selected\x04 %s", szDisplay);
}
case view_as<int>(CTO_VIP):
{
SetClientCookie(iId, g_pCookie, "1");
PrintToChat(iId, ">> You Selected\x04 %s", szDisplay);
}
case view_as<int>(CTO_GoldMember):
{
SetClientCookie(iId, g_pCookie, "2");
PrintToChat(iId, ">> You Selected\x04 %s", szDisplay);
}
case view_as<int>(CTO_None):
{
SetClientCookie(iId, g_pCookie, "5");
PrintToChat(iId, ">> You Selected\x04 %s", szDisplay);
}
case view_as<int>(CTO_Custom):
{
SetClientCookie(iId, g_pCookie, "4");
PrintToChat(iId, ">> You Selected\x04 %s", szDisplay);
}
}
PrintToChat(iId, ">> To Open The Menu Again\x07 !CTag\x01/\x07 !CHATTag");
}
else if (pAction == MenuAction_End && \
pMenu != INVALID_HANDLE)
{
CloseHandle(pMenu);
pMenu = INVALID_HANDLE;
}
}
public Action Timer_AskClient(Handle pTimer, any iId)
{
static Handle pMenu = INVALID_HANDLE;
static char szTag[PLATFORM_MAX_PATH] = "";
static char szGroupTag[PLATFORM_MAX_PATH] = "";
if (IsClientInGame(iId))
{
HasCustomChatTag(iId, szTag, sizeof(szTag), szGroupTag, sizeof(szGroupTag)) > 0 ? true : false;
pMenu = CreateMenu(Menu_ChatTagOption);
SetMenuTitle(pMenu, "★ CHAT TAG ★ (!CTag/ !CHATTag)");
AddMenuItem(pMenu, "5", "NO, THANKS!");
if (__IsClientVIP(iId))
AddMenuItem(pMenu, "1", "VIP★");
if (__IsGoldMember(iId))
AddMenuItem(pMenu, "2", "Gold Member®");
if (strlen(szGroupTag) > 0)
AddMenuItem(pMenu, "3", szGroupTag);
if (strlen(szTag) > 0)
AddMenuItem(pMenu, "4", szTag);
DisplayMenu(pMenu, iId, MENU_TIME_FOREVER);
}
}
public void OnRoundFreezeEnd(Handle E, const char[] N, bool NB)
{
static int iId = INVALID_ENT_REFERENCE;
static int iValue = 0;
static int iGroupCount = 0;
static AdminId pId = INVALID_ADMIN_ID;
static Handle pMenu = INVALID_HANDLE;
static char szTag[PLATFORM_MAX_PATH] = "";
static char szGroupTag[PLATFORM_MAX_PATH] = "";
static char szValue[MAX_NAME_LENGTH] = "";
static bool bHasCustomChatTag = false;
for (iId = 1; iId <= MaxClients; iId++)
{
if (IsClientInGame(iId) && \
!IsFakeClient(iId) && \
GetClientTime(iId) >= 60.0 && \
!hCSGO_IsWarmup())
{
GetClientCookie(iId, g_pCookie, szValue, sizeof(szValue)), \
iValue = StringToInt(szValue);
pId = GetUserAdmin(iId);
bHasCustomChatTag = HasCustomChatTag(iId, szTag, sizeof(szTag), szGroupTag, sizeof(szGroupTag)) > 0 ? true : false;
if (pId != INVALID_ADMIN_ID)
iGroupCount = GetAdminGroupCount(pId);
else
iGroupCount = 0;
if (iValue == view_as<int>(CTO_Invalid) || \
(iValue == view_as<int>(CTO_Custom) && !bHasCustomChatTag) || \
(iValue == view_as<int>(CTO_GoldMember) && !__IsGoldMember(iId)) || \
(iValue == view_as<int>(CTO_VIP) && !__IsClientVIP(iId)) || \
(iValue == view_as<int>(CTO_Admin) && (pId == INVALID_ADMIN_ID || iGroupCount < 1)))
{
if ((pId != INVALID_ADMIN_ID && iGroupCount > 0) || \
__IsClientVIP(iId) || \
__IsGoldMember(iId) || \
bHasCustomChatTag)
{
pMenu = CreateMenu(Menu_ChatTagOption);
SetMenuTitle(pMenu, "★ CHAT TAG ★ (!CTag/ !CHATTag)");
AddMenuItem(pMenu, "5", "NO, THANKS!");
if (__IsClientVIP(iId))
AddMenuItem(pMenu, "1", "VIP★");
if (__IsGoldMember(iId))
AddMenuItem(pMenu, "2", "Gold Member®");
if (strlen(szGroupTag) > 0)
AddMenuItem(pMenu, "3", szGroupTag);
if (strlen(szTag) > 0)
AddMenuItem(pMenu, "4", szTag);
DisplayMenu(pMenu, iId, MENU_TIME_FOREVER);
}
}
}
}
}
public void OnMapStart()
{
CreateTimer(60.0, Timer_Reload, _, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
CreateTimer(1.0, Timer_Reload, _, TIMER_FLAG_NO_MAPCHANGE);
}
public Action Timer_Reload(Handle pTimer, any _Data)
{
static int iId = INVALID_ENT_REFERENCE;
static char szError[PLATFORM_MAX_PATH] = "";
static char szSteam[PLATFORM_MAX_PATH] = "";
if (g_pDb == INVALID_HANDLE)
{
g_pDb = SQL_Connect("main_db", false, szError, sizeof(szError));
if (g_pDb != INVALID_HANDLE)
{
SQL_SetCharset(g_pDb, "utf8");
}
}
FormatEx(g_Buffer, sizeof(g_Buffer), "DELETE FROM sm_tags WHERE Stamp < %d;", GetTime() - (86400 * 7 * 3));
SQL_TQuery(g_pDb, Q_Empty, g_Buffer, _, DBPrio_High);
SQL_TQuery(g_pDb, Q_SelectData, "SELECT Steam, Tag, colorCode FROM sm_tags;", _, DBPrio_High);
for (iId = 1; iId <= MaxClients; iId++)
{
if (IsClientInGame(iId))
{
GetClientAuthId(iId, AuthId_Engine, szSteam, sizeof(szSteam));
hCSGO_ExtractSteamID(szSteam, szSteam, sizeof(szSteam));
FormatEx(g_Buffer, sizeof(g_Buffer), "UPDATE sm_tags SET Stamp = %d WHERE Steam = '%s' LIMIT 1;", GetTime(), szSteam);
SQL_TQuery(g_pDb, Q_Empty, g_Buffer, _, DBPrio_Low);
FormatEx(g_Buffer, sizeof(g_Buffer), "UPDATE sm_music SET Stamp = %d WHERE Steam = '%s' LIMIT 1;", GetTime(), szSteam);
SQL_TQuery(g_pDb, Q_Empty, g_Buffer, _, DBPrio_Low);
}
}
}
public void Q_Empty(Handle pOwner, Handle pChild, const char[] szError, any _Data)
{
}
public void Q_SelectData(Handle pOwner, Handle pChild, const char[] szError, any _Data)
{
static Handle pFile = INVALID_HANDLE;
static char szFile[PLATFORM_MAX_PATH] = "";
static char szSteam[PLATFORM_MAX_PATH] = "";
static char szTag[PLATFORM_MAX_PATH] = "";
static char szColor[PLATFORM_MAX_PATH] = "";
static char szLine[PLATFORM_MAX_PATH * 4] = "";
static char pTokens[MAX_NAME_LENGTH / 2][PLATFORM_MAX_PATH];
static int iTokensCount = 0;
static int iIter = 0;
static int iDoubleQuotesCount = 0;
static int iPos = 0;
ClearArray(g_pGroups);
ClearArray(g_pTags);
if (pChild != INVALID_HANDLE && (strlen(szError) < 1 || StrContains(szError, "NOT AN ERROR", false) != -1))
{
while (SQL_FetchRow(pChild))
{
SQL_FetchString(pChild, 0, szSteam, sizeof(szSteam));
SQL_FetchString(pChild, 1, szTag, sizeof(szTag));
SQL_FetchString(pChild, 2, szColor, sizeof(szColor));
if (strlen(szSteam) > 0 && strlen(szTag) > 0 && strlen(szColor) > 0)
{
PushArrayString(g_pGroups, szSteam);
StrCat(szColor, sizeof(szColor), szTag);
ReplaceColors(szColor, PLATFORM_MAX_PATH);
PushArrayString(g_pTags, szColor);
}
}
}
BuildPath(Path_SM, szFile, sizeof(szFile), "configs/chat_tag_by_admin_group.txt");
pFile = OpenFile(szFile, "r");
if (pFile != INVALID_HANDLE)
{
while (ReadFileLine(pFile, szLine, sizeof(szLine)))
{
TrimString(szLine);
if (szLine[0] != '"')
continue;
for (iIter = 0; iIter < MAX_NAME_LENGTH; iIter++)
ReplaceString(szLine, sizeof(szLine), "\t", " ");
for (iIter = 0; iIter < MAX_NAME_LENGTH; iIter++)
ReplaceString(szLine, sizeof(szLine), " ", " ");
iDoubleQuotesCount = hCSGO_CountChar(szLine, '"');
if (iDoubleQuotesCount < 4)
continue;
iPos = hCSGO_GetCharPosByOccNo(szLine, '"', 4);
if (iPos == -1)
continue;
szLine[iPos] = EOS;
for (iIter = 0; iIter < MAX_NAME_LENGTH; iIter++)
ReplaceString(szLine, sizeof(szLine), "\"", "");
iTokensCount = ExplodeString(szLine, " ", pTokens, sizeof(pTokens), PLATFORM_MAX_PATH);
if (iTokensCount < 2)
continue;
if (strlen(pTokens[0]) > 0 && strlen(pTokens[1]) > 0)
{
if (iTokensCount > 2)
{
for (iIter = 2; iIter < iTokensCount; iIter++)
{
if (strlen(pTokens[iIter]) > 0)
{
StrCat(pTokens[1], PLATFORM_MAX_PATH, " ");
StrCat(pTokens[1], PLATFORM_MAX_PATH, pTokens[iIter]);
}
}
}
if (StrContains(pTokens[0], "STEAM_", false) != -1)
hCSGO_ExtractSteamID(pTokens[0], pTokens[0], PLATFORM_MAX_PATH);
PushArrayString(g_pGroups, pTokens[0]);
ReplaceColors(pTokens[1], PLATFORM_MAX_PATH);
PushArrayString(g_pTags, pTokens[1]);
}
}
CloseHandle(pFile);
pFile = INVALID_HANDLE;
}
}
public APLRes AskPluginLoad2(Handle pSelf, bool bLate, char[] szError, int iMaxErrSize)
{
MarkNativeAsOptional("GetUserMessageType");
MarkNativeAsOptional("IsGoldMember");
MarkNativeAsOptional("IsClientVIP");
return APLRes_Success;
}
public Action OnMsg(UserMsg pMsg, Handle pData, const int[] pClients, \
int iClientsCount, bool bReliable, bool bINIT)
{
static AdminId pId = INVALID_ADMIN_ID;
static char szSenderSteam[PLATFORM_MAX_PATH] = "";
static char szSenderName[PLATFORM_MAX_PATH] = "";
static char szMsg[PLATFORM_MAX_PATH] = "";
static char szRules[PLATFORM_MAX_PATH] = "";
static char szGroup[PLATFORM_MAX_PATH] = "";
static char szToken[PLATFORM_MAX_PATH] = "";
static char szTag[PLATFORM_MAX_PATH] = "";
static char szValue[PLATFORM_MAX_PATH] = "";
static int iValue = 0;
static int iSender = INVALID_ENT_REFERENCE;
static int iId = INVALID_ENT_REFERENCE;
static int iIter = 0;
static int iTeam = CS_TEAM_NONE;
static int iPos = 0;
static Handle pPack = INVALID_HANDLE;
static bool bPB = false;
static bool bChat = false;
bPB = (CanTestFeatures() && \
GetFeatureStatus(FeatureType_Native, "GetUserMessageType") == FeatureStatus_Available && \
GetUserMessageType() == UM_Protobuf) ? true : false;
if (bPB)
iSender = PbReadInt(pData, "ent_idx");
else
iSender = BfReadByte(pData);
if (bPB)
bChat = PbReadBool(pData, "chat");
else
bChat = (BfReadByte(pData) ? true : false);
if (bPB)
PbReadString(pData, "msg_name", szRules, sizeof(szRules));
else
BfReadString(pData, szRules, sizeof(szRules));
if (bPB)
PbReadString(pData, "params", szSenderName, sizeof(szSenderName), 0);
else if (BfGetNumBytesLeft(pData))
BfReadString(pData, szSenderName, sizeof(szSenderName));
if (bPB)
PbReadString(pData, "params", szMsg, sizeof(szMsg), 1);
else if (BfGetNumBytesLeft(pData))
BfReadString(pData, szMsg, sizeof(szMsg));
if (bChat && \
iSender >= 1 && iSender <= MaxClients && \
IsClientInGame(iSender) && !IsFakeClient(iSender))
{
pId = GetUserAdmin(iSender);
iTeam = GetClientTeam(iSender);
GetClientCookie(iSender, g_pCookie, szValue, sizeof(szValue)), \
iValue = StringToInt(szValue);
if (iValue != view_as<int>(CTO_Invalid) && \
iValue != view_as<int>(CTO_None))
{
GetClientAuthId(iSender, AuthId_Engine, szSenderSteam, sizeof(szSenderSteam));
hCSGO_ExtractSteamID(szSenderSteam, szSenderSteam, sizeof(szSenderSteam));
if ((iPos = FindStringInArray(g_pGroups, szSenderSteam)) != -1 && \
iValue == view_as<int>(CTO_Custom))
{
GetArrayString(g_pTags, iPos, szTag, sizeof(szTag));
if (StrContains(szRules, "CStrike_Chat_T_Dead", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x10*DEAD*(T) %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_T", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x10(T) %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_CT_Dead", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x0B*DEAD*(CT) %s\x0B %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_CT", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x0B(CT) %s\x0B %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_AllDead", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, iTeam == CS_TEAM_CT ? "\x01 \x0B*DEAD* %s\x0B %s\x01 : %s" : "\x01 \x10*DEAD* %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_AllSpec", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x08*SPEC* %s\x08 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_All", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, iTeam == CS_TEAM_CT ? "\x01 %s\x0B %s\x01 : %s" : "\x01 %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_Spec", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x02(SPEC) %s\x02 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
}
else if ((iValue == view_as<int>(CTO_VIP) && __IsClientVIP(iSender)) || \
(iValue == view_as<int>(CTO_GoldMember) && __IsGoldMember(iSender)))
{
if (iValue == view_as<int>(CTO_VIP) && __IsClientVIP(iSender))
szTag = "\x09VIP★";
else
szTag = "\x06Gold Member®";
if (StrContains(szRules, "CStrike_Chat_T_Dead", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x10*DEAD*(T) %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_T", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x10(T) %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_CT_Dead", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x0B*DEAD*(CT) %s\x0B %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_CT", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x0B(CT) %s\x0B %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_AllDead", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, iTeam == CS_TEAM_CT ? "\x01 \x0B*DEAD* %s\x0B %s\x01 : %s" : "\x01 \x10*DEAD* %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_AllSpec", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x08*SPEC* %s\x08 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_All", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, iTeam == CS_TEAM_CT ? "\x01 %s\x0B %s\x01 : %s" : "\x01 %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_Spec", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x02(SPEC) %s\x02 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
}
else if (iValue == view_as<int>(CTO_Admin) && GetAdminGroupCount(pId) > 0)
{
GetAdminGroup(pId, 0, szGroup, sizeof(szGroup));
for (iIter = 0; iIter < GetArraySize(g_pGroups); iIter++)
{
GetArrayString(g_pGroups, iIter, szToken, sizeof(szToken));
if (strcmp(szToken, szGroup, false) == 0)
{
GetArrayString(g_pTags, iIter, szTag, sizeof(szTag));
if (StrContains(szRules, "CStrike_Chat_T_Dead", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x10*DEAD*(T) %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_T", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x10(T) %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_CT_Dead", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x0B*DEAD*(CT) %s\x0B %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_CT", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x0B(CT) %s\x0B %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_AllDead", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, iTeam == CS_TEAM_CT ? "\x01 \x0B*DEAD* %s\x0B %s\x01 : %s" : "\x01 \x10*DEAD* %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_AllSpec", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x08*SPEC* %s\x08 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_All", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, iTeam == CS_TEAM_CT ? "\x01 %s\x0B %s\x01 : %s" : "\x01 %s\x10 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
else if (StrContains(szRules, "CStrike_Chat_Spec", false) != -1)
{
for (iIter = 0; iIter < iClientsCount; iIter++)
{
iId = pClients[iIter];
if (iId >= 1 && iId <= MaxClients && \
IsClientInGame(iId) && !IsFakeClient(iId))
{
pPack = CreateDataPack();
WritePackCell(pPack, iId);
WritePackString(pPack, "\x01 \x02(SPEC) %s\x02 %s\x01 : %s");
WritePackString(pPack, szTag);
WritePackString(pPack, szSenderName);
WritePackString(pPack, szMsg);
CreateTimer(0.1, Timer_DisplayToOne, pPack);
}
}
return Plugin_Stop;
}
}
}
}
}
}
return Plugin_Continue;
}
public Action Timer_DisplayToOne(Handle pTimer, any _Data)
{
static int iId = INVALID_ENT_REFERENCE;
static char szRules[PLATFORM_MAX_PATH] = "";
static char szTag[PLATFORM_MAX_PATH] = "";
static char szName[PLATFORM_MAX_PATH] = "";
static char szMsg[PLATFORM_MAX_PATH] = "";
ResetPack(_Data);
iId = ReadPackCell(_Data);
ReadPackString(_Data, szRules, sizeof(szRules));
ReadPackString(_Data, szTag, sizeof(szTag));
ReadPackString(_Data, szName, sizeof(szName));
ReadPackString(_Data, szMsg, sizeof(szMsg));
CloseHandle(_Data);
_Data = INVALID_HANDLE;
if (IsClientInGame(iId))
PrintToChat(iId, szRules, szTag, szName, szMsg);
}