From cbd864f65ca941f952082b2c14a214df93796d4f Mon Sep 17 00:00:00 2001 From: BThallid Date: Thu, 6 May 2010 09:47:30 -0500 Subject: [PATCH] Update ItemQuerySingleResponseOpcode to 3.3.3a. --- src/Client/DefScriptInterface.cpp | 3 ++- src/Client/World/CacheHandler.cpp | 14 ++++++-------- src/Client/World/Item.cpp | 21 ++++++++++++++------- src/Client/World/Item.h | 18 +++++++++++------- 4 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/Client/DefScriptInterface.cpp b/src/Client/DefScriptInterface.cpp index 28d920f..a0ad102 100644 --- a/src/Client/DefScriptInterface.cpp +++ b/src/Client/DefScriptInterface.cpp @@ -780,7 +780,8 @@ DefReturnResult DefScriptPackage::SCGetItemProtoValue(CmdSet& Set) else if(t=="lockid") r.ret=toString(proto->LockID); else if(t=="material") r.ret=toString(proto->Material); else if(t=="sheath") r.ret=toString(proto->Sheath); - else if(t=="extra") r.ret=toString(proto->Extra); + else if(t=="randomprop") r.ret=toString(proto->RandomProperty); + else if(t=="randomsuffix") r.ret=toString(proto->RandomSuffix); else if(t=="block") r.ret=toString(proto->Block); else if(t=="itemset") r.ret=toString(proto->ItemSet); else if(t=="maxdur") r.ret=toString(proto->MaxDurability); diff --git a/src/Client/World/CacheHandler.cpp b/src/Client/World/CacheHandler.cpp index 956f6b9..9a7d1b2 100644 --- a/src/Client/World/CacheHandler.cpp +++ b/src/Client/World/CacheHandler.cpp @@ -180,6 +180,7 @@ void ItemProtoCache_InsertDataToSession(WorldSession *session) buf >> proto->DisplayInfoID; buf >> proto->Quality; buf >> proto->Flags; + buf >> proto->Faction; buf >> proto->BuyPrice; buf >> proto->SellPrice; buf >> proto->InventoryType; @@ -240,8 +241,8 @@ void ItemProtoCache_InsertDataToSession(WorldSession *session) buf >> proto->LockID; buf >> proto->Material; buf >> proto->Sheath; - buf >> proto->Extra; - buf >> proto->Unk1; // added in 2.0.3 + buf >> proto->RandomProperty; + buf >> proto->RandomSuffix; // added in 2.0.3 buf >> proto->Block; buf >> proto->ItemSet; buf >> proto->MaxDurability; @@ -256,8 +257,6 @@ void ItemProtoCache_InsertDataToSession(WorldSession *session) } buf >> proto->socketBonus; buf >> proto->GemProperties; - buf >> proto->ExtendedCost; - buf >> proto->RequiredArenaRank; buf >> proto->RequiredDisenchantSkill; buf >> proto->ArmorDamageModifier; buf >> proto->Duration; @@ -315,6 +314,7 @@ void ItemProtoCache_WriteDataToCache(WorldSession *session) buf << proto->DisplayInfoID; buf << proto->Quality; buf << proto->Flags; + buf << proto->Faction; buf << proto->BuyPrice; buf << proto->SellPrice; buf << proto->InventoryType; @@ -375,8 +375,8 @@ void ItemProtoCache_WriteDataToCache(WorldSession *session) buf << proto->LockID; buf << proto->Material; buf << proto->Sheath; - buf << proto->Extra; - buf << proto->Unk1; // added in 2.0.3 + buf << proto->RandomProperty; + buf << proto->RandomSuffix; // added in 2.0.3 buf << proto->Block; buf << proto->ItemSet; buf << proto->MaxDurability; @@ -391,8 +391,6 @@ void ItemProtoCache_WriteDataToCache(WorldSession *session) } buf << proto->socketBonus; buf << proto->GemProperties; - buf << proto->ExtendedCost; - buf << proto->RequiredArenaRank; buf << proto->RequiredDisenchantSkill; buf << proto->ArmorDamageModifier; buf << proto->Duration; diff --git a/src/Client/World/Item.cpp b/src/Client/World/Item.cpp index 7d45d02..bb362df 100644 --- a/src/Client/World/Item.cpp +++ b/src/Client/World/Item.cpp @@ -7,7 +7,8 @@ void WorldSession::_HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket) { uint32 ItemID; - uint32 unk; + uint32 unk; + uint8 unk8; std::string s; recvPacket >> ItemID; @@ -19,10 +20,13 @@ void WorldSession::_HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket) recvPacket >> proto->SubClass; recvPacket >> unk; // dont need that value? recvPacket >> proto->Name; - recvPacket >> s >> s >> s; // strip name2-4 + recvPacket >> unk8; + recvPacket >> unk8; + recvPacket >> unk8; // strip name2-4 recvPacket >> proto->DisplayInfoID; recvPacket >> proto->Quality; recvPacket >> proto->Flags; + recvPacket >> proto->Faction; // 3.2 faction? recvPacket >> proto->BuyPrice; recvPacket >> proto->SellPrice; recvPacket >> proto->InventoryType; @@ -54,6 +58,8 @@ void WorldSession::_HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket) recvPacket >> proto->Damage[i].DamageMax; recvPacket >> proto->Damage[i].DamageType; } + + // resistances (7) recvPacket >> proto->Armor; recvPacket >> proto->HolyRes; recvPacket >> proto->FireRes; @@ -61,11 +67,12 @@ void WorldSession::_HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket) recvPacket >> proto->FrostRes; recvPacket >> proto->ShadowRes; recvPacket >> proto->ArcaneRes; + recvPacket >> proto->Delay; recvPacket >> proto->Ammo_type; - recvPacket >> proto->RangedModRange; - for(int s = 0; s < 5; s++) + + for(int s = 0; s < MAX_ITEM_PROTO_SPELLS; s++) { recvPacket >> proto->Spells[s].SpellId; recvPacket >> proto->Spells[s].SpellTrigger; @@ -83,7 +90,8 @@ void WorldSession::_HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket) recvPacket >> proto->LockID; recvPacket >> proto->Material; recvPacket >> proto->Sheath; - recvPacket >> proto->Extra; + recvPacket >> proto->RandomProperty; + recvPacket >> proto->RandomSuffix; recvPacket >> proto->Block; recvPacket >> proto->ItemSet; recvPacket >> proto->MaxDurability; @@ -91,14 +99,13 @@ void WorldSession::_HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket) recvPacket >> proto->Map; recvPacket >> proto->BagFamily; recvPacket >> proto->TotemCategory; // Added in 1.12.x client branch - for(uint32 s = 0; s < 3; s++) + for(uint32 s = 0; s < MAX_ITEM_PROTO_SOCKETS; s++) { recvPacket >> proto->Socket[s].Color; recvPacket >> proto->Socket[s].Content; } recvPacket >> proto->socketBonus; recvPacket >> proto->GemProperties; - recvPacket >> proto->ExtendedCost; recvPacket >> proto->RequiredDisenchantSkill; recvPacket >> proto->ArmorDamageModifier; recvPacket >> proto->Duration; diff --git a/src/Client/World/Item.h b/src/Client/World/Item.h index 95da2cb..440d204 100644 --- a/src/Client/World/Item.h +++ b/src/Client/World/Item.h @@ -327,7 +327,10 @@ enum ITEM_SUBCLASS_QUIVER ITEM_SUBCLASS_AMMO_POUCH = 3 }; -#define MAX_ITEM_PROTO_DAMAGES 2 +#define MAX_ITEM_PROTO_DAMAGES 2 // changed in 3.1.0 +#define MAX_ITEM_PROTO_SOCKETS 3 +#define MAX_ITEM_PROTO_SPELLS 5 +#define MAX_ITEM_PROTO_STATS 10 struct _ItemStat { @@ -370,6 +373,7 @@ struct ItemProto uint32 DisplayInfoID; uint32 Quality; uint32 Flags; + uint32 Faction; uint32 BuyCount; uint32 BuyPrice; uint32 SellPrice; @@ -389,10 +393,10 @@ struct ItemProto uint32 Stackable; uint32 ContainerSlots; uint32 StatsCount; - _ItemStat ItemStat[10]; + _ItemStat ItemStat[MAX_ITEM_PROTO_STATS]; uint32 ScalingStatDistribution; // id from ScalingStatDistribution.dbc uint32 ScalingStatValue; // mask for selecting column in ScalingStatValues.dbc - _ItemDamage Damage[5]; + _ItemDamage Damage[MAX_ITEM_PROTO_DAMAGES]; uint32 Armor; uint32 HolyRes; uint32 FireRes; @@ -403,7 +407,7 @@ struct ItemProto uint32 Delay; uint32 Ammo_type; float RangedModRange; - _ItemSpell Spells[5]; + _ItemSpell Spells[MAX_ITEM_PROTO_SPELLS]; uint32 Bonding; std::string Description; uint32 PageText; @@ -413,7 +417,8 @@ struct ItemProto uint32 LockID; uint32 Material; uint32 Sheath; - uint32 Extra; + uint32 RandomProperty; + uint32 RandomSuffix; uint32 Unk1; uint32 Block; uint32 ItemSet; @@ -422,10 +427,9 @@ struct ItemProto uint32 Map; uint32 BagFamily; uint32 TotemCategory; - _ItemSocket Socket[3]; + _ItemSocket Socket[MAX_ITEM_PROTO_SOCKETS]; uint32 socketBonus; uint32 GemProperties; - uint32 ExtendedCost; uint32 RequiredArenaRank; uint32 RequiredDisenchantSkill; float ArmorDamageModifier;