blob: 69db5da9d1ea364fa72efdf0c47697ad2943c154 [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001AddDetail()
2===========
3
4FUNKTION
5--------
6::
7
8 void AddDetail(string|string* keys,
9 string|string*|mapping|closure desc);
10
11DEFINIERT IN
12------------
13::
14
15 /std/thing/description.c
16
17ARGUMENTE
18---------
19::
20
21 keys
22 String oder Array von Strings mit den Namen der Details.
23 desc
24 String, Mapping, String-Array oder Closure mit/zur Beschreibung.
25
26BESCHREIBUNG
27------------
28::
29
30 Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
31 bei der Untersuchung aussehen, haengt im wesentlichen vom Typ der
32 Beschreibung <desc> ab:
33 <desc> ist ein String.
34 Beim Untersuchen wird dieser String zurueckgegeben.
35 <desc> ist ein String-Array.
36 Beim Untersuchen wird zufaellig einer der Strings zurueckgegeben.
37 <desc> ist ein Mapping.
38 Das Mapping muss folgenden Aufbau haben:
39 ([0: "Defaulttext",
40 "rasse1": "r1text", ...]).
41
42 Falls fuer die Rasse des das Detail untersuchenden Spielers ein
43 Eintrag im Mapping existiert, wird der entsprechende Text
44 zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
45 rassenabhaengige Details moeglich. Siehe auch die Beispiele.
46 <desc> ist eine Closure.
47 In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
48 zurueckgegeben. Die Closure bekommt dabei den Namen des Details
49 als Parameter uebergeben.
50
51 Fuer Details koennen Forscherpunkte eingetragen werden.
52
53BEISPIELE
54---------
55::
56
57 Ein schlichtes Detail:
58
59 AddDetail(({"sofa","couch"}), "Eine kleine Couch.\n");
60
61 Laengere Details sollten hierbei nicht per Hand umgebrochen werden,
62 sondern man kann hierzu die Funktion break_string() nutzen:
63
64 AddDetail("detail", break_string(
65 "Du wolltest es ja nicht anders, jetzt musst Du Dir dieses "
66 "fuerchterlich lange Detail durchlesen!!!", 78));
67
68 Noetige Zeilenumbrueche bei Zeilenlaengen groesser 77 werden so
69 automatisch generiert.
70 Ein rassenabhaengiges Detail:
71
72 AddDetail(({"bett","bettchen"}),
73 ([0 :"Eine kleines Bett.\n", // Der Defaulttext
74 "zwerg": // Die Rasse klein schreiben
75 "Das Bett laedt geradezu zu einem Nickerchen ein.\n"]));
76
77 Und nun ein Detail mit Closure (diese Version ersetzt das Verhalten
78 von AddSpecialDetail).
79
80 int hebel_betaetigt;
81 ...
82 string hebel(string str); // Funktion bekannt machen (Prototyping)
83 ...
84 AddDetail(({"hebel","schalter"}), #'hebel);
85 ...
86 string hebel(string key) {
87 if(hebel_betaetigt)
88 return "Der "+capitalize(key)+" steht auf EIN.\n";
89 else
90 return "Der "+capitalize(key)+" steht auf AUS.\n";
91 }
92
93 Man erhaelt verschiedene Ergebnisse beim Untersuchen, je nachdem
94 ob das Flag hebel_betaetigt gesetzt ist oder nicht.
95
96SIEHE AUCH
97----------
98::
99
100 Setzen: AddReadDetail(), AddSmells(), AddSounds(),
101 AddTouchDetail()
102 Loeschen: RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
103 RemoveSounds(), RemoveTouchDetail()
104 Daten: P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS,
105 P_TOUCH_DETAILS, P_SPECIAL_DETAILS
106 Veraltet: AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
107 Sonstiges: GetDetail(), break_string()
108
10920.01.2015, Zesstra
110