Code: var rb = '0x75F983FC';RunBuk Var ore = '0x19B9' var ingtype = '0x1BF2' var kirka = '0x0E85' var shit = '0x1B76'
var nyLLIka = '0x13FE'
Var elem = '0x000E' VAR MaxTime = 120 ; измеряется в 1/10 сек. var refresh = '0x0F0B' var stamprotect = 20 var forge = '0x0FB1' Var sera = '0x0F8C' Var gold = '0x0EED' var chekhp = 50 var gh = '0x0F0C' var sunduk = '0x75FAA6D6';самый левый. var sunduk1 = '0x75FAA6D1' var havka = '0x171F' var gstr = '0x0F09' var bandage = '0x0E21' var shagx = 3 var shagy = 3 var nognizi = '0x0F9E'
VAR ms1 = "Вы не видите цели" VAR ms2 = "Слишком далеко" VAR ms3 = "Рудная жила в этом месте" VAR ms4 = "Сначала вы должны" VAR ms5 = "Вы должны подождать" VAR ms6 = "Цель находится" VAR ms7 = "Вы прекратили копать" Var attackms = "attackin"
sub gostart() gohome() start() endsub
sub stamdetekt() while true if uo.injournal("fatigued to move") then uo.sayu(".drinkref") havka() uo.deletejournal() wait(2000) else wait(5000) endif wend endsub
sub start()
uo.exec('exec reconnector') while true vihod()
repeat uo.useobject(rb) wait(500) uo.lclick(63,158) ;Destard wait(12000) until uo.getx() == 1248 and uo.gety() == 2653 wait(500) go() wait(500) gohome() wait(500) vihod() wait(500)
;repeat ;uo.useobject(rb) ;wait(500) ;uo.lclick(64,172) ;Trin_3 ;wait(12000) ;until uo.getx() == 1417 and uo.gety() == 2888 ;wait(500) ;go() ;wait(500) ;gohome() ;wait(500) ;vihod() ;wait(500)
repeat uo.useobject(rb) wait(500) uo.lclick(62,82) wait(12000) until uo.getx() == 769 and uo.gety() == 1679 wait(500) go() wait(500) gohome() wait(500) vihod() wait(500)
repeat uo.useobject(rb) wait(500) uo.lclick(62,98) wait(12000) until uo.getx() == 2437 and uo.gety() == 901 wait(500) go() wait(500) gohome() wait(500) vihod() wait(500)
repeat uo.useobject(rb) wait(500) uo.lclick(63,111) wait(12000) until uo.getx() == 2362 and uo.gety() == 823 wait(500) go() wait(500) gohome() wait(500) vihod() wait(500)
;uo.useobject(rb) ;wait(500) ;repeat ;uo.lclick(64,127) ;wait(12000) ;until uo.getx() == 4020 and uo.gety() == 434 ;wait(500) ;go() ;wait(500) ;gohome() ;wait(500) ;vihod() ;wait(500)
repeat uo.useobject(rb) wait(500) uo.lclick(62,143) wait(12000) until uo.getx() == 4009 and uo.gety() == 309 wait(500) go() wait(500) gohome() wait(500) vihod() wait(500)
repeat uo.useobject(rb) wait(500) uo.lclick(63,160) wait(12000) until uo.getx() == 991 and uo.gety() == 1586 wait(500) go() wait(500) gohome() wait(500) vihod() wait(500)
wend endsub
sub kopka() var k, x, y , t for y=-2 to 2 for x=-2 to 2 UO.FindType(elem, -1, 1) if uo.FindCount() > 0 or uo.gethp() < uo.getmaxhp() then if uo.gethp() > uo.getmaxhp() - 10 then armslor() endif UO.FindType(elem, -1, 1) Uo.Equipt('Rhand', nyLLIka) Uo.Equipt('Lhand', shit) wait(500) uo.warmode(true) uo.attack(uo.getserial('finditem')) Repeat UO.FindType(elem, -1, 1) if uo.findcount()> 1 then chekhp = 80 uo.print("Boremsya s "+Str(uo.findcount())+" elemami ! banki s 80") else uo.print("Boremsya s "+Str(uo.findcount())+" elemom! banki s 50") chekhp = 50 endIf if uo.gethp() <= chekhp then uo.usetype(gh) endif Uo.Equipt('Rhand', nyLLIka) Uo.Equipt('Lhand', shit) wait(300) Uo.Press(120) ;wait(3000)
wait(4000) Uo.UseType('0x0F09') UO.FindType(elem, -1, 1) Until (UO.GetHP() == UO.GetMaxHp()) and (UO.FindCount() == 0 ) UO.warmode(false) UO.Exec('exec loot') wait(2000) ;UO.Exec('exec go') else if uo.weight >=2000 then x = 2 y = 2 else
k = 0 UO.CancelTarget() havka() UO.DeleteJournal() t = UO.Timer() k = k + 1 wait(300) ;UO.print(x +" "+y) UO.WaitTargetTile( '1339', STR( UO.GetX("self") + x ), STR( UO.GetY("self") + y ), 0) UO.UseType( Kirka ) UO.print ("Kopaem v: "+ STR( UO.GetX("self") + x )+" "+ STR( UO.GetY("self") + y ))
repeat wait(500) until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR ((t + MaxTime) < UO.Timer()) ;OR UO.InJournal(ms4) endif
next next Uo.Print(k)
endif
endsub
sub checkstam()
havka()
if uo.stamina < stamprotect then uo.findtype(refresh,-1,'backpack') if uo.findcount() then uo.usetype(refresh) wait(1000) else uo.print("Nety Refreshey blya!") repeat wait(500) until uo.stamina >= stamprotect endif else endif uo.exec('set finddistance 2') UO.FindType(forge,-1,'ground') if uo.findcount() then ;plavka() else endif loot() endsub
sub gohome() repeat uo.useobject(rb) wait(500) uo.lclick(213,83) wait(12000) until uo.getx() == 364 and uo.gety() == 1482 and uo.getZ() == 2 checklag() walker(364,1481,6) checklag() uo.opendoor() walker(364,1475,9) wait(500) walker(362,1475,9) uo.print("Priehali ura!") plavka() armslor() rasklad() endsub
sub blud() uo.waittargettile('2881', '5176', '3266', '46') uo.usetype('0x0E22') endsub
sub vihod() var i = 0 blud() dropblya() uo.useobject(sunduk) uo.useobject(sunduk1) uo.findtype(gstr,-1,'backpack') uo.moveitem('finditem',0,sunduk1) wait(300) uo.findtype(refresh,-1,'backpack') uo.moveitem('finditem',0,sunduk1) wait(300) uo.findtype(gh,-1,'backpack') uo.moveitem('finditem',0,sunduk1) wait(300) uo.findtype(havka,-1,'backpack') uo.moveitem('finditem',0,sunduk1) wait(300) uo.findtype(gold,-1,'backpack') uo.moveitem('finditem',0,sunduk1) wait(300) uo.findtype('0x0F9E');noznizi while uo.findcount() > 0 uo.findtype(bandage) uo.moveitem('finditem',0,sunduk) wait(300) wend uo.findtype(bandage) while uo.findcount() > 0 uo.findtype(bandage) uo.moveitem('finditem',0,sunduk1) wait(300) wend uo.findtype('0x0F0E');emptybotle while uo.findcount() > 0 uo.findtype('0x0F0E') uo.moveitem('finditem',0,sunduk1) wait(300) wend
uo.findtype(nyLLIka) while uo.findcount() > 0 uo.findtype(kirka) uo.moveitem('finditem',0,sunduk) wait(300) wend
uo.findtype(kirka) while uo.findcount() > 0 uo.findtype(kirka) uo.moveitem('finditem',0,sunduk) wait(300) wend uo.findtype(shit) while uo.findcount() > 0 uo.findtype(shit) uo.moveitem('finditem',0,sunduk) wait(300) wend armslor()
## berem hlam
while i < 5 uo.findtype(kirka,-1,sunduk) uo.grab(1,'finditem') i = i + 1 wait(300) wend i = 0 while i < 3 uo.findtype(shit,-1,sunduk) uo.grab(1,'finditem') i = i + 1 wait(300) wend i = 0 uo.findtype(nognizi,'0x005F',sunduk) uo.grab(25,'finditem') wait(300) uo.findtype(gh,-1,sunduk1) uo.grab(25,'finditem') wait(300) uo.findtype(gh,-1,sunduk1) uo.grab(1,'finditem') wait(300) uo.findtype(refresh,-1,sunduk1) uo.grab(15,'finditem') wait(300) uo.findtype(gstr,-1,sunduk1) uo.grab(1,'finditem') wait(300) uo.findtype(bandage,-1,sunduk1) uo.grab(150,'finditem') wait(300) checklag() walker(5174,3270,0) wait(1000) uo.opendoor() wait(300) walker(5174,3273,0) banan() endsub
sub banan() uo.waittargetobject('0x756904BB') uo.usetype('0x0F9E') repeat wait(50) until UO.injournal("собрали") uo.usetype(havka) wait(1000) armslor() endsub
sub rasklad() uo.exec('set finddistance 3') var ix, iy, iid, icolor = 1, ingtype='0x1BF2' uo.findtype(ingtype,-1,'backpack') while uo.findcount() > 0 iid = uo.getserial('finditem') ;UO.Print(iid) icolor = uo.getcolor(iid) ;UO.Print(icolor) uo.findtype(ingtype,icolor,'ground') if uo.findcount() >0 then ix = uo.getx('finditem') iy = uo.gety('finditem') ;uo.print("Found ing "+ uo.getserial('finditem')+" in X="+Str(ix)+" and Y="+Str(iy)) uo.moveitem(iid,'all',uo.getserial('finditem'),ix,iy,46) else uo.drophere(iid) endif wait(500) uo.findtype(ingtype,-1,'backpack') wend endsub
sub dropblya() armslor() uo.findtype(ingtype,-1,'backpack') while uo.findcount() > 0 uo.findtype(ingtype,-1,'backpack') uo.drop(0,0,0,0,uo.getserial('finditem')) wait(300) wend uo.findtype(sera,-1,'backpack') while uo.findcount() > 0 uo.findtype(sera,-1,'backpack') uo.drophere(uo.getserial('finditem')) wait(300) wend endsub
Sub plavka() Uo.FindType (ore ,'-1','backpack') While UO.FindCount() Uo.FindType (ore ,'-1','backpack') Uo.UseType(ore) wait(4000) wend EndSub
sub go() while uo.weight < 2000 if uo.weight < 1999 then kopka() checkstam() walker(UO.GetX()+shagx, UO.GetY() - shagy, 1) endif if uo.weight < 1999 then
kopka() checkstam() walker(UO.GetX()+shagx, UO.GetY() - shagy, 1) endif if uo.weight < 1999 then
kopka() checkstam() walker(UO.GetX()+shagx, UO.GetY() + shagy, 1) endif if uo.weight < 1999 then
kopka() checkstam() walker(UO.GetX()+shagx, UO.GetY() + shagy, 1) endif if uo.weight < 1999 then
kopka() checkstam() walker(UO.GetX()-shagx, UO.GetY() + shagy, 1) endif if uo.weight < 1999 then
kopka() checkstam() walker(UO.GetX()-shagx, UO.GetY() + shagy, 1) endif if uo.weight < 1999 then
kopka() checkstam() walker(UO.GetX()-shagx, UO.GetY() - shagy, 1) endif if uo.weight < 1999 then
kopka() checkstam() walker(UO.GetX()-shagx, UO.GetY() - shagy, 1) endif if uo.weight < 1999 then
kopka() endif wend
endsub
Sub Loot() uo.exec('set finddistance 2') UO.FindType( '0x0EED', -1, 'ground' ) If UO.FindCount() > 0 Then UO.MoveItem( 'finditem',0, 'backpack' ) wait(500) Endif UO.FindType( '0x19B9', -1, 'ground' ) If UO.FindCount() > 0 Then UO.MoveItem( 'finditem',0, 'backpack' ) wait(500) Endif UO.FindType( '0x0F09', -1, 'ground' ) If UO.FindCount() > 0 Then UO.MoveItem( 'finditem',0, 'backpack' ) wait(500) Endif EndSub
var MaxTraceDistance=10 var Speed=1 var StepTimeOut=1000 var Prec = 0 Sub Walker(GoX,GoY,PrecControl)
Prec = PrecControl UO.Print("Prec = "+ Str(prec)) UO.SetGlobal("Logging","0") UO.SetGlobal("BlindWalk","0") var LastDir UO.SetGlobal("GlobalGoX",str(GoX)) UO.SetGlobal("GlobalGoY",str(GoY)) while not IsEnd(GoX,GoY) LogInfo('Just walking') LastDir=GoUntilHit(GoX,GoY) if not IsEnd(GoX,GoY) then LogInfo('Tracing') FullAroundTrace(LastDir,GoX,GoY) end if wend end sub
Sub FullAroundTrace(StartDir,GoX,GoY) var LineX=UO.GetX() var LineY=UO.GetY() var CurDir=StartDir var Direction=CountDirection(GoX,GoY,CurDir) var StartX,StartY var MovesDone=0 repeat StartX=UO.GetX() StartY=UO.GetY() CurDir=Tracer(CurDir,Direction) if (CurDir==GetDir(GoX,GoY)) then return endif if MovesDone>0 and PrevMoveCross(GetDirToDir(UO.GetDir()),LineX,LineY,GoX,GoY,StartX,StartY) then return end if MovesDone=MovesDone+1 CurDir=AddToDir(CurDir,-Direction) until MovesDone>MaxTraceDistance end sub
Sub CountDirection(GoX,GoY,StartDir) var GoDir=GetDir(GoX,GoY) var MyX=UO.GetX() var MyY=UO.GetY() if GoDir<StartDir then return -1 end if if GoDir>StartDir then return 1 end if if Abs(MyX-GoX)>Abs(MyY-GoY) then if (GoDir==3 and GoY>MyY) OR (GoDir==7 and GoY<MyY) then return -1 else return 1 end if else if (GoDir==1 and GoX<MyX) or (GoDir==5 and GoX>MyX) then return -1 else return 1 end if end if end sub
Sub PrevMoveCross(Dir,x1,y1,x2,y2,StartX,StartY) var x3,y3,x4,y4 x3=StartX y3=StartY x4=StartX+(XFromDir(Dir)-StartX)*Speed y4=StartY+(YFromDir(Dir)-StartY)*Speed return LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4) end sub
Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4) if x1==x3 and y1==y3 then return false end if var z1=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1) var z2=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1) if z1*z2>0 then return false else LogInfo('Vector info:') LogInfo('x1= '+str(x1)) LogInfo('y1= '+str(y1)) LogInfo('x2= '+str(x2)) LogInfo('y2= '+str(y2)) LogInfo('x3= '+str(x3)) LogInfo('y3= '+str(y3)) LogInfo('x4= '+str(x4)) LogInfo('y4= '+str(y4)) return true end if end sub
Sub IsDiap(X,X0,X1) if X<=X0+Prec and X>=X1-Prec OR X>=X0-Prec and X<=X1+Prec then return true end if return false end sub
Sub GoUntilHit(GoX,GoY) var LastDir LastDir=GetDir(GoX,GoY) var CouldMove repeat LastDir=GetDir(GoX,GoY) if LastDir<>0 and not IsEnd(GoX,GoY) then CouldMove=TryDir(LastDir) end if until LastDir==0 or IsEnd(GoX,GoY) or not CouldMove return LastDir end sub
Sub IsEnd(GoX,GoY) if Abs(UO.GetX()-GoX)<=Prec and Abs(UO.GetY()-GoY)<=Prec then LogInfo('END FOUND') return true else return false end if end sub
Sub GetDir(GoX,GoY) var MyX=UO.GetX() var MyY=UO.GetY() var DiffX=Abs(UO.GetX()-GoX) var DiffY=Abs(UO.GetY()-GoY) var GoDir=0 if (DiffX/(DiffY+0.1))>=2 then if (MyX>GoX) then GoDir=7 else GoDir=3 end if else
if (DiffY/(DiffX+0.1))>=2 then if (MyY>GoY) then GoDir=5 else GoDir=1 end if else if (MyX>GoX) and (MyY>GoY) then GoDir=6 else if (MyX>GoX) and (MyY<GoY) then GoDir=8 else if (MyX<GoX) and (MyY>GoY) then GoDir=4 else if (MyX<GoX) and (MyY<GoY) then GoDir=2 end if end if end if end if end if end if return GoDir end sub
Sub Tracer(StartDir,Direction) var CurDir=StartDir var Result repeat Result=TryDir(CurDir) if not Result then CurDir=AddToDir(CurDir,Direction) end if until Result return Result end sub
Sub AddToDir(Dir,Cnt) var NewDir=Dir NewDir=NewDir+Cnt while NewDir>8 NewDir=NewDir-8 wend while NewDir<1 NewDir=NewDir+8 wend return NewDir end sub
Sub TryDir(Dir) var BegX=UO.GetX() # Ia?aeuiia O var BegY=UO.GetY() # Ia?aeuiia Y var Counter=0 var GoX=BegX var GoY=BegY GoX=XFromDir(Dir) GoY=YFromDir(Dir) if not IsPass(UO.asmMapGetTile(GoX,GoY,0)) then LogInfo(str(UO.asmMapGetTile(GoX,GoY,0))+' is not passable') return false end if return TurnAndGoDir(Dir) end sub
Sub XFromDir(Dir) if Dir==2 OR Dir==3 Or Dir==4 then return (UO.GetX()+1) end if if Dir==6 OR Dir==7 Or Dir==8 then return (UO.GetX()-1) end if return (UO.GetX()) end sub
Sub YFromDir(Dir) if Dir==8 OR Dir==1 Or Dir==2 then return (UO.GetY()+1) end if if Dir==4 OR Dir==5 Or Dir==6 then return (UO.GetY()-1) end if return (UO.GetY()) end sub
Sub TurnAndGoDir(Dir) var StartDir=GetDirToDir(UO.GetDir()) var StartX=UO.GetX() var StartY=UO.GetY() var EndDir var Counter=0 GoDir(Dir) repeat EndDir=GetDirToDir(UO.GetDir()) wait(100) Counter=Counter+1 until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=8 if Counter>=8 then return 0 end if if StartY<>UO.GetY() or StartX<>UO.GetX() then return Dir else GoDir(Dir) repeat wait(100) Counter=Counter+1 until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/100 if Counter>=StepTimeOut/100 then LogInfo('Step timeout reached') return 0 else return Dir end if end if end sub
sub Test2() Tracer(7,1) end sub
Sub GetDirToDir(GotDir) var ChangedDir=-GotDir ChangedDir=AddToDir(ChangedDir,5) return ChangedDir end sub
Sub DirToInj(Dir) var OutDir if Dir==1 then OutDir=1 end if if Dir==2 then OutDir=2 end if if Dir==3 then OutDir=3 end if if Dir==4 then OutDir=6 end if if Dir==5 then OutDir=9 end if if Dir==6 then OutDir=8 end if if Dir==7 then OutDir=7 end if if Dir==8 then OutDir=4 end if return OutDir end sub
Sub GoDir(Dir) dim Dirs[9] Dirs[1]=35 Dirs[2]=40 Dirs[3]=34 Dirs[4]=39 Dirs[5]=33 Dirs[6]=38 Dirs[7]=36 Dirs[8]=37
var DistanceX=Abs(UO.GetX()-val(UO.GetGlobal("GlobalGoX"))) var DistanceY=Abs(UO.GetY()-val(UO.GetGlobal("GlobalGoY"))) var GoDistance if (DistanceX-Prec)<Speed then GoDistance=DistanceX-Prec else if (DistanceY-Prec)<Speed then GoDistance=DistanceY-Prec else GoDistance=Speed endif endif
UO.Press(Dirs[Dir],GoDistance) endsub
Sub IsPass(ID) if UO.GetGlobal("BlindWalk") then return true endif dim Types[60] Types[0]=4 Types[1]=3 Types[2]=5 Types[3]=6 Types[4]=203 Types[5]=197 Types[6]=212 Types[7]=242 Types[8]=241 Types[9]=196 Types[10]=198 Types[11]=199 Types[12]=1713 Types[13]=1724 Types[14]=243 Types[15]=240 Types[16]=219 Types[17]=209 Types[18]=214 Types[19]=57 Types[20]=24 Types[21]=52 Types[22]=22 Types[23]=56 Types[24]=23 Types[25]=25 Types[26]=58 Types[27]=53 Types[28]=61 Types[29]=59 Types[30]=580 Types[31]=585 Types[32]=581 Types[33]=582 Types[34]=583 Types[35]=584 Types[36]=596 Types[37]=152 Types[38]=81 Types[39]=93 Types[40]=95 Types[41]=83 Types[42]=142 Types[43]=503 Types[44]=141 Types[45]=143 Types[46]=500 Types[47]=1088 Types[48]=1089 Types[49]=1086 Types[50]=155 Types[51]=501 Types[52]=98 Types[53]=90 Types[54]=502 Types[55]=1087 Types[56]=598 Types[57]=582 Types[58]=200 Types[59]=216 for var i=0 to 59 if Types[i]==ID then return true end if next return false end sub
Sub LogInfo(Line) if not UO.GetGlobal("Logging")=="0" then UO.TextOpen() UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+str(Line)); end if end sub
Sub Abs(X) if X>0 then return X else return (-X) end if end sub
endsub
sub CheckLag() if uo.Waiting()>0 then uo.Exec('canceltarget') end if uo.DeleteJournal() uo.Click('backpack') repeat wait(50) until uo.InJournal('backpack') end sub
sub Reconnector() var ReconnectTime, RFlag ReconnectTime = '0' RFlag = 1 Repeat if uo.injournal("fatigued to move") then uo.sayu(".drinkref") havka() uo.deletejournal() wait(1000) else endif While (UO.ObjAtLayer('Bpack') == '') if RFlag Then ReconnectTime = MakeTime() RFlag = 0 endif Wait(20000) # WorldSave Protection UO.Say('') Wait(3000) UO.Say('') Wait(3000) UO.Say('') Wait(3000) UO.LDblClick(357,164) UO.LClick(616,459) Wait(3000) WEnd Wait(3000) if (RFlag == 0) and (ReconnectTime <> '0') Then ;UO.Exec('terminate all') ;UO.Exec('exec fishing') UO.TextOpen() UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime) RFlag = 1 ReconnectTime = '0' endif Until false
end sub
sub MakeTime() VAR D, T, Ret, i Ret = STR(UO.Time()) T = "" For i = 0 To Len(Ret) T = Ret[Len(Ret)-i] + T If (I == 2) OR (I == 4) Then T = ":" + T EndIf Next Ret = STR(UO.Date()) D = "" For i = 0 To Len(Ret) D = Ret[Len(Ret)-i] + D If (I == 2) OR (I == 4) Then D = "." + D EndIf Next Ret = T + " @ " + D RETURN Ret end sub
sub havka() If UO.InJournal("Вам не мешало") or UO.InJournal("быка")or UO.InJournal("голодны") or UO.InJournal("перекусить") or UO.InJournal("голода") then UO.UseType(havka) else endIf endsub
sub mo() uo.exec('set finddistance 0') uo.print('4to brat? ') uo.exec('addobject item1') while uo.targeting() wait(100) wend
uo.print('Kuda logit?') uo.exec('addobject sumka1') while uo.targeting() wait(100) wend
uo.findtype(uo.getGraphic('item1') ,uo.getColor('item1'),'ground') while UO.FindCount() uo.findtype(uo.getGraphic('item1') ,uo.getColor('item1'),'ground') uo.moveitem('finditem','0','sumka1') wait(100) wend endsub
sub armslor() ;uo.addObject('volina') ;while uo.targeting() ;wait(200) ;wend
;repeat ;uo.waittargetobject('0x74A4DD95') ;havka() ;UO.DeleteJournal() ;UO.UseSkill('Arms Lore') ;wait(1500) ;UO.RClick(275,154) ;wait(500) ;until uo.dead() endsub
sub splavi() uo.exec('set finnddistance 0') uo.exec('addobject item1') while uo.targeting() wait(100) wend uo.exec('addobject item2') while uo.targeting() wait(100) wend
while true uo.findtype('item1')
wend endsub
|