Обрати внимание, у тебя получился длинющий скрипт с кучей повторений однотипных блоков. Гораздо стройней и логичней будет если ты уберешь все эти блоки и заменишь их просто вызовами подфункции, в которую параметрами будешь передавать то, что является отличием этих блоков друг от друга. Смотри, вот один из твоих блоков:
Code:
repeat
UO.UseSkill('Detect Hidden')
wait(forskill)
if uo.InJournal(waiting) then
forskill = forskill + 500
end if
wait(forskill)
eating()
until uo.SkillVal('Detect Hidden') == 1000
Вбей в начало скрипта массив названий скиллов, типа:
Code:
DIM Skills[10]
Skill[0] = 'Detect Hidden'
...
Вбей в начало определение переменных:
Code:
VAR i, TmpStr
Далее, все эти блоки выкинь, а напиши маленький цикл for:
Code:
for i=0 To 9
TmpStr = Skill[i]
UpOneSkill( TmpStr, forskill, waiting )
next
Ну и добавь в конец скрипта эту функцию:
Code:
Sub UpOneSkill( s1, i1, s2 )
repeat
UO.UseSkill( s1 )
wait( i1 )
if uo.InJournal( s2 ) then
i1 = i1 + 500
end if
wait( i1 )
eating()
until uo.SkillVal( s1 ) == 1000
endsub
ЗЫ: Я просто переписал кусок твоего скрипта, не вдумываясь в логику самого скрипта. Хотя сразу вижу что ты не чистишь журнал перед использованием скилла, соответственно, проверка сообщения может легко ловить предыдущее сообщение, кроме того смущает меня это самое увеличение пауз, что-то тут нелогично. Сам посчитай, вот он у тебя первый раз подождал 2000 мс, потом попытался использовать скилл, снова подождал 2000 мс, потом определил что было сообщение о необходимости ждать (но зачем мы ждали 2 сек прежде чем это узнать?), далее переменная увеличилась на 500 мс, и мы тутже снова ждем 2500 мс. Переменная не обнуляется, поэтому в следующем исполнении цикла мы уже сразу ждем 2500 мс... Как ты думаешь, сколько у тебя будет ждать скрипт после 1000 циклов? Или 1000 ловли сообщений waiting? (1000*500 + 2000 = 8,3 мин). А после 10000 попыток?