KONZEPT
Combatmaster Objekt
AUTOR
Holger@Wunderland 10/99
FILE
/secure/combat.c
BESCHREIBUNG
Der Combatmaster dient keiner anderen Aufgabe, als die Zulaessigkeit
von Kampf-Objekten wie Ruestungen und Waffen zu kontrollieren. In
erster Linie verwaltet er die Zertifikate fuer diese Objekte. Fol-
gende Funktionen stehen dazu zur Verfuegung:
public int CertifyObject(object ob, object who, int cert);
public void RegisterWeapon(object ob);
public void RegisterArmour(object ob);
Jede Waffe/Ruestung, die von den Standardklassen std/weapon.c sowie
std/armour.c abgeleitet ist, meldet sich nach dem Clonen (im init())
selbst beim Combatmaster an. Dieser haelt eine Liste bereit, in der
das zu Objekt enthalten sein muss. Ist es enthalten, bekommt es das
Zertifikat fuer dieses Objekt. Wenn das Objekt noch nicht enthalten
ist, dann fuehrt der Combatmaster einen Check durch und vergibt dann
das Zertifikat und traegt das Objekt in seine interne Liste ein,
damit der Check das naechste mal nicht wiederholt werden muss.
Der Combatmaster ueberwacht Veraenderungen an dem Sourcefile des
Objekts. Stellt er ein Veraenderung seit dem letzten Zertifikat
fest, wird der Check erneut durchgefuehrt und das neugeclonte Objekt
(nicht die bereits exisitierenden!) bekommt das neue Zertifikat.
Der Combatmaster gibt allen Objekten, die keine besonderen Funk-
tionen enthalten und deren Werte sich in einem 'vernuenftigen'
Spektrum bewegen automatisch ein positives Zertifikat. Objekte, die
diese Voraussetzungen nicht erfuellen, bekommen ein negatives. Die
Waffen oder Ruestung laesst sich dann von Spielern nichtmehr zuecken
bzw. anziehen.
Um Objekte positiv zu zertifizieren, auch wenn sie Zusatzfunktionen
oder hohe Werte enthalten, muss dies der Regionsmagier selbst tun.
Dazu hat er im Labor (/room/labor.c) die Moeglichkeit. Autorisiert
ist der Magier trotzdem nur, wenn er Schreibrechte auf dieses Objekt
hat.
Magier sehen in der Langbeschreibung, ob das Objekt ein Zertifikat
hat, bzw. wie lange das gueltig ist, oder sie sehen einen Fehler-
code, der darueber informiert, warum das Objekt kein positives Zer-
tifikat hat.
FEHLERCODES
Hier eine Uebersicht der Fehlercodes bei negativer Zertifizierung
fuer Waffen und Ruestungen:
-1 - Klon/Programm waren beim Check aelter als Filedatum. Ein
Objekt bekommt kein positives Zertifikat mehr, wenn es ael-
ter, als das Filedatum des Sourcefiles ist. Das wuerde unter
Umstaenden dazu fuehren, dass ein altes Objekt eine Zertifi-
zierung des neuen Sourcecodes fuehrt. Das sollte aber nur
ein Problem darstellen, wenn ein Sourcefile geaendert wurde,
waehrend noch Clones irgendwo rumliegen, ohne dass init()
aufgerufen wurde. Da 99.9% der Waffen direkt in NPCs geclont
werden, duerfte dies kaum vorkommen. Ein Problem stellt es
auch dar, wenn Files geaendert wurden und die alte Blueprint
nicht destructet bzw. neugeladen wurde. Sollte sich das mit
den -1 haeufen, muss ich mir einen anderen Weg ausdenken!
-2 - Dieses Objekt hat einen invaliden/illegalen Typ gesetzt.
-4 - Bei einer Waffe wurde P_NR_HANDS nicht gesetzt.
-8 - Dieses Objekt enthaelt nicht ueberpruefbare Zusatzfunk-
tionen. Der Combatmaster kann solche Funktionen nicht ana-
lysieren, ob sie das Objekt unzulaessig manipulieren. Es
muss daher auf jeden Fall 'von Hand' zertifiziert werden.
-16 - Die Waffen- oder Ruestungsklasse dieses Objekts ist nah an
der Grenze oder ueber den zulaessigen Werten fuer Waffen und
Ruestungen (man waffen_ruestungen). Der Combatmaster hat
einen gewisses Limit fuer diese Werte. Damit wollen wir ver-
meiden, dass es nurnoch Waffen+Ruestungen mit Maximalwerten
oder knapp darunter gibt.
-32 - Dieser Code gewinnt erst ab dem neuen Kampfsystem fuer den
zulaessigen Magieschaden an Bedeutung.
-64 - Der Wert des Objekts (P_VALUE) ist ziemlich hoch. Ueber-
schreitet der Wert einer Waffe/Ruestungen einen bestimmten
Grenzwert, wird es pauschal als zu teuer angesehen. Da dies
im Einzelfall sicher gerechtfertigt ist, muss das Objekt von
Hand zertifiziert werden.
-128 - Es wurde kein Gewicht (P_WEIGHT) gesetzt. Das ist pauschal
ein Fehler. (siehe -64)
-256 - Es wurde keine Sperrigkeit (P_BULKINESS) gesetzt. (siehe -64)
-512 - Es wurde eine unendliche Lebenszeit (P_MAX_LIFETIME) ge-
setzt. Solche Objekte sollen Ausnahme bleiben! (siehe -64)
-1024 - Das positive Zertifikat wurde 'von Hand' verweigert. Das
heisst, irgendein Magier hat diesem Objekt das Zertifikat
ausdruecklich verweigert. In diesem Fall bitte an einen
Erzmagier wenden!
SYNTAXEN
Im folgenden werden kurz die Funktionen des Masters erklaert:
public int CertifyObject(object ob, object who, int cert);
Gibt ein Zertifikat 'cert' fuer das Objekt 'ob'. Ausfuehrender ist
der Magier 'who'. Diese Funktion kann nur vom Objekt /room/labor.c
aufgerufen werden. Ausserdem sind nur Regionsmagier mit Schreibrecht
fuer das angegebene Objekt autorisiert. Diese Funktion direkt auf-
zurufen bringt garnix. Als Returnwerte ist folgendes zu erwarten:
>0 - Ein positives Zertifikat. (Zeit)
0 - Objekt war keine Waffe oder Ruestung.
-1 - 'who' ist dazu nicht berechtigt.
-2 - 'ob' hat kein oder leeres Sourcefile.
-3 - 'cert' ist zu gross, darf nicht laenger als 3 Jahre hin sein
-1024 - Zertifikat erfolgreich verweigert. (negatives 'cert')
public void RegisterWeapon(object ob);
Die Waffe 'ob' wird angemeldet, um ein Zertifikat zu bekommen. Diese
Funktion ruft die Waffe selbst auf im init(). Der Combatmaster macht
ggf. seine Checks und/oder vergibt das Zertifikat, indem er
ob->SetCertificate(int cert) aufruft.
public void RegisterArmour(object ob);
Das gleiche nur fuer Ruestungsobjekte.
HINWEIS
JEGLICHE OBJEKTE, DIE VERSUCHEN, DIE ZERTIFIZIERUNG DURCH DEN COM-
BATMASTER ZU UMGEHEN, SIND ILLEGAL! WERDEN OBJEKTE DIESER ART GE-
FUNDEN, ODER GIBT ES ANDERE BEWEISE FUER EINEN DERARTIGEN VERSUCH,
WIRD DAS ALS SCHWERWIEGENDE VERLETZUNG DES MAGIERVERTRAGS BEHANDELT!
SONSTIGES
Der Combatmaster enthaelt noch zwei weitere Funktionen, die jedoch
nicht besonders nuetzlich sind und wohl nur von der Lib selbst
benutzt werden:
public int valid_weapon_type(string typ);
Returnt 1, wenn 'typ' ein valider Waffentyp ist, ansonsten 0.
public int valid_armour_type(string typ);
Returnt 1, wenn 'typ' ein valider Ruestungstyp ist, ansonsten 0.
SIEHE AUCH
zertifikate(WL), CertifyObject(L), RegisterWeapon(L),
RegisterArmour(L), SetCertificate(L), QueryCertificate(L),
time(E), init(A)
|