Как работает lasttile ?

Ask for help

Moderators: Murderator+, Murderator

Post Reply
Андрюха из Одессы
Posts: 164
Joined: 2009-03-21 10:03:06
Location: Одесса-Мама
Contact:

Как работает lasttile ?

Post by Андрюха из Одессы »

Добрый день. Прошу помощи, не могу разобраться с командой uo.lasttile.
Идея такая, хочу добавить в скрипт Дестракшена на рубку с автопоиском, маркировку деревьев.
Координаты записываются в текстовое окно, вызванное при помощи

Code: Select all

UO.TextOpen()

Суть проблемы: координата добавляется после проверки сообщения о вырубке

Code: Select all

until uo.injournal(бла-бла)
командой

Code: Select all

uo.textprint(uo.lasttile())
Думал все легко :mrgreen: . Однако ответ приходит

Code: Select all

0 0 0 0
Порылся в док-ции, прочитал описание uo.lasttile, там написано, что прицел должен послать клиент. Если правильно понимаю, есть разница между посылкой прицела через инжект и ручками. Вопрос такой, как запилить костыль, дабы возвращались координаты дерева.
RunUO 2.0 ML, client 5.0.1h.

Code: Select all

Пока есть только одна мысль, повторно, на дерево, через хоткей вызывать уошный макрос lastobject, lasttarget.
Кто занимался автомаркировками, подскажите пожалуйста, как выйти из положения, а то башка моя нифига не варит.
Идея не удалась :cry:
Спасибо всем, у кого учился!

Меня трудно найти, легко потерять, и невозможно забыть. Я - рабочий исходник!
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Как работает lasttile ?

Post by Mirage »

Проверь вот такое у вас на ранке работает?
Если да то можно организовать через заднее место - через PrivateGetTile. По нему получишь координаты и тайл перед собой и уже с ними будешь дальше работать.

Если не работает то только прокликивать руками.
Андрюха из Одессы
Posts: 164
Joined: 2009-03-21 10:03:06
Location: Одесса-Мама
Contact:

Re: Как работает lasttile ?

Post by Андрюха из Одессы »

Это же один из любимых скриптов)) Частенько его использую. Чуть позже кину еще клилоки и пару типов тайлов которые нашел.
З.Ы. в док-ции нет описания PrivateGetTile, можешь в двух словах пояснить, для чего сия прелесть используется?

Да, по-большей части твой скрипт работает. Проблемы только в том, что он не может работать с координатой Z. Но это проблема старая и известная. Пару раз натыкался на сообщения о том, что надо с АСМ работать, для решения проблем с Z, но толком инфы не было. Да и не особо искал.
upd. Не корректно выразился. Не по-большей части, а работает. У меня то частный случай.

Есть еще мысль, на сколько понимаю, у Дестракшена координаты хранятся в глобальной переменной.
Соответственно, если инжект нашел дерево и подошел к нему, значит координата должна храниться в переменной. Вопрос, можно ли вытянуть информацию из глобальной переменной? Не совсем понимаю суть их работы, но буду ковырять. Если можно вытянуть инфу, значит надо изменить структуру скрипта, чтоб запускал поток поиска после вырубки. Или вообще сделать все в один поток.
Короче хз, надо думать.

Кстати, еще вопрос. Можно ли массивом задавать значение Z-координаты? Допустим, что я на 100% знаю, что высота дерева может быть в диапозоне от -10 до 10. Пусть себе перебирает высоту, в заданном диапозоне.
Спасибо всем, у кого учился!

Меня трудно найти, легко потерять, и невозможно забыть. Я - рабочий исходник!
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Как работает lasttile ?

Post by Mirage »

перед поиском юзать uo.resend() - тогда с большой вероятностью поймаешь нужную Z координату.

насчет privategettile описание было где то на форуме.

Если не ошибаюсь то там выглядит следующим образом:

Code: Select all

Sub Tree(X,Y)
   DIM  R[2]
   R[1] = 3274;
   R[2] = 3275;
   for i = 1 to 2
      if uo.privategettile( x, y, -1, R[i], R[i]) then
         return R[i]
      endif
   next
   return false
end sub


uo.privategettile( x, y, -1, R[i], R[i])
X,Y координаты точки где проверяем тайл.
-1 - всегда должен быть так - какая то константа.
R[i] список тайлов (в данном случае - рубящиеся деревья).

Берутся координаты чара (X,Y) и от них ±3 координаты. Берем координату (X-3, Y) проверяем есть ли в ней тайл соответствующий списку тайлов R1-R2. Если есть - возвращаем его значение и рубим по той точке. Если нет - пропускаем...

Я как то посидел с инсайдом и переписал все тайлы деревьев рудоносящих кочек, воды на клиенте на котором я тогда играл - получился такой вот скрипт. НА новых клиентах тайлов всего скорее больше - лишь бы сервер поддерживал :)
Андрюха из Одессы
Posts: 164
Joined: 2009-03-21 10:03:06
Location: Одесса-Мама
Contact:

Re: Как работает lasttile ?

Post by Андрюха из Одессы »

Про ресенды, я уже догадался. Яркий пример:
Скрипт:

Code: Select all

sub main()
var z
   z = UO.GetZ()
   uo.print("The coordinate of Z is: "+str(z))
endsub

До ресенда выводил 0, после правильную высоту.

Ресенды вроде помогли, начал нормально рубить на разных высотах.
Вставлю их перед рубкой.
Осталась одна проблема, заставить скрипт забирать правильные координаты деревьев, а не 0 0 0 0. Видимо в коде лоханулся, завтра уже поковыряю, на свежую голову.
Спасибо :wink: .
Attachments
после ресенда
после ресенда
after.jpg (128.76 KiB) Viewed 3611 times
Спасибо всем, у кого учился!

Меня трудно найти, легко потерять, и невозможно забыть. Я - рабочий исходник!
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Как работает lasttile ?

Post by Juicy Fruit »

Code: Select all

until uo.injournal(бла-бла)

Сразу за этим сунь:

Code: Select all

   var ScreenCX=400 #Координата X центра игрового окна
   var ScreenCY=300 #Координата Y центра игрового окна
   var TreeX=<Координата X дерева>
   var TreeY=<Координата Y дерева>
   var BufX=uo.getx('self')-TreeX
   var BufY=uo.gety('self')-TreeY
   var ClickXPos=ScreenCX-(BufX-BufY)*22
   var ClickYPos=ScreenCY-(BufX+BufY)*22
   uo.usetype('0x0E85') #Впиши тип топора, чем рубишь
   wait(500)
   while uo.targeting()
      uo.lclick(ClickXPos,ClickYPos)
      wait(500)
   wend

И потом можно брать координаты из ласттайла.
Андрюха из Одессы
Posts: 164
Joined: 2009-03-21 10:03:06
Location: Одесса-Мама
Contact:

Re: Как работает lasttile ?

Post by Андрюха из Одессы »

Спасибо, завтра проверю.
Если правильно суть его работы понял, то данный костыль, как нельзя лучше подходит моему пациенту.
Спасибо всем, у кого учился!

Меня трудно найти, легко потерять, и невозможно забыть. Я - рабочий исходник!
Андрюха из Одессы
Posts: 164
Joined: 2009-03-21 10:03:06
Location: Одесса-Мама
Contact:

Re: Как работает lasttile ?

Post by Андрюха из Одессы »

5 раз проверил скрипт, на полянке перед банком в Миноке.
Что могу сказать. Костыль рабочий, но есть нюансы.

Code: Select all

3289 2512 567 0
3300 2508 567 0
3290 2504 567 0
3278 2500 567 0
3290 2496 570 0
3290 2496 573 3
0 2499 575 0 ;Кустообразное дерево с 3мя стволами.
3277 2496 579 0
3299 2496 582 0
3296 2496 585 0
0 2499 587 0 ;Елка с типом 3287.
3293 2504 588 0
3300 2500 579 0
3280 2504 579 0
3286 2508 576 0
3278 2504 573 0
0 2507 572 0 ;Елка с типом 3287.
3286 2512 576 0
3278 2508 579 0
3290 2512 582 0

Зависит от того, с какой стороны персонаж подходит к дереву.
Сейчас отправлю перса в лес по-больше и буду смотреть.
Пока в голову пришла идея, проверять куда смотрит перс(а после первой вырубки, он будет смотреть на дерево) и взависимости от этого кликать.
Можно немного облегчить задачу, поставить верду с пеньками. Тогда будет проще собрать координаты X Y для клика.
Спасибо всем, у кого учился!

Меня трудно найти, легко потерять, и невозможно забыть. Я - рабочий исходник!
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Как работает lasttile ?

Post by Juicy Fruit »

Андрюха из Одессы wrote:Можно немного облегчить задачу, поставить верду с пеньками.

Ну да, на такой и тестил.
А не проще поставить АСМ и юзать

Code: Select all

number asmMapGetTile(number X, number Y, number Map)

И для Z

Code: Select all

number asmMapGetZ(number X, number Y, number Map)

?
Без всяких кривоватых кликов.
Андрюха из Одессы
Posts: 164
Joined: 2009-03-21 10:03:06
Location: Одесса-Мама
Contact:

Re: Как работает lasttile ?

Post by Андрюха из Одессы »

Никогда не пробовал АСМ. Наверное пора)
Спасибо всем, у кого учился!

Меня трудно найти, легко потерять, и невозможно забыть. Я - рабочий исходник!
Post Reply