MegastoRM

knife

Oct 4th, 2012
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 36.01 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <fun>
  3. #include <fakemeta>
  4. #include <hamsandwich>
  5. #include <zombieplague>
  6.  
  7. #define PLUGIN "[ZP] Addon: Knifes"
  8. #define VERSION "1.0"
  9. #define AUTHOR "BlackCat"
  10.  
  11. #define VIP ADMIN_LEVEL_H
  12.  
  13. new KNIFE1_V_MODEL[] = "models/AmdZp/v_axe.mdl"
  14. new KNIFE1_P_MODEL[] = "models/AmdZp/p_axe.mdl"
  15.  
  16. new KNIFE2_V_MODEL[] = "models/AmdZp/v_strong.mdl"
  17. new KNIFE2_P_MODEL[] = "models/AmdZp/p_strong.mdl"
  18.  
  19. new KNIFE3_V_MODEL[] = "models/AmdZp/v_combat.mdl"
  20. new KNIFE3_P_MODEL[] = "models/AmdZp/p_combat.mdl"
  21.  
  22. new KNIFE4_V_MODEL[] = "models/AmdZp/v_cekic.mdl"
  23. new KNIFE4_P_MODEL[] = "models/AmdZp/p_cekic.mdl"
  24.  
  25. new KNIFESURV_V_MODEL[] = "models/AmdZp/v_axe_surv.mdl"
  26. new KNIFESURV_P_MODEL[] = "models/AmdZp/p_axe_surv.mdl"
  27.  
  28. new bool:g_has_axe[33]
  29. new bool:g_has_strong[33]
  30. new bool:g_has_combat[33]
  31. new bool:g_has_hammer[33]
  32. new bool:g_has_survivoraxe[33]
  33.  
  34. new g_knife_menu, g_vip_knife_menu
  35. new cvar_knock_axe, cvar_jump_axe, cvar_speed_axe, cvar_damage_axe
  36. new cvar_knock_strong, cvar_jump_strong, cvar_speed_strong, cvar_damage_strong
  37. new cvar_knock_combat, cvar_jump_combat, cvar_speed_combat, cvar_damage_combat
  38. new cvar_knock_hammer, cvar_jump_hammer, cvar_speed_hammer, cvar_damage_hammer
  39. new cvar_knock_surv, cvar_jump_surv, cvar_speed_surv, cvar_damage_surv
  40.  
  41. new const g_sound_knife[] = { "items/gunpickup2.wav" }
  42.  
  43. new const axe_sounds[][] =
  44. {
  45. "AmdZp/axe_draw.wav",
  46. "AmdZp/axe_hit_01.wav",
  47. "AmdZp/axe_hit_02.wav",
  48. "AmdZp/axe_hit_wall.wav",
  49. "AmdZp/axe_miss.wav",
  50. "AmdZp/axe_stab.wav"
  51. }
  52.  
  53. new const strong_sounds[][] =
  54. {
  55. "AmdZp/strong_draw.wav",
  56. "AmdZp/strong_hit_01.wav",
  57. "AmdZp/strong_hit_02.wav",
  58. "AmdZp/strong_hit_wall.wav",
  59. "AmdZp/strong_miss.wav",
  60. "AmdZp/strong_stab.wav"
  61. }
  62.  
  63. new const combat_sounds[][] =
  64. {
  65. "AmdZp/combat_draw.wav",
  66. "AmdZp/combat_hit_01.wav",
  67. "AmdZp/combat_hit_02.wav",
  68. "AmdZp/combat_hit_wall.wav",
  69. "AmdZp/combat_miss.wav",
  70. "AmdZp/combat_stab.wav"
  71. }
  72.  
  73. new const hammer_sounds[][] =
  74. {
  75. "AmdZp/hammer_draw.wav",
  76. "AmdZp/hammer_hit_01.wav",
  77. "AmdZp/hammer_hit_02.wav",
  78. "AmdZp/hammer_hit_wall.wav",
  79. "AmdZp/hammer_miss.wav",
  80. "AmdZp/hammer_stab.wav"
  81. }
  82.  
  83. new const surv_sounds[][] =
  84. {
  85. "AmdZp/axe_draw.wav",
  86. "AmdZp/axe_hit_01.wav",
  87. "AmdZp/axe_hit_02.wav",
  88. "AmdZp/axe_hit_wall.wav",
  89. "AmdZp/axe_miss.wav",
  90. "AmdZp/axe_stab.wav"
  91. }
  92.  
  93. public plugin_init()
  94. {
  95. register_plugin(PLUGIN , VERSION , AUTHOR);
  96. register_cvar("zp_addon_knife", VERSION, FCVAR_SERVER);
  97.  
  98. g_knife_menu = menu_create("Izaberi Noz:","menu_handle")
  99. g_vip_knife_menu = menu_create("Izaberi Noz:","menu_handle_vip")
  100.  
  101. register_clcmd("knife_menu","knifemenu",ADMIN_ALL,"knife_menu")
  102. register_clcmd("say /knife","knifemenu",ADMIN_ALL,"knife_menu")
  103. register_clcmd("say /noz","knifemenu",ADMIN_ALL,"knife_menu")
  104.  
  105. build_menu()
  106. build_menu_vip()
  107.  
  108. register_event("CurWeapon","checkWeapon","be","1=1");
  109.  
  110. register_forward(FM_EmitSound, "CEntity__EmitSound");
  111. register_forward(FM_PlayerPreThink, "fw_PlayerPreThink");
  112.  
  113. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");
  114. RegisterHam(Ham_Spawn, "player", "fw_playerspawn_post", 1)
  115. RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
  116. RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
  117. RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
  118. RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
  119.  
  120. register_message(get_user_msgid("DeathMsg"), "message_DeathMsg");
  121.  
  122. register_clcmd("zm_knife_strong", "clcmd_knife")
  123. register_clcmd("zm_knife_hammer", "clcmd_knife")
  124. register_clcmd("zm_knife_combat", "clcmd_knife")
  125. register_clcmd("zm_knife_axe", "clcmd_knife")
  126. register_clcmd("say /knifeinfo","Meni")
  127.  
  128. cvar_jump_axe = register_cvar("zp_axe_jump", "340.0")
  129. cvar_speed_axe = register_cvar("zp_axe_speed", "240.0")
  130. cvar_damage_axe = register_cvar("zp_axe_damage", "6.2")
  131. cvar_knock_axe = register_cvar("zp_axe_knockback", "5.2")
  132.  
  133. cvar_jump_strong = register_cvar("zp_strong_jump", "360.0")
  134. cvar_speed_strong = register_cvar("zp_strong_speed", "280.0")
  135. cvar_damage_strong = register_cvar("zp_strong_damage", "6.2")
  136. cvar_knock_strong = register_cvar("zp_strong_knockback", "3.0")
  137.  
  138. cvar_jump_combat = register_cvar("zp_combat_jump", "370.0")
  139. cvar_speed_combat = register_cvar("zp_combat_speed", "260")
  140. cvar_damage_combat = register_cvar("zp_combat_damage", "3.2")
  141. cvar_knock_combat = register_cvar("zp_combat_knockback", "3.0")
  142.  
  143. cvar_jump_hammer = register_cvar("zp_hammer_jump", "400.0")
  144. cvar_speed_hammer = register_cvar("zp_hammer_speed", "280.0")
  145. cvar_damage_hammer = register_cvar("zp_hammer_damage", "10.0")
  146. cvar_knock_hammer = register_cvar("zp_hammer_knockback", "8.0")
  147.  
  148. cvar_jump_surv = register_cvar("zp_axe_surv_jump", "350.0")
  149. cvar_speed_surv = register_cvar("zp_axe_surv_speed", "275.0")
  150. cvar_damage_surv = register_cvar("zp_axe_surv_damage", "26.0")
  151. cvar_knock_surv = register_cvar("zp_axe_surv_knockback", "3.6")
  152. }
  153.  
  154. public client_connect(id)
  155. {
  156. g_has_axe[id] = true
  157. g_has_strong[id] = false
  158. g_has_combat[id] = false
  159. g_has_hammer[id] = false
  160. g_has_survivoraxe[id] = false
  161. }
  162.  
  163. public client_disconnect(id)
  164. {
  165. g_has_axe[id] = false
  166. g_has_strong[id] = false
  167. g_has_combat[id] = false
  168. g_has_hammer[id] = false
  169. g_has_survivoraxe[id] = false
  170. }
  171.  
  172. public plugin_precache()
  173. {
  174. precache_model(KNIFE1_V_MODEL)
  175. precache_model(KNIFE1_P_MODEL)
  176. precache_model(KNIFE2_V_MODEL)
  177. precache_model(KNIFE2_P_MODEL)
  178. precache_model(KNIFE3_V_MODEL)
  179. precache_model(KNIFE3_P_MODEL)
  180. precache_model(KNIFE4_V_MODEL)
  181. precache_model(KNIFE4_P_MODEL)
  182. precache_model(KNIFESURV_V_MODEL)
  183. precache_model(KNIFESURV_P_MODEL)
  184.  
  185. precache_generic("sprites/zm_knife_strong.txt")
  186. precache_generic("sprites/zm_knife_hammer.txt")
  187. precache_generic("sprites/zm_knife_combat.txt")
  188. precache_generic("sprites/zm_knife_axe.txt")
  189.  
  190. precache_generic("sprites/AmdZp/640hud7.spr")
  191. precache_generic("sprites/AmdZp/640hud21.spr")
  192. precache_generic("sprites/AmdZp/640hud23.spr")
  193. precache_generic("sprites/AmdZp/640hud38.spr")
  194. precache_generic("sprites/AmdZp/640hud39.spr")
  195.  
  196. precache_sound(g_sound_knife)
  197.  
  198. for(new i = 0; i < sizeof axe_sounds; i++)
  199. precache_sound(axe_sounds[i])
  200.  
  201. for(new i = 0; i < sizeof strong_sounds; i++)
  202. precache_sound(strong_sounds[i])
  203.  
  204. for(new i = 0; i < sizeof combat_sounds; i++)
  205. precache_sound(combat_sounds[i])
  206.  
  207. for(new i = 0; i < sizeof hammer_sounds; i++)
  208. precache_sound(hammer_sounds[i])
  209.  
  210. for(new i = 0; i < sizeof surv_sounds; i++)
  211. precache_sound(surv_sounds[i])
  212. }
  213.  
  214. public clcmd_knife(id)
  215. {
  216. if(!is_user_alive(id))
  217. return;
  218.  
  219. engclient_cmd(id, "weapon_knife")
  220. }
  221.  
  222. build_menu()
  223. {
  224. menu_additem(g_knife_menu, "Axe[Damage]", "1")
  225. menu_additem(g_knife_menu, "Strong[Speed]", "2")
  226. menu_additem(g_knife_menu, "Combat[Jump]", "3")
  227. menu_additem(g_knife_menu, "\dHammer \r[VIP]", "4")
  228. menu_setprop(g_knife_menu, MPROP_PERPAGE, 0)
  229. }
  230.  
  231. build_menu_vip()
  232. {
  233. menu_additem(g_vip_knife_menu, "Axe[Damage]", "1")
  234. menu_additem(g_vip_knife_menu, "Strong[Speed]", "2")
  235. menu_additem(g_vip_knife_menu, "Combat[Jump]", "3")
  236. menu_additem(g_vip_knife_menu, "\wHammer \r[VIP]", "4")
  237. menu_setprop(g_vip_knife_menu, MPROP_PERPAGE, 0)
  238. }
  239.  
  240. public Meni(id)
  241. {
  242. new szItem[32]
  243. new menu = menu_create("Odaberi Noz","knife_H");
  244.  
  245. formatex(szItem, 31, "\rAxe")
  246. menu_additem(menu,szItem, "1")
  247. formatex(szItem, 31, "\rStrong")
  248. menu_additem(menu,szItem, "2")
  249. formatex(szItem, 31, "\rCombat")
  250. menu_additem(menu,szItem, "3")
  251. formatex(szItem, 31, "\rHammer\y[V.I.P]^n^n")
  252. menu_additem(menu,szItem, "4")
  253. formatex(szItem, 31, "\rSurvivor Axe[Survivor]")
  254. menu_additem(menu,szItem, "5")
  255.  
  256. menu_setprop(menu, MPROP_EXITNAME, "Izlaz");
  257. menu_display(id,menu);
  258. }
  259.  
  260. public knife_H(id, menu, item)
  261. {
  262. switch(item)
  263. {
  264. case MENU_EXIT:
  265. {
  266. menu_destroy(menu)
  267. }
  268. case 0:
  269. {
  270. Info1(id)
  271. }
  272. case 1:
  273. {
  274. Info2(id)
  275. }
  276. case 2:
  277. {
  278. Info3(id)
  279. }
  280. case 3:
  281. {
  282. Info4(id)
  283. }
  284. case 4:
  285. {
  286. Info5(id)
  287. }
  288.  
  289. }
  290. return PLUGIN_CONTINUE;
  291. }
  292.  
  293.  
  294.  
  295. public Info1(id)
  296. {
  297. show_menu(id, 1023, "\rAxe^n\y[dmg: 6x]^n[jump: 340]^n[speed: 240]^n[KB: 5x]", -1, "Info")
  298. }
  299. public Info2(id)
  300. {
  301. show_menu(id, 1023, "\rStrong^n\y[dmg: 6x]^n[jump: 360]^n[speed: 280]^n[KB: 3x]", -1, "Info")
  302. }
  303. public Info3(id)
  304. {
  305. show_menu(id, 1023, "\rCombat^n\y[dmg: 3x]^n[jump: 370]^n[speed: 260]^n[KB: 3x]", -1, "Info")
  306. }
  307. public Info4(id)
  308. {
  309. show_menu(id, 1023, "\rHammer\w[Vip]^n\y[dmg: 10x]^n[jump: 400]^n[speed: 280]^n[KB: 10x]", -1, "Info")
  310. }
  311. public Info5(id)
  312. {
  313. show_menu(id, 1023, "\rSurvivor Axe^n\w[Survivor]\y[dmg: 26x]^n[jump: 350]^n[speed: 275]^n[KB: 3.6x]", -1, "Info")
  314. }
  315.  
  316. public knifemenu(id)
  317. {
  318. if (zp_has_round_started())
  319. return;
  320.  
  321. if (!zp_has_round_started())
  322. {
  323. menu_display(id, !(get_user_flags(id) & VIP) ? g_knife_menu : g_vip_knife_menu, 0)
  324. }
  325. }
  326.  
  327. public menu_handle_vip(id, menu, item)
  328. {
  329. if(item < 0)
  330. return PLUGIN_CONTINUE
  331.  
  332. new cmd[2];
  333. new access, callback;
  334. menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
  335. new choice = str_to_num(cmd)
  336.  
  337. switch (choice)
  338. {
  339. case 1: buy_knife1(id)
  340. case 2: buy_knife2(id)
  341. case 3: buy_knife3(id)
  342. case 4: buy_knife4(id)
  343. }
  344. return PLUGIN_HANDLED;
  345. }
  346.  
  347. public menu_handle(id, menu, item)
  348. {
  349. if(item < 0)
  350. return PLUGIN_CONTINUE
  351.  
  352. new cmd[2];
  353. new access, callback;
  354. menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
  355. new choice = str_to_num(cmd)
  356.  
  357. switch (choice)
  358. {
  359. case 1: buy_knife1(id)
  360. case 2: buy_knife2(id)
  361. case 3: buy_knife3(id)
  362. case 4: buy_knife4(id)
  363. }
  364. return PLUGIN_HANDLED;
  365. }
  366.  
  367. public buy_knife1(id)
  368. {
  369. g_has_axe[id] = true
  370. g_has_strong[id] = false
  371. g_has_combat[id] = false
  372. g_has_hammer[id] = false
  373. g_has_survivoraxe[id] = false
  374.  
  375. set_sprite(id)
  376.  
  377. message_begin(MSG_ONE, get_user_msgid("WeapPickup"), {0,0,0}, id)
  378. write_byte(29)
  379. message_end()
  380.  
  381. checkWeapon(id)
  382.  
  383. engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)
  384. }
  385.  
  386. public buy_knife2(id)
  387. {
  388. g_has_axe[id] = false
  389. g_has_strong[id] = true
  390. g_has_combat[id] = false
  391. g_has_hammer[id] = false
  392. g_has_survivoraxe[id] = false
  393.  
  394. set_sprite(id)
  395.  
  396. message_begin(MSG_ONE, get_user_msgid("WeapPickup"), {0,0,0}, id)
  397. write_byte(29)
  398. message_end()
  399.  
  400. checkWeapon(id)
  401.  
  402. engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)
  403. }
  404.  
  405. public buy_knife3(id)
  406. {
  407. g_has_axe[id] = false
  408. g_has_strong[id] = false
  409. g_has_combat[id] = true
  410. g_has_hammer[id] = false
  411. g_has_survivoraxe[id] = false
  412.  
  413. set_sprite(id)
  414.  
  415. message_begin(MSG_ONE, get_user_msgid("WeapPickup"), {0,0,0}, id)
  416. write_byte(29)
  417. message_end()
  418.  
  419. checkWeapon(id)
  420.  
  421. engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)
  422. }
  423.  
  424. public buy_knife4(id)
  425. {
  426. if (get_user_flags(id) & VIP)
  427. {
  428. g_has_axe[id] = false
  429. g_has_strong[id] = false
  430. g_has_combat[id] = false
  431. g_has_hammer[id] = true
  432. g_has_survivoraxe[id] = false
  433.  
  434. set_sprite(id)
  435.  
  436. message_begin(MSG_ONE, get_user_msgid("WeapPickup"), {0,0,0}, id)
  437. write_byte(29)
  438. message_end()
  439.  
  440. checkWeapon(id)
  441.  
  442. engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)
  443. }
  444. else
  445. {
  446. knifemenu(id)
  447. ChatColor(id, "!gNemas pristup!")
  448. }
  449.  
  450. }
  451.  
  452. public fw_UseStationary_Post(entity, caller, activator, use_type)
  453. {
  454. if (use_type == 0 && is_user_connected(caller))
  455. checkWeapon(caller)
  456. }
  457.  
  458. public zp_user_infected_post(id)
  459. {
  460. set_sprite(id)
  461. }
  462.  
  463. public checkWeapon(id)
  464. {
  465. if(get_user_weapon(id) != CSW_KNIFE)
  466. return;
  467.  
  468. if (g_has_axe[id] || g_has_strong[id] || g_has_combat[id] || g_has_hammer[id] || g_has_survivoraxe[id])
  469. {
  470. checkModel(id)
  471. }
  472. return;
  473. }
  474.  
  475. public checkModel(id)
  476. {
  477. if (zp_get_user_zombie(id))
  478. {
  479. set_sprite(id)
  480. return;
  481. }
  482.  
  483. if(get_user_weapon(id) != CSW_KNIFE)
  484. return;
  485.  
  486. if (g_has_axe[id])
  487. {
  488. set_pev(id, pev_viewmodel2, KNIFE1_V_MODEL)
  489. set_pev(id, pev_weaponmodel2, KNIFE1_P_MODEL)
  490. }
  491. else if (g_has_strong[id])
  492. {
  493. set_pev(id, pev_viewmodel2, KNIFE2_V_MODEL)
  494. set_pev(id, pev_weaponmodel2, KNIFE2_P_MODEL)
  495. }
  496. else if (g_has_combat[id])
  497. {
  498. set_pev(id, pev_viewmodel2, KNIFE3_V_MODEL)
  499. set_pev(id, pev_weaponmodel2, KNIFE3_P_MODEL)
  500. }
  501. else if (g_has_hammer[id])
  502. {
  503. set_pev(id, pev_viewmodel2, KNIFE4_V_MODEL)
  504. set_pev(id, pev_weaponmodel2, KNIFE4_P_MODEL)
  505. }
  506. else if(g_has_survivoraxe[id])
  507. {
  508. set_pev(id, pev_viewmodel2, KNIFESURV_V_MODEL)
  509. set_pev(id, pev_weaponmodel2, KNIFESURV_P_MODEL)
  510. }
  511. set_sprite(id)
  512. }
  513.  
  514. public fw_playerspawn_post(id)
  515. {
  516. if(!is_user_alive(id))
  517. return;
  518.  
  519. if(g_has_survivoraxe[id])
  520. {
  521. g_has_axe[id] = true
  522. g_has_strong[id] = false
  523. g_has_combat[id] = false
  524. g_has_hammer[id] = false
  525. g_has_survivoraxe[id] = false
  526.  
  527. set_sprite(id)
  528. }
  529. return;
  530. }
  531.  
  532. public CEntity__EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
  533. {
  534. if (!is_user_connected(id))
  535. return HAM_IGNORED
  536.  
  537. if (zp_get_user_zombie(id))
  538. return HAM_IGNORED
  539.  
  540. if (sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
  541. {
  542.  
  543. if (sample[14] == 'd')
  544. {
  545. if(g_has_axe[id])
  546. emit_sound(id, channel, axe_sounds[0], volume, attn, flags, pitch)
  547. if(g_has_strong[id])
  548. emit_sound(id, channel, strong_sounds[0], volume, attn, flags, pitch)
  549. if(g_has_combat[id])
  550. emit_sound(id, channel, combat_sounds[0], volume, attn, flags, pitch)
  551. if(g_has_hammer[id])
  552. emit_sound(id, channel, hammer_sounds[0], volume, attn, flags, pitch)
  553. if(g_has_survivoraxe[id])
  554. emit_sound(id, channel, surv_sounds[0], volume, attn, flags, pitch)
  555. }
  556. else if (sample[14] == 'h')
  557. {
  558. if (sample[17] == 'w')
  559. {
  560. if(g_has_axe[id])
  561. emit_sound(id, channel, axe_sounds[3], volume, attn, flags, pitch)
  562. if(g_has_strong[id])
  563. emit_sound(id, channel, strong_sounds[3], volume, attn, flags, pitch)
  564. if(g_has_combat[id])
  565. emit_sound(id, channel, combat_sounds[3], volume, attn, flags, pitch)
  566. if(g_has_hammer[id] )
  567. emit_sound(id, channel, hammer_sounds[3], volume, attn, flags, pitch)
  568. if(g_has_survivoraxe[id])
  569. emit_sound(id, channel, surv_sounds[3], volume, attn, flags, pitch)
  570. }
  571. else
  572. {
  573. if(g_has_axe[id])
  574. emit_sound(id, channel, axe_sounds[random_num(1,2)], volume, attn, flags, pitch)
  575. if(g_has_strong[id])
  576. emit_sound(id, channel, strong_sounds[random_num(1,2)], volume, attn, flags, pitch)
  577. if(g_has_combat[id])
  578. emit_sound(id, channel, combat_sounds[random_num(1,2)], volume, attn, flags, pitch)
  579. if(g_has_hammer[id])
  580. emit_sound(id, channel, hammer_sounds[random_num(1,2)], volume, attn, flags, pitch)
  581. if(g_has_survivoraxe[id])
  582. emit_sound(id, channel, surv_sounds[random_num(1,2)], volume, attn, flags, pitch)
  583. }
  584. }
  585. else
  586. {
  587. if (sample[15] == 'l')
  588. {
  589. if(g_has_axe[id])
  590. emit_sound(id, channel, axe_sounds[4], volume, attn, flags, pitch)
  591. if(g_has_strong[id])
  592. emit_sound(id, channel, strong_sounds[4], volume, attn, flags, pitch)
  593. if(g_has_combat[id])
  594. emit_sound(id, channel, combat_sounds[4], volume, attn, flags, pitch)
  595. if(g_has_hammer[id])
  596. emit_sound(id, channel, hammer_sounds[4], volume, attn, flags, pitch)
  597. if(g_has_survivoraxe[id])
  598. emit_sound(id, channel, surv_sounds[4], volume, attn, flags, pitch)
  599. }
  600. else
  601. {
  602. if(g_has_axe[id])
  603. emit_sound(id, channel, axe_sounds[5], volume, attn, flags, pitch)
  604. if(g_has_strong[id] )
  605. emit_sound(id, channel, strong_sounds[5], volume, attn, flags, pitch)
  606. if(g_has_combat[id] )
  607. emit_sound(id, channel, combat_sounds[5], volume, attn, flags, pitch)
  608. if(g_has_hammer[id])
  609. emit_sound(id, channel, hammer_sounds[5], volume, attn, flags, pitch)
  610. if(g_has_survivoraxe[id])
  611. emit_sound(id, channel, surv_sounds[5], volume, attn, flags, pitch)
  612. }
  613. }
  614. return HAM_SUPERCEDE
  615. }
  616. return HAM_IGNORED
  617. }
  618.  
  619. public fw_PlayerPreThink(id)
  620. {
  621. if(!is_user_alive(id) || zp_get_user_zombie(id))
  622. return FMRES_IGNORED
  623.  
  624. new temp[2], weapon = get_user_weapon(id, temp[0], temp[1])
  625.  
  626. if (weapon == CSW_KNIFE && g_has_axe[id])
  627. {
  628. set_user_maxspeed(id,get_pcvar_float(cvar_speed_axe))
  629.  
  630. if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
  631. {
  632. new flags = pev(id, pev_flags)
  633. new waterlvl = pev(id, pev_waterlevel)
  634.  
  635. if (!(flags & FL_ONGROUND))
  636. return FMRES_IGNORED
  637.  
  638. if (flags & FL_WATERJUMP)
  639. return FMRES_IGNORED
  640.  
  641. if (waterlvl > 1)
  642. return FMRES_IGNORED
  643.  
  644. new Float:fVelocity[3]
  645. pev(id, pev_velocity, fVelocity)
  646.  
  647. fVelocity[2] += get_pcvar_num(cvar_jump_axe)
  648.  
  649. set_pev(id, pev_velocity, fVelocity)
  650. set_pev(id, pev_gaitsequence, 6)
  651. }
  652. }
  653.  
  654. if(weapon == CSW_KNIFE && g_has_strong[id])
  655. {
  656. set_user_maxspeed(id,get_pcvar_float(cvar_speed_strong))
  657.  
  658. if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
  659. {
  660. new flags = pev(id, pev_flags)
  661. new waterlvl = pev(id, pev_waterlevel)
  662.  
  663. if (!(flags & FL_ONGROUND))
  664. return FMRES_IGNORED
  665.  
  666. if (flags & FL_WATERJUMP)
  667. return FMRES_IGNORED
  668.  
  669. if (waterlvl > 1)
  670. return FMRES_IGNORED
  671.  
  672. new Float:fVelocity[3]
  673. pev(id, pev_velocity, fVelocity)
  674.  
  675. fVelocity[2] += get_pcvar_num(cvar_jump_strong)
  676.  
  677. set_pev(id, pev_velocity, fVelocity)
  678. set_pev(id, pev_gaitsequence, 6)
  679. }
  680. }
  681.  
  682. if(weapon == CSW_KNIFE && g_has_combat[id])
  683. {
  684. if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
  685. {
  686. new flags = pev(id, pev_flags)
  687. new waterlvl = pev(id, pev_waterlevel)
  688.  
  689. if (!(flags & FL_ONGROUND))
  690. return FMRES_IGNORED
  691.  
  692. if (flags & FL_WATERJUMP)
  693. return FMRES_IGNORED
  694.  
  695. if (waterlvl > 1)
  696. return FMRES_IGNORED
  697.  
  698. new Float:fVelocity[3]
  699. pev(id, pev_velocity, fVelocity)
  700.  
  701. fVelocity[2] += get_pcvar_num(cvar_jump_combat)
  702.  
  703. set_pev(id, pev_velocity, fVelocity)
  704. set_pev(id, pev_gaitsequence, 6)
  705. }
  706.  
  707. set_user_maxspeed(id,get_pcvar_float(cvar_speed_combat))
  708. }
  709. if (weapon == CSW_KNIFE && g_has_hammer[id])
  710. {
  711. if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
  712. {
  713. new flags = pev(id, pev_flags)
  714. new waterlvl = pev(id, pev_waterlevel)
  715.  
  716. if (!(flags & FL_ONGROUND))
  717. return FMRES_IGNORED
  718.  
  719. if (flags & FL_WATERJUMP)
  720. return FMRES_IGNORED
  721.  
  722. if (waterlvl > 1)
  723. return FMRES_IGNORED
  724.  
  725. new Float:fVelocity[3]
  726. pev(id, pev_velocity, fVelocity)
  727.  
  728. fVelocity[2] += get_pcvar_num(cvar_jump_hammer)
  729.  
  730. set_pev(id, pev_velocity, fVelocity)
  731. set_pev(id, pev_gaitsequence, 6)
  732. }
  733.  
  734. set_user_maxspeed(id, get_pcvar_float(cvar_speed_hammer))
  735. }
  736. if(weapon == CSW_KNIFE && g_has_survivoraxe[id])
  737. {
  738. if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
  739. {
  740. new flags = pev(id, pev_flags)
  741. new waterlvl = pev(id, pev_waterlevel)
  742.  
  743. if (!(flags & FL_ONGROUND))
  744. return FMRES_IGNORED
  745.  
  746. if (flags & FL_WATERJUMP)
  747. return FMRES_IGNORED
  748.  
  749. if (waterlvl > 1)
  750. return FMRES_IGNORED
  751.  
  752. new Float:fVelocity[3]
  753. pev(id, pev_velocity, fVelocity)
  754.  
  755. fVelocity[2] += get_pcvar_num(cvar_jump_surv)
  756.  
  757. set_pev(id, pev_velocity, fVelocity)
  758. set_pev(id, pev_gaitsequence, 6)
  759. }
  760. set_user_maxspeed(id, get_pcvar_float(cvar_speed_surv))
  761. }
  762. return FMRES_IGNORED
  763. }
  764.  
  765. public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
  766. {
  767. if(!is_user_connected(attacker))
  768. return HAM_IGNORED
  769.  
  770. if(zp_get_user_zombie(attacker))
  771. return HAM_IGNORED
  772.  
  773. if(get_user_weapon(attacker) == CSW_KNIFE)
  774. {
  775.  
  776. if (g_has_axe[attacker])
  777. {
  778. SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_axe))
  779.  
  780. new Float:vec[3];
  781. new Float:oldvelo[3];
  782. pev(victim, pev_velocity, oldvelo);
  783. create_velocity_vector(victim , attacker , vec);
  784. vec[0] += oldvelo[0] + get_pcvar_float(cvar_knock_axe);
  785. vec[1] += oldvelo[1] + 0;
  786. set_pev(victim, pev_velocity, vec);
  787. }
  788. else if (g_has_strong[attacker])
  789. {
  790. SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_strong))
  791.  
  792. new Float:vec[3];
  793. new Float:oldvelo[3];
  794. pev(victim, pev_velocity, oldvelo);
  795. create_velocity_vector(victim , attacker , vec);
  796. vec[0] += oldvelo[0] + get_pcvar_float(cvar_knock_strong);
  797. vec[1] += oldvelo[1] + 0;
  798. set_pev(victim, pev_velocity, vec);
  799. }
  800. else if (g_has_combat[attacker])
  801. {
  802. SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_combat))
  803.  
  804. new Float:vec[3];
  805. new Float:oldvelo[3];
  806. pev(victim, pev_velocity, oldvelo);
  807. create_velocity_vector(victim , attacker , vec);
  808. vec[0] += oldvelo[0] + get_pcvar_float(cvar_knock_combat);
  809. vec[1] += oldvelo[1] + 0;
  810. set_pev(victim, pev_velocity, vec);
  811. }
  812. else if (g_has_hammer[attacker])
  813. {
  814. SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_hammer))
  815.  
  816. new Float:vec[3];
  817. new Float:oldvelo[3];
  818. pev(victim, pev_velocity, oldvelo);
  819. create_velocity_vector(victim , attacker , vec);
  820. vec[0] += oldvelo[0] + get_pcvar_float(cvar_knock_hammer);
  821. vec[1] += oldvelo[1] + 0;
  822. set_pev(victim, pev_velocity, vec);
  823. }
  824. else if(g_has_survivoraxe[attacker])
  825. {
  826. SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_surv))
  827.  
  828. new Float:vec[3];
  829. new Float:oldvelo[3];
  830. pev(victim, pev_velocity, oldvelo);
  831. create_velocity_vector(victim , attacker , vec);
  832. vec[0] += oldvelo[0] + get_pcvar_float(cvar_knock_surv);
  833. vec[1] += oldvelo[1] + 0;
  834. set_pev(victim, pev_velocity, vec);
  835. }
  836. more_blood(victim)
  837. }
  838.  
  839. return HAM_IGNORED
  840. }
  841.  
  842. public message_DeathMsg(msg_id, msg_dest, id)
  843. {
  844. static szTruncatedWeapon[33], iattacker, ivictim
  845.  
  846. get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  847.  
  848. iattacker = get_msg_arg_int(1)
  849. ivictim = get_msg_arg_int(2)
  850.  
  851. if(!is_user_connected(iattacker) || iattacker == ivictim)
  852. return PLUGIN_CONTINUE
  853.  
  854. if (!zp_get_user_zombie(iattacker))
  855. {
  856. if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
  857. {
  858. if(g_has_axe[iattacker])
  859. set_msg_arg_string(4, "axe")
  860. }
  861.  
  862. if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
  863. {
  864. if(g_has_strong[iattacker])
  865. set_msg_arg_string(4, "hatchet")
  866. }
  867.  
  868. if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
  869. {
  870. if(g_has_combat[iattacker])
  871. set_msg_arg_string(4, "mastercombat")
  872. }
  873.  
  874. if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
  875. {
  876. if(g_has_hammer[iattacker])
  877. set_msg_arg_string(4, "hammer")
  878. }
  879.  
  880. if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
  881. {
  882. if(g_has_survivoraxe[iattacker])
  883. set_msg_arg_string(4, "survivoraxe")
  884. }
  885.  
  886. if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
  887. {
  888. if(!g_has_axe[iattacker] && !g_has_strong[iattacker] && !g_has_combat[iattacker] && !g_has_hammer[iattacker] && !g_has_survivoraxe[iattacker] && !zp_get_user_zombie(iattacker))
  889. set_msg_arg_string(4, "knife")
  890. }
  891. }
  892. if (zp_get_user_zombie(iattacker))
  893. {
  894. if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
  895. {
  896. if(g_has_axe[iattacker] || g_has_strong[iattacker] || g_has_combat[iattacker] || g_has_hammer[iattacker] || g_has_survivoraxe[iattacker])
  897. set_msg_arg_string(4, "Claws")
  898. }
  899. }
  900. return PLUGIN_CONTINUE
  901. }
  902.  
  903. stock create_velocity_vector(victim,attacker,Float:velocity[3])
  904. {
  905. if(!zp_get_user_zombie(victim) || !is_user_alive(attacker))
  906. return 0;
  907.  
  908. new Float:vicorigin[3];
  909. new Float:attorigin[3];
  910. pev(victim, pev_origin , vicorigin);
  911. pev(attacker, pev_origin , attorigin);
  912.  
  913. new Float:origin2[3]
  914. origin2[0] = vicorigin[0] - attorigin[0];
  915. origin2[1] = vicorigin[1] - attorigin[1];
  916.  
  917. new Float:largestnum = 0.0;
  918.  
  919. if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
  920. if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);
  921.  
  922. origin2[0] /= largestnum;
  923. origin2[1] /= largestnum;
  924.  
  925. if (g_has_axe[attacker])
  926. {
  927. velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knock_axe) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
  928. velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knock_axe) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
  929. }
  930. else if (g_has_strong[attacker])
  931. {
  932. velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knock_strong) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
  933. velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knock_strong) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
  934. }
  935. else if (g_has_combat[attacker])
  936. {
  937. velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knock_combat) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
  938. velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knock_combat) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
  939. }
  940. else if (g_has_hammer[attacker])
  941. {
  942. velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knock_hammer) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
  943. velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knock_hammer) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
  944. }
  945. else if(g_has_survivoraxe[attacker])
  946. {
  947. velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knock_surv) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
  948. velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knock_surv) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
  949. }
  950.  
  951. if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
  952. velocity[2] = random_float(200.0 , 275.0);
  953.  
  954. return 1;
  955. }
  956.  
  957. public zp_user_humanized_post(id,survivor)
  958. {
  959. if(!zp_get_user_survivor(id))
  960. {
  961. if(g_has_survivoraxe[id])
  962. {
  963. g_has_axe[id] = true
  964. g_has_strong[id] = false
  965. g_has_combat[id] = false
  966. g_has_hammer[id] = false
  967. g_has_survivoraxe[id] = false
  968. set_sprite(id)
  969. }
  970. }
  971. else if(zp_get_user_survivor(id))
  972. {
  973. g_has_axe[id] = false
  974. g_has_strong[id] = false
  975. g_has_combat[id] = false
  976. g_has_hammer[id] = false
  977. g_has_survivoraxe[id] = true
  978. set_sprite(id)
  979. }
  980. }
  981.  
  982. stock fm_set_user_maxspeed(index, Float:speed = -1.0)
  983. {
  984. engfunc(EngFunc_SetClientMaxspeed, index, speed);
  985. set_pev(index, pev_maxspeed, speed);
  986.  
  987. return 1;
  988. }
  989.  
  990. more_blood(id)
  991. {
  992. static iOrigin[3]
  993. get_user_origin(id, iOrigin)
  994.  
  995. message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin)
  996. write_byte(TE_BLOODSTREAM)
  997. write_coord(iOrigin[0])
  998. write_coord(iOrigin[1])
  999. write_coord(iOrigin[2]+10)
  1000. write_coord(random_num(-360, 360))
  1001. write_coord(random_num(-360, 360))
  1002. write_coord(-10)
  1003. write_byte(70)
  1004. write_byte(random_num(50, 100))
  1005. message_end()
  1006.  
  1007. for (new j = 0; j < 4; j++)
  1008. {
  1009. message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin)
  1010. write_byte(TE_WORLDDECAL)
  1011. write_coord(iOrigin[0]+random_num(-100, 100))
  1012. write_coord(iOrigin[1]+random_num(-100, 100))
  1013. write_coord(iOrigin[2]-36)
  1014. write_byte(random_num(190, 197))
  1015. message_end()
  1016. }
  1017. }
  1018.  
  1019. public sprite(const player, const string_msg[], byte_1, byte_2, byte_3, byte_4, byte_5, byte_6, byte_7, byte_8)
  1020. {
  1021. message_begin( MSG_ONE, get_user_msgid("WeaponList"), .player = player );
  1022. {
  1023. write_string(string_msg);
  1024. write_byte(byte_1);
  1025. write_byte(byte_2);
  1026. write_byte(byte_3);
  1027. write_byte(byte_4);
  1028. write_byte(byte_5);
  1029. write_byte(byte_6);
  1030. write_byte(byte_7);
  1031. write_byte(byte_8);
  1032. }
  1033. message_end();
  1034. }
  1035.  
  1036. public set_sprite(id)
  1037. {
  1038. if(!is_user_alive(id))
  1039. {
  1040. return;
  1041. }
  1042.  
  1043. if(zp_get_user_zombie(id))
  1044. {
  1045. sprite(id, "weapon_knife", -1, -1, -1, -1, 2, 1, 29, 0)
  1046. return;
  1047. }
  1048.  
  1049. if(g_has_axe[id])
  1050. {
  1051. sprite(id, "zm_knife_axe", -1, -1, -1, -1, 2, 1, 29, 0)
  1052. return;
  1053. }
  1054.  
  1055. if(g_has_strong[id])
  1056. {
  1057. sprite(id, "zm_knife_strong", -1, -1, -1, -1, 2, 1, 29, 0)
  1058. return;
  1059. }
  1060.  
  1061. if(g_has_combat[id])
  1062. {
  1063. sprite(id, "zm_knife_combat", -1, -1, -1, -1, 2, 1, 29, 0)
  1064. return;
  1065. }
  1066.  
  1067. if(g_has_hammer[id])
  1068. {
  1069. sprite(id, "zm_knife_hammer", -1, -1, -1, -1, 2, 1, 29, 0)
  1070. return;
  1071. }
  1072.  
  1073. if(g_has_survivoraxe[id])
  1074. {
  1075. sprite(id, "zm_knife_axe", -1, -1, -1, -1, 2, 1, 29, 0)
  1076. return;
  1077. }
  1078. }
  1079.  
  1080. stock ChatColor(const id, const input[], any:...)
  1081. {
  1082. new count = 1, players[32]
  1083. static msg[191]
  1084. vformat(msg, 190, input, 3)
  1085.  
  1086. replace_all(msg, 190, "!g", "^4")
  1087. replace_all(msg, 190, "!y", "^1")
  1088. replace_all(msg, 190, "!team", "^3")
  1089.  
  1090. if (id) players[0] = id; else get_players(players, count, "ch")
  1091. {
  1092. for (new i = 0; i < count; i++)
  1093. {
  1094. if (is_user_connected(players[i]))
  1095. {
  1096. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
  1097. write_byte(players[i]);
  1098. write_string(msg);
  1099. message_end();
  1100. }
  1101. }
  1102. }
  1103. }
Advertisement
Add Comment
Please, Sign In to add comment