| Yoko http://forum.yoko.com.ua/ |
|
| Модифицированный майнинг. Помогите доработать плс. http://forum.yoko.com.ua/viewtopic.php?f=20&t=2605 |
Page 1 of 1 |
| Author: | fr33s [ 2005-01-13 07:21:22 ] |
| Post subject: | Модифицированный майнинг. Помогите доработать плс. |
Я только начал разбираться с инжой. Намного легче разбираться на примерах =) Буду благодарен если поможете доработать макрос на майнинг. Собственно что мне нужно 1. Я не знаю как работает схема "указания кирки" в вашем примере в разделе "скриптс", но мне нужно чтобы брало как обжект тайп. У нас на шарде кирка имеет заряды, поэтому нужно чтобы после рекола он брал из сундука в который складывает руду,две кирки (две вполне хватит) и потом юзал их через обжект тайп. 2. Нужно чтобы чар ходил по шахте -- во-первых у нас руда респавниться долго, во-вторых объём руды содержиться не в одном тайле а в четырёх, в-третьих в тайле определённый вид руды т.к. если он будет ходить будет шанс нарыть разной руды, не только айрона. Самый простейщи вариант -- чтобы он ходил к 10ти точкам в шахте по кругу. Один раз выкопал -- перешёл, выкопал -- перешёл 3. Чтобы рекол был по двум айди рун в бекпаке через спеллбук -- ИМХО во всех скриптах это удобнее. 4. Как дополнение хорошо бы было если бы он периодически подходил к плавильне в шахте и плавил айрон т.к. сама руда у нас весит в 10 раз больше чем инги -- но это не критично.. значит будет чаще реколиться. Зато мне абсолютно не нужны никакие алармы =) Надеюсь тут есть человек который может это сделать, надеюсь что это не оч. сложно. вот в этом топике в самом начала есть минимум два макроса на майнинг один из которых построен по принципу ходьбы от одной точку к другой, но сам не разберусь. http://yoko.netroof.net/forum/viewtopic ... 49&start=0 Кстати, шард НайтДей |
|
| Author: | fr33s [ 2005-01-13 08:02:06 ] |
| Post subject: | |
Собственно ниже я приведу макрос, который нужно немного дополнить -- ### Ultimat Mining Macro w/fixes sub go_mining() var cycle=1 var path="7oi7ki" #change this from your exec record_path text var test=0 var i=0 var j uo.print('Target the bag for your ingots to go into') uo.exec('addobject oresBag') while uo.targeting() wait(100) wend uo.print('Target your Pickaxe') uo.exec('addtype pickaxe') while uo.targeting() wait(100) wend uo.print('Target your rune') uo.exec('addobject temprune') while uo.targeting() wait(100) wend UO.SetCatchBag("oresBag") While i<LEN(path) if VAL(path[i]) then j=VAL(path[i]) i=i+1 else j=1 endif Repeat if test<>1 then UO.DeleteJournal() mine_spot() end if UO.Print("New Location!") if not make_step(path[i]) then UO.Print("Probably Stuck!") UO.Print("Hope it is a Worldsave") endif j=j-1 Until j==0 i = i + 1 if cycle && i==LEN(path) then i=0 endif Wend end sub sub mine_spot() var maxMineTime=9000 var times=0 var timeout=0 If UO.Weight>2000 Then #Set this weight according to your strength or server settings (2000 stone = about 500 str) Oredroppings() Endif UO.DeleteJournal() ToHide() While (UO.InJournal("There is no") OR UO.InJournal("Try mining"))==0 UO.Print("Mining time!") UO.DeleteJournal() #UO.WaitTargetTile("1339",STR(UO.GetX()),STR(UO.GetY()),"0") ; edited out to work on Dominaira UO.Exec("waittargetself") UO.UseType("pickaxe") timeout=0 times = times +1 if times>20 then wait(maxMineTime) times = 0 endif Repeat timeout=timeout+20 Wait(20) #UO.Print("Waiting...") Until UO.InJournal("You loosen") OR UO.InJournal("You put the") OR UO.InJournal("There is no") OR UO.InJournal("Try mining") OR UO.InJournal("That is too") OR UO.InJournal("You are starving") OR UO.InJournal("World save") OR timeout>maxMineTime If UO.InJournal("World save") Then Wait(5000) UO.DeleteJournal() Endif Wend return 0 end sub sub record_path() var x var y var path="" UO.DeleteJournal() Repeat x=UO.GetX() y=UO.GetY() if waitNewPos(x,y) then path=path+extract_dir(x,y,UO.GetX(),UO.GetY()) endif Until UO.InJournal("stop") path = compressPath(path) UO.TextClear() UO.TextOpen() UO.TextPrint("Your path is:") UO.TextPrint(path) end sub sub send_step(keycode,dir) var x = UO.GetX() var y = UO.GetY() var timeout = 0 if UO.GetDir()<>dir then UO.Press(keycode) Repeat wait(50) Until UO.GetDir()==dir endif UO.Press(keycode) Repeat timeout=timeout+50 wait(50) Until x<>UO.GetX() || y<>UO.GetY() || timeout>2000 if timeout>2000 then return 0 endif return 1 end sub sub waitNewPos(x,y) while x==UO.GetX() && y==UO.GetY() if UO.InJournal("stop") then return 0 endif wend return 1 end sub sub compressPath(path) Var i=0 Var j=0 Var newPath="" while i<LEN(path) j=1 while path[i]==path[i+1] AND j<9 i=i+1 j=j+1 wend if j==1 then newPath=newPath+path[i] else newPath=newPath+STR(j)+path[i] endif i=i+1 wend return newPath end sub sub extract_dir(x,y,a,b) if x>a then if y==b then return "i" else if y>b then return "n" else return "w" endif endif else if x<a then if y==b then return "l" else if y>b then return "e" else return "s" endif endif else if y>b then return "o" else return "k" endif endif endif end sub sub make_step(dir) if dir=="e" then send_step(39,1) return 1 endif if dir=="l" then send_step(34,2) return 1 endif if dir=="s" then send_step(40,3) return 1 endif if dir=="k" then send_step(35,4) return 1 endif if dir=="w" then send_step(37,5) return 1 endif if dir=="i" then send_step(36,6) return 1 endif if dir=="n" then send_step(38,7) return 1 endif if dir=="o" then send_step(33,0) return 1 endif if dir=="d" then While UO.Count("0x19b9") UO.Drop("0x19b9") wait(1000) Wend wait(200) return 1 endif UO.Print("Recall Time!") return 0 end sub sub Oredroppings() UO.DeleteJournal() Checkmana() UO.UnSetCatchBag() UO.DeleteJournal() UO.Cast('Mark','temprune') #Keep an extra rune loose inside your backpack Wait(5000) While UO.InJournal("spell fizzle")==1 UO.Cast('Mark','temprune') Wait(5000) Wend Checkmana() Что такое чек мана и зачем оно мне надо? Мне кол-во маны проверять не надо она быстро регенерируется пассивно UO.warmode(0) UO.Exec("recall Runebook 0x03") #Change 0x03 to match the slot of your house in your runebook Как узнать номер своего слота и как он будет реколиться? У меня есть три возможности в буке -- гейт, абилка паладина -- святое путешествие и рекол. Как можно заставить его просто реколиться домой по руне? Wait(2000) While UO.InJournal("spell fizzle")==1 UO.warmode(0) UO.Exec("recall Runebook 0x03") Wait(2000) Wend Checkmana() UO.warmode(0) UO.Cast('Recall','temprune') #Then it recalls back to where you were last and continues mining with the path you recorded! Wait(3000) While UO.InJournal("spell fizzle")==1 UO.Cast('Recall','temprune') Wait(3000) Wend UO.SetCatchBag("oresBag") endsub sub CheckLag() #Simple lag checking function so that you don't mess up marking or recalling UO.DeleteJournal() UO.Click('backpack') Repeat wait(200) Until UO.InJournal('backpack') end sub А в каком месте он сбрасывает руду в контейнер? Чтобы я там мог добавить строку чтобы кирки брал из него.. |
|
| Author: | 666Man666 [ 2005-01-13 09:14:03 ] |
| Post subject: | |
Ух скока вопросов.... аж страшно )) |
|
| Author: | BETEPAH [ 2005-01-13 10:26:07 ] |
| Post subject: | |
Поехали uo.print('Target your Pickaxe') uo.exec('addtype pickaxe') while uo.targeting() wait(100) wend Тут ты указываешь Кирку и она забивается по Обьекту ....Удаляем )) uo.print('Target your rune') uo.exec('addobject temprune') while uo.targeting() wait(100) wend Это вроде руна Аларм .....Удаляем If UO.Weight>2000 Then Oredroppings() Endif Тут у тебя ссылка на отсуцтвующий модуль сброса руды (Oredroppings) ...... там и правь поднятие кирки запаски . UO.UseType("pickaxe") Так ...тут вместо слова pickaxe забей просто тип ...... если он не найдет кирку (сломалась он возмет другую с таким же типом. (обьект может быть тока один ....а вот тип относится к всем киркам) Checkmana() Это якобы скрипт который проверяет количество манны у тебя ...нужно это для того что бы перемарчить руну если она закончилась ....... вдруг у тебя 5 раз физл будет . UO.Exec("recall Runebook 0x03") Так ....в модуле проверки веса где нету модуля сброса добавь строчку Это sub RecallToHome() var i uo.print('Реколимся домой...') for i=1 to 10 uo.deletejournal() uo.waittargetobject('runeHome') uo.cast('Recall') if WaitForRecall()==1 then return 1 end if next return 0 end sub Этот модуль возврата его уже после сброса. sub RecallToCave() var i uo.print('Реколимся обратно...') for i=1 to 10 uo.deletejournal() uo.waittargetobject('runeCave') uo.cast('Recall') if waitForRecall()==1 then return 1 end if next return 0 end sub А это добавь в самое начало ( это модули выбора рунок ) uo.print('Выбери руну домой: ') uo.exec('addobject runeHome') while uo.Targeting() wait(100) wend uo.print('Выбери руну в Шахту: ') uo.exec('addobject runeCave') while uo.Targeting() wait(100) wend ог добавить строку чтобы кирки брал из него.. [/color][/quote] 2. Нужно чтобы чар ходил по шахте -- во-первых у нас руда респавниться долго, Тот скрипт который у тебя он и ходит по шахте .....запиши путь скриптом (помойму Рекорд Паф) проверяй. |
|
| Author: | Ugrum. [ 2005-01-13 11:34:35 ] |
| Post subject: | |
fr33s wrote: Собственно ниже я приведу макрос, который нужно немного дополнить -- Нет не "немного" fr33s wrote: У меня есть три возможности в буке -- гейт, абилка паладина -- святое путешествие и рекол
Из этого я делаю вывод что у тебя RunUO.С этого следует начинать -если это так.Потому что практически вся работа,проделанная Ветераном бесполезна.А это обидно. Если в двух словах - этот скрипт нуждается в слишком серьезной переделке. -вместо сообщений в журнале у тебя будут клилоки( но это ерунда) Code:
-этот принцип прицела на тайл пола шахты работать не будет RunUO требует точного соответствия при прицеле номера тайла,и всех координат. |
|
| Author: | BETEPAH [ 2005-01-13 12:15:54 ] |
| Post subject: | |
Хэх.....под АОС я не скриптовал . |
|
| Author: | Ugrum. [ 2005-01-13 12:24:22 ] |
| Post subject: | |
fr33s wrote: UO.Exec("recall Runebook 0x03") #Change 0x03 to match the slot of your house in your runebook Как узнать номер своего слота и как он будет реколиться? У меня есть три возможности в буке -- гейт, абилка паладина -- святое путешествие и рекол. Как можно заставить его просто реколиться домой по руне?
Да,и насчет рекола.... Code: uo.recall(MyRunebuk,Num) где MyRunebuk -ID рунабуки Num - значение номера руны. Причем для паладинского рекола(святое путешествие) вычисляется так: Num = str(1+(6*номер руны в книге)) Например Code: Num = str(1+(6*1)) Прыгнет по первой руне в книге паладинским реколом(святое путешествие).Формула Num = str(6*номер руны в книге)-1)) |
|
| Author: | fr33s [ 2005-01-13 17:04:40 ] |
| Post subject: | |
простите =( не знал что отличия такие серьёзные У меня есть небольшой опыт, если можно так сказать "скриптинга" на уоавтопилоте. Так вот на пилоте это реализуется по определённо логической схеме, но в пилоте нету типов и всего прочего, поэтому на основании скудных знаний о пилоте и инже мне мне интересно можно ли что-то подобное написать на инже -- Чтобы не прослыть лодырем, сразу пишу то, о чём уже имею какое-то представление =) 1.Юзтайп кирка координата северозапад (3 удара) UO.Exec("usetype кирка") wait (1000) UO.LClick(х,у) wait (6000) # (*3) 2.два шага влево, не знаю 3. юзтайп координата юговосток (3 удара) UO.Exec("usetype кирка") wait (1000) UO.LClick(х,у) wait (6000) # (*3) 4. два шага вверх не знаю 5. Далее 10 таких блоко по 2 шага по три удара по кругу -- не очень эффективно, зато не надо каждый раз маркить руну т.к. руда истощается по всей мине равномерно. На шагах при ворлд сейве и лагах макрос обычно слетает (т.е. шаги пропускаются и чар может утопать чёрти куда или вообще никуда не топает долгое время) интересно можно ли на инже как-то защитить его от этого, чтобы он стабильно топал, но в любом случае максимальный вес у меня где-то 250 -- это мало и он будет часто реколиться домой а потом на исходную позицию, так что слёт не критичен. 6. после каждого шага проверка на вес, если вес больше определённого рекол перед сундуком домой, Проверка на вес тут где-то была вверху точно не пойму А вот рекол уже знаю, только нужно ещё условие -- иф вес зен рекол -- тож не знаю как =) 7. перетащить руду на сундук (притом не только айрон а всю руду), Подозреваю что UO.Exec("useobject айди бекпака") #открыть ящик UO.Exec("findtype руда 0x0000 айди бекпака") Как её перетащить куда-то не уверен так же интересно можно ли указать всю руду или нужно каждый тип по очереди? 8. взять две кирки, взять реги по 3 штуки UO.Exec("useobject айди контейнера") #открыть ящик UO.Exec("findtype кирки 0x0000 айди контейнера") Uo.Exec("grab 2 finditem") UO.Exec("findtype реги 0x0000 айди контейнера") #(*3) Uo.Exec("grab 3 finditem") 9. рекол на исходную позицию. uo.recall(MyRunebuk,Num) Num = str(6*номер руны в книге)-1)) Такой вот довольно простой скрипт и не очень длинный. Кое-что я даже знаю как написать но в большинстве своём -- не знаю. Ведь такой скрипт по идее должен работать? П.с. на аосе марк и рекол не физлят при 100+ магии никогда, а у меня именно 100. Возможно скрипт на майнинг на АОС был бы интересен не только мне. Ещё раз сори что не предупредил. |
|
| Author: | fr33s [ 2005-01-13 17:28:00 ] |
| Post subject: | |
ребята, на вас вся надежда =) |
|
| Author: | Ugrum. [ 2005-01-13 18:02:18 ] |
| Post subject: | |
Ты все очень хорошо расписал.Вот по номерам и делай процедуры... запустишь одну-переходи к другой) номер 1 и 3 имеют привязку к RunUO. остальные достаточно стандартны и на этом форуме примеров таких процедур..... много. Например попробуй сделать чтобы он копал |
|
| Author: | fr33s [ 2005-01-13 18:14:12 ] |
| Post subject: | |
я к сожалению ещё совсем не знаю архитектуру языка.. =р так только обрывки.. пока что основная загвоздка в том, чтобы он ходил и реколился с проверкой на вес. Ну и самая большая приблема оформить эти модули в работающий скрипт с циклами, сабами, вендами и прочими необходимыми эндами ) |
|
| Author: | fr33s [ 2005-01-13 18:27:57 ] |
| Post subject: | |
начну с рекола sub mining() var Num Num = str(1+(6*1)) или Num = str((6*1)-1) uo.recall(0x4002943C,Num) end sub -- всё чего удаётся этим добиться -- надпись "Сет дефолт рун кэнселд" -- фигня какая-то. Кто-то может сказать как отреколиться по простой руне через айтем айди? ) |
|
| Author: | fr33s [ 2005-01-13 19:00:22 ] |
| Post subject: | |
чувствую мне бы больше подошёл такой скрипт, но в нём слишком много незнакомых мне команд Из него нужно убрать все алармы, уожурнал .. я так понимаю что этот скрипт построен не на тайлах. Var DRuna='0x40226200' ; АЙДИ рунки домой Var NRuna=1 Var UnloadCont='0x401BB7F9' ; АЙДИ сундука для руды sub maning() var mx, my, mz, i, j, jor, ser, noto DIM MRuna[6] ; Массив из АЙДИ рунок в шахты MRuna[1]='0x40101C55' MRuna[2]='0x402264A8' MRuna[3]='0x4028E150' MRuna[4]='0x400BBF6F' MRuna[5]='0x4022654E' MRuna[6]='0x402263EB' uo.print('!!Выбери Лопату!! ') uo.exec('addobject Shovel') while uo.targeting() wait(100) wend na4alo: mx = UO.GetX("self") my = UO.GetY("self") mz = UO.GetZ("self") UO.DeleteJournal() for i = mx-4 to mx+4 for j = my -4 to my+4 while not UO.Hidden() UO.Warmode("0") uo.print("Прячемся...") UO.UseSkill("Hiding") wait(4000) wend UO.Print("Копаем в координатах: "+str(mx-i)+" "+str(my-j)) infologs() while not UO.InJournal("no ore here") and not UO.InJournal("location") and not UO.InJournal("far away") and not UO.InJournal("in rock") ##while not UO.InJournal("no ore here") and not UO.InJournal("location") and not UO.InJournal("far away") and not UO.InJournal("in rock") and not UO.InJournal("Iron Ore") UO.DeleteJournal() if uo.waiting() then uo.canceltarget() endif UO.Waittargettile("1341", str(i), str(j), str(mz)) UO.Useobject("Shovel") while not UO.InJournal("You put") and not UO.InJournal("heavy") and not UO.InJournal("location") and not UO.InJournal("no ore") and not UO.InJournal("but fail") and not UO.InJournal("far away") and not UO.InJournal("in rock") wait (500) if uo.injournal("heavy") then ##Pause() endif if uo.dead() then ##Pause() endif for jor = 0 to 9 ser = uo.journalserial(jor) noto = uo.getnotoriety(ser) if noto <> 1 and noto <> 0 and not uo.injournal("elemental") then if uo.waiting() then uo.canceltarget() endif goto end endif next wend if uo.weight > uo.str*4 then ; Максимальный вес при котором домой с рудой goto end endif wend UO.DeleteJournal() next next end: if uo.waiting() then uo.canceltarget() endif RecallRune(DRuna) wait(5000) while not UO.Hidden() UO.Warmode("0") uo.print("Прячемся...") UO.UseSkill("Hiding") wait(4000) wend loot() UO.SetReceivingContainer(UnloadCont) Wait(100) UO.Grab('0',MRuna[NRuna]) Wait(1000) NRuna=NRuna+1 if NRuna>6 then NRuna=1 endif UO.UnSetReceivingContainer() uo.useobject(UnloadCont) Wait(100) UO.Grab('0',MRuna[NRuna]) GetRegy() wait(1000) reccal: uo.deletejournal() if uo.waiting() then uo.canceltarget() endif RecallRune(MRuna[NRuna]) wait(5000) goto na4alo end sub sub GetRegy() if uo.count('0x0F7B')<10 then uo.FindType('0x0F7B',-1,UnloadCont) ;Blood Moss wait(100) uo.Grab('10','finditem') wait(500) end if if uo.count('0x0F86')<10 then uo.FindType('0x0F86',-1,UnloadCont) ;Mandrake Roots wait(100) uo.Grab('10','finditem') wait(500) end if if uo.count('0x0F8D')<5 then uo.FindType('0x0F8D',-1,UnloadCont) ;Spider's Silk wait(100) uo.Grab('5','finditem') wait(500) end if if uo.count('0x0F7A')<5 then uo.FindType('0x0F7A',-1,UnloadCont) ;Black Pearls wait(100) uo.Grab('5','finditem') wait(500) end if end sub sub loot() ; перекладка руды в сундук if uo.waiting() then uo.canceltarget() endif VAR a,Exit DIM Ore[20] Ore[0]=0x19B9 ; 4 and more ore Ore[1]=0x19B7 ; 1 ore Ore[2]=0x19BA ; 2 ore Ore[3]=0x19B8 ; 3 ore Ore[4]=0x0F11 ; saphires Ore[5]=0x0F16 ; amethysts Ore[6]=0x0F18 ; tourmalines Ore[7]=0x0F15 ; citrines Ore[8]=0x0F10 ; emeralds Ore[9]=0x0F0F ; star sapphires Ore[10]=0x0F26 ; diamonds Ore[11]=0x1F4C ; recall scrolls Ore[12]=0x0EED ; gold Ore[13]=0x0F20 ; tourmaline UO.SetReceivingContainer(UnloadCont) wait(500) For a=0 to 13 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() end sub sub RecallRune(rn) ; Рекол по рункам var mx, my reccal: uo.deletejournal() if uo.waiting() then uo.canceltarget() endif mx = UO.GetX("self") my = UO.GetY("self") UO.DeleteJournal() UO.Cast('Recall',rn) wait(4000) if not UO.GetX("self") <> mx and not UO.GetY("self") <> my then goto reccal endif end sub sub pwav() ; звук при выкапывании ЭЛЕМЕНТАЛА endsub sub pwavw(); звук при появлении ПК endsub sub infologs() 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 |
|
| Author: | Ugrum. [ 2005-01-13 22:04:29 ] |
| Post subject: | |
раз уж решил начать с рекола-разберись с этой процедурой,которую сам же и цитируешь Code: sub RecallRune(rn) ; Рекол по рункам для корректной работы с рунабукой требуется установить значения. Code: uo.set('norbcalc','1')
|
|
| Page 1 of 1 | All times are UTC+02:00 |
| Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |
|