Запретить смену оружия на время

Сообщения
493
Реакции
108
Помог
16 раз(а)
Немного ковыряю плагины,пытаюсь переделать.

Заблокировал атаку на нужное время,все работает

Код:
        set_pdata_float( pPlayer, m_flNextAttack, 2.83 + 0.1, 5)
Как заблокировать смену оружия на (q) и вообще,так же на время?
 
Сообщения
3,256
Реакции
1,436
Помог
121 раз(а)
хук RG_CBasePlayerWeapon_CanDeploy
 
Сообщения
493
Реакции
108
Помог
16 раз(а)
Nordic Warrior,можешь показать пример как это выглядит? я просто не пишу плагины,могу по примеру сориентироваться,как собственно и делал с блокировкой стрельбы

ну то есть я не знаю как применять хук и тд)
 
Сообщения
3,256
Реакции
1,436
Помог
121 раз(а)
r1nk0, делаешь глобальную булевую переменную (массив) для игроков, new bool:g_bSomeMassive[MAX_PLAYERS + 1]

Ставишь где надо по условиям её в тру, там где у тебя это:
set_pdata_float( pPlayer, m_flNextAttack, 2.83 + 0.1, 5)
А где у тебя убирается блок атаки, ставишь её в фолс для нужного игрока.

Регаешь хук в пре, в хуке делаешь проверку на булевой массив для игрока, и когда тру, то суперцидишь:
Код:
SetHookChainReturn(ATYPE_INTEGER, 0);
return HC_SUPERCEDE;
 
Сообщения
645
Реакции
222
Помог
11 раз(а)
можешь показать пример как это выглядит?


Код:
#include <amxmodx>
#include <reapi>

new bool:g_bSomeMassive[33];
public plugin_init()
{
    RegisterHookChain(RG_CBasePlayerWeapon_CanDeploy, "CBasePlayerWeapon_CanDeploy", false);
    
    register_clcmd("say /block", "block");
}


public block(pId)
{
    g_bSomeMassive[pId] = !g_bSomeMassive[pId];
    if(g_bSomeMassive[pId])
        set_member(pId, m_flNextAttack, 999);
    else 
        set_member(pId, m_flNextAttack, 0);
}

public CBasePlayerWeapon_CanDeploy(pId)
{
    if(g_bSomeMassive[pId])
    {
        SetHookChainReturn(ATYPE_BOOL, false);
        return HC_SUPERCEDE;
    }
    return HC_CONTINUE;
}
 
Сообщения
493
Реакции
108
Помог
16 раз(а)
@Limbooc,к сожалению проверить не удалось при попытке сменить или подобрать оружие

1626874149280.png
 
Сообщения
192
Реакции
148
Помог
1 раз(а)
r1nk0, в CBasePlayerWeapon_CanDeploy pId - это не playerId
 
Сообщения
68
Реакции
79
Помог
3 раз(а)
Код:
#include <amxmodx>
#include <reapi>

new bool:g_bSomeMassive[33];
public plugin_init()
{
    RegisterHookChain(RG_CBasePlayerWeapon_CanDeploy, "CBasePlayerWeapon_CanDeploy", false);
    
    register_clcmd("say /block", "block");
}

public block(pId)
{
    g_bSomeMassive[pId] = !g_bSomeMassive[pId];
    set_member(pId, m_flNextAttack, g_bSomeMassive[pId] ? 999.0 : 0.0);
}

public CBasePlayerWeapon_CanDeploy(iItem)
{
    static iPlayer;
    if(!(iPlayer = get_member(iItem, m_pPlayer)) || !is_user_connected(iPlayer))
        return HC_CONTINUE;
    
    if(g_bSomeMassive[iPlayer])
    {
        SetHookChainReturn(ATYPE_BOOL, false);
        return HC_SUPERCEDE;
    }
    return HC_CONTINUE;
}
 
Сообщения
2,713
Реакции
2,993
Помог
59 раз(а)
steelzzz, покажи мастер-класс, чтобы люди не гадали, коль знаешь, что есть не "жесть", а лучше решение.
 
Сообщения
578
Реакции
338
Предупреждения
2
Помог
9 раз(а)
SergeyShorokhov, как минимум не так
Код:
if(!(iPlayer = get_member(iItem, m_pPlayer)) || !is_user_connected(iPlayer))
 
Сообщения
2,713
Реакции
2,993
Помог
59 раз(а)
steelzzz,
Вкусовщина, всё работает в обоих случаях.
От подобного рода комментария можно было и воздержаться.
Да, можно было и не проверять на валидность игрока.

C++:
#include <iostream>

int GetPlayer(const unsigned short item) {
    if(!item)
        return 0;

    return 123;
}

bool is_user_connected(const unsigned short player) {
    return player != 0;
}

void CanDeploy(const unsigned short item) {
    unsigned short player = 0;

    if(!(player = GetPlayer(item)) || !is_user_connected(player)) {
        std::cout << "return HC_SUPERCEDE 1" << std::endl;
    }

    // OR
    player = GetPlayer(item);
    if(!player || !is_user_connected(player)) {
        std::cout << "return HC_SUPERCEDE 2" << std::endl;
    }
}

int main() {
    CanDeploy(0);
    CanDeploy(1);
}
 
Сообщения
578
Реакции
338
Предупреждения
2
Помог
9 раз(а)
SergeyShorokhov, item, player может что угодно попасть.
а это уже читы unsigned
 
Сообщения
2,713
Реакции
2,993
Помог
59 раз(а)
steelzzz, метод инстанса "что угодно" не вызовет.
 

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

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