sub pusk() while not uo.dead() GoToTile(5150,3660,0, False ) kopka() GoToTile(5151,3653,0, False ) kopka()
GoToTile(5151,3647,0, False ) kopka()
GoToTile(5153,3641,0, False ) kopka()
GoToTile(5154,3634,0, False ) kopka()
GoToTile(5152,3627,0, False ) kopka()
GoToTile(5151,3621,0, False ) kopka()
GoToTile(5151,3613,0, False ) kopka()
GoToTile(5153,3606,0, False ) kopka()
GoToTile(5156,3598,0, False ) kopka()
GoToTile(5159,3592,0, False ) kopka()
GoToTile(5156,3598,0, False ) kopka()
GoToTile(5153,3606,0, False ) kopka()
GoToTile(5151,3613,0, False ) kopka()
GoToTile(5151,3621,0, False ) kopka()
GoToTile(5152,3627,0, False ) kopka()
GoToTile(5154,3634,0, False ) kopka()
GoToTile(5153,3641,0, False ) kopka()
GoToTile(5151,3647,0, False ) kopka()
grabore() wend endsub #При работе должна быть "отжата" кнопка NumLock Var MoveDelay=1000 # Промежуток между шагами Var Ep=0.172 # Значение ширины угла хождения при определении направления. Если на пути встречаются сложные и широкие препятствия - увеличить. 0.172 - сбаланчированный.
Sub Perp(Dir) Var D D=Dir If Dir==1 Then D=3 EndIf If Dir==2 Then D=4 EndIf If Dir==3 Then D=-1 EndIf If Dir==4 Then D=-2 EndIf If Dir==-1 Then D=-3 EndIf If Dir==-2 Then D=-4 EndIf If Dir==-3 Then D=1 EndIf If Dir==-4 Then D=2 EndIf RETURN D EndSub
Sub MoveOnce(Dir,Del) Var D=UO.GetDir(),X=UO.GetX(),Y=UO.GetY(),T=UO.Timer() If (Dir<>0) Then If Dir==1 Then UO.Press(38) EndIf If Dir==2 Then UO.Press(33) EndIf If Dir==3 Then UO.Press(39) EndIf If Dir==4 Then UO.Press(34) EndIf If Dir==-1 Then UO.Press(40) EndIf If Dir==-2 Then UO.Press(35) EndIf If Dir==-3 Then UO.Press(37) EndIf If Dir==-4 Then UO.Press(36) EndIf While (Del>(UO.Timer()-T)*100) and (X==UO.GetX()) and (Y==UO.GetY()) and (D==UO.GetDir()) Wait(100) Wend If D<>UO.GetDir() Then MoveOnce(Dir,Del-(UO.Timer()-T)*100) EndIf EndIf EndSub
Sub GetQDir(x,y) Var J=0 If X==0 Then J=1 Else If (Y/X)<ep Then J=3 Else If (X/Y)<ep Then J=1 Else J=2 EndIf EndIf EndIf RETURN J EndSub
sub GetDir(myx,myy,ox,oy) Var I,J J=0 Var X=ox-myx Var Y=oy-myy I=GetQDir(Abs(X),Abs(Y)) If X>=0 Then If Y>=0 Then If I==1 Then J=-2 Else If I==2 Then J=-1 Else If I==3 Then J=4 EndIf EndIf EndIf Else If I==1 Then J=2 Else If I==2 Then J=3 Else If I==3 Then J=4 EndIf EndIf EndIf EndIf Else If Y>=0 Then If I==1 Then J=-2 Else If I==2 Then J=-3 Else If I==3 Then J=-4 EndIf EndIf EndIf Else If I==1 Then J=2 Else If I==2 Then J=1 Else If I==3 Then J=-4 EndIf EndIf EndIf EndIf EndIf RETURN J endsub
sub GetDistance(X,Y) return max(abs(X-uo.getx()),abs(Y-uo.gety())) endsub
sub GoToTile(OX,OY,N,S) var myx, myy, MD, J var Lx1 ,Ly1 var Lx2 ,Ly2 var Sx ,Sy var T var Des=N J=1 MD=MoveDelay*1.5 myx=uo.getx() myy=uo.gety() MoveOnce(GetDir(uo.getx(),uo.gety(),ox,oy),MD) Sx=0 Sy=0 Lx1=uo.getx()/2 Ly1=uo.gety()/2 Lx2=Lx1/2 Ly2=Ly1/2 T=UO.Timer() While ((GetDistance(ox,oy)<>N) or ((not S) and GetDistance(ox,oy)>N)) and (OX>=0) and (OY>=0) If ((UO.Timer()-T)*15>MoveDelay) Then T=UO.Timer() Lx2=Lx1 Ly2=Ly1 Lx1=myx Ly1=myy myx=uo.getx() myy=uo.gety() endIf MD=MoveDelay If ((OX-uo.getx())*(OX-uo.getx())+(OY-uo.gety())*(OY-uo.gety())>0) Then MD=MD*3/GetDistance(ox,oy) EndIf If GetDistance(OX,OY)>Des Then MoveOnce(GetDir(uo.GetX(),uo.GetY(),ox,oy),MD) Else If S Then If GetDistance(OX,OY)<Des Then If GetDistance(OX,OY)<>0 Then MoveOnce(GetDir(ox,oy,uo.GetX(),uo.GetY()),MD) Else MoveOnce(GetDir(uo.GetX(),uo.GetY(),Lx2,Ly2),MD) EndIf EndIf EndIf EndIf If (GetDistance(OX,OY)<=3) Then Wait(MoveDelay*(4-GetDistance(OX,OY))) EndIf If GetDistance(OX,OY)<>Des Then If (Lx2==uo.getx()) and (Ly2==uo.gety()) Then If (Sx<>uo.getx()) or (Sy<>uo.gety()) Then J=0 EndIf J=J+1 UO.Resend() Sx = uo.getx() Sy = uo.gety() Stun(ox,oy,J) EndIf EndIf Wend endsub
Sub Stun(X,Y,N) Var I Var myx Var myy myx = uo.getx() myy = uo.gety() For I=1 to N MoveOnce(perp(GetDir(myx,myy,x,y)),MoveDelay) Next Wait(MoveDelay) UO.Resend() If (myx==uo.getx()) and (myy==uo.gety()) Then For I=1 to N MoveOnce(-perp(GetDir(myx,myy,x,y)),MoveDelay) Next Wait(MoveDelay) UO.Resend() EndIf If (myx==uo.getx()) and (myy==uo.gety()) Then For I=1 to N MoveOnce(-GetDir(myx,myy,x,y),MoveDelay) Next Wait(MoveDelay) Stun(x,y,N) EndIf EndSub
sub NearTile(Obj,Des,S) var ox, oy, myx, myy, MD, J var Lx1 ,Ly1 var Lx2 ,Ly2 var Sx ,Sy var T UO.Click(Obj) MD=MoveDelay*1.5 ox=uo.GetX(Obj) oy=uo.GetY(Obj) J=1 myx = uo.getx() myy = uo.gety() Sx=0 Sy=0 Lx1=myx/2 Ly1=myy/2 Lx2=Lx1/2 Ly2=Ly1/2 T=UO.Timer() While not (UO.GetDistance(Obj)==Des) ox=uo.GetX(Obj) oy=uo.GetY(Obj) If ((UO.Timer()-T)*15>MoveDelay) Then T=UO.Timer() Lx2=Lx1 Ly2=Ly1 Lx1=myx Ly1=myy myx=uo.getx() myy=uo.gety() endIf MD=MoveDelay*1.5 If (UO.GetDistance(Obj)>0) Then MD=MD/UO.GetDistance(Obj) EndIf If UO.GetDistance(Obj)>Des Then MoveOnce(GetDir(uo.GetX(),uo.GetY(),uo.GetX(obj),uo.GetY(obj)),MD) Else If S Then If UO.GetDistance(Obj)<Des Then If UO.GetDistance(Obj)<>0 Then MoveOnce(-GetDir(uo.GetX(),uo.GetY(),uo.GetX(obj),uo.GetY(obj)),MD) Else MoveOnce(GetDir(uo.GetX(),uo.GetY(),Lx2,Ly2),MD) EndIf EndIf EndIf EndIf If (UO.GetDistance(Obj)<=3) Then Wait(MoveDelay*(4-UO.GetDistance(Obj))) EndIf If UO.GetDistance(Obj)<>Des Then If (Lx2==uo.getx()) and (Ly2==uo.gety()) Then If (Sx<>uo.getx()) or (Sy<>uo.gety()) Then J=0 EndIf J=J+1 UO.Resend() Sx = uo.getx() Sy = uo.gety() Stun(uo.GetX(obj),uo.GetY(obj),J) EndIf EndIf Wend UO.Exec('terminate PermResend') endsub sub abs(a) Var b If a<0 Then b=-a Else b=a endif return b endsub
sub max(A,B) Var C If A>B Then C=A Else C=B EndIf Return C EndSub
Sub hiding() var ms1="You have hidden" var ms2="You can't" repeat uo.deletejournal() UO.WarMode(0) uo.useskill('Hiding') repeat wait(100) until uo.injournal(ms1) or uo.injournal(ms2) until uo.injournal(ms1) endsub
sub grabore() if uo.waiting() then uo.canceltarget() endif VAR a,Exit VAR UnloadCont='0x401DDBF7' ; ID сундука для руды DIM Ore[5] Ore[0]=0x19B9 ; 4 and more ore Ore[1]=0x19B7 ; 1 ore Ore[2]=0x19BA ; 2 ore Ore[3]=0x19B8 ; 3 ore UO.SetReceivingContainer(UnloadCont) wait(500) For a=0 to 3 Exit=0 repeat UO.FindType(Ore[a]) if UO.GetQuantity('finditem')>0 then UO.Grab('0','finditem') wait(1500) Else Exit=1 endif until Exit==1 Next UO.UnSetReceivingContainer() endsub
Sub kopka() var kirka='0x0E85' var i,j,x,y,z var ms1="Try mining" var ms2="You put" var ms3="There is no ore" var ms4="You loosen" x=uo.getx('self') y=uo.gety('self') z=uo.getz('self') hiding() for i=-1 to 1 for j=-1 to 1 repeat uo.deletejournal() uo.waittargettile(0,x+i,y+j,z) uo.usetype(kirka) repeat wait(100) until uo.injournal(ms1) or uo.injournal(ms2) or uo.injournal(ms3) or uo.injournal(ms4) until uo.injournal(ms1) or uo.injournal(ms3) or uo.injournal("Elemental" )
if UO.injournal("Elemental") then pwavw() Pause()
Endif next next
endsub
#################защита от элемов######################
sub Pause() ; Пауза скрипта если выкопали Элема (продолжить сказав GO ) UO.DeleteJournal() REPEAT pwavw() WAIT(1000) UO.Print("!!!СКРИПТ НА ПАУЗЕ!!!!") WAIT(60000) st() UNTIL UO.InJournal('GO') UO.Print("!!!СКРИПТ ПРОДОЛЖЕН!!!!") endif end sub
sub pwavw(); звук при появлении elemental uo.playwav("C:\YokoInjection\LoopyMusic.wav") endsub
sub st() uo.msg('\w Irbiss тащи свою Ж спасать моего копалку ') WAIT(200) uo.msg('\w Anna Karenina тащи свою Ж спасать моего копалку ') end sub
26.02.2009