summaryrefslogtreecommitdiff
path: root/src/game-server/gamehandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server/gamehandler.cpp')
-rw-r--r--src/game-server/gamehandler.cpp38
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");