SHARE
TWEET

prefix

a guest Jun 19th, 2017 51 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cromchat>
  4. #include <cstrike>
  5.  
  6. #define PLUGIN_VERSION "3.2"
  7. #define DELAY_ON_CONNECT 1.0
  8. #define DELAY_ON_CHANGE 0.1
  9. #define MAX_ARG_SIZE 20
  10.  
  11. enum
  12. {
  13.     SECTION_NONE,
  14.     SECTION_SETTINGS,
  15.     SECTION_ADMIN_PREFIXES,
  16.     SECTION_CHAT_COLORS,
  17.     SECTION_NAME_IP_STEAM
  18. }
  19.  
  20. enum _:Settings
  21. {
  22.     ADMIN_LISTEN_FLAGS[32],
  23.     DEAD_PREFIX[32],
  24.     ALIVE_PREFIX[32],
  25.     TEAM_PREFIX_T[32],
  26.     TEAM_PREFIX_CT[32],
  27.     TEAM_PREFIX_SPEC[32],
  28.     FORMAT_TIME[64],
  29.     FORMAT_SAY[128],
  30.     FORMAT_SAY_TEAM[128]
  31. }
  32.  
  33. enum _:Args
  34. {
  35.     ARG_ADMIN_PREFIX[MAX_ARG_SIZE],
  36.     ARG_DEAD_PREFIX[MAX_ARG_SIZE],
  37.     ARG_TEAM[MAX_ARG_SIZE],
  38.     ARG_NAME[MAX_ARG_SIZE],
  39.     ARG_IP[MAX_ARG_SIZE],
  40.     ARG_STEAM[MAX_ARG_SIZE],
  41.     ARG_USERID[MAX_ARG_SIZE],
  42.     ARG_CHAT_COLOR[MAX_ARG_SIZE],
  43.     ARG_MESSAGE[MAX_ARG_SIZE],
  44.     ARG_TIME[MAX_ARG_SIZE]
  45. }
  46.  
  47. enum _:PlayerData
  48. {
  49.     PDATA_NAME[32],
  50.     PDATA_NAME_LOWER[32],
  51.     PDATA_IP[16],
  52.     PDATA_STEAM[35],
  53.     PDATA_USERID[10],
  54.     PDATA_PREFIX[32],
  55.     PDATA_CHAT_COLOR[6],
  56.     bool:PDATA_ADMIN_LISTEN
  57. }
  58.  
  59. new const g_eArgs[Args] = { "%admin_prefix%", "%dead_prefix%", "%team%", "%name%", "%ip%", "%steam%", "%userid%", "%chat_color%", "%message%", "%time%" }
  60.  
  61. new g_eSettings[Settings],
  62.     g_ePlayerData[33][PlayerData],
  63.     Array:g_aAdminFlags,
  64.     Array:g_aAdminPrefixes,
  65.     Array:g_aChatColors,
  66.     Array:g_aChatColorsFlags,
  67.     Trie:g_tName,
  68.     Trie:g_tIP,
  69.     Trie:g_tSteam,
  70.     Trie:g_tBlockFirst,
  71.     g_iAdminPrefixes,
  72.     g_iChatColors
  73.  
  74. public plugin_init()
  75. {
  76.     register_plugin("Chat Manager", PLUGIN_VERSION, "OciXCrom")
  77.     register_cvar("ChatManager", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
  78.     register_clcmd("say", "Hook_Say")
  79.     register_clcmd("say_team", "Hook_Say")
  80.     g_aAdminFlags = ArrayCreate(32)
  81.     g_aAdminPrefixes = ArrayCreate(32)
  82.     g_aChatColors = ArrayCreate(6)
  83.     g_aChatColorsFlags = ArrayCreate(32)
  84.     g_tBlockFirst = TrieCreate()
  85.     g_tName = TrieCreate()
  86.     g_tIP = TrieCreate()
  87.     g_tSteam = TrieCreate()
  88.     ReadFile()
  89. }
  90.  
  91. public plugin_end()
  92. {
  93.     ArrayDestroy(g_aAdminFlags)
  94.     ArrayDestroy(g_aAdminPrefixes)
  95.     ArrayDestroy(g_aChatColors)
  96.     ArrayDestroy(g_aChatColorsFlags)
  97.     TrieDestroy(g_tBlockFirst)
  98.     TrieDestroy(g_tName)
  99.     TrieDestroy(g_tIP)
  100.     TrieDestroy(g_tSteam)
  101. }
  102.  
  103. public client_putinserver(id)
  104. {
  105.     get_user_name(id, g_ePlayerData[id][PDATA_NAME], charsmax(g_ePlayerData[][PDATA_NAME]))
  106.     copy(g_ePlayerData[id][PDATA_NAME_LOWER], charsmax(g_ePlayerData[][PDATA_NAME_LOWER]), g_ePlayerData[id][PDATA_NAME])
  107.     strtolower(g_ePlayerData[id][PDATA_NAME_LOWER])
  108.     get_user_ip(id, g_ePlayerData[id][PDATA_IP], charsmax(g_ePlayerData[][PDATA_IP]), 1)
  109.     get_user_authid(id, g_ePlayerData[id][PDATA_STEAM], charsmax(g_ePlayerData[][PDATA_STEAM]))
  110.     num_to_str(get_user_userid(id), g_ePlayerData[id][PDATA_USERID], charsmax(g_ePlayerData[][PDATA_USERID]))
  111.     set_task(DELAY_ON_CONNECT, "UpdateData", id)
  112. }
  113.    
  114. public client_infochanged(id)
  115. {
  116.     if(!is_user_connected(id))
  117.         return
  118.        
  119.     static szNewName[32]
  120.     get_user_info(id, "name", szNewName, charsmax(szNewName))
  121.    
  122.     if(!equal(szNewName, g_ePlayerData[id][PDATA_NAME]))
  123.     {
  124.         copy(g_ePlayerData[id][PDATA_NAME], charsmax(g_ePlayerData[][PDATA_NAME]), szNewName)
  125.         copy(g_ePlayerData[id][PDATA_NAME_LOWER], charsmax(g_ePlayerData[][PDATA_NAME_LOWER]), szNewName)
  126.         strtolower(g_ePlayerData[id][PDATA_NAME_LOWER])
  127.         set_task(DELAY_ON_CHANGE, "UpdateData", id)
  128.     }
  129. }
  130.    
  131. public UpdateData(id)
  132. {
  133.     if(g_iChatColors)
  134.     {
  135.         g_ePlayerData[id][PDATA_CHAT_COLOR][0] = EOS
  136.        
  137.         for(new szFlags[32], i; i < g_iChatColors; i++)
  138.         {
  139.             ArrayGetString(g_aChatColorsFlags, i, szFlags, charsmax(szFlags))
  140.            
  141.             if(has_all_flags(id, szFlags))
  142.             {
  143.                 ArrayGetString(g_aChatColors, i, g_ePlayerData[id][PDATA_CHAT_COLOR], charsmax(g_ePlayerData[][PDATA_CHAT_COLOR]))
  144.                 break
  145.             }
  146.         }
  147.     }
  148.    
  149.     if(g_eSettings[ADMIN_LISTEN_FLAGS][0])
  150.         g_ePlayerData[id][PDATA_ADMIN_LISTEN] = bool:has_all_flags(id, g_eSettings[ADMIN_LISTEN_FLAGS])
  151.        
  152.     g_ePlayerData[id][PDATA_PREFIX][0] = EOS
  153.        
  154.     if(TrieKeyExists(g_tSteam, g_ePlayerData[id][PDATA_STEAM]))
  155.         TrieGetString(g_tSteam, g_ePlayerData[id][PDATA_STEAM], g_ePlayerData[id][PDATA_PREFIX], charsmax(g_ePlayerData[][PDATA_PREFIX]))
  156.     else if(TrieKeyExists(g_tIP, g_ePlayerData[id][PDATA_IP]))
  157.         TrieGetString(g_tIP, g_ePlayerData[id][PDATA_IP], g_ePlayerData[id][PDATA_PREFIX], charsmax(g_ePlayerData[][PDATA_PREFIX]))
  158.     else if(TrieKeyExists(g_tName, g_ePlayerData[id][PDATA_NAME_LOWER]))
  159.         TrieGetString(g_tName, g_ePlayerData[id][PDATA_NAME_LOWER], g_ePlayerData[id][PDATA_PREFIX], charsmax(g_ePlayerData[][PDATA_PREFIX]))
  160.     else if(g_iAdminPrefixes)
  161.     {
  162.         for(new szFlags[32], i; i < g_iAdminPrefixes; i++)
  163.         {
  164.             ArrayGetString(g_aAdminFlags, i, szFlags, charsmax(szFlags))
  165.            
  166.             if(has_all_flags(id, szFlags))
  167.             {
  168.                 ArrayGetString(g_aAdminPrefixes, i, g_ePlayerData[id][PDATA_PREFIX], charsmax(g_ePlayerData[][PDATA_PREFIX]))
  169.                 break
  170.             }
  171.         }
  172.     }
  173. }
  174.  
  175. public Hook_Say(id)
  176. {
  177.     new szArgs[192]
  178.     read_args(szArgs, charsmax(szArgs)); remove_quotes(szArgs)
  179.     CC_RemoveColors(szArgs, charsmax(szArgs))
  180.    
  181.     if(!szArgs[0] || szArgs[0] == '/' || TrieKeyExists(g_tBlockFirst, szArgs[0]))
  182.         return PLUGIN_HANDLED
  183.        
  184.     new szCommand[5]
  185.     read_argv(0, szCommand, charsmax(szCommand))
  186.    
  187.     new szMessage[192], iPlayers[32], iPnum, bool:bTeam = szCommand[3] == '_', iAlive = is_user_alive(id), CsTeams:iTeam = cs_get_user_team(id)
  188.     format_chat_message(bTeam, id, iAlive, iTeam, szArgs, szMessage, charsmax(szMessage))
  189.     get_players(iPlayers, iPnum, "ch")
  190.    
  191.     for(new i, iPlayer; i < iPnum; i++)
  192.     {
  193.         iPlayer = iPlayers[i]
  194.        
  195.         if(g_ePlayerData[iPlayer][PDATA_ADMIN_LISTEN] || iAlive == is_user_alive(iPlayer) || (bTeam && iTeam == cs_get_user_team(iPlayer)))
  196.             CC_SendMatched(iPlayer, id, szMessage)
  197.     }
  198.    
  199.     return PLUGIN_HANDLED
  200. }
  201.  
  202. ReadFile()
  203. {
  204.     new szConfigsName[256], szFilename[256]
  205.     get_configsdir(szConfigsName, charsmax(szConfigsName))
  206.     formatex(szFilename, charsmax(szFilename), "%s/ChatManager.ini", szConfigsName)
  207.    
  208.     new iFilePointer = fopen(szFilename, "rt")
  209.    
  210.     if(iFilePointer)
  211.     {
  212.         new szData[192], szValue[160], szKey[32], szInfo[32], szPrefix[32], iSection = SECTION_NONE, iSize
  213.        
  214.         while(!feof(iFilePointer))
  215.         {
  216.             fgets(iFilePointer, szData, charsmax(szData))
  217.             trim(szData)
  218.            
  219.             switch(szData[0])
  220.             {
  221.                 case EOS, ';': continue
  222.                 case '[':
  223.                 {
  224.                     iSize = strlen(szData)
  225.                    
  226.                     if(szData[iSize - 1] == ']')
  227.                     {
  228.                         switch(szData[1])
  229.                         {
  230.                             case 'S', 's': iSection = SECTION_SETTINGS
  231.                             case 'A', 'a': iSection = SECTION_ADMIN_PREFIXES
  232.                             case 'C', 'c': iSection = SECTION_CHAT_COLORS
  233.                             case 'N', 'n': iSection = SECTION_NAME_IP_STEAM
  234.                             default: iSection = SECTION_NONE
  235.                         }
  236.                     }
  237.                     else continue
  238.                 }
  239.                 default:
  240.                 {
  241.                     if(iSection == SECTION_NONE)
  242.                         continue
  243.                        
  244.                     switch(iSection)
  245.                     {
  246.                         case SECTION_SETTINGS:
  247.                         {
  248.                             strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
  249.                             trim(szKey); trim(szValue)
  250.                                    
  251.                             if(!szValue[0])
  252.                                 continue
  253.                                
  254.                             if(equal(szKey, "ADMIN_LISTEN_FLAGS"))
  255.                                 copy(g_eSettings[ADMIN_LISTEN_FLAGS], charsmax(g_eSettings[ADMIN_LISTEN_FLAGS]), szValue)
  256.                             else if(equal(szKey, "BLOCK_FIRST_SYMBOLS"))
  257.                             {
  258.                                 while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
  259.                                 {
  260.                                     trim(szKey); trim(szValue)
  261.                                     TrieSetCell(g_tBlockFirst, szKey, 1)
  262.                                 }
  263.                             }
  264.                             else if(equal(szKey, "DEAD_PREFIX"))
  265.                                 copy(g_eSettings[DEAD_PREFIX], charsmax(g_eSettings[DEAD_PREFIX]), szValue)
  266.                             else if(equal(szKey, "ALIVE_PREFIX"))
  267.                                 copy(g_eSettings[ALIVE_PREFIX], charsmax(g_eSettings[ALIVE_PREFIX]), szValue)
  268.                             else if(equal(szKey, "TEAM_PREFIX_T"))
  269.                                 copy(g_eSettings[TEAM_PREFIX_T], charsmax(g_eSettings[TEAM_PREFIX_T]), szValue)
  270.                             else if(equal(szKey, "TEAM_PREFIX_CT"))
  271.                                 copy(g_eSettings[TEAM_PREFIX_CT], charsmax(g_eSettings[TEAM_PREFIX_CT]), szValue)
  272.                             else if(equal(szKey, "TEAM_PREFIX_SPEC"))
  273.                                 copy(g_eSettings[TEAM_PREFIX_SPEC], charsmax(g_eSettings[TEAM_PREFIX_SPEC]), szValue)
  274.                             else if(equal(szKey, "FORMAT_TIME"))
  275.                                 copy(g_eSettings[FORMAT_TIME], charsmax(g_eSettings[FORMAT_TIME]), szValue)
  276.                             else if(equal(szKey, "FORMAT_SAY"))
  277.                                 copy(g_eSettings[FORMAT_SAY], charsmax(g_eSettings[FORMAT_SAY]), szValue)
  278.                             else if(equal(szKey, "FORMAT_SAY_TEAM"))
  279.                                 copy(g_eSettings[FORMAT_SAY_TEAM], charsmax(g_eSettings[FORMAT_SAY_TEAM]), szValue)
  280.                         }
  281.                         case SECTION_ADMIN_PREFIXES:
  282.                         {
  283.                             strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
  284.                             trim(szKey); trim(szValue)
  285.                                    
  286.                             if(!szValue[0])
  287.                                 continue
  288.                                
  289.                             ArrayPushString(g_aAdminFlags, szKey)
  290.                             ArrayPushString(g_aAdminPrefixes, szValue)
  291.                             g_iAdminPrefixes++
  292.                         }
  293.                         case SECTION_CHAT_COLORS:
  294.                         {
  295.                             strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
  296.                             trim(szKey); trim(szValue)
  297.                                    
  298.                             if(!szValue[0])
  299.                                 continue
  300.                                
  301.                             ArrayPushString(g_aChatColorsFlags, szKey)
  302.                             ArrayPushString(g_aChatColors, szValue)
  303.                             g_iChatColors++
  304.                         }
  305.                         case SECTION_NAME_IP_STEAM:
  306.                         {
  307.                             parse(szData, szKey, charsmax(szKey), szInfo, charsmax(szInfo), szPrefix, charsmax(szPrefix))
  308.                             {
  309.                                 switch(szKey[0])
  310.                                 {
  311.                                     case 'N', 'n': { strtolower(szInfo); TrieSetString(g_tName, szInfo, szPrefix); }
  312.                                     case 'I', 'i': TrieSetString(g_tIP, szInfo, szPrefix)
  313.                                     case 'S', 's': TrieSetString(g_tSteam, szInfo, szPrefix)
  314.                                 }
  315.                             }
  316.                         }
  317.                     }
  318.                 }
  319.             }
  320.         }
  321.        
  322.         fclose(iFilePointer)
  323.     }
  324. }
  325.  
  326. format_chat_message(const bool:bTeam, const id, const iAlive, const CsTeams:iTeam, const szArgs[], szMessage[], const iLen)
  327. {
  328.     copy(szMessage, iLen, g_eSettings[bTeam ? FORMAT_SAY_TEAM : FORMAT_SAY])
  329.     replace_all(szMessage, iLen, g_eArgs[ARG_ADMIN_PREFIX], g_ePlayerData[id][PDATA_PREFIX])
  330.     replace_all(szMessage, iLen, g_eArgs[ARG_DEAD_PREFIX], g_eSettings[iAlive ? ALIVE_PREFIX : DEAD_PREFIX])
  331.     replace_all(szMessage, iLen, g_eArgs[ARG_TEAM], g_eSettings[iTeam == CS_TEAM_CT ? TEAM_PREFIX_CT : iTeam == CS_TEAM_T ? TEAM_PREFIX_T : TEAM_PREFIX_SPEC])
  332.     replace_all(szMessage, iLen, g_eArgs[ARG_NAME], g_ePlayerData[id][PDATA_NAME])
  333.     replace_all(szMessage, iLen, g_eArgs[ARG_IP], g_ePlayerData[id][PDATA_IP])
  334.     replace_all(szMessage, iLen, g_eArgs[ARG_STEAM], g_ePlayerData[id][PDATA_STEAM])
  335.     replace_all(szMessage, iLen, g_eArgs[ARG_USERID], g_ePlayerData[id][PDATA_USERID])
  336.     replace_all(szMessage, iLen, g_eArgs[ARG_CHAT_COLOR], g_ePlayerData[id][PDATA_CHAT_COLOR])
  337.     replace_all(szMessage, iLen, g_eArgs[ARG_MESSAGE], szArgs) 
  338.     replace_all(szMessage, iLen, g_eArgs[ARG_TIME], get_timestring())
  339.     replace_all(szMessage, iLen, "  ", "")
  340.     trim(szMessage)
  341. }
  342.  
  343. get_timestring()
  344. {
  345.     new szTime[64]
  346.     get_time(g_eSettings[FORMAT_TIME], szTime, charsmax(szTime))
  347.     return szTime
  348. }
  349.  
  350. public plugin_natives()
  351. {
  352.     register_library("chatmanager")
  353.     register_native("cm_get_admin_listen_flags", "_cm_get_admin_listen_flags")
  354.     register_native("cm_get_admin_prefix", "_cm_get_admin_prefix")
  355.     register_native("cm_get_chat_color", "_cm_get_chat_color")
  356.     register_native("cm_get_chat_color_by_num", "_cm_get_chat_color_by_num")
  357.     register_native("cm_get_prefix_by_num", "_cm_get_prefix_by_num")
  358.     register_native("cm_has_user_admin_listen", "_cm_has_user_admin_listen")
  359.     register_native("cm_total_chat_colors", "_cm_total_chat_colors")
  360.     register_native("cm_total_prefixes", "_cm_total_chat_colors")
  361. }
  362.  
  363. public _cm_get_admin_prefix(iPlugin, iParams)
  364.     set_string(2, g_ePlayerData[get_param(1)][PDATA_PREFIX], get_param(3))
  365.    
  366. public _cm_get_chat_color(iPlugin, iParams)
  367.     set_string(2, g_ePlayerData[get_param(1)][PDATA_CHAT_COLOR], get_param(3))
  368.    
  369. public _cm_total_prefixes(iPlugin, iParams)
  370.     return g_iAdminPrefixes
  371.  
  372. public _cm_total_chat_colors(iPlugin, iParams)
  373.     return g_iChatColors
  374.    
  375. public _cm_get_prefix_by_num(iPlugin, iParams)
  376. {
  377.     new iNum = get_param(1)
  378.    
  379.     if(iNum < 0 || iNum >= g_iAdminPrefixes)
  380.         return 0
  381.    
  382.     new szPrefix[32]
  383.     ArrayGetString(g_aAdminPrefixes, iNum, szPrefix, charsmax(szPrefix))
  384.     set_string(2, szPrefix, get_param(3))
  385.     return 1
  386. }
  387.  
  388. public _cm_get_chat_color_by_num(iPlugin, iParams)
  389. {
  390.     new iNum = get_param(1)
  391.    
  392.     if(iNum < 0 || iNum >= g_iChatColors)
  393.         return 0
  394.    
  395.     new szColor[32]
  396.     ArrayGetString(g_aChatColors, iNum, szColor, charsmax(szColor))
  397.     set_string(2, szColor, get_param(3))
  398.     return 1
  399. }
  400.  
  401. public _cm_get_admin_listen_flags(iPlugin, iParams)
  402.     set_string(1, g_eSettings[ADMIN_LISTEN_FLAGS], get_param(2))
  403.    
  404. public bool:_cm_has_user_admin_listen(iPlugin, iParams)
  405.     return g_ePlayerData[get_param(1)][PDATA_ADMIN_LISTEN]
RAW Paste Data
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!
Top