aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server/Packets
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/Packets
parent116c8070769b32b67400b4506a2e5b999764185a (diff)
Core/Blackmarket: Implemented black market
Diffstat (limited to 'src/server/game/Server/Packets')
-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
3 files changed, 207 insertions, 1 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__