Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Mining Pol 95 Client 2.0.0b

тут можно задать вопрос по скриптингу
Post Reply
Respik
Neophyte
Neophyte
Posts: 12
Joined: 15.05.2012 3:17

Mining Pol 95 Client 2.0.0b

Post by Respik »

Проблема заключается в том, что на некоторые слова из журнала он реагирует, а некоторые просто пропускает

Code: Select all

WaitJournalLine(Now, 'Select a place', 10000);
WaitTargetSelf; 
WaitJournalLine(Now, 'far away|You stop|your tool|no more ore|breaks|stop mining|cannot see|cannot mine|already doing', 30000);
end;
far away,cannot see,already doing
Выделенные и подчеркнутые это те на которые не реагирует.
Может будут идеи у кого-то ?
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Mining Pol 95 Client 2.0.0b

Post by GeeZeR »

Если слово появилось в журнале до начала выполнения WaitJournalLine с аттрибутом "Now", то команда его не найдёт, потому что благодаря "Now" начнёт искать с момента начала своей работы, т.е. уже после появления слова. Она просто стопнет скрипт на те 10 или 30 секунд и если слово за это время не появится снова, то скрипт пойдёт дальше. Переделай алгоритм. Очищай журнал, совершай действие а затем юзай что-то типа:

Code: Select all

	if InJournal('test') > -1 then begin
	AddToSystemJournal('нашёл test');
	end;
Stealth 8.10.2 | Клиент: 7.0.13.4
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Mining Pol 95 Client 2.0.0b

Post by Vizit0r »

GeeZeR wrote:Переделай алгоритм. Очищай журнал, совершай действие а затем юзай что-то типа:

Code: Select all

	if InJournal('test') > -1 then begin
	AddToSystemJournal('нашёл test');
	end;
Зачем тянуть инжект-стайл в стелс? Ну я понимаю, там кроме ClearJournal мало чего было, но тут...


Не проще ли сделать

WaitJournalLine(Now, 'Select a place', 10000);
тут делать то, что выдаст строку в журнал

либо использовать InJournalBetweenTimes ?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Mining Pol 95 Client 2.0.0b

Post by GeeZeR »

Vizit0r wrote: WaitJournalLine(Now, 'Select a place', 10000);
тут делать то, что выдаст строку в журнал
WaitJournalLine тут будет ждать 10 сек а потом только скрипт выполнит действие с которого будет месседж и не вловит этот месседж если всё происходит последовательно в одном потоке. Короче автор, алгоритм в студию! Гадать тут бессмысленно, надо смотреть где у тебя проскакивает месседж.
Stealth 8.10.2 | Клиент: 7.0.13.4
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Mining Pol 95 Client 2.0.0b

Post by drabadan »

GeeZeR wrote:
Vizit0r wrote: WaitJournalLine(Now, 'Select a place', 10000);
тут делать то, что выдаст строку в журнал
WaitJournalLine тут будет ждать 10 сек а потом только скрипт выполнит действие с которого будет месседж и не вловит этот месседж если всё происходит последовательно в одном потоке. Короче автор, алгоритм в студию! Гадать тут бессмысленно, надо смотреть где у тебя проскакивает месседж.
чо чо? скрипт как увидит Select a place тут же завершит выполнение метода WaitJournalLine
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Mining Pol 95 Client 2.0.0b

Post by GeeZeR »

ну если "Select a place" будет до или в течение работы WaitJournalLine, то увидит, но автор говорит, что не всегда ловит, значит "Select a place" порождается уже после завершения работы WaitJournalLine я так думаю. Надо скрипт смотреть.
Stealth 8.10.2 | Клиент: 7.0.13.4
Respik
Neophyte
Neophyte
Posts: 12
Joined: 15.05.2012 3:17

Re: Mining Pol 95 Client 2.0.0b

Post by Respik »

Code: Select all

procedure mining;
begin
If TargetPresent Then CancelTarget;
if (GetType(ObjAtLayer(RhandLayer)) <> PickType) then
   begin
   UseObject(FindType(PickType, Backpack));
   end;
if (GetType(ObjAtLayer(RhandLayer)) = PickType) then
   begin
   UseObject(ObjAtLayer(RhandLayer));
   end;
WaitJournalLine(Now, 'Select a place', 10000);
WaitTargetSelf; 
WaitJournalLine(Now, 'is attacking|You stop|your tool|no more ore|breaks|stop mining|see that|That is too far away|cannot mine|', 30000);
end;
Вот вся процедура и суть в том, что он частично отрабатывает данную строчку

Code: Select all

WaitJournalLine(Now, 'is attacking|You stop|your tool|no more ore|breaks|stop mining|see that|far away|cannot mine|', 30000);
на что-то реагирует на что-то нет.
Суть в том, что когда он находит слова see that , far away он должен переключится на следующую точку так же как и при любых других словах, а не тратить 30 секунд на то чтобы ждать.
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Mining Pol 95 Client 2.0.0b

Post by GeeZeR »

Значит слова see that , far away приходят уже после того как WaitJournalLine начала работу, прождала 30 сек и завершилась. Или они вообще не приходят. Она не может не ловить.
ВОт так ловит:

Code: Select all

UOSay('see that');
WaitJournalLine(Now, 'is attacking|You stop|your tool|no more ore|breaks|stop mining|see that|That is too far away|cannot mine|', 30000);
А так не ловит:

Code: Select all

WaitJournalLine(Now, 'is attacking|You stop|your tool|no more ore|breaks|stop mining|see that|That is too far away|cannot mine|', 30000);
UOSay('see that');
Stealth 8.10.2 | Клиент: 7.0.13.4
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Mining Pol 95 Client 2.0.0b

Post by drabadan »

GeeZeR wrote:Значит слова see that , far away приходят уже после того как WaitJournalLine начала работу, прождала 30 сек и завершилась. Или они вообще не приходят. Она не может не ловить.
ВОт так ловит:

Code: Select all

UOSay('see that');
WaitJournalLine(Now, 'is attacking|You stop|your tool|no more ore|breaks|stop mining|see that|That is too far away|cannot mine|', 30000);
А так не ловит:

Code: Select all

WaitJournalLine(Now, 'is attacking|You stop|your tool|no more ore|breaks|stop mining|see that|That is too far away|cannot mine|', 30000);
UOSay('see that');

Code: Select all

WaitJournalLineSystem
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Mining Pol 95 Client 2.0.0b

Post by GeeZeR »

Блин я сам запутался и всех запутал, короче

Code: Select all

function WaitJournalLine(StartTime : TDateTime; Str : String; MaxWaitTimeMS : Integer) : Boolean
WaitJournalLine(Now, 'is attacking|You stop|your tool|no more ore|breaks|stop mining|see that|That is too far away|cannot mine|', 30000);
будет ловить только если фраза появилась в промежутке между StartTime (по журналу) и следующими 30 секундами (тоже по журналу). Ни до StartTime ни после StartTime+30 сек (по журналу) она уже ничё не вловит.
Можно использовать и WaitJournalLineSystem и WaitJournalLine, WaitJournalLineSystem удобна тем что следит только за системными сообщениями в журнале типа:

Code: Select all

[18:47:24:314] System: System You can't dig while riding or flying.
Короче Respik, твои фразы возникают до момента StartTime : TDateTime или не возникают вообще. Добавь переменную для даты, засеки время перед действием, соверши действие и лови фразу:

Code: Select all

procedure mining;

var
Start : TDateTime;

begin
If TargetPresent Then CancelTarget;
if (GetType(ObjAtLayer(RhandLayer)) <> PickType) then
   begin
   UseObject(FindType(PickType, Backpack));
   end;
if (GetType(ObjAtLayer(RhandLayer)) = PickType) then
   begin
   UseObject(ObjAtLayer(RhandLayer));
   end;
WaitJournalLine(Now, 'Select a place', 10000);

Start := Now; // допустим это 19:14:30 по журналу

WaitTargetSelf;

// будет просматривать все мессаги с 19:14:30 до 19:15:00 по журналу, а если найдёт раньше 19:15:00, то закончит свою работу раньше.
WaitJournalLine(Start, 'is attacking|You stop|your tool|no more ore|breaks|stop mining|see that|That is too far away|cannot mine', 30000);
end;
Stealth 8.10.2 | Клиент: 7.0.13.4
Respik
Neophyte
Neophyte
Posts: 12
Joined: 15.05.2012 3:17

Re: Mining Pol 95 Client 2.0.0b

Post by Respik »

Хорошо спасибо попробую что из этого выйдет
Respik
Neophyte
Neophyte
Posts: 12
Joined: 15.05.2012 3:17

Re: Mining Pol 95 Client 2.0.0b

Post by Respik »

Code: Select all

[17:05:21:897] System: Select a place to mine.
[17:05:21:997] System: You cannot see that
[17:05:53:314] System: Select a place to mine.
[17:05:53:383] System: That is too far away
[17:06:25:530] System: Select a place to mine.
[17:06:25:627] System: That is too far away
[17:06:56:845] System: Select a place to mine.
[17:06:56:974] System: That is too far away
[17:06:59:320] System: Select a place to mine.
[17:06:59:412] System: That is too far away
[17:07:01:341] System: Select a place to mine.
[17:07:01:444] System: That is too far away
[17:07:03:315] System: Select a place to mine.
[17:07:03:407] System: That is too far away
Не помогает всеравно ждет, но если всмотреться раз на раз, иногда срабатывает нормально иногда нет
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Mining Pol 95 Client 2.0.0b

Post by GeeZeR »

засекай (Start := Now;) перед использованием кирки (т.е. перед конструкцией с if)
Stealth 8.10.2 | Клиент: 7.0.13.4
Respik
Neophyte
Neophyte
Posts: 12
Joined: 15.05.2012 3:17

Re: Mining Pol 95 Client 2.0.0b

Post by Respik »

GeeZeR wrote:засекай (Start := Now;) перед использованием кирки (т.е. перед конструкцией с if)
Спасибо, это помогло. Теперь прямо летает по шахте )))
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Mining Pol 95 Client 2.0.0b

Post by GeeZeR »

обращайся )
Stealth 8.10.2 | Клиент: 7.0.13.4
Post Reply