Yoko

All sides of Injection
It is currently 2017-11-18 14:14:50

All times are UTC+02:00




Post new topic  Reply to topic  [ 11 posts ] 
Author Message
 Post subject: Помогите
PostPosted: 2016-01-19 16:44:43 
Offline

Joined: 2015-11-26 10:16:44
Posts: 47
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 раз если ирон а если другая руда то до конца


Top
   
 Post subject: Re: Помогите
PostPosted: 2016-01-19 21:31:15 
Offline
User avatar

Joined: 2012-12-15 12:03:25
Posts: 119
Location: C-Петербург
Попробуй

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

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


Top
   
 Post subject: Re: Помогите
PostPosted: 2016-01-19 22:22:10 
Offline

Joined: 2015-11-26 10:16:44
Posts: 47
может ты не правильна меня понял но он копает по одному разу а мне надо чтобы он ток ирон копал по одному разу :D


Top
   
 Post subject: Re: Помогите
PostPosted: 2016-01-27 19:03:04 
Offline

Joined: 2015-11-26 10:16:44
Posts: 47
пожалуста помогите


Top
   
 Post subject: Re: Помогите
PostPosted: 2016-01-27 20:32:22 
Offline
User avatar

Joined: 2012-12-15 12:03:25
Posts: 119
Location: C-Петербург
Ну может так

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


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


Top
   
 Post subject: Re: Помогите
PostPosted: 2016-01-27 20:54:38 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2754
Location: Иваново
You put убери. Это проверка на завершение. С "You put" действие прекращается после любого выкапывания.

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

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"


Top
   
 Post subject: Re: Помогите
PostPosted: 2016-01-27 21:15:00 
Offline

Joined: 2015-11-26 10:16:44
Posts: 47
спс с этим всю норм зделал всё сам спс за помощь


Top
   
 Post subject: Re: Помогите
PostPosted: 2016-01-27 23:25:24 
Offline

Joined: 2015-11-26 10:16:44
Posts: 47
есть такой вопрос можно как то зделать так чтобы он вернулся обратно на то место где копал до того как отнёс руду к дому
вот ходилка
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 ##########################




Top
   
 Post subject: Re: Помогите
PostPosted: 2016-01-28 11:45:33 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2754
Location: Иваново
Ты каждый раз будешь по кусочку выкладывать и спрашивать как изобразить что что в другом кусочке? :)

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


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

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

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"


Top
   
 Post subject: Re: Помогите
PostPosted: 2016-01-28 12:25:55 
Offline

Joined: 2015-11-26 10:16:44
Posts: 47
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
спс всем нашол решения теперь пока работает на ура


Last edited by vertijok2000 on 2016-01-29 11:55:17, edited 1 time in total.

Top
   
 Post subject: Re: Помогите
PostPosted: 2016-01-29 08:50:38 
Offline

Joined: 2015-11-26 10:16:44
Posts: 47
по поводу кирки уже не надо что то зделал хз сам что но уже работает


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 11 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: Bing [Bot] and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited