Yoko

All sides of Injection
It is currently 2018-07-22 16:14:29

All times are UTC+02:00




Post new topic  Reply to topic  [ 1 post ] 
Author Message
PostPosted: 2012-10-25 13:50:57 
Offline

Joined: 2012-10-25 13:11:08
Posts: 1
Доброго времени суток. Предоставляю Вам вполне рабочий скрипт на мининг от уважаемого Destruction, который на других бы шардах работал, но, к сожалению, не у меня:
Code:
;Нужная информация о координатах - лежит в файле mining.txt:
;count
;TYPE T X Y Z
;TYPE T X Y Z
;count - количество строк вида "TYPE T X Y Z".
;TYPE - тип действия, 0 - капать в тайле, 1 - подойти к тайлу, 2 - подойти а потом капать.
;T, X, Y, Z - соответсвенно информация о тайле, см. infotile.
var step_timeout = 600 ; таймаут на шаг
sub mining()
   uo.addObject( "pickaxe" )
   while uo.targeting()
      wait(100)
   wend
   var continue = "dig some|loosen some" ; сообщения о продолжении капания этого тайла
   var break = "is too far|it seems|no metal" ; сообщения о прекращении капания этого тайла
   var i = 0, f = file( "C:\uo_zuluhotel\Injection\Scripts\minoc.txt" ) ; файлик с координатами
   f.open()
   var cnt = f.readNumber()
   DIM type[ val( str( cnt ) ) ]
   DIM tile_t[ val( str( cnt ) ) ]
   DIM tile_x[ val( str( cnt ) ) ]
   DIM tile_y[ val( str( cnt ) ) ]
   DIM tile_z[ val( str( cnt ) ) ]
   while not f.eof()
      type[ i ] = f.readNumber()
      tile_t[ i ] = f.readNumber()
      tile_x[ i ] = f.readNumber()
      tile_y[ i ] = f.readNumber()
      tile_z[ i ] = f.readNumber()
      i = i + 1
   wend
   f.close()
   for i = 0 to cnt -1
      if type[i] == 2 || type[i] == 1 then
         desWalker( tile_x[i], tile_y[i] )
      endif
      if type[i] == 2 || type[i] == 0 then
         repeat
            deljournal( break + "|" + continue )
            uo.waittargettile( str( tile_t[ i ] ), str( tile_x[ i ] ), str( tile_y[ i ] ), str( tile_z[ i ] ) )
            uo.useobject( "pickaxe" )
            repeat
               wait( 100 )
            until uo.injournal( break + "|" + continue )
         until uo.injournal( break )
      endif
   next
endsub
Sub deljournal(msg)
      while uo.injournal(msg)
      uo.setjournalline(uo.injournal(msg)-1,"")
   wend
endsub
Sub desWalker( x, y )
   var dir, key, mx, my, timer
   if x== uo.getX() && y == uo.getY() then
      return false
   endif
   repeat
      mx = uo.getX()
      my = uo.getY()
      key = getWalkDir( x-mx, y-my, 0, 0 )
      dir = getWalkDir( x-mx, y-my, 1, 0 )
      if Not uo.getDir() == dir then
         uo.press( key, 2 )
      else
         uo.press( key )
      endif
      timer = 0
      while uo.getX() == mx && uo.getY() == my && step_timeout / 100 > timer
         wait( 100 )
         timer = timer + 1
      wend
   until uo.getX() == x && y == uo.getY()
endsub
Sub getWalkDir(x, y, type, walk)
   DIM keys[8]
   if type == 0 then
      if walk == 0 then
         keys[0] = 35; End
         keys[1] = 40; Down
         keys[2] = 34; Page Down
         keys[3] = 39; Right
         keys[4] = 33; Page Up
         keys[5] = 38; Up
         keys[6] = 36; Home
         keys[7] = 37; Left
      else
         keys[0] = 33; Page Up
         keys[1] = 38; Up
         keys[2] = 36; Home
         keys[3] = 37; Left
         keys[4] = 35; End
         keys[5] = 40; Down
         keys[6] = 34; Page Down
         keys[7] = 39; Right
      endif
   else
      if walk == 0 then
         keys[0] = 4; End
         keys[1] = 3; Down
         keys[2] = 2; Page Down
         keys[3] = 1; Right
         keys[4] = 0; Page Up
         keys[5] = 7; Up
         keys[6] = 6; Home
         keys[7] = 5; Left
      else
         keys[0] = 0; Page Up
         keys[1] = 7; Up
         keys[2] = 6; Home
         keys[3] = 5; Left
         keys[4] = 4; End
         keys[5] = 3; Down
         keys[6] = 2; Page Down
         keys[7] = 1; Right
      endif
   endif
   if x==0 && y > 0 then
      return keys[0]
   endif
   if x==0 && y < 0 then
      return keys[4]
   endif
   if x > 0 && y == 0 then
      return keys[2]
   endif
   if x < 0 && y == 0 then
      return keys[6]
   endif
   if x > 0 && y > 0 then
      return keys[1]
   endif
   if x > 0 && y < 0 then
      return keys[3]
   endif
   if x < 0 && y > 0 then
      return keys[7]
   endif
   if x < 0 && y < 0 then
      return keys[5]
   endif
endsub


Проблема в том, что скрипт не обрабатывает переменные:
Code:
var continue = "dig some|loosen some" ; сообщения о продолжении капания этого тайла
var break = "is too far|it seems|no metal" ; сообщения о прекращении капания этого тайла

Поскольку при копке руды, сервер посылает 3 сообщения:
Code:
1. You start mine. ; сообщение которое нам не интересно.
2. There is no metal to mine. ;сообщение которое нам нужно обработать скриптом, для нормальной работы...
3. You stop mine. ;сообщение которое скрипт может обработать.


Подскажите, помогите пожалуйста, как мне скриптом обрабатывать именно второе сообщение, а не последнее.

Еще хотелось бы узнать, как тип действия (0 - капать в тайле, 1 - подойти к тайлу, 2 - подойти а потом капать.) указать не в файле с координатами, а отдельно в самом скрипте?


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

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