Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
как знаешьПожалуй необходимость уже отпала, задачка получилось весьма интересная. Сначала решил попробовать пакетку Артеи на эпизод натянуть (как с NpcInfo), но не получилось. В ход пошел гугл, известные форумы, разработки других людей, но тоже успехом не увенчалось. Протокол кстати 583, возможно и под более ранний протокол и подошли бы решения которые я нашел, но легких путей мы не ищем. В шаре ничего нет, снифа нет, в ход пошел тупой перебор значений. В разные места пакета добавлял writeC(0x00) для верности смещения блоков в нужные места, дабы данные которые известны хоть как то отобразились. Сказать что это адовая работа, не сказать ничего, клиент критовал раз 60, а критовал он 1 раз из 5, но в итоге за 5 часов структуру подобрал почти полностью, даже аура Фестиваля Хаоса отображается)) Это конец пакета как раз, т.е. суммарно байты выставлены везде почти верно, за исключением некоторых мест.
Так я ее и смотрел, там не то, да посмотреть хроники хорошо, но не играбельнокак знаешь
поищи awakendev эпизодку, вроде недавно зашарили, там по пакетной части не мало сделано, и делалось в момент когда эпизодка была на оффах и можно было снифать нормально
п.с. если не найдешь, пиши в лс, скину
понятное дело что механизмы игры там практически не реализованыТак я ее и смотрел, там не то, да посмотреть хроники хорошо, но не играбельно
Я про пакетку, 30% значений точно нету, а то и больше. Структура есть но с ноликами.понятное дело что механизмы игры там практически не реализованы
ну, а где ты возьмешь все готовоеЯ про пакетку, 30% значений точно нету, а то и больше. Структура есть но с ноликами.
На зг тоже мало, та нигде не возьмешь, что не найду буду подбирать руками как в случае с CharInfo -ну, а где ты возьмешь все готовое
на ЗГ можно посмотреть, там частично была расписана структура некоторых пакетов
даа, подбирать структуру руками...это конечно горячкаЗачем руками? Делаем дамп и смотрим
К сожалению, у меня уже не осталось пакетки эпизода, валялась на ноуте и куда-то деласьну, а где ты возьмешь все готовое
на ЗГ можно посмотреть, там частично была расписана структура некоторых пакетов
так же можешь обратиться к пользователю elastic, если память не изменяет, то у него могут быть всякие мелочи
у меня остались некоторые пакеты, которые ты мне еще давненько сбрасывал, 575 протокола, если не против, могу залитьК сожалению, у меня уже не осталось пакетки эпизода, валялась на ноуте и куда-то делась
CharInfo я разбирал сам, сравнивая по дампу. Остальные пакеты не сильно отличаются от эртеи.
@Override
protected final void writeImpl()
{
boolean gmSeeInvis = false;
if(_invisible)
{
L2PcInstance tmp = getClient().getActiveChar();
if(tmp != null && tmp.isGM())
{
gmSeeInvis = false;
}
}
writeD(_x);
writeD(_y);
writeD(_z);
writeD(_vehicleId);
writeD(_objId);
writeS(_activeChar.getAppearance().getVisibleName());
writeH(customRace);
writeC(_activeChar.getAppearance().getSex() ? 1 : 0);
writeD(customClass);
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_UNDER));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CLOAK));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR2));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RBRACELET));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LBRACELET));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO1));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO2));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO3));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO4));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO5));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO6));
writeD(0x00);
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_UNDER));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_HEAD));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LHAND));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_GLOVES));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_CHEST));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LEGS));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_FEET));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_CLOAK));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_HAIR));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_HAIR2));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_RBRACELET));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LBRACELET));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO1));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO2));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO3));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO4));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO5));
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO6));
writeD(0x00);
writeC(0x00);
writeC(0x00);
writeC(0x00); // ARMOR ENCHANT
writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_RHAND));
writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_LHAND));
writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_RHAND));
writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_GLOVES));
writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_CHEST));
writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_LEGS));
writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_FEET));
writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_HAIR));
writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_HAIR2));
writeC(_activeChar.getPvPFlagController().getStateValue());
writeD(_activeChar.getReputation());
writeD(_mAtkSpd);
writeD(_pAtkSpd);
writeD(0x00);
writeH(_runSpd);
writeH(_walkSpd);
writeH(_runSpd);
writeH(_walkSpd);
writeH(_runSpd);
writeH(_walkSpd);
writeH(_runSpd);
writeH(_walkSpd);
writeF(_activeChar.getMovementSpeedMultiplier());
writeF(_activeChar.getAttackSpeedMultiplier());
writeF(collisionRadius);
writeF(collisionHeight);
writeD(_activeChar.getAppearance().getHairStyle());
writeD(_activeChar.getAppearance().getHairColor());
writeD(_activeChar.getAppearance().getFace());
writeS(gmSeeInvis ? "[Невидимый]" : _activeChar.getAppearance().getVisibleTitle());
if(!_activeChar.isCursedWeaponEquipped() && !_activeChar.isHideInfo() && !_activeChar.isInEvent())
{
writeD(_activeChar.getClanId());
writeD(_activeChar.getClanCrestId());
writeD(_activeChar.getAllyId());
writeD(_activeChar.getAllyCrestId());
}
else
{
writeD(0);
writeD(0);
writeD(0);
writeD(0);
}
writeC(_activeChar.isSitting() ? 0 : 1);
writeC(_activeChar.isRunning() ? 1 : 0);
writeC(_activeChar.isInCombat() ? 1 : 0);
writeC(!_activeChar.getOlympiadController().isParticipating() && _activeChar.isAlikeDead() ? 1 : 0);
writeC(!gmSeeInvis && _invisible ? 1 : 0);
writeC(_activeChar.getMountType());
writeC(_activeChar.getPrivateStoreType().ordinal());
writeH(_activeChar.getCubics().size());
for(L2CubicInstance cubic : _activeChar.getCubics())
{
writeH(cubic.getId());
}
writeC(_activeChar.isInPartyMatchRoom() ? 1 : 0);
writeC(_activeChar.isFlyingMounted() ? 2 : 0);
writeH(_activeChar.isInEvent() ? 0 : _activeChar.getRecommendations());
writeD(_activeChar.getMountNpcId() + 1000000);
writeD(_activeChar.getClassId().getId());
writeD(0x00);
writeC(_activeChar.isMounted() || _airShipHelm != 0 ? 0 : _activeChar.getEnchantEffect());
writeC(_activeChar.getTeam().ordinal());
writeD(_activeChar.getClanCrestLargeId());
writeC(_activeChar.isNoble() ? 1 : 0);
writeC(!_activeChar.isInEvent() && (_activeChar.getOlympiadController().isHero() || _activeChar.isFakeHero() || (_activeChar.isGM() && Config.GM_HERO_AURA)) ? 1 : 0); // Hero Aura
writeC(_activeChar.isFishing() ? 1 : 0);
writeD(_activeChar.getFishx());
writeD(_activeChar.getFishy());
writeD(_activeChar.getFishz());
writeD(_activeChar.isInEvent() ? PcAppearance.DEFAULT_NAME_COLOR : _activeChar.getAppearance().getNameColor());
writeD(_heading);
writeC(_activeChar.getPledgeClass());
writeH(_activeChar.getPledgeType());
writeD(_activeChar.isInEvent() ? PcAppearance.DEFAULT_TITLE_COLOR : _activeChar.getAppearance().getTitleColor());
writeC(_activeChar.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquippedId()) : 0);
writeD(_activeChar.getClanId() > 0 ? _activeChar.getClan().getReputationScore() : 0);
writeD(_activeChar.getTransformationId());
writeD(_activeChar.isInEvent() ? 0 : _activeChar.getAgathionId());
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD((int) _activeChar.getCurrentCp());
writeD(_curHp);
writeD(_maxHp);
writeD((int) _activeChar.getCurrentMp());
writeD(_activeChar.getMaxMp());
writeD(0x00);
FastSet<Integer> abnormals = _activeChar.getAbnormalEffects();
if(!abnormals.isEmpty())
{
writeD(abnormals.size());
for(int abnormalId : abnormals)
{
writeH(abnormalId);
}
}
else
{
writeD(AbnormalEffect.NULL.getMask());
}
writeC(_activeChar.isInEvent() ? 1 : isFestivalHero ? 100 : 0);
writeC(0x01); // хайд урашений (1 - показывать 0 - нет)
}
c пивком покатитЧёрт, не смотрите туда! Там грязь и ужас...