HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* Plugin generated by AMXX-Studio */
  2.  
  3. #include <amxmodx>
  4. #include <amxmisc>
  5. #include <fakemeta>
  6. #include <zombieplague>
  7. #include <hamsandwich>
  8. #include <fakemeta_util>
  9.  
  10. #define PLUGIN "Nowy Plugin"
  11. #define VERSION "1.0"
  12. #define AUTHOR "Sn!ff3r"
  13.  
  14. new const NADE_TYPE_ANTIDOTEBOMB = 6969
  15. new const Float:RADIUS = 240.0
  16. new const sprite_grenade_trail[] = "sprites/laserbeam.spr"
  17. new const sprite_grenade_ring[] = "sprites/shockwave.spr"
  18. new const item_cost = 20
  19. new const item_name[] = "T-Virus Bomb"
  20. new const model_grenade_infect[] = "models/zombie_plague/v_grenade_antidot.mdl"
  21.  
  22. new item_id
  23. new has_bomb[33]
  24. new cvar_enabled, cvar_fragsinfect, cvar_ammoinfect, cvar_humanbonushp, cvar_flaregrenades
  25. new g_trailSpr, g_exploSpr, g_msgScoreInfo, g_msgDeathMsg, g_msgScoreAttrib
  26.  
  27. public plugin_init()
  28. {
  29. register_plugin(PLUGIN, VERSION, AUTHOR)
  30.  
  31. RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
  32. RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
  33.  
  34. register_forward(FM_SetModel, "fw_SetModel")
  35.  
  36. register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
  37.  
  38. cvar_enabled = register_cvar("zp_antidote_bomb","1")
  39. cvar_fragsinfect = get_cvar_pointer("zp_zombie_frags_for_infect")
  40. cvar_ammoinfect = get_cvar_pointer("zp_zombie_infect_reward")
  41. cvar_humanbonushp = register_cvar("zp_antidote_bomb_extra_hp","10")
  42. cvar_flaregrenades = get_cvar_pointer("zp_flare_grenades")
  43.  
  44. g_msgScoreInfo = get_user_msgid("ScoreInfo")
  45. g_msgDeathMsg = get_user_msgid("DeathMsg")
  46. g_msgScoreAttrib = get_user_msgid("ScoreAttrib")
  47. }
  48.  
  49. public plugin_precache()
  50. {
  51. g_trailSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_trail)
  52. g_exploSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_ring)
  53.  
  54. engfunc(EngFunc_PrecacheModel, model_grenade_infect)
  55.  
  56. item_id = zp_register_extra_item(item_name,item_cost,ZP_TEAM_HUMAN)
  57. }
  58.  
  59. public client_disconnect(id)
  60. {
  61. has_bomb[id] = 0
  62. }
  63.  
  64. public zp_extra_item_selected(player, itemid)
  65. {
  66. if(itemid == item_id)
  67. {
  68. has_bomb[player] = 1
  69. fm_strip_user_gun(player,9)
  70. fm_give_item(player,"weapon_smokegrenade")
  71. }
  72.  
  73. }
  74.  
  75. public fw_PlayerKilled(victim, attacker, shouldgib)
  76. {
  77. has_bomb[victim] = 0
  78. }
  79.  
  80. public fw_ThinkGrenade(entity)
  81. {
  82. if(!pev_valid(entity))
  83. return HAM_IGNORED
  84.  
  85. static Float:dmgtime
  86. pev(entity, pev_dmgtime, dmgtime)
  87.  
  88. if (dmgtime > get_gametime())
  89. return HAM_IGNORED
  90.  
  91. if(pev(entity, pev_flTimeStepSound) == NADE_TYPE_ANTIDOTEBOMB)
  92. antidote_explode(entity)
  93.  
  94. return HAM_SUPERCEDE
  95. }
  96.  
  97. public fw_SetModel(entity, const model[])
  98. {
  99. if(!get_pcvar_num(cvar_enabled))
  100. return
  101.  
  102. static Float:dmgtime
  103. pev(entity, pev_dmgtime, dmgtime)
  104.  
  105. if (dmgtime == 0.0)
  106. return
  107.  
  108. if (equal(model[7], "w_sm", 4))
  109. {
  110. new owner = pev(entity, pev_owner)
  111.  
  112. if(!zp_get_user_zombie(owner) && has_bomb[owner])
  113. {
  114. set_pcvar_num(cvar_flaregrenades,0)
  115.  
  116. fm_set_rendering(entity, kRenderFxGlowShell, 255, 128, 0, kRenderNormal, 16)
  117.  
  118. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  119. write_byte(TE_BEAMFOLLOW) // TE id
  120. write_short(entity) // entity
  121. write_short(g_trailSpr) // sprite
  122. write_byte(10) // life
  123. write_byte(10) // width
  124. write_byte(255) // r
  125. write_byte(128) // g
  126. write_byte(0) // b
  127. write_byte(200) // brightness
  128. message_end()
  129.  
  130. set_pev(entity, pev_flTimeStepSound, NADE_TYPE_ANTIDOTEBOMB)
  131. }
  132. }
  133.  
  134. }
  135.  
  136.  
  137. public antidote_explode(ent)
  138. {
  139. if (!zp_has_round_started()) return
  140.  
  141. set_pcvar_num(cvar_flaregrenades,1)
  142.  
  143. static Float:originF[3]
  144. pev(ent, pev_origin, originF)
  145.  
  146. create_blast(originF)
  147.  
  148. //engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, grenade_infect[random_num(0, sizeof grenade_infect - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
  149.  
  150. static attacker
  151. attacker = pev(ent, pev_owner)
  152.  
  153. has_bomb[attacker] = 0
  154.  
  155. static victim
  156. victim = -1
  157. while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, RADIUS)) != 0)
  158. {
  159. if (!is_user_alive(victim) || !zp_get_user_zombie(victim) || zp_get_user_nemesis(victim) || zp_get_user_first_zombie(victim) || zp_get_user_last_zombie(victim))
  160. continue
  161.  
  162. SendDeathMsg(attacker, victim)
  163. FixDeadAttrib(victim)
  164. UpdateFrags(attacker, victim, get_pcvar_num(cvar_fragsinfect), 1, 1)
  165. zp_disinfect_user(victim)
  166. zp_set_user_ammo_packs(attacker,zp_get_user_ammo_packs(attacker) + get_pcvar_num(cvar_ammoinfect))
  167. fm_set_user_health(attacker, pev(attacker, pev_health)+get_pcvar_num(cvar_humanbonushp))
  168.  
  169. }
  170.  
  171. engfunc(EngFunc_RemoveEntity, ent)
  172. }
  173.  
  174. public create_blast(const Float:originF[3])
  175. {
  176. engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
  177. write_byte(TE_BEAMCYLINDER) // TE id
  178. engfunc(EngFunc_WriteCoord, originF[0]) // x
  179. engfunc(EngFunc_WriteCoord, originF[1]) // y
  180. engfunc(EngFunc_WriteCoord, originF[2]) // z
  181. engfunc(EngFunc_WriteCoord, originF[0]) // x axis
  182. engfunc(EngFunc_WriteCoord, originF[1]) // y axis
  183. engfunc(EngFunc_WriteCoord, originF[2]+385.0) // z axis
  184. write_short(g_exploSpr) // sprite
  185. write_byte(0) // startframe
  186. write_byte(0) // framerate
  187. write_byte(4) // life
  188. write_byte(60) // width
  189. write_byte(0) // noise
  190. write_byte(255) // red
  191. write_byte(128) // green
  192. write_byte(0) // blue
  193. write_byte(200) // brightness
  194. write_byte(0) // speed
  195. message_end()
  196.  
  197. engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
  198. write_byte(TE_BEAMCYLINDER) // TE id
  199. engfunc(EngFunc_WriteCoord, originF[0]) // x
  200. engfunc(EngFunc_WriteCoord, originF[1]) // y
  201. engfunc(EngFunc_WriteCoord, originF[2]) // z
  202. engfunc(EngFunc_WriteCoord, originF[0]) // x axis
  203. engfunc(EngFunc_WriteCoord, originF[1]) // y axis
  204. engfunc(EngFunc_WriteCoord, originF[2]+470.0) // z axis
  205. write_short(g_exploSpr) // sprite
  206. write_byte(0) // startframe
  207. write_byte(0) // framerate
  208. write_byte(4) // life
  209. write_byte(60) // width
  210. write_byte(0) // noise
  211. write_byte(255) // red
  212. write_byte(164) // green
  213. write_byte(0) // blue
  214. write_byte(200) // brightness
  215. write_byte(0) // speed
  216. message_end()
  217.  
  218. engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
  219. write_byte(TE_BEAMCYLINDER) // TE id
  220. engfunc(EngFunc_WriteCoord, originF[0]) // x
  221. engfunc(EngFunc_WriteCoord, originF[1]) // y
  222. engfunc(EngFunc_WriteCoord, originF[2]) // z
  223. engfunc(EngFunc_WriteCoord, originF[0]) // x axis
  224. engfunc(EngFunc_WriteCoord, originF[1]) // y axis
  225. engfunc(EngFunc_WriteCoord, originF[2]+555.0) // z axis
  226. write_short(g_exploSpr) // sprite
  227. write_byte(0) // startframe
  228. write_byte(0) // framerate
  229. write_byte(4) // life
  230. write_byte(60) // width
  231. write_byte(0) // noise
  232. write_byte(255) // red
  233. write_byte(200) // green
  234. write_byte(0) // blue
  235. write_byte(200) // brightness
  236. write_byte(0) // speed
  237. message_end()
  238. }
  239.  
  240. public UpdateFrags(attacker, victim, frags, deaths, scoreboard)
  241. {
  242. set_pev(attacker, pev_frags, float(pev(attacker, pev_frags) + frags))
  243.  
  244. fm_set_user_deaths(victim, fm_get_user_deaths(victim) + deaths)
  245.  
  246. if (scoreboard)
  247. {
  248. message_begin(MSG_BROADCAST, g_msgScoreInfo)
  249. write_byte(attacker) // id
  250. write_short(pev(attacker, pev_frags)) // frags
  251. write_short(fm_get_user_deaths(attacker)) // deaths
  252. write_short(0) // class?
  253. write_short(fm_get_user_team(attacker)) // team
  254. message_end()
  255.  
  256. message_begin(MSG_BROADCAST, g_msgScoreInfo)
  257. write_byte(victim) // id
  258. write_short(pev(victim, pev_frags)) // frags
  259. write_short(fm_get_user_deaths(victim)) // deaths
  260. write_short(0) // class?
  261. write_short(fm_get_user_team(victim)) // team
  262. message_end()
  263. }
  264. }
  265.  
  266. stock fm_set_user_deaths(id, value)
  267. {
  268. set_pdata_int(id, 444, value, 5)
  269. }
  270.  
  271. stock fm_get_user_deaths(id)
  272. {
  273. return get_pdata_int(id, 444, 5)
  274. }
  275.  
  276.  
  277. stock fm_get_user_team(id)
  278. {
  279. return get_pdata_int(id, 114, 5)
  280. }
  281.  
  282. public SendDeathMsg(attacker, victim)
  283. {
  284. message_begin(MSG_BROADCAST, g_msgDeathMsg)
  285. write_byte(attacker) // killer
  286. write_byte(victim) // victim
  287. write_byte(1) // headshot flag
  288. write_string("grenade") // killer's weapon
  289. message_end()
  290. }
  291.  
  292. public FixDeadAttrib(id)
  293. {
  294. message_begin(MSG_BROADCAST, g_msgScoreAttrib)
  295. write_byte(id) // id
  296. write_byte(0) // attrib
  297. message_end()
  298. }
  299.  
  300. public replace_models(id)
  301. {
  302. if (!is_user_alive(id))
  303. return
  304.  
  305. if(get_user_weapon(id) == CSW_SMOKEGRENADE && has_bomb[id])
  306. {
  307. set_pev(id, pev_viewmodel2, model_grenade_infect)
  308.  
  309. }
  310. }
  311.  
  312. public message_cur_weapon(msg_id, msg_dest, msg_entity)
  313. {
  314. replace_models(msg_entity)
  315. }
  316.