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

Ask for scripts here

Moderators: Murderator+, Murderator

Post Reply
messir
Posts: 18
Joined: 2010-02-16 19:41:25

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

Post by messir »

Всем привет!
Я вот который день голову ломаю, как сделать скрипт по изготовлению рунбуки. Пошарился тут по разделам и похожего ничего не нашел. У меня на шарде она изготавливается следующим образом:
useskill Inscription, появляется таргет, который надо кинуть на бланк руну (0x1F14), после кликанья появляется таргет, который надо кинуть на 8 бланк скроллов (0x0E34), следом таргет на рекалл скролл (0x1F4C) и еще один таргет на гейт тревел скролл(0x1F60).
И вот такая вот последовательность меня в тупик ставит. waittargetobject несправляется с такой последовательностью. Пробовал забиндить в самой УО, но там таргеты все равно не кидаются правильно. В общем если у кого какие мысли есть был бы очень благодарен.
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

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

Post 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
messir
Posts: 18
Joined: 2010-02-16 19:41:25

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

Post 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.")

Да. Рунбуки он все равно делает. Но вот в цикличность это сделать не удается почему-то. Скрипт затыкается после создания одной рунбуки сразуже.
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

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

Post by Beyonder »

Хм, а как именно он затыкается? Что успевает вывести и какие прицелы послать?
messir
Posts: 18
Joined: 2010-02-16 19:41:25

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

Post 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
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

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

Post 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
...


В таком случае - если скрипт секунду не сможет дождаться прицела, он попробует весь цикл заново.
Но опять-же - эта вся штуковина должна быть в общем цикле. У меня такого нет, и мой скрипт делает ОДНУ рунбуку.
messir
Posts: 18
Joined: 2010-02-16 19:41:25

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

Post 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
...


В таком случае - если скрипт секунду не сможет дождаться прицела, он попробует весь цикл заново.
Но опять-же - эта вся штуковина должна быть в общем цикле. У меня такого нет, и мой скрипт делает ОДНУ рунбуку.


ну смотри. в моем скрипте он должен переложить рунбуку в мешок когда сделает... а он этого не делает... да и опять же я пробовал зациклить весь процесс... но он все равно встревает после того как таргеты вешает
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

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

Post 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)
messir
Posts: 18
Joined: 2010-02-16 19:41:25

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

Post 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)

Что не понятно то тут?) Да и не в этом дело... даже без этих функций в цикле он все равно зависает сразу же как делает книгу
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

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

Post 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
messir
Posts: 18
Joined: 2010-02-16 19:41:25

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

Post by messir »

Да дело не в лени.. эта часть перекидывает рунбуки нормально... без всяких финдитемов...
я говорю что если скрипт зациклить на not dead() то он все равно после того как сделает буку зависает...
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

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

Post by Beyonder »

А я говорю что эта часть не может никаким образом передвигать шмотки:

Code: Select all

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


Или мы говорим о разных скриптах, или ты скрипт этот даже не запускал. Потому что эта строка НИКАК не может передвигать шмотки.
messir
Posts: 18
Joined: 2010-02-16 19:41:25

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

Post by messir »

Все нормально передвигается. Причем в остальных скриптах тоже... не в этом дело. Если даже убрать мувитем и прочую лабуду и зациклить твой макрос на while not uo.dead() >твой скрипт< wend то он все равно сделает ее только 1 раз
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

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

Post 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
...


В таком случае - если скрипт секунду не сможет дождаться прицела, он попробует весь цикл заново.
Но опять-же - эта вся штуковина должна быть в общем цикле. У меня такого нет, и мой скрипт делает ОДНУ рунбуку.


Это ты сделать пробовал?
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

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

Post by Destruction »

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
messir
Posts: 18
Joined: 2010-02-16 19:41:25

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

Post by messir »

В общем разобрался в чем беда была. Теперь все гуд. Самое главное идею вэйтинга понял..))

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