Здравствуйте, гость ( Вход | Регистрация )

> Цикл for в цикле for
Naprasno
сообщение 31.1.2019, 16:06
Сообщение #1


**

Neophyte
Сообщений: 24
Регистрация: 11.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.376
Возраст: 30



Помогите, пожалуйста, с кодом. Мне нужно, чтобы чар летел по руне проверял по картинке определённых животных/монстров (3-5 видов) и если их нет, то летел по следующей. Не могу понять как реализовать цикл for в for?

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 //
:start0
set lasttargetid %rune[1] // вот здесь сначала перебирать через for но не смог...
send b
wait 3500
set $path "C:\Users\Desktop\" // путь к картинкам
set %image [1] mob13 // имя изображения
set %image [2] mob1 // имя второго изображения
set %image [3] mob14 // третьего
set #size size(%image) // всего картинок
for #i 1 #size 1
send esc // это алл неймс чтобы имена считать
set #d findimage (0, 0 1021, 760 ($path%image[#i].bmp) %arr 2)
if #d > 0 // если есть
wait 100
send f1 // кидаем таргет
wait 500
move %arr[1 1] %arr[1 2]
wait 500
left %arr[1 1] %arr[1 2] // кликнули
wait 1500
goto start
end_if
end_for

как после проверки всех трёх картинок перейти на следующую руну?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
cirus
сообщение 31.1.2019, 19:00
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26951
Пользователь №: 16.971
Возраст: 29



Код
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

Если поймёте принцип, то не составит проблем исправить ваш код.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Naprasno
сообщение 31.1.2019, 22:08
Сообщение #3


**

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) *

Кажется я понял. При полёте по рунам нужно прерывать цикл. Прошёл по одной, прервал, сделал что нужно и потом продолжил. Верно?


То что вы написали ещё круче. Спасибо. Почему то не пришло это в голову. С прерыванием Геморой.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Naprasno
сообщение 1.2.2019, 9:27
Сообщение #4


**

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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 1.2.2019, 9:46
Сообщение #5


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1265
Пользователь №: 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 появился нужный цвет
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Naprasno
сообщение 1.2.2019, 11:05
Сообщение #6


**

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 не подходит, т.к. этих мобов может и не быть на этом месте и он должен в этом случае дальше лететь...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
Naprasno   Цикл for в цикле for   31.1.2019, 16:06
FREEON   интересные у вас условия...для чего они? if ...   1.2.2019, 11:29
cirus   $path лишнее. for #j 1 size(%image) ...   1.2.2019, 12:32
Naprasno   $path лишнее. for #j 1 size(%image) ...   1.2.2019, 13:03
Naprasno   убрал и заработало как должно, но теперь не видит...   1.2.2019, 13:29
FREEON   Прописал путь и теперь всё пашет супер. Может зн...   1.2.2019, 13:52
Naprasno   Прописал путь и теперь всё пашет супер. Может зн...   1.2.2019, 13:58
FREEON   С этой разобрался. Я переменную не проверял на со...   1.2.2019, 14:22
Naprasno   for #i 1 size(%rune) // цикл для всех р...   1.2.2019, 14:48
FREEON   Те мои ошибки из-за неправильной пунктуации? Не м...   1.2.2019, 15:22
Naprasno   да, с фор такое бывает иногда не может найти коне...   4.2.2019, 18:07
cirus   Код надо выкладывать. Это ошибка при обращении к ...   1.2.2019, 13:47
cirus   В одной строке, должно быть 1 действие.   1.2.2019, 14:53
DarkMaster   В целом я бы не рекомендовал использовать goto для...   2.2.2019, 10:16
DarkMaster   while lastmsg != "сообщение" wait 10 ...   4.2.2019, 18:39
Naprasno   while lastmsg != "сообщение" wait 10...   5.2.2019, 15:27


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 16.6.2024, 21:47
Designed by Nickostyle