'Uses ObjManipCommand.parse()'

def func(self):

    caller = self.caller
    args = self.args
    if (not args):
        caller.msg('Usage:    @copy    <obj>    [=<new_name>[;alias;alias..]][:<new_location>]    [,    <new_name2>...]')
        return
    if (not self.rhs):
        from_obj_name = self.args
        from_obj = caller.search(from_obj_name)
        if (not from_obj):
            return
        to_obj_name = ('%s_copy' % from_obj_name)
        to_obj_aliases = [('%s_copy' % alias) for alias in from_obj.aliases.all()]
        copiedobj = ObjectDB.objects.copy_object(from_obj, new_key=to_obj_name, new_aliases=to_obj_aliases)
        if copiedobj:
            string = ("Identical    copy    of    %s,    named    '%s'    was    created." % (from_obj_name, to_obj_name))
        else:
            string = 'There    was    an    error    copying    %s.'
    else:
        from_obj_name = self.lhs_objs[0]['name']
        from_obj = caller.search(from_obj_name)
        if (not from_obj):
            return
        for objdef in self.rhs_objs:
            to_obj_name = objdef['name']
            to_obj_aliases = objdef['aliases']
            to_obj_location = objdef['option']
            if to_obj_location:
                to_obj_location = caller.search(to_obj_location, global_search=True)
                if (not to_obj_location):
                    return
            copiedobj = ObjectDB.objects.copy_object(from_obj, new_key=to_obj_name, new_location=to_obj_location, new_aliases=to_obj_aliases)
            if copiedobj:
                string = ("Copied    %s    to    '%s'    (aliases:    %s)." % (from_obj_name, to_obj_name, to_obj_aliases))
            else:
                string = ("There    was    an    error    copying    %s    to    '%s'." % (from_obj_name, to_obj_name))
    caller.msg(string)
