Главная страницаРегистрацияВход
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Учебник [2]
Другое [0]

Наш опрос
Оцените мой сайт
Всего ответов: 130

Наша кнопка
Внешний вид:

Код кнопки:


Начало » Статьи » Учебник

УЧЕБНИК. ЧАСТЬ 1. ДИАЛОГИ
Текст и Диалог

Краткая инструкция по диалогам

Диалоги как искусство в себе не может быть полностью рассмотрено здесь. Однако когда вы будете создавать квесты, вам часто придется смешивать диалоги и скрипты, чтобы контролировать квесты и добиваться определенных эффектов. Так что я приведу небольшое вступление.
Концепция диалогов в Морре
В Морровинде диалоги организованы в базу данных. Эта база структурирована следующим образом:

Верхний уровень:

Различные «подразделения» диалога:
Темы (Topics): Само тематическое слово и отклики для диалогового окна в игре.
Приветствия (Greetings): Текстовые строки, которыми вас приветствуют, когда вы начинаете диалог с актером.
Убеждение (Persuasion): Ответы, которые вы получите для успешной или провальной попытки убеждения.
Журнал (Journal): Записи в журнал.
Голоса (Voices): Звуковые файлы формата .mp3 (и субтитры), которые персонажи "говорят", когда вы проходите мимо, во время удара, во время бегства и т.д.

Подуровень 1:

Каждый из этих подразделений верхнего уровня имеют подуровни, которые я называю топиками – для секции Topics, это обычные "ключевые слова" (темы), на которые актерам есть что сказать. Эти слова будут подсвечены ("гиперссылки") в тексте и перечислены с правой стороны панели диалогового окна. Для Journal это различные заголовки (обычно один на задание). Для Voices это различные категории звуковых ответов, которые "включаются" при определенных игровых условиях и т.д. Для Greetings это просто основные категории приветствий (больной, предложения задания, стандартные и так далее). Вот как Беседка их использует:

• Greetings 0: NPC встревожен
• Greetings 1: Квесты (для которых не важно, является ли игрок вампиром, голым, больным, преступником и т.д.)
• Greetings 2: Игрок вампир/раздет
• Greetings 3: Предатели Мораг Тонг
• Greetings 4: Преступления и болезни
• Greetings 5: Квесты
• Greetings 6: Фракции
• Greetings 7: Классы, Конец игры, Рабы
• Greetings 8: Одежда (общие приветствия на основании одежды игрока)
• Greetings 9: Места
Для Persuasion это такие вещи, как отказ в услугах или успешная/неуспешная попытка дать взятку.

Подуровень 2:

Для каждого топика может быть еще один или несколько подразделов — это сами отклики. Для Topic и Greetings это ответы актеров на фразу темы. Для Journal это различные записи, описывающие прогресс выполнения задания.

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

Записи идут вместе с условиями, которые можно установить в окне редактора диалогов. В окне тем (topic window), вы найдете список основных условий слева — здесь вы можете определить, какой актер (Actor ID) или их группа (Раса [Race], Класс [Class] и т.д.) должны знать эти отклики. Также есть два условия для игрока (Фракция игрока [PC faction] и ранг [rank]). Справа вы можете установить максимум 6 “свободных” условий, которые могут относиться к актеру, игроку или другим вещам, таким как состояние глобальных переменных — здесь много опций, с которыми вам придется разобраться самим. Это проверка записей журнала, состояние игрока, локальные или глобальные переменные, предметы в инвентаре и много других функций - некоторые эквивалентны скриптовым функциям, некоторые уникальны для диалогов. (см. ниже).

Важная и на первых порах смущающая функция редактора диалогов — фильтр (filter) (в левом нижнем углу). Когда вы выбираете здесь actor ID, вы можете видеть только темы, которые этот актер может знать (как описано выше). Помните, что когда вы создаете новую тему (topic) (возможно специально для этого актера), она не содержит ответов (responses). Таким образом, актер “не знает” ее, и только что созданная тема не появляется! Выберите пустой слот на самом верху, чтобы снова увидеть все темы, создайте ответ для новой темы, чтобы актер ее “узнал” — теперь можете снова включить фильтр, если хотите.
Как работает диалог
Чтобы определить, доступна ли тема для диалога с NPC, игра проверяет:

1. “Знает” ли NPC тему – это определяется условиями в поле "speaker conditions" – если NPC удовлетворяет условиям хотя бы для одного ответа из этой темы, он “знает” ее.
2. Знает ли ее игрок. Игрок знает тему, если она (тематическая фраза) появлялась ранее в откликах NPC или была специально добавлена функцией AddTopic. Например, игрок пытается торговать с продавцом оружия, а продавец отказывается, так как в инвентаре игрока – скуума. Существует тема «скуума» и это слово использовано в диалоге, но торговцы оружием не знают эту тему, и она не будет добавлена игроку. Так что игрок узнает ее только после того, как поговорит с кем-то, кто «знает» что-то о скууме.
3. Если и игрок, и актер “знают” тему, тогда она показывается в списке тем и подсвечивается в тексте — теперь она может быть выбрана игроком, и на нее будет дан нужный ответ.

Когда игре нужно выбрать правильный ответ из списка ответов для данной темы, она делает это следующим образом:
• Она начинает проверять сверху списка, проверяя соответствие условий ответа, что означает, что все условия, которые были определены для данного ответа, должны быть «истинны».
• Если нет -> игра переходит к следующему элементу в списке и проверяет снова.
• Если да -> эта запись выводится в диалоговое окно.

Особое правило для приветствий (greetings): если ни один из элементов списка не подходит, переходим на 1 элемент следующего уровня (например, если ни один из элементов из "Greeting 0" не возвращает «истину», начинаем проверять в "Greeting 1").
Особое правило для Журнала (Journal): здесь есть только одно условие, которое проверяется, - это индекс (вызываемый функцией Journal). Он должен подходить точно.

Как только ответа выбран, игра
• Выводит текстовую строку в диалоговое окно (или проигрывает файл mp3 для Voice)
• Исполняет любые скриптовые команды в поле Result (в самом низу). Вы можете использовать здесь все скриптовые функции, в том числе и конструкции if

Будьте осторожны, т.к. поле result позволяет вам менять информацию в скриптах (например, устанавливая переменные или добавляя записи в журнал) и скрипт также может влиять на диалог, ставя условия, которые можно проверять (например, вы можете устанавливать локальные или глобальные переменные в условиях диалога говорящего). Простейший скрипт, который влияет на диалог — это скрипт nolore, который используется как флаг, чтобы актеры не использовали стандартные диалоги.
Примечание: Поля result не компилируются в CS. Можно написать там что угодно и Морр не поперхнется до тех пор, пока этот ответ не будет выбран в диалоге и скрипт не исполнится. Если скрипт достаточно сложен и можно беспокоится о возможных ошибках, то рекомендуется скопировать его в обычное окна скрипта и скомпилировать. Это более надежно, чем использовать кнопку Error Test Results, так как она изменяет установленные значения глобальных переменных. С другой стороны, некомпилируемые сразу скрипты могут использоваться для интересных возможностей, например, обращение к содержанию другого мода без дубликации его в данном моде, что не возможно сделать с нормальными скриптами

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

• Самые специфичные ответы должны быть сверху списка, ответы «для всех» должны быть в самом низу! Помните, тот ответ, который возвращает «истину», тот и берется. Так что вы не должны ставить ответ для всех в Вивеке выше, чем ответ для конкретного NPC в Вивеке.
• Если вы хотите, чтобы NPC мог говорить с игроком о чем-то особенном, вы должны представить тематическую фразу, например в приветствии (greeting) или в отклике на тему "свежие сплетни". Как альтернативу можно использовать скрипт с функцией AddTopic.
• Не используйте обычные слова как темы для журнала. Topic, Greeting, Journal на самом деле единая БД – вот почему журнальные темы используют формат, вида A1_dreams. Если бы стояло просто "dreams", тогда журнальная запись для "dreams" могла появиться, как отклик на диалог для слова "dreams".
• Никогда не удаляйте тему, которая принадлежит к оригинальному Морру/Трибуналу. Это тяжело исправить и это может привести к фатальным ошибкам в сэйвах.
• Когда используйте секцию Greetings, не помещайте свои приветствия в самом верху. Верхние приветствия принадлежат определенным квестам, и должны быть оставлены наверху, что они всегда появлялись.

Диалог 101

Нижеследующее суммирует некоторые наиболее распространенные проблемы с диалогами. Это список был собран из дискуссий на форумах, которые прислали Klinn, Emma и GarryB.

Совет 1) Мои новые темы исчезают! Зайдите в Фильтры внизу списка тем. Выберете самый верхний пустой элемент в выпадающем меню. Рекомендуется вызвать окно диалогов с панели инструментов, а не из окон Актеров.

Совет 2) Мои NPC постоянно задают мне один и тот же вопрос! Убедитесь, что ответы находятся выше вопроса. Звучит странно, но это работает.

Совет 3) Мой NPC говорит обо всем! Чтобы NPC не говорил на стандартные Морровские темы, присоедините скрипт «nolore» к нему. Если он уже имеет скрипт, то добавьте в него объявление переменной Short NoLore.

Совет 4) Мой NPC все равно имеет дополнительные темы! Некоторые другие темы всегда будут появляться в зависимости от класса и фракции NPC. Например, члены Имперского Легиона всегда будут говорить о своей фракции, Империи и т.д.

Совет 5) Как я могу добавить темы только для моего NPC? После создания темы и ответов для нее, укажите в графе Speaker Conditions ID своего NPC.

Совет 6) Я добавил темы, но мой NPC их не имеет! Две возможности: NPC должен употребить это слово до того, как вы можете его об этом спрашивать. Обычно это делается тем, что слово добавляется в приветствие. Второе: возможно Speaker Conditions не позволяют теме появится. Даже когда вы фильтруете диалог для NPC, некоторые темы зависят от того, достиг ли игрок определенного места игры, имеет ли нужную запись в журнале и т.д.

Совет 7) Как можно поменять порядок ответов? Используйте левую и правую стрелки на клавиатуре, чтобы передвигать ответы вверх и вниз.

Совет 8) Как можно создать диалог с существами? Каждое существо может иметь свои диалог. Это можно сделать так же как и диалога с NPC, кроме одного различия.
Нужно создавать диалог, не фильтруя его. После того как вы создали диалог, можете его фильтровать для этого существа .

Совет 9) Как чаще всего используются поля result? Emma приводит здесь полезные и часто используемые команды для полей result.

• Player->AddItem "my item" 1 (нужный предмет добавляется игроку в инвентарь)
• Player->RemoveItem "my item" 1 (нужный предмет удаляется из инвентаря игрока)
• ModDisposition 5 (реакция NPC увеличится на 5 пунктов)
• cast "my_new_spell" player (NPC скастует заклинание)
• AiFollow Player 0 0 0 0 0 (NPC пойдет за игроком)
• AiWander 0 0 0 0 0 0 0 0 0 0 0 0 (NPC перестанет ходить за игроком)
• SetFight 100 (NPC нападет на игрока)
• StartCombat->player (NPC нападет на игрока)
• StopCombat (ааа, вы догадались. Прекратить бой)
• StartScript "my_global_script" (начать определенный скрипт )
• Set companion to 1 (если вы добавили "short companion" в скрипт на NPC, то NPC станет с вами делится, требует Трибунал)
• SetHealth 100 (установит здоровье NPC в 100, тоже самое можно использовать с другими скиллами и атрибутами, например SetMagicka, SetLongBlade и др.)
• disable (NPC исчезнет)
• goodbye (завершит разговор с игроком. Может быть полезно, чтобы избежать последующего разговора с NPC, который исчез)

Совет 10) Я создал много диалогов, как я могу проверить их на орфографию? Проверка орфографии осуществляется, используя функции экспорта-импорта в CS. Экспортируйте “новые” диалоги в файл, проверьте его на ошибки своим текстовым редактором и импортируйте обратно. Это гораздо проще, чем лазить по тысячам тем

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

Многие из этих функций используются не только в скриптах, но и в полях result.
Показ сообщений
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:

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

Примечание: Если вы используете стартовый скрипт Трибунала, чтобы выдать сообщение с кнопкой, как только игра загружена, нужно пропустить один фрейм, иначе не будет показан указатель мыши.
Можно добавлять символы «возврат каретки» в сообщения, но это требует редактирования esp. Добавьте какие-нибудь необычные символы вроде || и сохраняйте esp. Затем откройте шестнадцатеричный редактор и замените || на 0D0A (код для возврата каретки)
Показ переменных и предопределенного текста в окне сообщения
Чтобы показать переменную в окне сообщения, вы должны использовать синтаксис, описывающий формат числа для отображения. ВНИМАНИЕ — в оригинальном файле справки очень много неверной информации об этом!

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.
Строковые переменные упоминаются в справке, но, насколько мне известно, не реализованы. Тем не менее, вы можете использовать предопределенный текст в окнах сообщения, но НЕ используйте % для этого – в скриптах применяется ^ :

Предопределенный текст:
^PCName Имя игрока.
^PCClass Класс игрока.
^PCRace Раса игрока.
^PCRank Ранг игрока во фракции говорящего.
^NextPCRank Следующий ранг игрока во фракции говорящего.
^Cell Текущая ячейка игрока.
^Global Любая глобальная переменная. Тип Float показывается как 1.1, например ^Gamehour

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

^Name Имя говорящего.
^Race Раса говорящего.
^Class Класс говорящего.
^Faction Фракция говорящего. Если он не принадлежит ни к какой фракции, то будет пропуск.
^Rank Ранг говорящего.

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

Пример: Дурацкий простой скрипт, демонстрирующий весь возможный синтаксис:

Begin test1

short var_1
long var_2
float var_3
; GameHour глобальная переменная типа float

set var_1 to 1
set var_2 to 2
set var_3 to 3

MessageBox "^PCName, у вас %g голов, %G рук, и %.5f золота. Можно сказать, что здесь в ^cell уже поздно. Сейчас ^GameHour часов, а точнее, %.2f часов!", var_1, var_2, var_3, GameHour

End

Добавление темы для диалога
AddTopic, "Topic"

AddTopic, "Topic"

Даже когда вы поставите тему для диалога в TESCS, вы можете обнаружить, что все еще не можете говорить об этом с NPC, которым вы назначили этот диалог, так как вы еще не знаете эту конкретную тему. Есть два способа поправить положение: либо вы представляете тему в другой, объясняющей теме (например, в своем приветствии) или вы можете дать ее игроку через скрипт, что имеет значение, когда игрок должен говорить на эту тему без представления ему этого в объясняющем диалоге (например, если вы видите NPC, стоящего под водопадом, вы можете захотеть спросить его: "тебе не мокро?", даже если NPC не давал эту тему).
Чтобы сделать это, просто добавьте NPC маленький скрипт:

Begin AddSpecialDialogue

;добавить возможность спросить об этом
AddTopic, "тебе не мокро?"

End AddSpecialDialogue

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

AddTopic добавляет тему в список известных тем игрока. Так что это не верно:

"Actor_ID"->AddTopic "blabla".
Начало и окончание диалога
ForceGreeting

ForceGreeting используется, чтобы заставить актера начать диалог. При вызове ForceGreeting откроется диалоговое окно, и актер использует приветствие, исходя из установок диалога. Поэтому, если вы хотите вызвать специальное приветствие от актера, вы должны дать его через окно диалога в TES CS. Не важно, где находится NPC, эта функция работает всегда, так что лучше использовать ее в связке с функциями GetDistance или GetPCCell .
Примечание: этот скрипт показывает хороший набор условий для проверки перед вызовом функции ForceGreeting

Begin balynScript

float timer
short doOnce

if ( GetJournalIndex "DA_Mephala" < 40 )
Return
endif
if ( GetJournalIndex DA_Mephala >= 60 )
Return
endif
Set timer to ( timer + GetSecondsPassed )
if ( timer < 5 )
Return
endif

Set timer to 0

if ( doOnce == 0 )
if ( GetDistance Player <= 1024 )
if ( player->GetDistance "hlaalu_loaddoor_ 02_balyn" <=256 )
if ( GetLOS Player == 1 )
ForceGreeting
Journal DA_Mephala 55
set doOnce to -1
endif
endif
endif
endif

End

Goodbye

Goodbye приведет к завершению диалога. После вызова этой функции (она обычно используется в секции result темы для диалога, не в скриптах) игрок может выбрать только опцию «прощай», которая закроет диалоговое окно.
Инициация диалога с оборотнем (Bloodmoon)

AllowWereWolfForceGreeting (is short variable)

Short AllowWereWolfForceGreeting

Эта переменная позволяет использовать ForceGreeting с игроком-оборотнем. Используется в cariushuntscript, dulkscript, heartfanghuntscript. Не нужно ее ни во что устанавливать, только объявите ее.
Example Пример:

Begin dulkScript

short doOnce
short playerwolf
short AllowWerewolfForceGreeting

if ( GetJournalIndex BM_FrostGiant2 == 10 )
if ( doOnce == 0 )
if ( GetDistance Player <= 512 )
if ( Player->IsWerewolf == 1 )
ForceGreeting
set doOnce to 1
endif
endif
endif
elseif ( GetJournalIndex BM_FrostGiant2 == 70 )
if ( doOnce == 1 )
if ( GetDistance Player <= 512 )
;if ( Player->IsWerewolf == 1 )
ForceGreeting
set doOnce to 2
;endif
endif
endif
endif

End dulkScript

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

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

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

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

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

Добавление записей в журнал и тест записей журнала
Journal, "Journal_ID", Index_enum

Journal, MG_BCShroomsCombat, 10

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

SetJournalIndex "Journal_ID" index_enum

SetJournalIndex "MG_BCShroomsCombat" 99

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

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

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

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

ClearInfoActor

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

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

Специальные диалоговые функции

В числе функций, доступных для определения условий диалога в редакторе диалогов, есть некоторые, не имеющие прямого эквивалента в функциях для скриптов. Используя диалог (напр.: ForceGreeting, голосовой диалог или стратегически расположенного квестового NPC) и поле Редактора диалогов result, вы можете использовать эти функции для скриптовых целей, например, устанавливая глобальную переменную в поле result. Вот примеры этих функций:

PC Sex (dialog)
0, если игрок мужчина и 1, если женщина.
Примечание: Это единственный способ определить пол игрока – вы можете использовать это, чтобы установить глобальную переменную, содержащую пол игрока – самый легкий способ через Voice, то есть поместить приветствие hello для всех NPC вверху листа, которое устанавливает переменную в 1 - если игрок мужчина, и 2 – если женщина. В теме также должно быть условие, что эта переменная равна нулю, то есть, не установлена.

Talked to PC (dialog)
1, если говорящий уже разговаривал с игроком и 0, если нет. Вы можете использовать эту функцию, чтобы кто-то сказал что-то, когда игрок говорит с ним в первый раз, или для наших скриптовых целей, чтобы пометить актера, как “известного” игроку.
Похоже, что Talked to PC сбрасывается в 0, если игрок провел 72 часа вне ячейки с NPC. Это ограничение также применяется к другим диалоговым функциям, например ForceGreeting: NPC доступен из другой ячейки только 72 часа. Этот можно обойти вызывая PositionCell на NPC каждый день (даже не перемещая его никуда). Этот фокус, похоже, требует, что ячейка, куда они перемещаются, должна быть не той же самой ячейкой, где игрок впервые встретил их.

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

Rank Requirement (dialog)
Эта функция для проверки вашего соответствия для следующего ранга во фракции говорящего.
Функция возвращает 0, если у вас не достает репутации во фракции (Faction Reputation) и вы не удовлетворяете требованиям по навыкам.
Функция возвращает 1, если у вас не достает репутации во фракции (Faction Reputation), но вы удовлетворяете требованиям по навыкам.
Функция возвращает 2, если у вас достает репутации во фракции (Faction Reputation), но вы не удовлетворяете требованиям по навыкам.
Функция возвращает 3, если вы готовы к повышению.

PC Clothing Modifier (dialog)
Это полная стоимость всей одежды и брони, надетой на игрока. Стоимость вашего снаряжения меняет отношение к вам людей в игре.

Friend Hit (dialogue)
Используется в диалоге для того, чтобы определить реакцию члена вашей группы на вашу же атаку на них.
Возвращаемые значения:
0 = атаки не было
1 = атакован игроком в первый раз
2 = атакован игроком во второй раз
3 = атакован игроком в третий раз
4 = атакован игроком в четвертый раз и npc/животное не дерется с игроком.

Категория: Учебник | Добавил: ArchANGEL (01.04.2007) | Автор: GhanBuriGhan
Просмотров: 2661 | Рейтинг: 5.0 |

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по каталогу

Друзья сайта
High-grade Morrowind


Статистика

Рабство в Морроувинде © 2006