--- deliantra/server/common/object.C 2008/04/30 08:29:31 1.223 +++ deliantra/server/common/object.C 2008/05/02 20:28:44 1.225 @@ -608,13 +608,11 @@ object & object::operator =(const object &src) { - bool is_freed = flag [FLAG_FREED]; - bool is_removed = flag [FLAG_REMOVED]; + remove (); *(object_copy *)this = src; - flag [FLAG_FREED] = is_freed; - flag [FLAG_REMOVED] = is_removed; + flag [FLAG_REMOVED] = true; /* Copy over key_values, if any. */ if (src.key_values) @@ -688,6 +686,7 @@ { object *neu = create (); copy_to (neu); + neu->map = map; // not copied by copy_to return neu; } @@ -2328,17 +2327,18 @@ object * object_create_clone (object *asrc) { - object *dst = 0, *tmp, *src, *prev, *item; + object *dst = 0; if (!asrc) return 0; - src = asrc->head_ (); + object *src = asrc->head_ (); - prev = 0; + object *prev = 0; for (object *part = src; part; part = part->more) { - tmp = part->clone (); + object *tmp = part->clone (); + tmp->x -= src->x; tmp->y -= src->y; @@ -2358,7 +2358,7 @@ prev = tmp; } - for (item = src->inv; item; item = item->below) + for (object *item = src->inv; item; item = item->below) insert_ob_in_ob (object_create_clone (item), dst); return dst;