OvidiuS icon

Knife Vip

OvidiuS | PRO | 06/18/14 09:18:41 PM UTC | 0 ⭐ | 329 👁️ | Never ⏰ | []
Pawn |

10.39 KB

|

None

|

0 👍

/

0 👎

/*
    Formatright © 2014
    
    Knife Vip
    Author: OvidiuS
    Original idea: GaMeR_FoReVeR (http://steamcommunity.com/id/GaMeR_FoReVeR/)
    Realease date: 11:20 PM, Wednesday, June 18, 2014 (CEST)
 
    *English*
    This plugin is free software; 
    You can modify it under the terms of the
    GNU General Public License as published by the Free Software Foundation.
    
    *Serbian* 
    Ovaj plugin je besplatni program;
    Možete ga menjati poštujući prava autora, samo ga ne smete prodavati.
    Svako kršenje GNU licence može da rezultitra tužbom. 
*/
 
#include < amxmodx >
#include < amxmisc >
#include < fakemeta >
#include < engine >
#include < hamsandwich >
#include < cstrike >
#include < fun >
 
#define flag_set(%1,%2)             ( %1 |= ( 1 << ( %2 & 31 ) ) )
#define flag_rem(%1,%2)             ( %1 &= ~( 1 << ( %2 & 31 ) ) )
#define flag_get(%1,%2)             ( %1 & ( 1 << ( %2 & 31 ) ) )
 
#define MAX_JUMPS                   2
#define XTRA_OFS_PLAYER             5
#define m_afButtonPressed           246
 
#define Ham_CS_Player_ResetMaxSpeed Ham_Item_PreFrame 
 
enum 
{
    SCOREATTRIB_ARG_PLAYERID = 1,
    SCOREATTRIB_ARG_FLAGS
};
 
enum ( <<= 1 ) 
{
    SCOREATTRIB_FLAG_NONE = 0,
    SCOREATTRIB_FLAG_DEAD = 1,
    SCOREATTRIB_FLAG_BOMB,
    SCOREATTRIB_FLAG_VIP
};
 
enum CVARS
{
    GRAVITY,
    SPEED, 
    MONEY, 
    FLAGS_JUMP,
    FLAGS_MONEY,
    FLAGS_GRAVITY,
    FLAGS_SPEED,
    FLAGS_PARACHUTE
};
 
new const global_pCvars[ CVARS ][ ] =
{
    "vip_gravity", 
    "vip_speed", 
    "vip_money", 
    "vip_jump_flags",
    "vip_money_flags",
    "vip_gravity_flags",
    "vip_speed_flags",
    "vip_parachute_flags"
};
 
new const global_pValues[ CVARS ][ ] =
{
    "0.4", 
    "500.0", 
    "2000", 
    "b",
    "t",
    "t",
    "t",
    "t"
};
 
new global_sModels[ ][ ] =
{
    "assasin",
    "doktor"
};
 
new global_msgScreenFade,
    global_bIsVip,
    global_bIsVip_Jump,
    global_bIsVip_Money,
    global_bIsVip_Gravity,
    global_bIsVip_Speed,
    global_bIsVip_Parachute;
 
new global_iPlayerJumps[ 33 ],
    global_iParachuteEntity[ 33 ],
    global_sPlayerModel[ 33 ][ 64 ];
 
new global_cPointer[ CVARS ];
 
public plugin_init( )
{
    register_plugin( "Knife Vip", "0.1", "OvidiuS" );
    
    for ( new CVARS:i = GRAVITY ; i < CVARS ; i++ )
        global_cPointer[ i ] = register_cvar( global_pCvars[ i ], global_pValues[ i ] );
 
    RegisterHam( Ham_Spawn, "player", "ham_Spawn_player_post", .Post = true );
    RegisterHam( Ham_Player_Jump, "player", "ham_Player_Jump_pre" );
    RegisterHam( Ham_CS_Player_ResetMaxSpeed, "player", "ham_ResetMaxSpeed_player_post", .Post = true );
 
    register_forward( FM_SetClientKeyValue, "forward_SetKeyValue" );
    register_event( "DeathMsg", "event_DeathMsg", "a" );
    
    register_message( get_user_msgid( "ClCorpse" ), "message_ClCorpse" );
    register_message( get_user_msgid( "ScoreAttrib" ), "message_ScoreAttrib" );
 
    global_msgScreenFade = get_user_msgid( "ScreenFade" );
}
 
public plugin_precache( )
{
    precache_model( "models/player/doktor/doktor.mdl" );
    precache_model( "models/player/assasin/assasin.mdl" );
    precache_model( "models/parachute.mdl" );
}
 
public client_putinserver( id )
{
    global_sPlayerModel[ id ][ 0 ] = EOS;
 
    new sFlags_Jump[ 2 ], sFlags_Money[ 2 ], sFlags_Gravity[ 2 ], sFlags_Speed[ 2 ], sFlags_Parachute[ 2 ];
 
    get_pcvar_string( global_cPointer[ FLAGS_JUMP ], sFlags_Jump, charsmax( sFlags_Jump ) );
    get_pcvar_string( global_cPointer[ FLAGS_MONEY ], sFlags_Money, charsmax( sFlags_Money ) );
    get_pcvar_string( global_cPointer[ FLAGS_GRAVITY ], sFlags_Gravity, charsmax( sFlags_Gravity ) );
    get_pcvar_string( global_cPointer[ FLAGS_SPEED ], sFlags_Speed, charsmax( sFlags_Speed ) );
    get_pcvar_string( global_cPointer[ FLAGS_PARACHUTE ], sFlags_Parachute, charsmax( sFlags_Parachute ) );
 
    new iFlags              = get_user_flags( id );
    new iFlags_Jump         = read_flags( sFlags_Jump );
    new iFlags_Money        = read_flags( sFlags_Money );
    new iFlags_Gravity      = read_flags( sFlags_Gravity );
    new iFlags_Speed        = read_flags( sFlags_Speed );
    new iFlags_Parachute    = read_flags( sFlags_Parachute );
 
    if( iFlags & iFlags_Jump || iFlags & iFlags_Money || iFlags & iFlags_Gravity || iFlags & iFlags_Speed || iFlags & iFlags_Parachute )
    {
        flag_set( global_bIsVip, id )
 
        if( iFlags & iFlags_Jump )
            flag_set( global_bIsVip_Jump, id );
 
        if( iFlags & iFlags_Money )
            flag_set( global_bIsVip_Money, id );
 
        if( iFlags & iFlags_Gravity )
            flag_set( global_bIsVip_Gravity, id );
 
        if( iFlags & iFlags_Speed )
            flag_set( global_bIsVip_Speed, id );
 
        if( iFlags & iFlags_Parachute )
            flag_set( global_bIsVip_Parachute, id );
    }
}
 
public client_disconnect( id )
{
    flag_rem( global_bIsVip, id );
    flag_rem( global_bIsVip_Jump, id );
    flag_rem( global_bIsVip_Gravity, id );
    flag_rem( global_bIsVip_Speed, id );
    flag_rem( global_bIsVip_Parachute, id );
}
 
public client_PreThink( id )
{
    if( flag_get( global_bIsVip_Parachute, id ) )
    {
        if( !is_user_alive( id ) )
            return;
    
        new button      = get_user_button( id );
        new flags       = get_entity_flags( id );
        
        if( button & IN_USE ) 
        {
            if( !( flags & FL_ONGROUND ) )
            {
                new Float:fVelocity[ 3 ];
                entity_get_vector( id, EV_VEC_velocity, fVelocity );
                
                if( fVelocity[ 2 ] < 0.0 ) 
                {
                    if( global_iParachuteEntity[ id ] <= 0 ) 
                    {
                        global_iParachuteEntity[ id ] = create_entity( "info_target" );
 
                        if( global_iParachuteEntity[ id ] > 0 ) 
                        {
                            entity_set_model( global_iParachuteEntity[ id ], "models/parachute.mdl" );
                            entity_set_int( global_iParachuteEntity[ id ], EV_INT_movetype, MOVETYPE_FOLLOW );
                            entity_set_edict( global_iParachuteEntity[ id ], EV_ENT_aiment, id );
                        }
                    }
                    
                    if( global_iParachuteEntity[ id ] > 0 ) 
                    {
                        fVelocity[ 2 ] = ( fVelocity[ 2 ] + 40.0 < -100.0 ) ? fVelocity[ 2 ] + 40.0 : -100.0;
                        entity_set_vector( id, EV_VEC_velocity, fVelocity );
                        
                        if( entity_get_float( global_iParachuteEntity[ id ], EV_FL_frame) < 0.0 || entity_get_float( global_iParachuteEntity[ id ] , EV_FL_frame ) > 254.0 ) 
                        {
                            if( entity_get_int( global_iParachuteEntity[ id ], EV_INT_sequence) != 1 )
                                entity_set_int( global_iParachuteEntity[ id ], EV_INT_sequence, 1 );
 
                            entity_set_float( global_iParachuteEntity[ id ], EV_FL_frame, 0.0 );
                        }
                        else 
                            entity_set_float( global_iParachuteEntity[ id ], EV_FL_frame, entity_get_float( global_iParachuteEntity[ id ], EV_FL_frame ) + 1.0 );
                    }
                }
                else if( global_iParachuteEntity[ id ] > 0 ) 
                {
                    remove_entity( global_iParachuteEntity[ id ] )
                    global_iParachuteEntity[ id ] = 0
                }
            }
            else if( global_iParachuteEntity[ id ] > 0 ) 
            {
                    remove_entity( global_iParachuteEntity[ id ] )
                    global_iParachuteEntity[ id ] = 0
            }
        }
        else if( global_iParachuteEntity[ id ] > 0 ) 
        {
            remove_entity( global_iParachuteEntity[ id ] )
            global_iParachuteEntity[ id ] = 0
        }
    }
}
 
public ham_Spawn_player_post( id )
{
    if( is_user_alive( id ) && flag_get( global_bIsVip, id ) )
    {
        new CsTeams:iTeam = cs_get_user_team( id );
 
        if( iTeam == CS_TEAM_CT || iTeam == CS_TEAM_T )
        {
            copy( global_sPlayerModel[ id ], charsmax( global_sPlayerModel[ ] ), global_sModels[ _:iTeam - 1 ] );
            set_user_info( id, "model", global_sPlayerModel[ id ] );
        }
 
        if( global_iParachuteEntity[ id ] > 0 ) 
        {
            remove_entity( global_iParachuteEntity[ id ] )
            entity_set_float( id, EV_FL_gravity, 1.0 );
 
            global_iParachuteEntity[ id ] = 0;
        }
 
        if( flag_get( global_bIsVip_Gravity, id ) )
            entity_set_float( id, EV_FL_gravity, 1.0 - get_pcvar_float( global_cPointer[ GRAVITY ] ) );
 
        if( flag_get( global_bIsVip_Money, id ) )
            cs_set_user_money( id, cs_get_user_money( id ) + get_pcvar_num( global_cPointer[ MONEY ] ) );
    }
}
 
public ham_ResetMaxSpeed_player_post( id )
{
    if( flag_get( global_bIsVip_Speed, id ) )
    {
        static Float:flSpeed;
        flSpeed = get_pcvar_float( global_cPointer[ SPEED ] );
        
        engfunc( EngFunc_SetClientMaxspeed, id, flSpeed );
        set_pev( id, pev_maxspeed, flSpeed );
 
        //client_cmd( id, "cl_forwardspeed %0.1f;cl_sidespeed %0.1f;cl_backspeed %0.1f", flSpeed, flSpeed, flSpeed );
    }
}
 
public ham_Player_Jump_pre( id )
{
    if( !is_user_alive( id ) )
        return HAM_IGNORED;
 
    new fFlags = pev( id, pev_flags );
    
    if( fFlags & FL_WATERJUMP || pev( id, pev_waterlevel ) >= 2 || !( get_pdata_int( id, m_afButtonPressed, XTRA_OFS_PLAYER ) & IN_JUMP ) )
    {
        return HAM_IGNORED;
    }
 
    if( fFlags & FL_ONGROUND )
    {
        global_iPlayerJumps[ id ] = 0;
        return HAM_IGNORED;
    }
 
    if( flag_get( global_bIsVip_Jump, id ) && ++global_iPlayerJumps[ id ] < MAX_JUMPS )
    {
        new Float:fVelocity[ 3 ];
        pev( id, pev_velocity, fVelocity );
        fVelocity[ 2 ] = random_float( 265.0, 285.0 );
        set_pev( id, pev_velocity, fVelocity );
 
        return HAM_HANDLED;
    }
    return HAM_IGNORED;
}
 
public event_DeathMsg( )
{
    new iAttacker = read_data( 1 );
    new iVictim = read_data( 2 );
 
    if( global_iParachuteEntity[ iVictim ] > 0 ) 
    {
        if( is_valid_ent( global_iParachuteEntity[ iVictim  ] ) ) 
            remove_entity( global_iParachuteEntity[ iVictim  ] );
 
        global_iParachuteEntity[ iVictim ] = 0;
    }
 
    if( iVictim != iAttacker )
    {
        if( flag_get( global_bIsVip, iVictim ) )
            UTIL_ScreenFade( iVictim, 1<<14, 1<<14, 1<<16, 0, 200, 250, 230 );
    }
}
 
public forward_SetKeyValue( id, const _szInfoBuffer[ ], const _szKey[ ], const _szValue[ ] )
{
    if( global_sPlayerModel[ id ][ 0 ] && equal( _szKey, "model" ) && !equal( _szValue, global_sPlayerModel[ id ] ) )
    {
        set_user_info( id, "model", global_sPlayerModel[ id ] );
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}
 
public message_ClCorpse( )
{
    new id = get_msg_arg_int( 12 );
 
    if( global_sPlayerModel[ id ][ 0 ] )
        set_msg_arg_string( 1, global_sPlayerModel[ id ] );
}
 
public message_ScoreAttrib( msgId, iDestination, iReceiver ) 
{
    new id = get_msg_arg_int( SCOREATTRIB_ARG_PLAYERID );
    
    if( flag_get( global_bIsVip, id ) )
        set_msg_arg_int( SCOREATTRIB_ARG_FLAGS, ARG_BYTE, SCOREATTRIB_FLAG_VIP );
}
 
stock UTIL_ScreenFade( id, iDuration, iHoldtime, iFadetype, red, green, blue, alpha )
{
    message_begin( MSG_ONE, global_msgScreenFade, { 0, 0, 0 }, id );
    write_short( iDuration );   // Duration of fadeout
    write_short( iHoldtime );   // Hold time of color
    write_short( iFadetype );   // Fade type
    write_byte ( red );         // Red
    write_byte ( green );       // Green
    write_byte ( blue );        // Blue
    write_byte ( alpha );       // Alpha
    message_end( );
}

Comments