Uebergabe Schluesselphrase an dyn. Infos
Closures fuer Infos und casebased werden die von der
Spielerin gefragten Schluesselphrasen uebergeben, um
generische Funktionenn fuer Infos zu ermoeglichen.
Change-Id: I31147d023df9641644800914f37dc1f81db30e45
diff --git a/doc/sphinx/lfun/AddInfo.rst b/doc/sphinx/lfun/AddInfo.rst
index 8b5914a..533a581 100644
--- a/doc/sphinx/lfun/AddInfo.rst
+++ b/doc/sphinx/lfun/AddInfo.rst
@@ -17,12 +17,13 @@
---------
string|string* frage
- Schluesselwoerter, fuer die der NPC eine Antwort geben soll, wenn
+ Schluesselphrase(n), fuer die der NPC eine Antwort geben soll, wenn
man ihn danach fragt
string|closure meldung
- Information, die gegeben werden soll; wenn 'meldung' eine Closure
- ist, wird der gerufenen Funktion nichts uebergeben.
+ Information, die gegeben werden soll; wenn 'meldung' eine
+ Closure ist, wird der gerufenen Funktion die vom Spieler gefragte
+ Schluesselphrase uebergeben.
string indent (optional)
Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
@@ -31,8 +32,8 @@
Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
string|closure casebased (optional)
- Closure mit Returnwert string oder int.
- Der Funktion werden keine Argumente uebergeben.
+ Closure mit Returnwert string oder int. Der Funktion wird die vom
+ Spieler gefragte Schluesselphrase uebergeben.
BESCHREIBUNG
------------
@@ -44,8 +45,8 @@
der Name des Monsters vorangestellt.
Frage:
- Schluessel muessen kleingeschrieben sein, koennen aber Leerzeichen
- enthalten.
+ Schluesselphrasen muessen kleingeschrieben sein, koennen aber
+ Leerzeichen enthalten.
Meldung:
Wenn kein 'indent' angegeben ist, muss man die Meldung selbst
@@ -124,13 +125,13 @@
// Beispiel 3: dynamisch
// ein Prototyp, damit wir die Methode bekannt machen
- protected string query_kekse();
+ protected string query_kekse(string key);
AddInfo(({"keks","kekse"}),
#'query_kekse, // ein Verweis auf die Funktion
"sagt: ");
- protected string query_kekse() {
+ protected string query_kekse(string key) {
if(present("keks", this_object()))
return("Ich hab noch welche. Aetsch!");
else if(present("keks", environment()))
@@ -147,8 +148,8 @@
// Beispiel 4: dynamischer
// ein Prototyp, damit wir die Methode bekannt machen
- protected string query_kekse();
- protected mixed case_fighting();
+ protected string query_kekse(string key);
+ protected mixed case_fighting(string key);
AddInfo(({"keks","kekse"}),
#'query_kekse," // ein Verweis auf die Funktion
@@ -156,13 +157,13 @@
0, // nicht silent :)
#'case_fighting); // noch ein Funktionsverweis
- protected string query_kekse() {
+ protected string query_kekse(string key) {
if(present("keks"))
return("Ich hab noch welche. Aetsch!");
return("Menno. Keine mehr da!");
}
- protected mixed case_fighting() {
+ protected mixed case_fighting(string key) {
if(InFight())
return("Keine Zeit fuer Kekse. Muss kaempfen.");
return 0;
@@ -180,7 +181,7 @@
// Beispiel 5: ### dynamisch und komplex ###
// ein Prototyp, damit wir die Methode bekannt machen
- protected string question_gold();
+ protected string question_gold(string key);
// "gold" wird eine Closure auf die Methode question_gold()
// zugewiesen, ausserdem soll es still bleiben (wir informieren
@@ -188,7 +189,7 @@
AddInfo("gold", #'question_gold, "murmelt: ", 1);
// los gehts, wir generieren unsere Antwort selbst
- protected string question_gold() {
+ protected string question_gold(string key) {
// wieviel Kohle hat der Spieler
int money = this_player()->QueryMoney();
string* valuables = ({});
@@ -265,4 +266,4 @@
Interna:
:doc:`GetInfoArr` , :doc:`do_frage`
-24.09.2020, Arathorn
+09.08.2021, Zesstra
diff --git a/doc/sphinx/lfun/AddSpecialInfo.rst b/doc/sphinx/lfun/AddSpecialInfo.rst
index fd67141..d8ca7c2 100644
--- a/doc/sphinx/lfun/AddSpecialInfo.rst
+++ b/doc/sphinx/lfun/AddSpecialInfo.rst
@@ -14,13 +14,13 @@
::
string|string* frage
- Schluesselwoerter, fuer die der NPC eine Antwort geben soll, wenn
+ Schluesselphrase(n), fuer die der NPC eine Antwort geben soll, wenn
man ihn danach fragt
string functionname
Name der Funktion, die gerufen werden soll, um den Informationstext
- des NPCs zu ermitteln. Der gerufenen Funktion werden keine Argumente
- uebergeben.
+ des NPCs zu ermitteln. Der gerufenen Funktion wird die vom Spieler
+ gefragte Schluesselphrase uebergeben.
string indent (optional)
Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
@@ -29,8 +29,8 @@
Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
string|closure casebased (optional)
- Closure mit Returnwert string oder int.
- Der Funktion werden keine Argumente uebergeben.
+ Closure mit Returnwert string oder int. Der Funktion wird die vom
+ Spieler gefragte Schluesselphrase uebergeben.
DEFINIERT IN
------------
@@ -69,13 +69,13 @@
"query_kekse", // der Methodenname
"sagt: ");
// ist uebrigens das gleiche wie:
- // static string query_kekse();
+ // static string query_kekse(string key);
// ...
// AddInfo(({"keks","kekse"}),
// #'query_kekse, // ein Verweis auf die Methode
// "sagt: ");
...
- static string query_kekse() {
+ static string query_kekse(string key) {
if(present("keks"))
return("Ich hab noch welche. Aetsch!");
return("Menno. Keine mehr da!");
@@ -101,5 +101,4 @@
Interna:
:doc:`GetInfoArr` , :doc:`do_frage`
-24.09.2020, Arathorn
-
+09.08.2021, Zesstra
diff --git a/std/npc/info.c b/std/npc/info.c
index 160aa69..cba2985 100644
--- a/std/npc/info.c
+++ b/std/npc/info.c
@@ -215,7 +215,7 @@
}
if (closurep(info[0]) ) {
- answer=funcall(info[0]);
+ answer=funcall(info[0], text);
if( !answer || answer=="") return 1;
} else {
answer=process_string(info[0]);
@@ -223,13 +223,13 @@
if (closurep(info[3]) )
{
- noanswer=funcall(info[3]);
+ noanswer=funcall(info[3], text);
if ( intp(noanswer) && noanswer > 0)
{
text = DEFAULT_NOINFO;
info = GetInfoArr(text);
if (closurep(info[0]) ) {
- answer=funcall(info[0]);
+ answer=funcall(info[0], text);
if( !answer || answer=="") return 1;
} else {
answer=process_string(info[0]);