Yoko

All sides of Injection
It is currently 2025-10-15 15:08:24

All times are UTC+02:00




Post new topic  Reply to topic  [ 16 posts ] 
Author Message
PostPosted: 2010-02-19 00:20:51 
Offline

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


Top
   
PostPosted: 2010-02-19 09:40:04 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Идеальный вариант был-бы сделать через 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


Top
   
PostPosted: 2010-02-20 04:39:35 
Offline

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

Code:
    WaitJournal('created')

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

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

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

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


Top
   
PostPosted: 2010-02-20 10:14:26 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Хм, а как именно он затыкается? Что успевает вывести и какие прицелы послать?


Top
   
PostPosted: 2010-02-21 06:23:31 
Offline

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


Top
   
PostPosted: 2010-02-21 08:59:55 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Мне кажется это происходит потому, что написанная мной функция по задумке делает 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
...


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


Top
   
PostPosted: 2010-02-23 00:48:49 
Offline

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


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


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


Top
   
PostPosted: 2010-02-23 01:48:05 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
О ужас. Я только сейчас решил прочитать твой скрипт:

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)


Top
   
PostPosted: 2010-02-23 09:05:37 
Offline

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

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


Top
   
PostPosted: 2010-02-23 11:44:56 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Скажу тебе по секрету, зависает он тут:

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


Top
   
PostPosted: 2010-02-23 13:45:58 
Offline

Joined: 2010-02-16 19:41:25
Posts: 18
Да дело не в лени.. эта часть перекидывает рунбуки нормально... без всяких финдитемов...
я говорю что если скрипт зациклить на not dead() то он все равно после того как сделает буку зависает...


Top
   
PostPosted: 2010-02-23 17:44:23 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
А я говорю что эта часть не может никаким образом передвигать шмотки:
Code:
uo.exec("moveitem '0x0EFA' '0x0E76'")


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


Top
   
PostPosted: 2010-02-26 22:31:49 
Offline

Joined: 2010-02-16 19:41:25
Posts: 18
Все нормально передвигается. Причем в остальных скриптах тоже... не в этом дело. Если даже убрать мувитем и прочую лабуду и зациклить твой макрос на while not uo.dead() >твой скрипт< wend то он все равно сделает ее только 1 раз


Top
   
PostPosted: 2010-02-27 10:42:00 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
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
...


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


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


Top
   
PostPosted: 2010-02-27 11:24:46 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
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.
Skype: d119060


Top
   
PostPosted: 2010-03-09 16:03:37 
Offline

Joined: 2010-02-16 19:41:25
Posts: 18
В общем разобрался в чем беда была. Теперь все гуд. Самое главное идею вэйтинга понял..))

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 16 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited