Выглядит убого, но работает в поле неплохо - в лесу не проверял. Я так догонял элемов в вип шахте...
запускать: walkn(0,0.'серийник того нпс')
Code: sub GoW() VAR walkwait=300 VAR x,y,dir=6 VAR key=36 ; Home key x=UO.GetX() y=UO.GetY() while UO.GetDir()<>dir UO.Press(key) wait(walkwait) If UO.GetDir()<>dir Then CheckLag() Endif wend UO.Press(key)
wait(walkwait) If x==UO.GetX() AND y==UO.GetY() Then CheckLag() Endif If UO.GetX()+1==x Then return -1 Else return 1 Endif end sub
sub GoN() VAR walkwait=300 VAR x,y,dir=0 VAR key=33 ; PgUp x=UO.GetX() y=UO.GetY() while UO.GetDir()<>dir UO.Press(key) wait(walkwait) If UO.GetDir()<>dir Then CheckLag() Endif wend UO.Press(key)
wait(walkwait) If x==UO.GetX() AND y==UO.GetY() Then CheckLag() Endif If UO.GetY()+1==y Then return -1 Else return 1 Endif end sub
sub GoE() VAR walkwait=300 VAR x,y,dir=2 VAR key=34 ; PgDown x=UO.GetX() y=UO.GetY() while UO.GetDir()<>dir UO.Press(key) wait(walkwait) If UO.GetDir()<>dir Then CheckLag() Endif wend UO.Press(key)
wait(walkwait) If x==UO.GetX() AND y==UO.GetY() Then CheckLag() Endif If UO.GetX()-1==x Then return -1 Else return 1 Endif end sub
sub GoS() VAR walkwait=300 VAR x,y,dir=4 VAR key=35 ; End x=UO.GetX() y=UO.GetY() while UO.GetDir()<>dir UO.Press(key) wait(walkwait) If UO.GetDir()<>dir Then CheckLag() Endif wend UO.Press(key)
wait(walkwait) If x==UO.GetX() AND y==UO.GetY() Then CheckLag() Endif If UO.GetY()-1==y Then return -1 Else return 1 Endif end sub
sub GoWN() VAR walkwait=300 VAR x,y,dir=7 VAR key=38 ; UpArrow x=UO.GetX() y=UO.GetY()
If UO.GetDir()<>dir Then UO.Press(key) wait(walkwait) If UO.GetDir()<>dir Then CheckLag() Endif Endif
If UO.GetDir()==dir Then UO.Press(key) wait(walkwait) If x==UO.GetX() AND y==UO.GetY() Then CheckLag() Endif If UO.GetDir()==dir Then return -1 Else return UO.GetDir() Endif Else return UO.GetDir() Endif end sub
sub GoNE() VAR walkwait=300 VAR x,y,dir=1 VAR key=39 ; RightArrow x=UO.GetX() y=UO.GetY()
If UO.GetDir()<>dir Then UO.Press(key) wait(walkwait) If UO.GetDir()<>dir Then CheckLag() Endif Endif
If UO.GetDir()==dir Then UO.Press(key) wait(walkwait) If x==UO.GetX() AND y==UO.GetY() Then CheckLag() Endif If UO.GetDir()==dir Then return -1 Else return UO.GetDir() Endif Else return UO.GetDir() Endif end sub
sub GoSE() VAR walkwait=300 VAR x,y,dir=3 VAR key=40 ; DownArrow x=UO.GetX() y=UO.GetY()
If UO.GetDir()<>dir Then UO.Press(key) wait(walkwait) If UO.GetDir()<>dir Then CheckLag() Endif Endif
If UO.GetDir()==dir Then UO.Press(key) wait(walkwait) If x==UO.GetX() AND y==UO.GetY() Then CheckLag() Endif If UO.GetDir()==dir Then return -1 Else return UO.GetDir() Endif Else return UO.GetDir() Endif end sub
sub GoSW() VAR walkwait=300 VAR x,y,dir=5 VAR key=37 ; LeftArrow x=UO.GetX() y=UO.GetY()
If UO.GetDir()<>dir Then UO.Press(key) wait(walkwait) If UO.GetDir()<>dir Then CheckLag() Endif Endif
If UO.GetDir()==dir Then UO.Press(key) wait(walkwait) If x==UO.GetX() AND y==UO.GetY() Then CheckLag() Endif If UO.GetDir()==dir Then return -1 Else return UO.GetDir() Endif Else return UO.GetDir() Endif end sub
#============================================================== # WalkN(X,Y,Serial) - char is walking by dX and dY step # sub using Home, End, PgUp, PgDown keys # d'not rebind this key from default action! # walkwait - delay after keypress #-------------------------------------------------------------- sub WalkN(x,y,Target) VAR i VAR dx,dy,Exit=0 While Exit<>1 If Target<>"" Then dx=UO.GetX(Target)-UO.GetX() dy=UO.GetY(Target)-UO.GetY() ; UO.Print("Target locked!") If UO.GetDistance(Target)<2 Then Exit=1 Endif Else dx=x-UO.GetX() dy=y-UO.GetY() If dx==0 AND dy==0 Then Exit=1 Endif
Endif If dx<>0 AND dy<>0 Then If dx>0 AND dy>0 Then GoSE() Endif
If dx>0 AND dy<0 Then GoNE() Endif
If dx<0 AND dy>0 Then GoSW() Endif
If dx<0 AND dy<0 Then GoWN() Endif
Endif If dx<>0 AND dy==0 Then If dx>0 Then GoE() Endif If dx<0 Then GoW() Endif Endif
If dx==0 AND dy<>0 Then If dy>0 Then GoS() Endif If dy<0 Then GoN() Endif Endif Wend end sub
#============================================================== # CheckLag() - click on backpack and awaiting "backpack" # message in journal. # # Journal has been deleted!!! #-------------------------------------------------------------- sub CheckLag() UO.DeleteJournal() UO.Click('backpack')
repeat wait(500) until UO.InJournal('backpack') end sub
|