Yoko
http://forum.yoko.com.ua/

Create Runebook для шарда Middle-Earth
http://forum.yoko.com.ua/viewtopic.php?f=17&t=15596
Page 1 of 1

Author:  messir [ 2010-02-19 00:20:51 ]
Post subject:  Create Runebook для шарда Middle-Earth

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

Author:  Beyonder [ 2010-02-19 09:40:04 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

Идеальный вариант был-бы сделать через UO.Target(), но это опасно и глючно.
Но думаю так тоже должно сработать:

Code:
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

Author:  messir [ 2010-02-20 04:39:35 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

Beyonder wrote:
Идеальный вариант был-бы сделать через UO.Target(), но это опасно и глючно.
Но думаю так тоже должно сработать:

Code:
    WaitJournal('created')

Я впринципе аналог делал. Только не додумался задержку поставить такую. Принуждал интервалами от 500 до 2000 мс. Не получалось :)

А у тебя ругается на то, что я оставил в коде выше. Я так понимаю там доп. функция для такой команды нужна?)

В итоге заменил сначала на
Code:
   repeat
   wait(500)
   until uo.injournal("You create") or ("You fail.")

Да. Рунбуки он все равно делает. Но вот в цикличность это сделать не удается почему-то. Скрипт затыкается после создания одной рунбуки сразуже.

Author:  Beyonder [ 2010-02-20 10:14:26 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

Хм, а как именно он затыкается? Что успевает вывести и какие прицелы послать?

Author:  messir [ 2010-02-21 06:23:31 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

Beyonder wrote:
Хм, а как именно он затыкается? Что успевает вывести и какие прицелы послать?

Все таргеты шлются как надо и рунбука делается. Но на этом все. Скприт переходит в стадию вечного ожидания.

Code:
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

Author:  Beyonder [ 2010-02-21 08:59:55 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

Мне кажется это происходит потому, что написанная мной функция по задумке делает 1 (одну) рунбуку. Там нет цикла никакого. Я просто дал идею, а в цикл тебе следует засунуть это самому :).
Если-же ты мне выложил не полный скрипт, то вероятно исправить можно так:

Code:
var timeLeft = 1000
...
while (UO.Waiting() AND timeLeft > 0) ; Ïîêà åùå âèñèò íàø WaitTargetObject
    wait(10) ;Òóò íóæíî ñòàâèòü ÷èñëî êàê-ìîæíî ìåíüøå, ò.ê. íóæíî óñïåòü ïîñòàâèòü âòîðóþ ëîâóøêó ïåðåä ïðèõîäîì âòîðîãî ïðèöåëà
    timeLeft = timeLeft - 10
wend
if (timeLeft <= 0) then
    return false
endif
...


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

Author:  messir [ 2010-02-23 00:48:49 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

Beyonder wrote:
Мне кажется это происходит потому, что написанная мной функция по задумке делает 1 (одну) рунбуку. Там нет цикла никакого. Я просто дал идею, а в цикл тебе следует засунуть это самому :).
Если-же ты мне выложил не полный скрипт, то вероятно исправить можно так:

Code:
var timeLeft = 1000
...
while (UO.Waiting() AND timeLeft > 0) ; Ïîêà åùå âèñèò íàø WaitTargetObject
    wait(10) ;Òóò íóæíî ñòàâèòü ÷èñëî êàê-ìîæíî ìåíüøå, ò.ê. íóæíî óñïåòü ïîñòàâèòü âòîðóþ ëîâóøêó ïåðåä ïðèõîäîì âòîðîãî ïðèöåëà
    timeLeft = timeLeft - 10
wend
if (timeLeft <= 0) then
    return false
endif
...


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


ну смотри. в моем скрипте он должен переложить рунбуку в мешок когда сделает... а он этого не делает... да и опять же я пробовал зациклить весь процесс... но он все равно встревает после того как таргеты вешает

Author:  Beyonder [ 2010-02-23 01:48:05 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

О ужас. Я только сейчас решил прочитать твой скрипт:

Code:
   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)

Author:  messir [ 2010-02-23 09:05:37 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

[quote="Beyonder"]О ужас. Я только сейчас решил прочитать твой скрипт:
дык...
Code:
   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)

Что не понятно то тут?) Да и не в этом дело... даже без этих функций в цикле он все равно зависает сразу же как делает книгу

Author:  Beyonder [ 2010-02-23 11:44:56 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

Скажу тебе по секрету, зависает он тут:

Code:
while uo.count(0x0EFA)>0
      uo.exec("moveitem '0x0EFA' '0x0E76'") # если рунбук в сумке больше 0 то он перекладывает книгу из бакпака в сумку.
      wait(1000)
   wend


И происходит это потому что этот цикл бесконечный, т.к. ничего не двигает.

Вот так верный вариант (если уж тебе настолько лень почитать доки по функции moveitem):

Code:
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

Author:  messir [ 2010-02-23 13:45:58 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

Да дело не в лени.. эта часть перекидывает рунбуки нормально... без всяких финдитемов...
я говорю что если скрипт зациклить на not dead() то он все равно после того как сделает буку зависает...

Author:  Beyonder [ 2010-02-23 17:44:23 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

А я говорю что эта часть не может никаким образом передвигать шмотки:
Code:
uo.exec("moveitem '0x0EFA' '0x0E76'")


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

Author:  messir [ 2010-02-26 22:31:49 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

Все нормально передвигается. Причем в остальных скриптах тоже... не в этом дело. Если даже убрать мувитем и прочую лабуду и зациклить твой макрос на while not uo.dead() >твой скрипт< wend то он все равно сделает ее только 1 раз

Author:  Beyonder [ 2010-02-27 10:42:00 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

Beyonder wrote:
Мне кажется это происходит потому, что написанная мной функция по задумке делает 1 (одну) рунбуку. Там нет цикла никакого. Я просто дал идею, а в цикл тебе следует засунуть это самому :).
Если-же ты мне выложил не полный скрипт, то вероятно исправить можно так:

Code:
var timeLeft = 1000
...
while (UO.Waiting() AND timeLeft > 0) ; Ïîêà åùå âèñèò íàø WaitTargetObject
    wait(10) ;Òóò íóæíî ñòàâèòü ÷èñëî êàê-ìîæíî ìåíüøå, ò.ê. íóæíî óñïåòü ïîñòàâèòü âòîðóþ ëîâóøêó ïåðåä ïðèõîäîì âòîðîãî ïðèöåëà
    timeLeft = timeLeft - 10
wend
if (timeLeft <= 0) then
    return false
endif
...


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


Это ты сделать пробовал?

Author:  Destruction [ 2010-02-27 11:24:46 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

messir wrote:
Да дело не в лени.. эта часть перекидывает рунбуки нормально...

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

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

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

PS: Logic Is Out There

Author:  messir [ 2010-03-09 16:03:37 ]
Post subject:  Re: Create Runebook для шарда Middle-Earth

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

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

Page 1 of 1 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/