Сообщений: 202
Тем: 2
Зарегистрирован: Jun 2008
Репутация:
783
Оффтоп
Bacek Написал:Что то на вас не похоже чтоб чем то делились.
Давайте без лицемерия
Сообщений: 527
Тем: 17
Зарегистрирован: Oct 2010
Репутация:
1,919
BoneBreaker Написал:А вместо CharInfo что идёт оО?
Engine - http://rghost.ru/51030918
CharInfo как был так и остался, он в клиенте называется CIPacket.
Сообщений: 102
Тем: 6
Зарегистрирован: Jun 2012
Репутация:
116
12-17-2013, 11:12 PM
(Сообщение последний раз редактировалось: 12-18-2013, 01:19 AM BoneBreaker.)
Mifesto Написал:CharInfo как был так и остался, он в клиенте называется CIPacket.
Хм, я думал он не используется больше.
Добавлено через 2 часа 7 минут
С CharInfo разобрался, не критует.
Такой вопрос, что сталось с ItemInfo?
Структуру нашёл, переделал, в лобби при выборе всё хорошо, в игре у оружия заточка сразу светится.
И еще, если не надет верхний доспех, то остальные части не отображаются.
из L2GameServerPacket
Код: protected void writeItemInfo(ItemInstance item)
{
writeItemInfo(item, item.getCount());
}
protected void writeItemInfo(ItemInstance item, long count)
{
// dddQhhhdhhhhddhhhhhhhhhhhhd
writeD(item.getObjectId());
writeD(item.getItemId());
writeC(item.getEquipSlot());
writeQ(count);
writeC(item.getTemplate().getType2ForPackets());
writeC(item.getCustomType1());
writeC(item.isEquipped() ? 1 : 0);
writeC(item.getCustomType2());
writeQ(item.getBodyPart());
writeH(item.getEnchantLevel());
writeH(item.getAugmentationId());
writeH(item.getAugmentationId());
writeD(item.getShadowLifeTime());
writeD(item.getTemporalLifeTime());
writeC(0x01); // L2WT GOD
writeH(item.getAttackElement().getId());
writeH(item.getAttackElementValue());
writeH(item.getDefenceFire());
writeH(item.getDefenceWater());
writeH(item.getDefenceWind());
writeH(item.getDefenceEarth());
writeH(item.getDefenceHoly());
writeH(item.getDefenceUnholy());
writeH(item.getEnchantOptions()[0]);
writeH(item.getEnchantOptions()[1]);
writeH(item.getEnchantOptions()[2]);
writeD(item.getVisualId());
}
protected void writeItemInfo(ItemInfo item)
{
writeItemInfo(item, item.getCount());
}
protected void writeItemInfo(ItemInfo item, long count)
{
writeD(item.getObjectId());
writeD(item.getItemId());
writeC(item.getEquipSlot());
writeQ(count);
writeC(item.getItem().getType2ForPackets());
writeC(item.getCustomType1());
writeC(item.isEquipped() ? 1 : 0);
writeC(item.getCustomType2());
writeQ(item.getItem().getBodyPart());
writeH(item.getEnchantLevel());
writeH(item.getAugmentationId());
writeH(item.getAugmentationId());
writeD(item.getShadowLifeTime());
writeD(item.getTemporalLifeTime());
writeC(0x01); // L2WT GOD
writeH(item.getAttackElement());
writeH(item.getAttackElementValue());
writeH(item.getDefenceFire());
writeH(item.getDefenceWater());
writeH(item.getDefenceWind());
writeH(item.getDefenceEarth());
writeH(item.getDefenceHoly());
writeH(item.getDefenceUnholy());
writeH(item.getEnchantOptions()[0]);
writeH(item.getEnchantOptions()[1]);
writeH(item.getEnchantOptions()[2]);
writeD(item.getVisualId());
}
protected void writeItemElements(MultiSellIngredient item)
{
if (item.getItemId() <= 0)
{
writeItemElements();
return;
}
ItemTemplate i = ItemHolder.getInstance().getTemplate(item.getItemId());
if (item.getItemAttributes().getValue() > 0)
{
if (i.isWeapon())
{
Element e = item.getItemAttributes().getElement();
writeH(e.getId()); // attack element (-1 - none)
writeH(item.getItemAttributes().getValue(e) + i.getBaseAttributeValue(e)); // attack element value
writeH(0);
writeH(0);
writeH(0);
writeH(0);
writeH(0);
writeH(0);
}
else if (i.isArmor())
{
writeH(-1); // attack element (-1 - none)
writeH(0); // attack element value
for (Element e : Element.VALUES)
writeH(item.getItemAttributes().getValue(e) + i.getBaseAttributeValue(e));
}
else
writeItemElements();
}
else
writeItemElements();
}
protected void writeInfo(final MultiSellIngredient ingr, final boolean product)
{
final int itemId = ingr.getItemId();
final ItemTemplate template = (itemId > 0) ? ItemHolder.getInstance().getTemplate(ingr.getItemId()) : null;
writeD(itemId);
if(product)
{
writeD((itemId > 0) ? template.getBodyPart() : 0);
}
writeH((itemId > 0) ? template.getType2ForPackets() : 0);
writeQ(ingr.getItemCount());
writeH(ingr.getItemEnchant());
if(product)
{
writeD(ingr.getChance(true));
}
writeAugmentationInfo(ingr);
writeItemElements(ingr);
}
Сообщений: 527
Тем: 17
Зарегистрирован: Oct 2010
Репутация:
1,919
BoneBreaker Написал:Хм, я думал он не используется больше.
Добавлено через 2 часа 7 минут
С CharInfo разобрался, не критует.
Такой вопрос, что сталось с ItemInfo?
Структуру нашёл, переделал, в лобби при выборе всё хорошо, в игре у оружия заточка сразу светится.
И еще, если не надет верхний доспех, то остальные части не отображаются.
За отображение у персонажа отвечает ExUserInfoEquipSlot, за отображение у других персонажуй CharInfo, itemInfo всего лиш записывает инфу в пакеты такие как инвентарь, трэйд и тд.
Сообщений: 102
Тем: 6
Зарегистрирован: Jun 2012
Репутация:
116
Mifesto Написал:За отображение у персонажа отвечает ExUserInfoEquipSlot, за отображение у других персонажуй CharInfo, itemInfo всего лиш записывает инфу в пакеты такие как инвентарь, трэйд и тд.
ну даже если брать ExUserInfoEquipSlot.
Код: _inv = new int[Inventory.PAPERDOLL_MAX][5];
for(int PAPERDOLL_ID : Inventory.PAPERDOLL_ORDER)
{
_inv[PAPERDOLL_ID][0] = player.getInventory().getPaperdollObjectId(PAPERDOLL_ID);
_inv[PAPERDOLL_ID][1] = player.getInventory().getPaperdollItemId(PAPERDOLL_ID);
_inv[PAPERDOLL_ID][2] = player.getInventory().getPaperdollAugmentationId(PAPERDOLL_ID);
_inv[PAPERDOLL_ID][3] = player.getInventory().getPaperdollAugmentationId(PAPERDOLL_ID);
_inv[PAPERDOLL_ID][4] = player.getInventory().getVisualItemId(PAPERDOLL_ID);
}
Код: writeB(new byte[]{(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF});
writeH(18);
for(int[] inv : _inv)
{
writeD(inv[0]);
writeD(inv[1]);
writeH(inv[2]);
writeH(inv[3]);
writeD(inv[4]);
writeH(18);
}
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
Брошь и 6 камушков для порядка добавил.
Сообщений: 527
Тем: 17
Зарегистрирован: Oct 2010
Репутация:
1,919
очень интересно сформировали пакет=)
у меня получается так:
<part name="objectId" type="d"/>
<part name="size" type="h" id="0"/>
<part name="Неизвестно" type="c"/>
<part name="Неизвестно" type="c"/>
<part name="Неизвестно" type="c"/>
<part name="Неизвестно" type="c"/>
<part name="Неизвестно" type="c"/>
<for id="0">
<part name="block_size" type="h"/>
<part name="objectId" type="d"/>
<part name="itemId" type="d"/>
<part name="Неизвестно" type="d"/>
<part name="Неизвестно" type="d"/>
</for>
не знаю верные ли последние 2 D, так как разбираю пока просто протокол, без тестов, но зачем ставить размер блока в конец? Ведь размер блока перед записью идет.
Сообщений: 102
Тем: 6
Зарегистрирован: Jun 2012
Репутация:
116
Mifesto Написал:очень интересно сформировали пакет=)
у меня получается так:
<part name="objectId" type="d"/>
<part name="size" type="h" id="0"/>
<part name="Неизвестно" type="c"/>
<part name="Неизвестно" type="c"/>
<part name="Неизвестно" type="c"/>
<part name="Неизвестно" type="c"/>
<part name="Неизвестно" type="c"/>
<for id="0">
<part name="block_size" type="h"/>
<part name="objectId" type="d"/>
<part name="itemId" type="d"/>
<part name="Неизвестно" type="d"/>
<part name="Неизвестно" type="d"/>
</for>
не знаю верные ли последние 2 D, так как разбираю пока просто протокол, без тестов, но зачем ставить размер блока в конец? Ведь размер блока перед записью идет.
Ну про последние 2D, там в любом случае одна, по идее, - визуальный ID после обработки.
Ан не, со свечением разобрался, это в ExUserInfo накосячил
Сообщений: 527
Тем: 17
Зарегистрирован: Oct 2010
Репутация:
1,919
это понятно, просто для аргументации если не ошибаюсь хватит и short, так же для заточки, вот можно Дшку и разделить так, а вообще буду потом эксперементировать... Сей час главное правильную работу UserInfo и NpcInfo разобрать, так как тут эти чертовы флаги.
Сообщений: 102
Тем: 6
Зарегистрирован: Jun 2012
Репутация:
116
12-18-2013, 08:05 AM
(Сообщение последний раз редактировалось: 12-18-2013, 10:32 AM BoneBreaker.)
С UserInfo я вроде доразобрался, а вот с Npc застопорился.
получилось как то так, но это бредятина
Код: D - obj
C - unk
H - кол-во блоков
C
C
C
C
C
C - блок с титулом
C - isAtack
D unk
S - title
H - unk
H - block
D - npcId
D - x
D - y
D - z
D - h
D - unk
D - matkspd
D - patkspd
F
F
C - nameAbove
C - run
C - combat
C - dead
C - spawn
C - unk
C - unk
D - unk
D - hp
D - mp
C - unk
H - unk
А вот кстати с визуальным одеванием сета трабла неясна.
Сообщений: 202
Тем: 2
Зарегистрирован: Jun 2008
Репутация:
783
BoneBreaker Написал:С UserInfo я вроде доразобрался, а вот с Npc застопорился.
получилось как то так, но это бредятина
Код: D - obj
C - unk
H - кол-во блоков
C
C
C
C
C
C - блок с титулом
C - isAtack
D unk
S - title
H - unk
H - block
D - npcId
D - x
D - y
D - z
D - h
D - unk
D - matkspd
D - patkspd
F
F
C - nameAbove
C - run
C - combat
C - dead
C - spawn
C - unk
C - unk
D - unk
D - hp
D - mp
C - unk
H - unk
А вот кстати с визуальным одеванием сета трабла неясна.
Пока то что мне удалось разобрать... Надеюсь поможет.
Код: writeEx(0x167);
writeD(_npcObjId);
writeC(0x00); // UNK
writeH(37);
writeB(new byte[]{(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF});
writeC(7 + _title.length() * 2);
writeC(_isAttackable ? 1 : 0);
writeD(0x00); // UNK
writeCutS(_title);
writeH(0x00); // UNK
if(_isLoading)
{
writeH(143);
writeD(_npcId + 1000000); // npctype id c4
writeD(_loc.x);
writeD(_loc.y);
writeD(_loc.z + Config.CLIENT_Z_SHIFT);
writeD(_loc.h);
writeD(0x00); //UNK
writeD(_mAtkSpd);
writeD(_pAtkSpd);
writeF(_runSpdMul);
writeF(_atkSpdMul);
writeC(dead);
writeC(running);
writeC(isFlying ? 2 : 0); // C2
writeC(isFlying ? 1 : 0); // C2
// Неизвестный формат. Забываем длину пакета. START
writeD(0x01); //UNK
writeD(0x00); //UNK
writeD(0x00); //UNK
writeD(0x00); //UNK
writeD(0x00); //UNK
writeD(0x00); //UNK
writeD(0x00); //UNK
// Неизвестный формат. Забываем длину пакета. END
writeD(_currentHP);
writeD(_currentMP);
writeD(_maxHP);
writeD(_maxMP);
// Далее идет еще 47 неизвестных байт.
}
А что с одеванием сета не ясно?
|