Ein Sprachfehler
![]()
// Wenn der Spieler dieses unsichtbare Objekt im Inventar hat, spricht er // rueckwaerts. // Dazu modifizieren wir ET_COMM. // Original by Gum und Sunrise@Wunderland 2001 inherit "thing"; #include <defines.h> #include <properties.h> #include <events.h> #include <living/comm.h> #include <living/soul.h> #pragma strong_types void reverse(mixed data, string type, int prio); private string umdrehen(string str) void create() { if (!clonep()) return; ::create(); // Das Objekt ist unsichtbar. Es soll nicht ablegbar sein und nicht durch // Ende zu verlieren. // Und es soll keine Id haben, mit der der Spieler es ansprechen kann. Da // Objekte, die von /std/thing erben immer die id "ding" haben, // benutzen wir nicht AddId sondern SetProp(P_IDS, ...). // (Objekte ohne Namen buggen, wenn der Spieler zum Beispiel // "lege alle ding ab" macht. SetProp(P_NODROP, 1); SetProp(P_NEVERDROP, 1); SetProp(P_AUTOLOADOBJ, 1); SetProp(P_IDS, ({"\nsprachfehler"})); // Wir lauschen auf ET_COMM mit der Prioritaet MODIFY, da wir eines der // Datenfelder (den Text, den der Spieler sagt) aendern wollen. listen_event(ET_COMM, EPRIO_MODIFY, #'reverse); } void reverse(mixed data, string type, int prio) { // Wenn wir kein Mapping data bekommen haben oder kein Akteur existiert, // brechen wir ab. if (!mappingp(data) || !data[E_ACTOR]) return; // Der Akteur muss der Spieler sein, in dessen Inventar wir sind - wenn // nicht, brechen wir ab. if (data[E_ACTOR] != environment()) return; // Nun uebergeben wir den Text, den die Zuschauer sehen an die Funktion // umdrehen. Das Ergebnis wird dem entsprechenden Eintrag im Mapping wieder // zugewiesen. data[E_COMM_TEXT][C_TEXT_OTHER] = umdrehen(data[E_COMM_TEXT][C_TEXT_OTHER]); } // In dieser Funktion ist der Algorithmus zum Umdrehen des Textes private string umdrehen(string str) { string tmp = ""; // Wir schauen wie lang der uebergebene String ist. Und dann erstellen wir // von hinten nach vorn aus dem String str einen neuen String tmp. // Man kann einzelne Teile von Strings gezielt ansprechen analog wie bei // Arrays. Dabei ist str[i..i] das Zeichen das an Position i im String steht - // die erste Position ist 0. for (int i = strlen(str); i--;) tmp += str[i..i]; return tmp; } |
| Start » Magierhandbuch » Dokumentation » Programmierbeispiele » Sprachfehler | |
|
| |