--- deliantra/server/common/map.C 2006/12/12 20:53:02 1.39 +++ deliantra/server/common/map.C 2006/12/12 21:39:56 1.40 @@ -534,7 +534,7 @@ int unique; object *op, *prev = NULL, *last_more = NULL, *otmp; - op = get_object (); + op = object::create (); op->map = m; /* To handle buttons correctly */ while ((i = load_object (fp, op, mapflags))) @@ -574,7 +574,7 @@ if (mapflags & MAP_STYLE) remove_from_active_list (op); - op = get_object (); + op = object::create (); op->map = m; } @@ -594,7 +594,7 @@ } } - op->destroy (0); + op->destroy (); link_multipart_objects (m); } @@ -1300,18 +1300,22 @@ for (j = 0; j < MAP_HEIGHT (m); j++) { unique = 0; + for (op = get_map_ob (m, i, j); op; op = next) { next = op->above; + if (QUERY_FLAG (op, FLAG_IS_FLOOR) && QUERY_FLAG (op, FLAG_UNIQUE)) unique = 1; + if (op->head == NULL && (QUERY_FLAG (op, FLAG_UNIQUE) || unique)) { clean_object (op); + if (QUERY_FLAG (op, FLAG_IS_LINKED)) remove_button_link (op); - op->remove (); - op->destroy (0); + + op->destroy (); } } } @@ -1516,11 +1520,12 @@ for (tmp = op->inv; tmp; tmp = next) { next = tmp->below; + clean_object (tmp); if (QUERY_FLAG (tmp, FLAG_IS_LINKED)) remove_button_link (tmp); - tmp->remove (); - tmp->destroy (0); + + tmp->destroy (); } } @@ -1546,7 +1551,9 @@ LOG (llevDebug, "free_all_objects: Link error, bailing out.\n"); break; } + previous_obj = op; + if (op->head != NULL) op = op->head; @@ -1555,8 +1562,8 @@ */ if (m->in_memory == MAP_IN_MEMORY) clean_object (op); - op->remove (); - op->destroy (0); + + op->destroy (); } } }