Вип меню (ограничение функций)

Сообщения
1,082
Реакции
58
Помог
11 раз(а)
b0t., а если игрока выкинуло?
Код:
if(!is_user_connected(id) || item == MENU_EXIT)
    return PLUGIN_HANDLED;
 
Сообщения
418
Реакции
-7
Предупреждения
8
b0t., ну тут еще надо всетаки)))
if(item == MENU_EXIT), хотя меню уничтожет
Код:
public menu2(id, menu, item)
{
    menu_destroy(iMenu);
    if(item == MENU_EXIT)
        return PLUGIN_HANDLED;
Это?
21 Мар 2023
Как вы добились такого понимания в Pawn?) Если не секрет)
 
Сообщения
397
Реакции
221
Помог
13 раз(а)
b0t., а если игрока выкинуло?
Ну и?
Ты принцип работы понимаешь или мне на пальцах объяснить?

Ну что же... Давай тогда краткий экскурс проведём.

При нажатии на пункт вызывается обработчик меню(в нашем случае он назван menu2. Туда передаются следующие аргументы:
id -- Ид игрока;
menu - Индекс меню;
item - Номер пункта(индекс пункта). Называй как хочешь.

В данном примере нам этих данных достаточно.
Идём по коду и смотрим, что сначала идёт удаление меню из памяти нативом menu_destroy(), т.к. оно нам уже не нужно, всё что нам нужно мы уже получили. После идёт условие, что если выбранный пункт является выходом -- завершаем работу.
Пункт выхода вызывается в случаях:
1. Игрок сам нажал выход;
2. Игрок вышел с сервера с отображённым меню на экране;

Для того, чтобы меню не висело в памяти сервера в случае выхода игрока мы заранее его удаляем из памяти и после делаем с ним какие-то действия.

Дальнейший код мне разбирать по косточкам или достаточно?


UPD:
Выход из меню ещё вызывается если какое-то меню перебило наше. К примеру открыли наше меню и после перебили его каким-то другим
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Я понимаю как надо понимать, а пальцем тыкать не умеешь, надо поднатянуться, меню удалиться, но оно останется висеть пока игрок не нажмет выход, или я неп прав?
 
Сообщения
418
Реакции
-7
Предупреждения
8
Как вы научились понимать этот язык Pawn? Где хоть малейшая информация есть.. на amxmodx.org?
 
Сообщения
397
Реакции
221
Помог
13 раз(а)
RedGamer,
1. Исходники игры на GitHub:
1.1 --> ТЫК
1.2 --> ТЫК2(ReGameDLL)

2. Инклюды(библиотеки);
3. Практика;
4. Форумы;
5. Адекватная критика(прислушиваться к тому в чём тебя поправляют и что тебе советуют);
6. Изучить начальные курсы C++. Как говорят Pawn -- кастрированный C++
21 Мар 2023
Code_0xABC, сам понял, что написал?
Где оно станется висеть
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
b0t., мне достаточно было смотреть работы тут адекватных скриптеров, что бы понять для чего здесь проверка, а то что ты доказываешь в чем ты не прав, это уже вопрос к тебе
 
Сообщения
397
Реакции
221
Помог
13 раз(а)
Code_0xABC, ответа на вопрос "где оно останется висеть" я так и не увидел.
Как разберёшься в этой теме -- дай знать. Пока что из твоих сообщений я понял, что ты не знаешь как оно работает и как работать с ним.
После нажатия на пункт меню автоматически скрывается с экрана игрока, но в памяти сервера остаётся(если не удалять при помощи натива menu_destroy()
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
b0t., а есть вариант если он не успеет нажать? С памяти мы сотрем, а само меню ты этим закроешь??????
 
Сообщения
397
Реакции
221
Помог
13 раз(а)
Code_0xABC, Дальше что?
Мне ещё раз ткнуть носом?

Как только меню отображается на экране игрока оно остаётся в памяти сервера. Если сменилась карта, игрок вышел, его выкинуло(любое из условий при котором меню закрылось) вызывается обработчик меню с пунктом "ВЫХОД". Далее по коду оно удаляется из памяти, упирается в условие: item == MENU_EXIT и дальше не идёт...
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
b0t., Он мне обьяснят, что делает натив menu_destroy() , я в курсах
 
Последнее редактирование:
Сообщения
397
Реакции
221
Помог
13 раз(а)
Code_0xABC, (рука лицо)...
Я не вижу смысла тебе объяснять или в твоём случае вдалбливать тебе в голову работу. Достаточно сделать debug вывод в консоль сервера, чтобы убедится в правильности написания и работы кода.
Если ты не понимаешь этого -- дальше диалог можно не вести.
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
b0t., выведи item в консоль открыв меню и не нажимая на пункт выйди с сервера, он будет item == MENU_EXIT ?
Будет ли выполняться дальше код????
Код:
public menu2(id, menu, item)
    menu_destroy(iMenu);
Одно из двух выбирать надо menu или iMenu
Я думаю в таких проверках всегда проверяют на живучесть, а потом остальное
Код:
if(get_user_flags(id) & ADMIN_LEVEL_H && !zp_get_user_zombie(id) && is_user_alive(id)
 
Последнее редактирование:
Сообщения
397
Реакции
221
Помог
13 раз(а)
Code_0xABC, почему я должен, что-то выводить и доказывать? У тебя есть руки, зайди да проверь. Для наглядности, вот тебе простейший плагин. Иди вкуривай как всё работает и не пиши больше тупые сообщения.
По поводу menu iMenu это моя опечатка. Я привык так обозначать, по венгерке
21 Мар 2023
Code_0xABC, даже логически подумать... Как дальше код будет выполняться, если игрок не выбирал пункты, которые идут под switch
 

Вложения

Сообщения
1,082
Реакции
58
Помог
11 раз(а)
b0t.,первый вопрос
Если не выполниться это условие
Код:
if(iItem == MENU_EXIT)
это выполниться?
Код:
    client_print(0,print_chat,"User press item N: %i",iItem);
    server_print("User press item N: %i",iItem);
21 Мар 2023
Code_0xABC, почему я должен, что-то выводить и доказывать? У тебя есть руки, зайди да проверь. Для наглядности, вот тебе простейший плагин. Иди вкуривай как всё работает и не пиши больше тупые сообщения.
По поводу menu iMenu это моя опечатка. Я привык так обозначать, по венгерке
21 Мар 2023
Code_0xABC, даже логически подумать... Как дальше код будет выполняться, если игрок не выбирал пункты, которые идут под switch
до switsh есть еще это
Код:
    if(p_iRounds[id][item] > 0) {
        client_print(id, print_chat, "[VIP] Жди %i раундов",p_iRounds[id][item]);
        menu(id);

        return PLUGIN_HANDLED;
    }
Если условие второе сработает, выполнит это
menu(id);
 
Последнее редактирование:
Сообщения
397
Реакции
221
Помог
13 раз(а)
Code_0xABC, оно не может не выполнится.
Я скинул тебе плагин. Иди на локалку/хост да проверяй. Не надо мне больше писать то в чём ты не разбираешься. Это признак дурачка.
Тебе говорят одно, объясняют и тыкают носом, но понимать ты этого не хочешь. Раз не хочешь понимать -- бог с тобой. Есть все ресурсы для проверки. Можно воспользоваться ими.

Вот тебе даже подкапотка меню: ТЫК
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
b0t., ты мне доказываешь совсем другое, что мне спорить, ты уже много раз доказывал, а потом понимал, спишимся на судьбу хер сним, ты мне дураку то обьясни, если вызвал меню и внезапно вышел
 
Сообщения
397
Реакции
221
Помог
13 раз(а)
Code_0xABC, ну что значит другое? Ты спрашиваешь, что будет если игрок выйдет с сервера, с открытым меню, не нажав пунтов. Будет ли в таком случае вызван код ниже. Я сказал нет и подкрепил объяснением почему. Объяснением как работает пункт выхода. Но всё равно вижу сообщения про это злощастное условие.

Я скинул тебе подкапотку. Можешь ознакомится.
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
b0t.,протестил на 1,9,0 неужели я ошибся
Код:
public TestMenu__Handler(const id,const iMenu,const iItem) {
    menu_destroy(iMenu);
    server_print("------ %i", iItem);

    if(iItem == MENU_EXIT) {
        client_print(0,print_chat,"User close menu");
        server_print("User close menu");
        return PLUGIN_HANDLED;
    }

    client_print(0,print_chat,"User press item N: %i",iItem);
    server_print("User press item N: %i",iItem);

    return PLUGIN_HANDLED;
}
User show menu
------ -3
User close menu
Получается выполниться это условие в любом случае, даже если выкинетif(iItem == MENU_EXIT)
p.s Перестану слушать тогда теперь других, лучше проверить самому, не в курсах что item изначально был равен -3)
 
Последнее редактирование:

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

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