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;
}


Dodatki SourceMod













