HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fun>
  4. #include <engine>
  5. #include <cstrike>
  6.  
  7. #define FLURRY_ATTACKS 20
  8.  
  9. new bool:g_abFu[33]
  10. new bool:g_abCooldown[33]
  11. new g_aFuMeter[33]
  12. new g_szCurMove[33][20]
  13. new g_iMsgDeathMsg
  14. new g_iMsgScoreInfo
  15. new g_szSound1[] = "weapons/cbar_miss1.wav"
  16. new g_szSound2[] = "weapons/cbar_hitbod1.wav"
  17. new g_szSound3[] = "weapons/cbar_hitbod3.wav"
  18.  
  19. public plugin_init()
  20. {
  21. register_plugin("KungFu","1.2","Hawk552") //Magyar fordítás: Nandee, Skype: nandee95
  22.  
  23. register_cvar("amx_fu_fist","1")
  24. register_cvar("amx_fu_fist_range","70.0")
  25. register_cvar("amx_fu_fist_knockback","5")
  26. register_cvar("amx_fu_fist_damage","15")
  27. register_cvar("amx_fu_fist_power","5")
  28.  
  29. register_cvar("amx_fu_kick","1")
  30. register_cvar("amx_fu_kick_range","100.0")
  31. register_cvar("amx_fu_kick_knockback","10")
  32. register_cvar("amx_fu_kick_damage","30")
  33. register_cvar("amx_fu_kick_power","10")
  34.  
  35. register_cvar("amx_fu_jumpkick","1")
  36. register_cvar("amx_fu_jumpkick_knockback","10")
  37. register_cvar("amx_fu_jumpkick_damage","20")
  38.  
  39. register_cvar("amx_fu_dragonkick","1")
  40. register_cvar("amx_fu_dragonkick_damage","50")
  41. register_cvar("amx_fu_dragonkick_knockback","20")
  42. register_cvar("amx_fu_dragonkick_power","50")
  43.  
  44. register_cvar("amx_fu_flurry","1")
  45.  
  46. register_cvar("amx_fu_meter_regen","20")
  47.  
  48. register_clcmd("say","fHookSay")
  49. register_clcmd("say_team","fHookSay")
  50.  
  51. register_clcmd("say /kungfuhelp","fShowHelp")
  52. register_clcmd("say_team /kungfuhelp","fShowHelp")
  53.  
  54. register_event("CurWeapon","fEventCurWeapon","be")
  55. register_event("DeathMsg","fEventDeathMsg","a")
  56.  
  57. g_iMsgDeathMsg = get_user_msgid("DeathMsg")
  58. g_iMsgScoreInfo = get_user_msgid("ScoreInfo")
  59. }
  60.  
  61. public plugin_precache()
  62. {
  63. precache_sound(g_szSound1)
  64. precache_sound(g_szSound2)
  65. precache_sound(g_szSound3)
  66. }
  67.  
  68. public client_disconnect(id)
  69. {
  70. g_abFu[id] = false
  71.  
  72. g_szCurMove[id][0] = 0
  73. }
  74.  
  75. public client_putinserver(id)
  76. {
  77. set_task(1.0,"fShowFuMeter",id,_,_,"b")
  78. set_task(1.0,"fSetFuMeter",id,_,_,"b")
  79. set_task(300.0,"fShowFuMessage",id,_,_,"b")
  80. }
  81.  
  82. public fShowFuMessage(id)
  83. client_print(id,print_chat,"[AMXX] Kung Fu be van kapcsolva! Segitségért írd be /kungfuhelp")
  84.  
  85. public fShowHelp(id)
  86. {
  87. new szMotd[1024], iPos
  88. iPos += format(szMotd[iPos],1023-iPos,"A Kung Fu a kést cseréli le, amikor elõveszed a késed nem látod a modelljét.<br><br>")
  89. iPos += format(szMotd[iPos],1023-iPos,"<b>Ütés</b><br>")
  90. iPos += format(szMotd[iPos],1023-iPos,"A legalapvetõbb mozgás, Az ütés egy gyors támadási forma, alacsony sebzéssel jár és kevés energia szükséges hozzá (Bal egérgomb)<br><br>")
  91. iPos += format(szMotd[iPos],1023-iPos,"<b>Rúgás</b><br>")
  92. iPos += format(szMotd[iPos],1023-iPos,"(Kirúgja a fegyvert az ellenfél kezébõl) A második legalapvetõbb mozgás. A rúgás egy gyors támadás ami közepes kárt okoz, közepes energia szükséges hozzá. (Jobb egérgomb)<br><br>")
  93. iPos += format(szMotd[iPos],1023-iPos,"<b>Sárkány Rúgás</b><br>")
  94. iPos += format(szMotd[iPos],1023-iPos,"(Kirúgja a fegyvert az ellenfél kezébõl) Ez egy összetettebb mozgás, A Sárkány Rúgás nagy kárt okoz, sok energia szükséges hozzá. Ez a legtöbbet használt mozdulat . (jobb egérgomb guggolás közben)<br><br>")
  95. iPos += format(szMotd[iPos],1023-iPos,"<b>Ugró Rúgás</b><br>")
  96. iPos += format(szMotd[iPos],1023-iPos,"(Kirúgja a fegyvert az ellenfél kezébõl) Ez egy viszonylag könnyû mozdulat, Az Ugró Rúgás képes visszaverni a környezetedben lévõ ellenfeleket. (Ugorj egy ellenfél közelében)<br><br>")
  97. iPos += format(szMotd[iPos],1023-iPos,"<b>Ütés Roham</b><br>")
  98. iPos += format(szMotd[iPos],1023-iPos,"Az ütés roham egy gyors mozgás. Ez lehetõvé teszi, hogy %ix megüsd egymás után az ellenfeledet. (Bal és Jobb egérgomb egyszerre)",FLURRY_ATTACKS)
  99.  
  100. show_motd(id,szMotd,"Kung Fu Segitség")
  101. }
  102.  
  103. public fHookSay(id)
  104. {
  105. new szArgs[128]
  106. read_args(szArgs,127)
  107.  
  108. if(containi(szArgs,"kung") != -1 || containi(szArgs,"fu") != -1 || containi(szArgs,"knife") != -1)
  109. fShowFuMessage(id)
  110. }
  111.  
  112. public fShowFuMeter(id)
  113. {
  114. if(!g_abFu[id])
  115. return PLUGIN_CONTINUE
  116.  
  117. if(g_aFuMeter[id] < 0)
  118. g_aFuMeter[id] = 0
  119. else if(g_aFuMeter[id] > 100)
  120. g_aFuMeter[id] = 100
  121.  
  122. new szMessage[128]
  123. fFuMeterStr(id,szMessage,127)
  124.  
  125. set_hudmessage(255,255,255,-0.05,-0.05,0,1.0,1.0,1.0,1.0,2)
  126. show_hudmessage(id,szMessage)
  127.  
  128. return PLUGIN_CONTINUE
  129. }
  130.  
  131. public fSetFuMeter(id)
  132. g_aFuMeter[id] += get_cvar_num("amx_fu_meter_regen")
  133.  
  134. public fShowCurMove(id)
  135. {
  136. set_hudmessage(255,255,255,0.45,0.5,0,5.0,5.0,1.0,1.0,4)
  137. show_hudmessage(id,"%s",g_szCurMove[id])
  138.  
  139. g_szCurMove[id][0] = 0
  140. }
  141.  
  142. fFuMeterStr(id,str[],len)
  143. {
  144. new Float:flFuMeter = float(g_aFuMeter[id])/10.0, iFuMeter = floatround(flFuMeter) * 10
  145.  
  146. switch(iFuMeter)
  147. {
  148. case 0 : format(str,len,"KUNG FU METER: 0%% ^n ~~~~~~~~~~")
  149. case 10 : format(str,len,"KUNG FU METER: 10%% ^n O~~~~~~~~~")
  150. case 20 : format(str,len,"KUNG FU METER: 20%% ^n OO~~~~~~~~")
  151. case 30 : format(str,len,"KUNG FU METER: 30%% ^n OOO~~~~~~~")
  152. case 40 : format(str,len,"KUNG FU METER: 40%% ^n OOOO~~~~~~")
  153. case 50 : format(str,len,"KUNG FU METER: 50%% ^n OOOOO~~~~~")
  154. case 60 : format(str,len,"KUNG FU METER: 60%% ^n OOOOOO~~~~")
  155. case 70 : format(str,len,"KUNG FU METER: 70%% ^n OOOOOOO~~~")
  156. case 80 : format(str,len,"KUNG FU METER: 80%% ^n OOOOOOOO~~")
  157. case 90 : format(str,len,"KUNG FU METER: 90%% ^n OOOOOOOOO~")
  158. case 100 : format(str,len,"KUNG FU METER: 100%% ^n OOOOOOOOOO")
  159.  
  160. // It's pretty rare that this will happen, unless of course my code is fucked ;]
  161. default : format(str,len,"KUNG FU METER: %i%%",g_aFuMeter[id])
  162. }
  163.  
  164. return PLUGIN_CONTINUE
  165. }
  166.  
  167. public fEventCurWeapon(id)
  168. {
  169. if(is_user_bot(id))
  170. return PLUGIN_CONTINUE
  171.  
  172. new iClip, iAmmo, iWeap = get_user_weapon(id,iClip,iAmmo)
  173. if(iWeap == CSW_KNIFE)
  174. {
  175. g_abFu[id] = true
  176. entity_set_string(id,EV_SZ_viewmodel,"")
  177. entity_set_string(id,EV_SZ_weaponmodel,"")
  178. client_cmd(id,"stopsound")
  179. }
  180. else
  181. g_abFu[id] = false
  182.  
  183. return PLUGIN_CONTINUE
  184. }
  185.  
  186. public fEventDeathMsg()
  187. {
  188. new iVictim = read_data(2)
  189.  
  190. g_abFu[iVictim] = false
  191. g_aFuMeter[iVictim] = 100
  192. }
  193.  
  194. public client_PreThink(id)
  195. {
  196. if(g_abFu[id])
  197. {
  198. new iButton = get_user_button(id)
  199.  
  200. fCheckAttack(id,iButton)
  201. }
  202.  
  203. return PLUGIN_CONTINUE
  204. }
  205.  
  206. public fCheckAttack(id,iButton)
  207. {
  208. if((iButton & IN_ATTACK) && (iButton & IN_ATTACK2) && get_cvar_num("amx_fu_flurry"))
  209. {
  210. entity_set_int(id,EV_INT_button,IN_CANCEL)
  211.  
  212. if(!g_abCooldown[id] && g_aFuMeter[id] >= get_cvar_num("amx_fu_fist_power"))
  213. {
  214. g_abCooldown[id] = true
  215.  
  216. fShowFuMeter(id)
  217.  
  218. copy(g_szCurMove[id],19,"Ütés Roham")
  219. fShowCurMove(id)
  220.  
  221. for(new Float:iCount = 0.1;iCount <= FLURRY_ATTACKS/10;iCount += 0.1)
  222. {
  223. set_task(iCount,"fFlurryOfBlows",id)
  224. }
  225. }
  226. }
  227. else if((iButton & IN_ATTACK2) && (iButton & IN_DUCK) && get_cvar_num("amx_fu_dragonkick"))
  228. {
  229. entity_set_int(id,EV_INT_button,IN_CANCEL)
  230.  
  231. if(!g_abCooldown[id] && g_aFuMeter[id] >= get_cvar_num("amx_fu_dragonkick_power"))
  232. {
  233. g_aFuMeter[id] -= get_cvar_num("amx_fu_dragonkick_power")
  234.  
  235. g_abCooldown[id] = true
  236.  
  237. fShowFuMeter(id)
  238.  
  239. copy(g_szCurMove[id],19,"Sárkány rúgás")
  240. fShowCurMove(id)
  241.  
  242. new iIndex,iBody
  243. get_user_aiming(id,iIndex,iBody,get_cvar_num("amx_fu_kick_range"))
  244.  
  245. new Float:vVel[3]
  246.  
  247. for(new i = 0;i <= 2;i++)
  248. vVel[i] = random_float(-20.0,20.0)
  249.  
  250. entity_set_vector(id,EV_VEC_punchangle,vVel)
  251.  
  252. if(iIndex)
  253. {
  254. fDamageEnt(iIndex,id,get_cvar_float("amx_fu_dragonkick_knockback"),get_cvar_float("amx_fu_dragonkick_damage"),"KungFu Dragon Kick",true)
  255.  
  256. emit_sound(id,CHAN_WEAPON,g_szSound2,1.0,ATTN_NORM,0,PITCH_NORM)
  257. }
  258. else
  259. emit_sound(id,CHAN_WEAPON,g_szSound1,1.0,ATTN_NORM,0,PITCH_NORM)
  260. }
  261. }
  262. else if((iButton & IN_ATTACK) && get_cvar_num("amx_fu_fist"))
  263. {
  264. entity_set_int(id,EV_INT_button,IN_CANCEL)
  265.  
  266. if(!g_abCooldown[id] && g_aFuMeter[id] >= get_cvar_num("amx_fu_fist_power"))
  267. {
  268. g_aFuMeter[id] -= get_cvar_num("amx_fu_fist_power")
  269.  
  270. g_abCooldown[id] = true
  271.  
  272. fShowFuMeter(id)
  273.  
  274. copy(g_szCurMove[id],19,"Ütés")
  275. fShowCurMove(id)
  276.  
  277. new iIndex,iBody
  278. get_user_aiming(id,iIndex,iBody,get_cvar_num("amx_fu_fist_range"))
  279.  
  280. new Float:vVel[3]
  281.  
  282. for(new i = 0;i <= 2;i++)
  283. vVel[i] = random_float(-5.0,5.0)
  284.  
  285. entity_set_vector(id,EV_VEC_punchangle,vVel)
  286.  
  287. if(iIndex)
  288. {
  289. fDamageEnt(iIndex,id,get_cvar_float("amx_fu_fist_knockback"),get_cvar_float("amx_fu_fist_damage"),"KungFu Fist",false)
  290.  
  291. emit_sound(id,CHAN_WEAPON,g_szSound2,1.0,ATTN_NORM,0,PITCH_NORM)
  292. }
  293. else
  294. emit_sound(id,CHAN_WEAPON,g_szSound1,1.0,ATTN_NORM,0,PITCH_NORM)
  295. }
  296. }
  297. else if((iButton & IN_ATTACK2) && get_cvar_num("amx_fu_kick"))
  298. {
  299. entity_set_int(id,EV_INT_button,IN_CANCEL)
  300.  
  301. if(!g_abCooldown[id] && g_aFuMeter[id] >= get_cvar_num("amx_fu_kick_power"))
  302. {
  303. g_aFuMeter[id] -= get_cvar_num("amx_fu_kick_power")
  304.  
  305. g_abCooldown[id] = true
  306.  
  307. fShowFuMeter(id)
  308.  
  309. copy(g_szCurMove[id],19,"Rúgás")
  310. fShowCurMove(id)
  311.  
  312. new iIndex,iBody
  313. get_user_aiming(id,iIndex,iBody,get_cvar_num("amx_fu_kick_range"))
  314.  
  315. new Float:vVel[3]
  316.  
  317. for(new i = 0;i <= 2;i++)
  318. vVel[i] = random_float(-10.0,10.0)
  319.  
  320. entity_set_vector(id,EV_VEC_punchangle,vVel)
  321.  
  322. if(iIndex)
  323. {
  324. fDamageEnt(iIndex,id,get_cvar_float("amx_fu_kick_knockback"),get_cvar_float("amx_fu_kick_damage"),"KungFu Kick",true)
  325.  
  326. emit_sound(id,CHAN_WEAPON,g_szSound3,1.0,ATTN_NORM,0,PITCH_NORM)
  327. }
  328. else
  329. emit_sound(id,CHAN_WEAPON,g_szSound1,1.0,ATTN_NORM,0,PITCH_NORM)
  330. }
  331. }
  332. else if(!g_abCooldown[id] && (get_user_button(id) & IN_JUMP) && get_cvar_num("amx_fu_jumpkick"))
  333. {
  334. client_cmd(id,"-jump")
  335.  
  336. g_abCooldown[id] = true
  337.  
  338. new Float:flRadius = get_cvar_float("amx_fu_kick_range"),iEnt,Float:vOrigin[3]
  339. entity_get_vector(id,EV_VEC_origin,vOrigin)
  340.  
  341. while((iEnt = find_ent_in_sphere(iEnt,vOrigin,flRadius)) != 0)
  342. {
  343. if(!is_user_alive(iEnt) || iEnt == id || get_user_team(id) == get_user_team(iEnt))
  344. continue
  345.  
  346. emit_sound(id,CHAN_WEAPON,g_szSound3,1.0,ATTN_NORM,0,PITCH_NORM)
  347.  
  348. copy(g_szCurMove[id],19,"Ugró Rúgás")
  349. fShowCurMove(id)
  350.  
  351. fDamageEnt(iEnt,id,get_cvar_float("amx_fu_jumpkick_knockback"),get_cvar_float("amx_fu_jumpkick_damage"),"KungFu Jumpkick",true)
  352. }
  353. }
  354. else if(g_abCooldown[id])
  355. g_abCooldown[id] = false
  356.  
  357. }
  358.  
  359. public fSetCooldown(id)
  360. g_abCooldown[id] = false
  361.  
  362. public fFlurryOfBlows(id)
  363. {
  364. if(!g_abFu[id])
  365. return PLUGIN_CONTINUE
  366.  
  367. new iIndex,iBody
  368. get_user_aiming(id,iIndex,iBody,get_cvar_num("amx_fu_fist_range"))
  369.  
  370. new Float:vVel[3]
  371.  
  372. for(new i = 0;i <= 2;i++)
  373. vVel[i] = random_float(-5.0,5.0)
  374.  
  375. entity_set_vector(id,EV_VEC_punchangle,vVel)
  376.  
  377. g_aFuMeter[id] -= get_cvar_num("amx_fu_fist_power")
  378.  
  379. if(iIndex)
  380. {
  381. fDamageEnt(iIndex,id,get_cvar_float("amx_fu_fist_knockback"),get_cvar_float("amx_fu_fist_damage"),"KungFu Flurry of Blows",false)
  382.  
  383. emit_sound(id,CHAN_WEAPON,g_szSound2,1.0,ATTN_NORM,0,PITCH_NORM)
  384. }
  385. else
  386. emit_sound(id,CHAN_WEAPON,g_szSound1,1.0,ATTN_NORM,0,PITCH_NORM)
  387.  
  388. return PLUGIN_CONTINUE
  389. }
  390.  
  391. fDamageEnt(iVictim,iAttacker,Float:flKnockback,Float:flDamage,szWeapname[],bDrop)
  392. {
  393. new iFriendlyFire = get_cvar_num("mp_friendlyfire")
  394.  
  395. if(is_user_alive(iAttacker) && is_user_alive(iVictim))
  396. {
  397. if(iFriendlyFire == 0 && get_user_team(iVictim) == get_user_team(iAttacker))
  398. return PLUGIN_CONTINUE
  399.  
  400. g_abCooldown[iAttacker] = true
  401.  
  402. new Float:vVictimOrigin[3],Float:vAttackerOrigin[3]
  403. entity_get_vector(iVictim,EV_VEC_origin,vVictimOrigin)
  404. entity_get_vector(iAttacker,EV_VEC_origin,vAttackerOrigin)
  405.  
  406. for(new i = 0;i <= 2;i++)
  407. {
  408. vVictimOrigin[i] -= vAttackerOrigin[i]
  409. vVictimOrigin[i] *= flKnockback
  410. }
  411.  
  412. entity_set_vector(iVictim,EV_VEC_velocity,vVictimOrigin)
  413.  
  414. if(get_user_health(iVictim) < flDamage)
  415. createKill(iVictim,iAttacker,szWeapname)
  416. else
  417. {
  418. fakedamage(iVictim,szWeapname,flDamage,DMG_CRUSH)
  419. new iClip,iAmmo,iWeap = get_user_weapon(iVictim,iClip,iAmmo)
  420.  
  421. if(iWeap != CSW_KNIFE && iWeap != CSW_HEGRENADE && iWeap != CSW_SMOKEGRENADE && iWeap != CSW_FLASHBANG && bDrop)
  422. {
  423. client_cmd(iVictim,"drop")
  424. client_print(iVictim,print_chat,"[AMXX] A fegyveredet kirúgták a kezedböl!!")
  425. }
  426. }
  427. }
  428.  
  429. return PLUGIN_CONTINUE
  430. }
  431.  
  432. // --------------------------------------------------------
  433. // Thanks to Zenith77 for this section and everything below
  434. // --------------------------------------------------------
  435. public createKill(id, attacker, weaponDescription[] )
  436. {
  437. new FFon = get_cvar_num("mp_friendlyfire")
  438.  
  439. if (FFon && get_user_team(id) == get_user_team(attacker))
  440. {
  441. set_user_frags(attacker, get_user_frags(attacker) - 1)
  442. client_print(attacker,print_center,"Megöltél egy csapattársat!")
  443. new money = cs_get_user_money(attacker)
  444. if (money != 0)
  445. cs_set_user_money(attacker,money - 150,1)
  446. }
  447. else if (get_user_team(id) != get_user_team(attacker))
  448. {
  449. set_user_frags(attacker, get_user_frags(attacker) + 1)
  450. new money = cs_get_user_money(attacker)
  451. if (money < 16000)
  452. cs_set_user_money(attacker,money + 300,1)
  453. }
  454.  
  455.  
  456. logKill(attacker, id, weaponDescription)
  457.  
  458. //Kill the victim and block the messages
  459. set_msg_block(g_iMsgDeathMsg,BLOCK_ONCE)
  460. set_msg_block(g_iMsgScoreInfo,BLOCK_ONCE)
  461. user_kill(id)
  462.  
  463. //user_kill removes a frag, this gives it back
  464. set_user_frags(id,get_user_frags(id) + 1)
  465.  
  466. //Replaced HUD death message
  467. message_begin(MSG_ALL,g_iMsgDeathMsg,{0,0,0},0)
  468. write_byte(attacker)
  469. write_byte(id)
  470. write_byte(0)
  471. write_string(weaponDescription)
  472. message_end()
  473.  
  474. //Update killers scorboard with new info
  475. message_begin(MSG_ALL,g_iMsgScoreInfo)
  476. write_byte(attacker)
  477. write_short(get_user_frags(attacker))
  478. write_short(get_user_deaths(attacker))
  479. write_short(0)
  480. write_short(get_user_team(attacker))
  481. message_end()
  482.  
  483. //Update victims scoreboard with correct info
  484. message_begin(MSG_ALL,g_iMsgScoreInfo)
  485. write_byte(id)
  486. write_short(get_user_frags(id))
  487. write_short(get_user_deaths(id))
  488. write_short(0)
  489. write_short(get_user_team(id))
  490. message_end()
  491.  
  492. }
  493.  
  494. // ------- LOG KILL------------
  495.  
  496. public logKill(id, victim, weaponDescription[] )
  497. {
  498. new namea[32],namev[32],authida[35],authidv[35],teama[16],teamv[16]
  499.  
  500. //Info On Attacker
  501. get_user_name(id,namea,31)
  502. get_user_team(id,teama,15)
  503. get_user_authid(id,authida,34)
  504.  
  505. //Info On Victim
  506. get_user_name(victim,namev,31)
  507. get_user_team(victim,teamv,15)
  508. get_user_authid(victim,authidv,34)
  509.  
  510. //Log This Kill
  511. if(id != victim)
  512. {
  513. log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
  514. namea,get_user_userid(id),authida,teama,namev,get_user_userid(victim),authidv,teamv, weaponDescription )
  515. }
  516. else
  517. {
  518. log_message("^"%s<%d><%s><%s>^" committed suicide with ^"%s^"",
  519. namea,get_user_userid(id),authida,teama, weaponDescription )
  520. }
  521. }
  522.