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
ну, что я могу сделать. не работает и не работает. там внешние функции напрямую в "ядро" летят, миную обвязку, наверное поэтому.