Не могу доработать 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