% -*-texinfo-*- \input svensktexinfo @ignore @def@svenskmudmaskininfo{Varg �r en Sun 3/280 med 16MB ram, flyttalsaccelerator och SunOS 4.1.1_U1 som �r donerad av Sun. @cindex Svenska Sun Microsystems AB} @end ignore @setfilename magikerbok @settitle Handbok f�r SvenskMUDmagiker @setchapternewpage odd @ifinfo Copyright @copyright{} 1993 Linus Tolke Detta dokument f�r fritt citeras ur och anv�ndas till allt m�jligt s� l�nge det gagnar SvenskMUD, annat ickekommersiellt muddande, utveckling och framsteg inom modern datorteknik eller den svenska hackerkulturen och s� l�nge det sker utan vinstintresse. I �vrigt: Alla r�ttigheter f�rbeh�lles. @end ifinfo @comment Hur jag anv�nder indexen: @comment concept index - anv�nds som generellt index f�r ideer @comment function index - anv�nds som index f�r efuns och spr�kkonstruktioner @comment variable index - anv�nds som index f�r lfuns och variabler i objekt @comment program index - f�r alla typer av filnamn och objektnamn. @comment keystroke index - inga planer @comment data type index - inga planer @synindex pg cp @synindex vr cp @synindex fn cp @smallbook @titlepage @title Handbok f�r SvenskMUDmagiker @subtitle ett hj�lpmedel f�r byggarna i SvenskMUD @author Linus Tolke, Gud @page Detta dokument f�r fritt klippas ur och anv�ndas till allt m�jligt s� l�nge det gagnar SvenskMUD, annat ickekomersiellt muddande, utveckling och framsteg inom modern datorteknik eller den svenska hackerkulturen och s� l�nge det sker utan vinstintresse. I �vrigt: Alla r�ttigheter f�rbeh�lles. @vfill F�r pappersutg�van g�ller dessutom f�ljande speciella f�rbeh�ll: Om du tycker att du har n�gon nytta av den s� s�tt in 30 kr p� postgirokonto 483 11 40-1. De pengarna g�r oavkortat till Linus skaparen (gud) som ur egen ficka i f�rv�g betalat tryckkostnaden. Ge annars bort ditt exemplar till en annan SvenskMUDmagiker. Om du kopierar pappersutg�van s� ta inte med detta speciella f�rbeh�ll. @vfill @vfill @vfill @vfill F�rsta utg�van. Revision 2. @page F�rord till f�rsta utg�van: M�let med denna bok �r att vara en f�rsta hj�lp till nya magiker i SvenskMUD att komma ig�ng med programmeringen. Betoningen �r p� vad man bygger f�r saker och hur objekt samarbetar i spelet och boken inneh�ller inte n�got alls om hur LPC-spr�ket fungerar och anv�nds. Det g�r boken v�ldigt SvenksMUD-specifik. SvenskMUD har under v�ren 1993 varit utsatt f�r stora f�r�ndringar. Det �r egentligen ingenting som ber�r det som st�r i denna bok utan det har mer varit en acceleration i byggandet. Det �r en av orsakerna till att jag tyckte det var viktigt att skriva denna bok. En annan viktig orsak �r att jag tycker inte att anslagstavlorna i spelet, brev-skickande och pratande fungerar tillr�ckligt bra som utbildning f�r nya magiker. Jag vill g�ra n�gonting mer och denna bok �r det b�sta jag kunde komma p�. Sedan revision 0 har det tillkommit en del kapitel men framf�r allt �r hela boken numera ett texinfo-dokument ist�llet f�r frame-maker och det inneb�r att du kan h�mta den infoiserade versionen och ha den i din emacs. Sedan revision 1 har det nya kapitel 1 tillkommit med fokusering p� SvenskMUDs plats i v�rldshistorien. En del andra kapitel eller stycken har bytt plats. Vill du ha fler exemplar, eller SvenskMUD-knappen s� h�r av dig till f�rfattaren Linus. @vfill Tack till: @sp 1 Datorf�reningen Lysator @* Alla magiker i SvenskMUD @* @end titlepage @iftex @hyphenation{Dess-utom} @hyphenation{SvenskMUD} @hyphenation{sven-ska} @hyphenation{regi-stre-rar} @hyphenation{in-ter-pre-terar LPmud} @hyphenation{ar-be-tar en-ligt Lars} @hyphenation{ma-ski-nen Lysator} @hyphenation{Uni-ver-si-te-tets} @hyphenation{stan-dard-pry-lar} @hyphenation{peng-arna fi-ness} @hyphenation{ut-veck-lats ur-sprung-li-ga} @hyphenation{han-te-ring kom-pa-tibi-li-tets-mod en-sam an-storm-ning ver-sion} @hyphenation{In-ter-net engel-ska} @hyphenation{ny-fiken-het} @hyphenation{ur-sprung-li-gen spelar-objektet kom-man-don} @hyphenation{exem-pel} @hyphenation{er-faren-hets-po�ng} @hyphenation{fel-med-delan-dena} @hyphenation{stan-dard-rum kom-man-dot} @hyphenation{fil-nam-net auto-ma-tiskt} @hyphenation{funk-tions-an-rop funk-tions-namn} @hyphenation{exek-ve-rings-fel} @end iftex @node top, SvenskMUDs plats i litteraturen, (dir), (dir) @comment node-name, next, previous, up @menu * SvenskMUDs plats i litteraturen:: * Om SvenskMUD:: * Att t�nka p� n�r du kodar:: * Filtr�det:: * Objekt:: * Masterobjektet:: * Standardgrejor:: * Uppdrag:: * Konventioner:: * Skillnader:: * Problems�kning:: * Magikerverktyg:: Magikerverktyg * Register:: @end menu @node SvenskMUDs plats i litteraturen, Om SvenskMUD, top, top @comment node-name, next, previous, up @chapter SvenskMUDs plats i litteraturen @cindex SvenskMUDs plats i litteraturen @cindex litteraturen Under 1980-talet utvecklades ett internationellt n�tverk av datorer i h�gskolor och universitet och �ven vissa f�retag. Det best�r av snabba unixdatorer och en fundamental byggsten �r snabb och direkt �verf�ring av information mellan n�stan godtyckligt valda datorer i n�tverket. @cindex n�tverk Ett s�dant h�r n�tverk �r en perfekt f�ruts�ttning f�r g�ra datorspel med en fleranv�ndardimension. I den ursprungliga n�tverket �r kapaciteten ganska liten s� de f�rsta spel som uppenbarar sig �r @cindex BSX-mud @cindex Doom textbaserade @footnote{Det finns nu i b�rjan av 1990-talet redan flera olika diskussioner ig�ng om hur man b�st g�r motsvarande spel med grafik och sk. virtual reality och vi har redan sett ett par exempel p� detta: BSX-mud, Doom}. De ser mycket ut som de adventurespel som f�rekom under 1970-talet och alla kommandon och beskrivningar ges med enkel text. Den h�r typen av spel kallas mud. Man kan h�vda att mud bara �r spel men man kan ocks� h�vda att de �r en ny sorts litteratur d�r l�sarens (eller spelarens) och andra l�sares val @cindex l�sare @cindex spelare i varje l�ge p�verkar hur historien kommer att forts�tta. Det finns likheter med traditionell litteratur vad det g�ller den sk�nhet och det intellektuella utbyte som man kan f� ur spelen och ocks� @cindex intellektuellt utbyte @cindex f�rfattaren i hur muddet speglar f�rfattarens upplevelser om samtiden. Till skillnaderna h�r det s�tt p� vilket intrigen byggs upp. I traditionell litteratur �r l�saren (deltagaren) utl�mnad helt �t f�rfattarens val och f�rfattaren har full kontroll �ver hur handlingen byggs upp och f�rs fram�t. I ett mud �r det l�saren (deltagaren) och hans eller hennes med-l�sare (andra spelare) som driver fram handlingen @cindex intrigen och best�mmer hur de olika intrigerna v�vs samman och p�verkar varandra. Att vara f�rfattare till en s�dan h�r flervalshistoria �r mycket sv�rare �n att f�rfatta en vanlig bok, dvs om den skall uppn� samma kvalitet. Till dags dato har inget spel ens lyckats n�rma sig ''kvaliteten'' som finns i den enklaste kiosklitteratur. Mest f�r att det �r sv�rt att �stadkomma en intressant intrig. � andra sidan �r det m�nga saker som finns i mud som aldrig kan realiseras i en vanlig bok. Bl.a. kan f�rfattaren sj�lv finna n�je i att ''l�sa spelet'' eftersom intrigen kan f�r�ndras av andra ''l�sare''. SvenskMUD h�r till en typ av spel som kallas LPmud. Det �r en typ som utvecklats av datorintresserade och en av grundideerna �r att det skall vara l�tt att skapa mer saker i spelet (skriva mer i boken). Detta g�r att spelet f�r�ndras fr�n dag till dag. Det tillkommer saker och saker �ndras. M�nga mud fungerar s� att det finns m�jlighet f�r l�sarna (spelarna) att efter ''slutl�st'' mud, oftast en viss m�ngd avklarade uppdrag i spelet, f� m�jlighet att sj�lva ta del i skapandet. Detta sk�nker ytterligare en intressant dimension av gemensamt f�rfattarskap @footnote{Det r�r sig i SvenskMUDs fall om ca 20 samtidiga aktiva skapare} som �r v�ldigt s�llsynt i den traditionella litteraturen. Egentligen �r skillnaden mellan att vara ''l�sare'' och ''f�rfattare'' lite diffus eftersom ''l�saren'' ocks� p�verkar historien. I SvenskMUD skiljer man p� d�dliga och magiker. Magiker har r�tt att skapa helt nya saker medan de d�dliga �r utl�mnade �t de m�jligheter som magikerna skapar �t dem. @cindex virtuella v�rldar @cindex geografi Ibland kallas v�rlden som finns i spelet f�r en virtuell v�rld och de olika magikerna ansvarar kanske f�r var sitt geografiskt omr�de i den virtuella v�rlden. @menu * M�let med SvenskMUD:: * Problem med detta m�l:: * Stil:: * Organisatoriska problem:: * Guds betydelse:: @end menu @node M�let med SvenskMUD, Problem med detta m�l, SvenskMUDs plats i litteraturen, SvenskMUDs plats i litteraturen @comment node-name, next, previous, up @section M�let med SvenskMUD @cindex m�let med SvenskMUD @cindex amerikanska kulturen Det ursprungliga m�let med SvenskMUD �r att erbjuda ett alternativ till den engelskspr�kiga amerikainfluerade kulturen som finns i den svenska hackerv�rlden och speciellt bland utbudet av muddar. @cindex Internet @cindex spr�ket SvenskMUD var faktiskt f�rst i v�rlden med att erbjuda ett mud p� Internet d�r sj�lva kommunikationsspr�ket var n�got annat �n engelska. Sedan dess har det dykt upp mud p� tyska ocks�. @cindex nordisk mytologi V�rlden �r t�nkt att �terspegla den nordiska mytologin och den svenska litteraturen och utspela sig n�gong�ng p� 1800-talet. @node Problem med detta m�l, Stil, M�let med SvenskMUD, SvenskMUDs plats i litteraturen @comment node-name, next, previous, up @section Problem med detta m�l @cindex problem med m�let Med st�ndigt ca 20 aktiva f�rfattare och en ganska j�mn str�m av nytillkomna s�dana �r det v�ldigt sv�rt att h�lla en v�rld som �r konsistent vad det g�ller tidsepok och geografisk utbredning i den virtuella v�rlden. I synnerhet som en del nytillkomna magiker g�rna vill skapa saker som direkt m�rks f�r spelarna och placerar sina f�rsta saker s� att spelarna formligen snubblar �ver dem @footnote{�nnu mer irriterande �r det eftersom de f�rsta sakerna en ny magiker g�r s�llan h�ller h�g kvalit�.}. Dessutom har en del magiker sv�rt att skaka av sig oket fr�n den amerkanska kulturen och det finns inslag som inte riktigt lever upp till kraven/m�len. @cindex amerikanska kulturen Man m�ste vara medveten om vad det �r f�r personer som �r spelare och blir magiker. Eftersom spelet bara �r tillg�ngligt f�r personer som finns p� Internet s� �r det n�stan uteslutande datorintresserade h�gskolestuderande som spelar. Det inneb�r att mycket av det skapande som g�rs inte handlar om att f� en b�ttre v�rld utan ist�llet �r inriktat p� att hitta programmeringtekniskt utmanande problem och l�sningar. @node Stil, Organisatoriska problem, Problem med detta m�l, SvenskMUDs plats i litteraturen @comment node-name, next, previous, up @section Stilen @cindex stilen Ett annat m�l �r att beh�lla stilen genom hela muddet. Den definierade stilen �r att det skall vara n�gonstans kring sent svenskt 1800-tal med lite fantasy-inslag. Det inneb�r att avancerade vapen, vikingar, familjen Hedenh�s mm inte riktigt passar. Vill man f�rl�gga sitt omr�de till en annan tidsperiod kan man ju se till att konstruera en portal mellan tidsperioderna och p� s� s�tt fixa en ''f�rklarlig'' �verg�ng till en annan v�rld. @node Organisatoriska problem, Guds betydelse, Stil, SvenskMUDs plats i litteraturen @section Organisatoriska problem @cindex organisatoriska problem Det vore ganska enkelt att h�ja kvaliten p� spelet genom att inf�ra h�gre krav p� magikernas kunskap, kr�va att varenda pryl som magikerna skapas skall godk�nnas eller h�nsynsl�st rensa ut prylar som inte passar och magiker som inte h�ller stilen. S�dana �tg�rder orsakar genast mots�ttningar i f�rfattargruppen och resulterar otvivelaktigt i att det fungerande resultatet blir mycket mindre. Mindre diversitet och mindre m�jligheter. Dessutom finns det ingen som har tid att st�lla upp med den tid som beh�vs f�r det trista arbetet att godk�nna och rensa ut prylar. I SvenskMUD �r m�let att skapa en kreativ och hj�lpsam anda bland magikerna. I viss m�n har stilm�let och kvalit�n f�tt kompromissas f�r att alla skall k�nna att de �r v�lkomna att deltaga i skapandeprocessen. Geografiska inkonsistenser i den virtuella v�rlden l�ses genom att �vertala magikern att flytta sitt omr�de ist�llet f�r att flytta det utan f�rvarning. Inkonsistenser i tidsepoken l�ses genom att man skapar en tidsmaskin eller genom att man l�ter spelaren b�rja dr�mma och i dr�mmen vara i en annan v�rld eller liknande. Allt f�r att s� m�nga som m�jligt skall f� utlopp f�r sin kreativitet och k�nna p� denna alldeles speciella typ av f�rfattarskap. @cindex kreativitet @cindex f�rfattarskap Ett angr�nsande problem �r att f�rfattarna �r spridda �ver hela Sverige (egentligen hela v�rlden) och i stor utstr�ckning inte k�nner varandra. Att kommunikationen dem emellan �r begr�nsad till att prata med varandra i spelet i den m�n de r�kar vara inne i spelet samtidigt och skicka brev till varandra g�r det ibland kan vara sv�rt att f�rst� varandra. Det blir l�tt missf�rst�nd. @node Guds betydelse, , Organisatoriska problem, SvenskMUDs plats i litteraturen @section Gud p�verkar @cindex gud p�verkar @cindex demokrati @cindex diktator Pga ovanst�ende kommunikationsproblem kan det inte skapas en fungerande demokrati i spelet utan jag har utnyttjat min position som gud och implementerat mina ideer. P� senare tid har jag mest utnyttjat min diktatorst�llning till att utse �rkemagiker som jag tror kan beh�lla den kreativa milj�n och arbeta f�r konsistens i spelet. I detta val har jag ocks� f�rs�kt verka f�r att SvenskMUDs underh�llningsv�rde skall �ka och skapandet skall koncentreras p� en fin v�rld. De ideer som jag implementerade ursprungligen �r: @iftex @nobreak @end iftex @itemize @bullet @item Alla magiker f�r l�sa �verallt, det �r allts� l�tt att se hur andra g�r sina objekt och saker. Jag tror att detta �r ett v�ldigt bra s�tt att l�ra sig hur man g�r olika saker. @item S� stor frihet som m�jligt f�r att inte s�tta k�ppar i hjulet p� kreativiteten. I vissa avseenden �r det i SvenskMUD v�ldigt h�gt i tak vad det g�ller vad en magiker f�r g�ra och inte f�r g�ra. @item Alla magiker kan g�ra lika mycket/lite i spelet. Magiker kan spionera p� d�dliga men inte p� andra magiker. Det finns i spelet f� tekniska begr�nsningar som skiljer ut magiker p� olika niv�er. Det �r sv�rt att avg�ra hur detta uppfattats bland magikerna. De flesta verkar inte f�rst� att jag och �rkemagikerna inte tvunget �r b�ttre programmerare utan f�ruts�tter att vi besitter �verl�gsen intelligens och kunskap. @item M�let med muddet �r att erbjuda intressant underh�llning f�r de som spelar. Underh�llningsv�rdet �kar om spelet hela tiden lyckas stimulera spelarens uppfinningsrikedom och nyfikenhet. Siffror som rapporterar tekniska detaljer om spelet, tekniska kommentarer mm. st�r sk�nheten i mudv�rlden. Eftersom spelarens egenskaper �r implementerade som siffror och kroppens funktioner bara �r matematiska operationer p� dessa siffror �r det lockande f�r den late f�rfattaren att bara rapportera dessa siffror rakt av till spelaren. Jag vill att underh�llningsv�rdet i SvenskMUD skall finnas i de saker som skapas och i historierna som utspelas och att det inte som i andra mud ska bli en jakt p� siffror och d�rf�r har jag i flera olika steg f�rs�kt f� bort siffrorna ur spelarnas v�rld. @end itemize @node Om SvenskMUD, Att t�nka p� n�r du kodar, SvenskMUDs plats i litteraturen, top @comment node-name, next, previous, up @chapter Om SvenskMUD @cindex Om SvenskMUD @menu * Drivern:: * SvenskMUDs historia:: * Maskinen som SvenskMUD k�r p�:: * Lysator:: @end menu @node Drivern, SvenskMUDs historia, Om SvenskMUD, Om SvenskMUD @comment node-name, next, previous, up @section Drivern och var kommer den ifr�n SvenskMUD �r ett LPmud. Det inneb�r att drivern �r av samma typ som den driver som @cindex Lars Pensj� @cindex Pensj�, Lars @cindex Chalmers dataf�rening - CD Lars Pensj� vid Chalmers dataf�rening CD f�rst skrev. Den interpreterar ett C-liknande spr�k kallat LPC. SvenskMUD k�r f�r n�rvarande en lite justerad version 3.1.2. av drivern. @cindex Genesis Den f�rsta LPmudden kom i april 1989 och det var Genesis som k�rdes p� milou vid CD. Det var skrivet i LPC och spelets spr�k var engelska. I maj 1989 s� hade �ven f�reningen Lysator ett mud, d� k�randes p� brutalix. Det �r detta mud som sedermera blev det legendariska nannyMUD, @cindex nannyMUD som �r det f�r n�rvarande �ldsta muddet som bygger p� det ursprungliga mudlibbet och har magiker kvar fr�n allra f�rsta b�rjan. @node SvenskMUDs historia, Maskinen som SvenskMUD k�r p�, Drivern, Om SvenskMUD @comment node-name, next, previous, up @section SvenskMUDs historia @cindex historia SvenskMUD s�g dagens ljus den 29 juli 1991. Det har utvecklats genom �vers�ttning av nannyMUDs mudlib. Precis i b�rjan fanns det till och med vissa objekt och rum som var de urpsrungliga engelskspr�kiga objekten vilket ledde till en hel del lustiga texter. Det som gjordes var en direkt �vers�ttning vad g�ller viktiga rum och funktioner, kyrkan, puben, spelarobjektet mm, men jag passade p� att bygga om byn s� att den fick en lite annorlunda utformning, dvs rummen sitter ihop p� ett lite annorlunda s�tt. Exempel p� detta �r att man g�r ur kyrkan v�sterut, man kommer till Leo fr�n �ventyrarnas klubb ist�llet f�r fr�n kyrkan. N�r vi v�l hade gjort det mesta av arbetet med �vers�ttningen s� var vi tvungna att l�gga till en del saker i mudlibbet f�r att det skulle passa b�ttre med det svenska spr�ket. Bl.a. s� har @code{set_gender} fler alternativ. @vindex @code{set_gender} Ett annat exempel �r hantering av namn i best�md form. @code{query_namnet} och @vindex @code{query_namnet} att funktionen @code{set_name} tar tv� argument eller en array. @vindex @code{set_name} @menu * Ny driver:: * Drivern unik:: * Spelarna str�mmar till:: @end menu @node Ny driver, Drivern unik, SvenskMUDs historia, SvenskMUDs historia @comment node-name, next, previous, up @subsection Ny driver I januari 1992 s� gjordes ett byte fr�n COMPAT @footnote{COMPAT eller kompatibilitetsmod. N�r den nya drivern version 3 kom s� kunde man k�ra den i s.k. COMPAT mode. Det inneb�r att man kunde anv�nda sina gamla mudlib utan problem.} till NATIVE @footnote{NATIVE eller ordinarie mod. De nya mudlibben kr�ver denna mod. I NATIVE finns ett masterobjekt.}. Det innebar att en hel del objekt m�ste skrivas om och det �r bl.a. nu som master-objektet kommer till anv�ndning. (I kompatibilitetsmod finns inget masterobjekt.) @node Drivern unik, Spelarna str�mmar till, Ny driver, SvenskMUDs historia @comment node-name, next, previous, up @subsection Lite sm�patchar i drivern g�r SvenskMUDdrivern v�ldigt unik Under sommaren 1992 s� lades det in st�d f�r iso-8859-1 tecken i drivern. Det innebar att de som har ett kommunikationsprogram som klarar iso-8859-1 tecken samt ett terminalprogram som klarar det kan f� tecknen ������. F�r de som k�r med �ldre utrustning konverteras all utmatning till @}@{|][\ eller iso-646. @node Spelarna str�mmar till, , Drivern unik, SvenskMUDs historia @comment node-name, next, previous, up @subsection Spelarna str�mmar �ntligen till Fram till och med sommaren 1992 hade SvenskMUD levt en ganska undanskymd tillvaro och Harry var under stora tider helt ensam inne i spelet. Under h�sten 1992 kom det en stor anstormning spelare fr�n Halmstad, Ume� med flera st�llen och de blev ocks� snabbt magiker. V�ren 1993 s�g en ny anstormning, nu med folk fr�n Stockholms universitet och de drog �ven med flera av n�sta �rskurs som fyllt spelet under h�sten. Dessutom tillkom det en hel del spelare fr�n Lule� under h�sten. @node Maskinen som SvenskMUD k�r p�, Lysator, SvenskMUDs historia, Om SvenskMUD @comment node-name, next, previous, up @section Maskinen som SvenskMUD k�r p� @cindex @file{bodil} @cindex @file{bodil.lysator.liu.se} @cindex @file{maskinen som SvenskMUD k�r p�} SvenskMUD k�r f�r tillf�llet p� @file{bodil.lysator.liu.se} hos Dataf�reningen Lysator vid Tekniska H�gskolan i Link�ping - LiTH. @cindex LiTH Bodil �r en Sun 4/280 med 32MB ram och SunOS 5.3 som �r donerad av Sun. @cindex Svenska Sun Microsystems AB @ignore Varg �r en Sun 3/280 med 16MB ram, flyttalsaccelerator och SunOS 4.1.1_U1 som �r donerad av Sun. @end ignore @node Lysator, , Maskinen som SvenskMUD k�r p�, Om SvenskMUD @comment node-name, next, previous, up @section F�reningen Lysator @cindex f�reningen Lysator @cindex Lysator @cindex Datorf�reningen Lysator Datorf�reningen Lysator vid Link�pings Tekniska H�gskola �r en studentf�rening oavh�ngig Universitetets och Tekniska H�gskolans officiella organisation och d�rj�mte varje annan yttre intressesf�r. Lysator �r en medlemsorganisation i F�rbundet unga forskare. Lysator har till uppgift att bibringa sina medlemmar m�l och m�jlighet att f�rdjupa sig i datorteknik och datorvetenskap och att sprida kunskap om modern datorteknik. @node Att t�nka p� n�r du kodar, Filtr�det, Om SvenskMUD, top @chapter Att t�nka p� n�r du kodar Resten av denna handbok �r t�nkt att f�rs�ka ge tips till nya och gamla magiker vad det g�ller hur man skapar saker i spelet. Tipsen g�ller b�de tekniska fr�gor och stilfr�gor. @menu * Budorden:: * Livet som magiker:: * Planer att f�rkasta:: @end menu @node Budorden, Livet som magiker, Att t�nka p� n�r du kodar, Att t�nka p� n�r du kodar @comment node-name, next, previous, up @section De tio budorden @cindex att t�nka p� som magiker @cindex de tio budorden @cindex tio guds bud @cindex guds bud @cindex buden En hel del tips kan sammanfattas i dessa tio bud. @unnumberedsec Du skall inga andra gudar hava j�mte emacs. @iftex {@it Vad �r det?} @end iftex @cindex editera filer Det st�r dig n�stan helt fritt att v�lja vilka metoder du vill anv�nda f�r att editera filer om de bara p� n�got s�tt kan samarbeta med de grundl�ggande metoderna f�r att f� in filer i spelet (@code{ed} och @code{ftp}). Emacs med ange-ftp fungerar bra om bara n�gon l�gger in programmet @code{ls} hos dig i ditt @file{bin}-bibliotek. Det finns allts� ingen som helst anledning att tillbe avgudar som @code{ed}, @code{vi} och @code{framemaker}. @cindex @code{ed} @cindex @code{ftp} @cindex @code{emacs} @cindex filer @unnumberedsec Du skall anv�nda herren din guds namn. @iftex {@it Vad �r det?} @end iftex Gl�m inte att fylla alla dina rum med bilder, statyer och reliefer av Gud. @cindex atmosf�r @cindex nyb�rjare Dessutom kan du fylla dem med m�nniskor, djur och saker. Det ger atmosf�r och g�r det m�jligt f�r nyb�rjare att samla ihop lite saker och om du g�r monstren pratsamma s� kan de ge tips till nyb�rjaren som stannar och lyssnar. @cindex svartlista Inte heller vad det g�ller namn skall du hysa n�gra som helst bet�nkligheter. Se bara till att svartlista de namn du anv�nder och inte anv�nda redan svartlistade namn eller spelares namn. @unnumberedsec T�nk p� vilodagen s� du fixar buggar d�. @iftex {@it Vad �r det?} @end iftex S�ndagar brukar det inte vara s� mycket folk inne i spelet s� det �r en synnerligen l�mplig dag att leta buggar p�. @unnumberedsec Hedra inte din fader och din moder, f�r att det m� g� dig v�l och du m� bli od�dlig i SvenskMUD. @iftex {@it Vad �r det?} @end iftex Din fader och moder vet inte hur m�nga timmar du sitter och kodar ett visst rum eller omr�de. Beh�ver de veta? @unnumberedsec Du skall dr�pa. @iftex {@it Vad �r det?} @end iftex @cindex monster @vindex @code{reset} @cindex vikten p� lik Prova att sl� ihj�l alla dina monster som du skapar och verifiera att de kan d�, att de kommer tillbaka vid n�sta @code{reset} genom att anropa @code{reset} i rummet och kolla s� att vikten p� liket �r rimlig. @unnumberedsec Du skall beg� �ktenskapsbrott. @cindex �ktenskapsbrott @iftex {@it Vad �r det?} @end iftex @cindex gifta sig Det finns faktiskt ingen som har kodat en m�jlighet att gifta sig �n i SvenskMUD trots prat om s�dant. Tills dess kan du ju f�rs�ka lyda detta bud. Att vara otrogen mot sin trolovade r�knas inte som �ktenskapsbrott i detta fall. @unnumberedsec Du skall stj�la. @iftex {@it Vad �r det?} @end iftex Om du inte vet hur du skall g�ra vissa saker s� fundera ut var du sett n�got liknande och titta hur det �r gjort d�r. Det b�sta s�ttet att l�ra sig �r att kolla hur andra g�r saker. Om du l�nar till alla dina saker s� gl�m f�r den skull inte att l�ra dig under tiden. @unnumberedsec Du skall b�ra falskt vittnesb�rd mot din n�sta. @iftex {@it Vad �r det?} @end iftex Hela v�rlden �r ju egentligen en schim�r. Se till att h�lla skenet uppe f�r spelarna s� l�nge s� m�jligt. Undvik att skicka ut text av teknisk karakt�r till spelarna. G�r fullst�ndiga meningar som betyder n�got, tillr�ckligt fullst�ndiga f�r att spelarna ska f�rst� vad det handlar om. Var speciellt f�rsiktig om du h�ller p� att eka eller ropa saker. T�nk p� att spelarna lever i en annan v�rld och anpassa dina meddelanden till det. Ropa t.ex. ''Nu skall jag ge mig iv�g p� en l�ng uppt�cksresa i �st och nord.'' ist�llet f�r ''Nu g�r jag hem och l�gger mig.''. @unnumberedsec Du skall hava beg�relse till din n�stas hus och hans rum. @iftex {@it Vad �r det?} @end iftex Spring omkring i de andras omr�den, kolla vad de bygger, skicka en massa buggrapporter och g�r sedan b�ttre sj�lv. @unnumberedsec Du skall hava beg�relse till din n�stas hustru, vapen och rustningar, �ven hans oxar och �snor och allt som �r din n�stas. @iftex {@it Vad �r det?} @end iftex �ven n�r det g�ller de andra magikernas prylar skall du se till att anv�nda dem. Om du vill ha ett likadant monster som en annan magiker gjort �r det bara att klona ett s�dant och stoppa in det i ditt rum. F�rbeh�llet givetvis att det kan vara bra om den andre magikern k�nner till det s� att han inte, dig ovetande, �ndrar filnamn eller andra egenskaper hos det monstret. @node Livet som magiker, Planer att f�rkasta, Budorden, Att t�nka p� n�r du kodar @section Livet som magiker Livet som magiker skiljer sig i v�ldigt stor grad fr�n livet som spelare. Som spelare kan man inte se de tekniska sv�righeter och m�jligheter som magikerna har. Att g�ra bra och genomt�nkta saker �r sv�rt och kr�ver mycket t�lamod och tid. @cindex nyblivna magiker Det h�nder att nyblivna magiker har v�ldigt stora planer och f�rdigritade kartor med hundratals rum som de vill g�ra, men s� finner de att de egentligen inte har tid att g�ra det och l�gger ner projektet. Man kanske skall passa p� att p�peka att fler rum oftast inte �r b�ttre. Det g�r att g�ra mycket p� bara ett f�tal rum och det �r betydligt b�ttre att g�ra ett bra rum d�r det kan h�nda saker �n 100 tomma rum. Ur spelets och spelarnas synvinkel spelar det kanske inte s� stor roll om dina h�gtflygande planer inte blir implementerade f�r att det visade sig att du inte har tid och det �r heller ingen som tar illa upp om du �ngrar dig och g�r n�got annat ist�llet. F�r din egen skull kanske det �r b�st att ta ett steg i taget och b�rjar med att g�ra roliga sm�saker medan du l�r dig det man beh�ver kunna f�r att kunna g�ra bra saker. F�rst n�r du k�nnt p� vad som �r m�jligt och hur l�ng tid saker tar �r det dags att b�rja planera st�rre projekt. @node Planer att f�rkasta, , Livet som magiker, Att t�nka p� n�r du kodar @section Planer att f�rkasta Som skapare har man ett ansvar f�r att se till att v�rlden blir s� bra som m�jligt. Det �r n�gonting man slipper som spelare. Det kan vara ganska sv�rt f�r vissa begrepp blir helt st�llda p� huvudet. Fr�n att pengar p� banken har betytt trygghet s� �r nu problemet hur mycket man skall ta betalt f�r olika tj�nster som man implementerar. Andra saker att t�nka p� �r att n�r man som spelare springer omkring s� �r man inne i historien och d� g�ller det att f� s� bra prylar som m�jligt. Det �r l�tt att t�nka att n�r jag blir magiker skall jag minsann g�ra b�ttre �n det h�r. B�ttre i bem�rkelsen kraftigare. Det �r �nnu l�ttare att faktiskt implementera en s�dan pryl men det riskerar att sabotera balansen i spelet. Se @ref{Inflation}. @node Filtr�det, Objekt, Att t�nka p� n�r du kodar, top @chapter Filtr�det @cindex filtr�det Detta kapitel beskriver hur muddets filer �r organiserade i ett tr�d. Normalt kan man som magiker orientera sig runt i filtr�det med kommandon som liknar de som finns i unixshellar. @code{cd}, @code{ls}, @code{mkdir}, @code{rmdir} finns till exempel. @cindex @code{chroot(2)} Filtr�det �r direkt uppbyggt p� UNIXens filtr�d. Drivern g�r inte @code{chroot(2)} men skrivning och l�sning av filer som inte ligger under detta tr�d �r trots det helt om�jlig inifr�n drivern eftersom alla filnamn kontrolleras. @cindex symboliska l�nkar Detta g�r att man kan ha symboliska l�nkar som pekar ut ur detta filtr�d. @menu * Kataloger p� toppniv�n:: * Driverns loggfiler:: @end menu @node Kataloger p� toppniv�n, Driverns loggfiler, Filtr�det, Filtr�det @comment node-name, next, previous, up @section Kataloger p� toppniv�n @cindex toppniv�n @cindex @code{ls} Toppniv�n kan man se genom att g�ra @code{ls /}. Vissa av dessa filer �r kataloger och vissa �r filer. Om man g�r @code{ls -F /} ist�llet kommer katalogerna att listas med ett @code{/} efter�t. @menu * /bin:: * /doc:: * /etc:: * /include:: * /log:: * /obj:: * /rum:: * /secure:: * /spelare:: * /std:: * /stdobj:: * /texter:: * /|vrigt:: @end menu @node /bin, /doc, Kataloger p� toppniv�n, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{bin} @cindex kommandon @cindex bin�rfiler, en sorts @pindex @file{commands.h} @pindex @file{/include/commands.h} @pindex @file{player.c} @pindex @file{/obj/player.c} Jag har b�rjat lite sm�tt med att gruppera kommandon under @file{/bin}. Det h�r samman med @file{/include/commands.h} och det �rvs ocks� av spelarobjektet @file{/obj/player.c}. Iden med att placera varje kommandon i en fil kommer ursprungligen fr�n TMI @footnote{The Mud Institute, ett mud i USA med m�let att producera ett bra mudlib, �ven namnet p� mudlibbet till skillnad fr�n CD mudlibbet.} d�r den �r helt genomf�rd. @cindex TMI Vinsterna med denna uppdelning av kommandon �r: @itemize @bullet @item Det blir l�ttare att underh�lla eftersom varje kommando kan underh�llas f�r sig. Man beh�ver inte uppdatera hela spelarobjektet f�r varje liten �ndring. @item Hj�lpen finns n�ra det kommando det handlar om. I min implementation hamnar det i samma fil och det g�r inte att l�gga hj�lptexten n�gon annanstans. @item Spelarobjektet inneh�ller funktioner f�r att s�tta om sin path. Den beror n�mligen av spelarens variabel @code{PATH}. @item I min implementation s� kan man pipea saker som i unix mellan vissa av kommandona: @example head *.c ^ grep filen ^ more @end example @end itemize Problemet med det hela �r att det inte �r riktigt genomf�rt. Det finns bara ett begr�nsat antal kommandon som man kan kombinera p� detta s�tt. Ett annat problem �r att det �r ganska sv�rt att skriva nya kommandon. En utmaning kanske? L�s filerna @file{/bin/IDE} och @file{/bin/S]FUNKARDET} f�r att se hur det �r t�nkt att det ska fungera. @node /doc, /etc, /bin, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{doc} @cindex dokumentation All dokumentation f�r hur spelet fungerar samlas h�r. Det kan vara bra att l�sa igenom allt under denna katalog innan man b�rjar jobba med sina objekt. Viktigast �r nog @file{build}dirret. @pindex @file{obsolet} I flera av underkatalogerna finns det en katalog som heter @file{obsolet}. D�r har jag flyttat ner de filer som ersatts av nyare, i samband med �vers�ttning eller omskrivning. @menu * /doc/build:: * /doc/efun:: * /doc/lfun:: * /doc/exempel:: * /doc/uppdrag:: @end menu @node /doc/build, /doc/efun, /doc, /doc @subsubsection @file{build} - hj�lpfiler f�r standardprylar @pindex @file{REGLER} @pindex @file{/doc/build/REGLER} I denna katalog finns bland annat filen @file{/doc/build/REGLER}. Den inneh�ller lagar och f�rordningar som reglerar magikernas upptr�dande och vad magikerna f�r g�ra och inte f�r g�ra. @emph{Denna fil skall l�sas av alla magiker!} Andra bra filer som du ska titta p� �r @file{vapen.lista}, @file{monster.lista}, @file{skydd.lista} och @file{drycker.lista}. De inneh�ller information om de olika objekten och riktlinjer f�r hur objekten ska se ut. @node /doc/efun, /doc/lfun, /doc/build, /doc @comment node-name, next, previous, up @subsubsection @file{efun} - funktioner som drivern erbjuder @cindex efun @cindex external functions De funktioner som finns i drivern brukar kallas efunar (engelska: external functions.). De �r de grundl�ggande funktionerna och allt man egentligen har n�r det g�ller att bygga sina objekt. @cindex magikerboken @pindex @file{/obj/magikerbok.c} @cindex @code{man} De flesta efunar finns beskrivna i denna katalog. Har du magikerboken kan du komma �t dem t.ex beskrivningen av @code{find_player} med @samp{man find_player}. Jag har nyligen stoppat in en kopia Profezzorns @file{lpc_for_morons} h�r. Detta f�r att den �r b�ttre. De gamla filerna kan du hitta i @file{/efun.old}. @node /doc/lfun, /doc/exempel, /doc/efun, /doc @comment node-name, next, previous, up @subsubsection @file{lfun} - funktioner i standardobjekt Funktioner i vissa standardobjekt kallas f�r lfunar (ursprungliga engelska betydelsen local functions). De funktioner som beskrivs �r fr�mst de som finns i monster och prylar, men �ven en del viktiga funktioner som anropas fr�n drivern: @iftex @nobreak @end iftex @itemize @bullet @item @vindex @code{catch_tell} @findex @code{enable_commands} @code{catch_tell} anropas i objekt som gjort @code{enable_commands} om n�gon pratar till objektet, dvs objektet finns i ett rum d�r n�gon g�r @code{say}, som n�gon g�r @code{tell_room} till eller liknande. @findex @code{tell_room} @findex @code{say} @item @vindex @code{init} @code{init} anropas n�r ett objekt flyttas in i ett annat objekt. Dels anropas @code{init} i objektet som vi flyttar in i och dels anropas @code{init} i alla andra objekt som redan fanns i det objektet vi flyttas in i. @item @vindex @code{exit} @code{exit} ska du helst inte anv�nda. @footnote{Detta �r en av de mest v�lbevarade myterna i LPmudv�rlden. I drivrar av version 2 s� anropas n�mligen @code{exit} i rummet n�r man ska flytta ut ett objekt ur rummet. Om det blir ett fel i den funktionen fanns det ingen som helst m�jlighet att f� ut spelaren ur rummet. SvenskMUD k�r en driver version 3 och d�r sker inte detta. Du kan allts� fritt anv�nda funktionen @code{exit} som vilken annan funktion som helst.} @item @vindex @code{id} @findex @code{present} @code{id} anropas n�r man g�r @code{present}. Den ska returnera sant eller falskt beroende p� om objektet k�nns vid en visst namn. @end itemize @node /doc/exempel, /doc/uppdrag, /doc/lfun, /doc @comment node-name, next, previous, up @subsubsection @file{exempel} I denna katalog har jag samlat exempel p� kod. De flesta exempel r�r hur man hanterar uppdrag, matobjekt och dessutom n�gra som handlar om hur man uppdaterar objekt fr�n COMPATmod till NATIVE. H�r borde nog egentligen lagts ner mer arbete men jag f�redrar att skriva denna bok. Om du har n�got bra exempel p� n�gonting s� l�gger vi in det h�r f�r andra att l�ra sig av. @node /doc/uppdrag, , /doc/exempel, /doc @comment node-name, next, previous, up @subsubsection @file{uppdrag} - uppdragsbeskrivningar @cindex uppdrag Alla uppdrag ligger beskrivna h�r, med l�sningar. Ett uppdrag �r godk�nt om det finns med i detta dir och inte godk�nt om det inte finns med. Detta dir ska vara l�sskyddat f�r alla andra �n SvenskMUDs magiker. @node /etc, /include, /doc, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{etc} H�r sparas bland annat breven som posten skickar ut och breven som ligger och v�ntar p� att du ska l�sa dem. @node /include, /log, /etc, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{include}filer Det finns en default-path f�r att hitta include-filer som anv�nds om includefilen refereras med @example #include <filnamn> @end example Detta dir �r f�rst i denna default-path. Saker som ligger h�r �r bl.a @file{gender.h} som anv�nds f�r att hantera k�nen och @file{tune.h} som reglerar hur spelet �r justerat, dvs hur mycket ett erfarenhetspo�ng kostar i �ren. @node /log, /obj, /include, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{log} - loggfiler @cindex loggfiler @pindex @file{/log} @findex @code{log_file} Det finns en speciell efun som anv�nds f�r att logga saker n�mligen @code{log_file}. Vilket objekt som helst f�r skriva med den men d� hamnar det alltid i detta dir. H�r finns det ocks� vissa filer som skrivs hit av spelet. Se till att rensa dina filer h�r regelbundet. De magikerspecifika filerna f�r magikern @file{linus} �r: @table @file @item linus @cindex felmeddelanden fr�n laddningen N�r du laddar objekt och f�r fel s� skrivs felmeddelandena i denna fil. Det enklaste s�ttet att hantera den under programmeringsfasen �r att: @enumerate @item radera filen @item ladda sitt objekt @item om det blir fel s� tittar man i filen @end enumerate @item linus.rep @cindex @file{rep}filer @cindex @kbd{bugg} @cindex @kbd{ide} @cindex @kbd{stavfel} @cindex @kbd{ber�m} N�r n�gon spelare eller magiker skriver @kbd{bugg}, @kbd{ide}, @kbd{stavfel} eller @kbd{ber�m} s� hamnar det i din denna fil om @itemize @bullet @item Han st�r i n�got av dina rum n�r han g�r det. @item @findex @code{present} Han anger n�got objekt som mudden associerar till dig. (Detta �r en ganska obskyr finess. Om man skriver @samp{bugg sv�rdet kan inte d�da} och @code{present} i spelaren hittar sv�rdet och du har gjort sv�rdet s� hamnar det hos dig. Om spelaren menar ett annat sv�rd �n det @code{present} hittar s� hamnar det nog fel.) @end itemize @end table @node /obj, /rum, /log, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{obj} - muddens grundobjekt @pindex @file{obj} @cindex grundobjekt H�r �terfinns alla muddens standardobjekt i en salig blandning. Dels vissa specialobjekt med speciella funktioner (@file{/obj/shut}, @file{/obj/leo}) och dels objekt som man b�de kan �rva och klona (@file{/obj/monster}, @file{/obj/treasure}, @file{/obj/weapon} mfl.) @node /rum, /secure, /obj, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{rum} - muddens ursprungsv�rld @pindex @file{/rum} @pindex @file{rum} @cindex rum @cindex v�rlden H�r ligger alla rum som ing�r i den ordinarie v�rlden. Det finns en uppdelning i underbibliotek f�r olika geografiska omr�den. (@file{/rum/generisk}, @file{/rum/|ster@}ker}, @file{/rum/strandhamn} mfl.) @pindex @file{init_file} @pindex @file{/rum/init_file} Av n�gon outgrundlig anledning (tradition heter det nog) ligger �ven filen @file{init_file} i detta dir. Det �r den filen som l�ses n�r man ska avg�ra vilka slott som ska l�sas in n�r spelet startas om. @cindex omstart @node /secure, /spelare, /rum, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{secure} Viktigare objekt ligger h�r. Det viktigaste �r masterobjektet. Masterobjektet har dels hand om s�kerheten och dels reglerar det vad som h�nder n�r spelet bootar om. @cindex s�kerheten @cindex omstart Se @ref{Masterobjektet}. @node /spelare, /std, /secure, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{spelare} @pindex @file{spelare} Under spelardirret sparas alla spelarnas data, dvs hur m�nga po�ng de skrapat ihop, hur l�ng tid de varit inne mm. Dessa spelarfiler skrivs med @code{save_object} p� spelarobjektet n�r man g�r @kbd{spara}, r�kar ut f�r @samp{Jag sparar dig automatiskt.} och n�r man g�r @kbd{sluta}. @ifinfo @cindex @kbd{spara} @cindex @kbd{sluta} @findex @code{save_object} @end ifinfo Dessutom �r det h�r som magikerna f�r sin filkatalog som de sj�lv best�mmer �ver. Denna skapas n�r man sl�pper sitt slott och d� skrivs ocks� slottet dit. @cindex slott @pindex @file{castle.c} @pindex @file{/rum/init_file} En speciell fil �r @file{castle.c}. Denna laddas vid uppstart och �r din enda m�jlighet att l�nka in ditt omr�de. Denna autoladdningsm�jlighet regleras i filen @file{/rum/init_file} och kopplas p� n�r du sl�pper ditt slott. Den kan givetvis ocks� plockas bort om du inte sk�ter ditt omr�de eller inte vill ha det med i spelet l�ngre. @node /std, /stdobj, /spelare, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{std} @pindex @file{/std/object.c} En del standardobjekt, grundstommar f�r andra objekt, finns h�r. Bl.a @file{/std/object.c} som �r det standardobjekt som alla saker som existerar i spelet ska �rva. @file{/std/namn.c} �r en sak jag gjorde n�r jag flyttade alla funktioner som hade med namn att g�ra fr�n @file{/obj/treasure}, @file{/obj/weapon} mfl. hit. @node /stdobj, /texter, /std, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{stdobj} - enkla f�rdiga prylar @cindex f�rdiga prylar @cindex Radagast Ibland kan det vara s� att man vill ha ett enkelt standardvapen eller en annan standardpryl. Det �r t�nkt att man ska kunna klona dem h�rur. Radagast har varit flitig och lagt in ett vapen av varje vapenklass samt d�rrar. @cindex magikerverktyg I underkatalogen @file{magiker} finns magikerverktyg dvs. objekt som magiker kan anv�nda som verktyg f�r sitt konstruerande. @node /texter, /|vrigt, /stdobj, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{texter} I @file{texter}-katalogen sparas vissa texter som anv�nds i mudden. Bl.a. texterna man f�r upp n�r man loggar in, @iftex @samp{{@sl SvenskMUDs Dagblad}} @end iftex @ifinfo @samp{SvenskMUDs Dagblad} @end ifinfo och topplistan �ver spelarna. @iftex @cindex {@sl SvenskMUDs Dagblad} @end iftex @ifinfo @cindex SvenskMUDs Dagblad @end ifinfo @cindex @samp{Svenska Mudbladet} Det kan kanske vara intressant f�r magikerna att veta att alla gamla nummer av @iftex @samp{{@sl SvenskMUDs Dagblad}} @end iftex @ifinfo @samp{SvenskMUDs Dagblad} @end ifinfo och @samp{Svenska Mudbladet} finns sparade h�r. @comment Den som vill kan ju skriva ett bibliotek d�r man kan l�sa gamla nummer. @node /|vrigt, , /texter, Kataloger p� toppniv�n @comment node-name, next, previous, up @subsection @file{|vrigt} gammalt skr�p @pindex @file{|vrigt} @pindex @file{/|vrigt} En gammal katalog som ligger kvar. Det g�r inte att ladda in och anv�nda objekt som ligger i denna katalog f�r det till�ts inte enligt masterobjektet. Om du har saker som borde ligga h�r s� har du fel. De borde kanske ligga i @file{/stdobj}. @node Driverns loggfiler, , Kataloger p� toppniv�n, Filtr�det @comment node-name, next, previous, up @section Driverns loggfiler @table @file @item LP_SWAP.3.bodil @pindex LP_SWAP.3.bodil F�r att spara minne sl�nger drivern ut programmen f�r de objekt som inte anv�nts nyligen p� denna fil. D�r h�mtas de n�r de beh�vs. Filen f�rl�ngs hela tiden och rensas bara n�r drivern startar om. @item OBJ_DUMP @pindex @file{OBJ_DUMP} @pindex @file{/OBJ_DUMP} @cindex @code{dumpallobj} Denna fil inneh�ller en lista av alla objekt i hela v�rlden. Den uppdateras bara om man ger kommandot @code{dumpallobj} i muddet. Det kan ibland vara anv�ndbart f�r att f� reda p� om saker finns, vilka saker som finns och var saker finns. @item lpmud.log @pindex @file{lpmud.log} @pindex @file{/lpmud.log} @ifinfo @findex @code{write} @findex @code{this_player} @end ifinfo @cindex �terstart Vi k�r ett �terstart-skript som fixar s� att stdout och stderr fr�n drivern hamnar i slutet av filen @file{lpmud.log}. Det som drivern skriver p� stdout �r n�r den misslyckas att ladda in vissa objekt. Dessutom om man anropar @code{write} utan att @code{this_player} �r satt till n�gonting s� skrivs det ut p� stdout (med ett @code{]} f�re). @item bodil.debug.log @pindex @file{bodil.debug.log} @pindex @file{/bodil.debug.log} @cindex backtrace Detta �r driverns egen loggfil. Dvs om det blir exekveringsfel i n�got objekt s� skrivs det ut en stack backtrace h�r med funktionsnamn, radnummer och objekt. @end table @node Objekt, Masterobjektet, Filtr�det, top @chapter Hur fungerar objekt? @cindex objekt Objekt i mudden associeras alltid med ett filnamn. Om filnamnet �r @file{/obj/hej.c} s� f�r objektet namnet @file{/obj/hej} och kloner till det objektet f�r namnen @file{/obj/hej#123} d�r @file{123} �r ett nummer som tilldelas i sekvens fr�n 0 d� v�rlden startar om. @cindex f�rlaga @cindex kloner @cindex klonade objekt Objektet med namnet @file{/obj/hej} kallas h�danefter f�r f�rlagan och objekten med namnen @file{/obj/hej#123} kallas f�r kloner eller klonade objekt. F�r varje typ av objekt kan det antingen bara finnas kloner eller ocks� bara f�rlagan inne i spelet. Om man f�rs�ker klona ett objekt d�r redan f�rlagan finns i spelet s� f�r man @samp{Cloning a bad object}. Om man f�rs�ker anv�nda (�ndra variabler i) f�rlagan f�r ett objekt som �r klonat s� f�r man @samp{Using a cloned object}. @cindex bad object @cindex cloned object @menu * F�rlagan:: * Kloner:: * Vad finns i objektet:: * std/object.c:: @end menu @node F�rlagan, Kloner, Objekt, Objekt @comment node-name, next, previous, up @section F�rlagan @cindex f�rlaga Om man vill vara s�ker p� att det bara finns en enda kopia av en viss pryl i muddet ska man g�ra det som en f�rlaga. F�r rum finns normalt bara en f�rlaga. F�r att g�ra om rum s� g�r man @iftex @samp{uppdatera {@it filnamn}} @end iftex @ifinfo @samp{uppdatera filnamn} @end ifinfo och sedan g�r man in i dem igen eller laddar in dem med @cindex @code{ladda} @iftex @samp{ladda {@it filnamn}} @end iftex @ifinfo @samp{ladda filnamn} @end ifinfo . @cindex slott @pindex @file{castle.c} @cindex @code{ladda} Ditt slott (@file{castle.c}) �r ocks� bara en f�rlaga. Det inneb�r att du inte ska klona det utan det ska laddas. @findex @code{create} @code{create} anropas i f�rlagan n�r den laddas. @node Kloner, Vad finns i objektet, F�rlagan, Objekt @comment node-name, next, previous, up @section Kloner @cindex kloner @cindex klonade objekt @findex @code{clone_object} F�r att skapa en klon av ett objekt anv�nder man helt enkelt @code{clone_object} och man anger d� som argument namnet p� f�rlagan. Det man f�r tillbaka �r en nyskapad klon. @example object hej; hej = clone_object("/obj/hej"); @end example @vindex @code{create} Om f�rlagan inte �r laddad s� laddas den f�rst och @code{create} anropas i den, d�refter klonas ett objekt och @code{create} anropas i klonen. @node Vad finns i objektet, std/object.c, Kloner, Objekt @comment node-name, next, previous, up @section Vad finns i objektet? F�rdigt i objekten finns m�jligheter att flytta objekt in i och ut ur varandra, m�jligheter att ta reda p� vilket objekt jag finns i samt vilka objekt som finns i mej. Dessutom finns det m�jlighet att avg�ra om ett objekt �r ''living'' eller inte. Att det �r ''living'' inneb�r att det har ett namn s� att man kan hitta det med @code{find_living}, som g�r det snabbt att hitta monster och spelare. @findex @code{find_living} Objekt kan ocks� ha en s.k. ''heart_beat''. Det inneb�r att funktionen @code{heart_beat} anropas regelbundet i objektet. Alla monster anv�nder sig av detta f�r att sl�ss och r�kna upp sin egen �lder. Spelare anv�nder den dessutom f�r att hela. @vindex @code{heart_beat} @cindex �lder @cindex helande Om man kan s� skall man f�rs�ka undvika att anv�nda sig av @code{heart_beat} eftersom det anropas s� ofta. I de allra flesta fall kan man klara sig lika bra med en @code{call_out} som har betydligt l�ngre tidsintervall. @findex @code{call_out} @node std/object.c, , Vad finns i objektet, Objekt @comment node-name, next, previous, up @section @file{std/object.c} Om man bara vill g�ra ett enkelt program s� kan man kanske n�ja sig med det men oftast vill man �ven ha m�jlighet att flytta in objektet s� att det fungerar i spelet. F�r att g�ra det m�ste objektet (i n�got led) �rva filen @file{/std/object.c}. Alla standardprylar som man �rver ifr�n, @file{/rum/rum}, @file{/obj/weapon}, @file{/obj/treasure} mfl g�r redan detta s� om man anv�nder n�gon av dem �r det inga problem. I @file{/std/object} finns det inte s� mycket och egentligen borde det finnas �nnu mindre d�r. @findex @code{move_object} Det som finns �r bl.a. en @code{move_object} som g�r att man kan flytta vilket objekt som helst. Normalt, i NATIVE, �r att varje objekt bara kan flytta sig sj�lv med @code{move_object}. @cindex genushantering @vindex @code{set_maskulinum} @vindex @code{set_femininum} @vindex @code{set_utrum} @vindex @code{set_neutrum} @vindex @code{query_gender} @vindex @code{query_pronoun} Jag har sl�ngt in genushanteringen h�r. Det inneb�r att alla objekt i spelet har funktionerna @code{set_maskulinum}, @code{set_femininum}, @code{set_utrum}, @code{set_neutrum}, @code{query_gender}, @code{query_pronoun} mfl och dessutom en variabel som h�ller reda p� detta. Om du inte �rver @file{/std/object} i n�got led s� g�r det inte att flytta in objektet i spelet. Det existerar men finns utanf�r. Detta kan vara f�rvillande om man inte k�nner till det. @node Masterobjektet, Standardgrejor, Objekt, top @chapter Masterobjektet @pindex masterobjektet Masterobjektet har tv� uppgifter. Vid start av spelet s� �r det masterobjektet som best�mmer vad som ska g�ras och dels n�r det g�ller vissa speciella efunar, de som skriver och l�ser filer. Masterobjektet �r det objekt som f�r fr�gor fr�n drivern om huruvida en viss l�sning av en fil �r till�ten eller inte. @menu * Vid start:: * S�kerheten:: @end menu @node Vid start, S�kerheten, Masterobjektet, Masterobjektet @comment node-name, next, previous, up @section Vid start @cindex uppstart @cindex start @cindex �terstart N�r spelet startar s� sker f�ljande: @itemize @bullet @item @vindex @code{create} i masterobjektet Funktionen @code{create} anropas i masterobjektet. @item @vindex @code{flag} i masterobjektet Funktionen @code{flag} anropa en g�ng f�r varje argument till flaggan -f som drivern startas med. @item @vindex @code{epilog} i masterobjektet Funktionen @code{epilog} anropas. @pindex @file{/rum/init_file} @pindex @file{init_file} Det �r i denna funktion som filen @file{/rum/init_file} l�ses och f�rladdar det som ska f�rladdas. @item Sedan b�rjar spelet lyssna efter uppkopplingar. @end itemize @node S�kerheten, , Vid start, Masterobjektet @comment node-name, next, previous, up @section S�kerheten @cindex s�kerheten @iftex @vindex @code{valid_{@it whatever}} @end iftex @ifinfo @vindex @code{valid_whatever} @end ifinfo @vindex @code{valid_write} Masterobjektets andra stora uppgift �r s�kerheten i spelet. Det finns ett antal @iftex @code{valid_{@it whatever}}-funktioner @end iftex @ifinfo @code{valid_whatever}-funktioner @end ifinfo som anropas n�r man g�r olika ''farligare'' saker. N�r man ska skriva p� en fil s� anropas @code{valid_write} f�r att kolla att du f�r lov att skriva p� den filen. Den anropas med filnamn, vilket s�tt man h�ller p� att skriva filen med och vem som g�r det. Sedan avg�r funktionen om det �r till�tet eller inte. @vindex @code{valid_read} Om du l�ser masterobjektets fil ser du att @code{valid_read} alltid returnerar sant. Det �r ett medvetet val. Alla ska ha m�jlighet att l�sa �verallt! @node Standardgrejor, Uppdrag, Masterobjektet, top @chapter Standardgrejor @cindex standardgrejor Det som man b�r t�nka p� oavsett vad det �r man bygger �r att man ska f� det att passa in i stilen och reagera p� vissa standardkommandon. Ett par handskar beh�ver inte vara utrustade med en CRAY-17 armbandsdator med m�jlighet att skicka laserstr�lar och ett monster beh�ver inte springa omkring �verallt och skapa 10000 kloner av sig sj�lv. Oftast �r det mycket roligare om man h�ller sig till stilen och g�r v�lgenomt�nkta saker med finesser som de som t�nker lite kommer p�. T.ex att man bara kan fiska om man har ett metsp�, bara kan se vad som finns i kistan om man har �ppnat den f�rst. @menu * Skatter:: * Pengar:: * Lappar:: * Vapen:: * Rustningar:: * Monster:: * Rum:: * Inflation:: @end menu @node Skatter, Pengar, Standardgrejor, Standardgrejor @comment node-name, next, previous, up @section Skatter @cindex skatter @pindex @file{/obj/treasure.c} @pindex @file{treasure.c} Den enklaste typen av objekt att bygga �r nog skatter. Det �r bara att klona @file{/obj/treasure} och s�tta v�rden och namn mm. Enda sv�righeten �r att veta vilka v�rden olika saker ska ha. Det �r ocks� en avv�gningsfr�ga n�r man ska avg�ra hur mycket man ska dela ut. Saker som bara ligger och skr�par ska vara billiga, typiskt under 20 �re. De �r inte on�diga bara f�r att de �r s� billiga utan de �r till f�r att �ven nyb�rjare ska ha n�got att plocka upp och springa och s�lja. Om det ligger en liten liten b�rnsten vid stranden eller en vacker blomma p� �ngen som man kan s�lja i aff�ren s� kommer det ocks� att bidraga till st�mningen. Saker som stora monster b�r p� och som �r extra bel�ning f�r att man har lyckats sl� ihj�l det kan ju vara lite v�rdefullare. Likas� saker som ligger i sv�r�tkomliga rum. @node Pengar, Lappar, Skatter, Standardgrejor @comment node-name, next, previous, up @section Pengar @cindex pengar Pengar �r lite speciella. N�r de finns i spelaren och i monster s� �r de bara ett v�rde i en variabel. Om man d�r s� skapas ett objekt som �r pengar och som �r v�rt ett visst belopp. Tar man det objektet f�rsvinner det och pengarna l�ggs till de pengar man redan har. Att pengarna alltid visas som daler och �ren �r tillagt efter�t. Det finns en f�rdig funktion f�r konverteringen. I filen @file{/obj/libfun} finns funktionen @code{print_money} som tar ett belopp i �ren som argument och returnerar en str�ng. @pindex @file{/obj/libfun} @pindex @file{libfun.c} @vindex @code{print_money} @node Lappar, Vapen, Pengar, Standardgrejor @comment node-name, next, previous, up @section Lappar, anslag och skyltar @pindex skyltar @pindex anslag @pindex lappar Det finns i spelet ett antal skyltar, lappar och anslag. Vissa h�mtar datan de visar fr�n yttre filer, se t.ex. topplistan som ligger i puben och @iftex @samp{{@sl SvenskMUDs Dagblad}} @end iftex @ifinfo @samp{SvenskMUDs Dagblad} @end ifinfo . Andra saker att t�nka p� �r att skyltar, tidningar mm ska man kunna @code{l�s}a, likv�l som man kan @code{titta p�} dem. Dessa b�da s�tt att unders�ka dem p� beh�ver inte resultera i samma text men b�da m�jligheterna ska finnas. @node Vapen, Rustningar, Lappar, Standardgrejor @comment node-name, next, previous, up @section Vapen @cindex vapen @pindex @file{/doc/build/vapen.lista} N�r man g�r vapen ska man titta i @file{/doc/build/vapen.lista}. Den inneh�ller en lista av l�mpliga niv�er p� olika vapen f�r att man l�tt ska se hur bra man ska g�ra det. H�r �r det v�ldigt viktigt att g�ra rimliga saker. En kniv �r oftast mycket s�mre att sl�ss med �n ett spjut t.ex. Hur mycket de olika sakerna �r v�rda �r helt reglerat i listan. Speciella saker att t�nka p� �r att vapen med h�gre niv� �n 17 plockas bort ur aff�ren om n�gon skulle s�lja dem och att vapen med en h�gre niv� �n 20 ska ha allvarliga nackdelar. Hur allvarliga de beh�ver vara bed�ms av den �rkemagiker som godk�nner det. @node Rustningar, Monster, Vapen, Standardgrejor @comment node-name, next, previous, up @section Rustningar och kl�der @cindex rustningar @cindex skydd @cindex kl�der N�r man g�r rustningar och kl�der s� finns det vissa saker som man m�ste t�nka p� f�r att alla rimlighetskrav ska uppfyllas. @pindex @file{/doc/build/skydd.lista} Dels finns det i @file{/doc/build/skydd.lista} en lista �ver vilka niv�er som �r till�tna f�r olika rustningstyper och vilka kostnader de f�r ha. Dessutom ska man se till att h�lla sig till de typer som finns, bokstavsgrannt, s� att man inte kan ta p� sig f�r mycket skydd. @pindex @file{/obj/armour} Enklaste s�ttet �r att klona @file{/obj/armour} och s�tta namn, typ och klass. @node Monster, Rum, Rustningar, Standardgrejor @comment node-name, next, previous, up @section Monster @cindex monster @vindex @code{create} @pindex @file{/obj/monster.c} @findex @code{set_living_name} @findex @code{enable_commands} N�r du bygger monster m�ste du se till att de blir ''living'', det blir de om du anropar @code{create} i @file{/obj/monster} (eller p� n�got annat s�tt g�r @code{set_living_name} och @code{enable_commands}. �ven n�r det g�ller monster �r det viktigt att man anv�nder sin kreativitet f�r att de ska bli trevliga. Monstren �r inte automatiskt b�ttre f�r att de �r starkare och man beh�ver inte b�rja med j�ttemonstret Allan. �ven sm� monster �r befogade f�r att ge atmosf�r och ge tips f�r nyb�rjarna. @cindex atmosf�r @cindex k�n @emph{Gl�m inte att s�tta k�n.} @cindex lik @cindex vikten p� lik N�r ett monster d�r skapas ett lik. Man kan i monstret s�tta ett v�rde p� hur mycket liket skall v�ga. G�r man inte det s� v�ger liket 5, som ungef�r motsvarar en m�nniska. Mitt f�rslag �r att s�tta mindre (1-2) p� katter och hundar och mer (8-15) p� kor, h�star och bj�rnar. @menu * heart_beat i monster:: * Monster av olika raser:: @end menu @node heart_beat i monster, Monster av olika raser, Monster, Monster @comment node-name, next, previous, up @subsection Speciell hantering av @code{heart_beat} i monster @cindex helande hos monster @cindex @code{heart_beat} i monster @vindex @code{heal_slowly} @vindex @code{heart_beat} Monster helas inte i @code{heart_beat} utan ist�llet i funktionen @code{heal_slowly}. Detta beror p� att n�r du l�mnar ett monster s� st�ngs @code{heart_beat} av f�r att sl�s p� igen n�r n�gon kommer. @code{heal_slowly} anropas via @code{call_out} varannan minut �nda till monstret �r helt l�kt. D� slutar den f�r att startas igen n�sta g�ng n�gon b�rjar sl� p� monstret. Detta sparar kraft f�r drivern i och med att monstrets @code{heart_beat} st�ngs av. Om du g�r ett monster s� se till att f�rs�ka anv�nda denna eller liknande mekanism f�r att sl� av @code{heart_beat} d� monstret st�r ensamt i ett rum. @cindex magisk styrka @cindex besv�rjelser En annan sak som b�r observeras �r att monster inte har n�gon magisk styrka. Hur m�nga besv�rjelser de kastar beror helt och h�llet p� vilka slumpfaktorer du har satt. @node Monster av olika raser, , heart_beat i monster, Monster @comment node-name, next, previous, up @subsection Monster av olika raser @cindex raser @vindex @code{set_race} Monster har en parameter som man kan s�tta som avg�r vilken ras monstret �r av. Den ska s�ttas till ett ord i obest�md form singularis best�ende enbart av gemener. Exempel. hund, katt, troll, m�nniska. Egentligen borde det finnas f�rdiga monster att klona fram och bara s�tta niv�n hos. Det borde i s� fall ligga i @file{/stdobj/monster}. D� borde det finnas en fil/objekttyp f�r varje ras. Exempel p� vad man skulle kunna g�ra �r: @table @asis @item insekt Speciella egenskaper: l�mnar inget lik, har v�ldigt h�g smidighet, smiter l�tt in i ett annat rum. Man s�tter namnet (mygga, fluga, bi, geting, broms). @item f�gel Speciella egenskaper: l�mnar ett l�tt och litet lik som �r �tbart, har h�g smidighet. Man s�tter namnet (koltrast, stare, bl�mes, kr�ka, skata, berguv...), niv�. @item gnagare Speciella egenskaper: ganska snabba, bits. Man s�tter namnet (b�ver, sork, ekorre, r�tta, mus...), om det �r ett vatten-, mark- eller tr�ddjur. @item generiskt d�ggdjur Speciella egenskaper: l�mnar ett �tbart lik, ganska tungt, sl�r ganska h�rt. Man s�tter sorten (ko, h�st, �lg, ren) och namnet (Rosa, Brunte, H�lge, Rudolf), storlek/styrka. @item troll Speciella egenskaper: f�rstenas om de kommer ut i dagsljus, har svans, �r aggressiva. Man s�tter styrkan, vilket vapen det ska ha, namnet, deras texter. @end table @node Rum, Inflation, Monster, Standardgrejor @comment node-name, next, previous, up @section Rum @cindex rum @cindex beskrivningar Speciella saker att t�nka p� n�r man g�r rum �r att g�ra beskrivningar f�r olika saker. Har man en pub kan det vara kul om man kan titta p� bardisken eller n�got och f� en liten text om den. @pindex @file{/rum/rum} @vindex @code{items} I det vanliga @file{/rum/rum} s� kan man enkelt klara detta med @code{items}. Andra saker att t�nka p� �r att g�ra vettiga beskrivningar och att inte �verlasta rummen med prylar. @vindex @code{clean_up} Om man anv�nder sig av ordinarie rummen s� kommer de att rensas bort vid @code{clean_up} om de �r tomma. Dvs efter ca 2 timmar om ingen har varit i dem. Vill man beh�lla dem, f�r att man lagrar variabler eller annat d�r, s� f�r man definiera om @code{clean_up}. @node Inflation, , Rum, Standardgrejor @comment node-name, next, previous, up @section Inflation i spelet @cindex inflation Inflation uppkommer om magikerna utan begr�nsning skapar dyrare och dyrare eller b�ttre och b�ttre saker. Nackdelarna �r att nyb�rjare f�r det sv�rare (dvs �ven de enklaste monster �r f�r sv�ra) och att man m�ste g�ra om kraven hela tiden, kanske �ndra till niv� 30 f�r att bli magiker med 100 miljoner erfarenhetspo�ng. @emph{De mekanismer som finns f�r att motverka detta finns d�r f�r att motverka detta och inte f�r att kring�s!} @itemize @bullet @item Aff�rer betalar bara upp till tio daler f�r prylar, aldrig mer. @cindex aff�rer Se till att inte g�ra saker som �r dyrare �n tio daler, det retar bara upp spelarna. @item Listorna f�r vapen, rustningar och monster ska f�ljas. Att g�ra dyrare och b�ttre saker hela tiden �r ett symptom p� att man �r ny som magiker eller att man har d�lig fantasi. Det �r ocks� den fr�msta anledningen till att det blir inflation. @end itemize @node Uppdrag, Konventioner, Standardgrejor, top @comment node-name, next, previous, up @chapter Uppdrag @cindex uppdrag N�r man kommit en bit p� v�g med sitt byggande �r det kanske dags att b�rja fundera p� att g�ra ett uppdrag. @cindex uppdragens syfte @cindex syftet med uppdragen @cindex m�let med uppdrag Uppdragen har tre syften: @enumerate @item De ska stimulera spelarens uppt�ckargl�dje och uppmuntra till tankeverksamhet. @cindex uppt�ckargl�dje @cindex tankeverksamhet @item De ska hindra att spelandet blir mekaniskt, dvs se till att man inte kan spela enbart mha. makron. @cindex mekaniskt spelande @item De ska tvinga spelarna att utforska v�ldigt stor del av v�rlden innan de blir magiker s� att de vet vad som finns och g�r sig en bild av v�rlden. @end enumerate @menu * Ditt m�l med uppdraget:: * Presentation av uppdraget:: @end menu @node Ditt m�l med uppdraget, Presentation av uppdraget, Uppdrag, Uppdrag @comment node-name, next, previous, up @section Ditt m�l med uppdraget @cindex m�let med uppdrag Det f�rsta du ska t�nka ut n�r du b�rjar planera ett uppdrag �r vad ditt syfte �r med uppdraget. Om ditt syfte �r att spelaren ska utforska hela din del av v�rlden s� �r det f�rsta du ska g�ra att se till att din del av v�rlden g�r att g� i och ''t�l'' att utforska. Dvs det finns n�got kul @footnote{med kul menas h�r givetvis kul att unders�ka, intressant beskrivning, intressanta fraser, intressanta effekter n�r monstret d�r, n�r man tar p� prylen eller... Inte att monstret eller prylen �r starkast eller b�st i hela v�rlden.} i varje rum, n�got monster, n�gon pryl, n�got ih�ligt tr�d, ... @node Presentation av uppdraget, , Ditt m�l med uppdraget, Uppdrag @comment node-name, next, previous, up @section Presentation av uppdraget @cindex presentation av uppdraget @cindex historia kring uppdraget Du m�ste dikta ihop en liten historia om ditt uppdrag. N�gon beh�ver hj�lp med n�got �r det typiska scenariot. @cindex magikeraspirant Eftersom uppdraget ska l�sas flera g�nger, en g�ng f�r varje magikeraspirant, s� �r det bra om du kan f� ihop historien s� att det p� n�got s�tt �r f�rklarligt att det kan l�sas flera g�nger. Kanske ett litet sk�despel en stund efter (medan spelaren st�r och begrundar bel�ningen) som p� n�got s�tt �terst�ller saker s� att det kan l�sas p� nytt. @node Konventioner, Skillnader, Uppdrag, top @comment node-name, next, previous, up @appendix Ordf�rklaringar @cindex konventioner @cindex ordf�rklaringar @table @asis @item mud @cindex mud SvenskMUD �r ett mud. Mud �r en engelsk f�rkortning och st�r f�r Multi User Dungeon, (FlerAnv�ndarGrotta i direkt�vers�ttning). Vissa anv�nder �ven begreppet mud f�r att beteckna spel som jobbar med ett grafiskt gr�nssnitt mot anv�ndaren. @item klient @cindex klient Program som man anv�nder f�r att koppla upp sig mot drivern. Den mest spridda �r nog telnet. @cindex telnet @item driver @cindex driver Det program som k�r sj�lva spelet. Det tar hand om uppkopplingar fr�n spelare samt laddar och interpreterar ("k�r") filer. @item LPC @cindex LPC Det programmeringsspr�k som man skriver objekten i i SvenskMUD och alla andra LPmud. Det liknar C. @item LPmud @cindex LPmud Muddar som arbetar enligt samma princip som Lars Pensj�s ursprungliga mud, Genesis. Dvs man skriver objekten i LPC. @cindex Genesis @item mudlib @cindex mudlib F�rutom drivern best�r sj�lva spelet ocks� av en massa objekt. Dessa utg�r mudlibbet. Ibland n�r man pratar om mudlib av olika versioner s� brukar man dock inte inkludera de enskilda magikernas filer. @item magiker @cindex magiker @itemx d�dliga @cindex d�dliga N�r man b�rjar spela �r man en d�dlig spelare, men om man klarat alla uppdrag och samlat ihop tillr�ckligt med erfarenhet blir man upph�jd till magiker. Det inneb�r att man f�r lov att modifiera v�rlden genom att skapa nya saker. Man kan betrakta magikerskapet som m�let med spelet och det �r det enda m�l som finns i ett LPmud, f�rutom att ha roligt. I vissa delar av den h�r boken har jag kallat magikerna f�r f�rfattare eller skapare. Det �r de som skapar spelet och utan dem vore spelet d�tt. @item �rkemagiker @cindex �rkemagiker En �rkemagiker �r f�rmer �n andra magiker. De �r de som �vervakar magikernas arbete och best�mmer �ver v�rlden. @item gud @cindex gud @cindex demokrati Gud �r sj�lvutn�mnd. Det visar att jag �r f�rmer �n andra magiker och �rkemagiker. Om du undrar varf�r det �r p� detta viset s� beror det p� att det inte finns n�gon fungerande demokrati i SvenskMUD. Om det inte finns n�gon fungerande demokrati �r de enda alternativen diktatur eller kaos. Det kan bara finnas en gud. @item efun @cindex efun external function. Dvs. en funktion som finns i drivern. De �r implementerade i C och d�rf�r effektivare. Dessa kan anv�ndas fr�n alla objekt. @item lfun @cindex lfun local function. Dvs. en funktion som finns i n�gon fil och som anropas antingen fr�n drivern, fr�n ett annat objekt eller fr�n samma objekt. Dessa �r skrivna i LPC och exekveras d�rf�r mindre effektivt �n efunarna. @item simul_efun @cindex simul_efun En funktion som fungerar precis som en efun men som inte �r en efun. De finns definierade i filen @file{/obj/simul_efun.c} och det �r fixat s� @pindex @file{/obj/simul_efun.c} att de kan anv�ndas fr�n alla objekt utan att man beh�ver �rva n�got speciellt. Dessa �r ocks� skrivna i LPC. @item f�rlaga @cindex f�rlaga F�r alla objekt i spelet finns en f�rlaga. F�r vissa objekt, t.ex rum, anv�nds bara f�rlagan. @item kloner @cindex kloner N�r man har en f�rlaga kan man skapa kloner till denna. De �r exakta kopior s� n�r som p� att de har en egen upps�ttning variabelv�rden. @end table @node Skillnader, Problems�kning, Konventioner, top @appendix Vad skiljer C och LPC @setchapternewpage on @cindex Vad skiljer C och LPC? @cindex skillnader mellan C och LPC @cindex LPC @cindex C @cindex Erik A. Kay @cindex Kay, Erik A. Tack till: @cite{Erik A. Kay} -- @cite{Wayfarer @@ TMI} som jag l�nat det mesta av detta kapitel av. @menu * Vad har C som inte LPC har:: * Vad har LPC som inte C har:: @end menu @node Vad har C som inte LPC har, Vad har LPC som inte C har, Skillnader, Skillnader @comment node-name, next, previous, up @section Vad har C som inte LPC har? @enumerate @item Stark typkontroll. I LPC finns ingen egentlig kontroll att man i en variabel av en viss typ verkligen har ett v�rde av den typen. Man kan d�remot deklarera funktioner s� att de tar vissa typer som argument och vid kompileringstillf�llet kolla att alla anrop �r korrekta. @ignore @item Kontroll av anropade funktioner. LPC ger inget felmeddelande om du f�rs�ker anropa en funktion som inte finns. Det returnerar d� bara 0. Det inneb�r att du kan anropa funktioner/metoder i objekt utan att du beh�ver veta n�got om objektet du anropar funktionerna i vid kompileringstillf�llet. @end ignore @item Typerna @code{unsigned}, @code{float}, @code{double}, @code{long}, @code{char}, @code{void *} mfl. Vissa av dessa ers�tts helt eller delvis av andra typer. @item Konstruktionerna @code{struct}, @code{union}, @code{enum}, @code{typedef}. �ver huvud taget existerar inte alls mycket konstruktioner som ska ber�knas vid kompileringstillf�llet. @code{struct} och @code{union} kan man implementera med mappings eller arrayer men hela hanteringen m�ste ske vid exekveringstillf�llet. @code{enum} och @code{typedef} tvingas man emulera med @code{#define}. @item C's standardbibliotekfunktioner Det g�r inte att komma �t C's biblioteksfunktioner fr�n de olika objekten. Vad man kan g�ra och inte kan g�ra �r begr�nsat av vilka efunar som finns. Man tvingas l�gga till nya efunar om man vill ut�ka detta, det inneb�r en omkompilering av drivern. @item Statiska lokala variabler Man tvingas g�ra en objekt-global variabel. @item Globala variabler Man tvingas g�ra ett speciellt objekt hos vilket man registrerar variabelv�rden. Personligen tycker jag detta �r en snygg l�sning. @item Flyttal @end enumerate @node Vad har LPC som inte C har, , Vad har C som inte LPC har, Skillnader @comment node-name, next, previous, up @section Vad har LPC som inte C har? @cindex Vad har LPC som inte C har? Dessa skillnader kan delas in i tre stora grupper: @itemize @bullet @item Saker som sker vid k�rningen av ett objekt. @item Saker som har med objektorienteringen att g�ra @item Str�ngar och arrayer och speciella funktioner f�r dessa. @end itemize @menu * Vid k�rning:: * Objektorienterade funktioner:: * Str�ngar:: @end menu @node Vid k�rning, Objektorienterade funktioner, Vad har LPC som inte C har, Vad har LPC som inte C har @comment node-name, next, previous, up @subsection Vid k�rning av kod @cindex vid k�rning av kod @findex @code{call_other} Alla objekt �r av en och samma typ. Det inneb�r att funktionsanrop i objekt m�ste vara v�ldigt generaliserad. Det finns egentligen bara ett enda s�tt att anropa en funktion i ett annat objekt och det �r med funktionen @code{call_other}. Den tar som argument ett objekt eller m�jligtvis filnamn, ett funktionsnamn och eventuella argument. Argumenten kan vara av godtycklig typ och det finns inget som helst s�tt att vid kompileringen av objekt, kolla om man har r�tt typer. Vidare returnerar @code{call_other} n�gonting som har datatypen @code{mixed} s� ska man anv�nda det vidare m�ste man tala om vad det �r f�r typ, med ett c-liknande @code{cast}. @node Objektorienterade funktioner, Str�ngar, Vid k�rning, Vad har LPC som inte C har @comment node-name, next, previous, up @subsection Objektorienterade funktioner @cindex objektorienterade funktioner @itemize @bullet @item Anropandet av funktioner i andra objekt. Man kan anropa funktioner i andra objekt med @code{call_other(}objekt, funktionsnamn, argument@code{)} @footnote{Man kan �ven skriva: objekt@code{->}funktion@code{(}argument@code{)}}. @item @cindex �rvning @cindex multipel �rvning Multipel �rvning. Det �r inga som helst konstigheter med att �rva flera olika filer. Man kan ocks� sj�lv v�lja fr�n vilket �rvt objekt som en funktion ska anropas. Ex fr�n facklan: @iftex @nobreak @end iftex @example inherit "/std/object"; inherit "/std/namn"; short() @{ if (is_lit) return namn::short() + " (t�nd)"; else return namn::short(); @} @end example Det inneb�r att @code{short} i @file{namn} anropas �ven om det skulle finnas en @code{short} i @file{/std/object.c}. @item @cindex privata funktioner @cindex privata variabler Variabler och funktioner kan vara privata. Om man vill att de �rvda objekten inte ska kunna modifiera en variabel mer �n genom vissa funktioner kan man g�ra variabeln privat (@code{private}). P� samma s�tt kan man begr�nsa funktioners r�ckvidd. @findex @code{private} @item Funktioner kan g�ras unika. En funktion kan deklareras s� att inget objekt till�ts definiera om funktionen efter att ha �rvt det objektet. Det g�r man med uttrycket @code{nomask}. @findex @code{nomask} @end itemize @node Str�ngar, , Objektorienterade funktioner, Vad har LPC som inte C har @comment node-name, next, previous, up @subsection Str�ngar, arrayer och mappings. @cindex str�ngar @cindex arrayer @cindex mappings @cindex sl� ihop str�ngar Str�nghanteringen i LPC �r v�ldigt enkel. N�r man summerar str�ngar s� sl�s de ihop till en l�ng str�ng. Blandar man in tal s� konverteras de till str�ngar f�rst. F�r att g� fr�n en str�ng som inneh�ller ett tal till ett tal anv�nder man @code{sscanf}. @footnote {Ej att f�rv�xla med C-bibliotekens @code{sscanf}, den som finns h�r �r mycket enklare och �r en del i spr�ket. Man ska exempelvis inte skicka med pekare till tal och str�ngar utan variablerna direkt.} @findex @code{sscanf} Arrayer kan man ocks� addera och d� f�r man en ny array som �r sammanslagningen av de tv�. Man kan ocks� subtrahera arrayer fr�n varandra, det inneb�r att man f�r en ny array som inneh�ller alla element i den f�rsta arrayen utom de som finns i b�da. P� b�de str�ngar och arrayer kan man ta ut delar av dem med hj�lp av intervall-operationer. @findex intervall-operationer Ex. @samp{"hej"[1..2]} blir @samp{"ej"}. Mappings �r en helt ny typ. Man kan kalla det en slags array d�r indexen kan vara vad som helst. Dessutom finns det funktioner f�r att ta fram alla index eller alla v�rden. @node Problems�kning, Magikerverktyg, Skillnader, top @appendix Problems�kning @cindex problems�kning @cindex fels�kning @cindex ofta st�llda fr�gor Ofta st�llda fr�gor med svar eller n�gra ideer p� vad som kan vara fel. @unnumberedsec N�r jag lade till min g�mda utg�ng i mitt rum slutade riktningarna definierade med dest_dir att fungera. @vindex @code{init()} @vindex @code{rum::init()} @vindex @code{dest_dir} @findex @code{add_action} Du har definierat om @code{init()} (f�r att l�gga till dina saker). F�r att @code{dest_dir}-riktningarna ska fungerar m�ste du anropa @code{rum::init()} i @code{init()} s� att det g�rs @code{add_action()} p� @code{dest_dir}-riktningarna. @unnumberedsec Efter att jag lade till min finess i @code{heart_beat()} slutar monstret att sl�. @vindex @code{heart_beat()} Se till att du anropar @code{::heart_beart()} fr�n @code{heart_beat()}. Den sk�ter stridsmekanismen samt ser till att sl� av heart_beat n�r ingen spelare finns i n�rheten (sparar mycket exekveringstid f�r drivern). @unnumberedsec Den sl�r p� mig men om jag g�r ut ur rummet och v�ntar tv� sekunder s� sl�r den inte igen. @vindex @code{init()} Har du definierat om @code{init()} f�r monstret? Om du gl�mt att anropa @code{::init()} s� kommer n�mligen inte heart_beat att s�ttas ig�ng automatiskt n�r n�gon kommer in. @unnumberedsec N�r jag lade till en extra finess att utf�ras i @code{heart_beat()} p� mitt monster s� st�ngs heart_beat av hela tiden. @vindex @code{heart_beat()} @pindex @file{/bodil.debug.log} @pindex @file{bodil.debug.log} @cindex exekveringsfel Du har antagligen introducerat n�got exekveringsfel. Kolla slutet av filen @file{/bodil.debug.log} och se om du kan hitta felet. @unnumberedsec Jag har en pryl som ska komma fram varje reset men fr�n b�rjan finns de inte d�r. @vindex @code{reset()} Anropar du @code{reset()} fr�n @code{create()}? Funkar det att klona dem vid sidan om? �r de synliga? Om du s�tter en pryls namn mm i @code{reset()} ist�llet f�r i @code{create()} s� blir de osynliga fram till f�rsta reset. @unnumberedsec N�r jag klonar fram mitt objekt som ska generera ett annat objekt (paret) s� f�r jag ibland tv� andra objekt. @cindex pare @vindex @code{create} @cindex f�rlaga Du skapar paret fr�n @code{create()}. @code{create()} anropas f�rst i f�rlagan och sedan i klonen. Kanske det ena paret �r pare till f�rlagan. @unnumberedsec Jag har gjort en specialpryl men den ''finns inte'', dvs jag lyckas inte klona den trots att den laddar utan fel. @pindex @file{/std/object.c} Har du �rvt @file{/std/object} i n�got led? @node Magikerverktyg, Register, Problems�kning, top @comment node-name, next, previous, up @appendix Magikerverktyg @cindex magikerverktyg Magikerverktyg kallar jag de saker som magiker b�r omkring p� och som de anv�nder i sitt arbete. De �r oftast g�mda under n�got till synes oskyldigt namn men kan ha riktigt kraftiga egenskaper. Det finns magiker som blir besatta av magikerverktyg och som koncentrerar hela sin verksamhet p� att g�ra b�ttre och b�ttre verktyg hela tiden. L�t inte det smitta av sig, du beh�ver inte ocks� g�ra ett magikerverktyg! Utnyttja de som redan finns! @menu * Magikerboken:: * Ekstaven - Fizbans stav:: * Shellen - brain:: @end menu @node Magikerboken, Ekstaven - Fizbans stav, Magikerverktyg, Magikerverktyg @comment node-name, next, previous, up @section Magikerboken @cindex magikerboken Det enklaste magikerverktyget och f�rhoppningsvis det f�rsta du st�ter p� �r magikerboken @footnote{Ej att f�rv�xla med den h�r handboken.}. Det �r som det l�ter en liten bok d�r det st�r lite om olika saker som man kan ha nytta av. Dessutom definierar den kommandot @code{man} som sl�r upp hj�lptexter. Den s�ker igenom vissa kataloger efter filer som matchar ett visst namn n�r man anger det. @pindex @file{/obj/magikerbok.c} Du f�r magikerboken automatiskt n�r du blir niv� 20. Annars finns den i @file{/obj/magikerbok}. Magikerboken definierar f�ljande kommandon: @table @bullet @iftex @item @code{l�s sida {@it nr}} @end iftex @ifinfo @item @code{l�s sida NR} @end ifinfo Visar en sida ur magikerboken. Sida 1 inneh�ller en kapitellista med sidnummer. @iftex @item @code{man} {@it funktion} @end iftex @ifinfo @item @code{man} funktion @end ifinfo @cindex @code{man} @iftex Sl� upp hj�lpen om funktionen {@it funktion} ifall det finns n�gon. @end iftex @ifinfo Sl� upp hj�lpen om funktionen funktion ifall det finns n�gon. @end ifinfo @item @code{MANPATH} @cindex @code{MANPATH} Visar vilken s�kv�g som �r inst�lld. @iftex @item @code{MANPATH+=}{@it bibliotek} @end iftex @ifinfo @item @code{MANPATH+=}bibliotek @end ifinfo @cindex @code{MANPATH} L�gg till ett bibliotek i s�kv�gen f�r @code{man}-kommandot. @iftex @item @code{MANPATH-=}{@it bibliotek} @end iftex @ifinfo @item @code{MANPATH-=}bibliotek @end ifinfo @cindex @code{MANPATH} Ta bort ett bibliotek ur s�kv�gen f�r @code{man}-kommandot. @item @code{MANPATH=default} @cindex @code{MANPATH} S�tt tillbaka MANPATH till det f�rdefinierade v�rdet. @end table @node Ekstaven - Fizbans stav, Shellen - brain, Magikerboken, Magikerverktyg @comment node-name, next, previous, up @section Ekstaven - Fizbans stav @cindex staven @cindex ekstaven @cindex fizbans stav Fizbans stav eller ekstaven �r mer avancerad. Den ger m�jlighet att anropa godtycklig funktion i godtyckligt objekt. De speciella ekstavsfunktionerna b�rjar oftast med stor bokstav. N�r man skall ange objekt till staven kan man antingen ange filnamn (f�r kloner f�ljt av @iftex @code{#{@it nummer}}), @end iftex @ifinfo @code{#NUMMER}), @end ifinfo en spelares namn eller ett objekt som finns i n�rheten. @iftex Dessutom kan man ange {@it objekt}@code{,{@it n}} vilket betyder det {@it n}:te objektet i {@it objekt} eller ocks� {@it objekt}@code{,}{@it namn}. D� s�ker den igenom {@it objekt} efter det objekt som bek�nner sig vid namnet {@it namn}. @end iftex @ifinfo Dessutom kan man ange objekt@code{,N} vilket betyder det N:te objektet i objekt eller ocks� objekt@code{,}NAMN. D� s�ker den igenom objekt efter det objekt som bek�nner sig vid namnet NAMN. @end ifinfo N�gra av ekstavens kommandon �r: @table @bullet @item @code{Hj�lp} @cindex @code{Hj�lp} Stavens hj�lptext. Allt man beh�ver veta om staven skall st� d�r. @item @code{�} @cindex @code{�} Kollar vad jag �ger p� stavens vis. @iftex @item @code{Kolla} {@it objekt} @end iftex @ifinfo @item @code{Kolla} objekt @end ifinfo @cindex @code{Kolla} Unders�ker n�gonting p� stavens vis. @item @code{Titta} @cindex @code{Titta} Unders�ker rummet p� stavens vis. @item @code{Beskriv} @cindex @code{Beskriv} Beskriver rummets egenskaper. @iftex @item @code{testa} {@it objekt} @end iftex @ifinfo @item @code{testa} objekt @end ifinfo @cindex @code{testa} Testar ett vapen, skydd eller monster. Denna funktion �r avst�md mot listorna @file{/doc/build/*.lista} och ger varningar n�r prylarna inte uppfyller kraven. @iftex @item @code{anropa} {@it objekt} {@it funktionsnamn} {@it argument} Anropa funktionen {@it funktionsnamn} i objektet {@it objekt}. @end iftex @ifinfo @item @code{anropa} objekt funktionsnamn argument Anropa funktionen funktionsnamn i objektet objekt. @end ifinfo @end table Exempelvis: @example > � Objekt i OBJ(obj/player#2741) <-> Linus skaparen (gud) 0: OBJ(stdobj/magiker/brain#2747) <-> linus' shell 1: OBJ(obj/magobj#2750) <-> Osynligt objekt. 2: OBJ(obj/magikerbok#2749) <-> en magikerbok 3: OBJ(stdobj/magiker/fizbans_stav#2748) <-> En gammal ekstav 4: OBJ(obj/soul#2742) <-> Osynligt objekt. Det var allt. > anropa mej,staven long Du inser att staven har en magisk kraft. Returv�rde : 0 > anropa mej,2 short Returv�rde : en magikerbok > @end example Staven hittar du i @file{/stdobj/magiker/fizbans_stav}. @pindex @file{/stdobj/magiker/fizbans_stav} @node Shellen - brain, , Ekstaven - Fizbans stav, Magikerverktyg @comment node-name, next, previous, up @section Shellen - brain @cindex shellen @cindex Profezzorns shell @cindex brain Profezzorn (i nannymud) har gjort en sak som han kallar shellen. Den kan anv�ndas av b�de magiker och spelare men den �r inte �versatt till svenska s� jag har fixat s� att spelare blir av med den hela tiden. Mha den kan man g�ra en del saker direkt som man annars skulle beh�vt ett speciellt objekt f�r. Objekt kan anges p� samma s�tt som med ekstaven. De mest anv�ndbara av shellens kommandon �r: @table @bullet @item @code{shellhelp wizard} Skriver ut en hj�lpsida. Man kan f� hj�lp p� de olika rubrikerna genom att skriva @iftex @code{shellhelp {@it rubrik}} @end iftex @ifinfo @code{shellhelp rubrik} @end ifinfo . @item @code{id} @cindex @code{id} @cindex Status f�r ett objekt. Man kan f� fram information om n�r n�sta reset intr�ffar, hur stort programblocket �r, hur mycket minne variablerna tar mm. @iftex @item @code{gauge} {@it kommando} @end iftex @ifinfo @item @code{gauge} kommando @end ifinfo @cindex @code{gauge} Ger information om hur arbetskr�vande ett kommando �r. @iftex @item @code{eval} {@it uttryck} @end iftex @ifinfo @item @code{eval} uttryck @end ifinfo @cindex @code{eval} Evaluera ett godtyckligt lpc-uttryck. @end table Du kan klona shellen ur @file{/stdobj/magiker/brain}. @pindex @file{/stdobj/magiker/brain} @node Register, , Magikerverktyg, top @comment node-name, next, previous, up @unnumbered Register @printindex cp @tex \startcontents{Inneh�ll}% \input \jobname.toc \endgroup \vfill \eject @end tex @ignore @tex \startcontents{Kapitellista}% % \let\chapentry = \shortchapentry \let\unnumbchapentry = \shortunnumberedentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \rm \advance\baselineskip by 1pt % Open it up a little. \def\secentry #1#2#3#4{} \def\unnumbsecentry #1#2{} \def\subsecentry #1#2#3#4#5{} \def\unnumbsubsecentry #1#2{} \def\subsubsecentry #1#2#3#4#5#6{} \def\unnumbsubsubsecentry #1#2{} \input \jobname.toc \endgroup \vfill \eject @end tex @end ignore @bye % Local variables: % texinfo-master-menu-header: "\n --- Den specificerade nodlistan ---\n" % End: