Page 1 of 1

Create Runebook для шарда Middle-Earth

Posted: 2010-02-19 00:20:51
by messir
Всем привет!
Я вот который день голову ломаю, как сделать скрипт по изготовлению рунбуки. Пошарился тут по разделам и похожего ничего не нашел. У меня на шарде она изготавливается следующим образом:
useskill Inscription, появляется таргет, который надо кинуть на бланк руну (0x1F14), после кликанья появляется таргет, который надо кинуть на 8 бланк скроллов (0x0E34), следом таргет на рекалл скролл (0x1F4C) и еще один таргет на гейт тревел скролл(0x1F60).
И вот такая вот последовательность меня в тупик ставит. waittargetobject несправляется с такой последовательностью. Пробовал забиндить в самой УО, но там таргеты все равно не кидаются правильно. В общем если у кого какие мысли есть был бы очень благодарен.

Re: Create Runebook для шарда Middle-Earth

Posted: 2010-02-19 09:40:04
by Beyonder
Идеальный вариант был-бы сделать через 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

Posted: 2010-02-20 04:39:35
by messir
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

Posted: 2010-02-20 10:14:26
by Beyonder
Хм, а как именно он затыкается? Что успевает вывести и какие прицелы послать?

Re: Create Runebook для шарда Middle-Earth

Posted: 2010-02-21 06:23:31
by messir
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

Posted: 2010-02-21 08:59:55
by Beyonder
Мне кажется это происходит потому, что написанная мной функция по задумке делает 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

Posted: 2010-02-23 00:48:49
by messir
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

Posted: 2010-02-23 01:48:05
by Beyonder
О ужас. Я только сейчас решил прочитать твой скрипт:

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

Posted: 2010-02-23 09:05:37
by messir
[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

Posted: 2010-02-23 11:44:56
by Beyonder
Скажу тебе по секрету, зависает он тут:

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

Posted: 2010-02-23 13:45:58
by messir
Да дело не в лени.. эта часть перекидывает рунбуки нормально... без всяких финдитемов...
я говорю что если скрипт зациклить на not dead() то он все равно после того как сделает буку зависает...

Re: Create Runebook для шарда Middle-Earth

Posted: 2010-02-23 17:44:23
by Beyonder
А я говорю что эта часть не может никаким образом передвигать шмотки:

Code: Select all

uo.exec("moveitem '0x0EFA' '0x0E76'")


Или мы говорим о разных скриптах, или ты скрипт этот даже не запускал. Потому что эта строка НИКАК не может передвигать шмотки.

Re: Create Runebook для шарда Middle-Earth

Posted: 2010-02-26 22:31:49
by messir
Все нормально передвигается. Причем в остальных скриптах тоже... не в этом дело. Если даже убрать мувитем и прочую лабуду и зациклить твой макрос на while not uo.dead() >твой скрипт< wend то он все равно сделает ее только 1 раз

Re: Create Runebook для шарда Middle-Earth

Posted: 2010-02-27 10:42:00
by Beyonder
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

Posted: 2010-02-27 11:24:46
by Destruction
messir wrote:Да дело не в лени.. эта часть перекидывает рунбуки нормально...

Помню у меня как-то телефон сломался, домашний.

Ну я долбанул хорошенько трубкой об стену - оно заработало.

Скоро вот будут открывать ремонтную мастерскую! Это представляете какие деньги - один раз е..нул и тебе за это несколько тыщ!

PS: Logic Is Out There

Re: Create Runebook для шарда Middle-Earth

Posted: 2010-03-09 16:03:37
by messir
В общем разобрался в чем беда была. Теперь все гуд. Самое главное идею вэйтинга понял..))

З.Ы. а мувитем все равно пашет)))))