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

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Помогите доработать
Скуб
сообщение 18.7.2012, 21:46
Сообщение #1


**

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



:mine
set lastobjectid #pickaxe
for #x -2 2 1
for #y -2 2 1
set lasttargetx charposx +#x
set lasttargety charposy +#y
set lasttargetkind 2

:repeat
send f1 500
set timer
while_not (lastmsg = $s1) or (lastmsg = $s2) or (lastmsg = $s3) or (lastmsg = $s4) or (timer > 800)
while_not (lastmsg = $s5) or (lastmsg = $s6) or (lastmsg = $s7) or (lastmsg = $s8) or (timer > 2500)
if lastmsg = $s13
goto base
end_if
if wght > #maxweight
goto base1
end_if
end_while
end_if
goto repeat
end_while
end_for
end_for
wait 1000
goto start


:unload
set #backpackx1 #backpackx + 20
set #backpacky1 #backpacky + 30
set #backpackx2 #backpackx + 130
set #backpacky2 #backpacky + 100
wait 500
set #unloada #backpackx1
set #unloadb #backpacky1
while #unloadb < #backpacky2
while #unloada < #backpackx2
move #unloada, #unloadb
set lastobjecttype 3701
double_left #unloada, #unloadb
set timer 0
if wght < 50
goto load
end_if
if lastmsg = $s10
wait 1000
drag #unloada, #unloadb #chestx, #chesty all
wait 100
say Wow
end_if
set #unloada #unloada + #step
end_while
set #unloadb #unloadb + #step
set #unloada #backpackx
end_while
goto load


короче 2 части, суть... не пойму, почему 1й круг, он летает по точкам, всё копает, летит на базу для разгрузки, собирает реги потраченные и вуаля, начинается типа с начала макрос, и показывает ошибку в команде for #x -2 2 1 for #y -2 2 1 стопорится пилот, подскажите, что добавить надо, чтобы он фор норм воспринимал
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 18.7.2012, 22:13
Сообщение #2


***********

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



Пожалуйста, используйте тег code, отредактируйте скрипт с отступами. Так очень тяжело разбираться.

Цитата
#y -2 2 1

Не пробовали просто избегать отрицательного счетчика?


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


**

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



изменил, разницы нет) всёравно пишет ошибку
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 18.7.2012, 22:53
Сообщение #4


*********

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



похоже проблема из-за того, что нельзя из цикла for выходить по goto, а тут это делается


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Скуб
сообщение 18.7.2012, 23:29
Сообщение #5


**

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



это как?) я из него не выхожу вообще-то, 1й круг то у меня нормально копает, вес набирает, валит на базу разгружается, добор регов, и летит на другую руну и начинает копать, на команде for останавливается. 2й круг грубо говоря, начинает косячить
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Скуб
сообщение 18.7.2012, 23:41
Сообщение #6


**

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



хм... действительно, какой-то из готов проверящих на юсии или на перевес тупит, ща надо придумать как их замутить
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 19.7.2012, 6:56
Сообщение #7


*********

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



вот, например, выход из цикла
Код
if wght > #maxweight
   goto base1
end_if

а в пилоте есть такой нюанс: если из цикла for выйти по goto (а не по break), то при повторном заходе в этот цикл вылетает ошибка.
Самый простое решение: заменить циклы for на циклы while (и, конечно, в конец циклов добавить команду приращения проверяемых переменных).

Сообщение отредактировал Zeleax - 19.7.2012, 6:56


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


**

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



ты имеешь в виду сделать?

set lastobjectid #pickaxe
while #x -2 2 1
while #y -2 2 1
set lasttargetx charposx +#x
set lasttargety charposy +#y
set lasttargetkind 2

if lastmsg = $s11
goto mine
end_if

Ифы разные типа на проверки

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


***********

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



что-то вроде.
но ты не учел, что синтаксис у while и for разный. Синтаксис while идентичен обычному if. Т.е. витки цикла придется считать вручную через set #i #i + 1 и занулять #i перед входом в цикл.

если используешь for, то все прерывания только через break, удаляешь все goto.

если хочешь с goto, то используешь while вместо for.

Сообщение отредактировал DarkMaster - 19.7.2012, 14:23


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


**

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



:mine
set lastobjectid #pickaxe
for #x -2 2 1
for #y -2 2 1
set lasttargetx charposx +#x
set lasttargety charposy +#y
set lasttargetkind 2

:repeat
send f1 500
set timer
while_not (lastmsg = $s1) or (lastmsg = $s2) or (lastmsg = $s3) or (lastmsg = $s4) or (timer > 800)
while_not (lastmsg = $s5) or (lastmsg = $s6) or (lastmsg = $s7) or (lastmsg = $s8) or (timer > 2500)
if lastmsg = $s13
goto base
end_if
if wght > #maxweight
goto base1
end_if
end_while
end_if
goto repeat
end_while
end_for
end_for
wait 1000
goto start

исходя из этого, где написано goto надо изменить на break??? и фор не будет выпендриватся? или уже на режиме гото типа на вес при заверщение брейкс надо прописать??


:base1
set timer
set #rmr #rmr + 1
set #rbp #rbp + 1
set #rbm #rbm + 1
send f6 // ласт таргет
while 1 = 1
if lastmsg = $s9
wait 15000
end_if
if lastmsg = $s12
goto base1
end_if
if timer > 4500
БРЕЙК - сюда например?
goto unload
end_if
end_while
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Скуб
сообщение 19.7.2012, 16:03
Сообщение #11


**

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



Еще вопрос, попробовал с репитом:

:body
set #orex charposx - 2
set #orey charposy - 2

repeat 5
repeat 5
gosub mine
set #orex #orex + 1
end_repeat
set #orex charposx - 2
set #orey #orey + 1
end_repeat

:mine
set lasttargetx #orex
set lasttargety #orey
set lastobjectid #pickaxe
set lasttargetkind 2

:repeat
set timer
send f2 500
if_not lastmsg = $s14
goto base2
end_if
send f1 500
while 1 = 1
if (lastmsg = $s1) or (lastmsg = $s2) or (lastmsg = $s3) or (lastmsg = $s4)
return
end_if
if (lastmsg = $s5) or (lastmsg = $s6) or (lastmsg = $s7) or (lastmsg = $s8)
goto repeat
end_if
if wght > #maxweight
goto base1
end_if
if timer > 5000
goto repeat
end_if
if lastmsg = $s9
wait 15000
end_if
if lastmsg = $s13
goto base
end_if
end_while

Также, выдаёт ошибку, на 2м круге, типа косяк с репитом, какую надо команду указать? Спасибо...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 19.7.2012, 16:11
Сообщение #12


***********

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



Я не вижу текста ошибки.

return у вас для чего используется?
break это прерывание цикла, это не аналог goto. Подробнее можно прочитать:
?/Помощь по языку скриптов
а так же
http://uopilot.tati.pro/index.php?title=Break


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


**

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



Да уже разобрался))), DarkMaster я скинул вам полный макрос в ЛС, посмотрите, и скажите куда мне брейк надо вставить... чтобы всё работало нормально, спасибо заранее!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 19.7.2012, 16:42
Сообщение #14


*********

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



DarkMaster
приказ принял? ))


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


**

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



Это не приказ, это просьба посмотреть полный макрос) и показать на примере, я не пойму просто куда влепить брейк этот...(
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 19.7.2012, 17:39
Сообщение #16


***********

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



в скинутой простыне for не обнаружил. Вы не поленитесь, оторвитесь на десять минут от сиюминутного желания получить результат и прочитайте про for и про while. У них разные задачи и разные схемы работы. Почитайте чуток. Если вы хотите остаться на for, то вам придется немного переделать логику скрипта, если вы хотите перейти на while, то вам придется немного добавить условий для реализации функционала аналогичного for. Успокойтесь и предайтесь спокойному вдумчивому чтению. Я вас уверяю все гораздо проще, чем вы думаете.


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


**

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



да я прочитал, но не понял всё равно, в ЛС просмотрите его, Вам что тяжело впихуть брейк куда именно надо?) мне реально проще воспринимать, на примере, типа логически уже понимать буду. Не могу я понимать фразы, они наглядно не дают ответа.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 19.7.2012, 18:08
Сообщение #18


***********

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



а зачем вам break в while?
Цитата
Пожалуйста, используйте тег code, отредактируйте скрипт с отступами в логических операторах и циклах. Так очень тяжело разбираться.

Повторюсь.


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


***

Novice
Сообщений: 68
Регистрация: 2.9.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.253



Помогите с таргетом. Скрипт на мининг, копает вокруг себя 25 тайлов. Когда появляется моб скрипт с минингом стает на паузу, чар кидает на моба скрол и убивает. Потом запускается скрипт на мининг. И тут проблема, сфера пишет you can't see the target. Как вернуть чтобы видел что копать. А то если просто останавливать скрипт и запускать по новой бывает уже под конец копки, и он в пустую бьет много тайлов.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 18.9.2012, 3:10
Сообщение #20


********

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



Проверь чему равно LastStaticType, LastObjectType, LastTargetKind когда копаешь и моба бъешь, возможно восстанавливать что-то из этого придется после моба.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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