PHP Code:
/* Script generated by Pawn Studio */
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <xs>
#define PLUGIN "Slowmotion"
#define AUTHOR "DarkGL"
#define VERSION "1.0"
#define MAX 32
new bool: bSlow[ MAX + 1 ] ,
Float: oldVeloc[ MAX + 1 ][ 3 ] ,
Float: fTime[ MAX + 1 ] ,
pGrav ,
pSlowSpeed ;
new const Float:g_fWeaponsSpeed[ ]={
000.0,
250.0, 000.0, 260.0, 250.0, 240.0,
250.0, 250.0, 240.0, 250.0, 250.0,
250.0, 250.0, 210.0, 240.0, 240.0,
250.0, 250.0, 210.0, 250.0, 220.0,
230.0, 230.0, 250.0, 210.0, 250.0,
250.0, 235.0, 221.0, 250.0, 245.0
};
public plugin_init(){
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd( "say /slow" , "voidSlow" );
pGrav = get_cvar_pointer( "sv_gravity" );
pSlowSpeed = register_cvar( "amx_slowmo" , "0.3" );
}
public client_connect( id ){
bSlow[ id ] = false;
}
public voidSlow( id ){
bSlow[ id ] = !bSlow[ id ];
if( bSlow[ id ] ){
pev( id , pev_velocity , oldVeloc[ id ] );
fTime[ id ] = get_gametime();
}
else{
engfunc( EngFunc_SetClientMaxspeed , id , g_fWeaponsSpeed[ get_user_weapon( id ) ] );
}
return PLUGIN_HANDLED;
}
public client_PreThink( id ){
if( !is_user_alive( id ) || !bSlow[ id ] ){
return PLUGIN_CONTINUE;
}
new Float: fVeloc[ 3 ] ,
Float: fOrigin[ 3 ] ,
Float: SLOW_SPEED ;
SLOW_SPEED = get_pcvar_float( pSlowSpeed );
pev( id , pev_origin , fOrigin );
pev( id , pev_velocity ,fVeloc );
if( !( -0.01 <= fVeloc[ 0 ] - oldVeloc[ id ][ 0 ] <= 0.01 ) ){
fVeloc[ 0 ] -= oldVeloc[ id ][ 0 ];
fVeloc[ 0 ] *= SLOW_SPEED;
oldVeloc[ id ][ 0 ] += fVeloc[ 0 ];
}
if( !( -0.01 <= fVeloc[ 1 ] - oldVeloc[ id ][ 1 ] <= 0.01 ) ){
fVeloc[ 1 ] -= oldVeloc[ id ][ 1 ];
fVeloc[ 1 ] *= SLOW_SPEED;
oldVeloc[ id ][ 1 ] += fVeloc[ 1 ];
}
new Float: fTimeSub = get_gametime() - fTime[ id ];
fTime[ id ] = get_gametime();
fOrigin[ 2 ] -= floatmul( fVeloc[ 2 ] , fTimeSub );
fOrigin[ 2 ] += floatmul( fVeloc[ 2 ] , fTimeSub * SLOW_SPEED );
if( !( pev( id , pev_flags ) & FL_ONGROUND ) && ! ( pev( id , pev_flags ) & FL_PARTIALGROUND ) ){
fVeloc[ 2 ] += floatmul( pev( id , pev_gravity ) * get_pcvar_float( pGrav ) , fTimeSub );
fVeloc[ 2 ] -= floatmul( pev( id , pev_gravity ) * get_pcvar_float( pGrav ) , fTimeSub * SLOW_SPEED );
}
oldVeloc[ id ][ 2 ] = fVeloc[ 2 ];
fTime[ id ] = get_gametime();
engfunc( EngFunc_SetOrigin , id , fOrigin );
set_pev( id , pev_velocity , oldVeloc[ id ] );
set_pev( id , pev_framerate , SLOW_SPEED );
engfunc( EngFunc_SetClientMaxspeed , id , g_fWeaponsSpeed[ get_user_weapon( id ) ] * SLOW_SPEED );
return PLUGIN_CONTINUE;
}
Is there any better way? maybe using reapi or so. This plugins works but sometimes players fall through map