Сейчас разберемся.
Эвен это событие которое ДАЕТ вам игровые переменные для дальнейшей обработки. Например ID чара, текст в чате, Имя произнесшего фразу итд.
Чем Эвент отличается от функции/процедуры: функцию/процедуру надо вызывать каждый раз когда вам нужны действия ими выполняемые. А эвент один раз запущеный продолжает работать до завершения скрипта, или пока не будет остановлен, его ненадо вызывать каждый раз. но можно в любой момент использовать данные которые дает тот или иной эвент.
Пример: давайте выведем в системный журнал имена всех персонажей НПС находящихся на экране.
Code: Select all
Program Test;
procedure UpdateChar(TempID : Cardinal);
begin
AddToSystemJournal('UpdateChar = '+ GetName(TempID));
end;
begin
SetEventProc(evUpdateChar,'UpdateChar');
while True do
wait(1000);
end.
Code: Select all
while True do wait(1000);
Code: Select all
SetEventProc(evUpdateChar,'UpdateChar');
Code: Select all
SetEventProc(evSpeech,'function_name');
SetEventProc - функция запуска эвента
evUpdateChar - собственно имя эвента. Полный список можно посмотреть тут http://stealth.od.ua/wiki/doku.php?id=event
'UpdateChar' - этот параметр передает эвенту evSpeech на растерзание функцию с именем UpdateChar и передает ей параметры. А вот какие параметры указано тут http://stealth.od.ua/wiki/doku.php?id=event
Давайте вернемся к скрипту. Выходит мы передаем параметры евента evUpdateChar в функцию UpdateChar.
Для этого надо создать эту функцию (в нашем случае создадим процедуру);
Code: Select all
procedure UpdateChar(TempID : Cardinal);
begin
AddToSystemJournal('UpdateChar = '+ GetName(TempID));
end;
и увидел там описание "evUpdateChar : [ID] - отрисовка чара (не обязательно нашего!)" Тоесть наш эвент evUpdateChar возвращает только один параметр - ID. ID в игре обьявляется типом Cardinal.
Я объявляю тип на входе в процедуру. procedure UpdateChar(TempID : Cardinal); и задаю ему имя TempID. В дальнейшем я могу в этой процедуре делать все что угодно с параметром TempID используя такие функции как
GetName(TempID) и прочие.
Теперь, если мы запустим скрипт, то увидим - каждую секунду вызывается эвент и отображать в системном журнале имена всех НПС находящихся на экране с игроком.
И чуть не забыл чтобы остановить Эвент нужно использовать функцию вызова эвента с пустым вторым параметром параметром.
Code: Select all
Пример:
SetEventProc(evUpdateChar,' '); // можно вставить пробелы или вообще пусто между кавычками.
вот еще один пример
Code: Select all
Program Test;
procedure UpdateChar(TempID2 : Cardinal);
begin
if GetName(TempID2) = 'Marcos' then
AddToSystemJournal('НПС найден')
else
AddToSystemJournal('НПС Marcos ненайден ') ;
end;
begin
SetEventProc(evUpdateChar,'UpdateChar');
while True do
wait(1000);
end.