P_RESTRICTIONS
==============

NAME
----
::

    P_RESTRICTIONS                                "restrictions"

DEFINIERT IN
------------
::

    /sys/combat.h
    (Die SR_*-Parameter sind in /sys/new_skills.h definiert.)

BESCHREIBUNG
------------
::

    Enthaelt ein mapping mit den zu pruefenden Einschraenkungen.

    In dieser Property lassen sich Restriktionen setzen, die vor dem
    Zuecken einer Waffe / Anziehen einer Ruestung oder Kleidung geprueft
    werden und dies gegebenfalls verhindern, ohne gleich auf eine evtl.
    vorhandene WieldFunc / WearFunc zuzugreifen.

    Die Auswertung erfolgt ueber den Aufruf von check_restrictions()
    in /std/restriction_checker.c

    Folgende Keys werden in dem Mapping ausgewertet:

    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 in verschiedenen Formen zum Pruefen der
      Restriktionen angegeben werden, siehe execute_anything().
      Das kann nuetzlich sein, um andere Restriktionen zu pruefen,
      wie das Bestehen von Miniquests oder andere Faehigkeiten/Flags.
      Ist der Test nicht bestanden, gibt die Funktion einen String zurueck.
    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.

BEMERKUNGEN
-----------
::

    Diese Property eignet sich hervorragend dafuer, einige Grundbedingungen
    fuer das Nutzen der Waffe / Ruestung / Kleidung zu stellen ohne gleich
    eine Wield- oder WearFunc setzen und auswerten zu muessen.

    Denkbar waere der Einsatz bei hochwertigen Waffen / Ruestungen / Kleidung,
    z.B. aus der Para-Welt oder solchen, die sich nah am Limit der geltenden
    Grenzwerte fuer P_WC / P_AC bewegen oder sogar (nach Genehmigung durch
    die Balance) darueber.

BEISPIEL
--------
::

    Mindeststufe 25: SetProp(P_RESTRICTIONS,([P_LEVEL:25]));
    Keine Menschen:  SetProp(P_RESTRICTIONS,([SR_EXCLUDE_RACE:({"Mensch"})]));
    Alignment >499:  SetProp(P_RESTRICTIONS,([SR_GOOD:500]));

    Komplexeres Beispiel

    Quest "Diamond Club" bestanden, magiereigene Property P_AUSGANG_GEFUNDEN
    muss gesetzt sein, Stufe 10, nicht taub, max. 45 Food:
    SetProp(P_RESTRICTIONS, ([ P_LEVEL: 10, P_DEAF: 1, P_FOOD: 45,
      SR_PROP: ([P_AUSGANG_GEFUNDEN:1]), SR_QUEST:({"Diamond Club"}) ]));

SIEHE AUCH
----------
::

    check_restrictions(L)
    WieldFunc(L), WearFunc(L), RemoveFunc(L), UnwieldFunc(L),
    P_WIELD_FUNC, P_WEAR_FUNC, P_REMOVE_FUNC, P_UNWIELD_FUNC
    /std/armour/wear.c, /std/weapon/combat.c, clothing, armours, weapon

LETZTE AeNDERUNG
----------------
::

03. Januar 2014, Arathorn

