iFenomenal

C4 timp color

Jan 11th, 2020
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.11 KB | None | 0 0
  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. new g_iUnits = -1
  38. new g_iDozen = -1
  39.  
  40. new Float:g_flExplodeTime
  41.  
  42. new g_pCvarSpriteScale, g_pCvarEnable
  43.  
  44. public plugin_precache()
  45. {
  46. precache_model(SPRITE_NAME)
  47. }
  48.  
  49. public plugin_init()
  50. {
  51. register_plugin(PLUGIN, VERSION, AUTHOR)
  52.  
  53. g_pCvarEnable = register_cvar("c4_sprite_timer", "1")
  54. g_pCvarSpriteScale = register_cvar("c4_sprite_scale", "0.6")
  55.  
  56. if( find_ent_by_class(FM_NULLENT, "func_bomb_target") || find_ent_by_class(FM_NULLENT, "info_bomb_target") )
  57. {
  58. g_HhGrenadeThink = RegisterHam(Ham_Think, "grenade", "C4_Think", 1)
  59.  
  60. register_event("HLTV", "StopHook", "a", "1=0", "2=0")
  61. register_logevent("StopHook", 2, "1=Round_End")
  62.  
  63. register_logevent("StartHook", 3, "2=Planted_The_Bomb")
  64.  
  65. StopHook()
  66. }
  67. }
  68.  
  69. public StopHook()
  70. {
  71. g_iC4 = 0
  72. g_iUnits = -1
  73. g_iDozen = -1
  74. DisableHamForward( g_HhGrenadeThink )
  75. if( g_iSprite )
  76. {
  77. entity_set_int(g_iSprite, EV_INT_flags, FL_KILLME)
  78. g_iSprite = 0
  79. }
  80.  
  81. if( g_iSprite2 )
  82. {
  83. entity_set_int(g_iSprite2, EV_INT_flags, FL_KILLME)
  84. g_iSprite2 = 0
  85. }
  86. }
  87.  
  88. public StartHook()
  89. {
  90. if( !get_pcvar_num(g_pCvarEnable) )
  91. {
  92. return
  93. }
  94.  
  95. new iC4 = FM_NULLENT
  96. new const grenade[] = "grenade"
  97. new const env_sprite[] = "env_sprite"
  98. while( (iC4 = find_ent_by_class(iC4, grenade)) )
  99. {
  100. if( get_pdata_int(iC4, 96, 5) & (1<<8) )
  101. {
  102. g_iC4 = iC4
  103. g_flExplodeTime = get_pdata_float(g_iC4, OFFSET_C4_EXPLODE_TIME, 5)
  104. EnableHamForward( g_HhGrenadeThink )
  105.  
  106. new Float:flOrigin[3], Float:flGround[3]
  107.  
  108. entity_get_vector(iC4, EV_VEC_origin, flOrigin)
  109.  
  110. flGround[0] = flOrigin[0]
  111. flGround[1] = flOrigin[1]
  112. flGround[2] = flOrigin[2] - 9999.9
  113.  
  114. trace_line(FM_NULLENT, flOrigin, flGround, flGround)
  115.  
  116. new Float:flScale = get_pcvar_float(g_pCvarSpriteScale)
  117.  
  118. if( ( g_iSprite = create_entity(env_sprite) ) )
  119. {
  120. entity_set_string(g_iSprite, EV_SZ_model, SPRITE_NAME)
  121. flGround[2] += max( floatround( SPRITE_DIST * flScale ) , 20 )
  122. entity_set_vector(g_iSprite, EV_VEC_origin, flGround)
  123. entity_set_float(g_iSprite, EV_FL_scale, flScale)
  124. DispatchSpawn(g_iSprite)
  125. }
  126.  
  127. if( ( g_iSprite2 = create_entity(env_sprite) ) )
  128. {
  129. entity_set_string(g_iSprite2, EV_SZ_model, SPRITE_NAME)
  130. flGround[2] += floatround( SPRITE_DIST * flScale )
  131. entity_set_vector(g_iSprite2, EV_VEC_origin, flGround)
  132. entity_set_float(g_iSprite2, EV_FL_scale, flScale)
  133. DispatchSpawn(g_iSprite2)
  134. }
  135. return
  136. }
  137. }
  138. }
  139.  
  140. public C4_Think( iC4 )
  141. {
  142. if( g_iC4 != iC4 )
  143. {
  144. return
  145. }
  146.  
  147. static Float:flTime, iTime, iUnits, iDozen
  148.  
  149. flTime = g_flExplodeTime - get_gametime()
  150. iTime = floatround(flTime, floatround_ceil)
  151. iUnits = iTime % 10
  152. iDozen = (iTime - iUnits) / 10
  153.  
  154. if( g_iSprite && g_iUnits != iUnits )
  155. {
  156. g_iUnits = iUnits
  157. entity_set_float(g_iSprite, EV_FL_frame, 0.0 + iUnits)
  158. }
  159.  
  160. if( g_iSprite2 && g_iDozen != iDozen)
  161. {
  162. g_iDozen = iDozen
  163. if( !iDozen )
  164. {
  165. entity_set_int(g_iSprite2, EV_INT_flags, FL_KILLME)
  166. g_iSprite2 = 0
  167. }
  168. else
  169. {
  170. entity_set_float(g_iSprite2, EV_FL_frame, 0.0 + iDozen)
  171. }
  172. }
  173. }
Add Comment
Please, Sign In to add comment