Нашел скрипт на авто ламбер+ходилку. Решил прикрутить всякие плюшки типа рекола в дом, побега, зарядкой чара ресами и так далее. Вроде всё написал что хотел и это даже работает, по отдельности... а вот в месте не хочет, то парсит при реколе, то при начале рубки, а может и пол часа проработать до краша.
Я уже даже не знаю в какую сторону "копать". Подскажите, где ошибся.
Code: var bandage = 500 var cf = 100 var food='0x097B' var cc = '0x472DDA3A' var wr = 0 var collrun = 6 var les1 = '601' var les2 = '602' var les3 = '603' var les4 = '604' var les5 = '605' var les6 = '606' var les7 = '7' var les8 = '8' var les9 = '9' var les10 = '611' var ghHeal = 1 var fishHeal = 1 var vortHeal = 0 var proc = 0 var hpgh = 70 var hpfish = 30 var hpvort = 40 var checklogs = 1 var logs = 500 var Axe = "0x13AF" var run = '109'
sub main() uo.setglobal('Recall', '0') uo.setglobal('goles', '0') uo.setglobal('DlayrDetect', '0') CheckAll() uo.say(',exec Heal') end sub
############################### Заправка на базе ############################### sub CheckAll() uo.useobject(cc) wait(3000) GetGHAF() if val(uo.getglobal('Recall')) == 1 then GetRegs() else Recharge() endif if uo.count('0x0E20') > 0 then uo.waittargetground('0x0E7B') uo.usetype('0x0E20') endif var b if uo.count('0x0E21') < bandage then b = bandage - uo.count('0x0E21') UO.FindType('0x0E21', '-1', cc) If UO.FindCount() > 0 Then UO.MoveItem('finditem', b) wait(500) endif endif var f if uo.count(food) < cf then f = cf - uo.count(food) UO.FindType(food, '-1', cc) If UO.FindCount() > 0 Then UO.MoveItem('finditem', f) wait(500) endif endif WarModeCheck() RecalltoLes() end sub
Sub WarModeCheck() if uo.WarMode() == 0 then uo.WarMode(1) endif end sub
Sub GetGHAF() DIM GHAF[2] GHAF[0] = '0x0F0E' GHAF[1] = '0x0DD6' VAR i For i = 0 To 1 If UO.Count( GHAF[ i ] ) < 1 Then UO.FindType( GHAF[ i ], '-1', cc ) If UO.FindCount() > 0 Then UO.MoveItem( 'finditem', '1' ) wait(500) Endif Endif Next end sub
Sub GetRegs() DIM Regs[3] Regs[0] = '0x0F7A' Regs[1] = '0x0F7B' Regs[2] = '0x0F86' VAR i For i = 0 To 2 If UO.Count( Regs[ i ] ) < 2 Then UO.FindType( Regs[ i ], '-1', cc ) If UO.FindCount() > 0 Then UO.MoveItem( 'finditem', '2' ) wait(500) Endif Endif Next end sub
Sub Recharge() Uo.exec("set norbcheck 1") uo.exec("set norbcalc 1") uo.waittargetground('0x1F4C') uo.recall('Runebook','800') wait(5000) end sub ################################################################################ ################################ Рекол в лес ################################### Sub RecalltoLes() var i var p dim les[10] les[0] = les1 les[1] = les2 les[2] = les3 les[3] = les4 les[4] = les5 les[5] = les6 les[6] = les7 les[7] = les8 les[8] = les9 les[9] = les10 i = val(uo.getglobal('goles')) if val(uo.getglobal('DlayrDetect')) == 1 then uo.setglobal('DlayrDetect', '0') i = i + 1 if i >= collrun then i = 0 endif uo.setglobal('goles', i) endif disarm() if val(uo.getglobal('Recall')) == 0 then uo.recall('Runebook',les[i]) else uo.cast('Recall', les[i]) endif CheckLoc() end sub
Sub disarm() while UO.ObjAtLayer('Lhand')<>"" and UO.ObjAtLayer('Rhand')<>"" uo.msg('.disarm') wait(500) wend end sub
Sub CheckLoc() var x = uo.getx() var y = uo.gety() repeat wait(1000) until not x == uo.getx() uo.msg('.disarm') uo.say(',exec PlayerControl') uo.say(',exec autoLumber') end sub ################################################################################ ########################### Скрипт на детект игроков ########################### ###################### Мониторим радиус облости в 18 тайлов #################### sub PlayerControl() var player uo.Set('finddistance','18') var i var control = 0 DIM people[2] people[0]='0x0190' people[1]='0x0191' while control == 0 uo.Ignore('self') for i = 0 to 1 uo.FindType(people[i],'-1','ground') player = uo.GetSerial('finditem') wait(250) if uo.FindCount() then # Появился игрок! Пытаемся убежать var x, y var pkx, pky pkx = uo.getx('finditem') pky = uo.gety('finditem') x = uo.getx('self') y = uo.gety('self') if pkx <= x then x = x + 50 end if if pky <= y then y = y + 50 end if if pkx > x then x = x - 50 end if if pky > y then y = y - 50 end if uo.press(run) uo.deletejournal() control = 1 uo.setglobal('DlayrDetect', '1') uo.Exec('terminate autoLumber') uo.say(',exec StepInLife') Walker(x, y, 2) end if next wait(250) wend uo.IgnoreReset() end sub ############################## Реколимся в дом ################################# sub StepInLife() var domx = 3044 var domy = 115 var domz = 25 var t = 0 var i = 1 t = 0 RecallToHome() while i == 1 if domx == uo.getx('self') and domy == uo.gety('self') and domz == uo.getz('self') then uo.Exec('terminate PlayerControl') uo.press(run) i = 0 else wait(100) endif wend end sub
Sub RecallToHome() disarm() if val(uo.getglobal('Recall')) == 0 then uo.msg('.recall') else uo.cast('Recall', 'Runebook') endif end sub ################################################################################ ##################################### Heal ##################################### Sub Heal() var maxhp = uo.GetMaxHP() var hg, hf, hv, i uo.print('Авто хилл включен.') if proc == 1 then hg = maxhp/100*hpgh hf = maxhp/100*hpfish hv = maxhp/100*hpvort uo.print('Работаем по процентному соотношению хит-поинтов.') else hg = hpgh hf = hpfish hv = hpvort uo.print('Работаем по цифровому соотношению хит-поинтов.') endif if ghHeal == 1 then uo.print("Хилл GH'кой включен") else uo.print("Хилл GH'кой вЫключен") endif if fishHeal == 1 then uo.print('Хилл Рыбой включен') else uo.print("Хилл Рыбой вЫключен") endif if vortHeal == 1 then uo.print("Хилл Vortex'сом включен") else uo.print("Хилл Vortex'сом вЫключен") endif uo.setglobal('gh', '1') uo.setglobal('fish', '1') uo.setglobal('vort', '1') uo.setglobal('bandage', '1') while not uo.dead() if ghHeal == 1 then if val(uo.getglobal('gh')) == 1 then if uo.GetHP() <= hg then uo.usetype('0x0F0E', '0x0690') uo.setglobal('gh', '0') uo.Exec('exec WaitGH') endif endif endif if fishHeal == 1 then if val(uo.getglobal('fish')) == 1 then if uo.GetHP() <= hf then uo.usetype('0x0DD6', '0x0009') uo.setglobal('fish', '0') uo.Exec('exec WaitFish') endif endif endif if vortHeal == 1 then if val(uo.getglobal('vort')) == 1 then if uo.GetHP() <= hv then uo.say('.v') uo.setglobal('vort', '0') uo.Exec('exec WaitVort') endif endif endif if val(uo.getglobal('bandage')) == 1 then if uo.GetHP() < uo.GetMaxHP() then uo.bandageself() uo.setglobal('bandage', '0') uo.Exec('exec WaitBandage') endif endif wait(100) wend end sub
Sub WaitGH() wait(25000) uo.setglobal('gh', '1') end sub
Sub WaitFish() wait(25000) uo.setglobal('fish', '1') end sub
Sub WaitVort() wait(24500) uo.setglobal('vort', '1') end sub
Sub WaitBandage() wait(3000) uo.setglobal('bandage', '1') end sub ################################################################################ ############################## Проверка логов\веса ############################# ##################################### Еда ###################################### sub CheckLogs() if checklogs == 0 then if uo.weight >= logs then uo.Exec('terminate autoLumber') uo.Exec('exec StepInLife') uo.print('лимит веса') endif else if uo.count('0x1BDD') >= logs then uo.Exec('terminate autoLumber') uo.Exec('exec StepInLife') uo.print('лимит логов') endif endif eda() end sub
Sub eda() uo.findtype(food) if uo.findcount() then uo.usetype(food) endif end sub
#Lumbjacking с автопоиском деревий (c) Destruction, v1.0 Sub searchTree() var i, x, y, t, stp, max_search = 24 ; максимальная дистанция для генерации координат. var cx = uo.getX() var cy = uo.getY() for i = 1 to max_search for x =-i to i stp = 1 if not i == abs( x ) then stp = abs( i ) * 2 endif for y = -i to i step stp if NOT uo.getGlobal( 't:' + str( x + cx ) + "," + str( y + cy ) ) == "empty" then t = IsTreeTile( x + cx, y + cy ) if not t == false then uo.setGlobal( "tree_x", str( x + cx ) ) uo.setGlobal( "tree_y", str( y + cy ) ) uo.setGlobal( "tree_t", str( t ) ) return false else uo.setGlobal( 't:' + str( x + cx ) + "," + str( y + cy ), 'empty' ) endif endif next next next uo.print( "Found no tree, exit." ) uo.exec( "terminate autoLumber" ) return false endsub
sub autoLumber() searchTree() doMineTree() endsub
Sub doMineTree() var x, y, t, LastTimer var end = "There's not|You cannot|Cancelled|stop" var try = "You have found some deadwood" repeat x = val( uo.getGlobal( "tree_x" ) ) y = val( uo.getGlobal( "tree_y" ) ) t = val( uo.getGlobal( "tree_t" ) ) uo.setGlobal( 't:' + str( x ) + "," + str( y ), "empty" ) Walker( x, y, 1 ) uo.exec( "exec searchTree" ) repeat if uo.waiting() then uo.canceltarget() endif deljournal( try + "|" + end ) uo.waittargettile( str( t ), str( x ), str( y ), 0 ) uo.usetype( Axe ) LastTimer=UO.Timer() CheckLogs() repeat wait( 100 ) until uo.injournal( try + "|" + end ) || UO.Timer()>LastTimer+50 until uo.injournal( end ) while uo.getGlobal( "tree_x" ) == str( x ) && uo.getGlobal( "tree_y" ) == str( y ) wait( 100 ) wend until false endsub
Sub deljournal( msg ) while uo.injournal( msg ) uo.setjournalline( uo.injournal( msg ) -1, '' ) wend endsub
Sub IsTreeTile( x, y ) var i, tree_count = 20 DIM tree[ val( str( tree_count ) ) ] tree[0] = 3274 tree[1] = 3275 tree[2] = 3276 tree[3] = 3277 tree[4] = 3280 tree[5] = 3283 tree[6] = 3286 tree[7] = 3289 tree[8] = 3291 tree[9] = 3292 tree[10] = 3294 tree[11] = 3295 tree[12] = 3296 tree[13] = 3299 tree[14] = 3302 tree[15] = 3394 tree[16] = 3395 tree[17] = 3417 tree[18] = 3440 tree[19] = 3461 for i = 0 to tree_count -1 if uo.privategettile( x, y, -1, tree[i], tree[i] ) then return tree[i] endif next return false endsub
########################################## ХОДИЛКА 3 ########################## #var Prec=3 # Как близко следует подойти к цели (Precision) #var MaxTraceDistance=15 # Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень #большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву. var Speed=2 # Длина шага. Сколько шагов делать за раз. Выше 3 ставить смысла нет. Тоесть тупое умножение шагов. Для ламбера #идеально 3, для майнинга - 1. #var StepTimeOut=400 # Если уперлись в неопознанный обьект, сколько мсек ждать сдвига с места. Если по простому - таймаут #шага. Если поставить сильно маленькие, ходилка начнет трассировать пустые места. #UO.SetGlobal("Logging","1") # - показывать отладочные сообщения. #UO.SetGlobal("BlindWalk","0") # - не использовать проверку тайлов, а использовать ходьбу наощупь. Для майнинга ОБЯЗАТЕЛЬНО #ВКЛЮЧИТЬ. #В функции IsPass, содержиться список проходимых тайлов.
#Walker(X,Y,Prec) - идем к цели с координатами X,Y. Возвращает 1 в случае успешного достижения цели, и 0 - при невозможном обходе (путь не найден) #Tracer(StartDir,Direction) - трассировка 1 шага. Возвращает направление по которому получилось сдвинуться с места. StartDir #- направление последнего движения, Direction (-1 или +1) направление обхода. -1 - по часовой стрелке, +1 против часовой #стрелки. Направления скрипт использует личного формата: #1 - влево вниз #2 - вниз #3 - вправо вниз #4 - вправо #5 - вправо вверх #6 - вверх #7 - влево вверх #8 - влево #Tracer(StartDir,Direction) - идеально подходит для рыбалки вдоль берега так как она будет обходить берег бесконечно (1 #запуск функции = 1 шаг обхода). ##################################################### # WW W WW AA LL Kk KK EE EE RRR # # WW W WW AA A LL Kk K EEE R R # # WW W WW AA A LL KKK EEEEE R R # # WW WW WW AAAA LL KKK EEE RRR # # WWW WWW AA A LLLL KK Kk EE EE R RR # #################################################### var MaxTraceDistance=10 var TraceLoopIncrease=5 #Увеличение MaxTraceDistance при исчерпании количества ходов var LimitTrace=20 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет).
var StepTimeOut=500 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга. # Для ходьбы - 500+Ping # Для бега/ходьбы на лошади - 300+Ping # Бег на лошади - 150 + Ping
var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС. var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.
#sub ttt() #walker(x, y, 0) #end sub
Sub Walker(GoX,GoY,Prec) UO.SetGlobal("Logging","0") UO.SetGlobal("BlindWalk","0") var LastDir var MoveRes var TracerCnt UO.SetGlobal("GlobalGoX",str(GoX)) UO.SetGlobal("GlobalGoY",str(GoY)) while not IsEnd(GoX,GoY,Prec) TracerCnt = MaxTraceDistance repeat LogInfo('Just walking') LastDir=GoUntilHit(GoX,GoY,Prec) if IsEnd(GoX,GoY,Prec) then return 1 end if LogInfo('Tracing') MoveRes = FullAroundTrace(LastDir,GoX,GoY,Prec,TracerCnt) if TracerCnt > LimitTrace then return 0 endif TracerCnt = TracerCnt + TraceLoopIncrease until MoveRes == 1 wend return 1 end sub
Sub FullAroundTrace(StartDir,GoX,GoY,Prec,MaxTrace) var LineX=UO.GetX() var LineY=UO.GetY() var CurDir=StartDir var Direction=CountDirection(GoX,GoY,CurDir,Prec) var StartX,StartY var MovesDone=0 repeat StartX=UO.GetX() StartY=UO.GetY() CurDir=Tracer(CurDir,Direction,Prec) if (CurDir==GetDir(GoX,GoY,Prec)) then return 1 endif if MovesDone>0 and PrevMoveCross(GetDirToDir(UO.GetDir(),Prec),LineX,LineY,GoX,GoY,StartX,StartY,Prec) then return 1 end if MovesDone=MovesDone+1 CurDir=AddToDir(CurDir,-Direction,Prec) until MovesDone>MaxTrace return 0 end sub
Sub CountDirection(GoX,GoY,StartDir,Prec) var GoDir=GetDir(GoX,GoY,Prec) 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,Prec) 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,Prec) end sub
Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec) 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,Prec) 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,Prec) var LastDir LastDir=GetDir(GoX,GoY,Prec) var CouldMove repeat LastDir=GetDir(GoX,GoY,Prec) if LastDir<>0 and not IsEnd(GoX,GoY,Prec) then CouldMove=TryDir(LastDir,Prec) end if until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove return LastDir end sub
Sub IsEnd(GoX,GoY,Prec) 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,Prec) 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,Prec) var CurDir=StartDir var Result repeat Result=TryDir(CurDir,Prec) if not Result then CurDir=AddToDir(CurDir,Direction,Prec) end if until Result return Result end sub
Sub AddToDir(Dir,Cnt,Prec) 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,Prec) 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(GoX,GoY) then LogInfo(str(GoX)+':'+str(GoY)+' is not passable') return false end if return TurnAndGoDir(Dir,Prec) 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,Prec) var StartDir=GetDirToDir(UO.GetDir(),Prec) var StartX=UO.GetX() var StartY=UO.GetY() var EndDir var Counter=0 var TestCounter=CheckCnt #Direction Test repeat Counter = 0 LogInfo('Dir: '+str(StartDir)+' Counter: '+str(Counter)) PressDir(Dir) repeat EndDir=GetDirToDir(UO.GetDir(),Prec) wait(DynamicPause) Counter=Counter+1 until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause TestCounter = TestCounter - 1 LogInfo('Dir: '+str(EndDir)+' Counter: '+str(Counter)) until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause if Counter>=StepTimeOut/DynamicPause then LogInfo('Direction timeout reached') return 0 end if #End direction Test if StartY<>UO.GetY() or StartX<>UO.GetX() then return Dir end if #Start Primary test TestCounter=CheckCnt repeat GoDir(Dir,Prec) Counter=0 repeat wait(DynamicPause) Counter=Counter+1 until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause TestCounter = TestCounter - 1 until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause #End primary test if Counter>=StepTimeOut/DynamicPause then LogInfo('Step timeout reached') return 0 else return Dir end if end sub
Sub GetDirToDir(GotDir,Prec) var ChangedDir=-GotDir ChangedDir=AddToDir(ChangedDir,5,Prec) return ChangedDir end sub
Sub DirToInj(Dir) dim Dirs[9] Dirs[1]=1 Dirs[2]=2 Dirs[3]=3 Dirs[4]=6 Dirs[5]=9 Dirs[6]=8 Dirs[7]=7 Dirs[8]=4 return (Dirs[Dir]) end sub
Sub PressDir(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 UO.Press(Dirs[Dir],1) end sub
Sub GoDir(Dir,Prec) 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) end sub
Sub IsPass(X,Y) if UO.GetGlobal("BlindWalk") then return true endif dim Types[60] Types[1]=3 Types[2]=25 Types[3]=51 Types[4]=63 Types[5]=113 Types[6]=140 Types[7]=172 Types[8]=219 Types[9]=232 Types[10]=235 Types[11]=239 Types[12]=243 Types[13]=248 Types[14]=251 Types[15]=264 Types[16]=267 Types[17]=282 Types[18]=289 Types[19]=321 Types[20]=379 Types[21]=420 Types[22]=440 Types[23]=476 Types[24]=499 Types[25]=513 Types[26]=542 Types[27]=578 Types[28]=586 Types[29]=622 Types[30]=700 Types[31]=804 Types[32]=1740 Types[33]=1758 Types[34]=1770 Types[35]=1779 Types[36]=1779 Types[37]=1881 Types[38]=1886 Types[39]=1801 Types[40]=1805 Types[41]=1813 Types[42]=1820 Types[43]=1831 Types[44]=1833 Types[45]=1843 Types[46]=1850 Types[47]=1873 Types[48]=1876 Types[49]=1885 Types[50]=1888 Types[51]=1946 Types[52]=1969 Types[53]=2500 Types[54]=2539 for var i=1 TO 53 STEP 2 if UO.PrivateGetTile(X,Y,-1,Types[i],Types[i+1]) 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())+" - "+Line); end if end sub
Sub Abs(X) if X>0 then return X else return (-X) end if end sub ########################################## КОНЕЦ ХОДИЛКИ 3 ##########################
|