вот скрипт на лут но мне надо переделать чтобы он резазал а потом лутал Code: sub main() uo.exec("exec Loottt") end sub
sub Loottt() var i,n var luttuda='luttuda' Dim Loot[148] Loot[0]=0x0F0D ; gp Loot[1]=0x0F7B ; BM Loot[2]=0x0F7A ; BP Loot[3]=0x0F84 ; GA Loot[4]=0x0F85 ; GI Loot[5]=0x0F86 ; MR Loot[6]=0x0F88 ; NS Loot[7]=0x0F8C ; SA Loot[8]=0x0F8D ; SS Loot[9]=0x0F90 ; Dead Woods Loot[10]=0x0F7E ; Sceleton Bones Loot[11]=0x0F87 ; Eyes of newt Loot[12]=0x1078 ; Hides Loot[13]=0x1BFB ; Bolts Loot[14]=0x0E34 ; Blanc Scroll Loot[15]=0x0F25 ; Pieces of Amber Loot[16]=0x0F0D ; Ametist Loot[17]=0x0F20 ; Tourmaline Loot[18]=0x0F26 ; Diamond Loot[19]=0x0F30 ; Diamond Loot[20]=0x0F8E ; Serpent Scales Loot[21]=0x14EB ; Treassure Map Loot[22]=0x0F79 ; Blackmoor Loot[23]=0x0F3F ; Arrow Loot[24]=0x0F79 ; Blackmoor Loot[25]=0x0F91 ; Wirn hart Loot[26]=0x0F78 ; Bat Loot[27]=0x1F03 ; ?iaa Loot[28]=0x1515 ; ieauu Loot[29]=0x1B76 ; ueo Loot[30]=0x1414 ; ia??e Loot[31]=0x1410 ; ?oee Loot[32]=0x1415 ; aini Loot[33]=0x1411 ; iiae Loot[34]=0x1413 ; ai?ei Loot[35]=0x1412 ; oeai Loot[36]=0x0F0E ; aooueee Loot[37]=0x0F0E ; aooueee Loot[38]=0x0F0E ; aooueee Loot[39]=0x0F0E ; aooueee Loot[40]=0x0F0E ; aooueee Loot[41]=0x1F5F ; ne?ieu Loot[42]=0x1F5F ; ne?ieu Loot[43]=0x1F5F ; ne?ieu Loot[44]=0x1F5F ; ne?ieu Loot[45]=0x0E76 ; Bag Loot[46]=0x0E76 ; Bag Loot[47]=0x09B0 ; Pounch Loot[48]=0x09B0 ; Pounch Loot[49]=0x1BDD ; Logs Loot[50]=0x1BDD ; Logs Loot[51]=0x1BDD ; Logs Loot[52]=0x1BDD ; Logs Loot[53]=0x1BDD ; Logs Loot[54]=0x1BDD ; Logs Loot[55]=0x1BDD ; Logs Loot[56]=0x1BDD ; Logs Loot[57]=0x1BDD ; Logs Loot[58]=0x1BDD ; Logs Loot[59]=0x1BDD ; Logs Loot[60]=0x1BDD ; Logs Loot[61]=0x1BDD ; Logs Loot[62]=0x1BDD ; Logs Loot[63]=0x1BEF ; eiae Loot[64]=0x1BEF ; eiae Loot[65]=0x1BEF ; eiae Loot[66]=0x1BEF ; eiae Loot[67]=0x1BEF ; eiae Loot[68]=0x1BEF ; eiae Loot[69]=0x1BEF ; eiae Loot[70]=0x1BEF ; eiae Loot[71]=0x19B9 ; ?oaa Loot[72]=0x19B9 ; ?oaa Loot[73]=0x19B9 ; ?oaa Loot[74]=0x19B9 ; ?oaa Loot[75]=0x19B9 ; ?oaa Loot[76]=0x19B9 ; ?oaa Loot[77]=0x19B9 ; ?oaa Loot[78]=0x1F03 ; ?iaa Loot[79]=0x1515 ; ieauu Loot[80]=0x1B76 ; ueo Loot[81]=0x1414 ; ia??e Loot[82]=0x1410 ; ?oee Loot[83]=0x1415 ; aini Loot[84]=0x1411 ; iiae Loot[85]=0x1413 ; ai?ei Loot[86]=0x1412 ; oeai Loot[87]=0x1F03 ; ?iaa Loot[88]=0x1515 ; ieauu Loot[89]=0x1B76 ; ueo Loot[90]=0x1414 ; ia??e Loot[91]=0x1410 ; ?oee Loot[92]=0x1415 ; aini Loot[93]=0x1411 ; iiae Loot[94]=0x1413 ; ai?ei Loot[95]=0x1412 ; oeai Loot[96]=0x1F03 ; ?iaa Loot[97]=0x1515 ; ieauu Loot[98]=0x1B76 ; ueo Loot[99]=0x1414 ; ia??e Loot[100]=0x1410 ; ?oee Loot[101]=0x1415 ; aini Loot[102]=0x1411 ; iiae Loot[103]=0x1413 ; ai?ei Loot[104]=0x1412 ; oeai Loot[105]=0x0E21 ; aeiou Loot[106]=0x13B9 ; aeeeia Loot[107]=0x1406 ; iaena Loot[108]=0x13B1 ; eoe Loot[109]=0x0F4F ; a?aaeao Loot[110]=0x13FC ; oy?aeue a?a Loot[111]=0x13FE ; eaoaia Loot[112]=0x143E ; aeaaa Loot[113]=0x143E ; ?oia Loot[114]=0x0F4C ; aaieiie oiii? Loot[115]=0x1B7A ; oeo aa?aai Loot[116]=0x1541 ; iiaycea Loot[117]=0x0E21 ; aeiou Loot[118]=0x13B9 ; aeeeia Loot[119]=0x1406 ; iaena Loot[120]=0x13B1 ; eoe Loot[121]=0x0F4F ; a?aaeao Loot[122]=0x13FC ; oy?aeue a?a Loot[123]=0x13FE ; eaoaia Loot[124]=0x143E ; aeaaa Loot[125]=0x1F14 ; ?oia Loot[126]=0x0F4C ; aaieiie oiii? Loot[127]=0x1B7A ; oeo aa?aai Loot[128]=0x1541 ; iiaycea Loot[129]=0x0E21 ; aeiou Loot[130]=0x13B9 ; aeeeia Loot[131]=0x1406 ; iaena Loot[132]=0x13B1 ; eoe Loot[133]=0x0F4F ; a?aaeao Loot[134]=0x13FC ; oy?aeue a?a Loot[135]=0x13FE ; eaoaia Loot[136]=0x143E ; aeaaa Loot[137]=0x1F14 ; ?oia Loot[138]=0x0F4C ; aaieiie oiii? Loot[139]=0x1B7A ; oeo aa?aai Loot[140]=0x0847 ; amul Loot[141]=0x0E20 ; aeiou (e?iaaauå Loot[142]=0x0E20 ; aeiou (e?iaaauå Loot[143]=0x0EED ; gp Loot[144]=0x1086 ; Bracelet of Mana Regeneration Loot[145]=0x0F03 ; Antifreeze Loot[146]=0x1F52 ; Paralyze Scroll Loot[147]=0x0E87 ; Pitchork Loot[148]=0x0E87 ; Hammer i = 700 UO.SetReceivingContainer(luttuda) FOR n=1 TO 148 uo.findtype(Loot[n],"-1","lastcontainer") if uo.findcount() > 0 then UO.grab(0, "finditem") uo.print("Found "+str(uo.findcount())) Wait(i) END if next UO.UnSetReceivingContainer() end sub
sub Heal() ;Хилинг If UO.STR==UO.Life Then UO.Print("Life is full") Else UO.SetArm("1") UO.BandageSelf() wait(1000) UO.Arm("1") UO.UnSetArm() Endif end sub
а вот и срипт на мининг тут он работает но через некаторое время крэшит клиентCode: ################################################################ ### Переменные ################################################# ################################################################ ### ### Для начала подготовится, положить в банк мешок(bag) и такой же в MageChest ### В мешки положить реги рекола Black Pearl, Mandrake Root, Blood Moss ### Самое главное выяснить Серийник банка!!! ### В банк положить руны к дому(одного типа!!! Тип рун в банке и в MageChest должны совпадать!!!) ### Положить в MageChest Руны в шахту(одного типа) ### ################################################################ ################################################################ ################################################################
var kirka, a, name, run, MageChest var myXX, myYY, p p=0
### ID друзей для игнора при поиске ПК и Криминал var Charon='0x00324C05' var Buiok='0x000C430F' var friend3='0x001EEB63'
var x, y, coord var MCave='2558,501-2578,476' ; диапозон координат пещеры var BankBrit='1446,1702-1421,1671' ; диапозон координат Банка в Брите var Home='1829,786-1843,800' ; диапозон координат Дома
var kalitka='0x0847' ; Тип закрытой калитки var door='0x06A5' ; тип закрытой двери в дом
var OreBox, bag, bankbox, rune, CraftChest var bagreg, chest bag='0x0E76' ;тип мешка с регами bankbox='0x40355E29' ;Id банка (для того, что бы узнать ID банка, командой ",info" - ;- на любой предмет и скопировать из полученной информации - ;- значение C= -> 0x40156896 <- rune='0x1F14' ; Тип руны может быть 2-х типов ; '0x1F14' и '0x1F15'
CraftChest='0x402C32D2' ; Сундук Крафта с паками под руду и инготы
MageChest='0x402B6E6A' ; Сундуг Мага с паками и мешком-с-регами для Рекола
kirka = "0x0E85" ;Тип кирки. 2 вида может "0x0E85" и "0x0E86"
OreBox = "0x4050B366" ;Контейнер для руды
var text1, text2
text1="There is no ore|You have no line|That is to far away|You can't think|You have no line of|too far away|mining in rock."
text2="You put the|You loosen some|You can't think|That is to far away|There is no ore|You have no line of|too far away|mining in rock."
run=118 ; Код клавиши с биндом "AlwesRun"
################################################################ ###Функция Main ########################################## ################################################################ sub main() uo.exec("exec ressurect") uo.exec("exec FindMan") uo.exec("exec mine") end sub
sub r() var r=uo.getrun('self') uo.print(str(r)) end sub
################################################################ ### Функция mine ############################################ ################################################################ sub mine() ; Kopania uo.ignorereset() walker(2578,480,1) var pause=0 myXX=uo.getX(); zapominaet mesto otkuda nacel kopati myYY=uo.getY(); var PX, PY, PZ, IX, IY PX = UO.GetX() PY = UO.GetY() PZ = UO.GetZ() while UO.Weight<=uo.str*4 For Iy=-4 to 4 For Ix=-4 to 4 uo.deletejournal() while not UO.InJournal(text1) && uo.weight<=uo.str*4 if p==1 then if not uo.hidden() then InJournal('You have hidden',60) endif endif UO.WaitTargetTile(-1,Str(PX+Ix),Str(PY+Iy),Str(PZ)) uo.usetype(kirka) InJournal(text2,0) if uo.injournal('You loosen some') then pause=pause+1 if pause>4 then wait(10000) pause=0 endif else pause=0 endif endif wait(200) wend next wait(200) next wait(200) wend uo.exec('exec GoBrit') end sub ################################################################ ### Функция FindMan ######################################## ################################################################ Sub FindMan() uo.set('finddistance','20') var serial, a, b b=4 uo.ignorereset() uo.ignore('self') repeat if UO.InJournal("You have been revealed|You can't seem") then p=1 DelTextInJournal("You have been revealed|You can't seem") uo.showjournal(20) endif if p==1 then p=0 if not uo.hidden() then uo.warmode(0) uo.useskill("Hiding") endif else uo.findman(b) wait(500) if uo.findcount()>0 || uo.injournal('attacking you') then uo.print('ATAC') uo.print(uo.getname('finditem')+' '+str(uo.getdistance('finditem'))) uo.forget('finditem') uo.exec('terminate all; exec GoBrit') endif wait(100) endif if b==4 then b=6 else b=4 endif until uo.dead() end sub
################################################################ ### Функция GoBrit ############################################ ################################################################ Sub GoBrit() uo.exec('terminate mine') uo.ignorereset() uo.press(run) wait(50) uo.press(35) if uo.getrun()==0 then uo.press(run) endif walker(2581,480,0) wait(50) uo.press(35) wait(50) uo.press(35) wait(50) uo.press(run) uo.press(35) wait(50) if uo.getrun()==1 then uo.press(run) endif walker(1433,1693,1) wait(5000) coord=GetXY('self') if ComXY(BankBrit,coord)==true then uo.exec('terminate FindMan; exec GoHome') else GoBrit() endif end sub
sub GoHome() OpenChest() wait(1000) GotoHomeT() move() wait(5000) OpenChest() wait(2000) uo.exec('terminate all; exec main') end sub
################################################################ ### Функция OpenChest ######################################### ################################################################ sub OpenChest() uo.findtype('0x0E42',-1,'ground') if uo.findcount()>0 then uo.useobject(MageChest) chest=MageChest else uo.sayu(' bank ') chest=bankbox endif wait(1000) CheckLag() uo.findtype(bag,-1,chest) bagreg=uo.getserial('finditem') uo.useobject(bagreg) wait(1000) CheckLag() FindRune(chest) end sub
################################################################ ### Функция FindRune ########################################## ################################################################ sub FindRune(b) var idrune uo.findtype(rune,-1,b) idrune=uo.getserial('finditem') Cast(idrune) end sub
################################################################ ### Функция Cast(rune) ############################################ ################################################################ Sub Cast(rune) var a coord=GetXY('self') if ComXY(Home,coord)==true then a=true else a=false endif MoveReg(bagreg) var mana if uo.bm>0 && uo.bp>0 && uo.mr>0 then cast: if uo.mana < 20 then med() wait(2000) goto cast endif mana = uo.mana uo.cast('Recall',rune) DelTextInJournal("fizzle") while mana <= uo.mana wait(200) wend if ComXY(MCave,coord)==false then if ComXY(Home,coord)==a then wait(1000) CheckLag() if uo.injournal("fizzle") then MoveReg(bagreg) goto cast endif wait(200) endif endif else uo.print('Stop') uo.closeuo() endif wait(1000) end sub
################################################################ ### Функция Move reg ########################################## ################################################################ sub MoveReg(id) uo.print('Move Reagents') var a dim reg[3] reg[0] = "0x0F7A" ;Black Pearls reg[1] = "0x0F7B" ;Blood Moss reg[2] = "0x0F86" ;Mandrake Roots for a=0 to 2 if uo.count(reg[a])<1 then uo.findtype(reg[a],-1,id) uo.moveitem('finditem',2,'backpack') wait(700) CheckLag() endif next endsub
################################################################ ### Функция-массив Регов ###################################### ################################################################ Sub mreg(reg) reg[0] = "0x0F7A" ;Black Pearls reg[1] = "0x0F7B" ;Blood Moss reg[2] = "0x0F86" ;Mandrake Roots return reg end sub
################################################################ ### Функция meditation ####################################### ################################################################ sub med() uo.print('Meditation') while uo.mana < uo.int UO.UseSkill("Meditation") injournal("You are at peace|You lose your concentration",60) wend end sub
################################################################ ### Функция Goto Home ######################################### ################################################################ sub GotoHomeT() uo.set('finddistance',4) uo.print('Go to Home') if type(kalitka)==true then uo.press(121) CheckLag() else wait(200) endif walker(1831,797,0) uo.press(121) CheckLag() if type(kalitka)==false then walker(1831,798,0) uo.press(121) CheckLag() endif wait(200) walker(1836,798,0) if type(door)==true then uo.press(121) CheckLag() else wait(200) endif walker(1836,794,0) uo.press(121) CheckLag() wait(500) if type(door)==false then uo.press(121) CheckLag() else wait(200) endif CheckLag() end sub
Sub type(tip) uo.findtype(tip,-1,'ground') if uo.findcount()>0 then return true else return false endif end sub
################################################################ ### Функция MoveOre ########################################## ################################################################ sub move() uo.useobject(CraftChest) CheckLag() uo.print('MOVEORE()') wait(2000) var e dim a[4] a[0] = 0x19B7 a[1] = 0x19BA a[2] = 0x19B8 a[3] = 0x19B9 uo.useobject(OreBox) CheckLag() for e = 0 to 3 repeat uo.findtype(a[e],-1,'backpack') uo.moveitem('finditem',0,OreBox) wait(900) CheckLag() until uo.findcount()==0 next wait(1000) MoveHi() end sub
Sub MoveHi() var Chest, OreBox, HiOreBox Chest='0x402C32D2' OreBox = "0x4050B366" ;Контейнер для руды HiOreBox = "0x4050B362" ;Контейнер для "выхи" var e, c
dim a[4],x[19] a[0] = 0x19B9 ;4 and more ore a[1] = 0x19B7 ;1 ore a[2] = 0x19BA ;2 ore a[3] = 0x19B8 ;3 ore
x[0] = '0x09B9' ;Acid ore x[1] = '0x09A4' ;Cristaline ore x[2] = '0x0085' ;Dragon ore x[3] = '0x09D3' ;Steel ore x[4] = '0x09E6' ;Elvin ore x[5] = '0x09F0' ;Gorgan ore x[6] = '0x008F' ;Send rock ore x[7] = '0x04C2' ;Blood rock ore x[8] = '0x09DA' ;Vulcan ore x[9] = '0x0028' ;Obsidian ore x[10] = '0x08AF' ;Plutonium ore x[11] = '0x09EC' ;Blood crest ore x[12] = '0x0455' ;Black rock ore x[13] = '0x010F' ;Krynite ore x[14] = '0x0BA7' ;Eldar ore x[15] = '0x00CE' ;Valorite ore x[16] = '0x052D' ;Mitheril ore x[17] = '0x07D5' ;Verite ore x[18] = '0x0060' ;Aqua ore uo.useobject(HiOreBox) wait(700) CheckLag() for e=0 to 3 for c=0 to 18 repeat uo.findtype(a[e],x[c],OreBox) if uo.findcount()>0 then uo.moveitem('finditem',0,HiOreBox) CheckLag() wait(400) endif wait(100) until uo.findcount()==0 next next end sub
sub ressurect() repeat ; ©dark_kynep if UO.Life < 1 then uo.useobject('self') CheckLag() uo.warmode(0) UO.LClick(974,57) CheckLag() wait(1000) UO.LClick(267,308) CheckLag() wait(1000) UO.LClick(179,201) CheckLag() wait(1000) walker(2468,531,1) uo.useobject('0x4001D120') CheckLag() walker(2466,542,0) CheckLag() walker(2506,542,0) Alive() else wait(1000) ; UO.Print("You are Alive!!!") endif until uo.dead() end sub
Sub Alive() OpenChest() GotoHomeT() Heal() OpenChest() uo.exec('terminate all; exec main') end sub
sub Heal() uo.useobject('0x4023D30F') CheckLag() wait(500) uo.findtype('0x0E21',-1,'0x4023D30F') uo.moveitem('finditem',10,'backpack',10,10,0) CheckLag() wait(500) repeat uo.bandageself() wait(5000) until uo.life==uo.str wait(500) uo.useobject(CraftChest) CheckLag() wait(500) uo.findtype(kirka,-1,CraftChest) uo.moveitem('finditem',1,'backpack',100,10,0) CheckLag() wait(500) end sub
################################################################ ### Функция паузы по проверке журнала или таймера ######## ################################################################ Sub InJournal(t,time) ;uo.print('EXEC INJOURNAL(T,TIME)') var timer=uo.timer() DelTextInJournal(t) if time==0 then ;uo.print('TIME==0') while not uo.InJournal(t) wait(200) wend else ;uo.print('TIME<>0') while not uo.InJournal(t) && uo.timer()<timer+time wait(200) wend endif end sub
################################################################ ### Функция удаления из журнала Текста ######################## ################################################################ Sub DelTextInJournal(msg) ; msg это параметр, см. выше как его передают var nom=UO.InJournal(msg) ; ищем сообщение и в переменную его if nom>0 then UO.SetJournalLine(Nom - 1," ") ; подменим сообщение DelTextInJournal(msg) ; вызов функцией самой себя, рекурсия endif end sub
################################################################ ### Функция отклик сервера ############################### ################################################################ Sub CheckLag() DelTextInJournal("backpack") ; вытрим ТОЛЬКО нужные нам сообщения в журнале UO.Click('backpack') ; одиночный клик по вашему backpack InJournal("backpack",0) end sub
################################################################ ### Функция World save now #################################### ################################################################ Sub ws() if uo.injournal("World is saving now...") then InJournal("World data saving",1800) endif end sub
########################################## ХОДИЛКА 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 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 ##########################################
Sub GetXY(man) var xy x=uo.getx(man) y=uo.gety(man) xy=str(x)+','+str(y) return xy end sub
Sub ComXY(coordinate,coord) var myx, myy, x1, y1, L, pref, minx, maxx, miny, maxy L=len(coordinate) ;uo.print('Длина строки = '+str(L)) ;wait(100) x1=XY(coordinate,'-',0) ;uo.print('Координаты а: '+x1) ;wait(100) y1=XY(coordinate,'-',1) ;uo.print('Координаты б: '+y1) ;wait(100) minx=XY(x1,',',0) ;uo.print('Координата minx: '+minx) ;wait(100) miny=XY(x1,',',1) uo.print('Координата miny: '+miny) wait(100) maxx=XY(y1,',',0) ;uo.print('Координата maxx: '+maxx) ;wait(100) maxy=XY(y1,',',1) ;uo.print('Координата maxy: '+maxy) ;wait(100) myx=XY(coord,',',0) ;uo.print('Координата myx: '+myx) ;wait(1000) myy=XY(coord,',',1) ;uo.print('Координата myy: '+myy) if minx>maxx then x=minx ;uo.print('X1=MinX='+x1) ;wait(100) minx=maxx ;uo.print('MinX=MaxX='+minx) ;wait(100) maxx=x ;uo.print('maxx=x1='+minx) ;wait(100) endif if miny>maxy then y=miny ;uo.print('Y1=MinY='+y) ;wait(100) miny=maxy ;uo.print('MinY=MaxY='+miny) ;wait(100) maxy=y ;uo.print('maxy=y1='+maxy) ;wait(100) endif ; wait(100) if myx>minx && myx<maxx && myy>miny && myy<maxy then return true else return false endif end sub
Sub XY(con,d,c) var pref, L, z L=len(con) for pref=0 to L if con[pref]==d then if c==0 then z=left(con,pref) endif wait(50) if c==1 then z=right(con,L-pref-1) endif endif next return z end sub
|