Page 1 of 1
Нечто непонятное с журналом
Posted: 2009-02-10 21:23:01
by Sanch
В свое время довольно длительное время писал скрипты и спустя пару лет решил вернуться в уо и к скриптописанию, написал скрипт на медит, а он не работает, не хочет видеть в строку в журнале, помогите люди добрые, то ли я схожу сума, то ли синтаксис команд за 2 года сильно изменился:
проблема непосредственно в строчке
Code: Select all
until not uo.injournal('You lose')
несмотря на наличие строки в журнале переходит к ожиданию востановления маны, инжект последний, собраный из 3ех архивов выложенных на Yoko
Code: Select all
sub test()
var mp = uo.int
Meditation(mp)
end sub
sub Meditation(mp)
repeat
uo.exec('warmode 0')
uo.deletejournal('You lose')
uo.useskill('Meditation')
wait(5000)
checklag()
until not uo.injournal('You lose')
while uo.mana < mp
wait(100)
wend
end sub
Re: Нечто непонятное с журналом
Posted: 2009-02-10 22:27:43
by Successful
Ты прав)
Sanch wrote: проблема непосредственно в строчке
Code: Select all
until not uo.injournal('You lose')
получается,что цикл будет повторяться до тех пор,пока в журнале нет сообщение о неудачной попытки медитации.То есть если этого сообщения нет,его как бы нет ))тем более там и журнал удаляется:wink:
Code: Select all
repeat
uo.exec('warmode 0')
uo.useskill('Meditation')
wait(2500)
checklag()
until uo.injournal('You are at peace.')
Чеклаг не стал скидывать:roll:
Posted: 2009-02-10 22:39:42
by Sanch
Я играю на дрв, там для того чтобы скил медит работал его не жуно постоянно юзать, а достаточно одного раза, после чего мана начинает востанавливаться, мой скрипт очищает журнал, после чего юзает медит, он юзается порядка 2 сек, 5 стоит для тестов, через 2 сек если чар не втает в медит выводится сообщение You lose ..., цикл должен повторяться до учачного использования скила, которое и обусловлено отсутствием сообщения в журнале спустя 2 секунды после использования скила, иначе повторить попытку заново.
Posted: 2009-02-10 22:54:07
by Millerbeer
Code: Select all
sub medit(mana)
if uo.mana<mana then
uo.warmode(0)
repeat
uo.deletejournal()
uo.useskill('Meditation')
repeat
wait(500)
until uo.injournal('You lose your concentration') or uo.mana>=mana
until uo.mana>=mana
endif
endsub
Posted: 2009-02-10 23:15:10
by Sanch
Вот изложение моей идеи, но более извращенно, что делает скрипт как минимум некрасивым, но он работает.
Code: Select all
sub test()
var mp = uo.int
Meditation(mp)
end sub
sub Meditation(mp)
var counter, done
repeat
counter = 0
done = 0
uo.exec('warmode 0')
uo.deletejournal('You lose')
uo.useskill('Meditation')
repeat
if uo.injournal('You lose') then
done = 1
else
wait(100)
counter = counter + 1
endif
until done == 1 or counter > 50
until done == 0
uo.print('1')
while uo.mana < mp
wait(100)
wend
end sub
Miller спасибо за скрипт, я думаю он будет самым оптымальным вариатом, хотя почему не работает мой первый мне не понятно, должен выполнять цикл пока в журнале не будет отсутвовать сообщение, сообщение появляется до проверки в конце цикла, но цикл все равно заканчивается.
Posted: 2009-02-11 06:18:51
by Millerbeer
Твой вариант неработает наверное потому, что команда uo.deletejournal('You lose') не корректна, можно вытереть весь журнал командой uo.deletejourmal(), а вытирать определённые строки этой командой нельзя.
Posted: 2009-02-11 12:34:32
by Sanch
Твой вариант неработает наверное потому, что команда uo.deletejournal('You lose') не корректна, можно вытереть весь журнал командой uo.deletejourmal(), а вытирать определённые строки этой командой нельзя.
Проблема точно не в этом, тк удаление определенных строк всегда работало без нареканий, если удалить весь журнал, первый скрипт от этого лучше работать не станет, в последнем выложенном мной скрипте это используется и работает на ура, проблема мне кажется просто в не самом удачном использовании данного условия с оператором repeat\until.