diff --git a/src/game/ItemHandler.cpp b/src/game/ItemHandler.cpp index 57c8a7160..659421344 100644 --- a/src/game/ItemHandler.cpp +++ b/src/game/ItemHandler.cpp @@ -322,7 +322,7 @@ void WorldSession::HandleItemQuerySingleOpcode( WorldPacket & recv_data ) data << pProto->ItemId; data << pProto->Class; data << pProto->SubClass; - data << pProto->Unk0; // new 2.0.3, not exist in wdb cache? + data << int32(pProto->Unk0); // new 2.0.3, not exist in wdb cache? data << Name; data << uint8(0x00); //pProto->Name2; // blizz not send name there, just uint8(0x00); <-- \0 = empty string = empty name... data << uint8(0x00); //pProto->Name3; // blizz not send name there, just uint8(0x00); diff --git a/src/game/ItemPrototype.h b/src/game/ItemPrototype.h index a83456f68..a62380833 100644 --- a/src/game/ItemPrototype.h +++ b/src/game/ItemPrototype.h @@ -489,7 +489,7 @@ struct ItemPrototype uint32 ItemId; uint32 Class; // id from ItemClass.dbc uint32 SubClass; // id from ItemSubClass.dbc - uint32 Unk0; + int32 Unk0; char* Name1; uint32 DisplayInfoID; // id from ItemDisplayInfo.dbc uint32 Quality; @@ -535,7 +535,7 @@ struct ItemPrototype uint32 PageMaterial; uint32 StartQuest; // id from QuestCache.wdb uint32 LockID; - int32 Material; // id from Material.dbc + int32 Material; // id from Material.dbc uint32 Sheath; uint32 RandomProperty; // id from ItemRandomProperties.dbc uint32 RandomSuffix; // id from ItemRandomSuffix.dbc diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 7387d8736..2bc096ccf 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -1598,18 +1598,23 @@ void ObjectMgr::LoadItemPrototypes() if(dbcitem) { - /* disabled: have some strange wrong cases for Class/Subclass values. - for enable also uncomment Class/Sublcas fields in ItemEntry structure and in Itemfmt[] - if(proto->Class != dbcitem->Class || proto->SubClass != dbcitem->SubClass) + if(proto->Class != dbcitem->Class) + { + sLog.outErrorDb("Item (Entry: %u) not correct ñlass %u, must be %u (still using DB value).",i,proto->Class,dbcitem->Class); + // It safe let use Class from DB + } + /* disabled: have some strange wrong cases for Subclass values. + for enable also uncomment Subclass field in ItemEntry structure and in Itemfmt[] + if(proto->SubClass != dbcitem->SubClass) { sLog.outErrorDb("Item (Entry: %u) not correct (Class: %u, Sub: %u) pair, must be (Class: %u, Sub: %u) (still using DB value).",i,proto->Class,proto->SubClass,dbcitem->Class,dbcitem->SubClass); - // It safe let use Class/Subclass from DB + // It safe let use Subclass from DB } */ if(proto->Unk0 != dbcitem->Unk0) { - sLog.outErrorDb("Item (Entry: %u) not correct %u Unk0, must be %u (still using DB value).",i,proto->Unk0,dbcitem->Unk0); + sLog.outErrorDb("Item (Entry: %u) not correct %i Unk0, must be %i (still using DB value).",i,proto->Unk0,dbcitem->Unk0); // It safe let use Unk0 from DB } diff --git a/src/shared/Database/DBCStructure.h b/src/shared/Database/DBCStructure.h index 6e4170d6f..b1997cd48 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/shared/Database/DBCStructure.h @@ -809,9 +809,9 @@ struct GtRegenMPPerSptEntry struct ItemEntry { uint32 ID; // 0 - //uint32 Class; // 1 - //uint32 SubClass; // 2 - uint32 Unk0; // 3 + uint32 Class; // 1 + //uint32 SubClass; // 2 some items have strnage subclasses + int32 Unk0; // 3 int32 Material; // 4 uint32 DisplayId; // 5 uint32 InventoryType; // 6 diff --git a/src/shared/Database/DBCfmt.cpp b/src/shared/Database/DBCfmt.cpp index a646ef41f..92f725ac0 100644 --- a/src/shared/Database/DBCfmt.cpp +++ b/src/shared/Database/DBCfmt.cpp @@ -51,7 +51,7 @@ const char GtOCTRegenHPfmt[]="f"; //const char GtOCTRegenMPfmt[]="f"; const char GtRegenHPPerSptfmt[]="f"; const char GtRegenMPPerSptfmt[]="f"; -const char Itemfmt[]="nxxiiiii"; +const char Itemfmt[]="nixiiiii"; //const char ItemDisplayTemplateEntryfmt[]="nxxxxxxxxxxixxxxxxxxxxx"; //const char ItemCondExtCostsEntryfmt[]="xiii"; const char ItemExtendedCostEntryfmt[]="niiiiiiiiiiiiix";