![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#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 |
||
![]() |
![]()
Сообщение
#2
|
|
Level 4 ![]() ![]() Класс: Клерик Характер: Lawful Good Раса: Человек ![]() |
Вот система рандомных квестов работающая у меня
Стоит в базовой локации(ваулт) тумбочка, которая раз в день генерирует квест(игрок этого не видит). В каждом городе будет доска обьявлений или глашатай, который будет говорить всем желающим о ниписях(выбираются рандомно, предположителдьно будут являться членами правительства данного города), желающих дать игроку работенку. Если игрок подписывается на квест, он убирается со всех досок или глашатаев. Далее игрок идет к ниписю, который генерит ему сам квест. Квесты простенькие(поди принеси, собери компоненты, кильни моба и приниси мне его часть тела и так далее), я думаю замарачиваться не стоит. Так же нипись генерирует место дислокации цели квеста и сроки, в которые надо квест выполнить. Награда напрямую будет зависеть от А) сложности квеста(сроки) Б) уровня игрока В) вашего респекта Респект начисляется за удачное выполнение квестов или выполнение их раньше срока. Снимается за провал квестов или опоздание. При высоком значении респекта есть вероятность получить рарную вещичку. Если респект ушел в минус, вы не можете выполнять квесты, в таком случае респект восстанавливается в ноль по прошествии года(12 дней) или по праздникам. Сложность квеста варьируется исходя из уровня персонажа(квестовый моб спавнится под уровень) и респекта(чем выше респект, тем меньше сроки, но тем больше платят). Вот пример(квадратными скобочками я отметил переменные): *игрок подходит к глашатаю* Глашатай\доска: Ваше уважение равно [3] Сегодня поступила заявка на вольный клинок от [Сем Купер] из города [Неллас] Игрок: Я беру этот заказ(заявка, хз как назвать, но это тестовый вариант) Глашатай\доска: Удачи. *Игрок топает в Неллас и говорит с Семом Купером* Сем купер: Здравствуйте, чем могу служить? Игрок: Я по обьявлению... Сем купер: ах да, перейдем сразу к делу, через [4] дня в наш город приезжает посол из [Брук'Ла'Даста], но неподалеку обосновалась шайка [Серых плащей] - известных бандитов. Они известны тем, что их главарь носит на шее ожерелье из ушей своих жертв. Они наверняка околачиваются гдето поблизости от города в поисках добычи. Если устрените их до приезда посла и принесете мне ожерелье в качестве доказательства, вам щедро заплатят из городской казны. *Игрок идет и киляет главаря бандитов, который спавнится рандомно на расстоянии не более трех локаций от Нелласа и приносит обратно ожерелье уложившись в два дня(типа долго искал заплутавшего бандюка)* Сем Купер: вы прекрасно справились! я обязательно о вас всем расскажу. Вот обещаная награда. И еще примите от меня лично этот [Бедролл] *игроку повышается респект и все счастливы* Добавлено в [mergetime]1123819291[/mergetime] Я довольно общно все описал(описание давнишнее), но пару дней назад все заработало и весьма неплохо. И главное, что игроки не медлят изза четко обозначеных сроков выполнения квеста, вся база по взятому квесту хранится в итеме, который игрок носит с собой. Добавлено в [mergetime]1123819422[/mergetime] В остальном, все акже как и было описано выше. Сообщение отредактировал Batkom - Aug 12 2005, 06:57 |
![]() ![]() |
Текстовая версия | Сейчас: 27th April 2025 - 02:49 |