Create Runebook для шарда Middle-Earth
Moderators: Murderator+, Murderator
Create Runebook для шарда Middle-Earth
Всем привет!
Я вот который день голову ломаю, как сделать скрипт по изготовлению рунбуки. Пошарился тут по разделам и похожего ничего не нашел. У меня на шарде она изготавливается следующим образом:
useskill Inscription, появляется таргет, который надо кинуть на бланк руну (0x1F14), после кликанья появляется таргет, который надо кинуть на 8 бланк скроллов (0x0E34), следом таргет на рекалл скролл (0x1F4C) и еще один таргет на гейт тревел скролл(0x1F60).
И вот такая вот последовательность меня в тупик ставит. waittargetobject несправляется с такой последовательностью. Пробовал забиндить в самой УО, но там таргеты все равно не кидаются правильно. В общем если у кого какие мысли есть был бы очень благодарен.
Я вот который день голову ломаю, как сделать скрипт по изготовлению рунбуки. Пошарился тут по разделам и похожего ничего не нашел. У меня на шарде она изготавливается следующим образом:
useskill Inscription, появляется таргет, который надо кинуть на бланк руну (0x1F14), после кликанья появляется таргет, который надо кинуть на 8 бланк скроллов (0x0E34), следом таргет на рекалл скролл (0x1F4C) и еще один таргет на гейт тревел скролл(0x1F60).
И вот такая вот последовательность меня в тупик ставит. waittargetobject несправляется с такой последовательностью. Пробовал забиндить в самой УО, но там таргеты все равно не кидаются правильно. В общем если у кого какие мысли есть был бы очень благодарен.
Re: Create Runebook для шарда Middle-Earth
Идеальный вариант был-бы сделать через UO.Target(), но это опасно и глючно.
Но думаю так тоже должно сработать:
Но думаю так тоже должно сработать:
Code: Select all
sub MakeOneRunebook()
var rune = findType('0x1F14')
var blankScrolls = findType('0x0E34')
var recallScrolls = findType('0x1F4C')
var gateScrolls = findType('0x1F60')
UO.WaitTargetObject(rune,blankScrolls)
UO.UseSkill('Inscription')
while (UO.Waiting()) ; Пока еще висит наш WaitTargetObject
wait(10) ;Тут нужно ставить число как-можно меньше, т.к. нужно успеть поставить вторую ловушку перед приходом второго прицела
wend
UO.WaitTargetObject(recallScrolls,gateScrolls)
WaitJournal('created')
endsub
Sub findType(type)
UO.FindType(type)
if (UO.FindCount() > 0) then
return UO.GetSerial('finditem')
else
return 0
endif
endsub
Re: Create Runebook для шарда Middle-Earth
Beyonder wrote:Идеальный вариант был-бы сделать через UO.Target(), но это опасно и глючно.
Но думаю так тоже должно сработать:Code: Select all
WaitJournal('created')
Я впринципе аналог делал. Только не додумался задержку поставить такую. Принуждал интервалами от 500 до 2000 мс. Не получалось

А у тебя ругается на то, что я оставил в коде выше. Я так понимаю там доп. функция для такой команды нужна?)
В итоге заменил сначала на
Code: Select all
repeat
wait(500)
until uo.injournal("You create") or ("You fail.")
Да. Рунбуки он все равно делает. Но вот в цикличность это сделать не удается почему-то. Скрипт затыкается после создания одной рунбуки сразуже.
Re: Create Runebook для шарда Middle-Earth
Хм, а как именно он затыкается? Что успевает вывести и какие прицелы послать?
Re: Create Runebook для шарда Middle-Earth
Beyonder wrote:Хм, а как именно он затыкается? Что успевает вывести и какие прицелы послать?
Все таргеты шлются как надо и рунбука делается. Но на этом все. Скприт переходит в стадию вечного ожидания.
Code: Select all
sub Runebook()
var rune = findType('0x1F14')
var blankScrolls = findType('0x0E34')
var recallScrolls = findType('0x1F4C')
var gateScrolls = findType('0x1F60')
UO.WaitTargetObject(rune,blankScrolls)
UO.UseSkill('Inscription')
while (UO.Waiting()) ; Ïîêà åùå âèñèò íàø WaitTargetObject
wait(10) ;Òóò íóæíî ñòàâèòü ÷èñëî êàê-ìîæíî ìåíüøå, ò.ê. íóæíî óñïåòü ïîñòàâèòü âòîðóþ ëîâóøêó ïåðåä ïðèõîäîì âòîðîãî ïðèöåëà
wend
UO.WaitTargetObject(recallScrolls,gateScrolls)
repeat
wait(500)
until uo.injournal("You create") or ("You fail.")
uo.deletejournal("You create")
uo.deletejournal("You fail.")
while uo.count(0x0EFA)>0
uo.exec("moveitem '0x0EFA' '0x0E76'")
wait(1000)
wend
wait(5000)
endsub
Sub findType(type)
UO.FindType(type)
if (UO.FindCount() > 0) then
return UO.GetSerial('finditem')
else
return 0
endif
endsub
Re: Create Runebook для шарда Middle-Earth
Мне кажется это происходит потому, что написанная мной функция по задумке делает 1 (одну) рунбуку. Там нет цикла никакого. Я просто дал идею, а в цикл тебе следует засунуть это самому
.
Если-же ты мне выложил не полный скрипт, то вероятно исправить можно так:
В таком случае - если скрипт секунду не сможет дождаться прицела, он попробует весь цикл заново.
Но опять-же - эта вся штуковина должна быть в общем цикле. У меня такого нет, и мой скрипт делает ОДНУ рунбуку.

Если-же ты мне выложил не полный скрипт, то вероятно исправить можно так:
Code: Select all
var timeLeft = 1000
...
while (UO.Waiting() AND timeLeft > 0) ; Ïîêà åùå âèñèò íàø WaitTargetObject
wait(10) ;Òóò íóæíî ñòàâèòü ÷èñëî êàê-ìîæíî ìåíüøå, ò.ê. íóæíî óñïåòü ïîñòàâèòü âòîðóþ ëîâóøêó ïåðåä ïðèõîäîì âòîðîãî ïðèöåëà
timeLeft = timeLeft - 10
wend
if (timeLeft <= 0) then
return false
endif
...
В таком случае - если скрипт секунду не сможет дождаться прицела, он попробует весь цикл заново.
Но опять-же - эта вся штуковина должна быть в общем цикле. У меня такого нет, и мой скрипт делает ОДНУ рунбуку.
Re: Create Runebook для шарда Middle-Earth
Beyonder wrote:Мне кажется это происходит потому, что написанная мной функция по задумке делает 1 (одну) рунбуку. Там нет цикла никакого. Я просто дал идею, а в цикл тебе следует засунуть это самому.
Если-же ты мне выложил не полный скрипт, то вероятно исправить можно так:Code: Select all
var timeLeft = 1000
...
while (UO.Waiting() AND timeLeft > 0) ; Ïîêà åùå âèñèò íàø WaitTargetObject
wait(10) ;Òóò íóæíî ñòàâèòü ÷èñëî êàê-ìîæíî ìåíüøå, ò.ê. íóæíî óñïåòü ïîñòàâèòü âòîðóþ ëîâóøêó ïåðåä ïðèõîäîì âòîðîãî ïðèöåëà
timeLeft = timeLeft - 10
wend
if (timeLeft <= 0) then
return false
endif
...
В таком случае - если скрипт секунду не сможет дождаться прицела, он попробует весь цикл заново.
Но опять-же - эта вся штуковина должна быть в общем цикле. У меня такого нет, и мой скрипт делает ОДНУ рунбуку.
ну смотри. в моем скрипте он должен переложить рунбуку в мешок когда сделает... а он этого не делает... да и опять же я пробовал зациклить весь процесс... но он все равно встревает после того как таргеты вешает
Re: Create Runebook для шарда Middle-Earth
О ужас. Я только сейчас решил прочитать твой скрипт:
Code: Select all
repeat
wait(500)
until uo.injournal("You create") or ("You fail.") ## Это как вообще понимать? О_о
uo.deletejournal("You create")
uo.deletejournal("You fail.")
while uo.count(0x0EFA)>0
uo.exec("moveitem '0x0EFA' '0x0E76'") # Эгхм, посмотри документацию по команде moveitem, я вообще не понял что ты пытаешся куда двинуть
wait(1000)
wend
wait(5000)
Re: Create Runebook для шарда Middle-Earth
[quote="Beyonder"]О ужас. Я только сейчас решил прочитать твой скрипт:
дык...
Что не понятно то тут?) Да и не в этом дело... даже без этих функций в цикле он все равно зависает сразу же как делает книгу
дык...
Code: Select all
repeat
wait(500)
until uo.injournal("You create") or ("You fail.") #пока в журнале не будет надписи You create или You fail. он ждет
uo.deletejournal("You create")
uo.deletejournal("You fail.")
while uo.count(0x0EFA)>0
uo.exec("moveitem '0x0EFA' '0x0E76'") # если рунбук в сумке больше 0 то он перекладывает книгу из бакпака в сумку.
wait(1000)
wend
wait(5000)
Что не понятно то тут?) Да и не в этом дело... даже без этих функций в цикле он все равно зависает сразу же как делает книгу
Re: Create Runebook для шарда Middle-Earth
Скажу тебе по секрету, зависает он тут:
И происходит это потому что этот цикл бесконечный, т.к. ничего не двигает.
Вот так верный вариант (если уж тебе настолько лень почитать доки по функции moveitem):
Code: Select all
while uo.count(0x0EFA)>0
uo.exec("moveitem '0x0EFA' '0x0E76'") # если рунбук в сумке больше 0 то он перекладывает книгу из бакпака в сумку.
wait(1000)
wend
И происходит это потому что этот цикл бесконечный, т.к. ничего не двигает.
Вот так верный вариант (если уж тебе настолько лень почитать доки по функции moveitem):
Code: Select all
sub Runebook()
var rune = findType('0x1F14')
var blankScrolls = findType('0x0E34')
var recallScrolls = findType('0x1F4C')
var gateScrolls = findType('0x1F60')
UO.WaitTargetObject(rune,blankScrolls)
UO.UseSkill('Inscription')
while (UO.Waiting())
wait(10)
wend
UO.WaitTargetObject(recallScrolls,gateScrolls)
repeat
wait(500)
until uo.injournal("You create|You fail")
uo.deletejournal("You create")
uo.deletejournal("You fail")
UO.FindType('0x0EFA') ## Тут тип рунбук
while UO.FindCount()>0
UO.MoveItem('finditem',0,'0x00000000') ## Замени нули на ИД контейнера куда нужно бросать
wait(1000)
wend
wait(5000)
endsub
Sub findType(type)
UO.FindType(type)
if (UO.FindCount() > 0) then
return UO.GetSerial('finditem')
else
return 0
endif
endsub
Re: Create Runebook для шарда Middle-Earth
Да дело не в лени.. эта часть перекидывает рунбуки нормально... без всяких финдитемов...
я говорю что если скрипт зациклить на not dead() то он все равно после того как сделает буку зависает...
я говорю что если скрипт зациклить на not dead() то он все равно после того как сделает буку зависает...
Re: Create Runebook для шарда Middle-Earth
А я говорю что эта часть не может никаким образом передвигать шмотки:
Или мы говорим о разных скриптах, или ты скрипт этот даже не запускал. Потому что эта строка НИКАК не может передвигать шмотки.
Code: Select all
uo.exec("moveitem '0x0EFA' '0x0E76'")
Или мы говорим о разных скриптах, или ты скрипт этот даже не запускал. Потому что эта строка НИКАК не может передвигать шмотки.
Re: Create Runebook для шарда Middle-Earth
Все нормально передвигается. Причем в остальных скриптах тоже... не в этом дело. Если даже убрать мувитем и прочую лабуду и зациклить твой макрос на while not uo.dead() >твой скрипт< wend то он все равно сделает ее только 1 раз
Re: Create Runebook для шарда Middle-Earth
Beyonder wrote:Мне кажется это происходит потому, что написанная мной функция по задумке делает 1 (одну) рунбуку. Там нет цикла никакого. Я просто дал идею, а в цикл тебе следует засунуть это самому.
Если-же ты мне выложил не полный скрипт, то вероятно исправить можно так:Code: Select all
var timeLeft = 1000
...
while (UO.Waiting() AND timeLeft > 0) ; Ïîêà åùå âèñèò íàø WaitTargetObject
wait(10) ;Òóò íóæíî ñòàâèòü ÷èñëî êàê-ìîæíî ìåíüøå, ò.ê. íóæíî óñïåòü ïîñòàâèòü âòîðóþ ëîâóøêó ïåðåä ïðèõîäîì âòîðîãî ïðèöåëà
timeLeft = timeLeft - 10
wend
if (timeLeft <= 0) then
return false
endif
...
В таком случае - если скрипт секунду не сможет дождаться прицела, он попробует весь цикл заново.
Но опять-же - эта вся штуковина должна быть в общем цикле. У меня такого нет, и мой скрипт делает ОДНУ рунбуку.
Это ты сделать пробовал?
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
Re: Create Runebook для шарда Middle-Earth
messir wrote:Да дело не в лени.. эта часть перекидывает рунбуки нормально...
Помню у меня как-то телефон сломался, домашний.
Ну я долбанул хорошенько трубкой об стену - оно заработало.
Скоро вот будут открывать ремонтную мастерскую! Это представляете какие деньги - один раз е..нул и тебе за это несколько тыщ!
PS: Logic Is Out There
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Re: Create Runebook для шарда Middle-Earth
В общем разобрался в чем беда была. Теперь все гуд. Самое главное идею вэйтинга понял..))
З.Ы. а мувитем все равно пашет)))))
З.Ы. а мувитем все равно пашет)))))