# Основные скрипты

### Обязательные события в скриптах

> - function Init:boolean;
>   Если функция возвращает true, то скрипт считается запущенным, и функция Step будет вызываться каждый раз при вызове World.Step. Если функция вернула false, то скрипт останавливается.
> - function Step:boolean;
>   Если скрипт запущен и не приостановлен, то функция Step вызывается каждый раз при вызове World.Step, т.е. примерно 50 раз в секунду (в зависимости от "тормозов" в игре). Если функция вернула true, то скрипт продолжает работать, если false - скрипт останавливается.

### Необязательные события в скриптах

> - function OnUse(Item:DQE2_Item):integer;
>   Если игрок производит действие, то для всех запущенных и неприостановленных скриптов выполняется эта функция. Item - предмет, который хочет использовать игрок. Если Item=nil, то игрок пытается произвести действие без предмета. Координаты точки в которой игрок производит действие, вычисляются как (Player.X+25;Player.Y+25), эта точка находится посередине спрайта игрока (при желании можно учитывать Player.Width и Player.Height). Если функция возвращает значение больше нуля, то предмет использован, но удалять его не надо. Если меньше нуля, то предмет использован и его можно удалить (временно, т.е. спрятать). Если ноль, то обработка действия игрока производится остальными скриптами, дальше по списку. Примечание: если функция вернула ненулевое значение, то запуск OnUse в остальных скриптах не производится.
> - procedure OnPreRender;
>   Позволяет выводить спрайты или текст за остальными объектами. Т.е. данное событие запускается перед рендером текущей зоны.
> - procedure OnPostRender;
>   Позволяет выводить спрайты или текст перед остальными объектами. Т.е. данное событие запускается после рендера текущей зоны.

### Алгоритм обработки основных скриптов

> 1. Скрипт запускается, при вызове функции Run из другого скрипта, или при переходе на новую зону, если он находится в списке автозапускаемых скриптов этой зоны. Если скрипт уже запущен, то перезапуска не производится.
> 2. При запуске скрипта вызывается функция Step. Если она вернула true, то скрипт добавляется в список запущенных скриптов World.RunningScripts.
> 3. Каждый раз при вызове World.Step вызываются последовательно функции Step для каждого запущенного скрипта. Если скрипт при вызове Step вернул false, то он исключается из списка запущенных скриптов.
> 4. При переходе на новую зону останавливаются все скрипты, у которых свойство AutoStop=false.
> 5. Алгоритм реакции на использование игроком предметов описан в DQE2_Script.OnUse.