Buy Menu.

Сообщения
865
Реакции
144
Помог
25 раз(а)
Здравствуйте.
Задался вопросом, а как же грамотно закрывать buy меню (стандартное) человеку в нужный момент, если он использует VGUI?

Сделал таким методом:
C#:
new const g_szBuyCommands[][] = {
    "bullpup",
    "buy", "buyequip", "cl_autobuy",
    "cl_rebuy", "cl_setautobuy", "cl_setrebuy", "client_buy_open"
};

new g_iMsgID_BuyClose;

public plugin_init() {
    g_iMsgID_BuyClose = get_user_msgid("BuyClose");

    for(new iCmd;iCmd<=charsmax(g_szBuyCommands);iCmd++)
        register_clcmd(g_szBuyCommands[iCmd],"Check_OpenMenu");
}

public Check_OpenMenu(const id) {
    if(rg_get_user_buyzone(id))
        ShowNewBuyMenu(id);
}

public ShowNewBuyMenu(const id) {
    message_begin(MSG_ONE, g_iMsgID_BuyClose, .player = id);
    message_end();
   
    // Тут код.
}

stock bool:rg_get_user_buyzone(const pIndex) {
    new iSignals[UnifiedSignals];

    get_member(pIndex,m_signals,iSignals);

    return bool:(SignalState:iSignals[US_State] & SIGNAL_BUY);
}
Если кратно - я засылаю мессагу игроку, которая закрывает vgui меню, и казалось бы, всё хорошо, оно закрывает меню, но есть одно но, если открывать меню на букву o (команда buyequip), то vgui меню остается, но в тоже время вызывается и новое меню (паблик ShowNewBuyMenu).

Есть ли более современные методы для открытия меню на кнопку B, если игрок использует VGUI стиль? Желательно не меняя игроку setinfo или какие-то данные. Или это нереально?
 
Сообщения
3,388
Реакции
1,485
Помог
125 раз(а)
В хендлере buyequip надо делать return PLUGIN_HANDLED
 
Сообщения
336
Реакции
396
Предупреждения
5
Помог
7 раз(а)
Слушай, а интереса ради, попробуй отловить мессагу VGUIMenu, проверь, что это именно байменю и в ней верни handled
 
Сообщения
865
Реакции
144
Помог
25 раз(а)
Albertio, пробовал в pre и post режимах, толку 0, пробовал выводить сообщение - результата 0, как мне сказали, оно работает только с выбором команд (на нём, кстати, сообщение выводилось).
 
Сообщения
336
Реакции
396
Предупреждения
5
Помог
7 раз(а)
Можешь попробовать этот способ

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

#define MSGID_BUYCLOSE 136

public plugin_init() {
    register_plugin("VGUI Menus", "0.0.1", "Albertio");
}

public CS_InternalCommand(iPlayer, const szCmd[]) {
    if(equal(szCmd, "client_buy_open") || equal(szCmd, "buyequip") || equal(szCmd, "buy")) {
        message_begin(MSG_ONE_UNRELIABLE, MSGID_BUYCLOSE, .player = iPlayer);
        message_end();

        // your code

        return PLUGIN_HANDLED;
    }

    return PLUGIN_CONTINUE;
}
 
Сообщения
1,671
Реакции
1,496
Помог
24 раз(а)
ImmortalAmxx, VGUI от бай меню никак не заблочить без вмешательства в клиент потому что оно открывается на клиенте и не ждет ответа от сервера, как в случае с выбором команды, покупки экипировки, которые отправляются с сервера по команде.
 
Сообщения
2,723
Реакции
2,997
Помог
60 раз(а)
Последнее редактирование:
Сообщения
529
Реакции
465
Предупреждения
16
Помог
9 раз(а)
SergeyShorokhov, Хочу поделиться еще одной особенностью с бай меню. Если не отправить (или блочит) мессагу StatusIcon (спрайт "buyzone") то клиент с вклченной vgui не может открывать меню покупки (а меню эпикировки без проблем)
 

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

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