Разбираемся с паузами ( анатомия)

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Nearga
Posts: 53
Joined: 2012-02-10 15:17:10

Разбираемся с паузами ( анатомия)

Post by Nearga »

Качаю резист (другу - меджери) + анатомию
От анатомии бывает 2 типа сообений:
Image

После запуска скрипта получаю:
Image
и дальше все замирает, ждет сообщения. Но сообщение не прийдет, так как второй раз скилл вызвался слишком рано и заблокировался "You must wait to ***"
Вопрос: почему он второй раз вызвался сильно рано?

Скрипт:

Code: Select all

sub AnatomyAlways()
UO.Print("[!!!]AnatomyAlways is running")
while not uo.dead()
   UO.WarMode(0)
   uo.deletejournal()
   uo.useskill('Anatomy', 'self')
   repeat
     wait(100)
   until uo.injournal('looks') or uo.injournal('think')
wend
end sub
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Разбираемся с паузами ( анатомия)

Post by Mirage »

то что тебе нужно называется динамическая пауза.
В скриптах Nmy она реализована через цикл for next
Мне больше нравится делать вот так:


Code: Select all

Var LastTimer
Var SkillVal = 1000

sub Anatomy()
   while uo.SkillVal('Anatomy') < SkillVal
         if  UO.WarMode()==1 then
             UO.WarMode(0)
         endif
         uo.DeleteJournal()
         uo.Useskill('Anatomy', 'self')
         LastTimer = uo.Timer()
         repeat
            wait(500)
         until uo.InJournal('looks|fail|think') or uo.Timer() > LastTimer + 40
   Wend
End Sub

таймер рассчитан на 4 секунды.
Nearga
Posts: 53
Joined: 2012-02-10 15:17:10

Re: Разбираемся с паузами ( анатомия)

Post by Nearga »

Code: Select all

repeat
            wait(500)
         until uo.InJournal('looks|fail|think') or uo.Timer() > LastTimer + 40


Тоесть ты вот тут ждешь реплики из журнала ИЛИ 4 сек.. в этом какбы и вопрос: зачем перестраховываться и добавлять таймер? журнал не всегда корректно работает?

по сути-то, что получается:

Code: Select all

Ждем (пол секунды)
Пока НеОбнаружим.вЖурнале("текст_удачного_или_неудачного_применения") или ПройдетСекунд(4)

Зачем таймер? :)

Последовательность (теоретически) должна быть такая:
- вызвали скилл
- ждем отметки в журнале о завершении работы скилла
- вызвали его еще раз
- опять ждем отметки, что скилл закончил работу
- вызвали дальше
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Разбираемся с паузами ( анатомия)

Post by Mirage »

Иногда после использования навыка сообщение в журнале пролетает но инжект его не регистрирует - на такой случай нужен выход из цикла.
Тоесть если сделать юз скилла внутри цикла то как раз и получится сообщение - вам надо подождать.

Попробуй свой вариант реализовать и сравни качество выполнения скилла и количество строк кода :roll:
Если у тебя будет оптимальнее - будут использовать твой вариант.
Nearga
Posts: 53
Joined: 2012-02-10 15:17:10

Re: Разбираемся с паузами ( анатомия)

Post by Nearga »

Иногда после использования навыка сообщение в журнале пролетает но инжект его не регистрирует


Меня интересует именно это :)
Ведь логично, что
ЖдатьСтрокиВЖурнале()
эффейтивней, чем
ЖдатьСтрокиВЖурнале() и СчитатьТаймеромСекунды()

Кто-нибудь разбирался, почему инжект не ловит журнал?

Вот тут http://forum.yoko.com.ua/viewtopic.php?t=4681 реализовано то, как я это вижу в идеале:

Code: Select all

UO.DeleteJournal() ; вытрем все сообщения в журнале
UO.Say("Bank") ;   ждем сообщения в журнале
repeat
   wait(100)
until UO.InJournal("your Bank Box");  открываем мешок
UO.UseObject(0x01258856)


Тоесть мы ждем только сообщения, без таймеров.

ЗЫ: подумал, мб другой скрипт чистит журнал - так нет, все ок.
+ на самом деле, тут больше похоже на кулдаун после использования скилла... скилл вызвался, отработал, записал что-то в журнал и еще некоторое время "ожидает"... если вызвать другой скилл в это загадочное время ожидания - получим вторую картинку в этом треде... возможно такое?

ЗЫЫ: нужно будет попробовать добавить после использования скилла ЧекЛаг(), или как его там - функция, которая жмет на бекпек и ждет ответ от сервера.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Разбираемся с паузами ( анатомия)

Post by Mirage »

Ну в идеале и игнор как бы должен работать.
Но попробуй передвинуть предмет после применения скрипта

Code: Select all

sub main()
var itemID = 'ID любой предмет в паке'
   UO.Ignore( itemID )
end sub

И увидишь конкретный пример почему стелс и изиуо лучше инжекта в автономных скриптах на крафт, лоры, добычу. :roll:

PS Можешь попробовать связаться с разрабами по этому поводу. :mrgreen:
Nearga
Posts: 53
Joined: 2012-02-10 15:17:10

Re: Разбираемся с паузами ( анатомия)

Post by Nearga »

Разрабы, походу, уже все давно пропили и прокурили :))))

В общем, это важный момент, что инжект не всегда ловит сообщения с журнала... тоесть, грубо говоря, мы ждем что в большинстве случаев скилл будет выполняться 4 секунды (в нашем прошлом примере), но иногда - по сообщению с журналаю
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Re: Разбираемся с паузами ( анатомия)

Post by Kynep »

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

Nearga wrote:Кто-нибудь разбирался, почему инжект не ловит журнал?


6 лет пишу скрипты, 7й год играю, но такое вижу впервые... :lol: :lol:
Nearga
Posts: 53
Joined: 2012-02-10 15:17:10

Re: Разбираемся с паузами ( анатомия)

Post by Nearga »

Вот и отлично, выяснили :)

Имеется ли где-нибудь табличка с кулдауами скиллов?
Nearga
Posts: 53
Joined: 2012-02-10 15:17:10

Re: Разбираемся с паузами ( анатомия)

Post by Nearga »

Затестил твой скрипт с

Code: Select all

LastTimer = uo.Timer()
         repeat
            wait(500)
         until uo.InJournal('looks|fail|think') or uo.Timer() > LastTimer + 40

Та же самая фигня: скилл сбивается

Допилил свой, получилось вот так:

Code: Select all

sub AnatomyAlways()
UO.Print("[!!!]AnatomyAlways is running")
while not uo.dead()
   UO.WarMode(0)
   uo.deletejournal()
   uo.useskill('Anatomy', 'self')
   repeat
      wait(500)
   until uo.InJournal('looks|fail|think')
   wait(3000)
wend
end sub


Вроде все окей... но тогда в чем смысл сей динамической задержки, если после нее еще 3 сек ждать нужно? тогда уже легче сразу статику ставить... 3 сек и ни больше, ни меньше
Nearga
Posts: 53
Joined: 2012-02-10 15:17:10

Re: Разбираемся с паузами ( анатомия)

Post by Nearga »

Что уж там... решил проверить, какой прок от динамики...

Code: Select all

   
sub AnatomyAlways()
UO.Print("[!!!]AnatomyAlways is running")
while not uo.dead()
   UO.WarMode(0)
   uo.deletejournal()
   uo.useskill('Anatomy', 'self')
   repeat
   wait(500)
   uo.print("waiting")
until uo.InJournal('looks|fail|think')
#   wait(3000)
wend
end sub



Image

Что-то тут нечисто...
Last edited by Nearga on 2012-02-12 01:39:00, edited 2 times in total.
Nearga
Posts: 53
Joined: 2012-02-10 15:17:10

Re: Разбираемся с паузами ( анатомия)

Post by Nearga »

Продолжаем ковыряния:

Code: Select all

sub AnatomyAlways()
UO.Print("[!!!]AnatomyAlways is running")
while not uo.dead()
   UO.WarMode(0)
   uo.deletejournal()
   uo.useskill('Anatomy', 'self')
   repeat
      wait(500)
      uo.print("Dynamic waiting")
   until uo.InJournal('looks|fail|think')
   uo.print("Static waiting")
   wait(3000)
wend
end sub


Image
Видно, что статическая задержка начинается сразу после появления записи в журнале.
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Разбираемся с паузами ( анатомия)

Post by ZeroDX »

Code: Select all

sub UseAnatomy()
    msg_t = ' shall ', msg_e = 'looks|fail|think', Target = 'self', time
    while true
        deljournal(msg_t + '|' + msg_e)
        uo.waittargetobject(target)
        repeat
            uo.useskill('Anatomy')
            wait(100)
        until uo.injournal(msg_t)
        time = uo.timer()
        repeat
            wait(100)
        until uo.injournal(msg_e) or time + 50 <= uo.timer()
    wend
endsub
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Re: Разбираемся с паузами ( анатомия)

Post by Kynep »

Nearga wrote:Имеется ли где-нибудь табличка с кулдауами скиллов?

Имеется, в скриптах сферы.

ZeroDX, не поможет. Тут не в скрипте дело, а в задержке на использование скилла. Как ты не извращайся, но если нельзя 4 секунда после использования Анатомии юзать другие скиллы т.к. это прописано в скриптах сферы(от шарда зависит кстати), то никакие скрипты тебе в этом не помогут.

Так что:

Code: Select all

sub Anatomy
 while not UO.Dead()
  UO.WaitTargetSelf()
  UO.UseSkill('Anatomy')
  wait(4500)
 wend
end sub


И более тут нечего изобретать. Можно чеклаг добавить.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Разбираемся с паузами ( анатомия)

Post by Mirage »

это что за такой сервер? :)

Зыть можно избежать флужения на экрани добавлением сообщения в фильтр ;)
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Re: Разбираемся с паузами ( анатомия)

Post by Kynep »

ДРВ, в теме про лут он написал наконец.
Post Reply