[crossfire] Changing maps from under a running server

Kari Pahula kaol at iki.fi
Fri Mar 24 07:04:52 CST 2006


I tried replacing maps while the server was running, with less than
spectacular results.  I ended up with having all the exits leading to
areas that were not in the server's memory to be closed.  YMMV and you
might end up with a less broken server state, but basically there are
no guarantees currently about what will happen.

One possibility to handle this is to open everything under maps/ on
server startup and just give file descriptors from that pool to the
server whenever it wants to read maps from there.  The inodes will
remain open until the file descriptors are closed and it'll be
possible to replace or even remove altogether the maps while the
server is running and the server won't notice a thing.

This would make changing the mapsets happen smoothly.  Still, there is
a need to make the server use the new maps without restarting.

As far as I can see there isn't really any way to transparently,
reliably and automatically transfer players to the new mapset from the
old one.  The simplest thing to do would be to immediately teleport
all the players to Scorn (or some other known place) and purge the old
maps from memory and close the file handles.  But that hardly would go
well with players.

An idea I got was to have a DM command (or something like that) which
would insert an undroppable portal in all player's inventories.
Activating that would remove the portal and teleport the player to the
new mapset.  The file descriptors of the old maps would be closed when
the last player had used the portal.  Perhaps the players could be
made to gain no exp while on the expired maps to add an incentive to
vacate them...  But that's details.

Any comments about this before I start writing a patch?  Does this
sound like a viable plan?  It doesn't sound like the most trivial
thing to implement...



More information about the crossfire mailing list