Parachute

Плагин АМХХ Parachute 1.0

Нет прав для скачивания
C++:
#include <amxmodx>
#include <engine>
#include <reapi>

#pragma semicolon 1

native Array:cmsapi_get_user_services(const index, const szAuth[] = "", const szService[] = "", serviceID = 0, bool:part = false);

new const szPluginInfo[][] = {"[ReAPI] Parachute", "1.0", "Leo_[BH] + ApXuTekToR"};

enum e_cvars { c_ParashuteAll, c_ParashuteFall_Speed, c_ParashuteFlag[16], c_ParashuteName_Service[32] }
new cvars[e_cvars];

new bool:g_is_alive[33];
new bool:g_has_parachute[33];

public plugin_init()
{
    RegisterHookChain(RG_CBasePlayer_Spawn, "RG_Spawn_Post", 1);
    RegisterHookChain(RG_CBasePlayer_Killed, "RG_Player_Killed", 0);
    RegisterHookChain(RG_CBasePlayer_PreThink, "RG_client_PreThink");
}

public plugin_precache(){
    register_plugin(szPluginInfo[0], szPluginInfo[1], szPluginInfo[2]);
    initCvars();
}

public initCvars()
{
    bind_pcvar_num(create_cvar(        "Parachute_ParachuteAll",            "3",            FCVAR_NONE, "Доступ к парашюту:^n\
                                                                                                    '0' - Доступен всем^n\
                                                                                                    '1' - Доступен по флагу^n\
                                                                                                    '2' - По названию услуги^n\
                                                                                                    '3' - По флагу и услуге"                    ), cvars[c_ParashuteAll]);
    bind_pcvar_num(create_cvar(        "Parachute_c_ParachuteFall_Speed",    "90",            FCVAR_NONE, "Скорость падения при открытом парашюте"    ), cvars[c_ParashuteFall_Speed]);

    bind_pcvar_string(create_cvar(    "Parachute_gFade_VaultName",        "t",            FCVAR_NONE, "Флаг доступа для парашюта"                    ), cvars[c_ParashuteFlag],            charsmax(cvars[c_ParashuteFlag]));
    bind_pcvar_string(create_cvar(    "Parachute_gCommandOpen",            "_parashute",    FCVAR_NONE, "Название услуги для продажи через сайт^n\
                                                                                                    в начале обязательно должен быть знак:^n\
                                                                                                    '_' - нижнее подчеркивание"                    ), cvars[c_ParashuteName_Service],    charsmax(cvars[c_ParashuteName_Service]));

    AutoExecConfig(true, "Parachute", "SevCorp");
}

public RG_client_PreThink(id)
{
    if(!g_is_alive[id]) return;
    if(!g_has_parachute[id]) return;

    new Float:fallspeed = cvars[c_ParashuteFall_Speed] * -1.0;
    new button = get_entvar(id, EntVars:var_button);
    new oldbutton = get_entvar(id, EntVars:var_oldbuttons);

    if (get_entvar(id, EntVars:var_gravity) == 0.1) set_entvar(id, EntVars:var_gravity, 1.0);

    if (button & IN_USE)
    {
        new Float:velocity[3];
        entity_get_vector(id, EV_VEC_velocity, velocity);
        if (velocity[2] < 0.0) {
            set_entvar(id, EntVars:var_gravity, 0.1);
            velocity[2] = (velocity[2] + 40.0 < fallspeed) ? velocity[2] + 40.0 : fallspeed;
            entity_set_vector(id, EV_VEC_velocity, velocity);
        }
    }
    else if ((oldbutton & IN_USE))  {
        set_entvar(id, EntVars:var_gravity, 1.0);
    }
}

public client_putinserver(id)
{
    recheck_flags(id);
}

public client_disconnected(id)
{
    g_is_alive[id] = false;
    g_has_parachute[id] = false;
}

public RG_Spawn_Post(id)
{
    if(is_user_alive(id)) { g_is_alive[id] = true; }
    recheck_flags(id);
}

public RG_Player_Killed(victim, attacker)
{
    g_is_alive[victim] = false;
}

public recheck_flags(id)
{
    static Array:Services;
    Services = cmsapi_get_user_services(id, "", cvars[c_ParashuteName_Service]);
    if(cvars[c_ParashuteAll] == 0) {

        g_has_parachute[id] = true;

    } else if(cvars[c_ParashuteAll] == 1) {

        if(access_parachute(id)) {
            g_has_parachute[id] = true;
        } else {
            g_has_parachute[id] = false;
        }

    } else if(cvars[c_ParashuteAll] == 2) {

        if(Services) {
            g_has_parachute[id] = true;
        } else {
            g_has_parachute[id] = false;
        }
    } else if(cvars[c_ParashuteAll] == 3) {

        if(access_parachute(id) || Services) {
            g_has_parachute[id] = true;
        } else {
            g_has_parachute[id] = false;
        }
    }
}

stock bool:access_parachute(id)
{
    new flags, u_flags[32];
    flags = get_user_flags(id);
    get_flags(flags, u_flags, charsmax(u_flags));
    return (containi(u_flags, cvars[c_ParashuteFlag]) != -1) ? true : false;
}
Назад
Сверху