This will display distance walked and reset to 0 when the player either presses jump or is not on the ground for whatever reason (walks off ledge etc).
If this isn't what you want, it can be tweaked.
- Did you want to reset distance if player runs?
- Did you not want to reset if player walks off ledge etc and only reset when manually jumping?
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <xs>
new const Version[] = "0.1";
new Float:g_fDistance[ 33 ] , bool:g_bWasOffGround[ 33 ];
public plugin_init()
{
register_plugin( "Get Distance on Ground" , Version , "bugsy" );
register_forward( FM_CmdStart , "fw_FMCmdStart" );
}
public client_putinserver( id )
{
g_bWasOffGround[ id ] = true;
g_fDistance[ id ] = 0.0;
set_task( 1.0 , "ShowDistance" , id , .flags="b" );
}
public ShowDistance( id )
{
client_print( id , print_center , "Distance walked = %f" , g_fDistance[ id ] );
}
public fw_FMCmdStart( id , handle , seed )
{
static Float:fLastOrigin[ 33 ][ 3 ] , Float:fCurrentOrigin[ 3 ] , iButtons;
iButtons = get_uc( handle , UC_Buttons );
if ( iButtons & IN_JUMP )
{
g_fDistance[ id ] = 0.0;
g_bWasOffGround[ id ] = true;
}
else if ( iButtons & ( IN_FORWARD | IN_BACK | IN_MOVELEFT | IN_MOVERIGHT ) )
{
if ( pev( id , pev_flags ) & FL_ONGROUND )
{
if ( g_bWasOffGround[ id ] == true )
{
pev( id , pev_origin , fLastOrigin[ id ] );
g_fDistance[ id ] = 0.0;
g_bWasOffGround[ id ] = false;
}
else
{
pev( id , pev_origin , fCurrentOrigin );
if ( !xs_vec_equal( fLastOrigin[ id ] , fCurrentOrigin ) )
{
g_fDistance[ id ] += get_distance_f( fLastOrigin[ id ] , fCurrentOrigin );
xs_vec_copy( fCurrentOrigin , fLastOrigin[ id ] );
}
}
}
else
{
g_bWasOffGround[ id ] = true;
}
}
}
__________________