Morgengrauner Dokumentation
Dateipfad: /home/mud/mudlib/doc//std/transport> FUNKTIONSWEISE VON TRANSPORTERN <
Version 1.0 (04.05.1993) von Rumata
===================================
INHALT:
======
1. Allgemeines
2. Properties
3. Haltestellen
4. Steuerung
5. Betreten und verlassen
6. Extras
7. Kommandos in Trnasportern
1. ALLGEMEINES
==============
Ein Transporter ist ein Raum mit besonderen Eigenschaften.
Waehrend normale Raume miteinnder starr verbunden sind,
kann dieser Raum seine Verbindung zu anderen Raeumen mit
der Zeit aendern.
Jeder Transporter besitzt einen 'Kurs' den er abfaehrt; nach der
letzten 'Haltestelle' beginnt der Kurs wieder von Vorne.
Will man einen Kurs setzen, der entlang einer Strecke hin-
und zurueck fuehrt, so muss man jede Haltestelle einmal fuer
den Hinweg und einmal fuer den Rueckweg einfuegen.
Ein Beispiel, wie man einen solchen Transporter programmiert,
ist in /doc/beispiele/wolke.c zu sehen (und zu laden :-).
2. PROPERTIES
=============
P_ENTERMSG
Array mit zwei Meldungen in der Art von msgin und
msgout. Die erste Meldung ist fuer den Raum, den der
Spieler verlaesst, und die zweite fuer den Transporter,
in den er geht.
P_LEAVEMSG
Array mit zwei Meldungen, eine fuer den Transporter, den
er verlaesst, und eine fuer den Raum, in den er kommt.
P_ENTERFAIL
Meldung an ein Wesen, wenn den vollen Transporter
betreten will. Ist die Prop. ein Array, so wird das erste
Element als Meldung an das Wesen, das zweite als Meldung
an die Mitspieler im Raum geschickt. Ist die Property
eine Closure, wird diese ausgefuehrt, wenn ein Spieler
vergeblich versucht, den Transporter zu betreten.
P_LEAVEFAIL
Meldung an ein Wesen, wenn es ausserhalb der Anlegezeiten
den Transporter verlassen will. Ist die Prop. ein Array,
so wird das erste Element als Meldung an das Wesen, das
zweite als Meldung an die Mitspieler im Transporter
geschickt. Ist die Property eine Closure, wird diese
ausgefuehrt, wenn ein Spieler vergeblich versucht, den
Transporter zu verlassen.
P_ARRIVEMSG
Ein Array mit zwei Meldungen. Das erste Element ist die
Meldung, die die Wesen im Transporter bekommen. Die
zweite Meldung ist fuer die Wesen in dem Raum, an dem
der Transporter anlegt.
P_DEPARTMSG
Dito fuer das Ablegen.
P_MAX_PASSENGERS
Numerischer Wert fuer die maximale Anzahl von Wesen, die
sich in dem Transporter aufhalten duerfen.
0 bedeutet unbeschaenkte Spielerzahl.
3. HALTESTELLEN
===============
Es gibt 3 Sorten von Haltestellen:
1.) Raeume als Haltestellen.
FUNKTION:
AddRoute( raum, verweil, next );
oder
AddRoute( raum, verweil, next, code );
PARAMETER:
raum - Raum, an dem der Transporter halten soll.
verweil - Zeit in Sekunden, die der Transporter in dem
Raum verbleibt, bis er weiterfaehrt.
next - Zeit in Sekunden bis zur naechsten Halte-
stelle.
code - Text, der von der Funktion QueryArrived
zurueckgegeben wird, wenn der Transporter
an dieser Haltestelle angelegt hat.
Wird dieser Parameter nicht angegeben, wird
ein leerer String als code gesetzt.
2.) Meldungen als Haltestellen.
FUNKTION:
AddMsg( text, next );
PARAMETER:
text - Text, der Meldung, die in dem Transporter
ausgegeben wird.
next - Zeit in Sekunden bis zur naechsten Halte-
stelle.
3.) Funktionsaufrufe als Haltestellen.
FUNKTION:
AddFun( fun, next );
PARAMETER:
fun - Name einer Funktion, die im Transporter
aufgerufen wird.
next - Zeit in Sekunden bis zur naechsten Halte-
stelle.
4. STEUERUNG
============
FUNKTION
Start();
oder
Start(nummer);
BESCHREIBUNG:
Der Transporter soll sofort an der Haltestelle mit
der angegebenen Nummer (keine Nummer heisst an der ersten)
anlegen und von da ab seinen Kurs fahren.
FUNKTION:
Halt();
BESCHREIBUNG:
Halte die Fahrt an. Der Transporter bleibt stehen, wo
er ist.
5. BETRETEN UND VERLASSEN
=========================
Der Transporter hat keine Verben programmiert, mit denen man
den Transporter betreten oder verlassen kann.
Dafuer muessen mit AddCmd() Verben eingefuehrt werden, die
auf selbstgeschriebene Funktionen zugreifen.
FUNKTION:
Enter();
BESCHREIBUNG:
Teste, ob fuer dun aktuellen Spieler (this_player())
noch Platz im Transporter ist und ob er sich ausserhalb
des Transporters befindet. Wenn ja, bewege ihn in den
Transporter. Wenn der Transporter eine Reaktion (Bewegen des
Spielers oder Ueberlauf), so gib eine 1 zurueck sonst eine 0.
Wenn der Transporter nicht da (also unsichtbar) ist, tue fuer
die Spieler ausserhalb des Transporters so,
als ob das Verb nicht definiert wurde.
Dieser Wert kann im allgemeinen direkt als returnwert benutzt
werden.
FUNKTION:
Leave();
BESCHREIBUNG:
Wenn der Momentane Spieler nicht im Transporter ist, so gib
eine Fehlermeldung aus. Anderenfalls teste, ob der
Transporter an einen Raum angelegt hat. Wenn nein, gebe
die LEAVEFAIL Meldung aus; und wenn alles ok ist, so
bewege den Spieler aus dem Transporter.
6. EXTRAS
=========
FUNKTION:
QueryArrived();
BESCHREIBUNG:
Gebe den Code des Raumes zurueck, an dem der Transporter
gerade anliegt. Hat der Raum keinen Code, gebe einen
Leerstring zurueck. Liegt der Transporter an keinem Raum
an, so gebe 0 zurueck.
Diese Funktion bietet sich an um mittels process_string
die Ankunfts- und Abfahrtsmeldungen abwechslungsreich
zu gestalten.
FUNKTION:
QueryPassengers(),
BESCHREIBUNG:
Gebe eine Liste mit allen Lebewesen, die sich auf/in dem
Transporter befinden, zurueck.
FUNKTION:
RemoveRoute();
BESCHREIBUNG:
Halte den Transporter an und loesche dessen Kurs.
7. KOMMANDOS IN TRANSPORTERN
============================
Da sich der Transporter in dem Raum befindet, in dem er angelegt
hat, sind alle Kommandos des Transporters auch dort verfuegbar.
Selbst wenn der Transporter abgelegt hat, steht er noch immer
unsichtbar dort herum.
Deshabl muss in den Kommandos vorsorge grtroffen werden, dass nur
die richtigen Spieler (die drinnen und die draussen) die richtigen
Kommandos ausfuehren koennen.
KOMMANDOS FUER SPIELER AUSSERHALB:
Es muss abgetestet werden, ob der Spieler nicht im
Transporter ist, und ob der Transporter angelegt hat.
if( environment(this_player())==this_object()
|| !QueryArrived() ) return 0;
KOMMANDOS FUER SPIELER INNERHALB:
Abtesten, ob der Spieler wirklich im Transport ist.
if( environment(this_player())!=this_object() )
return 0;
Vorsicht auch bei AddExits innerhalb des Transporters,
aber daran arbiete ich noch... :-)
Die Funktionen Enter() und Leave() haben diese Funktionalitaet
eingebaut.
zurück zur Übersicht