HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fakemeta>
  4. #include <fakemeta_util>
  5. #include <fun>
  6. #include <hamsandwich>
  7. #include <cs_ham_bots_api>
  8. #include <cstrike>
  9.  
  10.  
  11. #define PLUGIN "Kalapacs"
  12. #define VERSION "1.0"
  13. #define AUTHOR "Itep"
  14.  
  15. new bool:g_hasHammer[33],
  16. bool:block = true,
  17. bool:bugfix,
  18. bool:csapatv[32];
  19.  
  20. new const v_knife[] = "models/v_knife.mdl",
  21. p_knife[] = "models/p_knife.mdl",
  22. v_hammer[] = "models/kalapacs/v_hammer.mdl",
  23. p_hammer[] = "models/kalapacs/p_hammer.mdl",
  24. waw_fal[] = "kalapacs/fal.wav",
  25. waw_jatekos[] = "kalapacs/jatekos.waw";
  26.  
  27. new ka_beki,ka_sebzes,ka_hppp,ka_maxteleport,ka_faltav,
  28. ka_php,ka_teletime,ka_botteletime, ka_bottele;
  29.  
  30. new kivi,maxhp;
  31.  
  32. public plugin_init() {
  33. register_plugin(PLUGIN, VERSION, AUTHOR);
  34.  
  35. register_event("CurWeapon","elvalt","be","1=1");
  36. register_logevent("valaszt", 2, "1=Round_End");
  37. register_logevent("eloszt", 2, "0=World triggered", "1=Round_Start");
  38. register_clcmd("changeteam", "HookTeamChoose");
  39. register_clcmd("jointeam", "HookTeamChoose");
  40.  
  41. RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "tele");
  42. RegisterHam(Ham_TakeDamage,"player","tam");
  43. RegisterHamBots(Ham_TakeDamage,"tam");
  44.  
  45. register_forward(FM_EmitSound, "HandleSound");
  46.  
  47. ka_beki=register_cvar("ka_beki","0");
  48. ka_sebzes=register_cvar("ka_sebzes","2");
  49. ka_hppp=register_cvar("ka_hppp","1250");
  50. ka_maxteleport=register_cvar("ka_maxteleport","1024");
  51. ka_faltav=register_cvar("ka_faltav","37.0");
  52. ka_php=register_cvar("ka_php","100");
  53. ka_teletime=register_cvar("ka_teletime","10.0");
  54. ka_botteletime=register_cvar("ka_botteletime","10.0");
  55. ka_bottele=register_cvar("ka_bottele","1");
  56.  
  57. }
  58.  
  59. public plugin_precache()
  60. {
  61. precache_model(v_knife);
  62. precache_model(p_knife);
  63. precache_model(v_hammer);
  64. precache_model(p_hammer);
  65.  
  66. precache_sound(waw_fal);
  67. precache_sound(waw_jatekos);
  68. }
  69.  
  70. public HandleSound(entity, channel, const sound[]) {
  71. if (entity > 0 && entity < 33 && g_hasHammer[entity]) {
  72. if (equal(sound, "weapons/knife_hitwall1.wav")) {
  73. emit_sound(entity, CHAN_WEAPON, waw_fal, 1.0, ATTN_NORM, 0, PITCH_NORM);
  74. return FMRES_SUPERCEDE;
  75. } else if (equal(sound, "weapons/knife_hit", 17) || equal(sound, "weapons/knife_stab.wav")) {
  76. emit_sound(entity, CHAN_WEAPON, waw_jatekos, 1.0, ATTN_NORM, 0, PITCH_NORM);
  77. return FMRES_SUPERCEDE;
  78. } else if (equal(sound, "weapons/knife_deploy1.wav")) {
  79. return FMRES_SUPERCEDE;
  80. }
  81. }
  82. return FMRES_IGNORED;
  83. }
  84.  
  85. public plugin_cfg()
  86. {
  87. new file[64]; get_localinfo("amxx_configsdir",file,63);
  88. format(file, 63, "%s/kalapacs.cfg", file);
  89. if(file_exists(file)) server_cmd("exec %s", file), server_exec();
  90. }
  91.  
  92. public valaszt()
  93. {
  94. if (0!=get_pcvar_num(ka_beki))
  95. {
  96. new players[32],pnum;
  97. get_players(players, pnum, "h");
  98. kivi = players[random(pnum)];
  99. new name[33];
  100. get_user_name(kivi,name,32);
  101.  
  102. for(new i=0; i<pnum; i++) {
  103. if (kivi!=players[i]) {
  104. cs_set_user_team(players[i], CS_TEAM_T, CS_DONTCHANGE);
  105. client_print(players[i],print_chat,"%s a kivalasztott!",name);
  106. vege(players[i]);
  107. } else {
  108. cs_set_user_team(players[i], CS_TEAM_CT, CS_DONTCHANGE);
  109. client_print(players[i],print_chat,"Te vagy a kivalasztott!");
  110. }
  111. }
  112. remove_task(3137);
  113. remove_task(8073137);
  114. bugfix=true;
  115. }
  116. }
  117.  
  118. public eloszt()
  119. {
  120. if (0!=get_pcvar_num(ka_beki)&&bugfix){
  121. new players[32],pnum;
  122. get_players(players, pnum, "h");
  123. if (is_user_alive(kivi)) {
  124. fegyo_eldob(kivi);
  125. Hammer(kivi);
  126. maxhp=pnum*get_pcvar_num(ka_hppp);
  127. set_user_health(kivi,maxhp);
  128. }
  129. set_task(0.5,"elet",3137,"param",1,"b");
  130. if (is_user_bot(kivi)&&1==get_pcvar_num(ka_bottele)) set_task(get_pcvar_float(ka_botteletime),"bot_tele",8073137,"param",1,"b");
  131. bugfix=false;
  132. }
  133.  
  134. }
  135.  
  136. public Hammer(id)
  137. {
  138. if (is_user_alive(id)) {
  139. if (get_user_weapon(id) != CSW_KNIFE) engclient_cmd(id, "weapon_knife");
  140. client_cmd(id, "cl_righthand ^"1^"");
  141. set_pev(id, pev_viewmodel2,v_hammer);
  142. set_pev(id, pev_weaponmodel2,p_hammer);
  143. }
  144. g_hasHammer[id] = true;
  145. }
  146.  
  147. public vege(id)
  148. {
  149. if (g_hasHammer[id]){
  150. if (is_user_alive(id)) {
  151. if (get_user_weapon(id) != CSW_KNIFE) engclient_cmd(id, "weapon_knife");
  152. client_cmd(id, "cl_righthand ^"1^"");
  153. set_pev(id, pev_viewmodel2,v_knife);
  154. set_pev(id, pev_weaponmodel2,p_knife);
  155. }
  156. g_hasHammer[id] = false;
  157. }
  158. }
  159.  
  160. public client_connect(id)
  161. {
  162. vege(id);
  163. csapatv[id]=false;
  164. }
  165. public client_disconnect(id)
  166. {
  167. vege(id);
  168. csapatv[id]=false;
  169. }
  170.  
  171. public elvalt(id)
  172. {
  173. if (0!=get_pcvar_num(ka_beki)){
  174. if(g_hasHammer[id]&&get_user_weapon(id)!=CSW_KNIFE)
  175. {
  176. fegyo_eldob(id);
  177. Hammer(id);
  178. }
  179. }
  180. }
  181.  
  182. public tele(ent)
  183. {
  184. new id = pev(ent, pev_owner);
  185. if (g_hasHammer[id]&&block&&!is_user_bot(id)&&0!=get_pcvar_num(ka_beki)) {
  186. teleport(id);
  187. return PLUGIN_CONTINUE;
  188. }
  189. return HAM_IGNORED;
  190. }
  191.  
  192. public ki_block()
  193. {
  194. client_print(kivi,print_chat,"Ujra teleportalhatsz!");
  195. block=true;
  196. }
  197.  
  198.  
  199.  
  200. public tam(id, inflictor, attacker,Float:damage)
  201. {
  202. if(g_hasHammer[attacker]&&0!=get_pcvar_num(ka_beki))
  203. {
  204. if (get_user_health(attacker)+get_pcvar_num(ka_php)<maxhp)
  205. set_user_health(attacker,get_user_health(attacker)+get_pcvar_num(ka_php));
  206. else set_user_health(attacker,maxhp);
  207.  
  208. SetHamParamFloat(4,damage*get_pcvar_float(ka_sebzes));
  209. }
  210. }
  211.  
  212. public elet(param)
  213. {
  214. if (0!=get_pcvar_num(ka_beki))
  215. {
  216. new hp = get_user_health(kivi);
  217.  
  218. set_hudmessage(255, 00, 00, 0.035, 0.91);
  219. show_hudmessage(0, "BossHp: %d", hp);
  220. }
  221. }
  222.  
  223. public HookTeamChoose(id)
  224. {
  225. if (0!=get_pcvar_num(ka_beki)&&csapatv[id])
  226. {
  227. client_print(id,print_center,"A csapat valtas tiltva van!");
  228. return PLUGIN_HANDLED;
  229. }
  230. csapatv[id]=true;
  231. return PLUGIN_CONTINUE;
  232. }
  233.  
  234. public bot_tele(param)
  235. {
  236. if (0!=get_pcvar_num(ka_beki))
  237. {
  238. teleport(kivi);
  239. }
  240. }
  241.  
  242. public teleport(id)
  243. {
  244. new Float:origin[3], Float:TD[3], Float:TE[3], Float:N[3];
  245. pev(id, pev_origin, origin );
  246. velocity_by_aim( id, get_pcvar_num(ka_maxteleport), TD );
  247. xs_vec_add( TD, origin, TE );
  248. engfunc( EngFunc_TraceLine, origin, TE, DONT_IGNORE_MONSTERS, id, 0 );
  249. new Float:fF;
  250. get_tr2( 0, TR_flFraction, fF );
  251. if ( fF < 1.0 )
  252. {
  253. get_tr2( 0, TR_vecEndPos, TE );
  254. get_tr2( 0, TR_vecPlaneNormal, N );
  255. }
  256. xs_vec_mul_scalar( N, get_pcvar_float(ka_faltav), N );
  257. xs_vec_add( TE, N, origin );
  258.  
  259. if (!beragadt(id,origin)){
  260. engfunc(EngFunc_SetOrigin, id, origin);
  261. client_print(id,print_chat,"%f mp mulva ujra teleportalhatsz!",get_pcvar_float(ka_teletime));
  262. block=false;
  263. set_task(get_pcvar_float(ka_teletime),"ki_block",7313);
  264. }else{
  265. client_print(id,print_chat,"Nem tudsz oda teleportalni!");
  266. if (is_user_bot(id)) set_task(2.0,"bot_tele",807,"param");
  267. }
  268. }
  269.  
  270. public fegyo_eldob(id)
  271. {
  272. if (is_user_bot(id)) {
  273. strip_user_weapons(id);
  274. give_item(id, "weapon_knife");
  275. }else{
  276. new iwpn = 0, iwpns[32], nwpn[32];
  277. get_user_weapons ( id, iwpns, iwpn );
  278. const KNIFE_BIT_SUM = (1<<CSW_KNIFE);
  279. for (new a = 0; a < iwpn; ++a ) {
  280. if (!(1<<iwpns[a]&KNIFE_BIT_SUM)) {
  281. get_weaponname ( iwpns[a], nwpn, 31 );
  282. engclient_cmd ( id, "drop", nwpn );
  283. }
  284. }
  285. }
  286. }
  287.  
  288. stock beragadt(id, Float:originF[3])
  289. {
  290. engfunc(EngFunc_TraceHull, originF, originF, 0, (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN, id, 0)
  291.  
  292. if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
  293. return true;
  294.  
  295. return false;
  296. }
  297.