Jump to content
  • 0

Inventroy slot problem (Vanganth)


Question

Posted

Hey any one knew this slot_bit_type ?             {back} not                                    slot.png.1831b46dc30822c33ddf7758950856e1.png

 

          here you got types slots i think this slot it's hairall but its same like hair slot So its hairall / back or hairex but this all slots don't working maybe some one knoe how this working?                                              

 

                                                                                                                             sor.png.b6bbaa222be5f733bb89d6db3ae15865.png

Recommended Posts

  • 0
Posted
17 hours ago, Nevermind25 said:

In my knowledge in both slots must be the same item, back slot does not exist for interlude, just hair/hairall and underwear. 

If you think, you cant put at the same time a hat and a noblesse tiara, or party mask 

I did it, so don't say you can't. Regards.

  • 0
Posted

File CharInfo.cpp CPacketFix::CharinfoBCfix, CPacketFix::CharInfoFix 

/* d */ Packet.WriteD(BaseClass);

		INT32 dhairId = va_arg(tag, INT32);
		INT32 headId = va_arg(tag, INT32);
		INT32 rhandId = va_arg(tag, INT32);
		INT32 lhandId = va_arg(tag, INT32);
		INT32 glovesId = va_arg(tag, INT32);
		INT32 chestId = va_arg(tag, INT32);
		INT32 legsId = va_arg(tag, INT32);
		INT32 feetId = va_arg(tag, INT32);
		INT32 backId = va_arg(tag, INT32);
		INT32 lrhandId = va_arg(tag, INT32);
		INT32 hairId = va_arg(tag, INT32);
		INT32 faceId = 0;	//interlude addon
		//removed visualarmor
/* d */ Packet.WriteD(dhairId);	//dhair
/* d */ Packet.WriteD(headId);	//head
/* d */ Packet.WriteD(rhandId);	//rhand
/* d */ Packet.WriteD(lhandId);	//lhand
/* d */ Packet.WriteD(glovesId);	//gloves
/* d */ Packet.WriteD(chestId);	//chest
/* d */ Packet.WriteD(legsId);	//legs
/* d */ Packet.WriteD(feetId);	//feet
/* d */ Packet.WriteD(backId);	//back
/* d */ Packet.WriteD(lrhandId);	//lrhand
/* d */ Packet.WriteD(hairId);	//hair
/* d */ Packet.WriteD(faceId); //Face slot

In the file Userinfo.cpp  seems to be the same code but with CPacketFix::UserInfoFix and CPacketFix::GMUserInfoFix

 

/* d */ Packet.WriteD(BaseClass);

		INT32 dhairId = va_arg(tag, INT32);
		INT32 headId = va_arg(tag, INT32);
		INT32 rhandId = va_arg(tag, INT32);
		INT32 lhandId = va_arg(tag, INT32);
		INT32 glovesId = va_arg(tag, INT32);
		INT32 chestId = va_arg(tag, INT32);
		INT32 legsId = va_arg(tag, INT32);
		INT32 feetId = va_arg(tag, INT32);
		INT32 backId = va_arg(tag, INT32);
		INT32 lrhandId = va_arg(tag, INT32);
		INT32 hairId = va_arg(tag, INT32);
		INT32 faceId = 0;	//interlude addon 
		//visualarmor removed
/* d */ Packet.WriteD(dhairId);	//dhair
/* d */ Packet.WriteD(headId);	//head
/* d */ Packet.WriteD(rhandId);	//rhand
/* d */ Packet.WriteD(lhandId);	//lhand
/* d */ Packet.WriteD(glovesId);	//gloves
/* d */ Packet.WriteD(chestId);	//chest
/* d */ Packet.WriteD(legsId);	//legs
/* d */ Packet.WriteD(feetId);	//feet
/* d */ Packet.WriteD(backId);	//back
/* d */ Packet.WriteD(lrhandId);	//lrhand
/* d */ Packet.WriteD(hairId);	//hair
/* d */ Packet.WriteD(faceId); //Face slot

 

Someone can help to fix this? 

  • 0
Posted

Take L2PHX and sniff CharInfo packet from L2OFF and L2J servers. You need equip problem item to char slots and you will find diffs in your sending info. In depending from result you will see where you get wrong ID by Inventory slot mask.

  • Upvote 1
  • 0
Posted

fix

#include "StdAfx.h"
#include "Packets.h"

int InventoryUpdateFix(PCHAR buf, int bufLen, CItem *pItem, WORD UpdateType, WORD ItemType, DWORD ObjectID, DWORD ItemID, DWORD Count, WORD ItemType2, WORD CustomType1, WORD IsEquiped, DWORD BodyPart, WORD EnchantLevel, WORD CustomType2)
{
	// Old FMT:			 "hhdddhhhdhh"
	const char *format = "hhdddhhhdhhdd"; //New IL Format
	DWORD AugmentationID = 0;
	DWORD Mana = 0;
//	DWORD itemId = 0;
//	DWORD SlotType = 0;
	if(pItem->IsValidItem())
	{
		AugmentationID = pItem->nAugmentationID;
		Mana = pItem->nManaLeft/60;

//		SlotType = pItem->pSID->nSlotType;
//		itemId = pItem->pSID->nItemID;
//		g_Log.Add(CLog::Error, "----InventoryUpdateFix----");
//		g_Log.Add(CLog::Error, "nItemId: [%d] nItemType[%d]",itemId,SlotType  );
//		g_Log.Add(CLog::Error, "UpdateType: [%d] ItemType2[%d] CustomType1[%d] BodyPart[%d] CustomType2[%d]",UpdateType,ItemType2,CustomType1,BodyPart,CustomType2  );
//		g_Log.Add(CLog::Error, "--------------------------");

+		if (BodyPart ==1)
+			BodyPart = 262144;

	}
	return Assemble(buf, bufLen, format, UpdateType, ItemType, ObjectID, ItemID, Count, ItemType2
		,CustomType1, IsEquiped, BodyPart, EnchantLevel, CustomType2, AugmentationID, Mana);
}

 

  • 0
Posted
7 hours ago, guytis said:

fix


#include "StdAfx.h"
#include "Packets.h"

int InventoryUpdateFix(PCHAR buf, int bufLen, CItem *pItem, WORD UpdateType, WORD ItemType, DWORD ObjectID, DWORD ItemID, DWORD Count, WORD ItemType2, WORD CustomType1, WORD IsEquiped, DWORD BodyPart, WORD EnchantLevel, WORD CustomType2)
{
	// Old FMT:			 "hhdddhhhdhh"
	const char *format = "hhdddhhhdhhdd"; //New IL Format
	DWORD AugmentationID = 0;
	DWORD Mana = 0;
//	DWORD itemId = 0;
//	DWORD SlotType = 0;
	if(pItem->IsValidItem())
	{
		AugmentationID = pItem->nAugmentationID;
		Mana = pItem->nManaLeft/60;

//		SlotType = pItem->pSID->nSlotType;
//		itemId = pItem->pSID->nItemID;
//		g_Log.Add(CLog::Error, "----InventoryUpdateFix----");
//		g_Log.Add(CLog::Error, "nItemId: [%d] nItemType[%d]",itemId,SlotType  );
//		g_Log.Add(CLog::Error, "UpdateType: [%d] ItemType2[%d] CustomType1[%d] BodyPart[%d] CustomType2[%d]",UpdateType,ItemType2,CustomType1,BodyPart,CustomType2  );
//		g_Log.Add(CLog::Error, "--------------------------");

+		if (BodyPart ==1)
+			BodyPart = 262144;

	}
	return Assemble(buf, bufLen, format, UpdateType, ItemType, ObjectID, ItemID, Count, ItemType2
		,CustomType1, IsEquiped, BodyPart, EnchantLevel, CustomType2, AugmentationID, Mana);
}

 

awesome, i would delayed a entire month xD

  • 0
Posted
6 hours ago, Nevermind25 said:

@guytis   en ItemList.cpp es lo mismo? Creo que sí, pero tú eres el sabio

 

yes yes

 

 

int ItemListFix(PCHAR buf, int bufLen, CItem *pItem, WORD ItemType, DWORD ObjectID, DWORD ItemID, DWORD Count, WORD ItemType2, WORD CustomType1, WORD IsEquiped, DWORD BodyPart, WORD EnchantLevel, WORD CustomType2)
{
	//Old FMT:			 "hdddhhhdhh"
	const char *format = "hdddhhhdhhdd"; //New IL Format
						 
	DWORD AugmentationID = 0;
	DWORD Mana = 0;
//	DWORD itemId = 0;
//	DWORD SlotType = 0;
	if(pItem->IsValidItem())
	{
		AugmentationID = pItem->nAugmentationID;
		Mana = pItem->nManaLeft / 60;

//		SlotType = pItem->pSID->nSlotType;
//		itemId = pItem->pSID->nItemID;
//		g_Log.Add(CLog::Error, "---------ItemListFix------");
//		g_Log.Add(CLog::Error, "nItemId: [%d] nItemType[%d]",itemId,SlotType  );
//		g_Log.Add(CLog::Error, "ItemType: [%d] ItemType2[%d] CustomType1[%d] BodyPart[%d] CustomType2[%d]",ItemType,ItemType2,CustomType1,BodyPart,CustomType2  );
//		g_Log.Add(CLog::Error, "---------------------------");

		if (BodyPart ==1)
			BodyPart = 262144;
	}
	return Assemble(buf, bufLen, format, ItemType, ObjectID, ItemID, Count, ItemType2
		,CustomType1, IsEquiped, BodyPart, EnchantLevel, CustomType2, AugmentationID, Mana);
}

 

  • Upvote 1
  • 0
Posted
On 9/28/2019 at 8:10 AM, guytis said:

 

yes yes

 

 


int ItemListFix(PCHAR buf, int bufLen, CItem *pItem, WORD ItemType, DWORD ObjectID, DWORD ItemID, DWORD Count, WORD ItemType2, WORD CustomType1, WORD IsEquiped, DWORD BodyPart, WORD EnchantLevel, WORD CustomType2)
{
	//Old FMT:			 "hdddhhhdhh"
	const char *format = "hdddhhhdhhdd"; //New IL Format
						 
	DWORD AugmentationID = 0;
	DWORD Mana = 0;
//	DWORD itemId = 0;
//	DWORD SlotType = 0;
	if(pItem->IsValidItem())
	{
		AugmentationID = pItem->nAugmentationID;
		Mana = pItem->nManaLeft / 60;

//		SlotType = pItem->pSID->nSlotType;
//		itemId = pItem->pSID->nItemID;
//		g_Log.Add(CLog::Error, "---------ItemListFix------");
//		g_Log.Add(CLog::Error, "nItemId: [%d] nItemType[%d]",itemId,SlotType  );
//		g_Log.Add(CLog::Error, "ItemType: [%d] ItemType2[%d] CustomType1[%d] BodyPart[%d] CustomType2[%d]",ItemType,ItemType2,CustomType1,BodyPart,CustomType2  );
//		g_Log.Add(CLog::Error, "---------------------------");

		if (BodyPart ==1)
			BodyPart = 262144;
	}
	return Assemble(buf, bufLen, format, ItemType, ObjectID, ItemID, Count, ItemType2
		,CustomType1, IsEquiped, BodyPart, EnchantLevel, CustomType2, AugmentationID, Mana);
}

 

 

you rly did a great job..thx man.

  • 0
Posted

here still have a error, some items in c6 are hairall and must use the two slots (circlets, hats) and some other uses 1 slot and it suposes that you can equip for example a rabbit ear an a eye patch, this fix is good, if i find the way to make the other i'll paste here the code

  • 0
Posted

When adding the fix, what would be the method that should be used in the type of itemdata, because I tested and is using underwear type, but that would not be correct. Because this item is next to the necklace.

  • 0
Posted
15 hours ago, xPeNaChO said:

When adding the fix, what would be the method that should be used in the type of itemdata, because I tested and is using underwear type, but that would not be correct. Because this item is next to the necklace.

anyway, the fix is good

 

the correct position is this. 

 

[hair] [helmet] [hair2] [underwear] [necklace]

================== 

[hairall] [helmet] [hairall] [underwear] [necklace]

 

Some interlude has the {back} slot? in this case the back is used like c4 

  • 0
Posted

A sua adaptação foi super boa, mas ainda não passou de uma gambiarra .. precisa ser feita, mas algumas coisas fica oculta após ser gerada algum erro no código .. 

 

mass parabéns caminho tá certo :thumbs-up:

Guest
This topic is now closed to further replies.

×
×
  • Create New...