check_restrictions()

FUNKTION

string check_restrictions(object pl, mapping restr)

DEFINIERT IN

/std/restriction_checker.c

ARGUMENTE

object pl        geprueftes Lebewesen
mapping restr    Mapping mit Restriktionen, s.u.

BESCHREIBUNG

Die Methode wird verwendet, um Restriktionen (zum Beispiel fuer das
Casten eines Spells) zu pruefen. Sie wird von Spellbook und
Gildenobjekt direkt genutzt.

Ihr wird dabei ein Spielerobjekt sowie ein Mapping mit den jeweiligen
Restriktionen uebergeben. Die aktuell moeglichen Keys des Mappings sind
weiter unten gelistet.

BEMERKUNGEN

Es wird bei der Rasse P_REAL_RACE geprueft. Der Tarnhelm funktioniert
also nicht.

Bei Erweiterungsvorschlaegen wendet euch bitte an einen EM oder
inheritet im Zweifelsfall nach Absprache.
NIEMALS solchen Code einfach KOPIEREN. Spaeter muss nur irgendwer
eurem alten Code hinterherraeumen.

Aktuelle Liste der pruefbaren Parameter:

P_LEVEL
  Mindeststufe, die das Lebewesen besitzen muss, um die Aktion
  auszufuehren.
P_GUILD_LEVEL
  Gildenlevel, das das Lebewesen mindestens erreicht haben muss, um die
  Aktion auszufuehren.
SR_SEER
  Ist gesetzt, wenn das Lebewesen Seher sein muss.
  Auswertung nur fuer Interactives, NSC ignorieren das Flag.
P_XP
  Mindestmenge an Erfahrungspunkten, die ein Lebewesen besitzen muss,
  um die Aktion auszufuehren.
P_QP
  Mindestmenge an Abenteuerpunkten, die das Lebewesen haben muss.
P_ALCOHOL
  Menge an Alkohol, unter der der Alkoholspiegel des Lebewesen liegen
  muss, um die Aktion noch ausfuehren zu koennen.
P_DRINK
  Menge an Fluessigkeit, unter der der Fluessigkeitsspiegel des
  Lebewesen liegen muss, um die Aktion noch ausfuehren zu koennen.
P_FOOD
  Beinhaltet die Menge an Nahrung, unter der der Nahrungsspiegel des
  Spielers liegen muss, um die Aktion noch ausfuehren zu koennen.
P_DEAF
  Ist gesetzt, falls der Spieler nicht taub sein darf.
P_FROG
  Ist gesetzt, falls der Spieler kein Frosch sein darf.
P_BLIND
  Ist gesetzt, falls der Spieler nicht blind sein darf.
  Achtung: das ist nicht gleichbedeutend mit dem Umstand, dass er evtl.
  nichts mehr sehen kann. Auch andere Gruende (zum Beispiel Dunkelheit)
  koennen bewirken, dass ein Spieler nichts mehr sieht.
A_INT, A_DEX, A_CON, A_STR
  Jeweilige Mindesthoehe eines Attribut, um eine Aktion ausfuehren zu
  koennen.
SR_BAD, SR_GOOD
  Gibt an, wie [minimal] boese bzw. wie [maximal] gut ein Charakter sein
  darf, um eine Aktion ausfuehren zu koennen.
SR_MIN_SIZE, SR_MAX_SIZE
  Gibt die minimale, bzw. die maximale Groesse an, die ein Charakter
  maximal haben darf, um eine Aktion ausfuehren zu koennen.
SR_FREE_HANDS
  Gibt an, wieviele freie Haende ein Charakter fuer diese Aktion
  besitzen muss.
SR_EXCLUDE_RACE
  Mitglieder aller in dieser Liste aufgefuehrten Rassen koennen
  diese Aktion nicht ausfuehren.
SR_INCLUDE_RACE
  Mitglieder aller NICHT in dieser Liste aufgefuehrten Rassen koennen
  diese Aktion nicht ausfuehren.
SM_RACE
  Hier kann pro Rasse ein Mapping mit besonderen (nur) fuer diese Rasse
  geltenden Einschraenkungen vorgenommen werden. Als Keys sind die
  in dieser Manpage beschriebenen Keys erlaubt, wobei SM_RACE nicht
  rekursiv ausgewertet wird.
  Der Rassenname ist gross geschrieben und "*" steht fuer alle Rassen.
SR_EXCLUDE_GUILD
SR_INCLUDE_GUILD
  Diese beiden Keys verhalten sich wie SR_*_RACE, nur dass hier Gilden
  genannt werden.
SR_FUN
  Hier kann eine Funktion angegeben werden, die aufgerufen wird, um sie
  die Restriktionen zu pruefen zu lassen. Folgende Formen sind moeglich:
  - Funktionsname als String; Funktion wird an dem Objekt gerufen, das
    die Restriktion prueft, d.h. an der Ruestung/Waffe/Kleidung. Soll
    die Funktion an einem anderen Objekt gerufen werden, ist eine
    der beiden alternativen Formen zu verwenden.
  - eine Closure, wird per funcall() gerufen
  - ein Array mit dem folgenden Aufbau:
    ({ Objekt/Objektname, Funktionsname, arg_1, arg_2, ... , arg_n })

  Der aufgerufenen Funktion wird das Spielerobjekt immer als erstes
  Argument uebergeben, d.h. bei der Array-Form ggf. vor dem ersten
  Extra-Argument arg_1 eingeschoben.
  SR_FUN kann nuetzlich sein, um Restriktionen zu pruefen, die sich mit
  den anderen Optionen nicht abbilden lassen.
  Ist der Test nicht bestanden, muss die Funktion einen String zurueck-
  geben, ansonsten 0.
  Eine Besonderheit besteht beim Aufruf per call_other(), d.h. wenn
  restriction_checker.c nicht geerbt wurde und nur ein Funktionsname
  uebergeben wird. In diesem Fall, der auch bei Verwendung von
  P_RESTRICTIONS zum Tragen kommt, wird die Funktion immer am
  aufrufenden Objekt, d.h. previous_object(), gerufen.
SR_PROP
  Hier kann ein Mapping mit Properties und zugehoerigen Werten angegeben
  werden, die jeweils auf Identitaet geprueft werden. Zusaetzlich sollte
  eine Meldung angegeben werden, die als Fehlermeldung ausgegeben wird,
  wenn der Spieler die Bedingung nicht erfuellt. Es sollte immer eine
  passende Meldung fuer den Spieler eingebaut werden. Beispiel:
  ([ SR_PROP: ([P_AUSGANG_ENTDECKT: 1; "Dein Schwert fluestert "
      "veraergert: Ich werde Dir erst dann zu Diensten sein, wenn Du "
      "Dich als wuerdig erwiesen hast!"]) ])
  Aufgrund der Meldung wird empfohlen, SR_PROP nicht in Restriktionen
  einzusetzen, die massenweise in Savefiles landen (z.B.
  Spielersavefiles).
SR_QUEST
  Hier kann ein String-Array mit den Namen (Keys) der Quest(s) angegeben
  werden, die der Spieler bestanden haben muss, um die Aktion ausfuehren
  zu koennen.
SR_MINIQUEST
  Hier kann entweder ein String-Array mit den Ladenamen der vergebenden
  Objekte oder ein Int-Array mit den Index-Nummern (IDs) der
  Miniquest(s) (empfohlen!) angegeben werden, die der Spieler bestanden
  haben muss, um die Aktion ausfuehren zu koennen.

BEISPIELE

// #1 Levelbeschraenkung in der Abenteurergilde
AddSpell("feuerball",20,
         ([SI_SKILLRESTR_LEARN:([P_LEVEL:15]), ...

// #2 Glaubenstest im Klerus
AddSpell("bete",
         ([SI_SKILLRESTR_LEARN: ([P_GUILD_LEVEL : LVL_NOVIZE,
                                  SR_FUN : #'glaubensTest ]), ...
// mit
static string glaubensTest(object pl) {
  if (pl->QueryProp(K_STRENGTH) < 8000)
    return ("Deine Glaubensstaerke laesst zu wuenschen uebrig!\n");
  return 0;
}

// #3 SM_RACE-Modifikation der Restriktionen:
//    haertere Restriktionen fuer Zwerge
//    - hoeheres Level
//    - zusaetzlich A_STR pruefen
([P_LEVEL:15,
  A_INT:10,
  SM_RACE: (["Zwerg": ([P_LEVEL:17, A_STR:20])])])
// ist identisch zu
([SM_RACE: (["*":     ([P_LEVEL:15, A_INT:10]),
             "Zwerg": ([P_LEVEL:17, A_INT:10, A_STR:20])])])

SIEHE AUCH

execute_anything(L), AddSpell (Gilde), P_RESTRICTIONS
  1. Januar 2014, Arathorn