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 03. Januar 2014, Arathorn