SYNOPSIS
        mixed prepare_destruct(object obj)

DESCRIPTION
        Prepare the destruction of the object obj. Return 0 if the
        object is ready for destruction, any other value will abort
        the attempt. If a string is returned, an error with the string
        as message will be issued.

        The interpreter calls this function whenever an object shall
        be destructed. It expects, that this function cleans the
        inventory of the object, or the destruct will fail. It is also
        recommended to clean up all shadows on obj at this point.

        Furthermore, the function could notify the former inventory
        objects that their holder is under destruction (useful to move
        users out of rooms which are updated); and it could announce
        systemwide the destruction(quitting) of users.

        Another use for this apply is to take care of any other
        'cleanup' work needed to be done, like adjusting weights,
        light levels, and such. Alternatively and traditionally this
        is done by calling an lfun 'remove()' in the object, which
        then calls the efun destruct() after performing all the
        adjustments.

        Strange things will happen if the master object does not
        provide this function or implements it incorrectly.

SEE ALSO
        remove_player(M), destruct(E)
