Yoko

All sides of Injection
It is currently 2026-01-16 14:24:08

All times are UTC+02:00




Post new topic  Reply to topic  [ 7 posts ] 
Author Message
PostPosted: 2011-03-30 10:36:58 
Offline

Joined: 2011-03-30 10:29:38
Posts: 4
Доброго дня всем!

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

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

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

Так же прошу подсказать, как сделать клик мышкой в абсолютные координаты.


Top
   
PostPosted: 2011-03-30 11:17:15 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
necroic wrote:
Оговорюсь, дело в том, что на моём шарде водичка задаётся разными номерами тайлов и узнавать все и перебирать не очень хочется...

:mrgreen:

Вообщето для этого существует утилита InsideUO которая отображает тайлы всех типов именно твоего шарда (даже если они не стандартные)

А так помоему ты изобретаешь велосипед. Попробуй вот такой скрипт для ловли:


Code:
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 ; <- ВОТ ТУТ как раз и перечислены ВСЕ возможные для ловли тайлы

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2011-03-30 11:27:46 
Offline

Joined: 2011-03-30 10:29:38
Posts: 4
Скажите, я так понимаю, что функция UO.PrivateGetTile проверяет входит ли номер тайла, указанного в координатах в диапазон заданных значений, а может ли она выдать мне номер этого тайла? Она же проверяет вхождение использую переменные номера моего тайла и диапазона?


Top
   
PostPosted: 2011-03-30 12:22:19 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
непонятно зачем конечно но будет чтото навроде этого:

Code:
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:
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


Таким образом кстати можно собирать тайлы пола в пещерах и деревья. Нужно только задать верные границы тайлов.

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2011-03-30 13:17:08 
Offline

Joined: 2011-03-30 10:29:38
Posts: 4
Почему то оба примера ничего мне не возвращают, запускал, правда, как написано, без доработок.


Top
   
PostPosted: 2011-03-30 15:10:44 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
приват будет работать если у тебя инжект версии 702.11 и выше. В версии 5** команда не работает.
После запуска должен открываться текстовый лог и там будет столбик вида
тайл x y z
В первом случае скрипт ищет рядом только воду (если на мосту или под камнем спрятана - найдет)
второй ищет... а хз что он ищет :) если рядом есть дерево - будет дерево, если камень - будет камень... Если задать счет от 0 до 10К то выкидывает тайлы с номером 50-100 хз почему.

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2011-03-30 15:38:50 
Offline

Joined: 2011-03-30 10:29:38
Posts: 4
Понял, спасибо, буду пробовать!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 7 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited