diff options
Diffstat (limited to 'src/game-server/gamehandler.cpp')
-rw-r--r-- | src/game-server/gamehandler.cpp | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/src/game-server/gamehandler.cpp b/src/game-server/gamehandler.cpp index e1257e71..8010374b 100644 --- a/src/game-server/gamehandler.cpp +++ b/src/game-server/gamehandler.cpp @@ -32,6 +32,7 @@ #include "game-server/itemmanager.hpp" #include "game-server/map.hpp" #include "game-server/mapcomposite.hpp" +#include "game-server/npc.hpp" #include "game-server/state.hpp" #include "net/messagein.hpp" #include "net/messageout.hpp" @@ -142,6 +143,36 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) GameState::sayAround(computer.character, say); } break; + case PGMSG_NPC_TALK: + case PGMSG_NPC_TALK_NEXT: + case PGMSG_NPC_SELECT: + { + int id = message.readShort(); + MapComposite *map = computer.character->getMap(); + MovingObject *o = NULL; + Point ppos = computer.character->getPosition(); + // TODO: use a less arbitrary value. + for (MovingObjectIterator i(map->getAroundPointIterator(ppos, 48)); i; ++i) + { + if ((*i)->getPublicID() == id) + { + o = *i; + break; + } + } + if (!o || o->getType() != OBJECT_NPC) break; + + NPC *q = static_cast< NPC * >(o); + if (message.getId() == PGMSG_NPC_SELECT) + { + q->select(computer.character, message.readByte()); + } + else + { + q->prompt(computer.character, message.getId() == PGMSG_NPC_TALK); + } + } break; + case PGMSG_PICKUP: { int x = message.readShort(); @@ -258,7 +289,11 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) computer.character = NULL; computer.status = CLIENT_LOGIN; } break; - + + +// The following messages should be handled by the chat server, not the game server. +#if 0 + case PGMSG_GUILD_CREATE: { std::string name = message.readString(); @@ -299,6 +334,7 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) messageMap[characterId] = computer.character; accountHandler->quitGuild(characterId, guildId); } break; +#endif default: LOG_WARN("Invalid message type"); |