Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Binds menu.

, Меню создания горячих клавиш.
Статус пользователя KPOCT
сообщение 31.8.2016, 21:37
Сообщение #1
Стаж: 11 лет

Сообщений: 14
Благодарностей: 2
Полезность: 0

Здравствуйте. Будьте добры, подскажите, где я допустил ошибку.
Проблема в открытии mCmds - не открывается. Правильно ли я в хэндлер mhYesOrNo передал строку?
Кстати, в консоли не наблюдаю надпись
Код:
server_print("Failed to open the file ^"%s^"", FILE_OF_COMMANDS_PATH);

в то время, как
Код:
server_print("Failed to open the file ^"%s^"", FILE_OF_KEYS_PATH);

выводится прекрасно, хотя код для обоих файлов одинаковый.. Не понимаю я этого.

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

#define PLUGIN "Binds"
#define AUTHOR "KP0CT"
#define VERSION "1.0"
#define FILE_OF_COMMANDS_PATH "addons/amxmodx/configs/Binds_Commands.ini"
#define FILE_OF_KEYS_PATH "addons/amxmodx/configs/Binds_Keys.ini"
#define SVC_DIRECTOR_ID 51
#define SVC_DIRECTOR_STUFFTEXT_ID 10

new sCmdsAndKeys[33][2][64], mCmds, mKeys; // sCmdsAndKeys[id][0] - команда, [1] - клавиша.

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("binds", "Binds_menu")
register_clcmd("say /binds", "Binds_menu")
}

public plugin_cfg()
{
/// Подгружаем файл с командами и создаём меню.
new file = fopen(FILE_OF_COMMANDS_PATH, "rt");
if(!file)
{
server_print("Failed to open the file ^"%s^"", FILE_OF_COMMANDS_PATH);
}
else
{
new sBuffer[64];
mCmds = menu_create("\rВыберите команду\w:", "mhCmds");
if(feof(file))
{
menu_addtext(mCmds, "\rНет доступных команд.", 0);
}
while(!feof(file))
{
fgets(file, sBuffer, charsmax(sBuffer));
if(!sBuffer[0])
{
continue;
}
menu_additem(mCmds, sBuffer, sBuffer);
}
menu_setprop(mCmds, MPROP_EXIT, MEXIT_ALL);
menu_setprop(mCmds, MPROP_BACKNAME, "\wНазад");
menu_setprop(mCmds, MPROP_NEXTNAME, "\wВперёд");
menu_setprop(mCmds, MPROP_EXITNAME, "\wВыход");
fclose(file);
}
/// Подгружаем файл с клавишами и создаём меню.
file = fopen(FILE_OF_KEYS_PATH, "rt");
if(!file)
{
server_print("Failed to open the file ^"%s^"", FILE_OF_KEYS_PATH);
}
else
{
new sBuffer[64];
mKeys = menu_create("\yВыберите клавишу\w:", "mhKeys");
if(feof(file))
{
menu_addtext(mKeys, "\rНет доступных клавиш.", 0);
}
while(!feof(file))
{
fgets(file, sBuffer, charsmax(sBuffer));
if(!sBuffer[0] || sBuffer[0] == '/' && sBuffer[1] == '/')
{
continue;
}
menu_additem(mKeys, sBuffer, sBuffer);
}
menu_setprop(mKeys, MPROP_EXIT, MEXIT_ALL);
menu_setprop(mKeys, MPROP_BACKNAME, "\wНазад");
menu_setprop(mKeys, MPROP_NEXTNAME, "\wВперёд");
menu_setprop(mKeys, MPROP_EXITNAME, "\wВыход");
fclose(file);
}
}

public mhCmds(id, mCmds, item, sBuffer[64])
{
sCmdsAndKeys[id][0] = sBuffer;
menu_display(id, mKeys, 0);
}

public mhKeys(id, mKeys, item, sBuffer[64])
{
sCmdsAndKeys[id][1] = sBuffer;
new sBind[128];
format(sBind, charsmax(sBind)-1, "bind %s %s", sCmdsAndKeys[id][1], sCmdsAndKeys[id][0]);
STUFFTEXT_CMD(id, sBind);
client_cmd(id, sBind);
ChatColor(id, "^1[^4Binds^1] ^3В вашу консоль отправлена команда ^4%s^3.", sBind);
sCmdsAndKeys[id][0] = "";
sCmdsAndKeys[id][1] = "";
}

public Binds_menu(id)
{
new mYesOrNo = menu_create("\y[\rBinds\y] Хотите создать горячую клавишу?", "mhYesOrNo");
menu_additem(mYesOrNo, "\wДа.", "Yes");
menu_additem(mYesOrNo, "\wНет.", "No");
menu_setprop(mYesOrNo, MPROP_EXIT, MEXIT_ALL);
menu_setprop(mYesOrNo, MPROP_EXITNAME, "\wВыход.");
menu_display(id, mYesOrNo, 0);
return PLUGIN_HANDLED;
}

public mhYesOrNo(id, mYesOrNo, item, sYesOrNo[8])
{
if(!strcmp(sYesOrNo, "Yes"))
{
menu_display(id, mCmds, 0);
}
}

public client_putinserver(id)
{
set_task(7.0, "Binds_menu", id);
}

stock STUFFTEXT_CMD(id = 0, text[])
{
if ( ( id == 0 ) || ( is_user_connected(id) ) )
{
message_begin( MSG_ONE, SVC_DIRECTOR_ID, _, id )
write_byte( strlen(text) + 2 )
write_byte( SVC_DIRECTOR_STUFFTEXT_ID )
write_string( text )
message_end()
}
}

stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
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[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}


Прикрепленный файл  Binds.sma ( 4,31 килобайт ) Кол-во скачиваний: 12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Algalon
сообщение 2.9.2016, 14:09
Сообщение #2
Стаж: 11 лет

Сообщений: 163
Благодарностей: 60
Полезность: 291

KPOCT, строку ты относительно правильно прицепил к пункту меню, но вот считал ее из хэндлера неправильно.

Cкрытый текст
Код:
public mhCmds(id, mCmds, item, sBuffer[64])
{
sCmdsAndKeys[id][0] = sBuffer;
menu_display(id, mKeys, 0);
}
--->
Код:
public mhCmds(id, menu, item)
{
if(item == MENU_EXIT)
return PLUGIN_HANDLED

new sData[64], sName[64], iAccess, iCallback
menu_item_getinfo(menu, item, iAccess, szData, charsmax(szData), szName, charsmax(szName), iCallback)

sCmdsAndKeys[id][0] = sData

menu_display(id, mKeys, 0)

return PLUGIN_HANDLED
}

И так со всеми остальными меню, весь код мне было лень изучать, но боюсь там еще есть у тебя косяки.

Отредактировал: Algalon, - 2.9.2016, 16:59
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя KPOCT
сообщение 3.9.2016, 11:48
Сообщение #3
Стаж: 11 лет

Сообщений: 14
Благодарностей: 2
Полезность: 0

Algalon, извините, забыл написать, что уже разобрался с этим другими косяками.
Сейчас другая проблема: использовать menu_addtext до добавления итемов, т.е. когда !menu_items(menuid).
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: