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/index b/doc/index
index b2693f9..6f84b1c 100644
--- a/doc/index
+++ b/doc/index
@@ -14,8 +14,8 @@
Indices and tables
******************
-* *Index*
+* *Stichwortverzeichnis*
-* *Module Index*
+* *Modulindex*
-* *Search Page*
+* *Suche*
diff --git a/doc/lfun-liste b/doc/lfun-liste
index 6726844..125719e 100644
--- a/doc/lfun-liste
+++ b/doc/lfun-liste
@@ -60,8 +60,6 @@
* AddResistanceModifier()
-* AddRoomCmd()
-
* AddRoomMessage()
* AddRoute()
@@ -238,6 +236,8 @@
* GetReputations()
+* GetShopItems()
+
* GetValue()
* GetValueO()
@@ -252,6 +252,8 @@
* GuardExit()
+* GuildName()
+
* Halt()
* HasMiniQuest()
@@ -298,6 +300,8 @@
* IsEqual()
+* IsGuildMember()
+
* IsPlayerCorpse()
* IsRoom()
@@ -388,6 +392,8 @@
* PreventMove()
+* PrintList()
+
* Query()
* QueryAllDoors()
@@ -788,6 +794,8 @@
* lfun()
+* list()
+
* locate_objects()
* logon()
@@ -866,7 +874,9 @@
* wield_me()
-* Verzeichnis der lfuns speziell in/für Gilden
+* Verzeichnis der lfuns speziell in/fuer Gilden
+
+* Verzeichnis der lfuns speziell in/fuer Spellbooks
* Verzeichnis der lfuns in master()
diff --git a/doc/lfun.index b/doc/lfun.index
index 2018524..3d28c1b 100644
--- a/doc/lfun.index
+++ b/doc/lfun.index
@@ -13,7 +13,7 @@
* Verzeichnis der dokumentierten lfuns
-* Verzeichnis der lfuns speziell in/für Gilden
+* Verzeichnis der lfuns speziell in/fuer Gilden
* Verzeichnis der lfuns in master()
diff --git a/doc/lfun/AddExtraLook b/doc/lfun/AddExtraLook
index 7436f7e..279b496 100644
--- a/doc/lfun/AddExtraLook
+++ b/doc/lfun/AddExtraLook
@@ -2,9 +2,11 @@
AddExtraLook()
**************
-AddExtraLook() varargs int AddExtraLook(string look, [int duration,
-string key,
+FUNKTION
+========
+
+ varargs int AddExtraLook(string look, [int duration, string key,
string lookende, object ob]);
@@ -14,117 +16,168 @@
/std/living/description.c
+ARGUMENTE
+=========
+
+ string look:
+
+ * String, der in der Langbeschreibung des Lebewesens
+ zusaetzlich ausgegeben wird.
+
+ * zu rufender Funktionsname, wenn 'ob' angegeben ist
+
+ int duration:
+
+ * > 0: Dauer der Gueltigkeit des Extralooks in Sekunden.
+
+ * 0: Unbegrenzt gueltiger Eintrag. Rebootfest.
+
+ * < 0: Bis Ende/Reboot bestehender Eintrag.
+
+ string key:
+ Schluesselwort, unter dem der Eintrag registriert wird und mit
+ dem man diesen auch mittels RemoveExtraLook() entfernen kann.
+ Sollte eindeutig sein! Ist 'key' nicht angeben, wird der
+ Objektname (object_name()) des setzenden Objekts benutzt.
+
+ string lookende:
+
+ * String, der an das Lebewesen (nur bei Spielern) ausgegeben
+ wird, wenn der eingetragene Extralook abgelaufen ist.
+
+ * zu rufender Funktionsname, wenn 'ob' angegeben ist
+
+ object ob:
+ Ein Objekt, an dem die in 'look' und 'lookende' abgelegten
+ Methoden bei Abfrage oder Ablauf aufgerufen werden. Die Methoden
+ bekommen das Living uebergeben und muessen selbst umgebrochene
+ Strings zurueckgeben.
+
+
BESCHREIBUNG
============
Der Extralook erscheint in der Langbeschreibung des Lebewesens.
- Eintraege koennen mit dieser Funktion hinzugefuegt werden. Dies ist der
- bevorzugte Weg, wenn ansonsten extra ein Objekt im Spielerinventar abgelegt
- werden muesste.
+ Texte dafuer koennen mit dieser Funktion hinzugefuegt und verwaltet
+ werden. Wenn ihr nicht ohnehin unbedingt ein Objekt IM Spieler
+ ablegt (wie zB eine Ruestung mit einem Extralook) (1), dann ist
+ diese Methode bevorzugt zu verwenden.
+ Ueber die Angabe eines 'ob' koennen Looks auch dynamisch erstellt
+ werden, dabei werden dann 'look' bzw. 'lookende' als Methoden am
+ Objekt gerufen. (1) Ein so fuer AddExtraLook verwendetes Objekt
+ 'ob' muss nicht wie bisher ueblich im Inv des Spieler liegen!
- Alle Parameter bis auf <look> sind optional.
-
-
-ARGUMENTE
-=========
-
- - string look:
- String, der in der Langbeschreibung des Lebewesens zusaetzlich ausgegeben
- wird.
- Kann auch ein Funktionsname sein, wenn <ob> angegeben wird (s.u.).
- - int duration:
- > 0: Wie lang bleibt der Extralook gueltig (in Sekunden)? Anschliessend
- wird er automatisch geloescht.
- 0: Dieser Eintrag bleibt unbegrenzt gueltig.
- < 0: Dieser Eintrag bleibt bis zum Ende/Reboot bestehen.
- - string key:
- Schluesselwort, unter dem der Eintrag registriert wird und mit dem man ihn
- auch mittels RemoveExtraLook() entfernen kann. Sollte natuerlich
- moeglichst eindeutig sein. ;-) Wenn <key> nicht angeben wird, wird der
- Objektname (object_name()) benutzt.
- - string lookende:
- String, der an das Lebewesen (nur bei Spielern) ausgegeben wird, wenn der
- eingetragene Extralook abgelaufen ist.
- Kann auch ein Funktionsname sein, wenn <ob> angegeben wird.
- - object ob:
- Wenn hier ein Objekt angegeben wird, werden <look> und <lookende> als
- Funktonsnamen aufgefasst. Diese Funktionen werden in <ob> aufgerufen, wenn
- der Extralook des Lebewesen angezeigt wird bzw. der eingetragene Extralook
- abgelaufen ist. Diese Funktionen bekommen das jeweilige Lebenwesen als
- Objekt uebergeben. Sie muessen einen String zurueckliefern, der ausgegeben
- wird. Dieser String wird direkt so ausgeben, also selber fuer Zeilenumbruch
- etc. sorgen!
- WICHTIG: Das Objekt sollte nach Moeglichkeit eine Blueprint sein, da das
- ganze nix mehr ausgibt, sobald der Clone zerstoert wird, falls hier
- einer angeben wird. Wenn ihr keine BP uebergebt: Wisst, was ihr tut. ;-)
-
-
-RUECKGABEWERTE
-==============
-
- > 0, falls der Eintrag erfolgreich registriert wurde.
- < 0 sonst.
- -1: <key> war nicht gueltig und es konnte keiner ermittelt werden.
- -2: <look> war kein gueltiger String.
- -3: <duration> war kein Integer.
- -4: unter <key> gibt es schon einen Eintrag.
+ Direkt angegebene Texte (also nicht von einem Objekt 'ob' bezogen)
+ werden durch replace_personal() gefiltert und unter Beibehaltung
+ existierender Umbrueche auf 78 Zeichen umgebrochen.
BEMERKUNGEN
===========
- Die Strings <look> und <lookende> werden vor Ausgabe durch
- replace_personal() geschickt, daher ist die Verwendung von @WER1, @WESSEN1
- usw. moeglich (s. replace_personal). Dies gilt aber _nicht_ fuer den Fall,
- dass die entsprechenden Funktionen in <ob> gerufen werden, dann muessen die
- Funktionen selber umbrechen, etc.
- Nach replace_personal() werden die Strings noch von break_string() auf 78
- Zeilen umgebrochen, allerdings bleiben dabei vorhandene Umbrueche erhalten.
- Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt, wenn der
- Extralook der Lebewesen das erste Mal nach Ablauf der Gueltigkeit aufgerufen
- wird.
+ * Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt,
+ wenn der Extralook der Lebewesen das erste Mal nach Ablauf der
+ Gueltigkeit aufgerufen wird.
+
+ * Das uebergbene Objekt sollte fuer permanente Eintraege eine
+ Blueprint sein, da Clones irgendwann (spaetestens mit Reboot)
+ zerstoert werden und der Eintrag dann bei Abfrage automatisch
+ geloescht wird.
+
+ * Folgerung: Clone-Objekte koennen fuer selbst beschraenkt
+ temporaere Extralooks benutzt werden.
+
+
+RUECKGABEWERTE
+==============
+
+ Siehe auch /sys/living/description.h fuer Konstanten.
+
+ * 1, falls der Eintrag erfolgreich registriert wurde.
+
+ * < 0 sonst.
+
+ * -1: <key> war nicht gueltig und es konnte keiner ermittelt
+ werden.
+
+ * -2: <look> war kein gueltiger String.
+
+ * -3: <duration> war kein Integer.
+
+ * -4: unter <key> gibt es schon einen Eintrag.
BEISPIELE
=========
- # einfacher Eintrag, "fuer die Ewigkeit"
+ // (1) einfacher Eintrag, "fuer die Ewigkeit"
living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
- # Eintrag der nach 1h automatisch weg ist.
+ // (2) Eintrag der nach 1h automatisch weg ist.
living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
-
-
- # Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann.
+ // (3) Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann
living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
"humni_marmeladen_look");
-
-
- # Mit "Ende"-Meldung, aber kein eigener Schluessel.
+ // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel
living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
"Du bist endlich wieder trocken. Puuh.");
+ // (5) Mit Objekt, welches den Extralook dynamisch erzeugt
+ living->AddExtraLook("get_my_special_extralook", 3600, 0, 0,
+ this_object());
+ // In diesem Fall muss this_object() natuerlich die Funktion
+ // "get_my_special_extralook()" definieren, die einen String zurueckgibt
-
- # Mit Objekt, was den Extralook dynamisch erzeugt
- living->AddExtraLook("get_my_special_extralook", 3600, 0, 0, this_object());
- In diesem Fall muss this_object() natuerlich die Funktion
- "get_my_special_extralook()" definieren, die einen String zurueckgibt.
-
- # Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
+ // (6) Mit Objekt, welches den Extralook dynamisch erzeugt
+ // Hier wird explizit die Blueprint uebergeben, der Extralook ist also
+ // rebootfest.
living->AddExtraLook("get_my_special_extralook", 3600, 0,
- "extralookende", this_object());
+ "extralookende", blueprint(this_object()));
+
+ // Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
+ // und keine festgelegte Existenzdauer hat, sondern sich aufgrund
+ // eigener Konditionen entsorgt
+ void set_extra_look(object living) {
+ object dyntemplook = clone_object("/path/to/some/object");
+ if(living->AddExtraLook("get_my_special_extralook", 0,
+ object_name(dyntemplook),
+ 0, dyntemplook) == XL_OK)
+ dyntemplook->SetProp(P_INTERNAL_EXTRA_LOOK, living);
+ else
+ dyntemplook->remove();
+ }
+
+ // entsprechendes Objekt:
+ varargs int remove(int silent) {
+ object ob = QueryProp(P_INTERNAL_EXTRA_LOOK);
+ // wenn der Spieler da ist, entfernen wir den Look regulaer
+ if(objectp(ob))
+ ob->RemoveExtraLook(object_name(this_object()));
+ return ::remove(silent);
+ }
+
+ void reset() {
+ if(!random(10))
+ remove();
+ else
+ ::reset();
+ }
SIEHE AUCH
==========
- RemoveExtraLook(),
- replace_personal(), break_string()
- P_INTERNAL_EXTRA_LOOK
+ Verwandt:
+ *RemoveExtraLook()*, *P_INTERNAL_EXTRA_LOOK*
-14.05.2007, Zesstra
+ Sonstiges:
+ *replace_personal()*, *break_string()*
+
+ Fuer Spielerobjekte:
+ *P_EXTRA_LOOK*
+
+5. Juni 2017 Gloinson
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
diff --git a/doc/lfun/AddRoomMessage b/doc/lfun/AddRoomMessage
index aa700c1..7d33a52 100644
--- a/doc/lfun/AddRoomMessage
+++ b/doc/lfun/AddRoomMessage
@@ -6,7 +6,7 @@
FUNKTION
========
- void AddRoomMessage(string *msg, int time, mixed *func);
+ void AddRoomMessage(string* msg, int time, mixed* func);
DEFINIERT IN
@@ -18,67 +18,80 @@
ARGUMENTE
=========
- msg
- Array von Strings mit den Meldungen.
- time
- Der Abstand zwischen zwei Meldungen in Sekunden.
- func (optional)
- String oder Array von Strings mit Funktionsnamen
+ string* msg
+ Array von Strings mit den Meldungen.
+
+ int time
+ Der Abstand zwischen zwei Meldungen in Sekunden.
+
+ string|string* func (optional)
+ String oder Array von Strings mit Funktionsnamen
BESCHREIBUNG
============
- Mit dieser Funktion legt man fest, dass in bestimmten Zeitabstaenden
- Meldungen an den Raum geschickt werden sollen.
+ Mit dieser Funktion legt man fest, dass in bestimmten
+ Zeitabstaenden Meldungen an den Raum geschickt werden sollen.
- Es wird alle time Sekunden zufaellig eine der in msg angegebenen
- Meldungen ausgegeben. Hat man auch noch func angegeben, so wird
- zusaetzlich diese Funktion (bei einem Array: eine zufaellig ausgesuchte
- Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion die
- Nummer der ausgegebenen Meldung.
+ Es wird alle 'time' Sekunden (beim ersten Betreten durch einen
+ Spieler ein random() des Wertes) zufaellig eine der in msg
+ angegebenen Meldungen ausgegeben. Hat man func angegeben, so wird
+ diese Funktion (bei einem Array: eine zufaellig ausgesuchte
+ Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion
+ die Nummer der ggf zuvor ausgegebenen Meldung (Default also 0).
- Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert, sollte
- man folgendes bedenken:
- o Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern auf
- die Nerven zu gehen!
- o Da das Timing ueber einen call_out() gesteuert wird, ist das Ganze
- aus Sicht des GameDrivers auch noch relativ teuer!
- Fazit: weniger ist mehr!
+ Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert,
+ sollte man folgendes bedenken (Fazit: weniger ist mehr):
+
+ * Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern
+ auf die Nerven zu gehen.
+
+ * Die das Timing steuernden call_out() sind nicht umsonst.
BEMERKUNGEN
===========
- * Falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet.
- * der Praefix Add... taeuscht hier. Ein Aufruf von AddRoomMessage()
- ueberschreibt alle vorherigen Werte
- * THIS_PLAYER() NICHT VERWENDEN!
+ * falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet
+
+ * der Praefix Add... taeuscht hier. Ein Aufruf von
+ AddRoomMessage() ueberschreibt alle vorherigen Werte
+
+ * this_player() NICHT VERWENDEN!
+
+ * Abschalten der Raumnachrichten:
+
+ * passiert automatisch nur, wenn alle Spieler den Raum
+ verlassen haben
+
+ * ist manuell nur ueber Loeschen der Nachrichten umsetzbar,
+ also mit "AddRoomMessage((string)0, 0, (string)0);"
+
In Funktionen, die durch AddRoomMessage() ausgeloest werden, darf
- this_player() nicht verwendet werden. AddRoomMessage ist call_out-
- gesteuert und speichert somit das this_player(). Damit ist this_player()
- immer der Spieler, der den Raum geladen, also den Raum als erster
- betreten hat.
- Spieler also bitte selbst ueber filter(all_inventory(this_object()),
- #'interactive) suchen.
+ this_player() nicht verwendet werden, da die call_out()-Kette den
+ ersten ausloesenden Spieler speichert. Anwesende Spieler also bitte
+ ggf mit "filter(all_inventory(this_object()), #'interactive)"
+ suchen.
BEISPIELE
=========
- Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
- unter den Fuessen knackt, soll man zudem mit 30%-iger
- Wahrscheinlichkeit zusammenzucken:
+ // Beispiel 1:
+ // Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
+ // unter den Fuessen knackt, soll man zudem mit 30%-iger
+ // Wahrscheinlichkeit zusammenzucken:
inherit "/std/room";
void create() {
::create();
- AddRoomMessage( ({ "In der Ferne schreit ein Kaeuzchen.\n",
- "Es raschelt im Gebuesch.\n",
- "Etwas knackt unter Deinen Fuessen.\n" }),
- 30, ({"sound", "sound_more_rnd"}) );
- ...
+ AddRoomMessage(({"In der Ferne schreit ein Kaeuzchen.\n",
+ "Es raschelt im Gebuesch.\n",
+ "Etwas knackt unter Deinen Fuessen.\n"}),
+ 30,
+ ({"sound", "sound_more_rnd"}) );
}
void sound(int msg) {
@@ -88,16 +101,60 @@
}
// Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu
- void sound_more_rnd() {
- sound(0); // die Message-Nummer ist hier unwichtig
+ void sound_more_rnd(int msg) {
+ sound(msg);
SetProp(P_MSG_PROB, 25+random(20)); // neue Wartedauer
}
+ // Beispiel 2: Abschalten der Raumnachrichten
+ public int action_laerm(string str);
+ protected void reset_room_messages();
+
+ void create() {
+ ::create();
+ reset_room_messages();
+
+ AddCmd("mach|mache&laerm|krach",
+ "action_laerm",
+ "Was willst du machen?");
+ AddCmd("schlag|schlage&laerm|krach",
+ "action_laerm",
+ "Was willst du schlagen?");
+ }
+
+ protected void reset_room_messages() {
+ AddRoomMessage(({"Das Reh quakt leise.\n",
+ "Der Frosch grunzt.\n",
+ "Gelbe Schnorpfel pupsen im Takt.\n"}),
+ 45);
+ }
+
+ public int action_laerm(string str) {
+ AddRoomMessage((string)0, 0, (string)0);
+
+ this_player()->ReceiveMsg(
+ "Du schreist dir kurz die Seele aus dem Leib. Alle Tiere "
+ "verstummen sofort.", MT_NOTIFICATION);
+ send_room(this_object(),
+ this_player()->Name()+" schreit laut. Alle Tiere verstummen "
+ "sofort.", MT_LISTEN, 0, 0, ({this_player()}));
+ return 1;
+ }
+
+ void reset() {
+ :reset();
+ if(!QueryProp(P_ROOM_MSG))
+ reset_room_messages();
+ }
+
SIEHE AUCH
==========
- Verwandt: tell_room(), ReceiveMsg()
- Props: P_ROOM_MSG, P_FUNC_MSG, P_MSG_PROB
+ Verwandt:
+ tell_room(), *send_room()*, *ReceiveMsg()*
-2.Feb 2016 Gloinson
+ Props:
+ *P_MSG_PROB*, *P_FUNC_MSG*, *P_ROOM_MSG*
+
+28. Mar 2016 Gloinson
diff --git a/doc/lfun/Defend b/doc/lfun/Defend
index aa53945..3e40cfc 100644
--- a/doc/lfun/Defend
+++ b/doc/lfun/Defend
@@ -6,8 +6,9 @@
FUNKTION
========
- public int Defend(int dam, string|string* dam_type, int|mapping spell,
- object enemy)
+ public int Defend(int dam, string|string* dam_type, int|mapping
+ spell,
+ object enemy)
DEFINIERT IN
@@ -19,120 +20,139 @@
ARGUMENTE
=========
- int dam initiale Staerke des Angriffs (10 dam ~ 1 HP)
- string* dam_type Art(en) des Schadens, der angerichtet werden
- soll
- Muss ein Array von Schadenstypen sein,
- alte Objekte uebergeben hier manchmal strings.
- int/mapping spell - 0 fuer normale Angriffe (keine Zauber)
- - 1 fuer Zauber (Standardruestungen ignorieren)
- - mapping fuer mehr Informationen
- Heute bitte nach Moeglichkeit ein Mapping
- uebergeben.
- object enemy der Feind/Schadenverursacher
+ int dam
+ Initiale Staerke des Angriffs (10 dam ~ 1 HP)
+
+ string* dam_type
+ Art des Schadens, der angerichtet werden soll Muss ein Array von
+ Schadenstypen sein, alte Objekte uebergeben hier manchmal
+ strings.
+
+ mapping spell
+ Mapping mit zusaetzlichen Informationen zum Angriff(Siehe unten)
+ Alte Objekte uebergeben manchmal einen Integer (0 fuer
+ Physikalischen Angriff, 1 fuer Zauber.
+
+ object enemy
+ Der Feind/Schadenverursacher
BESCHREIBUNG
============
1. Generell
- Wenn das Lebewesen angegriffen wird, wird geprueft, wie stark die
- Ruestungen und koerpereigenen Abwehrkraefte sind und die Staerke des
- Schadens dementsprechend vermindert.
- Ggf. wird der Schaden zugefuegt und der Feind in die Liste der Feinde
- aufgenommen. Der Schaden betraegt:
- (dam-Summe(Ruestungsstaerken)-random(P_BODY+A_DEX))*CheckResistance/10
- aber nicht unter 0.
+
+ Wenn das Lebewesen angegriffen wird, wird geprueft, wie stark
+ die Ruestungen und koerpereigenen Abwehrkraefte sind und die
+ Staerke des Schadens dementsprechend vermindert. Ggf. wird der
+ Schaden zugefuegt und der Feind in die Liste der Feinde
+ aufgenommen. Der Schaden betraegt: (dam-Summe(Ruestungsstaerken
+ )-random(P_BODY+A_DEX))*CheckResistance/10 aber nicht unter 0.
2. Der Parameter 'spell'
- Ist 'spell' 0, dann gilt der Angriff als normale physische Attacke
- Uebergibt man als 'spell'-Parameter ein Mapping, so gibt es dafuer
- diverse Flags, die das Ergebnis manipulieren (in new_skills.h
- enthalten). Nichtangabe eines Flags gilt als 0.
- - SP_PHYSICAL_ATTACK ---------- 0/1
- 1, wenn Ruestungen wirken sollen, 0 sonst
- -> entspricht !spell, wenn dieses Int ist
- - SP_NO_ENEMY ----------------- 0/1
- 1, falls der Angriff nicht toedlich ist, es also keinen echten
- Gegner gibt
- -> es wird dann reduce_hit_points() gerufen statt do_damage()
- - SP_NO_ACTIVE_DEFENSE -------- 0/1
- 1, falls aktive Abwehren (wie zurueckschlagende Amulette,
- Karateabwehren oder Ausweichmanoever) unterbleiben sollen
- -> zB bei Kratzen durch Dornen oder Fall aus grosser Hoehe
- ist aktive Abwehr oder Ausweichen unlogisch
- - SP_RECURSIVE ---------------- 0/1
- 1, falls der Spell aus einem Defend gerufen wurde (oder einer
- DefendFunc)
- -> verhindert Rekursionsprobleme
- - SP_NAME --------------------- string
- Name des Spells
- - SP_REDUCE_ARMOUR ------------ Mapping: keys AT_X/P_BODY, values int>=0
- Die Schutzwirkung durch P_AC/Magie einer Ruestung wird
- typabhaengig reduziert. Aufbau eines Mappings im Beispiel:
- ([AT_BOOTS: 0, // Stiefel schuetzen gar nicht
- P_BODY: 50, // Koerper zu 50%
- AT_BELT: 600 // Guertel zu 600%
- ])
- -> alle 'fehlenden' Eintraege wirken normal
- - SP_SHOW_DAMAGE -------------- 0/1 oder Array von Arrays
- 0, fuer keine Treffermeldung, 1 sonst
- In einem Array koennen Ersatz-Treffermeldungen definiert
- werden. Format ist:
+ Ist 'spell' 0, dann gilt der Angriff als normale physische
+ Attacke Uebergibt man als 'spell'-Parameter ein Mapping, so gibt
+ es dafuer diverse Flags, die das Ergebnis manipulieren (in
+ new_skills.h enthalten). Nichtangabe eines Flags gilt als 0.
+
+ * SP_PHYSICAL_ATTACK ---------- 0/1 1, wenn Ruestungen wirken
+ sollen, 0 sonst -> entspricht !spell, wenn dieses Int ist
+
+ * SP_NO_ENEMY ----------------- 0/1 1, falls der Angriff nicht
+ toedlich ist, es also keinen echten Gegner gibt -> es wird
+ dann reduce_hit_points() gerufen statt do_damage()
+
+ * SP_NO_ACTIVE_DEFENSE -------- 0/1 1, falls aktive Abwehren
+ (wie zurueckschlagende Amulette, Karateabwehren oder
+ Ausweichmanoever) unterbleiben sollen -> zB bei Kratzen durch
+ Dornen oder Fall aus grosser Hoehe ist aktive Abwehr oder
+ Ausweichen unlogisch
+
+ * SP_RECURSIVE ---------------- 0/1 1, falls der Spell aus
+ einem Defend gerufen wurde (oder einer DefendFunc) ->
+ verhindert Rekursionsprobleme
+
+ * SP_NAME --------------------- string Name des Spells
+
+ * SP_GLOBAL_ATTACK ------------ 0/1 1 bei Flaechenspells
+
+ * SP_REDUCE_ARMOUR ------------ Mapping: keys AT_X/P_BODY,
+ values int>=0 Die Schutzwirkung durch P_AC/Magie einer
+ Ruestung wird typabhaengig reduziert. Aufbau eines Mappings im
+ Beispiel:
+
+ ([AT_BOOTS: 0, // Stiefel schuetzen gar nicht P_BODY: 50,
+ // Koerper zu 50% AT_BELT: 600 // Guertel zu 600% ])
+
+ -> alle 'fehlenden' Eintraege wirken normal
+
+ * SP_SHOW_DAMAGE -------------- 0/1 oder Array von Arrays 0,
+ fuer keine Treffermeldung, 1 sonst In einem Array koennen
+ Ersatz-Treffermeldungen definiert werden. Format ist:
+
({
- ({ int lphit1, string mess_me,
- string mess_en,
- string mess_room }),
- ({ lphit2, mess_me, mess_en, mess_room }),
- ...
- ({ lphitn, mess_me, mess_en, mess_room }),
- })
- wobei lphit1<lphit2<...<lphitn sein muss, d.h. das Array-
- Array aufsteigend sortiert.
- Ist ein Treffer x LP hart, werden die Meldungen des lphit-
- Arrays ausgegeben, dessen Wert am naehesten unter dem Schaden
- liegt.
+ ({ int lphit1, string mess_me, string mess_en, string
+ mess_room }), ({ lphit2, mess_me, mess_en, mess_room }),
+ ... ({ lphitn, mess_me, mess_en, mess_room }), }) wobei
+ lphit1<lphit2<...<lphitn sein muss, d.h. das Array-Array
+ aufsteigend sortiert.
- In den Meldungen mess_me (an den Getroffenen), mess_en (an
- den Feind), mess_room (an die restlichen Umstehenden) koennen
- Ersatzstrings wie folgt verwendet werden:
- @WER1/@WESSEN1/@WEM1/@WEN1 - name(casus) des Getroffenen (TO)
- @WER2/@WESSEN2/@WEM2/@WEN2 - name(casus) des Feindes (enemy)
- - EINFO_DEFEND ------------ Mapping
- Dieses Mapping liefert erweiterte Informationen zu dem
- bisherigen Ablauf des aktiven Attacks.
- Die verfuegbaren Informationen sind in der Manpage zu
- DefendInfo festgehalten.
+ Ist ein Treffer x LP hart, werden die Meldungen des lphit-
+ Arrays ausgegeben, dessen Wert am naehesten unter dem Schaden
+ liegt.
+
+ In den Meldungen mess_me (an den Getroffenen), mess_en (an den
+ Feind), mess_room (an die restlichen Umstehenden) koennen
+ Ersatzstrings wie folgt verwendet werden:
+
+ @WER1/@WESSEN1/@WEM1/@WEN1 - name(casus) des Getroffenen
+ (TO) @WER2/@WESSEN2/@WEM2/@WEN2 - name(casus) des Feindes
+ (enemy)
+
+ * EINFO_DEFEND ------------ Mapping Dieses Mapping liefert
+ erweiterte Informationen zu dem bisherigen Ablauf des aktiven
+ Attacks. Die verfuegbaren Informationen sind in der Manpage zu
+ DefendInfo festgehalten.
3. Reihenfolgen in Defend
- - das Living wird angegriffen, wenn
- - P_NO_ATTACK != 0
- - 'enemy' existiert und kein netztoter Spieler ist
- - P_DEFENDERS werden durchgegangen (und eventuell benachrichtigt)
- - P_TMP_ATTACK_HOOK wird abgefragt
- - die Ruestungen werden vom Schaden gegebenenfalls abgezogen
- - magischer Ausweichskill beruecksichtigt
- - sensitive Objekte werden ggf. benachrichtigt
- - InternalModifyDefend wird gerufen
- - Koerperabwehr abgezogen
- - der Schaden an do_damage()/reduce_hit_points() uebergeben
- - Flucht ueberpruefen mit CheckWimpyAndFlee()
+
+ * das Living wird angegriffen, wenn - P_NO_ATTACK != 0 -
+ 'enemy' existiert und kein netztoter Spieler ist
+
+ * P_DEFENDERS werden durchgegangen (und eventuell
+ benachrichtigt)
+
+ * P_TMP_ATTACK_HOOK wird abgefragt
+
+ * die Ruestungen werden vom Schaden gegebenenfalls abgezogen
+
+ * magischer Ausweichskill beruecksichtigt
+
+ * sensitive Objekte werden ggf. benachrichtigt
+
+ * InternalModifyDefend wird gerufen
+
+ * Koerperabwehr abgezogen
+
+ * der Schaden an do_damage()/reduce_hit_points() uebergeben
+
+ * Flucht ueberpruefen mit CheckWimpyAndFlee()
BEMERKUNGEN
===========
- Ruestungen wirken konventionell nur, wenn mindestens ein Schadensanteil
- mechanisch ist und es kein Spell oder ein Spell mit SP_PHYSICAL_ATTACK
- auf 1 ist.
+ Ruestungen wirken konventionell nur, wenn mindestens ein
+ Schadensanteil mechanisch ist und es kein Spell oder ein Spell mit
+ SP_PHYSICAL_ATTACK auf 1 ist.
- Defend() beruecksichtigt magische Verteidigungen, die der Spieler bei
- sich hat, sollte also aus Fairness gegenueber den Objekten anderer
- Magier immer dem direkten reduce_hit_points() oder do_damage()
- vorgezogen werden. Mittels der Flags in 'spell' kann man sehr viel
- aendern.
+ Defend() beruecksichtigt magische Verteidigungen, die der Spieler
+ bei sich hat, sollte also aus Fairness gegenueber den Objekten
+ anderer Magier immer dem direkten reduce_hit_points() oder
+ do_damage() vorgezogen werden. Mittels der Flags in 'spell' kann
+ man sehr viel aendern.
RUECKGABEWERT
@@ -142,11 +162,11 @@
Lebenspunkte des Lebewesens.
BEISPIELE (SIEHE AUCH Defend_bsp):
- // ein simpler Angriff: enem->Defend(100, ({DT_BLUDGEON}), 0,
- this_object());
+ // ein simpler Angriff: enem->Defend(100, ({DT_BLUDGEON}),
+ ([SP_PHYSICAL_ATTACK:1]), this_object());
// ein magischer Angriff (ohne Treffermeldung): enem->Defend(100,
- ({DT_BLUDGEON, DT_FIRE}), 1, this_object());
+ ({DT_BLUDGEON, DT_FIRE}), ([SP_PHYSICAL_ATTACK:0]), this_object());
// ein magischer Angriff mit Treffermeldung: enem->Defend(100,
({DT_BLUDGEON, DT_FIRE}), ([SP_SHOW_DAMAGE:1]),
@@ -157,19 +177,23 @@
SIEHE AUCH
==========
- Angriff: Attack(L), P_NO_ATTACK, InsertEnemy(L)
- Schaden: P_ENABLE_IN_ATTACK_OUT, P_LAST_MOVE,
- do_damage(L), reduce_hit_points(L)
- Schutz: P_DEFENDERS, InformDefend(L), DefendOther(L)
- P_ARMOURS, P_AC, P_DEFEND_FUNC, QueryDefend(L)
- P_BODY, A_DEX
- Daten: P_LAST_COMBAT_TIME
- P_LAST_DAMTYPES, P_LAST_DAMTIME, P_LAST_DAMAGE
- P_DAMAGE_MSG
- Resistenz: P_RESISTANCE_STRENGTHS, CheckResistance(L)
- Sonstiges: CheckSensitiveAttack(L)
- InternalModifyDefend(L)
- UseSkill(L),
- DefendInfo
+ Angriff: *Attack()*, *P_NO_ATTACK*, *InsertEnemy()* Schaden:
+ *P_ENABLE_IN_ATTACK_OUT*,
-15.09.2010, Zesstra
+ *P_LAST_MOVE*, *do_damage()*, *reduce_hit_points()*
+
+ Schutz: *P_DEFENDERS*, *InformDefend()*,
+ *DefendOther()*, *P_ARMOURS*, *P_AC*, *P_DEFEND_FUNC*,
+ *QueryDefend()*, *P_BODY*
+
+ Daten: *P_LAST_COMBAT_TIME*,
+ *P_LAST_DAMTYPES*, *P_LAST_DAMTIME*, *P_LAST_DAMAGE*,
+ *P_DAMAGE_MSG*
+
+ Resistenz: *P_RESISTANCE_STRENGTHS*,
+ *CheckResistance()*
+
+ Sonstiges: *CheckSensitiveAttack()*,
+ *InternalModifyDefend()*, *UseSkill()*, *DefendInfo()*
+
+Letzte Aenderung: 29.12.2017, Bugfix
diff --git a/doc/lfun/DefendFunc b/doc/lfun/DefendFunc
index 1683b3f..a544cc2 100644
--- a/doc/lfun/DefendFunc
+++ b/doc/lfun/DefendFunc
@@ -3,43 +3,39 @@
************
-DefendFunc(L)
-=============
-
-
FUNKTION
========
- int DefendFunc(string|string *dtyp, int|mappingspell, object enemy);
+ public int DefendFunc(string* dtyp, mapping spell, object enemy);
DEFINIERT IN
============
- eigenen Objekten; fuer /std/armour/combat.c
+ Eigenen Objekten; fuer /std/armour/combat.c
ARGUMENTE
=========
dtyp
- Schadenstypen der Angriffsart.
- Sollte heute ein string* sein.
+ Schadenstypen der Angriffsart.
+
spell
- 0 bei veralteten konventionellen Angriffen im Regelfall jedoch
- ein Mapping mit weiteren Infos.
- Bei einem konventionellen Angriff ist spell[SP_PHYSICAL_ATTACK] gleich
- 1.
+ Ein Mapping mit weiteren Infos. Bei einem konventionellen
+ Angriff ist spell[SP_PHYSICAL_ATTACK] gleich 1.
+
enemy
- Der angreifende Gegner
+ Der angreifende Gegner
BESCHREIBUNG
============
- Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus (oder
- auch ein Ruestungsmalus) errechnet werden, der zu dem normalen
- Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert wird.
+ Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus
+ (oder auch ein Ruestungsmalus) errechnet werden, der zu dem
+ normalen Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert
+ wird.
RUeCKGABEWERT
@@ -54,8 +50,9 @@
Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
zusammen mit der P_AC insgesamt nur in sehr seltenen, wohldurch-
dachten Ausnahmefaellen die maximal zulaessige P_AC fuer diesen
- Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen
- die DefendFuncs nicht konstant wirken.
+ Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen die
+ DefendFuncs nicht konstant wirken. Ausserdem sind solche Ruestungen
+ immer genehmigungspflichtig.
Bei aktivem Zurueckschlagen IMMER auf Flags wie SP_RECURSIVE und
SP_NO_ACTIVE_DEFENSE pruefen und ggf. abbrechen.
@@ -64,44 +61,46 @@
BEISPIELE
=========
- Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet
- und bei Angriffen durch Geister geschwaecht wird:
+ Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke
+ entfaltet und bei Angriffen durch Geister geschwaecht wird:
- void create()
- {
- ::create();
+ protected void create() {
- SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
- SetProp(P_AC, 20);
- ...
- // Die DefendFunc() ist in der Ruestung selbst definiert
- SetProp(P_DEFEND_FUNC, this_object());
+ ::create();
+
+ SetProp(P_ARMOUR_TYPE, AT_ARMOUR); SetProp(P_AC, 20); ... // Die
+ DefendFunc() ist in der Ruestung selbst definiert
+ SetProp(P_DEFEND_FUNC, this_object());
+
}
- int DefendFunc(string *dtyp, mixed spell, object enemy)
- {
- int prot;
+ public int DefendFunc(string* dtyp, mapping spell, object enemy) {
- // Zuerst fragen wir den Angriff durch Feuer ab:
- if (member(dtyp, DT_FIRE) >= 0) // Feuer gehoert zu den Schadenstypen
- prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit P_AC
- // kommt man also maximal auf 14+20 = 34,
- // liegt also unter der fuer AT_ARMOUR
- // geltenden Obergrenze
+ int prot;
- // Und jetzt der Geistertest
- if (enemy->QueryProp(P_RACE) == "Geist" ||
- enemy->is_class_member(CL_GHOST))
- prot -= random(10);
+ // Zuerst fragen wir den Angriff durch Feuer ab: if
+ (member(dtyp, DT_FIRE) >= 0) // Feuer gehoert zu den
+ Schadenstypen
- // Der Rueckgabewert wird auf den aus P_AC errechneten Wert draufgeschlagen
- return prot;
+ prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit
+ P_AC
+ // kommt man also maximal auf 14+20 = 34, // liegt also
+ unter der fuer AT_ARMOUR // geltenden Obergrenze
+
+ // Und jetzt der Geistertest if (enemy->QueryProp(P_RACE) ==
+ "Geist" ||
+
+ enemy->is_class_member(CL_GHOST))
+
+ prot -= random(10);
+
+ // Der Rueckgabewert wird auf den aus P_AC errechneten Wert
+ draufgeschlagen return prot;
+
}
SIEHE AUCH
==========
- P_DEFEND_FUNC, QueryDefend(), /std/armour/combat.c
-
-Last modified: 18.Jul 2006 Muadib
+ *P_DEFEND_FUNC*, "QueryDefendd" /std/armour/combat.c
diff --git a/doc/lfun/GetShopItems b/doc/lfun/GetShopItems
new file mode 100644
index 0000000..9c7f28d
--- /dev/null
+++ b/doc/lfun/GetShopItems
@@ -0,0 +1,40 @@
+
+GetShopItems()
+**************
+
+
+FUNKTION
+========
+
+ protected object* GetShopItems()
+
+
+DEFINIERT IN
+============
+
+ /std/room/shop.c
+
+
+BESCHREIBUNG
+============
+
+ Erstellt ein Array mit den zum Verkauf stehenden Objekten.
+
+
+BEMERKUNG
+=========
+
+ Enthaelt nur jeweils einen Clone von jeder Blueprint.
+
+
+RUECKGABEWERTE
+==============
+
+ Object-Array mit zuerst den Objekten im Store und anschliessend den
+ fixed-Objects.
+
+
+SIEHE AUCH
+==========
+
+ *PrintList()*
diff --git a/doc/lfun/GuildName b/doc/lfun/GuildName
new file mode 100644
index 0000000..4a4dbdf
--- /dev/null
+++ b/doc/lfun/GuildName
@@ -0,0 +1,37 @@
+
+GuildName()
+***********
+
+
+FUNKTION
+========
+
+ string GuildName()
+
+
+DEFINIERT IN
+============
+
+ /std/gilden_ob.c
+
+
+RUeCKGABEWERT
+=============
+
+ string mit Gildennamen
+
+
+BESCHREIBUNG
+============
+
+ Gibt Gildennamen (genauer: object_name ohne "/gilden/") zurueck.
+
+
+SIEHE AUCH
+==========
+
+ Verwandt:
+ *GuildName()*
+
+ Props:
+ *P_GUILD*
diff --git a/doc/lfun/InternalModifyDefend b/doc/lfun/InternalModifyDefend
index 3015534..3762c07 100644
--- a/doc/lfun/InternalModifyDefend
+++ b/doc/lfun/InternalModifyDefend
@@ -10,8 +10,8 @@
FUNKTION
========
- protected void InternalModifyDefend(int dam, mixed dt, mixed spell,
- object enemy)
+ protected void InternalModifyDefend(int dam, string* dt, mapping
+ spell, object enemy)
DEFINIERT IN
@@ -23,28 +23,31 @@
ARGUMENTE
=========
- int dam Staerke des abzuwehrenden Angriffs (in HP/10)
- string/string* dt Art(en) des Schadens, der angerichtet werden soll
- int/mapping spell 0 fuer normale Angriffe (keine Zauber)
- 1 fuer Zauber (Standardruestungen ignorieren)
- mapping fuer mehr Informationen
- object enemy der Feind/Schadenverursacher
+ int dam
+ Staerke des abzuwehrenden Angriffs (in HP/10)
+
+ string* dt
+ Art(en) des Schadens, der angerichtet werden soll
+
+ mapping spell
+ Mapping mit zusaetzlichen Informationen ueber den Angriff
+
+ object enemy
+ der Feind/Schadenverursacher
BESCHREIBUNG
============
Dient dazu noch Aenderungen am Verhalten der Defend() vornehmen zu
- koennen. Die Parameter werden alle per Referenz uebergeben, Aenderungen
- wirken also direkt in der Defend()!
- Einfach ueberschreiben, aber ::InternalModifyDefend(&..., &....) nicht
- vergessen!
+ koennen. Die Parameter werden alle per Referenz uebergeben,
+ Aenderungen wirken also direkt im Defend()!
+
+ Einfach ueberschreiben, aber ::InternalModifyDefend(&..., &....)
+ nicht vergessen!
SIEHE AUCH
==========
- InternalModifyAttack(L)
- Defend(L)
-
-28.03.2008, Zesstra
+ *InternalModifyAttack()* *Defend()*
diff --git a/doc/lfun/IsGuildMember b/doc/lfun/IsGuildMember
new file mode 100644
index 0000000..bc29366
--- /dev/null
+++ b/doc/lfun/IsGuildMember
@@ -0,0 +1,67 @@
+
+IsGuildMember()
+***************
+
+
+FUNKTION
+========
+
+ varargs int IsGuildMember(object pl)
+
+
+DEFINIERT IN
+============
+
+ /std/gilden_ob.c
+
+
+RUeCKGABEWERT
+=============
+
+ 1
+ wenn Gildenmitglied
+
+ 0
+ sonst
+
+
+BESCHREIBUNG
+============
+
+ Gibt 1 zurueck, wenn der Spieler Gildenmitglied ist, d.h. P_GUILD
+ entsprechend den Gildennamen gesetzt ist. Weitere Pruefungen auf
+ Properties oder Skills werden nicht vorgenommen.
+
+ Kann fuer Spieleraktionen im Gildenraum benutzt werden. Setzt
+ bereits ein _notify_fail() fuer Nichtgildenmitglieder.
+
+
+BEISPIEL
+========
+
+ protected int clown_weihe(string str)
+ {
+ if(IsGuildMember()) {
+ tortenweihe+=getuid(this_player());
+ this_player()->ReceiveMsg(
+ "Du kniest nieder und empfaengt die Torte des Meisterclown.",
+ MT_NOTIFICATION);
+ send_room(
+ this_object(),
+ this_player()->Name()+" kniet nieder und wird wuerdig getortet.",
+ MT_LOOK|MT_LISTEN,
+ MA_EMOTE, 0, ({this_player()}));
+ return 1;
+ }
+ return 0;
+ }
+
+
+SIEHE AUCH
+==========
+
+ Verwandt:
+ *GuildName()*
+
+ Props:
+ *P_GUILD*
diff --git a/doc/lfun/PreventFollow b/doc/lfun/PreventFollow
index c3de6b1..fcfc2a6 100644
--- a/doc/lfun/PreventFollow
+++ b/doc/lfun/PreventFollow
@@ -12,61 +12,50 @@
ARGUMENTE
=========
- dest: Zielobjekt, in das der Verfolgte bewegt werden soll.
+ dest:
+ Zielobjekt, in das der Verfolgte bewegt werden soll.
FUNKTION
========
In jedem Verfolger, der mit AddPursuer in die Liste der Verfolger
- eingetragen wurde, wird vor dem Bewegen in das Zielobjekt die Funktion
- PreventFollow mit dem Zielobjekt als Argument aufgerufen.
+ eingetragen wurde, wird vor dem Bewegen in das Zielobjekt die
+ Funktion PreventFollow mit dem Zielobjekt als Argument aufgerufen.
RUECKGABEWERT
=============
- 0: Verfolger darf in das Zielobjekt folgen
- 1: Verfolger darf in dieses Zielobjekt nicht folgen
- (Verfolgung bleibt weiterhin aktiv)
- 2: Verfolger darf in dieses Zielobjekt nicht folgen
- (Verfolgung wird abgebrochen und Verfolger aus der Verfolgerliste
- ausgetragen)
+ 0:
+ Verfolger darf in das Zielobjekt folgen
+ 1:
+ Verfolger darf in dieses Zielobjekt nicht folgen (Verfolgung
+ bleibt weiterhin aktiv)
-BEMERKUNG
-=========
-
- Durch PreventFollow kann der raeumliche Bereich, in dem verfolgt werden
- darf, eingeschraenkt werden.
+ 2:
+ Verfolger darf in dieses Zielobjekt nicht folgen (Verfolgung
+ wird abgebrochen und Verfolger aus der Verfolgerliste
+ ausgetragen)
BEISPIELE
=========
- Man moechte, dass ein NPC auf einer Insel nicht mit dem Spieler in das
- Boot steigt, um mit dem Spieler zusammen von der Insel herunterzukommen.
+ Man moechte, dass nur dann verfolgt wird, wenn das Ziel im gleichen
+ Gebiet liegt, wie man selber (wenn __PATH__(1) das
+ Gebietsverzeichnis ist):
- #define PATH(x) ("/d/.../.../mein/pfad/+(x)")
+ int PreventFollow(object ziel) {
- ...
+ if (strstr(load_name(ziel), __PATH__(1)) != 0)
+ return 1;
- int PreventFollow(object boot)
- {
- if ( object_name(boot)[0..strlen(PATH("boot"))-1] == PATH("boot") )
- return 1;
- }
-
- Diese Funktions-Definition ist sehr flexibel, denn sie erlaubt sowohl
- spaetere Pfadanpassung als auch mehrere Boote.
- Da ueber die Funktion strlen() nur bis zum letzten Buchstaben des
- angegebenen Strings getestet wird, wird also gleichzeitig auch auf
- boot[1], boot[2] usw. getestet.
+ }
SIEHE AUCH
==========
- "AddPursuer", "RemovePursuer"
-
-Last modified: Tue Jun 10 13:59:30 2003 by Gabylon
+ * *AddPursuer()*, *RemovePursuer()*
diff --git a/doc/lfun/PrintList b/doc/lfun/PrintList
new file mode 100644
index 0000000..18be079
--- /dev/null
+++ b/doc/lfun/PrintList
@@ -0,0 +1,57 @@
+
+PrintList()
+***********
+
+
+FUNKTION
+========
+
+ varargs protected int PrintList(string filter_fun, int liststyle)
+
+
+DEFINIERT IN
+============
+
+ /std/room/shop.c
+
+
+ARGUMENTE
+=========
+
+ string filter_fun:
+ Bestimmt welche Art von Items angezeigt werden sollen (z.B. nur
+ Waffen).
+
+ int liststyle:
+ Angabe zur Formatierung. - 1: Einspaltige Ausgabe mit mehr
+ Zeichen fuer den Namen. - 0: Die Standardausgabe mit zwei
+ Spalten.
+
+
+BESCHREIBUNG
+============
+
+ Erstellt anhand der Parameter und dem Rueckgabewert von
+ GetShopItems() die Ausgabe der zu verkaufenden Gegenstaende fuer
+ den Spieler.
+
+
+RUECKGABEWERTE
+==============
+
+ Immer 1.
+
+
+BEMERKUNGEN
+===========
+
+ filter_fun bekommt als Argument ein Objekt uebergeben und muss
+ einen Wert !=0 zurueckgeben, wenn das Objekt in die Ausgabe
+ aufgenommen werden soll. Es funktionieren alle Datentypen, es
+ empfiehlt sich aber ein Integer von 1 fuer true.
+
+
+SIEHE AUCH
+==========
+
+ *GetShopItems()*
diff --git a/doc/lfun/RemoveExtraLook b/doc/lfun/RemoveExtraLook
index 0369992..1bcde43 100644
--- a/doc/lfun/RemoveExtraLook
+++ b/doc/lfun/RemoveExtraLook
@@ -2,11 +2,11 @@
RemoveExtraLook()
*****************
-RemoveExtraLook()
+FUNKTION
+========
-int RemoveExtraLook(string look);
-=================================
+int RemoveExtraLook(string key);
DEFINIERT IN
@@ -15,51 +15,78 @@
/std/living/description.c
+ARGUMENTE
+=========
+
+ * string key: Schluessel, unter dem der Extralook registriert
+ wurde ODER Objektname des registrierenden Objektes
+
+
BESCHREIBUNG
============
Der Extralook erscheint in der Langbeschreibung des Lebewesens.
- Eintraege koennen mit dieser Funktion (vorzeitig) wieder entfernt werden.
-
-ARGUMENTE
-=========
-
- - string look:
- Schluesselwort, unter dem der Eintrag, den man entfernen moechte, von
- AddExtraLook() registriert wurde.
-
-
-RUECKGABEWERTE
-==============
-
- > 0, falls der Eintrag erfolgreich entfernt wurde.
- < 0 sonst.
- -1: keinen (gueltigen) <key> uebergeben.
- -2: kein Eintrag fuer <key> gefunden.
+ Eintraege koennen mit dieser Funktion (vorzeitig) wieder entfernt
+ werden. Dazu wird entweder der selbst festgelegte Schluessel oder
+ der implizite Schluessel *object_name()* des setzenden Objekts
+ benoetigt.
BEMERKUNGEN
===========
- Beim Entfernen mit dieser Funktion wird die "Endemeldung" des entfernten
- Eintrages nicht ausgegeben.
+ Beim Entfernen mit dieser Funktion wird die "Endemeldung" des
+ entfernten Eintrages nicht ausgegeben.
+
+
+RUECKGABEWERTE
+==============
+
+ Siehe auch /sys/living/description.h fuer Konstanten.
+
+ * 1, falls der Eintrag erfolgreich entfernt wurde.
+
+ * < 0 sonst.
+
+ * -1: keinen (gueltigen) <key> uebergeben.
+
+ * -2: kein Eintrag fuer <key> gefunden.
BEISPIELE
=========
- # Extralook registrieren.
- living->AddExtraLook("@WER1 wird von einer Horde Daemonen verfolgt.",
- "ennox_daemonenhordenverfolgerlook");
- # Nun kann der Eintrag auch wieder entfernt werden:
+ // (1) Loeschen ueber expliziten Key
+ living->AddExtraLook(
+ "@WER1 wird von einer Horde Daemonen verfolgt.",
+ 1800, "ennox_daemonenhordenverfolgerlook");
+
+ // Nun kann der Eintrag auch wieder entfernt werden:
living->RemoveExtraLook("ennox_daemonenhordenverfolgerlook");
+ // (2) Loeschen ueber impliziten Objektnamen-Schluessel
+ living->AddExtraLook("Eine Sonnenblume ragt aus dem Ohr.")
+ // das ist nur aus dem gleichen Objekt heraus moeglich:
+ living->RemoveExtraLook(0);
+
+ // (3) Loeschen ueber impliziten Objektnamen-Schluessel
+ string implizite_id = object_name(this_object());
+ living->AddExtraLook("Eine Sonnenblume ragt aus dem Ohr.")
+ // diese ID kann man natuerlich durch die Gegend schicken
+ living->RemoveExtraLook(implizite_id);
+
SIEHE AUCH
==========
- AddExtraLook(),
- P_INTERNAL_EXTRA_LOOK
+ Verwandt:
+ *AddExtraLook()*, *P_INTERNAL_EXTRA_LOOK*
-14.05.2007, Zesstra
+ Sonstiges:
+ *replace_personal()*, *break_string()*
+
+ Fuer Spielerobjekte:
+ *P_EXTRA_LOOK*
+
+15. Jun 2017 Gloinson
diff --git a/doc/lfun/SetAttackChats b/doc/lfun/SetAttackChats
index 90e8a66..b5a26e9 100644
--- a/doc/lfun/SetAttackChats
+++ b/doc/lfun/SetAttackChats
@@ -18,87 +18,108 @@
ARGUMENTE
=========
- chance
- Prozentuale Wahrscheinlichkeit einer Ausgabe
- strs
- Stringarray mit den Monsterchats
+ int chance
+ Prozentuale Wahrscheinlichkeit einer Ausgabe
+
+ mixed strs
+ Array mit den verschiedenen Moeglichkeiten der Monsterchats
BESCHREIBUNG
============
- Der NPC gibt mit der Wahrscheinlichkeit 'chance' einen zufaellig
- gewaehlten Text aus 'strs' von sich. Die Arrayelemente koennen
- auch Funktionen ("@@func@@") oder Closures enthalten, die dann
- aufgerufen werden und deren Rueckgabewerte das Monster dann ausgibt.
+ Der NPC gibt mit der Wahrscheinlichkeit <chance> waehrend des
+ Kampfes pro Heartbeat einen zufaellig gewaehlten Text aus dem Array
+ <strs> in den Raum aus. Dabei wird per Default send_room() ohne
+ erneutes Umbrechen mit den Messagetypen
+ MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL verwendet.
+ Die einzelnen Arrayelemente koennen:
-RUECKGABEWERT
-=============
+ * Strings sein
- keiner
+ * Closures sein, deren Rueckgabe ausgegeben wird und die
+ zusaetzlich einen aenderbaren und in send_room() verwendeten
+ 'msg_typ' per Referenz uebergeben bekommen
+
+ * Arrays mit der Struktur *({<string|closure msg >, <int
+ msg_typ>})* sein, fuer die obige Regeln auf 'msg' angewendet
+ werden und bei denen 'msg_typ' im send_room() verwendet wird
+
+ Fuer keine Ausgabe muss man einen Leerstring "" zurueckgeben oder
+ verwenden. In allen Funktionen ist this_player() das Monster
+ selbst. Normalerweise muss man die Nachrichten selbst umbrechen,
+ ausser man uebergibt die Message-Typen explizit und uebergibt kein
+ MSG_DONT_WRAP.
BEMERKUNGEN
===========
- AttackChats werden nur im Kampf ausgegeben. Ansonsten ist SetChats()
- zu verwenden.
+ * ausserhalb des Kampf werden keine AttackChats ausgegeben, man
+ muss dann SetChats() verwenden
+ * die strings werden (noch) durch process_string() geschickt,
+ dieses sollte man aber nicht mehr verwenden
+ * 'chance' gilt sowohl fuer Attack- als auch normale Chats
- 'chance' wird in der Property P_ACHAT_CHANCE abgelegt. Um einen NPC
- voruebergehend 'stillzulegen', kann man P_ACHAT_CHANCE auf 0 setzen.
+ * 'chance' wird in der Property P_CHAT_CHANCE abgelegt. Um einen
+ NPC voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0
+ setzen
+ * Spieler koennen P_CHAT_CHANCE temporaer auf 0 setzen
+ ('stillen')
+ * NPC haben bei Abwesenheit von Spielern in der Regel keinen
+ Heartbeat, weswegen dann auch die Chats ausgeschaltet sind
- Man kann AttackChats nutzen, um Monsterspells zu realisieren. Besser
- ist es aber, dafuer 'AddSpell' zu verwenden.
+ * send_room() bekommt immer MSG_DONT_STORE|MSG_DONT_BUFFER
+ uebergeben
+
+ Man kann AttackChats nutzen, um Monsterspells zu realisieren.
+ Besser ist es aber, dafuer 'AddSpell' zu benutzen, ausser man
+ moechte zB die Spielerfaehigkeit des Abschaltens der Chats
+ verwenden.
BEISPIELE
=========
+ protected string knirschschrei(int msg_typ);
+
SetAttackChats( 20,
- ({ "Der Ork tritt Dir in den Hintern.\n",
- "Der Ork bruellt: Lebend kommst Du hier nicht raus!\n",
- "Der Ork blutet schon aus mehreren Wunden.\n",
- "@@knirsch@@" }) );
+ ({"Der Ork tritt Dir in den Hintern.\n",
+ ({"Der Ork bruellt: Lebend kommst Du hier nicht raus!\n", MT_LISTEN}),
+ ({"Der Ork blutet schon aus mehreren Wunden.\n", MT_LOOK}),
+ #'knirschschrei}));
-
-
- string knirsch()
- {
- object *ruestung, *tmp, helm;
-
-
-
- ruestung = this_player()->QueryProp(P_ARMOURS); // getragene Ruestung
- tmp = filter_objects(ruestung, "id", AT_HELMET);
- // Wenn der Spieler einen Helm traegt, enthaelt 'tmp' jetzt
- // ein Array mit dem Helmobjekt als einzigem Element
- if (sizeof(tmp)) helm = tmp[0];
- if (objectp(helm))
- {
- // AC nur dann senken, wenn sie nicht schon 0 ist.
- if (helm->QueryProp(P_AC)>0) {
- helm->Damage(1);
- return "Der Ork beschaedigt Deinen Helm!\n";
- }
- return "";
+ protected string knirsch(int msg_typ) {
+ object helm = this_player()->QueryArmourByType(AT_HELMET);
+ if (objectp(helm)) {
+ // AC nur dann senken, wenn sie nicht schon 0 ist.
+ if (helm->QueryProp(P_AC)>0) {
+ helm->Damage(1);
+ msg_typ = MT_LISTEN|MT_FEEL;
+ return ("Der Ork schreit dich so laut an, dass dabei "+
+ helm->QueryOwn(WER)+" "+
+ helm->name(RAW)+" beschaedigt wird.");
}
- else
- return ""; // keine Meldung
+ }
+ return ""; // keine Meldung
}
SIEHE AUCH
==========
- P_ACHAT_CHANCE, SetChats(), /std/npc/chat.c, AddSpell()
+ Verwandt:
+ *SetChats()*, *AddSpell()*
+ Props:
+ *P_CHAT_CHANCE*
-LETZTE AENDERUNG
-================
+ Sonstiges:
+ *send_room()*, *process_string()*
- Don, 27.12.2007, 16:35:00 von Arathorn
+3. April 2017 Gloinson
diff --git a/doc/lfun/SetChats b/doc/lfun/SetChats
index 70d312e..ee6d04b 100644
--- a/doc/lfun/SetChats
+++ b/doc/lfun/SetChats
@@ -6,7 +6,7 @@
FUNKTION
========
- void SetChats(int chance,mixed strs);
+ void SetChats(int chance, mixed strs);
DEFINIERT IN
@@ -18,77 +18,139 @@
ARGUMENTE
=========
- chance
- Prozentuale Wahrscheinlichkeit einer Ausgabe
- strs
- Stringarray mit den Monsterchats
+ int chance
+ Prozentuale Wahrscheinlichkeit einer Ausgabe
+
+ mixed strs
+ Array mit den verschiedenen Moeglichkeiten der Monsterchats
BESCHREIBUNG
============
- Der NPC gibt mit der Wahrscheinlichkeit <chance> pro Heartbeat einen
- zufaellig gewaehlten Text aus dem Array <strs> von sich.
- Die Arrayelemente koennen auch Closures oder
- process_string()-Funktionen ("@@func@@") enthalten, die dann
- aufgerufen werden und deren Rueckgabewerte das Monster dann ausgibt.
- (Fuer keine Ausgabe dann Leerstring "" zurueckgeben!)
- In diesen Funktionen ist this_player() das Monster selbst!
- Fuer Zeilenumbrueche ist immer selbst zu sorgen.
+ Der NPC gibt mit der Wahrscheinlichkeit <chance> pro Heartbeat
+ einen zufaellig gewaehlten Text aus dem Array <strs> in den Raum
+ aus. Dabei wird per Default send_room() ohne erneutes Umbrechen mit
+ den Messagetypen MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL verwendet.
+ Die einzelnen Arrayelemente koennen:
-RUECKGABEWERT
-=============
+ * Strings sein
- keiner
+ * Closures sein, deren Rueckgabe ausgegeben wird und die
+ zusaetzlich einen aenderbaren und in send_room() verwendeten
+ 'msg_typ' per Referenz uebergeben bekommen
+ * Arrays mit der Struktur *({<string|closure msg >, <int
+ msg_typ>})* sein, fuer die obige Regeln auf 'msg' angewendet
+ werden und bei denen 'msg_typ' im send_room() verwendet wird
-BEISPIELE
-=========
-
- Ein einfaches Beispiel:
- // Prototype fuer Closure.
- static string info1();
- void create()
- { ...
- SetChats(20,
- ({"Der Ork sagt: Hau ab, bevor ich Dich fresse.\n",
- "Der Ork grinst Dich unverschaemt an.\n",
- "Der Ork wedelt mit seinem Saebel vor Deinem Gesicht herum.\n",
- "Der Ork droht Dir mit der Faust.\n",
- #'info1,
- "@@info2@@"}));
- }
- // Funktion als Closure. Prototype notwendig!
- static string info1()
- { if(QueryProp(P_HP)<QueryProp(P_ALIGN))
- return"Gleich werde ich von hier fliehen!\n";
- return"";
- }
- // Funktion als process_string().
- string info2()
- { return QueryProp(P_HP)==QueryProp(P_MAX_HP)?
- "Der Ork grinst: Mir geht es fantastisch!\n":
- "Der Ork seufzt: Mir ging es wirklich schon mal besser.\n";
- }
+ Fuer keine Ausgabe muss man einen Leerstring "" zurueckgeben oder
+ verwenden. In allen Funktionen ist this_player() das Monster
+ selbst. Normalerweise muss man die Nachrichten selbst umbrechen,
+ ausser man uebergibt die Message-Typen explizit und uebergibt kein
+ MSG_DONT_WRAP.
BEMERKUNGEN
===========
- Im Kampf werden keine Chats ausgegeben. Es ist dann SetAttackChats()
- zu verwenden.
- Funktionen als process_string() sollte man nicht mehr verwenden.
- <chance> wird in der Property P_CHAT_CHANCE abgelegt. Um einen NPC
- voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0 setzen.
- Wenn kein Spieler anwesend ist, haben NPC in der Regel keinen Heartbeat,
- weswegen dann auch die Chats ausgeschaltet sind.
- Spieler koennen NPC 'stillen', d.h. Chats und AttackChats abschalten.
+ * im Kampf werden keine Chats ausgegeben, man muss dann
+ SetAttackChats() verwenden
+
+ * die strings werden (noch) durch process_string() geschickt,
+ dieses sollte man aber nicht mehr verwenden
+
+ * 'chance' gilt sowohl fuer Attack- als auch normale Chats
+
+ * 'chance' wird in der Property P_CHAT_CHANCE abgelegt. Um einen
+ NPC voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0
+ setzen
+
+ * Spieler koennen P_CHAT_CHANCE temporaer auf 0 setzen
+ ('stillen')
+
+ * NPC haben bei Abwesenheit von Spielern in der Regel keinen
+ Heartbeat, weswegen dann auch die Chats ausgeschaltet sind
+
+ * send_room() bekommt immer MSG_DONT_STORE|MSG_DONT_BUFFER
+ uebergeben
+
+
+BEISPIELE
+=========
+
+ // Ein einfaches Beispiel:
+ SetChats(20,
+ ({"Der Ork sagt: Hau ab, bevor ich Dich fresse.\n",
+ "Der Ork grinst Dich unverschaemt an.\n",
+ "Der Ork wedelt mit seinem Saebel vor dir herum.\n",
+ "Der Ork stupst Dich mit dem Finger hart.\n"}));
+
+ // Ein Beispiel mit send_room-Typen ohne MSG_DONT_WRAP
+ SetChats(20,
+ ({({"Der Ork sagt: Hau ab, bevor ich Dich fresse.", MT_LISTEN}),
+ ({"Der Ork grinst Dich unverschaemt an.", MT_LOOK}),
+ ({"Der Ork wedelt mit seinem Saebel vor dir herum.", MT_LOOK}),
+ ({"Der Ork stupst Dich mit dem Finger hart.", MT_LOOK|MT_FEEL})}));
+
+ // Laengeres Beispiel mit Closures
+ protected string chat_flightinfo(int msg_typ);
+ protected string chat_trysteal(int msg_typ);
+
+ void create() {
+ SetChats(20,
+ ({({"Der Ork sagt: Hau ab, bevor ich Dich fresse.\n", MT_LISTEN}),
+ #'chat_flightinfo,
+ #'chat_trysteal}));
+ // [...]
+ }
+
+ protected string chat_flightinfo(int msg_typ) {
+ msg_typ = MT_LISTEN;
+ return ("Der Ork sagt: "+
+ (QueryProp(P_HP)<QueryProp(P_WIMPY)?
+ "Ich hab Angst!":
+ "Guck mich nicht so an, Schwaechling!"));
+ }
+
+ protected string chat_trysteal(int msg_typ) {
+ object *pls = filter(all_inventory(environment()), #'interactive);
+ if(sizeof(pls)) {
+ object pl = pls[random(sizeof(pls))];
+ if(!IS_LEARNER(pl)) {
+ object *objs = all_inventory(pl);
+ if(sizeof(objs)) {
+ object ob = objs[random(sizeof(objs))];
+ if(ob->move(this_object(),
+ M_NO_SHOW|M_GIVE|M_MOVE_ALL)==MOVE_OK) {
+ if(pl->ReceiveMsg(Name(WER)+" stiehlt dir "+ob->name(WEN, 0)+".",
+ MT_FEEL|MT_LOOK)<0)
+ pl->ReceiveMsg("Irgendwie scheint dir jetzt etwas zu fehlen.",
+ MT_FEEL|MT_LOOK|MSG_DONT_IGNORE);
+ send_room(environment(),
+ Name(WER, 1)+" bestiehlt "+pl->name(WEN)+".",
+ MT_LOOK, 0, 0, ({pl}));
+ return "";
+ }
+ }
+ }
+ }
+ msg_typ = MT_LOOK;
+ return Name(WER, 1)+" schaut sich verstohlen um.";
+ }
SIEHE AUCH
==========
- P_CHAT_CHANCE, SetAttackChats(), process_string()
+ Verwandt:
+ *SetAttackChats()*
-Last modified: Sat Jan 18 18:48:06 2003 by Patryn
+ Props:
+ *P_CHAT_CHANCE*
+
+ Sonstiges:
+ *send_room()*, *process_string()*
+
+3. April 2017 Gloinson
diff --git a/doc/lfun/list b/doc/lfun/list
new file mode 100644
index 0000000..41b989f
--- /dev/null
+++ b/doc/lfun/list
@@ -0,0 +1,44 @@
+
+list()
+******
+
+
+FUNKTION
+========
+
+ int list(string str)
+
+
+DEFINIERT IN
+============
+
+ /std/room/shop.c
+
+
+ARGUMENTE
+=========
+
+ string str: Durch den Spieler eingegebene Argumente
+
+
+BESCHREIBUNG
+============
+
+ Diese Funktion wird aufgerufen, wenn ein Spieler im Laden 'zeige'
+ eingibt. Anhand von str wird geprueft, welche Art von Waren er
+ aufgelistet haben moechte und in welchem Format. Diese
+ Informationen werden dann zur Ausgabe an PrintList()
+ weitergeleitet.
+
+
+RUECKGABEWERTE
+==============
+
+ 1 bei erfolgreichem Erkennen der Parameter, sonst 0. (siehe auch
+ AddCmd())
+
+
+SIEHE AUCH
+==========
+
+ *PrintList()*, *AddCmd()*
diff --git a/doc/lfun/obsolete/AddRoomCmd b/doc/lfun/obsolete/AddRoomCmd
new file mode 100644
index 0000000..f4aeb68
--- /dev/null
+++ b/doc/lfun/obsolete/AddRoomCmd
@@ -0,0 +1,23 @@
+
+AddRoomCmd()
+************
+
+
+SYNTAX
+======
+
+ AddRoomCmd( string kommando, string funktion );
+ AddRoomCmd( string *kommandos, string funktion );
+
+
+FUNKTION
+========
+
+ Diese Funktion ist veraltet. Sie wird vollstaendig durch
+ die Funktion AddCmd ersetzt.
+
+
+SIEHE AUCH
+==========
+
+ "AddCmd"
diff --git a/doc/lfun/obsolete/DoList b/doc/lfun/obsolete/DoList
new file mode 100644
index 0000000..4a20ef8
--- /dev/null
+++ b/doc/lfun/obsolete/DoList
@@ -0,0 +1,39 @@
+
+DoList()
+********
+
+********************* OBSOLETE LFUN
+*********************************** * Diese Lfun bitte nicht mehr
+benutzen, sondern stattdessen * * PrintList()
+* *******************************************************************
+****
+
+
+FUNKTION
+========
+
+ static int DoList(string query_fun)
+
+
+DEFINIERT IN
+============
+
+ /std/room/shop.c
+
+
+BESCHREIBUNG
+============
+
+ Veraltete Version von PrintList(), bitte nicht verwenden!
+
+
+RUECKGABEWERTE
+==============
+
+ Immer 1.
+
+
+SIEHE AUCH
+==========
+
+ "PrintList"
diff --git a/doc/lfun/obsolete/GetList b/doc/lfun/obsolete/GetList
new file mode 100644
index 0000000..5cd4fec
--- /dev/null
+++ b/doc/lfun/obsolete/GetList
@@ -0,0 +1,39 @@
+
+GetList()
+*********
+
+********************* OBSOLETE LFUN
+*********************************** * Diese Lfun bitte nicht mehr
+benutzen, sondern stattdessen * * GetShopItems()
+* *******************************************************************
+****
+
+
+FUNKTION
+========
+
+ static mixed >>*<<GetList()
+
+
+DEFINIERT IN
+============
+
+ /std/room/shop.c
+
+
+BESCHREIBUNG
+============
+
+ Veraltete Version von GetShopItems(), bitte nicht verwenden!
+
+
+RUECKGABEWERTE
+==============
+
+ Liste der verkaeuflichen Objekte.
+
+
+SIEHE AUCH
+==========
+
+ "GetShopItems"
diff --git a/doc/lfun/obsolete/extra_look b/doc/lfun/obsolete/extra_look
index d8e9703..6d134a9 100644
--- a/doc/lfun/obsolete/extra_look
+++ b/doc/lfun/obsolete/extra_look
@@ -4,7 +4,7 @@
********************* VERALTETE LFUN ****************************** *
Diese LFUN ist veraltet. Bitte benutzt sie NICHT mehr, sondern * *
-stattdessden AddExtraLook(). *
+stattdessden AddExtraLook() oder P_EXTRA_LOOK. *
*******************************************************************
extra_look()
@@ -19,14 +19,12 @@
BESCHREIBUNG
============
- Kann in Objekt definiert sein. Wenn ein Living (std/living/description)
- das Objekt enthaelt, wird zu dessen long() der zurueckgegebene String
- hinzugefuegt.
+ Kann in Objekt definiert sein. Wenn ein Living
+ (std/living/description) das Objekt enthaelt, wird zu dessen long()
+ der zurueckgegebene String hinzugefuegt.
SIEHE AUCH
==========
- AddExtraLook()
-
-25.Jan 2015 Gloinson
+ *AddExtraLook()*, *P_EXTRA_LOOK*
diff --git a/doc/lfuns-gilde b/doc/lfuns-gilde
index b56c734..3a2969b 100644
--- a/doc/lfuns-gilde
+++ b/doc/lfuns-gilde
@@ -1,3 +1,29 @@
-Verzeichnis der lfuns speziell in/für Gilden
-********************************************
+Verzeichnis der lfuns speziell in/fuer Gilden
+*********************************************
+
+* AddSkill()
+
+* AddSpell()
+
+* GuildRating()
+
+* InitialSkillAbility()
+
+* LearnSkill()
+
+* LearnSpell()
+
+* QuerySkill()
+
+* QuerySpell()
+
+* SkillListe()
+
+* UseSpell()
+
+* austreten()
+
+* bei_oder_aus_treten()
+
+* beitreten()
diff --git a/doc/lfuns-obsolet b/doc/lfuns-obsolet
index ac47c41..68f0238 100644
--- a/doc/lfuns-obsolet
+++ b/doc/lfuns-obsolet
@@ -6,6 +6,12 @@
* AddInsertHook()
+* AddRoomCmd()
+
+* DoList()
+
+* GetList()
+
* ModifySkillAttributeOld()
* NotifyGiveQuest()
diff --git a/doc/lfuns-spellbook b/doc/lfuns-spellbook
new file mode 100644
index 0000000..48cf9c6
--- /dev/null
+++ b/doc/lfuns-spellbook
@@ -0,0 +1,17 @@
+
+Verzeichnis der lfuns speziell in/fuer Spellbooks
+*************************************************
+
+* AddSpell()
+
+* Erfolg()
+
+* Learn()
+
+* Misserfolg()
+
+* QuerySpell()
+
+* SpellSuccess()
+
+* TryAttackSpell()
diff --git a/doc/props-liste b/doc/props-liste
index f63a1cf..745a671 100644
--- a/doc/props-liste
+++ b/doc/props-liste
@@ -238,6 +238,8 @@
* P_EXTRA_LOOK
+* P_EXTRA_LOOK_OBS
+
* P_FAO
* P_FAO_PORTALS
diff --git a/doc/props/P_AERIAL_HELPERS b/doc/props/P_AERIAL_HELPERS
index 781510c..7fbe8d0 100644
--- a/doc/props/P_AERIAL_HELPERS
+++ b/doc/props/P_AERIAL_HELPERS
@@ -18,32 +18,32 @@
BESCHREIBUNG
============
- Diese Property kann in allen Lebewesen abgefragt werden, um die Objekte
- zu ermitteln, die fuer die Unterstuetzung beim Fliegen/Segeln bei diesem
- Lebewesen registriert haben. Die Daten werden als Mapping der folgenden
- Form zurueckgeliefert:
- ([ Objekt : Rueckgabewert von dessen Callback-Methode ])
- Eine Erlaeuterung dazu findet sich in der Dokumentation zu
- RegisterHelperObject().
+ Diese Property kann in allen Lebewesen abgefragt werden, um die
+ Objekte zu ermitteln, die sich fuer die Unterstuetzung beim
+ Fliegen/Segeln bei diesem Lebewesen registriert haben. Die Daten
+ werden als Mapping der folgenden Form zurueckgeliefert: ([ Objekt :
+ Rueckgabewert von dessen Callback-Methode ]) Eine Erlaeuterung dazu
+ findet sich in der Dokumentation zu *RegisterHelperObject()*.
BEMERKUNGEN
===========
- Diese Property kann nur abgefragt werden.
- Es ist erwuenscht, dass entsprechende, neu geschaffene Stellen jegliche
- Helfer akzeptieren, deren Callback-Methode >0 zurueckgibt.
+ Diese Property kann nur abgefragt werden. Es ist erwuenscht, dass
+ entsprechende, neu geschaffene Stellen jegliche Helfer akzeptieren,
+ deren Callback-Methode >0 zurueckgibt.
BEISPIEL
========
- Um zu ermitteln, ob der Spieler mindestens ein Objekt bei sich hat, das
- beim Fliegen hilft, sucht man alle Objekte aus dem Mapping heraus, die
- einen Wert >0 eingetragen haben und prueft deren Anzahl:
+ Um zu ermitteln, ob der Spieler mindestens ein Objekt bei sich hat,
+ das beim Fliegen hilft, sucht man alle Objekte aus dem Mapping
+ heraus, die einen Wert >0 eingetragen haben und prueft deren
+ Anzahl:
mapping aerial = this_player()->QueryProp(P_AERIAL_HELPERS);
- object* helpers = filter( aerial, function int (object h) {
+ object* helpers = filter( m_indices(aerial), function int (object h) {
return (aerial[h]>0); });
if ( sizeof(helpers) ) {
tell_object(this_player(), "Du erhebst Dich mit Hilfe "+
@@ -57,7 +57,7 @@
SIEHE AUCH
==========
- Methoden: RegisterHelperObject(L), UnregisterHelperObject(L)
- Properties: P_HELPER_OBJECTS, P_AQUATIC_HELPERS
+ Methoden: *RegisterHelperObject()*, *UnregisterHelperObject()*
+ Properties: *P_HELPER_OBJECTS*, *P_AQUATIC_HELPERS*
-12.03.2016, Arathorn
+04.02.2018, Arathorn
diff --git a/doc/props/P_AQUATIC_HELPERS b/doc/props/P_AQUATIC_HELPERS
index 8429a41..ef80e67 100644
--- a/doc/props/P_AQUATIC_HELPERS
+++ b/doc/props/P_AQUATIC_HELPERS
@@ -18,32 +18,32 @@
BESCHREIBUNG
============
- Diese Property kann in allen Lebewesen abgefragt werden, um die Objekte
- zu ermitteln, die fuer die Unterstuetzung beim Tauchen bei diesem
- Lebewesen registriert haben. Die Daten werden als Mapping der folgenden
- Form zurueckgeliefert:
- ([ Objekt : Rueckgabewert von dessen Callback-Methode ])
- Eine Erlaeuterung dazu findet sich in der Dokumentation zu
- RegisterHelperObject().
+ Diese Property kann in allen Lebewesen abgefragt werden, um die
+ Objekte zu ermitteln, die fuer die Unterstuetzung beim Tauchen bei
+ diesem Lebewesen registriert haben. Die Daten werden als Mapping
+ der folgenden Form zurueckgeliefert: ([ Objekt : Rueckgabewert von
+ dessen Callback-Methode ]) Eine Erlaeuterung dazu findet sich in
+ der Dokumentation zu *RegisterHelperObject()*.
BEMERKUNGEN
===========
- Diese Property kann nur abgefragt werden.
- Es ist erwuenscht, dass entsprechende, neu geschaffene Stellen jegliche
- Helfer akzeptieren, deren Callback-Methode >0 zurueckgibt.
+ Diese Property kann nur abgefragt werden. Es ist erwuenscht, dass
+ entsprechende, neu geschaffene Stellen jegliche Helfer akzeptieren,
+ deren Callback-Methode >0 zurueckgibt.
BEISPIEL
========
- Um zu ermitteln, ob der Spieler mindestens ein Objekt bei sich hat, das
- beim Tauchen hilft, sucht man alle Objekte aus dem Mapping heraus, die
- einen Wert >0 eingetragen haben und prueft deren Anzahl:
+ Um zu ermitteln, ob der Spieler mindestens ein Objekt bei sich hat,
+ das beim Tauchen hilft, sucht man alle Objekte aus dem Mapping
+ heraus, die einen Wert >0 eingetragen haben und prueft deren
+ Anzahl:
mapping aquatic = this_player()->QueryProp(P_AQUATIC_HELPERS);
- object* helpers = filter( aquatic, function int (object h) {
+ object* helpers = filter( m_indices(aquatic), function int (object h) {
return (aquatic[h]>0); });
if ( sizeof(helpers) ) {
tell_object(this_player(), "Du stuerzt Dich in die Fluten und "
@@ -58,7 +58,7 @@
SIEHE AUCH
==========
- Methoden: RegisterHelperObject(L), UnregisterHelperObject(L)
- Properties: P_HELPER_OBJECTS, P_AERIAL_HELPERS
+ Methoden: *RegisterHelperObject()*, *UnregisterHelperObject()*
+ Properties: *P_HELPER_OBJECTS*, *P_AERIAL_HELPERS*
-06.04.2016, Arathorn
+04.02.2018, Arathorn
diff --git a/doc/props/P_EXTRA_LOOK_OBS b/doc/props/P_EXTRA_LOOK_OBS
new file mode 100644
index 0000000..b1a5e4e
--- /dev/null
+++ b/doc/props/P_EXTRA_LOOK_OBS
@@ -0,0 +1,36 @@
+
+P_EXTRA_LOOK_OBS
+****************
+
+
+NAME
+====
+
+ P_EXTRA_LOOK_OBS "p_lib_extralook_obs"
+
+
+DEFINIERT IN
+============
+
+ /sys/living/description.h
+
+
+BESCHREIBUNG
+============
+
+ Array mit den im Lebewesen enthaltenen Objekten, die P_EXTRA_LOOK gesetzt
+ haben.
+
+
+BEMERKUNG
+=========
+
+ Bitte nicht von Hand manipulieren.
+
+
+SIEHE AUCH
+==========
+
+ :doc:`../long`, :doc:`../AddExtraLook`, :doc:`../RemoveExtraLook`
+ :doc:`P_EXTRA_LOOK`
+ /std/living/description.c, /std/player/base.c
diff --git a/doc/props/P_FUNC_MSG b/doc/props/P_FUNC_MSG
index adcca1a..ac09232 100644
--- a/doc/props/P_FUNC_MSG
+++ b/doc/props/P_FUNC_MSG
@@ -33,8 +33,13 @@
SIEHE AUCH
==========
- LFuns: AddRoomMessage()
- Verwandt: tell_room(), ReceiveMsg()
- Props: P_ROOM_MSG, P_MSG_PROB
+ LFuns:
+ *AddRoomMessage()*
+
+ Verwandt:
+ tell_room(), *send_room()*, *ReceiveMsg()*
+
+ Props:
+ *P_MSG_PROB*, *P_ROOM_MSG*
2.Feb 2016 Gloinson
diff --git a/doc/props/P_HARBOUR b/doc/props/P_HARBOUR
index f049847..c7cf082 100644
--- a/doc/props/P_HARBOUR
+++ b/doc/props/P_HARBOUR
@@ -24,71 +24,75 @@
BEMERKUNGEN
===========
- Diese Property wird in Raeumen gesetzt, die als Anleger fuer Transporter
- dienen sollen. Sie enthaelt ein Array aus zwei Elementen, einem String
- und einem String-Array, zum Beispiel:
+ Diese Property wird in Raeumen gesetzt, die als Anleger fuer
+ Transporter dienen sollen. Sie enthaelt ein Array aus zwei
+ Elementen, einem String und einem String-Array, zum Beispiel:
- ({ "zur Sonneninsel", ({"sonneninsel"}) }) oder
- ({ "nach Titiwu", ({"titiwu"}) })
+ ({ "zur Sonneninsel", ({"sonneninsel"}) }) oder ({ "nach Titiwu",
+ ({"titiwu"}) })
- Damit bekommt der Spieler bei einer Abfrage seiner Reiseroute mittels
- "reise route" eine Ausgabe wie
- 'Du reist mit dem Floss nach Titiwu' oder
- 'Du reist mit dem Wal zur Sonneninsel'.
+ Hafen der Sonneninsel: ({ "zur Sonneninsel", ({"sonneninsel"}) })
+ oder Hafen von Titiwu: ({ "nach Titiwu", ({"titiwu"}) })
- Das zweite Element der Property enthaelt eine Liste der IDs, mit denen
- sich der Hafen mit dem Befehl "reise nach <ID>" ansprechen laesst. Im
- Beispiel oben wuerde also "reise nach sonneninsel" und
- "reise nach titiwu" akzeptiert werden. Der erste Eintrag in dieser ID-
- Liste wird in der Ausgabe des Befehls "reise route" verwendet, sollte
- also den Anlegeort korrekt bezeichnen und nicht z.B. eine Abkuerzung
- enthalten.
- Es bietet sich an, bei bestimmten, deklinierbaren Bezeichnungen alle
- Varianten einzutragen, z.B. "verlorenes land" und zusaetzlich
- "verlorene land" und "verlorenen land", damit alle Varianten von
- "reise nach ..." funktionieren.
+ Damit bekommt der Spieler bei einer Abfrage seiner Reiseroute
+ mittels "reise route", sofern er schon eine gesetzt hat, eine
+ Ausgabe wie ..
+
+ 'Du reist mit dem Floss nach Titiwu' oder 'Du reist mit dem Wal
+ zur Sonneninsel'.
+
+ Das zweite Element der Property enthaelt eine Liste der IDs, mit
+ denen sich der Hafen mit dem Befehl "reise nach <ID>" ansprechen
+ laesst. Im Beispiel oben wuerde also "reise nach sonneninsel" und
+ "reise nach titiwu" akzeptiert werden. Der erste Eintrag in dieser
+ ID- Liste wird in der Ausgabe des Befehls "reise route" verwendet,
+ sollte also den Anlegeort korrekt bezeichnen und nicht z.B. eine
+ Abkuerzung enthalten. Es bietet sich an, bei bestimmten,
+ deklinierbaren Bezeichnungen alle Varianten einzutragen, z.B.
+ "verlorenes land" und zusaetzlich "verlorene land" und "verlorenen
+ land", damit alle Varianten von "reise nach ..." funktionieren.
Ist in einem Hafen diese Property nicht gesetzt, so bekommt der
Spieler keinerlei Hinweis darauf, wohin ihn ein bestimmter Trans-
- porter befoerdert.
- Stattdessen erhaelt er die Bezeichnung 'unbekannt'.
+ porter befoerdert. Stattdessen erhaelt er die Bezeichnung
+ 'unbekannt'.
HINWEISE
========
Wird der zweite Parameter in dieser Property, d.h. die Liste der
- Anleger-IDs, nicht korrekt gesetzt, kann das dazu fuehren, dass Spieler
- den hier anlegenden Transporter nicht benutzen koennen, weil es
- keine sinnvolle Syntax gibt, um den gewuenschten Zielhafen zu finden.
+ Anleger-IDs, nicht korrekt gesetzt, kann das dazu fuehren, dass
+ Spieler den hier anlegenden Transporter nicht benutzen koennen,
+ weil es keine sinnvolle Syntax gibt, um den gewuenschten Zielhafen
+ zu finden.
- Zu achten ist auch darauf, das der erste Eintrag unveraendert in einer
- Meldung an den Spieler ausgegeben wird, d.h. Gross-und Kleinschreibung
- sollte korrekt sein.
+ Zu achten ist auch darauf, das der erste Eintrag unveraendert in
+ einer Meldung an den Spieler ausgegeben wird, d.h. Gross-und
+ Kleinschreibung sollte korrekt sein.
HISTORIE
========
- Frueher war der zweite Eintrag in dieser Property ein einzelner String.
- Es existiert eine SetMethode auf dieser Property, die solche Daten in
- altem Code auf die neue Datenstruktur umbiegt. Dies fuehrt dazu, dass
- bei solchen Objekten die im geladenen Raum enthaltenen Daten nicht mit
- den Daten im File uebereinstimmen. Dies moege aber bitte niemand
- zum Anlass nehmen, in neuem Code veraltete Daten in die Property zu
- schreiben!
+ Frueher war der zweite Eintrag in dieser Property ein einzelner
+ String. Es existiert eine SetMethode auf dieser Property, die
+ solche Daten in altem Code auf die neue Datenstruktur umbiegt. Dies
+ fuehrt dazu, dass bei solchen Objekten die im geladenen Raum
+ enthaltenen Daten nicht mit den Daten im File uebereinstimmen. Dies
+ moege aber bitte niemand zum Anlass nehmen, in neuem Code veraltete
+ Daten in die Property zu schreiben!
SIEHE AUCH
==========
- Properties: P_NO_TRAVELING, P_TRAVEL_INFO
- Funktionen: AddRoute(L)
- Spielerbefehle: reise
- weitere Doku: /d/inseln/schiffe/HowTo
+ Properties: *P_NO_TRAVELING*, *P_TRAVEL_INFO* Funktionen:
+ *AddRoute()* Spielerbefehle: reise weitere Doku:
+ /d/inseln/schiffe/HowTo
LETZTE AENDERUNG
================
-2015-Jan-18, Arathorn
+04.02.2018, Arathorn
diff --git a/doc/props/P_INFO b/doc/props/P_INFO
index f29c242..214301a 100644
--- a/doc/props/P_INFO
+++ b/doc/props/P_INFO
@@ -25,12 +25,30 @@
BEISPIEL
========
- SetProp(P_INFO,"Du ergruendest das Geheimnis.\n")
+ // Einfaches Beispiel
+ SetProp(P_INFO, "Du ergruendest das Geheimnis.\n")
+
+ // dynamisch
+ protected string my_info();
+
+ void create() {
+ if(clonep(this_object())) return;
+ ::create();
+
+ Set(P_INFO, #'my_info, F_QUERY_METHOD);
+ // [...]
+ }
+
+ protected string my_info() {
+ return(break_string(
+ "Die "+cnt+" Steine tragen ein geheimes Muster in sich.", 78));
+ }
SIEHE AUCH
==========
- GetOwner(L)
+ Aehnlich:
+ *GetOwner()*
-24. April 2006, Vanion
+14. Mar 2017 Gloinson
diff --git a/doc/props/P_INTERNAL_EXTRA_LOOK b/doc/props/P_INTERNAL_EXTRA_LOOK
index ffa78ad..d61da7a 100644
--- a/doc/props/P_INTERNAL_EXTRA_LOOK
+++ b/doc/props/P_INTERNAL_EXTRA_LOOK
@@ -6,7 +6,8 @@
NAME
====
- P_INTERNAL_EXTRA_LOOK "internal_extralook"
+ P_INTERNAL_EXTRA_LOOK
+ "internal_extralook"
DEFINIERT IN
@@ -18,40 +19,59 @@
BESCHREIBUNG
============
- Diese Property enthaelt ein Mapping, in dem alle einzelnen
- Extra-Look-Eintraege des Livings enthalten sind. Dabei weden die Daten von
- AddExtraLook() und RemoveExtraLook() verwaltet. Fragt man diese Prop mit
- QueryProp() ab, erhaelt man die Ausgabe der gueltigen Extralooks des
- Livings. Bei Abfrage per Query() erhaelt man ein Mapping mit allen
- Eintraegen und deren Daten. Jeder Wert im Mapping ist erneut ein Mapping,
- welches folgende Keys enthalten kann:
- - "xllook": String, der im Extralook des Living angezeigt wird.
- - "xlduration": Zeitstempel (int), der angibt, wie lang der Eintrag gueltig
- ist. 0 == "Unendlich", negative Zahlen besagen, dass der
- Eintrag nur bis Reboot/Ende gueltig sein und abs(xlduration)
- ist der Zeitpunkt des Eintrages dieses Extralooks.
- - "xlende": String, der nach Ablaufen an das Living ausgegeben wird.
- - "xlfun": Funktion, die gerufen wird und den String zurueckliefern muss,
- der ausgeben werden soll.
- - "xlendefun": Funktion, die gerufen wird, wenn der Eintrag abgelaufen ist
- und den String zurueckliefern muss, der dann ans Living
- ausgeben wird.
- - "xlobjectname": Objekt, in dem die o.a. Funktionen gerufen werden.
+ Diese Property enthaelt ein Mapping, in dem alle einzelnen Extra-
+ Look-Eintraege des Livings enthalten sind. Dabei weden die Daten
+ von AddExtraLook() und RemoveExtraLook() verwaltet. Fragt man diese
+ Prop mit QueryProp() ab, erhaelt man die Ausgabe der gueltigen
+ Extralooks des Livings. Bei Abfrage per Query() erhaelt man ein
+ Mapping mit allen Eintraegen und deren Daten.
+
+ Der Key ist jeweils die ID des Extralooks, der Value ist erneut ein
+ Mapping, welches folgende Keys enthalten kann:
+
+ * "xllook": String, der im Extralook des Living angezeigt wird.
+
+ * "xlduration": Zeitstempel (int), der angibt, wie lang der
+ Eintrag gueltig ist.
+
+ * 0 ewig gueltig
+
+ * <0 gueltig bis Ende/Reboot
+
+ * >0 Gueltig in Sekunden
+
+ * "xlende": String, der nach Ablaufen an das Living ausgegeben
+ wird.
+
+ * "xlfun": Funktion, die gerufen wird und den String
+ zurueckliefern muss, der ausgegeben werden soll.
+
+ * "xlendefun": Funktion, die gerufen wird, wenn der Eintrag
+ abgelaufen ist und den String zurueckliefern muss, der dann ans
+ Living ausgegeben wird.
+
+ * "xlobjectname": Objekt, in dem die o.a. Funktionen gerufen
+ werden.
-BEMERKUNG
-=========
+BEMERKUNGEN:
+============
- DIESE PROPERTY BITTE NIEMALS PER HAND MIT Set()/SetProp() AENDERN!
- Die Daten in dieser Prop werden vom Living selber verwaltet. Extralooks
- koennen mittel AddExtraLook() eingetragen und mit RemoveExtraLook() entfernt
- werden.
+ Warnung: Keine echte Property. Die Methode
+ _query_internal_extralook() in /std/living/description.c stellt
+ die Daten zusammen.
+
+ Warnung: ACHTUNG: Bitte nur die bereitgestellten Methoden zur
+ Manipulation benutzen! Setzen als Property hat keinen Effekt.
SIEHE AUCH
==========
- long(), /std/living/description.c, /std/player/base.c
- AddExtraLook(), RemoveExtraLook()
+ Verwandt:
+ *AddExtraLook()*, *RemoveExtraLook()* *long()*
-13.05.2007, Zesstra
+ Fuer Spielerobjekte:
+ *P_EXTRA_LOOK*
+
+15. Juni 2017 Gloinson
diff --git a/doc/props/P_INT_SHORT b/doc/props/P_INT_SHORT
index 618bbab..ac3c31d 100644
--- a/doc/props/P_INT_SHORT
+++ b/doc/props/P_INT_SHORT
@@ -22,10 +22,13 @@
als String oder Closure (mit String-Rueckgabewert).
Container sind hierbei z.B. Raeume.
- ACHTUNG: Die Kurzbeschreibung sollte dabei weder mit einem
- Satzzeichen noch mit einem "\n" abgeschlossen sein
+ ACHTUNG: Die Kurzbeschreibung sollte dabei nicht mit einem
+ "\n" abgeschlossen sein
(dies wird von den zustaendigen Funktionen erledigt).
+ Aus historischen Gruenden wird ein Punkt ergaenzt, wenn das letzte
+ Zeichen kein Punkt, Ausrufezeichen oder Fragezeichen ist.
+
Man sollte die Property nicht auf 0 setzen.
Diese Property bestimmt die Ansicht des Containers von innen.
diff --git a/doc/props/P_MSG_PROB b/doc/props/P_MSG_PROB
index b4465df..216d8e0 100644
--- a/doc/props/P_MSG_PROB
+++ b/doc/props/P_MSG_PROB
@@ -18,18 +18,65 @@
BESCHREIBUNG
============
- Parameter fuer die Wartezeit in Sekunden bis zur naechsten Ausgabe
- einer Raumnachricht.
- Wird in AddRoomMessage() explizit mitgesetzt. Koennte natuerlich von
- einer Nachrichtenmethode auch regelmaessig geaendert werden, um
- mehr Zufall in die Intervalle zu bringen.
+ Der Name ist irrefuehrend: es ist ein Parameter fuer die Wartezeit
+ in Sekunden bis zur naechsten Ausgabe einer Raumnachricht. Nur
+ direkt nach dem Betreten des Raums wird ein Zufallswert dieser Zahl
+ erstellt.
+
+ Wird in AddRoomMessage() explizit mitgesetzt und gilt fuer den
+ Raum.
+
+ Kann von einer Nachrichtenmethode geaendert werden, um mehr Zufall
+ in die Intervalle zu bringen.
+
+ Werte kleiner als 15 werden bei der Auswertung auf 15 gesetzt.
+ Setzen auf 0 schaltet die Nachrichten nicht ab!
+
+
+BEISPIELE
+=========
+
+ // Beispiel:
+ // Je laenger Spieler im Raum sind, desto langsamer tropft das
+ // Wasser. Wenn der letzte den Raum verlaesst, wird die Zeit
+ // fuer den naechsten Spieler wieder auf den Initialwert gesetzt.
+
+ inherit "/std/room";
+
+ #define START_SPEED 30
+
+ void create() {
+ ::create();
+ AddRoomMessage(({"Das Wasser tropft.\n",
+ "Ein Tropfen plitscht.\n",
+ "Tripf tropf macht das Wasser.\n"}),
+ START_SPEED,
+ ({"slowdown_speed"}));
+ }
+
+ void slowdown_speed(int msg) {
+ SetProp(P_MSG_PROB, QueryProp(P_MSG_PROB)+10);
+ }
+
+ void exit() {
+ ::exit();
+
+ if(!sizeof(filter(all_inventory(this_object())-({this_player()}),
+ #'interactive)))
+ SetProp(P_MSG_PROB, START_SPEED);
+ }
SIEHE AUCH
==========
- LFuns: AddRoomMessage()
- Props: P_ROOM_MSG, P_MSG_PROB
- Verwandt: call_out()
+ LFuns:
+ *AddRoomMessage()*
-2.Feb 2016 Gloinson
+ Props:
+ *P_ROOM_MSG*, *P_FUNC_MSG*
+
+ Verwandt:
+ call_out()
+
+28. Mar 2017 Gloinson
diff --git a/doc/props/P_PURSUERS b/doc/props/P_PURSUERS
index 05ead3b..8348a6a 100644
--- a/doc/props/P_PURSUERS
+++ b/doc/props/P_PURSUERS
@@ -6,7 +6,8 @@
NAME
====
- P_PURSUERS "pursuers"
+ P_PURSUERS:
+ "pursuers"
DEFINIERT IN
@@ -18,12 +19,20 @@
BESCHREIBUNG
============
- Enthaelt Verfolger - nicht von Hand manipulieren!
+ Enthaelt ein zweielementiges Array mit folgendem Aufbau: 0: Objekt
+ welches verfolg wird oder 0. 1: Array der Objekte welche verfolgen.
+
+
+BEMERKUNG
+=========
+
+ Kann auch 0 sein, also auf pointerp() pruefen.
+
+ NICHT von Hand, sondern nur mit den dafuer gedachten Funktionen
+ modifizieren.
SIEHE AUCH
==========
- AddPursuer(L), RemovePursuer(L)
-
-16.06.2016, Arathorn
+ * *AddPursuer()*, *RemovePursuer()*
diff --git a/doc/props/P_ROOM_MSG b/doc/props/P_ROOM_MSG
index 3486458..2d52e57 100644
--- a/doc/props/P_ROOM_MSG
+++ b/doc/props/P_ROOM_MSG
@@ -32,8 +32,13 @@
SIEHE AUCH
==========
- LFuns: AddRoomMessage()
- Verwandt: tell_room(), ReceiveMsg()
- Props: P_FUNC_MSG, P_MSG_PROB
+ LFuns:
+ *AddRoomMessage()*
+
+ Verwandt:
+ tell_room(), *send_room()*, *ReceiveMsg()*
+
+ Props:
+ *P_MSG_PROB*, *P_FUNC_MSG*
2.Feb 2016 Gloinson
diff --git a/doc/props/P_SHORT b/doc/props/P_SHORT
index 49b2603..63c8765 100644
--- a/doc/props/P_SHORT
+++ b/doc/props/P_SHORT
@@ -21,9 +21,11 @@
Diese Property enthaelt die Kurzbeschreibung des Objektes als String
oder Closure (diese muss einen String zurueckgeben).
- ACHTUNG: Die Kurzbeschreibung sollte dabei weder mit einem
- Satzzeichen noch mit einem "\n" abgeschlossen sein
- (dies wird von den zustaendigen Funktionen erledigt).
+ ACHTUNG: Die Kurzbeschreibung sollte dabei nicht mit einem "\n"
+ abgeschlossen sein (dies wird von den zustaendigen Funktionen
+ erledigt).
+ Aus historischen Gruenden wird ein Punkt ergaenzt, wenn das letzte
+ Zeichen kein Punkt, Ausrufezeichen oder Fragezeichen ist.
Setzt man diese Property auf 0, so ist das Objekt unsichtbar, allerdings
ansprechbar, wenn der Spieler eine ID des Objektes kennt. D.h. Objekte
diff --git a/doc/props/P_SYNTAX_HELP b/doc/props/P_SYNTAX_HELP
index a796fb5..fee400f 100644
--- a/doc/props/P_SYNTAX_HELP
+++ b/doc/props/P_SYNTAX_HELP
@@ -6,7 +6,8 @@
NAME
====
- P_SYNTAX_HELP "lib_p_syntax_help"
+ P_SYNTAX_HELP
+ "lib_p_syntax_help"
DEFINIERT IN
@@ -18,34 +19,35 @@
BESCHREIBUNG
============
- In dieser Property kann man fuer Spieler eine ausfuehrliche Syntaxhilfe zu
- den Kommandos eines Objektes ablegen. Diese wird angezeigt, wenn der
- Spieler das Kommando "synxtaxhilfe <objekt>" eingibt.
- Die Property kann verschiedene Datenstrukturen enthalten:
+ In dieser Property kann man fuer Spieler eine ausfuehrliche
+ Syntaxhilfe zu den Kommandos eines Objektes ablegen. Diese wird
+ angezeigt, wenn der Spieler das Kommando "syntaxhilfe <objekt>"
+ eingibt. Die Property kann verschiedene Datenstrukturen enthalten:
- 1) ein String
- Der String wird angezeigt, hierbei ggf. umgebrochen, vorhandene
- Zeilenumbrueche werden beibehalten.
+ 1) ein String Der String wird angezeigt, hierbei ggf. umgebrochen,
+ vorhandene Zeilenumbrueche werden beibehalten.
- 2) ein Array: ({hilfetext, bedingungen})
+ 2. ein Array: ({hilfetext, bedingungen})
<hilfetext>:
- * ein string:
- Der String wird angezeigt, hierbei ggf. umgebrochen, vorhandene
- Zeilenumbrueche werden beibehalten.
- * eine lfun-closure:
- Diese erhaelt beim Aufruf das betreffende Objekt als Argument.
- Wenn diese dann einen String zurueckliefert, wird dieser dem Spieler
- angezeigt. Hierbei wird ggf. umgebrochen, vorhandene Zeilenumbrueche
- werden beibehalten.
+ * ein string: Der String wird angezeigt, hierbei ggf.
+ umgebrochen, vorhandene Zeilenumbrueche werden beibehalten.
- <bedingungen>, welche erfuellt sein muessen, damit dem Spieler die Hilfe
- angezeigt wird. Die Bedingungen sind entweder:
- * ein Mapping fuer check_restriction()
- * eine lfun-closure
- Diese erhaelt beim Aufruf das betreffende Objekt als Argument und darf
- eine 0 fuer 'erlaubt', 1 fuer 'nicht erlaubt (mit Standardtext)' oder
- einen string fuer 'nicht erlaubt mit individuellem Text' sein.
+ * eine lfun-closure: Diese erhaelt beim Aufruf das betreffende
+ Objekt als Argument. Wenn diese dann einen String
+ zurueckliefert, wird dieser dem Spieler angezeigt. Hierbei
+ wird ggf. umgebrochen, vorhandene Zeilenumbrueche werden
+ beibehalten.
+
+ <bedingungen>, welche erfuellt sein muessen, damit dem Spieler die
+ Hilfe angezeigt wird. Die Bedingungen sind entweder:
+
+ * ein Mapping fuer check_restriction()
+
+ * eine lfun-closure Diese erhaelt beim Aufruf das betreffende
+ Objekt als Argument und darf eine 0 fuer 'erlaubt', 1 fuer
+ 'nicht erlaubt (mit Standardtext)' oder einen string fuer
+ 'nicht erlaubt mit individuellem Text' sein.
BEMERKUNGEN
@@ -59,4 +61,4 @@
SIEHE AUCH
==========
- AddCmd
+ *AddCmd()*
diff --git a/doc/props/obsolete/P_EXTRA_LOOK b/doc/props/obsolete/P_EXTRA_LOOK
new file mode 100644
index 0000000..203fb8e
--- /dev/null
+++ b/doc/props/obsolete/P_EXTRA_LOOK
@@ -0,0 +1,57 @@
+
+P_EXTRA_LOOK
+************
+
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet. Bitte
+benutzt sie NICHT mehr, sondern * * stattdessden AddExtraLook().
+* *******************************************************************
+****
+
+
+NAME
+====
+
+ P_EXTRA_LOOK "extralook"
+
+
+DEFINIERT IN
+============
+
+ /sys/living/description.h
+
+
+BESCHREIBUNG
+============
+
+ Diese Property enthaelt einen String. Sie wird entweder in Lebewesen
+ direkt oder in Objekten gesetzt wird, die im Besitz von Lebewesen
+ sein koennen.
+ Diese Strings erscheinen dann zusaetzlich in der Langbeschreibung
+ des Lebewesens bzw. des Besitzers (wenn das Objekt sich direkt im
+ Lebewesen befindet, jedoch nicht in einem Behaelter im Lebewesen).
+ Fuer den Zeilenumbruch muss man selbst sorgen.
+
+
+BEISPIEL
+========
+
+ Ein Spieler hat eine Pfeife im Mund. In dieser Pfeife setzt man z.B.
+ in der Funktion zum Pfeife Rauchen folgendes:
+ SetProp(P_EXTRA_LOOK,break_string(
+ this_player()->Name(WER)+" ist ganz umnebelt.",78);
+
+
+BEMERKUNG
+=========
+
+ BITTE NICHT MEHR BENUTZEN!
+
+
+SIEHE AUCH
+==========
+
+ long(), /std/living/description.c, /std/player/base.c
+ AddExtraLook(), RemoveExtraLook()
+
+13.05.2007, Zesstra
diff --git a/doc/sefun-obsolet b/doc/sefun-obsolet
new file mode 100644
index 0000000..d0a468f
--- /dev/null
+++ b/doc/sefun-obsolet
@@ -0,0 +1,10 @@
+
+Verzeichnis der obsoleten und entfernten simulated efuns
+********************************************************
+
+Bitte die folgenden sefuns in neuem Code keinesfalls benutzten und
+nach Moeglichkeit auch in existierendem Code entfernen.
+
+* exclude_alist()
+
+* remove_alist()
diff --git a/doc/sefun.index b/doc/sefun.index
index 6d9564f..b9325c2 100644
--- a/doc/sefun.index
+++ b/doc/sefun.index
@@ -135,3 +135,5 @@
* wizlist_info()
* write_data()
+
+* Verzeichnis der obsoleten und entfernten simulated efuns
diff --git a/doc/sefun/send_room b/doc/sefun/send_room
index 7ddf43d..2a34ba2 100644
--- a/doc/sefun/send_room
+++ b/doc/sefun/send_room
@@ -6,37 +6,67 @@
FUNKTION
========
-varargs void send_room(object|string room, string msg, int msg_type,
- string msg_action, string msg_prefix, object >>*<<exclude, object
- origin)
+ varargs void send_room(object|string room, string msg, int
+ msg_type,
+ string msg_action, string msg_prefix, object *exclude, object
+ origin)
BESCHREIBUNG
============
- Sendet msg an alle Objekte in room durch Aufruf von ReceiveMsg() mit
- den uebergebenen Argumenten.
- Zur Bedeutung der Argumente siehe Manpage von ReceiveMsg().
+ Sendet msg an alle Objekte in room durch Aufruf von ReceiveMsg()
+ mit den uebergebenen Argumenten. Zur Bedeutung der Argumente siehe
+ Manpage von ReceiveMsg().
Wenn das Raumobjekt mit seinem Namen angegeben ist, wird das Objekt
unter diesem Namen gesucht und und geladen, falls notwendig.
- Mit dem Array <*exclude> kann man verhindern, dass die Nachricht an
- die darin enthaltenen Objekte gesendet wird.
- Das ist sinnvoll, wenn zB ein Spieler Ausloeser einer Meldung ist
- und diese selbst nicht erhalten soll.
+ Mit dem Array exclude kann man verhindern, dass die Nachricht an
+ die darin enthaltenen Objekte gesendet wird. Das ist sinnvoll, wenn
+ beispielsweise ein Spieler Ausloeser einer Meldung ist und diese
+ selbst nicht erhalten soll.
origin gibt an, welches Objekt die Meldung ausloest (muss nicht das
- sendende Objekt selber) und wird vor allem fuer die Ignorierepruefung
- verwendet. Default ist das sendende Objekt.
+ sendende Objekt selber) und wird vor allem fuer die
+ Ignorierepruefung verwendet. Default ist das sendende Objekt.
- Letztendlich ist die sefun vergleichbar zu tell_room().
+ Letztendlich ist die sefun vergleichbar zu *tell_room()*.
+
+
+BEISPIEL
+========
+
+ Oft moechte man einfach nur, dass an den Spieler, der eine Aktion
+ oder aehnliches ausloest, eine andere Meldung gegeben wird, als an
+ andere im Raum befindliche Spieler. Folgenden Code koente man dann
+ verwenden:
+
+ /* Zuerst senden wir eine Nachricht nur an den Spieler.
+ * Ziel: der Spieler riecht etwas und schuettelt sich fuer alle im
+ * Raum sichtbar darauf.
+ */
+ this_player()->ReceiveMsg("Buah stinkt das. Du schuettelst Dich.\n",
+ MT_NOTIFICATION|MT_SMELL, MA_SMELL);
+ send_room(environment(this_player()),
+ // der Raum in dem der Spieler ist
+ this_player()->Name(WER) + " schuettelt sich. Wieso nur?\n",
+ // die eigentliche Nachricht
+ MT_LOOK, // man sieht das schuetteln
+ MA_UNKNOWN, // MA_SMELL moeglich; im Zweifel immer MA_UNKNOWN
+ "", // wir wollen kein Praefix vor der Ausgabe haben
+ ({this_player()}));
+ // Array nur mit dem Spieler, der das nicht noch
+ // mitbekommen soll.
+
+ Fuer weitere Optionen fuer *msg_type* und *msg_action* siehe die
+ manpage zu ReceiveMsg. Natuerlich haben *this_player* und
+ *environment* auch manpages.
SIEHE AUCH
==========
- ReceiveMsg(L)
- tell_object(E), tell_room(E), say(E), write(E)
+ *ReceiveMsg()* tell_object(E), tell_room(E), say(E), write(E)
-13.03.2016, Zesstra
+31.01.2018, Deaddy