aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorGigi1237 <luigi.sciolla@gmail.com>2015-08-22 20:29:17 +0200
committerShauren <shauren.trinity@gmail.com>2016-04-11 18:22:09 +0200
commitc19172cad9a3302b7f5c8d5ca1d96de9a7311847 (patch)
tree674d46c12b63b15a726909093f082aaa58128f7b /src/server/game/Server
parent116c8070769b32b67400b4506a2e5b999764185a (diff)
Core/Blackmarket: Implemented black market
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/AllPackets.h1
-rw-r--r--src/server/game/Server/Packets/BlackMarketPackets.cpp114
-rw-r--r--src/server/game/Server/Packets/BlackMarketPackets.h93
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp12
-rw-r--r--src/server/game/Server/WorldSession.h12
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);