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

Функции для диалогов

Многие из этих функций используются не только в скриптах, но и в полях result.

Показ сообщений

[no fix] MessageBox, “Message”, [var1], [var2], [“button1”], [“button2”]

Команда MessageBox позволяет вам выдавать игроку информацию. Обычно появляется маленькая табличка с текстом внизу экрана, которая задерживается на несколько секунд, или до тех пор, пока игрок не нажмет на кнопку, если окно сообщения имеет их. Максимальное количество кнопок в одном MessageBox – 9. Если диалоговое окно открыто, MessageBox выведется в диалоговое окно! У такого текста будет другой цвет, чтобы показать, что это не часть диалога. Например, "Ладно, я сниму проклятие. Он снимает проклятие." У MessageBox есть несколько различных режимов работы. Простейший режим — выдача сообщения на экран, которое появляется внизу на несколько секунд, как в следующем скрипте, который выдает сообщение, когда игрок надевает предмет, к которому он приаттачен:

Begin informplayer

Short OnPCEquip

if ( MenuMode == 1 )

return

endif

if (OnPCEquip ==1 )

MessageBox, “Меч дрожит в вашей руке”

Set OnPCEquip to 0

Endif

End informplayer

Во втором режиме сообщение остается на экране до тех пор, пока игрок не нажмет на кнопку:

MessageBox, “Улайа поднял руки и произнес заклинание. Теперь вы перенесетесь в Шигорад”, “ok”

В третьем режиме вы можете использовать сообщение, чтобы дать игроку возможность принять решение через сообщение с кнопками и функцию GetButtonPressed:

[no fix] GetButtonPressed (returns short)

Если используется сообщение с кнопками, то первая кнопка назначена на 0 и т.д. Функция будет возвращать -1, пока не нажата ни одна кнопка.

Пример:

Begin choices

Short button

Short status

Short OnPCEquip ; объявляется как переменная – иначе будут ошибки

if ( OnPCEquip ==1 )

MessageBox, “Меч вибрирует в вашей руке. Хотите взять его в руку?”, “Да”, “Нет”

Set OnPCEquip to 0 ;выдать этот MessageBox один раз

Set status to 1

Endif

If ( status == 1); ждем решения игрока

Set button to GetButtonPressed

If ( button == -1 ); нечего не выбрано – ничего не делать

return

Elseif ( button == 0 ); нормальное продолжение

Set status to 0 ; сброс для следующего раза

Elseif ( button == 1 )

Player -> drop, "power_sword" ; игрок сбрасывает предмет

Set status to 0

Endif

Endif

End

Примечание: Если вы используете стартовый скрипт Трибунала, чтобы выдать сообщение с кнопкой, как только игра загружена, нужно пропустить один фрейм, иначе не будет показан указатель мыши (Информация с форумов / DinkumThinkum).

Можно добавлять символы «возврат каретки» в сообщения, но это требует редактирования esp. Добавьте какие-нибудь необычные символы вроде || и сохраняйте esp. Затем откройте шестнадцатеричный редактор и замените || на 0D0A (код для возврата каретки) (Информация с форумов / qarl)

Показ переменных и предопределенного текста в окне сообщения

Чтобы показать переменную в окне сообщения, вы должны использовать синтаксис, описывающий формат числа для отображения. ВНИМАНИЕ — в оригинальном файле справки очень много неверной информации об этом!

MessageBox "You have %.0f days left", days_left

Символ % обозначает переменную. Цифра после точки определяет число цифр для отображения, "f" показывает переменную типа float. В файле справки перечислены несколько типов (f для float, D для short или long и S для переменной типа string), из них я смог заставить работать только f. Тем не менее, %g и %G отлично работает для переменных типа short и long (спасибо Niyt Owl). Вы можете использовать такой формат %.3g, но число назначенных цифр будет просто проигнорирован. Эти обозначения не жестко закреплены за типами переменных, %.3f также покажет переменную типа short или long.

Строковые переменные упоминаются в справке, но, насколько мне известно, не реализованы. Тем не менее, вы можете использовать предопределенный текст в окнах сообщения, но НЕ используйте % для этого – в скриптах применяется ^ (спасибо Ragnar_GD):

Предопределенный текст:

^PCName Имя игрока.

^PCClass Класс игрока.

^PCRace Раса игрока.

^PCRank Ранг игрока во фракции говорящего.

^NextPCRank Следующий ранг игрока во фракции говорящего.

^Cell Текущая ячейка игрока.

^Global Любая глобальная переменная. Тип Float показывается как 1.1, например ^Gamehour

Примечание: вы также можете отображать глобальную переменную обычным способом, используя синтаксис, как показано выше (%.1f), что приведет к тем же результатам. Если использовать ^Global в книге, Морр вылетает при попытке доступа или изменения переменной, когда книга открыта. Этого нужно избегать любой ценой (Информация с форумов / Chris_K)

^Name Имя говорящего.

^Race Раса говорящего.

^Class Класс говорящего.

^Faction Фракция говорящего. Если он не принадлежит ни к какой фракции, то будет пропуск.

^Rank Ранг говорящего.

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