summaryrefslogtreecommitdiff
path: root/src/net/ea/npchandler.cpp
diff options
context:
space:
mode:
authorJared Adams <jaxad0127@gmail.com>2009-03-31 15:11:26 -0600
committerJared Adams <jaxad0127@gmail.com>2009-03-31 15:11:26 -0600
commit37432edac65a6b85c7a3414a421f2afd3e67a14e (patch)
treea4dc561371fab9d1800aec72960d7f86a1e88135 /src/net/ea/npchandler.cpp
parent2c5f308192d18b5447a5b0e2ee3428984c1f1b78 (diff)
downloadmana-37432edac65a6b85c7a3414a421f2afd3e67a14e.tar.gz
mana-37432edac65a6b85c7a3414a421f2afd3e67a14e.tar.bz2
mana-37432edac65a6b85c7a3414a421f2afd3e67a14e.tar.xz
mana-37432edac65a6b85c7a3414a421f2afd3e67a14e.zip
Add first draft of net handlers
eAthena NPC handler has been implemented and is being used for NPC interraction.
Diffstat (limited to 'src/net/ea/npchandler.cpp')
-rw-r--r--src/net/ea/npchandler.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/net/ea/npchandler.cpp b/src/net/ea/npchandler.cpp
index 0e0bc53d..136f07fd 100644
--- a/src/net/ea/npchandler.cpp
+++ b/src/net/ea/npchandler.cpp
@@ -24,6 +24,7 @@
#include "net/ea/protocol.h"
#include "net/messagein.h"
+#include "net/messageout.h"
#include "beingmanager.h"
#include "localplayer.h"
@@ -36,6 +37,8 @@
#include <SDL_types.h>
+NPCHandler *npcHandler;
+
NPCHandler::NPCHandler()
{
static const Uint16 _messages[] = {
@@ -48,6 +51,7 @@ NPCHandler::NPCHandler()
0
};
handledMessages = _messages;
+ npcHandler = this;
}
void NPCHandler::handleMessage(MessageIn &msg)
@@ -114,3 +118,77 @@ void NPCHandler::handleMessage(MessageIn &msg)
break;
}
}
+
+void NPCHandler::talk(int npcId)
+{
+ MessageOut outMsg(CMSG_NPC_TALK);
+ outMsg.writeInt32(npcId);
+ outMsg.writeInt8(0); // Unused
+}
+
+void NPCHandler::nextDialog(int npcId)
+{
+ MessageOut outMsg(CMSG_NPC_NEXT_REQUEST);
+ outMsg.writeInt32(npcId);
+}
+
+void NPCHandler::closeDialog(int npcId)
+{
+ MessageOut outMsg(CMSG_NPC_CLOSE);
+ outMsg.writeInt32(npcId);
+}
+
+void NPCHandler::listInput(int npcId, int value)
+{
+ MessageOut outMsg(CMSG_NPC_LIST_CHOICE);
+ outMsg.writeInt32(npcId);
+ outMsg.writeInt8(value);
+}
+
+void NPCHandler::integerInput(int npcId, int value)
+{
+ MessageOut outMsg(CMSG_NPC_INT_RESPONSE);
+ outMsg.writeInt32(npcId);
+ outMsg.writeInt32(value);
+}
+
+void NPCHandler::stringInput(int npcId, const std::string &value)
+{
+ MessageOut outMsg(CMSG_NPC_STR_RESPONSE);
+ outMsg.writeInt16(value.length() + 9);
+ outMsg.writeInt32(npcId);
+ outMsg.writeString(value, value.length());
+ outMsg.writeInt8(0); // Prevent problems with string reading
+}
+
+void NPCHandler::buy(int beingId)
+{
+
+ MessageOut outMsg(CMSG_NPC_BUY_SELL_REQUEST);
+ outMsg.writeInt32(beingId);
+ outMsg.writeInt8(0); // Buy
+}
+
+void NPCHandler::sell(int beingId)
+{
+
+ MessageOut outMsg(CMSG_NPC_BUY_SELL_REQUEST);
+ outMsg.writeInt32(beingId);
+ outMsg.writeInt8(1); // Sell
+}
+
+void NPCHandler::buyItem(int beingId, int itemId, int amount)
+{
+ MessageOut outMsg(CMSG_NPC_BUY_REQUEST);
+ outMsg.writeInt16(8); // One item (length of packet)
+ outMsg.writeInt16(amount);
+ outMsg.writeInt16(itemId);
+}
+
+void NPCHandler::sellItem(int beingId, int itemId, int amount)
+{
+ MessageOut outMsg(CMSG_NPC_SELL_REQUEST);
+ outMsg.writeInt16(8); // One item (length of packet)
+ outMsg.writeInt16(itemId + 2);
+ outMsg.writeInt16(amount);
+}