HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <csx>
  4.  
  5. #if AMXX_VERSION_NUM < 183
  6. #include <dhudmessage>
  7. #endif
  8.  
  9. #define PLUGIN_VERSION "2.1"
  10. #define SYM_NEWLINE "%n%"
  11.  
  12. enum
  13. {
  14. RED = 0,
  15. GREEN,
  16. BLUE
  17. }
  18.  
  19. enum
  20. {
  21. HUD = 0,
  22. DHUD,
  23. CENTER
  24. }
  25.  
  26. enum _:RegisteredCvars
  27. {
  28. CVAR_STYLE,
  29. CVAR_RANDOM,
  30. CVAR_YELLOW,
  31. CVAR_RED,
  32. CVAR_XPOS,
  33. CVAR_YPOS,
  34. CVAR_TYPE,
  35. CVAR_ORIGINAL
  36. }
  37.  
  38. enum _:CvarValues
  39. {
  40. CV_STYLE,
  41. bool:CV_RANDOM,
  42. CV_YELLOW,
  43. CV_RED,
  44. Float:CV_XPOS,
  45. Float:CV_YPOS,
  46. CV_TYPE,
  47. CV_ORIGINAL
  48. }
  49.  
  50. enum _:Styles
  51. {
  52. Begin[64],
  53. Add[20],
  54. End[20],
  55. ReplaceSymbol[20],
  56. ReplaceWith[20],
  57. bool:DoReplace
  58. }
  59.  
  60. new g_eRegisteredCvars[RegisteredCvars]
  61. new g_eCvarValues[CvarValues]
  62. new g_eTimer[Styles]
  63. new Array:g_aStyles
  64.  
  65. new g_szTimer[128], g_iCurrentTimer, g_iMessage
  66. new bool:g_bPlanted
  67. new g_iStyles
  68.  
  69. public plugin_init()
  70. {
  71. register_plugin("Style C4 Timer", PLUGIN_VERSION, "OciXCrom")
  72. register_cvar("StyleC4Timer", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
  73. register_logevent("RemoveTimer", 2, "1=Round_Start")
  74. register_logevent("RemoveTimer", 2, "1=Round_End")
  75. register_logevent("RemoveTimer", 2, "1&Restart_Round_")
  76. g_aStyles = ArrayCreate(Styles)
  77.  
  78. g_eRegisteredCvars[CVAR_STYLE] = register_cvar("c4timer_style", "1")
  79. g_eRegisteredCvars[CVAR_RANDOM] = register_cvar("c4timer_random", "0")
  80. g_eRegisteredCvars[CVAR_YELLOW] = register_cvar("c4timer_yellow", "10")
  81. g_eRegisteredCvars[CVAR_RED] = register_cvar("c4timer_red", "5")
  82. g_eRegisteredCvars[CVAR_XPOS] = register_cvar("c4timer_xpos", "-1.0")
  83. g_eRegisteredCvars[CVAR_YPOS] = register_cvar("c4timer_ypos", "0.80")
  84. g_eRegisteredCvars[CVAR_TYPE] = register_cvar("c4timer_type", "0")
  85. g_eRegisteredCvars[CVAR_ORIGINAL] = get_cvar_pointer("mp_c4timer")
  86.  
  87. g_iMessage = CreateHudSyncObj()
  88. ReadFile()
  89. }
  90.  
  91. public plugin_end()
  92. ArrayDestroy(g_aStyles)
  93.  
  94. ReadFile()
  95. {
  96. new szConfigsName[256], szFilename[256]
  97. get_configsdir(szConfigsName, charsmax(szConfigsName))
  98. formatex(szFilename, charsmax(szFilename), "%s/C4Styles.ini", szConfigsName)
  99. new iFilePointer = fopen(szFilename, "rt")
  100.  
  101. if(iFilePointer)
  102. {
  103. new szData[96], szKey[32], szValue[64]
  104. new eStyle[Styles]
  105.  
  106. while(!feof(iFilePointer))
  107. {
  108. fgets(iFilePointer, szData, charsmax(szData))
  109. trim(szData)
  110.  
  111. switch(szData[0])
  112. {
  113. case EOS, ';': continue
  114. case '{': g_iStyles++
  115. case '}':
  116. {
  117. eStyle[DoReplace] = !is_blank(eStyle[Add])
  118. ArrayPushArray(g_aStyles, eStyle)
  119.  
  120. eStyle[Begin][0] = EOS
  121. eStyle[Add][0] = EOS
  122. eStyle[End][0] = EOS
  123. eStyle[ReplaceSymbol][0] = EOS
  124. eStyle[ReplaceWith][0] = EOS
  125. }
  126. default:
  127. {
  128. replace_all(szData, charsmax(szData), SYM_NEWLINE, "^n")
  129. strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), ':')
  130. trim(szKey); trim(szValue); remove_quotes(szValue)
  131.  
  132. if(equali(szKey, "begin"))
  133. copy(eStyle[Begin], charsmax(eStyle[Begin]), szValue)
  134. else if(equali(szKey, "add"))
  135. copy(eStyle[Add], charsmax(eStyle[Add]), szValue)
  136. else if(equali(szKey, "end"))
  137. copy(eStyle[End], charsmax(eStyle[End]), szValue)
  138. else if(equali(szKey, "replace symbol"))
  139. copy(eStyle[ReplaceSymbol], charsmax(eStyle[ReplaceSymbol]), szValue)
  140. else if(equali(szKey, "replace with"))
  141. copy(eStyle[ReplaceWith], charsmax(eStyle[ReplaceWith]), szValue)
  142. }
  143. }
  144. }
  145.  
  146. fclose(iFilePointer)
  147. }
  148. }
  149.  
  150. public bomb_planted()
  151. {
  152. CheckCvars()
  153. g_bPlanted = true
  154. g_iCurrentTimer = g_eCvarValues[CV_ORIGINAL]
  155. FormTimer()
  156. DisplayTimer()
  157. }
  158.  
  159. public bomb_defused()
  160. RemoveTimer()
  161.  
  162. public bomb_explode()
  163. RemoveTimer()
  164.  
  165. CheckCvars()
  166. {
  167. g_eCvarValues[CV_STYLE] = clamp(get_pcvar_num(g_eRegisteredCvars[CVAR_STYLE]), 0, g_iStyles)
  168. g_eCvarValues[CV_RANDOM] = bool:get_pcvar_num(g_eRegisteredCvars[CVAR_RANDOM])
  169. g_eCvarValues[CV_YELLOW] = get_pcvar_num(g_eRegisteredCvars[CVAR_YELLOW])
  170. g_eCvarValues[CV_RED] = get_pcvar_num(g_eRegisteredCvars[CVAR_RED])
  171. g_eCvarValues[CV_XPOS] = _:get_pcvar_float(g_eRegisteredCvars[CVAR_XPOS])
  172. g_eCvarValues[CV_YPOS] = _:get_pcvar_float(g_eRegisteredCvars[CVAR_YPOS])
  173. g_eCvarValues[CV_TYPE] = get_pcvar_num(g_eRegisteredCvars[CVAR_TYPE])
  174. g_eCvarValues[CV_ORIGINAL] = get_pcvar_num(g_eRegisteredCvars[CVAR_ORIGINAL])
  175.  
  176. ArrayGetArray(g_aStyles, g_eCvarValues[CV_STYLE], g_eTimer)
  177. }
  178.  
  179. FormTimer()
  180. {
  181. ClearTimer()
  182.  
  183. if(g_eTimer[DoReplace])
  184. {
  185. AddToTimer(g_eTimer[Begin])
  186.  
  187. for(new i; i < g_iCurrentTimer; i++)
  188. AddToTimer(g_eTimer[Add])
  189.  
  190. AddToTimer(g_eTimer[End])
  191. }
  192. else
  193. formatex(g_szTimer, charsmax(g_szTimer), g_eTimer[Begin], g_iCurrentTimer)
  194. }
  195.  
  196. UpdateTimer()
  197. {
  198. if(g_eTimer[DoReplace])
  199. ReplaceInTimer(g_eTimer[ReplaceSymbol], g_eTimer[ReplaceWith])
  200. else
  201. formatex(g_szTimer, charsmax(g_szTimer), g_eTimer[Begin], g_iCurrentTimer)
  202. }
  203.  
  204. ClearTimer()
  205. g_szTimer[0] = EOS
  206.  
  207. AddToTimer(const szString[])
  208. add(g_szTimer, charsmax(g_szTimer), szString)
  209.  
  210. ReplaceInTimer(const szString[], const szString2[])
  211. replace(g_szTimer, charsmax(g_szTimer), szString, szString2)
  212.  
  213. public DisplayTimer()
  214. {
  215. if(g_bPlanted)
  216. {
  217. if(g_iCurrentTimer >= 0)
  218. {
  219. switch(g_eCvarValues[CV_TYPE])
  220. {
  221. case HUD:
  222. {
  223. new iColor[3]; GetColors(iColor)
  224. set_hudmessage(iColor[0], iColor[1], iColor[2], g_eCvarValues[CV_XPOS], g_eCvarValues[CV_YPOS], 0, 1.0, 1.0, 0.01, 0.01)
  225. ShowSyncHudMsg(0, g_iMessage, g_szTimer, g_iCurrentTimer)
  226. }
  227. case DHUD:
  228. {
  229. new iColor[3]; GetColors(iColor)
  230. set_dhudmessage(iColor[0], iColor[1], iColor[2], g_eCvarValues[CV_XPOS], g_eCvarValues[CV_YPOS], 0, 1.0, 1.0, 0.01, 0.01)
  231. show_dhudmessage(0, g_szTimer, g_iCurrentTimer)
  232. }
  233. case CENTER: client_print(0, print_center, g_szTimer, g_iCurrentTimer)
  234. }
  235.  
  236. g_iCurrentTimer--
  237.  
  238. UpdateTimer()
  239. set_task(1.0, "DisplayTimer")
  240. }
  241. }
  242. }
  243.  
  244. public RemoveTimer()
  245. {
  246. if(g_bPlanted)
  247. {
  248. g_bPlanted = false
  249. g_iCurrentTimer = -1
  250. }
  251. }
  252.  
  253. GetColors(iColor[3])
  254. {
  255. if(g_eCvarValues[CV_RANDOM])
  256. {
  257. for(new i; i < BLUE; i++)
  258. iColor[i] = random(256)
  259. }
  260. else
  261. {
  262. if(g_iCurrentTimer > g_eCvarValues[CV_YELLOW]) iColor[GREEN] = 100
  263. else if(g_iCurrentTimer > g_eCvarValues[CV_RED])
  264. {
  265. iColor[RED] = 255
  266. iColor[GREEN] = 255
  267. }
  268. else iColor[RED] = 255
  269. }
  270. }
  271.  
  272. bool:is_blank(szString[])
  273. return szString[0] == EOS