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

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

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

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

ну то есть я не знаю как применять хук и тд)
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
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;
 
Сообщения
673
Реакции
242
Помог
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;
}
 
Сообщения
511
Реакции
111
Помог
16 раз(а)
@Limbooc,к сожалению проверить не удалось при попытке сменить или подобрать оружие

1626874149280.png
 
Сообщения
192
Реакции
148
Помог
1 раз(а)
r1nk0, в CBasePlayerWeapon_CanDeploy pId - это не playerId
 
Сообщения
75
Реакции
82
Помог
6 раз(а)
Код:
#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,751
Реакции
3,017
Помог
61 раз(а)
steelzzz, покажи мастер-класс, чтобы люди не гадали, коль знаешь, что есть не "жесть", а лучше решение.
 
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
SergeyShorokhov, как минимум не так
Код:
if(!(iPlayer = get_member(iItem, m_pPlayer)) || !is_user_connected(iPlayer))
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
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);
}
 
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
SergeyShorokhov, item, player может что угодно попасть.
а это уже читы unsigned
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
steelzzz, метод инстанса "что угодно" не вызовет.
 

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

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