From 24902ba328260cb496c62e236a644ebb990e3fd4 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 1 Feb 2017 01:13:14 +0300 Subject: Store interacted npc type before buy or talk and send it to buy dialog. --- src/actions/actions.cpp | 2 +- src/being/being.cpp | 2 +- src/gui/windows/buyselldialog.cpp | 9 ++++++++- src/net/eathena/npchandler.cpp | 16 ++++++++++++---- src/net/eathena/npchandler.h | 4 ++-- src/net/npchandler.h | 5 +++-- src/net/tmwa/npchandler.cpp | 12 ++++++++---- src/net/tmwa/npchandler.h | 4 ++-- 8 files changed, 37 insertions(+), 17 deletions(-) diff --git a/src/actions/actions.cpp b/src/actions/actions.cpp index 5deca7e95..7f1e37104 100644 --- a/src/actions/actions.cpp +++ b/src/actions/actions.cpp @@ -727,7 +727,7 @@ impHandler(buy) if (being->getType() == ActorType::Npc) { if (npcHandler) - npcHandler->buy(being->getId()); + npcHandler->buy(being); return true; } else if (being->getType() == ActorType::Player) diff --git a/src/being/being.cpp b/src/being/being.cpp index 817fcca70..9a86c26cb 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -3517,7 +3517,7 @@ void Being::talkTo() const restrict2 return; } - npcHandler->talk(mId); + npcHandler->talk(this); } void Being::drawPlayer(Graphics *restrict const graphics, diff --git a/src/gui/windows/buyselldialog.cpp b/src/gui/windows/buyselldialog.cpp index 26a8506d2..6969b8fc0 100644 --- a/src/gui/windows/buyselldialog.cpp +++ b/src/gui/windows/buyselldialog.cpp @@ -22,6 +22,8 @@ #include "gui/windows/buyselldialog.h" +#include "actormanager.h" + #include "net/buysellhandler.h" #include "net/npchandler.h" @@ -129,9 +131,14 @@ void BuySellDialog::action(const ActionEvent &event) if (eventId == "Buy") { if (mNpcId != BeingId_negOne) - npcHandler->buy(mNpcId); + { + const Being *const being = actorManager->findBeing(mNpcId); + npcHandler->buy(being); + } else + { buySellHandler->requestSellList(mNick); + } } else if (eventId == "Sell") { diff --git a/src/net/eathena/npchandler.cpp b/src/net/eathena/npchandler.cpp index f5b06ff29..f8041940c 100644 --- a/src/net/eathena/npchandler.cpp +++ b/src/net/eathena/npchandler.cpp @@ -35,6 +35,8 @@ #include "net/ea/npcrecv.h" #include "net/eathena/messageout.h" +#include "net/eathena/npcrecv.h" + #include "net/eathena/protocolout.h" #include "resources/item/shopitem.h" @@ -52,11 +54,14 @@ NpcHandler::NpcHandler() : npcHandler = this; } -void NpcHandler::talk(const BeingId npcId) const +void NpcHandler::talk(const Being *const being) const { + if (!being) + return; createOutPacket(CMSG_NPC_TALK); - outMsg.writeBeingId(npcId, "npc id"); + outMsg.writeBeingId(being->getId(), "npc id"); outMsg.writeInt8(0, "unused"); + EAthena::NpcRecv::mNpcTypeId = being->getSubType(); } void NpcHandler::nextDialog(const BeingId npcId) const @@ -108,11 +113,14 @@ void NpcHandler::stringInput(const BeingId npcId, outMsg.writeInt8(0, "null byte"); } -void NpcHandler::buy(const BeingId beingId) const +void NpcHandler::buy(const Being *const being) const { + if (!being) + return; createOutPacket(CMSG_NPC_BUY_SELL_REQUEST); - outMsg.writeBeingId(beingId, "npc id"); + outMsg.writeBeingId(being->getId(), "npc id"); outMsg.writeInt8(0, "action"); + EAthena::NpcRecv::mNpcTypeId = being->getSubType(); } void NpcHandler::sell(const BeingId beingId) const diff --git a/src/net/eathena/npchandler.h b/src/net/eathena/npchandler.h index 4c758a7a2..d13d0f0cc 100644 --- a/src/net/eathena/npchandler.h +++ b/src/net/eathena/npchandler.h @@ -35,7 +35,7 @@ class NpcHandler final : public Ea::NpcHandler A_DELETE_COPY(NpcHandler) - void talk(const BeingId npcId) const override final; + void talk(const Being *const being) const override final; void nextDialog(const BeingId npcId) const override final; @@ -50,7 +50,7 @@ class NpcHandler final : public Ea::NpcHandler void stringInput(const BeingId npcId, const std::string &value) const override final; - void buy(const BeingId beingId) const override final; + void buy(const Being *const being) const override final; void sell(const BeingId beingId) const override final; diff --git a/src/net/npchandler.h b/src/net/npchandler.h index 5ef65d1f6..040b191a9 100644 --- a/src/net/npchandler.h +++ b/src/net/npchandler.h @@ -36,6 +36,7 @@ #include "localconsts.h" +class Being; class NpcDialog; class ShopItem; @@ -58,7 +59,7 @@ class NpcHandler notfinal virtual BeingId getNpc(Net::MessageIn &msg, const NpcActionT action) = 0; - virtual void talk(const BeingId npcId) const = 0; + virtual void talk(const Being *const being) const = 0; virtual void nextDialog(const BeingId npcId) const = 0; @@ -73,7 +74,7 @@ class NpcHandler notfinal virtual void stringInput(const BeingId npcId, const std::string &value) const = 0; - virtual void buy(const BeingId beingId) const = 0; + virtual void buy(const Being *const being) const = 0; virtual void sell(const BeingId beingId) const = 0; diff --git a/src/net/tmwa/npchandler.cpp b/src/net/tmwa/npchandler.cpp index 2db9527a3..b892e152a 100644 --- a/src/net/tmwa/npchandler.cpp +++ b/src/net/tmwa/npchandler.cpp @@ -50,10 +50,12 @@ NpcHandler::NpcHandler() : npcHandler = this; } -void NpcHandler::talk(const BeingId npcId) const +void NpcHandler::talk(const Being *const being) const { + if (!being) + return; createOutPacket(CMSG_NPC_TALK); - outMsg.writeBeingId(npcId, "npc id"); + outMsg.writeBeingId(being->getId(), "npc id"); outMsg.writeInt8(0, "unused"); } @@ -106,10 +108,12 @@ void NpcHandler::stringInput(const BeingId npcId, outMsg.writeInt8(0, "null byte"); } -void NpcHandler::buy(const BeingId beingId) const +void NpcHandler::buy(const Being *const being) const { + if (!being) + return; createOutPacket(CMSG_NPC_BUY_SELL_REQUEST); - outMsg.writeBeingId(beingId, "npc id"); + outMsg.writeBeingId(being->getId(), "npc id"); outMsg.writeInt8(0, "action"); } diff --git a/src/net/tmwa/npchandler.h b/src/net/tmwa/npchandler.h index fa635b332..f54c6911d 100644 --- a/src/net/tmwa/npchandler.h +++ b/src/net/tmwa/npchandler.h @@ -35,7 +35,7 @@ class NpcHandler final : public Ea::NpcHandler A_DELETE_COPY(NpcHandler) - void talk(const BeingId npcId) const override final; + void talk(const Being *const being) const override final; void nextDialog(const BeingId npcId) const override final; @@ -50,7 +50,7 @@ class NpcHandler final : public Ea::NpcHandler void stringInput(const BeingId npcId, const std::string &value) const override final; - void buy(const BeingId beingId) const override final; + void buy(const Being *const being) const override final; void sell(const BeingId beingId) const override final; -- cgit v1.2.3-60-g2f50