Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрипты Morrowind.doc
Скачиваний:
91
Добавлен:
29.10.2018
Размер:
2.81 Mб
Скачать

Множественный выбор – как задавать вопросы

[no fix] Choice, “choice 1”, choice1_enum ["choice 2", choice2_enum, …]

Choice "да", 1, "Нет, конечно нет!", 2

(Только для диалогов!)

Это используется в поле result диалогового окна в TES CS, чтобы дать игроку выбор или просто «продолжить» длинную речь34. После того, как игрок сделает выбор, та же тема (topic) будет проверена снова, и вы можете задать нужную реакцию, используя функцию / choice / = / choice_enum в условиях для говорящего окна диалога в TES CS. Не применима в скриптах, насколько я знаю.

Информация от Riiak: В отличие от messageBox, эта функция может использовать стек. Под этим я подразумеваю, что вы можете использовать 2 вызова choice в одном поле result для 10 choice-ов максимум или 3 вызова Choice для 15 choice-ов максимум и т.д. Я не знаю лимита стека, но уверен, что он есть. (Думаю, он ограничен 5 choice за вызов).

Добавление записей в журнал и тест записей журнала

[no fix] Journal, "Journal_ID", Index_enum

Journal, MG_BCShroomsCombat, 10

Эта функция добавляет запись в ваш игровой журнал, запись должна быть заранее определена в редакторе диалогов. Индекс показывает, какая запись из журнальной темы будет добавлена. Остерегайтесь использовать простые названия для журнальных тем, добавляйте 2 буквы в начале, как это сделано у Bethsoft (смотрите скрипт ниже) – иначе запись журнала будет показана, как обычная тема для диалога, если эта тема будет упомянута в диалоге!

(Информация с форумов / Melian)

[no fix] SetJournalIndex "Journal_ID" index_enum

SetJournalIndex "MG_BCShroomsCombat" 99

Setjournalindex установит индекс в нужное значение, не важно есть для этого значения запись в журнале или нет (полезно для простых флагов для которых не нужны записи в журнале).

Примечание: После перезагрузки, индекс установится в наибольшее значение из тех записей, которые уже были добавлены в журнал. Так что это может быть использовано для определения загрузился ли игрок:

if ( ( getjournalindex "dummy" ) != 100 ) Messagebox "Ты перезагрузился, читер!!!" setjournalindex "dummy" 100 endif

"Dummy" это любая журнальная запись, у которой нет записи с индексом 100.

Самое хорошее, что это легко использовать в диалоге: послать игрока на тяжелое задание, и установить индекс в поле result. Если по возвращении игрока индекс изменился, значит, игрок провалил задание (информация от JOG).

[no fix] ClearInfoActor

Эта функция используется в поле result диалогового окна – используя ее можно предотвратить появление темы в журнале игрока (в секции "Темы"). Полезно, чтобы предотвратить засорение секции Темы бесполезной информацией.

[no fix] GetJournalIndex, "JournalID" (returns short)

If ( GetJournalIndex, MG_BCShroomsCombat == 10 )

Эта функция возвращает индекс наибольшей (последней?) записи в журнале для конкретной темы. Это очень удобно для отслеживания развития квеста, и для задания реакции скрипта на то, какая часть задания уже выполнена.

Пример: Это короткий скрипт, демонстрирующий использование обеих функций в игре.

Begin attack_slave

short nolore

If ( GetDeadCount "Vorar Helas" > 0 )

return

endif

if ( GetJournalIndex "MV_SlaveMule" < 102 ); если игрок не достиг определенной точки

If ( GetDistance, "Rabinna" < 512 )

Rabinna->AiWander 0 0 0 0 0 0 0

StartCombat, "Rabinna"

Journal "MV_SlaveMule", 102 ; добавить запись

endif

endif

End