Журналы
Краткая статья о журналах.
Что это такое, для чего, как использовать и немного про динамические журналы.
Начнем с примеров. Отрываем тулсет, заходим в редактор журнала (tools->Journal Editor , или жмем CTRL-ALT-J)

рисунок 1.1
Структура журнала – двухуровневая. Первый уровень – название записи, т.е. то что будет видно в игре когда запись не раскрыта, так сказать заголовок конкретного под-журнала.
Второй уровень добавляется к указанной записи, обычное использование – шаги выполнения квеста.
\(корень журнала)
+запись 1 – квест (уровень 1)
+квест 1, шаг 1 (уровень 2)
+квест 1, шаг 2 (уровень 1)
…
+ запись 2, (уровень 1)
…
Давайте для простоты договоримся о том, как что будем называть.
Есть журнал, он один. Есть редактор журнала, тоже один.
Есть множество записей в журнале – так и буду их называть, запись журнала или сокращенно просто запись. Синонимы – поджурнал, квест.
Для каждой записи можно задать сколько угодно шагов, каждый будет иметь свой номер, название и возможно статус завершения квеста.
Пока вернемся к рисунку 1.1, разберем все что там есть.
Category: Тут описываются основные параметры записи.
Name: Название записи, отображается в игре
Tag Тег записи, используется для управления из диалога/из скрипта . Тег надо делать уникальным в пределах модуля.
Priority Приоритет записи. Если будут активны более одной записи, можно менять порядок отображения квестов в игре, задавая больший приоритет записи (квесту).
XP Тут можно задать количество опыта, получаемого за квест. Это значение можно получить из скрипта, используя функцию GetJournalQuestExperience(string sTag), где sTag – тег нужной записи.

рисунок 1.2
Добавляем шаги квеста. Каждый шаг имеет свое название (поле text), которое будет показываться игроку, когда он раскроет запись в журнале, ID – обычно номер шага и флажок – является ли этот шаг завершающим. Если достигнут этот шаг – запись переходит из категории «активные квесты» в категорию «выполненные квесты» в журнале игрока в игре.
Собственно на этом вся работа по журналу и заканчивается, дальше посмотрим как можно управлять журналом из диалогов и из скриптов.
Напомню про «цвета», как их можно использовать. НВН понимает теги цветов, т.е. можно кусок текста покрасить в нужный цвет. Делается это примерно так:
<cRGB>text</c>
т.е. парным тегом <c> задается область текста, которая будет окрашена в цвет RGB. Вся сложность в задании параметров. Каждый символ имеет свой код, его числовое значение и используется в качестве параметра.

рисунок 1.3
Не любой символ можно задать напрямую через тулсет, но выбрать «близко» к 0 или к 255 можно, обычно использую символ “ ” (код 32) и русскую “ю” (код 224).
Т.е. если мы хотим выбрать красный цвет – задаем <cю >text</c>. Полученный RGB цвет будет иметь значение R:224,G:32,B:32, что довольно близко к красному цвету.
Для «продвинутых»: Если есть желание – можно сделать библиотеку и в ней после компиляции попробовать поменять цвета на близкие к 0 и к 255
Добавлено в 20:12
Часть 2.
Как редактировать журнал – разобрались, посмотрим как ими управлять. Т.е. зачем вообще нам нужны записи в журнале.
Для примера создадим примерно такую запись в журнале:

рисунок 2.1
Создадим простой диалог, в котором можно будет получить наш «квест»
Открываем редактор диалогов (tools->Converstion Editor, или CTRL-ALT-V)
Создаем простой диалог, используя кнопку “add”-добавить.

рисунок 2.2
В ответе игрока «Да» переходим на закладку «Other Action» (Другие действия) и в поле Journal выбираем нашу запись и начальный шаг квеста.
Теперь, если игрок поговорит с НПС, которому назначен этот диалог и ответит «Да» - у него в журнале появится новая запись, текст которой будет содержать информацию из шага номер 1 (именно его мы задали в диалоге)
Если вы еще не знаете, что такое «скрипты» - дальше можно не читать, вся работа с журналом требует как минимум умения работы с помощником.
Посмотрим, как можно организовать проверку условий выполнения «квеста», проверить выполнение «шагов» и перейти на следующий шаг.
Пусть у нас все тот-же НПС в том же диалоге должен
1) выдать квест,
2) проверить выполнение «шага 1».,
3) выдать задание «шаг 2» и так далее до конца.
Основная «трудность» при работе с журналом – нельзя получить из скриптов\диалогов номер активного в данный момент шага. Т.е. нам приходится помнить это самим.
Давайте заведем локальную переменную для игрока, которая будет отображать, какой сейчас шаг активен. (расмотрим вариант для сингл-модуля, с шардами чуть сложнее из-за необходимости идентифицирования игрока)
Вернемся к нашему диалогу (рисунок 2.2). Перейдем на закладку “Action Taken” (Пункт был выбран), т.е. какой скрипт запустить в случае, если игрок выбрал данный пункт диалога.
Пишем имя скрипт, пусть будет «my_q001_taken01» (my_ - преффикс, чтобы не пересечься случайно со скриптами bioware или любыми другими, q001- номер квеста, taken01 –номер «взятого» шага. Уже по имени нам будет понятно, что примерно скрипт делает.
Жмем кнопку редактировать, тулсет скажет нам что такого скрипта нет, жмем ОК и пишем скрипт.