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

Странное поведение Стелса

тут можно задать вопрос по скриптингу
Post Reply
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Странное поведение Стелса

Post by Edred »

Вот такой скрипт:

Code: Select all

Program Sparing2;

{$Include 'all.inc'}

var nn : integer;

	procedure DelJournalLine( str1 : String );
	// удаляет строки в журнале, содержащие указанный текст
	begin
		while ( injournal( str1 ) <> -1 ) do
		begin
			nn := injournal( str1 );
			setjournalline( nn, '' );
		end;
	end;

	procedure Spirit;
	begin
		// Восстановление здоровья чара через Спирит Спик с медитацией при необходимости
		If (WarMode = true) then SetWarMode(false);
		Wait(500);
		while (HP < MaxHP) do
		begin
			DelJournalLine('You fail');
			DelJournalLine('You channel');
			DelJournalLine('You lack');
			UseSkill('Spirit Speak');
			repeat
				Wait(100);
				checksave;
			until (injournal('You fail')<>-1) or (injournal('You channel')<>-1) or (injournal('You lack')<>-1);
			If (injournal('You lack')<>-1) Then
			begin
				while (Mana<MaxMana) do
				begin
					UseSkill('Meditation');
					wait(4000);
				end;
				wait(1000);
				checksave;
			end;
		end;
	end;

Begin

	Spirit;
	uosay( 'Gotovo' );

End.
Фактически, это просто проверка работы процедуры. Работает. Правда, странно, то есть скрипт отключается не долечив чара. Но это ладно, может на FW стелс неправильно ловит MaxHP, не знаю.

Проблема в другом: если сразу после этого скрипт запустить еще раз - этот скрипт повисает запущенным. То есть ничего не делает, скрипт запущен, кнопкой на панели Scripts его не снять. Если запустить еще другие скрипты - они точно также "зависнут" - их тоже не снять. Не снять и после дисконнекта чара. Только если убить чара в Char List Box, тогда скрипт снимется.

ЗЫ: Пробовал: расставлять контрольные сообщения, заменял мою процедуру удаления строки из журнала полной очисткой журнала. По фиг.

ЗЫ: Еще один фокус стелса обнаружился - файл скрипта должен быть ansi. При юникоде ругается на синтаксическую ошибку в начале файла.
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

...Попытка 222...

Code: Select all

Program Sparing2;

{$Include 'all.inc'}

var k : integer;

	procedure DelJournalLine( str1 : String );
	// удаляет строки в журнале, содержащие указанный текст
	begin
		while (injournal(str1)<>-1) do
		begin
			k := injournal(str1);
			setjournalline(k,'');
		end;
	end;

	procedure Spirit;
	begin
		// Восстановление здоровья чара через Спирит Спик с медитацией при необходимости
		If (WarMode = true) then SetWarMode(false);
		Wait(500);
		while (GetHP(self)<GetMaxHP(self)) do
//		while (HP < MaxHP) do
		begin
			uosay( 'test 1' );
			DelJournalLine('You fail');
			DelJournalLine('You channel');
			DelJournalLine('You lack');
			UseSkill('Spirit Speak');
			k := 0
			repeat
				Wait(1000);
				checksave;
				k := k + 1;
			until ((injournal('You fail')<>-1) or (injournal('You channel')<>-1) or (injournal('You lack')<>-1) or (k > 300));
			uosay( 'test 2' );
			If (injournal('You lack')<>-1) Then
			begin
				uosay( 'test 3' );
				while (Mana<MaxMana) do
				begin
					uosay( 'test 4' );
					UseSkill('Meditation');
					wait(4000);
				end;
				wait(1000);
				checksave;
				uosay( 'test 5' );
			end;
		end;
		uosay( 'test 0' );
	end;
Паузы увеличил, ввел тестовые сообщения. Поведение скрипта такое же как в предыдущем посте. Выяснилось, что первый раз скрипт снимается после успешной попытки подлечить чара, после этого идут мессаги
test 2
test 1
и привет. Повторный запуск скрипта приводит к таким же плачевным результатам (повису скрипта).
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

Для меня вопрос уже не актуален, не пинайте сильно, то был первый скрипт. Отсюда и попытка портировать соотвествующий скрипт с инжекта.
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

С "подвисанием" такого рода разберемся, но чучуть попоже.
Post Reply