
enable_commands()
*****************


SYNOPSIS
========

   void enable_commands();


BESCHREIBUNG
============

   Erlaubt dem Objekt, Kommandos zu verwenden, die normalerweise Usern
   zugaenglich sind. Der Aufruf markiert das Objekt als "living". Dies
   wird fuer Spieler und alle von /std/npc abgeleiteten Objekte
   bereits von der Mudlib erledigt und sollte nicht nochmals gemacht
   werden.

   Diese Funktion darf nicht ausserhalb von create() (oder reset(0) im
   Compat-Modus) aufgerufen werden, weil der Kommandogeber auf dieses
   Objekt gesetzt wird.


BEISPIEL
========

   void create()
   {
       enable_commands();
       ...
   }

   Dies markiert das Objekt als "living".


SIEHE AUCH
==========

   command(E), living(E), disable_commands(E), native(C), hooks(C)
   set_living_name(E)
