Lpc Manpages

Dokumentation zum Tratsch-Modul
-------------------------------

A) "Ich will jetzt nicht gross Doku lesen! Wie krieg ich es ganz
    schnell in meinen NPC eingebaut?"

Kein Problem. Folgendes muss in das NPC file rein:

--- cut here ---

SetProp(P_GOSSIP, 1);

--- cut here ---

B) "Was fuer Befehle kennt mein NPC dann?"

frage <NPC-Name> nach <Spieler-Name>

  guckt in der Tratsch-Datenbank nach, ob was ueber <Spieler-Name>
  bekannt ist, und gibt es aus.

frage <NPC-Name> nach tratsch

  nimmt sich einen Zufaelligen Eintrag aus der Tratsch-Datenbank
  heraus.

tratsche ueber <Spieler-Name>

  erlaubt die Eingabe von neuem Tratsch. Dafuer wird der Editor
  aufgerufen (der gleiche wie bei Mail oder Zeitung). Man kann
  dann den Tratsch eingeben und er wird in die Datenbank aufgenommen.
  Die Laenge ist auf 750 Zeichen beschraenkt. Wenn man mehr eingibt,
  wird der Text nach dem 750. Zeichen abgeschnitten.
  (Damit die Spieler nicht ganze Romane erzaehlen.)

dementiere <Spieler-Quelle> ueber <Spieler-Ziel>

  -> nur fuer Magier verfuegbar! <-

  damit kann ein Magier einen Eintrag aus der Tratsch-Datenbank
  loeschen. Das kann z.B. noetig sein, wenn ein Eintrag persoenliche
  Beleidigungen oder Ausfluege in die Faekalsprache enthaelt.
  <Spieler-Quelle> ist der Name des Spielers, der den Tratsch erzaehlt
  hat, und <Spieler-Ziel> ist der Name des Spielers, ueber den der
  Tratsch ist. (<Spieler-Ziel> entspricht <Spieler-Name> bei tratsche.)

C) "Beispiel?"

beispiele/npc/tratschtante.c      Beispiel fuer tratschenden NPC


D) "Und wie funktioniert das jetzt alles im Detail?"

gossip_master.o enthaelt eine Mud-weite Datenbank von Tratsch (Geruechte,
Anekdoten, etc.) von Spielern ueber Spieler. Die Datenbank hat folgende
Struktur:

Ziel 1 -+-> Quelle 11 -> Uhrzeit, Text
        |
        +-> Quelle 12 -> Uhrzeit, Text
        |
        +-> Quelle 13 -> Uhrzeit, Text

Ziel 2 -+-> Quelle 21 -> Uhrzeit, Text
        |
        +-> Quelle 22 -> Uhrzeit, Text

  .
  .
  .

Beispiel:

Marcel erzaehlt ueber Cheasy: "Der isst gerne Cheaseburger."
Dann enthaelt die Datenbank einen Eintrag:

Cheasy -> Marcel -> Uhrzeit, "Der isst gerne Cheaseburger."

Diese Struktur hat zur Folge, dass es in der Datenbank niemals
2 Eintraege geben kann, bei der "Quelle" UND "Ziel" jeweils
uebereinstimmen:

Wenn also Marcel danach ueber Cheasy erzaehlt: "Der ist nicht der
einzige, der gerne Cheaseburger isst." Dann wird der alte
Eintrag: Cheasy -> Marcel ueberschrieben.
Aber es koennen beliebig viele andere Leute zusaetzlich etwas
ueber Cheasy erzaehlen.

Diese Struktur hat die folgenden Vorteile:
1. Rechenzeit fuer Hinzufuegen und Abrufen von Eintraegen
   wird minimiert (Das interne Datenformat ist eine Schachtelung
   von Mappings, sodass alles ueber Hashing abgewickelt wird.)
2. Das Datenaufkommen wird beschraenkt, weil nicht ein Spieler
   alle moeglichen Sachen ueber EINEN anderen Spieler erzaehlen
   kann. Irgendwann gehen dem Spieler dann doch die Zielpersonen
   aus 🙂

Die bei jedem Eintrag abgespeicherte Uhrzeit dient als rueckdatiertes
"Verfallsdatum". Nach einer bestimmten Zeit (die sich erst noch in der
Praxis als sinnvoll herausstellen muss) werden die alten Eintraege
geloescht.

gossip_master.c hat die Aufgabe des "Servers". Er wartet die Datenbank,
fuegt neue Eintraege ein, loescht die alten und antwortet auf Anfragen.

gossip.c ist der "Client", der im wesentlichen nur ein Interface fuer
den Spieler ist. Er inherited /mail/nedit, mit dem die Eingabe von neuem
Tratsch erfolgt.

E) "Und was soll daran so toll sein?"

Meiner Meinung ist es erst dann richtig prima, wenn moeglichst viele NPCs
im AnderLand dieses Modul inheriten. Dann ist naemlich der Effekt des
"rumsprechens" gegeben. Ein Spieler erzaehlt irgendeinem NPC im AnderLand
eine Story ueber einen anderen Spieler, und sofort wissen das alle anderen
NPCs, die dieses Modul inheriten auch. Besonders eigenen sich fuer sowas
natuerlich Kneipenwirte. Die sind ja bekanntlich die besten Informations-
quellen ... 🙂

F) "Boah ist das Mist! Das hat ja nen Fehler!"

Das Testing ist noch nicht voellig abgeschlossen. Bitte sofort mailen, 
wenn irgendjemand einen Bug entdeckt. Ich kuemmer mich direkt drum.
Versprochen 🙂

G) "Das hat zwar keinen Bug, ist aber trotzdem Mist."

Ist natuerlich alles absolut freiwillig. Ich wuerde mich aber
- wie gesagt - freuen, wenn moeglichst viele mitmachen.

Marcel