blob: 11a43bcc2ac988c0ffd663b623572ed50778f4b8 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001check_restrictions()
Zesstra953f9972017-02-18 15:37:36 +01002********************
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra953f9972017-02-18 15:37:36 +01008 string check_restrictions(object pl, mapping restr)
MG Mud User88f12472016-06-24 23:31:02 +02009
MG Mud User88f12472016-06-24 23:31:02 +020010
Zesstra953f9972017-02-18 15:37:36 +010011DEFINIERT IN
12============
MG Mud User88f12472016-06-24 23:31:02 +020013
Zesstra953f9972017-02-18 15:37:36 +010014 /std/restriction_checker.c
15
16
17ARGUMENTE
18=========
19
20 object pl geprueftes Lebewesen
21 mapping restr Mapping mit Restriktionen, s.u.
22
23
24BESCHREIBUNG
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
35
36BEMERKUNGEN
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.
MG Mud User88f12472016-06-24 23:31:02 +020046
Zesstra077cbc62019-01-07 21:16:39 +010047 Aktuelle Liste der pruefbaren Parameter:
48
Zesstra953f9972017-02-18 15:37:36 +010049 P_LEVEL
Zesstra077cbc62019-01-07 21:16:39 +010050 Mindeststufe, die das Lebewesen besitzen muss, um die Aktion
51 auszufuehren.
Zesstra953f9972017-02-18 15:37:36 +010052 P_GUILD_LEVEL
Zesstra077cbc62019-01-07 21:16:39 +010053 Gildenlevel, das das Lebewesen mindestens erreicht haben muss, um die
54 Aktion auszufuehren.
Zesstra953f9972017-02-18 15:37:36 +010055 SR_SEER
Zesstra077cbc62019-01-07 21:16:39 +010056 Ist gesetzt, wenn das Lebewesen Seher sein muss.
57 Auswertung nur fuer Interactives, NSC ignorieren das Flag.
Zesstra953f9972017-02-18 15:37:36 +010058 P_XP
Zesstra077cbc62019-01-07 21:16:39 +010059 Mindestmenge an Erfahrungspunkten, die ein Lebewesen besitzen muss,
60 um die Aktion auszufuehren.
Zesstra953f9972017-02-18 15:37:36 +010061 P_QP
Zesstra077cbc62019-01-07 21:16:39 +010062 Mindestmenge an Abenteuerpunkten, die das Lebewesen haben muss.
Zesstra953f9972017-02-18 15:37:36 +010063 P_ALCOHOL
Zesstra077cbc62019-01-07 21:16:39 +010064 Menge an Alkohol, unter der der Alkoholspiegel des Lebewesen liegen
65 muss, um die Aktion noch ausfuehren zu koennen.
Zesstra953f9972017-02-18 15:37:36 +010066 P_DRINK
Zesstra077cbc62019-01-07 21:16:39 +010067 Menge an Fluessigkeit, unter der der Fluessigkeitsspiegel des
68 Lebewesen liegen muss, um die Aktion noch ausfuehren zu koennen.
Zesstra953f9972017-02-18 15:37:36 +010069 P_FOOD
Zesstra077cbc62019-01-07 21:16:39 +010070 Beinhaltet die Menge an Nahrung, unter der der Nahrungsspiegel des
71 Spielers liegen muss, um die Aktion noch ausfuehren zu koennen.
Zesstra953f9972017-02-18 15:37:36 +010072 P_DEAF
Zesstra077cbc62019-01-07 21:16:39 +010073 Ist gesetzt, falls der Spieler nicht taub sein darf.
Zesstra953f9972017-02-18 15:37:36 +010074 P_FROG
Zesstra077cbc62019-01-07 21:16:39 +010075 Ist gesetzt, falls der Spieler kein Frosch sein darf.
Zesstra953f9972017-02-18 15:37:36 +010076 P_BLIND
Zesstra077cbc62019-01-07 21:16:39 +010077 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.
Zesstra953f9972017-02-18 15:37:36 +010081 A_INT, A_DEX, A_CON, A_STR
Zesstra077cbc62019-01-07 21:16:39 +010082 Jeweilige Mindesthoehe eines Attribut, um eine Aktion ausfuehren zu
83 koennen.
Zesstra953f9972017-02-18 15:37:36 +010084 SR_BAD, SR_GOOD
Zesstra077cbc62019-01-07 21:16:39 +010085 Gibt an, wie [minimal] boese bzw. wie [maximal] gut ein Charakter sein
86 darf, um eine Aktion ausfuehren zu koennen.
Zesstra953f9972017-02-18 15:37:36 +010087 SR_MIN_SIZE, SR_MAX_SIZE
Zesstra077cbc62019-01-07 21:16:39 +010088 Gibt die minimale, bzw. die maximale Groesse an, die ein Charakter
89 maximal haben darf, um eine Aktion ausfuehren zu koennen.
Zesstra953f9972017-02-18 15:37:36 +010090 SR_FREE_HANDS
Zesstra077cbc62019-01-07 21:16:39 +010091 Gibt an, wieviele freie Haende ein Charakter fuer diese Aktion
92 besitzen muss.
Zesstra953f9972017-02-18 15:37:36 +010093 SR_EXCLUDE_RACE
Zesstra077cbc62019-01-07 21:16:39 +010094 Mitglieder aller in dieser Liste aufgefuehrten Rassen koennen
95 diese Aktion nicht ausfuehren.
Zesstra953f9972017-02-18 15:37:36 +010096 SR_INCLUDE_RACE
Zesstra077cbc62019-01-07 21:16:39 +010097 Mitglieder aller NICHT in dieser Liste aufgefuehrten Rassen koennen
98 diese Aktion nicht ausfuehren.
Zesstra953f9972017-02-18 15:37:36 +010099 SM_RACE
Zesstra077cbc62019-01-07 21:16:39 +0100100 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.
Zesstra953f9972017-02-18 15:37:36 +0100109 SR_FUN
Zesstra077cbc62019-01-07 21:16:39 +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 })
MG Mud User88f12472016-06-24 23:31:02 +0200119
Zesstra077cbc62019-01-07 21:16:39 +0100120 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.
Zesstra953f9972017-02-18 15:37:36 +0100132 SR_PROP
Zesstra077cbc62019-01-07 21:16:39 +0100133 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).
Zesstra953f9972017-02-18 15:37:36 +0100144 SR_QUEST
Zesstra077cbc62019-01-07 21:16:39 +0100145 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.
Arathorn9cd5f272019-11-26 19:21:08 +0100148 SR_MINIQUEST
Zesstra077cbc62019-01-07 21:16:39 +0100149 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.
Zesstra953f9972017-02-18 15:37:36 +0100153
154
155BEISPIELE
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
184
185SIEHE AUCH
186==========
187
188 execute_anything(L), AddSpell (Gilde), P_RESTRICTIONS
189
1903. Januar 2014, Arathorn