Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Диалоговые окна

Рег
14 Май 2016
Сообщения
37
Реакции
0
И снова здравствуйте!

Играю на Interlude-сервере, где для получения 1-й и 2-й профессии достаточно просто апнуть 20-й и 40-й уровни соответственно. При достижении уровня появляется диалоговое окно:
93f1c0f6cad0e54846536a9328245f5b.png


Для клика по соответствующей строчке я делаю проверку на уровень и после этого отправляю требуемый байпасс.

Вопрос: каким образом сделать это более грамотно? Т.е. проверять не уровень, а появление самого диалогового окна, после чего отправлять нужный байпасс. Я попытался приспособить для этих целей разнообразные примеры с отловом появления капчи, которые есть на Равре, но, как всегда, либо лыжи не едут, либо я....... что-то не так делаю.
Буду признателен за разъяснения от более смышленых скриптоделов)

PS. Я не уверен, пригодится ли это, но на всякий случай вот HTML версия диалога (это уже окно для второй профы, но кроме байпассов отличий нет):

Код:
<html>
<title>Class Change</title>
<body>
<center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br>
<img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>

<font color=AAAAAA>Please choose from the list of classes below...</font><br><br><br>

<a action="bypass -h npc_31227_change_class 8">Treasure Hunter</a><br>

<a action="bypass -h npc_31227_change_class 9">Hawkeye</a><br>

<img src=L2UI_CH3.herotower_deco width=256 height=32><br></center>

</body>

</html>
 
@SaintGlory, Получай в переменную в цикле текущий текст диалога! с делаем в 1000

Пока в диалоге не найдешь "Class Change"

можешь вообще отдельным потоком запилить это
если есть необходимость то факт получения профессии можешь в глобальную переменную записывать, ну или проверку ставить в основном теле на текущую профу
 
@ХОРВЕСТР, а тебя не затруднит привести конкретные примеры того, что ты посоветовал? Слова вроде все знакомые, а вот записать это все кодом с лету пока еще мастерства не хватает..
 
ХОРВЕСТР написал(а):
что за дизлайк?
Потому что человек не обленился, а просто не понял и попросил привести пример. Я если честно, тоже не до конца понял :)
 
@sasha282, Для начала нужно сделать чтото и спросить что не так работает. А человек просит сделать все за него!

не ударив палец о палец так сказать
 
sasha282 написал(а):
Пока в диалоге не найдешь "Class Change"
вот например это как реализовать?

Я думаю так:

if Engine.DlgSel('Class Change) then
Но у меня такое не работает на РПГ х7
 
ХОРВЕСТР написал(а):
А человек просит сделать все за него!
Человек попросил пример скрипта, исходя из которого можна написать нужное действие, о готовом варианте даже не упоминалось. Я тоже на примерах учусь, иначе наверно и не получится.
 
@sasha282, просто головой надо думать а не писать код от болды. Это программирование. Здесь надо думать что пишешь и как.

Engine.DlgSel() - что делает эта команда? Почему ты ее используешь?



sasha282 написал(а):
Человек попросил пример скрипта
Все примеры в огромном количестве есть на форуме. Надо просто хоть что то сделать.
 
@ХОРВЕСТР, Ну начнем с того, что я самоучка :) И информации, которую можна анализировать у меня просто нет. Я знаю набор команд и все. И все мои действия это сначало тестирование команд, чтобы понять как они работают, а потом уже анализ. А еще я с таким не сталкивался, и мне тоже было бы интересно решение.
Engine.DlgSel() выбирает строку в диалогах. Я так понимаю, ты хочешь сказать что это не диалог выскакивает на определенных уровнях?



ХОРВЕСТР написал(а):
Все примеры в огромном количестве есть на форуме. Надо просто хоть что то сделать.
Да, только вот называться эти темы могут как угодно (возможно человек не нашел). Я обычно перед созданием тем пользуюсь поиском, думаю все так делают. А вообще, человек задал вопрос, и отвечать на него или нет, решать тебе. И если уж ответил, обьясни человеку нормально. Это мое мнение. А так получается ты блестнул умом, человек не компетентный в этом вопросе конечно же не понял. Дак ты его еще и лентяем обозвал :)
 
@SaintGlory, вот написал тебе код, лентяй. Функция возвращает булево ( да или нет) в зависимости есть ли в диалоге передаваемый кусок текста.

uses SysUtils, Classes;

function Vhojdenie(STR: string) : Boolean;
Begin
if (Pos(STR,Engine.DlgText) > 0) then result:= true else result:= false;
end;


Begin
print(Vhojdenie('Class Change'));
end.


@sasha282,
 
ХОРВЕСТР написал(а):
есть ли в диалоге передаваемый кусок текста
Хм...Можна по такому принципу универсальность скриптам придать?
 
ХОРВЕСТР написал(а):
что это значит?
Чтобы скрипт работал почти на всех серверах. На разных серверах разные диалоги могут быть и по счету строки могу не совпадать. Вот на рпг до 40 лвла телепорты называются "Гиран", а после 40 "Гиран - 1500 аден" и строку не прожимает. А так же чтобы скрипт работал на других серверах, где диалоги могут немного отличаться, и подобная функция (конечно нужно дописать ее) может искать совпадения в строках и не важно что дописано дальше после нужного слова, тем самым решая проблему. Но нужно дописать еще чтобы выбирался вариант строки где совпадений найдено больше, а не тот который первый стоит в списке :)
 
ХОРВЕСТР написал(а):
я вообще в шоке от твоих мыслиизявлений. ей богу
А что не так-то?) Про универсальность я нигде еще не встречал информации.
 
ХОРВЕСТР написал(а):
ничего не понятно.
Обьясню проще, я просто думал что все встречались с этой проблемой и будет понятно. Вот играешь ты сейчас на одном сервере там у ГК диалог "Телепорт". Завтра ты пойдешь на другой сервер, а там диалог у ГК "Телепортироваться" и бот не прожмет уже строку. Это при условии что ты пользовался командой Engine.DlgSel('Телепорт'). Или может быть еще не соответствие строк, например на одном сервере телепорт из гирана в аден 3 по счету, а на другом сервере телепорт 4 по счету, и полетишь не туда куда нужно. Это при условии использования команды Engine.DlgSel(3).
Так вот функция на поиск совпадений (по буквам/словам/количеству букв или другие варианты) может спасти в этой ситуации. Не нужно будет переписывать скрипт под отдельный сервер. Вобщем это революция в скриптописании :)



Можна конечно как-то так, но не спасет такой вариант при прохождении квестов (они очень часто отличаются). Да и на рпг присутствуют оба варианта и получается перс 2 раза бафается.
Код:
Engine.DlgSel('View available Support Magic');
Delay(1000);
Engine.DlgSel('Receive supplemental magic');
Engine.DlgSel('Посмотреть список вспомогательной магии');
Delay(1000);
Engine.DlgSel('Получить вспомогательную магию');
 
Назад
Сверху