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