| AddAction(L) |
| 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: |
| 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: |
| ... |
| 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: |
| P_LOCALCMDS |
| Fehlermeldungen: notify_fail(E), _notify_fail(E) |
| Argumentstring: query_verb(E), _unparsed_args(L) |
| Sonstiges: replace_personal(E), enable_commands(E) |
| Alternativen: AddCmd(L), add_action(E) |
| |
| 24. Maerz 2004 Gloinson |