Page 1 of 1

Вопрос по журналу.

Posted: 06.12.2009 13:08
by Procosha
Никак не могу зделать грамотную проверку, возможно у кого то есть уже заготовки.
у меня скрипт делает следующие:
Procedure Fish(tile:Word;x,y,z:Integer);
var
starttime:=Now;
Monstr,k:Integer;
begin
Monstr:=0027;
if TargetPresent then CancelTarget;
UseObject(Pole);
WaitForTarget(4000);
if TargetPresent then TargetToTile(tile,x,y,z);
repeat
wait(500);
k:=k+1;
untill (InJournalBetweenTimes('Нема рыбки', starttime, Now)<>-1)
or (InJournalBetweenTimes('Все рыбы уплыли', starttime, Now)<>-1)
or (FindType(Monstr,Ground))
or k > 100;
end;
Дело в том что, скрипт по каким то причинам залипает и ждет до тех пор пока K > 100... игнорируя сообщения журнала и поиск монстра на земле.
Пробывал играться и дистанциям по вертикали и горизонтали - БАЛАЛАЙКА (не работает).

В изи уо есть проверка журнала которая обновляется через несколько секунд. Если на момепроверки нету НОВОГО СООБЩЕНИЯ дает ему значение N/A.
Как на стелсе можно такое реализовать?

Re: Вопрос по журналу.

Posted: 06.12.2009 18:12
by CFA
Procosha wrote:
begin
if TargetPresent then CancelTarget;
UseObject(Pole);
WaitForTarget(4000);
if TargetPresent then TargetToTile(tile,x,y,z);
repeat
wait(500);
k:=k+1;
untill (InJournalBetweenTimes('Нема рыбки', starttime, Now)<>-1)
or (InJournalBetweenTimes('Все рыбы уплыли', starttime, Now)<>-1)
or (FindType(Monstr,Ground))
or k > 100;
end;
где инициализация starttime?
(FindType(Monstr,Ground)) - должна быть ошибка компиляции
k > 100 - аналогично.

приведи именно тот код которые в скрипте. а этот в принципе не рабочий

Re: Вопрос по журналу.

Posted: 06.12.2009 22:44
by Procosha
CFA wrote:
Procosha wrote:
begin
if TargetPresent then CancelTarget;
UseObject(Pole);
WaitForTarget(4000);
if TargetPresent then TargetToTile(tile,x,y,z);
repeat
wait(500);
k:=k+1;
untill (InJournalBetweenTimes('Нема рыбки', starttime, Now)<>-1)
or (InJournalBetweenTimes('Все рыбы уплыли', starttime, Now)<>-1)
or (FindType(Monstr,Ground))
or k > 100;
end;
где инициализация starttime?
(FindType(Monstr,Ground)) - должна быть ошибка компиляции
k > 100 - аналогично.

приведи именно тот код которые в скрипте. а этот в принципе не рабочий
Подправил, красивее... Даже если он рабочий всеравно не хватает одной проверки. Как её написать даже идей нету...

Re: Вопрос по журналу.

Posted: 07.12.2009 6:48
by CFA

Code: Select all

starttime := now;
useObject(Pole);
waitForTarget(4000);
if TargetPresent then TargetToTile(tile,x,y,z);
repeat
wait(500);
k := k + 1;
until (InJournalBetweenTimes('Нема рыбки|Все рыбы уплыли', starttime, Now)<>-1) or 
(FindType(Monster,Ground)<>0) or 
(k > 100);
а насчет одной проверки - увы, не экстрасенс.

Re: Вопрос по журналу.

Posted: 07.12.2009 15:27
by WladL
Procosha wrote: Procedure Fish(tile:Word;x,y,z:Integer);
var
starttime:=Now;
Monstr:=0027;
k:Integer;
begin
Эт чё это за конструкция такая в секции VAR?

сократи строки для поиска, мало-ли там админ пробелов натыкал...
InJournalBetweenTimes('рыбки|уплыли', starttime, Now)<>-1

Posted: 07.12.2009 18:19
by Procosha
ребята, спасибо за альтернативное решение проблемы но это не совсем то что я пытаюсь решить.
Сообщения с журнала обрабатываются и отлавливаются нормально, но иногда из-за лага потери пакетов он не начинает ловить...
Тоесть если такое происходит чар будит стоять до тех пор пока k=100.
Есть ли в стелсе какая то проверка что бы если залагало и таргетом он не кликнул по воде что бы не ждать до k=100, а перейти к следующей точке...
В easyuo:
#sysMsg
#journal
Если нету сообщения то их значиние стаёт N/A

Есть ли такая проверка в стелсе?
Кстати время для отображения сообщения в журнале выставляется в самом клиенте, в опциях...

Re: Вопрос по журналу.

Posted: 07.12.2009 18:49
by Procosha
WladL wrote:
Procosha wrote: Procedure Fish(tile:Word;x,y,z:Integer);
var
starttime:=Now;
Monstr:=0027;
k:Integer;
begin
Эт чё это за конструкция такая в секции VAR?

сократи строки для поиска, мало-ли там админ пробелов натыкал...
InJournalBetweenTimes('рыбки|уплыли', starttime, Now)<>-1
:oops:

Posted: 08.12.2009 1:22
by Procosha
спасибо, притестил, работает! :D

Posted: 08.12.2009 7:33
by CFA
Procosha wrote: Есть ли в стелсе какая то проверка что бы если залагало и таргетом он не кликнул по воде что бы не ждать до k=100, а перейти к следующей точке...
ты же проверяешь "if TargetPresent then TargetToTile(tile,x,y,z);", что если есть таргет, то кликать по воде. но вот цикл ожидания будет в любом случае. чтоб такого не было можно сделать например так -

Code: Select all

if TargetPresent then 
begin
 TargetToTile(tile,x,y,z); 
 repeat 
  wait(500); 
  k := k + 1; 
 until (InJournalBetweenTimes('Нема рыбки|Все рыбы уплыли', starttime, Now)<>-1) or 
 (FindType(Monster,Ground)<>0) or 
 (k > 100);
end;

Posted: 08.12.2009 9:23
by WladL
Если потеряется пакет от TargetToTile(tile,x,y,z) , то залипания все равно не избежать. Если при срабатывании скилла появляется какая- нить строка, то можно ловить ее появление. И если она не появилась, тогда уже принимать решение вываливаться из цикла или нет.