HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*================================================================================
  2.  
  3. -----------------------------------
  4. -*- [ZP] Zombie Flame -*-
  5. -----------------------------------
  6.  
  7. ~~~~~~~~~~~~~~~
  8. - Description -
  9. ~~~~~~~~~~~~~~~
  10.  
  11. Original by jtp10181, Upgraded to zp by LARP
  12. larp.source@gmail.com (Chile) Languaje spanish!
  13.  
  14. ================================================================================*/
  15.  
  16. #include <amxmodx>
  17. #include <amxmisc>
  18. #include <cstrike>
  19. #include <engine>
  20. #include <fakemeta>
  21. #include <fun>
  22. #include <zombieplague>
  23.  
  24.  
  25. new smoke
  26. new fire
  27. new burning
  28. new isburning[33]
  29. //new flame_count[33]
  30. new tkcount[33]
  31. new gmsgDeathMsg
  32. new gmsgScoreInfo
  33. new bool:flame[33]
  34.  
  35. // Zombi Atributes
  36. new const zclass_name[] = { "Tuzhanyo Zombi" } // name
  37. new const zclass_info[] = { "Health- Speed+ Gravity-" } // description
  38. new const zclass_model[] = { "zombie_source" } // model
  39. new const zclass_clawmodel[] = { "v_knife_zombie.mdl" } // claw model
  40. const zclass_health = 8000 // health
  41. const zclass_speed = 180 // speed
  42. const Float:zclass_gravity = 1.0 // gravity
  43. const Float:zclass_knockback = 1.0 // knockback
  44.  
  45. // Class IDs
  46. new g_zflame
  47.  
  48. // Zombie Classes MUST be registered on plugin_precache
  49. public plugin_precache()
  50. {
  51. fire = precache_model("sprites/explode1.spr")
  52. smoke = precache_model("sprites/steam1.spr")
  53. burning = precache_model("sprites/xfire.spr")
  54. precache_sound("ambience/burning1.wav")
  55. precache_sound("ambience/flameburst1.wav")
  56. precache_sound("scientist/c1a0_sci_catscream.wav")
  57. precache_sound("vox/_period.wav")
  58. precache_sound("player/headshot2.wav")
  59. // Register the new class and store ID for reference
  60. g_zflame = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
  61. }
  62.  
  63. public plugin_init()
  64. {
  65. register_plugin("[ZP] Zombie Flame", "1.2", "LARP")
  66. register_cvar("amx_flamethrower_tkpunish1", "0")
  67. register_cvar("amx_flamethrower_tkpunish2", "0")
  68. register_cvar("amx_fl_hp", "10")
  69. register_logevent("round_start", 2, "1=Round_Start")
  70. register_logevent("round_end", 2, "1=Round_End")
  71. register_forward(FM_PlayerPreThink,"FM_PreThink")
  72.  
  73. }
  74. // User Infected forward
  75. public zp_user_infected_post(id, infector)
  76. {
  77.  
  78. // Check if the infected player is using our custom zombie class
  79. if (zp_get_user_zombie_class(id) == g_zflame)
  80. {
  81. new cost = get_cvar_num("amx_fl_hp");
  82. fire_flamethrower(id);
  83. client_print(id,print_chat,"[ZP] Ahhoz hogy tuzet tudj hanyni nyomj E betut. Minden egyes langcsovanal %d Hp-t vesztesz.", cost)
  84. flame[id]=true
  85. }
  86.  
  87. }
  88.  
  89. /*public cmd_flamita(id)
  90. {
  91. if(!is_user_alive(id) || !zp_get_user_zombie(id)) return PLUGIN_CONTINUE
  92. if (zp_get_user_zombie_class(id) == g_zflame)
  93. {
  94. fire_flamethrower(id)
  95. }
  96. return PLUGIN_HANDLED
  97. }*/
  98.  
  99. fire_flamethrower(id){
  100.  
  101. emit_sound(id, CHAN_WEAPON, "ambience/flameburst1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  102. //client_cmd(id, "bind mouse3 lallamitaywea")
  103. new vec[3]
  104. new aimvec[3]
  105. new velocityvec[3]
  106. new length
  107. new speed = 10
  108. get_user_origin(id,vec)
  109. get_user_origin(id,aimvec,2)
  110. new dist = get_distance(vec,aimvec)
  111.  
  112. new speed1 = 160
  113. new speed2 = 350
  114. new radius = 105
  115.  
  116. if(dist < 50){
  117. radius = 0
  118. speed = 5
  119. }
  120. else if(dist < 150){
  121. speed1 = speed2 = 1
  122. speed = 5
  123. radius = 50
  124. }
  125. else if(dist < 200){
  126. speed1 = speed2 = 1
  127. speed = 5
  128. radius = 90
  129. }
  130. else if(dist < 250){
  131. speed1 = speed2 = 90
  132. speed = 6
  133. radius = 90
  134. }
  135. else if(dist < 300){
  136. speed1 = speed2 = 140
  137. speed = 7
  138. }
  139. else if(dist < 350){
  140. speed1 = speed2 = 190
  141. speed = 7
  142. }
  143. else if(dist < 400){
  144. speed1 = 150
  145. speed2 = 240
  146. speed = 8
  147. }
  148. else if(dist < 450){
  149. speed1 = 150
  150. speed2 = 290
  151. speed = 8
  152. }
  153. else if(dist < 500){
  154. speed1 = 180
  155. speed2 = 340
  156. speed = 9
  157. }
  158. else if(dist < 550){
  159. speed1 = 180
  160. speed2 = 340
  161. speed = 10
  162. }
  163. else if(dist < 600){
  164. speed1 = 250
  165. speed2 = 360
  166. speed = 11
  167. }
  168. else if(dist < 660){
  169. speed1 = 280
  170. speed2 = 390
  171. speed = 12
  172. }
  173. velocityvec[0]=aimvec[0]-vec[0]
  174. velocityvec[1]=aimvec[1]-vec[1]
  175. velocityvec[2]=aimvec[2]-vec[2]
  176. length=sqrt(velocityvec[0]*velocityvec[0]+velocityvec[1]*velocityvec[1]+velocityvec[2]*velocityvec[2])
  177. velocityvec[0]=velocityvec[0]*speed/length
  178. velocityvec[1]=velocityvec[1]*speed/length
  179. velocityvec[2]=velocityvec[2]*speed/length
  180.  
  181. new args[8]
  182. args[0] = vec[0]
  183. args[1] = vec[1]
  184. args[2] = vec[2]
  185. args[3] = velocityvec[0]
  186. args[4] = velocityvec[1]
  187. args[5] = velocityvec[2]
  188. set_task(0.1,"te_spray",0,args,8,"a",2)
  189. check_burnzone(id,vec,aimvec,speed1,speed2,radius)
  190. //set_task(0.5,"client_bind",id)
  191.  
  192. return PLUGIN_CONTINUE
  193.  
  194. }
  195.  
  196. public te_spray(args[]){
  197.  
  198. //TE_SPRAY
  199. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  200. write_byte (120) // Throws a shower of sprites or models
  201. write_coord(args[0]) // start pos
  202. write_coord(args[1])
  203. write_coord(args[2])
  204. write_coord(args[3]) // velocity
  205. write_coord(args[4])
  206. write_coord(args[5])
  207. write_short (fire) // spr
  208. write_byte (8) // count
  209. write_byte (70) // speed
  210. write_byte (100) //(noise)
  211. write_byte (5) // (rendermode)
  212. message_end()
  213.  
  214. return PLUGIN_CONTINUE
  215. }
  216.  
  217.  
  218. public sqrt(num) {
  219. new div = num
  220. new result = 1
  221. while (div > result) { // end when div == result, or just below
  222. div = (div + result) / 2 // take mean value as new divisor
  223. result = num / div
  224. }
  225. return div
  226. }
  227.  
  228. check_burnzone(id,vec[],aimvec[],speed1,speed2,radius){
  229. new maxplayers = get_maxplayers()+1
  230. new tid, tbody
  231. get_user_aiming(id,tid,tbody,550)
  232. if((tid > 0) && (tid < maxplayers)){
  233. burn_victim(tid,id,0)
  234. /*if(cvar_exists("mp_friendlyfire")){
  235. new ffcvar = get_cvar_num("mp_friendlyfire")
  236. if( (ffcvar == 0) || ((ffcvar == 1) && (get_cvar_num("amx_flamethrower_obeyffcvar") == 0)) ){
  237. if(get_user_team(tid) != get_user_team(id))
  238. burn_victim(tid,id,1)
  239. }
  240. else {
  241. if(get_user_team(tid) == get_user_team(id))
  242. burn_victim(tid,id,1)
  243. else
  244. burn_victim(tid,id,1)
  245. }
  246. }else{
  247. burn_victim(tid,id,0)
  248. }*/
  249. }
  250.  
  251. new burnvec1[3],burnvec2[3],length1
  252.  
  253. burnvec1[0]=aimvec[0]-vec[0]
  254. burnvec1[1]=aimvec[1]-vec[1]
  255. burnvec1[2]=aimvec[2]-vec[2]
  256.  
  257. length1=sqrt(burnvec1[0]*burnvec1[0]+burnvec1[1]*burnvec1[1]+burnvec1[2]*burnvec1[2])
  258. burnvec2[0]=burnvec1[0]*speed2/length1
  259. burnvec2[1]=burnvec1[1]*speed2/length1
  260. burnvec2[2]=burnvec1[2]*speed2/length1
  261. burnvec1[0]=burnvec1[0]*speed1/length1
  262. burnvec1[1]=burnvec1[1]*speed1/length1
  263. burnvec1[2]=burnvec1[2]*speed1/length1
  264. burnvec1[0] += vec[0]
  265. burnvec1[1] += vec[1]
  266. burnvec1[2] += vec[2]
  267. burnvec2[0] += vec[0]
  268. burnvec2[1] += vec[1]
  269. burnvec2[2] += vec[2]
  270.  
  271. new origin[3]
  272. for (new i=1; i<=maxplayers; i++) {
  273. if(cvar_exists("mp_friendlyfire")){
  274. new ffcvar = get_cvar_num("mp_friendlyfire")
  275. if( (ffcvar == 0) || ((ffcvar == 1) && (get_cvar_num("amx_flamethrower_obeyffcvar") == 0)) ){
  276. if(get_user_team(i) != get_user_team(id)){
  277. if((is_user_alive(i) == 1) && (i != id)){
  278. get_user_origin(i,origin)
  279. if(get_distance(origin,burnvec1) < radius)
  280. burn_victim(i,id,1)
  281. else if(get_distance(origin,burnvec2) < radius)
  282. burn_victim(i,id,1)
  283. }
  284. }
  285.  
  286. }
  287. else {
  288. if((is_user_alive(i) == 1) && (i != id)){
  289. get_user_origin(i,origin)
  290. if(get_user_team(i) == get_user_team(id)){
  291. if(get_distance(origin,burnvec1) < radius)
  292. burn_victim(i,id,1)
  293. else if(get_distance(origin,burnvec2) < radius)
  294. burn_victim(i,id,1)
  295. }else{
  296. if(get_distance(origin,burnvec1) < radius)
  297. burn_victim(i,id,1)
  298. else if(get_distance(origin,burnvec2) < radius)
  299. burn_victim(i,id,1)
  300. }
  301. }
  302. }
  303. }
  304. else {
  305. if((is_user_alive(i) == 1) && (i != id)){
  306. get_user_origin(i,origin)
  307. if(get_distance(origin,burnvec1) < radius)
  308. burn_victim(i,id,1)
  309. else if(get_distance(origin,burnvec2) < radius)
  310. burn_victim(i,id,1)
  311.  
  312. }
  313. }
  314. }
  315. return PLUGIN_CONTINUE
  316. }
  317.  
  318. burn_victim(id,killer,tk){
  319. if(isburning[id] == 1)
  320. return PLUGIN_CONTINUE
  321.  
  322. isburning[id] = 1
  323.  
  324. emit_sound(id, CHAN_ITEM, "ambience/burning1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  325.  
  326. new hp,args[4]
  327. hp = get_user_health(id)
  328. if(hp > 250)
  329. hp = 250
  330. args[0] = id
  331. args[1] = killer
  332. args[2] = tk
  333. set_task(0.3,"on_fire",451,args,4,"a",hp / 10)
  334. set_task(0.7,"fire_scream",0,args,4)
  335. set_task(5.5,"stop_firesound",0,args,4)
  336.  
  337. if(tk == 1){
  338. new namea[32]
  339. get_user_name(killer,namea,31)
  340. new teama[32]
  341. get_user_team(killer,teama,31)
  342. new players[32],pNum
  343. get_players(players,pNum,"e",teama)
  344. for(new i=0;i<pNum;i++)
  345. //client_print(players[i],print_chat,"%s megtamadta a csapattarsat",namea)
  346. client_print(players[i],print_chat,"",namea)
  347. new punish1 = get_cvar_num("amx_flamethrower_tkpunish1")
  348. new punish2 = get_cvar_num("amx_flamethrower_tkpunish2")
  349. if(punish1 > 2){
  350. user_kill(killer,0)
  351. //set_hudmessage(255,50,50, -1.0, 0.45, 0, 0.02, 10.0, 1.01, 1.1, 16)
  352. //show_hudmessage(killer,"Meg haltal^nMert megtamadtad a csapattarsadat.^nHalott vagy!")
  353. server_cmd("echo Plugin By LARP^^!", tk)
  354. }
  355.  
  356. tkcount[killer] +=1
  357. if((punish1) && (tkcount[killer] > punish2 - 1)){
  358. if(punish1 == 1 || punish1 == 3)
  359. server_cmd("echo Plugin By LARP^^!")
  360. else if(punish1 == 2 || punish1 == 4){
  361. server_cmd("echo Plugin By LARP^^!")
  362. new authida[35]
  363. get_user_authid(killer,authida,34)
  364. if (equal("4294967295",authida)){
  365. new ipa[32]
  366. get_user_ip(killer,ipa,31,1)
  367. server_cmd("echo Plugin By LARP^^!")
  368. }else{
  369. server_cmd("echo Plugin By LARP^^!")
  370. }
  371. }
  372. }
  373. }
  374. return PLUGIN_CONTINUE
  375. }
  376.  
  377. public on_fire(args[]){
  378.  
  379. new hp,rx,ry,rz,forigin[3]
  380. new id = args[0]
  381. new killer = args[1]
  382. new tk = args[2]
  383.  
  384. if(isburning[id] == 0)
  385. return PLUGIN_CONTINUE
  386.  
  387. rx = random_num(-30,30)
  388. ry = random_num(-30,30)
  389. rz = random_num(-30,30)
  390. get_user_origin(id,forigin)
  391.  
  392. //TE_SPRITE - additive sprite, plays 1 cycle
  393. message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
  394. write_byte( 17 )
  395. write_coord(forigin[0]+rx) // coord, coord, coord (position)
  396. write_coord(forigin[1]+ry)
  397. write_coord(forigin[2]+10+rz)
  398. write_short( burning ) // short (sprite index)
  399. write_byte( 30 ) // byte (scale in 0.1's)
  400. write_byte( 200 ) // byte (brightness)
  401. message_end()
  402.  
  403. //Smoke
  404. message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
  405. write_byte( 5 )
  406. write_coord(forigin[0]+(rx*2)) // coord, coord, coord (position)
  407. write_coord(forigin[1]+(ry*2))
  408. write_coord(forigin[2]+100+(rz*2))
  409. write_short( smoke )// short (sprite index)
  410. write_byte( 60 ) // byte (scale in 0.1's)
  411. write_byte( 15 ) // byte (framerate)
  412. message_end()
  413.  
  414. if(is_user_alive(id) == 0)
  415. return PLUGIN_CONTINUE
  416.  
  417. hp = get_user_health(id)
  418.  
  419. if((hp - 10) > 0){
  420. set_user_health(id,hp - 8)
  421. }
  422. else {
  423.  
  424. new namek[32],namev[32],authida[35],authidv[35],teama[32],teamv[32]
  425. get_user_name(id,namev,31)
  426. get_user_name(killer,namek,31)
  427. get_user_authid(id,authidv,34)
  428. get_user_authid(killer,authida,34)
  429. get_user_team(id,teamv,31)
  430. get_user_team(killer,teama,31)
  431.  
  432. //Log the Kill
  433. //log_message("^"%s<%d><%s><%s>^" megolve ^"%s<%d><%s><%s>^" a ^"tuzhanyas altal^"",
  434. //namek,get_user_userid(killer),authida,teama,namev,get_user_userid(id),authidv,teamv)
  435.  
  436. //Print message to clients
  437. //client_print(id,print_chat,"[AMXX] Megoltek teged %s's a Tuz hanyasoddal.",namek)
  438. //client_print(killer,print_chat,"[AMXX] Te megolted %s a Tuz Hanyasoddal.",namev)
  439. user_kill(id,0)
  440.  
  441. if(tk == 1){
  442. //client_print(killer,print_center,"Megolted a csapat tarsadat")
  443. server_cmd("echo Plugin By LARP^^!")
  444. }
  445. else{
  446. server_cmd("echo Plugin By LARP^^!")
  447. }
  448.  
  449. //Kill the victim and block the messages
  450. set_msg_block(gmsgDeathMsg,BLOCK_ONCE)
  451. set_msg_block(gmsgScoreInfo,BLOCK_ONCE)
  452. user_kill(id,1)
  453.  
  454. //Makes them stop burning
  455. isburning[id] = 0
  456.  
  457. //Update killers scorboard with new info
  458. message_begin(MSG_ALL,gmsgScoreInfo)
  459. write_byte(killer)
  460. write_short(get_user_frags(killer))
  461. write_short(get_user_deaths(killer))
  462. write_short(0)
  463. write_short(get_user_team(killer))
  464. message_end()
  465.  
  466. //Update victims scoreboard with correct info
  467. message_begin(MSG_ALL,gmsgScoreInfo)
  468. write_byte(id)
  469. write_short(get_user_frags(id))
  470. write_short(get_user_deaths(id))
  471. write_short(0)
  472. write_short(get_user_team(id))
  473. message_end()
  474.  
  475. //Replaced HUD death message
  476. message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0)
  477. write_byte(killer)
  478. write_byte(id)
  479. write_byte(0)
  480. write_string("flamethrower")
  481. message_end()
  482.  
  483. }
  484. return PLUGIN_CONTINUE
  485. }
  486.  
  487. public fire_scream(args[]){
  488. emit_sound(args[0], CHAN_AUTO, "player/headshot2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  489. return PLUGIN_CONTINUE
  490. }
  491.  
  492. public stop_firesound(args[]){
  493. isburning[args[0]] = 0
  494. emit_sound(args[0], CHAN_ITEM, "vox/_period.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  495. return PLUGIN_CONTINUE
  496. }
  497.  
  498. public client_connect(id){
  499. flame[id]=false
  500. return PLUGIN_CONTINUE
  501. }
  502.  
  503. public client_disconnect(id){
  504. flame[id]=false
  505. return PLUGIN_CONTINUE
  506. }
  507.  
  508. public round_start(id) {
  509. /*for (new k = 1; k <= get_maxplayers(); k++) {
  510. isburning[k] = 0
  511. new freeF = get_cvar_num("amx_flamethrower_free")
  512. if(freeF > 0)
  513. flame_count[k] = freeF
  514. }*/
  515. flame[id]=false
  516. }
  517. public round_end(id) {
  518. flame[id]=false
  519. }
  520.  
  521.  
  522.  
  523. public plugin_modules()
  524. {
  525. require_module("fun")
  526. require_module("engine")
  527. require_module("Counter-Strike")
  528.  
  529. }
  530.  
  531. public FM_PreThink(id)
  532. {
  533. if(!is_user_alive(id) || !zp_get_user_zombie(id)) return PLUGIN_CONTINUE
  534. new fl_cost = get_cvar_num("amx_fl_hp");
  535. new armr = get_user_health(id);
  536. new nzbut = get_user_button(id)
  537. new ozbut = get_user_oldbutton(id)
  538. if((zp_get_user_zombie_class(id) == g_zflame) && (nzbut & IN_USE) && !(ozbut & IN_USE))
  539. //static name[32]
  540. if(flame[id])
  541. {
  542. if(armr < fl_cost)
  543. {
  544. client_print(id,print_chat,"[ZP] Vigyazz!, Hamarosan meg fogsz halni ha folytatod a tuz hanyast!")
  545. return PLUGIN_HANDLED
  546. }
  547. set_user_health(id ,armr - fl_cost);
  548. fire_flamethrower(id);
  549. }
  550. else{
  551. if((nzbut & IN_USE) && (get_entity_flags(id) & FL_ONGROUND))
  552. flame[id]=false
  553. }
  554. return PLUGIN_CONTINUE
  555. }
  556. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  557. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1034\\ f0\\ fs16 \n\\ par }
  558. */
  559.