Dokumentation zu: GuardExit(L)

HR Image


FUNKTION:
	varargs void GuardExit(string exit, mixed deny [, int force])

DEFINIERT IN:
	/std/npc/guard.c

ARGUMENTE:
	exit  - Ein Ausgang in dem Raum, in dem der NPC steht. z.B. "westen"
		oder "nordosten"
	deny  - 1. Entweder ein Integer:
		deny >  0 - es wird eine Standardmeldung ausgegeben.
		deny == 0 - Gibt den Ausgang wieder frei. Macht also ein
		vorheriges GuardExit() rueckgaengig.
	        2. Oder ein String:
		Der String wird an den Spieler ausgegeben, der versucht,
		den Ausgang zu benutzen.
	        3. Oder ein Array aus 2 Strings:
		Der erste String wird an den Spieler, der zweite String an
		den Raum ausgegeben.
	        4. Oder eine Closure:
		Die Closure wird aufgerufen, wenn der Spieler versucht, den
		Exit zu benutzen. Liefert die Closure 0, dann ist der Aus-
		gang frei, liefert sie 1, dann wird der Ausgang versperrt.
		Als Argument kann die Closure 2 Argumente erwarten:
		1. den Spieler als Objekt, der den Exit benutzen will.
		2. den Ausgang, den der Spieler benutzen will als String.
	force - Wenn angegeben wird der Ausgang immer versperrt bzw immer
		die Closure aufgerufen, unabhaengig davon, ob der Spieler 
		schleicht oder unsichtbar oder ein Magier ist. :-)

BESCHREIBUNG:
	Mit der Funktion kann man einen NPC anweisen einen Ausgang zu be-
	wachen. Er laesst dann keinen Spieler/NPC mehr diesen Exit durch-
	schreiten, solange er lebt. GuardExit basiert auf dem ET_GO-Event
	des Livings und bricht diesen ggf. ab. Sollte es ein Objekt geben,
	was sich anders 'bewegt', bitte einem Erzmagier Bescheid sagen.

	Normalerweise 'bemerkt' der NPC einen Spieler/NPC nicht, wenn die-
	ser unsichtbar ist und der NPC P_CANNOT_SEE_INVIS gesetzt hat ODER
	wenn der Spieler schleicht und der P_SENSE-Wert den NPCs nicht
	hoch genug ist (analog P_AGGRESSIVE) oder wenn der Spieler 
	IS_LEARNING ist. Wird 'force' gesetzt, wird der Ausgang immer
	versperrt, bzw. die Closure immer aufgerufen. Sinnvoll ist das bei
	Quest-NPCs, die Schleicher nicht durchlassen sollen oder aehn-
	lichem. Via Closure kann man das Versperren dann selbst regeln.

	WICHTIG: Da GuardExit intern als Event-Abbrecher implementiert ist,
	sind die dafuer geltenden Einschraenkungen zu beachten. Es duerfen
	keine Folgeevents durch Aufruf der closure ausgeloest werden.
	Dazu zaehlen unter anderem Move-Events (durch Aufruf von move() aus-
	geloest) und Todesevents (z.B. infolge von do_damage). Will man mehr,
	muss man einen eigenen Event-Abbruch-Reagierer fuer ET_GO bauen.

RÜCKGABEWERT:
	Keiner.

BEMERKUNG:
	Die Closure darf nur in dem NPC selbst liegen. Alles andere wird
	ein Bug! Der NPC meldet sich nur als Event-Lauscher an, wenn er
	auch einen Ausgang bewacht. Beendet man GuardExit mit deny==0 dann
	meldet sich der NPC ab, wenn er keinen Ausgang mehr bewacht. Der
	NPC meldet sich sowieso ab, wenn er zerstoert wird. Der NPC prueft
	NICHT, ob es den angegebenen Ausgang tatsaechlich gibt. Es ist ihm
	auch egal, wohin der Exit fuehrt. Er faengt jeden Exit (bzw. jedes
	Kommando) ab, was einen ET_GO-Event ausloest.

BEISPIEL:
	Im Waechter-NPC:

	int block(object player);

	void create()
	{
		...

		::create();

		...

	        GuardExit("westen", #'block);
	}

	int block(object player)
	{
		if(!objectp(player)) return 1;
		tell_object(player, "Der Raeuber laesst dich nicht durch!\n");
		tell_room(environment(), break_string("Der Raeuber lacht "
			"nur dreckig, als "+player->name(WER)+" versucht, "
			"nach Westen zu gehen."), ({player}) );
		return 1;
	}

SIEHE AUCH:
	AddExit(L), P_INVIS, P_HIDE, P_SENSE, P_CANNOT_SEE_INVIS, P_AGGRESSIVE


Start » Magierhandbuch » Docu » Lfun » GuardExit Letzte Generierung: 16.04.2009, 21:46
Email an: mud@wl.mud.de
Valid HTML 4.01!