Использование процедуры checklag() гарантирует, что после её вызова Injection получит все данные которые должен был отправить сервер до вызова этой процедуры.
На примере простейшего скрипта:
Code: Select all
sub eatChar()
uo.usetype( 'food' )
uo.print( 'Персонаж покушал' )
endsub
Запускаем, смотрим - сначала в журнале появляется сообщение от инжекта, что персонаж покушал, а затем сообщение от сервера, что был использован предмет.
Ставим checklag:
Code: Select all
sub eatChar()
uo.usetype( 'food' )
checklag()
uo.print( 'Персонаж покушал' )
endsub
Запускаем, смотрим журнал - сначала в журнале появляется сообщение от сервера, что был использован предмет, затем в журнале появляется название сумки персонажа (обычно Backpack или backpack, чтобы не было проблем с регистром - в функции checklag лучше при поиске в журнале использовать без первой буквы) и только затем сообщение "Персонаж покушал".
Собственно говоря, стоит отметить тот факт, что в некоторых ситуациях при неправильной работе с журналом функция checklag() может приводить к непредсказуемым последствиям. Да и вообще, я бы на месте администратора, который решил бороться с Injection - весьма сомнительно относился к игрокам, который делают клац на бекпак каждые 5 секунд -) За сим на примере того же скрипта, я бы использовал следущую конструкцию:
Code: Select all
sub eatChar()
var msg = "eat was be used"; // сообщение от сервера, что персонаж покушал
deljournal( msg )
uo.usetype( 'food' )
repeat
wait( 100 )
until uo.injournal( msg )
uo.print( 'Персонаж покушал' )
endsub
Логика простая:
1. Удалим из журнала Injection сообщение о том, что персонаж покушал.
2. Используем еду.
3. Ждём пока в журнале появится сообщение о том, что персонаж покушал.
В этом случае, к слову - ещё и трафика используется эдак на два пакета меньше -) Но это не суть принципиально.
К вопросу о том, зачем чистить журнал и почему не использовать uo.deletejournal:
1. При использовании uo.deletejournal - мы удаляем все записи из журнала Injection, что может привести к некорректной работе других запущенных скриптов.
2. Казалось бы можно вообще не чистить журнал и использовать uo.lastmessage() - но это заблуждение. Пока скрипт ждёт положенные wait(100), дабы не подвесить компьютер - вполне может придти не одно сообщение, а несколько и нужное можно упустить.
Раз уж я завёл речь про работу с журналом, стоит заметить - не все игроки любят и уважают игроков стоящих (а тем более ходящих) на макросе. И конструкция приведённая в последнем примере будет не стабильной, если кто-нибудь будет флудить ключевым словом. Тоже самое касается, к слову, и функции checklag(). По этому лучше проверять не только наличие сообщения но и того, кто нам его послал, а обидчиков записывать в файлик, дабы потом отомстить -)
Ммм.. я на все вопросы ответил ?)