|
|
|
Injection скрипты (обучение) |
|
|
Destruction |
11.3.2005, 1:09
|
Группа: Администраторы Наличность: 0
Пользователь №: 1.833
|
Внимание! Флуд будет удаляться, самым жестоким образом :!: Голос "да" - мне вполне понятен, а вот те кто голосуют против, просьба отписаться в ПМ, чем же я Вам так не угодил. Не отписавшиеся голоса "против" в ПМ считать не буду !!! (на момент правки топика, только 1 голос против.)
Вобщем, я вот понемногу, стал понимать скрипты инжекта, ну, если вы прочитав это, еще не разобрались, то попытаться разобраться, на готовых, грамотно расписанных скриптах, думаю будет гораздо легче. Собственно, для написания скриптов следует использовать это, чтобы не путаться в синтаксисе и это, чтобы знать синтаксис, почти всех функций ижекта (кроме этого есть еще штук 15 недокументированных, о них ищите информацию сами). Через пару дней проверю голосование, если будет преимущество голосов за - прилепим. Вобщем, начну, скрипт на БС. Код #Blacksmithing by Destruction 1.0 #(c) 2005, Darkness In Cor Por'ated, все права защищены #Копирование, строго с разрешения автора sub BS() #Объявляем функцию с названием BS, без параметров. var ingots = "0x1BF2" #Объявляем переменную содержащию тип ингов var dagger = "0x0F51" #Объявляем переменную с типом ножей var forge = "0x0FB1" #Объявляем переменную с типом плавилки var lasttimer #Объявляем пустую переменную lasttimer repeat #объявляем цикл №1 uo.findtype(ingots,"-1","ground") #ищем предмет типа заданного в переменной ingots на земле. uo.grab("3","finditem")#поднимаем 3 штуки найденных ингов lasttimer = uo.timer()#переменной lasttimer присваиваем значения uo.timer(), который отсчитываеться с начала запуска скрипта. repeat #объявляем цикл #2 uo.findtype(ingots) #Ищем в бекпаке предмета типа заданного переменной ingots wait(100) #ждем 100мс until uo.findcount() > 0 or uo.timer()>lasttimer+500 #объявляем условие для 2 цикла, он будет повторяться, пока условие не станет истинным (true). Т.е. ждем пока инготы не появяться в паке. uo.waitmenu("Blacksmithing", "Weapons", "Swords & Blades", "dagger")#вешаем ловушку на прицел, с целью сковать ножик. uo.usetype(ingots)#используем инги в паке lasttimer = uo.timer()#переменной lasttimer присваиваем значение uo.timer() uo.deletejournal()#очищаем журнал, для корректности inJournal() repeat#объявляем цикл #3 wait(100)#Ждем 100мс until uo.InJournal("You put") or uo.InJournal("You have failed") or uo.timer()>lasttimer+500#Объявляем условие для 3его цикла. uo.findtype(dagger)#ищем ножи в бекпаке if uo.findcount() > 0 then #Условие 1, если нажи найдены, то uo.waittargettype(dagger) #вешаем ловушку на нож uo.usefromground(forge) #используем плавильню с пола имеющую тип forge. uo.deletejournal() #очищаем журнал, для корректности inJournal() lasttimer = uo.timer()#переменной lasttimer присваиваем значение uo.timer() repeat #Объявляем цикл 4 wait(100)#Ждем 100мс. until uo.inJournal("You smelt") or uo.inJournal("You failed") or uo.timer()>lasttimer+500#Объявляем уловие 4ого цикла - пока в журнале не будет сообщения о результате переплавки, с последней deletejournal() endif#конец условия 1 uo.findtype(ingots)#Ищем в бекпаке инги uo.drophere("finditem")#Кидаем найденные инги под ноги wait(100)#ждем 100мс until false#Объявеляем уловие 1ого цикла, т.к. ложь никогда не станет правдой (true<>false), то цикл будет повторяться до тех пор, пока не будет выключен вручную. endsub #Конец ф-ции BS. Собсно суть скрипта - берем инги с пола, куем нож, плавим нож, кидаем полученные инги под ноги, и опять по-новой.
--------------------
Discord: tatikom
|
|
|
|
Destruction |
11.3.2005, 9:32
|
Группа: Администраторы Наличность: 0
Пользователь №: 1.833
|
Продолжу свою сагу, голоса уж целых два и оба за (IMG: style_emoticons/default/smile.gif)) Скрипт на плавку руды по 1ой штуке. Суть такова - кидаем все руду под ноги, после чего по одной подбираем и плавим. Ессно, вы спросите, зачем геммор выкидывать, потом поднимать, когда можно выкидывать по одной и сразу плавить? Отвечаю - на моем шарде на выкидывание вещей пауза 1сек, а на подбирание паузы нету, и вообще такого плана шардов хватает. Этот скрипт будет расписан менее подробно, в отличии от первого. Код #Smelt ore by Destruction 1.0 #(c) 2005, Darkness In Cor Por'ated, все права защищены #Копирование, строго с разрешения автора sub smelt() var ore1 = 0x19B7 #Type 1 рудинки var ore2 = 0x19BA #Type 2 рудинок var ore3 = 0x19B8 #Type 3 рудинок var ore4 = 0x19B9 #Type 4 рудинок или более var delay = 1000 #Задержка на кидание шмота из бекпака var lasttimer #Объявляем переменную, для последущего использования. ore2: #Метка uo.findtype(ore2)#Ищем тип if uo.findcount() > 0 then#Условие №1, если найдено предметов больше нуля то UO.Drop('0',0,0,0,'finditem') #кидаем под ноги найденный предмет wait(delay)#Ждем goto ore2#Отправляемся к метке endif#Конец условия №1 ore3:#Метка uo.findtype(ore3)#Ищем тип if uo.findcount() > 0 then#Условие №2, если найдено предметов больше нуля, то UO.Drop('0',0,0,0,'finditem') #Кидаем под ноги wait(delay)#Ждем goto ore3#Отправляемся к метке endif#Конец условия №2 ore4:#Метка uo.findtype(ore4)#Ищем тип if uo.findcount() > 0 then#Условие 3, если найдено больше 0, то UO.Drop('0',0,0,0,'finditem') #Кидаем под ноги wait(delay)#Ждем goto ore4#Отправляемся к метке endif#Конец условия №3 repeat#Объявляем цикл №1 uo.findtype(ore4, "-1", "ground")#Ищем тип if uo.findcount() == 0 then#Условие №4, если найдено предметов 0, то goto ore4_end#Отправляемся к метке endif#Конец условия №4 uo.grab("1","finditem")#Подбираем 1 штуку найенного предмета lasttimer = uo.timer()#Присваиваем значение repeat#Объявляем цикл №1_1 wait(100)#Ждем uo.findtype(ore1)#Ищем тип until uo.findcount() > 0 or uo.timer()>lasttimer+500#Проверяем условия цикла №1_1 uo.usetype(ore1)#Используем тип uo.findtype(ore4, "-1", "ground")#Ищем тип на земле until uo.findcount() == 0#Проверяем условие цикла №1 ore4_end:#Метка #Далее не расписываю, в связи с конкретной повторностью данной комбинации, для кучек руды состоящих из меньшего кол-ва руды. repeat uo.findtype(ore3, "-1", "ground") if uo.findcount() == 0 then goto ore3_end endif uo.grab("1","finditem") lasttimer = uo.timer() repeat wait(100) uo.findtype(ore1) until uo.findcount() > 0 or uo.timer()>lasttimer+500 uo.usetype(ore1) uo.findtype(ore3, "-1", "ground") until uo.findcount() == 0 ore3_end: repeat uo.findtype(ore2, "-1", "ground") if uo.findcount() == 0 then goto ore2_end endif uo.grab("1","finditem") lasttimer = uo.timer() repeat wait(100) uo.findtype(ore1) until uo.findcount() > 0 or uo.timer()>lasttimer+500 uo.usetype(ore1) uo.findtype(ore2, "-1", "ground") until uo.findcount() == 0 ore2_end: repeat uo.findtype(ore1, "-1", "ground") if uo.findcount() == 0 then goto ore1_end endif uo.grab("1","finditem") lasttimer = uo.timer() repeat wait(100) uo.findtype(ore1) until uo.findcount() > 0 or uo.timer()>lasttimer+500 uo.usetype(ore1) uo.findtype(ore1, "-1", "ground") until uo.findcount() == 0 ore1_end: endsub#Конец ф-ции
--------------------
Discord: tatikom
|
|
|
|
Destruction |
14.3.2005, 2:02
|
Группа: Администраторы Наличность: 0
Пользователь №: 1.833
|
Кууууча просмотров и шесть голосов - крута блин :evil: Вот еще разберем скрипт, на прокачку стилинга - отличие от предыидущих, тут два скрипта, один для бота на котором качаем стилинг, второй соответсвенно для вора. Для бота: Код #Bot for stealing by Destruction 1.0 #(c) 2005, Darkness In Cor Por'ated, все права защищены #Копирование, строго с разрешения автора sub steal_bot()#Новая ф-ция var grabITEM = "0x0EED" #Тип итема который тырим. repeat#цикл wait(500)#пауза uo.findtype(grabITEM,"-1","ground")#ищем тип на земле uo.grab(0,"finditem")#поднять найденную вещь until false#усчловие цикла endsub#конец ф-ции и для вора: Код #Stealing on bot by Destruction 1.0 #(c) 2005, Darkness In Cor Por'ated, все права защищены #Копирование, строго с разрешения автора sub stealer()#Новая ф-ция var grabBP = "0x40026DAC" #ID Бекпака откуда тырим. var grabITEM = "0x0EED" #Тип итема который тырим. repeat#Цикл uo.findtype(grabITEM)#Ищем тип uo.drophere("finditem")#выкидываем тип uo.findtype(grabITEM,"-1",grabBP)#Ищем тип uo.waittargetobject("finditem")#Ставим ловушку таргета uo.useskill("Stealing")#Испольщуем скилл wait(300)#Ждем until false#Условие цикла - false, т.к. false Никогда не станет true, то цикл бесконечен. endsub#Конец ф-ции Теперь в двух словах о принципе работы скрипта: 1. - для бота, скрипт ищет на земле итем который для воровста и если находит - кладет в бекпак. 2. - для вора, ищеться в своем бекпаке итем для воровства - если найден кидаем на пол. Затем ищеться тот же итем в бекпаке бота, потом на него ставиться ловушка прицела и используеться скилл стилинг. Собсно схема такая: есть два чара, без всего, у одного есть итем который воровать, я использовал монетку. Как тока он ее украдет - кидает на пол, а бот ее сразу поднимает и так по-кругу.
--------------------
Discord: tatikom
|
|
|
|
Destruction |
2.4.2005, 18:33
|
Группа: Администраторы Наличность: 0
Пользователь №: 1.833
|
Тяк, терь будем учиться качать хердинг - при помощи crook будем перегонять скот %) Собственно, почти что ничего нового. Код sub herding()#Ф-ция var crook,horse#Перменные crook = "0x4002AC1B" horse = "0x00002FA9" repeat uo.useobject(crook)#Использовать объект uo.waittargetobject(horse, horse)#А вот тут интересно - нам надо повесить две ловушка на таргет, что мы собственно и делаем, иначе просто не получится. uo.deletejournal()#Читим журнал repeat wait(500)#Пауза until uo.injournal("animal goes") || uo.injournal("give up trying") until false endsub Как скрипт работает: 1. Юзаем посох. 2. Делаем два таргета на лошадь. 3. Ждем мессагу о том, что скилл был успешно или не успешно использован. И собственно так по кругу. Примечание: Первый раз мы указываем кого вести, второй раз - куда, указываю второй раз лошадь, мы говорим, чтобы по результату этой команды, он направилась к тому месту, где стояла в тот момент, когда мы повесили на нее таргет.
--------------------
Discord: tatikom
|
|
|
|
Destruction |
12.4.2005, 11:42
|
Группа: Администраторы Наличность: 0
Пользователь №: 1.833
|
Мининг! Вот собсна, и до него руки дошли.. Внимание! Этот скрипт использует скриптовый модуль ASM! http://yoko.netroof.net/forum/viewtopic.php?t=1784 Рекоменудю поставить и не удалять - он не меняет команды, а только добавляет => хорошая это вещь (IMG: style_emoticons/default/cool.gif) Код sub mining() var mincavetiletype, badcount, maxcavetiletype, countmsg, maxwait, lasttimer, tmp, cx, cx1, cy, cy1, tiles_val, away, instrument, i, j, edge #Мининг вещь сложная - переменных надо много instrument = '0x0F3A'#Тип того, чем капать, для кирок не проверял - а с лопатой шпарит тока так! maxwait = 150 #Максимальное время на 1 заход, 1 сек = 10 #Следующие две строки служат для задания интервала типов тайла которые могут быть в пещере (зависит от шарда, чтобы узнать типа тайл наберите например ,infotile или через InsideUO). mincavetiletype = 1339 maxcavetiletype = 1343 away = 2#Дальность насколько может достать персонаж лопатой (клетка под собой не считается!!!) badcount=str(4)#4 - Число сообщений которые мы укажем далее. DIM bad[val(badcount)] #Сообщения говорящие о том, что следует перейти к следующими тайлу bad[1] = 'reach that' bad[2] = 'is nothing here' bad[3] = 'no line of sight' bad[4] = 'Try mining' countmsg = str(4)#4 - Число сообщений который мы укажем далее DIM msg[val(countmsg)] #Сообщений говорящие о том, что капать в этой клетке еще можно (т.е. не следует менять клетку) msg[1] = 'decide not to mine' msg[2] = 'put the' msg[3] = 'fail to find any' msg[4] = 'is too heavy' UO.asmTLStaticClear()#ASP ф-ция - чистим статику for i=mincavetiletype to maxcavetiletype step 1 UO.asmTLStaticAdd(i,'cave')#Здесь циклично задаем тип cave который можно капать next #Далее различные приемы с переменными (начинаешь понимать когда пишешь скрипт или разбираешь детально) cx = -away cy = away+1 cx1 = cx cy1 = cy-1 edge = str(away*2+1)#Высчитываем сторону 1ого бока квадрата tiles_val = str((away*2+1)*(away*2+1))#Подсчитываем общее количество тайлов DIM curx[val(tiles_val)]#Массив curx на tiles_val (тока что посчитали), здесь мы будет хранить значения по иксу DIM cury[val(tiles_val)]#Массив cury на tiles_val (тока что посчитали), здесь мы будет хранить значения по игрэку DIM nextrow[val(edge)]#Массив на количество элементов равное тайлам в одном боку квадрата (тут будем хранить сведения о переходах строк, для дальнейшей генерации массивов curx и cury) for i = 1 to val(edge) step 1 nextrow[i] = val(edge)*i#Циклически задаем массив next for i = 1 to val(tiles_val) step 1#Собсно запускаем цикл с генерацией массивов curx и cury. #Массивы curx и cury будут содержать не абсолютные координаты (т.е. не мировые), а относительные (относительно персонажа), т.е. они буду лежать в интервале от -away до +away, где away - переменная заданная выше. for j = 1 to val(edge) step 1 if i-1 == nextrow[j] then tmp = 'new row'#Если у нас начался переход на новую "строку" - возьмем это на заметку. (Попозже рисунок сделаю) endif next if tmp == 'new row' then#В этом цикле генерируем содержание масивов curx и cury в случае если для этого "i" у нас идет новая "строка". tmp=0 cx=cx1+1 cx1=cx cy=cy1 curx[i]=cx cury[i]=cy endif if tmp<>0 then#Аналогично, но для случая когда "строку" "продолжаем". cy=cy-1 curx[i]=cx cury[i]=cy endif tmp='null' next #Теперь инициализация скрипта окончена - можно смело начинать капать (все, что было надо, мы вычислили). newmine: for i=1 to val(tiles_val) step 1#Цикл генерирующий i - номер тайла который мы капаем mine:#Ссылка или как она там, будем использовать если надо капнуть "еще разок". uo.print('Капаю тайл номер: '+str(i)+', его координаты: x:'+str(uo.getx('self')+curx[i])+' y:'+str(uo.gety('self')+cury[i])+' z:'+str(uo.getz('self')))#Гы, выводим инфорамцию для пользователя %) uo.deletejournal()#Чистим журнал tmp='null' if UO.asmWaitTargetStaticTile('cave',uo.getx('self')+curx[i],uo.gety('self')+cury[i],uo.getz('self'))==1 then#опять же, АСП ф-ция, путаемся установить таргет на нужную клетку, если удалось - идем дальше, если нет - отправляемся в конец цикла, i увеличивается на 1 и мы снова пытаемся %) uo.usetype(instrument)#Юзверим лопату lasttimer=uo.timer()#На всякий случай - если изучили не все месссаги, то это может очень помочь! repeat#Цикл в котором ожидаем того, что мы докапали. wait(500) for j=1 to val(badcount) step 1#Циклом проверим - не поступило ли сообщения о том, что здесь нельзя капать. if uo.injournal(bad[j]) then tmp = false endif next for j=1 to val(countmsg) step 1#Аналоггично для сообщений, что копать еще можно. if uo.injournal(msg[j]) then tmp = true endif next until tmp==true || tmp==false || uo.timer()>lasttimer+maxwait#Собсно условие для цикла, вполне очевидно. if tmp == true then#Если мы покинули цикл из-за сообщения, что можно капать - отправляемся к метке mine и капаем по новой. goto mine endif endif next goto newmine#Когда цикл заканчивается - летим в его начало и капаем по новой. endsub
--------------------
Discord: tatikom
|
|
|
|
Destruction |
12.4.2005, 16:38
|
Группа: Администраторы Наличность: 0
Пользователь №: 1.833
|
Ну что же? Скрипт на БС, Мининг и Плавку у нас есть, теперь будет потихоньку пытаться автоматизировать их работу. Нусс, начинаем потихоньку - скрипт на перекидку однотипных вещей (например ингов) Код sub drag_item2cont() var cont='0x4001F383', wait=300, items='0x1BF2', i #Пробиваем переменные repeat uo.findtype(items) #Ищем uo.moveitem('finditem', 0, cont)#Двигаем wait(wait)#Ждем (чтобы не возникал лаг) until uo.findcount()==0 #конец цикла - проверяем сколько осталось переметсить, если 0 - конец ф-ции. endsub
--------------------
Discord: tatikom
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|