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

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> UoPilot в magegame.ru (Войны и маги), Помогите со скриптом
kuscheyder
сообщение 3.12.2012, 13:58
Сообщение #1


**

Neophyte
Сообщений: 13
Регистрация: 3.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.535



Приветствую форум!
Хотел бы уточнить как реализовать функцию цветового поиска в этой игре.
Игра представляет собой бродику и в принципе можно ограничиваться left <корды>, но расширившийся функционал программы позволяет сделать еще одну полезную вещь. Интерфейс игры представляет собой квадратное поле 10*10 ячеек, хотелось бы написать скрипт, чтобы можно было искать квесты.

В частности: одним скриптом я задаю направление перемещения, а другой бесконечно выполняет команду по проверке рабочего окна 10*10 ячеек на предмет 3 цветов: белого, желтого и красного. Квесты выглядят как знаки вопроса окрашенные в эти цвета. Либо еще вариант реализации - поиск заданных изображений ячейки с квестом. Как только искоме найдено, скрипт 2 останавливает скрипт 1 (а в идеале дает звуковой сигнал).

Ну для примера вот скрин:

http://s52.radikal.ru/i136/1104/de/5b5fcbe19b8c.jpg

Перс стоит рядом с 2-мя квестами.

Убедительная просьба объясните как написать такого рода скрипт, поскольку скриптами не владею в принципе. Хотя бы дайте шаблон, значения переменных я сам подобью.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 3.12.2012, 14:06
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27722
Пользователь №: 11.279



Почитайте вики про findcolor, findimage. Это два способа найти необходимые изображения, как раз по цвету и по картике соответственно.
Так же очень рекомендую почитать тему полезных советов касательно данных команд. Там есть нужные вам конструкции.
Вика тут http://uopilot.tati.pro/index.php?title=%D...%D1%8F:AllPages


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kuscheyder
сообщение 3.12.2012, 14:11
Сообщение #3


**

Neophyte
Сообщений: 13
Регистрация: 3.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.535



Пытался сделать скрипт примерно такого вида, вбивая для каждой ячейки поля отдельное значение:

if <корд> <цвет>
else <корд> <цвет>
...
if_end

stop_script 0
repeat 0

Однако не сработало.
А как работать с массивами мне и после прочтения маниала не понятно, я кроме LUA со скриптами никакими не работал.

DarkMaster спасибо Вам за ссылку - думаю разберусь теперь, в принципе интересовала как раз возможность для указания области поиска, а то прописывать для каждой ячейки отдельно - излишний гемор.

Спасибо!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 3.12.2012, 14:36
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27722
Пользователь №: 11.279



Цитата
if_end

Ошибочка. Надо end_if


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kuscheyder
сообщение 6.12.2012, 10:44
Сообщение #5


**

Neophyte
Сообщений: 13
Регистрация: 3.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.535



Работаю над таким скриптом для перемещения по заданному маршруту, для изменения направления движения использую findimage. Движение осуществляется путем клика.

set $a 0
set $b 0
set $b1 0
set $c 0
set $d 0
set $d1 0
set $e 0
for #i 1 2 0
wait 300
left 531, 314
wait 300
set $a findimage (782, 108 926, 175 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab1.bmp) %arr 2)
if $a > 0
wait 300
left 512, 275
wait 300
left 472, 275
wait 300
end_if
set $b findimage (782, 108 926, 175 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab2.bmp) %arr 2)
if $b > 0
wait 300
left 533, 316
end_if
set $b1 findimage (782, 108 926, 175 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab3.bmp) %arr 2)
if $b1 > 0
wait 300
left 533, 316
end_if
set $c findimage (782, 108 926, 175 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab4.bmp) %arr 2)
if $c > 0
wait 300
left 511, 276
wait 300
left 471, 276
wait 300
end_if

Вопрос: можно ли научить скрипт тому, чтобы каждое предыдущее условие выполнялось до того, как последующее примет значение 1, и далее не выполнялось?
Просто столкнулся с проблемой: поначалу все работает, но когда количество условий становится > 7-8, то начинается путаница и за счет wait выполняются ненужные перемещения из предыдущих условий.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kuscheyder
сообщение 6.12.2012, 11:02
Сообщение #6


**

Neophyte
Сообщений: 13
Регистрация: 3.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.535



Только заметил у себя косяк! (IMG:style_emoticons/default/rolleyes.gif)
Теперь понятно почему не срабатывает как надо... Думаю, надо привязать к left количество повторов в заданном напралении, так лучше будет, но все равно ума не приложу как прописать скриптом смысловое выражение "выполнять конкретный left бесконечно до тех пор, пока значение следующего условия не станет равно 1, после чего не выполнять предыдущее условие и выполнять бесконечно новый left". Проблема в том что эта схема сработает в момент когда переменная = 1, а равна она ей однократно и после следующего клика фактически скрипт опять начнет учитывать и предыдущее условие.

Все, ложная тревога! (IMG:style_emoticons/default/smile.gif)
Придумал.. Делаю 4 мини-скрипта на клики, а в этом делаю отсылки на них в случае выполнения условий, ну типа:

set $a 0
set $b 0
set $b1 0
set $c 0
set $d 0
set $d1 0
set $e 0
for #i 1 2 0
start_script 0
set $a findimage (782, 108 926, 175 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab1.bmp) %arr 2)
if $a > 0
stop_script 0
start_script 1
end_if
end_for
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 6.12.2012, 11:04
Сообщение #7


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Есть цикл while_not. Поставьте внутрь него первый left, а в заголовок проверку на "следующее условие". А потом еще один бесконечный while со вторым left'ом внутри


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 6.12.2012, 12:04
Сообщение #8


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Цитата
for #i 1 2 0

Если нужен инфинитный луп, используйте goto или while.
Незачем фор попусту насиловать. Оно быстрее и надежней будет.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kuscheyder
сообщение 6.12.2012, 13:08
Сообщение #9


**

Neophyte
Сообщений: 13
Регистрация: 3.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.535



Не совсем понял.. (IMG:style_emoticons/default/mellow.gif)
Насчет while я согласен, он зацикливает перемещение, но вот увязать между собой while и findimage не получается. Где set ставить до while или внутри цикла while? For i я убрал - получилась какая-то каша:

set $a findimage (789, 116 913, 161 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab1.bmp) %arr 2)
while_not $a > 0
wait 1500
left 531, 316
end_while
if $a > 0
set $b findimage (789, 116 913, 161 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab2.bmp) %arr 2)
while_not $b > 0
wait 1500
left 531, 316
wait 1500
left 531, 316
end_while
end_if

Работает криво, в свернутом виде вообще работать не хочет, в развернутом цикл

while_not $a > 0
wait 1500
left 531, 316
end_while

повторяется бесконечно, даже если a => 1
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 6.12.2012, 13:13
Сообщение #10


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Пишу только для примера. Логику обдумайте сами
Код
set $a findimage (789, 116 913, 161 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab1.bmp) %arr 2)
while_not $a > 0
  left 531, 316
  wait 1500
  set $a findimage (789, 116 913, 161 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab1.bmp) %arr 2)
end_while
while 1 = 1 // беконечно
   left 1, 1
   wait 1000
end_while


Сообщение отредактировал Zeleax - 6.12.2012, 13:14


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kuscheyder
сообщение 6.12.2012, 13:48
Сообщение #11


**

Neophyte
Сообщений: 13
Регистрация: 3.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.535



Спасибо за совет, но проблему это не решает.. (IMG:style_emoticons/default/unsure.gif)
По-прежнему в нужной точке findimage не срабатывает ничего не происходит, перс бежит дальше.
Цель конечная - не бесконечное прямолинейне движние, а изменение направления, как только findimage найдет нужную картинку.

Код
set $a findimage (778, 111 925, 177  (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab1.bmp) %arr 2) 
while_not $a > 0  
left 531, 316
wait 1500
set $a findimage (778, 111 925, 177 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab1.bmp) %arr 2)
end_while
while 1 = 1
left 513, 271
wait 1500
left 471, 268
wait 1500
end_while


Однако, он почему-то ее не находит. (IMG:style_emoticons/default/blink.gif)
Когда окно в мини режиме, то и вовсе while_not не работает, а скрипт прыгает сразу исполнять while
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 6.12.2012, 13:56
Сообщение #12


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Цитата(kuscheyder @ 6.12.2012, 14:48) *

Спасибо за совет, но проблему это не решает.. (IMG:style_emoticons/default/unsure.gif)
По-прежнему в нужной точке findimage не срабатывает ничего не происходит, перс бежит дальше.
Цель конечная - не бесконечное прямолинейне движние, а изменение направления, как только findimage найдет нужную картинку.

Ну так алгоритм правильный надо сделать - будет работать.
Ваш Кэп )


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kuscheyder
сообщение 6.12.2012, 14:04
Сообщение #13


**

Neophyte
Сообщений: 13
Регистрация: 3.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.535



4 часа мучаюсь уже чтобы написать скрипт на прохождение локации, по которой 3 часа идти.
Кеп подсказывает что за три часа и без всяких while можно было уже скрипт написать и, кроме того, while похоже в данном случае вообще не уместен. (IMG:style_emoticons/default/dry.gif)

Вопрос кэпу: зачем нужен форум тогда, если в лучшем случае тут посылают читать мануалы?
Я же не прошу за меня 5000 строк писать, я прошу только показать принцип увязки 2 переменных в оговоренном контексте. Ну лень скрипты писать, хоть намекните как заставить findimage работать.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 6.12.2012, 14:16
Сообщение #14


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27722
Пользователь №: 11.279



для начала сделай вывод в лог переменной $a, чтобы понять когда находит, а когда нет. Визуально все рабочее. Возможно какие-то косяки с координатами или привязкой. Блоком while 1 = 1 вы чего хотели добиться? Вы написали бесконечный цикл.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kuscheyder
сообщение 6.12.2012, 14:23
Сообщение #15


**

Neophyte
Сообщений: 13
Регистрация: 3.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.535



Спасибо! Хотя бы ясность внесли.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 6.12.2012, 14:28
Сообщение #16


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27722
Пользователь №: 11.279



во 1 у вас где-то есть if. Код вы скинул не весь, иф вы не закрыли.
во 2 while $b != 1 работать никогда не будет.
Фишка в том, что если финдимидж нашел несколько изображений, то он вернет их количество, если же он нашел только одно изображение, то он вернет процент совпадения изображения.

и брюки превращаются в исчезнувший код)


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kuscheyder
сообщение 6.12.2012, 15:19
Сообщение #17


**

Neophyte
Сообщений: 13
Регистрация: 3.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.535



Пишу вот так:

Код
set $a = 0 
set $b = 0
while_not $a > 0
set $a findimage (762, 110 933, 183 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab1.bmp) %arr 2)
left 531, 316
wait 1500
set $a findimage (762, 110 933, 183 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab1.bmp) %arr 2)
end_while
while_not $b > 0
set $b findimage (762, 110 933, 183 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab2.bmp) %arr 2)
left 512, 275
wait 1500
left 469, 268  
wait 1500
set $b findimage (762, 110 933, 183 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab2.bmp) %arr 2)
end_while


Скрипт запускается, никаких ошибок не всплывает. Но! Команда тоже ни одна не выполняется, просто курсор по окошку Пилота бегает по строчкам 0,1,2,8, а действия никакого.
В принципе же должно работать, ведь
Код
while_not $a > 0


показывает, что действие должно выполняться пока утверждение $a > 0 является ложным, изначально я задал $a = 0, стало быть, противоречия нет. Тем не менее, не работает. Ксли поэкспериментировать со знаками <, >, = то в некоторых случаях работать будет, но картинок все равно не ищет. (IMG:style_emoticons/default/huh.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 6.12.2012, 15:27
Сообщение #18


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



set $a 0


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kuscheyder
сообщение 6.12.2012, 15:47
Сообщение #19


**

Neophyte
Сообщений: 13
Регистрация: 3.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.535



set $a 0

Да, работать стало, только теперь параллельно проверяет и $a и $b и выполняет все нажатия и для а и для b. Можно сделать чтоб скрипт работал одновременно только с одной переменной, а когда она принимает искомое значение - переходил ко второй?
Еще похоже, что картинки он все же не видит.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 6.12.2012, 16:37
Сообщение #20


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Каждый блок должен выглядеть примерно так:
Код
set #a 0
set #a findimage (762, 110 933, 183 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab1.bmp) %arr 2)
while #a <= 0
   hint lab1.bmp не найдена // для наглядности
   left 531, 316
   wait 1500
   set #a findimage (762, 110 933, 183 (C:\Documents and Settings\VXK.CRAAGER.000\Рабочий стол\Новая папка (4)\image\lab\lab1.bmp) %arr 2)
end_while
hint lab1.bmp найдена! // для наглядности


Сообщение отредактировал Zeleax - 6.12.2012, 16:38


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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