Так получилось что клиента запустить не в состоянии.На стелз незнаю и половины функций,если кому не сложно,помогите портировать скрипт с инжекта.
pc. Заливаю без /code так как скрипт бьется и неработает в итоге.
##############################
#Crafted by 08          -          17j,2010
#For DRW.ru Shard    Injection 505.18 Vendor
#Lumberjacking v 7.1 
#Ламбер рядом с домом/сейфом 
#Смена координат при появлении эНта,
#или вырубке одного места.
#Три разных места для рубки
#Авторес,автореконектИ 
#Идеален для прокачки ламбера  
###############################
#              Что нужно                                  
# 1= Sейф(1 шт),сумка с топорами в нём(1шт) 
# 2=Еда(pigs),бинты(все в сумку с топорами)
# 3=       топоры четыре вида(побольше)
#       "battle axe" * "executioners axe"  
#  "a large battle axe" * "a two handed axe" 
# 4=Бука с руной к сейфу(9 руна по умолчанию)
#################################
#                  FaQ                       # 
#################################
#Разместить сейф в заборе,с доступом извне       
#[][][][][][][][][][][][][][][][][][][][][][]          
#Добавить через скрипт МАРКИРОВКА ДЕРЕВЬЕВ
#Или через команду ,infotile 
#три .dat фаила,положить в корень диска C:\ 
#обозвать файлы в порядке очереди рубки-    
#       tr0.dat   tr1.dat    tr2.dat                          
#в случаи появления энта,чар меняет фаил рубки   
#на следуюший(логично разместить все три места 
#в разных частях леса).                               
#[][][][][][][][][][][][][][][][][][][][][][]   
#включить AUTORUN в настройках игры или через
#выполнение скрипта AR_On().Слезть с лошади  
#Настроить переменные под себя.               
#Перем.ОБЯЗАТЕЛЬНЫЕ к настроике помечены "!" 
################################
#                 Внимание!                
#        Неотправленные Буквы в чате     
#          останавливают ходилку!       
#    Некоторые команды инжекта и номера рун   
#        вы можете найти снизу скрипта      
#################################
#                 Переменные                 #
################################
#     Расположение кнопки HELP          
var helpX=980 # Переменные без кавычек  
var helpY=55 # Переменные без кавычек
#################################
var Runebook='0x404ACE9F' # Для рекола домой.   !
var Runenr='1025' # Номер руны в книге.                !
var food='0x09BB' #  Тип еды(свинья!,внимание мусульмане)    
var band='0x0E21' #тип бандаг     
var sunduk='0x40556A9D'   #Сейф                          !
var sumka_axe='0x4021CB0B'#Сумка с топорами    !
var homeX=1111#Координата X рядом с сундуком  !
var homeY=1111#Координатa Y рядом с сундуком   !  
var homeXreserv=1112#Резервные координаты       !
var homeYreserv=1112#Резервные координаты       !
#Резервные коорд.=Коорд.X,Y,увеличиные на 1 
var StepTimeOut=350 #Таймаут шага       
##################################
sub main() 
uo.set('quiet', '0')          #Рекомендую поставить 1 после отладки рубки
uo.set('finddistance','10')
xy()
Open(sunduk)  
Open(sumka_axe)
wait(500)
tallq()
DropLogs()
uo.exec('exec lumbera') 
uo.exec('exec Reconnector') 
uo.exec('exec Resurrector') 
endsub
####################LUMBER######################
#[][][][][][][][][][][][][][][][][][][]LUMBER_A[][][][][][][][][][][][][][][][]
###############################################
sub lumbera() 
var f=file("C:\tr0.dat"),TreeCount=0,i 
dim TreeX[500],TreeY[500],TreeT[500] 
f.open() 
uo.exec('terminate cheker1') 
uo.exec('terminate cheker2') 
uo.exec('terminate cheker') 
uo.exec('terminate lumberc') 
uo.exec('exec cheker') 
TreeCount=safe call f.readNumber() 
for i=1 to TreeCount 
 TreeT=safe call f.ReadNumber() 
 TreeX=safe call f.ReadNumber() 
 TreeY=safe call f.ReadNumber() 
next 
f.close() 
while not uo.dead() 
 for i=1 to TreeCount  
 uo.Print('Lumber1=Идем к дереву номер '+str(i)+': x='+str(TreeX)+' y='+str(TreeY)) 
 walker(treex,treey,1) 
  GetTree(str(treeT),str(treeX),str(TreeY),str(uo.getz()))  
 next 
 DropLogs() 
 uo.exec('exec lumberb') 
wend 
endsub 
#[][][][][][][][][][][][][][][][][][][]LUMBER_B[][][][][][][][][][][]
sub lumberb() 
var f=file("C:\tr1.dat"),TreeCount=0,i 
dim TreeX[500],TreeY[500],TreeT[500] 
uo.exec('terminate cheker1') 
uo.exec('terminate cheker2') 
uo.exec('terminate cheker') 
uo.exec('terminate lumbera') 
f.open() 
uo.exec('exec cheker1') 
TreeCount=safe call f.readNumber() 
for i=1 to TreeCount 
 TreeT[i]=safe call f.ReadNumber() 
 TreeX[i]=safe call f.ReadNumber() 
 TreeY[i]=safe call f.ReadNumber() 
next 
f.close() 
while not uo.dead() 
 for i=1 to TreeCount  
 uo.Print('Lumber2=Идем к дереву номер '+str(i)+': x='+str(TreeX[i])+' y='+str(TreeY[i])) 
   walker(treex[i],treey[i],1) 
 # ToHide()  
  GetTree(str(treeT[i]),str(treeX[i]),str(TreeY[i]),str(uo.getz()))  
 next 
 DropLogs()
  uo.exec('exec lumberc') 
wend 
endsub 
#[][][][][][][][][][][][][][][][][][][]LUMBER_C[][][][][][][][][][][]
sub lumberc() 
var f=file("C:\tr2.dat"),TreeCount=0,i 
dim TreeX[500],TreeY[500],TreeT[500] 
uo.exec('terminate cheker1') 
uo.exec('terminate cheker2') 
uo.exec('terminate cheker') 
uo.exec('terminate lumberb') 
uo.exec('exec cheker2') 
f.open() 
TreeCount=safe call f.readNumber() 
for i=1 to TreeCount 
 TreeT[i]=safe call f.ReadNumber() 
 TreeX[i]=safe call f.ReadNumber() 
 TreeY[i]=safe call f.ReadNumber() 
next 
f.close()
while not uo.dead() 
 for i=1 to TreeCount  
 uo.Print('Lumber3=Идем к дереву номер '+str(i)+': x='+str(TreeX[i])+' y='+str(TreeY[i])) 
   walker(treex[i],treey[i],1) 
 # ToHide()  
  GetTree(str(treeT[i]),str(treeX[i]),str(TreeY[i]),str(uo.getz()))  
 next 
 DropLogs() 
 uo.exec('exec lumbera') 
wend 
endsub 
#[][][][][][][][][][][][][][][][][][][]GET_TREE[][][][][][][][][][][][]
Sub GetTree(type,x,y,z) 
var ms1="logs in your pack" 
var ms2="logs here to chop" 
var ms3="log in your pack" 
var ms4="You hack" 
var ms5="That is too far away" 
var ms6="You can't reach this" 
var Time 
Time=uo.Timer() 
wait(200) 
repeat 
 uo.deletejournal() 
 uo.waittargettile(type,x,y,z) 
 uo.useobject('axe')
#cheker()
 repeat 
  wait(100) 
until uo.injournal(ms1) or uo.injournal(ms2) or uo.injournal(ms3) or uo.injournal(ms4) or uo.injournal(ms5) or uo.injournal(ms6) or Time+80<uo.Timer()
until uo.injournal(ms2) or uo.injournal(ms5) or uo.injournal(ms6) or uo.injournal(ms4) or Time+50<uo.Timer()
end sub 
#[][][][][][][][][][][][][][][][][][][]DROP_LOGS[][][][][][][][][][][][][]
sub DropLogs() 
var a,Exit,Logs='0x1BDD'
xy()
ToHide()
uo.findtype(Logs,'-1','backpack') 
while uo.findcount()>0 
 uo.moveitem('finditem','all',sunduk) 
 wait(3000) 
 uo.findtype(Logs,'-1','backpack') 
wend 
CheckLag() 
checkhpS()
Getaxe()
toeat()
end sub 
#[][][][][][][][][][][][][][][][][][][]GOTO_XY[][][][][][][][][][][][][][][]
#идет к сундуку,проверка на открытие
sub xy()
while not uo.InJournal('Contains') 
repeat
walker(homeX,homeY,1) 
Open(sunduk)
Open(sumka_axe)
ToHide()
if uo.injournal('reach that') or uo.injournal('You can') then
walker(homeXreserv,homeYreserv,1) 
ToHide() 
endif
wend
UO.DeleteJournal()
endsub
#[][][][][][][][][][][][][][][][][][][]GET_AXE[][][][][][][][][][][][][][][]
sub Getaxe() 
   var n
   dim instrument[4] 
   instrument[1]='0x1442'       #Четыре типа топора.
   instrument[2]='0x0F45' 
   instrument[3]='0x0F47' 
   instrument[4]='0x13FA'
   if uo.count('0x13FA')==0 and uo.count('0x0F47')==0 and uo.count('0x0F45')==0 and uo.count('0x1442')==0 then 
      for n=1 to 4 
         uo.findtype(instrument[n],-1,'0x4021CB0B') 
         if uo.findcount() then 
            Uo.exec("addobject axe finditem")
            uo.moveitem('finditem',0,'backpack') 
            uo.print('axe found!')
            save()
            checklag() 
            wait(700)
            return 
         endif 
      next 
   else 
      for n=1 to 4 
         uo.findtype(instrument[n],-1,'my') 
         if uo.findcount() then 
            Uo.exec("addobject axe finditem")
            uo.print('axe found in pack!')
            save()
            return 
         endif 
      next    
   endif 
   while 1 
      uo.print(' axe not found ') 
      wait(3000) 
   wend 
endsub 
##############################################
#[][][][][][][][][][][][][][][][][][][]CHECKER[][][][][][][][][][][][][][][][]
##############################################
sub cheker() 
while true
if CheckIfTree() ==1 then
uo.exec('terminate lumbera') 
UO.DeleteJournal()
uo.ignorereset() 
DropLogs()
wait(15000)
uo.exec('exec lumberb') 
end if 
repeat
wait(2000)
wend
end sub
#[][][][][][][][][][][][][][][][][][][]CHECKER1[][][][][][][][][][][][][][]
sub cheker1() 
while true
if CheckIfTree() ==1 then
uo.exec('terminate lumberb')
UO.DeleteJournal()
uo.ignorereset() 
DropLogs()
wait(15000)
uo.exec('exec lumberc') 
end if 
repeat
wait(1000)
wend
end sub
#[][][][][][][][][][][][][][][][][][][]CHECKER2[][][][][][][][][][][][][][][]
sub cheker2() 
while true
if CheckIfTree() ==1 then
uo.exec('terminate lumberc') 
UO.DeleteJournal()
uo.ignorereset() 
DropLogs()
wait(150000)
uo.exec('exec lumbera') 
end if 
repeat
wait(1000)
wend
end sub
################################################
#[][][][][][][][][][][][][][][][][][][]HEAL[][][][][][][][][][][][][][][][][][][]#
###############################################
#Mihail 
var rn, max = uo.getmaxhp(object)/100 
rn = uo.gethp(object)/max 
Return rn 
End Sub
sub checkhpS()
if uo.life < 90   then 
getBND()
       while  uo.life < 90
         uo.WarMode(false) 
            uo.WaitTargetObject('self') 
            uo.UseType('band') 
            wait(3500) 
            CheckLag() 
         wend 
         dropBND()
endif
end sub
sub getBND()
uo.findtype(band,-1,sumka_axe) 
      if uo.findcount() then 
         uo.moveitem('finditem','15','backpack') 
         wait(600)
endif
endsub
sub dropBND()
 uo.findtype(band,-1,'backpack') 
   if uo.findcount() then 
      uo.moveitem('finditem',0,sumka_axe) 
      wait(600) 
   endif    
   endsub
##############################################
#[][][][][][][][][][][][][][][][][][][]OTHER[][][][][][][][][][][][][][][][][]
##############################################
sub CheckIfTree() 
uo.findtype('0x002F',-1,'ground') 
   if uo.findcount() then 
 return 1
   endif 
endsub 
#[][][][][][][][][][][][][][][][][][]TO_EAT[][][][][][][][][][][][][][][]
sub toeat() 
      uo.findtype(food,-1,sumka_axe) 
      if uo.findcount() then 
         uo.moveitem('finditem','1','backpack') 
         checklag() 
         wait(600)
            uo.usetype(food) 
            wait(500) 
   uo.findtype(food,-1,'backpack') 
   if uo.findcount() then 
      uo.moveitem('finditem',0,sumka_axe) 
      checklag() 
      wait(600) 
   endif    
endif
endsub 
#[][][][][][][][][][][][][][][][][][][]AUTORUN[][][][][][][][][][][][][][][]
sub AR_On() 
   if uo.GetRun('self')==0 then 
   uo.press(122) 
   endif 
      uo.print('Бег включен') 
end sub
#[][][][][][][][][][][][][][][][][][][]TOHIDE[][][][][][][][][][][][][][][][]
Sub ToHide() 
while not UO.Hidden() 
uo.WarMode(false) 
 uo.deletejournal() 
 UO.UseSkill("Stealth") 
 wait(3500) 
wend 
end sub 
#[][][][][][][][][][][][][][][][][][][]NUMB[][][][][][][][][][][][][][][][][]
Sub Numb(num) 
if num>=0 then 
return num 
else 
return num*(-1) 
end if 
end sub 
#[][][][][][][][][][][][][][][][][][][]CHECKLAG[][][][][][][][][][][][][][][]
Sub CheckLag() 
    UO.DeleteJournal() 
    UO.Click('backpack') 
    repeat 
       wait(150) 
    until UO.InJournal('backpack') 
end sub
#[][][][][][][][][][][][][][][][][][][]WRITELOG[][][][][][][][][][][][][][][]
sub writeLog()
   var ser
    var n 
    for n=0 to 0
      ser=uo.journalserial(n)
       uo.TextOpen() 
      uo.TextPrint(uo.getname(ser)+' @ '+MakeTime()) 
      endif 
   next 
   endsub
#[][][][][][][][][][][][][][][][][][][]SAVE[][][][][][][][][][][][][][][][][]
sub save()
uo.exec('saveconfig')
endsub
#[][][][][][][][][][][][][][][][][][][]TERM_OTHER[][][][][][][][][][][][][][]
sub tall()
uo.exec('terminate main') 
uo.exec('terminate Reconnector')
uo.exec('terminate lumbera') 
uo.exec('terminate lumberb') 
uo.exec('terminate lumberc') 
uo.exec('terminate cheker') 
uo.exec('terminate cheker1') 
uo.exec('terminate cheker2') 
endsub
sub tallq()
uo.exec('terminate Resurrector') 
uo.exec('terminate Reconnector')
uo.exec('terminate lumbera') 
uo.exec('terminate lumberb') 
uo.exec('terminate lumberc') 
uo.exec('terminate cheker') 
uo.exec('terminate cheker1') 
uo.exec('terminate cheker2') 
endsub
#[][][][][][][][][][][][][][][][][][]RESSURECTOR[][][][][][][][][][][][][][][][]
sub Resurrector() 
   var oldX,oldY 
   while 1 
      if uo.dead() then 
        tall()
        # uo.TextOpen() 
         uo.TextPrint('- dead - @ '+MakeTime()) 
         wait(5000) 
         oldX = Uo.GetX() 
         oldY = Uo.GetY() 
         uo.useobject('self') 
         checklag() 
         wait(700) 
         repeat 
            uo.lclick(helpX,helpY) 
            checklag() 
            wait(700) 
            uo.lclick(264,308) 
            checklag() 
            wait(700)       
            uo.lclick(175,203) 
            checklag() 
            wait(5000)    
         until oldX<>UO.GetX() OR oldY<>UO.GetY() 
         repeat 
            uo.press(39) 
            wait(2000) 
         until UO.GetY()<534 
         repeat 
            uo.useobject('0x4001BDF0') 
            wait(3000) 
         until uo.life>0 
         Open(uo.getserial('backpack')) 
         wait(300000) 
         oldX = Uo.GetX() 
         oldY = Uo.GetY()          
         uo.recall(Runebook,Runenr) 
         repeat 
            wait(700) 
         until oldX<>uo.getx('self') && oldY<>uo.gety('self') 
         Open(sunduk) 
         if uo.waiting() then 
            uo.canceltarget() 
         endif 
         uo.exec('exec main') 
      endif 
      wait(5000) 
   wend 
endsub 
#[][][][][][][][][][][][][][][][][][][]OPEN[][][][][][][][][][][][][][][][][][][]
sub Open(what) 
   uo.useobject(what) 
   checklag() 
   wait(700) 
endsub 
#[][][][][][][][][][][][][][][][][][][]COUNT_LOGS[][][][][][][][][][][][][][][][]
sub Get_Logs_Count() 
  var type='0x1BDD' 
  var i 
  uo.FindType(type,'-1','0x40556A9D') 
  uo.TextClear()  
  for i = 0 to uo.FindCount() - 1 
    uo.FindType(type,'-1','0x40556A9D') 
    uo.Click('finditem') 
    uo.Print(uo.GetName('finditem')) 
    wait(100) 
    uo.TextOpen() 
    uo.TextPrint(uo.GetName('finditem')) 
    uo.Ignore('finditem') 
  next 
  uo.IgnoreReset() 
end sub
####################ХОДИЛКА 3 
var MaxTraceDistance=10 
var TraceLoopIncrease=5
var LimitTrace=20
var Speed=3 
#var StepTimeOut=350
# Для ходьбы - 500+Ping 
# Для бега/ходьбы на лошади - 300+Ping 
# Бег на лошади - 150 + Ping 
var CheckCnt=2 
var DynamicPause=30 
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 ##########################
sub Reconnector() 
   var ReconnectTime, RFlag 
   ReconnectTime = '0' 
   RFlag = 1 
   Repeat 
      While (UO.ObjAtLayer('Bpack') == '') 
         if RFlag Then 
            ReconnectTime = MakeTime() 
            RFlag = 0 
         endif 
         Wait(1000) 
         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 autoload') 
         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
##############################################
#                  Readme                    #
##############################################
#Номера рун в книге
#uo.recall(RuneBook,'21') ; 1-я 
#uo.recall(RuneBook,'33') ; 2-я 
#uo.recall(RuneBook,'46') ; 3-я 
#uo.recall(RuneBook,'58') ; 4-я 
#uo.recall(RuneBook,'64') ; 5-я 
#uo.recall(RuneBook,'73') ; 6-я 
#uo.recall(RuneBook,'88') ; 7-я 
#uo.recall(RuneBook,'94') ; 8-я 
#uo.recall(RuneBook,'1025');9-я
###############################################
#Добавить свой предмет можно командой ,info   
#Пример команды ,info                         
###############################################
#ID=0x40369130 Type=0x1BDD ESVMRMD Name=      
#Quantity: 8  Colour: 0x0014  Layer: 0  Has: 1
#X=55 Y=76 Z=0 C=0x400BEF55 F=0x00            
###############################################
#Где-ID=0x40369130=нужный номер предмета      
###############################################
#Координаты легко можно найти в окне инжекта  
#пишутся вверху как "4343 3434 YokoInjection" 
#Скрипт для маркировки деревьев легко находится
#в интернете,или на саите Йокко               
#http://forum.yoko.com.ua                     
#маркирует скриптом деревья,на выходе получаем
#файл C:\ltitles.txt. Перейменовываем его в   
#tr0.dat и запускаем скрипт сначала,на другом 
#участке леса.Получаем три фаила таким образом
#(tr0.dat  tr1.dat   tr2.dat)                 
#которые ложим в корень диска C:\             
#(C:\tr0.dat)(C:\tr1.dat)(C:\tr2.dat)         
###############################################
#Ошибки.
#При возникновении ошибок,или в случае если
#скрипт НЕработает,стоит проверить Переменные
#и каждую функцию по отдельности.
#Переменные вещей пишутся в кавычках,тогда как
#переменные передвижения пишутся БЕЗ оных.
#Если у вас плохой пинг или вас часто дисконектит
#то проверяем пинг до сервера
#пуск-выполнить-пишем cmd,жмём ввод
#далее пишем ping и ИП адрес сервера
#Ип адресс можно узнать в инжекте
#пример - Ping 89.222.192.234
#нам нужно ВРЕМЯ ответа от сервера
#находим вверху переменную var StepTimeOut=350
#ставим по формуле 300+ваше время ответа
#пример-пинг показал время=136 мс
#значит необходимо поставить значение 300+136=436
#Для того кто хочет переделать скрипт под свой шард
#незабываем так же править фразы рубки на свои
#и установить задержку на рубку под свой сервер
################################################
#PC.Выражаю благодарность за предоставленные скрипты
#Beyonder,Edred,Mikhail,Destruction,Dark Enemy.
#И всем кто еше не забыл что такое Ultima Online. 
#by 08 17j,2010/18:40/Luxembourg.
			
			
									
									
						Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7 
	Помогите перенести скрипт(lumber,drw)
незнаешь функции - смотреть http://stealth.od.ua/forum/viewforum.php?f=6
			
			
									
									"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
						ну что тут сказать...спасибо за помошь..Vizit0r wrote:незнаешь функции - смотреть http://stealth.od.ua/forum/viewforum.php?f=6
да пожалуйста
уроки есть, изучи азы.
потом начни портировать, что непонятно - задавай вопросы.
а в твоей формулировке это звучало так: "вот вам скрипт на инжекте на 3 страницы, перепишите под стелс, оттестируйте полностью и обьясните как настроить"
такая формулировка лично мне совершенно неинтересна.
			
			
									
									уроки есть, изучи азы.
потом начни портировать, что непонятно - задавай вопросы.
а в твоей формулировке это звучало так: "вот вам скрипт на инжекте на 3 страницы, перепишите под стелс, оттестируйте полностью и обьясните как настроить"
такая формулировка лично мне совершенно неинтересна.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
						кстати да, для стелса проверок надо в разы меньше (а надежности в те же разы больше).
я этому сам сильно удивлялся давно-давно, когда только начал переводить скрипты с инжекта на стелс
			
			
									
									я этому сам сильно удивлялся давно-давно, когда только начал переводить скрипты с инжекта на стелс
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
						
