Работа с Player IO API part #3 - База данных (теория)

База данных — вот святой грааль любой серьёзной онлайн игры! От умения работать с нею зависит очень многое. А любая ошибка на запущеной в паблик игре — вызовет жестокий гнев пользователей:)

Поэтому давайте возьмёмся за эту тему с достаточно серьёзными намерениями — создадим оптимальную БД для нашей игры.

Player IO в качестве базы данных использует собственный её тип, не относящий к SQL — BigDB. База данных, разбиение и скалирование которой происходит без участия разработчика. От нас же потребуется настройка и оптимизация её работы под свои нужды. Начнём с создания таблиц, настройки прав, а также работы с индексами и ключами.

Сегодня, наверное, вы сможете себя почувствовать вот таким человеком:


^_^

Создание таблицы

Заходим на сайт Player IO. Далее в нашу с вами админ панель. Там находим название нашей игры, кликаем на название. При этом должен открыться список компонентов PIO API.



Кликаем по второму компоненту — BigDB.

Далее вы должны будете увидеть примерно следующее:



Дело в том, что по умолчанию, для каждой игры создаётся пустая таблица — PlayerObject. Она будет особенно полезна для маленьких игровых проектов. Работа с ней сводится к двум — трём методам заранее заготовленными в API, и это действительно очень просто и быстро. Когда перейдём к практике — попробуем для начала поработать именно с этой таблицей.

Но пока о теории — создаём нашу собственную таблицу следующим образом:



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

В моей новой таблице «Registration» будут храниться объекты базы данных, именем которых будет имя пользователя username. Этот объект должен содержать две строковые переменные Username и Password. В следствие этого, полезным было бы следующие описание таблицы:

username = {
Username: user name
Password: user password
}


Вот, что мы увидим после создания таблицы:



Ключи

Ключи, это уникальные подписи каждого объекта в нашей таблице. Например, в этом объекте базы данных:



Ключём будет слово monsters.

Индексы

Что есть индексы? Представьте что у нас есть множество объектов с ключами по имени пользователя. В них хранятся данные о имени игрока, Времени его последнего посещения, а также о его пойнтах в игре.

В таком случае, чтобы составить лист рекордов, нам прийдётся пройтись по всем пользователям в цикле, используя ас3 либо серверный код и рассортировать данные вручную.

Индексы призваны облегчить эту задачу. С помощью индексов, выборку данных можно производить не с использованием имени каждого игрока, а по имени индекса — например ByScore.

Кроме того, индексирование позволяет сортировать объекты не только при получении данных непосредственно клиентом, но также объекты сортируются и в нашей таблице в реальном времени.

Например, в моей игре 3 монстра. У каждого своё имя, и каждый имеет свой уровень развития. Для удобства, я хочу рассортировать их по уровням — от высшего к низшему. Вот что я делаю:

Создаю новый индекс, называю его ByLevels (Дословно — «по уровням», то есть — сортировка по уровням).



Добавляю одно свойство (второе «Name» не обязательно, однако, при использовании нескольких свойств появляется возможность создавать сложные виды сортировки), выставляю тип как «Целочисленное», и имя свойства «Level». Колонка «Order by» указывает на тип сортировки: Descending — от большего к меньшему, а Ascending, соответственно, наоборот, от меньшего к большему. Добавляю 3 объекта с различными переменными Levels в свою таблицу:


(Обратите внимание, что объекты по уровням были созданы хаотично — никакой закономерности).

Далее заходим на заранее созданную вкладку ByLevels (чуть выше первого объекта) и видим что объекты здесь у нас отсортированы от большего к меньшему:



Теперь разберёмся с правами доступа для нашей новой таблицы.

Права доступа

Права доступа являются уникальными для каждого типа соединения и должны настраиваться отдельно. Однако, наш тарифный план FREE исключает возможность использования более чем одного типа соединения, поэтому настраивать права доступа будем всегда только для типа соединения public (по умолчанию).

Load by keys: Загрузка с использованием Ключей.

Load by Indexes: Загрузка с использованием Индексов.

Full Creator Rights: Объекты данной таблицы могут быть загружены, модифицированы и удалены способом обращения к ним по ключам, непосредственным создателем этих объектов.

Create: Разрешает создавать и сохранять новые объекты.

Delete: Разрешает удалять объекты способом обращения как по ключам, так и по индексам.

Save: Разрешает модифицировать и сохранять все объекты.

Стоит напоследок отметить, что после настройки прав доступа таблицы, желательно проверить те же настройки в Settings/Connection edit.
  • +4

Комментарии (7)

0
Извратно как-то.
То есть сложные выборки не сделать, да?
Кстати, ты сам где планируешь все это использовать? HoH online?
+1
Сложные выборки — иммется в виду с использованием нескольких параметров? Например не только по уровню монстра, но и по месту его нахождения и количеству ХР? Если речь об этом — то это всё делается очень легко, путём добавления дополнительных параметров индексирования. При этом, мы можем сами задавать границы сортировки — во вкладке нашего индекса, выше всех объектов можно настроить параметры выборки по любому/любым свойствам индекса (параметров индексирования).

Если речь о другом — то пожалуйста, уточни. Быть может я сам чтото напутал.

А вот вопрос с использованием. Я не знаю. Всегда было и есть желание создать онлайн игру. В ближайших планах — HOH онлайн:) Но скорей всего прийдётся отработать навыки на чём-нибудь полегче.) Рожаю идею)
0
Да, имел ввиду использование нескольких параметров.
Теперь понятно.

HoH online было бы круто.
0
ну начни чисто с онлайн баталии между двумя игроками. Ну пусть сохраняется опыт/деньги чтобы можно было покупать юнитов и пр. (заклинания?). И пусть будет таблица лучших. И пусть будет выборка оппонента по уровню его експы. Вобщем а-ля бойцовский клуб. А если добавлять глобальную идею то пусть будут очки у хевена и у хелла (выигрывает отряд хевен — плюс очко всему хевену). Глобальный баланс. А потом когда дорастешь добавишь еще и PvE карты. По одной для каждых пяти уровней прокачки допустим. На каждой карте есть места с крутыми вещичками. Не хочешь пве — покупай вещички за наличные :D Только имхо один ты с этим не справишься, так что набирай команду и вперед. Прикинь — твой собственный онлайн дисцайпл. Круто же!
0
То то и оно, что КОМАНДУ!)

А вот идеи просто в стиле дез матча на парочку, вынашиваются уже давно. Скорей всего появится сначало что-то подобное, для пробы пера. А вообще, конечно, мечтаю и о мире, и о PvE с развитым PVP:)

Поэтому сейчас нещадно штудирую Player IO и разбираюсь с ним вместе с вами) В нём очень много тонкостей, которые тоже надо побороть, например ассинхонизация передоваемых данных, латентность сети и т.п. Но это глобальные проблемы, с ними сталкиваются все разработчики онлайн игр/приложений.
0
Дезмач не так прост как может показаться. Да и к тому же было бы неплохо изменить геймплей в менее рилтаймную сторону. В теории есть вариант что такое приложение приживется в соц.сетях. Поэтому можно пофантазировать над кастомизацией аватаров для игроков. Организовать уютный чатег опять же. Магазин какой-нибудь с вещичками. Открытки на стены… Новогодние подарки… Подумать над тем что происходит после поражения. Например пусть будет хелл из которого можно будет набирать отряд, что будет требовать времени естественно. Хочешь сейчас — плати. У тебя юнитов всего шесть штук вроде в отряде. Можно и к ним кастомизацию прикрутить. Например мой любимый имп шестого уровня с татуировкой хевен маст дай и перламутровыми копытами. Ну и опять же раз он такой крутой был то пусть будет можно его из хелла после смерти воскресить за какие нибудь наличные виртуальные или реальные. Если вспомнить дисцайпелс там был напиток воскрешения — вот тоже вещичка неплохая. Или амулет воскрешения. Или посох выкачивания маны — получаешь +50% маны в единицу времени между битвами. Кароче масса наворотов — не вижу причин называть это пробой пера.

А вот прикрутить PvE будет намного проще, к тому же он у тебя уже есть.
0
О какой у тебя живой мозг) мнеб сейчас его))

Я дез матч представлял себе немного иначе. Будет чат-комната, где будут сидеть игроки. Под их например, аватарками, висят — звание, опыт, ну и карма допустим. И мы вот заходим в такую комнатку и выбираем себе противника. Далее переходим в окошко снаряжения отряда (как будет во второй части — там дез матч, но только для сингл плеера), нам дают например, 5к денег и мы снаряжаем себе отрядик. Противник делает тоже самое. Потом начинается захлёст. Скорей всего конечно, в пошаговом режиме. Так меньше багов.

А то что описал ты — это уже практически основа ПвП в ПвЕ мире:) покрайней мере я себя точно так это представлял) именно с кастомизацией юнитов, а именно — добавить в отряд ГЕРОЯ. Конечно закос под дисайплс… но как иначе) Не они первые.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.