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

 
Ответить в эту темуОткрыть новую тему
> Помогите довести скрипт до ума, Анимал тайминг + стрич
Brakses
сообщение 28.8.2015, 20:32
Сообщение #1


*

Registred
Сообщений: 7
Регистрация: 28.8.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.606
Возраст: 27



Ситуация такая... я начинаю, потихоньку, осваивать пилот. Хотя... честно... никак не могу понять что такое set =))

Но... как оказалось, не знание этого не отнимает возможности что-то написать...

Скрипт должен делать следующее. Находить овцу, звать ее к себе,
как только овца будет на досягаемом уровне от чара - постричь ее и начать таймить.
Проверить (затаймилась ли?) - если нет - то попробовать затаймить ее еще раз, причем...
если овца отошла на недосягаемое расстояние, опять ее подозвать к себе...
чар статично стоит в загоне для овец в еве.

Я написал макрос... он, так как я хочу не работает...

Код
:start
send {Enter} / чтобы освободить строку ввода от цифр, которые макрос в процессе работы вводит
wait 100
send f7 / next target
wait 100
send {num_2} / звать овцу хеардингов (макрос забит в абисте на посох, живка, я и ласт таргет)
wait 5000
if (lastmsg they look somewhat annoyed) / если это сообщение - то это не овца.
goto start   / И опять в начало на некст таргет. Искать овцу дальше.
else goto zvat   / если это овца - звать дальше
end_if
:zvat  / звать
send {num_2} / звать
wait 5000
send {num_1} / стрич (забито в абисте на нож, живку и поменено на ласт таргет)
wait 150
send {num_3} /кнопка тайминг. Забито в абисте на посох. живка. живка изменена на ласт таргет.
это моя проверка на достигаемость тайминга. поэтому маленькая задержка. мол если овца рядом.
он начнет ее таймить и последнее сообщение будет не такое... как написано ниже.
wait 2500
if (lastmsg what do you want to use this on?) / если последнее сообщение будет такое - значит овца не рядом.
goto zvat / возвращаемся к команде звать.
else goto taming / иначе. Т.е. если последнее сообщение другое.. типо "here lamb" переходить в тайминг
end_if
:taming  / тайминг
send {num_3} / тайминг забит в абисте на посох, живка. Живка поменена на ласт таргет
wait 25000
if (lastmsg Animal Taming) / на абусе. в момент тайминга.
мало появляется команд на английском. Вот... в русском сообщении от сервера
"животное было удалено. вы получите опыт в Animal taiming" есть
английское слово тайминг... т.к. уо пилот не реагирует на русские слова
от сервера. я подумал, может он увидит это словосочитание Animal taming
и по нему мол догадается, что живка приручилась. Мол если приручилась -
идти в начало. Иначе. Т.е. если такого сообщения не появилось - вернуться к метке таймить.
goto start
else goto taming
end_if



Как вы можете догадаться. Много моих задумок не работают... А именно...
Не могу проверить досягаемость живки... Вопреки моему убеждению, что
логика тут соблюдена - он пытается потаймить 1 раз и возвращается вначало,
даже если не затаймил.

Помогите реализовать именно мои задумки. Буду признателен за такой же анализ
ваших действий... Т.к. вы догадались - я не понимаю много в пилоте...
Особенно связанного с китайским словом set и непонятными словами
типо функция, переменная, массив и прочее... что это хз=)?
Спасибо заранее за помощь. Надеюсь на отсутствие троллинга на этом форуме.


Есть желание добавить еще 1 функцию. Чтобы он не таймил, а стриг, убивал, резал, лутал.
т.е. цель поменять... Не тайминг качать, а собирать шерсть... т.к. овца появляется с шерстью... ее можно стрич... после убийства ее и разрезания - в трупе будет лежать еще 1 шерсть...

Но я вообще не представляю как это сделать... может есть у кого идеи? я же не знаю где появится пак овцы с шерстью на экране... И не знаю в каком месте пака будет лежать шерсть... т.е. как позвать, пострич, и убить - япредставляю... как порезать труп, и полутать - вообще хз!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 28.8.2015, 21:20
Сообщение #2


***********

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



set - это оператор присвоения.
Код
set #a 123 // переменная #a будет равна 123

set так же используется для математики, результат будет присвоен в данном случае переменной #a. Так же все функции, которые возвращают значения могут быть использованы в сочетании с set, чтобы запомнить результат выполнения этой функции (часто set обязателен для вызова функции).
по коду:
1) Уйти от всех goto за исключением :start вначале и goto start вконце.
2) Делайте отступы внутри условий и циклов. Читать ваш код очень тяжело. Например:
Код
if lastmsg qwe
set #a 123
msg сообщение
while #b = 3
send 1
send 2
wait 100
end_while
end_if

сравните:
if lastmsg qwe
    set #a 123
    msg сообщение
    while #b = 3
        send 1
        send 2
        wait 100
    end_while
end_if

3) Почему после строк идут комментарии только после одно '/'? Должно быть 2 - иначе будут проблемы. Так же озадачивает многострочный комментарий, который не закомментирован и является для пилота кодом.

Цитата
моя проверка на достигаемость тайминга. поэтому маленькая задержка.

Если объект выбран целью, то можно взять его координтаы: LastTargetX, LastTargety, LastTargetZ, и координаты персонажа: CharPosX, CharPosY, CharPosZ. Это может дать вам понимание дистанции до объекта. Чтобы все это не просчитывать по теореме пифагора, можно воспользоваться функцией point_distance, которая кстати потребует set.
Цитата
Чтобы он не таймил, а стриг, убивал, резал

Это не решается через LastSpell? Пилот позволяет задавать lastspellid. Это зарезервированная переменная. Все через тот же set. А вот как лутать не скажу - с ультимой почти не знаком.


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


*

Registred
Сообщений: 7
Регистрация: 28.8.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.606
Возраст: 27



окей... заинтересовался идеей насчет координат живки и моих...

Не могли бы вы мне продемонстрировать простенький пример?
Т.к. мне тут многое не понятно.
А именно... хорошо... я так понял что я должен присвоить set -у координаты живки и другому set-у координаты игрока. Но... как пилоту сообщить, что такая относительная координата подходит для тайминга? И вообще... что вычисляет point_distance ? синус, косинус? или что? и как мне понять что это подходит?
я так понял... что тут еще придется использовать while ?

set #a point_distance ( LastTargetX, LastTargety, LastTargetZ)
set #b point_distance (CharPosX, CharPosY, CharPosZ)
while #a - #b > 1
send f1(звать)
Я примерно правильно понял? =)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 28.8.2015, 21:59
Сообщение #4


***********

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



Цитата
И вообще... что вычисляет point_distance ? синус, косинус? или что?

вычисляет он, как не удивительно, дистанцию. В данном случае это будет дистанция в тайлах по прямой до цели. Т.е. нужно понимать, что результатом может быть, например, дробное число.
Цитата
как мне понять что это подходит?

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

Нет.
Цитата
set #a point_distance ( LastTargetX, LastTargety, LastTargetZ)
set #b point_distance (CharPosX, CharPosY, CharPosZ)

Ошибка. Посмотрите синтаксис оператора в справке. Поправьте, если останутся вопросы - задайте.
Цитата
while #a - #b > 1

в условиях/циклах нельзя использовать математику напрямую. Только через set и (временную) переменную.
Цитата
Я примерно правильно понял? =)

Вы не поняли суть оператора point_distance, соответственно пошли проблемы.
Тот момент, что полученный результат надо сравнить с некоторым эталоном и соответственно дальше принять некоторые действия - верен.


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


*

Registred
Сообщений: 7
Регистрация: 28.8.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.606
Возраст: 27



Так правильнее будет? Кстати игра 2д... думаю координаты z не нужны.
set #x1 CharPosX
set #y1 CharPosY
set #x2 LastTargetX
set #y2 LastTargetY

set $a point_distance(#x1 #y1 #x2 #y2)
set #dist round( $a )
if #dist >2
send f1 (звать)

Вроде как правильно.. Но я столкнулся с проблемой.

Я в одном окне игры указал последний таргет на перса из другого окна. В макросе, что выше, указал писать лог и запустил. Переключился в то окно где мой второй перс, на которого ласт таргет поставил. И стал отходить по 1 клетке. вот лог
23:35:25 0 (нароботка.txt, 8): 2
23:35:27 0 (нароботка.txt, 8): 2
23:35:29 0 (нароботка.txt, 8): 2
23:35:31 0 (нароботка.txt, 8): 2
23:35:33 0 (нароботка.txt, 8): 2
23:35:35 0 (нароботка.txt, 8): 2
23:35:37 0 (нароботка.txt, 8): 2
23:35:39 0 (нароботка.txt, 8): 2
23:35:41 0 (нароботка.txt, 8): 2

Координата не менялась... Но...

Если я отходил от своего ласт таргета, то координата менялась

3:42:24 0 (нароботка.txt, 8): 2
23:43:01 0 (нароботка.txt, 8): 1
23:43:09 0 (нароботка.txt, 8): 1
23:43:15 0 (нароботка.txt, 8): 3

Надо наоборот...

Или у меня опять ошибка?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.8.2015, 0:00
Сообщение #6


***********

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



Цитата
Кстати игра 2д... думаю координаты z не нужны.

это никак не мешает ультиме иметь z координату. Тем не менее здесь она действительно не нужна.
Цитата
Или у меня опять ошибка?

код верный. Ну по крайней мере я ошибок сразу не увидел. If разве что не закрыт, но это я так понимаю приведен только кусок скрипта. Советую протестировать на отдельной вкладке - так проще будет. Вы должны понимать, что кусок:
Цитата
set #x1 CharPosX
set #y1 CharPosY
set #x2 LastTargetX
set #y2 LastTargetY

Должен выполняться каждый раз перед point_distance.
Тем не мене нет смысла особого в этом куске как таковом. Можно использовать все эти переменные напрямую сразу в point_distance.

Касательно появившейся проблемы точного ответа не скажу, тем не менее:
1) Скрипту абсолютно без разницы кто от кого куда отходит. Для него важна только разница координат.
2) Есть большие сомнения в чистоте проведенного эксперимента, точнее ласттаргета.
3) Может возникнуть необходимость увеличить точность. В качестве теста попробуйте выводить в лог число без округления.


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


*

Registred
Сообщений: 7
Регистрация: 28.8.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.606
Возраст: 27



Кароче... вот какой код у меня получился... Все работает,
кроме одного - координаты меняются, только если я хожу
и то не всегда... Может есть те, кто знают особенность УО
и подскажут че не так?


Код
:start
      send {Enter} //Чтобы очистить строку ввода//
      wait 100
      send f7 //некст таргет//
      wait 100
      send {num_2} //Звать живку - хеардинг посохом//
      wait 5000
      if (lastmsg they look somewhat annoyed) //Если такое сообщение - это не живка//
      goto start //Идем в начало//
      else goto zvat //Идем дальше//
      end_if
:zvat
     send {num_2} //Звать живку - хеардинг посохом//
     wait 2000
     if (lastmsg you can't see the target) //если живка исчезла идем в начало//
     goto start
     else  //иначе определяем дистанцию от чара до живки//
     set #x1 LastTargetX
     set #y1 LastTargetY
     set #x2 CharposX
     set #y2 CharposY
     set $a point_distance(#x1 #y1 #x2 #y2)
     set #dist round($a)
     log #dist
     if (#dist > 8)   //Я так и не определил чему должна
быть равна дистанция для достигаемости
ее чаром. Ну допустим если дистанция
больше 8 - то повторим звать//
     goto zvat
     else goto taming //Иначе - стрижем и таймим//
     end_if
     end_if

:taming
       send {num_1} //стрич//
           wait 100
           send {num_3} //таймить//
       wait 25000
       if (lastmsg you can't see the target)    //если живка исчезла - идем в начало//  
       goto start
       else //иначе, повторяем звать, чтобы определить ее достигаемость//  
       goto zvat
       end_if
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.8.2015, 12:38
Сообщение #8


***********

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



Цитата
else goto zvat //Идем дальше//

ошибка. else должен быть на отдельной строке.
Цитата
//Я так и не определил чему должна
быть равна дистанция для достигаемости
ее чаром. Ну допустим если дистанция
больше 8 - то повторим звать//

Многострочный комментарий не закомментирован. Пилот будет пытаться выполний "команды":
быть
равно
дистанция
и т.д.
Цитата
Может есть те, кто знают особенность УО
и подскажут че не так?

Я почти уверен в том, что ласттаргет на другую цель. Например на тайл.

на вкладке "еще" откройте параметры чара. может что-то прояснится.


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


*

Registred
Сообщений: 7
Регистрация: 28.8.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.606
Возраст: 27



Вы, абсолютно, оказались правы!
Координаты ласт таргета по х и у не меняются вообще... я дважды кликаю на цель и через таргет инструментов и предметов... и скилами... один фиг- координата, полностью статично в независимости от того в какой части игрового мира я нахожусь... все остальное меняется... и айди ласт таргета и тип объекта.
Есть какие идеи?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 30.8.2015, 23:24
Сообщение #10


***********

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



Уже сложнее. Я таргеты только тайлов для копки тыкал ну и кирку выбирал...
Была мысль именно кастануть по цели - таргет по идее должен смениться был бы, но вы, как я понял, это уже делали. А внутриигровые макросы с lasttarget вообще работают, если цель должна быть персонажем, которого отслеживаем? Вообще ласттаргет возможно задать пилотом, но надо знать ID который задавать. В случае с персонажами/мобами - это должны быть уникальные id и они вполне возможно будут меняться при респе/входе в игру объекта.


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


*

Registred
Сообщений: 7
Регистрация: 28.8.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.606
Возраст: 27



да, макросы с ласт таргетом работают...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 31.8.2015, 0:34
Сообщение #12


***********

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



А если сделать какой-то фейк-заглушку с ласттаргетом? Если нажать макрос с ласттаргетом, то координата обновится?


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

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

 

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