/**
 * This command makes an exact duplicate of an object.
 */
#include <creator.h>
inherit COMMAND_BASE;
/** @ignore yes */
private int cmd( object *obs ) {
    string file;
    object ob, new_ob;
    mixed static_arg, dynamic_arg;
    foreach( ob in obs ) {
        if( !objectp(ob) )
            continue;
        if( !clonep(ob) ) {
            write("Failed to duplicate "+ob->short()+" (not a clone).\n");
            continue;
        }
        file = base_name(ob);
        static_arg = ob->query_static_auto_load();
        dynamic_arg = ob->query_dynamic_auto_load();
        new_ob = clone_object(file);
        if( new_ob ) {
            if( static_arg )
                new_ob->init_static_arg( copy(static_arg) );
            if( dynamic_arg )
                new_ob->init_dynamic_arg( copy(dynamic_arg) );
        }
        if( !new_ob ) {
            write("Failed to duplicate "+ob->short()+" for some reason.\n");
            continue;
        }
        if( !new_ob->move(TP) ) {
            write( new_ob->short()+" duplicated and put in you.\n");
            continue;
        }
        if( !new_ob->move(ENV(TP)) ) {
            write( new_ob->short()+" duplicated and put in here.\n");
            continue;
        }
        if( !new_ob->move("/room/broken") ) {
            write( new_ob->short()+" duplicated and put in /room/broken.\n");
            continue;
        }
        write("Couldn't find any place to put "+new_ob->short()+" in!\n");
        new_ob->move("/room/rubbish");
    }
    return 1;
} /* cmd() */
/** @ignore yes */
mixed query_patterns() {
   return ({"<indirect:wiz-present>", (: cmd($1) :) });
} /* query_patterns() */