Lpc Manpages

  Vererbungsbaeume der Basis-MUDlib
  =================================

Einfache Gegenstaende
---------------------

Die einfachsten Objekte der Basis-MudLib. Die Module, die von thing.c
geerbt werden, enthalten die wichtigsten Funktionen und treten auch in
den anderen Standardobjekten immer wieder auf.

Da die Ausgabe des Namens eines Objektes (dieser wird in den
description-Modulen definiert) immer mit einer Deklination verbunden ist,
findet man in jedem Objekt, welches ein description.c erbt, auch
thing/language.

thing
  |- thing/properties    | Verwaltungsfunktionen des Property-Systems
  |- thing/description   | Aussehen, Name, IDs des Objektes
  |- thing/moving        | Bewegen und Zerstoeren des Objektes
  |- thing/language      | Deklination von Namen, Adjektiven etc.; Pronomina
  |- thing/commands      | vom Objekt definierte Kommandos
  `- thing/restrictions  | Gewicht: standardmaessig 1Kg


Ruestungen
----------

Bis auf thing/restrictions.c verfuegt armour.c ueber saemtliche Funktionalitaet
die auch thing.c zur Verfuegung stellt. Zusaetzlich gibt es noch ein Modul,
welches die Ruestung erst zur Ruestung macht: armour/combat.c

armour                  | evtl. ein "(angezogen") an Kurzbeschreibung haengen
  |- thing/properties   | Auch Ruestungen haben Eigenschaften
  |- thing/description  | Aussehen, Name, IDs der Ruestung
  |- thing/commands     | Kommandos sind auch moeglich
  |- armour/moving      | Beim Bewegen/Zerstoeren: Ruestung ausziehen...
  |    `- thing/moving  | ...und dann erst Bewegen/Zerstoeren
  |- armour/combat      | Ruestungsklasse/-typ, Kampffunktion
  `- thing/language     | und noch was zum deklinieren.


Waffen
------

Wie Ruestungen, unterscheiden sich Waffen von einfachen Gegenstaenden im
wesentlichen nur durch die Kampffunktionen.

weapon                  | evtl. ein "(gezueckt)" an Kurzbeschreibung haengen
  |- weapon/moving      | Waffe beim Bewegen/Zerstoeren erst wegstecken...
  |    `- thing/moving  | ...und dann erst bewegen/zerstoeren
  |- thing (s.o.)       | Ansonsten alle thing-Eigenschaften
  `- weapon/combat      | Waffenklasse/-art, Schadenstyp, Kampffunktion


Lichtquellen
------------

Lichtquellen sind (im Sinne der MudLib) normale Gegenstaende, die zusaetzlich
die Eigenschaft haben, dass sie leuchten koennen (und auch verbrennen koennen).

lightsource       | Alles, was zum Leuchten noetig ist
  `- thing (s.o.) | ansonsten ein ganz normaler Gegenstand


unit-Objekte
------------

unit-Objekte sind Gegenstaende, bei denen es sinnvoll ist, dass ein einzelnes
Objekt eine gewisse Anzahl von gleichartigen Objekten repraesentiert. Das
beste Beispiel hierfuer ist das liebe Geld: statt 1000 einzelner Muenzen im
Inventory zu haben, hat man nur ein einziges Geldobjekt, das einer Menge von
1000 Muenzen entspricht (die bei Kauf-/Verkaufsaktionen um eine entsprechende
Menge erniedrigt oder erhoeht wird).
Hierdurch wird a) die Uebersichtlichkeit erhoeht und b) natuerlich massig
Speicher gespart.

unit               | alle unit-Eigenschaften (Gewicht, Menge, Bewegen, ...)
  `- thing (s.o.)  | ansonsten sind es normale Gegenstaende


Spellbooks
----------

Fuer Gildenprogrammierer ist dies das Grundobjekt fuer das Zauberverzeichnis
der Gilde.
ACHTUNG: Obwohl thing.c geerbt wird, ist das Spellbook nicht zum clonen und
"unter den Arm klemmen" gedacht! Vielmehr stellt thing.c hier im wesentlichen 
nur das Property- und das Sprachmodul zur Verfuegung!

spellbook                | Allgemeine Funktionen fuer Zaubersprueche
  |- thing (s.o.)        | hier nur wg. Properties und Deklinationen
  `- restriction_checker | fuer Einschraenkungen beim Zaubern


Behaelter
---------

Die bisher beschriebenen Objekte kann man zwar mit sich herumtragen (ausser
Spellbooks), aber man kann nichts hineinstecken. Hierzu sind einige weitere
Funktionen noetig, die container.c zur Verfuegung stellt.
Im wesentlichen sind das in container/restrictions.c Funktionen zum Aus-
waehlen von Objekten im Behaelter, zum Testen, ob der Behaelter noch weitere
Objekte aufnehmen kann (gewichtsabhaengig) und zur Ermittlung des Gesamt-
gewichts des Behaelters.
In container/description.c wird der Inhalt des Behaelters in eine Beschreibung
umgewandelt.

container
  |- thing/properties        | DAS zentrale Modul...
  |- thing/moving            | Bewegen/Zerstoeren des Behaelters
  |- thing/commands          | Kommandos sind moeglich
  |- container/description   | Beschreibung des Inhalts
  |    `- thing/description  | Lang- und Kurzbeschreibung
  |- thing/language          | Deklinationsmodul
  `- container/restrictions  | Gesamtgewicht, Objektauswahl
       `- thing/restrictions | Standardgewicht: 1Kg

Leichen
-------

Leichen sind Behaelter mit der zusaetzlichen Eigenschaft, dass sie mit der
Zeit zerfallen. Ausserdem geben sie ggf. noch eine Meldung ueber den
Moerderkanal aus

corpse                | Zerfallen, Moerdermeldung
  `- container (s.o.) | sonst normaler Behaelter


Raeume und ihre Abkoemmlinge
----------------------------

Raeume sind prinzipiell Behaelter mit Lang- und Kurzbeschreibung von INNEN
und weiteren untersuchbaren Details (auch lesbare Details) sowie
Ausgaengen und der Moeglichkeit vordefinierte Objekte im Raum zu plazieren.

room
  |- thing/properties     | Eigenschaften des Raumes
  |- thing/language       | das obligatorische Sprachmodul
  |- room/moving          | nur Zerstoeren; KEIN(!) Bewegen
  |- room/restrictions    | Raeume werden nie voll
  |    `- container/restrictions  | sonst die gleiche Funktionalitaet wie
  |	    `- thing/restrictions | beim normalen Behaelter
  |- room/description     | Raumbeschreibung, Details, etc.
  |    `- container/description   | Beschreibung des Inhalts
  |	    `- thing/description  | Beschreibung von aussen (selten sichtbar)
  |- room/exits           | Verwaltung der Ausgaenge
  |- room/commands        | notify_fail()s fuer "lies", "suche", "such"
  |    `- thing/commands  | sonst normale Kommandobehandlung
  |- room/items           | Verwaltung von Objekten, die im Raum sein sollen
  `- room/doors           | Tueren (besondere Ausgaenge)


Die Kneipe erweitert den Standardraum um Funktionen zur Definition der
Speisen und Getraenke sowie um Befehle zum Bestellen und Ausgeben.

pub
  `- room (s.o.)


Auch der Laden baut direkt auf dem Standardraum auf. Hier werden noch die
ueblichen Ein- und Verkaufsbefehle zur Verfuegung gestellt.
Jeder Laden benoetigt zusaetzlich einen Speicher, in dem verkaufte Objekte
gelagert werden. Wenn der Laden schon beim ersten Betreten ueber ein
gewisses Warensortiment verfuegen soll, kann man die mit AddItem()-Aufrufen
im Speicher bewerkstelligen.

laden
  `- room (s.o.)

store
  |- thing/properties  | noetig fuer room/items.c
  `- room/items        | vordefinierte Objekte im Speicher


Die Post ist von der Programmierung her genau so zu behandeln wie ein
normaler Raum. Die Postkabinen werden automatisch zur Verfuegung gestellt;
man braucht sich in der Hinsicht um nichts zu kuemmern.

post
  `- (...) room


Schiffe und aehnliche Transporter werden durch "bewegliche" Raeume realisiert.
So hat man alle Beschreibungsmoeglichkeiten eines Raumes zur Verfuegung und
kann (wie bei der Jolle geschehen) Ausgaenge in weitere Raume des Transporters
legen (diese sind normale Raeume, KEINE Transporter!).
Desweiteren sind Transporter die einzigen (Standard-)Raume, bei denen man
auch die aeussere Lang- und Kurzbeschreibung zu sehen bekommt, weil man
nicht nur in einem Transporter sein kann, sondern auch daneben stehen kann.

transport         | Funktionen zur Festlegung der Route, An- und Ablegen
  |- room (s.o.)  | die normalen Raumfunktionen
  `- thing/moving | und hier steckt die Beweglichkeit


Gilden
------

Gilden gibt es in zwei Ausfuehrungen: einmal als einfaches Gildenobjekt, dann
aber auch als Gildenraum (wie zB. die Abenteurergilde).
Waehrend das Gildenobjekt (gilden_ob) Funktionen zum Lernen von Faehigkeiten
und Zauberspruechen, dem Gildenein- und -austritt sowie zum gildeninternen
Aufstieg zur Verfuegung stellt (was zB. auch von einem NPC ausgeuebt werden
koennte), verfuegt der Gildenraum zusaetzlich noch ueber Funktionen zum
normalen Stufenaufstieg aufgrund von Abenteuer- und Erfahrungspunkten, die
Questliste und die Kostenabfrage.

gilden_ob                | Ein-/Austritt, Lernen, Gildenaufstieg
  `- restriction_checker | Beschraenkungen bei obigen Aktionen

gilden_room
  |- gilde               | Stufenaufstieg, Questliste, Kosten
  |    `- room (s.o.)    | normale Raumfunktionen
  `- gilden_ob (s.o.)    | Gildenaufstieg etc.

NPCs
----

Das Opfer. Zumindest meistens...

npc
  |- thing/properties            | Eigenschaften des NPC
  |- living/description          | Ausgabe des Gesundheitszustandes...
  |    `- container/description  | ...zusaetzlich zu seinem Inhalt...
  |	    `- thing/description | ...und seiner Beschreibung
  |- living/life                 | Die Lebensfunktionen, Essen, Trinken, Gift
  |- living/attributes           | Die Verwaltung der Stats
  |- living/moving               | Bewegen von Lebewesen
  |- living/skills               | Funktionen fuer Faehigkeiten und Sprueche
  |    `- living/std_skills      | und einige Standardfaehigkeiten
  |- npc/combat                  | NPC-spezifische Kampffunktionen
  |    `- living/combat          | der Kampf an sich
  |- npc/chat                    | Sprueche a la Andy
  |- npc/comm                    | Basiskommunikation: "sag", "echo", "emote"
  |- container/restrictions      | wie bei Behaeltern
  |    `- thing/restrictions
  |- thing/language              | obligatorisch...
  |- npc/info                    | Antworten auf Fragen
  |- npc/put_and_get             | Reaktion auf erhaltene Gegenstaende
  |    `- living/put_and_get     | Geben und Nehmen von Objekten
  `- npc/guard                   | fuer Wach-NPCs

Der intelligente NPC befindet sich noch in der Entwicklung.

inpc
  |- npc (s.o.)  | Erst mal ein ganz normaler NPC...
  |- inpc/nobank | ...der gegen Bankzweitis vorgehen kann...
  |    `- player/moneyhandler | ...und selbst Geld mitschleppt; ...
  |- select      | ...die beste Ausruestung erkennt und auch benutzt...
  `- boozing     | ...und in der Kneipe die beste Heilmoeglichkeit findet!


Spieler- und Magiershell
------------------------

shells/magier                  | Hier auch noch Spielershells:
  |- player/base               | Einloggen, Grundfunktionen
  |    |- player/restrictions  | Maximale Zuladung (Staerke), InsertHooks
  |    |    `- container/restrictions   | Maximalgewicht, Zuladungstest
  |    |	 `- thing/restrictions  | Defaultgewicht
  |    |- living/attributes    | Stats
  |    |- living/combat        | Kampffunktionen
  |    |- living/put_and_get   | Nehmen und Geben von Objekten
  |    |- thing/properties     | DAS zentrale Modul...
  |    |- thing/language       | Deklinationen
  |    |- player/description   | Waffe/Ruestungen ausgeben
  |    |    `- living/description           | Gesundheitszustand anzeigen
  |    |	 `- container/description   | Ermittlung des Inhalts
  |    |	      `- thing/description  | Kurz- und Langbeschreibung; IDs
  |    |- player/moving        | Bewegen/Zerstoeren: Zusatzchecks
  |    |    `- living/moving   | Bewegen/Zerstoeren von Lebewesen
  |    |- player/life          | Zusatzchecks bei Lebensfunktionen
  |    |    `- living/life     | allgemeine Lebensfunktionen
  |    |- player/comm          | allgemeine Kommunikation
  |    |    `- player/channel  | Kommunikation ueber die Kanaele
  |    |- player/moneyhandler  | Geldverwaltung (auch fuer NPCs geeignet)
  |    |- player/command       | Aliase, History, Parser
  |    |- living/skills        | allg. Faehigkeitsfunktionen
  |    |    `- living/std_skills | Standardfaehigkeiten
  |    |- player/quests        | Verwaltung geloester Abenteuer
  |    |- player/potion        | Verwaltung gefundener Zaubertraenke
  |    |- player/soul          | Seelenkommandos (hilfe verben 😉
  |    |- player/viewcmd       | Untersuchen etc.
  |    |- more                 | More() fuer lange Texte
  |    `- user_filter          | Hilfsmodul fuer "kwer in muenster" etc.
  |                               | Ab hier: Magiershell
  |- shells/filesys/filesys         | allgemeines Modul zur Dateibehandlung
  |    |- shells/filesys/manual     | der "hilfe"-Befehl der Magier
  |    |- shells/filesys/primitives | low-level-Routinen
  |    |- shells/filesys/asynchron  | zur Vermeidung von Lags
  |    `- shells/filesys/make       | komfortables updaten von Objekten
  `- player/objects                 | Objekte clonen, updaten, zerstoeren