Dokumentation zu: transport(STD)

HR Image


STANDARDOBJEKT FUER TRANSPORTER:
    Rumata@Morgengrauen 04.05.1993
    ueberarbeitet von
     - Holger@Wunderland 14.08.1999
     - Gum@Wunderland 19.01.2000


BENUTZUNG:
    inherit "std/transport";
  
    #include <transport.h>


BESCHREIBUNG:
    Ein Transporter ist ein Raum mit besonderen Eigenschaften.
    Waehrend normale Raume miteinander 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.

    Es gibt 3 Arten von 'Haltestellen', doch nur mit AddRoute() koennen
    Punkte markiert werden, bei denen Ein/Aussteigen moeglich ist. Mit
    AddMsg() und AddFun() kann eine Message ausgegeben oder eine Funktion
    ausgefuehrt werden. Fuer besseres Verstaendnis siehe <BEISPIELE>.


PROPERTIES:
    P_ENTERMSG
    Drei-elementiges Array aus Strings. Meldungen in der Art von
    Argument 'msgs' fuer move() bei Livings. 
    Wird ausgegeben, wenn der Spieler den Transporter betritt. 

    P_LEAVEMSG
    Drei-elementiges Array aus Strings. Meldungen in der Art von
    Argument 'msgs' fuer move() bei Livings. 
    Wird ausgegeben, wenn der Spieler den Transporter verlaesst.

    P_ENTERFAIL
    String oder Array aus zwei Elementen. Fehlermeldung an ein Wesen,
    wenn es den bereits vollen Transporter betreten will. Ist die Pro-
    pertie ein Array, so wird das erste Element als Meldung an das Wesen,
    das zweite als Meldung an die Mitspieler im Raum ausgegeben.

    P_LEAVEFAIL
    String oder Array aus zwei Elementen. Meldung an ein Wesen, wenn es
    ausserhalb der Anlegezeiten den Transporter verlassen will. Ver-
    wendung entspricht P_LEAVEFAIL.

    P_ARRIVEMSG
    Ein Array mit zwei Strings. 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
    Ein Array mit zwei Strings. Entspricht P_ARRIVEMSG, aber fuer die
    Abfahrt.

    P_MAX_PASSENGERS
    Numerischer Wert fuer die maximale Anzahl von Wesen, die den Trans-
    porter gleichzeitig benutzen duerfen. 0 == unbeschraenkt.

    P_TRANSPARENT
    Numerischer Wert, im Normalfall 0 oder 1. Er gibt an, ob man an
    Haltepunkten des Transporters aus diesem nach draussen sehen kann
    und in der Langbeschreibung des Transporters die Beschreibung des
    Haltestellen-Raumes mit sieht. Ist der Wert 0, sieht man die
    Beschreibung nicht, sonst ist sie zu sehen. Waehrend der Fahrt ist
    die Beschreibung des umgebenden Raumes unabhaengig von diesem Wert
    generell nicht zu sehen.
    
    P_TRANSLUCENT
    Sollte fuer Transporter immer 0 sein, damit sie das Lichtlevel der
    Start/Zielraeume nicht veraendern. Es ist aber denkbar, P_TRANSLUCENT
    zu setzen, um genau diesen Effekt zu erzielen. Dann wird aber in 
    jedem Fall waehrend des Fluges P_TRANSLUCENT auf 0 gesetzt, um Fehler
    bei der Lichtberechnung durch QueryLight(L) zu vermeiden.


FUNKTIONEN FUER HALTEPUNKTE:
    nomask void AddRoute(string room, int stay, int next, string code);

    Markiert 'room' als Haltestelle fuer die Route. Einsteigen und
    Aussteigen ist moeglich.

    room - Raum, in dem der Transporter halten soll.
    stay - Zeit in Sekunden, die der Transporter in dem Raum verbleibt
           bis er weiterfaehrt (Zeit zum Ein/Aussteigen).
    next - Zeit in Sekunden bis zum naechsten Haltepunkt.
    code - Text, der von der Funktion QueryArrived() zurueckgegeben
           wird, wenn der Transporter an diesem Haltepunkt angelegt
           hat.


    nomask void AddMsg(string msg, int next);

    Gibt eine Meldung aus und wartet 'next' Sekunden bis zum naechsten
    Haltepunkt.

    msg   - Text der Meldung, die in dem Transporter ausgegeben wird.
            Der Text wird automatisch umgebrochen.
    next  - Zeit in Sekunden bis zum naechsten Haltepunkt.


    nomask void AddFun(string fun, int next);

    Ruft eine Funktion 'fun' im Transporter auf, die bestimmte Dinge, wie
    das Ausgeben einer Meldung an den Zielraum, Startraum und/oder den
    Transporter selbst oder aehnliches erledigen kann.

    fun  - Name einer Funktion, die im Transporter aufgerufen wird.
    next - Zeit in Sekunden bis zum naechsten Haltepunkt.


    nomask void RemoveRoute();

    Haelt den Transporter an und loescht dessen Kurs.


FUNKTIONEN FUER DIE STEUERUNG:
    void Start(int pos);

    Der Transporter soll sofort an dem Haltepunkt mit der angegebenen
    Nummer anlegen und von da ab seinen Kurs fahren. Ist 'nummer' nicht
    angegeben, beginnt der Transporter am Anfang der Haltepunktliste.

    pos  - Nummer einer Haltestelle oder 0. Die erste Haltestelle hat die
           Nummer 0.


    void Halt();

    Halte die Fahrt an. Der Transporter bleibt stehen, wo er gerade ist.
    Ist der Transporter nicht mit einer Haltestelle verbunden, so ist
    kein Ein- und Aussteigen mehr moeglich!


    varargs nomask void ReStart(int time);

    Setzt eine mit Halt() unterbrochene Fahrt nach <time> Sekunden fort.
	Wird time nicht angegeben, wird als Defaultwert 0 genommen.

    time - Zeit in Sekunden, nach der die unterbrochene Fahrt fortgesetzt
           wird.
           moegliche Werte:
           >0: Verhalten wie beschrieben.
            0: Fahrt wird sofort ohne Zeitverzoegerung fortgesetzt.
           <0: beim Aufruf von Halt wird sich gemerkt, wieviel Zeit bis
               zum Fortsetzen der Fahrt noch verbleibt. Dieser Wert wird
               hier als Zeitverzoegerung benutzt.


FUNKTIONEN ZUM BETRETEN UND VERLASSEN:
    Der standardmaessige Transporter hat keine Kommandos, mit denen man
    den Transporter betreten oder verlassen kann. Dafuer muessen mit
    AddCmd() Kommandos definiert werden, die auf selbstgeschriebene
    Funktionen zugreifen und folgende Transporterfunktionen aufrufen:

    int Enter();

    Testet, ob fuer den 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 Spieler den
    Transporter erfolgreich betreten konnte oder wenn der Transporter
    ueberfuellt ist, gib 1 zurueck, ansonsten 0.
    Wenn der Transporter nicht da (also unsichtbar) ist, wird ebenfalls
    0 zurueckgegeben, um den Eindruck erscheinen zu lassen, das Kommando
    sei nicht definiert.

    Dieser Wert kann im allgemeinen direkt als Returnwert benutzt werden.
    (In der eignen Kommando-Funktion am Ende: return Enter();)


    int Leave();

    Wenn der aktuelle 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. Kann
    auch wie Enter() als direkter Returnwert benutzt werden.


FUNKTIONEN FUER ABFRAGEN:
    nomask string QueryArrived();

    Gebe den Anlegecode des Raumes zurueck, an dem der Transporter gerade
    anliegt. Hat der Raum keinen Code, gib einen Leerstring zurueck.
    Liegt der Transporter an keinem Raum an, so gib 0 zurueck. Der Code
    entspricht dem Argument 'code' von AddRoute().

    Diese Funktion bietet sich an, um mittels process_string() die
    Ankunfts- und Abfahrtsmeldungen abwechslungsreich zu gestalten.


    nomask object *QueryPassengers();

    Gibt ein Array mit allen Lebewesen, die sich auf/in dem Transporter
    befinden, zurueck.


    nomask mixed QueryPosition();

    Gibt die aktuelle Position des Transporters zurueck. Rueckgabewert
    ist ein zweielementiges Array, das den Raum|die Message|die Funktion
    jeweils des letzten und des naechsten Haltepunktes als String
    enthaelt.


BEISPIELE:
    Ein Beispiel, wie man einen echten Transporter programmiert, ist
    in /doc/beispiele/transport/kutsche.c zu sehen.

    Ein Beispiel fuer einen Transporter mit variabler/zufaelliger
    Route ist RayOnes Workroom /players/rayone/workroom.c

    Ein Beispiel fuer eine einzelne Fahrtroute eines Transporters.
    Diese Funktionen werden im allgemeinen im create() aufgerufen,
    wenn sich die Fahrstrecke des Transporters nicht aendert:
    // Eine echte Haltestelle. Verweile dort 20 Sekunden und dann
    // warte 10 Sekunden bis zum naechsten Haltepunkt
    AddRoute("/foo/room/anleger1", 20, 10, "am Anlegesteg Nummer 1");

    // Text-Haltepunkte. Gib Meldung aus und warte immer 10 Sekunden.
    AddMsg("Die Reise beginnt. Du schnallst Dich an.", 10);
    AddMsg("Die Haelfte hast Du schon geschafft.", 10);
    AddMsg("Dein Ziel rueckt naeher, Du schnallst Dich ab.", 10);

    // Haltestelle und Wendepunkt. Warte 20 Sek. und fahre dann weiter.
    AddRoute("/foo/room/anleger2", 20, 10, "am Anlegesteg Nummer 2");

    // Text-Haltepunkte. Gib Meldung aus und warte immer 10 Sekunden.
    AddMsg("Die Rueckreise beginnt. Du schnallst Dich an.", 10);
    AddMsg("Die Haelfte des Rueckwegs hast Du schon geschafft.", 10);
    AddMsg("Anleger1 rueckt naeher, Du schnallst Dich ab.", 10);

    // Jetzt ist der Fahrplan fertig. Der Transporter beginnt wieder
    // von vorn, also bei Anlegesteg 1. Jetzt muessen wir den Trans-
    // porter nur noch starten.
    Start();

    // Fertig! Der Transporter pendelt zwischen Anleger1 und Anleger2.


SIEHE AUCH:
	P_ENTERMSG, P_LEAVEMSG, P_ENTERFAIL, P_LEAVEFAIL, P_ARRIVEMSG
	P_DEPARTMSG, P_MAX_PASSENGERS, P_TRANSPARENT, AddRoute(L), 
	AddMs(L), move(L)


Start » Magierhandbuch » Docu » Std » Transport Letzte Generierung: 23.03.2010, 18:09
Email an: mud@wl.mud.de
Valid HTML 4.01!