[Half-Life AMXX] / kz_ljs_xm.sma Repository:
ViewVC logotype

Annotation of /kz_ljs_xm.sma

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (view) (download)

1 : ian 1 /*
2 :     .-==========================================-.
3 :     |~~ Long Jump Stats - eXtreme Modification ~~|
4 :     .-==========================================-.
5 :    
6 :    
7 :     Server cvars:
8 :    
9 :     ===-
10 :    
11 :     // Enabled/Disables the plugin
12 :     // 0 = disabled
13 :     // 1 = enabled
14 :     kz_ljs_enabled "1"
15 :    
16 :     // Maximum possible lj (not 4 cj)
17 :     kz_max_lj "260.0"
18 :    
19 :     // 1337 lj (prints to all players)
20 :     // To disable, set it to -1
21 :     kz_leet_lj "250.0"
22 :    
23 :     // Professional lj (prints to all players)
24 :     // To disable, set it to -1
25 :     kz_pro_lj "245.0"
26 :    
27 :     // Good lj (prints to all players)
28 :     // To disable, set it to -1
29 :     kz_good_lj "240.0"
30 :    
31 :     // Minimal lj distance
32 :     kz_min_lj "215.0"
33 :    
34 :     // Difrence between longjump and countjump for good/pro/leet/max jump
35 :     kz_cj_dif "5.0"
36 :    
37 :     // Enables lj sounds
38 :     // 0 = disabled
39 :     // 1 = ultimate sounds
40 :     // 2 = distance in voice
41 :     kz_lj_sounds "1"
42 :    
43 :     // How dose plugin works
44 :     // 0 = no top and no colorchat
45 :     // 1 = prints good/pro/leet jumps
46 :     // 2 = enables top10
47 :     // 3 = prints good/pro/leet jumps and enables top10
48 :     kz_lj_top "3"
49 :    
50 :     // Do you want to save ljtop after mapchange?
51 :     kz_ljs_topsave "1"
52 :    
53 :     // How ranking will work?
54 :     // 0 = names
55 :     // 1 = steam ids
56 :     // 2 = ips
57 :     kz_ljs_rank_by "0"
58 :    
59 :     // Kz jumping color chat:
60 :     // 0 = normal
61 :     // 1 = red
62 :     // 2 = green
63 :     // 3 = blue
64 :     // 4 = silver
65 :     // 5 = team color
66 :    
67 :     kz_leet_lj_clr "1"
68 :     kz_pro_lj_clr "2"
69 :     kz_good_lj_clr "4"
70 :    
71 :     kz_leet_cj_clr "1"
72 :     kz_pro_cj_clr "2"
73 :     kz_good_cj_clr "4"
74 :    
75 :     // Colors of /ljstats (rrr ggg bbb)
76 :     kz_ljstats_red "0"
77 :     kz_ljstats_green "255"
78 :     kz_ljstats_blue "159"
79 :    
80 :     // LongJump Stats Laser Beam
81 :     // 0 = off
82 :     // 1 = normal
83 :     // 2 = uber beam
84 :     kz_ljs_beam "2"
85 :    
86 :     // Enables protection 4 legal kreedz settings
87 :     kz_legal_settings "1"
88 :    
89 :     // Is your server fast?
90 :     // 0 = slow
91 :     // 1 = normal
92 :     // 2 = realy good ( >10mb/s or localhost/lan server )
93 :     kz_ljs_fastserver "2"
94 :    
95 :     // Enables auto-setting 4 kz_ljs_fastserver cvar if it is 2
96 :     kz_ljs_autoserver "1"
97 :    
98 :     // What is enabled on client when he connects to a server?
99 :     // 0 = nothing
100 :     // a = colorchat
101 :     // b = ljstats
102 :     // c = speed
103 :     kz_ljs_connectenabler "abc"
104 :    
105 :     // Speedometer type
106 :     // 0 = show real speed and horizontal speed
107 :     // 1 = show real speed
108 :     // 2 = show horizontal speed
109 :     kz_ljs_speedtype "0"
110 :    
111 :     .-==========================================-.
112 :    
113 :    
114 :     Admin commands:
115 :    
116 :     ==-
117 :    
118 :     amx_resetljrec - resets ljrec and ljtop
119 :     amx_resetljtop - resets ljrec and ljtop
120 :    
121 :     .-==========================================-.
122 :    
123 :    
124 :     Client commands:
125 :    
126 :     ==-
127 :    
128 :     say /colorchat - enables/disables colorchat
129 :     say /lj10 - display tops menu
130 :     say /ljsmenu - display ljs menu
131 :     say /ljrec - prints best longjumper
132 :     say /ljstats - enables/disables longjump stats
133 :     say /ljsversion - prints plugin version
134 :     say /speed - enabled/disables visible speed
135 :    
136 :     .-==========================================-.
137 :    
138 :    
139 :     Installation:
140 :    
141 :     ==-
142 :    
143 :     1. Extract all files and overwrite your cstrike folder
144 :     2. Add kz_ljs_xm.amxx in addons/amxmodx/configs/plugins.ini list
145 :     3. Restart your server/Change map
146 :     !!! WARNING !!!
147 :     To get better gocheck and hook protection write kz_ljs_xm.amxx
148 :     in plugins.ini BEFORE your checkpoint and hook plugins!
149 :     Good e.x. of plugins.ini
150 :     -> kz_ljs_xm.amxx
151 :     -> ProKreedz.amxx
152 :     -> ProKreedz_Hook.amxx
153 :     Bad e.x. of plugins.ini
154 :     -> ProKreedz.amxx
155 :     -> ProKreedz_Hook.amxx
156 :     -> kz_ljs_xm.amxx
157 :    
158 :     .-==========================================-.
159 :    
160 :    
161 :     Credits:
162 :    
163 :     ==-
164 :    
165 :     Created by:
166 :     Fatalis ( 8.9.22.42:27017 ) ( http://www.KZMonkeys.net )
167 :     kzlt`Numb ( profai.sytes.net:27025 ) ( http://www.strike.lt )
168 :    
169 :     Special thanks to:
170 :     Bentski ( cs.bentski.lt:27015 ) ( http://kzlt.bentski.lt )
171 :     ~Val~ ( cs.groza.ru:27017 ) ( http://www.groza.ru )
172 :    
173 :     Hosted by:
174 :     http://www.xtreme-jumps.eu/
175 :     http://www.thebishop.fr/
176 :    
177 :     .-==========================================-.
178 :    
179 :     Have fun! =]
180 :    
181 :    
182 :     P.S. You need legal kreedz settings 4 this to work!!!
183 :    
184 :     */
185 :    
186 :     #include <amxmodx>
187 :     #include <amxmisc>
188 :     #include <colorchat>
189 :     #include <fakemeta>
190 :    
191 :     #pragma semicolon 1
192 :    
193 :     #define INFO_ZERO 0
194 :     #define INFO_ONE 1
195 :    
196 :     // Ints
197 :     new idist;
198 :     new idist2;
199 :     new pluginstatus;
200 :     new gBeam;
201 :     new strafes[33];
202 :     new goodsync[33];
203 :     new badsync[33];
204 :     new top_names[10][33];
205 :     new top_authid[10][33];
206 :     new top_distance[10];
207 :     new top_maxspeed[10];
208 :     new top_prestrafe[10];
209 :     new top_strafes[10];
210 :     new top_sync[10];
211 :     new top_type[10][5];
212 :     new cj_names[10][33];
213 :     new cj_authid[10][33];
214 :     new cj_distance[10];
215 :     new cj_maxspeed[10];
216 :     new cj_prestrafe[10];
217 :     new cj_strafes[10];
218 :     new cj_sync[10];
219 :     new lj_names[10][33];
220 :     new lj_authid[10][33];
221 :     new lj_distance[10];
222 :     new lj_maxspeed[10];
223 :     new lj_prestrafe[10];
224 :     new lj_strafes[10];
225 :     new lj_sync[10];
226 :     new view_names[33][10][33];
227 :     new view_distance[33][10];
228 :     new view_maxspeed[33][10];
229 :     new view_prestrafe[33][10];
230 :     new view_strafes[33][10];
231 :     new view_sync[33][10];
232 :     new view_type[33][10][5];
233 :     new full_top_stats_selected_type[33];
234 :     new edgefriction;
235 :     new mp_footsteps;
236 :     new sv_cheats;
237 :     new sv_gravity;
238 :     new sv_airaccelerate;
239 :     new sv_maxspeed;
240 :     new sv_stepsize;
241 :     new sv_maxvelocity;
242 :    
243 :     // Bools
244 :     new bool:tops_save;
245 :     new bool:gHasColorChat[33];
246 :     new bool:gHasSpeed[33];
247 :     new bool:gHasLjStats[33];
248 :     new bool:gInAir[33];
249 :     new bool:cjumped[33];
250 :     new bool:doubleducked[33];
251 :     new bool:cducked[33];
252 :     new bool:induck[33];
253 :     new bool:OnGround[33];
254 :     new bool:turning_right[33];
255 :     new bool:turning_left[33];
256 :     new bool:straifing_aw[33];
257 :     new bool:straifing_sd[33];
258 :     new bool:menuselect_allowed[33][9];
259 :    
260 :     // Floats
261 :     new Float:old_angle1[33];
262 :     new Float:angle[3];
263 :     new Float:vFramePos[33][2][3];
264 :     new Float:vFrameSpeed[33][2][3];
265 :     new Float:vBeamPos[33][129][3];
266 :     new Float:vBeamPosStatus[33][129];
267 :     new Float:vDuckedAt[33][3];
268 :     new Float:vJumpedAt[33][3];
269 :     new Float:vJumpedAt2[3];
270 :     new Float:xDistance;
271 :     new Float:yDistance;
272 :     new Float:fDistance;
273 :     new Float:fDistance1;
274 :     new Float:fDistance2;
275 :     new Float:rDistance[2];
276 :     new Float:rLandPos[3];
277 :     new Float:vOrigin[3];
278 :     new Float:vOldOrigin[33][3];
279 :     new Float:vTraceEnd[3];
280 :     new Float:fMaxAirSpeed[33];
281 :     new Float:fMaxGroundSpeed[33];
282 :     new Float:vVelocity[3];
283 :     new Float:fSpeed;
284 :     new Float:gSpeed;
285 :     new Float:OldSpeed[33];
286 :     new Float:frame2time;
287 :     new Float:jumptime[33];
288 :     new Float:lasttime[33];
289 :    
290 :     // Strings
291 :     new const gPLUGIN[] = "LjS - eXtreme Mod";
292 :     new const gVERSION[] = "2.17";
293 :     new const gAUTHOR[] = "Fatalis & kzlt`Numb";
294 :    
295 :     new MAXPLAYERS;
296 :    
297 :     public plugin_init()
298 :     {
299 :     register_plugin(gPLUGIN, gVERSION, gAUTHOR);
300 :     register_cvar("LongJumpStats", gVERSION, FCVAR_SERVER);
301 :    
302 :     register_forward(FM_Touch, "fwdTouch", 1);
303 :     register_forward(FM_PlayerPreThink, "fwdPlayerPreThink", 0);
304 :     register_forward(FM_PlayerPostThink, "fwdPlayerPostThink", 0);
305 :     register_forward(FM_StartFrame, "fwdStartFrame", 0);
306 :    
307 :     register_clcmd("say /colorchat", "cmdColorChat", ADMIN_ALL, "- enables/disables colorchat");
308 :     register_clcmd("say /ljstats", "cmdLjStats", ADMIN_ALL, "- enables/disables longjump stats");
309 :     register_clcmd("say /ljsversion", "cmdVersion", ADMIN_ALL, "- prints plugin version");
310 :     register_clcmd("say /speed", "cmdSpeed", ADMIN_ALL, "- enabled/disables visible speed");
311 :    
312 :     register_cvar("kz_ljs_enabled", "1"); // enables/disables the plugin
313 :    
314 :     register_cvar("kz_good_lj","240.0"); // good longjumps
315 :     register_cvar("kz_pro_lj","245.0"); // professional longjumps
316 :     register_cvar("kz_leet_lj","250.0"); // leet longjump
317 :     register_cvar("kz_min_lj","215.0"); // minimal longjump
318 :     register_cvar("kz_max_lj","260.0"); // maximal longjump
319 :     register_cvar("kz_cj_dif","5.0"); // difrence between lj and cj
320 :     register_cvar("kz_lj_sounds","1"); // enables leet/pro/good lj/cj sounds
321 :     register_cvar("kz_leet_lj_clr","1"); // color of leet lj (1=red, 2=green, 3=blue, 4=gray, 5=team, 0=default)
322 :     register_cvar("kz_pro_lj_clr","2"); // color of pro lj
323 :     register_cvar("kz_good_lj_clr","4"); // color of good lj
324 :     register_cvar("kz_leet_cj_clr","1"); // color of leet lj
325 :     register_cvar("kz_pro_cj_clr","2"); // color of pro lj
326 :     register_cvar("kz_good_cj_clr","4"); // color of good lj
327 :    
328 :     register_cvar("kz_ljstats_red","0"); // red color of /ljstats
329 :     register_cvar("kz_ljstats_green","255"); // green color of /ljstats
330 :     register_cvar("kz_ljstats_blue","159"); // blue color of /ljstats
331 :    
332 :     register_cvar("kz_ljs_beam", "2"); // 0=beam off, 1=normal beam, 2=uber beam
333 :    
334 :     register_cvar("kz_legal_settings", "1"); // enables protection 4 legal kreedz settings
335 :    
336 :     register_cvar("kz_ljs_autoserver", "1"); // Authomaticaly detect what cvar of kz_ljs_fastserver shold be?
337 :     register_cvar("kz_ljs_speedtype", "0"); // Speedometer type
338 :     register_cvar("kz_ljs_connectenabler", "abc"); // What is enabled at connect (0=nothing, a=colorchat, b=ljstats, c=speed)
339 :    
340 :     register_cvar("kz_lj_top", "3"); // LongJump top (0=Nothing, 1=ColorChat, 2=top, 3=top+ColorChat)
341 :     register_cvar("kz_ljs_topsave", "1"); // Do you want to save ljtop after mapchange?
342 :     register_cvar("kz_ljs_rank_by", "0"); // How ranking will work? 0=name, 1=steam, 2=ip
343 :    
344 :     register_clcmd( "say /ljsmenu", "cmdLjsMenu", ADMIN_ALL, "- display ljs menu");
345 :     register_clcmd( "say /cj15", "cmdTopMenu", -1, "- display tops menu" );
346 :     register_clcmd( "say /cjtop15", "cmdTopMenu", -1, "- display tops menu" );
347 :     register_clcmd( "say /cj10", "cmdTopMenu", ADMIN_ALL, "- display tops menu" );
348 :     register_clcmd( "say /cjtop10", "cmdTopMenu", -1, "- display tops menu" );
349 :     register_clcmd( "say /cjtop", "cmdTopMenu", -1, "- display tops menu" );
350 :     register_clcmd( "say /lj15", "cmdTopMenu", -1, "- display tops menu" );
351 :     register_clcmd( "say /ljtop15", "cmdTopMenu", -1, "- display tops menu" );
352 :     register_clcmd( "say /lj10", "cmdTopMenu", ADMIN_ALL, "- display tops menu" );
353 :     register_clcmd( "say /ljtop10", "cmdTopMenu", -1, "- display tops menu" );
354 :     register_clcmd( "say /ljtop", "cmdTopMenu", -1, "- display tops menu" );
355 :     register_clcmd( "say /ljrec", "show_leet_ljumper", ADMIN_ALL, "- prints best longjump" );
356 :    
357 :     register_clcmd( "say /tele", "gocheck", -1, " - teleported" );
358 :     register_clcmd( "say /tp", "gocheck", -1, " - teleported" );
359 :     register_clcmd( "say /gocheck", "gocheck", -1, " - teleported" );
360 :     register_clcmd( "say /gc", "gocheck", -1, " - teleported" );
361 :     register_clcmd( "say .tele", "gocheck", -1, " - teleported" );
362 :     register_clcmd( "say .tp", "gocheck", -1, " - teleported" );
363 :     register_clcmd( "say .gocheck", "gocheck", -1, " - teleported" );
364 :     register_clcmd( "say .gc", "gocheck", -1, " - teleported" );
365 :     register_clcmd( "/tele", "gocheck", -1, " - teleported" );
366 :     register_clcmd( "/tp", "gocheck", -1, " - teleported" );
367 :     register_clcmd( "/gocheck", "gocheck", -1, " - teleported" );
368 :     register_clcmd( "/gc", "gocheck", -1, " - teleported" );
369 :     register_clcmd( ".tele", "gocheck", -1, " - teleported" );
370 :     register_clcmd( ".tp", "gocheck", -1, " - teleported" );
371 :     register_clcmd( ".gocheck", "gocheck", -1, " - teleported" );
372 :     register_clcmd( ".gc", "gocheck", -1, " - teleported" );
373 :     register_clcmd( "say /start", "gocheck", -1, " - reseted" );
374 :     register_clcmd( "say /reset", "gocheck", -1, " - reseted" );
375 :     register_clcmd( "say /restart", "gocheck", -1, " - reseted" );
376 :     register_clcmd( "say /spawn", "gocheck", -1, " - reseted" );
377 :     register_clcmd( "say .start", "gocheck", -1, " - reseted" );
378 :     register_clcmd( "say .reset", "gocheck", -1, " - reseted" );
379 :     register_clcmd( "say .restart", "gocheck", -1, " - reseted" );
380 :     register_clcmd( "say .spawn", "gocheck", -1, " - reseted" );
381 :     register_clcmd( "/start", "gocheck", -1, " - reseted" );
382 :     register_clcmd( "/reset", "gocheck", -1, " - reseted" );
383 :     register_clcmd( "/restart", "gocheck", -1, " - reseted" );
384 :     register_clcmd( "/spawn", "gocheck", -1, " - reseted" );
385 :     register_clcmd( ".start", "gocheck", -1, " - reseted" );
386 :     register_clcmd( ".reset", "gocheck", -1, " - reseted" );
387 :     register_clcmd( ".restart", "gocheck", -1, " - reseted" );
388 :     register_clcmd( ".spawn", "gocheck", -1, " - reseted" );
389 :     register_clcmd( "+hook", "gocheck", -1, " - used hook" );
390 :     register_clcmd( "-hook", "gocheck", -1, " - used hook" );
391 :     register_clcmd( "say /stuck", "gocheck", -1, " - teleported" );
392 :     register_clcmd( "say /unstuck", "gocheck", -1, " - teleported" );
393 :     register_clcmd( "say .stuck", "gocheck", -1, " - teleported" );
394 :     register_clcmd( "say .unstuck", "gocheck", -1, " - teleported" );
395 :     register_clcmd( "/stuck", "gocheck", -1, " - teleported" );
396 :     register_clcmd( "/unstuck", "gocheck", -1, " - teleported" );
397 :     register_clcmd( ".stuck", "gocheck", -1, " - teleported" );
398 :     register_clcmd( ".unstuck", "gocheck", -1, " - teleported" );
399 :    
400 :     MAXPLAYERS = get_maxplayers( );
401 :    
402 :     edgefriction = get_cvar_pointer("edgefriction");
403 :     mp_footsteps = get_cvar_pointer("mp_footsteps");
404 :     sv_cheats = get_cvar_pointer("sv_cheats");
405 :     sv_gravity = get_cvar_pointer("sv_gravity");
406 :     sv_airaccelerate = get_cvar_pointer("sv_airaccelerate");
407 :     sv_maxspeed = get_cvar_pointer("sv_maxspeed");
408 :     sv_stepsize = get_cvar_pointer("sv_stepsize");
409 :     sv_maxvelocity = get_cvar_pointer("sv_maxvelocity");
410 :    
411 :     set_task(3.0, "editional_init");
412 :    
413 :     exec_ljsconfig();
414 :     }
415 :    
416 :     public editional_init()
417 :     {
418 :     // Is your server fast? (0=slow, 1=normal, 2=good)
419 :     if( !is_dedicated_server() && get_cvar_num("sv_lan") != 0 && !cvar_exists("kz_ljs_fastserver") && get_cvar_num("kz_ljs_autoserver") )
420 :     {
421 :     register_cvar("kz_ljs_fastserver", "2");
422 :     set_cvar_num("kz_ljs_fastserver", 2);
423 :     }
424 :     else if( !cvar_exists("kz_ljs_fastserver") || ((get_cvar_num("sv_lan") == 0 || is_dedicated_server()) && get_cvar_num("kz_ljs_fastserver") == 2 && get_cvar_num("kz_ljs_autoserver")) )
425 :     {
426 :     register_cvar("kz_ljs_fastserver", "1");
427 :     set_cvar_num("kz_ljs_fastserver", 1);
428 :     }
429 :    
430 :     if( !get_cvar_num("kz_ljs_autoserver") )
431 :     exec_ljsconfig();
432 :    
433 :     // Special tops save
434 :     tops_save = true;
435 :     if( get_cvar_num("kz_ljs_topsave") )
436 :     read_tops();
437 :     else
438 :     tops_save = false;
439 :    
440 :     if ( tops_save )
441 :     {
442 :     register_concmd("amx_resetljrec", "topreset", ADMIN_RCON, "- resets ljrec and ljtops");
443 :     register_concmd("amx_resetljtops", "topreset", ADMIN_RCON, "- resets ljrec and ljtops");
444 :     }
445 :     else
446 :     {
447 :     register_concmd("amx_resetljrec", "topreset", ADMIN_MAP, "- resets ljrec and ljtops");
448 :     register_concmd("amx_resetljtops", "topreset", ADMIN_MAP, "- resets ljrec and ljtops");
449 :     }
450 :    
451 :     register_dictionary("common.txt");
452 :     }
453 :    
454 :     public exec_ljsconfig()
455 :     {
456 :     static configsDir[64], filename[128];
457 :     get_configsdir(configsDir, 63);
458 :     format(filename, 127, "%s/ljstats.cfg", configsDir);
459 :    
460 :     if( !file_exists(filename) )
461 :     {
462 :     write_file(filename, "// .-==========================================-.");
463 :     write_file(filename, "// |~~ Long Jump Stats - eXtreme Modification ~~|");
464 :     write_file(filename, "// .-==========================================-.");
465 :     write_file(filename, "");
466 :     write_file(filename, "");
467 :     write_file(filename, "// Enabled/Disables the plugin");
468 :     write_file(filename, "// 0 = disabled");
469 :     write_file(filename, "// 1 = enabled");
470 :     write_file(filename, "kz_ljs_enabled ^"1^"");
471 :     write_file(filename, "");
472 :     write_file(filename, "// Maximum possible lj (not 4 cj)");
473 :     write_file(filename, "kz_max_lj ^"260.0^"");
474 :     write_file(filename, "");
475 :     write_file(filename, "// 1337 lj (prints to all players)");
476 :     write_file(filename, "// To disable, set it to -1");
477 :     write_file(filename, "kz_leet_lj ^"250.0^"");
478 :     write_file(filename, "");
479 :     write_file(filename, "// Professional lj (prints to all players)");
480 :     write_file(filename, "// To disable, set it to -1");
481 :     write_file(filename, "kz_pro_lj ^"245.0^"");
482 :     write_file(filename, "");
483 :     write_file(filename, "// Good lj (prints to all players)");
484 :     write_file(filename, "// To disable, set it to -1");
485 :     write_file(filename, "kz_good_lj ^"240.0^"");
486 :     write_file(filename, "");
487 :     write_file(filename, "// Minimal lj distance");
488 :     write_file(filename, "kz_min_lj ^"215.0^"");
489 :     write_file(filename, "");
490 :     write_file(filename, "// Difrence between longjump and countjump for good/pro/leet/max jump");
491 :     write_file(filename, "kz_cj_dif ^"5.0^"");
492 :     write_file(filename, "");
493 :     write_file(filename, "// Enables lj sounds");
494 :     write_file(filename, "// 0 = disabled");
495 :     write_file(filename, "// 1 = ultimate sounds");
496 :     write_file(filename, "// 2 = distance in voice");
497 :     write_file(filename, "kz_lj_sounds ^"1^"");
498 :     write_file(filename, "");
499 :     write_file(filename, "// How dose plugin works");
500 :     write_file(filename, "// 0 = no top and no colorchat");
501 :     write_file(filename, "// 1 = prints good/pro/leet jumps");
502 :     write_file(filename, "// 2 = enables top10");
503 :     write_file(filename, "// 3 = prints good/pro/leet jumps and enables top10");
504 :     write_file(filename, "kz_lj_top ^"3^"");
505 :     write_file(filename, "");
506 :     write_file(filename, "// Do you want to save ljtop after mapchange?");
507 :     write_file(filename, "kz_ljs_topsave ^"1^"");
508 :     write_file(filename, "");
509 :     write_file(filename, "// How ranking will work?");
510 :     write_file(filename, "// 0 = names");
511 :     write_file(filename, "// 1 = steam ids");
512 :     write_file(filename, "// 2 = ips");
513 :     write_file(filename, "kz_ljs_rank_by ^"0^"");
514 :     write_file(filename, "");
515 :     write_file(filename, "// Kz jumping color chat:");
516 :     write_file(filename, "// 0 = normal");
517 :     write_file(filename, "// 1 = red");
518 :     write_file(filename, "// 2 = green");
519 :     write_file(filename, "// 3 = blue");
520 :     write_file(filename, "// 4 = silver");
521 :     write_file(filename, "// 5 = team color");
522 :     write_file(filename, "");
523 :     write_file(filename, "kz_leet_lj_clr ^"1^"");
524 :     write_file(filename, "kz_pro_lj_clr ^"2^"");
525 :     write_file(filename, "kz_good_lj_clr ^"4^"");
526 :     write_file(filename, "");
527 :     write_file(filename, "kz_leet_cj_clr ^"1^"");
528 :     write_file(filename, "kz_pro_cj_clr ^"2^"");
529 :     write_file(filename, "kz_good_cj_clr ^"4^"");
530 :     write_file(filename, "");
531 :     write_file(filename, "// Colors of /ljstats (rrr ggg bbb)");
532 :     write_file(filename, "kz_ljstats_red ^"0^"");
533 :     write_file(filename, "kz_ljstats_green ^"255^"");
534 :     write_file(filename, "kz_ljstats_blue ^"159^"");
535 :     write_file(filename, "");
536 :     write_file(filename, "// LongJump Stats Laser Beam");
537 :     write_file(filename, "// 0 = off");
538 :     write_file(filename, "// 1 = normal");
539 :     write_file(filename, "// 2 = uber beam");
540 :     write_file(filename, "kz_ljs_beam ^"2^"");
541 :     write_file(filename, "");
542 :     write_file(filename, "// Enables protection 4 legal kreedz settings");
543 :     write_file(filename, "kz_legal_settings ^"1^"");
544 :     write_file(filename, "");
545 :     write_file(filename, "// Is your server fast?");
546 :     write_file(filename, "// 0 = slow");
547 :     write_file(filename, "// 1 = normal");
548 :     write_file(filename, "// 2 = realy good ( >10mb/s or localhost/lan server )");
549 :     write_file(filename, "kz_ljs_fastserver ^"2^"");
550 :     write_file(filename, "");
551 :     write_file(filename, "// Enables auto-setting 4 kz_ljs_fastserver cvar if it is 2");
552 :     write_file(filename, "kz_ljs_autoserver ^"1^"");
553 :     write_file(filename, "");
554 :     write_file(filename, "// What is enabled on client when he connects to a server?");
555 :     write_file(filename, "// 0 = nothing");
556 :     write_file(filename, "// a = colorchat");
557 :     write_file(filename, "// b = ljstats");
558 :     write_file(filename, "// c = speed");
559 :     write_file(filename, "kz_ljs_connectenabler ^"abc^"");
560 :     write_file(filename, "");
561 :     write_file(filename, "// Speedometer type");
562 :     write_file(filename, "// 0 = show real speed and horizontal speed");
563 :     write_file(filename, "// 1 = show real speed");
564 :     write_file(filename, "// 2 = show horizontal speed");
565 :     write_file(filename, "kz_ljs_speedtype ^"0^"");
566 :     }
567 :     server_cmd("exec ^"%s^"", filename);
568 :     }
569 :    
570 :     public plugin_cfg()
571 :     {
572 :     set_cvar_string("edgefriction", "2");
573 :     set_cvar_string("mp_footsteps", "1");
574 :     set_cvar_string("sv_cheats", "0");
575 :     set_cvar_string("sv_gravity", "800");
576 :     set_cvar_string("sv_airaccelerate", "10");
577 :     set_cvar_string("sv_maxspeed", "320");
578 :     set_cvar_string("sv_stepsize", "18");
579 :     set_cvar_string("sv_maxvelocity", "2000");
580 :     }
581 :    
582 :     public plugin_precache()
583 :     {
584 :     switch(random_num(1,6))
585 :     {
586 :     case 1:
587 :     {
588 :     gBeam = precache_model("sprites/zbeam1.spr");
589 :     }
590 :     case 2:
591 :     {
592 :     gBeam = precache_model("sprites/zbeam2.spr");
593 :     }
594 :     case 3:
595 :     {
596 :     gBeam = precache_model("sprites/zbeam3.spr");
597 :     }
598 :     case 4:
599 :     {
600 :     gBeam = precache_model("sprites/zbeam4.spr");
601 :     }
602 :     case 5:
603 :     {
604 :     gBeam = precache_model("sprites/zbeam5.spr");
605 :     }
606 :     case 6:
607 :     {
608 :     gBeam = precache_model("sprites/zbeam6.spr");
609 :     }
610 :     }
611 :    
612 :     if( get_cvar_num("kz_lj_sounds") == 1 )
613 :     {
614 :     precache_sound("misc/impressive.wav");
615 :     precache_sound("misc/mod_godlike.wav");
616 :     precache_sound("misc/mod_wickedsick.wav");
617 :     precache_sound("misc/perfect.wav");
618 :     }
619 :    
620 :     if( get_cvar_num("kz_ljs_enabled") )
621 :     pluginstatus = INFO_ONE;
622 :     else
623 :     pluginstatus = INFO_ZERO;
624 :     }
625 :    
626 :     public cmdTopMenu(id)
627 :     {
628 :     if( get_cvar_num("kz_ljs_enabled") && (get_cvar_num("kz_lj_top") == 2 || get_cvar_num("kz_lj_top") == 3) )
629 :     {
630 :     if( top_distance[0] )
631 :     {
632 :     new MainTopMenu = menu_create("\yTop 10 Menu", "MainTopMenu_Select", 0);
633 :     menu_additem(MainTopMenu, "\wDisplay total top", "1", 0, -1);
634 :     if( !lj_distance[0] )
635 :     {
636 :     menu_additem(MainTopMenu, "\dDisplay lj top (no ljs)", "2", 0, -1);
637 :     menu_additem(MainTopMenu, "\wDisplay cj top^n^n^n\yTops full stats^n", "3", 0, -1);
638 :     menuselect_allowed[id][2] = false;
639 :     menuselect_allowed[id][3] = true;
640 :     }
641 :     else if( !cj_distance[0] )
642 :     {
643 :     menu_additem(MainTopMenu, "\wDisplay lj top", "2", 0, -1);
644 :     menu_additem(MainTopMenu, "\dDisplay cj top (no cjs)^n^n^n\yTops full stats^n", "3", 0, -1);
645 :     menuselect_allowed[id][2] = true;
646 :     menuselect_allowed[id][3] = false;
647 :     }
648 :     else
649 :     {
650 :     menu_additem(MainTopMenu, "\wDisplay lj top", "2", 0, -1);
651 :     menu_additem(MainTopMenu, "\wDisplay cj top^n^n^n\yTops full stats^n", "3", 0, -1);
652 :     menuselect_allowed[id][2] = true;
653 :     menuselect_allowed[id][3] = true;
654 :     }
655 :    
656 :     menu_additem(MainTopMenu, "\wTotal top stats", "4", 0, -1);
657 :     if( !lj_distance[0] )
658 :     {
659 :     menu_additem(MainTopMenu, "\dLj top stats (no ljs)", "5", 0, -1);
660 :     menu_additem(MainTopMenu, "\wCj top stats^n", "6", 0, -1);
661 :     menuselect_allowed[id][5] = false;
662 :     menuselect_allowed[id][6] = true;
663 :     }
664 :     else if( !cj_distance[0] )
665 :     {
666 :     menu_additem(MainTopMenu, "\wLj top stats", "5", 0, -1);
667 :     menu_additem(MainTopMenu, "\dCj top stats (no cjs)^n", "6", 0, -1);
668 :     menuselect_allowed[id][5] = true;
669 :     menuselect_allowed[id][6] = false;
670 :     }
671 :     else
672 :     {
673 :     menu_additem(MainTopMenu, "\wLj top stats", "5", 0, -1);
674 :     menu_additem(MainTopMenu, "\wCj top stats^n", "6", 0, -1);
675 :     menuselect_allowed[id][5] = true;
676 :     menuselect_allowed[id][6] = true;
677 :     }
678 :     menu_display(id, MainTopMenu, 0);
679 :     }
680 :     else
681 :     {
682 :     client_print(id, print_chat, "[XJ] Tops menu is invalid. No jumps were made.");
683 :     //MainTopMenu = menu_create(
684 :     //"\yTop 10 Menu^n^n\r1. \dDisplay total top (no jumps)^n\r2. \dDisplay lj top (no ljs)^n\r3. \dDisplay cj top (no cjs)^n^n\yTops full stats^n^n\r4. \dTotal top stats (no jumps)^n\r5. \dLj top stats (no ljs)^n\r6. \dCj top stats (no cjs)^n",
685 :     //"MainTopMenu_Select", 0);
686 :     }
687 :     }
688 :     }
689 :    
690 :     public MainTopMenu_Select(id, menu, item)
691 :     {
692 :     if( item == MENU_EXIT )
693 :     menu_destroy(menu);
694 :    
695 :     else if( get_cvar_num("kz_ljs_enabled") && (get_cvar_num("kz_lj_top") == 2 || get_cvar_num("kz_lj_top") == 3) )
696 :     {
697 :     new keycmd[3], _access, callback;
698 :     menu_item_getinfo(menu, item, _access, keycmd, 2, "", 0, callback);
699 :     menu_destroy(menu);
700 :     switch(str_to_num(keycmd))
701 :     {
702 :     case 1: show_top(id, 0);
703 :     case 2:
704 :     {
705 :     if( menuselect_allowed[id][2] )
706 :     show_top(id, 1);
707 :     else
708 :     cmdTopMenu(id);
709 :     }
710 :     case 3:
711 :     {
712 :     if( menuselect_allowed[id][3] )
713 :     show_top(id, 2);
714 :     else
715 :     cmdTopMenu(id);
716 :     }
717 :     case 4: display_full_top_stats_menu(id, 0, 0);
718 :     case 5:
719 :     {
720 :     if( menuselect_allowed[id][5] )
721 :     display_full_top_stats_menu(id, 1, 0);
722 :     else
723 :     cmdTopMenu(id);
724 :     }
725 :     case 6:
726 :     {
727 :     if( menuselect_allowed[id][6] )
728 :     display_full_top_stats_menu(id, 2, 0);
729 :     else
730 :     cmdTopMenu(id);
731 :     }
732 :     }
733 :     }
734 :     else
735 :     menu_destroy(menu);
736 :     }
737 :    
738 :     public display_full_top_stats_menu(id, toptype, is_page2)
739 :     {
740 :     full_top_stats_selected_type[id] = toptype;
741 :     new i, menuselectview[41], FullTopMenu, menuselect_num, s_menuselect_num[5];
742 :    
743 :     if( toptype == 2 )
744 :     {
745 :     FullTopMenu = menu_create("\yFull cj top stats", "FullTopMenu_Select", 0);
746 :     //menu_setprop(FullTopMenu, MPROP_NUMBER_COLOR, "\r");
747 :     for( i = INFO_ZERO ; i < 10; i++ )
748 :     {
749 :     if( cj_distance[i] )
750 :     {
751 :     menuselect_num += 1;
752 :     num_to_str(menuselect_num, s_menuselect_num, 4);
753 :     format( view_names[id][i], 32, cj_names[i] );
754 :     view_distance[id][i] = cj_distance[i];
755 :     view_maxspeed[id][i] = cj_maxspeed[i];
756 :     view_prestrafe[id][i] = cj_prestrafe[i];
757 :     view_strafes[id][i] = cj_strafes[i];
758 :     view_sync[id][i] = cj_sync[i];
759 :     view_type[id][i] = "";
760 :     format( menuselectview, 40, "\y%d. \w%s \r%d", (i+1), view_names[id][i], (view_distance[id][i]/1000000) );
761 :     menu_additem(FullTopMenu, menuselectview, s_menuselect_num, 0, -1);
762 :     }
763 :     else
764 :     {
765 :     view_names[id][i] = "";
766 :     view_distance[id][i] = 0;
767 :     view_maxspeed[id][i] = 0;
768 :     view_prestrafe[id][i] = 0;
769 :     view_strafes[id][i] = 0;
770 :     view_sync[id][i] = 0;
771 :     view_type[id][i] = "";
772 :     }
773 :     }
774 :     }
775 :     else if( toptype )
776 :     {
777 :     FullTopMenu = menu_create("\yFull lj top stats", "FullTopMenu_Select", 0);
778 :     //menu_setprop(FullTopMenu, MPROP_NUMBER_COLOR, "\r");
779 :     for( i = INFO_ZERO ; i < 10; i++ )
780 :     {
781 :     if( lj_distance[i] )
782 :     {
783 :     menuselect_num += 1;
784 :     num_to_str(menuselect_num, s_menuselect_num, 4);
785 :     format( view_names[id][i], 32, lj_names[i] );
786 :     view_distance[id][i] = lj_distance[i];
787 :     view_maxspeed[id][i] = lj_maxspeed[i];
788 :     view_prestrafe[id][i] = lj_prestrafe[i];
789 :     view_strafes[id][i] = lj_strafes[i];
790 :     view_sync[id][i] = lj_sync[i];
791 :     view_type[id][i] = "";
792 :     format( menuselectview, 40, "\y%d. \w%s \r%d", (i+1), view_names[id][i], (view_distance[id][i]/1000000) );
793 :     menu_additem(FullTopMenu, menuselectview, s_menuselect_num, 0, -1);
794 :     }
795 :     else
796 :     {
797 :     view_names[id][i] = "";
798 :     view_distance[id][i] = 0;
799 :     view_maxspeed[id][i] = 0;
800 :     view_prestrafe[id][i] = 0;
801 :     view_strafes[id][i] = 0;
802 :     view_sync[id][i] = 0;
803 :     view_type[id][i] = "";
804 :     }
805 :     }
806 :     }
807 :     else
808 :     {
809 :     FullTopMenu = menu_create("\yFull total top stats", "FullTopMenu_Select", 0);
810 :     //menu_setprop(FullTopMenu, MPROP_NUMBER_COLOR, "\r");
811 :     for( i = INFO_ZERO ; i < 10; i++ )
812 :     {
813 :     if( top_distance[i] )
814 :     {
815 :     menuselect_num += 1;
816 :     num_to_str(menuselect_num, s_menuselect_num, 4);
817 :     format( view_names[id][i], 32, top_names[i] );
818 :     view_distance[id][i] = top_distance[i];
819 :     view_maxspeed[id][i] = top_maxspeed[i];
820 :     view_prestrafe[id][i] = top_prestrafe[i];
821 :     view_strafes[id][i] = top_strafes[i];
822 :     view_sync[id][i] = top_sync[i];
823 :     format( view_type[id][i], 4, top_type[i] );
824 :     format( menuselectview, 40, "\y%d. \w%s \r%d \d%s", (i+1), view_names[id][i], (view_distance[id][i]/1000000), view_type[id][i] );
825 :     menu_additem(FullTopMenu, menuselectview, s_menuselect_num, 0, -1);
826 :     }
827 :     else
828 :     {
829 :     view_names[id][i] = "";
830 :     view_distance[id][i] = 0;
831 :     view_maxspeed[id][i] = 0;
832 :     view_prestrafe[id][i] = 0;
833 :     view_strafes[id][i] = 0;
834 :     view_sync[id][i] = 0;
835 :     view_type[id][i] = "";
836 :     }
837 :     }
838 :     }
839 :     menu_display(id, FullTopMenu, is_page2);
840 :     }
841 :    
842 :     public FullTopMenu_Select(id, menu, item)
843 :     {
844 :     if( item == MENU_EXIT )
845 :     menu_destroy(menu);
846 :     else
847 :     {
848 :     new keycmd[3], menuselected_view[41], menuselectview[41], _access, callback, target, jumpschanged, i;
849 :     menu_item_getinfo(menu, item, _access, keycmd, 2, menuselected_view, 40, callback);
850 :    
851 :     for( i = INFO_ZERO ; i < 10; i++ )
852 :     {
853 :     if( !view_distance[id][i] )
854 :     break;
855 :    
856 :     if( full_top_stats_selected_type[id] )
857 :     format( menuselectview, 40, "\y%d. \w%s \r%d", (i+1), view_names[id][i], (view_distance[id][i]/1000000) );
858 :     else
859 :     format( menuselectview, 40, "\y%d. \w%s \r%d \d%s", (i+1), view_names[id][i], (view_distance[id][i]/1000000), view_type[id][i] );
860 :    
861 :     if( equal(menuselected_view, menuselectview) )
862 :     {
863 :     target = i;
864 :     }
865 :    
866 :     if( full_top_stats_selected_type[id] == 2 && i < 7 )
867 :     {
868 :     if( !equal(view_names[id][i], cj_names[i])
869 :     || view_distance[id][i] != cj_distance[i]
870 :     || view_maxspeed[id][i] != cj_maxspeed[i]
871 :     || view_prestrafe[id][i] != cj_prestrafe[i]
872 :     || view_strafes[id][i] != cj_strafes[i]
873 :     || view_sync[id][i] != cj_sync[i] )
874 :     jumpschanged = INFO_ONE;
875 :     }
876 :     else if( full_top_stats_selected_type[id] && i < 7 )
877 :     {
878 :     if( !equal(view_names[id][i], lj_names[i])
879 :     || view_distance[id][i] != lj_distance[i]
880 :     || view_maxspeed[id][i] != lj_maxspeed[i]
881 :     || view_prestrafe[id][i] != lj_prestrafe[i]
882 :     || view_strafes[id][i] != lj_strafes[i]
883 :     || view_sync[id][i] != lj_sync[i] )
884 :     jumpschanged = INFO_ONE;
885 :     }
886 :     else if( i < 7 )
887 :     {
888 :     if( !equal(view_names[id][i], top_names[i])
889 :     || view_distance[id][i] != top_distance[i]
890 :     || view_maxspeed[id][i] != top_maxspeed[i]
891 :     || view_prestrafe[id][i] != top_prestrafe[i]
892 :     || view_strafes[id][i] != top_strafes[i]
893 :     || view_sync[id][i] != top_sync[i]
894 :     || !equal(view_type[id][i], top_type[i]) )
895 :     jumpschanged = INFO_ONE;
896 :     }
897 :    
898 :     }
899 :     menu_destroy(menu);
900 :     if( get_cvar_num("kz_ljs_enabled") && (get_cvar_num("kz_lj_top") == 2 || get_cvar_num("kz_lj_top") == 3) )
901 :     {
902 :     show_player_stats(id, target, full_top_stats_selected_type[id]);
903 :     if( full_top_stats_selected_type[id] == 2 )
904 :     view_distance[id][7] = cj_distance[7];
905 :     else if( full_top_stats_selected_type[id] )
906 :     view_distance[id][7] = lj_distance[7];
907 :     else
908 :     view_distance[id][7] = top_distance[7];
909 :     if( (full_top_stats_selected_type[id] == 2 && cj_distance[0])
910 :     || (full_top_stats_selected_type[id] && lj_distance[0])
911 :     || (!full_top_stats_selected_type[id] && top_distance[0]) )
912 :     {
913 :     if( str_to_num(keycmd) > 7 && view_distance[id][7] && !jumpschanged )
914 :     display_full_top_stats_menu(id, full_top_stats_selected_type[id], 1);
915 :     else
916 :     display_full_top_stats_menu(id, full_top_stats_selected_type[id], 0);
917 :     }
918 :     }
919 :     }
920 :     }
921 :    
922 :     public show_player_stats(id, target, toptype)
923 :     {
924 :     new buffer[2368], name[32], len, motdname[64];
925 :     if( toptype == 2 )
926 :     format(motdname, 63, "%s's cj", view_names[id][target]);
927 :     else if( toptype )
928 :     format(motdname, 63, "%s's lj", view_names[id][target]);
929 :     else
930 :     format(motdname, 63, "%s's jump", view_names[id][target]);
931 :    
932 :     len = format(buffer, 2367, "<body bgcolor=#94AEC6><table width=100%% cellpadding=2 cellspacing=0 border=0>");
933 :     len += format(buffer[len], 2367-len, "<tr align=left bgcolor=#52697B><th width=50%%> Info name <th width=50%% align=left> Value");
934 :    
935 :     format(name, 31, "%s", view_names[id][target]);
936 :     while( containi(name, "<") != -1 )
937 :     replace(name, 63, "<", "&lt;");
938 :     while( containi(name, ">") != -1 )
939 :     replace(name, 63, ">", "&gt;");
940 :    
941 :     if( toptype == 2 )
942 :     len += format(buffer[len], 2367-len, "<tr align=left bgcolor=#A4BED6><td> Top type: <td align=left> CountJump top");
943 :     else if( toptype == 1 )
944 :     len += format(buffer[len], 2367-len, "<tr align=left bgcolor=#A4BED6><td> Top type: <td align=left> LongJump top");
945 :     else
946 :     len += format(buffer[len], 2367-len, "<tr align=left bgcolor=#A4BED6><td> Top type: <td align=left> Total top");
947 :    
948 :     len += format(buffer[len], 2367-len, "<tr align=left><td> Position: <td align=left> #%d", (target+1));
949 :     len += format(buffer[len], 2367-len, "<tr align=left bgcolor=#A4BED6><td> Name: <td align=left> %s", name);
950 :     len += format(buffer[len], 2367-len, "<tr align=left><td> Distance: <td align=left> %d.%06d", (view_distance[id][target]/1000000), (view_distance[id][target]%1000000));
951 :     len += format(buffer[len], 2367-len, "<tr align=left bgcolor=#A4BED6><td> TopSpeed: <td align=left> %d.%06d", (view_maxspeed[id][target]/1000000), (view_maxspeed[id][target]%1000000));
952 :     len += format(buffer[len], 2367-len, "<tr align=left><td> PreStrafe: <td align=left> %d.%06d", (view_prestrafe[id][target]/1000000), (view_prestrafe[id][target]%1000000));
953 :     len += format(buffer[len], 2367-len, "<tr align=left bgcolor=#A4BED6><td> Strafes: <td align=left> %d", view_strafes[id][target]);
954 :     len += format(buffer[len], 2367-len, "<tr align=left><td> Sync: <td align=left> %d", view_sync[id][target]);
955 :    
956 :     if( !toptype )
957 :     len += format(buffer[len], 2367-len, "<tr align=left bgcolor=#A4BED6><td> Jump Type: <td align=left> %s", (equal(view_type[id][target], "cj")) ? "CountJump" : "LongJump");
958 :    
959 :     len += format(buffer[len], 2367-len, "</table></body>");
960 :    
961 :     show_motd(id, buffer, motdname);
962 :     }
963 :    
964 :     public cmdLjsMenu(id)
965 :     {
966 :     new plugin_cvar = get_cvar_num("kz_ljs_enabled");
967 :     new ljtop_cvar = get_cvar_num("kz_lj_top");
968 :     new LjsMenu = menu_create("\yLongJump Stats Menu", "LjsMenu_Select", 0);
969 :     if( !plugin_cvar )
970 :     {
971 :     menu_additem(LjsMenu, "\dSwitch colorchat (plugin off)", "1", 0, -1);
972 :     menu_additem(LjsMenu, "\dSwitch ljstats (plugin off)", "2", 0, -1);
973 :     menu_additem(LjsMenu, "\dSwitch speed (plugin off)^n", "3", 0, -1);
974 :     menu_additem(LjsMenu, "\dView tops (plugin off)^n", "4", 0, -1);
975 :     menuselect_allowed[id][1] = false;
976 :     menuselect_allowed[id][2] = false;
977 :     menuselect_allowed[id][3] = false;
978 :     menuselect_allowed[id][4] = false;
979 :     }
980 :     //menu_setprop(LjsMenu, MPROP_NUMBER_COLOR, "\r");
981 :     if( plugin_cvar )
982 :     {
983 :     menu_additem(LjsMenu, "\wSwitch colorchat", "1", 0, -1);
984 :     menu_additem(LjsMenu, "\wSwitch ljstats", "2", 0, -1);
985 :     menu_additem(LjsMenu, "\wSwitch speed^n", "3", 0, -1);
986 :     menuselect_allowed[id][1] = true;
987 :     menuselect_allowed[id][2] = true;
988 :     menuselect_allowed[id][3] = true;
989 :     if( (ljtop_cvar == 2 || ljtop_cvar == 3) && top_distance[0] )
990 :     {
991 :     menu_additem(LjsMenu, "\wView tops^n", "4", 0, -1);
992 :     menuselect_allowed[id][4] = true;
993 :     }
994 :     else
995 :     {
996 :     if( !top_distance[0] )
997 :     menu_additem(LjsMenu, "\dView tops (no jumps)^n", "4", 0, -1);
998 :     else
999 :     menu_additem(LjsMenu, "\dView tops (disabled)^n", "4", 0, -1);
1000 :     menuselect_allowed[id][4] = false;
1001 :     }
1002 :     }
1003 :    
1004 :     new flags = get_user_flags(id);
1005 :     if( flags&ADMIN_MENU && (flags&ADMIN_RCON || flags&ADMIN_CVAR) )
1006 :     menu_additem(LjsMenu, "\wPrint plugin info^n^n^n\rAdmin menu^n", "5", 0, -1);
1007 :     else
1008 :     menu_additem(LjsMenu, "\wPrint plugin info^n", "5", 0, -1);
1009 :    
1010 :     if( flags&ADMIN_RCON && flags&ADMIN_MENU )
1011 :     {
1012 :     if( flags&ADMIN_CVAR )
1013 :     {
1014 :     menu_additem(LjsMenu, "\yServer configurations", "6", 0, -1);
1015 :     menu_additem(LjsMenu, "\yOne map config^n", "7", 0, -1);
1016 :     }
1017 :     else
1018 :     menu_additem(LjsMenu, "\yServer configurations^n", "6", 0, -1);
1019 :     }
1020 :     else if( flags&ADMIN_CVAR && flags&ADMIN_MENU )
1021 :     {
1022 :     menu_additem(LjsMenu, "\yOne map config^n", "7", 0, -1);
1023 :     }
1024 :    
1025 :     menu_display(id, LjsMenu, 0);
1026 :     }
1027 :    
1028 :     public LjsMenu_Select(id, menu, item)
1029 :     {
1030 :     if( item == MENU_EXIT )
1031 :     menu_destroy(menu);
1032 :     else
1033 :     {
1034 :     new keycmd[3], _access, callback;
1035 :     menu_item_getinfo(menu, item, _access, keycmd, 2, "", 0, callback);
1036 :     menu_destroy(menu);
1037 :     switch(str_to_num(keycmd))
1038 :     {
1039 :     case 1:
1040 :     {
1041 :     if( menuselect_allowed[id][1] && get_cvar_num("kz_ljs_enabled") )
1042 :     cmdColorChat(id);
1043 :     cmdLjsMenu(id);
1044 :     }
1045 :     case 2:
1046 :     {
1047 :     if( menuselect_allowed[id][2] && get_cvar_num("kz_ljs_enabled") )
1048 :     cmdLjStats(id);
1049 :     cmdLjsMenu(id);
1050 :     }
1051 :     case 3:
1052 :     {
1053 :     if( menuselect_allowed[id][3] && get_cvar_num("kz_ljs_enabled") )
1054 :     cmdSpeed(id);
1055 :     cmdLjsMenu(id);
1056 :     }
1057 :     case 4:
1058 :     {
1059 :     if( menuselect_allowed[id][4] )
1060 :     {
1061 :     if( get_cvar_num("kz_ljs_enabled") )
1062 :     cmdTopMenu(id);
1063 :     }
1064 :     else
1065 :     cmdLjsMenu(id);
1066 :     }
1067 :     case 5: cmdVersion(id);
1068 :     case 6: ColorChat(id, RED, "[XJ] Comming soon!");
1069 :     case 7: ColorChat(id, BLUE, "[XJ] Comming soon!");
1070 :     }
1071 :     }
1072 :     }
1073 :    
1074 :     public read_tops()
1075 :     {
1076 :     static dataDir[64];
1077 :     get_datadir(dataDir, 63);
1078 :    
1079 :     static test_filename[128], main_filename[128], lj_filename[128], cj_filename[128], version_info[32];
1080 :     format(version_info, 31, "Your current version is: %s", gVERSION);
1081 :     format(test_filename, 127, "%s/ljtops/folder_test.txt", dataDir);
1082 :     format(main_filename, 127, "%s/ljtops/MainTop10.txt", dataDir);
1083 :     format(lj_filename, 127, "%s/ljtops/LjTop10.txt", dataDir);
1084 :     format(cj_filename, 127, "%s/ljtops/CjTop10.txt", dataDir);
1085 :     if( file_exists(test_filename) )
1086 :     delete_file(test_filename);
1087 :    
1088 :     write_file(test_filename, "Testing folder presence...");
1089 :     if( file_exists(test_filename) )
1090 :     {
1091 :     delete_file(test_filename);
1092 :     write_file(test_filename, ".-==========================================-.");
1093 :     write_file(test_filename, "|~~ Long Jump Stats - eXtreme Modification ~~|");
1094 :     write_file(test_filename, ".-==========================================-.");
1095 :     write_file(test_filename, "");
1096 :     write_file(test_filename, "This file is created in order to test");
1097 :     write_file(test_filename, "folder presence for tops to save.");
1098 :     write_file(test_filename, "");
1099 :     write_file(test_filename, version_info);
1100 :     write_file(test_filename, "");
1101 :     write_file(test_filename, "You can:");
1102 :     write_file(test_filename, "download it/check 4 updates/report bugs/");
1103 :     write_file(test_filename, "suggest smt/discuss it");
1104 :     write_file(test_filename, "at:");
1105 :     write_file(test_filename, "http://xtreme-jumps.eu/forum_viewtopic.php?46.52082.0");
1106 :     }
1107 :     else
1108 :     {
1109 :     tops_save = false;
1110 :     log_amx("LjS: Error: File <^"%s^"> not found! Disabeling tops save.", test_filename);
1111 :     return PLUGIN_HANDLED;
1112 :     }
1113 :    
1114 :     static distance[12], maxspeed[12], prestrafe[12], strafes[6], sync[6], line = 0, txtsize = 0, i;
1115 :     if( file_exists(main_filename) )
1116 :     {
1117 :     for( i = INFO_ZERO ; i < 10; i++ )
1118 :     {
1119 :     if( (line=read_file(main_filename,line,top_names[i],32,txtsize))!=0 )
1120 :     {
1121 :     if( (line=read_file(main_filename,line,top_authid[i],32,txtsize))!=0 )
1122 :     {
1123 :     if( (line=read_file(main_filename,line,distance,11,txtsize))!=0 )
1124 :     {
1125 :     if( (line=read_file(main_filename,line,maxspeed,11,txtsize))!=0 )
1126 :     {
1127 :     if( (line=read_file(main_filename,line,prestrafe,11,txtsize))!=0 )
1128 :     {
1129 :     if( (line=read_file(main_filename,line,strafes,5,txtsize))!=0 )
1130 :     {
1131 :     if( (line=read_file(main_filename,line,sync,5,txtsize))!=0 )
1132 :     {
1133 :     if( (line=read_file(main_filename,line,top_type[i],4,txtsize))!=0 )
1134 :     {
1135 :     top_distance[i] = str_to_num( distance );
1136 :     top_maxspeed[i] = str_to_num( maxspeed );
1137 :     top_prestrafe[i] = str_to_num( prestrafe );
1138 :     top_strafes[i] = str_to_num( strafes );
1139 :     top_sync[i] = str_to_num( sync );
1140 :     }
1141 :     }
1142 :     }
1143 :     }
1144 :     }
1145 :     }
1146 :     }
1147 :     }
1148 :     else
1149 :     break;
1150 :     }
1151 :     }
1152 :    
1153 :     line = 0;
1154 :     if( file_exists(lj_filename) )
1155 :     {
1156 :     for( i = INFO_ZERO ; i < 10; i++ )
1157 :     {
1158 :     if( (line=read_file(lj_filename,line,lj_names[i],32,txtsize))!=0 )
1159 :     {
1160 :     if( (line=read_file(lj_filename,line,lj_authid[i],32,txtsize))!=0 )
1161 :     {
1162 :     if( (line=read_file(lj_filename,line,distance,11,txtsize))!=0 )
1163 :     {
1164 :     if( (line=read_file(lj_filename,line,maxspeed,11,txtsize))!=0 )
1165 :     {
1166 :     if( (line=read_file(lj_filename,line,prestrafe,11,txtsize))!=0 )
1167 :     {
1168 :     if( (line=read_file(lj_filename,line,strafes,5,txtsize))!=0 )
1169 :     {
1170 :     if( (line=read_file(lj_filename,line,sync,5,txtsize))!=0 )
1171 :     {
1172 :     lj_distance[i] = str_to_num( distance );
1173 :     lj_maxspeed[i] = str_to_num( maxspeed );
1174 :     lj_prestrafe[i] = str_to_num( prestrafe );
1175 :     lj_strafes[i] = str_to_num( strafes );
1176 :     lj_sync[i] = str_to_num( sync );
1177 :     }
1178 :     }
1179 :     }
1180 :     }
1181 :     }
1182 :     }
1183 :     }
1184 :     else
1185 :     break;
1186 :     }
1187 :     }
1188 :    
1189 :     line = 0;
1190 :     if( file_exists(cj_filename) )
1191 :     {
1192 :     for( i = INFO_ZERO ; i < 10; i++ )
1193 :     {
1194 :     if( (line=read_file(cj_filename,line,cj_names[i],32,txtsize))!=0 )
1195 :     {
1196 :     if( (line=read_file(cj_filename,line,cj_authid[i],32,txtsize))!=0 )
1197 :     {
1198 :     if( (line=read_file(cj_filename,line,distance,11,txtsize))!=0 )
1199 :     {
1200 :     if( (line=read_file(cj_filename,line,maxspeed,11,txtsize))!=0 )
1201 :     {
1202 :     if( (line=read_file(cj_filename,line,prestrafe,11,txtsize))!=0 )
1203 :     {
1204 :     if( (line=read_file(cj_filename,line,strafes,5,txtsize))!=0 )
1205 :     {
1206 :     if( (line=read_file(cj_filename,line,sync,5,txtsize))!=0 )
1207 :     {
1208 :     cj_distance[i] = str_to_num( distance );
1209 :     cj_maxspeed[i] = str_to_num( maxspeed );
1210 :     cj_prestrafe[i] = str_to_num( prestrafe );
1211 :     cj_strafes[i] = str_to_num( strafes );
1212 :     cj_sync[i] = str_to_num( sync );
1213 :     }
1214 :     }
1215 :     }
1216 :     }
1217 :     }
1218 :     }
1219 :     }
1220 :     else
1221 :     break;
1222 :     }
1223 :     }
1224 :     return PLUGIN_HANDLED;
1225 :     }
1226 :    
1227 :     public topreset(id)
1228 :     {
1229 :     if( id == (is_dedicated_server()?0:1) || (get_user_flags(id)&ADMIN_RCON && tops_save) || (get_user_flags(id)&ADMIN_MAP && !tops_save) )
1230 :     {
1231 :     static dataDir[64];
1232 :     get_datadir(dataDir, 63);
1233 :    
1234 :     static main_filename[128], lj_filename[128], cj_filename[128];
1235 :     format(main_filename, 127, "%s/ljtops/MainTop10.txt", dataDir);
1236 :     format(lj_filename, 127, "%s/ljtops/LjTop10.txt", dataDir);
1237 :     format(cj_filename, 127, "%s/ljtops/CjTop10.txt", dataDir);
1238 :    
1239 :     if( file_exists(main_filename) && tops_save )
1240 :     delete_file(main_filename);
1241 :     if( file_exists(lj_filename) && tops_save )
1242 :     delete_file(lj_filename);
1243 :     if( file_exists(cj_filename) && tops_save )
1244 :     delete_file(cj_filename);
1245 :    
1246 :     static info_none[33], i;
1247 :     info_none = "";
1248 :     for( i = INFO_ZERO; i < 10; i++ )
1249 :     {
1250 :     format( top_names[i], 32, info_none );
1251 :     format( top_authid[i], 32, info_none );
1252 :     top_distance[i] = INFO_ZERO;
1253 :     top_maxspeed[i] = INFO_ZERO;
1254 :     top_prestrafe[i] = INFO_ZERO;
1255 :     top_strafes[i] = INFO_ZERO;
1256 :     top_sync[i] = INFO_ZERO;
1257 :     format( top_type[i], 32, info_none );
1258 :    
1259 :     format( lj_names[i], 32, info_none );
1260 :     format( lj_authid[i], 32, info_none );
1261 :     lj_distance[i] = INFO_ZERO;
1262 :     lj_maxspeed[i] = INFO_ZERO;
1263 :     lj_prestrafe[i] = INFO_ZERO;
1264 :     lj_strafes[i] = INFO_ZERO;
1265 :     lj_sync[i] = INFO_ZERO;
1266 :    
1267 :     format( cj_names[i], 32, info_none );
1268 :     format( cj_authid[i], 32, info_none );
1269 :     cj_distance[i] = INFO_ZERO;
1270 :     cj_maxspeed[i] = INFO_ZERO;
1271 :     cj_prestrafe[i] = INFO_ZERO;
1272 :     cj_strafes[i] = INFO_ZERO;
1273 :     cj_sync[i] = INFO_ZERO;
1274 :     }
1275 :    
1276 :     static name[32], authid[32];
1277 :     name = "";
1278 :     authid = "";
1279 :     get_user_name( id, name, 31 );
1280 :     if( get_cvar_num("kz_ljs_rank_by") == 1 )
1281 :     get_user_authid( id, authid ,31 );
1282 :     else
1283 :     get_user_ip( id, authid, 31, 1);
1284 :    
1285 :     log_amx("LjS: ^"%s<%d><%s>^" reseted ljtop", name, get_user_userid(id), authid);
1286 :    
1287 :     console_print(id, "[XJ] LongJump top and rec reseted!");
1288 :     client_print(0, print_chat, "[XJ] LongJump top and rec reseted!");
1289 :     }
1290 :     else
1291 :     console_print(id, "%L", id, "NO_ACC_COM");
1292 :     return PLUGIN_HANDLED;
1293 :     }
1294 :    
1295 :     public check_maintop(id, Distance, MaxAirSpeed, MaxGroundSpeed, strafes, sync, type)
1296 :     {
1297 :     static jumptype[5], editional_top_n, top_num, rankby;
1298 :     top_num = 0;
1299 :     rankby = get_cvar_num("kz_ljs_rank_by");
1300 :    
1301 :     static name[32], authid[32];
1302 :     get_user_name( id, name, 31 );
1303 :     if( rankby == 1 )
1304 :     get_user_authid(id, authid ,31);
1305 :     else if( rankby == 2 )
1306 :     get_user_ip(id, authid, 31, 1);
1307 :     else
1308 :     get_user_name(id, authid, 31);
1309 :    
1310 :     if( type )
1311 :     {
1312 :     editional_top_n = check_cjtop(id, Distance, MaxAirSpeed, MaxGroundSpeed, strafes, sync, rankby);
1313 :     jumptype = "cj";
1314 :     }
1315 :     else
1316 :     {
1317 :     editional_top_n = check_ljtop(id, Distance, MaxAirSpeed, MaxGroundSpeed, strafes, sync, rankby);
1318 :     jumptype = "lj";
1319 :     }
1320 :    
1321 :     if( Distance > top_distance[9] || (Distance == top_distance[9] && equal(top_type[9], "cj") && equal(jumptype, "lj")) )
1322 :     {
1323 :     static i;
1324 :     for( i = INFO_ZERO; i < 10; i++ )
1325 :     {
1326 :     if( Distance > top_distance[i] || (Distance == top_distance[i] && equal(top_type[i], "cj") && equal(jumptype, "lj")) )
1327 :     {
1328 :     static pos, j;
1329 :     pos = i;
1330 :     j = 0;
1331 :     while( !equal( top_authid[pos], authid ) && pos < 9 )
1332 :     pos++ ;
1333 :     for( j = pos; j > i; j-- )
1334 :     {
1335 :     format( top_names[j], 32, top_names[j-1] );
1336 :     format( top_authid[j], 32, top_authid[j-1] );
1337 :     top_distance[j] = top_distance[j-1];
1338 :     top_maxspeed[j] = top_maxspeed[j-1];
1339 :     top_prestrafe[j] = top_prestrafe[j-1];
1340 :     top_strafes[j] = top_strafes[j-1];
1341 :     top_sync[j] = top_sync[j-1];
1342 :     format( top_type[j], 4, top_type[j-1] );
1343 :     }
1344 :    
1345 :     format( top_names[i], 32, name );
1346 :     format( top_authid[i], 32, authid );
1347 :     top_distance[i] = Distance;
1348 :     top_maxspeed[i] = MaxAirSpeed;
1349 :     top_prestrafe[i] = MaxGroundSpeed;
1350 :     top_strafes[i] = strafes;
1351 :     top_sync[i] = sync;
1352 :     format( top_type[i], 4, jumptype );
1353 :     top_num = i+1;
1354 :    
1355 :     break;
1356 :     }
1357 :     else if( equal( top_authid[i], authid ) )
1358 :     break;
1359 :     }
1360 :     if( editional_top_n && (get_cvar_num("kz_lj_top") == 2 || get_cvar_num("kz_lj_top") == 3) )
1361 :     {
1362 :     if( top_num )
1363 :     {
1364 :     if( top_num == editional_top_n )
1365 :     client_print(0, print_chat, "[XJ] %s now is %d in total & %s top with %d.%03d jump!", name, top_num, jumptype, (Distance/1000000), (Distance%1000000/1000), jumptype);
1366 :     else
1367 :     client_print(0, print_chat, "[XJ] %s now is %d in total top & %d in %s top with %d jump!", name, top_num, editional_top_n, jumptype, (Distance/1000000), jumptype);
1368 :     }
1369 :     else
1370 :     client_print(0, print_chat, "[XJ] %s now is %d in %s top with %d.%06d jump!", name, editional_top_n, jumptype, (Distance/1000000), (Distance%1000000), jumptype);
1371 :     }
1372 :    
1373 :     if( tops_save && editional_top_n)
1374 :     save_tops();
1375 :     }
1376 :     }
1377 :    
1378 :     public check_cjtop(id, Distance, MaxAirSpeed, MaxGroundSpeed, strafes, sync, rankby)
1379 :     {
1380 :     static name[32], authid[32];
1381 :     get_user_name( id, name, 31 );
1382 :     if( rankby == 1 )
1383 :     get_user_authid(id, authid ,31);
1384 :     else if( rankby == 2 )
1385 :     get_user_ip(id, authid, 31, 1);
1386 :     else
1387 :     get_user_name(id, authid, 31);
1388 :    
1389 :     if( Distance > cj_distance[9] )
1390 :     {
1391 :     static i;
1392 :     for( i = INFO_ZERO; i < 10; i++ )
1393 :     {
1394 :     if( Distance > cj_distance[i] )
1395 :     {
1396 :     static pos, j;
1397 :     pos = i;
1398 :     j = 0;
1399 :     while( !equal( cj_authid[pos], authid ) && pos < 9 )
1400 :     pos++ ;
1401 :     for( j = pos; j > i; j-- )
1402 :     {
1403 :     format( cj_names[j], 32, cj_names[j-1] );
1404 :     format( cj_authid[j], 32, cj_authid[j-1] );
1405 :     cj_distance[j] = cj_distance[j-1];
1406 :     cj_maxspeed[j] = cj_maxspeed[j-1];
1407 :     cj_prestrafe[j] = cj_prestrafe[j-1];
1408 :     cj_strafes[j] = cj_strafes[j-1];
1409 :     cj_sync[j] = cj_sync[j-1];
1410 :     }
1411 :    
1412 :     format( cj_names[i], 32, name );
1413 :     format( cj_authid[i], 32, authid );
1414 :     cj_distance[i] = Distance;
1415 :     cj_maxspeed[i] = MaxAirSpeed;
1416 :     cj_prestrafe[i] = MaxGroundSpeed;
1417 :     cj_strafes[i] = strafes;
1418 :     cj_sync[i] = sync;
1419 :     return (i+1);
1420 :    
1421 :     }
1422 :     else if( equal( cj_authid[i], authid ) )
1423 :     return 0;
1424 :     }
1425 :     }
1426 :     return 0;
1427 :     }
1428 :    
1429 :     public check_ljtop(id, Distance, MaxAirSpeed, MaxGroundSpeed, strafes, sync, rankby)
1430 :     {
1431 :     static name[32], authid[32];
1432 :     get_user_name( id, name, 31 );
1433 :     if( rankby == 1 )
1434 :     get_user_authid(id, authid ,31);
1435 :     else if( rankby == 2 )
1436 :     get_user_ip(id, authid, 31, 1);
1437 :     else
1438 :     get_user_name(id, authid, 31);
1439 :    
1440 :     if( Distance > lj_distance[9] )
1441 :     {
1442 :     static i;
1443 :     for( i = INFO_ZERO; i < 10; i++ )
1444 :     {
1445 :     if( Distance > lj_distance[i] )
1446 :     {
1447 :     static pos, j;
1448 :     pos = i;
1449 :     j = 0;
1450 :     while( !equal( lj_authid[pos], authid ) && pos < 9 )
1451 :     pos++ ;
1452 :     for( j = pos; j > i; j-- )
1453 :     {
1454 :     format( lj_names[j], 32, lj_names[j-1] );
1455 :     format( lj_authid[j], 32, lj_authid[j-1] );
1456 :     lj_distance[j] = lj_distance[j-1];
1457 :     lj_maxspeed[j] = lj_maxspeed[j-1];
1458 :     lj_prestrafe[j] = lj_prestrafe[j-1];
1459 :     lj_strafes[j] = lj_strafes[j-1];
1460 :     lj_sync[j] = lj_sync[j-1];
1461 :     }
1462 :    
1463 :     format( lj_names[i], 32, name );
1464 :     format( lj_authid[i], 32, authid );
1465 :     lj_distance[i] = Distance;
1466 :     lj_maxspeed[i] = MaxAirSpeed;
1467 :     lj_prestrafe[i] = MaxGroundSpeed;
1468 :     lj_strafes[i] = strafes;
1469 :     lj_sync[i] = sync;
1470 :     return (i+1);
1471 :    
1472 :     }
1473 :     else if( equal( lj_authid[i], authid ) )
1474 :     return 0;
1475 :     }
1476 :     }
1477 :     return 0;
1478 :     }
1479 :    
1480 :     public save_tops()
1481 :     {
1482 :     static dataDir[64];
1483 :     get_datadir(dataDir, 63);
1484 :    
1485 :     static main_filename[128], lj_filename[128], cj_filename[128];
1486 :     format(main_filename, 127, "%s/ljtops/MainTop10.txt", dataDir);
1487 :     format(lj_filename, 127, "%s/ljtops/LjTop10.txt", dataDir);
1488 :     format(cj_filename, 127, "%s/ljtops/CjTop10.txt", dataDir);
1489 :    
1490 :     if( file_exists(main_filename) )
1491 :     delete_file(main_filename);
1492 :     if( file_exists(lj_filename) )
1493 :     delete_file(lj_filename);
1494 :     if( file_exists(cj_filename) )
1495 :     delete_file(cj_filename);
1496 :    
1497 :     static i, distance[12], maxspeed[12], prestrafe[12], strafes[6], sync[6];
1498 :     for( i = INFO_ZERO; i < 10; i++ )
1499 :     {
1500 :     if( top_distance[i] )
1501 :     {
1502 :     num_to_str(top_distance[i], distance, 11);
1503 :     num_to_str(top_maxspeed[i], maxspeed, 11);
1504 :     num_to_str(top_prestrafe[i], prestrafe, 11);
1505 :     num_to_str(top_strafes[i], strafes, 5);
1506 :     num_to_str(top_sync[i], sync, 5);
1507 :     write_file(main_filename, top_names[i]);
1508 :     write_file(main_filename, top_authid[i]);
1509 :     write_file(main_filename, distance);
1510 :     write_file(main_filename, maxspeed);
1511 :     write_file(main_filename, prestrafe);
1512 :     write_file(main_filename, strafes);
1513 :     write_file(main_filename, sync);
1514 :     write_file(main_filename, top_type[i]);
1515 :     }
1516 :     if( lj_distance[i] )
1517 :     {
1518 :     num_to_str(lj_distance[i], distance, 11);
1519 :     num_to_str(lj_maxspeed[i], maxspeed, 11);
1520 :     num_to_str(lj_prestrafe[i], prestrafe, 11);
1521 :     num_to_str(lj_strafes[i], strafes, 5);
1522 :     num_to_str(lj_sync[i], sync, 5);
1523 :     write_file(lj_filename, lj_names[i]);
1524 :     write_file(lj_filename, lj_authid[i]);
1525 :     write_file(lj_filename, distance);
1526 :     write_file(lj_filename, maxspeed);
1527 :     write_file(lj_filename, prestrafe);
1528 :     write_file(lj_filename, strafes);
1529 :     write_file(lj_filename, sync);
1530 :     }
1531 :     if( cj_distance[i] )
1532 :     {
1533 :     num_to_str(cj_distance[i], distance, 11);
1534 :     num_to_str(cj_maxspeed[i], maxspeed, 11);
1535 :     num_to_str(cj_prestrafe[i], prestrafe, 11);
1536 :     num_to_str(cj_strafes[i], strafes, 5);
1537 :     num_to_str(cj_sync[i], sync, 5);
1538 :     write_file(cj_filename, cj_names[i]);
1539 :     write_file(cj_filename, cj_authid[i]);
1540 :     write_file(cj_filename, distance);
1541 :     write_file(cj_filename, maxspeed);
1542 :     write_file(cj_filename, prestrafe);
1543 :     write_file(cj_filename, strafes);
1544 :     write_file(cj_filename, sync);
1545 :     }
1546 :     }
1547 :     }
1548 :    
1549 :     public show_leet_ljumper(id)
1550 :     {
1551 :     if( get_cvar_num("kz_ljs_enabled") && (get_cvar_num("kz_lj_top") == 2 || get_cvar_num("kz_lj_top") == 3) )
1552 :     {
1553 :     if( top_distance[0] )
1554 :     client_print(id, print_chat, "[XJ] %s has the %d.%06d %s record!", top_names[0], top_distance[0]/1000000, top_distance[0]%1000000, top_type[0]);
1555 :     else
1556 :     client_print(id, print_chat, "[XJ] LongJump record not setted!");
1557 :     }
1558 :     }
1559 :    
1560 :     public show_top(id, toptype)
1561 :     {
1562 :     static buffer[2368], name[64], len, i;
1563 :    
1564 :     len = format(buffer, 2367, "<body bgcolor=#94AEC6><table width=100%% cellpadding=2 cellspacing=0 border=0>");
1565 :     if( !toptype )
1566 :     len += format(buffer[len], 2367-len, "<tr align=center bgcolor=#52697B><th width=5%%> # <th width=34%% align=left> Name <th width=10%%> Distance <th width=10%%> MaxSpeed <th width=11%%> PreStrafe <th width=9%%> Strafes <th width=6%%> Sync <th width=10%%> Type");
1567 :     else
1568 :     len += format(buffer[len], 2367-len, "<tr align=center bgcolor=#52697B><th width=5%%> # <th width=34%% align=left> Name <th width=10%%> Distance <th width=10%%> MaxSpeed <th width=11%%> PreStrafe <th width=9%%> Strafes <th width=6%%> Sync");
1569 :    
1570 :     if( toptype == 2)
1571 :     {
1572 :     for( i = INFO_ZERO; i < 10; i++ )
1573 :     {
1574 :     if( cj_distance[i] == 0 )
1575 :     {
1576 :     len += format(buffer[len], 2367-len, "<tr align=center%s><td> %d <td align=left> %s <td> %s <td> %s <td> %s <td> %s <td> %s", ((i%2)==0) ? "" : " bgcolor=#A4BED6", (i+1), "-", "-", "-", "-", "-", "-");
1577 :     i=10;
1578 :     }
1579 :     else
1580 :     {
1581 :     name = cj_names[i];
1582 :     while( containi(name, "<") != -1 )
1583 :     replace(name, 63, "<", "&lt;");
1584 :     while( containi(name, ">") != -1 )
1585 :     replace(name, 63, ">", "&gt;");
1586 :     len += format(buffer[len], 2367-len, "<tr align=center%s><td> %d <td align=left> %s <td> %d.%01d <td> %d.%01d <td> %d.%01d <td> %d <td> %d", ((i%2)==0) ? "" : " bgcolor=#A4BED6", (i+1), name, (cj_distance[i]/1000000), (cj_distance[i]%1000000/100000), (cj_maxspeed[i]/1000000), (cj_maxspeed[i]%1000000/100000), (cj_prestrafe[i]/1000000), (cj_prestrafe[i]%1000000/100000), cj_strafes[i], cj_sync[i]);
1587 :     }
1588 :     }
1589 :     }
1590 :     else if( toptype )
1591 :     {
1592 :     for( i = INFO_ZERO; i < 10; i++ )
1593 :     {
1594 :     if( lj_distance[i] == 0 )
1595 :     {
1596 :     len += format(buffer[len], 2367-len, "<tr align=center%s><td> %d <td align=left> %s <td> %s <td> %s <td> %s <td> %s <td> %s", ((i%2)==0) ? "" : " bgcolor=#A4BED6", (i+1), "-", "-", "-", "-", "-", "-");
1597 :     i=10;
1598 :     }
1599 :     else
1600 :     {
1601 :     name = lj_names[i];
1602 :     while( containi(name, "<") != -1 )
1603 :     replace(name, 63, "<", "&lt;");
1604 :     while( containi(name, ">") != -1 )
1605 :     replace(name, 63, ">", "&gt;");
1606 :     len += format(buffer[len], 2367-len, "<tr align=center%s><td> %d <td align=left> %s <td> %d.%01d <td> %d.%01d <td> %d.%01d <td> %d <td> %d", ((i%2)==0) ? "" : " bgcolor=#A4BED6", (i+1), name, (lj_distance[i]/1000000), (lj_distance[i]%1000000/100000), (lj_maxspeed[i]/1000000), (lj_maxspeed[i]%1000000/100000), (lj_prestrafe[i]/1000000), (lj_prestrafe[i]%1000000/100000), lj_strafes[i], lj_sync[i]);
1607 :     }
1608 :     }
1609 :     }
1610 :     else
1611 :     {
1612 :     for( i = INFO_ZERO; i < 10; i++ )
1613 :     {
1614 :     if( top_distance[i] == 0 )
1615 :     {
1616 :     len += format(buffer[len], 2367-len, "<tr align=center%s><td> %d <td align=left> %s <td> %s <td> %s <td> %s <td> %s <td> %s <td> %s", ((i%2)==0) ? "" : " bgcolor=#A4BED6", (i+1), "-", "-", "-", "-", "-", "-", "-");
1617 :     i=10;
1618 :     }
1619 :     else
1620 :     {
1621 :     name = top_names[i];
1622 :     while( containi(name, "<") != -1 )
1623 :     replace(name, 63, "<", "&lt;");
1624 :     while( containi(name, ">") != -1 )
1625 :     replace(name, 63, ">", "&gt;");
1626 :     len += format(buffer[len], 2367-len, "<tr align=center%s><td> %d <td align=left> %s <td> %d <td> %d <td> %d <td> %d <td> %d <td> %s", ((i%2)==0) ? "" : " bgcolor=#A4BED6", (i+1), name, (top_distance[i]/1000000), (top_maxspeed[i]/1000000), (top_prestrafe[i]/1000000), top_strafes[i], top_sync[i], top_type[i]);
1627 :     }
1628 :     }
1629 :     }
1630 :    
1631 :     len += format(buffer[len], 2367-len, "</table></body>");
1632 :    
1633 :     if( toptype == 2)
1634 :     show_motd(id, buffer, "Top 10 CountJumps");
1635 :     else if( toptype )
1636 :     show_motd(id, buffer, "Top 10 LongJumps");
1637 :     else
1638 :     show_motd(id, buffer, "Top 10 Best Jumps");
1639 :     }
1640 :    
1641 :     public gocheck(id)
1642 :     {
1643 :     gInAir[id] = false;
1644 :     cjumped[id] = false;
1645 :     doubleducked[id] = false;
1646 :     }
1647 :    
1648 :     public ddend(id)
1649 :     doubleducked[id] = false;
1650 :    
1651 :     public testcjstart(id)
1652 :     cducked[id] = false;
1653 :    
1654 :     public client_putinserver(id)
1655 :     {
1656 :     static connectenabler[6], fastserver;
1657 :     fastserver = get_cvar_num("kz_ljs_fastserver");
1658 :     get_cvar_string("kz_ljs_connectenabler", connectenabler, 5);
1659 :     format(connectenabler, 5, "_%s", connectenabler);
1660 :     if( contain(connectenabler, "a") > 0 )
1661 :     gHasColorChat[id] = true;
1662 :     else
1663 :     gHasColorChat[id] = false;
1664 :     if( contain(connectenabler, "b") > 0 )
1665 :     gHasLjStats[id] = true;
1666 :     else
1667 :     gHasLjStats[id] = false;
1668 :     if( contain(connectenabler, "c") > 0 )
1669 :     {
1670 :     gHasSpeed[id] = true;
1671 :     if( fastserver == 1 )
1672 :     set_task(0.1, "tskSpeed", id+334490, "", 0, "b", 0);
1673 :     else if( !(fastserver == 2) )
1674 :     set_task(0.5, "tskSpeed", id+334490, "", 0, "b", 0);
1675 :     }
1676 :     else
1677 :     gHasSpeed[id] = false;
1678 :    
1679 :     if( fastserver == 2 )
1680 :     set_task(0.5, "tskFps", id+434490, "", 0, "b", 0);
1681 :     else
1682 :     set_task(1.0, "tskFps", id+434490, "", 0, "b", 0);
1683 :    
1684 :     turning_right[id] = false;
1685 :     turning_left[id] = false;
1686 :     straifing_aw[id] = false;
1687 :     straifing_sd[id] = false;
1688 :     cducked[id] = false;
1689 :     cjumped[id] = false;
1690 :     doubleducked[id]=false;
1691 :     induck[id] = false;
1692 :     OnGround[id] = false;
1693 :     }
1694 :    
1695 :     public client_disconnect(id)
1696 :     {
1697 :     gHasColorChat[id] = false;
1698 :     gHasLjStats[id] = false;
1699 :     gHasSpeed[id] = false;
1700 :     turning_right[id] = false;
1701 :     turning_left[id] = false;
1702 :     straifing_aw[id] = false;
1703 :     straifing_sd[id] = false;
1704 :     OnGround[id] = false;
1705 :     cducked[id] = false;
1706 :     doubleducked[id]=false;
1707 :     cjumped[id] = false;
1708 :     induck[id] = false;
1709 :    
1710 :     if( task_exists(id+334490, 0) )
1711 :     remove_task(id+334490, 0);
1712 :    
1713 :     if( task_exists(id+434490, 0) )
1714 :     remove_task(id+434490, 0);
1715 :     }
1716 :    
1717 :     public tskFps(id)
1718 :     {
1719 :     if( get_cvar_num("kz_legal_settings") && get_cvar_num("kz_ljs_enabled") )
1720 :     {
1721 :     id-=434490;
1722 :     client_cmd(id, "developer 0;fps_max 101");
1723 :     }
1724 :     }
1725 :    
1726 :     public cmdColorChat(id)
1727 :     {
1728 :     if( get_cvar_num("kz_ljs_enabled") && !gHasColorChat[id] )
1729 :     {
1730 :     gHasColorChat[id] = true;
1731 :     client_print(id, print_chat, "[XJ] ColorChat enabled. To disable, type /colorchat.");
1732 :     }
1733 :     else if( get_cvar_num("kz_ljs_enabled") )
1734 :     {
1735 :     gHasColorChat[id] = false;
1736 :     client_print(id, print_chat, "[XJ] ColorChat disabled. To enable, type /colorchat.");
1737 :     }
1738 :    
1739 :     return PLUGIN_CONTINUE;
1740 :     }
1741 :    
1742 :     public cmdLjStats(id)
1743 :     {
1744 :     if( get_cvar_num("kz_ljs_enabled") && !gHasLjStats[id] )
1745 :     {
1746 :     gHasLjStats[id] = true;
1747 :    
1748 :     client_print(id, print_chat, "[XJ] LongJump Stats enabled. To disable, type /ljstats.");
1749 :     }
1750 :     else if( get_cvar_num("kz_ljs_enabled") )
1751 :     {
1752 :     gHasLjStats[id] = false;
1753 :    
1754 :     client_print(id, print_chat, "[XJ] LongJump Stats disabled. To enable, type /ljstats.");
1755 :     }
1756 :    
1757 :     return PLUGIN_CONTINUE;
1758 :     }
1759 :    
1760 :     public cmdSpeed(id)
1761 :     {
1762 :     if( get_cvar_num("kz_ljs_enabled") && !gHasSpeed[id] )
1763 :     {
1764 :     gHasSpeed[id] = true;
1765 :     if( get_cvar_num("kz_ljs_fastserver") == 1 )
1766 :     set_task(0.1, "tskSpeed", id+334490, "", 0, "b", 0);
1767 :     else if( !(get_cvar_num("kz_ljs_fastserver") == 2) )
1768 :     set_task(0.5, "tskSpeed", id+334490, "", 0, "b", 0);
1769 :     client_print(id, print_chat, "[XJ] Speedometer enabled. To disable, type /speed.");
1770 :     }
1771 :     else if( get_cvar_num("kz_ljs_enabled") )
1772 :     {
1773 :     gHasSpeed[id] = false;
1774 :     if( task_exists(id+334490, 0) )
1775 :     remove_task(id+334490, 0);
1776 :     client_print(id, print_chat, "[XJ] Speedometer disabled. To enable, type /speed.");
1777 :     }
1778 :    
1779 :     return PLUGIN_CONTINUE;
1780 :     }
1781 :    
1782 :     public tskSpeed(taskid)
1783 :     {
1784 :     taskid-=334490;
1785 :     static alive, aliveflags, spectatedplayer, specflags;
1786 :     alive = is_user_alive(taskid);
1787 :     aliveflags = pev(taskid, pev_flags);
1788 :     spectatedplayer = get_spectated_player(taskid);
1789 :     specflags = pev(spectatedplayer, pev_flags);
1790 :    
1791 :     if( (alive || spectatedplayer > 0) && get_cvar_num("kz_ljs_enabled") )
1792 :     {
1793 :     if( alive )
1794 :     {
1795 :     pev(taskid, pev_velocity, vVelocity);
1796 :     if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER )
1797 :     vVelocity[2]-=vVelocity[2];
1798 :     }
1799 :     else
1800 :     {
1801 :     pev(spectatedplayer, pev_velocity, vVelocity);
1802 :     if( specflags&FL_ONGROUND && specflags&FL_INWATER )
1803 :     vVelocity[2]-=vVelocity[2];
1804 :     }
1805 :    
1806 :     if( get_cvar_num("kz_ljs_fastserver") == 1 )
1807 :     set_hudmessage(255, 255, 255, -1.0, 0.65, 0, 0.0, 0.2, 0.0, 0.0, 2);
1808 :     else if( !(get_cvar_num("kz_ljs_fastserver") == 1 || get_cvar_num("kz_ljs_fastserver") == 2) )
1809 :     set_hudmessage(255, 255, 255, -1.0, 0.65, 0, 0.0, 0.6, 0.0, 0.0, 2);
1810 :    
1811 :     if( get_cvar_num("kz_ljs_speedtype") == 1 )
1812 :     {
1813 :     idist = floatround(vector_length(vVelocity), floatround_floor);
1814 :     show_hudmessage(taskid, "%d units/second", idist);
1815 :     }
1816 :     else if( get_cvar_num("kz_ljs_speedtype") == 2 )
1817 :     {
1818 :     if( !(vVelocity[2] == 0) )
1819 :     vVelocity[2]-=vVelocity[2];
1820 :     gSpeed = vector_length(vVelocity);
1821 :     idist2 = floatround(gSpeed, floatround_floor);
1822 :     show_hudmessage(taskid, "%d velocity", idist2);
1823 :     }
1824 :     else
1825 :     {
1826 :     if( !(vVelocity[2] == 0) )
1827 :     vVelocity[2]-=vVelocity[2];
1828 :     gSpeed = vector_length(vVelocity);
1829 :     if( alive )
1830 :     {
1831 :     pev(taskid, pev_velocity, vVelocity);
1832 :     if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER )
1833 :     vVelocity[2]-=vVelocity[2];
1834 :     }
1835 :     else
1836 :     {
1837 :     pev(spectatedplayer, pev_velocity, vVelocity);
1838 :     if( specflags&FL_ONGROUND && specflags&FL_INWATER )
1839 :     vVelocity[2]-=vVelocity[2];
1840 :     }
1841 :     idist = floatround(vector_length(vVelocity), floatround_floor);
1842 :     idist2 = floatround(gSpeed, floatround_floor);
1843 :     show_hudmessage(taskid, "%d units/second^n%d velocity", idist, idist2);
1844 :     }
1845 :     }
1846 :     }
1847 :    
1848 :     public cmdVersion(id)
1849 :     {
1850 :     ColorChat(id, GREY, "^x04[XJ] Plugin: ^x01%s^x04 by: ^x03%s", gPLUGIN, gAUTHOR);
1851 :     if( get_cvar_num("kz_ljs_enabled") )
1852 :     ColorChat(id, BLUE, "^x04[XJ] Version: ^x01%s^x04, Status:^x03 enabled", gVERSION);
1853 :     else
1854 :     ColorChat(id, RED, "^x04[XJ] Version: ^x01%s^x04, Status:^x03 disabled", gVERSION);
1855 :     }
1856 :    
1857 :     public fwdStartFrame()
1858 :     {
1859 :     if( get_cvar_num("kz_legal_settings") && get_cvar_num("kz_ljs_enabled") )
1860 :     {
1861 :     if( get_pcvar_num(edgefriction) != 2 )
1862 :     set_pcvar_num(edgefriction, 2);
1863 :    
1864 :     if( get_pcvar_num(mp_footsteps) != 1 )
1865 :     set_pcvar_num(mp_footsteps, 1);
1866 :    
1867 :     if( get_pcvar_num(sv_cheats) != 0 )
1868 :     set_pcvar_num(sv_cheats, 0);
1869 :    
1870 :     if( get_pcvar_num(sv_gravity) != 800 )
1871 :     set_pcvar_num(sv_gravity, 800);
1872 :    
1873 :     if( get_pcvar_num(sv_airaccelerate) != 10 )
1874 :     set_pcvar_num(sv_airaccelerate, 10);
1875 :    
1876 :     if( get_pcvar_num(sv_maxspeed) != 320 )
1877 :     set_pcvar_num(sv_maxspeed, 320);
1878 :    
1879 :     if( get_pcvar_num(sv_stepsize) != 18 )
1880 :     set_pcvar_num(sv_stepsize, 18);
1881 :    
1882 :     if( get_pcvar_num(sv_maxvelocity) != 2000 )
1883 :     set_pcvar_num(sv_maxvelocity, 2000);
1884 :     }
1885 :    
1886 :     if( FindPlayer() > -1)
1887 :     {
1888 :     if( get_cvar_num("kz_ljs_enabled") )
1889 :     {
1890 :     set_hudmessage(255, 255, 255, -1.0, 0.65, 0, 0.0, 0.1, 0.0, 0.0, 2);
1891 :     if( !(pluginstatus) )
1892 :     {
1893 :     ColorChat(0, BLUE, "^x04[XJ] ^x01%s ^x04plugin^x03 enabled ^x04!", gPLUGIN);
1894 :     pluginstatus = INFO_ONE;
1895 :     }
1896 :     }
1897 :     else
1898 :     {
1899 :     if( pluginstatus )
1900 :     {
1901 :     ColorChat(0, RED, "^x04[XJ] ^x01%s ^x04plugin^x03 disabled ^x04!", gPLUGIN);
1902 :     pluginstatus = INFO_ZERO;
1903 :     }
1904 :     }
1905 :     }
1906 :     static id, fastserver, speedtype, spectatedplayer, alive, aliveflags, specflags;
1907 :     fastserver = get_cvar_num("kz_ljs_fastserver");
1908 :     speedtype = get_cvar_num("kz_ljs_speedtype");
1909 :     for( id = INFO_ONE; 0 < id <= MAXPLAYERS; id++ )
1910 :     {
1911 :     spectatedplayer = get_spectated_player(id);
1912 :     alive = is_user_alive(id);
1913 :     aliveflags = pev(id, pev_flags);
1914 :     specflags = pev(spectatedplayer, pev_flags);
1915 :     if( pev_valid(id) && (alive || spectatedplayer > 0) && pluginstatus )
1916 :     {
1917 :     if( alive )
1918 :     {
1919 :     pev(id, pev_velocity, vVelocity);
1920 :     if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER )
1921 :     vVelocity[2]-=vVelocity[2];
1922 :     }
1923 :     else
1924 :     {
1925 :     pev(spectatedplayer, pev_velocity, vVelocity);
1926 :     if( specflags&FL_ONGROUND && specflags&FL_INWATER )
1927 :     vVelocity[2]-=vVelocity[2];
1928 :     }
1929 :    
1930 :     if( fastserver == 2 && gHasSpeed[id] )
1931 :     {
1932 :     if( task_exists(id+334490, 0) )
1933 :     remove_task(id+334490, 0);
1934 :    
1935 :     if( speedtype == 1 )
1936 :     {
1937 :     idist = floatround(vector_length(vVelocity), floatround_floor);
1938 :     show_hudmessage(id, "%d units/second", idist);
1939 :     }
1940 :     else if( speedtype == 2 )
1941 :     {
1942 :     if( !(vVelocity[2] == 0) )
1943 :     vVelocity[2]-=vVelocity[2];
1944 :     gSpeed = vector_length(vVelocity);
1945 :     idist2 = floatround(gSpeed, floatround_floor);
1946 :     show_hudmessage(id, "%d velocity", idist2);
1947 :     }
1948 :     else
1949 :     {
1950 :     if( !(vVelocity[2] == 0) )
1951 :     vVelocity[2]-=vVelocity[2];
1952 :     gSpeed = vector_length(vVelocity);
1953 :     if( alive )
1954 :     {
1955 :     pev(id, pev_velocity, vVelocity);
1956 :     if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER )
1957 :     vVelocity[2]-=vVelocity[2];
1958 :     }
1959 :     else
1960 :     {
1961 :     pev(spectatedplayer, pev_velocity, vVelocity);
1962 :     if( specflags&FL_ONGROUND && specflags&FL_INWATER )
1963 :     vVelocity[2]-=vVelocity[2];
1964 :     }
1965 :     idist = floatround(vector_length(vVelocity), floatround_floor);
1966 :     idist2 = floatround(gSpeed, floatround_floor);
1967 :     show_hudmessage(id, "%d units/second^n%d velocity", idist, idist2);
1968 :     }
1969 :     }
1970 :     else if( gHasSpeed[id]
1971 :     && !(fastserver == 2)
1972 :     && !(task_exists(id+334490, 0)) )
1973 :     {
1974 :     if( fastserver == 1 )
1975 :     set_task(0.1, "tskSpeed", id+334490, "", 0, "b", 0);
1976 :     else if( !(fastserver == 2) )
1977 :     set_task(0.5, "tskSpeed", id+334490, "", 0, "b", 0);
1978 :     }
1979 :     }
1980 :     }
1981 :     }
1982 :    
1983 :     public fwdPlayerPreThink(id)
1984 :     {
1985 :     if( is_user_alive(id) && get_cvar_num("kz_ljs_enabled") )
1986 :     {
1987 :     static flags, buttons, oldbuttons;
1988 :     flags = pev(id, pev_flags);
1989 :     buttons = pev(id, pev_button);
1990 :     oldbuttons = pev(id, pev_oldbuttons);
1991 :    
1992 :     static Float:fGravity;
1993 :     pev(id, pev_gravity, fGravity);
1994 :    
1995 :     pev(id, pev_angles, angle);
1996 :     old_angle1[id] = angle[1];
1997 :    
1998 :     if( buttons&IN_MOVERIGHT
1999 :     || buttons&IN_MOVELEFT
2000 :     || buttons&IN_FORWARD
2001 :     || buttons&IN_BACK )
2002 :     {
2003 :     pev(id, pev_velocity, vVelocity);
2004 :     if( !(vVelocity[2] == 0) )
2005 :     vVelocity[2]-=vVelocity[2];
2006 :     if( vector_length(vVelocity) > OldSpeed[id] )
2007 :     goodsync[id] += INFO_ONE;
2008 :     else
2009 :     badsync[id] += INFO_ONE;
2010 :     }
2011 :     pev(id, pev_velocity, vVelocity);
2012 :     if( !(vVelocity[2] == 0) )
2013 :     vVelocity[2]-=vVelocity[2];
2014 :     OldSpeed[id] = vector_length(vVelocity);
2015 :    
2016 :     if( gInAir[id] == true && !(flags&FL_ONGROUND) )
2017 :     {
2018 :     static i;
2019 :     for( i = INFO_ZERO; i < 2; i++ )
2020 :     {
2021 :     if( (vFramePos[id][i][0] == 0
2022 :     && vFramePos[id][i][1] == 0
2023 :     && vFramePos[id][i][2] == 0
2024 :     && vFrameSpeed[id][i][0] == 0
2025 :     && vFrameSpeed[id][i][1] == 0
2026 :     && vFrameSpeed[id][i][2] == 0)
2027 :     || (i == 1) )
2028 :     {
2029 :     pev(id, pev_origin, vOrigin);
2030 :     vFramePos[id][i][0] = vOrigin[0];
2031 :     vFramePos[id][i][1] = vOrigin[1];
2032 :     vFramePos[id][i][2] = vOrigin[2];
2033 :    
2034 :     pev(id, pev_velocity, vVelocity);
2035 :     vFrameSpeed[id][i][0] = vVelocity[0];
2036 :     vFrameSpeed[id][i][1] = vVelocity[1];
2037 :     vFrameSpeed[id][i][2] = vVelocity[2];
2038 :    
2039 :     i=2;
2040 :     }
2041 :     }
2042 :     }
2043 :    
2044 :     pev(id, pev_velocity, vVelocity);
2045 :     if( flags&FL_ONGROUND && flags&FL_INWATER )
2046 :     vVelocity[2]-=vVelocity[2];
2047 :     fSpeed = vector_length(vVelocity);
2048 :    
2049 :     pev(id, pev_origin, vOrigin);
2050 :     fDistance = get_distance_f(vOldOrigin[id], vOrigin);
2051 :     pev(id, pev_origin, vOldOrigin[id]);
2052 :     pev(id, pev_velocity, vVelocity);
2053 :     if( !(vVelocity[2] == 0) )
2054 :     vVelocity[2]-=vVelocity[2];
2055 :    
2056 :     if( (cjumped[id] == false
2057 :     && vector_length(vVelocity) > 345.0)
2058 :     || (cjumped[id] == true
2059 :     && vector_length(vVelocity) > 352.5)
2060 :     || pev(id, pev_maxspeed) != 250.0
2061 :     || pev(id, pev_movetype) != MOVETYPE_WALK
2062 :     || fGravity != 1.0
2063 :     || get_pcvar_num(edgefriction) != 2
2064 :     || get_pcvar_num(mp_footsteps) != 1
2065 :     || get_pcvar_num(sv_cheats) != 0
2066 :     || get_pcvar_num(sv_gravity) != 800
2067 :     || get_pcvar_num(sv_airaccelerate) != 10
2068 :     || get_pcvar_num(sv_maxspeed) != 320
2069 :     || get_pcvar_num(sv_stepsize) != 18
2070 :     || get_pcvar_num(sv_maxvelocity) != 2000
2071 :     || pev(id, pev_waterlevel) >= 2
2072 :     || fDistance > 20 )
2073 :     {
2074 :     gocheck(id);
2075 :     return FMRES_IGNORED;
2076 :     }
2077 :    
2078 :     if( !(flags&FL_ONGROUND) )
2079 :     lasttime[id] = get_gametime();
2080 :    
2081 :     if( gInAir[id] == true )
2082 :     {
2083 :     pev(id, pev_velocity, vVelocity);
2084 :     if( !(vVelocity[2] == 0) )
2085 :     vVelocity[2]-=vVelocity[2];
2086 :     gSpeed = vector_length(vVelocity);
2087 :     if( gSpeed > fMaxAirSpeed[id] )
2088 :     {
2089 :     fMaxAirSpeed[id] = gSpeed;
2090 :     }
2091 :     }
2092 :    
2093 :     if( buttons&IN_JUMP
2094 :     && !(oldbuttons&IN_JUMP)
2095 :     && flags&FL_ONGROUND
2096 :     && gInAir[id] == false )
2097 :     {
2098 :     set_task(0.8,"gocheck", id);
2099 :    
2100 :     jumptime[id] = get_gametime();
2101 :     gInAir[id] = true;
2102 :     fMaxGroundSpeed[id] = fSpeed;
2103 :     OldSpeed[id] = fSpeed;
2104 :     fMaxAirSpeed[id] = fSpeed;
2105 :    
2106 :     pev(id, pev_origin, vOrigin);
2107 :    
2108 :     vJumpedAt[id][0] = vOrigin[0];
2109 :     vJumpedAt[id][1] = vOrigin[1];
2110 :     vJumpedAt[id][2] = vOrigin[2];
2111 :    
2112 :     if( doubleducked[id] == true && vOrigin[2] == vDuckedAt[id][2] )
2113 :     cjumped[id] = true;
2114 :     else
2115 :     cjumped[id] = false;
2116 :    
2117 :     doubleducked[id] = false;
2118 :    
2119 :     strafes[id] = INFO_ZERO;
2120 :    
2121 :     goodsync[id] = INFO_ZERO;
2122 :     badsync[id] = INFO_ZERO;
2123 :    
2124 :     turning_right[id] = false;
2125 :     turning_left[id] = false;
2126 :     straifing_aw[id] = false;
2127 :     straifing_sd[id] = false;
2128 :     if( cjumped[id] == false )
2129 :     {
2130 :     static i;
2131 :     for( i = INFO_ZERO; i < 127; i++ )
2132 :     {
2133 :     vBeamPos[id][i][0] = vOrigin[0]-vOrigin[0];
2134 :     vBeamPos[id][i][1] = vOrigin[1]-vOrigin[1];
2135 :     vBeamPos[id][i][2] = vOrigin[2]-vOrigin[2];
2136 :     }
2137 :     }
2138 :     static i;
2139 :     for( i = INFO_ZERO; i < 2; i++ )
2140 :     {
2141 :     vFramePos[id][i][0] = vOrigin[0]-vOrigin[0];
2142 :     vFramePos[id][i][1] = vOrigin[1]-vOrigin[1];
2143 :     vFramePos[id][i][2] = vOrigin[2]-vOrigin[2];
2144 :    
2145 :     vFrameSpeed[id][i][0] = vOrigin[0]-vOrigin[0];
2146 :     vFrameSpeed[id][i][1] = vOrigin[1]-vOrigin[1];
2147 :     vFrameSpeed[id][i][2] = vOrigin[2]-vOrigin[2];
2148 :     }
2149 :     }
2150 :     else if( flags&FL_ONGROUND
2151 :     && gInAir[id] == true )
2152 :     {
2153 :     set_task(0.5,"gocheck", id);
2154 :     gInAir[id] = false;
2155 :    
2156 :     pev(id, pev_origin, vOrigin);
2157 :    
2158 :     fDistance1 = get_distance_f(vJumpedAt[id], vOrigin)+32.0625;
2159 :    
2160 :     if( !(vFramePos[id][0][2] > vOrigin[2]) )
2161 :     return FMRES_IGNORED;
2162 :    
2163 :     rLandPos[2] = vFrameSpeed[id][0][2] * vFrameSpeed[id][0][2] + (2 * get_pcvar_float(sv_gravity) * (vFramePos[id][0][2] - vOrigin[2]));
2164 :     rDistance[0] = (floatsqroot(rLandPos[2]) * -1) - vFrameSpeed[id][1][2];
2165 :     rDistance[1] = get_pcvar_float(sv_gravity)*-1;
2166 :     frame2time = floatdiv(rDistance[0], rDistance[1]);
2167 :    
2168 :     if( vFrameSpeed[id][1][0] < 0 )
2169 :     vFrameSpeed[id][1][0] = vFrameSpeed[id][1][0]*-1;
2170 :     rDistance[0] = frame2time*vFrameSpeed[id][1][0];
2171 :    
2172 :     if( vFrameSpeed[id][1][1] < 0 )
2173 :     vFrameSpeed[id][1][1] = vFrameSpeed[id][1][1]*-1;
2174 :     rDistance[1] = frame2time*vFrameSpeed[id][1][1];
2175 :    
2176 :     if( vFramePos[id][1][0] < vOrigin[0] )
2177 :     rLandPos[0] = vFramePos[id][1][0] + rDistance[0];
2178 :     else
2179 :     rLandPos[0] = vFramePos[id][1][0] - rDistance[0];
2180 :    
2181 :     if( vFramePos[id][1][1] < vOrigin[1] )
2182 :     rLandPos[1] = vFramePos[id][1][1] + rDistance[1];
2183 :     else
2184 :     rLandPos[1] = vFramePos[id][1][1] - rDistance[1];
2185 :    
2186 :     if( is_in_duck(id) )
2187 :     vOrigin[2]+=18.0;
2188 :     rLandPos[2] = vOrigin[2];
2189 :    
2190 :     frame2time += (lasttime[id]-jumptime[id]);
2191 :     if( vOrigin[2] == vJumpedAt[id][2] )
2192 :     {
2193 :     if( is_in_duck(id) && !(frame2time > 0.71 && frame2time < 0.77) )
2194 :     vOrigin[2] = vOrigin[2]*-1;
2195 :     else if( !(is_in_duck(id)) && !(frame2time > 0.65 && frame2time < 0.70) )
2196 :     vOrigin[2] = vOrigin[2]*-1;
2197 :     }
2198 :    
2199 :     fDistance2 = get_distance_f(vJumpedAt[id], rLandPos)+32.0625;
2200 :     if( fDistance1 > fDistance2 )
2201 :     {
2202 :     fDistance = fDistance2;
2203 :     vOrigin[0] = rLandPos[0];
2204 :     vOrigin[1] = rLandPos[1];
2205 :     }
2206 :     else
2207 :     fDistance = fDistance1;
2208 :    
2209 :     vJumpedAt2[2] = vJumpedAt[id][2]-34.0;
2210 :     vTraceEnd[2] = vOrigin[2]-34.0;
2211 :    
2212 :     vJumpedAt2[0] = vJumpedAt[id][0];
2213 :     vTraceEnd[0] = vOrigin[0];
2214 :     vJumpedAt2[1] = vJumpedAt[id][1]-vJumpedAt[id][1];
2215 :     vTraceEnd[1] = vOrigin[1]-vOrigin[1];
2216 :     xDistance = get_distance_f(vJumpedAt2, vTraceEnd);
2217 :    
2218 :     vJumpedAt2[0] = vJumpedAt[id][0]-vJumpedAt[id][0];
2219 :     vTraceEnd[0] = vOrigin[0]-vOrigin[0];
2220 :     vJumpedAt2[1] = vJumpedAt[id][1];
2221 :     vTraceEnd[1] = vOrigin[1];
2222 :     yDistance = get_distance_f(vJumpedAt2, vTraceEnd);
2223 :    
2224 :     if( vJumpedAt[id][0] > vOrigin[0] )
2225 :     {
2226 :     vJumpedAt2[0] = vJumpedAt[id][0]+(xDistance*16.03125/fDistance);
2227 :     vTraceEnd[0] = vOrigin[0]-(xDistance*16.03125/fDistance);
2228 :     }
2229 :     else if( vJumpedAt[id][0] < vOrigin[0] )
2230 :     {
2231 :     vJumpedAt2[0] = vJumpedAt[id][0]-(xDistance*16.03125/fDistance);
2232 :     vTraceEnd[0] = vOrigin[0]+(xDistance*16.03125/fDistance);
2233 :     }
2234 :     else
2235 :     {
2236 :     vJumpedAt2[0] = vJumpedAt[id][0];
2237 :     vTraceEnd[0] = vOrigin[0];
2238 :     }
2239 :    
2240 :     if( vJumpedAt[id][1] > vOrigin[1] )
2241 :     {
2242 :     vJumpedAt2[1] = vJumpedAt[id][1]+(yDistance*16.03125/fDistance);
2243 :     vTraceEnd[1] = vOrigin[1]-(yDistance*16.03125/fDistance);
2244 :     }
2245 :     else if( vJumpedAt[id][1] < vOrigin[1] )
2246 :     {
2247 :     vJumpedAt2[1] = vJumpedAt[id][1]-(yDistance*16.03125/fDistance);
2248 :     vTraceEnd[1] = vOrigin[1]+(yDistance*16.03125/fDistance);
2249 :     }
2250 :     else
2251 :     {
2252 :     vJumpedAt2[1] = vJumpedAt[id][1];
2253 :     vTraceEnd[1] = vOrigin[1];
2254 :     }
2255 :    
2256 :     static type;
2257 :    
2258 :     if( vJumpedAt[id][2] == vOrigin[2]
2259 :     && fDistance > get_cvar_num("kz_min_lj")
2260 :     && fMaxGroundSpeed[id] < 277
2261 :     && cjumped[id] == false
2262 :     && !(fDistance > get_cvar_float("kz_max_lj")) )
2263 :     {
2264 :     type = INFO_ZERO;
2265 :     static Distance, MaxAirSpeed, MaxGroundSpeed, sync;
2266 :     if( goodsync[id] > 0 )
2267 :     sync = (goodsync[id]*100/(goodsync[id]+badsync[id]));
2268 :     else
2269 :     sync = INFO_ZERO;
2270 :     Distance = floatround((fDistance*1000000), floatround_floor);
2271 :     MaxAirSpeed = floatround((fMaxAirSpeed[id]*1000000), floatround_floor);
2272 :     MaxGroundSpeed = floatround((fMaxGroundSpeed[id]*1000000), floatround_floor);
2273 :     check_maintop(id, Distance, MaxAirSpeed, MaxGroundSpeed, strafes[id], sync, type);
2274 :    
2275 :     static ljStatsRed, ljStatsGreen, ljStatsBlue, i, kz_ljs_beam, sound;
2276 :     ljStatsRed = get_cvar_num("kz_ljstats_red");
2277 :     ljStatsGreen = get_cvar_num("kz_ljstats_green");
2278 :     ljStatsBlue = get_cvar_num("kz_ljstats_blue");
2279 :     kz_ljs_beam = get_cvar_num("kz_ljs_beam");
2280 :     sound = get_cvar_num("kz_lj_sounds");
2281 :     if( gHasLjStats[id] )
2282 :     {
2283 :     if( kz_ljs_beam == 1)
2284 :     {
2285 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2286 :     write_byte (0);
2287 :     write_coord(floatround(vJumpedAt2[0]));
2288 :     write_coord(floatround(vJumpedAt2[1]));
2289 :     write_coord(floatround(vJumpedAt2[2]));
2290 :     write_coord(floatround(vTraceEnd[0]));
2291 :     write_coord(floatround(vTraceEnd[1]));
2292 :     write_coord(floatround(vTraceEnd[2]));
2293 :     write_short(gBeam);
2294 :     write_byte(1);
2295 :     write_byte(5);
2296 :     write_byte(30);
2297 :     write_byte(20);
2298 :     write_byte(0);
2299 :     write_byte(random_num(32, 255));
2300 :     write_byte(random_num(32, 255));
2301 :     write_byte(random_num(32, 255));
2302 :     write_byte(200);
2303 :     write_byte(200);
2304 :     message_end();
2305 :     }
2306 :     else if( kz_ljs_beam == 2)
2307 :     {
2308 :     set_task(1.0,"gocheck", id);
2309 :     set_task(1.5,"gocheck", id);
2310 :     set_task(2.0,"gocheck", id);
2311 :     set_task(2.5,"gocheck", id);
2312 :     for( i = INFO_ZERO; i < 127; i++ )
2313 :     {
2314 :     if( i == 0 )
2315 :     {
2316 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2317 :     write_byte (0);
2318 :     write_coord(floatround(vJumpedAt2[0]));
2319 :     write_coord(floatround(vJumpedAt2[1]));
2320 :     write_coord(floatround(vTraceEnd[2]));
2321 :     write_coord(floatround(vBeamPos[id][0][0]));
2322 :     write_coord(floatround(vBeamPos[id][0][1]));
2323 :     write_coord(floatround(vTraceEnd[2]));
2324 :     write_short(gBeam);
2325 :     write_byte(1);
2326 :     write_byte(5);
2327 :     write_byte(30);
2328 :     write_byte(20);
2329 :     write_byte(0);
2330 :     write_byte(255);
2331 :     write_byte(255);
2332 :     write_byte(0);
2333 :     write_byte(200);
2334 :     write_byte(200);
2335 :     message_end();
2336 :    
2337 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2338 :     write_byte (0);
2339 :     write_coord(floatround(vBeamPos[id][0][0]));
2340 :     write_coord(floatround(vBeamPos[id][0][1]));
2341 :     write_coord(floatround(vTraceEnd[2]));
2342 :     write_coord(floatround(vBeamPos[id][1][0]));
2343 :     write_coord(floatround(vBeamPos[id][1][1]));
2344 :     write_coord(floatround(vTraceEnd[2]));
2345 :     write_short(gBeam);
2346 :     write_byte(1);
2347 :     write_byte(5);
2348 :     write_byte(30);
2349 :     write_byte(20);
2350 :     write_byte(0);
2351 :     write_byte(255);
2352 :     write_byte(255);
2353 :     write_byte(0);
2354 :     write_byte(200);
2355 :     write_byte(200);
2356 :     message_end();
2357 :     }
2358 :     else if( i == 127 || (vBeamPos[id][i+1][0] == 0
2359 :     && vBeamPos[id][i+1][1] == 0
2360 :     && vBeamPos[id][i+1][2] == 0) )
2361 :     {
2362 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2363 :     write_byte (0);
2364 :     write_coord(floatround(vBeamPos[id][i][0]));
2365 :     write_coord(floatround(vBeamPos[id][i][1]));
2366 :     write_coord(floatround(vTraceEnd[2]));
2367 :     write_coord(floatround(vOrigin[0]));
2368 :     write_coord(floatround(vOrigin[1]));
2369 :     write_coord(floatround(vTraceEnd[2]));
2370 :     write_short(gBeam);
2371 :     write_byte(1);
2372 :     write_byte(5);
2373 :     write_byte(30);
2374 :     write_byte(20);
2375 :     write_byte(0);
2376 :     if( vBeamPosStatus[id][i] == 1 )
2377 :     {
2378 :     write_byte(255);
2379 :     write_byte(0);
2380 :     write_byte(0);
2381 :     }
2382 :     else
2383 :     {
2384 :     write_byte(255);
2385 :     write_byte(255);
2386 :     write_byte(0);
2387 :     }
2388 :     write_byte(200);
2389 :     write_byte(200);
2390 :     message_end();
2391 :    
2392 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2393 :     write_byte (0);
2394 :     write_coord(floatround(vOrigin[0]));
2395 :     write_coord(floatround(vOrigin[1]));
2396 :     write_coord(floatround(vTraceEnd[2]));
2397 :     write_coord(floatround(vTraceEnd[0]));
2398 :     write_coord(floatround(vTraceEnd[1]));
2399 :     write_coord(floatround(vTraceEnd[2]));
2400 :     write_short(gBeam);
2401 :     write_byte(1);
2402 :     write_byte(5);
2403 :     write_byte(30);
2404 :     write_byte(20);
2405 :     write_byte(0);
2406 :     if( vBeamPosStatus[id][i] == 1 )
2407 :     {
2408 :     write_byte(255);
2409 :     write_byte(0);
2410 :     write_byte(0);
2411 :     }
2412 :     else
2413 :     {
2414 :     write_byte(255);
2415 :     write_byte(255);
2416 :     write_byte(0);
2417 :     }
2418 :     write_byte(200);
2419 :     write_byte(200);
2420 :     message_end();
2421 :     i=127;
2422 :     }
2423 :     else
2424 :     {
2425 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2426 :     write_byte (0);
2427 :     write_coord(floatround(vBeamPos[id][i][0]));
2428 :     write_coord(floatround(vBeamPos[id][i][1]));
2429 :     write_coord(floatround(vTraceEnd[2]));
2430 :     write_coord(floatround(vBeamPos[id][i+1][0]));
2431 :     write_coord(floatround(vBeamPos[id][i+1][1]));
2432 :     write_coord(floatround(vTraceEnd[2]));
2433 :     write_short(gBeam);
2434 :     write_byte(1);
2435 :     write_byte(5);
2436 :     write_byte(30);
2437 :     write_byte(20);
2438 :     write_byte(0);
2439 :     if( vBeamPosStatus[id][i] == 1 )
2440 :     {
2441 :     write_byte(255);
2442 :     write_byte(0);
2443 :     write_byte(0);
2444 :     }
2445 :     else
2446 :     {
2447 :     write_byte(255);
2448 :     write_byte(255);
2449 :     write_byte(0);
2450 :     }
2451 :     write_byte(200);
2452 :     write_byte(200);
2453 :     message_end();
2454 :     }
2455 :     }
2456 :     }
2457 :     }
2458 :    
2459 :     set_hudmessage(ljStatsRed, ljStatsGreen, ljStatsBlue, -1.0, 0.70, 0, 0.0, 2.0, 0.1, 0.1, 3);
2460 :     idist = floatround(fDistance, floatround_floor);
2461 :     static strdist[128];
2462 :     num_to_word(idist, strdist, 127);
2463 :     for( i = INFO_ONE; 0 < i <= MAXPLAYERS; i++ )
2464 :     {
2465 :     if( (i == id || is_user_spectating_player(i, id)) && gHasLjStats[i] )
2466 :     {
2467 :     show_hudmessage(i, "Distance: %f^nMaxSpeed: %f^nPreStrafe: %f^nStrafes: %d^nSync: %d", fDistance, fMaxAirSpeed[id], fMaxGroundSpeed[id], strafes[id], sync );
2468 :    
2469 :     client_print(i, print_console, "Distance: %f MaxSpeed: %f PreStrafe: %f Strafes: %d Sync: %d", fDistance, fMaxAirSpeed[id], fMaxGroundSpeed[id], strafes[id], sync );
2470 :    
2471 :     if( sound == 2 && gHasColorChat[i] )
2472 :     client_cmd(i, "speak ^"vox/%s uniform(e30) it south(e15)^"", strdist);
2473 :    
2474 :     if( i != id && (kz_ljs_beam == 1 || kz_ljs_beam == 2) )
2475 :     {
2476 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, i);
2477 :     write_byte (0);
2478 :     write_coord(floatround(vJumpedAt2[0]));
2479 :     write_coord(floatround(vJumpedAt2[1]));
2480 :     write_coord(floatround(vJumpedAt2[2]));
2481 :     write_coord(floatround(vTraceEnd[0]));
2482 :     write_coord(floatround(vTraceEnd[1]));
2483 :     write_coord(floatround(vTraceEnd[2]));
2484 :     write_short(gBeam);
2485 :     write_byte(1);
2486 :     write_byte(5);
2487 :     write_byte(30);
2488 :     write_byte(20);
2489 :     write_byte(0);
2490 :     write_byte(random_num(32, 255));
2491 :     write_byte(random_num(32, 255));
2492 :     write_byte(random_num(32, 255));
2493 :     write_byte(200);
2494 :     write_byte(200);
2495 :     message_end();
2496 :     }
2497 :     }
2498 :     }
2499 :    
2500 :     static Float:max_lj, Float:leet_lj, Float:pro_lj, Float:good_lj, ljtop;
2501 :     max_lj = get_cvar_float("kz_max_lj");
2502 :     leet_lj = get_cvar_float("kz_leet_lj");
2503 :     pro_lj = get_cvar_float("kz_pro_lj");
2504 :     good_lj = get_cvar_float("kz_good_lj");
2505 :     ljtop = get_cvar_num("kz_lj_top");
2506 :     if( fDistance < max_lj
2507 :     && !(fDistance < leet_lj)
2508 :     && !(0 > leet_lj)
2509 :     && (ljtop == 1
2510 :     || ljtop == 3) )
2511 :     {
2512 :     static color, name[33];
2513 :     color = get_cvar_num("kz_leet_lj_clr");
2514 :     get_user_name(id, name, 31);
2515 :     for( i = INFO_ONE; 0 < i <= MAXPLAYERS; i++ )
2516 :     {
2517 :     if( i == id || is_user_spectating_player(i, id) || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
2518 :     {
2519 :     if( color < 6 && color > 0 )
2520 :     {
2521 :     switch(color)
2522 :     {
2523 :     case 1: ColorChat(i, RED, "[XJ] %s jumped %.3f units!", name, fDistance);
2524 :     case 2: ColorChat(i, GREEN, "[XJ] %s jumped %.3f units!", name, fDistance);
2525 :     case 3: ColorChat(i, BLUE, "[XJ] %s jumped %.3f units!", name, fDistance);
2526 :     case 4: ColorChat(i, GREY, "[XJ] %s jumped %.3f units!", name, fDistance);
2527 :     case 5: ColorChat(i, TEAM_COLOR, "[XJ] %s jumped %.3f units!", name, fDistance);
2528 :     }
2529 :     }
2530 :     else
2531 :     client_print(i, print_chat, "[XJ] %s jumped %.3f units!", name, fDistance);
2532 :    
2533 :     if( sound == 1 )
2534 :     {
2535 :     if( i == id || is_user_spectating_player(i, id) )
2536 :     client_cmd(i, "speak misc/mod_wickedsick");
2537 :     else
2538 :     client_cmd(i, "speak misc/mod_godlike");
2539 :     }
2540 :     }
2541 :     }
2542 :     }
2543 :    
2544 :     else if( fDistance < max_lj
2545 :     && !(fDistance < pro_lj)
2546 :     && !(0 > pro_lj)
2547 :     && (ljtop == 1
2548 :     || ljtop == 3) )
2549 :     {
2550 :     static color, name[33];
2551 :     color = get_cvar_num("kz_pro_lj_clr");
2552 :     get_user_name(id, name, 31);
2553 :     for( i = INFO_ONE; 0 < i <= MAXPLAYERS; i++ )
2554 :     {
2555 :     if( i == id || is_user_spectating_player(i, id) || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
2556 :     {
2557 :     if( color < 6 && color > 0 )
2558 :     {
2559 :     switch(color)
2560 :     {
2561 :     case 1: ColorChat(i, RED, "[XJ] %s jumped %.3f units!", name, fDistance);
2562 :     case 2: ColorChat(i, GREEN, "[XJ] %s jumped %.3f units!", name, fDistance);
2563 :     case 3: ColorChat(i, BLUE, "[XJ] %s jumped %.3f units!", name, fDistance);
2564 :     case 4: ColorChat(i, GREY, "[XJ] %s jumped %.3f units!", name, fDistance);
2565 :     case 5: ColorChat(i, TEAM_COLOR, "[XJ] %s jumped %.3f units!", name, fDistance);
2566 :     }
2567 :     }
2568 :     else
2569 :     client_print(i, print_chat, "[XJ] %s jumped %.3f units!", name, fDistance);
2570 :     }
2571 :     if( (i == id || is_user_spectating_player(i, id)) && sound == 1 )
2572 :     client_cmd(i, "speak misc/perfect");
2573 :     }
2574 :     }
2575 :    
2576 :     else if( fDistance < max_lj
2577 :     && !(fDistance < good_lj)
2578 :     && !(0 > good_lj)
2579 :     && (ljtop == 1
2580 :     || ljtop == 3) )
2581 :     {
2582 :     static color, name[33];
2583 :     color = get_cvar_num("kz_good_lj_clr");
2584 :     get_user_name(id, name, 31);
2585 :     for( i = INFO_ONE; 0 < i <= MAXPLAYERS; i++ )
2586 :     {
2587 :     if( i == id || is_user_spectating_player(i, id) || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
2588 :     {
2589 :     if( color < 6 && color > 0 )
2590 :     {
2591 :     switch(color)
2592 :     {
2593 :     case 1: ColorChat(i, RED, "[XJ] %s jumped %.3f units!", name, fDistance);
2594 :     case 2: ColorChat(i, GREEN, "[XJ] %s jumped %.3f units!", name, fDistance);
2595 :     case 3: ColorChat(i, BLUE, "[XJ] %s jumped %.3f units!", name, fDistance);
2596 :     case 4: ColorChat(i, GREY, "[XJ] %s jumped %.3f units!", name, fDistance);
2597 :     case 5: ColorChat(i, TEAM_COLOR, "[XJ] %s jumped %.3f units!", name, fDistance);
2598 :     }
2599 :     }
2600 :     else
2601 :     client_print(i, print_chat, "[XJ] %s jumped %.3f units!", name, fDistance);
2602 :     }
2603 :     if( (i == id || is_user_spectating_player(i, id)) && sound == 1 )
2604 :     client_cmd(i, "speak misc/impressive");
2605 :     }
2606 :     }
2607 :     }
2608 :     else if( vJumpedAt[id][2] == vOrigin[2]
2609 :     && fDistance > get_cvar_num("kz_min_lj")
2610 :     && fMaxGroundSpeed[id] < 287
2611 :     && cjumped[id] == true
2612 :     && !(fDistance > (get_cvar_float("kz_max_lj") + get_cvar_num("kz_cj_dif"))) )
2613 :     {
2614 :     type = INFO_ONE;
2615 :     static Distance, MaxAirSpeed, MaxGroundSpeed, sync;
2616 :     if( goodsync[id] > 0 )
2617 :     sync = (goodsync[id]*100/(goodsync[id]+badsync[id]));
2618 :     else
2619 :     sync = INFO_ZERO;
2620 :     Distance = floatround((fDistance*1000000), floatround_floor);
2621 :     MaxAirSpeed = floatround((fMaxAirSpeed[id]*1000000), floatround_floor);
2622 :     MaxGroundSpeed = floatround((fMaxGroundSpeed[id]*1000000), floatround_floor);
2623 :     check_maintop(id, Distance, MaxAirSpeed, MaxGroundSpeed, strafes[id], sync, type);
2624 :    
2625 :     static ljStatsRed, ljStatsGreen, ljStatsBlue, i, kz_ljs_beam, sound;
2626 :     ljStatsRed = get_cvar_num("kz_ljstats_red");
2627 :     ljStatsGreen = get_cvar_num("kz_ljstats_green");
2628 :     ljStatsBlue = get_cvar_num("kz_ljstats_blue");
2629 :     kz_ljs_beam = get_cvar_num("kz_ljs_beam");
2630 :     sound = get_cvar_num("kz_lj_sounds");
2631 :     if( gHasLjStats[id] )
2632 :     {
2633 :     if( kz_ljs_beam == 1)
2634 :     {
2635 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2636 :     write_byte (0);
2637 :     write_coord(floatround(vJumpedAt2[0]));
2638 :     write_coord(floatround(vJumpedAt2[1]));
2639 :     write_coord(floatround(vJumpedAt2[2]));
2640 :     write_coord(floatround(vTraceEnd[0]));
2641 :     write_coord(floatround(vTraceEnd[1]));
2642 :     write_coord(floatround(vTraceEnd[2]));
2643 :     write_short(gBeam);
2644 :     write_byte(1);
2645 :     write_byte(5);
2646 :     write_byte(30);
2647 :     write_byte(20);
2648 :     write_byte(0);
2649 :     write_byte(random_num(32, 255));
2650 :     write_byte(random_num(32, 255));
2651 :     write_byte(random_num(32, 255));
2652 :     write_byte(200);
2653 :     write_byte(200);
2654 :     message_end();
2655 :     }
2656 :     else if( kz_ljs_beam == 2)
2657 :     {
2658 :     set_task(1.0,"gocheck", id);
2659 :     set_task(1.5,"gocheck", id);
2660 :     set_task(2.0,"gocheck", id);
2661 :     set_task(2.5,"gocheck", id);
2662 :     for( i = INFO_ZERO; i < 127; i++ )
2663 :     {
2664 :     if( i == 0 )
2665 :     {
2666 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2667 :     write_byte (0);
2668 :     write_coord(floatround(vDuckedAt[id][0]));
2669 :     write_coord(floatround(vDuckedAt[id][1]));
2670 :     write_coord(floatround(vTraceEnd[2]));
2671 :     write_coord(floatround(vBeamPos[id][0][0]));
2672 :     write_coord(floatround(vBeamPos[id][0][1]));
2673 :     write_coord(floatround(vTraceEnd[2]));
2674 :     write_short(gBeam);
2675 :     write_byte(1);
2676 :     write_byte(5);
2677 :     write_byte(30);
2678 :     write_byte(20);
2679 :     write_byte(0);
2680 :     write_byte(0);
2681 :     write_byte(255);
2682 :     write_byte(0);
2683 :     write_byte(200);
2684 :     write_byte(200);
2685 :     message_end();
2686 :    
2687 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2688 :     write_byte (0);
2689 :     write_coord(floatround(vBeamPos[id][0][0]));
2690 :     write_coord(floatround(vBeamPos[id][0][1]));
2691 :     write_coord(floatround(vTraceEnd[2]));
2692 :     write_coord(floatround(vBeamPos[id][1][0]));
2693 :     write_coord(floatround(vBeamPos[id][1][1]));
2694 :     write_coord(floatround(vTraceEnd[2]));
2695 :     write_short(gBeam);
2696 :     write_byte(1);
2697 :     write_byte(5);
2698 :     write_byte(30);
2699 :     write_byte(20);
2700 :     write_byte(0);
2701 :     write_byte(0);
2702 :     write_byte(255);
2703 :     write_byte(0);
2704 :     write_byte(200);
2705 :     write_byte(200);
2706 :     message_end();
2707 :     }
2708 :     else if( i == 127 || (vBeamPos[id][i+1][0] == 0
2709 :     && vBeamPos[id][i+1][1] == 0
2710 :     && vBeamPos[id][i+1][2] == 0) )
2711 :     {
2712 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2713 :     write_byte (0);
2714 :     write_coord(floatround(vBeamPos[id][i][0]));
2715 :     write_coord(floatround(vBeamPos[id][i][1]));
2716 :     write_coord(floatround(vTraceEnd[2]));
2717 :     write_coord(floatround(vOrigin[0]));
2718 :     write_coord(floatround(vOrigin[1]));
2719 :     write_coord(floatround(vTraceEnd[2]));
2720 :     write_short(gBeam);
2721 :     write_byte(1);
2722 :     write_byte(5);
2723 :     write_byte(30);
2724 :     write_byte(20);
2725 :     write_byte(0);
2726 :     if( vBeamPosStatus[id][i] == 1 )
2727 :     {
2728 :     write_byte(255);
2729 :     write_byte(0);
2730 :     write_byte(0);
2731 :     }
2732 :     else
2733 :     {
2734 :     write_byte(255);
2735 :     write_byte(255);
2736 :     write_byte(0);
2737 :     }
2738 :     write_byte(200);
2739 :     write_byte(200);
2740 :     message_end();
2741 :    
2742 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2743 :     write_byte (0);
2744 :     write_coord(floatround(vOrigin[0]));
2745 :     write_coord(floatround(vOrigin[1]));
2746 :     write_coord(floatround(vTraceEnd[2]));
2747 :     write_coord(floatround(vTraceEnd[0]));
2748 :     write_coord(floatround(vTraceEnd[1]));
2749 :     write_coord(floatround(vTraceEnd[2]));
2750 :     write_short(gBeam);
2751 :     write_byte(1);
2752 :     write_byte(5);
2753 :     write_byte(30);
2754 :     write_byte(20);
2755 :     write_byte(0);
2756 :     if( vBeamPosStatus[id][i] == 1 )
2757 :     {
2758 :     write_byte(255);
2759 :     write_byte(0);
2760 :     write_byte(0);
2761 :     }
2762 :     else
2763 :     {
2764 :     write_byte(255);
2765 :     write_byte(255);
2766 :     write_byte(0);
2767 :     }
2768 :     write_byte(200);
2769 :     write_byte(200);
2770 :     message_end();
2771 :     i=127;
2772 :     }
2773 :     else
2774 :     {
2775 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, id);
2776 :     write_byte (0);
2777 :     write_coord(floatround(vBeamPos[id][i][0]));
2778 :     write_coord(floatround(vBeamPos[id][i][1]));
2779 :     write_coord(floatround(vTraceEnd[2]));
2780 :     write_coord(floatround(vBeamPos[id][i+1][0]));
2781 :     write_coord(floatround(vBeamPos[id][i+1][1]));
2782 :     write_coord(floatround(vTraceEnd[2]));
2783 :     write_short(gBeam);
2784 :     write_byte(1);
2785 :     write_byte(5);
2786 :     write_byte(30);
2787 :     write_byte(20);
2788 :     write_byte(0);
2789 :     if( vBeamPosStatus[id][i] == 1 )
2790 :     {
2791 :     write_byte(255);
2792 :     write_byte(0);
2793 :     write_byte(0);
2794 :     }
2795 :     else if( vBeamPosStatus[id][i] == -1 )
2796 :     {
2797 :     write_byte(0);
2798 :     write_byte(255);
2799 :     write_byte(0);
2800 :     }
2801 :     else
2802 :     {
2803 :     write_byte(255);
2804 :     write_byte(255);
2805 :     write_byte(0);
2806 :     }
2807 :     write_byte(200);
2808 :     write_byte(200);
2809 :     message_end();
2810 :     }
2811 :     }
2812 :     }
2813 :     }
2814 :    
2815 :     set_hudmessage(ljStatsRed, ljStatsGreen, ljStatsBlue, -1.0, 0.70, 0, 0.0, 2.0, 0.1, 0.1, 3);
2816 :     idist = floatround(fDistance, floatround_floor);
2817 :     static strdist[128];
2818 :     num_to_word(idist, strdist, 127);
2819 :     for( i = INFO_ONE; 0 < i <= MAXPLAYERS; i++ )
2820 :     {
2821 :     if( (i == id || is_user_spectating_player(i, id)) && gHasLjStats[i] )
2822 :     {
2823 :     show_hudmessage(i, "Distance: %f^nMaxSpeed: %f^nPreStrafe: %f^nStrafes: %d^nSync: %d", fDistance, fMaxAirSpeed[id], fMaxGroundSpeed[id], strafes[id], sync );
2824 :    
2825 :     client_print(i, print_console, "Distance: %f MaxSpeed: %f PreStrafe: %f Strafes: %d Sync: %d", fDistance, fMaxAirSpeed[id], fMaxGroundSpeed[id], strafes[id], sync );
2826 :    
2827 :     if( sound == 2 && gHasColorChat[i] )
2828 :     client_cmd(i, "speak ^"vox/%s uniform(e30) it south(e15)^"", strdist);
2829 :    
2830 :     if( i != id && (kz_ljs_beam == 1 || kz_ljs_beam == 2) )
2831 :     {
2832 :     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, i);
2833 :     write_byte (0);
2834 :     write_coord(floatround(vJumpedAt2[0]));
2835 :     write_coord(floatround(vJumpedAt2[1]));
2836 :     write_coord(floatround(vJumpedAt2[2]));
2837 :     write_coord(floatround(vTraceEnd[0]));
2838 :     write_coord(floatround(vTraceEnd[1]));
2839 :     write_coord(floatround(vTraceEnd[2]));
2840 :     write_short(gBeam);
2841 :     write_byte(1);
2842 :     write_byte(5);
2843 :     write_byte(30);
2844 :     write_byte(20);
2845 :     write_byte(0);
2846 :     write_byte(random_num(32, 255));
2847 :     write_byte(random_num(32, 255));
2848 :     write_byte(random_num(32, 255));
2849 :     write_byte(200);
2850 :     write_byte(200);
2851 :     message_end();
2852 :     }
2853 :     }
2854 :     }
2855 :    
2856 :     static Float:cj_dif, Float:max_cj, Float:leet_cj, Float:pro_cj, Float:good_cj, ljtop;
2857 :     cj_dif = get_cvar_float("kz_cj_dif");
2858 :     max_cj = get_cvar_float("kz_max_lj") + cj_dif;
2859 :     leet_cj = get_cvar_float("kz_leet_lj") + cj_dif;
2860 :     pro_cj = get_cvar_float("kz_pro_lj") + cj_dif;
2861 :     good_cj = get_cvar_float("kz_good_lj") + cj_dif;
2862 :     ljtop = get_cvar_num("kz_lj_top");
2863 :     if( fDistance < max_cj
2864 :     && !(fDistance < leet_cj)
2865 :     && !(cj_dif > leet_cj)
2866 :     && (ljtop == 1
2867 :     || ljtop == 3) )
2868 :     {
2869 :     static color, name[33];
2870 :     color = get_cvar_num("kz_leet_cj_clr");
2871 :     get_user_name(id, name, 31);
2872 :     for( i = INFO_ONE; 0 < i <= MAXPLAYERS; i++ )
2873 :     {
2874 :     if( i == id || is_user_spectating_player(i, id) || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
2875 :     {
2876 :     if( color < 6 && color > 0 )
2877 :     {
2878 :     switch(color)
2879 :     {
2880 :     case 1: ColorChat(i, RED, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2881 :     case 2: ColorChat(i, GREEN, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2882 :     case 3: ColorChat(i, BLUE, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2883 :     case 4: ColorChat(i, GREY, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2884 :     case 5: ColorChat(i, TEAM_COLOR, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2885 :     }
2886 :     }
2887 :     else
2888 :     client_print(i, print_chat, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2889 :    
2890 :     if( sound == 1 )
2891 :     {
2892 :     if( i == id || is_user_spectating_player(i, id) )
2893 :     client_cmd(i, "speak misc/mod_wickedsick");
2894 :     else
2895 :     client_cmd(i, "speak misc/mod_godlike");
2896 :     }
2897 :     }
2898 :     }
2899 :     }
2900 :    
2901 :     else if( fDistance < max_cj
2902 :     && !(fDistance < pro_cj)
2903 :     && !(cj_dif > pro_cj)
2904 :     && (ljtop == 1
2905 :     || ljtop == 3) )
2906 :     {
2907 :     static color, name[33];
2908 :     color = get_cvar_num("kz_pro_cj_clr");
2909 :     get_user_name(id, name, 31);
2910 :     for( i = INFO_ONE; 0 < i <= MAXPLAYERS; i++ )
2911 :     {
2912 :     if( i == id || is_user_spectating_player(i, id) || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
2913 :     {
2914 :     if( color < 6 && color > 0 )
2915 :     {
2916 :     switch(color)
2917 :     {
2918 :     case 1: ColorChat(i, RED, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2919 :     case 2: ColorChat(i, GREEN, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2920 :     case 3: ColorChat(i, BLUE, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2921 :     case 4: ColorChat(i, GREY, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2922 :     case 5: ColorChat(i, TEAM_COLOR, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2923 :     }
2924 :     }
2925 :     else
2926 :     client_print(i, print_chat, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2927 :     }
2928 :     if( (i == id || is_user_spectating_player(i, id)) && sound == 1 )
2929 :     client_cmd(i, "speak misc/perfect");
2930 :     }
2931 :     }
2932 :    
2933 :     else if( fDistance < max_cj
2934 :     && !(fDistance < good_cj)
2935 :     && !(cj_dif > good_cj)
2936 :     && (ljtop == 1
2937 :     || ljtop == 3) )
2938 :     {
2939 :     static color, name[33];
2940 :     color = get_cvar_num("kz_good_cj_clr");
2941 :     get_user_name(id, name, 31);
2942 :     for( i = INFO_ONE; 0 < i <= MAXPLAYERS; i++ )
2943 :     {
2944 :     if( i == id || is_user_spectating_player(i, id) || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) )
2945 :     {
2946 :     if( color < 6 && color > 0 )
2947 :     {
2948 :     switch(color)
2949 :     {
2950 :     case 1: ColorChat(i, RED, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2951 :     case 2: ColorChat(i, GREEN, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2952 :     case 3: ColorChat(i, BLUE, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2953 :     case 4: ColorChat(i, GREY, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2954 :     case 5: ColorChat(i, TEAM_COLOR, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2955 :     }
2956 :     }
2957 :     else
2958 :     client_print(i, print_chat, "[XJ] %s jumped %.3f units with cj!", name, fDistance);
2959 :     }
2960 :     if( (i == id || is_user_spectating_player(i, id)) && sound == 1 )
2961 :     client_cmd(i, "speak misc/impressive");
2962 :     }
2963 :     }
2964 :     }
2965 :     fMaxAirSpeed[id] = 0.0;
2966 :     fMaxGroundSpeed[id] = 0.0;
2967 :     cjumped[id] = false;
2968 :     gInAir[id] = false;
2969 :     }
2970 :     else if( flags&FL_ONGROUND
2971 :     && gInAir[id] == false )
2972 :     {
2973 :     pev(id, pev_velocity, vVelocity);
2974 :     vVelocity[2]-=vVelocity[2];
2975 :     if( vector_length(vVelocity) > 277
2976 :     && doubleducked[id] == false )
2977 :     set_task(0.5,"gocheck", id);
2978 :     gInAir[id] = false;
2979 :     fMaxAirSpeed[id] = 0.0;
2980 :     fMaxGroundSpeed[id] = 0.0;
2981 :     cjumped[id] = false;
2982 :     }
2983 :    
2984 :     static i;
2985 :     for( i = INFO_ZERO; i < 127; i++ )
2986 :     {
2987 :     pev(id, pev_origin, vOrigin);
2988 :    
2989 :     if( vBeamPos[id][i][0] == 0
2990 :     && vBeamPos[id][i][1] == 0
2991 :     && vBeamPos[id][i][2] == 0 )
2992 :     {
2993 :     vBeamPos[id][i][0] = vOrigin[0];
2994 :     vBeamPos[id][i][1] = vOrigin[1];
2995 :     vBeamPos[id][i][2] = vOrigin[2];
2996 :     if( doubleducked[id] == true || induck[id] == true )
2997 :     {
2998 :     vBeamPosStatus[id][i] = vOrigin[0]-vOrigin[0]-1;
2999 :     }
3000 :     else if( is_in_duck(id) )
3001 :     vBeamPosStatus[id][i] = vOrigin[0]-vOrigin[0]+1;
3002 :     else
3003 :     vBeamPosStatus[id][i] = vOrigin[0]-vOrigin[0];
3004 :     i=127;
3005 :     }
3006 :     }
3007 :    
3008 :     if( flags&FL_ONGROUND )
3009 :     {
3010 :     static ClassName[32];
3011 :     pev(pev(id, pev_groundentity), pev_classname, ClassName, 32);
3012 :     if( equal(ClassName, "func_train") || equal(ClassName, "func_door") || equal(ClassName, "func_door_rotating") )
3013 :     {
3014 :     gocheck(id);
3015 :     set_task(0.4,"gocheck", id);
3016 :     }
3017 :     if( OnGround[id] == false )
3018 :     {
3019 :     pev(id, pev_origin, vOrigin);
3020 :     if( doubleducked[id] == false
3021 :     && !(cjumped[id] == true
3022 :     && buttons&IN_JUMP
3023 :     && !(oldbuttons&IN_JUMP)) )
3024 :     set_task(0.4,"gocheck", id);
3025 :     else if( doubleducked[id] == true
3026 :     && !(vOrigin[2] == vDuckedAt[id][2]) )
3027 :     set_task(0.5,"gocheck", id);
3028 :     OnGround[id] = true;
3029 :     }
3030 :     }
3031 :     if( buttons&IN_DUCK
3032 :     && flags&FL_ONGROUND
3033 :     && gInAir[id] == false )
3034 :     {
3035 :     if( induck[id] == false )
3036 :     {
3037 :     cducked[id] = true;
3038 :     induck[id] = true;
3039 :     set_task(0.1,"testcjstart", id);
3040 :    
3041 :     pev(id, pev_origin, vOrigin);
3042 :     vDuckedAt[id][0] = vOrigin[0];
3043 :     vDuckedAt[id][1] = vOrigin[1];
3044 :     vDuckedAt[id][2] = vOrigin[2];
3045 :    
3046 :     static i;
3047 :     for( i = INFO_ZERO; i < 128; i++ )
3048 :     {
3049 :     vBeamPos[id][i][0] = vOrigin[0]-vOrigin[0];
3050 :     vBeamPos[id][i][1] = vOrigin[1]-vOrigin[1];
3051 :     vBeamPos[id][i][2] = vOrigin[2]-vOrigin[2];
3052 :     }
3053 :     }
3054 :     }
3055 :     else if( oldbuttons&IN_DUCK )
3056 :     {
3057 :     induck[id] = false;
3058 :     if( cducked[id] == true && !is_in_duck(id) )
3059 :     {
3060 :     set_task(0.3,"ddend", id);
3061 :     doubleducked[id] = true;
3062 :     cducked[id] = false;
3063 :     }
3064 :     }
3065 :     if( !(flags&FL_ONGROUND) )
3066 :     OnGround[id] = false;
3067 :     }
3068 :     return FMRES_IGNORED;
3069 :     }
3070 :    
3071 :     public fwdPlayerPostThink(id)
3072 :     {
3073 :     if( is_user_alive(id) && get_cvar_num("kz_ljs_enabled") )
3074 :     {
3075 :     static buttons;
3076 :     buttons = pev(id, pev_button);
3077 :    
3078 :     pev(id, pev_angles, angle);
3079 :     if( old_angle1[id] > angle[1] )
3080 :     {
3081 :     turning_left[id] = false;
3082 :     turning_right[id] = true;
3083 :     }
3084 :     else if( old_angle1[id] < angle[1] )
3085 :     {
3086 :     turning_left[id] = true;
3087 :     turning_right[id] = false;
3088 :     }
3089 :     else
3090 :     {
3091 :     turning_left[id] = false;
3092 :     turning_right[id] = false;
3093 :     }
3094 :     if( straifing_aw[id] == false
3095 :     && (buttons&IN_MOVELEFT
3096 :     || buttons&IN_FORWARD)
3097 :     && (turning_left[id] == true
3098 :     || turning_right[id] == true )
3099 :     && !(buttons&IN_MOVERIGHT
3100 :     || buttons&IN_BACK) )
3101 :     {
3102 :     straifing_aw[id] = true;
3103 :     straifing_sd[id] = false;
3104 :     strafes[id] += INFO_ONE;
3105 :     }
3106 :     else if( straifing_sd[id] == false
3107 :     && (buttons&IN_MOVERIGHT
3108 :     || buttons&IN_BACK)
3109 :     && (turning_left[id] == true
3110 :     || turning_right[id] == true )
3111 :     && !(buttons&IN_MOVELEFT
3112 :     || buttons&IN_FORWARD) )
3113 :     {
3114 :     straifing_aw[id] = false;
3115 :     straifing_sd[id] = true;
3116 :     strafes[id] += INFO_ONE;
3117 :     }
3118 :     if( pev(id, pev_flags)&FL_ONGROUND
3119 :     && (gInAir[id] == true
3120 :     || OnGround[id] == false) )
3121 :     fwdPlayerPreThink(id);
3122 :     }
3123 :     }
3124 :    
3125 :     public fwdTouch(ent, id)
3126 :     {
3127 :     static ClassName[32];
3128 :     if( pev_valid(ent) )
3129 :     {
3130 :     pev(ent, pev_classname, ClassName, 31);
3131 :     }
3132 :     static ClassName2[32];
3133 :     if( pev_valid(id) )
3134 :     {
3135 :     pev(id, pev_classname, ClassName2, 31);
3136 :     }
3137 :     if( equal(ClassName2, "player") )
3138 :     {
3139 :     if( equal(ClassName, "trigger_teleport") || equal(ClassName, "trigger_push") || equal(ClassName, "func_train") || equal(ClassName, "func_door") || equal(ClassName, "func_door_rotating") )
3140 :     {
3141 :     gocheck(id);
3142 :     set_task(0.4,"gocheck", id);
3143 :     }
3144 :     }
3145 :     }
3146 :    
3147 :     get_spectated_player(spectator)
3148 :     {
3149 :     static player;
3150 :    
3151 :     if( !pev_valid(spectator) || !pev_valid(player) )
3152 :     return 0;
3153 :     if( !is_user_connected(spectator) || !is_user_connected(player) )
3154 :     return 0;
3155 :     if( is_user_alive(spectator) || !is_user_alive(player) )
3156 :     return 0;
3157 :     if( pev(spectator, pev_deadflag) != 2 )
3158 :     return 0;
3159 :    
3160 :     player = pev(spectator, pev_iuser2);
3161 :    
3162 :     static specmode;
3163 :     specmode = pev(spectator, pev_iuser1);
3164 :     if( specmode == 1 || specmode == 2 || specmode == 4 )
3165 :     return player;
3166 :     return 0;
3167 :     }
3168 :    
3169 :     is_user_spectating_player(spectator, player)
3170 :     {
3171 :     if( !pev_valid(spectator) || !pev_valid(player) )
3172 :     return 0;
3173 :     if( !is_user_connected(spectator) || !is_user_connected(player) )
3174 :     return 0;
3175 :     if( is_user_alive(spectator) || !is_user_alive(player) )
3176 :     return 0;
3177 :     if( pev(spectator, pev_deadflag) != 2 )
3178 :     return 0;
3179 :     if( pev(spectator, pev_iuser2) != player )
3180 :     return 0;
3181 :    
3182 :     static specmode;
3183 :     specmode = pev(spectator, pev_iuser1);
3184 :     if( specmode == 1 || specmode == 2 || specmode == 4 )
3185 :     return 1;
3186 :     return 0;
3187 :     }
3188 :    
3189 :     is_in_duck(player)
3190 :     {
3191 :     // supplied with invalid entities
3192 :     if( !pev_valid(player) )
3193 :     return 0;
3194 :    
3195 :     // retrieve absolutes
3196 :     static Float:absmin[3], Float:absmax[3];
3197 :    
3198 :     pev(player, pev_absmin, absmin);
3199 :     pev(player, pev_absmax, absmax);
3200 :    
3201 :     absmin[2]+=64.0;
3202 :    
3203 :     if( absmin[2] < absmax[2] )
3204 :     {
3205 :     return 0;
3206 :     }
3207 :     return 1;
3208 :     }

Contact
ViewVC Help
Powered by ViewVC 1.0.4