Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Injection скрипты (обучение)
Нравиться ли вам топик (профи не голосовать!)
Нравиться ли вам топик (профи не голосовать!)
Да [ 43 ] ** [89,58%]
Нет [ 2 ] ** [4,17%]
Не использую инжект [ 3 ] ** [6,25%]
Всего голосов: 48
Гости не могут голосовать 
Destruction
сообщение 11.3.2005, 1:09
Сообщение #1


**********

Группа: Администраторы
Наличность: 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Destruction
сообщение 11.3.2005, 9:32
Сообщение #2


**********

Группа: Администраторы
Наличность: 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Destruction
сообщение 14.3.2005, 2:02
Сообщение #3


**********

Группа: Администраторы
Наличность: 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Destruction
сообщение 2.4.2005, 18:33
Сообщение #4


**********

Группа: Администраторы
Наличность: 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Destruction
сообщение 12.4.2005, 11:42
Сообщение #5


**********

Группа: Администраторы
Наличность: 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Destruction
сообщение 12.4.2005, 16:38
Сообщение #6


**********

Группа: Администраторы
Наличность: 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 25.4.2024, 1:44
Designed by Nickostyle