Буду признателен если поможете значет так начнём есть скрипт на мининг мне надо чуток подругому чтобы было почти как на ламбер запесать таилы пещеры в файл а точнее переходить туда куда я указал когда записава тот координат тайла. Этот кусок скрипт на записавание таиля долЖен быть одельна набрасаю скрипт Code: # 1# Mining Elemental hunter by Nmy a.k.a. Dark Enemy var Pickaxe, Runehome, Blankrune, Runinetu, Nrune, flagpk, flaginvis # Суть скрипта - мининг по рункам. Запускать надо только sub main(). Нечего другого. # Если чар жив, при запуске надо иметь в бекпаке руну к сундуку, # если чар мертв, тогда просто запускайте скрипт. # После запуска скрипт ищет кирку или лопату - автоматически. # Требования перед запуском - реги bp bm mr ns в сундуке, # бланк руны в мешке BlankRunebag, # замарченые руны в Runebag (Чем больше, тем лучше. У меня где то 59 спотов), # руна домой Runehome, прямо у сундука, # инвизки в сундуке для рекола от пк и фарма елемов, # скролы на Energy Vortex для фарма елемов, # куча кирок в сундуке. # При запуске чар должен иметь готовую руну домой в бекпаке. Других рун в бекпаке не должно быть. ## # Запускается скрипт у сундука и записывается руна домой. # Советую покушать, этого нет в скрипте. # Скрипт берет реги, 2 инвизки, скрол вортекса, если надо, кирку и улетает. # Как только прилетел - идет проверка на елемов (3 тайла вокруг чара), # если найден елем, он пьет инвизку, # если елем выха, плут или обсид - убивает елема, Vas An Ort, лутает руду, улетает, выгружается, берет руну в следующею шахту, # если не найден елем, становится в хайд и идет обкоп. # Тщательно проверяется журнал на пк, исключая ('Elemental|Scorpion King|Giant Spider|Energy Vortex'). # Через каждый тайл идет проверка на елемов в 3 тайла, # если найден елем, он пьет инвизку, # если елем выха, плут или обсид - убивает елема, Vas An Ort, лутает руду, улетает, выгружается, берет руну в следующею шахту. ## # Улетает от пк - пьет инвизку и делает рекол по рунбуке, # открываетcя окно текста TextOpen и пишется Nick @ время @ дата, например: # Roland @ 15:59:20 @ 9.09.18 ## # Track World Items должен быть включен. # Reconnector - включается, он просто заходит обратно, нет гарантии что скрипт будет дальше работать, # но шанс на успех все таки есть. ## # Тотал маны скрипт не использует, пока нет такой нужды. # Если чар прилетел и там найден елемент, но он не выха, # по идее он пьет инвизку, и продолжает об коп. Если в процессе найден елем выхи, тогда нечего не меняется, # чар уже под инвизкой и кастует вортекса, лутает, улетает. ## # Добавлен выход из ситуации, когда чар зацикливается на You loosen some rocks.. # Добавлена цикличность на кастование вортекса. Видимо иногда не хватает одного вортекса, чтоб убить одного или больше елемов. # Добавлена запасная бутылка инвиза для рекола от пк. Хоть это не дает 100% шанс, но улучшает возможность скрыться от дебилов. # Добавлено TextPrint для елементов каторых мы фармим. ## # Добавлен ресс в Миноке. Чар ресается, летит домой, маркает руну домой, ищет кирку в сундуке, запускает мейн скрипт. # Добавлены переменные для хелп кнопки, т.к. папердолл у каждого может быть в разных местах. # Undead можно включать, можно не включать. ## # Добавлено проверка на кирку или лопату в процессе мининга. Если ее нету, тогда чар полетит домой. # Если перед запуском у чара есть кирка, он будет копать ей, если нет, тогда возьмет из сундука одну. # У скрипта пауза 100 секунд, если он улетел от пк, или если его убили. ## # Теперь скрипт не берет руну в шахту, он ее кидает в Dropbag и там кастует рекал. # Если заряды кончились, то он маркует руну и кидает ее в Dropbag. # Если вы хотите чтоб чар поменял шахту (полетел домой, разгрузился, полетел в другую) - # просто киньте кирку на пол. После рекала можно ее подобрать. var Runebook='0x4022B604' # Для рекола от пк. var Runenr='21' # Номер руны. var Chest='0x4042617E' # Я лично поставил 2 сейфа рядом - 1 для ресурсов, 2й для руды. var Orechest='0x40425509' var Dropbag='0x403C6206' # Пустой мешок куда кидают руны после обкопа. var Runebag='0x403C5FB7' var Blankrunebag='0x405004D7' var rune='0x1F14' var food='0x097B'
var helpX=981 # Переменные без кавычек! var helpY=53 # Переменные без кавычек!
uo.set('norbcheck','1') uo.set('norbcalc','1')
sub main() var markflag uo.exec('exec Reconnector') if not uo.getglobal('flagRes')=='1' then uo.exec('exec Resurrector') uo.setglobal('flagRes','1') endif wait(1000) uo.filterspeech('clear') uo.msg('Dont forget track world items!') uo.findtype(rune,-1,'backpack') if uo.findcount() then Runehome=uo.getserial('finditem') else uo.msg('Runehome not found! Terminate.') uo.exec('terminate all') endif Open(Chest) GrabBlankRune() while not uo.dead() Open(Runebag) uo.findtype(rune,-1,Runebag) while uo.findcount() Nrune=uo.getserial('finditem') uo.moveitem('finditem',0,Dropbag) checklag() wait(700) RegCheck() grabinvis() GetPickaxe() grabvortex() toeat() RecallRune(Nrune) uo.ignorereset() flaginvis=0 markflag=0 flagpk=0 if uo.injournal('The recall rune fades completely.') then markflag=1 end if if not checkelem()==1 then if markflag==1 then Mark(Blankrune,0) Runinetu=1 endif mining() checkelem() else if markflag==1 then Mark(Blankrune,0) Runinetu=1 endif endif if flagpk==0 then RecallRune(Runehome) endif if uo.injournal('The recall rune fades completely.') then Open(Chest) if Runinetu==1 then GrabBlankRune() endif Mark(Blankrune,1) GrabBlankRune() endif Open(Chest) if Runinetu==1 then GrabBlankRune() endif if markflag==1 then uo.moveitem(Nrune,0,Dropbag) checklag() wait(700) endif Dropore() if flagpk==1 then wait(100000) endif Open(Runebag) uo.findtype(rune,-1,Runebag) wend DropbagCheck() wend endsub sub Resurrector() var oldX,oldY while 1 if uo.dead() then uo.exec('terminate main') uo.exec('terminate Reconnector') uo.TextOpen() uo.TextPrint('- dead - @ '+MakeTime()) wait(5000) oldX = Uo.GetX() oldY = Uo.GetY() uo.useobject('self') checklag() wait(700) repeat uo.lclick(helpX,helpY) checklag() wait(700) uo.lclick(269,307) checklag() wait(700) uo.lclick(182,204) checklag() wait(5000) until oldX<>UO.GetX() OR oldY<>UO.GetY() repeat uo.press(39) wait(2000) until UO.GetY()<534 repeat uo.useobject('0x4001BDF0') wait(3000) until uo.life>0 Open(uo.getserial('backpack')) wait(1000) oldX = Uo.GetX() oldY = Uo.GetY() uo.recall(Runebook,Runenr) repeat wait(700) until oldX<>uo.getx('self') && oldY<>uo.gety('self') Open(Chest) RegCheck() GrabBlankRune() Mark(Blankrune,1) if uo.waiting() then uo.canceltarget() endif uo.exec('exec main') endif wait(5000) wend endsub sub GetPickaxe() var n dim instrument[4] instrument[1]='0x0F39' instrument[2]='0x0F3A' instrument[3]='0x0E86' instrument[4]='0x0E85' if uo.count('0x0F39')==0 and uo.count('0x0F3A')==0 and uo.count('0x0E86')==0 and uo.count('0x0E85')==0 then for n=1 to 4 uo.findtype(instrument[n],-1,Chest) if uo.findcount() then pickaxe=uo.getserial('finditem') uo.moveitem('finditem',0,'backpack') checklag() wait(700) return endif next else for n=1 to 4 uo.findtype(instrument[n],-1,'my') if uo.findcount() then pickaxe=uo.getserial('finditem') return endif next endif endsub sub Tohide() while not uo.Hidden() uo.warmode(0) uo.warmode(0) if uo.Journal(0)=='You are preoccupied with thoughts of battle.' then uo.warmode(0) endif uo.Print('Пытаемся уйти в хайд...') uo.DeleteJournal() uo.UseSkill('Stealth') wait(4000) wend end sub sub checkelem() var n, i var flagvortex, Elemental
uo.set('finddistance','3') uo.findtype('0x0010',-1,'ground') while uo.findcount() Elemental=uo.getserial('finditem') invis() if checkcolor(Elemental)==1 then flagvortex=1 castvortex() uo.textopen() uo.textprint(uo.getname(Elemental)+' @ '+MakeTime()) for n=0 to 10 wait(1000) checkpk() if flagpk==1 then return endif next else uo.ignore(Elemental) endif uo.findtype('0x0010',-1,'ground') wend if flagvortex==1 then repeat checklag() while uo.mana<22 wait(500) wend uo.waittargetobject('self') uo.cast('Mass Dispel') WaitForMana() wait(1000) until not uo.injournal('The spell fizzles') colore() return 1 endif endsub
sub colore() var n, i Dim ore[3] ore[1]='0x19B8' ore[2]='0x19B9' ore[3]='0x0EED' Dim color[22] color[1]='0x09DA' ; vulcan color[2]='0x0060' ; aqua color[3]='0x0BA7' ; eldar color[4]='0x09E6' ; elvin color[5]='0x09B9' ; acid color[6]='0x09D3' ; steel color[7]='0x008F' ; sand rock color[8]='0x09EC' ; blood crest color[9]='0x09F0' ; gorgan color[10]='0x010F' ; krynite color[11]='0x09A4' ; crystaline color[12]='0x0085' ; dragon color[13]='0x08AF' ; plutonium color[14]='0x0028' ; obsidian color[15]='0x0193' ; Agarite color[16]='0x052D' ; myuth color[17]='0x00CE' ; valorite color[18]='0x07D5' ; varite color[19]='0x0455' ; blakrock color[20]='0x04C2' ; bloodrock color[21]='0x0032' ; gold color[22]='0x0000' ; gp
uo.set('finddistance','5')
for n=1 to 3 for i=1 to 22 uo.findtype(ore[n],color[i],'ground') while uo.findcount()>0 uo.moveitem('finditem','-1','backpack') wait(700) uo.findtype(ore[n],color[i],'ground') wend next next endsub
sub COL() var c Dim color[21] color[1]='0x09DA' ; vulcan color[2]='0x0060' ; aqua color[3]='0x0BA7' ; eldar color[4]='0x09E6' ; elvin color[5]='0x09B9' ; acid color[6]='0x09D3' ; steel color[7]='0x008F' ; sand rock color[8]='0x09EC' ; blood crest color[9]='0x09F0' ; gorgan color[10]='0x010F' ; krynite color[11]='0x09A4' ; crystaline color[12]='0x0085' ; dragon color[13]='0x08AF' ; plutonium color[14]='0x0028' ; obsidian color[15]='0x0193' ; Agarite color[16]='0x052D' ; myuth color[17]='0x00CE' ; valorite color[18]='0x07D5' ; varite color[19]='0x0455' ; blakrock color[20]='0x04C2' ; bloodrock color[21]='0x0032' ; gold
for n=1 to 21 endsub
sub checkcolor(obj) var n, c Dim color[21] color[1]='0x09DA' ; vulcan color[2]='0x0060' ; aqua color[3]='0x0BA7' ; eldar color[4]='0x09E6' ; elvin color[5]='0x09B9' ; acid color[6]='0x09D3' ; steel color[7]='0x008F' ; sand rock color[8]='0x09EC' ; blood crest color[9]='0x09F0' ; gorgan color[10]='0x010F' ; krynite color[11]='0x09A4' ; crystaline color[12]='0x0085' ; dragon color[13]='0x08AF' ; plutonium color[14]='0x0028' ; obsidian color[15]='0x0193' ; Agarite color[16]='0x052D' ; myuth color[17]='0x00CE' ; valorite color[18]='0x07D5' ; varite color[19]='0x0455' ; blakrock color[20]='0x04C2' ; bloodrock color[21]='0x0032' ; gold
c=uo.getcolor(obj) for n=1 to 21 if c == color[n] then return 1 endif next endsub sub castvortex() repeat checklag() uo.waittargetobject('self') uo.findtype('0x1F66',-1,'backpack') if uo.findcount() then while uo.mana<13 wait(500) wend uo.useobject('finditem') else while uo.mana<27 wait(500) wend uo.cast('Energy Vortex') endif WaitForMana() until not uo.injournal('The spell fizzles') endsub sub WaitForMana() VAR w,m=uo.mana for w=0 to 150 if uo.mana<m then return endif wait(500) next endsub sub grabvortex() var kol=5, q uo.findtype('0x1F66',-1,'backpack') if uo.getquantity('finditem')<kol then q=kol-uo.getquantity('finditem') uo.print('Ищем вортекс') uo.findtype('0x1F66',-1,Chest) if uo.findcount() then uo.moveitem('finditem',STR(q),'backpack') checklag() wait(700) endif endif endsub
sub InfoOre() uo.Print('У вас всего '+str(uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count('0x19B9')+uo.Count('0x19BA'))+' руды в сумке') uo.Print('Из нее '+str(uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000') +uo.Count('0x19B9','0x0000')+uo.Count('0x19BA','0x0000'))+' железо и ' +str (uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count('0x19B9')+uo.Count('0x19BA')- (uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000')+uo.Count ('0x19B9','0x0000')+uo.Count('0x19BA','0x0000')))+' цветмет') end sub
sub Open(what) uo.useobject(what) checklag() wait(700) endsub sub Dropore() var n Open(Orechest) Dim ore[11] ore[0]='0x19BA' ore[1]='0x19B7' ore[2]='0x19B8' ore[3]='0x19B9' ore[4]='0x0F18' ore[5]='0x0F10' ore[6]='0x0F15' ore[7]='0x0F11' ore[8]='0x0F0F' ore[9]='0x0F26' ore[10]='0x0F16' ore[11]='0x0EED' uo.warmode(0) uo.useskill('Stealth') for n=0 to 11 uo.findtype(ore[n],-1,'backpack') while uo.findcount() uo.moveitem('finditem',0,Orechest) checklag() wait(400) uo.findtype(ore[n],-1,'backpack') wend next uo.print('Dropore done.') Open(Chest) endsub sub Mark(RuneID,Place) repeat if uo.mana<33 then meditation() endif checklag() Uo.Cast('Mark',RuneID) WaitForMana() until not uo.injournal('The spell fizzles') if Place==0 then Nrune=uo.getserial(RuneID) else Runehome=uo.getserial(RuneID) endif endsub sub meditation() uo.findtype('0x0F0E','0x09DF','backpack') if uo.findcount() then uo.useobject('finditem') wait(700) else while uo.mana < uo.int if uo.Journal(0)=='You are preoccupied with thoughts of battle.' then uo.warmode(0) endif checklag() Uo.Useskill('Meditation') waitformed() wend endif endsub sub waitformed() var n for n=0 to 100 if uo.injournal('You lose|at peace') then return endif wait(500) next endsub sub RecallRune(nowrune) uo.Print('улетаем по руне') var oldX,oldY oldX = Uo.GetX() oldY = Uo.GetY() repeat if uo.mana<20 then meditation() endif Uo.Cast('Recall',nowrune) WaitForMana() wait(1000) Until oldX<>UO.GetX() AND oldY<>UO.GetY() endsub sub grabinvis() uo.findtype('0x0F0E',-1,'backpack') while uo.findcount() uo.moveitem('finditem',0,Chest) checklag() wait(700) uo.findtype('0x0F0E',-1,'backpack') wend uo.findtype('0x0F0E','0x0631',Chest) if uo.findcount() then uo.print('Ищем инвизку') uo.moveitem('finditem','3','backpack') checklag() wait(700) endif endsub sub RegCheck() VAR i,q VAR kol=8 Dim Regs[6] Regs[0]='0x0F7A' ; Black Pearl Regs[1]='0x0F7B' ; Bood Moss Regs[2]='0x0F86' ; Mandrake Root Regs[3]='0x0F88' ; Nightshade Regs[4]='0x0F8C' ; Sulfurous Ash Regs[5]='0x0F84' ; Garlic for i=0 to 5 if uo.count(Regs[i])<>kol then q=kol-uo.count(Regs[i]) if q<>0 then if q>0 then uo.findtype(Regs[i],-1,Chest) if uo.findcount() then uo.moveitem('finditem',STR(q),'backpack',141,134,0) checklag() wait(700) uo.print('Берем реги для рекола...') else uo.msg('No regs') return endif else q=q*-1 uo.findtype(Regs[i],-1,'my') if uo.findcount() then uo.moveitem('finditem',STR(q),Chest) checklag() wait(700) uo.print('Регов больше чем надо. Кидаем лишнее в сундук') endif endif endif endif next endsub sub GrabBlankRune() Open(BlankRunebag) uo.findtype(rune,-1,BlankRunebag) if uo.findcount() then Blankrune=uo.getserial('finditem') uo.moveitem('finditem',0,'backpack') checklag() wait(700) uo.print('Взяли бланк руну') Runinetu=0 else uo.print('Бланк рун больше нету! Скрипт остановлен.') uo.exec('terminate all') endif endsub sub DropbagCheck() uo.print('Проверяем мешок Dropbag') Open(Dropbag) uo.findtype(rune,-1,Dropbag) while uo.findcount() uo.moveitem('finditem',0,Runebag) checklag() wait(700) uo.print('Нашли руну. Кладем их в сумку Runebag.') uo.findtype(Rune,-1,Dropbag) wend endsub sub mining() var mx, my, mz, i, j, f mx = UO.GetX('self') my = UO.GetY('self') mz = UO.GetZ('self') while UO.Weight <= (UO.STR * 1) for i = mx-4 to mx+4 for j = my -4 to my+4 BEGIN: UO.Print('Копаем в координатах: '+str(mx-i)+' '+str(my-j)) for f=1 to 10 if uo.count('0x0F39')==0 and uo.count('0x0F3A')==0 and uo.count('0x0E86')==0 and uo.count('0x0E85')==0 then return endif InfoOre() UO.DeleteJournal() Tohide() if uo.waiting() then uo.canceltarget() endif UO.Waittargettile('1341', str(i), str(j), str(mz)) DigAhole(i,j,mz) if waitforore()==1 then f=10 endif uo.findtype('0x19B7','0x0000','backpack') # Тип и цвет айрона uo.drophere('finditem') uo.findtype('0x19B7','0x0750','backpack') # Тип и цвет айрона uo.drophere('finditem') uo.findtype('0x19B7','0x0193','backpack') # Тип и цвет айрона uo.drophere('finditem') uo.findtype('0x19B7','0x0590','backpack') # Тип и цвет айрона uo.drophere('finditem') uo.findtype('0x19B7','0x060A','backpack') # Тип и цвет айрона uo.drophere('finditem') uo.findtype('0x19B7','0x0088','backpack') # Тип и цвет айрона uo.drophere('finditem') uo.findtype('0x19B7','0x0488','backpack') # Тип и цвет айрона uo.drophere('finditem') uo.findtype('0x19B7','0x0482','backpack') # Тип и цвет айрона uo.drophere('finditem') uo.findtype('0x19B7','0x096B','backpack') # Тип и цвет айрона uo.drophere('finditem') uo.findtype('0x19B7','0x0014','backpack') # Тип и цвет айрона uo.drophere('finditem') if flagpk==1 then return endif if uo.injournal('You have been revealed') and flaginvis==1 then flaginvis=0 invis() return endif next if uo.journal(0)==uo.getname('self')+': You loosen some rocks but fail to find any useable ore.' then wait(10000) goto BEGIN endif if checkelem()==1 then return endif next next 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 checkpk() if flagpk==1 then return endif if UO.InJournal('You put the Bloodrock Ore in your pack') then return endif if UO.InJournal('You put the Rose Ore in your pack') then return endif if UO.InJournal('You put the Agapite Ore in your pack') then return endif if UO.InJournal('You put the Gold Ore in your pack') then return endif if uo.injournal('no ore here|location|far away|in rock|You have been revealed|You put') then return 1 endif if UO.InJournal('You put|heavy|but fail') then return endif wait(500) ws() next endsub sub checkpk() var n var ser var noto var me=uo.getserial('self') for n=0 to 9 ser=uo.journalserial(n) noto=uo.getnotoriety(ser) if noto<>0 and noto<>1 and not uo.injournal('Elemental|Scorpion King|Giant Spider|Energy Vortex') and not ser==me then uo.TextOpen() uo.TextPrint(uo.getname(ser)+' @ '+MakeTime()) gohome() flagpk=1 return endif next endsub
sub toeat() repeat uo.findtype(food,-1,Chest) if uo.findcount() then uo.moveitem('finditem','2','backpack') checklag() wait(600) repeat uo.usetype(food) wait(500) until uo.injournal('full to eat') or uo.count(food)==0 endif until uo.injournal('full to eat') uo.findtype(food,-1,'backpack') if uo.findcount() then uo.moveitem('finditem',0,Chest) checklag() wait(600) endif endsub
sub gohome() var oldX=uo.getx('self') var oldY=uo.gety('self') invis() uo.recall(Runebook,Runenr) repeat wait(700) if uo.injournal('You have been revealed') then flaginvis=0 invis() endif until oldX<>uo.getx('self') && oldY<>uo.gety('self') endsub sub invis() if flaginvis<>1 then uo.findtype('0x0F0E','0x0631','my') if uo.findcount() then uo.warmode(0) uo.useobject('finditem') flaginvis=1 checklag() endif endif endsub sub mana() if flaginvis<>1 then uo.findtype('0x0F0E','0x09DF','my') if uo.findcount() then uo.warmode(0) uo.useobject('finditem') flaginvis=1 checklag() endif endif endsub sub ws() if uo.journal(0)=='World is saving now...' then repeat wait(700) until uo.journal(0)<>'World is saving now...' endif 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
sub gohome1() var oldX=uo.getx('self') var oldY=uo.gety('self') invis() uo.recall(Runebook,Runenr) repeat wait(700) if uo.injournal('You have been revealed') then flaginvis=0 endif until oldX<>uo.getx('self') && oldY<>uo.gety('self') endsub
sub Reconnector() var ReconnectTime, RFlag ReconnectTime = '0' RFlag = 1 Repeat While (UO.ObjAtLayer('Bpack') == '') if RFlag Then ReconnectTime = MakeTime() RFlag = 0 endif Wait(70000) # WorldSave Protection UO.Say('vertijok1') Wait(3000) UO.Say('eegolcuf') Wait(3000) UO.Say('') Wait(3000) UO.LDblClick(357,164) UO.LClick(616,459) Wait(3000) WEnd Wait(3000) if (RFlag == 0) and (ReconnectTime <> '0') Then UO.Exec('exec gohome1') UO.TextOpen() UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime) RFlag = 1 ReconnectTime = '0' endif Until false end sub sub MakeTime() VAR D, T, Ret, i Ret = STR(UO.Time()) T = "" For i = 0 To Len(Ret) T = Ret[Len(Ret)-i] + T If (I == 2) OR (I == 4) Then T = ":" + T EndIf Next Ret = STR(UO.Date()) D = "" For i = 0 To Len(Ret) D = Ret[Len(Ret)-i] + D If (I == 2) OR (I == 4) Then D = "." + D EndIf Next Ret = T + " @ " + D RETURN Ret end sub а это ходилка Code: ########################### ХОДИЛКА 3 ########################## #var Prec=3 # Как близко следует подойти к цели (Precision) #var MaxTraceDistance=15 # Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень #большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву. #var Speed=2 # Длина шага. Сколько шагов делать за раз. Выше 3 ставить смысла нет. Тоесть тупое умножение шагов. Для ламбера #идеально 3, для майнинга - 1. #var StepTimeOut=400 # Если уперлись в неопознанный обьект, сколько мсек ждать сдвига с места. Если по простому - таймаут #шага. Если поставить сильно маленькие, ходилка начнет трассировать пустые места. #UO.SetGlobal("Logging","1") # - показывать отладочные сообщения. #UO.SetGlobal("BlindWalk","0") # - не использовать проверку тайлов, а использовать ходьбу наощупь. Для майнинга ОБЯЗАТЕЛЬНО #ВКЛЮЧИТЬ. #В функции IsPass, содержиться список проходимых тайлов.
#Walker(X,Y,Prec) - идем к цели с координатами X,Y. Возвращает 1 в случае успешного достижения цели, и 0 - при невозможном обходе (путь не найден) #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 MaxTraceDistance=10 var TraceLoopIncrease=5 #Увеличение MaxTraceDistance при исчерпании количества ходов var LimitTrace=20 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет). var Speed=1 var StepTimeOut=600 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга. # Для ходьбы - 500+Ping # Для бега/ходьбы на лошади - 300+Ping # Бег на лошади - 150 + Ping var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС. var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.
Sub Walker(GoX,GoY,Prec) UO.warmode(0) 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 endif 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 endsub
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 endif MovesDone=MovesDone+1 CurDir=AddToDir(CurDir,-Direction,Prec) until MovesDone>MaxTrace return 0 endsub
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 endif if GoDir>StartDir then return 1 endif 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 endif else if (GoDir==1 and GoX<MyX) or (GoDir==5 and GoX>MyX) then return -1 else return 1 endif endif endsub
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) endsub
Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec) if x1==x3 and y1==y3 then return false endif 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 endif endsub
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 endif return false endsub
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) endif until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove return LastDir endsub
Sub IsEnd(GoX,GoY,Prec) if Abs(UO.GetX()-GoX)<=Prec and Abs(UO.GetY()-GoY)<=Prec then LogInfo('END FOUND') return true else if Abs(UO.GetX()-GoX)>=100 and Abs(UO.GetY()-GoY)>=100 then LogInfo('END FOUND') return true else return false endif #return false endif endsub
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 endif else if (DiffY/(DiffX+0.1))>=2 then if (MyY>GoY) then GoDir=5 else GoDir=1 endif 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 endif endif endif endif endif endif return GoDir endsub
Sub Tracer(StartDir,Direction,Prec) var CurDir=StartDir var Result repeat Result=TryDir(CurDir,Prec) if not Result then CurDir=AddToDir(CurDir,Direction,Prec) endif until Result return Result endsub
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 endsub
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 endif return TurnAndGoDir(Dir,Prec) endsub
Sub XFromDir(Dir) if Dir==2 OR Dir==3 Or Dir==4 then return (UO.GetX()+1) endif if Dir==6 OR Dir==7 Or Dir==8 then return (UO.GetX()-1) endif return (UO.GetX()) endsub
Sub YFromDir(Dir) if Dir==8 OR Dir==1 Or Dir==2 then return (UO.GetY()+1) endif if Dir==4 OR Dir==5 Or Dir==6 then return (UO.GetY()-1) endif return (UO.GetY()) endsub
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 endif #End direction Test if StartY<>UO.GetY() or StartX<>UO.GetX() then return Dir endif #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 endif endsub
Sub GetDirToDir(GotDir,Prec) var ChangedDir=-GotDir ChangedDir=AddToDir(ChangedDir,5,Prec) return ChangedDir endsub
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]) endsub
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) endsub
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) endsub
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 endif next return false endsub
Sub LogInfo(Line) if not UO.GetGlobal("Logging")=="0" then UO.TextOpen() UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+Line); endif endsub
Sub Abs(X) if X>0 then return X else return (-X) endif endsub ################################################################ # конец ходилки ################################################ ################################################################ 1)мне надо так чтобы я один раз взял кординаты таилов из пещеры и забыл про них
2)я зделал скрипт но есть одно но при убиства елема он не улетает а переходит на другой таил а мне недо чтобы он улетел .
3)я копаЮ -4 +4 после обкопку вокруг себя мне надо перехадить на следущий кординат и сново копал, задать одельный кусок скрипта с координатами не выходит потому что если придёт пк то он не улетит а передёт на следущий таил что мне не выгодна это
)потом вставить в Этот скрипт так чтобы дапустим при убиства елема и лута руды чтобы он улетал дамой скидавать а остальное так как есть тот кто знает в скриптов то поимёт что тут он не копает полностю руду с таила а токо один раз выкапал и всё переходит на другой тайл вот собствено и всё что я хотел чтобы вы помогли, да забыл шард ДРВ
|