Инвентарь

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.
Agiliter
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46

Инвентарь

Сообщение Agiliter »

День добрый!
Стал думать над реализацией инвентaря к своему приложению. Возникло несколько вопросов. Как хранить содержимое инвентаря пользователя? Мне пока приходит в голову только создать в БД отдельную табличку, но в каком виде хранить немного непонятно. Сам инвентaрь, наверное, задавать списком типа: inventory:Array = [[id слота, id предмета, число предметов], [...,"...",...], ...]. Более корректной конструкции пока не придумал. Как это на сервере хранить не совсем понятно. Можно, конечно напрямую в таблицу загонять всё, но на каждый предмет по три параметра, а если еще и предметов хотя бы сотня на пользователя.. Это ж какого размера нужна таблица. Думал также над тем, чтобы хранить в xml, но тут еще непонятнее. На каждого пользователя файл создавать - гемора, наверное, много потом с обработкой этих файлов, если пользователей много. Наверняка у кого советы дельные есть)
Agiliter
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46

Re: Инвентарь

Сообщение Agiliter »

Ну, народ) Может быть хранить одной строкой, используя символ-разделитель? Но опять таки, если инвентарь большой, то строка получится огромной.
XELAD
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25

Re: Инвентарь

Сообщение XELAD »

То, что не нужно сортировать относительно других пользователей - можно записывать в Array, с помощью JSON переделывать в string и хранить в столбце таблицы с типом=TEXT. В пользовательскую Array записывать только то, на что игрок имеет влияние (может изменять). Другими словами, если у предмета в инвентаре 100 характеристик, но для каждого игрока они одинаковы, - достаточно записать в Array идентификатор предмета (пример: "AXE001"). Списки могут быть бесконечной глубины, таким образом, можно группировать предметы по тому, на что они надеваются, оборачивать в Array, и записывать в основную Array (пример: [["HAT001", "NOSE023"], ["AXE001", "GUN054"]] ).
Передача строки размером 4кб и меньше занимает времени до секунды (на самом плохом хостинге), а вот callback когда придёт, зависит от параметров вашего тарифного плана.

P.S. собственные конструкции с символ-разделителями - плохая идея, замучаешься потом переделывать. Кроме того, в php json прекрасно работает, на случай, когда дойдёшь до проверки того, что тебе присылает пользователь.
Agiliter
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46

Re: Инвентарь

Сообщение Agiliter »

XELAD писал(а):То, что не нужно сортировать относительно других пользователей - можно записывать в Array, с помощью JSON переделывать в string и хранить в столбце таблицы с типом=TEXT. В пользовательскую Array записывать только то, на что игрок имеет влияние (может изменять). Другими словами, если у предмета в инвентаре 100 характеристик, но для каждого игрока они одинаковы, - достаточно записать в Array идентификатор предмета (пример: "AXE001"). Списки могут быть бесконечной глубины, таким образом, можно группировать предметы по тому, на что они надеваются, оборачивать в Array, и записывать в основную Array (пример: [["HAT001", "NOSE023"], ["AXE001", "GUN054"]] ).
Передача строки размером 4кб и меньше занимает времени до секунды (на самом плохом хостинге), а вот callback когда придёт, зависит от параметров вашего тарифного плана.

P.S. собственные конструкции с символ-разделителями - плохая идея, замучаешься потом переделывать. Кроме того, в php json прекрасно работает, на случай, когда дойдёшь до проверки того, что тебе присылает пользователь.
json я к сожалению в данном проекте не использую, а переделывать всё остальное как-то не вариант. Распишу подробнее.
В приложении использую связку as3+php+mysql. По идее клиент должен грузить список предметов (точнее id предметов), которые есть у пользователя с их (предметов) параметрами (число штук и надет на голову, шею и т.д. или лежит в инвентаре) с сервера. Например, в первой ячейке инвентаря 5 зелий, во второй - меч. А другой меч уже надет на персонажа. Возникает несколько вопросов:

1. Как реализовать клиентскую часть.
Возможно, стоить разделить предметы на две группы: надетые на персонажа и лежащие в инвентаре. Тем более, что число слотов на персонажах различное.
В клиенте сам инвентaрь, наверное, задавать списком типа: inventory:Array = [[id слота, id предмета, число предметов в слоте], [..., ... , ...], ...]. Хотя без id слота, наверное, можно обойтись, за него можно взять номер элемента в списке.

2. Как реализовать расшифровку по id предмета.
Тут вижу два варианта. Либо загрузить изображения и характеристики изначально на флэшку, либо как-то хранить на сервере, например в xml. Но детали как-то туманно представляю.

3. Как хранить список предметов с их характеристиками на сервере.
Единственное, что пришло в голову - это хранить всё одной строкой в единственном столбце таблицы с типом=TEXT. В одном столбце хранить предметы в инвентаре, а в другом надетые на персонажа. В строке использовать какие-либо разделители. Иного варианта не вижу, но он мне кажется геморройным.

4. Как реализовывать изменения.
При покупке/продаже предмета или же перемещении предмета из инвентаря на персонажа, короче при любом изменении нужно посылать на сервер целиком всю строчку на замену что ли?
Serge
WEB Team
WEB Team
Сообщения: 520
Зарегистрирован: 04 мар 2011, 21:55

Re: Инвентарь

Сообщение Serge »

Очень много буков, раскажу как я делал.

Есть отдельно таблица предметов. айди, название, все необходимые параметры (если это одевабельная шмотка - то в какой слот она идет).
Отдельно таблица инвентаря игрока. айди, айди игрока, айди шмотки, количество, одета/нет (по желанию это можно вынести в отдельную таблицу. Сделать что-то типа айди игрока, айди шмотки на голове, айди шмотке на шее и т.д.)
А на счет геморройных строк - имхо, json для того и сделан. Не обязательно переделывать весь проект, можно парсить только инвентарь, а остальное переводить постепенно.
XELAD
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25

Re: Инвентарь

Сообщение XELAD »

1) Если в слоты можно запихивать что-либо только по порядку, т.е. не важно, в какой именно слот, то "за id слота можно взять номер элемента в списке". В остальном всё верно.
2) Serje правильно говорит, в отдельной таблице перепись инвентаря с id. Либо во флешке в Array прописать.
3) В флешке JSON.stringify(array_inventory) , и отдать в php, который запишет это в mysql в столбец типа TEXT.
4) Ответ: "при любом изменении нужно посылать на сервер целиком всю строчку на замену".
Такой вариант только если ты не проверяешь на сервере переданное игроком. Вообще нужно отдавать серверу каждое действие, php вычислять, возможно ли оно, отдавать результативную array. Когда флешка дождётся результата, если array не совпадает с получившейся у флешки, то БАЦ, пишем "ошибка сервера", отключаем клиент.
Agiliter
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46

Re: Инвентарь

Сообщение Agiliter »

XELAD писал(а):Такой вариант только если ты не проверяешь на сервере переданное игроком. Вообще нужно отдавать серверу каждое действие, php вычислять, возможно ли оно, отдавать результативную array. Когда флешка дождётся результата, если array не совпадает с получившейся у флешки, то БАЦ, пишем "ошибка сервера", отключаем клиент.
Что подразумевается под "проверять переданное игроком"? Понятно, что можно проверять выполнение неких условий, например, при покупке предмета проверить хватает ли денег, ну и подобные вещи. Что еще-то нужно проверять?
Agiliter
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46

Re: Инвентарь

Сообщение Agiliter »

XELAD писал(а):В флешке JSON.stringify(array_inventory)
Выдает: 1061: Обращение к возможно неопределенному методу stringify через ссылку статического типа Class.

Есть только JSON.decode и JSON.encode.
Аватара пользователя
alexandr_ratush
Сообщения: 94
Зарегистрирован: 05 мар 2014, 21:47

Re: Инвентарь

Сообщение alexandr_ratush »

Выдает: 1061: Обращение к возможно неопределенному методу stringify через ссылку статического типа Class.

Есть только JSON.decode и JSON.encode.
Имелось ввиду про нативный JSON. Он доступен с версии FP11. У вас скорее всего версия ниже, и подцеплен JSON из сторонней либы.
Agiliter
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46

Re: Инвентарь

Сообщение Agiliter »

alexandr_ratush писал(а):Имелось ввиду про нативный JSON. Он доступен с версии FP11. У вас скорее всего версия ниже, и подцеплен JSON из сторонней либы.
То есть если у пользователя будет flash player ниже 11, прога работать не будет?
Ответить