Помогите обрезать исходник!

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
31 Дек 2020
Сообщения
398
Реакции
13
Люди помогите обрезать данный исходник граба. (КС 1.6). Мне нужно чтобы в нем не было таких функций: Дать свободный день, Дать розыск. Если обрежите я буду вам ну очень благодарен( да я даун не умею нормально обрезать). Вот исходник данного SMA
Код:
Expand Collapse Copy
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <fun>
#include <dhudmessage>

#define PL_NAME                "[JBE] Grab"
#define PL_VERSION            "0.0.2"
#define PL_AUTHOR            "OverGame + RealPlugins"
#define is_user_grab(%0) (get_user_flags(id) & ADMIN_MAP)

#define PL_CHAT_PREFIX        "!g[!tJBE!g]!y"
#define PL_MENU_PREFIX        "\d[JBE]"
#define PL_DB_MAX_USERS        36

#define TSK_CHKE 50
#define SF_FADEOUT 0

/* -> Информер <- */
native jbe_informer_offset_up( client );
native jbe_informer_offset_down( client );

/* -> Команда игрока <- */
native jbe_get_user_team( client );
native jbe_set_user_team( client, team );

/* -> Разное <- */
native jbe_get_day_mode();
native jbe_get_user_money( client );

/* -> Выходной <- */
native jbe_is_user_free( client );
native jbe_add_user_free( client );
native jbe_sub_user_free( client );

/* -> Розыск <- */
native jbe_is_user_wanted( client );
native jbe_add_user_wanted( client );
native jbe_sub_user_wanted( client );

new client_data[33][5]
#define GRABBED  0
#define GRABBER  1
#define GRAB_LEN 2
#define FLAGS    3
#define HOOK    4

#define m_bitsDamageType 76

#define CDF_IN_PUSH   (1<<0)
#define CDF_IN_PULL   (1<<1)
#define CDF_NO_CHOKE  (1<<2)

new p_enabled, p_players_only
new p_throw_force, p_min_dist, p_speed, p_grab_force
new p_choke_time, p_choke_dmg, p_auto_choke
new p_glow_r, p_glow_b, p_glow_g, p_glow_a
new p_fade, p_glow

new grab_check[33]
new inflash[33];

new MAXPLAYERS
new SVC_SCREENFADE, SVC_SCREENSHAKE, WTF_DAMAGE

new gSprite[] = "sprites/tok2.spr"
new gSound[] = "tok2.wav"
new gSpr, g_axcid

enum DATA
{
    AUTH[36], PASS[36], LEVEL[7], TYPE[5]
};
new Array:g_aData, g_PlayerData[DATA], g_PlayerActive[33], g_PlayerFlags[33][7];

public plugin_init()
{
    register_plugin(PL_NAME, PL_VERSION, PL_AUTHOR)
    p_enabled = register_cvar("gp_enabled", "1")
    p_players_only = register_cvar("gp_players_only", "0")
    p_min_dist = register_cvar ("gp_min_dist", "90")
    p_throw_force = register_cvar("gp_throw_force", "1500")
    p_grab_force = register_cvar("gp_grab_force", "8")
    p_speed = register_cvar("gp_speed", "5")
    p_choke_time = register_cvar("gp_choke_time", "1.5"
    p_choke_dmg = register_cvar("gp_choke_dmg", "5")
    p_auto_choke = register_cvar("gp_auto_choke", "1")

    p_glow_r = register_cvar("gp_glow_r", "80")
    p_glow_g = register_cvar("gp_glow_g", "141")
    p_glow_b = register_cvar("gp_glow_b", "244")
    p_glow_a = register_cvar("gp_glow_a", "200")

    p_fade = register_cvar("gp_screen_fade", "0")
    p_glow = register_cvar("gp_glow", "1")

    register_menu( "grab_menu", 1023, "FuncGrabMenu" );
  
    register_clcmd("amx_grab", "force_grab");
    register_clcmd("grab_toggle", "grab_toggle");
    register_clcmd("+grab", "grab");
    register_clcmd(    "-grab", "unset_grabbed");
    register_clcmd("+push", "push");
    register_clcmd("-push", "push");
    register_clcmd("+pull", "pull");
    register_clcmd("-pull", "pull");
    register_clcmd("push", "push2");
    register_clcmd("pull", "pull2");
    register_clcmd("drop", "throw");

    register_event( "ScreenFade", "FlashEvent", "b", "4=255", "5=255", "6=255", "7>199" )
    register_event( "DeathMsg", "DeathMsg", "a" )
  
    register_forward( FM_PlayerPreThink, "fm_player_prethink")
    MAXPLAYERS = get_maxplayers()
  
    SVC_SCREENFADE = get_user_msgid("ScreenFade")
    SVC_SCREENSHAKE = get_user_msgid("ScreenShake")
    WTF_DAMAGE = get_user_msgid("Damage")
    return PLUGIN_CONTINUE
}

public plugin_cfg() {
    g_aData = ArrayCreate(DATA);

    new buff[256], fp = fopen("addons/amxmodx/configs/jbe_grab.ini", "rt");
    if(!fp) return set_fail_state("File ^"addons/amxmodx/configs/jbe_grab.ini^" not found");

    while(!feof(fp)) {
        fgets(fp, buff, charsmax(buff));
        if(buff[0] && buff[0] != ';' && parse(buff, g_PlayerData[AUTH], charsmax(g_PlayerData[AUTH]), g_PlayerData[PASS], charsmax(g_PlayerData[PASS]), g_PlayerData[LEVEL], charsmax(g_PlayerData[LEVEL]), g_PlayerData[TYPE], charsmax(g_PlayerData[TYPE])))
            ArrayPushArray(g_aData, g_PlayerData);
    }
    return fclose(fp);
}

public client_putinserver( client ) {
    g_PlayerActive[ client ] = SearchClient( client );
    return PLUGIN_CONTINUE;
}

public plugin_precache( )
{
    precache_sound( "grab_id_mine.wav" );
    precache_sound( "grab_victim_xa.wav" );
    precache_sound( gSound )

    g_axcid = precache_model("sprites/snow_3.spr")
    gSpr = precache_model(gSprite)
    engfunc(EngFunc_PrecacheModel, "models/jb_engine/v_grab_engine.mdl");
}

public fm_player_prethink( id )
{
    new target
    //Search for a target
    if ( client_data[id][GRABBED] == -1 )
    {
        new Float:orig[3], Float:ret[3]
        get_view_pos( id, orig )
        ret = vel_by_aim( id, 9999 )
      
        ret[0] += orig[0]
        ret[1] += orig[1]
        ret[2] += orig[2]
      
        target = traceline( orig, ret, id, ret )
      
        if( 0 < target <= MAXPLAYERS )
        {
            if( is_grabbed( target, id ) ) return FMRES_IGNORED
            set_grabbed( id, target )
        }
        else if( !get_pcvar_num( p_players_only ) )
        {
            new movetype
            if( target && pev_valid( target ) )
            {
                movetype = pev( target, pev_movetype )
                if( !( movetype == MOVETYPE_WALK || movetype == MOVETYPE_STEP || movetype == MOVETYPE_TOSS ) )
                    return FMRES_IGNORED
            }
            else
            {
                target = 0
                new ent = engfunc( EngFunc_FindEntityInSphere, -1, ret, 12.0 )
                while( !target && ent > 0 )
                {
                    movetype = pev( ent, pev_movetype )
                    if( ( movetype == MOVETYPE_WALK || movetype == MOVETYPE_STEP || movetype == MOVETYPE_TOSS )
                            && ent != id  )
                        target = ent
                    ent = engfunc( EngFunc_FindEntityInSphere, ent, ret, 12.0 )
                }
            }
            if( target )
            {
                if( is_grabbed( target, id ) ) return FMRES_IGNORED
                set_grabbed( id, target )
            }
        }
    }

    target = client_data[id][GRABBED]
    //If they've grabbed something
    if( target > 0 )
    {
        if( !pev_valid( target ) || ( pev( target, pev_health ) < 1 && pev( target, pev_max_health ) ) )
        {
            unset_grabbed( id )
            return FMRES_IGNORED
        }
      
        //Use key choke
        if( pev( id, pev_button ) & IN_USE )
            do_choke( id )
      
        //Push and pull
        new cdf = client_data[id][FLAGS]
        if ( cdf & CDF_IN_PULL )
            do_pull( id )
        else if ( cdf & CDF_IN_PUSH )
            do_push( id )
      
        if( target > MAXPLAYERS ) grab_think( id )
    }
  
    //If they're grabbed
    target = client_data[id][GRABBER]
    if( target > 0 ) grab_think( target )
  
    return FMRES_IGNORED
}

public grab_think( id ) {
    new target = client_data[id][GRABBED]
    if( pev( target, pev_movetype ) == MOVETYPE_FLY && !(pev( target, pev_button ) & IN_JUMP ) ) client_cmd( target, "+jump;wait;-jump" )
    new Float:tmpvec[3], Float:tmpvec2[3], Float:torig[3], Float:tvel[3]
    get_view_pos( id, tmpvec )
    tmpvec2 = vel_by_aim( id, client_data[id][GRAB_LEN] )
    torig = get_target_origin_f( target )
    new force = get_pcvar_num( p_grab_force )
  
    tvel[0] = ( ( tmpvec[0] + tmpvec2[0] ) - torig[0] ) * force
    tvel[1] = ( ( tmpvec[1] + tmpvec2[1] ) - torig[1] ) * force
    tvel[2] = ( ( tmpvec[2] + tmpvec2[2] ) - torig[2] ) * force
  
    set_pev( target, pev_velocity, tvel )

    if( !client_data[ id ][ HOOK ] ) {
           if( (get_entity_flags( target ) & FL_ONGROUND) )  {
            RemoveHook( id );
        } else {
            client_cmd(id, "spk sound/%s", gSound)

            client_data[id][HOOK] = true
            set_task(0.1, "RemoveHook", id)
      
            CreateHook(id)
        }
    }
    if(is_user_alive(id) && client_data[id][GRABBED])
    {
        engclient_cmd(id, "weapon_knife");
        set_pdata_float(id, 83, 1.0, 5);
        set_pev(id, pev_viewmodel2, "models/jb_engine/v_grab_engine.mdl");
    }
}

stock Float:get_target_origin_f( id )
{
    new Float:orig[3]
    pev( id, pev_origin, orig )
  
    //If grabbed is not a player, move origin to center
    if( id > MAXPLAYERS )
    {
        new Float:mins[3], Float:maxs[3]
        pev( id, pev_mins, mins )
        pev( id, pev_maxs, maxs )
      
        if( !mins[2] ) orig[2] += maxs[2] / 2
    }
  
    return orig
}

public grab_toggle( id ) {
    if( !g_PlayerActive[ id ] || !SearchFlags( id, "g" ) ) return PLUGIN_HANDLED;
    if( !client_data[id][GRABBED] ) grab( id );
    else unset_grabbed( id )
  
    return PLUGIN_HANDLED
}

public FlashEvent( id )
{
    inflash[id] = true

    set_task(3.0, "block_grab", id)

    return PLUGIN_CONTINUE
}

public grab( id ) {
    if( !g_PlayerActive[ id ] || !SearchFlags( id, "g" ) || !get_pcvar_num( p_enabled ) ) return PLUGIN_HANDLED
    if( inflash[id] ) return PLUGIN_HANDLED
    if ( !client_data[id][GRABBED] ) client_data[id][GRABBED] = -1 
    screenfade_in( id )
  
    return PLUGIN_HANDLED
}

public screenfade_in( id )
{
    if( get_pcvar_num( p_fade ) )
    {
        grab_check[id] = true

        emessage_begin( MSG_ONE, SVC_SCREENFADE, _, id )
        write_short( 10000 ) //duration
        write_short( 0 ) //hold
        write_short( SF_FADE_IN + SF_FADE_ONLYONE ) //flags
        ewrite_byte( get_pcvar_num( p_glow_r ) ) //r
        ewrite_byte( get_pcvar_num( p_glow_g ) ) //g
        ewrite_byte( get_pcvar_num( p_glow_b ) ) //b
        ewrite_byte( get_pcvar_num( p_glow_a ) / 2 ) //a
        message_end( )
    }
}

public throw( id )
{
    new target = client_data[id][GRABBED]
    if( target > 0 )
    {
        set_pev( target, pev_velocity, vel_by_aim( id, get_pcvar_num(p_throw_force) ) )
        unset_grabbed( id )
        return PLUGIN_HANDLED
    }

    return PLUGIN_CONTINUE
}

public unset_grabbed(id)
{
    set_pdata_float(id, 83, 0.0, 5);
    engclient_cmd(id, "weapon_knife");
    switch(get_user_team(id))
    {
        case 2: set_pev(id, pev_viewmodel2, "models/jb_engine/weapons/v_baton_engine.mdl");
        default: set_pev(id, pev_viewmodel2, "models/jb_engine/weapons/v_hand_engine.mdl");
    }
    show_menu(id, 0, "^n");
  
    new target = client_data[id][GRABBED]
    if( target > 0 && pev_valid( target ) )
    {
        set_pev( target, pev_renderfx, kRenderFxNone )
        set_pev( target, pev_rendercolor, {255.0, 255.0, 255.0} )
        set_pev( target, pev_rendermode, kRenderNormal )
        set_pev( target, pev_renderamt, 16.0 )

        if( 0 < target <= MAXPLAYERS )
            client_data[target][GRABBER] = 0
    }
    client_data[id][GRABBED] = 0

    if( get_pcvar_num( p_fade ) && grab_check[id] && !(inflash[id]) )
    {
        grab_check[id] = false

        message_begin( MSG_ONE, SVC_SCREENFADE, _, id )
        write_short( 10000 ) //duration
        write_short( 0 ) //hold
        write_short( SF_FADEOUT ) //flags
        write_byte( get_pcvar_num( p_glow_r ) ) //r
        write_byte( get_pcvar_num( p_glow_g ) ) //g
        write_byte( get_pcvar_num( p_glow_b ) ) //b
        write_byte( get_pcvar_num( p_glow_a ) / 2 ) //a
        message_end( )
    }

    return PLUGIN_HANDLED
}

public set_grabbed( id, target ) {
    if( !is_user_connected( target ) || !is_user_alive( target ) ) return PLUGIN_HANDLED;
    if( target > 0 && target <= 32 ) {
        if( g_PlayerActive[ target ] && SearchFlags( target, "i" ) ) {
            message_begin( MSG_ONE, SVC_SCREENFADE, _, id );
            write_short( 9999 );
            write_short( 100 );
            write_short( SF_FADE_MODULATE );
            write_byte( 179 );
            write_byte( 37 );
            write_byte( 0 );
            write_byte( 200 );
            message_end();
          
            set_dhudmessage( 255, 255, 255, 0.13, 0.77, 2, 6.0, 3.0, 0.1, 4.0, false );
            show_dhudmessage( id, "~ А больше ничего не хочешь? ~" );
            return PLUGIN_HANDLED;
        }
    }
    if( get_pcvar_num( p_glow ) )
    {
        new Float:color[3]
        color[0] = get_pcvar_float( p_glow_r )
        color[1] = get_pcvar_float( p_glow_g )
        color[2] = get_pcvar_float( p_glow_b )
        set_pev( target, pev_renderfx, kRenderFxGlowShell )
        set_pev( target, pev_rendercolor, color )
        set_pev( target, pev_rendermode, kRenderTransColor )
        set_pev( target, pev_renderamt, get_pcvar_float( p_glow_a ) )
    }
  
    if( 0 < target <= MAXPLAYERS ) client_data[target][GRABBER] = id
    client_data[id][FLAGS] = 0
    client_data[id][GRABBED] = target
    new Float:torig[3], Float:orig[3]
    pev( target, pev_origin, torig )
    pev( id, pev_origin, orig )
    client_data[id][GRAB_LEN] = floatround( get_distance_f( torig, orig ) )
    if( client_data[id][GRAB_LEN] < get_pcvar_num( p_min_dist ) ) client_data[id][GRAB_LEN] = get_pcvar_num( p_min_dist )
    if( target > 0 && target <= 32 ) {
        new name[ 33 ], name2[ 33 ];
        get_user_name( id, name, charsmax( name ) );
        get_user_name( target, name2, charsmax( name2 ) );
      
        client_cmd( id, "spk sound/grab_id_mine" );
        client_cmd( target, "spk sound/grab_victim_xa" );
      
        send_chat( id, "%s !yВы взяли грабом !t%s!y.", PL_CHAT_PREFIX, name2 );
        send_chat( target, "%s !yВас взял грабом !t%s!y.", PL_CHAT_PREFIX, name );
        effect_snow( target );
        ShowGrabMenu( id );

        engclient_cmd(id, "weapon_knife");
        set_pdata_float(id, 83, 1.0, 5);
        set_pev(id, pev_viewmodel2, "models/jb_engine/v_grab_engine.mdl");

    }else{
        send_chat( id, "%s !yВы взял грабом !tОружие!y.", PL_CHAT_PREFIX );
        engclient_cmd(id, "weapon_knife");
        set_pdata_float(id, 83, 1.0, 5);
        set_pev(id, pev_viewmodel2, "models/jb_engine/v_grab_engine.mdl");
    }
    return PLUGIN_CONTINUE
}

public push( id )
{
    client_data[id][FLAGS] ^= CDF_IN_PUSH
    return PLUGIN_HANDLED
}

public pull( id )
{
    client_data[id][FLAGS] ^= CDF_IN_PULL
    return PLUGIN_HANDLED
}

public push2( id )
{
    if( client_data[id][GRABBED] > 0 )
    {
        do_push( id )
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}

public pull2( id )
{
    if( client_data[id][GRABBED] > 0 )
    {
        do_pull( id )
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}

public do_push( id )
    if( client_data[id][GRAB_LEN] < 9999 )
        client_data[id][GRAB_LEN] += get_pcvar_num( p_speed )

public do_pull( id )
{
    new mindist = get_pcvar_num( p_min_dist )
    new len = client_data[id][GRAB_LEN]
  
    if( len > mindist )
    {
        len -= get_pcvar_num( p_speed )
        if( len < mindist ) len = mindist
        client_data[id][GRAB_LEN] = len
    }
    else if( get_pcvar_num( p_auto_choke ) )
        do_choke( id )
}

public do_choke( id )
{
    new target = client_data[id][GRABBED]
    if( client_data[id][FLAGS] & CDF_NO_CHOKE || id == target || target > MAXPLAYERS) return
  
    new dmg = get_pcvar_num( p_choke_dmg )
    new vec[3]
    FVecIVec( get_target_origin_f( target ), vec )
  
    message_begin( MSG_ONE, SVC_SCREENSHAKE, _, target )
    write_short( 999999 ) //amount
    write_short( 9999 ) //duration
    write_short( 999 ) //frequency
    message_end( )
  
    message_begin( MSG_ONE, SVC_SCREENFADE, _, target )
    write_short( 9999 ) //duration
    write_short( 100 ) //hold
    write_short( SF_FADE_MODULATE ) //flags
    write_byte( get_pcvar_num( p_glow_r ) ) //r
    write_byte( get_pcvar_num( p_glow_g ) ) //g
    write_byte( get_pcvar_num( p_glow_b ) ) //b
    write_byte( 200 ) //a
    message_end( )
  
    message_begin( MSG_ONE, WTF_DAMAGE, _, target )
    write_byte( 0 ) //damage armor
    write_byte( dmg ) //damage health
    write_long( DMG_CRUSH ) //damage type
    write_coord( vec[0] ) //origin[x]
    write_coord( vec[1] ) //origin[y]
    write_coord( vec[2] ) //origin[z]
    message_end( )
      
    message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
    write_byte( TE_BLOODSTREAM )
    write_coord( vec[0] ) //pos.x
    write_coord( vec[1] ) //pos.y
    write_coord( vec[2] + 15 ) //pos.z
    write_coord( random_num( 0, 255 ) ) //vec.x
    write_coord( random_num( 0, 255 ) ) //vec.y
    write_coord( random_num( 0, 255 ) ) //vec.z
    write_byte( 70 ) //col index
    write_byte( random_num( 50, 250 ) ) //speed
    message_end( )
  
    //Thanks to ConnorMcLeod for making this block of code more proper
    new Float:health
    pev( target, pev_health , health)
    health -= dmg
    if( health < 1 ) dllfunc( DLLFunc_ClientKill, target )
    else {
        set_pev( target, pev_health, health )
        set_pdata_int(target, m_bitsDamageType, DMG_CRUSH) // m_bitsDamageType = 76 // found by VEN
        set_pev(target, pev_dmg_take, dmg)
        set_pev(target, pev_dmg_inflictor, id)
    }
  
    client_data[id][FLAGS] ^= CDF_NO_CHOKE
    set_task( get_pcvar_float( p_choke_time ), "clear_no_choke", TSK_CHKE + id )
}

public clear_no_choke( tskid )
{
    new id = tskid - TSK_CHKE
    client_data[id][FLAGS] ^= CDF_NO_CHOKE
}

public force_grab(id)
{
    if( !g_PlayerActive[ id ] || !SearchFlags( id, "g" ) || !get_pcvar_num( p_enabled ) ) return PLUGIN_HANDLED

    new arg[33]
    read_argv( 1, arg, 32 )

    new targetid = cmd_target( id, arg, 1 )
  
    if( is_grabbed( targetid, id ) ) return PLUGIN_HANDLED
    if(!is_user_alive( targetid ) )
    {
        send_chat( id, "%s Игрок уже мёртв..", PL_CHAT_PREFIX );
        return PLUGIN_HANDLED
    }
  
    //Safe to tp target to aim spot?
    new Float:tmpvec[3], Float:orig[3], Float:torig[3], Float:trace_ret[3]
    new bool:safe = false, i
  
    get_view_pos( id, orig )
    tmpvec = vel_by_aim( id, get_pcvar_num( p_min_dist ) )
  
    for( new j = 1; j < 11 && !safe; j++ )
    {
        torig[0] = orig[0] + tmpvec[i] * j
        torig[1] = orig[1] + tmpvec[i] * j
        torig[2] = orig[2] + tmpvec[i] * j
      
        traceline( tmpvec, torig, id, trace_ret )
      
        if( get_distance_f( trace_ret, torig ) ) break
      
        engfunc( EngFunc_TraceHull, torig, torig, 0, HULL_HUMAN, 0, 0 )
        if ( !get_tr2( 0, TR_StartSolid ) && !get_tr2( 0, TR_AllSolid ) && get_tr2( 0, TR_InOpen ) )
            safe = true
    }
  
    //Still not safe? Then find another safe spot somewhere around the grabber
    pev( id, pev_origin, orig )
    new try[3]
    orig[2] += 2
    while( try[2] < 3 && !safe )
    {
        for( i = 0; i < 3; i++ )
            switch( try[i] )
            {
                case 0 : torig[i] = orig[i] + ( i == 2 ? 80 : 40 )
                case 1 : torig[i] = orig[i]
                case 2 : torig[i] = orig[i] - ( i == 2 ? 80 : 40 )
            }
      
        traceline( tmpvec, torig, id, trace_ret )
      
        engfunc( EngFunc_TraceHull, torig, torig, 0, HULL_HUMAN, 0, 0 )
        if ( !get_tr2( 0, TR_StartSolid ) && !get_tr2( 0, TR_AllSolid ) && get_tr2( 0, TR_InOpen )
                && !get_distance_f( trace_ret, torig ) ) safe = true
      
        try[0]++
        if( try[0] == 3 )
        {
            try[0] = 0
            try[1]++
            if( try[1] == 3 )
            {
                try[1] = 0
                try[2]++
            }
        }
    }
  
    if( safe )
    {
        set_pev( targetid, pev_origin, torig )
        set_grabbed( id, targetid )
        screenfade_in( id ) 
    }
    else client_print( id, print_chat, "[AMXX] %L", id, "COULDNT" )
    return PLUGIN_HANDLED;
}

ShowGrabMenu( client ) {
    if(!SearchFlags( client, "m" ))
    {
        send_chat( client, "%s Не открылось меню? У вас его нет :P", PL_CHAT_PREFIX );
        return PLUGIN_HANDLED;
    }
    jbe_informer_offset_up( client );
    new buffer[512], len, target = client_data[client][GRABBED];
    new name[33]; get_user_name(target, name, charsmax(name));
  
    /* -> Заголовок меню <- */
    len = format( buffer, charsmax( buffer ), "%s \rМеню граба", PL_MENU_PREFIX );
    len += format( buffer[ len ], charsmax( buffer ) - len, "^n%s \yИгрок: \r%s", PL_MENU_PREFIX, name );
    len += format( buffer[ len ], charsmax( buffer ) - len, "^n%s \dХп: %d | Денег: %d", PL_MENU_PREFIX, get_user_health( target ), jbe_get_user_money( target ) );
  
    /* -> Пункты меню <- */
    len += format( buffer[ len ], charsmax( buffer ) - len, "^n^n\d[1]\y ~ %s", SearchFlags( target, "i" ) ? "\dУбить игрока" : "\wУбить игрока" );
    len += format( buffer[ len ], charsmax( buffer ) - len, "^n\d[2]\y ~ %s", SearchFlags( target, "i" ) ? "\dКикнуть игрока" : "\wКикнуть игрока" );
    len += format( buffer[ len ], charsmax( buffer ) - len, "^n\d[3]\y ~ %s%sПеревести за Зеков", SearchFlags( target, "i" ) ? "\d" : "\w", (jbe_get_user_team( target ) != 2) ? "\d" : "\w" );
  
    len += format( buffer[ len ], charsmax( buffer ) - len, "^n^n\d[4]\y ~ %s", SearchFlags( target, "i" ) ? "\dПеревернуть экран" : "\wПеревернуть экран" );
    len += format( buffer[ len ], charsmax( buffer ) - len, "^n\d[5]\y ~ %s", (get_user_health( target ) >= 100) ? "\dВылечить игрока" : "\wВылечить игрока" );
  
    len += format( buffer[ len ], charsmax( buffer ) - len, "^n^n\d[6]\y ~ %s \d[%s\d]", (get_user_flags( client ) & ADMIN_LEVEL_F) ? "\wВыходной игрока" : "\dВыходной игрока", jbe_is_user_free( target ) ? "\rЗабрать" : "\yДать" );
    len += format( buffer[ len ], charsmax( buffer ) - len, "^n\d[7]\y ~ %s \d[%s\d]", (get_user_flags( client ) & ADMIN_LEVEL_F) ? "\wРозыск игрока" : "\dРозыск игрока", jbe_is_user_wanted( target ) ? "\rЗабрать" : "\yДать" );
  
    len += format( buffer[ len ], charsmax( buffer ) - len, "^n^n\d[0]\y ~ \rВыход" );
  
    /* -> Различные функции <- */
    show_menu( client, MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8, buffer, -1, "grab_menu" );
    return PLUGIN_CONTINUE;
}

public FuncGrabMenu(client, key){
    jbe_informer_offset_down(client);
    new target = client_data[client][ GRABBED ];
    if( !is_user_connected( client ) || !is_user_connected(target )) return PLUGIN_HANDLED;
  
    new name[ 33 ], name2[ 33 ];
    get_user_name( client, name, charsmax( name ) );
    get_user_name( target, name2, charsmax( name2 ) );
  
    switch( key ) {
        case 0: {
            if( !SearchFlags( target, "i" ) ) {
                if( is_user_alive( target ) ) {
                    user_kill( target, 1 );
                    send_chat( 0, "%s !t%s!y убил грабом игрока !t%s!y.", PL_CHAT_PREFIX, name, name2 );
                } else send_chat( client, "%s Жертва мертва, как ты её убьешь? ._.", PL_CHAT_PREFIX );
            } else send_chat( client, "%s А по еб*лу?!", PL_CHAT_PREFIX );
        }
        case 1: {
            if( !SearchFlags( target, "i" ) ) {
                if( is_user_alive( target ) ) {
                    new userid = get_user_userid( target );
                    server_cmd( "kick #%d ^"Вас кикнул: %s^"", userid, name );
                    send_chat( 0, "%s !t%s!y кикнул грабом игрока !t%s!y.", PL_CHAT_PREFIX, name, name2 );
                } else send_chat( client, "%s Жертва мертва, как ты её убьешь? ._.", PL_CHAT_PREFIX );
            } else send_chat( client, "%s А по еб*лу?!", PL_CHAT_PREFIX );
        }
        case 2: {
            if( !SearchFlags( target, "i" ) ) {
                if( jbe_get_user_team( target ) == 2 ) {
                    jbe_set_user_team( target, 1 );
                    send_chat( 0, "%s !t%s!y перевел игрока !t%s!y.", PL_CHAT_PREFIX, name, name2 );
                } else send_chat( client, "%s Как ты переведешь !g^"!tЗека - за зеков?!g^"!y ._.", PL_CHAT_PREFIX );
            } else send_chat( client, "%s А по еб*лу?!", PL_CHAT_PREFIX );
        }
        case 3: {
            if( !SearchFlags( target, "i" ) ) {
                message_begin( MSG_ONE, SVC_SCREENFADE, _, target );
                write_short( 9999 );
                write_short( 100 );
                write_short( SF_FADE_MODULATE );
                write_byte( 179 );
                write_byte( 37 );
                write_byte( 0 );
                write_byte( 200 );
                message_end();
          
                set_pev( target, pev_punchangle, {400.0, 999.0, 400.0} );
                send_chat( 0, "%s !t%s!y перевернул экран игроку !t%s!y.", PL_CHAT_PREFIX, name, name2 );
            } else send_chat( client, "%s А по еб*лу?!", PL_CHAT_PREFIX );
        }
        case 4: {
            if( jbe_get_day_mode() != 3 && get_user_health( target ) < 100 ) {
                set_user_health( target, 100 );
                send_chat( 0, "%s !t%s!y вылечил игрока !t%s!y.", PL_CHAT_PREFIX, name, name2 );
            } else send_chat( client, "%s Произошла ошибка..", PL_CHAT_PREFIX );
        }
        case 5: {
            if( (get_user_flags( client ) & ADMIN_LEVEL_F) && jbe_get_day_mode() != 3 && is_user_alive( target ) ) {
                if( jbe_is_user_free( target ) ) jbe_sub_user_free( target );
                else jbe_add_user_free( target );
                send_chat( 0, "%s !t%s!y %s !t%s!y.", PL_CHAT_PREFIX, name, jbe_is_user_free( target ) ? "отпустил в отпуск игрока" : "забрал выходной у игрока", name2 );
            } else send_chat( client, "%s Произошла ошибка..", PL_CHAT_PREFIX );
        }
        case 6: {
            if( (get_user_flags( client ) & ADMIN_LEVEL_F) && jbe_get_day_mode() != 3 && is_user_alive( target ) ) {
                if( jbe_is_user_wanted( target ) ) jbe_sub_user_wanted( target );
                else jbe_add_user_wanted( target );
                send_chat( 0, "%s !t%s!y %s !t%s!y.", PL_CHAT_PREFIX, name, jbe_is_user_wanted( target ) ? "дал !tРозыск!y на игрока" : "отменил !tРозыск!y игрока", name2 );
            } else send_chat( client, "%s Произошла ошибка..", PL_CHAT_PREFIX );
        }
    }
    return PLUGIN_HANDLED;
}

public is_grabbed( target, grabber )
{
    for( new i = 1; i <= MAXPLAYERS; i++ )
        if( client_data[i][GRABBED] == target )
        {
            send_chat( grabber, "%s Кто-то уже держит его!", PL_CHAT_PREFIX );
            unset_grabbed(grabber)
            return true
        }
    return false
}

public DeathMsg( )
{
    new id = read_data(2)
    if( 1 <= id <= MAXPLAYERS )
        kill_grab(id)
}

public client_disconnect( id ) {
    inflash[ id ] = false;
    kill_grab( id );
    return PLUGIN_CONTINUE;
}

public kill_grab( id )
{
    //If given client has grabbed, or has a grabber, unset it
    if( client_data[id][GRABBED] )
        unset_grabbed(id)
    else if( client_data[id][GRABBER] )
        unset_grabbed(client_data[id][GRABBER])
}

public block_grab( id )
    inflash[id] = false

stock traceline( const Float:vStart[3], const Float:vEnd[3], const pIgnore, Float:vHitPos[3] )
{
    engfunc( EngFunc_TraceLine, vStart, vEnd, 0, pIgnore, 0 )
    get_tr2( 0, TR_vecEndPos, vHitPos )
    return get_tr2( 0, TR_pHit )
}

stock get_view_pos( const id, Float:vViewPos[3] )
{
    new Float:vOfs[3]
    pev( id, pev_origin, vViewPos )
    pev( id, pev_view_ofs, vOfs )     
  
    vViewPos[0] += vOfs[0]
    vViewPos[1] += vOfs[1]
    vViewPos[2] += vOfs[2]
}

stock Float:vel_by_aim( id, speed = 1 )
{
    new Float:v1[3], Float:vBlah[3]
    pev( id, pev_v_angle, v1 )
    engfunc( EngFunc_AngleVectors, v1, v1, vBlah, vBlah )
  
    v1[0] *= speed
    v1[1] *= speed
    v1[2] *= speed
  
    return v1
}

public CreateHook(id)
{
    new iTarget = client_data[id][GRABBED]

    new Float:fOrigin[3][3]
    new iOrigin[3][3]

    pev(id, pev_origin, fOrigin[1])
    pev(iTarget, pev_origin, fOrigin[2])

    FVecIVec(fOrigin[1], iOrigin[1])
    FVecIVec(fOrigin[2], iOrigin[2])
    //get_user_origin(id, iOrigin[1], 0)
    //get_user_origin(iTarget, iOrigin[2], 0)

    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    write_byte(TE_BEAMPOINTS)
    write_coord(iOrigin[1][0])
    write_coord(iOrigin[1][1])
    write_coord(iOrigin[1][2])
    write_coord(iOrigin[2][0])
    write_coord(iOrigin[2][1])
    write_coord(iOrigin[2][2])
    write_short(gSpr)
    write_byte(0)
    write_byte(1)
    write_byte(1)
    write_byte(30)
    write_byte(30)
    write_byte(86)
    write_byte(86)
    write_byte(86)
    write_byte(1000)
    write_byte(0)
    message_end()
}

public RemoveHook(id)
{
    client_data[id][HOOK] = false

    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(99)
    write_short(id)
    message_end()
}

public effect_snow( id ) {
    new origin[3];
    get_user_origin( id, origin, 0 );
  
    message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id);
    write_byte(TE_SPRITETRAIL);
    write_coord(origin[0]);
    write_coord(origin[1]);
    write_coord(origin[2]+20);
    write_coord(origin[0]);
    write_coord(origin[1]);
    write_coord(origin[2]+80);
    write_short(g_axcid);
    write_byte(20);
    write_byte(20);
    write_byte(4);
    write_byte(20);
    write_byte(10);
    message_end();
  
    return true;
}

stock send_chat( id, const input[], any:... ) {
    new count = 1, players[ 32 ];
    static msg[ 188 ];
    vformat( msg, 187, input, 3 );
  
    replace_all( msg, 187, "!g", "^4" );
    replace_all( msg, 187, "!y", "^1" );
    replace_all( msg, 187, "!t", "^3" );
  
    if( id ) players[ 0 ] = id; else get_players( players, count, "ch" );
    {
        for( new i = 0; i < count; i++ ) {
            if( is_user_connected( players[ i ] ) ) {
                message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, players[ i ] );
                write_byte( players[ i ] );
                write_string( msg );
                message_end();
            }
        }
    }
}

stock SearchFlags( client, fls[] ) {
    static status[ 33 ]; status[ client ] = false;
    if( g_PlayerActive[ client ] ) if( contain( g_PlayerFlags[ client ], fls ) != -1 ) status[ client ] = true;
    return status[ client ];
}

stock SearchClient(id) {
    if( g_PlayerActive[ id ] ) {
        g_PlayerActive[ id ] = false;
        format( g_PlayerFlags[ id ], charsmax( g_PlayerFlags[] ), "" );
    }
    static status[ 33 ]; status[ id ] = false;
    for(new i; i < ArraySize( g_aData ); i++) {
        ArrayGetArray(g_aData, i, g_PlayerData);
        switch( g_PlayerData[ TYPE ] ) {
            case 'a': {
                static sName[ 33 ], sPass[ 36 ];
                get_user_name( id, sName, charsmax( sName ) );
                get_user_info( id, "_pw", sPass, charsmax( sPass ) );
                if( equal( g_PlayerData[ AUTH ], sName ) ) {
                    if( equal( g_PlayerData[ PASS ], sPass ) ) {
                        format( g_PlayerFlags[ id ], charsmax( g_PlayerFlags[] ), g_PlayerData[ LEVEL ] );
                        status[ id ] = true; break;
                    } else continue;
                } else continue;
            } 
            case 'i': {
                static sIP[16]; get_user_ip(id, sIP, charsmax(sIP), 1);
                if( equal( sIP, g_PlayerData[ AUTH ] ) ) {
                    format( g_PlayerFlags[ id ], charsmax( g_PlayerFlags[] ), g_PlayerData[ LEVEL ] );
                    status[ id ] = true; break;
                } else continue;
            }
            case 's': {
                static sAuthid[25]; get_user_authid(id, sAuthid, charsmax(sAuthid));
                if( equal( sAuthid, g_PlayerData[ AUTH ] ) ) {
                    format( g_PlayerFlags[ id ], charsmax( g_PlayerFlags[] ), g_PlayerData[ LEVEL ] );
                    status[ id ] = true; break;
                } else continue;
            }
        }
    }
    return status[ id ];
}
 
Назад
Сверху Снизу