From ce23c2eecd596c3e83cb2d813889bf2a79dae2d0 Mon Sep 17 00:00:00 2001 From: David Athay Date: Wed, 15 Oct 2008 15:44:55 +0000 Subject: Added communicating change of direction to clients. --- src/chat-server/chathandler.cpp | 26 ++++++++++++++++++++------ src/defines.h | 2 ++ src/game-server/gamehandler.cpp | 5 +++++ src/game-server/movingobject.hpp | 2 +- src/game-server/object.hpp | 3 ++- src/game-server/state.cpp | 9 +++++++++ 6 files changed, 39 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/chat-server/chathandler.cpp b/src/chat-server/chathandler.cpp index f6f12a1..2cffbc2 100644 --- a/src/chat-server/chathandler.cpp +++ b/src/chat-server/chathandler.cpp @@ -87,17 +87,31 @@ void ChatHandler::deletePendingConnect(Pending *p) void ChatHandler::tokenMatched(ChatClient *client, Pending *p) { + MessageOut msg(CPMSG_CONNECT_RESPONSE); + client->characterName = p->character; client->accountLevel = p->level; + Character *c = storage->getCharacter(p->character); - client->characterId = c->getDatabaseID(); - delete p; - MessageOut msg(CPMSG_CONNECT_RESPONSE); - msg.writeByte(ERRMSG_OK); + + if (!c) + { + // character wasnt found + msg.writeByte(ERRMSG_FAILURE); + } + else + { + client->characterId = c->getDatabaseID(); + delete p; + + msg.writeByte(ERRMSG_OK); + + // Add chat client to player map + mPlayerMap.insert(std::pair(client->characterName, client)); + } + client->send(msg); - // Add chat client to player map - mPlayerMap.insert(std::pair(client->characterName, client)); } NetComputer *ChatHandler::computerConnected(ENetPeer *peer) diff --git a/src/defines.h b/src/defines.h index 0e7574a..9d5d99d 100644 --- a/src/defines.h +++ b/src/defines.h @@ -158,6 +158,8 @@ enum { PGMSG_WALK = 0x0260, // W*2 destination PGMSG_ACTION_CHANGE = 0x0270, // B Action GPMSG_BEING_ACTION_CHANGE = 0x0271, // W being id, B action + PGMSG_DIRECTION_CHANGE = 0x0272, // B Direction + GPMSG_BEING_DIR_CHANGE = 0x0273, // W being id, B direction GPMSG_BEINGS_MOVE = 0x0280, // { W being id, B flags [, C position, B speed] [, W*2 destination] }* GPMSG_ITEMS = 0x0281, // { W item id, W*2 position }* PGMSG_ATTACK = 0x0290, // B direction diff --git a/src/game-server/gamehandler.cpp b/src/game-server/gamehandler.cpp index 3540ac5..d406866 100644 --- a/src/game-server/gamehandler.cpp +++ b/src/game-server/gamehandler.cpp @@ -343,6 +343,11 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) } break; + case PGMSG_DIRECTION_CHANGE: + { + computer.character->setDirection(message.readByte()); + } break; + case PGMSG_DISCONNECT: { bool reconnectAccount = (bool) message.readByte(); diff --git a/src/game-server/movingobject.hpp b/src/game-server/movingobject.hpp index a81212b..025a91d 100644 --- a/src/game-server/movingobject.hpp +++ b/src/game-server/movingobject.hpp @@ -80,7 +80,7 @@ class MovingObject : public Object * Sets object direction. */ void setDirection(int direction) - { mDirection = direction; } + { mDirection = direction; raiseUpdateFlags(UPDATEFLAG_DIRCHANGE); } /** * Gets object direction. diff --git a/src/game-server/object.hpp b/src/game-server/object.hpp index 92980d0..d94e28c 100644 --- a/src/game-server/object.hpp +++ b/src/game-server/object.hpp @@ -36,7 +36,8 @@ enum UPDATEFLAG_NEW_DESTINATION = 2, UPDATEFLAG_ATTACK = 4, UPDATEFLAG_ACTIONCHANGE = 8, - UPDATEFLAG_LOOKSCHANGE = 16 + UPDATEFLAG_LOOKSCHANGE = 16, + UPDATEFLAG_DIRCHANGE = 32 }; /** diff --git a/src/game-server/state.cpp b/src/game-server/state.cpp index a129e88..8beb089 100644 --- a/src/game-server/state.cpp +++ b/src/game-server/state.cpp @@ -216,6 +216,15 @@ static void informPlayer(MapComposite *map, Character *p) gameHandler->sendTo(p, LooksMsg); } + // Send direction change messages. + if (oflags & UPDATEFLAG_DIRCHANGE) + { + MessageOut DirMsg(GPMSG_BEING_DIR_CHANGE); + DirMsg.writeShort(oid); + DirMsg.writeByte(o->getDirection()); + gameHandler->sendTo(p, DirMsg); + } + // Send damage messages. if (o->canFight()) { -- cgit