Page 1 of 1
Разбираемся с паузами ( анатомия)
Posted: 2012-02-11 14:03:23
by Nearga
Качаю резист (другу - меджери) + анатомию
От анатомии бывает 2 типа сообений:

После запуска скрипта получаю:

и дальше все замирает, ждет сообщения. Но сообщение не прийдет, так как второй раз скилл вызвался слишком рано и заблокировался "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
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-11 16:08:23
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 секунды.
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-11 16:21:50
by Nearga
Code: Select all
repeat
wait(500)
until uo.InJournal('looks|fail|think') or uo.Timer() > LastTimer + 40
Тоесть ты вот тут ждешь реплики из журнала ИЛИ 4 сек.. в этом какбы и вопрос: зачем перестраховываться и добавлять таймер? журнал не всегда корректно работает?
по сути-то, что получается:
Code: Select all
Ждем (пол секунды)
Пока НеОбнаружим.вЖурнале("текст_удачного_или_неудачного_применения") или ПройдетСекунд(4)
Зачем таймер?

Последовательность (теоретически) должна быть такая:
- вызвали скилл
- ждем отметки в журнале о завершении работы скилла
- вызвали его еще раз
- опять ждем отметки, что скилл закончил работу
- вызвали дальше
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-11 17:53:54
by Mirage
Иногда после использования навыка сообщение в журнале пролетает но инжект его не регистрирует - на такой случай нужен выход из цикла.
Тоесть если сделать юз скилла внутри цикла то как раз и получится сообщение - вам надо подождать.
Попробуй свой вариант реализовать и сравни качество выполнения скилла и количество строк кода
Если у тебя будет оптимальнее - будут использовать твой вариант.
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-11 18:45:43
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)
Тоесть мы ждем только сообщения, без таймеров.
ЗЫ: подумал, мб другой скрипт чистит журнал - так нет, все ок.
+ на самом деле, тут больше похоже на кулдаун после использования скилла... скилл вызвался, отработал, записал что-то в журнал и еще некоторое время "ожидает"... если вызвать другой скилл в это загадочное время ожидания - получим вторую картинку в этом треде... возможно такое?
ЗЫЫ: нужно будет попробовать добавить после использования скилла ЧекЛаг(), или как его там - функция, которая жмет на бекпек и ждет ответ от сервера.
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-11 20:29:03
by Mirage
Ну в идеале и игнор как бы должен работать.
Но попробуй передвинуть предмет после применения скрипта
Code: Select all
sub main()
var itemID = 'ID любой предмет в паке'
UO.Ignore( itemID )
end sub
И увидишь конкретный пример почему стелс и изиуо лучше инжекта в автономных скриптах на крафт, лоры, добычу.
PS Можешь попробовать связаться с разрабами по этому поводу.

Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-11 21:49:06
by Nearga
Разрабы, походу, уже все давно пропили и прокурили

)))
В общем, это важный момент, что инжект не всегда ловит сообщения с журнала... тоесть, грубо говоря, мы ждем что в большинстве случаев скилл будет выполняться 4 секунды (в нашем прошлом примере), но иногда - по сообщению с журналаю
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-11 21:50:42
by Kynep
Nearga, это называется задержка на использование скилла, для каждого умения она индивидуальна и не зависит от того, что и когда пишется в журнале.
Nearga wrote:Кто-нибудь разбирался, почему инжект не ловит журнал?
6 лет пишу скрипты, 7й год играю, но такое вижу впервые...

Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-12 00:11:57
by Nearga
Вот и отлично, выяснили

Имеется ли где-нибудь табличка с кулдауами скиллов?
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-12 01:31:07
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 сек и ни больше, ни меньше
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-12 01:33:33
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

Что-то тут нечисто...
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-12 01:37:29
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

Видно, что статическая задержка начинается сразу после появления записи в журнале.
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-12 03:16:32
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
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-12 07:30:52
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
И более тут нечего изобретать. Можно чеклаг добавить.
Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-12 09:59:11
by Mirage
это что за такой сервер?

Зыть можно избежать флужения на экрани добавлением сообщения в фильтр

Re: Разбираемся с паузами ( анатомия)
Posted: 2012-02-12 10:06:26
by Kynep
ДРВ, в теме про лут он написал наконец.