Я делаю браузерную MMO, используя PHP и MySQL. Я колеблюсь между двумя способами реализации инвентаря игроков:
при создании / сбросе с монстра / обнаружении предмет создает новую строку в таблице предметов, сохраняя его тип (экземпляр кинжала, зелья ...), его местоположение (на землю на плитке X: Y? в инвентаре игрока Z?) и, возможно, еще одно или два поля. Список предметов будет выглядеть так:
id=728 ; type=14 ; location="i426" ; special="e8"
(где «i426» означает «в инвентаре игрока № 426», а «e8» означает, что предмет имеет чары № 8). < br> Плюсы: я могу хранить данные о каждом отдельном предмете - чары, прочность, предыдущий владелец ... Кроме того, предметы легко помещаются в любое место; Размещение предметов, скажем, в аукционных домах, происходит бесплатно с этой системой - не говоря уже о сумасшедших возможностях, таких как предметы внутри предметов и т. д.
Минусы: сотни игроков грабят монстров и создают в течение всего дня это быстро создает огромную таблицу, и это кажется довольно расточительным. Я боюсь, что это может замедлить всю игру (я использую много вуду AJAX) в любое время, когда задействованы элементы.или: когда игрок помещает предмет в свой инвентарь, поле инвентаря этого игрока в базе данных обновляется с добавлением нового типа предмета (целое число) в конце, с разделителем. Типичное поле инвентаря будет выглядеть так:
"|11|8|27|58|58"
Плюсы: гораздо менее расточительно. Экземпляр элемента - это всего лишь несколько цифр и разделитель.
Минусы: никаких дополнительных данных по элементам; все экземпляры одинаковы. Кроме того, падение предмета на плитку означает, что плитке требуется собственное поле инвентаря - и так далее для каждого возможного местоположения объекта. Кроме того, этот метод включает в себя манипуляции со строками каждый раз, когда необходимо добавить / удалить элемент, а не просто удаление строки из таблицы. Другое дело, что в инвентаре игрока может храниться переменное количество предметов, поэтому длина этой строки не может быть предсказуемой.
В предыдущем проекте я использовал второй метод. Первый метод выглядит забавным, но я не уверен, согласуется ли он с нашим объемом памяти и скоростью нашего сервера. Какой из этих методов чаще всего используется в MMO? Это совсем другой? Есть ли какие-то плюсы или минусы, которые я пропустил? (Прошу прощения, если этот вопрос немного субъективен!)