PHP Code:
#include < amxmodx >
#include < hlsdk_const >
#include < orpheu_stocks >
#define STEP_CONCRETE 0
#define STEP_METAL 1
#define STEP_DIRT 2
#define STEP_VENT 3
#define STEP_GRATE 4
#define STEP_TILE 5
#define STEP_SLOSH 6
#define STEP_WADE 7
#define STEP_LADDER 8
#define STEP_SNOW 9
#define STEP_GRASS 10
new const VERSION[] = "0.0.1";
new OrpheuStruct:pmove;
static iPlayer;
static g_iTeam[ 33 ], bool:g_bPlayJumpStep[ 33 ];
new footsteps_team;
new footsteps_jump_team;
public plugin_init()
{
register_plugin( "[ORPHEU] Footsteps", VERSION, "Juice" );
footsteps_team = register_cvar( "footsteps_team", "0" );
footsteps_jump_team = register_cvar( "footsteps_jump_team", "1" );
register_message( get_user_msgid( "TeamInfo" ), "msg_TeamInfo" );
OrpheuRegisterHook( OrpheuGetDLLFunction( "pfnPM_Move","PM_Move" ), "OnPM_Move" );
OrpheuRegisterHook( OrpheuGetFunction( "PM_PlayStepSound" ), "onPM_PlayStepSound" );
if( get_pcvar_num( footsteps_team ) || get_pcvar_num( footsteps_jump_team ) )
{
server_cmd( "mp_footsteps 0" );
}
}
public OrpheuHookReturn:OnPM_Move( OrpheuStruct:ppmove, server )
{
pmove = ppmove;
iPlayer = OrpheuGetStructMember( ppmove, "player_index" ) + 1;
g_bPlayJumpStep[ iPlayer ] =
( OrpheuGetStructMember(OrpheuStruct:OrpheuGetStructMember(ppmove, "cmd"), "buttons" ) & IN_JUMP)
&& OrpheuGetStructMember(ppmove, "onground") != -1
&& ~(OrpheuGetStructMember(ppmove, "oldbuttons") & IN_JUMP)
&& (
get_pcvar_num( footsteps_jump_team ) == 3
|| get_pcvar_num( footsteps_jump_team ) < 3 && g_iTeam[ iPlayer ] == get_pcvar_num( footsteps_jump_team )
)
? true : false;
return OrpheuIgnored;
}
// http://forums.alliedmods.net/showthread.php?t=123097/
// http://cs-sdk.googlecode.com/svn/trunk/pm_shared.c/
public OrpheuHookReturn:onPM_PlayStepSound( step, Float:fvol )
{
if( !g_bPlayJumpStep[ iPlayer ] )
{
if
( !get_pcvar_num( footsteps_team )
||get_pcvar_num( footsteps_team ) < 3 && get_pcvar_num( footsteps_team ) != g_iTeam[ iPlayer ]
)
return OrpheuIgnored;
}
static iSkipStep, irand;
irand = random_num(0,1) + (OrpheuGetStructMember( pmove, "iStepLeft" ) * 2);
switch ( step )
{
case STEP_METAL:
{
switch(irand)
{
case 0: emit_sound( iPlayer, CHAN_BODY, "player/pl_metal1.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 1: emit_sound( iPlayer, CHAN_BODY, "player/pl_metal3.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 2: emit_sound( iPlayer, CHAN_BODY, "player/pl_metal2.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 3: emit_sound( iPlayer, CHAN_BODY, "player/pl_metal4.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
}
}
case STEP_DIRT:
{
switch(irand)
{
case 0: emit_sound( iPlayer, CHAN_BODY, "player/pl_dirt1.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 1: emit_sound( iPlayer, CHAN_BODY, "player/pl_dirt3.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 2: emit_sound( iPlayer, CHAN_BODY, "player/pl_dirt2.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 3: emit_sound( iPlayer, CHAN_BODY, "player/pl_dirt4.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
}
}
case STEP_VENT:
{
switch(irand)
{
case 0: emit_sound( iPlayer, CHAN_BODY, "player/pl_duct1.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 1: emit_sound( iPlayer, CHAN_BODY, "player/pl_duct3.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 2: emit_sound( iPlayer, CHAN_BODY, "player/pl_duct2.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 3: emit_sound( iPlayer, CHAN_BODY, "player/pl_duct4.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
}
}
case STEP_GRATE:
{
switch(irand)
{
case 0: emit_sound( iPlayer, CHAN_BODY, "player/pl_grate1.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 1: emit_sound( iPlayer, CHAN_BODY, "player/pl_grate3.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 2: emit_sound( iPlayer, CHAN_BODY, "player/pl_grate2.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 3: emit_sound( iPlayer, CHAN_BODY, "player/pl_grate4.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
}
}
case STEP_TILE:
{
if ( !random_num(0,4) )
irand = 4;
switch(irand)
{
case 0: emit_sound( iPlayer, CHAN_BODY, "player/pl_tile1.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 1: emit_sound( iPlayer, CHAN_BODY, "player/pl_tile3.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 2: emit_sound( iPlayer, CHAN_BODY, "player/pl_tile2.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 3: emit_sound( iPlayer, CHAN_BODY, "player/pl_tile4.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 4: emit_sound( iPlayer, CHAN_BODY, "player/pl_tile5.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
}
}
case STEP_SLOSH:
{
switch(irand)
{
case 0: emit_sound( iPlayer, CHAN_BODY, "player/pl_slosh1.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 1: emit_sound( iPlayer, CHAN_BODY, "player/pl_slosh3.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 2: emit_sound( iPlayer, CHAN_BODY, "player/pl_slosh2.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 3: emit_sound( iPlayer, CHAN_BODY, "player/pl_slosh4.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
}
}
case STEP_WADE:
{
if ( iSkipStep == 0 )
iSkipStep++;
if ( iSkipStep++ == 3 )
iSkipStep = 0;
switch(irand)
{
case 0: emit_sound( iPlayer, CHAN_BODY, "player/pl_wade1.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 1: emit_sound( iPlayer, CHAN_BODY, "player/pl_wade2.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 2: emit_sound( iPlayer, CHAN_BODY, "player/pl_wade3.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 3: emit_sound( iPlayer, CHAN_BODY, "player/pl_wade4.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
}
}
case STEP_LADDER:
{
switch(irand)
{
case 0: emit_sound( iPlayer, CHAN_BODY, "player/pl_ladder1.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 1: emit_sound( iPlayer, CHAN_BODY, "player/pl_ladder3.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 2: emit_sound( iPlayer, CHAN_BODY, "player/pl_ladder2.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 3: emit_sound( iPlayer, CHAN_BODY, "player/pl_ladder4.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
}
}
default:
{
switch(irand)
{
case 0: emit_sound( iPlayer, CHAN_BODY, "player/pl_step1.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 1: emit_sound( iPlayer, CHAN_BODY, "player/pl_step3.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 2: emit_sound( iPlayer, CHAN_BODY, "player/pl_step2.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
case 3: emit_sound( iPlayer, CHAN_BODY, "player/pl_step4.wav", fvol, ATTN_NORM, 0, PITCH_NORM );
}
}
}
return OrpheuIgnored;
}
public msg_TeamInfo( msg_id, msg_dest )
{
if ( msg_dest != MSG_ALL && msg_dest != MSG_BROADCAST )
return;
static id, team[ 2 ];
id = get_msg_arg_int( 1 );
get_msg_arg_string( 2, team, 1 );
switch( team[0] )
{
case 'T': g_iTeam[id] = 1;
case 'C': g_iTeam[id] = 2;
//case 'S': g_iTeam[id] = 3;
default: g_iTeam[id] = 0;
}
}