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