| AddDetail() |
| *********** |
| |
| |
| FUNKTION |
| ======== |
| |
| void AddDetail(string|string* keys, |
| string|string*|mapping|closure desc); |
| |
| |
| DEFINIERT IN |
| ============ |
| |
| /std/thing/description.c |
| |
| |
| ARGUMENTE |
| ========= |
| |
| keys |
| String oder Array von Strings mit den Namen der Details. |
| desc |
| String, Mapping, String-Array oder Closure mit/zur Beschreibung. |
| |
| |
| BESCHREIBUNG |
| ============ |
| |
| Die Beschreibung der Details <keys> wird gesetzt. Wie die Details |
| bei der Untersuchung aussehen, haengt im wesentlichen vom Typ der |
| Beschreibung <desc> ab: |
| <desc> ist ein String. |
| Beim Untersuchen wird dieser String zurueckgegeben. |
| <desc> ist ein String-Array. |
| Beim Untersuchen wird zufaellig einer der Strings zurueckgegeben. |
| <desc> ist ein Mapping. |
| Das Mapping muss folgenden Aufbau haben: |
| ([0: "Defaulttext", |
| "rasse1": "r1text", ...]). |
| |
| Die Rassenstrings muessen hierbei klein geschrieben werden, anders |
| als in P_RACE und P_REAL_RACE. |
| |
| Falls fuer die Rasse des Spielers, der das Detail untersucht, ein |
| Eintrag im Mapping existiert, wird der entsprechende Text |
| zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind |
| rassenabhaengige Details moeglich. |
| <desc> ist eine Closure. |
| In diesem Fall wird die Closure ausgefuehrt und das Ergebnis |
| zurueckgegeben. Die Closure bekommt dabei den Namen des Details |
| als Parameter uebergeben. |
| |
| Fuer Details koennen Forscherpunkte eingetragen werden. |
| |
| |
| BEISPIELE |
| ========= |
| |
| Ein schlichtes Detail: |
| |
| AddDetail(({"sofa","couch"}), "Eine kleine Couch.\n"); |
| |
| Laengere Details sollten hierbei nicht per Hand umgebrochen werden, |
| sondern man kann hierzu die Funktion break_string() nutzen: |
| |
| AddDetail("detail", break_string( |
| "Du wolltest es ja nicht anders, jetzt musst Du Dir dieses " |
| "fuerchterlich lange Detail durchlesen!!!", 78)); |
| |
| Noetige Zeilenumbrueche bei Zeilenlaengen groesser 77 werden so |
| automatisch generiert. |
| Ein rassenabhaengiges Detail: |
| |
| AddDetail(({"bett","bettchen"}), |
| ([0 :"Ein kleines Bett.\n", // Der Defaulttext |
| "zwerg": // Die Rasse klein schreiben |
| "Das Bett laedt geradezu zu einem Nickerchen ein.\n"])); |
| |
| Und nun ein Detail mit Closure (diese Version ersetzt das Verhalten |
| von AddSpecialDetail). |
| |
| int hebel_betaetigt; |
| ... |
| string hebel(string str); // Funktion bekannt machen (Prototyping) |
| ... |
| AddDetail(({"hebel","schalter"}), #'hebel); |
| ... |
| string hebel(string key) { |
| if(hebel_betaetigt) |
| return "Der "+capitalize(key)+" steht auf EIN.\n"; |
| else |
| return "Der "+capitalize(key)+" steht auf AUS.\n"; |
| } |
| |
| Man erhaelt verschiedene Ergebnisse beim Untersuchen, je nachdem |
| ob das Flag hebel_betaetigt gesetzt ist oder nicht. |
| |
| |
| SIEHE AUCH |
| ========== |
| |
| Setzen: AddReadDetail(), AddSmells(), AddSounds(), |
| AddTouchDetail() |
| Loeschen: RemoveDetail(), RemoveReadDetail(), RemoveSmells(), |
| RemoveSounds(), RemoveTouchDetail() |
| Daten: P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, |
| P_TOUCH_DETAILS, P_SPECIAL_DETAILS |
| Veraltet: AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG |
| Sonstiges: GetDetail(), break_string() |
| |
| 11.04.2020, Arathorn |