Doku: AddInfo und IsGuildMember korrigiert
* AddInfo durchgesehen und mit Beispiel versehen
* Code-Tag in IsGuildMember korrigiert
Change-Id: I709ac1178c59872cf2019e0ef2964edf224d5f08
diff --git a/doc/sphinx/lfun/AddInfo.rst b/doc/sphinx/lfun/AddInfo.rst
index 2a7928a..1a057da 100644
--- a/doc/sphinx/lfun/AddInfo.rst
+++ b/doc/sphinx/lfun/AddInfo.rst
@@ -3,35 +3,33 @@
FUNKTION
--------
-::
varargs void AddInfo( frage, meldung
- [, indent [, [silent [, casebased] ] ] );
+ [, indent [, [silent [, casebased] ] ] );
DEFINIERT IN
------------
-::
/std/npc/info.c
ARGUMENTE
---------
-::
string/string* frage
- Schluesseltext(e) auf die Informationen gegeben werden sollen.
+ 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.
+ Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
int/string silent
- Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
+ 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
@@ -49,8 +47,7 @@
Indent:
Wird ein 'indent' angegeben so wird jeder Zeile hinter dem
- Monsternamen noch das 'indent' vorangesetzt. Zusaetzlich wird
- 'meldung' auf jeden Fall sauber umgebrochen.
+ Monsternamen noch das 'indent' vorangesetzt.
Ein typisches indent ist "sagt: ".
Silent:
@@ -61,13 +58,16 @@
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
+
+ # 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,
+ 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,
@@ -80,27 +80,31 @@
BEISPIELE
---------
-::
+ Siehe auch: /doc/beispiele/AddInfo/
- ### eine Standardantwort setzen ###
+.. code-block:: pike
+
+ // 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 ###
+.. code-block:: pike
+
+ // 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:
@@ -108,47 +112,52 @@
// - alle andere hoeren:
// "Das Monster fluestert <Fragenstellernamen> etwas zu."
- ### 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!");
- }
+.. code-block:: pike
+ // Beispiel 3: dynamisch
+ // ein Prototyp, damit wir die Methode bekannt machen
+ 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 ###
+.. code-block:: pike
+
+ // 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":
@@ -159,59 +168,55 @@
// - sonst:
// "Das Monster sagt: "Menno. Keine mehr da!
+.. code-block:: pike
- ### 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.":"")):
@@ -229,15 +234,19 @@
// oder
// "Das Monster murmelt @WEM etwas zu und glotzt ihn/sie gierig an."
+
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:
+ :doc:`AddSpecialInfo`, :doc:`RemoveInfo`
+ Props:
+ :doc:`../props/P_PRE_INFO`
+ Files:
+ /std/npc/info.c
+ Loggen:
+ :doc:`P_LOG_INFO`
+ Interna:
+ :doc:`GetInfoArr` , :doc:`do_frage`
-7.Apr 2004 Gloinson
-
+7. Mar 2017 Gloinson
diff --git a/doc/sphinx/lfun/IsGuildMember.rst b/doc/sphinx/lfun/IsGuildMember.rst
index 42355ff..18672f4 100644
--- a/doc/sphinx/lfun/IsGuildMember.rst
+++ b/doc/sphinx/lfun/IsGuildMember.rst
@@ -32,7 +32,7 @@
BEISPIEL
--------
- .. code-block:: pike
+.. code-block:: pike
protected int clown_weihe(string str)
{
@@ -44,7 +44,8 @@
send_room(
this_object(),
this_player()->Name()+" kniet nieder und wird wuerdig getortet.",
- MT_LOOK|MT_LISTEN);
+ MT_LOOK|MT_LISTEN,
+ MA_EMOTE, 0, ({this_player()}));
return 1;
}
return 0;