|
|
|
Упростить скрипт |
|
|
DarkMaster |
30.5.2018, 12:25
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27724
Пользователь №: 11.279
|
Цитата Картинки какого размера? 50*50? Лучше меньше сделать. Там фишка в том, что подразумевается, что все размеры кратные. Если оно плавает, то: Цитата set #fieldX ( %arr [ #n 1 ] - #startOffsetX ) / #cellOffsetX + 1 set #fieldY ( %arr [ #n 2 ] - #startOffsetY ) / #cellOffsetY + 1 Покажет бяку. В качестве костыля можно воспользоваться тем, что в пилоте идет целочисленное деление: Код set #fieldX ( %arr [ #n 1 ] +1 - #startOffsetX ) / #cellOffsetX + 1 set #fieldY ( %arr [ #n 2 ] + 1 - #startOffsetY ) / #cellOffsetY + 1 Должно сработать. +1 - это то, на сколько плавает сетка. По идее это значение может быть любым, главное, чтобы оно было меньше чем #cellOffsetX и #cellOffsetY соответственно.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
cirus |
30.5.2018, 13:41
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26744
Пользователь №: 16.971
Возраст: 29
|
Цитата можно воспользоваться тем, что в пилоте идет целочисленное деление Поэтому я и предложил сделать картинки меньшего размера. Например каринка 50*50, сохраняем 40*40, только не от левого верхнего угла, а скажем на 10 правее и ниже. Тогда смещение даже на 10 пикселей роли не сыграет. Возьмём 4ю картинку, по X будет 160 (будем считать что #startOffsetX = 0), т. к. 50*3+10(на 10 пикселей правее сохраняли). set #startOffsetX 0 set #cellOffsetX 50 set #fieldX ( %arr [ #n 1 ] - #startOffsetX ) / #cellOffsetX + 1 // = (160 - 0) / 50 + 1 = 4Допустим есть смещение первых 3х картинок, значит 49*3+10, четвёртая найдётся не в 160, а 157. (157 - 0) / 50 + 1 = 4 (т. е. смещение никак не повлияло)
|
|
|
|
FREEON |
18.3.2019, 12:06
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1318
Пользователь №: 18.346
Возраст: 25
|
Цитата(cirus @ 18.3.2019, 11:28) Тоже самое: Код if #k >=1 and #k <= 6 log просто чистим log делаем клик на комната #k end_if Да тока в if каждый раз должна быть разная комната от 1 до 6...не знаю как записать что бы был только 1 клик на комнату Код set %k [1] 1 1 set %k [2] 2 2 set %k [3] 3 3 set %k [4] 4 4 set %k [5] 5 5 set %k [6] 6 6 log clear log mode compact for #i 1 5 //Сколько глав будем чистить set #kk 0 //общий подсчет комнат в каждой главе = 20 while_not #kk = 20 log открыли подземелье for #j 1 #i log #j //осуществляем нажатие для перехода к главе end_for set #kk #kk + 1 log #kk комната if #kk >= 1 and #kk <= 6 log просто чистим for #k 1 size(%k) //left %k [#k] log делаем клик на комната #k end_for end_if if #kk >= 7 and #kk <= 12 log l делаем 1 клик for #k 1 size(%k) //left %k [#k] log делаем клик на комната #k end_for end_if //... if 13 - 20 log чистим log вышли из подземелья end_while end_for end_script
вот что будет в логеоткрыли подземелье 1 1 комната просто чистим делаем клик на комната 1 делаем клик на комната 2 делаем клик на комната 3 делаем клик на комната 4 делаем клик на комната 5 делаем клик на комната 6 чистим вышли из подземелья открыли подземелье 1 2 комната просто чистим делаем клик на комната 1 делаем клик на комната 2 делаем клик на комната 3 делаем клик на комната 4 делаем клик на комната 5 делаем клик на комната 6 чистим вышли из подземелья а нужно:открыли подземелье 1 1 комната просто чистим делаем клик на комната 1 чистим вышли из подземелья открыли подземелье 1 2 комната просто чистим делаем клик на комната 2 чистим вышли из подземелья
|
|
|
|
FREEON |
20.3.2019, 4:47
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1318
Пользователь №: 18.346
Возраст: 25
|
Цитата(cirus @ 19.3.2019, 12:46) Проще посчитать. Код set #k 10 // комната 10
log Страница div(#k 6) log Позиция mod(#k 6) end_script Всё вроде разобрался, ток как присвоить переменную клика нужной комнаты div(#k 6) Код set %k [1] 1 1 set %k [2] 100 1 set %k [3] 200 1 set %k [4] 300 1 set %k [5] 400 1 set %k [6] 500 1
log clear log mode compact log open -1 -1 400 400 set #g 2 // задаем скриптом сколько глав будем чистить
for #i 1 #g set #kk 0 //общий подсчет комнат в каждой главе = 20 while_not #kk = 20 log открыли подземелье for #j 1 #i log #j //осуществляем нажатие для перехода к главе end_for set #kk #kk + 1 log #kk комната set #k #kk // комната 10
log Страница div(#k 6) log Позиция mod(#k 6) set #z div(#k 6) // переход к нужной странице for #x 1 #z log клик страница end_for move %k [mod(#k 6)] // клик на нужную позицию %k как? log чистим log вышли из подземелья if #i = #g and #kk = 2 end_script end_if end_while end_for end_script
на 6 комнате выбивает: move - (29): Ошибка! Проверьте правильность скрипта! EAccessViolation Access violation at address 004063E4 in module 'uopilot241.exe'. Read of address 00000002 move %k [mod(#k 6)] Сообщение отредактировал FREEON - 20.3.2019, 6:08
|
|
|
|
FREEON |
20.3.2019, 15:27
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1318
Пользователь №: 18.346
Возраст: 25
|
Код set #g 3 // Задаем скриптом сколько глав будем чистить set #ii 2 // С кокой главы начинаем зачистку set #gl 0 //Если нужно зачистить все главы включая последнюю (1 ГЛАВУ), то вместо 0 подставить 1 set %k [1] 1 1 set %k [2] 100 1 set %k [3] 200 1 set %k [4] 300 1 set %k [5] 400 1 set %k [6] 500 1 set delimiter ' ' log clear log mode compact log open -1 -1 400 400
for #i 1 #g set #kk 0 //общий подсчет комнат в каждой главе = 20 while_not #kk = 20 log открыли подземелье for #j 1 #i log + //#j //осуществляем нажатие для перехода к главе if #ii > 0 set #iii #ii - 1 repeat #iii log + end_Repeat end_if end_for set #kk #kk + 1 log #kk комната set #k #kk // комната 10
log Страница div(#k 6) log Позиция mod(#k 6) set #z div(#k 6) // переход к нужной странице for #x 1 #z log клик страница end_for set #pos mod(#k 6) if mod(#k 6) = 0 set #pos #pos + 6 move %k [#pos] // клик на нужную позицию else move %k [#pos] // клик на нужную позицию end_if log чистим log вышли из подземелья if #gl = 1 // Если нужно зачистить все главы включая 1 Главу 1-2 комнаты if #i = #g and #kk = 2 end_script end_if end_if end_while end_for end_script
Как можно задать параметр #iii (если зачистка нам нужна не с начала), что бы к примеру for #i 1 #g начинало зачистку с главы 2(делала 2 клика сразу) вместо 1, проблема в том что в текущем варианте если начинать зачистку сперва идет хорошо, но когда начинается 3 глава то мы совершаем 4 клика(лог +) вместо 3 а все разобрался минусуем #j Код а не этот вариант не катит так как если начинаем зачистку с главы 4 то 4 глава идет нармально 4 клика(плюсика) а 5 глава уже аж 7 кликов (IMG: style_emoticons/default/huh.gif)
|
|
|
|
FREEON |
28.3.2019, 2:29
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1318
Пользователь №: 18.346
Возраст: 25
|
Цитата(cirus @ 20.3.2019, 11:41) Проблема в том что индексация массивов начинается с 1, а не 0. Код set #pos mod(#k 6) if mod(#k 6) = 0 set #pos #pos + 6 move %k [#pos] // клик на нужную позицию else move %k [#pos] // клик на нужную позицию end_if Чо-то косячит оно, при испытаниях. Для теста выбирал Забивка.. вводил 7 главу в принципе это роли не играет...ошибки одни и те-же. В коде убрал все действия для полноценного тестирования, можно не опасаться чо чо-то скрипт наклацает! Код set #v 8 //*Открытое количество глав(всех). ТЕКУЩАЯ глава - которая открывается сразу же после нажатия на иконку Подземелья. //===== Ваши данные для настройки(подставить и сохранить Скрипт) ===== //----- ИКОНКА ПОДЗЕМЕЛИЯ ----- set %ic [1] 823, 78 12901358 //*Координаты и цвет иконки Подземелие set %ic [2] 823, 78 //*Координаты клика иконки Подземелие //----- ОКНО ГЛАВ ПОДЗЕМЕЛИЯ ----- set %gl [1] 746, 128 3093369 //*Координаты и цвет окна Подземелье set %gl [2] 253, 137 //*Координаты перехода между ГЛАВАМИ(влево) set %gl [3] 1113, 531 //*Координаты перехода между КОМНАТАМИ set %k [1] 325, 607 //*Координаты Комната 1 set %k [2] 469, 612 //*Координаты Комната 2 set %k [3] 601, 616 //*Координаты Комната 3 set %k [4] 752, 606 //*Координаты Комната 4 set %k [5] 885, 610 //*Координаты Комната 5 set %k [6] 1024, 611 //*Координаты Комната 6 //----- ОКНО ЛОКАЦИИ ПОДЗЕМЕЛЬЯ ----- set %ex [1] 1315, 85 723848 //*Координаты и цвет кнопки ВЫХОД set %ex [2] 1315, 85 //*Координаты клика кнопки ВЫХОД set %ak [1] 683, 495 //*Координаты кнопки АФК set %mk [1] 785, 258 264493 //*Координаты и цвет окна Перевернуть карту set %mk [2] 419, 348 //*Координаты Карта 1 set %mk [3] 535, 345 //*Координаты Карта 2 set %mk [4] 654, 356 //*Координаты Карта 3 //===== Настройка отображения журнала выполнения действий ===== log clear //Очистить журнал log mode compact //Включить компактный режим записи лога log open 1 1 400 400 //*Открыть окно лога в координатах 1 1 размером 250x120 пикселей //===== ОСТАЛЬНОЕ НЕ МЕНЯТЬ ===== //=== Проверка привязки к игре === set #okno workwindow //Сохранить в переменной #okno хендл рабочего окна log #okno //Выводим PID привязки окна if #okno = 0 //Если окно не привязано set delimiter '\n' //Установить разделитель \n - перенос строки set %text [1 1] ОШИБКА: ПРИВЯЖИТЕ UOPILOT К ИГРЕ! set %text [1 2] set %text [1 3] Сделать окно пилота активным, set %text [1 4] навести мышку на игру(не нажимать), set %text [1 5] нажмите на клавиатуре Ctrl + A. Msg %text [1] //Вывести в сообщение с переносом строк set #okno workwindow //Сохранить в переменной #okno хендл рабочего окна if #okno = 0 //Если во время отображения сообщения пользователь не привязал скрипт, остановить его. end_script end_if set delimiter //Установить разделитель по умолчанию end_if get windowpos #okno #X #Y #width #height //Получить позицию и размеры активного окна. log #X #Y #width #height //Показать в логе позицию и размеры активного окна. //=== Настройка отображения сообщений Promt === set promptpos_x #width / 2 //для отображения окна Prompt, установить координату 'Х' посередине активного set promptpos_y #height / 2 //для отображения окна Prompt, установить координату 'Y' посередине активного //=== Вывод Prompt с подсказкой === set $str "Что будем делать с подземельем?" //Подсказка(вопрос) set #var prompt (!$str Забивать Зачищать)//Выбор вариантов действия set #err 0 set #error 0 set #proverka 0 while_not #proverka = 2 If #var = 1 //ПОДГОТОВИТЬ ПОДЗЕМЕЛЬЕ set $a prompt (Введите № ГЛАВЫ подземелья, которую будем ЗАБИВАТЬ) //set #a $a //Назначаем главу которую будем солить. ТУТ ОШИБКА ЗАБИВКИ ТЕКУЩЕЙ ГЛАВЫ set #n regexp (#position $hitstring $a ^\d+$) //Проверяем что введенная глава забивки число if #n = 1 if #v > #a //Если глава забивки меньше Текущей главы set #a $a //Назначаем главу которую будем солить. set #proverka #proverka + 2 else msg № ГЛАВЫ ЗАБИВКИ НЕ МОЖЕТ СОВПАДАТЬ ИЛИ БЫТЬ БОЛЬШЕ ТЕКУЩЕЙ ГЛАВЫ!!! set #proverka 0 set #error #error + 1 end_if else msg Номер введенной главы должен состоять только из цифр! set #err #err + 1 end_if else set $a prompt (Введите № ГЛАВЫ, с которой будем ЧИСТИТЬ подземелье.) set $y prompt (Введите № ГЛАВЫ, по которую будем ЧИСТИТЬ включительно.) set #n regexp (#position $hitstring $a ^\d+$) set #m regexp (#position $hitstring $y ^\d+$) if #n = 1 and #m = 1 if $a >= $y //Если пользователь указал верные переменные по правилу убывания глав 987...1 set #a $a //Назначаем главу с которой будем чистить. set #y $y //Назначаем по какую главу(включительно) будем чистить. set #proverka #proverka +1 else //Если правило не верное, то меняем их местами set #a $y //Переназначаем главу с которой будем чистить. set #y $a //Переназначаем главу по какую главу будем чистить. set #proverka #proverka +1 end_if if #v > #a and #v > #y //Если главы зачистки меньше Текущей главы set #proverka #proverka +1 else msg № ГЛАВ ЗАЧИСТКИ НЕ МОЖЕТ СОВПАДАТЬ ИЛИ БЫТЬ БОЛЬШЕ ТЕКУЩЕЙ ГЛАВЫ!!! set #proverka 0 set #error #error + 1 end_if else msg Номер введенных глав должен состоять только из цифр! set #err #err + 1 end_if end_if if #error = 2 msg Проверте(отредактируйте) ТЕКУЩУЮ главу с данными указанными в скрипте! end_script end_if if #err = 2 msg Вы неверно указали номер главы! end_script end_if end_while set #b 1 //шаг set #aa #v - #a //Начало отсчета ГЛАВ set #g #v - 1 //Предпоследняя комната MAX ГЛАВА if #var = 1 set #c #g - #a + 1 //Для забивки N ГЛАВЫ else set #c #g - #y + 1 //Для чистки определенного колличества ГЛАВ end_if //log #aa #g #c for #i #aa #g #b set #kk 0 //Переменная подсчета количества комнат while_not #kk = 20 //Число комнат max в главе = 20 log вход for #j 1 #i //Для кликов между главами log + end_for set #kk #kk + 1 //Подсчет комнат в ГЛАВЕ + 1 set #vv #v - #i //Расчет № главы для вывода в лог log ГЛАВА #vv Комната #kk //Пишем лог текущей комнаты set #k #kk //Передаем текущее общее число комнаты set #z div(#k 6) //Записываем число кликов страницы for #x 1 #z //Цикл для кликов страницы set #xx #x +1 //для отображения в логе страницы log >>Стр #xx //Пишем лог перехода страницы end_for log Комната mod(#k 6) set #pos mod(#k 6) //Рассчитываем № комнаты if mod(#k 6) = 0 //Привязываем № комнаты к координатам set #pos #pos + 6 log %k [#pos] //Клик на нужную комнату
else log %k [#pos] //Клик на нужную комнату end_if
if #var = 1 //Если забиваем log Забили. log ================= if #i = #c and #kk = 20 //Толька забивка end_script end_if if #a = 1 and #i = #c and #kk = 2 //Если забиваем 1 Главу 1-2 комнаты end_script end_if else //Если зачищаем log Зачистили. log ================= if #i = #c and #kk = 20 //Для зачистки ОТ и ДО end_script end_if if #y = 1 and #i = #c and #kk = 2 //Если нужно зачистить все главы включая 1 Главу 1-2 комнаты end_script end_if end_if end_while end_for end_script
Цитата 2949806 0 48 1366 676 вход + ГЛАВА 7 Комната 1 Комната 1 325, 607 Забили. ================= вход + ГЛАВА 7 Комната 2 Комната 2 469, 612 Забили. ================= вход + ГЛАВА 7 Комната 3 Комната 3 601, 616 Забили. ================= вход + ГЛАВА 7 Комната 4 Комната 4 752, 606 Забили. ================= вход + ГЛАВА 7 Комната 5 Комната 5 885, 610 Забили. ================= вход + ГЛАВА 7 Комната 6 >>Стр 2 <<------------------ НЕ ВЕРНО. Должно быть все еще 1 Комната 0 1024, 611 Забили. ================= вход + ГЛАВА 7 Комната 7 >>Стр 2 Комната 1 325, 607 Забили. ================= вход + ГЛАВА 7 Комната 8 >>Стр 2 Комната 2 469, 612 Забили. ================= вход + ГЛАВА 7 Комната 9 >>Стр 2 Комната 3 601, 616 Забили. ================= вход + ГЛАВА 7 Комната 10 >>Стр 2 Комната 4 752, 606 Забили. ================= вход + ГЛАВА 7 Комната 11 >>Стр 2 Комната 5 885, 610 Забили. ================= вход + ГЛАВА 7 Комната 12 >>Стр 2 >>Стр 3 <<------------------ НЕ ВЕРНО. Должно быть все еще 2 Комната 0 1024, 611 Забили. ================= вход + ГЛАВА 7 Комната 13 >>Стр 2 >>Стр 3 Комната 1 325, 607 Забили. ================= вход + ГЛАВА 7 Комната 14 >>Стр 2 >>Стр 3 Комната 2 469, 612 Забили. ================= вход + ГЛАВА 7 Комната 15 >>Стр 2 >>Стр 3 Комната 3 601, 616 Забили. ================= вход + ГЛАВА 7 Комната 16 >>Стр 2 >>Стр 3 Комната 4 752, 606 Забили. ================= вход + ГЛАВА 7 Комната 17 >>Стр 2 >>Стр 3 Комната 5 885, 610 Забили. ================= вход + ГЛАВА 7 Комната 18 >>Стр 2 >>Стр 3 >>Стр 4 <<------------------ НЕ ВЕРНО. Должно быть все еще 3 Комната 0 1024, 611 Забили. ================= вход + ГЛАВА 7 Комната 19 >>Стр 2 >>Стр 3 >>Стр 4 Комната 1 325, 607 Забили. ================= вход + ГЛАВА 7 Комната 20 >>Стр 2 >>Стр 3 >>Стр 4 Комната 2 469, 612 Забили. =================
Косяк где-то зарыт в расчетах div, до 5 считает нормально, но на шестой комнате переходит на следующую страницу, а переход должен делать на 7ой, 13ой, 19ой (IMG: style_emoticons/default/sad.gif) Код set #k #kk //Передаем текущее общее число комнаты set #z div(#k 6) //Записываем число кликов страницы for #x 1 #z //Цикл для кликов страницы set #xx #x +1 //для отображения в логе страницы log >>Стр #xx //Пишем лог перехода страницы end_for
|
|
|
|
cirus |
28.3.2019, 3:00
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26744
Пользователь №: 16.971
Возраст: 29
|
|
|
|
|
FREEON |
28.3.2019, 8:07
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1318
Пользователь №: 18.346
Возраст: 25
|
Цитата(cirus @ 28.3.2019, 3:00) Да это просто переменная для вывода лога количества нажатий на страницу. Просто несёт информацию о кликак в цикле for #x для удобства. Это тоже самое что скрипт просто имел бы вид... Код set #k #kk //Передаем текущее общее число комнаты set #z div(#k 6) //Записываем число кликов страницы for #x 1 #z //Цикл для кликов страницы log >>Стр + //Пишем лог перехода страницы end_for
без него такая же ситуёвина выходит. Часть лога: Цитата вход + ГЛАВА 7 Комната 5 Комната 5 885, 610 Забили. ================= вход + ГЛАВА 7 Комната 6 Стр + Комната 0 1024, 611 Забили. =================
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|