summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--gameserver.cbp1
-rw-r--r--src/defines.h1
-rw-r--r--src/game-server/gamehandler.cpp14
-rw-r--r--src/game-server/gamehandler.hpp5
-rw-r--r--src/game-server/movingobject.cpp2
6 files changed, 28 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 0212452..1c183ea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 e7efd0d..c3b9edd 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 d419ce6..7e819c3 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 0b0a795..cfa6ad5 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 0604ba2..4a07881 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 7033434..68f93b5 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;
}