![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|||
Level 9 ![]() Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [PW] ![]() |
Модуль (версии альфа 0.10) SQL-запрос для создания нужных баз ----------------------------------------------------------------------------- Я уже довольно давно отошел от разработки НВН-модулей, но когда в прошлую субботу мне пришла в голову эта идея - просто не смог остановиться и не реализовать. Какая главная проблема хорошего ДМ-а, когда он хочет реализовать на шарде статические (или еще хуже динамические) квесты? Необходимость учить скрипты, тулсет, огромное количество сложностей с хранением состояния квеста, взаимовлияние квестов друг на друга и т.п. А почему бы не реализовать поддержку story line (сюжетной линии) с помощью скриптов и базы данных? При этом не ограничивая в сложности сами скрипты, заложить в эту самую поддержку самые простые типы? Ведь по сути все квесты содержат такие элементы как "пойди найди, убей, поговори и т.п.", причем возможность выполнить один квест возможно только после выполнения другого (или наоборот, не выполнения). Теперь о технической стороне дела. Ведь чтобы "заскриптить" простой квест - нужно написать диалоги для участвующих сторон, внести проверку а выполнение и прочее, что быстро сводит энтузиазм от самой интересной идее для квеста на нет. Первый плюс системы - не нужно писать диалоги (если нет необходимости) для каждого НПС, участвующего в квесте, достаточно знать tag НПС. Второй, немаловажный. Вся информация об активных квестах отображается в журнале. Сами квесты хранятся в базе, в данном случае mySQL. Что дает кучу плюсов (не без минусов), об этом ниже. Как это выглядит на примере: Хотим мы сделать квест – НПС номер 1 просит отнести Вещь НПС 2. При этом выдает эту самую вещь. Запись в базе данных содержит теги обоих НПС, resref Вещи и текст, который говорит первый НПС при выдаче квеста, второй НПС при окончании и отдельно краткий текст квеста для журнала. Все. Никаких изменений в самом модуле мы не делаем (предполагается, что эти самые НПС у нас уже есть и у НПС стоит дефолтный скрипт на onConversation). Когда игрок разговаривает с НПС – идет запрос в БД, где по тегу НПС (индекс с БД) выполнятся запрос на доступные квесты для этого игрока (забегая вперед скажу, что можно как предусловие задавать расу, пол, характеристики, мировоззрение и прочие характеристики игрока, история выполненных квестов (обязательно выполненный для линейности и обязательно НЕ выполненный для ветвления) и т.п.) Если найдены доступные квесты исходя из указанных требований квеста – запускается диалог, данные в котором заполняются динамически, из БД. Не нравится простой вариант диалога – создаете свой и указываете имя диалога, из которого вызываете одну функцию для принятия квеста. Сюжетная линия при этом не нарушается. То же самое с завершением. Список «требований» для завершения квеста содержит как стандартные вещи (Н убитых мобов в тегом, похожим на ***, Н вещей, сработавший триггер с тегом ***) так и вызов custom-скрипта, который должен проверить не стандартные требования, без необходимости писать все остальное. (*На данный момент реализована проверка не всех пред-условий и после-условий, в разработке) Пару слов о журнале. В нем отражается состояние текущих квестов, т.е. если это «убить Н мобов» - будет отображено сколько уже убито и сколько нужно. Чуть ниже размещу скриншоты из альфа-версии QS. Сама система разрабатывается как шардо-независимая, будет доступна всем. (А если найдется кто-нибудь, кто сможет перевести на английский – то и на ваулте будет). Поскольку квесты хранятся во внешней SQL – базе, квесты можно добавлять на ходу (с ограничениями, скажем новых НПС или вещей так пока не добавить, да и не нужно я считаю). Сами квесты создаются с помощью простого html- браузера, интерфейс написан (но еще не доделан) на php. Из приятных возможностей (планируется на будущее) – возможность построения дерева квестов (ведь в каждом квесте, что зависит от предыдущего, хранится номер «родителя» и возможно отображения в виде дерева). Можно сделать служебные скрипты, которые будут по базе проверять наличие в модуле всех нужных НПС, вещей, мобов и т.п., что сильно облегчит отладку. Таким образом, с того, кто придумывает квесты, снимается вся нудная работа по скриптованию. Кроме того, скорость и продуманность квестов возрастает. Для существующего мира для создания простых квестов достаточно знать теги ключевых НПС и иметь под рукой палитру вещей (в веб-интерфейсе будет список стандартных\кастомных вещей с названием и тегом. И скорее всего список НПС\мобов то же). Появляется возможность создавать хитрые и запутанные сюжетные линии, в то же время не задумываясь о сложностях их реализации. Добавлено в 14:35 Вот, для примера простейших квест из альфа-демо-версии :) Как он выглядит в базе:
Участвует только один НПС, мальчик с тегом NW_MALEKID01 Требований у квеста нет никаких, оптимальный уровень - 2. Разговариваем с мальчиком: [картинки вырезанны] Смотрим журнал: Цвет зависит от уровня квеста и вашего уровня, красный - сложный, зеленый - оптимальный, серый - слишком прост (награда в опыте будет маштабироваться) (IMG:http://kaa.mhost.ru/nwn/img/NWN0002.jpg) Выполняем квест: (IMG:http://kaa.mhost.ru/nwn/img/NWN0003.jpg) Сообщение отредактировал _kaa_ - Oct 12 2005, 14:35 |
||
![]() ![]() |
Текстовая версия | Сейчас: 26th April 2025 - 19:56 |