|
|
|
Игровой бот Небеса: уникальная игра! |
|
|
dimоn |
1.7.2015, 13:27
|
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27
|
Цитата(DarkMaster @ 1.7.2015, 10:27) Т.е. у вас на 1 строку приходится 1-3 строки wait'ов? (IMG: style_emoticons/default/shok.gif) На блоке разбора после боя много вариантов действий, состоящих, соответственно, только из "тыков" и ожидания + проверки, выполнилось ли действие. сколько это дополнительных строк?
|
|
|
|
dimоn |
2.7.2015, 10:45
|
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27
|
Цитата(DarkMaster @ 2.7.2015, 7:50) В скрипте нет ни одной строки кроме кликов что ли?
Ну почему нет то? Я же пояснил - скрипт блока разбора дропа после боя. если в луте "одно" продаем (клик продать, подтвердить, выход, новый бой и т.д.) если "другое" забрать, убрать в сундук если "третье" разобрать (разбор, подтверждение, объединить, убрать в сундук, выход, новый бой и т.д.) при чем, все это еще и с кликом на вызов доп. менюшки.
|
|
|
|
DarkMaster |
2.7.2015, 11:01
|
Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27708
Пользователь №: 11.279
|
Цитата если в луте "одно" Это уже не клик, а условие. Соответственно оно потянет за собой как минимум end_if. Цитата если "другое" аналогично Цитата если "третье" аналогично Цитата Все это хорошо, но один момент - в варианте, вида while_not x y color параметр color разве будет постоянным??? Что мешает передавать параметр?
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
dimоn |
2.7.2015, 11:52
|
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27
|
Цитата(DarkMaster @ 2.7.2015, 11:01) Цитата если в луте "одно" Это уже не клик, а условие. Соответственно оно потянет за собой как минимум end_if. Цитата если "другое" аналогично Цитата если "третье" аналогично А-а-а (IMG: style_emoticons/default/viking.gif) (IMG: style_emoticons/default/russian_roulette.gif) ))))) (IMG: style_emoticons/default/crazy.gif) То ли я никак не могу доходчиво донести, о чем пытаюсь пояснить... то ли все всё поняли и цепляются до слов?.. типичный вариант куска скрипта Код if *** left x y left x y if *** left x y left x y left x y left x y left x y end_if if $rb > 0 left x y left x y left x y left x y else left x y left x y left x y left x y left x y end_if end_if left x y //bez1 if (***) or (***) left x y left x y left x y left x y left x y left x y left x y end_if left x y left x y left x y left x y //prodat left x y left x y left x y wait 1000 left x y left x y //noviy boy start_script 1 stop_script left x y left x y left x y left x y left x y left x y wait 1000 //разобран left x y left x y left x y left x y left x y left x y end_if
Что я пытаюсь сказать - сопостовление строк с условиями и с кликами. Преобладание очевидно. Если добавить еще и ожидание, после клика на обработку его сервером, объем вырастет в 2-4 раза. Поступил по другому, решил вопрос увеличением межстрочного интервала. Вот (IMG: style_emoticons/default/biggrin.gif) (IMG: style_emoticons/default/biggrin.gif) (IMG: style_emoticons/default/biggrin.gif) Цитата(DarkMaster @ 2.7.2015, 11:01) Что мешает передавать параметр?
хм.. его изменение.. Т.е. если менюха должна вылезти в одном месте, он параметр в заданной точке один. Если в другой, то и, соответственно, + изменение координат + их определение. Или я опять пошел не по тому пути?
|
|
|
|
DarkMaster |
2.7.2015, 12:07
|
Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27708
Пользователь №: 11.279
|
Цитата то ли все всё поняли и цепляются до слов?.. Цепляюсь и цепляюсь оправданно. Потому, что ваши слова при точном и буквальном воспроизведении создают картинку сюрреалистического бреда. Цифры не сходятся. Цитата хм.. его изменение.. Т.е. если менюха должна вылезти в одном месте, он параметр в заданной точке один. Если в другой, то и, соответственно, + изменение координат + их определение. Ну вы же кликаете? Значит координаты известны. Кстати можно и вовсе создать подпрограмму-комбайн либо несколько подпрограмм, которые будут друг друга вызывать. При этом сохранится весь функционал, объем и вовсе может не изменится за исключением добавления самих подпрограмм. А если координаты из серии кликов завернуть в массив и for, то тело скрипта и вовсе может уменьшится(шапка правда увеличится соразмерно). Мы же можем передать любой набор параметров, включая координаты клика, координаты и цвет контрольной точки. Т.е. передав 5 параметров нам и кликать то в скрипте не надо будет - это сделает подпрограмма. Сообщение отредактировал DarkMaster - 2.7.2015, 12:08
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
dimоn |
2.7.2015, 14:08
|
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27
|
Цитата(DarkMaster @ 2.7.2015, 12:07) Кстати можно и вовсе создать подпрограмму-комбайн либо несколько подпрограмм, которые будут друг друга вызывать. При этом сохранится весь функционал, объем и вовсе может не изменится за исключением добавления самих подпрограмм. А если координаты из серии кликов завернуть в массив и for, то тело скрипта и вовсе может уменьшится(шапка правда увеличится соразмерно).
Во-во-во, это уже интересно.. То есть, у нас есть точка клика, вернее ее координаты, каким нибудь геткалором, мы берем ее цвет и отправляем на цикл вайла, до его изменения? Массив... i0 j0 i1 j1 x y [i0] x(нач) последовательность координат операций по х [j0]у(нач) -//-//- [i1]х(кон) -//-//- [j1]у(кон) -//-//- for i=[начало серии кликов] to [конец серии] for j=[коорд.по х(нач)] to [у(кон)] х(нач) + random ([разница между нач. и кон.]) y(нач) + random ([разница между нач. и кон.])
|
|
|
|
DarkMaster |
2.7.2015, 14:40
|
Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27708
Пользователь №: 11.279
|
Цитата То есть, у нас есть точка клика, вернее ее координаты, каким нибудь геткалором, мы берем ее цвет и отправляем на цикл вайла, до его изменения? Можно и так, но я бы просто задал некоторую точку и координату, которую необходимо контролировать. Можно сделать достаточно большой массив под все это дело: Код // Образец вызова с произвольными данными. init_arr %a 1 2 0 3 4 5 // clickX; clickY; while|not(>0|0); checkX; chekY; checkColor. gosub clickAndWait stop_script
:clickAndWait left %a [ 1 ] %a [ 2 ] if %a [ 3 ] > 0 while %a [ 4 ] %a [ 5 ] %a [ 6 ] wait 10 end_while else while_not %a [ 4 ] %a [ 5 ] %a [ 6 ] wait 10 end_while end_if return
Вызов с произвольными данными можно легко завернуть в for, двуразмерный массив и т.д.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
sefi |
14.7.2015, 9:29
|
Registred
Сообщений: 1
Регистрация: 21.4.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.425
|
Прочитал данную дискуссию ... увидел, что автор делает СИСТЕМНУЮ ОШИБКУ !!! Впрочем это чисто мое мнение - и если что, то можно наплевать на него :-) Сейчас попробую объяснить его: Наверное это быстро смогут понять те кто программирует промышленные контроллеры .. Дело в том, что вы делаете скрипт - как классический программист ... то есть программа стартует, что то считает и потом выдает результат. Да же не первой странице нарисовали красивые картинки в виде графов, как это считается. Обсуждаете что надо использовать while что бы дождаться появления менюшки, ну и так далее. На самом деле - надо сломать себе мозг ... и понять что СКРИПТ СУЩЕСТВУЕТ (ВЫПОЛНЯЕТСЯ) ВСЕГДА !!! И на самом деле - одно действие можно выполнять на одном цикле, а другое например на следующем. ТО есть - если появился зеленый цвет в определенной области экрана - значит твой ход, надо брать манну и бить ... и квадратом и крестом!!! Если на одном цикле ударило квадратом, на следующем ударит крестом. Если в каком то месте экрана появился фон менюшки - значит нажимаем в такую то точку, что бы забрать в рюкзак, или продать. Возможно не понятно объяснил ... извиняюсь но поверьте - таким образом получаются короткие, надежные и быстро работающие скрипты. :-) Удачи
|
|
|
|
dimоn |
14.7.2015, 13:01
|
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27
|
Ну да, понял не особо... То есть, Вы хотите сказать, что ошибка самого скрипта в том, что он не имеет завершения? И если что-то слетит, он не перестанет работать? Да, работать он не перестанет, но и "тыкать" он тоже никуда не будет. скорее всего будет ждать появления хода. Но, для чего все это делается? Вопрос, возможно, больше риторический. Основная задача создателей - увлечь пользователя и, в определенный момент, призвать его купить ресурсы. То есть, основная цель, все-таки имеет маркетинговый характер. В то же время, пользователю, не интересно платить кому-то, за что-то, на самом деле не существующее. Но, на то, что бы набить ресурсы самостоятельно, понадобится очень много, по сути, бесполезно потраченного, времени. Скрипты решают этот вопрос, тем, что работают самостоятельно и в принципе, я не вижу смысла, подводить их к завершению. Если это кому-то необходимо, то селать это не так сложно. Самое простое - поставить заданное число повторов или рубануть по времени работы. Наконец, можно настроить параметры управления питанием и время простоя до перехода в спящий режим.
Или есть какие-то предложения, по изменению строения или принципа работы?
|
|
|
|
DarkMaster |
14.7.2015, 19:39
|
Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27708
Пользователь №: 11.279
|
Цитата Прочитал данную дискуссию ... увидел, что автор делает СИСТЕМНУЮ ОШИБКУ !!! Впрочем это чисто мое мнение - и если что, то можно наплевать на него :-) Сейчас попробую объяснить его: Наверное это быстро смогут понять те кто программирует промышленные контроллеры .. Дело в том, что вы делаете скрипт - как классический программист ... то есть программа стартует, что то считает и потом выдает результат. Да же не первой странице нарисовали красивые картинки в виде графов, как это считается. Обсуждаете что надо использовать while что бы дождаться появления менюшки, ну и так далее. На самом деле - надо сломать себе мозг ... и понять что СКРИПТ СУЩЕСТВУЕТ (ВЫПОЛНЯЕТСЯ) ВСЕГДА !!! И на самом деле - одно действие можно выполнять на одном цикле, а другое например на следующем. ТО есть - если появился зеленый цвет в определенной области экрана - значит твой ход, надо брать манну и бить ... и квадратом и крестом!!! Если на одном цикле ударило квадратом, на следующем ударит крестом. Если в каком то месте экрана появился фон менюшки - значит нажимаем в такую то точку, что бы забрать в рюкзак, или продать. Возможно не понятно объяснил ... извиняюсь но поверьте - таким образом получаются короткие, надежные и быстро работающие скрипты. :-) В этом есть смысл, но в плане скриптов и объемных скриптов получается ужас. Поэтому я где-то выше рекомендовал (вроде в этой теме) делать несколько "стандартных" положений и приходить к ним при старте скрипта. Я делал описанную вами конструкцию в чуть измененном виде - по сути это был набор вложенных ифов в обратном порядке. Т.е. если есть возможность сделать конечный ход, то он делается, иначе проверяется возможность перейти к конечному ходу, если есть возможность перейти к конечному ходу то переходим, иначе проверяем возможность перейти к предконечному ходу и т.д. В реалиях - это очень запутанный и неудобный ход, возможны очень большие проблемы с производительностью, если требуется хорошая реакция. По факту в реалиях проще делать контролирующий скрипт сателит, который проверяет счетчик успешных законченных действий, в случае проблем идет перезапуск скрипта и приход к стандартному положению. При этом полностью сохраняется адекватный читаемый вид скрипта, стабильность на практике не сильно страдает и при средне отработанном скрипте кпд страдает на 1-2% при одинаковом времени выполнения. У меня был скрипт который за минимальное количество времени (4-8 секунд обычно) должен был проработать по менюшкам и перейти к началу. Переход к схеме со скриптом сателитом дал выигрыш по скорости работы примерно в 40%, обернулось это перезапуском скрипта 2-3 раза в сутки, т.е. потерей в 2-3 минуты (так был настроен датчик подвисания) в сутки, что просто не серьезно. При этом часть проблем по факту была единичными случаями которые просто невозможно было предвидеть, например, краш сервера с никогда ранее не возникавшей ошибкой. Сателиту же при этом не составляло труда перезапустить основной скрипт, который успешно стартовал заново приложение и цеплялся к серверу. В целом идейно ваше мнение очень правильное, но зачастую приводящее к очень большим проблемам при объемных скриптах, которые необходимо редактировать. Цитата Или есть какие-то предложения, по изменению строения или принципа работы? Об этом и речь. Человек предлагает не иметь глобальной логике в скрипте. По большому счету предлагается сделать набор координат+цвет со всеми использующимися действиями и перебирать их постоянно. Т.е. весь скрипт в таком случае будет выглядеть примерно так: Код :start if x1 y1 c1 left x1 y1 end_if if x2 y2 c2 left x2 y2 end_if if x3 y3 c3 left x3 y3 end_if goto start
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Triniti |
26.7.2015, 23:05
|
Neophyte
Сообщений: 40
Регистрация: 2.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.033
|
Всем утро/день/вечер/другое (нужное подчеркнуть) (IMG: style_emoticons/default/blink.gif) Собсна тема всё ещё актуальна, и хотелось бы увидеть варианты упрощения сего скрипта: Код move 607, 437 abs // окно игра справа set #win windowfromcursor set workwindow #win set #t 200 + random (400) // быстрый клик set #w 2200 + random (800) // переход set #d 4000 + random (800) // дракон set #o 600 + random (500) // клик set #q 1300 + random (400) // сбор
set $path C:\острова\ // мобы set %mobs[1] глад set %mobs[2] джига set %mobs[3] курл set %mobs[4] матаз
// кнопки set %button[1] напасть set %button[2] обед set %button[3] продать set %button[4] отдать set %button[4] забрать
// элики (исп-ся в этом порядке) set %elik[1] култ set %elik[2] зелмана set %elik[3] вино set %elik[4] крест set %elik[5] молния set %elik[6] наручи set %elik[7] куб
// остальное set %etc[1] ход set %etc[2] ворота set %etc[3] победа
set #koll 0 // убито мобов GOTO poisk
:select move 607, 437 abs // мышь на игру set #win windowfromcursor set workwindow #win set #koll 0 // убито после обновления set $ostrov findimage (0 0 320 490 ($path%etc[2].bmp) %crds workwindow) if $ostrov > 0 // ворота найдены wait #w else wait #d end_if
:poisk // мобы // в цикле ищем любого моба из списка for #mob 1 size(%mobs) set $mob findimage (0 0 200 600 ($path%mobs[#mob].bmp) %crds workwindow) if $mob > 0 left %crds[1 1] %crds[1 2] // клик на моба wait 400 GOTO ataka // атакуем end_if end_for GOTO next // идём дальше
:next left 673, 262 // след остров wait #w GOTO poisk // ищем
:ataka left 89,477 wait #t set $vboy findimage (0 0 600 420 ($path%button[1].bmp) %crds workwindow) if $vboy > 0 // напасть left %crds[1 1] %crds[1 2] else wait 100 GOTO ataka // пробуем снова end_if
set #time 0 while #time < 30 :xod // ждём переход хода к нам set $xod findimage (0 0 400 130 ($path%etc[1].bmp) %crds workwindow) if $xod > 0 gosub bitva // если ход наш, атакуем else wait 1000 set #time #time + 1 hint ([42] (ждём #time с)) if #time = 30 // если зависло alarm alarm GOTO reboot // обновляемся end_if GOTO xod end_if end_while :bitva wait 150 // в цикле ищем любой доступный закл for #zakl 1 size(%elik) set $elik findimage (0 0 710 600 ($path%elik[#zakl].bmp) %crds workwindow) if $elik > 0 left %crds[1 1] %crds[1 2] // элик wait 400 if %elik[#zakl ] = крест Call Rand end_if if %elik[#zakl ] = куб Call Rand end_if end_if end_for
Proc Rand :Rand set $rand Random(10)
if $rand < 1 Goto Rand end_if
set %r[1] 304, 148 //1.2 set %r[2] 432, 357 //5.6 set %r[3] 461, 262 //6.4 set %r[4] 348, 228 //3.3 set %r[5] 341, 307 //3.5 set %r[6] 343, 354 //3.6 set %r[7] 426, 267 //5.4 set %r[8] 299, 272 //2.4 set %r[9] 345, 266 //3.4 set %r[10] 383, 347 //4.6 left %r[$rand] wait 10s // после удара фигурой ждём 10 сек
End_Proc
set $trof findimage (0 0 500 400 ($path%etc[3].bmp) %crds workwindow) if $trof > 0 // поле пропало GOTO drop_okno else GOTO xod // повторяем ход end_if :drop_okno // ждём пока поле пропадёт set #time 0 while #time < 30 set #trof findimage (0 0 500 400 ($path%etc[3].bmp) %crds workwindow) if #trof > 0 // поле пропало GOTO drop_sbor else wait 200 set #time #time + 1 hint ([42] (#time)) if #time = 40 alarm alarm GOTO reboot // обновляемся end_if end_if end_while :drop_sbor wait #q // тут если надо собираем дроп, иначе продаём GOTO prodat
:prodat wait #t left 330, 379 // продать всё wait #o set $proda findimage (0 0 670 680 ($path%button[3].bmp) %crds workwindow) if $proda > 0 left %crds[1 1] %crds[1 2] // продать else set $otdat findimage (0 0 670 680 ($path%button[4].bmp) %crds workwindow) if $otdat > 0 left %crds[1 1] %crds[1 2] // отдать end_if end_if wait #w left 414, 382 // выйти wait #o
:end_attack // после манипуляций с дропом set #koll #koll + 1 hint ([42] (убито #koll)) // убито if #koll > 50 GOTO reboot else GOTO next end_if
:reboot // перезагрузка страницы left 1682, 68 abs wait 20s GOTO select
Исходные картинки здесь (drive.google) Запутался всё читать, потому спрошу так: решен ли вопрос с движением камней на поле для завершения хода? И совсем странный вопрос: каковы могут быть причины неработоспособности скрипта? На виртуальной машине (Win XP) работает корректно, на реальном ПК (Win 8.1 pro VL) отказывается искать картинки в plugin-container'e, хотя у других работает (но тоже не у всех). Flash при этом у всех последний, браузеры FF/Seamonkey.
|
|
|
|
Triniti |
27.7.2015, 0:25
|
Neophyte
Сообщений: 40
Регистрация: 2.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.033
|
Цитата(cirus @ 27.7.2015, 2:10) Причин может быть множество. Зависит от того в каком месте перестает работать. Картинки сделанные на разных компьютерах могут отличатся. Соответственно картинки сделанные на одном компьютере могут не находится на другом. Так что не удивительно что не у всех работает. Работает ли поиск картинок в 8.1 в вообще? Имеется ввиду в других браузерах или приложениях? При поиске workwindow привязка должна быть к родительскому окну.
В 8.1 не работает именно в plugin-container вообще (ни в одном браузере), картинки сделаны на компе, до зимы кстати всё работало (и привязывал всегда именно к контейнеру, при привязке к firefox.exe работать ясно-понятно не будет; на виртуалке также к контейнеру привязывается и работает как часы). В других приложениях поиск на 8.1 работает. На компе работают только клики, т.е. если даже в poisk есть совпадения на экране, пилот их не видит и просто идёт на next и зацикливается poisk-next-poisk...
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|