blob: 83df446be9a6e72a408dd97ea42b1e7c806707b9 [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001check_restrictions()
2====================
3
4FUNKTION
5--------
6::
7
8 string check_restrictions(object pl, mapping restr)
9
10DEFINIERT IN
11------------
12::
13
14 /std/restriction_checker.c
15
16ARGUMENTE
17---------
18::
19
20 object pl geprueftes Lebewesen
21 mapping restr Mapping mit Restriktionen, s.u.
22
23BESCHREIBUNG
24------------
25::
26
27 Die Methode wird verwendet, um Restriktionen (zum Beispiel fuer das
28 Casten eines Spells) zu pruefen. Sie wird von Spellbook und
29 Gildenobjekt direkt genutzt.
30
31 Ihr wird dabei ein Spielerobjekt sowie ein Mapping mit den jeweiligen
32 Restriktionen uebergeben. Die aktuell moeglichen Keys des Mappings sind
33 weiter unten gelistet.
34
35BEMERKUNGEN
36-----------
37::
38
39 Es wird bei der Rasse P_REAL_RACE geprueft. Der Tarnhelm funktioniert
40 also nicht.
41
42 Bei Erweiterungsvorschlaegen wendet euch bitte an einen EM oder
43 inheritet im Zweifelsfall nach Absprache.
44 NIEMALS solchen Code einfach KOPIEREN. Spaeter muss nur irgendwer
45 eurem alten Code hinterherraeumen.
46
Zesstrae0146a52019-01-07 21:15:12 +010047 Aktuelle Liste der pruefbaren Parameter:
48
Zesstra18626972017-01-31 10:38:27 +010049 P_LEVEL
50 Mindeststufe, die das Lebewesen besitzen muss, um die Aktion
51 auszufuehren.
52 P_GUILD_LEVEL
53 Gildenlevel, das das Lebewesen mindestens erreicht haben muss, um die
54 Aktion auszufuehren.
55 SR_SEER
56 Ist gesetzt, wenn das Lebewesen Seher sein muss.
57 Auswertung nur fuer Interactives, NSC ignorieren das Flag.
58 P_XP
59 Mindestmenge an Erfahrungspunkten, die ein Lebewesen besitzen muss,
60 um die Aktion auszufuehren.
61 P_QP
62 Mindestmenge an Abenteuerpunkten, die das Lebewesen haben muss.
63 P_ALCOHOL
64 Menge an Alkohol, unter der der Alkoholspiegel des Lebewesen liegen
65 muss, um die Aktion noch ausfuehren zu koennen.
66 P_DRINK
67 Menge an Fluessigkeit, unter der der Fluessigkeitsspiegel des
68 Lebewesen liegen muss, um die Aktion noch ausfuehren zu koennen.
69 P_FOOD
70 Beinhaltet die Menge an Nahrung, unter der der Nahrungsspiegel des
71 Spielers liegen muss, um die Aktion noch ausfuehren zu koennen.
72 P_DEAF
73 Ist gesetzt, falls der Spieler nicht taub sein darf.
74 P_FROG
75 Ist gesetzt, falls der Spieler kein Frosch sein darf.
76 P_BLIND
77 Ist gesetzt, falls der Spieler nicht blind sein darf.
78 Achtung: das ist nicht gleichbedeutend mit dem Umstand, dass er evtl.
79 nichts mehr sehen kann. Auch andere Gruende (zum Beispiel Dunkelheit)
80 koennen bewirken, dass ein Spieler nichts mehr sieht.
81 A_INT, A_DEX, A_CON, A_STR
82 Jeweilige Mindesthoehe eines Attribut, um eine Aktion ausfuehren zu
83 koennen.
84 SR_BAD, SR_GOOD
85 Gibt an, wie [minimal] boese bzw. wie [maximal] gut ein Charakter sein
86 darf, um eine Aktion ausfuehren zu koennen.
87 SR_MIN_SIZE, SR_MAX_SIZE
88 Gibt die minimale, bzw. die maximale Groesse an, die ein Charakter
89 maximal haben darf, um eine Aktion ausfuehren zu koennen.
90 SR_FREE_HANDS
91 Gibt an, wieviele freie Haende ein Charakter fuer diese Aktion
92 besitzen muss.
93 SR_EXCLUDE_RACE
94 Mitglieder aller in dieser Liste aufgefuehrten Rassen koennen
95 diese Aktion nicht ausfuehren.
96 SR_INCLUDE_RACE
97 Mitglieder aller NICHT in dieser Liste aufgefuehrten Rassen koennen
98 diese Aktion nicht ausfuehren.
99 SM_RACE
100 Hier kann pro Rasse ein Mapping mit besonderen (nur) fuer diese Rasse
101 geltenden Einschraenkungen vorgenommen werden. Als Keys sind die
102 in dieser Manpage beschriebenen Keys erlaubt, wobei SM_RACE nicht
103 rekursiv ausgewertet wird.
104 Der Rassenname ist gross geschrieben und "*" steht fuer alle Rassen.
105 SR_EXCLUDE_GUILD
106 SR_INCLUDE_GUILD
107 Diese beiden Keys verhalten sich wie SR_*_RACE, nur dass hier Gilden
108 genannt werden.
109 SR_FUN
Zesstrae0146a52019-01-07 21:15:12 +0100110 Hier kann eine Funktion angegeben werden, die aufgerufen wird, um sie
111 die Restriktionen zu pruefen zu lassen. Folgende Formen sind moeglich:
112 - Funktionsname als String; Funktion wird an dem Objekt gerufen, das
113 die Restriktion prueft, d.h. an der Ruestung/Waffe/Kleidung. Soll
114 die Funktion an einem anderen Objekt gerufen werden, ist eine
115 der beiden alternativen Formen zu verwenden.
116 - eine Closure, wird per funcall() gerufen
117 - ein Array mit dem folgenden Aufbau:
118 ({ Objekt/Objektname, Funktionsname, arg_1, arg_2, ... , arg_n })
119
120 Der aufgerufenen Funktion wird das Spielerobjekt immer als erstes
121 Argument uebergeben, d.h. bei der Array-Form ggf. vor dem ersten
122 Extra-Argument arg_1 eingeschoben.
123 SR_FUN kann nuetzlich sein, um Restriktionen zu pruefen, die sich mit
124 den anderen Optionen nicht abbilden lassen.
125 Ist der Test nicht bestanden, muss die Funktion einen String zurueck-
126 geben, ansonsten 0.
127 Eine Besonderheit besteht beim Aufruf per call_other(), d.h. wenn
128 restriction_checker.c nicht geerbt wurde und nur ein Funktionsname
129 uebergeben wird. In diesem Fall, der auch bei Verwendung von
130 P_RESTRICTIONS zum Tragen kommt, wird die Funktion immer am
131 aufrufenden Objekt, d.h. previous_object(), gerufen.
Zesstra18626972017-01-31 10:38:27 +0100132 SR_PROP
133 Hier kann ein Mapping mit Properties und zugehoerigen Werten angegeben
134 werden, die jeweils auf Identitaet geprueft werden. Zusaetzlich sollte
135 eine Meldung angegeben werden, die als Fehlermeldung ausgegeben wird,
136 wenn der Spieler die Bedingung nicht erfuellt. Es sollte immer eine
137 passende Meldung fuer den Spieler eingebaut werden. Beispiel:
138 ([ SR_PROP: ([P_AUSGANG_ENTDECKT: 1; "Dein Schwert fluestert "
139 "veraergert: Ich werde Dir erst dann zu Diensten sein, wenn Du "
140 "Dich als wuerdig erwiesen hast!"]) ])
141 Aufgrund der Meldung wird empfohlen, SR_PROP nicht in Restriktionen
142 einzusetzen, die massenweise in Savefiles landen (z.B.
143 Spielersavefiles).
144 SR_QUEST
145 Hier kann ein String-Array mit den Namen (Keys) der Quest(s) angegeben
146 werden, die der Spieler bestanden haben muss, um die Aktion ausfuehren
147 zu koennen.
148 SQ_MINIQUEST
149 Hier kann entweder ein String-Array mit den Ladenamen der vergebenden
150 Objekte oder ein Int-Array mit den Index-Nummern (IDs) der
151 Miniquest(s) (empfohlen!) angegeben werden, die der Spieler bestanden
152 haben muss, um die Aktion ausfuehren zu koennen.
153
154BEISPIELE
155---------
156::
157
158 // #1 Levelbeschraenkung in der Abenteurergilde
159 AddSpell("feuerball",20,
160 ([SI_SKILLRESTR_LEARN:([P_LEVEL:15]), ...
161
162 // #2 Glaubenstest im Klerus
163 AddSpell("bete",
164 ([SI_SKILLRESTR_LEARN: ([P_GUILD_LEVEL : LVL_NOVIZE,
165 SR_FUN : #'glaubensTest ]), ...
166 // mit
167 static string glaubensTest(object pl) {
168 if (pl->QueryProp(K_STRENGTH) < 8000)
169 return ("Deine Glaubensstaerke laesst zu wuenschen uebrig!\n");
170 return 0;
171 }
172
173 // #3 SM_RACE-Modifikation der Restriktionen:
174 // haertere Restriktionen fuer Zwerge
175 // - hoeheres Level
176 // - zusaetzlich A_STR pruefen
177 ([P_LEVEL:15,
178 A_INT:10,
179 SM_RACE: (["Zwerg": ([P_LEVEL:17, A_STR:20])])])
180 // ist identisch zu
181 ([SM_RACE: (["*": ([P_LEVEL:15, A_INT:10]),
182 "Zwerg": ([P_LEVEL:17, A_INT:10, A_STR:20])])])
183
184SIEHE AUCH
185----------
186::
187
188 execute_anything(L), AddSpell (Gilde), P_RESTRICTIONS
189
19003. Januar 2014, Arathorn
191