Автономный мининг

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
anmani2007
Posts: 1
Joined: 2010-02-15 21:07:43

Автономный мининг

Post by anmani2007 »

Значит так, скрипт полностью рабочий. За все время, которое он у меня работал не было ни одной ошибки. Писал специально для шарда uo-dominaria.ru. Скрипт очень просто написан, так что разобраться в нем не составит труда. Присутствует относительно большое количество проверок, но лучше перебдеть.. =)

Описание: Чар копает в шахте брита, набрал вес - телепорт домой. Убили - пошел воскресился и опять копать. Добор регов присутствует. Короче вечная копка, запускайте скрипт и смело уезжайте в отпуск =)

Инструкция: Все, что от вас требуется, это поменять ID сундуков, и настроить телепорт по рунбуку, чтобы реколился по номерам ваших рун домой и в пещеру. Значит 1ую руну маркните где-то в районе 24 координаты из массива, а вторую в районе 50, это для того, чтобы чар не уперался в стену, т.к. ходилка тут хоть и хорошая, но не идеальная =) И еще, когда чар реколится домой, он делает 5 шагов вверх к сундуку, куда будет класть руду, и 5 шагов от сундука, когда все перемещения и проверки закончит. Советую зарядить рунбук на 100-200 зарядов.

Code: Select all

##############################################
############## ОСНОВНАЯ ЧАСТЬ ################
##############################################

sub main()
Var i, j, l 

   
   Dim x[58]
   x[1] = 1278
   x[2] = 1276
   x[3] = 1274
   x[4] = 1271
   x[5] = 1269
   x[6] = 1273
   x[7] = 1275
   x[8] = 1275
   x[9] = 1275
   x[10] = 1274
   x[11] = 1273
   x[12] = 1272
   x[13] = 1271
   x[14] = 1271
   x[15] = 1268
   x[16] = 1266
   x[17] = 1265
   x[18] = 1267
   x[19] = 1265
   x[20] = 1263
   x[21] = 1260
   x[22] = 1260
   x[23] = 1258
   x[24] = 1256
   x[25] = 1255
   x[26] = 1262
   x[27] = 1260
   x[28] = 1257
   x[29] = 1261
   x[30] = 1257
   x[31] = 1260
   x[32] = 1261
   x[33] = 1261
   x[34] = 1261
   x[35] = 1261
   x[36] = 1259
   x[37] = 1255
   x[38] = 1252
   x[39] = 1253
   x[40] = 1250
   x[41] = 1249
   x[42] = 1247
   x[43] = 1245
   x[44] = 1242
   x[45] = 1240
   x[46] = 1238
   x[47] = 1235
   x[48] = 1232
   x[49] = 1232
   x[50] = 1237
   x[51] = 1241 
   x[52] = 1235
   x[53] = 1234
   x[54] = 1235
   x[55] = 1232
   x[56] = 1229
   x[57] = 1227
   x[58] = 1230

   
   Dim y[58]
   y[1] = 1217
   y[2] = 1215
   y[3] = 1213
   y[4] = 1214
   y[5] = 1212
   y[6] = 1216
   y[7] = 1218
   y[8] = 1221
   y[9] = 1223
   y[10] = 1225
   y[11] = 1223
   y[12] = 1220
   y[13] = 1224
   y[14] = 1226
   y[15] = 1225
   y[16] = 1223
   y[17] = 1220
   y[18] = 1217
   y[19] = 1215
   y[20] = 1217
   y[21] = 1221
   y[22] = 1226
   y[23] = 1228
   y[24] = 1230 ##################
   y[25] = 1232
   y[26] = 1227
   y[27] = 1230
   y[28] = 1234
   y[29] = 1234
   y[30] = 1238
   y[31] = 1239
   y[32] = 1242
   y[33] = 1244
   y[34] = 1247
   y[35] = 1250
   y[36] = 1246
   y[37] = 1245
   y[38] = 1245
   y[39] = 1242
   y[40] = 1242
   y[41] = 1246
   y[42] = 1245
   y[43] = 1242
   y[44] = 1244
   y[45] = 1246
   y[46] = 1248
   y[47] = 1247
   y[48] = 1248
   y[49] = 1251
   y[50] = 1251
   y[51] = 1254
   y[52] = 1249
   y[53] = 1256
   y[54] = 1259
   y[55] = 1260
   y[56] = 1260
   y[57] = 1257
   y[58] = 1252
   

      for i = 1 to 58
      j = 0
      l = 0
      Walker(x[i],y[i],1)
      if uo.life == 0 then
         if i < 36 then
            ress()
            mine1()
            wait(10000)
         else
            ress1()
            mine2()
            wait(10000)
         end if
      end if
      if uo.weight>500 then
         Home()
         if uo.life == 0 then
            if i < 36 then
               ress()
               mine1()
               wait(10000)
            else
               ress1()
               mine2()
               wait(10000)
            end if
         else
         wait(10000)
         repeat
         j = j + 1
         uo.press(38)
         wait(500)
         until j > 4
         wait(500)
                    pereklad2()
         wait(500)
                    pereklad3()
         wait(500)
                  CheckingItems() 
         wait(500)
         repeat
         uo.press(40)
         wait(500)
         l = l + 1
         until l > 4
                 if i < 36 then
               mine1()
               wait(6000)
            else
               mine2()
               wait(6000)
            end if
         hide()
      end if
      end if
      Walker(x[i],y[i],1)
                    minround()
      if i == 58 then
         i = 0
                    mine1()
      end if
   Next
end sub

###############################################
############## ПЕРЕКЛАД РУДЫ ##################
###############################################

sub pereklad2() 
VAR b 
var Sunduk1 = 0x40034F27
DIM Ore[4] 
Ore[0] = '0x19B7' # 
Ore[1] = '0x19B8' # 
Ore[2] = '0x19BA' # 
Ore[3] = '0x19B9' #
uo.useobject(Sunduk1)
for b=0 to 3
  if uo.count(Ore[b]) > 0 then 
   uo.findtype(Ore[b], '-1', 'backpack') 
   if uo.findcount() > 0 then
    repeat
     uo.moveitem('finditem', '0', Sunduk1) 
     wait(1000)
     UO.FindType(Ore[b],'-1','backpack')
    until not UO.FindCount()
   else 
    uo.print('Нечего перемещать') 
    return 
   endif 
  endif 
next
end sub

#######################################################
################# ПЕРЕКЛАД КАМНЕЙ #####################
#######################################################

sub pereklad3() 
   #****???*****# 
   # (C) Cooper 
   #****v1.0****# 
   var tovar = 0x136C
   var istok = 0x40045286
   var priem = 0x40058E8C
   UO.FindType(tovar,'-1','backpack') 
   If UO.FindCount() > 0 then 
      repeat 
         UO.MoveItem('finditem', '0', priem) 
         wait(500) 
         UO.FindType(tovar,'-1','backpack') 
      until not UO.FindCount() 
      UO.Print('Все переложил') 
   else 
      UO.Print('Нечего перекладывать') 
   endif 
end sub

########################################################
############# ТЕЛЕПОРТ ДОМОЙ ###########################
########################################################

sub Home()
   UO.Recall('0x400482CD','1') ##### 1 номер слота ###
   wait(70000)
end sub

########################################################
############# ТЕЛЕПОРТ В ПЕЩЕРУ  1 ########################
########################################################

sub mine1()
   UO.Recall('0x400482CD','2') ;
end sub

########################################################
############# ТЕЛЕПОРТ В ПЕЩЕРУ 2 ########################
########################################################

sub mine2()
   UO.Recall('0x400482CD','3') ;
end sub

########################################################
############# ТЕЛЕПОРТ В ПЕЩЕРУ 3 ########################
########################################################

sub mine3()
   UO.Recall('0x400482CD','4') ; не трогать =)
end sub

########################################################
############# СЧЕТЧИК ШАГОВ ############################
########################################################

###UO.print("Точка номер "+str(i) +" Осталось еще обойти=  " +str(58-i))###

########################################################
############# ВОСКРЕШАЕМСЯ 1 ###########################
########################################################

sub ress()
    uo.WarMode(0)
   Walker(1263,1226,1)
   Walker(1261,1251,1)
   Walker(1270,1254,1)
   wait(500000)
   uo.usefromground('0x0005')
   wait(10000)
end sub

########################################################
############ ВОСКРЕШАЕМСЯ 2 ############################
########################################################

sub ress1()
    uo.WarMode(0)
   Walker(1239,1247,1)
   Walker(1243,1245,1)
   Walker(1258,1245,1)
   Walker(1269,1255,1)
   wait(500000)
   uo.usefromground('0x0005')
   wait(10000)
end sub

sub main5()
   Walker(1260,1221,1)
end sub

#########################################################
################ КОПАЕМ #################################
#########################################################

sub minround() 
   VAR Kirka = '0x0E85'   ; 
   VAR TileNum = '1339'   ; 
   VAR x, y, t, k, a
   VAR MaxTime = 100   ; 
   VAR ms1 = "There is nothing" 
   VAR ms2 = "You cannot mine" 
   VAR ms3 = "You put the" 
   VAR ms4 = "You loosen some rocks" 
   VAR ms5 = "reach that." 
   VAR ms6 = "Try mining" 
   VAR ms7 = "You have no" 
   VAR ms8 = "You must wait" 
   VAR ms9 = "Iron"
   VAR ms10 = "Copper"
   VAR ms11 = "Silver"
   for y=0 to 2 
      for x=-2 to 2 
         k = 0
         repeat
                hide()
            UO.DeleteJournal() 
            t = UO.Timer() 
            k = k + 1
            wait(300) 
            UO.WaitTargetTile( 0, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0) 
            UO.UseType( Kirka )
            repeat 
               wait(500)
            until UO.InJournal(ms1) OR uo.dead() OR uo.life == 0 OR UO.InJournal(ms2) OR UO.InJournal(ms9) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR UO.InJournal(ms8) OR ((t + MaxTime) < UO.Timer()) 
         until uo.life == 0 OR uo.dead() OR k > 25 OR UO.InJournal(ms9) OR UO.InJournal(ms10) OR UO.InJournal(ms11) OR ( NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms3) AND NOT UO.InJournal(ms9) AND NOT UO.InJournal(ms10))
         next
         next
end sub

#############################################################
##################### ПРЯЧЕМСЯ ##############################
#############################################################

sub hide() 
if not uo.hidden() then
uo.WarMode(0)
uo.useskill('Hiding')
wait(4000)
end if
end sub

############################################################
############# ПЕРЕХОДНИК ###################################
############################################################

sub perexod()
UO.Exec('terminate main')
wait(1000)
uo.exec('exec main')
end sub

############################################################
################ ДОБОР РЕГОВ ###############################
############################################################

sub CheckingItems() 
VAR b 
VAR Sunduk1 = 0x4004D626 ######## ТИП СУНДУКА С РЕГАМИ ####
DIM Reg[3] 
Reg[0] = '0x0F7A' #Black Pearl# 
Reg[1] = '0x0F7B' #Bood Moss# 
Reg[2] = '0x0F86' #Mandrake Root# 
uo.useobject(Sunduk1)
for b = 0 to 2 
if uo.count(Reg[b]) < 5 then 
uo.findtype(Reg[b], '-1', Sunduk1) 
if uo.findcount() > 0 then 
uo.moveitem('finditem', '10') 
wait(1000) 
else 
uo.print('Нет необходимого количества регов в сундуке') 
return 
endif 
endif 
next
end sub

########################################## ХОДИЛКА 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=7 #Увеличение MaxTraceDistance при исчерпании количества ходов
var LimitTrace=20 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет).
var Speed=1 
var StepTimeOut=500 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.
# Для ходьбы - 500+Ping
# Для бега/ходьбы на лошади - 300+Ping
# Бег на лошади - 150 + Ping

var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.
var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.

sub ttt()
walker(1165,1661,1)
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 ##########################
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Автономный мининг

Post by Mirage »

не знаю как на шарде uo-dominaria.ru но на большинстве сферовых шардах с онлайном >1 у тебя скрипт умрет на раз.

1) нет реконектора
2) не переключает вармод перед копкой - тебя атачат и будут спокойно стоять и смотреть как ты будешь пытаться копать в вар моде.
3) зачем в модуле копания строки
VAR ms9 = "Iron"
VAR ms10 = "Copper"
VAR ms11 = "Silver"
4) нет проверки на поломку инструмента
5) собственно добора инструментов тоже нет.
5) помоему ты не Cooper
6) зачем такие скрипты в этой теме постить?
Post Reply