Dr.Ram 0 Жалоба Опубликовано 12 апреля, 2011 а ты где стоишь? Если на лодке, то вставать надо на тайл трюма нее... вообще. Я в доме режу - и то не работает. Я несколько разных скриптов попробовал - не пашет. - по одной вещи работает (ручками) Вот это: sub main() while not uo.dead() DIM Boot[8] ;режет обувку на кожу Boot[0] = 0x170A Boot[1] = 0x170B Boot[2] = 0x170C Boot[3] = 0x170D Boot[4] = 0x170E Boot[5] = 0x170F Boot[6] = 0x1710 Boot[7] = 0x1711 VAR i For i = 0 To 7 UO.FindType(Boot[i], '-1', 'backpack') if UO.FindCount() > 0 Then wait(200) UO.WaitTargetobject( 'finditem' ) UO.UseType(0x0F9E) #ножницы wait(350) uo.deletejournal() repeat wait(250) until uo.count(Boot[i]) > 0 wait(500) End if next wend end sub тоже работало раньше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 12 апреля, 2011 странно как он у тебя работал... sub main() DIM Boot[8] ;режет обувку на кожу Boot[0] = 0x170A Boot[1] = 0x170B Boot[2] = 0x170C Boot[3] = 0x170D Boot[4] = 0x170E Boot[5] = 0x170F Boot[6] = 0x1710 Boot[7] = 0x1711 VAR i while not uo.dead() For i = 0 To 7 UO.FindType(Boot[i], '-1', 'backpack') repeat if UO.FindCount() > 0 Then wait(200) UO.WaitTargetobject( 'finditem' ) UO.UseType(0x0F9E) #ножницы wait(350) End if wait(500) until uo.count(Boot[i]) > 0 next wend end sub попробуй так... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Dr.Ram 0 Жалоба Опубликовано 13 апреля, 2011 странно как он у тебя работал... sub main() DIM Boot[8] ;режет обувку на кожу Boot[0] = 0x170A Boot[1] = 0x170B Boot[2] = 0x170C Boot[3] = 0x170D Boot[4] = 0x170E Boot[5] = 0x170F Boot[6] = 0x1710 Boot[7] = 0x1711 VAR i while not uo.dead() For i = 0 To 7 UO.FindType(Boot[i], '-1', 'backpack') repeat if UO.FindCount() > 0 Then wait(200) UO.WaitTargetobject( 'finditem' ) UO.UseType(0x0F9E) #ножницы wait(350) End if wait(500) until uo.count(Boot[i]) > 0 next wend end sub попробуй так... Попробовал: Надпись итем фоунд 0 и все на этом. Я тут от безысходности такое вот натворил: sub Boots() DIM Boot[9] ;режет обувку на кожу Boot[0] = 0x170A Boot[1] = 0x170B Boot[2] = 0x170C Boot[3] = 0x170D Boot[4] = 0x170E Boot[5] = 0x170F Boot[6] = 0x1710 Boot[7] = 0x1711 Boot[8] = 0x0DC8 #сеть VAR i For i = 0 To 8 UO.FindType( Boot[i], '-1', 'backpack') if UO.FindCount() > 0 Then UO.WaitTargetobject( 'finditem' ) UO.UseType(0x0F9E) #ножницы repeat wait(3500) End if next Boots() end sub оно - работает. блин. Хочется нормально написать - но знаний не хватает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Sal'manella 0 Жалоба Опубликовано 14 апреля, 2011 Парни ну помогите плизз со скриптом на BlackPerl (если ловлю на лодке) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 26 июня, 2011 Подсобите, пожалуйста, скриптом на плавку руды по 2. Тут есть 3 скрипта, но они некорректно у меня работают, один тупо пишет: Стыковка этих предметов запрещена. Перезапустите клиент. Второй на моменте, где надо отделить 2 руды от тех, которые на полу, говорит Grab 2 what? и кидает таргет, чтобы самому тыкать каждый раз. Это единственный косяк этого скрипта, ибо остальные части работают стабильно. А третий тупо все, что попадает из руд в пак сразу переплавляет. В общем, большое спасибо)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 28 июня, 2011 решил сам попробовать скрипт написать на плавку руды по 2...но, учитывая, что нуб, взял за основу скрипт из этой темы, вот этот: sub Smelt() while true uo.findtype("ore", -1, "ground") uo.waittargetobject('finditem') uo.exec("grab 2") repeat wait(250) until uo.count("ore") > 0 uo.usetype("ore") uo.deletejournal() repeat wait(500) until uo.injournal("You") wend end sub У меня он на моменте взятия руды спрашивает Grab 2 what? И дает таргет, чтобы я тыркнул в руду на полу. И так каждый раз. Решил заменить именно эту часть, взяв за основу скрипт MeSSiRa на БК (где шафты с пола берет) и попутно избавился от ,addobject ore. Вот что получилось: sub Smelt() uo.set('finddistance','2') while uo.countground('0x19B9') >0 uo.findtype('0x19B9', -1, 'ground') uo.waittargetobject('finditem') uo.grab('2', 'finditem') repeat wait(250) until uo.count('0x19B9') > 0 uo.usetype('0x19B9') uo.deletejournal() repeat wait(500) until uo.injournal("You") wend end sub Все работает: и берет по 2 руды с пола и плавит их, и стекует, но почему-то он после 3-4 раза, а иногда и после первого просто останавливается. Подскажите, пожалуйста, где собака зарыта) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 28 июня, 2011 Собака зарыта в том, что ты когда поднимаешь руду с пола (даже часть) она исчезает на некоторое время. Скрипт ее не видит, и, соответственно, выходит из цикла. У тебя в скрипте несколько ошибок. Во-первых команда grab немного для другого предназначенна. Тебе же нужна moveitem для надежности... мало того, утебя не правильно описан цикл findtype... Посмотри повнимательней мой скрипт на БК и процедуру поиска.. работа с журналом в данном скрипте не нужна... не подключил еду.. Если ставишь команду рипит, то делай счетчики туда же, так как у тебя к примеру фразы, на которую ссылается выход из цикла может и не быть, или команда удаления журнала позже нужного сработает... и тогда скрипт у тебя встанет на мертвой точке... В общем дорабатывай) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 29 июня, 2011 чумааааа ) вроде получилось, хотя и с задержками косяк: 1 - я так смотрю, вроде он может и побыстрее брать руду и плавить, 2 - при еде на 3-й раз пишется, что слишком быстро. А так стабильно работает. Посмотри, пожалуйста, комментарии, правильно ли я понимаю принцип работы функций, я ж говорю, нуб. var food='0x097B' ## рыба-'0x097B' мясо-'0x09F2', банан-'0x171F' sub Smelt() uo.set('finddistance','2') while uo.countground('0x19B9') >0 ## работай, пока руда есть на полу uo.findtype('0x19B9', -1, 'ground') ## определить руду на полу if uo.findcount() then saving() uo.moveitem('finditem', '2') ## взял 2 руды с пола wait(500) uo.usetype('0x19B9') ## плавит wait(800) saving() eda() endif wend end sub Sub eda() uo.findtype(food) if uo.findcount() then uo.usetype(food) else uo.print("Нет еды!") endif end sub Sub saving() if uo.injournal("Saving") then repeat wait(1000) until uo.injournal("complete.") uo.deletejournal() endif end sub Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imaborg 0 Жалоба Опубликовано 29 июня, 2011 Знаю что у многих есть) скрипт на телепорт и скупку товара. Нужно чтобы: .брал деньги .заряжал рунбуку .закупался .выкладывал то что купил выложите плз! заранее спасибо!) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 29 июня, 2011 чумааааа ) Быстро схватываешь! Молодец. Только функцию moveitem Немного неправильно сделал). uo.moveitem(object,[quantity,containerobject/ground,[x,y,z]]) у тебя по этой схеме указан только сам объект и количество которое надо взять. А вот куда положить не указано... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 29 июня, 2011 Быстро схватываешь! Молодец. Только функцию moveitem Немного неправильно сделал). uo.moveitem(object,[quantity,containerobject/ground,[x,y,z]]) у тебя по этой схеме указан только сам объект и количество которое надо взять. А вот куда положить не указано... ааа, а я подумал, что это "откуда брать" и, учитывая, что он искал руду на полу, то по умолчанию должно было оттуда браться. т.е. туда надо дописать тип бэкпака? Например: uo.moveitem('finditem', '2', '0x0E75') ? Или id лучше, а то, как я понимаю, если в паке будут еще другие backpack, то он в любой из них положить может? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 29 июня, 2011 Третий параметр может быть либо словом ground (выкладывать на землю) либо обьектом контейнером object (выкладывать в контейнер). На земле или в контейнере находился обьект до этого не важно. Координаты означают абсолютные или относительные мировые, если контейнер указан как ground. Если контейнер это обьект, то координаты это точное место в нём. Не указаные координаты считаются нулевыми. Контейнером по умолчанию является backpack (ранец персонажа). Обычно я использую параметр 'my' или 'backpack' ссылка на источник Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 29 июня, 2011 ну да, я оттуда и брал синтаксис, только не дочитал до конца. Тогда, может и с другим скриптом поможешь, авось и сам научусь писать Он даже попроще, чем этот, я вчера парился с ним, но что-то походу цикл неправильный сделал и комп повис))) удалил нафиг скрипт и не трогал его больше)) Суть такая: я частенько на ночь ренжа оставляю рыбачить. Итог - куча сапогов разных и сеток, которые можно пустить на ресурсы. Вот ручками влом тыкать, тем более, когда пак забит так, что просвета в нем не видно. Сейчас данные какие есть (сами типы предметов и простенький скрипт на резку вещей): #### items: 0x1711, 0x1710, 0x0DC8, 0x170C, 0x170E, 0x170F, #### 0x170B, 0x170D sub rezka() while uo.count('0x1711')>0 uo.waittargettype('0x1711') uo.usetype('0x0F9E') wait(5000) wend end sub Соответственно, пока я просто замещаю тип вещи и перезапускаю скрипт. Собственно, проблема то вся в том, как бы обобщить все перечисленные типы предметов. То ли массив сделать, то ли как-то по-другому. Причем, когда некоторые типы обуви кончаются, то в игре пишется, что You must have the item in your backpack, а при некоторых ничего не пишется и скрипт просто завершает свою работу. Мне бы хоть направление, в котором двигаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 29 июня, 2011 ну да.. тебе нужен перебор массива с типами обуви. Только внутри цикла резки тебе нужна та же функция, что и с переплавкой с поиском по типу конкретного объекта, и потом резать этот объект... так надежней будет. Просто пойми, чем меньше скрипт будет сам выбирать что ему делать, тем больше у тебя будет надежность скрипта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 29 июня, 2011 ну я вроде проникся немного этой темой)) вот такое сейчас накидал, но за неимением пака с этими вещами не проверял еще, посмотри своим опытным взглядом, может, что не так будет. Сам скрипт простой, но хз, правильно ли поставил счетчик(?). По-моему, принцип такой: смотрит, есть ли boots[1] в начале, режет их, пока boots[1] не закончатся, потом i = i +1, т.е. 2, а значит он должен перейти к boots[2] и так далее до i = 8. И eda() туда ли вставил или лучше после wend? Так он будет есть после каждой порезанной вещи, а во втором случае, как я понимаю, между boots и boots[i+1] или вообще никогда не выполнится? var food='0x097B' DIM boots[8] boots[1] = '0x1711' boots[2] = '0x1710' boots[3] = '0x0DC8' boots[4] = '0x170C' boots[5] = '0x170E' boots[6] = '0x170F' boots[7] = '0x170B' boots[8] = '0x170D' sub rezka() while uo.targeting() wait(100) wend for i = 1 to 8 while uo.count(boots[i]) > 0 uo.waittargettype(boots[i]) uo.usetype('0x0F9E') wait(5000) saving() eda() i = i + 1 wend end sub Sub eda() uo.findtype(food) if uo.findcount() then uo.usetype(food) else uo.print("Нет еды!") endif end sub Sub saving() if uo.injournal("Saving") then repeat wait(1000) until uo.injournal("complete.") uo.deletejournal() endif end sub Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 29 июня, 2011 не.. ты чего... счетчиком является for.. он будет сам перебирать... только он описан у тебя не правильно! for ... next и опять ты внутри цикла поиск объекта не указываешь чтоб его резать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 29 июня, 2011 for i = 1 to 8 while uo.count(boots[i]) > 0 uo.findtype(boots[i], -1, 'backpack') uo.waittargettype(boots[i]) uo.usetype('0x0F9E') wait(5000) saving() eda() wend next вот так? Или после uo.findtype(boots, -1, 'backpack') надо писать не uo.waittargettype(boots), а уже uo.waittargettype('finditem')? на выходных надо будет на йоко форуме посидеть в теме Learn Scripting, там 10 уроков есть аж. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 29 июня, 2011 во-первых после uo.findtype(boots, -1, 'backpack') у тебя должна быть строчка if uo.findcount() then Потом у тебя неопнимание... есть типы вещей ( 0x0000 ), а есть объекты ( 0x00000000 ). Так вот объект - это уникальный ИД конкретной вещи. Финдтайп ищет по типу в параметрах и если находит, то в параметре 'finditem' будет значение конкретного найденнного объекта! Поэтому в твоем случае будет uo.waittargetobject('finditem'). А вот ножницы тебе надо лишь юзануть, поэтому ты их юзаешь по финдтайпу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 29 июня, 2011 ну да, вроде понятно. Т.е. двух вещей с одинаковыми ID не существует? И он присваивается при выпадении/покупке/создании итд предмета? p.s. а для чего findcout нужен? Вот прочитал: Синтакс: number uo.FindCount() Возвращает количество обьектов, найденых последней командой findtype. Обычно чтобы взять новый обьект, текущий обьект (finditem) игнорируется командой ignore и поиск командой findtype повторяется. Т.е. мы сначала findtype определили, есть ли вещи указанного типа, которые находится в указанном месте (паке), а файндкаунт что сделает? Определит их количество? Получается, если я пишу findtype в скрипте, то у меня обязательно следующим действием должно быть if findcount() then? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 29 июня, 2011 да, обязательно.. читается так: uo.findtype('.......') # ищем нужный тип в нужном месте if findcount() then # Если нашли то переходим на ступень дальше.. Анекдот есть про программиста: - Зачем когда вы ложитесь спать ставите 2 стакана: один полный, второй пустой? - Один когда хочу пить, второй когда не хочу! Так и у тебя. По скрипту если едти пошагово, то он прийдет к поиску типа... и дальше он сразу должен найденное резать... но ведь он может и не найти вещь! Всегда надо продумывать оба варианта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 29 июня, 2011 Нарыбачил, решил проверить скрипт: var food='0x097B' DIM boots[8] boots[1] = '0x1711' boots[2] = '0x1710' boots[3] = '0x0DC8' boots[4] = '0x170C' boots[5] = '0x170E' boots[6] = '0x170F' boots[7] = '0x170B' boots[8] = '0x170D' sub rezka() while uo.targeting wait(100) wend for i = 1 to 8 while uo.count(boots[i]) > 0 uo.findtype(boots[i], '-1', 'backpack') if uo.findcount() then uo.waittargettype('finditem') uo.usetype('0x0F9E') wait(5000) saving() eda() endif wend next end sub Sub eda() uo.findtype(food) if uo.findcount() then uo.usetype(food) else uo.print("Нет еды!") endif end sub Sub saving() if uo.injournal("Saving") then repeat wait(1000) until uo.injournal("complete.") uo.deletejournal() endif end sub вроде все исправил, как ты сказал, а пишет unhandled exception in parser. Порылся на форуме йоко, там целая тема про это, но так и не разобрался что к чему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 29 июня, 2011 ну ты же вайттаргеттип делаешь.. а в переменной у тебя значение объекта! Вот и парсит.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 29 июня, 2011 вот сейчас не очень понял... загвоздка, вот в этом, значит - uo.waittargettype('finditem') Ты писал вот как "Поэтому в твоем случае будет uo.waittargetobject('finditem'). А вот ножницы тебе надо лишь юзануть, поэтому ты их юзаешь по финдтайпу." я поменял на uo.waittargetobject('finditem') сейчас, все равно парсит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeSSiR 0 Жалоба Опубликовано 29 июня, 2011 Допущенные ошибки в скрипте: 1) Массив выведен вне скрипта, в котором используется. - причина парса. 2) Переменная i не объявленна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZeFeaR 0 Жалоба Опубликовано 30 июня, 2011 Все, да уж, вот это я затупил с тем, что массив в скрипт не включил, а переменную еще вчера ночью объявил)) собственно, уже не парсит при запуске, ближе к вечеру проверю после рыбалки) Спасибо. upd. вот конечный вариант на данный момент, потом еще думаю в начало цикла поставить checkitems() проверку на наличие ножниц. Ну и потом добавить перемещение карт, бутылок и маг рыбы в разные контейнеры. А пока есть проблема: не разрезались 0x170D и 0x170B. НИчего не произошло, разрезались остальные боты, сетки, в журнале ничего не видно. Скрипт в инже загружен в процессах, а действий никаких не предпринимает. Отменил его, еще раз включил, также ничего. Подождал несколько минут, мало ли, пока он дойдет до i = 7 и 8 VAR food = '0x097B' VAR i ## в этом скрипте вынес переменную за сам скрипт (глобальная вроде бы называется в таком случае?), ## но это тут не влияет, она все равно в 1 функции упоминается. sub rezka() DIM boots[8] boots[1] = '0x1711' boots[2] = '0x1710' boots[3] = '0x0DC8' boots[4] = '0x170C' boots[5] = '0x170E' boots[6] = '0x170F' boots[7] = '0x170B' boots[8] = '0x170D' for i = 1 to 8 while uo.count(boots[i]) > 0 uo.findtype(boots[i], '-1', 'backpack') if uo.findcount() then uo.waittargetobject('finditem') uo.usetype('0x0F9E') wait(5000) saving() wait(100) eda() wait(100) endif wend next end sub Sub eda() uo.findtype(food) if uo.findcount() then uo.usetype(food) else uo.print("Нет еды!") endif end sub Sub saving() if uo.injournal("Saving") then repeat wait(1000) until uo.injournal("complete.") uo.deletejournal() endif end sub Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты