# Скрипты в диалогах

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

> - procedure Prepare(Q:Integer);
>   Процедура нужна для составления списка возможных ответов на вопрос собеседника Q. Ответ с номером A добавляется в список текущих ответов процедурой AddAnswer(A). Если не добавлено ни одного ответа, то может возникнуть ошибка.
> - function OnAnswer(Q,A:Integer);
>   Функция должна возвращать номер следующей фразы собеседника. Если функция возвращает номер несуществующего вопроса, то диалог завершается. В качестве параметра Q передается номер текущего вопроса, а параметр A - это номер выбранного ответа в общем списке (не текущем!) ответов данного диалога.

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

> 1. Диалог всегда начинает собеседник (точнее, первой показывается его фраза). После запуска диалога вызывается процедура OnAnswer(-1,-1), результат этой функции будет определять номер вопроса.
> 2. На экране отображается вопрос и вызывается функция Prepare(Q), где Q - номер вопроса, который вы выбрали в функции OnAnswer.
> 3. В функции Prepare вы должны один или несколько раз вызвать AddAnswer(A), чтобы добавить ответ А к возможным ответам на данный вопрос. Если вы не добавили ни одного ответа, то это может привести к ошибке.
> 4. Игрок выбирает один из ответов, которые вы добавили используя AddAnswer.
> 5. Вызывается функция OnAnswer(Q,A), где Q - текущий вопрос, A - номер ответа (не номер в списке текущих ответов, а номер в общем списке ответов). Результат этой функции определяет номер следующего вопроса. Все повторяется по кругу.
> 6. Чтобы завершить диалог, функция OnAnswer должна вернуть номер несуществующего ответа (например, меньше нуля).