Yoko
http://forum.yoko.com.ua/

Помогите
http://forum.yoko.com.ua/viewtopic.php?f=20&t=17712
Page 1 of 1

Author:  vertijok2000 [ 2016-01-19 16:44:43 ]
Post subject:  Помогите

Code:
sub main() 
   var mx, my, mz, i, j, f
   mx = UO.GetX('self')
   my = UO.GetY('self')
   mz = UO.GetZ('self')
   GetPickaxe()
   for i = mx-1 to mx+1
      for j = my -1 to my+1
         repeat
            if uo.Weight> 100 then
               sbroska()               
            end if
            if uo.Weight> 100 then
               gosunduk()               
            end if
            if uo.injournal('You loosen some rocks but fail') then
               wait(100)
            endif
            UO.Print('Êîïàåì â êîîðäèíàòàõ: '+str(mx-i)+' '+str(my-j))
            DigAhole(i,j,mz)
            ress()
         until not uo.injournal('You loosen some rocks but fail')
      next
   next
endsub

sub GetPickaxe()
   var n
   dim instrument[4]
   instrument[1]='0x0F39'
   instrument[2]='0x0F3A'
   instrument[3]='0x0E86'
   instrument[4]='0x0E85'
   for n=1 to 4
      uo.findtype(instrument[n],-1,'my')
      if uo.findcount() then
         pickaxe=uo.getserial('finditem')
         return
      endif
   next   
   while 1
      uo.print(' pickaxe not found ')
      wait(3000)
   wend
endsub
sub DigAhole(i,j,mz)
   var f
   for f=0 to 10
      checklag()
      uo.waittargettile('1341',i,j,mz)
      uo.useobject(pickaxe)
      if waitforore()==1 then
         return
      endif
   next
endsub
sub waitforore()
   var n
   for n=0 to 50
      if uo.injournal('There is nothing here|Try mining|far away|in rock|You cannot|You put') then
         return 1
      endif
      if uo.injournal('but fail') then
         return
      endif
      wait(500)
   next
endsub
sub CheckLag()
   repeat
      UO.DeleteJournal()
      UO.Click('backpack')
   until backpack()==1
endsub
sub backpack()
   var n
   for n=0 to 200
      if uo.injournal('a backpack') then
         return 1
      endif
      wait(200)
   next
endsub


помогите пожалуйста как переделать так что бы он копал 1 раз если ирон а если другая руда то до конца

Author:  kobol [ 2016-01-19 21:31:15 ]
Post subject:  Re: Помогите

Попробуй

if uo.injournal('There is nothing here|Try mining|far away|in rock|You cannot|You put|iron') then

ну или с большой буквы, как он там пишет

Author:  vertijok2000 [ 2016-01-19 22:22:10 ]
Post subject:  Re: Помогите

может ты не правильна меня понял но он копает по одному разу а мне надо чтобы он ток ирон копал по одному разу :D

Author:  vertijok2000 [ 2016-01-27 19:03:04 ]
Post subject:  Re: Помогите

пожалуста помогите

Author:  kobol [ 2016-01-27 20:32:22 ]
Post subject:  Re: Помогите

Ну может так

Code:
for n=0 to 50

      if uo.injournal('There is nothing here|Try mining|far away|in rock|You cannot|iron') then
           # если ничего нет или не скала или слишком далеко или не может или железо - то прекращает копать
         return 1
      endif
      wait(500)
   next


Мне у себя не проверить.

Author:  Mirage [ 2016-01-27 20:54:38 ]
Post subject:  Re: Помогите

You put убери. Это проверка на завершение. С "You put" действие прекращается после любого выкапывания.

iron или Iron добавить

Author:  vertijok2000 [ 2016-01-27 21:15:00 ]
Post subject:  Re: Помогите

спс с этим всю норм зделал всё сам спс за помощь

Author:  vertijok2000 [ 2016-01-27 23:25:24 ]
Post subject:  Re: Помогите

есть такой вопрос можно как то зделать так чтобы он вернулся обратно на то место где копал до того как отнёс руду к дому
вот ходилка
Code:
var MaxTraceDistance=10 
var TraceLoopIncrease=5
var LimitTrace=20
var Speed=3
var StepTimeOut=350 #??????? ????
#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 ##########################



Author:  Mirage [ 2016-01-28 11:45:33 ]
Post subject:  Re: Помогите

Ты каждый раз будешь по кусочку выкладывать и спрашивать как изобразить что что в другом кусочке? :)

Code:
            if uo.Weight> 100 then
               sbroska()               
            end if
            if uo.Weight> 100 then
               gosunduk()               
            end if


Вот пример как в скрипте организован переход из пукта В в пункт А. Как он в пещеру идет/летит - в скрипте не показано. Если ты копаешь одну пещеру возле дома и просто ходишь туда сюда то решение одно, если пещер много и ты прыгаешь по рункам и просто обкапываешь вокруг себя решение другое.

У меня было сделано следующим образом:
Cкрипт запускался возле дома, чар брал инструменты и шел в начальную точку пещеры. Запоминались координаты XStart YStart. Чар ходил по точкам пещеры и копал, после набора веса запоминалась точка где чар стоял как XStop YStop, чар возвращался в начальную точку и из неё шел домой. После сброса чар возвращался в начальную точку пещеры и из неё переходил в XStop YStop. Так чар обкапывал всю пещеру до тайла и не тратил лишнего времени на обкоп/обход пустых точек.

Author:  vertijok2000 [ 2016-01-28 12:25:55 ]
Post subject:  Re: Помогите

Code:
sub main() 
   var mx, my, mz, i, j, f
   var MyX=uo.getx()
   var MyY=uo.gety()
   mx = UO.GetX('self')
   my = UO.GetY('self')
   mz = UO.GetZ('self')
   GetPickaxe()
   for i = mx-2 to mx+2
      for j = my -2 to my+2
         repeat
            if uo.Weight> 100 then
               sbroska()               
            end if
            if uo.Weight> 100 then
               gosunduk()
               Walker(MyX,MyY,0)               
            end if
            CheckLag()
            if uo.injournal('You loosen some rocks but fail|Steel|Copper|Bronze|Meteor|Gold|Black Steel|Silver|Platinum|You put the Dark crystal|You put the Lava') then
               wait(100)
            endif
            UO.Print('Êîïàåì â êîîðäèíàòàõ: '+str(mx-i)+' '+str(my-j))
            DigAhole(i,j,mz)
            ;ress()
            ;ress2()
         until not uo.injournal('You loosen some rocks but fail|Steel|Bronze|Meteor|Gold|Black Steel|Silver|Platinum|You put the Dark crystal|You put the Lava')
      next
   next
endsub
спс всем нашол решения теперь пока работает на ура

Author:  vertijok2000 [ 2016-01-29 08:50:38 ]
Post subject:  Re: Помогите

по поводу кирки уже не надо что то зделал хз сам что но уже работает

Page 1 of 1 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/