Denna fil förklarar hur man gör rum med hjälp av grundrummet /rum/rum.c. (/rum/rum ärver /std/object.c) Börja filen med att ärva standardrummet: inherit "rum/rum"; Skriv sedan din egen funktion med namnet create(), där allt som ska hända när rummet skapas finns med. (/rum/rum.c har ingen create-funktion definierad, så du behöver inte anropa någon sådan.) I create() anropar du följande funktioner och sätter angivna variabler: int set_light(status ljus) Detta är en efun. Om den anropas med argumentet 1 blir det ljust i rummet, med ljus == 0 blir det ett mörkt rum. (Funktionen returnerar antalet ljuskällor i rummet inklusive den du nyss lade till, men det behöver du inte bry dig om just nu.) long_desc = "Lång beskrivning.\n"; Denna variabel håller reda på rummets långa beskrivning, som skrivs ut när någon kommer in i rummet eller gör 'titta'. Du kan sätta den i create() en gång för alla, eller ändra den efter behov. short_desc = "kort beskrivning"; Denna variabel håller reda på rummets korta beskrivning. Den används för att visa var en spelare befinner sig, bl.a. när en magiker gör 'folk'. set_line_break(1) Ett anrop till denna funktion med argumentet 1 gör att all text i long_desc och items blir bruten i lagom långa rader. items = ({ "sak1","Beskrivning1", "sak2","Beskrivning2", }); I den hör variabeln skriver du in beskrivningar på saker i rummets långa beskrivning som det ska gå att titta på. Namnet på saken och beskrivningen hör ihop parvis. Namnet på saken kan bytas ut mot en array av namn. För bra exempel, se /doc/exempel/rum2.c! dest_dir = ({ "första rummets filnamn","riktning1", "andra rummets filnamn","riktning2", }); Med den här varibeln anger du alla synliga utgångar i rummet. Strängarna hör ihop parvis. Den första är filnamnet på det rum spelaren kommer till om han skriver den riktning som anges i den andra strängen. property = ({ "property1","property2",...}); Här sätter du en variabel som håller reda på rummets egenskaper. Se /doc/build/rum/property! set_realm(string realm); Realmen används när man teleporterar. Man kan nämligen inte normalt teleportera sig till en annan realm. Det är ett sätt att definiera olika områden. Titta upp på domänverket i magikernas inre rum! no_castle_flag Om du inte vill att någon ska släppa sitt slott i ditt rum sätter du denna variabel till 1. reset(); Om du har en funktion reset() i ditt rum, anropas den ungefär en gång per en och en halv timme. Det är i reset() du klonar in monster och prylar i rummet, återställer eventuella variabler som du använder dig av. I create() anropar du reset() för att monstren och prylarna ska finnas i rummet från början. *** Det var allt som vanligtvis görs i create(). Övriga funktioner: reset() Se ovan. --- init() Denna funktion anropas när någon kommer in i rummet. Om du vill lägga till egna kommandon som ska kunna utföras i rummet gör du det genom att anropa funktionen add_action() från din egen init(). Om du skriver en egen init() måste du anropa init() i /rum/rum.c, genom att skriva ::init(); i din egen init(). Annars fungerar inte de utgångar du har angett i variabeln 'dest_dir'. void add_action(string funktion,string verb) Denna funktion är en efun (den kan anropas var som helst ifrån). F|rsta argumentet är namnet på en funktion som ska anropas när när någon utför ett kommando som börjar med ordet 'verb'. Resten av kommandot skickas med som argument till funktionen 'funktion', där du kan kolla om den delen av kommandot var riktigt. Om du vill att flera olika ord ska leda till att en och samma funktion anropas, måste du anropa add_action() en gång för varje ord. Funktionen query_verb() returnerar vilket ord som ledde till anropet, om du skulle behöva veta det. I funktionen med namnet 'funktion' ska du returnera 1 om det som funktionen var till för har utförts. Annars ska du returnera 0 så att eventuella prylar som reagerar på samma kommandoord får en chans att agera. Vill du ändå skriva ut en text, anropar du funktionen notify_fail med en sträng som då kommer att ersätta det "Vadå?" som annars skrivs ut. --- status clean_up() Den här funktionen anropas när rummet inte har använts på ett tag. Om funktionen returnerar 1 kommer den att anropas igen efter ytterligare ett tag. Returnerar den 0 sker inga fler anrop till funktionen. I clean_up() i /rum/rum förstörs rummet om det är tomt, med undantag för om någon har lagt till en utgång med hjälp av add_dest_dir(). Att oanvända rum förstörs är själva vitsen med clean_up(). På så sätt sparar man plats i minnet. Om du vill att något annat ska hända kan du skriva en egen funktion som heter clean_up(). Den kommer då att ersätta den gamla. void long(string str) Denna funktion sköter om utskrift av rummets beskrivning och beskrivningarna enligt 'items'. I sällsynta fall kan man behöva skriva sin egen long(), som skriver ut olika saker beroende på omständigheterna. Argumentet 'str' är det som spelaren skrev efter 'titta på','kolla' eller 'undersök'. Om det är rummets beskrivning man är ute efter, kommer alltså str == 0. När du har tagit hand om dina specialfall, kan du låta den vanliga long() ta hand om resten genom att skriva ::long(str); Ex. long(str) { if(str == "dörren") if(door == "open") write("Dörren är öppen.\n"); else write("Dörren är stängd.); else ::long(str); } "dörren" måste finnas med i 'items' för att rummet ska reagera när man försöker titta på den.