Посмотрите видео ниже, чтобы узнать, как установить наш сайт в виде веб-приложения на главном экране.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Типо слать обнову инвентаря при лвл апе, получении скила и тд?но если как ты пишешь что после релога все норм, я бы копал в сторону обновления инвентаря
ну у нас вообще реализовано при каких то действияхТипо слать обнову инвентаря при лвл апе, получении скила и тд?
Все равно не понимаю, при чем здесь сервер, если клиент блокирует предмет.ну у нас вообще реализовано при каких то действиях
Но мы в кэше с этим работаем
Ну если есть исходы начни с отладки, глянь что в классах передается
item.isBlocked()
возвращал false
packetWriter.writeD(item.getShadowLifeTime());
packetWriter.writeD(item.getTemporalLifeTime());
packetWriter.writeC(!item.isBlocked());
packetWriter.writeH(item.isLocked()); // 140 PROTOCOL
if (containsMask(flags, ItemListType.IS_AUGMENTED))
Condition
- и запретить их парсить.Ну за клиент не подскажу, у нас на стороне сервера реализовано это.Все равно не понимаю, при чем здесь сервер, если клиент блокирует предмет.
Ну типо, по факту условия, при попытке одеть предмет, должно отсылаться сообщение об этом, но как только иконка предмета становится красная, жми по итему, не жми, побоку вообще. Выполняем условие, к примеру у итема ограничение по лвлу, одевается и все такое, снижаем лвл, чтобы не подходил под условие, предмет в инвентаре не красный, жмешь на него, и вылетает сообщение, что условия не соблюдены, делаешь релог, предмет красный.
вобще-то это сервер блочит, в блоках инфы о предмете, в пакетах ItemList, InventoryUpdate и т.п.Все равно не понимаю, при чем здесь сервер, если клиент блокирует предмет.
protected void writeItem(ItemInfo item, long count, int mask)
{
writeH(mask);
writeD(item.getObjectId());
writeD(item.getTemplate().getId());
writeC(item.getEquipSlot());
writeQ(count);
writeC(item.getTemplate().getType2ForPackets());
writeC(item.getCustomType1());
writeH(item.isEquipped());
writeQ(item.getTemplate().getBodyPart());
writeH(item.getEnchantLevel()); // уровень заточки (уровень пета, если это предмет для его призыва)
writeC(item.getCustomType2()); // 0 - пет с стандартным именем (имя NPC), 1 - пет с именем, заданным игроком
writeD(item.getRemainingDurationTime());
writeD(item.getAppearanceId() == 0 ? item.getRemainingPeriodTime() : item.getAppearanceTimeForPackets()); // оставшееся время жизни для временного предмета/временной внешки
writeC(item.isUseable()); // <=== блок предмета на использование (красная иконка)
writeH(item.isLocked()); // <=== блок действий, которые могут уничтожить предмет или поменять его состояние (значок замка на иконке)
if (containsMask(mask, ItemListType.AUGMENTATION_OPTIONS))
writeItemAugment(item);
if (containsMask(mask, ItemListType.ELEMENTAL_ATTRIBUTE))
writeItemElemental(item);
if (containsMask(mask, ItemListType.ENCHANT_OPTIONS))
writeItemEnchantEffect(item);
if (containsMask(mask, ItemListType.APPEARANCE))
writeD(item.getAppearanceId());
if (containsMask(mask, ItemListType.ENSOUL_OPTIONS))
writeItemEnsoulOptions(item);
if (containsMask(mask, ItemListType.USE_COUNT))
writeH(item.getCurrentUseCount());
if (containsMask(mask, ItemListType.REUSE_DELAY))
writeD(item.getCurrentReuse());
if (containsMask(mask, ItemListType.PET_DATA))
writePetData(item);
if (containsMask(mask, ItemListType.BLESS_OPTION))
writeC(1);
}