Yoko
http://forum.yoko.com.ua/

mining (Прошу помощи)
http://forum.yoko.com.ua/viewtopic.php?f=20&t=17083
Page 1 of 1

Author:  antti [ 2012-10-25 13:50:57 ]
Post subject:  mining (Прошу помощи)

Доброго времени суток. Предоставляю Вам вполне рабочий скрипт на мининг от уважаемого 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 - подойти а потом капать.) указать не в файле с координатами, а отдельно в самом скрипте?

Page 1 of 1 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/