--- deliantra/server/common/map.C 2007/08/30 05:24:14 1.122 +++ deliantra/server/common/map.C 2007/09/07 18:03:31 1.127 @@ -410,28 +410,6 @@ } bool -maptile::_load_objects (const char *path, bool skip_header) -{ - object_thawer f (path); - - if (!f) - return false; - - f.next (); - - if (skip_header) - for (;;) - { - keyword kw = f.kw; - f.skip (); - if (kw == KW_end) - break; - } - - return _load_objects (f); -} - -bool maptile::_save_objects (const char *path, int flags) { object_freezer freezer; @@ -613,8 +591,6 @@ { for (;;) { - thawer.next (); - switch (thawer.kw) { case KW_msg: @@ -679,10 +655,11 @@ case KW_tile_path_4: thawer.get (tile_path [3]); break; case KW_ERROR: - set_key (thawer.kw_str, thawer.value); + set_key_text (thawer.kw_str, thawer.value); break; case KW_end: + thawer.next (); return true; default: @@ -690,22 +667,13 @@ return false; break; } + + thawer.next (); } abort (); } -bool -maptile::_load_header (const char *path) -{ - object_thawer thawer (path); - - if (!thawer) - return false; - - return _load_header (thawer); -} - /****************************************************************************** * This is the start of unique map handling code *****************************************************************************/ @@ -812,17 +780,22 @@ void maptile::clear () { - sfree (regions, size ()); regions = 0; - delete [] regionmap; regionmap = 0; - if (spaces) { for (mapspace *ms = spaces + size (); ms-- > spaces; ) while (object *op = ms->bot) { - op = op->head_ (); - op->destroy_inv (false); - op->destroy (); + // manually remove, as to not trigger anything + if (ms->bot = op->above) + ms->bot->below = 0; + + op->flag [FLAG_REMOVED] = true; + + if (op == op->head_ ()) + { + op->destroy_inv (false); + op->destroy (); + } } sfree (spaces, size ()), spaces = 0; @@ -830,6 +803,9 @@ if (buttons) free_objectlinkpt (buttons), buttons = 0; + + sfree (regions, size ()); regions = 0; + delete [] regionmap; regionmap = 0; } void @@ -1630,11 +1606,11 @@ return; for_all_players (pl) - if (pl->ob->map == this) + if (pl->observe->map == this) if (client *ns = pl->ns) { - int dx = x - pl->ob->x; - int dy = y - pl->ob->y; + int dx = x - pl->observe->x; + int dy = y - pl->observe->y; int distance = idistance (dx, dy);