|
Цикл for в цикле for |
|
|
Naprasno |
31.1.2019, 22:08
|
Neophyte
Сообщений: 24
Регистрация: 11.3.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.376
Возраст: 30
|
Цитата(cirus @ 31.1.2019, 19:00) Код set %rune[1] 1075168369 // set %rune[2] 1074830230 // set %rune[3] 1074843396 // set %rune[4] 1074000392 // set %rune[5] 1074801159 // set %rune[6] 1074920757 // set %rune[7] 1074525574 // set %rune[8] 1074633397 // set %image [1] mob13 // имя изображения set %image [2] mob1 // имя второго изображения set %image [3] mob14 // третьего
log clear log mode compact
for #i 1 size(%rune) // цикл для всех рун log %rune[#i] for #j 1 size(%image) // цикл для всех мобов log %image[#j] end_for end_for end_script Если поймёте принцип, то не составит проблем исправить ваш код. Кажется я понял. При полёте по рунам нужно прерывать цикл. Прошёл по одной, прервал, сделал что нужно и потом продолжил. Верно? Цитата(Naprasno @ 31.1.2019, 22:04) Кажется я понял. При полёте по рунам нужно прерывать цикл. Прошёл по одной, прервал, сделал что нужно и потом продолжил. Верно?
То что вы написали ещё круче. Спасибо. Почему то не пришло это в голову. С прерыванием Геморой.
|
|
|
|
Naprasno |
1.2.2019, 9:27
|
Neophyte
Сообщений: 24
Регистрация: 11.3.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.376
Возраст: 30
|
Цитата(Naprasno @ 31.1.2019, 22:08) Кажется я понял. При полёте по рунам нужно прерывать цикл. Прошёл по одной, прервал, сделал что нужно и потом продолжил. Верно? То что вы написали ещё круче. Спасибо. Почему то не пришло это в голову. С прерыванием Геморой.
А почему у меня вот здесь циклится на долго? У меня там всего 1 секунда есть на проверку имён. Почему он по кругу гоняет? for #i 1 size(%rune) // цикл для всех рун log %rune[#i] set lasttargetid %rune[#i] send b wait 3000 for #j 1 size($path%image) // цикл для всех мобов log %image[#j] set #d findimage (0, 0 1021, 760 ($path%image[#j].bmp) %arr 2) if #d > 0 // если есть wait 50 send f1 wait 100 move %arr[1 1] %arr[1 2] wait 200 left %arr[1 1] %arr[1 2] // кликнули wait 1500 end_if send \ if (lastmsg your target) or (lastmsg away from you) or (lastmsg you can't) goto xogdenie else wait 19000 end_if
|
|
|
|
FREEON |
1.2.2019, 9:46
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1292
Пользователь №: 18.346
Возраст: 25
|
Цитата(Naprasno @ 1.2.2019, 9:27) А почему у меня вот здесь циклится на долго? У меня там всего 1 секунда есть на проверку имён. Почему он по кругу гоняет?
for #i 1 size(%rune) // цикл для всех рун log %rune[#i] set lasttargetid %rune[#i] send b wait 3000 for #j 1 size($path%image) // цикл для всех мобов log %image[#j] set #d findimage (0, 0 1021, 760 ($path%image[#j].bmp) %arr 2) if #d > 0 // если есть wait 50 send f1 wait 100 move %arr[1 1] %arr[1 2] wait 200 left %arr[1 1] %arr[1 2] // кликнули wait 1500 end_if send \ if (lastmsg your target) or (lastmsg away from you) or (lastmsg you can't) goto xogdenie else wait 19000 end_if
во первых у тебя нет в этом скрипте end_for конца цикла что не будет работать(да и собственно не дает представления о том где заканчивается цикл), а если смотреть скрипт выше и сопоставить с этим то у тебя в цикле wait 3000(ожидание по 3 секунды) что соответвено долго пока переберет весь массив из переменных есчо не понятно что за данные и для чего нужны? Код set %rune[1] 1075168369 // set %rune[2] 1074830230 // set %rune[3] 1074843396 // set %rune[4] 1074000392 // set %rune[5] 1074801159 // set %rune[6] 1074920757 // set %rune[7] 1074525574 // set %rune[8] 1074633397 //
Если это цвет в вашем скрипте он никак не используется... Код set %rune[1] 16710906 set %rune[2] 6857136 for #i 1 size(%rune) if color (1021, 188 ) = %rune[#i] //определить цвет в координатах 1021, 188, если он равен одному из значений то выполнить действие log Цвет совпал %rune[#i] //показать сообщение end_if end_for end_script
Для улучшения ожидания лучше использовать цикл while Код while_not 329, 289 14386954 or 517, 834 8582073 // цикл будет ожидать пока не появился 1 из цветов или оба wait 100 end_while log появился нужный цвет
|
|
|
|
Naprasno |
1.2.2019, 11:05
|
Neophyte
Сообщений: 24
Регистрация: 11.3.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.376
Возраст: 30
|
Цитата(FREEON @ 1.2.2019, 9:46) во первых у тебя нет в этом скрипте end_for конца цикла что не будет работать(да и собственно не дает представления о том где заканчивается цикл), а если смотреть скрипт выше и сопоставить с этим то у тебя в цикле wait 3000(ожидание по 3 секунды) что соответвено долго пока переберет весь массив из переменных есчо не понятно что за данные и для чего нужны? Код set %rune[1] 1075168369 // set %rune[2] 1074830230 // set %rune[3] 1074843396 // set %rune[4] 1074000392 // set %rune[5] 1074801159 // set %rune[6] 1074920757 // set %rune[7] 1074525574 // set %rune[8] 1074633397 //
Если это цвет в вашем скрипте он никак не используется... Код set %rune[1] 16710906 for #i 1 size(%rune) if color (1021, 188 ) = %rune[#i] //определить цвет в координатах 1021, 188, если он равен одному из значений то выполнить действие log Цвет совпал %rune[#i] //показать сообщение end_if end_for end_script
Для улучшения ожидания лучше использовать цикл while Код while_not 329, 289 14386954 or 517, 834 8582073 // цикл будет ожидать пока не появился 1 из цветов или оба wait 100 end_while log появился нужный цвет
Я кусок вырезал, поэтому там нет окончания. Это не цвета, а ID рун по покоторым летает чар. Летает всё норм. Задержка 3 секунды на рекол - время каста. Как раз подходит с моим пингом. Проблема здесь (правильно ли я понимаю, что по циклу фор он должен прогнать два раза (две картинки)?): "for #j 1 size($path%image) // цикл для всех мобов log %image[#j] set #d findimage (0, 0 1021, 760 ($path%image[#j].bmp) %arr 2) if #d > 0 // если есть wait 50 send f1 wait 100 move %arr[1 1] %arr[1 2] wait 200 left %arr[1 1] %arr[1 2] // кликнули wait 1500 end_if :start send \ if (lastmsg your target) or (lastmsg away from you) goto xogdenie else wait 19000 end_if if (lastmsg your can't) continue end_if end_for end_for" А он гоняет раз 20, когда не находит... А мне нужно чтобы он за секунду эти две картинки сравнил и продолжил главный цикл фор облёт по рунам... Цитата(Naprasno @ 1.2.2019, 11:03) Я кусок вырезал, поэтому там нет окончания. Это не цвета, а ID рун по покоторым летает чар. Летает всё норм. Задержка 3 секунды на рекол - время каста. Как раз подходит с моим пингом. Проблема здесь (правильно ли я понимаю, что по циклу фор он должен прогнать два раза (две картинки)?): "for #j 1 size($path%image) // цикл для всех мобов log %image[#j] set #d findimage (0, 0 1021, 760 ($path%image[#j].bmp) %arr 2) if #d > 0 // если есть wait 50 send f1 wait 100 move %arr[1 1] %arr[1 2] wait 200 left %arr[1 1] %arr[1 2] // кликнули wait 1500 end_if :start send \ if (lastmsg your target) or (lastmsg away from you) goto xogdenie else wait 19000 end_if if (lastmsg your can't) continue end_if end_for end_for"
А он гоняет раз 20, когда не находит... А мне нужно чтобы он за секунду эти две картинки сравнил и продолжил главный цикл фор облёт по рунам...
while не подходит, т.к. этих мобов может и не быть на этом месте и он должен в этом случае дальше лететь...
|
|
|
|
Naprasno |
1.2.2019, 13:03
|
Neophyte
Сообщений: 24
Регистрация: 11.3.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.376
Возраст: 30
|
Цитата(cirus @ 1.2.2019, 12:32) $path лишнее. Код for #j 1 size(%image) // цикл для всех мобов убрал и заработало как должно, но теперь не видит картинок. пилот похоже не может найти где эти картинки лежат... я через path прописывал папку вот так: set $path "C:\Users\Desktop\" // путь к картинкам Цитата(FREEON @ 1.2.2019, 11:29) интересные у вас условия...для чего они? Код if (lastmsg your target) or (lastmsg away from you)
end_if if (lastmsg your can't) end_if
какой код находится в метках :start и метке :xogdenie? Возможно тут скрипт уходит в бесконечный цикл условия для того, чтобы можно было подойти к мобу, если он далеко или таргет перекрыт структурой... старт - там начало таминга, он не зациклен и с ним всё норм. хождение - это просто подходим к координатам которые нашли, если цель далека или перекрыта Цитата(cirus @ 31.1.2019, 19:00) Код set %rune[1] 1075168369 // set %rune[2] 1074830230 // set %rune[3] 1074843396 // set %rune[4] 1074000392 // set %rune[5] 1074801159 // set %rune[6] 1074920757 // set %rune[7] 1074525574 // set %rune[8] 1074633397 // set %image [1] mob13 // имя изображения set %image [2] mob1 // имя второго изображения set %image [3] mob14 // третьего
log clear log mode compact
for #i 1 size(%rune) // цикл для всех рун log %rune[#i] for #j 1 size(%image) // цикл для всех мобов log %image[#j] end_for end_for end_script Если поймёте принцип, то не составит проблем исправить ваш код. наверное вот здесь можно прописать путь к картинке? set %image [1] mob13 // имя изображения set %image [2] mob1 // имя второго изображения set %image [3] mob14 // третьего
|
|
|
|
Naprasno |
1.2.2019, 13:29
|
Neophyte
Сообщений: 24
Регистрация: 11.3.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.376
Возраст: 30
|
Цитата(Naprasno @ 1.2.2019, 13:03) убрал и заработало как должно, но теперь не видит картинок. пилот похоже не может найти где эти картинки лежат... я через path прописывал папку вот так: set $path "C:\Users\Desktop\" // путь к картинкам условия для того, чтобы можно было подойти к мобу, если он далеко или таргет перекрыт структурой...
старт - там начало таминга, он не зациклен и с ним всё норм.
хождение - это просто подходим к координатам которые нашли, если цель далека или перекрыта наверное вот здесь можно прописать путь к картинке?
set %image [1] mob13 // имя изображения set %image [2] mob1 // имя второго изображения set %image [3] mob14 // третьего
Прописал путь и теперь всё пашет супер. Может знаете что за ошибка: 13:24:28 2 (autosaved_2.txt, 2): move - (2): Ошибка! Проверьте правильность скрипта! EConvertError '' is not a valid integer value move %arr[1 1] %arr[1 2] Где список ошибок посмотреть?
|
|
|
|
Naprasno |
1.2.2019, 13:58
|
Neophyte
Сообщений: 24
Регистрация: 11.3.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.376
Возраст: 30
|
Цитата(Naprasno @ 1.2.2019, 13:29) Прописал путь и теперь всё пашет супер. Может знаете что за ошибка: 13:24:28 2 (autosaved_2.txt, 2): move - (2): Ошибка! Проверьте правильность скрипта! EConvertError '' is not a valid integer value move %arr[1 1] %arr[1 2] Где список ошибок посмотреть?
С этой разобрался. Я переменную не проверял на соответствие. Теперь вот такая: "end_for - (63): Немогу найти имя переменной for" "end_for - (64): Немогу найти имя переменной for" вот здесь: for #i 1 size(%rune) // цикл для всех рун log %rune[#i] set lasttargetid %rune[#i] send b wait 2500 for #j 1 size(%image) // цикл для всех мобов log %image[#j] set #d findimage (0, 0 1021, 760 (%image[#j].bmp) %arr 2) if #d > 0 // если есть wait 50 send f1 wait 100 move %arr[1 1] %arr[1 2] wait 200 left %arr[1 1] %arr[1 2] // кликнули wait 1500 goto start else continue end_if goto end :start send \ wait 300 if (lastmsg your target) or (lastmsg away from you) or (lastmsg you can't) goto xogdenie end_if if (lastmsg this creature) or (lastmsg from the) or (lastmsg it seems) wait 1500 send esc wait 500 move %arr[1 1] %arr[1 2] wait 100 double_left %arr[1 1] %arr[1 2] wait 1500 send 4 wait 3500 send n wait 500 drag 379, 188 398, 266 2 wait 500 drag 390, 289 330, 235 1 wait 500 end_if if (lastmsg I always) or (lastmsg here) or (lastmsg I won't) wait 19000 end_if :end end_for end_for
|
|
|
|
FREEON |
1.2.2019, 14:22
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1292
Пользователь №: 18.346
Возраст: 25
|
Цитата(Naprasno @ 1.2.2019, 13:58) С этой разобрался. Я переменную не проверял на соответствие. Теперь вот такая: "end_for - (63): Немогу найти имя переменной for" "end_for - (64): Немогу найти имя переменной for"
вот здесь: for #i 1 size(%rune) // цикл для всех рун log %rune[#i] set lasttargetid %rune[#i] send b wait 2500 for #j 1 size(%image) // цикл для всех мобов log %image[#j] set #d findimage (0, 0 1021, 760 (%image[#j].bmp) %arr 2) if #d > 0 // если есть wait 50 send f1 wait 100 move %arr[1 1] %arr[1 2] wait 200 left %arr[1 1] %arr[1 2] // кликнули wait 1500 goto start else continue end_if goto end :start send \ wait 300 if (lastmsg your target) or (lastmsg away from you) or (lastmsg you can't) goto xogdenie end_if if (lastmsg this creature) or (lastmsg from the) or (lastmsg it seems) wait 1500 send esc wait 500 move %arr[1 1] %arr[1 2] wait 100 double_left %arr[1 1] %arr[1 2] wait 1500 send 4 wait 3500 send n wait 500 drag 379, 188 398, 266 2 wait 500 drag 390, 289 330, 235 1 wait 500 end_if if (lastmsg I always) or (lastmsg here) or (lastmsg I won't) wait 19000 end_if :end end_for end_for
Код for #i 1 size(%rune) // цикл для всех рун log %rune[#i] set lasttargetid %rune[#i] send b wait 2500 for #j 1 size(%image) // цикл для всех мобов log %image[#j] set #d findimage (0, 0 1021, 760 ($path%image[#j].bmp) %arr 2) if #d > 0 // если есть wait 50 send f1 wait 100 set #x (%arr [1 1] + %arr [1 3]) / 2 set #y (%arr [1 2] + %arr [1 4]) / 2 kleft #x #y //навели мышь и кликнули wait 1500 end_if goto start else continue end_if goto end :start send \ wait 300 if (lastmsg your target) or (lastmsg away from you) or (lastmsg you can't) goto xogdenie end_if if (lastmsg this creature) or (lastmsg from the) or (lastmsg it seems) wait 1500 send {Esc} // код для клавиши {Esc} иначе может писать e+s+c wait 500 set #d findimage (0, 0 1021, 760 ($path%image[#j].bmp) %arr 2) if #d > 0 // если есть set #x (%arr [1 1] + %arr [1 3]) / 2 set #y (%arr [1 2] + %arr [1 4]) / 2 move #x #y //навели wait 1500 double_left #x #y //сделали двойной клик wait 1500 end_if wait 100 send 4 wait 3500 send n wait 500 drag 379, 188 398, 266 2 wait 500 drag 390, 289 330, 235 1 wait 500 end_if if (lastmsg I always) or (lastmsg here) or (lastmsg I won't) wait 19000 end_if :end end_for end_for
Сообщение отредактировал FREEON - 1.2.2019, 14:34
|
|
|
|
Naprasno |
1.2.2019, 14:48
|
Neophyte
Сообщений: 24
Регистрация: 11.3.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.376
Возраст: 30
|
Цитата(FREEON @ 1.2.2019, 14:22) Код for #i 1 size(%rune) // цикл для всех рун log %rune[#i] set lasttargetid %rune[#i] send b wait 2500 for #j 1 size(%image) // цикл для всех мобов log %image[#j] set #d findimage (0, 0 1021, 760 ($path%image[#j].bmp) %arr 2) if #d > 0 // если есть wait 50 send f1 wait 100 set #x (%arr [1 1] + %arr [1 3]) / 2 set #y (%arr [1 2] + %arr [1 4]) / 2 kleft #x #y //навели мышь и кликнули wait 1500 end_if goto start else continue end_if goto end :start send \ wait 300 if (lastmsg your target) or (lastmsg away from you) or (lastmsg you can't) goto xogdenie end_if if (lastmsg this creature) or (lastmsg from the) or (lastmsg it seems) wait 1500 send {Esc} // код для клавиши {Esc} иначе может писать e+s+c wait 500 set #d findimage (0, 0 1021, 760 ($path%image[#j].bmp) %arr 2) if #d > 0 // если есть set #x (%arr [1 1] + %arr [1 3]) / 2 set #y (%arr [1 2] + %arr [1 4]) / 2 move #x #y //навели wait 1500 double_left #x #y //сделали двойной клик wait 1500 end_if wait 100 send 4 wait 3500 send n wait 500 drag 379, 188 398, 266 2 wait 500 drag 390, 289 330, 235 1 wait 500 end_if if (lastmsg I always) or (lastmsg here) or (lastmsg I won't) wait 19000 end_if :end end_for end_for
Те мои ошибки из-за неправильной пунктуации? Не могу пока что проверить.
|
|
|
|
Naprasno |
4.2.2019, 18:07
|
Neophyte
Сообщений: 24
Регистрация: 11.3.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.376
Возраст: 30
|
Цитата(FREEON @ 1.2.2019, 15:22) да, с фор такое бывает иногда не может найти конец блока(не видит дальше носа), и ошибка с координатами move(и д.р.) так как не было привязки к изображению, первый цикл он проходит на ура а вот в последующие заходы может выбивать ошибку и к тому же разные if-ы. Строка move %arr[1 1] %arr[1 2] и double_left %arr[1 1] %arr[1 2] никчему не привязывалась
Огромное спасибо! А есть ли в пилоте оператор, который ждёт определённого действия, последнего сообщения? Каждый раз разное время... While у меня почему то дальше продолжает скрипт фигачить, а мне нужно чтобы ждал пока не закончится действие...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|