SYNOPSIS (DEPRECATED)

int transfer( object item, object dest)

DESCRIPTION

This efun is for backward compatibility only. It is only available in compat mode.

Move the object item to the object dest. All kinds of tests are done, and a number is returned specifying the result:

0: Success. 1: Too heavy for destination. 2: Can’t be dropped. 3: Can’t take it out of it’s container. 4: The object can’t be inserted into bags etc. 5: The destination doesn’t allow insertions of objects. 6: The object can’t be picked up.

If an object is transfered to a newly created object, make sure that the new object first is transfered to its destination.

The efun calls add_weight(A), drop(A), get(A), prevent_insert(A), add_weight(A), and can_put_and_get(A) where needed.

replacement simul_efun

This efun can easily be replaced with a simul_efun:

/*--------------------------------------------------------*/
int transfer(object item, object dest)
{
    int weight;
    object from;

    efun::set_this_object(previous_object());

    weight = item->query_weight();
    if (!item)
        return 3;

    from = environment(item);
    if (from)
    {
        /*
         * If the original place of the object is a living object,
         * then we must call drop() to check that the object can be
         * dropped.
         */
        if (living(from))
        {
            if (item->drop() || !item)
                return 2;
        }
        /*
         * If 'from' is not a room and not a player, check that we may
         * remove things out of it.
         */
        else if (environment(from))
        {
            if (!from->can_put_and_get() || !from)
                return 3;
        }
    }

    /*
     * If the destination is not a room, and not a player,
     * Then we must test 'prevent_insert', and 'can_put_and_get'.
     */
    if (environment(dest) && !living(dest))
    {
        if (item->prevent_insert())
            return 4;
        if (!dest->can_put_and_get() || !dest)
            return 5;
    }

    if (living(dest))
    {
        if (!item->get() || !item)
            return 6;
    }

    /*
     * If it is not a room, correct the total weight in the
     * destination.
     */
    if (environment(dest) && weight)
    {
        if (!dest->add_weight(weight) || !dest)
            return 1;
    }

    /*
     * If it is not a room, correct the weight in the 'from' object.
     */
    if (from && environment(from) && weight)
    {
        from->add_weight(-weight);
    }

    move_object(item, dest);

    return 0;
}
/*--------------------------------------------------------*/

HISTORY

  • deprecated (3.3) – available only when compiled with USE_DEPRECATED.