diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | gameserver.cbp | 1 | ||||
-rw-r--r-- | src/defines.h | 1 | ||||
-rw-r--r-- | src/game-server/gamehandler.cpp | 14 | ||||
-rw-r--r-- | src/game-server/gamehandler.hpp | 5 | ||||
-rw-r--r-- | src/game-server/movingobject.cpp | 2 |
6 files changed, 28 insertions, 1 deletions
@@ -1,3 +1,9 @@ +2008-07-24 David Athay <ko2fan@gmail.com> + + * src/defines.h, src/game-server/movingobject.cpp, + src/game-server/gamehandler.cpp, src/game-server/gamehandler.hpp, + gameserver.cbp: Added error message when NPC is too far away. + 2008-07-22 David Athay <ko2fan@gmail.com> * src/chat-server/guild.cpp, src/chat-server/guild.hpp, diff --git a/gameserver.cbp b/gameserver.cbp index e7efd0dd..c3b9edd2 100644 --- a/gameserver.cbp +++ b/gameserver.cbp @@ -92,6 +92,7 @@ <Unit filename="src/game-server/movingobject.hpp" /> <Unit filename="src/game-server/npc.cpp" /> <Unit filename="src/game-server/npc.hpp" /> + <Unit filename="src/game-server/object.hpp" /> <Unit filename="src/game-server/quest.cpp" /> <Unit filename="src/game-server/quest.hpp" /> <Unit filename="src/game-server/resourcemanager.cpp" /> diff --git a/src/defines.h b/src/defines.h index d419ce67..7e819c35 100644 --- a/src/defines.h +++ b/src/defines.h @@ -168,6 +168,7 @@ enum { GPMSG_NPC_BUY = 0x02B5, // W being id, { W item id, W amount, W cost }* GPMSG_NPC_SELL = 0x02B6, // W being id, { W item id, W amount, W cost }* PGMSG_NPC_BUYSELL = 0x02B7, // W item id, W amount + GPMSG_NPC_ERROR = 0x02B8, // B error PGMSG_TRADE_REQUEST = 0x02C0, // W being id GPMSG_TRADE_REQUEST = 0x02C1, // W being id GPMSG_TRADE_START = 0x02C2, // - diff --git a/src/game-server/gamehandler.cpp b/src/game-server/gamehandler.cpp index 0b0a795e..cfa6ad5f 100644 --- a/src/game-server/gamehandler.cpp +++ b/src/game-server/gamehandler.cpp @@ -199,7 +199,11 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) { int id = message.readShort(); MovingObject *o = findBeingNear(computer.character, id); - if (!o || o->getType() != OBJECT_NPC) break; + if (!o || o->getType() != OBJECT_NPC) + { + sendError(comp, id, "Not close enough to NPC\n"); + break; + } NPC *q = static_cast< NPC * >(o); if (message.getId() == PGMSG_NPC_SELECT) @@ -562,3 +566,11 @@ GameClient *GameHandler::getClientByNameSlow(std::string const &name) } return NULL; } + +void GameHandler::sendError(NetComputer *computer, int id, std::string errorMsg) +{ + MessageOut msg(GPMSG_NPC_ERROR); + msg.writeShort(id); + msg.writeString(errorMsg, errorMsg.size()); + computer->send(msg); +} diff --git a/src/game-server/gamehandler.hpp b/src/game-server/gamehandler.hpp index 0604ba20..4a078813 100644 --- a/src/game-server/gamehandler.hpp +++ b/src/game-server/gamehandler.hpp @@ -125,6 +125,11 @@ class GameHandler: public ConnectionHandler void computerDisconnected(NetComputer *); /** + * Send error message back to player + */ + void sendError(NetComputer *computer, int id, std::string errorMsg); + + /** * Processes messages related to core game events. */ void processMessage(NetComputer *computer, MessageIn &message); diff --git a/src/game-server/movingobject.cpp b/src/game-server/movingobject.cpp index 70334341..68f93b5a 100644 --- a/src/game-server/movingobject.cpp +++ b/src/game-server/movingobject.cpp @@ -131,6 +131,7 @@ void MovingObject::move() { PATH_NODE next = mPath.front(); mPath.pop_front(); + // 362 / 256 is square root of 2, used for walking diagonally mActionTime += (prev.x != next.x && prev.y != next.y) ? mSpeed * 362 / 256 : mSpeed; if (mPath.empty()) @@ -139,6 +140,7 @@ void MovingObject::move() pos = mDst; break; } + // position the object in the middle of the tile for pathfinding purposes pos.x = next.x * 32 + 16; pos.y = next.y * 32 + 16; } |