Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

> QS (quests system), управление квестами
_kaa_
сообщение Jul 25 2005, 14:20
Сообщение #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
Вот, для примера простейших квест из альфа-демо-версии :)

Как он выглядит в базе:

SQL
INSERT INTO `quests` VALUES (1000, 'Крысы в подвале', 'NW_MALEKID01', 'NW_MALEKID01', 0, 0, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 'NW_RAT*n', 'Крыс', 10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 5, 0, 0, NULL, NULL, NULL, NULL, 2, 'Мои родители ушли на стройку, а я боюсь сидеть дома один. Там такие здоровые крысы, они и обед весь мой сожрали. Я бы их выгнал, но они такие здоровые. Поможешь мне выгнать их?', 'Вот здорово, ты их выгнал! ', 'Мальчик попросил выгнать крыс из его дома на юге, сразу за башней мага.', NULL, NULL, 0, 0, '', NULL, 400, 0, NULL, NULL, NULL, NULL, NULL, '2005-07-24 23:23:09');


Участвует только один НПС, мальчик с тегом 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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов
_kaa_
сообщение Jul 27 2005, 12:21
Сообщение #2


Level 9
Иконки Групп

Класс: Волшебник
Характер: Chaotic Good
Раса: Дракон
NWN: Скриптинг [PW]



QUOTE (Vanes @ Jul 27 2005, 10:00)
квестовая система ВОВ и правда стала для многих откровением, и раз уж делать что-то подобное, то не стоит выдумывать велосипед и нужно банально перерисовать все оттуда...
тут же решается вопрос с квестовыми деревьями... у кого есть сервак ВОВа простогляньте любой файл *.tcl... это простенькие скрипты, которые срабатывают в момент OnPerception для каждого нового игрокас, состоящие из N-го кол-ва if'ов...

Дерево квестом проще. Проще воспринимать и придумывать (и можно легко отобразить в виде логичной структуры) и быстрее (все условия проверяет mySQL сервер).
Если кому-то покажется малым требование одного сделанного и одного не-сделанного квеста - расширить до Н займет около 7 минут (добавить поля в базу и поправить запрос из скрипта. Хотя это и отразится на скорости, но не значительно).

На самом деле этих двух условий достаточно для создания нелинейного сюжета любой сложности.

Наверное это не очевидно, но основная цель qs - снять с того, кто придумывает квесты, всю работу с кодом. И наоборот.

Как примерно выглядит создание квестов:
Если это "серьезный" шард, со своей историей - ДМ примерно представляет себе карту местности, где какие НПС обитают, где какие мобы живут.
Сел ДМ, на бумажке накидал сюжетную линию, обозначил и раставил НПС, при необходимости создал НПС или вещи в тулсете. Накидал диалоги. И все...
Если никаких новых НПС\вещей не использовал - квест можно сразу загружать в базу и он будет доступен игрокам.

Статические квесты задумывались:
1. Как средство для ознакомления игрока с шардом, с его НПС-обитателями, с местностью и мобами.
2. Занять игрока. Не "прокачкой", а продуманным сюжетом. Особенно актуально в отсутствие ДМ-ов

Посколько qs получилась не то что бы статическая - ДМ, набивший руку на стат. квестах может таким же образом добавлять свои квесты динамически.

Плюс qs позволяет вести "историю" квестов. Простые примеры:

Престиж-классы. Многие шарды не хотят давать возможность получения престижей всем подряд. (в основном "гопоте", что случайно зашла на шард и задержалась). Достаточно сделать сюжетную линию, чтобы игрок побегал, поискал НПС\вещи\места и как награду выдать престиж-класс.

На шардах, где PvP обычное дело - выполнив сложные квесты НПС выдает игроку задание убить самого сильного противника из другой фракции, например раз в день. (заодно его противнику - квест на убийство "охотника")

История позволяет немного отгородить "случайных" людей на шарде, от тех, кто "играет" (от тех, кому "охота покачацаа" - пусть идут играют в doom/wolf и т.п.). Все же РПГ-игры - это игры на развитие фантазии, общения, а не моторных функций глаз+рук. Простая сюжетная линия для того кто играет - в некотором роде приключение, развлечение. Для "гопоты" - тяжкий труд и пройти они могут его только если знают, что наградой будет эксп\шмотка и т.п.

\\понесло меня в сторону... :) пойду поем, пока докачивается патч для linux-сервера

p.s. А "Банально перерисовывать" - не интересно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Сообщений в этой теме
- _kaa_   QS (quests system)   Jul 25 2005, 14:20
- - Lorendroll   Ххе! ЗдОрово, Каа! Я такую же систему реал...   Jul 25 2005, 15:50
- - _kaa_   отвечая на вопросы по icq: >Можно ли будет исп...   Jul 25 2005, 16:48
- - DEM   Что-то очень похоже на квесты из WoW(world of warc...   Jul 26 2005, 11:45
- - _kaa_   QUOTE (DEM @ Jul 26 2005, 11:45) Что-то очень...   Jul 26 2005, 13:07
- - Аваддон   _kaa_ Ты как всегда поражаешь мое воображение. На...   Jul 26 2005, 15:12
- - virusman   Эта проблема давно витала в воздухе. Её неплохо ре...   Jul 26 2005, 16:00
- - _kaa_   Боюсь для оперативной связи нужна как минимум ICQ....   Jul 26 2005, 17:09
- - _kaa_   QUOTE (Аваддон @ Jul 26 2005, 15:12) НВНХ+Мускул -...   Jul 26 2005, 17:16
- - Vanes   квестовая система ВОВ и правда стала для многих от...   Jul 27 2005, 10:00
- - _kaa_   QUOTE (Vanes @ Jul 27 2005, 10:00) квестовая систе...   Jul 27 2005, 12:21
- - Batkom   Вот система рандомных квестов работающая у меня Ст...   Aug 12 2005, 06:53
- - _kaa_   На выходных доделал веб-интерфейс, теперь можно до...   Aug 21 2005, 16:21
- - _kaa_   QUOTE (Batkom @ Aug 12 2005, 06:53) Вот система ра...   Aug 21 2005, 16:29
- - aleVandal   QUOTE С тестами вышел небольшой облом - не могу со...   Aug 21 2005, 23:13
- - _kaa_   QUOTE (aleVandal @ Aug 21 2005, 23:13) Значит так...   Aug 22 2005, 08:48
- - aleVandal   QUOTE на форуме говорят, что без ldl возможны траб...   Aug 22 2005, 12:26
- - _kaa_   Кто хотел помочь с тестированием - еще разок напиш...   Aug 24 2005, 11:49
- - aleVandal   Вобщем поэксперементировал я с установкой nwnx2 по...   Aug 28 2005, 19:02
- - _kaa_   Примерно к этому мы и пришли - собрать nwnx под l...   Aug 28 2005, 19:46
- - aleVandal   Могу у себя в генту скомпилить.   Aug 28 2005, 21:16
- - mipn   все ссылки умерли - не могли ктонибудь перевыложит...   Dec 22 2008, 17:46
- - virusman   ...   Dec 22 2008, 21:07


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 27th April 2025 - 03:16