Помощь по пакету InventoryUpdate

nesss

Путник
Участник
Сообщения
128
Розыгрыши
0
Решения
3
Репутация
-2
Реакции
14
Баллы
85
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
Собственная
Всем привет, подскажите пожалуйста, какая механика работы данного пакета, я что-то экспериментировал, у меня то все предметы удаляются, то тот предмет, что хочу удалить остается, остальные удаляются )
 
Решение
Да тут реально от балды клиент сделали, да и смотрю сборки тоже, понятно, почему на них мало клиентов одновременно могут играть, там оптимизации мало, все работает, но ценой мощного железа.
Просто я хз, зачем постоянно слать полный инвентарь. У меня на ХФ эти пакеты(S_ITEMLIST + S_EX_QUEST_ITEMLIST) отправляется всего в трех ситуациях.
1) Вход в игру.
2) Блокировка итемов в инвентаре(трансформы например)
3) Разблокировка итемов в инвентаре(выход из трансформы например)

ВСЕ остальные взаимодействия с инвентарем через другие пакеты S_INVENTORY_UPDATE, S_EX_BR_AGATHION_ENERGY_INFO.
Видел много где, что отправляется S_ITEMLIST + S_EX_QUEST_ITEMLIST в ответ на каждый полученный C_ITEMLIST, но это неправильно.
Пакет используется для обновления инвентаря что-бы либо добавить предмент, удалить, или же обновить параметры (мана, аугментация, количество и даже статус ношения). То есть вместо того что-бы переслать весь инвентарь используются данные о изменении параметров (удалили ли предмет, или же добавили).

Пакет обычно применяется когда персонаж получает предмет (например собирает предметы что выпали из мобов, либо из спойла).
 
При экипировке предмета применяется? или ItemList ?
 
Может примeнятся при экипировке. Так даже лучше. Но не все сборки его применяют.

ItemList пересылает информацию о всех предметах, поэтомy пакет во первых намного больше в размере, ну и клиент тоже нагружается так как весь инвентарь переписывается заново. Фишка InventoryUpdate в том что этот пакет позволяет делать все то что и в ItemList но быстрее и легче. Из этого и лага меньше в клиенте.

ItemList по идее должен случится только когда персонаж вошел в игру. А все последующие изменения предметов должны пересылатся через InventoryUpdate пакет.
 
ItemList по идее должен случится только когда персонаж вошел в игру.
ага, но только "по идее".
а реально такую логику корейцы сделали только примерно с мастеркласса, т.е. где-то с 336 протокола или около того - итемлист шлется один раз после входа в игру, а при последующих открытиях инвентаря запрашивается только то что изменилось с этого итемлиста и последних инвенториапдейтов.
Ну а до этого изменения итемлист запрашивался с сервера при каждом открытии инвентаря. С чем в основном вроде и связаны лагания клиента при достаточно высокой забитости инвентаря предметами - клиенту то каждый раз приходилось весь список предметов пересоздавать заново и отрисовывать.
 
Не знаю, у меня клиент не чего не отсылает на сервер при открытии инвентаря, нет запроса, то есть сервер сам отсылает при входе в игру пакет ItemList. Вот сейчас мучу оптимизированную штуку обновления предметов в инвентаре, к примеру, если чел юзает экипировку, что-бы затрагивались только предметы из инвентаря экипировки, что-бы остальные 100-200 предметов не входили в запрос.
 
ага, но только "по идее".
а реально такую логику корейцы сделали только примерно с мастеркласса, т.е. где-то с 336 протокола или около того - итемлист шлется один раз после входа в игру, а при последующих открытиях инвентаря запрашивается только то что изменилось с этого итемлиста и последних инвенториапдейтов.
Ну а до этого изменения итемлист запрашивался с сервера при каждом открытии инвентаря. С чем в основном вроде и связаны лагания клиента при достаточно высокой забитости инвентаря предметами - клиенту то каждый раз приходилось весь список предметов пересоздавать заново и отрисовывать.
Чет мне кажется это не корейцы сделали, а вполне себе легаси от лыжи, которое никто никогда не пытался сделать нормально)))
 
Да тут реально от балды клиент сделали, да и смотрю сборки тоже, понятно, почему на них мало клиентов одновременно могут играть, там оптимизации мало, все работает, но ценой мощного железа.
 
Да тут реально от балды клиент сделали, да и смотрю сборки тоже, понятно, почему на них мало клиентов одновременно могут играть, там оптимизации мало, все работает, но ценой мощного железа.
Просто я хз, зачем постоянно слать полный инвентарь. У меня на ХФ эти пакеты(S_ITEMLIST + S_EX_QUEST_ITEMLIST) отправляется всего в трех ситуациях.
1) Вход в игру.
2) Блокировка итемов в инвентаре(трансформы например)
3) Разблокировка итемов в инвентаре(выход из трансформы например)

ВСЕ остальные взаимодействия с инвентарем через другие пакеты S_INVENTORY_UPDATE, S_EX_BR_AGATHION_ENERGY_INFO.
Видел много где, что отправляется S_ITEMLIST + S_EX_QUEST_ITEMLIST в ответ на каждый полученный C_ITEMLIST, но это неправильно.
 
Последнее редактирование:
Решение
Я сделал так, при входе в игру, отправляется пакет ItemList, все других манипуляции с предметами только через пакет Update
 
ага, но только "по идее".
а реально такую логику корейцы сделали только примерно с мастеркласса, т.е. где-то с 336 протокола или около того - итемлист шлется один раз после входа в игру, а при последующих открытиях инвентаря запрашивается только то что изменилось с этого итемлиста и последних инвенториапдейтов.
Ну а до этого изменения итемлист запрашивался с сервера при каждом открытии инвентаря. С чем в основном вроде и связаны лагания клиента при достаточно высокой забитости инвентаря предметами - клиенту то каждый раз приходилось весь список предметов пересоздавать заново и отрисовывать.
Может быть и сделали. Но сам пакет InventoryUpdate уже сущестовал и работал в Интерлюде и HighFive. Есть также PetInventoryUpdate пакет который различается только начальным значением. Поэтому начатки идеи уже были, и работали. Как и Aristo, я тоже привинтил его использование в HF сервере. И ничего, работает неплохо.
 
Чет мне кажется это не корейцы сделали, а вполне себе легаси от лыжи, которое никто никогда не пытался сделать нормально)))
Ну в 336 пакет RequestItemList, запрашивающий ItemList, шлется клиентом всего один раз, в отличие от более старых хроник где этот пакет прилетает от клиента при каждом открытии инвентаря.
Ну и при следующих открытиях инвентаря в 336 уже летит другой пакет - RequestItemUsableList, в котором уже можно слать чисто InventoryUpdate с измененными предметами.

Просто я хз, зачем постоянно слать полный инвентарь. У меня на ХФ эти пакеты(S_ITEMLIST + S_EX_QUEST_ITEMLIST) отправляется всего в трех ситуациях.
1) Вход в игру.
2) Блокировка итемов в инвентаре(трансформы например)
3) Разблокировка итемов в инвентаре(выход из трансформы например)

ВСЕ остальные взаимодействия с инвентарем через другие пакеты S_INVENTORY_UPDATE, S_EX_BR_AGATHION_ENERGY_INFO.
Видел много где, что отправляется S_ITEMLIST + S_EX_QUEST_ITEMLIST в ответ на каждый полученный C_ITEMLIST, но это неправильно.
так эта логика вроде почти во всех вменяемых сборках сделана, что на изменения конкретных предметов именно что IU шлется а не весь итемлист на каждый чих шлется - ведь это самый логичный способ.
а полный итемлист только когда именно что клиентский пакет на него приходит.
но кстати надо будет у себя в 286 тоже попробовать по минимуму его слать даже при открытии инвентаря. просто помнится какие-то проблемы были когда я пытался его слать не всегда при приходе RequestItemList и тогда я временно забил на то чтобы разбираться со всем этим, т.к. были дела поважнее :)
сейчас у меня он тоже шлется всего в нескольких ситуациях:
- вход в игру
- блокировка/разблокировка предметов
- в ответ на пакет RequestItemList

З.Ы. кстати смотрел во многих сборках, типа мобиуса и т.д., для хроник где были переделаны все пакеты где шлются списки предметов на отправку частями и то как это в этих сборках сделали - это тихий ужас :)
Если кто не в курсе, то корейцы, не помню с какого конкретно протокола, переделали все пакеты инвентаря, почты и т.д. так, что можно слать списки предметов в них частями - сначала шлется так сказать заголовочный пакет с нужными данными, а затем уже сами части со списками предметов.
Ну и косяк во многих сборках состоит в том, что для каждой отправки таких пакетов идет генерация списков отправляемого, т.к. по сути на отправку каждой части таких пакетов генерится заново один и тот же список, что достаточно бредово и тупо.
 
Последнее редактирование модератором:
- в ответ на пакет RequestItemList
В ответ на этот пакет я формирую список итемов, у которых изменились флаги состояния и шлю S_INVENTORY_UPDATE с этими итемами, после чего очищаю у них флаги.
 
В ответ на этот пакет я формирую список итемов, у которых изменились флаги состояния и шлю S_INVENTORY_UPDATE с этими итемами, после чего очищаю у них флаги.
После хф видимо изменили немного логику работы с инвентарем.
Я вспомнил с чем именно я столкнулся когда пытался уменьшить отправку ItemList - если его не слать в ответ на RequestItemList, то инвентарь тупо не открывается, т.к. флаг "показать окно инвентаря" шлется именно в ItemList.
И такую логику поменяли уже в 336 или около того - там уже клиент сам открывает окно инвентаря после первого полученного при входе ItemList и ждет потом только список измененных предметов, а не весь список полностью.
 
Последнее редактирование:
Назад
Сверху Снизу