Пример #1
0
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::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();
}