void WorldSession::HandleBlackMarketBidOpcode(WorldPacket& recvData) { ObjectGuid guid; uint32 itemid, id; uint64 price; recvData >> id >> itemid >> price; guid[0] = recvData.ReadBit(); guid[5] = recvData.ReadBit(); guid[4] = recvData.ReadBit(); guid[3] = recvData.ReadBit(); guid[7] = recvData.ReadBit(); guid[6] = recvData.ReadBit(); guid[1] = recvData.ReadBit(); guid[2] = recvData.ReadBit(); recvData.ReadByteSeq(guid[4]); recvData.ReadByteSeq(guid[3]); recvData.ReadByteSeq(guid[6]); recvData.ReadByteSeq(guid[5]); recvData.ReadByteSeq(guid[7]); recvData.ReadByteSeq(guid[1]); recvData.ReadByteSeq(guid[0]); recvData.ReadByteSeq(guid[2]); //structure ok need implement database data SendBlackMarketBidResult(); SendBlackMarketRequestItemsResult(); }
void WorldSession::HandleBlackMarketBidOnItem(WorldPacket& recvData) { ObjectGuid NpcGUID; uint32 ItemID, MarketID; uint64 BidAmount; recvData >> ItemID >> MarketID >> BidAmount; uint8 bitOrder[8] = { 0, 5, 4, 3, 7, 6, 1, 2}; recvData.ReadBitInOrder(NpcGUID, bitOrder); recvData.ReadGuidBytes(NpcGUID, 4, 3, 6, 5, 7, 1, 0, 2); TC_LOG_DEBUG("blackMarket", ">> HandleBlackMarketBid >> MarketID : %u, BidAmount : " UI64FMTD ", ItemID : %u", MarketID, BidAmount, ItemID); if (!BidAmount) return; BlackMarketAuction *auction = sBlackMarketMgr->GetAuction(MarketID); if (!auction) { TC_LOG_DEBUG("blackMarket", "HandleBlackMarketBid - Auction (MarketID: %u) not found.", MarketID); return; } if (auction->GetCurrentBidder() == GetPlayer()->GetGUIDLow()) { TC_LOG_DEBUG("blackMarket", "HandleBlackMarketBid - Player (GUID: %u) is already the highest bidder.", GetPlayer()->GetGUIDLow()); return; } if (auction->GetCurrentBid() > BidAmount && BidAmount != auction->GetTemplate()->MinBid) { TC_LOG_DEBUG("blackMarket", "HandleBlackMarketBid - Player (GUID: %u) could not bid. The current bid (%u) is higher than the given amount (" UI64FMTD ").", GetPlayer()->GetGUIDLow(), auction->GetCurrentBid(), BidAmount); return; } uint64 currentRequiredIncrement = auction->GetCurrentBid() + auction->GetMinIncrement(); if (currentRequiredIncrement > BidAmount) { TC_LOG_DEBUG("blackMarket", "HandleBlackMarketBid - Player (GUID: %u) could not bid. The BidAmount (" UI64FMTD ") is lower than the current requiredIncrement (" UI64FMTD ").", GetPlayer()->GetGUIDLow(), BidAmount, currentRequiredIncrement); return; } uint64 newIncrement = BidAmount - currentRequiredIncrement; if (!GetPlayer()->ModifyMoney(-int64(BidAmount))) { TC_LOG_DEBUG("blackMarket", "HandleBlackMarketBid - Player (GUID: %u) has not enough money to bid.", GetPlayer()->GetGUIDLow()); return; } sBlackMarketMgr->UpdateAuction(auction, currentRequiredIncrement, newIncrement, GetPlayer()); SendBlackMarketBidOnItemResult(ItemID); SendBlackMarketRequestItemsResult(); }
void WorldSession::HandleBlackMarketRequestItemOpcode(WorldPacket& recvData) { ObjectGuid NpcGUID; uint32 Timestamp; recvData >> Timestamp; uint8 bitOrder[8] = { 2, 6, 0, 3, 4, 5, 1, 7 }; recvData.ReadBitInOrder(NpcGUID, bitOrder); recvData.ReadGuidBytes(NpcGUID, 6, 2, 3, 5, 7, 4, 1, 0); SendBlackMarketRequestItemsResult(); }
void WorldSession::HandleBlackMarketRequestItems(WorldPacket& recvData) { ObjectGuid guid; uint32 unk; recvData >> unk; guid[2] = recvData.ReadBit(); guid[5] = recvData.ReadBit(); guid[4] = recvData.ReadBit(); guid[0] = recvData.ReadBit(); guid[7] = recvData.ReadBit(); guid[3] = recvData.ReadBit(); guid[6] = recvData.ReadBit(); guid[1] = recvData.ReadBit(); recvData.ReadByteSeq(guid[7]); recvData.ReadByteSeq(guid[5]); recvData.ReadByteSeq(guid[6]); recvData.ReadByteSeq(guid[4]); recvData.ReadByteSeq(guid[0]); recvData.ReadByteSeq(guid[3]); recvData.ReadByteSeq(guid[1]); recvData.ReadByteSeq(guid[2]); uint64 npcGuid = uint64(guid); Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(npcGuid, UNIT_NPC_FLAG_BLACK_MARKET); if (!unit) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleBlackMarketRequestItems - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(npcGuid))); return; } SendBlackMarketRequestItemsResult(); }
void WorldSession::HandleBlackMarketRequestItemOpcode(WorldPacket& recvData) { ObjectGuid guid; uint32 Timestamp; recvData >> Timestamp; guid[2] = recvData.ReadBit(); guid[6] = recvData.ReadBit(); guid[0] = recvData.ReadBit(); guid[3] = recvData.ReadBit(); guid[4] = recvData.ReadBit(); guid[5] = recvData.ReadBit(); guid[1] = recvData.ReadBit(); guid[7] = recvData.ReadBit(); recvData.ReadByteSeq(guid[6]); recvData.ReadByteSeq(guid[2]); recvData.ReadByteSeq(guid[3]); recvData.ReadByteSeq(guid[5]); recvData.ReadByteSeq(guid[7]); recvData.ReadByteSeq(guid[4]); recvData.ReadByteSeq(guid[1]); recvData.ReadByteSeq(guid[0]); uint64 NpcGuid = uint64(guid); Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(NpcGuid, UNIT_NPC_FLAG_BLACKMARKET); if (!unit) { TC_LOG_DEBUG("network", "WORLD: Received CMSG_BLACKMARKET_REQUEST_ITEMS - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(NpcGuid))); return; } SendBlackMarketRequestItemsResult(); }
void WorldSession::HandleBlackMarketBid(WorldPacket& recvData) { ObjectGuid guid; uint32 itemid, id; uint64 price; recvData >> id; recvData >> price; recvData >> itemid; guid[7] = recvData.ReadBit(); guid[4] = recvData.ReadBit(); guid[0] = recvData.ReadBit(); guid[2] = recvData.ReadBit(); guid[5] = recvData.ReadBit(); guid[3] = recvData.ReadBit(); guid[1] = recvData.ReadBit(); guid[6] = recvData.ReadBit(); recvData.ReadByteSeq(guid[3]); recvData.ReadByteSeq(guid[7]); recvData.ReadByteSeq(guid[0]); recvData.ReadByteSeq(guid[1]); recvData.ReadByteSeq(guid[6]); recvData.ReadByteSeq(guid[5]); recvData.ReadByteSeq(guid[2]); recvData.ReadByteSeq(guid[4]); sLog->outDebug(LOG_FILTER_NETWORKIO, ">> HandleBid >> id : %u, price : %u, itemid : %u", id, price, itemid); uint64 npcGuid = uint64(guid); if (!price) return; Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(npcGuid, UNIT_NPC_FLAG_BLACK_MARKET); if (!creature) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleBlackMarketBid - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(npcGuid))); return; } BMAuctionEntry *auction = sBlackMarketMgr->GetAuction(id); if (!auction) return; if(auction->bidder == GetPlayer()->GetGUIDLow()) // Trying to cheat return; if(auction->bid >= price && price != auction->bm_template->startBid) // Trying to cheat return; if(!GetPlayer()->ModifyMoney(-price)) return; // trying to cheat sBlackMarketMgr->UpdateAuction(auction, price, GetPlayer()); SendBlackMarketBidResult(); SendBlackMarketRequestItemsResult(); }