diff --git a/include/game/game_handler.hpp b/include/game/game_handler.hpp index b9977d06..215e704e 100644 --- a/include/game/game_handler.hpp +++ b/include/game/game_handler.hpp @@ -1307,17 +1307,16 @@ public: bool occupied = false; }; - TradeStatus getTradeStatus() const { return tradeStatus_; } - bool hasPendingTradeRequest() const { return tradeStatus_ == TradeStatus::PendingIncoming; } - bool isTradeOpen() const { return tradeStatus_ == TradeStatus::Open || tradeStatus_ == TradeStatus::Accepted; } - const std::string& getTradePeerName() const { return tradePeerName_; } + TradeStatus getTradeStatus() const; + bool hasPendingTradeRequest() const; + bool isTradeOpen() const; + const std::string& getTradePeerName() const; // My trade slots (what I'm offering) - const std::array& getMyTradeSlots() const { return myTradeSlots_; } - // Peer's trade slots (what they're offering) - const std::array& getPeerTradeSlots() const { return peerTradeSlots_; } - uint64_t getMyTradeGold() const { return myTradeGold_; } - uint64_t getPeerTradeGold() const { return peerTradeGold_; } + const std::array& getMyTradeSlots() const; + const std::array& getPeerTradeSlots() const; + uint64_t getMyTradeGold() const; + uint64_t getPeerTradeGold() const; void acceptTradeRequest(); // respond to incoming SMSG_TRADE_STATUS(1) with CMSG_BEGIN_TRADE void declineTradeRequest(); // respond with CMSG_CANCEL_TRADE diff --git a/include/game/inventory_handler.hpp b/include/game/inventory_handler.hpp index 0838223b..56f40feb 100644 --- a/include/game/inventory_handler.hpp +++ b/include/game/inventory_handler.hpp @@ -51,7 +51,7 @@ public: TradeStatus getTradeStatus() const { return tradeStatus_; } bool hasPendingTradeRequest() const { return tradeStatus_ == TradeStatus::PendingIncoming; } - bool isTradeOpen() const { return tradeStatus_ == TradeStatus::Open; } + bool isTradeOpen() const { return tradeStatus_ == TradeStatus::Open || tradeStatus_ == TradeStatus::Accepted; } const std::string& getTradePeerName() const { return tradePeerName_; } const std::array& getMyTradeSlots() const { return myTradeSlots_; } const std::array& getPeerTradeSlots() const { return peerTradeSlots_; } diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index f071af03..b4342e4b 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -5074,6 +5074,36 @@ const std::vector& GameHandler::getEquipmentSets( return empty; } +// Trade state delegation to InventoryHandler (which owns the canonical trade state) +GameHandler::TradeStatus GameHandler::getTradeStatus() const { + if (inventoryHandler_) return static_cast(inventoryHandler_->getTradeStatus()); + return tradeStatus_; +} +bool GameHandler::hasPendingTradeRequest() const { + return inventoryHandler_ ? inventoryHandler_->hasPendingTradeRequest() : false; +} +bool GameHandler::isTradeOpen() const { + return inventoryHandler_ ? inventoryHandler_->isTradeOpen() : false; +} +const std::string& GameHandler::getTradePeerName() const { + if (inventoryHandler_) return inventoryHandler_->getTradePeerName(); + return tradePeerName_; +} +const std::array& GameHandler::getMyTradeSlots() const { + if (inventoryHandler_) return reinterpret_cast&>(inventoryHandler_->getMyTradeSlots()); + return myTradeSlots_; +} +const std::array& GameHandler::getPeerTradeSlots() const { + if (inventoryHandler_) return reinterpret_cast&>(inventoryHandler_->getPeerTradeSlots()); + return peerTradeSlots_; +} +uint64_t GameHandler::getMyTradeGold() const { + return inventoryHandler_ ? inventoryHandler_->getMyTradeGold() : myTradeGold_; +} +uint64_t GameHandler::getPeerTradeGold() const { + return inventoryHandler_ ? inventoryHandler_->getPeerTradeGold() : peerTradeGold_; +} + bool GameHandler::supportsEquipmentSets() const { return inventoryHandler_ && inventoryHandler_->supportsEquipmentSets(); }