Инвентарь

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.

Инвентарь

Сообщение Agiliter » 02 июл 2014, 16:34

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

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Re: Инвентарь

Сообщение Agiliter » 02 июл 2014, 21:30

Ну, народ) Может быть хранить одной строкой, используя символ-разделитель? Но опять таки, если инвентарь большой, то строка получится огромной.
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Re: Инвентарь

Сообщение XELAD » 03 июл 2014, 00:40

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

P.S. собственные конструкции с символ-разделителями - плохая идея, замучаешься потом переделывать. Кроме того, в php json прекрасно работает, на случай, когда дойдёшь до проверки того, что тебе присылает пользователь.
XELAD

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.

Re: Инвентарь

Сообщение Agiliter » 03 июл 2014, 06:27

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. Как реализовывать изменения.
При покупке/продаже предмета или же перемещении предмета из инвентаря на персонажа, короче при любом изменении нужно посылать на сервер целиком всю строчку на замену что ли?
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Re: Инвентарь

Сообщение Serge » 03 июл 2014, 19:19

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

Есть отдельно таблица предметов. айди, название, все необходимые параметры (если это одевабельная шмотка - то в какой слот она идет).
Отдельно таблица инвентаря игрока. айди, айди игрока, айди шмотки, количество, одета/нет (по желанию это можно вынести в отдельную таблицу. Сделать что-то типа айди игрока, айди шмотки на голове, айди шмотке на шее и т.д.)
А на счет геморройных строк - имхо, json для того и сделан. Не обязательно переделывать весь проект, можно парсить только инвентарь, а остальное переводить постепенно.
http://sevenlines.com.ua - разработка и продвижение сайтов
Serge
WEB Team
WEB Team
 
Сообщения: 520
Зарегистрирован: 04 мар 2011, 21:55
Благодарил (а): 2 раз.
Поблагодарили: 65 раз.

Re: Инвентарь

Сообщение XELAD » 03 июл 2014, 21:53

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

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.

Re: Инвентарь

Сообщение Agiliter » 07 июл 2014, 14:49

XELAD писал(а):Такой вариант только если ты не проверяешь на сервере переданное игроком. Вообще нужно отдавать серверу каждое действие, php вычислять, возможно ли оно, отдавать результативную array. Когда флешка дождётся результата, если array не совпадает с получившейся у флешки, то БАЦ, пишем "ошибка сервера", отключаем клиент.


Что подразумевается под "проверять переданное игроком"? Понятно, что можно проверять выполнение неких условий, например, при покупке предмета проверить хватает ли денег, ну и подобные вещи. Что еще-то нужно проверять?
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Re: Инвентарь

Сообщение Agiliter » 07 июл 2014, 16:55

XELAD писал(а):В флешке JSON.stringify(array_inventory)


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

Есть только JSON.decode и JSON.encode.
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Re: Инвентарь

Сообщение alexandr_ratush » 07 июл 2014, 18:36

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

Есть только JSON.decode и JSON.encode.

Имелось ввиду про нативный JSON. Он доступен с версии FP11. У вас скорее всего версия ниже, и подцеплен JSON из сторонней либы.
Аватара пользователя
alexandr_ratush

 
Сообщения: 94
Зарегистрирован: 05 мар 2014, 21:47
Откуда: Ukraine
Благодарил (а): 2 раз.
Поблагодарили: 25 раз.

Re: Инвентарь

Сообщение Agiliter » 07 июл 2014, 20:58

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


То есть если у пользователя будет flash player ниже 11, прога работать не будет?
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

След.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в Программирование на Flash



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron