HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3.  
  4. #if AMXX_VERSION_NUM < 183
  5. #include <dhudmessage>
  6. #endif
  7.  
  8. #define PLUGIN_VERSION "2.1"
  9. #define SYM_SUBSTRING "%s"
  10. #define SYM_NEWLINE "%n"
  11.  
  12. enum _:Cvars
  13. {
  14. CVAR_XPOS,
  15. CVAR_YPOS,
  16. CVAR_EFFECTS,
  17. CVAR_FXTIME,
  18. CVAR_HOLDTIME,
  19. CVAR_FADEINTIME,
  20. CVAR_FADEOUTTIME
  21. }
  22.  
  23. enum
  24. {
  25. TYPE_CHAT,
  26. TYPE_CENTER,
  27. TYPE_HUD,
  28. TYPE_DHUD
  29. }
  30.  
  31. #define TRIE_MESSAGES 0
  32. #define TRIE_TYPE 1
  33. #define TRIE_COLORS 2
  34. #define TRIE_AUDIO 3
  35.  
  36. new g_iSayText
  37. new g_eCvars[Cvars]
  38. new Trie:g_eTries[4]
  39.  
  40. public plugin_init()
  41. {
  42. register_plugin("Win Messages & Sounds", PLUGIN_VERSION, "OciXCrom")
  43. register_cvar("WinMessages", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
  44. register_message(get_user_msgid("TextMsg"), "msgTextMsg")
  45. register_message(get_user_msgid("SendAudio"), "msgSendAudio")
  46. g_iSayText = get_user_msgid("SayText")
  47.  
  48. g_eCvars[CVAR_XPOS] = register_cvar("winmsg_hud_xpos", "-1.0")
  49. g_eCvars[CVAR_YPOS] = register_cvar("winmsg_hud_ypos", "0.10")
  50. g_eCvars[CVAR_EFFECTS] = register_cvar("winmsg_hud_effects", "0")
  51. g_eCvars[CVAR_FXTIME] = register_cvar("winmsg_hud_fxtime", "2.0")
  52. g_eCvars[CVAR_HOLDTIME] = register_cvar("winmsg_hud_holdtime", "5.0")
  53. g_eCvars[CVAR_FADEINTIME] = register_cvar("winmsg_hud_fadeintime", "0.5")
  54. g_eCvars[CVAR_FADEOUTTIME] = register_cvar("winmsg_hud_fadeouttime", "1.0")
  55. }
  56.  
  57. public plugin_precache()
  58. {
  59. for(new i; i < sizeof(g_eTries); i++)
  60. g_eTries[i] = TrieCreate()
  61.  
  62. fileRead()
  63. }
  64.  
  65. public plugin_end()
  66. {
  67. for(new i; i < sizeof(g_eTries); i++)
  68. TrieDestroy(g_eTries[i])
  69. }
  70.  
  71. fileRead()
  72. {
  73. new szConfigsName[256], szFilename[256]
  74. get_configsdir(szConfigsName, charsmax(szConfigsName))
  75. formatex(szFilename, charsmax(szFilename), "%s/WinMessages.ini", szConfigsName)
  76. new iFilePointer = fopen(szFilename, "rt")
  77.  
  78. if(iFilePointer)
  79. {
  80. new szData[256], szMessage[64], szNewMessage[128], szType[4], szColors[12], iType
  81.  
  82. while(!feof(iFilePointer))
  83. {
  84. fgets(iFilePointer, szData, charsmax(szData))
  85. trim(szData)
  86.  
  87. switch(szData[0])
  88. {
  89. case EOS, ';': continue
  90. case '#':
  91. {
  92. parse(szData, szMessage, charsmax(szMessage), szNewMessage, charsmax(szNewMessage), szType, charsmax(szType), szColors, charsmax(szColors))
  93. TrieSetString(g_eTries[TRIE_MESSAGES], szMessage, szNewMessage)
  94.  
  95. switch(szType[2])
  96. {
  97. case 'A', 'a': iType = TYPE_CHAT
  98. case 'N', 'n': iType = TYPE_CENTER
  99. case 'D', 'd': iType = TYPE_HUD
  100. case 'U', 'u': iType = TYPE_DHUD
  101. }
  102.  
  103. TrieSetCell(g_eTries[TRIE_TYPE], szMessage, iType)
  104.  
  105. if(iType == TYPE_HUD || iType == TYPE_DHUD)
  106. TrieSetString(g_eTries[TRIE_COLORS], szMessage, szColors)
  107.  
  108. szNewMessage[0] = EOS
  109. }
  110. case '%':
  111. {
  112. parse(szData, szMessage, charsmax(szMessage), szNewMessage, charsmax(szNewMessage))
  113. TrieSetString(g_eTries[TRIE_AUDIO], szMessage, szNewMessage)
  114.  
  115. if(!is_blank(szNewMessage))
  116. precache_sound(szNewMessage)
  117.  
  118. szNewMessage[0] = EOS
  119. }
  120. }
  121. }
  122.  
  123. fclose(iFilePointer)
  124. }
  125. }
  126.  
  127. public msgTextMsg(iMessage, iDest, id)
  128. {
  129. static szMessage[64]
  130. get_msg_arg_string(2, szMessage, charsmax(szMessage))
  131.  
  132. if(TrieKeyExists(g_eTries[TRIE_MESSAGES], szMessage))
  133. {
  134. new szNewMessage[128], iType
  135. TrieGetString(g_eTries[TRIE_MESSAGES], szMessage, szNewMessage, charsmax(szNewMessage))
  136. TrieGetCell(g_eTries[TRIE_TYPE], szMessage, iType)
  137.  
  138. new iArgs = get_msg_args()
  139.  
  140. if(iArgs > 2)
  141. {
  142. for(new szSubString[32], i = 2; i < iArgs; i++)
  143. {
  144. get_msg_arg_string(i + 1, szSubString, charsmax(szSubString))
  145. replace(szNewMessage, charsmax(szNewMessage), SYM_SUBSTRING, szSubString)
  146. }
  147. }
  148.  
  149. replace_all(szNewMessage, charsmax(szNewMessage), SYM_SUBSTRING, "")
  150. replace_all(szNewMessage, charsmax(szNewMessage), SYM_NEWLINE, "^n")
  151.  
  152. switch(iType)
  153. {
  154. case TYPE_CHAT: ColorChat(id, szNewMessage)
  155. case TYPE_CENTER: client_print(id, print_center, szNewMessage)
  156. case TYPE_HUD, TYPE_DHUD:
  157. {
  158. new szColors[12], szRed[4], szGreen[4], szBlue[4], iRed, iGreen, iBlue
  159. TrieGetString(g_eTries[TRIE_COLORS], szMessage, szColors, charsmax(szColors))
  160. parse(szColors, szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue))
  161. iRed = is_random(szRed) ? random(256) : str_to_num(szRed)
  162. iGreen = is_random(szGreen) ? random(256) : str_to_num(szGreen)
  163. iBlue = is_random(szBlue) ? random(256) : str_to_num(szBlue)
  164.  
  165. switch(iType)
  166. {
  167. case TYPE_HUD:
  168. {
  169. set_hudmessage(iRed, iGreen, iBlue, get_pcvar_float(g_eCvars[CVAR_XPOS]), get_pcvar_float(g_eCvars[CVAR_YPOS]), get_pcvar_num(g_eCvars[CVAR_EFFECTS]),
  170. get_pcvar_float(g_eCvars[CVAR_FXTIME]), get_pcvar_float(g_eCvars[CVAR_HOLDTIME]), get_pcvar_float(g_eCvars[CVAR_FADEINTIME]), get_pcvar_float(g_eCvars[CVAR_FADEOUTTIME]), -1)
  171. show_hudmessage(id, szNewMessage)
  172. }
  173. case TYPE_DHUD:
  174. {
  175. set_dhudmessage(iRed, iGreen, iBlue, get_pcvar_float(g_eCvars[CVAR_XPOS]), get_pcvar_float(g_eCvars[CVAR_YPOS]), get_pcvar_num(g_eCvars[CVAR_EFFECTS]),
  176. get_pcvar_float(g_eCvars[CVAR_FXTIME]), get_pcvar_float(g_eCvars[CVAR_HOLDTIME]), get_pcvar_float(g_eCvars[CVAR_FADEINTIME]), get_pcvar_float(g_eCvars[CVAR_FADEOUTTIME]))
  177. show_dhudmessage(id, szNewMessage)
  178. }
  179. }
  180. }
  181. }
  182.  
  183. return PLUGIN_HANDLED
  184. }
  185.  
  186. return PLUGIN_CONTINUE
  187. }
  188.  
  189. public msgSendAudio(MsgId, MsgDest, MsgEntity)
  190. {
  191. static szMessage[32]
  192. get_msg_arg_string(2, szMessage, charsmax(szMessage))
  193.  
  194. if(TrieKeyExists(g_eTries[TRIE_AUDIO], szMessage))
  195. {
  196. new szNewMessage[128]
  197. TrieGetString(g_eTries[TRIE_AUDIO], szMessage, szNewMessage, charsmax(szNewMessage))
  198.  
  199. if(!is_blank(szNewMessage))
  200. client_cmd(0, "spk %s", szNewMessage)
  201.  
  202. return PLUGIN_HANDLED
  203. }
  204.  
  205. return PLUGIN_CONTINUE
  206. }
  207.  
  208. bool:is_blank(szString[])
  209. return szString[0] == EOS ? true : false
  210.  
  211. bool:is_random(szString[])
  212. return szString[0] == 'R' ? true : false
  213.  
  214. ColorChat(const id, const szInput[], any:...)
  215. {
  216. new iPlayers[32], iCount = 1
  217. static szMessage[191]
  218. vformat(szMessage, charsmax(szMessage), szInput, 3)
  219.  
  220. replace_all(szMessage, charsmax(szMessage), "!g", "^4")
  221. replace_all(szMessage, charsmax(szMessage), "!n", "^1")
  222. replace_all(szMessage, charsmax(szMessage), "!t", "^3")
  223.  
  224. if(id)
  225. iPlayers[0] = id
  226. else
  227. get_players(iPlayers, iCount, "ch")
  228.  
  229. for(new i; i < iCount; i++)
  230. {
  231. if(is_user_connected(iPlayers[i]))
  232. {
  233. message_begin(MSG_ONE_UNRELIABLE, g_iSayText, _, iPlayers[i])
  234. write_byte(iPlayers[i])
  235. write_string(szMessage)
  236. message_end()
  237. }
  238. }
  239. }