Парашют "ТОЛЬКО" вип игрокам!

Сообщения
65
Реакции
4
Помог
2 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Хотел сделать что бы парашют работал только у вип игроков.
Взял плагин :
Код:
#include <amxmodx>
#include <reapi>
#define    get_bit(%1,%2)    (%1 & (1 << (%2 & 31)))
#define    set_bit(%1,%2)    %1 |= (1 << (%2 & 31))
#define    clr_bit(%1,%2)    %1 &= ~(1 << (%2 & 31))
new g_bitAlive;
const Float:fall_speed = -100.0
public plugin_init(){
    register_plugin("Parachute Lite [ReAPI]", "10.0", "Leo_[BH]");
    RegisterHookChain(RG_CBasePlayer_Spawn, "RG_Spawn_Post", 1);
    RegisterHookChain(RG_CBasePlayer_Killed, "RG_Player_Killed", 0);
    RegisterHookChain(RG_CBasePlayer_PreThink, "RG_client_PreThink");
}
public RG_Spawn_Post(id) if(is_user_alive(id)) set_bit(g_bitAlive, id);
public RG_Player_Killed(id) clr_bit(g_bitAlive, id);
public client_disconnect(id) clr_bit(g_bitAlive, id);
public RG_client_PreThink(id){
    if(!get_bit(g_bitAlive, id)) return;
    if (get_entvar(id, EntVars:var_gravity) == 0.1) set_entvar(id, EntVars:var_gravity, 1.0);
    if (get_entvar(id, EntVars:var_button) & IN_USE) {
        static Float:velocity[3]
        get_entvar(id, EntVars:var_velocity, velocity);
        if (velocity[2] < 0.0) {
            set_entvar(id, EntVars:var_gravity, 0.1);
            velocity[2] = (velocity[2] + 40.0 < fall_speed) ? velocity[2] + 40.0 : fall_speed ;
            set_entvar(id, EntVars:var_velocity, velocity);
        }
    }
    else if ((get_entvar(id, EntVars:var_oldbuttons) & IN_USE)) {
        set_entvar(id, EntVars:var_gravity, 1.0);
    }
}
Добавил туда пару строк:
Код:
#define PARACHUTE_FLAG ADMIN_LEVEL_H
и
if(!is_user_connected(id) || !is_user_alive(id) || !(get_user_flags(id) & PARACHUTE_FLAG)) return;
Получилось:
Код:
#include <amxmodx>
#include <reapi>

#define PARACHUTE_FLAG ADMIN_LEVEL_H // ДОБАВИЛ

#define    get_bit(%1,%2)    (%1 & (1 << (%2 & 31)))
#define    set_bit(%1,%2)    %1 |= (1 << (%2 & 31))
#define    clr_bit(%1,%2)    %1 &= ~(1 << (%2 & 31))
new g_bitAlive;
const Float:fall_speed = -100.0
public plugin_init(){
    register_plugin("Parachute [ReAPI]", "10.0", "Leo_[BH]");
    RegisterHookChain(RG_CBasePlayer_Spawn, "RG_Spawn_Post", 1);
    RegisterHookChain(RG_CBasePlayer_Killed, "RG_Player_Killed", 0);
    RegisterHookChain(RG_CBasePlayer_PreThink, "RG_client_PreThink");
}
public RG_Spawn_Post(id) if(is_user_alive(id)) set_bit(g_bitAlive, id);
public RG_Player_Killed(id) clr_bit(g_bitAlive, id);
public client_disconnected(id) clr_bit(g_bitAlive, id);
public RG_client_PreThink(id){
    if(!get_bit(g_bitAlive, id)) return;
    if(!is_user_connected(id) || !is_user_alive(id) || !(get_user_flags(id) & PARACHUTE_FLAG)) return; //ДОБАВИЛ
    if (get_entvar(id, EntVars:var_gravity) == 0.1) set_entvar(id, EntVars:var_gravity, 1.0);
    if (get_entvar(id, EntVars:var_button) & IN_USE) {
        static Float:velocity[3]
        get_entvar(id, EntVars:var_velocity, velocity);
        if (velocity[2] < 0.0) {
            set_entvar(id, EntVars:var_gravity, 0.1);
            velocity[2] = (velocity[2] + 40.0 < fall_speed) ? velocity[2] + 40.0 : fall_speed ;
            set_entvar(id, EntVars:var_velocity, velocity);
        }
    }
    else if ((get_entvar(id, EntVars:var_oldbuttons) & IN_USE)) {
        set_entvar(id, EntVars:var_gravity, 1.0);
    }
}
Плагин работает вроде нормально но всё ли правильно сделал - добавил?
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Я от ReHLDS Team юзаю. :dntknw:
C++:
#include <amxmodx>
#include <reapi>

#pragma semicolon 1

public plugin_init() {
    register_plugin("Parachute", "1.1", "ReHLDS Team");
    RegisterHookChain(RG_PM_AirMove, "PM_AirMove", .post = false);
}

public PM_AirMove(const playerIndex) {
    if (!(get_entvar(playerIndex, var_button) & IN_USE) || get_entvar(playerIndex, var_waterlevel) > 0) return;
    
    new Float:flVelocity[3];
    get_entvar(playerIndex, var_velocity, flVelocity);
    if (flVelocity[2] < 0.0) {
        flVelocity[2] = (flVelocity[2] + 40.0 < -100.0) ? flVelocity[2] + 40.0 : -100.0;
        set_entvar(playerIndex, var_sequence, ACT_WALK);
        set_entvar(playerIndex, var_gaitsequence, ACT_IDLE);
        set_pmove(pm_velocity, flVelocity);
        set_movevar(mv_gravity, 80.0);
    }
}
 
Сообщения
65
Реакции
4
Помог
2 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
kpacava, я это понял, я просто к "слову" скинул, на мой взгляд, более легкий вариант плагина.
Ну, если ты говоришь, что все работает, то почему не правильно? )
Нормально все вроде. )
 
Сообщения
52
Реакции
60
Помог
2 раз(а)
is_user_connected можешь убрать, потому есть is_user_alive
24 Дек 2017
И is_user_alive тожешь можешь убрать, потому что битами это условие выше есть
 
Сообщения
187
Реакции
319
Помог
1 раз(а)
Ну в алгоритме у тебя сказано так, если у игрока нет флага, дальнейший код не выполнять!
Все должно работать.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу