Вопрос по скрипту MENU

Тема в разделе "Программирование / Скриптинг", создана пользователем /_Parlament_\, 14 дек 2015.

  1. /_Parlament_\

    /_Parlament_\

    Сообщения:
    135
    Симпатии:
    7
    Видел в плагинах, в меню вылезает так [-] или [+] как это сделать?
    и еще вопрос как сохранить это?
    И на счет файла cfg, как сделать чтобы в cfg/vip/vip.cfg
    можно было редактировать чат???
     
  2. White Wolf

    White Wolf [] (int _n) -> double { return (_n % 2) == 0;}); Супер-модератор

    Сообщения:
    1.193
    Симпатии:
    424
    Это динамичное меню, работает по принципу форматирования строки. Для этого при нажатии на пункт, мы форматируем его строчку и изменяем + или - в зависимости от переменной (например bool).
     
  3. /_Parlament_\

    /_Parlament_\

    Сообщения:
    135
    Симпатии:
    7
    White Wolf, можно пример?
     
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
  5. /_Parlament_\

    /_Parlament_\

    Сообщения:
    135
    Симпатии:
    7
    R1KO, рико )
    Вот с этим, как вызвать одну из них
    PHP:
    VIP_MENU(client)  
    {  
        
    decl Handle:S_Menu
        
    SetMenuTitle(S_Menu CreateMenu(InfoMenuHandler), "VIP Menu:"); 
        
    AddMenuItem(S_Menu"HP"HP_ENABLED[client] ? "Здоровье [-]":"Здоровье [+]"); 
        
    AddMenuItem(S_Menu"ARMOR"BR_ENABLED[client] ? "Бронь [-]":"Бронь [+]"); 
        
    DisplayMenu(S_MenuclientMENU_TIME_FOREVER);  
    }  
     
  6. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    /_Parlament_\, ну в твоем случае просто пересоздавать меню.
    Но если меню не пересоздается каждый раз то тут 2 способа:
    1. Удалять пунт и вставлять измененный
    2. Работать с отображением пунктов в каллбеке меню
     
  7. /_Parlament_\

    /_Parlament_\

    Сообщения:
    135
    Симпатии:
    7
    R1KO,
    int HP_ENABLED[MAXPLAYERS+1]; вот начало
    а чтобы эта функция работала, как надо?
     
  8. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Пример:

    decl String:info[40];
    Format(info, sizeof(info), "Здоровье [%s]", b_Health[client]);
    AddMenuItem(menu, "1", info);
     
  9. /_Parlament_\

    /_Parlament_\

    Сообщения:
    135
    Симпатии:
    7
    VIP_MENU(client)
    {
    decl Handle:S_Menu;
    SetMenuTitle(S_Menu = CreateMenu(InfoMenuHandler), "VIP Menu:");
    AddMenuItem(S_Menu, "HP", HP_ENABLED[client] ? "Здоровье [-]":"Здоровье [+]");
    AddMenuItem(S_Menu, "ARMOR", BR_ENABLED[client] ? "Бронь [-]":"Бронь [+]");
    DisplayMenu(S_Menu, client, MENU_TIME_FOREVER);
    }
    На счет этого, дайте пример... А лучше урок. Тк все хотят знать как это сделать
     
  10. White Wolf

    White Wolf [] (int _n) -> double { return (_n % 2) == 0;}); Супер-модератор

    Сообщения:
    1.193
    Симпатии:
    424
    PHP:
    bool g_bHPEnabled[MAXPLAYERS+1];
    bool g_bArmEnabled[MAXPLAYERS+1];

    void VIP_MENU(int client)
    {
        
    Menu menu = new Menu(InfoMenuHandler);
        
    menu.SetTitle("VIP Menu:");
        
    char buffer[48];
        
    Format(buffersizeof(buffer), "[%s] Здоровье", (g_bHPEnabled) ? '-' '+');
        
    menu.AddItem("HP"buffer);
        
    Format(buffersizeof(buffer), "[%s] Бронь", (g_bArmEnabled) ? '-' '+');
        
    menu.AddItem("ARMOR"buffer);
        
    menu.Display(clientMENU_TIME_FOREVER);
    }

    public 
    int InfoMenuHandler(Menu menuMenuAction actionint param1int param2)
    {
        switch (
    action)
        {
            case 
    MenuAction_Endmenu.Close();
            case 
    MenuAction_Select:
            {
                
    // Где param1 = client и param 2 = позиция в меню, начинается с 0
                
    if (!param2)
                {
                    
    // Пункт с HP...
                    
    g_bHPEnabled[param1] = !g_bHPEnabled[param1];
                }
                else if (
    param2 == 1)
                {
                    
    // Пункт с ARMOR...
                    
    g_bArmEnabled[param1] = !g_bArmEnabled[param1];
                }
            }
        }
    }
    Потом снова вызываешь меню и пункты изменят свои строчки.
    P.S. Новый синтаксис, т.к. старый уже не помню даже)
     
  11. /_Parlament_\

    /_Parlament_\

    Сообщения:
    135
    Симпатии:
    7
    White Wolf, а чтобы встать какой либо код, я не очень в новом синтаксисе понимаю
     
  12. White Wolf

    White Wolf [] (int _n) -> double { return (_n % 2) == 0;}); Супер-модератор

    Сообщения:
    1.193
    Симпатии:
    424
    какой именно код?
    Чтобы вызвать это меню, нужно вызвать функцию VIP_Menu(client) . В аргументы передается индекс клиента.
     
  13. /_Parlament_\

    /_Parlament_\

    Сообщения:
    135
    Симпатии:
    7
    White Wolf,
    PHP:
    if (g_dHPEnabled[param1] = !g_bHPEnabled[param1])
    {
    //мой код
    }
     
  14. White Wolf

    White Wolf [] (int _n) -> double { return (_n % 2) == 0;}); Супер-модератор

    Сообщения:
    1.193
    Симпатии:
    424
    /_Parlament_\, в пункт с HP, где я закомментировал в коде.
    PHP:
    if (!param)
    {
      if (
    g_dHPEnabled[param1] = !g_bHPEnabled[param1])
      {
          
    //мой код
      
    }
    }
     
  15. /_Parlament_\

    /_Parlament_\

    Сообщения:
    135
    Симпатии:
    7
    Так?

    Добавлено через 6 минут
    По этому поводу помогите
     
    Последнее редактирование: 15 дек 2015
  16. White Wolf

    White Wolf [] (int _n) -> double { return (_n % 2) == 0;}); Супер-модератор

    Сообщения:
    1.193
    Симпатии:
    424
    Глянь этот исходник, думаю поймёшь.