summaryrefslogtreecommitdiffstats
path: root/src/game-server/state.cpp
diff options
context:
space:
mode:
authorGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-01-05 10:46:21 +0000
committerGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-01-05 10:46:21 +0000
commit9c0a75240812ae7d5f4836ee4b558086e383670a (patch)
tree59842024f000d8853deed733fbfefc523ba52d04 /src/game-server/state.cpp
parentdbbc5a744bb687a9e9098de1204a553faaef5b49 (diff)
downloadmanaserv-9c0a75240812ae7d5f4836ee4b558086e383670a.tar.gz
manaserv-9c0a75240812ae7d5f4836ee4b558086e383670a.tar.xz
manaserv-9c0a75240812ae7d5f4836ee4b558086e383670a.zip
Ensured player data are updated before being sent to the account server.
Diffstat (limited to 'src/game-server/state.cpp')
-rw-r--r--src/game-server/state.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/game-server/state.cpp b/src/game-server/state.cpp
index 62e867a..58949ce 100644
--- a/src/game-server/state.cpp
+++ b/src/game-server/state.cpp
@@ -286,18 +286,25 @@ void State::update()
case EVENT_WARP:
{
remove(o);
- o->setMapId(e.map);
Point pos = { e.x, e.y };
+ o->setMapId(e.map);
o->setPosition(pos);
+
+ assert(o->getType() == OBJECT_PLAYER);
+ Player *p = static_cast< Player * >(o);
+ /* Force update of persistent data on map change, so that
+ players can respawn at the start of the map after a death or
+ a disconnection. */
+ p->setMap(e.map);
+ p->setPos(pos);
+ accountHandler->sendPlayerData(p);
+
if (mapManager->isActive(e.map))
{
insert(o);
}
else
{
- assert(o->getType() == OBJECT_PLAYER);
- Player *p = static_cast< Player * >(o);
- accountHandler->sendPlayerData(p);
MessageOut msg(GAMSG_REDIRECT);
msg.writeLong(p->getDatabaseID());
accountHandler->send(msg);