Folgende Einträge der v_items werden unterstützt: "Externes" vorweg: Für Wasser - Einträge siehe /doc/funktionsweisen/wasser, für tageszeitabhaengige V-Items siehe /p/Room/i/night_and_day.c, für das "Fressen" für Hexenvertraute siehe /p/INFO/Enzyclopedia/vertrautenfutter. Grundlegendes: Name und Geschlecht müssen definiert sein! name Der Name des V-Items cap_name Der Name mit großen 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 Einträge (bzw. Rückgabewerte bei Closures) sind möglich: 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 überhaupt nicht sichtbar. personal Für personifizierte V-Items. (Wo der Name keine Artenbezeichnung darstellt.) eigen Für 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, fühlen, nehmen und angreifen, bei lebenden vitems ("living", s.u.) auch auf die Seelenbefehle. Es wirkt sich nicht aus aufs lesen, da bei Sternen oder Vögel am Himmel die Meldung, dass man sie nicht lesen kann, weil sie zu weit weg sind, grausam wäre. Wer ein fliegendes Buch machen will, muss halt ein entsprechendes "read" basteln. Man kann statt 1 auch selber eine Begründung angeben, welche dann ausgegeben wird. (Diese muss aber auf alle möglichen Aktionen passen.) visible_in_the_dark Auch im Dunkeln sichtbar (Mond, Sterne, Glühwürmchen 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 Schlüssel 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 Einträgen "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 zugehörige Praepostion ("auf","in","unter","neben") angeben. Die Umgebung des V-Items wird im Dativ angehängt. (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 Rückgabewert 0, so wird auf herkömmlichem Wege versucht, den Namen zu deklinieren. Dieser Eintrag hat Vorrang vor den Einzelfall-Einträgen wie "genitiv". Die Defines für fall stehen in /sys/deklin.h (sind 1-4 für Nominativ-Akkusativ), das Objekt interessent ist das Objekt, welches die Grammatikfunktion aufgerufen hat, die den Namen dekliniert haben will. Dieser Eintrag ist für Problemfälle der Deklination gedacht; im Allgemeinen dürften die Einzelfall-Einträge ausreichen. Ein Beispiel findet sich am Ende dieses Textes. Beschreibungen: long Aussehen eines vitems (betrachte X) long_night Aussehen bei Nacht noise Geräusch eines vitems (horche an X) smell Geruch des vitems (rieche an X) read Text, den man beim Lesen des vitems erhaellt. Natürlich nur angeben, wenn es was zum lesen gib. feel Wie sich ein vitem anfühlt (befuehle / betaste X) long, feel, noise, smell und read, werden automatisch umgebrochen. seher_info Extra Info - Text für die Sehergilde. Die Meldungen hierzu: Die *_msg's werden für 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) befühlt $seinen('vitem) Seele-Aktionen mit V-Items: Für jede Seelenaktion mit Vitems als Partner gibt es zwei Einträge: Beispiele für Knabbern: "seele_knabber_msg": "Du knabberst an $dem('vitem)" "seele_knabber_msg_other": "$Der(OBJ_TP) knabbert an $dem('vitem)" Wenn sonstige Reaktionen erfolgen sollen gibt es auch was... "seele_default_msg":"Du versuchst etwas, scheiterst aber kläglich.", "seele_default_msg_other":"$Der(OBJ_TP) versucht etwas, " "scheiterst aber kläglich.", Aktionen mit vitems: take take wird ausgegeben, wenn jemand versucht, das v_item zu nehmen, was natürlich 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 beißt " "Dir ganz fürchterlich in die Hand. " "Danach erstarrt das Sparschweinchen wieder " "und guckt, als ob nix geschehen wär.", "take_msg":"Als $der(OBJ_TP) nach dem " "Sparschweinchen auf der Theke greift wird " "dieses lebendig und beißt $den(OBJ_TP) " "ganz fürchterlich in die Hand. Danach " "erstarrt das Sparschweinchen wieder und " "guckt, als ob nix geschehen wär", 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 können 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 außer dem Eintrag "living":1 noch den Eintrag "soul":"Fehlermeldungstext". Beispiel: Wächter auf Stadtmauer: "living":1, "soul":"Der Wächter ist viel zu weit entfernt.", attack Lebende v-items und Kämpfe: Mit einem vitem kann attack_msg man natürlich nicht kämpfen, es kann die beiden folgenden Einträge 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 Eichhörnchen, unerreichbar weit oben für einen Spieler: "attack":"Du springst wie blöde am Baum hoch, " "kommst aber nicht an das Eichhörnchen " "heran.", "attack_msg":"$Der(OBJ_TP) springt wie blöde am " "Baum hoch, aber $er(OBJ_TP) hat zu " "kurze Ärmchen, um an das " "Eichhörnchen 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) zwängt sich in $den('vehikel).", "$Der(OBJ_TP) kommt herangekrochen." }) Automatisch generierte Einträge: (Diese Einträge sollte man nicht selber vornehmen, da sie überschrieben werden.) environment Verweist auf das umgebende V-Item oder auf das Objekt/ den Raum, an welchem dieses V-Item hängt. v_item_master, Diese Einträge sind interner Natur. Sie können sich v_item_path in der Zukunft noch ändern. Beide bilden zusammen eine UNItopia-weit eindeutige Kennung des V-Items. Diese Einträge 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 für die Freunde von Inline-Closures: void create() { ... add_v_item(([ "name":"atlas", "gender":"maennlich", "long":"Ein Atlas.", "dekliniert": (: ({ "Atlas", "Atlasses", "Atlasse", "Atlas", })[$1-1] :), ])); }