ReHLDS/ReAPI Parachute

iOS

Команда форума
Модератор
Регистрация
9 Июн 2017
Сообщения
506
Симпатии
148
Пол
Мужской
Telegram
@pogorelov_ios
Автор: Leo_[BH]
Версия: 1.0r

Описание: плагин парашюта без модели и настроек. Доступен всем игрокам. Для открытия парашюта зажмите клавишу "E" в воздухе.

// Да-да, тут не нужен PreThink. Но за счёт этого работает без рывков во время полёта.
 

Вложения

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
685
Симпатии
195
Пол
Мужской
ВКонтакте
e1337ace
Автор: Leo_[BH]
Версия: 1.0r

Описание: плагин парашюта без модели и настроек. Доступен всем игрокам. Для открытия парашюта зажмите клавишу "E" в воздухе.

// Да-да, тут не нужен PreThink. Но за счёт этого работает без рывков во время полёта.
а это что по твоему? RG_CBasePlayer_PreThink
 

iOS

Команда форума
Модератор
Регистрация
9 Июн 2017
Сообщения
506
Симпатии
148
Пол
Мужской
Telegram
@pogorelov_ios
а это что по твоему? RG_CBasePlayer_PreThink
прочти ещё раз.[DOUBLEPOST=1577043718][/DOUBLEPOST]
а это что по твоему? RG_CBasePlayer_PreThink
имел ввиду что за счёт его нет рывков во время полёта.
А то все кидаются словами, что он там не нужен.
Но покажите хоть одну версию парашюта без префинка, и рывков.
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
А почему плагин "парашют", если парашюта нет?) Это как гамбургер без гам. И есть амхх модуль.. ну правда с парашютом и настройками..
 
K

kapangaIII

С чего ты взял что за счёт него не будет рывков? Рывки из-за потерь.
 

iOS

Команда форума
Модератор
Регистрация
9 Июн 2017
Сообщения
506
Симпатии
148
Пол
Мужской
Telegram
@pogorelov_ios
С чего ты взял что за счёт него не будет рывков? Рывки из-за потерь.
Вот к примеру. Ставил этот код. Сразу начались жалобы от некоторых игроков, поставил с префинком, всё гуд.
Код:
#include <amxmodx>
#include <reapi>

/* If you want to add parachute model, please delete // from the beginning of define. Example: #define REPARACHUTE_MODEL
And if you want to change model name, just change parachute_model constant.
Attention please! Do not change #if defined - #else - #endif commands. Yours sincerely. */

//#define REPARACHUTE_MODEL

#if defined REPARACHUTE_MODEL
new const parachute_model[] = "models/csd_parasut.mdl";
#endif

new bool:sv_parachute;
new cvar_sv_parachute;
new HookChain:HC_PM;

public plugin_init() {
    register_plugin("ReParachute", "1.4", "PurposeLess");

    #if defined REPARACHUTE_MODEL
    DisableHookChain((HC_PM = RegisterHookChain(RG_PM_Move, "@PM_Move", .post=false)));
    #else
    DisableHookChain((HC_PM = RegisterHookChain(RG_PM_AirMove, "@PM_AirMove", .post=false)));
    #endif

    cvar_sv_parachute = create_cvar("sv_parachute", "1", _, "Enable / Disable Parachute", true, 0.0, true, 1.0);
    bind_pcvar_num(cvar_sv_parachute, sv_parachute);
    hook_cvar_change(cvar_sv_parachute, "@sv_parachute");
}

public plugin_cfg()
{
    if(sv_parachute)
    {
        EnableHookChain(HC_PM);
    }
}

@sv_parachute(pcvar, const old_value[], const new_value[])
{
    str_to_num(new_value) ? EnableHookChain(HC_PM) : DisableHookChain(HC_PM);
}

#if defined REPARACHUTE_MODEL
new para_ent[MAX_CLIENTS + 1], parachute_model_index;

public plugin_precache()
{
    parachute_model_index = precache_model(parachute_model);
}

@PM_Move(const id)
{
    if(get_pmove(pm_dead))
    {
        return HC_CONTINUE;
    }

    if(get_entvar(id, var_button) & IN_USE)
    {
        if(get_pmove(pm_waterlevel) == 0 && get_pmove(pm_onground) == -1)
        {
            new Float:velocity[3];
            get_pmove(pm_velocity, velocity);

            if(velocity[2] < 0.0)
            {
                if(!para_ent[id])
                {
                    para_ent[id] = rg_create_entity("info_target");

                    if(para_ent[id] > 0)
                    {
                        set_entvar(para_ent[id], var_model, parachute_model);
                        set_entvar(para_ent[id], var_modelindex, parachute_model_index);
                        set_entvar(para_ent[id], var_movetype, MOVETYPE_FOLLOW);
                        set_entvar(para_ent[id], var_aiment, id);
                    }
                }

                if(para_ent[id] > 0)
                {
                    velocity[2] = (velocity[2] + 40.0 < -100.0) ? velocity[2] + 40.0 : -100.0;
                    set_entvar(id, var_sequence, ACT_WALK);
                    set_entvar(id, var_gaitsequence, ACT_IDLE);
                    set_pmove(pm_velocity, velocity);
                    set_movevar(mv_gravity, 80.0);

                    new Float:frame = get_entvar(para_ent[id], var_frame);

                    if(frame < 0.0 || frame > 254.0)
                    {
                        set_entvar(para_ent[id], var_sequence, 1);
                        set_entvar(para_ent[id], var_frame, 0.0);
                    }
                    else
                    {
                        set_entvar(para_ent[id], var_frame, frame + 1.0);
                    }
                }
                return HC_CONTINUE;
            }
        }
    }

    if(para_ent[id] > 0)
    {
        set_entvar(para_ent[id], var_flags, FL_KILLME);
        para_ent[id] = 0;
    }

    return HC_CONTINUE;
}

public client_disconnected(id)
{
    if(para_ent[id] > 0)
    {
        set_entvar(para_ent[id], var_flags, FL_KILLME);
        para_ent[id] = 0;
    }
}
#else
@PM_AirMove(const id)
{
    if(~get_entvar(id, var_button) & IN_USE || get_pmove(pm_waterlevel) > 0 || get_pmove(pm_dead))
    {
        return;
    }

    new Float:velocity[3];
    get_pmove(pm_velocity, velocity);

    if(velocity[2] < 0.0)
    {
        velocity[2] = (velocity[2] + 40.0 < -100.0) ? velocity[2] + 40.0 : -100.0;
        set_entvar(id, var_sequence, ACT_WALK);
        set_entvar(id, var_gaitsequence, ACT_IDLE);
        set_pmove(pm_velocity, velocity);
        set_movevar(mv_gravity, 80.0);
    }
}
#endif
 
Сверху Снизу