Advertisement
Guest User

prefix

a guest
Jun 19th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.67 KB | None | 0 0
  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]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement