PHP Code:
#include <chat-processor>
#include <cstrike>
#pragma newdecls required
#define MAX_MESSAGE_LENGTH 250
Database g_hDatabase;
Menu g_mColorsMenu, g_mNameMenu;
char g_szSteamID[MAXPLAYERS+1][32];
public Plugin myinfo = {
name = "[CSGO] Chat/Scoreboard Tags with change colors",
author = "R3TROATTACK",
description = "",
version = "1.2",
url = ""
};
char g_sColorNames[][] = {
"Default",
"Darkred",
"Green",
"Team Color",
"Olive",
"Lime",
"Red",
"Grey",
"Yellow",
"Gold",
"Silver",
"Blue",
"Darkblue",
"Bluegrey",
"Magenta",
"Lightred"
};
char g_sColorCodes[][] = {
"\x01",
"\x02",
"\x04",
"\x03",
"\x05",
"\x06",
"\x07",
"\x08",
"\x09",
"\x10",
"\x0A",
"\x0B",
"\x0C",
"\x0D",
"\x0E",
"\x0F"
};
enum ChatData {
Chat,
Name,
String:ChatHex[16],
String:NameHex[128],
String:Tag[128]
};
int g_iPlayerInfo[MAXPLAYERS + 1][ChatData];
bool g_bLate = false;
public APLRes AskPluginLoad2(Handle myself, bool late, char[] err, int len)
{
g_bLate = late;
}
public void OnPluginStart()
{
DB_Load();
RegAdminCmd("sm_chatcolors", Command_Colors, ADMFLAG_CUSTOM6);
RegAdminCmd("sm_namecolors", Command_NameColors, ADMFLAG_CUSTOM6);
if (g_bLate)
{
for (int i = 1; i <= MaxClients; i++)
if (IsClientInGame(i))
OnClientPostAdminCheck(i);
}
}
public Action Command_Colors(int client, int args)
{
if (0 >= client > MaxClients)
return Plugin_Handled;
if (!IsClientInGame(client))
return Plugin_Handled;
g_mColorsMenu.Display(client, MENU_TIME_FOREVER);
return Plugin_Handled;
}
public Action Command_NameColors(int client, int args)
{
if (0 >= client > MaxClients)
return Plugin_Handled;
if (!IsClientInGame(client))
return Plugin_Handled;
g_mNameMenu.Display(client, MENU_TIME_FOREVER);
return Plugin_Handled;
}
public void OnClientPostAdminCheck(int client)
{
g_iPlayerInfo[client][Chat] = 0;
g_iPlayerInfo[client][Name] = 3;
CreateTimer(1.5, Timer_LoadDelay, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
GetClientAuthId(client, AuthId_Steam2, g_szSteamID[client], sizeof(g_szSteamID[]))
}
public Action Timer_LoadDelay(Handle timer, any userid)
{
int client = GetClientOfUserId(userid);
if (0 > client > MaxClients && !IsClientInGame(client))
return Plugin_Handled;
bool n = CheckCommandAccess(client, "sm_namecolors", ADMFLAG_CUSTOM6);
bool chat = CheckCommandAccess(client, "sm_chatcolors", ADMFLAG_CUSTOM6);
if (!n && !chat )
return Plugin_Handled;
char sQuery[256], steamid[64];
if (!GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid)))
return Plugin_Handled;
int count = 0;
if (n) { count++; }
if (chat) { count++; }
if (count > 1)
Format(sQuery, sizeof(sQuery), "SELECT %s%s%s FROM customchat WHERE steamid='%s';", n ? "namecolor, " : "", chat ? "chatcolor, " : "", steamid);
else
Format(sQuery, sizeof(sQuery), "SELECT %s%s%s FROM customchat WHERE steamid='%s';", n ? "namecolor" : "", chat ? "chatcolor" : "", steamid);
g_hDatabase.Query(DB_LoadColors, sQuery, userid);
return Plugin_Handled;
}
public void DB_LoadColors(Database db, DBResultSet results, const char[] error, any data)
{
if (db == null || results == null)
{
LogError("DB_LoadColors returned error: %s", error);
return;
}
int client = GetClientOfUserId(data);
if (0 > client > MaxClients && !IsClientInGame(client))
return;
if(results.RowCount <= 0)
return;
int chatcol, namecol;
bool chat = results.FieldNameToNum("chatcolor", chatcol);
bool name = results.FieldNameToNum("namecolor", namecol);
results.FetchRow();
if(chat)
g_iPlayerInfo[client][Chat] = results.FetchInt(chatcol);
if(name)
g_iPlayerInfo[client][Name] = results.FetchInt(namecol);
}
void DB_Load()
{
Database.Connect(DB_Connect, "chatcolors");
}
public void DB_Connect(Database db, const char[] error, any data)
{
if (db == null)
{
LogError("DB_Connect returned invalid Database Handle");
return;
}
g_hDatabase = db;
db.Query(DB_Generic, "CREATE TABLE customchat (steamid varchar(64) NOT NULL, chatcolor INT DEFAULT 0, namecolor INT DEFAULT 4, tag varchar(64) DEFAULT NULL, PRIMARY KEY(steamid));");
}
public void DB_UpdateColors(int client)
{
if (g_hDatabase == null)
return;
char sQuery[256], steamid[64];
if (!GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid)))
return;
Format(sQuery, sizeof(sQuery), "INSERT INTO customchat (steamid, chatcolor, namecolor, tag) VALUES ('%s', %d, %d, '%s') ON DUPLICATE KEY UPDATE chatcolor=VALUES(chatcolor), namecolor=VALUES(namecolor), tag=VALUES(tag);", steamid, g_iPlayerInfo[client][Chat], g_iPlayerInfo[client][Name], g_iPlayerInfo[client][Tag]);
g_hDatabase.Query(DB_Generic, sQuery);
}
public void DB_Generic(Database db, DBResultSet results, const char[] error, any data)
{
if (db == null || results == null)
{
LogError("DB_Generic returned error: %s", error);
return;
}
}
public void OnMapStart()
{
Menu menu = new Menu(MenuHandler_ChatColor);
menu.SetTitle("Select your chat color!");
for (int i = 0; i < sizeof(g_sColorNames); i++)
{
char info[16];
IntToString(i, info, sizeof(info));
menu.AddItem(info, g_sColorNames[i]);
}
menu.ExitButton = true;
g_mColorsMenu = menu;
Menu menu2 = new Menu(MenuHandler_NameColor);
menu2.SetTitle("Select your name color!");
for (int i = 0; i < sizeof(g_sColorNames); i++)
{
char info[16];
IntToString(i, info, sizeof(info));
menu2.AddItem(info, g_sColorNames[i]);
}
menu2.ExitButton = true;
g_mNameMenu = menu2;
}
public void OnMapEnd()
{
CloseMenu(g_mColorsMenu);
CloseMenu(g_mNameMenu);
}
stock void CloseMenu(Menu& menu)
{
if(menu != null)
{
CloseHandle(menu);
}
menu = null;
}
public int MenuHandler_ChatColor(Menu menu, MenuAction action, int client, int choice)
{
if (action != MenuAction_Select)
return;
PrintToChat(client, "\x01★ \x04[EVICT] \x01Ti-ai setat culoarea la Chat in %s%s\x01.", g_sColorCodes[choice], g_sColorNames[choice]);
g_iPlayerInfo[client][Chat] = choice;
DB_UpdateColors(client);
}
public int MenuHandler_NameColor(Menu menu, MenuAction action, int client, int choice)
{
if (action != MenuAction_Select)
return;
PrintToChat(client, "\x01★ \x04[EVICT] \x01Ti-ai setat culoarea la Nume in %s%s\x01.", g_sColorCodes[choice], g_sColorNames[choice]);
g_iPlayerInfo[client][Name] = choice;
DB_UpdateColors(client);
}
public Action OnChatMessage(int & author, Handle recipients, char[] name, char[] message)
{
bool n = CheckCommandAccess(author, "sm_namecolors", ADMFLAG_CUSTOM6);
bool chat = CheckCommandAccess(author, "sm_chatcolors", ADMFLAG_CUSTOM6);
if (!n && !chat )
return Plugin_Continue;
char ctag[32];
bool changed;
bool needspace = false;
if (chat)
{
if (g_iPlayerInfo[author][Chat] != 0)
{
Format(message, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[author][Chat]], message);
changed = true;
}
if (CheckCommandAccess(author, "sm_colors_parse", ADMFLAG_CUSTOM6))
ProcessColors(message, MAX_MESSAGE_LENGTH);
}
if (n)
{
if (g_iPlayerInfo[author][Name] != 3)
{
Format(name, MAX_NAME_LENGTH, " %s%s", g_sColorCodes[g_iPlayerInfo[author][Name]], name);
changed = true;
needspace = true;
}
}
Format(name, MAX_NAME_LENGTH, "%s%s%s", needspace ? " " : "", ctag, name);
if (changed)
return Plugin_Changed;
return Plugin_Continue;
}
void ProcessColors(char[] buffer, int maxlen)
{
for (int i = 1; i < sizeof(g_sColorNames); i++)
{
char tmp[32];
Format(tmp, sizeof(tmp), "{%s}", g_sColorNames[i]);
ReplaceString(buffer, maxlen, tmp, g_sColorCodes[i]);
}
}
public Action GiveTag(Handle timer, any userid)
{
int client = GetClientOfUserId(userid)
if(client > 0 && IsClientInGame(client))
{
char szSteamID[32]
GetClientAuthId(client, AuthId_Steam2, szSteamID, sizeof(szSteamID))
if(GetUserFlagBits(client) & ADMFLAG_ROOT)
{
CS_SetClientClanTag(client, "★ Founder ★ ")
}
else if(GetUserFlagBits(client) & ADMFLAG_UNBAN)
{
CS_SetClientClanTag(client, "★ Owner ★ ")
}
else if(GetUserFlagBits(client) & ADMFLAG_CUSTOM4)
{
CS_SetClientClanTag(client, "★ Mod+VIP ★ ")
}
else if(GetUserFlagBits(client) & ADMFLAG_CUSTOM3)
{
CS_SetClientClanTag(client, "★ Mod ★ ")
}
else if(GetUserFlagBits(client) & ADMFLAG_CUSTOM2)
{
CS_SetClientClanTag(client, "★ Admin+VIP ★ ")
}
else if(GetUserFlagBits(client) & ADMFLAG_BAN)
{
CS_SetClientClanTag(client, "★ Admin ★ ")
}
else if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)
{
CS_SetClientClanTag(client, "★ Helper+VIP ★ ")
}
else if(GetUserFlagBits(client) & ADMFLAG_GENERIC)
{
CS_SetClientClanTag(client, "★ Helper ★ ")
}
else if(GetUserFlagBits(client) & ADMFLAG_CUSTOM6)
{
CS_SetClientClanTag(client, "★ VIP ★ ")
}
if(StrEqual(szSteamID, "STEAM_1:0:1234"))
{
CS_SetClientClanTag(client, "CLAN TAG")
}
}
}
public void OnClientDisconnect(int iClient) {
g_szSteamID[iClient][0] = '\0';
}
public Action CP_OnChatMessage(int& iAuthor, ArrayList hRecipients, char[] szFlagString, char[] szName, char[] szMessage, bool& bProcessColors, bool& bRemoveColors) {
if (StrEqual(g_szSteamID[iAuthor], "STEAM_1:0:102123053")) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x10The Beast\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
return Plugin_Changed;
}
if (StrEqual(g_szSteamID[iAuthor], "STEAM_1:0:186515754")) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x0BThe Pimp\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
return Plugin_Changed;
}
if (StrEqual(g_szSteamID[iAuthor], "STEAM_1:1:448538146")) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x05Nasu Mare\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
return Plugin_Changed;
}
int iFlagBits = GetUserFlagBits(iAuthor);
if (iFlagBits & ADMFLAG_ROOT) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x04Founder\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
}
else if (iFlagBits & ADMFLAG_CUSTOM5) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x02You\x01Tuber\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
}
else if (iFlagBits & ADMFLAG_UNBAN) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x04Owner\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
}
else if (iFlagBits & ADMFLAG_CUSTOM4) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x04Mod+VIP\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
}
else if (iFlagBits & ADMFLAG_CUSTOM3) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x04Mod\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
}
else if (iFlagBits & ADMFLAG_CUSTOM2) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x04Admin+VIP\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
}
else if (iFlagBits & ADMFLAG_BAN) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x04Admin\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
}
else if (iFlagBits & ADMFLAG_CUSTOM1) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x04Helper+VIP\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
}
else if (iFlagBits & ADMFLAG_GENERIC) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x04Helper\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
}
else if (iFlagBits & ADMFLAG_CUSTOM6) {
Format(szName, MAXLENGTH_NAME, "\x01★ \x06[\x02V\x03I\x04P\x06] %s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Name]], szName);
Format(szMessage, MAX_MESSAGE_LENGTH, "%s%s", g_sColorCodes[g_iPlayerInfo[iAuthor][Chat]], szMessage);
}
return Plugin_Changed;
}