Waittargettile, проблема с номером тайла.

Ask for help

Moderators: Murderator+, Murderator

Post Reply
necroic
Posts: 4
Joined: 2011-03-30 10:29:38

Waittargettile, проблема с номером тайла.

Post by necroic »

Доброго дня всем!

Проблема вот в чём, на шарде для команды uo.waittargettile необходимо жёстко указывать номер тайла. Например в скрипте на ловлю рыбы. Если указать -1 или 0 или all , просто появляется сообщение "Вы не можете рыбачить здесь". Что можно придумать? У меня есть три варианта, хотел бы узнать, реализуемо ли такое:

1) Делать перебор по известным номерам тайлов из команды infotile
2) Скрипт берёт номер тайла из команды, например, uo.infotile(x abs, y abs) чтобы такая команда возвращало номер тайла указанных координат
3) некий аналог значений -1 или all, чтобы номер тайла для команды был вообще не обязателен.

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

Так же прошу подсказать, как сделать клик мышкой в абсолютные координаты.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Waittargettile, проблема с номером тайла.

Post by Mirage »

necroic wrote:Оговорюсь, дело в том, что на моём шарде водичка задаётся разными номерами тайлов и узнавать все и перебирать не очень хочется...

:mrgreen:

Вообщето для этого существует утилита 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 ; <- ВОТ ТУТ как раз и перечислены ВСЕ возможные для ловли тайлы
necroic
Posts: 4
Joined: 2011-03-30 10:29:38

Re: Waittargettile, проблема с номером тайла.

Post by necroic »

Скажите, я так понимаю, что функция UO.PrivateGetTile проверяет входит ли номер тайла, указанного в координатах в диапазон заданных значений, а может ли она выдать мне номер этого тайла? Она же проверяет вхождение использую переменные номера моего тайла и диапазона?
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Waittargettile, проблема с номером тайла.

Post by Mirage »

непонятно зачем конечно но будет чтото навроде этого:

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


Таким образом кстати можно собирать тайлы пола в пещерах и деревья. Нужно только задать верные границы тайлов.
necroic
Posts: 4
Joined: 2011-03-30 10:29:38

Re: Waittargettile, проблема с номером тайла.

Post by necroic »

Почему то оба примера ничего мне не возвращают, запускал, правда, как написано, без доработок.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Waittargettile, проблема с номером тайла.

Post by Mirage »

приват будет работать если у тебя инжект версии 702.11 и выше. В версии 5** команда не работает.
После запуска должен открываться текстовый лог и там будет столбик вида
тайл x y z
В первом случае скрипт ищет рядом только воду (если на мосту или под камнем спрятана - найдет)
второй ищет... а хз что он ищет :) если рядом есть дерево - будет дерево, если камень - будет камень... Если задать счет от 0 до 10К то выкидывает тайлы с номером 50-100 хз почему.
necroic
Posts: 4
Joined: 2011-03-30 10:29:38

Re: Waittargettile, проблема с номером тайла.

Post by necroic »

Понял, спасибо, буду пробовать!
Post Reply