diff options
| author | Gigi1237 <luigi.sciolla@gmail.com> | 2015-08-22 20:29:17 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-04-11 18:22:09 +0200 |
| commit | c19172cad9a3302b7f5c8d5ca1d96de9a7311847 (patch) | |
| tree | 674d46c12b63b15a726909093f082aaa58128f7b /src/server/game/Server | |
| parent | 116c8070769b32b67400b4506a2e5b999764185a (diff) | |
Core/Blackmarket: Implemented black market
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/AllPackets.h | 1 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/BlackMarketPackets.cpp | 114 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/BlackMarketPackets.h | 93 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 12 |
5 files changed, 224 insertions, 8 deletions
diff --git a/src/server/game/Server/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h index 0d6d28446bc..2c2aa528bb1 100644 --- a/src/server/game/Server/Packets/AllPackets.h +++ b/src/server/game/Server/Packets/AllPackets.h @@ -22,6 +22,7 @@ #include "AuctionHousePackets.h" #include "AuthenticationPackets.h" #include "BankPackets.h" +#include "BlackMarketPackets.h" #include "BattlefieldPackets.h" #include "BattlegroundPackets.h" #include "BattlenetPackets.h" diff --git a/src/server/game/Server/Packets/BlackMarketPackets.cpp b/src/server/game/Server/Packets/BlackMarketPackets.cpp index d67f778a0b7..fb1098941b6 100644 --- a/src/server/game/Server/Packets/BlackMarketPackets.cpp +++ b/src/server/game/Server/Packets/BlackMarketPackets.cpp @@ -16,6 +16,35 @@ */ #include "BlackMarketPackets.h" +#include "BlackMarketMgr.h" +#include "Player.h" + +void WorldPackets::BlackMarket::BlackMarketItem::Initialize(BlackMarketEntry *const entry, Player* player) +{ + BlackMarketTemplate const* templ = entry->GetTemplate(); + + MarketID = entry->GetMarketId(); + SellerNPC = templ->SellerNPC; + Item = templ->Item; + Quantity = templ->Quantity; + + // No bids yet + if (!entry->GetNumBids()) + { + MinBid = templ->MinBid; + MinIncrement = 1; + } + else + { + MinIncrement = entry->GetMinIncrement(); // 5% increment minimum + MinBid = entry->GetCurrentBid() + MinIncrement; + } + + CurrentBid = entry->GetCurrentBid(); + SecondsRemaining = entry->GetSecondsRemaining(); + HighBid = (entry->GetBidder() == player->GetGUID().GetCounter()); + NumBids = entry->GetNumBids(); +} void WorldPackets::BlackMarket::BlackMarketOpen::Read() { @@ -30,3 +59,88 @@ WorldPacket const* WorldPackets::BlackMarket::BlackMarketOpenResult::Write() return &_worldPacket; } + +void WorldPackets::BlackMarket::BlackMarketRequestItems::Read() +{ + _worldPacket >> Guid; + _worldPacket >> uint32(LastUpdateID); +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::BlackMarket::BlackMarketItem const& blackMarketItem) +{ + data << int32(blackMarketItem.MarketID); + data << int32(blackMarketItem.SellerNPC); + data << blackMarketItem.Item; + data << int32(blackMarketItem.Quantity); + data << uint64(blackMarketItem.MinBid); + data << uint64(blackMarketItem.MinIncrement); + data << uint64(blackMarketItem.CurrentBid); + data << int32(blackMarketItem.SecondsRemaining); + data << int32(blackMarketItem.NumBids); + data.WriteBit(blackMarketItem.HighBid); + data.FlushBits(); + + return data; +} + +ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::BlackMarket::BlackMarketItem& blackMarketItem) +{ + data >> blackMarketItem.MarketID; + data >> blackMarketItem.SellerNPC; + data >> blackMarketItem.Item; + data >> blackMarketItem.Quantity; + data >> blackMarketItem.MinBid; + data >> blackMarketItem.MinIncrement; + data >> blackMarketItem.CurrentBid; + data >> blackMarketItem.SecondsRemaining; + data >> blackMarketItem.NumBids; + blackMarketItem.HighBid = data.ReadBit(); + + return data; +} + +WorldPacket const* WorldPackets::BlackMarket::BlackMarketRequestItemsResult::Write() +{ + _worldPacket << uint32(LastUpdateID); + _worldPacket << uint32(Items.size()); + + for (BlackMarketItem const& item : Items) + _worldPacket << item; + + return &_worldPacket; +} + +void WorldPackets::BlackMarket::BlackMarketBidOnItem::Read() +{ + _worldPacket >> Guid; + _worldPacket >> MarketID; + _worldPacket >> Item; + _worldPacket >> BidAmount; +} + +WorldPacket const* WorldPackets::BlackMarket::BlackMarketBidOnItemResult::Write() +{ + _worldPacket << int32(MarketID); + _worldPacket << Item; + _worldPacket << int32(Result); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::BlackMarket::BlackMarketOutbid::Write() +{ + _worldPacket << int32(MarketID); + _worldPacket << Item; + _worldPacket << int32(RandomPropertiesID); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::BlackMarket::BlackMarketWon::Write() +{ + _worldPacket << int32(MarketID); + _worldPacket << Item; + _worldPacket << int32(RandomPropertiesID); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/BlackMarketPackets.h b/src/server/game/Server/Packets/BlackMarketPackets.h index 0fb6280811d..1193a9f0147 100644 --- a/src/server/game/Server/Packets/BlackMarketPackets.h +++ b/src/server/game/Server/Packets/BlackMarketPackets.h @@ -20,12 +20,31 @@ #include "Packet.h" #include "ObjectGuid.h" -#include "WorldSession.h" +#include "ItemPackets.h" + +class Player; +class BlackMarketEntry; namespace WorldPackets { namespace BlackMarket { + struct BlackMarketItem + { + void Initialize(BlackMarketEntry *const entry, Player* player); + + int32 MarketID = 0; + int32 SellerNPC = 0; + Item::ItemInstance Item; + int32 Quantity = 0; + uint64 MinBid = 0; + uint64 MinIncrement = 0; + uint64 CurrentBid = 0; + int32 SecondsRemaining = 0; + int32 NumBids = 0; + bool HighBid = false; + }; + class BlackMarketOpen final : public ClientPacket { public: @@ -46,6 +65,78 @@ namespace WorldPackets ObjectGuid Guid; bool Enable = true; }; + + class BlackMarketRequestItems final : public ClientPacket + { + public: + BlackMarketRequestItems(WorldPacket&& packet) : ClientPacket(CMSG_BLACK_MARKET_REQUEST_ITEMS, std::move(packet)) { } + + void Read() override; + + ObjectGuid Guid; + uint32 LastUpdateID = 0; + }; + + class BlackMarketRequestItemsResult final : public ServerPacket + { + public: + BlackMarketRequestItemsResult() : ServerPacket(SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT, 4) { } + + WorldPacket const* Write() override; + + uint32 LastUpdateID = 0; + std::vector<BlackMarketItem> Items; + }; + + class BlackMarketBidOnItem final : public ClientPacket + { + public: + BlackMarketBidOnItem(WorldPacket&& packet) : ClientPacket(CMSG_BLACK_MARKET_BID_ON_ITEM, std::move(packet)) { } + + void Read() override; + + ObjectGuid Guid; + int32 MarketID = 0; + Item::ItemInstance Item; + uint64 BidAmount = 0; + }; + + class BlackMarketBidOnItemResult final : public ServerPacket + { + public: + BlackMarketBidOnItemResult() : ServerPacket(SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT, 4 + 76 + 4) { } + + WorldPacket const* Write() override; + + int32 MarketID = 0; + Item::ItemInstance Item; + int32 Result = 0; + }; + + class BlackMarketOutbid final : public ServerPacket + { + public: + BlackMarketOutbid() : ServerPacket(SMSG_BLACK_MARKET_OUTBID, 4 + 76 + 4) { } + + WorldPacket const* Write() override; + + int32 MarketID = 0; + Item::ItemInstance Item; + int32 RandomPropertiesID; + }; + + class BlackMarketWon final : public ServerPacket + { + public: + BlackMarketWon() : ServerPacket(SMSG_BLACK_MARKET_WON, 4 + 76 + 4) { } + + WorldPacket const* Write() override; + + int32 MarketID = 0; + Item::ItemInstance Item; + int32 RandomPropertiesID; + }; } } + #endif // BlackMarketPackets_h__ diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 931b74dd234..3463421a2ea 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -183,9 +183,9 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_BF_MGR_QUEUE_INVITE_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Battlefield::BFMgrQueueInviteResponse, &WorldSession::HandleBfQueueInviteResponse); DEFINE_HANDLER(CMSG_BF_MGR_QUEUE_REQUEST, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BINDER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleBinderActivateOpcode); - DEFINE_HANDLER(CMSG_BLACK_MARKET_BID_ON_ITEM, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_BLACK_MARKET_BID_ON_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::BlackMarket::BlackMarketBidOnItem, &WorldSession::HandleBlackMarketBidOnItem); DEFINE_HANDLER(CMSG_BLACK_MARKET_OPEN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::BlackMarket::BlackMarketOpen, &WorldSession::HandleBlackMarketOpen); - DEFINE_HANDLER(CMSG_BLACK_MARKET_REQUEST_ITEMS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_BLACK_MARKET_REQUEST_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::BlackMarket::BlackMarketRequestItems, &WorldSession::HandleBlackMarketRequestItems); DEFINE_HANDLER(CMSG_BUG_REPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::BugReport, &WorldSession::HandleBugReportOpcode); DEFINE_HANDLER(CMSG_BUSY_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Trade::BusyTrade, &WorldSession::HandleBusyTradeOpcode); DEFINE_HANDLER(CMSG_BUY_BACK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::BuyBackItem, &WorldSession::HandleBuybackItem); @@ -906,11 +906,11 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BF_MGR_STATE_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDER_CONFIRM, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BIND_POINT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_OPEN_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_OPEN_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_OUTBID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_WON, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_WON, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BONUS_ROLL_EMPTY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BOSS_KILL_CREDIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BREAK_TARGET, STATUS_NEVER, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 35ce9c7026f..5be40946b1f 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -37,6 +37,7 @@ class BattlePetMgr; class Channel; class CollectionMgr; class Creature; +class BlackMarketEntry; class GameObject; class InstanceSave; class Item; @@ -55,6 +56,7 @@ struct AuctionEntry; struct DeclinedName; struct ItemTemplate; struct MovementInfo; +struct BlackMarketTemplate; namespace lfg { @@ -149,6 +151,9 @@ namespace WorldPackets namespace BlackMarket { class BlackMarketOpen; + class BlackMarketRequestItems; + class BlackMarketBidOnItem; + class BlackMarketOutbid; } namespace Calendar @@ -1034,6 +1039,9 @@ class TC_GAME_API WorldSession // Black Market void SendBlackMarketOpenResult(ObjectGuid guid, Creature* auctioneer); + void SendBlackMarketBidOnItemResult(int32 result, int32 marketId, WorldPackets::Item::ItemInstance& item); + void SendBlackMarketWonNotification(BlackMarketEntry const* entry, Item const* item); + void SendBlackMarketOutbidNotification(BlackMarketTemplate const* templ); //Item Enchantment void SendEnchantmentLog(ObjectGuid target, ObjectGuid caster, uint32 itemId, uint32 enchantId); @@ -1383,7 +1391,9 @@ class TC_GAME_API WorldSession void HandleBuyBankSlotOpcode(WorldPackets::Bank::BuyBankSlot& packet); // Black Market - void HandleBlackMarketOpen(WorldPackets::BlackMarket::BlackMarketOpen& packet); + void HandleBlackMarketOpen(WorldPackets::BlackMarket::BlackMarketOpen& blackMarketOpen); + void HandleBlackMarketRequestItems(WorldPackets::BlackMarket::BlackMarketRequestItems& blackMarketRequestItems); + void HandleBlackMarketBidOnItem(WorldPackets::BlackMarket::BlackMarketBidOnItem& blackMarketBidOnItem); void HandleGetMailList(WorldPackets::Mail::MailGetList& packet); void HandleSendMail(WorldPackets::Mail::SendMail& packet); |
