Суть в том что он использует ламберские координаты деревьев ...
Бегает по лесу и рубит сучки.. летит домой расскладывает их вокруг себя и поджигает .. потом обратно реколиться и покругу.
Code: ################## ### Переменные ### ################## ################################################################################################### var f=file("C:\trees3.dat") ## - Путь к файлу в котором будут хранится координаты деревьев. ### var TryHiding=0 ## 1 - Перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет . ### var TryRecall=1 ## 1 - После того как соберет LogsQty логов, будет пытаться реколиться домой, ### складывать логи в сундук и реколиться обратно , 0 - не будет. ### var UseCamping=1 ## 1 - после того как портировались домой юзать кемпинг, 0 - нет. ### var RechargeBook=0 ## 1 - Включить речарж рунбуки, 0 - отключить речарж. ### var RuneToHome=4 ## - Номер руны Домой,по счёту в рунбуке.(сейчас в 4ом слоте,можно менять от 1-9) ### var RuneToLumber=5 ## - Номер руны в Лес,по счёту в рунбуке.(сейчас в 5ом слоте,можно менять от 1-9) ### var LogsQty=1500 ## - Количество логов, добыв которое надо реколиться домой. ### var Quant=40 ## - Сколько раз чар будет ударять по дереву, прежде чем перейдет к другому.(стандарт - 15) ### var GetFromFile=1 ## 1 - Координаты деревьев будут считыватся из файла, 0 - собиратся из клиента ### (сначала соберите а потом считывайте из файла). ### var EatingFood=1 ## 1 - Будем есть, 0 - нет. ### var TypeFood='0x097B' ## - Тип еды которую будем кушать.(сейчас фиштейки) ### var Chest='0x40203CC2' ## - ID сундука куда будут выгружаться логи, где должны лежать реколы и еда. ### var OldX,OldY,time ## - Для рекола. ### ################################################################################################### ### ### После настройки: ### Идите в лес в котором вы хотите рубить. ### Запустите cкрипт Lumberjacking(), Инжект попросит вас указать Даггер ### (появится прицел, прицелом на топор который вы с собой взяли), ### затем инжект попросит вас указать Рунбук(появится прицел, прицелом на него). ### После этого чар пойдет по координатам и будет вырубать деревья. ########### ### Код ### ########### sub Harvestling() var i=0,j=0,k=0,r=0,q=0,ii,jj var TopX=324,TopY=65 dim TreeX[5000], TreeY[5000],TreeT[5000] dim TreeTile[29] var flag=0,treeCount=0,clicks=0,flag2=0 ######################## ### Графика деревьев ### ######################## TreeTile[0]=3277 TreeTile[1]=3280 TreeTile[2]=3283 TreeTile[3]=3286 TreeTile[4]=3289 TreeTile[5]=3291 TreeTile[6]=3294 TreeTile[7]=3296 TreeTile[8]=3299 TreeTile[9]=3302 TreeTile[10]=3393 TreeTile[11]=3394 TreeTile[12]=3395 TreeTile[13]=3396 TreeTile[14]=3415 TreeTile[15]=3416 TreeTile[16]=3417 TreeTile[17]=3418 TreeTile[18]=3419 TreeTile[19]=3438 TreeTile[20]=3439 TreeTile[21]=3440 TreeTile[22]=3441 TreeTile[23]=3442 TreeTile[24]=3460 TreeTile[25]=3461 TreeTile[26]=3462 TreeTile[27]=3290 TreeTile[28]=3288
uo.Exec("filterspeech on") uo.Exec("filterspeech add 'Where do you want to use the pickaxe?'")
uo.Print('Выбери Даггер: ') uo.Exec('addobject dagger') while uo.Targeting() wait(100) wend
if TryRecall==1 then uo.Print('Выбери PунБук: ') uo.Exec('addobject Runebook') while uo.Targeting() wait(100) wend end if
##################################### ### Загружаем координаты из файла ### ##################################### if GetFromFile==1 then uo.Print('Загружаем координаты из файла...') f.open() treeCount=safe call f.ReadNumber() for i=1 to treeCount TreeT[i]=safe call f.ReadNumber() TreeX[i]=safe call f.ReadNumber() TreeY[i]=safe call f.ReadNumber() next f.close() else ###################################### ### Собираем координаты из клиента ### ###################################### uo.Print('Выбери Кирку: ') uo.Exec('addobject Pickaxe') while uo.Targeting() wait(100) wend uo.Print('Собираем координаты деревьев в округе...') repeat clicks=0 flag=0 uo.DeleteJournal() ####################### ### Кликаем на тайл ### ####################### uo.UseObject('Pickaxe') waitForTarget() uo.DeleteJournal() WaitForTryRock() ############################### ### Проверяем дерево ли это ### ############################### flag=0 for k=0 to 28 if uo.LastTile(0)==TreeTile[k]+1 then flag=2 end if next if flag==0 then for k=0 to 28 if uo.LastTile(0)==TreeTile[k] then flag=1 end if next end if if uo.Lasttile(1)==uo.GetX() and uo.Lasttile(2)==uo.GetY() then flag=3 end if ######################### ### Кликнули на ствол ### ######################### if flag==1 then flag2=0 if treeCount>0 then for ii=1 to treeCount if TreeX[ii]==uo.LastTile(1) and TreeY[ii]==uo.LastTile(2) then flag2=1 end if next end if if flag2==0 then treeCount=treeCount+1 TreeX[treeCount]=uo.LastTile(1) TreeY[treeCount]=uo.LastTile(2) TreeT[treeCount]=uo.LastTile(0) uo.Print('Найдено дерево номер '+str(treeCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))) end if end if ########################## ### Кликнули по листве ### ########################## if flag==2 then flag2=0 if treeCount>0 then for ii=1 to treeCount if TreeX[ii]==uo.LastTile(1) and TreeY[ii]==uo.LastTile(2) then flag2=1 end if next end if if flag2==0 then treeCount=treeCount+1 TreeX[treeCount]=uo.LastTile(1) TreeY[treeCount]=uo.LastTile(2) TreeT[treeCount]=uo.LastTile(0)-1 uo.print('Найдено дерево номер '+str(treeCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))) end if end if until (flag==3) or (treeCount==5000) uo.Exec("filterspeech off") uo.Print('Анализ закончен, координаты деревьев записаны в файл C:\trees3.dat') SaveToFile(treeCount,TreeX,TreeY,TreeT) end if uo.Print('Деревьев найдено: '+str(treeCount)) wait(2000) ###################################### ### Ходим по собранным координатам ### ###################################### while 1==1 if treeCount>0 then for i=1 to treeCount if TryRecall==1 and uo.Count('ZLK')>=LogsQty or uo.Weight>=uo.STR*4+20 then ToRecall() end if uo.Print('Идем к дереву номер '+str(i)+': x='+str(TreeX[i])+' y='+str(TreeY[i])) flag=GotoXY(TreeX[i],TreeY[i],2) if flag==1 then if TryHiding==1 then ToHide() end if GetTree(str(TreeT[i]),str(TreeX[i]),str(TreeY[i]),str(uo.GetZ())) end if next end if wend end sub
sub GetTree(Type,X,Y,Z) var i uo.Print('Начинаем сбор хвороста...') for i=0 to Quant if uo.Warmode()==1 then return 0 end if wait(200) uo.DeleteJournal() uo.WaitTargetTile(Type,X,Y,Z) uo.UseObject('dagger') if WaitForChange()==1 then return 1 end if next return 0 end sub
sub ToRecall() RecallToHome() DropHarvest() if UseCamping==1 then Camping() end if if RechargeBook==1 then RechargeBook() wait(4000) end if if EatingFood==1 then EatingFood() end if wait(3000) RecallToLumber() end sub
sub RecallToHome() uo.Print('Прыгаем Домой.') RunebookRecall(RuneToHome) end sub
sub RecallToLumber() uo.Print('Прыгаем в Лес.') RunebookRecall(RuneToLumber) end sub
sub ToHide() while not uo.Hidden() uo.Print('Пытаемся уйти в хайд...') uo.DeleteJournal() uo.UseSkill('Stealth') wait(4100) wend wait(100) end sub
sub WaitForRecall() var Text1=uo.GetName()+': The spell fizzles.' var mess='',LastX=uo.GetX(),LastY=uo.GetY() for var i=0 to 200 mess=uo.Journal(0) if uo.Journal(0)==Text1 then return 0 end if if uo.GetX()<>LastX or uo.GetY()<>LastY then return 1 end if wait(50) next return 0 end sub
sub WaitForHide() var Text1=uo.GetName()+': You have hidden yourself well' var Text2=uo.GetName()+": You can't seem to hide here." var mess for var i=0 to 200 mess=uo.Journal(0) if uo.Journal(0)==Text1 then return 1 end if if uo.Journal(0)==Text2 then return 0 end if wait(50) next return 0 end sub
sub WaitForChange() var Text1=uo.GetName()+': You hack at the tree for a while, but fail to produce any useable wood.' var Text2='There is no wood left to harvest.' var Text3="You can't reach this." var Text4='That is too far away.' var Text5="You can't do much in your current state." var mess for var i=0 to 200 mess=uo.Journal(0) if uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 then return 1 end if if uo.Journal(0)==Text1 then return 0 end if if mess[0]=='Y' and mess[1]=='o' and mess[2]=='u' and mess[4]=='p' and mess[5]=='u' and mess[6]=='t' then return 0 end if wait(50) next return 0 end sub
sub WaitForTryRock() var Text1='That is too far away.' var Text2='Try mining in rock.' var Text3='There is no ore here to mine.' var Text4='You have no line of sight to that location' var Text5="You can't see the target" for var i=0 to 50 if uo.Journal(0)==Text1 or uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text5 then return 1 end if wait(200) next return 0 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 WaitForChangeXY(myX,myY,LastX,LastY) for var i=1 to 50 if LastX<>myX or LastY<>myY then return 1 end if wait(200) next return 0 end sub
sub GotoXY(x,y) var myX,myY,LastX=0,LastY=0,i,halt=0,z,r=0 for i=1 to 60 myX=uo.GetX() myY=uo.GetY() if LastX==myX and LastY==myY then halt=halt+1 else halt=0 end if if halt>=10 then if uo.GetDir()==1 then for z=0 to 8 uo.Press(40) next end if if uo.GetDir()==3 then for z=0 to 8 uo.Press(37) next end if if uo.GetDir()==5 then for z=0 to 8 uo.Press(38) next end if if uo.GetDir()==7 then for z=0 to 8 uo.Press(39) next end if halt=15 end if if Numb(x-myX)<=1 and Numb(y-myY)<=2 then return 1 end if if x<=myX then if y<=myY then for z=0 to 3 uo.Press(38) next else for z=0 to 3 uo.Press(37) next end if else if y<=myY then for z=0 to 3 uo.Press(39) next else for z=0 to 3 uo.Press(40) next end if end if LastX=myX LastY=myY wait(200) next return 0 end sub
sub Numb(num) if num>=0 then return num else return num*(-1) end if end sub
sub SaveToFile(treeCount,TreeX,TreeY,TreeT) var f=file("C:\trees3.dat") var s=0,i=0 f.open() f.create() s=safe call f.writeln(treeCount) for i=1 to treeCount s=safe call f.writeln(str(TreeT[i])+' '+str(TreeX[i])+' '+str(TreeY[i])) next f.close() end sub
sub DropHarvest() ToHide() var h,Exit dim Harvest[1] Harvest[0]=0x0DE1 uo.Print('Выкладываем Хворост.') for h=0 to 0 MovingItems(Harvest[h],'-1',-1,0) next uo.Print('Хворост Выложен.') end sub
sub Camping() var i,j,mX=uo.GetX(),mY=uo.GetY(),mZ=uo.GetZ(),time=uo.Time() while not uo.Dead() for i=mx-3 to mx+3 for j=my-3 to my+3 if uo.Count('0x0DE1')==0 then uo.FindType('0x0DE1',-1,Chest) if uo.FindCount()>0 then uo.MoveItem('finditem','6') else return end if end if uo.FindType('0x0DE1',-1,'backpack') uo.MoveItem("finditem","1","ground",str(i),str(j),str(mz)) CheckLag() wait(1000) uo.FindType('0x0DE1','0x0000','ground') while uo.FindCount()>0 repeat uo.UseObject('finditem') wait(500) CheckLag() until not uo.InJournal('You fail') wait(500) uo.FindType('0x0DE1','0x0000','ground') wend next next wend end sub
sub RunebookRecall(n) OldX=uo.GetX() OldY=uo.GetY() repeat uo.Exec('warmode 0') uo.UseObject('Runebook') CheckLag() uo.LClick(135, n*15+55) CheckLag() time=uo.Timer() repeat wait(500) until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs') or uo.InJournal('fizzles') or time+200<uo.Timer() until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs') end sub
sub Open(Container) uo.DeleteJournal() uo.UseObject(Container) repeat wait(500) until uo.InJournal('Contains') end sub
sub MovingItems(tItem,cItem,qItem,FromBackPack) var idResivCont var idSendCont if FromBackPack==1 then idResivCont=uo.GetSerial('backpack') idSendCont=Chest else idSendCont=uo.GetSerial('backpack') idResivCont=Chest end if CheckLag() uo.FindType(tItem,cItem,idSendCont) while uo.GetQuantity('finditem')>0 uo.MoveItem('finditem',qItem,idResivCont) wait(1000) CheckLag() if qItem>0 then return end if uo.FindType(tItem,cItem,idSendCont) wend end sub
sub RechargeBook() repeat MovingItems('0x1F4C','-1',-1,1) uo.UseObject('Runebook') wait(1000) Checklag() uo.Lclick(296,91) wait(1000) until uo.InJournal('charges are 50') or uo.InJournal('fully') while uo.Count('0x1F4C')>0 MovingItems('0x1F4C','-1',-1,0) end sub
sub EatingFood() repeat MovingItems(TypeFood,'-1',20,1) repeat CheckLag() uo.UseType(TypeFood) while not uo.InJournal('full') and not uo.InJournal('stuffed') and not uo.InJournal('hungry') and not uo.InJournal('satiated') and not uo.Dead() wait(100) wend until uo.InJournal('too full') or uo.Dead() MovingItems(TypeFood,'-1',-1,0) end sub
sub CheckLag() if uo.Waiting()>0 then uo.Exec('canceltarget') end if uo.DeleteJournal() uo.Click('backpack') repeat wait(50) until uo.InJournal('backpack') end sub
|