[Orpheu] Silent Footsteps including jump/water sounds (+ natives)

For scripting examples for learning how to use AMXX.
User avatar
Archive-Poster
Posts: 1189
Gender:
United States of America

[Orpheu] Silent Footsteps including jump/water sounds (+ natives)

Post by Archive-Poster »

natives :
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;
} 
Attachments
footsteps_sigs.zip
(850 Bytes) Downloaded 5 times
silent_footsteps.sma.zip
(1.84 KiB) Downloaded 5 times
footsteps.inc.zip
(304 Bytes) Downloaded 7 times

Who is online

Users browsing this forum: No registered users and 0 guests