Dokumentation zu: CheckIgnore(L)

HR Image


FUNKTION:
	int CheckIgnore(string uid, string verb, object act_o, string desc)

IMPLEMENTIERT:
	/std/player/comm.c

ARGUMENTE:
	uid   :  Uid oder Uid-Aequivalent des Akteurs.
	verb  :  Standardform des Verbs / Name der Aktion.
	act_o :  Objekt des Akteurs.
	desc  :  Zusaetzliche generelle Beschreibung der Aktion.

	Alle Argumente sind optional.

BESCHREIBUNG:
	Mit dieser Funktion kann man testen, ob ein Spieler eine Aktion
	ignorieren moechte. Hierbei wird sein P_IGNORE und P_EARMUFFS
	beachtet.

	Die Eintraege in P_IGNORE koennen folgende Syntax haben:
	  "UID",     "UID.ACTION",  "UID.DESC.ACTION",  "DESC.ACTION",
	  "ACTION",  "UID.DESC",    "UID.ACTION.DESC",  "ACTION.DESC",
	  "DESC"

	Ist ein Akteur-Objekt uebergeben worden, so wird dessen P_LEVEL
	und wiz_level relativ zu P_EARMUFFS des Spielers geprueft.

BEMERKUNG:
	Vorsicht ist geboten, wenn man die Uid eines Lebewesens bestimmen
	moechte. Bei Spielern geht dies einfach mit getuid(E), NPCs haben
	hier jedoch keinen sinnvollen Wert (sondern zb "d:wunderland").

	Hier bietet sich an, auf etwas mehr oder weniger eindeutiges wie
	seinen Namen zurueckzugreifen:

	if (interactive(act)) uid = getuid(act);
	else {
	  uid = act->name(RAW);
	  if (uid) uid = lower_case(uid);
	}

	Dies liefert bei manchen NPCs zwar komische Werte (zB "Prem Kokus"),
	das muessen die Spieler dann eben wissen.

	Wenn man 'uid' nicht angegeben hat, jedoch ein 'act_o', so wird
	auf genau diese Art die Uid bestimmt. Dies ist nicht immer das,
	was man haben will (dann muss man 'uid' explizit angeben), jedoch
	meistens.

RÜCKGABEWERT:
	 0   Ok (kein ignorieren).
	-1   Der Akteur (besser die Uid) wird komplett ignoriert.
	-2   Die Aktion wird ignoriert (verb oder desc).
	-3   Ignorieren wegen P_EARMUFFS.
	-4   Ignoriert den Befehls des Akteurs

BEISPIEL:
	uid = getuid(PL);
	i = vic->CheckIgnore(uid, "knuddel", PL, "remote");

	switch (i) {
	  -1:      ret = " ignoriert Dich";          break;
	  -2:      ret = " ignoriert Knuddeln";      break;
	  -3:      ret = " ignoriert gerade alles";  break;
          -4:      ret = " ignoriert Dein Knuddeln"; break;
	  default: /* nix tun */                     break;
	}

	oder auch:

	i = vic->CheckIgnore(0, "rufe", 0, "anniquest");

	Normalerweise will man danach eine Ausgabe erzeugen. Hier sollte
	man wie folgt vorgehen:

	foreach (spieler : users()) {
	  if (spieler->CheckIgnore(0, "rufe", 0, "anniquest") < 0) continue;
	  spieler->Message(text, 0, 0, 0, C_KOB_IGN);
	}

	Dies ermoeglicht dem Spieler den Ruf mit folgenden Werten zu
	ignorieren:
	 - ignoriere rufe
	 - ignoriere anniquest
	 - ignoriere anniquest.rufe
	 - ignoriere rufe.anniquest

	Etwas aehnliches, aber subtil anders bewirkt:

	foreach (spieler : users()) {
	  spieler->Message(text, "rufe", 0, "anniquest",
	                   C_KOB_IGN | C_MSG_IGNCHK);
	}

	Das 2. Beispiel versucht die Uid des Rufers zu bestimmen (also
	z.B. Anni) und testet weiterhin, ob der Spieler vielleicht den
	ausloesenden Spieler (z.B. den, der die Quest loeste) komplett
	ignoriert und unterdrueckt die Ausgabe dann auch:
	 - ignoriere anni
	 - ignoriere anni.rufe
	 - ignoriere anni.anniquest
	 - ignoriere anni.anniquest.rufe
	 - ignoriere anni.rufe.anniquest
	 - ignoriere spieler
	 - ignoriere spieler.anniquest

SIEHE AUCH:
	P_IGNORE, P_EARMUFFS, Message(L)


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