Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <amxmodx>
- #include <amxmisc>
- #include <fakemeta>
- #include <hamsandwich>
- new g_max_clients;
- #define FL_ONGROUND2 (FL_ONGROUND|FL_PARTIALGROUND|FL_INWATER|FL_CONVEYOR|FL_FLOAT)
- #define UnitsToMeters(%1) (%1*0.0254)
- new bool:g_bCheckSurf[ 33 ];
- new Float:g_oldorigins[33][3];
- new Float:meters[33];
- public plugin_init()
- {
- register_plugin( "meter calculator", "1.0", "-=ThQ=-" );
- register_forward(FM_PlayerPreThink, "client_PreThink");
- g_max_clients = get_maxplayers();
- set_task ( 1.0, "TASK_HUD", _, _, _, "b" );
- RegisterHam ( Ham_Spawn, "player", "Player_Spawn", 1 );
- }
- public Player_Spawn ( id ) {
- if ( meters [ id ] )
- meters [ id ] = 0.0;
- }
- public client_PreThink(id)
- {
- if( !is_user_alive(id) ) return;
- new bool:on_ground = IsUserOnGround(id);
- if( g_bCheckSurf[ id ] )
- {
- g_bCheckSurf[ id ] = false;
- return;
- }
- //static Float:old_origin[33][3];
- static Float:origin[3];
- pev(id, pev_origin, origin);
- //pev(id, pev_velocity, velocity);
- static Float:gravity;
- //pev(id, pev_maxspeed, maxspeed);
- pev(id, pev_gravity, gravity);
- if(
- pev(id, pev_movetype) != MOVETYPE_WALK
- || gravity != 1.0
- || pev(id, pev_waterlevel) > 0
- || (g_oldorigins[id][0] == origin[0] && g_oldorigins[id][1] == origin[1] && g_oldorigins[id][2] == origin[2] )
- ) {
- return;
- }
- if(on_ground)
- {
- meters[id]+=get_distance_f(origin,g_oldorigins[id]);
- pev(id, pev_origin, g_oldorigins[id]);
- //server_print("on ground %f %f %f %f %f",origin[0],origin[1],origin[2],UnitsToMeters(meters[id]), meters[id]);
- }
- }
- public TASK_HUD ( ) {
- static id;
- for ( id = 1; id <= get_maxplayers ( ); id++ ) {
- if ( is_user_alive ( id ) ) {
- set_hudmessage(255, 255, 255, -1.0, 0.82, 0, 6.0, 1.0)
- show_hudmessage(id, "Meters: %f", UnitsToMeters(meters[id]) )
- }
- }
- }
- public FwdTouch( iEntity1, iEntity2 )
- {
- // player touched something while in the air, so reset the jump
- // this prevents surfing
- //
- // the only problem with this is player could touch a wall during a jump
- // but not lose any speed and this would reset the jump
- //
- // oh well. this prevents surfing, and i'm happy
- if( ( 1 <= iEntity1 <= g_max_clients ) && !IsUserOnGround( iEntity1 ) )
- {
- g_bCheckSurf[ iEntity1 ] = true;
- }
- if( ( 1 <= iEntity2 <= g_max_clients ) && !IsUserOnGround( iEntity2 ) )
- {
- g_bCheckSurf[ iEntity2 ] = true;
- }
- }
- stock bool:IsUserOnGround(client)
- {
- return !!(pev(client, pev_flags) & FL_ONGROUND2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement