Dokumentation zu: combatmaster(SEC)

HR Image


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)


Start » Magierhandbuch » Docu » Secure » Combatmaster Letzte Generierung: 01.05.2021, 16:59
Valid HTML 4.01!