
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
================

3. Januar 2014, Arathorn
