From 4a879f52c53c4fb9542319bc1f5864998a1fbb22 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 25 Jan 2019 22:01:11 +0300 Subject: Add packet CMSG_NPC_BARTER_CLOSE 0x0b12 --- src/CMakeLists.txt | 7 +++++ src/Makefile.am | 7 +++++ src/net/barterhandler.h | 49 +++++++++++++++++++++++++++++++ src/net/eathena/barterhandler.cpp | 60 ++++++++++++++++++++++++++++++++++++++ src/net/eathena/barterhandler.h | 43 +++++++++++++++++++++++++++ src/net/eathena/barterrecv.cpp | 40 +++++++++++++++++++++++++ src/net/eathena/barterrecv.h | 39 +++++++++++++++++++++++++ src/net/eathena/generalhandler.cpp | 3 ++ src/net/eathena/generalhandler.h | 2 ++ src/net/eathena/packetsout.inc | 21 ++++++++++++- src/net/net.cpp | 2 ++ src/net/tmwa/barterhandler.cpp | 43 +++++++++++++++++++++++++++ src/net/tmwa/barterhandler.h | 42 ++++++++++++++++++++++++++ src/net/tmwa/generalhandler.cpp | 3 ++ src/net/tmwa/generalhandler.h | 2 ++ 15 files changed, 362 insertions(+), 1 deletion(-) create mode 100644 src/net/barterhandler.h create mode 100644 src/net/eathena/barterhandler.cpp create mode 100644 src/net/eathena/barterhandler.h create mode 100644 src/net/eathena/barterrecv.cpp create mode 100644 src/net/eathena/barterrecv.h create mode 100644 src/net/tmwa/barterhandler.cpp create mode 100644 src/net/tmwa/barterhandler.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e3be548f9..11acc2af8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1576,6 +1576,7 @@ SET(SRCS listeners/vendingslotslistener.h net/auctionhandler.h net/bankhandler.h + net/barterhandler.h net/battlegroundhandler.h net/buyingstorehandler.h net/cashshophandler.h @@ -1703,6 +1704,10 @@ SET(SRCS net/eathena/markethandler.h net/eathena/marketrecv.cpp net/eathena/marketrecv.h + net/eathena/barterhandler.cpp + net/eathena/barterhandler.h + net/eathena/barterrecv.cpp + net/eathena/barterrecv.h net/eathena/menu.cpp net/eathena/menu.h enums/net/menutype.h @@ -2154,6 +2159,8 @@ SET(SRCS_TMWA net/tmwa/maphandler.h net/tmwa/markethandler.cpp net/tmwa/markethandler.h + net/tmwa/barterhandler.cpp + net/tmwa/barterhandler.h net/tmwa/mercenaryhandler.cpp net/tmwa/mercenaryhandler.h net/tmwa/roulettehandler.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 1dff63e68..1c678f226 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1834,6 +1834,8 @@ SRC += \ net/tmwa/maphandler.h \ net/tmwa/markethandler.cpp \ net/tmwa/markethandler.h \ + net/tmwa/barterhandler.cpp \ + net/tmwa/barterhandler.h \ net/tmwa/mercenaryhandler.cpp \ net/tmwa/mercenaryhandler.h \ net/tmwa/roulettehandler.cpp \ @@ -1888,6 +1890,7 @@ SRC += gui/windows/bankwindow.cpp \ resources/inventory/complexinventory.h \ net/auctionhandler.h \ net/bankhandler.h \ + net/barterhandler.h \ net/battlegroundhandler.h \ net/buyingstorehandler.h \ net/cashshophandler.h \ @@ -2015,6 +2018,10 @@ SRC += gui/windows/bankwindow.cpp \ net/eathena/markethandler.h \ net/eathena/marketrecv.cpp \ net/eathena/marketrecv.h \ + net/eathena/barterhandler.cpp \ + net/eathena/barterhandler.h \ + net/eathena/barterrecv.cpp \ + net/eathena/barterrecv.h \ net/eathena/menu.cpp \ net/eathena/menu.h \ enums/net/menutype.h \ diff --git a/src/net/barterhandler.h b/src/net/barterhandler.h new file mode 100644 index 000000000..d15e68377 --- /dev/null +++ b/src/net/barterhandler.h @@ -0,0 +1,49 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2019 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NET_BARTERHANDLER_H +#define NET_BARTERHANDLER_H + +#include "localconsts.h" + +class ShopItem; + +namespace Net +{ + +class BarterHandler notfinal +{ + public: + BarterHandler() + { } + + A_DELETE_COPY(BarterHandler) + + virtual ~BarterHandler() + { } + + virtual void close() const = 0; +}; + +} // namespace Net + +extern Net::BarterHandler *barterHandler; + +#endif // NET_BARTERHANDLER_H diff --git a/src/net/eathena/barterhandler.cpp b/src/net/eathena/barterhandler.cpp new file mode 100644 index 000000000..7ce0c959f --- /dev/null +++ b/src/net/eathena/barterhandler.cpp @@ -0,0 +1,60 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2019 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "net/eathena/barterhandler.h" + +#include "net/eathena/barterrecv.h" +#include "net/eathena/messageout.h" +#include "net/eathena/protocolout.h" + +#include "debug.h" + +extern int packetVersionMain; +extern int packetVersionRe; +extern int packetVersionZero; + +namespace EAthena +{ + +BarterHandler::BarterHandler() : + Net::BarterHandler() +{ + barterHandler = this; + BarterRecv::mBuyDialog = nullptr; +} + +BarterHandler::~BarterHandler() +{ + barterHandler = nullptr; +} + +void BarterHandler::close() const +{ + if (packetVersionMain < 20190116 && + packetVersionRe < 20190116 && + packetVersionZero < 20181226) + { + return; + } + + createOutPacket(CMSG_NPC_BARTER_CLOSE); +} + +} // namespace EAthena diff --git a/src/net/eathena/barterhandler.h b/src/net/eathena/barterhandler.h new file mode 100644 index 000000000..5ee29101a --- /dev/null +++ b/src/net/eathena/barterhandler.h @@ -0,0 +1,43 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2019 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NET_EATHENA_BARTERHANDLER_H +#define NET_EATHENA_BARTERHANDLER_H + +#include "net/barterhandler.h" + +namespace EAthena +{ + +class BarterHandler final : public Net::BarterHandler +{ + public: + BarterHandler(); + + A_DELETE_COPY(BarterHandler) + + ~BarterHandler() override final; + + void close() const override final; +}; + +} // namespace EAthena + +#endif // NET_EATHENA_BARTERHANDLER_H diff --git a/src/net/eathena/barterrecv.cpp b/src/net/eathena/barterrecv.cpp new file mode 100644 index 000000000..b1b46f528 --- /dev/null +++ b/src/net/eathena/barterrecv.cpp @@ -0,0 +1,40 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2019 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "net/eathena/barterrecv.h" + +#include "gui/windows/buydialog.h" + +#include "net/messagein.h" + +#include "debug.h" + +extern int itemIdLen; + +namespace EAthena +{ + +namespace BarterRecv +{ + BuyDialog *mBuyDialog = nullptr; +} // namespace BarterRecv + + +} // namespace EAthena diff --git a/src/net/eathena/barterrecv.h b/src/net/eathena/barterrecv.h new file mode 100644 index 000000000..0de70be5f --- /dev/null +++ b/src/net/eathena/barterrecv.h @@ -0,0 +1,39 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2019 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NET_EATHENA_BARTERRECV_H +#define NET_EATHENA_BARTERRECV_H + +namespace Net +{ + class MessageIn; +} // namespace Net + +class BuyDialog; + +namespace EAthena +{ + namespace BarterRecv + { + extern BuyDialog *mBuyDialog; + } // namespace BarterRecv +} // namespace EAthena + +#endif // NET_EATHENA_BARTERRECV_H diff --git a/src/net/eathena/generalhandler.cpp b/src/net/eathena/generalhandler.cpp index 4eca2f2a7..ff420092d 100644 --- a/src/net/eathena/generalhandler.cpp +++ b/src/net/eathena/generalhandler.cpp @@ -37,6 +37,7 @@ #include "net/eathena/achievementhandler.h" #include "net/eathena/attendancehandler.h" #include "net/eathena/bankhandler.h" +#include "net/eathena/barterhandler.h" #include "net/eathena/battlegroundhandler.h" #include "net/eathena/beinghandler.h" #include "net/eathena/buyingstorehandler.h" @@ -116,6 +117,7 @@ GeneralHandler::GeneralHandler() : mElementalHandler(new ElementalHandler), mMapHandler(new MapHandler), mMarketHandler(new MarketHandler), + mBarterHandler(new BarterHandler), mVendingHandler(new VendingHandler), mRouletteHandler(new RouletteHandler), mSearchStoreHandler(new SearchStoreHandler) @@ -163,6 +165,7 @@ GeneralHandler::~GeneralHandler() delete2(mElementalHandler) delete2(mMapHandler) delete2(mMarketHandler) + delete2(mBarterHandler) delete2(mVendingHandler) delete2(mRouletteHandler) delete2(mSearchStoreHandler) diff --git a/src/net/eathena/generalhandler.h b/src/net/eathena/generalhandler.h index a7269d50d..509b01fcb 100644 --- a/src/net/eathena/generalhandler.h +++ b/src/net/eathena/generalhandler.h @@ -29,6 +29,7 @@ namespace EAthena { class AdminHandler; +class BarterHandler; class BeingHandler; class BuySellHandler; class CharServerHandler; @@ -130,6 +131,7 @@ class GeneralHandler final : public Net::GeneralHandler ElementalHandler *mElementalHandler; MapHandler *mMapHandler; MarketHandler *mMarketHandler; + BarterHandler *mBarterHandler; VendingHandler *mVendingHandler; RouletteHandler *mRouletteHandler; SearchStoreHandler *mSearchStoreHandler; diff --git a/src/net/eathena/packetsout.inc b/src/net/eathena/packetsout.inc index 75baa0dc4..aca3e0b8f 100644 --- a/src/net/eathena/packetsout.inc +++ b/src/net/eathena/packetsout.inc @@ -351,6 +351,7 @@ packet(CMSG_INVENTORY_EXPAND_CONFIRM, 0x0000, 0, nullptr); packet(CMSG_INVENTORY_EXPAND_REJECT, 0x0000, 0, nullptr); packet(CMSG_SKILL_USE_BEING_START, 0x0000, 0, nullptr); packet(CMSG_SKILL_USE_BEING_STOP, 0x0000, 0, nullptr); +packet(CMSG_NPC_BARTER_CLOSE, 0x0000, 0, nullptr); #else // 20040713 if (packetVersion >= 20040713) @@ -1531,10 +1532,28 @@ if (packetVersionZero >= 20181114) packet(CMSG_NPC_SELECT_ARROW, 0x01ae, 6, clif->pSelectArrow); } -// 20181121 +// 20181121 main if (packetVersionMain >= 20181121) { packet(CMSG_NPC_SELECT_ARROW, 0x01ae, 6, clif->pSelectArrow); } +// 20181226 zero +if (packetVersionZero >= 20181226) +{ + packet(CMSG_NPC_BARTER_CLOSE, 0x0b12, 2, clif->pNPCBarterClosed); +} + +// 20190116 main +if (packetVersionMain >= 20190116) +{ + packet(CMSG_NPC_BARTER_CLOSE, 0x0b12, 2, clif->pNPCBarterClosed); +} + +// 20190116 re +if (packetVersionRe >= 20190116) +{ + packet(CMSG_NPC_BARTER_CLOSE, 0x0b12, 2, clif->pNPCBarterClosed); +} + #endif diff --git a/src/net/net.cpp b/src/net/net.cpp index 2512ecacb..03f59c2b8 100644 --- a/src/net/net.cpp +++ b/src/net/net.cpp @@ -44,6 +44,7 @@ namespace Net class AchievementHandler; class AttendanceHandler; class BankHandler; + class BarterHandler; class BattleGroundHandler; class BuyingStoreHandler; class CashShopHandler; @@ -111,6 +112,7 @@ Net::Mail2Handler *mail2Handler = nullptr; Net::MailHandler *mailHandler = nullptr; Net::MapHandler *mapHandler = nullptr; Net::MarketHandler *marketHandler = nullptr; +Net::BarterHandler *barterHandler = nullptr; Net::MercenaryHandler *mercenaryHandler = nullptr; Net::RouletteHandler *rouletteHandler = nullptr; Net::SearchStoreHandler *searchStoreHandler = nullptr; diff --git a/src/net/tmwa/barterhandler.cpp b/src/net/tmwa/barterhandler.cpp new file mode 100644 index 000000000..04fb20de3 --- /dev/null +++ b/src/net/tmwa/barterhandler.cpp @@ -0,0 +1,43 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2019 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "net/tmwa/barterhandler.h" + +#include "debug.h" + +namespace TmwAthena +{ + +BarterHandler::BarterHandler() : + Net::BarterHandler() +{ + barterHandler = this; +} + +BarterHandler::~BarterHandler() +{ + barterHandler = nullptr; +} + +void BarterHandler::close() const +{ +} + +} // namespace TmwAthena diff --git a/src/net/tmwa/barterhandler.h b/src/net/tmwa/barterhandler.h new file mode 100644 index 000000000..359e4ec72 --- /dev/null +++ b/src/net/tmwa/barterhandler.h @@ -0,0 +1,42 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2019 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NET_TMWA_BARTERHANDLER_H +#define NET_TMWA_BARTERHANDLER_H + +#include "net/barterhandler.h" + +namespace TmwAthena +{ +class BarterHandler final : public Net::BarterHandler +{ + public: + BarterHandler(); + + A_DELETE_COPY(BarterHandler) + + ~BarterHandler() override final; + + void close() const override final; +}; + +} // namespace TmwAthena + +#endif // NET_TMWA_BARTERHANDLER_H diff --git a/src/net/tmwa/generalhandler.cpp b/src/net/tmwa/generalhandler.cpp index b85c7658c..994be2ce7 100644 --- a/src/net/tmwa/generalhandler.cpp +++ b/src/net/tmwa/generalhandler.cpp @@ -55,6 +55,7 @@ #include "net/tmwa/achievementhandler.h" #include "net/tmwa/attendancehandler.h" #include "net/tmwa/bankhandler.h" +#include "net/tmwa/barterhandler.h" #include "net/tmwa/battlegroundhandler.h" #include "net/tmwa/buyingstorehandler.h" #include "net/tmwa/cashshophandler.h" @@ -114,6 +115,7 @@ GeneralHandler::GeneralHandler() : mMailHandler(new MailHandler), mMapHandler(new MapHandler), mMarketHandler(new MarketHandler), + mBarterHandler(new BarterHandler), mMercenaryHandler(new MercenaryHandler), mRouletteHandler(new RouletteHandler), mSearchStoreHandler(new SearchStoreHandler), @@ -161,6 +163,7 @@ GeneralHandler::~GeneralHandler() delete2(mMailHandler) delete2(mMapHandler) delete2(mMarketHandler) + delete2(mBarterHandler) delete2(mMercenaryHandler) delete2(mRouletteHandler) delete2(mSearchStoreHandler) diff --git a/src/net/tmwa/generalhandler.h b/src/net/tmwa/generalhandler.h index d3961fcab..b2ded08a5 100644 --- a/src/net/tmwa/generalhandler.h +++ b/src/net/tmwa/generalhandler.h @@ -28,6 +28,7 @@ namespace TmwAthena { class AdminHandler; +class BarterHandler; class BeingHandler; class BuySellHandler; class CharServerHandler; @@ -128,6 +129,7 @@ class GeneralHandler final : public Net::GeneralHandler MailHandler *mMailHandler; MapHandler *mMapHandler; MarketHandler *mMarketHandler; + BarterHandler *mBarterHandler; MercenaryHandler *mMercenaryHandler; RouletteHandler *mRouletteHandler; SearchStoreHandler *mSearchStoreHandler; -- cgit v1.2.3-70-g09d2