HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <hamsandwich>
  5.  
  6. #define PLUGIN "C4 Sprites Timer"
  7. #define AUTHOR "ConnorMcLeod"
  8. #define VERSION "0.1.0"
  9.  
  10. #define SPRITE_DIST 36 // min = ~32
  11. new const SPRITE_NAME[] = "sprites/c4_sprites/clock_digits.spr"
  12.  
  13. const OFFSET_C4_EXPLODE_TIME = 100
  14.  
  15. new g_iC4
  16. new g_iSprite
  17. new g_iSprite2
  18. new HamHook:g_HhGrenadeThink
  19.  
  20. new g_iUnits = -1
  21. new g_iDozen = -1
  22.  
  23. new Float:g_flExplodeTime
  24.  
  25. new g_pCvarSpriteScale, g_pCvarEnable
  26.  
  27. public plugin_precache()
  28. {
  29. precache_model(SPRITE_NAME)
  30. }
  31.  
  32. public plugin_init()
  33. {
  34. register_plugin(PLUGIN, VERSION, AUTHOR)
  35.  
  36. g_pCvarEnable = register_cvar("c4_sprite_timer", "1")
  37. g_pCvarSpriteScale = register_cvar("c4_sprite_scale", "0.6")
  38.  
  39. if( find_ent_by_class(FM_NULLENT, "func_bomb_target") || find_ent_by_class(FM_NULLENT, "info_bomb_target") )
  40. {
  41. g_HhGrenadeThink = RegisterHam(Ham_Think, "grenade", "C4_Think", 1)
  42.  
  43. register_event("HLTV", "StopHook", "a", "1=0", "2=0")
  44. register_logevent("StopHook", 2, "1=Round_End")
  45.  
  46. register_logevent("StartHook", 3, "2=Planted_The_Bomb")
  47.  
  48. StopHook()
  49. }
  50. }
  51.  
  52. public StopHook()
  53. {
  54. g_iC4 = 0
  55. g_iUnits = -1
  56. g_iDozen = -1
  57. DisableHamForward( g_HhGrenadeThink )
  58. if( g_iSprite )
  59. {
  60. entity_set_int(g_iSprite, EV_INT_flags, FL_KILLME)
  61. g_iSprite = 0
  62. }
  63.  
  64. if( g_iSprite2 )
  65. {
  66. entity_set_int(g_iSprite2, EV_INT_flags, FL_KILLME)
  67. g_iSprite2 = 0
  68. }
  69. }
  70.  
  71. public StartHook()
  72. {
  73. if( !get_pcvar_num(g_pCvarEnable) )
  74. {
  75. return
  76. }
  77.  
  78. new iC4 = FM_NULLENT
  79. new const grenade[] = "grenade"
  80. new const env_sprite[] = "env_sprite"
  81. while( (iC4 = find_ent_by_class(iC4, grenade)) )
  82. {
  83. if( get_pdata_int(iC4, 96, 5) & (1<<8) )
  84. {
  85. g_iC4 = iC4
  86. g_flExplodeTime = get_pdata_float(g_iC4, OFFSET_C4_EXPLODE_TIME, 5)
  87. EnableHamForward( g_HhGrenadeThink )
  88.  
  89. new Float:flOrigin[3], Float:flGround[3]
  90.  
  91. entity_get_vector(iC4, EV_VEC_origin, flOrigin)
  92.  
  93. flGround[0] = flOrigin[0]
  94. flGround[1] = flOrigin[1]
  95. flGround[2] = flOrigin[2] - 9999.9
  96.  
  97. trace_line(FM_NULLENT, flOrigin, flGround, flGround)
  98.  
  99. new Float:flScale = get_pcvar_float(g_pCvarSpriteScale)
  100.  
  101. if( ( g_iSprite = create_entity(env_sprite) ) )
  102. {
  103. entity_set_string(g_iSprite, EV_SZ_model, SPRITE_NAME)
  104. flGround[2] += max( floatround( SPRITE_DIST * flScale ) , 20 )
  105. entity_set_vector(g_iSprite, EV_VEC_origin, flGround)
  106. entity_set_float(g_iSprite, EV_FL_scale, flScale)
  107. DispatchSpawn(g_iSprite)
  108. }
  109.  
  110. if( ( g_iSprite2 = create_entity(env_sprite) ) )
  111. {
  112. entity_set_string(g_iSprite2, EV_SZ_model, SPRITE_NAME)
  113. flGround[2] += floatround( SPRITE_DIST * flScale )
  114. entity_set_vector(g_iSprite2, EV_VEC_origin, flGround)
  115. entity_set_float(g_iSprite2, EV_FL_scale, flScale)
  116. DispatchSpawn(g_iSprite2)
  117. }
  118. return
  119. }
  120. }
  121. }
  122.  
  123. public C4_Think( iC4 )
  124. {
  125. if( g_iC4 != iC4 )
  126. {
  127. return
  128. }
  129.  
  130. static Float:flTime, iTime, iUnits, iDozen
  131.  
  132. flTime = g_flExplodeTime - get_gametime()
  133. iTime = floatround(flTime, floatround_ceil)
  134. iUnits = iTime % 10
  135. iDozen = (iTime - iUnits) / 10
  136.  
  137. if( g_iSprite && g_iUnits != iUnits )
  138. {
  139. g_iUnits = iUnits
  140. entity_set_float(g_iSprite, EV_FL_frame, 0.0 + iUnits)
  141. }
  142.  
  143. if( g_iSprite2 && g_iDozen != iDozen)
  144. {
  145. g_iDozen = iDozen
  146. if( !iDozen )
  147. {
  148. entity_set_int(g_iSprite2, EV_INT_flags, FL_KILLME)
  149. g_iSprite2 = 0
  150. }
  151. else
  152. {
  153. entity_set_float(g_iSprite2, EV_FL_frame, 0.0 + iDozen)
  154. }
  155. }
  156. }