Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2008, 21:00   #1
Uch
 
Регистрация: 05.12.2008
Сообщений: 5
По умолчанию Как лучше написать базу квестов в ММО?

Как лучше написать структуру базы? Может у кого-нибудь есть статьи по этому поводу, буду очень благодарен.
Uch вне форума Ответить с цитированием
Старый 06.12.2008, 00:14   #2
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Сначала определись с уровнем сложности системы квестов. Представь ее как "черный ящик", что является входом, что выходом, что управлением, и что происходит внутри, т.е. как система квестов выдает их. Допустим у тебя простейшая форма. На входе некоторые параметры того, кто собрался давать квест - это объект игры, ...управление - это некоторые состояния главного персонажа, который должен получить квест, ...на выходе будет номер квеста из списка, в котором кроме задания должны быть указаны все параметры квеста, если угодно связь с другими квестами. Как выглядит алгоритм внутри "черного ящика" системы квестов - это твое личное дело. Общий принцип основан на проверке состояния параметров дающего квест и получающего его, если условия благоприятные, то на выходе один из квестов. Нужна база данных, обычная реляционная, со свободными таблицами, ...одна из таблиц содержит текст квестов, и индексы связи с другой таблицей, где расписаны по атрибутам параметры объектов игры, например, у персонажа: Сила - 10, Уровень доверия - 10, ...у дающего квест: надобность дать квест - 10, ...при совпадении этих параметров в игре, из первой таблицы будет взят соответствующий квест. Кроме того понадобится еще таблица с финальными параметрами для главного персонажа, т.е. что произойдет если квест будет выполнен.
В общем, в таком духе.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 06.12.2008, 12:40   #3
Uch
 
Регистрация: 05.12.2008
Сообщений: 5
По умолчанию

Спасибо за ответ, но интересует немножко другое, со взятием квестов всё и так ясно. Интересует как отслеживать ход выполнения квеста. Например игроку даётся квест убить несколько ботов, как отследить и сохранить информацию что он убил их именно по квесту (те после того как он его взял). И есть ли более эффективный способ хранить информацию о том пройден ли квест, чем таблица размером "все квесты" на "все пользователи".
Uch вне форума Ответить с цитированием
Старый 06.12.2008, 13:09   #4
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Должен быть объект квест, сколько квестов - столько таких объектов. В таком объекте есть поля "состояние квеста" (целое число, взят, выполнен, провален, вобщем фантазируй), "тип квеста" (целое, например, квест принести предмет, убить существо, попасть в определенную локацию и прочие типы квестов), "количество"(опять целое, используется для задания, например, количества убитых монстров), и много еще разных полей, а также необходимые методы для их обработки.

Далее, если убит бот, идет итерация числа на единицу и если достигла опр. числа, зазначеного в квесте, квест выполнен и пора идти за вознаграждением Если боты разные, они должны отличаться по группам за их ID.

Если нужно, могу реализовать на Паскале, Дельфи, могу запихать в DLL
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 06.12.2008, 13:32   #5
Uch
 
Регистрация: 05.12.2008
Сообщений: 5
По умолчанию

apromix

вы говорите всё правильно, но забыли что вопрос о МНОГОПОЛЬЗОВАТЕЛЬСКОЙ ОНЛАЙН ИГРЕ, где приходиться хранить все данные в базе типа SQL и где не одна тысяча зарегистрированных игроков. Вопрос остаётся открыт.
Uch вне форума Ответить с цитированием
Старый 06.12.2008, 13:49   #6
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Для SQL (не пойму, что такого сложного):
Думаю, что после каждого действия нужно записывать изменения в SQL

Вот пример:
--
-- Структура таблицы `dk_quests`
--

CREATE TABLE `dk_quests` (
`ID` smallint(3) NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`message` varchar(30) NOT NULL default '',
`hint` varchar(30) NOT NULL default '',
`price` smallint(5) NOT NULL default '0',
`type` tinyint(1) NOT NULL default '0',
`latitude` smallint(5) NOT NULL default '0',
`longitude` smallint(5) NOT NULL default '0',
`amount` smallint(6) NOT NULL default '0',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 06.12.2008, 13:56   #7
Uch
 
Регистрация: 05.12.2008
Сообщений: 5
По умолчанию

apromix

Вы предлагаете мне создать таблиц в колличестве "все пользователи" * "все текущие квесты" (что примерно равняется 50000)???
Uch вне форума Ответить с цитированием
Старый 06.12.2008, 14:15   #8
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Здравствуйте!
Я предлагаю писать выполненые квесты не единую таблицу "все пользователи" * "все текущие квесты", а в "игрового персонажа" который дал этот квест, просто записать ID игрока который его выполнил в базу для этого "игрового персонажа".
Kostia вне форума Ответить с цитированием
Старый 06.12.2008, 14:18   #9
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Нет Просто добавить нужные поля в таблицу аккаунтов игроков. И добавить приведенную выше таблицу (расширенную, измененную и дополненную в соотв. с вашими требованиями) собственно с квестами, коих может быть великое множество. Можно заделать переменную булевую в коде самой игры, которая в позиции False отключает всю систему квестов, так удобнее тестировать нововведения. А новые поля в SQL в аккаунты игроков добавлять в конец, обязательно задавать значения по-умолчанию и т. д.
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 06.12.2008, 14:23   #10
Uch
 
Регистрация: 05.12.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Kostia Посмотреть сообщение
Здравствуйте!
Я предлагаю писать выполненые квесты не единую таблицу "все пользователи" * "все текущие квесты", а в "игрового персонажа" который дал этот квест, просто записать ID игрока который его выполнил в базу для этого "игрового персонажа".
Спасибо, хорошая идея.

Цитата:
Сообщение от apromix Посмотреть сообщение
Нет Просто добавить нужные поля в таблицу аккаунтов игроков. И добавить приведенную выше таблицу (расширенную, измененную и дополненную в соотв. с вашими требованиями) собственно с квестами, коих может быть великое множество. Можно заделать переменную булевую в коде самой игры, которая в позиции False отключает всю систему квестов, так удобнее тестировать нововведения. А новые поля в SQL в аккаунты игроков добавлять в конец, обязательно задавать значения по-умолчанию и т. д.
Кажеться я начал понимать что вы имеете в виду. Попробую подумать в эту сторону.
Uch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как записать в базу дату с календаря? Scorpy БД в Delphi 8 11.11.2008 21:44
Как лучше организовать базу данных типо как в ICQ Руслантус БД в Delphi 3 09.08.2008 23:57
Как создать базу данных? LeonKing Помощь студентам 4 07.05.2008 14:11
как выгрузить базу данных из MySQL в Access??? TRANE Помощь студентам 5 03.12.2007 13:22
Как создать базу данных knazty Помощь студентам 15 18.11.2007 19:49