HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* Copyright © 2009, ConnorMcLeod
  2.  
  3. C4 Sprites Timer is free software;
  4. you can redistribute it and/or modify it under the terms of the
  5. GNU General Public License as published by the Free Software Foundation.
  6.  
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11.  
  12. You should have received a copy of the GNU General Public License
  13. along with C4 Sprites Timer; if not, write to the
  14. Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  15. Boston, MA 02111-1307, USA.
  16. */
  17.  
  18. #include <amxmodx>
  19. #include <engine>
  20. #include <fakemeta>
  21. #include <hamsandwich>
  22.  
  23. #define PLUGIN "C4 Sprites Timer"
  24. #define AUTHOR "ConnorMcLeod"
  25. #define VERSION "0.1.0"
  26.  
  27. #define SPRITE_DIST 36 // min = ~32
  28. new const SPRITE_NAME[] = "sprites/c4_sprites/clock_digits.spr"
  29.  
  30. const OFFSET_C4_EXPLODE_TIME = 100
  31.  
  32. new g_iC4
  33. new g_iSprite
  34. new g_iSprite2
  35. new HamHook:g_HhGrenadeThink
  36.  
  37. forward bomb_defused(defuser)
  38.  
  39. new g_iUnits = -1
  40. new g_iDozen = -1
  41.  
  42. new Float:g_flExplodeTime
  43.  
  44. new g_pCvarSpriteScale, g_pCvarEnable
  45.  
  46. public plugin_precache()
  47. {
  48. precache_model(SPRITE_NAME)
  49. precache_sound("c4_misc/planted1.wav")
  50. }
  51.  
  52. public plugin_init()
  53. {
  54. register_plugin(PLUGIN, VERSION, AUTHOR)
  55.  
  56. g_pCvarEnable = register_cvar("c4_sprite_timer", "1")
  57. g_pCvarSpriteScale = register_cvar("c4_sprite_scale", "0.6")
  58.  
  59. if( find_ent_by_class(FM_NULLENT, "func_bomb_target") || find_ent_by_class(FM_NULLENT, "info_bomb_target") )
  60. {
  61. g_HhGrenadeThink = RegisterHam(Ham_Think, "grenade", "C4_Think", 1)
  62.  
  63. register_event("HLTV", "StopHook", "a", "1=0", "2=0")
  64. register_logevent("StopHook", 2, "1=Round_End")
  65.  
  66. register_logevent("StartHook", 3, "2=Planted_The_Bomb")
  67.  
  68. StopHook()
  69. }
  70. }
  71. public bomb_planted(id)
  72. {
  73. new plantername[32]
  74. get_user_name(id,plantername,31)
  75. set_hudmessage(255, 0, 0, -1.0, 0.2, 1, 6.0, 6.0)
  76. show_hudmessage(0, "%s elesitette a bombat!", plantername)
  77. emit_sound(0,CHAN_AUTO,"c4_misc/planted1.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM);
  78. }
  79. public bomb_defused(id)
  80. {
  81. new defusedname[32]
  82. get_user_name(id,defusedname,31)
  83. set_hudmessage(0, 255, 255, 0.3, 0.4, 0, 6.0, 12.0)
  84. show_hudmessage(0, "%s elharitotta a bomba robbanast", defusedname)
  85. }
  86. public StopHook()
  87. {
  88. g_iC4 = 0
  89. g_iUnits = -1
  90. g_iDozen = -1
  91. DisableHamForward( g_HhGrenadeThink )
  92. if( g_iSprite )
  93. {
  94. entity_set_int(g_iSprite, EV_INT_flags, FL_KILLME)
  95. g_iSprite = 0
  96. }
  97.  
  98. if( g_iSprite2 )
  99. {
  100. entity_set_int(g_iSprite2, EV_INT_flags, FL_KILLME)
  101. g_iSprite2 = 0
  102. }
  103. }
  104.  
  105. public StartHook()
  106. {
  107. if( !get_pcvar_num(g_pCvarEnable) )
  108. {
  109. return
  110. }
  111.  
  112. new iC4 = FM_NULLENT
  113. new const grenade[] = "grenade"
  114. new const env_sprite[] = "env_sprite"
  115. while( (iC4 = find_ent_by_class(iC4, grenade)) )
  116. {
  117. if( get_pdata_int(iC4, 96, 5) & (1<<8) )
  118. {
  119. g_iC4 = iC4
  120. g_flExplodeTime = get_pdata_float(g_iC4, OFFSET_C4_EXPLODE_TIME, 5)
  121. EnableHamForward( g_HhGrenadeThink )
  122.  
  123. new Float:flOrigin[3], Float:flGround[3]
  124.  
  125. entity_get_vector(iC4, EV_VEC_origin, flOrigin)
  126.  
  127. flGround[0] = flOrigin[0]
  128. flGround[1] = flOrigin[1]
  129. flGround[2] = flOrigin[2] - 9999.9
  130.  
  131. trace_line(FM_NULLENT, flOrigin, flGround, flGround)
  132.  
  133. new Float:flScale = get_pcvar_float(g_pCvarSpriteScale)
  134.  
  135. if( ( g_iSprite = create_entity(env_sprite) ) )
  136. {
  137. entity_set_string(g_iSprite, EV_SZ_model, SPRITE_NAME)
  138. flGround[2] += max( floatround( SPRITE_DIST * flScale ) , 20 )
  139. entity_set_vector(g_iSprite, EV_VEC_origin, flGround)
  140. entity_set_float(g_iSprite, EV_FL_scale, flScale)
  141. DispatchSpawn(g_iSprite)
  142. }
  143.  
  144. if( ( g_iSprite2 = create_entity(env_sprite) ) )
  145. {
  146. entity_set_string(g_iSprite2, EV_SZ_model, SPRITE_NAME)
  147. flGround[2] += floatround( SPRITE_DIST * flScale )
  148. entity_set_vector(g_iSprite2, EV_VEC_origin, flGround)
  149. entity_set_float(g_iSprite2, EV_FL_scale, flScale)
  150. DispatchSpawn(g_iSprite2)
  151. }
  152. return
  153. }
  154. }
  155. }
  156.  
  157. public C4_Think( iC4 )
  158. {
  159. if( g_iC4 != iC4 )
  160. {
  161. return
  162. }
  163.  
  164. static Float:flTime, iTime, iUnits, iDozen
  165.  
  166. flTime = g_flExplodeTime - get_gametime()
  167. iTime = floatround(flTime, floatround_ceil)
  168. iUnits = iTime % 10
  169. iDozen = (iTime - iUnits) / 10
  170.  
  171. if( g_iSprite && g_iUnits != iUnits )
  172. {
  173. g_iUnits = iUnits
  174. entity_set_float(g_iSprite, EV_FL_frame, 0.0 + iUnits)
  175. }
  176.  
  177. if( g_iSprite2 && g_iDozen != iDozen)
  178. {
  179. g_iDozen = iDozen
  180. if( !iDozen )
  181. {
  182. entity_set_int(g_iSprite2, EV_INT_flags, FL_KILLME)
  183. g_iSprite2 = 0
  184. }
  185. else
  186. {
  187. entity_set_float(g_iSprite2, EV_FL_frame, 0.0 + iDozen)
  188. }
  189. }
  190. }