diff options
Diffstat (limited to 'src/net/ea')
-rw-r--r-- | src/net/ea/tradehandler.cpp | 90 | ||||
-rw-r--r-- | src/net/ea/tradehandler.h | 4 |
2 files changed, 43 insertions, 51 deletions
diff --git a/src/net/ea/tradehandler.cpp b/src/net/ea/tradehandler.cpp index d6715d4f6..5f507a01a 100644 --- a/src/net/ea/tradehandler.cpp +++ b/src/net/ea/tradehandler.cpp @@ -69,55 +69,6 @@ void TradeHandler::removeItem(const int slotNum A_UNUSED, { } -void TradeHandler::processTradeRequest(Net::MessageIn &msg) const -{ - // If a trade window or request window is already open, send a - // trade cancel to any other trade request. - // - // Note that it would be nice if the server would prevent this - // situation, and that the requesting player would get a - // special message about the player being occupied. - std::string tradePartnerNameTemp = msg.readString(24); - - if (player_relations.hasPermission(tradePartnerNameTemp, - PlayerRelation::TRADE)) - { - if (PlayerInfo::isTrading() || confirmDlg) - { - respond(false); - return; - } - - tradePartnerName = tradePartnerNameTemp; - PlayerInfo::setTrading(true); - if (tradeWindow) - { - if (tradePartnerName.empty() || tradeWindow->getAutoTradeNick() - != tradePartnerName) - { - tradeWindow->clear(); - // TRANSLATORS: trade message - confirmDlg = new ConfirmDialog(_("Request for Trade"), - // TRANSLATORS: trade message - strprintf(_("%s wants to trade with you, do" - " you accept?"), tradePartnerName.c_str()), - SOUND_REQUEST, true); - confirmDlg->postInit(); - confirmDlg->addActionListener(&listener); - } - else - { - respond(true); - } - } - } - else - { - respond(false); - return; - } -} - void TradeHandler::processTradeResponse(Net::MessageIn &msg) const { if (confirmDlg || tradePartnerName.empty() @@ -281,4 +232,45 @@ void TradeHandler::processTradeComplete(Net::MessageIn &msg A_UNUSED) PlayerInfo::setTrading(false); } +void TradeHandler::processTradeRequestContinue(const std::string &partner) const +{ + if (player_relations.hasPermission(partner, + PlayerRelation::TRADE)) + { + if (PlayerInfo::isTrading() || confirmDlg) + { + respond(false); + return; + } + + tradePartnerName = partner; + PlayerInfo::setTrading(true); + if (tradeWindow) + { + if (tradePartnerName.empty() || tradeWindow->getAutoTradeNick() + != tradePartnerName) + { + tradeWindow->clear(); + // TRANSLATORS: trade message + confirmDlg = new ConfirmDialog(_("Request for Trade"), + // TRANSLATORS: trade message + strprintf(_("%s wants to trade with you, do" + " you accept?"), tradePartnerName.c_str()), + SOUND_REQUEST, true); + confirmDlg->postInit(); + confirmDlg->addActionListener(&listener); + } + else + { + respond(true); + } + } + } + else + { + respond(false); + return; + } +} + } // namespace Ea diff --git a/src/net/ea/tradehandler.h b/src/net/ea/tradehandler.h index a11941d5d..cbf19919e 100644 --- a/src/net/ea/tradehandler.h +++ b/src/net/ea/tradehandler.h @@ -43,8 +43,6 @@ class TradeHandler notfinal : public Net::TradeHandler void removeItem(const int slotNum, const int amount) const override final; - void processTradeRequest(Net::MessageIn &msg) const; - void processTradeResponse(Net::MessageIn &msg) const; static void processTradeItemAdd(Net::MessageIn &msg); @@ -56,6 +54,8 @@ class TradeHandler notfinal : public Net::TradeHandler static void processTradeCancel(Net::MessageIn &msg); static void processTradeComplete(Net::MessageIn &msg); + + void processTradeRequestContinue(const std::string &partner) const; }; } // namespace Ea |