| Yoko http://forum.yoko.com.ua/ |
|
| Нужен скрипт на копку (уже море перепробовал) http://forum.yoko.com.ua/viewtopic.php?f=17&t=13410 |
Page 1 of 1 |
| Author: | CrazyBeast [ 2008-03-24 18:26:48 ] |
| Post subject: | Нужен скрипт на копку (уже море перепробовал) |
Короче нужен скрипт на копку в скалах (круговую) с определением объектов (то есть чтобы не пробовал на земле копать). Пофиг чем лопатой или киркой, главное чтобы он начинал копать после сообщения о результате... желательно конечно скрипт с добавлением маршрута по которому будет происходить перемещение в случае истощения всех возможных источников вокруг. И если не трудно поставить возвращение на базовую позицию и повтор действий. Желательно чтобы вы протестили его сами либо дайте асю чтобы удобнее было править когда я начну тест... |
|
| Author: | Incognito2008 [ 2008-03-24 18:38:13 ] |
| Post subject: | |
поищи тут есть хороший скрипт , работает на оскоме работает на абисе, всё отлично , что ты там пробывал не известно или запускал не правильно =) у меня всё гуд |
|
| Author: | Perun [ 2008-03-25 17:08:28 ] |
| Post subject: | Re: Нужен скрипт на копку (уже море перепробовал) |
у меня есть вот такой скриптик и я им капаю уже долгое время ,по скалам ! sub Min2() while not UO.Hidden() #ХИДИМСЯ UO.Warmode("0") uo.print("Прячемся...") UO.UseSkill("Hiding") wait(4500) var r,y,z,x VAR LastTimer UO.Set('finddistance','2') z=UO.GetZ("self") while not Uo.Dead () repeat for x=-2 to 2 for y=-2 to 2 r=0 Repeat r=r+1 if UO.InJournal('TORMOZ') then pause() endif UO.DeleteJournal() UO.Warmode("0") UO.WaitTargetTile("1341",STR(UO.GetX()+x),STR(UO.GetY()+Y),str(z)) UO.UseType('0x0E85') LastTimer=UO.Timer() Repeat wait(500) Until UO.InJournal("You put") or UO.InJournal("can't see") or UO.InJournal("heavy") or UO.InJournal("location") or UO.InJournal("no ore") or UO.InJournal("but fail") or UO.InJournal("far away") or UO.InJournal("in rock") or UO.InJournal("must wait") or UO.InJournal("nothing") or UO.InJournal("elsewhere") or UO.InJournal("where it") OR UO.Timer()>LastTimer+200 Until UO.InJournal("nothing")or UO.InJournal("so close") or UO.InJournal("elsewhere") or UO.InJournal("no ore here") or UO.InJournal("location") or UO.InJournal("far away") or UO.InJournal("in rock") or UO.InJournal("where it") or ( r>15) if UO.Weight>730 then endif ;wait(2000) ; раскоментировать при копке лопатой next next end sub sub hod() var y y=400 ###--<<<--<<<--### MAX ВЕС repeat If UO.Weight>y then bank() Endif Walker(2221, 474, 0) # РАЗ Min2() If UO.Weight>y then bank() Endif Walker(2223, 471, 0) # ДВА Min2() If UO.Weight>y then bank() Endif Walker(2225, 466, 0) # 4!? 3 - удалили ) Min2() If UO.Weight>y then bank() Endif Walker(2229, 462, 0) # 5 Min2() If UO.Weight>y then bank() Endif Walker(2233, 456, 0) # ШЕСТЬ Min2() If UO.Weight>y then bank() Endif Walker(2237, 455, 0) # СЕМЬ Min2() If UO.Weight>y then bank() Endif Walker(2243, 449, 0) # 3 - удалили ) значит опять 7 =) Min2() If UO.Weight>y then bank() Endif Walker(2250, 435, 0) # 8 Min2() If UO.Weight>y then bank() Endif Walker(2251, 432, 0) # 9 Min2() If UO.Weight>y then bank() Endif Walker(2254, 423, 0) # 10 Min2() If UO.Weight>y then bank() Endif Walker(2255, 414, 0) # 11 Min2() If UO.Weight>y then bank() Endif Walker(2254, 406, 0) # 12 Min2() until 0 end sub sub bank() # Walker(2199, 484, 0) Walker(2199, 484, 0) #Дом while not UO.Hidden() #ХИДИМСЯ UO.Warmode("0") uo.print("Прячемся...") UO.UseSkill("Hiding") wait(4000) #sub loot() ; перекладка руды в сундук if uo.waiting() then uo.canceltarget() endif VAR a,Exit VAR UnloadCont='0x401E4411' ; АЙДИ сундука для руды 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.SetReceivingContainer(UnloadCont) wait(500) For a=0 to 3 Exit=0 repeat UO.FindType(Ore[a]) if UO.GetQuantity('finditem')>0 then UO.Grab('0','finditem') wait(1500) Else Exit=1 endif until Exit==1 Next UO.UnSetReceivingContainer() Walker(2199, 484, 0) #Дом Walker(2199, 484, 0) end sub sub banka() # Меняем на дом \|/ var exit,a Walker(2199, 484, 0) #home #Walker(292, 316, 0) #Walker(313, 316, 0) #Walker(343, 332, 0) #Walker(362, 332, 0) uo.say ('BANK') uo.SetReceivingContainer('0x4000CF25') wait(500) for a=0 to 0 Exit=0 repeat uo.FindType(0x19B8) if uo.GetQuantity('finditem')>0 then uo.Grab('0','finditem') wait(1500) else Exit=1 end if until Exit==1 uo.SetReceivingContainer('0x4000CF25') wait(500) for a=0 to 0 Exit=0 repeat uo.FindType(0x19B9) if uo.GetQuantity('finditem')>0 then uo.Grab('0','finditem') wait(1500) else Exit=1 end if until Exit==1 Walker(2196, 488, 0) #home Walker(2220, 472, 0) #Walker(292, 316, 0) #Walker(292, 309, 0) #Walker(250, 266, 0) endsub ########################################## ХОДИЛКА 3 ########################## #var Prec=3 # Как близко следует подойти к цели (Precision) #var MaxTraceDistance=3 #было 15 Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень #большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву. #var Speed=1 # Длина шага. Сколько шагов делать за раз. Выше 3 ставить смысла нет. Тоесть тупое умножение шагов. Для ламбера #идеально 3, для майнинга - 1. #var StepTimeOut=500 # Если уперлись в неопознанный обьект, сколько мсек ждать сдвига с места. Если по простому - таймаут #шага. Если поставить сильно маленькие, ходилка начнет трассировать пустые места. #UO.SetGlobal("Logging","1") # - показывать отладочные сообщения. #UO.SetGlobal("BlindWalk","1") # - не использовать проверку тайлов, а использовать ходьбу наощупь. Для майнинга ОБЯЗАТЕЛЬНО #ВКЛЮЧИТЬ. #В функции IsPass, содержиться список проходимых тайлов. #Walker(X,Y,Prec) - идем к цели с координатами X,Y. Ничего не возвращает. #Tracer(StartDir,Direction) - трассировка 1 шага. Возвращает направление по которому получилось сдвинуться с места. StartDir #- направление последнего движения, Direction (-1 или +1) направление обхода. -1 - по часовой стрелке, +1 против часовой #стрелки. Направления скрипт использует личного формата: #1 - влево вниз #2 - вниз #3 - вправо вниз #4 - вправо #5 - вправо вверх #6 - вверх #7 - влево вверх #8 - влево #Tracer(StartDir,Direction) - идеально подходит для рыбалки вдоль берега так как она будет обходить берег бесконечно (1 #запуск функции = 1 шаг обхода). ##################################################### # WW W WW AA LL Kk KK EE EE RRR # # WW W WW AA A LL Kk K EEE R R # # WW W WW AA A LL KKK EEEEE R R # # WW WW WW AAAA LL KKK EEE RRR # # WWW WWW AA A LLLL KK Kk EE EE R RR # #################################################### #var Prec=0 var MaxTraceDistance=5 var Speed=2 var StepTimeOut=400 Sub Walker(GoX,GoY,Prec) UO.SetGlobal("Logging","0") UO.SetGlobal("BlindWalk","0") var LastDir UO.SetGlobal("GlobalGoX",str(GoX)) UO.SetGlobal("GlobalGoY",str(GoY)) while not IsEnd(GoX,GoY,Prec) LogInfo('Just walking') LastDir=GoUntilHit(GoX,GoY,Prec) if not IsEnd(GoX,GoY,Prec) then LogInfo('Tracing') FullAroundTrace(LastDir,GoX,GoY,Prec) end if wend end sub Sub FullAroundTrace(StartDir,GoX,GoY,Prec) 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 endif if MovesDone>0 and PrevMoveCross(GetDirToDir(UO.GetDir(),Prec),LineX,LineY,GoX,GoY,StartX,StartY,Prec) then return end if MovesDone=MovesDone+1 CurDir=AddToDir(CurDir,-Direction,Prec) until MovesDone>MaxTraceDistance 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 GoDir(Dir,Prec) repeat EndDir=GetDirToDir(UO.GetDir(),Prec) wait(100) Counter=Counter+1 until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=8 if Counter>=8 then return 0 end if if StartY<>UO.GetY() or StartX<>UO.GetX() then return Dir else GoDir(Dir,Prec) repeat wait(100) Counter=Counter+1 until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/100 if Counter>=StepTimeOut/100 then LogInfo('Step timeout reached') return 0 else return Dir end if 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 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 надо поменять кординаты к дому и кординаты где копать ,айди сейфа и запустить Hod и усё ! |
|
| Page 1 of 1 | All times are UTC+02:00 |
| Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |
|