Доброго дня всем!
Проблема вот в чём, на шарде для команды uo.waittargettile необходимо жёстко указывать номер тайла. Например в скрипте на ловлю рыбы. Если указать -1 или 0 или all , просто появляется сообщение "Вы не можете рыбачить здесь". Что можно придумать? У меня есть три варианта, хотел бы узнать, реализуемо ли такое:
1) Делать перебор по известным номерам тайлов из команды infotile
2) Скрипт берёт номер тайла из команды, например, uo.infotile(x abs, y abs) чтобы такая команда возвращало номер тайла указанных координат
3) некий аналог значений -1 или all, чтобы номер тайла для команды был вообще не обязателен.
Оговорюсь, дело в том, что на моём шарде водичка задаётся разными номерами тайлов и узнавать все и перебирать не очень хочется...
Так же прошу подсказать, как сделать клик мышкой в абсолютные координаты.
Waittargettile, проблема с номером тайла.
Moderators: Murderator+, Murderator
Re: Waittargettile, проблема с номером тайла.
necroic wrote:Оговорюсь, дело в том, что на моём шарде водичка задаётся разными номерами тайлов и узнавать все и перебирать не очень хочется...

Вообщето для этого существует утилита InsideUO которая отображает тайлы всех типов именно твоего шарда (даже если они не стандартные)
А так помоему ты изобретаешь велосипед. Попробуй вот такой скрипт для ловли:
Code: Select all
sub FishingAround()
VAR X, Y, i, MaxRange = 6, MaxVes = 620
VAR knife = '0x0F51' ; нож
VAR Steak = '0x097A'
VAR Bag = '0x40205DFE'
DIM Fish[5]
Fish[1] = '0x09CC' ; тип рыбы 1
Fish[2] = '0x09CD' ; тип рыбы 2
Fish[3] = '0x09CE' ; тип рыбы 3
Fish[4] = '0x09CF' ; тип рыбы 4
for Y = -MaxRange to MaxRange
for X = -MaxRange to MaxRange
if FishTiles(UO.GetX()+X, UO.GetY()+Y) then
repeat
UO.DeleteJournal()
UO.Warmode(0)
wait(100)
UO.WaitTargetTile(FishTiles(UO.GetX()+X, UO.GetY()+Y), UO.GetX()+X, UO.GetY()+Y, UO.GetZ())
; ********************************
; Auto Tools
if UO.Count(0x0DBF) || UO.Count(0x0DC0) then
if UO.Count(0x0DBF) then
UO.UseType(0x0DBF); <-- удочка
else
UO.UseType(0x0DC0); <-- удочка
endif
else
return 1
endif
; ********************************
repeat
wait(100)
until UO.InJournal('pull out|anything|поймали|You can|не получилось|no fish|нету рыбы|месте|далеко|вытащили удочку')
For i=1 To 4
UO.FindType( Fish[i], -1, 'ground' )
If UO.FindCount() > 0 Then
UO.Grab( 0, 'finditem' )
Wait( 300 )
Endif
Next
If UO.Weight > MaxVes Then
UO.Print('Перегруз!')
return 0
endif
If UO.Life < Uo.Str/10 then
UO.Print('А мы умираем!')
return 0
endif
until UO.InJournal("no fish|нету рыбы|anything|в другом месте|далеко|вытащили удочку") || UO.Dead()
For i=1 To 4
UO.FindType( Fish[i] )
If UO.FindCount() > 0 Then
UO.WaitTargetObject( 'finditem' )
UO.UseType( knife )
Wait( 500 )
UO.FindType( Steak )
If UO.FindCount() > 0 Then
UO.MoveItem( 'finditem', '0' , Bag )
wait( 500 )
Endif
Endif
Next
endif
next
next
UO.Print(" = Вся рыба в квадрате поймана = ")
UO.Sound(100)
return 0
end sub
Sub FishTiles(X,Y)
var j
if UO.PrivateGetTile(X, Y, -1, 6038, 6066) then
for j=6038 to 6066
if UO.PrivateGetTile(X, Y, -1, j, j) then
return j
end if
next
end if
return 0; No Harvest Tiles
end sub
if UO.PrivateGetTile(X, Y, -1, 6038, 6066) then ; <- ВОТ ТУТ как раз и перечислены ВСЕ возможные для ловли тайлы
Re: Waittargettile, проблема с номером тайла.
Скажите, я так понимаю, что функция UO.PrivateGetTile проверяет входит ли номер тайла, указанного в координатах в диапазон заданных значений, а может ли она выдать мне номер этого тайла? Она же проверяет вхождение использую переменные номера моего тайла и диапазона?
Re: Waittargettile, проблема с номером тайла.
непонятно зачем конечно но будет чтото навроде этого:
Или вот так, универсальная но сцуко медленная:
Таким образом кстати можно собирать тайлы пола в пещерах и деревья. Нужно только задать верные границы тайлов.
Code: Select all
sub main()
VAR X, Y, i, MaxRange = 6, MaxVes = 620
uo.textclear()
For Y = -MaxRange to MaxRange
for X = -MaxRange to MaxRange
if TestTiles(UO.GetX()+X, UO.GetY()+Y) then
uo.textopen()
UO.textPrint(TestTiles(UO.GetX()+X, UO.GetY()+Y), UO.GetX()+X, UO.GetY()+Y, UO.GetZ())
Endif
next
Next
end sub
Sub TestTiles(X,Y)
var j
if UO.PrivateGetTile(X, Y, -1, 6038, 6066) then ; тайлы воды
for j=6038 to 6066
if UO.PrivateGetTile(X, Y, -1, j, j) then
return j
end if
next
end if
return 0
end sub
Или вот так, универсальная но сцуко медленная:
Code: Select all
sub main()
VAR X, Y, i, MaxRange = 6, MaxVes = 620
uo.textclear()
For Y = -MaxRange to MaxRange
for X = -MaxRange to MaxRange
if TestTiles(UO.GetX()+X, UO.GetY()+Y) then
uo.textopen()
UO.textPrint(TestTiles(UO.GetX()+X, UO.GetY()+Y), UO.GetX()+X, UO.GetY()+Y, UO.GetZ())
Endif
next
Next
end sub
Sub TestTiles(X,Y)
var j
if UO.PrivateGetTile(X, Y, -1, 1000, 10000) then ; тайлы воды
for j=1000 to 10000
if UO.PrivateGetTile(X, Y, UO.GetZ(), j, j) then
return j
end if
next
end if
return 0
end sub
Таким образом кстати можно собирать тайлы пола в пещерах и деревья. Нужно только задать верные границы тайлов.
Re: Waittargettile, проблема с номером тайла.
Почему то оба примера ничего мне не возвращают, запускал, правда, как написано, без доработок.
Re: Waittargettile, проблема с номером тайла.
приват будет работать если у тебя инжект версии 702.11 и выше. В версии 5** команда не работает.
После запуска должен открываться текстовый лог и там будет столбик вида
тайл x y z
В первом случае скрипт ищет рядом только воду (если на мосту или под камнем спрятана - найдет)
второй ищет... а хз что он ищет
если рядом есть дерево - будет дерево, если камень - будет камень... Если задать счет от 0 до 10К то выкидывает тайлы с номером 50-100 хз почему.
После запуска должен открываться текстовый лог и там будет столбик вида
тайл x y z
В первом случае скрипт ищет рядом только воду (если на мосту или под камнем спрятана - найдет)
второй ищет... а хз что он ищет

Re: Waittargettile, проблема с номером тайла.
Понял, спасибо, буду пробовать!