Помогите

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
vertijok2000
Posts: 61
Joined: 2015-11-26 10:16:44

Помогите

Post by vertijok2000 »

Code: Select all

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 раз если ирон а если другая руда то до конца
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Помогите

Post by kobol »

Попробуй

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

ну или с большой буквы, как он там пишет
vertijok2000
Posts: 61
Joined: 2015-11-26 10:16:44

Re: Помогите

Post by vertijok2000 »

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

Re: Помогите

Post by vertijok2000 »

пожалуста помогите
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Помогите

Post by kobol »

Ну может так

Code: Select all

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
Мне у себя не проверить.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Помогите

Post by Mirage »

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

iron или Iron добавить
vertijok2000
Posts: 61
Joined: 2015-11-26 10:16:44

Re: Помогите

Post by vertijok2000 »

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

Re: Помогите

Post by vertijok2000 »

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

Code: Select all

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 ########################## 


Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Помогите

Post by Mirage »

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

Code: Select all

            if uo.Weight> 100 then
               sbroska()               
            end if
            if uo.Weight> 100 then
               gosunduk()               
            end if
Вот пример как в скрипте организован переход из пукта В в пункт А. Как он в пещеру идет/летит - в скрипте не показано. Если ты копаешь одну пещеру возле дома и просто ходишь туда сюда то решение одно, если пещер много и ты прыгаешь по рункам и просто обкапываешь вокруг себя решение другое.

У меня было сделано следующим образом:
Cкрипт запускался возле дома, чар брал инструменты и шел в начальную точку пещеры. Запоминались координаты XStart YStart. Чар ходил по точкам пещеры и копал, после набора веса запоминалась точка где чар стоял как XStop YStop, чар возвращался в начальную точку и из неё шел домой. После сброса чар возвращался в начальную точку пещеры и из неё переходил в XStop YStop. Так чар обкапывал всю пещеру до тайла и не тратил лишнего времени на обкоп/обход пустых точек.
vertijok2000
Posts: 61
Joined: 2015-11-26 10:16:44

Re: Помогите

Post by vertijok2000 »

Code: Select all

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.
vertijok2000
Posts: 61
Joined: 2015-11-26 10:16:44

Re: Помогите

Post by vertijok2000 »

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