Diff
checker
文本
文本
图像
文档
Excel
文件夹
Legal
Enterprise
桌面版
定价
登录
下载 Diffchecker 桌面版
比较文本
查找两个文本文件之间的差异
工具
历史
实时编辑器
折叠未更改行
关闭换行
视图
拆分
统一
比对精度
智能
单词
字符
语法高亮
选择语法
忽略
文本转换
转到第一个差异
编辑输入
Diffchecker Desktop
运行Diffchecker最安全的方式。获取Diffchecker桌面应用:您的差异永远不会离开您的电脑!
获取桌面版
Untitled diff
创建于
9年前
差异永不过期
清除
导出
分享
解释
93 删除
行
总计
删除
字符
总计
删除
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
799 行
全部复制
81 添加
行
总计
添加
字符
总计
添加
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
799 行
全部复制
#pragma semicolon 1
#pragma semicolon 1
// ====[ INCLUDES ]============================================================
// ====[ INCLUDES ]============================================================
#include <sourcemod>
#include <sourcemod>
#include <regex>
#include <regex>
#include <ccc>
#include <ccc>
// ====[ DEFINES ]=============================================================
// ====[ DEFINES ]=============================================================
#define PLUGIN_NAME "Custom Chat Colors Menu"
#define PLUGIN_NAME "Custom Chat Colors Menu"
复制
已复制
复制
已复制
#define PLUGIN_VERSION "2.
2
"
#define PLUGIN_VERSION "2.
3
"
#define MAX_COLORS 255
#define MAX_COLORS 255
#define TAG 0
#define TAG 0
#define NAME 1
#define NAME 1
#define CHAT 2
#define CHAT 2
#define ENABLEFLAG_TAG (1 << TAG)
#define ENABLEFLAG_TAG (1 << TAG)
#define ENABLEFLAG_NAME (1 << NAME)
#define ENABLEFLAG_NAME (1 << NAME)
#define ENABLEFLAG_CHAT (1 << CHAT)
#define ENABLEFLAG_CHAT (1 << CHAT)
// ====[ HANDLES | CVARS ]=====================================================
// ====[ HANDLES | CVARS ]=====================================================
new Handle:g_hCvarEnabled, g_iCvarEnabled;
new Handle:g_hCvarEnabled, g_iCvarEnabled;
new Handle:g_hCvarHideTags, bool:g_bCvarHideTags;
new Handle:g_hCvarHideTags, bool:g_bCvarHideTags;
new Handle:g_hRegexHex;
new Handle:g_hRegexHex;
new Handle:g_hSQL;
new Handle:g_hSQL;
// ====[ VARIABLES ]===========================================================
// ====[ VARIABLES ]===========================================================
new g_iColorCount;
new g_iColorCount;
new AdminFlag:g_iColorFlagList[MAX_COLORS][16];
new AdminFlag:g_iColorFlagList[MAX_COLORS][16];
new bool:g_bColorsLoaded[MAXPLAYERS + 1];
new bool:g_bColorsLoaded[MAXPLAYERS + 1];
new bool:g_bColorAdminFlags[MAX_COLORS];
new bool:g_bColorAdminFlags[MAX_COLORS];
new bool:g_bHideTag[MAXPLAYERS + 1];
new bool:g_bHideTag[MAXPLAYERS + 1];
new bool:g_bAccessColor[MAXPLAYERS + 1][3];
new bool:g_bAccessColor[MAXPLAYERS + 1][3];
new bool:g_bAccessHideTags[MAXPLAYERS + 1];
new bool:g_bAccessHideTags[MAXPLAYERS + 1];
new String:g_strAuth[MAXPLAYERS + 1][32];
new String:g_strAuth[MAXPLAYERS + 1][32];
new String:g_strColor[MAXPLAYERS + 1][3][7];
new String:g_strColor[MAXPLAYERS + 1][3][7];
new String:g_strColorName[MAX_COLORS][255];
new String:g_strColorName[MAX_COLORS][255];
new String:g_strColorHex[MAX_COLORS][255];
new String:g_strColorHex[MAX_COLORS][255];
new String:g_strColorFlags[MAX_COLORS][255];
new String:g_strColorFlags[MAX_COLORS][255];
new String:g_strConfigFile[PLATFORM_MAX_PATH];
new String:g_strConfigFile[PLATFORM_MAX_PATH];
new String:g_strSQLDriver[16];
new String:g_strSQLDriver[16];
// ====[ PLUGIN ]==============================================================
// ====[ PLUGIN ]==============================================================
public Plugin:myinfo =
public Plugin:myinfo =
{
{
name = PLUGIN_NAME,
name = PLUGIN_NAME,
复制
已复制
复制
已复制
author = "ReFlexPoison
",
author = "ReFlexPoison
, modified/fixed by JoinedSenses
",
description = "Change Custom Chat Colors settings through easy to access menus",
description = "Change Custom Chat Colors settings through easy to access menus",
version = PLUGIN_VERSION,
version = PLUGIN_VERSION,
url = "http://www.sourcemod.net"
url = "http://www.sourcemod.net"
}
}
// ====[ EVENTS ]==============================================================
// ====[ EVENTS ]==============================================================
public OnPluginStart()
public OnPluginStart()
{
{
复制
已复制
复制
已复制
CreateConVar("sm_cccm_version", PLUGIN_VERSION, PLUGIN_NAME,
FCVAR_PLUGIN |
FCVAR_SPONLY | FCVAR_DONTRECORD | FCVAR_NOTIFY);
CreateConVar("sm_cccm_version", PLUGIN_VERSION, PLUGIN_NAME,
FCVAR_SPONLY | FCVAR_DONTRECORD | FCVAR_NOTIFY);
复制
已复制
复制
已复制
g_hCvarEnabled = CreateConVar("sm_cccm_enabled", "7", "Enable Custom Chat Colors Menu (Add up the numbers to choose)\n0 = Disabled\n1 = Tag\n2 = Name\n4 = Chat",
FCVAR_PLUGIN
, true, 0.0, true, 7.0);
g_hCvarEnabled = CreateConVar("sm_cccm_enabled", "7", "Enable Custom Chat Colors Menu (Add up the numbers to choose)\n0 = Disabled\n1 = Tag\n2 = Name\n4 = Chat",
0
, true, 0.0, true, 7.0);
g_iCvarEnabled = GetConVarInt(g_hCvarEnabled);
g_iCvarEnabled = GetConVarInt(g_hCvarEnabled);
HookConVarChange(g_hCvarEnabled, OnConVarChange);
HookConVarChange(g_hCvarEnabled, OnConVarChange);
复制
已复制
复制
已复制
g_hCvarHideTags = CreateConVar("sm_cccm_hidetags", "1", "Allow players to hide their chat tags\n0 = Disabled\n1 = Enabled",
FCVAR_PLUGIN
, true, 0.0, true, 1.0);
g_hCvarHideTags = CreateConVar("sm_cccm_hidetags", "1", "Allow players to hide their chat tags\n0 = Disabled\n1 = Enabled",
0
, true, 0.0, true, 1.0);
g_bCvarHideTags = GetConVarBool(g_hCvarHideTags);
g_bCvarHideTags = GetConVarBool(g_hCvarHideTags);
HookConVarChange(g_hCvarHideTags, OnConVarChange);
HookConVarChange(g_hCvarHideTags, OnConVarChange);
AutoExecConfig(true, "plugin.custom-chatcolors-menu");
AutoExecConfig(true, "plugin.custom-chatcolors-menu");
RegAdminCmd("sm_ccc", Command_Color, ADMFLAG_GENERIC, "Open Custom Chat Colors Menu");
RegAdminCmd("sm_ccc", Command_Color, ADMFLAG_GENERIC, "Open Custom Chat Colors Menu");
RegAdminCmd("sm_reload_cccm", Command_Reload, ADMFLAG_ROOT, "Reloads Custom Chat Colors Menu config");
RegAdminCmd("sm_reload_cccm", Command_Reload, ADMFLAG_ROOT, "Reloads Custom Chat Colors Menu config");
RegAdminCmd("sm_tagcolor", Command_TagColor, ADMFLAG_ROOT, "Change tag color to a specified hexadecimal value");
RegAdminCmd("sm_tagcolor", Command_TagColor, ADMFLAG_ROOT, "Change tag color to a specified hexadecimal value");
RegAdminCmd("sm_resettag", Command_ResetTagColor, ADMFLAG_GENERIC, "Reset tag color to default");
RegAdminCmd("sm_resettag", Command_ResetTagColor, ADMFLAG_GENERIC, "Reset tag color to default");
RegAdminCmd("sm_namecolor", Command_NameColor, ADMFLAG_ROOT, "Change name color to a specified hexadecimal value");
RegAdminCmd("sm_namecolor", Command_NameColor, ADMFLAG_ROOT, "Change name color to a specified hexadecimal value");
RegAdminCmd("sm_resetname", Command_ResetNameColor, ADMFLAG_GENERIC, "Reset name color to default");
RegAdminCmd("sm_resetname", Command_ResetNameColor, ADMFLAG_GENERIC, "Reset name color to default");
RegAdminCmd("sm_chatcolor", Command_ChatColor, ADMFLAG_ROOT, "Change chat color to a specified hexadecimal value");
RegAdminCmd("sm_chatcolor", Command_ChatColor, ADMFLAG_ROOT, "Change chat color to a specified hexadecimal value");
RegAdminCmd("sm_resetchat", Command_ResetChatColor, ADMFLAG_GENERIC, "Reset chat color to default");
RegAdminCmd("sm_resetchat", Command_ResetChatColor, ADMFLAG_GENERIC, "Reset chat color to default");
LoadTranslations("core.phrases");
LoadTranslations("core.phrases");
LoadTranslations("common.phrases");
LoadTranslations("common.phrases");
LoadTranslations("custom-chatcolors-menu.phrases");
LoadTranslations("custom-chatcolors-menu.phrases");
g_hRegexHex = CompileRegex("([A-Fa-f0-9]{6})");
g_hRegexHex = CompileRegex("([A-Fa-f0-9]{6})");
BuildPath(Path_SM, g_strConfigFile, sizeof(g_strConfigFile), "configs/custom-chatcolors-menu.cfg");
BuildPath(Path_SM, g_strConfigFile, sizeof(g_strConfigFile), "configs/custom-chatcolors-menu.cfg");
g_hSQL = INVALID_HANDLE;
g_hSQL = INVALID_HANDLE;
if(SQL_CheckConfig("cccm"))
if(SQL_CheckConfig("cccm"))
SQL_TConnect(SQLQuery_Connect, "cccm");
SQL_TConnect(SQLQuery_Connect, "cccm");
}
}
public OnConVarChange(Handle:hConvar, const String:strOldValue[], const String:strNewValue[])
public OnConVarChange(Handle:hConvar, const String:strOldValue[], const String:strNewValue[])
{
{
if(hConvar == g_hCvarEnabled)
if(hConvar == g_hCvarEnabled)
g_iCvarEnabled = GetConVarInt(g_hCvarEnabled);
g_iCvarEnabled = GetConVarInt(g_hCvarEnabled);
else if(hConvar == g_hCvarHideTags)
else if(hConvar == g_hCvarHideTags)
g_bCvarHideTags = GetConVarBool(g_hCvarHideTags);
g_bCvarHideTags = GetConVarBool(g_hCvarHideTags);
}
}
public SQL_LoadColors(iClient)
public SQL_LoadColors(iClient)
{
{
if(!IsClientAuthorized(iClient))
if(!IsClientAuthorized(iClient))
return;
return;
if(g_hSQL != INVALID_HANDLE)
if(g_hSQL != INVALID_HANDLE)
{
{
decl String:strAuth[32];
decl String:strAuth[32];
复制
已复制
复制
已复制
GetClientAuth
String
(iClient,
strAuth, sizeof(strAuth));
GetClientAuth
Id
(iClient,
AuthId_Steam2,
strAuth, sizeof(strAuth));
strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), strAuth);
strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), strAuth);
decl String:strQuery[256];
decl String:strQuery[256];
Format(strQuery, sizeof(strQuery), "SELECT hidetag, tagcolor, namecolor, chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
Format(strQuery, sizeof(strQuery), "SELECT hidetag, tagcolor, namecolor, chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
SQL_TQuery(g_hSQL, SQLQuery_LoadColors, strQuery, GetClientUserId(iClient), DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_LoadColors, strQuery, GetClientUserId(iClient), DBPrio_High);
}
}
}
}
public OnConfigsExecuted()
public OnConfigsExecuted()
{
{
Config_Load();
Config_Load();
}
}
public OnClientConnected(iClient)
public OnClientConnected(iClient)
{
{
g_bColorsLoaded[iClient] = false;
g_bColorsLoaded[iClient] = false;
g_bHideTag[iClient] = false;
g_bHideTag[iClient] = false;
g_bAccessColor[iClient][TAG] = false;
g_bAccessColor[iClient][TAG] = false;
g_bAccessColor[iClient][NAME] = false;
g_bAccessColor[iClient][NAME] = false;
g_bAccessColor[iClient][CHAT] = false;
g_bAccessColor[iClient][CHAT] = false;
g_bAccessHideTags[iClient] = false;
g_bAccessHideTags[iClient] = false;
strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), "");
strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), "");
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), "");
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), "");
strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), "");
strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), "");
strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), "");
strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), "");
}
}
public CCC_OnUserConfigLoaded(iClient)
public CCC_OnUserConfigLoaded(iClient)
{
{
if(g_bColorsLoaded[iClient])
if(g_bColorsLoaded[iClient])
return;
return;
decl String:strTag[7];
decl String:strTag[7];
IntToString(CCC_GetColor(iClient, CCC_TagColor), strTag, sizeof(strTag));
IntToString(CCC_GetColor(iClient, CCC_TagColor), strTag, sizeof(strTag));
if(IsValidHex(strTag))
if(IsValidHex(strTag))
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strTag);
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strTag);
decl String:strName[7];
decl String:strName[7];
复制
已复制
复制
已复制
IntToString(CCC_GetColor(iClient, CCC_
Tag
Color), strName, sizeof(strName));
IntToString(CCC_GetColor(iClient, CCC_
Name
Color), strName, sizeof(strName));
if(IsValidHex(strName))
if(IsValidHex(strName))
strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), strName);
strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), strName);
decl String:strChat[7];
decl String:strChat[7];
复制
已复制
复制
已复制
IntToString(CCC_GetColor(iClient, CCC_
Tag
Color), strChat, sizeof(strChat));
IntToString(CCC_GetColor(iClient, CCC_
Chat
Color), strChat, sizeof(strChat));
if(IsValidHex(strChat))
if(IsValidHex(strChat))
strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), strChat);
strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), strChat);
}
}
public OnClientAuthorized(iClient, const String:strAuth[])
public OnClientAuthorized(iClient, const String:strAuth[])
{
{
strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), strAuth);
strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), strAuth);
}
}
public OnRebuildAdminCache(AdminCachePart:iPart)
public OnRebuildAdminCache(AdminCachePart:iPart)
{
{
for(new i = 1; i <= MaxClients; i++) if(IsClientInGame(i))
for(new i = 1; i <= MaxClients; i++) if(IsClientInGame(i))
{
{
OnClientConnected(i);
OnClientConnected(i);
OnClientPostAdminCheck(i);
OnClientPostAdminCheck(i);
}
}
}
}
public OnClientPostAdminCheck(iClient)
public OnClientPostAdminCheck(iClient)
{
{
SQL_LoadColors(iClient);
SQL_LoadColors(iClient);
if(CheckCommandAccess(iClient, "sm_ccc_tag", ADMFLAG_GENERIC))
if(CheckCommandAccess(iClient, "sm_ccc_tag", ADMFLAG_GENERIC))
g_bAccessColor[iClient][TAG] = true;
g_bAccessColor[iClient][TAG] = true;
if(CheckCommandAccess(iClient, "sm_ccc_name", ADMFLAG_GENERIC))
if(CheckCommandAccess(iClient, "sm_ccc_name", ADMFLAG_GENERIC))
g_bAccessColor[iClient][NAME] = true;
g_bAccessColor[iClient][NAME] = true;
if(CheckCommandAccess(iClient, "sm_ccc_chat", ADMFLAG_GENERIC))
if(CheckCommandAccess(iClient, "sm_ccc_chat", ADMFLAG_GENERIC))
g_bAccessColor[iClient][CHAT] = true;
g_bAccessColor[iClient][CHAT] = true;
if(CheckCommandAccess(iClient, "sm_ccc_hidetags", ADMFLAG_GENERIC))
if(CheckCommandAccess(iClient, "sm_ccc_hidetags", ADMFLAG_GENERIC))
g_bAccessHideTags[iClient] = true;
g_bAccessHideTags[iClient] = true;
}
}
public Action:CCC_OnColor(iClient, const String:strMessage[], CCC_ColorType:iType)
public Action:CCC_OnColor(iClient, const String:strMessage[], CCC_ColorType:iType)
{
{
if(iType == CCC_TagColor)
if(iType == CCC_TagColor)
{
{
if(!(g_iCvarEnabled & ENABLEFLAG_TAG))
if(!(g_iCvarEnabled & ENABLEFLAG_TAG))
return Plugin_Handled;
return Plugin_Handled;
复制
已复制
复制
已复制
if(
g_bCvarHideTags &&
g_bHideTag[iClient]
&& g_bAccessHideTags[iClient])
if(
g_bHideTag[iClient]
)
return Plugin_Handled;
if(!StrEqual(g_strColor[iClient][TAG], "-1") && !IsValidHex(g_strColor[iClient][TAG]))
return Plugin_Handled;
return Plugin_Handled;
}
}
if(iType == CCC_NameColor)
if(iType == CCC_NameColor)
{
{
if(!(g_iCvarEnabled & ENABLEFLAG_NAME))
if(!(g_iCvarEnabled & ENABLEFLAG_NAME))
return Plugin_Handled;
return Plugin_Handled;
if(!IsValidHex(g_strColor[iClient][NAME]))
if(!IsValidHex(g_strColor[iClient][NAME]))
return Plugin_Handled;
return Plugin_Handled;
}
}
if(iType == CCC_ChatColor)
if(iType == CCC_ChatColor)
{
{
if(!(g_iCvarEnabled & ENABLEFLAG_CHAT))
if(!(g_iCvarEnabled & ENABLEFLAG_CHAT))
return Plugin_Handled;
return Plugin_Handled;
if(!IsValidHex(g_strColor[iClient][CHAT]))
if(!IsValidHex(g_strColor[iClient][CHAT]))
return Plugin_Handled;
return Plugin_Handled;
}
}
return Plugin_Continue;
return Plugin_Continue;
}
}
// ====[ COMMANDS ]============================================================
// ====[ COMMANDS ]============================================================
public Action:Command_Color(iClient, iArgs)
public Action:Command_Color(iClient, iArgs)
{
{
if(!IsValidClient(iClient))
if(!IsValidClient(iClient))
return Plugin_Continue;
return Plugin_Continue;
Menu_Settings(iClient);
Menu_Settings(iClient);
return Plugin_Handled;
return Plugin_Handled;
}
}
public Action:Command_Reload(iClient, iArgs)
public Action:Command_Reload(iClient, iArgs)
{
{
Config_Load();
Config_Load();
ReplyToCommand(iClient, "[SM] Configuration file %s reloaded.", g_strConfigFile);
ReplyToCommand(iClient, "[SM] Configuration file %s reloaded.", g_strConfigFile);
return Plugin_Handled;
return Plugin_Handled;
}
}
public Action:Command_TagColor(iClient, iArgs)
public Action:Command_TagColor(iClient, iArgs)
{
{
if(!IsValidClient(iClient))
if(!IsValidClient(iClient))
return Plugin_Continue;
return Plugin_Continue;
if(iArgs != 1)
if(iArgs != 1)
{
{
ReplyToCommand(iClient, "[SM] Usage: sm_tagcolor <hex>");
ReplyToCommand(iClient, "[SM] Usage: sm_tagcolor <hex>");
return Plugin_Handled;
return Plugin_Handled;
}
}
decl String:strArg[32];
decl String:strArg[32];
GetCmdArgString(strArg, sizeof(strArg));
GetCmdArgString(strArg, sizeof(strArg));
ReplaceString(strArg, sizeof(strArg), "#", "", false);
ReplaceString(strArg, sizeof(strArg), "#", "", false);
if(!IsValidHex(strArg))
if(!IsValidHex(strArg))
{
{
ReplyToCommand(iClient, "[SM] Usage: sm_tagcolor <hex>");
ReplyToCommand(iClient, "[SM] Usage: sm_tagcolor <hex>");
return Plugin_Handled;
return Plugin_Handled;
}
}
PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "TagSet", iClient, strArg, strArg);
PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "TagSet", iClient, strArg, strArg);
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strArg);
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strArg);
CCC_SetColor(iClient, CCC_TagColor, StringToInt(strArg, 16), false);
CCC_SetColor(iClient, CCC_TagColor, StringToInt(strArg, 16), false);
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
{
{
decl String:strQuery[256];
decl String:strQuery[256];
Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High);
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
public Action:Command_ResetTagColor(iClient, iArgs)
public Action:Command_ResetTagColor(iClient, iArgs)
{
{
if(!IsValidClient(iClient))
if(!IsValidClient(iClient))
return Plugin_Continue;
return Plugin_Continue;
PrintToChat(iClient, "[SM] %T", "TagReset", iClient);
PrintToChat(iClient, "[SM] %T", "TagReset", iClient);
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), "");
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), "");
CCC_ResetColor(iClient, CCC_TagColor);
CCC_ResetColor(iClient, CCC_TagColor);
复制
已复制
复制
已复制
decl String:strTag[32];
IntToString(CCC_GetColor(iClient, CCC_TagColor), strTag, sizeof(strTag));
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strTag);
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
{
{
decl String:strQuery[256];
decl String:strQuery[256];
Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High);
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
public Action:Command_NameColor(iClient, iArgs)
public Action:Command_NameColor(iClient, iArgs)
{
{
if(!IsValidClient(iClient))
if(!IsValidClient(iClient))
return Plugin_Continue;
return Plugin_Continue;
if(iArgs != 1)
if(iArgs != 1)
{
{
ReplyToCommand(iClient, "[SM] Usage: sm_namecolor <hex>");
ReplyToCommand(iClient, "[SM] Usage: sm_namecolor <hex>");
return Plugin_Handled;
return Plugin_Handled;
}
}
decl String:strArg[32];
decl String:strArg[32];
GetCmdArgString(strArg, sizeof(strArg));
GetCmdArgString(strArg, sizeof(strArg));
ReplaceString(strArg, sizeof(strArg), "#", "", false);
ReplaceString(strArg, sizeof(strArg), "#", "", false);
if(!IsValidHex(strArg))
if(!IsValidHex(strArg))
{
{
ReplyToCommand(iClient, "[SM] Usage: sm_namecolor <hex>");
ReplyToCommand(iClient, "[SM] Usage: sm_namecolor <hex>");
return Plugin_Handled;
return Plugin_Handled;
}
}
PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "NameSet", iClient, strArg, strArg);
PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "NameSet", iClient, strArg, strArg);
复制
已复制
复制
已复制
strcopy(g_strColor[iClient][
TAG
], sizeof(g_strColor[][]), strArg);
strcopy(g_strColor[iClient][
NAME
], sizeof(g_strColor[][]), strArg);
CCC_SetColor(iClient, CCC_
Tag
Color, StringToInt(strArg, 16), false);
CCC_SetColor(iClient, CCC_
Name
Color, StringToInt(strArg, 16), false);
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
{
{
decl String:strQuery[256];
decl String:strQuery[256];
Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
复制
已复制
复制
已复制
SQL_TQuery(g_hSQL, SQLQuery_
Tag
Color, strQuery, GetClientUserId(iClient), DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_
Name
Color, strQuery, GetClientUserId(iClient), DBPrio_High);
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
public Action:Command_ResetNameColor(iClient, iArgs)
public Action:Command_ResetNameColor(iClient, iArgs)
{
{
if(!IsValidClient(iClient))
if(!IsValidClient(iClient))
return Plugin_Continue;
return Plugin_Continue;
PrintToChat(iClient, "[SM] %T", "NameReset", iClient);
PrintToChat(iClient, "[SM] %T", "NameReset", iClient);
strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), "");
strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), "");
CCC_ResetColor(iClient, CCC_NameColor);
CCC_ResetColor(iClient, CCC_NameColor);
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
{
{
decl String:strQuery[256];
decl String:strQuery[256];
Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
SQL_TQuery(g_hSQL, SQLQuery_NameColor, strQuery, GetClientUserId(iClient), DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_NameColor, strQuery, GetClientUserId(iClient), DBPrio_High);
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
public Action:Command_ChatColor(iClient, iArgs)
public Action:Command_ChatColor(iClient, iArgs)
{
{
if(!IsValidClient(iClient))
if(!IsValidClient(iClient))
return Plugin_Continue;
return Plugin_Continue;
if(iArgs != 1)
if(iArgs != 1)
{
{
ReplyToCommand(iClient, "[SM] Usage: sm_chatcolor <hex>");
ReplyToCommand(iClient, "[SM] Usage: sm_chatcolor <hex>");
return Plugin_Handled;
return Plugin_Handled;
}
}
decl String:strArg[32];
decl String:strArg[32];
GetCmdArgString(strArg, sizeof(strArg));
GetCmdArgString(strArg, sizeof(strArg));
ReplaceString(strArg, sizeof(strArg), "#", "", false);
ReplaceString(strArg, sizeof(strArg), "#", "", false);
if(!IsValidHex(strArg))
if(!IsValidHex(strArg))
{
{
ReplyToCommand(iClient, "[SM] Usage: sm_chatcolor <hex>");
ReplyToCommand(iClient, "[SM] Usage: sm_chatcolor <hex>");
return Plugin_Handled;
return Plugin_Handled;
}
}
PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "ChatSet", iClient, strArg, strArg);
PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "ChatSet", iClient, strArg, strArg);
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strArg);
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strArg);
CCC_SetColor(iClient, CCC_TagColor, StringToInt(strArg, 16), false);
CCC_SetColor(iClient, CCC_TagColor, StringToInt(strArg, 16), false);
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
{
{
decl String:strQuery[256];
decl String:strQuery[256];
Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High);
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
public Action:Command_ResetChatColor(iClient, iArgs)
public Action:Command_ResetChatColor(iClient, iArgs)
{
{
if(!IsValidClient(iClient))
if(!IsValidClient(iClient))
return Plugin_Continue;
return Plugin_Continue;
PrintToChat(iClient, "[SM] %T", "ChatReset", iClient);
PrintToChat(iClient, "[SM] %T", "ChatReset", iClient);
strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), "");
strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), "");
CCC_ResetColor(iClient, CCC_ChatColor);
CCC_ResetColor(iClient, CCC_ChatColor);
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient))
{
{
decl String:strQuery[256];
decl String:strQuery[256];
Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]);
SQL_TQuery(g_hSQL, SQLQuery_ChatColor, strQuery, GetClientUserId(iClient), DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_ChatColor, strQuery, GetClientUserId(iClient), DBPrio_High);
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
// ====[ MENUS ]===============================================================
// ====[ MENUS ]===============================================================
public Menu_Settings(iClient)
public Menu_Settings(iClient)
{
{
if(IsVoteInProgress())
if(IsVoteInProgress())
return;
return;
new Handle:hMenu = CreateMenu(MenuHandler_Settings);
new Handle:hMenu = CreateMenu(MenuHandler_Settings);
SetMenuTitle(hMenu, "%T:", "Title", iClient);
SetMenuTitle(hMenu, "%T:", "Title", iClient);
decl String:strBuffer[32];
decl String:strBuffer[32];
复制
已复制
复制
已复制
Text moved with changes from lines 461-474 (95.0% similarity)
if(g_bCvarHideTags)
{
if(!g_bHideTag[iClient])
{
Format(strBuffer, sizeof(strBuffer), "%T", "HideTag", iClient);
AddMenuItem(hMenu, "HideTag", strBuffer);
}
else
{
Format(strBuffer, sizeof(strBuffer), "%T", "ShowTag", iClient);
AddMenuItem(hMenu, "HideTag", strBuffer);
}
}
Format(strBuffer, sizeof(strBuffer), "%T", "ChangeTag", iClient);
Format(strBuffer, sizeof(strBuffer), "%T", "ChangeTag", iClient);
复制
已复制
复制
已复制
if(g_iCvarEnabled & ENABLEFLAG_TAG &&
(
g_bAccessColor[iClient][TAG]
|| (g_bCvarHideTags && g_bAccessHideTags[iClient]))
)
if(g_iCvarEnabled & ENABLEFLAG_TAG &&
g_bAccessColor[iClient][TAG]
)
AddMenuItem(hMenu, "Tag", strBuffer);
AddMenuItem(hMenu, "Tag", strBuffer);
复制
已复制
复制
已复制
else
AddMenuItem(hMenu, "", strBuffer, ITEMDRAW_DISABLED);
Format(strBuffer, sizeof(strBuffer), "%T", "ChangeName", iClient);
Format(strBuffer, sizeof(strBuffer), "%T", "ChangeName", iClient);
if(g_iCvarEnabled & ENABLEFLAG_NAME && g_bAccessColor[iClient][NAME])
if(g_iCvarEnabled & ENABLEFLAG_NAME && g_bAccessColor[iClient][NAME])
AddMenuItem(hMenu, "Name", strBuffer);
AddMenuItem(hMenu, "Name", strBuffer);
复制
已复制
复制
已复制
else
AddMenuItem(hMenu, "", strBuffer, ITEMDRAW_DISABLED);
Format(strBuffer, sizeof(strBuffer), "%T", "ChangeChat", iClient);
Format(strBuffer, sizeof(strBuffer), "%T", "ChangeChat", iClient);
if(g_iCvarEnabled & ENABLEFLAG_CHAT && g_bAccessColor[iClient][CHAT])
if(g_iCvarEnabled & ENABLEFLAG_CHAT && g_bAccessColor[iClient][CHAT])
AddMenuItem(hMenu, "Chat", strBuffer);
AddMenuItem(hMenu, "Chat", strBuffer);
复制
已复制
复制
已复制
else
AddMenuItem(hMenu, "", strBuffer, ITEMDRAW_DISABLED);
DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER);
DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER);
}
}
public MenuHandler_Settings(Handle:hMenu, MenuAction:iAction, iParam1, iParam2)
public MenuHandler_Settings(Handle:hMenu, MenuAction:iAction, iParam1, iParam2)
{
{
if(iAction == MenuAction_End)
if(iAction == MenuAction_End)
{
{
CloseHandle(hMenu);
CloseHandle(hMenu);
return;
return;
}
}
if(iAction == MenuAction_Select)
if(iAction == MenuAction_Select)
{
{
decl String:strBuffer[32];
decl String:strBuffer[32];
GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer));
GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer));
复制
已复制
复制
已复制
if(StrEqual(strBuffer, "HideTag"))
{
Text moved from lines 512-515
if(g_bHideTag[iParam1])
{
g_bHideTag[iParam1] = false;
PrintToChat(iParam1, "[SM] %T", "TagEnabled", iParam1);
Menu_Settings(iParam1);
Text moved from lines 516-520
}
else
{
g_bHideTag[iParam1] = true;
PrintToChat(iParam1, "[SM] %T", "TagDisabled", iParam1);
Menu_Settings(iParam1);
}
复制
已复制
复制
已复制
Text moved from lines 523-528
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1))
{
decl String:strQuery[256];
Format(strQuery, sizeof(strQuery), "SELECT hidetag FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]);
SQL_TQuery(g_hSQL, SQLQuery_HideTag, strQuery, GetClientUserId(iParam1), DBPrio_High);
}
}
if(StrEqual(strBuffer, "Tag"))
if(StrEqual(strBuffer, "Tag"))
Menu_TagColor(iParam1);
Menu_TagColor(iParam1);
else if(StrEqual(strBuffer, "Name"))
else if(StrEqual(strBuffer, "Name"))
Menu_NameColor(iParam1);
Menu_NameColor(iParam1);
else if(StrEqual(strBuffer, "Chat"))
else if(StrEqual(strBuffer, "Chat"))
Menu_ChatColor(iParam1);
Menu_ChatColor(iParam1);
}
}
}
}
public Menu_TagColor(iClient)
public Menu_TagColor(iClient)
{
{
if(IsVoteInProgress())
if(IsVoteInProgress())
return;
return;
new Handle:hMenu = CreateMenu(MenuHandler_TagColor);
new Handle:hMenu = CreateMenu(MenuHandler_TagColor);
SetMenuTitle(hMenu, "%T:", "TagColor", iClient);
SetMenuTitle(hMenu, "%T:", "TagColor", iClient);
SetMenuExitBackButton(hMenu, true);
SetMenuExitBackButton(hMenu, true);
decl String:strBuffer[32];
decl String:strBuffer[32];
复制
已复制
复制
已复制
Text moved with changes to lines 402-415 (95.0% similarity)
if(g_bCvarHideTags && g_bAccessHideTags[iClient])
{
if(!g_bHideTag[iClient])
{
Format(strBuffer, sizeof(strBuffer), "%T", "HideTag", iClient);
AddMenuItem(hMenu, "HideTag", strBuffer);
}
else
{
Format(strBuffer, sizeof(strBuffer), "%T", "ShowTag", iClient);
AddMenuItem(hMenu, "HideTag", strBuffer);
}
}
Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient);
Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient);
AddMenuItem(hMenu, "Reset", strBuffer);
AddMenuItem(hMenu, "Reset", strBuffer);
decl String:strColorIndex[4];
decl String:strColorIndex[4];
for(new i = 0; i < g_iColorCount; i++)
for(new i = 0; i < g_iColorCount; i++)
{
{
if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i])))
if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i])))
{
{
IntToString(i, strColorIndex, sizeof(strColorIndex));
IntToString(i, strColorIndex, sizeof(strColorIndex));
AddMenuItem(hMenu, strColorIndex, g_strColorName[i]);
AddMenuItem(hMenu, strColorIndex, g_strColorName[i]);
}
}
}
}
DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER);
DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER);
}
}
public MenuHandler_TagColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2)
public MenuHandler_TagColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2)
{
{
if(iAction == MenuAction_End)
if(iAction == MenuAction_End)
{
{
复制
已复制
复制
已复制
CloseHandle(hMenu);
return;
return;
}
}
if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack)
if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack)
{
{
Menu_Settings(iParam1);
Menu_Settings(iParam1);
return;
return;
}
}
if(iAction == MenuAction_Select)
if(iAction == MenuAction_Select)
{
{
decl String:strBuffer[32];
decl String:strBuffer[32];
GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer));
GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer));
复制
已复制
复制
已复制
if(StrEqual(strBuffer, "
HideTag
"))
if(StrEqual(strBuffer, "
Reset
"))
{
{
复制
已复制
复制
已复制
Text moved to lines 445-448
if(g_bHideTag[iParam1])
PrintToChat(iParam1, "[SM] %T", "
TagReset
", iParam1);
{
strcopy(g_strColor
[iParam1]
[TAG], sizeof(g_strColor[][]), "")
;
g_bHideTag[iParam1] = false;
CCC_ResetColor
(iParam1,
CCC_TagColor);
PrintToChat(iParam1, "[SM] %T", "
TagEnabled
", iParam1);
Text moved to lines 450-454
}
else
{
g_bHideTag
[iParam1]
= true
;
PrintToChat
(iParam1,
"[SM] %T", "TagDisabled", iParam1);
}
复制
已复制
复制
已复制
Text moved to lines 458-463
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1))
decl String:
strTag[7
];
{
IntToString(CCC_GetColor(iParam1, CCC_TagColor), strTag
, sizeof(
strTag));
decl String:
strQuery[256
];
strcopy(g_strColor
[iParam1]
[TAG], sizeof(g_strColor[][]), strTag);
Format(strQuery
, sizeof(
strQuery), "SELECT hidetag FROM cccm_users WHERE auth = '%s'", g_strAuth
[iParam1]
);
SQL_TQuery(g_hSQL, SQLQuery_HideTag, strQuery, GetClientUserId(iParam1), DBPrio_High);
}
}
}
else
else
{
{
复制
已复制
复制
已复制
if(StrEqual(strBuffer, "Reset"))
new iColorIndex = StringToInt(strBuffer);
{
PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "TagSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]);
PrintToChat(iParam1, "[SM] %T", "TagReset", iParam1);
strcopy(g_strColor[iParam1][TAG], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]);
strcopy(g_strColor[iParam1][TAG], sizeof(g_strColor[][]), "");
CCC_SetColor(iParam1, CCC_TagColor, StringToInt(g_strColorHex[iColorIndex], 16), false);
CCC_ResetColor(iParam1, CCC_TagColor);
}
decl String:strTag[32];
IntToString(CCC_GetColor(iParam1, CCC_TagColor), strTag, sizeof(strTag));
strcopy(g_strColor[iParam1][TAG], sizeof(g_strColor[][]), strTag);
}
else
{
new iColorIndex = StringToInt(strBuffer);
PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "TagSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]);
strcopy(g_strColor[iParam1][TAG], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]);
CCC_SetColor(iParam1, CCC_TagColor, StringToInt(g_strColorHex[iColorIndex], 16), false);
}
复制
已复制
复制
已复制
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1))
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1))
{
{
decl String:strQuery[256];
decl String:strQuery[256];
Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]);
Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]);
SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iParam1), DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iParam1), DBPrio_High);
}
}
}
复制
已复制
复制
已复制
Menu_Settings(
iParam1
);
DisplayMenuAtItem(hMenu,
iParam1
, GetMenuSelectionPosition(), MENU_TIME_FOREVER
);
}
}
}
}
public Menu_NameColor(iClient)
public Menu_NameColor(iClient)
{
{
if(IsVoteInProgress())
if(IsVoteInProgress())
return;
return;
new Handle:hMenu = CreateMenu(MenuHandler_NameColor);
new Handle:hMenu = CreateMenu(MenuHandler_NameColor);
SetMenuTitle(hMenu, "%T:", "NameColor", iClient);
SetMenuTitle(hMenu, "%T:", "NameColor", iClient);
SetMenuExitBackButton(hMenu, true);
SetMenuExitBackButton(hMenu, true);
decl String:strBuffer[32];
decl String:strBuffer[32];
Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient);
Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient);
AddMenuItem(hMenu, "Reset", strBuffer);
AddMenuItem(hMenu, "Reset", strBuffer);
decl String:strColorIndex[4];
decl String:strColorIndex[4];
for(new i = 0; i < g_iColorCount; i++)
for(new i = 0; i < g_iColorCount; i++)
{
{
if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i])))
if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i])))
{
{
IntToString(i, strColorIndex, sizeof(strColorIndex));
IntToString(i, strColorIndex, sizeof(strColorIndex));
AddMenuItem(hMenu, strColorIndex, g_strColorName[i]);
AddMenuItem(hMenu, strColorIndex, g_strColorName[i]);
}
}
}
}
DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER);
DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER);
}
}
public MenuHandler_NameColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2)
public MenuHandler_NameColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2)
{
{
if(iAction == MenuAction_End)
if(iAction == MenuAction_End)
{
{
复制
已复制
复制
已复制
CloseHandle(hMenu);
return;
return;
}
}
if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack)
if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack)
{
{
Menu_Settings(iParam1);
Menu_Settings(iParam1);
return;
return;
}
}
if(iAction == MenuAction_Select)
if(iAction == MenuAction_Select)
{
{
decl String:strBuffer[32];
decl String:strBuffer[32];
GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer));
GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer));
if(StrEqual(strBuffer, "Reset"))
if(StrEqual(strBuffer, "Reset"))
{
{
PrintToChat(iParam1, "[SM] %T", "NameReset", iParam1);
PrintToChat(iParam1, "[SM] %T", "NameReset", iParam1);
strcopy(g_strColor[iParam1][NAME], sizeof(g_strColor[][]), "");
strcopy(g_strColor[iParam1][NAME], sizeof(g_strColor[][]), "");
CCC_ResetColor(iParam1, CCC_NameColor);
CCC_ResetColor(iParam1, CCC_NameColor);
}
}
else
else
{
{
new iColorIndex = StringToInt(strBuffer);
new iColorIndex = StringToInt(strBuffer);
PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "NameSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]);
PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "NameSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]);
strcopy(g_strColor[iParam1][NAME], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]);
strcopy(g_strColor[iParam1][NAME], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]);
CCC_SetColor(iParam1, CCC_NameColor, StringToInt(g_strColorHex[iColorIndex], 16), false);
CCC_SetColor(iParam1, CCC_NameColor, StringToInt(g_strColorHex[iColorIndex], 16), false);
}
}
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1))
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1))
{
{
decl String:strQuery[256];
decl String:strQuery[256];
Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]);
Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]);
SQL_TQuery(g_hSQL, SQLQuery_NameColor, strQuery, GetClientUserId(iParam1), DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_NameColor, strQuery, GetClientUserId(iParam1), DBPrio_High);
}
}
复制
已复制
复制
已复制
Menu_Settings(
iParam1
);
DisplayMenuAtItem(hMenu,
iParam1
, GetMenuSelectionPosition(), MENU_TIME_FOREVER
);
}
}
}
}
public Menu_ChatColor(iClient)
public Menu_ChatColor(iClient)
{
{
if(IsVoteInProgress())
if(IsVoteInProgress())
return;
return;
new Handle:hMenu = CreateMenu(MenuHandler_ChatColor);
new Handle:hMenu = CreateMenu(MenuHandler_ChatColor);
SetMenuTitle(hMenu, "%T:", "ChatColor", iClient);
SetMenuTitle(hMenu, "%T:", "ChatColor", iClient);
SetMenuExitBackButton(hMenu, true);
SetMenuExitBackButton(hMenu, true);
decl String:strBuffer[32];
decl String:strBuffer[32];
Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient);
Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient);
AddMenuItem(hMenu, "Reset", strBuffer);
AddMenuItem(hMenu, "Reset", strBuffer);
decl String:strColorIndex[4];
decl String:strColorIndex[4];
for(new i = 0; i < g_iColorCount; i++)
for(new i = 0; i < g_iColorCount; i++)
{
{
if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i])))
if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i])))
{
{
IntToString(i, strColorIndex, sizeof(strColorIndex));
IntToString(i, strColorIndex, sizeof(strColorIndex));
AddMenuItem(hMenu, strColorIndex, g_strColorName[i]);
AddMenuItem(hMenu, strColorIndex, g_strColorName[i]);
}
}
}
}
DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER);
DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER);
}
}
public MenuHandler_ChatColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2)
public MenuHandler_ChatColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2)
{
{
if(iAction == MenuAction_End)
if(iAction == MenuAction_End)
{
{
复制
已复制
复制
已复制
CloseHandle(hMenu);
return;
return;
}
}
if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack)
if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack)
{
{
Menu_Settings(iParam1);
Menu_Settings(iParam1);
return;
return;
}
}
if(iAction == MenuAction_Select)
if(iAction == MenuAction_Select)
{
{
decl String:strBuffer[32];
decl String:strBuffer[32];
GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer));
GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer));
if(StrEqual(strBuffer, "Reset"))
if(StrEqual(strBuffer, "Reset"))
{
{
PrintToChat(iParam1, "[SM] %T", "ChatReset", iParam1);
PrintToChat(iParam1, "[SM] %T", "ChatReset", iParam1);
strcopy(g_strColor[iParam1][CHAT], sizeof(g_strColor[][]), "");
strcopy(g_strColor[iParam1][CHAT], sizeof(g_strColor[][]), "");
CCC_ResetColor(iParam1, CCC_ChatColor);
CCC_ResetColor(iParam1, CCC_ChatColor);
}
}
else
else
{
{
new iColorIndex = StringToInt(strBuffer);
new iColorIndex = StringToInt(strBuffer);
PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "ChatSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]);
PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "ChatSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]);
strcopy(g_strColor[iParam1][CHAT], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]);
strcopy(g_strColor[iParam1][CHAT], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]);
CCC_SetColor(iParam1, CCC_ChatColor, StringToInt(g_strColorHex[iColorIndex], 16), false);
CCC_SetColor(iParam1, CCC_ChatColor, StringToInt(g_strColorHex[iColorIndex], 16), false);
}
}
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1))
if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1))
{
{
decl String:strQuery[256];
decl String:strQuery[256];
Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]);
Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]);
SQL_TQuery(g_hSQL, SQLQuery_ChatColor, strQuery, GetClientUserId(iParam1), DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_ChatColor, strQuery, GetClientUserId(iParam1), DBPrio_High);
}
}
复制
已复制
复制
已复制
Menu_Settings(
iParam1
);
DisplayMenuAtItem(hMenu,
iParam1
, GetMenuSelectionPosition(), MENU_TIME_FOREVER
);
}
}
}
}
// ====[ CONFIGURATION ]=======================================================
// ====[ CONFIGURATION ]=======================================================
public Config_Load()
public Config_Load()
{
{
if(!FileExists(g_strConfigFile))
if(!FileExists(g_strConfigFile))
{
{
SetFailState("Configuration file %s not found!", g_strConfigFile);
SetFailState("Configuration file %s not found!", g_strConfigFile);
return;
return;
}
}
new Handle:hKeyValues = CreateKeyValues("CCC Menu Colors");
new Handle:hKeyValues = CreateKeyValues("CCC Menu Colors");
if(!FileToKeyValues(hKeyValues, g_strConfigFile))
if(!FileToKeyValues(hKeyValues, g_strConfigFile))
{
{
SetFailState("Improper structure for configuration file %s!", g_strConfigFile);
SetFailState("Improper structure for configuration file %s!", g_strConfigFile);
return;
return;
}
}
if(!KvGotoFirstSubKey(hKeyValues))
if(!KvGotoFirstSubKey(hKeyValues))
{
{
SetFailState("Can't find configuration file %s!", g_strConfigFile);
SetFailState("Can't find configuration file %s!", g_strConfigFile);
return;
return;
}
}
for(new i = 0; i < MAX_COLORS; i++)
for(new i = 0; i < MAX_COLORS; i++)
{
{
strcopy(g_strColorName[i], sizeof(g_strColorName[]), "");
strcopy(g_strColorName[i], sizeof(g_strColorName[]), "");
strcopy(g_strColorHex[i], sizeof(g_strColorHex[]), "");
strcopy(g_strColorHex[i], sizeof(g_strColorHex[]), "");
strcopy(g_strColorFlags[i], sizeof(g_strColorFlags[]), "");
strcopy(g_strColorFlags[i], sizeof(g_strColorFlags[]), "");
g_bColorAdminFlags[i] = false;
g_bColorAdminFlags[i] = false;
for(new i2 = 0; i2 < 16; i2++)
for(new i2 = 0; i2 < 16; i2++)
g_iColorFlagList[i][i2] = AdminFlag:-1;
g_iColorFlagList[i][i2] = AdminFlag:-1;
}
}
g_iColorCount = 0;
g_iColorCount = 0;
do
do
{
{
KvGetString(hKeyValues, "name", g_strColorName[g_iColorCount], sizeof(g_strColorName[]));
KvGetString(hKeyValues, "name", g_strColorName[g_iColorCount], sizeof(g_strColorName[]));
KvGetString(hKeyValues, "hex", g_strColorHex[g_iColorCount], sizeof(g_strColorHex[]));
KvGetString(hKeyValues, "hex", g_strColorHex[g_iColorCount], sizeof(g_strColorHex[]));
ReplaceString(g_strColorHex[g_iColorCount], sizeof(g_strColorHex[]), "#", "", false);
ReplaceString(g_strColorHex[g_iColorCount], sizeof(g_strColorHex[]), "#", "", false);
KvGetString(hKeyValues, "flags", g_strColorFlags[g_iColorCount], sizeof(g_strColorFlags[]));
KvGetString(hKeyValues, "flags", g_strColorFlags[g_iColorCount], sizeof(g_strColorFlags[]));
if(!IsValidHex(g_strColorHex[g_iColorCount]))
if(!IsValidHex(g_strColorHex[g_iColorCount]))
{
{
LogError("Invalid hexadecimal value for color %s.", g_strColorName[g_iColorCount]);
LogError("Invalid hexadecimal value for color %s.", g_strColorName[g_iColorCount]);
strcopy(g_strColorName[g_iColorCount], sizeof(g_strColorName[]), "");
strcopy(g_strColorName[g_iColorCount], sizeof(g_strColorName[]), "");
strcopy(g_strColorHex[g_iColorCount], sizeof(g_strColorHex[]), "");
strcopy(g_strColorHex[g_iColorCount], sizeof(g_strColorHex[]), "");
strcopy(g_strColorFlags[g_iColorCount], sizeof(g_strColorFlags[]), "");
strcopy(g_strColorFlags[g_iColorCount], sizeof(g_strColorFlags[]), "");
}
}
if(!StrEqual(g_strColorFlags[g_iColorCount], ""))
if(!StrEqual(g_strColorFlags[g_iColorCount], ""))
{
{
g_bColorAdminFlags[g_iColorCount] = true;
g_bColorAdminFlags[g_iColorCount] = true;
FlagBitsToArray(ReadFlagString(g_strColorFlags[g_iColorCount]), g_iColorFlagList[g_iColorCount], sizeof(g_iColorFlagList[]));
FlagBitsToArray(ReadFlagString(g_strColorFlags[g_iColorCount]), g_iColorFlagList[g_iColorCount], sizeof(g_iColorFlagList[]));
}
}
g_iColorCount++;
g_iColorCount++;
}
}
while(KvGotoNextKey(hKeyValues));
while(KvGotoNextKey(hKeyValues));
CloseHandle(hKeyValues);
CloseHandle(hKeyValues);
LogMessage("Loaded %i colors from configuration file %s.", g_iColorCount, g_strConfigFile);
LogMessage("Loaded %i colors from configuration file %s.", g_iColorCount, g_strConfigFile);
}
}
// ====[ SQL QUERIES ]=========================================================
// ====[ SQL QUERIES ]=========================================================
public SQLQuery_Connect(Handle:hOwner, Handle:hQuery, const String:strError[], any:iData)
public SQLQuery_Connect(Handle:hOwner, Handle:hQuery, const String:strError[], any:iData)
{
{
if(hQuery == INVALID_HANDLE)
if(hQuery == INVALID_HANDLE)
return;
return;
g_hSQL = hQuery;
g_hSQL = hQuery;
SQL_GetDriverIdent(hOwner, g_strSQLDriver, sizeof(g_strSQLDriver));
SQL_GetDriverIdent(hOwner, g_strSQLDriver, sizeof(g_strSQLDriver));
if(StrEqual(g_strSQLDriver, "mysql", false))
if(StrEqual(g_strSQLDriver, "mysql", false))
{
{
LogMessage("MySQL server configured. Variable saving enabled.");
LogMessage("MySQL server configured. Variable saving enabled.");
SQL_TQuery(g_hSQL, SQLQuery_Update, "CREATE TABLE IF NOT EXISTS cccm_users (id INT(64) NOT NULL AUTO_INCREMENT, auth varchar(32) UNIQUE, hidetag varchar(1), tagcolor varchar(7), namecolor varchar(7), chatcolor varchar(7), PRIMARY KEY (id))", _, DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_Update, "CREATE TABLE IF NOT EXISTS cccm_users (id INT(64) NOT NULL AUTO_INCREMENT, auth varchar(32) UNIQUE, hidetag varchar(1), tagcolor varchar(7), namecolor varchar(7), chatcolor varchar(7), PRIMARY KEY (id))", _, DBPrio_High);
}
}
else if(StrEqual(g_strSQLDriver, "sqlite", false))
else if(StrEqual(g_strSQLDriver, "sqlite", false))
{
{
LogMessage("SQlite server configured. Variable saving enabled.");
LogMessage("SQlite server configured. Variable saving enabled.");
SQL_TQuery(g_hSQL, SQLQuery_Update, "CREATE TABLE IF NOT EXISTS cccm_users (id INTERGER PRIMARY KEY, auth varchar(32) UNIQUE, hidetag varchar(1), tagcolor varchar(7), namecolor varchar(7), chatcolor varchar(7))", _, DBPrio_High);
SQL_TQuery(g_hSQL, SQLQuery_Update, "CREATE TABLE IF NOT EXISTS cccm_users (id INTERGER PRIMARY KEY, auth varchar(32) UNIQUE, hidetag varchar(1), tagcolor varchar(7), namecolor varchar(7), chatcolor varchar(7))", _, DBPrio_High);
}
}
else
else
{
{
LogMessage("Saved variable server not configured. Variable saving disabled.");
LogMessage("Saved variable server not configured. Variable saving disabled.");
return;
return;
}
}
for(new i = 1; i <= MaxClients; ++i) if(IsClientInGame(i))
for(new i = 1; i <= MaxClients; ++i) if(IsClientInGame(i))
SQL_LoadColors(i);
SQL_LoadColors(i);
}
}
public SQLQuery_LoadColors(Handle:hOwner, Handle:hQuery, const String:strError[], any:iData)
public SQLQuery_LoadColors(Handle:hOwner, Handle:hQuery, const String:strError[], any:iData)
{
{
new iClient = GetClientOfUserId(iData);
new iClient = GetClientOfUserId(iData);
if(!IsValidClient(iClient))
if(!IsValidClient(iClient))
return;
return;
if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE)
if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE)
复制
已复制
复制
已复制
{
LogError("SQL Error: %s", strError);
return;
}
if(SQL_FetchRow(hQuery) && SQL_GetRowCount(hQuery) != 0)
{
g_bHideTag[iClient] = bool:SQL_FetchInt(hQuery, 0);
decl String:strTag[7];
SQL_FetchString(hQuery, 1, strTag, sizeof(strTag));
if(IsValidHex(strTag))
{
strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strTag);
CCC_SetColor(iClient, CCC_TagColor, StringToInt(g_strColor[iClient][TAG], 16), false);
}
else if(StrEqual(
已保存差异
原始文本
打开文件
#pragma semicolon 1 // ====[ INCLUDES ]============================================================ #include <sourcemod> #include <regex> #include <ccc> // ====[ DEFINES ]============================================================= #define PLUGIN_NAME "Custom Chat Colors Menu" #define PLUGIN_VERSION "2.2" #define MAX_COLORS 255 #define TAG 0 #define NAME 1 #define CHAT 2 #define ENABLEFLAG_TAG (1 << TAG) #define ENABLEFLAG_NAME (1 << NAME) #define ENABLEFLAG_CHAT (1 << CHAT) // ====[ HANDLES | CVARS ]===================================================== new Handle:g_hCvarEnabled, g_iCvarEnabled; new Handle:g_hCvarHideTags, bool:g_bCvarHideTags; new Handle:g_hRegexHex; new Handle:g_hSQL; // ====[ VARIABLES ]=========================================================== new g_iColorCount; new AdminFlag:g_iColorFlagList[MAX_COLORS][16]; new bool:g_bColorsLoaded[MAXPLAYERS + 1]; new bool:g_bColorAdminFlags[MAX_COLORS]; new bool:g_bHideTag[MAXPLAYERS + 1]; new bool:g_bAccessColor[MAXPLAYERS + 1][3]; new bool:g_bAccessHideTags[MAXPLAYERS + 1]; new String:g_strAuth[MAXPLAYERS + 1][32]; new String:g_strColor[MAXPLAYERS + 1][3][7]; new String:g_strColorName[MAX_COLORS][255]; new String:g_strColorHex[MAX_COLORS][255]; new String:g_strColorFlags[MAX_COLORS][255]; new String:g_strConfigFile[PLATFORM_MAX_PATH]; new String:g_strSQLDriver[16]; // ====[ PLUGIN ]============================================================== public Plugin:myinfo = { name = PLUGIN_NAME, author = "ReFlexPoison", description = "Change Custom Chat Colors settings through easy to access menus", version = PLUGIN_VERSION, url = "http://www.sourcemod.net" } // ====[ EVENTS ]============================================================== public OnPluginStart() { CreateConVar("sm_cccm_version", PLUGIN_VERSION, PLUGIN_NAME, FCVAR_PLUGIN | FCVAR_SPONLY | FCVAR_DONTRECORD | FCVAR_NOTIFY); g_hCvarEnabled = CreateConVar("sm_cccm_enabled", "7", "Enable Custom Chat Colors Menu (Add up the numbers to choose)\n0 = Disabled\n1 = Tag\n2 = Name\n4 = Chat", FCVAR_PLUGIN, true, 0.0, true, 7.0); g_iCvarEnabled = GetConVarInt(g_hCvarEnabled); HookConVarChange(g_hCvarEnabled, OnConVarChange); g_hCvarHideTags = CreateConVar("sm_cccm_hidetags", "1", "Allow players to hide their chat tags\n0 = Disabled\n1 = Enabled", FCVAR_PLUGIN, true, 0.0, true, 1.0); g_bCvarHideTags = GetConVarBool(g_hCvarHideTags); HookConVarChange(g_hCvarHideTags, OnConVarChange); AutoExecConfig(true, "plugin.custom-chatcolors-menu"); RegAdminCmd("sm_ccc", Command_Color, ADMFLAG_GENERIC, "Open Custom Chat Colors Menu"); RegAdminCmd("sm_reload_cccm", Command_Reload, ADMFLAG_ROOT, "Reloads Custom Chat Colors Menu config"); RegAdminCmd("sm_tagcolor", Command_TagColor, ADMFLAG_ROOT, "Change tag color to a specified hexadecimal value"); RegAdminCmd("sm_resettag", Command_ResetTagColor, ADMFLAG_GENERIC, "Reset tag color to default"); RegAdminCmd("sm_namecolor", Command_NameColor, ADMFLAG_ROOT, "Change name color to a specified hexadecimal value"); RegAdminCmd("sm_resetname", Command_ResetNameColor, ADMFLAG_GENERIC, "Reset name color to default"); RegAdminCmd("sm_chatcolor", Command_ChatColor, ADMFLAG_ROOT, "Change chat color to a specified hexadecimal value"); RegAdminCmd("sm_resetchat", Command_ResetChatColor, ADMFLAG_GENERIC, "Reset chat color to default"); LoadTranslations("core.phrases"); LoadTranslations("common.phrases"); LoadTranslations("custom-chatcolors-menu.phrases"); g_hRegexHex = CompileRegex("([A-Fa-f0-9]{6})"); BuildPath(Path_SM, g_strConfigFile, sizeof(g_strConfigFile), "configs/custom-chatcolors-menu.cfg"); g_hSQL = INVALID_HANDLE; if(SQL_CheckConfig("cccm")) SQL_TConnect(SQLQuery_Connect, "cccm"); } public OnConVarChange(Handle:hConvar, const String:strOldValue[], const String:strNewValue[]) { if(hConvar == g_hCvarEnabled) g_iCvarEnabled = GetConVarInt(g_hCvarEnabled); else if(hConvar == g_hCvarHideTags) g_bCvarHideTags = GetConVarBool(g_hCvarHideTags); } public SQL_LoadColors(iClient) { if(!IsClientAuthorized(iClient)) return; if(g_hSQL != INVALID_HANDLE) { decl String:strAuth[32]; GetClientAuthString(iClient, strAuth, sizeof(strAuth)); strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), strAuth); decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT hidetag, tagcolor, namecolor, chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_LoadColors, strQuery, GetClientUserId(iClient), DBPrio_High); } } public OnConfigsExecuted() { Config_Load(); } public OnClientConnected(iClient) { g_bColorsLoaded[iClient] = false; g_bHideTag[iClient] = false; g_bAccessColor[iClient][TAG] = false; g_bAccessColor[iClient][NAME] = false; g_bAccessColor[iClient][CHAT] = false; g_bAccessHideTags[iClient] = false; strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), ""); strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), ""); strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), ""); strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), ""); } public CCC_OnUserConfigLoaded(iClient) { if(g_bColorsLoaded[iClient]) return; decl String:strTag[7]; IntToString(CCC_GetColor(iClient, CCC_TagColor), strTag, sizeof(strTag)); if(IsValidHex(strTag)) strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strTag); decl String:strName[7]; IntToString(CCC_GetColor(iClient, CCC_TagColor), strName, sizeof(strName)); if(IsValidHex(strName)) strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), strName); decl String:strChat[7]; IntToString(CCC_GetColor(iClient, CCC_TagColor), strChat, sizeof(strChat)); if(IsValidHex(strChat)) strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), strChat); } public OnClientAuthorized(iClient, const String:strAuth[]) { strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), strAuth); } public OnRebuildAdminCache(AdminCachePart:iPart) { for(new i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) { OnClientConnected(i); OnClientPostAdminCheck(i); } } public OnClientPostAdminCheck(iClient) { SQL_LoadColors(iClient); if(CheckCommandAccess(iClient, "sm_ccc_tag", ADMFLAG_GENERIC)) g_bAccessColor[iClient][TAG] = true; if(CheckCommandAccess(iClient, "sm_ccc_name", ADMFLAG_GENERIC)) g_bAccessColor[iClient][NAME] = true; if(CheckCommandAccess(iClient, "sm_ccc_chat", ADMFLAG_GENERIC)) g_bAccessColor[iClient][CHAT] = true; if(CheckCommandAccess(iClient, "sm_ccc_hidetags", ADMFLAG_GENERIC)) g_bAccessHideTags[iClient] = true; } public Action:CCC_OnColor(iClient, const String:strMessage[], CCC_ColorType:iType) { if(iType == CCC_TagColor) { if(!(g_iCvarEnabled & ENABLEFLAG_TAG)) return Plugin_Handled; if(g_bCvarHideTags && g_bHideTag[iClient] && g_bAccessHideTags[iClient]) return Plugin_Handled; if(!StrEqual(g_strColor[iClient][TAG], "-1") && !IsValidHex(g_strColor[iClient][TAG])) return Plugin_Handled; } if(iType == CCC_NameColor) { if(!(g_iCvarEnabled & ENABLEFLAG_NAME)) return Plugin_Handled; if(!IsValidHex(g_strColor[iClient][NAME])) return Plugin_Handled; } if(iType == CCC_ChatColor) { if(!(g_iCvarEnabled & ENABLEFLAG_CHAT)) return Plugin_Handled; if(!IsValidHex(g_strColor[iClient][CHAT])) return Plugin_Handled; } return Plugin_Continue; } // ====[ COMMANDS ]============================================================ public Action:Command_Color(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; Menu_Settings(iClient); return Plugin_Handled; } public Action:Command_Reload(iClient, iArgs) { Config_Load(); ReplyToCommand(iClient, "[SM] Configuration file %s reloaded.", g_strConfigFile); return Plugin_Handled; } public Action:Command_TagColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; if(iArgs != 1) { ReplyToCommand(iClient, "[SM] Usage: sm_tagcolor <hex>"); return Plugin_Handled; } decl String:strArg[32]; GetCmdArgString(strArg, sizeof(strArg)); ReplaceString(strArg, sizeof(strArg), "#", "", false); if(!IsValidHex(strArg)) { ReplyToCommand(iClient, "[SM] Usage: sm_tagcolor <hex>"); return Plugin_Handled; } PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "TagSet", iClient, strArg, strArg); strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strArg); CCC_SetColor(iClient, CCC_TagColor, StringToInt(strArg, 16), false); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } public Action:Command_ResetTagColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; PrintToChat(iClient, "[SM] %T", "TagReset", iClient); strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), ""); CCC_ResetColor(iClient, CCC_TagColor); decl String:strTag[32]; IntToString(CCC_GetColor(iClient, CCC_TagColor), strTag, sizeof(strTag)); strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strTag); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } public Action:Command_NameColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; if(iArgs != 1) { ReplyToCommand(iClient, "[SM] Usage: sm_namecolor <hex>"); return Plugin_Handled; } decl String:strArg[32]; GetCmdArgString(strArg, sizeof(strArg)); ReplaceString(strArg, sizeof(strArg), "#", "", false); if(!IsValidHex(strArg)) { ReplyToCommand(iClient, "[SM] Usage: sm_namecolor <hex>"); return Plugin_Handled; } PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "NameSet", iClient, strArg, strArg); strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strArg); CCC_SetColor(iClient, CCC_TagColor, StringToInt(strArg, 16), false); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } public Action:Command_ResetNameColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; PrintToChat(iClient, "[SM] %T", "NameReset", iClient); strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), ""); CCC_ResetColor(iClient, CCC_NameColor); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_NameColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } public Action:Command_ChatColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; if(iArgs != 1) { ReplyToCommand(iClient, "[SM] Usage: sm_chatcolor <hex>"); return Plugin_Handled; } decl String:strArg[32]; GetCmdArgString(strArg, sizeof(strArg)); ReplaceString(strArg, sizeof(strArg), "#", "", false); if(!IsValidHex(strArg)) { ReplyToCommand(iClient, "[SM] Usage: sm_chatcolor <hex>"); return Plugin_Handled; } PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "ChatSet", iClient, strArg, strArg); strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strArg); CCC_SetColor(iClient, CCC_TagColor, StringToInt(strArg, 16), false); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } public Action:Command_ResetChatColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; PrintToChat(iClient, "[SM] %T", "ChatReset", iClient); strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), ""); CCC_ResetColor(iClient, CCC_ChatColor); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_ChatColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } // ====[ MENUS ]=============================================================== public Menu_Settings(iClient) { if(IsVoteInProgress()) return; new Handle:hMenu = CreateMenu(MenuHandler_Settings); SetMenuTitle(hMenu, "%T:", "Title", iClient); decl String:strBuffer[32]; Format(strBuffer, sizeof(strBuffer), "%T", "ChangeTag", iClient); if(g_iCvarEnabled & ENABLEFLAG_TAG && (g_bAccessColor[iClient][TAG] || (g_bCvarHideTags && g_bAccessHideTags[iClient]))) AddMenuItem(hMenu, "Tag", strBuffer); else AddMenuItem(hMenu, "", strBuffer, ITEMDRAW_DISABLED); Format(strBuffer, sizeof(strBuffer), "%T", "ChangeName", iClient); if(g_iCvarEnabled & ENABLEFLAG_NAME && g_bAccessColor[iClient][NAME]) AddMenuItem(hMenu, "Name", strBuffer); else AddMenuItem(hMenu, "", strBuffer, ITEMDRAW_DISABLED); Format(strBuffer, sizeof(strBuffer), "%T", "ChangeChat", iClient); if(g_iCvarEnabled & ENABLEFLAG_CHAT && g_bAccessColor[iClient][CHAT]) AddMenuItem(hMenu, "Chat", strBuffer); else AddMenuItem(hMenu, "", strBuffer, ITEMDRAW_DISABLED); DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER); } public MenuHandler_Settings(Handle:hMenu, MenuAction:iAction, iParam1, iParam2) { if(iAction == MenuAction_End) { CloseHandle(hMenu); return; } if(iAction == MenuAction_Select) { decl String:strBuffer[32]; GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer)); if(StrEqual(strBuffer, "Tag")) Menu_TagColor(iParam1); else if(StrEqual(strBuffer, "Name")) Menu_NameColor(iParam1); else if(StrEqual(strBuffer, "Chat")) Menu_ChatColor(iParam1); } } public Menu_TagColor(iClient) { if(IsVoteInProgress()) return; new Handle:hMenu = CreateMenu(MenuHandler_TagColor); SetMenuTitle(hMenu, "%T:", "TagColor", iClient); SetMenuExitBackButton(hMenu, true); decl String:strBuffer[32]; if(g_bCvarHideTags && g_bAccessHideTags[iClient]) { if(!g_bHideTag[iClient]) { Format(strBuffer, sizeof(strBuffer), "%T", "HideTag", iClient); AddMenuItem(hMenu, "HideTag", strBuffer); } else { Format(strBuffer, sizeof(strBuffer), "%T", "ShowTag", iClient); AddMenuItem(hMenu, "HideTag", strBuffer); } } Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient); AddMenuItem(hMenu, "Reset", strBuffer); decl String:strColorIndex[4]; for(new i = 0; i < g_iColorCount; i++) { if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i]))) { IntToString(i, strColorIndex, sizeof(strColorIndex)); AddMenuItem(hMenu, strColorIndex, g_strColorName[i]); } } DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER); } public MenuHandler_TagColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2) { if(iAction == MenuAction_End) { CloseHandle(hMenu); return; } if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack) { Menu_Settings(iParam1); return; } if(iAction == MenuAction_Select) { decl String:strBuffer[32]; GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer)); if(StrEqual(strBuffer, "HideTag")) { if(g_bHideTag[iParam1]) { g_bHideTag[iParam1] = false; PrintToChat(iParam1, "[SM] %T", "TagEnabled", iParam1); } else { g_bHideTag[iParam1] = true; PrintToChat(iParam1, "[SM] %T", "TagDisabled", iParam1); } if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT hidetag FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]); SQL_TQuery(g_hSQL, SQLQuery_HideTag, strQuery, GetClientUserId(iParam1), DBPrio_High); } } else { if(StrEqual(strBuffer, "Reset")) { PrintToChat(iParam1, "[SM] %T", "TagReset", iParam1); strcopy(g_strColor[iParam1][TAG], sizeof(g_strColor[][]), ""); CCC_ResetColor(iParam1, CCC_TagColor); decl String:strTag[32]; IntToString(CCC_GetColor(iParam1, CCC_TagColor), strTag, sizeof(strTag)); strcopy(g_strColor[iParam1][TAG], sizeof(g_strColor[][]), strTag); } else { new iColorIndex = StringToInt(strBuffer); PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "TagSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]); strcopy(g_strColor[iParam1][TAG], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]); CCC_SetColor(iParam1, CCC_TagColor, StringToInt(g_strColorHex[iColorIndex], 16), false); } if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]); SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iParam1), DBPrio_High); } } Menu_Settings(iParam1); } } public Menu_NameColor(iClient) { if(IsVoteInProgress()) return; new Handle:hMenu = CreateMenu(MenuHandler_NameColor); SetMenuTitle(hMenu, "%T:", "NameColor", iClient); SetMenuExitBackButton(hMenu, true); decl String:strBuffer[32]; Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient); AddMenuItem(hMenu, "Reset", strBuffer); decl String:strColorIndex[4]; for(new i = 0; i < g_iColorCount; i++) { if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i]))) { IntToString(i, strColorIndex, sizeof(strColorIndex)); AddMenuItem(hMenu, strColorIndex, g_strColorName[i]); } } DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER); } public MenuHandler_NameColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2) { if(iAction == MenuAction_End) { CloseHandle(hMenu); return; } if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack) { Menu_Settings(iParam1); return; } if(iAction == MenuAction_Select) { decl String:strBuffer[32]; GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer)); if(StrEqual(strBuffer, "Reset")) { PrintToChat(iParam1, "[SM] %T", "NameReset", iParam1); strcopy(g_strColor[iParam1][NAME], sizeof(g_strColor[][]), ""); CCC_ResetColor(iParam1, CCC_NameColor); } else { new iColorIndex = StringToInt(strBuffer); PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "NameSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]); strcopy(g_strColor[iParam1][NAME], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]); CCC_SetColor(iParam1, CCC_NameColor, StringToInt(g_strColorHex[iColorIndex], 16), false); } if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]); SQL_TQuery(g_hSQL, SQLQuery_NameColor, strQuery, GetClientUserId(iParam1), DBPrio_High); } Menu_Settings(iParam1); } } public Menu_ChatColor(iClient) { if(IsVoteInProgress()) return; new Handle:hMenu = CreateMenu(MenuHandler_ChatColor); SetMenuTitle(hMenu, "%T:", "ChatColor", iClient); SetMenuExitBackButton(hMenu, true); decl String:strBuffer[32]; Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient); AddMenuItem(hMenu, "Reset", strBuffer); decl String:strColorIndex[4]; for(new i = 0; i < g_iColorCount; i++) { if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i]))) { IntToString(i, strColorIndex, sizeof(strColorIndex)); AddMenuItem(hMenu, strColorIndex, g_strColorName[i]); } } DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER); } public MenuHandler_ChatColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2) { if(iAction == MenuAction_End) { CloseHandle(hMenu); return; } if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack) { Menu_Settings(iParam1); return; } if(iAction == MenuAction_Select) { decl String:strBuffer[32]; GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer)); if(StrEqual(strBuffer, "Reset")) { PrintToChat(iParam1, "[SM] %T", "ChatReset", iParam1); strcopy(g_strColor[iParam1][CHAT], sizeof(g_strColor[][]), ""); CCC_ResetColor(iParam1, CCC_ChatColor); } else { new iColorIndex = StringToInt(strBuffer); PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "ChatSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]); strcopy(g_strColor[iParam1][CHAT], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]); CCC_SetColor(iParam1, CCC_ChatColor, StringToInt(g_strColorHex[iColorIndex], 16), false); } if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]); SQL_TQuery(g_hSQL, SQLQuery_ChatColor, strQuery, GetClientUserId(iParam1), DBPrio_High); } Menu_Settings(iParam1); } } // ====[ CONFIGURATION ]======================================================= public Config_Load() { if(!FileExists(g_strConfigFile)) { SetFailState("Configuration file %s not found!", g_strConfigFile); return; } new Handle:hKeyValues = CreateKeyValues("CCC Menu Colors"); if(!FileToKeyValues(hKeyValues, g_strConfigFile)) { SetFailState("Improper structure for configuration file %s!", g_strConfigFile); return; } if(!KvGotoFirstSubKey(hKeyValues)) { SetFailState("Can't find configuration file %s!", g_strConfigFile); return; } for(new i = 0; i < MAX_COLORS; i++) { strcopy(g_strColorName[i], sizeof(g_strColorName[]), ""); strcopy(g_strColorHex[i], sizeof(g_strColorHex[]), ""); strcopy(g_strColorFlags[i], sizeof(g_strColorFlags[]), ""); g_bColorAdminFlags[i] = false; for(new i2 = 0; i2 < 16; i2++) g_iColorFlagList[i][i2] = AdminFlag:-1; } g_iColorCount = 0; do { KvGetString(hKeyValues, "name", g_strColorName[g_iColorCount], sizeof(g_strColorName[])); KvGetString(hKeyValues, "hex", g_strColorHex[g_iColorCount], sizeof(g_strColorHex[])); ReplaceString(g_strColorHex[g_iColorCount], sizeof(g_strColorHex[]), "#", "", false); KvGetString(hKeyValues, "flags", g_strColorFlags[g_iColorCount], sizeof(g_strColorFlags[])); if(!IsValidHex(g_strColorHex[g_iColorCount])) { LogError("Invalid hexadecimal value for color %s.", g_strColorName[g_iColorCount]); strcopy(g_strColorName[g_iColorCount], sizeof(g_strColorName[]), ""); strcopy(g_strColorHex[g_iColorCount], sizeof(g_strColorHex[]), ""); strcopy(g_strColorFlags[g_iColorCount], sizeof(g_strColorFlags[]), ""); } if(!StrEqual(g_strColorFlags[g_iColorCount], "")) { g_bColorAdminFlags[g_iColorCount] = true; FlagBitsToArray(ReadFlagString(g_strColorFlags[g_iColorCount]), g_iColorFlagList[g_iColorCount], sizeof(g_iColorFlagList[])); } g_iColorCount++; } while(KvGotoNextKey(hKeyValues)); CloseHandle(hKeyValues); LogMessage("Loaded %i colors from configuration file %s.", g_iColorCount, g_strConfigFile); } // ====[ SQL QUERIES ]========================================================= public SQLQuery_Connect(Handle:hOwner, Handle:hQuery, const String:strError[], any:iData) { if(hQuery == INVALID_HANDLE) return; g_hSQL = hQuery; SQL_GetDriverIdent(hOwner, g_strSQLDriver, sizeof(g_strSQLDriver)); if(StrEqual(g_strSQLDriver, "mysql", false)) { LogMessage("MySQL server configured. Variable saving enabled."); SQL_TQuery(g_hSQL, SQLQuery_Update, "CREATE TABLE IF NOT EXISTS cccm_users (id INT(64) NOT NULL AUTO_INCREMENT, auth varchar(32) UNIQUE, hidetag varchar(1), tagcolor varchar(7), namecolor varchar(7), chatcolor varchar(7), PRIMARY KEY (id))", _, DBPrio_High); } else if(StrEqual(g_strSQLDriver, "sqlite", false)) { LogMessage("SQlite server configured. Variable saving enabled."); SQL_TQuery(g_hSQL, SQLQuery_Update, "CREATE TABLE IF NOT EXISTS cccm_users (id INTERGER PRIMARY KEY, auth varchar(32) UNIQUE, hidetag varchar(1), tagcolor varchar(7), namecolor varchar(7), chatcolor varchar(7))", _, DBPrio_High); } else { LogMessage("Saved variable server not configured. Variable saving disabled."); return; } for(new i = 1; i <= MaxClients; ++i) if(IsClientInGame(i)) SQL_LoadColors(i); } public SQLQuery_LoadColors(Handle:hOwner, Handle:hQuery, const String:strError[], any:iData) { new iClient = GetClientOfUserId(iData); if(!IsValidClient(iClient)) return; if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE) { LogError("SQL Error: %s", strError); return; } if(SQL_FetchRow(hQuery) && SQL_GetRowCount(hQuery) != 0) { g_bHideTag[iClient] = bool:SQL_FetchInt(hQuery, 0); decl String:strTag[7]; SQL_FetchString(hQuery, 1, strTag, sizeof(strTag)); if(IsValidHex(strTag)) { strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strTag); CCC_SetColor(iClient, CCC_TagColor, StringToInt(g_strColor[iClient][TAG], 16), false); } else if(StrEqual(strTag, "-1")) strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), "-1"); decl String:strName[7]; SQL_FetchString(hQuery, 2, strName, sizeof(strName)); if(IsValidHex(strName)) { strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), strName); CCC_SetColor(iClient, CCC_NameColor, StringToInt(g_strColor[iClient][NAME], 16), false); } decl String:strChat[7]; SQL_FetchString(hQuery, 3, strChat, sizeof(strChat)); if(IsValidHex(strChat)) { strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), strChat); CCC_SetColor(iClient, CCC_ChatColor, StringToInt(g_strColor[iClient][CHAT], 16), false); } g_bColorsLoaded[iClient] = true; } } public SQLQuery_HideTag(Handle:hOwner, Handle:hQuery, const String:strError[], any:iClientId) { new iClient = GetClientOfUserId(iClientId); if(!IsValidClient(iClient)) return; if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE) { LogError("SQL Error: %s", strError); return; } if(SQL_GetRowCount(hQuery) == 0) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "INSERT INTO cccm_users (hidetag, auth) VALUES (%i, '%s')", g_bHideTag[iClient], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_High); } else { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "UPDATE cccm_users SET hidetag = '%i' WHERE auth = '%s'", g_bHideTag[iClient], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_Normal); } } public SQLQuery_TagColor(Handle:hOwner, Handle:hQuery, const String:strError[], any:iClientId) { new iClient = GetClientOfUserId(iClientId); if(!IsValidClient(iClient)) return; if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE) { LogError("SQL Error: %s", strError); return; } if(SQL_GetRowCount(hQuery) == 0) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "INSERT INTO cccm_users (tagcolor, auth) VALUES ('%s', '%s')", g_strColor[iClient][TAG], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_High); } else { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "UPDATE cccm_users SET tagcolor = '%s' WHERE auth = '%s'", g_strColor[iClient][TAG], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_Normal); } } public SQLQuery_NameColor(Handle:hOwner, Handle:hQuery, const String:strError[], any:iClientId) { new iClient = GetClientOfUserId(iClientId); if(!IsValidClient(iClient)) return; if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE) { LogError("SQL Error: %s", strError); return; } if(SQL_GetRowCount(hQuery) == 0) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "INSERT INTO cccm_users (namecolor, auth) VALUES ('%s', '%s')", g_strColor[iClient][NAME], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_High); } else { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "UPDATE cccm_users SET namecolor = '%s' WHERE auth = '%s'", g_strColor[iClient][NAME], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_Normal); } } public SQLQuery_ChatColor(Handle:hOwner, Handle:hQuery, const String:strError[], any:iClientId) { new iClient = GetClientOfUserId(iClientId); if(!IsValidClient(iClient)) return; if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE) { LogError("SQL Error: %s", strError); return; } if(SQL_GetRowCount(hQuery) == 0) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "INSERT INTO cccm_users (chatcolor, auth) VALUES ('%s', '%s')", g_strColor[iClient][CHAT], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_High); } else { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "UPDATE cccm_users SET chatcolor = '%s' WHERE auth = '%s'", g_strColor[iClient][CHAT], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_Normal); } } public SQLQuery_Update(Handle:hOwner, Handle:hQuery, const String:strError[], any:iData) { if(hQuery == INVALID_HANDLE) LogError("SQL Error: %s", strError); } // ====[ STOCKS ]============================================================== stock bool:IsValidClient(iClient) { if(iClient <= 0 || iClient > MaxClients || !IsClientInGame(iClient)) return false; return true; } stock bool:IsValidHex(const String:strHex[]) { if(strlen(strHex) == 6 && MatchRegex(g_hRegexHex, strHex)) return true; return false; } stock bool:HasAdminFlag(iClient, const AdminFlag:iFlagList[16]) { new iFlags = GetUserFlagBits(iClient); if(iFlags & ADMFLAG_ROOT) return true; for(new i = 0; i < sizeof(iFlagList); i++) { if(iFlags & FlagToBit(iFlagList[i])) return true; } return false; }
更改后文本
打开文件
#pragma semicolon 1 // ====[ INCLUDES ]============================================================ #include <sourcemod> #include <regex> #include <ccc> // ====[ DEFINES ]============================================================= #define PLUGIN_NAME "Custom Chat Colors Menu" #define PLUGIN_VERSION "2.3" #define MAX_COLORS 255 #define TAG 0 #define NAME 1 #define CHAT 2 #define ENABLEFLAG_TAG (1 << TAG) #define ENABLEFLAG_NAME (1 << NAME) #define ENABLEFLAG_CHAT (1 << CHAT) // ====[ HANDLES | CVARS ]===================================================== new Handle:g_hCvarEnabled, g_iCvarEnabled; new Handle:g_hCvarHideTags, bool:g_bCvarHideTags; new Handle:g_hRegexHex; new Handle:g_hSQL; // ====[ VARIABLES ]=========================================================== new g_iColorCount; new AdminFlag:g_iColorFlagList[MAX_COLORS][16]; new bool:g_bColorsLoaded[MAXPLAYERS + 1]; new bool:g_bColorAdminFlags[MAX_COLORS]; new bool:g_bHideTag[MAXPLAYERS + 1]; new bool:g_bAccessColor[MAXPLAYERS + 1][3]; new bool:g_bAccessHideTags[MAXPLAYERS + 1]; new String:g_strAuth[MAXPLAYERS + 1][32]; new String:g_strColor[MAXPLAYERS + 1][3][7]; new String:g_strColorName[MAX_COLORS][255]; new String:g_strColorHex[MAX_COLORS][255]; new String:g_strColorFlags[MAX_COLORS][255]; new String:g_strConfigFile[PLATFORM_MAX_PATH]; new String:g_strSQLDriver[16]; // ====[ PLUGIN ]============================================================== public Plugin:myinfo = { name = PLUGIN_NAME, author = "ReFlexPoison, modified/fixed by JoinedSenses", description = "Change Custom Chat Colors settings through easy to access menus", version = PLUGIN_VERSION, url = "http://www.sourcemod.net" } // ====[ EVENTS ]============================================================== public OnPluginStart() { CreateConVar("sm_cccm_version", PLUGIN_VERSION, PLUGIN_NAME, FCVAR_SPONLY | FCVAR_DONTRECORD | FCVAR_NOTIFY); g_hCvarEnabled = CreateConVar("sm_cccm_enabled", "7", "Enable Custom Chat Colors Menu (Add up the numbers to choose)\n0 = Disabled\n1 = Tag\n2 = Name\n4 = Chat", 0, true, 0.0, true, 7.0); g_iCvarEnabled = GetConVarInt(g_hCvarEnabled); HookConVarChange(g_hCvarEnabled, OnConVarChange); g_hCvarHideTags = CreateConVar("sm_cccm_hidetags", "1", "Allow players to hide their chat tags\n0 = Disabled\n1 = Enabled", 0, true, 0.0, true, 1.0); g_bCvarHideTags = GetConVarBool(g_hCvarHideTags); HookConVarChange(g_hCvarHideTags, OnConVarChange); AutoExecConfig(true, "plugin.custom-chatcolors-menu"); RegAdminCmd("sm_ccc", Command_Color, ADMFLAG_GENERIC, "Open Custom Chat Colors Menu"); RegAdminCmd("sm_reload_cccm", Command_Reload, ADMFLAG_ROOT, "Reloads Custom Chat Colors Menu config"); RegAdminCmd("sm_tagcolor", Command_TagColor, ADMFLAG_ROOT, "Change tag color to a specified hexadecimal value"); RegAdminCmd("sm_resettag", Command_ResetTagColor, ADMFLAG_GENERIC, "Reset tag color to default"); RegAdminCmd("sm_namecolor", Command_NameColor, ADMFLAG_ROOT, "Change name color to a specified hexadecimal value"); RegAdminCmd("sm_resetname", Command_ResetNameColor, ADMFLAG_GENERIC, "Reset name color to default"); RegAdminCmd("sm_chatcolor", Command_ChatColor, ADMFLAG_ROOT, "Change chat color to a specified hexadecimal value"); RegAdminCmd("sm_resetchat", Command_ResetChatColor, ADMFLAG_GENERIC, "Reset chat color to default"); LoadTranslations("core.phrases"); LoadTranslations("common.phrases"); LoadTranslations("custom-chatcolors-menu.phrases"); g_hRegexHex = CompileRegex("([A-Fa-f0-9]{6})"); BuildPath(Path_SM, g_strConfigFile, sizeof(g_strConfigFile), "configs/custom-chatcolors-menu.cfg"); g_hSQL = INVALID_HANDLE; if(SQL_CheckConfig("cccm")) SQL_TConnect(SQLQuery_Connect, "cccm"); } public OnConVarChange(Handle:hConvar, const String:strOldValue[], const String:strNewValue[]) { if(hConvar == g_hCvarEnabled) g_iCvarEnabled = GetConVarInt(g_hCvarEnabled); else if(hConvar == g_hCvarHideTags) g_bCvarHideTags = GetConVarBool(g_hCvarHideTags); } public SQL_LoadColors(iClient) { if(!IsClientAuthorized(iClient)) return; if(g_hSQL != INVALID_HANDLE) { decl String:strAuth[32]; GetClientAuthId(iClient, AuthId_Steam2, strAuth, sizeof(strAuth)); strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), strAuth); decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT hidetag, tagcolor, namecolor, chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_LoadColors, strQuery, GetClientUserId(iClient), DBPrio_High); } } public OnConfigsExecuted() { Config_Load(); } public OnClientConnected(iClient) { g_bColorsLoaded[iClient] = false; g_bHideTag[iClient] = false; g_bAccessColor[iClient][TAG] = false; g_bAccessColor[iClient][NAME] = false; g_bAccessColor[iClient][CHAT] = false; g_bAccessHideTags[iClient] = false; strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), ""); strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), ""); strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), ""); strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), ""); } public CCC_OnUserConfigLoaded(iClient) { if(g_bColorsLoaded[iClient]) return; decl String:strTag[7]; IntToString(CCC_GetColor(iClient, CCC_TagColor), strTag, sizeof(strTag)); if(IsValidHex(strTag)) strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strTag); decl String:strName[7]; IntToString(CCC_GetColor(iClient, CCC_NameColor), strName, sizeof(strName)); if(IsValidHex(strName)) strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), strName); decl String:strChat[7]; IntToString(CCC_GetColor(iClient, CCC_ChatColor), strChat, sizeof(strChat)); if(IsValidHex(strChat)) strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), strChat); } public OnClientAuthorized(iClient, const String:strAuth[]) { strcopy(g_strAuth[iClient], sizeof(g_strAuth[]), strAuth); } public OnRebuildAdminCache(AdminCachePart:iPart) { for(new i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) { OnClientConnected(i); OnClientPostAdminCheck(i); } } public OnClientPostAdminCheck(iClient) { SQL_LoadColors(iClient); if(CheckCommandAccess(iClient, "sm_ccc_tag", ADMFLAG_GENERIC)) g_bAccessColor[iClient][TAG] = true; if(CheckCommandAccess(iClient, "sm_ccc_name", ADMFLAG_GENERIC)) g_bAccessColor[iClient][NAME] = true; if(CheckCommandAccess(iClient, "sm_ccc_chat", ADMFLAG_GENERIC)) g_bAccessColor[iClient][CHAT] = true; if(CheckCommandAccess(iClient, "sm_ccc_hidetags", ADMFLAG_GENERIC)) g_bAccessHideTags[iClient] = true; } public Action:CCC_OnColor(iClient, const String:strMessage[], CCC_ColorType:iType) { if(iType == CCC_TagColor) { if(!(g_iCvarEnabled & ENABLEFLAG_TAG)) return Plugin_Handled; if(g_bHideTag[iClient]) return Plugin_Handled; } if(iType == CCC_NameColor) { if(!(g_iCvarEnabled & ENABLEFLAG_NAME)) return Plugin_Handled; if(!IsValidHex(g_strColor[iClient][NAME])) return Plugin_Handled; } if(iType == CCC_ChatColor) { if(!(g_iCvarEnabled & ENABLEFLAG_CHAT)) return Plugin_Handled; if(!IsValidHex(g_strColor[iClient][CHAT])) return Plugin_Handled; } return Plugin_Continue; } // ====[ COMMANDS ]============================================================ public Action:Command_Color(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; Menu_Settings(iClient); return Plugin_Handled; } public Action:Command_Reload(iClient, iArgs) { Config_Load(); ReplyToCommand(iClient, "[SM] Configuration file %s reloaded.", g_strConfigFile); return Plugin_Handled; } public Action:Command_TagColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; if(iArgs != 1) { ReplyToCommand(iClient, "[SM] Usage: sm_tagcolor <hex>"); return Plugin_Handled; } decl String:strArg[32]; GetCmdArgString(strArg, sizeof(strArg)); ReplaceString(strArg, sizeof(strArg), "#", "", false); if(!IsValidHex(strArg)) { ReplyToCommand(iClient, "[SM] Usage: sm_tagcolor <hex>"); return Plugin_Handled; } PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "TagSet", iClient, strArg, strArg); strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strArg); CCC_SetColor(iClient, CCC_TagColor, StringToInt(strArg, 16), false); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } public Action:Command_ResetTagColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; PrintToChat(iClient, "[SM] %T", "TagReset", iClient); strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), ""); CCC_ResetColor(iClient, CCC_TagColor); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } public Action:Command_NameColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; if(iArgs != 1) { ReplyToCommand(iClient, "[SM] Usage: sm_namecolor <hex>"); return Plugin_Handled; } decl String:strArg[32]; GetCmdArgString(strArg, sizeof(strArg)); ReplaceString(strArg, sizeof(strArg), "#", "", false); if(!IsValidHex(strArg)) { ReplyToCommand(iClient, "[SM] Usage: sm_namecolor <hex>"); return Plugin_Handled; } PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "NameSet", iClient, strArg, strArg); strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), strArg); CCC_SetColor(iClient, CCC_NameColor, StringToInt(strArg, 16), false); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_NameColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } public Action:Command_ResetNameColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; PrintToChat(iClient, "[SM] %T", "NameReset", iClient); strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), ""); CCC_ResetColor(iClient, CCC_NameColor); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_NameColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } public Action:Command_ChatColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; if(iArgs != 1) { ReplyToCommand(iClient, "[SM] Usage: sm_chatcolor <hex>"); return Plugin_Handled; } decl String:strArg[32]; GetCmdArgString(strArg, sizeof(strArg)); ReplaceString(strArg, sizeof(strArg), "#", "", false); if(!IsValidHex(strArg)) { ReplyToCommand(iClient, "[SM] Usage: sm_chatcolor <hex>"); return Plugin_Handled; } PrintToChat(iClient, "\x01[SM] %T \x07%s#%s\x01", "ChatSet", iClient, strArg, strArg); strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strArg); CCC_SetColor(iClient, CCC_TagColor, StringToInt(strArg, 16), false); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } public Action:Command_ResetChatColor(iClient, iArgs) { if(!IsValidClient(iClient)) return Plugin_Continue; PrintToChat(iClient, "[SM] %T", "ChatReset", iClient); strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), ""); CCC_ResetColor(iClient, CCC_ChatColor); if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iClient)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_ChatColor, strQuery, GetClientUserId(iClient), DBPrio_High); } return Plugin_Handled; } // ====[ MENUS ]=============================================================== public Menu_Settings(iClient) { if(IsVoteInProgress()) return; new Handle:hMenu = CreateMenu(MenuHandler_Settings); SetMenuTitle(hMenu, "%T:", "Title", iClient); decl String:strBuffer[32]; if(g_bCvarHideTags) { if(!g_bHideTag[iClient]) { Format(strBuffer, sizeof(strBuffer), "%T", "HideTag", iClient); AddMenuItem(hMenu, "HideTag", strBuffer); } else { Format(strBuffer, sizeof(strBuffer), "%T", "ShowTag", iClient); AddMenuItem(hMenu, "HideTag", strBuffer); } } Format(strBuffer, sizeof(strBuffer), "%T", "ChangeTag", iClient); if(g_iCvarEnabled & ENABLEFLAG_TAG && g_bAccessColor[iClient][TAG]) AddMenuItem(hMenu, "Tag", strBuffer); Format(strBuffer, sizeof(strBuffer), "%T", "ChangeName", iClient); if(g_iCvarEnabled & ENABLEFLAG_NAME && g_bAccessColor[iClient][NAME]) AddMenuItem(hMenu, "Name", strBuffer); Format(strBuffer, sizeof(strBuffer), "%T", "ChangeChat", iClient); if(g_iCvarEnabled & ENABLEFLAG_CHAT && g_bAccessColor[iClient][CHAT]) AddMenuItem(hMenu, "Chat", strBuffer); DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER); } public MenuHandler_Settings(Handle:hMenu, MenuAction:iAction, iParam1, iParam2) { if(iAction == MenuAction_End) { CloseHandle(hMenu); return; } if(iAction == MenuAction_Select) { decl String:strBuffer[32]; GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer)); if(StrEqual(strBuffer, "HideTag")) { if(g_bHideTag[iParam1]) { g_bHideTag[iParam1] = false; PrintToChat(iParam1, "[SM] %T", "TagEnabled", iParam1); Menu_Settings(iParam1); } else { g_bHideTag[iParam1] = true; PrintToChat(iParam1, "[SM] %T", "TagDisabled", iParam1); Menu_Settings(iParam1); } if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT hidetag FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]); SQL_TQuery(g_hSQL, SQLQuery_HideTag, strQuery, GetClientUserId(iParam1), DBPrio_High); } } if(StrEqual(strBuffer, "Tag")) Menu_TagColor(iParam1); else if(StrEqual(strBuffer, "Name")) Menu_NameColor(iParam1); else if(StrEqual(strBuffer, "Chat")) Menu_ChatColor(iParam1); } } public Menu_TagColor(iClient) { if(IsVoteInProgress()) return; new Handle:hMenu = CreateMenu(MenuHandler_TagColor); SetMenuTitle(hMenu, "%T:", "TagColor", iClient); SetMenuExitBackButton(hMenu, true); decl String:strBuffer[32]; Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient); AddMenuItem(hMenu, "Reset", strBuffer); decl String:strColorIndex[4]; for(new i = 0; i < g_iColorCount; i++) { if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i]))) { IntToString(i, strColorIndex, sizeof(strColorIndex)); AddMenuItem(hMenu, strColorIndex, g_strColorName[i]); } } DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER); } public MenuHandler_TagColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2) { if(iAction == MenuAction_End) { return; } if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack) { Menu_Settings(iParam1); return; } if(iAction == MenuAction_Select) { decl String:strBuffer[32]; GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer)); if(StrEqual(strBuffer, "Reset")) { PrintToChat(iParam1, "[SM] %T", "TagReset", iParam1); strcopy(g_strColor[iParam1][TAG], sizeof(g_strColor[][]), ""); CCC_ResetColor(iParam1, CCC_TagColor); decl String:strTag[7]; IntToString(CCC_GetColor(iParam1, CCC_TagColor), strTag, sizeof(strTag)); strcopy(g_strColor[iParam1][TAG], sizeof(g_strColor[][]), strTag); } else { new iColorIndex = StringToInt(strBuffer); PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "TagSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]); strcopy(g_strColor[iParam1][TAG], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]); CCC_SetColor(iParam1, CCC_TagColor, StringToInt(g_strColorHex[iColorIndex], 16), false); } if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT tagcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]); SQL_TQuery(g_hSQL, SQLQuery_TagColor, strQuery, GetClientUserId(iParam1), DBPrio_High); } DisplayMenuAtItem(hMenu, iParam1, GetMenuSelectionPosition(), MENU_TIME_FOREVER); } } public Menu_NameColor(iClient) { if(IsVoteInProgress()) return; new Handle:hMenu = CreateMenu(MenuHandler_NameColor); SetMenuTitle(hMenu, "%T:", "NameColor", iClient); SetMenuExitBackButton(hMenu, true); decl String:strBuffer[32]; Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient); AddMenuItem(hMenu, "Reset", strBuffer); decl String:strColorIndex[4]; for(new i = 0; i < g_iColorCount; i++) { if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i]))) { IntToString(i, strColorIndex, sizeof(strColorIndex)); AddMenuItem(hMenu, strColorIndex, g_strColorName[i]); } } DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER); } public MenuHandler_NameColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2) { if(iAction == MenuAction_End) { return; } if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack) { Menu_Settings(iParam1); return; } if(iAction == MenuAction_Select) { decl String:strBuffer[32]; GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer)); if(StrEqual(strBuffer, "Reset")) { PrintToChat(iParam1, "[SM] %T", "NameReset", iParam1); strcopy(g_strColor[iParam1][NAME], sizeof(g_strColor[][]), ""); CCC_ResetColor(iParam1, CCC_NameColor); } else { new iColorIndex = StringToInt(strBuffer); PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "NameSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]); strcopy(g_strColor[iParam1][NAME], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]); CCC_SetColor(iParam1, CCC_NameColor, StringToInt(g_strColorHex[iColorIndex], 16), false); } if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT namecolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]); SQL_TQuery(g_hSQL, SQLQuery_NameColor, strQuery, GetClientUserId(iParam1), DBPrio_High); } DisplayMenuAtItem(hMenu, iParam1, GetMenuSelectionPosition(), MENU_TIME_FOREVER); } } public Menu_ChatColor(iClient) { if(IsVoteInProgress()) return; new Handle:hMenu = CreateMenu(MenuHandler_ChatColor); SetMenuTitle(hMenu, "%T:", "ChatColor", iClient); SetMenuExitBackButton(hMenu, true); decl String:strBuffer[32]; Format(strBuffer, sizeof(strBuffer), "%T", "Reset", iClient); AddMenuItem(hMenu, "Reset", strBuffer); decl String:strColorIndex[4]; for(new i = 0; i < g_iColorCount; i++) { if(!g_bColorAdminFlags[i] || (g_bColorAdminFlags[i] && HasAdminFlag(iClient, g_iColorFlagList[i]))) { IntToString(i, strColorIndex, sizeof(strColorIndex)); AddMenuItem(hMenu, strColorIndex, g_strColorName[i]); } } DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER); } public MenuHandler_ChatColor(Handle:hMenu, MenuAction:iAction, iParam1, iParam2) { if(iAction == MenuAction_End) { return; } if(iAction == MenuAction_Cancel && iParam2 == MenuCancel_ExitBack) { Menu_Settings(iParam1); return; } if(iAction == MenuAction_Select) { decl String:strBuffer[32]; GetMenuItem(hMenu, iParam2, strBuffer, sizeof(strBuffer)); if(StrEqual(strBuffer, "Reset")) { PrintToChat(iParam1, "[SM] %T", "ChatReset", iParam1); strcopy(g_strColor[iParam1][CHAT], sizeof(g_strColor[][]), ""); CCC_ResetColor(iParam1, CCC_ChatColor); } else { new iColorIndex = StringToInt(strBuffer); PrintToChat(iParam1, "\x01[SM] %T \x07%s%s\x01", "ChatSet", iParam1, g_strColorHex[iColorIndex], g_strColorName[iColorIndex]); strcopy(g_strColor[iParam1][CHAT], sizeof(g_strColor[][]), g_strColorHex[iColorIndex]); CCC_SetColor(iParam1, CCC_ChatColor, StringToInt(g_strColorHex[iColorIndex], 16), false); } if(g_hSQL != INVALID_HANDLE && IsClientAuthorized(iParam1)) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "SELECT chatcolor FROM cccm_users WHERE auth = '%s'", g_strAuth[iParam1]); SQL_TQuery(g_hSQL, SQLQuery_ChatColor, strQuery, GetClientUserId(iParam1), DBPrio_High); } DisplayMenuAtItem(hMenu, iParam1, GetMenuSelectionPosition(), MENU_TIME_FOREVER); } } // ====[ CONFIGURATION ]======================================================= public Config_Load() { if(!FileExists(g_strConfigFile)) { SetFailState("Configuration file %s not found!", g_strConfigFile); return; } new Handle:hKeyValues = CreateKeyValues("CCC Menu Colors"); if(!FileToKeyValues(hKeyValues, g_strConfigFile)) { SetFailState("Improper structure for configuration file %s!", g_strConfigFile); return; } if(!KvGotoFirstSubKey(hKeyValues)) { SetFailState("Can't find configuration file %s!", g_strConfigFile); return; } for(new i = 0; i < MAX_COLORS; i++) { strcopy(g_strColorName[i], sizeof(g_strColorName[]), ""); strcopy(g_strColorHex[i], sizeof(g_strColorHex[]), ""); strcopy(g_strColorFlags[i], sizeof(g_strColorFlags[]), ""); g_bColorAdminFlags[i] = false; for(new i2 = 0; i2 < 16; i2++) g_iColorFlagList[i][i2] = AdminFlag:-1; } g_iColorCount = 0; do { KvGetString(hKeyValues, "name", g_strColorName[g_iColorCount], sizeof(g_strColorName[])); KvGetString(hKeyValues, "hex", g_strColorHex[g_iColorCount], sizeof(g_strColorHex[])); ReplaceString(g_strColorHex[g_iColorCount], sizeof(g_strColorHex[]), "#", "", false); KvGetString(hKeyValues, "flags", g_strColorFlags[g_iColorCount], sizeof(g_strColorFlags[])); if(!IsValidHex(g_strColorHex[g_iColorCount])) { LogError("Invalid hexadecimal value for color %s.", g_strColorName[g_iColorCount]); strcopy(g_strColorName[g_iColorCount], sizeof(g_strColorName[]), ""); strcopy(g_strColorHex[g_iColorCount], sizeof(g_strColorHex[]), ""); strcopy(g_strColorFlags[g_iColorCount], sizeof(g_strColorFlags[]), ""); } if(!StrEqual(g_strColorFlags[g_iColorCount], "")) { g_bColorAdminFlags[g_iColorCount] = true; FlagBitsToArray(ReadFlagString(g_strColorFlags[g_iColorCount]), g_iColorFlagList[g_iColorCount], sizeof(g_iColorFlagList[])); } g_iColorCount++; } while(KvGotoNextKey(hKeyValues)); CloseHandle(hKeyValues); LogMessage("Loaded %i colors from configuration file %s.", g_iColorCount, g_strConfigFile); } // ====[ SQL QUERIES ]========================================================= public SQLQuery_Connect(Handle:hOwner, Handle:hQuery, const String:strError[], any:iData) { if(hQuery == INVALID_HANDLE) return; g_hSQL = hQuery; SQL_GetDriverIdent(hOwner, g_strSQLDriver, sizeof(g_strSQLDriver)); if(StrEqual(g_strSQLDriver, "mysql", false)) { LogMessage("MySQL server configured. Variable saving enabled."); SQL_TQuery(g_hSQL, SQLQuery_Update, "CREATE TABLE IF NOT EXISTS cccm_users (id INT(64) NOT NULL AUTO_INCREMENT, auth varchar(32) UNIQUE, hidetag varchar(1), tagcolor varchar(7), namecolor varchar(7), chatcolor varchar(7), PRIMARY KEY (id))", _, DBPrio_High); } else if(StrEqual(g_strSQLDriver, "sqlite", false)) { LogMessage("SQlite server configured. Variable saving enabled."); SQL_TQuery(g_hSQL, SQLQuery_Update, "CREATE TABLE IF NOT EXISTS cccm_users (id INTERGER PRIMARY KEY, auth varchar(32) UNIQUE, hidetag varchar(1), tagcolor varchar(7), namecolor varchar(7), chatcolor varchar(7))", _, DBPrio_High); } else { LogMessage("Saved variable server not configured. Variable saving disabled."); return; } for(new i = 1; i <= MaxClients; ++i) if(IsClientInGame(i)) SQL_LoadColors(i); } public SQLQuery_LoadColors(Handle:hOwner, Handle:hQuery, const String:strError[], any:iData) { new iClient = GetClientOfUserId(iData); if(!IsValidClient(iClient)) return; if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE) { LogError("SQL Error: %s", strError); return; } if(SQL_FetchRow(hQuery) && SQL_GetRowCount(hQuery) != 0) { g_bHideTag[iClient] = bool:SQL_FetchInt(hQuery, 0); decl String:strTag[7]; SQL_FetchString(hQuery, 1, strTag, sizeof(strTag)); if(IsValidHex(strTag)) { strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), strTag); CCC_SetColor(iClient, CCC_TagColor, StringToInt(g_strColor[iClient][TAG], 16), false); } else if(StrEqual(strTag, "-1")) strcopy(g_strColor[iClient][TAG], sizeof(g_strColor[][]), "-1"); decl String:strName[7]; SQL_FetchString(hQuery, 2, strName, sizeof(strName)); if(IsValidHex(strName)) { strcopy(g_strColor[iClient][NAME], sizeof(g_strColor[][]), strName); CCC_SetColor(iClient, CCC_NameColor, StringToInt(g_strColor[iClient][NAME], 16), false); } decl String:strChat[7]; SQL_FetchString(hQuery, 3, strChat, sizeof(strChat)); if(IsValidHex(strChat)) { strcopy(g_strColor[iClient][CHAT], sizeof(g_strColor[][]), strChat); CCC_SetColor(iClient, CCC_ChatColor, StringToInt(g_strColor[iClient][CHAT], 16), false); } g_bColorsLoaded[iClient] = true; } } public SQLQuery_HideTag(Handle:hOwner, Handle:hQuery, const String:strError[], any:iClientId) { new iClient = GetClientOfUserId(iClientId); if(!IsValidClient(iClient)) return; if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE) { LogError("SQL Error: %s", strError); return; } if(SQL_GetRowCount(hQuery) == 0) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "INSERT INTO cccm_users (hidetag, auth) VALUES (%i, '%s')", g_bHideTag[iClient], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_High); } else { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "UPDATE cccm_users SET hidetag = '%i' WHERE auth = '%s'", g_bHideTag[iClient], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_Normal); } } public SQLQuery_TagColor(Handle:hOwner, Handle:hQuery, const String:strError[], any:iClientId) { new iClient = GetClientOfUserId(iClientId); if(!IsValidClient(iClient)) return; if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE) { LogError("SQL Error: %s", strError); return; } if(SQL_GetRowCount(hQuery) == 0) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "INSERT INTO cccm_users (tagcolor, auth) VALUES ('%s', '%s')", g_strColor[iClient][TAG], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_High); } else { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "UPDATE cccm_users SET tagcolor = '%s' WHERE auth = '%s'", g_strColor[iClient][TAG], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_Normal); } } public SQLQuery_NameColor(Handle:hOwner, Handle:hQuery, const String:strError[], any:iClientId) { new iClient = GetClientOfUserId(iClientId); if(!IsValidClient(iClient)) return; if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE) { LogError("SQL Error: %s", strError); return; } if(SQL_GetRowCount(hQuery) == 0) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "INSERT INTO cccm_users (namecolor, auth) VALUES ('%s', '%s')", g_strColor[iClient][NAME], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_High); } else { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "UPDATE cccm_users SET namecolor = '%s' WHERE auth = '%s'", g_strColor[iClient][NAME], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_Normal); } } public SQLQuery_ChatColor(Handle:hOwner, Handle:hQuery, const String:strError[], any:iClientId) { new iClient = GetClientOfUserId(iClientId); if(!IsValidClient(iClient)) return; if(hOwner == INVALID_HANDLE || hQuery == INVALID_HANDLE) { LogError("SQL Error: %s", strError); return; } if(SQL_GetRowCount(hQuery) == 0) { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "INSERT INTO cccm_users (chatcolor, auth) VALUES ('%s', '%s')", g_strColor[iClient][CHAT], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_High); } else { decl String:strQuery[256]; Format(strQuery, sizeof(strQuery), "UPDATE cccm_users SET chatcolor = '%s' WHERE auth = '%s'", g_strColor[iClient][CHAT], g_strAuth[iClient]); SQL_TQuery(g_hSQL, SQLQuery_Update, strQuery, _, DBPrio_Normal); } } public SQLQuery_Update(Handle:hOwner, Handle:hQuery, const String:strError[], any:iData) { if(hQuery == INVALID_HANDLE) LogError("SQL Error: %s", strError); } // ====[ STOCKS ]============================================================== stock bool:IsValidClient(iClient) { if(iClient <= 0 || iClient > MaxClients || !IsClientInGame(iClient)) return false; return true; } stock bool:IsValidHex(const String:strHex[]) { if(strlen(strHex) == 6 && MatchRegex(g_hRegexHex, strHex)) return true; return false; } stock bool:HasAdminFlag(iClient, const AdminFlag:iFlagList[16]) { new iFlags = GetUserFlagBits(iClient); if(iFlags & ADMFLAG_ROOT) return true; for(new i = 0; i < sizeof(iFlagList); i++) { if(iFlags & FlagToBit(iFlagList[i])) return true; } return false; }
查找差异