SYNOPSIS
        void call_out(string fun, int delay, mixed arg, ...)
        void call_out(closure cl, int delay, mixed arg, ...)

DESCRIPTION
        Set up a call to function fun in the current object, or to
        closure cl. The call will take place in delay seconds, with the
        remaining argument list provided. delay can be 0, but be careful!

        call_out() saves and restores the current user. It is now
        possible to use say() or write() which rely on a current
        user to be something useful.

        call_out() can only call functions which are publicly accessible,
        i.e. "public" and "static" functions. "private" and "protected"
        functions can't be called.

        The execution of the call_out()s implies a simple (not
        exhaustive) measure against rabbits: the evaluation costs of
        those call_outs() executing at the same time are summed up on
        a per-UID base. If the summed-up costs exceed the given maximum,
        a 'too long evaluation' error will occur and any remaining
        call_outs() of this user scheduled for the same time are
        discarded.

        Callouts are executed every 2s, therefore your delay may be bigger
        than the you specified. In fact, a Callout with delay==0 is
        executed within 2s from the function call to call_out(). 

WARNING
        Please never use call_out(...,0) in recursive Callouts and be at least
        very careful in other cases. That Callout would be executed directly
        after your current function and you really get 0 delay.

EXAMPLE
        call_out("RefreshMe", 10);

        This will call the function RefreshMe() in 10 seconds without
        any arguments. The function RefreshMe() can then call out
        itself again which will result in a loop (not in a recursion)
        which can be used to check or set up things in the object in
        intervals. Be aware that callouts are stored in a linear
        list, and so are somewhat expensive for the driver.

        And YES: self-replicating call_out()s, where each call_out()
        creates two or more other call_out()s in a loop (so called
        'rabbits') slow the mud down very fast, and are even able
        to crash it. No need to try it yourself.

SEE ALSO
        remove_call_out(E), call_out_info(E), find_call_out(E),
        this_player(E), reset(A), heart_beat(A)

05.11.06 Zesstra
