--- deliantra/server/common/object.C 2006/12/26 10:51:52 1.91 +++ deliantra/server/common/object.C 2006/12/26 20:04:09 1.93 @@ -791,10 +791,16 @@ * if some form of movement is allowed, let objects * drop on that space. */ - if (!drop_to_ground || !map || map->in_memory != MAP_IN_MEMORY || GET_MAP_MOVE_BLOCK (map, x, y) == MOVE_ALL) + if (!drop_to_ground + || !map + || map->in_memory != MAP_IN_MEMORY + || map->at (x, y).move_block == MOVE_ALL) { while (inv) - inv->destroy (); + { + inv->destroy_inv (drop_to_ground); + inv->destroy (); + } } else { /* Put objects in inventory onto this space */ @@ -809,12 +815,7 @@ || op->flag [FLAG_IS_A_TEMPLATE]) op->destroy (); else - { - op->remove (); - op->x = x; - op->y = y; - insert_ob_in_map (op, map, 0, 0); /* Insert in same map as the envir */ - } + map->insert (op, x, y); } } } @@ -841,12 +842,13 @@ if (flag [FLAG_FREED]) return; + set_speed (0); + flag [FLAG_FREED] = 1; attachable::do_destroy (); destroy_inv (true); - set_speed (0); unlink (); // hack to ensure that freed objects still have a valid map @@ -1112,12 +1114,7 @@ object * insert_ob_in_map_at (object *op, maptile *m, object *originator, int flag, int x, int y) { - object *tmp; - - if (op->head) - op = op->head; - - for (tmp = op; tmp; tmp = tmp->more) + for (object *tmp = op->head_ (); tmp; tmp = tmp->more) { tmp->x = x + tmp->arch->clone.x; tmp->y = y + tmp->arch->clone.y; @@ -1441,6 +1438,12 @@ insert_ob_in_map (tmp1, op->map, op, 0); } +object * +object::insert_at (object *where, object *originator, int flags) +{ + where->map->insert (this, where->x, where->y, originator, flags); +} + /* * get_split_ob(ob,nr) splits up ob into two parts. The part which * is returned contains nr objects, and the remaining parts contains @@ -1448,7 +1451,6 @@ * On failure, NULL is returned, and the reason put into the * global static errmsg array. */ - object * get_split_ob (object *orig_ob, uint32 nr) { @@ -1722,7 +1724,6 @@ * object being inserted. insert_ob_in_map may not put new objects * on top. */ - int check_move_on (object *op, object *originator) {