HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include < amxmodx >
  2. #include < engine >
  3. #include < fakemeta >
  4. #include < hamsandwich >
  5.  
  6. #define NAME "[ZL] ClusterGrenade"
  7. #define VERSION "Public [1.0]"
  8. #define AUTHOR "Alexander.3"
  9.  
  10. #define TRAIL
  11. #define SHOCKWAVE
  12. #define SCREENFADE
  13. #define SCREENSHACKE
  14. #define RANDOM
  15.  
  16. const cluster_num = 10
  17. const Float:cluster_radius = 200.0
  18. const Float:cluster_dradius = 240.0
  19. const Float:cluster_damage = 100.0
  20.  
  21. new const cluster_models[] = "models/w_hegrenade.mdl"
  22. new const cluster_sprite[] = "sprites/dexplo.spr"
  23.  
  24.  
  25. #if defined TRAIL
  26. new g_Trail
  27. new const cluster_trail[] = "sprites/laserbeam.spr"
  28. new cluster_trail_red = 255
  29. new cluster_trail_green = 0
  30. new cluster_trail_blue = 50
  31. #endif
  32.  
  33.  
  34. #if defined SHOCKWAVE
  35. new g_sw
  36. new const cluster_sw[] = "sprites/shockwave.spr"
  37. new cluster_sw_red = 255
  38. new cluster_sw_green = 0
  39. new cluster_sw_blue = 50
  40. #endif
  41.  
  42.  
  43. #if defined SCREENFADE
  44. new cluster_sf_red = 255
  45. new cluster_sf_green = 0
  46. new cluster_sf_blue = 50
  47. #endif
  48.  
  49. new g_Exlplosion
  50.  
  51. public plugin_init() {
  52. register_plugin(NAME, VERSION, AUTHOR)
  53.  
  54. RegisterHam(Ham_Think, "grenade", "Hook_Grenade", 1)
  55.  
  56. register_touch("cluster_bomb", "*", "Hook_Touch")
  57. }
  58.  
  59. public Hook_Grenade( Ent ) {
  60. if (!pev_valid( Ent ))
  61. return HAM_IGNORED
  62.  
  63. static Float:dmgtime
  64.  
  65. pev(Ent, pev_dmgtime, dmgtime)
  66.  
  67. if (dmgtime > get_gametime())
  68. return HAM_IGNORED
  69.  
  70. new szModels[32]
  71. pev(Ent, pev_model, szModels, charsmax(szModels))
  72.  
  73. if (!equal(szModels, "models/w_hegrenade.mdl"))
  74. return HAM_IGNORED
  75.  
  76. new Float:b_origin[3]
  77. pev(Ent, pev_origin, b_origin)
  78.  
  79. for (new i; i < cluster_num; i++) {
  80. #if defined RANDOM
  81. cluster_effect()
  82. #endif
  83.  
  84. new bomb
  85. bomb = create_entity("info_target")
  86. engfunc(EngFunc_SetOrigin, bomb, b_origin)
  87. engfunc(EngFunc_SetModel, bomb, cluster_models)
  88. set_pev(bomb, pev_solid, SOLID_TRIGGER)
  89. set_pev(bomb, pev_classname, "cluster_bomb")
  90. set_pev(bomb, pev_movetype, MOVETYPE_TOSS)
  91. set_pev(bomb, pev_owner, pev(Ent, pev_owner))
  92.  
  93.  
  94. new Float:velocity[3]
  95. velocity[0] = random_float(-(cluster_radius), cluster_radius)
  96. velocity[1] = random_float(-(cluster_radius), cluster_radius)
  97. velocity[2] = cluster_radius + 185.0
  98.  
  99. set_pev(bomb, pev_velocity, velocity)
  100.  
  101. #if defined TRAIL
  102. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  103. write_byte(TE_BEAMFOLLOW)
  104. write_short(bomb)
  105. write_short(g_Trail)
  106. write_byte(13)
  107. write_byte(5)
  108. write_byte(cluster_trail_red)
  109. write_byte(cluster_trail_green)
  110. write_byte(cluster_trail_blue)
  111. write_byte(255)
  112. message_end()
  113. #endif
  114. }
  115. set_pev(Ent, pev_flags, FL_KILLME)
  116. return HAM_HANDLED
  117. }
  118.  
  119. public Hook_Touch(grenade, went) {
  120. if (!pev_valid( grenade ))
  121. return
  122.  
  123. new szWEnt[32]
  124. pev(went, pev_classname, szWEnt, charsmax(szWEnt))
  125.  
  126. if (equal(szWEnt, "cluster_bomb"))
  127. return
  128.  
  129. new Float:origin[3]
  130. new victim = -1
  131.  
  132. pev(grenade, pev_origin, origin)
  133.  
  134. while((victim = engfunc(EngFunc_FindEntityInSphere, victim, origin, cluster_dradius))) {
  135. if (!is_user_alive( victim ))
  136. continue
  137.  
  138. if (get_user_team(victim) == get_user_team(pev(grenade, pev_owner)))
  139. continue
  140.  
  141. ExecuteHamB(Ham_TakeDamage, victim, 0, grenade, cluster_damage, (1<<24))
  142.  
  143.  
  144. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Damage"), {0,0,0}, victim)
  145. write_byte(0)
  146. write_byte(100)
  147. write_long(1<<1)
  148. engfunc(EngFunc_WriteCoord, origin[0])
  149. engfunc(EngFunc_WriteCoord, origin[1])
  150. engfunc(EngFunc_WriteCoord, origin[2])
  151. message_end()
  152.  
  153. #if defined SCREENFADE
  154. ZL_ScreenFade(victim, 2, 1, cluster_sf_red, cluster_sf_green, cluster_sf_blue, 130, 1)
  155. #endif
  156.  
  157.  
  158. #if defined SCREENSHACKE
  159. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenShake"), {0,0,0}, victim)
  160. write_short(1<<14)
  161. write_short((1<<12) * 8)
  162. write_short((2<<12) * 7)
  163. message_end()
  164. #endif
  165. }
  166.  
  167.  
  168. #if defined SHOCKWAVE
  169. engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
  170. write_byte(TE_BEAMCYLINDER)
  171. engfunc(EngFunc_WriteCoord, origin[0])
  172. engfunc(EngFunc_WriteCoord, origin[1])
  173. engfunc(EngFunc_WriteCoord, origin[2])
  174. engfunc(EngFunc_WriteCoord, origin[0])
  175. engfunc(EngFunc_WriteCoord, origin[1])
  176. engfunc(EngFunc_WriteCoord, origin[2] + cluster_dradius)
  177. write_short(g_sw)
  178. write_byte(0)
  179. write_byte(0)
  180. write_byte(4)
  181. write_byte(20)
  182. write_byte(0)
  183. write_byte(cluster_sw_red)
  184. write_byte(cluster_sw_green)
  185. write_byte(cluster_sw_blue)
  186. write_byte(255)
  187. write_byte(0)
  188. message_end()
  189. #endif
  190.  
  191.  
  192. engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
  193. write_byte(TE_EXPLOSION)
  194. engfunc(EngFunc_WriteCoord, origin[0])
  195. engfunc(EngFunc_WriteCoord, origin[1])
  196. engfunc(EngFunc_WriteCoord, origin[2] + 25.0)
  197. write_short(g_Exlplosion)
  198. write_byte(20)
  199. write_byte(10)
  200. write_byte(0)
  201. message_end()
  202.  
  203.  
  204. engfunc(EngFunc_RemoveEntity, grenade)
  205. }
  206.  
  207.  
  208. public plugin_precache() {
  209. g_Exlplosion = precache_model(cluster_sprite)
  210. #if defined TRAIL
  211. g_Trail = precache_model(cluster_trail)
  212. #endif
  213. #if defined SHOCKWAVE
  214. g_sw = precache_model(cluster_sw)
  215. #endif
  216. }
  217.  
  218. #if defined RANDOM
  219. cluster_effect() {
  220. #if defined TRAIL
  221. cluster_trail_red = random(255)
  222. cluster_trail_green = random(255)
  223. cluster_trail_blue = random(255)
  224. #endif
  225.  
  226. #if defined SHOCKWAVE
  227. cluster_sw_red = random(255)
  228. cluster_sw_green = random(255)
  229. cluster_sw_blue = random(255)
  230. #endif
  231.  
  232. #if defined SCREENFADE
  233. cluster_sf_red = random(255)
  234. cluster_sf_green = random(255)
  235. cluster_sf_blue = random(255)
  236. #endif
  237. }
  238. #endif
  239.  
  240. stock ZL_ScreenFade(id, Timer, FadeTime, red, green, blue, Alpha, type) {
  241. if(id) if(!is_user_connected(id)) return
  242.  
  243. if (Timer > 0xFFFF) Timer = 0xFFFF
  244. if (FadeTime <= 0) FadeTime = 4
  245.  
  246. message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, get_user_msgid("ScreenFade"), _, id);
  247. write_short(Timer * 1 << 12)
  248. write_short(FadeTime * 1 << 12)
  249. switch (type) {
  250. case 1: write_short(0x0000) // IN ( FFADE_IN )
  251. case 2: write_short(0x0001) // OUT ( FFADE_OUT )
  252. case 3: write_short(0x0002) // MODULATE ( FFADE_MODULATE )
  253. case 4: write_short(0x0004) // STAYOUT ( FFADE_STAYOUT )
  254. default: write_short(0x0001)
  255. }
  256. write_byte(red)
  257. write_byte(green)
  258. write_byte(blue)
  259. write_byte(Alpha)
  260. message_end()
  261. }
  262.