|
|
|
Управление предметами в игре Небеса, Скрипт для продать, забрать, разобрать предметы |
|
|
Jpr |
7.2.2017, 13:21
|
Neophyte
Сообщений: 10
Регистрация: 30.1.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.317
|
Доброго дня всем! Прошу не судить строго за такой кривой скрипт. Программистом стал только вчера, а код собирал по видео с ютуба (IMG: style_emoticons/default/smile.gif) Прочие варианты скриптов без if почему-то отказываются работать Пытаюсь написать универсальный скрипт, который бы не только бил, но и помогал по хозяйству. Буду рад помощи в улучшении скрипта. Задача состоит в написании двух частей скрипта. Первая война с мобами, вторая - управление предметами. Хочу, чтобы одни предметы забирал, другие продавал или разбирал(при возможности их разобрать). В идеале еще объединял и складывал в сундук, но это пока не под силу мне. Подскажите, что изменить или улучшить можно в скрипте, чтобы не кликал в холостую, когда уже другие строки скрипта должны исполняться? Небеса
Код set #handleWin findwindow set workwindow #handleWin //UOPilot привяжется к последнему активному окну //жмем остров 1011, 381 abs set #x 1011 + random (10) set #y 381 + random (10) left #x #y abs wait 1500 + random (200)
//тень воина if 418, 641 930907 set #x 409 + random (12) set #y 644 + random (12) left #x #y abs wait 1000 + random (300) End_if //нападение if 446, 207 9816548 set #x 788 + random (12) set #y 427 + random (3) left #x #y abs wait 1000 + random (300) End_if
//бой //нажать яд while 531, 723 12373756 set #x 531 + random (5) set #y 723 + random (5) left #x #y abs wait 500 + random (200) End_while
//если победа if 523, 464 80685
// если выпал предмет, то забрать if 630, 440 2234229
//нажать дроп 631, 436 abs set #x 631 + random (5) set #y 436 + random (5) left #x #y abs wait 500 + random (200)
//нажать забрать во всплывшем окне 744, 474 set #x 744 + random (7) set #y 474 + random (3) left #x #y abs wait 500 + random (200) End_if
//если не выпал предмет, то продать if_not 630, 440 2234229 //нажать выйти 775, 499 set #x 775 + random (10) set #y 499 + random (5) left #x #y abs wait 1000 + random (200) End_if
//продать, если вылезло окно предупреждение if 519, 423 7498230 set #x 904 + random (10) set #y 523 + random (4) left #x #y abs wait 1500 + random (200) End_if
//выйти, ячейка с предметом пуста 774, 497 if 633, 436 2769506 set #x 774 + random (20) set #y 497 + random (4) left #x #y abs wait 1500 + random (500) End_if end_if end_if
|
|
|
|
cirus |
7.2.2017, 15:38
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26703
Пользователь №: 16.971
Возраст: 29
|
Цитата не получается свернуть код Код [spoiler=название] текст [/spoiler] Нажмите скрипт --> форматировать. Будет удобнее читать код. В конце лишний end_if. Код // если выпал предмет, то забрать if 630, 440 2234229 //если не выпал предмет, то продать if_not 630, 440 2234229 Это записывать лучше так: Код if 630, 440 2234229 // выпал предмет else // иначе // не выпал предмет end_if Код set #x 409 + random (12) set #y 644 + random (12) left #x #y abs left 409 644 12 12 abs - можно так записывать Делайте скрипт через gosub http://uopilot.tati.pro/index.php?title=Gosub, 2й пример. Получится что-то вроде: код
Код while 1 = 1 gosub поиск_моба // переход к метке 'поиск_моба' gosub бьём_моба gosub забираем_дроп end_while
:поиск_моба // тут действия для поиска моба, например: while_not 418, 641 930907 // пока не найден моб // клик на остров // пауза чтоб остров прогрузился end_while return // вернуться к месту перенаправления
:бьём_моба // тут действия для убийства моба, также через while // т. е. пока моб не убит, не выходим из этого блока return
:забираем_дроп // нужные действия с дропом return
|
|
|
|
Jpr |
7.2.2017, 17:53
|
Neophyte
Сообщений: 10
Регистрация: 30.1.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.317
|
Совсем запутался в этой структуре кода, где и как происходит переход от одного действия к другому? Какая-то каша получилась, не понимаю в каком месте нападение. Все, что делает сейчас это просто листает острова, не находит никого и не нападает код
Код while 1 = 1 gosub поиск_моба // переход к метке 'поиск_моба' gosub бьём_моба gosub забираем_дроп end_while
:поиск_моба while_not 415, 635 9879244 left 1011 381 12 12 -12 -12 abs // клик на остров wait 5000 + random (200) // пауза чтоб остров прогрузился end_while msg бьем монстра return // вернуться к месту перенаправления
:бьём_моба if 420, 639 7709375 //если найден моб left 419, 640 10 10 -10 -10 abs wait 500 + random (200) end_if
//нападение while 454, 214 11129837 // тут действия для убийства моба, также через while left 776, 429 12 3 -12 -3 abs //напасть wait 500 + random (200) end_while
// бой //нажать яд while 607, 206 936748 left 447, 667 5 5 -5 -5 abs 500 + random (200) end_while // т. е. пока моб не убит, не выходим из этого блока msg забираем дроп return
:забираем_дроп
//если победа if 526, 464 78630 wait 500 + random(200) // нужные действия с дропом if 630, 440 2234229 // если выпал предмет, то забрать, иначе продать left 631,436 5 5 -5 -5 abs wait 500 + random (200) left 744,474 7 3 -7 -3 abs //нажать забрать во всплывшем окне wait 500 + random (200)
//иначе продать else left 775,499 10,5 -10 -5 abs wait 1000 + random (200) End_if
//продать, если вылезло окно прредупреждение if 519, 423 7498230 left 904,523 10 4 -10 -4 abs wait 1500 + random (200) End_if
//выйти, ячейка с предметом пуста 774, 497 if 633, 436 2769506 left 774,497 20 4 -20 -4 abs wait 1500 + random (500) End_if end_if
return
|
|
|
|
Cockney |
7.2.2017, 18:20
|
Master
Сообщений: 1.395
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21047
Пользователь №: 16.156
|
Верхушка кода - вызов меток. Код while 1 = 1 gosub поиск_моба // переход к метке 'поиск_моба' gosub бьём_моба gosub забираем_дроп end_while Метки начинаются с двоеточия, дальше следует ее имя. Код код этой метки располагается до ключевого слова Код Пример : Код :поиск_моба //тут код return // вернуться к месту перенаправления другие метки следуют тому же принципу. А вообще, ознакомиться стоит. Пример 2 прям по ситуации.
|
|
|
|
Jpr |
8.2.2017, 0:12
|
Neophyte
Сообщений: 10
Регистрация: 30.1.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.317
|
Цитата(Cockney @ 7.2.2017, 18:20) А вообще, ознакомиться стоит. Пример 2 прям по ситуации. Именно по данному примеру пытаюсь понять как написать код. Правильно ли я описал процесс сейчас? Можете ли выложить свой готовый пример работающего кода? Многие вещи мне не понятны от начала до конца по описанию в Вики, но в конкретных примерах яснее. Почему не происходит нужный процесс - кликнул остров, нашел моба, кликнул на него, напал, нажал заклинание, победил? скрипт
Код while 1 = 1 gosub poisk // переход к метке 'poisk' gosub napadenie gosub забираем_дроп end_while
:poisk left 973, 400 10 10 -10 -10 abs // клик на остров wait 2000 + random (500) // пауза чтоб остров прогрузился
while 390, 572 5695223 //ищем матазуу goto napadenie while 371, 635 263431 //ищем курлыка goto napadenie while 415, 560 12956589 //ищем солн.ведьму goto napadenie
end_while end_while end_while return // вернуться к месту перенаправления
:napadenie while 414, 270 11985401 //ждем открытия окна для нападения wait 500 + random (200) end_while
set #d findcolor (403, 138 973, 502 1 1 (3949430) %arr 2 -1 3) //Жмем в бой 2 - это тип поиска -1 - количество найденных пикселей (искать все) 3 - погрешность оттенка if #d > 0 // если найден нужный цвет move %arr [1 1] %arr [1 2] // переместит курсор на найденные точки left 739, 503 10 3 -10 -3 abs // нажмет в бой wait 1000 + random (200) // ждет боя end_if
while 570, 231 607783 // Бой с монстром ждем своего хода ориентир стрелка left 409, 691 5 5 -5 -5 //Жмем яд wait 500 + random (200) // тут действия для убийства моба, также через while end_while return
:забираем_дроп // нужные действия с дропом return
|
|
|
|
cirus |
8.2.2017, 2:29
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26703
Пользователь №: 16.971
Возраст: 29
|
Цитата Почему не происходит нужный процесс Код while 1 = 1 gosub poisk log Моб нашёлся gosub napadenie log Моб убит gosub забираем_дроп log Дроп собран end_while Смотрим на какой стадии скрипт перестаёт правильно работать. Например, если в логе 'Моб нашёлся', значит моб находится, т. е. в блоке поиска нет проблем. Находим метку, в которой что-то не так, добавляем вывод в лог в метке и смотрим что в ней не работает. Это сразу убираем: Код while 390, 572 5695223 //ищем матазуу goto napadenie while 371, 635 263431 //ищем курлыка goto napadenie while 415, 560 12956589 //ищем солн.ведьму goto napadenie end_while end_while end_while Про goto лучше забудьте. Можно так: Код :poisk while_not 112, 35 8188940 or 121, 132 16252886 or 118, 245 5848370 // пока не найден матазуу или курлык или ведьма left 973, 400 10 10 -10 -10 abs // клик на остров wait 2000 + random (500) // пауза чтоб остров прогрузился end_while return
|
|
|
|
Jpr |
8.2.2017, 16:15
|
Neophyte
Сообщений: 10
Регистрация: 30.1.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.317
|
Цитата(cirus @ 8.2.2017, 11:38) Пока в скрипте несколько goto ещё можно отследить ход скрипта, когда их будет штук 20 сами запутаетесь. Клик на остров, ожидание прогрузки, если моб найден выход из цикла. Вообще искать мобов по цвету можно только тех что не двигаются. Наведите курсор на Курлыка и понажимайте Ctrl + A, цвет в одной и той же точке разный будет. Поэтому поиск моба я делал через поиск его имени: https://forum.uokit.com/index.php?showtopic=30171Спрашивал уже в вашей теме, но сам не понял, а ответы также не внесли ясности. Как сделать клик с рандомными координатами в вашем скрипте? А также как сделать в нем рандомные паузы? Либо это уже присутствует, но тогда в каком месте это описано в коде?
|
|
|
|
Jpr |
8.2.2017, 19:35
|
Neophyte
Сообщений: 10
Регистрация: 30.1.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.317
|
Правильно ли я пытаюсь описать кодом то, что указал в комментариях строк кода? Должно быть так - жмем остров, ищем картинку с мобом с девиацией 5% в цвете, если не нашли жмем остров и так пока не найдем моба. Если нашли, то навели курсов на центр картинки и нажали на моба с рандомными координатами от центра картинки? Почему-то нажимает на всех подряд, кто попадается. Код gosub poisk // начало скрипта end_script
:poisk left 1009, 376 10 10 -10 -10 abs //Жмем остров wait 500 + random(200) //ищем мобов set #a findimage (0 0 1920 1080 (C:\Users\user_4\Downloads\КартинкиНебеса\ten.bmp) %crds 2 80 20 5) if #a > 0 move %crds[1 3] %crds[1 4] // переместить курсор на найденную картинку в центр wait 500 + random (200) // ждать else left 1009, 376 10 10 -10 -10 abs //Жмем остров end_if
left 415, 634 10 10 - 10 -10 abs // нажимаем на моба по рандомным координатам wait 500 + random(200) return
|
|
|
|
Jpr |
12.2.2017, 22:55
|
Neophyte
Сообщений: 10
Регистрация: 30.1.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.317
|
Цитата(cirus @ 9.2.2017, 2:45) Либо искать часть моба, которая не меняется. Я же не просто так делал скрипт для поиска мобов через поиск имени.
Вот что получилось и более менее работает у меня. Немного путает небесного духа с небесным василиском из-за слова "небесный", но это исправимо. В процессе работы прокручивает весь скрипт от начала до конца, а не в пределах одной метки. Как это исправить, чтобы он крутил код внутри метки, а когда все условия выполнены переходил к другой? скрипт
Код while 1 = 1 gosub poisk // переход к метке 'poisk' gosub napadenie gosub boy gosub drop end_while
:poisk left 971, 382 10 10 -10 -10 abs // клик на остров move 381, 636 10 10 -10 -10 abs // навели на моба курсор wait 1200 + random (300) // пауза чтоб остров прогрузился
set #a findimage (0 0 1366 768 (C:\Notepack\img\НебесныйДух.bmp) %crds 2 80 -1 5) if #a > 0 // если моб нашёлся left 384, 642 10 10 -10 -10 abs // клик на моба wait 500 + random (300) end_if set #a findimage (0 0 1366 768 (C:\Notepack\img\ТеньВоина.bmp) %crds 2 80 -1 5) if #a > 0 // если моб нашёлся left 384, 642 10 10 -10 -10 abs // клик на моба wait 500 + random (300) end_if return // вернуться к месту перенаправления
:napadenie set #b findimage (0 0 1366 768 (C:\Notepack\img\напасть.bmp) %crds 2 80 -1 5) if #b > 0 // если кнопка нашлась left 737, 427 15 3 -15 -3 abs // клик напасть wait 1500 + random (300) // ждем хода end_if return
:boy // ход энергией set #b findimage (0 0 1366 768 (C:\Notepack\img\энходдева.bmp) %crds 2 80 -1 5) if #b > 0 // если кнопка нашлась left 408, 667 5 3 -5 -3 abs // клик нажать энход wait 500 + random (200) // ждем хода end_if //ход маной set #b findimage (0 0 1366 768 (C:\Notepack\img\ходмана.bmp) %crds 2 80 -1 5) if #b > 0 // если кнопка нашлась left 724, 616 5 3 -5 -3 abs // клик нажать wait 500 + random (200) // ждем end_if //ход квадрат set #с findimage (0 0 1366 768 (C:\Notepack\img\квадрат.bmp) %crds 2 80 -1 5) if #с > 0 // если кнопка нашлась left 463, 612 5 3 -5 -3 abs // клик нажать wait 2500 + random (200) left 675, 364 50 50 -50 -50 abs // клик на поле wait 500 + random (200) // ждем хода end_if //ход крест set #d findimage (0 0 1366 768 (C:\Notepack\img\крест.bmp) %crds 2 80 -1 5) if #d > 0 // если кнопка нашлась left 513, 612 5 3 -5 -3 abs // клик нажать wait 2500 + random (200) left 675, 364 50 50 -50 -50 abs // клик на поле wait 500 + random (200) // ждем end_if //ход молния set #e findimage (0 0 1366 768 (C:\Notepack\img\крест.bmp) %crds 2 80 -1 5) if #e > 0 // если кнопка нашлась left 407, 614 5 3 -5 -3 abs // клик нажать wait 500 + random (200) // ждем end_if
return
:drop //забрать предметы
//выйти, если не найден предмет для забора set #e findimage (0 0 1366 768 (C:\Notepack\img\выйти.bmp) %crds 2 80 -1 5) if #e > 0 // если кнопка нашлась left 738, 498 10 3 -10 -3 abs // клик нажать wait 800 + random (200) // ждем end_if set #j findimage (0 0 1366 768 (C:\Notepack\img\продать.bmp) %crds 2 80 -1 5) if #j > 0 // если кнопка нашлась left 873, 523 15 3 -15 -3 abs // клик нажать wait 800 + random (200) // ждем end_if set #g findimage (0 0 1366 768 (C:\Notepack\img\выйти.bmp) %crds 2 80 -1 5) if #g > 0 // если кнопка нашлась left %crds[1 1] %crds[1 2] // клик нажать wait 800 + random (200) // ждем end_if
return
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|