HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <zombieplague>
  3. #include <fakemeta>
  4. #include <engine>
  5. #include <fun>
  6.  
  7. #define PLUGINNAME "[ZP] Robbano Zombi"
  8. #define VERSION "1.2.2"
  9. #define AUTHOR "tii"
  10.  
  11. new g_zclass_boomer, g_maxplayers,
  12. spr_smoke_steam1,cvar_max_damage,cvar_damage_radius,mdl_gib_legbone,
  13. mdl_gib_flesh,mdl_gib_meat,mdl_gib_head,spr_blood_drop,spr_blood_spray
  14. new bool:lamuerteexplosiva[33] = false
  15.  
  16. new g_sndExplode[] = "weapons/c4_explode1.wav"
  17. new spr_zerogxplode
  18. new gmsgDeathMsg,gmsgScoreInfo,mdl_gib_lung,mdl_gib_spine
  19.  
  20. new const zclass_name[] = { "Robbano Zombi" }
  21. new const zclass_info[] = { "Miutan meghal felrobban" }
  22. new const zclass_model[] = { "robbano_zombi" }
  23. new const zclass_clawmodel[] = { "robbano_kez.mdl" }
  24. const zclass_health = 2000
  25. const zclass_speed = 200
  26. const Float:zclass_gravity = 1.0
  27. const Float:zclass_knockback = 0.2
  28.  
  29. public plugin_init(){
  30. register_plugin(PLUGINNAME, VERSION, AUTHOR)
  31. register_event("DeathMsg", "boomer_death", "a")
  32. cvar_max_damage = register_cvar("zp_bomer_maxdmg","100")
  33. cvar_damage_radius = register_cvar("zp_bomer_raius","350")
  34. g_maxplayers = get_maxplayers()
  35. gmsgDeathMsg = get_user_msgid("DeathMsg")
  36. gmsgScoreInfo = get_user_msgid("ScoreInfo")
  37. }
  38.  
  39. public plugin_precache()
  40. {
  41. g_zclass_boomer = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
  42. mdl_gib_lung = precache_model("models/GIB_Lung.mdl")
  43. mdl_gib_meat = precache_model("models/GIB_B_Gib.mdl")
  44. mdl_gib_head = precache_model("models/GIB_Skull.mdl")
  45. mdl_gib_flesh = precache_model("models/Fleshgibs.mdl")
  46. mdl_gib_spine = precache_model("models/GIB_B_Bone.mdl")
  47. mdl_gib_legbone = precache_model("models/GIB_Legbone.mdl")
  48. precache_sound("weapons/mortarhit.wav")
  49. spr_blood_drop = precache_model("sprites/blood.spr")
  50. spr_blood_spray = precache_model("sprites/bloodspray.spr")
  51. spr_zerogxplode = precache_model("sprites/zerogxplode.spr")
  52. spr_smoke_steam1 = precache_model("sprites/steam1.spr")
  53. precache_sound(g_sndExplode)
  54. spr_zerogxplode = precache_model("sprites/zerogxplode.spr")
  55. precache_model("models/w_egon.mdl")
  56. }
  57.  
  58. public zp_user_infected_post(player, infector)
  59. {
  60. if (zp_get_user_zombie_class(player) == g_zclass_boomer) {
  61. lamuerteexplosiva[player] = true
  62. client_print(player, print_chat, "[ZP] Felrobban mikor meghal!")
  63. }
  64. }
  65.  
  66. public zp_user_humanized_post(player)
  67. {
  68. lamuerteexplosiva[player] = false
  69. }
  70.  
  71. public boomer_death() {
  72. new attacker = read_data(1)
  73. new victim = read_data(2)
  74. if(lamuerteexplosiva[victim]) {
  75. static victim_name[33]
  76. static attacker_name[33]
  77. get_user_name(victim, victim_name, sizeof victim_name -1)
  78. get_user_name(attacker, attacker_name, sizeof attacker_name -1)
  79. new Float:origin[3], origin2[3]
  80. entity_get_vector(victim,EV_VEC_origin,origin)
  81. origin2[0] = floatround(origin[0])
  82. origin2[1] = floatround(origin[1])
  83. origin2[2] = floatround(origin[2])
  84. for (new id2; id2 <= g_maxplayers; id2++)
  85. {
  86. if (zp_get_user_zombie_class(id2) == g_zclass_boomer && zp_get_user_zombie(id2) && !zp_get_user_nemesis(id2))
  87. {
  88. emit_sound(victim, CHAN_WEAPON, "weapons/mortarhit.wav", 1.0, 0.5, 0, PITCH_NORM)
  89. emit_sound(victim, CHAN_VOICE, "weapons/mortarhit.wav", 1.0, 0.5, 0, PITCH_NORM)
  90.  
  91. for (new e = 1; e < 8; e++) {
  92. // Random Explosion 8 Times
  93. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  94. write_byte(TE_SPRITE)
  95. write_coord(origin2[0] + random_num(-60,60))
  96. write_coord(origin2[1] + random_num(-60,60))
  97. write_coord(origin2[2] +128)
  98. write_short(spr_zerogxplode)
  99. write_byte(random_num(30,65))
  100. write_byte(255)
  101. message_end()
  102.  
  103. }
  104.  
  105. for (new e = 1; e < 3; e++) {
  106. // Random Smoke 3 Times
  107. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  108. write_byte(TE_SMOKE)
  109. write_coord(origin2[0])
  110. write_coord(origin2[1])
  111. write_coord(origin2[2] + 256)
  112. write_short(spr_smoke_steam1)
  113. write_byte(random_num(80,150))
  114. write_byte(random_num(5,10))
  115. message_end()
  116. }
  117.  
  118. // Create the burn decal
  119. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  120. write_byte(TE_GUNSHOTDECAL)
  121. write_coord(origin2[0])
  122. write_coord(origin2[1])
  123. write_coord(origin2[2])
  124. write_short(0)
  125. write_byte(random_num(46,48)) // decal
  126. message_end()
  127.  
  128. new Max_Damage = get_pcvar_num(cvar_max_damage)
  129. new Damage_Radius = get_pcvar_num(cvar_damage_radius)
  130. new PlayerPos[3], Distance, Damage
  131. for (new i = 1; i < 32; i++) {
  132. if (is_user_alive(i) == 1) {
  133. get_user_origin(i, PlayerPos)
  134. Distance = get_distance(PlayerPos, origin2)
  135. if (Distance <= Damage_Radius) { // Screenshake Radius
  136.  
  137. message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, i) // Shake Screen
  138. write_short(1<<14)
  139. write_short(1<<14)
  140. write_short(1<<14)
  141. message_end()
  142.  
  143. Damage = Max_Damage - floatround(floatmul(float(Max_Damage), floatdiv(float(Distance), float(Damage_Radius))))
  144. //if(!zp_get_user_zombie(id2) && !zp_get_user_nemesis(id2))
  145. do_victim(i,victim,Damage,0)
  146. }
  147.  
  148. }
  149.  
  150. }
  151. }
  152. }
  153. lamuerteexplosiva[victim] = false
  154. }
  155. }
  156.  
  157. public do_victim (victim,attacker,Damage,team_kill) {
  158.  
  159. new namek[32],namev[32],authida[35],authidv[35],teama[32],teamv[32]
  160.  
  161. get_user_name(victim,namev,31)
  162. get_user_name(attacker,namek,31)
  163. get_user_authid(victim,authidv,34)
  164. get_user_authid(attacker,authida,34)
  165. get_user_team(victim,teamv,31)
  166. get_user_team(attacker,teama,31)
  167.  
  168. if(Damage >= get_user_health(victim)) {
  169.  
  170. if(get_cvar_num("mp_logdetail") == 3) {
  171.  
  172. log_message("^"%s<%d><%s><%s>^" megtamadta ^"%s<%d><%s><%s>^" ezzel ^"bomber^" (utes ^"ches^") (Serules ^"%d^") (elet ^"0^")",
  173. namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),authidv,teamv,Damage)
  174.  
  175. }
  176.  
  177. client_print(attacker,print_chat,"[AMXX] Te megolted %s-t a robbanassal",namev)
  178. client_print(victim,print_chat,"[AMXX] Teged megolt %s a robbanassal",namek)
  179.  
  180. if(team_kill == 0) {
  181.  
  182. set_user_frags(attacker,get_user_frags(attacker) + 1 )
  183.  
  184. }
  185.  
  186. set_msg_block(gmsgDeathMsg,BLOCK_ONCE)
  187. set_msg_block(gmsgScoreInfo,BLOCK_ONCE)
  188.  
  189. user_kill(victim,1)
  190.  
  191. replace_dm(attacker,victim,0)
  192.  
  193. log_message("^"%s<%d><%s><%s>^" megolte ^"%s<%d><%s><%s>^" ezzel ^"bomber^"",
  194. namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),authidv,teamv)
  195.  
  196. if (Damage > 100) {
  197.  
  198. new iOrigin[3]
  199. get_user_origin(victim,iOrigin)
  200. set_user_rendering(victim,kRenderFxNone,0,0,0,kRenderTransAlpha,0)
  201. fx_gib_explode(iOrigin,3)
  202. fx_blood_large(iOrigin,5)
  203. fx_blood_small(iOrigin,15)
  204. iOrigin[2] = iOrigin[2] - 20
  205. set_user_origin(victim,iOrigin)
  206.  
  207. }
  208.  
  209. }
  210.  
  211. else {
  212. set_user_health(victim,get_user_health(victim) - Damage )
  213.  
  214. if(get_cvar_num("mp_logdetail") == 3) {
  215.  
  216. log_message("^"%s<%d><%s><%s>^" megtamadta ^"%s<%d><%s><%s>^" ezel ^"bomber^" (utes ^"chest^") (Serules ^"%d^") (elet ^"%d^")",
  217. namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),authidv,teamv,Damage,get_user_health(victim))
  218.  
  219. }
  220.  
  221. client_print(attacker,print_chat,"[AMXX] Megtamadtad %s-t",namev)
  222. client_print(victim,print_chat,"[AMXX] Megolted %s-t",namek)
  223.  
  224. }
  225.  
  226. }
  227.  
  228. public client_disconnect(id)
  229. {
  230. lamuerteexplosiva[id] = false
  231. }
  232.  
  233. public client_putinserver(id)
  234. {
  235. lamuerteexplosiva[id] = false
  236. }
  237.  
  238. public replace_dm (id,tid,tbody) {
  239.  
  240. //Update killers scorboard with new info
  241. message_begin(MSG_ALL,gmsgScoreInfo)
  242. write_byte(id)
  243. write_short(get_user_frags(id))
  244. write_short(get_user_deaths(id))
  245. write_short(0)
  246. write_short(get_user_team(id))
  247. message_end()
  248.  
  249. //Update victims scoreboard with correct info
  250. message_begin(MSG_ALL,gmsgScoreInfo)
  251. write_byte(tid)
  252. write_short(get_user_frags(tid))
  253. write_short(get_user_deaths(tid))
  254. write_short(0)
  255. write_short(get_user_team(tid))
  256. message_end()
  257.  
  258. //Headshot Kill
  259. if (tbody == 1) {
  260.  
  261. message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0)
  262. write_byte(id)
  263. write_byte(tid)
  264. write_string(" missile")
  265. message_end()
  266.  
  267. }
  268.  
  269. //Normal Kill
  270. else {
  271.  
  272. message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0)
  273. write_byte(id)
  274. write_byte(tid)
  275. write_byte(0)
  276. write_string("missile")
  277. message_end()
  278.  
  279. }
  280.  
  281. return PLUGIN_CONTINUE
  282.  
  283. }
  284. static fx_blood_small (origin[3],num) {
  285.  
  286. // Small splash
  287. for (new j = 0; j < num; j++) {
  288.  
  289. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  290. write_byte(TE_WORLDDECAL)
  291. write_coord(origin[0]+random_num(-100,100))
  292. write_coord(origin[1]+random_num(-100,100))
  293. write_coord(origin[2]-36)
  294.  
  295. write_byte(random_num(190,197)) // Blood decals
  296.  
  297. message_end()
  298.  
  299. }
  300.  
  301. }
  302.  
  303. static fx_blood_large (origin[3],num) {
  304.  
  305. // Large splash
  306. for (new i = 0; i < num; i++) {
  307.  
  308. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  309. write_byte(TE_WORLDDECAL)
  310. write_coord(origin[0] + random_num(-50,50))
  311. write_coord(origin[1] + random_num(-50,50))
  312. write_coord(origin[2]-36)
  313.  
  314. write_byte(random_num(204,205)) // Blood decals
  315.  
  316. message_end()
  317.  
  318. }
  319.  
  320. }
  321.  
  322. static fx_gib_explode (origin[3],num) {
  323.  
  324. new flesh[3], x, y, z
  325. flesh[0] = mdl_gib_flesh
  326. flesh[1] = mdl_gib_meat
  327. flesh[2] = mdl_gib_legbone
  328.  
  329. // Gib explosion
  330. // Head
  331. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  332. write_byte(TE_MODEL)
  333. write_coord(origin[0])
  334. write_coord(origin[1])
  335. write_coord(origin[2])
  336. write_coord(random_num(-100,100))
  337. write_coord(random_num(-100,100))
  338. write_coord(random_num(100,200))
  339. write_angle(random_num(0,360))
  340. write_short(mdl_gib_head)
  341. write_byte(0)
  342. write_byte(500)
  343. message_end()
  344.  
  345. // Spine
  346. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  347. write_byte(TE_MODEL)
  348. write_coord(origin[0])
  349. write_coord(origin[1])
  350. write_coord(origin[2])
  351. write_coord(random_num(-100,100))
  352. write_coord(random_num(-100,100))
  353. write_coord(random_num(100,200))
  354. write_angle(random_num(0,360))
  355. write_short(mdl_gib_spine)
  356. write_byte(0)
  357. write_byte(500)
  358. message_end()
  359.  
  360. // Lung
  361. for(new i = 0; i < random_num(1,2); i++) {
  362.  
  363. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  364. write_byte(TE_MODEL)
  365. write_coord(origin[0])
  366. write_coord(origin[1])
  367. write_coord(origin[2])
  368. write_coord(random_num(-100,100))
  369. write_coord(random_num(-100,100))
  370. write_coord(random_num(100,200))
  371. write_angle(random_num(0,360))
  372. write_short(mdl_gib_lung)
  373. write_byte(0)
  374. write_byte(500)
  375. message_end()
  376.  
  377. }
  378.  
  379. // Parts, 5 times
  380. for(new i = 0; i < 5; i++) {
  381.  
  382. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  383. write_byte(TE_MODEL)
  384. write_coord(origin[0])
  385. write_coord(origin[1])
  386. write_coord(origin[2])
  387. write_coord(random_num(-100,100))
  388. write_coord(random_num(-100,100))
  389. write_coord(random_num(100,200))
  390. write_angle(random_num(0,360))
  391. write_short(flesh[random_num(0,2)])
  392. write_byte(0)
  393. write_byte(500)
  394. message_end()
  395.  
  396. }
  397.  
  398. // Blood
  399. for(new i = 0; i < num; i++) {
  400.  
  401. x = random_num(-100,100)
  402. y = random_num(-100,100)
  403. z = random_num(0,100)
  404.  
  405. for(new j = 0; j < 5; j++) {
  406.  
  407. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  408. write_byte(TE_BLOODSPRITE)
  409. write_coord(origin[0]+(x*j))
  410. write_coord(origin[1]+(y*j))
  411. write_coord(origin[2]+(z*j))
  412. write_short(spr_blood_spray)
  413. write_short(spr_blood_drop)
  414. write_byte(248)
  415. write_byte(15)
  416. message_end()
  417.  
  418. }
  419.  
  420. }
  421.  
  422. }