• Регистрация на форуме отключена.
    Она будет открываться первого числа каждого месяца на 24 часа.

    Если необходимо - пишите админу группы Dev-CS в Telegram-чате.

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

Сообщения
369
Реакции
82
Предупреждения
1
Помог
13 раз(а)
Немного ковыряю плагины,пытаюсь переделать.

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

Код:
        set_pdata_float( pPlayer, m_flNextAttack, 2.83 + 0.1, 5)
Как заблокировать смену оружия на (q) и вообще,так же на время?
 
Сообщения
1,798
Реакции
668
Помог
42 раз(а)
хук RG_CBasePlayerWeapon_CanDeploy
 
Сообщения
369
Реакции
82
Предупреждения
1
Помог
13 раз(а)
Nordic Warrior,можешь показать пример как это выглядит? я просто не пишу плагины,могу по примеру сориентироваться,как собственно и делал с блокировкой стрельбы

ну то есть я не знаю как применять хук и тд)
 
Сообщения
1,798
Реакции
668
Помог
42 раз(а)
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;
 
Сообщения
239
Реакции
73
Помог
7 раз(а)
можешь показать пример как это выглядит?


Код:
#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;
}
 
Сообщения
369
Реакции
82
Предупреждения
1
Помог
13 раз(а)
@Limbooc,к сожалению проверить не удалось при попытке сменить или подобрать оружие

1626874149280.png
 
Сообщения
13
Реакции
7
Код:
#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,598
Реакции
2,810
Помог
57 раз(а)
steelzzz, покажи мастер-класс, чтобы люди не гадали, коль знаешь, что есть не "жесть", а лучше решение.
 
Сообщения
405
Реакции
244
Предупреждения
38
Помог
8 раз(а)
SergeyShorokhov, как минимум не так
Код:
if(!(iPlayer = get_member(iItem, m_pPlayer)) || !is_user_connected(iPlayer))
 
Сообщения
2,598
Реакции
2,810
Помог
57 раз(а)
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);
}
 
Сообщения
405
Реакции
244
Предупреждения
38
Помог
8 раз(а)
SergeyShorokhov, item, player может что угодно попасть.
а это уже читы unsigned
 
Сообщения
2,598
Реакции
2,810
Помог
57 раз(а)
steelzzz, метод инстанса "что угодно" не вызовет.
 

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

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