Give this a try. I'm not sure if it is working perfectly, but it appears to from a client perspective. Hopefully someone with more orpheu experience will chime in.
Place the files in the attached archive in: amxmodx\configs\orpheu\functions
PHP Code:
#include <amxmodx>
#include <orpheu>
#include <orpheu_stocks>
#include <engine>
new const Version[] = "0.1";
new OrpheuStruct:g_ppmove
public plugin_init()
{
register_plugin( "Fast Duck" , Version , "bugsy" );
OrpheuRegisterHook( OrpheuGetDLLFunction( "pfnPM_Move" , "PM_Move" ) , "PM_Move" );
OrpheuRegisterHook( OrpheuGetFunction( "PM_Duck" ) , "PM_Duck" );
}
public OrpheuHookReturn:PM_Move( OrpheuStruct:ppmove , server )
{
g_ppmove = ppmove;
}
public OrpheuHookReturn:PM_Duck()
{
//If you need player id for anything
//new id = OrpheuGetStructMember( g_ppmove , "player_index" ) + 1;
if ( OrpheuGetStructMember( g_ppmove , "flags" ) & FL_DUCKING )
{
new iCmd = OrpheuGetStructMember( g_ppmove , "cmd" );
OrpheuSetStructMember( OrpheuStruct:iCmd , "forwardmove" , OrpheuGetStructMember( OrpheuStruct:iCmd , "forwardmove" ) * 3.0 );
OrpheuSetStructMember( OrpheuStruct:iCmd , "sidemove" , OrpheuGetStructMember( OrpheuStruct:iCmd , "sidemove" ) * 3.0 );
OrpheuSetStructMember( OrpheuStruct:iCmd , "upmove" , OrpheuGetStructMember( OrpheuStruct:iCmd , "upmove" ) * 3.0 );
}
return OrpheuIgnored;
}