Spoiler
#include <amxmodx> #include <amxmisc> #include <colorchat> #include <fakemeta> #include <cstrike> #define INFO_ONE 1 #define INFO_ZERO 0 #define NSTRAFES 14 new pluginstatus; new strafes[33]; new pre_type[33][32]; new strafe_stat_sync[33][NSTRAFES][2]; new bool:StrafeStat[33]; new bool:fallDown[33]; new bool:possible_lj_script[33][2]; new bool:gHasColorChat[33]; new bool:gHasSpeed[33]; new bool:gHasLjStats[33]; new bool:gInAir[33]; new bool:cjumped[33]; new bool:doubleducked[33]; new bool:cducked[33]; new bool:induck[33]; new bool:OnGround[33]; new bool:turning_right[33]; new bool:turning_left[33]; new bool:strafing_aw[33]; new bool:strafing_sd[33]; new Float:strafe_stat_time[33][NSTRAFES]; new Float:strafe_stat_speed[33][NSTRAFES][2]; new Float:TempSpeed[33]; new Float:old_angle1[33]; new Float:angle[3]; new Float:vFramePos[33][2][3]; new Float:vFrameSpeed[33][2][3]; new Float:vDuckedAt[33][3]; new Float:vJumpedAt[33][3]; new Float:vJumpedAt2[3]; new Float:xDistance; new Float:yDistance; new Float:fDistance; new Float:fDistance1; new Float:fDistance2; new Float:rDistance[2]; new Float:rLandPos[3]; new Float:vOrigin[3]; new Float:vCurrentOrigin[33][3]; new Float:vOldOrigin[33][3]; new Float:vOldOrigin2[33]; new Float:vTraceEnd[3]; new Float:fMaxAirSpeed[33]; new Float:fMaxGroundSpeed[33]; new Float:vVelocity[3]; new Float:oldvVelocity[33][3]; new Float:fSpeed; new Float:gSpeed; new Float:OldSpeed[33]; new Float:frame2time; new Float:jumptime[33]; new Float:lasttime[33]; new kz_ljs_enabled; new kz_good_lj; new kz_pro_lj; new kz_leet_lj; new kz_min_lj; new kz_max_lj; new kz_cj_dif; new kz_ljs_connectenabler; new kz_ljs_viscmds; new kz_ljs_tops; new edgefriction; new mp_footsteps; new sv_cheats; new sv_gravity; new sv_airaccelerate; new sv_maxspeed; new sv_stepsize; new sv_maxvelocity; public plugin_init() { register_plugin("LjStats", "5.2", "Fatalis & Numb"); register_dictionary("common.txt"); register_forward(FM_Touch, "fwdTouch", 1); register_forward(FM_PlayerPreThink, "fwdPlayerPreThink", 0); register_forward(FM_PlayerPostThink, "fwdPlayerPostThink", 0); register_forward(FM_StartFrame, "fwdStartFrame", 0); kz_ljs_enabled = register_cvar("kz_ljs_enabled", "1"); // enables/disables the plugin kz_good_lj = register_cvar("kz_good_lj", "240.0"); // good longjumps kz_pro_lj = register_cvar("kz_pro_lj", "245.0"); // professional longjumps kz_leet_lj = register_cvar("kz_leet_lj", "250.0"); // leet longjump kz_min_lj = register_cvar("kz_min_lj", "215.0"); // minimal longjump kz_max_lj = register_cvar("kz_max_lj", "260.0"); // maximal longjump kz_cj_dif = register_cvar("kz_cj_dif", "10.0"); // difrence between lj and cj kz_ljs_connectenabler = register_cvar("kz_ljs_connectenabler", "ab"); // What is enabled at connect (0=nothing, a=colorchat, b=ljstats, c=speed) kz_ljs_viscmds = register_cvar("kz_ljs_viscmds", "1"); // Do you want say commands to be apeard on the chat? kz_ljs_tops = register_cvar("kz_ljs_tops", "0"); // LongJump top (0=Nothing, 1=ColorChat, 2=top, 3=top+ColorChat) edgefriction = get_cvar_pointer("edgefriction"); mp_footsteps = get_cvar_pointer("mp_footsteps"); sv_cheats = get_cvar_pointer("sv_cheats"); sv_gravity = get_cvar_pointer("sv_gravity"); sv_airaccelerate = get_cvar_pointer("sv_airaccelerate"); sv_maxspeed = get_cvar_pointer("sv_maxspeed"); sv_stepsize = get_cvar_pointer("sv_stepsize"); sv_maxvelocity = get_cvar_pointer("sv_maxvelocity"); register_clcmd("say /colorchat", "cmdColorChat"); register_clcmd("say /speed", "cmdSpeed"); } public gocheck(id) { gInAir[id] = false; cjumped[id] = false; doubleducked[id] = false; } public ddend(id) doubleducked[id] = false; public testcjstart(id) cducked[id] = false; public client_putinserver(id) { if( task_exists(id+234490, 0) ) remove_task(id+234490, 0); set_task(0.1, "check_prestrafe_type", id+234490, "", 0, "b", 0); static connectenabler[6]; get_pcvar_string(kz_ljs_connectenabler, connectenabler, 5); format(connectenabler, 5, "_%s", connectenabler); if( contain(connectenabler, "a") > 0 ) gHasColorChat[id] = true; else gHasColorChat[id] = false; if( contain(connectenabler, "b") > 0 ) gHasLjStats[id] = true; else gHasLjStats[id] = false; if( contain(connectenabler, "c") > 0 ) { gHasSpeed[id] = true; set_task(0.1, "tskSpeed", id+334490, "", 0, "b", 0); } else gHasSpeed[id] = false; StrafeStat[id] = true; turning_right[id] = false; turning_left[id] = false; strafing_aw[id] = false; strafing_sd[id] = false; cducked[id] = false; cjumped[id] = false; doubleducked[id]=false; induck[id] = false; OnGround[id] = false; possible_lj_script[id][0] = false; possible_lj_script[id][1] = false; } public client_disconnect(id) { if( task_exists(id+234490, 0) ) remove_task(id+234490, 0); StrafeStat[id] = true; gHasColorChat[id] = false; gHasLjStats[id] = false; gHasSpeed[id] = false; turning_right[id] = false; turning_left[id] = false; strafing_aw[id] = false; strafing_sd[id] = false; OnGround[id] = false; cducked[id] = false; doubleducked[id] = false; cjumped[id] = false; induck[id] = false; possible_lj_script[id][0] = false; possible_lj_script[id][1] = false; if( task_exists(id+334490, 0) ) remove_task(id+334490, 0); if( task_exists(id+434490, 0) ) remove_task(id+434490, 0); } public check_prestrafe_type(id) { id -= 234490; if( is_user_alive(id) ) { static flags, buttons, moving; flags = pev(id, pev_flags); buttons = pev(id, pev_button); if( flags&FL_ONGROUND && gInAir[id] && get_gametime() > (jumptime[id]+0.1) ) fwdPlayerPreThink(id); if( (buttons&IN_FORWARD || buttons&IN_BACK || buttons&IN_MOVERIGHT || buttons&IN_MOVELEFT) && !(buttons&IN_DUCK) ) moving = INFO_ONE; else moving = INFO_ZERO; if( moving && !(doubleducked[id]) && !(cjumped[id]) && flags&FL_ONGROUND && (turning_right[id] || turning_left[id]) ) { if( buttons&IN_FORWARD && buttons&IN_BACK ) moving = INFO_ZERO; if( buttons&IN_MOVELEFT && buttons&IN_MOVERIGHT ) moving = INFO_ZERO; if( !(moving) ) pre_type[id] = "key error"; } else { moving = 0; } if( moving ) { if( buttons&IN_FORWARD ) { if( buttons&IN_MOVERIGHT ) { if( turning_right[id] ) pre_type[id] = "right"; else pre_type[id] = "right sw"; } else if( buttons&IN_MOVELEFT ) { if( turning_left[id] ) pre_type[id] = "left"; else pre_type[id] = "left sw"; } else { if( turning_right[id] ) pre_type[id] = "right (1 key)"; else pre_type[id] = "left (1 key)"; } } else if( buttons&IN_BACK ) { if( buttons&IN_MOVERIGHT ) { if( turning_left[id] ) pre_type[id] = "bw right"; else pre_type[id] = "bw right sw"; } else if( buttons&IN_MOVELEFT ) { if( turning_right[id] ) pre_type[id] = "bw left"; else pre_type[id] = "bw left sw"; } else { if( turning_left[id] ) pre_type[id] = "bw right (1 key)"; else pre_type[id] = "bw left (1 key)"; } } else if( buttons&IN_MOVERIGHT ) { if( turning_right[id] ) pre_type[id] = "bw right sw (1 key)"; else pre_type[id] = "left sw (1 key)"; } else if( buttons&IN_MOVELEFT ) { if( turning_left[id] ) pre_type[id] = "bw left sw (1 key)"; else pre_type[id] = "right sw (1 key)"; } else pre_type[id] = "unknown error"; } } } public tskFps(id) { id-=434490; client_cmd(id, "developer 0;fps_max 101"); } public cmdColorChat(id) { if( get_pcvar_num(kz_ljs_enabled) && !gHasColorChat[id] ) { gHasColorChat[id] = true; ColorChat(id, GREEN, "[LjStats]^x01 ColorChat wlaczony, aby wylaczyc, wpisz^x03 /colorchat"); } else if( get_pcvar_num(kz_ljs_enabled) ) { gHasColorChat[id] = false; ColorChat(id, GREEN, "[LjStats]^x01 ColorChat wylaczony, aby wlaczyc, wpisz^x03 /colorchat"); } return ( (get_pcvar_num(kz_ljs_viscmds))?PLUGIN_CONTINUE:PLUGIN_HANDLED ); } public cmdSpeed(id) { if( get_pcvar_num(kz_ljs_enabled) && !gHasSpeed[id] ) { gHasSpeed[id] = true; set_task(0.1, "tskSpeed", id+334490, "", 0, "b", 0); ColorChat(id, GREEN, "[LjStats]^x01 Speedometer wlaczony, aby wylaczyc, wpisz^x03 /speed"); } else if( get_pcvar_num(kz_ljs_enabled) ) { gHasSpeed[id] = false; if( task_exists(id+334490, 0) ) remove_task(id+334490, 0); ColorChat(id, GREEN, "[LjStats]^x01 Speedometer wylaczony, aby wlaczyc, wpisz^x03 /speed"); } return ( (get_pcvar_num(kz_ljs_viscmds))?PLUGIN_CONTINUE:PLUGIN_HANDLED ); } public tskSpeed(taskid) { taskid-=334490; static alive, aliveflags, spectatedplayer, specflags; alive = is_user_alive(taskid); aliveflags = pev(taskid, pev_flags); if( (alive > 0) && get_pcvar_num(kz_ljs_enabled) ) { if( alive ) { pev(taskid, pev_velocity, vVelocity); if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER ) vVelocity[2]-=vVelocity[2]; } else { pev(spectatedplayer, pev_velocity, vVelocity); if( specflags&FL_ONGROUND && specflags&FL_INWATER ) vVelocity[2]-=vVelocity[2]; } set_hudmessage(255, 255, 255, -1.0, 0.65, 0, 0.0, 0.2, 0.0, 0.0, 3); if( vVelocity[2] != 0 ) vVelocity[2]-=vVelocity[2]; gSpeed = vector_length(vVelocity); if( alive ) { pev(taskid, pev_velocity, vVelocity); if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER ) vVelocity[2]-=vVelocity[2]; } else { pev(spectatedplayer, pev_velocity, vVelocity); if( specflags&FL_ONGROUND && specflags&FL_INWATER ) vVelocity[2]-=vVelocity[2]; } show_hudmessage(taskid, "%d units/second^n%d velocity", floatround(vector_length(vVelocity), floatround_floor), floatround(gSpeed, floatround_floor)); } } public fwdStartFrame() { static id, spectatedplayer, alive, aliveflags, specflags; for( id = INFO_ONE; id < 33; id++ ) { if( pev_valid(id) && pluginstatus ) { alive = is_user_alive(id); aliveflags = pev(id, pev_flags); if( alive ) { if( alive ) { pev(id, pev_velocity, vVelocity); if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER ) vVelocity[2]-=vVelocity[2]; } else { pev(spectatedplayer, pev_velocity, vVelocity); if( specflags&FL_ONGROUND && specflags&FL_INWATER ) vVelocity[2]-=vVelocity[2]; } if( gHasSpeed[id] ) { if( task_exists(id+334490, 0) ) remove_task(id+334490, 0); if( vVelocity[2] != 0 ) vVelocity[2]-=vVelocity[2]; gSpeed = vector_length(vVelocity); if( alive ) { pev(id, pev_velocity, vVelocity); if( aliveflags&FL_ONGROUND && aliveflags&FL_INWATER ) vVelocity[2]-=vVelocity[2]; } else { pev(spectatedplayer, pev_velocity, vVelocity); if( specflags&FL_ONGROUND && specflags&FL_INWATER ) vVelocity[2]-=vVelocity[2]; } show_hudmessage(id, "%d units/second^n%d velocity", floatround(vector_length(vVelocity), floatround_floor), floatround(gSpeed, floatround_floor)); } else if( gHasSpeed[id] && !task_exists(id+334490, 0) ) { set_task(0.1, "tskSpeed", id+334490, "", 0, "b", 0); } } } } return FMRES_IGNORED; } public fwdPlayerPreThink(id) { if( is_user_alive(id) && get_pcvar_num(kz_ljs_enabled) ) { if(cs_get_user_team(id) == CS_TEAM_T) { static flags, buttons, oldbuttons; flags = pev(id, pev_flags); buttons = pev(id, pev_button); oldbuttons = pev(id, pev_oldbuttons); static Float:fGravity; pev(id, pev_gravity, fGravity); pev(id, pev_angles, angle); old_angle1[id] = angle[1]; if( gInAir[id] == true && !(flags&FL_ONGROUND) ) { static i; for( i = INFO_ZERO; i < 2; i++ ) { if( (vFramePos[id][i][0] == 0 && vFramePos[id][i][1] == 0 && vFramePos[id][i][2] == 0 && vFrameSpeed[id][i][0] == 0 && vFrameSpeed[id][i][1] == 0 && vFrameSpeed[id][i][2] == 0) || (i == 1) ) { pev(id, pev_origin, vOrigin); vFramePos[id][i][0] = vOrigin[0]; vFramePos[id][i][1] = vOrigin[1]; vFramePos[id][i][2] = vOrigin[2]; pev(id, pev_velocity, vVelocity); vFrameSpeed[id][i][0] = vVelocity[0]; vFrameSpeed[id][i][1] = vVelocity[1]; vFrameSpeed[id][i][2] = vVelocity[2]; i=2; } } } pev(id, pev_velocity, vVelocity); if( flags&FL_ONGROUND && flags&FL_INWATER ) vVelocity[2] = 0.0; fSpeed = vector_length(vVelocity); pev(id, pev_origin, vOrigin); fDistance = get_distance_f(vOldOrigin[id], vOrigin); pev(id, pev_origin, vOldOrigin[id]); pev(id, pev_velocity, vVelocity); if( vVelocity[2] != 0 ) vVelocity[2]-=vVelocity[2]; if( vector_length(vVelocity) > (fMaxGroundSpeed[id] + 105.0) || pev(id, pev_movetype) != MOVETYPE_WALK || pev(id, pev_maxspeed) > 250.0 || fGravity != 1.0 || get_pcvar_num(edgefriction) != 2 || get_pcvar_num(mp_footsteps) != 1 || get_pcvar_num(sv_cheats) != 0 || get_pcvar_num(sv_gravity) != 800 || get_pcvar_num(sv_airaccelerate) != 100 || get_pcvar_num(sv_maxspeed) != 320 || get_pcvar_num(sv_stepsize) != 18 || get_pcvar_num(sv_maxvelocity) != 2000 || pev(id, pev_waterlevel) >= 2 || fDistance > 20 ) { gocheck(id); return FMRES_IGNORED; } if( !(flags&FL_ONGROUND) ) lasttime[id] = get_gametime(); if( gInAir[id]) { if (((vOrigin[2] +18.0 - vOldOrigin2[id]) < 0) && !(flags&FL_ONGROUND) ) { fallDown[id] = true; if( is_in_duck(id) ) { vOrigin[2]-=18.0; vOldOrigin2[id]-=18.0; } static Float:koeff1; koeff1 = (vOldOrigin2[id]-vCurrentOrigin[id][2])/(vOrigin[2]-vCurrentOrigin[id][2]); vCurrentOrigin[id][2] = vOldOrigin2[id]; vCurrentOrigin[id][0] = koeff1*(vOrigin[0]-vCurrentOrigin[id][0])+vCurrentOrigin[id][0]; vCurrentOrigin[id][1] = koeff1*(vOrigin[1]-vCurrentOrigin[id][1])+vCurrentOrigin[id][1]; } else { fallDown[id] = false; vCurrentOrigin[id] = vOrigin; } pev(id, pev_velocity, vVelocity); if( vVelocity[2] != 0 ) vVelocity[2]-=vVelocity[2]; gSpeed = vector_length(vVelocity); if( gSpeed > fMaxAirSpeed[id] ) { if (strafes[id] < NSTRAFES) { strafe_stat_speed[id][strafes[id]][0] += gSpeed - fMaxAirSpeed[id]; } fMaxAirSpeed[id] = gSpeed; } if ((gSpeed < TempSpeed[id]) && (strafes[id] < NSTRAFES)) { strafe_stat_speed[id][strafes[id]][1] += TempSpeed[id] - gSpeed; } TempSpeed[id] = gSpeed; } if( buttons&IN_JUMP && !(oldbuttons&IN_JUMP) && flags&FL_ONGROUND && gInAir[id] == false ) { set_task(0.8,"gocheck", id); jumptime[id] = get_gametime(); gInAir[id] = true; pev(id, pev_origin, vOrigin); vOldOrigin2[id] = vOrigin[2]; fallDown[id] = false; fMaxGroundSpeed[id] = fSpeed; OldSpeed[id] = fSpeed; fMaxAirSpeed[id] = fSpeed; pev(id, pev_velocity, oldvVelocity[id]); oldvVelocity[id][2]-=oldvVelocity[id][2]; vJumpedAt[id][0] = vOrigin[0]; vJumpedAt[id][1] = vOrigin[1]; vJumpedAt[id][2] = vOrigin[2]; if( doubleducked[id] && vOrigin[2] == vDuckedAt[id][2] ) cjumped[id] = true; else cjumped[id] = false; doubleducked[id] = false; strafes[id] = INFO_ZERO; TempSpeed[id] = 0.0; static i; for( i = INFO_ZERO; i < NSTRAFES; i++ ) { strafe_stat_speed[id][i][0] = 0.0; strafe_stat_speed[id][i][1] = 0.0; strafe_stat_sync[id][i][0] = INFO_ZERO; strafe_stat_sync[id][i][1] = INFO_ZERO; strafe_stat_time[id][i] = 0.0; } turning_right[id] = false; turning_left[id] = false; strafing_aw[id] = false; strafing_sd[id] = false; for( i = INFO_ZERO; i < 2; i++ ) { vFramePos[id][i][0] = 0.0; vFramePos[id][i][1] = 0.0; vFramePos[id][i][2] = 0.0; vFrameSpeed[id][i][0] = 0.0; vFrameSpeed[id][i][1] = 0.0; vFrameSpeed[id][i][2] = 0.0; } } else if( ( fallDown[id] || flags&FL_ONGROUND ) && gInAir[id]) { set_task(0.5,"gocheck", id); gInAir[id] = false; pev(id, pev_origin, vOrigin); if (fallDown[id] == true) { vOrigin[0]= vCurrentOrigin[id][0]; vOrigin[1]= vCurrentOrigin[id][1]; vOrigin[2]= vCurrentOrigin[id][2]; } fDistance1 = get_distance_f(vJumpedAt[id], vOrigin)+32.0625; rLandPos[2] = vFrameSpeed[id][0][2] * vFrameSpeed[id][0][2] + (2 * get_pcvar_float(sv_gravity) * (vFramePos[id][0][2] - vOrigin[2])); rDistance[0] = (floatsqroot(rLandPos[2]) * -1) - vFrameSpeed[id][1][2]; rDistance[1] = get_pcvar_float(sv_gravity)*-1; frame2time = floatdiv(rDistance[0], rDistance[1]); if( vFrameSpeed[id][1][0] < 0 ) vFrameSpeed[id][1][0] = vFrameSpeed[id][1][0]*-1; rDistance[0] = frame2time*vFrameSpeed[id][1][0]; if( vFrameSpeed[id][1][1] < 0 ) vFrameSpeed[id][1][1] = vFrameSpeed[id][1][1]*-1; rDistance[1] = frame2time*vFrameSpeed[id][1][1]; if( vFramePos[id][1][0] < vOrigin[0] ) rLandPos[0] = vFramePos[id][1][0] + rDistance[0]; else rLandPos[0] = vFramePos[id][1][0] - rDistance[0]; if( vFramePos[id][1][1] < vOrigin[1] ) rLandPos[1] = vFramePos[id][1][1] + rDistance[1]; else rLandPos[1] = vFramePos[id][1][1] - rDistance[1]; if( is_in_duck(id) ) vOrigin[2]+=18.0; rLandPos[2] = vOrigin[2]; frame2time += (lasttime[id]-jumptime[id]); if( vOrigin[2] == vJumpedAt[id][2] ) { if( is_in_duck(id) && !(frame2time > 0.71 && frame2time < 0.77) ) vOrigin[2] = vOrigin[2]*-1; else if( !(is_in_duck(id)) && !(frame2time > 0.65 && frame2time < 0.70) ) vOrigin[2] = vOrigin[2]*-1; } fDistance2 = get_distance_f(vJumpedAt[id], rLandPos)+32.0625; if( fDistance1 > fDistance2 ) { fDistance = fDistance2; vOrigin[0] = rLandPos[0]; vOrigin[1] = rLandPos[1]; } else fDistance = fDistance1; vJumpedAt2[2] = vJumpedAt[id][2]-34.0; vTraceEnd[2] = vOrigin[2]-34.0; vJumpedAt2[0] = vJumpedAt[id][0]; vTraceEnd[0] = vOrigin[0]; vJumpedAt2[1] = vJumpedAt[id][1]-vJumpedAt[id][1]; vTraceEnd[1] = vOrigin[1]-vOrigin[1]; xDistance = get_distance_f(vJumpedAt2, vTraceEnd); vJumpedAt2[0] = vJumpedAt[id][0]-vJumpedAt[id][0]; vTraceEnd[0] = vOrigin[0]-vOrigin[0]; vJumpedAt2[1] = vJumpedAt[id][1]; vTraceEnd[1] = vOrigin[1]; yDistance = get_distance_f(vJumpedAt2, vTraceEnd); if( vJumpedAt[id][0] > vOrigin[0] ) { vJumpedAt2[0] = vJumpedAt[id][0]+(xDistance*16.03125/fDistance); vTraceEnd[0] = vOrigin[0]-(xDistance*16.03125/fDistance); } else if( vJumpedAt[id][0] < vOrigin[0] ) { vJumpedAt2[0] = vJumpedAt[id][0]-(xDistance*16.03125/fDistance); vTraceEnd[0] = vOrigin[0]+(xDistance*16.03125/fDistance); } else { vJumpedAt2[0] = vJumpedAt[id][0]; vTraceEnd[0] = vOrigin[0]; } if( vJumpedAt[id][1] > vOrigin[1] ) { vJumpedAt2[1] = vJumpedAt[id][1]+(yDistance*16.03125/fDistance); vTraceEnd[1] = vOrigin[1]-(yDistance*16.03125/fDistance); } else if( vJumpedAt[id][1] < vOrigin[1] ) { vJumpedAt2[1] = vJumpedAt[id][1]-(yDistance*16.03125/fDistance); vTraceEnd[1] = vOrigin[1]+(yDistance*16.03125/fDistance); } else { vJumpedAt2[1] = vJumpedAt[id][1]; vTraceEnd[1] = vOrigin[1]; } if( ((vJumpedAt[id][2] == vOrigin[2]) || fallDown[id] ) && fDistance > get_pcvar_float(kz_min_lj) && fMaxGroundSpeed[id] < 279 && cjumped[id] == false && !(fDistance > get_pcvar_float(kz_max_lj)) ) { static sync; static strLen, jj; static strMess[36*NSTRAFES]; static goodSyncTemp, badSyncTemp; strMess[0] = '^0'; strLen = INFO_ZERO; sync = INFO_ZERO; badSyncTemp = INFO_ZERO; goodSyncTemp = INFO_ZERO; static Float:time; static Float:Fulltime; Fulltime = lasttime[id]-jumptime[id]; if(strafes[id] < NSTRAFES) { strafe_stat_time[id][0] = jumptime[id]; strafe_stat_time[id][strafes[id]] = lasttime[id]; for(jj = INFO_ONE;jj <= strafes[id]; jj++) { time = ((strafe_stat_time[id][jj] - strafe_stat_time[id][jj-1])*100) / (Fulltime); if ((strafe_stat_sync[id][jj][0]+strafe_stat_sync[id][jj][1]) > 0) { sync = (strafe_stat_sync[id][jj][0] * 100)/(strafe_stat_sync[id][jj][0]+strafe_stat_sync[id][jj][1]); //using like a buffer } else { sync = 0; } strLen += format(strMess[strLen],(30*NSTRAFES)-strLen-1, " %2d %4.3f %4.3f %3.0f%% %d%%^n", jj, strafe_stat_speed[id][jj][0], strafe_stat_speed[id][jj][1], time, sync); goodSyncTemp += strafe_stat_sync[id][jj][0]; badSyncTemp += strafe_stat_sync[id][jj][1]; } } //standard Sync if( goodSyncTemp > 0 ) sync = (goodSyncTemp*100/(goodSyncTemp+badSyncTemp)); else sync = INFO_ZERO; static i, sound; if ( fallDown[id] || pev(id, pev_maxspeed) != 250.0) { set_hudmessage(255, 0, 109, -1.0, 0.72, 0, 0.0, 5.0, 0.1, 0.1, 2); } else { set_hudmessage(0, 127, 255, -1.0, 0.72, 0, 0.0, 5.0, 0.1, 0.1, 2); } static strdist[128]; num_to_word(floatround(fDistance, floatround_floor), strdist, 127); for( i = INFO_ONE; i < 33; i++ ) { if(i == id && gHasLjStats[i]) { show_hudmessage(i, "Distance: %f^nMaxSpeed: %f (%.3f)^nPreStrafe: %f^nStrafes: %d^nSync: %d%%", fDistance, fMaxAirSpeed[id], fMaxAirSpeed[id] - fMaxGroundSpeed[id], fMaxGroundSpeed[id], strafes[id], sync ); client_print(i, print_console, "Distance: %f MaxSpeed: %f (%.3f) PreStrafe: %f Strafes: %d Sync: %d", fDistance, fMaxAirSpeed[id], fMaxAirSpeed[id] - fMaxGroundSpeed[id], fMaxGroundSpeed[id], strafes[id], sync ); if ( StrafeStat[id] && strLen !=0 ) { if ( fallDown[id] || pev(id, pev_maxspeed) != 250.0) { set_hudmessage(255, 0, 109, 0.70, 0.35, 0, 0.0, 5.0, 0.1, 0.1, 1); } else { set_hudmessage(0, 127, 255, 0.70, 0.35, 0, 0.0, 5.0, 0.1, 0.1, 1); } show_hudmessage(i,"%s",strMess); static strMessHalf[40]; for(jj=INFO_ONE; (jj <= strafes[id]) && (jj < NSTRAFES);jj++) { strtok(strMess,strMessHalf,40,strMess,40*NSTRAFES,'^n'); replace(strMessHalf,40,"^n",""); client_print(i, print_console, "%s", strMessHalf); } } if( possible_lj_script[id][0] || possible_lj_script[id][1] ) { if( possible_lj_script[id][0] && possible_lj_script[id][1] ) client_print(i, print_center, "No ljtop access (possible lj script)"); else client_print(i, print_center, "No ljtop access (possible %s script)", (possible_lj_script[id][0])?"prestrafe":"strafe"); } if( sound == 2 && gHasColorChat[i] && !(fallDown[id]) && pev(id, pev_maxspeed) == 250.0) client_cmd(i, "speak ^"vox/%s uniform(e30) it south(e15)^"", strdist); } } if (!(fallDown[id]) && pev(id, pev_maxspeed) == 250.0) { static Float:max_lj, Float:leet_lj, Float:pro_lj, Float:good_lj, ljtop; max_lj = get_pcvar_float(kz_max_lj); leet_lj = get_pcvar_float(kz_leet_lj); pro_lj = get_pcvar_float(kz_pro_lj); good_lj = get_pcvar_float(kz_good_lj); ljtop = get_pcvar_num(kz_ljs_tops); if( fDistance < max_lj && !(fDistance < leet_lj) && !(0 > leet_lj) && (ljtop == 1 || ljtop == 3) ) { static name[33]; get_user_name(id, name, 31); for( i = INFO_ONE; i < 33; i++ ) { if( possible_lj_script[id][0] || possible_lj_script[id][1] ) break; if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) ) ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 skoczyl^x04 %.3f^x01 [LJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync); } } else if( fDistance < max_lj && !(fDistance < pro_lj) && !(0 > pro_lj) && (ljtop == 1 || ljtop == 3) ) { static name[33]; get_user_name(id, name, 31); for( i = INFO_ONE; i < 33; i++ ) { if( possible_lj_script[id][0] || possible_lj_script[id][1] ) break; if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) ) ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 skoczyl^x04 %.3f^x01 [LJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync); } } else if( fDistance < max_lj && !(fDistance < good_lj) && !(0 > good_lj) && (ljtop == 1 || ljtop == 3) ) { static name[33]; get_user_name(id, name, 31); for( i = INFO_ONE; i < 33; i++ ) { if( possible_lj_script[id][0] || possible_lj_script[id][1] ) break; if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) ) ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 skoczyl^x04 %.3f^x01 [LJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync); } } } } else if( ((vJumpedAt[id][2] == vOrigin[2]) || fallDown[id] ) && fDistance > get_pcvar_float(kz_min_lj) && fMaxGroundSpeed[id] < 303 && cjumped[id] == true && !(fDistance > (get_pcvar_float(kz_max_lj) + 18)) ) { static sync; static strLen, jj; static strMess[36*NSTRAFES]; static goodSyncTemp, badSyncTemp; strMess[0] = '^0'; strLen = INFO_ZERO; sync = INFO_ZERO; badSyncTemp = INFO_ZERO; goodSyncTemp = INFO_ZERO; static Float:time; static Float:Fulltime; Fulltime = lasttime[id]-jumptime[id]; if(strafes[id] < NSTRAFES) { strafe_stat_time[id][0] = jumptime[id]; strafe_stat_time[id][strafes[id]] = lasttime[id]; for(jj = INFO_ONE;jj <= strafes[id]; jj++) { time = ((strafe_stat_time[id][jj] - strafe_stat_time[id][jj-1])*100) / (Fulltime); if ((strafe_stat_sync[id][jj][0]+strafe_stat_sync[id][jj][1]) > 0) { sync = (strafe_stat_sync[id][jj][0] * 100)/(strafe_stat_sync[id][jj][0]+strafe_stat_sync[id][jj][1]); } else { sync = 0; } strLen += format(strMess[strLen],(30*NSTRAFES)-strLen-1, " %2d %4.3f %4.3f %3.0f%% %d%%^n", jj, strafe_stat_speed[id][jj][0], strafe_stat_speed[id][jj][1], time, sync); goodSyncTemp += strafe_stat_sync[id][jj][0]; badSyncTemp += strafe_stat_sync[id][jj][1]; } } //standard Sync if( goodSyncTemp > 0 ) sync = (goodSyncTemp*100/(goodSyncTemp+badSyncTemp)); else sync = INFO_ZERO; static i, sound; if ( fallDown[id] || pev(id, pev_maxspeed) != 250.0) { set_hudmessage(255, 0, 109, -1.0, 0.72, 0, 0.0, 5.0, 0.1, 0.1, 2); } else { set_hudmessage(0, 127, 255, -1.0, 0.72, 0, 0.0, 5.0, 0.1, 0.1, 2); } static strdist[128]; num_to_word(floatround(fDistance, floatround_floor), strdist, 127); for( i = INFO_ONE; i < 33; i++ ) { if(i == id && gHasLjStats[i]) { show_hudmessage(i, "Distance: %f^nMaxSpeed: %f (%.3f)^nPreStrafe: %f^nStrafes: %d^nSync: %d%%", fDistance, fMaxAirSpeed[id], fMaxAirSpeed[id] - fMaxGroundSpeed[id], fMaxGroundSpeed[id], strafes[id], sync ); client_print(i, print_console, "Distance: %f MaxSpeed: %f (%.3f) PreStrafe: %f Strafes: %d Sync: %d", fDistance, fMaxAirSpeed[id], fMaxAirSpeed[id] - fMaxGroundSpeed[id], fMaxGroundSpeed[id], strafes[id], sync ); if ( StrafeStat[id] && strLen !=0 ) { if ( fallDown[id] || pev(id, pev_maxspeed) != 250.0) { set_hudmessage(255, 0, 109, 0.70, 0.35, 0, 0.0, 5.0, 0.1, 0.1, 1); } else { set_hudmessage(0, 127, 255, 0.70, 0.35, 0, 0.0, 5.0, 0.1, 0.1, 1); } show_hudmessage(i,"%s",strMess); static strMessHalf[40]; for(jj=INFO_ONE; (jj <= strafes[id]) && (jj < NSTRAFES);jj++) { strtok(strMess,strMessHalf,40,strMess,40*NSTRAFES,'^n'); replace(strMessHalf,40,"^n",""); client_print(i, print_console, "%s", strMessHalf); } } if( possible_lj_script[id][0] || possible_lj_script[id][1] ) { if( possible_lj_script[id][0] && possible_lj_script[id][1] ) client_print(i, print_center, "No ljtop access (possible cj script)"); else client_print(i, print_center, "No ljtop access (possible %s script)", (possible_lj_script[id][0])?"prestrafe":"strafe"); } if( sound == 2 && gHasColorChat[i] && !(fallDown[id]) && pev(id, pev_maxspeed) == 250.0) client_cmd(i, "speak ^"vox/%s uniform(e30) it south(e15)^"", strdist); } } if (!(fallDown[id]) && pev(id, pev_maxspeed) == 250.0) { static Float:cj_dif, Float:max_cj, Float:leet_cj, Float:pro_cj, Float:good_cj, ljtop; cj_dif = get_pcvar_float(kz_cj_dif); max_cj = get_pcvar_float(kz_max_lj) + 18; leet_cj = get_pcvar_float(kz_leet_lj) + cj_dif; pro_cj = get_pcvar_float(kz_pro_lj) + cj_dif; good_cj = get_pcvar_float(kz_good_lj) + cj_dif; ljtop = get_pcvar_num(kz_ljs_tops); if( fDistance < max_cj && !(fDistance < leet_cj) && !(cj_dif > leet_cj) && (ljtop == 1 || ljtop == 3) ) { static name[33]; get_user_name(id, name, 31); for( i = INFO_ONE; i < 33; i++ ) { if( possible_lj_script[id][0] || possible_lj_script[id][1] ) break; if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) ) ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 skoczyl^x04 %.3f^x01 [CJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync); } } else if( fDistance < max_cj && !(fDistance < pro_cj) && !(cj_dif > pro_cj) && (ljtop == 1 || ljtop == 3) ) { static name[33]; get_user_name(id, name, 31); for( i = INFO_ONE; i < 33; i++ ) { if( possible_lj_script[id][0] || possible_lj_script[id][1] ) break; if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) ) ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 skoczyl^x04 %.3f^x01 [CJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync); } } else if( fDistance < max_cj && !(fDistance < good_cj) && !(cj_dif > good_cj) && (ljtop == 1 || ljtop == 3) ) { static name[33]; get_user_name(id, name, 31); for( i = INFO_ONE; i < 33; i++ ) { if( possible_lj_script[id][0] || possible_lj_script[id][1] ) break; if( i == id || (pev_valid(i) && is_user_connected(i) && gHasColorChat[i]) ) ColorChat(i, GREEN, "[LjStats]^x03 %s^x01 skoczyl^x04 %.3f^x01 [CJ] Strefy:^x04 %d^x01 Syc:^x04 %d%%", name, fDistance, strafes[id], sync); } } } } fMaxAirSpeed[id] = 0.0; fMaxGroundSpeed[id] = 250.0; cjumped[id] = false; gInAir[id] = false; } else if( flags&FL_ONGROUND && gInAir[id] == false ) { pev(id, pev_velocity, vVelocity); vVelocity[2]-=vVelocity[2]; if( vector_length(vVelocity) >= 279 && doubleducked[id] == false ) set_task(0.5,"gocheck", id); gInAir[id] = false; fMaxAirSpeed[id] = 0.0; fMaxGroundSpeed[id] = 250.0; cjumped[id] = false; } if( flags&FL_ONGROUND ) { static ClassName[32]; pev(pev(id, pev_groundentity), pev_classname, ClassName, 32); if( equal(ClassName, "func_train") || equal(ClassName, "func_door") || equal(ClassName, "func_door_rotating") || equal(ClassName, "func_conveyor") ) { gocheck(id); set_task(0.4,"gocheck", id); } if( OnGround[id] == false ) { pev(id, pev_origin, vOrigin); if( doubleducked[id] == false && !(cjumped[id] == true && buttons&IN_JUMP && !(oldbuttons&IN_JUMP)) ) set_task(0.4,"gocheck", id); else if( doubleducked[id] == true && vOrigin[2] != vDuckedAt[id][2] ) set_task(0.5,"gocheck", id); OnGround[id] = true; } } if( buttons&IN_DUCK && flags&FL_ONGROUND && gInAir[id] == false ) { if( induck[id] == false ) { cducked[id] = true; induck[id] = true; set_task(0.1,"testcjstart", id); pev(id, pev_origin, vOrigin); vDuckedAt[id][0] = vOrigin[0]; vDuckedAt[id][1] = vOrigin[1]; vDuckedAt[id][2] = vOrigin[2]; } } else if( oldbuttons&IN_DUCK ) { induck[id] = false; if( cducked[id] == true && !is_in_duck(id) ) { set_task(0.3,"ddend", id); doubleducked[id] = true; cducked[id] = false; } } if( !(flags&FL_ONGROUND) ) OnGround[id] = false; } } return FMRES_IGNORED; } public fwdPlayerPostThink(id) { if( is_user_alive(id) && get_pcvar_num(kz_ljs_enabled) ) { static buttons, flags; buttons = pev(id, pev_button); flags = pev(id, pev_flags); if( flags&FL_ONGROUND && (gInAir[id] == true || OnGround[id] == false) ) fwdPlayerPreThink(id); pev(id, pev_angles, angle); if( old_angle1[id] > angle[1] ) { turning_left[id] = false; turning_right[id] = true; } else if( old_angle1[id] < angle[1] ) { turning_left[id] = true; turning_right[id] = false; } else { turning_left[id] = false; turning_right[id] = false; } if( strafing_aw[id] == false && (buttons&IN_MOVELEFT) && (turning_left[id] == true || turning_right[id] == true ) && !(buttons&IN_MOVERIGHT || buttons&IN_BACK) ) { strafing_aw[id] = true; strafing_sd[id] = false; if(strafes[id] < NSTRAFES) strafe_stat_time[id][strafes[id]] = get_gametime(); strafes[id] += INFO_ONE; } else if( strafing_sd[id] == false && (buttons&IN_MOVERIGHT) && (turning_left[id] == true || turning_right[id] == true ) && !(buttons&IN_MOVELEFT || buttons&IN_FORWARD) ) { strafing_aw[id] = false; strafing_sd[id] = true; if(strafes[id] < NSTRAFES) strafe_stat_time[id][strafes[id]] = get_gametime(); strafes[id] += INFO_ONE; } pev(id, pev_velocity, vVelocity); vVelocity[2] = 0.0; fSpeed = vector_length(vVelocity); if( buttons&IN_MOVERIGHT || buttons&IN_MOVELEFT || buttons&IN_FORWARD || buttons&IN_BACK ) { if(strafes[id] < NSTRAFES) { if( fSpeed > OldSpeed[id]) strafe_stat_sync[id][strafes[id]][0] += INFO_ONE; else strafe_stat_sync[id][strafes[id]][1] += INFO_ONE; } } OldSpeed[id] = fSpeed; if( buttons&IN_RIGHT || buttons&IN_LEFT ) { if( flags&FL_ONGROUND ) { possible_lj_script[id][1] = false; if( fSpeed > 250 ) { if( task_exists(id+534490) ) remove_task(id+534490); possible_lj_script[id][0] = true; } } else if( gInAir[id] ) possible_lj_script[id][1] = true; } else if( flags&FL_ONGROUND ) { possible_lj_script[id][1] = false; if( !task_exists(id+534490) && possible_lj_script[id][0] ) set_task(1.5, "isnt_prestrafe_cheating", id+534490); } } } public isnt_prestrafe_cheating(id) possible_lj_script[id-534490][0] = false; public fwdTouch(ent, id) { static ClassName[32]; if( pev_valid(ent) ) { pev(ent, pev_classname, ClassName, 31); } static ClassName2[32]; if( pev_valid(id) ) { pev(id, pev_classname, ClassName2, 31); } if( equal(ClassName2, "player") ) { if( pev(id, pev_groundentity) == ent && (gInAir[id] || !OnGround[id]) ) { if( pev(id, pev_flags)&FL_ONGROUND ) { if( get_gametime() > (jumptime[id]+0.1) ) fwdPlayerPreThink(id); } } if( equal(ClassName, "func_train") || equal(ClassName, "func_door") || equal(ClassName, "func_door_rotating") || equal(ClassName, "func_conveyor") ) { gocheck(id); set_task(0.4,"gocheck", id); } } } stock is_in_duck(player) { if( !pev_valid(player) ) return 0; static Float:absmin[3], Float:absmax[3]; pev(player, pev_absmin, absmin); pev(player, pev_absmax, absmax); absmin[2]+=64.0; if( absmin[2] < absmax[2] ) return 0; return 1; }