| 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 |
| |