#pragma once #include "Entity.h" #include #include struct TradeItem { LWOOBJID itemId; LOT itemLot; uint32_t itemCount; }; class Trade { public: explicit Trade(LWOOBJID tradeId, LWOOBJID participantA, LWOOBJID participantB); ~Trade(); LWOOBJID GetTradeId() const; bool IsParticipant(LWOOBJID playerId) const; LWOOBJID GetParticipantA() const; LWOOBJID GetParticipantB() const; Entity* GetParticipantAEntity() const; Entity* GetParticipantBEntity() const; void SetCoins(LWOOBJID participant, uint64_t coins); void SetItems(LWOOBJID participant, std::vector items); void SetAccepted(LWOOBJID participant, bool value); void Complete(); void Cancel(const LWOOBJID canceller); void SendUpdateToOther(LWOOBJID participant); private: LWOOBJID m_TradeId = LWOOBJID_EMPTY; LWOOBJID m_ParticipantA = LWOOBJID_EMPTY; LWOOBJID m_ParticipantB = LWOOBJID_EMPTY; uint64_t m_CoinsA = 0; uint64_t m_CoinsB = 0; std::vector m_ItemsA{}; std::vector m_ItemsB{}; bool m_AcceptedA = false; bool m_AcceptedB = false; }; class TradingManager { public: static TradingManager* Instance() { if (!m_Address) { m_Address = new TradingManager(); } return m_Address; } const std::unique_ptr& GetTrade(LWOOBJID tradeId) const; const std::unique_ptr& GetPlayerTrade(LWOOBJID playerId) const; void CancelTrade(const LWOOBJID canceller, LWOOBJID tradeId, const bool sendCancelMessage = true); void NewTrade(LWOOBJID participantA, LWOOBJID participantB); private: static TradingManager* m_Address; //For singleton method std::unordered_map> trades; };