KONZEPT
Questmaster - der Herrscher ueber die Abenteuer
FILES
/room/quests.c
/secure/questmaster.c
/sys/questmaster.h
BESCHREIBUNG
Der Questmaster verwaltet alle echten Quests. Nur im Questmaster
angemeldete Quests beeinflussen die Anzahl der Questpunkte oder
haben Einfluss auf die Seher/Magierwerdung eines Spielers. Eine
Quest kann in verschiedener Art und Weise angemeldet, abgemeldet,
aktiviert und deaktiviert werden. Aus dem Questmaster koennen alle
moeglichen Informationen ueber eine Quest ermittelt werden.
Einflussname auf die Quests und deren Ab/Anmeldung und so weiter
ist am bequemsten im 'Inneren des Questmasters' /room/quests.c
moeglich.
FUNKTIONEN
Im Folgenden werden die Funktionen des Questmasters beschrieben,
die man von extern aus nutzen kann. Die vollen Prototypen findet man
am Ende der Hilfe. Hier werden nur die Argumente in der Reihenfolge
des Auftretens gelistet.
GiveQuest() - Gibt dem Spieler eine Quest
pl: Objekt des Spielers
id: Nummer (int) der Quest (optional Name (string) bei alten Quests)
msg: Ebenenmeldung. Wenn 0 oder "" wird Standard ausgegeben, wenn
nichts ausgegeben werden soll, muss "__silent__" uebergeben werden.
Rueckgabewerte:
1 Setzen OK
-1 Spieler hat Quest schon
-2 Quest nicht angemeldet
-3 Unberechtigter Zugriff
-4 Quest nicht aktiv
-5 Problem mit P_QUESTS des Spielers
DeleteQuest() - Nimmt dem Spieler eine Quest weg ***
pl: Objekt des Spielers
id: Nummer (int) der Quest (optional Name (string) bei alten Quests)
Rueckgabewerte:
1 Loeschen OK
-1 Spieler hatte Quest gar nicht
-2 Quest nicht angemeldet
-3 Unberechtigter Zugriff
VoteQuest() - Die Bewertung einer Quest
pl: Objekt des Spielers oder Uid (String), dann werden aber
alle Stimmen des Spielers geloescht!
id: Nummerische ID der Quest, dessen Wertung angegeben ist
votes: Array aus Integer, die (neue) Wertung ({ SUM, LVL, FUN })
mit jeweils Werten zwischen 1 und 10 (inklusive)
Rueckgabewerte:
1 OK
-1 fehlerhafte Zugriffsberechtigung
-2 Quest nicht angemeldet
-3 Spieler hat die Quest nicht geloest
QueryVotes() - Fragt alle Wertungen eines Spielers ab
uid: Uid des Spielers
Rueckgabewerte:
Wertungs-Array ({ SUM, LVL, FUN }). Bei unbewerteten Quests sind alle
Werte Null.
QueryVoter() - Wer hat die Quest schon bewertet
id: Nummerische ID der Quest
Rueckgabewerte:
Array aus einem Array pro bewertendem Spieler
({ ({ UID-Spieler1, SUM, LVL, FUN }), ({ UID-Spieler2, ... }), ... })
Wenn keiner bewertet hat oder Quest nicht vorhanden wird ({})
geliefert
DidQuest() - Hat der Spieler die fragliche Quest schon gemacht?
pl: Spielerobjekt
id: Nummer (int) der Quest (optional Name (string) bei alten Quests)
Rueckgabewerte:
1 Ja
0 Nein oder Quest nicht vorhanden
EvaluateQP() - Errechnet Anzahl der QP aus P_QUESTS
quests: Array der Form von P_QUESTS
Rueckgabewert: die Questpunkte
NewQuestprop() - Wandelt alte P_QUESTS in neue
old: altes P_QUESTS
Rueckgabewerte:
Array fuer P_QUESTS mit neuen Werten. Unbekannte Quests bleiben
unveraendert bestehen und werden dann sicherlich einen Laufzeitfehler
an anderer Stelle hervorrufen (sie muessen ja eh von Hand behoben
werden)
QueryReadyForWiz() - Hat der Spieler genug Quests fuer Seher/Magier
player: Das Spielerobjekt
Rueckgabewerte:
1 OK
0 Pflichtquest fehlt
-1 Questpunkte reichen nicht
Dieser Funktion muss ein Playerobjekt uebergeben bekommen
und prueft, ob der Spieler seitens der Quests bereit ist zur
Aufstufung zum Seher oder Magier ist. Er muss eine bestimmte
Prozentzahl der maximalen Questpunkte (derzeit 80% von
QueryMaxQP()) haben, die Pflichtquests alle geloest und von
den freiwilligen nur eine bestimmte Menge nicht geloest ha-
ben (derzeit, kann sich aendern!):
1. Er darf nur 2 Quests mit weniger als 35 QPs weglassen.
2. Er darf nur 2 Quests mit weniger als 70 QPs weglassen.
3. Er darf nur 1 Quest mit weniger als 100 QPs weglassen.
4. Er darf nur 1 Quest mit mehr als 100 QPs weglassen.
Falls der Spieler alle diese Voraussetzungen erfuellt, lie-
fert die Funktion 1, ansonsten 0.
AddNewQuest() - Eine neue Quest anlegen
Die neue Quest wird mit Dummy-Infos vorbelegt
Liefert die ID-Nummer der neuen Quest zurueck
ChangeQuest() - Daten einer Quest veraendern
id: Nummer (int) der Quest (optional Name (string) bei alten Q.)
field: Index des zu aendernden Datenfelds (Defines QM_*)
Siehe auch weiter unten..
data: Die neuen Daten
Rueckgabewerte:
1 OK
-1 field ist zu gross oder klein
-2 Quest nicht angemeldet
-3 Unberechtigter Zugriff
-4 Typ oder Wert von data entspricht nicht Erwartung
QueryQuest() - Questdaten abfragen
id: Nummer (int) der Quest (optional Name (string) bei alten Quests)
Rueckgabewerte:
-1 Quest nicht angemeldet
Array Eine volle Kopie der Questdaten (teuer!)
Bitte moeglichst eine der spezielleren folgenden Funktionen nutzen!
QueryNumQuests() - Anzahl der Quests abfragen
Liefert die Anzahl der Quests zurueck, inklusive deaktierte und so
weiter. Man kann somit alle Abenteuer von 0 bis Anzahl-1 durchlaufen.
QueryQP() - Abenteuerpunkte abfragen
id: Nummer (int) der Quest (optional Name (string) bei alten Quests)
Rueckgabewerte:
-1 Quest nicht angemeldet
sonst die Anzahl der Punkte. Achtung: Auch bei deaktivierten Quests
abfragbar.
QueryName() - Namen der Quest abfragen
id: Nummer (int) der Quest
Rueckgabewerte:
-1 Quest nicht angemeldet
sonst den Namen der Quest
QueryLevel() - Empfohlene Stufe von loesenden Spielern
id: Nummer (int) der Quest (optional Name (string) bei alten Quests)
Rueckgabewerte:
-1 Quest nicht angemeldet
sonst die Stufe
QueryActive() - Status der Quest abfragen
id: Nummer (int) der Quest (optional Name (string) bei alten Quests)
Rueckgabewerte:
1 Quest aktiv
0 Quest dekativiert
-1 Quest nicht angemeldet
QueryWizard() - Autor abfragen
id: Nummer (int) der Quest (optional Name (string) bei alten Quests)
Rueckgabewerte:
-1 Quest nicht angemeldet
sonst Uid des Autors (String)
IsGuildQuest() - Gildenstatus der Quest abfragen
id: Nummer (int) der Quest (optional Name (string) bei alten Quests)
Rueckgabewerte:
Array aus Gildennamen, fuer die die Quest gedacht ist
0 Ist nirgendwo Gildenquest
-1 Quest nicht angemeldet
IsNeededQuest() - Ist es eine Pflichtquest?
id: Nummer (int) der Quest (optional Name (string) bei alten Quests)
Rueckgabewerte:
1 Quest ist Pflichtquest
0 Quest ist optional (entweder mit oder ohne Beruecksichtung
bei SumQP)
-1 Quest nicht angemeldet
QueryMaxQP()
Alle QPs ohne optionale und Gildenquests
QueryNeededQP()
QP fuer Seherlevel
QueryAllQP()
Alle QP (pflicht + frei + optional) ohne Gildenquests
QUESTDATEN
Folgende Daten sind fuer jede Quest vorhanden:
QM_NAME - Gibt den Namen der anzumeldenden Quest an. Es darf
bereits eine Quest dieses Namens geben, da die Quests
anhand ihrer nummerischen ID unterschieden werden.
QM_QP - Gibt die Zahl der Questpunkte an, die der Spieler fuer
die Loesung dieser Quest angerechnet bekommt. Muss >=0
sein!
QM_XP - Gibt die Zahl der Erfahrungspunkte an, die der Spieler
fuer eine Quest bekommen kann. Muss >=0 sein!
QM_ALLOW - Ist ein Array mit den Filenamen der Objekte, die diese
Quest als durch einen Spieler geloest kennzeichnen
duerfen. Die Endung '.c' ist wegzulassen!!! Erzmagier
duerfen eine Quest auch vergeben.
QM_INFO - Ist ein String, der einen Tip zur Loesung der Quest
enthaelt. Dieser String wird dem Spieler vom Scheuch
als Hinweis gegeben.
QM_LEVEL - ist ein Richtlevel zwischen 1 und MUD_MAX_LEVEL (35),
das als Empfehlung dient. Ein Spieler kann die Quest
theoretisch auch loesen, wenn er ein kleineres Level
hat, jedoch koennte es sein, dass die Quest dann die
'physischen' Moeglichkeiten seines Spielercharakters
dann uebersteigt.
QM_NEED - legt die Art der Quest fest, ob die Quest von einem
Spieler geloest werden muss, bevor er Seher/Magier
werden kann. Werte:
0 - Questpunkte zaehlen zu max. Questpunkte dazu.
Die Quest ist freiwillig (Standard).
1 - Questpunkte zaehlen zu max. Questpunkte dazu.
Die Quest ist Pflicht (unabh. der 80%).
2 - Questpunkte zaehlen NICHT zu max. QP
Die Quest ist freiwillig (optional).
QM_ACTIVE - Ist active==0 ist die Quest deaktiviert und kann
nicht geloest werden, taucht in keiner Liste auf
und so weiter ('virtuell geloescht').
QM_WIZ - Der Name (UID) des Magiers, der die Quest geschrieben
hat, oder zumindest dafuer verantwortlich ist.
Hier landen auch die Reporte, wenn nichts anderes
angegeben wurde.
QM_GUILD - Ist entweder 0 oder ein Array aus Strings mit den Na-
men der Gilden, fuer die die Quest eine Gildenquest
sein soll. Bsp: ({"Magiekundigengilde"}) Das hat keine
direkten Auswirkungen. Die Quest zaehlt aber dann in
jedem Falle AUTOMATISCH als optionale Quest. Das
Array wird nur benutzt, um die Questlisten innerhalb
der Gilden richtig zu erstellen. Eine Gildenquest ist
eine Quest, die entweder nur von Mitgliedern einer be-
stimmten Gilde geloest werden kann, oder nur von einer
(oder mehreren) Gilden benoetigt wird, um eintreten zu
koennen, die Stufe zu erhoehen etc. pp.
SIEHE AUCH
quests(WL), P_QUESTS, P_QP
|