diff -BbuprN -x '*.o' esong-test/src/act.other.c esong-dev/src/act.other.c
--- esong-test/src/act.other.c	2003-10-26 16:03:01.000000000 -0600
+++ esong-dev/src/act.other.c	2003-11-28 12:04:11.000000000 -0600
@@ -31,6 +31,7 @@ extern const char *class_abbrevs[];
 extern const char *race_abbrevs[];
 extern int xap_objs;
 extern struct auction_data current_auction;    /* Auction information */
+extern room_rnum r_mortal_start_room;
 
 /* extern procedures */
 void list_skills(struct char_data *ch);
@@ -78,6 +78,10 @@ ACMD(do_quit)
   else if (GET_POS(ch) < POS_STUNNED) {
     send_to_char(ch, "You die before your time...\r\n");
     die(ch, NULL);
+  } else if (GET_LEVEL(ch) < LVL_IMMORT && 
+             !ROOM_FLAGGED(IN_ROOM(ch), ROOM_HOUSE) &&
+             (world[r_mortal_start_room].zone != world[IN_ROOM(ch)].zone)) {
+    send_to_char(ch, "You can't quit if you are not within your home town.\r\n");
   } else {
     act("$n has left the game.", TRUE, ch, 0, 0, TO_ROOM);
     mudlog(NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE, "%s has quit the game.", GET_NAME(ch));

