Ну,

, конечный выбор остаётся за тобой. Я бы сделал так:
Кста, у тя скрипт не рабочий! Был
Code: Select all
sub Ogo()
uo.print('Click on balalaika')
uo.exec('addobject balalaika') #смотри пункт 2 комментариев
while uo.targeting() #тут ошибочка была
wait(200) #нужно так
wend
repeat
uo.useskill("Stealth")
wait(5000) #смотри пункт 2 комментариев
UO.Say( "Guards" )
wait(50) #зачем задержка???
uo.useskill("Animal Lore",'self')
wait(5000)
UO.Say( "Guards" )
wait(50) #ну зачем?? ;)
uo.useskill("Hiding")
wait(5000)
UO.Say( "Guards" )
wait(50) #....
uo.useskill("Evaluating Intelligence",'self')
wait(5000)
UO.Say( "Guards" )
wait(50)
uo.usetype('0x097B')
wait(50) #смотри пункт 3 комментариев
UO.Say( "Guards" )
wait(50) #кхм ;)
UO.UseObject('balalaika')
wait(5000)
until uo.dead()
end sub
Комментарии (общнго типа, тоесть не только касаемо конкретно этого скрипта):
1)Вообще иногда имеет смысл перед этим написать
Code: Select all
...
var balalaika
if uo.targeting() then
uo.canceltarget()
end if
uo.addobject('balalaika')
...
2)Тут можно по журналу (как в пункте 3)
Code: Select all
...
uo.deletejournal() #главное не забыть обнулить журнал. Посмотри пунк 4
uo.useskill("Stealth")
while not uo.injournal('я в стелсе')
wait(100)
wend
...
3)Тут всё зависит от того, что произойдёт после того, как ты используешь этот предмет... я хз что это. Наверное еда, а после приёма еды обычно появляется надпись, поэтому можно замутить так:
Code: Select all
...
uo.deletejournal()
uo.usetype('0x097B')
while not uo.injournal('тут то, что появляется после применения')
wait(100)
wend
...
если же после
uo.usetype должен появится прицел, то можно так:
Code: Select all
...
uo.usetype('0x097B')
while not uo.targeting()
wait(100)
wend
...
конечно можно влепить тут и чеклаг, но надо быть осторожным с УНСП.
Вообще, если тебе обязательно нужно, чтобы этот предмет использовался всегда, то используй 1 из трёх вариантов, или комбинируй их. В другом случае прокатит и wait(). Для повышения надёжности,
uo.usetype можно захуярить в цикл. Скажем так:
Code: Select all
...
uo.deletejournal()
repeat
i=0
uo.usetype('0x097B')
while not uo.injournal('тут то, что появляется после применения') or i<20 #это выход из цыкла по счётчику
i=i+1
wait(100)
wend
until uo.injournal('тут то, что появляется после применения')
...
4)Вообще, команда uo.deletejournal() обнуляет весь журнал, что не всегда хорошо, если используешь сложные условия выхода/входа, или если у тебя несколько скриптов параллельно запущены. Есть такая процедура, которая удаляет из журнала только заданную строку. Вот она:
Code: Select all
Sub DeleteJournal( string1 )
VAR nom = UO.InJournal( string1 )
If nom > 0 Then
UO.SetJournalLine( Nom - 1, 'string replaced' )
DeleteJournal( string1 )
Endif
endsub
Еще бывает полезно обнулять журнал в начале каждого скрипта, если это не помешает другим скриптам.
P.S: Да, вообщето есть такая тема, называется
Наследство от Edred-а. В ней много полезного.
Еще вопросы
