Не могу доработать Mining. Трабл с элемами.

Ask for scripts here

Moderators: Murderator+, Murderator

Post Reply
prisoner
Posts: 14
Joined: 2011-01-12 21:27:50

Не могу доработать Mining. Трабл с элемами.

Post by prisoner »

Опять переделал скриптик. В общем копка, выгрузка и килл элемов.
Проблемы:
1. После кила элема чар куда-то идет а не возобновляет копку.
2. Не понимаю что изменить в ходилке чтобы чар вставал рядом с элемом а не на его месте - стамину снимает за проход по мобу.

Code: Select all

var MaxTraceDistance=10 
var TraceLoopIncrease=5 #Увеличение MaxTraceDistance при исчерпании количества ходов
var LimitTrace=25 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет).
var Speed=1
var StepTimeOut=500 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.
var CheckCnt=1 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.
var DynamicPause=10 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.
var TryRecall=1
uo.exec("set norbcheck 1")
uo.exec("set norbcalc 1")
VAR UnloadCont='0x40131140' #сундук для руды 
var LoadCont='0x40130C9E'   #сундук с реколами, инвизками.
var s=500 #Максимальный вес

#Marking запускает процедуру маркировки точек копки. Для завершения указать на себя.

sub Runebook()
uo.print('Runebook:')
uo.exec('addobject Runebook')
while uo.targeting()
   wait(100)
wend
End Sub

sub start()
uo.Exec('exec terminate')
uo.Exec('exec Enemy')
uo.exec('exec healing')
uo.exec('exec main')
End sub

sub Marking()
var i,s=0,flag=0
var f=file("c:\rock.txt")
dim RockX[500],RockY[500],RockT[500]
var Count=0

while not flag ==1
   uo.usetype ('0x0E85')
   WaitForTarget()
   while uo.targeting()
   wait(100)
   wend   
   if  uo.LastTile(1)==UO.GetX("self") then
      if uo.lastTile(2)==UO.GetY("self")  then
         flag=1
      endif
   endif
   
   if flag == 0 then
      RockX[Count]=uo.LastTile(1)
      RockY[Count]=uo.lastTile(2)
      RockT[Count]=uo.LastTile(0)
      uo.print('Найдена кочка № '+str(count)+': x='+str(uo.lasttile(1))+' y='+str(uo.lastTile(2)))
      Count = Count+1
   endif   
wend
uo.print ("Найдено " + str(Count) + " кочек")
f.open()
f.create()
s=safe call f.writeln(Count)
   for i=0 to Count-1
   s=safe call f.writeln(str(RockT[i])+' '+str(RockX[i])+' '+str(RockY[i]))
   next
f.close()
end sub
#################################################

Sub main()
var i,flag,j
var Count
var f=file("c:\rock.txt")
dim RockX[500],RockY[500],RockT[500]
uo.deletejournal()

###############Загружаем из файла################
f.open()
Count=safe call f.readNumber()
uo.print("Загружено "+str(Count)+ " кочек")

for i=0 to Count-1
RockT[i]=safe call f.ReadNumber()
RockX[i]=safe call f.ReadNumber()
RockY[i]=safe call f.ReadNumber()
next
f.close()

###############Ходим по координатам##############
while not uo.dead()
uo.deletejournal()
   if Count>0 then
   for i=0 to Count-1
      flag=0
      j=0
      uo.print('Go to '+str(i)+': x='+str(Rockx[i])+' y='+str(RockY[i]))

      while not flag==1
         flag=Walker(RockX[i],RockY[i],1)
         wait(100)
      wend
       
uo.deletejournal()
mining()
   next
   endif
wend
uo.print("Complete")
end sub
##################################################################

Sub mining()
var x,y,z, n
VAR LastTimer
for var i=0 to 50
UO.Set('finddistance','2')
   z=UO.GetZ("self")
   for x=-2 to 2
   for y=-2 to 2
   UO.Print(str(x)+" "+str(y))
      UO.Press(9)
      wait(100)
      UO.WaitTargetTile("1341",STR(UO.GetX()+x),STR(UO.GetY()+Y),str(z))
      UO.UseType('0x0E85')
      LastTimer=UO.Timer()
      Repeat
         wait(100)
      Until uo.InJournal('There is nothing here to mine for.') or uo.InJournal('That is too far away.') or uo.InJournal('You cannot mine so close to yourself.') or uo.InJournal('You have no line') or uo.InJournal('You stop Mining') or uo.InJournal('Try mining elsewhere.') or uo.InJournal('is attacking you') or uo.InJournal('You fail to do that! You are hungry!') or UO.Timer()>LastTimer+500 or uo.weight>s
      End If
      If uo.weight>s Then
         x=2
         y=2
         back()
      End If
   UO.DeleteJournal()
   If uo.dead() Then
      uo.exec('terminate all')
   End If
   sbros()
   Next
Next
end sub

Sub save()
var Time=time()
   UO.Press(9)
   Wait(100)
   uo.say('.drink invis')
   wait(100)
   uo.textopen()
   uo.textprint('Elemental!')
   UO.TextPrint(SAFECALL Time())
   uo.recall('Runebook', 2)
   wait(15000)
   uo.say('Bank')
   unload()
   uo.exec('terminate all')
end sub

Sub back()
UO.Press(9)
wait(100)
ToUnload()
Load()
ToMine()
end sub

Sub sbros()
var i,j
Dim OreType[3]
OreType[01]='0x19B9' ## 1 ore
OreType[02]='0x19B9' ## 2 ore
OreType[03]='0x19B8' ## 3 ore

Dim OreColor[8] ## Сброс руды
OreColor[1] = '0x06D6' ### Marganec
OreColor[2] = '0x060C' ### Corrundum
OreColor[3] = '0x052D' ### Tin
OreColor[4] = '0x04C2' ### Tourmaline
OreColor[5] = '0x0488' ### Bronze
OreColor[6] = '0x084D' ### Lead

for j=1 to 3
for i=1 to 6
uo.findtype(OreType[j],OreColor[i],'backpack')
while uo.findcount()>0
uo.drop('-1',str(uo.getx()),str(uo.gety()),0,"finditem")
wait(1500)
uo.findtype(OreType[j],OreColor[i],'backpack')
wend
next
next
end sub

#######
Sub WaitForTarget()
for var i=0 to 50
if uo.Targeting()==1 then
return 1
end if
wait(200)
next
return 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) OR (GoDir==7) then
      return -1
    else
      return 1
    end if
  else
    if (GoDir==1) or (GoDir==5) 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
 
   LogInfo('Start cross check')
 
  var ua1=(x4-x3)*(y1-y3)-(y4-y3)*(x1-x3)
  var ub1=(y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
 
  var ua2=(x2-x1)*(y1-y3)-(y2-y1)*(x1-x3)
  var ub2=(y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
 
  #Check for parallel lines
  if (ub1 == 0) or (ub2 == 0) then
   return false
  end if

  var u1=ua1/ub1
  var u2=ua2/ub2
 
  if IsDiap(u1,0,1,0.01) and IsDiap(u2,0,1,0.01) then
    LogInfo('Vectors crossing 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
  else
  LogInfo('End cross check')
    return false
  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

Sub Numb(num)
if num>=0 then
return num
else
return num*(-1)
end if
end sub

Sub unload()
var Time=time()
if uo.waiting() then
uo.canceltarget()
endif
VAR a,Exit

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.useobject(UnloadCont)
UO.TextOpen('')
UO.TextPrint('Выгрузка')
UO.TextPrint(SAFECALL Time())
UO.TextPrint('')
wait(500)
For a=0 to 3
Exit=0
repeat
UO.FindType(Ore[a],'backpack')
if UO.GetQuantity('finditem')>0 then
UO.Moveitem('finditem','0',UnloadCont)
CheckLag()
wait(1500)
Else
Exit=1
endif
until Exit==1
Next
wait(100)
uo.useobject(LoadCont)
wait(1000)
uo.FindType('0x183B','backpack')
if UO.GetQuantity('finditem')>0 then
   UO.Moveitem('finditem','-1',LoadCont)
End If
wait(500)
uo.FindType('0x09AA','backpack')
if UO.GetQuantity('finditem')>0 then
   UO.Moveitem('finditem','-1',LoadCont)
End If
end sub

Sub load()
uo.useobject(LoadCont)
wait(1000)
CheckLag()
uo.FindType('0x183B',-1,LoadCont) #Берем инвизку
if UO.GetQuantity('finditem')>0 then
   uo.Grab('4','finditem')
End If
wait(1000)
CheckLag()
uo.FindType('0x1F4C',-1,LoadCont) #Берем реколы
if UO.GetQuantity('finditem')>0 then
   uo.Grab('10','finditem')
End If
wait(1000)
CheckLag()
wait(500)
uo.recall('Runebook', 1)
wait(1000)
CheckLag()
uo.FindType('0x1F4C','backpack') #Выгружаем реколы
UO.Moveitem('finditem','-1',LoadCont)
end sub

Sub ToUnload()
If uo.mana<25 Then
uo.useskill('Meditation')
End If
While uo.mana<25
   wait(100)
Wend   
uo.recall('Runebook', 2)
WaitRecall()
wait(500)
uo.say('Bank')
wait(1000)
unload()
end sub

Sub ToMine()
uo.useskill('Meditation')
While uo.mana<25
   wait(100)
Wend
CheckLag()
uo.recall('Runebook', 3)
WaitRecall()
uo.useskill('Meditation')
wait(5000)
end sub

Sub WaitRecall()
var mx
var my
mx = UO.GetX("self")
my = UO.GetY("self")
UO.Warmode("0")
UO.UseSkill("Hiding")
While UO.GetX("self")==mx and UO.GetY("self")==my
   wait(100)
wend
end sub

sub Enemy()
var NoEnemy = 0
UO.Set('finddistance', 30)
While not uo.dead()
UO.Findtype('0x000E',-1, 'ground')
If UO.Findcount() > 0 then
   uo.textopen()
   uo.textprint('Elemental!')
   UO.TextPrint(SAFECALL Time())
   uo.exec('terminate main')
   attack()
   uo.Exec('exec main')
End If
wait(100)
Wend
end Sub

Sub attack()
var mob
var mobX
var mobY
UO.Set('finddistance', 30)
UO.Findtype('0x000E',-1, 'ground')
mob=UO.GetSerial('finditem')
UO.Exec('warmode 1')
wait(100)
uo.usetype('0x13FE')
wait(200)
UO.Attack(mob)
mobX = uo.getX(mob)
mobY = uo.getY(mob)
repeat
Walk(mobX, mobY)
wait(10)
until UO.InJournal('Body of Elemental') or uo.dead(mob)
loot()
UO.DeleteJournal()
wait(2000)
endsub

Sub Healing()
While not uo.dead()
If uo.life < 70 then
   uo.say('.drink heal')
   wait(4000)
End If
wait(100)
Wend
end sub

Sub Walk(x,y)
go:
if uo.getY() > uo.gety("laststatus") then
uo.press(33)
else
uo.press(35)
endif
while not uo.getX() == uo.getx("laststatus")+1 || not uo.getY() == uo.gety("laststatus")+1
if not uo.getX() == uo.getx("laststatus") then
  if uo.getX() > uo.getx("laststatus") then
   if uo.getY() > uo.gety("laststatus") then
    uo.press(38)
   endif
   if uo.getY() < uo.gety("laststatus") then
    uo.press(37)
   endif
   if uo.getY() == uo.gety("laststatus") then
    uo.press(36)
   endif
  endif
  if uo.getX() < uo.getx("laststatus") then   
   if uo.gety() > uo.gety("laststatus") then
    uo.press(39)
   endif
   if uo.gety() < uo.gety("laststatus") then
    uo.press(40)
   endif
   if uo.gety() == uo.gety("laststatus") then
    uo.press(34)
   endif
  endif
endif
if uo.getX() == uo.getx("laststatus") then
  if uo.gety() > uo.gety("laststatus") then
   uo.press(33)
  endif
  if uo.gety() < uo.gety("laststatus") then
   uo.press(35)
  endif
  if uo.gety() == uo.gety("laststatus") then
   wait(10)
  endif
endif
wend
if uo.getx() == uo.getx("laststatus") then
if uo.gety() == uo.gety("laststatus") then
  wait(10)
endif
endif
end sub

Sub loot()
var i
DIM Loot[6]
   Loot[1]=0x0eed; GP
   Loot[2]=0x09AA; Trasure
   Loot[3]=0x19B9 ; 4 and more ore
   Loot[4]=0x19B7 ; 1 ore
   Loot[5]=0x19BA ; 2 ore
   Loot[6]=0x19B8 ; 3 ore
   
   For i=1 to 6
   UO.UseObject('lastcorpse')
   UO.FindType(Loot[i],-1,'lastcorpse')
   If UO.GetQuantity('finditem') then
      UO.Grab(0,'finditem')
      Wait(1600)
   End If
   Next
end sub

Sub CheckLag()
if uo.Waiting()>0 then
uo.Exec('canceltarget')
end if
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(100)
until uo.InJournal('backpack')
end sub

Sub Terminate()
While not uo.dead()
   wait(1000)
Wend
uo.textopen()
uo.textprint('Время смерти:')
UO.TextPrint(SAFECALL Time())
uo.exec('terminate all')
end sub

Sub Time()
Var CurrentTime = UO.Time()
Var Hr  = Mid(STR(CurrentTime),0,2)
Var MIN = Mid(STR(CurrentTime),2,2)
Var SEC = Mid(STR(CurrentTime),4,2)
Return (HR+':'+MIN+':'+SEC)
end sub
Last edited by prisoner on 2011-01-21 18:18:04, edited 1 time in total.
prisoner
Posts: 14
Joined: 2011-01-12 21:27:50

Re: Не могу доработать Mining. Трабл с элемами.

Post by prisoner »

В общем переделал. Собрал куски из ламбера, мининга и ходилку другую.
Только незнаю куда вписать проверку на атаку. Срабатывает только на элемов - после удара киркой. Против ПК не пашет (только если он появится в тот момент когда чар махнет киркой :) )
Makarov
Posts: 62
Joined: 2010-04-07 14:43:26

Re: Не могу доработать Mining. Трабл с элемами.

Post by Makarov »

как вариант: загружай второй скрипт параллельно на проверку постоянную
prisoner
Posts: 14
Joined: 2011-01-12 21:27:50

Re: Не могу доработать Mining. Трабл с элемами.

Post by prisoner »

Пробовал. Процедура копки удаляет журнал. Если сообщение о атаке появляется в момент когда чар копает, то нормально. Если в другой момент, то журнал удаляется. Если только сделать проверку по серийникам. Но незнаю как. Есть примеры таких скриптов?
Makarov
Posts: 62
Joined: 2010-04-07 14:43:26

Re: Не могу доработать Mining. Трабл с элемами.

Post by Makarov »

Тебе журнал не нужен - запусти второй скрипт он будет искать в пределах 30 клеток допустим всех по типу:

Code: Select all

Sub Enemy()
  var NoEnemy = 0
  UO.Set('finddistance', 30)
  UO.Findtype('0x0010','0xFFFF', 'ground') ; '0x0010' - любой элементаль
  IF UO.Findcount() > 0 THEN
    Stealth() ; твоя функция на скилл стелс
    UO.Set('quiet',0)
    UO.Warmode(0)
    ;
    UO.Print('Enemy!!!')
    Repeat
      UO.Findtype('0x0010','0xFFFF', 'ground')
      if UO.Findcount() > 0 then
        wait(20000)
      else
        UO.Print('NoEnemy')
        UO.Set('quiet',1)
        NoEnemy = 1
      endif
    Until NoEnemy==1
  ENDIF
end Sub


Можешь все скрипты в один файл закинуть и вызывать второй скрипт из первого.
prisoner
Posts: 14
Joined: 2011-01-12 21:27:50

Re: Не могу доработать Mining. Трабл с элемами.

Post by prisoner »

О! Спасибо огромное.
prisoner
Posts: 14
Joined: 2011-01-12 21:27:50

Re: Не могу доработать Mining. Трабл с элемами.

Post by prisoner »

Еще вопросы появились. Первый пост обновил.
Post Reply