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