AddAction()
===========

FUNKTION
--------

     varargs void AddAction(mixed fun, mixed cmd, int flag, int lvl);

DEFINIERT IN
------------

     /std/player/command.c

ARGUMENTE
---------

     fun
       zu rufende Methode im Spieler oder eine Closure
     cmd
       ausloesendes Kommandoverb
     flag
       unscharf ausfuehren
     lvl
       ab welchem (Magierlevel) funktioniert das Kommando

BESCHREIBUNG
------------
     
     Vorweg: Da es keine (risikolose) Moeglichkeit gibt, ein so definiertes
     Kommando auch wieder zu entfernen, wird von der Verwendung eher
     abgeraten. Es sei denn, ihr wisst, dass euer Kommando nicht wieder (ohne
     ende/reboot) entfernt werden soll.

     Dem Spieler wird ein neues Kommando definiert. Dieses kann eine Methode
     in ihm sein, so wie bei allen Spielerkommandos ueblich, kann aber auch
     eine Closure (Lfun-Closure oder Lambda) enthalten.

     Mittels "flag" kann man die Kommandoerkennung unscharf halten, d.h. wie
     bei AddCmd(L) und add_action(E) wird ein 'cmd' bei 'flag = 1' auch
     schon von Praefix-Strings (hier ohne Leerzeichen) getriggert:
     AddAction([...], "muh", 1, 0) wird zB auch von 'muhtens' oder 'muh4'
     ausgeloest.

     Mit "lvl" begrenzt man die Ausfuehrbarkeit. Spieler haben ein
     Magierlevel von 0, Seher von 1.

     Das Kommando wird in P_LOCALCMDS eingetragen. Diese Property wird
     nicht gespeichert! Effektiv kann man mit AddAction() ein kommando-
     gebendes Objekt im Spieler einsparen.

BEMERKUNGEN
-----------

     - es gibt _noch_ kein RemoveAction! Per Hand in P_LOCALCMDS editieren
       kann zu ernsten Fehlern fuehren.
     - echte Spielerkommandos kann man damit _nicht_ ueberschreiben,
       ein AddAction(...,"sag",1,0); funktioniert nicht
     - ein generelles AddAction(...,"",1,0); geht nicht

BEISPIELE
---------

.. code-block:: pike

     ...
     this_player()->AddAction(symbol_function("zeige_mysterium",
                                              find_object(".../mystzeiger")),
			      "knorfula",0,0);
     write(break_string("Wann immer du jetzt das Kommando \"knorfula\" "
			"eingibst, werden dir Mysterien enthuellt!",78));
     ...
     // im Objekt "knorfula" ...
     int zeige_mysterium(string str) {
       string myst;
       myst=environment(TP)->QueryMysterium(str);
       if(myst) {
         write("Du hast ein Mysterium entdeckt!\n");
	 write(break_string(myst,78));
	 say(break_string(
		TP->Name(WER)+" scheint nach kurzer Konzentration etwas "
		"entdeckt zu haben!",78));
       } else {
         write(break_string(
		"Leider entdeckst du trotz deiner magischen Faehigkeit "
		"kein Mysterium in deiner Umgebung.",78));
	 say(break_string(
		TP->Name(WER)+" konzentriert sich sichtbar, sieht dann "
		"jedoch etwas enttaeuscht aus.",78));
       }
       return 1;
     }


SIEHE AUCH
----------

    Properties:
      :doc:`../props/P_LOCALCMDS`
    Fehlermeldungen:
      :doc:`../efun/notify_fail`, :doc:`../sefun/_notify_fail`
    Argumentstring:
      :doc:`../efun/query_verb`, :doc:`_unparsed_args`
    Sonstiges:
      :doc:`../sefun/replace_personal`, :doc:`../efun/enable_commands`
    Alternativen:
      :doc:`AddCmd`, :doc:`../efun/add_action`

24. Maerz 2004 Gloinson