![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 05.12.2008
Сообщений: 5
|
![]()
Как лучше написать структуру базы? Может у кого-нибудь есть статьи по этому поводу, буду очень благодарен.
|
![]() |
![]() |
![]() |
#2 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Сначала определись с уровнем сложности системы квестов. Представь ее как "черный ящик", что является входом, что выходом, что управлением, и что происходит внутри, т.е. как система квестов выдает их. Допустим у тебя простейшая форма. На входе некоторые параметры того, кто собрался давать квест - это объект игры, ...управление - это некоторые состояния главного персонажа, который должен получить квест, ...на выходе будет номер квеста из списка, в котором кроме задания должны быть указаны все параметры квеста, если угодно связь с другими квестами. Как выглядит алгоритм внутри "черного ящика" системы квестов - это твое личное дело. Общий принцип основан на проверке состояния параметров дающего квест и получающего его, если условия благоприятные, то на выходе один из квестов. Нужна база данных, обычная реляционная, со свободными таблицами, ...одна из таблиц содержит текст квестов, и индексы связи с другой таблицей, где расписаны по атрибутам параметры объектов игры, например, у персонажа: Сила - 10, Уровень доверия - 10, ...у дающего квест: надобность дать квест - 10, ...при совпадении этих параметров в игре, из первой таблицы будет взят соответствующий квест. Кроме того понадобится еще таблица с финальными параметрами для главного персонажа, т.е. что произойдет если квест будет выполнен.
В общем, в таком духе.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 05.12.2008
Сообщений: 5
|
![]()
Спасибо за ответ, но интересует немножко другое, со взятием квестов всё и так ясно. Интересует как отслеживать ход выполнения квеста. Например игроку даётся квест убить несколько ботов, как отследить и сохранить информацию что он убил их именно по квесту (те после того как он его взял). И есть ли более эффективный способ хранить информацию о том пройден ли квест, чем таблица размером "все квесты" на "все пользователи".
|
![]() |
![]() |
![]() |
#4 |
PHP, Delphi
Форумчанин
Регистрация: 07.05.2008
Сообщений: 388
|
![]()
Должен быть объект квест, сколько квестов - столько таких объектов. В таком объекте есть поля "состояние квеста" (целое число, взят, выполнен, провален, вобщем фантазируй), "тип квеста" (целое, например, квест принести предмет, убить существо, попасть в определенную локацию и прочие типы квестов), "количество"(опять целое, используется для задания, например, количества убитых монстров), и много еще разных полей, а также необходимые методы для их обработки.
Далее, если убит бот, идет итерация числа на единицу и если достигла опр. числа, зазначеного в квесте, квест выполнен и пора идти за вознаграждением ![]() Если нужно, могу реализовать на Паскале, Дельфи, могу запихать в DLL |
![]() |
![]() |
![]() |
#5 |
Регистрация: 05.12.2008
Сообщений: 5
|
![]()
apromix
вы говорите всё правильно, но забыли что вопрос о МНОГОПОЛЬЗОВАТЕЛЬСКОЙ ОНЛАЙН ИГРЕ, где приходиться хранить все данные в базе типа SQL и где не одна тысяча зарегистрированных игроков. Вопрос остаётся открыт. |
![]() |
![]() |
![]() |
#6 |
PHP, Delphi
Форумчанин
Регистрация: 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 ; |
![]() |
![]() |
![]() |
#7 |
Регистрация: 05.12.2008
Сообщений: 5
|
![]()
apromix
Вы предлагаете мне создать таблиц в колличестве "все пользователи" * "все текущие квесты" (что примерно равняется 50000)??? |
![]() |
![]() |
![]() |
#8 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
Здравствуйте!
![]() Я предлагаю писать выполненые квесты не единую таблицу "все пользователи" * "все текущие квесты", а в "игрового персонажа" который дал этот квест, просто записать ID игрока который его выполнил в базу для этого "игрового персонажа". |
![]() |
![]() |
![]() |
#9 |
PHP, Delphi
Форумчанин
Регистрация: 07.05.2008
Сообщений: 388
|
![]()
Нет
![]() |
![]() |
![]() |
![]() |
#10 | ||
Регистрация: 05.12.2008
Сообщений: 5
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как записать в базу дату с календаря? | 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 |