PDA

Просмотр полной версии : [Вопрос] Диалог без ID



HarrWe
10.07.2016, 20:31
Привет ребят, помню когда то в одном моде видел что у них диалоги создаются без ID, тобишь не забивается кучу ID. Кто может помочь с этим, с меня +)

kushichka
10.07.2016, 20:48
Это что ли?

#define D_Login 1488

case D_Login:
{
//
}
или

enum Dialogs
{
D_Login,
D_Menu
};

В этой (http://pro-pawn.ru/showthread.php?8347-Основные-рекомендации-по-написанию-кода) теме, в пункте 8 описано подробнее.

HarrWe
10.07.2016, 21:07
Это что ли?

#define D_Login 1488

case D_Login:
{
//
}
или

enum Dialogs
{
D_Login,
D_Menu
};

В этой (http://pro-pawn.ru/showthread.php?8347-Основные-рекомендации-по-написанию-кода) теме, в пункте 8 описано подробнее.

Не... Я помню точно что в том моде был сток, и например при создание диалога у них вроде было ShowPlayerSpecDialog(playerid, 0, DIALOG_STYLE_MGBOX,"Бла бла бла", "Бла бла бла","");
И этот диалог не вызывал OnDialogResponse тоесть не занимал ID

ziggi
10.07.2016, 21:07
Можешь попробовать это (https://github.com/Open-GTO/mdialog), скоро здесь создам темку.

DeimoS
10.07.2016, 21:15
Не... Я помню точно что в том моде был сток, и например при создание диалога у них вроде было ShowPlayerSpecDialog(playerid, 0, DIALOG_STYLE_MGBOX,"Бла бла бла", "Бла бла бла","");
И этот диалог не вызывал OnDialogResponse тоесть не занимал ID

И он не совершал никаких действий больше? То бишь, при нажатии на одну из кнопок диалог просто закрывался?

HarrWe
10.07.2016, 21:23
Вроде бы да, ну например в команде Members 1 кнопка которая отвечает за закрытие диалогового окна.И не хочу при этом занимать ID диалога.

kushichka
10.07.2016, 21:41
Вроде бы да, ну например в команде Members 1 кнопка которая отвечает за закрытие диалогового окна.И не хочу при этом занимать ID диалога.


enum Dialogs
{
D_MSG,// Можно использовать во всех диалогах типа MSGBOX, при условии что он не требует действия, а просто закроется при нажатии кнопки
D_Login,
//...
};

DeimoS
10.07.2016, 22:29
Вроде бы да, ну например в команде Members 1 кнопка которая отвечает за закрытие диалогового окна.И не хочу при этом занимать ID диалога.

Просто в OnDialogResponse для этого ID либо не прописываешь действий, либо делай так:

public OnDialogResponse(...)
{
if(dialogid == 0) return 1;//Где 0 - тот ID диалога, который будешь использовать ВО ВСЕХ информационных диалогах (диалогах без действий)
}

Desulaid
10.07.2016, 22:31
Просто в OnDialogResponse для этого ID либо не прописываешь действий, либо делай так:

public OnDialogResponse(...)
{
if(dialogid == 0) return 1;//Где 0 - тот ID диалога, который будешь использовать ВО ВСЕХ информационных диалогах (диалогах без действий)
}

А зачем его вообще обрабатывать?

Geebrox
10.07.2016, 22:38
const DIALOG_ID_NONE = 0;
//используй во всех информационных диалогах DIALOG_ID_NONE
ShowPlayerDialog(playerid, DIALOG_ID_NONE, DIALOG_STYLE_MSGBOX, "Инфо:", "Этот диалог используется для предоставление какой либо информации и не выполняет никакие действие", "Закрыть", "");

DeimoS
10.07.2016, 23:17
А зачем его вообще обрабатывать?

Нажатие кнопки в диалоге игроком в любом случае вызовет коллбэк OnDialogResponse. Только если ты обработку такого диалога поставишь первой в коллбэке, обработка коллбэка на это и прекратится. А иначе сервер воспроизведёт каждое условие в OnDialogResponse и только потом вернёт результат.
Ю андерстенд ми?

Geebrox
10.07.2016, 23:23
Нажатие кнопки в диалоге игроком в любом случае вызовет коллбэк OnDialogResponse. Только если ты обработку такого диалога поставишь первой в коллбэке, обработка коллбэка на это и прекратится. А иначе сервер воспроизведёт каждое условие в OnDialogResponse и только потом вернёт результат.
Ю андерстенд ми?


а может в конце OnDialogResponse имеются еще какие нибудь проверки? Сервер просто их пропустит...
(не надо говорить про перехваты, ими пользоваться умеет не каждый :smile:)

DeimoS
10.07.2016, 23:30
а может в конце OnDialogResponse имеются еще какие нибудь проверки? Сервер просто их пропустит...
(не надо говорить про перехваты, ими пользоваться умеет не каждый :smile:)

Что за проверки в конце OnDialogResponse могут быть? О_о Что это за странное построение кода такое, где ты заставляешь сервер, после обработки нужного диалога, дальше проверять ID (если, конечно, у тебя все условия на "if" реализованы, а не на "if/else if" или "switch") и потом ещё производить какие-то проверки? Логичнее всего все проверки помещать в самое начало. Это во-первых.

И даже если в OnDialogResponse в самом конце есть какие-то проверки, для чего они нужны для диалога, который не имеет никаких действий, кроме как показ информации?

Мне кажется, или это попытка высосать проблему из пальца?

kushichka
10.07.2016, 23:48
Нажатие кнопки в диалоге игроком в любом случае вызовет коллбэк OnDialogResponse. Только если ты обработку такого диалога поставишь первой в коллбэке, обработка коллбэка на это и прекратится. А иначе сервер воспроизведёт каждое условие в OnDialogResponse и только потом вернёт результат.
Ю андерстенд ми?
https://www.youtube.com/watch?v=a1pWCkW95W0

Geebrox
10.07.2016, 23:57
Что за проверки в конце OnDialogResponse могут быть? О_о Что это за странное построение кода такое, где ты заставляешь сервер, после обработки нужного диалога, дальше проверять ID (если, конечно, у тебя все условия на "if" реализованы, а не на "if/else if" или "switch") и потом ещё производить какие-то проверки?

Хей полегче то)

1. Я не писал, что Я делаю такие проверки
2. Павн скриптеров очень много, соответственно все пишут свой код по разному, кто-то делает проверки в начале, а кто-то в конце, а некоторые вообще не делают.
3.
И даже если в OnDialogResponse в самом конце есть какие-то проверки, для чего они нужны для диалога, который не имеет никаких действий, кроме как показ информации?

Ты не можешь предугадывать коды других людей, почему ты так уверен, что в этом паблике только проверки на диалоги, там могут быть и другие проверки (к примеру (не у меня): могут быть проверки на dialoghider, antiddos, antiflood, и т.д.);

DeimoS
11.07.2016, 00:08
1. Я не писал, что Я делаю такие проверки

Я и не обвинял конкретно тебя. Говорил о тебе я лишь потому, что диалог я веду с тобой.


2. Павн скриптеров очень много, соответственно все пишут свой код по разному, кто-то делает проверки в начале, а кто-то в конце, а некоторые вообще не делают.

Ну кто-то и писает сидя. Что, писсуаров теперь не делать? Это если приводить не совсем правильные примеры и отшучиваться.
А если серьёзно, то если опираться на подобную логику, код для паблика вообще не стоит писать - вдруг кто-то пишет иначе и проверки у него не пройдут. Я уже сказал, что делать какие-то проверки в самом конце - не совсем логично. Если кто-то не хочет дружить с логикой, то я не думаю, что это конкретно мои проблемы


3.
Ты не можешь предугадывать коды других людей, почему ты так уверен, что в этом паблике только проверки на диалоги, там могут быть и другие проверки (к примеру (не у меня): могут быть проверки на dialoghider, antiddos, antiflood, и т.д.);

Проверка на dialoghider в конце OnDialogResponse? Что?
Да и повторюсь, диалог совершенно безвредный. Он не несёт в себе никакого действия, а значит и проверять его различными античитами нет смысла. Логичнее всего его ставить вообще выше всяческих проверок (в самое начало OnDialogResponse), ибо даже если читер попытается его перехватить, серверу он ничего плохого не сделает (с таким же успехом можно просто посылать серверу несуществующий ID диалога)

Geebrox
11.07.2016, 00:14
Я уже сказал, что делать какие-то проверки в самом конце - не совсем логично. Если кто-то не хочет дружить с логикой, то я не думаю, что это конкретно мои проблемы


Я не отрицаю правильность твоей логике, но ты не хочешь понять, что не все в этом мире логичные))


Проверка на dialoghider в конце OnDialogResponse? Что?
Я лишь привел 1-3 примера, а конкретно не говорил об этом.

Твоя правда, что даже если делать проверки то в начале, но не все по этим правилам пишут свой код


Ну кто-то и писает сидя. Что, писсуаров теперь не делать?
Твой пример не совсем соответствует этой теме или я не понял твой сложный прикол

Не хочу обсуждать эту тему (можно спорить вечно, у каждого своя правда), автору привели не 1 пример, пусть выбирает тот, который считает правильным

DeimoS
11.07.2016, 00:32
...не все в этом мире логичные))

...но не все по этим правилам пишут свой код

Я тоже понял о чём ты говоришь, но пойми, нельзя ориентироваться на тех, кто делает "неверно". Я описал ситуацию, при которой мой код будет к месту и если "твой" код построен иначе - не используй мой вариант. Как говорится, всем не угодить :)

HarrWe
11.07.2016, 09:54
Всем спасибо!Тему можете закрывать, плюсики раздал)