RemoveCmd()
===========

RemoveCmd(L)
------------
::

FUNKTION
--------
::

    varargs int RemoveCmd(mixed cmd, int norule, mixed id)

DEFINIERT IN
------------
::

    /std/thing/commands.c

ARGUMENTE
---------
::

    com
         String oder Array von Strings mit den zu entfernenden Kommandos.
    norule
         Kommandos mit Regeln werden nicht entfernt (ausser bei cmd==0)
    id
         eine ID, mit der man ein vorher mit dieser ID gespeichertes
         Kommando eindeutig lvschen kann

BESCHREIBUNG
------------
::

    Mit AddCmd() hinzugefuegte Kommandos koennen mit diesem Befehl wieder
    abgemeldet werden. Die entfernten Kommandos sind direkt nach dem
    RemoveCmd()-Aufruf nicht mehr ansprechbar.

    Wird ein Regelstring angegeben, so wird die identische AddCmd-
    Regel entfernt.

BEMERKUNGEN
-----------
::

    Uebergibt man fuer com eine 0, so werden alle definierten Kommandos
    entfernt!

RUECKGABEWERT
-------------
::

    Anzahl der entfernten Kommandos.

BEISPIELE
---------
::

    (1) AddCmd("test");
    (2) AddCmd("test|teste&mit&parameter");
    (3) AddCmd(({"test"}),1);
    (4) AddCmd("test",0,0,"XYZ");
    (5) AddCmd("test&mit&parameter",0,0,"XYZ");

    RemoveCmd(0);
    - entfernt alle Kommandos
    RemoveCmd("test",1);
    - entfernt (1) und (3)
    RemoveCmd("test");
    - entfernt (1), (3) und einen Teil von (2),
      es verbleibt "teste&mit&parameter"
    RemoveCmd("test|teste&mit&parameter"
    - entfernt (2)
    RemoveCmd("test",0,"XYZ");
    - entfernt (4) und (5)
    RemoveCmd("test",1,"XYZ");
    - entfernt (4), nicht (5)
    RemoveCmd(0,0,"XYZ");
    - entfernt (4) und (5)

SIEHE AUCH
----------
::

			AddCmd(L), AddCmd_bsp
    Sonstiges:		replace_personal(E), enable_commands(E), init(E)
    Alternativen:	AddAction(L), add_action(E)

24.Maerz 2004 Gloinson

