Меню для CS на кнопку Е или другим словом использовать +USE

Сообщения
0
Реакции
0
День добрый На нескольких серверах видел меню при нажатии на кнопку E или использовать открывается меню, через бинд не получается сделать но тоже по какой то причине не запускается не на одной из версий амхх, инкубы все установил посмотрите может будут идеи подскажите. Меню компилируется правда с предупреждениями в plugins.ini дописывал debyg в общем не туда не сюда ошибки в логах выдаёт на 46 строчке, собственно вот сам скрипт.
Код:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <colorchat>  // обязательно должно быть, это для формирования надписи в меню

new day[32]

public plugin_init()
{
register_plugin("Player_Menu","0.4","autor");

register_clcmd("player_menu","go_menu");
register_clcmd("say mymenu", "go_menu");
register_clcmd("say /mymenu", "go_menu");
register_forward( FM_CmdStart , "FwdCmdStart" ); // регистрируем форвард для открытия меню по кнопке е
}

public FwdCmdStart(id, uc_handle)// функция, которая реализует открытие меню на кнопку е
{
static Button, OldButtons;
Button = get_uc(uc_handle, UC_Buttons);
OldButtons = pev(id, pev_oldbuttons);

if((Button & IN_USE) && !(OldButtons & IN_USE))
go_menu(id);

return FMRES_HANDLED;
}

public go_menu(id) // собственно наше меню
{

new menu = menu_create("Меню сервера ","func_menu");

menu_additem( menu,"\rНазвание пункта 1", "1", 0)
menu_additem( menu,"Название пункта 2", "2", 0)
menu_additem( menu,"Название пункта 3", "3", 0)
menu_additem( menu,"Название пункта 4", "4", 0)
menu_additem( menu,"Название пункта 5", "5", 0)
menu_additem( menu,"Название пункта 6", "6", 0)
menu_additem( menu,"Название пункта 7", "7", 0)
menu_additem( menu,"Название пункта 8", "8", 0)
menu_additem(menu, "\wВыход", "0")
menu_setprop(menu, MPROP_PERPAGE)
menu_display(id,menu)
}

public func_menu(id, menu, key) // действия кнопок нашего меню
{
key++

switch(key)
{

case 1: client_cmd(id,"bla bla bla")
case 2: client_cmd(id,"bla bla bla")
case 3: client_cmd(id,"bla bla bla")
case 4: client_cmd(id,"bla bla bla")
case 5: client_cmd(id,"bla bla bla")
case 6: client_cmd(id,"bla bla bla")
case 7: client_cmd(id,"bla bla bla")
case 8: client_cmd(id,"bla bla bla")
}

return PLUGIN_HANDLED
}

stock client_printcolor(const id, const input[], any:...)  // обязательно вставить этот сток, он нужне для форматирования надписи в меню
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)

replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!y", "^1") // Default Color
replace_all(msg, 190, "!team", "^3") // Team Color

if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players)
write_byte(players);
write_string(msg);
message_end();
}
}
}
}
 
Сообщения
38
Реакции
29
Помог
4 раз(а)
В следующий раз лучше логи прикрепляйте..
L 08/04/2018 - 17:49:09: Expected 3 parameters
L 08/04/2018 - 17:49:09: [AMXX] Run time error 10 (plugin "123.amxx") (native "menu_setprop") - debug not enabled!
L 08/04/2018 - 17:49:09: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
Из него сразу ведь понятна ошибка...
Код:
menu_setprop(menu, MPROP_PERPAGE)

->

menu_setprop(menu, MPROP_PERPAGE, 0)
4 Авг 2018
День добрый На нескольких серверах видел меню при нажатии на кнопку E или использовать открывается меню, через бинд не получается сделать но тоже по какой то причине не запускается не на одной из версий амхх, инкубы все установил посмотрите может будут идеи подскажите. Меню компилируется правда с предупреждениями в plugins.ini дописывал debyg в общем не туда не сюда ошибки в логах выдаёт на 46 строчке, собственно вот сам скрипт.
Код:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <colorchat>  // обязательно должно быть, это для формирования надписи в меню

new day[32]

public plugin_init()
{
register_plugin("Player_Menu","0.4","autor");

register_clcmd("player_menu","go_menu");
register_clcmd("say mymenu", "go_menu");
register_clcmd("say /mymenu", "go_menu");
register_forward( FM_CmdStart , "FwdCmdStart" ); // регистрируем форвард для открытия меню по кнопке е
}

public FwdCmdStart(id, uc_handle)// функция, которая реализует открытие меню на кнопку е
{
static Button, OldButtons;
Button = get_uc(uc_handle, UC_Buttons);
OldButtons = pev(id, pev_oldbuttons);

if((Button & IN_USE) && !(OldButtons & IN_USE))
go_menu(id);

return FMRES_HANDLED;
}

public go_menu(id) // собственно наше меню
{

new menu = menu_create("Меню сервера ","func_menu");

menu_additem( menu,"\rНазвание пункта 1", "1", 0)
menu_additem( menu,"Название пункта 2", "2", 0)
menu_additem( menu,"Название пункта 3", "3", 0)
menu_additem( menu,"Название пункта 4", "4", 0)
menu_additem( menu,"Название пункта 5", "5", 0)
menu_additem( menu,"Название пункта 6", "6", 0)
menu_additem( menu,"Название пункта 7", "7", 0)
menu_additem( menu,"Название пункта 8", "8", 0)
menu_additem(menu, "\wВыход", "0")
menu_setprop(menu, MPROP_PERPAGE)
menu_display(id,menu)
}

public func_menu(id, menu, key) // действия кнопок нашего меню
{
key++

switch(key)
{

case 1: client_cmd(id,"bla bla bla")
case 2: client_cmd(id,"bla bla bla")
case 3: client_cmd(id,"bla bla bla")
case 4: client_cmd(id,"bla bla bla")
case 5: client_cmd(id,"bla bla bla")
case 6: client_cmd(id,"bla bla bla")
case 7: client_cmd(id,"bla bla bla")
case 8: client_cmd(id,"bla bla bla")
}

return PLUGIN_HANDLED
}

stock client_printcolor(const id, const input[], any:...)  // обязательно вставить этот сток, он нужне для форматирования надписи в меню
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)

replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!y", "^1") // Default Color
replace_all(msg, 190, "!team", "^3") // Team Color

if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players)
write_byte(players);
write_string(msg);
message_end();
}
}
}
}
Переменную day вы нигде не используете, вот и варнинг.
 
Сообщения
162
Реакции
445
Помог
2 раз(а)

d3m37r4

111111
Сообщения
1,427
Реакции
1,168
Помог
10 раз(а)
А если на карте какие-то объекты от клавиши взаимодействия работают? Постоянно будет меню открываться, мешает же.
 
Сообщения
2,288
Реакции
1,737
Помог
31 раз(а)
d3m37r4, я тоже думал над этим, если надо разминировать бомбу например они же не смогут
 
Сообщения
271
Реакции
347
Помог
15 раз(а)
Pokemoshka, через BarTime мб можно отловить момент дефуза
 
Сообщения
271
Реакции
347
Помог
15 раз(а)
Скрытое содержимое для пользователей: Minni
 
Сообщения
287
Реакции
223
Помог
6 раз(а)
Скрытое содержимое для пользователей: Denzer
 
Сообщения
271
Реакции
347
Помог
15 раз(а)
не знаю как это реализовать, т.к. менюшка всё равно откроется заново при нажатии на Е. :/
C++:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <reapi>

new g_Menu[512];

public plugin_init()
{
    register_plugin("Test", "Beta", "Denzer")

    register_menu ("Cmd_MenuHandler", 1023, "Cmd_MenuHandler")

    register_forward(FM_CmdStart,"fwd_CmdStart")
    RegisterHam(Ham_Use, "func_button", "HamUseButton", 0);
    RegisterHookChain(RG_CGrenade_DefuseBombStart, "HookDefuseBomb", 0);
}

public fwd_CmdStart( id, uc_handle, seed)
{
    new buttons = get_uc ( uc_handle, UC_Buttons )

    if ( buttons & IN_USE )
        return Cmd_Menu(id);

    return FMRES_HANDLED
}

public HookDefuseBomb(player)
{
    show_menu(player, 0, "^n", 1);
    client_print(0, print_chat, "Defusing..") // for test
}

public HamUseButton(ent, caller, activator, use_type)
{
    show_menu(caller, 0, "^n", 1);
    client_print(0, print_chat, "kek");

    return HAM_IGNORED;
}

public Cmd_Menu(id)
{
    new iKeys = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8

    new iLen = formatex ( g_Menu, charsmax ( g_Menu ), "\rMenu Test^n^n" )

    iLen += formatex ( g_Menu[iLen], charsmax ( g_Menu ) - iLen, "\r1. \wTest1^n" )

    iLen += formatex ( g_Menu[iLen], charsmax ( g_Menu ) - iLen, "\r2. \wTest2^n" )

    iLen += formatex ( g_Menu[iLen], charsmax ( g_Menu ) - iLen, "\r3. \wTest3^n" )


    iLen += formatex ( g_Menu[iLen], charsmax ( g_Menu ) - iLen, "^n" )
    formatex ( g_Menu[iLen], charsmax ( g_Menu ) - iLen, "\r0. \wExit" )

    show_menu ( id, iKeys, g_Menu, -1, "Cmd_MenuHandler" )
    return PLUGIN_HANDLED
}

public Cmd_MenuHandler (id, key)
{
    switch(key)
    {
        case 0:
        {
            Cmd_Menu(id)
        }
        case 1:
        {
            Cmd_Menu(id)
        }
        case 2:
        {
            Cmd_Menu(id)
        }
    }
    return PLUGIN_HANDLED
}
 
Последнее редактирование:
Сообщения
775
Реакции
291
Помог
11 раз(а)
Denzer, зачем отлавливать момент? Не проще отловить место нахождение func_bomb_target ...
 
Последнее редактирование:
Сообщения
36
Реакции
33
Denzer, зачем отлавливать момент? Не проще отловить место нахождение func_bomb_target ...
А как же открытие ворот на карте cs_office? Они только на cs_office_cz автоматом открываются. Хотя, к сожалению, никто толком, в эту карту не играет. Но есть другие карты, открывающие двери кнопкой.
 
Сообщения
580
Реакции
338
Предупреждения
1
Помог
9 раз(а)
Как насчет составить список энтити вызывающих нажатием E (func_button and etc) записать их в массив и проверять энтити по нажатию, если нет в этом списке, то открыть меню
 
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
Как насчет составить список энтити вызывающих нажатием E (func_button and etc) записать их в массив и проверять энтити по нажатию, если нет в этом списке, то открыть меню
Не сложно сделать проверку на взаимодействие, чтобы исключить открытие меню :)
 
Сообщения
0
Реакции
0
Думою самое простое что есть эта примерно вот так ) Толька вот как сделать что бы теперь меню закрывалось вторым нажатием на эту же кнопку было бы довольно удобно
Код:
#include <amxmodx>
#include <engine>
#include <dhudmessage>

new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
new cvar_showhudmsg

public client_PreThink(id)
{
   if(entity_get_int(id, EV_INT_button) & IN_USE)
   {
      Server_Menu(id);
      return PLUGIN_HANDLED;
   }
  
   return PLUGIN_CONTINUE;
}

public Server_Menu(id)
{
     new name[32]
     get_user_name(id, name, 31)
     static menu[650], iLen
     iLen = 0
     iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\yМеню Быстрого доступа^n^n")

     iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y1. \wУстоновить \yЛазер\r  (\y100\r)^n")
     keys |= MENU_KEY_1

     iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y2. \wПоставить \yПушку\r   (\y3000\r)^n")
     keys |= MENU_KEY_2

     iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y3. \wМагазин \rПрокачки^n")
     keys |= MENU_KEY_3

     iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y4. \wПоставить \yРаздачик\r(\y3000\r)^n")
     keys |= MENU_KEY_4

     iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y5. \wМеню \yНаземных \rМин^n^n")
     keys |= MENU_KEY_5

     iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y0. \wВыход^n")
     keys |= MENU_KEY_0

     show_menu(id, keys, menu, -1, "Menu 1")
     return PLUGIN_HANDLED
}

public func_menu(id, key)
{
     switch(key)
     {
          case 0: client_cmd(id, "+setlaser")
          case 1: client_cmd(id, "sentry_build")
          case 2: client_cmd(id, "menushop")
          case 3: client_cmd(id, "build_dispenser")
          case 4: client_cmd(id, "say /mines")
     }
     return PLUGIN_HANDLED
}
 
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
sola999, попробуйте теперь разминировать бомбу с этим плагином. Ну или зажать клавишу E и держать (попутно установив логгирование на Server_Menu)
6 Авг 2018
Толька вот как сделать что бы теперь меню закрывалось вторым нажатием на эту же кнопку было бы довольно удобно
Получаете ID открытого меню. И если оно совпадает с вашим в плагине, то закрыть. Иначе открыть
 
Сообщения
0
Реакции
0
Меню не для паблика, если чуть повнимательней прочитать видно что для DM сервера.
 

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

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