imaborg 0 Жалоба Опубликовано 11 июля, 2011 Писал скрипт для производства полного комплекта экскептиональной брони и помещения её в мешок! у меня слабый уровень скриптинга и никакой научной подготовки (учусь на юрфаке), прочитал пару раз все уроки на joko форуме, видел кучу разных скриптов и анализировал их. помогите дописать этот скрипт! sub main() var i var dwserial var expserial VAR FoodType='0x097B' # Тип еды #'0x097B' - жаренная рыба #'0x09F2' - жаренное мясо #'0x171F' - бананы dim dwitem[7] dwitem[0]='0x1416' #Breastplate dwitem[1]='0x141A' #Legs dwitem[2]='0x1417' #Arms dwitem[3]='0x1419' #Helm dwitem[4]='0x1418' #Gloves dwitem[5]='0x1413' #Gorget dwitem[6]='0x1B76' #Shield dim dwmenu[7] dwmenu[0]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Dwarven Platemail Breastplate'" dwmenu[1]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Dwarven Platemail Legs'" dwmenu[2]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Dwarven Platemail Arms'" dwmenu[3]="'What' 'Armor' 'Select' 'Helmets' 'Select' 'Dwarven Plate Helm'" dwmenu[4]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Dwarven Platemail Gloves'" dwmenu[5]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Platemail Gorget'" dwmenu[6]="'What' 'Shields' 'Select' 'Heater'" uo.CancelMenu() uo.CancelTarget() UO.Print("Укажите контейнер для FULL DW Exceptional комплекта!") UO.Exec('addobject Expbag') While UO.Targeting() Wait(300) Wend UO.Print("Укажите из какого металла будем ковать?") UO.Exec('addobject dwmetall') While UO.Targeting() Wait(300) Wend if UO.GetQuantity('dwmetall') <= 150 then uo.print("Недостаточное количество ингов в паке") wait(100) else uo.print('Приступаем к ковке Dwarven Platemail Breastplate') For i = 0 to 6 fulldw() next endif end sub Sub fullDW() while not UO.InJournal("exceptional") UO.DeleteJournal() UO.waitmenu("dwmenu[i]") ################################################################## uo.waittargetobject('dwmetall') uo.useobject('^0x13E3') while not (UO.InJournal("You create") or UO.InJournal("You make") or UO.InJournal("You destroy")) wait(300) wend repeat uo.findtype('dwitem[i]','-1','Backpack') uo.waittargettype('0x0F51') UO.Usetype('0x0FBB') wait(4000) until uo.injournal("You could make some material from that.") wend UO.Findtype('dwitem[i]','-1','Backpack') uo.MoveItem('finditem','-1','ExpBag') CheckLag() uo.print('Exceptional сделан!') uo.usetype('FoodType') wait(1000) end sub Sub CheckLag() UO.DeleteJournal("Backpack") UO.Click('backpack') repeat wait(100) until UO.InJournal("Backpack") end sub как я только не вставлял этот dwmenu ничего не выходит(( возможные ошибки: 1. заменить пробелы на запятые или убрать " в dwmenu[0]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Dwarven Platemail Breastplate'" 2. заменить uo.waitmenu("dwmenu") на uo.exec("waitmenu.............. или использовать uo.automenu пс - наткнулся в стандартной документации на вот что sub Craft(tool, resource, minresource, delay, menu1, choice1, menu2, choice2, menu3, choice3) if menu1<>"" then UO.Exec("automenu '"+menu1+"' '"+choice1+"'") if menu2<>"" then UO.Exec("automenu '"+menu2+"' '"+choice2+"'") if menu3<>"" then UO.Exec("automenu '"+menu3+"' '"+choice3+"'") while UO.Count(resource)>minresource if UO.Count(tool) < 1 then UO.Print("Tool not found") return end if UO. Print("Resource "+STR(UO.Count(resource))) wait(delay) UO. waittargettype(resource) UO.usetype(tool) wend UO.Print("Out of resource ("+STR(UO.Count(resource))+")") end sub не понимаю что означает и кроется за этим if menu1<>"" then и зачемто везде + ставит перед менюшками может в этом ключ к успеху моего скрипта? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 12 июля, 2011 uo.exec('waitmenu... это порнуха приводящая к парсам.... Запомни, между значений в скобках всегда должны быть запятые. dim dwmenu[7] dwmenu[0]='What','Armor','Select','Platemail','Select','Dwarven Platemail Breastplate' dwmenu[1]='What','Armor','Select','Platemail','Select','Dwarven Platemail Legs' dwmenu[2]='What' 'Armor','Select','Platemail','Select','Dwarven Platemail Arms' dwmenu[3]='What' 'Armor','Select','Helmets','Select','Dwarven Plate Helm' dwmenu[4]='What' 'Armor','Select','Platemail','Select','Dwarven Platemail Gloves' dwmenu[5]='What' 'Armor','Select','Platemail','Select','Platemail Gorget' dwmenu[6]='What' 'Shields','Select','Heater' В инжекте двойные и одинарные кавычки - это одно и тоже.. если ты открыл кавычки один раз, то вторые открывающие твои кавычки будут уже являтся символом переменной или значения.. что приведет к ошибке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 12 июля, 2011 чет я не догнал, для чего вводились var dwserial var expserial и еще, кстати parse error выходит вот на этой строчке dwmenu[0]='What','Armor','Select','Platemail','Select','Dwarven Platemail Breastplate' что-то мне подсказывает, что и на остальных менюшках будет также...то ли под одни кавычки все это просит, то ли еще что Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 12 июля, 2011 я тут немного переработал его запускается без проблем, но... делает грудак... 1) если экспет, то перетаскивает его в сумку, 4 раза жрет и выключается. 2) если не эксепт, то не плавит, продолжает делать дальше итд. var food='0x097B' # Тип еды #'0x097B' - жаренная рыба #'0x09F2' - жаренное мясо #'0x171F' - бананы sub fulldwpl() var i var time=0 dim dwitem[7] dwitem[0]='0x1416' #Breastplate dwitem[1]='0x141A' #Legs dwitem[2]='0x1417' #Arms dwitem[3]='0x1419' #Helm dwitem[4]='0x1418' #Gloves dwitem[5]='0x1413' #Gorget dwitem[6]='0x1B76' #Shield dim dwtype1[7] dwtype1[0]='Armor' dwtype1[1]='Armor' dwtype1[2]='Armor' dwtype1[3]='Armor' dwtype1[4]='Armor' dwtype1[5]='Armor' dwtype1[6]='Shields' dim dwtype2[7] dwtype2[0]='Platemail' dwtype2[1]='Platemail' dwtype2[2]='Platemail' dwtype2[3]='Helmets' dwtype2[4]='Platemail' dwtype2[5]='Platemail' dwtype2[6]='Heater' dim dwtype3[6] dwtype3[0]='Dwarven Platemail Breastplate' dwtype3[1]='Dwarven Platemail Legs' dwtype3[2]='Dwarven Platemail Arms' dwtype3[3]='Dwarven Plate Helm' dwtype3[4]='Dwarven Platemail Gloves' dwtype3[5]='Platemail Gorget' UO.canceltarget() UO.Print("Куда складывать броню?") UO.addobject('bagexc') While UO.Targeting() Wait(100) Wend uo.deletejournal() For i = 0 to 6 while not UO.InJournal('exceptional') UO.DeleteJournal() UO.waitmenu('What', dwtype1[i], 'Select', dwtype2[i], 'Select', dwtype3[i]) uo.waittargettype('0x1BF2') uo.usetype('0x13E3') repeat wait(1000) time=time+1 until uo.injournal("You create|You destroy|You make") or time > 20 uo.findtype('0x13BB','-1','backpack') if uo.findcount() then uo.deletejournal() uo.waittargetobject(dwitem[i]) uo.usetype('0x0FBB') wait(3000) endif wend UO.Findtype(dwitem[i]) uo.MoveItem('finditem','-1','bagexc') uo.usetype(food) wait(1000) next end sub Sub eda() uo.findtype(food) if uo.findcount() then uo.usetype(food) else uo.print("Нет еды!") endif end sub Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 12 июля, 2011 Жесть) последний скрипт перековеркан донельзя))) 1. после изготовления будет искать вещь с типом: 0x13BB и если найдет. то будет только ее плавить. 2. Нет условия для экзепт шмотки 3. функция финдтайп и перемещения не правильно описана... 4. зачем то делает юзтайп еды, если ниже идеть отдельный макрос под еду.. в общем писать остальное лень. Тот кто писал это макрос не читал мой анекдот про 2 стакана. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 12 июля, 2011 Жесть) последний скрипт перековеркан донельзя))) 1. после изготовления будет искать вещь с типом: 0x13BB и если найдет. то будет только ее плавить. 2. Нет условия для экзепт шмотки 3. функция финдтайп и перемещения не правильно описана... 4. зачем то делает юзтайп еды, если ниже идеть отдельный макрос под еду.. в общем писать остальное лень. Тот кто писал это макрос не читал мой анекдот про 2 стакана. :D читал читал, вечером переделанный скину, пока у меня задача была из первого скрипта сделать хотя бы запускающийся) потому что в первом во-первых, меню не работало в таком формате, а под общими кавычками он его не принимал. Во-вторых, массив вынесен был из функции fulldw() и он выдавал на этом ошибку...короче я кол-во функций сократил ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imaborg 0 Жалоба Опубликовано 12 июля, 2011 о! хоть что-то прояснилось у меня в голове) я незнал что массив из функции выносить нельзя! Спасиб! По поводу лишних переменных - я еще планировал сделать чтобы скрипт определял количество пустых мешков в паке или сундуке, искал пустой, запоминал серийник, заносил в игнор лист после того как сделается фулл дв! Чтобы к примеру поставил скрипт, ушел) а он тебе 10 комплектов брони сделал! Конечно это рассчитано не на вышку, но кто знает у кого ее сколько)))) вообще изначально я начал писать ээтот скрипт для того чтобы один чел поставил вендора и продавал различные комплекты брони - от вауксита до вышки! А то ему лень вручную сидеть) через пару часиков буду дома, попробую все это дописать! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 12 июля, 2011 механизация процесса - это, конечно, хорошо. Но не до такой же степени))) а моя модификация скрипта не такая безнадежная, как я думал ) Он уже переходит на ноги...правда подглючивает вот таким образом: Чего-то он начинает делать лишнее. Я весь скидывать не буду - массивы итд все такое же осталось. Сам цикл скидываю только: For i = 0 to 6 eda() ## хватит одного употребления пищи while uo.count('0x1BF2') > 30 ## 29 ингов нужно для того, чтоб грудак сделать uo.DeleteJournal() uo.waitmenu('What', dwtype1[i], 'Select', dwtype2[i], 'Select', dwtype3[i]) uo.waittargettype('0x1BF2') uo.usetype('0x13E3') repeat wait(1000) time=time+1 until uo.injournal("You create|You destroy|You make") or time > 20 if uo.injournal('exceptional') then ## проверка на эксепт uo.findtype(dwitem[i]) if uo.findcount() then uo.moveitem('finditem', 1, 'bagexc') ## тащит в сумку, если эксепт wait(300) endif uo.deletejournal() next else uo.findtype(dwitem[i],'-1','backpack') if uo.findcount() then uo.waittargetobject('finditem') uo.usetype('0x0FBB') ## плавит, если неэксепт wait(3000) else wait(100) ## на всяк случай, чтоб не проглючило, если не найдет то, что плавить нужно endif wend wait(1000) end sub хотелось бы узнать, что он лишнее делать пытается? Загвоздка осталась только с этим) Есть у меня, конечно, предположение, что это из-за того, что я next поставил в отличный уровень от самого цикла for. Но как тогда сделать проверку на эксепт, чтобы он переходил к след вещи при изготовлении эксепта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 12 июля, 2011 Чтобы к примеру поставил скрипт, ушел) а он тебе 10 комплектов брони сделал! Конечно это рассчитано не на вышку, но кто знает у кого ее сколько)))) А что мешает перетаскивать все комплекты в один мешок то?) Геморроя меньше 2ZeFeaR: А что тебе мешает некст в конце запихнуть? это же ничего не изменит, ибо если экзепт, то он перетаскивает... а если неэкзепт - плавит. Это как раз то, о чем я говорил... когда пишешь скрипт надо всегда прописать то, что должна делать программа, если что-то не произойдет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 12 июля, 2011 2ZeFeaR: А что тебе мешает некст в конце запихнуть? это же ничего не изменит, ибо если экзепт, то он перетаскивает... а если неэкзепт - плавит. Это как раз то, о чем я говорил... когда пишешь скрипт надо всегда прописать то, что должна делать программа, если что-то не произойдет... ну видимо я совсем дуб))) вроде все просто описываешь, а как до практики дело доходит, то вообще никак. ок, на каждый if я поставил условие со своим else, пусть даже оно будет хотя бы wait(100). Вот, что сейчас есть (убрал next из условия, добавил в конец и еще в одном месте endif дописал, ибо не хватало одного). Абсолютно не понимаю, почему он опять не хочет нормально работать. Сейчас распишу даже все: var food='0x097B' # Тип еды #'0x097B' - жаренная рыба #'0x09F2' - жаренное мясо #'0x171F' - бананы sub fulldwpl() var i var time=0 dim dwitem[7] dwitem[0]='0x1416' #Breastplate dwitem[1]='0x141A' #Legs dwitem[2]='0x1417' #Arms dwitem[3]='0x1419' #Helm dwitem[4]='0x1418' #Gloves dwitem[5]='0x1413' #Gorget dwitem[6]='0x1B76' #Shield dim dwtype1[7] dwtype1[0]='Armor' dwtype1[1]='Armor' dwtype1[2]='Armor' dwtype1[3]='Armor' dwtype1[4]='Armor' dwtype1[5]='Armor' dwtype1[6]='Shields' dim dwtype2[7] dwtype2[0]='Platemail' dwtype2[1]='Platemail' dwtype2[2]='Platemail' dwtype2[3]='Helmets' dwtype2[4]='Platemail' dwtype2[5]='Platemail' dwtype2[6]='Heater' dim dwtype3[7] dwtype3[0]='Dwarven Platemail Breastplate' dwtype3[1]='Dwarven Platemail Legs' dwtype3[2]='Dwarven Platemail Arms' dwtype3[3]='Dwarven Plate Helm' dwtype3[4]='Dwarven Platemail Gloves' dwtype3[5]='Platemail Gorget' dwtype3[6]=0 UO.canceltarget() UO.Print("Куда складывать броню?") UO.addobject('bagexc') While UO.Targeting() Wait(100) Wend uo.deletejournal() For i = 0 to 6 eda() while uo.count('0x1BF2') > 30 ## будет работать, пока в паке >30 ингов uo.DeleteJournal() uo.waitmenu('What', dwtype1[i], 'Select', dwtype2[i], 'Select', dwtype3[i]) ## выполняем меню с i от 0 до 6 uo.waittargettype('0x1BF2') ## инги uo.usetype('0x13E3') ## молоток repeat wait(1000) time=time+1 until uo.injournal("You create|You destroy|You make") or time > 20 ## ждет, пока будет в журнале упоминание о сделанном или простой if uo.injournal('exceptional') then ## проверка на эксепт - перетаскиваем uo.findtype(dwitem[i]) if uo.findcount() then uo.moveitem('finditem', 1, 'bagexc') wait(300) else wait(100) endif uo.deletejournal() else ## или плавим, если неэксепт uo.findtype(dwitem[i],'-1','backpack') if uo.findcount() then uo.waittargetobject('finditem') uo.usetype('0x0FBB') wait(3000) else wait(100) endif endif wend next ## i = i + 1 wait(1000) end sub Sub eda() uo.findtype(food) if uo.findcount() then uo.usetype(food) else uo.print("Нет еды!") endif end sub Итого, делает 3 раза: если эксепт, то переходит к след. детали, если неэксепт, то делает эту же, но после любой 3-й начинается эта ерунда, как на скрине выше (типа, делаю уже, автотаргет кэнселд) и все заканчивается парсер эррор через несколько секунд (~4-5). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 13 июля, 2011 Обрати внимание на значение счетчика на выходе и входе в каждый цикл Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 13 июля, 2011 я тут одно пока только вижу, что next не там, по-моему...если после wend стоит, то в принципе вообще не должно выполняться i = i + 1, пока ингов не станет <30. next должно быть сразу после того, как uo.injournal("exceptional") и перетаскивание выполнится... ## обозначение переменных ## еда, простой (время), i sub fulldwpl() ## описание массивов while ингов > 30 for i = 0 to 6 ## изготовление if exceptional ## перетаскиваем else ## плавим endif next # все таки сюда ли? Никак разобраться не могу..проверяется условие (если эксепт, все ок, перетаскивается и некст. А если неэксепт, то плавит и все равно некст делает. Или под фразой "А что тебе мешает некст в конце запихнуть? это же ничего не изменит, ибо если экзепт, то он перетаскивает... а если неэкзепт - плавит." ты что-то другое имел ввиду? wend end sub Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 13 июля, 2011 Ну я на самом деле ждал когда вы сами дойдете до этого... вам нужна переменная которая будет изменяться при создании экзепта, чтобы он переключался к следующему изготовлению... к примеру: sub fulldwpl() ## описание массивов for i = 0 to 6 while ингов > 30 или переменная > 0 ## изготовление if exceptional ## перетаскиваем ## добавляем переменной значение 1 else ## плавим endif wend ## сбрасываем переменной значение 0 next end sub как то так..) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 13 июля, 2011 а команда next сама, значит, не является одновременно аналогом выражения i = i + 1 и командой к переходу к началу цикла? т.е., она в принципе такое же закрытие цикла, как wend для while и endif для if? И, чтобы менялось значение переменной надо дополнительно дописывать i = i + 1 в условии на эксепт? Просто я помню еще какой-то скрипт с циклом писал...там хватало просто next для перехода к следующему значению i. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 13 июля, 2011 Вот, что пока имею: var food='0x097B' # Тип еды #'0x097B' - жаренная рыба #'0x09F2' - жаренное мясо #'0x171F' - бананы var i sub fulldwpl() var time=0 dim dwitem[7] dwitem[0]='0x1416' #Breastplate dwitem[1]='0x141A' #Legs dwitem[2]='0x1417' #Arms dwitem[3]='0x1419' #Helm dwitem[4]='0x1418' #Gloves dwitem[5]='0x1413' #Gorget dwitem[6]='0x1B76' #Shield dim dwtype1[7] dwtype1[0]='Armor' dwtype1[1]='Armor' dwtype1[2]='Armor' dwtype1[3]='Armor' dwtype1[4]='Armor' dwtype1[5]='Armor' dwtype1[6]='Shields' dim dwtype2[7] dwtype2[0]='Platemail' dwtype2[1]='Platemail' dwtype2[2]='Platemail' dwtype2[3]='Helmets' dwtype2[4]='Platemail' dwtype2[5]='Platemail' dwtype2[6]='Heater' dim dwtype3[6] dwtype3[0]='Dwarven Platemail Breastplate' dwtype3[1]='Dwarven Platemail Legs' dwtype3[2]='Dwarven Platemail Arms' dwtype3[3]='Dwarven Plate Helm' dwtype3[4]='Dwarven Platemail Gloves' dwtype3[5]='Platemail Gorget' UO.canceltarget() UO.Print("Куда складывать броню?") UO.addobject('bagexc') While UO.Targeting() Wait(100) Wend uo.deletejournal() For i = 0 to 6 while uo.count('0x1BF2') > 30 or i > 0 eda() uo.DeleteJournal() uo.waitmenu('What', dwtype1[i], 'Select', dwtype2[i], 'Select', dwtype3[i]) uo.waittargettype('0x1BF2') uo.usetype('0x13E3') repeat wait(1000) time=time+1 until uo.injournal("You create|You destroy|You make") or time > 20 if uo.injournal("exceptional") then uo.findtype(dwitem[i]) if uo.findcount() then uo.moveitem('finditem', 1, 'bagexc') i = i + 1 wait(300) else wait(100) endif uo.deletejournal() else uo.findtype(dwitem[i],'-1','backpack') if uo.findcount() then uo.waittargetobject('finditem') uo.usetype('0x0FBB') wait(3000) else wait(100) endif endif wend i = 0 next end sub Sub eda() uo.findtype(food) if uo.findcount() then uo.usetype(food) else uo.print("Нет еды!") endif end sub Пока не очень понятно, для чего сбрасывается значение после wend. Да и скрипт все еще продолжает после 3-го раза выдавать 2 раза You're already doing something и 1 autotargetcancelled. Заодно сократил 4-й массив (dwtype3), потому что там хитера нет, в принципе само меню ждет значение переменной там, но мб, если его не будет, то примет его за 0? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 13 июля, 2011 блин да нет же... учись читать каждую строчку скрипта... команда for i= 1 to 10 читается как: для i равное от 1 до 10 то есть у тебя начнется скрипт от того, что в строчке for i=1 to 10 переменной i присвоится значение 1 и будет выполнятся задача внутри for пока не дойдет до некста... как только дойдет до некста, то перейдет опять к фору, где автоматически i даст значение следующей переменной и так до тех пор пока не дойдет до нужного количества (в данном примере это 10). В экзепте тебе нужна переменная чтобы чекать тем самым выполнение экзепта чтобы скрипт вышел из цикла выполнения. Это просто как пример. Можно сделать и грамотней, но вы пока хотябы так сделайте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 13 июля, 2011 Ок...вот, дошло до for i присвоилось значение 0 (i = 0) while выполняется (т.к. ингов >30) в waitmenu вписываются соответствующие значения dwtype1[0] dwtype2[0] итд выполняется изготовление выполняется проверка на exceptional - если эксепт, то ищется findtype(dwitem[0]), находится и перетаскивается, i присваивается новое значение 1 (i = 0 + 1), журнал трется, выходит из проверки на exceptional. Дальше он выходит из while или нет? Ведь выполняются оба условия...и ингов больше 30 (допустим) и i > 0 (на данный момент 1). По сути то именно сейчас ему пора дать команду некст, чтобы он с i = 1 начал цикл for заново. - если неэксепт, то ищется findtype(dwitem[0]), находится и плавится, i все еще равно 0 (не меняется), выходит из проверки if на exceptional, из while не должно выходить, потому что ингов > 30 (допустим). Значит повторяется еще раз процесс изготовления с i = 0. Давай пока на этом остановлюсь, правильно ли я суть выполнения скрипта понимаю? Курсивом выделил то, чего еще нет в скрипте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 13 июля, 2011 переменная в i присваивается в месте for... после некста макрос возвращается обратно к for и в i присваивается следующее значение. по твоему циклу внутри ФОРа. У тебя нет проверки на экзепт, ты проверяешь лишь журнал на наличие этой строчки, и если она есть, то просто перемещаешь вещь в сумку с экзептом... далее у тебя задача выйти из твоего цикла изготовлении вещи для того, чтоб перейти к следующей, а это можно достичь лишь когда скрипт дойдет до next и вернется к for меняя значение на следующее. Для этого тебе и нужна дополнительная переменная, которая будет изменяться при перемещении экзепт шмотки и которая будет обозначать что ты сделал вещь экзепт. Если же экзепта не будет, то соответственно в переменной не будет значения и он будет продолжать делать вещь и плавить ее дальше... Ну серьезно... уже же разжевал все... подумайте уже) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 14 июля, 2011 дададада, я походу добил его))) теперь нет нахлестов в виде i'm already doing something, добавил несколько проверок на журнал и счетчик простоя сбрасываю после изготовления. Добавил несколько чисток журнала. И все работает. Правда, щит не сделал из-за сокращения массива, сейчас поставил dwitem3[6] = 0 посмотрим, сделает ли так. Да, сделало все, но после того, как щит сделался, выдало line 58: runtime error на строке с меню...т.е. он продолжил выполнение цикла после i > 6 ? var food='0x097B' # Тип еды #'0x097B' - жаренная рыба #'0x09F2' - жаренное мясо #'0x171F' - бананы var i sub fulldwpl() var time=0 var p=0 dim dwitem[7] dwitem[0]='0x1416' #Breastplate dwitem[1]='0x141A' #Legs dwitem[2]='0x1417' #Arms dwitem[3]='0x1419' #Helm dwitem[4]='0x1418' #Gloves dwitem[5]='0x1413' #Gorget dwitem[6]='0x1B76' #Shield dim dwtype1[7] dwtype1[0]='Armor' dwtype1[1]='Armor' dwtype1[2]='Armor' dwtype1[3]='Armor' dwtype1[4]='Armor' dwtype1[5]='Armor' dwtype1[6]='Shields' dim dwtype2[7] dwtype2[0]='Platemail' dwtype2[1]='Platemail' dwtype2[2]='Platemail' dwtype2[3]='Helmets' dwtype2[4]='Platemail' dwtype2[5]='Platemail' dwtype2[6]='Heater' dim dwtype3[7] dwtype3[0]='Dwarven Platemail Breastplate' dwtype3[1]='Dwarven Platemail Legs' dwtype3[2]='Dwarven Platemail Arms' dwtype3[3]='Dwarven Plate Helm' dwtype3[4]='Dwarven Platemail Gloves' dwtype3[5]='Platemail Gorget' dwtype3[6]=0 UO.canceltarget() UO.Print("Куда складывать броню?") UO.addobject('bagexc') While UO.Targeting() Wait(100) Wend uo.deletejournal() For i = 0 to 6 while uo.count('0x1BF2') > 30 or p > 0 eda() uo.DeleteJournal() uo.waitmenu('What', dwtype1[i], 'Select', dwtype2[i], 'Select', dwtype3[i]) uo.waittargettype('0x1BF2') uo.usetype('0x13E3') repeat wait(1000) time=time+1 until uo.injournal("You create|You destroy|You make") or time > 20 time=0 if uo.injournal("exceptional") then uo.findtype(dwitem[i]) if uo.findcount() then uo.moveitem('finditem', 1, 'bagexc') wait(300) p = p + 1 i = i + 1 else wait(100) endif uo.deletejournal() else uo.findtype(dwitem[i]) if uo.findcount() then uo.waittargetobject('finditem') uo.usetype('0x0FBB') repeat wait(3000) until uo.injournal("You could make") else wait(100) endif uo.deletejournal() endif wend next end sub Sub eda() uo.findtype(food) if uo.findcount() then uo.usetype(food) else uo.print("Нет еды!") endif end sub Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 14 июля, 2011 Сделай dwtype3[6]='' хотя тебе все равно не поможет, так как по меню он должен будет найти еще один селект... которого не будет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Гость MEdition Жалоба Опубликовано 18 июля, 2011 Не забываем выкладывать рабочий вариант скрипта Сюда Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 18 июля, 2011 Не забываем выкладывать рабочий вариант скрипта Сюда все бы замечательно, но я пока не могу придумать, как Runtime error после изготовления последней вещи убрать. Так что для готовых скриптов он не подходит, хоть и выполняется полностью. Мессир то на отдыхе, но и его возня именно с этим скриптом замучила по-моему))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imaborg 0 Жалоба Опубликовано 18 июля, 2011 ну задачу он свою выполняет) так что можно выложить я думаю, 1.0 версию) к сожалению у меня нету игрового чара с прокаченным БС(( и возможности отладить скрипт мне не светит! но можно сказать совместными усилиями мы написали его ГЫГ) полюбому пригодиится комунить) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 25 июля, 2011 Ребят, просто банальней сделайте массивы на каждую вещь с полным путем Waitmenu() И будет вам щастье)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты