| 
		
	
	
	
		
	Сообщений: 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 - objC - 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 - objC - 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 неизвестных байт.
 }
А что с одеванием сета не ясно?
	 |