Advertisement
Guest User

ljstats

a guest
Oct 5th, 2013
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 37.63 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <colorchat>
  4. #include <fakemeta>
  5. #include <cstrike>
  6.  
  7. #pragma semicolon 1
  8.  
  9. #define INFO_ONE 1
  10. #define INFO_ZERO 0
  11. #define NSTRAFES 14
  12.  
  13. new pluginstatus;
  14. new strafes[33];
  15. new pre_type[33][32];
  16. new strafe_stat_sync[33][NSTRAFES][2];
  17.  
  18. new bool:StrafeStat[33];
  19. new bool:fallDown[33];
  20. new bool:possible_lj_script[33][2];
  21. new bool:gHasColorChat[33];
  22. new bool:gHasSpeed[33];
  23. new bool:gHasLjStats[33];
  24. new bool:gInAir[33];
  25. new bool:cjumped[33];
  26. new bool:doubleducked[33];
  27. new bool:cducked[33];
  28. new bool:induck[33];
  29. new bool:OnGround[33];
  30. new bool:turning_right[33];
  31. new bool:turning_left[33];
  32. new bool:strafing_aw[33];
  33. new bool:strafing_sd[33];
  34.  
  35. new Float:strafe_stat_time[33][NSTRAFES];
  36. new Float:strafe_stat_speed[33][NSTRAFES][2];
  37. new Float:TempSpeed[33];
  38. new Float:old_angle1[33];
  39. new Float:angle[3];
  40. new Float:vFramePos[33][2][3];
  41. new Float:vFrameSpeed[33][2][3];
  42. new Float:vDuckedAt[33][3];
  43. new Float:vJumpedAt[33][3];
  44. new Float:vJumpedAt2[3];
  45. new Float:xDistance;
  46. new Float:yDistance;
  47. new Float:fDistance;
  48. new Float:fDistance1;
  49. new Float:fDistance2;
  50. new Float:rDistance[2];
  51. new Float:rLandPos[3];
  52. new Float:vOrigin[3];
  53. new Float:vCurrentOrigin[33][3];
  54. new Float:vOldOrigin[33][3];
  55. new Float:vOldOrigin2[33];
  56. new Float:vTraceEnd[3];
  57. new Float:fMaxAirSpeed[33];
  58. new Float:fMaxGroundSpeed[33];
  59. new Float:vVelocity[3];
  60. new Float:oldvVelocity[33][3];
  61. new Float:fSpeed;
  62. new Float:gSpeed;
  63. new Float:OldSpeed[33];
  64. new Float:frame2time;
  65. new Float:jumptime[33];
  66. new Float:lasttime[33];
  67.  
  68. new kz_ljs_enabled;
  69. new kz_good_lj;
  70. new kz_pro_lj;
  71. new kz_leet_lj;
  72. new kz_min_lj;
  73. new kz_max_lj;
  74. new kz_cj_dif;
  75. new kz_ljs_connectenabler;
  76. new kz_ljs_viscmds;
  77. new kz_ljs_tops;
  78. new edgefriction;
  79. new mp_footsteps;
  80. new sv_cheats;
  81. new sv_gravity;
  82. new sv_airaccelerate;
  83. new sv_stepsize;
  84. new sv_maxvelocity;
  85.  
  86. public plugin_init()
  87. {
  88. register_plugin("LjStats", "5.2", "Fatalis & Numb & pcheLa");
  89. register_dictionary("common.txt");
  90.  
  91. register_forward(FM_Touch, "fwdTouch", 1);
  92. register_forward(FM_PlayerPreThink, "fwdPlayerPreThink", 0);
  93. register_forward(FM_PlayerPostThink, "fwdPlayerPostThink", 0);
  94. register_forward(FM_StartFrame, "fwdStartFrame", 0);
  95.  
  96. kz_ljs_enabled = register_cvar("kz_ljs_enabled", "1"); // enables/disables the plugin
  97. kz_good_lj = register_cvar("kz_good_lj", "240.0"); // good longjumps
  98. kz_pro_lj = register_cvar("kz_pro_lj", "245.0"); // professional longjumps
  99. kz_leet_lj = register_cvar("kz_leet_lj", "250.0"); // leet longjump
  100. kz_min_lj = register_cvar("kz_min_lj", "215.0"); // minimal longjump
  101. kz_max_lj = register_cvar("kz_max_lj", "260.0"); // maximal longjump
  102. kz_cj_dif = register_cvar("kz_cj_dif", "10.0"); // difrence between lj and cj
  103. kz_ljs_connectenabler = register_cvar("kz_ljs_connectenabler", "ab"); // What is enabled at connect (0=nothing, a=colorchat, b=ljstats, c=speed)
  104. kz_ljs_viscmds = register_cvar("kz_ljs_viscmds", "1"); // Do you want say commands to be apeard on the chat?
  105. kz_ljs_tops = register_cvar("kz_ljs_tops", "1"); // LongJump top (0=Nothing, 1=ColorChat, 2=top, 3=top+ColorChat)
  106.  
  107. edgefriction = get_cvar_pointer("edgefriction");
  108. mp_footsteps = get_cvar_pointer("mp_footsteps");
  109. sv_cheats = get_cvar_pointer("sv_cheats");
  110. sv_gravity = get_cvar_pointer("sv_gravity");
  111. sv_airaccelerate = get_cvar_pointer("sv_airaccelerate");
  112. sv_stepsize = get_cvar_pointer("sv_stepsize");
  113. sv_maxvelocity = get_cvar_pointer("sv_maxvelocity");
  114.  
  115. register_clcmd("say /colorchat", "cmdColorChat");
  116. register_clcmd("say /speed", "cmdSpeed");
  117. }
  118.  
  119. public gocheck(id)
  120. {
  121. gInAir[id] = false;
  122. cjumped[id] = false;
  123. doubleducked[id] = false;
  124. }
  125.  
  126. public ddend(id)
  127. doubleducked[id] = false;
  128.  
  129. public testcjstart(id)
  130. cducked[id] = false;
  131.  
  132. public client_putinserver(id)
  133. {
  134. if( task_exists(id+234490, 0) )
  135. remove_task(id+234490, 0);
  136.  
  137. set_task(0.1, "check_prestrafe_type", id+234490, "", 0, "b", 0);
  138.  
  139. static connectenabler[6];
  140. get_pcvar_string(kz_ljs_connectenabler, connectenabler, 5);
  141. format(connectenabler, 5, "_%s", connectenabler);
  142. if( contain(connectenabler, "a") > 0 )
  143. gHasColorChat[id] = true;
  144. else
  145. gHasColorChat[id] = false;
  146. if( contain(connectenabler, "b") > 0 )
  147. gHasLjStats[id] = true;
  148. else
  149. gHasLjStats[id] = false;
  150. if( contain(connectenabler, "c") > 0 )
  151. {
  152. gHasSpeed[id] = true;
  153. set_task(0.1, "tskSpeed", id+334490, "", 0, "b", 0);
  154. }
  155. else
  156. gHasSpeed[id] = false;
  157.  
  158. StrafeStat[id] = true;
  159. turning_right[id] = false;
  160. turning_left[id] = false;
  161. strafing_aw[id] = false;
  162. strafing_sd[id] = false;
  163. cducked[id] = false;
  164. cjumped[id] = false;
  165. doubleducked[id]=false;
  166. induck[id] = false;
  167. OnGround[id] = false;
  168. possible_lj_script[id][0] = false;
  169. possible_lj_script[id][1] = false;
  170. }
  171.  
  172. public client_disconnect(id)
  173. {
  174. if( task_exists(id+234490, 0) )
  175. remove_task(id+234490, 0);
  176.  
  177. StrafeStat[id] = true;
  178. gHasColorChat[id] = false;
  179. gHasLjStats[id] = false;
  180. gHasSpeed[id] = false;
  181. turning_right[id] = false;
  182. turning_left[id] = false;
  183. strafing_aw[id] = false;
  184. strafing_sd[id] = false;
  185. OnGround[id] = false;
  186. cducked[id] = false;
  187. doubleducked[id] = false;
  188. cjumped[id] = false;
  189. induck[id] = false;
  190. possible_lj_script[id][0] = false;
  191. possible_lj_script[id][1] = false;
  192.  
  193. if( task_exists(id+334490, 0) )
  194. remove_task(id+334490, 0);
  195.  
  196. if( task_exists(id+434490, 0) )
  197. remove_task(id+434490, 0);
  198. }
  199.  
  200. public check_prestrafe_type(id)
  201. {
  202. id -= 234490;
  203. if( is_user_alive(id) )
  204. {
  205. static flags, buttons, moving;
  206. flags = pev(id, pev_flags);
  207. buttons = pev(id, pev_button);
  208.  
  209. if( flags&FL_ONGROUND && gInAir[id] && get_gametime() > (jumptime[id]+0.1) )
  210. fwdPlayerPreThink(id);
  211.  
  212. if( (buttons&IN_FORWARD || buttons&IN_BACK || buttons&IN_MOVERIGHT || buttons&IN_MOVELEFT) && !(buttons&IN_DUCK) )
  213. moving = INFO_ONE;
  214. else
  215. moving = INFO_ZERO;
  216.  
  217. if( moving && !(doubleducked[id]) && !(cjumped[id]) && flags&FL_ONGROUND && (turning_right[id] || turning_left[id]) )
  218. {
  219. if( buttons&IN_FORWARD && buttons&IN_BACK )
  220. moving = INFO_ZERO;
  221.  
  222. if( buttons&IN_MOVELEFT && buttons&IN_MOVERIGHT )
  223. moving = INFO_ZERO;
  224.  
  225. if( !(moving) )
  226. pre_type[id] = "key error";
  227. }
  228. else
  229. {
  230. moving = 0;
  231. }
  232.  
  233. if( moving )
  234. {
  235. if( buttons&IN_FORWARD )
  236. {
  237. if( buttons&IN_MOVERIGHT )
  238. {
  239. if( turning_right[id] )
  240. pre_type[id] = "right";
  241. else
  242. pre_type[id] = "right sw";
  243. }
  244. else if( buttons&IN_MOVELEFT )
  245. {
  246. if( turning_left[id] )
  247. pre_type[id] = "left";
  248. else
  249. pre_type[id] = "left sw";
  250. }
  251. else
  252. {
  253. if( turning_right[id] )
  254. pre_type[id] = "right (1 key)";
  255. else
  256. pre_type[id] = "left (1 key)";
  257. }
  258. }
  259. else if( buttons&IN_BACK )
  260. {
  261. if( buttons&IN_MOVERIGHT )
  262. {
  263. if( turning_left[id] )
  264. pre_type[id] = "bw right";
  265. else
  266. pre_type[id] = "bw right sw";
  267. }
  268. else if( buttons&IN_MOVELEFT )
  269. {
  270. if( turning_right[id] )
  271. pre_type[id] = "bw left";
  272. else
  273. pre_type[id] = "bw left sw";
  274. }
  275. else
  276. {
  277. if( turning_left[id] )
  278. pre_type[id] = "bw right (1 key)";
  279. else
  280. pre_type[id] = "bw left (1 key)";
  281. }
  282. }
  283. else if( buttons&IN_MOVERIGHT )
  284. {
  285. if( turning_right[id] )
  286. pre_type[id] = "bw right sw (1 key)";
  287. else
  288. pre_type[id] = "left sw (1 key)";
  289. }
  290. else if( buttons&IN_MOVELEFT )
  291. {
  292. if( turning_left[id] )
  293. pre_type[id] = "bw left sw (1 key)";
  294. else
  295. pre_type[id] = "right sw (1 key)";
  296. }
  297. else
  298. pre_type[id] = "unknown error";
  299. }
  300. }
  301. }
  302.  
  303. public tskFps(id)
  304. {
  305. id-=434490;
  306. client_cmd(id, "developer 0;fps_max 101");
  307. }
  308.  
  309. public cmdColorChat(id)
  310. {
  311. if( get_pcvar_num(kz_ljs_enabled) && !gHasColorChat[id] )
  312. {
  313. gHasColorChat[id] = true;
  314. client_print(id, print_chat, "[LjStats] ColorChat enabled. To disable, enter /colorchat.");
  315. }
  316. else if( get_pcvar_num(kz_ljs_enabled) )
  317. {
  318. gHasColorChat[id] = false;
  319. client_print(id, print_chat, "[LjStats] Colorchat is off. To enable, type /colorchat.");
  320. }
  321.  
  322. return ( (get_pcvar_num(kz_ljs_viscmds))?PLUGIN_CONTINUE:PLUGIN_HANDLED );
  323. }
  324.  
  325. public cmdSpeed(id)
  326. {
  327. if( get_pcvar_num(kz_ljs_enabled) && !gHasSpeed[id] )
  328. {
  329. gHasSpeed[id] = true;
  330. set_task(0.1, "tskSpeed", id+334490, "", 0, "b", 0);
  331. client_print(id, print_chat, "[LjStats] Speedometer enabled. To disable, enter /speed.");
  332. }
  333. else if( get_pcvar_num(kz_ljs_enabled) )
  334. {
  335. gHasSpeed[id] = false;
  336. if( task_exists(id+334490, 0) )
  337. remove_task(id+334490, 0);
  338. client_print(id, print_chat, "[LjStats] Speedometer is off. To enable, type /speed.");
  339. }
  340.  
  341. return ( (get_pcvar_num(kz_ljs_viscmds))?PLUGIN_CONTINUE:PLUGIN_HANDLED );
  342. }
  343.  
  344. public tskSpeed(taskid)
  345. {
  346. taskid-=334490;
  347. static alive, aliveflags, spectatedplayer, specflags;
  348. alive = is_user_alive(taskid);
  349. aliveflags = pev(taskid, pev_flags);
  350.  
  351. if( (alive > 0) && get_pcvar_num(kz_ljs_enabled) )
  352. {
  353. if( alive )
  354. {
  355. pev(taskid, pev_velocity, vVelocity);
  356. if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER )
  357. vVelocity[2]-=vVelocity[2];
  358. }
  359. else
  360. {
  361. pev(spectatedplayer, pev_velocity, vVelocity);
  362. if( specflags&FL_ONGROUND && specflags&FL_INWATER )
  363. vVelocity[2]-=vVelocity[2];
  364. }
  365.  
  366. set_hudmessage(255, 255, 255, -1.0, 0.65, 0, 0.0, 0.2, 0.0, 0.0, 3);
  367.  
  368. if( vVelocity[2] != 0 )
  369. vVelocity[2]-=vVelocity[2];
  370.  
  371. gSpeed = vector_length(vVelocity);
  372.  
  373. if( alive )
  374. {
  375. pev(taskid, pev_velocity, vVelocity);
  376. if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER )
  377. vVelocity[2]-=vVelocity[2];
  378. }
  379. else
  380. {
  381. pev(spectatedplayer, pev_velocity, vVelocity);
  382. if( specflags&FL_ONGROUND && specflags&FL_INWATER )
  383. vVelocity[2]-=vVelocity[2];
  384. }
  385. show_hudmessage(taskid, "%d units/second^n%d velocity", floatround(vector_length(vVelocity), floatround_floor), floatround(gSpeed, floatround_floor));
  386. }
  387. }
  388.  
  389. public fwdStartFrame()
  390. {
  391. static id, spectatedplayer, alive, aliveflags, specflags;
  392. for( id = INFO_ONE; id < 33; id++ )
  393. {
  394. if( pev_valid(id) && pluginstatus )
  395. {
  396. alive = is_user_alive(id);
  397. aliveflags = pev(id, pev_flags);
  398. if( alive )
  399. {
  400. if( alive )
  401. {
  402. pev(id, pev_velocity, vVelocity);
  403. if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER )
  404. vVelocity[2]-=vVelocity[2];
  405. }
  406. else
  407. {
  408. pev(spectatedplayer, pev_velocity, vVelocity);
  409. if( specflags&FL_ONGROUND && specflags&FL_INWATER )
  410. vVelocity[2]-=vVelocity[2];
  411. }
  412.  
  413. if( gHasSpeed[id] )
  414. {
  415. if( task_exists(id+334490, 0) )
  416. remove_task(id+334490, 0);
  417.  
  418. if( vVelocity[2] != 0 )
  419. vVelocity[2]-=vVelocity[2];
  420.  
  421. gSpeed = vector_length(vVelocity);
  422.  
  423. if( alive )
  424. {
  425. pev(id, pev_velocity, vVelocity);
  426. if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER )
  427. vVelocity[2]-=vVelocity[2];
  428. }
  429. else
  430. {
  431. pev(spectatedplayer, pev_velocity, vVelocity);
  432. if( specflags&FL_ONGROUND && specflags&FL_INWATER )
  433. vVelocity[2]-=vVelocity[2];
  434. }
  435. show_hudmessage(id, "%d units/second^n%d velocity", floatround(vector_length(vVelocity), floatround_floor), floatround(gSpeed, floatround_floor));
  436. }
  437. else if( gHasSpeed[id]
  438. && !task_exists(id+334490, 0) )
  439. {
  440. set_task(0.1, "tskSpeed", id+334490, "", 0, "b", 0);
  441. }
  442. }
  443. }
  444. }
  445.  
  446. return FMRES_IGNORED;
  447. }
  448.  
  449. public fwdPlayerPreThink(id)
  450. {
  451. if( is_user_alive(id) && get_pcvar_num(kz_ljs_enabled) )
  452. {
  453. if(cs_get_user_team(id) == CS_TEAM_T)
  454. {
  455. static flags, buttons, oldbuttons;
  456. flags = pev(id, pev_flags);
  457. buttons = pev(id, pev_button);
  458. oldbuttons = pev(id, pev_oldbuttons);
  459.  
  460. static Float:fGravity;
  461. pev(id, pev_gravity, fGravity);
  462.  
  463. pev(id, pev_angles, angle);
  464. old_angle1[id] = angle[1];
  465.  
  466. if( gInAir[id] == true && !(flags&FL_ONGROUND) )
  467. {
  468. static i;
  469. for( i = INFO_ZERO; i < 2; i++ )
  470. {
  471. if( (vFramePos[id][i][0] == 0
  472. && vFramePos[id][i][1] == 0
  473. && vFramePos[id][i][2] == 0
  474. && vFrameSpeed[id][i][0] == 0
  475. && vFrameSpeed[id][i][1] == 0
  476. && vFrameSpeed[id][i][2] == 0)
  477. || (i == 1) )
  478. {
  479. pev(id, pev_origin, vOrigin);
  480. vFramePos[id][i][0] = vOrigin[0];
  481. vFramePos[id][i][1] = vOrigin[1];
  482. vFramePos[id][i][2] = vOrigin[2];
  483.  
  484. pev(id, pev_velocity, vVelocity);
  485. vFrameSpeed[id][i][0] = vVelocity[0];
  486. vFrameSpeed[id][i][1] = vVelocity[1];
  487. vFrameSpeed[id][i][2] = vVelocity[2];
  488.  
  489. i=2;
  490. }
  491. }
  492. }
  493.  
  494. pev(id, pev_velocity, vVelocity);
  495. if( flags&FL_ONGROUND && flags&FL_INWATER )
  496. vVelocity[2] = 0.0;
  497. fSpeed = vector_length(vVelocity);
  498.  
  499. pev(id, pev_origin, vOrigin);
  500. fDistance = get_distance_f(vOldOrigin[id], vOrigin);
  501. pev(id, pev_origin, vOldOrigin[id]);
  502. pev(id, pev_velocity, vVelocity);
  503. if( vVelocity[2] != 0 )
  504. vVelocity[2]-=vVelocity[2];
  505.  
  506. if( vector_length(vVelocity) > (fMaxGroundSpeed[id] + 105.0)
  507. || pev(id, pev_movetype) != MOVETYPE_WALK
  508. || pev(id, pev_maxspeed) > 250.0
  509. || fGravity != 1.0
  510. || get_pcvar_num(edgefriction) != 2
  511. || get_pcvar_num(mp_footsteps) != 1
  512. || get_pcvar_num(sv_cheats) != 0
  513. || get_pcvar_num(sv_gravity) != 800
  514. || get_pcvar_num(sv_airaccelerate) != 100
  515. || get_pcvar_num(sv_stepsize) != 18
  516. || get_pcvar_num(sv_maxvelocity) != 2000
  517. || pev(id, pev_waterlevel) >= 2
  518. || fDistance > 20 )
  519. {
  520. gocheck(id);
  521. return FMRES_IGNORED;
  522. }
  523. if( !(flags&FL_ONGROUND) )
  524. lasttime[id] = get_gametime();
  525.  
  526. if( gInAir[id])
  527. {
  528. if (((vOrigin[2] +18.0 - vOldOrigin2[id]) < 0)
  529. && !(flags&FL_ONGROUND) )
  530. {
  531. fallDown[id] = true;
  532. if( is_in_duck(id) )
  533. {
  534. vOrigin[2]-=18.0;
  535. vOldOrigin2[id]-=18.0;
  536. }
  537.  
  538. static Float:koeff1;
  539. koeff1 = (vOldOrigin2[id]-vCurrentOrigin[id][2])/(vOrigin[2]-vCurrentOrigin[id][2]);
  540.  
  541. vCurrentOrigin[id][2] = vOldOrigin2[id];
  542. vCurrentOrigin[id][0] = koeff1*(vOrigin[0]-vCurrentOrigin[id][0])+vCurrentOrigin[id][0];
  543. vCurrentOrigin[id][1] = koeff1*(vOrigin[1]-vCurrentOrigin[id][1])+vCurrentOrigin[id][1];
  544. }
  545. else
  546. {
  547. fallDown[id] = false;
  548. vCurrentOrigin[id] = vOrigin;
  549. }
  550.  
  551. pev(id, pev_velocity, vVelocity);
  552. if( vVelocity[2] != 0 )
  553. vVelocity[2]-=vVelocity[2];
  554. gSpeed = vector_length(vVelocity);
  555.  
  556. if( gSpeed > fMaxAirSpeed[id] )
  557. {
  558. if (strafes[id] < NSTRAFES)
  559. {
  560. strafe_stat_speed[id][strafes[id]][0] += gSpeed - fMaxAirSpeed[id];
  561. }
  562. fMaxAirSpeed[id] = gSpeed;
  563. }
  564. if ((gSpeed < TempSpeed[id]) && (strafes[id] < NSTRAFES))
  565. {
  566. strafe_stat_speed[id][strafes[id]][1] += TempSpeed[id] - gSpeed;
  567. }
  568. TempSpeed[id] = gSpeed;
  569. }
  570.  
  571. if( buttons&IN_JUMP
  572. && !(oldbuttons&IN_JUMP)
  573. && flags&FL_ONGROUND
  574. && gInAir[id] == false )
  575. {
  576. set_task(0.8,"gocheck", id);
  577.  
  578. jumptime[id] = get_gametime();
  579. gInAir[id] = true;
  580.  
  581. pev(id, pev_origin, vOrigin);
  582.  
  583. vOldOrigin2[id] = vOrigin[2];
  584.  
  585. fallDown[id] = false;
  586. fMaxGroundSpeed[id] = fSpeed;
  587. OldSpeed[id] = fSpeed;
  588. fMaxAirSpeed[id] = fSpeed;
  589.  
  590. pev(id, pev_velocity, oldvVelocity[id]);
  591. oldvVelocity[id][2]-=oldvVelocity[id][2];
  592.  
  593. vJumpedAt[id][0] = vOrigin[0];
  594. vJumpedAt[id][1] = vOrigin[1];
  595. vJumpedAt[id][2] = vOrigin[2];
  596.  
  597. if( doubleducked[id] && vOrigin[2] == vDuckedAt[id][2] )
  598. cjumped[id] = true;
  599. else
  600. cjumped[id] = false;
  601.  
  602. doubleducked[id] = false;
  603.  
  604. strafes[id] = INFO_ZERO;
  605.  
  606. TempSpeed[id] = 0.0;
  607.  
  608. static i;
  609. for( i = INFO_ZERO; i < NSTRAFES; i++ )
  610. {
  611. strafe_stat_speed[id][i][0] = 0.0;
  612. strafe_stat_speed[id][i][1] = 0.0;
  613. strafe_stat_sync[id][i][0] = INFO_ZERO;
  614. strafe_stat_sync[id][i][1] = INFO_ZERO;
  615. strafe_stat_time[id][i] = 0.0;
  616. }
  617.  
  618. turning_right[id] = false;
  619. turning_left[id] = false;
  620. strafing_aw[id] = false;
  621. strafing_sd[id] = false;
  622. for( i = INFO_ZERO; i < 2; i++ )
  623. {
  624. vFramePos[id][i][0] = 0.0;
  625. vFramePos[id][i][1] = 0.0;
  626. vFramePos[id][i][2] = 0.0;
  627.  
  628. vFrameSpeed[id][i][0] = 0.0;
  629. vFrameSpeed[id][i][1] = 0.0;
  630. vFrameSpeed[id][i][2] = 0.0;
  631. }
  632. }
  633. else if( ( fallDown[id] || flags&FL_ONGROUND ) && gInAir[id])
  634. {
  635.  
  636. set_task(0.5,"gocheck", id);
  637. gInAir[id] = false;
  638.  
  639. pev(id, pev_origin, vOrigin);
  640. if (fallDown[id] == true)
  641. {
  642. vOrigin[0]= vCurrentOrigin[id][0];
  643. vOrigin[1]= vCurrentOrigin[id][1];
  644. vOrigin[2]= vCurrentOrigin[id][2];
  645. }
  646.  
  647. fDistance1 = get_distance_f(vJumpedAt[id], vOrigin)+32.0625;
  648.  
  649. rLandPos[2] = vFrameSpeed[id][0][2] * vFrameSpeed[id][0][2] + (2 * get_pcvar_float(sv_gravity) * (vFramePos[id][0][2] - vOrigin[2]));
  650. rDistance[0] = (floatsqroot(rLandPos[2]) * -1) - vFrameSpeed[id][1][2];
  651. rDistance[1] = get_pcvar_float(sv_gravity)*-1;
  652. frame2time = floatdiv(rDistance[0], rDistance[1]);
  653.  
  654. if( vFrameSpeed[id][1][0] < 0 )
  655. vFrameSpeed[id][1][0] = vFrameSpeed[id][1][0]*-1;
  656. rDistance[0] = frame2time*vFrameSpeed[id][1][0];
  657.  
  658. if( vFrameSpeed[id][1][1] < 0 )
  659. vFrameSpeed[id][1][1] = vFrameSpeed[id][1][1]*-1;
  660. rDistance[1] = frame2time*vFrameSpeed[id][1][1];
  661.  
  662. if( vFramePos[id][1][0] < vOrigin[0] )
  663. rLandPos[0] = vFramePos[id][1][0] + rDistance[0];
  664. else
  665. rLandPos[0] = vFramePos[id][1][0] - rDistance[0];
  666.  
  667. if( vFramePos[id][1][1] < vOrigin[1] )
  668. rLandPos[1] = vFramePos[id][1][1] + rDistance[1];
  669. else
  670. rLandPos[1] = vFramePos[id][1][1] - rDistance[1];
  671.  
  672. if( is_in_duck(id) )
  673. vOrigin[2]+=18.0;
  674. rLandPos[2] = vOrigin[2];
  675.  
  676. frame2time += (lasttime[id]-jumptime[id]);
  677. if( vOrigin[2] == vJumpedAt[id][2] )
  678. {
  679. if( is_in_duck(id) && !(frame2time > 0.71 && frame2time < 0.77) )
  680. vOrigin[2] = vOrigin[2]*-1;
  681. else if( !(is_in_duck(id)) && !(frame2time > 0.65 && frame2time < 0.70) )
  682. vOrigin[2] = vOrigin[2]*-1;
  683. }
  684.  
  685. fDistance2 = get_distance_f(vJumpedAt[id], rLandPos)+32.0625;
  686. if( fDistance1 > fDistance2 )
  687. {
  688. fDistance = fDistance2;
  689. vOrigin[0] = rLandPos[0];
  690. vOrigin[1] = rLandPos[1];
  691. }
  692. else
  693. fDistance = fDistance1;
  694.  
  695. vJumpedAt2[2] = vJumpedAt[id][2]-34.0;
  696. vTraceEnd[2] = vOrigin[2]-34.0;
  697.  
  698. vJumpedAt2[0] = vJumpedAt[id][0];
  699. vTraceEnd[0] = vOrigin[0];
  700. vJumpedAt2[1] = vJumpedAt[id][1]-vJumpedAt[id][1];
  701. vTraceEnd[1] = vOrigin[1]-vOrigin[1];
  702. xDistance = get_distance_f(vJumpedAt2, vTraceEnd);
  703.  
  704. vJumpedAt2[0] = vJumpedAt[id][0]-vJumpedAt[id][0];
  705. vTraceEnd[0] = vOrigin[0]-vOrigin[0];
  706. vJumpedAt2[1] = vJumpedAt[id][1];
  707. vTraceEnd[1] = vOrigin[1];
  708. yDistance = get_distance_f(vJumpedAt2, vTraceEnd);
  709.  
  710. if( vJumpedAt[id][0] > vOrigin[0] )
  711. {
  712. vJumpedAt2[0] = vJumpedAt[id][0]+(xDistance*16.03125/fDistance);
  713. vTraceEnd[0] = vOrigin[0]-(xDistance*16.03125/fDistance);
  714. }
  715. else if( vJumpedAt[id][0] < vOrigin[0] )
  716. {
  717. vJumpedAt2[0] = vJumpedAt[id][0]-(xDistance*16.03125/fDistance);
  718. vTraceEnd[0] = vOrigin[0]+(xDistance*16.03125/fDistance);
  719. }
  720. else
  721. {
  722. vJumpedAt2[0] = vJumpedAt[id][0];
  723. vTraceEnd[0] = vOrigin[0];
  724. }
  725.  
  726. if( vJumpedAt[id][1] > vOrigin[1] )
  727. {
  728. vJumpedAt2[1] = vJumpedAt[id][1]+(yDistance*16.03125/fDistance);
  729. vTraceEnd[1] = vOrigin[1]-(yDistance*16.03125/fDistance);
  730. }
  731. else if( vJumpedAt[id][1] < vOrigin[1] )
  732. {
  733. vJumpedAt2[1] = vJumpedAt[id][1]-(yDistance*16.03125/fDistance);
  734. vTraceEnd[1] = vOrigin[1]+(yDistance*16.03125/fDistance);
  735. }
  736. else
  737. {
  738. vJumpedAt2[1] = vJumpedAt[id][1];
  739. vTraceEnd[1] = vOrigin[1];
  740. }
  741.  
  742. if( ((vJumpedAt[id][2] == vOrigin[2]) || fallDown[id] )
  743. && fDistance > get_pcvar_float(kz_min_lj)
  744. && fMaxGroundSpeed[id] < 279
  745. && cjumped[id] == false
  746. && !(fDistance > get_pcvar_float(kz_max_lj)) )
  747. {
  748. static sync;
  749.  
  750. static strLen, jj;
  751. static strMess[36*NSTRAFES];
  752. static goodSyncTemp, badSyncTemp;
  753.  
  754. strMess[0] = '^0';
  755. strLen = INFO_ZERO;
  756. sync = INFO_ZERO;
  757. badSyncTemp = INFO_ZERO;
  758. goodSyncTemp = INFO_ZERO;
  759.  
  760. static Float:time;
  761. static Float:Fulltime;
  762.  
  763. Fulltime = lasttime[id]-jumptime[id];
  764.  
  765. if(strafes[id] < NSTRAFES)
  766. {
  767. strafe_stat_time[id][0] = jumptime[id];
  768. strafe_stat_time[id][strafes[id]] = lasttime[id];
  769.  
  770. for(jj = INFO_ONE;jj <= strafes[id]; jj++)
  771. {
  772. time = ((strafe_stat_time[id][jj] - strafe_stat_time[id][jj-1])*100) / (Fulltime);
  773. if ((strafe_stat_sync[id][jj][0]+strafe_stat_sync[id][jj][1]) > 0)
  774. {
  775. sync = (strafe_stat_sync[id][jj][0] * 100)/(strafe_stat_sync[id][jj][0]+strafe_stat_sync[id][jj][1]); //using like a buffer
  776. }
  777. else
  778. {
  779. sync = 0;
  780. }
  781.  
  782. strLen += format(strMess[strLen],(30*NSTRAFES)-strLen-1, " %2d %4.3f %4.3f %3.0f%% %d%%^n", jj, strafe_stat_speed[id][jj][0], strafe_stat_speed[id][jj][1], time, sync);
  783.  
  784. goodSyncTemp += strafe_stat_sync[id][jj][0];
  785. badSyncTemp += strafe_stat_sync[id][jj][1];
  786. }
  787. }
  788. //Standart Sync
  789. if( goodSyncTemp > 0 )
  790. sync = (goodSyncTemp*100/(goodSyncTemp+badSyncTemp));
  791. else
  792. sync = INFO_ZERO;
  793.  
  794. static i, sound;
  795.  
  796. if ( fallDown[id] || pev(id, pev_maxspeed) != 250.0)
  797. {
  798. set_hudmessage(255, 0, 109, -1.0, 0.72, 0, 0.0, 5.0, 0.1, 0.1, 2);
  799. }
  800. else
  801. {
  802. set_hudmessage(0, 127, 255, -1.0, 0.72, 0, 0.0, 5.0, 0.1, 0.1, 2);
  803. }
  804. static strdist[128];
  805. num_to_word(floatround(fDistance, floatround_floor), strdist, 127);
  806. for( i = INFO_ONE; i < 33; i++ )
  807. {
  808. if(i == id && gHasLjStats[i])
  809. {
  810. show_hudmessage(i, "Distance: %f^nMaxSpeed: %f (%.3f)^nPreStrafe: %f^nStrafes: %d^nSync: %d%%", fDistance, fMaxAirSpeed[id], fMaxAirSpeed[id] - fMaxGroundSpeed[id], fMaxGroundSpeed[id], strafes[id], sync );
  811. client_print(i, print_console, "Distance: %f MaxSpeed: %f (%.3f) PreStrafe: %f Strafes: %d Sync: %d", fDistance, fMaxAirSpeed[id], fMaxAirSpeed[id] - fMaxGroundSpeed[id], fMaxGroundSpeed[id], strafes[id], sync );
  812.  
  813. if ( StrafeStat[id] && strLen !=0 )
  814. {
  815. if ( fallDown[id] || pev(id, pev_maxspeed) != 250.0)
  816. {
  817. set_hudmessage(255, 0, 109, 0.70, 0.35, 0, 0.0, 5.0, 0.1, 0.1, 1);
  818. }
  819. else
  820. {
  821. set_hudmessage(0, 127, 255, 0.70, 0.35, 0, 0.0, 5.0, 0.1, 0.1, 1);
  822. }
  823. show_hudmessage(i,"%s",strMess);
  824. static strMessHalf[40];
  825. for(jj=INFO_ONE; (jj <= strafes[id]) && (jj < NSTRAFES);jj++)
  826. {
  827. strtok(strMess,strMessHalf,40,strMess,40*NSTRAFES,'^n');
  828. replace(strMessHalf,40,"^n","");
  829. client_print(i, print_console, "%s", strMessHalf);
  830. }
  831. }
  832.  
  833. if( possible_lj_script[id][0] || possible_lj_script[id][1] )
  834. {
  835. if( possible_lj_script[id][0] && possible_lj_script[id][1] )
  836. client_print(i, print_center, "No ljtop access (possible lj script)");
  837. else
  838. client_print(i, print_center, "No ljtop access (possible %s script)", (possible_lj_script[id][0])?"prestrafe":"strafe");
  839. }
  840.  
  841. if( sound == 2 && gHasColorChat[i] && !(fallDown[id]) && pev(id, pev_maxspeed) == 250.0)
  842. client_cmd(i, "speak ^"vox/%s uniform(e30) it south(e15)^"", strdist);
  843. }
  844. }
  845.  
  846. if (!(fallDown[id]) && pev(id, pev_maxspeed) == 250.0)
  847. {
  848. static Float:max_lj, Float:leet_lj, Float:pro_lj, Float:good_lj, ljtop;
  849. max_lj = get_pcvar_float(kz_max_lj);
  850. leet_lj = get_pcvar_float(kz_leet_lj);
  851. pro_lj = get_pcvar_float(kz_pro_lj);
  852. good_lj = get_pcvar_float(kz_good_lj);
  853. ljtop = get_pcvar_num(kz_ljs_tops);
  854. if( fDistance < max_lj
  855. && !(fDistance < leet_lj)
  856. && !(0 > leet_lj)
  857. && (ljtop == 1
  858. || ljtop == 3) )
  859. {
  860. static name[33];
  861. get_user_name(id, name, 31);
  862. for( i = INFO_ONE; i < 33; i++ )
  863. {
  864. if( possible_lj_script[id][0] || possible_lj_script[id][1] )
  865. break;
  866.  
  867. if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
  868. ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 jumped^x04 %.3f^x01 [LJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync);
  869. }
  870. }
  871. else if( fDistance < max_lj
  872. && !(fDistance < pro_lj)
  873. && !(0 > pro_lj)
  874. && (ljtop == 1
  875. || ljtop == 3) )
  876. {
  877. static name[33];
  878. get_user_name(id, name, 31);
  879. for( i = INFO_ONE; i < 33; i++ )
  880. {
  881. if( possible_lj_script[id][0] || possible_lj_script[id][1] )
  882. break;
  883.  
  884. if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
  885. ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 jumped^x04 %.3f^x01 [LJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync);
  886. }
  887. }
  888.  
  889. else if( fDistance < max_lj
  890. && !(fDistance < good_lj)
  891. && !(0 > good_lj)
  892. && (ljtop == 1
  893. || ljtop == 3) )
  894. {
  895. static name[33];
  896. get_user_name(id, name, 31);
  897. for( i = INFO_ONE; i < 33; i++ )
  898. {
  899. if( possible_lj_script[id][0] || possible_lj_script[id][1] )
  900. break;
  901.  
  902. if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
  903. ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 jumped^x04 %.3f^x01 [LJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync);
  904. }
  905. }
  906. }
  907. }
  908. else if( ((vJumpedAt[id][2] == vOrigin[2]) || fallDown[id] )
  909. && fDistance > get_pcvar_float(kz_min_lj)
  910. && fMaxGroundSpeed[id] < 303
  911. && cjumped[id] == true
  912. && !(fDistance > (get_pcvar_float(kz_max_lj) + 18)) )
  913. {
  914. static sync;
  915.  
  916. static strLen, jj;
  917. static strMess[36*NSTRAFES];
  918. static goodSyncTemp, badSyncTemp;
  919.  
  920. strMess[0] = '^0';
  921. strLen = INFO_ZERO;
  922. sync = INFO_ZERO;
  923. badSyncTemp = INFO_ZERO;
  924. goodSyncTemp = INFO_ZERO;
  925.  
  926. static Float:time;
  927. static Float:Fulltime;
  928.  
  929. Fulltime = lasttime[id]-jumptime[id];
  930.  
  931. if(strafes[id] < NSTRAFES)
  932. {
  933. strafe_stat_time[id][0] = jumptime[id];
  934. strafe_stat_time[id][strafes[id]] = lasttime[id];
  935.  
  936. for(jj = INFO_ONE;jj <= strafes[id]; jj++)
  937. {
  938. time = ((strafe_stat_time[id][jj] - strafe_stat_time[id][jj-1])*100) / (Fulltime);
  939. if ((strafe_stat_sync[id][jj][0]+strafe_stat_sync[id][jj][1]) > 0)
  940. {
  941. sync = (strafe_stat_sync[id][jj][0] * 100)/(strafe_stat_sync[id][jj][0]+strafe_stat_sync[id][jj][1]);
  942. }
  943. else
  944. {
  945. sync = 0;
  946. }
  947.  
  948. strLen += format(strMess[strLen],(30*NSTRAFES)-strLen-1, " %2d %4.3f %4.3f %3.0f%% %d%%^n", jj, strafe_stat_speed[id][jj][0], strafe_stat_speed[id][jj][1], time, sync);
  949.  
  950. goodSyncTemp += strafe_stat_sync[id][jj][0];
  951. badSyncTemp += strafe_stat_sync[id][jj][1];
  952. }
  953. }
  954. //Standart Sync
  955. if( goodSyncTemp > 0 )
  956. sync = (goodSyncTemp*100/(goodSyncTemp+badSyncTemp));
  957. else
  958. sync = INFO_ZERO;
  959.  
  960. static i, sound;
  961.  
  962. if ( fallDown[id] || pev(id, pev_maxspeed) != 250.0)
  963. {
  964. set_hudmessage(255, 0, 109, -1.0, 0.72, 0, 0.0, 5.0, 0.1, 0.1, 2);
  965. }
  966. else
  967. {
  968. set_hudmessage(0, 127, 255, -1.0, 0.72, 0, 0.0, 5.0, 0.1, 0.1, 2);
  969. }
  970.  
  971. static strdist[128];
  972. num_to_word(floatround(fDistance, floatround_floor), strdist, 127);
  973. for( i = INFO_ONE; i < 33; i++ )
  974. {
  975. if(i == id && gHasLjStats[i])
  976. {
  977. show_hudmessage(i, "Distance: %f^nMaxSpeed: %f (%.3f)^nPreStrafe: %f^nStrafes: %d^nSync: %d%%", fDistance, fMaxAirSpeed[id], fMaxAirSpeed[id] - fMaxGroundSpeed[id], fMaxGroundSpeed[id], strafes[id], sync );
  978. client_print(i, print_console, "Distance: %f MaxSpeed: %f (%.3f) PreStrafe: %f Strafes: %d Sync: %d", fDistance, fMaxAirSpeed[id], fMaxAirSpeed[id] - fMaxGroundSpeed[id], fMaxGroundSpeed[id], strafes[id], sync );
  979.  
  980. if ( StrafeStat[id] && strLen !=0 )
  981. {
  982. if ( fallDown[id] || pev(id, pev_maxspeed) != 250.0)
  983. {
  984. set_hudmessage(255, 0, 109, 0.70, 0.35, 0, 0.0, 5.0, 0.1, 0.1, 1);
  985. }
  986. else
  987. {
  988. set_hudmessage(0, 127, 255, 0.70, 0.35, 0, 0.0, 5.0, 0.1, 0.1, 1);
  989. }
  990. show_hudmessage(i,"%s",strMess);
  991. static strMessHalf[40];
  992. for(jj=INFO_ONE; (jj <= strafes[id]) && (jj < NSTRAFES);jj++)
  993. {
  994. strtok(strMess,strMessHalf,40,strMess,40*NSTRAFES,'^n');
  995. replace(strMessHalf,40,"^n","");
  996. client_print(i, print_console, "%s", strMessHalf);
  997. }
  998. }
  999.  
  1000. if( possible_lj_script[id][0] || possible_lj_script[id][1] )
  1001. {
  1002. if( possible_lj_script[id][0] && possible_lj_script[id][1] )
  1003. client_print(i, print_center, "No ljtop access (possible cj script)");
  1004. else
  1005. client_print(i, print_center, "No ljtop access (possible %s script)", (possible_lj_script[id][0])?"prestrafe":"strafe");
  1006. }
  1007.  
  1008. if( sound == 2 && gHasColorChat[i] && !(fallDown[id]) && pev(id, pev_maxspeed) == 250.0)
  1009. client_cmd(i, "speak ^"vox/%s uniform(e30) it south(e15)^"", strdist);
  1010. }
  1011. }
  1012.  
  1013. if (!(fallDown[id]) && pev(id, pev_maxspeed) == 250.0)
  1014. {
  1015. static Float:cj_dif, Float:max_cj, Float:leet_cj, Float:pro_cj, Float:good_cj, ljtop;
  1016. cj_dif = get_pcvar_float(kz_cj_dif);
  1017. max_cj = get_pcvar_float(kz_max_lj) + 18;
  1018. leet_cj = get_pcvar_float(kz_leet_lj) + cj_dif;
  1019. pro_cj = get_pcvar_float(kz_pro_lj) + cj_dif;
  1020. good_cj = get_pcvar_float(kz_good_lj) + cj_dif;
  1021. ljtop = get_pcvar_num(kz_ljs_tops);
  1022. if( fDistance < max_cj
  1023. && !(fDistance < leet_cj)
  1024. && !(cj_dif > leet_cj)
  1025. && (ljtop == 1
  1026. || ljtop == 3) )
  1027. {
  1028. static name[33];
  1029. get_user_name(id, name, 31);
  1030. for( i = INFO_ONE; i < 33; i++ )
  1031. {
  1032. if( possible_lj_script[id][0] || possible_lj_script[id][1] )
  1033. break;
  1034.  
  1035. if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
  1036. ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 skoczyl^x04 %.3f^x01 [CJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync);
  1037. }
  1038. }
  1039.  
  1040. else if( fDistance < max_cj
  1041. && !(fDistance < pro_cj)
  1042. && !(cj_dif > pro_cj)
  1043. && (ljtop == 1
  1044. || ljtop == 3) )
  1045. {
  1046. static name[33];
  1047. get_user_name(id, name, 31);
  1048. for( i = INFO_ONE; i < 33; i++ )
  1049. {
  1050. if( possible_lj_script[id][0] || possible_lj_script[id][1] )
  1051. break;
  1052.  
  1053. if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
  1054. ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 skoczyl^x04 %.3f^x01 [CJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync);
  1055. }
  1056. }
  1057.  
  1058. else if( fDistance < max_cj
  1059. && !(fDistance < good_cj)
  1060. && !(cj_dif > good_cj)
  1061. && (ljtop == 1
  1062. || ljtop == 3) )
  1063. {
  1064. static name[33];
  1065. get_user_name(id, name, 31);
  1066. for( i = INFO_ONE; i < 33; i++ )
  1067. {
  1068. if( possible_lj_script[id][0] || possible_lj_script[id][1] )
  1069. break;
  1070.  
  1071. if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
  1072. ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 skoczyl^x04 %.3f^x01 [CJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync);
  1073. }
  1074. }
  1075. }
  1076. }
  1077. fMaxAirSpeed[id] = 0.0;
  1078. fMaxGroundSpeed[id] = 250.0;
  1079. cjumped[id] = false;
  1080. gInAir[id] = false;
  1081. }
  1082. else if( flags&FL_ONGROUND
  1083. && gInAir[id] == false )
  1084. {
  1085. pev(id, pev_velocity, vVelocity);
  1086. vVelocity[2]-=vVelocity[2];
  1087. if( vector_length(vVelocity) >= 279
  1088. && doubleducked[id] == false )
  1089. set_task(0.5,"gocheck", id);
  1090. gInAir[id] = false;
  1091. fMaxAirSpeed[id] = 0.0;
  1092. fMaxGroundSpeed[id] = 250.0;
  1093. cjumped[id] = false;
  1094. }
  1095.  
  1096. if( flags&FL_ONGROUND )
  1097. {
  1098. static ClassName[32];
  1099. pev(pev(id, pev_groundentity), pev_classname, ClassName, 32);
  1100. if( equal(ClassName, "func_train") || equal(ClassName, "func_door") || equal(ClassName, "func_door_rotating") || equal(ClassName, "func_conveyor") )
  1101. {
  1102. gocheck(id);
  1103. set_task(0.4,"gocheck", id);
  1104. }
  1105. if( OnGround[id] == false )
  1106. {
  1107. pev(id, pev_origin, vOrigin);
  1108. if( doubleducked[id] == false
  1109. && !(cjumped[id] == true
  1110. && buttons&IN_JUMP
  1111. && !(oldbuttons&IN_JUMP)) )
  1112. set_task(0.4,"gocheck", id);
  1113. else if( doubleducked[id] == true
  1114. && vOrigin[2] != vDuckedAt[id][2] )
  1115. set_task(0.5,"gocheck", id);
  1116. OnGround[id] = true;
  1117. }
  1118. }
  1119. if( buttons&IN_DUCK
  1120. && flags&FL_ONGROUND
  1121. && gInAir[id] == false )
  1122. {
  1123. if( induck[id] == false )
  1124. {
  1125. cducked[id] = true;
  1126. induck[id] = true;
  1127. set_task(0.1,"testcjstart", id);
  1128.  
  1129. pev(id, pev_origin, vOrigin);
  1130. vDuckedAt[id][0] = vOrigin[0];
  1131. vDuckedAt[id][1] = vOrigin[1];
  1132. vDuckedAt[id][2] = vOrigin[2];
  1133. }
  1134. }
  1135. else if( oldbuttons&IN_DUCK )
  1136. {
  1137. induck[id] = false;
  1138. if( cducked[id] == true && !is_in_duck(id) )
  1139. {
  1140. set_task(0.3,"ddend", id);
  1141. doubleducked[id] = true;
  1142. cducked[id] = false;
  1143. }
  1144. }
  1145. if( !(flags&FL_ONGROUND) )
  1146. OnGround[id] = false;
  1147. }
  1148. }
  1149. return FMRES_IGNORED;
  1150. }
  1151.  
  1152. public fwdPlayerPostThink(id)
  1153. {
  1154. if( is_user_alive(id) && get_pcvar_num(kz_ljs_enabled) )
  1155. {
  1156. static buttons, flags;
  1157. buttons = pev(id, pev_button);
  1158. flags = pev(id, pev_flags);
  1159.  
  1160. if( flags&FL_ONGROUND
  1161. && (gInAir[id] == true
  1162. || OnGround[id] == false) )
  1163. fwdPlayerPreThink(id);
  1164.  
  1165. pev(id, pev_angles, angle);
  1166. if( old_angle1[id] > angle[1] )
  1167. {
  1168. turning_left[id] = false;
  1169. turning_right[id] = true;
  1170. }
  1171. else if( old_angle1[id] < angle[1] )
  1172. {
  1173. turning_left[id] = true;
  1174. turning_right[id] = false;
  1175. }
  1176. else
  1177. {
  1178. turning_left[id] = false;
  1179. turning_right[id] = false;
  1180. }
  1181.  
  1182. if( strafing_aw[id] == false
  1183. && (buttons&IN_MOVELEFT)
  1184. && (turning_left[id] == true || turning_right[id] == true )
  1185. && !(buttons&IN_MOVERIGHT || buttons&IN_BACK) )
  1186. {
  1187. strafing_aw[id] = true;
  1188. strafing_sd[id] = false;
  1189. if(strafes[id] < NSTRAFES)
  1190. strafe_stat_time[id][strafes[id]] = get_gametime();
  1191. strafes[id] += INFO_ONE;
  1192. }
  1193. else if( strafing_sd[id] == false
  1194. && (buttons&IN_MOVERIGHT)
  1195. && (turning_left[id] == true || turning_right[id] == true )
  1196. && !(buttons&IN_MOVELEFT || buttons&IN_FORWARD) )
  1197. {
  1198. strafing_aw[id] = false;
  1199. strafing_sd[id] = true;
  1200. if(strafes[id] < NSTRAFES)
  1201. strafe_stat_time[id][strafes[id]] = get_gametime();
  1202. strafes[id] += INFO_ONE;
  1203. }
  1204.  
  1205. pev(id, pev_velocity, vVelocity);
  1206. vVelocity[2] = 0.0;
  1207. fSpeed = vector_length(vVelocity);
  1208.  
  1209. if( buttons&IN_MOVERIGHT
  1210. || buttons&IN_MOVELEFT
  1211. || buttons&IN_FORWARD
  1212. || buttons&IN_BACK )
  1213. {
  1214. if(strafes[id] < NSTRAFES)
  1215. {
  1216. if( fSpeed > OldSpeed[id])
  1217. strafe_stat_sync[id][strafes[id]][0] += INFO_ONE;
  1218. else
  1219. strafe_stat_sync[id][strafes[id]][1] += INFO_ONE;
  1220. }
  1221. }
  1222.  
  1223. OldSpeed[id] = fSpeed;
  1224.  
  1225. if( buttons&IN_RIGHT
  1226. || buttons&IN_LEFT )
  1227. {
  1228. if( flags&FL_ONGROUND )
  1229. {
  1230. possible_lj_script[id][1] = false;
  1231.  
  1232. if( fSpeed > 250 )
  1233. {
  1234. if( task_exists(id+534490) )
  1235. remove_task(id+534490);
  1236.  
  1237. possible_lj_script[id][0] = true;
  1238. }
  1239. }
  1240. else if( gInAir[id] )
  1241. possible_lj_script[id][1] = true;
  1242. }
  1243. else if( flags&FL_ONGROUND )
  1244. {
  1245. possible_lj_script[id][1] = false;
  1246.  
  1247. if( !task_exists(id+534490) && possible_lj_script[id][0] )
  1248. set_task(1.5, "isnt_prestrafe_cheating", id+534490);
  1249. }
  1250. }
  1251. }
  1252.  
  1253. public isnt_prestrafe_cheating(id)
  1254. possible_lj_script[id-534490][0] = false;
  1255.  
  1256. public fwdTouch(ent, id)
  1257. {
  1258. static ClassName[32];
  1259. if( pev_valid(ent) )
  1260. {
  1261. pev(ent, pev_classname, ClassName, 31);
  1262. }
  1263. static ClassName2[32];
  1264. if( pev_valid(id) )
  1265. {
  1266. pev(id, pev_classname, ClassName2, 31);
  1267. }
  1268. if( equal(ClassName2, "player") )
  1269. {
  1270. if( pev(id, pev_groundentity) == ent && (gInAir[id] || !OnGround[id]) )
  1271. {
  1272. if( pev(id, pev_flags)&FL_ONGROUND )
  1273. {
  1274. if( get_gametime() > (jumptime[id]+0.1) )
  1275. fwdPlayerPreThink(id);
  1276. }
  1277. }
  1278.  
  1279. if( equal(ClassName, "func_train") || equal(ClassName, "func_door") || equal(ClassName, "func_door_rotating") || equal(ClassName, "func_conveyor") )
  1280. {
  1281. gocheck(id);
  1282. set_task(0.4,"gocheck", id);
  1283. }
  1284. }
  1285. }
  1286.  
  1287. stock is_in_duck(player)
  1288. {
  1289. if( !pev_valid(player) )
  1290. return 0;
  1291.  
  1292. static Float:absmin[3], Float:absmax[3];
  1293.  
  1294. pev(player, pev_absmin, absmin);
  1295. pev(player, pev_absmax, absmax);
  1296.  
  1297. absmin[2]+=64.0;
  1298.  
  1299. if( absmin[2] < absmax[2] )
  1300. return 0;
  1301.  
  1302. return 1;
  1303. }
  1304. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  1305. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
  1306. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement