o_get_user_footsteps(index)
o_set_user_footsteps(index, silent=0)
Code: Select all
#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;
} 