diff options
author | Jared Adams <jaxad0127@gmail.com> | 2009-03-31 15:11:26 -0600 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2009-03-31 15:11:26 -0600 |
commit | 37432edac65a6b85c7a3414a421f2afd3e67a14e (patch) | |
tree | a4dc561371fab9d1800aec72960d7f86a1e88135 /src/net/ea | |
parent | 2c5f308192d18b5447a5b0e2ee3428984c1f1b78 (diff) | |
download | mana-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')
-rw-r--r-- | src/net/ea/npchandler.cpp | 78 | ||||
-rw-r--r-- | src/net/ea/npchandler.h | 25 |
2 files changed, 102 insertions, 1 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); +} diff --git a/src/net/ea/npchandler.h b/src/net/ea/npchandler.h index 8c252175..71e15e02 100644 --- a/src/net/ea/npchandler.h +++ b/src/net/ea/npchandler.h @@ -23,13 +23,36 @@ #define NET_EA_NPCHANDLER_H #include "net/messagehandler.h" +#include "net/net.h" -class NPCHandler : public MessageHandler +class NPCHandler : public MessageHandler, public Net::NpcHandler { public: NPCHandler(); void handleMessage(MessageIn &msg); + + void talk(int npcId); + + void nextDialog(int npcId); + + void closeDialog(int npcId); + + void listInput(int npcId, int value); + + void integerInput(int npcId, int value); + + void stringInput(int npcId, const std::string &value); + + void buy(int beingId); + + void sell(int beingId); + + void buyItem(int beingId, int itemId, int amount); + + void sellItem(int beingId, int itemId, int amount); }; +extern NPCHandler *npcHandler; + #endif // NET_EA_NPCHANDLER_H |