Dokumentation zu: AddPromptModifier(L)

HR Image


FUNKTION:
	public int AddPromptModifier(string modi, closure cl)

IMPLEMENTIERT:
	/std/player/prompt.c

ARGUMENTE:
	modi  - der Name des neuen Makros
	cl    - Closure die den Ersetzungstext zum Makro liefert

BESCHREIBUNG:
	Mit dieser Funktion kann ein Objekt einem Spieler ein neues
	Makro fuer die Prompt-Erzeugung bereitstellen ('hilfe prompt').
	Baut der Spieler das Makro 'modi' in seinen Prompt ein, so wird
	die Closure 'cl' ausgefuehrt, um den Ersetzungstext zu bestimmen.

	Die Closure muss an eine Funktion des aufrufenden Objektes gebunden
	sein, man kann also nicht 'im Namen eines anderen Objektes' anmelden.

	pl->AddPromptModifier("XXX", #'funktion);

	Die Funktion, auf die die Closure zeigt, muss wie folgt aussehen:

	string funktion(string what) {
	  ...
	  return "Ersetzung";
	}

	Als Argument bekommt sie das zu ersetzende Makro, so dass man
	in einer Funktion auch mehrere verschiedene Makros behandeln
	kann. Achtung: Vor dem Makro steht jeweils immer ein Schraegstrich,
	Falls das Makro XXX hiess also \XXX (genauso wie es der Spieler
	eingegeben hat). In Strings muss der '\' verdoppelt werden, also
	entspricht dann "\\XXX" (siehe 'man escape').

	Die Funktion muss einen String zurueckliefern. Wenn sie Null
	zurueckliefert, wird sie automatisch ausgetragen. Will man keinen
	Ersetzungstext (aber nicht ausgetragen werden, weil eventuell
	spaeter doch Text ausgegeben werden soll), so muss man den
	Leerstring "" zurueckliefern.

	Makronamen duerfen nur aus Grossbuchstaben bestehen oder aus einem
	einzelnen Kleinbuchstaben. Also "a", "x", "BLAH", "FASEL", "Q"
	oder anders ausgedrueckt: /[a-z]|[A-Z]+/

RÜCKGABEWERT:
	 1  - Erfolg
	-1  - cl ist keine Closure oder nicht an das aufrufende Obj gebunden
	-2  - das Makro ist schon vergeben (fuer dieses oder ein anderes Obj)
	-3  - das Makro entspricht nicht den Vorgaben

BEISPIEL:
	Bei diesem Beispiel vergibt ein Objekt Makros, wenn der Spieler es
	im Inventar hat. Legt er es wieder ab sind die Makros auch nicht
	mehr nutzbar.

	// Anmelden im Move
	int move(mixed dest, int method) {
	  int ret;
	  closure cl;

	  ret = ::move(dest, method);

	  if (ret <= 0) return ret;

	  if (objectp(dest) && interactive(dest)) {
	    cl = #'prompt;
	    dest->AddPromptModifier("LP",    cl);
	    dest->AddPromptModifier("LPMAX", cl);
	  }

	  return ret;
	}

	// Erzeugen der Ersetzung und ggf Abmelden
	string prompt(string what) {
	  object po;

	  po = previous_object();
	  if (environment() != po) {
	    po->RemovePromptModifier("LP");
	    po->RemovePromptModifier("LPMAX");
	    return 0;
	  }
	  switch (what) {
	    case "\\LP":    return to_string(po->QueryProp(P_HP));
	    case "\\LPMAX": return to_string(po->QueryProp(P_MAX_HP));
	  }
	  return 0;
	}

SIEHE AUCH:
	RemovePromptModifier(L)


Start » Magierhandbuch » Docu » Lfun » AddPromptModifier Letzte Generierung: 25.04.2021, 01:58
Email an: mud@wl.mud.de
Valid HTML 4.01!