Русское сообщество по скриптингу

Парсинг menu_additem из файла  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Парсинг menu_additem из файла

Сообщение deadkid56 » 09 авг 2018, 10:46

Здравствуйте, интересует как создать динамическое меню, считывающая из файла в таком формате:
"Название пункта в меню" "команда, выполняющаяся при выборе пункта". Если кто-то поможет, буду очень рад
Аватара пользователя
deadkid56
 
Сообщения: 42
Зарегистрирован: 09 авг 2018, 10:41
Благодарил (а): 8 раз.
Поблагодарили: 4 раз.
Языки программирования: Я ничего не знаю

Re: Парсинг menu_additem из файла

Сообщение NoPM_N1Ck » 09 авг 2018, 14:26

Погугли
Последний раз редактировалось NoPM_N1Ck 09 авг 2018, 15:38, всего редактировалось 1 раз.
Аватара пользователя
NoPM_N1Ck
 
Сообщения: 99
Зарегистрирован: 06 июл 2018, 18:56
Откуда: Русь
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Опыт программирования: Меньше месяца
Языки программирования: Java

Re: Парсинг menu_additem из файла  [Решено]

Сообщение RevCrew » 09 авг 2018, 14:48

Код: Выделить всё
#include <amxmodx>

new PLUGIN[]  = "";
new AUTHOR[]  = "";
new VERSION[] = "0.00";

#define FILE "addons/amxmodx/data/menu.txt"

enum menuArray {
    Name[64],
    Cmd[64]
}

new Array: g_array_file;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    g_array_file 
= ArrayCreate(menuArray);
    
    parse_file
(FILE);
}

public showMenu(id) {
    
    new data
[menuArray];
    new size = ArraySize(g_array_file);
    
    new menu 
= menu_create("Menu title", "MenuHandler");
    for(new i; i<size; i++) {
        ArrayGetArray(g_array_file, i, data);
        menu_additem(menu, data[Name], data[Cmd]);
    }
    
    menu_display
(id, menu, 0);
}

public MenuHandler(id, menu, item)
{
    
    if 
(item == MENU_EXIT)
        return menu_destroy(menu);
    
    new s_Data
[64], s_Name[64], i_Access, i_Callback
    menu_item_getinfo
(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback);
    
    new name
[32];
    get_user_name(id, name, 31);
    log_amx("Client %s, item %s, command %s", name, s_Name, s_Data);
    
    client_cmd
(id, s_Data);
    
return menu_destroy(menu);
}

stock parse_file ( file[] )
{
    new f = fopen( file, "r");
    
    if 
( !f)    return;
    
    new filedata
[128], data[menuArray];
    
    while 
(!feof(f)) {
        fgets(f, filedata, charsmax(filedata));
        
        if
(!filedata[0] || filedata[0] != '"')
            continue;
            
        parse
(filedata, data[Name], 63, data[Cmd], 63);
        
        ArrayPushArray
(g_array_file, data);
    }
    
    fclose
(f);
}
Последний раз редактировалось RevCrew 09 авг 2018, 20:52, всего редактировалось 1 раз.
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Парсинг menu_additem из файла

Сообщение deadkid56 » 09 авг 2018, 15:33

RevCrew писал(а):
Код: Выделить всё
#include <amxmodx>

new PLUGIN[]  = "";
new AUTHOR[]  = "";
new VERSION[] = "0.00";

#define FILE "addons/amxmodx/data/menu.txt"

enum menuArray {
    Name[64],
    Cmd[64]
}

new Array: g_array_file;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    g_array_file 
= ArrayCreate(menuArray);
    
    parse_file
(FILE);
}

public showMenu(id) {
    
    new data
[menuArray];
    new size = ArraySize(g_array_file);
    
    new menu 
= menu_create("Menu title", "MenuHandler");
    for(new i; i<size; i++) {
        ArrayGetArray(g_array_file, i, data);
        menu_additem(menu, data[Name], data[Cmd]);
    }
    
    menu_display
(id, menu, 0);
}

public MenuHandler(id, menu, item)
{
    
    if 
(item == MENU_EXIT)
        return menu_destroy(menu);
    
    new s_Data
[64], s_Name[64], i_Access, i_Callback
    menu_item_getinfo
(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback);
    
    new name
[32];
    get_user_name(id, name, 31);
    log_amx("Client %s, item %s, command %s", name, s_Name, s_Data);
    
    return client_cmd
(id, s_Data);
}

stock parse_file ( file[] )
{
    new f = fopen( file, "r");
    
    if 
( !f)    return;
    
    new filedata
[128], data[menuArray];
    
    while 
(!feof(f)) {
        fgets(f, filedata, charsmax(filedata));
        
        if
(!filedata[0] || filedata[0] != '"')
            continue;
            
        parse
(filedata, data[Name], 63, data[Cmd], 63);
        
        ArrayPushArray
(g_array_file, data);
    }
    
    fclose
(f);
}


Спасибо!!
Я вам очень благодарен :-)
Аватара пользователя
deadkid56
 
Сообщения: 42
Зарегистрирован: 09 авг 2018, 10:41
Благодарил (а): 8 раз.
Поблагодарили: 4 раз.
Языки программирования: Я ничего не знаю

Re: Парсинг menu_additem из файла

Сообщение Mistrick » 09 авг 2018, 18:36

RevCrew, а после обычного выбора меню удалять уже не надо?
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Парсинг menu_additem из файла

Сообщение RevCrew » 09 авг 2018, 20:52

Спасибо, исправил
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15