Page 1 of 1
					
				Разрешите передавать встроенные функции как параметры
				Posted: 04.03.2013 22:43
				by iwantmorespam
				Воодушевленный 
функциональными возможностями ПаскальСкрипта в Стелсе, я написал себе модуль с вот такой функцией:
Code: Select all
function WaitUntil(msWorldSave, msTimeout: Integer; predicate: function():Boolean): Boolean;
var t, step: Integer;	
begin
	if CheckLag(msWorldSave) then
	begin
		t := 0;
		step := msTimeout / 10;
		Result := predicate();
		while (t < msTimeout) and (not Result) do
		begin
			Result := predicate();
			t := t + step;
			Wait(step);
		end;
	end;	
end;
Попытка использовать функцию вот так:
Code: Select all
WaitUntil(60 * 1000, 2000, @Dead);
не работает, поскольку Dead - встроенная функция Stealth API.
21:46:02:692 [Dragon World - ***]: Compiler: [Error] (_TEST.sc at 11:30):  Unknown identifier 'Dead'
21:46:02:694 [Dragon World - ***]: Compiling failed
Если написать "свой Dead", все работает:
Code: Select all
function CharIsDead: Boolean;
begin
	Result := Dead;
end;
begin
	WaitUntil(60 * 1000, 2000, @CharIsDead);
end.
Отсюда делаю вывод, что встроенные функции стелс API 
не являются полноценными функциями ПаскальСкрипта.
 
			 
			
					
				Re: Разрешите передавать встроенные функции как параметры
				Posted: 05.03.2013 10:50
				by Vizit0r
				вывод чуток неправильный - это паскальскрипт неполноценный  
стелс 5.0 с полноценным паскалем:
1) step := msTimeout / 10; надо менять на step := msTimeout div 10;
2) 
Code: Select all
Program New;
//uses UOBasic;
function WaitUntil(msWorldSave, msTimeout: Integer; predicate: function():Boolean): Boolean;
var t, step: Integer;   
begin
   if CheckLag(msWorldSave) then
   begin
      t := 0;
      step := msTimeout div 10;
      Result := predicate();
      while (t < msTimeout) and (not Result) do
      begin
         Result := predicate();
         t := t + step;
         Wait(step);
      end;
   end;   
end;
//var a: TProperty;
begin
WaitUntil(60 * 1000, 2000, @Dead);
//  a := TProperty.Create; 
 //Body of Script
end.
 
09:53:14:412 [Abyss_KR - Vizz test]: Compiling
09:53:14:739 [Abyss_KR - Vizz test]: Compiled succesfully
09:53:14:783 [Abyss_KR - Vizz test]: Script test11.sc stopped successfuly
 
			 
			
					
				Re: Разрешите передавать встроенные функции как параметры
				Posted: 05.03.2013 23:32
				by iwantmorespam
				Ок, круто 

Стелс 5.0 же еще не вышел? Когда планируется?
И еще я заметил, что нельзя передавать функцию глубже, если она уже пришла как параметр:
Code: Select all
function DrwWaitUntil(msWorldSave, msTimeout: Integer; predicate: function():Boolean): Boolean;
begin
   WaitUntil(MS_WORLD_SAVE, msTimeout, predicate);
end;
Это тоже будет работать?
 
			 
			
					
				Re: Разрешите передавать встроенные функции как параметры
				Posted: 06.03.2013 0:49
				by Vizit0r
				проверять не буду, но будет работать.
тестить стелс 5й можно уже сейчас, но до сих пор остается пара сложных моментов, из-за которых не идет в релиз. Например, нерабочая длл от клиента.
			 
			
					
				Re: Разрешите передавать встроенные функции как параметры
				Posted: 07.11.2013 22:23
				by BlackSpirit
				Vizit0r wrote:вывод чуток неправильный - это паскальскрипт неполноценный  
стелс 5.0 с полноценным паскалем:
1) step := msTimeout / 10; надо менять на step := msTimeout div 10;
2) 
Code: Select all
Program New;
//uses UOBasic;
function WaitUntil(msWorldSave, msTimeout: Integer; predicate: function():Boolean): Boolean;
var t, step: Integer;   
begin
   if CheckLag(msWorldSave) then
   begin
      t := 0;
      step := msTimeout div 10;
      Result := predicate();
      while (t < msTimeout) and (not Result) do
      begin
         Result := predicate();
         t := t + step;
         Wait(step);
      end;
   end;   
end;
//var a: TProperty;
begin
WaitUntil(60 * 1000, 2000, @Dead);
//  a := TProperty.Create; 
 //Body of Script
end.
 
09:53:14:412 [Abyss_KR - Vizz test]: Compiling
09:53:14:739 [Abyss_KR - Vizz test]: Compiled succesfully
09:53:14:783 [Abyss_KR - Vizz test]: Script test11.sc stopped successfuly
 
в Стелс 6.1.3 п. 2 не работает. Пишет
23:43:36:356 [Black Spirit]: Compiling
23:43:36:412 [Black Spirit]: Compiler: [Error] (C:\UO\Dragon World\Stealth\scripts\test3.sc at 23:29): Unknown identifier 'Dead'
23:43:36:418 [Black Spirit]: Compiling failed
23:43:36:423 [Black Spirit]: Script test3.sc stopped successfuly
 
			 
			
					
				Re: Разрешите передавать встроенные функции как параметры
				Posted: 07.11.2013 22:28
				by Vizit0r
				ну, что я могу сделать. не работает и не работает. там внешние функции напрямую в "ядро" летят, миную обвязку, наверное поэтому.