From da526d925a4a51e40a24599fa16ae341a360c37b Mon Sep 17 00:00:00 2001 From: zaCade Date: Mon, 23 Jul 2018 17:18:51 +0200 Subject: [PATCH] ChatFilter: Push to git, unfinished. --- ChatFilter/configs/chatfilters.cfg | 11 ++ ChatFilter/scripting/ChatFilter.sp | 129 ++++++++++++++++++ ChatFilter/scripting/include/ccc.inc | 191 +++++++++++++++++++++++++++ 3 files changed, 331 insertions(+) create mode 100644 ChatFilter/configs/chatfilters.cfg create mode 100644 ChatFilter/scripting/ChatFilter.sp create mode 100644 ChatFilter/scripting/include/ccc.inc diff --git a/ChatFilter/configs/chatfilters.cfg b/ChatFilter/configs/chatfilters.cfg new file mode 100644 index 0000000..8241ce5 --- /dev/null +++ b/ChatFilter/configs/chatfilters.cfg @@ -0,0 +1,11 @@ +"chatfilters" +{ + "#lennies" + { + "( ͡° ͜ʖ ͡°)" {} + } + "#entWatch" + { + "[entWatch]" {} + } +} \ No newline at end of file diff --git a/ChatFilter/scripting/ChatFilter.sp b/ChatFilter/scripting/ChatFilter.sp new file mode 100644 index 0000000..a64a581 --- /dev/null +++ b/ChatFilter/scripting/ChatFilter.sp @@ -0,0 +1,129 @@ +#pragma newdecls required + +#include +#include +#include + +ArrayList g_aClientFilters[MAXPLAYERS+1]; +ArrayList g_aGroupFilters[MAXPLAYERS+1]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "ChatFilter", + author = "zaCade", + description = "Allows users to filter their chat messages", + version = "1.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + RegConsoleCmd("sm_cf", Command_ChatFilter); + RegConsoleCmd("sm_cfg", Command_ChatFilterGroup); + + + + + + for (int client = 1; client <= MAXPLAYERS; client++) + { + g_aClientFilters[client] = new ArrayList(512); + g_aGroupFilters[client] = new ArrayList(512); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientConnected(int client) +{ + g_aClientFilters[client].Clear(); + g_aGroupFilters[client].Clear(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_ChatFilter(int client, int args) +{ + + + + + +// g_aClientFilters[client].PushString(filter); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_ChatFilterGroup(int client, int args) +{ + + + +// ArrayList filters = new ArrayList(128); + + + +// filters.PushString(filter); + + + +// g_aGroupFilters[client].Push(filters); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action CCC_OnChatMessage(int client, int author, const char[] message) +{ + bool bBlockMessage = false; + + // Check the clients own filter list. + if (!bBlockMessage && g_aClientFilters[client].Length) + { + for (int filterID; filterID < g_aClientFilters[client].Length; filterID++) + { + char filter[128]; + g_aClientFilters[client].GetString(filterID, filter, sizeof(filter)); + + if (StrContains(message, filter, false)) + { + bBlockMessage = true; + break; + } + } + } + + // Check the clients group filter lists. + if (!bBlockMessage && g_aGroupFilters[client].Length) + { + for (int groupID; groupID < g_aGroupFilters[client].Length; groupID++) + { + ArrayList filters = g_aGroupFilters[client].Get(groupID); + + if (filters.Length) + { + for (int filterID; filterID < filters.Length; filterID++) + { + char filter[128]; + filters.GetString(filterID, filter, sizeof(filter)); + + if (StrContains(message, filter, false)) + { + bBlockMessage = true; + break; + } + } + } + } + } + + return (bBlockMessage) ? Plugin_Handled : Plugin_Continue; +} \ No newline at end of file diff --git a/ChatFilter/scripting/include/ccc.inc b/ChatFilter/scripting/include/ccc.inc new file mode 100644 index 0000000..e59c653 --- /dev/null +++ b/ChatFilter/scripting/include/ccc.inc @@ -0,0 +1,191 @@ +/** + * This is the include file for Custom Chat Colors + * https://forums.alliedmods.net/showthread.php?t=186695 + * To check that Custom Chat Colors is installed and running, verify that the "ccc" library exists + */ + +#if defined _ccc_included + #endinput +#endif +#define _ccc_included + +enum CCC_ColorType { + CCC_TagColor, + CCC_NameColor, + CCC_ChatColor +}; + +#define COLOR_NULL -1 +#define COLOR_NONE -2 +#define COLOR_CGREEN -3 //0x40FF40 +#define COLOR_OLIVE -4 //0x99FF99 +#define COLOR_TEAM -5 + +/** + * Gets a client's color as a hexadecimal integer. + * + * @param client Client index + * @param type Color type to retreive + * @param alpha Pass a boolean variable by reference here and it will be true if the color has alpha specified or false if it doesn't (or is a stock color) + * @return Color as a hexadecimal integer (use %X in formatting to get a hexadecimal string) + * + * On error/errors: Invalid client index or client is not in game + */ +native int CCC_GetColor(int client, CCC_ColorType type, bool &alpha = false); + +/** + * Sets a client's color as a hexadecimal integer. + * + * @param client Client index + * @param type Color type to set + * @param color Integer representation of the color (use StringToInt(input, 16) to convert a hexadecimal string) or one of the color defines + * @param alpha Are you specifying a color with alpha? + * @return True if the color is updated successfully, false otherwise + * + * On error/errors: Invalid client index or client is not in game + */ +native int CCC_SetColor(int client, CCC_ColorType type, int color, bool alpha); + +/** + * Gets a client's tag + * + * @param client Client index + * @param buffer Buffer to store the tag in + * @param maxlen Maximum buffer length + * @noreturn + * + * On error/errors: Invalid client index or client is not in game + */ +native int CCC_GetTag(int client, char[] buffer, int maxlen); + +/** + * Sets a client's tag + * + * @param client Client index + * @param tag String containing the new tag + * @noreturn + * + * On error/errors: Invalid client index or client is not in game + */ +native void CCC_SetTag(int client, const char[] tag); + +/** + * Resets a client's color to the value in the config file. + * + * @param client Client index + * @param type Color type to restore + * @noreturn + * + * On error/errors: Invalid client index or client is not in game + */ +native int CCC_ResetColor(int client, CCC_ColorType type); + +/** + * Resets a client's tag to the value in the config file. + * + * @param client Client index + * @noreturn + * + * On error/errors: Invalid client index or client is not in game + */ +native int CCC_ResetTag(int client); + +/** + * Called when a cilent's name is about to be colored + * DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD + * + * @param client Client index + * @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring + */ +//#pragma deprecated Use CCC_OnColor instead +//forward Action:CCC_OnNameColor(client); + +/** + * Called when a client's chat is about to be colored + * DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD + * + * @param client Client index + * @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring + */ +//#pragma deprecated Use CCC_OnColor instead +//forward Action:CCC_OnChatColor(client); + +/** + * Called when a client's name is about to be tagged + * DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD + * + * @param client Client index + * @return Plugin_Handled to prevent tagging, Plugin_Continue to allow tagging + */ +//#pragma deprecated Use CCC_OnColor instead +//forward Action:CCC_OnTagApplied(client); + +/** + * Called when a client's name is about to be tagged + * DO NOT START A NEW USERMESSAGE (i.e. PrintToChat, PrintToChatAll) WITHIN THIS FORWARD + * + * @param client Client index + * @param message Chat message that will be printed + * @param type What type of color will be applied. If this is CCC_TagColor, it controls whether the tag will be applied at all, not whether the tag will be colored. + * @return Plugin_Handled to prevent coloring, Plugin_Continue to allow coloring + */ +//forward Action:CCC_OnColor(client, const String:message[], CCC_ColorType:type); + +/** + * Called when a message has been fully colored and will be sent, unless further plugins modify it through Simple Chat Processor + * + * @param client Recieving client index + * @param author Author client index + * @param message Message + * @return Plugin_Handled to block message, Plugin_Continue to allow message + */ +forward Action CCC_OnChatMessage(int client, int author, const char[] message); + +/** + * Called when a client's colors and tag are about to be loaded from the config file + * At this point, the client has NO COLORS + * + * @param client Client index + * @return Plugin_Handled or Plugin_Stop to prevent loading, Plugin_Continue or Plugin_Changed to allow + */ +forward Action CCC_OnUserConfigPreLoaded(int client); + +/** + * Called when a client's colors and tag have been loaded from the config file + * + * @param client Client index + * @noreturn + */ +forward void CCC_OnUserConfigLoaded(int client); + +/** + * Called when the configuration file is reloaded with the sm_reloadccc command + * + * @noreturn + */ +forward void CCC_OnConfigReloaded(); + +native int CCC_UpdateIgnoredArray(bool IgnoredArray[(MAXPLAYERS + 1) * (MAXPLAYERS + 1)]); + +public SharedPlugin __pl_ccc = +{ + name = "ccc", + file = "custom-chatcolors.smx", +#if defined REQUIRE_PLUGIN + required = 1 +#else + required = 0 +#endif +}; + +#if !defined REQUIRE_PLUGIN +public __pl_ccc_SetNTVOptional() { + MarkNativeAsOptional("CCC_GetColor"); + MarkNativeAsOptional("CCC_SetColor"); + MarkNativeAsOptional("CCC_GetTag"); + MarkNativeAsOptional("CCC_ResetTag"); + MarkNativeAsOptional("CCC_ResetColor"); + MarkNativeAsOptional("CCC_ResetTag"); + MarkNativeAsOptional("CCC_UpdateIgnoredArray"); +} +#endif