Да, знаю, что уже хрен знает какой по счёту, но этот - как всегла особый
Собственно капаем, ходим, капаем.
Code:
var step_timeout = 600 ; таймаут на шаг
sub mining()
uo.addObject( "pickaxe" )
while uo.targeting()
wait(100)
wend
var continue = "Вы положили|Вы отменили|не удалось" ; сообщения о продолжении капания этого тайла
var break = "нет обзора|в другом месте|ничего нету" ; сообщения о прекращении капания этого тайла
var i = 0, f = file( "mining.tci" ) ; файлик с координатами
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 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
Обратите внимание на ранее нигде не проскакивающую функцию хождения, носится - как зверь, но обходить, к сожалению - не умеет.
Теперь собственно о том, откуда беруться координаты - нет, они беруться не из воздуха
Нужная информация - лежит в файле mining.tci, формат файла:
Code:
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.
Такой формат файла хорош для маленьких, кривых пещер - например такой, как в НТ на Антаресе.
Для больших масшатабов - можно написать функцию разметки.
PS: Скрипт писался и тестировался в НТ на Антаресе )
PPS: Правкой пары букв из ходилки можно сделать догонялку, которая работает по тому же принципу, что и многие другие.