Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 7
    Гостей: 4
    Пользователи: - отсутствуют
    Роботы: Mail Ru, Mail Ru, Mail Ru

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Nesquik Дата: 8-01-2014, 07:34 Просмотров: 2958

    Ловим команду buy

    Многие скорее всего думают
    Да что там прописал register_clcmd("buy", "buy_func") и все

    К сожалению нет
    Так как в кс появилось новое так называемое Графическое (или VGUI menu)
    Команду buy стало отловить еще сложнее
    Ну так приступим

    #include <amxmodx>

    public plugin_init()
    {
    register_clcmd("buy", "buy_func") // регистрируем нашу команду которую будем ловить
    }

    public buy_func(id)
    {
    set_task(1.0, "BuyFunc", id) // мы заменяем наше меню покупки на то меню которое хотим
    }


    Кажется вот и отловили, заменили
    К сожалению это не конец
    Нам же нужно отключить VGUI menu так как его посредством амхх не так просто заменить

    #include <amxmodx>
    #include <fun>

    public plugin_init()
    {
    register_clcmd("buy", "buy_func") // регистрируем нашу команду которую будем ловить
    }

    public buy_func(id)
    {
    set_task(1.0, "BuyFunc", id) // мы заменяем наше меню покупки на то меню которое хотим
    }

    public BuyFunc(id)
    {
    new menu = menu_create("Магазин сервера", "menu_func_buy)
    menu_additem(menu, " Купить пистолет")
    }

    public menu_func_buy(id, menu, item)
    {
    switch(item)
    {
      case 0:
      {
        give_item(id, "weapon_deagle")
      }
    }
    }

    public client_connect(id)
    {
    client_cmd(id,"setinfo _vgui_menus 0") // Отключаем VGUI menu
    }


    Собственно все
    В конечном итоге плагин для отлова buy

    public client_connect(id)
    {
    client_cmd(id,"setinfo _vgui_menus 0") // Отключаем VGUI menu
    }
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    Ловим команду buy
    артист

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Цитата: Nesquik

    Многие скорее всего думают
    Да что там прописал register_clcmd("buy", "buy_func") и все

    К сожалению нет
    Так как в кс появилось новое так называемое Графическое (или VGUI menu)
    Команду buy стало отловить еще сложнее


    Я уж подумал - ну всё, наконец узнаю как отловить VGU buy меню ))

    Пс кроме buy есть ещё buyequip - открывает сразу пункт 8(гранаты, шмот)
    Nesquik

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    артист,
    Я знаю =)))
    Так же можно отловить открытие меню пистолетов автоматов и т.д.
    Это сделано в плагине GHW_Weap_Pickup
    Там отлавливаются меню VGUI
    Держи ссылочку на скачивание http://rghost.ru/51504046
    Там ловят VGUI menu но только не главное а пистолеты, автоматы, снайперки и т.д.
    Opo4uMapy

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    public client_command(id) 
    {
        new arg[13]
        read_argv(0, arg , 12)

        for (new a = 0; a < 34; a++) {
            if(equal("buy", arg) || equal("autobuy", arg)) {
                //add your code
                return PLUGIN_HANDLED
            }
        }
        return PLUGIN_CONTINUE
    }

    Так удобней)
    Nesquik

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Opo4uMapy,
    Команду buy ты так не подменишь =))
    Нужно сделать таск что бы открыть меню которые ты хочешь
    И да зачем тебе for (new a = 0; a < 34; a++) ???
    igas

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    как по мне, такой способ не совсем подходит, я использую такой метод
    #define is_user_valid(%1) (1 <= %1 <= g_maxplayers && is_user_alive(%1) && is_user_connected(%1))

    public client_command(id)
    {  
        if(is_user_valid(id))
        {
            static cmd_list[][] = { "buyequip", "autobuy", "cl_autobuy", "cl_rebuy" } // Что будем отлавливать
            static command[16], i; read_argv(0, command, 15)

            for(i = 0; i < sizeof cmd_list; i++){
                if(equal(command, cmd_list[i]))
                    return PLUGIN_HANDLED
            }
            if(equal(command,"buy")){
                // Здесь код вызова вашего меню
                return PLUGIN_HANDLED
            }
            if(equal(command, "client_buy_open")){
                static msg_buyclose;
                if(!msg_buyclose)
                    msg_buyclose = get_user_msgid("BuyClose")
                message_begin(MSG_ONE, msg_buyclose, _, id)
                message_end()
                // Здесь код вызова вашего меню
            }
        }
        return PLUGIN_CONTINUE
    }
    артист

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Ещё можно так:

    #include <amxmodx>

    #define MSG_SHOW_MENU    96

    public plugin_init()
    {
        register_message(MSG_SHOW_MENU, "message_show_menu")
    }
    public message_show_menu(msgid, dest, id)
    {
        static text[10]; get_msg_arg_string(4, text, charsmax(text))
        
        if(equal(text, "#Buy")) return PLUGIN_HANDLED
        return PLUGIN_CONTINUE
    }
    артист

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Так вот как отловить buy в vgu ))

    #include <amxmodx>

    #define MSG_BUY_CLOSE    136

    public client_command(id)
    {
        static command[16]; read_argv(0, command, charsmax(command))
        if(equal(command, "client_buy_open"))
        {
            message_begin(MSG_ONE, MSG_BUY_CLOSE, _, id)
            message_end()
        }
    }


    Спасиб ))
    gavrilyuc

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    register_message(get_user_msgid("VGUIMenu"), "vgui_menu");

    а этим штоле нельзя?
    если нет, то извиняйте не проверял, но логика подсказывает что вот так можно отловить.
    Safety1st

    5.08.2014
    ICQ: --
    Публикаций: 7
    Комментариев: 42
    Репутация: -  10  +

    gavrilyuc, не нужно писать свои догадки, тем более непроверенные. Этот вариант уже звучал у артист'а. В топике уже имеются все варианты для разных случаев, осталось их чуток подправить и собрать в приличную статью ;)

    Вообще к вышеперечисленному ещё можно добавить обработку autobuy/rebuy (с использованием форварда CS_InternalCommand() ); хз, правда, где это может пригодится.
    --------------------
    артист

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Оба...

    #include <amxmodx>

    public plugin_init()
    {
        register_clcmd("buy", "hook_buy")
        register_clcmd("client_buy_open", "hook_buy_vgu")
    }
    public hook_buy(id)
    {
        client_print(id, print_chat, "hook_buy")
        return PLUGIN_HANDLED
    }
    public hook_buy_vgu(id)
    {
        message_begin(MSG_ONE, 136, _, id)
        message_end()
        
        client_print(id, print_chat, "hook_buy_vgu")
        return PLUGIN_HANDLED
    }

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама