|
|
  |
Где ошибка? Пишите у кого мелкие вопросы, сюда! |
|
|
Anwalt |
15.12.2012, 10:19
|
  
Novice
Сообщений: 53
Регистрация: 2.8.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.161
Возраст: 31

|
ребят, если бы я все знал, я бы не задавал глупых на ваш взгляд вопросов, для меня они поверьте пока не понятные, но так как я их задаю, следовательно я хочу научиться, что бы не задавать их, поэтому и прошу поправить и направить, думаю каждый через это проходил в самом начале и примерно понимаю как это выглядет, так как сам проффесионально много отвечаю порой для МЕНЯ глупые и по жизне логические вопросы... но понимаю что не спросив, не попробовав не научишься, поэтому охотно помогаю... и не выпрашиваю что бы мне написали скрипт, я докапываюсь до механики, сижу часами эксперементирую и читаю эту тематику, но когда захожу в тупик, спращиваю, ведь для этого существуют форумы, это тема судя по ее названию? ... поэтому просьба относиться с пониманием, спасибо. Все мы когда то что то начинаем! перейду к делу... судя по всему я не правильно понимаю логику данной конструкции... я понимаю это так, начало, точка 0 в дальнейшем она может менятся, но сбрасывается на 0 именно тут, выполнение цикла, если все больше 0, если нет цикл не работает... set $a 0 set $a1 0 set $a2 0 while $a > 0 or $a1 > 0 or $a2 > 0 но судя по намекам понимаю, что ощибочное понимание, если я ставлю 1 вместо 0, переходит на поиск, если находит и больше 1, можете мне пояснить значение первых 3 строчек. Цитата(xolost @ 15.12.2012, 7:56)  )))))))))))))) отличное условие с переменными для "логичного зацикленного поиска" И ещё, почему у тебя в ифах условие искать второй и третий цвет только если нашли первый? Более того, если нашли первый, то сразу уходим в метку А. И когда же тогда мы будем проверять 2 и 3 цвет, если до него дойти нереально?
хммм, задумка была конечно другая, в метку он уходит, делает действие, действие заканчивается и переходит на метку поиск, заново искать цвета... а как будет выглядить что бы искал 2 и 3 цвета минуя 1? замыкать каждый поиск енд ифом, то есть раздельно?
|
|
|
|
xolost |
15.12.2012, 10:26
|
     
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035

|
Цитата(Anwalt @ 15.12.2012, 11:14)  ребят, если бы я все знал, я бы не задавал глупых на ваш взгляд вопросов, для меня они поверьте пока не понятные, но так как я их задаю, следовательно я хочу научиться, что бы не задавать их, поэтому и прошу поправить и направить, думаю каждый через это проходил в самом начале и примерно понимаю как это выглядет, так как сам проффесионально много отвечаю порой для МЕНЯ глупые и по жизне логические вопросы... но понимаю что не спросив, не попробовав не научишься...
перейду к делу...
судя по всему я не правильно понимаю логику данной конструкции... я понимаю это так, начало из точка 0, выполнение цикла, если все больше 0, если нет цикл не работает...
set $a 0 set $a1 0 set $a2 0 while $a > 0 or $a1 > 0 or $a2 > 0
но судя по намекам понимаю, что ощибочное понимание, если я ставлю 1 вместо 0, переходит на поиск, если находит и больше 1, можете мне пояснить значение первых 3 строчек.
Хочешь получить ответы? Получай. Код set $a 0 set $a1 0 set $a2 0
Здесь ты говоришь, что твои 3 цвета равны 0. Код while $a > 0 or $a1 > 0 or $a2 > 0 Здесь ты говоришь, что уходим в цикл, если хоть 1 из цветов найден. Но перед этим ты сказал что ничего не найдено. Значит, тебе нужно сделать наоборот, уходим в условие, если никакой цвет не найден. Т.е. Код while $a < 1 and $a1 < 1 and $a2 < 1 Иными словами, если все три цвета равны 0 или меньше теперь внутри. Код set $a findcolor (800, 65 1144, 437 1 1 (5026082 ) %arr 2) if $a > 0 goto A wait 1s
set $a1 findcolor (800, 65 1144, 437 1 1 (2366701 ) %arr 2)
Тут у тебя сообщается, что если найден первый цвет, то мы уходим в метку, а потом уже второй цвет ищем. Но до него мы никогда не дойдем, потому что ты безвозвратно отправляешь бота в метку А после 1 цвета. Поэтому, тебе нужно проверять каждый цвет. т.е., например вот так: Код set $a findcolor (800, 65 1144, 437 1 1 (5026082 ) %arr 2) if $a > 0 wait 1s goto A end_if
set $a1 findcolor (800, 65 1144, 437 1 1 (2366701 ) %arr 2) if $a1 > 0 goto B end_if
set $a2 findcolor (800, 65 1144, 437 1 1 (7326501 ) %arr 2) if $a2 > 0 goto B end_if
Или например вот так: Код set $a findcolor (800, 65 1144, 437 1 1 (5026082 ) %arr 2) set $a1 findcolor (800, 65 1144, 437 1 1 (2366701 ) %arr 2) set $a2 findcolor (800, 65 1144, 437 1 1 (7326501 ) %arr 2) if $a > 0 wait 1s goto A end_if if $a1 > 0 or $a2 > 0 goto B end_if
Т.е. мы ищем все 3 цвета, и если найден первый, то уходим в метку А, если он не найден, но найден второй или третий, то уходим в Б
|
|
|
|
Anwalt |
15.12.2012, 10:42
|
  
Novice
Сообщений: 53
Регистрация: 2.8.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.161
Возраст: 31

|
Супер, ответ разложен по полачкам, разьеснено на 5, все четко и ясно (IMG: style_emoticons/default/smile.gif) многое прояснил, многое встало в цепочку, пойду эксперементировать, благадарю за ответ (IMG: style_emoticons/default/smile.gif) На счет метки, она выглядет так находим цвет, посылаем в Метку где к примеру зенд лефт зенд гото поиск поиск стоит в начале... Просто появление цветов не константное поэтому задумка была на любой из найденых, но важно что бы на определенный цвет, определенная реакция была, поэтому 1 цвет нашли, ушли в метку, все там сделали нас от туда вернули опять на поиск, нашли еще цвет опять в метку и тд, может и не правельно, но сейчас многое встало на свои места, было ошибочное понимание пойду практиковаться, но за то теперь знаю как сделать так что бы 2 и 3 цвет искал только если 1 нашел, уже на один глупый вопрос в будущем меньше, одним постом двух зайцев)) спасибо за разложенный по полкам ответ) смогу во многом применить
|
|
|
|
xolost |
15.12.2012, 10:46
|
     
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035

|
Но, судя по такому коду: Код set $a 0 set $a1 0 set $a2 0 while
Ты желаешь всегда уходить в цикл, т.е. перепроверять их. По скольку обнуляешь их. И раз так, то лучше тогда юзать так: Код тогда обнулять цвета тебе не нужно уже, в цикл всегда будешь уходить. т.е. вот эти 3 Код set $a 0 set $a1 0 set $a2 0
уже не нужны Цитата(Anwalt @ 15.12.2012, 11:42)  Супер, ответ разложен по полачкам, разьеснено на 5 (IMG: style_emoticons/default/smile.gif) многое прояснил, многое встало в цепочку, пойду эксперементировать, благадарю за ответ (IMG: style_emoticons/default/smile.gif) На счет метки, она выглядет так находим цвет, посылаем в Метку где к примеру зенд лефт зенд гото поиск поиск стоит в начале... лан пойду эксперементировать, спасибо за разложенный по полкам ответ) На здоровье, удачи)
|
|
|
|
xolost |
16.12.2012, 9:51
|
     
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035

|
У меня вопрос. Иногда findimage выдает -1 Какая конкретно причина?
Т.е. картинка есть, выдает -1, делаю её меньше, -1, ещё меньше, -1, ещё меньше - оп, 100... Притом, бывает что цвета всего 2 + 1 фон, и размер где-нить 60 на 30 и -1 до упора.
|
|
|
|
Shefon |
16.12.2012, 11:31
|
 
Neophyte
Сообщений: 35
Регистрация: 16.12.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.571
Возраст: 35

|
Заранее извеняюсь за тупой вопрос.) Почему это не работает? Код move 0, 0 abs // обозначаю верхний угол квадрата для поиска( это для наглядности) wait 2s move 100, 100 abs // обозначаю нижний угол квадрата для поиска цвета wait 2s move 50, 50 abs // обозначаю точку которую буду искать wait 2s set $b color (50 50 abs) // беру в переменную цвет точки для поиска while $a < 1 set $a findcolor (0, 0 abs 100, 100 abs 1 1 $b %arr 2) // пытаюсь найти такой цвет в статичном квадрате end_while
Код зацикливается на while хоть ты тресни. Я так понял не пашет findcolor. Код не относится к какой либо программе, тупо запускаю на пустом рабочем столе, да хоть и в открытом окошке браузера. Вообще пытаюсь написать скрипт для отловли выскакивающей менюшки в флешь игре. Там кнопочка не всегда появляется там где ей положено. Может я где то в синтаксисе ошибся? Помогите!) Уже 3 часа мучаюсь. UoPilot v2.32 и Win7 x64
|
|
|
|
xolost |
16.12.2012, 11:50
|
     
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035

|
Цитата -1 - это код ошибки. Натыкался уже, вспомнить не могу из-за чего. Можете строку привести с ошибкой?
строку чего? самой строчк в скрипте? set $login findimage (#startX #startY #endX #endY (C:\images\авторизация\логин.bmp) %crds61 2 100 -1) Ну вот они у меня все с такими настройками, только меняется имя массива, имя строковой переменной, и путь(иногда через переменные), но если картинка сама по себе не нравится пилоту почему-то, то $login(в данном случае) всегда будет выдавать минус 1. И как только картинку нарежу так что бы она понравилась пилоту, то всегда будет находить корректно на 100. Цитата Это много. Страшного скорее всего ничего не будет, просто медленно работает, а смысла не много. К сожалению, смысл самый прямой, потому что в определенной игре, что б не спутать картинку с другой похожей, приходится её делать больше. 60 на 30 - это ещё мало, у меня и 200 на 50 успешно находится(особенно если 2 цвета всего фон + основа). Но почему-то иногда пилоту не нравятся они. вот -1 должно означать что-то конкретное. (понятно что это код ошибки, но какой именно).
|
|
|
|
Shefon |
16.12.2012, 14:03
|
 
Neophyte
Сообщений: 35
Регистрация: 16.12.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.571
Возраст: 35

|
Цитата(DarkMaster @ 16.12.2012, 12:24)  Это что такое? О.о
Обе картинки на форум залейте в неизменном состоянии. Вы точно не jpg подсовывали?
Да разобрался я уже. Дело было в abs в findcolor. Я такую прогу составил что бы понять почему он ( findcolor ) не работает. Грубо говоря сам взял цвет из точки , а потом сам же её и найди, и она там есть по любому так как сам же её цвет взял.) как то так. А картинки никакой небыло. Чистый рабочий стол, я даже обои отключил для чистаты эксперимента.) Или вы стебётесь? =) (IMG: style_emoticons/default/blink.gif)
|
|
|
|
xolost |
16.12.2012, 14:46
|
     
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035

|
Цитата Обе картинки на форум залейте в неизменном состоянии. Вы точно не jpg подсовывали?
офигеть. Сейчас конкретно потестил эту ошибку. Результаты шокирующие. Во-первых, вот сами картинки: архив с картинкамиТестируем на первом мониторе: Тестируем на мониторе с разрешением рабочего стола 1920 1080-Открываем в пейнте test.bmp -разворачиваем на весь экран -ищем там тест1.bmp следующим скриптом: Код set #startX 0 set #startY 0 set #endX 1280 set #endY 1045 set $test findimage (#startX #startY #endX #endY (c:\images\тест1.bmp) %crds27 2 100 -1) msg $test end_script
Результат = -1-ищем тест2.bmp меняем в скрипте выше на тест2.bmp Результат = 100Теперь, меняем конечный Y для поиска(#endY) с 1045 на 1046 и В обоих случаях картинка находится.Указываем 1024 и снова обе картинки находим. Указываем 1025 и теперь обе картинки не находим. Итог: с 1025 по 1045 конечного игрика, картинка более высокого размера (тест1.bmp) выдает результат поиска -1 А с 1025 по 1043 конечного игрика, картинка более низкого размера (тест2.bmp) выдает результат поиска -1
[b]Тестируем на втором мониторе: Тестируем на мониторе с разрешением рабочего стола 1280 1024Задаем все те же настройки скрипта, что и в первом мониторе Результат: Всегда найдены обе картинкиПочему такой беспредел на мониторе с большим разрешением? На вопрос отвечает Господин Wknight Составит свою теорию и выдаст Господин DarkMaster
|
|
|
|
Shefon |
17.12.2012, 0:13
|
 
Neophyte
Сообщений: 35
Регистрация: 16.12.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.571
Возраст: 35

|
Промучался я весь день, но всё таки написал то что мне было нужно. Но походу написания возник один вопрос. Я изначально везде ставил значения в абсолютных координатах. Написл скрипт, всё заработало.. и тут я случайно сдвинул окно с программой, и вся моя писанина перестала работать, так как сместились все контрольные точки.. Поставить окно на место так как оно было оказалось нереально, вбивать же заново все точки в программу жутко геморно.. И тогда я решил переделать всё на относительные координаты с привязкой к окну. Так и сделал, поубирал все abs, понатыкал новых значений взятых из относительной ячейки. Привязал нужное окно к пилоту. Врубаю скрипт и вижу как он начинает работать.. Доходит где то до середины и дальше застряёт.. Что бы понять в чём дело вбиваю в контрольных точках перемещение и задержку курсора на ключевых местах.. И что я вижу.. Половина проги работает по относительным координатам, а гдето с середины её переклинивает и пилот начинает бить по абсалютным координатам, хотя все abs я убрал.. Кароче сколько я не старался, но заставить вторую половину программы пахать по относительным координатам не смог. (IMG: style_emoticons/default/sad.gif) После этого я плюнул. Развернул подопытную прогу на весь экран и забил абсолютные адреса контрольных точек. Так как прога развёрнута на весь экран, то сместится она не сможет.. Такое вот идиотское решение. Мне оно не нравится. Топорная работа. Я люблю изящество в коде. Есть у меня мысль всё переделать привязав все абсолютные адреса к координатам окна, типа задавать точки смещеним, и делать это програмно. Вроде бы я где то видил функцию для получения координат окна.. Так вот, хотелось бы получить совет, или наставление что ли.. Как правильно писать скрипт с привязкой к окну? Вот мой скрипт
Исходный код set #xl 581 //координаты стрелочек для прокрутки друзей set #ylr 784 set #xr 1327
set #y1 815 //координаты выбора островов друзей set #x1 1149
set #x2 1055
set #x3 953
set #x4 855
set #x5 762
set #x6 663
call vynoven #x1 #y1 call vynoven #x2 #y1 call vynoven #x3 #y1 call vynoven #x4 #y1 call vynoven #x5 #y1 call vynoven #x6 #y1
move #xl, #ylr abs wait 100 left #xl, #ylr abs wait 1s
call vynoven #x1 #y1 call vynoven #x2 #y1 call vynoven #x3 #y1 call vynoven #x4 #y1 call vynoven #x5 #y1 call vynoven #x6 #y1
move #xr, #ylr abs wait 100 left #xr, #ylr abs wait 1s
proc vynoven #x1 #y1
set #m 8960987 //цвет фона под монстром
set #xp1 740 //координаты точки победы set #yp1 564 set #ap 82224 //цвет победы <----------------------------
set #xpr 949 //координаты точки выхода из поражения set #ypr 584 set #apr 70768 //цвет поражения <---------------------------
move #x1, #y1 abs //выбор острова left #x1, #y1 abs wait 1s :monstr
set #x1 624//координаты монстра set #y1 626
set #ms color(#x1, #y1 abs) //проверяем есть ли монстр if #m = #ms goto end //если нет то идём к следующему end_if move #x1, #y1 abs //выбор монстра left #x1, #y1 abs wait 1s set #b 458869 //поиск кнопочки НАПАСТЬ
set $a 0 set $a findcolor(989, 575 1094, 683 1 1 #b %arr 2 abs) if $a < 0 goto monstr end_if
move %arr[1 1], %arr[1 2] abs //кликаем по кнопочке НАПАСТЬ left %arr[1 1], %arr[1 2] abs wait 15 :boi //Бой с монстром
set #x1 1010 //координаты фиала маны set #y1 719 move #x1, #y1 abs //собственно примерно с этого места скрипт почемуто переключался на абсолютные координаты.. Хотя никаких abs тут небыло. wait 1s set #a 8007680 //цвет активного фиала <--------------------------------------
:fialc set #a1 color(#x1, #y1 abs)
if #a1 = #a //проверяем активен ли фиал. goto pitb end_if
set #ap1 color(#xp1, #yp1 abs) if #ap = #ap1 //на всякий случай проверим не победили ли мы)) goto pobeda //если победили уходим end_if
set #apr1 color(#xp1, #yp1 abs) if #apr = #apr1 //на всякий случай проверим не проиграли ли мы move #xpr, #ypr abs wait 150 left #xpr, #ypr abs wait 2s goto end //если проиграли уходим end_if
wait 100
goto fialc
:pitb
left #x1, #y1 abs //кликаем по фиалу wait 1s
//магический крест set #x1 776 //координаты крест set #y1 702 set #a 10779084 //цвет активного креста move #x1, #y1 abs//перемещаем курсор на заклинание set #a1 color(#x1, #y1 abs) while #a1 <> #a //ждём когда оно станет активным wait 100 set #a1 color(#x1, #y1 abs) end_while left #x1, #y1 abs //применяем крест wait 1s set #x1 934 //координаты на поле для креста set #y1 477 move #x1, #y1 abs //перемещаем курсор на поле wait 200 left #x1, #y1 abs//применяем крест на поле
//set #x1 181 //координаты заклинания молния //set #x2 729 //set #a 792362 //цвет активного заклинания молния //move #x1, #y1 //перемещаем курсор на заклинание //set #a1 color(#x1, #y1 abs) //while #a1 <> #a //ждём когда оно станет активным //wait 100 //set #a1 color(#x1, #y1 abs) //end_while //left #x1, #y1 //применяем молнию wait 500 //ЗАДЕРЖКА перед проверкой победы goto boi
:pobeda
set #x1 907 //выкидываем хлам set #y1 613 move #x1, #y1 abs wait 100 left #x1, #y1 abs wait 150 set #x1 1038 set #y1 607 move #x1, #y1 abs wait 100 left #x1, #y1 abs wait 150 set #x1 1020 set #y1 613 move #x1, #y1 abs wait 100 left #x1, #y1 abs :end wait 150 end_proc
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|