Updates erzeugter Manpages
Diese Manpages werden mit sphinx erzeugt. Sie werden
hier committet, damit auch Nutzer ohne sphinx die
Textversion haben.
Change-Id: Ibe6acc626b51b42364af33450a719e88281651b9
diff --git a/doc/lfun/AddInfo b/doc/lfun/AddInfo
index 759a300..a75a22d 100644
--- a/doc/lfun/AddInfo
+++ b/doc/lfun/AddInfo
@@ -7,7 +7,7 @@
========
varargs void AddInfo( frage, meldung
- [, indent [, [silent [, casebased] ] ] );
+ [, indent [, [silent [, casebased] ] ] );
DEFINIERT IN
@@ -21,58 +21,67 @@
string/string* frage
Schluesseltext(e) auf die Informationen gegeben werden sollen.
+
string/closure meldung
- Information, die gegeben werden soll/Closure
+ Information, die gegeben werden soll/Closure Bekommt nichts
+ uebergeben.
+
string indent
Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
+
int/string silent
Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
+
string/closure casebased
- Closure mit Returnwert string oder int.
+ Closure mit Returnwert string oder int. Bekommt nichts
+ uebergeben.
BESCHREIBUNG
============
- Wenn ein Spieler ein NPC mittels "frage <monstername> nach <frage>" nach
- einer Information mit dem Schluessel 'frage' fragt, so wird die
- entsprechende 'meldung' ausgegeben (oder die Closure in 'meldung'
- gerufen und der zurueckgegebene Text ausgegeben). Der Meldung wird
- der Name des Monsters vorangestellt.
+ Wenn ein Spieler ein NPC mittels "frage <monstername> nach <frage>"
+ nach einer Information mit dem Schluessel 'frage' fragt, so wird
+ die entsprechende 'meldung' ausgegeben (oder die Closure in
+ 'meldung' gerufen und der zurueckgegebene Text ausgegeben). Der
+ Meldung wird der Name des Monsters vorangestellt.
Frage:
- Schluessel muessen kleingeschrieben sein, koennen aber Leerzeichen
- enthalten.
+ Schluessel muessen kleingeschrieben sein, koennen aber
+ Leerzeichen enthalten.
Meldung:
- Wenn kein 'indent' angegeben ist, muss man die Meldung selbst
- umbrechen.
+ Wenn kein 'indent' angegeben ist, muss man die Meldung selbst
+ umbrechen.
Indent:
- Wird ein 'indent' angegeben so wird jeder Zeile hinter dem
- Monsternamen noch das 'indent' vorangesetzt. Zusaetzlich wird
- 'meldung' auf jeden Fall sauber umgebrochen.
- Ein typisches indent ist "sagt: ".
+ Wird ein 'indent' angegeben so wird jeder Zeile hinter dem
+ Monsternamen noch das 'indent' vorangesetzt. Ein typisches
+ indent ist "sagt: ".
Silent:
- Bei 'silent'==1 erfolgt keine Textausgabe der Antwortmeldung im Raum,
- ist 'silent' ein String, so wird jener an alle anderen Spieler ausser
- dem Fragesteller im Raum ausgegeben.
+ Bei 'silent'==1 erfolgt keine Textausgabe der Antwortmeldung im
+ Raum, ist 'silent' ein String, so wird jener an alle anderen
+ Spieler ausser dem Fragesteller im Raum ausgegeben.
Casebased:
- Die als Closure angegebene Methode entscheidet, ob oder wie der NPC
- auf diese Frage antworten soll:
- - return 0: normale Antwort mit "meldung"
- - return 1: keine Antwort/Antwort mit DEFAULT_NOINFO
- - return string: Antwort mit string unter Beruecksichtigung eines
- indent
+ Die als Closure angegebene Methode entscheidet, ob oder wie der
+ NPC auf diese Frage antworten soll:
- Die Strings von 'silent' und 'meldung' werden geparsed.
- Dabei koennen die @...-Tags von replace_personal() verwendet werden,
+ # return 0: normale Antwort mit "meldung"
+
+ # return 1: keine Antwort/Antwort mit DEFAULT_NOINFO
+
+ # return string: Antwort mit string unter Beruecksichtigung
+ eines indent
+
+ Die Strings von 'silent' und 'meldung' werden geparsed. Dabei
+ koennen die @[...]-Tags von replace_personal() verwendet werden,
Objekt 1 ist this_player(). Ersetzte String am Satzanfang werden
- automatisch gross geschrieben.
- AddInfo() konvertiert die alten Schluesselworte @WER, @WESSEN, @WEM,
- @WEN zu denen von replace_personal().
+ automatisch gross geschrieben. AddInfo() konvertiert die alten
+ Schluesselworte @WER, @WESSEN, @WEM, @WEN zu denen von
+ replace_personal(), jedoch nicht in den Rueckgabe- werten von
+ Closures.
Mittels der in <npc.h> definierten Frage DEFAULT_INFO kann eine
Meldung gesetzt werden, die gegeben werden soll, wenn der Spieler
@@ -83,25 +92,27 @@
BEISPIELE
=========
- ### eine Standardantwort setzen ###
+ Siehe auch: /doc/beispiele/AddInfo/
+
+ // Beispiel 1: ### eine Standardantwort setzen ###
AddInfo(DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
// identisch zu
- SetProp(P_DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
+ // obsolet: SetProp(P_DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
- ### einfache Beispiele, auch mit casebased ###
+ // Beispiel 2: einfache Beispiele, auch mit casebased
AddInfo(({"knete","kohle"}),
- "sagt: ich habe so etwas nicht.\n");
+ "sagt: ich habe so etwas nicht.\n");
AddInfo("geld",
- "Ich habe zwar kein Geld, aber ... blablabla ...",
- "sagt: " );
+ "Ich habe zwar kein Geld, aber [...] blablabla [...]",
+ "sagt: ");
AddInfo("muenzen",
- "fluestert: Du willst Geld?\n",
- 0,
- "fluestert @WEM etwas zu.\n");
+ "fluestert: Du willst Geld?",
+ 0,
+ "fluestert @WEM etwas zu.");
// "frage monster nach geld": alle im Raum hoeren
- // Das Monster sagt: Ich habe zwar kein Geld, aber ...
- // Das Monster sagt: ... blablabla ...
+ // Das Monster sagt: Ich habe zwar kein Geld, aber [...]
+ // Das Monster sagt: [...] blablabla [...]
// "frage monster nach muenzen":
// - der Fragensteller hoert:
@@ -109,47 +120,48 @@
// - alle andere hoeren:
// "Das Monster fluestert <Fragenstellernamen> etwas zu."
- ### dynamisch ###
+ // Beispiel 3: dynamisch
// ein Prototyp, damit wir die Methode bekannt machen
- static string query_kekse();
- ...
- AddInfo(({"keks","kekse"}),
- #'query_kekse, // ein Verweis auf die Funktion
- "sagt: ");
- ...
- static string query_kekse() {
- if(present("keks"))
- return("Ich hab noch welche. Aetsch!");
- return("Menno. Keine mehr da!");
- }
+ protected string query_kekse();
+ AddInfo(({"keks","kekse"}),
+ #'query_kekse, // ein Verweis auf die Funktion
+ "sagt: ");
+
+ protected string query_kekse() {
+ if(present("keks", this_object()))
+ return("Ich hab noch welche. Aetsch!");
+ else if(present("keks", environment()))
+ return("Da liegt einer!");
+ return("Menno. Keine mehr da!");
+ }
// "frage monster nach keks":
// - wenn es noch Kekse hat, hoeren alle:
// "Das Monster sagt: Ich hab noch welche. Aetsch!
// - sonst:
// "Das Monster sagt: "Menno. Keine mehr da!
- ### dynamischer ###
+ // Beispiel 4: dynamischer
// ein Prototyp, damit wir die Methode bekannt machen
- static string query_kekse();
- static mixed case_fighting();
- ...
+ protected string query_kekse();
+ protected mixed case_fighting();
+
AddInfo(({"keks","kekse"}),
- #'query_kekse," // ein Verweis auf die Funktion
- sagt: ",
- 0, // nicht silent :)
- #'case_fighting); // noch ein Funktionsverweis
- ...
- static string query_kekse() {
- if(present("keks"))
- return("Ich hab noch welche. Aetsch!");
- return("Menno. Keine mehr da!");
+ #'query_kekse," // ein Verweis auf die Funktion
+ sagt: ",
+ 0, // nicht silent :)
+ #'case_fighting); // noch ein Funktionsverweis
+
+ protected string query_kekse() {
+ if(present("keks"))
+ return("Ich hab noch welche. Aetsch!");
+ return("Menno. Keine mehr da!");
}
- static mixed case_fighting() {
- if(InFight())
- return("Keine Zeit fuer Kekse. Muss kaempfen.");
- return 0;
+ protected mixed case_fighting() {
+ if(InFight())
+ return("Keine Zeit fuer Kekse. Muss kaempfen.");
+ return 0;
}
// "frage monster nach keks":
@@ -160,59 +172,53 @@
// - sonst:
// "Das Monster sagt: "Menno. Keine mehr da!
-
- ### dynamisch und komplex ###
+ // Beispiel 5: ### dynamisch und komplex ###
// ein Prototyp, damit wir die Methode bekannt machen
- static string question_gold();
- ...
+ protected string question_gold();
// "gold" wird eine Closure auf die Methode question_gold()
// zugewiesen, ausserdem soll es still bleiben (wir informieren
// den Restraum selbst)
- AddInfo("gold",#'question_gold,"murmelt: ",1);
- ...
+ AddInfo("gold", #'question_gold, "murmelt: ", 1);
// los gehts, wir generieren unsere Antwort selbst
- static string question_gold() {
- int money;
- string *y, objstr;
- object o;
- // wieviel Kohle hat der Spieler
- money=this_player()->QueryMoney();
- y=allocate(0);
- // und jetzt suchen wir die Dinge aus Gold
- o=first_inventory(this_player());
- while(o) {
- if(o->QueryMaterial(MAT_GOLD)>0 &&
- strstr(object_name(o),"/obj/money"))
- y+=({o->name(WER,1)});
- o=next_inventory(o);
- }
+ protected string question_gold() {
+ // wieviel Kohle hat der Spieler
+ int money = this_player()->QueryMoney();
+ string *y = map(deep_inventory(this_player()),
+ function string(object o) {
+ if(o->QueryMaterial(MAT_GOLD)>0 &&
+ strstr(object_name(o),"/items/money")<0 &&
+ o->QueryProp(P_NAME))
+ return o->name(WER,1);
+ })-({0});
- // das geht an alle anderen im Raum, silent bietet sich hier
- // nicht an, weil es mehrere Moeglichkeiten gibt
- say(break_string(
- Name(WER,1)+" murmelt "+
- this_player()->name(WEM,1)+
- " etwas zu"+
- ((money || sizeof(y))?
- " und glotzt "+
- this_player()->QueryPronoun(WEN)+" gierig an.":
- "."),78),({this_player()}));
-
- // und hier die Antwort an den Spieler selbst, mit vielen
- // Verzweigungen fuer dessen Besitztum
- return("Ich hab kein Gold bei mir."+
+ // das geht an alle anderen im Raum, silent bietet sich hier
+ // nicht an, weil es mehrere Moeglichkeiten gibt
+ send_room(environment(),
+ (Name(WER,1)+" murmelt "+
+ this_player()->name(WEM,1)+
+ " etwas zu"+
((money || sizeof(y))?
+ " und glotzt "+this_player()->QueryPronoun(WEN)+" gierig an.":
+ ".")),
+ MT_LOOK|MT_LISTEN,
+ MA_EMOTE, 0, ({this_player()}));
+
+ // und hier die Antwort an den Spieler selbst, mit vielen
+ // Verzweigungen fuer dessen Besitztum
+ return("Ich hab kein Gold bei mir."+
+ ((money || sizeof(y))?
" Aber du "+
- (money?"hast ja jede Menge Kohle bei dir, so etwa "+money+
- " Muenzen."+
- (sizeof(y)?
- " Ausserdem "+
- ((sizeof(y)==1)?"ist":"sind")+
- " auch noch "+CountUp(y)+" aus Gold.":
- ""):
- (sizeof(y)?" Aber was du so bei dir hast: "+
+ (money?
+ "hast ja jede Menge Kohle bei dir, so etwa "+money+
+ " Muenzen."+
+ (sizeof(y)?
+ " Ausserdem "+
+ ((sizeof(y)==1)?"ist":"sind")+
+ " auch noch "+CountUp(y)+" aus Gold.":
+ ""):
+ (sizeof(y)?"hast ja ein paar Wertsachen dabei: "+
CountUp(y)+
(sizeof(y)==1?" ist":" sind")+
" aus Gold.":"")):
@@ -234,10 +240,19 @@
SIEHE AUCH
==========
- Verwandt: AddSpecialInfo(L), RemoveInfo(L)
- Props: P_PRE_INFO, P_DEFAULT_INFO
- Files: /std/npc/info.c
- Loggen: P_LOG_INFO
- Interna: GetInfoArr, do_frage
+ Verwandt:
+ *AddSpecialInfo()*, *RemoveInfo()*
-7.Apr 2004 Gloinson
+ Props:
+ *P_PRE_INFO*
+
+ Files:
+ /std/npc/info.c
+
+ Loggen:
+ *P_LOG_INFO*
+
+ Interna:
+ *GetInfoArr()* , *do_frage()*
+
+7. Mar 2017 Gloinson