FUNKTION: notify_midnight DEKLARATION: void notify_midnight() BESCHREIBUNG: Diese Funktion wird in allen mit CONTROL->add_controller("notify_midnight", ob) angemeldeten Objekten 'ob' aufgerufen, wenn es Mitternacht geworden ist. ob darf dabei kein Clone sein. Angemeldete Controller bleiben ueber die Zerstoerung von 'ob' und sogar ueber ein Armageddon hinaus gespeichert. (Das heisst, das Objekt wird wieder geladen, wenn es Mitternacht ist, sofern es sich nicht mit delete_controller abgemeldet hatte.) CONTROL ist in /sys/apps.h definiert. VERWEISE: add_controller, notify, notify_highnoon, notify_begin_daylight, notify_begin_darkness GRUPPEN: Zeit SOURCE: /apps/control.c FUNKTION: notify_highnoon DEKLARATION: void notify_highnoon() BESCHREIBUNG: Diese Funktion wird in allen mit CONTROL->add_controller("notify_highnoon", ob) angemeldeten Objekten 'ob' aufgerufen, wenn es Mittags geworden ist. ob darf dabei kein Clone sein. Angemeldete Controller bleiben ueber die Zerstoerung von 'ob' und sogar ueber ein Armageddon hinaus gespeichert. (Das heisst, das Objekt wird wieder geladen, wenn es Mitternacht ist, sofern es sich nicht mit delete_controller abgemeldet hatte.) CONTROL ist in /sys/apps.h definiert. VERWEISE: add_controller, notify, notify_midnight, notify_begin_daylight, notify_begin_darkness GRUPPEN: Zeit SOURCE: /apps/control.c FUNKTION: notify_begin_daylight DEKLARATION: void notify_begin_daylight() BESCHREIBUNG: Diese Funktion wird in allen mit CONTROL->add_controller( "notify_begin_daylight", ob) angemeldeten Objekten 'ob' aufgerufen, wenn die Sonne aufgegangen ist (4:10 VL-Zeit). ob darf dabei kein Clone sein. Angemeldete Controller bleiben ueber die Zerstoerung von 'ob' und sogar ueber ein Armageddon hinaus gespeichert. (Das heisst, das Objekt wird wieder geladen, wenn es Mitternacht ist, sofern es sich nicht mit delete_controller abgemeldet hatte.) CONTROL ist in /sys/apps.h definiert. VERWEISE: add_controller, notify, notify_midnight, notify_highnoon, notify_begin_darkness GRUPPEN: Zeit SOURCE: /apps/control.c FUNKTION: notify_begin_darkness DEKLARATION: void notify_begin_darkness() BESCHREIBUNG: Diese Funktion wird in allen mit CONTROL->add_controller( "notify_begin_darkness", ob) angemeldeten Objekten 'ob' aufgerufen, wenn die Sonne untergegangen ist (21:00 VL-Zeit). ob darf dabei kein Clone sein. Angemeldete Controller bleiben ueber die Zerstoerung von 'ob' und sogar ueber ein Armageddon hinaus gespeichert. (Das heisst, das Objekt wird wieder geladen, wenn es Mitternacht ist, sofern es sich nicht mit delete_controller abgemeldet hatte.) CONTROL ist in /sys/apps.h definiert. VERWEISE: add_controller, notify, notify_midnight, notify_highnoon, notify_begin_daylight GRUPPEN: Zeit SOURCE: /apps/control.c FUNKTION: notify_mudcrash DEKLARATION: void notify_mudcrash(int signal) BESCHREIBUNG: Wenn der Driver gerade (z.B. durch einen Speicherfehler) crasht, dann reisst er sich nochmal kurz zusammen und ruft CONTROL->notify("mudcrash", signal) auf. signal ist dabei das POSIX-Signal, das dem Driver gesendet wurde. CONTROL ruft dann in allen angemeldeten Objekten notify_mudcrash auf. (CONTROL ist in definiert.) Da der Driver aber gerade dabei ist, zu crashen, sind keine Dateioperationen mehr erlaubt, das schliesst sowohl die normalen Datei-Efuns (write_file, save_object), als auch Netzwerkoperationen (z.B. das Ausgeben von Meldungen an Spieler) ein. VERWEISE: add_controller, notify GRUPPEN: grundlegendes SOURCE: /apps/control.c FUNKTION: add_job DEKLARATION: varargs int add_job(string func, int zeit, mixed param) BESCHREIBUNG: Fuegt ein job in die crontab ein. Beispiel: CRON_OB->add_job("my_func", 123456, "param") Das CRON_OB Objekt ruft dann jeden Spieltag um 12:34:56 die Funktion my_func() mit Parameter "param" in dem Objekt auf, das den Job mit add_job eingefuegt hat. CRON_OB ist in config.h definiert. Der Parameter param darf fehlen. add_job liefert bei Erfolg eine eindeutige Job_ID zurueck, sonst 0. add_job ignoriert weitere Aufrufe mit gleicher zeit und func. Alternativ kann man die Jobs auch in /static/adm/CRONTAB eintragen lassen. GRUPPEN: Zeit VERWEISE: delete_job SOURCE: /apps/cron.c FUNKTION: delete_job DEKLARATION: varargs int delete_job(string func, int zeit) BESCHREIBUNG: Loescht einen Job der auf die angegebenen Parameter passt. Beispiel: CRON_OB->delete_job("do_it"); Loescht den Job mit der Funktion "do_it" while(CRON_OB->delete_job()); Loescht alle Jobs des aufrufenden Objekts delete_job liefert !0 wenn das Loschen geklappt hat. GRUPPEN: Zeit VERWEISE: add_job SOURCE: /apps/cron.c FUNKTION: konjugiere DEKLARATION: string *konjugiere(string verb) BESCHREIBUNG: Konjugiert das übergebe Verb und liefert eine Liste der 6 Formen als Array (1.-3. Person Singular und 1.-3. Person Plural) zurück. ACHTUNG: Das übergebene Verb muß in der dritten Person Singular stehen. VERWEISE: verb GRUPPEN: grammatik SOURCE: /apps/deklin.c FUNKTION: query_domains DEKLARATION: string *query_domains() BESCHREIBUNG: Mit dieser Funktion kann man alle Domains abfragen VERWEISE: GRUPPEN: domain, map SOURCE: /apps/domains.c FUNKTION: domain_member DEKLARATION: int domain_member(string domain, string name) BESCHREIBUNG: Returned 1, wenn ein Mitglied der Domain ist. VERWEISE: domain_lord, query_domain_lords GRUPPEN: domain, map SOURCE: /apps/domains.c FUNKTION: domain_lord DEKLARATION: int domain_lord(string domain, string name) BESCHREIBUNG: Returned 1, wenn ein Domain-Lord der Domain ist. VERWEISE: domain_member, query_domain_lords GRUPPEN: domain, map SOURCE: /apps/domains.c FUNKTION: domain_helfer DEKLARATION: int domain_helfer(string domain, string name) BESCHREIBUNG: Returned 1, wenn ein Domain-Helfer der Domain ist. VERWEISE: domain_member, query_domain_lords GRUPPEN: domain, map SOURCE: /apps/domains.c FUNKTION: query_domain_lords DEKLARATION: string *query_domain_lords(string domain) BESCHREIBUNG: Liefert den Namen aller Domain-Lords der Domain VERWEISE: domain_lord, domain_member, query_domain_helfer, query_domain_member GRUPPEN: domain, map SOURCE: /apps/domains.c FUNKTION: query_domain_helfer DEKLARATION: string *query_domain_helfer(string domain) BESCHREIBUNG: Liefert den Namen aller Domain-Helfer der Domain VERWEISE: domain_lord, domain_member, query_domain_lords GRUPPEN: domain, map SOURCE: /apps/domains.c FUNKTION: query_domain_members DEKLARATION: string *query_domain_members(string domain) BESCHREIBUNG: Liefert den Namen aller Domain-Members der Domain VERWEISE: domain_lord, domain_member, query_domain_lords GRUPPEN: domain, map SOURCE: /apps/domains.c FUNKTION: query_domains_of DEKLARATION: string *query_domains_of(string lord) BESCHREIBUNG: Liefert die Domains, von denen der Domainlord ist. VERWEISE: domain_lord, domain_member, query_domain_lords, query_memberships_of GRUPPEN: domain, map SOURCE: /apps/domains.c FUNKTION: query_memberships_of DEKLARATION: string *query_memberships_of(string wiz) BESCHREIBUNG: Liefert die Domains, in denen Mitglied ist. VERWEISE: domain_lord, domain_member, query_domain_lords, query_domains_of GRUPPEN: domain, map SOURCE: /apps/domains.c FUNKTION: query_domainhelfer_of DEKLARATION: string *query_domainhelfer_of(string wiz) BESCHREIBUNG: Liefert die Domains, in denen Helfer ist. VERWEISE: domain_lord, domain_member, query_domain_lord, query_domains_of GRUPPEN: domain, map SOURCE: /apps/domains.c FUNKTION: query_error_header DEKLARATION: mixed* query_error_header(int nr) BESCHREIBUNG: Die Funktion liefert ein Array mit Eintraege aus der /sys/error_db.h, welche mit EDB_H_ beginnen. Falls der Fehler nicht existiert, wird 0 geliefert. VERWEISE: query_error_data GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: query_error_data DEKLARATION: mapping query_error_data(int nr) BESCHREIBUNG: Die Funktion liefert ein Mapping mit Eintraege aus der /sys/error_db.h, welche mit EDB_E_ beginnen. Falls der Fehler nicht existiert, wird 0 geliefert. VERWEISE: set_error_data,query_error_header GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: query_error DEKLARATION: DEPRECATED mixed *query_error(int nr) BESCHREIBUNG: Gibt den Fehler in der alten Datenstruktur zurueck. Die Funktion existiert z.Zt. nur aus Kompatibilitaetsgruenden. VERWEISE: hide_error GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: valid_debugger DEKLARATION: string valid_debugger(string deb) BESCHREIBUNG: Ueberprueft, ob der Debugger erlaubt ist. und gibt den Namen korrekt zurueck. VERWEISE: add_debugger GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: _delete_error DEKLARATION: private void _delete_error(mixed * err, mapping edata, int number) BESCHREIBUNG: Loescht einen Fehler, der sicher da ist Oder stellt skurrilerweise einen geloeschten Fehler wieder her... VERWEISE: valid_debugger GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: query_wiz_errors DEKLARATION: deprecated varargs int *query_wiz_errors(string wiz, string file_pattern, string verursacher_pattern, int error_type) BESCHREIBUNG: Diese Funktion liefert die Liste an Fehlernummern, die dem Denugger 'wiz' (Gott oder acl-Gruppe) und den Parametern file_pattern,verursacher_pattern und error_type entspricht. Die Funktion existiert z.Zt. nur aus Kompatibilitaetsgruenden. VERWEISE: query_wiz_projects GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: query_wiz_projects DEKLARATION: DEPRECATED string *query_wiz_projects(string wiz, int only_non_empty, string file_pattern, string verursacher_pattern, int error_type) BESCHREIBUNG: Zum Abfragen der Bereiche, fuer die 'wiz' zustaendig ist Wenn Flag only_non_empty gesetzt ist, werden nur die Bereiche zurueckgegeben, in denen Fehler fuer 'wiz' eingetragen sind. Fuer diese Auswertung werden die zwei pattern(file_pattern und verursacher_pattern) herangezogen. Die Funktion existiert z.Zt. nur aus Kompatibilitaetsgruenden. VERWEISE: query_wiz_errors GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: precheck_responsible DEKLARATION: varargs int * precheck_responsible(int * errnums, int flag_deleted) BESCHREIBUNG: Prueft alle Fehlernummern auf Existenz und Zustaendigkeit. Bei flag_deleted!=0 werden geloeschte Fehler nicht rausgeloescht. Rueckgabe ist die Liste der zulaessigen Fehlernummern. VERWEISE: precheck_add_debugger GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: precheck_add_debugger DEKLARATION: int * precheck_add_debugger(int * errnums, string * deb) BESCHREIBUNG: Prueft alle Fehlernummern ob der Debugger noch hinzugefuegt werden muss. Gibt alle Fehlernummern zurueck, bei der noch was getan werden muss. VERWEISE: precheck_responsible GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: exec_change_error_type DEKLARATION: string exec_change_error_type(int errnum, string neuer_typ) BESCHREIBUNG: Prueft, ob der this_player Zugriff hat und aendert dann im Falle eines von Spielern abgesetzten Fehlern den Fehlertyp (neuer_typ=f,t,d,i,w) VERWEISE: precheck_responsible GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: exec_add_debugger DEKLARATION: int * exec_add_debugger(int * errnums, string * deb) BESCHREIBUNG: Fuehrt das add_debugger fuer alle angegebenen Fehler durch. VERWEISE: precheck_responsible, precheck_add_debugger GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: exec_hide_debugger DEKLARATION: int * exec_hide_debugger(int * errnums, string zreg, string nzreg) BESCHREIBUNG: Fuehrt das exec_debugger fuer alle angegebenen Fehler durch. VERWEISE: precheck_responsible GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: exec_reassign_file DEKLARATION: int * exec_reassign_file(int * errnums, string filename) BESCHREIBUNG: Fuehrt das reassign fuer alle angegebenen Fehler durch. VERWEISE: precheck_responsible GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: exec_delete_error DEKLARATION: int * exec_delete_error(int * errnums) BESCHREIBUNG: Loescht die Fehler errnums aus der Datenbank oder stellt sie wieder her, falls in der Backupgroup. Zurueckgeleifert werden die Fehlernummern, die erfolgreich behandelt wurden oder ein leeres Array bei Fehlern, z.B. wird der precheck_responsible durchgefuehrt und es wird erwartet, dass hier keine Fehlernummern mehr anfallen. VERWEISE: hide_error, precheck_responsible GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: query_group_list DEKLARATION: mixed query_group_list(string wiz, mapping options) BESCHREIBUNG: Erstellt eine Gruppenliste abhaengig von den angegeben Optionen: - EDB_OPT_GROUP_ONE: eine einzelne Gruppe (string) zurueckgeben. - EDB_OPT_GROUP_ALL: wenn vorhanden, werden alle Fehlergruppen herangezogen wenn nicht, dann nur die fuer wiz zustaendigen. - EDB_OPT_GROUP_PATTERN: welche der obigen Gruppen passen ins Schema(string) - EDB_OPT_GROUP_INCLUDE: Fehlergruppen (string *), welche zur Auswahl hinzugefuegt wird. - EDB_OPT_GROUP_PREFIX: Prefix der Fehlergruppen (string). - EDB_OPT_GROUP_EXCLUDE: Fehlergruppen (string *), welche von der Auswahl ausgeschlossen werden. - EDB_OPT_GROUP_EXCLUDE_PATTERN: Ein Muster zum Ausschliessen von Gruppen. - EDB_OPT_EXLUSIVE_GROUPS Nur Fehlergruppen dieser Liste (string*) anzeigen. - EDB_OPT_ADD_W_GROUP Private und andeere Work-Groups hinzufuegen - EDB_OPT_ADD_S_GROUP Groups hinzufuegen. - EDB_OPT_ADD_Z_GROUP nur diese Zustaendigen filtern (mapping zus:errnums) - EDB_OPT_ERROR_TYPE: Fehlertyp zum Filtern der Fehler (int) - EDB_OPT_FILE_PATTERN: Die Fehler pro Gruppe werden bzgl der eingetragenen Datei gefiltert, falls vorhanden. (string) - EDB_OPT_VERURSACHER_PATTERN: Die Fehler werden nach Verursacher dieser Suchmaske (string) gefiltert. - EDB_OPT_NO_EMPTY_ERR: Wenn 1, dann werden leere Fehlergruppen aus der Gruppenliste entfernt. - EDB_OPT_NEWER_SINCE: Nur Fehler geaendert-neuer als Zeitstempel(int). - EDB_OPT_NEWER_BEFORE: Nur Fehler geaendert-aelter als Zeitstempel(int). - EDB_OPT_CREATED_SINCE: Nur Fehler erstellt-neuer als Zeitstempel(int). - EDB_OPT_CREATED_BEFORE:Nur Fehler erstellt-aelter als Zeitstempel(int). - EDB_OPT_ONLY_NEW_ERR: Nur Fehler aus EDB_OPT_NEW_ERRNUMS filtern. Das Ergebnis ist ein mapping mit Gruppennamen als key und die (gefilterten) Fehlerlisten als value des mappings. VERWEISE: query_main_groups GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: query_main_groups DEKLARATION: mapping query_main_groups(string wiz, mapping options) BESCHREIBUNG: Erstellt eine Toplevel Gruppenliste abhaengig von den angegeben Optionen, wie sie in query_group_list definiert sind, Ausnahmen: - EDB_OPT_GROUP_PREFIX wird genutzt, um gruppenweise die Fehler zu sammeln. - EDB_OPT_GROUP_ONE macht hier kein Sinn. - EDB_OPT_ZUSTAENDIGER ersetzt den Parameter wiz Das Ergebnis ist ein mapping mit Gruppennamen als key und die (gefilterten) Fehlerlisten als value des mappings. VERWEISE: query_group_list GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: query_wiedervorlage DEKLARATION: mapping query_wiedervorlage(string wiz, mapping options) BESCHREIBUNG: In options[EDB_OPT_WIEDERVORLAGE] ist ein mapping bestehend aus Zeitstempel als key und Arrays von Fehlernummern als values. Die Fehlernummern werden hier auf Vorhandensein geprueft und wieder als korrigiertes mapping zurueckgegeben. VERWEISE: query_group_list, query_error_list GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: query_error_list DEKLARATION: mixed query_error_list(string wiz, mapping options) BESCHREIBUNG: Diese Funktion liefert passend zum Suchmuster (wiz,options) die Fehlerliste. Intern wird query_group_list verwendet, wenn diese mehr als einen Fehlerbereich zurueckgibt, so werden die darin enthaltenen Fehlerlisten zu einer Fehlerliste zusammengefasst. Sollte keine Fehler vorhanden sein, wird 0 zurueckgegeben. Ansonsten wird die Fehlerliste zurueckgegeben, wo jeder Eintrag wiederrum ein Array mit folgenden Feldern darstellt: - EDB_ERRLIST_ERRNUM : Fehlernummer - EDB_ERRLIST_TIME : Erstelldatum oder das Datum der letzten Aenderung - EDB_ERRLIST_TYPE : Typeschluessel: F,I,R,C,W,T,D - EDB_ERRLIST_PLAYER : Verursacher - EDB_ERRLIST_FILE : Referenzierte Datei Die Fehler werden sortiert, wenn folgende Elemente in options sind: - EDB_OPT_SORT_OPEN_ASC : Aufsteigend sortiert nach Erstelldatum - EDB_OPT_SORT_OPEN_DESC : Absteigend sortiert nach Erstelldatum - EDB_OPT_SORT_CHANGE_ASC : Aufsteigend sortiert nach letztem Aenderungsdatum - EDB_OPT_SORT_CHANGE_DESC : Absteigend sortiert nach letztem Aenderungsdatum - keine der obigen : Unsortiert. VERWEISE: query_group_list GRUPPEN: fehlerdatenbank SOURCE: /apps/error_db.c FUNKTION: add_group_member DEKLARATION: string add_group_member(string sub, string groupname) BESCHREIBUNG: Fuegt der Gruppe ein neues Mitglied hinzu. muss der Name einer existierenden Gruppe sein, muss ein existierender Spieler oder eine existierende Gruppe sein, this_player muss Admin der Gruppe oder einer uebergeordneten sein. Rueckgabewert: Fehler- oder Erfolgsmeldung. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: delete_group_member DEKLARATION: int delete_group_member(string sub, string groupname) BESCHREIBUNG: Loescht aus der Gruppe , wobei eine existierende Gruppe ist und ein Mitglied dieser Gruppe ist und this_player das darf. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: add_group DEKLARATION: int add_group(string groupname) BESCHREIBUNG: Fuegt eine neue Untergruppe hinzu, sofern der Eintragende dazu berechtigt ist. Fuer den Namen der Gruppe gelten dieselben Regeln wie fuer Domainnamen. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: rename_group DEKLARATION: int rename_group(string full_groupname, string new_grouprest) BESCHREIBUNG: rename_group ("A:B:C","X") benennt die Gruppe "A:B:C" um in "A:B:X". Alle Untergruppen, zum Beispiel "A:B:C:D", werden auch entsprechend umbenannt; so wird aus "A:B:C:D" eben auch "A:B:X:D". GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: delete_group DEKLARATION: int delete_group(string groupname) BESCHREIBUNG: Loescht die Gruppe , sofern die Gruppe weder Mitglieder noch Untergruppen besitzt und der ausfuehrende das darf. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: add_group_admin DEKLARATION: int add_group_admin(string sub, string groupname) BESCHREIBUNG: Fuegt der Gruppe den Gott oder die Gruppe als Gruppenadmin hinzu. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: delete_group_admin DEKLARATION: string delete_group_admin(string wiz, string group_str) BESCHREIBUNG: Loescht in der Gruppe den Admin , sofern der Ausfuehrende dazu berechtigt ist, d.h. selber Admin dieser oder einer uebergeordneten Gruppe ist. Rueckgabewert ist die Fehlermeldung, falls es nicht klappt, 0 sonst. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: is_group_member DEKLARATION: varargs int is_group_member(string wiz, string groupname) BESCHREIBUNG: Testet, ob Mitglied der Gruppe ist. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: query_group_info DEKLARATION: string query_group_info(string groupname) BESCHREIBUNG: Diese Funktion liefert einen mehrzeiligen String mit Infodaten ueber eine Gruppe. Hierzu gehoeren Gruppenadmins, Mitglieder und direkte Untergruppen sowie das Read Only Flag. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: query_subgroups DEKLARATION: string *query_subgroups(string groupname) BESCHREIBUNG: Diese Funktion liefert zu einer Gruppe die Namen aller direkten Untergruppen. Existiert die Gruppe nicht, liefert sie 0. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: query_full_group_info DEKLARATION: string query_full_group_info(string groupname) BESCHREIBUNG: Diese Funktion liefert einen mehrzeiligen String mit Infodaten ueber eine alle Untergruppen einer Gruppe. Hierzu gehoeren die Untergruppen, die Gruppenadmins und die Mitglieder, welcher in einer Tabelle ausgegeben werden. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: query_wiz_infos DEKLARATION: string query_wiz_infos(string wiz) BESCHREIBUNG: Liefert fuer einen Wizard eine Info ueber die Gruppenmitgliedschaften in Form eines Textstrings. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: query_fdb_groups DEKLARATION: string *query_fdb_groups(string wiz) BESCHREIBUNG: Liefert alle Gruppen, die fuer einen Gott in der Fehlerdatenbank aufgelistet werden sollen. Also sowohl die Gruppen, in denen ein Wiz auf Grund seiner Mitgliedschaft in einer anderen Gruppe Mitglied ist. DHs, die nicht in der Domaingruppe Mitglied sind, tut die Funktion so, als ob sie Mitglieder in der Domaingruppe (in der noralerweise nur DLs sind) enthalten waeren. Aus Sicherheitsgruenden laesst sich diese Funktion nur von /apps/error_db und dem Zauberstab aufrufen. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: query_all_wiz_group_members_of DEKLARATION: string *query_all_wiz_group_members_of(string groupname) BESCHREIBUNG: Liefert fuer eine Gruppe alle Wizards, die in ihr Mitglied sind. Ist in einer Gruppe eine Gruppe Mitglied, so werden auch die Wizards, die in dieser Gruppe Mitglied sind, geliefert. Im Ergebnis dieser Methode sind also alle Wizards, die unmittelbar oder mittelbar in der Gruppe Mitglied sind. Dabei ist, wie bei allen Gruppenmethoden, auf korrekte Gross - Kleinschreibung bei Grupennamen zu achten. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: adjust_group_case DEKLARATION: string adjust_group_case(string groupname) BESCHREIBUNG: Schaut ohne Beachtung von Gross-/Kleinschreibung nach, ob die angegebene Gruppe existiert und liefert dann den Gruppenname mit richtiger Gross-/Kleinschreibung zurueck oder 0, falls sie nicht existiert. VERWEISE: group_exists GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: query_maingroups DEKLARATION: string *query_maingroups() BESCHREIBUNG: Liefert die Namen der Hauptgruppen GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: expand_groups DEKLARATION: string *expand_groups(string *groups, int flags) BESCHREIBUNG: Liefert die Liste der Goetter, welche Mitglieder der Gruppen in sind. kann auch direkt Goetternamen enthalten, welche dann uebernommen werden. Hat der zweite Parameter das 0. Bit gesetzt, so werden Elemente, die nicht aufgeloest werden koennen, behalten, andernfalls weggworfen. Hat er das 1. Bit gesetzt, so spielt Gross-/Kleinschreibung keine Rolle. Hat er das 2. Bit gesetzt, so kann auch ein Punkt als Trenner anstatt dem Doppelpunkt vorkommen. GRUPPEN: acl SOURCE: /apps/groups.c FUNKTION: read_dir DEKLARATION: private mixed *read_dir(string str, int flag) BESCHREIBUNG: Ersatz fuer get_dir, wobei uninteressante Sachen (siehe Define JUNK) rausgefiltert werden. Als flag ist nur GETDIR_NAMES oder GETDIR_NAMES|GETDIR_SIZES erlaubt. GRUPPEN: Root:Enzy SOURCE: /apps/help_tool.c FUNKTION: read_file_unlimited DEKLARATION: private string read_file_unlimited(string file) BESCHREIBUNG: Ersatz fuer read_file ohne Beachtung der Laufzeitbeschraenkungen (LIMIT_FILE/LIMIT_BYTES siehe query_limits). GRUPPEN: Root:Enzy SOURCE: /apps/help_tool.c FUNKTION: query_efuns DEKLARATION: string *query_efuns(string regexp) BESCHREIBUNG: Liefert die Namen aller Efuns, die auf den regulaeren Ausdruck regexp passen (oder alle, falls regexp 0 ist). GRUPPEN: Root:Enzy SOURCE: /apps/help_tool.c FUNKTION: query_efun_hilfetext DEKLARATION: varargs string query_efun_hilfetext(string funk, int original) BESCHREIBUNG: Liefert den Hilfetext zu einer Efun zurueck. Ist original != 0, wird nur der englische Originaltext geliefert, keine uebersetzte deutsche Fassung. GRUPPEN: Root:Enzy SOURCE: /apps/help_tool.c FUNKTION: query_driver_hilfetext DEKLARATION: varargs string query_driver_hilfetext(string name, int original) BESCHREIBUNG: Liefert den Hilfetext zu einem Thema in der Driver-Doku zurueck. Ist original != 0, wird nur der englische Originaltext geliefert, keine uebersetzte deutsche Fassung. GRUPPEN: Root:Enzy SOURCE: /apps/help_tool.c FUNKTION: query_efun_deklaration DEKLARATION: string query_efun_deklaration(string funk) BESCHREIBUNG: Liefert die Deklaration zu einer Efun zurueck. GRUPPEN: Root:Enzy SOURCE: /apps/help_tool.c FUNKTION: query_efun_gruppen DEKLARATION: string *query_efun_gruppen() BESCHREIBUNG: Liefert alle Efun-Gruppen zurueck GRUPPEN: Root:Enzy SOURCE: /apps/help_tool.c FUNKTION: query_efun_gruppen_funktionen DEKLARATION: varargs string *query_efun_gruppen_funktionen(string grp, string regexp) BESCHREIBUNG: Liefert alle Funktionen der Efun-Gruppe grp zurueck, die auf den regulaeren Ausdruck regexp passen (bzw. alle Funktionen, falls regexp gleich 0 ist). GRUPPEN: Root:Enzy SOURCE: /apps/help_tool.c FUNKTION: query_lfun_deklarationen DEKLARATION: varargs mapping query_lfun_deklarationen(string *gruppen, string regexp, string dateiname) BESCHREIBUNG: -- Interne Funktion! -- Liefert die Funktion mit ihren Deklarationen aus den Gruppen 'gruppen', welche auf den regulaeren Ausdruck 'regexp' passen und in der Datei 'dateiname' vorkommen, in einem Mapping (["Funktionsname":"Deklarationen"]) zurueck. Jeder der Parameter kann 0 sein, dann werden entsprechend alle Funktionen genommen. GRUPPEN: Root:Enzy VERWEISE: query_lfun_texte SOURCE: /apps/help_tool.c FUNKTION: query_beispiele DEKLARATION: string *query_beispiele(string pad) BESCHREIBUNG: Liefert die Namen aller Beispiele, die auf den regulaeren Ausdruck regexp passen (oder alle, falls regexp 0 ist). GRUPPEN: Root:Enzy SOURCE: /apps/help_tool.c FUNKTION: query_bsp_texte DEKLARATION: string query_bsp_texte(string* gruppen, string name) BESCHREIBUNG: -- Interne Funktion! -- Liefert die Texte der Beispiele 'name' in den Gruppen 'gruppen' zurueck. 'gruppen' kann auch 0 sein, dann werden alle Beispiele betrachtet. GRUPPEN: Root:Enzy VERWEISE: query_lfun_deklarationen SOURCE: /apps/help_tool.c FUNKTION: query_lfun_texte DEKLARATION: string query_lfun_texte(string* gruppen, string name) BESCHREIBUNG: -- Interne Funktion! -- Liefert die Texte der Funktionen 'name' in den Gruppen 'gruppen' zurueck. 'gruppen' kann auch 0 sein, dann werden alle Funktionen betrachtet. GRUPPEN: Root:Enzy VERWEISE: query_lfun_deklarationen SOURCE: /apps/help_tool.c FUNKTION: get_cartesian_coordinates DEKLARATION: varargs int *get_cartesian_coordinates(object ob, int supress_error) BESCHREIBUNG: Gibt die Differenz der Koordinates des Objekts ob zum Map-Raum m0_0 in kartesischen Koordinaten zurueck. ob kann dabei ein Objekt in einem Raum oder ein Raum selbst sein. Wird ob nicht angegeben, wird das aufrufende Objekt verwendet. Aufruf: #include int *koordinaten=KOORDINATEN_MASTER->get_cartesian_coordinates(ob) koordinaten[0]: x-Koordinate koordinaten[1]: y-Koordinate Sind in einem Raum die Typen x_koordinate | im Raum setzen mit: und y_koordinate | add_type("x_koordinate",-142); gesetzt, werden diese zurueckgegeben. Befindet die das Object ob in keinem Map-Raum, so wird der Mittelpunkt der Domain genommen, in der der Raum liegt. Wenn keine Koordinaten ermittelt werden koennen, wird 0 zurueckgeliefert. supress_error!=0 unterdrueckt in dem Fall das do_error... VERWEISE: get_polar_coordinates GRUPPEN: kompass, raum, map SOURCE: /apps/koordinaten.c FUNKTION: get_polar_coordinates DEKLARATION: varargs int *get_polar_coordinates(object ob, int supress_error) BESCHREIBUNG: Gibt die Richtung und die Distanz vom Standort des Objekts ob in der Map zum Map-Raum m0_0 zurueck. ob kann dabei ein Objekt in einem Raum oder ein Raum selbst sein. Wird ob nicht angegeben, wird das aufrufende Objekt verwendet. Aufruf: #include int *koordinaten=KOORDINATEN_MASTER->get_polar_coordinates(ob) koordinaten[0]: Richtung koordinaten[1]: Distanz Sind in einem Raum die Typen x_koordinate | im Raum setzen mit: und y_koordinate | add_type("x_koordinate",-142); gesetzt, werden diese fuer die Berechnung verwendet. Befindet die das Object ob in keinem Map-Raum, so wird der Mittelpunkt der Domain genommen, in der der Raum liegt. Wenn keine Koordinaten ermittelt werden koennen, wird 0 zurueckgeliefert. supress_error!=0 unterdrueckt in dem Fall das do_error... VERWEISE: get_cartesian_coordinates GRUPPEN: kompass, raum, map SOURCE: /apps/koordinaten.c FUNKTION: query_schatzkisten DEKLARATION: mapping *query_schatzkisten(object room) BESCHREIBUNG: Liefert zu einem Raum ein Array mit allen Schatzkisten. (Die zuletzt vergrabenen Kisten befinden sich am Ende des Arrays.) Eine Schatzkiste ist ein Mapping mit folgenden Eintraegen: (Defines aus ) CHEST_NAME: Die Beschriftung der Truhe CHEST_OWNER: Der, der die Kiste vergraben hat (optional) CHEST_MONEY: Ein Array aus Geld-Mappings. Ein Geld-Mapping enthaelt die Eintraege "valuta", "valutas" und "money". CHEST_INV_VALUE: Der Wert sonstiger Gegenstaende in Talern. VERWEISE: add_schatzkiste, get_schatzkiste, has_schatzkiste GRUPPEN: raum SOURCE: /apps/room_autoload.c FUNKTION: add_schatzkiste DEKLARATION: void add_schatzkiste(object room, mapping kiste) BESCHREIBUNG: Vergraebt eine Kiste im Raum. Eine Schatzkiste ist ein Mapping mit folgenden Eintraegen (Defines aus ): CHEST_NAME: Die Beschriftung der Truhe CHEST_OWNER: Der, der die Kiste vergraben hat (optional) CHEST_MONEY: Ein Array aus Geld-Mappings. Ein Geld-Mapping enthaelt die Eintraege "valuta", "valutas" und "money". CHEST_INV_VALUE: Der Wert sonstiger Gegenstaende in Talern. VERWEISE: query_schatzkisten, get_schatzkiste, has_schatzkiste GRUPPEN: raum SOURCE: /apps/room_autoload.c FUNKTION: get_schatzkiste DEKLARATION: mapping get_schatzkiste(object room) BESCHREIBUNG: Entfernt die zuletzt vergrabene Kiste aus der Liste und liefert sie zurueck. Eine Schatzkiste ist ein Mapping mit folgenden Eintraegen (Defines aus ): CHEST_NAME: Die Beschriftung der Truhe CHEST_OWNER: Der, der die Kiste vergraben hat (optional) CHEST_MONEY: Ein Array aus Geld-Mappings. Ein Geld-Mapping enthaelt die Eintraege "valuta", "valutas" und "money". CHEST_INV_VALUE: Der Wert sonstiger Gegenstaende in Talern. Liefert 0, wenn keine Kiste vergraben wurde. VERWEISE: add_schatzkiste, query_schatzkisten, has_schatzkiste GRUPPEN: raum SOURCE: /apps/room_autoload.c FUNKTION: has_schatzkiste DEKLARATION: int has_schatzkiste(object room) BESCHREIBUNG: Liefert 1 zurueck, wenn in dem Raum eine Kiste vergraben wurde, sonst 0. VERWEISE: get_schatzkiste, query_schatzkisten, add_schatzkiste GRUPPEN: raum SOURCE: /apps/room_autoload.c FUNKTION: query_money_info DEKLARATION: varargs mixed *query_money_info([string valuta]) BESCHREIBUNG: query_money_info(valuta) liefert ein Feld (Array) mit Informationen zur im Singular angegeben Waehrung valuta, sofern diese Waehrung in der Zentralbank bekannt ist, ansonsten 0. Index Inhalt ------------------------------------------------------------------------ MONEY_VALUTA Waehrung im Singular (kleingeschrieben) MONEY_VALUTAS Waehrung im Plural (kleingeschrieben) MONEY_GENDER Geschlecht MONEY_KURS Wechselkurs: Anzahl in der Waehrung, die soviel wert sind wie 1000 Taler. Beispiel: 400 bei Sesterzen bedeutet, dass 400 Sesterzen soviel wert sind wie 1000 Taler MONEY_FLAGS Flags (koennen verodert werden). Bisher verwendet: MONEY_NOT_DEKLIN: Waehrung wird nicht dekliniert. Der Eintrag MONEY_FLAGS muss nicht existieren, also vorher testen, ob sizeof(query_money_info(valuta))>MONEY_FLAGS. Die verwendeten Defines sind in /sys/money.h definiert. Beispiel: query_money_info("sesterz") liefert ({"sesterz", "sesterzen", "weiblich", 400}) query_money_info() liefert ein Feld, das fuer jede in der Zentralbank bekannte Waehrung query_money_info(waehrung) enthaelt, also: ({ ({"groschen", "groschen", "maennlich", 9200 }), ({"zorkmid", "zorkmids", "maennlich", 500 }), ({"riki", "riki", "maennlich", 2000, MONEY_NOT_DEKLIN}), ... }) VERWEISE: query_money_description, query_money_info GRUPPEN: handel SOURCE: /apps/zentralbank.c FUNKTION: query_money_description DEKLARATION: string query_money_description(string valuta) BESCHREIBUNG: Liefert die umbrochene Beschreibung der im Singular angegebenen Waehrung valuta, sofern eine Beschreibung dafuer in der Zentralbank bekannt ist, ansonsten "". VERWEISE: query_money_description, query_money_info GRUPPEN: handel SOURCE: /apps/zentralbank.c FUNKTION: check_conservation DEKLARATION: public depreceated varargs check_conservation(object ob,mapping check_attributes) BESCHREIBUNG: Bitte ab sofort die Funktion all_check_conservation verwenden! Liefert eine Begruendung als String, wenn es nicht eingelagert werden kann und eine 1, wenn es generell eingelagert werden kann. check_attributes enthaelt folgende Schlüssel für den precheck_conservation: - ZB_CHECK_TYPE - ZB_CT_UNKNOWN: ist nur während der Umstellung unbekannt. - ZB_CT_TEST_ONLY: für Seherkristall und ähnliches. - ZB_CT_SCHLIESSFACH: Das Bankschliessfach - ZB_CT_SPEZIALTRUHE: Die Schiffsmoebel-Spezialtruhe - ZB_CT_AUKTION: Eine Auktion (erzeugen/einlagern) - ZB_CT_ALCH_KOFFER: Ein Alchemistenkoffer - ZB_CHECK_CON Das Objekt/Mapping der Schliessfach/Truhe/Auktionator, was das Einlagern macht. - ZB_CHECKER_OB Das object/mapping, was die aktuelle Prüfung durchführt. VERWEISE: precheck_conservation,all_check_conservation GRUPPEN: armageddon SOURCE: /apps/zentralbank.c FUNKTION: all_check_conservation DEKLARATION: public depreceated varargs all_check_conservation(object ob,mapping check_attributes) BESCHREIBUNG: Bitte ab sofort die Funktion all_check_conservation verwenden! Liefert eine Begruendung als String, wenn es nicht eingelagert werden kann und eine 1, wenn es generell eingelagert werden kann. In dieser Funktion wird Erfolg und Misserfolg mitdokumentiert. check_attributes enthaelt folgende Schlüssel für den precheck_conservation: - ZB_CHECK_TYPE - ZB_CT_UNKNOWN: ist nur während der Umstellung unbekannt. - ZB_CT_TEST_ONLY: für Seherkristall und ähnliches. - ZB_CT_SCHLIESSFACH: Das Bankschliessfach - ZB_CT_SPEZIALTRUHE: Die Schiffsmoebel-Spezialtruhe - ZB_CT_AUKTION: Eine Auktion (erzeugen/einlagern) - ZB_CT_ALCH_KOFFER: Ein Alchemistenkoffer - ZB_CHECK_CON Das Objekt/Mapping der Schliessfach/Truhe/Auktionator, was das Einlagern macht. - ZB_CHECKER_OB Das object/mapping, was die aktuelle Prüfung durchführt. VERWEISE: precheck_conservation,check_conservation GRUPPEN: armageddon SOURCE: /apps/zentralbank.c FUNKTION: get_owner_stored_file_count DEKLARATION: public int get_owner_stored_file_count(string owner, string file) BESCHREIBUNG: Liefert die die Summe ueber alle Dateien mit Namen 'file', entweder zum owner bzw ueber alle owner (==0). VERWEISE: check_conservation GRUPPEN: handel SOURCE: /apps/zentralbank.c FUNKTION: get_conservation_item_rent DEKLARATION: public varargs float get_conservation_item_rent(object ob,int standard_flag) BESCHREIBUNG: Liefert die Gegenstandsmiete für ein Objekt. Ist standard_flag gesetzt, so wird 1% des Gegenstandswertes angenommen, falls sonst nix gesetzt ist. Reihenfolge ist Factory,Objekt,Property,Standartwert(falls gewuenscht). VERWEISE: get_schliessfach_miete GRUPPEN: armageddon SOURCE: /apps/zentralbank.c FUNKTION: create DEKLARATION: void create() BESCHREIBUNG: Die Funktion create wird in einem Objekt aufgerufen, wenn das Objekt erschaffen wird. Daher gehört in diese Funktion alles hinein, was ein einziges mal beim Erschaffen des Objektes getan werden soll wie Aussehen, Geruch, Geräusch, Name, Geschlecht usw bei Gegenständen, Ausgänge und add_types bei Räumen und ähnliches. Werden globale Variablen nicht bereits in ihrer Deklaration initialisiert (mapping blubber = ([]);) so ist create der geeignete Ort, dies zu tun. Überlagert man diese Funktion, so sollte man dort die create()-Routinen der Inherits aufrufen mit: "*"::create(); Dies kann man auch tun, wenn man unsicher ist, ob ein Inherit überhaupt ein create() besitzt (oder vielleicht mal besitzen wird). Meist wird am Ende von create noch die Funktion reset aufgerufen, siehe dort. VERWEISE: reset, init, clonep GRUPPEN: applied, grundlegendes SOURCE: /doc/applied/4enzy FUNKTION: reset DEKLARATION: void reset() BESCHREIBUNG: Die Funktion reset dient dazu, einen Raum, ein Monster, einen Gegenstand oder was auch immer "aufzuräumen" und in einen Ausgangszustand zurück zu versetzen. Dazu gehören beispielsweise: Erschaffen von Dingen / Monstern, die da sein sollen, falls sie nicht da sind; schließen von Türen, Truhen, Schränken; leeren von Muelleimern; führen von Waffen bei Monstern, falls ein Spieler das Monster dazu gebracht hat, die Waffe zu senken; nachwachsen gepflückter Blumen oder Früchte usw. Es ist meist sinnvoll, diese Funktion am Ende der Funktion create ebenfalls aufzurufen, um das Objekt in einen Startzustand zu versetzen; ansonsten wird sie automatisch ganz grob alle 40 Minuten aufgerufen, sofern mit dem Objekt seit dem letzten Aufruf irgendetwas gemacht wurde (sprich, in ihm eine Funktion aufgerufen wurde). VERWEISE: create, init GRUPPEN: applied, grundlegendes SOURCE: /doc/applied/4enzy FUNKTION: init DEKLARATION: void init() BESCHREIBUNG: Wann wird "init" aufgerufen? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Kurz gesagt wird init in einem Objekt immer dann aufgerufen, wenn das objekt und ein lebewesen das gleiche environment bekommen (egal, ob durch eine Bewegung des Lebewesens oder des Objektes), oder wenn das eine in das andere bewegt wird (egal, ob das Lebewesen in das Objekt oder das Objekt in das Lebewesen bewegt wird). Näheres siehe unten. Andere Formulierung: Was geschieht im "init"? ~~~~~~~~~~~~~~~~~~~~~~~~ In der Funktion init werden fast immer nur die add_actions eines Objektes angegeben, siehe dazu unter "add_action". Inheritet man dabei (moeglicherweise) etwas, das ebenfalls solche actions besitzt, so darf man "*"::init(); nicht vergessen. Dies kann man auch tun, wenn man unsicher ist, ob ein Inherit überhaupt ein init() besitzt (oder vielleicht mal besitzen wird). Die Funktion "init" kann auch dazu verwendet werden, zu erkennen, dass sich ein Spieler einem Monster nähert, welches dann beispielsweise "Huhu" sagt. Erläuternde Beispiele dafür, wann "init" aufgerufen wird: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Um dies zu verdeutlichen, die (hoffentlich) verständlicheren Erklärungen an Hand von Beispielen: - Ein Lebewesen betritt einen Raum, egal, auf welchem Weg. Dann wird für dieses Lebewesen in allen Objekten (egal, ob lebendig oder nicht), die sich direkt im Raum befinden (also nicht in einem Schrank oder einer Tasche oder innerhalb eines anderen Lebewesens) die Funktion init für dieses, den Raum betretende Lebewesen, aufgerufen. Im Raum selbst, welchen das Lebewesen betritt, wird ebenfalls die Funktion init aufgerufen. - Nimmt ein Spieler einen Gegenstand, egal, ob aus einer Tasche heraus oder aus einem Raum heraus, so wird in dem Gegenstand für den nehmenden Spieler die Funktion init aufgerufen. Trägt der Spieler zufälligerweise ein Lebewesen bei sich, so wird die Funktion init auch für dieses Lebewesen aufgerufen, und zwar im Gegenstand. - legt ein Spieler einen Gegenstand hin, so wird die Funktion init für den Spieler sowie für alle sich bei dem Spieler befindlichen Lebewesen im hingelegten Gegenstand aufgerufen. - legt ein Spieler einen Gegenstand in eine Tasche, so wird die Funktion init für alle sich in der Tasche befindlichen Lebewesen (sofern vorhanden) in dem Gegenstand aufgerufen. Wem das jetzt zu einfach war: - Nimmt ein Spieler ein Lebewesen auf, so wird die Funktion init aufgerufen: - in dem Spieler selbst, der das Lebewesen genommen hat, für das genommene Lebewesen, - in dem Lebewesen, das der Spieler genommen hat, für den Spieler, - in allen Objekten (egal, ob lebendig oder nicht), die der Spieler bei sich trägt, für das genommene Lebewesen. - Legt ein Spieler ein Lebewesen hin, so wird init aufgerufen: - in allen sich bei dem hingelegten Lebewesen befindlichen Objekten, egal, ob tot oder lebendig, für das hingelegte Lebewesen, - im hingelegten Lebewesen für alle sich jetzt bei dem hingelegten Lebewesen befindlichen Lebewesen (einschliesslich dem hinlegenden Spieler selbst). So, jetzt ein verzwickterer Fall, der sich bei genauerem Hinsehen als ganz einfach erweist: - ein Spieler X gibt einem Spieler Y ein Lebewesen Z. Dann wird init aufgerufen: - im Spieler Y für das Lebewesen Z, - im Lebewesen Z für den Spieler Y, - in allen sich im Spieler Y befindlichen Objekten, egal, ob lebendig oder nicht, für das Lebewesen Z. VERWEISE: create, reset, add_action, living, this_player GRUPPEN: applied, grundlegendes SOURCE: /doc/applied/4enzy FUNKTION: virtual_compiler DEKLARATION: object virtual_compiler(string name, string path) BESCHREIBUNG: Wenn versucht wird, ein Objekt zu laden, für das es kein File gibt, wird in dem Verzeichnis ein Objekt namens 'virtual_compiler' gesucht und falls es ihn gibt, in ihm die Funktion virtual_compiler(name, path) aufgerufen. Liefert diese Funktion ein Objekt zurück, so wird dieses Objekt genommen. Das zurückgelieferte Objekt muss ein Clone sein. (Einzige Ausnahme: Das Objekt heißt genauso wie das gesuchte Objekt.) Beispiel: Jemand versucht das Objekt '/d/SuperGebiet/IrgendwoDarin/room_1' zu laden. Dieses (.c-) File gibt es aber nicht. Also wird ein Objekt namens '/d/SuperGebiet/IrgendwoDarin/virtual_compiler' gesucht. Wenn es dieses Objekt gibt, wird dort die Funktion virtual_compiler("room_1", "/d/SuperGebiet/IrgendwoDarin/") aufgerufen. Diese liefert den Objektpointer auf einen Raum, der erzeugt wurde. Danach gibt es dann einen Raum mit dem Objektnamen '/d/SuperGebiet/IrgendwoDarin/room_1'. Beispiel für einen Virtual_compiler: // Dieser einfache virtual_compiler erzeugt einen Raum, wenn der name // 'new_room' ist. // Das setzen der Eigenschaften eines Raumes geht wie beim MAP-System. void create() { seteuid(getuid()); } object virtual_compiler(string name, string path) { object ob; if (name=="new_room") { ob=clone_object("/obj/room"); ob->set_short("Ein Raum"); ob->set_long("Ein Testraum erzeugt vom virtual_compiler.\n"); return ob; } } VERWEISE: setup_renamed_object GRUPPEN: grundlegendes, virtual_compiler SOURCE: /doc/applied/4enzy FUNKTION: heart_beat DEKLARATION: void heart_beat BESCHREIBUNG: Wenn der Herzschlag mittels set_heart_beat eingeschaltet wurde, so wird diese Funktion automatisch alle 2 Sekunden aufgerufen. Man sollte sparsam mit dieser Möglichkeit umgehen, da es viele Driverresourcen benötigt, wenn mehrere Objekte den Herzschlag rund um die Uhr anhaben. Tritt während der Ausführung dieser Funktion ein Fehler auf, so wird der Herzschlag automatisch abgeschaltet. Falls das Objekt, in welchem diese Funktion aufgerufen wurde, lebendig ist, so wird es von this_player() während der Ausführung geliefert, anderenfalls liefert this_player() 0. VERWEISE: set_heart_beat, enable_commands, set_turn_heart_beat_off, query_turn_heart_beat_off GRUPPEN: grundlegendes, monster SOURCE: /doc/applied/4enzy FUNKTION: setup_renamed_object DEKLARATION: void setup_renamed_object(object vc, string old_name) BESCHREIBUNG: Dies wird nach der Umbenennung dieses Objektes des Virtual-Compilers vc im umbenannten Objekt aufgerufen. old_name ist der alte Name. Der neue Name ist object_name(this_object()). VERWEISE: virtual_compiler GRUPPEN: grundlegendes, virtual_compiler SOURCE: /doc/applied/4enzy FUNKTION: setup_renamed_object DEKLARATION: void setup_renamed_object(object ob, string old_name) BESCHREIBUNG: Dies wird nach der Umbenennung des Objektes ob im Virtual-Compiler aufgerufen. old_name ist der alte Name. Der neue Name ist object_name(ob). VERWEISE: virtual_compiler GRUPPEN: grundlegendes, virtual_compiler SOURCE: /doc/applied/4enzy FUNKTION: real_filename DEKLARATION: string real_filename(string name, string path) BESCHREIBUNG: Der Master fragt diese Funktion ab, wenn die Datei path+name geladen wird, um einen Hinweis zu erhalten, ob er woanders nach Include-Dateien oder Inherits suchen soll. (Dies ist für seltene Fälle, wo ein VC eine andere Datei zur gewünschten Stelle kopiert, um sie dort zu laden.) VERWEISE: virtual_compiler GRUPPEN: grundlegendes, virtual_compiler SOURCE: /doc/applied/4enzy FUNKTION: query_armour DEKLARATION: int query_armour() BESCHREIBUNG: Liefert bei Ruestungen 1. Dient dazu, Ruestungen zu erkennen. VERWEISE: query_weapon, query_cloth, query_armour_level GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: notify_armour_fail DEKLARATION: void notify_armour_fail(object armour, string how) BESCHREIBUNG: Wenn die Ruestung unbrauchbar wird, dann wird sowowhl in der Waffe selber als auch im environment ob der Ruestung (also meistens im Lebewesen) armour->notify("armour_fail", armour, how) bzw. ob->notify("armour_fail", armour, how) aufgerufen. Die Funktion notify ruft dann in allen mit ob->add_controller( "notify_armour_fail", other) angemeldeten Objekten other die Funktion other->notify_armour_fail(armour, how) auf. Sowohl ob als auch other haben dann die Moeglichkeit darauf zu reagieren. Zum Beispiel koennte ein Gegner im Kampf die Ruestung wuetend auf den Gegner werfen. Folgende Werte werden zur Zeit fuer how genutzt: "broken": Die Ruestung wurde beschaedigt (siehe do_break und set_life). VERWEISE: do_break GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: set_life DEKLARATION: void set_life(int life) BESCHREIBUNG: Mit set_life kann man den Schaden festlegen, die eine Ruestung einsteckt, bevor sie kaputt geht. Fuer erlaubte Werte ->/doc/richtlinien/ruestungen/leben VERWEISE: add_life, query_life, query_max_life GRUPPEN: ruestung, kampf SOURCE: /i/armour/armour.c FUNKTION: add_life DEKLARATION: int add_life(int life) BESCHREIBUNG: Mit add_life kann man den Schaden erhoehen oder verringern (bei negativem life), die eine Ruestung einsteckt, bevor sie kaputt geht. Fuer erlaubte Werte ->/doc/richtlinien/ruestungen/leben VERWEISE: set_life, query_life, query_max_life GRUPPEN: ruestung, kampf SOURCE: /i/armour/armour.c FUNKTION: query_life DEKLARATION: int query_life() BESCHREIBUNG: Liefert den Schaden, die eine Ruestung einsteckt, bevor sie kaputt geht. VERWEISE: set_life, query_max_life GRUPPEN: ruestung, kampf SOURCE: /i/armour/armour.c FUNKTION: query_max_life DEKLARATION: int query_max_life() BESCHREIBUNG: Liefert den Schaden, den die Ruestung im neuen Zustand (sprich nach dem create()) einstecken konnte. VERWEISE: query_life, set_life GRUPPEN: waffen, kampf SOURCE: /i/armour/armour.c FUNKTION: set_armour_class DEKLARATION: void set_armour_class(string armour_class) BESCHREIBUNG: Damit setzt man die Klasse der Ruestung. Von einer Klasse kann man immer nur eine Ruestung anhaben. Erlaubte Klassen stehen in /doc/richtlinien/ruestungen/klassen VERWEISE: query_armour_class, armour_class GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: query_armour_class DEKLARATION: string query_armour_class() BESCHREIBUNG: Liefert die Klasse der Ruestung. Von einer Klasse kann man immer nur eine Ruestung anhaben. Erlaubte Klassen stehen in /doc/richtlinien/ruestungen/klassen VERWEISE: set_armour_class, armour_class GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: armour_class DEKLARATION: int armour_class(string str) BESCHREIBUNG: Liefert einen Wert !=0, wenn die uebergebene Klasse mit der Klasse der Ruestung uebereinstimmt. VERWEISE: set_armour_class, query_armour_class GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: set_armour_protection DEKLARATION: void set_armour_protection(int protection) BESCHREIBUNG: Damit wird die Schutzkraft der Ruestung gesetzt. Eine Ruestung haelt bis zu protection APs pro Schlag ab. Erlaubte Werte fuer protection stehen in /doc/richtlinien/ruestungen/schutzkraft VERWEISE: query_armour_protection GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: query_armour_protection DEKLARATION: int query_armour_protection() BESCHREIBUNG: Liefert die Schutzkraft der Ruestung. Erlaubte Werte fuer die Schutzkraft stehen in /doc/richtlinien/ruestungen/schutzkraft VERWEISE: set_armour_protection GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: query_extra_armour_protection DEKLARATION: int query_extra_armour_protection(int ahps, mapping info) BESCHREIBUNG: Diese Funktion wird in der Ruestung aufgerufen, wenn die Schutzwirkung gegen einen bestimmten Schlag berechnet wird. Der Wert wird zur normalen Schutzkraft dazuaddiert. Negative Werte sind moeglich. Die beiden Parameter entsprechen denen von add_hp. Die Summe aus dieser und der normalen Schutzwirkung darf die Werte nach /doc/richtlinien/ruestungen/schutzkraft nicht ueberschreiten. VERWEISE: query_armour_protection, add_hp GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: query_min_value DEKLARATION: int query_min_value() BESCHREIBUNG: Liefert den Mindestwert der intakten Ruestung (also den Wert, den die Ruestung besitzt, wenn sie noch einen Schlag aushaelt). VERWEISE: query_max_value, query_value, set_life GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: query_max_value DEKLARATION: int query_max_value() BESCHREIBUNG: Liefert den Maximalwert der intakten Ruestung (also den Wert der Ruestung im nagelneuen Zustand). VERWEISE: query_min_value, query_value, set_life GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: init_armour_data DEKLARATION: void init_armour_data(int protection, string class, int life, string broken) BESCHREIBUNG: Damit wird die Schutzkraft protection, die Klasse class, Lebensdauer life und die Kaputt-Geh-Meldung broken der Ruestung gesetzt. Erlaubte Werte fuer protection, class und life stehen in /doc/richtlinien/ruestungen/schutzkraft, /doc/richtlinien/ruestungen/klassen und /doc/richtlinien/ruestungen/leben. VERWEISE: set_armour_protection, set_armour_class, set_life, set_broken_message GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: init_armour DEKLARATION: varargs void init_armour(string kategorie[, int schutz_in_prozent[, int leben_in_prozent[, int gewicht_in_prozent]]]) BESCHREIBUNG: Setzt der Kategorie entsprechend Richtlinien-konform folgende Werte: Ruestungsklasse set_armour_class() Schutz set_armour_protection() Leben set_life() Gewicht set_weight() Wert set_value() Parameter: Schutz in %: -100..100, 100=maximaler Schutz, 0=minimaler Schutz. Negative Werte liefern denselben Schutz wie positive, es werden aber zusaetzlich die Richtlinien fuer verkaufbare Ruestungen eingehalten (Schutz maximal 3). Leben in %: 0..100, 100=maximales Leben fuer den gesetzten Schutz, lineare Skalierung, niedrigeres Leben bedeutet niedrigeren Wert. Gewicht in %: 0..200, 200=maximales Gewicht, 100=Standard-Gewicht (=Schutz), 0=minimales Gewicht, niedrigeres Gewicht bedeutet hoeheren Wert. Minimal und maximal beziehen sich auf die Richtlinien. Ist ein Parameter nicht angegeben, so wird dafuer 100 genommen. Schutz in Abhaengigkeit von Kategorie und Schutz in %: (Dies sind die aktuellen Richtlinien.) Kategorie Schutz 0% 100% --------------------- beine 1 2 fuesse 1 2 haende 1 2 kopf 1 2 magie 1 2 oberkoerper 1 5 BEISPIEL: // Ein 80%-Kettenhemd, // das nur 60% der normalen Lebensdauer und // dafuer auch nur 60% des normalen Wertes hat. inherit "/i/armour/armour"; void create() { "*"::create(); init_armour("oberkoerper", 80, 60); set_name("kettenhemd"); set_gender("saechlich"); set_id(({"kettenhemd", "hemd"})); } VERWEISE: set_armour_class, set_armour_protection, set_life, set_weight, set_value GRUPPEN: ruestung SOURCE: /i/armour/armour.c FUNKTION: set_first_msg DEKLARATION: void set_first_msg(string str) BESCHREIBUNG: Damit kann man die Meldung setzen, die nach 2/3 der Zeit der magischen Ruestung ausgegeben wird. VERWEISE: query_first_msg, set_magic_protection_time, quer_magic_protection_time GRUPPEN: ruestung SOURCE: /i/armour/magic_armour.c FUNKTION: query_first_msg DEKLARATION: string query_first_msg() BESCHREIBUNG: Liefert die Meldung, die nach 2/3 der Zeit der magischen Ruestung ausgegeben wird. VERWEISE: set_first_msg, query_magic_protection_time, set_magic_protection_time GRUPPEN: ruestung SOURCE: /i/armour/magic_armour.c FUNKTION: set_magic_protection_time DEKLARATION: void set_magic_protection_time(int time) BESCHREIBUNG: Damit setzt man die Haltbarkeitsdauer dieser magischen Ruestung. Diese Funktion sollte nur beim Erschaffen dieser Ruestung (noch vor der Bewegung in ein Lebewesen) aufgerufen werden. VERWEISE: query_magic_protection_time, query_remaining_magic_protection_time, set_first_msg, query_first_msg GRUPPEN: ruestung SOURCE: /i/armour/magic_armour.c FUNKTION: query_magic_protection_time DEKLARATION: int query_magic_protection_time() BESCHREIBUNG: Liefert die Gesamthaltbarkeitsdauer dieser magischen Ruestung. VERWEISE: set_magic_protection_time, query_remaining_magic_protection_time, set_first_msg, query_first_msg GRUPPEN: ruestung SOURCE: /i/armour/magic_armour.c FUNKTION: query_remaining_magic_protection_time DEKLARATION: int query_remaining_magic_protection_time() BESCHREIBUNG: Liefert die Restdauer dieser magischen Ruestung oder -1, falls der Coutdown noch nicht laeuft. VERWEISE: set_magic_protection_time, query_magic_protection_time, set_first_msg, query_first_msg GRUPPEN: ruestung SOURCE: /i/armour/magic_armour.c FUNKTION: set_no_door DEKLARATION: void set_no_door(int no_door) BESCHREIBUNG: Hiermit setzt man, ob der Container keine Tuer/keinen Deckel hat. Wenn man keine Tuer setzt, wird der Container automatisch aufgeschlossen und geoeffnet und das Schloss wird abgebaut. VERWEISE: query_no_door, set_no_lock, open_con GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: query_no_door DEKLARATION: int query_no_door() BESCHREIBUNG: Hiermit kann man abfragen, ob der Container keine Tuer/keinen Deckel hat. VERWEISE: set_no_door, set_no_lock, open_con GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: set_no_lock DEKLARATION: void set_no_lock(int no_lock) BESCHREIBUNG: Hiermit setzt man, ob der Container kein Schloss hat. Wenn der Container keine Tuer hat, hat er auch kein Schloss. Das Schloss wird automatisch geoeffnet, wenn der Container kein Schloss hat. VERWEISE: query_no_lock, set_no_door, set_locked GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: query_no_lock DEKLARATION: int query_no_lock() BESCHREIBUNG: Hiermit kann man abfragen, ob der Container kein Schloss hat. Der Container hat automatisch kein Schloss, wenn er keine Tuer hat. VERWEISE: set_no_lock, set_no_door, set_locked GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: set_locked DEKLARATION: void set_locked(int locked) BESCHREIBUNG: Hiermit setzt man, ob der Container abgeschlossen ist. Hierbei muss man sich um alles (Tests, ob der Container geschlossen ist, Controlleraufrufe etc.) selber kuemmern. Daher ist diese Funktion nur zur Initialisierung ratsam. Ansonsten sollte man besser lock_con nutzen. VERWEISE: query_locked, set_no_lock GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: query_locked DEKLARATION: int query_locked() BESCHREIBUNG: Hiermit kann man abfragen, ob der Container abgeschlossen ist. Der Container ist automatisch aufgeschlossen, wenn er kein Schloss hat. VERWEISE: set_locked, set_no_lock GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: notify_open DEKLARATION: void notify_open(object container, object who) BESCHREIBUNG: Nachdem ein Container (welcher /i/base/container inheritet) von who geoeffnet wurde, wird im Container notify("open",container,who) aufgerufen. notify ruft dann in allen mit container->add_controller("notify_open",other) angemeldeten Objekten other notify_open(container,who) auf. Diese Objekte haben dann die Moeglichkeit, darauf zu reagieren. VERWEISE: open_con, close_con, lock_con, forbidden_open, add_controller, notify, notify_close, notify_lock, notify_unlock GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: notify_close DEKLARATION: void notify_close(object container, object who) BESCHREIBUNG: Nachdem ein Container (welcher /i/base/container inheritet) von who geschlossen wurde, wird im Container notify("close",container,who) aufgerufen. notify ruft dann in allen mit container->add_controller("notify_close",other) angemeldeten Objekten other notify_close(container,who) auf. Diese Objekte haben dann die Moeglichkeit, darauf zu reagieren. VERWEISE: open_con, close_con, lock_con, forbidden_close add_controller, notify, notify_open, notify_lock, notify_unlock GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: forbidden_open DEKLARATION: int forbidden_open(object container, object who) BESCHREIBUNG: Bevor ein Container (welcher /i/base/container inheritet) von who geoeffnet wird, wird im Container forbidden("open", container, who) aufgerufen. forbidden ruft dann in allen mit container->add_controller("forbidden_open", other) angemeldeten Objekten other forbidden_open(container, who) auf. Liefert auch nur ein Objekt einen Wert != 0 zurueck, so wird das Oeffnen verboten. Fuer die Ausgabe der Fehlermeldung ist dieses Objekt zustaendig. VERWEISE: open_con, close_con, lock_con, notify_open, add_controller, forbidden, forbidden_close, forbidden_lock, forbidden_unlock GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: forbidden_close DEKLARATION: int forbidden_close(object container, object who) BESCHREIBUNG: Bevor ein Container (welcher /i/base/container inheritet) von who geschlossen wird, wird im Container forbidden("close", container, who) aufgerufen. forbidden ruft dann in allen mit container->add_controller("forbidden_close", other) angemeldeten Objekten other forbidden_close(container, who) auf. Liefert auch nur ein Objekt einen Wert != 0 zurueck, so wird das Schliessen verboten. Fuer die Ausgabe der Fehlermeldung ist dieses Objekt zustaendig. VERWEISE: open_con, close_con, lock_con, notify_close, add_controller, forbidden, forbidden_open, forbidden_lock, forbidden_unlock GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: lock_con DEKLARATION: void lock_con(int lock, object who, object key) BESCHREIBUNG: Damit wird der Container auf- oder zugeschlossen. Sollte der Container im letzteren Falle offen sein, wird er automatisch geschlossen. Falls der Container kein Schloss besitzt, macht diese Funktion gar nix. Eine Meldung wird nicht ausgegeben. Die Parameter: lock: 0 schliesst den Container auf 1 schliesst den Container zu. who: Das Lebewesen, welche den Container auf-/zuschliesst. key: Der dazu benutzte Schluessel. VERWEISE: set_locked, query_locked, set_no_lock, open_con, close_con, notify_lock, notify_unlock, notify_close, notify_open GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: notify_lock DEKLARATION: void notify_lock(object container, object who, object key) BESCHREIBUNG: Nachdem ein Container von who mit dem Schluessel key abgeschlossen wurde, wird im Container notify("lock",container, who, key) aufgerufen. notify ruft dann in allen mit container->add_controller("notify_lock",other) angemeldeten Objekten other notify_lock(container, who, key) auf. Diese Objekte haben dann die Moeglichkeit, darauf zu reagieren. VERWEISE: lock_con, set_locked, query_locked, set_no_lock, open_con, close_con, add_controller, notify, notify_unlock, notify_close, notify_open, notify_lock_key GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: notify_unlock DEKLARATION: void notify_unlock(object container, object who, object key) BESCHREIBUNG: Nachdem ein Container von who mit dem Schluessel key aufgeschlossen wurde, wird im Container notify("unlock",container, who, key) aufgerufen. notify ruft dann in allen mit container->add_controller("notify_unlock",other) angemeldeten Objekten other notify_unlock(container, who, key) auf. Diese Objekte haben dann die Moeglichkeit, darauf zu reagieren. VERWEISE: lock_con, set_locked, query_locked, set_no_lock, open_con, close_con, add_controller, notify, notify_lock, notify_close, notify_open, notify_unlock_key GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: forbidden_lock DEKLARATION: int forbidden_lock(object container, object who, object key) BESCHREIBUNG: Bevor ein Container von who mit dem Schluessel key abgeschlossen wird, wird im Container forbidden("lock", container, who, key) aufgerufen. forbidden ruft dann in allen mit container->add_controller("forbidden_lock", other) angemeldeten Objekten other forbidden_lock(container, who, key) auf. Liefert auch nur ein Objekt einen Wert != 0 zurueck, so wird das Abschliessen verboten. Fuer die Ausgabe der Fehlermeldung ist dieses Objekt zustaendig. VERWEISE: lock_con, set_locked, query_locked, set_no_lock, open_con, close_con, notify_close, add_controller, forbidden, forbidden_unlock, forbidden_close, forbidden_open, forbidden_lock_key GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: forbidden_unlock DEKLARATION: int forbidden_unlock(object container, object who, object key) BESCHREIBUNG: Bevor ein Container von who mit dem Schluessel key aufgeschlossen wurde, wird im Container forbidden("unlock", container, who, key) aufgerufen. forbidden ruft dann in allen mit container->add_controller("forbidden_unlock", other) angemeldeten Objekten other forbidden_unlock(container, who, key) auf. Liefert auch nur ein Objekt einen Wert != 0 zurueck, so wird das Aufschliessen verboten. Fuer die Ausgabe der Fehlermeldung ist dieses Objekt zustaendig. VERWEISE: lock_con, set_locked, query_locked, set_no_lock, open_con, close_con, notify_unlock, add_controller, forbidden, forbidden_lock, forbidden_close, forbidden_open, forbidden_unlock_key GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: notify_lock_key DEKLARATION: void notify_lock_key(object container, object who, object key) BESCHREIBUNG: Nachdem ein Container von who mit dem Schluessel key abgeschlossen wurde, wird im Schluessel notify("lock_key", container, who, key) aufgerufen. notify ruft dann in allen mit key->add_controller("notify_lock_key",other) angemeldeten Objekten other notify_lock_key(container, who, key) auf. Diese Objekte haben dann die Moeglichkeit, darauf zu reagieren. VERWEISE: notify_lock, notify_unlock_key, forbidden_lock_key GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: notify_unlock_key DEKLARATION: void notify_unlock_key(object container, object who, object key) BESCHREIBUNG: Nachdem ein Container von who mit dem Schluessel key aufgeschlossen wurde, wird im Schluessel notify("unlock_key", container, who, key) aufgerufen. notify ruft dann in allen mit key->add_controller("notify_unlock_key",other) angemeldeten Objekten other notify_unlock_key(container, who, key) auf. Diese Objekte haben dann die Moeglichkeit, darauf zu reagieren. VERWEISE: notify_unlock, notify_lock_key, forbidden_unlock_key GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: forbidden_lock_key DEKLARATION: int forbidden_lock_key(object container, object who, object key) BESCHREIBUNG: Bevor ein Container von who mit dem Schluessel key abgeschlossen wird, wird im Schluessel forbidden("lock_key", container, who, key) aufgerufen. forbidden ruft dann in allen mit key->add_controller("forbidden_lock_key", other) angemeldeten Objekten other forbidden_lock_key(container, who, key) auf. Liefert auch nur ein Objekt einen Wert != 0 zurueck, so wird das Abschliessen verboten. Fuer die Ausgabe der Fehlermeldung ist dieses Objekt zustaendig. VERWEISE: forbidden_lock, forbidden_unlock_key, notify_lock_key GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: forbidden_unlock_key DEKLARATION: int forbidden_unlock_key(object container, object who, object key) BESCHREIBUNG: Bevor ein Container von who mit dem Schluessel key aufgeschlossen wurde, wird im Schluessel forbidden("unlock_key", container, who, key) aufgerufen. forbidden ruft dann in allen mit key->add_controller("forbidden_unlock_key", other) angemeldeten Objekten other forbidden_unlock_key(container, who, key) auf. Liefert auch nur ein Objekt einen Wert != 0 zurueck, so wird das Aufschliessen verboten. Fuer die Ausgabe der Fehlermeldung ist dieses Objekt zustaendig. VERWEISE: forbidden_unlock, forbidden_lock_key, notify_unlock_key GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: set_keys DEKLARATION: void set_keys(string *keys) BESCHREIBUNG: Hiermit setzt man, mit welchen Schluesseln das Schloss des Containers zu oeffnen ist. VERWEISE: query_keys, set_locked, set_no_lock GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: query_keys DEKLARATION: string *query_keys() BESCHREIBUNG: Hiermit kann man abfragen, mit welchen Schluesseln das Schloss des Containers zu oeffnen ist. VERWEISE: set_keys, set_locked, set_no_lock GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: set_crack DEKLARATION: void set_crack(int chance) BESCHREIBUNG: Hiermit setzt man, mit welcher Wahrscheinlichkeit der Container von einem durchschnittlichen Dieb zu knacken ist. Je hoeher der Wert von Chance, desto leichter kann man das Schloss knacken. Es sind Werte von 0 bis 100 zugelassen. Default: 0 Es gibt P_CRACK_CHANCES in /sys/properties.h VERWEISE: query_crack, crack GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: query_crack DEKLARATION: int query_crack() BESCHREIBUNG: Hiermit kann man abfragen, mit welcher Wahrscheinlichkeit der Container von einem durchschnittlichen Dieb zu knacken ist. Es gibt P_CRACK_CHANCES in /sys/properties.h VERWEISE: set_crack, crack GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: query_collapsible DEKLARATION: int query_collapsible() BESCHREIBUNG: Liefert einen Wert != 0, wenn dieser Container zusammenquetschbar ist. D.h. es nimmt in einem anderen Container genausoviel Platz weg, wie sein aktueller Inhalt. VERWEISE: set_collapsible, test_add_encumbrance, query_internal_encumbrance, query_max_internal_encumbrance GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: set_collapsible DEKLARATION: void set_collapsible(int flag) BESCHREIBUNG: Damit kann man setzen, ob dieser Container zusammenquetschbar ist. Bei 1 nimmt er in einem anderen Container genausoviel Platz weg, wie sein aktueller Inhalt. Bei 0 soviel, wie in diesem Container hineinpassen koennte. Diese Funktion ruft auch set_min_weight auf. VERWEISE: query_collapsible, query_internal_encumbrance, query_max_internal_encumbrance, test_add_encumbrance, set_min_weight, set_max_weight. GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: notify_crack DEKLARATION: void notify_crack(object container, object who, mixed dietrich) BESCHREIBUNG: Nachdem ein Container von who mit dem Dietrich dietrich (kann 0, ein Objekt oder V-Item sein) aufgeschlossen wurde, wird im Container notify("crack", container, who, dietrich) aufgerufen. notify ruft dann in allen mit container->add_controller("notify_crack",other) angemeldeten Objekten other notify_crack(container, who, dietrich) auf. Diese Objekte haben dann die Moeglichkeit, darauf zu reagieren. VERWEISE: crack, lock_con, set_locked, set_no_lock, open_con, close_con, forbidden_crack, add_controller, notify, notify_lock, notify_unlock, notify_close, notify_open GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: forbidden_crack DEKLARATION: int forbidden_crack(object container, object who, mixed dietrich) BESCHREIBUNG: Bevor ein Container von who mit dem Dietrich dietrich (kann 0, ein Objekt oder V-Item sein) aufgeschlossen wurde, wird im Container forbidden("crack", container, who, dietrich) aufgerufen. forbidden ruft dann in allen mit container->add_controller("forbidden_crack", other) angemeldeten Objekten other forbidden_crack(container, who, dietrich) auf. Liefert auch nur ein Objekt einen Wert != 0 zurueck, so wird das Knacken verboten. Fuer die Ausgabe der Fehlermeldung ist dieses Objekt zustaendig. VERWEISE: crack, lock_con, set_locked, set_no_lock, open_con, close_con, notify_crack, add_controller, forbidden, forbidden_lock, forbidden_unlock, forbidden_close, forbidden_open GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: crack DEKLARATION: varargs int crack(object who [, mixed dietrich]) BESCHREIBUNG: Hiermit wird der Container geknackt. who ist derjenige, der knackt, und optional kann man dietrich angeben, mit dem geknackt wird. Es wird this_object()->forbidden("crack",this_object(),who,dietrich) aufgerufen, um zu ueberpruefen, ob es erlaubt ist. Anschliessen wird this_object()->notify("crack",this_object(),who,dietrich) aufgerufen. VERWEISE: query_crack, set_crack GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: query_tasche DEKLARATION: int query_tasche() BESCHREIBUNG: Liefert bei Taschen immer 1. Diese Funktion wird auch dazu verwendet, zu verhindern, dass man gefuellte Taschen in eine andere Tasche legen kann. VERWEISE: query_container GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: T_LISTE DEKLARATION: Liste der Container-T-Defines BESCHREIBUNG: Vordefinierte Bedingungen: - T_CON_LOCKED Der Container ist verschlossen. - T_CON_CLOSED Der Container ist geschlossen. - T_CON_NO_DOOR Der Container hat keine Tuer/Deckel/Schloss. VERWEISE: query_locked, query_con_close, query_no_door GRUPPEN: taschen SOURCE: /i/base/container.c FUNKTION: set_worn_adjektiv DEKLARATION: void set_worn_adjektiv(mixed worn_adjektiv) BESCHREIBUNG: Hiermit gibt man ein Adjektiv an, welches angezeigt wird, wenn ein Kleidungsstueck angezogen wurde. Man kann nur ein einziges Adjektiv angeben. Default ist "angezogen". worn_adjektiv kann entweder ein String oder ein Array ({Grundform, Stamm}) sein. VERWEISE: query_worn_adjektiv GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: query_worn_adjektiv DEKLARATION: mixed query_worn_adjektiv() BESCHREIBUNG: Liefert das Adjektiv zurueck, das gesetzt wird, wenn ein Kleidungsstueck angezogen wird. Achtung: Hier kann natuerlich auch ein Adjektiv der Form ({ Grundform, unregelmaessiger_wortstamm }) geliefert werden. VERWEISE: set_worn_adjektiv GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: do_wear DEKLARATION: void do_wear() BESCHREIBUNG: Damit zieht das umgebende Lebewesen diese Kleidung ohne die Ausgabe irgendwelcher Meldungen an. VERWEISE: do_remove GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: do_remove DEKLARATION: void do_remove() BESCHREIBUNG: Damit zieht das umgebende Lebewesen diese Kleidung ohne die Ausgabe irgendwelcher Meldungen aus. VERWEISE: do_wear GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: already_worn DEKLARATION: varargs mixed already_worn(int all) BESCHREIBUNG: Prueft, ob diese Kleidung getragen werden darf, oder ob derjenige Kleidung gleichen Typs traegt. Darf er diese Kleidung tragen, so liefert diese Funktion 0 zurueck. Bei all=0 wird ansonsten eine Kleidung gleichen Typs geliefert, welche das Anziehen verhindert. Bei all=1 werden alle Kleidungen diesen Typs in einem Array geliefert (oder evntl. aus Kompatibilitaetsproblemen eine Kleidung als object). Ueberlagerbar, z.B. fuer Ruestungsklassen, oder magische Dinge, die man nicht gemeinsam mit metallener Kleidung/Ruestung tragen kann. VERWEISE: do_wear GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: set_wear_msg DEKLARATION: void set_wear_msg(mixed wear_msg) BESCHREIBUNG: Setzt die Meldung, die derjenige erhaelt, der diese Kleidung anzieht. Die Meldung wird automatisch umgebrochen und kann auch eine Pseudeclosure sein. Weitere Informationen dazu gibt es in /doc/funktionsweisen/messages VERWEISE: query_wear_msg, set_wear_msg_other, set_remove_msg, set_remove_msg_other GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: query_wear_msg DEKLARATION: string query_wear_msg() BESCHREIBUNG: Liefert die Meldung, die derjenige erhaelt, der diese Kleidung anzieht. Diese Meldung wird vor der Ausgabe noch umgebrochen. VERWEISE: set_wear_msg, query_wear_msg_other, query_remove_msg, query_remove_msg_other GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: set_wear_msg_other DEKLARATION: void set_wear_msg_other(mixed wear_msg_other) BESCHREIBUNG: Setzt die Meldung, die alle anderen im Raum erhalten, wenn jemand diese Kleidung anzieht. Die Meldung wird automatisch umgebrochen und kann auch eine Pseudeclosure sein. Weitere Informationen dazu gibt es in /doc/funktionsweisen/messages VERWEISE: query_wear_msg_other, set_wear_msg, set_remove_msg, set_remove_msg_other GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: query_wear_msg_other DEKLARATION: string query_wear_msg_other() BESCHREIBUNG: Liefert die Meldung, die alle anderen Anwesenden im Raum erhalten, wenn jemand diese Kleidung anzieht. Diese Meldung wird vor der Ausgabe noch umgebrochen. VERWEISE: set_wear_msg, query_wear_msg_other, query_remove_msg, query_remove_msg_other GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: set_remove_msg DEKLARATION: void set_remove_msg(mixed remove_msg) BESCHREIBUNG: Setzt die Meldung, die derjenige erhaelt, der diese Kleidung auszieht. Die Meldung wird automatisch umgebrochen und kann auch eine Pseudeclosure sein. Weitere Informationen dazu gibt es in /doc/funktionsweisen/messages VERWEISE: query_remove_msg, set_wear_msg, set_wear_msg_other, set_remove_msg_other GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: query_remove_msg DEKLARATION: string query_remove_msg() BESCHREIBUNG: Liefert die Meldung, die derjenige erhaelt, der diese Kleidung auszieht. Diese Meldung wird vor der Ausgabe noch umgebrochen. VERWEISE: set_remove_msg, query_wear_msg, query_wear_msg_other, query_remove_msg_other GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: set_remove_msg_other DEKLARATION: void set_remove_msg_other(mixed remove_msg_other) BESCHREIBUNG: Setzt die Meldung, die alle anderen im Raum erhalten, wenn jemand diese Kleidung auszieht. Die Meldung wird automatisch umgebrochen und kann auch eine Pseudeclosure sein. Weitere Informationen dazu gibt es in /doc/funktionsweisen/messages VERWEISE: query_remove_msg_other, set_wear_msg, set_wear_msg_other, set_remove_msg GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: query_remove_msg_other DEKLARATION: string query_remove_msg_other() BESCHREIBUNG: Liefert die Meldung, die alle anderen Anwesenden im Raum erhalten, wenn jemand diese Kleidung auszieht. Diese Meldung wird vor der Ausgabe noch umgebrochen. VERWEISE: set_remove_msg, query_wear_msg, query_wear_msg_other, query_remove_msg_other GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: query_worn DEKLARATION: int query_worn() BESCHREIBUNG: Liefert 1 zurueck, wenn ein Kleidungsstueck angezogen ist, sonst 0. VERWEISE: GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: set_schutz DEKLARATION: void set_schutz(int schutz) BESCHREIBUNG: Setzt den Temperaturschutz eines Kleidungsstueck. Die von einem Spieler empfundene Tempeatur ist die Aussentemperatur + dem Temperaturschutz aller angezogenen Kleidungsstuecke. D.h. ein Wert von schutz<0 kuehlt, ein Wert >0 waermt. -> /doc/richtlinien/kleidung/temperatur. VERWEISE: query_schutz GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: set_typ DEKLARATION: void set_typ(string typ) BESCHREIBUNG: Setzt den Kleidungstyp. Ein Spieler kann jeweils nur soviel Kleidungsstuecke des gleichen Typs anhaben, wie es in /static/adm/KLEIDUNGEN eingetragen ist. Dort stehen auch alle erlaubten Typen drin. VERWEISE: query_typ GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: query_schutz DEKLARATION: int query_schutz() BESCHREIBUNG: Liefert den Temperaturschutz eines Kleidungsstuecks zurueck. VERWEISE: set_schutz GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: query_typ DEKLARATION: string query_typ() BESCHREIBUNG: Liefert den Kleidungstyp eines Kleidungsstuecks zurueck. VERWEISE: set_typ GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: query_cloth DEKLARATION: int query_cloth() BESCHREIBUNG: Liefert bei Kleidungsstuecken 1 zurueck. Dient dazu, im Programm ein Objekt als Kleidungsstueck zu identifizieren. VERWEISE: GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: T_LISTE DEKLARATION: Liste der T-Defines fuer Kleidungen BESCHREIBUNG: Vordefinierte Bedingungen: - T_WORN Die Kleidung ist angezogen. Vordefinierte Texte: - T_WORN_TEXT "Die Kleidung ist angezogen." oder so. Hinweise fuer die Meldungsgeneration: - T_HAS_WORN_TEXT Keine eigene Meldung darueber, ob angezogen. GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: set_long_owner_when_worn DEKLARATION: deprecated void set_long_owner_when_worn(string long) BESCHREIBUNG: Setzt das Long des anziehbaren Objektes im angezogenen Zustand fuer den Traeger. Eine passende Anschaumeldung kann mit set_look_msg_when_worn gesetzt werden. Es wird empfohlen, diese Funktion nicht mehr einzusetzen und stattdessen diese Beschreibung mit Hilfe von T_OWNER und T_WORN in die normale Raumbeschreibung zu integrieren. VERWEISE: query_long_owner_when_worn, set_long_other_when_worn, query_long_other_when_worn, set_content_visible_when_worn, query_content_visible_when_worn, set_look_msg_when_worn GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: query_long_owner_when_worn DEKLARATION: deprecated string query_long_owner_when_worn(object viewer) BESCHREIBUNG: Liefert das Long des anziehbaren Objektes im angezogenen Zustand fuer den Traeger. VERWEISE: set_long_owner_when_worn, set_long_other_when_worn, query_long_other_when_worn, set_content_visible_when_worn, query_content_visible_when_worn, set_look_msg_when_worn GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: set_long_other_when_worn DEKLARATION: deprecated void set_long_other_when_worn(string long) BESCHREIBUNG: Setzt das Long des anziehbaren Objektes im angezogenen Zustand fuer die Umstehenden, also die Leute, die das Teil nicht anhaben. Es wird empfohlen, diese Funktion nicht mehr einzusetzen und stattdessen diese Beschreibung mit Hilfe von T_OWNER und T_WORN in die normale Raumbeschreibung zu integrieren. VERWEISE: query_long_other_when_worn, set_long_owner_when_worn, query_long_owner_when_worn, set_content_visible_when_worn, query_content_visible_when_worn GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: set_look_msg_when_worn DEKLARATION: void set_look_msg_when_worn(mixed look) BESCHREIBUNG: Setzt die look - Meldung (siehe query_look_msg) fuer ein Kleidungsstueck im Angezogenen Fall. Standardmaessig liefert diese fuer Brillen, Halsketten, Muetzen und Ohrringe die Meldung, dass man vergeblich versucht, xzy anzusehen. BEISPIEL: set_look_msg_when_worn("$Der(OBJ_TP) verrenkt sich vergeblich, um $den(OBJ_TO) anzusehen, aber das wird natuerlich nix, weil $er(OBJ_TO) angezogen ist.") VERWEISE: query_long_other_when_worn, set_long_owner_when_worn, query_long_owner_when_worn, set_content_visible_when_worn, query_content_visible_when_worn GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: forbidden_wear DEKLARATION: int forbidden_wear(object clothes, object who) BESCHREIBUNG: Bevor ein Lebewesen who die Kleidung clothes anziehen kann, wird who->forbidden("wear", clothes) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird die Kleidung nicht angezogen. Die Funktion forbidden ruft in allen mit who->add_controller("forbidden_wear", other) angemeldeten Objekten other die Funktionen other->forbidden_wear( clothes, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und die Kleidung kann nicht angezogen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und evtl. den Raum muss der Programmierer in forbidden_wear oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Beispielanwendung: Kleidung, die das Anziehen weiterer Sachen verhindert, an einem Badestrand darf nur nackt gebadet werden Bemerkung: Es wird auch clothes->forbidden("wear_me",who) aufgerufen. VERWEISE: forbidden, notify, notify_wear, attack, forbidden_undress GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: forbidden_wear_me DEKLARATION: int forbidden_wear_me(object who, object clothes) BESCHREIBUNG: Bevor ein Lebewesen who die Kleidung clothes anziehen kann, wird clothes->forbidden("wear_me", who) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird die Kleidung nicht angezogen. Die Funktion forbidden ruft in allen mit clothes->add_controller( "forbidden_wear_me", other) angemeldeten Objekten other die Funktionen other->forbidden_wear_me(who, clothes) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und die Kleidung kann nicht angezogen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und evtl. den Raum muss der Programmierer in forbidden_wear_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Beispielanwendung: Auf Monster oder Traeger 'spezialisierte' Kleidungen, Damenschuhe, Herrenschuhe Bemerkung: Es wird auch who->forbidden("wear",clothes) aufgerufen. VERWEISE: forbidden, notify, notify_wear, attack, forbidden_undress GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: forbidden_wear_here DEKLARATION: int forbidden_wear_here(object who, object clothes) BESCHREIBUNG: Bevor ein Lebewesen who die Kleidung clothes anziehen kann, wird im Raum room->forbidden("wear_here", who, clothes) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird die Kleidung nicht angezogen. Die Funktion forbidden ruft in allen mit room->add_controller( "forbidden_wear_here", other) angemeldeten Objekten other die Funktionen other->forbidden_wear_here(who, clothes) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und die Kleidung kann nicht angezogen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und evtl. den Raum muss der Programmierer in forbidden_wear_here oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("wear", clothes) und clothes->forbidden("wear_me", who) aufgerufen. VERWEISE: forbidden, notify, notify_wear, attack, forbidden_undress GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: notify_wear DEKLARATION: void notify_wear(object clothes, object who) BESCHREIBUNG: Nachdem das Lebewesen who die Kleidung clothes angezogen hat, wird who->notify( "wear", clothes) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_wear", other) angemeldeten Objekten other die Funktionen other->notify_wear(clothes, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf das Anziehen der Kleidung clothes zu reagieren. Bemerkung: Es wird auch clothes->notify("wear_me",who) aufgerufen. VERWEISE: forbidden, notify, forbidden_wear, notify_undress GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/clothes/kleidung.c FUNKTION: notify_wear_me DEKLARATION: void notify_wear_me(object who, object clothes) BESCHREIBUNG: Nachdem das Lebewesen who die Kleidung clothes angezogen hat, wird clothes-> notify("wear_me", who) aufgerufen. Die Funktion notify ruft in allen mit clothes->add_controller("notify_wear_me", other) angemeldeten Objekten other die Funktionen other->notify_wear_me(who, clothes) auf. Sowohl clothes als auch other haben dann eine Moeglichkeit, auf das Anziehen durch das Lebewesen who zu reagieren. Zum Beispiel durch Ueberwerfen eines Shadows oder Veraendern des Aussehens. Bemerkung: Es wird auch who->notify("wear",clothes) aufgerufen. VERWEISE: forbidden, notify, forbidden_wear, notify_undress GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/clothes/kleidung.c FUNKTION: notify_wear_here DEKLARATION: void notify_wear_here(object who, object clothes) BESCHREIBUNG: Nachdem das Lebewesen who die Kleidung clothes angezogen hat, wird im Raum room->notify("wear_me", who, clothes) aufgerufen. Die Funktion notify ruft in allen mit room->add_controller( "notify_wear_here", other) angemeldeten Objekten other die Funktion other->notify_wear_here(who, clothes) auf. Sowohl room als auch other haben dann eine Moeglichkeit, auf das Anziehen der Kleidung durch das Lebewesen zu reagieren. Bemerkung: Es wird auch who->notify("wear", clothes) und clothes->notify("wear_me", who) aufgerufen. VERWEISE: forbidden, notify, forbidden_wear, notify_undress GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/clothes/kleidung.c FUNKTION: forbidden_undress DEKLARATION: int forbidden_undress(object clothes, object who) BESCHREIBUNG: Bevor ein Lebewesen who die Kleidung clothes ausziehen kann, wird who->forbidden("undress", clothes) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird die Kleidung nicht ausgezogen. Die Funktion forbidden ruft in allen mit who->add_controller( "forbidden_undress", other) angemeldeten Objekten other die Funktionen other->forbidden_undress(clothes, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und die Kleidung kann nicht ausgezogen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und evtl. den Raum muss der Programmierer in forbidden_undress oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Beispielanwendung: Auf einem Friedhof darf man weder nackt gehen, noch darf man sich dort pietaetlos ausziehen. Bemerkung: Es wird auch clothes->forbidden("undress_me",who) aufgerufen. VERWEISE: forbidden, notify, notify_undress, attack, forbidden_wear GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: forbidden_undress_me DEKLARATION: int forbidden_undress_me(object who, object clothes) BESCHREIBUNG: Bevor ein Lebewesen who die Kleidung clothes ausziehen kann, wird clothes->forbidden("undress_me", who) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird die Kleidung nicht ausgezogen. Die Funktion forbidden ruft in allen mit clothes->add_controller( "forbidden_undress_me", other) angemeldeten Objekten other die Funktionen other->forbidden_undress_me(who, clothes) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und die Kleidung kann nicht ausgezogen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und evtl. den Raum muss der Programmierer in forbidden_undress_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Beispielanwendung: Ein magischer Ring, der sich nicht mehr vom Finger ziehen laesst. Bemerkung: Es wird auch who->forbidden("undress",clothes) aufgerufen. VERWEISE: forbidden, notify, notify_undress, attack, forbidden_wear GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: forbidden_undress_here DEKLARATION: int forbidden_undress_here(object who, object clothes) BESCHREIBUNG: Bevor ein Lebewesen who die Kleidung clothes ausziehen kann, wird im Raum room->forbidden("undress_here", who, clothes) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird die Kleidung nicht ausgezogen. Die Funktion forbidden ruft in allen mit room->add_controller( "forbidden_undress_here", other) angemeldeten Objekten other die Funktionen other->forbidden_undress_here(who, clothes) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und die Kleidung kann nicht ausgezogen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und evtl. den Raum muss der Programmierer in forbidden_undress_here oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("undress", clothes) und clothes->forbidden("undress_me", who) aufgerufen. VERWEISE: forbidden, notify, notify_undress, attack, forbidden_wear GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: notify_undress DEKLARATION: void notify_undress(object clothes, object who) BESCHREIBUNG: Nachdem das Lebewesen who die Kleidung clothes ausgezogen hat, wird who-> notify("undress", clothes) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_undress", other) angemeldeten Objekten other die Funktionen other->notify_undress( clothes, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf das Ausziehen der Kleidung clothes zu reagieren. Beispielanwendung: Ein schamhafter NPC... Bemerkung: Es wird auch clothes->notify("undress_me",who) aufgerufen. VERWEISE: forbidden, notify, forbidden_undress, notify_wear GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/clothes/kleidung.c FUNKTION: notify_undress_me DEKLARATION: void notify_undress_me(object who, object clothes) BESCHREIBUNG: Nachdem das Lebewesen who die Kleidung clothes ausgezogen hat, wird clothes-> notify("undress_me", who) aufgerufen. Die Funktion notify ruft in allen mit clothes->add_controller( "notify_undress_me", other) angemeldeten Objekten other die Funktionen other->notify_undress_me(who, clothes) auf. Sowohl clothes als auch other haben dann eine Moeglichkeit, auf das Ausziehen durch das Lebewesen who zu reagieren. Zum Beispiel einen Shadow wieder zu entfernen oder das Aussehen der Kleidung zu veraendern. Bemerkung: Es wird auch who->notify("undress",clothes) aufgerufen. VERWEISE: forbidden, notify, forbidden_undress, notify_wear GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/clothes/kleidung.c FUNKTION: notify_undress_here DEKLARATION: void notify_undress_here(object who, object clothes) BESCHREIBUNG: Nachdem das Lebewesen who die Kleidung clothes ausgezogen hat, wird im Raum room->notify("undress_me", who, clothes) aufgerufen. Die Funktion notify ruft in allen mit room->add_controller( "notify_undress_here", other) angemeldeten Objekten other die Funktion other->notify_undress_here(who, clothes) auf. Sowohl room als auch other haben dann eine Moeglichkeit, auf das Ausziehen der Kleidung durch das Lebewesen zu reagieren. Bemerkung: Es wird auch who->notify("undress", clothes) und clothes->notify("undress_me", who) aufgerufen. VERWEISE: forbidden, notify, forbidden_undress, notify_wear GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/clothes/kleidung.c FUNKTION: query_content_visible_when_worn DEKLARATION: int query_content_visible_when_worn() BESCHREIBUNG: Liefert fuer ein anziehbares Kleidungsstueck, welches Inhalt aufnehmen kann (Rucksack, Handtasche), ob man im angezogenen Zustand den Inhalt sehen kann. VERWEISE: set_content_visible_when_worn GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: set_content_visible_when_worn DEKLARATION: void set_content_visible_when_worn(int visible) BESCHREIBUNG: Liefert fuer ein anziehbares Kleidungsstueck, welches Inhalt aufnehmen kann (Rucksack, Handtasche), ob man im angezogenen Zustand den Inhalt sehen kann. VERWEISE: set_content_visible_when_worn GRUPPEN: kleidung SOURCE: /i/clothes/kleidung.c FUNKTION: set_min_weight DEKLARATION: void set_min_weight(int min_weight) BESCHREIBUNG: Damit kann man das Mindestgewicht eines Containers setzen. Dieses Gewicht hat der Container, wenn er leer ist und sich nicht direkt in einem Lebewesen befindet. (Achtung: query_weight liefert nicht das berechnete Gewicht zwischen Mindest- und Maximalgewicht, sondern das Gewicht, wenn der Container sich direkt in einem Lebewesen befindet.) VERWEISE: set_max_weight, query_min_weight, query_weight, query_collapsible, query_max_internal_encumbrance, query_internal_encumbrance GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_min_weight DEKLARATION: int query_min_weight() BESCHREIBUNG: Liefert das mit set_min_weight gesetzte Mindestgewicht des Containers. VERWEISE: query_max_weight, set_min_weight, query_weight, query_collapsible, query_max_internal_encumbrance, query_internal_encumbrance GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: set_max_weight DEKLARATION: void set_max_weight(int max_weight) BESCHREIBUNG: Damit kann man das Maximalgewicht eines Containers setzen. Dieses Gewicht hat der Container, wenn er voll ist und sich nicht direkt in einem Lebewesen befindet. (Achtung: query_weight liefert nicht das berechnete Gewicht zwischen Mindest- und Maximalgewicht, sondern das Gewicht, wenn der Container sich direkt in einem Lebewesen befindet.) VERWEISE: set_min_weight, query_max_weight, query_weight, query_collapsible, query_max_internal_encumbrance, query_internal_encumbrance GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_max_weight DEKLARATION: int query_max_weight() BESCHREIBUNG: Liefert das mit set_max_weight gesetzte Maximalgewicht des Containers. VERWEISE: query_min_weight, set_max_weight, query_weight, query_collapsible, query_max_internal_encumbrance, query_internal_encumbrance GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: set_max_internal_encumbrance DEKLARATION: void set_max_internal_encumbrance(int max) BESCHREIBUNG: Mit dieser Funktion setzt man die maximale Traglast eines Behaelters z.B. einer Tasche. Wenn sie auf 0 gesetzt wird, kann man unendlich viel in das Objekt legen. Diese Funktion ruft auch set_min_weight und set_max_weight auf. VERWEISE: query_internal_encumbrance, query_max_internal_encumbrance, test_add_encumbrance, set_collapsible, query_collapsible GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_max_internal_encumbrance DEKLARATION: int query_max_internal_encumbrance() BESCHREIBUNG: Mit dieser Funktion kann man die maximale Traglast eines Behaelters z.B. einer Tasche abfragen. VERWEISE: query_internal_encumbrance, set_max_internal_encumbrance, test_add_encumbrance, set_collapsible, query_collapsible GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_internal_encumbrance DEKLARATION: int query_internal_encumbrance() BESCHREIBUNG: Mit dieser Funktion kann man die momentane Traglast eines Behaelters z.B. einer Tasche abfragen, also, wieviel gerade drin ist. Die Maximallast erfragt man mit query_max_internal_encumbrance(). VERWEISE: query_max_internal_encumbrance, set_max_internal_encumbrance, test_add_encumbrance, set_collapsible, query_collapsible GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_container DEKLARATION: int query_container() BESCHREIBUNG: Wenn diese Funktion 1 returned, ist das Objekt ein Behaelter z.B. eine Tasche. GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_con_close DEKLARATION: int query_con_close() BESCHREIBUNG: Wenn diese Funktion 1 returned, ist der Behaelter zu, bei 0 ist er offen. VERWEISE: close_con, open_con GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: open_con DEKLARATION: void open_con() BESCHREIBUNG: Mit dieser Funktion oeffnet man den Behaelter. VERWEISE: query_con_close, close_con GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: close_con DEKLARATION: void close_con() BESCHREIBUNG: Mit dieser Funktion schliesst man den Behaelter. VERWEISE: query_con_close, open_con GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: add_encumbrance DEKLARATION: int add_encumbrance(object ob, int enc_type, int enc_diff) BESCHREIBUNG: ACHTUNG: add_encumbrance DARF NICHT DIREKT AUFGERUFEN WERDEN. ZUM TESTEN GIBT ES test_add_encumbrance! Damit wird der Platz, den das Objekt ob in diesem Container wegnimmt, veraendert. Folgende Werte (Defines in move.h) fuer enc_type sind moeglich: ENC_ADD Gewicht von ob wird dazuaddiert. ENC_REMOVE Gewicht von ob wird abgezogen. ENC_MODIFY Gewicht von ob aendert sich um enc_diff. ENC_TEST Es findet keine Aktion statt, sondern nur ein Test. ENC_TEST_ADD Testen, ob das Objekt ob in diesen Container passt. ENC_TEST_REMOVE Testen, ob das Objekt ob aus diesem Container entfernt werden kann. ENC_TEST_MODIFY Testen, ob das Objekt ob sein Gewicht um enc_diff Einheiten veraendern darf. Bei Erfolg liefert add_encumbrance einen Wert !=0. VERWEISE: test_add_encumbrance, query_internal_encumbrance, query_max_internal_encumbrance, set_weight, query_weight GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: test_add_encumbrance DEKLARATION: varargs int test_add_encumbrance(object ob, int enc_type, int enc_diff) BESCHREIBUNG: Damit wird getestet, ob man den Platz, den das Objekt ob in diesem Container wegnimmt, veraendert werden darf. Das Objekt ob muss sich nicht in diesem Container befinden (dann nimmt es halt keinen Platz ein). Folgende Werte (Defines in move.h) fuer enc_type sind moeglich: ENC_ADD Gewicht von ob wird dazuaddiert. ENC_REMOVE Gewicht von ob wird abgezogen. ENC_MODIFY Gewicht von ob aendert sich um enc_diff Gewichtseinheiten. Wenn das moeglich ist, liefert test_add_encumbrance einen Wert !=0. Beispiel: Um zu testen, ob ich jemanden eine Fackel zustecken kann: (Dieses Beispiel vermeidet nur ein Clonen mit anschliessender Zerstoerung. Vom Ergebnis her wuerde die eine Zeile mit dem move genuegen.) object referenz = touch("/obj/fackel"); //Voellig identisch zum Clone object ziel = this_player(); if( ziel->test_add_encumbrance(referenz, ENC_ADD) ) // Alles okay clone_object(referenz)->move(ziel, MOVE_ERR_REMOVE); VERWEISE: query_internal_encumbrance, query_max_internal_encumbrance, set_weight, query_weight, set_collapsible, query_collapsible GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: set_transparent DEKLARATION: void set_transparent(int flag) BESCHREIBUNG: Mit dieser Funktion kann man setzen, ob der Behaelter durchsichtig ist, d.h. ob man sehen kann, was in ihm ist, obwohl er geschlossen ist. VERWEISE: query_transparent GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_transparent DEKLARATION: int query_transparent() BESCHREIBUNG: Mit dieser Funktion kann man abfragen, ob der Behaelter durchsichtig ist, d.h. ob man sehen kann, was in ihm ist, obwohl er geschlossen ist. VERWEISE: set_transparent GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: set_content_message DEKLARATION: void set_content_message(string str) BESCHREIBUNG: Mit dieser Funktion setzt man die Meldung, die kommt, wenn man den Behaelter anschaut, und er enthaelt etwas. Normal ist: 'Er enthaelt:' VERWEISE: query_content_message GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_content_message DEKLARATION: string query_content_message() BESCHREIBUNG: Mit dieser Funktion kann man die Meldung, die kommt, wenn man den Behaelter anschaut, und er enthaelt etwas, abfragen. VERWEISE: set_content_message GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: allow_only DEKLARATION: varargs void allow_only(string *ids [, string message ] ) BESCHREIBUNG: Mit dieser Funktion kann man setzten welche, Objekte in den Behaelter duerfen. Es wird ein Array mit den Id's der Objekte, die rein duerfen, uebergeben. Optional kann auch die Fehlermeldung angegeben werden, die ein Spieler erhalten soll; ist diese nicht angegeben, so wird eine Meldung der Art "In die Pralinenschachtel passt das Schwert nicht rein." erzeugt. Eine selber gesetzte Meldung koennte "In die Pralinenschachtel passen nur Pralinen rein." sein. "message" kann auch eine Pseudoclosure sein; dann kann beispielsweise mit "$der('what)" auf das Objekt, welches reinbewegt werden soll, zugegriffen werden. Eine 0 als ids deaktiviert diese Funktion. GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_allow_only DEKLARATION: mixed *query_allow_only() BESCHREIBUNG: Diese Funktion liefert ein Array zurueck, das zuerst die Fehlermeldung (falls keine speziell angegeben wurde, ergibt das eine 0) beschreibt und dann eine Liste von Objekt-Ids enthaelt, in den Behaelter duerfen. VERWEISE: allow_only GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: let_not_in DEKLARATION: let_not_in(mapping mv_infos) BESCHREIBUNG: Diese Funktion wird von /i/move::move() im Zielraum eines Moves aufgerufen, um sich 'Erlaubnis' vom Zielraum einzuholen, ob ein move erlaubt ist. Wenn let_not_in einen anderen Wert als 0 zurueckliefert, wird der move nicht ausgefuehrt. Man kann auch let_not_in dazu verwenden, irgendwelche Aktionen auszufuehren, bevor ein Objekt in den Zielraum bewegt wird. Der Rueckgabewert string wird als Begruendung fuer den Fehlschlag an das bewegte Objekt zurueckgegeben. Die Parameter in mv_infos sind in notify_moved erlaeutert. VERWEISE: move, let_not_out, moved_in, set_not_moved_reason GRUPPEN: move SOURCE: /i/contain.c FUNKTION: let_not_out DEKLARATION: let_not_out(mapping mv_infos) BESCHREIBUNG: Diese Funktion wird von /i/move::move() im Ursprungsraum aufgerufen, um sich 'Erlaubnis' vom Ursprungsraum einzuholen, ob ein move erlaubt ist. Wenn let_not_out einen anderen Wert als 0 zurueckliefert, wird der move nicht ausgefuehrt. Man kann auch let_not_out dazu verwenden, irgendwelche Aktionen auszufuehren, bevor ein Objekt aus dem Ursprungsraum entfernt wird. Der Rueckgabewert string wird als Begruendung an das bewegte Objekt zurueckgegeben. Die in mv_infos verfuegbaren Parameter sind in notify_moved_out erlaeutert. VERWEISE: move, let_not_in, moved_out, set_not_moved_reason GRUPPEN: move SOURCE: /i/contain.c FUNKTION: moved_in DEKLARATION: void moved_in(mapping mv_infos) BESCHREIBUNG: Diese Funktion wird von /i/move::move() im Zielraum des Moves aufgerufen, und zwar NACH dem Move. Damit kann man in einem Container feststellen, dass gerade etwas hereinbewegt wurde. Die in mv_infos verwendeten Parameter sind in notify_moved erlaeutert. VERWEISE: move, let_not_in, moved_out, just_moved GRUPPEN: move SOURCE: /i/contain.c FUNKTION: moved_out DEKLARATION: void moved_out(mapping mv_infos) BESCHREIBUNG: Diese Funktion wird von /i/move::move() im Ursprungsraum des Moves aufgerufen, und zwar NACH dem Move. Damit kann man in einem Container feststellen, dass gerade etwas herausbewegt wurde. Die in mv_infos verwendeten Parameter sind in notify_moved erlaeutert. VERWEISE: move, let_not_out, moved_in, just_moved GRUPPEN: move SOURCE: /i/contain.c FUNKTION: set_take_prepos DEKLARATION: void set_take_prepos(string s) BESCHREIBUNG: Mit dieser Funktion setzt man die Preposition, die man erhaelt, wenn man etwas AUS dem Container nimmt. Bei einem Tisch waere das beispielsweise "von". VERWEISE: query_take_prepos, set_put_prepos, query_put_prepos GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_take_prepos DEKLARATION: string query_take_prepos() BESCHREIBUNG: Mit dieser Funktion fragt man die Preposition, die man erhaelt, wenn man etwas AUS dem Container nimmt. Bei einem Tisch waere das beispielsweise "von". VERWEISE: set_take_prepos, set_put_prepos, query_put_prepos GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: set_put_prepos DEKLARATION: void set_put_prepos(string s) BESCHREIBUNG: Mit dieser Funktion setzt man die Preposition, die man erhaelt, wenn man etwas IN den Container legt. Bei einem Tisch waere das beispielsweise "auf". VERWEISE: query_take_prepos, set_take_prepos, query_put_prepos, set_put_verb GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_put_prepos DEKLARATION: string query_put_prepos() BESCHREIBUNG: Mit dieser Funktion fragt man die Preposition, die man erhaelt, wenn man etwas IN den Container legt. Bei einem Tisch waere das beispielsweise "auf". VERWEISE: query_take_prepos, set_take_prepos, set_put_prepos, set_put_verb GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: set_put_verb DEKLARATION: void set_put_verb(string s|string *s) BESCHREIBUNG: Mit dieser Funktion kann man das Verb oder die Verben setzen, das man erhält, wenn man etwas in einen Container tut. Bei einer Garderobe wäre das beispielsweise "häng", bei einem Tisch ({"leg","stell"}). (Werden mehrere angegeben, so ist das erste der Standardwert, falls der Spieler ein ganz anderes Verb nutzte.) Achtung, dieses Verb ist ohne "Endung"! Also "stell" statt "stelle" usw.; wird keines angegeben, so wird "leg" verwendet. VERWEISE: query_put_verb, query_take_prepos, set_take_prepos, query_put_prepos GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_put_verb DEKLARATION: mixed query_put_verb() BESCHREIBUNG: Mit dieser Funktion fragt man das Verb oder die Verben, und zwar ohne Endung, das man erhaelt, wenn man etwas in den Container tut. Bei einer Garderobe waere das beispielsweise "haeng". VERWEISE: set_put_verb, query_take_prepos, set_take_prepos, set_put_prepos GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: set_put_verb_case DEKLARATION: void set_put_verb_case(int c) BESCHREIBUNG: Mit dieser Funktion setzt man den Fall, welcher fuer das mit set_put_verb gesetzte Verb verwendet wird. Standardfall ist Akkusativ, daher diese Funktion nur verwenden, wenn der Fall nicht Akkusativ ist. Konstanten siehe /sys/deklin.h. Beispiel: set_put_verb("verstau"); set_put_verb_case(FALL_DAT); VERWEISE: query_put_verb, set_put_verb, query_put_verb_case GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: query_put_verb_case DEKLARATION: int query_put_verb_case() BESCHREIBUNG: Mit dieser Funktion fragt man den Fall ab, der fuer das mit set_put_verb gesetzte Verb verwendet werden soll, ab. VERWEISE: set_put_verb, query_take_prepos, set_take_prepos, set_put_prepos GRUPPEN: taschen SOURCE: /i/contain.c FUNKTION: set_message_filter DEKLARATION: void set_message_filter(int filter) BESCHREIBUNG: Mit dem Message-Filter legt man fest, welche Arten von Meldungen der Container durchlaesst, wenn innerhalb des Containers eine Meldung erzeugt wird. Diese Meldungen werden nur dann an das environment weitergegeben, wenn die entsprechenden Bits fuer den Message-Typ im Message-Filter gesetzt sind. Normalerweise sind keine Bits gesetzt, so dass er keine Meldungen durchlaesst. VERWEISE: query_message_filter, send_message GRUPPEN: message SOURCE: /i/contain.c FUNKTION: query_message_filter DEKLARATION: int query_message_filter() BESCHREIBUNG: Liefert den gesetzten Messagefilter. Siehe set_message_filter VERWEISE: set_message_filter, send_message GRUPPEN: message SOURCE: /i/contain.c FUNKTION: propagate_message_to_env DEKLARATION: void propagate_message_to_env(int msg_type, int msg_action, object ob, string msg, string msg_whom, mixed whom) BESCHREIBUNG: Diese Funktion propagiert die Message an alle Objekte im environment() Diese Funktion wird von send_message aufgerufen. Es werden nur Meldungen des Typs weitergeleitet, die nicht von dem mit set_message_filter gesetzten Filter, gefiltert werden. VERWEISE: send_message, send_message_to, set_message_filter, receive_message GRUPPEN: message SOURCE: /i/contain.c FUNKTION: setup_room DEKLARATION: int setup_room(object room, int x, int y) BESCHREIBUNG: Diese Funktion wird aufgerufen, wenn ein Map-Raum geladen wird, fuer den es kein File auf Platte gibt. Uebergeben wird der Objekt-Pointer auf den Raum und die LOKALEN Koordinaten innerhalb der Domain. Hierin kann man das Aussehen des Raumes setzen. Beispiel: int setup_room(object room, int x, int y) { room->set_short("Neue Domain"); room->set_long("Du bist in einer neuen Domain.\n"); return 1; } Wenn 1 returned wird, bedeutet dieses, dass das Aussehen des Raumes veraendert wurde. Wenn 0 returned wird, setzt die uebergeordnete Map das Aussehen. Bei einer Submap werden zusaetlich zu den lokalen Koordinaten auch noch die Koordinaten innerhalb der Domain uebergeben: int setup_room(object room, int x, int y, int domain_x, int domain_y) VERWEISE: GRUPPEN: map, domain SOURCE: /i/domain/domain_map.c FUNKTION: query_room_file DEKLARATION: string query_room_file(int x, int y) BESCHREIBUNG: Diese Funktion wird von MAP_OB aufgerufen, um den Filenamen zu ermitteln, der gecloned werden soll. Das Objekt MUSS /i/domain/map_room inheriten. Uebergeben werden die LOKALEN Koordinaten innerhalb der Domain. Wenn 0 returned wird, berechnet die uebergeordnete Map den Filenamen. Bei einer Submap werden zusaetlich zu den lokalen Koordinaten auch noch die Koordinaten innerhalb der Domain uebergeben: string query_room_file(int x, int y, int domain_x, int domain_y) VERWEISE: GRUPPEN: map, domain SOURCE: /i/domain/domain_map.c FUNKTION: query_member DEKLARATION: int query_member(int x, int y) BESCHREIBUNG: Liefert fuer die lokalen Koordinaten x und y den zugehoerigen Zaehler zum Sub-Domain-Bereich. Dieser Zaehler wird dann z.B. fuer 'query_member_info' benoetigt. VERWEISE: query_member_info, GRUPPEN: map, domain SOURCE: /i/domain/domain_map.c FUNKTION: add_karte DEKLARATION: void add_karte(string file [, int x, int y ]) BESCHREIBUNG: Mit dieser Funktion kann man einfach eine Karte in die Map einbinden. Beispiele siehe /d/Doerrland/map.c VERWEISE: query_room_icon GRUPPEN: map, domain SOURCE: /i/domain/domain_map.c FUNKTION: query_karten DEKLARATION: mixed *query_karten() BESCHREIBUNG: Diese Funktion liefert alle mit add_karte eingebundenen Karten in einem Array der Form ({ ({ file, x, y }), ({ file, x, y }), ... }) zurueck. VERWEISE: add_karte, query_room_icon GRUPPEN: map, domain SOURCE: /i/domain/domain_map.c FUNKTION: query_room_icon DEKLARATION: string query_room_icon(int x, int y) BESCHREIBUNG: Liefert das 'Room-Icon' aus der Karte zu den Koordinaten x und y VERWEISE: add_karte GRUPPEN: map, domain SOURCE: /i/domain/domain_map.c FUNKTION: query_member_info DEKLARATION: mixed *query_member_info(int zaehler) BESCHREIBUNG: Liefert ein Array mit folgendem Inhalt: ({ Name des Members, X-Offset des Sub-Domain-Bereiches, Y-Offset des Sub-Domain-Bereiches, Breite, Hoehe, Unterverzeichnis }) Als Zaehler uebergibt man die Zahl, die man von 'query_member' bekommen hat. VERWEISE: query_member GRUPPEN: map, domain SOURCE: /i/domain/domain_map.c FUNKTION: query_member_map DEKLARATION: string query_member_map(int zaehler) BESCHREIBUNG: Liefert den File-Namen der Sub-Domain-Map (Member-Map). Den Zaehler erhaelt man mit der Funktion query_member VERWEISE: query_member GRUPPEN: map, domain SOURCE: /i/domain/domain_map.c FUNKTION: setup_room DEKLARATION: int setup_room(object room, int x, int y, int domain_x, int domain_y) BESCHREIBUNG: Diese Funktion wird aufgerufen, wenn ein Map-Raum geladen wird, fuer den es kein File auf Platte gibt. Uebergeben wird der Objekt-Pointer auf den Raum und die LOKALEN Koordinaten innerhalb der Domain. Hierin kann man das Aussehen des Raumes setzen. Beispiel: int setup_room(object room, int x, int y, int domain_x, int domain_y) { room->set_short("Neue Sub-Domain"); room->set_long("Du bist in einer neuen Sub-Domain.\n"); return 1; } Wenn 1 returned wird, bedeutet dieses, dass das Aussehen des Raumes veraendert wurde. Wenn 0 returned wird, setzt die uebergeordnete Map das Aussehen. Bei einer Submap werden zusaetlich zu den lokalen Koordinaten auch noch die Koordinaten innerhalb der Domain uebergeben: int setup_room(object room, int x, int y, int domain_x, int domain_y) VERWEISE: GRUPPEN: map, domain SOURCE: /i/domain/domain_member_map.c FUNKTION: map_create DEKLARATION: void map_create() BESCHREIBUNG: Diese Funktion wird anstelle von create() in geclonten Map-Raeumen aufgerufen. Beim Ueberlagern muss sie zwingend mit ::map_create() aufgerufen werden! GRUPPEN: map, raum VERWEISE: query_room_file, query_map_pos SOURCE: /i/domain/map_room.c FUNKTION: set_adjektiv DEKLARATION: void set_adjektiv(mixed new_adj) BESCHREIBUNG: set_adjektiv setzt die Adjektiv-Liste eines Objekts. In diese Liste gehoeren ADJEKTIVE, die die Moeglichkeit geben, ein Objekt anhand dieser Adjektive von anderen Objekten gleicher ID zu unterscheiden. (Beispiele: "rot", "blau", "voll", "leer", "kaputt", "ganz",...) SYNTAX: set_adjektiv(new_adj); new_adj ist ein mixed FELD mit folgenden ELEMENTEN: string Grundform eines Adjektivs ("gruen", "blau",...) string * Ein zweielementiges Feld: ({ grundform, unregelmaessiger_wortstamm }) mixed * Ein zweielementiges Feld: ({ grundform, art }), wobei art eine Kombination aus folgenden flags ist: ADJ_NICHT_DEKLIN: Das Adjektiv wird nicht dekliniert. ODER ein einfacher String, wenn man nur ein Adjektiv haben will BEISPIELE: set_adjektiv("offen"); Das Objekt hat nun das Adjektiv offen. set_adjektiv( ({"offen", ({"lila", "lilan"}), "kaputt"}) ); Das Objekt hat nun die Adjektive offen, lila und kaputt. Wobei lila unregelmaessig ist: Ein offenes, lilaNes, kaputtes Auto. ANMERKUNG: Objekte sollten nicht mehr als ein oder zwei aussagekraeftige Adjektive haben. Sie MUESSEN keine Adjektive haben! VERWEISE: query_adjektiv, adjektiv, add_adjektiv, delete_adjektiv, set_id, query_id, id, add_id, delete_id, query_deklin_adjektiv, query_deklin, wer, der GRUPPEN: grammatik SOURCE: /i/item/adjektiv.c FUNKTION: add_adjektiv DEKLARATION: varargs void add_adjektiv(mixed add_adj, int front) BESCHREIBUNG: add_adjektiv fuegt neue, ZUSAETZLICHE Adjektive dem Objekt hinzu. Siehe set_adjektiv. Wenn front == 1 ist, wird das Adjektiv vorne in die Liste eingetragen. VERWEISE: set_adjektiv, delete_adjektiv, add_temporal_adjektiv GRUPPEN: grammatik SOURCE: /i/item/adjektiv.c FUNKTION: query_adjektiv DEKLARATION: mixed * query_adjektiv() BESCHREIBUNG: query_adjektiv liefert ein Feld (Format siehe set_adjektiv) zurueck, das die Adjektive des Objekts enthaelt. BEISPIEL: Das Objekt habe folgende Adjektivliste mit set_adjektiv definiert. set_adjektiv( ({"offen", ({ teuer", "teur" }), "voll"}) ); Dann gibt query_adjektiv() folgendes Mixedfeld zurueck ({"offen", ({ "teuer", "teur" }), "voll"}) (query_adjektiv liefert also das was set_adjektiv setzt.) VERWEISE: set_adjektiv, query_adjektiv_grundform, query_adjektiv_stamm, adjektiv, add_temporal_adjektiv GRUPPEN: grammatik SOURCE: /i/item/adjektiv.c FUNKTION: query_adjektiv_grundform DEKLARATION: string * query_adjektiv_grundform() BESCHREIBUNG: query_adjektiv_grundform liefert ein Feld bestehend aus strings, das die Grundformen der Adjektive des Objekts enthaelt. (Bei unregelmaessigen Adjektiven ist das dann der erste Eintrag aus dem Element der Adjektivliste.) BEISPIEL: Das Objekt habe folgende Adjektivliste mit set_adjektiv definiert. set_adjektiv( ({"offen", ({ teuer", "teur" }), "voll"}) ); Dann gibt query_adjektiv_grundform() folgendes Stringfeld zurueck ({"offen", "teuer", "voll"}) VERWEISE: set_adjektiv, query_adjektiv, query_adjektiv_stamm, adjektiv GRUPPEN: grammatik SOURCE: /i/item/adjektiv.c FUNKTION: query_adjektiv_stamm DEKLARATION: string * query_adjektiv_stamm() BESCHREIBUNG: query_adjektiv_stamm liefert ein Feld bestehend aus strings, das die Wortstaemme der Adjektive des Objekts enthaelt. (Bei unregelmaessigen Adjektiven ist das dann der zweite Eintrag aus dem Element der Adjektivliste.) BEISPIEL: Das Objekt habe folgende Adjektivliste mit set_adjektiv definiert. set_adjektiv( ({"offen", ({ teuer", "teur" }), "voll"}) ); Dann gibt query_adjektiv_stamm() folgendes Stringfeld zurueck ({"offen", "teur", "voll"}) VERWEISE: set_adjektiv, query_adjektiv_grundform, query_adjektiv, adjektiv GRUPPEN: grammatik SOURCE: /i/item/adjektiv.c FUNKTION: adjektiv DEKLARATION: int adjektiv(string str) BESCHREIBUNG: adjektiv liefert die Position+1 des Adjektiv str im Feld der Adjektive des Objekts. Ist str kein Adjektiv des Objekts, so wird 0 geliefert. Die Funktion macht einen Adjektivstamm-Vergleich. Das heisst auch deklinierte Formen der Adjektive werden damit gefunden. Auch ein Komma wird als letztes Zeichen toleriert. BEISPIEL: Das Objekt habe folgende Adjektivliste mit set_adjektiv definiert: set_adjektiv( ({"offen", ({ teuer", "teur" })}) ); dann liefert: adjektiv("offen") 1 (x beliebig, y beliebig ausser ',') adjektiv("offene") 1 adjektiv("offenes") 1 adjektiv("offenxx") 1 adjektiv("offenxx,") 1 adjektiv("offenxxy") 0 adjektiv("offe") 0 adjektiv("teuer") 2 adjektiv("teur") 2 adjektiv("teure") 2 adjektiv("teuere") 2 adjektiv("teueren") 2 adjektiv("teuerxx") 2 adjektiv("teuerxx,") 2 adjektiv("teuerxxy") 0 adjektiv("teu") 0 adjektiv("") 0 adjektiv(0) 0 adjektiv() 0 VERWEISE: set_adjektiv GRUPPEN: grammatik SOURCE: /i/item/adjektiv.c FUNKTION: delete_adjektiv DEKLARATION: void delete_adjektiv(mixed del_adj) BESCHREIBUNG: delete_adjektiv loescht Adjektive eines Objekts. del_adj Feld von Strings. enthaelt die Adjektive, die geloescht werden sollen, (bzw. deren Wortstamm) BEISPIEL: Das Objekt habe folgende Adjektivliste mit set_adjektiv definiert: set_adjektiv( ({"offen", ({ "teuer", "teur" }), "bizar"}) ); Nach delete_adjektiv( ({ "bizar", "teuer" })); bleibt folgendes uebrig: ({"offen"}) VERWEISE: set_adjektiv, query_adjektiv, add_adjektiv, adjektiv, add_temporal_adjektiv GRUPPEN: grammatik SOURCE: /i/item/adjektiv.c FUNKTION: add_setter_conservation DEKLARATION: varargs void add_setter_conservation(string setter,mixed * args,string sequence) BESCHREIBUNG: Fuegt Daten zur Speicherung von Standardobjekten hinzu, in zwei Modi: - sequence == 0: die set-Funktion setter wird in einem internen Mapping gespeichert. Die Reihenfolge in Bezug auf andere setters ist irrelevant. - stringp(sequence): Innerhalb der sequence wird die Reihenfolge beibehalten. (Beispiel set_life folgend von mehreren add_life) GRUPPEN: armageddon VERWEISE: delete_seq_conservation,query_conservation_data SOURCE: /i/item/conservation.c FUNKTION: delete_seq_conservation DEKLARATION: void delete_seq_conservation(string sequence) BESCHREIBUNG: Wenn eine Sequenz mit set neu initialisiert wird, so muss diese Sequenz vor dem add_setter_conservation mittels dieser Funktion geloescht werden. GRUPPEN: armageddon VERWEISE: add_setter_conservation SOURCE: /i/item/conservation.c FUNKTION: set_conservation_constraint DEKLARATION: void set_conservation_constraint(string setter, mixed args) BESCHREIBUNG: Werden nicht statische oder abspeicherbare Veraenderungen an dem Objekt vorgenommen, so wird mittels set_conservation_constraint das Objekt als nicht einlagerbar geflagt (Args!=0) oder der Constraint wieder geloescht (args==0). GRUPPEN: armageddon VERWEISE: query_conservation_constraints,query_conservation_constraint SOURCE: /i/item/conservation.c FUNKTION: clear_initial_conservation_data DEKLARATION: void clear_initial_conservation_data() BESCHREIBUNG: Diese Funktion setzt die iniitalen Daten und Constraints zurueck. Es gibt drei Einsatzfaelle: - Am Ende des Creates in einer .../obj/... Datei. - Am Ende des Creates eines Inherits, welches mittels replace_programm genutzt wird, in folgender Form: if (program_name(this_object()) == __FILE__) clear_initial_conservation_data(); - Am Ende der Initialisierung durch eine Factory. In allen anderen Faellen ist diese Funktion nicht empfohlen, da sonst gesetzte Daten verloren gehen koennen. GRUPPEN: armageddon VERWEISE: add_setter_conservation, set_conservation_constraint SOURCE: /i/item/conservation.c FUNKTION: query_conservation_data DEKLARATION: mixed* query_conservation_data() BESCHREIBUNG: Es werden die mit add_setter_conservation gesetzten Daten zurueckgeliefert. Zuerst die Elemente ohne Sequenz und dann die Sequenzen. GRUPPEN: armageddon VERWEISE: add_setter_conservation SOURCE: /i/item/conservation.c FUNKTION: query_conservation_constraint DEKLARATION: mixed query_conservation_constraint(string key) BESCHREIBUNG: Liefert einen Constraint mit Schluessel key zurueck, falls vorhanden, 0 sonst. GRUPPEN: armageddon VERWEISE: set_conservation_constraint, query_conservation_constraints SOURCE: /i/item/conservation.c FUNKTION: query_conservation_constraints DEKLARATION: mixed query_conservation_constraints() BESCHREIBUNG: Liefert die Gesamtheit alle Constraints zurueck. GRUPPEN: armageddon VERWEISE: set_conservation_constraint, query_conservation_constraint SOURCE: /i/item/conservation.c FUNKTION: is_controller DEKLARATION: int is_controller(string func [, object ob | string filename | closure cl]) BESCHREIBUNG: Ist das Objekt 'ob' / die Datei 'filename' / die Closure 'cl' fuer den Controller 'func' bei einem Objekt 'ding' angemeldet, dann liefert ding->is_controller(func, ob/filename/cl) den Wert 1 zurueck, ansonsten 0. Ist kein Objekt/Filename/Closure angegeben, ist der Aufrufer das Objekt. (this_object() bei direkten Aufrufen, previous_object() bei Call-Other). VERWEISE: add_controller, delete_controller, query_controller, forbidden, notify GRUPPEN: controller SOURCE: /i/item/control.c FUNKTION: add_controller DEKLARATION: varargs int add_controller(mixed func [, object ob | string filename | closure cl]) BESCHREIBUNG: Mit add_controller() meldet man sich bei einem Objekt 'ding' fuer einen oder mehrere Controller an. Die Grundlagen des Controller-Mechanismus werden in /doc/funktionsweisen/controller naeher erlaeutert. Das Objekt 'ob' / die Datei 'filename' / die Closure 'cl' meldet sich fuer ein oder mehrere Controller 'func' bei dem Objekt 'ding' mit ding->add_controller(func, ob/filename/cl) an. Falls die Anmeldung geklappt hat, wird 1 zurueckgeliefert, ansonsten 0. Ist kein Objekt/Filename/Closure angegeben, ist der Aufrufer das Objekt. (this_object() bei direkten Aufrufen, previous_object() bei Call-Other). Wird in dem Objekt 'ding' der Controller 'func' ausgeloest, werden alle angemeldeten Objekte / Dateinamen / Closures benachrichtigt. Wie diese Benachrichtigung genau aussieht, ist von Controller zu Controller verschieden und der jeweiligen Dokumentation zu entnehmen. 'func' darf ein String oder ein String-Array sein. Falls man dasselbe Objekt / Datei / Closure fuer mehrere Controller anmelden moechte, empfiehlt sich ein Aufruf mit einem Array statt mehrerer Aufrufe mit je einem String als 'func'. Objekte, Dateinamen und Closures koennen pro Controller jeweils nur einmal angemeldet werden. Ist das Objekt bei Aufruf schon eingetragen, passiert dies also nicht ein weiteres Mal. Bei angemeldeten Objekten und Closures ist zu beachten, dass die Anmeldung nur solange besteht, solange das angemeldete Objekt / die Closure noch existiert. Dateinamen dagegen bleiben angemeldet, solange 'ding' existiert. Bei einem Closure-Aufruf wird ein string Parameter vor den anderen Parametern vorangestellt, die den Namen des Controllers (func) enthaelt. Bei allen Controlleraufrufen wird this_object() bei den Parametern angehaengt, was bei den Einzeldokumentationen zu den Controllern nicht immer explizit erwaehnt wird. Per delete_controller() kann der Controller wieder abgemeldet werden. VERWEISE: delete_controller, query_controller, is_controller, forbidden, notify GRUPPEN: controller SOURCE: /i/item/control.c FUNKTION: delete_controller DEKLARATION: int delete_controller(mixed func [, object ob | string filename | closure cl]) BESCHREIBUNG: Mit delete_controller() meldet man Controller bei einem Objekt 'ding' ab, die zuvor mit add_controller() angemeldet wurden. Die Grundlagen des Controller-Mechanismus werden in /doc/funktionsweisen/controller naeher erlaeutert. Das Objekt 'ob' / die Datei 'filename' / die Closure 'cl' meldet sich fuer ein oder mehrere Controller 'func' bei dem Objekt 'ding' mit ding->delete_controller(func, ob/filename/cl) ab. Falls die Abmeldung geklappt hat, wird 1 zurueckgeliefert, ansonsten 0. Die Bedeutung der Parameter wird bei add_controller() erklaert. VERWEISE: query_controller, add_controller, is_controller, forbidden, notify GRUPPEN: controller SOURCE: /i/item/control.c FUNKTION: query_controller DEKLARATION: mixed query_controller([string func]) BESCHREIBUNG: Mit query_controller() kann man saemtliche Objekte / Dateinamen / Closures erfragen, die sich bei einem Objekt 'ding' per add_controller() fuer den Controller 'func' angemeldet haben. Der Aufruf ding->query_controller(func) liefert die 'anmeldungen' von 'func' zurueck. Der Parameter 'func' ist optional. Wenn nicht angegeben oder 0, erhaelt man ein Mapping mit allen angemeldeten Controllern in dem Format ([ 'func' : 'anmeldungen' ]) oder 0, falls kein einziger Controller angemeldet ist. 'anmeldungen' kann sein: 0 - Es ist nichts (mehr) angemeldet. Objekt - Ein einzelnes Objekt ist angemeldet. Filename - Ein einzelner Dateiname ist angemeldet. Closure - Eine einzelne Closure ist angemeldet. Array - Die enthaltenen Objekte / Dateinamen / Closures sind angemeldet. Vorsicht: Das Array kann auch leer sein oder Nullen enthalten. Die Funktion ist meist nur Intern oder zu Debugzwecken interessant. Wenn man wissen moechte, ob ein bestimmter Controller angemeldet ist, verwendet man dazu besser die Funktion is_controller(). VERWEISE: add_controller, delete_controller, is_controller, forbidden, notify GRUPPEN: controller SOURCE: /i/item/control.c FUNKTION: forbidden DEKLARATION: mixed forbidden(string message, varargs mixed * data) BESCHREIBUNG: In einem Objekt 'ding' wird der forbidden-Controller 'message' ausgeloest. Wer sich bei 'ding' fuer diesen Controller angemeldet hat, kann damit eine bestimmte Aktion verbieten. Die Grundlagen des Controller-Mechansimus werden in /doc/funktionsweisen/controller naeher erlaeutert. Der Aufruf ding->forbidden(message, [arg1, arg2, ...] ) loest in dem Objekt 'ding' den Controller "forbidden_" aus. ist hierbei der Wert des uebergebenen Strings 'message'. Der Rueckgabewert ist 0, wenn die Aktion nicht verboten wurde, ansonsten ein beliebiger Wert != 0. Es werden der Reihe nach alle, die sich bei 'ding' per add_controller() fuer den Controller "forbidden_" angemeldet haben, gefragt, ob sie die Aktion verbieten wollen oder nicht. Dateien werden zunaechst geladen und fortan wie Objekte behandelt. Objekte erhalten den Aufruf Objekt->forbidden_( [arg1, arg2, ...], ding) Closures erhalten den Aufruf funcall(Closure, "forbidden_", [arg1, arg2, ...], ding) Ist der Rueckgabewert != 0, liefert forbidden() diesen Wert zurueck, und die Aktion wird verboten. Ansonsten wird das naechste angemeldete Objekt / Dateiname / Closure benachrichtigt. Hat sich niemand bei 'ding' fuer den Controller "forbidden_" angemeldet oder hatten alle Aufrufe den Rueckgabewert 0, dann liefert forbidden() auch 0 zurueck, die Aktion wird demnach nicht verhindert. Wie die Funktion forbidden_() bzw. die Closure genau auszusehen hat, ist der Dokumentation des jeweiligen Controllers zu entnehmen. Dort steht vor allem, welche Parameter dem Controller uebergeben werden, und wie man den Grund fuer die verhinderte Aktion auszugeben hat. VERWEISE: add_controller, query_controller, notify, allowed GRUPPEN: controller SOURCE: /i/item/control.c FUNKTION: allowed DEKLARATION: int allowed(string message, varargs mixed * data) BESCHREIBUNG: In einem Objekt 'ding' wird der allowed-Controller 'message' ausgeloest. allowed ist das Gegenstueck zu forbidden. Aktionen, die normalerweise nicht moeglich sind, werden erlaubt. Die Grundlagen des Controller-Mechansimus werden in /doc/funktionsweisen/controller naeher erlaeutert. Der Aufruf ding->allowed(message, [arg1, arg2, ...] ) loest in dem Objekt 'ding' den Controller "allowed_" aus. ist hierbei der Wert des uebergebenen Strings 'message'. Der Rueckgabewert ist 1, wenn die Aktion erlaubt wird, ansonsten 0. Es werden der Reihe nach alle, die sich bei 'ding' per add_controller() fuer den Controller "forbidden_" angemeldet haben, gefragt, ob sie die Aktion erlauben wollen oder nicht. Dateien werden zunaechst geladen und fortan wie Objekte behandelt. Objekte erhalten den Aufruf Objekt->allowed_( [arg1, arg2, ...], 'ding') Closures erhalten den Aufruf funcall(Closure, "allowed_", [arg1, arg2, ...], 'ding') Ist der Rueckgabewert != 0, liefert allowed() diesen Wert zurueck, und die Aktion wird erlaubt. Ansonsten wird das naechste angemeldete Objekt / Dateiname / Closure benachrichtigt. Hat sich niemand bei 'ding' fuer den Controller "allowed_" angemeldet oder hatten jeder Aufruf den Rueckgabewert 0, dann liefert allowed() auch 0 zurueck, die Aktion wird demnach nicht erlaubt. Wie die Funktion allowed_() bzw. die Closure genau auszusehen hat, ist der Dokumentation des jeweiligen Controllers zu entnehmen. Dort steht vor allem, welche Parameter dem Controller uebergeben werden, und wie man den Grund fuer die nicht erlaubte Aktion auszugeben hat. VERWEISE: add_controller, query_controller, forbidden, notify GRUPPEN: controller SOURCE: /i/item/control.c FUNKTION: notify DEKLARATION: void notify(string message, varargs mixed * data) BESCHREIBUNG: In einem Objekt 'ding' wird der notify-Controller 'message' ausgeloest. Wer sich bei 'ding' fuer diesen Controller angemeldet hat, kann damit eine bestimmte Aktion mitbekommen. Die Grundlagen des Controller-Mechansimus werden in /doc/funktionsweisen/controller naeher erlaeutert. Der Aufruf ding->notify(message, [arg1, arg2, ...] ) loest in dem Objekt 'ding' den Controller "notify_" aus. ist hierbei der Wert des uebergebenen Strings 'message'. Es gibt keinen Rueckgabewert. Es werden der Reihe nach alle, die sich bei 'ding' per add_controller() fuer den Controller "notify_" angemeldet haben, informiert, dass die Aktion durchgefuehrt wurde (oder werden wird). Dateien werden zunaechst geladen und fortan wie Objekte behandelt. Objekte erhalten den Aufruf Objekt->notify_( [arg1, arg2, ...], ding) Closures erhalten den Aufruf funcall(Closure, "notify_", [arg1, arg2, ...], ding) Welche Parameter die Funktion notify_() bzw. die Closure genau erhaelt, ist der Dokumentation des jeweiligen Controllers zu entnehmen. VERWEISE: add_controller, query_controller, forbidden, allowed GRUPPEN: controller SOURCE: /i/item/control.c FUNKTION: modify DEKLARATION: void modify(string message, mixed ¶meter, varargs mixed * data) BESCHREIBUNG: In einem Objekt 'ding' wird der modify-Controller 'message' ausgeloest. Wer sich bei 'ding' fuer diesen Controller angemeldet hat, kann damit den Parameter einer Aktion aendern. Die Grundlagen des Controller-Mechanismus werden in /doc/funktionsweisen/controller naeher erlaeutert. Der Aufruf ding->modify(message, ¶meter, [arg1, arg2, ...]) loest in dem Objekt 'ding' den Controller "modify_" aus. ist hierbei der Wert des uebergebenen Strings 'message'. Es gibt keinen Rueckgabewert. Stattdessen kann 'parameter' per Referenz veraendert werden. Es wird der Reihe nach allen, die sich bei 'ding' per add_controller() fuer den Controller "modify_" angemeldet haben, die Gelegenheit gegeben, den per Referenz uebergebenen 'parameter' zu veraendern. Dateien werden zunaechst geladen und fortan wie Objekte behandelt. Objekte erhalten den Aufruf Objekt->modify_(¶meter, [arg1, arg2, ...], ding) Closures erhalten den Aufruf funcall(Closure, "modify_", ¶meter, [arg1, arg2, ...], ding) Wie die Veraenderung am 'parameter' genau vorzunehmen ist, und welche weiteren Argumente zusaetzlich uebergeben werden, ist der Dokumentation des jeweiligen Controllers zu entnehmen. VERWEISE: add_controller, query_controller, forbidden, allowed, notify GRUPPEN: controller SOURCE: /i/item/control.c FUNKTION: concerned DEKLARATION: mixed concerned([int &prio,] string message, varargs mixed * data) BESCHREIBUNG: Durch Aufruf dieser Funktion wird gefragt, welches Objekt fuer eine Aktion, die mit message gekennzeichnet ist, zustaendig ist. Der Rueckgabewert kann 0 sein, dann haelt sich kein Objekt dafuer zustaendig. Ansonsten ist er entweder ein Objekt oder eine Closure. Je nach message muss data eine bestimmte Form haben. concerned ruft in allen mit add_controller("concerned_"+message, other) angemeldeten Objekten other die Funktion "concerned_"+message auf. Alle entsprechend angemeldeten Closures other werden mit "concerned_"+message als ersten Parameter und die Parameter aus data als weitere Parameter aufgerufen. Die Funktion/Closure sollte dann eine Prioritaet zurueckliefern, mit welcher sie sich fuer diese Aktion zustaendig fuehlt. 0 bedeutet, dass sie nicht zustaendig ist. Dasjenige Objekt/diejenige Closure mit der hoechsten Prioritaet wird dann zurueckgeliefert. Die Funktion/Closure sollte keinerlei Ausgaben oder sonstige Aktionen bewirken. Nachdem ein Objekt/eine Closure ob ermittelt wurde, koennen dann weitere Aktionen folgen, indem im Objekt ob eine andere Funktion bzw. die Closure ob mit einem anderen Namen als ersten Parameter aufgerufen werden. Wurde prio angegeben, so wird dies als Mindestprioritaet fuer eine Antwort angenommen. Falls es als Referenz uebergeben wurde, so wird die gefundene Prioritaet dort gespeichert. Als Beispiel dient hier ein Streichholz, was testen moechte, ob ein Objekt ob sich lieber selber anzuenden will. Dazu wird in ob ein concerned("strike", this_object()) aufgerufen. Wird ein Objekt zurueckgeliefert, so wird ihm das anzuenden ueberlassen: if(zustaendig = ob->concerned("strike", this_object())) { if(closurep(zustaendig)) funcall(zustaendig,"do_strike",this_object(),ob); else zustaendig->do_strike(this_object(),ob); } Eine Bombe wird sich selber als Controller fuer concerned_strike anmelden und mit einer entsprechend hohen Prioritaet reagieren: int concerned_strike(object streichholz, mixed was) { return 100; } // Dass diese Funktion eine Zahl zurueckliefert, ist speziell // fuer do_strike. Bei anderen Controllern kann dies anders aussehen. int do_strike(object streichholz, object was) { send_message(MT_LOOK|MT_NOISE|MT_FEEL,MA_UNKNOWN, "KRAWUMM!\n"); remove(); return 1; // Erfolg } Im create(): add_controller("concerned_strike",this_object()); Merke: Man fragt mit concerned("strike",..). Die Funktion concerned im Objekt ruft dann in den eingetragenen Objekten concerned_strike auf, was man nie selbst tun sollte. Normale Benutzung: ob1->add_controller(func, ob2) und in ob2 ist eine Funktion (func) concerned_message(...) definiert, in dieser ist ob1==previous_object()! Zusaetzlicher Parameter fuer func ist this_object(). VERWEISE: add_controller, query_controller, notify, forbidden, allowed GRUPPEN: controller SOURCE: /i/item/control.c FUNKTION: do_notifies DEKLARATION: void do_notifies(int flags, string message, mixed *postfixes, mixed *obs, varargs mixed *params) BESCHREIBUNG: Diese Funktion kuemmert sich um den Aufruf mehrerer notify-Funktionen. Zur Erklaerung erstmal ein Beispiel: do_notifies(C_RESORT, "feel", ({ "", "_me"}), ({who, what})); ruft die Controller who->notify("feel", what, who); what->notify("feel_me", who, what); und (weniger offensichtlich) all_environment(who)[<1]->notify("feel_here", who, what); auf. Falls 'what' ein V-Item ist, wird die Funktion am zugehoerigen Objekt aufgerufen. Diese Funktion ruft also fuer jedes Objekt in 'obs' obs[i]->notify(message+postfix[i], obs..., params...); auf. Also jedem Objekt in 'obs' ist ein String in 'postfix' zugeordnet, welcher dem Controllernamen 'message' angehaengt wird. Ist obs[i] ein V-Item, so wird das zugehoerige Objekt genommen. Gibt es ein Objekt obs[i] mit "" als Postfix, so wird in seiner aeussersten Umgebung all_environment(obs[i])[<1]->notify(message+"_here", obs..., params...) aufgerufen. Null-Eintraege in 'obs' werden ignoriert. Folgende Flags (definiert in control.h) kann man angeben: C_RESORT Die Argumente aus 'obs' werden so umsortiert, dass das zum Aufruf zugehoerige Objekt am Schluss in der Objektliste kommt. C_OMIT_OBJ Das aufgerufene Objekt wird ganz aus der Objektliste 'obs' beim Aufruf weggelassen. C_NO_HERE Es wird nicht der _here-Controller aufgerufen. VERWEISE: notify, add_controller, do_forbiddens GRUPPEN: controller SOURCE: /i/item/control.c FUNKTION: do_forbiddens DEKLARATION: mixed do_forbiddens(int flags, string message, mixed *postfixes, mixed *obs, varargs mixed *params) BESCHREIBUNG: Diese Funktion kuemmert sich um den Aufruf mehrerer forbidden-Funktionen. Zur Erklaerung erstmal ein Beispiel: do_forbiddens(C_RESORT, "feel", ({ "", "_me"}), ({who, what})); ruft nacheinander die Controller who->forbidden("feel", what, who); what->forbidden("feel_me", who, what); und (weniger offensichtlich) all_environment(who)[<1]->forbidden("feel_here", who, what); auf und bricht beim ersten Ergebnis, welches nicht 0 ist, ab und liefert es zurueck. Falls 'what' ein V-Item ist, wird die Funktion am zugehoerigen Objekt aufgerufen. Diese Funktion ruft also fuer jedes Objekt in 'obs' obs[i]->forbidden(message+postfix[i], obs..., params...); auf. Also jedem Objekt in 'obs' ist ein String in 'postfix' zugeordnet, welcher dem Controllernamen 'message' angehaengt wird. Ist obs[i] ein V-Item, so wird das zugehoerige Objekt genommen. Gibt es ein Objekt obs[i] mit "" als Postfix, so wird in seiner aeussersten Umgebung all_environment(obs[i])[<1]->forbidden(message+"_here", obs..., params...) aufgerufen. Null-Eintraege in 'obs' werden ignoriert. Folgende Flags (definiert in control.h) kann man angeben: C_RESORT Die Argumente aus 'obs' werden so umsortiert, dass das zum Aufruf zugehoerige Objekt am Schluss in der Objektliste kommt. C_OMIT_OBJ Das aufgerufene Objekt wird ganz aus der Objektliste 'obs' beim Aufruf weggelassen. C_NO_HERE Es wird nicht der _here-Controller aufgerufen. Die Flags C_RESORT und C_OMIT_OBJ sind vorwiegend fuer Kompatibilitaet gedacht. VERWEISE: forbidden, add_controller, do_notifies GRUPPEN: controller SOURCE: /i/item/control.c FUNKTION: set_short DEKLARATION: void set_short(string short) BESCHREIBUNG: Hiermit wird die Kurzbeschreibung eines Objektes gesetzt. Naehres siehe bei query_short. VERWEISE: query_short GRUPPEN: grundlegendes SOURCE: /i/item/description.c FUNKTION: query_short DEKLARATION: string query_short(object betrachter) BESCHREIBUNG: Diese Funktion liefert die Kurzbeschreibung eines Objektes zurueck. Diese wird angezeigt, wenn das Lebewesen betrachter sich den Raum anschaut, in dem das Objekt liegt oder auch beim "ausruestung"-Kommando. betrachter kann (aus Kompatibilitaetsgruenden) 0 sein, dann sollte PL (definiert in misc.h) genommen werden. Die Kurzbeschreibung darf keine Satzendezeichen wie .!? etc am Ende aufweisen und auch keinen Zeilenumbruch "\n" ! VERWEISE: set_short GRUPPEN: grundlegendes SOURCE: /i/item/description.c FUNKTION: set_long DEKLARATION: void set_long(mixed long) BESCHREIBUNG: Hiermit wird die Langbeschreibung eines Objektes gesetzt. Wird am Ende ein "\n" angegeben, so findet kein automatischer Umbruch statt, sonst wird der in set_long angegebene String auf eine Breite von 75 Zeichen automatisch umgebrochen und ein "\n" angehaengt. Wenn ein Absatz im long gewunescht wird, kann das selbstverstaendlch durch ein "\n" eingefuegt werden! (halt nur nicht am Schluss) Statt eines Strings kann auch eine komplexere Beschreibung mit Bedingungen angegeben werden. Siehe dazu /doc/funktionsweisen/beschreibungen. VERWEISE: query_long, query_short, set_long_night, query_long_night, wrap, query_look_msg, query_look_night, add_long, T_LISTE GRUPPEN: grundlegendes SOURCE: /i/item/description.c FUNKTION: add_long DEKLARATION: void add_long(mixed long) BESCHREIBUNG: Hiermit wird der Langbeschreibung eines Objektes ein Text angehaengt. Als Text kann wie bei set_long auch eine komplexere Beschreibung uebergeben werden. VERWEISE: set_long, query_long, T_LISTE GRUPPEN: grundlegendes SOURCE: /i/item/description.c FUNKTION: query_long DEKLARATION: string query_long(object betrachter) BESCHREIBUNG: Diese Funktion liefert die ausfuehrliche Beschreibung eines Objektes zurueck. Hierbei muss im Gegensatz zur Kurzbeschreibung ein "\n" am Ende vorhanden sein. Bei einer mit set_long gesetzten Meldung wird dies notfalls auch automatisch angehaengt. (Siehe set_long.) Fuer eine extra Meldung in der Nacht siehe query_long_night. betrachter ist dasjenige Objekt, welches dieses Objekt betrachtet. Ist es 0 (aufgrund von Kompatibilitaetsproblemen), so sollte man PL (aus misc.h) als diesen annehmen. VERWEISE: set_long, query_short, set_long_night, query_long_night, query_look_msg, query_look_night, wrap, query_long_exec, query_long_postprocess GRUPPEN: grundlegendes SOURCE: /i/item/description.c FUNKTION: query_long_exec DEKLARATION: protected string query_long_exec(mapping info) BESCHREIBUNG: Diese Funktion wird aus query_long heraus aufgerufen und berechnet die Langbeschreibung aufgrund der Daten in 'info'. 'info' enthaelt folgende Eintraege: TI_VIEWER Der Betrachter TI_ITEM Der betrachtete Gegenstand, also this_object() (nicht vorhanden, wenn der Raum betrachtet wird.) TI_ROOM Der betrachtete Raum bzw. der Raum, in dem sich der betrachtete Gegenstand befinden. TI_DARK !=0, wenn es dunkel ist. Diese Funktion kann vom Gegenstand/Raum ueberlagert werden, um dem Mapping weitere Eintraege hinzuzufuegen, oder einen gaenzlich anderen Beschreibungsmechanismus zu waehlen. Fuer nachtraegliche Behandlungen am Text selbst sollte man query_long_postprocess ueberlagern. VERWEISE: query_long, query_long_postprocess GRUPPEN: beschreibung SOURCE: /i/item/description.c FUNKTION: query_long_postprocess DEKLARATION: protected string query_long_postprocess(string msg, mapping info) BESCHREIBUNG: Diese Funktion erhaelt die Grundbeschreibung 'msg' und das Mapping 'info' (mit den bei query_long_exec beschriebenen Eintraegen) und verarbeitet dieses. Die urspruengliche Funktion bricht die Meldung via wrap um und haengt bei Raeumen noch eine Tageszeitmeldung an, sofern sie angebracht ist. Inherits koennen diese Funktion ueberlagern, um den Text zu verarbeiten, zum Beispiel, um weitere Meldungen an den Text anzuhaengen. Achtung: Die zurueckgelieferte Meldung sollte korrekt umgebrochen sein, der Aufruf von ::query_long_postprocess mit der Meldung erledigt dies normalerweise. VERWEISE: query_long, query_long_exec, query_long_tags, query_long_has_tag, query_long_tag_val GRUPPEN: beschreibung SOURCE: /i/item/description.c FUNKTION: query_long_shadow DEKLARATION: string query_long_shadow(string msg, mapping info) BESCHREIBUNG: Diese Funktion erhaelt die Grundbeschreibung 'msg' und das Mapping 'info', aehnlich wie query_long_postprocess. Diese Funktion koennen Shadows zur Verfuegung stellen, um die Kernbeschreibung zu veraendern, bevor Zusatztexte (z.B. die Tageszeitmeldungen) von query_long_postprocess hinzugefuegt werden. VERWEISE: query_long, query_long_exec, query_long_postprocess GRUPPEN: beschreibung SOURCE: /i/item/description.c FUNKTION: query_long_tags DEKLARATION: mapping query_long_tags() BESCHREIBUNG: Liefert alle in einer Long-Meldung genutzten T_TAG- bzw. T_TAGVAL-Schliessel mitsamt ihrer Werte in einem Mapping zurueck. VERWEISE: set_long, T_TAG, T_TAGVAL, query_long_has_tag, query_long_tag_val GRUPPEN: beschreibung SOURCE: /i/item/description.c FUNKTION: query_long_has_tag DEKLARATION: int query_long_has_tag(string tag) BESCHREIBUNG: Liefert einen Wert != 0, wenn in der Long-Meldung ein T_TAG-Eintrag mit dem Schluessel 'tag' vorkommt. VERWEISE: set_long, T_TAG, query_long_tags, query_long_tag_val GRUPPEN: beschreibung SOURCE: /i/item/description.c FUNKTION: query_long_tag_val DEKLARATION: mixed query_long_tag_val(string tag) BESCHREIBUNG: Liefert den Wert, der in der Long-Meldung in einem T_TAGVAL-Eintrag mit dem Schluessel 'tag' angegeben wurde, oder 0, falls kein solcher Eintrag existiert. VERWEISE: set_long, T_TAGVAL, query_long_tags, query_long_tag_val. GRUPPEN: beschreibung SOURCE: /i/item/description.c FUNKTION: add_long_tag DEKLARATION: void add_long_tag(string tag [, mixed val]) BESCHREIBUNG: Fuegt einen Eintrag zur Liste aller T_TAGs der Long-Beschreibung hinzu. Achtung: Dieser Liste wird mit dem naechsten set_long ueberschrieben. VERWEISE: set_long, T_TAG, query_long_tags, query_long_has_tag. GRUPPEN: beschreibung SOURCE: /i/item/description.c FUNKTION: delete_long_tag DEKLARATION: void delete_long_tag(string tag) BESCHREIBUNG: Entfernt einen Eintrag aus der Liste aller T_TAGs. VERWEISE: set_long, T_TAG, query_long_tags, query_long_has_tag. GRUPPEN: beschreibung SOURCE: /i/item/description.c FUNKTION: set_long_night DEKLARATION: deprecated void set_long_night(string long) BESCHREIBUNG: Hiermit wird die Langbeschreibung eines Objektes bei Nacht gesetzt. Es wird empfohlen, diese Funktion nicht mehr einzusetzen und stattdessen die Nachtbeschreibung mit Hilfe von T_NIGHT in die normale Raumbeschreibung zu integrieren. VERWEISE: query_long, set_long, wrap, T_LISTE GRUPPEN: grundlegendes SOURCE: /i/item/description.c FUNKTION: query_long_night DEKLARATION: deprecated string query_long_night(object betrachter) BESCHREIBUNG: Diese Funktion liefert die ausfuehrliche Beschreibung eines Objektes bei Nacht zurueck. VERWEISE: set_long_night, query_long, set_long, query_short, wrap GRUPPEN: grundlegendes SOURCE: /i/item/description.c FUNKTION: query_short_string DEKLARATION: string query_short_string() BESCHREIBUNG: Diese Funktion liefert den genauen mit set_short gesetzten Text zurueck. Im Gegensatz zu query_short liefert diese Funktion nur dann einen Text, wenn einer mit set_short gesetzt wurde und fuegt dem auch keine weiteren Informationen (z.B. Ansehen) hinzu. VERWEISE: query_short, set_short GRUPPEN: grundlegendes SOURCE: /i/item/description.c FUNKTION: query_long_string DEKLARATION: string query_long_string() BESCHREIBUNG: Diese Funktion liefert den mit set_long gesetzten Text zurueck. Im Gegensatz zu query_long werden diesem keine Informationen ueber Ausdauer, Tageszeit oder aehnlichem angehaengt. ACHTUNG: Wenn die komplexeren Beschreibungsmoeglichkeiten genutzt werden (d.h. ein Array als Beschreibung angegeben wurde), dann liefert diese Funktion 0 zurueck. Es wird daher empfohlen, sie nicht mehr einzusetzen. Ueberlagerungen von query_long, die darauf angewiesen sind, sollten eine Ueberlagerung von query_long_postprocess stattdessen erwaegen. VERWEISE: query_long, set_long, query_short, query_long_postprocess GRUPPEN: grundlegendes SOURCE: /i/item/description.c FUNKTION: query_long_night_string DEKLARATION: deprecated string query_long_night_string() BESCHREIBUNG: Diese Funktion liefert den mit set_long_night gesetzten Text zurueck. Im Gegensatz zu query_long_night werden diesem keine Informationen ueber Ausdauer, Tageszeit oder aehnlichem angehaengt. VERWEISE: query_long_night, set_long_night, query_long_string GRUPPEN: grundlegendes SOURCE: /i/item/description.c FUNKTION: query_debug_info DEKLARATION: mapping query_debug_info() BESCHREIBUNG: Diese Funktion kann man ueberlagern, um im Falle eines Fehlers wichtige Informationen in der FDB zu speichern. Das zurueckgelieferte Mapping sollte nur Strings als Schluessel und Strings oder Zahlen als Werte beinhalten. VERWEISE: do_error, do_warning GRUPPEN: master SOURCE: /i/item/description.c FUNKTION: set_feel DEKLARATION: void set_feel(mixed gefuehl) BESCHREIBUNG: Setzt fuer ein Objekt, wie es sich anfuehlt. Statt eines Strings kann auch eine komplexere Beschreibung mit Bedingungen angegeben werden. Siehe dazu /doc/funktionsweisen/beschreibungen. VERWEISE: query_feel, T_LISTE GRUPPEN: grundlegendes SOURCE: /i/item/feel.c FUNKTION: query_feel DEKLARATION: string query_feel() BESCHREIBUNG: Gibt fuer ein Objekt zurueck, wie es sich anfuehlt. VERWEISE: set_feel, query_feel_msg GRUPPEN: grundlegendes SOURCE: /i/item/feel.c FUNKTION: set_gender DEKLARATION: void set_gender(string gender) BESCHREIBUNG: Setzt das grammatikalische Geschlecht des Objektes. Moeglich sind: "maennlich", "weiblich" oder "saechlich" (default). VERWEISE: query_gender, set_name GRUPPEN: grundlegendes SOURCE: /i/item/gender.c FUNKTION: query_gender DEKLARATION: string query_gender() BESCHREIBUNG: Gibt das grammatikalische Geschlecht eines Objektes zurueck. VERWEISE: set_gender, query_real_gender GRUPPEN: grundlegendes SOURCE: /i/item/gender.c FUNKTION: query_real_gender DEKLARATION: nomask string query_real_gender() BESCHREIBUNG: Gibt das "echte", nicht von Shadows beeinflusste grammatikalische Geschlecht eines Objektes zurueck. VERWEISE: set_gender, query_gender GRUPPEN: grundlegendes SOURCE: /i/item/gender.c FUNKTION: set_plural DEKLARATION: void set_plural(int p) BESCHREIBUNG: Gibt an, ob der Name des Objektes in der Pluralform vorliegt. Moeglich sind: 1 oder 0. VERWEISE: query_plural, set_name GRUPPEN: grundlegendes SOURCE: /i/item/gender.c FUNKTION: query_plural DEKLARATION: int query_plural() BESCHREIBUNG: Gibt 1 zurueck, wenn der Name des Objektes in der Pluralform vorliegt, ansonsten 0. VERWEISE: set_plural GRUPPEN: grundlegendes SOURCE: /i/item/gender.c FUNKTION: set_plural_id DEKLARATION: void set_plural_id(string plural_id | string *plural_ids) BESCHREIBUNG: Hiermit koennen die Plurale der Ids angegeben werden, falls der Plural- Generator in plural_id versagt. VERWEISE: id, me, add_id, delete_id, query_id, set_class_id, query_plural_id, add_plural_id, delete_plural_id GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: query_plural_id DEKLARATION: string *query_plural_id() BESCHREIBUNG: Hiermit kann man die Plurale der Ids abfragen. (wenn diese gesetzt sind) VERWEISE: id, me, add_id, delete_id, query_id, set_plural_id, set_class_id GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: add_plural_id DEKLARATION: void add_plural_id(string plural_id | string *plural_ids) BESCHREIBUNG: Hiermit koennen zu bereits vorhandenen Ids die Plurale von Ids hinzugefuegt werden, falls der Plural-Generator in plural_id versagt. VERWEISE: id, me, add_id, delete_id, query_id, set_class_id, set_plural_id, query_plural_id, delete_plural_id GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: delete_plural_id DEKLARATION: void delete_plural_id(string plural_id | string *plural_ids) BESCHREIBUNG: Hiermit koennen bereits existierende Plurale von Ids eines Objektes geloescht werden. delete_id ist das Pendant zu add_plural_id. VERWEISE: id, me, set_id, add_id, query_id, set_class_id, set_plural_id, query_plural_id, add_plural_id GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: plural_id DEKLARATION: int plural_id(string id) BESCHREIBUNG: Gibt 1 zurueck, wenn der uebergebene String id die Plural-Form einer der mit set_id, add_id oder set_class_id gestzten Ids entspricht, ansonsten 0. VERWEISE: id, me, set_id, add_id, delete_id, query_id GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: set_id DEKLARATION: void set_id(string id | string *ids) BESCHREIBUNG: Hiermit werden die Ids eines Objektes gesetzt, bereits gesetzte Ids werden ueberschrieben. Ids sind die Namen eines Objektes, anhand derer es eindeutig identifiziert werden kann. Die angegebenen Namen sollten NUR Kleinbuchstaben enthalten. Die Mehrzahlform kann man mit set_plural_id setzen und die Klasse eines Objektes (z.B. getraenk) mit set_class_id Beispiel: set_id( ({ "flasche", "bier", "bierflasche" }) ); VERWEISE: id, add_id, delete_id, query_id, me GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: add_id DEKLARATION: void add_id(string id | string *ids) BESCHREIBUNG: Hiermit koennen zu bereits existierenden Ids eines Objektes weitere hinzugefuegt werden. Das Pendant hierzu ist delete_id. Naeheres siehe id. VERWEISE: id, me, set_id, delete_id, query_id GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: query_id DEKLARATION: string *query_id() BESCHREIBUNG: Gibt ein Feld mit allen Ids des Objektes zurueck. Naeheres siehe id. VERWEISE: id, me, set_id, add_id, delete_id GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: delete_id DEKLARATION: void delete_id(string id | string *ids) BESCHREIBUNG: Hiermit koennen bereits existierende Ids eines Objektes geloescht werden. delete_id ist das Pendant zu add_id. Naeheres siehe id. VERWEISE: id, me, set_id, add_id, query_id GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: id DEKLARATION: int id(string id) BESCHREIBUNG: Gibt 1 zurueck, wenn die angegebene id mit einer der gesetzten Ids oder Klassen-IDs uebereinstimmt, ansonsten 0. VERWEISE: me, set_id, add_id, delete_id, query_id, set_plural_id,ids GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: id DEKLARATION: int ids(string *ids) BESCHREIBUNG: Gibt 1 zurueck, wenn die angegebenen ids mit einer der gesetzten Ids oder Klassen-IDs uebereinstimmt, ansonsten 0. VERWEISE: me, set_id, add_id, delete_id, query_id, set_plural_id,id GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: set_class_id DEKLARATION: void set_class_id(string class_id | string *class_ids) BESCHREIBUNG: Hiermit werden Klassen-Ids eines Objektes gesetzt, zB "waffe", "ruestung",... Diese werden auch bei id() zur Ueberpruefung herangezogen. VERWEISE: id, me, add_id, delete_id, query_id, set_id, query_class_id GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: query_class_id DEKLARATION: string *query_class_id() BESCHREIBUNG: Hiermit kann man die Klassen-Ids eines Objektes abfragen. VERWEISE: id, me, add_id, delete_id, query_id, set_id, set_class_id GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: me DEKLARATION: string me(string command) BESCHREIBUNG: Definiert ein Objekt eine add_action, zB eine Fackel 'zuende', so war es praktisch unmoeglich, Kommandos wie zB 'zuende meine 2. fackel an' zu parsen; hier fuer muesste ein umfangreicher parse_com(..) - Aufruf programmiert werden. Dieser Aufruf ist jetzt in me(..) realisiert. me ruft intern parse_com auf und gibt 0 zurueck, wenn nicht dieses Objekt gemeint ist, andernfalls einen String mit dem Rest des Kommandos. Fuer v_items gibt es die entsprechende Funktion here(). Beispiel: void init() { add_action("mach_licht","mache",-4); } int mach_licht(string str) { string rest; if ( !(rest = me(str)) ) { notify_fail("Mach was?\n"); return 0; } switch(lower_case(rest)) { case "an": mach_licht_an(); break; case "aus": mach_licht_aus(); break; default: send_message_to(TP, MT_NOTIFY, MA_UNKNOWN, "Mache das licht an" " oder aus?\n"); } return 1; } VERWEISE: id, parse_com, set_id, set_plural_id, set_class_id, here GRUPPEN: grundlegendes SOURCE: /i/item/id.c FUNKTION: query_own_light DEKLARATION: int query_own_light() BESCHREIBUNG: Mit dieser Funktion kann man den Licht-Level abfragen, der von dem Objekt selbst ausgeht. VERWEISE: add_own_light, set_own_light, query_light GRUPPEN: licht SOURCE: /i/item/licht.c FUNKTION: set_own_light DEKLARATION: void set_own_light(int value) BESCHREIBUNG: Mit dieser Funktion setzt man den Licht-Level eines Objektes auf value. Der gesetzte Licht-Level laesst sich dann mit query_own_light() abfragen. VERWEISE: add_own_light, query_own_light GRUPPEN: licht SOURCE: /i/item/licht.c FUNKTION: add_own_light DEKLARATION: void add_own_light(int amount) BESCHREIBUNG: Mit dieser Funktion kann man den Licht-Level eines Objektes um amount anheben, oder, wenn amount negativ ist, absenken. Der geaenderte Licht-Level laesst sich dann mit query_own_light() abfragen. VERWEISE: set_own_light, query_own_light GRUPPEN: licht SOURCE: /i/item/licht.c FUNKTION: query_light DEKLARATION: int query_light() BESCHREIBUNG: Liefert den Lichtlevel zurueck, der sich in der aeussersten Umgebung des Objektes befindet. VERWEISE: query_own_light, query_inner_light, query_outer_light GRUPPEN: licht SOURCE: /i/item/licht.c FUNKTION: query_inner_light DEKLARATION: int query_inner_light() BESCHREIBUNG: Liefert den Lichtlevel, den die Objekte in dem Container nach aussen hin produzieren. Beispiel: tisch->query_inner_light() liefert den Lichtlevel zurueck, den der Inhalt des Tischs nach aussen hin abgibt. ACHTUNG: Das Eigenlicht des Objektes (hier also des Tischs) ist in diesem Wert nicht enthalten. Dieses muss mit query_own_light() abgefragt werden. Handelt es sich bei dem Container um ein nicht transparentes Objekt, wird query_inner_light() nicht an die Umgebung weitergegeben. VERWEISE: query_outer_light, query_light, query_own_light GRUPPEN: licht SOURCE: /i/item/licht.c FUNKTION: query_outer_light DEKLARATION: int query_outer_light() BESCHREIBUNG: Liefert den Lichtlevel, den die Objekte in dem Container sowie der Container selbst nach aussen hin abgeben. Fuer den Fall, dass es sich um einen lichtundurchlaessigen Container handelt, entspricht dies query_own_light(). Beispiel: tisch->query_outer_light() liefert zurueck, wieviel Licht von dem Tisch samt Inhalt ausgeht. VERWEISE: query_inner_light, query_light, query_own_light GRUPPEN: licht SOURCE: /i/item/licht.c FUNKTION: set_material DEKLARATION: void set_material( materialien) BESCHREIBUNG: Setzt die wichtigsten Grundbestandteile, aus denen das Objekt besteht. Alle erlaubten Materialien stehen in /doc/richtlinien/materialien. Uebergeben kann ein einzelnes Material oder eine Liste von Materialien. VERWEISE: material, add_material, delete_material, query_material GRUPPEN: grundlegendes SOURCE: /i/item/material.c FUNKTION: add_material DEKLARATION: void add_material( materialien) BESCHREIBUNG: Fuegt weitere Materialien hinzu. Alle erlaubten Materialien stehen in /doc/richtlinien/materialien. Uebergeben kann ein einzelnes Material oder eine Liste von Materialien. VERWEISE: material, set_material, delete_material, query_material GRUPPEN: grundlegendes SOURCE: /i/item/material.c FUNKTION: query_material DEKLARATION: string *query_material() BESCHREIBUNG: Gibt alle Material-Typen zurueck, aus denen das Objekt besteht. Naeheres siehe /doc/funktionsweisen/material. VERWEISE: material, set_material, add_material, delete_material GRUPPEN: grundlegendes SOURCE: /i/item/material.c FUNKTION: material DEKLARATION: int material(string m) BESCHREIBUNG: Gibt 1 zurueck, wenn m in der Material-Liste des Objektes auftaucht, ansonsten 0. Naeheres siehe /doc/funktionsweisen/material. VERWEISE: set_material, add_material, delete_material, query_material GRUPPEN: grundlegendes SOURCE: /i/item/material.c FUNKTION: delete_material DEKLARATION: void delete_material( materialien) BESCHREIBUNG: Loescht einzelne Material-Typen aus der Material-Liste des Objektes. Es kann ein einzelnes Material oder eine Liste von Materialien entfernt werden. VERWEISE: material, set_material, add_material, query_material GRUPPEN: grundlegendes SOURCE: /i/item/material.c FUNKTION: MT_LISTE DEKLARATION: Liste der Message Typen. BESCHREIBUNG: Message-Typ: Der Typ definiert, welcher Sinn beim Empfaenger der Message angesprochen wird: MT_UNKNOWN Sollte nicht verwendet werden, ist eine Notloesung MT_LOOK alles, was man sieht MT_NOISE alles, was man hoert MT_FEEL alles, was man fuehlt MT_TASTE alles, was man schmeckt MT_SMELL alles, was man riecht MT_SENSE alle uebersinnlichen Wahrnehmungen, z.B. rede MT_NOTIFY Statusmeldungen: "Ok.", "Du nimmst den Blasuelz." MT_CHANNEL Kurier-Kanaele. MT_FAR alles, was aus der Ferne kommt. (nicht von etwas im Raum kommt) MT_DEBUG Debugmeldungen, sehen nur Goetter MT_FAIL Fehlschlagsnachrichten (Debug hat mehr Prio) MT_INDENT Wenn die Meldung umgebrochen wird, wird ab der 2. Zeile eingerueckt (gilt automatisch fuer MA_COMM-Meldungen). MT_NO_WRAP Die Meldung wird nicht automatisch umgebrochen. (Dies ist fuer Meldungen gedacht, die z.B. nur \a oder ANSI-Codes ausgeben.) Die Defines finden sich in . VERWEISE: MA_LISTE, send_message, send_message_to GRUPPEN: message SOURCE: /i/item/message.c FUNKTION: MA_LISTE DEKLARATION: Liste der Message Aktionen. BESCHREIBUNG: Message-Aktionen: Die Aktion legt fest, durch welche Aktion eine Message ausgeloest wird MA_UNKNOWN Die Notloesung. MA_LOOK Jemand sieht etwas an MA_NOISE Jemand horcht oder lauscht an etwas MA_FEEL Jemand betastet etwas MA_TASTE Jemand leckt etwas ab MA_SMELL Jemand schnueffelt herum MA_SENSE Jemand macht eine uebersinnliche Wahrnehmung MA_PUT Jemand legt etwas hin und gibt jemanden etwas MA_TAKE Jemand nimmt etwas MA_MOVE_IN Jemand betritt den Raum MA_MOVE_OUT Jemand verlaesst den Raum MA_MOVE Jemand bewegt sich MA_EMOTE Jemand grinst (oder so) MA_FIGHT Jemand kaempft MA_WIELD Jemand fuehrt eine Waffe MA_UNWIELD Jemand senkt eine Waffe MA_WEAR Jemand zieht etwas an MA_UNWEAR Jemand zieht etwas aus MA_EAT Jemand isst etwas (kotzen ist ein MA_EMOTE, kein MA_UNEAT) MA_DRINK Jemand trinkt etwas MA_COMM Jemand sagt was MA_MAGIC Keines von alledem, is aber magisch MA_READ Jemand liest etwas MA_USE Jemand benutzt etwas MA_CRAFT Jemand werkelt rum (bearbeitet etwas) MA_REMOVE Etwas verschwindet. Die Defines finden sich in . VERWEISE: MT_LISTE, send_message, send_message_to GRUPPEN: message SOURCE: /i/item/message.c FUNKTION: MSG_ATTRIBUTES DEKLARATION: Liste der Message Attribute. BESCHREIBUNG: Message-Attribute (aus message.h): Name Typ Bedeutung --------------- --------------- ----------------------------------------------- MSG_AH_INFOS mapping Von add_hp uebergebenes infos-Mapping. MSG_RECEVIER_WHOM string Im Kampf werden folgende Werte fuer den Adressaten der Melduung uebergeben: ==AH_ATTACKER (Angreifer, selbst) ==AH_VICTIM (der jeweilige Feind) ==MSG_OTHERS (intern bei send_message) Hiermit wird in /i/player/filter_messages.c unterschieden, welcher der drei Filter geprueft wird. MSG_FIRST_MSG (int 0/1) Flag zur Anzeige einer ersten Meldung z.B. der Anfang eines Kampfes. MSG_LAST_MSG (int 0/1) Flag zur Anzeige einer letzten Meldung Kampfmeldungsattribute (aus fight_options.h): Name Typ Bedeutung --------------- --------------- ----------------------------------------------- FIM_MAX_COUNT int Maximalanzahl der unterdrueckten Kampfmeldungen FIM_BROKEN 0/1 Attribut, ob Waffe/Ruestung kaputt ist. FIM_WEAPON object Angabe der Waffe, z.B. bei FIM_BROKEN FIM_ARMOUR object Angabe der Ruestung, z.B. bei FIM_BROKEN FIM_WHO_SELF int Die Flags, die unten folgen, fuer sich selbst FIM_WHO_ENEMY int Die Flags fuer den Feind-Filter. FIM_WHO_OTHERS int Die Flags, wenn andere kaempfen. Flags zum Austausch der Einstellung aus /i/player/options.c und /i/player/filter_messages.c (aus fight_options.h) Name Bedeutung ----------------------------- ----------------------------------------------- FIM_FILTER_FIGHT_FIRST_MSG Flag fuer erste Meldung eines Kampfes FIM_FILTER_FIGHT_CRITICAL Flag ob das ein kritischer Schlag gefiltert wird FIM_FILTER_WEAPON_BROKEN Flag ob eine Waffe-Kaputt-Meldung gefiltert wird FIM_FILTER_ARMOUR_BROKEN Gleiches Flag fuer Ruestungen-Kaputt. FIM_FILTER_FIGHT_LAST_MSG Flag fuer die letzte Meldung eines Kampfes. Die folgenden Flags aus fight_options.h klassifizieren die einzelnen Schweregrade einer Kampfmeldung und laesst sich dadurch filtern. FIM_FILTER_CATEGORY_0NULL FIM_FILTER_CATEGORY_1WEAK FIM_FILTER_CATEGORY_2MEDIUM FIM_FILTER_CATEGORY_3STRONG FIM_FILTER_CATEGORY_4HIGH FIM_FILTER_CATEGORY_5FRACTAL VERWEISE: send_message, send_message_to, send_message_in GRUPPEN: message SOURCE: /i/item/message.c FUNKTION: send_message_to DEKLARATION: void send_message_to(object whom | object *whom, int msg_type, int msg_action, string msg, mapping attributes) BESCHREIBUNG: Mit 'send_message_to' schickt man einem oder mehreren Objekten eine Meldung. 'msg_type' und 'msg_action' sind bei 'send_message' beschrieben. 'attributes' sind in ?MSG_ATTRIBUTES beschrieben. VERWEISE: send_message, send_message_in, receive_message, MT_LISTE, MA_LISTE, MSG_ATTRIBUTES GRUPPEN: message SOURCE: /i/item/message.c FUNKTION: send_message DEKLARATION: varargs void send_message(int msg_type, int msg_action, string msg, [string msg_whom, object whom | object *whom, mapping attributes]) BESCHREIBUNG: Mit send_message verteilt man die Meldung 'msg' an alle Objekte im selben Raum (bzw. Container) ausser dem Meldungsurheber (also ausser demjenigen, in welchem send_message aufgerufen wurde). 'msg_whom' wird an das Objekt bzw. die Objekte 'whom' verteilt, falls diese angegeben wurden. Ausserdem wird dann 'msg' nicht an 'whom' verteilt. 'msg_type' Definiert den Typ der Meldung (also welcher Sinn des Beobachters davon angesprochen wird) Diese Typen sind in /sys/message.h definiert und koennen logisch verknuepft werden, wenn die Meldung mehrere Sinne anspricht. 'msg_action' ist der Aktions-Typ, durch den diese Meldung ausgeloest wurde. Der Aktions-Typ ist in /sys/message.h definiert. 'attributes' ist in MSG_ATTRIBUTES naeher erlaeutert. VERWEISE: send_message_to, send_message_in, receive_message, MT_LISTE, MA_LISTE, MSG_ATTRIBUTES GRUPPEN: message SOURCE: /i/item/message.c FUNKTION: send_message_in DEKLARATION: varargs void send_message_in(object room, int msg_type, int msg_action, string msg, [string msg_whom, object whom | object *whom, mapping attributes]) BESCHREIBUNG: Mit send_message_in verteilt man die Meldung 'msg' an alle Objekte im angegebenen Raum (bzw. Container). 'room' ist der Raum, in welchem die Meldung ausgegeben werden soll. 'msg_type' definiert den Typ der Meldung (also welcher Sinn des Beobachters davon angesprochen wird) Diese Typen sind in /sys/message.h definiert und koennen logisch verknuepft werden, wenn die Meldung mehrere Sinne anspricht. 'msg_action' ist der Aktions-Typ, durch den diese Meldung ausgeloest wurde. Der Aktions-Typ ist in /sys/message.h definiert. 'msg' ist die Meldung. 'msg_whom' wird an das Objekt bzw. die Objekte 'whom' verteilt, falls diese angegeben wurden. Ausserdem wird dann 'msg' nicht an 'whom' verteilt. 'attributes' ist in MSG_ATTRIBUTES naeher erlaeutert. VERWEISE: send_message_to, send_message, receive_message, MT_LISTE, MA_LISTE, MSG_ATTRIBUTES GRUPPEN: message SOURCE: /i/item/message.c FUNKTION: receive_message DEKLARATION: void receive_message(int msg_type, int msg_action, object who, string msg, mapping attributes) BESCHREIBUNG: Diese Funktion wird von send_message() bzw. send_message_to() in jedem Objekt, das die Meldung bekommen soll, aufgerufen. 'who' ist dabei das Objekt, das die Meldung hervorgerufen hat. 'attributes' ist in MSG_ATTRIBUTES naeher erlaeutert. Diese Funktion darf in Spielern nicht einfach durch Shadows ueberlagert werden. Dazu werden spezielle Privilegien benoetigt (bei den Admins zu beantragen). VERWEISE: send_message_to, receive_message, MT_LISTE, MA_LISTE, MSG_ATTRIBUTES GRUPPEN: message SOURCE: /i/item/message.c FUNKTION: closure_to_string DEKLARATION: varargs string closure_to_string(closure c, mixed *args) BESCHREIBUNG: Dokumentation siehe: /doc/funktionsweisen/pseudoclosures VERWEISE: mixed_to_closure, string_parser GRUPPEN: grundlegendes SOURCE: /i/item/messages.c FUNKTION: set_invis DEKLARATION: void set_invis(int wert) BESCHREIBUNG: Gibt dem Objekt einen bestimmten Unsichtbarkeits-Wert. Die zu benutzenden Werte sind in invis.h definiert: Wert Beschreibung V_VIS - Default-Einstellung. Das Objekt ist ganz normal sichtbar. V_NOLIST - Objekt taucht nicht in Listen auf (betrachte, ausruestung) V_HIDDEN - Das Objekt ist versteckt. Wenn das Objekt z.B. von einem Spieler angesehen wird, erscheint bei anderen Spielern nicht der Name des Objekts, sondern "etwas". V_SHIMMER - Die Grammatikfunktionen liefern "Jemand" und "Etwas" statt des Namens. Das Objekt erzeugt einen Schimmer im Raum. V_INVIS - Echte Unsichtbarkeit. Das Objekt kann von Spielern nicht gefunden werden. VERWEISE: query_invis, query_short, set_hidden_until_next_move GRUPPEN: grundlegendes SOURCE: /i/item/name.c FUNKTION: notify_invis_self DEKLARATION: void notify_invis_self(object who, int alt, int neu) BESCHREIBUNG: Aendert sich die Unsichtbarkeitsstufe eines Objektes who von alt auf neu, wird who->notify("invis", who, alt, neu) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_invis_self", other) angemeldeten Objekten other die Funktionen other->notify_invis_self( who, alt, neu) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf das Sichtbar- oder Unsichbarwerden eines Spielers z.B. zu reagieren. VERWEISE: forbidden, notify, set_invis, query_invis, notify_invis GRUPPEN: grundlegendes SOURCE: /i/item/name.c FUNKTION: query_invis DEKLARATION: int query_invis() BESCHREIBUNG: Liefert den mit set_invis gesetzten Wert. Speziell: !query_invis() bedeutet: Das Objekt ist sichtbar. VERWEISE: set_invis, query_short GRUPPEN: grundlegendes SOURCE: /i/item/name.c FUNKTION: set_name DEKLARATION: void set_name(string name) BESCHREIBUNG: Setzt den Namen des Objektes. Weicht name von lower_case(cap_name) ab, so wird der cap_name geloescht. VERWEISE: query_name, query_cap_name, set_personal GRUPPEN: grundlegendes SOURCE: /i/item/name.c FUNKTION: query_name DEKLARATION: string query_name() BESCHREIBUNG: Liefert den Namen des Objektes zurueck. VERWEISE: set_name, query_cap_name, query_personal, set_personal GRUPPEN: grundlegendes SOURCE: /i/item/name.c FUNKTION: query_cap_name DEKLARATION: string query_cap_name() BESCHREIBUNG: Liefert den Namen des Objektes mit grossem Anfangsbuchstaben zurueck. VERWEISE: query_real_cap_name, query_name, set_name, set_personal, query_personal, set_cap_name GRUPPEN: grundlegendes SOURCE: /i/item/name.c FUNKTION: set_cap_name DEKLARATION: void set_cap_name(string cap_name) BESCHREIBUNG: Mit diesem Befehl kann man die Grossschreibung eines Objektes festsetzen, wenn man mit dem Standard capitalize nicht zufrieden ist. Dabei wird automatisch der Name des Objekts auf lower_case(cap_name) gesetzt. cap_name ist der grossgeschriebene Name des Objekts. Ist cap_name 0, dann wird wieder die capitalize Funktion benutzt. BEISPIEL: set_name("barbaren-axt"); set_cap_name("Barbaren-Axt"); (Hinweis: Barbarenaxt schreibt man im Deutschen EH OHNE BINDESTRICH!, das ist also ein rechtschreibtechnisch gesehen 'schlechtes' Beispiel.) VERWEISE: query_cap_name, query_name, set_name GRUPPEN: grundlegendes SOURCE: /i/item/name.c FUNKTION: set_personal DEKLARATION: void set_personal(int logical) BESCHREIBUNG: Setzt fest, ob es sich bei diesem Objekt um ein personifiziertes Objekt handelt oder nicht. 1 = personifiziertes Objekt 0 = gewoehnliches Objekt Beispiele fuer personifizierte Objekte: Detlef (ein Lebewesen mit Eigenname und Persoenlichkeit) Arijanim (ein totes, aber personifiziertes Objekt) alle Spieler Beispiele fuer gewoehnliche Objekte: Ein Ork Ein Schwert Personifizierte und gewoehnliche Objekte werden in den Deklinations-Routinen unterschiedlich behandelt. (Personifizierte Objekte tragen keinerlei Artikel, gewoehnliche bekommen die jeweiligen Artikel verpasst.) VERWEISE: set_name, query_name, query_cap_name, query_personal GRUPPEN: grundlegendes, grammatik SOURCE: /i/item/name.c FUNKTION: query_personal DEKLARATION: int query_personal() BESCHREIBUNG: Liefert, ob es sich bei diesem Objekt um ein personifiziertes Objekt handelt oder nicht. 1 = personifiziertes Objekt 0 = gewoehnliches Objekt Beispiele fuer personifizierte Objekte: Detlef (ein Lebewesen mit Eigenname und Persoenlichkeit) Arijanim (ein totes, aber personifiziertes Objekt) alle Spieler Beispiele fuer gewoehnliche Objekte: Ein Ork Ein Schwert Personifizierte und gewoehnliche Objekte werden in den Deklinations-Routinen unterschiedlich behandelt. (Personifizierte Objekte tragen keinerlei Artikel, gewoehnliche bekommen die jeweiligen Artikel verpasst.) VERWEISE: set_name, query_name, query_cap_name, query_personal GRUPPEN: grundlegendes, grammatik SOURCE: /i/item/name.c FUNKTION: set_personal_title DEKLARATION: string set_personal_title(string personal_title) BESCHREIBUNG: Mit dieser Funktion kann man allen Lebenwesen, bei denen das personal flag mittels set_personal() gesetzt wurde, einen Prefix vor den Namen stellen. Zum Beispiel "Lord Darcy" statt Darcy. Bei allen Grammatikaufrufen und bei der Anzeige der 'wer' Liste wird dieser Titel dann beruecksichtigt. Die Grammatik beruecksichtigt keine Adjektive bei Objekten mit personal_title und personal flag. Diese Objekte sollten deshalb auch kein Adjektiv gesetzt haben. Personal_titles sind auf 15 Zeichen begrenzt und duerfen keine Leerzeichen oder Underscores enthalten. Uebergibt man den Wert 0, so wird der personal_title geloescht. Bei erfolgreicher Operation liefert die Funktion den gesetzten Wert. Beispiel: ob = clone_object("/obj/monster"); ob->set_name("darcy"); ob->set_gender("maennlich"); ob->set_personal(1); ob->set_personal_title("Lord"); VERWEISE: query_personal_title, set_personal, query_personal GRUPPEN: grundlegendes, grammatik SOURCE: /i/item/name.c FUNKTION: query_personal_title DEKLARATION: string query_personal_title() BESCHREIBUNG: Mit dieser Funktion kann man den mit set_personal_title() gesetzten Personaltitel abfragen. siehe dort. VERWEISE: set_personal_title, set_personal, query_personal GRUPPEN: grundlegendes, grammatik SOURCE: /i/item/name.c FUNKTION: set_eigen DEKLARATION: void set_eigen(int logical) BESCHREIBUNG: Setzt fest, ob dieses Objekt ein 'bestimmtes' Objekt mit Eigennamen ist und sich dadurch aus einer uebergeordneten Gruppe hervorhebt. 1 = bestimmtes Objekt mit Eigennamen aus einer Gruppe 0 = gewoehnliches Objekt, das nur den Gruppennamen der Gruppe traegt. Beispiele fuer bestimmte Objekte mit Eigennamen: die Argo (ein bestimmtes Schiff mit Namen aus der Gruppe der Schiffe) das Lancelot (ein bestimmtes Spiel mit Namen aus der Gruppe der Spiele) Manfred (ein bestimmter Ork aus der Gruppe der Orks) Beispiele fuer gewoehnliche Objekte: Ein Schiff Ein Ork Ein Schwert Bestimmte und gewoehnliche Objekte werden in den Deklinations-Routinen unterschiedlich behandelt. (Bestimmte (tote) Objekte tragen immer bestimmten Artikel, gewoehnliche bekommen die jeweiligen Artikel verpasst.) VERWEISE: set_name, query_name, query_cap_name, query_personal, set_personal, query_eigen GRUPPEN: grundlegendes, grammatik SOURCE: /i/item/name.c FUNKTION: query_eigen DEKLARATION: int query_eigen() BESCHREIBUNG: Liefert zurueck, ob dieses Objekt ein 'bestimmtes' Objekt mit Eigennamen ist und sich dadurch aus einer uebergeordneten Gruppe hervorhebt. 1 = bestimmtes Objekt mit Eigennamen aus einer Gruppe 0 = gewoehnliches Objekt, das nur den Gruppennamen der Gruppe traegt. Beispiele fuer bestimmte Objekte mit Eigennamen: die Argo (ein bestimmtes Schiff mit Namen aus der Gruppe der Schiffe) das Lancelot (ein bestimmtes Spiel mit Namen aus der Gruppe der Spiele) Manfred (ein bestimmter Ork aus der Gruppe der Orks) Beispiele fuer gewoehnliche Objekte: Ein Schiff Ein Ork Ein Schwert Bestimmte und gewoehnliche Objekte werden in den Deklinations-Routinen unterschiedlich behandelt. (Bestimmte (tote) Objekte tragen immer bestimmten Artikel, gewoehnliche bekommen die jeweiligen Artikel verpasst.) VERWEISE: set_name, query_name, query_cap_name, query_personal, set_personal, set_eigen GRUPPEN: grundlegendes, grammatik SOURCE: /i/item/name.c FUNKTION: set_menge DEKLARATION: void set_menge(mapping | string | * | **) BESCHREIBUNG: Setzt eine Mengenangabe fuer dieses Objekt. menge kann sein: - Ein Mapping: Dieses V-Item wird der eigentlichen Objektbeschreibung vorangestellt. Beispiel: (["name":"haufen","gender":"maennlich"]) ergibt dann bei Stroh: "Ein Haufen Stroh". - Ein Array der Form: ({ string stamm, int art }), wobei - stamm der Stamm eines unbestimmten Pronomens, - art eine Kombination (mittels |) aus folgenden Flags ist: PRON_NICHT_DEKLIN: Pronomen wird nicht dekliniert (z.B. "etwas") PRON_NICHT_NACH_BEST: Pronomen darf nicht nach einem bestimmten Artikel folgen (z.B.: "einige" im Gegensatz zu "die wenigen") Beispiele: ({"wenig",0}), ({"zwei",PRON_NICHT_DEKLIN}), ({"etwas",PRON_NICHT_DEKLIN|PRON_NICHT_NACH_BEST}), ({"einig",PRON_NICHT_NACH_BEST}) - Ein Array der Form: ({ ({ u_stamm, u_art}), ({b_stamm, b_art}) }) verhaelt sich wie ({ u_stamm, u_art }), wenn es alleine als unbestimmtes Pronomen vorkommt und wie ({ b_stamm, b_art }), wenn es nach einem bestimmten Pronomen erscheint. Beispiel: ({ ({"zwei",PRON_NICHT_DEKLIN}), ({"beid",0}) }) - Ein String str: dieser verhaelt sich genauso wie ({str, 0}). VERWEISE: query_menge, query_personal, set_personal GRUPPEN: grundlegendes, grammatik SOURCE: /i/item/name.c FUNKTION: query_menge DEKLARATION: mapping | string | * | ** query_menge() BESCHREIBUNG: Liefert die mit set_menge gesetzte Mengenangabe: - Ein Mapping: Dieses V-Item wird der eigentlichen Objektbeschreibung vorangestellt. Beispiel: (["name":"haufen","gender":"maennlich"]) ergibt dann bei Stroh: "Ein Haufen Stroh". - Ein Array der Form: ({ string stamm, int art }), wobei - stamm der Stamm eines unbestimmten Pronomens, - art eine Kombination (mittels |) aus folgenden Flags ist: PRON_NICHT_DEKLIN: Pronomen wird nicht dekliniert (z.B. "etwas") PRON_NICHT_NACH_BEST: Pronomen darf nicht nach einem bestimmten Pronomen folgen (z.B.: "einige" im Gegensatz zu "die wenigen") Beispiele: ({"wenig",0}), ({"drei",PRON_NICHT_DEKLIN}), ({"einig",PRON_NICHT_NACH_BEST}) ({"etwas",PRON_NICHT_DEKLIN | PRON_NICHT_NACH_BEST}), - Ein Array der Form: ({ ({ u_stamm, u_art}), ({b_stamm, b_art}) }) verhaelt sich wie ({ u_stamm, u_art }), wenn es alleine als unbestimmtes Pronomen vorkommt und wie ({ b_stamm, b_art }), wenn es nach einem bestimmten Pronomen erscheint. Beispiel: ({ ({"zwei",PRON_NICHT_DEKLIN}), ({"beid",0}) }) - Ein String str: dieser verhaelt sich genauso wie ({str, 0}). VERWEISE: set_menge, query_personal, set_personal GRUPPEN: grundlegendes, grammatik SOURCE: /i/item/name.c FUNKTION: notify_invis DEKLARATION: void notify_invis(object who, int alt, int neu) BESCHREIBUNG: Aendert sich die Unsichtbarkeitsstufe eines Objektes who von alt auf neu, wird im umgebenden Raum room->notify("invis", who, alt, neu) aufgerufen. Die Funktion notify ruft in allen mit room->add_controller("notify_invis", other) angemeldeten Objekten other die Funktionen other->notify_invis(who, alt, neu) auf. Sowohl room als auch other haben dann eine Moeglichkeit, auf das Sichtbar- oder Unsichbarwerden eines Spielers z.B. zu reagieren. Ein aggressives Monster greift Spieler an, wenn sie sich naehern, und auch, wenn sie sichtbar werden, indem es sich fuer "invis" an den ihn umgebenden Raum anmeldet (bereits standardmaessig). VERWEISE: forbidden, notify, set_invis, query_invis GRUPPEN: grundlegendes SOURCE: /i/item/name.c FUNKTION: set_noise DEKLARATION: void set_noise(mixed geraeusch) BESCHREIBUNG: Setzt das Geraeusch, das ein Objekt erzeugt. Wenn der String nicht von einem "\n" abgeschlossen wird, wird automatisch auf 75 Zeichen Breite umgebrochen. Statt eines Strings kann auch eine komplexere Beschreibung mit Bedingungen angegeben werden. Siehe dazu /doc/funktionsweisen/beschreibungen. VERWEISE: query_noise, T_LISTE GRUPPEN: grundlegendes SOURCE: /i/item/noise.c FUNKTION: query_noise DEKLARATION: string query_noise() BESCHREIBUNG: Gibt das Geraeusch, das ein Objekt erzeugt zurueck. VERWEISE: set_noise, query_hear_msg GRUPPEN: grundlegendes SOURCE: /i/item/noise.c FUNKTION: query DEKLARATION: nomask mixed query(string name [, mixed info]) BESCHREIBUNG: Fragt die Eigenschaft 'name' ab. Der Name sollte dabei als Define angegeben werden (fuer die Mudlib-Properties dazu includen). In 'info' koennen zusaetzliche Infos uebergeben werden, diese wird an alle Controller und an eine ggf. gesetzte Abfragefunktion uebergeben. VERWEISE: set, add, delete GRUPPEN: properties SOURCE: /i/item/properties.c FUNKTION: set DEKLARATION: nomask mixed set(string name, mixed value) BESCHREIBUNG: Damit wird ein neuer Wert 'value' fuer die Eigenschaft 'name' gesetzt. VERWEISE: query, add, delete GRUPPEN: properties SOURCE: /i/item/properties.c FUNKTION: add DEKLARATION: nomask mixed add(string name [, mixed key], value) BESCHREIBUNG: Falls die Eigenschaft 'name' ein Mapping ist, so kann man mit dieser Funktion einen neuen Eintrag key: value hinzufuegen. Falls sie ein Array ist, wird ein neues Element 'value' eingetragen. Ansonsten wird der Wert von 'value' zur bestehenden Eigenschaft addiert. VERWEISE: query, set, delete GRUPPEN: properties SOURCE: /i/item/properties.c FUNKTION: delete DEKLARATION: nomask mixed delete(string name, mixed key|value) BESCHREIBUNG: Falls die Eigenschaft 'name' ein Mapping ist, so entfernt dieser Aufruf den Eintrag 'key'. Falls sie ein Array ist, wird ein Element 'value' entfernt. Bei allen anderen Datentypen und key == 0 wird die Property geloescht. Bei allen anderen Datentypen liefert der Aufruf einen Fehler, sofern keine spezielle delete-Funktion registriert wurde. VERWEISE: query, set, add GRUPPEN: properties SOURCE: /i/item/properties.c FUNKTION: query_property_info DEKLARATION: mapping query_property_info(string name) BESCHREIBUNG: Liefert alle Informationen zur Eigenschaft 'name' zurueck. Dieses Mapping enthaelt alle Informationen der Property-Definition inklusive des tatsaechlichen Wertes. ACHTUNG: Diese Abfrage umgeht alle Auswertungen (z.B. bei Closures) und Modifikationen des gespeicherten Wertes und sollte daher nur zu Debugging-Zwecken beachtet werden. VERWEISE: query, set_property_info, query_property_names, query_property_infos GRUPPEN: properties SOURCE: /i/item/properties.c FUNKTION: query_property_names DEKLARATION: string* query_property_names() BESCHREIBUNG: Liefert die Namen aller Eigenschaften zurueck, die an diesem Objekt gesetzt wurden. VERWEISE: query, query_property_info, query_property_infos GRUPPEN: properties SOURCE: /i/item/properties.c FUNKTION: query_property_infos DEKLARATION: mapping query_property_infos() BESCHREIBUNG: Liefert alle Informationen aller gesetzten Eigenschaften. Das Mapping enthaelt die Property-Definitionen inklusive der tatsaechlichen Werte. ACHTUNG: Diese Abfrage umgeht alle Auswertungen (z.B. bei Closures) und Modifikationen des gespeicherten Wertes und sollte daher nur zu Debugging-Zwecken beachtet werden. VERWEISE: query, set_property_info, query_property_info, query_property_names GRUPPEN: properties SOURCE: /i/item/properties.c FUNKTION: save_properties DEKLARATION: protected void save_properties() BESCHREIBUNG: Speichert gesetzte Eigenschaften mit PF_PERSISTANT-Flag so ab, dass sie bei einem save_object() mitgespeichert werden. Zum Wiederherstellen ist nach dem restore_object() ein Aufruf von restore_properties() notwendig. VERWEISE: restore_properties GRUPPEN: properties SOURCE: /i/item/properties.c FUNKTION: restore_properties DEKLARATION: protected void restore_properties() BESCHREIBUNG: Stellt nach einem restore_object() die gespeicherten Eigenschaften wieder her. Die Eigenschaften muessen dazu vor dem save_object() mit einem Aufruf von save_properties() gespeichert werden. VERWEISE: save_properties GRUPPEN: properties SOURCE: /i/item/properties.c FUNKTION: set_read DEKLARATION: void set_read(mixed str) BESCHREIBUNG: Mit dieser Funktion setzt man den Text, den man bekommt, wenn man ein Objekt liest. Statt eines Strings kann auch eine komplexere Beschreibung mit Bedingungen angegeben werden. Siehe dazu /doc/funktionsweisen/beschreibungen. VERWEISE: query_read, query_read_msg, T_LISTE GRUPPEN: grundlegendes SOURCE: /i/item/read.c FUNKTION: query_read DEKLARATION: varargs string query_read(string parse_rest, string str,object leser) BESCHREIBUNG: Diese Funktion liefert den Text, den leser bekommt, wenn er ein Objekt liest. PARSE_REST ist dabei der Rest, der vom Spieler eingegeben wurde: lese Buch 1. Seite -> parse_rest = '1. Seite' str = 'Buch 1. Seite' Man sollte damit rechnen, dass alle 3 Parameter 0 sind. Dies wuerde einem query_read("", "", PL) (PL definiert in misc.h) entsprechen. VERWEISE: set_read, query_read_msg GRUPPEN: grundlegendes SOURCE: /i/item/read.c FUNKTION: set_smell DEKLARATION: void set_smell(mixed geruch) BESCHREIBUNG: Setzt den Geruch eines Objektes. Statt eines Strings kann auch eine komplexere Beschreibung mit Bedingungen angegeben werden. Siehe dazu /doc/funktionsweisen/beschreibungen. VERWEISE: query_smell, T_LISTE GRUPPEN: grundlegendes SOURCE: /i/item/smell.c FUNKTION: query_smell DEKLARATION: string query_smell() BESCHREIBUNG: Gibt den Geruch eines Objektes zurueck. VERWEISE: set_smell GRUPPEN: grundlegendes SOURCE: /i/item/smell.c FUNKTION: activate_sound_profile DEKLARATION: int activate_sound_profile(string profile_name) BESCHREIBUNG: Die Funktion kann von jedem Objekt ueberlagert werden, um die zusammengehoerenden Tondateien auf einen Schlag per - this_object()->set(P_SOUND_ACTIONS,([...])); oder - this_object()->add(P_SOUND_ACTIONS,"action","bereich/datei.wav"); zu setzen. Die Basisfunktion nutzt 0 und "" als Profilenamen, um auf die Default-Sounds zurueckzusetzen. VERWEISE: P_SOUND_ACTIONS GRUPPEN: grundlegendes SOURCE: /i/item/sounds.c FUNKTION: add_v_item DEKLARATION: void add_v_item(mapping item [, *|mapping pfad ] ) BESCHREIBUNG: Addiert ein virtuelles Objekt dazu. Wenn pfad angegeben ist wird das virtuelle Objekt bei einem anderen virtuellen Objekt addiert. Der Pfad muss folgenden Syntax haben: ({"id_name1","id_name2",...}) oder, wenn man mehrere virtuelle Objekte mit demselben Namen hat: ({ ([ "name":"id_name1", "adjektiv":({"adjektiv1",...}), "nummer":2 ]), ... }) also anstatt einem einfachen Namen kann man das virtuelle Objekt auch durch ein Mapping genauer beschreiben. id_name ist hierbei entweder eine Id oder, falls(!) beim V-Item keine Ids angegeben wurden, der Name. Alternativ kann man bei change_v_item, delete_v_item und add_v_item als Pfad auch einfach ein (mit query_v_item oder query_all_v_items) abgefragtes(!) V-Item nehmen. VERWEISE: query_v_item, delete_v_item, change_v_item, set_v_item_master GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: query_all_v_items DEKLARATION: mapping *query_all_v_items() BESCHREIBUNG: Liefert ein Feld mit allen V-Items des Objektes. ACHTUNG: Es werden alle V-Items ungefiltert und unveraendert zurueckgegeben. Die Unsichtbarkeit der V-Items wird dabei also nicht beachtet, es werden also auch unsichtbare V-Items geliefert. Ebenso enthalten diese V-Items kein "environment"-Eintrag. Auch duerfen diese V-Items nicht veraendert werden, da das automatisch die V-Items im Raum mitaendert. Ordentliche V-Items ohne obige Einschraenkungen werden von query_full_v_items() geliefert. VERWEISE: query_full_v_items, query_v_item, add_v_item, set_v_item_master GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: delete_v_item DEKLARATION: void delete_v_item(*|mapping pfad) BESCHREIBUNG: Loescht das Mapping des virtuellen Objektes, das mit pfad gekennzeichnet ist. Wie der pfad aussehen muss steht unter 'add_v_item' VERWEISE: add_v_item, query_v_item, change_v_item GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: query_v_item DEKLARATION: varargs mapping query_v_item(*|mapping pfad, int flag) BESCHREIBUNG: Liefert das Mapping des virtuellen Objektes, das mit pfad gekennzeichnet ist. Der Pfad ist ein Array aus V-Item-Beschreibungen. Eine V-Item-Beschreibung ist entweder eine einfache ID oder ein Mapping mit folgenden moeglichen Eintraegen (wovon einzig "name" Pflicht ist): "name": Die ID des gesuchten V-Items. (Hat das V-Item einen Eintrag "id", so muss dies ein Element dieses Arrays sein, ansonsten muss es mit dem V-Item-Eintrag "name" uebereinstimmen.) "adjektiv": Ein Array aus den Adjektiven, die das V-Item haben soll. "nummer": Die Nummer des V-Items. BEISPIELE: ({ "tisch" }) - Einfach ein Tisch. ({ "tisch", "glas" }) - Ein Glas auf dem Tisch. ({ ([ "name": "tisch", "nummer": 2 ]) }) - Der 2. Tisch Als flag kann man folgende in /sys/v_item.h definierte Optionen, welche man auch mit dem bitweisen Oder kombinieren kann, angeben: VV_NO_ROOM_ENV Es wird dem V-Item kein "environment"-Eintrag angefuegt. Dies ist vor allem fuer interne Zwecke wichtig. VV_INVIS Das V-Item soll trotz V_INVIS-Unsichtbarkeit zurueckgeliefert werden. VERWEISE: add_v_item, delete_v_item, change_v_item, set_v_item_master GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: query_full_v_items DEKLARATION: mapping *query_full_v_items(int flag) BESCHREIBUNG: Liefert ein Array mit allen V-Items des Objektes, so wie sie auch von query_v_item() einzeln zurueckgeliefert werden. Als flag kann man folgende in /sys/v_item.h definierte Optionen angeben: VV_NO_ROOM_ENV Es wird dem aeusseren V-Item kein "environment"-Eintrag angefuegt. VV_INVIS Es sollen auch unsichtbare V-Items mitgeliefert werden. VV_FLAT Auch innere V-Items werden im Array aufgefuehrt. VERWEISE: query_v_item, add_v_item, query_all_v_items GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: change_v_item DEKLARATION: void change_v_item(mapping new_item, *|mapping pfad) BESCHREIBUNG: Mit Dieser Funktion kann man ein virtuelles Objekt veraendern. Man uebergibt ein Mapping, in dem die Eintraege enthalten sind, die man aendern moechte (z.B. "long"). Wie der pfad aussehen muss steht unter 'add_v_item' VERWEISE: add_v_item, delete_v_item, query_v_item GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: query_v_item_property DEKLARATION: mixed query_v_item_property(*|mapping path, string name [, mixed info]) BESCHREIBUNG: Fragt die Eigenschaft 'name' am virtuellen Objekt (beschrieben durch 'path') ab. Der Name sollte dabei als Define angegeben werden (fuer die Mudlib- Properties dazu includen). 'path' hat den gleichen Aufbaue wie bei add_v_item(), und kann ein abgefragtes V-Item sein. In 'info' koennen zusaetzliche Infos uebergeben werden, diese wird an alle Controller und an eine ggf. gesetzte Abfragefunktion uebergeben. VERWEISE: set, add, delete GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: set_v_item_property DEKLARATION: mixed set_v_item_property(*|mapping path, string name, mixed value) BESCHREIBUNG: Damit wird ein neuer Wert 'value' fuer die Eigenschaft 'name' am virtuellen Objekt 'path' gesetzt. VERWEISE: query, add, delete GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: add_v_item_property DEKLARATION: mixed add_v_item_property(*|mapping path, string name [, mixed key], value) BESCHREIBUNG: Falls die Eigenschaft 'name' ein Mapping ist, so kann man mit dieser Funktion einen neuen Eintrag key: value hinzufuegen. Falls sie ein Array ist, wird ein neues Element 'value' eingetragen. Ansonsten wird der Wert von 'value' zur bestehenden Eigenschaft addiert. VERWEISE: query, set, delete GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: delete_v_item_property DEKLARATION: mixed delete_v_item_property(*|mapping path, string name, mixed key|value) BESCHREIBUNG: Falls die Eigenschaft 'name' ein Mapping ist, so entfernt dieser Aufruf den Eintrag 'key'. Falls sie ein Array ist, wird ein Element 'value' entfernt. Bei allen anderen Datentypen und key == 0 wird die Property geloescht. Bei allen anderen Datentypen liefert der Aufruf einen Fehler, sofern keine spezielle delete-Funktion registriert wurde. VERWEISE: query, set, add GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: here DEKLARATION: string here(string str [, string name [, mapping &retob ]] ) BESCHREIBUNG: Mit here() kann man abfragen, ob dieses Objekt ein virtuelles Objekt definiert hat, das auf den String str passt. Wenn noch 'name' angegeben wurde, wird ueberprueft, ob der String das virtuelle Objekt beschreibt. Das gefundene virtuelle Objekt wird als Referenz in 'retob' zurueckgegeben. Der Returnwert ist 0 (fuer nicht gefunden) oder der Reststring wenn ein virtuelles Objekt gefunden wurde. Here() kann also zweierlei Aufgaben wahrnehmen. Zum Einen kann es pruefen, ob ein V-Item am Anfang eines Strings vorkommt. Zum anderen um zu schauen, ob und dann auch welches V-Item dieses Objektes gemeint wurde. BEISPIEL 1: Herausfinden, ob ein bestimmtes V-Item gemeint wurde. // Wenn der Befehl lautet 'gabruxle den krongs herum', // dann ist str="den krongs herum". int gabruxel_action(string str) { string rest; rest = here(str, "krongs"); // "krongs" ist dabei einer der IDs des V-Items // (alle anderen IDs werden trotzdem erkannt, es wird // empfohlen hier eine Special-ID zu nutzen). // // Wenn in 'str' das V-Item "krongs" gefunden wurde, // enthaelt 'rest' den Reststring "herum", anderenfalls 0. if(!rest) return notify_fail("Gabruxel wen?\n"); ... } BEISPIEL 2: Herausfinden, welches V-Item gemeint wurde. int gabruxel_action(string str) { string rest; mapping vitem; rest = here(str, 0, &vitem); if(!rest) return notify_fail("Gabruxel wen?\n"); // 'vitem' enthaelt nun das gefundene V-item, // 'rest' den Reststring hinter dem V-Item in 'str'. ... } VERWEISE: me, parse_com, query_v_item GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: set_v_item_master DEKLARATION: void set_v_item_master(string file_name | string *file_names) BESCHREIBUNG: Wenn mehrere Objekte immer dieselben V-Items haben sollen, kann man dies ueber den V-Item-Master machen. Danach sind alle V-Items auch in diesem Objekt vorhanden, allerdings kann man sie von dort aus nicht loeschen oder veraendern (delete_v_item, change_v_item). Sehr wohl kann man das allerdings im V-Item-Master machen, das heisst die Sache eignet sich prima, um beispielsweise Wetter-V-Items zu realisieren und spart darueberhinaus gerade bei solchen Sachen massenhaft Speicherplatz! Der V-Item-Master muss folgende Funktionen definieren: mixed *query_all_v_items() mapping query_v_item(mixed *path, int flag) Am einfachsten inherited man "/i/item/v_item" im V-Item-Master. BEISPIEL: Fuer die Domain Xyz existiert eine Wetterkontrolle /d/Xyz/wizard/weather.c, die gleichzeitig auch ein V-Item-Master ist. Diese haenge ich in meine Raeume ein, indem ich dort im create() irgendwo set_v_item_master( "/d/Xyz/wizard/weather"); reinschreibe. Vorzugsweise steht dies sogar einfach im Standard-Raum-Inherit fuer die Domain. Wenn ich jetzt 20 Raeume Buchenwald habe, der mit Straeuchern gespickt ist, dann lohnt sich schon folgendes: Ich schreibe mir einen eigenen V-Item-Master, naemlich einen, der die V-Items "buchen", "straeucher", "boden", "pilze" usw. definiert. Wo bleibt jetzt das Wetter? Ganz einfach: Ich setze meinem eigenen V-Item-Master /d/Xyz/wizard/weather als V-Item-Master und schon hat man sich eine Menge faul und unnuetz im Speicher herumliegender V-Item-Mappings gespart, aber einen lebendigen Wald und relativ leicht wartbare Files gewonnen. Man kann in einem v-item-master auch einen weiteren v-item-master setzen. Wenn man z.B. ein Gebiet hat, in dem es immer dieselben v-items gibt, und zusaetzlich noch das Wetter, dann macht man einen v-item-master, der als v-item-master den Wettermaster setzt. EINFACHERES BEISPIEL: Im v-item Master: inherit "/i/item/v_item"; void create() { add_v_item(([ "name":"vitem", "gender":"saechlich", "long":"Ein huebsches V_item. Es ist herrlich anzusehen." ])); } Und im Objekt, das diesen verwenden soll: void create() { [...] // Irgend ein Raum-setup set_v_item_master(FILENAME_DEINES_V_ITEM_MASTERS); // Obiges Objekt. } Falls dieser V-Item-Master selten verwendet wird, so koennte er sich automatisch aus dem Speicher entfernen: int clean_up(int arg) { destruct(this_object()); return 0; } Man kann dies auch nutzen, um speichersparrenderweise die V-Items nur im Blueprint zu speichern und diesen Blueprint bei allen Clones als V-Item-Master anzumelden: void create() { ... // Verschiedene Initialisierungen des create() if (clonep()) add_v_item_master(load_name()); else { // Alle V-Items hier anmelden: add_v_item( ([ ... ]) ); ... } } Suchpfade ("%wald") und relative Pfade ("../v_item_master/wald") sind zulaessig. Suchpfade suchen im Verzeichnisbaum abwaerts im Unterverzeichnis "v_item_master" und finden nicht das Objekt selber. VERWEISE: add_v_item, query_v_item, query_v_item_master, query_all_v_items, add_v_item_master, delete_v_item_master GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: query_v_item_master DEKLARATION: string *query_v_item_master() BESCHREIBUNG: Liefert den V-Item-Master dieses Objektes. VERWEISE: set_v_item_master GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: add_v_item_master DEKLARATION: void add_v_item_master(mixed file) BESCHREIBUNG: Fuegt einen oder mehrere V-Item-Master dem Objekt hinzu. Weitere Informationen dazu siehe set_v_item_master. VERWEISE: set_v_item_master, delete_v_item_master GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: delete_v_item_master DEKLARATION: void delete_v_item_master(mixed file) BESCHREIBUNG: Entfernt einen oder mehrere V-Item-Master aus dem Objekt. Weitere Informationen dazu siehe set_v_item_master. VERWEISE: set_v_item_master, add_v_item_master GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: set_share_v_items DEKLARATION: void set_share_v_items(int flag) BESCHREIBUNG: Mit dieser Funktion setzt man, ob alle nach dieser Funktion gesetzten v-items zwischen allen Clones dieses Objektes geshared werden sollen. Dies spart sehr viel Speicher, aber kann auch zu Problemen fuehren, denn danach kann man im Clone keine v-items mehr hinzufuegen bis man mit set_share_v_items(0) das sharen von v-items ausschaltet. Dasselbe Verhalten kann man uebrigens auch so erreichen: if (clonep()) add_v_item_master(load_name()); else { add_v_item(...); add_v_item(...); add_v_item(...); ... } VERWEISE: query_share_v_items, add_v_item, set_v_item_master GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: query_share_v_items DEKLARATION: int query_share_v_items() BESCHREIBUNG: Fragt ab, ob v-items geshared werden. VERWEISE: set_shared_v_item, add_v_item, set_v_item_master GRUPPEN: virtuell SOURCE: /i/item/v_item.c FUNKTION: modify_set_v_item_property DEKLARATION: void modify_set_v_item_property(mixed neuer_wert, string property_name, mixed alter_wert, object aufrufer, object item, mapping vitem) BESCHREIBUNG: modify_set_v_item_property wird im Objekt 'item' selbst und den zustaendigen Property-Mastern aufgerufen, wenn im V-Item 'vitem' die Property 'property_name' vom 'aufrufer' auf 'neuer_wert' gesetzt werden soll. 'neuer_wert' wird dabei als Referenz uebergeben und kann veraendert werden. Es wird zudem auch modify_set_v_item_property_ aufgerufen. VERWEISE: set_v_item_property, forbidden_set_v_item_property, notify_set_v_item_property GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: forbidden_set_v_item_property DEKLARATION: int forbidden_set_v_item_property(string property_name, mixed neuer_wert, mixed alter_wert, object aufrufer, object item, mapping vitem) BESCHREIBUNG: forbidden_set_v_item_property wird im Objekt 'item' selbst und den zustaendigen Property-Mastern aufgerufen, wenn im V-Item 'vitem' die Property 'property_name' vom 'aufrufer' auf 'neuer_wert' gesetzt werden soll. Liefert einer dieser Controller einen Wert != 0 zurueck, so wird diese Aenderung verboten. Es wird zudem auch forbidden_set_v_item_property_ aufgerufen. Die forbidden_set_v_item_property-Controller werden nach den modify_set_v_item_property-Controllern aufgerufen. VERWEISE: set_v_item_property, modify_set_v_item_property, notify_set_v_item_property GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: notify_set_v_item_property DEKLARATION: void notify_set_v_item_property(string property_name, mixed neuer_wert, mixed alter_wert, object aufrufer, object item, mapping vitem) BESCHREIBUNG: notify_set_v_item_property wird im Objekt 'item' selbst und den zustaendigen Property-Mastern aufgerufen, nachdem im V-Item 'vitem' die Property 'property_name' vom 'aufrufer' auf 'neuer_wert' gesetzt wurde. Es wird zudem auch notify_set_v_item_property_ aufgerufen. VERWEISE: set_v_item_property, modify_set_v_item_property, forbidden_set_v_item_property GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: modify_query_v_item_property DEKLARATION: void modify_query_v_item_property(mixed wert, string property_name, mixed info, object aufrufer, object item, mapping vitem) BESCHREIBUNG: modify_query_v_item_property wird im Objekt 'item' selbst und den zustaendigen Property-Mastern aufgerufen, wenn im V-Item 'vitem' die Property 'property_name' vom 'aufrufer' abgefragt wird. 'wert' enthaelt den potentiellen Rueckgabewert, wird dabei als Referenz uebergeben und kann veraendert werden. 'info' ist der optionale zweite Parameter vom query()-Aufruf. Es wird zudem auch modify_query_v_item_property_ aufgerufen. VERWEISE: query_v_item_property GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: modify_add_v_item_property DEKLARATION: void modify_add_v_item_property(mixed add_wert, string property_name, mixed key, mixed alter_wert, object aufrufer, object item, mapping vitem) BESCHREIBUNG: modify_add_v_item_property wird im Objekt 'item' selbst und den zustaendigen Property-Mastern bei einem Aufruf von add() im V-Item 'item' auf die Property 'property_name' von 'aufrufer' aufgerufen. 'key' und 'add_wert' sind dabei die Parameter vom add()-Aufruf. 'key' ist dabei unter Umstaenden nicht gesetzt (0). 'add_wert' wird per Referenz uebergeben und kann veraendert werden. 'alter_wert' enthaelt den vollstaendigen Wert der Property (also nicht nur den Wert, der 'key' zugeordnet ist). Es wird zudem auch modify_add_v_item_property_ aufgerufen. VERWEISE: add_v_item_property, forbidden_add_v_item_property, notify_add_v_item_property GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: forbidden_add_v_item_property DEKLARATION: int forbidden_add_v_item_property(string property_name, mixed key, mixed add_wert, mixed alter_wert, object aufrufer, object item, mapping vitem) BESCHREIBUNG: forbidden_add_v_item_property wird im Objekt 'item' selbst und den zustaendigen Property-Mastern bei einem Aufruf von add() im V-Item 'item' auf die Property 'property_name' von 'aufrufer' aufgerufen. 'key' und 'add_wert' sind dabei die Parameter vom add()-Aufruf. 'key' ist dabei unter Umstaenden nicht gesetzt (0). 'alter_wert' enthaelt den vollstaendigen Wert der Property (also nicht nur den Wert, der 'key' zugeordnet ist). Liefert einer dieser Controller einen Wert != 0 zurueck, so wird diese Operation verboten. Es wird zudem auch forbidden_add_v_item_property_ aufgerufen. Die forbidden_add_v_item_property-Controller werden nach den modify_add_v_item_property-Controllern aufgerufen. VERWEISE: add_v_item_property, modify_add_v_item_property, notify_add_v_item_property GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: notify_add_v_item_property DEKLARATION: void notify_add_v_item_property(string property_name, mixed key, mixed add_wert, mixed alter_wert, object aufrufer, object item, mapping vitem) BESCHREIBUNG: notify_add_v_item_property wird im Objekt 'item' selbst und den zustaendigen Property-Mastern bei einem Aufruf von add() im V-Item 'item' auf die Property 'property_name' von 'aufrufer' aufgerufen. 'key' und 'add_wert' sind dabei die Parameter vom add()-Aufruf. 'key' ist dabei unter Umstaenden nicht gesetzt (0). 'alter_wert' enthaelt den vollstaendigen Wert der Property (also nicht nur den Wert, der 'key' zugeordnet ist). Es wird zudem auch notify_add_v_item_property_ aufgerufen. VERWEISE: add_v_item_property, modify_add_v_item_property, forbidden_add_v_item_property GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: forbidden_delete_v_item_property DEKLARATION: int forbidden_delete_v_item_property(string property_name, mixed key, mixed alter_wert, object aufrufer, object item, mapping vitem) BESCHREIBUNG: forbidden_delete_v_item_property wird im Objekt 'item' selbst und den zustaendigen Property-Mastern bei einem Aufruf von delete() im V-Item 'item' auf die Property 'property_name' von 'aufrufer' aufgerufen. 'key' ist dabei der Parameter vom delete()-Aufruf. 'alter_wert' enthaelt den vollstaendigen Wert der Property (also nicht nur den Wert, der 'key' zugeordnet ist). Liefert einer dieser Controller einen Wert != 0 zurueck, so wird diese Operation verboten. Es wird zudem auch forbidden_delete_v_item_property_ aufgerufen. VERWEISE: delete_v_item_property, notify_delete_v_item_property GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: notify_delete_v_item_property DEKLARATION: void notify_delete_v_item_property(string property_name, mixed key, mixed alter_wert, object aufrufer, object item, mapping vitem) BESCHREIBUNG: notify_delete_v_item_property wird im Objekt 'item' selbst und den zustaendigen Property-Mastern bei einem Aufruf von delete() im V-Item 'item' auf die Property 'property_name' von 'aufrufer' aufgerufen. 'key' ist dabei dre Parameter vom delete()-Aufruf. 'alter_wert' enthaelt den vollstaendigen Wert der Property (also nicht nur den Wert, der 'key' zugeordnet ist). Es wird zudem auch notify_delete_v_item_property_ aufgerufen. VERWEISE: delete_v_item_property, forbidden_delete_v_item_property GRUPPEN: properties SOURCE: /i/item/v_item.c FUNKTION: set_koerperform DEKLARATION: void set_koerperform(string form) BESCHREIBUNG: Mit dieser Funktion setzt man die Koerperform des Lebewesens. Folgende Koerperformen sind moeglich: humanoid Mensch, Ork, Elf, ... vierbeiner Fliege, Hund, Katze, Baer, ... vogel Vogel, ... fisch Delphin, Hai, Wal, ... schlange Wurm, Schlange, ... insekt Fliege, Muecke, Kaefer, ... gegenstand Lebende Truhen, Steine, ... pflanze Baum, Blume, Unkraut, ... VERWEISE: query_koerperform, set_koerpergroesse, query_koerpergroesse GRUPPEN: monster SOURCE: /i/living/body.c FUNKTION: query_koerperform DEKLARATION: string query_koerperform() BESCHREIBUNG: Diese Funktion liefert die Koerperform des Lebewesens. VERWEISE: set_koerperform, set_koerpergroesse, query_koerpergroesse GRUPPEN: monster SOURCE: /i/living/body.c FUNKTION: set_koerpergroesse DEKLARATION: void set_koerpergroesse(int groesse) BESCHREIBUNG: Mit dieser Funktion setzt man die Koerpergroesse des Lebewesens. Folgende Koerpergroessen sind moeglich: 1: 0 cm bis 5 cm Fliege 2: 5 cm bis 30 cm Maus, Ratte 3: 30 cm bis 70 cm Katze 4: 70 cm bis 1,2 m Hund 5: 1,2 m bis 1,7 m Wolf 6: 1,7 m bis 2,2 m Mensch 7: 2,2 m bis 3,7 m Baer 8: 3,7 m bis 7 m Elefant 9: 7 m bis 15 m kleiner Drache 10: groesser 15 m grosser Drache VERWEISE: set_koerperform, query_koerperform, query_koerpergroesse GRUPPEN: monster SOURCE: /i/living/body.c FUNKTION: query_koerpergroesse DEKLARATION: int query_koerpergroesse() BESCHREIBUNG: Diese Funktion liefert die Koerpergroesse des Lebewesens. VERWEISE: set_koerpergroesse, set_koerperform, query_koerperform GRUPPEN: monster SOURCE: /i/living/body.c FUNKTION: set_abilities DEKLARATION: void set_abilities(int flag) BESCHREIBUNG: Mit dieser Funktion setzt man die Faehigkeiten eines Lebewesens. Folgende Faehigkeiten sind moeglich: MD_AB_WALK (1): laufen Kann sich an Land fortbewegen MD_AB_SWIM (2): schwimmen Kann ohne AP-Abzug schwimmen MD_AB_FLY (4): fliegen Kann fliegen Die Faehigkeiten werden mit einem Bitweise ODER verknuepft. Die Konstanten dazu sind in monster_master.h definiert. VERWEISE: query_abilities GRUPPEN: monster SOURCE: /i/living/body.c FUNKTION: query_abilities DEKLARATION: int query_abilities() BESCHREIBUNG: Diese Funktion liefert die Faehigkeiten des Lebewesens. VERWEISE: set_abilities GRUPPEN: monster SOURCE: /i/living/body.c FUNKTION: set_race DEKLARATION: void set_race(string rasse) BESCHREIBUNG: Damit setzt man die Rasse des Lebewesen. Es wird empfohlen anstatt dieser Funktion die Funktion initialize zu verwenden, damit das Lebewesen gleich fuer die Rasse korrekte Werte erhaelt. VERWEISE: query_race, initialize GRUPPEN: monster SOURCE: /i/living/body.c FUNKTION: query_race DEKLARATION: string query_race() BESCHREIBUNG: Diese Funktion liefert die Rasse dieses Lebewesens zurueck. VERWEISE: initialize GRUPPEN: monster SOURCE: /i/living/body.c FUNKTION: exec_command DEKLARATION: int exec_command(string befehl, [mixed argument, ...]) BESCHREIBUNG: exec_command laesst das Monster ein Kommando ausfuehren. Ist ein einzelner String befehl angegeben, so wird dieser direkt als Kommando ausgefuehrt, genau wie bei do_command. Beispiel: exec_command("nimm alles") Sind mehrere Befehlsteile angegeben, so wird das auszufuehrende Kommando aus den Befehlsteilen zusammengesetzt. Befehlsteile koennen sein: - ein String: der String wird an das Kommando angehaengt. - ein Objekt: eine Id, die das Objekt eindeutig bestimmt, wird an das Kommando angehaengt. - ein Feld von Objekten: der String "alle" und eine Id, die alle Objekte eindeutig bestimmt wird an das Kommando angehaengt. Nach Ausfuehrung des Kommandos sind die internen Ids nicht mehr verfuegbar. Beispiele: exec_command("toete", ork) -> Ork bekommt Id "##id1", Kommando ist: "toete ##id1" exec_command("lege", ob, "in", con) -> ob bekommt Id "##id1", con bekommt Id "##id2", Kommando ist: "lege ##id1 in ##id2" exec_command("nimm", ({ ob1, ob2 })) -> ob1 und ob2 bekommen Id "##id1", Kommando ist: "nimm alle ##id1" exec_command("nimm", ({ ob1, ob2 }), "aus", con) -> ... Die exec_command-Variante mit mehreren Befehlsteilen sollte immer dann verwendet werden, wenn mit dem Kommando andere Objekte angesprochen werden sollen. Sie behebt die Probleme mit den Ids, die bei do_command entstehen, wenn man Objekte ansprechen will. Kommandos wie do_command("toete "+ob->query_real_name()) (*schlecht*) do_command("nimm "+ob->query_name()) (*schlecht*) do_command("winke "+ob->query_id()[0]) (*schlecht*) - koennen versagen wenn die ermittelte Id eine Leerstellen oder Grossbuchstaben enthalten - koennen falsche Objekte ansprechen, wenn mehrere Objekte mit gleicher Id im Raum sind. - funtionieren teilweise nur mit Spielern (query_real_name) oder koennen Probleme machen, wenn die Objekte verschattet sind - produzieren falsche Ausgaben (bei Seele, z. B. winke), wenn Id nicht mehr anwesend ist. ACHTUNG: Wenn exec_command in einem Spieler aufgerufen wird, sollte dem Befehl ein \\ vorangestellt werden, damit keine Kuerzel erwischt werden. VERWEISE: do_command, command GRUPPEN: monster SOURCE: /i/living/command.c FUNKTION: notify_killed DEKLARATION: void notify_killed(object wer, object moerder, object leiche, mapping infos) BESCHREIBUNG: Stirbt ein Lebewesen und ist der Moerder bekannt (d.h. wurde ein Objekt als 1. Parameter von die() uebergeben), so wird moerder->notify("killed", wer, moerder, leiche) aufgerufen. "wer" ist der Gestorbene, "moerder" die Ursache und "leiche" die uebriggebliebene Leiche. "infos" ist das Mapping, welches die() und add_hp() uebergeben wurden. Ist ein Objekt beim Moerder fuer "notify_killed" (mittels moerder->add_controller("notify_died", object); ) angemeldet, so wird dann in diesem Objekt die Funktion notify_killed(wer, moerder, leiche) aufgerufen. VERWEISE: add_controller, notify, notify_died, notify_death GRUPPEN: spieler, monster SOURCE: /i/living/die.c FUNKTION: notify_died DEKLARATION: void notify_died(object wer, object leiche, mapping infos) BESCHREIBUNG: Stirbt ein Lebewesen, wird diese Funktion in ihm und seiner Umgebung aufgerufen. "wer" ist der Gestorbene, "leiche" seine uebriggebliebene Leiche. "infos" ist das Mapping, welches die() und add_hp() uebergeben wurden. Ist ein Objekt beim Gestorbenen oder dem Raum als Controller fuer "notify_died" angemeldet (lebewesen_bzw_raum->add_controller("notify_died", object); ), so wird dann in diesem Objekt die Funktion notify_died(wer, leiche, infos) aufgerufen. VERWEISE: forbidden, notify, notify_killed, notify_death GRUPPEN: spieler, monster SOURCE: /i/living/die.c FUNKTION: query_corpse DEKLARATION: object query_corpse(object living, mapping infos) BESCHREIBUNG: Diese Funktion wird beim Tod eines Lebewesens aufgerufen, um eine Leiche zu erzeugen. Als Parameter wird das gestorbene Lebewesen und das Mapping, welches bei add_hp() und die() angegeben wurde, uebergeben. In die Leiche werden dann die Objekte bewegt, wenn man Objekte in die Leiche bewegen kann, ansonsten werden sie inden Raum gelegt. Dann werden die Wiederbelebungs-Daten in der Leiche gesetzt, um sie evtl. wiederbeleben zu koennen. Die Funktion wird zuerst im dead_ob aufgerufen, und dann im Lebewesen selbst. VERWEISE: set_dead_ob, set_no_resurrection, set_resurrection_info GRUPPEN: spieler, monster SOURCE: /i/living/die.c FUNKTION: die DEKLARATION: static varargs void die(mapping infos) BESCHREIBUNG: Damit stirbt das Monster. Das uebergebene Mapping hat die gleichen Eintraege wie das von add_hp. VERWEISE: add_hp, query_corpse, set_dead_ob, notify_died, set_no_resurrection, set_resurrection_info GRUPPEN: spieler, monster SOURCE: /i/living/die.c FUNKTION: set_no_resurrection DEKLARATION: void set_no_resurrection(string warum) BESCHREIBUNG: Damit kann - fuer ein (lebendiges) Wesen gesetzt werden, dass seine Leiche nicht wiederbelebt werden kann, wenn es gestorben ist, - fuer eine Leiche (also wenn das Monster bereits tot ist oder aber es das Monster nie gegeben hat, weil die Leiche geclont worden ist, ohne dass es jemals ein Monster gab), verboten werden, dass die Leiche wiederbelebt wird. Der uebergebene Parameter ist ein string mit der Begruendung dafuer, VERWEISE: query_no_resurrection, query_resurrection_info GRUPPEN: spieler, monster SOURCE: /i/living/die.c FUNKTION: query_no_resurrection DEKLARATION: string query_no_resurrection() BESCHREIBUNG: Liefert 0, falls ein Monster bzw. eine Leiche wiederbelebt werden darf, andernfalls liefert es eine Begruendung dafuer, warum das Monster, wenn es einmal gestorben ist, bzw. die Leiche, nicht wiederbelebt werden darf. VERWEISE: set_no_resurrection, query_resurrection_info GRUPPEN: spieler, monster SOURCE: /i/living/die.c FUNKTION: query_hear_msg DEKLARATION: string query_hear_msg() BESCHREIBUNG: Diese Funktion wird in einem Objekt aufgerufen, wenn this_player() an dem Objekt horcht. Liefert diese Funktion 0 zurueck, wird die Standardmeldung " horcht an ." generiert, ansonsten wird diese Meldung umgebrochen und ausgegeben. VERWEISE: set_noise, query_noise GRUPPEN: grundlegendes SOURCE: /i/living/ears.c FUNKTION: P_SOUND_ACTIONS DEKLARATION: Liste der P_SOUND_ACTIONS fuer das Lauschen BESCHREIBUNG: Ueberschreiben des Tons, den jemand lauschen kann. raum->add(P_SOUND_ACTIONS,"lauschen","Basis/tuer_anklopfen.wav"); ob->add(P_SOUND_ACTIONS,"lauschen","Basis/tuer_anklopfen.wav"); v_item[P_SOUND_ACTIONS] = (["lauschen","Basis/tuer_anklopfen.wav"]) GRUPPEN: grundlegendes SOURCE: /i/living/ears.c FUNKTION: forbidden_hear DEKLARATION: int forbidden_hear(mixed what, object who) BESCHREIBUNG: Bevor am Objekt (kann auch ein Raum sein) oder Mapping (v-item) what vom Lebewesen who gehorcht werden kann, wird who->forbidden("hear", what) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann nicht am Objekt gelauscht werden. Die Funktion forbidden ruft in allen mit who->add_controller("forbidden_hear", other) angemeldeten Objekten other die Funktionen other->forbidden_hear(what, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und es darf nicht gelauscht werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_hear oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch what->forbidden("hear_me", who) aufgerufen VERWEISE: forbidden, notify, notify_hear GRUPPEN: spieler, monster, nase SOURCE: /i/living/ears.c FUNKTION: forbidden_hear_me DEKLARATION: int forbidden_hear_me(object who, mixed what) BESCHREIBUNG: Bevor am Objekt oder Mapping (v-item) what vom Lebewesen who gehorcht werden kann, wird what->forbidden("hear_me", who) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann am Objekt nicht gelauscht werden. Die Funktion forbidden ruft in allen mit what->add_controller( "forbidden_hear_me", other) angemeldeten Objekten other die Funktionen other->forbidden_hear_me(who, what) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und es darf nicht gelauscht werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_hear_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("hear", what) aufgerufen. VERWEISE: forbidden, notify, notify_hear GRUPPEN: spieler, monster, nase SOURCE: /i/living/ears.c FUNKTION: forbidden_hear_here DEKLARATION: int forbidden_hear_here(object who, mixed what) BESCHREIBUNG: Bevor am Objekt oder Mapping (v-item) what vom Lebewesen who gehorcht werden kann, wird im Raum room->forbidden("hear_here", who, what) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann am Objekt nicht gelauscht werden. Die Funktion forbidden ruft in allen mit room->add_controller( "forbidden_hear_here", other) angemeldeten Objekten other die Funktionen other->forbidden_hear_here(who, what) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und es darf nicht gelauscht werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_hear_here oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("hear", what) und what->forbidden("hear_me", who) aufgerufen. VERWEISE: forbidden, notify, notify_hear GRUPPEN: spieler, monster, nase SOURCE: /i/living/ears.c FUNKTION: notify_hear DEKLARATION: void notify_hear(mixed what, object who) BESCHREIBUNG: Nachdem am Objekt (kann auch ein Raum sein) oder Mapping (v-item) what vom Lebewesen who gehorcht wurde, wird who->notify("hear", what) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_hear", other) angemeldeten Objekten other die Funktionen other->notify_hear(what, who) auf. Sowohl who als auch other haben dann die Moeglichkeit, auf das Lauschen von what zu reagieren. Bemerkung: Es wird auch what->notify("hear_me", who) aufgerufen. VERWEISE: forbidden, notify, forbidden_hear GRUPPEN: spieler, monster, nase SOURCE: /i/living/ears.c FUNKTION: notify_hear_me DEKLARATION: void notify_hear_me(object who, mixed what) BESCHREIBUNG: Nachdem am Objekt oder Mapping (v-item) what vom Lebewesen who gehorcht wurde, wird what->notify("hear_me", who) aufgerufen. Die Funktion notify ruft in allen mit what->add_controller("notify_hear_me", other) angemeldeten Objekten other die Funktionen other->notify_hear_me(who, what) auf. Sowohl what als auch other haben dann die Moeglichkeit, auf das Lauschen von what zu reagieren. Bemerkung: Es wird auch who->notify("hear", what) aufgerufen. VERWEISE: forbidden, notify, forbidden_hear GRUPPEN: spieler, monster, nase SOURCE: /i/living/ears.c FUNKTION: notify_hear_here DEKLARATION: void notify_hear_here(object who, mixed what) BESCHREIBUNG: Nachdem am Objekt oder Mapping (v-item) what vom Lebewesen who gehorcht wurde, wird im Raum room->notify("hear_here", who, what) aufgerufen. Die Funktion notify ruft in allen mit room->add_controller("notify_hear_here", other) angemeldeten Objekten other die Funktionen other->notify_hear_here(who, what) auf. Sowohl what als auch other haben dann die Moeglichkeit, auf das Lauschen von what zu reagieren. Bemerkung: Es wird auch who->notify("hear", what) und what->notify("hear_me", who) aufgerufen. VERWEISE: forbidden, notify, forbidden_hear GRUPPEN: spieler, monster, nase SOURCE: /i/living/ears.c FUNKTION: query_eye_level DEKLARATION: int query_eye_level() BESCHREIBUNG: query_eye_level liefert den Bonus eines Lebewesens (Monster/Spieler), der auf alle Lichttests aufaddiert wird. Bei normalen Spielern und Monstern ist der eye_level Null. Eine Wert groesser Null bedeutet besser sehen, ein Wert kleiner Null schlechter sehen. VERWEISE: set_eye_level, describe_room GRUPPEN: licht, monster, spieler, augen SOURCE: /i/living/eyes.c FUNKTION: set_eye_level DEKLARATION: void set_eye_level(int level) BESCHREIBUNG: set_eye_level setzt den Bonus eines Lebewesens (Monster/Spieler), der auf alle Lichttests aufaddiert wird. Bei normalen Spielern und Monstern ist der eye_level Null. Ein Wert groesser Null bedeutet besser sehen, ein Wert kleiner Null schlechter sehen. VERWEISE: query_eye_level, describe_room GRUPPEN: licht, monster, spieler, augen SOURCE: /i/living/eyes.c FUNKTION: query_visible_in_the_dark DEKLARATION: int query_visible_in_the_dark() BESCHREIBUNG: Wenn diese Funktion eines Objektes einen Wert != 0 liefert, so kann man das Objekt betrachten, auch wenn es eigentlich zu dunkel dafuer ist. VERWEISE: can_see, query_eye_level, query_light, query_obvious GRUPPEN: licht, monster, spieler, augen SOURCE: /i/living/eyes.c FUNKTION: can_see DEKLARATION: int can_see(object ob) BESCHREIBUNG: Liefert 1, wenn das Living das Objekt 'ob' sehen kann. Dies ist der Fall, wenn es fuer den Spieler hell genug ist. Ansonsten wird 0 zurueckgeliefert. VERWEISE: query_eye_level, query_light, query_obvious GRUPPEN: licht, monster, spieler, augen SOURCE: /i/living/eyes.c FUNKTION: cannot_see DEKLARATION: string cannot_see(object ob) BESCHREIBUNG: Liefert 0, falls der Spieler das Objekt 'ob' sehen kann. Ansonsten wird ein umgebrochener String geliefert, der beschreibt, warum der Spieler das Objekt nicht sehen kann. VERWEISE: can_see GRUPPEN: licht, monster, spieler, augen SOURCE: /i/living/eyes.c FUNKTION: query_room_description DEKLARATION: varargs string query_room_description(object room, int flag, mapping attributes) BESCHREIBUNG: query_room_description liefert eine volle Beschreibung des Raumes room, also mit Auflistung aller Sichtbaren Ausgaenge und aller sichtbaren Objekte im Raum. Dabei wird NICHT beachtet, ob es in dem Raum hell ist oder nicht. Ausserdem wird auch die Sehkraft des Monsters oder Spielers, in dem query_room_description aufgerufen wird, nicht beachtet. Sollen Licht- und Sichtverhaeltnisse beruecksichtigt werden, muss describe_room oder describe_current_room verwendet werden. Mit Flag kann man festlegen, was genau gesehen wird. Mit den in eyes.h definierten defines, die verodert werden koennen, sieht das so aus: EYE_NO_EXITS: die Liste der Ausgaenge soll fehlen, EYE_NO_EXIT_VIEW: nicht in EXIT_VIEW-Ausgaenge schauen, EYE_NO_CONTENTS: die Liste des Inhalts soll fehlen, EYE_NO_DESCRIPTION: die Raumbeschreibung soll fehlen, EYE_FORCE_LONG: trotz gesetzter Kurzbeschreibung in den Augen soll die Lange Beschreibung des Raumes geliefert werden, EYE_DARK: EYE_FORCE_DARK: erzwinge Beschreibung, als ob es dunkel waere, EYE_FORCE_LIGHT: erzwinge Beschreibung, als ob es hell waere (sollte nicht mit EYE_FORCE_DARK kombiniert werden) EYE_SHOW_ME: auch das Lebewesen, welches schaut, selber mit auflisten. Um mehrere Optionen gleichzeitig zu verwenden, muss sie logisch oder verknuepfen. Flag kann weggelassen werden. In attributes (kann 0 sein) kann man Attribute fuer send_message uebergeben. Beispiel: Wenn monty ein Objektpointer auf Monty ist, liefert monty->query_room_description(touch("/w/monty/workroom"), EYE_FORCE_LONG|EYE_NO_CONTENTS|EYE_NO_EXITS) den String "Du befindest Dich in Montys Arbeitszimmer. Die gesamte "+ "Nordwand und\nund ein Teil der Westwand werden von einem Deckenhohen"+ ..... "nach westen gelangt man\nin den Rest von Montys Wohnung. Nach oben "+ "kann man in Montys Waffenkammer gehen.\n" zurueck, also ohne Ausgaenge und ohne enthaltene Objekte, egal, ob Monty seine Augen auf Kurzbeschreibungen eingestellt hat oder nicht. VERWEISE: describe_room, describe_current_room, query_additional_room_description GRUPPEN: licht, monster, spieler, augen SOURCE: /i/living/eyes.c FUNKTION: query_additional_room_description DEKLARATION: string query_additional_room_description(object room, int flag) BESCHREIBUNG: Diese Funktion wird im Lebewesen selber aufgerufen, wenn dieses den Raum 'room' betrachtet, um zum Beispiel Shadows die Moeglichkeit zu geben, der aktuellen Raumbeschreibung etwas hinzuzufuegen. 'flag' kann die gleichen Werte wie bei query_room_description annehmen. VERWEISE: query_room_description, describe_room GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: describe_room DEKLARATION: varargs string describe_room(object room, int flag, mapping attributes) BESCHREIBUNG: Verwendet query_room_description (siehe dort), um die Beschreibung des Raumes room zurueckzuliefern, beachtet dabei aber Licht- und Sichtverhaeltnisse. Flag kann weggelassen werden, Verwendung von Flag und Beispiel siehe bei query_room_description. In attributes (kann 0 sein) kann man Attribute fuer send_message uebergeben. VERWEISE: query_room_description, describe_current_room GRUPPEN: licht, spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: describe_current_room DEKLARATION: varargs void describe_current_room(int flag) BESCHREIBUNG: Verwendet query_room_description (siehe dort), um die Beschreibung des Raumes zurueckzuliefern, in dem sich der Spieler (oder das Monster) im Moment befindet. Licht- und Sichtverhaeltnisse werden beachtet. Flag kann weggelassen werden, Verwendung von Flag und Beispiel siehe bei query_room_description. VERWEISE: query_room_description, describe_room GRUPPEN: licht, spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: query_contents DEKLARATION: string query_contents(int flags, object viewer) BESCHREIBUNG: Diese Funktion kann definiert werden, um eine alternative Beschreibung des Inhalts auszugeben. Sie wird auch bei nicht-Containern ausgewertet. flags ist eine Bitmaske mit derzeit folgenden Bits (Defines in eyes.h): CONTENTS_SHOW_INVIS Unsichtbare Gegenstaende sollen angezeigt werden. CONTENTS_SHOW_CONTENTS Es sollte eine tiefergehende Anzeige erfolgen. (Wenn 'mustere' statt 'betrachte' verwendet wurde.) Diese Funktion sollte einen bereits umgebrochenen Text zurueckliefern. Liefert diese Funktion 0 zurueck, so wird die Standardanzeige ausgegeben. Es muss damit gerechnet werden, dass viewer null ist. VERWEISE: query_long, extra_look, query_object_description, query_obvious GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: query_object_description DEKLARATION: string query_object_description(mixed ob, int flags) BESCHREIBUNG: Liefert die Beschreibung eines Objektes zurueck, so wie der Spieler oder das Monster das Objekt sieht. Dabei wird beruecksichtigt, ob das Objekt ein offener Container ist (und in diesem Fall, ob was drin ist), wenn es lebt, ob ein extra_look gesetzt ist, wenn es nicht lebt, ob es schwer ist usw... Das angegeben Objekt darf ein object, ein mapping (v_item!), oder alles andere sein, Erfolg ist allerdings dann nicht zu erwarten :-). Licht- und Sichtverhaeltnisse werden nicht beachtet. flags ist eine Bitmaske mit derzeit folgenden Bits (Defines in eyes.h): CONTENTS_SHOW_INVIS Unsichtbare Gegenstaende sollen angezeigt werden. CONTENTS_SHOW_CONTENTS Es sollte eine tiefergehende Anzeige erfolgen. Also z.B. auch der Inhalt. (Wenn 'mustere' statt 'betrachte' verwendet wurde.) VERWEISE: query_long, extra_look, query_transparent, query_contents, query_obvious GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: examine_object DEKLARATION: varargs int examine_object(string str, int flags, closure message) BESCHREIBUNG: Diese Funktion implementiert den Betrachte-Befehl. Sie uebernimmt das Parsen des Objekts der Begierde und fuehrt ein Betrachten anhand von aus. Flags kann dabei folgende Werte (Oder-verknuepft) haben: CONTENTS_SHOW_INVIS: Unsichtbare Gegenstaende im Inventar sollen gezeigt werden. (Nur fuer Goettertools) CONTENTS_SHOW_CONTENTS: Nicht offensichtliche Gegenstaende im Inventar sollen gezeigt werden (entspricht dem Mustern). LOOK_SHORT: Eine Kurzbeschreibung (ohne Long und Inventar) soll ausgegeben werden. LOOK_COST: Die ZP-Kosten fuer das Mustern sollen abgezogen werden. Als dritter Parameter kann optional eine Closure zur Meldungsausgabe angegeben werden. Die Closure erhaelt als den Spieler als 1. Parameter und den betrachteten Gegenstand (Object oder V-Item) als 2. Parameter und soll alle Meldungen ausgeben. Falls die Closure nicht angegeben wurde, werden die Standardmeldungen erzeugt. Die Funktion liefert 1, wenn das Befehl erfolgreich geparst werden konnte. Ansonsten 0, dann wird eine notify_fail-Meldung gesetzt. VERWEISE: query_object_description, query_long, query_contents, query_obvious GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: query_read_msg DEKLARATION: string query_read_msg() BESCHREIBUNG: Diese Funktion wird in einem Objekt aufgerufen, wenn this_player() das Objekt zu lesen beginnt. Liefert sie 0 zurueck, wird eine Standardmeldung generiert, ansonsten wird diese Meldung an alle anderen im Raum gesendet. VERWEISE: set_read, query_read GRUPPEN: grundlegendes SOURCE: /i/living/eyes.c FUNKTION: query_look_msg DEKLARATION: string query_look_msg() BESCHREIBUNG: Diese Funktion wird in einem Objekt aufgerufen, wenn this_player() das Objekt ansieht. Falls es Nacht ist, wird sie nur aufgerufen, wenn query_look_msg_night() 0 lieferte (z.B. weil sie nicht existiert). Liefert diese Funktion 0 zurueck, wird die Standardmeldung " schaut an." generiert. VERWEISE: query_look_msg_night, set_long, query_long GRUPPEN: grundlegendes SOURCE: /i/living/eyes.c FUNKTION: query_look_msg_night DEKLARATION: string query_look_msg_night() BESCHREIBUNG: Diese Funktion wird in einem Objekt aufgerufen, wenn this_player() das Objekt Nachts ansieht. Liefert es 0, so wird die Meldung von query_look_msg oder, falls diese auch 0 ist, die Standardmeldung ausgegeben. Anderenfalls erhalten alle im Raum die zurueckgelieferte Meldung. VERWEISE: query_look_msg, set_long, query_long GRUPPEN: grundlegendes SOURCE: /i/living/eyes.c FUNKTION: query_obvious DEKLARATION: int query_obvious() BESCHREIBUNG: Liefert ein Gegenstand beim Aufruf von query_obvious einen von 0 verschiedenen Wert so wird der Gegenstand beim Betrachten eines Lebewesens angezeigt, auch wenn er weder angezogen noch gefuehrt ist. Sinnvoll ist dies bei allen Gegenstaenden, die so auffaellig sind, dass man sie beim Betrachten sieht wie Leitern oder grosse Kisten, die man mit sich rumtraegt. VERWEISE: query_contents, query_object_description GRUPPEN: monster, spieler, augen SOURCE: /i/living/eyes.c FUNKTION: notify_look DEKLARATION: void notify_look(mixed what, object who) BESCHREIBUNG: Nachdem das Lebewesen 'who' das Objekt, V-item oder Raum(!) what betrachtet hat, wird notify_look(what, who) an allen bei who angemeldeten Controllern aufgerufen. VERWEISE: notify, notify_look_me, notify_look_here GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: notify_look_me DEKLARATION: void notify_look_me(object who, mixed what) BESCHREIBUNG: Nachdem das Lebewesen 'who' das Objekt, V-item oder Raum(!) what betrachtet hat, wird notify_look_me(who, what) an allen bei what angemeldeten Controllern aufgerufen. VERWEISE: notify, notify_look, notify_look_here GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: notify_look_here DEKLARATION: void notify_look_here(object who, mixed what) BESCHREIBUNG: Nachdem das Lebewesen 'who' das Objekt, V-item oder Raum(!) what betrachtet hat, wird notify_look_here(who, what) an allen im Raum von who angemeldeten Controllern aufgerufen. VERWEISE: notify, notify_look, notify_look_me GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: notify_read DEKLARATION: void notify_read(mixed what, object who) BESCHREIBUNG: Nachdem das Lebewesen 'who' das Objekt oder V-item what zu lesen begonnen hat, wird notify_read(what, who) an allen bei who angemeldeten Controllern aufgerufen. VERWEISE: notify, notify_read_me, notify_read_here GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: notify_read_me DEKLARATION: void notify_read_me(object who, mixed what) BESCHREIBUNG: Nachdem das Lebewesen 'who' das Objekt oder V-item what zu lesen begonnen hat, wird notify_read_me(who, what) an allen bei what angemeldeten Controllern aufgerufen. VERWEISE: notify, notify_read, notify_read_here GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: notify_read_here DEKLARATION: void notify_read_here(object who, mixed what) BESCHREIBUNG: Nachdem das Lebewesen 'who' das Objekt oder V-item what zu lesen begonnen hat, wird notify_read_here(who, what) an allen im Raum von who angemeldeten Controllern aufgerufen. VERWEISE: notify, notify_read, notify_read_me GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: forbidden_look DEKLARATION: int forbidden_look(mixed what, object who) BESCHREIBUNG: Bevor das Lebewesen 'who' das Objekt, V-item oder Raum(!) what betrachten will, wird forbidden_look(what, who) an allen bei who angemeldeten Controllern abgefragt. Sobald einer der aufgerufenen Funktionen einen Wert ungleich 0 zurueckliefert, kann what nicht betrachtet werden. Fuer die Ausgabe einer Meldung an das Lebewesen who hat der jeweilige Controller zu sorgen. VERWEISE: forbidden, forbidden_look_me, forbidden_look_here GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: forbidden_look_me DEKLARATION: int forbidden_look_me(object who, mixed what) BESCHREIBUNG: Bevor das Lebewesen 'who' das Objekt, V-item oder Raum(!) what betrachten will, wird forbidden_look_me(who, what) an allen bei what angemeldeten Controllern abgefragt. Sobald einer der aufgerufenen Funktionen einen Wert ungleich 0 zurueckliefert, kann what nicht betrachtet werden. Fuer die Ausgabe einer Meldung an das Lebewesen who hat der jeweilige Controller zu sorgen. VERWEISE: forbidden, forbidden_look, forbidden_look_here GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: forbidden_look_here DEKLARATION: int forbidden_look_here(object who, mixed what) BESCHREIBUNG: Bevor das Lebewesen 'who' das Objekt, V-item oder Raum(!) what betrachten will, wird forbidden_look_here(who, what) an allen im Raum von who angemeldeten Controllern abgefragt. Sobald einer der aufgerufenen Funktionen einen Wert ungleich 0 zurueckliefert, kann what nicht betrachtet werden. Fuer die Ausgabe einer Meldung an das Lebewesen who hat der jeweilige Controller zu sorgen. VERWEISE: forbidden, forbidden_look, forbidden_look_me GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: forbidden_read DEKLARATION: int forbidden_read(mixed what, object who) BESCHREIBUNG: Bevor das Lebewesen 'who' das Objekt oder V-item what lesen will, wird forbidden_read(what, who) an allen bei who angemeldeten Controllern abgefragt. Sobald einer der aufgerufenen Funktionen einen Wert ungleich 0 zurueckliefert, kann what nicht gelesen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who hat der jeweilige Controller zu sorgen. VERWEISE: forbidden, forbidden_read_me, forbidden_read_here GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: forbidden_read_me DEKLARATION: int forbidden_read_me(object who, mixed what) BESCHREIBUNG: Bevor das Lebewesen 'who' das Objekt oder V-item what lesen will, wird forbidden_read_me(who, what) an allen bei what angemeldeten Controllern abgefragt. Sobald einer der aufgerufenen Funktionen einen Wert ungleich 0 zurueckliefert, kann what nicht gelesen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who hat der jeweilige Controller zu sorgen. VERWEISE: forbidden, forbidden_read, forbidden_read_here GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: forbidden_read_here DEKLARATION: int forbidden_read_here(object who, mixed what) BESCHREIBUNG: Bevor das Lebewesen 'who' das Objekt oder V-item what lesen will, wird forbidden_read_here(who, what) an allen im Raum von who angemeldeten Controllern abgefragt. Sobald einer der aufgerufenen Funktionen einen Wert ungleich 0 zurueckliefert, kann what nicht gelesen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who hat der jeweilige Controller zu sorgen. VERWEISE: forbidden, forbidden_read, forbidden_read_me GRUPPEN: spieler, monster, augen SOURCE: /i/living/eyes.c FUNKTION: query_hp_string DEKLARATION: string query_hp_string() BESCHREIBUNG: Liefert einen Text (mit abschliessendem Zeilenumbruch), welcher die aktuelle Ausdauer des Monsters beschreibt, zurueck. VERWEISE: query_long GRUPPEN: spieler, monster SOURCE: /i/living/face.c FUNKTION: T_LISTE DEKLARATION: Liste der T-Defines in Lebewesen BESCHREIBUNG: Vordefinierte Bedingungen: - T_HAS_VICTIMS Der Spieler ist Moerder. - T_HAS_SCARS Der Spieler hat Narben. - T_HAS_PROTECTEE Das Lebewesen beschuetzt jemanden. - T_HAS_PROTECTORS Das Lebewesen wird von jemanden beschuetzt. Vordefinierte Texte: - T_VICTIM_TEXT Ein Text, der ein (M) beschreibt. - T_SCAR_TEXT Die Aufzaehlung der Narben. - T_HP_TEXT Wie fit das Monster ist. - T_PROTECTEE_TEXT Wen das Lebewesen beschuetzt. - T_PROTECTORS_TEXT Von wem das Lebewesen beschuetzt wird. Hinweise fuer die Meldungsgeneration: - T_HAS_SCAR_TEXT Keine eigene Narbenbeschreibung. - T_HAS_HP_TEXT Keine eigene Meldung ueber die Ausdauer. - T_HAS_PROTECTEE_TEXT Keine eigene Beschuetzensmeldung - T_HAS_PROTECTORS_TEXT Keine eigene Beschuetzermeldung. GRUPPEN: spieler, monster SOURCE: /i/living/face.c FUNKTION: extra_look DEKLARATION: string extra_look() BESCHREIBUNG: Diese Funktion wird von query_extra_look() des umgebenden Objektes aufgerufen falls dieses ein Lebewesen ist, wenn die Augen eines anderen Lebewesens dieses betrachten. query_extra_look() ruft extra_look() also in jedem Objekt auf, das ein Lebewesen (Spieler/Monster) bei sich traegt, wenn es angeschaut wird. Wenn ein Objekt etwas anderes als 0 zurueckliefert, wird der String in der langen Beschreibung des Besitzers in einer eigenen Zeile ausgegeben (und bei Ueberlaenge umgebrochen, ein "\n" ist also nicht noetig). Kein Objekt besitzt diese Funktion von Hause aus, wenn Du einen extra_look erzeugen willst, musst Du diese Funktion speziell in Deinem Objekt definieren. VERWEISE: query_object_description, query_extra_look, query_long, query_transparent GRUPPEN: spieler, monster, augen SOURCE: /i/living/face.c FUNKTION: query_extra_look DEKLARATION: string query_extra_look() BESCHREIBUNG: Diese Funktion wird von den Augen in jedem Objekt aufgerufen, das sie betrachten, falls es ein Lebewesen (Spieler/Monster) (living()) ist. Die Funktion durchlaeuft den Inhalt des Objekts und ruft in jedem enthaltenen Objekt die Funktion extra_look auf. (siehe dort). Und liefert die so gesammelten Beschreibungen zurueck. Die Augen haengen diesen String, falls != 0, an die Langbeschreibung eines Lebewesens an. VERWEISE: extra_look, query_object_description, query_long, query_transparent GRUPPEN: spieler, monster, augen SOURCE: /i/living/face.c FUNKTION: query_align_title DEKLARATION: string query_align_title() BESCHREIBUNG: Liefert den string zuruck, der bei einem Spieler in Klammern erscheint. VERWEISE: set_align_title, query_align, set_align, add_align GRUPPEN: spieler SOURCE: /i/living/face.c FUNKTION: set_align_title DEKLARATION: void set_align_title(string align_title) BESCHREIBUNG: Setzt den Titel, der bei Spieler in Klammern erscheint. VERWEISE: query_align_title, query_align, set_align, add_align GRUPPEN: spieler SOURCE: /i/living/face.c FUNKTION: query_show_align_title DEKLARATION: int query_show_align_title() BESCHREIBUNG: Liefert zurueck, ob hinter dem Titel in Klammern ein Align-Titel entsprechend des Align generiert werden soll. VERWEISE: set_show_align_title GRUPPEN: spieler SOURCE: /i/living/face.c FUNKTION: set_show_align_title DEKLARATION: void set_show_align_title(int flag) BESCHREIBUNG: Setzt, ob automatisch nach dem Titel eines Spielers entsprechend dem Ansehen in Klammern ein String erscheinen soll oder nicht. VERWEISE: query_show_align_title GRUPPEN: spieler SOURCE: /i/living/face.c FUNKTION: query_align DEKLARATION: int query_align() BESCHREIBUNG: Liefert das Ansehen des Spielers oder Monsters. VERWEISE: set_align_title, query_align_title, set_align, add_align, query_real_align GRUPPEN: spieler, monster SOURCE: /i/living/face.c FUNKTION: query_real_align DEKLARATION: int query_real_align() BESCHREIBUNG: Liefert das echte, nicht von Shadows beeinflusste Ansehen des Spielers oder Monsters. VERWEISE: set_align_title,query_align_title,set_align,add_align,query_align GRUPPEN: spieler, monster SOURCE: /i/living/face.c FUNKTION: add_align DEKLARATION: void add_align(int i) BESCHREIBUNG: Addiert i zum Ansehen eines Spielers oder Monsters. VERWEISE: set_align_title, query_align_title, set_align, query_align, notify_alignment_change GRUPPEN: spieler, monster SOURCE: /i/living/face.c FUNKTION: set_align DEKLARATION: void set_align(int i) BESCHREIBUNG: Setzt das Ansehen eines Spielers oder Monsters. VERWEISE: set_align_title, query_align_title, query_align, add_align, notify_alignment_change GRUPPEN: spieler, monster SOURCE: /i/living/face.c FUNKTION: notify_alignment_change DEKLARATION: void notify_alignment_change(object who, int new, int old) BESCHREIBUNG: Meldet sich ein Objekt bei einem Lebewesen mit add_controller("notify_alignment_change",) an, so wird bei einer durch add_align oder set_align ausgeloesten Align- Aenderung in diesem angemeldeten Controllern die Funktion notify_alignment_change (who, new, old) aufgerufen. who ist dabei das Lebewesen, dessen Align sich geaendert hat, new das neue Align und old das alte Align. Bei add_align oder set_align, wodurch sich das Align nicht aendert, wird auch kein notify_alignment_change aufgerufen. VERWEISE: set_align, add_align GRUPPEN: spieler, monster SOURCE: /i/living/face.c FUNKTION: set_title DEKLARATION: void set_title(string str) BESCHREIBUNG: Setzt den Titel eines Monsters oder Spielers. VERWEISE: query_title GRUPPEN: spieler, monster SOURCE: /i/living/face.c FUNKTION: query_title DEKLARATION: string query_title() BESCHREIBUNG: Liefert den Titel eines Monsters oder Spielers. VERWEISE: set_title GRUPPEN: spieler, monster SOURCE: /i/living/face.c FUNKTION: query_magic_disguise DEKLARATION: mapping query_magic_disguise() BESCHREIBUNG: Liefert die Beschreibung des Lebewesen unter Beachtung von magischen Tarnungen. Magische Tarnungen fuer Spieler muessen von den Admins genehmigt werden. VERWEISE: query_real_name, query_real_cap_name, query_real_gender GRUPPEN: spieler, monster SOURCE: /i/living/face.c FUNKTION: query_max_hp DEKLARATION: int query_max_hp() BESCHREIBUNG: Liefert die maximalen Ausdauerpunkte eines Monsters oder Spielers zurueck. VERWEISE: set_max_hp, set_hp, query_hp GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: query_hp DEKLARATION: int query_hp() BESCHREIBUNG: Liefert die momentanen Ausdauerpunkte eines Monsters oder Spielers zurueck. VERWEISE: query_max_hp, set_max_hp, set_hp, query_hp GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: set_hp_view DEKLARATION: void set_hp_view(int hp_view) BESCHREIBUNG: Schaltet die AP-Anzeige eines Spielers (oder Monsters, aber das lassen wir doch lieber bleiben) ein oder aus. Fuer die Bedeutung der Werte siehe /sys/hpspview.h, diese Werte werden bei set_hp_view verodert. BEISPIEL: set_hp_view (HP_SP_VIEW_HP_PLUS | HP_SP_VIEW_SP_MINUS) schaltet Anzeige bei HP Gewinn und SP Verlust ein. Mit 0 wird die automatische Anzeige ausgeschaltet. VERWEISE: set_hp_view GRUPPEN: spieler, haende, kampf SOURCE: /i/living/hands.c FUNKTION: query_hp_view DEKLARATION: int query_hp_view() BESCHREIBUNG: Liefert zuruck, ob und wie die AP-Anzeige eingeschaltet ist. Rueckgabewert ist eine Veroderung der eingeschalteten Funktionen aus /sys/hpspview.h. Siehe auch set_hp_view. VERWEISE: set_hp_view GRUPPEN: spieler, haende, kampf SOURCE: /i/living/hands.c FUNKTION: set_extended_hp_view DEKLARATION: void set_extended_hp_view(int extended_hp_view) BESCHREIBUNG: Schaltet die erweiterte AP-Anzeige eines Spielers an oder aus. Mit 1 wird eingeschaltet, mit 0 aus. VERWEISE: query_extended_hp_view, set_hp_view GRUPPEN: spieler, haende, kampf SOURCE: /i/living/hands.c FUNKTION: query_extended_hp_view DEKLARATION: int query_extended_hp_view() BESCHREIBUNG: Liefert zurueck, ob die erweiterte AP-Anzeige eingeschaltet ist. VERWEISE: set_extended_hp_view, set_hp_view GRUPPEN: spieler, haende, kampf SOURCE: /i/living/hands.c FUNKTION: query_num_hands DEKLARATION: int query_num_hands() BESCHREIBUNG: Liefert die Anzahl der Haende eines Monsters (oder Spielers (!?!)) zurueck. VERWEISE: set_num_hands GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: set_num_hands DEKLARATION: void set_num_hands(int num_hands) BESCHREIBUNG: Damit kann man die Anzahl der Haende eines Monsters (oder Spielers (!?!)) setzen. VERWEISE: query_num_hands GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: set_min_damage DEKLARATION: void set_min_damage(int min_damage) BESCHREIBUNG: Setzt den minimalen (bei 0 skill,offensiv,haende...) Handkampfwert eines Monsters/Spielers. VERWEISE: set_max_damage, query_min_damage, query_max_damage GRUPPEN: spieler, monster, kampf, haende SOURCE: /i/living/hands.c FUNKTION: set_max_damage DEKLARATION: void set_max_damage(int max_damage) BESCHREIBUNG: Setzt den maximalen (bei 4500 skill,offensiv,haende...) Handkampfwert eines Monsters/Spielers. VERWEISE: set_min_damage, query_min_damage, query_max_damage GRUPPEN: spieler, monster, kampf, haende SOURCE: /i/living/hands.c FUNKTION: query_min_damage DEKLARATION: int query_min_damage() BESCHREIBUNG: Liefert den minimalen Handkampfwert eines Monsters/Spielers zurueck. VERWEISE: set_min_damage, set_max_damage, query_max_damage GRUPPEN: spieler, monster, kampf, haende SOURCE: /i/living/hands.c FUNKTION: query_max_damage DEKLARATION: int query_max_damage() BESCHREIBUNG: Liefert den maximalen Handkampfwert eines Monsters/Spielers zurueck. VERWEISE: set_min_damage, set_max_damage, query_min_damage GRUPPEN: spieler, monster, kampf, haende SOURCE: /i/living/hands.c FUNKTION: set_whimpy DEKLARATION: void set_whimpy(int whimpy) BESCHREIBUNG: Schaltet den Fluchtmodus eines Spielers/Monsters(!) an oder aus: Bei whimpy=0 wird der Fluchtmodus ausgeschaltet, bei whimpy>0 auf whimpy APs gesetzt. VERWEISE: query_whimpy GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: set_reattack DEKLARATION: void set_reattack(int reattack) BESCHREIBUNG: Setzt den Verteidigungsmodus eines Spielers/Monsters. Als 'reattack' koennen folgende (in add_hp definierte) Werte angegeben werden: REATTACK_DONT Verteidigungsmodus ausschalten. REATTACK_ONLY_SELF_DEFENSE Nur bei Selbstverteidigung einschalten. (Bei NPCs entspricht dies dem REATTACK_ALWAYS.) REATTACK_ALWAYS Verteidigungsmodus generell einschalten. VERWEISE: query_reattack GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: query_whimpy DEKLARATION: int query_whimpy() BESCHREIBUNG: Fragt ab, ob der Fluchtmodus eines Spielers/Monsters gesetzt ist. Bei Returnwert 0 ist er es nicht. VERWEISE: set_whimpy GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: query_reattack DEKLARATION: int query_reattack() BESCHREIBUNG: Fragt ab, ob der Verteidigungs-Modus eines Spielers/Monsters gesetzt ist. Bei Returnwert 0 ist er es nicht. VERWEISE: set_reattack GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: set_wants_to_get_attacked_by_monsters DEKLARATION: void set_wants_to_get_attacked_by_monsters(int i) BESCHREIBUNG: Hiermit kann man die Götter-Einstellung Aggressive Monster greifen an setzen. VERWEISE: query_wants_to_get_attacked_by_monsters GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: query_wants_to_get_attacked_by_monsters DEKLARATION: int query_wants_to_get_attacked_by_monsters() BESCHREIBUNG: Hiermit kann man die Götter-Einstellung Aggressive Monster greifen an abfragen. VERWEISE: set_wants_to_get_attacked_by_monsters GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: query_damage_percentages DEKLARATION: mapping query_damage_percentages() BESCHREIBUNG: Liefert das mit set/add_damage_percentages gesetzte Mapping zurueck. VERWEISE: set_damage_percentages, add_damage_percentages, add_hp GRUPPEN: monster, kampf SOURCE: /i/living/hands.c FUNKTION: add_damage_percentages DEKLARATION: void add_damage_percentages(mapping damage_percentages) BESCHREIBUNG: Damit kann man weitere Resistenzen/Empfindlichkeiten denen mit set_damage_percentages gesetzten hinzufuegen. VERWEISE: set_damage_percentages, query_damage_percentages, add_hp GRUPPEN: monster, kampf SOURCE: /i/living/hands.c FUNKTION: set_damage_percentages DEKLARATION: void set_damage_percentages(mapping damage_percentages) BESCHREIBUNG: Mit dieser Funktion kann man besondere Resistenzen oder Empfindlichkeiten gegenueber bestimmten Schadenstypen angeben. Im uebergebenen Mapping wird dazu jedem Schadenstyp ein Faktor (in Prozent) angegeben, mit welchen ein solcher Schaden multipliziert wird. Ein Eintrag von 100 ist der Standardwert (entspricht der Empfindlichkeit von Menschen), ein Eintrag < 100 verringert den Schaden, > 100 vergroessert ihn. Beispiel: ([ "heilig": 200, "daemonisch": 50 ]). Es sollte auch bei hartnaeckigen Resistenzen eine Chance geben, dass Schaeden durchkommen. Faktoren < 10% sollten daher vermieden werden. Es gibt auch ein Schluessel "default" fuer alles uebrige. VERWEISE: query_damage_percentages, add_damage_percentages, add_hp GRUPPEN: monster, kampf SOURCE: /i/living/hands.c FUNKTION: set_fight_options DEKLARATION: nomask void set_fight_options(mapping fo) BESCHREIBUNG: Damit kann man die Optionen zum Kampf setzen, nicht bei Spielern aktiv. Einzelheiten siehe add_fight_option. VERWEISE: add_fight_option,query_fight_option,query_fight_options GRUPPEN: monster, kampf SOURCE: /i/living/hands.c FUNKTION: add_fight_option DEKLARATION: nomask void add_fight_option(string key, mixed value) BESCHREIBUNG: Damit kann man eine Option zum Kampf setzen. Folgende Schluessel aus /sys/fight_options.h sind in Verwendung: FIO_BROKEN_WEAPON : Wert 1 bedeutet, kaputte Waffe senken, 2 hinlegen. FIO_PREVENT_ONLY_DEFENSIVE: Wert 1 verhindert das Fuehren von nur Schildern. FIO_WIELD_WEAPON: Wert 1 laesst das Monster eine andere Waffe fuehren. FIO_TAKE_WEAPON: Wert 1 laesst das Monster eine Waffe aufheben und fuehren. FIO_WIELD_RETRY: -1 bedeutet, immer wieder versuchen, eine Waffe zu fuehren 0 keine Wiederholung, und >0 Anzahl der Versuche. FIO_USE_FAR_WEAPON: Wert 1 signalisiert, das Nutzen von Bogen, Armbruesten, Wurfwaffen... FIU_CL_ARROW_FACTORY: Eine Closure welche Pfeile o.ae.(id) in das Monster bewegt und zur Nutzung von dem Bogen(weapon) zurueckgibt: object function(object npc,object weapon, string id) VERWEISE: query_fight_option,query_fight_options,set_fight_options GRUPPEN: monster, kampf SOURCE: /i/living/hands.c FUNKTION: query_fight_option DEKLARATION: nomask mixed query_fight_option(string key) BESCHREIBUNG: Damit kann man eine Option zum Kampf abfragen. Einzelheiten und Schluessel siehe add_fight_option VERWEISE: add_fight_option,query_fight_options,set_fight_options GRUPPEN: monster, kampf SOURCE: /i/living/hands.c FUNKTION: query_fight_options DEKLARATION: nomask mapping query_fight_options() BESCHREIBUNG: Damit kann man die Optionen zum Kampf abfragen. Einzelheiten siehe add_fight_option VERWEISE: add_fight_option,query_fight_option,set_fight_options GRUPPEN: monster, kampf SOURCE: /i/living/hands.c FUNKTION: free_hand DEKLARATION: int free_hand() BESCHREIBUNG: Liefert den index der ersten freien Hand zurueck oder -1, wenn keine Hand mehr frei ist VERWEISE: query_hand_objects, query_num_free_hands GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: free_fight DEKLARATION: int free_fight() BESCHREIBUNG: Liefert die erste Hand, mit der man kaempfen koennte, das heisst, eine Hand, mit der nicht gekaempft wird und in der nichts anderes ist als eine Nahkampfwaffe. Liefert -1 zurueck, wenn keine Hand zu einem Kampf bereit ist. VERWEISE: GRUPPEN: spieler, monster, kampf, haende SOURCE: /i/living/hands.c FUNKTION: query_hand_objects DEKLARATION: object *query_hand_objects() BESCHREIBUNG: Liefert alle gefuehrten Objekte zurueck. Der Rueckgabewert ist immer ein Array mit einem Eintrag pro Hand. Es kann Nullen enthalten, wenn die entsprechende Hand keine Waffe fuehrt. VERWEISE: free_hand, query_num_free_hands GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: query_num_free_hands DEKLARATION: int query_num_free_hands() BESCHREIBUNG: Liefert die Anzahl freier Haende. VERWEISE: free_hand, query_hand_objects GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: query_hand_enemies DEKLARATION: object *query_hand_enemies() BESCHREIBUNG: Liefert alle momentan bekaempften Gegener zurueck. VERWEISE: GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: query_hand_hits DEKLARATION: object *query_hand_hits() BESCHREIBUNG: Liefert alle momentan gelieferten Schlaege. VERWEISE: GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: delete_enemy DEKLARATION: void delete_enemy(object enemy) BESCHREIBUNG: Loescht den Gegner enemy aus allen Haenden. VERWEISE: GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: add_gone_ob DEKLARATION: void add_gone_ob(object ob) BESCHREIBUNG: Auch in ob wird bei Abwesenheit des Gegners im Kampf 'enemy_gone(object enemy)' aufgerufen. VERWEISE: delete_gone_ob, query_gone_ob GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: delete_gone_ob DEKLARATION: void delete_gone_ob(object ob) BESCHREIBUNG: ob wird nicht mehr ueber fehlende Gegner informiert. VERWEISE: add_gone_ob, query_gone_ob GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: query_gone_ob DEKLARATION: object *query_gone_ob() BESCHREIBUNG: Gibt die in add_gone_ob naeher spezifizierten Objekte zurueck. VERWEISE: add_gone_ob, delete_gone_ob GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: query_in_fight DEKLARATION: varargs int query_in_fight(object who) BESCHREIBUNG: Liefert 1 zurueck wenn der Spieler/das Monster gerade kaempft, sonst 0. Wenn 'who' uebergeben wird, liefert query_in_fight 1, wenn mit 'who' gekaempft wird. VERWEISE: query_hand_enemies GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: query_wielded_object DEKLARATION: int query_wielded_object(object ob) BESCHREIBUNG: Liefert 1 zurueck, wenn ob gefuehrt ist, sonst 0. VERWEISE: GRUPPEN: spieler, monster, haende, kampf SOURCE: /i/living/hands.c FUNKTION: no_take DEKLARATION: int no_take (object who, object where) BESCHREIBUNG: Bevor ein Objekt genommen wird (nimm Xyz, nimm Xyz aus Tasche) wird in dem zu nehmenden Objekt die Funktion no_take aufgerufen, who ist das Lebewesen, das zu nehmen versucht, where ist der Container, aus dem who genommen wird. Antwortet no_take mit 0, so wird das Objekt zu nehmen versucht (Filter, Gewicht usw. koennten das ja trotzdem verhindern), liefert no_take einen Wert ungleich 0 so wird das Objekt nicht genommen, no_take muss eine Meldung an who ausgeben, kann in den Raum ebenfalls eine ausgeben (warum es nicht ging) oder eine entsprechende Reaktion ausloesen. BEISPIEL: Die Banane in der Magiergilde glitscht davon, wenn man sie nehmen will: int no_take() { return !runaway(); } Gelingt runaway, sprich, schafft es die Banane, davonzulaufen, so kann man sie nicht nehmen. Eine Fehlermeldung eruebrigt sich, da der Spieler ja sieht, warum es nicht geklappt hat. Noch ein Beispiel: Dynamit, das bereits gezuendet ist, sollte man ebenfalls nicht nehmen (es sei denn, man ist Selbstmoerder): int no_take(object who, object woher) { if(gezuend) { send_message_to(who, MT_NOTIFY, MA_TAKE, wrap("Im gegenwaertigen Zustand sollte man das Dynamit " "lieber nicht anruehren!")); return 1; } } VERWEISE: take, put, no_put, put_all, take_all GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: take DEKLARATION: varargs int take(mixed ob, object con, int flag) BESCHREIBUNG: Mit take kann man das Objekt ob aus dem Container con herausholen Wenn flag == 1, dann werden keine Meldungen an andere erzeugt. VERWEISE: take_all, no_take, put, put_all, no_put GRUPPEN: monster, spieler, haende SOURCE: /i/living/hands.c FUNKTION: query_take_messages DEKLARATION: string *query_take_messages(object wer, object was) BESCHREIBUNG: Soll ein Objekt von einem Spieler aus einem Container genommen werden, so wird im Container diese Funktion aufgerufen. Hiermit kann der Container die Meldungen erzeugen, die dabei ausgegeben werden sollen. Der Rueckgabewert dieser Funktion ist ein Array aus zwei Strings, der erste String ist der, welchen der nehmende Spieler erhaelt, der zweite geht an die Umgebung des Spielers. Diese Funktion wird aufgerufen, bevor der Gegenstand aus dem Container genommen werden soll. Da es daher noch nicht feststeht, ob der Gegenstand ueberhaupt aus dem Container genommen werden kann darf diese Funktion auch keinerlei Nebeneffekte besitzen! Ist ein String in dem Array 0, so wird statt dessen die Standardmeldung erzeugt, so ist es moeglich, nur die Meldung, die der Spieler bekommen soll, zu beeinflussen. Ist ein String in dem Array "" (leer), so wird keine Meldung ausgegeben. Dadurch ist es moeglich, Meldungen zu unterdruecken. Es gibt kein set_take_messages und wird auch keines geben. Diese Funktion ist fuer spezielle Spezialfaelle gedacht. BEISPIEL: Rucksack. string *query_take_messages (object wer, object was) { return ({"Obwohl es in "+deinem()+" stockfinster ist, ziehst " "Du nach fuenf Minuten "+einen(was)+" aus ihm heraus.", "Obwohl es in "+seinem()+" stockfinster ist, zieht "+der(wer) +" nach fuenf Minuten "+einen(was)+" aus "+ihm()+" heraus."}); } VERWEISE: take, no_take, query_put_messages GRUPPEN: monster, spieler, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_take DEKLARATION: int forbidden_take(object ob, object where, object who) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who aus dem Container where genommen werden kann, wird who->forbidden("take", ob, where) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird ob nicht genommen. Die Funktion forbidden ruft in allen mit who->add_controller("forbidden_take", other) angemeldeten Objekten other die Funktionen other->forbidden_take(ob, where, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt ob kann nicht genommen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_take oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch ob->forbidden("take_me", who, where) und where->forbidden("take_from", who, ob) aufgerufen. VERWEISE: forbidden, notify, notify_take, take, no_take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_take_me DEKLARATION: int forbidden_take_me(object who, object where, object ob) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who aus dem Container where genommen werden kann, wird ob->forbidden("take_me", who, where) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird ob nicht genommen. Die Funktion forbidden ruft in allen mit ob->add_controller( "forbidden_take_me", other) angemeldeten Objekten other die Funktionen other->forbidden_take_me(who, where, ob) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt ob kann nicht genommen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_take_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("take", ob, where) und where->forbidden("take_from", who, ob) aufgerufen. VERWEISE: forbidden, notify, notify_take, take, no_take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_take_from DEKLARATION: int forbidden_take_from(object who, object ob, object where) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who aus dem Container where genommen werden kann, wird where->forbidden("take_from", who, ob) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird ob nicht genommen. Die Funktion forbidden ruft in allen mit where->add_controller( "forbidden_take_from", other) angemeldeten Objekten other die Funktionen other->forbidden_take_from(who, ob, where) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt ob kann nicht genommen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_take_from oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("take", ob, where) und ob->forbidden("take_me", who, where) aufgerufen. VERWEISE: forbidden, notify, notify_take, take, no_take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_take DEKLARATION: void notify_take(object ob, object where, object who) BESCHREIBUNG: Nachdem ein Objekt ob von einem Lebewesen who aus dem Container where genommen wurde, wird who->notify("take", ob, where) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_take", other) angemeldeten Objekten other die Funktionen other->notify_take(ob, where, who) auf. Sowohl who als auch other haben dann die Moeglichkeit, auf das Nehmen von ob aus where zu reagieren. Bemerkung: Es wird auch ob->notify("take_me", who, where) und where->notify("take_from", who, ob) aufgerufen. VERWEISE: forbidden, notify, forbidden_take, take, no_take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_take_me DEKLARATION: void notify_take_me(object who, object where, object ob) BESCHREIBUNG: Nachdem ein Objekt ob von einem Lebewesen who aus dem Container where genommen wurde, wird ob->notify("take_me", who, where) aufgerufen. Die Funktion notify ruft in allen mit ob->add_controller( "notify_take_me", other) angemeldeten Objekten other die Funktionen other->notify_take_me(who, where, ob) auf. Sowohl ob als auch other haben dann die Moeglichkeit, auf das Nehmen von ob aus where zu reagieren. Bemerkung: Es wird auch who->notify("take", ob, where) und where->notify("take_from", who, ob) aufgerufen. VERWEISE: forbidden, notify, forbidden_take, take, no_take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_take_from DEKLARATION: void notify_take_from(object who, object ob, object where) BESCHREIBUNG: Nachdem ein Objekt ob von einem Lebewesen who aus dem Container where genommen wurde, wird where->notify("take_from", who, ob) aufgerufen. Die Funktion notify ruft in allen mit where->add_controller( "notify_take_from", other) angemeldeten Objekten other die Funktionen other->notify_take_from(who, ob, where) auf. Sowohl where als auch other haben dann die Moeglichkeit, auf das Nehmen von ob aus where zu reagieren. Bemerkung: Es wird auch who->notify("take", ob, where) und ob->notify("take_me", who, where) aufgerufen. VERWEISE: forbidden, notify, forbidden_take, take, no_take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: concerned_take DEKLARATION: int concerned_take(object ob, object where, object who) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who aus dem Container where genommen wird, wird who->concerned("take", ob, where) aufgerufen. Die Returnwerte der per controller bei 'ob' angemeldeten Objekten werden als Prioritaten angesehen, wobei das Objekt 'cob' mit der hoechsten Prioritaet den Zuschlag erhaelt und per cob->do_take(ob,where,who); dazu aufgefordert wird sich um das Nehmen von 'ob' zu kuemmern. Zur Ausgabe der Erfolgsmeldungen wird zusaetzlich cob->display_messages_take(ob,where,who) aufgerufen, falls vorhanden. Bemerkung: Es wird auch where->concerned("take_from", who, ob) und ob->concerned("take_me", who, where) aufgerufen. VERWEISE: concerned, concerned_take_from, concerned_take, do_take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: concerned_take_me DEKLARATION: int concerned_take_me(object who, object where, object ob) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who aus dem Container where genommen wird, wird ob->concerned("take_me", who, where) aufgerufen. Die Returnwerte der per controller bei 'ob' angemeldeten Objekten werden als Prioritaten angesehen, wobei das Objekt 'cob' mit der hoechsten Prioritaet den Zuschlag erhaelt und per cob->do_take_me(who,where,ob); dazu aufgefordert wird sich um das Nehmen von 'ob' zu kuemmern. Zur Ausgabe der Erfolgsmeldungen wird zusaetzlich cob->display_messages_take_me(who,where,ob) aufgerufen, falls vorhanden. Bemerkung: Es wird auch who->concerned("take", ob, where) und where->concerned("take_from", who, ob) aufgerufen. VERWEISE: concerned, concerned_take_from, concerned_take, do_take_me GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: concerned_take_from DEKLARATION: int concerned_take_from(object who, object ob, object where) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who aus dem Container where genommen wird, wird where->concerned("take_from", who, ob) aufgerufen. Die Returnwerte der per controller bei 'where' angemeldeten Objekten werden als Prioritaten angesehen, wobei das Objekt 'cob' mit der hoechsten Prioritaet den Zuschlag erhaelt und per cob->do_take_from(who,ob,where); dazu aufgefordert wird sich um das Nehmen aus 'where' zu kuemmern. Zur Ausgabe der Erfolgsmeldungen wird zusaetzlich cob->display_messages_take(who,ob,where) aufgerufen, falls vorhanden. Bemerkung: Es wird auch who->concerned("take", ob, where) und ob->concerned("take_me", who, where) aufgerufen. VERWEISE: concerned, concerned_take_me, concerned_take, do_take_from GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: do_take_from DEKLARATION: int do_take_from(object who, object ob, object where) BESCHREIBUNG: Diese Funktion wird in dem Objekt aufgerufen, welches ueber concerned_take_from die hoechste Prioritaet zurueckgeliefert hat und sich somit dafuer zustaendigst erklaert hat sich um das Nehmen durch 'who' von 'ob' aus 'where' zu kuemmern. Es sollte also etwas bewegt werden und der Returnwert des move zurueckgegeben werden. VERWEISE: concerned_take_from, do_take_me, take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: do_take_me DEKLARATION: int do_take_me(object who, object where, object ob) BESCHREIBUNG: Diese Funktion wird in dem Objekt aufgerufen, welches ueber concerned_take_me die hoechste Prioritaet zurueckgeliefert hat und sich somit dafuer zustaendigst erklaert hat sich um das Nehmen durch 'who' von 'ob' aus 'where' zu kuemmern. Es sollte also etwas bewegt werden oder auch nicht und der Returnwert des move zurueckgegeben werden. (siehe /sys/move.h) VERWEISE: concerned_take_me, do_take_from, take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: do_take DEKLARATION: int do_take(object ob, object where, object who) BESCHREIBUNG: Diese Funktion wird in dem Objekt aufgerufen, welches ueber concerned_take die hoechste Prioritaet zurueckgeliefert hat und sich somit dafuer zustaendigst erklaert hat sich um das Nehmen durch 'who' von 'ob' aus 'where' zu kuemmern. Es sollte also etwas bewegt werden und der Returnwert des move zurueckgegeben werden. VERWEISE: concerned_take_from, do_take_from, take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: display_messages_take DEKLARATION: int display_messages_take(object ob, object where, object who) BESCHREIBUNG: Diese Funktion wird in dem Objekt aufgerufen, welches ueber concerned_take die hoechste Prioritaet zurueckgeliefert hat und sich somit dafuer zustaendigst erklaert hat sich um das Nehmen durch 'who' von 'ob' aus 'where' zu kuemmern. Es sollen nun die Erfolgsmeldungen ausgegeben und ein Wert != 0 zurueckgegeben werden. VERWEISE: concerned_take_from, display_messages_take_me, take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: display_messages_take_me DEKLARATION: int display_messages_me(object who, object where, object ob) BESCHREIBUNG: Diese Funktion wird in dem Objekt aufgerufen, welches ueber concerned_take_me die hoechste Prioritaet zurueckgeliefert hat und sich somit dafuer zustaendigst erklaert hat sich um das Nehmen durch 'who' von 'ob' aus 'where' zu kuemmern. Es sollen nun die Erfolgsmeldungen ausgegeben und ein Wert != 0 zurueckgegeben werden. VERWEISE: concerned_take_me, display_messages_take_from, take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: display_messages_take_from DEKLARATION: int display_messages_from(object who, object ob, object where) BESCHREIBUNG: Diese Funktion wird in dem Objekt aufgerufen, welches ueber concerned_take_from die hoechste Prioritaet zurueckgeliefert hat und sich somit dafuer zustaendigst erklaert hat sich um das Nehmen durch 'who' von 'ob' aus 'where' zu kuemmern. Es sollen nun die Erfolgsmeldungen ausgegeben und ein Wert != 0 zurueckgegeben werden. VERWEISE: concerned_take_from, display_messages_take, take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: take_all DEKLARATION: int take_all(mixed *ob_list, object con) BESCHREIBUNG: Mit take_all kann man mehrere Objekte obj_list aus den Container con nehmen. VERWEISE: take, no_take, put, put_all, no_put GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: no_put DEKLARATION: int no_put (object who, object where) BESCHREIBUNG: Bevor ein Objekt gelegt wird (lege Xyz, lege Xyz in Tasche) wird in dem zu legenden Objekt die Funktion no_put aufgerufen, who ist das Lebewesen, das zu legen versucht, where ist das Ziel des legens. Antwortet no_put mit 0, so wird das Objekt zu legen versucht (Filter, Gewicht usw. koennten das ja trotzdem verhindern), liefert no_put einen Wert ungleich 0 so wird das Objekt nicht geschoben, no_put muss eine Meldung an who ausgeben und sollte in den Raum ebenfalls eine ausgeben (warum es nicht ging) oder eine entsprechende Reaktion ausloesen. BEISPIEL: Schwert aus Doerrland - Labyrinth: Wenn man das Schwert fuehrt, entdeckt man, dass es verwunschen ist. Dann kann man es zwar wieder senken, es aber nicht mehr wieder ablegen. int no_put(object who, object where) { if (!cursed) return 0; tell_object(who,wrap(Dein()+" klebt wie ein schlechter Ruf an " "deiner Hand. Du bekommst es nicht ab.")); who->send_message(MT_LOOK,MA_UNKNOWN,wrap(Der(this_player())+" fuchtelt verzweifelt mit "+ seinem()+" herum. Was soll das wohl?")); return 1; } VERWEISE: put, put_all, take, tak_all, no_take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: query_put_messages DEKLARATION: string *query_put_messages(object wer, object was) BESCHREIBUNG: Soll ein Objekt von einem Spieler in einen Container getan werden, so wird im Container diese Funktion aufgerufen. Hiermit kann der Container die Meldungen erzeugen, die dabei ausgegeben werden sollen. Alles weitere analog zu query_take_messages. Es gibt kein set_put_messages und wird auch keines geben. Diese Funktion ist fuer spezielle Spezialfaelle gedacht. VERWEISE: put, no_put, query/set_put_prepos, query/set_put_verb usw., query_take_messages GRUPPEN: monster, spieler, haende SOURCE: /i/living/hands.c FUNKTION: allowed_put_living DEKLARATION: int allowed_put_living(object was, object wohin) BESCHREIBUNG: Wenn das Lebewesen 'was' in den Container 'wohin' bewegt werden soll, und 'was' etwas mehr als 1 wiegt, wird was->allowed("put_living", was, wohin) gefragt. allowed ruft dann in allen mit was->add_controller( "allowed_put_living", other) angemeldeten Objekten other die Funktion other->allowed_put_living(was, wohin) auf. Wurde mindestens ein solches Objekt angemeldet und liefern alle Funktionen einen Wert != 0, dann wird die Bewegung gestattet, ansonsten verboten. Somit kann man also Lebewesen bauen, welche man weitergeben kann, und die doch schwerer als 1 sind, indem man einen solchen Controller anmeldet, welcher 1 liefert. VERWEISE: allowed, add_controller, take, forbidden_take, forbidden_take_me, allowed_take_living GRUPPEN: monster, haende SOURCE: /i/living/hands.c FUNKTION: put DEKLARATION: varargs int put(mixed was, object wohin, int flag, string verb) BESCHREIBUNG: Mit put kann man das Objekt was in den Container wohin legen. Wenn flag == 1, dann werden keine Meldungen an andere erzeugt. VERWEISE: no_out, put_all, take, take_all, no_take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_put DEKLARATION: int forbidden_put(object ob, object where, object who) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who in den Container where gelegt werden kann, wird who->forbidden("put", ob, where) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird ob nicht hineingelegt. Die Funktion forbidden ruft in allen mit who->add_controller("forbidden_put", other) angemeldeten Objekten other die Funktionen other->forbidden_put(ob, where, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt ob kann nicht hineingelegt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_put oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch ob->forbidden("put_me", who, where) und where->forbidden("put_into", who, ob) aufgerufen. VERWEISE: forbidden, notify, notify_put, put, no_put GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_put_me DEKLARATION: int forbidden_put_me(object who, object where, object ob) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who in den Container where gelegt werden kann, wird ob->forbidden("put_me", who, where) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird ob nicht hineingelegt. Die Funktion forbidden ruft in allen mit ob->add_controller( "forbidden_put_me", other) angemeldeten Objekten other die Funktionen other->forbidden_put_me(who, where, ob) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt ob kann nicht hineingelegt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_put_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("put", ob, where) und where->forbidden("put_into", who, ob) aufgerufen. VERWEISE: forbidden, notify, notify_put, put, no_put GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_put_into DEKLARATION: int forbidden_put_into(object who, object ob, object where) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who in den Container where gelegt werden kann, wird where->forbidden("put_into", who, ob) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird ob nicht hineingelegt. Die Funktion forbidden ruft in allen mit where->add_controller( "forbidden_put_into", other) angemeldeten Objekten other die Funktionen other->forbidden_put_into(who, ob, where) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt ob kann nicht hineingelegt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_put_into oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("put", ob, where) und ob->forbidden("put_me", who, where) aufgerufen. VERWEISE: forbidden, notify, notify_put, put, no_put GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_put DEKLARATION: void notify_put(object ob, object where, object who) BESCHREIBUNG: Nachdem ein Objekt ob von einem Lebewesen who in den Container where gelegt wurde, wird who->notify("put", ob, where) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_put", other) angemeldeten Objekten other die Funktionen other->notify_put(ob, where, who) auf. Sowohl who als auch other haben dann die Moeglichkeit, auf das Legen von ob in where zu reagieren. Bemerkung: Es wird auch ob->notify("put_me", who, where) und where->notify("put_into", who, ob) aufgerufen. VERWEISE: forbidden, notify, forbidden_put, put, no_put GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_put_me DEKLARATION: void notify_put_me(object who, object where, object ob) BESCHREIBUNG: Nachdem ein Objekt ob von einem Lebewesen who in den Container where gelegt wurde, wird ob->notify("put_me", who, where) aufgerufen. Die Funktion notify ruft in allen mit ob->add_controller( "notify_put_me", other) angemeldeten Objekten other die Funktionen other->notify_put_me(who, where, ob) auf. Sowohl ob als auch other haben dann die Moeglichkeit, auf das Legen von ob in where zu reagieren. Bemerkung: Es wird auch who->notify("put", ob, where) und where->notify("put_into", who, ob) aufgerufen. VERWEISE: forbidden, notify, forbidden_put, put, no_put GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_put_into DEKLARATION: void notify_put_into(object who, object ob, object where) BESCHREIBUNG: Nachdem ein Objekt ob von einem Lebewesen who in den Container where gelegt wurde, wird where->notify("put_into", who, ob) aufgerufen. Die Funktion notify ruft in allen mit where->add_controller( "notify_put_into", other) angemeldeten Objekten other die Funktionen other->notify_put_into(who, ob, where) auf. Sowohl where als auch other haben dann die Moeglichkeit, auf das Legen von ob in where zu reagieren. Bemerkung: Es wird auch who->notify("put", ob, where) und ob->notify("put_me", who, where) aufgerufen. VERWEISE: forbidden, notify, forbidden_put, put, no_put GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: put_all DEKLARATION: int put_all(mixed *ob_list, object con) BESCHREIBUNG: Mit put_all kann man mehrere Objekte obj_list in den Container con legen. VERWEISE: put, no_put, take, take_all, no_take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: allowed_empty_living DEKLARATION: int allowed_empty_living(object woraus,object room) BESCHREIBUNG: Wenn das Lebewesen 'woraus' ausgeleert werden soll, wird woraus->allowed("empty_living", woraus,room) gefragt. Wurde mindestens ein solches Objekt angemeldet und liefern alle Funktionen einen Wert != 0, dann wird die Bewegung gestattet, ansonsten verboten. Somit kann man also Lebewesen bauen, welche man leeren kann, indem man einen solchen Controller anmeldet, welcher 1 liefert. VERWEISE: allowed, add_controller, empty, allowed_take_living, allowed_put_living GRUPPEN: monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_empty_container DEKLARATION: int forbidden_empty_container(object con, object room, object who) BESCHREIBUNG: Bevor ein Container con von einem Lebewesen who in den Raum room geleert werden kann, wird who->forbidden("empty_container", con,room) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird con nicht geleert. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_empty_container oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch con->forbidden("empty_container_me", who, room) und room->forbidden("empty_container_into", who, con) aufgerufen. VERWEISE: forbidden, notify GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_empty_container_me DEKLARATION: int forbidden_empty_container_me(object who, object room, object con) BESCHREIBUNG: Bevor ein Container con von einem Lebewesen who in den Raum room geleert werden kann, wird con->forbidden("empty_container_me", who,room) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird con nicht geleert. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_empty_container_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("empty_container", con, room) und room->forbidden("empty_container_into", who, con) aufgerufen. VERWEISE: forbidden, notify GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_empty_container_into DEKLARATION: int forbidden_empty_container_into(object who, object con, object room) BESCHREIBUNG: Bevor ein Container con von einem Lebewesen who in den Raum room geleert werden kann, wird room->forbidden("empty_container_into", who,con) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird con nicht geleert. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_empty_container_into oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("empty_container", con, room) und con->forbidden("empty_container_me", who, room) aufgerufen. VERWEISE: forbidden, notify GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_empty_container DEKLARATION: void notify_empty_container(object con, object room, object who) BESCHREIBUNG: Nachdem ein Container con von einem Lebewesen who in den Raum room geleert wurde, wird who->notify("empty_container", con,room) aufgerufen. Bemerkung: Es wird auch room->notify("empty_container_into", who, con) und con->notify("empty_container_me", who, room) aufgerufen. VERWEISE: forbidden, notify,forbidden_empty_container_into GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_empty_container_me DEKLARATION: void notify_empty_container_me(object who, object room, object con) BESCHREIBUNG: Nachdem ein Container con von einem Lebewesen who in den Raum room geleert wurde, wird con->notify("empty_container_me", who,room) aufgerufen. Bemerkung: Es wird auch who->notify("empty_container", con, room) und room->notify("empty_container_into", who, con) aufgerufen. VERWEISE: forbidden, notify,forbidden_empty_container_into GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_empty_container_into DEKLARATION: void notify_empty_container_into(object who, object con, object room) BESCHREIBUNG: Nachdem ein Container con von einem Lebewesen who in den Raum room geleert wurde, wird room->notify("empty_container_into", who,con) aufgerufen. Bemerkung: Es wird auch who->notify("empty_container", con, room) und con->notify("empty_container_me", who, room) aufgerufen. VERWEISE: forbidden, notify,forbidden_empty_container_into GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_shown DEKLARATION: void notify_shown(mixed what, object who) BESCHREIBUNG: ACHTUNG! Diese Funktion ist veraltet. Stattdessen sollte notify_show_whom genutzt werden, welches dem Controllerkonzept entspricht. Wird einem Monster irgendetwas von einem Lebewesen gezeigt, so wird in dem Monster die Funktion notify_shown aufgerufen. Deren erster Parameter ist das, was gezeigt wurde, dies kann vom Typ object (Gegenstand) oder aber auch ein mapping (v-item) sein. Der zweite Parameter ist das Lebewesen, das dem Monster etwas gezeigt hat. VERWEISE: show_command GRUPPEN: monster SOURCE: /i/living/hands.c FUNKTION: show_command DEKLARATION: int show_command(string str) BESCHREIBUNG: Mit show_command kann man ein Monster/einen Spieler etwas zeigen lassen. Was genaum, wird aus str herausgeparst. show_command liefert 1 zurueck, wenn etwas gezeigt wurde, sonst 0. VERWEISE: notify_shown GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_show DEKLARATION: int forbidden_show(mixed what, mixed whom, object who) BESCHREIBUNG: Bevor das Objekt oder Mapping (v-item) what dem Lebewesen (evntl. V-Item) whom vom Lebewesen who gezeigt werden kann, wird who->forbidden("show", what, whom) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann das Objekt nicht gezeigt werden. Die Funktion forbidden ruft in allen mit who->add_controller("forbidden_show", other) angemeldeten Objekten other die Funktionen other->forbidden_show(what, whom, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und what kann nicht gezeigt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_show oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch what->forbidden("show_me", who, whom) und whom->forbidden("show_whom", who, what) und room->forbidden("show_here", who, what, whom) aufgerufen. VERWEISE: forbidden, notify, notify_show GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_show_me DEKLARATION: int forbidden_show_me(object who, mixed whom, object what) BESCHREIBUNG: Bevor das Objekt what dem Lebewesen (moeglicherweise V-Item) whom vom Lebewesen who gezeigt werden kann, wird what->forbidden("show_me", who, whom) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann das Objekt nicht gezeigt werden. Die Funktion forbidden ruft in allen mit what->add_controller( "forbidden_show_me", other) angemeldeten Objekten other die Funktionen other->forbidden_show_me(who, whom, what) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und what kann nicht gezeigt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_show_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("show", what, whom) und whom->forbidden("show_whom", who, what) und room->forbidden("show_here", who, what, whom) aufgerufen. VERWEISE: forbidden, notify, notify_show GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_show_whom DEKLARATION: int forbidden_show_whom(object who, mixed what, object whom) BESCHREIBUNG: Bevor das Objekt oder Mapping (v-item) what dem Lebewesen whom vom Lebewesen who gezeigt werden kann, wird whom->forbidden("show_whom", who, what) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann das Objekt nicht gezeigt werden. Die Funktion forbidden ruft in allen mit whom->add_controller( "forbidden_show_whom", other) angemeldeten Objekten other die Funktionen other->forbidden_show_whom(who, what, whom) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und what kann nicht gezeigt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_show_whom oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("show", what, whom) und what->forbidden("show_me", who, whom) und room->forbidden("show_here", who, what, whom) aufgerufen. VERWEISE: forbidden, notify, notify_show GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_show_here DEKLARATION: int forbidden_show_here(object who, mixed what, mixed whom) BESCHREIBUNG: Wenn das Objekt who das Objekt/V-Item what dem Objekt/V-Item whom zeigt, wird zuvor in der Raum, in dem diese Aktion stattfindet, mit dem Aufruf room->forbidden("show_here", who, what, whom) gefragt, ob diese Aktion nicht durch irgendetwas verhindert wird. Objekte koennen sich beim Raum fuer diesen Controller anmelden. Funktioniert ansonsten wie forbidden_show(), siehe dort. VERWEISE: forbidden, notify, forbidden_show, notify_show GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_show DEKLARATION: void notify_show(mixed what, mixed whom, object who) BESCHREIBUNG: Nachdem das Lebewesen who einem Lebewesen (evntl. V-Item) whom das Objekt oder Mapping (v_item) what gezeigt hat, wird who->notify("show", what, whom) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_show", other) angemeldeten Objekten other die Funktionen other->notify_show(what, whom, who) auf. Sowohl who als auch other haben dann die Moeglichkeit, auf das Zeigen von what zu reagieren. Bemerkung: Es wird auch what->notify("show_me", who, whom) und whom->notify("show_whom", who, what) und room->notify("show_here", who, what, whom) aufgerufen. VERWEISE: forbidden, notify, forbidden_show, notify_shown GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_show_me DEKLARATION: void notify_show_me(object who, mixed whom, mixed what) BESCHREIBUNG: Nachdem das Lebewesen who einem Lebewesen (moeglicherweise ein V-Item) whom das Objekt oder Mapping (v_item) what gezeigt hat, wird what->notify( "show_me", who, whom) aufgerufen. Die Funktion notify ruft in allen mit what->add_controller( "notify_show_me", other) angemeldeten Objekten other die Funktionen other->notify_show_me(who, whom, what) auf. Sowohl what als auch other haben dann die Moeglichkeit, auf das Zeigen von what zu reagieren. Bemerkung: Es wird auch who->notify("show", what, whom) und whom->notify("show_whom", who, what) und room->notify("show_here", who, what, whom) aufgerufen. VERWEISE: forbidden, notify, forbidden_show, notify_shown GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_show_whom DEKLARATION: void notify_show_whom(object who, mixed what, object whom) BESCHREIBUNG: Nachdem das Lebewesen who einem Lebewesen whom das Objekt oder Mapping (v_item) what gezeigt hat, wird whom->notify("show_whom", who, what) aufgerufen. Die Funktion notify ruft in allen mit whom->add_controller( "notify_show_whom", other) angemeldeten Objekten other die Funktionen other->notify_show_whom(who, what, whom) auf. Sowohl whom als auch other haben dann die Moeglichkeit, auf das Zeigen von what zu reagieren. Bemerkung: Es wird auch who->notify("show", what, whom) und what->notify("show_me", who, whom) und room->notify("show_here", who, what, whom) aufgerufen. VERWEISE: forbidden, notify, forbidden_show, notify_shown GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_show_here DEKLARATION: int forbidden_show_here(object who, mixed what, mixed whom) BESCHREIBUNG: Wenn das Objekt who das Objekt/V-Item what dem Objekt/V-Item whom gezeigt hat, wird der Raum, in dem diese Aktion stattfindet, mit dem Aufruf room->notify("show_here", who, what, whom) davon benachrichtigt. Objekte koennen sich beim Raum fuer diesen Controller anmelden. Funktioniert ansonsten wie notify_show(), siehe dort. VERWEISE: forbidden, notify, notify_show, notify_show GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: concerned_show DEKLARATION: int concerned_show(object ob, object whom, object who) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who dem whom gezeigt wird, wird who->concerned("show", ob, whom) aufgerufen. Die Returnwerte der per controller bei 'ob' angemeldeten Objekten werden als Prioritaten angesehen, wobei das Objekt 'cob' mit der hoechsten Prioritaet den Zuschlag erhaelt und per cob->do_show(ob,whom,who); dazu aufgefordert wird sich um das Zeigen von 'ob' zu kuemmern. Bemerkung: Es wird auch whom->concerned("show_whom", who, ob) und ob->concerned("show_me", who, whom) aufgerufen. VERWEISE: concerned, concerned_take_from, concerned_take, do_take GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: concerned_show_me DEKLARATION: int concerned_show_me(object who, object whom, object ob) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who dem whom gezeigt wird, wird ob->concerned("show_me", who, where) aufgerufen. Die Returnwerte der per controller bei 'ob' angemeldeten Objekten werden als Prioritaten angesehen, wobei das Objekt 'cob' mit der hoechsten Prioritaet den Zuschlag erhaelt und per cob->do_show_me(who,whom,ob); dazu aufgefordert wird sich um das Zeigen von 'ob' zu kuemmern. Bemerkung: Es wird auch who->concerned("show", ob, where) und whom->concerned("show_whom", who, ob) aufgerufen. VERWEISE: concerned, concerned_show_whom, concerned_show, do_show_me GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: concerned_show_whom DEKLARATION: int concerned_show_whom(object who, object ob, object whom) BESCHREIBUNG: Bevor ein Objekt ob von einem Lebewesen who dem whom gezeigt wird, wird whom->concerned("show_whom", who, ob) aufgerufen. Die Returnwerte der per controller bei 'whom' angemeldeten Objekten werden als Prioritaten angesehen, wobei das Objekt 'cob' mit der hoechsten Prioritaet den Zuschlag erhaelt und per cob->do_show_whom(who,ob,whom); dazu aufgefordert wird sich um das Zeigen von 'ob' zu kuemmern. Bemerkung: Es wird auch who->concerned("show", ob, whom) und ob->concerned("show_me", who, whom) aufgerufen. VERWEISE: concerned, concerned_show_me, concerned_show, do_show_whom GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: do_show_whom DEKLARATION: int do_show_whom(object who, object ob, object whom) BESCHREIBUNG: Diese Funktion wird in dem Objekt aufgerufen, welches ueber concerned_show_whom die hoechste Prioritaet zurueckgeliefert hat und sich somit dafuer zustaendigst erklaert hat sich um das Zeigen von 'ob' durch 'who' an 'whom' zu kuemmern. Es sollte 1 im Erfolgsfall zurueck gegeben werden. VERWEISE: concerned_whow_whom, do_show_me, do_show GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: do_show_me DEKLARATION: int do_show_me(object who, object whom, object ob) BESCHREIBUNG: Diese Funktion wird in dem Objekt aufgerufen, welches ueber concerned_show_me die hoechste Prioritaet zurueckgeliefert hat und sich somit dafuer zustaendigst erklaert hat sich um das Zeigen von 'ob' durch 'who' an 'whom' zu kuemmern. Es sollte 1 im Erfolgsfall zurueck gegeben werden. VERWEISE: concerned_show_me, do_show, do_show_whom GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: do_show DEKLARATION: int do_show(object ob, object whom, object who) BESCHREIBUNG: Diese Funktion wird in dem Objekt aufgerufen, welches ueber concerned_show die hoechste Prioritaet zurueckgeliefert hat und sich somit dafuer zustaendigst erklaert hat sich um das Zeigen von 'ob' durch 'who' an 'whom' zu kuemmern. Es sollte 1 im Erfolgsfall zurueck gegeben werden. VERWEISE: concerned_show, do_show_me, do_show_whom GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: no_push DEKLARATION: int no_push(object who, object where) BESCHREIBUNG: Bevor ein Objekt geschoben wird (schiebe Xyz nach Norden) wird in dem zu schiebenden Objekt die Funktion no_push aufgerufen, who ist das Lebewesen, das zu schieben versucht, where ist das Ziel des Schiebens. Antwortet no_push mit 0, so wird das Objekt zu schieben versucht (Filter, Gewicht usw. koennten das ja trotzdem verhindern), liefert no_push einen Wert ungleich 0 so wird das Objekt nicht geschoben, no_push muss eine Meldung an who ausgeben (warum es nicht ging) und sollte in den Raum ebenfalls eine geben. Beispiel: gezuendetes Dynamit kann man nicht mehr verschieben: int no_push(object who, object wohin) { if(gezuend) { send_message_to(who,MT_NOTIFY|MT_LOOK,MA_UNKNOWN, wrap("Im gegenwaertigen Zustand sollte man das Dynamit nicht" " umeinanderschieben!")); return 1; } } VERWEISE: GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_push DEKLARATION: int forbidden_push(object ob, object where, string dir, object who) BESCHREIBUNG: Bevor das Lebewesen who ein Objekt ob in Richtung dir in den Container (Raum) where schieben kann, wird who->forbidden("push", ob, where, dir) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, darf ob nicht geschoben werden. Die Funktion forbidden ruft in allen mit who->add_controller("forbidden_push", other) angemeldeten Objekten other die Funktionen other->forbidden_push(ob, where, dir, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt ob kann nicht geschoben werden. Fuer die Ausgabe einer Meldung an das Lebewesen muss der Programmierer in forbidden_push oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch ob->forbidden("push_me", who, where, dir) aufgerufen. VERWEISE: forbidden, notify, notify_push, no_put GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_push_me DEKLARATION: int forbidden_push_me(object who, object where, string dir, object ob) BESCHREIBUNG: Bevor das Lebewesen who ein Objekt ob in Richtung dir in den Container (Raum) where schieben kann, wird ob->forbidden("push_me", who, where, dir) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, darf ob nicht geschoben werden. Die Funktion forbidden ruft in allen mit ob->add_controller( "forbidden_push_me", other) angemeldeten Objekten other die Funktionen other->forbidden_push_me(who, where, dir, ob) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt ob kann nicht geschoben werden. Fuer die Ausgabe einer Meldung an das Lebewesen muss der Programmierer in forbidden_push_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("push", ob, where, dir) aufgerufen. VERWEISE: forbidden, notify, notify_push, no_put GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_push_here DEKLARATION: int forbidden_push_here(object who, object ob, object where, string dir) BESCHREIBUNG: Bevor das Lebewesen who ein Objekt ob in Richtung dir in den Container (Raum) where schieben kann, wird environment(who)->forbidden("push_here", who, ob, where, dir) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, darf ob nicht geschoben werden. Die Funktion forbidden ruft in allen mit room->add_controller( "forbidden_push_here", other) angemeldeten Objekten other die Funktionen other->forbidden_push_here(who, ob, where, dir) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt ob kann nicht geschoben werden. Fuer die Ausgabe einer Meldung an das Lebewesen muss der Programmierer in forbidden_push_here oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("push", ob, where, dir) und ob->forbidden("push_me", who, where, dir) aufgerufen. VERWEISE: forbidden, notify, notify_push_here, no_put GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_push DEKLARATION: void notify_push(object ob, object where, string dir) BESCHREIBUNG: Nachdem ein Objekt ob von dem Lebewesen who in Richtung dir in den Container (Raum) where geschoben wurde, wird who->notify("push", ob, where, dir) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_push", other) angemeldeten Objekten other die Funktionen other->notify_push(ob, where, dir, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf das Schieben von ob in den Container (Raum) where zu reagieren. Bemerkung: Es wird auch ob->notify("push_me", who, where, dir) aufgerufen. VERWEISE: forbidden, notify, forbidden_push GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_push_me DEKLARATION: void notify_push_me(object who, object where, string dir, object ob) BESCHREIBUNG: Nachdem ein Objekt ob von dem Lebewesen who in Richtung dir in den Container (Raum) where geschoben wurde, wird ob->notify("push_me", who, where, dir) aufgerufen. Die Funktion notify ruft in allen mit ob->add_controller("notify_push_me", other) angemeldeten Objekten other die Funktionen other->notify_push_me(who, where, dir, ob) auf. Sowohl ob als auch other haben dann eine Moeglichkeit, auf das Schieben von ob in den Container (Raum) where zu reagieren. Bemerkung: Es wird auch who->notify("push", ob, where, dir) aufgerufen. VERWEISE: forbidden, notify, forbidden_push GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_push_here DEKLARATION: void notify_push_here(object who, object ob, object where, string dir) BESCHREIBUNG: Nachdem ein Objekt ob von dem Lebewesen who in Richtung dir in den Container (Raum) where geschoben wurde, wird environment(who)->notify("push_here", who, ob, where, dir) aufgerufen. Die Funktion notify ruft in allen mit environment(who)->add_controller( "notify_push_here", other) angemeldeten Objekten other die Funktionen other->notify_push_here(who, ob, where, dir) auf. Bemerkung: Es wird auch who->notify("push", ob, where, dir) und ob->notify("push_me", who, where, dir) aufgerufen. VERWEISE: forbidden, notify, forbidden_push_me GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: query_feel_msg DEKLARATION: string query_feel_msg() BESCHREIBUNG: Diese Funktion wird in einem Objekt aufgerufen, wenn this_player() das Objekt befuehlt. Liefert diese Funktion 0 zurueck, wird die Standardmeldung " befuehlt ." generiert, ansonsten wird diese Meldung umgebrochen und ausgegeben. VERWEISE: set_feel, query_feel GRUPPEN: grundlegendes SOURCE: /i/living/hands.c FUNKTION: forbidden_feel DEKLARATION: int forbidden_feel(mixed what, object who) BESCHREIBUNG: Bevor das Objekt oder Mapping (v-item) what vom Lebewesen who betastet werden kann, wird who->forbidden("feel", what) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann das Objekt nicht betastet werden. Die Funktion forbidden ruft in allen mit who->add_controller("forbidden_feel", other) angemeldeten Objekten other die Funktionen other->forbidden_feel(what, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und what kann nicht gefuehlt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_feel oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Dabei ist zu beachten, dass das Lebewesen what nicht gezielt betastet haben kann, sondern es durch Herumtasten im Raum erwischt haben kann. Bemerkung: Es wird auch what->forbidden("feel_me", who) und room->forbidden("feel_here", who, what) aufgerufen VERWEISE: forbidden, notify, notify_feel GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_feel_me DEKLARATION: int forbidden_feel_me(object who, mixed what) BESCHREIBUNG: Bevor das Objekt oder Mapping (v-item) what vom Lebewesen who betastet werden kann, wird what->forbidden("feel", who) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann das Objekt nicht betastet werden. Die Funktion forbidden ruft in allen mit what->add_controller( "forbidden_feel_me", other) angemeldeten Objekten other die Funktionen other->forbidden_feel_me(who, what) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und what kann nicht gefuehlt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_feel_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Dabei ist zu beachten, dass das Lebewesen what nicht gezielt betastet haben kann, sondern es durch Herumtasten im Raum erwischt haben kann. Bemerkung: Es wird auch who->forbidden("feel", what) und room->forbidden("feel_here", who, what) aufgerufen. VERWEISE: forbidden, notify, notify_feel_me GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_feel_here DEKLARATION: int forbidden_feel_here(object who, mixed what) BESCHREIBUNG: Bevor das Objekt oder Mapping (v-item) what vom Lebewesen who betastet werden kann, wird im Raum room->forbidden("feel_here", who, what) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann das Objekt nicht betastet werden. Die Funktion forbidden ruft in allen mit room->add_controller( "forbidden_feel_here", other) angemeldeten Objekten other die Funktionen other->forbidden_feel_here(who, what) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und what kann nicht gefuehlt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_feel_here oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Dabei ist zu beachten, dass das Lebewesen what nicht gezielt betastet haben kann, sondern es durch Herumtasten im Raum erwischt haben kann. Bemerkung: Es wird auch who->forbidden("feel", what) und what->forbidden("feel_me", who) aufgerufen. VERWEISE: forbidden, notify, notify_feel_here GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_feel DEKLARATION: void notify_feel(mixed what, object who) BESCHREIBUNG: Nachdem das Objekt oder Mapping (v-item) what vom Lebewesen who betastet wurde, wird who->notify("feel", what) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_feel", other) angemeldeten Objekten other die Funktionen other->notify_feel(what, who) auf. Sowohl who als auch other haben dann die Moeglichkeit, auf das Fuehlen von what zu reagieren. Bemerkung: Es wird auch what->notify("feel_me", who) und room->notify("feel_here", who, what) aufgerufen. VERWEISE: forbidden, notify, forbidden_feel GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_feel_me DEKLARATION: void notify_feel_me(object who, mixed what) BESCHREIBUNG: Nachdem das Objekt oder Mapping (v-item) what vom Lebewesen who betastet wurde, wird what->notify("feel_me", who) aufgerufen. Die Funktion notify ruft in allen mit what->add_controller("notify_feel_me", other) angemeldeten Objekten other die Funktionen other->notify_feel_me(who, what) auf. Sowohl what als auch other haben dann die Moeglichkeit, auf das Fuehlen von what zu reagieren. Bemerkung: Es wird auch who->notify("feel", what) und room->notify("feel_here", who, what) aufgerufen. VERWEISE: forbidden, notify, forbidden_feel GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: notify_feel_here DEKLARATION: void notify_feel_here(object who, mixed what) BESCHREIBUNG: Nachdem das Objekt oder Mapping (v-item) what vom Lebewesen who betastet wurde, wird im Raum room->notify("feel_here", who, what) aufgerufen. Die Funktion notify ruft in allen mit room->add_controller("notify_feel_here", other) angemeldeten Objekten other die Funktionen other->notify_feel_here(who, what) auf. Sowohl room als auch other haben dann die Moeglichkeit, auf das Fuehlen von what zu reagieren. Bemerkung: Es wird auch who->notify("feel", what) und what->notify("feel_me", who) aufgerufen. VERWEISE: forbidden, notify, forbidden_feel_here GRUPPEN: spieler, monster, haende SOURCE: /i/living/hands.c FUNKTION: attack DEKLARATION: int attack(object enemy, mixed weapon, int hand) BESCHREIBUNG: Mit attack wird angegriffen. Angegriffen wird das Opfer enemy, und zwar mit der Waffe weapon, die in der Hand mit dem Index hand gesucht wird. Attack liefert stets 1, auch wenn das frueher in der Doku anders drin stand. Aus Kompatibilitaetsgruenden muessen wir das wohl auch so beibehalten. VERWEISE: attackiere_command, werfe_command, schiesse_command GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: no_attack DEKLARATION: int no_attack(object attacker, object weapon) BESCHREIBUNG: Bevor ein Monster/Spieler angegriffen wird (toete Xyz) wird in dem zu toetendem Lebewesen die Funktion no_attack aufgerufen. Hierbei ist attacker der Angreifer und weapon die Waffe, mit der angegriffen wird. Antwortet no_attack mit 0, so wird ganz normal angegriffen, liefert no_attack jedoch einen Wert ungleich 0 so wird das Living nicht angegriffen, no_attack muss eine Meldung an attacker ausgeben (warum es nicht ging) und sollte in den Raum ebenfalls eine geben. Beispiel: ein Knallfrosch kann nicht mehr angegriffen werden: int no_attack(object attacker, object weapon) { attacker->send_message(MT_LOOK, MA_FIGHT, wrap(Der(attacker)+" versucht, "+den()+" anzugreifen, aber "+ er()+" huepft viel zu verrueckt durch die Gegend, " "um getroffen zu werden."), wrap(Der(attacker)+" versucht, Dich anzugreifen, aber " "Du huepfst ihm total verrueckt davon."), this_object()); attacker->send_message_to(attacker, MT_LOOK|MT_NOTIFY, MA_FIGHT, wrap("Du versuchst, "+den()+" anzugreifen, aber "+ er()+" huepft viel zu verrueckt durch die Gegend, " "um getroffen zu werden.")); return 1; } VERWEISE: attack GRUPPEN: spieler, monster, haende, kampf SOURCE: /i/living/hands.c FUNKTION: is_attack_forbidden DEKLARATION: int is_attack_forbidden(object victim, object weapon) BESCHREIBUNG: Um zu testen ob 'enemy' das Lebewesen 'victim' mit der Waffe 'weapon' angreifen darf, kann man enemy->is_attack_forbidden(victim, weapon) aufrufen. Liefert dieser Aufruf 1 zurueck, so ist dies verboten. Eine entsprechende Meldung wird dann ausgegeben. Ansonsten liefert es 0. is_attack_forbidden prueft dabei die Controller forbidden_attack, forbidden_my_attack, forbidden_use, ruft no_attack auf und testet auf den Raumtyp "kaempfen_verboten". Diese Funktion sollte immer dann aufgerufen werden, wenn eine Aktion geplant ist, die einen Kampf zur Folge hat (wie z.B. ein add_hp mit angegebenem Opfer). VERWEISE: attack, forbidden_attack, forbidden_my_attack, forbidden_use, no_attack GRUPPEN: spieler, monster, haende, kampf SOURCE: /i/living/hands.c FUNKTION: query_extra_damage DEKLARATION: int query_extra_damage(object feind, object monster) BESCHREIBUNG: Wird fuer jeden Schlag des Monsters im Monster selbst aufgerufen, damit man den Schaden auch in Abhaengigkeit vom Opfer festlegen kann. Oder Monstergifte verteilen. Oder ... Was immer diese Funktion zurueck liefert, wird auf den Schaden aufaddiert. Positive Werte bedeuten groesseren Schaden, negative Verschlechterung. VERWEISE: set_min_damage, set_max_damage GRUPPEN: monster, kampf, haende SOURCE: /i/living/hands.c FUNKTION: modify_hit DEKLARATION: void modify_hit(mapping info, object attacker) BESCHREIBUNG: Bevor das Lebewesen 'attacker' einen Schlag in einem regulaeren Kampf ausfuehrt, wird an allen bei 'attacker' angemeldeten Controllern diese Funktion aufgerufen. Das uebergebene Mapping info enthaelt neben allen Eintraegen, die an add_hp uebergeben werden, zusaetzlich den Eintrag AH_DAMAGE mit dem anvisierten Schaden. Alle Eintraege koennen veraendert werden, wird AH_VICTIM auf 0 gesetzt, so wird der Schlag nicht durchgefuehrt. VERWEISE: modify_hit_weapon, modify_hit_me, add_hp, modify_damage GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: modify_hit_weapon DEKLARATION: void modify_hit_weapon(mapping info, object attacker) BESCHREIBUNG: Bevor das Lebewesen 'attacker' einen Schlag in einem regulaeren Kampf ausfuehrt, wird an allen an der genutzten Waffe angemeldeten Controllern diese Funktion aufgerufen. Das uebergebene Mapping info enthaelt neben allen Eintraegen, die an add_hp uebergeben werden, zusaetzlich den Eintrag AH_DAMAGE mit dem anvisierten Schaden. Alle Eintraege, auch AH_WEAPON, koennen veraendert werden, wird AH_VICTIM auf 0 gesetzt, so wird der Schlag nicht durchgefuehrt. VERWEISE: modify_hit_weapon, modify_hit_me, add_hp, modify_damage GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: modify_hit_me DEKLARATION: void modify_hit_me(mapping info, object attacker) BESCHREIBUNG: Bevor das Lebewesen 'attacker' einen Schlag in einem regulaeren Kampf ausfuehrt, wird an allen am Opfer angemeldeten Controllern diese Funktion aufgerufen. Das uebergebene Mapping info enthaelt neben allen Eintraegen, die an add_hp uebergeben werden, zusaetzlich den Eintrag AH_DAMAGE mit dem anvisierten Schaden. Alle Eintraege ausser AH_WEAPON koennen veraendert werden, also auch das Opfer AH_VICTIM. Wird AH_VICTIM auf 0 gesetzt, so wird der Schlag nicht durchgefuehrt. VERWEISE: modify_hit_weapon, modify_hit_me, add_hp, modify_damage GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: notify_before_hit DEKLARATION: void notify_before_hit(object attacker, object victim, int damage, int critical, int hand, object weapon) BESCHREIBUNG: Bevor ein Schlag ausgefuehrt wird, wird beim Angreifer attacker->notify( "before_hit", attacker, victim, damage, critical, hand, weapon) aufgerufen. notify ruft dann in allen mit attacker->add_controller("notify_before_hit", other) angemeldeten Objekten other->notify_before_hit(attacker, victim, damage, critical, hand, weapon) auf. Diese Funktion kann dann entsprechend auf den bevorstehenden Schlag reagieren. Die Parameter im einzelnen: attacker: Derjenige, welcher den Schlag ausfuehrt. victim: Derjenige, welcher den Schlag abbekommt. damage: Der Schaden in Ausdauerpunkten critical: Wenn 1, dann ist dieser Schlag ein kritischer. hand: Die Hand, welcher den Schlag ausfuehrte. Geht von 0 bis num_hands-1. (siehe query_num_hands) weapon: Die Waffe, mit der zugeschlagen wird. (bei 0 sind es die Haende) VERWEISE: notify, add_controller, notify_before_hit_me, notify_before_hit_weapon, notify_after_hit GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: notify_before_hit_weapon DEKLARATION: void notify_before_hit_weapon(object attacker, object victim, int damage, int critical, int hand, object weapon) BESCHREIBUNG: Bevor ein Schlag ausgefuehrt wird, wird in der Waffe weapon->notify( "before_hit_weapon", attacker, victim, damage, critical, hand, weapon) aufgerufen. notify ruft dann in allen mit weapon->add_controller( "notify_before_hit_weapon", other) angemeldeten Objekten other->notify_before_hit_weapon(attacker, victim, damage, critical, hand, weapon) auf. Diese Funktion kann dann entsprechend auf den bevorstehenden Schlag reagieren. Die Parameter im einzelnen: attacker: Derjenige, welcher den Schlag ausfuehrt. victim: Derjenige, welcher den Schlag abbekommt. damage: Der Schaden in Ausdauerpunkten critical: Wenn 1, dann ist dieser Schlag ein kritischer. hand: Die Hand, welcher den Schlag ausfuehrte. Geht von 0 bis num_hands-1. (siehe query_num_hands) weapon: Die Waffe, mit der zugeschlagen wird. (bei 0 sind es die Haende) VERWEISE: notify, add_controller, notify_before_hit, notify_before_hit_me, notify_after_hit_weapon GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: notify_before_hit_me DEKLARATION: void notify_before_hit_me(object attacker, object victim, int damage, int critical, int hand, object weapon) BESCHREIBUNG: Bevor ein Schlag ausgefuehrt wird, wird beim Opfer victim->notify( "before_hit_me", attacker, victim, damage, critical, hand, weapon) aufgerufen. notify ruft dann in allen mit victim->add_controller("notify_before_hit_me", other) angemeldeten Objekten other->notify_before_hit_me(attacker, victim, damage, critical, hand, weapon) auf. Diese Funktion kann dann entsprechend auf den bevorstehenden Schlag reagieren. Die Parameter im einzelnen: attacker: Derjenige, welcher den Schlag ausfuehrt. victim: Derjenige, welcher den Schlag abbekommt. damage: Der Schaden in Ausdauerpunkten critical: Wenn 1, dann ist dieser Schlag ein kritischer. hand: Die Hand, welcher den Schlag ausfuehrte. Geht von 0 bis num_hands-1. (siehe query_num_hands) weapon: Die Waffe, mit der zugeschlagen wird. (bei 0 sind es die Haende) VERWEISE: notify, add_controller, notify_before_hit, notify_before_hit_weapon, notify_after_hit_me GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: notify_after_hit DEKLARATION: void notify_after_hit(object attacker, object victim, int damage, int critical, int hand, object weapon) BESCHREIBUNG: Nachdem ein Schlag ausgefuehrt wurde, wird beim Angreifer attacker->notify( "after_hit", attacker, victim, damage, critical, hand, weapon) aufgerufen. notify ruft dann in allen mit attacker->add_controller("notify_after_hit", other) angemeldeten Objekten other->notify_after_hit(attacker, victim, damage, critical, hand, weapon) auf. Diese Funktion kann dann entsprechend auf den Schlag reagieren. Die Parameter im einzelnen: attacker: Derjenige, welcher den Schlag ausfuehrt. victim: Derjenige, welcher den Schlag abbekommt. (Kann inzwischen 0 sein, wenn er gestorben ist.) damage: Der Schaden in Ausdauerpunkten critical: Wenn 1, dann ist dieser Schlag ein kritischer. hand: Die Hand, welcher den Schlag ausfuehrte. Geht von 0 bis num_hands-1. (siehe query_num_hands) weapon: Die Waffe, mit der zugeschlagen wird. (bei 0 sind es die Haende) VERWEISE: notify, add_controller, notify_after_hit_me, notify_after_hit_weapon, notify_before_hit GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: notify_after_hit_weapon DEKLARATION: void notify_after_hit_weapon(object attacker, object victim, int damage, int critical, int hand, object weapon) BESCHREIBUNG: Nachdem ein Schlag ausgefuehrt wurde, wird in der Waffe weapon->notify( "after_hit_weapon", attacker, victim, damage, critical, hand, weapon) aufgerufen. notify ruft dann in allen mit weapon->add_controller( "notify_after_hit_weapon", other) angemeldeten Objekten other->notify_after_hit_weapon(attacker, victim, damage, critical, hand, weapon) auf. Diese Funktion kann dann entsprechend auf den Schlag reagieren. Die Parameter im einzelnen: attacker: Derjenige, welcher den Schlag ausfuehrt. victim: Derjenige, welcher den Schlag abbekommt. (Kann inzwischen 0 sein, wenn er gestorben ist.) damage: Der Schaden in Ausdauerpunkten critical: Wenn 1, dann ist dieser Schlag ein kritischer. hand: Die Hand, welcher den Schlag ausfuehrte. Geht von 0 bis num_hands-1. (siehe query_num_hands) weapon: Die Waffe, mit der zugeschlagen wird. (bei 0 sind es die Haende) VERWEISE: notify, add_controller, notify_after_hit, notify_after_hit_me, notify_before_hit_weapon GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: notify_after_hit_me DEKLARATION: void notify_after_hit_me(object attacker, object victim, int damage, int critical, int hand, object weapon) BESCHREIBUNG: Nachdem ein Schlag ausgefuehrt wurde, wird beim Opfer victim->notify( "after_hit_me", attacker, victim, damage, critical, hand, weapon) aufgerufen. notify ruft dann in allen mit victim->add_controller("notify_after_hit_me", other) angemeldeten Objekten other->notify_after_hit_me(attacker, victim, damage, critical, hand, weapon) auf. Diese Funktion kann dann entsprechend auf den Schlag reagieren. Die Parameter im einzelnen: attacker: Derjenige, welcher den Schlag ausfuehrt. victim: Derjenige, welcher den Schlag abbekommt. (Kann inzwischen 0 sein, wenn er gestorben ist.) damage: Der Schaden in Ausdauerpunkten critical: Wenn 1, dann ist dieser Schlag ein kritischer. hand: Die Hand, welcher den Schlag ausfuehrte. Geht von 0 bis num_hands-1. (siehe query_num_hands) weapon: Die Waffe, mit der zugeschlagen wird. (bei 0 sind es die Haende) VERWEISE: notify, add_controller, notify_after_hit, notify_after_hit_weapon, notify_before_hit_me GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: stop_all_fights DEKLARATION: void stop_all_fights() BESCHREIBUNG: Tut das, wonach es klingt: Das Monster oder der Spieler stellt alle Kaempfe ein. Und zwar ohne jede Meldung; bei Monstern wird auch die attack_list geloescht. VERWEISE: stop_command GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: no_wield DEKLARATION: int no_wield(object lebewesen) BESCHREIBUNG: Diese Funktion wird in einer Waffe vor dem Fuehren derselben aufgerufen. Parameter ist das Lebewesen, das versucht, die Waffe zu fuehren. Liefert die Waffe einen Wert ungleich 0 zurueck, so kann die Waffe nicht gefuehrt werden. Die Waffe muss im Falle eines nicht-fuehren duerfens selber eine Meldung geben, beispielsweise mit send_message_to, nicht jedoch mit notify_fail, warum das Lebewesen die Waffe nicht fuehren durfte. VERWEISE: unwield, wield GRUPPEN: spieler, monster, kampf, haende SOURCE: /i/living/hands.c FUNKTION: wield DEKLARATION: varargs int wield(object waffe, int hand, int flags) BESCHREIBUNG: Mit wield wird die Waffe waffe in der Hand mit dem Index hand gefuehrt. Mit dem optionalen flags&1==1 wird keine Erfolgsmeldung auszugeben. Bei optionalen flags&2==2 wird das mehrhaendige Fuehren einer Waffe zugelassen. VERWEISE: unwield, no_wield GRUPPEN: spieler, monster, kampf, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_wield DEKLARATION: int forbidden_wield(object weapon, int hand, object who) BESCHREIBUNG: Bevor ein Lebewesen who die Waffe weapon mit der Hand hand fuehren kann, wird who->forbidden("wield", weapon, hand) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird die Waffe nicht gefuehrt. Die Funktion forbidden ruft in allen mit who->add_controller("forbidden_wield", other) angemeldeten Objekten other die Funktionen other->forbidden_wield( weapon, hand, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und die Waffe kann nicht gefuehrt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und evtl. den Raum muss der Programmierer in forbidden_wield oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Beispielanwendung: Auf Monster oder Traeger 'spezialisierte' Waffen, der Runenbeutel der Magier sorgt dafuer, dass Magier keine Metallwaffen fuehren koennen. Oder eine verletzte Hand, die kurzzeitig keine Waffe fuehren kann. Bemerkung: Es wird auch weapon->forbidden("wield_me", who, hand) aufgerufen. VERWEISE: forbidden, notify, notify_wield, attack, forbidden_use GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/living/hands.c FUNKTION: forbidden_wield_me DEKLARATION: int forbidden_wield_me(object who, int hand, object weapon) BESCHREIBUNG: Bevor ein Lebewesen who die Waffe weapon mit der Hand hand fuehren kann, wird weapon->forbidden("wield_me", who, hand) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird die Waffe nicht gefuehrt. Die Funktion forbidden ruft in allen mit who->add_controller( "forbidden_wield_me", other) angemeldeten Objekten other die Funktionen other->forbidden_wield_me(who, hand, weapon) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und die Waffe kann nicht gefuehrt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und evtl. den Raum muss der Programmierer in forbidden_wield_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Beispielanwendung: Auf Monster oder Traeger 'spezialisierte' Waffen, der Runenbeutel der Magier sorgt dafuer, dass Magier keine Metallwaffen fuehren koennen. Bemerkung: Es wird auch who->forbidden("wield", weapon, hand) aufgerufen. VERWEISE: forbidden, notify, notify_wield, attack, forbidden_use GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/living/hands.c FUNKTION: notify_wield DEKLARATION: void notify_wield(object weapon, int hand, object who) BESCHREIBUNG: Nachdem das Lebewesen who die Waffe weapon in der Hand hand gefuehrt hat, wird who->notify("wield", weapon, hand) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_wield", other) angemeldeten Objekten other die Funktionen other->notify_wield(weapon, hand, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf das Fuehren der Waffe weapon zu reagieren. Bemerkung: Es wird auch weapon->notify("wield_me", who, hand) aufgerufen. VERWEISE: forbidden, notify, forbidden_wield, notify_use GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/living/hands.c FUNKTION: notify_wield_me DEKLARATION: void notify_wield_me(object who, int hand, object weapon) BESCHREIBUNG: Nachdem das Lebewesen who die Waffe weapon in der Hand hand gefuehrt hat, wird weapon->notify("wield_me", who, hand) aufgerufen. Die Funktion notify ruft in allen mit weapon->add_controller("notify_wield_me", other) angemeldeten Objekten other die Funktionen other->notify_wield_me(who, hand, weapon) auf. Sowohl weapon als auch other haben dann eine Moeglichkeit, auf das Fuehren der Waffe zu reagieren. Bemerkung: Es wird auch who->notify("wield", weapon, hand) aufgerufen. VERWEISE: forbidden, notify, forbidden_wield, notify_use GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/living/hands.c FUNKTION: unwield DEKLARATION: varargs int unwield(object ob, int hand, int flags) BESCHREIBUNG: Mit unwield kann man das gefuehrte Objekt ob aus der der Hand mit dem Index hand wieder senken. Beim optionalen flags==1 wird keine Meldung ausgegeben. VERWEISE: wield, no_wield GRUPPEN: spieler, monster, kampf, haende SOURCE: /i/living/hands.c FUNKTION: forbidden_unwield DEKLARATION: int forbidden_unwield(object weapon, int hand, object who) BESCHREIBUNG: Bevor ein Lebewesen who die Waffe weapon in der Hand hand senken kann, wird who->forbidden("unwield", weapon, hand) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird die Waffe nicht gesenkt. Die Funktion forbidden ruft in allen mit who->add_controller("forbidden_unwield", other) angemeldeten Objekten other die Funktionen other->forbidden_unwield( weapon, hand, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und die Waffe kann nicht gesenkt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und evtl. den Raum muss der Programmierer in forbidden_unwield oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch weapon->forbidden("unwield_me", who, hand) aufgerufen. VERWEISE: forbidden, notify, notify_unwield, attack, forbidden_use GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/living/hands.c FUNKTION: forbidden_unwield_me DEKLARATION: int forbidden_unwield_me(object who, int hand, object weapon) BESCHREIBUNG: Bevor ein Lebewesen who die Waffe weapon in der Hand hand senken kann, wird weapon->forbidden("unwield_me", who, hand) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird die Waffe nicht gesenkt. Die Funktion forbidden ruft in allen mit who->add_controller( "forbidden_unwield_me", other) angemeldeten Objekten other die Funktionen other->forbidden_unwield_me(who, hand, weapon) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und die Waffe kann nicht gesenkt werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und evtl. den Raum muss der Programmierer in forbidden_unwield_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Beispielanwendung: verzauberte Waffen, die sich nicht so einfach senken lassen Bemerkung: Es wird auch who->forbidden("unwield", weapon, hand) aufgerufen. VERWEISE: forbidden, notify, notify_unwield, attack, forbidden_use GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/living/hands.c FUNKTION: notify_unwield DEKLARATION: void notify_unwield(object weapon, int hand, object who) BESCHREIBUNG: Nachdem das Lebewesen who die Waffe weapon in der Hand hand gesenkt hat, wird who->notify("unwield", weapon, hand) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_unwield", other) angemeldeten Objekten other die Funktionen other->notify_unwield(weapon, hand, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf das Senken der Waffe weapon zu reagieren. Bemerkung: Es wird auch weapon->notify("unwield_me", who, hand) aufgerufen. VERWEISE: forbidden, notify, forbidden_unwield, notify_use GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/living/hands.c FUNKTION: notify_unwield_me DEKLARATION: void notify_unwield_me(object who, int hand, object weapon) BESCHREIBUNG: Nachdem das Lebewesen who die Waffe weapon in der Hand hand gesenkt hat, wird weapon->notify("unwield_me", who, hand) aufgerufen. Die Funktion notify ruft in allen mit weapon->add_controller("notify_unwield_me", other) angemeldeten Objekten other die Funktionen other->notify_unwield_me(who, hand, weapon) auf. Sowohl weapon als auch other haben dann eine Moeglichkeit, auf das Senken der Waffe zu reagieren. Bemerkung: Es wird auch who->notify("unwield", weapon, hand) aufgerufen. VERWEISE: forbidden, notify, forbidden_unwield, notify_use GRUPPEN: spieler, monster, haende, waffen SOURCE: /i/living/hands.c FUNKTION: set_max_hp DEKLARATION: void set_max_hp(int max_hp) BESCHREIBUNG: Damit werden die maximalen APs eines Spielers(Monsters) gesetzt. VERWEISE: set_hp, query_hp, query_max_hp GRUPPEN: spieler, monster, kampf SOURCE: /i/living/hands.c FUNKTION: set_hp DEKLARATION: void set_hp(int hp) BESCHREIBUNG: Damit kann man die APs eines Spielers(Monsters) setzen, aber nur bis maximal query_max_hp(). VERWEISE: give_hp, add_hp, query_hp, query_max_hp, set_max_hp GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: get_combat_message DEKLARATION: string* get_combat_message(object victim, int hps, mapping infos) BESCHREIBUNG: Berechnet aus den angegeben Informationen die Kampfmeldungen fuer das Opfer, alle anderen und den Angreifer und liefert sie in dieser Reihenfolge in einem Array zurueck. Es beachtet dabei, ob Opfer oder Angreifer kurze Kampfmeldungen haben wollen. VERWEISE: add_hp GRUPPEN: kampf SOURCE: /i/living/hands.c FUNKTION: add_hp DEKLARATION: varargs int add_hp(int hps, mapping infos) BESCHREIBUNG: Gibt dem Vieh, dem diese Funktion gehoert, ein paar APs oder zieht sie ihm AP (wenn 'hps' negativ ist). Der zweite Parameter ist optional und kann folgende Infos zur Heilung oder zum Schaden beinhalten: (Die Eintraege sind Defines aus ) Name Typ Bedeutung --------------- --------------- ----------------------------------------------- AH_ATTACKER object Im Kampf: Der Angreifer. Ist dieser Eintrag angegeben, so zaehlt der Schaden zu einer Kampfhandlung zugehoerig. Es wird dann die Ruestung des Opfers und sein Verteidungsmodus beruecksichtigt, Kampfmeldungen werden ausgegeben. AH_WEAPON object/mapping Im Kampf: Die benutzte Waffe (kann auch eine natural#weapon sein) AH_PROJECTILE object Im Kampf: Das Geschoss (sofern vorhanden) AH_CAUSE object Aufrufer von add_hp, also z.B. der Virus, das Getraenk oder die Nahrung. (wird z.B. fuer die Generation der Todesmeldung genutzt.) Bei Nichtangabe ist es: previous_object(caller_stack_depth()-1) AH_ORIGINATOR string Der real_cap_name, welcher den verursachende Spieler angibt (fuer die Racheregelung und M-Austeilung). AH_FLAGS int Eine Oder-Kombination von Flags. Eine Liste der moeglichen Flags gibt es weiter unten. AH_MESSAGE string, Die Meldung fuer das Opfer und alle anderen. string*, Details dazu siehe weiter unten. closure AH_ERF_TOD string Die erf-tod-Meldung fuer den Gestorbenen. AH_ERF_TOD_OTHER string Die erf-tod-Meldung fuer den Stein in der Kathedrale (wo die automatische Uebersetzung in die 3. Person nicht klappt.) Sie sollte den real_cap_name des Opfers enthalten. AH_ERF_RETTUNG string Die Meldung fuer Tafel bei Lyrion. Sie sollte den real_cap_name des Opfers enthalten. AH_HEAL_TYPE int Gibt die Art der Heilung an. Folgende Moeglichkeiten gibt es: AH_HEAL_NORMAL Normale Heilung AH_HEAL_MAGIC Magische Heilung AH_HEAL_MEDIC Irdische Heilung mit Verbaende, Pflaster, Salben etc. AH_DAMAGE_TYPE string* Eine Liste von Schadensarten, denen dieser Schaden zugerechnet werden kann. Folgende stehen zur Auswahl: stich, schnitt, stumpf, heilig, daemonisch, tod, leben, feuer, wasser, erde, luft magie, anstrengung, kaelte, waerme, explosion, saeure, elektrizitaet, laerm Fuer die hier genannten Typen gibt es Defines der Form AHD_TOD, AHD_LEBEN usw.. AH_MAPI mapping Bei einem MAPIL-Zauberspruch kann hier das Mapping mit den erweiterten Daten uebergeben werden (letzter Parameter bei mapil_forbidden und mapil_notify). AH_COMBAT_LOG mapping Dieses Mapping enthaelt die Informationen ueber die Beanspruchung der Ruestungen. Es wird von add_hp generiert und ist daher nur fuer die Meldungsfunktionen interessant. Jeder Eintrag (wobei das Ruestungsobjekt als Schluessel fungiert) enthaelt als ersten Wert die absolute Schutzwirkung und als zweiten Wert die relative Schutzwerkung im Verhaeltnis zum Gesamtschaden in Promille. Ein zusaetzlicher Eintrag mit dem Angreiferobjekt enthaelt den Gesamtschaden. Folgende Flags kann man bei AH_FLAGS angeben: --------------------------------------------- AH_NO_ARMOUR Die Ruestung des Opfers wird nicht beachtet. (Sie wird normalerweise beachtet, wenn ein Angreifer angegeben wurde.) AH_ARMOUR Die Ruestung des Opfers wird beachtet. (Sie wird normalerweise nicht beachtet, wenn kein Angreifer angegeben wurde.) AH_NO_MESSAGE Es wird keine Meldung ausgegeben. (Eine Kampfmeldung wird normalerweise ausgegeben, wenn ein Angreifer angegeben wurde.) AH_CRITICAL Dieser Schlag ist ein kritischer Treffer. (Dies wird nur fuer die Meldungsgeneration verwendet.) AH_NO_AGGRESSION Dieser AP-Abzug wird bei der Kampf-/Racheregelung nicht beachtet. Dieses Flag ist nur nach Absprache mit den Admins zu verwenden. AH_NO_GUARDIAN_ANGEL Falls der Spieler mit diesem Abzug stirbt, wird ihm kein Schutzengel der Welt helfen koennen. Dieses Flag ist privilegiert und seine Benutzung daher bei den Admins zu beantragen. AH_DONT_DIE Das Lebewesen kommt damit nicht unter 0 APs. Dieses Flag ist privilegiert und seine Benutzung daher bei den Admins zu beantragen. AH_DIE Das Lebewesen kommt damit garantiert unter 0 APs. Dieses Flag impliziert AH_NO_ARMOUR und hebt AH_ARMOUR auf. Zusammen mit AH_DONT_DIE bewirkt es, dass das Lebewesen auf genau 0 APs kommt. AH_NO_SKILL Wenn das Opfer getoetet wird bekommt der Angreifer keine Skillpunkte auf skills,getoetet,kleingetier/grosswild. Gedacht ist es fuer sehr einfache Kills, die praktisch ohne Kampf verlaufen. Wenn man z.B. innerhalb einer Quest eine Saeureglas auf ein Steinmonster wirft und es dadurch auf der Stelle getoetet wird, dann sollte dies keine Kampfskillpunkte geben. Meldungen --------- Als Meldung kann bei AH_MESSAGE ein einfacher String, ein Array aus Strings oder eine Closure angegeben werden. Wurde nur ein String angegeben, so wird dieser nur an das Opfer ausgegeben. Ein Array aus Strings enthaelt (in dieser Reihenfolge) die Meldungen fuer das Opfer, alle anderen im Raum und - sofern es sich um einen Kampf handelt - die Meldung fuer den Angreifer. Wurde eine Closure angegeben, so wird sie mit dem Lebewesen (dem Opfer) als erstes Argument, 'hps' als zweites und dem info-Mapping als drittes Argument aufgerufen. Es sollte dann einen String oder String-Array zurueckliefern. Die Meldungen werden automatisch umgebrochen. Wenn eine Meldung 0 ist (oder fehlt, weil nur ein String, also nur eine Meldung fuer das Opfer, angegeben wurde) so wird die Standardmeldung genommen (dies ist im Kampf die normale Kampfmeldung, ansonsten nix). Wenn Meldungen angegeben wurden, wird das Flag AH_NO_MESSAGE wirkungslos. Rueckgabewert ------------- Ein negativer Rueckgabewert zeigt, dass derjenige bereits tot ist oder damit gestorben ist. Ein positiver Rueckgabewert bedeutet, dass derjenige die Heilung oder den Punktabzug lebend ueberstanden hat. Eine 0 wird nur geliefert, wenn eine 0 als 1. Parameter uebergeben wurde. VERWEISE: get_combat_message, give_hp, set_hp, query_hp, query_max_hp GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: modify_damage DEKLARATION: void modify_damage(mapping infos, object opfer) BESCHREIBUNG: Bevor add_hp einen Schaden auf das Lebewesen opfer anwendet, wird in allen mit opfer->add_controller("modify_damage", other) angemeldeten Objekten other die Funktion modify_damage aufgerufen. Das uebergebene Mapping infos enthaelt neben allen Eintraegen, die add_hp uebergeben wurden, zusaetzlich den Eintrag AH_DAMAGE, welcher die Anzahl abzuziehender APs (als positive Zahl) angibt. Alle Eintraege koennen geaendert, weitere Eintraege auch hinzugefuegt werden. VERWEISE: modify, modify_healing, notify_damage, add_hp, add_controller GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: modify_healing DEKLARATION: void modify_healing(mapping infos, object lebewesen) BESCHREIBUNG: Bevor mittels add_hp das Lebewesen geheilt wird, wird in allen mit opfer->add_controller("modify_healing", other) angemeldeten Objekten other die Funktion modify_healing aufgerufen. Das uebergebene Mapping infos enthaelt neben allen Eintraegen, die add_hp uebergeben wurden, zusaetzlich den Eintrag AH_HEALING, welcher die Anzahl hinzuzufuegender APs angibt. Alle Eintraege koennen geaendert, weitere Eintraege auch hinzugefuegt werden. VERWEISE: modify, modify_damage, notify_healing, add_hp, add_controller GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: notify_damage DEKLARATION: void notify_damage(mapping infos, object opfer) BESCHREIBUNG: Kurz bevor add_hp einen Schaden auf das Lebewesen opfer anwendet (und das Opfer damit evntl. stirbt), wird in allen mit opfer->add_controller( "notify_damage", other) angemeldeten Objekten other die Funktion notify_damage aufgerufen. Das uebergebene Mapping infos enthaelt neben allen Eintraegen, die add_hp uebergeben wurden, zusaetzlich den Eintrag AH_DAMAGE, welcher die Anzahl abzuziehender APs (als positive Zahl) angibt. VERWEISE: notify, notify_healing, modify_damage, add_hp, add_controller GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: notify_healing DEKLARATION: void notify_healing(mapping infos, object lebewesen) BESCHREIBUNG: Nachdem mittels add_hp das Lebewesen geheilt wurde, wird in allen mit opfer->add_controller("notify_healing", other) angemeldeten Objekten other die Funktion notify_healing aufgerufen. Das uebergebene Mapping infos enthaelt neben allen Eintraegen, die add_hp uebergeben wurden, zusaetzlich den Eintrag AH_HEALING, welcher die Anzahl hinzuzufuegender APs angibt. VERWEISE: notify, notify_damage, modify_healing, add_hp, add_controller GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: query_protectee DEKLARATION: object query_protectee() BESCHREIBUNG: Diese Funktion liefert das Lebewesen zurueck, welches beschuetzt wird, selbst dann, wenn das beschuetzte Lebewesen gerade nicht im gleichen Raum ist, damit der Schutz praktisch nicht existent ist. 0 wird zurueckgegeben, wenn kein Lebewesen gerade beschuetzt wird. VERWEISE: forbidden_protect, notify_protect, notify_unprotect GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: forbidden_protect DEKLARATION: string forbidden_protect(object protector, object protectee, string* ids) BESCHREIBUNG: Wenn das Lebewesen protector das Lebewesen protectee beschuetzen will, so wird in allen mit protector->add_controller("forbidden_protect", other) angemeldeten Objekten other die Funktion forbidden_protect aufgerufen. Liefert einer dieser Funktionen einen Wert!=0 zurueck, so wird das Beschuetzen verboten. Der zurueckgelieferte Wert sollte ein String sein, welcher spaeter automatisch umgebrochen und dem Lebewesen als Fehlermeldung mitgeteilt wird. ids enthaelt eine Liste aller IDs, vor denen beschuetzt wird. Ist es 0, so wird vor allem geschuetzt. VERWEISE: add_controller, notify_protect, notify_unprotect, forbidden, forbidden_protect_me, forbidden_protect_here GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: forbidden_protect_me DEKLARATION: string forbidden_protect_me(object protector, object protectee, string* ids) BESCHREIBUNG: Wenn das Lebewesen protector das Lebewesen protectee beschuetzen will, so wird in allen mit protectee->add_controller("forbidden_protect_me", other) angemeldeten Objekten other die Funktion forbidden_protect_me aufgerufen. Liefert einer dieser Funktionen einen Wert!=0 zurueck, so wird das Beschuetzen verboten. Der zurueckgelieferte Wert sollte ein String sein, welcher spaeter automatisch umgebrochen und dem Lebewesen als Fehlermeldung mitgeteilt wird. ids enthaelt eine Liste aller IDs, vor denen beschuetzt wird. Ist es 0, so wird vor allem geschuetzt. VERWEISE: add_controller, notify_protect_me, notify_unprotect_me, forbidden, forbidden_protect, forbidden_protect_here GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: forbidden_protect_here DEKLARATION: string forbidden_protect_here(object protector, object protectee, string* ids) BESCHREIBUNG: Wenn das Lebewesen protector das Lebewesen protectee im Raum room beschuetzen will, so wird in allen mit room->add_controller("forbidden_protect_here", other) angemeldeten Objekten other die Funktion forbidden_protect_here aufgerufen. Liefert einer dieser Funktionen einen Wert!=0 zurueck, so wird das Beschuetzen verboten. Der zurueckgelieferte Wert sollte ein String sein, welcher spaeter automatisch umgebrochen und dem Lebewesen als Fehlermeldung mitgeteilt wird. ids enthaelt eine Liste aller IDs, vor denen beschuetzt wird. Ist es 0, so wird vor allem geschuetzt. VERWEISE: add_controller, notify_protect_here, notify_unprotect_here, forbidden, forbidden_protect, forbidden_protect_me GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: notify_protect DEKLARATION: void notify_protect(object protector, object protectee, string* ids) BESCHREIBUNG: Wenn das Lebewesen protector das Lebewesen protectee beschuetzen will, so wird in allen mit protector->add_controller("notify_protect", other) angemeldeten Objekten other die Funktion notify_protect aufgerufen. ids enthaelt eine Liste aller IDs, vor denen beschuetzt wird. Ist es 0, so wird vor allem geschuetzt. VERWEISE: add_controller, forbidden_protect, notify_unprotect, notify, notify_protect_me, notify_protect_here GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: notify_protect_me DEKLARATION: void notify_protect_me(object protector, object protectee, string* ids) BESCHREIBUNG: Wenn das Lebewesen protector das Lebewesen protectee beschuetzen will, so wird in allen mit protectee->add_controller("notify_protect_me", other) angemeldeten Objekten other die Funktion notify_protect_me aufgerufen. ids enthaelt eine Liste aller IDs, vor denen beschuetzt wird. Ist es 0, so wird vor allem geschuetzt. VERWEISE: add_controller, forbidden_protect_me, notify_unprotect_me, notify, notify_protect, notify_protect_here GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: notify_protect_here DEKLARATION: void notify_protect_here(object protector, object protectee, string* ids) BESCHREIBUNG: Wenn das Lebewesen protector das Lebewesen protectee im Raum room beschuetzen will, so wird in allen mit room->add_controller("notify_protect_here", other) angemeldeten Objekten other die Funktion notify_protect_here aufgerufen. ids enthaelt eine Liste aller IDs, vor denen beschuetzt wird. Ist es 0, so wird vor allem geschuetzt. VERWEISE: add_controller, forbidden_protect_here, notify_unprotect_here, notify, notify_protect, notify_protect_me GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: notify_unprotect DEKLARATION: void notify_unprotect(object protector, object protectee, string* ids) BESCHREIBUNG: Wenn das Lebewesen protector das Lebewesen protectee nicht mehr beschuetzen will, so wird in allen mit protector->add_controller("notify_unprotect", other) angemeldeten Objekten other die Funktion notify_unprotect aufgerufen. ids enthaelt eine Liste aller IDs, vor denen beschuetzt wurde. Ist es 0, so wurde vor allem geschuetzt. VERWEISE: add_controller, forbidden_protect, notify_protect, notify, notify_unprotect_me, notify_unprotect_here GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: notify_unprotect_me DEKLARATION: void notify_unprotect_me(object protector, object protectee, string* ids) BESCHREIBUNG: Wenn das Lebewesen protector das Lebewesen protectee nicht mehr beschuetzen will, so wird in allen mit protectee->add_controller("notify_unprotect_me", other) angemeldeten Objekten other die Funktion notify_unprotect_me aufgerufen. ids enthaelt eine Liste aller IDs, vor denen beschuetzt wurde. Ist es 0, so wurde vor allem geschuetzt. VERWEISE: add_controller, forbidden_protect_me, notify_protect_me, notify, notify_unprotect, notify_unprotect_here GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: notify_unprotect_here DEKLARATION: void notify_unprotect_here(object protector, object protectee, string* ids) BESCHREIBUNG: Wenn das Lebewesen protector das Lebewesen protectee im Raum room nicht mehr beschuetzen will, so wird in allen mit room->add_controller( "notify_unprotect_here", other) angemeldeten Objekten other die Funktion notify_unprotect_here aufgerufen. ids enthaelt eine Liste aller IDs, vor denen beschuetzt wurde. Ist es 0, so wurde vor allem geschuetzt. VERWEISE: add_controller, forbidden_protect_here, notify_protect_here, notify, notify_unprotect, notify_unprotect_me GRUPPEN: monster, spieler, kampf SOURCE: /i/living/hands.c FUNKTION: notify_schutzengel DEKLARATION: void notify_schutzengel(mapping infos, object lebewesen) BESCHREIBUNG: Unmittelbar, bevor ein Lebewesen (durch AP-Abzug) fast gestorben waere, dann aber vom Schutzengel gerettet wird - es hat also noch nicht die Rettung miterlebt - wird die Funktion notify("schutzengel", infos) in ihm aufgerufen. infos ist dabei das Mapping, welches beim AP-Abzug durch add_hp angegeben wurde. Ist ein Objekt beim Gestorbenen als Controller fuer "notify_schutzengel" mit lebewesen->add_controller("notify_schutzengel", this_object()) angemeldet, so wird dann in diesem Objekt die Funktion void notify_schutzengel(mapping infos, object lebewesen) aufgerufen. VERWEISE: notify_died, forbidden, notify, notify_death GRUPPEN: spieler, monster SOURCE: /i/living/hands.c FUNKTION: notify_death DEKLARATION: void notify_death(mapping infos, object lebewesen) BESCHREIBUNG: Unmittelbar, bevor ein Lebewesen (durch AP-Abzug) stirbt, - es ist also gerade noch lebendig - wird die Funktion notify("death", infos) in ihm aufgerufen. infos ist dabei das Mapping, welches beim AP-Abzug durch add_hp angegeben wurde. Ist ein Objekt beim Gestorbenen als Controller fuer "notify_death" mittels lebewesen->add_controller("notify_death", this_object()) angemeldet, so wird dann in diesem Objekt die Funktion void notify_death(mapping infos, object lebewesen) aufgerufen. VERWEISE: notify_died, forbidden, notify, notify_schutzengel GRUPPEN: spieler, monster SOURCE: /i/living/hands.c FUNKTION: set_probability_for_guardian_angel DEKLARATION: nomask void set_probability_for_guardian_angel(int sterblich, int unsterblich) BESCHREIBUNG: Damit setzt man die Wahrscheinlichkeit fuer die Rettung durch seinen Schutzengel. Dies duerfen nur ausgewaehlte Objekte. Nach einer Rettung oder einem Tod wird die Wahrscheinlichkeit auf den Standardwert von 1,99 gesetzt. VERWEISE: query_probability_for_guardian_angel, add_hp GRUPPEN: spieler, kampf SOURCE: /i/living/hands.c FUNKTION: query_probability_for_guardian_angel DEKLARATION: nomask int *query_probability_for_guardian_angel() BESCHREIBUNG: Liefert die Wahrscheinlichkeit fuer die Rettung durch einen Schutzengel als Array mit dem Wert fuer sterbliche Spieler als erstes und als zweiten Eintrag den Wert fuer unsterbliche Engel. VERWEISE: set_probability_for_guardian_angel, add_hp GRUPPEN: spieler, kampf SOURCE: /i/living/hands.c FUNKTION: forbidden_attack DEKLARATION: int forbidden_attack(object attacker, object weapon, object enemy) BESCHREIBUNG: Bevor ein Lebewesen enemy vom Lebewesen attacker mit der Waffe weapon angegriffen werden kann, wird enemy->forbidden("attack", attacker, weapon) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, findet der Angriff nicht statt. Die Funktion forbidden ruft in allen mit enemy->add_controller( "forbidden_attack", other) angemeldeten Objekten other die Funktionen other->forbidden_attack(attacker, weapon, enemy) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Lebewesen enemy kann nicht angegriffen werden. Fuer die Ausgabe einer Meldung an die Lebewesen attacker und enemy und den Raum muss der Programmierer in forbidden_attack oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Beispielanwendung: Ein Orkamulett, dass Angriffe von Orks verhindert. VERWEISE: forbidden, notify, notify_attack, attack, no_attack, forbidden_use, forbidden_my_attack, forbidden_attack_here GRUPPEN: spieler, monster, haende, kampf SOURCE: /i/living/hands.c FUNKTION: notify_attack DEKLARATION: void notify_attack(object attacker, object weapon, object enemy) BESCHREIBUNG: Nachdem das Lebewesen attacker ein Lebewesen enemy mit der Waffe weapon attackiert hat, wird enemy->notify("attack", attacker, weapon) aufgerufen. Die Funktion notify ruft in allen mit enemy->add_controller("notify_attack", other) angemeldeten Objekten other die Funktionen other->notify_attack( attacker, weapon, enemy) auf. Sowohl enemy als auch other haben dann eine Moeglichkeit, auf den Angriff von attacker mit der Waffe weapon zu reagieren. VERWEISE: forbidden, notify, forbidden_attack, attack, no_attack, notify_my_attack, notify_attack_here, notify_use GRUPPEN: spieler, monster, haende, kampf SOURCE: /i/living/hands.c FUNKTION: forbidden_attack_here DEKLARATION: int forbidden_attack_here(object attacker, object enemy, object weapon) BESCHREIBUNG: Bevor ein Lebewesen enemy vom Lebewesen attacker mit der Waffe weapon angegriffen werden kann, wird in der Umgebung env->forbidden("attack_here", attacker, enemy, weapon) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, findet der Angriff nicht statt. Die Funktion forbidden ruft in allen mit env->add_controller( "forbidden_attack_here", other) angemeldeten Objekten other die Funktionen other->forbidden_attack_here(attacker, enemy, weapon) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Lebewesen enemy kann nicht angegriffen werden. Fuer die Ausgabe einer Meldung an die Lebewesen attacker und enemy und den Raum muss der Programmierer in forbidden_attack_here oder forbidden, falls er diese Funktion ueberlagern will, sorgen. VERWEISE: forbidden, notify, add_controller, forbidden_attack, notify_attack, notify_attack_here, attack, no_attack, forbidden_use, forbidden_my_attack GRUPPEN: spieler, monster, haende, kampf SOURCE: /i/living/hands.c FUNKTION: notify_attack_here DEKLARATION: void notify_attack_here(object attacker, object enemy, object weapon) BESCHREIBUNG: Nachdem das Lebewesen attacker ein Lebewesen enemy mit der Waffe weapon attackiert hat, wird in der Umgebung env->notify("attack_here", attacker, enemy, weapon) aufgerufen. Die Funktion notify ruft in allen mit env->add_controller( "notify_attack_here", other) angemeldeten Objekten other die Funktionen other->notify_attack_here(attacker, enemy, weapon) auf. Der Raum hat so die Moeglichkeit darauf zu reagieren. VERWEISE: forbidden, notify, add_controller, forbidden_attack, notify_attack, forbidden_attack_here, attack, no_attack GRUPPEN: spieler, monster, haende, kampf SOURCE: /i/living/hands.c FUNKTION: forbidden_my_attack DEKLARATION: int forbidden_my_attack(object enemy, object weapon, object attacker) BESCHREIBUNG: Bevor ein Lebewesen attacker das Lebewesen enemy mit der Waffe weapon angreifen kann, wird attacker->forbidden("my_attack", enemy, weapon) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, findet der Angriff nicht statt. Die Funktion forbidden ruft in allen mit attacker->add_controller( "forbidden_my_attack", other) angemeldeten Objekten other die Funktionen other->forbidden_my_attack(enemy, weapon, attacker) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Lebewesen enemy kann nicht angegriffen werden. Fuer die Ausgabe einer Meldung an die Lebewesen attacker und enemy und den Raum muss der Programmierer in forbidden_my_attack oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Beispielanwendung: Handfesseln, die den Kampf verhindern VERWEISE: forbidden, notify, notify_my_attack, attack, no_attack, forbidden_use, forbidden_attack, forbidden_attack_here GRUPPEN: spieler, monster, haende, kampf SOURCE: /i/living/hands.c FUNKTION: notify_my_attack DEKLARATION: void notify_my_attack(object enemy, object weapon, object attacker) BESCHREIBUNG: Nachdem das Lebewesen attacker ein Lebewesen enemy mit der Waffe weapon attackiert hat, wird attacker->notify("my_attack", enemy, weapon) aufgerufen. Die Funktion notify ruft in allen mit attacker->add_controller( "notify_my_attack", other) angemeldeten Objekten other die Funktionen other->notify_my_attack(enemy, weapon, attacker) auf. Sowohl attacker als auch other haben dann eine Moeglichkeit, auf den Angriff auf enemy mit der Waffe weapon zu reagieren. VERWEISE: forbidden, notify, forbidden_my_attack, attack, no_attack, notify_attack, notify_attack_here, notify_use GRUPPEN: spieler, monster, haende, kampf SOURCE: /i/living/hands.c FUNKTION: forbidden_use DEKLARATION: int forbidden_use(object attacker, object enemy, object weapon) BESCHREIBUNG: Bevor ein Lebewesen attacker das Lebewesen enemy mit der Waffe weapon angreifen kann, wird weapon->forbidden("use", attacker, enemy) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, findet der Angriff nicht statt. Die Funktion forbidden ruft in allen mit weapon->add_controller( "forbidden_use", other) angemeldeten Objekten other die Funktionen other->forbidden_use(attacker, enemy, weapon) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Lebewesen enemy kann nicht angegriffen werden. Fuer die Ausgabe einer Meldung an die Lebewesen attacker evtl. enemy und den Raum muss der Programmierer in forbidden_use oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Beispielanwendung: Auf Monster oder Traeger 'spezialisierte' Waffen VERWEISE: forbidden, notify, notify_use, attack, forbidden_attack, forbidden_my_attack GRUPPEN: kampf, waffen SOURCE: /i/living/hands.c FUNKTION: notify_use DEKLARATION: void notify_use(object attacker, object enemy, object weapon) BESCHREIBUNG: Nachdem das Lebewesen attacker ein Lebewesen enemy mit der Waffe weapon attackiert hat, wird weapon->notify("use", attacker, enemy) aufgerufen. Die Funktion notify ruft in allen mit weapon->add_controller("notify_use", other) angemeldeten Objekten other die Funktionen other->notify_use( attacker, enemy, weapon) auf. Sowohl weapon als auch other haben dann eine Moeglichkeit, auf den Angriff von attacker auf enemy mit der Waffe weapon zu reagieren. VERWEISE: forbidden, notify, forbidden_use, attack, no_attack GRUPPEN: kampf, waffen SOURCE: /i/living/hands.c FUNKTION: query_schwimmhilfe DEKLARATION: int query_schwimmhilfe() BESCHREIBUNG: Verhindert bei Returnwert != 0 den AP-Abzug beim Schwimmen des umgebenden Lebewesens. Bei anziehbaren Schwimmhilfen sollte auch query_worn() beachtet werden. VERWEISE: move, query_worn GRUPPEN: spieler SOURCE: /i/living/legs.c FUNKTION: allowed_ghost_pass DEKLARATION: int allowed_ghost_pass(object player, string dir, string room, mapping info) BESCHREIBUNG: Wenn ein Geist auf einen gesperrten Ausgang trifft und diesen durchqueren will, so wird bei allen am Raum angemeldeten Controllern allowed_ghost_pass aufgerufen. Liefert ein Controller 1, so wird dem Geist erlaubt, da durch- zugehen. 'dir' ist der Name des Ausgangs, 'dest' der dahinterliegende Raum. 'info' ist ein Mapping, in welchem der erfolgreiche Controller folgende Eintraege vornehmen soll: MOVE_MSG_OUT: Die Meldung beim Verlassen des Raumes (wie normalerweise bei move() als 3. Parameter angegeben.) MOVE_MSG_IN: Die Meldung beim Betreten des Raeumes (wie normalerweise bei move() als 4. Paraemter angegeben). VERWEISE: move GRUPPEN: spieler SOURCE: /i/living/legs.c FUNKTION: random_move DEKLARATION: varargs string random_move(int return_time, string verlassen, string ankommen) BESCHREIBUNG: random_move fuehrt eine Bewegung in eine offene Richtung aus dem momentanen Raum heraus aus. In dem zurueckgelieferten String steht die gewaehlte Richtung. Zusaetzlich kann man der Funktion Bewegungsmeldungen (wie bei move()) uebergeben. Ansonsten werden die Standard-Fluchtmeldungen verwendet. Wenn return_time angegeben wird und nicht 0 ist, kehrt der NPC nach 'return_time' Sekunden wieder an die alte Stelle zurueck. VERWEISE: move, runaway GRUPPEN: spieler, monster SOURCE: /i/living/legs.c FUNKTION: runaway DEKLARATION: int runaway() BESCHREIBUNG: Fuehrt eine Bewegung aus wie im Flucht-Modus des Players, mit allen Meldungen und allem drum und dran. Wenn die Flucht erfolgreich war, wird 1 zurueckgeliefert, sonst 0. VERWEISE: random_move, move GRUPPEN: spieler, monster SOURCE: /i/living/legs.c FUNKTION: forbidden_enter DEKLARATION: int forbidden_enter(object wer, mixed was, object woher, object wohin) BESCHREIBUNG: Ein Spieler oder NPC 'wer' versucht, ein Objekt oder V-Item 'was' zu betreten. Dies wird zu einer Bewegung von 'wer' nach 'wohin' von 'woher' fuehren. Zuvor wird mit forbidden("enter", wer, was, woher, wohin) geprueft, ob das Betreten zulaessig ist. Der Controller wird in allen Objekten aufgerufen, die sich bei 'wer' oder 'woher' fuer "forbidden_enter" angemeldet haben. Liefert ein Objekt einen Wert != 0 zurueck, wird das Betreten verhindert. Fuer eine entsprechende Meldung ist zu sorgen. In 'was' wird forbidden("enter_me"), in 'wohin' forbidden("enter_here") zusaetzlich aufgerufen. VERWEISE: forbidden_enter_me, forbidden_enter_here GRUPPEN: spieler, monster SOURCE: /i/living/legs.c FUNKTION: forbidden_enter_me DEKLARATION: int forbidden_enter_me(object wer, mixed was, object woher, object wohin) BESCHREIBUNG: Ein Spieler oder NPC 'wer' versucht, ein Objekt oder V-Item 'was' zu betreten. Dies wird zu einer Bewegung von 'wer' nach 'wohin' von 'woher' fuehren. Zuvor wird mit forbidden("enter_me", wer, was, woher, wohin) geprueft, ob das Betreten zulaessig ist. Der Controller wird in allen Objekten aufgerufen, die sich bei 'was' fuer "forbidden_enter_me" angemeldet haben. Ist 'was' ein V-Item, so wird der Controller in dessen Umgebung aufgerufen. Liefert ein Objekt einen Wert != 0 zurueck, wird das Betreten verhindert. Fuer eine entsprechende Meldung ist zu sorgen. In 'wer' und 'woher' wird forbidden("enter") zusaetzlich aufgerufen, in 'wohin' ausserdem forbidden("enter_here"). zusaetzlich aufgerufen. VERWEISE: forbidden_enter, forbidden_enter_here GRUPPEN: spieler, monster SOURCE: /i/living/legs.c FUNKTION: forbidden_enter_here DEKLARATION: int forbidden_enter_here(object wer, mixed was, object woher, object wohin) BESCHREIBUNG: Ein Spieler oder NPC 'wer' versucht, ein Objekt oder V-Item 'was' zu betreten. Dies wird zu einer Bewegung von 'wer' nach 'wohin' von 'woher' fuehren. Zuvor wird mit forbidden("enter_here", wer, was, woher, wohin) geprueft, ob das Betreten zulaessig ist. Der Controller wird in allen Objekten aufgerufen, die sich bei 'wohin' fuer "forbidden_enter_here" angemeldet haben. Liefert ein Objekt einen Wert != 0 zurueck, wird das Betreten verhindert. Fuer eine entsprechende Meldung ist zu sorgen. In 'wer' und 'woher' wird forbidden("enter") zusaetzlich aufgerufen, in 'was' ausserdem forbidden("enter_me"). zusaetzlich aufgerufen. VERWEISE: forbidden_enter, forbidden_enter_me GRUPPEN: spieler, monster SOURCE: /i/living/legs.c FUNKTION: notify_enter DEKLARATION: int notify_enter(object wer, mixed was, object woher, object wohin) BESCHREIBUNG: Ein Spieler oder NPC 'wer' hat das Objekt oder V-Item 'was' betreten. Dadurch wurde 'wer' bewegt, und zwar von 'woher' nach 'wohin'. Anschliessend werden mit notify("enter", wer, was, woher, wohin) alle Objekte, die sich bei 'wer' oder 'woher' fuer "notify_enter" angemeldet haben, von dem Vorgang unterrichtet. In 'was' wird notify("enter_me"), in 'wohin' notify("enter_here") zusaetzlich aufgerufen. VERWEISE: notify_enter_me, notify_enter_here GRUPPEN: spieler, monster SOURCE: /i/living/legs.c FUNKTION: notify_enter_me DEKLARATION: int notify_enter_me(object wer, mixed was, object woher, object wohin) BESCHREIBUNG: Ein Spieler oder NPC 'wer' hat das Objekt oder V-Item 'was' betreten. Dadurch wurde 'wer' bewegt, und zwar von 'woher' nach 'wohin'. Anschliessend werden mit notify("enter_me", wer, was, woher, wohin) alle Objekte, die sich bei 'was' fuer "notify_enter_me" angemeldet haben, von dem Vorgang unterrichtet. Ist 'was' ein V-Item, wird der Controller in dem Objekt aufgerufen, an dem das V-Item haengt. In 'wer' und 'woher' wird notify("enter") aufgerufen, ausserdem in 'wohin' notify("enter_here"). VERWEISE: notify_enter_me, notify_enter_here GRUPPEN: spieler, monster SOURCE: /i/living/legs.c FUNKTION: notify_enter_here DEKLARATION: int notify_enter_here(object wer, mixed was, object woher, object wohin) BESCHREIBUNG: Ein Spieler oder NPC 'wer' hat das Objekt oder V-Item 'was' betreten. Dadurch wurde 'wer' bewegt, und zwar von 'woher' nach 'wohin'. Anschliessend werden mit notify("enter_here", wer, was, woher, wohin) alle Objekte, die sich bei 'wohin' fuer "notify_enter_here" angemeldet haben, von dem Vorgang unterrichtet. In 'wer' und 'woher' wird notify("enter") aufgerufen, ausserdem in 'was' notify("enter_me"). VERWEISE: notify_enter_me, notify_enter_here GRUPPEN: spieler, monster SOURCE: /i/living/legs.c FUNKTION: forbidden_smell DEKLARATION: int forbidden_smell(mixed what, object who) BESCHREIBUNG: Bevor das Objekt oder Mapping (v-item) what vom Lebewesen who beschnuppert werden kann, wird who->forbidden("smell", what) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann das Objekt nicht gerochen werden. Die Funktion forbidden ruft in allen mit who->add_controller("forbidden_smell", other) angemeldeten Objekten other die Funktionen other->forbidden_smell(what, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und what kann nicht gerochen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_smell oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch what->forbidden("smell_me", who) aufgerufen VERWEISE: forbidden, notify, notify_smell GRUPPEN: spieler, monster, nase SOURCE: /i/living/nose.c FUNKTION: forbidden_smell_me DEKLARATION: int forbidden_smell_me(object who, mixed what) BESCHREIBUNG: Bevor das Objekt oder Mapping (v-item) what vom Lebewesen who beschnuppert werden kann, wird what->forbidden("smell_me", who) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann das Objekt nicht gerochen werden. Die Funktion forbidden ruft in allen mit what->add_controller( "forbidden_smell_me", other) angemeldeten Objekten other die Funktionen other->forbidden_smell_me(who, what) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und what kann nicht gerochen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_smell_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("smell", what) aufgerufen. VERWEISE: forbidden, notify, notify_smell GRUPPEN: spieler, monster, nase SOURCE: /i/living/nose.c FUNKTION: forbidden_smell_here DEKLARATION: int forbidden_smell_here(object who, mixed what) BESCHREIBUNG: Bevor das Objekt oder Mapping (v-item) what vom Lebewesen who beschnuppert werden kann, wird im Raum room->forbidden("smell_here", who, what) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, kann das Objekt nicht gerochen werden. Die Funktion forbidden ruft in allen mit room->add_controller( "forbidden_smell_here", other) angemeldeten Objekten other die Funktionen other->forbidden_smell_here(who, what) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und what kann nicht gerochen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who muss der Programmierer in forbidden_smell_here oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Bemerkung: Es wird auch who->forbidden("smell", what) und what->forbidden("smell_me", who) aufgerufen. VERWEISE: forbidden, notify, notify_smell GRUPPEN: spieler, monster, nase SOURCE: /i/living/nose.c FUNKTION: notify_smell DEKLARATION: void notify_smell(mixed what, object who) BESCHREIBUNG: Nachdem das Objekt oder Mapping (v-item) what vom Lebewesen who beschnuppert wurde, wird who->notify("smell", what) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_smell", other) angemeldeten Objekten other die Funktionen other->notify_smell(what, who) auf. Sowohl who als auch other haben dann die Moeglichkeit, auf das Riechen an what zu reagieren. Bemerkung: Es wird auch what->notify("smell_me", who,what) aufgerufen als auch in Raeumen room->notify("smell_here",who,what). VERWEISE: forbidden, notify, forbidden_smell,notify_smell_me,notify_smell_here GRUPPEN: spieler, monster, nase SOURCE: /i/living/nose.c FUNKTION: notify_smell_me DEKLARATION: void notify_smell_me(object who, mixed what) BESCHREIBUNG: Nachdem das Objekt oder Mapping (v-item) what vom Lebewesen who beschnuppert wurde, wird what->notify("smell_me", who) aufgerufen. Die Funktion notify ruft in allen mit what->add_controller("notify_smell_me", other) angemeldeten Objekten other die Funktionen other->notify_smell_me(who, what) auf. Sowohl what als auch other haben dann die Moeglichkeit, auf das Riechen an what zu reagieren. Bemerkung: Es wird auch who->notify("smell", what) aufgerufen. VERWEISE: forbidden, notify, forbidden_smell GRUPPEN: spieler, monster, nase SOURCE: /i/living/nose.c FUNKTION: notify_smell_here DEKLARATION: void notify_smell_here(object who, mixed what) BESCHREIBUNG: Nachdem das Objekt oder Mapping (v-item) what vom Lebewesen who beschnuppert wurde, wird im Raum room->notify("smell_here", who, what) aufgerufen. Die Funktion notify ruft in allen mit room->add_controller("notify_smell_here", other) angemeldeten Objekten other die Funktionen other->notify_smell_here(who, what) auf. Sowohl what als auch other haben dann die Moeglichkeit, auf das Riechen an what zu reagieren. Bemerkung: Es wird auch who->notify("smell", what) und what->notify("smell_me", who) aufgerufen. VERWEISE: forbidden, notify, forbidden_smell GRUPPEN: spieler, monster, nase SOURCE: /i/living/nose.c FUNKTION: query_smell_msg DEKLARATION: string query_smell_msg() BESCHREIBUNG: Liefert die Beschreibung fuer andere, wenn this_player() an etwas riecht. Sie wird nur aufgerufen, wenn query_smell() einen Wert ungleich 0 zurueckgeliefert hat. Rueckgabewert: 0 : Eine Standardmeldung wird generiert. "" : Es wird keine Meldung ausgegeben. sonst: Der Text wird umbrochen. Diese Lfun ist eine applied Lfun, d.h. es existiert kein set_smell_msg() und man muss sie in ein Objekt einbauen, wenn man eine eigene Meldung haben will. VERWEISE: set_smell, query_smell GRUPPEN: grundlegendes, nase SOURCE: /i/living/nose.c FUNKTION: set_sp_name DEKLARATION: void set_sp_name(string name) BESCHREIBUNG: set_sp_name veraendert die sp-Bezeichung. Standard : Zauberpunkte Variationen : Mentalpunkte, geistige Punkte, ... VERWEISE: query_sp_name, set_sp_short_name, query_sp_short_name GRUPPEN: spieler, monster, zaubern SOURCE: /i/living/sp.c FUNKTION: query_sp_name DEKLARATION: string query_sp_name() BESCHREIBUNG: query_sp_name liefert die sp-Bezeichung, die von Gilden unterschiedlich gesetzt werden kann. Standard : Zauberpunkte Variationen : Mentalpunkte, geistige Punkte, ... VERWEISE: set_sp_name, set_sp_short_name, query_sp_short_name GRUPPEN: spieler, monster, zaubern SOURCE: /i/living/sp.c FUNKTION: query_sp_short_name DEKLARATION: string query_sp_short_name() BESCHREIBUNG: query_sp_short_name liefert die sp-Kurzbezeichnung, die von Gilden unterschiedlich gesetzt werden kann. Standard : ZP Variationen : MP, GP, ... VERWEISE: set_sp_short_name, set_sp_name, query_sp_name GRUPPEN: spieler, monster, zaubern SOURCE: /i/living/sp.c FUNKTION: set_sp_short_name DEKLARATION: void set_sp_short_name(string name) BESCHREIBUNG: set_sp_short_name veraendert die sp-Kurzbezeichung. Standard : ZP Variationen : MP, GP, ... VERWEISE: query_sp_short_name, set_sp_name, query_sp_name GRUPPEN: spieler, monster, zaubern SOURCE: /i/living/sp.c FUNKTION: set_max_sp DEKLARATION: void set_max_sp(int max_sp) BESCHREIBUNG: Mit set_max_sp kann man die maximal moegliche Anzahl von Zauberpunkten, die ein Spieler oder Monster haben kann, setzen. VERWEISE: query_max_sp, query_sp, add_sp GRUPPEN: spieler, monster, zaubern SOURCE: /i/living/sp.c FUNKTION: query_max_sp DEKLARATION: int query_max_sp() BESCHREIBUNG: query_max_sp liefert die maximal moegliche Anzahl von Zauberpunkten, die ein Spieler oder Monster haben kann, zurueck. VERWEISE: set_max_sp, query_sp, add_sp GRUPPEN: spieler, monster, zaubern SOURCE: /i/living/sp.c FUNKTION: query_sp DEKLARATION: int query_sp() BESCHREIBUNG: query_sp liefert die momentane Anzahl von Zauberpunkten, die ein Spieler oder Monster hat, zurueck. VERWEISE: set_max_sp, query_max_sp, add_sp GRUPPEN: spieler, monster, zaubern SOURCE: /i/living/sp.c FUNKTION: set_sp DEKLARATION: void set_sp(int new_sp) BESCHREIBUNG: Mit set_sp setzt man die Anzahl von Zauberpunkten, die das Lebewesen momentan haben soll. Die Maximalanzahl an Zauberpunkten wird damit aber nicht veraendert (und kann auch nicht ueberschritten werden). VERWEISE: set_max_sp, query_sp, query_max_sp, add_sp GRUPPEN: spieler, monster, zaubern SOURCE: /i/living/sp.c FUNKTION: add_sp DEKLARATION: void add_sp(int sp) BESCHREIBUNG: Addiert sp Zauberpunkte zu den momentanen Zauberpunkten des Spielers oder Monsters dazu. Wenn sp negativ ist, werden ZPs abgezogen, es werden aber nicht mehr abgezogen, als vorhanden sind und nicht mehr dazugezahlt, als ohne Ueberschreitung von query_max_sp moeglich waere. VERWEISE: set_max_sp, query_max_sp, query_sp GRUPPEN: spieler, monster, zaubern SOURCE: /i/living/sp.c FUNKTION: query_sum_sp DEKLARATION: int query_sum_sp() BESCHREIBUNG: query_sum_sp liefert die Anzahl von Zauberpunkten zurueck, die ein Spieler (oder Monster) in seiner Laufbahn je verbraten hat, zurueck. VERWEISE: add_sum_sp GRUPPEN: spieler, monster, zaubern, skill SOURCE: /i/living/sp.c FUNKTION: add_sum_sp DEKLARATION: void add_sum_sp(int sum_sp) BESCHREIBUNG: Erhoeht die Summe aller jemals verbratenen Zauberpunkte eines Monsters oder Spieler. WARNUNG: keine Ueberpruefung auf Ueberlauf! Keine Ueberpruefung auf negative Ergabnisse. Bitte nicht auf Spieler anwenden! VERWEISE: query_sum_sp GRUPPEN: spieler, monster, zaubern, skill SOURCE: /i/living/sp.c FUNKTION: update_stat_dependencies DEKLARATION: void update_stat_dependencies(int flag) BESCHREIBUNG: Diese Funktion berechnet Folgen aus Aenderungen von Staerke, Ausdauer, Intelligenz oder Geschicklichkeit. D.h. diese Funktion ruft z.B. update_max_encumbrance(), update_max_sp() und update_max_hp() auf. Ist flag==1, so wird ebenfalls die Ausdauer- und Zauberpunktezahl auf das Maximum angehoben (sollte man nur bei NPCs anwenden). VERWEISE: set_one_stat, query_stat GRUPPEN: spieler, monster, skill SOURCE: /i/living/stats.c FUNKTION: set_one_stat DEKLARATION: void set_one_stat(int stat, int level) BESCHREIBUNG: Setzt die Faehigkeit stat auf den Betrag level. Die verschiedenen Faehigkeiten sind als STAT_STR, STAT_INT, STAT_CON und STAT_DEX in stats.h definiert. Diese Werte werden relativ zur Rasse angesehen, wobei ein Level von 0 dem schwaechsten Exemplar und ein Level von 100 dem staerksten Exemplar der Rasse entspricht. VERWEISE: query_stat, update_stat_dependencies GRUPPEN: spieler, monster, skill SOURCE: /i/living/stats.c FUNKTION: query_stat DEKLARATION: varargs mixed query_stat(int stat, int flag) BESCHREIBUNG: Liefert die Faehigkeit stat zurueck. Als stat sind die in stats.h definierten Defines zu verwenden. Es wird normalerweise eine Integer-Zahl zurueckgeliefert. Ist der optionale Parameter flag != 0, so kann (NICHT muss) auch eine Float-Zahl zurueckgeliefert werden. Dies ist nur bei Spielern der Fall. Die Float-Stats duerfen auf keinen Fall fuer Berechnungen irgendwelcher Art verwendet werden; Ausnahme sind Stat-Shadows, die die Stats des Spielers veraendern. Die Float-Stats sind ansonsten nur zur Ausgabe (sp, Spielerausweis, ...) gedacht; hierzu ist das Makro PRINT_STAT aus stats.h zu verwenden. Um einen Float-Stat in eine Integer-Zahl umzuwandeln, verwende man das Makro ROUND_STAT. ACHTUNG: Wenn man query_stat() ueberlagert, muss die Originalfunktion mit gesetztem Parameter 'flag' aufgerufen werden, sofern man deren Ergebnis zur Berechnung eines neuen Wertes verwenden moechte. Man muss also in der Ueberlagerung in jedem Fall mit Float rechnen, sofern die Originalfunktion einen Float-Wert liefert. Wurde die ueberlagernde Funktion mit 'flag' == 0 aufgerufen, muss das Ergebnis mit ROUND_STAT gerundet zurueckgeliefert werden. Andernfalls kann es zu schweren Rundungsfehlern kommen. VERWEISE: set_one_stat, update_stat_dependencies, PRINT_STAT, ROUND_STAT GRUPPEN: spieler, monster, skill SOURCE: /i/living/stats.c FUNKTION: query_real_stat DEKLARATION: nomask varargs mixed query_real_stat(int stat, int flag) BESCHREIBUNG: Liefert die Faehigkeit stat zurueck. Als stat sind die in stats.h definierten Defines zu verwenden. Kann im Gegensatz zu query_stat nicht ueberlagert/geshadowed werden. Dient beispielsweise als Bewertungsgrundlage fuer Leo. Es wird normalerweise eine Integer-Zahl zurueckgeliefert. Ist der optionale Parameter flag != 0, so kann (NICHT muss) auch eine Float-Zahl zurueckgeliefert werden. Dies ist nur bei Spielern der Fall. Die Float-Stats duerfen auf keinen Fall fuer Berechnungen irgendwelcher Art verwendet werden; Ausnahme sind Stat-Shadows, die die Stats des Spielers veraendern. Die Float-Stats sind ansonsten nur zur Ausgabe (sp, Spielerausweis, ...) gedacht; hierzu ist das Makro PRINT_STAT aus stats.h zu verwenden. Um einen Float-Stat in eine Integer-Zahl umzuwandeln, verwende man das Makro ROUND_STAT. VERWEISE: set_one_stat, query_stat, query_real_stats, PRINT_STAT, ROUND_STAT GRUPPEN: spieler, monster, skill SOURCE: /i/living/stats.c FUNKTION: query_real_stats DEKLARATION: nomask varargs mixed * query_real_stats(int flag) BESCHREIBUNG: Liefert alle Faehigkeiten als Array zurueck. Als Index fuer dieses Array sollten die Defines aus stats.h verwendet werden. Funktion kann nicht ueberlagert/geshadowed werden. Das zurueckgelieferte Array besteht normalerweise aus Integer-Zahlen. Ist der optionale Parameter flag != 0, so kann (NICHT muss) das Array auch Float-Zahlen enthalten. Dies ist nur bei Spielern der Fall. Die Float-Stats duerfen auf keinen Fall fuer Berechnungen irgendwelcher Art verwendet werden; Ausnahme sind Stat-Shadows, die die Stats des Spielers veraendern. Die Float-Stats sind ansonsten nur zur Ausgabe (sp, Spielerausweis, ...) gedacht; hierzu ist das Makro PRINT_STAT aus stats.h zu verwenden. Um einen Float-Stat in eine Integer-Zahl umzuwandeln, verwende man das Makro ROUND_STAT. VERWEISE: set_one_stat, query_stat, query_real_stat, PRINT_STAT, ROUND_STAT GRUPPEN: spieler, monster, skill SOURCE: /i/living/stats.c FUNKTION: query_is_in_team DEKLARATION: int query_is_in_team() BESCHREIBUNG: Liefert 1, wenn der Spieler in einer Gruppe ist. VERWEISE: query_is_team_leader GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: query_is_team_leader DEKLARATION: int query_is_team_leader() BESCHREIBUNG: Liefert 1, wenn der Spieler ein Gruppenleiter ist. VERWEISE: query_is_in_team, query_team_leader GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: query_team_autofollow DEKLARATION: int query_team_autofollow() BESCHREIBUNG: Liefert 1, wenn der Spieler versucht, dem Gruppenleiter autmatisch zu folgen. VERWEISE: query_is_in_team GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: query_team_name DEKLARATION: string query_team_name() BESCHREIBUNG: Liefert beim Gruppenleiter den Namen der Gruppe, oder 0, wenn kein Gruppenleiter. VERWEISE: query_is_team_leader GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: forbidden_team_follow DEKLARATION: int forbidden_team_follow(object follower, object leader, mapping move_info) BESCHREIBUNG: Vor der Bewegung des follower, welcher dem leader folgt, wird im follower forbidden_team_follow aufgerufen, bei Rückgabe von 1 wird die Bewegung nicht ausgeführt. Bei 1 muss sich forbidden_team_follow um eine Ausgabe an den follower kümmern. Bei Rückgabe von 0 wird die Bewegung durchgeführt. VERWEISE: query_is_team_leader, move, query_team_members GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: forbidden_team_follow_out DEKLARATION: int forbidden_team_follow_out(object follower, object leader, mapping move_info) BESCHREIBUNG: Vor der Bewegung des follower, welcher dem leader folgt, wird im Ausgangsraum forbidden_team_follow_out aufgerufen, bei Rückgabe 1 wird die Bewegung nicht ausgeführt. Bei 1 muss sich forbidden_team_follow_out um eine Ausgabe an den follower kümmern. Bei Rückgabe von 0 wird die Bewegung durchgeführt. VERWEISE: forbidden_team_follow,forbidden_team_follow_in,move GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: forbidden_team_follow_in DEKLARATION: int forbidden_team_follow_in(object follower, object leader, mapping move_info) BESCHREIBUNG: Vor der Bewegung des follower, welcher dem leader folgt, wird im Zielraum forbidden_team_follow_in aufgerufen, bei Rückgabe 1 wird die Bewegung nicht ausgeführt. Bei 1 muss sich forbidden_team_follow_in um eine Ausgabe an den follower kümmern. Bei Rückgabe von 0 wird die Bewegung durchgeführt. VERWEISE: forbidden_team_follow,forbidden_team_follow_out, move GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: notify_team_before_follow DEKLARATION: void notify_team_before_follow(object follower, object leader, mapping move_info) BESCHREIBUNG: Vor der Bewegung des follower, welcher dem leader folgt, wird im follower notify_team_before_follow aufgerufen. VERWEISE: notify_team_before_follow_out, notify_team_after_follow, move GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: notify_team_before_follow_out DEKLARATION: void notify_team_before_follow_out(object follower, object leader, mapping move_info) BESCHREIBUNG: Vor der Bewegung des follower, welcher dem leader folgt, wird im Ausgangsraum notify_team_before_follow_out aufgerufen. VERWEISE: notify_team_after_follow,notify_team_after_follow,move GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: notify_team_after_follow DEKLARATION: void notify_team_after_follow(object follower, object leader, mapping move_info) BESCHREIBUNG: Nach der Bewegung des follower, welcher dem leader folgt, wird im follower notify_team_after_follow aufgerufen. VERWEISE: notify_team_before_follow,notify_team_after_follow_in, move GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: notify_team_after_follow_in DEKLARATION: void notify_team_after_follow_in(object follower, object leader, mapping move_info) BESCHREIBUNG: Nach der Bewegung des follower, welcher dem leader folgt, wird im Zielraum notify_team_after_follow_in aufgerufen. VERWEISE: notify_team_before_follow,notify_team_after_follow, move GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: query_team_members DEKLARATION: object* query_team_members() BESCHREIBUNG: Liefert die Liste der anderen Gruppenmitglieder, falls in Gruppe. VERWEISE: query_is_team_leader GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: notify_join_team_me DEKLARATION: int notify_join_team_me(object member, object leader) BESCHREIBUNG: In member wird ein notify_join_team_me aufgerufen, sobald member vom leader aufgenommen wurde und member dem leader folgt. VERWEISE: notify_join_team, notify_join_team_here GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: notify_join_team_here DEKLARATION: int notify_join_team_here(object member, object leader) BESCHREIBUNG: In der Umgebung von member wird ein notify_join_team_here aufgerufen, sobald member vom leader aufgenommen wurde und member dem leader folgt. VERWEISE: notify_join_team_me, notify_join_team GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: notify_join_team DEKLARATION: int notify_join_team(object member, object leader) BESCHREIBUNG: In /apps/control wird ein notify_join_team aufgerufen, sobald member vom leader aufgenommen wurde und member dem leader folgt. VERWEISE: notify_join_team_me, notify_join_team_here GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: forbidden_team_order DEKLARATION: int forbidden_team_order(string command, object member, object leader) BESCHREIBUNG: Nach dem "g: los" des Gruppenleiters und vor eigentlicher Ausfuehrung durch das Gruppenmitglied, wird forbidden_team_order in dem Gruppenmitglied member aufgerufen. command enthaelt die Kommandozeile, leader den Gruppenleiter. Bei Rueckgabe von 1 muss sich die forbidden_team_order Funktion um die Ausgabe an das Gruppenmitglied kuemmern wie z.B. "Das Gruppenkommando "+command +" kann nicht ausgefuehrt werden, weil ..." VERWEISE: forbidden_team_follow GRUPPEN: spieler, kampf, gruppen, team SOURCE: /i/living/team.c FUNKTION: modify_comm DEKLARATION: void modify_comm(mapping data, string aktion, mixed opfer, object verursacher) BESCHREIBUNG: modify_comm wird bei jeder Kommunikation von verursacher im Raum raum in allen mit verursacher->add_controller("modify_comm", other) oder mit raum->add_controller("modify_comm", other) angemeldeten Controllern other aufgerufen. Dabei wird data als Referenz uebergeben. D.h. jede Veraenderung muss bei data direkt geschehen. Die Variable data ist ein Mapping, welche folgende Eintraege beinhalten kann: "satz": Enthaelt das, was derjenige aussprechen will. "adverb": Ein Array aus Adverben, welches vor den eigentlichen Satz gestellt werden soll. (Kann auch 0 sein.) "flags": Eine Kombinationen folgender Flags (definiert in soul.h): VOICE_FLUESTERMODUS Umstehende hoeren den Satz nicht. VOICE_TUSCHELMODUS Umstehende hoeren den Satz teilweise. VOICE_LALLEN Der Satz wird gelallt. VOICE_LISPELN Der Satz wird gelispelt. VOICE_STOTTERN Der Satz wird gestottert. VOICE_SUMMEN Der Satz wird gesummt. VOICE_NUSCHELN Der Satz wird genuschelt. VOICE_HISSEN Der Satz wird gehisst. VOICE_ZISCHEN Der Satz wird gezischt. Die angegebene Aktion kann folgende sein: sag, fluester, frag, antwort, bemerk, bruddel, denk, erlaeuter, kreisch, lall, lispel, murmel, sing, stotter, summ, traeller, tuschel, verkuend Beispiel: Du hast eine Art Megaphon gmacht und willst nun, dass bei jedem sage, alles in Grossbuchstaben kommt. Du machst also ein Megaphone, in diesem Megaphone machst Du ein 'spieler->add_controller("modify_comm",this_object()); Aufruf rein und hast folgende Funktion im Code: void modify_comm(mapping data, string aktion, mixed opfer, object verursacher) { if (aktion == "sag") // Wir wollen nur auf sage reagieren { data["satz"] = upper_case(data["satz"]); } } VERWEISE: modify, notify_comm, forbidden_comm, add_controller, do_change_comm GRUPPEN: seele, spieler, monster SOURCE: /i/living/voice.c FUNKTION: do_change_comm DEKLARATION: public nomask string do_change_comm(string to_modify,int flags) BESCHREIBUNG: do_change_comm liefert die Stringumwandlung aufgrund folgender Flags und wird von modify_comm aufgerufen: "flags": Eine Kombinationen folgender Flags (definiert in soul.h): VOICE_LALLEN Der Satz wird gelallt. VOICE_LISPELN Der Satz wird gelispelt. VOICE_STOTTERN Der Satz wird gestottert. VOICE_SUMMEN Der Satz wird gesummt. VOICE_NUSCHELN Der Satz wird genuschelt. VOICE_HISSEN Der Satz wird gehisst. VOICE_ZISCHEN Der Satz wird gezischt. VERWEISE: modify_comm GRUPPEN: seele, spieler, monster SOURCE: /i/living/voice.c FUNKTION: set_away DEKLARATION: void set_away(string str) BESCHREIBUNG: Benimmt sich wie das Spieler-Kommando 'weg'. Kann natuerlich auch bei Monstern gesetzt werden, aber wozu? VERWEISE: query_away GRUPPEN: spieler, monster SOURCE: /i/living/voice.c FUNKTION: query_away DEKLARATION: string query_away() BESCHREIBUNG: Liefert den String zurueck, den ein Spieler mit dem 'weg'-Kommando gesetzt hat. Klappt natuerlich auch bei Monstern, aber wozu? VERWEISE: set_away GRUPPEN: spieler, monster SOURCE: /i/living/voice.c FUNKTION: wrap_string DEKLARATION: string wrap_string(string st1, string st2) BESCHREIBUNG: Bricht st2 wie im 'sage', 'bruelle' und 'fluestere'-Kommando: Erst wird st1 erzeugt (zb Der Hanswurst sagt:) dann wird st2 angehaengt und auf die Breite 75 Zeichen umgebrochen, in der 2. Zeile beginnt die Augabe von st2 um 8 Zeichen eingerueckt. Es wird allerdings nur die simul_efun wrap_say() aufgerufen, man nehme also lieber diese. Machen wir ein Beispiel: send_message(MT_NOISE,MA_COMM,wrap_string(Der(this_object())+" sagt:", "Ey Mann, da kann ich viel erzaehlen! Also passma auf: Ich sach "+ "zu meiner Oma, ey Oma, sach ich zu ihr, geh nich raus bei dem "+ "Glatteis, aber, ey, ich sach Dir, meine Oma hoert mal wieder "+ "nich! Un dann ... [bla, fasel]") erzeugt im Raum (wenn das Monster Hanswurst heisst und maennlich ist): Der Hanswurst sagt: Ey Mann, da kann ich viel erzaehlen! Also passma auf: Ich sach zu meiner Oma, ey Oma, sach ich zu ihr, geh nich raus bei dem Glatteis, aber, ey, ich sach Dir, meine Oma hoert mal wieder nich! Un dann ... [bla, fasel] VERWEISE: wrap, wrap_say GRUPPEN: spieler, monster SOURCE: /i/living/voice.c FUNKTION: notify_tell_me DEKLARATION: void notify_tell_me(object wer, object wen, object *wen_noch, string was) BESCHREIBUNG: Wenn 'wer' 'wen' und 'wen_noch' mit dem Text 'was' anredet, so wird wen->notify("tell_me", wer, wen, wen_noch, was) aufgerufen. notify ruft dann in allen mit wen->add_controller("notify_tell_me", other) angemeldeten Controllern other die Funktion other->notify_tell_me(wer, wen, wen_noch, was) auf. Diese haben dann die Moeglichkeit, auf das Anreden zu reagieren. VERWEISE: GRUPPEN: Spieler, Monster SOURCE: /i/living/voice.c FUNKTION: message DEKLARATION: void message(string message [,string mess_whom, object whom] ) BESCHREIBUNG: ACHTUNG: Nicht mehr verwenden. Stattdessen send_message() verwenden. Schickt die Meldung 'message' an alle (anderen) Lebewesen im gleichen Raum. Wenn noch 'mess_whom' und 'whom' angegeben wurde, wird 'message' an alle (anderen) Lebewesen im gleichen Raum AUSSER an 'whom' geschickt, und an 'whom' wird 'mess_whom' geschickt. VERWEISE: send_message, send_message_to GRUPPEN: message, spieler, monster SOURCE: /i/message.c FUNKTION: set_kosten DEKLARATION: void set_kosten() BESCHREIBUNG: set_kosten() setzt die Kosten fuer das Konto auf Defaultwerte, mit den Einzelfunktionen koennen dann nachher noch spezielle Werte abgeaendert werden. Die aktuell gesetzten werte kann man in der Bank der Gebuehrentafel entnehmen. VERWEISE: set_kosten_wechseln, set_kredit_rahmen, set_kosten_einzahlung, set_kosten_auszahlung, set_kosten_kontostand, set_zins, set_kredit_zins, set_kosten_fuehrung, set_zins_zeitraum GRUPPEN: bank, handel SOURCE: /i/money/bank.c FUNKTION: set_sorten DEKLARATION: int set_sorten([string *sorten [, int *kurse]]) BESCHREIBUNG: set_sorten ist eine Hilfsfunktion aus /i/money/bank mit der die Wechselkurse und die Defaultwaehrung einer Bankfiliale unter Beruecksichtigung der Kurse aus der Zentralbank eingestellt werden koennen. sorten ist ein Stringfeld in dem die angebotenen Waherungen eingetragen werden. Erlaubt sind nur Waehrungen, die in der Zentralbank gehandelt werden. Der *erste gueltige* Eintrag dieses Feldes ist sogleich die Standardwaehrung der Bank, in der alle Transaktionen und Kosten vorgenommen werden. Alle weiteren Sorten sind nur fuer den Wechsel von Sorten interessant. Wird ein zweites Feld kurse angegeben, so koennen dort eigene Kurse statt der der Zentralbank fuer die Sorten angegeben werden. Der Wert 0 bedeutet default aus der Zentralbank, (genauso wie wenn das ganze Feld kurse fehlt.) (Die Zahl ist der Wert von 1000 Talern in der jeweiligen Waehrung.) Fehlt sorten und kurse ganz, so werden alle Waherungen aus der Zentralbank mit samt ihren Kursen uebernommen und die default Waehrung der Bank wird Taler. (dies kann man mit set_valuta und set_valutas nachtraeglich aendern.) Diese Funktion ruft im wesentlichen die Funktionen set_valuta und set_valutas zum Setzen der Standardwaehrung der Bank, und set_valuta_tafel, set_valutas_tafel, set_kurs_tafel zum Einrichten der Wechselkurstafel auf. (siehe dort) BEISPIEL: set_sorten(({"gulden", "taler"})); Die Bank handelt mit Gulden und akzeptiert beim Wechseln ausserdem noch Taler, der Kurs wird aus der Zentralbank uebernommen. set_sorten(); Die Bank handelt mit Talern und wechselt alle gaengigen Waehrungen ein. set_sorten(({"dukaten", "taler", "sesterzen"}), ({ 7700, 0, 0 })); Die Bank handelt in Dukaten und wechselt Taler und Sesterzen. Der Dukatenkurs ist etwas abweichend vom Zentralbankkurs (7690). VERWEISE: set_valuta, set_valutas, set_valuta_tafel, set_valutas_tafel, set_kurs_tafel GRUPPEN: bank, handel SOURCE: /i/money/bank.c FUNKTION: bewegung DEKLARATION: int bewegung(int betrag, object player) BESCHREIBUNG: player: Der Spieler dessen Konto behandelt werden soll. betrag: 0: Es wird nur der Konto-Stand zurueckgegeben > 0: Einzahlung < 0: Auszahlung Eventuelle Kosten werden abgezogen. Anfallender Zins gutschrieben. Der neue Kontostand wird zurueckgegeben. GRUPPEN: handel, bank VERWEISE: set_konto, query_konto, query_kontostand, SOURCE: /i/money/banking.c FUNKTION: query_kontostand DEKLARATION: int query_kontostand(object player) BESCHREIBUNG: player: Der Spieler dessen Konto behandelt werden soll. Eventuell annfallende Zinsen werden berechnet und der aktuelle Kontostand ohne Abzug der Kontostand-Kosten zurueckgegeben. Der Kontostand wird zurueckgegeben. GRUPPEN: handel, bank VERWEISE: set_konto, query_konto, bewegung, SOURCE: /i/money/banking.c FUNKTION: set_valuta DEKLARATION: void set_valuta(string waehrungsname_singular) BESCHREIBUNG: Setzen der Standardwaehrung einer Bank (singular) GRUPPEN: handel, bank VERWEISE: set_valutas, query_valuta, query_valutas, set_sorten SOURCE: /i/money/banking.c FUNKTION: set_valutas DEKLARATION: void set_valutas(string waehrungsname_plural) BESCHREIBUNG: Setzen der Standardwaehrung einer Bank (plural) GRUPPEN: handel, bank VERWEISE: set_valuta, query_valuta, query_valutas, set_sorten SOURCE: /i/money/banking.c FUNKTION: set_zins_zeitraum DEKLARATION: void set_zins_zeitraum(int zeitraum) BESCHREIBUNG: Zeitraum, fuer den die Zinsen berechnet werden. in Sekunden MagyraSPIELZEIT des Spielers im Mud (age based) GRUPPEN: handel, bank VERWEISE: set_kosten, set_zins, set_kredit_zins, set_kosten_fuehrung SOURCE: /i/money/banking.c FUNKTION: set_zins DEKLARATION: void set_zins(int prozent) BESCHREIBUNG: Zinsen in Prozent, die im Zinszeitraum gutgeschrieben werden. GRUPPEN: handel, bank VERWEISE: set_kosten, set_zins_zeitraum, set_kredit_zins, set_kosten_fuehrung SOURCE: /i/money/banking.c FUNKTION: set_kredit_zins DEKLARATION: void set_kredit_zins(int prozent) BESCHREIBUNG: Zinsen in Prozent, die bei Kontoueberziehung abgezogen werden. GRUPPEN: handel, bank VERWEISE: set_kosten, set_zins_zeitraum, set_zins, set_kosten_fuehrung SOURCE: /i/money/banking.c FUNKTION: set_kosten_einzahlung DEKLARATION: void set_kosten_einzahlung(int kosten) BESCHREIBUNG: Abzug bei Einzahlungen, in durch set_valuta(s) angegebener Waehrung. GRUPPEN: handel, bank VERWEISE: set_kosten SOURCE: /i/money/banking.c FUNKTION: set_kosten_auszahlung DEKLARATION: void set_kosten_auszahlung(int kosten) BESCHREIBUNG: Abzug bei Auszahlungen, in durch set_valuta(s) angegebener Waehrung. GRUPPEN: handel, bank VERWEISE: set_kosten SOURCE: /i/money/banking.c FUNKTION: set_kosten_kontostand DEKLARATION: void set_kosten_kontostand(int kosten) BESCHREIBUNG: Abzug bei Kontostandabfrage, in durch set_valuta(s) angegebener Waehrung. GRUPPEN: handel, bank VERWEISE: set_kosten SOURCE: /i/money/banking.c FUNKTION: set_kosten_fuehrung DEKLARATION: void set_kosten_fuehrung(int kosten) BESCHREIBUNG: Abzug einmal im Zins-Zeitraum, in durch set_valuta(s) angegebener Waehrung. GRUPPEN: handel, bank VERWEISE: set_kosten, set_zins_zeitraum, set_zins, set_kredit_zins SOURCE: /i/money/banking.c FUNKTION: convert DEKLARATION: int convert(int value, string ovaluta, string nvaluta) BESCHREIBUNG: convert() rechnet einen Geldbetrag gegeben durch value (Wert) und ovaluta (Waehrung) in eine andere Waehrung gegeben durch nvaluta um. Zurueckgegeben wird der Wert in dieser Waehrung. Als Waehrung kann auch 0 angegeben werden, es wird dann die Basiswaehrung verwendet (dies entspricht i. d. R. dem Taler). Beispiele: convert(1000, "gulden", "taler") rechnet 1000 Gulden in Taler um. convert(ob->query_value(), 0, "riki") berechnet den Wert des Objektes ob in Riki. VERWEISE: convert_rounded, set_kurs_tafel, set_valuta_tafel, set_valutas_tafel GRUPPEN: handel SOURCE: /i/money/exchange.c FUNKTION: convert_rounded DEKLARATION: int convert_rounded(int value, string ovaluta, string nvaluta) BESCHREIBUNG: Rechnet analog zu convert() einen Geldbetrag value in der Währung ovaluta (falls 0, so wird die Basiswährung Taler angenommen) in die Währung nvaluta um. Im Gegensatz zu convert() wird der Betrag kaufmännisch gerundet. VERWEISE: convert GRUPPEN: handel SOURCE: /i/money/exchange.c FUNKTION: query_valuta_tafel DEKLARATION: string *query_valuta_tafel() BESCHREIBUNG: Liefert alle erlaubten Zahlungsmittel. Dies sind sofern nicht durch set_valuta_tafel() anders angegeben, alle der Zentralbank bekannten Waehrungen. VERWEISE: set_valuta_tafel, query_valutas_tafel, query_kurs_tafel GRUPPEN: handel SOURCE: /i/money/exchange.c FUNKTION: query_valutas_tafel DEKLARATION: string *query_valutas_tafel() BESCHREIBUNG: Liefert alle erlaubten Zahlungsmittel im Plural. Dies sind sofern nicht durch set_valuta_tafel() anders angegeben, alle der Zentralbank bekannten Waehrungen. VERWEISE: set_valutas_tafel, query_valuta_tafel, query_kurs_tafel GRUPPEN: handel SOURCE: /i/money/exchange.c FUNKTION: query_kurs_tafel DEKLARATION: int *query_kurs_tafel() BESCHREIBUNG: Liefert die aktuellen Kurse. Die zu den Zahlen gehoerigen Werte erhaelt man mit query_valuta_tafel(). Der Wert query_kurs_tafel()[i] gehoert also zur Waehrung query_valuta_tafel()[i]. VERWEISE: set_kurs_tafel, query_valuta_tafel, query_valutas_tafel GRUPPEN: handel SOURCE: /i/money/exchange.c FUNKTION: set_valuta_tafel DEKLARATION: void set_valuta_tafel(string *str) BESCHREIBUNG: Damit werden alle akzeptierten Waehrungen gesetzt. Wird 0 angegeben, so werden alle, der Zentralbank bekannten Waehrungen genommen. Der Plural der Waehrungen und ihre Umrechnungskurse sollten auch mit set_valutas_tafel und set_kurs_tafel gesetzt werden. VERWEISE: query_valuta_tafel, set_valutas_tafel, set_kurs_tafel GRUPPEN: handel SOURCE: /i/money/exchange.c FUNKTION: set_valutas_tafel DEKLARATION: void set_valutas_tafel(string *str) BESCHREIBUNG: Damit wird der Plural aller akzeptierten Waehrungen gesetzt. Wird 0 angegeben, so werden alle, der Zentralbank bekannten Waehrungen genommen. Der Singular der Waehrungen und ihre Umrechnungskurse sollten auch mit set_valuta_tafel und set_kurs_tafel gesetzt werden. VERWEISE: query_valutas_tafel, set_valuta_tafel, set_kurs_tafel GRUPPEN: handel SOURCE: /i/money/exchange.c FUNKTION: set_kurs_tafel DEKLARATION: void set_kurs_tafel(string *str) BESCHREIBUNG: Damit werden die Umrechnungskurse gesetzt. Wird 0 angegeben, so werden die Umrechnungskurse der Zentralbank genommen. Diese Umrechnungskurse beziehen sich auf die mit set_valuta_tafel und set_valutas_tafel gesetzten Waehrungen, weshalb diese auch gesetzt (bzw. auf 0 gesetzt) werden sollten. VERWEISE: query_kurs_tafel, set_valuta_tafel, set_valutas_tafel GRUPPEN: handel SOURCE: /i/money/exchange.c FUNKTION: query_accepted_valutas DEKLARATION: string query_accepted_valutas(string str) BESCHREIBUNG: Liefert 0, wenn die angegebene Waehrung nicht akzeptiert wird, ansonsten der Plural der Waehrung. VERWEISE: query_accepted_valuta, query_valutas_tafel GRUPPEN: handel SOURCE: /i/money/exchange.c FUNKTION: query_accepted_valuta DEKLARATION: string query_accepted_valuta(string str) BESCHREIBUNG: Liefert 0, wenn die angegebene Waehrung nicht akzeptiert wird, ansonsten der Singular der Waehrung. VERWEISE: query_accepted_valutas, query_valutas_tafel GRUPPEN: handel SOURCE: /i/money/exchange.c FUNKTION: set_max_value DEKLARATION: void set_max_value(int a) BESCHREIBUNG: Damit kann man angeben, wieviel Geld jemand maximal fuer ein Objekt bekommt. /doc/richtlinien/geschaefte ist dabei zu beachten. VERWEISE: set_max_factor, query_max_value GRUPPEN: handel SOURCE: /i/money/laden.c FUNKTION: query_max_value DEKLARATION: int query_max_value() BESCHREIBUNG: Liefert zurueck, wieviel Geld jemand maximal fuer ein Objekt bekommt. VERWEISE: query_max_factor, set_max_value GRUPPEN: handel SOURCE: /i/money/laden.c FUNKTION: set_max_factor DEKLARATION: void set_max_factor(int a) BESCHREIBUNG: Damit kann man in Prozent angeben, das Wievielfache des Objektwertes ein Spieler maximal (d.h. wenn ein solches Objekt noch nicht im Lager ist) bekommt. /doc/richtlinien/geschaefte ist dabei zu beachten. VERWEISE: set_max_value, query_max_factor GRUPPEN: handel SOURCE: /i/money/laden.c FUNKTION: query_max_factor DEKLARATION: int query_max_factor() BESCHREIBUNG: Diese Funktion liefert zurueck, das Wievielfache (in Prozent) des Objektwertes ein Spieler maximal (d.h. wenn ein solches Objekt noch nicht im Lager ist) bekommt. VERWEISE: query_max_value, set_max_factor GRUPPEN: handel SOURCE: /i/money/laden.c FUNKTION: notify_ankauf DEKLARATION: void notify_ankauf(object ware, object wer, object laden) BESCHREIBUNG: Wird beim ankauf einer Ware im Laden aufgerufen, kurz bevor das Geld ausgeteilt wird. Beste Moeglichkeit, um noch irgendwelchem Schabernack ausgeben zu lassen. Moeglicherweise kann man damit dann im Laden mal wirklich nen Verkaeufer hinstellen. VERWEISE: forbidden_ankauf, notify, allowed, add_controller, query_controller, forbidden_verkauf, notify_verkauf GRUPPEN: handel SOURCE: /i/money/laden.c FUNKTION: forbidden_ankauf DEKLARATION: int forbidden_ankauf(object ware, object wer, object laden) BESCHREIBUNG: Wird in eingetragenen Controllern aufgerufen und kann den Ankauf eines Gegenstandes im Laden verhindern. Dies ist die beste Moeglichkeit, z.B. den Ankauf von Hehlerware aus der gleichen Stadt zu unterbinden. Vielleicht baut mal wer nen echten Marktschreier zum Laden dazu. Fuer die Ausgabe einer Meldung, warum diese Ware nicht angenommen wird, ist der Controller zustaendig. VERWEISE: notify_ankauf, notify, allowed, add_controller, query_controller, forbidden_verkauf, notify_verkauf GRUPPEN: handel SOURCE: /i/money/laden.c FUNKTION: notify_wert DEKLARATION: void notify_wert(object ware, object wer, object laden) BESCHREIBUNG: Wird nach der Wertbestimmung einer Ware im Laden aufgerufen, nachdem die Auskunft erteilt wurde. Damit kann man noch irgendwas hinterher rufen... VERWEISE: forbidden_wert, notify_ankauf, notify, add_controller, forbidden_verkauf, notify_verkauf GRUPPEN: handel SOURCE: /i/money/laden.c FUNKTION: forbidden_wert DEKLARATION: int forbidden_wert(object ware, object wer, object laden) BESCHREIBUNG: Wird in eingetragenen Controllern aufgerufen und kann die Wertbestimmung eines Gegenstandes im Laden verhindern. Dies ist die beste Moeglichkeit, z.B. den Ankauf von Hehlerware aus der gleichen Stadt zu unterbinden. VERWEISE: notify_wert, forbidden_ankauf, forbidden, add_controller, forbidden_verkauf, notify_verkauf GRUPPEN: handel SOURCE: /i/money/laden.c FUNKTION: forbidden_verkauf DEKLARATION: int forbidden_verkauf(object was, object wer, object laden) BESCHREIBUNG: Bevor der Gegenstand was an das Lebewesen wer verkauft wird, wird im Laden forbidden("verkauf", was, wer) aufgerufen. forbidden ruft bei allen mit laden->add_controller("forbidden_verkauf", other) angemeldeten Controllern other die Funktion other->forbidden_verkauf(was, wer) auf, bis eine der Controller einen Wert ungleich 0 liefert. In diesem Falle wird der Verkauf unterbunden, anderenfalls erlaubt. Fuer eine entsprechende Meldung an wer ist der Controller selber zustaendig. VERWEISE: forbidden, add_controller, notify_verkauf, forbidden_ankauf, notify_ankauf, forbidden_wert, notify_wert GRUPPEN: handel SOURCE: /i/money/laden.c FUNKTION: notify_verkauf DEKLARATION: void notify_verkauf(object was, object wer, object laden) BESCHREIBUNG: Nachdem der Gegenstand was an das Lebewesen wer verkauft wurde, wird im Laden notify("verkauf", was, wer) aufgerufen. notify ruft dann bei allen mit laden->add_controller("notify_verkauf", other) angemeldeten Controllern other die Funktion other->notify_verkauf(was, wer) auf. Diese Controller haben somit die Moeglichkeit auf den Verkauf zu reagieren. VERWEISE: notify, add_controller, forbidden_verkauf, forbidden_ankauf, notify_ankauf, forbidden_wert, notify_wert GRUPPEN: handel SOURCE: /i/money/laden.c FUNKTION: query_lager DEKLARATION: int query_lager() BESCHREIBUNG: Liefert 1, wenn der Raum ein Warenlager fuer einen Gemischtwarenladen ist. GRUPPEN: handel SOURCE: /i/money/lager.c FUNKTION: set_extra_long DEKLARATION: void set_extra_long(string str) BESCHREIBUNG: Setzt die ausfuehrliche Beschreibung des Geldes. Fuer Standard-Waehrungen sollte man init_money() verwenden. VERWEISE: set_extra_long, query_extra_long, init_money GRUPPEN: handel SOURCE: /i/money/money.c FUNKTION: query_extra_long DEKLARATION: string query_extra_long() BESCHREIBUNG: Liefert die ausfuehrliche Beschreibung des Geldes. VERWEISE: set_extra_long, query_extra_long GRUPPEN: handel SOURCE: /i/money/money.c FUNKTION: set_valutas DEKLARATION: void set_valutas(string str) BESCHREIBUNG: Setzt den Namen die Waehrung im Plural und die Plural-IDs. Fuer Standard-Waehrungen sollte man init_money() verwenden. VERWEISE: set_valuta, set_valutas, query_valuta, query_valutas, init_money, set_plural_name, set_plural_id GRUPPEN: handel SOURCE: /i/money/money.c FUNKTION: set_valuta DEKLARATION: void set_valuta(string str) BESCHREIBUNG: Setzt den Namen die Waehrung im Singular, die Singular-IDs, den Count-Type und die ausfuehrliche Beschreibung (letztere nur dann, wenn die Waehrung in der Zentralbank bekannt ist). Fuer Standard-Waehrungen sollte man init_money() verwenden. VERWEISE: set_valuta, set_valutas, query_valuta, query_valutas, init_money, set_singular_name, set_count_type, set_extra_long GRUPPEN: handel SOURCE: /i/money/money.c FUNKTION: query_valuta DEKLARATION: string query_valuta() BESCHREIBUNG: Liefert den Namen die Waehrung im Singular. Identisch mit query_singular_name() und idR. mit query_count_type(). VERWEISE: set_valuta, set_valutas, query_valuta, query_valutas, query_singular_name, query_count_type GRUPPEN: handel SOURCE: /i/money/money.c FUNKTION: query_valutas DEKLARATION: string query_valutas() BESCHREIBUNG: Liefert den Namen die Waehrung im Plural. Identisch mit query_plural_name(). VERWEISE: set_valuta, set_valutas, query_valuta, query_valutas, query_plural_name GRUPPEN: handel SOURCE: /i/money/money.c FUNKTION: set_money DEKLARATION: void set_money(int m) BESCHREIBUNG: Setzt die Anzahl des Geldes. Identisch mit set_count(). VERWEISE: set_money, add_money, query_money, query_transaction_value, set_count GRUPPEN: handel SOURCE: /i/money/money.c FUNKTION: add_money DEKLARATION: void add_money(int m) BESCHREIBUNG: Aendert die Anzahl des Geldes. Identisch mit add_count(). VERWEISE: set_money, add_money, query_money, query_transaction_value, add_count GRUPPEN: handel SOURCE: /i/money/money.c FUNKTION: query_money DEKLARATION: int query_money() BESCHREIBUNG: Liefert die Anzahl des Geldes. Identisch mit query_count(). Diese Funktion dient auch dazu, Geld als solches zu erkennen. Liefert query_money() bei einem beliebigen Objekt einen Wert ungleich 0, so handelt es sich um Geld. VERWEISE: set_money, add_money, query_money, query_transaction_value, query_count GRUPPEN: handel SOURCE: /i/money/money.c FUNKTION: set_money_flags DEKLARATION: void set_money_flags(int flag) BESCHREIBUNG: Damit kann man bestimmte Flags fuer das Geld setzen. Folgende Flags sind derzeit (in money.h) definiert: MONEY_NOT_DEKLIN: Das Geld wird nicht dekliniert. VERWEISE: init_money, query_money_flags, set_valuta, set_valutas GRUPPEN: handel, bank SOURCE: /i/money/money.c FUNKTION: query_money_flags DEKLARATION: int query_money_flags() BESCHREIBUNG: Liefert die mit set_money_flags gesetzten Flags zurueck. VERWEISE: init_money, set_money_flags, set_valuta, set_valutas GRUPPEN: handel, bank SOURCE: /i/money/money.c FUNKTION: query_transaction_value DEKLARATION: int query_transaction_value() BESCHREIBUNG: Wird ein Geld-Objekt A in die Umgebung eines zweiten Geld-Objektes B mit demselben query_valuta() bewegt, so wird das nicht bewegte Objekt B zerstoert und die Anzahl von A entsprechend erhoeht. Die urspruengliche Anzahl von A erhaelt man mit der Funktion query_transaction_value(). Identisch mit query_transaction_count(). VERWEISE: set_money, add_money, query_money, query_transaction_value, query_transaction_count GRUPPEN: handel SOURCE: /i/money/money.c FUNKTION: init_money DEKLARATION: void init_money(int wert, string valuta) BESCHREIBUNG: Mit dieser Funktion initialisiert man das Geld mit dem Wert 'wert' in der Waehrung 'valuta'. Die Waehrung muss in der Zentralbank bekannt sein, da die Informationen ueber Plural und Geschlecht dort geholt werden. VERWEISE: set_valuta, set_valutas, set_money GRUPPEN: handel SOURCE: /i/money/money.c FUNKTION: get_schliessfach_max_faecher DEKLARATION: public int get_schliessfach_max_faecher(object player) BESCHREIBUNG: Prueft in der aktuellen Bank, wieviel Faecher dem Spieler zur Verfuegung steht. Standardmaessig wird das Spieleralter und die Erfahrungspunkte einbezogen. Dient als Angabe als Closure in init_schliessfaecher. VERWEISE: get_schliessfach_miete, init_schliessfaecher GRUPPEN: armageddon SOURCE: /i/money/schliessfachaddon.c FUNKTION: get_schliessfach_miete DEKLARATION: public float get_schliessfach_miete(object player, object ob, int current_safe_count) BESCHREIBUNG: Liefert die Schliessfachmiete für den Spieler und ein Objekt. In current_safe_count wird die Anzahl der aktuellen belegten Schliessfaecher uebergeben. Für das Objekt ob wird ausserhalb get_conservation_item_rent aufgerufen, kann aber optional hier angegeben werden. Die Fachmiete gilt nicht nur fuer das aktuelle Objekt sondern fuer alle Faecher in dieser Bank. Dient als Angabe als Closure in init_schliessfaecher. Der Rueckgabewert ist in Taler, so genau wie moeglich. VERWEISE: get_schliessfach_max_faecher, init_schliessfaecher GRUPPEN: armageddon SOURCE: /i/money/schliessfachaddon.c FUNKTION: init_schliessfaecher DEKLARATION: protected varargs int init_schliessfaecher(string my_bankid,string my_valuta,closure my_calc_rent,closure my_calc_max) BESCHREIBUNG: Diese Funktion uebernimmt die Initialisierung des Schliessfachraums mit eine korrekten Bank-ID und der aktuellen Waehrung in der Einzahl. Rueckgabe 1 bei Erfolg, 0 und eine do_warning bei Misserfolg. Die Angabe von - my_calc_rent (Parameter und Funktion siehe get_schliessfach_miete) und - my_calc_max (Parameter und Funktion siehe get_schliessfach_max_faecher) sind optional, die Standards sind in dieser Sourcedatei definiert. wenn nicht ang VERWEISE: liefere_schliessfaecher, get_schliessfach_miete, GRUPPEN: armageddon SOURCE: /i/money/schliessfachaddon.c FUNKTION: set_designs DEKLARATION: public nomask void set_designs(mapping plural_design,mapping single_design) BESCHREIBUNG: Mit Hilfe dieser Funktion laesst sich das Design der Schliessfaecher beeinflussen. Im Folgenden sind die Parameter fuer das Standarddesign zusammen mit Kommentaren fuer die Sonderfaelle gekennzeichnet: plural_design = ([ "name" : "schliessfaecher", "cap_name": "Schliessfaecher", "gender" : "saechlich", "plural" : 1, // Pflicht bei Plural_design "id" : ({"schliessfaecher","faecher"}), "prefix_long" : "", // Text fuer den Anfang der Long "c_item_take" : 0, // pseudoclosure fuer Gegenstand nehmen "c_fach_take" : 0, // pseudoclosure fuer Fach nehmen. ]); single_design = ([ "name" : "schliessfach", "cap_name" : "Schliessfach", "gender" : "saechlich", "id" : ({"schliessfach","fach"}), "n_schliessfachmiete": 0, // Ersatz fuer Schliessfachmiete "c_long_leer":0, // Closure fuer ein leeres Schliessfach. "c_leer_verschwindet":0, // Closure fuer // "Das leere, geschlossene Schliessfach entschwindet in der Wand" ]); GRUPPEN: armageddon SOURCE: /i/money/schliessfachaddon.c FUNKTION: object2storagemapping DEKLARATION: public varargs object2storagemapping(object ob,mapping check_attributes) BESCHREIBUNG: Diese Funktion macht aus einem einlagerbaren Objekt das Mapping, der zu speichern ist. Im Fehlerfall wird ein String zurückgegeben. Infos zu check_attributes siehe check_conservation VERWEISE: storagemapping2object,check_conservation GRUPPEN: armageddon SOURCE: /i/money/serializer.c FUNKTION: storagemapping2object DEKLARATION: public storagemapping2object(mapping vi) BESCHREIBUNG: Diese Funktion macht aus dem mit object2storagemapping gespeicherten Mapping wieder ein Objekt und gibt es im Erfolgsfall zurück. Die Funktion entspricht dem Auslagern in den Schliessfaechern. Im Fehlerfall wird ein String zurückgegeben. VERWEISE: object2storagemapping GRUPPEN: armageddon SOURCE: /i/money/serializer.c FUNKTION: set_valuta DEKLARATION: void set_valuta (string s) BESCHREIBUNG: Diese Funktion setzt im Verkaeufer die Waehrung, mit der er arbeitet. Er akzeptiert dann Geld in dieser Waehrung. VERWEISE: query_valuta, query_valutas GRUPPEN: verkaeufer, handel SOURCE: /i/money/verkaeufer.c FUNKTION: query_valuta DEKLARATION: string query_valuta () BESCHREIBUNG: Diese Funktion liefert die Waehrung, welche der Verkaeufer als Zahlungsmittel akzeptiert. VERWEISE: query_valuta, query_valutas GRUPPEN: verkaeufer, handel SOURCE: /i/money/verkaeufer.c FUNKTION: query_valutas DEKLARATION: string query_valutas () BESCHREIBUNG: Diese Funktion liefert die Pluralform der Waehrung, welche der Verkaeufer als Zahlungsmittel akzeptiert. VERWEISE: set_valuta, query_valuta GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: set_lagerraum DEKLARATION: void set_lagerraum (string dateiname) BESCHREIBUNG: Mit dieser Funktion kann dem Verkaeufer ein Lagerraum gegeben werden; Er gibt dann auch Dinge an Spieler, wenn der Verkaeufer sie nicht bei sich hat, sie sich aber im Lagerraum befinden. VERWEISE: query_lagerraum GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: query_lagerraum DEKLARATION: string query_lagerraum () BESCHREIBUNG: Mit dieser Funktion kann der Lagerraum des Verkaeufers abfragt werden. Die Funktion liefert 0, wenn der Verkaeufer keinen hat. VERWEISE: set_lagerraum GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: set_dont_serve_murderers DEKLARATION: void set_dont_serve_murderers (mixed msg) BESCHREIBUNG: Mit dieser Funktion setzt man, ob der Verkaeufer Moerder bedient. Als Argument 0, 1, oder der Text uebergeben, den Moerder erhalten. Beispiel: set_dont_serve_murderers("Franziska sagt: Moerder bediene ich nicht."); Mit set_dont_save_murders (1) kann das Bedienen von Moerdern ausgeschaltet werden, es wird dann ein "Standardtext" ausgegeben. Mit set_dont_serve_murderers (0) wird der Modus wieder ausgeschaltet. Standardmaessig werden Moerder bedient. VERWEISE: query_dont_serve_murderers GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: query_dont_serve_murderers DEKLARATION: mixed query_dont_serve_murderers () BESCHREIBUNG: Mit dieser Funktion kann abgefragt werden, ob der Verkaeufer Moerder bedient. Bei 0 werden Moerder bedient. Bei 1 oder einem String werden Moerder nicht bedient. VERWEISE: set_dont_server_murderers GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: set_roman DEKLARATION: void set_roman (int r) BESCHREIBUNG: Mit dieser Funktion kann man den Verkaeufer in den "Roemisch-Modus" setzen, Preisangaben werden dann in roemischen Ziffern gemacht. Einschalten mit set_roman (1), ausschalten mit set_roman (0). VERWEISE: query_roman GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: query_roman DEKLARATION: int query_roman() BESCHREIBUNG: Mit dieser Funktion gibt an object sich der Verkaeufer im "Roemisch-Modus" befindet. VERWEISE: set_roman GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: set_accept_tip DEKLARATION: void set_accept_tip (mixed t) BESCHREIBUNG: Mit dieser Funktion kann man setzen, ob ein Verkaeufer Trinkgeld akzeptiert. Standardmaessig nimmt er kein Trinkgeld. t == 0 wird als "kein Trinkgeld" interpretiert, alles andere als akzepiere Trinkgeld und tue das folgende: t == 1: nix besonderes t ist ein String: Der String wird als Dankeschoen ausgegeben (also set_accept_tip ("Otto sagt: Danke fuers Trinkgeld!")) t ist ein Funktionsaufrufspaar ({objektzeiger/String,Funktionsname}) oder eine Closure: Dann wird die entsprechende Funktion aufgerufen, uebergeben wird ein int - Argument mit der Hoehe des Trinkgeldes; es werden keine weiteren Meldungen generiert VERWEISE: GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: set_standard_conversation DEKLARATION: void set_standard_conversation(mapping m) BESCHREIBUNG: Mit dieser Funktion koennen die Standard - Meldungen des Verkaeufers beeinflusst werden. Die Mappingsvalueys koennen Strings, Stringarrays oder Closures (keine Pseudoclosures) sein. In dem uebergebenen Mapping sollten nur die Eintraege drinstehen, die veraendert werden sollen. An der Stelle, an welcher im Text ein Parameter rein muss, fuegt man ein $ - Zeichen ein. Mit dem Befehl "bsp? set_standard_conversation" gibt es ein Beispiel mit allen setzbaren Einstellunge (das mehr sagt als tausend Worte). Addendum: Wird im value eines Mapping-Keys eine Closure angegeben, so wird diese ausgefuehrt. Der Returnwert dieser Closure darf keine Pseudoclosures ($der() usw) enthalten, da die nicht nochmal ausgewertet werden. Die Paramter zu jeder Closure ist in /doc/funktionsweisen/handel/verkaeufer zu finden. BEISPIEL: siehe: bsp? set_standard_conversation VERWEISE: query_standard_conversation, change_standard_conversation GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: query_standard_conversation DEKLARATION: mapping query_standard_conversation() BESCHREIBUNG: Liefert ein Mapping mit den Standard - Meldungen des Verkaeufers. Fuer naehere Beschreibung siehe set_standard_conversation. VERWEISE: set_standard_conversation, change_standard_conversation GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: change_standard_conversation DEKLARATION: void change_standard_conversation(mapping changes) BESCHREIBUNG: Aendert die aktuelle standard conversation (siehe set_standard_conversation) ab, indem es die Eintraege aus der bisherigen standard conversation um die Eintraege aus dem uebergebenen Parameter modifiziert. Soll ein Eintrag hinzugefuegt werden oder geaendert werden, geschieht dies mit (["das_kostet":"Hans sagt: schieb mal $ rueber, zack zack."]), loeschen kann man ein Eintrag durch ne leere Angabe (["das_kostet":0]). VERWEISE: set_standard_conversation, query_standard_conversation GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: query_kunde DEKLARATION: object query_kunde() BESCHREIBUNG: Liefert den momentanen Kunden des Verkaeufers. Es kann dabei sein, dass der Kunde nicht 'present' ist. VERWEISE: GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: want DEKLARATION: mapping want (string s, object who) BESCHREIBUNG: Diese Funktion wird aufgerufen, wenn ein Spieler sagt, dass er etwas will (oder moechte usw.), uebergeben wird der Text, was der Spieler moechte sowie der Spieler selber. Naehers siehe bitte in der Enzy unter "Funktionsweisen", "Handel", "Verkaeufer". VERWEISE: given, want_while_serving GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: want_while_serving DEKLARATION: int want_while_serving(string was, object wer) BESCHREIBUNG: Diese Methode wird aufgerufen, wenn ein Spieler sagt, dass er etwas will (oder moechte usw.), waehrend der Verkaeufer gerade jemand anderen bedient. Sinn dieser Methode ist es, zu ermoeglichen, dass man bei Aktionen wie "will karte" bei Wirten reagieren kann, wenn das vom Spieler gewollte keine weiteren Reaktionen nach sich zieht und vom Verkaeufer mal kurz nebenbei zwischen reingeschoben werden koennen. Gibt die Methode den Wert 0 zurueck, so arbeitet der Verkaeufer ganz normal weiter (und sagt beispielsweise "Moment, ich bediene gerade."), liefert die Methode etwas von 0 verschiedenes, so geht der Verkaeufer davon aus, dass want_while_serving ihre Arbeit erfuellt hat und er nicht mehr weiters reagieren braucht. Siehe auch in der Enzy unter "Funktionsweisen", "Handel", "Verkaeufer". VERWEISE: want, given GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: deliver DEKLARATION: int deliver (object ob, object whom, int reason) BESCHREIBUNG: Diese Funktion wird aufgerufen, wenn der Verkaeufer dem Spieler whom einen Gegenstand ob aushaendigen will. reason gibt an, wieso diese Funktion aufgerufen wurde (definiert in ): VD_NORMAL Normales Geben VD_RECP_FULL Derjenige kann nix mehr aufnehmen VD_RECP_UNAVAIL Derjenige ist nicht mehr im Raum. Liefert die Funktion einen Wert 0, so kommt das Standardgeben des Verkaeufers zum Zug. VERWEISE: given, want_while_serving GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: given DEKLARATION: varargs mapping given (object what, object who, string wanted) BESCHREIBUNG: Diese Funktion wird aufgerufen, wenn ein Spieler einem Verkaeufer etwas gibt und der Verkaeufer nichts mit dem Gegenstand anfangen kann. Uebergeben wir der Gegenstand (what), der uebergeben wurde und der Spieler, der dem Verkaeufer etwas gegeben hat (who). Falls der Spieler vorher was wollte, so ist dies in 'wanted' enthalten. Naehers siehe bitte in der Enzy unter "Menue", "Funktionsweisen", "Handel", "Verkaeufer". VERWEISE: want GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: query_current_working_data DEKLARATION: mapping query_current_working_data() BESCHREIBUNG: Liefert fuer einen Verkaeufer eine Kopie des Mappings mit den Daten ueber den aktuellen Verkaufsvorgang. GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: add_to_filter DEKLARATION: void add_to_filter(mixed s) BESCHREIBUNG: Fuegt beim Verkaeufer einen String oder ein Stringarray zu den Woertern hinzu, die er herausfiltert. VERWEISE: delete_from_filter, query_filter, set_filter, query_react_on GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: delete_from_filter DEKLARATION: void delete_from_filter(mixed s) BESCHREIBUNG: Entfernt beim Verkaeufer einen String oder ein Stringarray von den Woertern, die er herausfiltert. VERWEISE: add_to_filter, query_filter, set_filter, query_react_on GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: query_filter DEKLARATION: string* query_filter() BESCHREIBUNG: Liefert vom Verkaeufer das Stringarray der Woerter, die er herausfiltert. VERWEISE: add_to_filter, delete_from_filter, set_filter, query_react_on GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: set_filter DEKLARATION: void set_filter(string* s) BESCHREIBUNG: Setzt beim Verkaeufer das Stringarray mit den Woertern, die er herausfiltert. VERWEISE: add_to_filter, delete_from_filter, query_filter, query_react_on GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: add_react_on DEKLARATION: void add_react_on(mixed s) BESCHREIBUNG: Fuegt beim Verkaeufer einen String oder ein Stringarray zu den Woertern hinzu, auf die er reagiert. VERWEISE: delete_react_on, set_react_on, query_react_on, query_filter GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: delete_react_on DEKLARATION: void delete_react_on(mixed s) BESCHREIBUNG: Entfernt beim Verkaeufer einen String oder ein Stringarray von den Woertern, auf die er reagiert. VERWEISE: add_react_on, set_react_on, query_react_on, query_filter GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: query_react_on DEKLARATION: string* query_react_on() BESCHREIBUNG: Liefert vom Verkaeufer das Stringarray der Woerter, auf die er reagiert. VERWEISE: add_react_on, delete_react_on, set_react_on, query_filter GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: set_react_on DEKLARATION: void set_react_on(string* s) BESCHREIBUNG: Setzt beim Verkaeufer das Stringarray mit den Woertern, auf die er reagiert. VERWEISE: add_react_on, delete_react_on, query_react_on, query_filter GRUPPEN: verkaeufer, handel, monster SOURCE: /i/money/verkaeufer.c FUNKTION: notify_sold DEKLARATION: void notify_sold(object seller,object what, object whom, object where) BESCHREIBUNG: When what durch seller an whom verkauft wurde, wird ENV(seller)->notify("sold",seller,what,whom) aufgerufen. Hinweis: Es sollte stattdessen notify_sold_here genutzt werden. VERWEISE: notify_sold_here, notify_sold_me, notify_sold_whom, notify_sold_what GRUPPEN: verkaeufer, handel SOURCE: /i/money/verkaeufer.c FUNKTION: notify_sold_here DEKLARATION: void notify_sold_here(object seller,object what, object whom, object where) BESCHREIBUNG: When what durch seller an whom verkauft wurde, wird ENV(seller)->notify("sold_here",seller,what,whom) aufgerufen. VERWEISE: notify_sold_me, notify_sold_whom, notify_sold_what GRUPPEN: verkaeufer, handel SOURCE: /i/money/verkaeufer.c FUNKTION: notify_sold_me DEKLARATION: void notify_sold_me(object what, object whom, object where,object seller) BESCHREIBUNG: When what durch seller an whom verkauft wurde, wird seller->notify("sold_me",what,whom,where) aufgerufen. VERWEISE: notify_sold_here, notify_sold_whom, notify_sold_what GRUPPEN: verkaeufer, handel SOURCE: /i/money/verkaeufer.c FUNKTION: notify_sold_what DEKLARATION: void notify_sold_what(object seller, object whom, object where,object what) BESCHREIBUNG: When what durch seller an whom verkauft wurde, wird what->notify("sold_what",seller,whom,where) aufgerufen. VERWEISE: notify_sold_here, notify_sold_whom, notify_sold_me GRUPPEN: verkaeufer, handel SOURCE: /i/money/verkaeufer.c FUNKTION: notify_sold_whom DEKLARATION: void notify_sold_whom(object seller,object what, object where, object whom) BESCHREIBUNG: When what durch seller an whom verkauft wurde, wird whom->notify("sold_whom",seller,what,where) aufgerufen. VERWEISE: notify_sold_here, notify_sold_what, notify_sold_me GRUPPEN: verkaeufer, handel SOURCE: /i/money/verkaeufer.c FUNKTION: set_accept_objects DEKLARATION: void set_accept_objects(mixed *) BESCHREIBUNG: Mit Hilfe von set_accept_objects() kann man einem Monster leicht beibringen, etwas anzunehmen und mit diesem Objekt dann etwas zu machen. Auch kann man einfach alle Gegenstaende ablehnen, sprich an den Absender zurueckgeben. Beispiel: Im create() des Monsters wird set_accept_objects so aufgerufen: set_accept_objects(({#'accept_from_void, #'accept_invis, #'bonbon, "bonbon", #'fackel, "fackel", "lampe", #'accept, "taler", #'other, #'refuse})); Sobald jetzt in dieses Monster etwas hineingeschoben wird, wird diese Liste von Funktionen abgearbeitet: Alle Objekte die vorher kein Environment hatten werden reingelassen. (accept_from_void) Alle Objekte, die unsichtbar sind, werden reingelassen. (accept_invis) Dann wird geprueft, ob das uebergebene Objekt die Id "bonbon" hat, wenn ja wird im Monster die Funktion bonbon aufgerufen, die z.B. so aussehen kann: int bonbon(object bonbon) { exec_command("sage Hmmm! Danke!"); exec_command("lutsche", bonbon); return 1; } Die Funktion erhält folgende Parameter: object ob: Das erhaltene Objekt. object old_room: Der vorherige Aufenthaltsort object monster: Das Monster, welches das Objekt erhalten hat. object tp: Das Objekt, welches zum Zeitpunkt der Übergabe this_player() war. mapping move_info: Alle move-Infos zur Bewegung (siehe move()). Liefert die Funktion 1 zurueck, so wird die Abarbeitung der obigen Liste beendet. Liefert die Funkion dagegen 0, dann wird mit dem naechsten Eintrag fortgefahren. Hinter jeder Funktion koennen mehrere Ids stehen, die alle durchgetestet werden. Stehen hinter der Funktion in der obigen Liste KEINE Ids, (wie bei #'other und #'refuse) dann wird die Funktion fuer jedes Objekt aufgerufen, das in das Monster kommt. Die Funktionen #'accept, #'accept_from_void, #'accept_invis und #'refuse sind vordefiniert. accept liefert einfach nur 1 zurueck, sprich das Objekt wird einfach kommentarlos akzeptiert (so wie bisher). accept_from_void liefert 1 zurueck, wenn das Objekt vorher keine Umgebung hatte, sonst 0. accept_invis liefert 1 zurueck, wenn das Objekt unsichtbar war, sonst 0. Die Funktion #'refuse gibt dem Uebergeber (this_player) den Gegenstand kommentarlos zurueck. Gegenstaende, auf die keine Funktion passt, werden einfach vom Monster behalten. Moechte man das Monster von einem anderen Objekt aus steuern, muessen die Closures etwas anders aussehen. In unserem Beispiel waere das dann so: #include ... lisa->set_accept_objects(({AO_ACCEPT_FROM_VOID, AO_ACCEPT_INVIS, AO_CALL(bonbon), "bonbon", AO_CALL(fackel), "fackel", AO_ACCEPT, "taler", AO_CALL(other), AO_REFUSE})); Anmerkung: Erwartet man vom Spieler Geld, so kann man dessen (Uebergabe-)Wert in der entsprechenden Funktion *nicht* mit query_money() abfragen, weil zu diesem Augenblick alle vorher schon vorhanden Geldobjekte (derselben Waehrung) zu diesem neuen dazuaddiert wurden. Man erhaelt mit query_money() also die neue Summe an Talern, bzw Dukaten etc, die das Monster jetzt bei sich traegt. Moechte man dagegen den gerade *uebergebenen* Geldbetrag erfahren, so verwendet man statt query_money, die Funktion query_transaction_value(). VERWEISE: accept, accept_from_void, refuse, give_object GRUPPEN: monster SOURCE: /i/monster/accept_objects.c FUNKTION: give_object DEKLARATION: void give_object(object ob, object player) BESCHREIBUNG: Die Funktion give_object() uebergibt dem angeben Spieler den Gegenstand (mit Hilfe des Monsterkommandos "gebe"). Spieler muss beim Monster sein, und das Monster muss den Gegenstand bei sich haben. Kann der den Gegenstand nicht annehmen, so legt ihn das Monster in seine Umgebung. Diese Funktion wird auch von refuse benutzt, das wiederum in set_accept_objects verwendet werden kann. VERWEISE: set_accept_objects, refuse, accept, accept_from_void, accept_invis GRUPPEN: monster SOURCE: /i/monster/accept_objects.c FUNKTION: accept DEKLARATION: int accept(object was, object woher) BESCHREIBUNG: siehe set_accept_objects VERWEISE: refuse, accept_from_void, accept_invis, set_accept_objects, give_object GRUPPEN: monster SOURCE: /i/monster/accept_objects.c FUNKTION: accept_from_void DEKLARATION: int accept_from_void(object was, object woher) BESCHREIBUNG: siehe set_accept_objects VERWEISE: accept, refuse, set_accept_objects, accept_invis, give_object GRUPPEN: monster SOURCE: /i/monster/accept_objects.c FUNKTION: accept_invis DEKLARATION: int accept_invis(object was, object woher) BESCHREIBUNG: siehe set_accept_objects VERWEISE: accept, refuse, accept_from_void, set_accept_objects, give_object GRUPPEN: monster SOURCE: /i/monster/accept_objects.c FUNKTION: refuse DEKLARATION: int refuse(object was, object woher, object acceptor) BESCHREIBUNG: siehe set_accept_objects VERWEISE: accept, accept_from_void, accept_invis, set_accept_objects, give_object GRUPPEN: monster SOURCE: /i/monster/accept_objects.c FUNKTION: set_start_parse_conversation DEKLARATION: int set_start_parse_conversation(int i) BESCHREIBUNG: Mit Dieser Funktion setzt man, ob ein Monster das gesetzt parse_conversation ueberhaupt verwenden soll, oder ob es gerade nicht parsen soll. Der gesetzte Wert wird zurueckgeliefert. Standard ist 1, wird durch set_parse_conversation und add_parse_conversation gesetzt. VERWEISE: set_parse_conversation, set_only_parse_players, add_parse_conversation GRUPPEN: monster SOURCE: /i/monster/communicate.c FUNKTION: query_start_parse_conversation DEKLARATION: int query_start_parse_conversation(int i) BESCHREIBUNG: Mit Dieser Funktion fraegt man ab, ob ein Monster das gesetzte parse_conversation ueberhaupt verwenden soll, oder ob es gerade nicht parsen soll. 1 = ja, 0 = nein. Standard ist 1, wird durch set_parse_conversation und add_parse_conversation gesetzt. VERWEISE: set_start_parse_conversation, set_parse_conversation, set_only_parse_players, query_only_parse_players GRUPPEN: monster SOURCE: /i/monster/communicate.c FUNKTION: set_parse_conversation DEKLARATION: void set_parse_conversation(object ob, mixed *regeln) BESCHREIBUNG: Die Programmierung 'intelligenter' Monster, d.h. Monster, die auf Ansprache durch einen Spieler oder auf Verhaltensweisen eines Spielers angepasst reagieren koennen, kann man sich durch die set_parse_conversation stark vereinfachen. Anhand des Regelwerks werden saemtliche Meldungen, die das Monster erhaelt (das sind im Prinzip alle, die auch ein Spieler erhaelt !!), begutachtet, und im Falle einer Uebereinstimmung wird eine in den Regeln benannte Routine im Objekt aufgerufen. Diese bekommt als Parameter die entsprechende Meldung und kann diese bei Bedarf noch genauer unter die Lupe nehmen und entsprechend darauf reagieren. Wird ein Monster durch einen Raum geclonet, so schreibt man zweckmaessiger- weise diese Routinen in den Raumfile und setzt ob auf den Raum. Ein anderes Beispiel ist /room/rathaus/div/leo. Er inheritet /i/monster/monster und wird nur geladen, nicht geclonet. Hier stehen die Routinen in Leo selbst, nicht in dem Raum, von dem aus Leo geladen wird. Syntax der Regeln: ({ Regel1, Regel2, ... }) Syntax einer Regel: "Funktionsname: Bedingung1 || Bedingung2 || .....", Flags Syntax einer Bedingung: Wort1 && Wort2 && ...... und schlieslich die Syntax eines Wortes: wort oder {wort} oder [silbe] oder [{silbe}] Wie funktioniert das? Eine Regel gilt dann als erfuellt, wenn MINDESTENS EINE ihrer Bedingungen erfuellt ist. Ein Bedingung wiederum ist dann erfuellt, wenn JEDES ihrer Worte in der angegebenen Reihenfolge innerhalb der Meldung gefunden wird. Wann wir ein Wort gefunden? wort steht fuer ein einzelnes, vollstaendiges Wort (das Wort muss so im Text vorkommen, davor und dahinter duerfen keine weiteren Buchstaben stehen). {wort} verhaelt sich wie letzteres; allerdings wird hier auf Gross- Klein-Schreibung geachtet. [silbe] Dies wird gefunden, sobald die angegebene Zeichenkette als einzelnes Wort ODER als Teil eines Wortes innerhalb der Meldung auftaucht. Gross- oder Klein-Schreibung ist hierbei NICHT signifikant. {[silbe]} Beide Schreibweisen verhalten sich identisch und wie [..], nur dass [{silbe}] auf Gross-Klein-Schreibung geachtet wird. Dieses Wort muss dem verwendeten Befehl entsprechen (red, sag, verkuend, grins, kicher). (Funktioniert nicht mit PARSE_MESSAGE, es muss also irgendeine andere PARSE-Option angegeben werden.) Innerhalb der Klammern duerfen zudem mehrere Wort-Alternativen durch Kommata getrennt genannt werden, folgendes ist also moeglich: wort,wort findet eines der angegebenen Woerter [silbe,silbe] findet eine der angegebenen Silben findet einen der angegebenen Befehle Nicht erlaubt dagegen ist die Kombination von verschiedenen Klammerungen, also wort,[silbe], ist nicht moeglich, bzw. wuerde nach diesen Klammern als Teil des Wortes selbst suchen. Hinter jeder Regel kann man eine Reihe von Flags angeben, welche mit Oder (|) verbunden werden muessen: PARSE_SAY Nur lokale Kommunikation (sage, bemerke, verkuende, denke) wird beachtet. PARSE_TELL Fernkommunikation (rede) wird begutachtet. PARSE_SOUL Seele-Reaktionen werden erkannt. (Das Seele-Kommando und sein Adverb werden untersucht.) PARSE_FOR_ME Die Meldung ist direkt an das Monster gerichtet (sage zu monster, rede monster, knuddle monster). PARSE_MESSAGE Es werden alle Meldungen, die der NPC erhaelt, untersucht. (Dieses Flag kann nicht zusammen mit PARSE_SAY, PARSE_TELL, PARSE_SOUL oder PARSE_FOR_ME verwendet werden.) PARSE_CONTINUE Selbst wenn diese Regel gepasst hat, sollen zusaetzlich auch nachfolgende Regeln untersucht werden. (Die weiteren Funktionen werden dann zeitverzoegert ausgefuehrt.) Sollten die normalen Regeln nicht ausreichen, kann man regulaere Ausdruecke angeben. Aus Gruenden der Wartbarkeit und Leserlichkeit sollte man dies aber weitgehend vermeiden. Folgende Flags sind dafuer vorgesehen: PARSE_RE_TRADITIONAL Die Regel enthaelt einen traditionellen regulaeren Ausdruck (siehe regexp-Efun). PARSE_RE_PCRE Die Regel enthaelt einen PCRE. PARSE_RE_CASE_SENSITIVE Per default wird der regulaere Ausdruck ohne Beachtung von Gross-/Kleinschreibung ausgewertet. Mit diesem Flag wird die Schreibung beachtet. Man kann alle diese Flags auch weglassen, dann gilt PARSE_MESSAGE. Diese Defines sind in monster.h definiert. WICHTIG: In den aufgerufenen Routinen gilt folgendes: this_player() == Spieler this_object() == ob (meistens der Raum, der das Monster erzeugt) previous_object() == Monster Die Routinen erhalten folgende Parameter: string str Der Text. string verb Das benutzte Verb (red, sag, kicher) object monster Das Monster, das die Meldung erhalten hat. object player Das Lebewesen, das die Meldung verursacht hat. int flags Zur Anwendung gekommene PARSE-Flags. mapping info Weitere Details zur Meldung mit folgendem Inhalt: PARSE_INFO_RECIPIENTS: Alle Empfaenger eines Rede-Textes. PARSE_INFO_MSG_ACTION: Der Aktions-Typ PARSE_INFO_MSG_TYPE: Der Meldungs-Typ Die Routinen koennen PARSE_CONTINUE zurueckliefern, um die Auswertung weiterer Regeln (ohne Zeitverzoegerung) zu bewirken. BEISPIEL: In einem Raum-File koennte folgendes programmiert sein: void reset() { ......... monster->set_parse_conversation(this_object(),({ "gruss: hallo || gruess gott || guten tag || hi", PARSE_SAY|PARSE_CONTINUE, "smalltalk: harry && wie geht || was macht && harry", PARSE_SAY, "suche: wo && [finde] || [such]", PARSE_SAY, "bedanke: ", PARSE_SOUL, "wetter: [wetter]", PARSE_SAY })); ........ } int gruss(string str, string verb, object monster, object player, int flags) monster->exec_command("sage Tach!"); } int smalltalk(string str, string verb, object monster, object player, int flags) { monster->exec_command("sage Der schlaeft... wie immer... irgendwo."); } int bedanke(string str, string verb, object monster, object player, int flags) { monster->exec_command("sage zu", player, "Nichts zu danken."); } VERWEISE: add_parse_conversation, set_only_parse_players, query_rules, query_funcs GRUPPEN: monster SOURCE: /i/monster/communicate.c FUNKTION: add_parse_conversation DEKLARATION: void add_parse_conversation(object ob, string *regeln) BESCHREIBUNG: siehe set_parse_conversation. Die Regeln werden jedoch nicht gesetzt, sondern hinzugefuegt. Ein anderes ob, wie das bei set_parse_conversation benutze ist moeglich. VERWEISE: set_parse_conversation, set_only_parse_players, query_rules, query_funcs, GRUPPEN: monster SOURCE: /i/monster/communicate.c FUNKTION: set_only_parse_players DEKLARATION: void set_only_parse_players(int i) BESCHREIBUNG: Mit Dieser Funktion setzt man, ob ein Lebewesen nur auf das parsen soll, was ein Spieler sagt, nicht aber auf das, was andere Lebewesen (Monster) sagen. Dies sollte man immer setzen, wenn das Lebewesen nicht unbedingt auf andere Lebewesen parsen muss, da das Parsen SEHR viel Zeit kostet !!! VERWEISE: set_parse_conversation, query_only_parse_players GRUPPEN: monster SOURCE: /i/monster/communicate.c FUNKTION: query_only_parse_players DEKLARATION: int query_only_parse_players() BESCHREIBUNG: Mit Dieser Funktion fragt man ab, ob ein Lebewesen nur auf das parsed, was ein Spieler sagt, nicht aber auf das, was andere Lebewesen (Monster) sagen. VERWEISE: set_parse_conversation, set_only_parse_players GRUPPEN: monster SOURCE: /i/monster/communicate.c FUNKTION: query_rules DEKLARATION: mixed *query_rules() BESCHREIBUNG: Mit query_rules kann man die Regeln abfragen, nach denen ein Monster auf eine Anrede reagiert. Die Regeln, die man zurueckbekommt, sind die, die man mit der Funktion set_parse_conversation gesetzt hat. VERWEISE: set_parse_conversation, query_funcs GRUPPEN: monster SOURCE: /i/monster/communicate.c FUNKTION: query_kampagne DEKLARATION: mixed *query_kampagne() BESCHREIBUNG: Liefert zurueck, ob ein Monster ein Kampagnen-Monster ist, und wenn es eines ist, dann die Kampagnen, die es benutzt. Eine ausfuehrliche Beschreibung zu Kampagnen findet sich in /doc/funktionsweisen/monster/kampagnen. VERWEISE: in_kampagne, starte_kampagne GRUPPEN: monster SOURCE: /i/monster/kampagne.c FUNKTION: in_kampagne DEKLARATION: string in_kampagne() BESCHREIBUNG: Liefert den Namen der Kampagne zurueck, in der sich das Monster befindet, ansonsten 0. Eine ausfuehrliche Beschreibung zu Kampagnen findet sich in /doc/funktionsweisen/monster/kampagnen. VERWEISE: query_kampagne, starte_kampagne, stop_kampagne GRUPPEN: monster SOURCE: /i/monster/kampagne.c FUNKTION: stop_kampagne DEKLARATION: int stop_kampagne(int dauer) BESCHREIBUNG: Haelt eine Kampagne fuer dauer sec an. Wenn das geklappt hat liefert stop_kampagne 1 zuruck, sonst 0. Eine ausfuehrliche Beschreibung zu Kampagnen findet sich in /doc/funktionsweisen/monster/kampagnen. VERWEISE: in_kampagne, starte_kampagne, resume_kampagne, breche_kampagne_ab GRUPPEN: monster SOURCE: /i/monster/kampagne.c FUNKTION: kampagne_waits DEKLARATION: string kampagne_waits(string name) BESCHREIBUNG: Liefert die Position zuruck, an der das Monster in der Kampagne name gerade auf Fortsetzung wartet, oder null, wenn das Monster kein Kampagnenmonster ist, nicht gerade die Kampagne name abarbeitet oder garn nicht wartet. Eine ausfuehrliche Beschreibung zu Kampagnen findet sich in /doc/funktionsweisen/monster/kampagnen. VERWEISE: in_kampagne, query_kampagne, stop_kampagne, resume_kampagne GRUPPEN: monster SOURCE: /i/monster/kampagne.c FUNKTION: resume_kampagne DEKLARATION: int resume_kampagne() BESCHREIBUNG: Mit resume_kampagne kann man eine kampagne wieder aufnehmen, die mit stop_kampagne unterbrochen wurde. Wenn es geklappt hat, liefert resume_kampagne 1 zurueck, sonst 0. Eine ausfuehrliche Beschreibung zu Kampagnen findet sich in /doc/funktionsweisen/monster/kampagnen. VERWEISE: in_kampagne, kampagne_waits, stop_kampagne GRUPPEN: monster SOURCE: /i/monster/kampagne.c FUNKTION: starte_kampagne DEKLARATION: int starte_kampagne(string name) BESCHREIBUNG: Mit starte_kampagne kann man die Kampagne mit dem Filenamen name starten. Wenn es geklappt hat, liefert starte_kampagne 1 zurueck, sonst 0. Eine ausfuehrliche Beschreibung zu Kampagnen findet sich in /doc/funktionsweisen/monster/kampagnen. VERWEISE: query_kampagne, breche_kampagne_ab GRUPPEN: monster SOURCE: /i/monster/kampagne.c FUNKTION: breche_kampagne_ab DEKLARATION: void breche_kampagne_ab() BESCHREIBUNG: Mit breche_kampagne_ab kann man eine Kampagne vorzeitig abbrechen. Eine ausfuehrliche Beschreibung zu Kampagnen findet sich in /doc/funktionsweisen/monster/kampagnen. VERWEISE: starte_kampagne, stop_kampagne, in_kampagne GRUPPEN: monster SOURCE: /i/monster/kampagne.c FUNKTION: set_npc_name DEKLARATION: void set_npc_name(string name) BESCHREIBUNG: Hiermit setzt man fuer NPCs einen Mudweit eindeutigen Namen. Man kann diesen NPC dann mit find_living(name) finden. Achtung: Diese Funktion setzt nicht den wirklichen Namen des NPCs. Dies muss man mit set_name immer noch machen. VERWEISE: initialize efun::find_living efun::set_living_name GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: query_npc_name DEKLARATION: string query_npc_name() BESCHREIBUNG: Hiermit fragt man fuer diesen NPC den Mudweit eindeutigen Namen, welcher mit set_npc_name gesetzt wurde. VERWEISE: set_npc_name efun::query_living_name GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: init_monster DEKLARATION: deprecated varargs void init_monster(string name, int level, int num_hands, int hp, int sp, int weapon_level, int arm_level) BESCHREIBUNG: Diese Funktion bitte nicht mehr verwenden, da sie durch 'initialize' abgeloest wurde. Mit initialize wird die Rasse angegeben und das Monster mit den entsprechenden Werten versehen, der Name ist hingegen anschliessend mit set_name (und evntl. set_npc_name) zu setzen. VERWEISE: initialize GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: initialize DEKLARATION: varargs void initialize(string rasse [, int level ] ) BESCHREIBUNG: Mit dieser Funktion Initialisiert man das Monster. Das Monster wird als Monster der Rasse 'rasse' und dem Level 'level' innerhalb der Rassendefinition initialisiert. Alle zur Verfuegung stehenden Rassen sind in /static/adm/MONSTER_DEFS definiert, weitere koennen bei den Admins beantragt werden. Der Level laeuft von 0 (keinerlei Ausdauer, Staerke etc.) bis 100 (fuer diese Rasse maximale Stats). VERWEISE: give_hp, give_sp, give_hands, give_weapon_level, give_armour_level GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: give_hp DEKLARATION: void give_hp(int hp) BESCHREIBUNG: Mit dieser Funktion gibt man an, wieviele Ausdauer-Punkte das Monster haben soll. Dabei wird der aktuelle und maximale Wert auf die angegebene Anzahl gesetzt. VERWEISE: initialize, give_sp, give_hands, give_weapon_level, give_armour_level set_hp, add_hp, query_hp, query_max_hp GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: give_sp DEKLARATION: void give_sp(int sp) BESCHREIBUNG: Mit dieser Funktion gibt man an, wieviele Zauber-Punkte das Monster haben soll. Dabei wird der aktuelle und maximale Wert auf die angegebene Anzahl gesetzt. VERWEISE: initialize, give_hp, give_hands, give_weapon_level, give_armour_level set_sp, query_sp, query_max_sp GRUPPEN: monster, zaubern SOURCE: /i/monster/monster.c FUNKTION: give_hands DEKLARATION: void give_hands(int hands) BESCHREIBUNG: Mit dieser Funktion gibt man an, wieviele Haende das Monster haben soll. Die Anzahl der Haende zeigt an, wieviele Waffen das Monster fuehren kann, und gegen wieviele Spieler das Monster kaempfen kann. VERWEISE: initialize, give_sp, give_hp, give_weapon_level, give_armour_level query_num_hands GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: give_weapon_level DEKLARATION: void give_weapon_level(int level) BESCHREIBUNG: Mit dieser Funktion gibt man an, wie stark das Monster OHNE Waffe kaempfen kann. VERWEISE: initialize, give_sp, give_hp, give_hands, give_armour_level GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: give_armour_level DEKLARATION: void give_armour_level(int level) BESCHREIBUNG: Mit dieser Funktion gibt man an, wie gut das Monster geschuetzt ist. Wenn das Monster zusaetzlich noch eine Ruestung an hat, wird der Schutz noch besser. VERWEISE: initialize, give_sp, give_hp, give_hands, give_weapon_level query_armour_level GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: query_natural_weapon DEKLARATION: mapping query_natural_weapon(int hand) BESCHREIBUNG: Diese Funktion sucht nach einer passenden natuerlichen Waffe fuer 'hand'. Bei 'hand' handelt es sich um die Nummer der Hand, mit der zugeschlagen werden soll (Zaehlweise beginnt bei 0). Standardmaessig liefert diese Funktion das Mapping eines V-Items zurueck, welches die ID "natural#weapon" besitzt und zur Hand passt. Das ist genau das 'hand'te V-Item, oder falls es nicht genug gibt, das erste. Bei Bedarf kann man die Funktion auch ueberlagern. Wichtig ist, dass das zurueckgelieferte Mapping mit Grammatikfunktionen verwendet werden kann. Liefert die Funktion 0 zurueck, wird "mit blossen Haenden" gekaempft. VERWEISE: GRUPPEN: spieler, monster, haende, kampf SOURCE: /i/monster/monster.c FUNKTION: do_command DEKLARATION: int do_command(string befehl) BESCHREIBUNG: do_command laesst das Monster das Kommando befehl ausfuehren. Statt do_command kann immer exec_command verwendet werden. do_command sollte nicht verwendet werden, wenn durch Kommando befehl andere Objekte angesprochen werden sollen. Beispielsweise: do_command("knuddel ork") besser: exec_command("knuddel", ork_ob) Siehe exec_command. VERWEISE: exec_command, command GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: set_turn_heart_beat_off DEKLARATION: void set_turn_heart_beat_off(int a) BESCHREIBUNG: Mit dieer Funktion kann man setzen, ob der heart-beat abgeschaltet werden soll, wenn sich kein Spieler mehr in der Umgebung des Monsters befindet. Standard ist 1. VERWEISE: query_turn_heart_beat_off GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: query_turn_heart_beat_off DEKLARATION: int query_turn_heart_beat_off() BESCHREIBUNG: Mit dieser Funktion kann man abfragen, ob der heart-beat abgeschaltet werden soll, wenn sich kein Spieler mehr in der Umgebung des Monsters befindet. VERWEISE: set_turn_heart_beat_off GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: set_notify_soul_ob DEKLARATION: deprecated void set_notify_soul_ob(object ob) BESCHREIBUNG: DIESE FUNKTION IST VERALTET UND SOLLTE NICHT MEHR VERWENDET WERDEN! Bitte stattdessen notify_seele und add_controller zur Anmeldung verwenden. Wird ein Objekt gesetzt, so werden die notify_soul() und soul_command() Funktion der Seele an dieses Objekt weitergereicht. Clones werden nicht angenommen, prinzipiell sollte hier der Raum, in dem das Monster geclont wurde, gesetzt werden. VERWEISE: set_dead_ob, query_notify_soul_ob_file GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: query_notify_soul_ob_file DEKLARATION: deprecated string query_notify_soul_ob_file() BESCHREIBUNG: DIESE FUNKTION IST VERALTET UND SOLLTE NICHT MEHR VERWENDET WERDEN! Bitte stattdessen notify_seele und query_controller zur Abfrage der Controller verwenden. Hier kann man den Filenamen des Objekts abfragen, an das die Funktionen notify_soul() und soul_command() der Seele weitergereicht werden, VERWEISE: set_notify_soul_ob, query_dead_ob_file GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: monster_died DEKLARATION: void monster_died(object monster, object moerder) BESCHREIBUNG: Diese Funktion wird im angemeldeten dead-ob (siehe set_dead_ob) aufgerufen, wenn das Monster stirbt (und zwar weil der boese 'moerder' is umgebracht hat). 'moerder' kann dabei auch 0 sein. Spaeter wird dann auch noch design_corpse aufgerufen. VERWEISE: set_dead_ob, query_dead_ob_file, design_corpse GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: set_dead_ob DEKLARATION: void set_dead_ob(mixed ob) BESCHREIBUNG: Wenn dieser Funktion ein Objekt uebergeben wird, so wird in diesem Objekt die Funktion 'monster_died(object monster, object enemy)' aufgerufen, wenn das Monster stirbt. Es wird der Objekt-Pointer auf das Monster uebergeben. Ausserdem wird noch eine Routine 'design_corpse(object corpse) aufgerufen, in der die Leiche noch ein wenig designed werden kann. VERWEISE: query_dead_ob_file, set_notify_soul_ob, monster_died, design_corpse GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: design_corpse DEKLARATION: void design_corpse(object corpse) BESCHREIBUNG: Diese Funktion wird in dem mit 'set_dead_ob(object ob)' gesetzten Objekt aufgerufen, wenn das Monster stirbt. Uebergeben wird die Leiche, die man dann noch etwas designen kann. VERWEISE: set_dead_ob, monster_died, query_dead_ob_file, set_notify_soul_ob GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: compute_kill_skill DEKLARATION: nomask int compute_kill_skill() BESCHREIBUNG: Liefert die EP zurueck, die das Monster im Sterben an seinen Moerder abgibt. VERWEISE: die GRUPPEN: monster, kampf, spieler SOURCE: /i/monster/monster.c FUNKTION: query_dead_ob_file DEKLARATION: string query_dead_ob_file() BESCHREIBUNG: Liefert den Filenamen des Objekts, das mit set_dead_ob() gesetzt wurde (falls es gesetzt wurde). VERWEISE: set_dead_ob, query_notify_soul_ob_file, design_corpse GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: test_aggression DEKLARATION: int test_aggression(object player) BESCHREIBUNG: Testet den Spieler 'player' im Raum des Monsters und greift ihn gegebenfalls an. Liefert 1, wenn der Spieler angegriffen wurde, sonst 0. Wird vom init() des Monster aufgerufen, wenn ein Spieler in die Umgebung des Monsters kommt, um zu entscheiden, ob dieser angegriffen werden soll. Massgebend ist der aggression Status, der Verteidigungsmodus und die attack_list/no_attack_list des Monsters. Es werden nur interaktive Objekte (Spieler) angegriffen. VERWEISE: set_aggressive, query_aggressive, test_all_aggressions set_no_attack_list, set_attack_list, set_reattack GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: test_all_aggressions DEKLARATION: int test_all_aggressions(void) BESCHREIBUNG: Testet alle Spieler im Raum durch und greift diese an, als wenn sie gerade den Raum betreten haetten, vorausgesetzt das Monster ist aggressiv, etc. Liefert die Zahl der angegriffenen Spieler. VERWEISE: set_aggressive, query_aggressive, test_aggression GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: set_aggressive DEKLARATION: void set_aggressive(int flag) BESCHREIBUNG: Mit dieser Funktion kann man einstellen, ob das Monster agressiv ist, d.h. dass es einen Spieler angreift, wenn dieser den Raum betritt, oder nicht. Wenn flag 1 ist, dann ist es agressiv, bei 0 nicht. Beim Setzen von 1 greift das Monster sogleich an, wenn Spieler im Raum sind. Beim Setzen von 0 beendet es den Kampf mit allen Spielern im Raum. VERWEISE: query_aggressive, attackiere_command, schiesse_command, werfe_command GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: query_aggressive DEKLARATION: int query_aggressive() BESCHREIBUNG: Mit dieser Funktion kann man abfragen, ob ein NPC oder Monster von Natur aus angriffslustig ist oder nicht. Gegenstueck zu set_aggressive VERWEISE: set_aggressive, attackiere_command, schiesse_command, werfe_command GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: set_attack_delay DEKLARATION: void set_attack_delay(int aggressive, int attack_list) BESCHREIBUNG: Damit setzt man die Verzoegerung fuer einen Angriff des NPCs. Der erste Wert aggressive gibt die Dauer in Sekunden fuer einen Angriff wegen query_aggressive() und der zweite Wert attack_list fuer einen Angriff, weil der Gegner auf der Angriffsliste steht. Ein Wert < 0 bedeutet einen sofortigen Angriff, Werte >= 0 einen Angriff ueber call_out. VERWEISE: set_aggressive, add_attack_list GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: query_attack_delay DEKLARATION: int *query_attack_delay() BESCHREIBUNG: Liefert die mit set_attack_delay gesetzten Werte in einem Array zurueck. Der erste Wert des Arrays entspricht dem 1. Parameter von set_attack_delay, der 2. Wert entsprechend dem 2. Parameter. VERWEISE: set_aggressive, add_attack_list GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: set_erf_tod_message DEKLARATION: void set_erf_tod_message(mixed erf_tod_message) BESCHREIBUNG: Damit setzt man die Meldung, die der Spieler bei 'erf tod' erhaelt, wenn er von diesem Monster umgebracht und keine explizite Meldung bei add_hp uebergeben wurde. Die Meldung kann auch eine Pseudoclosure oder Closure sein. Ebenfalls erlaubt ist ein Mapping so, wie es von query_erf_tod_message zurueckgeliefert wird. Dort sind ebenfalls Pseudoclosures oder Closures erlaubt. (Das Opfer ist OBJ_TP, der Taeter ist OBJ_TO.) Zum Beispiel: set_erf_tod_message("Du wurdest von $dem(OBJ_TO) erschlagen."); set_erf_tod_message("Eine Mueckenschwarm hat Dich ueberfallen."); set_erf_tod_message( ([ AH_ERF_TOD: "Du wurdest von $dem(OBJ_TO) ueberrollt.", AH_ERF_TOD_OTHER: "$Der(OBJ_TP) wurde vo $dem(OBJ_TO) ueberrollt.", AH_ERF_RETTUNG: "Beinahe ueberrollte $ein(OBJ_TO) $den(OBJ_TP)." ])); VERWEISE: query_erf_tod_message, add_hp GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: set_init_ob DEKLARATION: deprecated void set_init_ob(object ob) BESCHREIBUNG: Diese Funktion ist veraltet, stattdessen sollte add_init_ob benutzt werden. Wenn dieser Funktion ein Objekt uebergeben wird, so wird in diesem Objekt die Funktion 'monster_init(...)' aufgerufen, wenn ein Lebewesen den gleichen Raum betritt bzw. das Monster einen Raum betritt, in welchem sich Lebewesen befinden. Es werden der Objekt-Pointer auf das Monster sowie ein Objekt-Zeiger auf das sich naehernde Lebewesen uebergeben. VERWEISE: add_init_ob, delete_init_ob, monster_init, player_init GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: set_random_pick DEKLARATION: varargs void set_random_pick(int percent, int flag) BESCHREIBUNG: Mit dieser Funktion kann man einstellen, ob das Monster zufaellig Sachen aufheben soll. Falls moeglich, werden die Sachen angezogen bzw. gefuehrt. 'percent' ist die Chance in Prozent (0-100), mit der etwas aufgehoben wird. 'flag' ist ein Bitfeld mit folgenden ver-|-baren Moeglichkeiten: PICK_NO_WEAR - Aufgehobene Kleidung soll nicht angezogen werden PICK_NO_WIELD - Aufgehobene Waffen sollen nicht gefuehrt werden PICK_ONLY - Sachen nur aufheben, sonst nichts machen. Die Flags sind in monster.h definiert. VERWEISE: query_random_pick, query_random_pick_modus GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: query_random_pick DEKLARATION: int query_random_pick() BESCHREIBUNG: Liefert die mit set_random_pick gesetzte Wahrscheinlichkeit, dass der NPC etwas aufhebt. VERWEISE: set_random_pick, query_random_pick_mdus GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: query_random_pick_modus DEKLARATION: int query_random_pick_modus() BESCHREIBUNG: Liefert die mit set_random_pick gesetzte Flags darueber, was der NPC mit den aufgehobenen Sachen macht. VERWEISE: set_random_pick, query_random_pick GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: set_attack_list DEKLARATION: void set_attack_list(string *names) BESCHREIBUNG: Mit dieser Funktion kann man eine Liste von Namen angeben, die das Monster angreifen soll, wenn sie sich im gleichen Raum befinden. VERWEISE: add_attack_list, delete_attack_list, set_no_attack_list GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: query_attack_list DEKLARATION: string *query_attack_list() BESCHREIBUNG: Mit dieser Funktion kann man eine Liste von Namen abfragen, die das Monster angreift, wenn sie sich im gleichen Raum befinden. VERWEISE: set_no_attack_list, set_attack_list GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: add_attack_list DEKLARATION: void add_attack_list(string name) BESCHREIBUNG: Mit dieser Funktion kann man zu der Liste von Namen, die das Monster angreifen soll, wenn sie sich im gleichen Raum befinden, einen weiteren Namen hinzufuegen. VERWEISE: set_attack_list, delete_attack_list GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: delete_attack_list DEKLARATION: void delete_attack_list(string name) BESCHREIBUNG: Mit dieser Funktion kann man aus der Liste von Namen, die das Monster angreifen soll, wenn sie sich im gleichen Raum befinden, einen Namen loeschen. VERWEISE: set_attack_list, add_attack_list GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: set_no_attack_list DEKLARATION: void set_no_attack_list(string *names) BESCHREIBUNG: Mit dieser Funktion kann man eine Liste von Namen angeben, die das Monster NICHT angreifen soll. VERWEISE: set_attack_list GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: query_armour_level DEKLARATION: int query_armour_level() BESCHREIBUNG: Mit dieser Funktion kann man die Ruestungs-Starke des Monsters abfragen. VERWEISE: give_armour_level GRUPPEN: monster, kampf SOURCE: /i/monster/monster.c FUNKTION: new_inv DEKLARATION: object *new_inv() BESCHREIBUNG: Diese Routine gibt alle Objekte zurueck, die seit dem letzten Aufruf von new_inv() ins Monster gekommen sind. Hierbei ist das neueste immer an erster Stelle der Liste. Beispiele findet man im /i/gasthof/wirt.c und im /d/Vaniorh/uluji/uluji.c . VERWEISE: parse_conversation GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: set_eatable_corpse DEKLARATION: void set_eatable_corpse(int|mapping bratbar) BESCHREIBUNG: Wird dieser Funktion 1 oder ein Mapping uebergeben, so wird beim Tode des Monsters "/p/Npc/obj/kadaver" oder bratbar["kadaver_file"] statt "/obj/leiche.c" (Default) verwendet. Der Kadaver ist fuer Tiere gedacht, die essbar sind... Der Tierkoerper laesst sich dann an einem Lagerfeuer braten, solange er noch frisch ist. HINWEIS: Die Tiere sollten ein "sinnvolles" Gewicht gesetzt bekommen. Ueber die Schluessel des Mappings bratbar lassen sich auch Details zum Kadaver und Braten setzen. -> Fuer naehere Hinweise siehe /p/INFO/Enzyclopedia/doku/braten_kadaver VERWEISE: query_eatable_corpse GRUPPEN: monster, nahrung SOURCE: /i/monster/monster.c FUNKTION: query_eatable_corpse DEKLARATION: mapping query_eatable_corpse() BESCHREIBUNG: Liefert zurueck, ob dieses Monster beim Sterben eine essbare Leiche (Kadaver) hinterlaesst (statt "/obj/leiche"). Wenn ja, wird ein Mapping geliefert, das zusaetzliche Informationen zu dem Kadaver enthalten kann. Der Kadaver wird aus "/p/Npc/obj/kadaver" erzeugt, es sei denn, der Schluessel "kadaver_file" ist definitert. Alle Schluessel siehe /p/INFO/Enzyclopedia/doku/braten_kadaver. Der Kadaver ist fuer Tiere gedacht, die essbar sind... Der Tierkoerper laesst sich dann an einem Lagerfeuer braten, solange er noch frisch ist. VERWEISE: set_eatable_corpse GRUPPEN: monster, nahrung SOURCE: /i/monster/monster.c FUNKTION: query_commander DEKLARATION: string query_commander() BESCHREIBUNG: Ein NPC, welcher von einem Spieler gesteuert werden kann, muss eine solche Funktion haben, welche dann den real_cap_name des Spielers zurueckliefert, der diesen NPC steuert. GRUPPEN: monster SOURCE: /i/monster/monster.c FUNKTION: query_random_activities DEKLARATION: mapping query_random_activities() BESCHREIBUNG: Liefert die interne Datenstruktur mit den Zufallshandlungen des Monsters. ACHTUNG: Diese Funktion sollte nur zu Debugzwecken genutzt werden, da sich diese Datenstruktur aendern kann. Dieses Mapping besitzt zwei Eintraege: query_random_activities()["rollen"] Array aus Strings mit den einzelnen den Kommandos bzw Namen der Rollen/Kampagnen (so wie sie bei set/add_random_activities angegeben wurden) query_random_activities()["orte"] Mapping mit den moeglichen Orten als Indizes ("*" steht fuer alle Orte). Pro Ort ein Mapping mit Integer (0 bis 1439 Minuten des Tages) als Indizes, wobei fuer eine Tageszeit der Eintrag mit groessten Nummer, welche kleiner oder gleich der Tageszeit ist, gueltig ist. Als Werte enthaelt dieses Mapping ein Array mit den Indizes fuer query_random_activities()["rollen"]. VERWEISE: add_random_activities, query_random_modus, query_activity, query_start_random GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: add_random_activities DEKLARATION: void add_random_activities(mapping aktionen) BESCHREIBUNG: Damit kann ein Monster ziemlich gut mit einer (Zufalls-) Handlung ausgestattet werden. Angegeben werden koennen: - Kommandos per do_command (evtl. Seele nicht vergessen) - Rollen - Kampagnen random_start erkennt die verschiedenen Moeglichkeiten anhand des ersten Zeichens: a. "!" wird an do_command uebergeben; zB: "!sage Warum gibt mir keiner etwas Geld?" "!mache schaut sich um." b. "$" ist der Filename einer Rolle; zB: "$/d/Vaniorh/Tadmor/Strassen/rollen/zuwenig" Label mit: "$/pfad/zum/rollenfile,label" c. "&" ist der Filename einer Kampagne; zB: "&/d/Vaniorh/Tadmor/Strassen/rollen/sauftour.kamp" d. Darf mehrere Aktionen enthalten, die direkt hinter- einander ausgefuehrt werden. zB: ({"!grinse breit", "!emote Du kannst einige Zahnluecken erkennen."}) e. Closures werden mit dem NPC als Parameter aufgerufen. Rueckgabewert darf 0 oder eines von a. bis d. sein. Es ist moeglich, eine Rolle in Abhaengigkeit von bestimmten Orten starten zu lassen, hierbei kann man komplette Filenamen oder auch Directorynamen (bzw. Substrings davon) angeben; z.B.: "/room/rathaus/treppe" Kommando wird nur in diesem Raum gestartet; "/d/Vaniorh" Kommando wird ueberall in Vaniorh gestartet; "*" oder 0 Kommando wird ueberall in UNItopia gestartet. Weiterhin kann eine Rolle auch nur innerhalb bestimmter Zeitraeume gestartet werden; Zeitraeume gibt man in der Form "hhmm-hhmm" an. z.B.: "400-1100" von 4 Uhr bis 11 Uhr "1200-2359" von 12 Uhr bis 23 Uhr 59 "*" oder 0 zu beliebigen Zeiten. Alle diese Parameter werden in folgenden Aufruf zusammengefasst: void add_random_activities( ([ activity1 : ([ ort1 : ({ zeit1, zeit2, .. }), ort2 : ..... , ..... ]), activity2 : ..... , ....... ]); Beispiel: add_random_activities( ([ "!sage Wie gehts?" : 0 , "!echo $Der() streckt sich und gaehnt herzhaft." : 0; "!sage Schoenes Wetter heute morgen!" : ([ "*" : ({ "400-1000" }) ]), "!sage Warst du schon Mittagessen? Westlich von hier gibts eine gute "+ "Wirtschaft." : ([ "/d/Vaniorh/uluji/market_place" :({"1130-1330"}) ]), "!sage Wie waers mit einem Kaffee?" : ([ "*": ({ "800-1000", "1300-1600" }) ]) ])); VERWEISE: set_random_activities, set_start_random, set_activity, set_activity_delay, set_random_modus GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: query_current_vtime DEKLARATION: int query_current_vtime() BESCHREIBUNG: Liefert die aktuelle vtime. Kann ueberlagert werden, um fuer die random_activities einen anderen Zeitgeber als vtime() zu nutzen. VERWEISE: add_random_activities, set_random_activities GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: set_random_activities DEKLARATION: void set_random_activities(mapping aktionen) BESCHREIBUNG: Damit kann ein Monster ziemlich gut mit einer (Zufalls-) Handlung ausgestattet werden. Angegeben werden koennen: - Kommandos per do_command (evtl. Seele nicht vergessen) - Rollen - Kampagnen random_start erkennt die verschiedenen Moeglichkeiten anhand des ersten Zeichens: a. ! wird an do_command uebergeben; zB: "!sage Warum gibt mir keiner etwas Geld?" "!mache schaut sich um." b. $ ist der Filename einer Rolle; zB: "$/d/Vaniorh/Tadmor/Strassen/rollen/zuwenig" Label mit: "$/pfad/zum/rollenfile,label" c. & ist der Filename einer Kampagne; zB: "&/d/Vaniorh/Tadmor/Strassen/rollen/sauftour.kamp" d. Darf mehrere Aktionen enthalten, die direkt hinter- einander ausgefuehrt werden. zB: ({"!grinse breit", "!emote Du kannst einige Zahnluecken erkennen."}) e. Closures werden mit dem NPC als Parameter aufgerufen. Rueckgabewert darf 0 oder eines von a. bis d. sein. Es ist moeglich, eine Rolle in Abhaengigkeit von bestimmten Orten starten zu lassen, hierbei kann man komplette Filenamen oder auch Directorynamen (bzw. Substrings davon) angeben; z.B.: "/room/rathaus/treppe" Kommando wird nur in diesem Raum gestartet; "/d/Vaniorh" Kommando wird ueberall in Vaniorh gestartet; "*" oder 0 Kommando wird ueberall in UNItopia gestartet. Weiterhin kann eine Rolle auch nur innerhalb bestimmter Zeitraeume gestartet werden; Zeitraeume gibt man in der Form "hhmm-hhmm" an. z.B.: "400-1100" von 4 Uhr bis 11 Uhr "1200-2359" von 12 Uhr bis 23 Uhr 59 "*" oder 0 zu beliebigen Zeiten. Alle diese Parameter werden in folgenden Aufruf zusammengefasst: void add_random_activities( ([ activity1 : ([ ort1 : ({ zeit1, zeit2, .. }), ort2 : ..... , ..... ]), activity2 : ..... , ....... ]); Beispiel: add_random_activities( ([ "!sage Wie gehts?" : 0 , "!echo $Der() streckt sich und gaehnt herzhaft." : 0; "!sage Schoenes Wetter heute morgen!" : ([ "*" : ({ "400-1000" }) ]), "!sage Warst du schon Mittagessen? Westlich von hier gibts eine gute "+ "Wirtschaft." : ([ "/d/Vaniorh/uluji/market_place" :({"1130-1330"}) ]), "!sage Wie waers mit einem Kaffee?" : ([ "*": ({ "800-1000", "1300-1600" }) ]) ])); VERWEISE: add_random_activities, set_start_random, set_activity, set_activity_delay, set_random_modus GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: query_activity DEKLARATION: int query_activity(void) BESCHREIBUNG: Liefert die 'laberrate' eines Monsters zurueck, die zuvor mit set_activity(laberrate) gesetzt wurde. VERWEISE: set_activity, set_activity_delay, add_random_activities GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: set_activity DEKLARATION: void set_activity(int laberrate) BESCHREIBUNG: set_activity setzt die Aktivitaet eines Monsters. Das Argument 'laberrate' sollte Werte zwischen 0 und 100 haben. Alles kleiner als 0 wird als 0 interpretiert, alles groesser 100 wird als 100 akzeptiert. Je groesser 'laberrate', desto mehr Aktionen fuehrt das Monster aus, die zuvor mit add_random_activities gesetzt wurden. Wird als Argument 0 uebergeben, so werden keine Aktivitaeten ausgefuehrt. Das Monster verhaelt sich mucksmaeuschenstill. Mit Argument 100 wird man seines Lebens nicht mehr froh. Ist die Rate groesser als 10, so fuehlt man sich schon genervt. Der Defaultwert fuer die Aktivitaet ist daher 10. Wie oft wird eine Aktivitaet ausgefuehrt? Modus gesetzte Rate wird wie oft ausgefuehrt "heart_beat" 100 jeder heart_beat (1-2 Sekunden) 1 jeden 100. heart_beat (3 Minuten) "call_out" 100 Minimum 0 Sekunden Maximum 2 Sekunden Mittelwert 1 Sekunde 1 Minimum 0 Sekunden Maximum 200 Sekunden Mittelwert 100 Sekunden Die Aktivitaet eines Monsters hat nichts mit der set_parse_conversation zu tun, durch die ein Monster auf Ansprache reagiert. VERWEISE: query_activity, set_activity_delay, add_random_activities, set_random_modus GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: set_start_random DEKLARATION: void set_start_random(int flag) BESCHREIBUNG: Startet die Aktivitaet eines Monsters, die ihm zuvor mit add_random_activities mitgegeben wurden. Ist flag == 0, so wird die Handlung gestoppt. Hat Flag einen Wert != 0, so nimmt das Monster seine Taetigkeit wieder auf. VERWEISE: query_start_random, add_random_activities, set_random_modus, query_random_modus GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: query_start_random DEKLARATION: int query_start_random(void) BESCHREIBUNG: Liefert den Zustand des Monsters zurueck, ob es und seine Aktivitaeten schon gestartet wurden. Returnwert 1: das Monster handelt schon Returnwert 0: das Monster tut noch nichts VERWEISE: set_start_random, add_random_activities, set_random_modus, query_random_modus GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: set_random_modus DEKLARATION: void set_random_modus(string mode) BESCHREIBUNG: Setzt den Modus, nach dem ein Monster handeln soll. Es gibt zwei Modi, die das Monster kennt: 1. Nur wenn ein Spieler sich im selben Raum wie das Monster befindet. Dies ist die Voreinstellung und erspart dem Game-Driver viel unnoetige Arbeit, denn meistens machen Aktivitaeten von Monster keinen Sinn wenn kein Spieler da ist, um zuzuschauen oder darauf zu reagieren. Der Modus wird gesetzt mit: void set_random_modus("heart_beat"); 2. Staendig, egal ob Spieler anwesend sind oder nicht. Das macht Sinn bei Monstern, die sich wie zB. die Stadtwache in Tadmor staendig bewegt. Der Modus wird gesetzt mit: void set_random_modus("call_out") Vor exzessiven Gebrauch sei gewarnt, unter Umstaenden wird dadurch das Mud stark gebremst. Defaultwert ist "heart_beat". VERWEISE: add_random_activities, query_random_modus, set_activity, set_activity_delay GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: query_random_modus DEKLARATION: string query_random_modus(void) BESCHREIBUNG: Liefert den Modus als String zurueck, nach dem ein Monster handelt. Dieser muss vorher mit set_random_modus gesetzt worden sein. VERWEISE: add_random_activities, set_random_modus GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: set_activity_delay DEKLARATION: void set_activity_delay(int delay) BESCHREIBUNG: Setzt die garantierte Mindestruhezeit zwischen zwei random_activities auf 'delay' Sekunden. Das bedeutet, dass bei random_modus "heart_beat" 'delay' Sekunden nach einer Aktion die naechste Aktion in jedem weiteren Herzschlag mit Wahrscheinlichkeit query_activity() Prozent kommen kann. Nach Ausfuehrung der Aktion wird die Referenzzeit fuer 'delay' neu gesetzt. Bei random_modus "call_out" wird ein call_out der Laenge delay + (Zufallswert zwischen 1 und 2*(100-query_activity())) gestartet, der die naechste Aktion ausloest. VERWEISE: query_activity_delay, set_random_modus, set_activity GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: query_activity_delay DEKLARATION: int query_activity_delay() BESCHREIBUNG: Info, welcher Wert fuer die garantierte Mindestruhezeit zwischen zwei random_activities per set_activity_delay gesetzt wurde. VERWEISE: set_activity_delay GRUPPEN: monster SOURCE: /i/monster/random_start.c FUNKTION: set_weight DEKLARATION: int set_weight(int weight) BESCHREIBUNG: Setzt das Gewicht eines Monsters, Spielers oder Objekts. Ein Newbie kann 10 Einheiten Gewicht mit sich rumschleppen, ein Experte bis zu 30, Engel bis zu 45. Goetter koennen 100 Einheiten schleppen. Alle beweglichen Objekte sollten ein Gewicht haben, Spieler muessen ein Gewicht von 30 haben. Zu dem Gewicht von Autoloadern -> /doc/richtlinien/autoloader. VERWEISE: query_weight, set_min_weight, set_max_weight GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: query_weight DEKLARATION: nomask int query_weight() BESCHREIBUNG: Liefert das Gewicht eines Monsters, Spielers oder Objekts. VERWEISE: set_weight, query_min_weight, query_max_weight GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: query_weight_description DEKLARATION: string query_weight_description() BESCHREIBUNG: Diese Funktion kann man im Objekt definieren, damit beim Betrachten des Objektes ein besonderer String anstelle der Standardmeldung ("Es scheint schwer zu sein." usw.) ausgegeben wird. VERWEISE: query_weight, query_content_message, query_object_description GRUPPEN: augen SOURCE: /i/move.c FUNKTION: move DEKLARATION: varargs nomask int move(mixed ziel, mapping mv_infos) BESCHREIBUNG: Die exakte Beschreibung ->/doc/funktionsweisen/move /i/move::move() ist die einzige Funktion in UNItopia die Objekte von einem Ort zu einem anderen bewegen kann. Jedes Objekt, das bewegt werden soll, muss also diese Datei inheriten. "ziel" kann ein Objekt oder der Filename des Ziels als string sein oder aber, sofern sich das Objekt in einem Raum befindet, auch ein Ausgang des Raumes. Alle Defines kommen aus /sys/move.h. Der zweite Parameter ist optional und kann folgende Eintraege mit Informationen zur Bewegung beinhalten: Name Typ Bedeutung --------------- --------------- ----------------------------------------------- MOVE_FLAGS int Eine Kombination von Flags. Eine Liste der moeglichen Flags gibt es weiter unten. MOVE_TYPE string Enthaelt das Verb fuer die Art der Bewegung (siehe MOVE_TYPE_LISTE). MOVE_MSG_LEAVE string Eine Bewegungsmeldung an die Umgebenden im Ausgangsraum. MOVE_MSG_ENTER string Eine Bewegungsmeldung an die Umgebenden im Zielraum. MOVE_MSG_ME string Bewegungsmeldung an den Bewegenden. MOVE_MSG_LEAVE_OTHERS mixed* Mit diesem Array kann man Bewegungsmeldungen an Dritte im Ausgangsraum formulieren: ({ whom1, meldung_an_whom1, whom2, meldung_an_whom2, ... }) MOVE_MSG_ENTER_OTHERS mixed* Gleicher Aufbau und Funktion wie MOVE_MSG_LEAVE_OTHERS fuer den Zielraum. MOVE_MSG_ARGS mapping Ein Mapping mit zusätzlichen Symbolen für die Move-Meldungen (der einem Symbol zugeordnete Wert muß demnach ein Objekt oder V-Item sein): ([ 'vehikel: ([ "name": "boot", "gender": "saechlich", ]), ]) Folgende Eintraege werden spaeter fuer die Controller ergaenzt: --------------------------------------------------------------- MOVE_CALLER object Das Objekt, dass das move aufruft. MOVE_OBJECT object Das bewegte Objekt MOVE_OLD_ROOM object Der Ausgangsraum MOVE_NEW_ROOM object Der Zielraum MOVE_DEST_STR string Der Parameter 'ziel' vom Aufruf, sofern es ein String war (also entweder ein Dateiname oder der Name des Ausgangs). MOVE_DIRECTION string Der Name des Ausgangs (sofern bekannt) MOVE_EXIT_INFO mixed* Ein Array mit Informationen ueber den Ausgang (siehe query_exit_info()) Folgende Flags kann man bei MOVE_FLAGS angeben: ----------------------------------------------- MOVE_NORMAL: Standard-Move, normale Bewegungsmeldungen, also die mit set_msg_in() und set_msg_out() gesetzten, MOVE_MAGIC: Teleport, es werden die Bewegungsmeldungen erzeugt, die mit set_mmsg_in() und set_mmsg_out() gesetzt wurden, MOVE_SECRET: Es werden keine Bewegungsmeldungen erzeugt und nicht just_moved() aufgerufen (d.h. es gibt keine Ausgabe der Raumbeschreibung bei Spielern). 0: Default, keine Bewegungsmeldungen. MOVE_GHOST: Beim Bewegen von Geistern durch Tueren wird dieser Typ verwendet. Ist ein erweitertes MOVE_MAGIC. Diese Flags kann man noch durch Oder | mit folgenden Werten verknuepfen: MOVE_FORCE: Nur fuer priviligierte Objekte eine Bewegung ohne modify und forbidden-Controller. MOVE_ERR_REMOVE: Konnte die Bewegung nicht ausgefuehrt werden, wird der Gegenstand entfernt. Meldungen --------- Diese Bewegungsmeldungen (MOVE_MSG_*-Eintraege) sind Pseudoclosures, wobei fuer den Bewegenden kein Argument in den Grammatikfunktionen (z.B. $Der(), $Ein()) anzugeben ist und $dir() fuer die Richtung (samt Praeposition) steht. Enthaelt diese Bewegungsmeldung kein Dollarzeichen, so wird automatisch der Name des bewegten Objektes ("$Ein() " bzw. "$Der() ") voran- und die Richtung ("$dir().") hintenrangestellt. Ebenso wird ein fehlendes Satzzeichen angefuegt. ACHTUNG: Diese Bewegungsmeldungen (ohne Name und Richtung bzw. ohne Satzendezeichen) gelten als veraltet! Ein einzelnes Dollarzeichen am Ende dieser Meldungen wird abgeschnitten. Diese Meldungen werden automatisch umgebrochen. Achtung: Die Meldungen werden nur ausgegeben, wenn zusaetzlich noch /i/tools/move_msg inheritet wurde. (Lebewesen inheriten es automatisch.) Rueckgabewert ------------- Move liefert nach der Ausfuehrungen folgende Werte: MOVE_OK: Move wurde ausgefuehrt. MOVE_NOT_ALLOWED: Move wurde nicht erlaubt (zb Gewicht im Ziel ueberschritten oder let_not_in im Zielraum returnt 1.) MOVE_NO_ROOM: Das angegebene Ziel ist kein Container oder nicht genug Platz. MOVE_DEST_CLOSED: Das Ziel ist ein geschlossener Container, kein move. MOVE_ENV_CLOSED: Der Ursprungsraum ist ein geschlossener Container, kein Move. MOVE_NO_DEST: Kein Zielraum angegeben oder dest == 0. MOVE_DESTRUCTED: Das Objekt wurde beim move zerstoert. Alle Defines sind in /sys/move.h definiert. Nach Beendigung eines moves, der nicht erfolgreich war, kann mit query_not_moved_reason eine Klartext - Fehlermeldung abgefragt werden, sofern eine vorliegt; naeheres siehe dort. Kurz vor der Beendigung wird notify_move_failed mit den obigen Werte aufgerufen, Ausnahme MOVE_DESTRUCTED (da ist kein this_object mehr da...). Ob ein Move erfolgreich ist haengt von vielem ab; let_not_in, let_not_out, filtern, forbidden-Controllern, usw.; siehe dort. Ebenso kann ein move noch per modify-Controllern beeinflusst werden. (modify_move(|_in|_out)) Wird ein Move ausgefuehrt, so wird unmittelbar davor im alten "Ort" ein notify_move_out aufgerufen, unmittelbar nach dem move ein notify_moved_out. Analog wird im Zielraum ein notify_move_in unmittelbar vor dem Move und ein notify_moved_in unmittelbar nach dem Move aufgerufen. Am Objekt wird vor dem move notify_move und nach dem move notify_moved aufgerufen. VERWEISE: move_return, let_not_in, let_not_out, filter_xxx, just_moved, notify_follow, set_no_move, set_no_move_reason, set_not_moved_reason, query_no_move, query_no_move_reason, query_not_moved_reason, move_or_remove, MOVE_TYPE_LISTE GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: move_or_remove DEKLARATION: nomask int move_or_remove( dest) BESCHREIBUNG: Diese Funktion bewegt das Objekt an das angegebene Ziel. Klappt dies nicht wird das Objekt entfernt. Der Rueckgabewert ist ungleich 0, wenn der Move geklappt hat. Die Funktion ist eine Abkuerzung fuer move(dest, ([MOVE_FLAGS:MOVE_ERR_REMOVE])) == MOVE_OK VERWEISE: move GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: allowed_take_living DEKLARATION: int allowed_take_living(object was, object wohin) BESCHREIBUNG: Wenn das Lebewesen 'was' in das Lebewesen 'wohin' bewegt werden soll, und 'was' etwas mehr als 1 wiegt, wird was->allowed(was, wohin) gefragt. allowed ruft dann in allen mit was->add_controller("allowed_take_living", other) angemeldeten Objekten other die Funktion other->allowed_take_living(was, wohin) auf. Wurde mindestens ein solches Objekt angemeldet und liefern alle Funktionen einen Wert != 0, dann wird die Bewegung gestattet, ansonsten verboten. Somit kann man also Lebewesen bauen, die man aufnehmen kann, und die doch schwerer als 1 sind, indem man einen solchen Controller anmeldet, welcher 1 liefert. VERWEISE: allowed, add_controller, take, forbidden_take, forbidden_take_me GRUPPEN: monster, haende SOURCE: /i/move.c FUNKTION: remove DEKLARATION: int remove() BESCHREIBUNG: Entfernt ein Objekt und zerstoert es dann. Man sollte Objekte immer erst mit remove entfernen, erst, wenn das nicht geklappt hat, mit destruct(). Wenn remove erfolgreich war, liefert es 1 zurueck. Remove kann in Objekten problem- los ueberlagert werden, es dient dann dazu, noch letzte Aktionen vor dem Ableben auszufuehren, z.B. ein save_object(). VERWEISE: move, destruct GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: query_first_room DEKLARATION: nomask string query_first_room() BESCHREIBUNG: Liefert den Raum zurueck, in den ein Objekt zum ersten Mal gemoved wurde. Nach einem Auslagern kann das ein Schliessfachraum sein, siehe query_real_first_room. VERWEISE: move, query_real_first_room GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: query_real_first_room DEKLARATION: nomask string query_real_first_room() BESCHREIBUNG: Liefert den Raum zurueck, in den ein Objekt zum ersten Mal gemoved wurde. Und zwar vor dem ersten Ein-/Auslagern. VERWEISE: move GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: query_first_player DEKLARATION: nomask string query_first_player() BESCHREIBUNG: Liefert den Spieler zurueck, in dem das aktuelle Objekt zum ersten Mal gemoved wurde. Wegen den Schliessfaechern ist besser query_real_first_player zu verwenden. VERWEISE: move, query_real_first_player GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: query_real_first_player DEKLARATION: nomask string query_real_first_player() BESCHREIBUNG: Liefert den Spieler zurueck, in dem das urspruengliche Objekt zum ersten Mal gemoved wurde, und zwar inkl. einem Ein-Auslagern in Schliessfaecher. VERWEISE: move, query_first_player GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: query_last_player DEKLARATION: nomask string query_last_player() BESCHREIBUNG: Liefert den Spieler zurueck, der das Objekt zuletzt in den Haenden hielt. VERWEISE: move GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: query_creator DEKLARATION: nomask string query_creator() BESCHREIBUNG: Liefert das Objekt, welches diesen Gegenstand erschaffen hat. Kann beim Auslagern ein Schliessfaecher-Objekt sein, das urpsruengliche Objekt kann mit query_real_creator abgefragt werden. Der String hat die Form: "Dateiname (UID: uid, EUID: euid)" VERWEISE: move, query_real_creator GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: query_real_creator DEKLARATION: nomask string query_real_creator() BESCHREIBUNG: Liefert das Objekt, welches vor dem ersten Einlagern diesen Gegenstand erschaffen hat. Der String hat die Form: "Dateiname (UID: uid, EUID: euid)" VERWEISE: move, query_creator GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: query_enable_cleanup DEKLARATION: int query_enable_cleanup() BESCHREIBUNG: Beim Cleanup im Raum fragt der Raum jeden Gegenstand, ob er das Zerstoeren des Raumes erlaubt. Liefert query_enable_cleanup() bei einem Gegenstand 0, so darf sich der Raum nicht zerstoeren. Im Normalfall liefert query_enable_cleanup 0, wenn sich der Gegenstand nicht mehr in dem Raum befindet, in welchem er erschaffen wurde, ansonsten eine 1. Soll ein Gegenstand immer ein Cleanup verhindern, so muss set_prevent_cleanup() aufgerufen werden. Daraufhin liefert query_enable_cleanup() immer 0. VERWEISE: clean_up, set_prevent_cleanup GRUPPEN: raum SOURCE: /i/move.c FUNKTION: query_prevent_cleanup DEKLARATION: int query_prevent_cleanup() BESCHREIBUNG: Liefert 1, wenn set_prevent_cleanup() aufgerufen wurde. VERWEISE: set_prevent_cleanup, clean_up, query_enable_cleanup GRUPPEN: raum SOURCE: /i/move.c FUNKTION: set_prevent_cleanup DEKLARATION: void set_prevent_cleanup() BESCHREIBUNG: Nach Aufruf dieser Funktion wird ein Raum, in welchem dieser Gegenstand liegt, nicht mehr beim Cleanup zerstoert. VERWEISE: clean_up, query_enable_cleanup, set_enable_cleanup GRUPPEN: raum SOURCE: /i/move.c FUNKTION: set_enable_cleanup DEKLARATION: void set_enable_cleanup() BESCHREIBUNG: Nach Aufruf dieser Funktion wird ein Raum, in welchem dieser Gegenstand liegt, wieder beim Cleanup zerstoert. Diese Funktion ist das Gegenstueck zu set_prevent_cleanup. VERWEISE: clean_up, query_enable_cleanup, set_prevent_cleanup GRUPPEN: raum SOURCE: /i/move.c FUNKTION: set_hidden_until_next_move DEKLARATION: void set_hidden_until_next_move([int invis_level]) BESCHREIBUNG: Diese Funktion macht nix anderes, als ein Objekt so lange zu verbergen, bis es das erste mal bewegt wird. Siehe als Beispiel: /room/bsp/bsp9.c Ohne Parameter aufgerufen wird als invis_level V_HIDDEN angenommen. VERWEISE: query_hidden_until_next_move, move, set_invis GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: query_hidden_until_next_move DEKLARATION: int query_hidden_until_next_move() BESCHREIBUNG: Die Funktion liefert 1, wenn das Objekt bei der naechsten Bewegung sichtbar gemacht wird, ansonsten 0. VERWEISE: set_hidden_until_next_move, move, set_invis GRUPPEN: move, grundlegendes SOURCE: /i/move.c FUNKTION: set_no_move DEKLARATION: void set_no_move(int no_move) BESCHREIBUNG: Mit Wert 1 kann man das Objekt fest installieren, es kann dann nicht mehr bewegt werden, mit 0 wird es wieder freigeben. Mit set_no_move_reason kann man eine Begruendung angeben. GRUPPEN: bewegen VERWEISE: move, query_no_move, set_no_move_reason SOURCE: /i/move.c FUNKTION: query_no_move DEKLARATION: int query_no_move() BESCHREIBUNG: Mit dieser Funktion kann man abfragen, ob das Objekt im Moment installiert ist. Mit query_no_move_reason kann man eine ggf. gesetzte Begruendung abfragen. GRUPPEN: bewegen VERWEISE: move, set_no_move, query_no_move_reason, set_no_move_reason SOURCE: /i/move.c FUNKTION: set_no_move_reason DEKLARATION: void set_no_move_reason(string no_move_reason) BESCHREIBUNG: Mit dieser Funktion kann eine Begruendung dafuer gesetzt werden, dass ein Objekt nicht bewegbar ist. Beispiel: Der Baum ist mit seinen Wurzeln fest angewachsen, die Liste ist an die Wand genagelt. ACHTUNG: Es kommt desoefteren zur Verwechslung mit set_not_moved_reason. Daher hier die Unterschiede: set_not_moved_reason: - Wird erst WAEHREND des Bewegungsversuches (also von let_not_in- oder forbidden_move*-Funktionen) gesetzt. - Wird vor jedem Bewegungsversuch geloescht. - Ist fuer die Begruendung des Fehlschlages EINER Bewegung da. set_no_move_reason: - Wird gewoehnlich bei der Initialisierung des Objektes (meist zusammen mit set_no_move(1) im create()) aufgerufen. - Ist die Begruendung fuer alle wegen eines set_no_move(1) fehlgeschlagener Bewegungen. GRUPPEN: bewegen VERWEISE: move, query_no_move, set_no_move, query_no_move_reason SOURCE: /i/move.c FUNKTION: query_no_move_reason DEKLARATION: string query_no_move_reason() BESCHREIBUNG: Mit dieser Funktion kann man abfragen, warum ein Objekt nicht bewegbar ist. GRUPPEN: bewegen VERWEISE: move, set_no_move, query_no_move, set_no_move_reason SOURCE: /i/move.c FUNKTION: set_not_moved_reason DEKLARATION: void set_not_moved_reason(string not_moved_reason) BESCHREIBUNG: Hiermit kann beispielsweise von Filtern wie let_not_in aus in einem Objekt eine Begruendung angegeben werden, warum es nicht bewegt werden konnte. Diese kann mit query_not_moved_reason abgefragt werden. ACHTUNG: Es kommt desoefteren zur Verwechslung mit set_no_move_reason. Daher hier die Unterschiede: set_not_moved_reason: - Wird erst WAEHREND des Bewegungsversuches (also von let_not_in- oder forbidden_move*-Funktionen) gesetzt. - Wird vor jedem Bewegungsversuch geloescht. - Ist fuer die Begruendung des Fehlschlages EINER Bewegung da. set_no_move_reason: - Wird gewoehnlich bei der Initialisierung des Objektes (meist zusammen mit set_no_move(1) im create()) aufgerufen. - Ist die Begruendung fuer alle wegen eines set_no_move(1) fehlgeschlagener Bewegungen. GRUPPEN: bewegen VERWEISE: move, query_not_moved_reason, set_no_move, set_no_move_reason, let_not_out, let_not_in SOURCE: /i/move.c FUNKTION: query_not_moved_reason DEKLARATION: string query_not_moved_reason() BESCHREIBUNG: Mit dieser Funktion kann man abfragen, warum der letzte move fehlgeschlagen ist, natuerlich nur dann, wenn der letzte move fehlgeschlagen ist. Ist das Ergebnis 0, so liegt keine eigene Klartextbegruendung vor. In diesem Fall kann dem Spieler eine Standardmeldung angezeigt werden. GRUPPEN: bewegen VERWEISE: move, set_not_moved_reason SOURCE: /i/move.c FUNKTION: just_moved DEKLARATION: void just_moved() BESCHREIBUNG: Diese Funktion wird im bewegten Objekt nach einem erfolgreichen Move aufgerufen. Diese Funktion wird nicht aufgerufen, wenn der move MOVE_SECRET ist! VERWEISE: move GRUPPEN: move SOURCE: /i/move.c FUNKTION: move_return DEKLARATION: varargs int move_return(mixed ziel, int delay, closure call_back, mixed events, int how, string verlassen, string ankommen, int how_back, string verlassen_back, string ankommen_back, string move_type) BESCHREIBUNG: Mit dieser Funktion kann man das Objekt bewegen, so dass es nach 'delay' Sekunden wieder an seinen alten Platz zurueckkehrt. Die Parameter 'ziel, how, verlassen, ankommen' sind die Parameter fuer den move an die neue Stelle. Die Parameter 'how_back, verlassen_back, ankommen_back' sind die Parameter fuer den move an die alte Stelle zurueck. Falls how_back nicht angegeben wird, wird MOVE_NORMAL angenommen. Bei how_back == MOVE_NORMAL wird versucht, einen Ausgang zu finden, der zum alten Raum zurueckfuehrt. Die Call-Back-Closure wird aufgerufen, wenn das Objekt an seinen alten Platz zurueckgekehrt ist. Sie wird mit folgenden Parametern aufgerufen: this_object(), Return des moves (oder -1, wenn kein move noetig war), der Raum, in den das Objekt zurueckkehren sollte. Diese Funktion kann auch mehrmals hintereinander aufgerufen werden. Das Objekt kehrt dann nacheinander an die Stellen zurueck, an denen es weiterbewegt wurde. Wenn events uebergeben wird, koennen alle Moves dieses Event-Typs auf einmal rueckgaengig gemacht werden. Events kann ein String oder ein Array of Strings sein. Delay < 0 bedeutet, dass dieser Move nur durch ein Event wieder rueckgaengig gemacht werden kann. VERWEISE: move, return_to GRUPPEN: move SOURCE: /i/move.c FUNKTION: return_to DEKLARATION: varargs int return_to(string event) BESCHREIBUNG: Bewegt das Objekt vorzeitig an seine alte Stelle zurueck. Returnwert: -3, wenn der letzte Move kein Move war, auf den das event passt. -2, wenn das Objekt keine alte Stelle hatte. -1, wenn das Objekt schon an der alten Stelle ist. sonst: Returnwert des Moves. Wenn event uebergeben wurde, werden alle Moves dieses Event-Typs rueckgaengig gemacht. VERWEISE: move_return GRUPPEN: move SOURCE: /i/move.c FUNKTION: notify_moved DEKLARATION: void notify_moved(mapping mv_infos) BESCHREIBUNG: Nach der Ausfuehrung des moves wird am bewegten Objekt notify_moved aufgerufen. Folgende Parameter stehen zur Information bereit: MOVE_FLAGS : Die flags, wie sie an move(siehe dort) uebergeben wurden. MOVE_OBJECT : Das bewegte Objekt MOVE_DEST_STR : Wenn das ziel in move ein String war MOVE_DIRECTION : Ein Ausgang falls dieser im ziel spezifiziert war. MOVE_OLD_ROOM : Der Ausgangsraum (ehemalige Umgebung) des Objekts MOVE_NEW_ROOM : Der Zielraum (jetzige Umgebung) des Objekts. MOVE_EXIT_INFO : Die Ausgangsinformationen zu dem benutzen Ausgang. MOVE_MSG_LEAVE (string): Eine Bewegungsmeldung an die Umgebenden im Ausgangsraum ehemals der Parameter verlassen. MOVE_MSG_ENTER (string): Eine Bewegungsmeldung an die Umgebenden im Zielraum ehemals der Parameter ankommen. MOVE_MSG_ME (string): Bewegungsmeldung an den Bewegenden (neu) MOVE_MSG_LEAVE_OTHERS : Mit diesem Array kann man Bewegungsmeldungen an Dritte im Ausgangsraum formulieren: ({ whom1, meldung_an_whom1, whom2, meldung_an_whom2, ... }) MOVE_MSG_ENTER_OTHERS : Gleicher Aufbau und Funktion fuer den Zielraum. MOVE_TYPE (string): Enthaelt das Verb fuer die Art der Bewegung. Alle defines stammen aus /sys/move.h VERWEISE: move, modify, modify_move,forbidden_move, notify_move,notify_moved_in,notify_moved_out GRUPPEN: move SOURCE: /i/move.c FUNKTION: modify_move DEKLARATION: void modify_move(mapping mv_infos) BESCHREIBUNG: Vor der Ausfuehrung des moves und vor den forbidden-Controllern wird durch modify_move am bewegenden Objekt ermoeglicht, folgende Parameter zu aendern: MOVE_MSG_LEAVE (string): Eine Bewegungsmeldung an die Umgebenden im Ausgangsraum ehemals der Parameter verlassen. MOVE_MSG_ENTER (string): Eine Bewegungsmeldung an die Umgebenden im Zielraum ehemals der Parameter ankommen. MOVE_MSG_ME (string): Bewegungsmeldung an den Bewegenden (neu) MOVE_MSG_LEAVE_OTHERS : Mit diesem Array kann man Bewegungsmeldungen an Dritte im Ausgangsraum formulieren: ({ whom1, meldung_an_whom1, whom2, meldung_an_whom2, ... }) MOVE_MSG_ENTER_OTHERS : Gleicher Aufbau und Funktion fuer den Zielraum. MOVE_TYPE (string): Enthaelt das Verb fuer die Art der Bewegung. Man kann mit member(MOVE_MODIFY_LIST,) auch pruefen, ob der gewuenschte Parameter auch aenderbar ist. Folgende Parameter koennen ebenso geaendert werden mit entsprechender Vorsicht: MOVE_FLAGS : Die flags, wie sie an move(siehe dort) uebergeben wurden. MOVE_OBJECT : Das zu bewegende Objekt MOVE_DEST_STR : Wenn das ziel in move ein String war MOVE_DIRECTION : Ein Ausgang falls dieser im ziel spezifiziert war. MOVE_OLD_ROOM : Der Ausgangsraum (aktuelle Umgebung) des Objekts MOVE_NEW_ROOM : Der (schon geladene) Zielraum des Objekts. MOVE_EXIT_INFO : Die Ausgangsinformationen zu dem benutzen Ausgang. Die Reihefolge der modify-Controler ist modify_move_out, modify_move, modify_move_in. Und sie wird nur einmal durchlaufen, auch wenn z.B. der Zielraum im modify_move_in geaendert wird. Alle defines stammen aus /sys/move.h VERWEISE: move, modify, modify_move_in, modify_move_out, forbidden_move, notify_moved GRUPPEN: move SOURCE: /i/move.c FUNKTION: modify_move_out DEKLARATION: void modify_move_out(mapping mv_infos) BESCHREIBUNG: Vor der Ausfuehrung des moves und vor den forbidden-Controllern wird durch modify_move_out am Ausgangsort ermoeglicht, die in modify_move beschriebenen Parameter zu aendern bzw. zu nutzen. VERWEISE: move, modify, modify_move_in, modify_move, forbidden_move, notify_moved GRUPPEN: move SOURCE: /i/move.c FUNKTION: modify_move_in DEKLARATION: void modify_move_in(mapping mv_infos) BESCHREIBUNG: Vor der Ausfuehrung des moves und vor den forbidden-Controllern wird durch modify_move_in am Zielort ermoeglicht, die in modify_move beschriebenen Parameter zu aendern bzw. zu nutzen. VERWEISE: move, modify, modify_move, modify_move_out, forbidden_move, notify_moved GRUPPEN: move SOURCE: /i/move.c FUNKTION: forbidden_move DEKLARATION: forbidden_move(mapping mv_infos) BESCHREIBUNG: Vor der Ausfuehrung des moves und nach den modify-Controllern wird durch forbidden_move an dem zu bewegenden Objekt geprueft, ob eine Bewegung moeglich ist (Rueckgabewert 0). Wenn nicht, kann entweder ein String als Begruendung zurueckgegeben oder eine 1 zusammen mit einem set_not_moved_reason zurueckgegeben werden. Die Parameter des Mappings mv_infos ist in notify_moved erlaeutert. VERWEISE: move, forbidden, notify_moved, forbidden_move_in, forbidden_move_out GRUPPEN: move SOURCE: /i/move.c FUNKTION: forbidden_move_out DEKLARATION: forbidden_move_out(mapping mv_infos) BESCHREIBUNG: Vor der Ausfuehrung des moves und nach den modify-Controllern wird durch forbidden_move_out im Ausgangsort geprueft, ob eine Bewegung moeglich ist (Rueckgabewert 0). Wenn nicht, kann entweder ein String als Begruendung zurueckgegeben oder eine 1 zusammen mit einem set_not_moved_reason zurueckgegeben werden. Die Parameter des Mappings mv_infos ist in notify_moved erlaeutert. VERWEISE: move, forbidden, notify_moved, forbidden_move_in, forbidden_move GRUPPEN: move SOURCE: /i/move.c FUNKTION: forbidden_move_in DEKLARATION: forbidden_move_in(mapping mv_infos) BESCHREIBUNG: Vor der Ausfuehrung des moves und nach den modify-Controllern wird durch forbidden_move_in im Zielraum geprueft, ob eine Bewegung moeglich ist (Rueckgabewert 0). Wenn nicht, kann entweder ein String als Begruendung zurueckgegeben oder eine 1 zusammen mit einem set_not_moved_reason zurueckgegeben werden. Die Parameter des Mappings mv_infos ist in notify_moved erlaeutert. VERWEISE: move, forbidden, notify_moved, forbidden_move, forbidden_move_out GRUPPEN: move SOURCE: /i/move.c FUNKTION: notify_move_out DEKLARATION: void notify_move_out(mapping mv_infos) BESCHREIBUNG: Wenn ein Objekt bewegt wird, wird im alten Raum notify("move_out", ...) aufgerufen und zwar vor dem Move. Die in mv_infos verfuegbaren Parameter sind in notify_moved erklaert. Ein solcher Controller sollte nicht versuchen, ein anderes Objekt in diesen Start- oder Zielraum zu bewegen, sondern dies erst im notify_moved erledigen. VERWEISE: move, notify, notify_moved, forbidden_move GRUPPEN: move SOURCE: /i/move.c FUNKTION: notify_move DEKLARATION: void notify_move(mapping mv_infos) BESCHREIBUNG: Wenn ein Objekt bewegt wird, wird im bewegten Objekt notify("move", ...) aufgerufen und zwar vor dem Move. Die in mv_infos verfuegbaren Parameter sind in notify_moved erklaert. Ein solcher Controller sollte nicht versuchen, ein anderes Objekt in diesen Start- oder Zielraum zu bewegen, sondern dies erst im notify_moved erledigen. VERWEISE: move, notify, notify_moved, forbidden_move GRUPPEN: move SOURCE: /i/move.c FUNKTION: notify_move_in DEKLARATION: void notify_move_in(mapping mv_infos) BESCHREIBUNG: Wenn ein Objekt bewegt wird, wird im Zielraum notify("move_in", ...) aufgerufen und zwar vor dem Move. Die in mv_infos verfuegbaren Parameter sind in notify_moved erklaert. Ein solcher Controller sollte nicht versuchen, ein anderes Objekt in diesen Start- oder Zielraum zu bewegen, sondern dies erst im notify_moved erledigen. VERWEISE: move, notify, notify_moved, forbidden_move GRUPPEN: move SOURCE: /i/move.c FUNKTION: notify_moved_out DEKLARATION: void notify_moved_out(mapping mv_infos) BESCHREIBUNG: Wenn ein Objekt bewegt wurde, wird im Ausgangsort ein notify("moved_out", ...) aufgerufen und zwar nach dem Move. Die in mv_infos verfuegbaren Parameter sind in notify_moved erklaert. VERWEISE: move, notify, notify_moved, forbidden_move, notify_moved_in GRUPPEN: move SOURCE: /i/move.c FUNKTION: notify_moved_in DEKLARATION: void notify_moved_in(mapping mv_infos) BESCHREIBUNG: Wenn ein Objekt bewegt wurde, wird im Zielort ein notify("moved_in", ...) aufgerufen und zwar nach dem Move. Die in mv_infos verfuegbaren Parameter sind in notify_moved erklaert. VERWEISE: move, notify, notify_moved, forbidden_move, notify_moved_out GRUPPEN: move SOURCE: /i/move.c FUNKTION: notify_move_failed DEKLARATION: void notify_move_failed(mapping mv_infos, int ret) BESCHREIBUNG: Konnte ein Objekt nicht bewegt werden, wird ausser im Fall MOVE_DESTRUCTED ein notify("move_failed",...) aufgerufen. Der Rueckgabewert von move steht in ret und die verfuegbaren Parameter sind in notify_moved erlaeutert. VERWEISE: move, notify, notify_moved, forbidden_move, notify_move. GRUPPEN: move SOURCE: /i/move.c FUNKTION: notify_remove DEKLARATION: void notify_remove(object ob) BESCHREIBUNG: Wird ob removed (via Lfun remove() oder nur Efun destruct()), so wird vorher ob->notify("remove") aufgerufen. Die Funktion notify ruft dann in allem mit ob->add_controller("notify_remove", other) angemeldeten Objekten other die Funktion other->notify_remove(ob) auf. VERWEISE: notify, remove GRUPPEN: grundlegendes SOURCE: /i/move.c FUNKTION: buch DEKLARATION: zum Buch siehe /doc/funktionsweisen/buch BESCHREIBUNG: Wie man ein Buch macht steht ausführlich in der Datei /doc/funktionsweisen/buch, auch mit der Enzy zu lesen unter "menue", "funktionsweisen", "buecher". GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_max_page DEKLARATION: int query_max_page() BESCHREIBUNG: Liefert die Seitenzahl dieses Buches zurück. VERWEISE: set_max_page, set_page_names GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_max_page DEKLARATION: int set_max_page(int max_page) BESCHREIBUNG: Damit setzt man die Seitenzahl dieses Buches. Dies ist nur bei dynamischen Büchern erforderlich, wo die Seiten nicht mittels set_page_names gesetzt wurden. VERWEISE: query_max_page, set_page_names GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_current_page DEKLARATION: int query_current_page() BESCHREIBUNG: Damit kann man den Status des Buches abfragen. Ein negativer Wert zeigt an, dass dieses Buch geschlossen ist. Bei 0 ist dieses Buch beim Inhaltsverzeichnis aufgeschlagen. Positive Werte geben die Seitennummer an, bei welcher dieses Buch aufgeschlagen ist. Ist dieses Buch nicht zum Auf- und Zuschlagen, so kann trotzdem ein negativer Wert zurückgeliefert werden, was dann das gleiche wie 0 bedeutet. VERWEISE: set_current_page GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_verzeichnis DEKLARATION: string|int query_verzeichnis(int no_ascii_art_flag = 0) BESCHREIBUNG: Liefert die Informationen zum Inhaltsverzeichnis. Bei no_ascii_art_flag == 0 wird das normale Inhaltsverzeichnis geliefert. Folgende Ergebnisse sind möglich: 0: Es gibt kein Inhaltsverzeichnis 1: Das Inhaltsverzeichnis wird über query_verzeichnis_inhalt() abgefragt. String: Der Dateiname des Inhaltsverzeichnisses. Bei no_ascii_art_flag == 1 wird das Inhaltsverzeichnis ohne ASCII-Graphiken geliefert. Folgende Ergebnisse sind dabei möglich: 0: Es gibt kein gesondertes Inhaltsverzeichnis ohne ASCII-Graphiken. String: Der Dateiname des Inhaltsverzeichnisses. VERWEISE: set_verzeichnis, query_page_names, query_verzeichnis_inhalt GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_page_names DEKLARATION: string *query_page_names(int no_ascii_art_flag = 0) BESCHREIBUNG: Liefert ein Array mit den Dateinamen der einzelnen Seiten zurück bzw., falls keine Dateien angegeben wurden, 0. Wenn no_ascii_art_flag == 0 ist, bekommt man die normale Version, für no_ascii_art_flag != 0 bekommt man die Version ohne ASCII-Graphiken (wenn dort 0 geliefert wird, gibt es keine gesonderte Version). VERWEISE: set_page_names, query_verzeichnis, query_page_inhalt GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_wizard_book DEKLARATION: int set_wizard_book (int wiz) BESCHREIBUNG: Damit setzt man, ob nur Götter dieses Buch lesen können (wiz=1) oder auch Nicht-Götter dies dürfen (wiz=0). Eine entsprechende Fehlermeldung kann man mit set_seiten_desc setzen. VERWEISE: set_hlp_book, query_wizard_book, set_seiten_desc GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_hlp_book DEKLARATION: int set_hlp_book(int hlp) BESCHREIBUNG: Damit setzt man, ob nur Engel und Götter dieses Buch lesen können (hlp=1) oder ob auch normale Spieler dies dürfen (hlp=0). Eine entsprechende Fehlermeldung kann man mit set_seiten_desc setzen. VERWEISE: set_wizard_book, query_hlp_book, set_setien_desc GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_wizard_book DEKLARATION: int query_wizard_book() BESCHREIBUNG: Liefert 1, wenn nur Götter dieses Buch lesen können, ansonsten 0. VERWEISE: set_wizard_book, query_hlp_book GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_hlp_book DEKLARATION: int query_hlp_book() BESCHREIBUNG: Liefert 1, wenn nur Engel dieses Buch lesen können, ansonsten 0. VERWEISE: set_hlp_book, query_wizard_book GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_open_close DEKLARATION: int set_open_close(int cl) BESCHREIBUNG: Damit kann man angeben, ob man dieses Buch auf- und zuschlagen kann (cl=1) oder ob das Buch automatisch aufgeschlagen ist (cl=0). Bei letzten wird ein negativer Wert bei set_current_page wie 0 behandelt. VERWEISE: query_open_close, set_current_page GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_open_close DEKLARATION: int query_open_close() BESCHREIBUNG: Liefert 1 zurück, wenn man dieses Buch auf- und zuschlagen kann, ansonsten 0. VERWEISE: set_open_close GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_searchable DEKLARATION: int set_searchable(int searchable) BESCHREIBUNG: Damit kann man angeben, ob dieses Buch mit dem Befehl '/' durchsuchbar sein soll. Falls 0 (also nicht durchsuchbar) angegeben wurde, aber mittels set_page_mode auf more() umgeschaltet wurde, so bleibt die Möglichkeit, innerhalb einer Seite zu suchen. VERWEISE: query_searchable GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_searchable DEKLARATION: int query_searchable() BESCHREIBUNG: Liefert 1 zurück, wenn dieses Buch durchsuchbar ist. VERWEISE: set_searchable GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_status_line DEKLARATION: void set_status_line(string inhaltsverzeichnis, string seite) BESCHREIBUNG: Damit setzt man die Statuszeile des more, falls eine Seite mittels more ausgegeben wird. Der erste Parameter gibt die Statuszeile für das Inhaltsverzeichnis, der zweite für alle weiteren Seiten an. Ein %p wird (nicht beim Inhaltsverzeichnis) durch die aktuelle Seitenzahl, das erste %d (dies aber auch beim Inhaltsverzeichnis) durch die Nummer der aktuellen Zeile und das zweite %d durch die Anzahl an Zeilen ersetzt. VERWEISE: query_status_line, set_page_mode, more GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_status_line DEKLARATION: string *query_status_line() BESCHREIBUNG: Liefert die Statuszeile für das Inhaltsverzeichnis und alle weiteren Seiten in einem zweielementigen Array zurück. VERWEISE: set_status_line, query_page_mode, more GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_seiten_desc DEKLARATION: void set_seiten_desc(mapping m) BESCHREIBUNG: Damit kann man den Seiten eines Buches einen anderen Namen geben und dazu noch einige Fehlermeldungen ändern. Folgende Einträge sind möglich: PAGE_DESC_NAME Der neue Name einer Seite PAGE_DESC_GENDER Das dazugehörige Geschlecht PAGE_DESC_IDS IDs, welche beim Lese-Befehl erkannt werden sollen PAGE_DESC_NO_PAGES Keine Seiten im Buch PAGE_DESC_WHICH Es wurde nicht angegeben welche Seite man lesen will. PAGE_DESC_INVALID Die erwünschte Seitennummer ist <= 0. PAGE_DESC_OVERFLOW Die erwünschte Seitennummer ist zu groß. PAGE_DESC_NO_PREV Es wurde versucht zu weit zurückzublättern (-). PAGE_DESC_NO_NEXT Es wurde versucht zu weit vorzublättern (+). PAGE_DESC_READ_MSG Meldung beim Lesen an Andere PAGE_DESC_READ_TOC_MSG Meldung beim Lesen des Inhaltsverzeichnisses PAGE_DESC_STOP Man hört auf zu lesen PAGE_DESC_STOP_MSG Aufhörenmeldung für Andere PAGE_DESC_OPEN Man öffnet das Buch PAGE_DESC_OPEN_MSG Öffnenmeldung für Andere PAGE_DESC_CLOSE Man schließt das Buch PAGE_DESC_CLOSE_MSG Schließenmeldung für Andere PAGE_DESC_NOT_ALLOWED Meldungen für Nicht-Götter bei Götterbüchern bzw. Nicht-Engel bei Engelsbüchern, wenn sie dieses Buch lesen wollen. PAGE_DESC_NOT_SEARCHABLE In dem Buch ist die Suche nicht aktiviert. PAGE_DESC_EMPTY_SEARCH Der Suchstring ist leer. PAGE_DESC_SEARCH_BEYOND Suche hinter Buchende nicht möglich. PAGE_DESC_SEARCH_TLE Evals sind bei der Suche ausgegangen. PAGE_DESC_SEARCH_REACHED_LAST Ende des Buches ohne Treffer erreicht. Bei den Fehlermeldungen dürfen Pseudoclosures verwendet werden. 'book_ob ist dabei das Buchobjekt und 'page_ob entweder das übergebene Mapping (falls dort ein Eintrag PAGE_DESC_NAME existiert) oder eine V-Item-Beschreibung einer Seite. 'page_nr ist die aktuelle Seitennummer. Beispiel: set_seiten_desc(([ PAGE_DESC_NAME: "abschnitt", PAGE_DESC_GENDER: "maennlich", PAGE_DESC_IDS: ({"inschrift", "absatz", "abschnitt"}), PAGE_DESC_NO_PAGES: "Alle Abschnitte wurden wohl von einem Vandalen " "unleserlich gemacht.", PAGE_DESC_WHICH: "Welchen Abschnitt willst du lesen?", PAGE_DESC_INVALID: "Diesen Abschnitt gibt es nicht.", PAGE_DESC_OVERFLOW: "Soviele Abschnitte gibt es nicht.", PAGE_DESC_NO_PREV: "Das ist schon der erste Abschnitt.", PAGE_DESC_NO_NEXT: "Das ist schon der letzte Abschnitt.", PAGE_DESC_READ_MSG: "$Der(OBJ_TP) liest sich eine Inschrift durch.", PAGE_DESC_READ_TOC_MSG: "$Der(OBJ_TP) liest das Inhaltsverzeichnis.", PAGE_DESC_STOP: "Du hörst auf, $den('book_ob) zu studieren.", PAGE_DESC_STOP_MSG: "$Der(OBJ_TP) hört auf, $den('book_ob) zu studieren.", PAGE_DESC_NOT_ALLOWED: "Eine seltsame Schrift... " "Du kannst sie nicht entziffern...", ])); VERWEISE: query_seiten_desc GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_seiten_desc DEKLARATION: mapping query_seiten_desc() BESCHREIBUNG: Liefert die mit set_seiten_desc gesetzte Beschreibung zurück. VERWEISE: set_seiten_desc GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_page_mode DEKLARATION: void set_page_mode(string str) BESCHREIBUNG: Damit wird eingestellt, auf welche Art die Seiten ausgegeben werden. Es gibt drei Modi: PAGE_MODE_PAGE: Die Seite wird auf einmal ausgegeben. PAGE_MODE_MORE: Die Seite wird per more() ausgegeben. PAGE_MODE_MOREFILE: Eine Datei wird ausgegeben. (siehe query_verzeichnis_inhalt und query_page_inhalt) Standardmäßig ist PAGE_MODE_PAGE eingestellt. VERWEISE: query_page_mode, more, set_status_line, query_verzeichnis_inhalt, query_page_inhalt GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_page_mode DEKLARATION: string query_page_mode() BESCHREIBUNG: Liefert den mit set_page_mode gesetzten Modus zurück. VERWEISE: set_page_mode GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_current_page DEKLARATION: int set_current_page(int page) BESCHREIBUNG: Damit kann man das Buch an einer bestimmten Stelle aufschlagen. Mit einem negativen Wert schlägt man das Buch zu, mit 0 am Inhaltsverzeichnis und mit postiven Werten bei der entsprechenden Seite auf. Diese Funktion liefert den neuen Wert außerdem zurück. VERWEISE: set_current_page GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_verzeichnis DEKLARATION: void set_verzeichnis(string|int verzeichnis, string verzeichnis_no_ascii_art = 0) BESCHREIBUNG: Damit kann man angeben, ob dieses Buch ein Inhaltsverzeichnis besitzt (verzeichnis=1), falls man dieses dynamisch über query_verzeichnis_inhalt nachliefert. Liegt das Inhaltsverzeichnis bereits als Datei vor, so kann man dessen Dateinamen als Parameter angeben. Relative Pfadnamen sind dabei erlaubt. Der optionale zweite Parameter setzt den Dateinamen für das Verzeichnis für Spieler, die no_ascii_art aktiviert haben. VERWEISE: set_page_names, query_verzeichnis, query_verzeichnis_inhalt GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_page_names DEKLARATION: void set_page_names(string* files, string* files_no_ascii_art = 0) BESCHREIBUNG: Hiermit gibt man die Dateinamen der einzelnen Seiten an. Wildcards und relative Pfadangaben sind möglich. Bei Wildcards werden die Dateinamen alphabetisch sortiert eingefügt. Wenn files_no_ascii_art verwendet wird, muss die Anzahl der Seiten gleich sein. Beispiel: set_page_names( ({ "../texte/atlasseite*", "../texte/einzelseite" }) ); Mit Seiten für no_ascii_art: set_page_names( ({ "../texte/seite1", "../texte/seite2" }), ({ "../texte/seite_na1", "../texte/seite_na2" }) ); VERWEISE: set_verzeichnis, query_page_names, query_page_inhalt GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_verzeichnis_inhalt DEKLARATION: string|string* query_verzeichnis_inhalt(object leser) BESCHREIBUNG: Diese Funktion liefert den Text des Inhaltsverzeichnisses (als String) zurück. Sie ist nicht dazu gedacht, um von außen aufgerufen zu werden, sondern zur Überlagerung, um dynamische Bücher zu gestaltet. Im "morefile" Modus wird der zurückgelieferte Text als Dateiname interpretiert. Ein normaler Text muss dann als Array aus den einzelnen Zeilen zurückgeliefert werden. Beim Überlagern bitte query_no_ascii_art beachten. VERWEISE: set_verzeichnis, query_page_inhalt GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_page_inhalt DEKLARATION: string|string* query_page_inhalt(int nr, object leser) BESCHREIBUNG: Diese Funktion liefert den Text (als String) der Seite mit der Nummer nr zurück. Sie ist nicht dazu gedacht, um von außen aufgerufen zu werden, sondern zur Überlagerung, um dynamische Bücher zu gestaltet. Im "morefile" Modus wird der zurückgelieferte String als Dateiname interpretiert. Ein normaler Text muss dann als Array aus den einzelnen Zeilen zurückgeliefert werden. Beim Überlagern bitte query_no_ascii_art beachten. VERWEISE: set_page_names, set_max_page, query_verzeichnis_inhalt GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: book_action DEKLARATION: mixed book_action(string str, int page, int more_line, int max_line) BESCHREIBUNG: Wenn man diese Funktion überlagert, kann man eigene Befehle im Buch implementieren. Dies gilt nur für die Modi "more" und "morefile". In str wird der eingebene Befehl beim Lesen des Buches übergeben, page enthält die Seitennummer (0 fürs Inhaltsverzeichnis), more_line die aktuelle Zeile und max_line die Anzahl an Zeilen in dieser Seite. Zurückliefern kann man entweder wie bei more_action die Konstanten: CONTINUE Mit dem Lesen weitermachen END_MORE Mit dem Lesen aufhören (Hierbei wird einfach abgebrochen, man kann das Lesen dann mit continue_read fortsetzen.) NOTHING Nix machen, Prompt nochmal ausgeben Diese Konstanten sind in more.h definiert. Man kann außerdem ein Array der Form ({neue Seite, Zeilennummer}) übergeben, was bedeutet, dass die angegebene Seite ab der angegebenen Zeile angezeigt werden soll. VERWEISE: book_help, set_page_mode, continue_read GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: book_help DEKLARATION: string* book_help(int page, int more_line, int max_line) BESCHREIBUNG: Wenn man diese Funktion überlagert, kann man die Hilfe des Buches erweitern oder verändern. Standardmäßig liefert die Funktion die originale Hilfe als Array aus den einzelnen Zeilen zurück. Dies gilt bisher aber nur für die Modi "more" und "morefile". page enthält die Seitennummer (0 fürs Inhaltsverzeichnis), more_line die aktuelle Zeile und max_line die Anzahl an Zeilen in dieser Seite. VERWEISE: book_action, set_page_mode, continue_read GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: continue_read DEKLARATION: varargs void continue_read(int page, int line, int quiet) BESCHREIBUNG: Damit wird ein durch END_MORE bei book_action abgebrochenes Lesen an der Seite page, Zeile line fortgesetzt. Wenn quiet != 0 ist, dann wird erstmal nur die Statuszeile ausgegeben. VERWEISE: book_action GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: forbidden_read DEKLARATION: mixed forbidden_read(mixed buch, object wer) BESCHREIBUNG: Wenn der Spieler 'wer' das Buch 'buch' (oder ein anderes Objekt mit dieser Abfrage) lesen will, ruft das Buch wer->forbidden("read", buch) auf. forbidden ruft dann in allen mit wer->add_controller("forbidden_read", other) angemeldeten Controllern other die Funktion other->forbidden_read(buch, wer) auf. Liefert eine dieser Funktionen einen Wert != 0 zurück, so kann derjenige das Buch nicht lesen. Ist dieser Rückgabewert ein String, so wird dieser ausgegeben, ansonsten (wenn es eine Zahl ist), wird die Standardfehlermeldung ausgegeben. VERWEISE: forbidden, add_controller, forbidden_read_me, query_read GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: forbidden_read_me DEKLARATION: mixed forbidden_read_me(object wer, mixed buch) BESCHREIBUNG: Wenn der Spieler 'wer' das Buch 'buch' (oder ein anderes Objekt mit dieser Abfrage) lesen will, ruft das Buch buch->forbidden("read_me", wer) auf. forbidden ruft dann in allen mit buch->add_controller("forbidden_read_me", other) angemeldeten Controllern other die Funktion other->forbidden_read_me( wer, buch) auf. Liefert eine dieser Funktionen einen Wert != 0 zurück, so kann derjenige das Buch nicht lesen. Ist dieser Rückgabewert ein String, so wird dieser ausgegeben, ansonsten (wenn es eine Zahl ist), wird die Standardfehlermeldung ausgegeben. VERWEISE: forbidden, add_controller, forbidden_read, query_read GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: query_book DEKLARATION: int query_book() BESCHREIBUNG: Liefert bei einem Buch 1 zurück. VERWEISE: GRUPPEN: buch SOURCE: /i/object/buch.c FUNKTION: set_plural_name DEKLARATION: void set_plural_name(string str) BESCHREIBUNG: Setzt den Plural-Namen eines Count-Objektes. VERWEISE: set_singular_name, query_singular_name, set_plural_name, query_plural_name GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: query_plural_name DEKLARATION: string query_plural_name() BESCHREIBUNG: Liefert den Plural-Namen eines Count-Objektes. VERWEISE: set_singular_name, query_singular_name, set_plural_name, query_plural_name GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: set_singular_name DEKLARATION: void set_singular_name(string str) BESCHREIBUNG: Setzt den Singular-Namen eines Count-Objektes. VERWEISE: set_singular_name, query_singular_name, set_plural_name, query_plural_name GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: query_singular_name DEKLARATION: string query_singular_name() BESCHREIBUNG: Liefert den Singular-Namen eines Count-Objektes. VERWEISE: set_singular_name, query_singular_name, set_plural_name, query_plural_name GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: set_count_type DEKLARATION: void set_count_type(string str) BESCHREIBUNG: Setzt den Count-Type eines Count-Objektes. Der Count-Type entscheidet darueber, ob zwei Count-Objekte zu einem verschmolzen werden, wenn eines in die Umgebung des anderen bewegt wird. Deshalb muessen Count-Types in UNItopia einmalig sein. Beispiel: Moechte man einen eigenen Pfeil mit einem Extra-Damage bauen, so darf man ihm nicht den Count-Type "pfeil" geben, sonst werden die guten Pfeile zu normalen oder umgekehrt, wenn man zwei entsprechende Pfeil-Haufen in einen Container legt. Man waehle einen moeglichst eindeutigen Count-Type, es empfiehlt sich zB. der Pfad der Datei/Load-Name: set_count_type(load_name()); VERWEISE: set_count, add_count, query_count, query_transaction_count, set_count_type, query_count_type GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: query_count_type DEKLARATION: string query_count_type() BESCHREIBUNG: Liefert den Count-Type eines Count-Objektes. VERWEISE: set_count, add_count, query_count, query_transaction_count, set_count_type, query_count_type GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: query_count_weight DEKLARATION: int query_count_weight(int count) BESCHREIBUNG: Liefert das Gewicht eines Count-Objektes mit der Anzahl count. Diese Funktion wird intern verwendet, um bei einer Aenderung der Anzahl das Gewicht neu zu setzen. Man kann diese Funktion ueberlagern, wenn man fuer sein Count-Objekt andere Gewichte haben moechte. VERWEISE: GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: set_count DEKLARATION: void set_count(int m) BESCHREIBUNG: Setzt die Anzahl eines Count-Objektes. Ist die Anzahl kleiner als 1, so wird das Objekt zerstoert. VERWEISE: set_count, add_count, query_count, query_transaction_count, set_count_type, query_count_type GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: add_count DEKLARATION: void add_count(int m) BESCHREIBUNG: Veraendert die Anzahl eines Objektes. Ist die verbleibende Anzahl kleiner als 1, so wird das Objekt zerstoert. VERWEISE: set_count, add_count, query_count, query_transaction_count, set_count_type, query_count_type GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: query_count DEKLARATION: int query_count() BESCHREIBUNG: Liefert die Anzahl eines Objektes. Diese Funktion dient auch dazu, ein Count-Objekt als solches zu erkennen. Liefert query_count() bei einem beliebigen Objekt einen Wert ungleich 0, so handelt es sich um ein Count-Objekt. VERWEISE: set_count, add_count, query_count, query_transaction_count, set_count_type, query_count_type GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: query_transaction_count DEKLARATION: int query_transaction_count() BESCHREIBUNG: Wird ein Count-Objekt A in die Umgebung eines zweiten Count-Objektes B mit demselben Count-Type bewegt, so wird das nicht bewegte Objekt B zerstoert und die Anzahl von A entsprechend erhoeht. Die urspruengliche Anzahl von A erhaelt man mit der Funktion query_transaction_count(). VERWEISE: set_count, add_count, query_count, query_transaction_count, set_count_type, query_count_type GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: query_ancestor DEKLARATION: object query_ancestor() BESCHREIBUNG: Liefert das Count-Objekt zurueck, von dem dieses Count-Objekt abgespaltet wurde. VERWEISE: split_object, query_ancestor GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: forbidden_join_countob DEKLARATION: int forbidden_join_countob(object alt, object neu) BESCHREIBUNG: Es wird nacheinander im Environment von alt und neu, dann in alt und zum Schluss in neu forbidden("join_countob",alt,neu) aufgerufen und bei einem Rueckgabewert != 0 werden die count_objekte alt und neu nicht zusammengefuehrt. VERWEISE: notify_joined_countob GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: notify_joined_countob DEKLARATION: void notify_joined_countob(object alt, object neu) BESCHREIBUNG: Wird ein Count-Objekt neu in die Umgebung eines zweiten Count-Objektes alt mit demselben Count-Type bewegt, so wird das nicht bewegte Count-Objekt alt zerstoert und die Anzahl von neu entsprechend erhoeht. Kurz vor der Zerstoerung des Count-Objektes alt wird alt->notify("joined_countob", alt, neu) aufgerufen. In allen Objekten ob, die sich vorher mittels alt->add_controller("notify_joined_countob", ob) im Count-Objekt alt als Controller fuer "notify_joined_countob" angemeldet haben, wird dann notify_joined_countob(alt, neu) aufgerufen. Es wird ausserdem neu->notify("incorporated_countob", alt, neu) aufgerufen. VERWEISE: split_object, query_ancestor, notify_incorporated_countob, notify_countob_split_from, notify_countob_split_into, notify, add_controller GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: notify_incorporated_countob DEKLARATION: void notify_incorporated_countob(object alt, object neu) BESCHREIBUNG: Wird ein Count-Objekt neu in die Umgebung eines zweiten Count-Objektes alt mit demselben Count-Type bewegt, so wird das nicht bewegte Count-Objekt alt zerstoert und die Anzahl von neu entsprechend erhoeht. Unmittelbar vor der Zerstoerung des Count-Objektes alt wird neu->notify("incorporated_countob", alt, neu) aufgerufen. In allen Objekten ob, die sich vorher mittels neu->add_controller("notify_incorporated_countob", ob) im Count-Objekt alt als Controller fuer "notify_incorporated_countob" angemeldet haben, wird dann notify_incorporated_countob(alt, neu) aufgerufen. Vor diesem Controller wird ausserdem alt->notify("joined_countob", alt, neu) aufgerufen. VERWEISE: split_object, query_ancestor, notify_joined_countob, notify_countob_split_from, notify_countob_split_into, notify, add_controller GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: split_object DEKLARATION: object split_object(int i) BESCHREIBUNG: Teilt ein Count-Objekt und liefert ein neues Count-Objekt mit der Anzahl i zurueck. Die Anzahl des alten Count-Objektes ist entsprechend verkleinert. Ist i groesser oder gleich der Anzahl des alten Count-Objektes, so wird stattdessen das alte zurueck geliefert. VERWEISE: split_object, query_ancestor, notify_countob_split_from, c notify_countob_split_into GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: notify_countob_split_from DEKLARATION: void notify_countob_split_from(object alt, object neu) BESCHREIBUNG: Wird von einem Count-Objekt alt mittels split_object() ein Count-Onjekt neu abgespaltet, so wird anschliessend im Count-Objekt alt alt->notify("countob_split_from", alt, neu) aufgerufen. In allen Objekten ob, die sich vorher mittels alt->add_controller("notify_countob_split_from", ob) im Count-Objekt alt als Controller fuer "notify_countob_split_from" angemeldet haben, wird dann ob->notify_countob_split_from(alt, neu) aufgerufen. Hinweis: Der Vorgang des Abspaltens ist in dem Moment, da notify_countob_split_from() aufgerufen wird, insofern noch nicht vollstaendig abgeschlossen, als noch nicht alle relevanten Werte des Count-Objektes alt im Count-Objekt neu gesetzt sein muessen. (Dies ist zum Beispiel bei multi_ob's oder anderen Count-Objekten, welche split_object ueberlagern, der Fall.) Es wird ausserdem noch neu->notify("countob_split_into", alt, neu) aufgerufen. VERWEISE: split_object, query_ancestor, notify_joined_countob, notify_incorporated_countob, notify_countob_split_into, notify, add_controller GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: notify_countob_split_into DEKLARATION: void notify_countob_split_into(object alt, object neu) BESCHREIBUNG: Wird von einem Count-Objekt alt mittels split_object() ein Count-Onjekt neu abgespaltet, so wird anschliessend im neuen Count-Objekt neu neu->notify("countob_split_into", alt, neu) aufgerufen. In allen Objekten ob, die sich vorher mittels neu->add_controller("notify_countob_split_into", ob) im Count-Objekt alt als Controller fuer "notify_countob_split_into" angemeldet haben, wird dann ob->notify_countob_split_into(alt, neu) aufgerufen. Da dieser Controller kurz nach dem Clonen des neuen Objektes aufgerufen wird, wird sich hoechstwahrscheinlich nur das Objekt selbst als Controller anmelden koennen. Hinweis: Der Vorgang des Abspaltens ist in dem Moment, da notify_countob_split_into() aufgerufen wird, insofern noch nicht vollstaendig abgeschlossen, als noch nicht alle relevanten Werte des Count-Objektes alt im Count-Objekt neu gesetzt sein muessen. (Dies ist zum Beispiel bei multi_ob's oder anderen Count-Objekten, welche split_object ueberlagern, der Fall.) Es wird ausserdem noch alt->notify("countob_split_from", alt, neu) aufgerufen. VERWEISE: split_object, query_ancestor, notify_joined_countob, notify_incorporated_countob, notify_countob_split_from, notify, add_controller GRUPPEN: countob SOURCE: /i/object/countob.c FUNKTION: set_units DEKLARATION: void set_units(mapping hin, mapping back) BESCHREIBUNG: Mit dieser Funktion setzt man die Einheiten, welche erkannt und ausgegeben werden sollen. Das erste Mapping 'hin' enthaelt die zu erkennenden Einheiten, welche im Mapping klein geschrieben werden muessen. Das zweite Mapping 'back' enthaelt die anzuzeigenden Einheiten mit Singular als ersten und Plural als zweiten Wert. Beispiel: set_units(([ "g": 1, "gramm": 1, "kg": 1000, "kilo": 1000, "kilogramm": 1000, "t": 1000000, "tonne": 1000000, "tonnen": 1000000 ]), ([ 1: " Gramm";" Gramm", 1000: " Kilo";" Kilo", 1000000: " Tonne";" Tonnen", ])); Im Beispiel werden sowohl "1g" als auch "1 gramm" oder "3 kilo" erkannt. Angezeigt werden sie jedoch als "1 Gramm" oder "3 Kilo". ACHTUNG: Damit die Anzeige ordnungsgemaess funktioniert, muss /i/object/countunits entweder vor /i/object/countob inheritet werden, oder query_menge muss ueberlagert und an countunits weitergeleitet werden (return countunits::query_menge()). GRUPPEN: countob SOURCE: /i/object/countunits.c FUNKTION: query_abbrennzeit DEKLARATION: int query_abbrennzeit() BESCHREIBUNG: Diese Funktion ist zum Ueberlagern gedacht, wenn nicht die normale Zeit fuer das Abbrennen eines Objektes veranschlagt werden soll. Default ist: Zeit = random(40)+20 * Gewicht des brennenden Objekts Die Funktion wird jeweils beim Ueberwerfen des Shadows aufgerufen. VERWEISE: query_burn_time GRUPPEN: feuer SOURCE: /i/object/feuer_shadow.c FUNKTION: query_fire_shadow DEKLARATION: object query_fire_shadow() BESCHREIBUNG: Liefert den Feuershadow eines brennenden Objektes zurueck. VERWEISE: query_burning, query_burn_time GRUPPEN: feuer SOURCE: /i/object/feuer_shadow.c FUNKTION: query_burn_time DEKLARATION: int query_burn_time() BESCHREIBUNG: Liefert die restliche Anzahl an Sekunden zurueck, bis das Feuer abgebrannt ist. VERWEISE: query_abbrennzeit, query_fire_shadow, query_burning GRUPPEN: feuer SOURCE: /i/object/feuer_shadow.c FUNKTION: set_success_message DEKLARATION: void set_success_message(mixed success_message) BESCHREIBUNG: Setzt bei Nahrung und Getraenken die Meldung, die der Spieler am Ende des Essens oder Trinkens bekommt. Pseudoclosures und Closures sind erlaubt. Die Meldung wird automatisch umgebrochen. VERWEISE: set_other_success_message, query_success_message, set_failure_message, set_other_failure_message, set_chew_message, set_other_chew_message set_start_chew_message, set_other_start_chew_message, set_dauer, set_failure_remove GRUPPEN: nahrung, getraenke SOURCE: /i/object/nahrung.c, /i/object/getraenk.c FUNKTION: set_other_success_message DEKLARATION: void set_other_success_message(mixed other_success_message) BESCHREIBUNG: Setzt bei Nahrung und Getraenken die Meldung, die die anderen im Raum bekommen, wenn ein Spieler die Nahrung aufgegessen bzw. das Getraenk ausgetrunken hat. Pseudoclosures und Closures sind erlaubt. Die Meldung wird automatisch umgebrochen. VERWEISE: set_success_message, query_other_success_message, set_failure_message, set_other_failure_message, set_chew_message, set_other_chew_message set_start_chew_message, set_other_start_chew_message, set_dauer, set_failure_remove GRUPPEN: nahrung, getraenke SOURCE: /i/object/nahrung.c, /i/object/getraenk.c FUNKTION: set_failure_message DEKLARATION: int set_failure_message(mixed failure_message) BESCHREIBUNG: Setzt bei Nahrung und Getraenken die Meldung, die der Spieler bekommt, wenn er nicht mehr essen oder trinken kann (zu viel wp, fp oder alc). Pseudoclosures und Closures sind erlaubt. Die Meldung wird automatisch umgebrochen. Wenn diese Meldung geaendert wird, sollte man mit set_failure_remove angeben, ob die Nahrung oder das Getraenk danach vernichtet wird. VERWEISE: set_other_failure_message, query_failure_message, set_success_message, set_other_success_message, set_chew_message, set_other_chew_message, set_start_chew_message, set_other_start_chew_message, set_dauer, set_failure_remove GRUPPEN: nahrung, getraenke SOURCE: /i/object/nahrung.c, /i/object/getraenk.c FUNKTION: set_other_failure_message DEKLARATION: void set_other_failure_message(mixed other_failure_message) BESCHREIBUNG: Setzt bei Nahrung und Getraenken die Meldung, die die anderen im Raum bekommen, wenn ein Spieler nicht mehr essen oder trinken kann. Pseudoclosures und Closures sind erlaubt. Die Meldung wird automatisch umgebrochen. VERWEISE: set_failure_message, query_other_failure_message, set_success_message, set_other_success_message, set_chew_message, set_other_chew_message, set_start_chew_message, set_other_start_chew_message, set_dauer, set_failure_remove GRUPPEN: nahrung, getraenke SOURCE: /i/object/nahrung.c, /i/object/getraenk.c FUNKTION: set_healing DEKLARATION: void set_healing(int healing) BESCHREIBUNG: Setzt bei Nahrung und Getraenken die Anzahl APs, die ein Spieler beim Genuss gutgeschrieben bekommt. VERWEISE: query_healing, set_amount, query_amount, set_strength, query_strength, set_dauer, query_dauer GRUPPEN: nahrung, getraenke SOURCE: /i/object/nahrung.c, /i/object/getraenk.c FUNKTION: set_strength DEKLARATION: void set_strength(int strength) BESCHREIBUNG: Setzt bei Getraenken den Alkoholgehalt. VERWEISE: set_healing, query_healing, set_amount, query_amount, query_strength GRUPPEN: getraenke SOURCE: /i/object/getraenk.c FUNKTION: set_amount DEKLARATION: void set_amount(int amount) BESCHREIBUNG: Setzt bei Nahrung die fp, bei Getraenken die wp, die ein Spieler beim Genuss bekommt. VERWEISE: set_healing, query_healing, query_amount, set_strength, query_strength GRUPPEN: nahrung, getraenke SOURCE: /i/object/nahrung.c, /i/object/getraenk.c FUNKTION: query_healing DEKLARATION: int query_healing() BESCHREIBUNG: Liefert Zurueck, wieviele AP ein Spieler bei Genuss einer Speise oder eines Getraenks bekommt. VERWEISE: set_healing, set_amount, query_amount, set_strength, query_strength GRUPPEN: nahrung, getraenke SOURCE: /i/object/nahrung.c, /i/object/getraenk.c FUNKTION: query_strength DEKLARATION: int query_strength() BESCHREIBUNG: Liefert bei Getraenken den Alkoholgehalt zurueck. VERWEISE: set_healing, query_healing, set_amount, query_amount, set_strength GRUPPEN: nahrung, getraenke SOURCE: /i/object/getraenk.c FUNKTION: query_amount DEKLARATION: int query_amount() BESCHREIBUNG: Liefert bei Nahrung die fp und bei Getraenken die wp, die ein Spieler beim Genuss bekommt, zurueck. VERWEISE: set_healing, query_healing, set_amount, set_strength, query_strength GRUPPEN: nahrung, getraenke SOURCE: /i/object/nahrung.c, /i/object/getraenk.c FUNKTION: set_failure_remove DEKLARATION: void set_failure_remove(int flag) BESCHREIBUNG: Setzt bei Nahrung und Getraenken, ob sie zerstoert werden sollen, wenn man sie nicht essen/trinken kann. Bei flag==1 bekommt der Spieler bei Misserfolg die failure_message, die anderen die other_failure_message und das Essen/Getraenk wird zerstoert. Bei flag==0 bleibt es im Gepaeck des Spielers. VERWEISE: set_failure_message, set_other_failure_message GRUPPEN: nahrung, getraenke SOURCE: /i/object/nahrung.c, /i/object/getraenk.c FUNKTION: query_failure_remove DEKLARATION: int query_failure_remove() BESCHREIBUNG: Liefert, ob die Nahrung oder das Getraenk removed wird, falls der Spieler, der diese Nahrung bzw. das Getraenk essen wollte, bereits satt ist. VERWEISE: set_failure_remove, set_failure_message GRUPPEN: nahrung, getraenke SOURCE: /i/object/nahrung.c, /i/object/getraenk.c FUNKTION: set_stay_in_pub DEKLARATION: void set_stay_in_pub(int flag) BESCHREIBUNG: Wird set_stay_in_pub(1) in einem Getraenk aufgerufen, wird ein Wirt den Spieler daran hindern, eine Kneipe mit dem Getraenk zu verlassen. Wird es mit flag==0 aufgerufen, reagiert er nicht. VERWEISE: query_stay_in_pub GRUPPEN: getraenke SOURCE: /i/object/getraenk.c FUNKTION: query_stay_in_pub DEKLARATION: int query_stay_in_pub() BESCHREIBUNG: Ein Getraenk, das in der Kneipe getrunken werden sollte, antwortet darauf mit 1, die anderen nicht. Wenn Du einen Filter in einen Kneipenausgang baust, dann sollte er jedes Getraenk im Gepaeck des Spielers danach fragen. VERWEISE: set_stay_in_pub GRUPPEN: getraenke SOURCE: /i/object/getraenk.c FUNKTION: query_getraenk DEKLARATION: int query_getraenk() BESCHREIBUNG: Getraenke antworten darauf mit 1. VERWEISE: GRUPPEN: getraenke SOURCE: /i/object/getraenk.c FUNKTION: query_getraenk_messages DEKLARATION: closure *query_getraenk_messages() BESCHREIBUNG: Liefert alle Closure-Eintraege des Getraenks als Array zurueck. VERWEISE: GRUPPEN: getraenke SOURCE: /i/object/getraenk.c FUNKTION: forbidden_drink DEKLARATION: int forbidden_drink(object ob, object who) BESCHREIBUNG: Bevor ein Lebewesen who das Getraenk ob trinken darf, wird who->forbidden( "drink", ob) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird ob nicht getrunken. Die Funktion forbidden ruft in allen mit who->add_controller( "forbidden_drink", other) angemeldeten Objekten other die Funktionen other->forbidden_drink(ob, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt ob kann nicht getrunken werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und ggf. an den Raum muss der Programmierer in forbidden_drink oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Zum Beispiel kann ein Wirt den Genuss mitgebrachter Getraenke in seinem Gasthof untersagen, oder es hat ein NPC etwas gegen Alkohol-Saeufer. Diese koennen sich z.B. im moved_in anmelden und im moved_out abmelden. VERWEISE: forbidden, notify, forbidden_drink_me, notify_drink GRUPPEN: getraenke SOURCE: /i/object/getraenk.c FUNKTION: forbidden_drink_me DEKLARATION: int forbidden_drink_me(object who, object on) BESCHREIBUNG: Bevor ein Lebewesen who das Getraenk ob trinken darf, wird ob->forbidden( "drink_me", who) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird ob nicht getrunken. Die Funktion forbidden ruft in allen mit ob->add_controller( "forbidden_drink_me", other) angemeldeten Objekten other die Funktionen other->forbidden_drink_me(who, ob) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt ob kann nicht getrunken werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und ggf. an den Raum muss der Programmierer in forbidden_drink_me oder forbidden, falls er diese Funktion ueberlagern will, sorgen. VERWEISE: forbidden, notify, forbidden_drink, notify_drink_me GRUPPEN: getraenke SOURCE: /i/object/getraenk.c FUNKTION: notify_drink DEKLARATION: void notify_drink(object ob, object who) BESCHREIBUNG: Nachdem ein Lebewesen who das Getraenk ob hintergekippt hat, wird who->notify("drink", ob) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_drink", other) angemeldeten Objekten other die Funktionen other->notify_drink(ob, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf den Genuss des Getraenks ob durch das Lebewesen who zu reagieren. Zum Beispiel wird ein durstiger Mann nicht nur wortlos zuschauen, wie sich ein Spieler vollaufen laesst. VERWEISE: forbidden, notify, notify_drink_me, forbidden_drink GRUPPEN: getraenke SOURCE: /i/object/getraenk.c FUNKTION: notify_drink_me DEKLARATION: void notify_drink_me(object who, object ob) BESCHREIBUNG: Nachdem ein Lebewesen who das Getraenk ob hintergekippt hat, wird ob->notify("drink_me", who) aufgerufen. Die Funktion notify ruft in allen mit ob->add_controller("notify_drink_me", other) angemeldeten Objekten other die Funktionen other->notify_drink_me( who, ob) auf. Sowohl ob als auch other haben dann eine Moeglichkeit, auf den Genuss des Getraenks ob durch das Lebewesen who zu reagieren. VERWEISE: forbidden, notify, notify_drink_me, forbidden_drink GRUPPEN: getraenke SOURCE: /i/object/getraenk.c FUNKTION: notify_drink_failure DEKLARATION: void notify_drink_failure(object getraenk, object who) BESCHREIBUNG: Nachdem ein Lebewesen who das Getraenk getraenk nicht trinken konnte, weil er bereits voll war, wird who->notify("drink_failure", getraenk) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller( "notify_drink_failure", other) angemeldeten Objekten other die Funktionen other->notify_drink_failure(getraenk, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, darauf zu reagieren. VERWEISE: forbidden, notify, notify_drink_failure_self, notify_drink, notify_drink_me, forbidden_drink, forbidden_drink_me GRUPPEN: getraenke SOURCE: /i/object/getraenk.c FUNKTION: notify_drink_failure_self DEKLARATION: void notify_drink_failure_self(object who, object getraenk) BESCHREIBUNG: Nachdem ein Lebewesen who das Getraenk getraenk nicht trinken konnte, weil er bereits voll war, wird getraenk->notify("drink_failure_self", who) aufgerufen. Die Funktion notify ruft in allen mit getraenk->add_controller( "notify_drink_failure_self", other) angemeldeten Objekten other die Funktionen other->notify_drink_failure_self(who, getraenk) auf. Sowohl getraenk als auch other haben dann eine Moeglichkeit, darauf zu reagieren. VERWEISE: forbidden, notify, notify_drink_failure, notify_drink, notify_drink_me, forbidden_drink, forbidden_drink_me GRUPPEN: getraenke SOURCE: /i/object/getraenk.c FUNKTION: query_entry DEKLARATION: protected mapping query_entry() BESCHREIBUNG: Diese Funktion wird vom Gilden-Master (GILDEN_OB) aufgerufen, um alle Informationen der Gilde abzufragen. Welche Eintraege das Mapping haben kann, steht in /doc/funktionsweisen/gilden GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: player_died DEKLARATION: protected void player_died(object player, mapping infos) BESCHREIBUNG: Wird aufgerufen, wenn ein Spieler gestorben ist. Das Mapping ist das gleiche, welches an add_hp() und die() uebergeben wurde. VERWEISE: player_murdered, player_suicid, notify_login, add_hp GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: player_murdered DEKLARATION: protected void player_murdered(object player, mixed opfer) BESCHREIBUNG: Wird aufgerufen, wenn ein Spieler einen anderen ermordet hat. Wenn der Tod eintraf, nachdem der Spieler sich ausloggte, wird diese Funktion beim naechsten Login des Spielers aufgerufen. Der real_name des Opfers wird dann als String uebergeben, anstatt als Objekt, wie es sonst der Fall ist. VERWEISE: player_died, player_suicid, notify_login, add_hp GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: leave_gilde DEKLARATION: protected void leave_gilde(object player) BESCHREIBUNG: Wird aufgerufen, wenn ein Spieler aus der Gilde austritt. VERWEISE: player_suicid, enter_gilde, player_new_rang GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: enter_gilde DEKLARATION: protected void enter_gilde(object player) BESCHREIBUNG: Wird aufgerufen, wenn ein Spieler in die Gilde eintritt. VERWEISE: player_suicid, leave_gilde, player_new_rang GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: player_new_rang DEKLARATION: protected void player_new_rang(object player, int old_rang, int new_rang) BESCHREIBUNG: Wird aufgerufen, wenn ein Spieler einen neuen Rang in der Gilde erhaelt. VERWEISE: player_suicid, leave_gilde, enter_gilde GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: player_suicid DEKLARATION: protected void player_suicid(string name) BESCHREIBUNG: Wird aufgerufen, wenn ein Spieler sich suizidet hat, oder vom System geloescht wird. Der Spieler muss dabei nicht anwesend sein. VERWEISE: enter_gilde, leave_gilde, player_died, player_murdered, notify_login GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: notify_login DEKLARATION: protected void notify_login(object player, int flag, int mode) BESCHREIBUNG: Wird aufgerufen, wenn ein Spieler sich eingeloggt hat. Fuer Flag werden folgende Werte aus /sys/player.h genutzt: NL_LOGON : Spieler loggt sich ein NL_STATUE : Spieler war nur Statue Fuer Mode werden folgende Werte aus /sys/player.h verwendet: NL_DEFAULT Normaler Logon. NL_ARMAGEDDON Der erste Login nach einem Armageddon. NL_STADT Der Spieler hat sich vorher mit ende stadt ausgeloggt. NL_START Der Spieler hat sich vorher mit ende start ausgeloggt. NL_PORTAL_ENTER Ein Spieler aus einem anderen Mud betritt dieses Mud. NL_PORTAL_REENTER Ein Spieler kehrt in dieses Mud zurueck. VERWEISE: player_died, player_murdered, player_suicid, notify_quit GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: notify_quit DEKLARATION: protected void notify_quit(object player, int flag, int mode) BESCHREIBUNG: Wird aufgerufen, wenn ein Spieler sich ausgeloggt hat. Fuer Flag werden folgende Werte aus /sys/player.h genutzt: NQ_ENDE : Spieler hat 'ende' eingegeben NQ_NETZTOT : Spieler war netztot und zerfaellt jetzt zu Staub NQ_SUIZID : Spieler hat sich suizidet Fuer Mode werden folgende Werte aus /sys/player.h verwendet: NQ_KEIN_ENDE : Ein systemseitiges Beenden (siehe flag) NQ_ENDE_BLANK : Ende wurde ohne Parameter angegeben. NQ_ENDE_STADT : ende stadt wurde angegeben NQ_ENDE_START : ende start wurde angegeben NQ_PORTAL_LEAVE : Ein Spieler aus einem anderen Mud verlaesst dieses Mud. NQ_PORTAL_TRAVEL : Ein spieler aus diesem Mud reist in ein anderes Mud. VERWEISE: player_died, player_murdered, player_suicid, notify_login GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: notify_net_dead DEKLARATION: void notify_net_dead(object who, int flag, int mode) BESCHREIBUNG: Wird aufgerufen, wenn die Verbindung unterbrochen wurde. flag und mode werden derzeit mit dem Parameter NND_DEFAULT (=0, /sys/player.h) vorbelegt. VERWEISE: notify_quit, notify_login, player_suicid GRUPPEN: spieler SOURCE: /i/object/gilden_ob.c FUNKTION: query_erf_gilde_available DEKLARATION: int query_erf_gilde_available() BESCHREIBUNG: Liefert diese Funktion 1, dann wird dem Spieler beim Befehl 'erfahrung' noch die Option 'gilde' angeboten. Wenn der Spieler dann 'erfahrung gilde' eingibt wird query_erf_gilde(SPIELER) aufgerufen und das Ergebnis im more angezeigt. VERWEISE: query_erf_gilde, query_erf_gilde_options GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: query_erf_gilde DEKLARATION: string *query_erf_gilde(object who, string rest) BESCHREIBUNG: Diese Funktion wird abgefragt, wenn ein Spieler 'erfahrung gilde ' eingibt. Das Ergebnis muss ein String-Array sein, das dann dem Spieler per more angezeigt wird. Das ganze funktioniert nur, wenn query_erf_gilde_available() 1 liefert. Moegliche Parameter von 'erfahrung gilde' (also das was in rest geliefert wird) kann mittels query_erf_gilde_options() in die Hilfe von 'erfahrung' aufgenommen werden. VERWEISE: query_erf_gilde_available, query_erf_gilde_options GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: query_erf_gilde_options DEKLARATION: string query_erf_gilde_options() BESCHREIBUNG: Diese Funktion wird abgefragt, wenn die Kurzhilfe von 'erfahrung' angezeigt werden soll. Der zurueckgelieferte Text wird dort hinter 'Gilde' angezeigt und sollte alle moeglichen Optionen fuer 'erfahrung gilde' auflisten. Die tatsaechlich angegebenen Optionen werden query_erf_gilde dann als 2. Parameter geliefert. VERWEISE: query_erf_gilde_available, query_erf_gilde GRUPPEN: spieler, gilde SOURCE: /i/object/gilden_ob.c FUNKTION: query_key DEKLARATION: int query_key() BESCHREIBUNG: Liefert bei Schluesseln einen Wert != 0. VERWEISE: query_keys GRUPPEN: taschen SOURCE: /i/object/key.c FUNKTION: set_time_of_death DEKLARATION: void set_time_of_death() BESCHREIBUNG: Diese Funktion setzt die Todeszeit einer Leiche auf "jetzt". Mit Hilfe dieser Funktion ist es moeglich, start_decay zu ueberlagern. VERWEISE: start_decay GRUPPEN: spieler, monster SOURCE: /i/object/leiche.c FUNKTION: query_murderer DEKLARATION: mapping query_murderer() BESCHREIBUNG: Liefert den Moerder (sofern bekannt) dieser Leiche aus. VERWEISE: set_murderer, query_leiche GRUPPEN: spieler, monster SOURCE: /i/object/leiche.c FUNKTION: set_murderer DEKLARATION: void set_murderer(mapping murderer) BESCHREIBUNG: Damit verraet man den Moerder dieser Leiche. VERWEISE: query_murderer, query_lieche GRUPPEN: spieler, monster SOURCE: /i/object/leiche.c FUNKTION: query_resurrection_info DEKLARATION: mixed *query_resurrection_info() BESCHREIBUNG: Liefert die fuer die Wiederbelebung einer Leiche noetigen Werte. Wird beispielsweise von der Finsterlinge- und der Sehergilde verwendet. VERWEISE: set_no_resurrection, query_no_resurrection GRUPPEN: spieler, monster SOURCE: /i/object/leiche.c FUNKTION: query_not_extinguishable DEKLARATION: mixed query_not_extinguishable() BESCHREIBUNG: Liefert einen Wert != 0, wenn diese Leuchte nicht ausgeht. Wird ein String geliefert, so ist dies die Erklaerung dafuer. VERWEISE: set_not_extinguishable GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: set_not_extinguishable DEKLARATION: void set_not_extinguishable(mixed why) BESCHREIBUNG: Damit setzt man, ob die Leuchte wieder ausgehen kann. Ist why ein String, so ist dies die Begruendung fuer den Spieler. VERWEISE: query_not_extinguishable GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: query_destruct_at_out_of_fuel DEKLARATION: int query_destruct_at_out_of_fuel() BESCHREIBUNG: Liefert einen Wert != 0, wenn sich die Leuchte zerstoert, wenn sie leer ist. VERWEISE: set_destruct_at_out_of_fuel, set_fuel, add_fuel, query_fuel, query_max_fuel GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: set_destruct_at_out_of_fuel DEKLARATION: void set_destruct_at_out_of_fuel(int a) BESCHREIBUNG: Mit einem Wert != 0 zerstoert sich die Leuchte, wenn sie leer ist. VERWEISE: query_destruct_at_out_of_fuel, set_fuel, add_fuel, query_fuel, query_max_fuel GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: set_fuel DEKLARATION: void set_fuel(int brenndauer) BESCHREIBUNG: Damit wird die Brenndauer in Sekunden gesetzt. VERWEISE: add_fuel, query_fuel, query_max_fuel, set_destruct_at_out_of_fuel, query_destruct_at_out_of_fuel, notify_burned_out GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: add_fuel DEKLARATION: void add_fuel(int brenndauer) BESCHREIBUNG: Diese Brenndauer wird zur vorhandenen dazu addiert. Ueber den mit set_fuel gesetzten Wert kommt man aber nicht hinaus. VERWEISE: set_fuel, query_fuel, query_max_fuel, set_destruct_at_out_of_fuel, query_destruct_at_out_of_fuel, notify_burned_out GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: query_max_fuel DEKLARATION: int query_max_fuel() BESCHREIBUNG: Liefert die maximale Brenndauer der Leuchte. Dies ist die Brenndauer, die mit dem letzten set_fuel gesetzt wurde. VERWEISE: set_fuel, add_fuel, query_fuel, set_destruct_at_out_of_fuel, query_destruct_at_out_of_fuel GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: set_power DEKLARATION: void set_power(int power) BESCHREIBUNG: Damit wird die Leuchtstaerke gesetzt. Auch negative Werte sind moeglich. VERWEISE: query_power, set_fuel GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: query_power DEKLARATION: int query_power() BESCHREIBUNG: Liefert die Leuchtstaerke zurueck. VERWEISE: set_power, query_fuel, query_lamp GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: set_light_adjektiv DEKLARATION: void set_light_adjektiv(mixed str) BESCHREIBUNG: Damit wird das Adjektiv gesetzt, welches die Leuchte bekommt, wenn sie brennt. Standardmaessig ist "brennend" gesetzt. VERWEISE: query_light_adjektiv, query_is_lighted, set_adjektiv GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: query_light_adjektiv DEKLARATION: mixed query_light_adjektiv() BESCHREIBUNG: Liefert das Adjektiv, welches die Leuchte bekommt, wenn sie brennt. Standardmaessig ist "brennend" gesetzt. VERWEISE: set_light_adjektiv, query_is_lighted, query_adjektiv GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: set_light_verb DEKLARATION: void set_light_verb(string singular, string plural) BESCHREIBUNG: Damit wird das Verb (jeweils fuer Einzahl und Mehrzahl) gesetzt, welches zur Ausgabe der Meldungen der Leuchte genommen wird. Standardmaessig ist "brennt" und "brennen" gesetzt. VERWEISE: set_own_light GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: query_light_verb DEKLARATION: string *query_light_verb() BESCHREIBUNG: Liefert das Verb, welches zur Ausgabe der Meldungen zum Brennen der Leuchte genommen wird. Standardmaessig ist "brennt" und "brennen" gesetzt. Das zurueckgelieferte Array hat die Form ({string singular, string plural}). VERWEISE: set_own_light GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: set_extinguish_verb DEKLARATION: void set_extinguish_verb(string singular, string plural) BESCHREIBUNG: Damit wird das Verb (jeweils fuer Einzahl und Mehrzahl) gesetzt, welches zur Ausgabe der Meldungen beim Erloeschen der Leuchte genommen wird. Standardmaessig ist "erlischt" und "erloeschen" gesetzt. VERWEISE: set_own_light GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: query_extinguish_verb DEKLARATION: string *query_extinguish_verb() BESCHREIBUNG: Liefert das Verb, welches zur Ausgabe der Meldungen beim Erloeschen der Leuchte genommen wird. Standardmaessig ist "erlischt" und "erloeschen" gesetzt. Das zurueckgelieferte Array hat die Form ({string singular, string plural}). VERWEISE: set_own_light GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: set_burn_under_water DEKLARATION: void set_burn_under_water(int buw) BESCHREIBUNG: Damit wird gesetzt, ob die Leuchte unter Wasser weiterbrennt (buw != 0). VERWEISE: query_burn_under_water, query_is_lighted GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: query_burn_under_water DEKLARATION: int query_burn_under_water() BESCHREIBUNG: Falls != 0, brennt die Leuchte unter Wasser weiter. VERWEISE: set_burn_under_water, query_is_lighted GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: query_is_lighted DEKLARATION: int query_is_lighted() BESCHREIBUNG: Liefert einen Wert != 0, wenn diese Leuchte brennt. VERWEISE: query_light_adjektiv, an, aus, light_on, light_off, query_fuel, query_lamp GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: forbidden_burn DEKLARATION: int forbidden_burn(object leuchte) BESCHREIBUNG: Immer wenn getestet wird, ob eine Leuchte brennen darf, werden alle Umgebungen durchgegangen und sofern das Leuchten mit allowed_burn nicht erlaubt wurde, env->forbidden("burn", leuchte) aufgerufen. Liefert diese Funktion einen Wert != 0 zurueck, so kann die Leuchte nicht (mehr) brennen. Die Funktion forbidden ruft dann in allen mit env->add_controller( "forbidden_burn", other) angemeldeten Objekten other die Funktion other->forbidden_burn(leuchte) auf. Liefert auch nur eine dieser Funktionen einen Wert != 0, so wird dieser zurueckgeliefert und die Leuchte kann nicht brennen. Fuer die Ausgabe einer Meldung an environment(leuchte) (falls es ein Lebewesen oder Raum ist), muss der Programmierer im forbidden_burn selber sorgen. VERWEISE: forbidden, notify_burn, allowed_burn, notify_light, notify_extinguish GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: allowed_burn DEKLARATION: int allowed_burn(object leuchte) BESCHREIBUNG: Immer wenn getest wird, ob eine Leuchte brennen darf, werden alle Umgebungen durchgegangen und es wird env->allowed_burn(leuchte) aufgerufen. Liefert diese Funktion einen Wert != 0 zurueck, so wird der Test abgebrochen und die Leuchte kann brennen. Die Funktion allowed ruft dann in allen mit env->add_controller( "allowed_burn", other) angemeldeten Objekten other die Funktion other->allowed_burn(leuchte) auf. Ist mindestens ein Objekt angemeldet und liefern alle angemeldeten Objekte einen Wert != 0 zurueck, so liefert auch allowed einen Wert != 0 und die Leuchte darf brennen. VERWEISE: allowed, notify_burn, forbidden_burn, notify_light, notify_extinguish GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: an DEKLARATION: void an() BESCHREIBUNG: Damit wird die Leuchte ohne eine Meldung entzuendet. Es findet dabei keine Ueberpruefung statt, ob die Leuchte ueberhaupt brennen darf. VERWEISE: aus, light_on, light_off, query_is_lighted, query_fuel GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: notify_light DEKLARATION: void notify_light(object leuchte) BESCHREIBUNG: Wenn die Leuchte leuchte entzuendet wird, so wird in der Leuchte selber und in allen Umgebungen env der Leuchte leuchte->notify("light",leuchte) bzw. env->notify("light",leuchte) aufgerufen. Die Funktion notify ruft dann in allen mit leuchte-> bzw. env->add_controller( "notify_light", other) angemeldeten Objekten other die Funktion other->notify_light("leuchte") auf. Sowohl leuchte bzw. env als auch other haben dann die Moeglichkeit darauf zu reagieren. VERWEISE: an, light_on, query_is_lighted, query_own_light GRUPPEN: leuchte, licht SOURCE: /i/object/leuchte.c FUNKTION: light_on DEKLARATION: void light_on() BESCHREIBUNG: Damit wird die Leuchte mit einer Meldung entzuendet. Es wird this_player() als Verursacher vorausgesetzt. (Falls this_player()==0 gibt es keine Meldungen.) Dabei findet keine Ueberpruefung der Brenndauer statt. VERWEISE: an, aus, light_off, query_is_lighted, query_fuel GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: aus DEKLARATION: void aus() BESCHREIBUNG: Damit wird die Leuchte ohne eine Meldung ausgeknippst. VERWEISE: an, light_on, light_off, query_is_lighted, query_fuel GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: notify_extinguish DEKLARATION: void notify_extinguish(object leuchte) BESCHREIBUNG: Wenn die Leuchte leuchte erlischt, so wird in der Leuchte selber und in allen Umgebungen env der Leuchte leuchte->notify("extinguish",leuchte) bzw. env->notify("extinguish",leuchte) aufgerufen. Die Funktion notify ruft dann in allen mit leuchte-> bzw. env->add_controller( "notify_extinguish", other) angemeldeten Objekten other die Funktion other->notify_extinguish(leuchte) auf. Sowohl leuchte bzw. env als auch other haben dann die Moeglichkeit darauf zu reagieren. VERWEISE: aus, light_off, query_is_lighted, query_own_light, notify_burned_out GRUPPEN: leuchte, licht SOURCE: /i/object/leuchte.c FUNKTION: light_off DEKLARATION: void light_off() BESCHREIBUNG: Damit wird die Leuchte mit einer Meldung ausgeknippst. VERWEISE: an, aus, light_on, query_is_lighted, query_fuel GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: notify_burn DEKLARATION: void notify_burn(object leuchte) BESCHREIBUNG: Wenn eine Leuchte (z.B Fackel) brennt, wird ab und zu in allen Umgebungen all_environment()->notify("burn", leuchte) aufgerufen. Danach wird auch die verbleibende Brenndauer reduziert und es werden Meldungen ausgegeben. Die Funktion notify ruft dann in allen mit env->add_controller("notify_burn", other) angemeldeten Objekten other die Funktion other->notify_burn(leuchte) auf. Sowohl env als auch other haben dann die Moeglichkeit, noch ein paar zusaetzliche Aktionen auszufuehren. VERWEISE: notify, forbidden_burn, allowed_burn, notify_light, notify_extinguish GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: notify_burned_out DEKLARATION: void notify_burned_out(object leuchte) BESCHREIBUNG: Wenn die Leuchte leuchte erloschen ist, weil die Brenndauer abgelaufen ist, wird in der Leuchte selber und in allen Umgebungen env der Leuchte notify("burned_out",leuchte) aufgerufen. Die Funktion notify ruft dann in allen mit leuchte-> bzw. env->add_controller( "notify_burned_out", other) angemeldeten Objekten other die Funktion other->notify_burned_out(leuchte) auf. Sowohl leuchte bzw. env als auch other haben dann die Moeglichkeit darauf zu reagieren. VERWEISE: set_fuel, query_fuel, notify_extinguish, notify_burn GRUPPEN: leuchte, licht SOURCE: /i/object/leuchte.c FUNKTION: query_fuel DEKLARATION: int query_fuel() BESCHREIBUNG: Liefert die Brenndauer in Sekunden zurueck. VERWEISE: set_fuel, add_fuel, query_max_fuel, query_lamp, set_destruct_at_out_of_fuel, query_destruct_at_out_of_fuel GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: set_value DEKLARATION: varargs void set_value(int max, int min) BESCHREIBUNG: Damit wird der Wert der Leuchte im vollen und leeren Zustand gesetzt. VERWEISE: set_fuel, set_power GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: query_lamp DEKLARATION: int query_lamp() BESCHREIBUNG: Liefert bei einer Leuchte 1 zurueck. VERWEISE: query_fuel, query_power, query_is_lighted GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: T_LISTE DEKLARATION: Liste der T-Defines fuer Leuchten BESCHREIBUNG: Vordefinierte Bedingungen: - T_IS_LIGHTED Die Leuchte ist an. Vordefinierte Werte zum Vergleich mit T_GREATER & Co.: - TN_FUEL_PERCENT Der Fuellstand in Prozent GRUPPEN: leuchte SOURCE: /i/object/leuchte.c FUNKTION: set_solved_msg DEKLARATION: varargs static string set_solved_msg(mixed str_other, mixed str_me) BESCHREIBUNG: Liefert die Meldung, welche ueber den Spiele- bzw. Raetselkanal ausgegeben wird, wenn ein Spieler ein Spiel bzw. Raetsel geloest hat. Die Meldung kann entweder eine Pseudoclosure (mit 'ob als Spieler) oder eine Closure (der Spieler als 1. Parameter) sein. Der Spieler kann dabei ein Objekt oder Mapping (V-Item) sein. Optional kann man eine Meldung in der 1. Person angeben. SOURCE: /i/object/mission_obj.c FUNKTION: set_singular_value DEKLARATION: void set_singular_value(int i) BESCHREIBUNG: Setzt den Wert, den das Multi-Objekt mit der Anzahl 1 haette. VERWEISE: set_singular_value, query_singular_value, set_value, query_value GRUPPEN: countob, handel SOURCE: /i/object/multiob.c FUNKTION: query_singular_value DEKLARATION: int query_singular_value() BESCHREIBUNG: Liefert den Wert, den das Multi-Objekt mit der Anzahl 1 haette. VERWEISE: set_singular_value, query_singular_value, set_value, query_value GRUPPEN: countob, handel SOURCE: /i/object/multiob.c FUNKTION: T_LISTE DEKLARATION: Liste der T-Defines fuer Nahrung BESCHREIBUNG: Vordefinierte Bedingungen: - T_BITTEN_INTO Es wurde schonmal davon abgebissen. - T_BEING_EATEN Es wird gerade gegessen. - T_BEING_EATEN_BY_VIEWER Der Betrachter isst es gerade. Vordefinierte Texte: - T_BITTEN_INTO_TEXT "Es hat schon jemand davon gegessen." oder so. - T_BEING_EATEN_TEXT "Werauchimmer isst es gerade." oder so. Hinweise fuer die Meldungsgeneration: - T_HAS_BITTEN_INTO_TEXT Keine eigene Meldung, ob es angeknabbert ist. - T_HAS_BEING_EATEN_TEXT Keine eigene Meldung, ob gerade gegessen wird. GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_nahrung_messages DEKLARATION: closure *query_nahrung_messages() BESCHREIBUNG: Liefert alle Closure-Eintraege der Nahrung als Array zurueck: ({ success_message, other_success_message, failure_message, other_failure_message, chew_message, other_chew_message, start_chew_message, other_start_chew_message }) Diese Meldungen koennen mit den korrespondierenden set_*_message-Funktionen gesetzt werden. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, set_chew_message, set_other_chew_message, set_start_chew_message, set_other_start_chew_message GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: set_angeknabbert_adjektiv DEKLARATION: void set_angeknabbert_adjektiv(string str) BESCHREIBUNG: setzt dieses Adjektiv vor die anderen (falls vorhanden) Adjektive, wenn von dem Stueck Nahrung bereits etwas abgebissen wurde. VERWEISE: query_angeknabbert_adjektiv GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_angeknabbert_adjektiv DEKLARATION: string query_angeknabbert_adjektiv() BESCHREIBUNG: gibt das Adjektiv zurueck, welches bei einem angekabberten Stueck Nahrung gesetzt wurde. VERWEISE: set_angeknabbert_adjektiv GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_success_message DEKLARATION: closure query_success_message() BESCHREIBUNG: Liefert bei Nahrung die Meldung, die ein Spieler am Ende des Essens bekommt. Diese Meldung wird als Closure zurueckgeliefert, welche bei Aufruf den entsprechenden Text liefert. VERWEISE: set_other_start_chew_message, query_chew_message, set_chew_message, set_other_chew_message, set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, set_dauer, set_failure_remove GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_other_success_message DEKLARATION: closure query_other_success_message() BESCHREIBUNG: Liefert bei Nahrung die Meldung, die die anderen im Raum bekommen, wenn ein Spieler die Nahrung aufgegessen hat. Diese Meldung wird als Closure zurueckgeliefert, welche bei Aufruf den entsprechenden Text liefert. VERWEISE: set_other_start_chew_message, query_chew_message, set_chew_message, set_other_chew_message, set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, set_dauer, set_failure_remove GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_failure_message DEKLARATION: closure query_failure_message(mixed failure_message) BESCHREIBUNG: Liefert bei Nahrung die Meldung, die ein Spieler bekommt, wenn er die Nahrung nicht mehr essen kann, weil er bereits satt ist. Diese Meldung wird als Closure zurueckgeliefert, welche bei Aufruf den entsprechenden Text liefert. VERWEISE: set_start_chew_message, set_other_start_chew_message, query_start_chew_message, query_other_start_chew_message, set_chew_message, set_other_chew_message, query_chew_message, query_other_chew_message, set_success_message, set_other_success_message, query_success_message, query_other_success_message, set_failure_message, set_other_failure_message, query_failure_message, query_other_failure_message, set_dauer, set_failure_remove GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_other_failure_message DEKLARATION: closure query_other_failure_message() BESCHREIBUNG: Liefert bei Nahrung die Meldung, die die anderen im Raum bekommen, wenn ein Spieler die Nahrung nicht mehr essen kann, weil er bereits satt ist. Diese Meldung wird als Closure zurueckgeliefert, welche bei Aufruf den entsprechenden Text liefert. VERWEISE: set_start_chew_message, set_chew_message, set_other_chew_message, set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_failure_message, set_dauer, set_failure_remove GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: set_start_chew_message DEKLARATION: void set_start_chew_message(mixed chew_message) BESCHREIBUNG: Setzt bei Nahrung die Meldung, die ein Spieler beim Beginn des Essens bekommt. Pseudoclosures und Closures sind erlaubt. Die Meldung wird automatisch umgebrochen. VERWEISE: set_other_start_chew_message, query_start_chew_message, set_chew_message, set_other_chew_message, set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, set_dauer, set_failure_remove GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_start_chew_message DEKLARATION: closure query_start_chew_message() BESCHREIBUNG: Liefert den String, den ein Spieler beim Begin des Essens bekommt. Diese Meldung wird als Closure zurueckgeliefert, welche bei Aufruf den entsprechenden Text liefert. VERWEISE: set_other_start_chew_message, query_chew_message, set_chew_message, set_other_chew_message, set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, set_dauer, set_failure_remove GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: set_other_start_chew_message DEKLARATION: void set_other_start_chew_message(mixed other_chew_message) BESCHREIBUNG: Setzt bei Nahrung die Meldung, die die anderen im Raum bekommen, wenn ein Spieler beginnt, die Nahrung zu essen. Pseudoclosures und Closures sind erlaubt. Die Meldung wird automatisch umgebrochen. VERWEISE: set_start_chew_message, query_other_start_chew_message, set_chew_message, set_other_chew_message, set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, set_dauer, set_failure_remove GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_other_start_chew_message DEKLARATION: closure query_other_start_chew_message() BESCHREIBUNG: Liefert bei Nahrung die Meldung, die die anderen im Raum bekommen, wenn ein Spieler beginnt, die nahrung zu essen. Diese Meldung wird als Closure zurueckgeliefert, welche bei Aufruf den entsprechenden Text liefert. VERWEISE: set_start_chew_message, set_chew_message, set_other_chew_message, set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, set_dauer, set_failure_remove, query_start_chew_message, query_chew_message, query_other_chew_message GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: set_chew_message DEKLARATION: void set_chew_message(mixed chew_message) BESCHREIBUNG: Setzt bei Nahrung die Meldung, die ein Spieler beim Kauen bekommt. Pseudoclosures und Closures sind erlaubt. Die Meldung wird automatisch umgebrochen. VERWEISE: set_other_chew_message, query_chew_message, set_dauer, set_failure_remove, set_start_chew_message, set_other_start_chew_message, set_success_message, set_other_success_message, set_failure_message, set_other_failure_message GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_chew_message DEKLARATION: closure query_chew_message() BESCHREIBUNG: Liefert bei Nahrung die Meldung, die Spieler beim Kauen bekommt. Diese Meldung wird als Closure zurueckgeliefert, welche bei Aufruf den entsprechenden Text liefert. VERWEISE: set_chew_message, set_other_chew_message, set_dauer, set_failure_remove, set_start_chew_message, set_other_start_chew_message, set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_start_chew_message GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: set_other_chew_message DEKLARATION: void set_other_chew_message(mixed other_chew_message) BESCHREIBUNG: Setzt bei Nahrung die Meldung, die die anderen im Raum bekommen, wenn ein Spieler kaut. Pseudoclosures und Closures sind erlaubt. Die Meldung wird automatisch umgebrochen. VERWEISE: set_chew_message, query_other_chew_message, set_dauer, set_failure_remove, set_start_chew_message, set_other_start_chew_message, set_success_message, set_other_success_message, set_failure_message, set_other_failure_message GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_other_chew_message DEKLARATION: closure query_other_chew_message() BESCHREIBUNG: Liefert bei Nahrung die Meldung, die die anderen im Raum bekommen, wenn ein Spieler kaut. Diese Meldung wird als Closure zurueckgeliefert, welche bei Aufruf den entsprechenden Text liefert. VERWEISE: set_chew_message, set_dauer, set_failure_remove, set_start_chew_message, set_other_start_chew_message, set_success_message, set_other_success_message, set_failure_message, set_other_failure_message GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: set_dauer DEKLARATION: void set_dauer(int dauer) BESCHREIBUNG: Setzt bei Nahrung die Zeit, die man zum Essen braucht. Waehrend dieser Zeit bekommt der Spieler alle 15 Sekunden die chew_message, die anderen im Raum die other_chew_message zu hoeren. Bei dauer=0 wird keine start_message beim Essen ausgegeben, sondern gleich die success_message. VERWEISE: query_dauer, set_chew_message, set_other_chew_message, set_healing, query_healing, set_amount, query_amount GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_dauer DEKLARATION: int query_dauer() BESCHREIBUNG: Liefert bei einer Speise zurueck, wielange man zum Essen braucht. VERWEISE: set_dauer, set_healing, query_healing, set_amount, query_amount GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_vamp_nahrung DEKLARATION: int query_vamp_nahrung() BESCHREIBUNG: Liefert, ob die Nahrung fuer Mitglieder der Vampyrgilde geniessbar ist. Werte > 0: Fuer Vampyre und normale Spieler essbar, Wert == 0: Nur fuer normale Spieler essbar, Werte < 0: Nur fuer Vampyre essbar. VERWEISE: set_vamp_nahrung GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: set_vamp_nahrung DEKLARATION: void set_vamp_nahrung(int) BESCHREIBUNG: Setzt, ob eine Nahrung fuer Vampyre essbar ist. Werte > 0: Fuer Vampyre und normale Spieler essbar, Wert == 0: Nur fuer normale Spieler essbar, Werte < 0: Nur fuer Vampyre essbar. VERWEISE: query_vamp_nahrung GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_eating DEKLARATION: int query_eating() BESCHREIBUNG: Liefert 1, wenn die Umgebung gerade diese Nahrung isst. VERWEISE: stop_eating, query_nahrung GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: stop_eating DEKLARATION: int stop_eating() BESCHREIBUNG: Damit hoert das Lebewesen, welche diese Nahrung besitzt, auf, diese Nahrung zu essen. Die Funktion liefert 1, falls das Lebewesen gerade dabei war, diese Nahrung zu essen. VERWEISE: query_eating, query_nahrung GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: query_nahrung DEKLARATION: int query_nahrung() BESCHREIBUNG: Liefert bei Nahrung 1 zurueck VERWEISE: query_getraenk GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: notify_eaten DEKLARATION: void notify_eaten(object nahrung, object who) BESCHREIBUNG: Nachdem ein Lebewesen who die Nahrung nahrung gegessen hat, wird who->notify("eaten", nahrung) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_eaten", other) angemeldeten Objekten other die Funktionen other->notify_eaten(nahrung, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf den Genuss der Nahrung nahrung durch das Lebewesen who zu reagieren. VERWEISE: forbidden, notify, notify_eaten_self, notify_eat, notify_eat_self, forbidden_eat, forbidden_eat_self GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: notify_eaten_self DEKLARATION: void notify_eaten_self(object who, object nahrung) BESCHREIBUNG: Nachdem ein Lebewesen who die Nahrung nahrung gegessen hat, wird nahrung->notify("eaten_self", who) aufgerufen. Die Funktion notify ruft in allen mit nahrung->add_controller( "notify_eaten_self", other) angemeldeten Objekten other die Funktionen other->notify_eaten_self(who, nahrung) auf. Sowohl nahrung als auch other haben dann eine Moeglichkeit, auf den Genuss der Nahrung nahrung durch das Lebewesen who zu reagieren. VERWEISE: forbidden, notify, notify_eaten, notify_eat, notify_eat_self, forbidden_eat, forbidden_eat_self GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: notify_eat_failure DEKLARATION: void notify_eat_failure(object nahrung, object who) BESCHREIBUNG: Nachdem ein Lebewesen who die Nahrung nahrung nicht essen konnte, weil er bereits satt war, wird who->notify("eat_failure", nahrung) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_eat_failure", other) angemeldeten Objekten other die Funktionen other->notify_eat_failure( nahrung, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, darauf zu reagieren. VERWEISE: forbidden, notify, notify_eat_failure_self, notify_eaten, notify_eaten_self, notify_eat, notify_eat_self, forbidden_eat, forbidden_eat_self GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: notify_eat_failure_self DEKLARATION: void notify_eat_failure_self(object who, object nahrung) BESCHREIBUNG: Nachdem ein Lebewesen who die Nahrung nahrung nicht essen konnte, weil er bereits satt war, wird nahrung->notify("eat_failure_self", nahrung) aufgerufen. Die Funktion notify ruft in allen mit nahrung->add_controller( "notify_eat_failure_self", other) angemeldeten Objekten other die Funktionen other->notify_eat_failure_self(who, nahrung) auf. Sowohl nahrung als auch other haben dann eine Moeglichkeit, darauf zu reagieren. VERWEISE: forbidden, notify, notify_eat_failure, notify_eaten, notify_eaten_self, notify_eat, notify_eat_self, forbidden_eat, forbidden_eat_self GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: notify_eat DEKLARATION: void notify_eat(object nahrung, object who) BESCHREIBUNG: Nachdem ein Lebewesen who begonnen hat, die Nahrung nahrung zu essen, wird who->notify("eat", nahrung) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_eat", other) angemeldeten Objekten other die Funktionen other->notify_eat(nahrung, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf den Genuss der Nahrung nahrung durch das Lebewesen who zu reagieren. VERWEISE: forbidden, notify, notify_eat, notify_eat_self, forbidden_eat, forbidden_eat_self GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: notify_eat_self DEKLARATION: void notify_eat_self(object who, object nahrung) BESCHREIBUNG: Nachdem ein Lebewesen who begonnen hat, die Nahrung nahrung zu essen, wird nahrung->notify("eat_self", who) aufgerufen. Die Funktion notify ruft in allen mit nahrung->add_controller( "notify_eat_self", other) angemeldeten Objekten other die Funktionen other->notify_eat_self(who, nahrung) auf. Sowohl nahrung als auch other haben dann eine Moeglichkeit, auf den Genuss der Nahrung nahrung durch das Lebewesen who zu reagieren. VERWEISE: forbidden, notify, notify_eat, notify_eat_self, forbidden_eat, forbidden_eat_self GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: notify_bite DEKLARATION: void notify_bite(object nahrung, int amount, object who) BESCHREIBUNG: Wenn ein Lebewesen who ein Stueckchen amount von der Nahrung nahrung abbeisst, wird who->notify("bite", nahrung, amount) aufgerufen. Die Funktion notify ruft in allen mit who->add_controller("notify_bite", other) angemeldeten Objekten other die Funktionen other->notify_bite(nahrung, amount, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf den Genuss der Nahrung nahrung durch das Lebewesen who zu reagieren. VERWEISE: forbidden, notify, notify_bite, notify_bite_self, notify_eat, notify_eat_self, forbidden_eat, forbidden_eat_self GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: notify_bite_self DEKLARATION: void notify_bite_self(object who, int amount, object nahrung) BESCHREIBUNG: Wenn ein Lebewesen who ein Stueckchen amount von der Nahrung nahrung abbeisst, wird who->notify("bite_self", who, amount) aufgerufen. Die Funktion notify ruft in allen mit nahrung->add_controller( "notify_bite_self", other) angemeldeten Objekten other die Funktionen other->notify_bite_self(who, amount, nahrung) auf. Sowohl nahrung als auch other haben dann eine Moeglichkeit, auf den Genuss der Nahrung nahrung durch das Lebewesen who zu reagieren. VERWEISE: forbidden, notify, notify_bite, notify_bite_self, notify_eat, notify_eat_self, forbidden_eat, forbidden_eat_self GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: forbidden_eat DEKLARATION: int forbidden_eat(object nahrung, object who) BESCHREIBUNG: Bevor ein Lebewesen who die Nahrung nahrung essen darf, wird who->forbidden( "eat", nahrung) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird nahrung nicht gegessen. Die Funktion forbidden ruft in allen mit who->add_controller("forbidden_eat", other) angemeldeten Objekten other die Funktionen other->forbidden_eat( nahrung, who) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt nahrung kann nicht gegessen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und ggf. an den Raum muss der Programmierer in forbidden_eat oder forbidden, falls er diese Funktion ueberlagern will, sorgen. VERWEISE: forbidden, notify, forbidden_eat_self, notify_eat, notify_eat_self GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: forbidden_eat_self DEKLARATION: int forbidden_eat_self(object who, object nahrung) BESCHREIBUNG: Bevor ein Lebewesen who die Nahrung nahrung essen darf, wird nahrung->forbidden("eat_self", who) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird nahrung nicht gegessen. Die Funktion forbidden ruft in allen mit who->add_controller( "forbidden_eat_self", other) angemeldeten Objekten other die Funktionen other->forbidden_eat_self(who, nahrung) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Objekt nahrung kann nicht gegessen werden. Fuer die Ausgabe einer Meldung an das Lebewesen who und ggf. an den Raum muss der Programmierer in forbidden_eat_self oder forbidden, falls er diese Funktion ueberlagern will, sorgen. VERWEISE: forbidden, notify, forbidden_eat, notify_eat, notify_eat_self GRUPPEN: nahrung SOURCE: /i/object/nahrung.c FUNKTION: set_life DEKLARATION: void set_life(int life) BESCHREIBUNG: Damit setzt man die durchschnittliche Lebensdauer eines Pfeiles. Nach jeder Benutzung wird einfach getestet, ob random(life)!=0 ist, und falls nicht, der Pfeil zerstoert. Dies spielt nur dann eine Rolle, wenn bei der Schusswaffe nicht mittels set_destroy_pfeil gesetzt wurde, dass das Geschoss sofort zerstoert werden soll. VERWEISE: query_life, check_life, set_destroy_pfeil, query_destroy_pfeil GRUPPEN: waffen SOURCE: /i/object/pfeil.c FUNKTION: add_life DEKLARATION: deprecated int add_life(int i) BESCHREIBUNG: Ist veraltet und macht nichts mehr. Aufgrund der Tatsache, dass das beim Geschoss gesetzte Leben nur eine durchschnittliche Lebensdauer (also im Endeffekt nur eine Wahrscheinlichkeit) darstellt, sollte dies bei der Benutzung nicht verringert werden. Um eine Abnutzung anzuzeigen, kann man check_life() aufrufen. VERWEISE: set_life, query_life, check_life GRUPPEN: waffen SOURCE: /i/object/pfeil.c FUNKTION: query_life DEKLARATION: int query_life() BESCHREIBUNG: Diese Funktion liefert die durchschnittliche(!) Lebensdauer des Geschosses zurueck. VERWEISE: set_life, check_life GRUPPEN: waffen SOURCE: /i/object/pfeil.c FUNKTION: check_life DEKLARATION: void check_life() BESCHREIBUNG: Bei Aufruf dieser Funktion wird das Geschoss abgenutzt. Dabei kann passieren, dass dieses Objekt zerstoert wird. VERWEISE: set_life, query_life GRUPPEN: waffen SOURCE: /i/object/pfeil.c FUNKTION: query_damage_type DEKLARATION: string* query_damage_type() BESCHREIBUNG: Liefert die Schadensart des Pfeils zurueck. Diese hat Vorrang vor der Schadensart des Bogens und wird beim AP-Abzug durch add_hp als AH_DAMAGE_TYPE uebergeben. VERWEISE: set_damage_type, set_damage GRUPPEN: waffen, kampf SOURCE: /i/object/pfeil.c FUNKTION: set_damage_type DEKLARATION: void set_damage_type(string* damage_type) BESCHREIBUNG: Damit wird die Schadensart des Pfeils festgelegt. Diese hat Vorrang vor der Schadensart des Bogens und wird beim AP-Abzug durch add_hp als AH_DAMAGE_TYPE uebergeben. VERWEISE: query_damage_type, set_damage GRUPPEN: waffen, kampf SOURCE: /i/object/pfeil.c FUNKTION: init_geschoss DEKLARATION: void init_geschoss(string kategorie) BESCHREIBUNG: Setzt alle relevanten Werte fuer die entsprechende Geschoss-Kategorie. Geschoss-Kategorie passend fuer die Waffen-Kategorie ----------------------------------------------------- blasrohrpfeil blasrohr bolzen armbrust kieselstein schleuder pfeil bogen VERWEISE: set_pfeil_id, query_pfeil_id GRUPPEN: waffen, geschoss SOURCE: /i/object/pfeil.c FUNKTION: query_extra_damage DEKLARATION: int query_extra_damage(object feind, object besitzer, object waffe) BESCHREIBUNG: Hier kann noch zusaetzlich Schaden abhaengig vom Pfeil, dem Feind, Besitzer oder seiner Waffe angegeben werden. Er wird auf den Schaden der Waffe aufaddiert. VERWEISE: query_extra_damage, real_lost_hp GRUPPEN: waffen SOURCE: /i/object/pfeil.c FUNKTION: real_lost_hp DEKLARATION: void real_lost_hp(object feind, object besitzer, int verlorene_hp) BESCHREIBUNG: Hier bekommt man die tatsaechliche Anzahl an im Feind abgezogenen Ausdauerpunkten zurueck. Man kann z.B. einen vergifteten Pfeil simulieren, indem man hier dem Feind einen Virus verpasst. VERWEISE: query_extra_damage, real_lost_hp GRUPPEN: waffen SOURCE: /i/object/pfeil.c FUNKTION: query_geschoss DEKLARATION: int query_geschoss() BESCHREIBUNG: Liefert 1, wenn es sich um ein Geschoss fuer Schusswaffen handelt, sonst 0. query_geschoss() wird allerdings von Schusswaffen nicht ausgewertet; sofern query_pfeil_id() einer Schusswaffe in einem Objekt als ID gesetzt ist, kann es mit dieser Schusswaffe verschossen werden. VERWEISE: set_pfeil_id, query_pfeil_id GRUPPEN: waffen SOURCE: /i/object/pfeil.c FUNKTION: set_portal_name DEKLARATION: void set_portal_name(string name) BESCHREIBUNG: Initialisiert das Portal. Der Name muss ein in /static/adm/PORTALS registrierter Name sein. VERWEISE: GRUPPEN: Portal SOURCE: /i/object/portal.c FUNKTION: set_tied_to_ob DEKLARATION: void set_tied_to_ob(mixed woran) BESCHREIBUNG: Damit setzt man das Objekt oder Mapping eines V-Items, an welches das Seil gebunden sein soll. Diese Funktion ruft dabei automatisch die entsprechenden Controller notify_tied_rope auf. Gibt man 0 an, so wird das Seil geloest und die Controller notify_untied_rope werden aufgerufen. VERWEISE: query_tied_to_ob, notify_tied_rope, notify_untied_rope, notify_tied_rope_to, notify_untied_rope_from GRUPPEN: seil SOURCE: /i/object/rope.c FUNKTION: query_tied_to_ob DEKLARATION: mixed query_tied_to_ob() BESCHREIBUNG: Liefert Objekt oder mapping eines v_items, an welches das Seil gebunden ist. im mapping gibt es u.a. einen Eintrag "environment", der angibt, an welchem Objekt das v_item klebt, an das das Seil... Diese Funktion killt das v_item, wenn der o.g. Eintrag 0 ist, um eben der Tatsache Rechnung zu tragen, dass Dinge, an die ich Seile binde, auch verschwinden koennen. VERWEISE: set_tied_to_ob, notify_tied_rope, notify_untied_rope notify_tied_rope_to, notify_untied_rope_from GRUPPEN: seil SOURCE: /i/object/rope.c FUNKTION: query_seil DEKLARATION: int query_seil() BESCHREIBUNG: Seile koennen aneinander angebunden werden, um auf diese Art und Weise ein laengeres Seil zu erhalten. Mit dieser Funktion kann abgefragt werden, wie lange ein Seil ist. So koennen Schluchten oder aehnliches realisiert werden, um in diese runterzuklettern man ein besonders langes Seil benoetigt. Natuerlich kann diese Funktion auch dazu verwendet werden, herauszufinden, ob ein bestimmtes Objekt ein Seil ist... VERWEISE: set_seil GRUPPEN: seil SOURCE: /i/object/rope.c FUNKTION: set_seil DEKLARATION: void set_seil(int laenge) BESCHREIBUNG: Mit dieser Funktion kann die Laenge eines Seiles gesetzt werden, die Laenge muss dabei groesser als 0 sein. VERWEISE: query_seil GRUPPEN: seil SOURCE: /i/object/rope.c FUNKTION: concerned_tie_rope DEKLARATION: int concerned_tie_rope(object seil, mixed woran) BESCHREIBUNG: Wenn ein Seil 'seil' an das Objekt oder V-Item 'woran' gebunden werden soll, wird woran_ob->concerned("tie_rope", seil, woran) aufgerufen. Dabei ist 'woran_ob' entweder das Objekt 'woran' oder das Objekt, an dem das V-Item 'woran' klebt. concerned ruft dann in allen mit woran_ob->add_controller( "concerned_tie_rope",other) angemeldeten Objekten other die Funktion other->concerned_tie_rope(seil, woran) auf. Der von dieser Funktion zurueckgelieferte Wert wird als Prioritaet aufgefasst. Das Objekt 'other' mit der hoechsten Prioritaet darf das Anbinden vornehmen. Dazu wird dann in diesem Objekt die Funktion other->do_tie_rope(seil, woran) aufgerufen. (Diese Funktion sollte - sofern sie das Seil nicht zerstoert - nicht vergessen, im Seil die Funktion set_tied_to_ob(woran) aufzurufen.) Fuehlt sich kein Objekt zustaendig, dann uebernimmt das Seil selber mit seinem Standardverhalten das Anbinden. VERWEISE: add_controller, concerned, concerned_untie_rope, notify_tied_rope, notify_tied_rope_to, set_tied_to_ob GRUPPEN: seil SOURCE: /i/object/rope.c FUNKTION: concerned_untie_rope DEKLARATION: int concerned_untie_rope(object seil, mixed wovon) BESCHREIBUNG: Wenn ein Seil 'seil' vom Objekt oder V-Item 'wovon' geloest werden soll, wird wovon_ob->concerned("untie_rope", seil, wovon) aufgerufen. Dabei ist 'wovon_ob' entweder das Objekt 'wovon' oder das Objekt, an dem das V-Item 'wovon' klebt. concerned ruft dann in allen mit wovon_ob->add_controller("concerned_tie_rope",other) angemeldeten Objekten other die Funktion other->concerned_tie_rope(seil, wovon) auf. Der von dieser Funktion zurueckgelieferte Wert wird als Prioritaet aufgefasst. Das Objekt 'other' mit der hoechsten Prioritaet darf das Seil entfernen. Dazu wird dann in diesem Objekt die Funktion other->do_untie_rope(seil, wovon) aufgerufen. (Diese Funktion sollte - sofern sie das Seil nicht zerstoert - nicht vergessen, im Seil die Funktion set_tied_to_ob(0) aufzurufen.) Fuehlt sich kein Objekt zustaendig, dann uebernimmt das Seil selber mit seinem Standardverhalten das Loesen. VERWEISE: add_controller, concerned, concerned_untie_rope, notify_untied_rope, notify_untied_rope_from, set_tied_to_ob GRUPPEN: seil SOURCE: /i/object/rope.c FUNKTION: notify_tied_rope DEKLARATION: void notify_tied_rope(object seil, mixed woran) BESCHREIBUNG: Nachdem ein Seil 'seil' an das Objekt oder V-Item 'woran' gebunden wurde, wird seil->notify("tied_rope",seil,woran) aufgerufen. notify ruft dann in allen mit seil->add_controller("notify_tied_rope",other) angemeldeten Objekten other die Funktion other->notify_tied_rope(seil,woran) auf. Diese Funktionen haben dann die Moeglichkeit auf das Anbinden zu reagieren. VERWEISE: add_controller, notify, notify_tied_rope_to, notify_untied_rope, notify_untied_rope_from, concerned_tie_rope, concerned_untie_rope GRUPPEN: seil SOURCE: /i/object/rope.c FUNKTION: notify_tied_rope_to DEKLARATION: void notify_tied_rope_to(object seil, mixed woran) BESCHREIBUNG: Nachdem ein Seil 'seil' an das Objekt oder V-Item 'woran' gebunden wurde, wird woran_ob->notify("tied_rope_to",seil,woran) aufgerufen. Dabei ist 'woran_ob' entweder das Objekt 'woran' oder das Objekt, an dem das V-Item 'woran' klebt. notify ruft dann in allen mit seil->add_controller("notify_tied_rope_to",other) angemeldeten Objekten other die Funktion other->notify_tied_rope_to(seil,woran) auf. Diese Funktionen haben dann die Moeglichkeit auf das Anbinden zu reagieren. VERWEISE: add_controller, notify, notify_tied_rope, notify_untied_rope, notify_untied_rope_from, concerned_tie_rope, concerned_untie_rope GRUPPEN: seil SOURCE: /i/object/rope.c FUNKTION: notify_untied_rope DEKLARATION: void notify_untied_rope(object seil, mixed wovon) BESCHREIBUNG: Nachdem ein Seil 'seil' vom Objekt oder V-Item 'wovon' geloest wurde, wird seil->notify("untied_rope",seil,wovon) aufgerufen. notify ruft dann in allen mit seil->add_controller("notify_untied_rope",other) angemeldeten Objekten other die Funktion other->notify_untied_rope(seil,wovon) auf. Diese Funktionen haben dann die Moeglichkeit auf das Entfernen des Seils zu reagieren. VERWEISE: add_controller, notify, notify_untied_rope_from, notify_tied_rope, notify_tied_rope_to, concerned_tie_rope, concerned_untie_rope GRUPPEN: seil SOURCE: /i/object/rope.c FUNKTION: notify_untied_rope_from DEKLARATION: void notify_untied_rope_from(object seil, mixed wovon) BESCHREIBUNG: Nachdem ein Seil 'seil' vom Objekt oder V-Item 'wovon' geloest wurde, wird wovon_ob->notify("untied_rope_from",seil,wovon) aufgerufen. Dabei ist 'wovon_ob' entweder das Objekt 'wovon' oder das Objekt, an dem das V-Item 'wovon' klebt. notify ruft dann in allen mit seil->add_controller("notify_untied_rope_from",other) angemeldeten Objekten other die Funktion other->notify_untied_rope_from(seil,wovon) auf. Diese Funktionen haben dann die Moeglichkeit darauf zu reagieren. VERWEISE: add_controller, notify, notify_untied_rope_from, notify_tied_rope, notify_tied_rope_to, concerned_tie_rope, concerned_untie_rope GRUPPEN: seil SOURCE: /i/object/rope.c FUNKTION: forbidden_dig DEKLARATION: string forbidden_dig(object wer, object womit, object|string was) BESCHREIBUNG: Diese Funktion wird in allen am entsprecheden Raum per Controller angemeldeten Objekten aufgerufen und ueberprueft, ob ein Spieler dort graben darf. "wer" ist der grabende Spieler, "womit" ist die Schaufel, mit der gegraben wird. Wenn bei dem Aufruf "was" ein Objekt ist, dann will der Spieler das angegebene Objekt vergraben, ansonsten will der Spieler den im String angegebenen Gegenstand oder (falls was == 0) irgendetwas ausgraben. Will ein Controller dies verbieten, so muss er eine entsprechende Fehlermeldung als String zurueckliefern. VERWEISE: add_controller, forbidden, concerned_dig, notify_dig GRUPPEN: graben, grundlegendes SOURCE: /i/object/schaufel.c FUNKTION: concerned_dig DEKLARATION: int concerned_dig(object wer, object womit, object|string was) BESCHREIBUNG: Diese Funktion wird an im entsprechenden Raum per Controller angemeldeten Objekten aufgerufen und meldet zurueck, welches Objekt sich "am liebsten", also mit der hoechsten Prioritaet (der Wert, den die Funktion zurueck gibt), darum kuemmern moechte. Wenn sich kein Objekt angemeldet hat und Werte groesser 0 liefert, kuemmert sich die Schaufel selbst um das Graben. "wer" ist der grabende Spieler, "womit" ist die Schaufel, mit der gegraben wird. Wenn bei dem Aufruf "was" ein Objekt ist, dann will der Spieler das angegebene Objekt vergraben, ansonsten will der Spieler den im String angegebenen Gegenstand oder (falls was == 0) irgendetwas ausgraben. Im Objekt, dass den Zuschlag erhaelt, wird die Funktion do_dig aufgerufen. Ausserdem muss sich dieses Objekt selbst um die Benachrichtigung mittels notify_dig an alle beteiligten Objekte kuemmern. Die Prioritaeten sollten zwischen 0 und 100 liegen, wobei der untere Bereich (1-20) fuer allgemeine Graben-Funktionen, der mittlere fuer objekt- oder raumspezifische Funktionen und der obere (80-100) fuer objekt- *und* raumspezifische Graben-Funktionen genutzt werden sollte. VERWEISE: add_controller, concerned, notify_dig, forbidden_dig, do_dig GRUPPEN: graben, grundlegendes SOURCE: /i/object/schaufel.c FUNKTION: do_dig DEKLARATION: int do_dig(object wer, object womit, object|string was) BESCHREIBUNG: Diese Funktion wird von der Schaufel in dem Objekt aufgerufen, welches per concerned_dig am Raum mit der hoechsten Prioritaet angemeldet war, und sich somit fuer das Graben zustaendig erklaert hat. In dieser Funktion handelt das zustaendige Objekt selbst das Graben ab und returned wie eine Action im Erfolgsfall 1 und im Fehlerfall sollte per notify_fail ein Grund angegeben werden und 0 zurueckgegeben werden, was aber einen triftigen Grund haben sollte, weil sonst haette man sich besser per concerned_dig gar nicht gemeldet. "wer" ist der grabende Spieler, "womit" ist die Schaufel, mit der gegraben wird. Wenn bei dem Aufruf "was" ein Objekt ist, dann will der Spieler das angegebene Objekt vergraben, ansonsten will der Spieler den im String angegebenen Gegenstand oder (falls was == 0) irgendetwas ausgraben. Ausserdem muss sich das zustaendige Objekt selbst um die Benachrichtigung mittels notify_dig an alle beteiligten Objekte kuemmern. zum Beispiel: int do_dig(object wer, object womit, object was) { // hier sich ums Graben kuemmern, Meldungen ausgeben ({ this_object(), wer, womit, was, })->notify("dig", wer, womit, was); return 1; } VERWEISE: add_controller, concerned, notify_dig, concerned_dig GRUPPEN: graben, grundlegendes SOURCE: /i/object/schaufel.c FUNKTION: notify_dig DEKLARATION: void notify_dig(object wer, object womit, object|string was) BESCHREIBUNG: Wenn in einem Raum gegraben wurde, wird in allen Objekten, die an einem der am Grabevorgang beteiligt waren, per Controller angemeldet sind, notify_dig aufgerufen. "wer" ist der grabende Spieler, "womit" ist die Schaufel, mit der gegraben wird. Wenn bei dem Aufruf "was" ein Objekt ist, dann will der Spieler das angegebene Objekt vergraben, ansonsten will der Spieler den im String angegebenen Gegenstand oder (falls was == 0) irgendetwas ausgraben. VERWEISE: add_controller, notify, notify_dig, concerned_dig, forbidden_dig GRUPPEN: graben, grundlegendes SOURCE: /i/object/schaufel.c FUNKTION: query_skelett_no_remove DEKLARATION: int query_skelett_no_remove() BESCHREIBUNG: Ungleich 0 verhindert es die interne Pruefung. VERWEISE: set_skelett_no_remove GRUPPEN: Monster, Player SOURCE: /i/object/skelett.c FUNKTION: set_skelett_no_remove DEKLARATION: void set_skelett_no_remove(int i) BESCHREIBUNG: Ungleich 0 verhindert es die interne Pruefung, damit geclonete Skelette nicht einfach verschwinden. (Im Gegensatz zu verstorbene Spieler.) Defaultmaessig (clonen) ist das intern 1, bei Spielern (add_skelett) 0. VERWEISE: query_skelett_no_remove GRUPPEN: Monster, Player SOURCE: /i/object/skelett.c FUNKTION: is_skelett DEKLARATION: int is_skelett() BESCHREIBUNG: Liefert 1 wenn das objekt ein Skelett ist. VERWEISE: GRUPPEN: Monster, Player SOURCE: /i/object/skelett.c FUNKTION: set_door_open_message DEKLARATION: void set_door_open_message(mixed str) BESCHREIBUNG: Setzt bei Tueren die Meldung, die im long auftaucht, wenn die Tuer offen ist. Pseudoclosures ("$Der()") sind erlaubt. Automatisches Wrapping. Default: set_door_open_message( "$Er() ist offen."); VERWEISE: set_door_close_message, set_door_locked_message, set_door_unlocked_message, set_door_opens_message, set_door_closes_message, set_door_lock_messages, set_door_unlock_messages, set_knock_messages, set_key_does_not_fit_message GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_door_close_message DEKLARATION: void set_door_close_message(mixed str) BESCHREIBUNG: Setzt bei Tueren die Meldung, die im long auftaucht, wenn die Tuer geschlossen ist. Pseudoclosures ("$Der()") sind erlaubt. Automatisches Wrapping. Default: set_door_close_message( "$Er() ist zu."); VERWEISE: set_door_open_message, set_door_locked_message, set_door_unlocked_message, set_door_opens_message, set_door_closes_message, set_door_lock_messages, set_door_unlock_messages, set_knock_messages, set_key_does_not_fit_message GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_door_locked_message DEKLARATION: void set_door_locked_message(mixed str) BESCHREIBUNG: Setzt bei Tueren die Meldung, die im long auftaucht, wenn die Tuer abgeschlossen ist. Pseudoclosures ("$Der()") sind erlaubt. Automatisches Wrapping. Default: set_door_locked_message( "$Er() ist verschlossen."); VERWEISE: set_door_open_message, set_door_close_message, set_door_unlocked_message, set_door_opens_message, set_door_closes_message, set_door_lock_messages, set_door_unlock_messages, set_knock_messages, set_key_does_not_fit_message GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_door_unlocked_message DEKLARATION: void set_door_unlocked_message(mixed str) BESCHREIBUNG: Setzt bei Tueren die Meldung, die im long auftaucht, wenn die Tuer nicht abgeschlossen ist. Pseudoclosures ("$Der()") sind erlaubt. Automatisches Wrapping. Default: set_door_unlocked_message( "$Er() ist aufgeschlossen."); VERWEISE: set_door_open_message, set_door_close_message, set_door_locked_message, set_door_opens_message, set_door_closes_message, set_door_lock_messages, set_door_unlock_messages, set_knock_messages, set_key_does_not_fit_message GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_door_opens_message DEKLARATION: void set_door_opens_message(mixed for_me, mixed for_you) BESCHREIBUNG: Setzt bei Tueren die Meldungen, die beim Oeffnen der Tuer ausgegeben werden: for_me ist dabei die Meldung, die an den handelnden Spieler ausgegeben wird, for_you wird an die Zuschauer ausgegeben. Pseudoclosures ("$Der()") sind erlaubt. Automatisches Wrapping. Default: set_door_opens_message( "Du oeffnest $den().", "$Der(OBJ_TP) oeffnet $den()."); VERWEISE: set_door_open_message, set_door_close_message, set_door_locked_message, set_door_unlocked_message, set_door_closes_message, set_door_lock_messages, set_door_unlock_messages, set_knock_messages, set_key_does_not_fit_message GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_door_closes_message DEKLARATION: void set_door_closes_message(mixed for_me, mixed for_you) BESCHREIBUNG: Setzt bei Tueren die Meldungen, die beim Schliessen der Tuer ausgegeben werden: for_me ist dabei die Meldung, die an den handelnden Spieler ausgegeben wird, for_you wird an die Zuschauer ausgegeben. Pseudoclosures ("$Der()") sind erlaubt. Automatisches Wrapping. Default: set_door_closes_message( "Du schliesst $den().", "$Der(OBJ_TP) schliesst $den()."); VERWEISE: set_door_open_message, set_door_close_message, set_door_locked_message, set_door_unlocked_message, set_door_opens_message, set_door_lock_messages, set_door_unlock_messages, set_knock_messages, set_key_does_not_fit_message GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_door_lock_messages DEKLARATION: void set_door_lock_messages(mixed for_me, mixed for_you) BESCHREIBUNG: Setzt bei Tueren die Meldungen, die beim Abschliessen der Tuer ausgegeben werden: for_me ist dabei die Meldung, die an den handelnden Spieler ausgegeben wird, for_you wird an die Zuschauer ausgegeben. Pseudoclosures ("$Der()") sind erlaubt. Automatisches Wrapping. Default: set_door_lock_messages( "Du schliesst $den() mit $deinem('key) ab.", "$Der(OBJ_TP) schliesst $den() ab."); VERWEISE: set_door_open_message, set_door_close_message, set_door_locked_message, set_door_unlocked_message, set_door_opens_message, set_door_closes_message, set_door_unlock_messages, set_knock_messages, set_key_does_not_fit_message GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_door_unlock_messages DEKLARATION: void set_door_unlock_messages(mixed for_me, mixed for_you) BESCHREIBUNG: Setzt bei Tueren die Meldungen, die beim Aufschliessen der Tuer ausgegeben werden: for_me ist dabei die Meldung, die an den handelnden Spieler ausgegeben wird, for_you wird an die Zuschauer ausgegeben. Pseudoclosures ("$Der()") sind erlaubt. Automatisches Wrapping. Default: set_door_unlock_messages( "Du schliesst $den() mit $deinem('key) auf.", "$Der(OBJ_TP) schliesst $den() auf."); VERWEISE: set_door_open_message, set_door_close_message, set_door_locked_message, set_door_unlocked_message, set_door_opens_message, set_door_closes_message, set_door_lock_messages, set_knock_messages, set_key_does_not_fit_message GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_knock_messages DEKLARATION: void set_knock_messages(mixed for_me, mixed for_you, mixed knocking) BESCHREIBUNG: Setzt bei Tueren die Meldungen, die beim Klopfen an der Tuer ausgegeben werden: for_me ist dabei die Meldung, die an den handelnden Spieler ausgegeben wird, for_you wird an die Zuschauer ausgegeben, knocking ist die Meldung, wenn an der anderen Seite geklopft wurde. Pseudoclosures ("$Der()") sind erlaubt. Automatisches Wrapping. Default: set_knock_messages( "Du klopfst an $der().", "$Der(OBJ_TP) klopft an $der().", "Jemand klopft an $der().\n"); VERWEISE: set_door_open_message, set_door_close_message, set_door_locked_message, set_door_unlocked_message, set_door_opens_message, set_door_closes_message, set_door_lock_messages, set_door_unlock_messages, set_key_does_not_fit_message GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_key_does_not_fit_message DEKLARATION: void set_key_does_not_fit_message(mixed for_me, mixed for_you_open, mixed for_you_closed) BESCHREIBUNG: Setzt bei Tueren die Meldungen, wenn jemand versucht hat, einen nicht passenden Schluesel zu verwenden: for_me ist dabei die Meldung, die an den handelnden Spieler ausgegeben wird, for_you_open ist die Meldung, die an die anderen ausgegeben wird, wenn versucht wurde, aufzuschliessen, for_you_closed ist die Meldung, die an die anderen ausgegeben wird, wenn versucht wurde, abzuschliessen. Pseudoclosures ("$Der()") sind erlaubt. Automatisches Wrapping. Default: set_key_does_not_fit_message( "Du hast keinen passenden Schluessel fuer das Schloss $des().", "$Der(OBJ_TP) versucht $den() aufzuschliessen,"+ " hat aber nicht den richtigen Schluessel.", "$Der(OBJ_TP) versucht $den() zuzuschliessen,"+ " hat aber nicht den richtigen Schluessel."); VERWEISE: set_door_open_message, set_door_close_message, set_door_locked_message, set_door_unlocked_message, set_door_opens_message, set_door_closes_message, set_door_lock_messages, set_door_unlock_messages, set_knock_messages GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_open_cmd DEKLARATION: void set_open_cmd(string command) BESCHREIBUNG: Setzt bei Tueren das Kommando, mit dem man sie oeffnen kann. Default: set_open_cmd("oeffne"); VERWEISE: set_close_cmd, set_unlock_cmd, set_lock_cmd, set_knock_cmd, set_open_words, set_close_words, set_unlock_words, set_lock_words, set_knock_words GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_close_cmd DEKLARATION: void set_close_cmd(string command) BESCHREIBUNG: Setzt bei Tueren das Kommando, mit dem man sie schliessen kann. Default: set_close_cmd("schliess"); VERWEISE: set_open_cmd, set_unlock_cmd, set_lock_cmd, set_knock_cmd, set_open_words, set_close_words, set_unlock_words, set_lock_words, set_knock_words GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_unlock_cmd DEKLARATION: void set_unlock_cmd(string command) BESCHREIBUNG: Setzt bei Tueren das Kommando, mit dem man sie aufschliessen kann. Default: set_unlock_cmd("schliess"); VERWEISE: set_open_cmd, set_close_cmd, set_lock_cmd, set_knock_cmd, set_open_words, set_close_words, set_unlock_words, set_lock_words, set_knock_words GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_lock_cmd DEKLARATION: void set_lock_cmd(string command) BESCHREIBUNG: Setzt bei Tueren das Kommando, mit dem man sie abschliessen kann. Default: set_lock_cmd("schliess"); VERWEISE: set_open_cmd, set_close_cmd, set_unlock_cmd, set_knock_cmd, set_open_words, set_close_words, set_unlock_words, set_lock_words, set_knock_words GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_knock_cmd DEKLARATION: void set_knock_cmd(string command) BESCHREIBUNG: Setzt bei Tueren das Kommando, mit dem man daran klopfen kann. Default: set_knock_cmd("klopf"); VERWEISE: set_open_cmd, set_close_cmd, set_unlock_cmd, set_lock_cmd, set_open_words, set_close_words, set_unlock_words, set_lock_words, set_knock_words GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_open_words DEKLARATION: void set_open_words(string *words) BESCHREIBUNG: Setzt bei Tueren die Adverben beim Oeffne-Kommando. Mit der Angabe von 0 werden saemtliche Adverben erlaubt. Default: set_open_words( ({""}) ); VERWEISE: set_open_cmd, set_close_cmd, set_unlock_cmd, set_knock_cmd, set_lock_cmd, set_close_words, set_unlock_words, set_lock_words, set_knock_words GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_close_words DEKLARATION: void set_close_words(string *words) BESCHREIBUNG: Setzt bei Tueren die Adverben beim Schliesse-Kommando. Mit der Angabe von 0 werden saemtliche Adverben erlaubt. Default: set_uclose_words( ({""}) ); VERWEISE: set_open_cmd, set_close_cmd, set_unlock_cmd, set_knock_cmd, set_lock_cmd, set_open_words, set_unlock_words, set_lock_words, set_knock_words GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_unlock_words DEKLARATION: void set_unlock_words(string *words) BESCHREIBUNG: Setzt bei Tueren die Adverben beim Aufschliess-Kommando. Mit der Angabe von 0 werden saemtliche Adverben erlaubt. Default: set_unlock_words( ({"auf"}) ); VERWEISE: set_open_cmd, set_close_cmd, set_unlock_cmd, set_knock_cmd, set_lock_cmd, set_open_words, set_close_words, set_lock_words, set_knock_words GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_lock_words DEKLARATION: void set_lock_words(string *words) BESCHREIBUNG: Setzt bei Tueren die Adverben beim Abschliess-Kommando. Mit der Angabe von 0 werden saemtliche Adverben erlaubt. Default: set_lock_words( ({"zu", "ab"}) ); VERWEISE: set_open_cmd, set_close_cmd, set_unlock_cmd, set_knock_cmd, set_lock_cmd, set_open_words, set_close_words, set_unlock_words, set_knock_words GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_knock_words DEKLARATION: void set_knock_words(string *words) BESCHREIBUNG: Setzt bei Tueren die Adverben beim Klopf-Kommando. Mit der Angabe von 0 werden saemtliche Adverben erlaubt. Default: set_knock_words( ({"an","am"}) ); VERWEISE: set_open_cmd, set_close_cmd, set_unlock_cmd, set_knock_cmd, set_lock_cmd, set_open_words, set_close_words, set_unlock_words, set_lock_words GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_door_height DEKLARATION: void set_door_height(int koerpergroesse) BESCHREIBUNG: Setzt die Groesse einer Tuer in Koerpergroessenmaszen. Spieler/Objekte, die groesser als diese Groesse sind, koennen durch diese Tuer nicht gehen. -1 bedeutet, dass die Tuer "keine Groesse" hat, damit jedes Lebewesen durch die Tuer passt. Tueren sind standardmaessig (beim Clonen) auf Groesse 6 (das entspricht 1,7 m - 2,2 m) gestellt. VERWEISE: query_koerpergroesse, set_koerpergroesse GRUPPEN: tuer, monster, body SOURCE: /i/object/tuer.c FUNKTION: set_door_is_too_small_msg DEKLARATION: void set_door_is_too_small_msg(mixed me,mixed other) BESCHREIBUNG: Ist die Tuer fuer ein Lebewesen zu klein, so wird dem Lebewesen die Meldung ausgegeben, den Umstehenden die Meldung . Beispiel: set_door_is_too_small_msg( "Du bist viel zu gross. Vielleicht kannst Du durch $den(OBJ_TO) " "ja durchkriechen?", "$Der(OBJ_TP) ist anscheinend fuer $den(OBJ_TO) viel zu gross. " "Vielleicht geht es aber mit Kriechen?") VERWEISE: GRUPPEN: tuer,monster,body,move SOURCE: /i/object/tuer.c FUNKTION: set_door_is_closed_msgs DEKLARATION: varargs void set_door_is_closed_msgs(string msg [, string msg_other]) BESCHREIBUNG: Falls eine Tuer nicht durchschritten werden kann, weil sie geschlossen ist, wird der Text an das aktuelle Lebewesen (this_player()) ausgegeben. Wird zusaetzlich gesetzt, so wird dieses an die Umstehenden gemeldet. Pseudoclosures sind in beiden Strings erlaubt. VERWEISE: pass_command GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_no_exit_msg DEKLARATION: void set_no_exit_msg(int keine_meldung) BESCHREIBUNG: Soll die Tuer keine eigene Ausgangsmeldung setzen, so kann man das hiermit setzen. VERWEISE: set_exit_msg, /i/room.c GRUPPEN: tuer, raum SOURCE: /i/object/tuer.c FUNKTION: set_door_exit DEKLARATION: void set_door_exit(string filename) BESCHREIBUNG: Setzt bei Tueren den Raum, in den es rausgeht. Der Ausgang darf nicht in der normalen Liste der Ausgaenge im Raum auftauchen, sonst macht die Tuer den Ausgang gar nicht zu! Wenn der Pfad ohne "/" beginnt, so wird der relative Pfad zu this_object() genommen, .. und . in filename sind erlaubt! VERWEISE: query_door_exit, set_pass_cmd, set_door_exit_category, init_door GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_door_exit_category DEKLARATION: void set_door_exit_category(string category) BESCHREIBUNG: Damit kann man die Kategorie des Raumausgangs der Tuer setzen. Dieser String wird bei der Raumbeschreibung den Ausgaengen vorangestellt. VERWEISE: set_pass_cmd, query_door_exit_category GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_pass_cmd DEKLARATION: void set_pass_cmd(string direction) BESCHREIBUNG: Setzt bei Tueren den Befehl, mit dem man die offene Tuer durschreiten kann. Im allgemeinen sollte das eine normale Himmelsrichtung sein. VERWEISE: set_door_exit, query_pass_cmd, set_door_exit_category, init_door GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_keys DEKLARATION: void set_keys(string*|string keys) BESCHREIBUNG: Damit kann man bei Tueren die Id's der passenden Schluessel angeben. Die Tuer laesst sich nur von solchen Schluesseln oeffnen, bei denen eine Id mit einer aus der Liste *keys uebereinstimmt. set_keys(0) fuehrt dazu, dass die Tuere ohne Schluessel auf- und zugeschlossen werden kann. Man muss dann noch die Meldungen fuer das Auf- und Zuschliessen aendern, da diese sonst ob dem fehlenden Schluessel Fehler erzeugen. Mit set_keys("schluessel") erreicht man, dass man die Tuer mit jedem Schluessel auf- und zuschliessen kann. VERWEISE: query_keys, set_door_lock_messages, set_door_unlock_messages GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_door_is_open DEKLARATION: void set_door_is_open(int open) BESCHREIBUNG: Damit kann man eine Tuer auf- und zumachen: bei einem Wert open!=0 ist die Tuer offen, bei open==0 ist sie zu. ACHTUNG: Diese Funktion aendert nicht den Zustand der Partnertuer und ruft auch keine Controller auf. Sie ist daher nur zur Initialisierung gedacht. Spaeter (nach dem 1. move) sollte man die Funktionen open_door bzw. close_door nutzen. VERWEISE: set_door_is_locked, open_door, close_door GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_door_is_locked DEKLARATION: void set_door_is_locked(int locked) BESCHREIBUNG: Damit kann man eine Tuer auf- und zuschliessen: bei einem Wert locked!=0 ist die Tuer abgeschlossen, bei locked==0 ist sie nicht abgeschlossen. ACHTUNG: Diese Funktion aendert nicht den Zustand der Partnertuer und ruft auch keine Controller auf. Sie ist daher nur zur Initialisierung gedacht. Spaeter (nach dem 1. move) sollte man die Funktionen lock_door bzw. unlock_door nutzen. VERWEISE: set_door_is_open, lock_door, unlock_door GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_crack DEKLARATION: void set_crack(int chance) BESCHREIBUNG: Setzt bei Tueren die Wahrscheinlichkeit, mit der das Schloss geknackt werden kann. Je hoeher der Wert von Chance, desto leichter kann man das Schloss Knacken. Es sind Werte zwischenn 0 und 100 zulaessig, der Default ist 50. VERWEISE: query_crack GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_no_lock DEKLARATION: void set_no_lock(int no_lock) BESCHREIBUNG: Hiermit setzt man, ob die Tuer kein Schloss hat. Damit ist es unmoeglich, diese Tuer zu knacken oder aufzuschliessen. VERWEISE: set_no_lock_messages, query_no_lock, lock_door, unlock_door GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: set_no_lock_messages DEKLARATION: void set_no_lock_messages(mixed for_crack, mixed for_unlock, mixed for_lock) BESCHREIBUNG: Damit setzt man die Meldung bei Tueren, die jemand haelt, welcher die Tuer knacken, aufschliessen bzw. abschliessen will und die Tuer aber kein Schloss hat. VERWEISE: set_no_lock GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: query_no_lock DEKLARATION: int query_no_lock() BESCHREIBUNG: Hiermit kann man abfragen, ob die Tuer kein Schloss hat. VERWEISE: set_no_lock, lock_door, unlock_door GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: query_door_height DEKLARATION: int query_door_height(void) BESCHREIBUNG: Liefert die "Hoehe" der Tuer zurueck. Lebewesen, die groesser als dieser, dem Koerpergroessensystem angepasste Wert sind, koennen nicht durch die Tuer gehen. Ein Wert von -1 bedeutet, dass jedes Lebewesen durch die Tuer passt (Standardeinstellung). VERWEISE: query_koerpergroesse,set_door_height,set_koerpergroesse GRUPPEN: tuer,monster,body SOURCE: /i/object/tuer.c FUNKTION: query_door_messages DEKLARATION: closure *query_door_messages() BESCHREIBUNG: Liefert alle Closure-Eintraege der Tuer als Array zurueck. VERWEISE: GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: query_door_exit DEKLARATION: string query_door_exit() BESCHREIBUNG: Liefert den Filenamen des Raumes zurueck, der von einer Tuer verschlossen wird. VERWEISE: set_door_exit, set_pass_cmd, query_pass_cmd GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: query_pass_cmd DEKLARATION: string query_pass_cmd() BESCHREIBUNG: Liefert den Befehl zurueck, mit dem man eine Tuer durschreiten kann. Normaler- weise ist das eine Himmelsrichtung. VERWEISE: set_pass_cmd, set_door_exit, query_door_exit GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: query_crack DEKLARATION: int query_crack() BESCHREIBUNG: Liefert bei einer Tuer die Wahrscheinlichkeit zurueck, mit der das Schloss geknackt werden kann. VERWEISE: set_crack GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: query_keys DEKLARATION: string *query_keys() BESCHREIBUNG: Liefert bei einer Tuer die Liste der Schluessel-Id's zurueck, mit der die Tuer aufgeschlossen werden kann. VERWEISE: set_keys GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: query_door_is_open DEKLARATION: int query_door_is_open() BESCHREIBUNG: Liefert zurueck, ob eine Tuer offen ist: wenn die Tuer zu ist, wird 0 returnt, wenn sie offen ist etwas anderes. VERWEISE: set_door_is_open GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: query_door_is_locked DEKLARATION: int query_door_is_locked() BESCHREIBUNG: Liefert zurueck, ob eine Tuer abgeschlossen ist. Wenn ja, wird ein Wert != 0 zurueckgeliefert. VERWEISE: set_door_is_locked GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: door_kicked DEKLARATION: int door_kicked(object wer, string wie, string adverb) BESCHREIBUNG: Diese Funktion wird sofern vorhanden in der Tuer aufgerufen, wenn ein Lebewesen wer auf die Tuer mit Gewalt (derzeit mit den Seele-Befehlen trete und stosse) einwirkt. wie ist dabei der Seele-Befehl (das Argument 'what' aus forbidden_seele) und adverb das dazugehoerige Adverb. Liefert diese Funktion 0, so handelt die Tuer ganz normal und gibt selber eine entsprechende Meldung aus. Bei 1 wird keine Meldung ausgegeben, der Seele-Befehl jedoch per forbidden_seele unterbunden. Diese Funktion bietet damit die Moeglichkeit, auf diese Gewalteinwirkung gesondert zu reagieren. VERWEISE: forbidden_seele GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: other_door DEKLARATION: object other_door(void) BESCHREIBUNG: Liefert die korrespondierende Tuer(haelfte) auf der anderen Seite der Tuer. Dient u.a. zur Synchronisierung beider Tuer(haelft)en. VERWEISE: present_other_door GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: present_other_door DEKLARATION: object present_other_door(void) BESCHREIBUNG: Liefert, aehnlich wie other_door() die korrespondierende Tuer(haelfte). Liefert allerdings 0, wenn der andere Raum nicht geladen ist. Auch Synchro- nisationen werden nicht vorgenommen. VERWEISE: other_door, GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: init_door DEKLARATION: void init_door(string door_exit, string pass_cmd, [int open]) BESCHREIBUNG: Damit eine Tuer weiss, wohin sie fuehren soll, gibt man ihr hiermit den Dateinamen des angrenzenden Raums (door_exit) und die Richtung (pass_cmd) an. Das ist also ganz genauso wie add_exit() zu verwenden :) Gleichzeitig laesst sich noch der Anfangszustand (open) der Tuer angeben: offen (1), zu (0, default) oder abgeschlossen (-1). VERWEISE: set_door_exit, set_pass_cmd GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: add_directions DEKLARATION: void add_directions(string dir, string back_dir) BESCHREIBUNG: Setzt die Richtungen, in die eine Tuer weist. Standardmaessig sind alle Himmelsrichtungen vorhanden, aber mit dieser Funktion kann man weitere Richtungen einbauen (z.B. 'rauf' <-> 'runter') GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: open_door DEKLARATION: varargs void open_door([int second [, message]]) BESCHREIBUNG: Oeffnet die Tuer (mit Meldungen an Umgebung - nicht aber an this_player() (falls nicht silent gesetzt ist), sowie mit entsprechenden Notify's u.a.). Um Startzustaende von Tueren zu setzen, benutze man die set_door_* Funktionen. ist optional und wird ueblicherweise nur von der Mudlib selber mit anderem Wert als 0 belegt. Wenn second==1, heisst das, dass die Tuer von der korrespondierenden Tuer aus geoeffnet wird (die aktuelle Tuer ist also gerade die Rueckseite der eigentlich geschlossenen Tuer(haelfte)). Auch ist optional, ist es ein integer ungleich 0, wird die Tuere meldungslos geoeffnet. Achtung, ist silent angegeben, so wird auch im zugehoerigen Nachbarraum keine Meldung erzeugt! Ist message eine pseudoclosure als String, so wird eine Meldung in beiden Raeumen erzeugt. Ausnahme: der String enthaelt OBJ_TP und es gibt keinen this_player(). VERWEISE: open_command GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: close_door DEKLARATION: varargs void close_door([int second [, message]]) BESCHREIBUNG: Schliesst die Tuer (mit Meldungen an Umgebung - nicht aber an this_player(), mit entsprechenden Notify's u.a.). Um Startzustaende von Tueren zu setzen, benutze man die set_door_* Funktionen. ist optional und wird ueblicherweise nur von der Mudlib selber mit anderem Wert als 0 belegt. Wenn second==1, heisst das, dass die Tuer von der korrespondierenden Tuer aus geschlossen wird (die aktuelle Tuer ist also gerade die Rueckseite der eigentlich geoeffneten Tuer(haelfte)). Auch ist optional, ist message ein integer ungleich 0, so wird die Tuere ohne Meldungen geschlossen; Achtung, auch im Nachbarraum wird dann keine Meldung erzeugt! Ist message eine pseudoclosure als String, so wird eine Meldung in beiden Raeumen erzeugt. Ausnahme: der String enthaelt OBJ_TP und es gibt keinen this_player(). VERWEISE: open_command GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: unlock_door DEKLARATION: varargs void unlock_door([int second [, object key]) BESCHREIBUNG: Schliesst die Tuer (mit entsprechenden Notify's u.a.) auf. Um Startzustaende von Tueren zu setzen, benutze man die set_door_* Funktionen. ist optional und wird ueblicherweise nur von der Mudlib selber mit anderem Wert als 0 belegt. Wenn second==1, heisst das, dass die Tuer von der korrespondierenden Tuer aus aufgeschlossen wird (die aktuelle Tuer ist also gerade die Rueckseite der eigentlich verschlossenen Tuer(haelfte)). gibt an, welcher Schluessel zum Aufschliessen benutzt wurde. VERWEISE: open_command, lock_door GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: lock_door DEKLARATION: varargs void lock_door([int second [, object key]) BESCHREIBUNG: Schliesst die Tuer ab (mit entsprechenden Notify's u.a.). Um Startzustaende von Tueren zu setzen, benutze man die set_door_* Funktionen. ist optional und wird ueblicherweise nur von der Mudlib selber mit anderem Wert als 0 belegt. Wenn second==1, heisst das, dass die Tuer von der korrespondierenden Tuer aus abgeschlossen wird (die aktuelle Tuer ist also gerade die Rueckseite der eigentlich aufgeschlossenen Tuer(haelfte)). gibt an, welcher Schluessel zum Abschliessen benutzt wurde. VERWEISE: open_command, unlock_door GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: crack_door DEKLARATION: varargs void crack_door(object who [, int second [, mixed dietrich]]) BESCHREIBUNG: Bricht eine Tuer mit entsprechenden Notify's auf. ist optional und wird ueblicherweise nur von der Mudlib selber mit anderem Wert als 0 belegt. Wenn second==1, so bedeutet das, dass die Tuer in Wirklichkeit von der anderen Seite aus aufgebrochen wird. Falls Dietrich angegeben wird, kann dieser in Meldungen genutzt werden. VERWEISE: crack GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: forbidden_crack_door DEKLARATION: int forbidden_crack_door(object wer,object tuer,object raum,mixed dietrich,int second) BESCHREIBUNG: Versucht das Lebewesen die Tuer (mit dem Objekt/Mapping ) aufzubrechen, so checkt die Tuer, nachdem getestet wurde, ob sie verschlossen ist, ob die Tuer aufbrechen darf. Genutzt wird dazu forbidden("crack_door",wer,tuer,raum,dietrich,second) in folgender Reihenfolge: Zunaechst wird im Lebewesen geguckt (wer->forbidden(...)) Dann wird der eventuell vorhandene Dietrich gefragt (dietrich->forbidden(..)) Dann fragt die Tuer seine eigenen Controller (tuer->forbidden(...)) Danach fragt die Tuer den umgebenden Raum (raum->forbidden(...)) Es laesst sich also das Knacken - einer einzelnen Tuer durch tuer->add_controller("forbidden_crack_door") - durch ein einzelnes Lebewesen durch wer->add_controller("forbidden_crack_door") - mit einem bestimmten Brecheisen (dietrich) durch dietrich->add_controller("forbidden_crack_door") - in einem Raum bzw. von einem Raum aus durch raum->add_controller("forbidden_crack_door") beobachten bzw. verhindern. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. VERWEISE: close_door,open_command,close_command,notify,forbidden,crack GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: notify_crack_door DEKLARATION: void notify_crack_door(object wer,object tuer,object raum, mixed dietrich, int second) BESCHREIBUNG: Wenn das Lebewesen die Tuer aufgebrochen hat, meldet die Tuer dass sie aufgebrochen wurde mittels notify("crack_door",wer,tuer,raum,dietrich,second). Das geschieht in folgender Reihenfolge: Zunaechst benachrichtigt die Tuer den Spieler wer->notify("crack_door",...) Danach sich selbst (tuer->notify("crack_door",...)). Danach einen eventuell vorhandenen Dietrich, Danach den sie umgebenden Raum (raum->notify("crack_door",...)). Danach die Controller der korrespondierenden Tuer, danach die Controller des korrespondierenden Raums auf der anderen Seite. Es laesst sich also das Knacken - einer einzelnen Tuer durch tuer->add_controller("notify_crack_door") - welches von einem bestimmten Lebewesen ausgefuehrt wird durch wer->add_controller("notify_crack_door") - von Tueren in einem Raum durch raum->add_controller("notify_crack_door") - mit einem bestimmten Dietrich durch dietrich->add_controller("notify_crack_door") beobachten bzw. verhindern. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. VERWEISE: close_door,open_command,close_command,notify,forbidden,crack GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: crack DEKLARATION: varargs int crack(object who [, mixed dietrich]) BESCHREIBUNG: Soll eine Tuer aufgebrochen werden, so wird diese Funktion in der Tuer aufgerufen. Mit dem optionalen Parameter kann man den beobachtenden Controllern sagen, womit die Tuer aufgebrochen wird. VERWEISE: crack_door GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: forbidden_open_door DEKLARATION: int forbidden_open_door(object wer,object tuer,object raum,int second) BESCHREIBUNG: Versucht das Lebewesen die Tuer zu oeffnen, so checkt die Tuer, nachdem getestet wurde, ob sie geschlossen, verschlossen oder es zu dunkel ist, ob die Tuer oeffnen darf. Dazu ruft sie forbidden("open_door",tuer, wer,second) und zwar in folgender Reihenfolge: Zuerst wird der Spieler gefragt (wer->forbidden("open_door",...)) Danach schaut die Tuer bei ihren eigenen Controllern nach (tuer->...) Danach sucht sie im Raum (environment()->forbidden...). Danach fragt sie die korrespondierende Tuer auf der anderen Seite, danach den Raum auf der anderen Seite. Returnt eines der in einem dieser Objekte fuer forbidden_open_door angemeldeten Controller eine 1, so wird die Tuer nicht geoeffnet. Es laesst sich also das Oeffnen - einer bestimmten Tuer mittels tuer->add_controller("forbidden_open_door") - von Tueren durch ein bestimmtes Lebewesen mittels wer->add_controller("forbidden_open_door") - von Tueren in einem Raum mittels raum->add_controller("forbidden_open_door") beobachten bzw. verhindern. kann 1 oder 0 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. VERWEISE: close_door,open_command,close_command,notify,forbidden GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: notify_open_door DEKLARATION: void notify_open_door(object wer,object tuer,object raum,int second) BESCHREIBUNG: Wenn das Lebewesen die Tuer geoeffnet hat, meldet die Tuer dass sie geoeffnet wurde. Dabei meldet die Tuer in folgender Reihenfolge: Zuerst allen Controllern, die sich bei angemeldet haben. Danach allen bei sich selbst angemeldeten. Danach bei allen im Raum Danach bei allen in der korrespondierenden Tuer. Danach im Raum der korrespondierenden Tuer. Es laesst sich also das Oeffnen - einer einzelnen Tuer mittels tuer->add_controller("notify_open_door") - von Tueren durch ein bestimmtes Lebewesen mittels wer->add_controller("notify_open_door") - von Tueren in einem Raum mittels raum->add_controller("notify_open_door") beobachten. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. VERWEISE: close_door,open_command,close_command,notify,forbidden,crack GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: forbidden_close_door DEKLARATION: int forbidden_close_door(object wer,object tuer,object raum,int second) BESCHREIBUNG: Versucht das Lebewesen die Tuer zu schliessen, so checkt die Tuer, nachdem getestet wurde, ob sie geoeffnet, geschlossen, verschlossen oder es zu dunkel ist, ob die Tuer schliessen darf. Dazu ruft sie forbidden("close_door",wer,tuer,raum,second) auf und zwar mit folgender Reihenfolge: Zuerst werden die Controller im Lebewesen ueberprueft. Dann ueberprueft die Tuer die eigenen Controller. Dann ueberprueft die Tuer die Controller des umgebenden Raums. Dann ueberprueft die Tuer die Controller der korrespondierenden Tuer auf der anderen Seite. Abschliessend ueberprueft sie die Controller im Raum auf der anderen Seite. Liefert einer dieser fuer forbidden_close_door angemeldeten Controller eine 1, so wird die Tuer nicht geschlossen. Es laesst sich also das Schliessen - einer bestimmten Tuer durch tuer->add_controller("forbidden_close_door") - von Tueren durch ein Lebewesen mittels wer->add_controller("forbidden_close_door") - von Tueren in einem Raum mittels raum->add_controller("forbidden_close_door") beobachten bzw. verhindern. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. VERWEISE: open_door,open_command,close_command,notify,forbidden GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: notify_close_door DEKLARATION: void notify_close_door(object wer,object tuer,object raum,int second) BESCHREIBUNG: Wenn das Lebewesen die Tuer geschlossen hat, meldet die Tuer dass sie geschlossen wurde mit folgender Reihenfolge: Zuerst meldet sie es den Controllern des Lebewesens. Dann den eigenen Controllern. Dann den Controllern im Raum. Dann den Controllern der korrespondierenden Tuer auf der anderen Seite. Dann den Controllern des korrespondierenden Raums. Man kann also das Schliessen - einer bestimmten Tuer durch tuer->add_controller("notify_close_door") - von Tueren durch ein bestimmtes Lebewesen mittels wer->add_controller("notify_close_door") - von Tueren in einem Raum mittels raum->add_controller("notify_close_door") beobachten. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. VERWEISE: close_door,open_command,close_command,notify,forbidden,crack GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: forbidden_pass_door DEKLARATION: int forbidden_pass_door(object wer,object tuer,object room,int second) BESCHREIBUNG: Versucht das Lebewesen durch die Tuer zu gehen, so checkt die Tuer, nachdem geprueft wurde, ob sie geoeffnet, geschlossen oder verschlossen ist, ob durch die Tuer gehen darf. Dazu ruft sie forbidden("pass_door",wer,tuer,raum,second) mit folgender Reihenfolge auf: Zuerst werden die Controller im Lebwesen geprueft. Danach prueft es die eigenen Controller. Danach die Controller im Raum. Danach die Controller der korrespondierenden Tuer auf der anderen Seite. Danach die Controller des korrespondierenden Raums. Returnt eines dieser forbidden_pass_door angemeldeten Controller eine 1, so kann das Lebwesen nicht durch die Tuer gehen. Es laesst sich also das Durchschreiten - einer bestimmten Tuer durch tuer->add_controller("forbidden_pass_door") - von Tueren durch ein bestimmtes Lebewesen mittels wer->add_controller("forbidden_pass_door") - von Tueren eines Raumes mittels raum->add_controller("forbidden_pass_door") beobachten bzw. verhindern. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. Bei goetterunsichtbaren Goettern wird diese Funktionalitaet zwar ausgefuehrt, die Goetter werden dadurch aber nicht aufgehalten sondern bekommen stattdessen eine Meldung, dass sie eigentlich aufgehalten worden waeren. VERWEISE: open_door,open_command,close_command,notify,forbidden GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: notify_pass_door DEKLARATION: void notify_pass_door(object wer,object tuer,object raum,int second) BESCHREIBUNG: Wenn das Lebewesen durch die Tuer gegangen ist, meldet die Tuer das den Controllern mit folgender Reihenfolge: Zuerst werden die Controller des Lebewesens benachrichtigt, danach die eigenen Controller. Danach die Controller des umgebenden Raums. Danach die Controller der korrespondierenden Tuer auf der anderen Seite. Danach die Controller des korrespondierenden Raums. Es laesst sich also das Durchschreiten - einer bestimmten Tuer mittels tuer->add_controller("notify_pass_door") - von Tueren durch ein bestimmtes Lebewesen mittels wer->add_controller("notify_pass_door") - von Tueren eines Raumes mittels raum->add_controller("notify_pass_door") beobachten. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. VERWEISE: close_door,open_command,close_command,notify,forbidden,crack GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: forbidden_lock_door DEKLARATION: int forbidden_lock_door(object wer,object tuer,object raum,object key,int second) BESCHREIBUNG: Versucht das Lebewesen die Tuer zu abzuschliessen, so checkt die Tuer, nachdem getestet wurde, ob sie geschlossen, verschlossen oder es zu dunkel ist, ob die Tuer (mit dem Schluessel ) abschliessen darf. Dazu ruft sie forbidden("lock_door",wer,tuer,raum,key,second) in dieser Reihenfolge auf: 1. Die Controller des Lebewesens werden gefragt. 2. Die Controller des unter Umstaenden gefundenen Schluessels werden gefragt. 3. Die Controller von werden gefragt. 4. Die Controller des Raums, in dem die Tuer steht, wird gefragt. 5. Die Controller der korrespondierenden Tuer auf der anderen Seite werden gefragt. 6. Die Controller des korrespondierenden Raums werden gefragt. Returnt eines dieser fuer forbidden_lock_door angemeldeten Controller eine 1, so wird die Tuer nicht abgeschlossen. Es laesst sich also das Abschliessen - einer bestimmten Tuer durch tuer->add_controller("forbidden_lock_door") - von Tueren durch ein bestimmtes Lebewesen mittels wer->add_controller("forbidden_lock_door") - von Tueren mit einem bestimmten Schluessel mittels key->add_controller("forbidden_lock_door") - von Tueren eines bestimmten Raumes mittels raum->add_controller("forbidden_lock_door") beobachten bzw. verhindern. kann 1 oder 0 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. kann 0 oder ein Objekt sein. Ist key==0, so wurde kein passender Schluessel gefunden, die Tuer koennte also ohne Schluessel abschliessbar sein. VERWEISE: close_door,open_command,close_command,notify,forbidden,unlock_door, unlock_command GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: notify_lock_door DEKLARATION: void notify_lock_door(object wer,object tuer,object raum,object key,int second) BESCHREIBUNG: Wenn das Lebewesen die Tuer abgeschlossen hat, meldet die Tuer dass sie abgeschlossen wurde. Es laesst sich also das Abschliessen einer Tuer durch tuer->add_controller("notify_lock_door") beobachten. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. VERWEISE: close_door,open_command,close_command,notify,forbidden,crack GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: forbidden_unlock_door DEKLARATION: int forbidden_unlock_door(object wer,object tuer,object raum,object key,int second) BESCHREIBUNG: Versucht das Lebewesen die Tuer aufzuschliessen, so checkt die Tuer, nachdem getestet wurde, ob sie geschlossen, verschlossen oder es zu dunkel ist, ob die Tuer (mit dem Schluessel ) aufschliessen darf. Dazu ruft sie forbidden("unlock_door",wer,tuer,raum,key,second) mit dieser Reihenfolge auf: 1. Die Controller vom Lebewesen werden geprueft. 2. Die Controller vom unter Umstaenden gefundenen Schluessel . 3. Die Controller der bei der Tuer angemeldeten werden geprueft. 4. Die Controller des die Tuer umgebenden Raumes werden geprueft. 5. Die Controller der korrespondierenden Tuer auf der anderen Seite. 6. Die Controller des korrespondierenden Raumes auf der anderen Seite. Returnt eines dieser fuer forbidden_unlock_door angemeldeten Controller eine 1, so wird die Tuer nicht aufgeschlossen. Es laesst sich also das Aufschliessen - einer bestimmten Tuer durch tuer->add_controller("forbidden_unlock_door") - von Tueren durch ein bestimmtes Lebewesen mittels wer->add_controller("forbidden_unlock_door") - von Tueren mit einem bestimmten Schluessel mittels key->add_controller("forbidden_unlock_door") - von Tueren eines Raumes mittels raum->add_controller("forbidden_unlock_door") beobachten bzw. verhindern. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. kann 0 oder ein Objekt sein. Ist key == 0 so gab es keinen Schluessel, die Tuer koennte ohne Hilfsmittel aufschliessbar sein. VERWEISE: close_door,open_command,close_command,notify,forbidden,lock_door, lock_command,unlock_command GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: notify_unlock_door DEKLARATION: void notify_unlock_door(object wer,object tuer,object raum,object key,int second) BESCHREIBUNG: Wenn das Lebewesen die Tuer aufgeschlossen hat, meldet die Tuer dass sie aufgeschlossen wurde. Das geschieht mit folgender Reihenfolge: 1. Die Controller vom Lebewesen werden benachrichtigt. 2. Die Controller des u.U. gefundenen Schluessels werden benachrichtigt. 3. Die Controller der Tuer werden benachrichtigt. 4. Die Controller des Raumes, in dem die Tuer steht. 5. Die Controller der korrespondierenden Tuer auf der anderen Seite. 6. Die Controller des korrespondierenden Raumes auf der anderen Seite. Es laesst sich also das Aufschliessen - einer bestimmten Tuer durch tuer->add_controller("notify_unlock_door") - von Tueren durch ein bestimmtes Lebewesen mittels wer->add_controller("notify_unlock_door") - von Tueren mit einem bestimmten Schluessel mittels key->add_controller("notify_unlock_door") - von Tueren eines Raumes mittels raum->add_controller("notify_unlock_door") beobachten. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. kann 0 oder ein Objekt sein. Ist key == 0, so wurde kein Schluessel beim Aufschliessen genutzt. VERWEISE: close_door,open_command,close_command,notify,forbidden,crack GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: forbidden_knock_door DEKLARATION: int forbidden_knock_door(object wer,object tuer,object raum,int second) BESCHREIBUNG: Versucht das Lebewesen an die Tuer zu klopfen, so checkt die Tuer, ob das darf. Dazu ruft sie forbidden("knock_door",wer,tuer,raum,second) mit folgender Reihenfolge auf: 1. Die Controller des Lebewesens werden geprueft. 2. Die Controller der Tuer werden geprueft. 3. Die Controller des Raumes werden geprueft. 4. Die Controller der korrespondierenden Tuer auf der anderen Seite. 5. Die Controller des korrespondierenden Raums auf der anderen Seite. Returnt einer dieser fuer forbidden_knock_door angemeldeten Controller eine 1, so wird nicht an die Tuer geklopft. Es laesst sich also das Anklopfen - an bestimmte Tueren mittels tuer->add_controller("forbidden_knock_door") - an Tueren durch bestimmte Lebewesen mittels wer->add_controller("forbidden_knock_door") - an Tueren eines Raumes mittels raum->add_controller("forbidden_knock_door") beobachten bzw. verhindern. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. VERWEISE: close_door, open_command, close_command, notify, forbidden GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: notify_knock_door DEKLARATION: void notify_knock_door(object wer,object tuer,object raum,int second) BESCHREIBUNG: Wenn das Lebewesen an die Tuer geklopft hat, meldet die Tuer dieses an Controller in folgender Reihenfolge: 1. die Controller des Lebewesens werden benachrichtigt. 2. die Controller der Tuer werden benachrichtigt. 3. die Controller des Raumes, int dem die Tuer steht, werden benachrichtigt. 4. die Controller der korrespondierenden Tuer auf der anderen Seite. 5. die Controller des korrespondierenden Raumes auf der anderen Seite. Es laesst sich also das Anklopfen - an eine bestimmte Tuer mittels tuer->add_controller("notify_knock_door") - an Tueren durch ein bestimmtes Lebewesen mittels wer->add_controller("notify_knock_door") - an Tueren eines Raumes mittels raum->add_controller("notify_knock_door") beobachten. kann 0 oder 1 sein. Ist second==1, so wurde die Funktion von der korrespondierenden Tuer auf der anderen Seite aufgerufen. VERWEISE: close_door,open_command,close_command,notify,forbidden,crack GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: T_LISTE DEKLARATION: Liste der T-Defines fuer Tueren BESCHREIBUNG: Vordefinierte Bedingungen: - T_DOOR_LOCKED Die Tuer ist verschlossen. - T_DOOR_CLOSED Die Tuer ist geschlossen. Vordefinierte Texte: - T_DOOR_STATUS_TEXT "Die Tuer ist verschlossen/geschlossen/offen." Hinweise fuer die Meldungsgeneration: - T_HAS_DOOR_STATUS Keine Meldung darueber, ob die Tuer offen ist. GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: P_SOUND_ACTIONS DEKLARATION: Liste der P_SOUND_ACTIONS fuer Tueren BESCHREIBUNG: Ueberschreiben der Aktionstoene hier mit den Default-Toenen: tuer->add(P_SOUND_ACTIONS,"anklopfen","Basis/tuer_anklopfen.wav"); tuer->add(P_SOUND_ACTIONS,"oeffnen","Basis/tuer_oeffnen.wav"); tuer->add(P_SOUND_ACTIONS,"schliessen","Basis/tuer_schliessen.wav"); tuer->add(P_SOUND_ACTIONS,"zuschliessen","Basis/tuer_zuschliessen.wav"); tuer->add(P_SOUND_ACTIONS,"aufschliessen","Basis/tuer_aufschliessen.wav"); tuer->add(P_SOUND_ACTIONS,"knacken", "Basis/tuer_knacken.wav"); GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: activate_sound_profile DEKLARATION: int activate_sound_profile(string profile_name) BESCHREIBUNG: Bei der Tuer werden die profile 0,""(->Default),"holztuer" und "metalltuer" derzeit unterstuetzt. VERWEISE: P_SOUND_ACTIONS GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: query_door DEKLARATION: int query_door(void) BESCHREIBUNG: Liefert 1, wenn es sich um eine Tuer handelt. VERWEISE: GRUPPEN: tuer SOURCE: /i/object/tuer.c FUNKTION: query_vehikel DEKLARATION: string query_vehikel() BESCHREIBUNG: Liefert den Typ des Vehikels zurueck. An dieser Funktion laesst sich feststellen, ob es sich bei einem Objekt um ein von Spielern/NPCs bewegliches Gefaehrt handelt. Dies ist der Fall, wenn die Funktion einen String zurueckliefert. Der zurueckgelieferte String beschreibt ausserdem, um welche Art von Gefaehrt es sich handelt. Bekanntestes Beispiel ist wohl der Vehikel-Typ "schiff". Vehikel duerfen im Normalfall nur Raeume befahren, in denen der zum Vehikeltyp passende erlaubt-Raumtyp gesetzt ist, z.B. "schiff_erlaubt" bei Schiffen. Dies kann allerdings auch abgestellt werden, siehe set_vehikel_sloppy(). VERWEISE: set_vehikel, set_vehikel_sloppy GRUPPEN: vehikel SOURCE: /i/object/vehikel.c FUNKTION: set_vehikel DEKLARATION: void set_vehikel(string typ) BESCHREIBUNG: Setzt den Typ des Vehikels auf 'typ', oder loescht ihn, wenn 'typ' == 0. Bedeutung des Vehikel-Typs siehe bei query_vehikel(). VERWEISE: query_vehikel GRUPPEN: vehikel SOURCE: /i/object/vehikel.c FUNKTION: query_enter_room DEKLARATION: varargs mixed query_enter_room(object betreter) BESCHREIBUNG: Die Funktion liefert den Raum zurueck, in den der Spieler gelangen soll, wenn er versucht, das Vehikel zu betreten. 'betreter' ist hierbei ein optionaler Parameter, naemlich der Spieler/NPC, der das Vehikel zu betreten versucht. Dieser Parameter ist bei Ueberlagerung von query_enter_room() interessant. Die Funktion hat folgende Rueckgabemoeglichkeiten: 0 Das Vehikel kann man nicht betreten. string Objektname des Raumes. object Das Raumobjekt selbst. VERWEISE: set_enter_room, query_enter_messages, set_enter_messages GRUPPEN: vehikel SOURCE: /i/object/vehikel.c FUNKTION: set_enter_room DEKLARATION: void set_enter_room(mixed room) BESCHREIBUNG: Setzt den Raum, in den ein Spieler/NPC gelangen soll, wenn er das Vehikel betritt. Moegliche Werte fuer room sind: 0 Das Vehikel kann man nicht betreten. string Objektname des Raumes. object Das Raumobjekt selbst. VERWEISE: query_enter_room, query_enter_messages, set_enter_messages GRUPPEN: vehikel SOURCE: /i/object/vehikel.c FUNKTION: query_enter_messages DEKLARATION: varargs string * query_enter_messages(object betreter) BESCHREIBUNG: Liefert die Meldungen zurueck, die beim Betreten des Vehikels an die Umgebung geschickt werden. Es gibt eine Meldung ausserhalb des Vehikels, eine Meldung innerhalb (an den Raum, den man betreten hat) und eine Meldung an das Lebewesen selber. Der Rueckgabewert ist ({string aussen, string innen, string selber}). Die beiden Meldungen koennen Pseudoclosures enthalten. VERWEISE: set_enter_messages, query_enter_room, set_enter_room GRUPPEN: vehikel SOURCE: /i/object/vehikel.c FUNKTION: set_enter_messages DEKLARATION: varargs void set_enter_messages(string aussen, string innen, string self) BESCHREIBUNG: Setzt die Meldungen, die beim Betreten des Vehikels an die Umgebung (aussen) sowie an den betretenen Raum (innen) geschickt werden. Optional kann auch eine Meldung an das betretende Lebewesen selber (self) angegeben werden. Die Benutzung von Pseudoclosures ist erlaubt. $Der('vehikel) bezeichnet hierbei das Vehikel. VERWEISE: query_enter_messages, query_enter_room, set_enter_room GRUPPEN: vehikel SOURCE: /i/object/vehikel.c FUNKTION: query_vehikel_sloppy DEKLARATION: int query_vehikel_sloppy() BESCHREIBUNG: Liefert 1, wenn sich das Vehikel im Sloppy-Modus befindet, sonst 0. Erklaerung siehe set_vehikel_sloppy(). VERWEISE: GRUPPEN: vehikel SOURCE: /i/object/vehikel.c FUNKTION: set_vehikel_sloppy DEKLARATION: void set_vehikel_sloppy(int flag) BESCHREIBUNG: Ein Vehikel, dem ein gueltiger Vehikel-Typ gesetzt wurde, darf normalerweise nur in Raeume bewegt werden, die einen entsprechenden _erlaubt-Raumtyp gesetzt haben (z.B. "schiff_erlaubt" bei Vehikeln vom Typ "schiff"). Mit set_vehikel_sloppy(1) laesst sich diese Einschraenkung abschalten. VERWEISE: query_vehikel_sloppy, set_vehikel_type GRUPPEN: vehikel SOURCE: /i/object/vehikel.c FUNKTION: fahre DEKLARATION: int fahre(string richtung) BESCHREIBUNG: Das Vehikel faehrt in die angegebene Richtung. Abkuerzungen wie "n", "no", etc. werden erweitert. Hat das Vehikel keine Umgebung, wird MOVE_NOT_ALLOWED zurueckgeliefert. Existiert kein entsprechender Ausgang, wird MOVE_NO_DEST zurueckgeliefert. Weitere Returncodes entsprechen /i/move::move(). VERWEISE: GRUPPEN: vehikel SOURCE: /i/object/vehikel.c FUNKTION: do_delayed_action DEKLARATION: int do_delayed_action(mixed action_handler, mixed *actions [, closure callback [, int flag]]) BESCHREIBUNG: Diese Funktion soll es moeglich machen, Aktionen verzoegert auszufuehren. int do_delayed_action(string|closure action_handler, mixed *actions [, closure callback [, int flag] ]) Returnwert: DA_OK Aktion wird ausgefuehrt DA_BUSY Das Lebewesen macht schon etwas und darf nichts neues anfangen action_handler: string: Ein String der ausgegenben wird, wenn man ein anderes Kommando ausfuehren will waehrend die Aktion laeuft (wird automatisch gewrappt). closure: Wenn eine Closure uebergeben wurde, wird diese mit dem Kommando, das eingegeben wurde aufgerufen. Returnwert der Closure: DA_COMMAND_ALLOWED Das Kommando ist erlaubt und wird ausgefuehrt ein String Dieser wird ausgegeben, und das Kommando nicht ausgefuehrt. alles andere Das Kommando wird nicht ausgefuehrt. actions: Ein Array mit 'Delay' + 'Aktion' Paaren ({ int delay, closure || string || array, int delay2, closure || string || array, ... }) delay: Zeit in der die naechste Aktion ausgefuehrt wird in Sekunden. closure: Eine Closure, die aufgerufen wird. Diese Closure kann etwas zurueckliefern: DA_STOP Stoppt den Vorgang DA_CONTINUE Macht einfach weiter alles andere Dieser Wert wird in einer Variablen gespeichert und jede weitere Closure wird damit aufgerufen bis der Wert wieder veraendert wird. Der Wert darf kein Integer sein (ausser 0). string: Ein String, der an den Spieler ausgegeben wird (automatisch gewrappt). array: Ein Array mit dem String an den Spieler und den Uebergabeparametern fuer 'send_message()'. Es gibt folgende Varianten: ({ MSG an Spieler, MSG an alle anderen im Raum [, Message an WHO, Objekt WHO ] }) ({ MSG-Type, MSG-Action, MSG an Spieler }) ({ MSG-Type, MSG-Action, MSG an Spieler, MSG an alle anderen [, Message an WHO, Objekt WHO ] }) ({ MSG-Type, MSG-Action, MSG an Spieler, MSG-Type, MSG-Action, MSG an alle anderen [, Message an WHO, Objekt WHO ] }) ({ MSG-Type, MSG-Action, MSG an Spieler, MSG-Type, MSG-Action, MSG an alle anderen [, MSG-Type, MSG-Action, MSG an WHO, Objekt WHO ] }) callback: Eine Closure, die aufgerufen wird, wenn die Aktion beendet ist Diese Closure wird mit folgenden Parametern aufgerufen: 1. Einem Flag, das anzeigt, wie die Aktion beendet wurde: DA_STOPPED Die Aktion wurde vom Spieler beendet (z.B. durch eine Bewegung) DA_BREAK Die Aktion wurde unterbrochen (z.B. durch eine Flucht, Net-Dead, Ausloggen) DA_NEW_ACTION Es wurde eine neue Aktion gestartet. DA_DONE Die Aktion wurde normal beendet 2. Die evtl. gespeicherte Variable aus einer vorherigen Closure flag: DA_OK_ACTION Es darf eine neue Delay-Aktion gestartet werden, die die alte abbricht mit 'DA_NEW_ACTION' DA_OK_MOVE Die Aktion wird bei einem move() nicht abgebrochen DA_OK_COMMAND Der Spieler kann auch Kommando ausser 'halt' eingeben DA_OK_FIGHT Der Spieler darf waehrend der Aktion WEITERkaempfen DA_VALID_OBJECT Wenn das Objekt, auf das sich das Callback bezieht, zerstoert wird, bricht die Aktion ab. DA_NO_HALT Damit bei 'halt' (DA_STOP_ACTION) die Meldung vom action_handler ausgegeben bzw. die Action nur dann angehalten, wenn der action_handler DO_COMMAND_ALLOWED liefert. Diese Flags koennen mit '|' verknuepft werden. Die DA-Konstanten sind in definiert. VERWEISE: query_delayed_action_time, stop_delayed_action, in_delayed_action GRUPPEN: spieler SOURCE: /i/player/delay.c FUNKTION: stop_delayed_action DEKLARATION: int stop_delayed_action() BESCHREIBUNG: Stoppt die Aktion, die gerade laeuft. Returnwert: DA_OK Aktion wurde gestoppt DA_NO_ACTION Es war keine Aktion am Laufen VERWEISE: query_delayed_action_time, in_delayed_action, do_delayed_action GRUPPEN: spieler SOURCE: /i/player/delay.c FUNKTION: query_delayed_action_time DEKLARATION: int query_delayed_action_time() BESCHREIBUNG: Liefert die Zeit, die die jetzige Aktion noch benoetigt, bzw '-1' wenn keine Aktion laeuft. VERWEISE: in_delayed_action, stop_delayed_action, do_delayed_action GRUPPEN: spieler SOURCE: /i/player/delay.c FUNKTION: in_delayed_action DEKLARATION: int in_delayed_action() BESCHREIBUNG: Liefert 1, wenn der Spieler sich in einer Aktion befindet. VERWEISE: query_delayed_action_time, stop_delayed_action, do_delayed_action GRUPPEN: spieler SOURCE: /i/player/delay.c FUNKTION: edit DEKLARATION: int edit([string *puffer[, mixed retfun[, mixed retob, [int no_write [, mapping error_msgs]]]]]) BESCHREIBUNG: Der LPC Ed. Diese Funktion ist dazu da, ein File interaktiv zu editieren. Der lpc ed aehnelt dem ed aus dem driver (efun ed()), beinhaltet im wesentlichen aber keinerlei Funktionen zum Lesen und Schreiben von Dateien und ist damit dazu geeignet, von Spielern benutzt zu werden. Der lpc ed wird mit this_player()->edit(puffer, retfun, retob, no_write, error_msgs); gestartet. Die Variable puffer enthaelt dabei den Puffer vor dem Editieren. Ist no_write == 1, wird im Falle, dass der Spieler bereits etwas editiert, die Fehlermeldung mit notify_fail() ausgegeben statt mit write(). Schlaegt der Befehl fehl (weil der Spieler bereits editiert), wird 0 returnt, ansonsten 1. Wird das nichtleere Mapping error_msgs uebergeben, so werden die Fehlermeldungen aus diesem Mapping genommen statt der Standardmeldungen. Format des Mappings: ([ ED_UNRECOGNIZED_COMMAND : "", ED_HELP_1 : "", ED_HELP_2 : "", ED_SUBST_LINES_HELP : "", ED_SUBST_LINES_FAILED : "", ED_SUBST_LINES_GLOBAL_FAILED : "Fehlermeldung, wenn globales Ersetzen " "fehlschlug>", ED_MOVE_LINES_FAILED : "", ED_START_TEXT : "", ED_NEW_TEXT : "", ED_APPEND_TEXT : "", ED_MAX_SIZE_OVERRUN : "", ED_TEXT_RESTORED : "", ED_TEXT_CHANGED : "", ED_MARKER_HELP : "", ED_NUMBERS_ON : "", ED_NUMBERS_OFF : "", ED_ALREADY_EDITING : "", ED_AT_END : "", ]) Wird ED_HELP_1 angegeben und ED_HELP_2 nicht, so gibt es auch keine weitere Hilfe! Am Ende des Editierens ruft dann der Editor im Objekt retob die Funktion retfun mit zwei Parametern auf: void edit_end(string *puffer, int changed) { In puffer steht das Ergebnis, Zeile fuer Zeile und changed != 0 besagt, dass der puffer geaendert wurde. } retfun kann auch eine Closure sein. Fehlt retob, dann wird previous_object() verwendet, Fehlt retfun, dann wird "edit_end" als Funktionsname verwendet, Fehlt der puffer, dann wird mit einem leeren Puffer gestartet. BEMERKUNG: Zum richtigen ed des Drivers fehlen dem lpc Editor - alle Filekommandos: e, r, w, W (absichtlich) - die globalen Befehle: g, v (i'm too lazy) - die indentation Kommandos I, A (gibt's nicht fuer Spieler) - der Settingsbefehl: set (syntactic candy only) - Die Befehle f, E haben eine etwas andere Bedeutung. - Der join Befehl j verbindet auch mit naechster Zeile bei expliziter Angabe *einer* Zeile - Der Befehl h gibt nur eine Uebersicht aus, keine Einzelhilfe zu den Befehlen. - der lpc ed kann im Gegensatz zum ed des drivers nur maximal 3000 Zeilen editieren. (MAX_ARRAY_SIZE, Beschraenkung durch den Driver) VERWEISE: ed, more, cat, tail, set_more_chunk, query_more_chunk, GRUPPEN: Dateien SOURCE: /i/player/editor.c FUNKTION: in_edit DEKLARATION: int in_edit() BESCHREIBUNG: Liefert einen Wert !=0, wenn dieser Spieler sich im Player-Editor befindet. VERWEISE: edit, query_editing GRUPPEN: Dateien SOURCE: /i/player/editor.c FUNKTION: query_echomode DEKLARATION: int query_echomode() BESCHREIBUNG: Liefert 1, falls der Spieler mit dem Kurier das Echo fuer sage und rede eingeschaltet hat, sonst 0. Es gibt kein set_echomode. GRUPPEN: spieler SOURCE: /i/player/event.c FUNKTION: add_to_rede_puffer DEKLARATION: void add_to_rede_puffer(string redetext) BESCHREIBUNG: Spieler haben einen rede - Puffer, in dem sie die zuletzt von ihnen oder an sie geredeten Sachen abfragen koennen. Befehle von rede - Charakter wie beispielsweise das "hallo" des Schnullers oder die Befehle zur Gildenkommunikation koennen mit dieser Funktion ihren Text ebenfalls an diesen rede - Puffer anhaengen. Diese Funktion sollte sowohl im Spieler, der redet, aufgerufen werden (mit einem Text der Art: Du redest zu blablabla: blubber) sowie in dem Ziel - Spieler (mit einem Text der Art: Xyz redet zu Dir: blubber). GRUPPEN: spieler SOURCE: /i/player/event.c FUNKTION: set_keine_gummigoettchen DEKLARATION: void set_keine_gummigoettchen(int flag) BESCHREIBUNG: Schaltet die Gummigoettchen fuer abgesetzte Fehler ein (flag == 0, default) oder aus (flag != 0). VERWEISE: query_keine_gummigoettchen GRUPPEN: spieler SOURCE: /i/player/fehler.c FUNKTION: query_keine_gummigoettchen DEKLARATION: int query_keine_gummigoettchen() BESCHREIBUNG: Liefert 1, wenn der Spieler keine Gummigoettchen fuer abgesetzte Fehler erhaelt, sonst 0. VERWEISE: set_keine_gummigoettchen GRUPPEN: spieler SOURCE: /i/player/fehler.c FUNKTION: compose_path DEKLARATION: nomask string *compose_path(string path, int flag) BESCHREIBUNG: Bastelt aus dem uebergebenen Pfad - String einen "vollstaendigen, richtigen Pfad", und liefert ihn als String - Array zurueck, bestehend aus den einzelnen Pfad-Teilen. Dabei werden beruecksichtigt: - ~/ Home-Verzeichnis des Gottes, bei Spielern kommt da auch was raus, aber das ist nicht wirklich sinnvoll, - . Das aktuelle Verzeichnis, wo man grad ist, - .. eine Verzeichnisebene weiter in Richtung Wurzel, - Pfadkuerzel des Gottes, Flag ist eine Veroderung von MSG, DIR und LAST aus /i/zauberstab/zdefs.h. Dabei bedeuten: - DIR (1): gib nur den Teil des Pfades zurueck, der auch existiert, und auch nur den Teil, der ein Verzeichnis ist, schneidet also einen am path anhaengenden Dateinamen ab, - LAST (2): der letzte Teil des Pfades (gewoehnlich der Dateiname) muss nicht existieren, d.h. bei Angabe von MSG wird keine Fehlermeldung ausgegeben, wenn nur das uebergeordnete Verzeichnis existiert. - MSG (4): gib ne Fehlermeldung aus, wenn die Datei nicht existiert, VERWEISE: GRUPPEN: spieler SOURCE: /i/player/files.c FUNKTION: query_path_aliases DEKLARATION: mapping query_path_aliases() BESCHREIBUNG: Damit bekommt man ein mapping, in dem alle Pfadkuerzel eines Spielers stehen. Wird von der Wizard - Shell benoetigt. VERWEISE: GRUPPEN: spieler SOURCE: /i/player/files.c FUNKTION: uses_gmcp_edit DEKLARATION: public int uses_gmcp_edit() BESCHREIBUNG: Gibt 1 zurueck, wenn der Editor verfuegbar ist. VERWEISE: mini_ed,gmcp_start_edit GRUPPEN: editor SOURCE: /i/player/gmcp.c FUNKTION: gmcp_start_edit DEKLARATION: varargs mapping gmcp_start_edit(closure retfun,string title,string tempfile,string* text) BESCHREIBUNG: Der gmcp_sart_edit wird vom mini_ed aufgerufen. retfun ist eine function(string *buffer), buffer ist 0, wenn abgebrochen wurde, ansonsten enthaelt es das Ergebnis des Editierens. title sollte eindeutig im Mud sein und gibt den sprechenden Titel des Fensters z.B. im Webmud3. Ist tempfile ungleich 0, wird das verwendet, aber nicht geloescht. Bei gleich 0 wird eine systemseitige temporäre Datei erstellt, verwendet und nach dem Schliessen wieder geloescht. Mit dem Stringarray 'text' kann ein Text zur Initialisierung ergaenzt werden. Das Mapping gibt enweder (["file":tempfile,"key":key,"ok":1]) bei Erfolg zurueck und (["errortype":"xxx"]); zurueck, bei Fehlschlag, mi xxx als: GMCPnotAvailable, TempfileOrTitleFailed, CreateTempFile VERWEISE: mini_ed GRUPPEN: editor SOURCE: /i/player/gmcp.c FUNKTION: set_eye_option DEKLARATION: void set_eye_option(string option, mixed value) BESCHREIBUNG: Setzt die Augenoption 'option' auf den Wert 'value'. Folgende Optionen (Defines aus eyes.h) gibt es: (Die Ja/Nein-Optionen koennen den Wert 0 (nein) oder 1 (ja) erhalten.) EYE_DIRINFO Anzeige der .info-Datei bei 'cd'. EYE_FILE Anzeige des Objektnamens beim Betrachten EYE_KURZ Lang- (=0), Kurz- (=0) oder beide (2) Beschreibungen EYE_HIDDEN_EXITS Anzeige versteckter Ausgaenge EYE_NOLIST_EXITS Anzeige von NO_LIST-Ausgaengen EYE_LOCKED_EXITS Anzeige gesperrter Ausgaenge EYE_ROOM_INVIS Anzeige von unsichtbaren Gegenstaenden im Raum EYE_MY_INVIS Anzeige eigener unsichtbarer Gegenstaende EYE_OTHER_INVIS Anzeige fremder unsichtbarer Gegenstaende EYE_INVSTYLE Optionen des invis-Befehls EYE_V_ITEMS Anzeige der V-Item-Liste EYE_SHADOWS Anzeige von Shadows EYE_DEBUG Anzeige von Debugtexten in der Beschreibung EYE_ROOM_ORDER Anzeige des Rauminventars vor der Beschreibung VERWEISE: query_eye_option, set_eye_level GRUPPEN: spieler, augen SOURCE: /i/player/inv.c FUNKTION: query_eye_option DEKLARATION: varargs mixed query_eye_option(string option) BESCHREIBUNG: Liefert den Wert einer bestimmten Option oder aller Optionen in einem Mapping (falls option nicht angegeben wurde). Eine Liste aller Augenoptionen gibt es bei 'set_eye_option'. VERWEISE: set_eye_option, query_eye_level GRUPPEN: spieler, augen SOURCE: /i/player/inv.c FUNKTION: query_inventory_category DEKLARATION: string query_inventory_category() BESCHREIBUNG: Der Rueckgabewert liefert die Kategorie, bei der einem Gegenstand eingeordnet wird, wenn man den 'ausr'-Befehl benutzt. Die Funktion muss im Gegenstand implementiert werden. Alles was unter keine uebliche Kategorie faellt landet unter Sonstiges. Folgende Kategorien (Defines in eyes.h) stehen zur Verfuegung: IC_LIVING Alles, was lebt. IC_WEAPON Waffen IC_ARMOUR Ruestungen IC_CONTAINER Behaelter IC_CLOTHES Kleidung IC_FOOD Nahrung (Essen, Getraenke) IC_MONEY Geld IC_VALUEABLES Sachen, die wertvoll sind IC_OTHER Sonstiges VERWEISE: set_eye_option, query_inventory_flags GRUPPEN: spieler, augen SOURCE: /i/player/inv.c FUNKTION: query_inventory_flags DEKLARATION: int query_inventory_flags() BESCHREIBUNG: Der Rueckgabewert liefert Informationen dazu, wie ein Gegenstand bei der Ausruestungsanzeige ('ausr'-Befehl) dargestellt werden soll. Die Funktion muss im Gegenstand implementiert werden. Folgende Flags (welche via binaeres Oder verbunden werden koennen) sind in eyes.h definiert: IF_HIDE_INVENTORY Der Gegenstand will nicht, dass man seinen Inhalt anzeigt. VERWEISE: set_eye_option, query_inventory_category GRUPPEN: spieler, augen SOURCE: /i/player/inv.c FUNKTION: query_gilden_info DEKLARATION: nomask mixed query_gilden_info(string was) BESCHREIBUNG: Liefert eine Information ueber die Gildenzugehoerigkeit des Players. Dazu sind fuer 'what' in gilden.h definiert: GILDEN_NAME Name der Gilde. GILDEN_GESCHLECHT Das Geschlecht der Gilde. KUERZEL Kuerzel der Gilde. GILDEN_MEISTER Meister der Gilde. PROGRAMMIRER Die Programmierer ger Gilde. VALID_CALLER Feld von Strings mit den Namen von Objekten, die zusaetzlich zur Gilde den Eintrag im Player aendern duerfen. FILE_NAME Filename der Gilde STATUS Status der Gilde: OK Alles in Ordnung. NOT_ACTIVE In /adm/Gilden disabled. NOT_LOADABLE Fehler beim Laden der Gilde. INVALID_ENTRY Fehlerhafte Gildenkofiguration. TEST Testbetrieb REASON Kurzer Text im Fall von NOT_ACTIVE. MITGLIED Allgemeiner Name eines Gildenmitglieds unabhaengig vom Rang (Geschlecht (m/w/s) bereits beruecksichtigt). MITGLIED_PLURAL Pluralform davon. RANG Rang innerhalb der Gilde (Geschlecht (m/w/s) bereits beruecksichtigt). RANG_PLURAL Pluralform davon. RANG_NAME Benennung des Ranges innerhalb der Gilde. Weitere Informationen dazu gibt es in /doc/funktionsweisen/gilden. VERWEISE: query_gilde, query_rang GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: query_gilde DEKLARATION: nomask string query_gilde() BESCHREIBUNG: Liefert den Namen der Gilde zurueck, in der sich der Spieler befindet. VERWEISE: query_gilden_info, query_rang GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: query_rang DEKLARATION: nomask int query_rang() BESCHREIBUNG: Liefert den Rang, den ein Spieler in einer Gilde einnimmt, zurueck. VERWEISE: query_gilde, query_gilden_info GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: query_gilden_data DEKLARATION: nomask mixed query_gilden_data() BESCHREIBUNG: Liefert die gildenspezifischen Daten des Spielers. VERWEISE: set_gilden_data GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: set_gilden_data DEKLARATION: nomask int set_gilden_data(mixed data) BESCHREIBUNG: Setzt die gildenspezifischen Daten des Spielers. VERWEISE: query_gilden_data GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: query_letzte_gilden DEKLARATION: nomask mixed query_letzte_gilden() BESCHREIBUNG: Liefert ein 2 dimensionales Array ueber alle Gildenwechsel eines Spielers zurueck: ({ ({Eintrittsdatum,Gildenkuerzel,Rang,Austrittsdatum,Rangname}), ({Eintrittsdatum,Gildenkuerzel,Rang,Austrittsdatum,Rangname}), ... }) VERWEISE: query_gilde, query_rang, time GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: query_hlp_data DEKLARATION: nomask mixed query_hlp_data() BESCHREIBUNG: Liefert die Daten des HLP-Tools. Darf nur vom HLP-Tool aufgerufen werden. VERWEISE: set_hlp_data GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: set_hlp_data DEKLARATION: nomask void set_hlp_data(mixed data) BESCHREIBUNG: Setzt die Daten des HLP-Tools. Darf nur vom HLP-Tool aufgerufen werden. VERWEISE: query_hlp_data GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: query_real_name DEKLARATION: nomask string query_real_name() BESCHREIBUNG: Liefert ganz sicher den Spielernamen zurueck, wobei eine Tarnung durchschaut wird. VERWEISE: query_name, set_name GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: query_real_cap_name DEKLARATION: nomask string query_real_cap_name() BESCHREIBUNG: Liefert den "echten", nicht shadowbaren Namen des Spielers mit gross - Kleinschreibung zurueck, Tarnungen werden durchschaut. Es gibt kein set_real_cap_name. VERWEISE: query_cap_name, query_name, set_name, set_personal, query_personal, set_cap_name, query_real_name GRUPPEN: grundlegendes SOURCE: /i/player/login.c FUNKTION: query_current_wiz_owner DEKLARATION: nomask string query_current_wiz_owner() BESCHREIBUNG: Liefert bei Testies den tatsaechlichen Spieler. VERWEISE: query_name, set_name GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: query_auto_load_parameter DEKLARATION: mixed query_auto_load_parameter(string dateiname) BESCHREIBUNG: Liefert die Autoload - Parameter des Autoloaders dateiname, falls ein Spieler diesen Dateiname als Autoloader eingetragen hat. Kann nur von Objekten aus /z/Gilden/X/apps/ aus und nur fuer Autoloader aus /d/ aufgerufen werden. VERWEISE: query_auto_load, init_arg GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: query_auto_load DEKLARATION: mixed query_auto_load() BESCHREIBUNG: Bei einem Autoloader liefert diese Funktion alle Variablen zurueck, die fuer den spaeteren Gebrauch gespeichert werden sollen. Im einfachsten Fall ist das eine 1, in komplizierteren Faellen kann ein Array mit allen wichtigen Daten zurueckgeliefert werden. Siehe /doc/funktionsweisen/auto_loading. VERWEISE: init_arg, query_auto_load_shadow GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: init_arg DEKLARATION: void init_arg(mixed auto_load) BESCHREIBUNG: Ein Autoloader, der mit query_auto_load() wichtige Daten abgespeichert hat, bekommt diese ueber die Funktion init_arg() zurueck. In dieser Funktion koennen diese Daten wieder zurueck in Variablen geschrieben werden. Siehe /doc/funktionsweisen/auto_loading. VERWEISE: query_auto_load GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: query_auto_load_shadow DEKLARATION: mixed query_auto_load_shadow(object shadow) BESCHREIBUNG: Bei einem Autoloadshadow liefert diese Funktion alle Variablen zurueck, die fuer den spaeteren Gebrauch gespeichert werden sollen. Im einfachsten Fall ist das eine 1, in komplizierteren Faellen kann ein Array oder Mapping mit allen wichtigen Daten zurueckgeliefert werden. Eine 0 sollte bei einem Autoloadshadow auf keinen Fall geliefert werden. Diese Funktion sollte nur etwas liefern, wenn das Shadow direkt mit dem 1. Parameter angesprochen wurde, ansonsten den Aufruf an query_shadow_owner weiterleiten. Beispiel: mixed query_auto_load_shadow(object shadow) { if(shadow!=this_object()) return query_shadow_owner()->query_auto_load_shadow(shadow); return irgendwelcheinteressantendatendieabgespeichertwerdensollen; } VERWEISE: init_arg_shadow, query_auto_load GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: init_arg_shadow DEKLARATION: void init_arg_shadow(object spieler, mixed auto_load) BESCHREIBUNG: Ein Autoloadshadow, der mit query_auto_load_shadow() wichtige Daten abgespeichert hat, bekommt diese ueber die Funktion init_arg_shadow() zurueck. In dieser Funktion kann sich der Shadow dann wieder ueber den Spieler legen und diese Daten zurueck in die Variablen schreiben. VERWEISE: query_auto_load_shadow GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: get_object_state DEKLARATION: mixed get_object_state() BESCHREIBUNG: Hiermit kann ein Objekt zum Auslogzeitpunkt einen Wert zurueckliefern, mit dem es nach dem Login wieder initialisiert wird, damit der Spieler es im gleichen Zustand in seinem Inventory wiederfindet. VERWEISE: init_object_state GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: init_object_state DEKLARATION: void init_object_state(mixed state) BESCHREIBUNG: Nachdem sich ein Spieler wieder einloggte und das Objekt wieder in den Spieler bewegt wurde, wird diese Funktion im Objekt mit dem Wert aufgerufen, welchen es via get_object_state vor dem Ausloggen lieferte. VERWEISE: get_object_state GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: notify_net_dead DEKLARATION: void notify_net_dead(object who, int flag, int mode) BESCHREIBUNG: Wird ein Spieler zur Statue, so wird diese Funktion mit dem Spieler als Parameter in allem, was er dabei hat, in allem, was in seiner Umgebung liegt, in seiner Umgebung selber, bei allen fuer "notify_net_dead" am Spieler eingetragenen Controllern sowie bei allen eingetragenen "followern" (siehe "add_follower") aufgerufen. flag und mode werden derzeit mit dem Parameter NND_DEFAULT (=0, /sys/player.h) vorbelegt. Die Verfolger gelten als veraltet; man sollte stattdessen die Controller nutzen. Zerfaellt die Statue, so wird uebrigens notify_quit (siehe dort) auch aufgerufen. VERWEISE: notify_quit, notify_login GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: notify_login DEKLARATION: void notify_login(object who, int flag, int mode) BESCHREIBUNG: Wenn ein Spieler sich neu einloggt oder Statue war, dann wird beim (Wieder-)Einloggen diese Funktion mit dem Spieler als Parameter in allem, was er dabei hat, in allem, was in seiner Umgebung liegt, in seiner Umgebung selber, bei allen fuer "notify_login" am Spieler eingetragenen Controllern sowie bei allen eingetragenen "followern" (siehe "add_follower") aufgerufen. Die Verfolger gelten als veraltet; man sollte stattdessen die Controller nutzen. Fuer Flag werden folgende Werte aus /sys/player.h genutzt: NL_LOGON : Spieler loggt sich ein NL_STATUE : Spieler war nur Statue Fuer Mode werden folgende Werte aus /sys/player.h verwendet: NL_DEFAULT Normaler Logon. NL_ARMAGEDDON Der erste Login nach einem Armageddon. NL_STADT Der Spieler hat sich vorher mit ende stadt ausgeloggt. NL_START Der Spieler hat sich vorher mit ende start ausgeloggt. NL_PORTAL_ENTER Ein Spieler aus einem anderen Mud betritt dieses Mud. NL_PORTAL_REENTER Ein Spieler kehrt in dieses Mud zurueck. VERWEISE: notify_net_dead, notify_quit GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: query_statue_time DEKLARATION: int query_statue_time BESCHREIBUNG: Liefert, seit wann ein Spieler bereits eine Statue ist. Will man wissen, wie lange ein Spieler eine Statue ist, so erhaelt man dies mit time() - player->query_statue_time(). VERWEISE: time, notify_quit GRUPPEN: spieler SOURCE: /i/player/login.c FUNKTION: set_kein_verbrauch DEKLARATION: void set_kein_verbrauch(int Flag) BESCHREIBUNG: Schaltet den Nahrungs- und Wasserverbrauch eines Spielers an oder aus. Bei Flag 0 wird der Verbrauch angeschaltete, bei allem anderen aus. VERWEISE: query_kein_verbrauch GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: query_kein_verbrauch DEKLARATION: int query_kein_verbrauch() BESCHREIBUNG: Liefert 1, wenn der Verbrauch des Spielers abgeschaltet ist, sonst 0. VERWEISE: set_kein_verbrauch GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: query_headache DEKLARATION: int query_headache() BESCHREIBUNG: Liefert den Kopfschmerzfaktor des Spielers. :-) VERWEISE: query_headache, add_alc GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: add_headache DEKLARATION: void add_headache(int Schmerzfaktor) BESCHREIBUNG: Verschafft einem Spieler fuer eine gewisse Zeit gewaltige Kopfschmerzen. Werte ueber 10 sind nicht nett... Geister kriegen keine Kopfschmerzen. VERWEISE: query_headache, add_alc GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: query_alc DEKLARATION: int query_alc() BESCHREIBUNG: Diese Funktion liefert, wie betrunken ein Spieler ist. VERWEISE: query_wp, query_fp, add_alc, has_enough_alc GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: query_max_alc DEKLARATION: int query_max_alc() BESCHREIBUNG: Liefert, wieviel Alkokol der Spieler maximal vertraegt. VERWEISE: query_alc, add_alc, has_enough_alc GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: has_enough_alc DEKLARATION: int has_enough_alc(int alc) BESCHREIBUNG: Mit dieser Funktion kann man abfragen, ob der Spieler noch in der Lage ist, die Menge Alkohol zu sich zu nehmen. Wenn sie 1 returned, kann der Spieler diese Menge nicht mehr trinken. VERWEISE: query_alc, add_alc, query_max_alc, has_enough_wp, has_enough_fp GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: add_alc DEKLARATION: int add_alc(int alc) BESCHREIBUNG: Diese Funktion addiert den Alkoholpegel hoch, oder runter. Es wird 1 returned, wenn der Spieler die Menge noch trinken konnte. Geister koennen nicht betrunken werden. VERWEISE: query_alc, query_max_alc, has_enough_alc, add_wp, add_fp GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: query_fp DEKLARATION: int query_fp() BESCHREIBUNG: Diese Funktion liefert die Food-Points, d.h. wie hungrig der Spieler ist. VERWEISE: query_wp, query_alc, add_fp, has_enough_fp GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: query_wp DEKLARATION: int query_wp() BESCHREIBUNG: Diese Funktion liefert die Water-Points, d.h. wie durstig der Spieler ist. VERWEISE: query_fp, query_alc, add_wp, has_enough_wp GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: has_enough_wp DEKLARATION: int has_enough_wp(int wp) BESCHREIBUNG: Mit dieser Funktion kann man abfragen, ob der Spieler noch in der lage ist, die Menge Wasser zu sich zu nehmen. Wenn sie 1 returned, kann der Spieler diese Menge nicht mehr trinken. VERWEISE: query_wp, add_wp, has_enough_alc, has_enough_fp GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: add_wp DEKLARATION: int add_wp(int wp) BESCHREIBUNG: Diese Funktion addiert den Wasserpegel hoch, oder runter. Es wird 1 returned, wenn der Spieler die Menge noch trinken konnte. Bei Geistern aendert sich der Durst nicht. VERWEISE: query_wp, has_enough_wp, add_alc, add_fp GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: has_enough_fp DEKLARATION: int has_enough_fp(int fp) BESCHREIBUNG: Mit dieser Funktion kann man abfragen, ob der Spieler noch in der lage ist, die Menge Essen zu sich zu nehmen. Wenn sie 1 returned, kann der Spieler diese Menge nicht mehr essen. VERWEISE: query_fp, add_fp, has_enough_alc, has_enough_wp GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: add_fp DEKLARATION: int add_fp(int fp) BESCHREIBUNG: Diese Funktion addiert den Essenspegel hoch, oder runter. Es wird 1 returned, wenn der Spieler die Menge noch essen konnte. Geister werden nicht satt. VERWEISE: query_fp, has_enough_fp, add_alc, add_wp GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: add_temperatur_schutz DEKLARATION: void add_temperatur_schutz(int a) BESCHREIBUNG: Mit dieser Funktion kann man den Schutz gegen Temperaturen aendern. VERWEISE: query_temperatur_schutz GRUPPEN: spieler, kleidung SOURCE: /i/player/magen.c FUNKTION: query_temperatur_schutz DEKLARATION: int query_temperatur_schutz() BESCHREIBUNG: Mit dieser Funktion kann man den Schutz gegen Temperaturen abfragen. VERWEISE: add_temperatur_schutz GRUPPEN: spieler, kleidung SOURCE: /i/player/magen.c FUNKTION: set_fp DEKLARATION: void set_fp(int fp) BESCHREIBUNG: Setzt die Food-Points eines Spielers auf fp. VERWEISE: query_fp, add_fp, has_enough_fp GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: set_wp DEKLARATION: void set_wp(int wp) BESCHREIBUNG: Setzt die Water-Points eines Spielers auf wp. VERWEISE: query_wp, add_wp, has_enough_wp GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: set_alc DEKLARATION: void set_alc(int alc) BESCHREIBUNG: Setzt die Alc-Points eines Spielers auf alc, sofern alc unter query_max_alc liegt, andernfalls auf query_max_alc. VERWEISE: query_alc, add_alc, has_enough_alc, query_max_alc GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: set_headache DEKLARATION: void set_headache(int Schmerzfaktor) BESCHREIBUNG: Setzt die Headache-Points eines Spielers auf Schmerzfaktor. VERWEISE: query_headache, add_headache GRUPPEN: spieler, nahrung SOURCE: /i/player/magen.c FUNKTION: more DEKLARATION: string more({string file | string *text} [, mixed status [, int begin_line [, int status_byte [, mixed more_id]]]] ) BESCHREIBUNG: Diese Funktion ist dazu da, ein File oder sonstigen Text anzuzeigen. Der Returnwert ist ein String. M_ERR(ret) ist die Fehlermeldung als String. M_ERR_NUM(ret) ist der Fehlercode (definiert in ) Wenn der 1. Parameter ein String ist, wird das File file angezeigt. Falls es ein String-Array ist, wird das Feld angezeigt. Man kann hoch und runterblaettern. Wenn status angegeben wird, dann werden Standardzeilen ueberlagert. status kann folgendes Format haben: - Ein String: Die Statuszeile, das 1. %d wird durch die momentane Zeile, das 2. %d durch die Anzahl an Zeilen ersetzt. - Eine Closure: Es wird funcall(status,more_line,max_line,more_id) aufgerufen und danach die %d's wie beim String ersetzt. - Ein Array: ({Statuszeile, Obere Linie, Untere Linie, Mittlere Linie oben, Mittlere Linie unten}) (Die hinteren Elemente koennen weggelassen werden.) Statuszeile: String oder Closure wie oben Obere Linie: Bei M_FRAME oder M_HEADER_LINE die erste Zeile Untere Linie: Bei M_FRAME oder M_HEADER_LINE die unterste Zeile Mittlere Linie oben: Bei M_HEADER_LINE die erste Zeile der Ausgabe Untere Linie unten: Bei M_HEADER_LINE die letzte Zeile der Ausgabe Fuer jede Eingabe vom Benutzer wird im previous_object() die Funktion 'more_action(string eingabe, int line, int max_line, mixed more_id)' aufgerufen, wobei eingabe die Eingabe des Benutzers ist. Je nachdem, was diese Funktion returned (siehe /sys/more.h) reagiert der more anders. Wenn der more beendet wird, wird im previous_object() die Funktion 'more_end(string eingabe, int line, int max_line, mixed more_id)' aufgerufen. Diese Features werden z.B. in /obj/newsreader.c und /obj/mailreader.c verwendet begin_line gibt an, an welche Stelle im File gesprungen werden soll. Wenn begin_line negativ ist, wird die Zeile vom Fileende her angesprungen. BEISPIEL: player ist ein Objektzeiger auf einen Spieler: Einfachster Fall: der Spieler bekommt eine Datei angezeigt: player->more("/doc/hilfe/goetter"); Dasselbe mit der Meldung "--Mehr--" nach jeder Seite: player->more("/doc/hilfe/goetter", "--Mehr--"); Der Spieler bekommt ein String-Array angezeigt (Strings gehen nicht!), es wird erst bei Zeile 5 begonnen, der more endet mit Erreichen der letzten Zeile, der informative String "[Zeile 20 von 70]" wird nach jeder (ausser der letzten) Seite ausgegeben. player->more(({"Hier steht ein haufen Zeug drin:", "blabla", .... }), "[Zeile %d von %d, weiter mit Return]", 5, M_AUTO_END); VERWEISE: cat, tail, set_more_chunk, query_more_chunk, query_current_line, query_max_line, query_more_file GRUPPEN: Dateien SOURCE: /i/player/more.c FUNKTION: query_more_chunk DEKLARATION: int query_more_chunk() BESCHREIBUNG: Mit dieser Funktion kann man abfragen, nach wievielen Zeilen beim more gewartet wird. VERWEISE: more,set_more_chunk GRUPPEN: Dateien SOURCE: /i/player/more.c FUNKTION: set_more_chunk DEKLARATION: void set_more_chunk(int chunk) BESCHREIBUNG: Mit dieser Funktion kann man setzen, nach wievielen Zeilen beim more gewartet wird. VERWEISE: more,query_more_chunk GRUPPEN: Dateien SOURCE: /i/player/more.c FUNKTION: query_in_more DEKLARATION: int query_in_more() BESCHREIBUNG: Liefert 1, wenn gerade ein more() laeuft, 0 anderenfalls. VERWEISE: more GRUPPEN: Dateien SOURCE: /i/player/more.c FUNKTION: add_options_menue DEKLARATION: nomask varargs void add_options_menue(string name, closure menuefun | object ob[, string menuefun]) BESCHREIBUNG: Damit meldet man ein weiteres Menue mit Einstellungsmoeglichkeiten an. 'name' ist dabei der Text, der im Hauptmenue ausgegeben wird. Wurde dieses Menue ausgewaehlt, so wird dann ob->menuefun() bzw. funcall(menuefun) aufgerufen. Die Funktion ist von da an fuer die Eingaben zustaendig und sollte beim Ruecksprung dann this_player()->start_options_menue() aufrufen. Falls Parameter fehlen, so wird previous_object() und "start_options_menue" genommen. Folgende Richtlinien gelten fuer Menues: - Sie sollten den Menues des Players aehneln. Man sollte also nicht erkennen, dass nun ein anderes Objekt fuer das Menue zustaendig ist. - Ruecksprung mit dem Befehl 'z'. - Mit dem Befehl 'q' sollte es beendet werden koennen. - '?' sollte eine Erklaerung zu allen Einstellungen anbieten. (Mit print_options_help steht eine Funktion zur Verfuegung die einen entsprechenden Hilfe-Text anzeigt.) - Die Standard-More-Befehle r, <, > sollten nicht ueberlagert werden. VERWEISE: delete_options_menue, start_options_menue, print_options_help, add_options_action GRUPPEN: spieler SOURCE: /i/player/options.c FUNKTION: delete_options_menue DEKLARATION: nomask void delete_options_menue(string name) BESCHREIBUNG: Damit wird ein Menue aus der Liste aller Menues mit Einstellungen entfernt. VERWEISE: add_options_menue GRUPPEN: spieler SOURCE: /i/player/options.c FUNKTION: add_options_action DEKLARATION: nomask varargs void add_options_action(string name, string cmd, int flag, closure fun | object ob[, string fun]) BESCHREIBUNG: Hiermit meldet man eine Behandlungsroutine fuer Kommandozeilenoptionen an. 'name' ist eine Beschreibung, welche in der Hauptuebersicht ausgegeben wird. 'cmd' und 'flag' entsprechen in ihrem Sinn den Parametern von add_action. Passt ein Parameter auf diese Option, so wird ob->fun(string rest) bzw. funcall(fun, rest) aufgerufen. Falls 'ob' fehlt, wird previous_object() genommen; falls 'fun' fehlt, wird 'cmd' stattdessen genommen. Es gelten folgende Richtlinien fuer diese Kommandozeilenoptionen: - Die Verben sollten einzigartig sein, d.h. man sollte nicht andere Verben der Einstellungen ueberlagern. - Flag sollte <= 0 sein (siehe add_action) - Es sollte auf ? als Reststring mit einem geeigneten Hilfetext reagiert werden. - Jede Option, auf welche ueber die Kommandozeile zugegriffen werden kann, sollte ebenfalls in einem Menue erscheinen. VERWEISE: delete_options_action, add_options_menue, add_action GRUPPEN: spieler SOURCE: /i/player/options.c FUNKTION: delete_options_action DEKLARATION: nomask void delete_options_action(string cmd) BESCHREIBUNG: Damit wird eine Behandlungsroutine fuer Kommandozeilenoptionen aus der Liste aller Routinen entfernt. VERWEISE: add_options_action GRUPPEN: spieler SOURCE: /i/player/options.c FUNKTION: print_options_help DEKLARATION: nomask void print_options_help(int quiet, string filename, string command, closure callback, mixed parameter) BESCHREIBUNG: Zeigt die Hilfe zu einem bestimmten Einstellungsmenue oder zu einer bestimmten Einstellung an. Ist quiet == 1, so wird erstmal nur die Statuszeile ausgegeben. (Dies ist sinnvoll, falls man eine Meldung ausgeben will und gleichzeitig in dieses Menue springen will.) filename ist der Name der Datei mit den Hilfetexten. Diese Datei muss folgenden Aufbau haben: Am Anfang kommen ein paar Zeilen mit einer allgemeinen Erklaerung des Menues. Diese Zeilen sind nicht eingerueckt. Danach folgt eine Leerzeile. Dann die Beschreibung eines Abschnittes des Menues, wobei die erste Zeile Mit einem Leerzeichen eingerueckt ist und alle nachfolgenden Zeilen mit mindestens 2 Leerzeichen. Danach folgt eine Leerzeile Befehl: Der Befehl und seine Beschreibung Der Befehl muss mit genau 3 Leerzeichen eingerueckt sein und von einem Doppelpunkt und mindestens einem Leerzeichen gefolgt sein. Alle weiteren Zeilen muessen mit mindestens 2 Leerzeichen eingerueckt werden. Alle Abschnitte und Befehle muessen mit mindestens einer Leerzeile voneinander getrennt sein. Der Parameter command gibt (falls nicht 0 und nicht leer) einen Befehl an, dessen Hilfe ausschliesslich angezeigt werden soll. Wenn man aus diesem Hilfemenue zurueckkehrt, wird funcall(callback, quiet, parameter) aufgerufen, wobei quiet dann angibt, ob das neue Menue sofort neu ausgegeben werden soll (==0) oder erstmal nur die Statuszeile (==1). VERWEISE: add_options_menue, print_color_options GRUPPEN: spieler SOURCE: /i/player/options.c FUNKTION: start_options_menue DEKLARATION: nomask varargs void start_options_menue(int quiet) BESCHREIBUNG: Gibt das Hauptmenue fuer die Einstellungen aus. Ist quiet == 1, so wird erstmal die Eingabe des Spielers abgewartet. (Dies ist sinnvoll, falls ein Untermenue einen Fehler ausgeben moechte und gleichzeitig wieder ins Hauptmenue zurueckspringen will.) VERWEISE: add_options_menue, delete_options_menue GRUPPEN: spieler SOURCE: /i/player/options.c FUNKTION: print_color_options DEKLARATION: nomask void print_color_options(int quiet, string name, int color, closure setfunction, closure parentmenue, mixed parameter) BESCHREIBUNG: Zeigt dem Spieler ein Farbauswahlmenue an. Ist quiet == 1, so wird erstmal die Eingabe des Spielers abgewartet. (Dies ist sinnvoll, falls man eine Meldung ausgeben moechte und gleichzeitg in dieses Menue springewn will.) name ist der Name dieser Farboption und wird in der Statuszeile ausgegeben. color ist die derzeitige Farbe. Wurde die Farbe geaendert, so wird funcall(setfunction, neue_farbe, parameter) aufgerufen. Dies geschieht unmittelbar bei jeder Aenderung, nicht erst nach Beendigung des Menues. Wurde das Menue beendet, so wird funcall(parentmenue, parameter) aufgerufen. VERWEISE: add_options_menue, delete_options_menue, start_options_menue GRUPPEN: spieler SOURCE: /i/player/options.c FUNKTION: query_age DEKLARATION: nomask int query_age() BESCHREIBUNG: Diese Funktion liefert das Alter des Spielers. GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: notify_birth DEKLARATION: void notify_birth(object player) BESCHREIBUNG: Wenn ein neuer Spieler player sich einloggt, dann wird CONTROL->notify("birth", player) aufgerufen. Blueprints koennen sich an CONTROL anmelden, um dies mitzubekommen. Siehe dazu auch die Kommentare am Anfang von /apps/control.c VERWEISE: notify, notify_login GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: filter_message DEKLARATION: int filter_message(int msg_type, int msg_action) BESCHREIBUNG: Diese Funktion wird aufgerufen, um herauszufinden ob eine Message vom Spieler oder NPC empfangen werden darf. Es liefert 1, wenn die Meldung unterdrueckt werden soll. Eine ueberlagernde Funktion sollte aber niemals direkt 0 liefern, sondern den Aufruf an die ueberlagerten weiterreichen. Um zu verhindern, dass ein Spieler z.B. etwas hoeren kann, ueberlagert man filter_message folgendermassen: int filter_message(int msg_type, int msg_action) { if(msg_action == MA_EMOTE) // Kein Unfug heute. return 1; return query_shadow_owner()->filter_message(msg_type, msg_action); } VERWEISE: send_message, send_message_to, query_messages_filter GRUPPEN: message, spieler, monster SOURCE: /i/player/player.c FUNKTION: query_client_width DEKLARATION: int query_client_width() BESCHREIBUNG: Diese Funktion liefert die Breite des MUD-Client-Fensters zurueck, oder 0, falls sie unbekannt ist. VERWEISE: query_client_height GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_client_height DEKLARATION: int query_client_height(int full) BESCHREIBUNG: Diese Funktion liefert die Anzahl an Zeilen des MUD-Client-Fensters urueck, oder 0, falls sie unbekannt ist. Falls full=1 so werden fuer die getrennte Eingabezeile reserverte Bereiche ignoriert (ansonsten bei full=0 von der tatsaechlichen Anzahl abgezogen). VERWEISE: query_client_height GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_messages_filter DEKLARATION: int query_messages_filter() BESCHREIBUNG: Diese Funktion wird aufgerufen, um herauszufinden ob eine Message vom Spieler empfangen werden darf. Um zu verhindern, dass ein Spieler z.B. etwas hoeren kann, ueberlagert man query_messages_filter() folgendermassen: int query_messages_filter() { return query_shadow_owner()->query_messages_filter() | MT_NOISE; } VERWEISE: send_message, send_message_to, filter_message GRUPPEN: message, spieler SOURCE: /i/player/player.c FUNKTION: query_no_retain DEKLARATION: string query_no_retain() BESCHREIBUNG: Antwortet ein Objekt auf die Frage query_no_retain() mit etwas anderem als 0, so behaelt ein Spieler, der sich ausloggt, das Objekt nicht bei sich. Wenn es moeglich ist, so wird es in den Raum gelegt, in welchem sich der Spieler befindet, selbst dann, wenn der Spieler es in geschlossenen Taschen oder Rucksaecken aufbewahrt. Ist dies aus irgendeinem Grunde nicht moeglich, weil sich beispielsweise ein Container, in welchem sich das Objekt befindet, nicht oeffnen laesst, so wird es zerstoert. Der Rueckgabewert dieser Funktion ist ein String, welcher dem Spieler beim naechsten Einloggen erklaeren soll, warum der Gegenstand weg ist. Diese Funktion ist sehr sparsam einzusetzen und sollte wirklich nur fuer ganz besondere Objekte verwendet werden. Also NICHT fuer besonders gute Waffen. Es sollte dem Spieler, wenn er das Mud wieder betritt und den Gegenstand nicht mehr vorfindet, logisch erscheinen, dass er weg ist. So koennte man sich beispielsweise bei einer Taube, die der Spieler genommen hat, vorstellen, dass sie weggeflogen ist. Beispiel: string query_no_retain() { return "Die Taube scheint Dir davongeflogen zu sein."; } Will man keine Meldung haben, aber dennoch erreichen, dass der Gegenstand nicht behalten wird, so liefert man einfach "" als Antwort. VERWEISE: notify_quit GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: notify_quit DEKLARATION: void notify_quit(object who, int flag, int mode) BESCHREIBUNG: Verlaesst ein Spieler das MUD so wird diese Funktion mit dem Spieler als Parameter in allem, was er dabei hat, in allem, was in seiner Umgebung liegt, in allen per add_follower eingetragenen Verfolgern, in allen fuer "notify_quit" beim Spieler angemeldeten Controllern sowie in seiner Umgebung aufgerufen. Diese Funktion wird auch aufgerufen, wenn die Statue eines Spielers zerfaellt oder er sich suizidet. Die Verfolger und damit der Aufruf dieser Funktion bei ihnen gelten als veraltet. Man sollte die Controller dafuer nutzen. Fuer Flag werden folgende Werte aus /sys/player.h genutzt: NQ_ENDE : Spieler hat 'ende' eingegeben NQ_NETZTOT : Spieler war netztot und zerfaellt jetzt zu Staub NQ_SUIZID : Spieler hat sich suizidet Fuer Mode werden folgende Werte aus /sys/player.h verwendet: NQ_KEIN_ENDE : Ein systemseitiges Beenden (siehe flag) NQ_ENDE_BLANK : Ende wurde ohne Parameter angegeben. NQ_ENDE_STADT : ende stadt wurde angegeben NQ_ENDE_START : ende start wurde angegeben NQ_PORTAL_LEAVE : Ein Spieler aus einem anderen Mud verlaesst dieses Mud. NQ_PORTAL_TRAVEL : Ein spieler aus diesem Mud reist in ein anderes Mud. VERWEISE: notify_net_dead, notify_login GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_start_room DEKLARATION: nomask mixed query_start_room() BESCHREIBUNG: Die Funktion liefert den zuletzt fuer den Spieler ermittelten Startraum. Das ist entweder ein String (Objektname des Raumes) oder ein String-Array (mehrere Startraum-Alternativen, die der Reihe nach durchprobiert werden). Bei Spielern wird dieser Wert bei jedem Logout ueberschrieben. Die Funktion dient nur zu Debugzwecken. GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: set_start_room DEKLARATION: void set_start_room(mixed start) BESCHREIBUNG: Diese Funktion setzt den Raum, in dem der Spieler das Spiel beginnt. Der Wert wird beim Logout ueberschrieben und kann hoechstens in notify_quit nochmals geaendert oder per Shadow beeinflusst werden. Die Benutzung des Raumtyps "startraum" ist dem jedoch vorzuziehen. Goetter koennen sich mit dieser Funktion einen neuen Default-Raum setzen, wenn sie sich nicht extra dafuer mit 'ende hier' ausloggen wollen. GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_additional_condition_string DEKLARATION: string query_additional_condition_string() BESCHREIBUNG: Der Befehl 'spielstand' ruft diese Funktion im Player auf, um zusaetzliche Infos, welche im Spielstand direkt unter der Ausdauerpunkte- anzeige gezeigt werden sollen, abzufragen. Shadows koennen diese Funktion ueberlagern, um selber Infos im sp unterzubringen. Diese Funktion sollte sehr sparsam eingesetzt werden, so dass sie eigentlich nur fuer Gildenshadows interessant ist. GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_scar_description DEKLARATION: string query_scar_description() BESCHREIBUNG: Liefert einen String zurueck, der alle Narben des Spielers beschreibt. VERWEISE: query_scar, make_scar, delete_scar GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_scar DEKLARATION: int query_scar() BESCHREIBUNG: query_scar Liefert eine Zahl zurueck, in der die Narben eines Spielers bitweise codiert sind. Es sind maximal 10 Narben moeglich, d.h. ein Spieler mit 10 Narben liefert auf player->query_scar() 2 hoch 9 zurueck. VERWEISE: query_scar_description, make_scar, delete_scar GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: make_scar DEKLARATION: void make_scar() BESCHREIBUNG: Setzt zufaellig eine neue Narbe an dem Spieler. VERWEISE: query_scar, delete_scar, query_scar_description GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: delete_scar DEKLARATION: void delete_scar(int Nummer) BESCHREIBUNG: delete_scar loescht eine Narbe an der Bitposition Nummer, d.h., wenn ein Spieler query_scar() 8 hat, dann kann man diese eine Narbe mit delete_scar(4) loeschen. VERWEISE: query_scar, make_scar, query_scar_description GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: become_aggression_victim DEKLARATION: nomask varargs void become_aggression_victim(mixed aggressor, int flags) BESCHREIBUNG: ACHTUNG: Aufrufe dieser Funktion muessen mit den Admins abgestimmt werden! Diese Funktion wird im Spieler aufgerufen, wenn er Opfer eines Angriffs von aggressor wurde. Sie dient lediglisch zur Buchfuehrung fuer die (M)-Regelung. aggressor kann ein String (real_name oder real_cap_name eines Spielers) oder ein Objekt sein. Falls dieses Objekt kein Spieler ist, wird geprueft, ob dieses Objekt von einem Spieler kontrolliert wurde. Es koennen folgende Flags (definiert in add_hp.h) angegeben werden: AG_SILENT Die Spieler erhalten keine Meldung ueber diesen Angriff in der Spieltstandanzeige. (Dies ist fuer Angriffe, bei denen der Angreifer nicht offensichtlich ist.) VERWEISE: add_hp, query_commander GRUPPEN: spieler, kampf SOURCE: /i/player/player.c FUNKTION: ist_notwehr DEKLARATION: private int ist_notwehr(mixed gegner) BESCHREIBUNG: Diese Funktion wird aufgerufen, wenn die Todesursache bzw. Todesmeldung ermittelt werden muss. Sie schaut, ob dieser Spieler in Notwehr von gegner getoetet wurde. Rueckgabewert: 0: Keine Notwehr (ob hat angegriffen) 1: Notwehr (ich habe angegriffen) 2: Rache (ob hat angegriffen, ich aber davor mal) 3: Racheversuch (ich habe angegriffen, ob aber davor mal) VERWEISE: add_hp, die, become_aggression_victim GRUPPEN: Root:Player:Tod SOURCE: /i/player/player.c FUNKTION: query_erf_tod_message DEKLARATION: varargs mixed query_erf_tod_message(object victim, mapping infos) BESCHREIBUNG: Das Ergebnis dieser Funktion in dem als Todesursache ermittelten Objekt wird statt einer Standardmeldung als Text fuer 'erf tod' genommen, falls keine explizite Meldung bei add_hp angegeben wurde. Es kann sowohl ein String zurueckgegeben werden, welcher die Meldung fuer den Spieler selbst darstellt, oder ein Mapping mit den Eintraegen AH_ERF_TOD, AH_ERF_TOD_OTHER und/oder AH_ERF_RETTUNG, welche die Meldung fuer den Spieler, fuer alle anderen bzw. fuer alle anderen bei einer Rettung darstellen. VERWEISE: set_erf_tod_message, add_hp GRUPPEN: spieler, kampf SOURCE: /i/player/player.c FUNKTION: query_ghost DEKLARATION: int query_ghost() BESCHREIBUNG: Diese Funktion zeigt an, ob der Spieler ein Geist ist, d.h. ob er gerade gestorben ist, und noch nicht in der Kirche gebetet hat. VERWEISE: set_ghost, add_ghost, query_kirche GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_kirche DEKLARATION: string query_kirche() BESCHREIBUNG: Wenn der Spieler ein Geist in der Todessequenz ist, liefert diese Funktion die Kirche zurueck, in welcher er danach befoerdert wird. VERWEISE: set_ghost, add_ghost, query_ghost, set_kirche GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: add_ghost DEKLARATION: void add_ghost(int i) BESCHREIBUNG: Mit dieser Funktion kann man den Zaehler, der fuer die Meldungen beim TOD zustaendig ist veraendern. VERWEISE: set_ghost, query_ghost GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: set_ghost DEKLARATION: void set_ghost(int i) BESCHREIBUNG: Mit dieser Funktion kann man den Zaehler, der fuer die Meldungen beim TOD zustaendig ist setzen. VERWEISE: add_ghost, query_ghost GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_konto DEKLARATION: int query_konto() BESCHREIBUNG: Diese Funktion liefert den Kontostand des Spielers zurueck. VERWEISE: set_konto, add_konto, query_konto_age, set_konto_age GRUPPEN: spieler, handel SOURCE: /i/player/player.c FUNKTION: set_konto DEKLARATION: void set_konto(int a) BESCHREIBUNG: Mit dieser Funktion kann man den Kontostand des Spielers setzten. VERWEISE: query_konto, add_konto, query_konto_age, set_konto_age GRUPPEN: spieler, handel SOURCE: /i/player/player.c FUNKTION: add_konto DEKLARATION: void add_konto(int a) BESCHREIBUNG: Mit dieser Funktion kann man den Kontostand des Spielers veraendern. VERWEISE: query_konto, set_konto, query_konto_age, set_konto_age GRUPPEN: spieler, handel SOURCE: /i/player/player.c FUNKTION: query_konto_age DEKLARATION: int query_konto_age() BESCHREIBUNG: Mit dieser Funktion kann man das Alter des Spielers in Sekunden abfragen, zu dem Zeitpunkt, als der Spieler das letzte Mal etwas vom Konto abgehoben oder darauf eingezahlt hat. VERWEISE: set_konto_age GRUPPEN: spieler, handel SOURCE: /i/player/player.c FUNKTION: set_konto_age DEKLARATION: void set_konto_age(int alter) BESCHREIBUNG: Mit dieser Funktion setzt man das Alter des Spielers zu dem Zeitpunkt, als der Spieler zuletzt etwas auf seinem Konto macht. (Alter in Sekunden, wird von /i/money/banking verwendet). VERWEISE: query_konto_age GRUPPEN: spieler, handel SOURCE: /i/player/player.c FUNKTION: query_opfer DEKLARATION: nomask string *query_opfer() BESCHREIBUNG: Diese Funktion liefert ein Feld mit den Namen der Spieler, die der Spieler ermordet hat. VERWEISE: query_one_opfer, query_moerder GRUPPEN: spieler, kampf SOURCE: /i/player/player.c FUNKTION: query_one_opfer DEKLARATION: nomask int query_one_opfer(string name) BESCHREIBUNG: Mit dieser Funktion kann man abfragen, ob der Spieler den Spieler ermordet hat. VERWEISE: query_opfer, query_moerder GRUPPEN: spieler, kampf SOURCE: /i/player/player.c FUNKTION: query_moerder DEKLARATION: nomask int query_moerder() BESCHREIBUNG: Mit dieser Funktion kann man abfragen, ob der Spieler ein Moerder ist. 1 == Moerder 0 == keiner (oder Gott, da kommt immer 0 ;-) VERWEISE: query_opfer, query_one_opfer GRUPPEN: spieler, kampf SOURCE: /i/player/player.c FUNKTION: set_home_msg DEKLARATION: void set_home_msg(string home_msg) BESCHREIBUNG: Setzt die Meldung, die die anderen im Raum bekommen, wenn ein Gott heimgeht. Dieser Befehl ist nur bei Goettern interessant und laesst sich auch mit dem Befehl 'zet home_msg ' erreichen.... Psuedoclosures (das sind die Dinger mit dem $, zb $der() ) sind erlaubt. VERWEISE: query_home_msg, set_clone_msg, set_destruct_msg GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_home_msg DEKLARATION: string query_home_msg() BESCHREIBUNG: Liefert die mit set_home_msg() gesetzte Meldung zurueck. VERWEISE: set_home_msg, set_clone_msg, set_destruct_msg GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: set_clone_msg DEKLARATION: void set_clone_msg(string clone_msg) BESCHREIBUNG: Setzt die Meldung, die die anderen im Raum bekommen, wenn ein Gott ein Objekt erschafft. Dieser Befehl ist nur bei Goettern interessant und laesst sich auch mit dem Befehl 'zet clone_msg ' erreichen... Psuedoclosures (das sind die Dinger mit dem $, zb $der() ) sind erlaubt. VERWEISE: set_home_msg, query_clone_msg, set_destruct_msg GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_clone_msg DEKLARATION: string query_clone_msg() BESCHREIBUNG: Liefert die mit set_clone_msg() gesetzte Meldung zurueck. VERWEISE: set_home_msg, set_clone_msg, set_destruct_msg GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: set_destruct_msg DEKLARATION: void set_destruct_msg(string destruct_msg) BESCHREIBUNG: Setzt die Meldung, die die anderen im Raum bekommen, wenn ein Gott ein Objekt zerstoert. Die Meldung wird nur abgesetzt, wenn das zu zerstoerende Objekt im Gott oder im selben Raum ist, sonst wird gar keine Meldung erzeugt. Dieser Befehl ist nur bei Goettern interessant und laesst sich auch mit dem Befehl 'zet destruct_msg ' erreichen... Psuedoclosures (das sind die Dinger mit dem $, zb $der() ) sind erlaubt. VERWEISE: set_home_msg, set_clone_msg, query_destruct_msg GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_destruct_msg DEKLARATION: string query_destruct_msg() BESCHREIBUNG: Liefert die mit set_destruct_msg() gesetzte Meldung zurueck. VERWEISE: set_home_msg, set_clone_msg, set_destruct_msg GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_no_wer DEKLARATION: int query_no_wer() BESCHREIBUNG: Liefert 1, wenn der Spieler nicht in der Wer-Liste auftauchen soll, sonst 0. VERWEISE: set_no_wer GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: set_no_wer DEKLARATION: int set_no_wer(int no_wer) BESCHREIBUNG: Setzt bei einem Gott, ob er in der Wer-Liste auftauchen soll: 1 : Der Gott soll nicht auftauchen 0 : der Gott soll in der Wer-Liste auftauchen. Bei Erfolg wird 1 returnt. Man darf die Funktion nur bei sich selbst aufrufen, angewandt auf einen anderen Spieler bleibt diese Funktion erfolglos. VERWEISE: query_no_wer GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_description DEKLARATION: string query_description() BESCHREIBUNG: Mit dieser Funktion kann man das Aussehen eines Spielers als Ganzes abfragen. VERWEISE: query_one_description GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_one_description DEKLARATION: string query_one_description(int merkmalsnummer) BESCHREIBUNG: Mit dieser Funktion kann ein einzelnes Merkmal des Aussehens eines Spielers abgefragt werden. Die int - Konstanten hierfuer sind in /sys/player_description.h zu finden. Das Ueberlagern per Shadow ist priviligiert. BEISPIEL: tell_object (opfer,wrap (Der(this_player())+" mustert Dich mit " +seinem((["name":"augen","gender":"saechlich","plural":1]), this_player()->query_one_description (D_AUGENFARBE), this_player()) +" von oben bis unten.")); VERWEISE: query_description GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: set_one_description_source DEKLARATION: nomask void set_one_description_source(int merkmalsnummer, int wert) BESCHREIBUNG: Mit dieser Funktion kann ein einzelnes Merkmal des Aussehens eines Spielers gesetzt werden. Die Konstanten fuer merkmalsnummer sind in /sys/player_description.h zu finden. Diese Funktion ist durch ein Mudlib-Privileg geschuetzt. Sie darf also nur von ganz bestimmten Objekten aufgerufen werden. VERWEISE: query_one_description GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: set_no_airport DEKLARATION: int set_no_airport(int i) BESCHREIBUNG: Wird hiermit das no_airport Flag des Players auf 1 gesetzt, so kann er nicht mehr von HLPs angeflogen werden. VERWEISE: query_no_airport GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_no_airport DEKLARATION: int query_no_airport() BESCHREIBUNG: Hiermit kann abgefragt werden, ob ein Spieler von HLPs angeflogen werden kann. VERWEISE: set_no_airport GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: add_init_ob DEKLARATION: void add_init_ob(object ob) BESCHREIBUNG: Wenn einem Spieler oder einem Monster mit dieser Funktion ein Objekt uebergeben wurde, so wird in diesem Objekt die Funktion "player_init" bei Spielern und "monster_init" bei Monstern aufgerufen, wenn ein Lebewesen den gleichen Raum betritt. Es wird ein Objekt - Zeiger auf das den Raum betretende Lebewesen uebergeben, der Spieler bzw. das Monster selbst kann mit previous_object() ermittelt werden. VERWEISE: delete_init_ob, player_init, monster_init, set_init_ob (veraltet). GRUPPEN: spieler, monster SOURCE: /i/player/player.c FUNKTION: delete_init_ob DEKLARATION: void delete_init_ob(object ob) BESCHREIBUNG: Mit dieser Funktion kann bei einem Spieler oder einem Monster ein Objekt aus der Liste der Objekte herausgeloescht werden, welche aufgerufen werden, wenn ein Lebewesen sich dem Spieler bzw. Monster naehert. VERWEISE: add_init_ob, player_init, monster_init, set_init_ob (veraltet). GRUPPEN: spieler, monster SOURCE: /i/player/player.c FUNKTION: player_init DEKLARATION: void player_init(object ob, object annaeherung) BESCHREIBUNG: Diese Funktion wird in einem Objekt aufgerufen, wenn dieses Objekt bei einem Spieler mittels add_init_ob eingetragen worden ist und sich dem Spieler ein Lebewesen naehert. Die uebergebenen Parameter sind der Spieler selbst sowie das sich dem Spieler naehernde Lebewesen. VORSICHT: Bei dieser Funktion bitte beim Programmieren acht geben. VERWEISE: add_init_ob, delete_init_ob, set_init_ob bei Monstern. GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: monster_init DEKLARATION: void monster_init(object ob, object annaeherung) BESCHREIBUNG: Diese Funktion wird in einem Objekt aufgerufen, wenn dieses Objekt bei einem Monster mittels add_init_ob eingetragen worden ist und sich dem Spieler ein Lebewesen naehert. Der erste Parameter ist das Monster selber, der zweite uebergebene Parameter ist das sich dem Monster naehernde Lebewesen. VERWEISE: add_init_ob, delete_init_ob, player_init, set_init_ob (veraltet). GRUPPEN: monster SOURCE: /i/player/player.c FUNKTION: add_temporal_adjektiv DEKLARATION: nomask varargs void add_temporal_adjektiv(mixed adj, int duration, int front) BESCHREIBUNG: Mit dieser Methode kann bei Spielern eines oder mehrere temporaere Adjektive hinzugefuegt werden, welche spaetestens beim naechsten Einloggen weg sind. adj kann ein String oder ein Stringarray sein. Ist duration > 0, so wird das Adjektiv in duration Sekunden wieder entfernt. Ist front == 1, so wird das Adjektiv am Anfang der Adjektive eingefuegt. Hinweis: Es gibt keine Methode delete_temporal_adjektiv, soll ein temporaeres Adjektiv wieder entfernt werden, so soll dafuer delete_adjektiv verwendet werden. VERWEISE: add_adjektiv, delete_adjektiv, set_adjektiv, query_adjektiv GRUPPEN: spieler, grammatik SOURCE: /i/player/player.c FUNKTION: query_no_ascii_art DEKLARATION: nomask int query_no_ascii_art() BESCHREIBUNG: Diese Funktion liefert, ob man statt ASCII-Graphiken lieber eine textuelle Anzeige haben moechte. Eine solche textuelle Anzeige sollte zur Sprachausgabe geeignet sein (also moeglichst wenig signifikante Sonderzeichen enthalten) und nicht besonders scrollen. VERWEISE: set_no_ascii_art GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: set_no_ascii_art DEKLARATION: nomask int set_no_ascii_art(int no_ascii_art) BESCHREIBUNG: Mit dieser Funktion kann man setzen, ob man statt ASCII-Graphiken lieber eine textuelle Anzeige haben moechte. Diese Option dient zur Unterstuetzung sehbehinderter Spieler und nicht fuer irgendwelche spielerischen Effekte! VERWEISE: query_no_ascii_art GRUPPEN: spieler SOURCE: /i/player/player.c FUNKTION: query_quest_count DEKLARATION: int query_quest_count () BESCHREIBUNG: Liefert die Anzahl der komplett geloesten Raetsel. GRUPPEN: spieler SOURCE: /i/player/skills.c FUNKTION: query_game_count DEKLARATION: int query_game_count () BESCHREIBUNG: Liefert die Anzahl der komplett geloesten Spiele. GRUPPEN: spieler SOURCE: /i/player/skills.c FUNKTION: add_skill_points DEKLARATION: void add_skill_points(string *path, int points) BESCHREIBUNG: Addiert points Punkte im Skillpfad path. Wenn kein gueltiger Pfad angegeben wurde, passiert nichts. Der selbe Befehl ist in zskillad im Zauberstab implementiert. Beispiel: player->add_skill_points( ({"skill","offensiv","haende"}), 400); gibt dem Spieler player 400 Skillpunkte im Handkampf dazu. VERWEISE: get_one_skill GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: query_skill_structure DEKLARATION: mixed *query_skill_structure() BESCHREIBUNG: Liefert ein geschachteltes Array, in dem der geamte Skillbaum eines Spielers steht. VERWEISE: get_one_skill GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: get_one_skill DEKLARATION: int get_one_skill(string *path) BESCHREIBUNG: get_one_skill liefert die Erfahrungspunkte eines Spielers in einer ganz bestimmten Disziplin zurueck. Damit kann man z.b. Schwerter programmieren, die man erst mit einer ganz betimmten Erfahrung fuehren kann... Beispiel if(this_player()->get_one_skill(({"skill","offensiv","scharf","schwert", "langschwert"}))<1000) { this_player()->send_message_to(this_player(), MT_NOTIFY, MA_WIELD, "Dieses Schwert darfst Du nicht fuehren.\n"); return 0; } VERWEISE: add_skill_points GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: query_sum_skill DEKLARATION: int query_sum_skill() BESCHREIBUNG: Liefert die gesamten Erfahrungspunkte eines Spielers zurueck. VERWEISE: get_one_skill GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: query_experience_promille DEKLARATION: int query_experience_promille () BESCHREIBUNG: Diese Funktion liefert zurueck, wieviel Promille der zum Engel bzw. Gott werden benoetigten Erfahrung ein Spieler hat. VERWEISE: query_sum_skill GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: set_other_skill DEKLARATION: void set_other_skill(string keyword, string text, mixed data) BESCHREIBUNG: Mit dieser Funktion kann man einem Spieler einen Eintrag in 'erf sonstiges' geben. Dieser Skill hat keinerlei Einfluss auf die Zahl der Erfahrungspunkte oder den Stats des Spielers. Solche Skills sollten aber vorher mit dem jeweiligen Lord bzw. Lady abgesprochen werden. Der erste Parameter gibt ein Schluesselwort an, anhand dessen dieser Skilltext identifiert wird und mit welchem dieser spaeter geaendert werden kann. Dieses Schluesselwort sollte die Taetigkeit am Anfang beinhalten ('erf -s' sortiert danach) und den Ort (um Eindeutigkeit zu gewaehrleisten), z.B. "Springen Ebenen-Palast". Der zweite Parameter gibt den auszugebenden Skilltext (ohne Zeilenumbruch) an. Der dritte Parameter bietet die Moeglichkeit zusaetzliche Daten zum Skill zu speichern, welche man spaeter benutzen kann, um diesen Text zu modifizieren (z.B. eine Punktzahl). VERWEISE: query_other_skill_data, query_other_skill_text, query_sum_skill GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: query_other_skill_data DEKLARATION: mixed query_other_skill_data(string keyword) BESCHREIBUNG: Hiermit kann man die benutzerdefinierten Daten zu sonstigen Skills abfragen. Der erste Parameter ist dabei das bei set_other_skill angegebene Schluesselwort. VERWEISE: set_other_skill, query_other_skill_text, query_sum_skill GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: query_other_skill_text DEKLARATION: string query_other_skill_text(string keyword) BESCHREIBUNG: Hiermit kann man den Text eines sonstigen Skills abfragen. Der erste Parameter ist dabei das bei set_other_skill angegebene Schluesselwort. VERWEISE: set_other_skill, query_other_skill_data, query_sum_skill GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: set_gesehen DEKLARATION: nomask void set_gesehen() BESCHREIBUNG: Diese Funktion sollte man aufrufen, wenn der Spieler eine eventuell Erfahrungspunkte-wuerdige Entdeckung gemacht hat. (Punkte gibt es jedoch nur, wenn im Reisebuero entsprechende Eintragungen vorhanden sind, ansonsten macht diese Funktion einfach gar nix.) Siehe dazu /doc/funktionsweisen/wissen. VERWEISE: set_handeln, /doc/funktionsweisen/wissen GRUPPEN: spieler SOURCE: /i/player/skills.c FUNKTION: set_handeln DEKLARATION: nomask void set_handeln() BESCHREIBUNG: Diese Funktion sollte man aufrufen, wenn derjenige eine bestimmte Handlung durchgefuehrt hat, welche eventuell Erfahrungspunkte-wuerdig ist. (Punkte gibt es jedoch nur, wenn im Reisebuero entsprechende Eintragungen vorhanden sind, ansonsten macht diese Funktion einfach gar nix.) Siehe dazu /doc/funktionsweisen/wissen. VERWEISE: set_gesehen, /doc/funktionsweisen/wissen GRUPPEN: spieler SOURCE: /i/player/skills.c FUNKTION: add_sum_comm DEKLARATION: void add_sum_comm(int comm) BESCHREIBUNG: Addiert zu der Anzahl aller gemachter Kommunikationskommandos comm hinzu. VERWEISE: query_sum_comm GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: add_sum_feel DEKLARATION: void add_sum_feel(int feel) BESCHREIBUNG: Addiert zu der Anzahl aller gemachter Seelekommandos feel hinzu. VERWEISE: query_sum_feel GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: add_sum_move DEKLARATION: void add_sum_move(int move) BESCHREIBUNG: Addiert zu der Anzahl aller gemachter Bewegungen move hinzu. VERWEISE: query_sum_move GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: add_sum_weight DEKLARATION: void add_sum_weight(int weight) BESCHREIBUNG: Addiert zu der Anzahl aller geschleppten Gewichtseinheiten weight hinzu. VERWEISE: query_sum_weight GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: query_sum_comm DEKLARATION: int query_sum_comm() BESCHREIBUNG: Liefert die Anzahl aller gemachter Kommunikationskommandos. VERWEISE: add_sum_comm GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: query_sum_feel DEKLARATION: int query_sum_feel() BESCHREIBUNG: Liefert die Anzahl aller gemachter Seelekommandos. VERWEISE: add_sum_feel GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: query_sum_move DEKLARATION: int query_sum_move() BESCHREIBUNG: Liefert die Anzahl aller gemachten Bewegungen. VERWEISE: add_sum_move GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: query_sum_weight DEKLARATION: int query_sum_weight() BESCHREIBUNG: Liefert die Anzahl aller geschleppten Gewichtseinheiten. VERWEISE: add_sum_weight GRUPPEN: spieler, skill SOURCE: /i/player/skills.c FUNKTION: query_kills_by_name DEKLARATION: mapping query_kills_by_name() BESCHREIBUNG: Liefert ein Mapping der Form ([ "name": Anzahl an Kills ]) fuer jedes umgebrachte Lebewesen zurueck. VERWEISE: query_kills_of_name, query_kills_by_race, query_kills_of_race GRUPPEN: Kampf, Skill SOURCE: /i/player/skills.c FUNKTION: query_kills_by_race DEKLARATION: mapping query_kills_by_race() BESCHREIBUNG: Liefert ein Mapping der Form ([ "rasse": Anzahl an Kills ]) fuer jede Rasse, von welcher Lebewesen umgebracht wurden, zurueck. VERWEISE: query_kills_of_race, query_kills_by_name, query_kills_of_name GRUPPEN: Kampf, Skill SOURCE: /i/player/skills.c FUNKTION: query_kills_of_name DEKLARATION: int query_kills_of_name(string name) BESCHREIBUNG: Liefert die Zahl zurueck, wie oft ein Lebewesen mit diesem Namen von diesem Spieler umgebracht wurde. VERWEISE: query_kills_by_name, query_kills_of_race, query_kills_by_race GRUPPEN: Kampf, Skill SOURCE: /i/player/skills.c FUNKTION: query_kills_of_race DEKLARATION: int query_kills_of_race(string race) BESCHREIBUNG: Liefert die Zahl zurueck, wie oft ein Lebewesen mit diesem Namen von diesem Spieler umgebracht wurde. VERWEISE: query_kills_by_race, query_kills_of_name, query_kills_by_name GRUPPEN: Kampf, Skill SOURCE: /i/player/skills.c FUNKTION: notify_sicht DEKLARATION: void notify_sicht(object wer, string richtung, object zielraum) BESCHREIBUNG: Nachdem wer erfolgreich den Zauberspruch 'sicht' in Richtung richtung mit dem Blick in zielraum beendet hat, wird wer->notify("sicht", wer, richtung, zielraum) aufgerufen. VERWEISE: add_controller, notify, describe_room GRUPPEN: zaubern SOURCE: /i/player/spells.c FUNKTION: set_callback DEKLARATION: protected void set_callback(int opt, mixed r_a_cb, mixed l_a_cb, closure change_cb, closure sb_cb) BESCHREIBUNG: Diese Funktion setzt die Praeferenzen und Callbacks fuer bestimmte Telnet-Optionen. Parameter: int opt Die Telnet-Option (eine der TELOPT-Defines). mixed r_a_cb Das ist der Wunsch, wie wir den Kommunikationspartner gern haetten. Entweder DO, DONT oder eine Closure, die aufgerufen wird, wenn wir eine entsprechende Anfrage erhalten. Die Closure erhaelt zwei Parameter, der erste ist der Zustand (WILL, WONT, DO, DONT) und die zweite ist die Telnet-Option, und sollte 0 liefern, wenn es nicht unterstuetzt wird (also ein WONT oder DONT verlangt wird), 1 anderenfalls. mixed l_a_cb Das ist der Zustand, den wir selbst gern haetten. Entweder WILL, WONT oder eine Closure. closure change_cb Diese Closure wird bei Aenderung dieser Option lokal oder entfernt aufgerufen. Die Closure erhaelt zwei Parameter, der erste ist der Zustand (WILL, WONT, DO, DONT) und die zweite ist die Telnet-Option. closure sb_cb Diese Closure wird fuer Subnegotiations (SB TELOPT) aufgerufen, sie erhaelt als ersten Parameter das SB, als zweiten die Telnet-Option und als dritten Parameter ein Byte-Array mit den zusaetzlichen Daten. GRUPPEN: telnet SOURCE: /i/player/telnet_neg.c FUNKTION: set_telnet DEKLARATION: nomask static int set_telnet(int command, int option) BESCHREIBUNG: Diese Funktion verlangt einen bestimmten Telnetzustand. 'command' ist entweder DO, DONT (fuer die Gegenseite) oder WILL, WONT (fuer unseren Zustand), 'option' eine der Telnet-Optionen (TELOPT-Defines). Die Funktion liefert 0, wenn keine Aenderung stattfindet (entweder wir sind bereits in diesem Zustand oder wir haben eine entsprechende Anforderung schon gesendet oder unsere Anforderung wurde schon einmal abgelehnt), 1 anderenfalls. GRUPPEN: telnet SOURCE: /i/player/telnet_neg.c FUNKTION: has_unicode DEKLARATION: int has_unicode() BESCHREIBUNG: Liefert 1 zurueck, wenn der Spieler in der Lage ist, Unicode-Zeichen ohne Konvertierung auszugeben. GRUPPEN: spieler SOURCE: /i/player/telnet_neg.c FUNKTION: has_only_ascii DEKLARATION: int has_only_ascii() BESCHREIBUNG: Liefert 1 zurueck, wenn der Spieler nicht in der Lage ist, Zeichen abseits des ASCII-Zeichensatzes ohne Konvertierung auszugeben. GRUPPEN: spieler SOURCE: /i/player/telnet_neg.c FUNKTION: query_doing DEKLARATION: int query_doing() BESCHREIBUNG: Liefert 1 zurueck, wenn der Spieler gerade einen Befehl innerhalb eines Tue ausfuehrt, 0 sonst. GRUPPEN: spieler SOURCE: /i/player/tippse.c FUNKTION: query_aliases DEKLARATION: mapping query_aliases() BESCHREIBUNG: Damit bekommt man ein mapping, in dem alle kuerzel eines Spielers stehen. Wird von der Wizard - Shell benoetigt. VERWEISE: GRUPPEN: spieler SOURCE: /i/player/tippse.c FUNKTION: set_prompt_string DEKLARATION: void set_prompt_string(string prompt_string) BESCHREIBUNG: Mit dieser Funktion kann man einen neuen Prompt setzen. VERWEISE: query_prompt_string GRUPPEN: spieler SOURCE: /i/player/tippse.c FUNKTION: query_prompt_string DEKLARATION: string query_prompt_string() BESCHREIBUNG: Liefert den momentan gesetzten Prompt eines Spielers zurueck. VERWEISE: set_prompt_string GRUPPEN: spieler SOURCE: /i/player/tippse.c FUNKTION: in_mini_ed DEKLARATION: int in_mini_ed() BESCHREIBUNG: Liefert einen Wert !=0, wenn dieser Spieler sich im Mini-ed befindet. VERWEISE: is_editing, mini_ed GRUPPEN: Dateien SOURCE: /i/player/tippse.c FUNKTION: is_editing DEKLARATION: int is_editing() BESCHREIBUNG: Liefert einen Wert !=0, wenn dieser Spieler sich in irgendeinem Editor befindet. VERWEISE: in_edit, query_editing GRUPPEN: Dateien SOURCE: /i/player/tippse.c FUNKTION: mini_ed DEKLARATION: varargs int mini_ed(closure retfun, int which_ed, string tempfile, mapping msgs, mapping flags, string* text) BESCHREIBUNG: Ein Mini-Editor wird gestartet. Dort kann man einfach nacheinander Zeile fuer Zeile eingeben. Mit einem einzelnen '.' oder '**' wird der Editor beendet. Man hat folgende Befehle zur Verfuegung: ~e In den ed wechseln. (Goetter erhalten den Driver-ed mit der Datei edfile, Spieler den ed aus dem /i/player/editor.c) ~x In den xed wechseln (Nur fuer Goetter, die einen Zauberstab dabei haben bzw. in der Wizard-Shell) ~p Nur fuer Goetter: In den Player-Ed wechseln (nicht in der Wiz-Shell) ~q Ed abbrechen Die Parameter: closure retfun Diese Funktion nach Beendigung des Editors aufgerufen. Sie erhaelt als Parameter den Text als Array aus den einzelnen Zeilen oder 0, falls der Ed abgebrochen wurde. int which_ed Damit kann man explizit angeben, mit welchem Editor gestartet werden soll: 0 Mini-Ed 1 Ed (Goetter: Driver-Ed, Spieler: Player-ed) 2 Player-Ed 3 Xed (Nur fuer Goetter) string tempfile Eine temporaere Datei, die vom Driver-Ed editiert wird. Ist tempfile 0, so wird /w//priv/ed.tmp genutzt. mapping msgs Meldungen fuer den Player-ed (siehe edit()) Folgende Meldungen daraus nutzt der Mini-ed: MINI_ED_ALREADY_EDITING: "Du schreibst schon einen Text.\n" MINI_ED_START_TEXT: "Gib nun den Text ein. Mit '**' oder '.' beenden, mit '~q' abbrechen.\n" MINI_ED_PLAYER_INFO: "Mit '~e' kommt man in den ED.\n" MINI_ED_WIZ_INFO: "Mit '~e' kommt man in den ED, mit ~x in den XED und mit ~p in den Player-ED.\n" MINI_ED_MAX_SIZE_OVERRUN "Mehr als %d Zeilen darfst Du nicht schreiben.\n" MINI_ED_TITLE: Fenstertitel fuer Editorfenster, z.B. im WebMUD. mapping flags Zusaetzliche Flags: MINI_ED_WRAP_LEN: Bei wieviel Zeichen umgebrochen werden soll. (-1: Ueberhaupt nicht. Standard ist 79) MINI_ED_FORCE_WRAP: Bricht die Zeilen, welche in den anderen Editoren (player-ed, driver-ed, xed) eingegeben wurden, nachtraeglich um. string* text Bereits eingegebene Zeilen. Alle Angaben sind optional. Die Funktion liefert 1 bei Erfolg, 0 bei einem Fehler zurueck (Fehlermeldung wird per write ausgegeben.) VERWEISE: edit, ed, more, cat, tail, set_more_chunk, query_more_chunk, GRUPPEN: Dateien SOURCE: /i/player/tippse.c FUNKTION: query_mark DEKLARATION: nomask mixed query_mark(int nr, int flag) BESCHREIBUNG: Liefert die Markierung, wie sie mit dem Zauberstabbefehl zmark gesetzt werden kann, zurueck. Ist flag 0, so wird ein Objekt geliefert, andernfalls der Objektname. Siehe auch: zm ? VERWEISE: query_mark, query_marks, set_mark GRUPPEN: grundlegendes SOURCE: /i/player/wiz_soul.c FUNKTION: query_marks DEKLARATION: nomask mixed *query_marks(int flag) BESCHREIBUNG: Liefert ein Array mit allen Markierungen, wie sie mit dem Zauberstabbefehl zmark gesetzt werden koennen, zurueck. Ist flag 0, so werden Objekte geliefert, andernfalls Objektnamen. Siehe auch: zm ? VERWEISE: query_mark, query_marks, set_mark GRUPPEN: grundlegendes SOURCE: /i/player/wiz_soul.c FUNKTION: set_mark DEKLARATION: nomask void set_mark(int nr, object ob) BESCHREIBUNG: Speichert das Objekt ob in der Markierung mit der Nummer nr sowie dessen Objektnamen ab. Diese Methode kann nur von bestimmten privilegierten Objekten aufgerufen werden. Siehe auch: zm ? VERWEISE: query_mark, query_marks, set_mark GRUPPEN: grundlegendes SOURCE: /i/player/wiz_soul.c FUNKTION: query_command_list DEKLARATION: varargs string *query_command_list(int mode) BESCHREIBUNG: Mit dieser Funktion kann man die Kommandos zum Verlassen des Raumes abfragen. In der Regel fragt man nur die sichtbaren ab mit: query_command_list(EXIT_VISIBLE); Ansonsten kommen alle Ausgaenge. Werte fuer mode siehe: add_exit_flag Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, set_exits, query_one_exit, query_exit_list, query_flag_list, query_category_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_exit_list DEKLARATION: varargs string *query_exit_list(int mode) BESCHREIBUNG: Mit dieser Funktion kann man die Anschluss-Raeume abfragen. Werte fuer mode siehe: add_exit_flag Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, set_exits, set_exit_msg, query_one_exit, query_command_list, query_flag_list, query_category_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_flag_list DEKLARATION: int *query_flag_list(int mode) BESCHREIBUNG: Mit dieser Funktion kann man den Status der Ausgaenge abfragen. Werte fuer mode siehe: add_exit_flag Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, set_exits, add_exit, add_exits, delete_exit, delete_exits, set_exit_msg, query_one_exit, query_command_list, query_exit_list, query_category_list, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_category_list DEKLARATION: varargs string *query_category_list(int mode) BESCHREIBUNG: Mit dieser Funktion kann man die Ausgangs-Kategorien abfragen. Werte fuer mode siehe: add_exit_flag Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: query_exit_category, set_exit_category, set_exit, set_exits, add_exit, add_exits, query_one_exit, query_command_list, query_exit_list, query_flag_list, GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_exit_category DEKLARATION: string query_exit_category(string command) BESCHREIBUNG: Damit kann man die Kategorie eines Raumausgangs abfragen. Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, add_exit, set_exit_category, query_category_list GRUPPEN: raum SOURCE: /i/room.c FUNKTION: set_exit_category DEKLARATION: void set_exit_category(string command, string category) BESCHREIBUNG: Damit kann man die Kategorie eines Raumausgangs setzen. Dieser String wird bei der Raumbeschreibung den Ausgaengen vorangestellt (statt des "Weiter:"). Ausgaenge mit gleicher Kategorie werden gemeinsam dargestellt. Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, add_exit, query_exit_category, query_category_list GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_one_exit DEKLARATION: varargs string query_one_exit(string command, int flag) BESCHREIBUNG: Mit dieser Funktion kann man den Raum abfragen, in den man kommt, wenn man das Kommando benutzt. Ist flag gesetzt so wird der der entsprechende Ausgang auch dann zurueckgegeben wenn er fuer this_player() momentan nicht passierbar (locked) ist. Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, set_exits, query_exit_list, set_exit_msg, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_exit_command DEKLARATION: varargs string query_exit_command(object|string raum, int flag) BESCHREIBUNG: Mit dieser Funktion kann man das Kommando abfragen mit dem man in den Raum raum kommen wuerde. Ist flag gesetzt so wird der der entsprechende Ausgang auch dann zurueckgegeben wenn er fuer this_player() momentan nicht passierbar (locked) ist. VERWEISE: set_exit, set_exits, query_exit_list, set_exit_msg, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: delete_exit DEKLARATION: void delete_exit(string command) BESCHREIBUNG: Mit dieser Funktion kann man den Ausgang, der in Richtung liegt loeschen. Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, set_exits, query_one_exit, query_exit_list, query_command_list, add_exits, add_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: delete_exits DEKLARATION: void delete_exits(string *commands) BESCHREIBUNG: Mit dieser Funktion kann man die Ausgaenge, in die Richtungen, die in stehen, loeschen. Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, set_exits, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: add_exit DEKLARATION: varargs void add_exit(string exit, string cmd [, int mode [, string category]]) BESCHREIBUNG: Mit dieser Funktion kann man einen Ausgang zu den bestehenden Ausgaengen hinzufuegen. Werte fuer mode siehe: add_exit_flag Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exits, delete_exit, delete_exit, show_exit, hide_exit, lock_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag, set_exit_category, query_exit_category GRUPPEN: raum SOURCE: /i/room.c FUNKTION: add_exits DEKLARATION: varargs void add_exits(string *exits, string *cmds [, int *modes [, string *categories]]) BESCHREIBUNG: Mit dieser Funktion kann man mehrere neue Ausgaenge zu den bestehenden Ausgaengen hinzufuegen. Werte fuer mode siehe: add_exit_flag Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exit, delete_exit, delete_exit, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: set_exit DEKLARATION: varargs void set_exit(string exit, string command [, int mode [, string category]]) BESCHREIBUNG: Mit dieser Funktion kann man einem Raum nur einen Ausgang setzen. ist dabei der anschliessende Raum, und der Befehl, mit dem man in den Raum gelangt (z.B. norden) Werte fuer mode siehe: add_exit_flag Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: set_exits DEKLARATION: varargs void set_exits(string *exits, string *commands [, int* modes [, string *categories]]) BESCHREIBUNG: Mit dieser Funktion setzt man die Ausgaenge des Raumes. ist dabei ein Array der anschliessenden Raeume, und die dazugehoerigen Befehle, mit denen man in die Raeume gelangt (z.B. norden) Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: filter_xxx DEKLARATION: filter_xxx(object who) BESCHREIBUNG: Die Funktion filter_xxx() wird beim Benutzen eines Raumausganges im Raum aufgerufen. Dabei ist fuer xxx die Richtung des Ausgangs (in Kleinbschrift) einzusetzen. Wenn filter_xxx() 0 zurueckliefert, so wird die Bewegung in Richtung xxx erlaubt, sonst nicht. Die Richtung muss mit set_exits(), add_exit() oder add_exits() definiert sein, sonst hat filter_xxx() keinen Effekt. Liefert filter_xxx() einen String, so wird dieser an den Bewegenden ausgegeben. Beispiel: // Standard-Raum, in dem ein Ausgang nach Osten definiert ist... [ ..... ] filter_osten(object who) { if (who->query_hp() < 20) { return "Du darfst da nicht rein, Du wuerdest es nicht ueberleben!\n"; } // An dieser Stelle darf noch keine Meldung ueber das erfolgreiche // Nutzen des Ausganges kommen, denn diverse Controller koennen // das immer noch verhindern! return 0; } // Meldung dann am besten mit moved_out ausgeben: // (Derjenige ist jetzt schon im anderen Raum.) void moved_out(mapping mv_infos) { object who = mv_infos[MOVE_OBJECT]; ::moved_out(mv_infos); if(mv_infos[MOVE_DIRECTION]=="osten") { who->send_message_to(who, MT_LOOK|MT_FEEL, MA_MOVE, wrap("Beim Durchschreiten des oestlichen Durchganges faellt " "Dir ein Amboss auf den Kopf. AUA, das gibt eine riesen Beule!")); who->send_message_to(all_inventory(), MT_LOOK, MA_MOVE, wrap("Beim Durchschreiten des oestlichen Durchganges faellt "+ dem(who)+" ein Amboss auf den Kopf.")); who->add_hp(-20); } } VERWEISE: set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag, let_not_out GRUPPEN: raum, move SOURCE: /i/room.c FUNKTION: add_exit_flag DEKLARATION: void add_exit_flag(mixed command, int flag) BESCHREIBUNG: Aendert ein Statusflag fuer einen oder mehrere Raumausgaenge command ist dabei ein Ausgang "norden" oder mehrere Ausgaenge ({"norden", "sueden" }) und flag ist das Flag, dass gesetzt werden soll. Folgende Konstanten aus room.h stehen zur Verfuegung: EXIT_VISIBLE Der Ausgang wird sichtbar. (nicht nolist oder versteckt) EXIT_NOLIST Der Ausgang wird nicht angezeigt. (Mapausgaenge) EXIT_HIDDEN Der Ausgang ist versteckt, Man kann ihn benutzen, aber man sieht ihn nicht als Spieler, und andere sehen es nicht (deutlich), wenn ein Spieler ihn benutzt, im Gegensatz zu EXIT_NOLIST. EXIT_LOCKED Der Ausgang wird gesperrt. EXIT_UNLOCKED Der Ausgang wird entsperrt. EXIT_VIEW Beim Betrachten des Raumes sieht der Spieler dort befindliche PCs + NPCs, sofern er bei den Helligkeitsverhaeltnissen in der Lage waere zu sehen. BEISPIEL: add_exit_flag(({"norden", "osten"}), EXIT_NOLIST); Fuer VISIBLE, NOLIST, HIDDEN, LOCKED und UNLOCKED gibt es eigene Funktionen: show_exit, nolist_exit, hide_exit, lock_exit, unlock_exit siehe dort. Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_exit_flag DEKLARATION: int query_exit_flag(string command, [ int flag ]) BESCHREIBUNG: Damit kann man die Statusflags eines Raumausgangs abfragen, bzw. testen, ob ein bestimmtes Flag gesetzt ist. Fehlt flag, so wird das Statusflag des Raumsausgangs command zurueck geliefert. Ist flag angegeben so wird getestet, ob die angegebenen flags gesetzt sind. Folgende Konstanten aus room.h stehen zur Verfuegung: EXIT_VISIBLE Der Ausgang wird sichtbar. (nicht nolist oder versteckt) EXIT_NOLIST Der Ausgang wird nicht angezeigt. (Mapausgaenge) EXIT_HIDDEN Der Ausgang ist versteckt, Man kann ihn benutzen, aber man sieht ihn nicht als Spieler, und andere sehen es nicht (deutlich), wenn ein Spieler ihn benutzt, im Gegensatz zu EXIT_NOLIST. EXIT_LOCKED Der Ausgang wird gesperrt. EXIT_UNLOCKED Der Ausgang wird entsperrt. BEISPIEL: query_exit_flag("norden"); Siehe auch /doc/funktionsweisen/raeume/ausgaenge VERWEISE: set_exit, set_exits, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: show_exit DEKLARATION: varargs void show_exit(mixed cmd) BESCHREIBUNG: Mit show_exit wird ein Ausgang sichtbar gemacht. (Die Eigenschaften NOLIST und HIDDEN werden geloescht.) cmd kann ein Ausgang "norden" oder mehrere Ausgaenge sein ({ "norden", "osten" }). Fehlt cmd dann werden alle Ausgaenge sichtbar gemacht. VERWEISE: set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: nolist_exit DEKLARATION: varargs void nolist_exit(mixed cmd) BESCHREIBUNG: Mit nolist_exit wird ein Ausgang aus der Liste der sichtbaren Ausgaenge genommen. (hauptsaechlich fuer Mapraeume) cmd kann ein Ausgang "norden" oder mehrere Ausgaenge sein ({ "norden", "osten" }). Fehlt cmd dann werden alle Ausgaenge aus der Liste der sichtbaren Ausgaenge genommen. VERWEISE: set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: hide_exit DEKLARATION: varargs void hide_exit(mixed cmd) BESCHREIBUNG: Mit hide_exit wird ein Ausgang versteckt. (nicht fuer Mapausgaenge!) cmd koennen ein Ausgang "norden" oder mehrere Ausgaenge sein ({ "norden", "osten" }) Fehlt cmd dann werden alle Ausgaenge versteckt. VERWEISE: set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_lock_reason DEKLARATION: varargs string query_lock_reason(string exit, object fuer_wen) BESCHREIBUNG: Mit query_lock_reason kann in einem Raum abgefragt werden, warum ein bestimmter Ausgang gelockt ist (natuerlich nur, wenn der Grund dafuer mit lock_exit gesetzt worden ist). VERWEISE: query_lock_reason_other, lock_exit, unlock_exit GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_lock_reason_other DEKLARATION: varargs string query_lock_reason_other(string exit, object wer) BESCHREIBUNG: query_lock_reason_other liefert die Meldung fuer alle anderen im Raum, wenn 'wer' durch diesen gesperten Ausgang gehen moechte (natuerlich nur, wenn der Grund dafuer mit lock_exit gesetzt worden ist). VERWEISE: query_lock_reason, lock_exit, unlock_exit GRUPPEN: raum SOURCE: /i/room.c FUNKTION: lock_exit DEKLARATION: varargs void lock_exit(string*|string cmd, closure|string reason, closure|string reason_other) BESCHREIBUNG: Mit lock_exit wird ein Ausgang gesperrt. cmd koennen ein Ausgang "norden" oder mehrere Ausgaenge sein ({ "norden", "osten" }) Fehlt cmd dann werden alle Ausgaenge gesperrt. Mit reason kann ein Grund angegeben werden, warum der Ausgang gesperrt ist. Mit reason_other kann auch eine Meldung fuer alle anderen im Raum angegeben werden. (Dann wird der Grund nicht mehr per notify_fail ausgegeben.) Die Gruende koennen auch Closures oder Pseudoclosures sein. BEISPIEL: lock_exit("sueden","Die Schlucht suedlich von Dir ist zu steil.") VERWEISE: set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag, query_lock_reason, query_lock_reason_other GRUPPEN: raum SOURCE: /i/room.c FUNKTION: unlock_exit DEKLARATION: varargs void unlock_exit(string*|string cmd) BESCHREIBUNG: Mit unlock_exit wird ein Ausgang entsperrt. cmd koennen ein Ausgang "norden" oder mehrere Ausgaenge sein ({ "norden", "osten" }) Fehlt cmd dann werden alle Ausgaenge entsperrt. VERWEISE: set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: set_msg DEKLARATION: varargs void set_msg(mixed raus, mixed rein, mixed selbst) BESCHREIBUNG: Setzt fuer alle Ausgaenge die Verlassensmeldung fuer diesen Raum, die Ankunftsmeldung fuer die Zielraeume und eine eventuelle Meldung fuer den Bewegenden. Mit set_exit_msg (siehe dort) koennen die Meldungen fuer einzelne Ausgaenge einzeln gesetzt werden. Es sind auch Closures als Meldungen moeglich. Die Closures erhalten als ersten Parameter das Lebewesen und als 2. Parameter die Richtung. BEISPIEL: Auf der oestlichen Spitze eines Stegs, ueberall ausser Westen gehts ins Wasser, nach Westen auf dem Steg entlang: set_msg("$Der(OBJ_TP) springt $dir() vom Steg.", "$Der(OBJ_TP) kommt vom Steg zu Dir ins Wasser gesprungen.", "Du springst $dir() ins kalte Wasser. Viel Spass."); set_exit_msg("westen", "$Der(OBJ_TP) laeuft auf dem Steg nach Westen davon.", "$Ein(OBJ_TP) kommt auf dem Steg von Osten hergelaufen.", "Du verlaesst den Steg in Richtung Festland."); VERWEISE: set_exits, set_exit_msg, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: set_dir_prep_in DEKLARATION: void set_dir_prep_in(string str) BESCHREIBUNG: Fuer ganz abgefahrene Situationen kann man auch noch die Praepositionen aendern, die bei Standardrichtungsmeldungen verwendet werden (normalerweise "von"). VERWEISE: set_dir_prep, set_dir_prep_out GRUPPEN: raum SOURCE: /i/room.c FUNKTION: set_dir_prep_out DEKLARATION: void set_dir_prep_out(string str) BESCHREIBUNG: Fuer ganz abgefahrene Situationen kann man auch noch die Praepositionen aendern, die bei Standardrichtungsmeldungen verwendet werden (normalerweise "nach"). VERWEISE: set_dir_prep_in, set_dir_prep GRUPPEN: raum SOURCE: /i/room.c FUNKTION: set_dir_prep DEKLARATION: void set_dir_prep(string praus, string prein) BESCHREIBUNG: Fuer ganz abgefahrene Situationen kann man auch noch die Praepositionen aendern, die bei Standardrichtungsmeldungen verwendet werden (normalerweise "nach" und "von"). VERWEISE: set_dir_prep_in, set_dir_prep_out GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_dir_prep_in DEKLARATION: string query_dir_prep_in() BESCHREIBUNG: Diese Funktion gibt die gesetzte Praepositionen zureck. (Default:"von"). VERWEISE: set_dir_prep_in, set_dir_prep GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_dir_prep_out DEKLARATION: string query_dir_prep_out() BESCHREIBUNG: Diese Funktion gibt die gesetzte Praepositionen zureck. (Default:"nach"). VERWEISE: set_dir_prep_out, set_dir_prep GRUPPEN: raum SOURCE: /i/room.c FUNKTION: set_exit_msg DEKLARATION: varargs void set_exit_msg(string dir, mixed raus, mixed rein, mixed selbst) BESCHREIBUNG: Setzt fuer den Ausgang die Verlassensmeldung fuer diesen Raum , die Ankunftsmeldung fuer den Zielraum und eine Meldung fuer den Bewegenden. Der Ausgang sollte bereits als solcher gesetzt sein. Mit set_msg (siehe dort) koennen die Meldungen fuer alle Ausgaenge auf einmal gesetzt werden. Es sind auch Closures als Meldungen moeglich. Die Closures erhalten als ersten Parameter das Lebewesen und als 2. Parameter die Richtung. BEISPIEL: set_exit_msg( "nordosten", "$Der(OBJ_TP) laeuft den Pfad nach Nordosten hoch", "$Ein(OBJ_TP) kommt von Suedwesten den Pfad hochgelaufen", "Du folgst brav dem Pfad $dir()."); VERWEISE: set_exits, set_msg, query_one_exit, query_exit_list, query_command_list, add_exit, add_exits, delete_exit, delete_exits, show_exit, lock_exit, hide_exit, nolist_exit, unlock_exit, add_exit_flag, query_exit_flag GRUPPEN: raum SOURCE: /i/room.c FUNKTION: set_dir_msg DEKLARATION: void set_dir_msg(string dir, string raus, string rein) BESCHREIBUNG: Damit kann die Richtungsbeschreibung fuer einen Ausgang festlegen. Dies ist also der String, welcher in Bewegungsmeldungen anstelle von "nach Norden" bzw. "von Norden" genommen wird. (In den Bewegunsmeldungen wird das "$dir()" durch diese Strings ersetzt.) VERWEISE: set_exit_msg, set_msg GRUPPEN: raum SOURCE: /i/room.c FUNKTION: add_type DEKLARATION: void add_type(mixed key, mixed data) BESCHREIBUNG: Mit dieser Funktion kann man einen Typ im Raum setzen. key ist ein String oder ein Feld von Strings, deren Typen gleichartig gesetzt werden. Die nutzbaren Strings sollen grundsaetzlich in Form der in /sys/room_types.h gelisteten Defines verwendet werden. Bsp.: add_type(RT_GRABEN_VERBOTEN, 1); add_type(({RT_KUNSTLICHT, RT_KAEMPFEN_VERBOTEN}), 1); Diese Typen kann man individuell einsetzen. Wenn als Wert eine Closure gesetzt wird, so wird diese bei jeder Abfrage durch query_type() oder query_types() ausgewertet (und mit dem Raum als ersten Parameter aufgerufen). Alle benutzten Typen listet /doc/funktionsweisen/raeume/typenliste auf. Weiteres siehe auch /doc/funktionsweisen/raeume/typen. VERWEISE: query_types, query_type GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_type DEKLARATION: mixed query_type(string type) BESCHREIBUNG: Mit dieser Funktion kann man einen Typ im Raum abfragen. Diese Typen kann man individuell einsetzen. Eine Liste aller benutzten Typen ist in /doc/funktionsweisen/raeume/typenliste Weiteres siehe auch: /doc/funktionsweisen/raeume/typen VERWEISE: add_type, query_types GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_types DEKLARATION: mapping query_types() BESCHREIBUNG: Mit dieser Funktion kann man alle Typen im Raum abfragen. Diese Typen kann man individuell einsetzen. Eine Liste aller benutzten Typen ist in /doc/funktionsweisen/raeume/typenliste Weiteres siehe auch: /doc/funktionsweisen/raeume/typen VERWEISE: add_type, query_type GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_room DEKLARATION: int query_room() BESCHREIBUNG: Liefert bei Raeumen immer 1. VERWEISE: GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_room_environment DEKLARATION: varargs mixed * query_room_environment(int deep) BESCHREIBUNG: Hilfsfunktionen zur Beachtung der Raumtypen "repraesentant" und "umgebung". Falls solche Raumtypen gesetzt sind, erhaelt man ein Array, das sowohl die momentanen Repraesentanten (V-Items oder Nicht-Raum-Objekte) als auch Umgebungen (Container, Raeume) enthalten kann. Ob ein Objekt ein Raum ist, kann mit query_room() erfragt werden. Ist das Flag 'deep' == 1, werden auch die weiteren Repraesentanten und Umgebungen der aeusseren Raeume an das Array angehaengt. Das letzte Element des Arrays ist der aeusserste Raum. Hat der Raum keinen Repraesentant oder Umgebung, ist das Array leer. Mehr ueber die Raumtypen "repraesentant" und "umgebung" bitte nachlesen unter /doc/funktionsweise/raeume/typenliste VERWEISE: query_room, query_type GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_room_domain DEKLARATION: string query_room_domain() BESCHREIBUNG: Liefert die Domain zurueck, in der sich der Raum befindet. Die room_domain kann man mit set_room_domain setzen, das ist aber nur in Ausnahmefaellen noetig und erwuenscht. Wenn keine room_domain gesetzt ist, wird sie aus dem Pfadnamen geholt. Fuer Raume unter /d/ ist die room_domain klar, unter /z/ und /p/ (auch wenn da keine Raeum hingehoeren), ist es der Namen des directorys, in dem sich der raum befindet, unter /w/ ist es "Pantheon". VERWEISE: set_room_domain GRUPPEN: raum SOURCE: /i/room.c FUNKTION: set_room_domain DEKLARATION: void set_room_domain(string room_domain) BESCHREIBUNG: Setzt die Domain, in der sich ein Raum befindet, wenn eine Domain abweichend vom Standard erwuenscht ist. Nur in Ausnahmefaellen verwenden. Beschreibung siehe query_room_domain VERWEISE: query_room_domain GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_daylight DEKLARATION: int query_daylight() BESCHREIBUNG: Liefert den momentanen Lichtlevels, der vom Tageslicht ausgeht. In Freiraeumen ist dies tagsueber 1, in der Nacht dagegen 0. Wer Einfluss auf das Tageslicht nehmen moechte, kann diese Funktion entsprechend ueberlagern. Dies wird z.B. in den Ebenen gemacht, die ueber ein eigenes Zeitensystem verfuegen. VERWEISE: query_light, query_light_description GRUPPEN: raum, licht SOURCE: /i/room.c FUNKTION: query_visitors DEKLARATION: mixed *query_visitors() BESCHREIBUNG: query_visitors() liefert ein Feld, in dem diejenigen letzten TR_MAX_VISITORS Personen eingetragen sind, die den Raum vor kurzem verlassen haben. Das Feld besitzt folgende Form: ({ ({ "|", , , , , V-Item-aehnliche Beschreibung, Beschreibung mit real_name/gender, "|" }), ({ ... }), ... }) BEMERKUNGEN: - Auf die Eintraege des Arrays sollte mittels der Konstanten TRV_TRACE 0 TRV_TIME 1 TRV_WHO 2 TRV_NAME 3 TRV_INVIS 4 TRV_DESC 5 TRV_REAL_DESC 6 TRV_TRACE_ROOMS 7 aus zugeriffen werden! - kann 0 sein! - TR_MAX_VISITORS ist zut Zeit 7, siehe /sys/room.h - Bei NPCs ist der Eintrag TRV_REAL_DESC 0. VERWEISE: query_traces GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_traces DEKLARATION: mapping query_traces() BESCHREIBUNG: query_traces() liefert eine Statistik ueber die Auslastung der Ausgaenge eines Raumes, registiert in Form von Spuren von einem Ausgang zum anderen. Geliefert wird ein Mapping der folgenden Form: ([ "|" : ; ; ; ; , ... ... ... ... ]) BEMERKUNGEN: - Auf die einzelnen Eintraege des Mappings sollte mittels der Konstanten TRT_COUNT 0 TRT_TIME 1 TRT_WHO 2 TRT_NAME 3 TRT_STAT 4 aus zugeriffen werden! - Ist == 0, so wurde die Spur erst einmal benutzt. Der Wert kann aufgrund von Integerrundungen ungenau sein. - kann 0 sein! VERWEISE: query_visitors GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_schwimmfaehig DEKLARATION: int query_schwimmfaehig() BESCHREIBUNG: Definiert man in beweglichen Objekten, die im Wasser nicht untergehen sollen, in diesem Fall muss die Funktion einen von 0 verschiedenen Wert liefern. GRUPPEN: move SOURCE: /i/room.c FUNKTION: clean_up DEKLARATION: int clean_up(int arg) BESCHREIBUNG: Die Funktion clean_up() wird vom Game-Driver aufgerufen, falls das Objekt lange Zeit nicht mehr benutzt wurde, um dem Objekt zu ermoeglichen, sich selbst zu zerstoeren. arg ist 0, falls es sich um ein mit clone_object() erschafftes Objekt (d.h. ein Objekt mit #nummer) handelt arg ist 1, falls es sich um ein mit touch() geladenes Objekt handelt (wie z.B. Raeume) arg ist >1, falls das File inherited oder sostwie benutzt wird. In clean_up() hat man nun die Moeglichkeit zu entscheiden, ob das Objekt zerstoert werden soll, oder nicht. Wenn clean_up() einen return 0; macht, wird clean_up() nie wieder aufgerufen, bei return 1; wird clean_up() wieder nach langer Zeit aufgerufen. Das ist z.B. sinnvoll, falls sich Objekte im Raum befinden, die normalerweise nicht dort hin gehoeren. In Raeumen wird das clean_up() folgendermassen ausgenutzt: Der Raum zerstoert sich nicht selbst und alle enthaltenen Objekte, wenn: 1. Der Raum wird von dessen Programmierer mit dem Aufruf add_type("nocleanup",1); im create() daran gehindert, 2. Eines der im Raum enthaltenen Objekte gibt auf die Anfrage des Raumes: query_enable_cleanup() eine 0 zurueck. In /i/move.c ist query_enable_cleanup() bereits definiert. Im Normalfall laesst sich ein Objekt beim Cleanup zerstoeren, wenn es durch diesen Raum erzeugt wurde, da es beim naechsten Laden des Raumes auch wieder erzeugt wird. Will man das Zerstoeren aber trotzdem verhindern, kann man im Objekt set_prevent_cleanup() aufrufen. VERWEISE: add_type, remove, set_prevent_cleanup, query_enable_cleanup GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_map_pos DEKLARATION: int *query_map_pos() BESCHREIBUNG: Liefert ein Feld ({ X, Y }) der Koordinaten eines Map-Raumes oder 0, wenn der Raum kein Map-Raum ist. GRUPPEN: raum, domain SOURCE: /i/room.c FUNKTION: query_long_dark DEKLARATION: string query_long_dark(object betrachter) BESCHREIBUNG: Wenn diese Funktion im Raum definiert ist und einen Wert != 0 liefert, so wird dies in der Dunkelheit als Raumbeschreibung ausgegeben. Der Text sollte ordentlich umgebrochen sein. Standardmaessig gibt es diese Funktion im Raum nicht (und daher gibt es auch kein set_long_dark). VERWEISE: query_long, set_long GRUPPEN: raum SOURCE: /i/room.c FUNKTION: concerned_drift DEKLARATION: int concerned_drift(object was, object wo) BESCHREIBUNG: Wenn ein Objekt 'was' in einen Raum 'wo' gelegt wird, und der Boden des Raumes tatsaechlich eine Wasseroberflaeche ist (Landschaftstyp) und das Objekt nicht schwimmen kann, droht es abzutreiben oder zu sinken. Bevor das Objekt 'was' abtreibt, wird in allen bei 'was' und 'wo' angemeldeten Controllern angefragt, ob sich jemand anderes als der Raum selbst um das Abtreiben kuemmern soll. Fuehlt man sich zustaendig, liefert man einen Wert > 0 zurueck. Die Funktion mit dem groessten Rueckgabewert erhaelt den Zuschlag. Hat man ein Objekt als Controller angemeldet, so wird dann objekt->do_drift(was, wo) aufgerufen. Hat man eine Closure angemeldet, so wird diese mit funcall(cl, "do_drift", was, wo) aufgerufen. In dieser Funktion kann man dann mit dem Objekt machen, wozu man Lust und Laune hat, z.B. das Objekt nach einer gewissen Zeit in einem Strudel verschwinden lassen... VERWEISE: concerned_sink, query_schwimmfaehig GRUPPEN: raum SOURCE: /i/room.c FUNKTION: concerned_sink DEKLARATION: int concerned_sink(object was, object wo) BESCHREIBUNG: Wenn ein Objekt 'was' in einen Raum 'wo' gelegt wird, und der Boden des Raumes tatsaechlich eine Wasseroberflaeche ist (Landschaftstyp) und das Objekt nicht schwimmen kann, droht es abzutreiben oder zu sinken. Bevor das Objekt 'was' sinkt, wird in allen bei 'was' und 'wo' angemeldeten Controllern angefragt, ob sich jemand anderes als der Raum selbst um das Sinken kuemmern soll. Fuehlt man sich zustaendig, liefert man einen Wert > 0 zurueck. Die Funktion mit dem groessten Rueckgabewert erhaelt den Zuschlag. Hat man ein Objekt als Controller angemeldet, so wird dann objekt->do_sink(was, wo) aufgerufen. Hat man eine Closure angemeldet, so wird diese mit funcall(cl, "do_sink", was, wo) aufgerufen. In dieser Funktion kann man dann mit dem Objekt machen, wozu man Lust und Laune hat, z.B. das Objekt nach einer gewissen Zeit in einem Strudel verschwinden lassen... VERWEISE: concerned_drift, query_schwimmfaehig GRUPPEN: raum SOURCE: /i/room.c FUNKTION: query_no_idle_logout DEKLARATION: int query_no_idle_logout(object wer) BESCHREIBUNG: Wenn ein Spieler in einem Raum aufgrund zu langen Idelns zur Statue werden soll, wird im Raum diese Funktion mit dem Spielerobjekt als Argument aufgerufen. Liefert sie einen Wert ungleich 0 zurueck, wird der Spieler nicht zur Statue. Diese Funktion ist privilegiert und kann nur nach Freigabe durch die Admins genutzt werden. GRUPPEN: raum, spieler SOURCE: /i/room.c FUNKTION: set_random_clone_mode DEKLARATION: void set_random_clone_mode(integer mode) BESCHREIBUNG: Mit dieser Funktion wird das Verhalten bei einem Reset massgeblich veraendert. Sobald mit set_random_clone_mode(1), das zufallsgesteuerte cloenen von Objekten eingeschaltet ist, werden die Eigenschaften, min, chance und clone_later ausgwertet. VERWEISE: GRUPPEN: contents SOURCE: /i/room/contents.c FUNKTION: query_random_clone_mode DEKLARATION: int query_random_clone_mode() BESCHREIBUNG: Liefert den Status des Clone_mode VERWEISE: GRUPPEN: contents SOURCE: /i/room/contents.c FUNKTION: add_object DEKLARATION: void add_object(mixed obj) BESCHREIBUNG: Fuegt dem Container die Information des Objekts zu. Das Mapping dazu sieht wie folgt aus: ([ "name": string, Name des Objektes, fuer das interne Handling "object":mixed, Entweder ist der Eintrag ein String, der den Filenamen des Objektes angibt oder eine closure (#'fun) die vom Typ object ist oder ein Array ({object,"funktion"}) fuer einen call_other-Aufruf. Die Funktion muss auch vom Typ object sein. "hidden":int, Das Objekt ist verborgen bis zur naechsten Bewegung (hidden_until_next_move) "clone_later":int, Wenn das Objekt erst nach dem Betrachten eines v_items in den Raum geclont werden soll (wird dann durch do_clone_now(name) ausgefuehrt) "min":int, wieviele Objekte von dem Typ soll es mindestens im Raum geben "max":int, wieviele Objekte von dem Typ soll es maximal im Raum geben "clone_message":string, Message, die alle beim Erstellen erhalten werden. "remove_message":string, Message beim Zerstoeren "chance":int Risiko (1-100), dass max. Objekte entstehen (nur bei set_random_clone_mode(1)) "no_clone_delay":int Gibt an, ob beim clonen eine Verzoegerung verwendet werden sollte. Default = 0 ]) Alternative zu dem Mapping kann man einfach nur den absoluten Pfad angeben, dabei wird das Obj aber bei Reset, sofern nicht vorhanden kreiert. Bei Meldungen duerfen allgemein Pseudoclosures verwendet werden. Das betroffene Objekt ist hierbei 'obj. Beispiel: "$Ein('obj) faellt vom Himmel." VERWEISE: delete_object, query_object, query_all_objects, set_random_clone_mode GRUPPEN: contents SOURCE: /i/room/contents.c FUNKTION: delete_object DEKLARATION: void delete_object(string name) BESCHREIBUNG: Die Beschreibung zum Objekt name wird wieder geloescht, beim naechsten Reset werden keine Objekte name erstellt. VERWEISE: add_object, query_object, query_all_objects GRUPPEN: contents SOURCE: /i/room/contents.c FUNKTION: query_object DEKLARATION: mapping query_object(string name) BESCHREIBUNG: Liefert ein Mapping, welches das Objekt name beschreibt Mappingstruktur siehe add_object. VERWEISE: add_object,delete_obj_des, query_all_objects GRUPPEN: contents SOURCE: /i/room/contents.c FUNKTION: query_all_objects DEKLARATION: mixed *query_all_objects() BESCHREIBUNG: Diese Funktion liefert ein Array mit den Mappings von jedem Objekt als Rueckgabewert. Mappingstruktur siehe add_object. VERWEISE: add_object,delete_object, query_object GRUPPEN: contents SOURCE: /i/room/contents.c FUNKTION: query_present_objects DEKLARATION: mapping query_present_objects() BESCHREIBUNG: Diese Funktion liefert ein Mapping mit allen Objektnamen, die im Container sind und von contents verwaltet werden. Das Mapping sieht wie folgt aus: RC = ([ name1: anzahl1, name2: anzahl2, .... ]) Anzahl sagt, wieviel mal das obj name im Raum ist. VERWEISE: query_later_objects, do_clone_now GRUPPEN: contents SOURCE: /i/room/contents.c FUNKTION: query_later_objects DEKLARATION: mapping query_later_objects() BESCHREIBUNG: Diese Funktion liefert alle Objektnamenn die noch geclont werden koennen mit do_clone_now(). Das Mapping sieht wie folgt aus: RC = ([ name1: anzahl1, name2: anzahl2, .... ]) Anzahl sagt, wieviele Male das Objekt name im Raum ist. VERWEISE: query_present_objects, do_clone_now GRUPPEN: contents SOURCE: /i/room/contents.c FUNKTION: set_max_objects DEKLARATION: void set_max_objects(int max) BESCHREIBUNG: Diese Funktion setzt die Anzahl Objekte, die von contents verwaltet werden, die maximal im Container sein duerfen. VERWEISE: set_min_objects GRUPPEN: contents SOURCE: /i/room/contents.c FUNKTION: set_min_objects DEKLARATION: void set_min_objects(int max) BESCHREIBUNG: Diese Funktion setzt die Anzahl Objekte, die von contents verwaltet werden, die minimal im Container sein muessen. VERWEISE: set_max_objects GRUPPEN: contents SOURCE: /i/room/contents.c FUNKTION: do_clone_now DEKLARATION: void do_clone_now(string name) BESCHREIBUNG: Clont das contents-Objekt name. Diese Objekt muss den status "clone_later":1 haben und in query_later_objects enthalten sein. Das Objekt wird in den Raum bewegt. VERWEISE: GRUPPEN: contents SOURCE: /i/room/contents.c FUNKTION: set_kirche DEKLARATION: static void set_kirche(string kirche) BESCHREIBUNG: Damit wird der generelle Auferstehungsort gesetzt. VERWEISE: query_kirche GRUPPEN: spieler SOURCE: /i/room/death_room.c FUNKTION: query_kirche DEKLARATION: string query_kirche(object player) BESCHREIBUNG: Liefert den Auferstehungsort fuer den Spieler. Wird 0 geliefert, so wird dieser aufgrund des Sterbeortes ermittelt. VERWEISE: set_kirche GRUPPEN: spieler SOURCE: /i/room/death_room.c FUNKTION: query_shadow_creator DEKLARATION: nomask string query_shadow_creator(object shadow) BESCHREIBUNG: Liefert das Objekt, welches diesen Shadow 'shadow' erschaffen hat. Der String hat die Form: "Dateiname (UID: uid, EUID: euid)" VERWEISE: init_shadow GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: destruct_shadow DEKLARATION: static void destruct_shadow() BESCHREIBUNG: Diese Funktion zerstoert den Shadow. ACHTUNG: Diese Funktion kann nur innerhalb des Objektes aufgerufen werden. Also nicht mit ob->destruct_shadow() !!! VERWEISE: remove_shadow, init_shadow, query_shadow_owner GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: query_prevent_shadow DEKLARATION: int query_prevent_shadow(object shadow) BESCHREIBUNG: Diese Funktion wird vom Shadow waehrend des init_shadow() im zu shadowenden Objekt aufgerufen. Parameter ist der Shadow selbst. Liefert query_prevent_shadow eine 1 zurueck, so bricht das Shadowueberwerfen mit COULD_NOT_SHADOW ab, der Shadow zerstoert sich selbststaendig. Liefert query_prevent_shadow eine 0 oder ist nicht im Objekt definiert, so darf der Shadow das Objekt (im allgemeinen) shadowen. VERWEISE: init_shadow, shadow GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: init_shadow DEKLARATION: varargs int init_shadow(object victim, int flag) BESCHREIBUNG: Mit dieser Funktion wird der Shadow ueber das Objekt gelegt. Wenn kein Flag angegeben wird, wird der Shadow einfach ueber das Objekt gelegt. Wenn flag == NO_MULTI_SHADOW ist, wird nachgeschaut, ob schon ein Shadow des gleichen Filenamens das Objekt shadowed. Wenn flag == REPLACE_OLD_SHADOW ist, wird ein eventuell schon vorhandener Shadow des gleichen Filenamens ersetzt (d.h. der andere Shadow wird zerstoert) Returnwerte: bei flag == NO_MULTI_SHADOW: SHADOW_ALREADY_EXISTS Ein Shadow des gleichen Filenamens existiert bereits. bei flag == REPLACE_OLD_SHADOW: OLD_SHADOW_REPLACED Ein Shadow des gleichen Filenamens wurde durch diesen ersetzt. allgemein: SHADOWING_OK Das Shadowen hat geklappt. allgemein: COULD_NOT_SHADOW Das Shadowen ist fehlgeschlagen. (der Shadow wird dabei automatisch zerstoert) Wenn das Shadowen geklappt hat, wird noch ein this_object()->shadow_create_action(this_object()) aufgerufen. Die Flags und Returnwerte sind in shadow.h definiert. VERWEISE: query_shadow_owner GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: remove_shadow DEKLARATION: int remove_shadow( { object sh | string sh } ) BESCHREIBUNG: Diese Funktion zerstoert den Shadow. Als Parameter muss man entweder den Objekt-Pointer des Shadows uebergeben, oder den Filenamen des Shadows (auch ohne #) Es wird 1 returned, wenn der Shadow sich zerstoert hat. Vor dem Zerstoeren wird noch ein this_object()->shadow_remove_action(this_object()) ausgefuehrt. VERWEISE: destruct_shadow, init_shadow, query_shadow_owner, unshadow_shadow GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: query_shadow DEKLARATION: object query_shadow(string str) BESCHREIBUNG: Diese Funktion liefert this_object(), wenn der Filename des Shadows ist. VERWEISE: init_shadow, remove_shadow, query_shadow_owner GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: query_shadow_owner DEKLARATION: object query_shadow_owner() BESCHREIBUNG: Diese Funktion liefert den Objektpointer des Objektes, das es shadowed. VERWEISE: init_shadow, remove_shadow, query_shadow GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: query_shadow_object DEKLARATION: object query_shadow_object() BESCHREIBUNG: Diese Funktion liefert this_object() VERWEISE: init_shadow, remove_shadow, query_shadow_owner, query_shadow GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: unshadow_shadow DEKLARATION: int unshadow_shadow(object ob) BESCHREIBUNG: Unshadowed den Shadow. ACHTUNG: Diese Funktion sollte eigentlich nie verwendet werden, es sei denn, man weiss, was man tut. VERWEISE: init_shadow, remove_shadow, query_shadow_owner, query_shadow GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: forbidden_shadow DEKLARATION: int forbidden_shadow(object shadow, object victim) BESCHREIBUNG: Bevor ein Shadow shadow ueber ein Objekt victim von gelegt wird, wird victim->forbidden("shadow",shadow) aufgerufen. Liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird das Shadowen abgelehnt. Die Funktion forbidden ruft in allen mit victim->add_controller( "forbidden_shadow", other) angemeldeten Objekten other die Funktion other->forbidden_shadow(shadow, victim) auf. Liefert auch nur eine dieser Funktionsaufrufen einen Wert ungleich 0, so liefert forbidden diesen und das Shadowen wird verhindert. Diese Funktion sollte nur mit sehr guten Gruenden genutzt werden, denn dem Spieler kann man dieses Fehlschlagen nicht mitteilen und viele Funktionen gehen davon aus, dass das Shadowen funktioniert. VERWEISE: init_shadow, notify_shadow, notify_unshadow GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: notify_shadow DEKLARATION: void notify_shadow(object shadow, object victim) BESCHREIBUNG: Nachdem ein Shadow shadow ueber ein Objekt victim von gelegt wurde, wird in victim (und damit auch in shadow) notify("shadow",shadow) aufgerufen. Die Funktion notify ruft in allen mit victim->add_controller("notify_shadow", other) angemeldeten Objekten other die Funktion other->notify_shadow( shadow, victim) auf. Sowohl victim als auch other koennen dann darauf reagieren. VERWEISE: init_shadow, forbidden_shadow, notify_unshadow GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: notify_unshadow DEKLARATION: void notify_unshadow(object shadow, object owner) BESCHREIBUNG: Bevor ein Shadow shadow von einem Objekt owner entfernt wird, wird in owner (und damit auch in shadow) notify("unshadow",shadow) aufgerufen. Die Funktion notify ruft in allen mit owner->add_controller("notify_shadow", other) angemeldeten Objekten other die Funktion other->notify_unshadow( shadow, owner) auf. Sowohl owner als auch other koennen dann darauf reagieren. VERWEISE: remove_shadow, notify_shadow, forbidden_shadow GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: shadow_create_action DEKLARATION: void shadow_create_action(object shadow) BESCHREIBUNG: Nach erfolgreichem Shadowen wird im Shadow diese Funktion aufgerufen. Ein Shadow kann damit mit der Arbeit beginnen. (Ausgabe von Erfolgsmeldungen oder aehnlichem.) Ein Shadow sollte nur dann reagieren, wenn shadow==this_object(), denn anderenfalls war dieser Funktionsaufruf fuer einen anderen Shadow bestimmt, weshalb dann mit query_shadow_owner()->shadow_create_action(shadow) der Aufruf weitergeleitet werden sollte. VERWEISE: init_shadow, notify_shadow, shadow_remove_action GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: shadow_remove_action DEKLARATION: void shadow_remove_action(object shadow) BESCHREIBUNG: Vor dem Entfernes eines Shadows wird im Shadow diese Funktion aufgerufen. Ein Shadow kann dann Melden, dass es mit der Arbeit aufhoert. (Ausgabe entsprechender Meldungen.) Ein Shadow sollte nur dann reagieren, wenn shadow==this_object(), denn anderenfalls war dieser Funktionsaufruf fuer einen anderen Shadow bestimmt, weshalb dann mit query_shadow_owner()->shadow_remove_action(shadow) der Aufruf weitergeleitet werden sollte. VERWEISE: remove_shadow, notify_unshadow, shadow_create_action GRUPPEN: shadow SOURCE: /i/shadow.c FUNKTION: search_adjektiv DEKLARATION: int search_adjektiv(mixed *adjektiv, string str) BESCHREIBUNG: Sucht in einer Liste von Adjektiven jenes raus, welches auf passt und liefert den Index+1 dieses Eintrages zurueck, oder 0, falls kein passes gefunden wurde. VERWEISE: adjektiv GRUPPEN: grammatik SOURCE: /i/tools/adjektiv.c FUNKTION: browse DEKLARATION: int browse(mixed str) BESCHREIBUNG: Damit startet man das Menue fuer this_player(). Der Wert str wird bei get_initial_more_info uebergeben. Dies ist als Interface fuer eine Action gedacht, deshalb wird im Fehlerfall eine notify_fail-Meldung gesetzt und 0 zurueckgeliefert. Im Erfolgsfall liefert browse einen Wert !=0. VERWEISE: get_initial_more_info, get_menue_more_info, continue_browse GRUPPEN: browser SOURCE: /i/tools/browser.c FUNKTION: get_initial_more_info DEKLARATION: static mixed get_initial_more_info(mixed str) BESCHREIBUNG: Diese Funktion wird beim Menuestart aufgerufen, um ein initiales Menue zu erhalten. str ist dabei das beim Aufruf von browse uebergebe Argument. Das Startmenue ist ein Array mit folgendem Aufbau: ({ Menue, Untermenue, ... }) Im Normalfall wird man nur ein einziges Menue angegeben, um das Browsen im Hauptmenue zu beginnen. Ein Menue hat dann folgenden Aufbau: ({ ({ Menuepunktearray, Statuszeile, Startzeile, More-Byte, gewaehlter Menuepunkt, benutzerdefinierte Daten, Nummern }) }) Das Menuepunktearray ist ein Array aus den einzelnen Zeilen des Hauptmenues. Dies kann entweder ein String oder ein Array der Form ({"Zeile",Nummer}) sein. Die Statuszeile ist eine Statuszeile entsprechend dem more(), d.h. entweder ein String, wobei das 1. %d durch die aktuelle Zeile und das 2. %d durch die Anzahl an Zeilen ersetzt wird, oder eine Closure, deren Argumente beim Aufruf die aktuelle Zeile und die Anzahl an Zeilen sind. Die Startzeile gibt die Zeile an, ab der die Ausgabe des Menues begonnen wird. Das More-Byte ist ein Flag mit folgenden Werten: M_LINE_NUMBERS: Zeilennummern werden vorangestellt M_DO_NOT_END: Keine automatische Beendigung, wenn das Menue ausgegeben wurde. (Diese Option sollte unbedingt angeschaltet werden.) M_FRAME: Der Ausgabe wird eine Linie voran- und nachgestellt. M_HEADER_LINE: Dem Menue wird eine Linie voran- und nachgestellt. M_AUTO_END: Wenn Menue auf einmal ausgegeben wurde, sofort beenden. (Diese Option ist beim Menue im Allgemeinen sinnlos.) Falls zu einem Menue bereits ein Untermenue angegeben wurde, dann steht die Nummer des Untermenues bei 'gewaehlter Menuepunkt' im uebergeordneten Menue. Im 6. Element hat man die Moeglichkeit, weitere Daten zum Menue abzuspeichern. Die Angabe von Nummern im 7. Element ist freiwillig. Damit kann jedem Menuepunkt eine Nummer zuordnen. Diese wird nur dazu verwendet, um die Spielereingabe umzuwandeln. Gearbeitet wird dann aber wieder mit den Array-Indizes + 1. Eine negative Zahl bedeutet, dass das kein Menuepunkt ist. Wenn es kein Menue gibt, dann kann eine Fehlermeldung als String zurueckgeliefert werden. VERWEISE: browse, more, get_menue_more_info, continue_browse GRUPPEN: browser SOURCE: /i/tools/browser.c FUNKTION: get_back_more_info DEKLARATION: static mixed get_back_more_info(mixed m) BESCHREIBUNG: Diese Funktion wird aufgerufen, um das uebergeordnete Menue zu ermitteln. m ist dabei die Menuestruktur (siehe get_initial_more_info). Die Standardimplementation liefert einfach diese Menuestruktur ohne das Untermenue zurueck. Zurueckgeliefert wird entweder die neue Menuestruktur, ein Fehlerstring, 0, wenn kein neues Menue angezeigt werden soll, END_BROWSE um das Menue zu beenden oder BREAK_BROWSE um es zu unterbrechen. VERWEISE: browse, get_initial_more_info, get_menue_more_info, continue_browse GRUPPEN: browser SOURCE: /i/tools/browser.c FUNKTION: get_next_more_info DEKLARATION: static mixed get_next_more_info(mixed m) BESCHREIBUNG: Diese Funktion wird aufgerufen, um zu einem Menue das naechste Menue auf derselben Ebene zu ermitteln. m ist dabei die Menuestruktur (siehe get_initial_more_info). Die Standardimplementation nutzt get_menue_more_info, um dieses Menue zu erhalten. Zurueckgeliefert wird entweder die neue Menuestruktur, ein Fehlerstring, 0, wenn kein neues Menue angezeigt werden soll, END_BROWSE um das Menue zu beenden oder BREAK_BROWSE um es zu unterbrechen. VERWEISE: browse, get_initial_more_info, get_menue_more_info, continue_browse GRUPPEN: browser SOURCE: /i/tools/browser.c FUNKTION: get_prev_more_info DEKLARATION: static mixed get_prev_more_info(mixed m) BESCHREIBUNG: Diese Funktion wird aufgerufen, um zu einem Menue das vorhergehende Menue auf derselben Ebene zu ermitteln. m ist dabei die Menuestruktur (siehe get_initial_more_info). Die Standardimplementation nutzt get_menue_more_info, um dieses Menue zu erhalten. Zurueckgeliefert wird entweder die neue Menuestruktur, ein Fehlerstring, 0, wenn kein neues Menue angezeigt werden soll, END_BROWSE um das Menue zu beenden oder BREAK_BROWSE um es zu unterbrechen. VERWEISE: browse, get_initial_more_info, get_menue_more_info, continue_browse GRUPPEN: browser SOURCE: /i/tools/browser.c FUNKTION: get_menue_more_info DEKLARATION: static mixed get_menue_more_info(mixed m, int nr) BESCHREIBUNG: Diese Funktion wird aufgerufen, um das Untermenue nr zu einem gebenen Menue m zu erhalten. m ist dabei die aktuelle Menuestruktur (siehe get_initial_more_info). Es kann entweder die neue Menuestruktur, ein Fehlerstring, 0, wenn kein neues Menue angezeigt werden soll, END_BROWSE, um das Menue zu beenden, oder BREAK_BROWSE, um es zu unterbrechen, zurueckgeliefert werden. VERWEISE: browse, get_initial_more_info, get_menue_more_info, continue_browse GRUPPEN: browser SOURCE: /i/tools/browser.c FUNKTION: browse_action DEKLARATION: static mixed browse_action(string str, mixed *mo) BESCHREIBUNG: Diese Funktion wird aufgerufen, um eine Eingabe str im Menue mo zu verarbeiten. mo ist dabei die Menuestruktur (siehe get_initial_more_info). Es kann entweder die neue Menuestruktur, ein Fehlerstring, 0, wenn die Eingabe nicht verarbeitet wurde, END_BROWSE, um das Menue zu beenden, oder BREAK_BROWSE, um es zu unterbrechen, zurueckgeliefert werden. Die Standardbehandlung der Eingabe erfolgt, wenn 0 zurueckgeliefert wurde. VERWEISE: browse, get_initial_more_info, get_menue_more_info, continue_browse GRUPPEN: browser SOURCE: /i/tools/browser.c FUNKTION: browse_end DEKLARATION: static void browse_end(mixed m) BESCHREIBUNG: Diese Funktion wird mit dem letzten Menue aufgerufen, wenn der Benutzer das Menue verlaesst. VERWEISE: browse, more_end, continue_browse GRUPPEN: browser SOURCE: /i/tools/browser.c FUNKTION: get_continued_more_info DEKLARATION: static mixed get_continued_more_info(mixed m, mixed str) BESCHREIBUNG: Diese Funktion wird aufgerufen, wenn ein abgebroches Menue wieder angezeigt wird. m ist dabei die Menuestruktur (siehe get_initial_more_info), str der bei continue_browse uebergebene Parameter. Die Standardimplementation liefert einfach diese Menuestruktur ohne eine Aenderung zurueck. Zurueckgeliefert wird entweder die neue Menuestruktur, ein Fehlerstring, END_BROWSE um das Menue zu beenden oder BREAK_BROWSE um es zu unterbrechen. VERWEISE: browse, continue_browse GRUPPEN: browser SOURCE: /i/tools/browser.c FUNKTION: continue_browse DEKLARATION: varargs static void continue_browse(mixed str) BESCHREIBUNG: Falls ein Menue mit BREAK_BROWSE unterbrochen wurde, so wird es hiermit wieder angezeigt. Der Parameter str wird an get_continued_more_info uebergeben. VERWEISE: browse, get_initial_more_info, get_menue_more_info, get_continued_more_info GRUPPEN: browser SOURCE: /i/tools/browser.c FUNKTION: build_table DEKLARATION: varargs string* build_table(mixed s, string *trenn, string *ausr) BESCHREIBUNG: Mit build_table kann auf einfache Weise aus einem zweidimensionalen Array aus Strings eine Tabelle erzeugt werden. Eine Angabe einer maximalen Tabellenbreite oder maximaler Spaltenbreite ist nicht moeglich. Enthaelt ein oder mehrere Eintraege in einer Zeile ein \n so fuehrt dies direkt darunter zu einer neuen Zeile mit diesen Eintraegen. BEISPIEL: this_player()->more ( build_table ( ({ ({"Ueberschrift 1","-","text 1","text 2"}), ({"Ueberschrift 2","-","text 3","text 4"}), ({"Ueberschrift 3","-","text 5","text 6"}) }), ({"|","~"}), ({"r","l","z"}) ) ); erzeugt: Ueberschrift 1 | Ueberschrift 2 | Ueberschrift 3 ~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~ text 1 | text 3 | text 5 text 2 | text 4 | text 6 PARAMETER: S: ein zweidimensionales String - Array, jedes Element dieses Arrays entspricht einer Spalte der Tabelle; jede Spalte besteht aus einem Stringarray mit den Elementen dieser Spalte. Besonderheit: Ist ein Element ein "-" oder identisch mit dem als horizontale Linie festgelegten Muster (siehe unten), so wird ein horizontaler Strich gezogen. Trenner: ein Stringarray, mit dem man besondere Muster fuer einzelne Tabellenelemente festlegen kann. Diese Muster koennen alle laenger als nur ein Zeichen sein. Nur die Elemente, die man wirklich aendern will, muessen angegeben werden. Der ganze Parameter kann weggelassen werden. Die Reihenfolge der Elemente dieses Arrays: - vertikaler Trenner: standardmaessig ein | - horizontale Linie: standardmaessig ein - - kreuz, wenn vertikale und horizontale Linie sich treffen, standardmaessig ein | - linker Rand der Tabelle - rechter Rand der Tabelle - oberer Rand der Tabelle - unterer Rand der Tabelle - linke obere Ecke der Tabelle - rechte obere Ecke der Tabelle - linke untere Ecke der Tabelle - rechte untere Ecke der Tabelle Ausrichtung: ein Stringarray, in dem fuer jede Spalte eine Ausrichtung festgelegt werden kann: l oder - fuer linksbuendig, dies ist die Standardeinstellung r oder + fuer rechtsbuendig, z, c oder | fuer zentriert, Dieser Parameter kann weggelassen werden. ALTERNATIVE: In /p/Misc/i/table existiert eine deutlich maechtigere Alternative, die allerdings dafuer auch um ein Vielfaches groesser und aufwendiger zu benutzen ist. VERWEISE: /p/Misc/i/table GRUPPEN: tool, text SOURCE: /i/tools/build_table.c FUNKTION: add_chats DEKLARATION: void add_chats(mixed msgs) BESCHREIBUNG: Damit kann man Meldungen zu denen aus load_chat eintragen, im Gegensatz zu load_chat werden die alten Meldungen aber nicht geloescht. Sie Struktur von msgs ist in load_chat beschrieben. VERWEISE: load_chat, load_a_chat, set_chance, set_start_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: add_a_chats DEKLARATION: void add_a_chats(mixed msgs) BESCHREIBUNG: Damit kann man Meldungen zu denen aus load_a_chat eintragen, im Gegensatz zu load_a_chat werden die alten Meldungen aber nicht geloescht. Sie Struktur von msgs ist in load_a_chat beschrieben. VERWEISE: load_chat, load_a_chat, set_a_chance, set_start_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: load_chat DEKLARATION: void load_chat(int chance, mixed chat) BESCHREIBUNG: Mit load_chat kann man Monster oder andere Objekte zufaellig eine Meldung aus chat sagen lassen. chance gibt dabei die Wahrscheinlichkeit (in Prozent der heart_beats) an. Falls chance negativ ist, so gibt es an, alle wieviel Heartbeats (im Durchschnitt) die Meldung ausgegeben wird. (-3 bedeutet ca. alle 6 Sekunden.) In chat kann man entweder einzelne Meldungen oder einen Array aus Meldungen uebergeben. Fuer die Meldungen gibt es wieder zwei Moeglichkeiten, entweder sind es Arrays fuer send_message(..) oder einfache Strings. Wenn die Strings mit "#" anfangen, werden sie als normales Echo ausgegeben, bei "!" also exec_command im Monster aufgerufen, ansonsten wird es als exec_command("sage", string) ausgegeben. In den Strings der Meldungen duerfen auch Pseudoclosures drin sein, also zB. "$Der()" wird auch verstanden. Beispiele: friedwart->load_chat(20, ({"Kennt ihr schon den Witz vom Frosch im Mixer?", "Kuerzester Mathematikerwitz: Sei Epsilon kleiner Null..."}) ); // Zwei Chats, die per "sage" ausgegeben werden. friedwart->load_chat(20, "!frage Kennt ihr schon den Witz vom Frisch im Mixer?"); // Nur ein einzelner Chat, der Friedwart etwas fragen laesst. friedwart->load_chat(20, ({ ({MT_NOISE, MA_NOISE, "Die Glocken an der Kappe des Hofnarren " + "scheppern."}), "Kuerzester Musikerwitz: Zwei Musiker gehen an einer Kneipe " + "vorbei..." }) ); // Ein Chat, der per send_message ausgegeben wird und ein Satz, den // Friedwart sagen soll. (also beide Varianten der Meldung gemischt) friedwart->load_chat(20, ({ ({MT_SENSE, MA_SENSE, "Du spuerst, wie dir allmaehlich dein " + "Herz in die Hosen rutscht. $Der() scheint das mit Freude " + "zu beobachten."}), "!frage $den() Bin ich wirklich $der()" }) ); // Nochmal einer fuer send_message und ein String, der als do_command // ausgefuehrt wird. Beide enthalten Pseudoclosures. Wer Lust hat, kann auch Closures verwenden. Sie stehen dann an den Stellen der Strings. Dabei muss man eigentlich nur beachten, dass das was sie zurueckliefern, sich eine der beiden Moeglichkeiten fuer Meldungen ergibt, ansonsten wird einfach nichts ausgegeben. Sie erhalten den NPC als ersten Parameter. Beispiele: string eine_funktion() { return "Das ist ein String!"; } mixed eine_zweite_funktion() { switch (random(3)) { case 1: return "Hier kommt ein String."; break; case 2: return ({ MT_NOISE, MA_NOISE, "Ein lauter Array!" }) break; default: return 0; } // Jetzt noch das load_chat: friedwart->load_chat(20, ({ ({MT_NOISE, MA_NOISE, "Friedwart laeutet eine imaginaeren Glocke."}), "!frage Wer bist du?", #'eine_funktion, ({MT_SENSE, MA_SENSE, #'eine_funktion}), #'eine_zweite_funktion, ({MT_UNKNOWN, MA_UNKNOWN, #'eine_zweite_funktion}) }) ); // Hier stehen die normalen Chats mit (Lfun-)Closures zusammen. Die beiden // Aufrufe von eine_funktion sorgen immer fuer eine Ausgabe. Bei // eine_zweite_funktion nur der erste, wenn er keine 0 liefert, die // zweite Variante (im Array) liefert nur was, wenn der String zurueck- // gegeben wird (ansonsten passts einfach nicht). Wenn etwas ausgegeben werden soll, wird vorher im Monster bzw. sonstigem Objekt und in der Umgebung noch forbidden("chat", object Objekt, mixed chat); aufgerufen. Wenn was ausgegeben wurde, kommt noch ein notify("chat", Objekt, chat); dazu. chat ist dabei die einzelne Meldung (String oder Array) und Objekt halt das Objekt, das die Meldung ausgibt. Um load_chat auch in Nicht-Monstern nutzen zu koennen, muss man einfach "/i/tools/chat" erben und im init chat::init() aufrufen. Sollte das Objekt einen heart_beat haben, muss man dort auch chat::heart_beat() aufrufen. VERWEISE: load_a_chat, add_chats, set_chance, set_start_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: load_a_chat DEKLARATION: void load_a_chat(int chance, mixed chat) BESCHREIBUNG: Mit load_a_chat kann man Monster im Kampf zufaellige Ausgaben erzeugen lassen. chance gibt dabei die Wahrscheinlichkeit und chat die Meldungen an. Falls chance negativ ist, so gibt es an, alle wieviel Heartbeats (im Durchschnitt) die Meldung ausgegeben wird. (-3 bedeutet ca. alle 6 Sekunden.) In chat kann man entweder einzelne Meldungen oder einen Array aus Meldungen uebergeben. Es gibt zwei Varianten, entweder ein String oder ein Array fuer send_message. chat hat die gleiche Struktur wie das chat aus load_chat. Fuer den Angreifer und "den Rest" koennen abweichende Meldungen angegeben werden, siehe Beispiel unten. Wenn ein String mit "!" anfaengt, wird er als Kommando (do_command) aufge- fasst, ansonsten als Echo ausgegeben. Pseudo-Closures (wie: "$Der()", "$der('enemy)) werden auch verstanden. Durch das 'enemy kann man auch den Gegner einsetzen, auf den gerade drauf- gehauen wird. Statt der Strings koennen auch Closures uebergeben werden, das Ergebnis muss dann aber zulaessig sein. Sie erhalten als ersten Parameter den Gegner und als zweiten Parameter das Monster selbst. Beispiel: // Das ist eine Lfun, die im Kampf zufaellig aufgerufen werden soll. string boeser_zauberspruch(object enemy) { auf_kleiner_flamme_roesten(enemy); return "!sage Nimm das, du Schurke!"; } load_a_chat(10, ({ "$Der() kann nicht verstehen, warum er umgebracht werden soll.", "!frage $den() Warum kaempfen wir hier eigentlich", ({MT_NOISE, MA_COMM, "$Der() schreit: Hilfe, Hilfe. $Der('enemy) " "will mich umbringen"}), // Diese Closure wird dann mit dem Feind als Parameter aufgerufen. #'boeser_zauberspruch }) ); Beim Array kann auch noch eine weitere Meldung angegeben werden, die dann nur der Angreifer erhaelt: load_a_chat(30, ({ ({ MT_LOOK | MT_FEEL, MA_USE, "$Der() schlaegt $dem('enemy) eine unzerbrechliche Vase an den Kopf.", "$Der() schlaegt dir eine unzerbrechliche Vase an den Kopf." }) }) ); VERWEISE: load_chat, add_a_chats, set_a_chance, set_start_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: set_chance DEKLARATION: void set_chance(int chance) BESCHREIBUNG: Mit set_chance kann man die Wahrscheinlichkeit (in Prozent) fuer die Ausgabe der Chats aus load_chat setzen. Wenn chance 0 ist, dann kommt garantiert nichts durch. Bei chance == 100 wird in jedem heart_beat des Monsters (oder anderen Objektes) was ausgegeben. Ein negativer Wert bedeutet das Reziproke der Wahrscheinlichkeit, also alle wieviel HeartBeats (im Durchschnitt) eine Meldung ausgegeben werden soll. (-3 bedeutet also bei ca. jedem 3. Heartbeat also alle 6 Sekunden.) VERWEISE: load_chat, add_chat, load_a_chat, set_start_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: set_a_chance DEKLARATION: void set_a_chance(int chance) BESCHREIBUNG: Mit set_chance kann man die Wahrscheinlichkeit (in Prozent) fuer die Ausgabe der Chats aus load_a_chat setzen. Wenn chance 0 ist, dann kommt garantiert nichts durch. Bei chance == 100 wird in jeder Runde des Kampfes was ausgegeben. Ein negativer Wert bedeutet das Reziproke der Wahrscheinlichkeit, also alle wieviel HeartBeats (im Durchschnitt) eine Meldung ausgegeben werden soll. (-3 bedeutet also bei ca. jedem 3. Heartbeat also alle 6 Sekunden.) VERWEISE: load_a_chat, add_a_chats, load_chat, set_start_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: set_chat_delay DEKLARATION: void set_chat_delay(int delay) BESCHREIBUNG: Setzt die garantierte Mindestruhezeit zwischen zwei chats auf 'delay' Sekunden. Das bedeutet, dass 'delay' Sekunden nach einer Aktion die naechste Aktion in jedem weiteren Herzschlag - bei positivem query_chance() mit Wahrscheinlichkeit query_chance() von 100 - bei negativem query_chance() mit Wahrscheinlichkeit 1 von -query_chance() kommen kann. Nach Ausfuehrung der Aktion wird die Referenzzeit fuer 'delay' neu gesetzt. VERWEISE: load_chat, add_chat, load_a_chat, set_start_chat, set_chance GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: set_a_chat_delay DEKLARATION: void set_a_chat_delay(int delay) BESCHREIBUNG: Setzt die garantierte Mindestruhezeit zwischen zwei a_chats auf 'delay' Sekunden. Das bedeutet, dass 'delay' Sekunden nach einer Aktion die naechste Aktion in jedem weiteren Herzschlag - bei positivem query_a_chance() mit Wahrscheinlichkeit query_a_chance() von 100 - bei negativem query_a_chance() mit Wahrscheinlichkeit 1 von -query_a_chance() kommen kann. Nach Ausfuehrung der Aktion wird die Referenzzeit fuer 'delay' neu gesetzt. VERWEISE: load_a_chat, add_a_chats, load_chat, set_start_chat, set_a_chance GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: set_start_chat DEKLARATION: int set_start_chat(int i) BESCHREIBUNG: Mit set_start_chat kann man die Meldungen von load_chat und load_a_chat an- und ausschalten. Es liefert den neuen Wert zurueck. VERWEISE: query_start_chat, load_chat, load_a_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: query_start_chat DEKLARATION: int query_start_chat() BESCHREIBUNG: Lierfert zurueck, ob die Meldungen von load_chat und load_a_chat grad an- oder ausgeschaltet sind. VERWEISE: query_start_chat, load_chat, load_a_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: pause_chat DEKLARATION: void pause_chat(int seconds) BESCHREIBUNG: Mit pause_chat kann man die Chat-Meldungen fuer einen gewissen Zeitraum aussetzen. Dies hat keinen Effekt, wenn die Meldungen gar nicht aktiviert sind (z.B. query_start_chat()==0). Kampf-Chat-Meldungen sind davon nicht betroffen, dafuer gibt es die Funktion pause_a_chat. Mit query_chat_paused kann man abfragen, ob und bis wann die Meldungen ausgesetzt sind. VERWEISE: query_chat_paused, pause_a_chat, set_start_chat, load_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: query_chat_paused DEKLARATION: int query_chat_paused() BESCHREIBUNG: Mit query_chat_paused kann man abfragen, wie lange die Chat-Meldungen ausgesetzt sind. Es wird die Restdauer der Pause in Sekunden zurueckgegeben. VERWEISE: pause_chat, query_a_chat_paused, load_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: pause_a_chat DEKLARATION: void pause_a_chat(int seconds) BESCHREIBUNG: Mit pause_a_chat kann man die Kampf-Chat-Meldungen fuer einen gewissen Zeitraum aussetzen. Dies hat keinen Effekt, wenn die Meldungen gar nicht aktiviert sind (z.B. query_start_chat()==0). Kampfmeldungen sind damit nicht betroffen, dafuer gibt es die Funktion pause_a_chat. Mit query_chat_paused kann man abfragen, ob und bis wann die Meldungen ausgesetzt sind. VERWEISE: query_a_chat_paused, pause_a_chat, set_start_chat, load_a_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: query_a_chat_paused DEKLARATION: int query_a_chat_paused() BESCHREIBUNG: Mit query_a_chat_paused kann man abfragen, wie lange die Kampf-Chat-Meldungen ausgesetzt sind. Es wird die Restdauer der Pause in Sekunden zurueckgegeben. VERWEISE: pause_a_chat, query_chat_paused, load_a_chat GRUPPEN: monster SOURCE: /i/tools/chat.c FUNKTION: check_save DEKLARATION: int check_save(mixed arr) BESCHREIBUNG: Prueft beliebigen Datentyp auf Speicherbarkeit. GRUPPEN: grundlegendes VERWEISE: mixed2str, save_value SOURCE: /i/tools/check_save.c FUNKTION: query_chest DEKLARATION: int query_chest() BESCHREIBUNG: Wenn diese Funktion 1 liefert, dann ist das Objekt vergrabbar. Ein solches Objekt sollte "/i/tools/chest" erben (und "*"::create(); nicht vergessen). VERWEISE: bury_chest, init_chest GRUPPEN: graben SOURCE: /i/tools/chest.c FUNKTION: bury_chest DEKLARATION: mapping bury_chest() BESCHREIBUNG: Liefert ein Mapping zurueck, welches fuer diese Schatztruhe abgespeichert wird. Diese Funktion wird nur einmal aufgerufen und zwar kurz, bevor die Truhe zerstoert wird. Wenn die Truhe ausgegraben wird, bekommt ein neuer Clone dieses Mapping via init_chest() uebergeben. Das Mapping sollte nur abspeicherbare Werte (keine Objekte oder Closures) enthalten. Mit dem Eintrag CHEST_OB (aus room.h) kann man einen alternativen Dateinamen zum Clonen beim Ausgraben angeben. Ansonsten sind die Eintraege frei waehlbar. VERWEISE: init_chest, query_chest GRUPPEN: graben SOURCE: /i/tools/chest.c FUNKTION: init_chest DEKLARATION: void init_chest(mapping data) BESCHREIBUNG: Wenn eine vergrabene Kiste wieder ausgegraben wird, so wird in der neu geclonten Kiste init_chest() mit dem vorher abgefragten Mapping aufgerufen. Die Kiste kann sich dann initialisieren bzw. wieder fuellen. VERWEISE: bury_chest, query_chest GRUPPEN: graben SOURCE: /i/tools/chest.c FUNKTION: colour_to_ansi DEKLARATION: varargs string colour_to_ansi(int colour, int ecol) BESCHREIBUNG: Erzeugt aus dem Bitfeld der Farbe den ANSI-String. In ecol sind erweiterte Farbbits. Bei einem 32-Bit-System stehen uns in colour nur 32Bits zur Verfuegung wovon das meiste schon in Benutzung ist. Fuer 256-Farben, wie sie einige Terminals haben, brauchen wir weitere 16 Bits. Die sind in ecol drin. VERWEISE: colours_to_ansi_colours, colour_to_string, string_to_colour GRUPPEN: farben SOURCE: /i/tools/colours.c FUNKTION: colours_to_ansi_colours DEKLARATION: varargs mapping colours_to_ansi_colours(mapping cols) BESCHREIBUNG: Erzeugt aus einem Mapping mit den Bitfeldern ein Mapping mit ANSI-Strings VERWEISE: colour_to_ansi, colour_to_string, string_to_colour GRUPPEN: farben SOURCE: /i/tools/colours.c FUNKTION: colour_to_string DEKLARATION: varargs string colour_to_string(int col, int ecol) BESCHREIBUNG: Macht aus dem Bitfeld einen menschenlesbaren String. In ecol sind erweiterte Farbbits, siehe colour_to_ansi. VERWEISE: colour_to_ansi, colours_to_ansi_colours, string_to_colour GRUPPEN: farben SOURCE: /i/tools/colours.c FUNKTION: string_to_colour DEKLARATION: varargs mixed string_to_colour(string str, int ecol) BESCHREIBUNG: Macht aus einem String das bitfeld oder eine Fehlermeldung. In ecol werden die erweiterten Farbbits (siehe colour_to_ansi) als Referenz zurueckgegeben, d.h. die Funktion wird wie folgt aufgerufen: colour = string_to_colour(str, &ecol); VERWEISE: colour_to_ansi, colours_to_ansi_colours, colour_to_string GRUPPEN: farben SOURCE: /i/tools/colours.c FUNKTION: read_config DEKLARATION: varargs mapping read_config(string configfile[, mapping filters]) BESCHREIBUNG: Liest die Konfigurationsdatei 'configfile' ein und liefert das Ergebnis als Mapping zurueck. Die Konfigurationsdatei sollte dazu folgenden Aufbau haben: [Sektion1] Label1: Daten1 Label2: Daten2 [Sektion2] DatenOhneLabel1 DatenOhneLabel2 Das zurueckgelieferte Ergebnis ist ein Mapping der Form: ([ "Sektion1": ([ "Label1":"Daten1", "Label2":"Daten2", ]), "Sektion2": ([ "DatenOhneLabel1", "DatenOhneLabel2", ]), ]) Im Mapping 'filters' kann man Closures fuer bestimmte Label angeben, welche die Daten vorher veraendern. Beispielsweise: ([ "Sektion1:Label1": (: to_int($3) :), // Konvertiert das Datum in // eine Zahl "Sektion2:": (: explode($2," ") :), // Die Zeilen in Woerter // zerstueckeln "Label2": #'just_another_fun, // Gilt fuer "Label2" in allen // Sektionen ]) Als Index fuer 'filters' gilt also "Sektion:Label", "Sektion:" oder "Label". Die Closure erhaelt den Sektionsnamen, Label (sofern vorhanden) und die Daten als Parameter. VERWEISE: GRUPPEN: Parser SOURCE: /i/tools/config.c FUNKTION: sleep DEKLARATION: async void sleep(int sec) BESCHREIBUNG: Unterbricht eine Coroutine für die angegebene Anzahl an Sekunden. Beispiel: await(sleep(10)); VERWEISE: call_out GRUPPEN: coroutinen SOURCE: /i/tools/coroutine.c FUNKTION: get_input DEKLARATION: async string get_input(string prompt) BESCHREIBUNG: Unterbricht eine Coroutine für eine Eingabe des aktuellen Spielers (this_player()) zu warten und liefert diese Eingabe zurück. Beispiel: string choice = await(get_input("Auswahl: ")); VERWEISE: input_to GRUPPEN: coroutinen SOURCE: /i/tools/coroutine.c FUNKTION: ensure_eval DEKLARATION: async void ensure_eval(int reserve=100000) BESCHREIBUNG: Wenn die verbleibenden Evals unter das angegebene Limit fallen, wird die Coroutine unterbrochen und eine Sekunde später fortgesetzt. Beispiel: await(ensure_eval()); VERWEISE: get_eval_cost, call_out GRUPPEN: coroutinen SOURCE: /i/tools/coroutine.c FUNKTION: range DEKLARATION: async void range(int start, int stop, int step = 1) BESCHREIBUNG: Liefert einen Zahlengenerator, der von start (inkl.) bis stop (exkl.) in Schritten von step zählt. Solch ein Generator kann z.B. mit foreach verwendet werden. Beispiel: foreach (int num: range(10, 100, 5)) printf("Schritt: %d\n", num); VERWEISE: foreach, enumerate GRUPPEN: coroutinen SOURCE: /i/tools/coroutine.c FUNKTION: enumerate DEKLARATION: async void enumerate(coroutine|mixed* values, int start = 0) BESCHREIBUNG: Liefert die Werte aus values in einer Struktur mit fortlaufender Numerierung. Die Struktur enumerated hat folgende Member: int number; mixed value; Beispiel: foreach (struct enumerated arg: enumerate(args)) printf("Argument %d: %Q\n", arg.number, arg.value); VERWEISE: foreach, range GRUPPEN: coroutinen SOURCE: /i/tools/coroutine.c FUNKTION: reversed DEKLARATION: async void reversed(mixed* values) BESCHREIBUNG: Liefert die Werte aus values in umgekehrter Reihenfolge. Beispiel: foreach (int num: reversed(({1,2,3,4,5})) printf("Wert: %d\n", num); VERWEISE: foreach, range, enumerate GRUPPEN: coroutinen SOURCE: /i/tools/coroutine.c FUNKTION: latch DEKLARATION: async mixed* latch(coroutine* crs, int num) BESCHREIBUNG: Unterbricht die aktuelle Coroutine solange, bis mindestens num Coroutinen aus der übergebenen Liste fertig sind. Die Funktion liefert ein Array gleicher Größe mit den Ergebnissen zurück (die ggf. noch 0 sein können, wenn die Coroutine nicht beendet ist). Die Funktionen for_any und for_all sind spezielle Varianten dieser Funktion. VERWEISE: for_any, for_all GRUPPEN: coroutinen SOURCE: /i/tools/coroutine.c FUNKTION: for_any DEKLARATION: coroutine for_any(varargs coroutine *crs) BESCHREIBUNG: Unterbricht die Coroutine bis eine der angegebenen Routinen fertig ist. Die Funktion liefert ein Array aus den Ergebnissen zurück (der erste Eintrag entspricht der ersten Coroutine usw.), die ggf. aber noch 0 sein können, wenn die jeweiligen Coroutinen noch nicht beendet sind. Beispiel: await(for_any(sleep(2), sleep(10))); // Wartet auf den schnellsten, also insgesamt 2 Sekunden. VERWEISE: for_all, latch GRUPPEN: coroutinen SOURCE: /i/tools/coroutine.c FUNKTION: for_all DEKLARATION: coroutine for_all(varargs coroutine *crs) BESCHREIBUNG: Unterbricht die Coroutine bis die angegebenen Routinen fertig sind. Die Funktion liefert ein Array aus den Ergebnissen zurück (der erste Eintrag entspricht der ersten Coroutine usw.). Beispiel: await(for_all(sleep(2), sleep(10))); // Wartet auf alle, also insgesamt 10 Sekunden. VERWEISE: for_any, latch GRUPPEN: coroutinen SOURCE: /i/tools/coroutine.c FUNKTION: read_bytes_async DEKLARATION: async protected void read_bytes_async(string file, int start = 0, int block_size = 100000) BESCHREIBUNG: Eine Coroutine, welche die Datei blockweise liest. VERWEISE: read_lines, read_bytes GRUPPEN: coroutinen SOURCE: /i/tools/coroutine.c FUNKTION: read_lines DEKLARATION: async protected void read_lines(string file, string encoding = "UTF-8") BESCHREIBUNG: Liest die angegebene Datei ein und liefert einzelne Zeilen als Strings. Die gelieferten Zeilen beinhalten alle den Zeilenumbruch am Ende. Beispiel: foreach (string line: read_lines(__FILE__)) write(line); VERWEISE: read_file, read_bytes_async GRUPPEN: coroutinen SOURCE: /i/tools/coroutine.c FUNKTION: query_database_description DEKLARATION: public string query_database_description() BESCHREIBUNG: Dient zur Anzeige einer Beschreibung der Datenbank inkl. spezieller Funktionen oder Befehle, die zur Wartung da sind. Sollte von jeder Datenbank ueberlagert werden. VERWEISE: init_database GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: init_database DEKLARATION: protected varargs int init_database(string databasefile,int disable_foreign_keys) BESCHREIBUNG: Initialisiert die Datenbankdatei. Falls die Datenbank geoeffnet ist, wird sie erst geschlossen, bevor die neue Datei zugewiesen wird. Das erbende Objekt braucht Schreibrechte auf Datenbankdatei. Bei disable_foreign_keys 0 werden bei jedem Oeffnen foreign keys aktiviert, bei 1 nicht. Rueckgabewert: * 0 wenn kein gueltiger neuer Name angegeben wurde oder Datenbank nicht oeffnen kann. Bei diesem Rueckgabewert braucht gar nicht mehr auf die DB zugegriffen werden. * 1 wenn die Datenbank mit gueltigem Namen das erste Mal aufgerufen wurde. * -1 wenn init_database schonmal mit gueltigem Namen aufgerufen wurde. VERWEISE: db_open, db_close, query_database_description GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: query_db_error DEKLARATION: public string query_db_error() BESCHREIBUNG: Gibt den Fehler der letzten Datenbankoperation zurueck, falls ein Fehler vorlag. Lag kein Fehler vor, wird 0 zurueckgegeben. VERWEISE: db_open, db_close GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: db_close DEKLARATION: protected int db_close() BESCHREIBUNG: Falls die Datenbank offen ist, wird sie hiermit geschlossen. 1 bei Erfolg. VERWEISE: db_open GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: db_open DEKLARATION: protected int db_open() BESCHREIBUNG: Falls die Datenbank geschlossen ist, wird sie hiermit geoeffnet. 1 bei Erfolg (also offen). VERWEISE: db_close GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: db_query DEKLARATION: protected mixed *db_query(string query, varargs mixed *args) BESCHREIBUNG: Fuehrt eine query mit Argumenten aus, siehe zb sl_exec. Bei Fehler wird 0 zurueckgegeben, ansonsten die Daten. Falls die Anweisung ein INSERT ist, so wird die Row-ID der zuletzt eingefügten Zeile in einem Array zurückgegeben. VERWEISE: db_open, sl_exec GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: db_rollback DEKLARATION: protected int db_rollback() BESCHREIBUNG: Macht alle db_query als eine Transaktion ab db_begin rueckgaengig, siehe dort. VERWEISE: db_begin, db_commit GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: db_commit DEKLARATION: protected int db_commit() BESCHREIBUNG: Die Transaktion (alle db_query's) ab dem letzten db_begin werden nun in die Datenbank umgesetzt. Das dient zum konsistenten Multi-Table-Update. VERWEISE: db_begin, db_rollback. GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: db_begin DEKLARATION: protected int db_begin() BESCHREIBUNG: Eine Transaktion wird begonnen. Das dient zum konsistenten Multi-Table-Update. VERWEISE: db_commit, db_rollback GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: db_query_err DEKLARATION: protected mixed *db_query_err(string query, varargs mixed *args) BESCHREIBUNG: Fuehrt eine query mit Argumenten aus, siehe zb sl_exec. Bei Fehler wird bei einer Transaktion automatisch ein Rollback initiiert und dieser Fehler geworfen, ansonsten die Daten zurueckgegeben. VERWEISE: db_open, sl_exec GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: db_escape_string DEKLARATION: protected string db_escape_string(string s) BESCHREIBUNG: Soll ein String ueber db_query gespeichert werden, muessen enthaltene Zeichen, hier das ' geschuetzt werden. ACHTUNG: Diese Funktion sollte nicht (mehr) verwendet werden. Strings können problemlos als Argumente an das db_query() übergeben werden. Unbekannte Strings sollten aus Performance- und Sicherheitsgründen nie direkt in einen SQL-Befehl eingebettet werden! VERWEISE: db_query,db_query_err,convert_array_to_sql_list GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: convert_array_to_sql_list DEKLARATION: protected string convert_array_to_sql_list(mixed list) BESCHREIBUNG: Fuer die Syntax WHERE key IN ('wert1','wert2'...) wird aus dem Parameter list eine solche SQL-Liste erzeugt. Bei Strings wird noch ein ' vor und danach angestellt und es durch db_escape_string gejagt. Alles uebrige wird einfach nur gelistet. ACHTUNG: Diese Funktion ist veraltet (siehe db_escape_string) VERWEISE: db_escape_string, convert_array_to_insert_list GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: convert_array_to_insert_list DEKLARATION: protected string convert_array_to_insert_list(mixed list) BESCHREIBUNG: Fuer die Syntax INSERT INTO table (...) VALUES (...),(...) wird in dieser Funktion alles nach VALUES erzeugt. ACHTUNG: Diese Funktion ist veraltet (siehe db_escape_string) VERWEISE: db_escape_string, convert_array_to_sql_list GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: get_one_int DEKLARATION: protected int get_one_int(mixed * result) BESCHREIBUNG: wertet die Daten aus und erwartet eine Integer, 0 wenn keine Integer vorhanden ist. VERWEISE: get_one_string GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: get_one_string DEKLARATION: protected string get_one_string(mixed * result) BESCHREIBUNG: Gibt einen String zurueck, wenn dieser in den Daten enthalten ist. VERWEISE: get_one_int GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: check_sl_rc DEKLARATION: protected int check_sl_rc(mixed result) BESCHREIBUNG: Prueft, ob es mind. eine Zeile in result gibt. VERWEISE: get_one_int GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: select_value DEKLARATION: protected varargs mixed select_value(mixed arr, int row, int col) BESCHREIBUNG: Gibt einen bestimmten Wert zurueck. VERWEISE: get_one_int, select_row,select_column GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: select_row DEKLARATION: protected varargs mixed *select_row(mixed arr, int row) BESCHREIBUNG: Gibt eine bestimme Reihe des Ergebnisses zurueck. VERWEISE: get_one_int, select_value,select_column GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: select_column DEKLARATION: protected varargs mixed *select_column(mixed arr, int col) BESCHREIBUNG: Gibt eine bestimme Reihe des Ergebnisses zurueck. VERWEISE: get_one_int, select_value,select_row GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: db_check_table DEKLARATION: protected int db_check_table(string tablename) BESCHREIBUNG: Prueft per SELECT COUNT(*) FROM , ob es die Tabelle gibt. Ruecke >=0 fuer die Anzahl der Zeilen, -1 bei Fehler. Ein Ddebugeintrag wird dafuer nicht generiert. VERWEISE: db_query GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: db_debug DEKLARATION: protected varargs void db_debug(string msg, int severity, int flags, string user) BESCHREIBUNG: Schreibt eine Meldung ins Debuglog der Datenbank (reservierte Tabelle db_debug_log). msg beinhaltet die Debug oder Fehlermeldung, die gespeichert werden soll. Folgende Debuglevel sind fuer severity in /sys/database.h definiert: DB_DBGLVL_DEBUG, DB_DBGLVL_INFO, DB_DBGLVL_WARNING, DB_DBGLVL_ERROR Folgende Flags sind moeglich: - DB_DBG_BUFFER_MSG speichere die Debugmeldung im internen Puffer und noch nicht in der Datenbanktabelle. Das erlaubt es Debuginformationen nur bei Fehlern zu speichern. - DB_DBG_FLUSH_BUFFER schreibe existiernen Puffer komplett in die Datenbank - DB_DBG_DELETE_BUFFER loesche den internen Puffer. - DB_DBG_CREATE lege die Tabelle db_debug_log an, falls sie noch nicht existiert. Sollte vor der Anlage anderer Tabellen gemacht werden. VERWEISE: query_all_dbg_messages GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: query_all_dbg_messages DEKLARATION: protected varargs string * query_all_dbg_messages(int flags) BESCHREIBUNG: wenn flags DB_DBG_BUFFER_MSG enthaelt, wird der interne Puffer ausgegeben. Bei DB_DBG_FLUSH_BUFFER werden die letzten maximal 1000 Zeilen aus der Datenbank geladen und umgekehrt sortiert, sprich die Neueste zuerst zurueckgegeben. VERWEISE: db_debug GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: query_dbg_messages DEKLARATION: public varargs string * query_dbg_messages(mapping options) BESCHREIBUNG: wenn options[DB_DBG_FLAGS] DB_DBG_BUFFER_MSG enthaelt, wird der interne Puffer ausgegeben. Bei DB_DBG_FLUSH_BUFFER werden die letzten maximal 100 Zeilen aus der Datenbank geladen und umgekehrt sortiert, sprich die Neueste zuerst zurueckgegeben. Die Auswahl kann mit DB_DBG_START_TIME zeitlich eingegrenzt werden. Die Anzahl Zeilen kann mit DB_DBG_LINES und der Offset mit DB_DBG_OFFSET festgelegt werden. Bei Angabe von DB_DBG_COUNT wird die aktuelle Auswahl durchgezaehlt. VERWEISE: db_debug GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: setup_counter DEKLARATION: protected int setup_counter(string idstr, int initial_value)) BESCHREIBUNG: Die Funktion legt die Tabelle db_counter an, falls sie noch nicht existiert, und speichert dort den idstr als Zaehler mit dem initial_value als Startwert. Bei fehler wird -1 zurueckgegeben, ansonsten 1. VERWEISE: increment_counter GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: increment_counter DEKLARATION: protected int increment_counter(string idstr) BESCHREIBUNG: Zaehlt einen Zaehler um 1 hoch und gibt den neuen Wert zurueck. Wenn der Zaehler nicht existiert, wird setup_counter genutzt. Im Fehlerfall wird -1 zurueckgegeben. VERWEISE: setup_counter GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: get_db_info DEKLARATION: protected string get_db_info(string key) BESCHREIBUNG: Liefert einen in der Tabelle db_info unter key gespeicherten string zurueck, 0 sonst. VERWEISE: set_db_info GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: set_db_info DEKLARATION: protected int set_db_info(string key, string value) BESCHREIBUNG: Setzt einen Wert value unter dem Schluessel key in der Tabelle db_info. Legt die Tabelle db_info an, wenn sie noch nciht existiert. Gibt 0 zurueck bei Fehler, 1 im Erfolgsfall. VERWEISE: get_db_info GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: get_db_version DEKLARATION: protected int get_db_version() BESCHREIBUNG: Liefert die aktuelle Version des Datenbankschemas (SQLite User-Version). VERWEISE: set_db_version GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: set_db_version DEKLARATION: protected void set_db_version(int ver) BESCHREIBUNG: Setzt die aktuelle Version des Datenbankschemas (SQLite User-Version). VERWEISE: get_db_version GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: check_debuggers DEKLARATION: protected int check_debuggers(int acls) BESCHREIBUNG: Prueft, ob debuggers mit den aktuellen acls ueberhaupt zuhoeren: 1 wenn ja, 0 wenn nein. Folgende defines aus database.h werden unterstuetzt: DB_DBG_ACL_DB_DEBUG,DB_DBG_ACL_DEBUGLOG,DB_DBG_ACL_EXPLAIN,DB_DBG_ACL_OTHER, DB_DBG_ACL_QUERY VERWEISE: send_to_debuggers GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: send_to_debuggers DEKLARATION: protected void send_to_debuggers(string msg, int acls) BESCHREIBUNG: Prueft, ob debuggers mit den aktuellen acls ueberhaupt zuhoeren: 1 wenn ja, 0 wenn nein. Folgende defines aus database.h werden fuer acls unterstuetzt: DB_DBG_ACL_DB_DEBUG (1) Ausgaben an database->db_debug... DB_DBG_ACL_DEBUGLOG (2) Ausgaben an debuglog_db->debuglog... DB_DBG_ACL_EXPLAIN (4) Fuer SELECT Abfragen wird ein Ausfuehrungsplan angegeben DB_DBG_ACL_OTHER (8) Andere applikationsinterne send_to_debuggers... DB_DBG_ACL_QUERY (16) Jede Datenbankabfrage wird ausgegeben. VERWEISE: check_debuggers GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: validate_debugger DEKLARATION: protected int validate_debugger(string rname) BESCHREIBUNG: Diese Funktion wird in update_debugger verwendet, um den Debugger zuzulassen. Per Default werden Admins zugelassen, aber die Funktion ist zum Ueberlagern und anpassen gedacht. VERWEISE: update_debugger GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: get_debuggers DEKLARATION: public string* get_debuggers() BESCHREIBUNG: Gibt die Debugger mit aktuellen Debugsettings in Klartext zurueck, Ein Debugger pro Zeile, alphabetisch sortiert. VERWEISE: validate_debugger GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: update_debugger DEKLARATION: public int update_debugger(string rname,int acls) BESCHREIBUNG: Fuegt einen debugger der Datenbank hinzu (acls != 0) oder entfernt ihn. Es koennen nur Gottchars eingetragen werden, die ueber validate_debugger zugelassen werden. Folgende defines aus database.h werden fuer acls unterstuetzt: DB_DBG_ACL_DB_DEBUG (1) Ausgaben an database->db_debug... DB_DBG_ACL_DEBUGLOG (2) Ausgaben an debuglog_db->debuglog... DB_DBG_ACL_EXPLAIN (4) Fuer SELECT Abfragen wird ein Ausfuehrungsplan angegeben DB_DBG_ACL_OTHER (8) Andere applikationsinterne send_to_debuggers... DB_DBG_ACL_QUERY (16) Jede Datenbankabfrage wird ausgegeben. VERWEISE: validate_debugger, check_debuggers, send_to_debuggers GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: flush_explain_plans DEKLARATION: public void flush_explain_plans() BESCHREIBUNG: Loescht die zwischengespeicherten Ausfuehrungsplaene. VERWEISE: update_debugger GRUPPEN: database SOURCE: /i/tools/database.c FUNKTION: init_debuglog DEKLARATION: protected varargs int init_debuglog(string file, int retention_period, int disable_foreign_keys) BESCHREIBUNG: Initialisiert die Datenbankdatei fuers debugloh. Falls die Datenbank geoeffnet ist, wird sie erst geschlossen, bevor die neue Datei zugewiesen wird. Das erbende Objekt braucht Schreibrechte auf Datenbankdatei. Zusaetzlich zu init_database wird die Tabellen debug_log, debug_conf, debug_conf_param angelegt, falls diese noch nicht existieren. Die retention_period gibt die Aufbewahrungszeit in Tagen an, -1 fuer immer. Bei disable_foreign_keys 0 werden bei jedem Oeffnen foreign keys aktiviert, bei 1 nicht. Rueckgabewert: * 0 wenn kein gueltiger neuer Name angegeben wurde oder Datenbank nich oeffnen kann. Bei diesem Rueckgabewert braucht gar nicht mehr auf die DB zugegriffen werden. * 1 wenn die Datenbank mit gueltigem Namen das erste Mal aufgerufen wurde. * -1 wenn init_debuglog schonmal mit gueltigem Namen aufgerufen wurde. VERWEISE: init_database, db_open GRUPPEN: database SOURCE: /i/tools/debuglog_db.c FUNKTION: debuglog DEKLARATION: varargs int debuglog(string msg, int severity, string user, string category) BESCHREIBUNG: Es werden die Logmeldung msg mit severity, user und category in der Datenbank gespeichert. Folgende defines aus database.h werden fuer severity unterstuetzt: DB_DBGLVL_DEBUG, DB_DBGLVL_INFO, DB_DBGLVL_WARNING, DB_DBGLVL_ERROR Rueckgabewert 0 bei Fehlern, 1 wenn ok. VERWEISE: init_debuglog GRUPPEN: database SOURCE: /i/tools/debuglog_db.c FUNKTION: get_debuglog_menue DEKLARATION: public mapping get_debuglog_menue() BESCHREIBUNG: Gibt den Menueintrag der debuglog_db zurueck. VERWEISE: debuglog, dynamic_browse, start_debuglog_menue GRUPPEN: database SOURCE: /i/tools/debuglog_db.c FUNKTION: start_debuglog_menue DEKLARATION: protected varargs int start_debuglog_menue(mixed * menues) BESCHREIBUNG: Fuegt zu den menues, falls vorhanden, das eigene Hauptmenue hinzu und startet dieses. VERWEISE: debuglog, dynamic_browse, get_debuglog_menue GRUPPEN: database SOURCE: /i/tools/debuglog_db.c FUNKTION: debuglog_get_kategorien DEKLARATION: protected string * debuglog_get_kategorien(mapping filter) BESCHREIBUNG: Liefert alle Kategorien. Optional kann ueber filter = ([DEBUGLOG_ZEITBEREICH : ({ von, bis }) ]) der Zeitbereich eingegrenzt werden. (von bis sind integer im time()-Zaehlung) VERWEISE: debuglog_get_filtered_messages GRUPPEN: database SOURCE: /i/tools/debuglog_db.c FUNKTION: debuglog_get_filtered_messages DEKLARATION: protected mixed debuglog_get_filtered_messages(mapping filter, int countflag) BESCHREIBUNG: Liefert eine Sammlung von Meldungen, die dem Filter entsprechen. Bei countflag !=0 wird nur die Anzahl als Integer zurueckgegeben. Sonst gelten folgende Filteroptionen als Teil des filter-Mappings: DB_DBG_LIMIT: Anzahl Zeilen begrenzen DB_DBG_OFFSET: beginnend bei 0 anfangen zu zaehlen. DEBUGLOG_SORTIERUNG: !=0: es wird aufsteigend nach Zeitstempel sortiert, sonst absteigend. DEBUGLOG_ZEITBEREICH: ein Array ({ von, bis }) um den Zeitbereich einzugrenzen. DEBUGLOG_BENUTZER: ein Array von Realnamen, nach der gefiltert werden soll. DEBUGLOG_KATEGORIEN: ein Array von Kategorien zum Filtern. DEBUGLOG_LEVEL: Bitflags zum Debuggen: siehe ? set_bit mit DB_DBGLVL_DEBUG(0), DB_DBGLVL_INFO(1), DB_DBGLVL_WARNING(2), DB_DBGLVL_ERROR(3). DEBUGLOG_MASKE: Hier kann ein String mit sql-Wildcards z.B. %Fehler% zur Auswahl bestimmter Debugmeldunginhalte herangezogen werden. Zurueckgegeben werden folgende Felder ({ ({ timestamp,seq,message,severity,user, category }), ... }) VERWEISE: debuglog_get_kategorien GRUPPEN: database SOURCE: /i/tools/debuglog_db.c FUNKTION: tell_emote DEKLARATION: void tell_emote(string *ausgabe, * an_wen_separat, object wer, string befehl, int msg_action, int msg_type) BESCHREIBUNG: Gib das aus, was parse_emote zurueckliefert Die Parameter im einzelnen: *ausgabe: Ist das 1. Element im Rueckgabearray von parse_emote *an_wen_separat: Ist das 2. Element im Rueckgabearray von parse_emote (Kann Objekte und V-Items enthalten) wer: Wer emotet? befehl: query_verb() msg_type: Ein MA_T Define aus message.h oder < 0, wenn die Funktion Default-Werte benutzen soll msg_action: Ein MA_X Define aus message.h oder < 0, wenn die Funktion Default-Werte benutzen soll VERWEISE: parse_emote, tell_emote GRUPPEN: monster, spieler, seele SOURCE: /i/tools/dein_name.c FUNKTION: parse_emote DEKLARATION: mixed parse_emote(string eingabe, int flagge, object wer, string befehl) BESCHREIBUNG: Parsed den Seele-Befehl "eingabe". Die Parameter im einzelnen: eingabe: zu parsende Eingabe ohne query_verb() siehe query_emote_case => rest_string flagge: Fall des Emotes. siehe query_emote_case wer: Person, die emotet befehl: query_verb() Beispiel: --------- - "ich huepft wild umher" - eingabe: "huepft wild umher" - flagge: 0 - wer: [Ausfuehrender] - befehl: "ich" - ";Ohren wackeln" - eingabe: "Ohren wackeln" - flagge: 2 - wer: [Ausfuehrender] - befehl: ";Ohren" Die Funktion liefert folgendes zurueck: --------------------------------------- - im Fehlerfall: einen String mit der Fehlermeldung - im Erfolgfall Array mit zwei Elementen: [0]: Message-Array mit x Elementen: [0]: Msg an alle, die NICHT im Personen-Array drinstehen [1..x]: Msg fuer 1-xte Person im Personen-Array [1]: Personen-Array mit x Elementen: [0]: Ist immer 0 [1..x]: Personen, die die xte Meldung aus dem Message-Array erhalten VERWEISE: query_emote_case, tell_emote GRUPPEN: monster, spieler, seele SOURCE: /i/tools/dein_name.c FUNKTION: query_emote_case DEKLARATION: int query_emote_case(string str, object obj, string rest_string) BESCHREIBUNG: Gibt den Wert zurueck, der bei "flagge" in "parse_emote" verwendet werden muss, damit der "str" ordentlich geparsed werden kann. Die Funktion liefert -1, wenn der Befehl "str" nicht als Seele-Befehl erkannt wird. Die Parameter im einzelnen: str: Zu pruefender Befehl (query_verb() + Reststring) obj: Objekt, was den Befehl ausfuehren soll rest_string: In ihm wird der Rest-String gespeichert (ohne query_verb()) Muss call-by-reference uebergeben werden VERWEISE: parse_emote, tell_emote GRUPPEN: monster, spieler, seele SOURCE: /i/tools/dein_name.c FUNKTION: verb DEKLARATION: deklin_message verb(string singular_3pers, object|mapping|int who = OBJ_TO, int art = ART_DER) BESCHREIBUNG: Liefert das für das Objekt who konjugierte Form des angegebenen Verbes. Das Verb muß in der 3. Person Singular angegeben werden. Beispiel: Der(ob) + " " + verb("geht", ob) + " nach Hause." VERWEISE: verb GRUPPEN: grammatik SOURCE: /i/tools/deklin_message.c FUNKTION: TI_LISTE DEKLARATION: Liste der Beschreibungs-TI-Defines BESCHREIBUNG: Um die Funktionen dieses Inherits zu nutzen, muss der Parameter fuer die von compile_desc generierte Closure ein Mapping mit folgenden Elementen sein: TI_VIEWER: Der Betrachter (ein Objekt) TI_ROOM: Der Raum (ein Objekt) TI_ITEM: 0, falls ein Raum betrachtet wird, ansonsten der betrachtete Gegenstand (Objekt) oder V-Item (Mapping) TI_OBJECT: 0, falls TI_ITEM kein V-Item ist, sonst das Objekt, an welchem des V-Item haengt. TI_DARK: 0, wenn der Betracher sehen kann, 1, wenn es fuer den Betrachter zu dunkel ist. (Kann auch eine Closure sein.) Die Funktion mapping get_desc_info_mapping(object viewer) erstellt ein solches Mapping fuer this_object(). VERWEISE: get_desc_info_mapping GRUPPEN: beschreibung SOURCE: /i/tools/description.c FUNKTION: query_light_description DEKLARATION: string query_light_description(int time) BESCHREIBUNG: Liefert die Tageszeitbeschreibung (z.B: "Es ist abends.") fuer die in 'time' angegebene Zeit. 'time' ist dabei eine Zahl hhmmss der Spielerzeit (wie von vclock() zurueckgeliefert). VERWEISE: query_light, query_daylight GRUPPEN: raum, licht SOURCE: /i/tools/description.c FUNKTION: desc_add DEKLARATION: protected mixed desc_add(mixed s1, mixed s2) BESCHREIBUNG: Diese Funktion wird bei der Generation des Beschreibungstextes aufgerufen und fuegt zwei Teile einer Beschreibung zusammen. Man kann sie ueberlagern, um z.B. andere Typen von Satzteilen neben Strings zu ermoeglichen. VERWEISE: compile_desc GRUPPEN: beschreibung SOURCE: /i/tools/description_core.c FUNKTION: desc_call_other_func DEKLARATION: protected mixed desc_call_other_func(object obj, string func, mixed info, mixed* par) BESCHREIBUNG: Diese Funktion wird bei T_CALL_OTHER, T_FILTER_CALL_OTHER oder T_TEXT_CALL_OTHER-Aufrufen genutzt, um die angegebene Funktion aufzurufen. Die Standardimplementation ruft diese Funktion ueber denClosure-Container auf. Diese Funktion kann ueberlagert werden, um den Funktionsaufruf anderweitig zu gestalten. VERWEISE: compile_desc, desc_call_func, desc_call_cl GRUPPEN: beschreibung SOURCE: /i/tools/description_core.c FUNKTION: desc_call_func DEKLARATION: protected mixed desc_call_func(string func, mixed info, mixed* par) BESCHREIBUNG: Diese Funktion wird bei T_FUNC, T_FILTER_FUNC oder T_TEXT_FUNC-Aufrufen genutzt, um die angegebene Funktion aufzurufen. Die Standardimplementation ruft diese Funktion im eigenen Objekt ueber den Closure-Container auf. Diese Funktion kann ueberlagert werden, um den Funktionsaufruf anderweitig zu gestalten. VERWEISE: compile_desc, desc_call_cl, desc_call_other_func GRUPPEN: beschreibung SOURCE: /i/tools/description_core.c FUNKTION: desc_call_cl DEKLARATION: protected mixed desc_call_cl(closure cl, mixed info, varargs mixed* par) BESCHREIBUNG: Diese Funktion wird bei direkten Angaben von Closures im Array oder bei T_CL, T_FILTER_CL oder T_TEXT_CL-Aufrufen genutzt, um die uebergebene Closure aufzurufen. Die Standardimplementation ruft sie direkt mit 'info' und den Elementen aus 'par' als weitere Parameter auf. Diese Funktion kann ueberlagert werden, um die Ausfuehrung der Closure anderweitig zu gestalten. VERWEISE: compile_desc, desc_call_func, desc_call_other_func GRUPPEN: beschreibung SOURCE: /i/tools/description_core.c FUNKTION: desc_condition DEKLARATION: protected mixed desc_condition(string name, mixed info, mixed* par) BESCHREIBUNG: Diese Funktion wertet durch ihren Namen angegebene Bedingungen aus. Die Standardimplementation ruft im aktuellen Objekt die Funktion "desc_condition_"+name mit 'info' und den Elementen aus 'par' als weitere Parameter auf, sofern sie vorhanden ist. Diese Funktion kann ueberlagert werden, um bestimmte Bedingungen gleich direkt dort zu implementieren. VERWEISE: compile_desc, desc_filter, desc_text, desc_number GRUPPEN: beschreibung SOURCE: /i/tools/description_core.c FUNKTION: desc_filter DEKLARATION: protected mixed desc_filter(string name, mixed info, mixed orig, mixed* par) BESCHREIBUNG: Diese Funktion implementiert durch Namen angebene Filter. Als dritten Parameter erhaelt sie den zu filternden Text. Die Standardimplementation ruft im aktuellen Objekt die Funktion "desc_filter_"+name mit 'info', 'orig' und den Elementen aus 'par' als weitere Parameter auf, sofern sie vorhanden ist. Diese Funktion kann ueberlagert werden, um bestimmte Filter gleich direkt dort zu implementieren. VERWEISE: compile_desc, desc_condition, desc_text, desc_number GRUPPEN: beschreibung SOURCE: /i/tools/description_core.c FUNKTION: desc_text DEKLARATION: protected mixed desc_text(string name, mixed info, mixed* par) BESCHREIBUNG: Diese Funktion generiert durch ihren Namen angegebene Texte. Die Standardimplementation ruft im aktuellen Objekt die Funktion "desc_text_"+name mit 'info' und den Elementen aus 'par' als weitere Parameter auf, sofern sie vorhanden ist. Diese Funktion kann ueberlagert werden, um bestimmte Texte gleich direkt dort zu implementieren. VERWEISE: compile_desc, desc_condition, desc_filter, desc_number GRUPPEN: beschreibung SOURCE: /i/tools/description_core.c FUNKTION: desc_number DEKLARATION: protected mixed desc_number(string name, mixed info, mixed* par) BESCHREIBUNG: Diese Funktion liefert durch ihren Namen angebene Eigenschaften zum Vergleich mit T_GREATER, T_EQUAL & Co. zurueck. Die Standardimplementation ruft im aktuellen Objekt die Funktion "desc_number"+name mit 'info' und den Elementen aus 'par' als weitere Parameter auf, sofern sie vorhanden ist. Diese Funktion kann ueberlagert werden, um bestimmte Werte gleich direkt dort zu implementieren. VERWEISE: compile_desc, desc_condition, desc_filter, desc_text GRUPPEN: beschreibung SOURCE: /i/tools/description_core.c FUNKTION: desc_compile DEKLARATION: protected int desc_compile(string name, mixed res, mixed* par) BESCHREIBUNG: Diese Funktion wird waehrend des Compilierens fuer T_ATOM_COMPILE-Elemente aufgerufen, um alternative Sprachen zu unterstuetzen. 'res' wird per Referenz uebergeben und darin wird als Rueckgabewert ein Lambda-Ausdruck erwartet. Die Funktion muss zudem eine der folgenden Konstanten zurueckliefern: T_ATOM_NOTHING: In 'res' wurde nichts zurueckgegeben. T_ATOM_COND: 'res' enthaelt eine Bedingung. T_ATOM_FILTER: 'res' enthaelt einen Filter. T_ATOM_TEXT: 'res' enthaelt einen Text. VERWEISE: compile_desc GRUPPEN: beschreibung SOURCE: /i/tools/description_core.c FUNKTION: compile_desc DEKLARATION: protected mixed compile_desc(mixed desc, mapping tags) BESCHREIBUNG: Diese Funktion wandelt eine Beschreibung mit einem im folgenden erklaerten Aufbau in eine Closure um. Falls 'desc' ein String oder bereits eine Closure ist, so wird diese direkt zurueckgeliefert. Ansonsten wird die generierte Closure zurueckgegeben. In 'tags' werden die Namen aller gefundenen T_TAG-Anweisungen gespeichert. Eine verarbeitete Beschreibung ist im einfachsten Falle ein Array mit einzelnen Teilen der Beschreibung. Diese Elemente koennen sein: - Ein String: Dieser wird so in die Beschreibung uebernommen. - Eine Closure: Diese wird bei Auswertung der Beschreibung (also, wenn sie jemand betrachtet) ausgewertet und das Ergebnis dort in die Meldung eingefuegt. - Eine Bedingung: Der nachfolgende Satzteil wird nur dann in die Meldung uebernommen, wenn die Bedingung wahr ist. Bedingungen werden durch Defines wie T_DARK (=es ist dunkel) oder T_VCLOCK(200000,220000) (=es ist zwischen 20 und 22 Uhr) dargestellt. Diese Bedingungen sind in den jeweiligen Includes (fuer Raeume room.h) definiert. Die spezielle Bedingung T_ELSE ist wahr, wenn die unmittelbar vorhergehende Bedingung falsch ist. - Ein Filter: Der Filter erhaelt den nachfolgenden Satzteil und kann ihn veraendern. Er wird ebenfalls durch entsprechende T-Defines dargestellt. - Ein vordefinierter Text: Er ist ebenfalls ein T-Define (z.B. T_DAYTIME), und wird beim Betrachten ausgewertet und dort eingefuegt. - Ein Array: Mit einem Array lassen sich mehrere Elemente gruppieren. BEISPIEL: ({ T_DARK, "Es ist dunkel hier, du hoerst aber Wasser plaetschern. ", T_ELSE, ({ "Du befindest dich am Ufer eines herrlich blauen Sees. ", T_DAY, ({ "In der Mitte des Sees erkennst du eine Insel. ", T_GREATER(TN_STAT_STR, 45), "Ob du wohl rueberschwimmen kannst? ", T_ELSE, "Sie ist aber zu weit weg, um zu ihr zu schwimmen. ", }) }) }) VERWEISE: compile_cond, desc_condition, desc_filter, desc_text, desc_number, desc_add, desc_call_func, desc_call_other_func, desc_call_cl, T_LISTE, T_ELSE, T_AND, T_OR, T_GREATER, T_FUNC, T_CL, T_CALL_OTHER, T_FILTER_FUNC, T_FILTER_CL, T_FILTER_CALL_OTHER, T_TEXT_FUNC, T_TEXT_CL, T_TEXT_CALL_OTHER, T_TAG GRUPPEN: beschreibung SOURCE: /i/tools/description_core.c FUNKTION: compile_cond DEKLARATION: protected mixed compile_cond(mixed cond, mapping tags) BESCHREIBUNG: compile_cond funktioniert aehnlich wie compile_desc, wandelt aber nur Bedingungen (z.B. T_NIGHT) in eine Closure um. VERWEISE: compile_desc, desc_condition GRUPPEN: beschreibung SOURCE: /i/tools/description_core.c FUNKTION: dynamic_browse DEKLARATION: int dynamic_browse(mapping menue|mapping* menues) BESCHREIBUNG: Startet das Menue 'menue' bzw. geht direkt in ein Untermenue, wenn ({ Hauptmenue, Untermenue, ... }) angegeben wurde. Das Menue wird dabei durch ein Mapping angegeben, welches folgende Eintraege haben kann: B_TYPE Der Menuetyp (ein String). Alle weiteren Funktionsaufrufe enthalten diesen String vorangestellt (es wird also _init, _display usw. aufgerufen). "browse" ist als Typ verboten. B_OB Gibt das Objekt an, in welchem die weiteren Funktionen zu finden sind (per Default: this_object()). B_OB_STR Hier wird der Typ String des B_OB verarbeitet. Besonderheit: wenn ein # am Ende des String steht, wird ein Clone davon im Spieler gesucht. B_CURRENT_LINE Aktuelle Zeilennummer. B_START_LINE Anfang der Zeilenzaehlung (meist 0 oder 1) B_END_LINE Ende der Zeilen. wird z.B. durch _total nur einmal ermittelt, damit _prompt die _total nicht ein 2.Mal aufruft. B_NUM_LINES Maximalanzahl Zeilen zur aktuellen Anzeige (wird intern erzeugt und initialisiert) B_FLAGS folgende Flags werden unterstuetzt: BF_DIRTY: dynamic_browse muss ueber _reload die Menumappings reinitialisieren, um fortzufahren. BF_RETURN: Dieses Menue ist ein Untermenue (wie B_HELP) und kann mit "z" verlassen werden. fuer B_STATICMORE und B_DYNAMICMORE (prompt-Anzeige) BF_NO_DISPLAY: die DisplayAnzeige (bei B_DONE) einmal unterdruecken. BF_MENU_PATH: wird intern verwendet fuer query_menue_path. B_PROMPT Ein String mit %d, der B_CURRENT_LINE ausgibt. Falls kein B_PROMPT und kein _prompt implementiert ist, wird - ausgegeben. B_DATA ist ein optionales Stringarray, dass wie bei more durchlaufen wird. Der B_TYPE==B_STATICMORE wird dafuer genutzt. B_FILE ist ein String fuer eine Datei, die angezeigt wird. Der B_TYPE==B_DYNAMICMORE wird dafuer genutzt. B_HELP ist ein menuemapping wie gerade beschrieben, dass bei Aufruf von '?' in den Actions im Browser aufgerufen wird. zb mit B_DATA oder mit B_FILE. B_HEADER_LINES Ein optionales Array der Groesse 4 mit folgenden Elementen: ({ erste Zeile, letzte Zeile, mittlere linie oben, mittlere linie unten}) B_SEARCH_STRING: interner Suchstring der durch das Default-Kommando / gesetzt und an _init(mapping old) wenn diese Funktion existiert, wird sie zum Initialisieren des Menumappings genutzt. So braucht man beim Aufruf von nur den B_TYPE und evtl B_OB anzugeben, alles andere ergaenzt dann die _init Funktion. Bei Fehler notify_fail aufrufen und B_QUIT zurueckgeben. B_NOTHING laesst das mapping unveraendert. string * _display(mapping menue) Gibt den aktuellen Ausschnitt der Daten als String-Array zurueck. ein leeres Array zeigt ein Ende der Daten, Rueckgabewert 0 zeigt einen Fehler an und bricht das Browsen ab. int _total(mapping menue) Gibt, wenn existent, die insgesamte Anzahl von Zeilen aus, die aktuell vorhanden sind. Dient zur Endeerkennung. string _prompt(mapping menue) Gibt den Promptstring des aktuellen Menus zurueck. Falls nicht vorhanden wird B_PROMPT versucht (s.o.) mixed _action(string str, mapping * menues) auf die Eingabe reagieren, Rueckgabe B_NOTHING: Standardbefehle [,u,d,q,?] im browser ausfuehren. Rueckgabe B_QUIT: Browsen beenden Rueckgabe B_CONTINUE: naechste Seite ausgeben. Rueckgabe B_REDRAW: wieder vom Anfang an ausgeben. Rueckgabe B_REBUILT: BF_DIRTY wird gesetzt, um gesamte Anzeige zu erneuern. Rueckgabe B_DONE: BF_NO_DISPLAY wird gesetzt, um zb fuer Fehlermeldungen ein ueberschreiben mit menue zu vermeiden. Rueckgabe mapping * neue oder alte Menuestruktur zum Ausfuehren mixed _select(int nr, mapping menue) Wenn bei B_NOTHING die Standardbefehle ausgewertet werden, werden auch die Angabe von Nummern ausgewertet und wenn vorhanden an _select weitergereicht. Als Rueckgabewerte wird ein Menu-mapping oder B_NOTHING erwartet. mixed _reload(mixed menues) wird aufgerufen, wenn das BF_DIRTY-Flag gesetzt ist, um die Menustruktur zu reinitialisieren. mixed _search_forward(mapping menue) mittels uebergebenen B_SEARCH_STRING wird nach diesem gesucht. das angepasste menue (mit neuem B_CURRENT_LINE) wird im Erfolgsfall zurueckgegeben, 0 sonst. Optionale Funktion, wenn nicht vorhanden, erscheint eine Standardfehlermeldung bei /. VERWEISE: browse_write_line,push_menue,pop_menue,query_menue_path, restore_menue_path GRUPPEN: dynamic_browse SOURCE: /i/tools/dynamic_browser.c FUNKTION: browse_write_line DEKLARATION: public int browse_write_line(string str) BESCHREIBUNG: Gibt eine Zeile des Menues aus, oder eine Meldung innerhalb _action. Kann auch ueberlagert werden, wenn die Art der Ausgabe angepasst werden muss. VERWEISE: dynamic_browser GRUPPEN: dynamic_browse SOURCE: /i/tools/dynamic_browser.c FUNKTION: push_menue DEKLARATION: protected mapping* push_menue(mapping* menues,mappping newmenue) BESCHREIBUNG: Fuegt newmenue den menues hinzu und gibt das resultierende menues zurueck. Fuegt ebenso newmenue dem Menupfad (query_menue_path) hinzu. VERWEISE: dynamic_browser, query_menue_path,update_menue,pop_menue GRUPPEN: dynamic_browse SOURCE: /i/tools/dynamic_browser.c FUNKTION: pop_menue DEKLARATION: protected mapping* pop_menue(mapping* menues,int cnt = 1) BESCHREIBUNG: Entfernt cnt Menueelemente vom menues und menu_path. VERWEISE: dynamic_browser, query_menue_path, push_menue,update_menue GRUPPEN: dynamic_browse SOURCE: /i/tools/dynamic_browser.c FUNKTION: update_menue DEKLARATION: protected int update_menue( menues,mapping to_add) BESCHREIBUNG: Aktualisiert menues und den menu_path mit to_add sofern vorhanden. Sinnvoll dann, wen sich Aufrufparameter aendern, die der menu_path sonst nicht mitbekommen wuerde. VERWEISE: dynamic_browser, query_menue_path, push_menue GRUPPEN: dynamic_browse SOURCE: /i/tools/dynamic_browser.c FUNKTION: query_menue_path DEKLARATION: protected mapping* query_menue_path() BESCHREIBUNG: Liefert den aktuellen Pfad zurueck. VERWEISE: dynamic_browser, push_menue GRUPPEN: dynamic_browse SOURCE: /i/tools/dynamic_browser.c FUNKTION: restore_menue_path DEKLARATION: public mapping* restore_menue_path(mapping *menupath) BESCHREIBUNG: Setzt den internen menu_path und gibt das menues Array zurueck. VERWEISE: dynamic_browser, push_menue GRUPPEN: dynamic_browse SOURCE: /i/tools/dynamic_browser.c FUNKTION: notify_dyn_browse_data DEKLARATION: protected void notify_dyn_browse_data(mapping menue,mapping *mpath) BESCHREIBUNG: Zeigt die aktuellen Menu-Daten genau vor dem Auswerten und Anzeigen. Der Menue Pfad mpath wird zur Speicherung ebenso uebergeben. VERWEISE: dynamic_browser GRUPPEN: dynamic_browse SOURCE: /i/tools/dynamic_browser.c FUNKTION: dynamicmore DEKLARATION: ([B_TYPE : "dynamicmore",B_FILE:""]) BESCHREIBUNG: Mapping zum Aufruf an dynamic_browser, das Dateien beliebiger Laenge anzeigen kann. VERWEISE: dynamic_browser GRUPPEN: dynamic_browse SOURCE: /i/tools/dynamic_browser.c FUNKTION: dynamicmore DEKLARATION: ([B_TYPE : "staticmore",B_DATA:]) BESCHREIBUNG: Mapping zum Aufruf an dynamic_browser, das Daten aus displaydata anzeigt. VERWEISE: dynamic_browser,staticmore_display GRUPPEN: dynamic_browse SOURCE: /i/tools/dynamic_browser.c FUNKTION: staticmore_display DEKLARATION: string * staticmore_display(mapping menue) BESCHREIBUNG: Interne Funktion, die zur Anzeige von menue[B_DATA] unter Beruecksichtigung von B_NUM_LINES und B_CURRENT_LINE genutzt werden kann. VERWEISE: dynamic_browser,staticmore GRUPPEN: dynamic_browse SOURCE: /i/tools/dynamic_browser.c FUNKTION: getopt DEKLARATION: mapping getopt(string command, mapping options [, int flag]) BESCHREIBUNG: getopt ist eine Toolfunktion aus dem Inheritfile /i/tools/getopt.c getopt parst einen vom Spieler eingegeben Befehl 'command' auf Optionen, und liefert, entsprechend den Spezifikationen aus dem mapping options, ein Mapping mit dem Ergebnis der Parserei zurueck. Erklaerung an einem Beispiel: ----------------------------- Der Spieler gibt ein: volk ...1... -gq -f"N l t" ...2... -S lt -l20 30 ...3... Das Volkbefehl ruft die getopt Funktion so auf: volk(string command) { mapping opt; opt = getopt(command,(["f": "\"%s\"", "S": "%s", "l": "%d %d", "h": 0, "g": 0 ])); } Das bedeutet getopt aktzeptiert damit die Optionen: -f mit gefolgtem String in Anfuehrungszeichen -S mit gefolgtem String (bis zum naechsten Space) -l mit zwei folgden Integern -h ohne weitere Angaben -g ohne weitere Angaben Alle anderen werden als fehlerhafte Optionen erkannt. Auf die obige Eingabe des Spieler erhaelt man nun in der Variablen opt: ([ "args": ({ "...1...", "...2...", "...3..." }), "errors": ({ "Unbekannte Option -q\n" }), "g" : 1, "f" : ({ "N l t" }), "S" : ({ "lt" }), "l" : ({ 20, 30 }) ]) getopt akzeptiert auch sogennante compound options, also wird hier -gq als -g -q gelesen, und -q wird als unbekannte Option bemaengelt. Komplexe Optionen (also solche die noch einen Wert erwarten) koennen auch in einer Gruppe von compound options erscheinen, jedoch nur als letzte, sie schliessen eine Gruppe von Optionen ab. Auch ein einfaches Leerzeichen beendet eine Gruppe von compound options. Man haette statt -gq -f"N l t" also auch schreiben koennen: -gqf"N l t". Leerzeichen zwischen komplexen Optionen und ihren Werten werden herausgefiltert. Also: -f"N l t" ist das gleiche wie -f "N l t" Alles was weder als Option, noch als Wert zu einer komplexen Option interpretiert werden kann, wird als einfaches Argument fuer den Befehl (hier also volk) interpretiert und unter dem Index "args" im Ergebnis- mapping als Feld abgelegt. (hier: ({ "...1...", "...2...", "...3..." }) ) Sind keine Arguemnte gefunden worden, so wird auch der Index "args" nicht im Ergebnismapping angelegt. [Mit implode(opt["args"]," ") kann man sich dann einen einfachen Argumentstring zusammen bauen, in dem die Optionen selbst fehlen.] Nach einer dem String -- in 'command' werden keine Optionen mehr erkannt. Wird der Funktion getopt eine 0 uebergeben anstatt eines String fuer 'command', so wird (im Defaultfall, ohne flag (s.u.)) eine leeres Mapping returned. Einfache, gefundene Optionen werden im Ergebnismapping einfach mit ihrem Buchstaben als Index und dem Wert 1 abgelegt. (hier: "g" : 1) [Achtung definieren in 'options' muss man sie (beispielsweise) mit "g":0] Komplexe, gefundene Optionen werden im Ergebnismapping mit ihrem Buchstaben als Index und einem Feld bestehend aus den gefunden Werten abgelegt. (hier: "f" : ({ "N l t" }) ) Es sind maximal 5 Werte pro komplexe Option erlaubt. Das kann ihm source code von getopt geaendert werden. Nicht gefundene, aber in 'options' definierte Optionen erscheinen gar nicht im Ergebnismapping. Gefundene aber nicht definierte Optionen erhalten einen Eintrag im einem Feld, das unter dem Index "errors" abgelegt wird. (hier: "errors": ({ "Unbekannte Option -q\n" }) ) Tritt kein Fehler auf, existiert auch der Index "errors" nicht. Flags fuer den getopt Befehl: ----------------------------- Der dritte optionale Parameter fuer den getopt Befehl ist ein Flag mit dem die Arbeitsweise des getopt beeinflusst werden kann. Es stehen dafuer die Konstanten aus zur Verfuegung: GO_ERRS Der getopt Befehl gibt die angesammelten Fehlermeldungen aus dem Feld "errors" selbst mit Hilfe der efun 'write' aus. Er stellt, wenn moeglich, das Verb (hier: "volk: ") vor die Fehlermeldungen. Der Returnwert von getopt bleibt unveraendert. GO_FAILS Der getopt Befehl gibt die angesammelten Fehlermeldungen mit Hilfe der efun notify_fail aus, und returned 0, statt des Mappings. Im Erfolgsfalle wird bei beiden Varianten nichts ausgegeben und das Mapping returned. GO_SLOPPY Unbekannte Optionen werden nicht als Fehler bemaengelt, sondern einfach ignoriert. Damit erspart man sich die Definition der 'einfachen' Optionen, man muss nur noch die komplexen Optionen definieren. GO_OPTIONS_FIRST Der Befehl muss mit Optionen beginnen. Sobald eine Zeichenkette gefunden wird, die keine Option mehr is (also ohne ein Minus beginnt), so wird nicht weiter nach Optionen gesucht. Die Optionen koennen mit Hilfe des Operators | kombiniert werden, nur GO_FAILS und GO_ERRS schlilessen sich gegenseitig aus: opt = getopt(command, ...., GO_SLOPPY | GO_FAILS); VERWEISE: GRUPPEN: tool SOURCE: /i/tools/getopt.c FUNKTION: query_is_brennbar DEKLARATION: int query_is_brennbar(object ob) BESCHREIBUNG: Liefert 1, wenn ob angezündet werden kann / brennt, ansonsten 0. Dabei wird vor allem das Material geprüft. GRUPPEN: feuer SOURCE: /i/tools/item_types.c FUNKTION: query_clothes_info DEKLARATION: struct clothes_type query_clothes_info(string type) BESCHREIBUNG: Liefert Informationen zum angegebenen Kleidungstyp zurück. Ein Rückgabewert von 0 indiziert einen nicht genehmigten Kleidungstyp. Ansonsten wird eine Struktur mit folgenden Einträgen geliefert: int quantity Erlaubte Anzahl von Kleidungsstücken, die man gleichzeitig tragen darf. int quantity_per_hand Falls 1, so wird quantity pro Hand gezählt. int order Definiert die Anzeigereihenfolge. string* count_types Eine Liste von Kleidungstypen, die bei obiger quantity mitgezählt werden. string* hide_types Eine Liste von Kleidungstypen, die beim Betrachten von dieser Kleidung verdeckt werden. VERWEISE: query_typ, query_armour_info GRUPPEN: kleidung SOURCE: /i/tools/kleidung.c FUNKTION: query_armour_info DEKLARATION: struct clothes_type query_armour_info(string armour_class) BESCHREIBUNG: Liefert Informationen zur angegebenen Rüstungsklasse zurück. Die Informationen sind äquivalent zu query_clothes_info(). VERWEISE: query_armour_class, query_clothes_info GRUPPEN: kleidung SOURCE: /i/tools/kleidung.c FUNKTION: determine_obvious_clothes DEKLARATION: object* determine_obvious_clothes(object *obs) BESCHREIBUNG: Liefert aus der angegebenen Objektliste diejenigen, die sichtbar sind, also nicht von anderen Kleidungsstücken aus der Liste verdeckt werden. VERWEISE: query_typ GRUPPEN: kleidung SOURCE: /i/tools/kleidung.c FUNKTION: add_parser DEKLARATION: varargs void add_parser(mixed what, mixed ob) BESCHREIBUNG: Damit werden Parsererweiterungen angemeldet. what ist entweder eine Closure oder ein Funktionsname. Bei letzterem muss bei ob das Objekt angegeben werden, falls die Funktion nicht im this_object() ist. Die Erweiterung wird immer dann aufgerufen, wenn der Parser bei einem Text ein einzelnes Symbol (Konstanten, Variablen usw.) erwartet. Die Parameter entsprechen dabei denen von parse_value. VERWEISE: delete_parser, query_parser, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: delete_parser DEKLARATION: varargs void delete_parser(mixed what, mixed ob) BESCHREIBUNG: Damit wird eine Erweiterung wieder entfernt. Als Parameter haben dieselbe Form wie bei add_parser. VERWEISE: add_parser, query_parser, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: query_parser DEKLARATION: mixed query_parser() BESCHREIBUNG: Liefert alle angemeldeten Parsererweiterungen in einem Array. VERWEISE: add_parser, delete_parser, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: add_makro DEKLARATION: varargs void add_makro(string name, closure unbound_cl, string *file) BESCHREIBUNG: Traegt ein Makro unter dem im 1. Parameter angegeben Namen ein. Wird beim Parsen dieser Name als Funktionsname gefunden, so wird stattdessen die angegebene Closure aufgerufen. file gibt die Datei an, in welcher das Makro gefunden wurde. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: delete_makro, query_makro, query_makros, clear_makros, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: delete_makro DEKLARATION: varargs void delete_makro(string name, string *file) BESCHREIBUNG: Loescht das angegebene Makro. file gibt die Datei an, in welchem die Aufforderung zum Loeschen des Makros steht. file gibt die Datei an, in welcher die Aufforderung zum Loeschen steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: add_makro, query_makro, query_makros, clear_makros, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: query_makro DEKLARATION: varargs closure query_makro(string name, int bound, string *file) BESCHREIBUNG: Liefert ein spezielles Makro. Ist bound!=0, wird eine gebundene Closure geliefert, ansonsten eine ungebundene. file gibt die Datei an, in welcher die Abfrage des Makros steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: add_makro, delete_makro, query_makros, clear_makros, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: is_makro DEKLARATION: varargs int is_makro(string name, string *file) BESCHREIBUNG: Liefert 1, falls name ein eingetragenes Makro ist. file gibt die Datei an, in welcher die Abfrage des Makros steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: query_makro, add_makro, delete_makro, query_makros, clear_makros, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: query_makros DEKLARATION: varargs mapping query_makros(string *file) BESCHREIBUNG: Liefert alle eingetragenen Makros. file gibt die Datei an, in welcher die Abfrage des Makros steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: add_makro, delete_makro, query_makro, clear_makros, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: clear_makros DEKLARATION: void clear_makros() BESCHREIBUNG: Loescht alle Makros. VERWEISE: add_makro, delete_makro, query_makro, query_makros, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: add_konstante DEKLARATION: varargs void add_konstante(string name, mixed cl, string *file) BESCHREIBUNG: Traegt den angegeben Wert unter dem im 1. Parameter angegebene Namen als Konstante ein. Trifft der Parser auf einen Bezeichner mit diesem Namen, wird dieser Wert dort eingesetzt. file gibt die Datei an, in welcher das Makro gefunden wurde. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: delete_konstante, query_konstante, query_konstanten, clear_konstanten, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: delete_konstante DEKLARATION: varargs void delete_konstante(string name, string *file) BESCHREIBUNG: Loescht eine eingetragene Konstante. file gibt die Datei an, in welcher die Aufforderung zum Loeschen steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: add_konstante, query_konstante, query_konstanten, clear_konstanten, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: query_konstante DEKLARATION: varargs mixed query_konstante(string name, string *file) BESCHREIBUNG: Liefert eine eingetragene Konstante. file gibt die Datei an, in welcher die Abfrage der Konstante steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: add_konstante, delete_konstante, query_konstanten, clear_konstanten, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: is_konstante DEKLARATION: varargs int is_konstante(string name, string *file) BESCHREIBUNG: Liefert 1, falls name eine eingetragene Konstante ist. file gibt die Datei an, in welcher die Abfrage der Konstante steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: query_konstante, add_konstante, delete_konstante, query_konstanten, clear_konstanten, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: query_konstanten DEKLARATION: varargs mapping query_konstanten(string *file) BESCHREIBUNG: Liefert alle eingetragenen Konstanten. file gibt die Datei an, in welcher die Abfrage der Konstanten steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: add_konstante, delete_konstante, query_konstante, clear_konstanten, is_konstante, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: clear_konstanten DEKLARATION: void clear_konstanten() BESCHREIBUNG: Loescht alle Konstanten. VERWEISE: add_konstante, delete_konstante, query_konstanten, is_konstante, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: add_define DEKLARATION: varargs void add_define(string name, string *file) BESCHREIBUNG: Traegt den angegeben Wert unter dem im 1. Parameter angegebene Namen als Define ein. Defines werden beim Einlesen von Include-Dateien mit read_include beachtet. (Sie unterscheiden sich von Konstanten darin, dass sie keinen Wert haben.) file gibt die Datei an, in welcher das Makro gefunden wurde. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: delete_define, query_define, query_defines, clear_defines, read_include GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: delete_define DEKLARATION: varargs void delete_define(string name, string *file) BESCHREIBUNG: Loescht ein eingetragenes Define. file gibt die Datei an, in welcher die Aufforderung zum Loeschen steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: add_define, query_define, query_defines, clear_defines, read_include GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: is_define DEKLARATION: varargs int is_define(string name, string *file) BESCHREIBUNG: Liefert 1, falls name ein eingetragenes Define ist. file gibt die Datei an, in welcher die Abfrage des Defines steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: add_define, delete_define, query_defines, clear_defines, read_include GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: query_defines DEKLARATION: varargs mapping query_defines(string *file) BESCHREIBUNG: Liefert alle eingetragenen Defines. file gibt die Datei an, in welcher die Abfrage der Defines steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: add_define, delete_define, query_define, clear_defines, read_include GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: clear_defines DEKLARATION: void clear_defines() BESCHREIBUNG: Loescht alle Defines. VERWEISE: add_define, delete_define, query_define, query_defines, read_include GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: parser_defined DEKLARATION: varargs int parser_defined(string was, string *file) BESCHREIBUNG: Liefert 1, wenn der angegebene String als define bekannt ist. file gibt die Datei an, in welcher die Abfrage des Defines steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: parser_efun_defined DEKLARATION: int parser_efun_defined(string was) BESCHREIBUNG: Liefert 1, wenn der angegebene String eine Efun ist. (Aehnlich dem __EFUN_DEFINED__) Zur Zeit wird auch bei Simul-Efuns eine 1 geliefert. VERWEISE: parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: allowed_char DEKLARATION: int allowed_char(int c) BESCHREIBUNG: Liefert 1, wenn das angegebene Zeichen in einem Bezeichner vorkommen darf. VERWEISE: GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: parse_value DEKLARATION: varargs mixed parse_value(string params, int pos, mixed error, string *symbols, string *file) BESCHREIBUNG: Der Parser versucht an der Stelle pos im String params eine Konstante oder einen Bezeichner zu erkennen. Gelingt dies, so wird das erkannte Ergebnis zurueckgeliefert und pos auf die Position des naechsten Zeichens gesetzt. Anderenfalls wird in error ein Array mit der Position des Fehlers als 1. Element und einer Fehlerbeschreibung als 2. Element geliefert. Sobald error!=0 zurueckkommt, ist das Ergebnis von parse_value unbestimmt. In symbols werden alle verwendeten Symbole zurueckgeliefert. file gibt die Datei an, in welcher dieser Ausdruck steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: parse_expr DEKLARATION: varargs mixed parse_expr(string params, int pos, mixed error, int max, string *symbols, string *file) BESCHREIBUNG: Der im 1. Parameter uebergebene String wird als LPC-Ausdruck analysiert und daraus ein entsprechendes Array mit Closures, welches zur Konstruktion einer Lambda genutzt werden kann, aufgebaut. Im 2. Parameter wird die Position, ab der der String durchsucht werden soll, angegeben und die Position des Zeichens, welcher nicht mehr zum gefundenen Ausdruck gehoert, zurueckgegeben. Im 3. Parameter wird im Fehlerfall ein Array mit der Position des Fehlers als 1. und der Fehlerbeschreibung als 2. Element zurueckgegeben. Sobald error!=0 ist, ist das Ergebnis von parse_expr unbestimmt. Bei der syntaktischen Analyse werden nur Operationen mit einem Vorrang < max beachtet, falls der 4. Parameter angegeben wurde. In symbols werden alle verwendeten Symbolnamen zurueckgeliefert. file gibt die Datei an, in welcher dieser Ausdruck steht. (Als Array ({file1, file2, ...}), wobei file1 file2 includet hat usw.) VERWEISE: parse_value GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: get_lines_from_file DEKLARATION: string *get_lines_from_file(string file) BESCHREIBUNG: Liest alle Zeilen aus file ein. Dabei werden Unix-, Win- und Mac-Zeilenumbrueche beachtet und Zeilen mit \ am Ende zusammengefasst. Die Anzahl an Zeilen bleibt dabei aber gleich. VERWEISE: read_include GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: delete_comments DEKLARATION: string *delete_comments(string *lines) BESCHREIBUNG: Entfernt alle Kommentare (// oder *) aus den Zeilen. Die Anzahl an Zeilen bleibt dabei aber gleich. VERWEISE: read_include GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: preprocess_include_lines DEKLARATION: protected varargs string *preprocess_include_lines(string *lines, string filename) BESCHREIBUNG: Wird von process_one_include_line aufgerufen, wenn es eine Datei includen soll. Standardmaessig ruft sie delete_comments auf und liefert das Ergebnis zurueck. VERWEISE: read_include, process_include_lines, process_one_include_line GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: process_pragma DEKLARATION: protected varargs mixed process_pragma(string text, string *file, int zeile, mixed *lines) BESCHREIBUNG: Wird von process_one_include_line aufgerufen, wenn es auf ein #pragma stoesst. Dabei enthaelt text die restliche Zeile und lines die restlichen Zeilen. Das Ergebnis liefert process_one_include_file direkt zurueck. Die Originalfunktion macht gar nichts. VERWEISE: read_include, process_include_lines, process_one_include_line GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: handle_preprocessor_symbols DEKLARATION: protected varargs mixed handle_preprocessor_symbols(mixed *parr, mixed l, string *symbols, mixed *line, mixed error, int mkcl) BESCHREIBUNG: Wird von process_one_include_line aufgerufen, wenn eine Lambda-Closure erstellt werden soll, um eventuell aufgetretene Symbole zu behandeln. Dabei entsprechen parr und l den Parameter der Efun lambda. symbols ist die Liste aller aufgetretenen Symbole in l und line die aktuelle Zeile. In error wird ein gegebenenfalls aufgetretener Fehler zurueckgeliefert und wenn mkcl!=0 ist, wird die l in eine Lambda-Closure umgewandelt, ansonsten wird nur der 2. Parameter fuer die lambda() zurueckgeliefert. Die Originalfunktion liefert einen Fehler, wenn unbekannte Symbole aufgetreten sind. VERWEISE: read_include, process_include_lines, process_one_include_line GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: process_one_include_line DEKLARATION: varargs mixed process_one_include_line(mixed *lines) BESCHREIBUNG: Verarbeitet fuer read_include/process_include_lines eine Zeile. Liefert einen Wert !=0 bei einem Fehler. VERWEISE: read_include, process_include_lines GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: process_include_lines DEKLARATION: varargs void process_include_lines(mixed *lines, closure callback, mixed *callback_params) BESCHREIBUNG: Verarbeitet fuer read_include die angegebenen Zeilen. Ein Element von lines hat die Struktur ({string Zeile, string *Woraus, int Zeilennummer}). VERWEISE: read_include, add_makro, add_konstante, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: read_include DEKLARATION: varargs void read_include(string file|string *files, closure callback, varargs mixed *callback_params) BESCHREIBUNG: read_include ist ein einfacher Header-Datei-Parser. Er nimmt sich alle #define-Zeilen aus der/den angegebenen Datei(en), jagt sie durch den Parser und traegt sie ein, falls es keinen Fehler dabei gibt. Dabei achtet er auf #if's und verarbeitet auch #include. Kommentare werden dabei beachtet. Er ist sehr(!) eval-aufwendig, startet aber selbststaendig einen call_out, wenn zuwenig Evals vorhanden sind. Wurde(n) die Datei(en) vollstaendig eingelesen, ruft er callback mit den angegebenen Parametern auf. VERWEISE: add_makro, add_konstante, parse_value, parse_expr GRUPPEN: Parser SOURCE: /i/tools/lpc_parser.c FUNKTION: mapil_forbidden DEKLARATION: varargs int mapil_forbidden(string base_type, int magic_type, int flag, string name, object caster, mixed victim, int chance, mapping extra) BESCHREIBUNG: Hiermit kann man pruefen, ob der Einsatz des Magiespruchs bzw. des Handwerks erlaubt ist. Die Funktion kennt folgende Parameter: string base_type Der Basis-Typ ist entweger M_B_MAGIE oder M_B_HANDWERK int magic_type Typ der Magie / des Handwerks (Dies sind Defines in /sys/mapil.h) - Kampf M_T_FIGHT - Schutz M_T_PROTECT - Heilung M_T_HEAL - Information M_T_INFO - Teleport M_T_TELEPORT - Versand eines Gegenstandes M_T_TRANSPORT - Nahrungsaufnahme M_T_NUTRITION - Manipulation M_T_MANIPULATION (oder kurz: M_T_MP) - Gedankenmanipulation M_T_MINDCONTROL (oder kurz: M_T_MC) - Tarnung M_T_HIDE - Kommunikation M_T_COMM int flag (Dies sind Defines in /sys/mapil.h) - M_F_FAR fern (Fuer Fernzauber) - M_F_OFFENSIVE offensiv (Fuer Sprueche, die Schaden verursachen) - M_F_AREA flaeche (Fuer Flaechenzauber bzw. Flaechenwirkungen) - M_F_POSITIVE positiv (Auswirkung auf das Opfer ist positiv) - M_F_NEGATIVE negativ (Auswirkung auf das Opfer ist negativ) - M_F_TEST test (Es soll nur getestet werden, ob es klappen wuerde oder nicht. Der Rueckgabewert sollte ein Integer sein, an dem man ablesen kann, warum es nicht ging) Es darf keine Meldung erzeugt werden und sonst nichts veraendert werden. - M_F_NO_MESSAGE Soll jegliche Meldung unterdruecken. string name Genauer Name des Spells (Magiespruchs oder des Handwerks) als String object caster Spieler- oder NPC-Objekt, das den Spell wirkt. mixed victim Ziel, auf das der Spell einwirkt, sofern anwendbar. int chance Einen Wert von 1 bis 100, wie gut es geklappt hat. Fuer Aktionen, bei denen es (noch) keine Information gibt, wie gut die Aktion geklappt hat, uebergibt man einfach 50, damit man dies spaeter, falls man so einen Wert einbauen will, auch hoeher und niedriger uebergeben kann. Fuer Fehlschlaege muss forbidden nur aufgerufen werden, wenn der Fehlschlag eine Aktion ausfuehrt, die nicht auf den Magier zielt (z.B. es faengt an zu regnen oder so) Dann wird forbidden neu aufgerufen mit positivem Wert im Opfer des Regens und Env des Opfers. mapping extra Ein optionales Mapping mit weiteren Infos Das Mapping ist fuer erweiterte Daten da, die jede Gilde fuer sich uebergeben kann. Es ist optional und kann also auch 0 sein. Das schoene ist, dass sich durch das Mapping auch Sprueche modifizieren lassen, indem die Werte des Mappings veraendert werden. Falls ein Objekt dies tut, muss es auf jeden Fall 'extra["modified"] = 1' setzen, damit der Spruch die Aenderungen mitbekommt. WICHTIG: das Mapping darf nur durch Zuweisungen veraendert werden, und nicht durch Addition. Beispiel: extra["chance"] = 10; Korrekt extra += (["chance":10]); FALSCH Moegliche Eintraege des Mapping: - stufe: Stufe des Zaubers von 1 bis 10 - ZP: Wieviele ZPs dafuer notwendig sind - modified: Dies muss auf 1 gesetzt werden, wenn ein Controller das Mapping veraendert hat. - gegenstand: Der Gegenstand, der gestohlen werden soll, der manipuliert werden soll usw. - ... Genaueres ueber die Parameter und den Einsatz findet man unter: /doc/funktionsweisen/MAPI-Light VERWEISE: mapil_notify, add_controller GRUPPEN: grundlegendes,mapil SOURCE: /i/tools/mapil.c FUNKTION: mapil_notify DEKLARATION: varargs void mapil_notify(string base_type, int magic_type, int flag, string name, object caster, mixed victim, int chance, mapping extra) BESCHREIBUNG: Hiermit benachrichtigt man alle controller, dass ein Magiespruch bzw. ein Handwerk durchgefuehrt wuerde. Die Funktion kennt folgende Parameter: string base_type Der Basis-Typ ist entweger M_B_MAGIE oder M_B_HANDWERK int magic_type Typ der Magie / des Handwerks (Dies sind Defines in /sys/mapil.h) - Kampf M_T_FIGHT - Schutz M_T_PROTECT - Heilung M_T_HEAL - Information M_T_INFO - Teleport M_T_TELEPORT - Versand eines Gegenstandes M_T_TRANSPORT - Nahrungsaufnahme M_T_NUTRITION - Manipulation M_T_MANIPULATION (oder kurz: M_T_MP) - Gedankenmanipulation M_T_MINDCONTROL (oder kurz: M_T_MC) - Tarnung M_T_HIDE - Kommunikation M_T_COMM int flag (Dies sind Defines in /sys/mapil.h) - M_F_FAR fern (Fuer Fernzauber) - M_F_OFFENSIVE offensiv (Fuer Sprueche, die Schaden verursachen) - M_F_AREA flaeche (Fuer Flaechenzauber bzw. Flaechenwirkungen) - M_F_POSITIVE positiv (Auswirkung auf das Opfer ist positiv) - M_F_NEGATIVE negativ (Auswirkung auf das Opfer ist negativ) - M_F_TEST test (Es soll nur getestet werden, ob es klappen wuerde oder nicht. Der Rueckgabewert sollte ein Integer sein, an dem man ablesen kann, warum es nicht ging) Es darf keine Meldung erzeugt werden und sonst nichts veraendert werden. - M_F_NO_MESSAGE Soll jegliche Meldung unterdruecken. string name Genauer Name des Spells (Magiespruchs oder des Handwerks) als String object caster Spieler- oder NPC-Objekt, das den Spell wirkt. mixed victim Ziel, auf das der Spell einwirkt, sofern anwendbar. int chance Einen Wert von -100 bis +100, wie gut es geklappt hat (0 heisst nicht geklappt, negativ heisst Fehlschlag -100 ist dann der uebelste Fehlschlag) mapping extra Ein optionales Mapping mit weiteren Infos (siehe mapil_forbidden) Genaueres ueber die Parameter und den Einsatz findet man unter: /doc/funktionsweisen/MAPI-Light VERWEISE: mapil_forbidden, add_controller GRUPPEN: grundlegendes,mapil SOURCE: /i/tools/mapil.c FUNKTION: notify_magie DEKLARATION: void notify_magie(int magic_type, int flag, string name, object caster, mixed victim, int chance, mapping extra) BESCHREIBUNG: Beim Ausfuehren von Magie (z.B. einem Zauberspruch) wird, sofern die Magie auf MAPI Light basiert, notify_magie in Caster, Victim sowie in deren Umgebungen aufgerufen. Ausnahmen sind moeglich, muessen aber dokumentiert werden. Die Parameter sind identisch mit denen von mapil_notify. Diese sind unter /doc/funktionsweisen/MAPI-Light naeher dokumentiert. VERWEISE: forbidden_magie, notify_handwerk, forbidden_handwerk GRUPPEN: grundlegendes,mapil SOURCE: /i/tools/mapil.c FUNKTION: forbidden_magie DEKLARATION: int forbidden_magie(int magic_type, int flag, string name, object caster, mixed victim, int chance, mapping extra) BESCHREIBUNG: Vor dem Ausfuehren von Magie (z.B. einem Zauberspruch) wird, sofern sie auf MAPI Light basiert, forbidden_magie in Caster, Victim sowie in deren Umgebungen aufgerufen. Ausnahmen sind moeglich, muessen aber dokumentiert werden. Wenn forbidden_magie einen Wert ungleich 0 liefert, wird die Magie verhindert. Die Parameter sind identisch mit denen von mapil_forbidden. Diese sind unter /doc/funktionsweisen/MAPI-Light naeher dokumentiert. VERWEISE: notify_magie, forbidden_handwerk, notify_handwerk GRUPPEN: grundlegendes,mapil SOURCE: /i/tools/mapil.c FUNKTION: notify_handwerk DEKLARATION: void notify_handwerk(int magic_type, int flag, string name, object caster, mixed victim, int chance, mapping extra) BESCHREIBUNG: Beim Ausfuehren von Handwerk (z.B. Gildenfaehigkeit) wird, sofern es auf MAPI Light basiert, notify_handwerk in Caster, Victim und deren Umgebungen aufgerufen. Ausnahmen sind moeglich, muessen aber dokumentiert werden. Die Parameter sind identisch mit denen von mapil_notify. Diese sind unter /doc/funktionsweisen/MAPI-Light naeher dokumentiert. VERWEISE: forbidden_handwerk, notify_magie, forbidden_magie GRUPPEN: grundlegendes,mapil SOURCE: /i/tools/mapil.c FUNKTION: forbidden_handwerk DEKLARATION: int forbidden_handwerk(int magic_type, int flag, string name, object caster, mixed victim, int chance, mapping extra) BESCHREIBUNG: Beim Ausfuehren von Handwerk (z.B. Gildenfaehigkeit) wird, sofern es auf MAPI Light basiert, notify_handwerk in Caster, Victim und deren Umgebungen aufgerufen. Ausnahmen sind moeglich, muessen aber dokumentiert werden. Die Parameter sind identisch mit denen von mapil_forbidden. Diese sind unter /doc/funktionsweisen/MAPI-Light naeher dokumentiert. VERWEISE: notify_handwerk, forbidden_magie, notify_magie GRUPPEN: grundlegendes,mapil SOURCE: /i/tools/mapil.c FUNKTION: set_msg_in DEKLARATION: void set_msg_in(string msg_in) BESCHREIBUNG: Setzt die Bewegungsmeldung, die beim Betreten eines Raumes erscheint. Bei Spielern und Monstern ist per Default "$Ein() naehert sich $dir()." gesetzt. Das "\n" wird automatisch angehaengt. VERWEISE: set_msg_out, set_mmsg_in, set_mmsg_out, query_msg_in ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: set_msg_out DEKLARATION: void set_msg_out(string msg_out) BESCHREIBUNG: Setzt die Bewegungsmeldung, die beim Verlassen eines Raumes erscheint. Bei Spielern und Monstern ist per Default "$Der() entfernt sich $dir()." gesetzt. Das "\n" wird automatisch angehaengt. VERWEISE: set_msg_in, set_mmsg_in, set_mmsg_out, query_msg_out ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: set_mmsg_in DEKLARATION: void set_mmsg_in(string mmsg_in) BESCHREIBUNG: Setzt die Bewegungsmeldung, die beim magischen Betreten eines Raumes erscheint. Bei Spielern und Monstern ist per Default "$Ein() erscheint in einer Rauchwolke." gesetzt. Das "\n" wird automatisch angehaengt. VERWEISE: set_msg_out, set_msg_out, set_mmsg_out, query_mmsg_in ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: set_mmsg_out DEKLARATION: void set_mmsg_out(string str) BESCHREIBUNG: Setzt die Bewegungsmeldung, die beim magischen Verlassen eines Raumes erscheint. Bei Spielern und Monstern ist per Default "$Der() verschwindet in einer Rauchwolke." gesetzt. Das "\n" wird automatisch angehaengt. VERWEISE: set_msg_in, set_msg_out, set_mmsg_out, query_mmsg_out ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: set_msg_invis DEKLARATION: void set_msg_invis(string msg_invis) BESCHREIBUNG: Setzt die Meldung, die beim Unsichtbarwerden erscheint. Ist keine gesetzt, so soll die mmsg_out - Meldung erscheinen. Das "\n" wird automatisch angehaengt. VERWEISE: set_msg_out, set_mmsg_out, set_msg_vis, query_msg_invis ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: set_msg_vis DEKLARATION: void set_msg_vis(string msg_vis) BESCHREIBUNG: Setzt die Meldung, die beim Sichtbarwerden erscheint. Ist keine gesetzt, so soll die mmsg_in - Meldung erscheinen. Das "\n" wird automatisch angehaengt. VERWEISE: set_msg_in, set_msg_invis, set_mmsg_in, query_msg_vis ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: query_msg_in DEKLARATION: string query_msg_in() BESCHREIBUNG: Liefert die Bewegungsmeldung, die mit set_msg_in() gesetzt wurde. VERWEISE: query_msg_out, query_mmsg_in, query_mmsg_out, set_msg_in ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: query_msg_out DEKLARATION: string query_msg_out() BESCHREIBUNG: Liefert die Bewegungsmeldung, die mit set_msg_out() gesetzt wurde. VERWEISE: query_msg_in, query_mmsg_in, query_mmsg_out, set_msg_out ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: query_mmsg_in DEKLARATION: string query_mmsg_in() BESCHREIBUNG: Liefert die Bewegungsmeldung, die mit set_mmsg_in() gesetzt wurde. VERWEISE: query_msg_in, query_msg_out, query_mmsg_out, set_mmsg_in ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: query_mmsg_out DEKLARATION: string query_mmsg_out() BESCHREIBUNG: Liefert die Bewegungsmeldung, die mit set_mmsg_out() gesetzt wurde. VERWEISE: query_msg_in, query_msg_out, query_mmsg_in, set_mmsg_out ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: query_msg_invis DEKLARATION: string query_msg_invis() BESCHREIBUNG: Liefert die Meldung, die beim Unsichtbarwerden kommt. VERWEISE: query_msg_vis, query_msg_in, query_msg_out, set_msg_invis ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: query_msg_vis DEKLARATION: string query_msg_vis() BESCHREIBUNG: Liefert die Meldung, die beim Sichtbarwerden erscheint. VERWEISE: query_msg_invis, query_msg_in, query_msg_out, set_msg_vis ... GRUPPEN: spieler, monster, move SOURCE: /i/tools/move_msg.c FUNKTION: query_plugin_commands DEKLARATION: nomask mixed *query_plugin_commands() BESCHREIBUNG: Liefert die Liste der Befehle, die das Plugin definiert. VERWEISE: add_plugin_command GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: add_plugin_command DEKLARATION: nomask protected varargs int add_plugin_command(string verb, int flag, int level, int no_pipe) BESCHREIBUNG: Hiermit kann man ein Plugin-Kommando definieren. Plugins werden vom Zauberstab verwendet, um weitere Kommandos zu definieren (siehe 'zplugin ?') verb ist das Kommandoverb. flag das Flag, das add_action uebergeben wird. level kann man angeben, wenn man das Kommando erst ab einem bestimmten Level zugaenglich machen moechte. Wenn no_pipe gesetzt wird, wird die Kommandozeile nicht auf Pipes untersucht. Um im Plugin dann die Funktion zu definieren muss man zwei Funktionen definieren: protected mixed plugin_parse_VERB(string str) und protected string plugin_exec_VERB(Parameterliste) protected string plugin_help_VERB() wobei VERB durch das 'verb' ersetzt werden muss. plugin_parse_VERB() muss die Kommandozeile parsen und die Parameter fuer plugin_exec_VERB() als Feld liefern, oder einen String, der dann als Fehlermeldung ausgegeben wird. plugin_exec_VERB() wird dann mit den einzelnen Parametern, die im Feld sind, aufgerufen und muss das Kommando ausfuehren, wobei Ausgaben an den Spieler oder andere Spieler per W(), Msg() und Msg_To() gemacht werden koennen. Falls plugin_exec_VERB() einen String liefert, wird dieser als Fehlermeldung ausgegeben, bei 0 als Rueckgabewert werden die Ausgaben an die Spieler gemacht. Die Ausgaben, die per W() gemacht werden, koennen dabei gepiped werden. Wenn VERB Zeichen enthaelt, die keine Buchstaben oder Zahlen sind, werden diese Zeichen fuer die Funktionen durch '_' ersetzt. Also z.B. VERB == "g:" -> Funktionen: plugin_parse_g_() plugin_help_VERB() sollte eine ausfuehrliche Hilfe liefern. BEISPIEL: inherit "/i/tools/plugin"; void create() { // Das ::create() ist notwendig plugin::create(); add_plugin_command("test"); } protected mixed plugin_parse_test(string str) { return ({ "Test:", str }); } protected string plugin_exec_test(string prefix, string str) { W(prefix + " " + str); return 0; } protected string plugin_help_test() { return read_file("/doc/hilfe/test"); } VERWEISE: query_plugin_commands, set_plugin_vars, query_plugin_vars, W, WLN, Msg, Msg_To, query_plugin_commander GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: Msg DEKLARATION: varargs protected void Msg(int type, int action, string msg, string msg_whom, whom) BESCHREIBUNG: Nach Beendigung des Befehls wird send_message() mit diesen Parametern aufgerufen VERWEISE: add_plugin_command, W, WLN, Msg_To, send_message GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: Msg_To DEKLARATION: protected void Msg_To( who, int type, int action, string msg) BESCHREIBUNG: Nach Beendigung des Befehls wird send_message_to() mit diesen Parametern aufgerufen VERWEISE: add_plugin_command, W, WLN, Msg, send_message_to GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: W DEKLARATION: protected void W(string str) BESCHREIBUNG: Gibt den String str spaeter ueber die Pipe aus. VERWEISE: add_plugin_command, WLN, Msg, Msg_To GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: WLN DEKLARATION: protected void WLN(string str) BESCHREIBUNG: Gibt den String str spaeter ueber die Pipe aus, wobei an str noch ein Newline ("\n") angehaengt wird. VERWEISE: add_plugin_command, W, Msg, Msg_To GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: query_plugin_commander DEKLARATION: nomask protected object query_plugin_commander() BESCHREIBUNG: Liefert den Spieler, der gerade das Plugin-Kommando ausfuehrt. VERWEISE: add_plugin_command GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: query_plugin_vars DEKLARATION: nomask protected mixed query_plugin_vars() BESCHREIBUNG: Liefert die Variablen des Spielers fuer dieses Plugin. VERWEISE: add_plugin_command, set_plugin_vars GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: set_plugin_vars DEKLARATION: nomask protected void set_plugin_vars(mixed vars) BESCHREIBUNG: Setzt die Variablen des Spielers fuer dieses Plugin. VERWEISE: add_plugin_command, query_plugin_vars GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: query_plugin_info DEKLARATION: string query_plugin_info() BESCHREIBUNG: Die Funktion sollte eine Beschreibung des Plugins liefern. Dies wird von 'zplugin -h ' abgefragt. VERWEISE: add_plugin_command GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: query_plugin_help DEKLARATION: string query_plugin_help(string verb) BESCHREIBUNG: Die Funktion liefert die Hilfe zum Kommando 'verb'. Dies wird von 'zplugin -H ' abgefragt. VERWEISE: add_plugin_command GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: plugin_initialize DEKLARATION: protected void plugin_initialize(object who) BESCHREIBUNG: Diese Funktion wird aufgerufen, wenn ein Gott ein Plugin initialisiert, z.B. durch ein zplugin -a oder durch Einloggen. VERWEISE: add_plugin_command, plugin_remove GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: plugin_remove DEKLARATION: protected void plugin_remove(object who) BESCHREIBUNG: Diese Funktion wird aufgerufen, wenn ein Gott ein Plugin beendet, z.B. durch ein zplugin -d oder durch Ausloggen. VERWEISE: add_plugin_command, plugin_initialize GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: print_plugin_options DEKLARATION: static void print_plugin_options(int quiet, closure callback) BESCHREIBUNG: Diese Funktion wird aufgerufen, wenn ein Gott im Einstellungsmenue dieses Plugin konfigurieren will, und sollte via more() ein solches anzeigen. Um eine korrekte Zuordnung zum jeweiligen Gott zu gewaehrleisten, sollte more() nicht direkt im plugin_commander aufgerufen werden, sondern ueber die Plugin-eigene more()-Funktion. Ueber plugin_more_action erhaelt man (aequivalent zu more_action) die Eingaben. Fuer einen Ruecksprung muss die uebergebene Closure callback aufgerufen. (Waehrend des more() sollte man sie in der more-ID zwischenspeichern.) Der Parameter quiet gibt an, dass das Menue nicht sofort ausgegeben werden soll (more-Flag M_NO_FIRST_SCREEN). Der Parameter wird vom Zauberstab nicht verwendet (und ist daher immer 0) und ist zur einfacheren Nutzung von print_options_help gedacht. VERWEISE: add_plugin_command, more GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: create_plugin_callback DEKLARATION: protected closure create_plugin_callback(closure fun|string fun) BESCHREIBUNG: Im Plugin koennen Funktionen nicht einfach via call_out oder auf anderem Wege verzoegert aufgerufen werden, da die Zuordnung zum jeweiligen Gott verloren gehen kann. Diese Funktion erlaubt es, diese Zuordnung beizubehalten. Verwendung: call_out(create_plugin_callback("fun"), 1); Wenn man die Funktion als String statt als Closure angibt, so ueberlebt es sogar ein Erneuern des Plugins. VERWEISE: GRUPPEN: plugin SOURCE: /i/tools/plugin.c FUNKTION: modify_set DEKLARATION: void modify_set(mixed neuer_wert, string property_name, mixed alter_wert, object aufrufer, object item) BESCHREIBUNG: modify_set wird im Objekt selbst und den zustaendigen Property-Mastern aufgerufen, wenn im Item 'item' die Property 'property_name' vom 'aufrufer' auf 'neuer_wert' gesetzt werden soll. 'neuer_wert' wird dabei als Referenz uebergeben und kann veraendert werden. Es wird zudem auch modify_set_ aufgerufen. VERWEISE: set, forbidden_set, notify_set GRUPPEN: properties SOURCE: /i/tools/properties.c FUNKTION: forbidden_set DEKLARATION: int forbidden_set(string property_name, mixed neuer_wert, mixed alter_wert, object aufrufer, object item) BESCHREIBUNG: forbidden_set wird im Objekt selbst und den zustaendigen Property-Mastern aufgerufen, wenn im Item 'item' die Property 'property_name' vom 'aufrufer' auf 'neuer_wert' gesetzt werden soll. Liefert einer dieser Controller einen Wert != 0 zurueck, so wird diese Aenderung verboten. Es wird zudem auch forbidden_set_ aufgerufen. Die forbidden_set-Controller werden nach den modify_set-Controllern aufgerufen. VERWEISE: set, modify_set, notify_set GRUPPEN: properties SOURCE: /i/tools/properties.c FUNKTION: notify_set DEKLARATION: void notify_set(string property_name, mixed neuer_wert, mixed alter_wert, object aufrufer, object item) BESCHREIBUNG: notify_set wird im Objekt selbst und den zustaendigen Property-Mastern aufgerufen, nachdem im Item 'item' die Property 'property_name' vom 'aufrufer' auf 'neuer_wert' gesetzt wurde. Es wird zudem auch notify_set_ aufgerufen. VERWEISE: set, modify_set, forbidden_set GRUPPEN: properties SOURCE: /i/tools/properties.c FUNKTION: modify_query DEKLARATION: void modify_query(mixed wert, string property_name, mixed info, object aufrufer, object item) BESCHREIBUNG: modify_query wird im Objekt selbst und den zustaendigen Property-Mastern aufgerufen, wenn im Item 'item' die Property 'property_name' vom 'aufrufer' abgefragt wird. 'wert' enthaelt den potentiellen Rueckgabewert, wird dabei als Referenz uebergeben und kann veraendert werden. 'info' ist der optionale zweite Parameter vom query()-Aufruf. Es wird zudem auch modify_query_ aufgerufen. VERWEISE: query GRUPPEN: properties SOURCE: /i/tools/properties.c FUNKTION: modify_add DEKLARATION: void modify_add(mixed add_wert, string property_name, mixed key, mixed alter_wert, object aufrufer, object item) BESCHREIBUNG: modify_add wird im Objekt selbst und den zustaendigen Property-Mastern bei einem Aufruf von add() im Item 'item' auf die Property 'property_name' von 'aufrufer' aufgerufen. 'key' und 'add_wert' sind dabei die Parameter vom add()-Aufruf. 'key' ist dabei unter Umstaenden nicht gesetzt (0). 'add_wert' wird per Referenz uebergeben und kann veraendert werden. 'alter_wert' enthaelt den vollstaendigen Wert der Property (also nicht nur den Wert, der 'key' zugeordnet ist). Es wird zudem auch modify_add_ aufgerufen. VERWEISE: add, forbidden_add, notify_add GRUPPEN: properties SOURCE: /i/tools/properties.c FUNKTION: forbidden_add DEKLARATION: int forbidden_add(string property_name, mixed key, mixed add_wert, mixed alter_wert, object aufrufer, object item) BESCHREIBUNG: forbidden_add wird im Objekt selbst und den zustaendigen Property-Mastern bei einem Aufruf von add() im Item 'item' auf die Property 'property_name' von 'aufrufer' aufgerufen. 'key' und 'add_wert' sind dabei die Parameter vom add()-Aufruf. 'key' ist dabei unter Umstaenden nicht gesetzt (0). 'alter_wert' enthaelt den vollstaendigen Wert der Property (also nicht nur den Wert, der 'key' zugeordnet ist). Liefert einer dieser Controller einen Wert != 0 zurueck, so wird diese Operation verboten. Es wird zudem auch forbidden_add_ aufgerufen. Die forbidden_add-Controller werden nach den modify_add-Controllern aufgerufen. VERWEISE: add, modify_add, notify_add GRUPPEN: properties SOURCE: /i/tools/properties.c FUNKTION: notify_add DEKLARATION: void notify_add(string property_name, mixed key, mixed add_wert, mixed alter_wert, object aufrufer, object item) BESCHREIBUNG: notify_add wird im Objekt selbst und den zustaendigen Property-Mastern bei einem Aufruf von add() im Item 'item' auf die Property 'property_name' von 'aufrufer' aufgerufen. 'key' und 'add_wert' sind dabei die Parameter vom add()-Aufruf. 'key' ist dabei unter Umstaenden nicht gesetzt (0). 'alter_wert' enthaelt den vollstaendigen Wert der Property (also nicht nur den Wert, der 'key' zugeordnet ist). Es wird zudem auch notify_add_ aufgerufen. VERWEISE: add, modify_add, forbidden_add GRUPPEN: properties SOURCE: /i/tools/properties.c FUNKTION: forbidden_delete DEKLARATION: int forbidden_delete(string property_name, mixed key, mixed alter_wert, object aufrufer, object item) BESCHREIBUNG: forbidden_delete wird im Objekt selbst und den zustaendigen Property-Mastern bei einem Aufruf von delete() im Item 'item' auf die Property 'property_name' von 'aufrufer' aufgerufen. 'key' ist dabei der Parameter vom delete()-Aufruf. 'alter_wert' enthaelt den vollstaendigen Wert der Property (also nicht nur den Wert, der 'key' zugeordnet ist). Liefert einer dieser Controller einen Wert != 0 zurueck, so wird diese Operation verboten. Es wird zudem auch forbidden_delete_ aufgerufen. VERWEISE: delete, notify_delete GRUPPEN: properties SOURCE: /i/tools/properties.c FUNKTION: notify_delete DEKLARATION: void notify_delete(string property_name, mixed key, mixed alter_wert, object aufrufer, object item) BESCHREIBUNG: notify_delete wird im Objekt selbst und den zustaendigen Property-Mastern bei einem Aufruf von delete() im Item 'item' auf die Property 'property_name' von 'aufrufer' aufgerufen. 'key' ist dabei dre Parameter vom delete()-Aufruf. 'alter_wert' enthaelt den vollstaendigen Wert der Property (also nicht nur den Wert, der 'key' zugeordnet ist). Es wird zudem auch notify_delete_ aufgerufen. VERWEISE: delete, forbidden_delete GRUPPEN: properties SOURCE: /i/tools/properties.c FUNKTION: add_property_master DEKLARATION: protected void add_property_master(string prefix, string file|string* files) BESCHREIBUNG: Fuegt weitere Property-Master hinzu. Die in diesen Mastern definierten Eigenschaften erhalten 'prefix' und einen Doppelpunkt im Namen vorangestellt. (Der Doppelpunkt wird weggelassen, wenn 'prefix' leer ist.) VERWEISE: delete_property_master, is_property_master, query_property_master, query_property_prefixes, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: delete_property_master DEKLARATION: protected void delete_property_master(string prefix, string file|string* files) BESCHREIBUNG: Entfernt einen oder mehrere Property-Master. Die Parameter entsprechen denen von add_property_master(). VERWEISE: add_property_master, is_property_master, query_property_master, query_property_prefixes, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: is_property_master DEKLARATION: int is_property_master(string prefix, string file) BESCHREIBUNG: Liefert einen Wert != 0, wenn 'file' als Master fuer 'prefix' (siehe add_property_master()) eingetragen ist. VERWEISE: add_property_master, delete_property_master, query_property_master, query_property_prefixes, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: query_property_master DEKLARATION: string* query_property_master(string prefix) BESCHREIBUNG: Liefert alle fuer 'prefix' eingetragenen Property-Master zurueck. VERWEISE: add_property_master, delete_property_master, is_property_master, query_property_prefixes, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: query_property_prefixes DEKLARATION: string* query_property_prefixes() BESCHREIBUNG: Liefert alle bekannten Prefixe zurueck. VERWEISE: add_property_master, delete_property_master, is_property_master, query_property_master, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: set_property_info DEKLARATION: void set_property_info(string name, mapping info) BESCHREIBUNG: Hiermit wird eine Eigenschaft definiert. Der Attributname muss bereits den Prefix des Property-Masters enthalten (z.B. bei Domains das "Domainname:"). Die Definition 'info' kann folgende Eintraege enthalten (es sind alle freiwillig, Defines in property_master.h): PI_VALUE: Der Standardwert PI_FLAGS: Flags: PF_SET_LOCAL Darf nur vom Objekt selbst gesetzt werden (wie eine static set-Funktion). Impliziert PF_GET_NOMASK. PF_LOCAL Nur lokal les- und schreibbar. Impliziert PF_GET_NOMASK und PF_SET_NOMASK. PF_GET_NOMASK Beim Abfragen werden keine modify- Controller aufgerufen. PF_SET_NOMASK Beim Setzen (set, add) werden keine modify-Controller aufgerufen. PF_SINGLE_SHOT Darf nur einmal gesetzt werden (auch kein add, delete). PF_NO_CLOSURE Closures werden nicht automatisch ausgewertet. PF_PERSISTANT Diese Eigenschaft wird vom save_properties() gesichert. PI_LPCTYPE: Hiermit kann man angeben, welche Typen erlaubt sind. Erwartet wird ein lpctype-Wert. Wenn PF_NO_CLOSURE nicht angegeben wurde, sind unabhaengig von dieser Information Closures immer moeglich. PI_TYPES: Hiermit kann man angeben, welche Typen erlaubt sind (Kombination von PT_MIXED, PT_INT, PT_STRING, PT_ARRAY, PT_OBJECT, PT_MAPPING, PT_FLOAT, PT_CLOSURE, PT_SYMBOL, PT_QUOTED_ARRAY und PT_STRUCT moeglich). Wenn PF_NO_CLOSURE nicht angegeben wurde, sind unabhaengig von dieser Information Closures immer moeglich. Dieser Eintrag ist veraltet und wird automatisch in ein PI_LPCTYPE-Eintrag konvertiert. PI_USES: An welchen Dingen diese Property Verwendung finden darf. Dies ist eine Kombination aus folgenden Defines: PU_ROOM Raeume PU_ITEM Gegenstaende (nicht lebendig) PU_MONSTER NPCs PU_PLAYER Spieler PU_LIVING Lebewesen (= PU_MONSTER|PU_PLAYER) PU_MOVABLE Bewegliches (= PU_ITEM|PU_LIVING) PU_OBJEKT Objekte (= PU_MOVABLE | PU_ROOM) PU_VITEM V-Items Default is PU_MOVABLE. PI_SHORTNAME: Der alte Name (ohne Master-Prefix) dieser Eigenschaft. Dieser wird z.B. vom QUERY()-Makro genutzt, um Kompatibilitaet zu gewaehrleisten. PI_WIZ_SHORT: Eine Kurzbeschreibung dieser Eigenschaft fuer Goettertools. PI_WIZ_LONG: Eine ausfuehrliche Beschreibung zur Anzeige fuer Goetter. PI_SET_FUN: Damit kann man den Namen (keine Closure!) einer Funktion in diesem Master angeben, welcher zum Setzen der Eigenschaft aufgerufen wird: mixed set_fun(mapping property, mixed value, object caller, object item) In die Property (enthaelt diese Definition und einen evntl. aelteren Wert als PI_VALUE-Eintrag) soll der Wert 'value' eingetragen werden. 'caller' ist das aufrufende Objekt, 'item' der Gegenstand mit dieser Eigenschaft. Diese Funktion soll den Wert in PI_VALUE speichern und den gespeicherten Wert (nicht das gesamte Mapping) zurueckliefern. Es ist erlaubt, weitere Details in zusaetzlichen Eintraegen im Mapping abzuspeichern. PI_GET_FUN: Der Name (keine Closure!) einer Funktion in diesem Master zur Abfrage der Eigenschaft: mixed get_fun(mapping property, mixed info, object caller, object item) 'property' enthaelt die Definition und den derzeitigen Wert in PI_VALUE. 'info' ist der query() uebergebene Parameter. PI_ADD_FUN: Der Name (keine Closure!) einer Funktion in diesem Master zur Implementation von add(): mixed add_fun(mapping property, mixed key, mixed value, object caller, object item) 'property' enthaelt die Definition und den derzeitigen Wert in PI_VALUE. 'key' und 'value' sind die Parameter von add(). PI_DEL_FUN: Der Name (keine Closure!) einer Funktion in diesem Master zur Implementation von delete(): mixed del_fun(mapping property, mixed key, object caller, object item) 'property' enthaelt die Definition und den derzeitigen Wert in PI_VALUE. 'key' ist der delete() uebergebene Parameter. PI_SAVE_FUN: Der Name (keine Closure!) einer Funktion in diesem Master, um die Eigenschaft abzuspeichern: mapping save_fun(mapping property, object item); Die Funktion sollte das abzuspeichernde Mapping (dies sollte ein neues Mapping sein, nicht 'property') zurueckliefern. PI_RESTORE_FUN: Der Name (keine Closure!) einer Funktion in diesem Master, um die Eigenschaft wiederherzustellen: void restore_fun(mapping property, mapping saved_property, object item); Die Funktion erhaelt die Definition als 'property' und den gespeicherten Wert als 'saved_property' und soll den Wert als PI_VALUE-Eintrag in das 'property'-Mapping speichern. PI_VITEM_SET_FUN: Pendant zu PI_SET_FUN fuer V-Items: mixed vitem_set_fun(mapping property, mixed value, object caller, object item, mapping vitem); PI_VITEM_GET_FUN: Pendant zu PI_GET_FUN fuer V-Items: mixed vitem_get_fun(mapping property, mixed info, object caller, object item, mapping vitem): PI_VITEM_ADD_FUN: Pendant zu PI_ADD_FUN fuer V-Items: mixed vitem_add_fun(mapping property, mixed key, mixed value, object caller, object item, mapping vitem); PI_VITEM_DEL_FUN: Pendant zu PI_DEL_FUN fuer V-Items: mixed vitem_del_fun(mapping property, mixed key, object caller, object item, mapping vitem) VERWEISE: query_property_info, query_property_names, query_property_infos GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: set_pseudoclosure DEKLARATION: mixed set_pseudoclosure(mapping property, mixed value, object caller, object item) BESCHREIBUNG: Diese Funktion kann als PI_SET_FUN angegeben werden, um einer Eigenschaft die Moeglichkeit zu geben, Pseudoclosures anzunehmen. VERWEISE: get_pseudoclosure, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: get_pseudoclosure DEKLARATION: mixed get_pseudoclosure(mapping property, mixed info, object caller, object item) BESCHREIBUNG: Diese Funktion kann als PI_GET_FUN angegeben werden, um einer Eigenschaft die Moeglichkeit zu geben, Pseudoclosures auszuwerten. VERWEISE: set_pseudoclosure, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: set_description DEKLARATION: mixed set_description(mapping property, mixed value, object caller, object item) BESCHREIBUNG: Diese Funktion kann als PI_SET_FUN angegeben werden, um einer Eigenschaft die Moeglichkeit zu geben, Descriptions (wie bei set_long) anzugeben. VERWEISE: get_description, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: get_description DEKLARATION: mixed get_description(mapping property, mixed value, object caller, object item) BESCHREIBUNG: Diese Funktion kann als PI_GET_FUN angegeben werden, um einer Eigenschaft die Moeglichkeit zu geben, Descriptions (wie bei set_long) auszuwerten. VERWEISE: set_description, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: set_vitem_pseudoclosure DEKLARATION: mixed set_vitem_pseudoclosure(mapping property, mixed value, object caller, object item, mapping vitem) BESCHREIBUNG: Diese Funktion kann als PI_VITEM_SET_FUN angegeben werden, um einer Eigenschaft die Moeglichkeit zu geben, Pseudoclosures anzunehmen. VERWEISE: get_vitem_pseudoclosure, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: get_vitem_pseudoclosure DEKLARATION: mixed get_vitem_pseudoclosure(mapping property, mixed info, object caller, object item, mapping vitem) BESCHREIBUNG: Diese Funktion kann als PI_VITEM_GET_FUN angegeben werden, um einer Eigenschaft die Moeglichkeit zu geben, Pseudoclosures auszuwerten. VERWEISE: set_vitem_pseudoclosure, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: set_vitem_description DEKLARATION: mixed set_vitem_description(mapping property, mixed value, object caller, object item, mapping vitem) BESCHREIBUNG: Diese Funktion kann als PI_VITEM_SET_FUN angegeben werden, um einer Eigenschaft die Moeglichkeit zu geben, Descriptions (wie bei set_long) anzugeben. VERWEISE: get_vitem_description, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: get_vitem_description DEKLARATION: mixed get_vitem_description(mapping property, mixed value, object caller, object item, mapping vitem) BESCHREIBUNG: Diese Funktion kann als PI_VITEM_GET_FUN angegeben werden, um einer Eigenschaft die Moeglichkeit zu geben, Descriptions (wie bei set_long) auszuwerten. VERWEISE: set_vitem_description, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: invalid_set DEKLARATION: mixed invalid_set(mapping property, mixed value, object caller, object item) BESCHREIBUNG: Diese Funktion kann als PI_SET_FUN angegeben werden und wirft beim Aufruf einen Fehler. VERWEISE: invalid_get, invalid_add, invalid_del, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: invalid_get DEKLARATION: mixed invalid_get(mapping property, mixed info, object caller, object item) BESCHREIBUNG: Diese Funktion kann als PI_GET_FUN angegeben werden und wirft beim Aufruf einen Fehler. (Die Funktion existiert nur der Vollstaendigkeit halber, der Autor erkennt keinen Sinn in dieser Funktion.) VERWEISE: invalid_set, invalid_add, invalid_del, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: invalid_add DEKLARATION: mixed invalid_add(mapping property, mixed key, mixed value, object caller, object item) BESCHREIBUNG: Diese Funktion kann als PI_ADD_FUN angegeben werden und wirft beim Aufruf einen Fehler. VERWEISE: invalid_set, invalid_get, invalid_del, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: invalid_del DEKLARATION: mixed invalid_del(mapping property, mixed key, object caller, object item) BESCHREIBUNG: Diese Funktion kann als PI_DEL_FUN angegeben werden und wirft beim Aufruf einen Fehler. VERWEISE: invalid_set, invalid_get, invalid_add, set_property_info GRUPPEN: properties SOURCE: /i/tools/property_master.c FUNKTION: set_rollen_debugger DEKLARATION: void set_rollen_debugger(object|string ob) BESCHREIBUNG: Mit set_rollen_debugger kann man das Objekt setzen, das mit debug_rolle dann angesprochen wird. Nützlich bei der Entwicklung einer Rolle. Es werden allerlei Fehlerinformationen an ob geschickt. Auf Wunsch kann man auch einfach einen Filenamen uebergeben. Dadurch werden die Informationen in eine Datei abgespeichert. VERWEISE: query_rollen_debugger, debug_rolle GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: query_rollen_debugger DEKLARATION: object|string query_rollen_debugger() BESCHREIBUNG: Liefert, wenn vorhanden, das Objekt zurück, das mit set_rollen_debugger gesetzt wurde. VERWEISE: set_rollen_debugger, debug_rolle GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: debug_rolle DEKLARATION: void debug_rolle(string str) BESCHREIBUNG: Schickt per send_message_to() einen String an das Objekt, das mit set_rollen_debugger gesetzt wurde, oder tut gar nichts, wenn query_rollen_debugger() 0 zurückliefert. Der String setzt sich aus dem Namen des Rollenmonsters und str zusammen. VERWEISE: set_rollen_debugger, query_rollen_debugger, send_message_to GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: set_macht_bei_rollen_mit DEKLARATION: void set_macht_bei_rollen_mit(int flag) BESCHREIBUNG: Sagt einem Objekt, ob es bei Rollen mitmachen soll. Bei Flag 0 macht es nicht mit, bei allem anderen macht es bei Rollen mit. Defaultmaessig wird NICHT mitgemacht. VERWEISE: query_macht_bei_rollen_mit GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: query_macht_bei_rollen_mit DEKLARATION: int query_macht_bei_rollen_mit() BESCHREIBUNG: Liefert zurück, ob ein Objekt bei Rollen mitspielen will. VERWEISE: set_macht_bei_rollen_mit GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: query_rolle DEKLARATION: struct rolle query_rolle() BESCHREIBUNG: Liefert Informationen über die Rolle eines rollengesteuerten Objekts. Vielleicht will ja mal jemand ein Tool schreiben, mit dem die Ausgabe verständlicher wird :-) ACHTUNG: Diese Funktion ist nur für Debugzwecke gedacht, da sich diese Datenstruktur ändern kann. Eine Beschreibung der Datenstruktur befindet sich am Anfang dieser Datei. VERWEISE: in_rolle, query_rollen_status GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: query_rollen_status DEKLARATION: struct rollen_status query_rollen_status() BESCHREIBUNG: Liefert Informationen über die aktuelle Ausführung der Rolle. ACHTUNG: Diese Funktion ist nur für Debugzwecke gedacht, da sich diese Datenstruktur ändern kann. Eine Beschreibung der Datenstruktur befindet sich am Anfang dieser Datei. VERWEISE: in_rolle, query_rolle GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: in_rolle DEKLARATION: string in_rolle() BESCHREIBUNG: Liefert den Namen der Rolle, der das Objekt folgt zurück, egal ob das Objekt passiv oder aktiv teilnimmt zurueck, oder 0, wenn das Objekt an keiner Rolle teilnimmt. VERWEISE: query_rolle GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: stop_rolle DEKLARATION: int stop_rolle(int partner) BESCHREIBUNG: Mit stop_rolle kann man eine Rolle anhalten, in der sich ein Objekt befindet, auch wenn das Objekt nur passiver Teilnehmer ist. Wenn das Objekt an keiner Rolle teilnimmt, die Rolle schon gestoppt ist oder das Stoppen via Controller verboten wurde, wird 0 zurückgeliefert, bei Erfolg 1. (Partner ist 1, wenn der Aufruf vom stop_rolle des Souffleurs kommt.) VERWEISE: in_rolle, query_rolle, restart_rolle, starte_rolle, breche_rolle_ab, notify_rollenrestart, notify_rollenstop GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: forbidden_rollenstop DEKLARATION: int forbidden_rollenstop(object wer, mixed souffleur, string rolle) BESCHREIBUNG: Bevor in einem Objekt wer die Rolle rolle unterbrochen wird, wird wer->forbidden("rollenstop", wer, souffleur, rolle) aufgerufen, wobei souffleur 0 ist, wenn wer der Souffleur ist, ansonsten das Objekt, welches die Rolle steuert, ist. (Falls dieses Objekt nicht mehr existiert, wird 1 geliefert.) Diese Funktion wird in allen Teilnehmern der Rolle aufgerufen. Liefert einer dieser forbidden-Aufrufe einen Wert != 0, so kann die Rolle nicht unterbrochen werden. Die Funktion forbidden ruft dann in allen mit wer->add_controller( "forbidden_rollenstop", other) angemeldeten Objekten other die Funktion other->forbidden_rollenstop(wer, souffleur, rolle) auf. Liefert einer dieser Aufrufe einen Wert != 0, so liefert forbidden diesen zurück. VERWEISE: breche_rolle_ab, restart_rolle, notify_rollenstop GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: notify_rollenstop DEKLARATION: void notify_rollenstop(object wer, mixed souffleur, string rolle) BESCHREIBUNG: Wenn in einem Objekt wer die Rolle rolle unterbrochen wurde, dann wird wer->notify("rollenstop", wer, souffleur, rolle) aufgerufen, wobei souffleur 0 ist, wenn wer der Souffleur ist, ansonsten das Objekt, welches die Rolle steuert, ist. (Falls dieses Objekt nicht mehr existiert, wird 1 geliefert.) Diese Funktion wird in allen Teilnehmern der Rolle aufgerufen. Die Funktion notify ruft dann in allen mit wer->add_controller( "notify_rollenstop", other) angemeldeten Objekten other die Funktion other->notify_rollenstop(wer, souffleur, rolle) auf. VERWEISE: breche_rolle_ab, forbidden_rollenstop, restart_rolle, notify_rollenrestart GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: restart_rolle DEKLARATION: int restart_rolle(int partner) BESCHREIBUNG: Mit restart_rolle kann man eine Rolle fortsetzen, die mit stop_rolle angehalten wurde. Das klappt auch dann, wenn das Objekt nur passiver Teilnehmer ist. Wenn das Objekt an keiner Rolle teilnimmt, die Rolle schon weiterläuft oder diese Aktion mittels Controller verboten wurde, wird 0 zurückgeliefert, bei Erfolg 1. (Partner ist 1, wenn der Aufruf vom restart_rolle des Souffleurs kommt.) VERWEISE: in_rolle, query_rolle, starte_rolle, breche_rolle_ab, notify_rollenrestart, notify_rollenstop GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: forbidden_rollenrestart DEKLARATION: int forbidden_rollenrestart(object wer, mixed souffleur, string rolle) BESCHREIBUNG: Bevor in einem Objekt wer die Rolle rolle nach einer Unterbrechung fortgesetzt wird, wird wer->forbidden("rollenrestart", wer, souffleur, rolle) aufgerufen, wobei souffleur 0 ist, wenn wer der Souffleur ist, ansonsten das Objekt, welches die Rolle steuert, ist. Diese Funktion wird in allen Teilnehmern der Rolle aufgerufen. Liefert einer dieser Funktionen einen Wert != 0, so kann die Rolle nicht fortgesetzt werden. Die Funktion forbidden ruft dann in allen mit wer->add_controller( "forbidden_rollenrestart", other) angemeldeten Objekten other die Funktion other->forbidden_rollenrestart(wer, souffleur, rolle) auf. Liefert einer dieser Aufrufe einen Wert != 0, so liefert forbidden diesen zurück. VERWEISE: restart_rolle, breche_rolle_ab, notify_rollenrestart GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: notify_rollenrestart DEKLARATION: void notify_rollenrestart(object wer, mixed souffleur, string rolle) BESCHREIBUNG: Wenn in einem Objekt wer die Rolle rolle nach einer Unterbrechung fortgesetzt wird, dann wird wer->notify("rollenrestart", wer, souffleur, rolle) aufgerufen, wobei souffleur 0 ist, wenn wer der Souffleur ist, ansonsten das Objekt, welches die Rolle steuert, ist. Diese Funktion wird in allen Teilnehmern der Rolle aufgerufen. Die Funktion notify ruft dann in allen mit wer->add_controller( "notify_rollenrestart", other) angemeldeten Objekten other die Funktion other->notify_rollenrestart(wer, souffleur, rolle) auf. VERWEISE: restart_rolle, forbidden_rollenrestart, breche_rolle_ab, notify_rollenstop GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: notify_rollenende DEKLARATION: void notify_rollenende(object wer, mixed souffleur, string rolle) BESCHREIBUNG: Wenn in einem Objekt wer die Rolle rolle abgebrochen oder beendet wurde, dann wird wer->notify("rollenende", wer, souffleur, rolle) aufgerufen, wobei souffleur 0 ist, wenn wer der Souffleur ist, ansonsten das Objekt, welches die Rolle steuert, ist. (Falls dieses Objekt nicht mehr existiert, wird 1 geliefert.) Diese Funktion wird in allen Teilnehmern der Rolle aufgerufen. Die Funktion notify ruft dann in allen mit wer->add_controller( "notify_rollenende", other) angemeldeten Objekten other die Funktion other->notify_rollenende(wer, souffleur, rolle) auf. Falls man eine neue Rolle starten will, so sollte dies mit einem call_out geschehen. VERWEISE: breche_rolle_ab, notify_rollenstart GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: rolle_beendet DEKLARATION: void rolle_beendet(string name) BESCHREIBUNG: Nachdem eine Rolle beendet wurde, wird in allen Partnern die Funktion rolle_beendet(rollenname) aufgerufen. VERWEISE: breche_rolle_ab, notify_rollenende GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: debug_rolle2 DEKLARATION: varargs void debug_rolle2(string str,string file, int line, mixed extended) BESCHREIBUNG: Ruft debug_rolle mit dem Text str auf. Wenn file!=0 ist, dann wird der Fehler ausserdem in die FDB geschrieben. (Falls der Rollen-Debugger nicht zufällig zuständig für das Objekt ist.) Falls extended angegegen ist, wird es der Fehlermeldung angehängt. VERWEISE: debug_rolle, set_rollen_debugger, query_rollen_debugger, tell_object GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: set_standard_msg_params DEKLARATION: void set_standard_msg_params(int msg_type, int msg_action) BESCHREIBUNG: Setzt die Standardmeldungstypen der Rollen-Meldungen bei Nicht-Lebewesen fuer send_message. VERWEISE: query_standard_msg_params, starte_rolle GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: query_standard_msg_params DEKLARATION: int *query_standard_msg_params() BESCHREIBUNG: Liefert die Standardmeldungstypen in einem Array ({msg_type, msg_action}). VERWEISE: set_standard_msg_params, starte_rolle GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: prepare_exec DEKLARATION: mixed *prepare_exec(mixed *pars,mixed command) BESCHREIBUNG: Aus dem uebergebenen Array pars mit Strings und Closures wird eine Parameterliste fuer exec_command gemacht, d.h. fuer jede Closure wird myfuncall aufgerufen und das Ergebnis wird im neuen Array gespeichert. Strings werden direkt uebernommen. Mehrere Strings hintereinander werden zu einem Zusammengefasst. Folgt auf einen String ein Array oder Objekt im Array, so wird dem String ein Leerzeichen am Ende weggenommen. Genauso wird einem dem Array/Objekt folgendem String ein Leerzeichen am Anfang entfernt. Der zweite Parameter command wird fuer Debugzwecke genutzt und direkt an myfuncall weitergegeben. VERWEISE: exec_command GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: beginne_rolle DEKLARATION: varargs int beginne_rolle(struct rolle r, struct rollen_status rs, string label) BESCHREIBUNG: Diese Funktion wird im Souffleur mit der Rolle im 1. Argument und dem Startlabel im 3. Parameter aufgerufen, wenn alle Voraussetzungen fuer den Start der Rolle erfuellt wurden. Sie ruft dann beginne_rolle(0,0,label) in allen weiteren Teilnehmern auf, schaltet den Heart-Beat an und startet die Rolle sofort. Diese Funktion wird Rollen-intern verwendet. Sie darf auf keinen Fall "geshadowt" werden. Auch ist diese Funktion nicht dazu gedacht, von jemand anderem als starte_rolle() aufgerufen zu werden. Um den Start einer Rolle mitzubekommen, gibt es notify_rollenstart. VERWEISE: starte_rolle, notify_rollenstart GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: forbidden_rollenstart DEKLARATION: int forbidden_rollenstart(object wer, object souffleur, string rolle, string label) BESCHREIBUNG: Bevor in einem Objekt wer die Rolle rolle ab dem Label label gestartet wird, wird wer->forbidden("rollenstart", wer, souffleur, rolle, label) aufgerufen, wobei souffleur 0 ist, wenn wer der Souffleur ist, ansonsten das Objekt, welches die Rolle steuert, ist. Diese Funktion wird in allen Teilnehmern der Rolle aufgerufen. Liefert einer dieser Funktionen einen Wert != 0, so kann die Rolle nicht gestartet werden. Die Funktion forbidden ruft dann in allen mit wer->add_controller( "forbidden_rollenstart", other) angemeldeten Objekten other die Funktion other->forbidden_rollenstart(wer, souffleur, rolle, label) auf. Liefert einer der Aufrufe einen Wert != 0, so liefert forbidden diesen. VERWEISE: starte_rolle, notify_rollenstart GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: notify_rollenstart DEKLARATION: void notify_rollenstart(object wer, object souffleur, string rolle, string label) BESCHREIBUNG: Wenn in einem Objekt wer die Rolle rolle ab dem Label label gestartet wird, dann wird wer->notify("rollenstart", wer, souffleur, rolle, label) aufgerufen, wobei souffleur 0 ist, wenn wer der Souffleur ist, ansonsten das Objekt, welches die Rolle steuert, ist. Diese Funktion wird in allen Teilnehmern der Rolle aufgerufen. Die Funktion notify ruft dann in allen mit wer->add_controller( "notify_rollenstart", other) angemeldeten Objekten other die Funktion other->notify_rollenstart(wer, souffleur, rolle, label) auf. VERWEISE: starte_rolle, forbidden_rollenstart, notify_rollenende GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: spiele_rolle_mit DEKLARATION: int spiele_rolle_mit(struct rolle rolle, int *offene_positionen) BESCHREIBUNG: Diese Funktion wird aufgerufen, um anzufragen, ob dieses Objekt an der im 1. Parameter übergebenen Rolle teilnehmen möchte, der 2. Parameter enthält dazu die Indizes der noch offenen Positionen. Es ist nun Aufgabe dieses Objektes eine offene Teilnehmernummer zu suchen, dessen Kriterien auf dieses Objekt passen. Außerdem wird geprüft, ob dieses Objekt bereits an einer Rolle teilnimmt oder gerade eine Kampagne spielt. Die Funktion sollte -1 liefern, wenn das Objekt nicht teilnehmen kann, ansonsten die gewünschte Position. VERWEISE: starte_rolle, rolle_machbar GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: starte_rolle DEKLARATION: varargs int starte_rolle(string rollenname, string label, varargs mixed *params) BESCHREIBUNG: Mit starte_rolle kann man ein Objekt dazu veranlassen, eine Rolle abzuspielen. Dazu muss nur der Filename der Rolle in rollenname angegeben werden. Der Dateiname kann auch relativ zum Objektnamen angegeben werden. Moechte man erreichen, dass die Rolle ab einem bestimmten Label gestartet wird, so kann man dieses in 'label' uebergeben. Man kann nach dem 2. Parameter noch weitere Parameter fuer die Rollen der Version 2 uebergeben, welche mit der Option 'Version: 2' in den Rollendateien aktiviert wird. Auf die Parameter kann innerhalb der Rollen mit #1, #2 usw. zugegriffen werden. Die Funktion liefert 1, bei erfolgreichen Start der Rolle, ansonsten 0. VERWEISE: in_rolle, query_rolle, restart_rolle, breche_rolle_ab, notify_rollenstart, notify_rollenstop GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: breche_rolle_ab DEKLARATION: int breche_rolle_ab() BESCHREIBUNG: Mit breche_rolle_ab kann man eine Rolle komplett abbrechen. Wenn dabei kein Fehler auftritt, wird 1 zurückgeliefert, sonst 0. Es wird abschliessend rolle_beendet aufgerufen. VERWEISE: starte_rolle, stoppe_rolle, restart_rolle, rolle_beendet, notify_rollenstart, notify_rollenstop GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: set_this_player_in_rolle DEKLARATION: void set_this_player_in_rolle( object tp) BESCHREIBUNG: Mit dieser Funktion kann das Objekt, das als 'this_player' in der Rolle gilt, veraendert werden. Zu Beginn einer Rolle wird es automatisch auf this_player() gesetzt, so dass man diese Funktion nur in Spezialfaellen benoetigen duerfte. In Rollen kann man mittels $0 auf diesen 'this_player' zugreifen. Anwendungen in der Rolle: 1: knuddle $$0 1: ich streckt &dem($$0) die Zunge raus. 1: ich gratuliert &dem($$0). &Der($$0) $(findet,findest) das prima. 1: ich sagt zu &dem($$2): $Den($0) mag ich gern. 1: sage Hallo, $$0->query_cap_name()! VERWEISE: query_this_player_in_rolle GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: query_this_player_in_rolle DEKLARATION: object query_this_player_in_rolle() BESCHREIBUNG: Mit dieser Funktion kann das Objekt, das als 'this_player' in der Rolle gilt, abgefragt werden. Genauere Beschreibung: siehe set_this_player_in_rolle. VERWEISE: set_this_player_in_rolle GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: query_rollen_partner DEKLARATION: object query_rollen_partner(int nr) BESCHREIBUNG: Liefert den Partner mit der jeweiligen Nummer. (0 entspricht dem this_player_in_rolle). Falls kein Rollenpartner mit der Nummer existiert, oder keine Rolle aktiv ist, wird 0 geliefert. VERWEISE: in_rolle, query_this_player_in_rolle GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: set_rollen_dirs DEKLARATION: static void set_rollen_dirs(mixed dirs) BESCHREIBUNG: Damit setzt man die Verzeichnisse, aus denen die Rollendateien kommen duerfen. Man kann entweder ein einzelnes Verzeichnis oder ein Array aus Verzeichnissen angeben. Mit 0 deaktiviert man Rollen. Diese Bedingung gilt nur fuer starte_rolle, nicht fuer die bei Wechsel_Rolle angegebenen Rollen. Standardmaessig ist "/" gesetzt. VERWEISE: query_rollen_dirs, starte_rolle GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: query_rollen_dirs DEKLARATION: string *query_rollen_dirs() BESCHREIBUNG: Liefert die mit set_rollen_dirs gesetzten Verzeichnisse zurueck. VERWEISE: set_rollen_dir, starte_rolle GRUPPEN: Rollen SOURCE: /i/tools/rollen.c FUNKTION: query_innenraum DEKLARATION: varargs int query_innenraum(object raum) BESCHREIBUNG: Gibt an ob es sich bei einem Raum um einen Innenraum handelt (unter Beruecksichtigung vom gesetzten Landschaftstyp und, falls dieser nicht gesetzt ist, Kunstlicht). Default fuer raum ist this_object(). VERWEISE: query_im_wasser GRUPPEN: raum SOURCE: /i/tools/room_types.c FUNKTION: query_im_wasser DEKLARATION: varargs int query_im_wasser(object raum) BESCHREIBUNG: Gibt an, ob jemand, der sich in dem Raum aufhaelt, im Wasser steht oder schwimmt (unter Beruecksichtigung von Stegen und Haefen). Default fuer raum ist this_object(). VERWEISE: query_innenraum, query_hat_boden GRUPPEN: raum SOURCE: /i/tools/room_types.c FUNKTION: query_hat_boden DEKLARATION: varargs int query_hat_boden(object raum) BESCHREIBUNG: Gibt an, ob jemand, der sich in dem Raum aufhaelt, Boden unter seinen Fuessen hat. Default fuer raum ist this_object(). VERWEISE: query_innenraum, query_im_wasser GRUPPEN: raum SOURCE: /i/tools/room_types.c FUNKTION: get_environment DEKLARATION: object get_environment(object ob) BESCHREIBUNG: Liefert den logisch aeussersten Raum von ob. Dabei werden Schiffe und andere Objekte mit den Typen "repraesentant" oder "umgebung" beachtet. GRUPPEN: raum SOURCE: /i/tools/room_types.c FUNKTION: get_displayed_domain DEKLARATION: string get_displayed_domain(object ob) BESCHREIBUNG: Liefert den Namen der Domain, in der sich ob aufhaelt, der auch Spielern angezeigt werden kann. GRUPPEN: raum SOURCE: /i/tools/room_types.c FUNKTION: add_security_condition DEKLARATION: protected void add_security_condition(closure condition|object ob|lwobject lwo|string obj_name|string euid) BESCHREIBUNG: Hiermit gibt man an, welchen Objekten man vertraut. Folgende Angaben sind moeglich: Eine Closure: Diese Closure wird mit dem Objekt als Parameter aufgerufen. Liefert sie 1, wird dem Objekt vertraut. Eine EUID: Jedem Objekt mit dieser EUID wird vertraut. Ein Objekt: Diesem Objekt wird vertraut (bis es zerstoert wird). Ein LW-Objekt: Diesem Lightwight-Objekt wird vertraut. Eine Objektname: Diesem Objekt wird vertraut. Endet der String mit einem "#" so wird den Clones vertraut. Ein Verzeichnisname: Dieser String muss mit einem "/" enden. Alle Objekte in diesem Verzeichnis und seine Unterverzeichnisse werden als vertrauenswuerdig angesehen. Folgende Bedingungen sind vordefiniert: #'sc_euid_as_ti Das Objekt muss dieselbe EUID wie TI haben. #'sc_euid_as_ti Das Objekt muss dieselbe EUID wie TP haben. #'sc_ti Das Objekt ist TI. #'sc_tp Das Objekt ist TP. VERWEISE: check_security, init_security_for_actions, init_security_trust_mudlib GRUPPEN: Sicherheit SOURCE: /i/tools/security.c FUNKTION: check_security DEKLARATION: varargs int check_security(int flags) BESCHREIBUNG: Ueberprueft, ob diese Funktion nur ueber vertrauenswuerdige Objekte aufgerufen wurde. (Es wird der caller_stack inkl. this_interactive ueberprueft.) Folgende Flags (definiert in security.h) kann man dabei angeben: CHECK_LAST_OBJECT Es wird nur das letzte Objekt getestet (welches nicht this_object() ist). CHECK_ERROR Im Falle eines nicht vertrauenswuerdigen Objektes breche die Ausfuehrung mit einem Fehler (mit raise_error) ab. Die Funktion liefert 1, wenn es keine Probleme gibt, anderenfalls 0. Diese Funktion sollte aus Sicherheitsgruenden (wenn man Wert auf ein korrektes Ergebnis legt...) nicht per call_other (->) aufgerufen werden. VERWEISE: add_security_condition, init_security_for_actions, init_security_trust_mudlib GRUPPEN: Sicherheit SOURCE: /i/tools/security.c FUNKTION: init_security_for_actions DEKLARATION: protected void init_security_for_actions() BESCHREIBUNG: Damit wird this_player() und - sofern this_player() ein Gott ist - auch allen Objekten mit gleicher EUID vertraut. (Falls TI!=0 ist, wird damit auch TI==TP verlangt.) Diese Einstellung kann statt 'static add_actions' genutzt werden. Achtung: Es ist dazu aber noch sicherzustellen, dass this_player() wirklich jemand ist, der dieser Action nutzen darf. BEISPIEL: inherit "/i/tools/security"; int my_action(string str) { if(!this_player_darf_das() || !check_security()) return 0; ... } void init() { // Hier waere frueher das if(this_player_darf_das()) gewesen. add_action("my_action","trala"); ... } void create() { init_security_for_actions(); ... } VERWEISE: add_security_condition, check_security, init_security_trust_mudlib GRUPPEN: Sicherheit SOURCE: /i/tools/security.c FUNKTION: init_security_trust_mudlib DEKLARATION: protected void init_security_trust_mudlib() BESCHREIBUNG: Fuegt als sicher angesehene Mudlib-Objekte hinzu. (Derzeit Objekte aus /apps, /map/map, Spieler-Objekte, Objekte aus /room/rathaus und Admin-Tools.) Dies kann man als Ausgangspunkt fuer eigene Anpassungen (z.B. fuer Master) nehmen. VERWEISE: add_security_condition, check_security, init_security_for_actions GRUPPEN: Sicherheit SOURCE: /i/tools/security.c FUNKTION: notify_seele DEKLARATION: void notify_seele(object wer, mixed wen, string what, string adverb, int align, int flags, int msg_typ_wer, int msg_typ_wen, int msg_typ_andere) BESCHREIBUNG: Die Seele ruft jedesmal, NACHDEM ein Seele-Befehl ausgefuehrt wurde, in allen Lebewesen im Raum und im Raum selbst notify("seele", ...) auf. Ist ein Objekt bei einem dieser Lebewesen oder dem Raum als Controller fuer "notify_seele" angemeldet (lebewesen_oder_raum->add_controller("notify_seele", object);), so wird dann in diesem Objekt die Funktion notify_seele(wer, wen, what, adverb, align, flags, msg_typ_wer, msg_typ_wen, msg_typ_andere) aufgerufen. Damit kann z.B. ein Monster erkennen, dass gerade ein Spieler mit der Seele auf ihn eingewirkt hat. Wenn man eine Seele-Aktion vorher behandeln oder gar verhindern will, verwendet man forbidden_seele()! Achtung: Die Kommunikationsbefehle der Seele (antworte, frage, ...) verwenden statt notify_seele, notify_comm. Die Parameter bedeuten: wer Das ist der, der "geseelt" hat (oder geknuddelt oder so). wen Der "geseelte" (z.B. der Geknuddelte, ist 0 falls kein Partner verwendet wurde). what Das ist (in etwa) der Seele-Befehl, der benutzt wurde. Wenn auf spezielle Befehle reagiert werden soll, muss man eben ausprobieren, was die returnen. adverb Das ist das benutzte Adverb, oder eben 0, wenn keins verwendet wurde. align Ist Seelekommando eher neutral (NEUTRAL == 0), mies (MIES == -1) oder nett (NETT == 1) gemeint (Konstanten aus soul.h). flags Andere Eigenschaften der Seele-Aktion. Mit bitweisem-& zu testen. Momentan implementierte Eigenschaften: flags & PSEUDO_MOVE Bewegt man sich bei der Aktion (z.B. waelzen, tanzen, huepfen, ...) msg_typ_wer Welche Sinne des Seelenden werden durch die Aktion angesprochen (z.B. knuddle: msg_typ_wer & MT_FEEL - der Seelende spuert die Aktion). Konstanten aus message.h msg_typ_wen Welche Sinne des Geseelten werden angesprochen. msg_typ_andere Welche Sinne der Beobachter werden angesprochen. BEISPIEL 1: zg /p/Doc/Lehre/Demo/room/soul-demo BEISPIEL 2: In einem Monster: void create() { ... add_controller("notify_seele", this_object()); } void notify_seele(object wer, mixed wen, string what, string adverb, int align, int flags, int msg_typ_wer, int msg_typ_wen, int msg_typ_andere) { if (wer != this_object() && wen == this_object()) { do_command("sage Wieso "+conv_akt(what,0)+" Du mich?"); if (align > 0) do_command("ich freut sich weil das so nett war."); if (msg_typ_wen & MT_FEEL) do_command("sage Bitte beruehre mich nicht. Das mag ich nicht."); } } Dann meldet sich das Monster immer nach einem Seele-Kommando ;-). VERWEISE: conv_akt, message, wrap_say, allowed_seele, forbidden_seele, set_notify_soul_ob, query_notify_soul_ob_file, notify_comm, forbidden_comm, add_controller GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: allowed_seele DEKLARATION: int allowed_seele() BESCHREIBUNG: Verlangt ein Seele-Befehl ein Lebewesen als Partner und es wird der Seele-Befehl mit einem toten Objekt aufgerufen, so wuerde normal die Meldung "Das geht nur mit Lebewesen." ausgegeben werden. Vor der Ausgabe diese Meldung wird aber nochmals mit totes_objekt->allowed("seele") gefragt, ob der Seele-Befehl doch ausgefuehrt werden darf. BEISPIEL: In totem Objekt (z.B. Teddy, der auch gewuergt und geknuddelt werden koennen soll): void create() { ... add_controller("allowed_seele", this_object()); } int allowed_seele() { return 1; } VERWEISE: notify_seele, forbidden_seele, notify_comm, forbidden_comm, add_controller GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: forbidden_seele DEKLARATION: int forbidden_seele(object wer, mixed wen, string what, string adverb, int align, int flags, int msg_typ_wer, int msg_typ_wen, int msg_typ_andere) BESCHREIBUNG: Die Seele ruft jedesmal, BEVOR ein Seele-Befehl ausgefuehrt wird, in allen Lebewesen im Raum und im Raum selbst forbidden("seele", ...) auf. Ist ein Objekt bei einem dieser Lebewesen oder dem Raum als Controller fuer "forbidden_seele" angemeldet (lebewesen_oder_raum->add_controller("forbidden_seele", object);), so wird dann in diesem Objekt die Funktion forbidden_seele(wer, wen, what, adverb, align, flags, msg_typ_wer, msg_typ_wen, msg_typ_andere) aufgerufen. Liefert forbidden_seele als Ergebnis 1, so wird die Seele-Aktion damit verhindert. forbidden_seele sollte sich dabei um die Augabe einer passenden Meldung als Begrundung kuemmern. Damit kann man z.B. bei einem Monster verhindern, dass es gestreichelt wird oder man kann aus dem Streicheln ganz was anderes machen. Wenn eine Reaktion nach der Aktion erwuenscht ist, nimmt man notify_seele()! Achtung: Die Kommunikationsbefehle der Seele (antworte, frage, ...) verwenden statt forbidden_seele, forbidden_comm. Bedeutung der Parameter: siehe notify_seele(). BEISPIEL: In einem Monster (ein grosser Riese) deklariert: void create() { ... add_controller("forbidden_seele", this_object()); } int forbidden_seele(object wer, mixed wen, string what, string adverb, int align, int flags, int msg_typ_wer, int msg_typ_wen, int msg_typ_andere) { if (wer == this_object() || wen != this_object()) return 0; switch (what) { // Aktion abaendern case "tret": wer->send_message(MT_LOOK,MA_EMOTE, wrap(Der(wer) + " versucht gegen das Knie des Riesen zu " "treten, aber da er viel zu gross fuer " + ihn(wer) + " ist, tritt " + er(wer)+" ihm lieber auf die Zehen."), wrap("Du versuchst gegen das Knie des Riesen zu treten, " "aber da er viel zu gross fuer dich ist, trittst " "Du ihm lieber auf die Zehen."),wer); send_message_to(this_object(),MT_LOOK,MA_EMOTE, Der(wer) + " tritt dir auf die Zehen.\n"); // Koennte man sich fuer Monster auch sparen ;-) return 1; // Aktion verbieten case "stups": send_message_to(wer,MT_NOTIFY,MA_UNKNOWN, "Das geht nicht, da du nicht an den Riesen " "heranreichst!\n"); return 1; // Alles andere erlauben default: return 0; } } VERWEISE: notify_seele, allowed_seele, add_controller GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: notify_comm DEKLARATION: void notify_comm(object wer, mixed wen, string what, string adverb, int flags, int msg_typ_wer, int msg_typ_wen, int msg_typ_andere) BESCHREIBUNG: Die Seele ruft jedesmal, NACHDEM ein Seele-Kommunikationsbefehl ausgefuehrt wurde, in allen Lebewesen im Raum und im Raum selbst notify("comm", ...) auf. Ist ein Objekt bei einem dieser Lebewesen oder dem Raum als Controller fuer "notify_comm" angemeldet, so wird dann in diesem Objekt die Funktion notify_comm(wer, wen, what, adverb, flags, msg_typ_wer, msg_typ_wen, msg_typ_andere) aufgerufen. Parameter & Beispiel: siehe notify_seele VERWEISE: notify_seele, forbidden_seele, forbidden_comm, add_controller GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: forbidden_comm DEKLARATION: int forbidden_comm(object wer, mixed wen, string what, string adverb, int flags, int msg_typ_wer, int msg_typ_wen, int msg_typ_andere) BESCHREIBUNG: Die Seele ruft jedesmal, BEVOR ein Seele-Kommunikationsbefehl ausgefuehrt wird, in allen Lebewesen im Raum und im Raum selbst forbidden("comm", ...) auf. Ist ein Objekt bei einem dieser Lebewesen oder dem Raum als Controller fuer "forbidden_comm" angemeldet, so wird dann in diesem Objekt die Funktion forbidden_comm(wer, wen, what, adverb, flags, msg_typ_wer, msg_typ_wen, msg_typ_andere) aufgerufen. Liefert forbidden_comm als Ergebnis 1, so wird der Seele-Kommunikations- befehl damit verhindert (d.h. der Seelende ist geknebelt ;-). forbidden_seele sollte sich dabei um die Augabe einer passenden Meldung als Begrundung kuemmern. Bedeutung der Parameter: siehe notify_seele(). Beispiel: siehe forbidden_seele(). VERWEISE: notify_comm, notify_seele, forbidden_seele, add_controller GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: seele_AKTION DEKLARATION: string seele_[a-z]+(_msg|_msg_me|_msg_other) BESCHREIBUNG: Fuer jede Seeleaktion gibt es drei Funktionen (Objekt) bzw. zwei Eintraeges (vitem-Mapping), die am Partner aufgerufen werden. msg meldet an den Ausfuehrenden, msg_me an den Partner, msg_other an die Umgebenden. Zusaetzlich gibt es noch: query_seele_default_msg bzw ["seele_default_msg"] query_seele_default_msg_me query_seele_default_msg_other ["seele_default_msg_other"] Die default Meldung wird nur dann abgefragt, wenn es die vorherige seele_AKTION nicht vorhanden war (0 liefert). Beispiele: "seele_knabber_msg" : "Du knabberst am Hibiscus.", "seele_knabber_msg_other" : "$Der(OBJ_TP) knabbert am Hibiscus.", partner->query_seele_knabber_msg_me() gibt Der(TP)+" kaut an Deinem Ohr." zurueck. // msg_me macht als Meldung ans Vitem keinen Sinn. VERWEISE: forbidden_msg_soul_action_partner_notify GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: forbidden_msg_soul_action_partner_notify DEKLARATION: varargs int forbidden_msg_soul_action_partner_notify(mixed partner, string aktion, string adverb, int align, int flags, string str_owner, string str_partner, string str_other, int msg_action, int msg_type_owner, int msg_type_partner, int msg_type_other) BESCHREIBUNG: Funktion uebernimmt die Komplette Ausgabe aller Messages eines Seele-Befehls MIT Partner, sowie den korrekten Aufruf von forbidden() und notify(). Rueckgabewert: 0 Erfolgreich, 1 Aktion wurde verboten. Parameter: siehe notify_seele Ist einer der msg_*-Parameter gleich 0, so nimmt er automatisch den Wert des davorliegenden msg_*-Parameter an. msg_action: MA_EMOTE oder MA_COMM (aus message.h) Beachte: Fuer korrekte Meldungen bitte die x-Grammatikfunktionen aus soul_hlp.c verwenden und Ausgaben in /p/Doc/Lehre/Demo/room/soul-test-room kontrollieren. Beispiel aus soul_commands.c: if (forbidden_msg_soul_action_partner_notify( was, "frag", str, NEUTRAL, 0, Wrap_say("Du fragst "+xdeinen(was)+":", str), Wrap_say(Der(owner)+" fragt "+xdich(was)+":", str), Wrap_say(Der(owner)+" fragt "+xseinen(was)+":", str), MA_COMM, MT_NOISE)) return 1; VERWEISE: notify_seele, forbidden_seele, forbidden_comm, forbidden_msg_soul_action_notify GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: forbidden_msg_soul_action_notify DEKLARATION: varargs int forbidden_msg_soul_action_notify(string aktion, string adverb, int align, int flags, string str_owner, string str_other, int msg_action, int msg_type_owner, int msg_type_other) BESCHREIBUNG: Funktion uebernimmt die Komplette Ausgabe aller Messages eines Seele-Befehls OHNE Partner, sowie den korrekten Aufruf von forbidden() und notify(). Rueckgabewert: 0 Erfolgreich, 1 Aktion wurde verboten. Parameter: siehe notify_seele Ist einer der msg_*-Parameter gleich 0, so nimmt er automatisch den Wert des davorliegenden msg_*-Parameter an. msg_action: MA_EMOTE oder MA_COMM (aus message.h) Beispiel aus soul_commands.c: if (forbidden_msg_soul_action_notify( "antwort", str, NEUTRAL, 0, Wrap_say("Du antwortest:", str), Wrap_say(Der(owner)+" antwortet:", str), MA_COMM, MT_NOISE)) return 1; VERWEISE: notify_seele, forbidden_seele, forbidden_comm, forbidden_msg_soul_action_partner_notify GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: conv_akt DEKLARATION: string conv_akt(string aktion, int flag) BESCHREIBUNG: Eine wahnsinnig kryptische Funktion, um den Verbrumpf mit der korrekten Endung zu versehen. Wenn Flag gesetzt ist, wird das Verb fuer die anderen berechnet, sonst das fuer TP. Die unregelmaessigen Bildungen werden beachtet. Bitte nicht von den vielen ?'s und :'s verwirren lassen :) VERWEISE: plus_part, adv_part GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: plus_adv DEKLARATION: deprecated int plus_adv(string adv, string aktion [, mixed fill,string fail ,string default_adv, int reflexiv]) BESCHREIBUNG: ACHTUNG: Bitte soul_plus_adv statt plus_adv verwenden! Es werden die Ausgaben fuer ein Seelekommando mit moeglichem Adverb erzeugt. adv Das gewuenschte Adverb aktion Verbrumpf der Aktion (huepf, aerger) fill Phrase am Ende (in die Luft). Optional Es kann ein Array angegeben werden, dann wird der 1. String an owner ausgegeben, der 2. an den Raum. fail Wenn hier nicht 0 steht wird fail als Fehlermeldung ausgegeben, sollte adv=0 sein ("Huepfe wie?\n") default_adv Adverb, das genommen wird, wenn adv 0 ist. reflexiv Die Aktion wird reflexiv konjugiert (kratzt sich/dich), wenn dieser Parameter == 1 ist, mit reflexiv == 2 kann man sich/dir (Du streichelst dir den Bauch) erzeugen. BEISPIEL: plus_adv("nervoes", "gruebel"); -> Monty gruebelt nervoes. Du gruebelst nervoes. plus_adv("veraergert", "beiss", "auf ein Beissholz"); -> Monty beisst veraergert auf ein Beissholz. Du beisst veraergert auf ein Beissholz. plus_adv(0, "stink", 0, "Stinke wie?\n"); -> Fehlermeldung: Stinke wie? plus_adv(0, "stink", "herum", 0, "entsetzlich"); -> Monty stinkt entsetzlich herum. Du stinkst entsetzlich herum. plus_adv("verwirrt", "kratz", ({"an deinem Kopf", "an "+ seinem((["name":"kopf","gender":"maennlich"]),0 , owner), 0, 0, 1); -> Monty kratzt sich verwirrt an seinem Kopf. Du kratzt dich verwirrt an deinem Kopf. VERWEISE: adv_part GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: soul_plus_adv DEKLARATION: int soul_plus_adv(string adv, string aktion, int align, int flags, int msg_action, int msg_type_owner, [ int msg_type_other, mixed fill, string fail ,string default_adv, int reflexiv]) BESCHREIBUNG: Es werden die Ausgaben fuer ein Seelekommando mit moeglichem Adverb erzeugt. adv Das gewuenschte Adverb aktion Verbrumpf der Aktion (huepf, aerger) align Ist Seelekommando eher neutral (NEUTRAL == 0), mies (MIES == -1) oder nett (NETT == 1) gemeint (Konstanten aus soul.h). flags Andere Eigenschaften der Seele-Aktion. Mit bitweisem-& zu testen. Momentan implementierte Eigenschaften: flags & PSEUDO_MOVE Bewegt man sich bei der Aktion (z.B. waelzen, tanzen, huepfen, ...) msg_action MA_EMOTE oder MA_COMM (aus message.h) msg_typ_owner Welche Sinne des Seelenden werden durch die Aktion angesprochen (z.B. knuddle: msg_typ_wer & MT_FEEL - der Seelende spuert die Aktion). Konstanten aus message.h msg_typ_other Welche Sinne der Beobachter werden angesprochen. fill Phrase am Ende (in die Luft). Optional Es kann ein Array angegeben werden, dann wird der 1. String an owner ausgegeben, der 2. an den Raum. fail Wenn hier nicht 0 steht wird fail als Fehlermeldung ausgegeben, sollte adv=0 sein ("Huepfe wie?\n") default_adv Adverb, das genommen wird, wenn adv 0 ist. reflexiv Die Aktion wird reflexiv konjugiert (kratzt sich/dich), wenn dieser Parameter == 1 ist, mit reflexiv == 2 kann man sich/dir (Du streichelst dir den Bauch) erzeugen. Ist einer der msg_*-Parameter gleich 0, so nimmt er automatisch den Wert des davorliegenden msg_*-Parameter an. BEISPIEL: soul_plus_adv("nervoes", "gruebel", NEUTRAL, 0, MA_EMOTE, MT_LOOK); -> Monty gruebelt nervoes. Du gruebelst nervoes. soul_plus_adv("veraergert", "beiss", NEUTRAL, 0, MA_EMOTE, MT_LOOK | MT_FEEL, MT_LOOK, "auf ein Beissholz"); -> Monty beisst veraergert auf ein Beissholz. Du beisst veraergert auf ein Beissholz. soul_plus_adv(0, "stink", MIES, 0, MA_EMOTE, MT_SMELL, 0, 0, "Stinke wie?\n"); -> Fehlermeldung: Stinke wie? soul_plus_adv(0, "stink", "herum", MIES, 0, MA_EMOTE, MT_SMELL, 0, 0, "entsetzlich"); -> Monty stinkt entsetzlich herum. Du stinkst entsetzlich herum. plus_adv("verwirrt", "kratz", NEUTRAL, 0, MA_EMOTE, MT_LOOK | MT_FEEL, MT_LOOK, ({"an deinem Kopf", "an "+ seinem((["name":"kopf","gender":"maennlich"]),0 , owner), 0, 0, 1); -> Monty kratzt sich verwirrt an seinem Kopf. Du kratzt dich verwirrt an deinem Kopf. VERWEISE: soul_adv_part GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: soul_parser DEKLARATION: mixed *soul_parser(string str, [int flags, string preposition]) BESCHREIBUNG: Der soul_parser liefert vor allem den passenden Partner zu einem Seele-Kommando. Uebergeben wird der String str, also alles, was nach dem Kommando kommt und die Flags. Die Bedeutungen fuer die Flags sind in soul.h definiert: PARNTER : wird an adv_part weitergereicht: Fehlermeldung, wenn in str kein/e ParerIn gefunden wurde, sonst plus_adv machen LIVING : Fehlermeldung, wenn der gefundene Partner kein Living ist, wobei hierzu auch lebende v-items zaehlen (siehe add_v_item). Antwortet Partner auf allowed("seele") mit 1, so akzepptiert soul_parser() ihn wie ein living (siehe allowed_seele()). OBJECT : Fehlermeldung, wenn der gefundene Partner kein Objekt ist. (LIVING und OBJECT muessen nicht zusammen angegeben werden) IGNORE_FAR: wenn's egal ist ob ein gefundenes V-Item weit weg ist. d.h. Aktion geht auch mit "far"-V-Items. SOUL_PO : nur mit Partner und nur mit Objekten (PARTNER|OBJECT) SOUL_PL : nur mit Partner und nur mit Livings (PARTNER|LIVING) NOT_TO_ENV: Geht nicht mit der Umgebung als Partner. Ist preposition angegeben, so wird auch eine eventuell dem Partner vorangestellte Praeposition akzeptiert. soul_parser liefert: soul_parser()[0] ist der gefundene Partner, soul_parser()[1] ist der Rest von str (mit space vorndran) und soul_parser()[2] sind die Flags, wie sie uebergeben wurden. soul_parser()[3] eine Fehlermeldung wenn kein Partner gefunden wurde. (erzeugt durch parse_com_error(). etwa so: 'Bla nicht gefunden.') ({}) wenn mehr als ein Objekt gefunden wurde, oder wenn kein Objekt gefunden wurde, das mit den flags naeher spezifiziert wurde. BEISPIEL: soul_parser("den Stein inniglich", SOUL_PL) liefert ({}) und erzeugt die Fehlermeldung "Das geht nur mit Lebewesen!" (vorausgesetzt, es gibt einen Stein in der Umgebung...) soul_parser("den Stein inniglich", PARTNER) liefert ({, " inniglich", 1, 0}) soul_parser("um den 3. Stein", SOUL_PO, "um") liefert ({, "", 1, 0}). VERWEISE: soul_adv_part GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: parse_text DEKLARATION: varargs mixed *parse_text(string str, mixed where, int flag, string error_msg) BESCHREIBUNG: Alternative zu parse_com, wenn man am Anfang eines Textes ein Objekt finden will und den Rest nach der Objekt-Id bekommen will. Weil parse_com, wenn kein Objekt gefunden wird, sehr teuer bei langen Texten sein kann. Parameter: str Der zu analysierende Text where Wo gesucht werden soll. Default ({ environment(this_player()), this_player() }) flag Darf PARSE_NO_V_ITEMS sein. Sieheparse_com(). error_msg Wie bei parse_com_error(). Wird mit notify_fail() gesetzt, wenn kein Objekt gefunden wird und kein bessere Fehler generiert werden kann. Rueckgabe: 0 falls kein Objekt gefunden wurde. ({ , }) wenn Objekt gefunden wurde. ({ 0, }) wenn Objekt zwingend gesucht aber nicht gefunden wurde. (ist der Fall wenn ueber exec_command() gearbeitet wurde) Beispiel: parse_text("mein kuscheli Das suess ist schoen.") -> ({ OBJ(mein kuscheli), "Das ist schoen." }) parse_text("Das hier ist mir egal!") -> 0 Typische Anwendung in Befehlen wie: 'frage mein Kuscheli magst Du das so?' BEISPIEL: VERWEISE: soul_adv_part GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: adv_part DEKLARATION: deprecated int adv_part(mixed res, string aktion, mixed fill1, string fill, int fall [, string fail, string default_adv, string dot ]]) BESCHREIBUNG: ACHTUNG BITTE NICHT MEHR VERWENDEN - neu: soul_adv_part() adv_part gibt alle Meldungen fuer ein Seelekommando mit Partner und Adverb aus. Parameter res Ergebnis eines Aufrufes von soul_parser, siehe dort aktion Verbrumpf der Seele-Aktion (kratz, beiss, kuschel...) fill1 Fuellwoerter vor Partner und Adverb fill Fuellwoerter nach Partner und Adverb, hier kann auch ein Array angegeben werden, das 1. geht an owner, das 2. an die Umgebung. fall Der grammatikalische Fall, in dem der Partner auftaucht. es werden Konstanten aus verwendet fail Fehlermeldung, die ausgegeben wird, wenn kein Partner gefunden wird, wenn sie fehlt, wird eine (maessige) erzeugt. Nur von Belang, wenn der soul_parser mit flag 1 aufgerufen wurde. Optional default_adv Adverb, das genommen wird, wenn der soul_parser keines findet. Optional. dot Satzzeichen am Ende der Meldung. Optional. Default ist natuerlich "." BEISPIEL: adv_part(soul_parser("freaky anmutig", 0), "verneig", ({"dich vor","sich vor"}), 0, FALL_DAT); -> Monty verneigt sich anmutig vor Freaky. Du verneigst dich anmutig vor Freaky. Monty verneigt sich anmutig vor dir. adv_part(({OBJ(ork), "gemein", 3}), "grins", 0, "an", FALL_AKK, 0, "verschmitzt"); -> Monty grins den Ork gemein an. Du grinst den Ork gemein an. Monty grinst dich gemein an. adv_part(({0, "lustig", 0}), "grins", 0, "an", FALL_AKK, 0, 0,"!") -> Monty grinst lustig! Du grinst lustig! adv_part(({0, "hinterlistig", 1}), "attacker", 0, 0, FALL_AKK, "Attackiere wen oder was ?\n"); -> Fehlermeldung: Attackiere wen oder was ? VERWEISE: plus_adv, soul_parser, soul_adv_part GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: soul_adv_part DEKLARATION: int soul_adv_part(mixed res, mixed aktion, int align, int flags, int msg_action, int msg_type_owner, int msg_type_partner, int msg_type_other, mixed fill1, string fill, int fall [, string fail, string default_adv, string dot ]]) BESCHREIBUNG: soul_adv_part gibt alle Meldungen fuer ein Seelekommando mit Partner und Adverb aus. Parameter res Ergebnis eines Aufrufes von soul_parser, siehe dort aktion Verbrumpf der Aktion (huepf, aerger) adverb Das ist das benutzte Adverb, oder eben 0, wenn keins verwendet wurde. align Ist Seelekommando eher neutral (NEUTRAL == 0), mies (MIES == -1) oder nett (NETT == 1) gemeint (Konstanten aus soul.h). flags Andere Eigenschaften der Seele-Aktion. Mit bitweisem-& zu testen. Momentan implementierte Eigenschaften: flags & PSEUDO_MOVE Bewegt man sich bei der Aktion (z.B. waelzen, tanzen, huepfen, ...) msg_action MA_EMOTE oder MA_COMM (aus message.h) msg_type_owner Welche Sinne des Seelenden werden durch die Aktion angesprochen (z.B. knuddle: msg_typ_wer & MT_FEEL - der Seelende spuert die Aktion). Konstanten aus message.h msg_type_partner Welche Sinne des Geseelten werden angesprochen. msg_type_other Welche Sinne der Beobachter werden angesprochen. fill1 Fuellwoerter vor Partner und Adverb fill Fuellwoerter nach Partner und Adverb, hier kann auch ein Array angegeben werden, das 1. geht an owner, das 2. an die Umgebung. fall Der grammatikalische Fall, in dem der Partner auftaucht. es werden Konstanten aus verwendet fail Fehlermeldung, die ausgegeben wird, wenn kein Partner gefunden wird, wenn sie fehlt, wird eine (maessige) erzeugt. Nur von Belang, wenn der soul_parser mit flag 1 aufgerufen wurde. Optional default_adv Adverb, das genommen wird, wenn der soul_parser keines findet. Optional. dot Satzzeichen am Ende der Meldung. Optional. Default ist natuerlich "." Ist einer der msg_*-Parameter gleich 0, so nimmt er automatisch den Wert des davorliegenden msg_*-Parameter an. BEISPIEL: soul_adv_part(soul_parser("freaky anmutig", 0), "verneig", NETT, 0, MA_EMOTE, MT_LOOK, 0, 0, ({"dich vor","sich vor"}), 0, FALL_DAT); -> Monty verneigt sich anmutig vor Freaky. Du verneigst dich anmutig vor Freaky. Monty verneigt sich anmutig vor dir. soul_adv_part(({OBJ(ork), "gemein", 3}), "grins", NETT, 0, MA_EMOTE, MT_LOOK, 0, 0, 0, "an", FALL_AKK, 0, "verschmitzt"); -> Monty grins den Ork gemein an. Du grinst den Ork gemein an. Monty grinst dich gemein an. soul_adv_part(({0, "lustig", 0}), "grins", NETT, 0, MA_EMOTE, MT_LOOK, 0, 0, 0, "an", FALL_AKK, 0, 0,"!") -> Monty grinst lustig! Du grinst lustig! soul_adv_part(({0, "hinterlistig", 1}), "attacker", MIES, 0, MA_EMOTE, MT_LOOK | MT_FEEL, 0, MT_LOOK, 0, 0, FALL_AKK, "Attackiere wen oder was ?\n"); -> Fehlermeldung: Attackiere wen oder was ? VERWEISE: soul_plus_adv, soul_parser GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: notify_soul DEKLARATION: deprecated void notify_soul(object who, string what, string adverb) BESCHREIBUNG: ACHTUNG: statt notify_soul sollte notify_seele verwendet werden! Die Seele ruft jedesmal, wenn eine Aktion mit Partner ausgefuehrt wurde, diese Funktion im Parnter auf und zwar NACH der Seele-Aktion. Damit kann z.B. ein Monster erkennen, dass gerade ein Spieler mit der Seele auf ihn eingewirkt hat. In diesem Monster muss man nur noch die Funktion notify_soul implementieren und kann entsprechend reagieren. Wenn man eine Seele-Aktion vorher behandeln oder gar verhindern will, verwendet man soul_command()! Die Parameter bedeuten: who Das ist der, der "geseelt" hat. (oder geknuddelt oder so) what Das ist (in etwa) der Seele-Befehl, der benutzt wurde. Wenn auf spezielle Befehle reagiert werden soll, muss man eben ausprobieren, was die returnen. adverb Das ist das benutzte Adverb, oder eben 0, wenn keins verwendet wurde. BEISPIEL: In einem Monster deklariert: void notify_soul(object who, string what, string adverb) { send_message(MT_NOISE,MA_COMM,wrap_say(Der()+" sagt", "Wieso "+conv_akt(what,0)+" Du mich?")); } Dann meldet sich das Monster immer nach einem Seele-Kommando :). VERWEISE: conv_akt, message, wrap_say, notify_seele, forbidden_seele, set_notify_soul_ob, query_notify_soul_ob_file GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: soul_command DEKLARATION: deprecated int soul_command(object who, string what, string adverb) BESCHREIBUNG: ACHTUNG: statt soul_command sollte forbidden_seele verwendet werden! Die Seele eruft jedesmal, BEVOR eine Aktion mit Partner ausgefuehrt wird, diese Funktion im Partner auf. Wenn das Ergebnis 1 ist, dann kuemmert sich der Partner um die Ausgabe saemtlicher Texte. Damit kann man zB bei einem Monster verhindern, dass es gestreichelt wird oder man kann aus dem Streicheln ganz was anderes machen. In diesem Monster muss man nur noch die Funktion soul_command implementieren und schonm kann es entsprechend reagieren. Wenn eine Reaktion nach der Aktion erwuenscht ist, nimmt man notify_soul()! Bedeutung der Parameter: siehe notify_soul(). BEISPIEL: In einem Monster (ein grosser Riese) deklariert: int soul_command(object who, string what, string adverb) { switch (what) { // Aktion abaendern case "tret": send_message(MT_LOOK,MA_EMOTE, wrap(Der(who)+" versucht gegen das Knie des Riesen zu " "treten, aber da er viel zu gross fuer "+ihn(who)+ " ist, tritt "+ er(who)+" ihm lieber auf die Zehen."), wrap("Du versuchst gegen das Knie des Riesen zu treten, " "aber da er viel zu gross fuer Dich ist, trittst " "Du ihm lieber auf die Zehen."), who); send_message_to(this_object(),MT_FEEL,MA_EMOTE, Der(who)+" tritt Dir auf die Zehen.\n"); // Koennte man sich fuer Monster auch sparen ;-) return 1; // Aktion verbieten case "stups": send_message_to(who,MT_NOTIFY,MA_EMOTE, "Das geht nicht, da Du nicht an den Riesen " "heranreichst!\n"); return 1; // Alles andere erlauben default: return 0; } } VERWEISE: notify_seele, forbidden_seele GRUPPEN: seele SOURCE: /i/tools/soul_hlp.c FUNKTION: get_top_info DEKLARATION: struct top_uid_info* get_top_info() BESCHREIBUNG: Liefert Statistiken über die vorhandenen UIDs. Das Ergebnis ist ein Array aus Strukturen mit folgenden Elementen: string uid Die UID int evals Verbrauchte Evals dieser seit MUD-Start int data Summe aller Datenstrukturen (gemessen in Anzahl an Elementen in jeder Datenstruktur) dieser UID. int callouts Anzahl an laufenden call_outs. Achtung: Bitte das Array und seine Elemente nicht verändern, sondern ggf. erst eine Kopie davon machen. GRUPPEN: Statistik SOURCE: /i/tools/top.c FUNKTION: update_actions DEKLARATION: void update_actions(object ob) BESCHREIBUNG: Wenn ein shadow Actions fuer Umstehende (typischerweise im ueberlagerten init()) anmeldet, so muss es /i/tools/update_actions inheriten, damit beim Ueberwerfen und Entfernen diese Actions ordentlich an- bzw. abgemeldet werden. Ein Aufruf dieser Funktion ist aber nicht notwendig. VERWEISE: init_shadow, init GRUPPEN: shadow SOURCE: /i/tools/update_actions.c FUNKTION: set_value DEKLARATION: void set_value(int val) BESCHREIBUNG: Mit dieser Funktion setzt man den Wert eines Objektes in Talern. Siehe /doc/richtlinien/geschaefte. VERWEISE: query_value GRUPPEN: handel SOURCE: /i/value.c FUNKTION: query_value DEKLARATION: int query_value() BESCHREIBUNG: Mit dieser Funktion kann man den Wert eines Objektes in Talern abfragen. VERWEISE: set_value GRUPPEN: handel SOURCE: /i/value.c FUNKTION: set_no_store DEKLARATION: void set_no_store(int flag) BESCHREIBUNG: Mit dieser Funktion kann man setzen, ob das Objekt nach dem Verkaufen zerstoert werden soll. Das ist z.B. fuer Raetsel-Objekte wichtig. VERWEISE: query_no_store GRUPPEN: handel SOURCE: /i/value.c FUNKTION: query_no_store DEKLARATION: int query_no_store() BESCHREIBUNG: Mit dieser Funktion kann man abfragen, ob das Objekt nach dem Verkaufen zerstoert werden soll. Das ist z.B. fuer Raetsel-Objekte wichtig. VERWEISE: set_no_store GRUPPEN: handel SOURCE: /i/value.c FUNKTION: just_sold DEKLARATION: void just_sold() BESCHREIBUNG: Diese Funktion sollte aufgerufen werden, wenn das Objekt verkauft wurde. Falls 'no_store' gesetzt ist, wird das Objekt zerstoert. VERWEISE: set_no_store, query_no_store GRUPPEN: handel SOURCE: /i/value.c FUNKTION: query_sellable DEKLARATION: int query_sellable() BESCHREIBUNG: Wenn diese Funktion 1 zurueckgibt, dann kann man das Objekt verkaufen. GRUPPEN: handel SOURCE: /i/value.c FUNKTION: set_success_message DEKLARATION: void set_success_message(mixed s) BESCHREIBUNG: Nachdem ein Spieler aus dem Brunnen getrunken hat, erhaelt er eine Meldung, die aus einem Teil von dem Brunnen und einem Teil vom Wasser-Objekt zusammengesetzt wird. set_success_message legt den Teil fest, welcher den Brunnen betrifft. Der Teil vom Wasser wird daran angehaengt, weshalb sie mit einem Leerzeichen enden sollte. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser hinzukommt. VERWEISE: set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: set_other_success_message DEKLARATION: void set_other_success_message(mixed s) BESCHREIBUNG: Nachdem ein Spieler aus dem Brunnen getrunken hat, erhalten die Umstehenden eine Meldung, die aus einem Teil von dem Brunnen und einem Teil vom Wasser-Objekt zusammengesetzt wird. set_other_success_message legt den Teil fest, welcher den Brunnen betrifft. Der Teil vom Wasser wird daran angehaengt, weshalb sie mit einem Leerzeichen enden sollte. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser hinzukommt. VERWEISE: set_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: set_failure_message DEKLARATION: void set_failure_message(mixed s) BESCHREIBUNG: Wenn ein Spieler nicht aus dem Brunnen trinken kann (zuviele Wasserpunkte, zuviele Alkoholpunkte oder aehnliches), erhaelt er eine Meldung die aus einem Teil von dem Brunnen und einem Teil vom Wasser-Objekt zusammengesetzt wird. set_failure_message legt den Teil fest, welcher den Brunnen betrifft. Der Teil vom Wasser wird daran angehaengt, weshalb sie mit einem Leerzeichen enden sollte. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser hinzukommt. VERWEISE: set_success_message, set_other_success_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: set_other_failure_message DEKLARATION: void set_other_failure_message(mixed s) BESCHREIBUNG: Wenn ein Spieler nicht aus dem Brunnen trinken kann (zuviele Wasserpunkte, zuviele Alkoholpunkte oder aehnliches), erhaelt er eine Meldung die aus einem Teil von dem Brunnen und einem Teil vom Wasser-Objekt zusammengesetzt wird. set_failure_message legt den Teil fest, welcher den Brunnen betrifft. Der Teil vom Wasser wird daran angehaengt, weshalb sie mit einem Leerzeichen enden sollte. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser hinzukommt. VERWEISE: set_success_message, set_other_success_message, set_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: set_fill_message DEKLARATION: void set_fill_message(mixed s) BESCHREIBUNG: set_fill_message setzt die Meldung welche der Spieler beim Fuellen von Flaschen am Brunnen erhaelt. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser und 'bottle fuer die Flasche hinzukommen. VERWEISE: set_other_fill_message, query_fill_message, query_other_fill_message GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: set_other_fill_message DEKLARATION: void set_other_fill_message(mixed s) BESCHREIBUNG: set_other_fill_message setzt die Meldung welche die Umstehenden erhalten, wenn ein Spieler eine Flasche am Brunnen fuellt. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser und 'bottle fuer die Flasche hinzukommen. VERWEISE: set_fill_message, query_fill_message, query_other_fill_message GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: query_success_message DEKLARATION: string query_success_message() BESCHREIBUNG: Nachdem ein Spieler aus dem Brunnen getrunken hat, erhaelt er eine Meldung, die aus einem Teil von dem Brunnen und einem Teil vom Wasser-Objekt zusammengesetzt wird. query_success_message setzt diese beiden Teile zusammen und liefert die vollstaendige Meldung zurueck. Ist keine Meldung fuer den Brunnen angegeben, wird fuer diesen Teil eine Default-Meldung verwendet. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_other_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: query_other_success_message DEKLARATION: string query_other_success_message() BESCHREIBUNG: Nachdem ein Spieler aus dem Brunnen getrunken hat, erhalten die Umstehenden eine Meldung, die aus einem Teil von dem Brunnen und einem Teil vom Wasser-Objekt zusammengesetzt wird. query_other_success_message setzt diese beiden Teile zusammen und liefert die vollstaendige Meldung zurueck. Ist keine Meldung fuer die Flasche angegeben, wird fuer diesen Teil eine Default-Meldung verwendet. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: query_failure_message DEKLARATION: string query_failure_message() BESCHREIBUNG: Wenn ein Spieler nicht aus dem Brunnen trinken kann (zuviele Wasserpunkte, zuviele Alkoholpunkte oder aehnliches), erhaelt er eine Meldung die aus einem Teil vom Brunnen und einem Teil vom Wasser-Objekt zusammengesetzt wird. query_failure_message setzt diese beiden Teile zusammen und liefert die vollstaendige Meldung zurueck. Standardmaessig ist der Teil des Brunnens ein Leerstring. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: query_other_failure_message DEKLARATION: string query_other_failure_message() BESCHREIBUNG: Wenn ein Spieler nicht aus dem Brunnen trinken kann (zuviele Wasserpunkte, zuviele Alkoholpunkte oder aehnliches), erhalten die Umstehenden eine Meldung die aus einem Teil vom Brunnen und einem Teil vom Wasser-Objekt zusammengesetzt wird. query_other_failure_message setzt diese beiden Teile zusammen und liefert die vollstaendige Meldung zurueck. Standardmaessig ist der Teil des Brunnens ein Leerstring. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: query_fill_message DEKLARATION: string query_fill_message(object bottle, object water) BESCHREIBUNG: query_fill_message liefert die Meldung fuer den Spieler zurueck, wenn er eine Flasche am Brunnen fuellt. VERWEISE: set_fill_message, set_other_fill_message, query_other_fill_message GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: query_other_fill_message DEKLARATION: string query_other_fill_message(object bottle, object water) BESCHREIBUNG: query_fill_message liefert die Meldung fuer die Umstehenden zurueck, wenn ein Spieler eine Flasche am Brunnen fuellt. VERWEISE: set_fill_message, set_other_fill_message, query_fill_message GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: message DEKLARATION: void message(string player, string others) BESCHREIBUNG: message nimmt die Meldungen fuer den Spieler und fuer die Umstehenden, bricht sie um und gibt sie aus. Ist der Spieler unsichtbar oder die Meldung fuer die Umstehenden leer, so wird sie unterdrueckt. VERWEISE: GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: set_water_file DEKLARATION: void set_water_file(string file_name) BESCHREIBUNG: set_water_file setzt den Dateinamen des Wasser-Objekts, welches der Brunnen klonen soll. Ist kein Dateinamen angegeben, wird normales Wasser verwendet. VERWEISE: set_design_function, clone_water, get_water GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: set_design_function DEKLARATION: varargs void set_design_function(string func[, mixed obj]) BESCHREIBUNG: set_design_function bestimmt eine Funktion vom Typ void foo(object water), die fuer jedes vom Brunnen geklonte Wasser-Objekt aufgerufen wird. Damit hat sie die Moeglichkeit, die Eigenschaften des Wassers zu aendern. Ist nichts weiter angegeben, wird die Funktion im aufrufenden Objekt, ansonsten im direkt oder per Dateinamen angegebenen Objekt gesucht. VERWEISE: set_water_file, clone_water, get_water GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: clone_water DEKLARATION: object clone_water() BESCHREIBUNG: Wurde der Dateiname eines speziellen Wasser-Objekts angegeben, klont clone_water dieses Objekt, ansonsten normales Wasser. Wurde mit set_design_function eine Funktion angemeldet, so wird sie mit dem geklonten Objekt aufgerufen und schliesslich wird das Wasser zurueckgegeben. VERWEISE: set_water_file, set_design_function, get_water GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: query_water DEKLARATION: object query_water() BESCHREIBUNG: Liefert das Wasser-Objekt im Brunnen zurueck oder 0, wenn keines vorhanden ist. Das Objekt sollte nicht aus dem Brunnen bewegt werden. VERWEISE: water_me, set_water_file, set_design_function, clone_water, get_water, setup_well GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: water_me DEKLARATION: string water_me(string s) BESCHREIBUNG: water_me ist ein abgesicherter Aufruf der Funktion me im Wasser-Objekt im Brunnen. Ist kein Wasser-Objekt vorhanden, oder ist es mit dem String nicht gemeint, dann liefert water_me 0, ansonsten einen String mit dem Rest des Kommandos. VERWEISE: me, query_water GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: get_water DEKLARATION: int get_water(object water, int amount, int max_amount) BESCHREIBUNG: Mit der Funktion get_water kann eine Flasche Wasser aus dem Brunnen entnehmen. Dazu uebergibt sie in max_amount die maximale Menge in Schlucken, die sie aufnehmen kann. Kann und will der Brunnen die Anforderung erfuellen, liefert er einen Wert ungleich 0 zurueck und in den Parametern amount und water die wirkliche Abgabemenge (amount <= max_amount) und ein Wasser-Objekt ueber das die Flasche frei verfuegen kann. Dazu muessen water und amount Referenz- parameter sein. Soll die Anforderung nicht erfuellt werden, liefert der Brunnen 0 zurueck. In einem solchen Fall ueberlaesst die Flasche jegliche Meldung dem Brunnen. VERWEISE: set_water_file, set_design_function, clone_water, query_water GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: drink_action DEKLARATION: int drink_action() BESCHREIBUNG: drink_action enthaelt die eigentliche Funktionalitaet fuer das Trinken. Zuerst wird ueberprueft ob der Brunnen etwas enthaelt, wenn ja, dann wird drink_action im Wasser-Objekt aufgerufen. Diese Funktion liefert 1 zurueck, wenn sie sich fuer zustaendig befand und entsprechende (Erfolgs- oder auch Misserfolgs-)Meldungen ausgegeben hat. Ansonsten (im notify_fail-Falle) wird 0 zurueckgeliefert. VERWEISE: drink_command, drink_action (wasser), set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: drink_command DEKLARATION: int drink_command(string s) BESCHREIBUNG: drink_command ist der Parser fuer die Trinkbefehle. Er akzeptiert trinke wasser trinke aus brunnen trinke wasser aus brunnen Wird einer davon erkannt, wird drink_action aufgerufen, wo das eigentliche Trinken behandelt wird. VERWEISE: drink_action GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: setup_well DEKLARATION: void setup_well() BESCHREIBUNG: Der Brunnen enthaelt ein Wasser-Objekt fuer das Trinken direkt am Brunnen. setup_well erzeugt dieses erste Wasser-Objekt und bewegt es in den Brunnen. Die Funktion wird von init aus aufgerufen. VERWEISE: clone_water GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: is_well DEKLARATION: int is_well() BESCHREIBUNG: Brunnen antworten darauf mit 1. VERWEISE: is_water (wasser), is_bottle (flasche) GRUPPEN: wasser SOURCE: /i/wasser/brunnen.c FUNKTION: set_content DEKLARATION: void set_content(int n) BESCHREIBUNG: Setzt den momentanen Inhalt der Flasche in Schlucken. VERWEISE: query_content, set_max_content, query_max_content, set_water, query_water GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_content DEKLARATION: int query_content() BESCHREIBUNG: Liefert den momentanen Inhalt in Schlucken zurueck. VERWEISE: set_content, set_max_content, query_max_content, set_water, query_water GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: set_max_content DEKLARATION: void set_max_content(int n) BESCHREIBUNG: Setzt den maximalen Inhalt in Schlucken, den die Flasche aufnehmen kann. VERWEISE: set_content, query_content, query_max_content, set_water, query_water GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_max_content DEKLARATION: int query_max_content() BESCHREIBUNG: Liefert den maximalen Inhalt in Schlucken, den die Flasche aufnehmen kann. VERWEISE: set_content, query_content, set_max_content, set_water, query_water GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: set_water DEKLARATION: int set_water(object new_water) BESCHREIBUNG: Setzt ein neues Wasser-Objekt und bewegt es in die Flasche. War bereits eines vorhanden, wird dieses zuvor geloescht. Wenn es keine Probleme gab, liefert die Funktion einen Wert ungleich 0, ansonsten wird das neue Wasser-Objekt geloescht und der Rueckgabewert ist 0. VERWEISE: set_content, query_content, set_max_content, query_max_content, query_water GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_water DEKLARATION: object query_water() BESCHREIBUNG: Liefert das Wasser-Objekt in der Flasche zurueck oder 0, wenn keines vorhanden ist. Das Objekt sollte nicht aus der Flasche bewegt werden. VERWEISE: set_content, query_content, set_max_content, query_max_content, set_water GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: transfer_content DEKLARATION: int transfer_content(object new_bottle) BESCHREIBUNG: Transferiert das Wasserobjekt zur new_bottle, !=0 bei Erfolg, 0 sonst. VERWEISE: set_water,query_water GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: water_me DEKLARATION: string water_me(string s) BESCHREIBUNG: water_me ist ein abgesicherter Aufruf der Funktion me im Wasser-Objekt in der Flasche. Ist kein Wasser-Objekt vorhanden, oder ist es mit dem String nicht gemeint, dann liefert water_me 0, ansonsten einen String mit dem Rest des Kommandos. VERWEISE: me, set_water, query_water GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: set_success_message DEKLARATION: void set_success_message(mixed s) BESCHREIBUNG: Nachdem ein Spieler aus der Flasche getrunken hat, erhaelt er eine Meldung, die aus einem Teil von der Flasche und einem Teil vom Wasser-Objekt zusammengesetzt wird. set_success_message legt den Teil fest, welcher die Flasche betrifft. Der Teil vom Wasser wird daran angehaengt, weshalb sie mit einem Leerzeichen enden sollte. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser hinzukommt. VERWEISE: set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: set_other_success_message DEKLARATION: void set_other_success_message(mixed s) BESCHREIBUNG: Nachdem ein Spieler aus der Flasche getrunken hat, erhalten die Umstehenden eine Meldung, die aus einem Teil von der Flasche und einem Teil vom Wasser-Objekt zusammengesetzt wird. set_other_success_message legt den Teil fest, welcher die Flasche betrifft. Der Teil vom Wasser wird daran angehaengt, weshalb sie mit einem Leerzeichen enden sollte. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser hinzukommt. VERWEISE: set_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: set_failure_message DEKLARATION: void set_failure_message(mixed s) BESCHREIBUNG: Wenn ein Spieler nicht aus der Flasche trinken kann (zuviele Wasserpunkte, zuviele Alkoholpunkte oder aehnliches), erhaelt er eine Meldung die aus einem Teil von der Flasche und einem Teil vom Wasser-Objekt zusammengesetzt wird. set_failure_message legt den Teil fest, welcher die Flasche betrifft. Der Teil vom Wasser wird daran angehaengt, weshalb sie mit einem Leerzeichen enden sollte. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser hinzukommt. VERWEISE: set_success_message, set_other_success_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: set_other_failure_message DEKLARATION: void set_other_failure_message(mixed s) BESCHREIBUNG: Wenn ein Spieler nicht aus der Flasche trinken kann (zuviele Wasserpunkte, zuviele Alkoholpunkte oder aehnliches), erhaelt er eine Meldung die aus einem Teil von der Flasche und einem Teil vom Wasser-Objekt zusammengesetzt wird. set_failure_message legt den Teil fest, welcher die Flasche betrifft. Der Teil vom Wasser wird daran angehaengt, weshalb sie mit einem Leerzeichen enden sollte. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser hinzukommt. VERWEISE: set_success_message, set_other_success_message, set_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: set_empty_message DEKLARATION: void set_empty_message(mixed s) BESCHREIBUNG: set_empty_message setzt die Meldung die der Spieler erhaelt, wenn er die Flasche entleert. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser hinzukommt. VERWEISE: set_other_empty_message, query_empty_message, query_other_empty_message, empty_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: set_other_empty_message DEKLARATION: void set_other_empty_message(mixed s) BESCHREIBUNG: set_other_empty_message setzt die Meldung die Umstehende erhalten, wenn ein Spieler die Flasche entleert. Die Meldung kann eine Pseudoclosure oder Closure sein, in denen zu den ueblichen Symbolen noch 'water fuer das Wasser hinzukommt. VERWEISE: set_empty_message, query_empty_message, query_other_empty_message, empty_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_success_message DEKLARATION: string query_success_message() BESCHREIBUNG: Nachdem ein Spieler aus der Flasche getrunken hat, erhaelt er eine Meldung, die aus einem Teil von der Flasche und einem Teil vom Wasser-Objekt zusammengesetzt wird. query_success_message setzt diese beiden Teile zusammen und liefert die vollstaendige Meldung zurueck. Ist keine Meldung fuer die Flasche angegeben, wird fuer diesen Teil eine Default-Meldung verwendet. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_other_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_other_success_message DEKLARATION: string query_other_success_message() BESCHREIBUNG: Nachdem ein Spieler aus der Flasche getrunken hat, erhalten die Umstehenden eine Meldung, die aus einem Teil von der Flasche und einem Teil vom Wasser-Objekt zusammengesetzt wird. query_other_success_message setzt diese beiden Teile zusammen und liefert die vollstaendige Meldung zurueck. Ist keine Meldung fuer die Flasche angegeben, wird fuer diesen Teil eine Default-Meldung verwendet. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_failure_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_failure_message DEKLARATION: string query_failure_message() BESCHREIBUNG: Wenn ein Spieler nicht aus der Flasche trinken kann (zuviele Wasserpunkte, zuviele Alkoholpunkte oder aehnliches), erhaelt er eine Meldung die aus einem Teil von der Flasche und einem Teil vom Wasser-Objekt zusammengesetzt wird. query_failure_message setzt diese beiden Teile zusammen und liefert die vollstaendige Meldung zurueck. Standardmaessig ist der Teil der Flasche ein Leerstring. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_other_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_other_failure_message DEKLARATION: string query_other_failure_message() BESCHREIBUNG: Wenn ein Spieler nicht aus der Flasche trinken kann (zuviele Wasserpunkte, zuviele Alkoholpunkte oder aehnliches), erhalten die Umstehenden eine Meldung die aus einem Teil von der Flasche und einem Teil vom Wasser-Objekt zusammengesetzt wird. query_other_failure_message setzt diese beiden Teile zusammen und liefert die vollstaendige Meldung zurueck. Standardmaessig ist der Teil der Flasche ein Leerstring. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, drink_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_fill_message DEKLARATION: string query_fill_message(mixed well, mixed water) BESCHREIBUNG: query_fill_message liefert zur Flasche und dem uebergebenen Paar von Brunnen und Wasser die Meldung zum Fuellen fuer den Spieler. Dabei gibt es drei Faelle: a) Der Brunnen ist ein Objekt, dann wird ueber die Funktion query_fill_message im Brunnen die Meldung erfragt. b) Sowohl Brunnen als auch Wasser sind Vitems, dann wird die Meldung aus dem Mapping (well_fill_message) des Brunnens genommen. c) Es ist ein einzelnes Wasser (well == 0) als Vitem, dann wird aus dem Mapping des Wassers (water_fill_message) die Meldung genommen. Enthalten in den letzten beiden Faellen die Mappings keine Eintraege fuer Fuellmeldungen, dann wird eine Standard-Meldung benutzt. VERWEISE: query_other_fill_message, fill_from_object, fill_from_vitem GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_other_fill_message DEKLARATION: string query_other_fill_message(mixed well, mixed water) BESCHREIBUNG: query_other_fill_message liefert zur Flasche und dem uebergebenen Paar von Brunnen und Wasser die Meldung zum Fuellen fuer die Umstehenden. Dabei gibt es drei Faelle: a) Der Brunnen ist ein Objekt, dann wird ueber die Funktion query_other_fill_message im Brunnen die Meldung erfragt. b) Sowohl Brunnen als auch Wasser sind Vitems, dann wird die Meldung aus dem Mapping (well_other_fill_message) des Brunnens genommen. c) Es ist ein einzelnes Wasser (well == 0) als Vitem, dann wird aus dem Mapping des Wassers (water_other_fill_message) die Meldung genommen. Enthalten in den letzten beiden Faellen die Mappings keine Eintraege fuer Fuellmeldungen, dann wird eine Standard-Meldung benutzt. VERWEISE: query_fill_message, fill_from_object, fill_from_vitem GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_no_fill_reason DEKLARATION: string query_no_fill_reason(mapping well, mapping water) BESCHREIBUNG: query_no_fill_reason liefert zu den Vitems fuer ein Paar von Brunnen und Wasser oder einzelnes Wasser/einzelne Brunnen den Grund zurueck, warum daran keine Flasche gefuellt werden kann. In den Closures der Vitems fuer Brunnen steht der Bezeichner water fuer das Wasser im Brunnen. VERWEISE: query_no_fill_reason (flasche) GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_empty_message DEKLARATION: void query_empty_message() BESCHREIBUNG: query_empty_message liefert die Meldung fuer den Spieler beim entleeren der Flasche. Ist keine Meldung gesetzt, wird eine Default-Meldung verwendet. VERWEISE: set_empty_message, set_other_empty_message, query_other_empty_message, empty_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_other_empty_message DEKLARATION: void query_other_empty_message() BESCHREIBUNG: query_other_empty_message liefert die Meldung fuer die Umstehenden beim entleeren der Flasche. Ist keine Meldung gesetzt, wird eine Default-Meldung verwendet. VERWEISE: set_empty_message, set_other_empty_message, query_empty_message, empty_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: message DEKLARATION: void message(string player, string others) BESCHREIBUNG: message nimmt die Meldungen fuer den Spieler und fuer die Umstehenden, bricht sie um und gibt sie aus. Ist der Spieler unsichtbar oder die Meldung fuer die Umstehenden leer, so wird sie unterdrueckt. VERWEISE: GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: parse_error DEKLARATION: varargs int parse_error(mixed *parsed, string error[, mixed only_one]) BESCHREIBUNG: parse_error ist eine Kopie von parse_com_error, die ihre Meldungen mit write anstatt notify_fail ausgibt, damit die Befehlsbehandlung mit return 1 abgeschlossen werden kann. VERWEISE: parse_com_error, parse_com GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: drink_action DEKLARATION: int drink_action() BESCHREIBUNG: drink_action enthaelt die eigentliche Funktionalitaet fuer das Trinken. Zuerst wird ueberprueft ob die Flasche etwas enthaelt, wenn ja, dann wird drink_action im Wasser-Objekt aufgerufen. Diese Funktion liefert 1 zurueck, wenn sie sich fuer zustaendig befand und entsprechende (Erfolgs- oder auch Misserfolgs-)Meldungen ausgegeben hat. Ansonsten (im notify_fail-Falle) wird 0 zurueckgeliefert. VERWEISE: drink_command, drink_action (wasser), set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: notify_bottle_empty DEKLARATION: void notify_bottle_empty(object bottle, int how) BESCHREIBUNG: Nachdem die Flasche bottle durch Trinken (how=0) oder Ausschuetten (how=1) entleert wurde, wird bottle->notify("bottle_empty",bottle,how) aufgerufen. Die Funktion notify ruft in allen mit bottle->add_controller( "notify_bottle_empty", other) angemeldeten Objekten other die Funktionen other->notify_bottle_empty(bottle,how) auf. Sowohl bottle als auch other haben dann eine Moeglichkeit, darauf zu reagieren. VERWEISE: notify, notify_bottle_full, notify_drink_water GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: drink_command DEKLARATION: int drink_command(string s) BESCHREIBUNG: drink_command ist der Parser fuer die Trinkbefehle. Er akzeptiert trinke wasser trinke aus flasche trinke wasser aus flasche Wird einer davon erkannt, wird drink_action aufgerufen, wo das eigentliche Trinken behandelt wird. VERWEISE: drink_action GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: fill_from_object DEKLARATION: int fill_from_object(object well) BESCHREIBUNG: fill_from_object wird von fill_command mit dem Brunnen aufgerufen, an dem die Flasche gefuellt werden soll. Zuerst wird geprueft, ob die Flasche leer ist. Danach wird beim Brunnen mit get_water der maximale Flascheninhalt angefordert. Wird die Anforderung oder ein Teil davon erfuellt, wird das vom Brunnen erhaltene Wasser-Objekt angemeldet, der Inhalt gesetzt und schliesslich die Meldungen fuer das Fuellen der Flasche ausgegeben. Wird die Anforderung vom Brunnen nicht erfuellt, bleibt alles unveraendert. Es ist dann Aufgabe des Brunnens, entsprechende Meldungen auszugeben. Anhand des Rueckgabewertes von fill_from_object entscheidet fill_command dann, ob der Befehl akzeptiert (!= 0) oder weitergereicht (== 0) werden soll. VERWEISE: get_water (brunnen), set_water, set_content, fill_from_vitem, fill_command, query_fill_message, query_other_fill_message GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: fill_from_vitem DEKLARATION: int fill_from_vitem(mapping well_mapping, mapping water_mapping) BESCHREIBUNG: fill_from_vitem wird von fill_command mit zwei Mappings, einem fuer den Brunnen und eines fuer das Wasser, aufgerufen, an denen die Flasche gefuellt werden soll. Der Brunnen kann auch fehlen, dann ist well_mapping gleich 0. Zuerst wird geprueft, ob die Flasche leer ist. Kann an dem Vitem oder den Vitems keine Flasche gefuellt werden und ist ein Grund angegeben, dann wird er dem Spieler mitgeteilt. Ansonsten wird je nachdem, ob im Mapping fuer das Wasser ein Virus angegeben ist ein Gift-Objekt geklont und die Virus_Informationen dort dort eingetragen oder ein normales Wasser-Objekt geklont. Falls ein "water_file"-Eintrag besteht, wird dieses geclont. Anschliessend werden in das geklonte Objekt die Eigenschaften des Wassers aus dem Vitem uebernommen, das Objekt wird angemeldet und der Inhalt gleich dem maximalen Inhalt gesetzt. Anhand des Rueckgabewertes von fill_from_object entscheidet fill_command dann, ob der Befehl akzeptiert (!= 0) oder weitergereicht (== 0) werden soll. VERWEISE: set_water, set_content, fill_from_object, fill_command, query_no_fill_reason, query_fill_message, query_other_fill_message GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: notify_bottle_full DEKLARATION: void notify_bottle_full(object bottle, mixed well[, mapping water]) BESCHREIBUNG: Nachdem die Flasche bottle mit Wasser water aus einem Brunnen well aufgefuellt wurde, wird bottle->notify("bottle_full",bottle,well,water) aufgerufen. Der Brunnen well ist entweder ein Objekt, ein Mapping oder 0. Wenn es ein Mapping oder 0 ist, wird als 3. Parameter das Wasser water als Mapping uebergeben. Ansonsten ist water=0. Die Funktion notify ruft in allen mit bottle->add_controller( "notify_bottle_full", other) angemeldeten Objekten other die Funktion other->notify_bottle_full(bottle,well,water) auf. Sowohl bottle als auch other haben dann eine Moeglichkeit, darauf zu reagieren. VERWEISE: notify, notify_bottle_empty GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: forbidden_fill_water DEKLARATION: string* forbidden_fill_water(object flasche, mixed brunnen, mixed wasser, object wer) BESCHREIBUNG: Bevor das Lebewesen 'wer' die 'Flasche' mit dem 'Wasser' des 'Brunnen's fuellen darf, wird wer->forbidden("fill_water", flasche, brunnen, wasser, wer) aufgerufen. Dabei ist der Brunnen entweder ein Objekt, ein Mapping oder 0. Das Wasser ist ein Objekt (genau dann, wenn der Brunnen auch ein Objekt ist) oder ein Mapping (wenn der Brunnen ebenfalls ein Mapping oder 0 ist). Die Funktion forbidden ruft dann in allen mit wer->add_controller( "forbidden_fill_water", other) angemeldeten Objekten other die Funktion other->forbidden_fill_water(flasche, brunnen, wasser, wer) auf. Liefert diese Funktion einen Wert ungleich 0 zurueck, so wird das Fuellen verboten. Der Rueckgabewert der Funktion sollte ein Array ({ "Meldung fuer 'wer'", "Meldung fuer alle Umstehenden" }) sein, welches dann automatisch umgebrochen und ausgegeben wird. VERWEISE: forbidden, forbidden_fill_water_self, forbidden_fill_water_well, forbidden_fill_water_bottle, notify_bottle_full, notify_bottle_empty GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: forbidden_fill_water_well DEKLARATION: string* forbidden_fill_water_well(object flasche, mixed brunnen, mixed wasser, object wer) BESCHREIBUNG: Bevor das Lebewesen 'wer' die 'Flasche' mit dem 'Wasser' des 'Brunnen's fuellen darf, wird, sofern ein Brunnen vorhanden ist, entweder - wenn der Brunnen ein Objekt ist, brunnen->forbidden("fill_water_well", flasche, brunnen, wasser, wer) oder - wenn der Brunnen ein V-Item ist, raum->forbidden("fill_water_well", flasche, brunnen, wasser, wer). wobei 'raum' der Raum mit diesem V-Item ist, aufgerufen. Das Wasser ist ein Objekt (genau dann, wenn der Brunnen auch ein Objekt ist) oder ein Mapping (wenn der Brunnen ebenfalls ein Mapping ist). Die Funktion forbidden ruft dann in allen mit brunnen/raum->add_controller( "forbidden_fill_water_well", other) angemeldeten Objekten other die Funktion other->forbidden_fill_water_well(flasche, brunnen, wasser, wer) auf. Liefert diese Funktion einen Wert ungleich 0 zurueck, so wird das Fuellen verboten. Der Rueckgabewert der Funktion sollte ein Array ({ "Meldung fuer 'wer'", "Meldung fuer alle Umstehenden" }) sein, welches dann automatisch umgebrochen und ausgegeben wird. VERWEISE: forbidden, forbidden_fill_water, forbidden_fill_water_self, forbidden_fill_water_bottle, notify_bottle_full, notify_bottle_empty GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: forbidden_fill_water_self DEKLARATION: string* forbidden_fill_water_self(object flasche, mixed brunnen, mixed wasser, object wer) BESCHREIBUNG: Bevor das Lebewesen 'wer' die 'Flasche' mit dem 'Wasser' des 'Brunnen's fuellen darf, wird entweder - wenn der Brunnen und das Wasser Objekte sind, wasser->forbidden("fill_water_self", flasche, brunnen, wasser, wer) oder - wenn das Wasser ein V-Item ist (und daher der Brunnen auch ein V-Item oder 0 ist) raum->forbidden("fill_water_self", flasche, brunnen, wasser, wer). wobei 'raum' der Raum mit diesem V-Item ist, aufgerufen. Die Funktion forbidden ruft dann in allen mit wasser/raum->add_controller( "forbidden_fill_water_self", other) angemeldeten Objekten other die Funktion other->forbidden_fill_water_self(flasche, brunnen, wasser, wer) auf. Liefert diese Funktion einen Wert ungleich 0 zurueck, so wird das Fuellen verboten. Der Rueckgabewert der Funktion sollte ein Array ({ "Meldung fuer 'wer'", "Meldung fuer alle Umstehenden" }) sein, welches dann automatisch umgebrochen und ausgegeben wird. VERWEISE: forbidden, forbidden_fill_water, forbidden_fill_water_well, forbidden_fill_water_bottle, notify_bottle_full, notify_bottle_empty GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: forbidden_fill_water_bottle DEKLARATION: string* forbidden_fill_water_bottle(object flasche, mixed brunnen, mixed wasser, object wer) BESCHREIBUNG: Bevor das Lebewesen 'wer' die 'Flasche' mit dem 'Wasser' des 'Brunnen's fuellen darf, wird flasche->forbidden("fill_water_bottle", flasche, brunnen, wasser, wer) aufgerufen. Dabei ist der Brunnen entweder ein Objekt, ein Mapping oder 0. Das Wasser ist ein Objekt (genau dann, wenn der Brunnen auch ein Objekt ist) oder ein Mapping (wenn der Brunnen ebenfalls ein Mapping oder 0 ist). Die Funktion forbidden ruft dann in allen mit flasche->add_controller( "forbidden_fill_water_bottle", other) angemeldeten Objekten other die Funktion other->forbidden_fill_water_bottle(flasche, brunnen, wasser, wer) auf. Liefert diese Funktion einen Wert ungleich 0 zurueck, so wird das Fuellen verboten. Der Rueckgabewert der Funktion sollte ein Array ({ "Meldung fuer 'wer'", "Meldung fuer alle Umstehenden" }) sein, welches dann automatisch umgebrochen und ausgegeben wird. VERWEISE: forbidden, forbidden_fill_water, forbidden_fill_water_self, forbidden_fill_water_well, notify_bottle_full, notify_bottle_empty GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: fill_command DEKLARATION: int fill_command(string s) BESCHREIBUNG: fill_command ist der Parser fuer die Fuellbefehle. Er akzeptiert fuelle flasche fuelle flasche an/am brunnen fuelle flasche an/am brunnen mit wasser fuelle flasche mit wasser fuelle flasche mit wasser aus brunnen Sind Wasser und / oder Brunnen nicht angegeben oder nicht eindeutig, wird der Spieler und seine Umgebung nach passenden Objekten oder Vitems durchsucht. Je nachdem, ob die Flasche an Objekten oder Vitems gefuellt werden soll, wird fill_from_object oder fill_from_vitem aufgerufen. Anhand des Rueckgabe- wertes dieser Funktionen wird entschieden, ob der Befehl akzeptiert oder weitergereicht werden soll. VERWEISE: fill_from_object, fill_from_vitem GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: empty_action DEKLARATION: int empty_action() BESCHREIBUNG: empty_action wird von empty_command, vacate_command und pour_command zum Leeren der Flasche aufgerufen. Zuerst wird geprueft, ob die Flasche nicht bereits leer ist. Danach wird der Inhalt auf 0 gesetzt und die Meldungen fuer das Leeren ausgegeben. Anhand des Rueckgabewertes von fill_from_object entscheiden die aufrufenden Funktionen dann, ob der Befehl akzeptiert (!= 0) oder weitergereicht (== 0) werden soll. VERWEISE: set_content, empty_command, vacate_command, pour_command, query_empty_message, query_other_empty_message GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: empty_command DEKLARATION: int empty_command(string s) BESCHREIBUNG: empty_command ist einer der drei Parser fuer die Befehle zum Leeren der Flasche. Er akzeptiert leere flasche leere flasche aus leere wasser weg leere wasser aus Wird einer davon erkannt, wird empty_action aufgerufen, wo die Flasche geleert wird. Anhand des Rueckgabewertes von empty_action wird dann entschieden, ob der Befehl akzeptiert oder weitergereicht werden soll. VERWEISE: empty_action, vacate_command, pour_command, query_empty_message, query_other_empty_message GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: vacate_command DEKLARATION: int vacate_command(string s) BESCHREIBUNG: vacate_command ist einer der drei Parser fuer die Befehle zum Leeren der Flasche. Er akzeptiert entleere Flasche Wird der Befehl erkannt, wird empty_action aufgerufen, wo die Flasche geleert wird. Anhand des Rueckgabewertes von empty_action wird dann entschieden, ob der Befehl akzeptiert oder weitergereicht werden soll. VERWEISE: empty_action, empty_command, pour_command, query_empty_message, query_other_empty_message GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: pour_command DEKLARATION: int pour_command(string s) BESCHREIBUNG: pour_command ist einer der drei Parser fuer die Befehle zum Leeren der Flasche. Er akzeptiert schuette wasser weg schuette wasser aus Wird einer davon erkannt, wird empty_action aufgerufen, wo die Flasche geleert wird. Anhand des Rueckgabewertes von empty_action wird dann entschieden, ob der Befehl akzeptiert oder weitergereicht werden soll. VERWEISE: empty_action, empty_command, vacate_command, query_empty_message, query_other_empty_message GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: is_bottle DEKLARATION: int is_bottle() BESCHREIBUNG: Flaschen antworten darauf mit 1. VERWEISE: is_water (wasser), is_well (brunnen) GRUPPEN: wasser SOURCE: /i/wasser/flasche.c FUNKTION: query_success_message DEKLARATION: string query_success_message(mapping well, mapping water, int infected) BESCHREIBUNG: query_success_message setzt die Meldung fuer den Spieler aus dem Teil des Brunnens (sofern das Wasser nicht einzeln ist und dem Teil des Wassers zusammen, wenn er trinkt. Enthaelt infected einen Wert ungleich 0 und ist fuer das Wasser ein Virus angegeben, wird zusaetzlich noch eine Infektions- Meldung ans Ende angehaengt. Ist eine der Meldungen in den Vitems nicht angegeben, werden Default-Meldungen verwendet. VERWEISE: query_other_success_message, query_failure_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/fluss.c FUNKTION: query_other_success_message DEKLARATION: string query_other_success_message(mapping well, mapping water, int infected) BESCHREIBUNG: query_other_success_message setzt die Meldung fuer die Umstehenden aus dem Teil des Brunnens (sofern das Wasser nicht einzeln ist und dem Teil des Wassers zusammen, wenn ein Spieler trinkt. Enthaelt infected einen Wert ungleich 0 und ist fuer das Wasser ein Virus angegeben, wird zusaetzlich noch eine Infektions- Meldung ans Ende angehaengt. Ist eine der Meldungen in den Vitems nicht angegeben, werden Default-Meldungen verwendet. VERWEISE: query_success_message, query_failure_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/fluss.c FUNKTION: query_failure_message DEKLARATION: string query_failure_message(mapping well, mapping water) BESCHREIBUNG: query_failure_message setzt die Meldung fuer den Spieler aus dem Teil des Brunnens (sofern das Wasser nicht einzeln ist und dem Teil des Wassers zusammen, wenn er etwas nicht trinken kann (zuviel Wasserpunkte oder zuviel Alkoholpunkte). Ist eine der Meldungen in den Vitems nicht angegeben, werden Default-Meldungen verwendet. VERWEISE: query_success_message, query_other_success_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/fluss.c FUNKTION: query_other_failure_message DEKLARATION: string query_other_failure_message(mapping well, mapping water) BESCHREIBUNG: query_other_failure_message setzt die Meldung fuer die Umstehenden aus dem Teil des Brunnens (sofern das Wasser nicht einzeln ist und dem Teil des Wassers zusammen, wenn ein Spieler etwas nicht trinken kann (zuviel Wasserpunkte oder zuviel Alkoholpunkte). Ist eine der Meldungen in den Vitems nicht angegeben, werden Default-Meldungen verwendet. VERWEISE: query_success_message, query_other_success_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/fluss.c FUNKTION: query_no_drink_reason DEKLARATION: string query_no_drink_reason(mapping well, mapping water) BESCHREIBUNG: query_no_drink_reason liefert zu den Vitems fuer ein Paar von Brunnen und Wasser oder einzelnes Wasser/einzelne Brunnen den Grund zurueck, warum davon nicht getrunken werden kann. In den Closures der Vitems fuer Brunnen steht der Bezeichner water fuer das Wasser im Brunnen. VERWEISE: query_no_fill_reason (flasche) GRUPPEN: wasser SOURCE: /i/wasser/fluss.c FUNKTION: heal_player DEKLARATION: void heal_player(int amount) BESCHREIBUNG: heal_player fuellt mit der angegebenen Punktzahl zuerst die HPs, dann die SPs von this_player() auf. VERWEISE: GRUPPEN: wasser SOURCE: /i/wasser/fluss.c FUNKTION: drink_action DEKLARATION: void drink_action(mapping well, mapping water) BESCHREIBUNG: Die Funktion wird beim Trinken von drink_command aufgerufen. Sie ist fuer die Auswirkungen des Wassers (Heilung, Erhoehen der Wasserpunkte und des Alkoholgehalts, ...) verantwortlich. Kann der Spieler das Wasser trinken, werden die entsprechenden Werte aktualisiert, evtl. wird der Spieler mit einem Virus infiziert, eine Erfolgsmeldung wird ausgegeben und ein Wert ungleich 0 zurueck gegeben. Kann der Spieler das Wasser nicht trinken, wird eine entsprechende Fehlermeldung ausgegeben. Diese Funktion liefert 1 zurueck, wenn sie sich fuer zustaendig befand und entsprechende (Erfolgs- oder auch Misserfolgs-)Meldungen ausgegeben hat. Ansonsten (im notify_fail-Falle) wird 0 zurueckgeliefert. VERWEISE: drink_command GRUPPEN: wasser SOURCE: /i/wasser/fluss.c FUNKTION: drink_command DEKLARATION: int drink_command(string s) BESCHREIBUNG: drink_command ist der Parser fuer die Trinkbefehle. Er akzeptiert trinke wasser trinke aus brunnen trinke wasser aus brunnen Wird einer davon erkannt und kann man von den entsprechenden Vitems trinken, so wird mit ihnen drink_action aufgerufen. Geht das Trinken nicht, wird mit query_no_drink_reason der Grund ermittelt und dem Spieler mitgeteilt. VERWEISE: drink_action, query_no_drink_reason GRUPPEN: wasser SOURCE: /i/wasser/fluss.c FUNKTION: set_virus_infection_chance DEKLARATION: void set_virus_infection_chance(int chance) BESCHREIBUNG: Setzt die Wahrscheinlichkeit, mit der ein Spieler beim Trinken des Giftes mit dem Virus infiziert wird. VERWEISE: query_virus_infection_chance, set_virus_chance (virus), query_virus_chance (virus), set_virus_infection_message, set_virus_other_infection_message, query_virus_infection_message, query_other_virus_infection_message GRUPPEN: wasser SOURCE: /i/wasser/gift.c FUNKTION: query_virus_infection_chance DEKLARATION: int query_virus_infection_chance() BESCHREIBUNG: Liefert die Wahrscheinlichkeit, mit der ein Spieler beim Trinken des Giftes mit dem Virus infiziert wird. VERWEISE: set_virus_infection_chance, set_virus_chance (virus), query_virus_chance (virus), set_virus_infection_message, set_virus_other_infection_message, query_virus_infection_message, query_virus_other_infection_message GRUPPEN: wasser SOURCE: /i/wasser/gift.c FUNKTION: set_virus_infection_message DEKLARATION: void set_virus_infection_message(mixed s) BESCHREIBUNG: Wird ein Spieler beim Trinken des Giftes durch den Virus infiziert, so wird die Trinkmeldung entsprechend erweitert. set_virus_infection_message legt diese Erweiterung fest. Die Meldung kann eine Pseudoclosure oder Closure sein, die Default-Meldung ist ein Leerstring. Da sie an die Trinkmeldung angehaengt wird, sollte diese mit einem Leerzeichen enden. VERWEISE: set_virus_infection_chance, query_virus_infection_chance, set_virus_chance (virus), query_virus_chance (virus), set_virus_other_infection_message, query_virus_infection_message, query_virus_other_infection_message, set_success_message, set_other_success_message, query_success_message, query_other_success_message GRUPPEN: wasser SOURCE: /i/wasser/gift.c FUNKTION: set_virus_other_infection_message DEKLARATION: void set_virus_other_infection_message(mixed s) BESCHREIBUNG: Wird ein Spieler beim Trinken des Giftes durch den Virus infiziert, so wird die Trinkmeldung fuer die Umstehenden entsprechend erweitert. set_virus_other_infection_message legt diese Erweiterung fest. Die Meldung kann eine Pseudoclosure oder Closure sein, die Default-Meldung ist ein Leerstring. Da sie an die Trinkmeldung angehaengt wird, sollte diese mit einem Leerzeichen enden. VERWEISE: set_virus_infection_chance, query_virus_infection_chance, set_virus_chance (virus), query_virus_chance (virus), set_virus_infection_message, query_virus_infection_message, query_virus_other_infection_message, set_success_message, set_other_success_message, query_success_message, query_other_success_message GRUPPEN: wasser SOURCE: /i/wasser/gift.c FUNKTION: query_virus_infection_message DEKLARATION: string query_virus_infection_message() BESCHREIBUNG: query_virus_infection_message liefert die Erweiterung der Trinkmeldung fuer den Spieler zurueck, wenn er durch den Virus infiziert wurde. VERWEISE: set_virus_infection_chance, query_virus_infection_chance, set_virus_chance (virus), query_virus_chance (virus), set_virus_infection_message, set_virus_other_infection_message, query_other_virus_infection_message, set_success_message, set_other_success_message, query_success_message, query_other_success_message GRUPPEN: wasser SOURCE: /i/wasser/gift.c FUNKTION: query_virus_other_infection_message DEKLARATION: string query_virus_other_infection_message() BESCHREIBUNG: query_virus_other_infection_message liefert die Erweiterung der Trinkmeldung fuer die Umstehenden zurueck, wenn ein Spieler durch den Virus infiziert wurde. VERWEISE: set_virus_infection_chance, query_virus_infection_chance, set_virus_chance (virus), query_virus_chance (virus), set_virus_infection_message, set_virus_other_infection_message, query_virus_infection_message, set_success_message, set_other_success_message, query_success_message, query_other_success_message GRUPPEN: wasser SOURCE: /i/wasser/gift.c FUNKTION: set_healing DEKLARATION: void set_healing(int n) BESCHREIBUNG: Setzt die einmalige Heilung des Wassers pro Schluck. VERWEISE: set_strength, set_amount, query_healing, query_strength, query_amount GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: set_strength DEKLARATION: void set_strength(int n) BESCHREIBUNG: Setzt den Alkoholgehalt des Wassers pro Schluck. VERWEISE: set_healing, set_amount, query_healing, query_strength, query_amount GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: set_amount DEKLARATION: void set_amount(int n) BESCHREIBUNG: Setzt die Anzahl der Wasserpunkte des Wassers pro Schluck. VERWEISE: set_healing, set_strength, query_healing, query_strength, query_amount GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: query_healing DEKLARATION: int query_healing() BESCHREIBUNG: Liefert die einmalige Heilung des Wassers pro Schluck. VERWEISE: set_healing, set_strength, set_amount, query_strength, query_amount GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: query_strength DEKLARATION: int query_strength() BESCHREIBUNG: Liefert den Alkoholgehalt des Wassers pro Schluck. VERWEISE: set_healing, set_strength, set_amount, query_healing, query_amount GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: query_amount DEKLARATION: int query_amount() BESCHREIBUNG: Liefert die Anzahl der Wasserpunkte des Wassers pro Schluck. VERWEISE: set_healing, set_strength, set_amount, query_healing, query_strength GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: set_success_message DEKLARATION: void set_success_message(mixed s) BESCHREIBUNG: Setzt die Meldung, die der Spieler bekommt, wenn er das Wasser trinken konnte. VERWEISE: set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: set_other_success_message DEKLARATION: void set_other_success_message(mixed s) BESCHREIBUNG: Setzt die Meldung, die Umstehende bekommen, wenn der Spieler das Wasser trinken konnte. VERWEISE: set_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: set_failure_message DEKLARATION: void set_failure_message(mixed s) BESCHREIBUNG: Setzt die Meldung, die der Spieler bekommt, wenn er das Wasser nicht (zu viele Wasserpunkte oder Alkohol) trinken konnte. VERWEISE: set_success_message, set_other_success_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: set_other_failure_message DEKLARATION: void set_other_failure_message(mixed s) BESCHREIBUNG: Setzt die Meldung, die Umstehende bekommen, wenn der Spieler das Wasser nicht (zu viele Wasserpunkte oder Alkohol) trinken konnte. VERWEISE: set_success_message, set_other_success_message, set_failure_message, query_success_message, query_other_success_message, query_failure_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: query_success_message DEKLARATION: string query_success_message() BESCHREIBUNG: Nachdem ein Spieler das Wasser getrunken hat, erhaelt er eine Meldung die aus einem Teil vom Wasser und einem Teil vom Brunnen oder der Flasche zusammen- gesetzt wird. query_success_message liefert den Teil des Wassers zurueck, der an den Teil der Flasche oder des Brunnens angehaengt wird. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_other_success_message, query_failure_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: query_other_success_message DEKLARATION: string query_other_success_message() BESCHREIBUNG: Nachdem ein Spieler das Wasser getrunken hat, erhalten die Umstehenden eine Meldung die aus einem Teil vom Wasser und einem Teil vom Brunnen oder der Flasche zusammengesetzt wird. query_other_success_message liefert den Teil des Wassers zurueck, der an den Teil der Flasche oder des Brunnens angehaengt wird. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_failure_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: query_failure_message DEKLARATION: string query_failure_message() BESCHREIBUNG: Wenn ein Spieler das Wasser nicht trinken kann (zuviele Wasserpunkte oder zuviele Alkoholpunkte) erhaelt er eine Meldung, die aus einem Teil vom Wasser und einem Teil vom Brunnen oder der Flasche zusammengesetzt wird. query_failure_message liefert den Teil des Wasser zurueck, der an den Teil der Flasche oder des Brunnens angehaengt wird. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_other_failure_message GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: query_other_failure_message DEKLARATION: string query_other_failure_message() BESCHREIBUNG: Wenn ein Spieler das Wasser nicht trinken kann (zuviele Wasserpunkte oder zuviele Alkoholpunkte) erhalten die Umstehenden eine Meldung, die aus einem Teil vom Wasser und einem Teil vom Brunnen oder der Flasche zusammengesetzt wird. query_other_failure_message liefert den Teil des Wasser zurueck, der an den den Teil der Flasche oder des Brunnens angehaengt wird. VERWEISE: set_success_message, set_other_success_message, set_failure_message, set_other_failure_message, query_success_message, query_other_success_message, query_failure_message GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: heal_player DEKLARATION: void heal_player(int amount) BESCHREIBUNG: heal_player fuellt mit der angegebenen Punktzahl zuerst die HPs, dann die SPs von this_player() auf. VERWEISE: GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: drink_action DEKLARATION: int drink_action() BESCHREIBUNG: Die Funktion wird beim Trinken von drink_action in der Flasche oder dem Brunnen aufgerufen. Sie ist fuer die Auswirkungen des Wassers (Heilung, Erhoehen der Wasserpunkte und des Alkoholgehalts, ...) verantwortlich. Kann der Spieler das Wasser trinken, werden die entsprechenden Werte aktualisiert. Ansonsten wird eine Fehlermeldung ausgegeben. Diese Funktion liefert 1 zurueck, wenn sie sich fuer zustaendig befand und entsprechende (Erfolgs- oder auch Misserfolgs-)Meldungen ausgegeben hat. Ansonsten (im notify_fail-Falle) wird 0 zurueckgeliefert. VERWEISE: drink_action (brunnen, flasche) GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: is_water DEKLARATION: int is_water() BESCHREIBUNG: Wasser antwortet darauf mit 1. VERWEISE: is_bottle (flasche), is_well (brunnen) GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: notify_drink_water DEKLARATION: void notify_drink_water(mixed water, mixed well, object who) BESCHREIBUNG: Nachdem ein Lebewesen who Wasser water aus einem Brunnen well getrunken hat, wird who->notify("drink_water", water, well, who) aufgerufen. water ist entweder das Wasserobjekt oder ein Mapping, welches das Wasser beschreibt (siehe /i/wasser/fluss). Entsprechend ist well entweder das Objekt, welches das Wasserobjekt beinhaltet, ein Mapping, welches den Brunnen beschreibt, welcher das Wasser (beschrieben durch das Mapping water) beinhaltet, oder 0, wenn das Mapping water keinen Brunnen besitzt. Die Funktion notify ruft in allen mit who->add_controller("notify_drink_water", other) angemeldeten Objekten other die Funktion other->notify_drink_water( water, well, who) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf den Genuss des Wassers water durch das Lebewesen who zu reagieren. VERWEISE: notify, notify_drink_water_well, notify_drink_water_self GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: notify_drink_water_well DEKLARATION: void notify_drink_water_well(mixed water, mixed well, object who) BESCHREIBUNG: Nachdem ein Lebewesen who Wasser water aus einem Brunnen well getrunken hat, wird well->notify("drink_water_well", water, well, who) bzw. room->notify("drink_water_well", water, well, who), wenn well ein V-Item im Raum room ist, aufgerufen. water ist entweder das Wasserobjekt oder ein Mapping, welches das Wasser beschreibt (siehe /i/wasser/fluss). Entsprechend ist well entweder das Objekt, welches das Wasserobjekt beinhaltet, oder ein Mapping, welches den Brunnen beschreibt, welcher das Wasser (beschrieben durch das Mapping water) beinhaltet. Die Funktion notify ruft in allen mit who->add_controller( "notify_drink_water_well", other) angemeldeten Objekten other die Funktion other->notify_drink_water_well(water, well, who) auf. Sowohl well bzw. room als auch other haben dann eine Moeglichkeit, auf den Genuss des Wassers water durch das Lebewesen who zu reagieren. VERWEISE: notify, notify_drink_water, notify_drink_water_self GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: notify_drink_water_self DEKLARATION: void notify_drink_water_self(mixed water, mixed well, object who) BESCHREIBUNG: Nachdem ein Lebewesen who Wasser water aus einem Brunnen well getrunken hat, wird water->notify("drink_water_self", water, well, who) bzw. room->notify("drink_water_self", water, well, who), wenn water ein V-Item im Raum room ist, aufgerufen. water ist entweder das Wasserobjekt oder ein Mapping, welches das Wasser beschreibt (siehe /i/wasser/fluss). Entsprechend ist well entweder das Objekt, welches das Wasserobjekt beinhaltet, ein Mapping, welches den Brunnen beschreibt, welcher das Wasser (beschrieben durch das Mapping water) beinhaltet, oder 0, falls das Mapping water keinen Brunnen besitzt. Die Funktion notify ruft in allen mit who->add_controller( "notify_drink_water_self", other) angemeldeten Objekten other die Funktion other->notify_drink_water_self(water, well, who) auf. Sowohl water bzw. room als auch other haben dann eine Moeglichkeit, auf den Genuss des Wassers water durch das Lebewesen who zu reagieren. VERWEISE: notify, notify_drink_water, notify_drink_water_well GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: forbidden_drink_water DEKLARATION: string* forbidden_drink_water(mixed water, mixed well, object who) BESCHREIBUNG: Bevor ein Lebewesen who Wasser water aus einem Brunnen well trinken kann, wird who->forbidden("drink_water", water, well, who) aufgerufen. water ist entweder das Wasserobjekt oder ein Mapping, welches das Wasser beschreibt (siehe /i/wasser/fluss). Entsprechend ist well entweder das Objekt, welches das Wasserobjekt beinhaltet, ein Mapping, welches den Brunnen beschreibt, welcher das Wasser (beschrieben durch das Mapping water) beinhaltet, oder 0, wenn das Mapping water keinen Brunnen besitzt. Die Funktion forbidden ruft in allen mit who->add_controller( "forbidden_drink_water", other) angemeldeten Objekten other die Funktion other->forbidden_drink_water(water, well, who) auf. Liefert diese Funktion einen Wert ungleich 0 zurueck, so wird das Trinken verboten. Der Rueckgabewert der Funktion sollte ein Array ({ "Meldung fuer 'wer'", "Meldung fuer alle Umstehenden" }) sein, welches dann automatisch umgebrochen und ausgegeben wird. Keine Pseudoclosures! VERWEISE: forbidden, forbidden_drink_water_well, forbidden_drink_water_self GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: forbidden_drink_water_well DEKLARATION: string* forbidden_drink_water_well(mixed water, mixed well, object who) BESCHREIBUNG: Bevor ein Lebewesen who Wasser water aus einem Brunnen well trinken kann, wird well->forbidden("drink_water_well", water, well, who) bzw. room->forbidden("drink_water_well", water, well, who), wenn well ein V-Item im Raum room ist, aufgerufen. water ist entweder das Wasserobjekt oder ein Mapping, welches das Wasser beschreibt (siehe /i/wasser/fluss). Entsprechend ist well entweder das Objekt, welches das Wasserobjekt beinhaltet, oder ein Mapping, welches den Brunnen beschreibt, welcher das Wasser (beschrieben durch das Mapping water) beinhaltet. Die Funktion forbidden ruft in allen mit who->add_controller( "forbidden_drink_water_well", other) angemeldeten Objekten other die Funktion other->forbidden_drink_water_well(water, well, who) auf. Liefert diese Funktion einen Wert ungleich 0 zurueck, so wird das Trinken verboten. Der Rueckgabewert der Funktion sollte ein Array ({ "Meldung fuer 'wer'", "Meldung fuer alle Umstehenden" }) sein, welches dann automatisch umgebrochen und ausgegeben wird. Keine Pseudoclosures! VERWEISE: forbidden, forbidden_drink_water, forbidden_drink_water_self GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: forbidden_drink_water_self DEKLARATION: string* forbidden_drink_water_self(mixed water, mixed well, object who) BESCHREIBUNG: Bevor ein Lebewesen who Wasser water aus einem Brunnen well trinken kann, wird water->forbidden("drink_water_self", water, well, who) bzw. room->forbidden("drink_water_self", water, well, who), wenn water ein V-Item im Raum room ist, aufgerufen. water ist entweder das Wasserobjekt oder ein Mapping, welches das Wasser beschreibt (siehe /i/wasser/fluss). Entsprechend ist well entweder das Objekt, welches das Wasserobjekt beinhaltet, ein Mapping, welches den Brunnen beschreibt, welcher das Wasser (beschrieben durch das Mapping water) beinhaltet, oder 0, falls das Mapping water keinen Brunnen besitzt. Die Funktion forbidden ruft in allen mit who->add_controller( "forbidden_drink_water_self", other) angemeldeten Objekten other die Funktion other->forbidden_drink_water_self(water, well, who) auf. Liefert diese Funktion einen Wert ungleich 0 zurueck, so wird das Trinken verboten. Der Rueckgabewert der Funktion sollte ein Array ({ "Meldung fuer 'wer'", "Meldung fuer alle Umstehenden" }) sein, welches dann automatisch umgebrochen und ausgegeben wird. Keine Pseudoclosures! VERWEISE: forbidden, forbidden_drink_water, forbidden_drink_water_well GRUPPEN: wasser SOURCE: /i/wasser/wasser.c FUNKTION: init_weapon DEKLARATION: init_weapon(string kategorie, int max_schaden_in_prozent, int min_schaden_in_prozent, int leben_in_prozent) BESCHREIBUNG: Setzt den Skillpfad, die Lebensdauer, Schlagkraft, das Gewicht und den Wert der Waffe aufgrund der Richtlinien. kategorie ist dabei der Waffentyp, also sowas wie "kurzschwert","messer","degen" usw. max_schaden_in_prozent gibt an, wie stark die Waffe bezueglich den Richtlinien sein soll. Ein Wert von 100 entspricht den Richtlinien, 200 dem Grenzwert. Von einem negativen Wert wird der absolute Wert genommen, wobei beachtet wird, dass die Waffe verkaufbar bleibt. min_schaden_in_prozent ist das Aequivalent fuer den Anfaengerschaden, leben_in_prozent fuer die Lebensdauer. Folgende Kategorien gibt es: Nahkampfwaffen Schusswaffen Wurfwaffen Defensivwaffen -------------- ------------ ---------- -------------- axt armbrust speer grossschild degen blasrohr wurfmesser kleinschild kurzschwert bogen keule schleuder langschwert messer peitsche saebel stock hand (wird als Handschuh initialisiert) Bei Schusswaffen werden zusaetzlich noch diese Pfeil- und Koecher-IDs gesetzt: Schusswaffe Pfeil-ID Koecher-ID ----------- ------------- ------------ armbrust bolzen bolzentasche blasrohr blasrohrpfeil - bogen pfeil koecher schleuder stein - VERWEISE: set_damage, set_life, set_value, set_skill_path, set_weight, set_pfeil_id, set_koecher_id, init_geschoss GRUPPEN: waffen SOURCE: /i/weapon/nahkampf_waffe.c FUNKTION: set_current_pfeil_id DEKLARATION: void set_current_pfeil_id(string str) BESCHREIBUNG: Wird von living/hands gestetzt, um spezifische Pfeile zu addressien. VERWEISE: query_current_pfeil_id GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: query_current_pfeil_id DEKLARATION: string query_current_pfeil_id() BESCHREIBUNG: Wird von living/hands gestetzt, um spezifische Pfeile zu addressien. VERWEISE: query_current_pfeil_id GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: set_reload_message DEKLARATION: void set_reload_message(string str) BESCHREIBUNG: Setzt die Meldung, wenn man beim Nachladen ist. Default ist "Jetzt musst du erst mal kurz nachladen." VERWEISE: set_reload_time GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: query_reload_message DEKLARATION: string query_reload_message() BESCHREIBUNG: Gibt die Meldung zurueck, wenn man beim Nachladen ist. Default ist "Jetzt musst du erst mal kurz nachladen." VERWEISE: set_reload_message GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: set_reload_time DEKLARATION: void set_reload_time(int i) BESCHREIBUNG: Setzt die Zeit fuers Nachladen. Default ist 1; VERWEISE: set_reload_message, query_reload_time GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: query_reload_time DEKLARATION: int query_reload_time() BESCHREIBUNG: Gibt die Zeit fuers Nachladen. VERWEISE: set_reload_message, set_reload_time GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: query_koecher_id DEKLARATION: string query_koecher_id() BESCHREIBUNG: Liefert die Id des zugehoerigen Koechers zurueck, falls vorhanden. VERWEISE: set_koecher_id, set_pfeil_id, query_pfeil_id GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: query_pfeil_id DEKLARATION: string query_pfeil_id() BESCHREIBUNG: Liefert die Id des Pfeils zurueck, falls vorhanden. VERWEISE: set_pfeil_id, set_koecher_id, query_koecher_id GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: query_schuss_messages DEKLARATION: closure *query_schuss_messages() BESCHREIBUNG: Liefert alle Closure-Eintraege der Schuss-Waffe als Array zurueck. VERWEISE: GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: set_koecher_id DEKLARATION: void set_koecher_id(string koecher_id) BESCHREIBUNG: Damit kann man bei Schusswaffen die id auf den Koecher setzen. Wenn eine koecher_id angegeben wird, kann man die Munition direkt aus dem Koecher entnehmen. Notfalls wird das Projektil aber auch aus dem Gepaeck genommen, wenn keine koecher_id angegeben wurde oder der Koecher leer ist. VERWEISE: set_pfeil_id GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: set_pfeil_id DEKLARATION: void set_pfeil_id(string pfeil_id) BESCHREIBUNG: Damit kann man bei Schusswaffen eine id auf die benoetigten Projektile setzen. Eine Schusswaffe funktioniert nur mit der passenden Munition . Wenn keine pfeil_id gesetzt wird, funktioniert die Waffe nicht. VERWEISE: set_koecher_id GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: set_no_arrow_message DEKLARATION: void set_no_arrow_message(mixed no_arrow_message) BESCHREIBUNG: Setzt die Meldung, wenn bei einer Schusswaffe die Munition ausgegangen ist. Default ist "Du hast keine Pfeile (mehr)!" VERWEISE: set_owner_message, set_enemy_message, set_others_message GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: set_owner_message DEKLARATION: void set_owner_message(mixed owner_message) BESCHREIBUNG: Setzt die Meldung, die man bei Schusswaffen beim Verschiessen des Projektils bekommt. Die Meldung wird automatisch gewrapt. Default ist "Du schiesst $einen('pfeil) auf $den('enemy)." VERWEISE: set_no_arrow_message, set_enemy_message, set_others_message GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: set_enemy_message DEKLARATION: void set_enemy_message (mixed enemy_message) BESCHREIBUNG: Setzt die Meldung, die der Gegener bei Schusswaffen beim Verschiessen des Projektils bekommt. Die Meldung wird automatisch gewrapt. Default ist "$Der('owner) schiesst mit $einem('pfeil) auf dich." VERWEISE: set_no_arrow_message, set_owner_message, set_others_message GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: set_others_message DEKLARATION: void set_others_message(mixed others_message) BESCHREIBUNG: Setzt die Meldung, die andere im Raum bei Schusswaffen beim Verschiessen des Projektils bekommen. Die Meldung wird automatisch gewrapt. Default ist "$Der('owner) schiesst $einen('pfeil) auf $den('enemy)." VERWEISE: set_no_arrow_message, set_owner_message, set_enemy_message GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: query_destroy_pfeil DEKLARATION: int query_destroy_pfeil() BESCHREIBUNG: Mit query_destroy_pfeil kann man abfragen, ob eine Schusswaffe den Pfeil zerstoert, oder ob der Pfeil nur abgenutzt wird. Bei 1 wird der Pfeil beim Schuss zerstoert, sonst nur abgenutzt. VERWEISE: set_destroy_pfeil GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: set_destroy_pfeil DEKLARATION: void set_destroy_pfeil(int flag) BESCHREIBUNG: Bei flag=1 zerstoert eine Schusswaffe ihr Projektil beim Schuss, bei flag=0 wird es nur abgenutzt. VERWEISE: query_destroy_pfeil GRUPPEN: waffen SOURCE: /i/weapon/schuss_waffe.c FUNKTION: present_pfeil DEKLARATION: varargs object present_pfeil(object lebewesen) BESCHREIBUNG: Schaut, ob sich in der Schusswaffe (!query_koecher_id()) ein Pfeil oder im angegebenen Lebewesen (query_koecher_id()) ein Koecher, der einen Pfeil enthaelt, oder ein Pfeil selber befindet. Der gefundene Pfeil wird zurueckgeliefert. Ist kein Objekt angegeben oder dieses 0, so wird dafuer die Umgebung der Waffe verwendet. Diese Funktion wird von do_schuss() in /i/weapon/schuss_waffe und get_weapon_check_object() in /i/living/hands verwendet, um passende Pfeile zu finden. VERWEISE: do_schuss, get_weapon_check_object GRUPPEN: waffen, kampf SOURCE: /i/weapon/schuss_waffe.c FUNKTION: set_wield_msg DEKLARATION: void set_wield_msg(mixed wield_msg) BESCHREIBUNG: Setzt die Meldung, die derjenige erhaelt, der die Waffe fuehrt. Die Meldung wird automatisch umgebrochen und kann auch eine Pseudeclosure sein. Weitere Informationen dazu gibt es in /doc/funktionsweisen/messages VERWEISE: query_wield_msg, set_wield_msg_other, set_unwield_msg, set_unwield_msg_other GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_wield_msg DEKLARATION: string query_wield_msg() BESCHREIBUNG: Liefert die Meldung, die derjenige erhaelt, der die Waffe fuehrt. VERWEISE: set_wield_msg, query_wield_msg_other, query_unwield_msg, query_unwield_msg_other GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: set_wield_msg_other DEKLARATION: void set_wield_msg_other(mixed wield_msg_other) BESCHREIBUNG: Setzt die Meldung, die alle anderen Anwesenden im Raum erhalten, wenn jemand die Waffe fuehrt. Die Meldung wird automatisch umgebrochen und kann auch eine Pseudeclosure sein. Weitere Informationen dazu gibt es in /doc/funktionsweisen/messages VERWEISE: query_wield_msg_other, set_wield_msg, set_unwield_msg, set_unwield_msg_other GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_wield_msg_other DEKLARATION: string query_wield_msg_other() BESCHREIBUNG: Liefert die Meldung, die alle anderen Anwesenden im Raum erhalten, wenn jemand die Waffe fuehrt. VERWEISE: set_wield_msg_other, query_wield_msg, query_unwield_msg, query_unwield_msg_other GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: set_unwield_msg DEKLARATION: void set_unwield_msg(mixed unwield_msg) BESCHREIBUNG: Setzt die Meldung, die derjenige erhaelt, der die Waffe senkt. Die Meldung wird automatisch umgebrochen und kann auch eine Pseudeclosure sein. Weitere Informationen dazu gibt es in /doc/funktionsweisen/messages VERWEISE: query_unwield_msg, set_wield_msg, set_wield_msg_other, set_unwield_msg_other GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_unwield_msg DEKLARATION: string query_unwield_msg() BESCHREIBUNG: Liefert die Meldung, die derjenige erhaelt, der die Waffe senkt. VERWEISE: set_unwield_msg, query_wield_msg, query_wield_msg_other, query_unwield_msg_other GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: set_unwield_msg_other DEKLARATION: void set_unwield_msg_other(mixed unwield_msg_other) BESCHREIBUNG: Setzt die Meldung, die alle anderen Anwesenden im Raum erhalten, wenn jemand die Waffe senkt. Die Meldung wird automatisch umgebrochen und kann auch eine Pseudeclosure sein. Weitere Informationen dazu gibt es in /doc/funktionsweisen/messages VERWEISE: query_unwield_msg_other, set_wield_msg, set_wield_msg_other, set_unwield_msg GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_unwield_msg_other DEKLARATION: string query_unwield_msg_other() BESCHREIBUNG: Liefert die Meldung, die alle anderen Anwesenden im Raum erhalten, wenn jemand die Waffe senkt. VERWEISE: set_unwield_msg_other, query_wield_msg, query_wield_msg_other, query_unwield_msg GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: set_broken_adjektiv DEKLARATION: void set_broken_adjektiv(string broken_adjektiv) BESCHREIBUNG: Dieses Adjektiv wird gesetzt, wenn die Waffe oder Ruestung beschaedigt wird. Standardmaessig wird "beschaedigt" gesetzt. VERWEISE: query_broken_adjektiv, query_broken, do_break, set_broken_message, query_broken_message GRUPPEN: waffen, ruestung, kampf SOURCE: /i/armour/armour.c, /i/weapon/weapon_logic.c FUNKTION: set_wield_adjektiv DEKLARATION: void set_wield_adjektiv(string wield_adjektiv) BESCHREIBUNG: Dieses Adjektiv wird gesetzt, wenn die Waffe gefuehrt wird. Standardmaessig wird "gefuehrt" gesetzt. VERWEISE: query_wield_adjektiv, query_wield, do_wield GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_broken_adjektiv DEKLARATION: string query_broken_adjektiv() BESCHREIBUNG: Liefert das Adjektiv, welches gesetzt wird, wenn die Waffe oder Ruestung beschaedigt wird. VERWEISE: query_broken_adjektiv, query_broken, do_break, set_broken_message, query_broken_message GRUPPEN: waffen, ruestung, kampf SOURCE: /i/armour/armour.c, /i/weapon/weapon_logic.c FUNKTION: query_wield_adjektiv DEKLARATION: mixed query_wield_adjektiv() BESCHREIBUNG: Liefert das Adjektiv, das gesetzt wird, wenn die Waffe gefuehrt wird. VERWEISE: set_wield_adjektiv, query_wield, do_wield GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_used_stats DEKLARATION: int *query_used_stats() BESCHREIBUNG: Liefert die Faehigkeiten (Staerke, Intelligenz, Ausdauer, Geschicklichkeit), die zur Benutzung dieser Waffe verwendet werden. VERWEISE: set_used_stats GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: set_weapon_class DEKLARATION: void set_weapon_class(string str) BESCHREIBUNG: Damit wird die Waffenklasse einer Waffe gesetzt. Von der Waffenklasse haengt die Behandlung der Waffe und deren Funktionalitaet ab. Erlaubte Werte sind: "nahkampf", "wurf", "schuss" und "defensiv". VERWEISE: query_weapon_class GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_weapon_class DEKLARATION: string query_weapon_class([string weapon_class]) BESCHREIBUNG: Liefert die Waffenklasse einer Waffe zurueck, oder 0, wenn das Objekt keine Waffe ist. Wird weapon_class als optionale Parameter mit angegeben, dann wird 0 zurueckgeliefert, wenn die Waffe nicht zur angegebenen Waffenklasse gehoert, sonst die Waffenklasse. VERWEISE: GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_wield DEKLARATION: int query_wield() BESCHREIBUNG: Liefert 1 zurueck, wenn die Waffe gefuehrt wird, sonst 0. VERWEISE: wield, do_wield GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: do_wield DEKLARATION: void do_wield() BESCHREIBUNG: Diese Funktion wird von wield() aufgerufen, wenn die Waffe gefuehrt wird. Diese Funktion ist nur zur mudlibinternen Verwendung gedacht. Damit ein Lebewesen eine Waffe fuehrt, muss lebewesen->wield(...) aufgerufen werden. VERWEISE: wield, query_wield GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: do_remove DEKLARATION: void do_remove() BESCHREIBUNG: Diese Funktion wird von unwield() (und einige anderen Funktionen des Lebewesens) aufgerufen, wenn die Waffe gesenkt wird. Diese Funktion ist nur zur mudlibinternen Verwendung gedacht. Damit ein Lebewesen eine Waffe senkt, muss lebewesen->unwield(...) aufgerufen werden. VERWEISE: unwield, query_wield GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: do_break DEKLARATION: void do_break() BESCHREIBUNG: Diese Funktion wird von add_life aufgerufen, wenn eine Waffe beschaedigt wurde. Sie sollte nicht von ausserhalb der Waffe aufgerufen werden. Wenn man eine Waffe zerstoeren will, dann sollte dies ueber add_life geschehen. Diese Funktion kann man ueberlagern, um noch irgendwelche Dinge bei der Zerstoerung der Waffe zu erledigen. VERWEISE: query_broken, set_broken_adjektiv, query_broken_adjektiv, set_broken_message, query_broken_message, notify_weapon_fail, notify_armour_fail, add_life GRUPPEN: waffen, ruestung, kampf SOURCE: /i/armour/armour.c, /i/weapon/weapon_logic.c FUNKTION: notify_weapon_fail DEKLARATION: void notify_weapon_fail(object weapon, string how) BESCHREIBUNG: Wenn die Waffe unbrauchbar wird, dann wird sowowhl in der Waffe selber als auch im environment ob der Waffe (also meistens im Lebewesen) weapon->notify("weapon_fail", weapon, how) bzw. ob->notify("weapon_fail", weapon, how) aufgerufen. Die Funktion notify ruft dann in allen mit ob->add_controller( "notify_weapon_fail", other) angemeldeten Objekten other die Funktion other->notify_weapon_fail(weapon, how) auf. Sowohl ob als auch other haben dann die Moeglichkeit darauf zu reagieren. Folgende Werte werden zur Zeit fuer how genutzt: "broken": Die Waffe wurde beschaedigt (siehe do_break und set_life). VERWEISE: do_break GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_repairable DEKLARATION: int query_repairable() BESCHREIBUNG: Testet, ob eine Waffe oder eine Ruestung repariert werden kann. VERWEISE: query_broken, query_repair_cost, do_repair GRUPPEN: waffen, ruestung, kampf SOURCE: /i/armour/armour.c, /i/weapon/weapon_logic.c FUNKTION: do_repair DEKLARATION: void do_repair(int percent) BESCHREIBUNG: Repariert eine Waffe oder eine Ruestung. Das maximale Leben wird auf 'percent' Prozent des bisherigen gesetzt. Das maximale Leben der Waffe wird reduziert, ihr Wert ist hinterher hoeher als der Wert der kaputten Waffe, aber niedriger als der Wert einer neuen Waffe. Erlaubte Werte fuer percent und die Kosten der Reparatur stehen in /doc/richtlinien/waffen/reparatur bzw. /doc/richtlinien/ruestungen/reparatur Zur Berechnung der Kosten sollte query_repair_cost genommen werden. VERWEISE: query_broken, query_repairable, query_repair_cost GRUPPEN: waffen, ruestung, kampf SOURCE: /i/armour/armour.c, /i/weapon/weapon_logic.c FUNKTION: query_repair_cost DEKLARATION: int query_repair_cost(int percent) BESCHREIBUNG: Lierfert zurueck, wieviel die Reparatur dieser Waffe kosten soll. Der zurueckgegebene Wert ist in der Standardwaehrung (Taler) angegeben, es muss daher noch eine Umrechnung in die "eigene" Waehrung erfolgen. percent gibt an, wieviel Prozent der Waffe repariert werden sollen. VERWEISE: query_broken, query_repairable, do_repair GRUPPEN: waffen, ruestung, kampf SOURCE: /i/armour/armour.c, /i/weapon/weapon_logic.c FUNKTION: set_damage DEKLARATION: void set_damage(int max_damage_beginner, int max_damage_expert) BESCHREIBUNG: Setzt den Schaden, den eine Waffe anrichten kann. Der Schaden berechnet sich aus einem Wert zwischen max_damage_beginner und max_damage_expert (je nach Erfahrung mit der entsprechenden Waffe) minus der Ruestung des Angegriffenen. Richtlinien zum Schaden (einschliesslich dem extra_damage) sind in /doc/richtlinien/waffen VERWEISE: GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: set_learning_type DEKLARATION: VERALTET void set_learning_type(int learning_type) BESCHREIBUNG: VERALTET Diese Funktion wird nicht mehr benoetigt. Hier die alte Beschreibung: Setzt die Erlernbarkeit einer Waffe, d.h. die Geschwindigkeit mit der man eine Waffe erlernen kann. Dazu sind in config.h die folgenden Konstanten definiert: #define LEARNING_1 1 #define LEARNING_2 5 #define LEARNING_3 20 #define LEARNING_4 50 #define LEARNING_5 100 #define LEARNING_6 1000 Fuer die Verwendung des learning_type siehe Richtlinien/Waffen, uebliche Nahkampfwaffen haben LEARNING_1, uebliche Schuss- und Wurfwaffen haben LEARNING_3. Diese Werte werden defaultmaessig gesetzt, mussen also nicht explizit gesetzt werden. VERWEISE: GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: set_skill_path DEKLARATION: void set_skill_path(string *skillpath) BESCHREIBUNG: Damit setzt man den Skillpfad, in dem der Skill fuer die Waffe gesetzt wird. Erlaubte Pfade siehe /doc/richtlinien/erlaubte_skills. VERWEISE: GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: set_used_stats DEKLARATION: void set_used_stats(int *stats) BESCHREIBUNG: Damit setzt man die Faehigkeiten (Staerke, Intelligenz, Ausdauer, Geschicklichkeit), die zur Benutzung dieser Waffe verwendet werden. Fuer stats kann man die in stats.h definierten Konstanten verwenden. VERWEISE: query_used_stats GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: set_broken_message DEKLARATION: void set_broken_message(string broken_message) BESCHREIBUNG: Setzt die Meldung, die ein Spieler bekommt, wenn seine Waffe oder Ruestung ihr Leben aushaucht (life faellt auf <= 0...). Diese Meldung wird automatisch umgebrochen. VERWEISE: query_broken_message GRUPPEN: waffen, ruestung, kampf SOURCE: /i/armour/armour.c, /i/weapon/weapon_logic.c FUNKTION: query_broken_message DEKLARATION: string query_broken_message() BESCHREIBUNG: Liefert die Meldung, die ein Spieler bekommt, wenn seine Waffe oder Ruestung ihr Leben aushaucht (life faellt auf <= 0...). VERWEISE: set_broken_message GRUPPEN: waffen, ruestung, kampf SOURCE: /i/armour/armour.c, /i/weapon/weapon_logic.c FUNKTION: set_life DEKLARATION: void set_life(int life) BESCHREIBUNG: Mit set_life kann man die Anzahl der Schlaege(Schuesse, Wuerfe) festlegen, die man mit einer Waffe ausfuehren kann, bevor sie kaputtgeht. Fuer erlaubte Werte ->/doc/richtlinien/waffen/leben VERWEISE: add_life, query_life, query_max_life GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: add_life DEKLARATION: int add_life(int life) BESCHREIBUNG: Mit add_life kann man die Anzahl der Schlaege(Schuesse, Wuerfe) erhoehen oder verringern (bei negativem life), die man mit einer Waffe ausfuehren kann, bevor sie kaputtgeht. Fuer erlaubte Werte ->/doc/richtlinien/waffen/leben VERWEISE: set_life, query_life, query_max_life GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_skill_path DEKLARATION: string *query_skill_path() BESCHREIBUNG: Liefert den Skill-Pfad einer Waffe zurueck. VERWEISE: set_skill_path GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_max_damage DEKLARATION: int query_max_damage() BESCHREIBUNG: Liefert den Schaden, den diese Waffe bei einem Experten anrichten kann. VERWEISE: set_damage, query_min_damage GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_min_damage DEKLARATION: int query_min_damage() BESCHREIBUNG: Liefert den Schaden, den diese Waffe bei einem Anfaenger anrichten kann. VERWEISE: set_damage, query_max_damage GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_life DEKLARATION: int query_life() BESCHREIBUNG: Liefert die Anzahl Schlaege(Wuerfe, Schuesse), die man mit einer Waffe noch machen kann, bevor sie kaputtgeht. VERWEISE: set_life, query_max_life GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_max_life DEKLARATION: int query_max_life() BESCHREIBUNG: Liefert die Anzahl Schlaege, die eine Waffe nach dem create() hatte. VERWEISE: query_life, set_life GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_broken DEKLARATION: int query_broken() BESCHREIBUNG: Liefert 1 zurueck, wenn die Waffe oder Ruestung beschaedigt ist, sonst 0. VERWEISE: query_life GRUPPEN: waffen, ruestung, kampf SOURCE: /i/armour/armour.c, /i/weapon/weapon_logic.c FUNKTION: compute_damage DEKLARATION: varargs int compute_damage(int critical, object wer) BESCHREIBUNG: Berechnet unter Beruecksichtigung der Faehigkeiten query_used_stats() und des Waffenskills den maximalen Schaden, den wer mit der Waffe anrichten kann. Ist wer nicht angegebene, so wird ENV(Waffe) genommen, sofern es ein Lebewesen ist. Ist critical angegeben, so wird ein kritischer Schlag berechnet. VERWEISE: query_max_damage, query_min_damage GRUPPEN: spieler, monster, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: T_LISTE DEKLARATION: Liste der T-Defines fuer Waffen und Ruestungen BESCHREIBUNG: Vordefinierte Bedingungen: - T_WIELD Die Waffe ist gefuehrt. - T_BROKEN Die Waffe bzw. Ruestung ist kaputt. Vordefinierte Texte: - T_WIELD_TEXT "Die Waffe ist gefuehrt." oder so. - T_BROKEN_TEXT "Die Waffe sieht kaputt aus." oder so. Hinweise fuer die Meldungsgeneration: - T_HAS_WIELD_TEXT Wird derzeit ignoriert. - T_HAS_BROKEN_TEXT Hinweis, dass die Beschreibung bereits die kaputte Waffe bzw. Ruestung erwaehnt. Vordefinierte Eigenschaften zum Vergleich mit T_GREATER & Co.: - T_LIFE Die verbleibende Lebensdauer der Waffe bzw. Ruestung. GRUPPEN: waffen, ruestung, kampf SOURCE: /i/armour/armour.c, /i/weapon/weapon_logic.c FUNKTION: set_value DEKLARATION: varargs void set_value(int min, int max) BESCHREIBUNG: Damit setzt man den Mindest- und Maximalwert der intakten Waffe. Erlaubte Werte ->/doc/richtlinien/waffen/wert VERWEISE: query_value, query_min_value, query_max_value GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_max_value DEKLARATION: int query_max_value() BESCHREIBUNG: Liefert den Maximalwert der funktionierenden Waffe (also den Wert der Waffe im nagelneuen Zustand). VERWEISE: query_min_value, query_value, set_life GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_min_value DEKLARATION: int query_min_value() BESCHREIBUNG: Liefert den Mindestwert der funktionierenden Waffe (also den Wert, den die Waffe besitzt, wenn man mit ihr noch einen Schlag ausfuehren kann). VERWEISE: query_max_value, query_value, set_life GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_weapon DEKLARATION: int query_weapon() BESCHREIBUNG: Liefert bei Waffen 1. VERWEISE: query_armour GRUPPEN: waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_extra_damage DEKLARATION: int query_extra_damage(object feind, object besitzer) BESCHREIBUNG: Wird fuer jeden Schlag in der Waffe aufgerufen, damit man den Schaden auch in Abhaengigkeit vom Opfer festlegen kann. Oder Waffengifte verteilen. Oder ... Was immer diese Funktion zurueck liefert, wird auf den Schaden oder Schutzwert aufaddiert. Positive Werte bedeuten verbesserung, negative Verschlechterung. Gilt nicht fuer Defensiv-Waffen. Der extra_damage muss zusammen mit dem normalen Schaden den Richtlinien in /doc/richtlinien/waffen entsprechen! VERWEISE: set_damage GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_damage_type DEKLARATION: string* query_damage_type() BESCHREIBUNG: Liefert die Schadensart der Waffe zurueck. Diese wird beim AP-Abzug durch add_hp als AH_DAMAGE_TYPE uebergeben. VERWEISE: set_damage_type, set_damage GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: set_damage_type DEKLARATION: void set_damage_type(string* damage_type) BESCHREIBUNG: Damit wird die Schadensart der Waffe festgelegt. Diese wird dann beim AP-Abzug durch add_hp als AH_DAMAGE_TYPE uebergeben. VERWEISE: query_damage_type, set_damage GRUPPEN: waffen, kampf SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_num_free_hands_to_wield DEKLARATION: int query_num_free_hands_to_wield() BESCHREIBUNG: Liefert die Anzahl freier Haende, die man braucht, um die Waffe zu fuehren. VERWEISE: query_num_free_hands GRUPPEN: kampf, haende, waffen SOURCE: /i/weapon/weapon_logic.c FUNKTION: query_info DEKLARATION: string query_info() BESCHREIBUNG: Definiert ein Objekt eine solche Funktion, und liefert einen String zurueck, so wird dieser String bei dem Zauberstabkommando 'zinfo ' angezeigt. Dies ist vor allem fuer Debugging-Zwecke interessant. Der String sollte idealerweise formatiert ausgegeben werden, damit er zur restlichen zinfo- Ausgabe passt. Beispiel in einem Raetsel-NPC: string query_info() { if(objectp(quester)) { return wrap("Zur Zeit versucht "+der(quester)+", das Raetsel " "zu loesen."); } } Ein Gott kann mit einem 'zinfo npc' dann sofort sehen, dass gerade jemand das Raetsel loest, ohne umstaendlich Funktionen (z.B. query_quester()) heraussuchen zu muessen, um an diese Information zu kommen. ACHTUNG: Die von query_info() gelieferten Informationen sind nicht fuer Spieler! Zusatzinformationen fuer Spieler (Sehergilde) siehe query_seher_info(). VERWEISE: query_seher_info GRUPPEN: grundlegendes SOURCE: /i/zauberstab/zinfos.inc FUNKTION: prepare_renewal DEKLARATION: void prepare_renewal() BESCHREIBUNG: Diese Funktion wird beim einem 'zerneuere -t'-Befehl im zu erneuernden Objekt aufgerufen, bevor es umbenannt wird und das neue Objekt geladen wird. Hier sollte ungefaehr alles getan werden, war vor dem Neuladen des Objektes erforderlich ist (z.B. Daten abspeichern). VERWEISE: abort_renewal, finish_renewal GRUPPEN: grundlegendes SOURCE: /i/zauberstab/zmarker.inc FUNKTION: abort_renewal DEKLARATION: void abort_renewal() BESCHREIBUNG: Diese Funktion wird aufgerufen, nachdem bei einem 'zerneuere -t' das Neuladen fehlschlug und nachdem daher dieses Objekt wieder zurueck umbenannt wurde. Hier kann man Aktionen aus prepare_renewal rueckgaengig machen. VERWEISE: prepare_renewal, finish_renewal GRUPPEN: grundlegendes SOURCE: /i/zauberstab/zmarker.inc FUNKTION: finish_renewal DEKLARATION: void finish_renewal(object neu) BESCHREIBUNG: Falls ein Erneuern bei 'zerneuere -t' erfolgreich war, wird diese Funktion im alten Objekt aufgerufen, bevor dieses mittels destruct() (kein remove()!) zerstoert wird. VERWEISE: prepare_renewal, abort_renewal GRUPPEN: grundlegendes SOURCE: /i/zauberstab/zmarker.inc FUNKTION: query_file_name DEKLARATION: string query_file_name() BESCHREIBUNG: Falls aus dem Objekt- oder Programmnamen (via object_name bzw. program_name) nicht der richtige Dateiname abgeleitet werden kann, so kann ein Objekt diese Funktion definieren und damit den richten Dateinamen (inklusive Endung) zurueckliefern. zmore, zgrep, zcd und zed nutzen diesen dann. VERWEISE: object_name, program_name, virtual_compiler GRUPPEN: grundlegendes, virtual_compiler SOURCE: /i/zauberstab/zmarker.inc FUNKTION: query_domain DEKLARATION: int query_domain(int x, int y) BESCHREIBUNG: Mit dieser Funktion kann man den Zaehler innerhalb des Domain-Arrays anhand der globalen Koordinaten x und y abfragen. Den Zaehler braucht man z.B. um ihn an query_domain_info(zaehler) zu uebergeben. Wenn -1 returned wird, ist die Koordinate x,y nicht in einer Domain. VERWEISE: query_domain_info GRUPPEN: map SOURCE: /map/map.c FUNKTION: query_domain_info DEKLARATION: mixed *query_domain_info( {int zaehler|string Domain} ) BESCHREIBUNG: Mit dieser Funktion bekommt man alle Informationen ueber eine Domain. Returned wird ein Array mit folgenden Eintraegen: ({ Domain-Name, X-Offset, Y-Offset, Breite, Hoehe }) VERWEISE: query_domain, query_domain_coords GRUPPEN: map SOURCE: /map/map.c FUNKTION: query_domain_coords DEKLARATION: int *query_domain_coords(string domain) BESCHREIBUNG: Liefert ein Array der Form ({ X-Offset, Y-Offset }) Die Koordinaten sind die linke untere Ecke der Domain es wird 0 returned, wenn die Domain nicht vorhanden ist VERWEISE: query_domain_center, query_domain_info GRUPPEN: map SOURCE: /map/map.c FUNKTION: query_domain_center DEKLARATION: int *query_domain_center(string domain) BESCHREIBUNG: Liefert die Koordinaten der Mitte der Domain in der Form ({ x, y }) Wenn die Domain nicht existiert, wird 0 returned. VERWEISE: query_domain_coords, query_domain_info GRUPPEN: map SOURCE: /map/map.c FUNKTION: query_map_file_name DEKLARATION: string query_map_file_name(int x, int y) BESCHREIBUNG: Liefert anhand der globalen Koordinaten x,y den lokalen Pfad des Map-Raumes. z.B.: query_map_file_name(8,0) liefert "/d/Vaniorh/uluji/passage/m1_0.c" query_map_file_name(13,0) liefert "/d/Vaniorh/m28_15.c" VERWEISE: get_map_file_name GRUPPEN: map SOURCE: /map/map.c FUNKTION: get_map_file_name DEKLARATION: string get_map_file_name(string file_name) BESCHREIBUNG: Liefert Aufgrund eines lokalen Map-Filenamens den globalen Map-Filenamen der Form /map/mX_Y z.B. get_map_file_name("/d/Vaniorh/m28_15") -> "/map/m13_0.c" get_map_file_name("/d/Vaniorh/uluji/passage/m1_0") -> "/map/m8_0.c" get_map_file_name("/d/Vaniorh/m23_15") -> "/map/m8_0.c" VERWEISE: query_map_file_name GRUPPEN: map SOURCE: /map/map.c FUNKTION: concerned_hlpitem_falls DEKLARATION: int concerned_hlpitem_falls(object item, object flugraum) BESCHREIBUNG: Wenn ein Engel gerade einfach so durch den Himmel fliegt, dann voellig unachtsam einen Gegenstand fallen laesst und dieser sich dann in Eigenregie auf den Boden zubewegt, dann werden alle mit CONTROL->add_controller("concerned_hlpitem_falls", ob) angemeldeten Objekte gefragt, ob sie sich um diesen Gegenstand kuemmern wollen. Dazu wird dort die Funktion ob->concerned_hlpitem_falls(item, flugraum) aufgerufen. Dasjenige Objekt, welches die groesste Zahl zurueckliefert, erhaelt den Zuschlag. Dort wird dann Funktion do_hlpitem_falls aufgerufen. Diese Funktion muss das Objekt aus dem Flugraum rausnehmen und eine entsprechende Meldung an den Engel im Flugraum ausgeben. VERWEISE: do_hlpitem_falls, concerned GRUPPEN: level SOURCE: /obj/flugraum.c FUNKTION: do_hlpitem_falls DEKLARATION: void do_hlpitem_falls(object item, object flugraum) BESCHREIBUNG: Diese Funktion wird beim Sieger von concerned_hlpitem_falls aufgerufen. Sie sollte nun selbst das Objekt aus dem Flugraum entfernen und dort eine entsprechend Meldung ausgeben. Tut sie das nicht, wird das Objekt anschliessend vom Flugraum mit der Standardmeldung zerstoert. VERWEISE: concerned_hlpitem_falls, concerned GRUPPEN: level SOURCE: /obj/flugraum.c FUNKTION: forbidden_hlp_gabe DEKLARATION: string forbidden_hlp_gabe(object player, string gabe, object kugel) BESCHREIBUNG: Bevor eine Gabe vom Engel player genutzt wird, wird in allen mit player->add_controller("forbidden_hlp_gabe",ob) angemeldeten Objekten ob->forbidden_hlp_gabe(player, gabe, kugel) aufgerufen. Liefert dieser Aufruf einen String zurueck, so wird die Gabe nicht genutzt und sofern die Ausgabe einer Fehlermeldung nicht unterdrueckt werden sollte, dieser String ausgegeben. (Er wird dabei korrekt umgebrochen.) Diese Moeglichkeit sollte nur sehr selten genutzt werden und mit den Admins abgesprochen werden. VERWEISE: GABE, forbidden_hlp_gabe_here GRUPPEN: level SOURCE: /obj/hlptool.c FUNKTION: forbidden_hlp_gabe_here DEKLARATION: string forbidden_hlp_gabe_here(object player, string gabe, object kugel) BESCHREIBUNG: Bevor eine Gabe vom Engel player genutzt wird, wird in allen beim umgebenden Raum room mit room->add_controller("forbidden_hlp_gabe_here",ob) angemeldeten Objekten ob->forbidden_hlp_gabe_here(player, gabe, kugel) aufgerufen. Liefert dieser Aufruf einen String zurueck, so wird die Gabe nicht genutzt und sofern die Ausgabe einer Fehlermeldung nicht unterdrueckt werden sollte, dieser String ausgegeben. (Er wird dabei korrekt umgebrochen.) Diese Moeglichkeit sollte nur sehr selten genutzt werden und mit den Admins abgesprochen werden. VERWEISE: GABE, forbidden_hlp_gabe GRUPPEN: level SOURCE: /obj/hlptool.c FUNKTION: forbidden_spy_here DEKLARATION: mixed forbidden_spy_here(object wer, object raum) BESCHREIBUNG: Wenn Spieler 'wer' mit der Engelskugel (oder evntl. auf andere magische Weise) in den Raum 'raum' schaut, wird raum->forbidden("spy_here", wer) aufgerufen. forbidden ruft dann in allen mit raum->add_controller( "forbidden_spy_here", other) angemeldeten Objekten other die Funktion other->forbidden_spy_here(wer, raum) auf. Diese Objekte koennen dann durch Rueckgabe eines String-Arrays dieses Sehen unterbinden. Das zurueckzuliefernde Array hat den Aufbau ({ "Meldung an wer", "Meldung an alle anderen im Raum" }). Diese Meldungen werden automatisch umgebrochen. Liefert diese Funktion statt einem Array nur eine 1 zurueck, so wird das Sehen auch verhindern, jedoch mit den Standardmeldungen. Diese Funktion sollte nur sehr selten und nur mit guter Begruendung genutzt werden. VERWEISE: forbidden_hlp_gabe, forbidden_hlp_gabe_here GRUPPEN: level SOURCE: /obj/hlptool.c FUNKTION: query_bretter DEKLARATION: string *query_bretter() BESCHREIBUNG: Liefert die Bretter, welche mit diesem Newsreader gelesen werden koennen. VERWEISE: set_bretter, set_brett_name, query_brett_name, query_gruppen_name GRUPPEN: news SOURCE: /obj/newsreader.c FUNKTION: set_bretter DEKLARATION: string *set_bretter(string *strs) BESCHREIBUNG: Damit setzt man, welche Bretter mit diesem Newsreader gelesen werden koennen. Bei 0 oder ({}) kann man nicht mehr ins Hauptmenue gelangen bzw. gar nix lesen. Auf Engel mit der Gabe "mn" oder fuer Goetter hat diese Einstellung keinen Einfluss. Moechte man nur bestimmte Gruppen an einem Brett erlauben, so kann man "Brett:Gruppe" als String angeben. VERWEISE: query_bretter, set_brett_name, query_brett_name, query_gruppen_name GRUPPEN: news SOURCE: /obj/newsreader.c FUNKTION: set_brett_name DEKLARATION: varargs void set_brett_name(string str, string grp, mixed fail) BESCHREIBUNG: Damit wird gesetzt, wo man mit diesem Newsreader zu lesen beginnt. Wurde eine Gruppe angegeben, so kann man nur diese Gruppe lesen (ein Rueckschritt zur Gruppenauswahl ist dann unmoeglich), es sei denn, mit set_bretter wurden zuvor weitere lesbare Bretter angegeben. In fail kann man eine Fehlermeldung (als String) oder eine Closure, welche einen String mit der Fehlermeldung zurueckliefert, angeben. Die Fehlermeldung wird ausgegeben, wenn derjenige dieses Brett nicht lesen darf und ein Ruecksprung zur Gruppen- oder Brettauswahl nicht moeglich ist. Der angegebene bzw. zurueckgelieferte String muss bereits Zeilenumbrueche beinhalten. Die Closure erhaelt den Spieler (object) als 1. Parameter, das Brett (string) als 2. und die Gruppe (string) als 3. Parameter. Es kann passieren, dass diese Closure aufgerufen wird, auch wenn die zurueckgelieferte Meldung im Endeffekt gar nicht genutzt wird. Ruft man diese Funktion direkt im Newsreader auf, so sollte dies erst geschehen, nachdem der Newsreader in den Spieler bewegt wurde. VERWEISE: set_bretter, query_bretter, query_brett_name, query_gruppen_name GRUPPEN: news SOURCE: /obj/newsreader.c FUNKTION: query_brett_name DEKLARATION: string query_brett_name() BESCHREIBUNG: Liefert das Brett, an welchem der Newsreader zu lesen beginnt. VERWEISE: set_bretter, query_bretter, set_brett_name, query_gruppen_name GRUPPEN: news SOURCE: /obj/newsreader.c FUNKTION: query_gruppen_name DEKLARATION: string query_gruppen_name() BESCHREIBUNG: Liefert die Gruppe, an welcher der Newsreader zu lesen beginnt. VERWEISE: set_bretter, query_bretter, set_brett_name, query_brett_name GRUPPEN: news SOURCE: /obj/newsreader.c FUNKTION: query_newsreader_active DEKLARATION: int query_newsreader_active() BESCHREIBUNG: Liefert einen Wert !=0, wenn gerade mit diesem Newsreader gelesen wird. VERWEISE: is_reading GRUPPEN: news SOURCE: /obj/newsreader.c FUNKTION: is_reading DEKLARATION: object is_reading() BESCHREIBUNG: Liefert den Leser dieses Newsreaders, falls mit ihm gerade gelesen wird. VERWEISE: query_newsreader_active GRUPPEN: news SOURCE: /obj/newsreader.c FUNKTION: zahl2str DEKLARATION: private string zahl2str(int i) BESCHREIBUNG: Liefert diese Zahl als String. Zahlen von 0 bis 12 werden als Woerter geliefert. VERWEISE: to_string GRUPPEN: Root:Tools:Newsreader SOURCE: /obj/newsreader.c FUNKTION: query_player_container DEKLARATION: int query_player_container() BESCHREIBUNG: Wenn diese Funktion 1 returned, ist das Objekt ein Player-Container, also der Behaelter, der die Sachen eines Spielers aufbewahrt, wenn sich dieser ausloggt. GRUPPEN: spieler SOURCE: /obj/player_con.c FUNKTION: query_streichholz DEKLARATION: int query_streichholz() BESCHREIBUNG: Liefert 1 zurück, wenn das Objekt ein Streichholz ist VERWEISE: query_burning, query_burned_out, query_anzuender GRUPPEN: feuer SOURCE: /obj/streichhoelzer.c FUNKTION: query_burning DEKLARATION: int query_burning() BESCHREIBUNG: Liefert 1 zurück, wenn das Objekt brennt. (offenes Feuer, was potentiell Dinge entzünden kann) VERWEISE: query_streichholz, query_burned_out, query_anzuender GRUPPEN: feuer SOURCE: /obj/streichhoelzer.c FUNKTION: query_burned_out DEKLARATION: int query_burned_out() BESCHREIBUNG: Liefert 1 zurück, wenn das Objekt schonmal gebrannt hatte und vor der totalen Vernichtung gelöscht wurde. Für Streichhölzer bedeutet dies, dass sie nicht mehr selbst zünden, sonden nur noch mit Fremdeinwirkung brennen können. VERWEISE: query_streichholz, query_burning, query_anzuender GRUPPEN: feuer SOURCE: /obj/streichhoelzer.c FUNKTION: query_anzuender DEKLARATION: int query_anzuender() BESCHREIBUNG: Liefert 1 zurück, wenn das Objekt noch zum Anzünden von etwas anderem taugt. Auch dafür gedacht, dass man testen kann, ob Jemand einen Anzünder parat hat, mit dem evtl. auch 'zünde bla' direkt (OHNE 'mit blubb') geht. Bei Streichhölzern: entweder es brennt gerade, oder es kann noch von selbst entzündet werden. VERWEISE: query_streichholz, query_burning, query_burned_out GRUPPEN: feuer SOURCE: /obj/streichhoelzer.c FUNKTION: allowed_strike DEKLARATION: allowed_strike() BESCHREIBUNG: Wenn das Streichholz prüft, ob etwas angezündet werden kann, und dies gehen soll, * obwohl das Material nicht dafür spricht, z.B. trockenes Stroh das Material MAT_PFLANZLICH hat, welches ansich nicht brennt * obwohl es no_move oder invis ist dann kann das zu prüfende Objekt mit dem controller allowed_strike dafür sorgen. Dies ist nicht dazu da, sich selbst um das Brennen zu kümmern, denn das macht concerned_strike sondern dazu dass ein Feuer-Shadow von dem Anzünder übergeworfen wird, als wäre das Objekt ein bewegliches Stück Holz. Beispiel für einen Strohsessel: im create(): add_controller("allowed_strike", this_object()); außerdem: int allowed_strike() { return !query_no_move() && !IS_INVIS(TO); } VERWEISE: brennbar, notify_strike, do_strike, concerned_strike GRUPPEN: feuer SOURCE: /obj/streichhoelzer.c FUNKTION: prepare_strike DEKLARATION: int prepare_strike() BESCHREIBUNG: Diese Funktion ist als Meldungs-Vorgeplänkel für ein erfolgreiches Zünden gedacht und kann natürlich auch von Objekten, die sich selbst um ihr Anzünden kümmern mitverwendet werden. Es wird 1 returnt, damit man weiß, dass es die Funktion gab und was passierte. Beispiel: (in einer Bombe:) void do_strike(object womit, mixed was, mixed melder) { womit->prepare_strike(); send_message(MT_LOOK,MA_USE, Der(TP)+" hält "+seinen(melder)+ " an die Zündschnur die sofort Feuer fängt.", "Du hältst "+deinen(melder)+ " an die Zündschnur die sofort Feuer fängt.", TP); womit->strike_done(); send_message(MT_LOOK|MT_NOISE|MT_FEEL,MA_UNKNOWN, "KRAWUMM!"); remove(); } VERWEISE: add_controller, concerned, notify_strike, do_strike, concerned_strike GRUPPEN: feuer SOURCE: /obj/streichhoelzer.c FUNKTION: strike_done DEKLARATION: int strike_done() BESCHREIBUNG: Diese Funktion gibt eine Meldung 'Dein Streichholz erlischt.' aus und vernichtet ein Streichholz. Sie ist als Abschluß für ein erfolgreiches Zünden gedacht und kann natürlich auch von Objekten, die sich selbst um ihr Anzünden kümmern mitverwendet werden. Es wird 1 returnt, damit man weiß, dass es die Funktion gab und was passierte. Beispiel: (in einer Bombe:) void do_strike(object womit, mixed was, mixed melder) { send_message(MT_LOOK,MA_USE, Der(TP)+" entzündet sich "+ein(melder)+" und hält " +es(melder)+" an die Zündschnur, die sofort Feuer fängt.", "Du entzündest dir "+ein(melder)+" und hältst " +es(melder)+" an die Zündschnur, die sofort Feuer fängt.", TP); womit->strike_done(); send_message(MT_LOOK|MT_NOISE|MT_FEEL,MA_UNKNOWN, "KRAWUMM!"); remove(); } VERWEISE: add_controller, concerned, notify_strike, do_strike, concerned_strike GRUPPEN: feuer SOURCE: /obj/streichhoelzer.c FUNKTION: do_notifying DEKLARATION: void do_notifying(mixed what, object player, mixed test_ob) BESCHREIBUNG: Funktion, die das Verteilen der üblichen notifys übernimmt. Dabei ist 'what' das was angezündet wurde, 'player' der Anzündende und 'test_ob' what["environment"] falls 'what' ein v_item ist. VERWEISE: add_controller, concerned, notify_strike, do_strike, concerned_strike GRUPPEN: feuer SOURCE: /obj/streichhoelzer.c FUNKTION: concerned_strike DEKLARATION: int concerned_strike(object womit, mixed was) BESCHREIBUNG: Wenn ein Objekt 'was' angezündet werden soll, wird zuvor was->concerned("strike",this_object()) aufgerufen. Die Returnwerte von 'was' und per controller bei 'was' angemeldeten Objekten werden als Prioritaten angesehen, wobei das Objekt 'ob' mit der höchsten Priorität den Zuschlag erhält und per ob->do_strike(streichholz,was,melder); dazu aufgefordert wird sich um das entzünden von 'was' zu kümmern. Hinweis: Wenn 'was' ein v_item ist mit eintrag "einvironment" : env_ob, so wird env_ob->concerned("strike",this_object(),was) aufgerufen VERWEISE: add_controller, concerned, notify_strike, do_strike GRUPPEN: feuer, grundlegendes SOURCE: /obj/streichhoelzer.c FUNKTION: do_strike DEKLARATION: int do_strike(object womit, mixed was, mixed melder) BESCHREIBUNG: Diese Funktion wird in dem Objekt aufgerufen, welches über concerned_strike die höchste Priorität zurückgeliefert hat und sich somit dafür zuständigst erklärt hat sich um das Anzünden von was zu kümmern. ( Dabei kann was auch ein v_item sein ) Es sollte innerhalb der Funktion was wenn möglich irgendwie angezündet werden und im Erfolgsfall 1 sowie im Misserfolgsfall 0 returnt werden. Dieser Returnwert wird im zünden der Streichhölzer übernommen, also return 0 nur wenn wirklich aus einem triftigen Grund nix geht ( sonst wäre man ja lieber nicht zuständig ;) 'melder' ist dabei das womit angezündet wird, in einer Form, die zur Erzeugung von Meldungen sinnig ist, (Bei Streichholz ein mapping mit einzelnem Holz und nicht alle auf einmal, bei Gildenzaubern wäre das ein mapping mit dem Namen für den Zauber, damit nicht das gilden_ob oder so kommt) VERWEISE: add_controller, notify_strike, concerned_strike GRUPPEN: feuer, grundlegendes SOURCE: /obj/streichhoelzer.c FUNKTION: notify_strike DEKLARATION: void notify_strike(mixed what, object player, object with) BESCHREIBUNG: Wenn ein Objekt angezündet wurde, d.h. entweder die Streichhölzer haben es angezündet (feuer-shadow wurde übergeworfen) oder das Objekt was sich um das Anzünden kümmert hat do_notifying in den streichhölzern aufgerufen, dann wird notify("strike",what,player,with) in den Streichhölzern, this_player(), in environment(this_player()) und falls 'what' ein Objekt ist, in 'what' und, falls 'what' ein v_item mit v_item["environment"] ist, in v_item["environment"] aufgerufen. 'what' ist dabei das angezündete Objekt (resp. v_item), 'with' sind die Streichhölzer und 'player' ist this_player(). VERWEISE: add_controller, concerned_strike, do_strike GRUPPEN: feuer, grundlegendes SOURCE: /obj/streichhoelzer.c FUNKTION: set_add_hp_infos DEKLARATION: void set_add_hp_infos(mapping infos) BESCHREIBUNG: Setzt Eintraege fuer das add_hp-infos-Mapping. Dabei wird ein Mapping wie in der Dokumentation zu add_hp beschrieben uebergeben. Derzeit werden folgende Keys unterstuetzt: AH_ERF_TOD, AH_ERF_TOD_OTHER, AH_ERF_RETTUNG Alle anderen Keys werden ignoriert. VERWEISE: query_add_hp_infos, add_hp GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_add_hp_infos DEKLARATION: mapping query_add_hp_infos() BESCHREIBUNG: Gibt die Eintraege zurueck, die bei einem add_hp-Aufruf im Virus dem infos- Mapping hinzugefuegt werden. Wenn keine zusaetzlichen Eintraege gesetzt sind, wird ein leeres Mapping zurueckgegeben. VERWEISE: set_add_hp_infos, add_hp GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_verursacher DEKLARATION: void set_virus_verursacher(string|object who) BESCHREIBUNG: Setzt den Verursacher des Virus. Funktioniert nur bei Spielern. Wenn ein String angegeben wurde, so wird er als real_cap_name des Spielers interpretiert. VERWEISE: query_virus_verursacher GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_verursacher DEKLARATION: string query_virus_verursacher() BESCHREIBUNG: Liefert den Verursacher des Virus zurueck. VERWEISE: set_virus_verursacher GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_shadow_path DEKLARATION: void set_virus_shadow_path(string virus_shadow_path) BESCHREIBUNG: Setzt beim Virus einen Shadow, der waehrend der gesamten Krankheit ueber dem Opfer gehalten wird. Fies, echt. Mit set_virus_additional_data koennen Werte, die der Shadow benoetigt, im Virus gespeichert werden und somit ueber das ausloggen erhalten bleiben, siehe dort. VERWEISE: query_virus_shadow_path, query_virus_shadow, do_virus_shadow_action, set_virus_additional_data, query_virus_additional_data GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_shadow_path DEKLARATION: string query_virus_shadow_path() BESCHREIBUNG: Liefert den Pfad des Krankheitsbegleitenden Schattens (so vorhanden). VERWEISE: set_virus_shadow_path, query_virus_shadow, do_virus_shadow_action GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_shadow DEKLARATION: object query_virus_shadow() BESCHREIBUNG: Liefert einen Objectpointer auf einen Krankheitsbegleitenden Shadow (so vorhanden). VERWEISE: set_virus_shadow_path, query_virus_shadow_path, do_virus_shadow_action GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_look DEKLARATION: string query_virus_look() BESCHREIBUNG: Liefert das Aussehen, das ein Virus einem Spieler verleiht. VERWEISE: set_virus_look GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_look DEKLARATION: void set_virus_look(string look) BESCHREIBUNG: Mit set_virus_look() setzt man eine Extra-Beschreibung des erkrankten Spielers. Dabei ist 'look' eine Pseudoclosure, welche den vollstaendigen Text enthaelt, der dann der Beschreibung angehaengt wird. Aufrufe von Grammatikfuntkionen in der Pseudoclosure ohne Argument erhalten automatisch den Spieler als Argument. BEISPIEL: set_virus_look("$Er() ist gruen im Gesicht."); gesetzt wurde, erscheint bei der Beschreibung eines z.B. saechlichen Spielers Es ist gruen im Geschicht. Der traditionelle Aufruf mit einem String, welchem automatisch das Personal- pronomen vorangestellt wird, funktioniert ebenfalls: set_virus_look("ist gruen im Gesicht."); Ergibt das gleiche Ergebnis wie das 1. Beispiel. VERWEISE: query_virus_look GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_immun_time DEKLARATION: void set_immun_time(int immun_time) BESCHREIBUNG: Setzt die Dauer, die ein Spieler nach einer Seuche immun bleibt. Es sind nur Werte zwischen 300 und 7200 oder 0 erlaubt. VERWEISE: query_immun_time GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_immun_time DEKLARATION: int query_immun_time() BESCHREIBUNG: Liefert die Dauer, die ein Spieler nach einer Seuche immun bleibt. VERWEISE: set_immun_time GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_messages DEKLARATION: void set_virus_messages(mixed *messages) BESCHREIBUNG: Setzt die Meldungen, die der Spieler vom Virus beim AP-Abzug bekommt. Bei jedem AP-Abzug wird ein Element des Arrays zufaellig ausgegeben. Eine Meldung kann dabei sein: - ein normaler String: Meldung wird an den Virustragenden ausgegeben. Beispiel: "Dir ist total uebel." - ein String, der mit einem Ausrufezeichen beginnt: Der Text wird als Befehl vom Virustragenden ausgefuehrt. Beispiel: "!huste herzergreifend", - ein Stringarray aus zwei Strings: Der erste Text wird an den Virustraeger ausgegeben, der zweite an die anderen im Raum. Beispiel: ({"Meldung fuer Spieler", "Meldung fuer andere"}), - wie oben, nur kann zusaetzlich der MessageTyp und MessageAction fuer die Meldung, die an "die anderen" geht, angegeben werden: Beispiele: ({"fuer Spieler", "mit MT fuer andere", MT_NOISE}), ({"fuer Spieler", "mit MT und MA fuer andere", MT_NOISE, MA_EAT}) Die Meldungen fuer andere koennen dabei Pseudoclosures enthalten: "$Der(OBJ_TP) wird ganz gruen im Gesicht, $er(OBJ_TP) sieht krank aus." VERWEISE: query_virus_messages GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_messages DEKLARATION: mixed *query_virus_messages() BESCHREIBUNG: Liefert die Meldungen eines Virus zurueck. VERWEISE: set_virus_messages GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus DEKLARATION: int query_virus() BESCHREIBUNG: Liefert bei Viren natuerlich 1. VERWEISE: query_virus_type GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_type DEKLARATION: string query_virus_type() BESCHREIBUNG: Liefert den Typ des Virus. Moegliche Returnwerte sind momentan: "fluch", "krankheit", "gift", "seuche" und "verletzung". VERWEISE: set_virus_type, query_virus GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_type DEKLARATION: void set_virus_type(string type) BESCHREIBUNG: Setzt den Typ eines Virus. Moegliche Argumente: "gift","krankheit","seuche","fluch","verletzung". Andere Argumente fuehren zu einem Laufzeitfehler. Die Einzelnen Typen unterscheiden sich nur in der Defaultmeldung bei ihrem Ende, ausser die "seuche", sie ist ansteckend und nach Ende der Seuche ist man eine Weile immun. VERWEISE: query_virus_type, set_immun_time, set_virus_chance GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: add_virus_str DEKLARATION: void add_virus_str(int strength) BESCHREIBUNG: Damit kann man den AP-Abzug pro Minute eines Virus veraendern. Positive Werte verschaerfen die Krankheit, negative lindern. VERWEISE: set_virus_str, query_virus_str GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_str DEKLARATION: void set_virus_str(int strength) BESCHREIBUNG: Setzt die Aggressivitaet eines Virus, das heisst, die Anzahl der APs, die pro Minute abgezogen werden. strength == 0 ist erlaubt. VERWEISE: add_virus_str, query_virus_str GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_str DEKLARATION: int query_virus_str() BESCHREIBUNG: Liefert die momentane Staerke (also AP-Abzug pro Minute) eines Virus VERWEISE: set_virus_str, add_virus_str GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_dur DEKLARATION: void set_virus_dur(int duration) BESCHREIBUNG: Setzt die Verweildauer eines Virus. 0 ist ein nicht besonders sinnvoller Wert (es sei denn, als Seuchen-Immunserum), -1 bedeutet ohne zeitliches Limit (Vorsicht, Viren sind Autoloader!). Sind Sekunden vergangen, dann verabschiedet sich der Virus, bei einer Seuche bleibt der Virus die mit set_immun_time() gesetzte Zeit bestehen und wirkt als Schutz gegen diese spezielle Seuche. VERWEISE: add_virus_dur, query_virus_dur, set_immun_time, set_virus_min, query_infected_since GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_dur DEKLARATION: int query_virus_dur() BESCHREIBUNG: Liefert die momentane Dauer eines Virus VERWEISE: set_virus_dur, add_virus_dur, query_infected_since GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: add_virus_dur DEKLARATION: void add_virus_dur(int duration) BESCHREIBUNG: Damit aendert man die Dauer eines Virus. VERWEISE: set_virus_dur, query_virus_dur, query_infected_since GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_infected_since DEKLARATION: int query_infected_since() BESCHREIBUNG: Liefert, seit wann ein Spieler mit einem Virus infiziert ist. VERWEISE: set_virus_dur, query_virus_dur, add_virus_dur GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_vanishing_virus DEKLARATION: void set_vanishing_virus() BESCHREIBUNG: Setzt einen Virus auf 'old style', das heisst, er verschwindet, wenn man sich ausloggt. VERWEISE: GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_name DEKLARATION: string query_virus_name() BESCHREIBUNG: Liefert den Namen eines Virus. VERWEISE: set_virus_name GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_name DEKLARATION: void set_virus_name(string str) BESCHREIBUNG: Setzt den Namen, ueber den ein Virus identifiziert wird. Der Name und die Id des Objekts werden gleich mit gesetzt. VERWEISE: query_virus_name GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_gender DEKLARATION: string query_virus_gender() BESCHREIBUNG: Liefert den Geschlecht eines Virus. VERWEISE: set_virus_name, query_virus_name GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_gender DEKLARATION: void set_virus_gender(string str) BESCHREIBUNG: Setzt das Geschlecht, welches zum Namen des Viruses passt. VERWEISE: query_virus_gender, set_virus_name GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_min DEKLARATION: int query_virus_min() BESCHREIBUNG: Liefert den AP-Wert, bei dem der Virus sein Opfer in Ruhe laesst. Bei 0 oder negativem Wert, fuehrt der Virus zum Tode, wenn er nicht geheilt wird. VERWEISE: set_virus_min GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_min DEKLARATION: void set_virus_min(int min) BESCHREIBUNG: Setzt die minimalen APs, bei der ein Spieler gesundet. Wenn die APs eines Spielers unter diesen Wert fallen, dann verschwindet der Virus. Es sind alle Werte erlaubt, bei Werten <= 0 bleibt der Virus, bis der Spieler tot ist, oder bis die Maximaldauer ueberschritten ist. VERWEISE: query_virus_min, set_virus_dur GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_chance DEKLARATION: void set_virus_chance(int chance) BESCHREIBUNG: Setzt bei Seuchen die Ansteckungswahrscheinlichkeit in Prozent (das heisst, es gelten nur Werte zwischen 0 und 100. 0 beudeutet: nicht Ansteckend, 100 heisst: extrem ansteckend). Die Extremwerte sollten nicht verwendet werden: Bei 0% sollte man gleich den Typ "krankheit" waehlen, 100% sind mehr als Unfair! VERWEISE: query_virus_chance GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_chance DEKLARATION: int query_virus_chance() BESCHREIBUNG: Liefert bei Seuchen die Ansteckungswahrscheinlichkeit in Prozent. Bei anderen Virustypen ist sie 0. VERWEISE: set_virus_chance GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_heal_msg DEKLARATION: void set_virus_heal_msg(string heal_msg) BESCHREIBUNG: Setzt die Meldung, die ein Spieler beim Ausheilen eines Virus bekommt. Muss nicht unbedingt gesetzt werden, fuer jeden Virus-Typ gibt es einen Default. VERWEISE: query_virus_heal_msg GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_heal_msg DEKLARATION: string query_virus_heal_msg() BESCHREIBUNG: Liefert die Meldung, die ein Spieler beim Ausheilen eines Virus bekommt. VERWEISE: set_virus_heal_msg GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: init_virus DEKLARATION: deprecated void init_virus(string name, int staerke, int bis_zu, int dauer, string aussehen, string art, string heal_msg, string gender) BESCHREIBUNG: Old-Style Funktion, bei neuen Viren bitte die Set-Funktionen verwenden. -------------- VERALTET! --------------------------------------------- Mit dieser Funktion bereitet man einen Virus auf die Verpflanzung vor. name = Name der Krankheit bzw. Vergiftung. staerke = HP-Abzug pro Minute (nur str>=0 moeglich!) bis_zu = Untere Grenze. Unterschreitet die HP-Zahl min, ist die Krankheit auskuriert. min=-1 fuer keine Untergrenze, was u.U. zum Tod des Spielers fuehrt! (ebenso min=0). dauer = Dauer der Krankheit in Sekunden. Praktisch sind nur Vielfache von 60 interessant, da der Abzug alle 60 Sekunden ausgefuehrt wird. dur=-1 heisst endlose Krankheit. Auch hierbei kann ein Spieler sterben! aussehen = Eine Beschreibung des Spielers welche in extra_look() zurueckgegeben wird. Dieser String erscheint unter der Spielerbeschreibung bei einem 'schau auf '. art = Virus-Art. Folgendes steht zur Auswahl: "verletzung", "krankheit", "gift", "seuche" und "fluch". Seuchen stecken andere Spieler an! Je nach Art des Virus, sollte man diesen auch auf unterschiedliche Arten heilen koennen. Spieler an! Krankheiten und Vergiftungen sind natuerlich auf verschiedene Arten zu heilen! heal_msg = Welche Nachricht, soll der Spieler erhalten, wenn er die Krankheit ueberwunden hat ? Wenn keine Nachrricht angegeben, wird eine Standarnachricht fuer die Art des Viruses ausgegeben. gender = Zum Name passende Geschlecht. VERWEISE: set_virus_name, query_virus_name, set_virus_str, query_virus_str, set_virus_min, query_virus_min, set_virus_dur, query_virus_dur, set_virus_type, query_virus_type, set_virus_look, query_virus_look, set_virus_heal_msg, query_virus_heal_msg GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_healed DEKLARATION: int query_virus_healed() BESCHREIBUNG: Dient bei einer Seuche dazu, zu entscheiden, ob der Virus noch aktiv ist (siehe set_immun_time()). Ein Virus, der den Player lediglich immunisiert, liefert hier 1. VERWEISE: set_immun_time, query_immun_time, heal_virus GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: do_virus_shadow_action DEKLARATION: void do_virus_shadow_action(object shadow, object virus) BESCHREIBUNG: Wird bei einem Virus mit Shadow in seinem Shadow aufgerufen, wenn der Virus seinen Schaden macht. Ein Shadow sollte nur darauf ansprechen, wenn der erste Parameter this_object() entspricht. So sollte jede Implementierung dieser Funktion ungefaehr folgenden Text am Anfang enthalten: if(shadow!=this_object()) { query_shadow_owner()->do_virus_shadow_action(shadow, virus); return; } VERWEISE: set_virus_shadow_path, query_virus_shadow_path, query_virus_shadow, set_virus_additional_data, query_virus_additional_data GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: set_virus_additional_data DEKLARATION: void set_virus_additional_data(mixed data) BESCHREIBUNG: Um in einem Virus weitere Daten ueber das Ausloggen hinaus abzuspeichern, beispielsweise Daten, die der vom Virus zu ladende Shadow benoetigt, kann diese Funktion im Virus verwendet werden. VERWEISE: set_virus_shadow_path, query_virus_shadow_path, query_virus_shadow, do_virus_shadow_action, query_virus_additional_data GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_virus_additional_data DEKLARATION: mixed query_virus_additional_data() BESCHREIBUNG: Liefert die mit set_virus_additional_data gesetzten Daten, siehe dort. VERWEISE: set_virus_shadow_path, query_virus_shadow_path, query_virus_shadow, do_virus_shadow_action, set_virus_additional_data GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: heal_virus DEKLARATION: void heal_virus() BESCHREIBUNG: heal_virus() heilt einen Virus. Dies ist das Mittel der Wahl, wenn man einen Virus heilen will, NICHT virus->remove(). (Bei Seuchen wird sonst die Immunisierung nicht durchgefuehrt!) VERWEISE: GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: forbidden_virus_infection DEKLARATION: int forbidden_virus_infection(object virus) BESCHREIBUNG: Bevor der Virus virus ein Lebewesen who infizieren darf, wird in who who->forbidden("virus_infection", virus) aufgerufen, liefert dieser Aufruf einen Wert ungleich 0 zurueck, wird der Virus zerstoert. Die Funktion forbidden ruft in allen mit who->add_controller( "forbidden_virus_infection", other) angemeldeten Objekten other die Funktionen other->forbidden_virus_infection(virus) auf. Liefert auch nur eine dieser Funktionen einen Wert ungleich 0, dann returnt forbidden diesen und das Lebewesen who kann nicht infiziert werden, der Virus wird zerstoert. Fuer die Ausgabe einer Meldung an das Lebewesen muss der Programmierer in forbidden_virus_infection oder forbidden, falls er diese Funktion ueberlagern will, sorgen. Eine moegliche Anwendung koennte ein Heiltrank sein, der fuer eine kurze Zeitspanne die Ansteckung durch bestimmte Viren verhindert. VERWEISE: forbidden, notify, notify_virus_infection GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: notify_virus_infection DEKLARATION: void notify_virus_infection(object virus) BESCHREIBUNG: Nachdem ein Lebewesen who mit dem Virus virus infiziert wurde, wird who->notify("virus_infection", virus) im Lebewesen aufgerufen. Die Funktion notify ruft in allen mit who->add_controller( "notify_virus_infection", other) angemeldeten Objekten other die Funktionen other->notify_virus_infection(virus) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf die Infektion des Lebewesens who durch virus zu reagieren. Eine Moeglichkeit waere ein Objekt, welches das Immunsystem staerkt und Krankheiten/Seuchen nach Beginn abschwaecht. VERWEISE: forbidden, notify, forbidden_virus_infection GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: notify_virus_cure DEKLARATION: void notify_virus_cure(object virus) BESCHREIBUNG: Nachdem ein Lebewesen who mit dem Virus virus gesund geworden ist, wird who->notify("virus_cure", virus) im Lebewesen aufgerufen. Die Funktion notify ruft in allen mit who->add_controller( "notify_virus_cure", other) angemeldeten Objekten other die Funktionen other->notify_virus_cure(virus) auf. Sowohl who als auch other haben dann eine Moeglichkeit, auf die Heilung des Lebewesens who mit dem Virus zu reagieren. VERWEISE: forbidden, notify, forbidden_virus_cure GRUPPEN: virus SOURCE: /obj/virus.c FUNKTION: query_conservation_arg DEKLARATION: mixed query_conservation_arg() BESCHREIBUNG: Folgende Rueckgabewerte unterscheidet das Schliessfach: - 0: kein Einlagern - != 0 Diese Daten werden gespeichert und beim Auslagern an init_conservation_arg uebergeben. VERWEISE: query_conservation_arg_sh, init_conservation_arg GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: init_conservation_arg DEKLARATION: void init_conservation_arg(mixed m) BESCHREIBUNG: Nach dem Auslagern == Wiedererschaffen wird diese Funktion mit den Daten aufgerufen, die mit query_conservation_arg gesetzt wurden. VERWEISE: query_conservation_arg_sh, query_conservation_arg GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: query_conservation_arg_sh DEKLARATION: mixed query_conservation_arg_sh(object shadow) BESCHREIBUNG: Bei einem Shadow, der die Einlagerung ueberstehen sollm liefert diese Funktion alle Variablen zurueck, die fuer den spaeteren Gebrauch gespeichert werden sollen. Im einfachsten Fall ist das eine 1, in komplizierteren Faellen kann ein Array oder Mapping mit allen wichtigen Daten zurueckgeliefert werden. Eine 0 sollte bei einem Autoloadshadow auf keinen Fall geliefert werden. Diese Funktion sollte nur etwas liefern, wenn das Shadow direkt mit dem 1. Parameter angesprochen wurde, ansonsten den Aufruf an query_shadow_owner weiterleiten. Beispiel: mixed query_conservation_arg_sh(object shadow) { if(shadow!=this_object()) return query_shadow_owner()->query_conservation_arg_sh(shadow); return irgendwelcheinteressantendatendieabgespeichertwerdensollen; } VERWEISE: init_conservation_shadow_arg GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: init_conservation_shadow_arg DEKLARATION: void init_conservation_shadow_arg(mixed m) BESCHREIBUNG: Beim Wiedererschaffen(auslagern) wird der Shadow geladen und vor dem Ueberwerfen ueber den Gegenstand mittels init_conservation_shadow_arg initialisiert, welche als Daten durch query_conservation_arg_sh uebergeben wurde. VERWEISE: query_conservation_arg_sh, init_conservation_arg GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: precheck_conservation DEKLARATION: string precheck_conservation(mapping check_attributes) BESCHREIBUNG: Gibt ein Objekt oder Shadow einen String zurueck, so wird dieser als Begruendung genommen, warum dieser (zur Zeit?) nicht armafest gelagert werden kann. 0 sonst. Abhaengig vom environment() koennen Einlagerungen in Behaeltern gesondert behandelt werden. check_attributes enthaelt folgende Schlüssel für den precheck_conservation: - ZB_CHECK_TYPE - ZB_CT_UNKNOWN: ist nur während der Umstellung unbekannt. - ZB_CT_TEST_ONLY: für Seherkristall und ähnliches. - ZB_CT_SCHLIESSFACH: Das Bankschliessfach - ZB_CT_SPEZIALTRUHE: Die Schiffsmoebel-Spezialtruhe - ZB_CT_AUKTION: Eine Auktion (erzeugen/einlagern) - ZB_CHECK_CON Das Objekt/Mapping der Schliessfach/Truhe/Auktionator, was das Einlagern macht. - ZB_CHECKER_OB Das object/mapping, was die aktuelle Prüfung durchführt. VERWEISE: query_conservation_arg GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: precheck_conservation DEKLARATION: string precheck_conservation(object ob,mapping check_attributes) BESCHREIBUNG: Liefert ein Objekt ob->query(P_CONSERVATION,P_CONSERVATION_FACTORY) einen String, so wird touch(factory)->precheck_conservation(ob) aufgerufen. Gibt diese Funktion einen Text zurueck, so wird dieser als Begruendung genommen, warum dieses Objekt (zur Zeit?) nicht armafest gelagert werden kann. Bei Rueckgabe von 0 ist das Einlagern prinzipiell moeglich. Abhaengig vom environment() koennen Einlagerungen in Behaeltern gesondert behandelt werden. check_attributes siehe check_conservation VERWEISE: get_conservation_data, get_conservation_object,check_conservation GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: get_conservation_data DEKLARATION: mixed get_conservation_data(object ob) BESCHREIBUNG: Liefert ein Objekt ob->query(P_CONSERVATION,P_CONSERVATION_FACTORY) einen String, so wird beim Einlagern touch(factory)->get_conservation_data(ob) aufgerufen. Gibt die Funktion 0 zurueck, so wird nicht eingelagert, ein Grund sollte vorher mit precheck_conservation geliefert werden. Jeder andere Wert wird beim Einlagern gespeichert und beim Auslagern zusammen mit dem Wert der Property ob->query(P_CONSERVATION,P_CONSERVATION_IDENTIFIER) an get_conservation_object gegeben. VERWEISE: precheck_conservation, get_conservation_object GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: get_conservation_object DEKLARATION: varargs object get_conservation_object(string identifier,mixed data) BESCHREIBUNG: Zwei Aufrufarten: vom reset eines Raumes oder anderen Objektes wird zur Erzeugung get_conservation_object(identifier) aufgerufen, dass Objekt wird erzeugt, initialisiert, die Schluessel P_CONSERVATION_FACTORY und P_CONSERVATION_IDENTIFIER in der Property P_CONSERVATION (aus properties.h) werden gesetzt und das Objekt zur weiteren Verwendung zurueckgegeben. In der anderen Verwendungsart wird beim Auslagern diese Funktion der identifier zusammen mit den vorher gespeicherten Daten aufgerufen, um das Objekt wie oben zu initialisieren und in den durch die Zusatzdaten gespeicherten Status versetzt. VERWEISE: precheck_conservation, get_conservation_data GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: query_conservation_item_rent DEKLARATION: float query_conservation_item_rent() BESCHREIBUNG: Gibt ein Objekt einen Wert groesser 0.0 (Taler!) zurueck, so wird diese als aktuelle Gegenstandsmiete angenommen. GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: query_conservation_item_rent DEKLARATION: float query_conservation_item_rent(object ob) BESCHREIBUNG: Gibt diese Funktion fuer eine Factory (ob->query(P_CONSERVATION,P_CONSERVATION_FACTORY)) fuer dieses Objekt einen Wert groesser 0.0 (Taler!) zurueck, so wird diese als aktuelle Gegenstandsmiete angenommen. GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: prepare_conservation DEKLARATION: void prepare_conservation() BESCHREIBUNG: Meldet beim Objekt den Beginn der Pruefung auf Einlagerung, d.h man kann dort controller abmelden, die eine Pruefung verhindern wuerden. GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: abort_conservation DEKLARATION: void abort_conservation() BESCHREIBUNG: Meldet beim Objekt den Abbruch der Pruefung bzw. der Einlagerung. Man kann die in prepare_conservation abgemeldeten Controller wieder anmelden. GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: done_conservation DEKLARATION: void done_conservation() BESCHREIBUNG: Meldet beim Objekt den Abschluss der Einlagerung, danach wird das Objekt zerstoert! GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: finish_conservation DEKLARATION: void finish_conservation() BESCHREIBUNG: Meldet beim Objekt den Abschluss der Auslagerung. Man kann die in prepare_conservation abgemeldeten Controller wieder anmelden. GRUPPEN: armageddon SOURCE: /room/bank/obj/schliessfaecher.c FUNKTION: get_death_message DEKLARATION: string get_death_message(object who) BESCHREIBUNG: Diese Funktion in der Kirche liefert die Meldung, welche ueber den Todeskanal gesendet wird, wenn der Spieler 'who' stirbt. VERWEISE: set_kirche GRUPPEN: spieler SOURCE: /room/church.c FUNKTION: event DEKLARATION: varargs int event(mixed event_nr, mixed origin_ob, string inmess, mixed param) BESCHREIBUNG: Mit EVENT_MASTER->event(kanal, verursacher, meldung, parameter) wird eine Meldung mit dem Kurier verschickt. Kanal kann dabei die Kanalnummer oder die Kanalbezeichnung sein. Parameter ist kanalabhaengig und wird von der Formatierfunktion des Kanales verwendet. Bei Gildenkanaelen enthaelt er die Meldung fuer den Verursacher. (Er bekommt dann zumindest ein "Ok.", wenn er den Kanal nicht hoert.) Das Define EVENT_MASTER ist in /sys/config.h definiert. GRUPPEN: grundlegendes SOURCE: /secure/event.c FUNKTION: add_acl_entry DEKLARATION: string add_acl_entry(string datei, string grouporwiz, int aclmask) BESCHREIBUNG: Fuegt fuer die Datei / das Verzeichnis pfad und die Gruppe oder den Wizard grouporwiz den ACL - Eintrag hinzu, welcher durch die aclmask festgelegt ist. Gibt einen String mit einer Fehlermeldung zurueck, falls es nicht geklappt hat, oder 0, falls es geklappt hat. VERWEISE: delete_acl_entry, query_acl_entry, query_access GRUPPEN: master, acl SOURCE: /secure/master/acl.inc FUNKTION: delete_acl_entry DEKLARATION: string delete_acl_entry(string datei, string grouporwiz, int aclmask) BESCHREIBUNG: Entfernt fuer die Datei / das Verzeichnis pfad und die Gruppe oder den Wizard grouporwiz den ACL - Eintrag, welcher durch die aclmask festgelegt ist. Gibt eine Fehlermeldung zurueck, wenns nicht geklappt hat, sonst 0. VERWEISE: add_acl_entry, query_acl_entry, query_access GRUPPEN: master, acl SOURCE: /secure/master/acl.inc FUNKTION: delete_acl_dir DEKLARATION: string delete_acl_dir(string datei) BESCHREIBUNG: Entfernt alle ACLs in diesem Verzeichnis und seinen Unterverzeichnissen Gibt eine Fehlermeldung zurueck, wenns nicht geklappt hat, sonst 0. VERWEISE: delete_acl_entry, add_acl_entry, query_acl_entry, query_access GRUPPEN: master, acl SOURCE: /secure/master/acl.inc FUNKTION: dump_acl_entries DEKLARATION: string dump_acl_entries(string datei, int mode) BESCHREIBUNG: Liefert fuer die Datei / das Verzeichnis die ACL - Eintraege in Form eines Strings. Ist mode = 1, so werden auch die Unterverzeichnisse mit aufgelistet, fuer die ACL Eintraege existieren. Ist mode = 2, so werden alle Eintraege auf dem Weg zu dieser Datei / diesem Verzeichnis aufgelistet. VERWEISE: add_acl_entry, delete_acl_entry, query_access GRUPPEN: master, acl SOURCE: /secure/master/acl.inc FUNKTION: query_access DEKLARATION: int query_access(string *pfad, string wizorfile, int aclmask) BESCHREIBUNG: Liefert 1, falls der Wizzard bzw die Datei fuer die Datei bzw das Verzeichnis pfad die durch die aclmask spezifizierten Rechte besitzt. Diese ergeben sich aus den vollstaendigen Rechten des Wizzards bzw. der Datei entlang des Pfades. Sind die gewuenschten Rechte nicht komplett vorhanden, so wird 0 zurueckgeliefert, andernfalls 1. VERWEISE: add_acl_entry, delete_acl_entry, query_acl_entry GRUPPEN: master, acl SOURCE: /secure/master/acl.inc FUNKTION: query_acl_entry DEKLARATION: int query_acl_entry(string pfad, string groupwizfile, int aclmask) BESCHREIBUNG: Testet fuer die Datei / das Verzeichnis pfad und die Gruppe oder den Wizard oder die Datei groupwizfile, ob die in der aclmask uebergebenen Rechte vorhanden sind. Wenn ja, liefert diese Funktion eine 1, wenn nein, eine 0. Die Flags, aus denen die aclmask per Veroderung entsteht, sind in /sys/acl.h definiert. VERWEISE: add_acl_entry, delete_acl_entry, query_access GRUPPEN: master, acl SOURCE: /secure/master/acl.inc FUNKTION: query_debugger_acl DEKLARATION: string *query_debugger_acl (string *pfad) BESCHREIBUNG: Liefert alle Goetter und Gruppen, die fuer eine bestimmte Datei Debugger sind. Das sind all die, die entlang des Dateipfades irgendwo entweder ACL_WRITE oder ACL_DEBUG besitzen. Es werden dabei nur existierende Gruppen und Goetter geliefert. VERWEISE: add_acl_entry, delete_acl_entry, query_acl_entry GRUPPEN: master, acl SOURCE: /secure/master/acl.inc FUNKTION: notify_delete_player DEKLARATION: void notify_delete_player(string real_name) BESCHREIBUNG: Wenn ein Spieler (kein Gast) geloescht wird, dann wird CONTROL->notify("delete_player", real_name) aufgerufen. notify ruft dann in allen mit CONTROL->add_controller( "notify_delete_player", other) angemeldeten Blueprints other die Funktion other->notify_delete_player(real_name) auf. CONTROL ist ein Define aus VERWEISE: notify, add_control, GRUPPEN: spieler SOURCE: /secure/player_deleter.c FUNKTION: query DEKLARATION: mixed query(string name, string var | mapping vars | string *vars) BESCHREIBUNG: Mit dieser Funktion des PLAYER_READER's (definiert in config.h) kann man auf Variablen des Players auslesen, waehrend dieser ausgeloggt ist. Zugriff ist aber nur auf wenige Variablen, wie 'age', 'last_login', 'name', 'adjektiv', 'gilde' und aehnliches moeglich. Welche Variablen genau zur Verfuegung stehen, steht in dieser Datei am Anfang in einem Mapping. var kann entweder ein String sein, dann wird der Wert dieser Variablen zurueckgeliefert. Ist vars ein mapping, so stellen die Schluessel die Variablennamen dar und das Ergebnis wird im zugehoerigen Wert gespeichert. Ist vars ein Array, so wird ein Array mit den Werten zurueckgeliefert. VERWEISE: GRUPPEN: spieler SOURCE: /secure/player_reader.c FUNKTION: query_guests DEKLARATION: object* query_guests() BESCHREIBUNG: Liefert alle hier herumlaufenden Gaeste. GRUPPEN: Portal SOURCE: /secure/portal/portal.c FUNKTION: query_guest DEKLARATION: object query_guest(string name) BESCHREIBUNG: Liefert das Objekt zu dem Gast mit Namen. GRUPPEN: Portal SOURCE: /secure/portal/portal.c FUNKTION: portal_exists DEKLARATION: int portal_exists(string name) BESCHREIBUNG: Liefert 1, wenn der Name ein bekanntes (in /static/adm/PORTALS vorhandenes) Portal darstellt. VERWEISE: set_portal_name GRUPPEN: Portal SOURCE: /secure/portal/portal.c FUNKTION: is_homemud DEKLARATION: string is_homemud(string name) BESCHREIBUNG: Liefert den Namen des Gottes, wenn das Portal in ein HomeMUD fuehrt. VERWEISE: portal_exists GRUPPEN: Portal SOURCE: /secure/portal/portal.c FUNKTION: query_portal_room DEKLARATION: object query_portal_room(string name, object pl) BESCHREIBUNG: Liefert einen Raum zurueck, in welchen der Spieler bewegt werden muss, um das Portal 'name' zu betreten. VERWEISE: set_portal_name GRUPPEN: Portal SOURCE: /secure/portal/portal.c FUNKTION: enter_portal DEKLARATION: void enter_portal(object player, mapping info) BESCHREIBUNG: Betritt das Portal. VERWEISE: set_portal_name GRUPPEN: Portal SOURCE: /secure/portal/portal.c FUNKTION: send_command DEKLARATION: void send_command(object player, mapping info, string cmd) BESCHREIBUNG: Sendet einen Befehl an das Gast-MUD. VERWEISE: enter_portal GRUPPEN: Portal SOURCE: /secure/portal/portal.c FUNKTION: send_message DEKLARATION: void send_message(mapping data) BESCHREIBUNG: Sendet eine Meldung an das Original-MUD. VERWEISE: enter_portal, send_command GRUPPEN: Portal SOURCE: /secure/portal/portal.c FUNKTION: send_savedata DEKLARATION: void send_savedata(mapping data) BESCHREIBUNG: Speichert Daten im Original-MUD. VERWEISE: enter_portal, send_command, send_message GRUPPEN: Portal SOURCE: /secure/portal/portal.c FUNKTION: send_quit DEKLARATION: void send_quit() BESCHREIBUNG: Beendet den Gastauftritt. VERWEISE: enter_portal, send_command, send_message, send_savedata GRUPPEN: Portal SOURCE: /secure/portal/portal.c FUNKTION: query_finger_info_text DEKLARATION: string query_finger_info_text() BESCHREIBUNG: Diese Funktion kann im Monster geschrieben werden, um einem Spieler beim Anfingern des NPCs einen Text auszugeben. Der NPC muss dazu (zu diesem Zeitpunkt) geladen sein, im Rathaus als anfingerbarer NPC im Rathaus in /room/rathaus/npcfinger eingetragen worden sein, und ist muss dort angegeben werden, dass dieser NPC nurdefault=nein hat. Liefert die Funktion query_finger_info_text dann einen String != 0 zurueck, so wird dieser einem Spieler beim Anfingern des NPCs ausgegeben. GRUPPEN: monster SOURCE: /secure/udp/finger.c FUNKTION: MAY_WRITE DEKLARATION: int MAY_WRITE(string filename, object wiz_or_master) BESCHREIBUNG: Liefert einen Wert != 0, wenn der angegebene Gott oder das angegebene Objekt in die angegebene Datei schreiben darf. VERWEISE: query_access GRUPPEN: master, acl SOURCE: /sys/acl.h FUNKTION: AHD_LISTE DEKLARATION: Liste der Schadenstypen BESCHREIBUNG: Der Eintrag AH_DAMAGE_TYPE bei add_hp gibt an, welcher Art der angerichtete Schaden ist. Dabei werden die Typen in einem Array angegeben. Daher ist eine Kombination mehrerer Typen moeglich. AHD_STICH Stichverletzung: Dolchstich, Nadelstich, Pfeil AHD_SCHNITT Schnittverletzung: Schwerthieb AHD_STUMPF Verletzungen ohne Spitzen oder scharfen Kanten. AHD_HEILIG Magischer Schaden einer guten Kraft AHD_DAEMONISCH Magischer Schaden einer boesen Kraft AHD_TOD Schaden wirkt besonders auf Lebendige AHD_LEBEN Schaden wirkt besonders auf (Un)tote AHD_FEUER Schaden durch Feuer AHD_WASSER Schaden durch Wasser AHD_ERDE Schaden durch Erde AHD_LUFT Schaden durch Luft/Wind AHD_MAGIE Magischer Schaden AHD_ANSTRENGUNG Schaden durch besondere Anstrengung AHD_ERSTICKEN Schaden durch mangelnde Sauerstoffzufuhr AHD_KAELTE Schaden durch Kaelte AHD_WAERME Schaden durch Waerme AHD_EXPLOSION Schaden aufgrund einer Explosion AHD_SAEURE Schaden durch Saeure AHD_GIFT Schaden durch Gift (vergiftetes Wasser, Lebensmittel) AHD_ELEKTRIZITAET Schaden von Elektrizitaet AHD_LAERM Schaden durch Laerm VERWEISE: add_hp GRUPPEN: monster, spieler, kampf SOURCE: /sys/add_hp.h FUNKTION: DEBUG DEKLARATION: void DEBUG(string text) BESCHREIBUNG: Debugging-Funktion, die wrap(text) an einen zuvor per #define DEBUGGER definierten Programmierer per send_message_to() ausgibt. Wenn DEBUGGER nicht vor #include definiert oder nicht anwesend ist, macht DEBUG() nichts. Beispiel: #define DEBUGGER "francis" #include ... DEBUG(object_name()+": soeinpechaberauch\n"); Besonderheit: DEBUG() wird im Define schon mit einem Strichpunkt abgeschlossen, man kann ihn also weglassen. VERWEISE: DEBUGX, DEBUGTX GRUPPEN: debugging SOURCE: /sys/debug.h FUNKTION: DEBUGX DEKLARATION: unknown DEBUGX(unknown expr) BESCHREIBUNG: Debugging-Funktion, die den Ausdruck expr berechnet und an einen zuvor per #define DEBUGGER definierten Programmierer per send_message_to() ausgibt und den berechneten Wert zurueckgibt. Wenn DEBUGGER nicht vor #include definiert oder nicht anwesend ist, liefert DEBUGX(expr) einfach nur expr. Enthaelt expr Anfuehrungszeichen (" oder '), so bekommt man eine Fehlermeldung. In diesem Falle kann man DEBUGTX() verwenden. Beispiel: --- Schnipp! -------------------------------------------------------------- // Das Define muss vor dem Include stehen! #define DEBUGGER "pulami" #include void zaehle_hoch(int i) { DEBUG("--- Neuer Aufruf von zaehle_hoch() ---"); DEBUGX(i); if(DEBUGX(i<3)) call_out("zaehle_hoch",DEBUGX(1+random(2)),i+1); else { if(DEBUGX(this_player())) this_player()->send_message_to(this_player(),MT_NOTIFY,MA_UNKNOWN, "Fertig!\n"); destruct(DEBUGX(this_object())); } } void create() { zaehle_hoch(1); } --- Schnapp! -------------------------------------------------------------- Ergibt folgende Ausgabe: --- Schnipp! -------------------------------------------------------------- --- Neuer Aufruf von zaehle_hoch() --- i=1 i<5=1 1+random(2)=2 --- Neuer Aufruf von zaehle_hoch() --- i=2 i<5=1 1+random(2)=1 --- Neuer Aufruf von zaehle_hoch() --- i=3 i<3=0 this_player()=/obj/player#3 ("pulami") Fertig! this_object()=/w/pulami/test ("UID:w:pulami") --- Schnapp! -------------------------------------------------------------- Dokumentiert man #define DEBUGGER "pulami" aus, dann erhaelt man nur eine Zeile: Fertig! VERWEISE: DEBUG, DEBUGTX GRUPPEN: debugging SOURCE: /sys/debug.h FUNKTION: DEBUGTX DEKLARATION: unknown DEBUGTX(string text, unknown expr) BESCHREIBUNG: Debugging-Funktion, die den Ausdruck expr berechnet und an einen zuvor per #define DEBUGGER definierten Programmierer per send_message_to() ausgibt und den berechneten Wert zurueckgibt. Wenn DEBUGGER nicht vor #include definiert oder nicht anwesend ist, liefert DEBUGTX(text, expr) einfach nur expr. DEBUGTX() ist fuer den Fall gedacht, dass expr Anfuehrungszeichen (" oder ') enthaelt und DEBUGX() eine Fehlermeldung erzeugen wuerde. Kommentiertes Beispiel: fun(DEBUGX(query_name()+"!")); sollte sowas wie query_name()+"!"="peter!" ergeben, die Anfuehrungszeichen verhindern dies leider. Stattdessen kann man bei DEBUGTX den Text bis einschliesslich dem "=" angeben: fun(DEBUGTX("query_name()+\"!\"=",query_name()+"!")); liefert das gewuenschte, eher wird man wohl sowas wie fun(DEBUGTX("qn+!=",query_name()+"!")) nehmen und qn+!="peter!" erhalten. VERWEISE: DEBUG, DEBUGX GRUPPEN: debugging SOURCE: /sys/debug.h FUNKTION: T_LISTE DEKLARATION: Liste allgemeiner T-Defines BESCHREIBUNG: Vordefinierte Bedingungen: - T_ELSE Die unmittelbar vorherige Bedingung war falsch. - T_AND(cond1, cond2) cond1 und cond2 sind wahr. - T_OR(cond1, cond2) cond1 oder cond2 ist wahr. - T_NOT(cond) cond ist falsch. - T_FUNC(func) Der Aufruf von func(info, ) liefert einen Wert != 0. - T_FUNCV(func, pars) Der Aufruf von func(info, pars...) liefert != 0. - T_CALL_OTHER(ob, fn) Der Aufruf von ob->fn(info) liefert einen Wert != 0. - T_CALL_OTHERV(o,f,p) Der Aufruf von o->f(i, p...) liefert einen Wert != 0. - T_CL(cl) Der Aufruf von cl(info) liefert einen Wert != 0. - T_CLV(cl, pars) Der Aufruf von cl(info, pars...) liefert != 0. - T_GREATER(what, num), T_LESSER(what, num), T_GREATER_EQUAL(what, num), T_LESSER_EQUAL(what, num), T_EQUAL(what, num), T_NOT_EQUAL(what, num) num ist >, <, >=, <=, == bzw. != der Eigenschaft what. Die Eigenschaft what wird durch entsprechende TN-Defines (z.B. TN_STAT_INT) dargestellt und durch desc_number ermittelt. Vordefinierte Filter: - T_FILTER_FUNC(func) Ergebnis = func(info, original) - T_FILTER_FUNCV(func,pars) Ergebnis = func(info, original, pars...) - T_FILTER_CALL_OTHER(ob, fun) Ergebnis = ob->fun(info, original) - T_FILTER_CALL_OTHERV(o,f,p) Ergebnis = o->f(info, original, p...) - T_FILTER_CL(cl) Ergebnis = cl(info, original) - T_FILTER_CLV(cl, pars) Ergebnis = cl(info, original, pars...) Vordefinierte Texte: - T_TEXT_FUNC(func) Ergebnis = func(info) - T_TEXT_FUNCV(func,pars) Ergebnis = func(info, pars...) - T_TEXT_CALL_OTHER(ob, fun) Ergebnis = ob->fun(info) - T_TEXT_CALL_OTHERV(ob,fun,p) Ergebnis = ob->fun(info, p...) - T_TEXT_CL(cl) Ergebnis = cl(info) - T_TEXT_CLV(cl, pars) Ergebnis = cl(info, pars...) VERWEISE: compile_desc, desc_number GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_ELSE DEKLARATION: T_ELSE BESCHREIBUNG: T_ELSE ist eine Bedingung in Beschreibungen, welche wahr ist, wenn die unmittelbar vorhergehende Bedingung falsch ist. VERWEISE: compile_desc GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_AND DEKLARATION: T_AND(cond1, cond2) BESCHREIBUNG: T_AND ist eine Bedingung in Beschreibungen, welche wahr ist, wenn die beiden angegebenen Bedingungen 'cond1' und 'cond2' wahr sind. VERWEISE: compile_desc, T_OR GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_OR DEKLARATION: T_OR(cond1, cond2) BESCHREIBUNG: T_OR ist eine Bedingung in Beschreibungen, welche wahr ist, wenn mindestens eine der beiden angegebenen Bedingungen 'cond1' und 'cond2' wahr ist. VERWEISE: compile_desc, T_AND GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_GREATER DEKLARATION: T_GREATER(what, num) BESCHREIBUNG: T_GREATER ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der angenebene Wert 'what' groesser als 'num' ist. 'what' ist dabei ein von der Funktion desc_number auszuwertendes TN-Define wie z.B. TN_STAT_INT. VERWEISE: compile_desc, desc_number, T_GT, T_LESSER, T_EQUAL, T_NOT_EQUAL, T_GREATER_EQUAL, T_LESSER_EQUAL GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_LESSER DEKLARATION: T_LESSER(what, num) BESCHREIBUNG: T_LESSER ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der angenebene Wert 'what' kleiner als 'num' ist. 'what' ist dabei ein von der Funktion desc_number auszuwertendes TN-Define wie z.B. TN_STAT_INT. VERWEISE: compile_desc, desc_number, T_LT, T_GREATER, T_EQUAL, T_NOT_EQUAL, T_GREATER_EQUAL, T_LESSER_EQUAL GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_EQUAL DEKLARATION: T_EQUAL(what, num) BESCHREIBUNG: T_EQUAL ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der angenebene Wert 'what' gleich 'num' ist. 'what' ist dabei ein von der Funktion desc_number auszuwertendes TN-Define wie z.B. TN_STAT_INT. VERWEISE: compile_desc, desc_number, T_EQ, T_GREATER, T_LESSER, T_NOT_EQUAL, T_GREATER_EQUAL, T_LESSER_EQUAL GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_NOT_EQUAL DEKLARATION: T_NOT_EQUAL(what, num) BESCHREIBUNG: T_NOT_EQUAL ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der angenebene Wert 'what' ungleich 'num' ist. 'what' ist dabei ein von der Funktion desc_number auszuwertendes TN-Define wie z.B. TN_STAT_INT. VERWEISE: compile_desc, desc_number, T_NE, T_GREATER, T_LESSER, T_EQUAL, T_GREATER_EQUAL, T_LESSER_EQUAL GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_GREATER_EQUAL DEKLARATION: T_GREATER_EQUAL(what, num) BESCHREIBUNG: T_GREATER_EQUAL ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der angenebene Wert 'what' groesser oder gleich 'num' ist. 'what' ist dabei ein von der Funktion desc_number auszuwertendes TN-Define wie z.B. TN_STAT_INT. VERWEISE: compile_desc, desc_number, T_GE, T_GREATER, T_LESSER, T_EQUAL, T_NOT_EQUAL, T_LESSER_EQUAL GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_LESSER_EQUAL DEKLARATION: T_LESSER_EQUAL(what, num) BESCHREIBUNG: T_LESSER_EQUAL ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der angenebene Wert 'what' kleiner oder gleich 'num' ist. 'what' ist dabei ein von der Funktion desc_number auszuwertendes TN-Define wie z.B. TN_STAT_INT. VERWEISE: compile_desc, desc_number, T_LE, T_GREATER, T_LESSER, T_EQUAL, T_NOT_EQUAL, T_GREATER_EQUAL GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_GT DEKLARATION: T_GT(what, num) BESCHREIBUNG: T_GT ist eine Abkuerzung fuer T_GREATER VERWEISE: compile_desc, T_GREATER, T_LT, T_EQ, T_NE, T_GE, T_LE GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_LT DEKLARATION: T_LT(what, num) BESCHREIBUNG: T_LT ist eine Abkuerzung fuer T_LESSER VERWEISE: compile_desc, T_LESSER, T_GT, T_EQ, T_NE, T_GE, T_LE GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_EQ DEKLARATION: T_EQ(what, num) BESCHREIBUNG: T_EQ ist eine Abkuerzung fuer T_EQUAL VERWEISE: compile_desc, T_EQUAL, T_GT, T_LT, T_NE, T_GE, T_LE GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_NE DEKLARATION: T_NE(what, num) BESCHREIBUNG: T_NE ist eine Abkuerzung fuer T_NOT_EQUAL VERWEISE: compile_desc, T_NOT_EQUAL, T_GT, T_LT, T_EQ, T_GE, T_LE GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_GE DEKLARATION: T_GE(what, num) BESCHREIBUNG: T_GE ist eine Abkuerzung fuer T_GREATER_EQUAL VERWEISE: compile_desc, T_GREATER_EQUAL, T_GT, T_LT, T_EQ, T_NE, T_LE GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_LE DEKLARATION: T_LE(what, num) BESCHREIBUNG: T_LE ist eine Abkuerzung fuer T_LESSER_EQUAL VERWEISE: compile_desc, T_LESSER_EQUAL, T_GT, T_LT, T_EQ, T_NE, T_GE GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_FUNC DEKLARATION: T_FUNC(func) BESCHREIBUNG: T_FUNC ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der Aufruf der Funktion 'func' einen Wert != 0 liefert. Die Funktion enthaelt als ersten Parameter ein info-Mapping (siehe query_long_exec fuer die Details). VERWEISE: compile_desc, desc_call_func, T_FUNCV, T_CALL_OTHER, T_CALL_OTHERV, T_CL, T_CLV, query_long_exec GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_FUNCV DEKLARATION: T_FUNCV(func, pars) BESCHREIBUNG: T_FUNCV ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der Aufruf der Funktion 'func' mit den Elementen aus 'pars' als 2. und folgende Parameter einen Wert != 0 liefert. Die Funktion enthaelt als ersten Parameter ein info-Mapping (siehe query_long_exec fuer die Details). VERWEISE: compile_desc, desc_call_func, T_FUNC, T_CALL_OTHER, T_CALL_OTHERV, T_CL, T_CLV, query_long_exec GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_CALL_OTHER DEKLARATION: T_CALL_OTHER(obj, func) BESCHREIBUNG: T_CALL_OTHER ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der Aufruf der Funktion 'func' im Objekt 'obj' einen Wert != 0 liefert. Die Funktion enthaelt als ersten Parameter ein info-Mapping (siehe query_long_exec fuer die Details). VERWEISE: compile_desc, desc_call_func, T_CALL_OTHERV, T_FUNC, T_FUNCV, T_CL, T_CLV, query_long_exec GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_CALL_OTHERV DEKLARATION: T_CALL_OTHERV(obj, func, pars) BESCHREIBUNG: T_CALL_OTHERV ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der Aufruf der Funktion 'func' im Objekt 'obj' mit den Elementen aus 'pars' als 2. und folgende Parameter einen Wert != 0 liefert. Die Funktion enthaelt als ersten Parameter ein info-Mapping (siehe query_long_exec fuer die Details). VERWEISE: compile_desc, desc_call_func, T_CALL_OTHER, T_FUNC, T_FUNCV, T_CL, T_CLV, query_long_exec GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_CL DEKLARATION: T_CL(cl) BESCHREIBUNG: T_CL ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der Aufruf der Closure 'cl' einen Wert != 0 liefert. Die Closure erhaelt als ersten Parameter den Wert, welcher der von compile_desc generierten Closure beim Aufruf uebergeben wurde. VERWEISE: compile_desc, desc_call_cl, T_FUNC, T_FUNCV, T_CALL_OTHER, T_CALL_OTHERV, T_CLV GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_CLV DEKLARATION: T_CLV(cl, pars) BESCHREIBUNG: T_CLV ist eine Bedingung in Beschreibungen, welche wahr ist, wenn der Aufruf der Closure 'cl' einen Wert != 0 liefert. Die Closure erhaelt als ersten Parameter den Wert, welcher der von compile_desc generierten Closure beim Aufruf uebergeben wurde. Die Elemente aus 'pars' werden als weitere Parameter uebergeben. VERWEISE: compile_desc, desc_call_cl, T_FUNC, T_FUNCV, T_CALL_OTHER, T_CALL_OTHERV, T_CL GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_FILTER_FUNC DEKLARATION: T_FILTER_FUNC(func) BESCHREIBUNG: T_FILTER_FUNC ist ein Filter fuer Beschreibungen. Dabei wird die Funktion 'func' mit dem zu filternden Text aufgerufen, das Ergebnis wird in die Beschreibung uebernommen. VERWEISE: compile_desc, desc_call_func, T_FILTER_FUNCV, T_FILTER_CALL_OTHER, T_FILTER_CALL_OTHERV, T_FILTER_CL, T_FILTER_CLV GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_FILTER_FUNCV DEKLARATION: T_FILTER_FUNCV(func, pars) BESCHREIBUNG: T_FILTER_FUNCV ist ein Filter fuer Beschreibungen. Dabei wird die Funktion 'func' mit dem zu filternden Text und den Elementen aus 'pars' als weitere Parameter aufgerufen, das Ergebnis wird in die Beschreibung uebernommen. VERWEISE: compile_desc, desc_call_func, T_FILTER_FUNC, T_FILTER_CALL_OTHER, T_FILTER_CALL_OTHERV, T_FILTER_CL, T_FILTER_CLV GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_FILTER_CALL_OTHER DEKLARATION: T_FILTER_CALL_OTHER(obj, func) BESCHREIBUNG: T_FILTER_CALL_OTHER ist ein Filter fuer Beschreibungen. Dabei wird die Funktion 'func' im Objekt 'obj' mit dem zu filternden Text aufgerufen, das Ergebnis wird in die Beschreibung uebernommen. VERWEISE: compile_desc, desc_call_func, T_FILTER_CALL_OTHERV, T_FILTER_FUNC, T_FILTER_FUNCV, T_FILTER_CL, T_FILTER_CLV GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_FILTER_CALL_OTHERV DEKLARATION: T_FILTER_CALL_OTHERV(obj, func, pars) BESCHREIBUNG: T_FILTER_CALL_OTHERV ist ein Filter fuer Beschreibungen. Dabei wird die Funktion 'func' im Objekt 'obj' mit dem zu filternden Text und den Elementen aus 'pars' als weitere Parameter aufgerufen, das Ergebnis wird in die Beschreibung uebernommen. VERWEISE: compile_desc, desc_call_func, T_FILTER_CALL_OTHER, T_FILTER_FUNC, T_FILTER_FUNCV, T_FILTER_CL, T_FILTER_CLV GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_FILTER_CL DEKLARATION: T_FILTER_CL(cl) BESCHREIBUNG: T_FILTER_CL ist ein Filter fuer Beschreibungen. Dabei wird die Closure 'cl' mit dem Wert, welcher der von compile_desc generierten Closure beim Aufruf uebergeben wurde, und dem zu filternden Text aufgerufen. Das Ergebnis wird in die Beschreibung uebernommen. VERWEISE: compile_desc, desc_call_cl, T_FILTER_FUNC, T_FILTER_FUNCV, T_FILTER_CALL_OTHER, T_FILTER_CALL_OTHERV, T_FILTER_CLV GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_FILTER_CLV DEKLARATION: T_FILTER_CLV(cl, pars) BESCHREIBUNG: T_FILTER_CLV ist ein Filter fuer Beschreibungen. Dabei wird die Closure 'cl' mit dem Wert, welcher der von compile_desc generierten Closure beim Aufruf uebergeben wurde, dem zu filternden Text und den Elementen aus pars als weitere Parameter aufgerufen. Das Ergebnis wird in die Beschreibung uebernommen. VERWEISE: compile_desc, desc_call_cl, T_FILTER_FUNC, T_FILTER_FUNCV, T_FILTER_CALL_OTHER, T_FILTER_CALL_OTHERV, T_FILTER_CL GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_TEXT_FUNC DEKLARATION: T_TEXT_FUNC(func) BESCHREIBUNG: T_TEXT_FUNC ruft die Funktion 'func' auf und fuegt das Ergebnis in die Beschreibung ein. VERWEISE: compile_desc, desc_call_func, T_TEXT_FUNCV, T_TEXT_CALL_OTHER, T_TEXT_CALL_OTHERV, T_TEXT_CL, T_TEXT_CLV GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_TEXT_FUNCV DEKLARATION: T_TEXT_FUNCV(func, pars) BESCHREIBUNG: T_TEXT_FUNCV ruft die Funktion 'func' mit den Elementen aus 'pars' als Parameter auf und fuegt das Ergebnis in die Beschreibung ein. VERWEISE: compile_desc, desc_call_func, T_TEXT_FUNC, T_TEXT_CALL_OTHER, T_TEXT_CALL_OTHERV, T_TEXT_CL, T_TEXT_CLV GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_TEXT_CALL_OTHER DEKLARATION: T_TEXT_CALL_OTHER(obj, func) BESCHREIBUNG: T_TEXT_CALL_OTHER ruft die Funktion 'func' im Objekt 'obj' auf und fuegt das Ergebnis in die Beschreibung ein. VERWEISE: compile_desc, desc_call_func, T_TEXT_CALL_OTHERV, T_TEXT_FUNC, T_TEXT_FUNCV, T_TEXT_CL, T_TEXT_CLV GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_TEXT_CALL_OTHERV DEKLARATION: T_TEXT_CALL_OTHERV(obj, func, pars) BESCHREIBUNG: T_TEXT_CALL_OTHERV ruft die Funktion 'func' im Objekt 'obj' mit den Elementen aus 'pars' als Parameter auf und fuegt das Ergebnis in die Beschreibung ein. VERWEISE: compile_desc, desc_call_func, T_TEXT_CALL_OTHER, T_TEXT_FUNC, T_TEXT_FUNCV, T_TEXT_CL, T_TEXT_CLV GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_TEXT_CL DEKLARATION: T_TEXT_CL(cl) BESCHREIBUNG: T_TEXT_CL ruft die Closure 'cl' auf und fuegt das Ergebnis in die Beschreibung ein. Die Closure erhaelt als ersten Parameter den Wert, welcher der von compile_desc generierten Closure beim Aufruf uebergeben wurde. VERWEISE: compile_desc, desc_call_cl, T_TEXT_FUNC, T_TEXT_FUNCV, T_TEXT_CALL_OTHER, T_TEXT_CALL_OTHERV, T_TEXT_CLV GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_TEXT_CLV DEKLARATION: T_TEXT_CLV(cl, pars) BESCHREIBUNG: T_TEXT_CLV ruft die Closure 'cl' auf und fuegt das Ergebnis in die Beschreibung ein. Die Closure erhaelt als ersten Parameter den Wert, welcher der von compile_desc generierten Closure beim Aufruf uebergeben wurde. Die Elemente aus 'pars' werden als weitere Parameter uebergeben. VERWEISE: compile_desc, desc_call_cl, T_TEXT_FUNC, T_TEXT_FUNCV, T_TEXT_CALL_OTHER, T_TEXT_CALL_OTHERV, T_TEXT_CL GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_TAG DEKLARATION: T_TAG(flag) BESCHREIBUNG: Dies ist ein Hinweis fuer compile_desc, dass es den Schluessel 'flag' in das Mapping 'tags' (siehe compile_desc) aufnehmen soll. VERWEISE: compile_desc, T_TAGVAL, T_TAG_COND GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_TAGVAL DEKLARATION: T_TAG(flag, val) BESCHREIBUNG: Dies ist ein Hinweis fuer compile_desc, dass es den Schluessel 'flag' mit dem Wert 'val' in das Mapping 'tags' (siehe compile_desc) aufnehmen soll. VERWEISE: compile_desc, T_TAG, T_TAGVAL_COND GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_TAG_COND DEKLARATION: T_TAG_COND(flag, cond) BESCHREIBUNG: Dies ist eine Kombination aus T_TAG(flag) und der Bedingung 'cond'. Achtung: 'flag' wird unabhaengig vom Status der Bedingung 'cond' (welche ja noch nicht ausgewertet wird) in das Mapping 'tags' aufgenommen. VERWEISE: compile_desc, T_TAG, T_TAGVAL_COND GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_TAGVAL_COND DEKLARATION: T_TAGVAL_COND(flag, val, cond) BESCHREIBUNG: Dies ist eine Kombination aus T_TAGVAL(flag, val) und der Bedingung 'cond'. Achtung: 'flag' wird unabhaengig vom Status der Bedingung 'cond' (welche ja noch nicht ausgewertet wird) in das Mapping 'tags' aufgenommen. VERWEISE: compile_desc, T_TAGVAL, T_TAG_COND GRUPPEN: beschreibung SOURCE: /sys/description_core.h FUNKTION: T_LISTE DEKLARATION: Liste der T-Defines fuer Raeume und Gegenstaende BESCHREIBUNG: Bedingungen: - T_DAY Es ist Tag. - T_NIGHT Es ist Nacht. - T_DARK Es ist dunkel (fuer den Betrachter). - T_LIGHT Es ist hell (fuer den Betrachter). - T_DAY_DARK Es ist Tag, aber dunkel fuer den Betrachter. - T_DAY_LIGHT Es ist Tag und hell. - T_NIGHT_DARK Es ist Nacht und dunkel. - T_NIGHT_LIGHT Es ist Nacht, aber hell. - T_BLIND Der Betrachter ist blind. - T_EMPTY Der betrachtete Container (oder Raum) ist leer. - T_VIS_EMPTY Der betrachtete Containter enthaelt nur unsichtbares. - T_PRESENT(id) Im Raum oder Objekt liegt ein Objekt mit der Id 'id'. - T_PRESENT_ROOM(id) Im Raum liegt ein Gegenstand mit der Id 'id'. - T_PRESENT_CONT(id) Der betrachtete Container hat ein Objekt mit der Id. - T_HIDDEN_PRESENT(id), T_HIDDEN_PRESENT_ROOM(id), T_HIDDEN_PRESENT_CONT(id) Das Objekt ist zudem versteckt. - T_NOLIST_PRESENT(id), T_NOLIST_PRESENT_ROOM(id), T_NOLIST_PRESENT_CONT(id) Das Objekt ist zudem V_NOLIST. - T_INVIS_PRESENT(id, inv), T_INVIS_PRESENT_ROOM(id, inv), T_INVIS_PRESENT_CONT(id, inv) Das Objekt hat den Unsichtbarkeitslevel 'inv'. (V_ATOM_NOLIST, V_ATOM_HIDDEN, V_ATOM_INVIS oder V_ATOM_NOSHIMMER). - T_VIS_PRESENT(id), T_VIS_PRESENT_ROOM(id), T_VIS_PRESENT_CONT(id) Das Objekt ist sichtbar. - T_COND_(DEEP_)PRESENT(_ROOM/_CONT/_VIEWER)(V)(id [, deep-flag], fun[, args]) Fuehrt ein cond_present bzw. cond_deep_present aus. Die V-Defines erhalten als 3. bzw. 4. Parameter die Argumente fuer die aufzurufende Funktion. - T_EXIT_FLAG(cmd, f) Der Ausgang entspricht dem Flag (s. query_exit_flag) - T_GILDE(gilde) Der Betrachter ist Mitglied der Gilde 'gilde'. - T_GENDER(gender) Der Betrachter hat das Geschlecht 'gender'. - T_VCLOCK(from,to) vclock() liegt zwischen (inkl.) from und (exkl.) to. - T_CLOCK(from,to) clock() liegt zwischen (inkl.) from und (exkl.) to. - T_ROOMTYPE(type) Der Raum hat den Raumtyp 'type' gesetzt. - T_NO_ASCII_ART Der Betrachter moechte keine ASCII-Graphiken sehen. - T_UNICODE Der Betrachter kann Unicode-Zeichen sehen. - T_ONLY_ASCII Der Betrachter kann nur ASCII-Zeichen sehen. - T_FAR Der Betrachter ist nicht anwesend. - T_OWNER Der Betrachter hat den Gegenstand bei sich. - T_ENTRANCE(dir) Der Betrachter kam aus der Richtung 'dir'. - T_GUEST Der Betrachter ist ein Gast. - T_NEWBIE Der Betrachter ist ein Newbie. - T_SPIELERRAT Der Betrachter ist ein Spielerratsmitglied. - T_WIZ Der Betrachter ist Gott. - T_EYE_OPTION(opt) Betrachter ist Gott und hat Augenoption 'opt' gesetzt. Vordefinierte Texte: - T_DAYTIME Die Tageszeitenmeldung. - T_DARKNESS_TEXT Die Standardraumbeschreibung in der Dunkelheit. - T_ROOMTYPETEXT(type) Der Inhalt des Raumtypes 'type'. - T_SHORT_DESC Die Short-Beschreibung des Gegenstandes/Raumes - T_PSEUDO(string) Bindet 'string' als Pseudo-Closure ein. (Die Symbole 'item bzw. 'room beinhalten den betrachteten Gegenstand bzw. Raum.) Vordefinierte Filter: - T_CAPITALIZE Den ersten Buchstaben des Textes gross schreiben. - T_UPPERCASE Alles gross schreiben. - T_LOWERCASE Alles klein schreiben. - T_DEBUG Text wird nur Goettern in Debug-Farbe ausgegeben. Vordefinierte Eigenschaften zum Vergleich mit T_GREATER & Co.: - TN_VCLOCK Die VL-Uhrzeit - TN_CLOCK Die RL-Uhrzeit - TN_STAT_STR Die Staerke des Betrachters - TN_STAT_INT Die Intelligenz des Betrachters - TN_STAT_CON Die Ausdauer des Betrachters - TN_STAT_DEX Die Geschichklichkeit des Betrachters - TN_KOERPERGROESSE Die Koerpergroesse des Betrachters - TN_ALIGN Das Ansehen des Betrachters - TN_LEVEL Der Level des Betrachters - TN_STAYDUR Wie lange der Betrachter bereits im Raum ist. Hinweise fuer die Meldungsgeneration: - T_HAS_DAYTIME Es soll keine Tageszeitmeldung angehaengt werden. - T_HAS_BLINDTEXT Der Text hat eine eigene Meldung fuer (VL-)Erblindete. - T_HAS_SHORT_DESC Der Text nennt die Short-Beschreibung. VERWEISE: set_long, compile_desc, query_type GRUPPEN: beschreibung, raum SOURCE: /sys/description.h FUNKTION: do_error DEKLARATION: void do_error(string err_msg) BESCHREIBUNG: Die Fehlermeldung err_msg wird ausgeloest und, falls der Ausloeser nicht zustaendig ist, in der FDB gespeichert. Die Fehlermeldung sollte ordentlich umgebrochen werden und ein abschliessendes '\n' enthalten. Sofern vorhanden, geht diese Meldung an den Ausloeser (previous_object()), und _nicht_ an das Objekt, in dem die Meldung steht. Fehler, fuer die der Aufrufer nicht verantwortlich ist, koennen mit do_my_error erzeugt werden. Spieler erhalten eine Meldung ueber ein Loch im Raum-Zeit-Gefuege. Die Ausfuehrung wird aber nicht abgebrochen. VERWEISE: do_my_error, do_error2, do_error3, do_warning GRUPPEN: master SOURCE: /sys/error.h FUNKTION: do_my_error DEKLARATION: void do_my_error(string msg) BESCHREIBUNG: Identisch zu do_error, nur geht die Meldung nicht an den Ausloeser/Aufrufer, sondern stets an das eigene Objekt. Sinnvoll fuer alle Fehler, fuer die der Aufrufer nicht verantwortlich ist. Spieler erhalten eine Meldung ueber ein Loch im Raum-Zeit-Gefuege. Die Ausfuehrung wird aber nicht abgebrochen. VERWEISE: do_error, do_error2, do_error3, do_warning GRUPPEN: master SOURCE: /sys/error.h FUNKTION: do_error2 DEKLARATION: void do_error2(string err_msg, string file, string ob, int line) BESCHREIBUNG: Die Fehlermeldung err_msg wird ausgeloest und, falls der Ausloeser nicht zustaendig ist, in der FDB gespeichert. Dabei wird als Datei file, als Zeile line und als Objekt ob gespeichert. Die Fehlermeldung sollte ordentlich umgebrochen werden und ein abschliessendes '\n' enthalten. Spieler erhalten eine Meldung ueber ein Loch im Raum-Zeit-Gefuege. Die Ausfuehrung wird aber nicht abgebrochen. VERWEISE: do_error, do_my_error, do_error3, do_warning GRUPPEN: master SOURCE: /sys/error.h FUNKTION: do_error3 DEKLARATION: void do_error3(string err_msg, string file, string ob, int line, string *debugger) BESCHREIBUNG: Die Fehlermeldung err_msg wird ausgeloest und, falls der Ausloeser nicht zustaendig ist, in der FDB gespeichert. Dabei wird als Datei file, als Zeile line und als Objekt ob gespeichert. Zusaetzlich werden dann die in debugger angegebenen Goetter (klein geschrieben) oder Gruppen als Debugger eingetragen. Die Fehlermeldung sollte ordentlich umgebrochen werden und ein abschliessendes '\n' enthalten. Spieler erhalten eine Meldung ueber ein Loch im Raum-Zeit-Gefuege. Die Ausfuehrung wird aber nicht abgebrochen. VERWEISE: do_error, do_my_error, do_error2, do_warning GRUPPEN: master SOURCE: /sys/error.h FUNKTION: do_warning DEKLARATION: void do_warning(string err_msg) BESCHREIBUNG: Die Fehlermeldung err_msg wird ausgeloest und, falls der Ausloeser nicht zustaendig ist, in der FDB gespeichert. Die Fehlermeldung sollte ordentlich umgebrochen werden und ein abschliessendes '\n' enthalten. Die Ausfuehrung wird nicht abgebrochen. Spieler erhalten keine Meldung ueber ein Loch im Raum-Zeit-Gefuege. VERWEISE: do_my_warning, do_warning2, do_warning3, do_error GRUPPEN: master SOURCE: /sys/error.h FUNKTION: do_my_warning DEKLARATION: void do_my_warning(string msg) BESCHREIBUNG: Identisch zu do_warning, nur geht die Meldung nicht an den Ausloeser/Aufrufer, sondern stets an das eigene Objekt. Sinnvoll fuer alle Warnings, fuer die der Aufrufer nicht verantwortlich ist. Die Ausfuehrung wird nicht abgebrochen. Spieler erhalten keine Meldung ueber ein Loch im Raum-Zeit-Gefuege. VERWEISE: do_warning, do_warning2, do_warning3, do_error GRUPPEN: master SOURCE: /sys/error.h FUNKTION: do_warning2 DEKLARATION: void do_warning2(string err_msg, string file, string ob, int line) BESCHREIBUNG: Die Fehlermeldung err_msg wird ausgeloest und, falls der Ausloeser nicht zustaendig ist, in der FDB gespeichert. Dabei wird als Datei file, als Zeile line und als Objekt ob gespeichert. Die Fehlermeldung sollte ordentlich umgebrochen werden und ein abschliessendes '\n' enthalten. Die Ausfuehrung wird nicht abgebrochen. Spieler erhalten keine Meldung ueber ein Loch im Raum-Zeit-Gefuege. VERWEISE: do_warning, do_my_warning, do_warning3, do_error GRUPPEN: master SOURCE: /sys/error.h FUNKTION: do_warning3 DEKLARATION: void do_warning3(string err_msg, string file, string ob, int line, string *debugger) BESCHREIBUNG: Die Fehlermeldung err_msg wird ausgeloest und, falls der Ausloeser nicht zustaendig ist, in der FDB gespeichert. Dabei wird als Datei file, als Zeile line und als Objekt ob gespeichert. Zusaetzlich werden dann die in debugger angegebenen Goetter (klein geschrieben) oder Gruppen als Debugger eingetragen. Die Fehlermeldung sollte ordentlich umgebrochen werden und ein abschliessendes '\n' enthalten. Die Ausfuehrung wird nicht abgebrochen. Spieler erhalten keine Meldung ueber ein Loch im Raum-Zeit-Gefuege. VERWEISE: do_warning, do_my_warning, do_warning2, do_error GRUPPEN: master SOURCE: /sys/error.h FUNKTION: do_idee DEKLARATION: void do_idee(string text, mixed wozu, object wer) BESCHREIBUNG: Setzt eine Idee zum Objekt oder V-Item wozu ab. Der Ideenlieferant wer muss dazu noch existieren! Der Text wird noch korrekt umgebrochen. VERWEISE: do_fehler, do_error, do_warning GRUPPEN: master SOURCE: /sys/error.h FUNKTION: do_fehler DEKLARATION: void do_fehler(string text, mixed wozu, object wer) BESCHREIBUNG: Setzt einen Fehler zum Objekt oder V-Item wozu ab. Der Fehlerabsetzende wer muss dazu noch existieren! Der Text wird noch korrekt umgebrochen. VERWEISE: do_fehler, do_error, do_warning GRUPPEN: master SOURCE: /sys/error.h FUNKTION: FAIL_GHOST DEKLARATION: FAIL_GHOST(string text) BESCHREIBUNG: Bricht die Befehlsbearbeitung mit dem notify_fail()-Text text ab, wenn TP ein Geist ist. Ist text==0, so wird statt dessen "Als Geist ist dir das leider nicht moeglich." verwendet. Beispiele: FAIL_GHOST(0) -> "Als Geist ist dir das leider nicht moeglich." FAIL_GHOST("Nicht als Geist!") -> "Nicht als Geist!" VERWEISE: FAIL_CANNOT_SEE, FAIL_FAR, FAIL_FREE_HANDS, FAIL_GHOST, FAIL_NOT_IN_TP, FAIL_NOT_ME GRUPPEN: befehle SOURCE: /sys/fail.h FUNKTION: FAIL_FREE_HANDS DEKLARATION: FAIL_FREE_HANDS(int anzahl, string text) BESCHREIBUNG: Bricht die Befehlsbearbeitung mit dem notify_fail()-Text text ab, wenn TP nicht mindestens anzahl freie Haende hat. Ist text==0, so wird statt dessen "Dazu brauchst du "+anzahl+" freie Hand/Haende." verwendet. Beispiele: FAIL_FREE_HANDS(1, 0) -> "Dazu brauchst du eine freie Haende." FAIL_FREE_HANDS(2, "Zwei Griffel solltest du dafuer schon frei haben.") -> "Zwei Griffel solltest du dafuer schon frei haben." VERWEISE: FAIL_CANNOT_SEE, FAIL_FAR, FAIL_FREE_HANDS, FAIL_GHOST, FAIL_NOT_IN_TP, FAIL_NOT_ME GRUPPEN: befehle, haende SOURCE: /sys/fail.h FUNKTION: FAIL_NOT_ME DEKLARATION: FAIL_NOT_ME(mixed mxd, string text) BESCHREIBUNG: Bricht die Befehlsbearbeitung mit dem notify_fail()-Text text ab, wenn mxd!=TO ist. Ist text==0, so wird statt dessen "Das geht mit "+einem(mxd)+" nicht." verwendet. Beispiele: FAIL_NOT_ME(mxd, 0) mxd ist eine Axt -> "Das geht mit einer Axt nicht." FAIL_NOT_ME(mxd, "Wie willst du das mit "+einem(mxd)+" machen?") mxd ist eine Axt -> "Wie willst du das mit einer Axt machen?" VERWEISE: FAIL_CANNOT_SEE, FAIL_FAR, FAIL_FREE_HANDS, FAIL_GHOST, FAIL_NOT_IN_TP, FAIL_NOT_ME GRUPPEN: befehle SOURCE: /sys/fail.h FUNKTION: FAIL_NOT_IN_TP DEKLARATION: FAIL_NOT_IN_TP(mixed mxd, string text) BESCHREIBUNG: Bricht die Befehlsbearbeitung mit dem notify_fail()-Text text ab, wenn mxd ein Objekt und ENV(mxd)!=TP ist. Ist text==0, so wird statt dessen "Du musst "+den(mxd)+" erst nehmen." verwendet. Beispiele: FAIL_NOT_IN_TP(mxd, 0) mxd ist eine Axt -> "Du musst die Axt erst nehmen." FAIL_NOT_IN_TP(mxd, "Nimm "+den(mxd)+" doch erstmal.") mxd ist eine Axt -> "Nimm die Axt doch erstmal." VERWEISE: FAIL_CANNOT_SEE, FAIL_FAR, FAIL_FREE_HANDS, FAIL_GHOST, FAIL_NOT_IN_TP, FAIL_NOT_ME GRUPPEN: befehle SOURCE: /sys/fail.h FUNKTION: FAIL_CANNOT_SEE DEKLARATION: FAIL_CANNOT_SEE(mixed mxd, string text) BESCHREIBUNG: Bricht die Befehlsbearbeitung mit dem notify_fail()-Text text ab, wenn TP mxd nicht sehen kann. Ist text==0, so wird statt dessen der Rueckgabewert von TP->cannot_see() verwendet. Beispiele: FAIL_CANNOT_SEE(mxd, 0) Z. B. "Es ist zu dunkel." FAIL_CANNOT_SEE(mxd, "Dunkelheit umgibt Deine Augen.") "Dunkelheit umgibt Deine Augen." VERWEISE: FAIL_CANNOT_SEE, FAIL_FAR, FAIL_FREE_HANDS, FAIL_GHOST, FAIL_NOT_IN_TP, FAIL_NOT_ME GRUPPEN: befehle SOURCE: /sys/fail.h FUNKTION: FAIL_FAR DEKLARATION: FAIL_FAR(mixed mxd, string text) BESCHREIBUNG: Bricht die Befehlsbearbeitung mit dem notify_fail()-Text text ab, wenn mxd zu weit entfernt ist. Ist text==0, so wird statt dessen der entsprechende Rueckgabewert von "far" bzw. query_far(), sofern dies eine Zeichenkette ist, ansonsten Der(mxd)+" ist viel zu weit weg." verwendet. Beispiele: FAIL_FAR(mxd, 0) mxd ist ein Stern -> "Der Stern ist viel zu weit weg." FAIL_FAR(mxd, Der(mxd)+" ist viel zu weit weg, um "+ihn(mxd)+ " zu nehmen") mxd ist ein Stern -> "Der Stern ist viel zu weit weg, um ihn zu nehmen." VERWEISE: FAIL_CANNOT_SEE, FAIL_FAR, FAIL_FREE_HANDS, FAIL_GHOST, FAIL_NOT_IN_TP, FAIL_NOT_ME GRUPPEN: befehle SOURCE: /sys/fail.h FUNKTION: GABE DEKLARATION: int GABE(object spieler, string gabe) BESCHREIBUNG: Liefert 1, wenn der Spieler die Gabe besitzt, sonst 0. gabe ist dabei das zweibuchstabige Kuerzel fuer eine Gabe in Kleinbuchstaben. Moerder, welche diese Gabe urspruenglich hatten, aber aufgrund des (M)'s sie nicht mehr besitzen, erhalten eine entsprechende Meldung. Ebenfalls wird eine Meldung ausgegeben, wenn man die Gabe zwar grundsaetzlich besitzt, aber aus irgendwelchen Umstaenden sie derzeit nicht verfuegbar ist. VERWEISE: hlpp, GABE2 GRUPPEN: level SOURCE: /sys/hlp.h FUNKTION: GABE2 DEKLARATION: int GABE2(object spieler, string gabe) BESCHREIBUNG: Liefert 1, wenn der Spieler die Gabe besitzt, sonst 0. gabe ist dabei das zweibuchstabige Kuerzel fuer eine Gabe in Kleinbuchstaben. Es wird keinerlei Meldung an den Spieler ausgegeben. VERWEISE: hlpp, GABE GRUPPEN: level SOURCE: /sys/hlp.h FUNKTION: newbiep DEKLARATION: int newbiep(object ob) BESCHREIBUNG: Liefert einen Wert ungleich 0, wenn es sich bei dem Objekt ob um einen Newbie handelt, sonst 0. Newbies sind Spieler mit einem Alter kleiner als NEWBIE_AGE aus /sys/level.h (z.Zt. 1 Echtzeit-Tag). Goetter sind keine Newbies. VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: hlpp DEKLARATION: int hlpp(object ob) BESCHREIBUNG: Liefert einen Wert ungleich 0, wenn es sich bei dem Objekt ob um einen Engel (hlp=High Level Player) handelt, sonst 0. VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp, wizplayerp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: wizp DEKLARATION: int wizp(object ob) BESCHREIBUNG: Liefert einen Wert ungleich 0, wenn es sich bei dem Objekt ob um einen Gott handelt, sonst 0. wizplayerp macht dies mit Objekt oder Realnamen. VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp, wizplayerp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: wizplayerp DEKLARATION: int wizplayerp(string rname|object ob) BESCHREIBUNG: Liefert einen Wert ungleich 0, wenn es sich bei dem Objekt ob um einen Gott oder bei dem String um den Realnamen eines Gottes handelt, sonst 0. VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: guestp DEKLARATION: int guestp(object ob) BESCHREIBUNG: Liefert einen Wert ungleich 0, wenn es sich bei dem Objekt ob um einen Gast handelt, sonst 0. VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp, wizplayerp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: learnerp DEKLARATION: int learnerp(object ob) BESCHREIBUNG: Liefert einen Wert ungleich 0, wenn es sich bei dem Objekt ob mindestens um einen Lehrling handelt, sonst 0. Dies entspricht also wizp(ob). VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp, wizplayerp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: gesellep DEKLARATION: int gesellep(object ob) BESCHREIBUNG: Liefert einen Wert ungleich 0, wenn es sich bei dem Objekt ob mindestens um einen Gesellen handelt, sonst 0. (Aus vogtp(ob) folgt also auch gesellep(ob).) VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp, wizplayerp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: vogtp DEKLARATION: int vogtp(object ob) BESCHREIBUNG: Liefert einen Wert ungleich 0, wenn es sich bei dem Objekt ob mindestens um einen Vogt handelt, sonst 0. (Aus lordp(ob) folgt also auch vogtp(ob).) VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp, wizplayerp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: lordp DEKLARATION: int lordp(object ob) BESCHREIBUNG: Liefert einen Wert ungleich 0, wenn es sich bei dem Objekt ob mindestens um einen Lord handelt, sonst 0. (Aus adminp(ob) folgt also auch lordp(ob).) VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp, wizplayerp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: adminp DEKLARATION: int adminp(object ob) BESCHREIBUNG: Liefert einen Wert ungleich 0, wenn es sich bei dem Objekt ob um einen Admin handelt, sonst 0. VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp, wizplayerp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: testplayerp DEKLARATION: string testplayerp(object ob|string name) BESCHREIBUNG: Wenn es sich bei dem Objekt ob bzw. dem Spieler mit dem Namen name um den Test-Zweitcharakter (Testplayer) eines Gottes handelt, liefert testplayerp() den real_name dieses Gottes, sonst 0. Bei Gruppentesties, die offline sind, liefert es den Gruppennamen. Siehe fuer Goetter auch bei wizplayerp. VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp, wizplayerp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: spielerratp DEKLARATION: int spielerratp(object ob|string name) BESCHREIBUNG: Liefert einen Wert ungleich 0, wenn es sich bei dem Objekt ob bzw. dem Spieler mit dem Namen name um ein Mitglied des Spielerrates handelt, sonst 0. VERWEISE: newbiep, hlpp, wizp, guestp, learnerp, gesellep, vogtp, lordp, adminp, testplayerp, spielerratp, wizplayerp GRUPPEN: level SOURCE: /sys/level.h FUNKTION: ACTION_SOUND_ITEM DEKLARATION: ACTION_SOUND_ITEM( ob,string key,string defaultSound) BESCHREIBUNG: Prueft ein mapping oder object ob auf P_SOUND_ACTIONS[key] nutzt dies oder den default, um den Sound zu setzen. VERWEISE ACTION_SOUND_OB,ACTION_SOUND_TO GRUPPEN: message SOURCE: /sys/message.h FUNKTION: ACTION_SOUND_OB DEKLARATION: ACTION_SOUND_OB(object ob,string key,string defaultSound) BESCHREIBUNG: Prueft ein reines object ob auf P_SOUND_ACTIONS[key] nutzt dies oder den default, um den Sound zu setzen. VERWEISE ACTION_SOUND_OB,ACTION_SOUND_TO GRUPPEN: message SOURCE: /sys/message.h FUNKTION: ACTION_SOUND_TO DEKLARATION: ACTION_SOUND_TO(string key,string defaultSound) BESCHREIBUNG: Prueft this_object() auf P_SOUND_ACTIONS[key] nutzt dies oder den default, um den Sound zu setzen. VERWEISE ACTION_SOUND_OB,ACTION_SOUND_TO GRUPPEN: message SOURCE: /sys/message.h FUNKTION: MOVE_TYPE_LISTE DEKLARATION: Liste der Move-Typen. BESCHREIBUNG: Bei move() kann als MOVE_TYPE angegeben werden, welcher Art die Bewegung ist. Dies ist ueblicherweise ein Verb im Infinitiv. Fuer die bisher verwendeten Bewegungen gibt folgende Defines, um Typos auszuschliessen: Bewegungen eines Gegenstandes: MOVE_TYPE_GEBEN MOVE_TYPE_LEGEN MOVE_TYPE_HAENGEN MOVE_TYPE_STECKEN MOVE_TYPE_STELLEN MOVE_TYPE_VERSTAUEN MOVE_TYPE_SCHENKEN MOVE_TYPE_FUETTERN MOVE_TYPE_NEHMEN MOVE_TYPE_LEEREN MOVE_TYPE_WERFEN MOVE_TYPE_SCHIESSEN MOVE_TYPE_SCHIEBEN Bewegungen von Personen: MOVE_TYPE_GEHEN MOVE_TYPE_FLUECHTEN MOVE_TYPE_BETRETEN MOVE_TYPE_VERLASSEN MOVE_TYPE_FLIEGEN MOVE_TYPE_SCHIEBEN VERWEISE: move GRUPPEN: move SOURCE: /sys/move.h FUNKTION: EQUAL_SKILL_PATHS DEKLARATION: int EQUAL_SKILL_PATHS(string *pfad1, string *pfad2) BESCHREIBUNG: Liefert 1, wenn die beiden Skill-Pfade gleich sind, ansonsten 0. VERWEISE: set_skill_path, query_skill_path, SP_LISTE GRUPPEN: skill SOURCE: /sys/skill.h FUNKTION: SP_LISTE DEKLARATION: SP_LISTE BESCHREIBUNG: Liste der in UNItopia verwendeten Skill-Pfade: Nahkampf-Waffen: SP_AXT ({"skill", "offensiv", "scharf", "axt"}) SP_DEGEN ({"skill", "offensiv", "scharf", "degen"}) SP_KEULE ({"skill", "offensiv", "stumpf", "keule"}) SP_KURZSCHWERT ({"skill", "offensiv", "scharf", "schwert", "kurzschwert"}) SP_LANGSCHWERT ({"skill", "offensiv", "scharf", "schwert", "langschwert"}) SP_MESSER ({"skill", "offensiv", "scharf", "messer"}) SP_PEITSCHE ({"skill", "offensiv", "stumpf", "peitsche"}) SP_SAEBEL ({"skill", "offensiv", "scharf", "saebel"}) SP_STOCK ({"skill", "offensiv", "stumpf", "stock"}) Wurf-Waffen: SP_SPEER ({"skill", "offensiv", "scharf", "speer"}) SP_WURFMESSER ({"skill", "offensiv", "scharf", "wurfmesser"}) Schuss-Waffen: SP_BLASROHR ({"skill", "offensiv", "scharf", "blasrohr"}) SP_BOGEN ({"skill", "offensiv", "scharf", "bogen"}) SP_SCHLEUDER ({"skill", "offensiv", "stumpf", "schleuder"}) Handkampf: SP_HAENDE ({"skill", "offensiv", "haende"}) Defensiv-Waffen: SP_GROSSSCHILD ({"skill", "defensiv", "schild", "gross"}) SP_KLEINSCHILD ({"skill", "defensiv", "schild", "klein"}) Zauber: SP_ABWEHR ({"skill", "zauber", "abwehr"}) SP_BEWERTEN ({"skill", "zauber", "bewerte"}) SP_LICHT ({"skill", "zauber", "licht"}) SP_NEHMEN ({"skill", "zauber", "nehmen"}) SP_SICHT ({"skill", "zauber", "sicht"}) SP_TARNEN ({"skill", "zauber", "tarnen"}) Getoetet: SP_GROSSWILD ({"skill", "getoetet", "grosswild"}) SP_KLEINGETIER ({"skill", "getoetet", "kleingetier"}) Wissen: SP_ERFORSCHT ({"skill", "wissen", "erforscht"}) SP_NAVIGATION ({"skill", "wissen", "navigation"}) Handwerk: SP_STEHLEN ({"skill", "handwerk", "stehlen"}) Magie: SP_DEFENSIV ({"skill", "magie", "defensiv"}) SP_ILLUSION ({"skill", "magie", "illusion"}) SP_INFORMATION ({"skill", "magie", "information"}) SP_MANIPULATION ({"skill", "magie", "manipulation"}) SP_OFFENSIV ({"skill", "magie", "offensiv"}) VERWEISE: set_skill_path, query_skill_path, EQUAL_SKILL_PATHS GRUPPEN: skill SOURCE: /sys/skill.h FUNKTION: ROUND_STAT DEKLARATION: int ROUND_STAT(float) BESCHREIBUNG: Der zu einem Float-Stat zugehoerige Integer-Wert ergibt sich durch ROUND_STAT mit dem Float-Wert als Argument. Um Inkonsistenzen / Rundungsfehler zu vermeiden, sollten Integer-Werte fuer Stats ausschliesslich mit diesem Makro berechnet werden. VERWEISE: PRINT_STAT GRUPPEN: spieler, monster, skill SOURCE: /sys/stats.h FUNKTION: PRINT_STAT DEKLARATION: string PRINT_STAT(int|float) BESCHREIBUNG: Wenn Stat-Werte an Spieler ausgegeben werden sollen, so sollte der entsprechende String (insbesondere bei Float-Stats) mit PRINT_STAT erstellt werden. Das Makro erzeugt einen String der Form "45,6". VERWEISE: ROUND_STAT GRUPPEN: spieler, monster, skill SOURCE: /sys/stats.h FUNKTION: IS_NIGHT DEKLARATION: int IS_NIGHT BESCHREIBUNG: Liefert 1 bei Nacht und 0 bei Tag. Man beachte, dass hinter IS_NIGHT keine Klammern stehen. VERWEISE: IS_DAY, IS_NIGHT GRUPPEN: zeit SOURCE: /sys/time.h FUNKTION: IS_DAY DEKLARATION: int IS_DAY BESCHREIBUNG: Liefert 1 bei Tag und 0 bei Nacht. Man beachte, dass hinter IS_DAY keine Klammern stehen. VERWEISE: IS_DAY, IS_NIGHT GRUPPEN: zeit SOURCE: /sys/time.h FUNKTION: ueberfall DEKLARATION: void ueberfall(object angreifer, object opfer, string fill1, string fill2) BESCHREIBUNG: ACHTUNG: Der Ueberdall-Kanal ist derzeit deaktiviert. Daher hat die Nutzung des Defines derzeit keine Wirkung. ueberfall ist ein Define und steht nach einem #include zur Verfuegung. Es erzeugt im Ueberfall-Kanal eine Meldung: 'Info: Ueberfall: fill1 fill2.' BEISPIEL: ueberfall(ob1, ob2, "schuettet Saeure ueber", 0); erzeugt Info: Ueberfall: Monty schuettet Saeure ueber Sissi. bei allen, die den entsprechenden Kurierkanal angeschaltet haben. Dabei muss allerdings ob1 ein Objektzeiger auf Monty und ob2 ein Objektzeiger auf Sissi sein. VERWEISE: notify_attack GRUPPEN: kampf SOURCE: /sys/ueberfall.h