Veteran Member
Join Date: Jul 2006
Location: France (95)
11-16-2013
, 16:28
[Orpheu] Silent Footsteps including jump/water sounds (+ natives)
#1
natives :
o_get_user_footsteps(index)
o_set_user_footsteps(index, silent=0)
Code :
Spoiler
PHP Code:
#include < amxmodx >
#include < orpheu_stocks >
#pragma semicolon 1
// #define TEST_DROP
#define PLUGIN "Silent FootSteps"
#define VERSION "0.0.4"
#define cm(%0) ( sizeof(%0) - 1 )
native o_set_user_footsteps ( id , set = 1 );
native o_get_user_footsteps ( id );
#define MaskEnt(%0) ( 1<<((%0) & 31) )
#define SetBits(%0,%1) ((%0) |= (%1))
#define ClearBits(%0,%1) ((%0) &= ~(%1))
#define ToggleBits(%0,%1) ((%0) ^= (%1))
#define FBitSet(%0,%1) ((%0) & (%1))
#define SetPlayerBits(%0,%1) SetBits((%0), MaskEnt(%1))
#define ClearPlayerBits(%0,%1) ClearBits((%0), MaskEnt(%1))
#define TogglePlayerBits(%0,%1) ToggleBits((%0), MaskEnt(%1))
#define FPlayerBitSet(%0,%1) FBitSet((%0), MaskEnt(%1))
new g_bHasSilentFootStep [ 33 char ];
new g_iMaxPlayers ;
#define IsPlayer(%0) ( 1 <= (%0) <= g_iMaxPlayers )
new gravity
, stopspeed
, maxspeed
, spectatormaxspeed
, accelerate
, airaccelerate
, wateraccelerate
, friction
, edgefriction
, waterfriction
, entgravity
, bounce
, stepsize
, maxvelocity
, zmax
, waveHeight
// ,footsteps
, rollangle
, rollspeed
, skycolor_r
, skycolor_g
, skycolor_b
, skyvec_x
, skyvec_y
, skyvec_z
, skyName ;
public plugin_init ()
{
register_plugin ( PLUGIN , VERSION , "ConnorMcLeod" );
g_iMaxPlayers = get_maxplayers ();
OrpheuRegisterHook ( OrpheuGetDLLFunction ( "pfnPM_Move" , "PM_Move" ), "OnPM_Move" , OrpheuHookPre );
OrpheuRegisterHook ( OrpheuGetFunction ( "SV_WriteMovevarsToClient" ), "OnSV_WriteMovevarsToClient" , OrpheuHookPre );
gravity = get_cvar_pointer ( "sv_gravity" );
stopspeed = get_cvar_pointer ( "sv_stopspeed" );
maxspeed = get_cvar_pointer ( "sv_maxspeed" );
spectatormaxspeed = get_cvar_pointer ( "sv_spectatormaxspeed" );
accelerate = get_cvar_pointer ( "sv_accelerate" );
airaccelerate = get_cvar_pointer ( "sv_airaccelerate" );
wateraccelerate = get_cvar_pointer ( "sv_wateraccelerate" );
friction = get_cvar_pointer ( "sv_friction" );
edgefriction = get_cvar_pointer ( "edgefriction" );
waterfriction = get_cvar_pointer ( "sv_waterfriction" );
// entgravity = get_cvar_pointer("sv_entgravity");
bounce = get_cvar_pointer ( "sv_bounce" );
stepsize = get_cvar_pointer ( "sv_stepsize" );
maxvelocity = get_cvar_pointer ( "sv_maxvelocity" );
zmax = get_cvar_pointer ( "sv_zmax" );
waveHeight = get_cvar_pointer ( "sv_wateramp" );
// footsteps = get_cvar_pointer("mp_footsteps");
// rollangle = get_cvar_pointer("sv_rollangle");
// rollspeed = get_cvar_pointer("sv_rollspeed");
skycolor_r = get_cvar_pointer ( "sv_skycolor_r" );
skycolor_g = get_cvar_pointer ( "sv_skycolor_g" );
skycolor_b = get_cvar_pointer ( "sv_skycolor_b" );
skyvec_x = get_cvar_pointer ( "sv_skyvec_x" );
skyvec_y = get_cvar_pointer ( "sv_skyvec_y" );
skyvec_z = get_cvar_pointer ( "sv_skyvec_z" );
skyName = get_cvar_pointer ( "sv_skyname" );
#if defined TEST_DROP
register_clcmd ( "drop" , "drop" );
}
public drop ( id )
{
new status = ! o_get_user_footsteps ( id );
o_set_user_footsteps ( id , status );
client_print ( id , print_chat , "Silent FootSpteps %d" , status );
#endif
}
public client_connect ( id )
{
g_bHasSilentFootStep { id } = false ;
// remove_task(id);
// set_task(0.1, "Delay_MoveVars", id);
SV_WriteMovevarsToClient ( id );
}
// public Delay_MoveVars(id)
// {
// SV_WriteMovevarsToClient( id );
// }
public plugin_natives ()
{
register_library ( "footsteps" );
register_native ( "o_get_user_footsteps" , "get_user_footsteps" , 1 );
register_native ( "o_set_user_footsteps" , "set_user_footsteps" , 1 );
}
public get_user_footsteps ( id )
{
if( IsPlayer ( id ) )
{
return g_bHasSilentFootStep { id };
}
return - 1 ;
}
public set_user_footsteps ( id , set )
{
if( IsPlayer ( id ) )
{
new bSilentFootSteps = set > 0 ;
if( bSilentFootSteps != g_bHasSilentFootStep { id } )
{
g_bHasSilentFootStep { id } = bSilentFootSteps ;
SV_WriteMovevarsToClient ( id );
}
return 1 ;
}
return 0 ;
}
public OrpheuHookReturn : OnPM_Move ( OrpheuStruct : ppmove , server )
{
static id ;
id = OrpheuGetStructMember ( ppmove , "player_index" ) + 1 ;
if( g_bHasSilentFootStep { id } )
{
OrpheuSetStructMember ( ppmove , "runfuncs" , 0 );
}
return OrpheuIgnored ;
}
public OrpheuHookReturn : OnSV_WriteMovevarsToClient ()
{
new players [ 32 ], num ;
get_players ( players , num , "c" );
for(-- num ; num >= 0 ; num --)
{
SV_WriteMovevarsToClient ( players [ num ] );
}
return OrpheuSupercede ;
}
#define write_float(%0) write_long(_:(%0))
write_pcvar_float ( cvar_pointer )
{
write_float ( cvar_pointer ? get_pcvar_float ( cvar_pointer ) : 0.0 );
}
SV_WriteMovevarsToClient ( id )
{
message_begin ( MSG_ONE , SVC_NEWMOVEVARS , _ , id );
{
write_pcvar_float ( gravity );
write_pcvar_float ( stopspeed );
write_pcvar_float ( maxspeed );
write_pcvar_float ( spectatormaxspeed );
write_pcvar_float ( accelerate );
write_pcvar_float ( airaccelerate );
write_pcvar_float ( wateraccelerate );
write_pcvar_float ( friction );
write_pcvar_float ( edgefriction );
write_pcvar_float ( waterfriction );
write_pcvar_float ( entgravity ); // 1.0 ??
write_pcvar_float ( bounce );
write_pcvar_float ( stepsize );
write_pcvar_float ( maxvelocity );
write_pcvar_float ( zmax );
write_pcvar_float ( waveHeight );
write_byte ( g_bHasSilentFootStep { id } == 0 ); //Sets it to 1 if nonzero, just in case someone's abusing the whole 'bool' thing.
write_pcvar_float ( rollangle ); // 0.0 // HL 2.0 ??
write_pcvar_float ( rollspeed ); // 0.0 // HL 200.0 ??
write_pcvar_float ( skycolor_r );
write_pcvar_float ( skycolor_g );
write_pcvar_float ( skycolor_b );
write_pcvar_float ( skyvec_x );
write_pcvar_float ( skyvec_y );
write_pcvar_float ( skyvec_z );
write_string ( GetPcvarString ( skyName ) );
}
message_end ();
}
GetPcvarString ( pcvar )
{
static string [ 128 ];
get_pcvar_string ( pcvar , string , cm (string));
return string ;
}
Credits : Seems arkshine has already used a
similar method using SVC_NEWMOVEVARS,
"les grands esprits se rencontrent"
__________________
Last edited by ConnorMcLeod; 11-26-2013 at 01:17 .