[10047] Fixed show wrapped gifts in trade windows.

Also some fixes for trading related not full read packet spam.
This commit is contained in:
VladimirMangos 2010-06-08 22:55:52 +04:00
parent 6986ecbd9b
commit 59c8741e9b
2 changed files with 40 additions and 41 deletions

View file

@ -123,41 +123,39 @@ void WorldSession::SendUpdateTrade()
} }
WorldPacket data(SMSG_TRADE_STATUS_EXTENDED, (100)); // guess size WorldPacket data(SMSG_TRADE_STATUS_EXTENDED, (100)); // guess size
data << (uint8 ) 1; // can be different (only seen 0 and 1) data << uint8(1); // can be different (only seen 0 and 1)
data << (uint32) 0; // added in 2.4.0, this value must be equal to value from TRADE_STATUS_OPEN_WINDOW status packet (different value for different players to block multiple trades?) data << uint32(0); // added in 2.4.0, this value must be equal to value from TRADE_STATUS_OPEN_WINDOW status packet (different value for different players to block multiple trades?)
data << (uint32) TRADE_SLOT_COUNT; // trade slots count/number?, = next field in most cases data << uint32(TRADE_SLOT_COUNT); // trade slots count/number?, = next field in most cases
data << (uint32) TRADE_SLOT_COUNT; // trade slots count/number?, = prev field in most cases data << uint32(TRADE_SLOT_COUNT); // trade slots count/number?, = prev field in most cases
data << (uint32) _player->pTrader->tradeGold; // trader gold data << uint32(_player->pTrader->tradeGold); // trader gold
data << (uint32) 0; // spell casted on lowest slot item data << uint32(0); // spell casted on lowest slot item
for(uint8 i = 0; i < TRADE_SLOT_COUNT; ++i) for(uint8 i = 0; i < TRADE_SLOT_COUNT; ++i)
{ {
data << (uint8) i; // trade slot number, if not specified, then end of packet data << uint8(i); // trade slot number, if not specified, then end of packet
if(Item* item = _player->pTrader->GetItemByTradeSlot(i)) if (Item* item = _player->pTrader->GetItemByTradeSlot(i))
{ {
data << (uint32) item->GetProto()->ItemId; // entry data << uint32(item->GetProto()->ItemId); // entry
// display id data << uint32(item->GetProto()->DisplayInfoID);// display id
data << (uint32) item->GetProto()->DisplayInfoID; data << uint32(item->GetCount()); // stack count
// stack count // wrapped: hide stats but show giftcreator name
data << (uint32) item->GetUInt32Value(ITEM_FIELD_STACK_COUNT); data << uint32(item->HasFlag(ITEM_FIELD_FLAGS,ITEM_FLAGS_WRAPPED) ? 1 : 0);
data << (uint32) 0; // probably gift=1, created_by=0? data << uint64(item->GetUInt64Value(ITEM_FIELD_GIFTCREATOR));
// gift creator
data << (uint64) item->GetUInt64Value(ITEM_FIELD_GIFTCREATOR); data << uint32(item->GetEnchantmentId(PERM_ENCHANTMENT_SLOT));
data << (uint32) item->GetEnchantmentId(PERM_ENCHANTMENT_SLOT);
for(uint32 enchant_slot = SOCK_ENCHANTMENT_SLOT; enchant_slot < SOCK_ENCHANTMENT_SLOT+MAX_GEM_SOCKETS; ++enchant_slot) for(uint32 enchant_slot = SOCK_ENCHANTMENT_SLOT; enchant_slot < SOCK_ENCHANTMENT_SLOT+MAX_GEM_SOCKETS; ++enchant_slot)
data << (uint32) item->GetEnchantmentId(EnchantmentSlot(enchant_slot)); data << uint32(item->GetEnchantmentId(EnchantmentSlot(enchant_slot)));
// creator // creator
data << (uint64) item->GetUInt64Value(ITEM_FIELD_CREATOR); data << uint64(item->GetUInt64Value(ITEM_FIELD_CREATOR));
data << (uint32) item->GetSpellCharges(); // charges data << uint32(item->GetSpellCharges()); // charges
data << (uint32) item->GetItemSuffixFactor(); // SuffixFactor data << uint32(item->GetItemSuffixFactor()); // SuffixFactor
// random properties id data << uint32(item->GetItemRandomPropertyId());// random properties id
data << (uint32) item->GetItemRandomPropertyId(); data << uint32(item->GetProto()->LockID); // lock id
data << (uint32) item->GetProto()->LockID; // lock id
// max durability // max durability
data << (uint32) item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY); data << uint32(item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY));
// durability // durability
data << (uint32) item->GetUInt32Value(ITEM_FIELD_DURABILITY); data << uint32(item->GetUInt32Value(ITEM_FIELD_DURABILITY));
} }
else else
{ {
@ -245,8 +243,10 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[])
//============================================================== //==============================================================
void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/) void WorldSession::HandleAcceptTradeOpcode(WorldPacket& recvPacket)
{ {
recvPacket.read_skip<uint32>(); // 7, amount traded slots ?
Item *myItems[TRADE_SLOT_TRADED_COUNT] = { NULL, NULL, NULL, NULL, NULL, NULL }; Item *myItems[TRADE_SLOT_TRADED_COUNT] = { NULL, NULL, NULL, NULL, NULL, NULL };
Item *hisItems[TRADE_SLOT_TRADED_COUNT] = { NULL, NULL, NULL, NULL, NULL, NULL }; Item *hisItems[TRADE_SLOT_TRADED_COUNT] = { NULL, NULL, NULL, NULL, NULL, NULL };
bool myCanCompleteTrade=true,hisCanCompleteTrade=true; bool myCanCompleteTrade=true,hisCanCompleteTrade=true;
@ -449,11 +449,12 @@ void WorldSession::HandleCancelTradeOpcode(WorldPacket& /*recvPacket*/)
void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket) void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
{ {
uint64 ID;
recvPacket >> ID;
if (GetPlayer()->pTrader) if (GetPlayer()->pTrader)
return; return;
uint64 ID;
if (!GetPlayer()->isAlive()) if (!GetPlayer()->isAlive())
{ {
SendTradeStatus(TRADE_STATUS_YOU_DEAD); SendTradeStatus(TRADE_STATUS_YOU_DEAD);
@ -478,8 +479,6 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
return; return;
} }
recvPacket >> ID;
Player* pOther = ObjectAccessor::FindPlayer( ID ); Player* pOther = ObjectAccessor::FindPlayer( ID );
if (!pOther) if (!pOther)
@ -548,13 +547,13 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
void WorldSession::HandleSetTradeGoldOpcode(WorldPacket& recvPacket) void WorldSession::HandleSetTradeGoldOpcode(WorldPacket& recvPacket)
{ {
if(!_player->pTrader)
return;
uint32 gold; uint32 gold;
recvPacket >> gold; recvPacket >> gold;
if(!_player->pTrader)
return;
// gold can be incorrect, but this is checked at trade finished. // gold can be incorrect, but this is checked at trade finished.
_player->tradeGold = gold; _player->tradeGold = gold;
@ -563,9 +562,6 @@ void WorldSession::HandleSetTradeGoldOpcode(WorldPacket& recvPacket)
void WorldSession::HandleSetTradeItemOpcode(WorldPacket& recvPacket) void WorldSession::HandleSetTradeItemOpcode(WorldPacket& recvPacket)
{ {
if (!_player->pTrader)
return;
// send update // send update
uint8 tradeSlot; uint8 tradeSlot;
uint8 bag; uint8 bag;
@ -575,6 +571,9 @@ void WorldSession::HandleSetTradeItemOpcode(WorldPacket& recvPacket)
recvPacket >> bag; recvPacket >> bag;
recvPacket >> slot; recvPacket >> slot;
if (!_player->pTrader)
return;
// invalid slot number // invalid slot number
if (tradeSlot >= TRADE_SLOT_COUNT) if (tradeSlot >= TRADE_SLOT_COUNT)
{ {
@ -608,12 +607,12 @@ void WorldSession::HandleSetTradeItemOpcode(WorldPacket& recvPacket)
void WorldSession::HandleClearTradeItemOpcode(WorldPacket& recvPacket) void WorldSession::HandleClearTradeItemOpcode(WorldPacket& recvPacket)
{ {
if (!_player->pTrader)
return;
uint8 tradeSlot; uint8 tradeSlot;
recvPacket >> tradeSlot; recvPacket >> tradeSlot;
if (!_player->pTrader)
return;
// invalid slot number // invalid slot number
if (tradeSlot >= TRADE_SLOT_COUNT) if (tradeSlot >= TRADE_SLOT_COUNT)
return; return;

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "10046" #define REVISION_NR "10047"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__