The pre and post exit functions are (were) hooks. If the function exists in the room, the movement code will call it before (or after) the move happens. The idea is that you shouldn't HAVE to capture or override anything, as that's inconsistent if different coders do it in different ways.
DS2 does things a little different than I remember, but it's in /domains/examples/room/exroom4.c and is documented in /doc/manual/chapter25.
Essentially, you add functions as closures when you use AddExit(), rather than having the move code look for the function itself.... same result, but more explicit.
Soooo... if you want "north" to only work when some condition is met you would add a pre-exit function to the addexit() call for the north exit, and that function would return false unless your condition is met, then it returns true. The movement code should call the function whenever anyone tries to use the exit, and if a false is returned, it won't do the move.
Someone who is actually using the mudlib might want to clarify or correct me here... I'm going from skimming the docs.
