Folgende Eintraege der v_items werden unterstuetzt: "Externes" vorweg: Fuer Wasser - Eintraege siehe /doc/funktionsweisen/wasser, fuer tageszeitabhaengige V-Items siehe /p/Room/i/night_and_day.c, fuer das "Fressen" fuer Hexenvertraute siehe /p/INFO/Enzyclopedia/vertrautenfutter. Grundlegendes: Name und Geschlecht muessen definiert sein! name Der Name des V-Items cap_name Der Name mit grossen Anfangsbuchstaben (falls anders als capitalize(vitem["name"])) gender Das Geschlecht des V-Items adjektiv ein einzelnes Adjektiv oder eine ganze Menge Adjektive des vitems, es wird beispielsweise bei "XYZ schaut sich die vielen, fliegenden Fische an." verwendet id Die id braucht nur gesetzt zu werden, wenn das vitem auf mehr reagieren soll als den Namen (was allerdings meistens der Fall sein duerfte); wird dann als Menge angegeben. invis Folgende Eintraege (bzw. Rueckgabewerte bei Closures) sind moeglich: V_VIS: V-Item ist normal sichtbar V_HIDDEN: V-Item ist versteckt. (Andere im Raum erhalten z.B. beim Betrachten, dass derjenige "etwas" betrachtet.) V_INVIS: Das V-Item ist ueberhaupt nicht sichtbar. personal Fuer personifizierte V-Items. (Wo der Name keine Artenbezeichnung darstellt.) eigen Fuer bestimmte V-Items. (V-Items, welche immer ein bestimmtes Pronomen verlangen.) nummer Die Nummer des V-Items. Die Nummer 0 wird genau dann genommen, wenn der Spieler keine spezielle Nummer angegeben hat. Falls man bei "id" ein Array angegeben hat, so kann man hier ein Array mit den korrespondierenden Nummern angeben. plural Handelt es sich bei dem vitem um etwas, was sich in der Mehrzahl befindet, wie beispielsweise "seile", so wird dies durch "plural":1 gekennzeichnet. menge Eine Mengenangabe. Das genaue Format steht in der Dokumentation zu set_menge/query_menge. far ist das vitem etwas weiter weg, so wird dies mit "far":1 angezeigt. Dies wirkt sich aus aufs riechen, horchen, fuehlen, nehmen und angreifen, bei lebenden vitems ("living", s.u.) auch auf die Seelenbefehle. Es wirkt sich nicht aus aufs lesen, da bei Sternen oder Voegel am Himmel die Meldung, dass man sie nicht lesen kann, weil sie zu weit weg sind, grausam waere. Wer ein fliegendes Buch machen will, muss halt ein entsprechendes "read" basteln. Man kann statt 1 auch selber eine Begruendung angeben, welche dann ausgegeben wird. (Diese muss aber auf alle moeglichen Aktionen passen.) visible_in_the_dark Auch im Dunkeln sichtbar (Mond, Sterne, Gluehwuermchen zum Beispiel) debug_info Ein Mapping (oder eine Closure, welche ein Mapping zurueckliefert), welches abgefragt und gespeichert wird, wenn ein Fehler am V-item abgesetzt wird. (Existiert dieser Eintrag nicht, werden die Debug-Infos der Umgebung genommen.) Das Mapping sollte nur Strings als Schluessel und Strings oder Zahlen als Werte beinhalten. Grammatikunterstuetzung: genitiv Falls definiert, benutzen Grammatikfunktionen diesen Eintrag bei Genitivgenerierung statt den Genitiv zu ermitteln. Sollte nur verwendet werden, wenn die Deklinationsfunktionen Fehler beim Generieren des Genitivs machen. dativ Bewirkt wie der Eintrag "genitiv" die Benutzung des gesetzten Dativs statt eines automatisch generierten. akkusativ Wie bei den Eintraegen "genitiv" und "dativ" wird so ein alternativer Akkusativ angegeben. prep Wenn ein V-Item an einem Gegenstand oder anderem V-Item klebt, kann man damit die zugehoerige Praepostion ("auf","in","unter","neben") angeben. Die Umgebung des V-Items wird im Dativ angehaengt. (Dies wird nur zur Textausgabe verwendet, sonst nirgendwo.) dekliniert Ist dieser Eintrag enthalten und sinnvollerweise eine Closure, so rufen die Grammatik-Funktionen bei der Deklination des Namens die Closure mittels funcall(v_item["dekliniert"], fall, previous_object()) auf statt den Namen selbst zu generieren. Ist der Rueckgabewert 0, so wird auf herkoemmlichem Wege versucht, den Namen zu deklinieren. Dieser Eintrag hat Vorrang vor den Einzelfall-Eintraegen wie "genitiv". Die Defines fuer fall stehen in /sys/deklin.h (sind 1-4 fuer Nominativ-Akkusativ), das Objekt interessent ist das Objekt, welches die Grammatikfunktion aufgerufen hat, die den Namen dekliniert haben will. Dieser Eintrag ist fuer Problemfaelle der Deklination gedacht; im Allgemeinen duerften die Einzelfall-Eintraege ausreichen. Ein Beispiel findet sich am Ende dieses Textes. Beschreibungen: long Aussehen eines vitems (betrachte X) long_night Aussehen bei Nacht noise Geraeusch eines vitems (horche an X) smell Geruch des vitems (rieche an X) read Text, den man beim Lesen des vitems erhaellt. Natuerlich nur angeben, wenn es was zum lesen gib. feel Wie sich ein vitem anfuehlt (befuehle / betaste X) long, feel, noise, smell und read, werden automatisch umgebrochen. seher_info Extra Info - Text fuer die Sehergilde. Die Meldungen hierzu: Die *_msg's werden fuer die anderen ausgegeben, wenn ein Spieler was mit dem v_item macht. Sie sind vordefiniert. look_msg $Der(OBJ_TP) schaut $seinen('vitem) an look_msg_night $Der(OBJ_TP) schaut $seinen('vitem) an read_msg $Der(OBJ_TP) liest $seinen('vitem) smell_msg $Der(OBJ_TP) riecht an $seinem('vitem) hear_msg $Der(OBJ_TP) horcht an $seinem('vitem) feel_msg $Der(OBJ_TP) befuehlt $seinen('vitem) Aktionen mit vitems: take take wird ausgegeben, wenn jemand versucht, das v_item zu nehmen, was natuerlich nicht geht. take wird automatisch umgebrochen. take_msg ist diese angegeben, so wird beim Versuch, das vitem zu nehmen, diese Meldungen an die anderen ausgegeben; ist sie nicht angegeben, so erscheint keine Meldung; take_msg wird automatisch umgebrichen. Beispiel: Sparschweinchen im Tadmorer Pub: "take":"Das Schweinchen wird lebendig und beisst " "Dir ganz fuerchterlich in die Hand. " "Danach erstarrt das Sparschweinchen wieder " "und guckt, als ob nix geschehen waer.", "take_msg":"Als $der(OBJ_TP) nach dem " "Sparschweinchen auf der Theke greift wird " "dieses lebendig und beisst $den(OBJ_TP) " "ganz fuerchterlich in die Hand. Danach " "erstarrt das Sparschweinchen wieder und " "guckt, als ob nix geschehen waer", living ein v-item kann als lebend eingestuft werden, indem man ihm den Eintrag "living":1 gibt. Dies kann dann von weis der Geier was allem ausgenutzt werden, diese vitems koennen dann geknuddelt, gewuschelt, gestreichelt und so weiter werden. align Die erkannte Gesinnung bei lebenden V-Items. soul Lebende v-items, die trotz ihrer Lebendigkeit nicht geknuddelt werden sollen, erhalten ausser dem Eintrag "living":1 noch den Eintrag "soul":"Fehlermeldungstext". Beispiel: Waechter auf Stadtmauer: "living":1, "soul":"Der Waechter ist viel zu weit entfernt.", attack Lebende v-items und Kaempfe: Mit einem vitem kann attack_msg man natuerlich nicht kaempfen, es kann die beiden folgenden Eintraege enthalten: "attack":"Meldung an den Angreifer", "attack_msg":"Meldung an die anderen im Raum", attack_msg kann genauso wie take_msg wegbleiben. Beispiel: Auf einem Baum sitzt ein Eichhoernchen, unerreichbar weit oben fuer einen Spieler: "attack":"Du springst wie bloede am Baum hoch, " "kommst aber nicht an das Eichhoernchen " "heran.", "attack_msg":"$Der(OBJ_TP) springt wie bloede am " "Baum hoch, aber $er(OBJ_TP) hat zu " "kurze Aermchen, um an das " "Eichhoernchen ranzukommen." enter_room Falls vorhanden, ist dieses V-Item betretbar. Dieser Eintrag gibt dann den Zielraum an. (Eine Closure wird mit dem V-Item und dem Lebewesen als Parameter ausgewertet.) enter_messages Beinhaltet bei einem betretbaren V-Item die Verlassens- und Ankunftsmeldung in einem Array. Pseudclosures und Closures werden entsprechend ausgewertet. (Closures wie bei enter_room.) Bsp: "enter_messages": ({ "$Der(OBJ_TP) zwaengt sich in $den('vehikel).", "$Der(OBJ_TP) kommt herangekrochen." }) Automatisch generierte Eintraege: (Diese Eintraege sollte man nicht selber vornehmen, da sie ueberschrieben werden.) environment Verweist auf das umgebende V-Item oder auf das Objekt/ den Raum, an welchem dieses V-Item haengt. v_item_master, Diese Eintraege sind interner Natur. Sie koennen sich v_item_path in der Zukunft noch aendern. Beide bilden zusammen eine UNItopia-weit eindeutige Kennung des V-Items. Diese Eintraege werden add_/change_/delete_v_item genutzt, um ein V-Item wiederzufinden. Beispiele zu dekliniert: Beispiel 1: string v_item_name(int fall, object interessent) { return ({ "Atlas", "Atlasses", "Atlasse", "Atlas", })[fall-1]; } void create() { ... add_v_item(([ "name":"atlas", "gender":"maennlich", "long":"Ein Atlas.", "dekliniert":#'v_item_name, ])); } Beispiel 2 fuer die Freunde von Inline-Closures: void create() { ... add_v_item(([ "name":"atlas", "gender":"maennlich", "long":"Ein Atlas.", "dekliniert": (: ({ "Atlas", "Atlasses", "Atlasse", "Atlas", })[$1-1] :), ])); }