Navigation: Table of Contents, Index, next: Noom, prev: MUSH-Programmierung in Imbris, Teil 1, up: Imbris für Newbies
Ich spiele nicht mehr im Imbris MUSH. Erstens habe ich keine Zeit mehr dafür, und zweitens gab es mir zuwenig Spieler dort. Das ist schade, denn von der Idee her hat Imbris mich damals (1997/98) total begeistert.
Dies ist die zweite Seite mit Beispielen zum Programmieren. Auf der ersten Seite ist der Aufbau des Ladens erlkährt. Alle Bemerkungen zum Code, zum MUSH etc. befinden sich auf der ersten Seite.
Auf dieser Seite finden sich code Beispiele für:
Wir machen uns jetzt eine Trommel. Dies wird die Trommel sein, die man im Trommelladen kaufen kann. Wie man anfängt wurde schon auf der ersten Seite gezeigt:
@create Drachentrommel
@desc Drachentrommel=Die Drachentrommel ist fast mannsgross, ein
riesiges, schweres Ungetuem. Die Trommel ist mit grandiosen MUSTER
verziert. Wenn man in der Naehe der Drachentrommel steht, spuehrt man
ihre Praesenz wie eine gewichtige, bewegungslose Masse im Raum.
@odesc Drachentrommel=bewundert die riesige Drachentrommel.
&DETAIL_MUSTER Drachentrommel=Um die Trommel zieht sich ein breites,
schwarz-rotes Ungetuem von einem Drachen. Zaehnefletschend,
feuerspuckend, Boden peitschend, fauchend wild ist er! Mit ihm ringt ein
kleiner, zaeher Mann. Sein Gesicht ist nicht zu sehen. Anscheinend ist
dies Uurd's Kampf gegen den Lindwurm Hurgh'Kcht, doch woran ein
Tandrisch Drachen voneinander unterscheiden kann, das wissen nur die
Dunklen Steine.
Die Trommel soll nicht nur eine normale Trommel sein, sondern auch etwas interessantes mitzuteilen haben. Das Muster auf der Trommel erzählt ein wenig von den Tandrisch und ihren Legenden.
Nun folgen die Attribute, welche die normale Verwendung der Trommel
bestimmen. Wie schon auf der ersten Seite ein paar Mal erwaehnt, kann
man zu all diesen Befehlen mit help @odesc und so weiter
Hilfe anfordern.
@succ Drachentrommel=Mit einem Aechzen hebst Du die Drachentrommel auf.
@osucc Drachentrommel=hebt die Drachentrommel mit einem Aechzen auf.
@asucc Drachentrommel=@emit Die Drachentrommel gibt einen dumpfen Ton
von sich.
@drop Drachentrommel=Vorsichtig setzt Du die Drachentrommel wieder auf
den Boden.
@odrop Drachentrommel=setzt die Drachentrommel vorsichtig wieder auf den
Boden.
@adrop Drachentrommel=@emit Die Drachentrommel gibt einen dumpfen Ton
von sich.
&BERUEHRUNG Drachentrommel=Die Drachentrommel wirkt kuehl und
massiv. Sie scheint still vor sich hin zu schwingen.
Wenn ein Gegenstand ein paar eigene Befehle zur Verfügung
stellt, dann sollten diese irgendwo erklährt werden.
Persönlich bevorzuge ich hierfür das @use
Attribut, da man als erstes sicher use Drachentrommel oder
benutze Drachentrommel versuchen wird.
Bei der nun folgenden Anleitung sind die %r und
%t codes besonders wichtig. %r bedeuted ein
Return Zeichen, und %t ein Tabulator. Diese codes kann man
auch beim Verschicken von Briefen oder dem Pinnen von Zetteln an die
Bretter verwenden (siehe +hilfe bretter bzw. +hilfe
post). Wenn man in einem Text, den man sagen will, oder den man
verschicken will, ein %r als solches verwenden will, dann
muss man %%r schreiben (beispielsweise ar Hast Du mir
einen Tip: Soll ich %%# oder besser %%N verwenden?).
@use Drachentrommel=Mit der Drachentrommel kann getrommelt
werden:%r%ttrommel laut%tTrommelt laut und wild%r%ttrommel
leise%tTrommelt leise und sanft%rSowie der besondere Befehl:%rtrommel
botschaft <person>=<text>%rDieser Befehl lässt der
genannten Personen eine Trommelbotschaft zukommen.
&LAUT Drachentrommel=$trommel laut:@emit/room %N trommelt wie
verrueckt auf der Drachentrommel!%rRATATATAMM! TAMM! TAMM! RATAMM!
TAMM! TAMM!
&LEISE Drachentrommel=$trommel leise:@emit/room %N trommelt sanft
auf der Drachentrommel:%rDumdadadumdadadummm. Dadumm. Dadumm. Dadumm
dumm dumm.
Hierfür wurden sogennate $commands verwendet.
Sobald ein Spieler nun den hinter dem Dollarzeichen angegebenen Text
eintippt, wobei für die Sterne (*) irgenetwas stehen
kann, wird die hinter dem Doppelpunkt angegebene Befehlsliste
ausgeführt. Dabei wird für %0 der Text des
ersten Sternes, für %1 der Text des zweiten Sternes
etc. eingesetzt.
&BOTSCHAFT Drachentrommel=$trommel botschaft *=*: sende
%0=;schlaege. [name(loc(me))] trommelt eine Botschaft:%rTamm.
Datamm. Ratatatamm. Ratamm. Datamm.%r%1%rDammdatatamm ratamm.%rLeise
verklingt die getrommelte Botschaft.
Hier kommt noch etwas neues hinzu: Funktionen. Normalerweise kann
man Funktionen ein Befehlslisten einfach einfügen. Will man eine
Funktion allerdings in einen Text einbetten (wie hier in den
sende Befehl), dann muss die Funktion in eckige Klammern
gesetzt werden. Was die Funktionen tun, erfährt man mit help
name() und help loc().
Um von der Drachentrommel Kopien anfertigen zu können, benötigen wir noch folgenden Befehl:
@set Drachentrommel=PARENT_OK
Damit können wir nun neue Objekte (Trommeln) erschaffen lassen, und sie alle Eigenschaften von dieser Original Trommel erben lassen. Das spahrt Platz auf der Datenbank des MUSH.
Nun machen wir uns an den Verkäufer. Der Anfang ist wie gehabt:
@create Iloorg
@lock Iloorg=me
@desc Iloorg=Iloorg hat roetlich gefaerbte Haut, keine Haare, und er
laeuft barfuss. Er ist der Verkaeufer hier im Trommelladen und zeigt Dir
gerne die Sammlung von tandrischen Trommeln, die er hier auf Lager
hat. Vor allem die mannsgrossen Drachentrommeln empfiehlt er
waermstens. Iloorg ist sehr gespraechig und wird Dir gerne alle Fragen
beantworten.
Damit Iloorg die Drachentrommel als Vorlage für seine verkauften Trommeln verwenden kann, teleportieren wir die Trommel in Iloorg hinein und machen ihn undurchsichtig, damit man nicht sehen kann, dass Iloorg die "Muttertrommel" trägt.
@tel Drachentrommel=Iloorg
@set Iloorg=OPAQUE
Um Iloorg noch ein wenig lebendiger aussehen zu lassen, können wir ein weitere Aktion für den Raum ausführen lassen. Aktionen werden auch auf der ersten Seite besprochen
&ACTION_2 here = Illorg laechelt.
Nun kommt der Verkauf der Waren. Unser Plan ist folgender: Wir
verwenden ein $command um eine Trommel zu kaufen. Wenn man
eine Trommel kauft, nimmt man bei Iloorg Schulden auf. Diese Schulden
kann man mit IR Währung (Silberpfennige etc.) wieder abzahlen. Der
folgende IR Währungs code ist ein Werk von Dariane.
Wir erzeugen eine neue Trommel und vererben ihr alle Eigenschaften
der Muttertrommel, die wir vorher eben erzeugt haben. Die Nummer dieser
vorher erzeugten Trommel war in meinem Fall #2547. Ganz
wichtig ist, dass die neue Trommel keinerlei flags vom Mutterobjekt
bekommt, deswegen müssen wir CHOWN_OK (damit Kunden
die Trommel in Besitz nehmen können), DESTROY_OK
(damit Kunden die gekauften Trommeln auch wieder zerstöhren
können) und COMMANDS (damit die $commands
der Trommel auch verwendet werden können) neu setzen.
&KAUFE Iloorg=$kaufe *trommel*: @pemit %#=Iloorg fuehrt Dich durch
die Regale hin zu einer wunderbaren Drachentrommel. Sie ist Dein!; @wait
me={ @create neue Trommel; @set neue Trommel=CHOWN_OK; @set neue
Trommel=DESTROY_OK; @set neue Trommel=COMMANDS; @parent neue
Trommel=#2547; drop neue Trommel; @name neue Trommel=Trommel;
&RECHNUNG_%# me=add(v(RECHNUNG_%#), 12); @pemit %#=Iloorg sagt, "Du
schuldest mir nun [u(BETRAG,v(RECHNUNG_%#))]."; @notify me; &KUNDEN
me=cat(v(kunden), %N); @pemit %#=% * Du kannst die Trommel mit '@chown
Trommel=me' in Besitz nehmen!}
&BETRAG Iloorg=u(#8/NAME_MONEY, u(#8/KU_TO_MON,%0))
Das BETRAG Attribut ist eine Funktion, es erhält
eine Zahl als Parameter. Dieser Parameter ist der Betrag in
Kupferpfennige, und die Funktion rechnet den um in die einzelnen
Währungen. Der Aufruf dieser Funktion geschieht im
BETRAG Attribut mittels u(BETRAG,xxx).
Genauso ruft u(#8/KU_TO_MON,%0) die Funktion
KU_TO_MON im Objekt #8 auf (versuche mal
ex #8). Diese verwandelt den Betrag in Kupferpfennigen zu
einem String um mit einer Zahl pro Muenzen Sorte (genauso wie er mit
ex me/GELD angezeigt wird). Dieser String wird dann von
NAME_MONEY verwendet, um eine schoene Textausgabe zu
produzieren.
Die Schulden werden in Atributen gespeichert, welche die Form
RECHNUNG_#<dbref des Kunden> haben, zum Beispiel
RECHNUNG_#2555. Da man natürlich immer mehr Schulden
bei Iloorg anhöufen kann, werden die neuen Schulden zu den alten
hinzugezählt. Den Wert der alten Schulden des Kunden erhält
man mit v(RECHNUNG_%#). Dazu kommen noch die neuen
Schulden, in diesem Fall ein Silberpfennig, bzw. 12 Kupferpfennige:
&RECHNUNG_%# me=add(v(RECHNUNG_%#), 12). Siehe auch
help u() und help v().
Damit der MUSH nicht in Verwirrung geraet, wenn mehrere Trommeln
gleichzeitig gekauft werden, wird hier die Technik von
Semaphores gebraucht. Iloorg blockiert sich selber, wenn er
gerade am erschaffen einer neuen Trommel ist, indem er "auf sich selber
wartet": @wait me={ @create neue Trommel; ... @notify me;
...}. Der @notify Befehl erlaubt nun dem
nächsten @wait me={...} mit der Ausführung fort
zu fahren.
Damit Iloorg mit dem Verkauf anfangen kann, muss man ihm vor dem Kauf
der ersten Trommel und nach jedem reboot einen @notify
Befehl geben. Dies macht man mit dem @startup Befehl.
@notify Iloorg
@startup Iloorg=&KUNDEN me=; &OFFENE_FRAGEN me=; @drain me;
@notify me
Damit wir selber auch einen überblick darüber erhalten, an
wen Iloorg alles Trommeln verkauft hat, speichern wir die Namen aller
Kunden in im KUNDEN Attribut. Für den Fall, dass wir
einmal aufhören würden in Imbris zu spielen, soll diese Liste
natürlich auch nicht unendlich lang werden. Deswegen wird sie bei
jedem reboot gelöscht. Das OFFENE_FRAGEN Attribut
wird weiter unten erklährt.
Nun kommen wir zum Rückzahlen der Schulden: Wenn man Illorg mit
zahle/silber iloorg=1 oder einem ähnlichen Befehl IR
Geld gibt, wird das AZAHLE Attribut ausgeführt. Dort
prüfen wir nach, ob mit dem bezahlten Betrag immer noch zuwenig
oder genug bezahlt wurde. Wenn genug bezahlt wurde, versuchen wir dem
Kunden Wechselgeld zu geben. Damit dies möglich ist, muss Iloorg
vorher natürlich noch genug IR Geld bekommen.
&AZAHLE Iloorg=@switch GTE(%0,v(RECHNUNG_%#))=0,{&RECHNUNG_%#
me=sub(v(RECHNUNG_%#),%0);@pemit %#=Iloorg sagt, "Danke! Du schuldest
mir noch [u(BETRAG,v(RECHNUNG_%#))]."},{@tr
me/rueckzahle=%#,sub(%0,v(RECHNUNG_%#)); &RECHNUNG_%# me; @pemit
%#=Iloorg sagt, "Danke, Du schuldest mir nichts mehr."}
&RUECKZAHLE Iloorg=@switch div(%1,144)=0,,{zahle/gold
%0=[div(%1,144)]};@switch div(mod(%1,144),12)=0,,{zahle/silber
%0=[div(mod(%1,144),12)]};@switch mod(%1,12)=0,,zahle/kupfer
%0=[mod(%1,12)]
zahle/silber iloorg=20
zahle/kupfer iloorg=20
Damit Iloorg nicht nur ein langweiliger Verkäufer ist, soll er
auch ein paar Fragen über Noom und die Tandrisch beantworten
können. Siehe auch +hilfe fragen. Interessant ist
hier vor allem, dass Iloorg sich aufschreibt, welche Fragen er nicht
beantworten konnte (auch diese Liste wird wie oben gezeigt nach einem
reboot gelöscht). Auch solche Information kann man abfragen.
Wenn eine Figur mindestens eine Frage beantworten kann, dann sollte
sie auch das FRAGE Attribut gesetzt haben, damit man bei
einer unbekannten Frage trotzdem merkt, dass die Figur Fragen
beantworten könnte! Oft ist es ganz angenehm, wenn man an dieser Stelle
wenigstens ein paar Tips bekommt, was man die Figur überhaupt
fragen kann.
&FRAGE Iloorg=@pemit %#=Iloorg bittet um Entschuldigung: "Da kann
ich leider nicht helfen! Frage mich nach TROMMELN, DRACHEN, TANDRISCH,
nach NOOM, nach der Liste der PREISE, nach Deinen SCHULDEN bei mir, oder
auch ueber die TRAAMI und den FEUERVOGEL!"%rIloorg schreibt sich etwas
auf.; &OFFENE_FRAGEN me=cat(v(offene_fragen), %0(%N))
&FRAGE_TANDRISCH Iloorg=@pemit %#=Iloorg sagt, "Dabriel Haldafest,
der Mysteriarch, schrieb einmal folgendes: 'Als ich mir sicher war, das
mir von den Tandrisch keine Gefahr drohte, sah ich sie mir genauer an
und ich glaubte zu verstehen, wie all die Geschichten ueber sie
entstanden waren. Feuerrot war ihre Haut und man fand kein einziges Haar
auf ihren drahtigen Koerpern. Man merkte an ihnen das Leben im Gebirge,
denn sie sahen in meinen Augen so zaeh aus wie das Leder der Stiefel,
die ich trug. Auch die Kaelte schien ihnen nicht viel auszumachen, sie
trugen nur einfache Leinenhemden und -hosen und ueberhaupt kein
Schuhwerk. Ihre Gesichter waren kantig und wettergegerbt, gar nicht
recht passend zu den guetigen, schwarzen Augen, die ihnen eigen waren.'"
&OFRAGE_TANDRISCH Iloorg=laesst sich in ein Gespraech mit Iloorg
verwickeln.%rIloorgs lacht, zeigt auf sich selber und erzaehlt ein
wenig.
etc...
&FRAGE_KUNDEN Iloorg=@pemit %#=Iloorg sagt, "Dies ist die Liste
meiner bisherigen Kunden:%r[v(KUNDEN)]"
&FRAGE_OFFENEN_FRAGEN Iloorg=@pemit %#=Iloorg sagt, "Dies ist die
Liste der Fragen (und der jeweiligen Fragestellern), auf die ich keine
Antwort wusste: %r[v(OFFENE_FRAGEN)]"
&FRAGE_CODE Iloorg=Iloorg informiert ueber die Tandrisch und
verkauft Trommeln.
&FRAGE_VERMOEGEN Iloorg=@pemit %#=Iloorg sagt, "Ich habe im
Augenblick [v(GELD)]"
Navigation: Top, Table of Contents, Index, next: Noom, prev: MUSH-Programmierung in Imbris, Teil 1, up: Imbris für Newbies