SYNOPSIS
        #include <configuration.h>

        void configure_object(object ob, int what, mixed data)

DESCRIPTION
        Sets the option <what> to the value <data> on the object <ob>
        or the default for all interactives if <ob> is 0.

        If the first argument <ob> is not this_object(), the privilege
        violation ("configure_object", this_object(), ob, what, data)
        occurs.

        As <what>, the following arguments are accepted:

        <what> == OC_COMMANDS_ENABLED
          Sets whether <ob> can use commands normally accessible to
          users (1) or not (0). This also marks the object as "living".

        <what> == OC_HEART_BEAT
          Enables (1) or disables (0) the heart beat for <ob>. The
          driver will apply the lfun heart_beat() to the <ob> every
          __HEARTBEAT_INTERVAL__ seconds, if it is enabled.
          A shadow over the heart_beat() lfun will be ignored.

          If the heart beat is not needed for the moment, then do disable
          it. This will reduce system overhead.

          Note that heart_beat()s are called only if there are enabled
          via configuer_driver(DC_ENABLE_HEART_BEATS), which is the
          default.


        The current values for these options can be queried using
        object_info().

HISTORY
        Introduced in LDMud 3.5.0.

SEE ALSO
        object_info(E), configure_interactive(E), configure_driver(E)
