blob: 2c815cd2b967e3c4de9c689885e6e3fad7bce37c [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001check_restrictions()
2FUNKTION:
3 string check_restrictions(object pl, mapping restr)
4
5DEFINIERT IN:
6 /std/restriction_checker.c
7
8ARGUMENTE:
9 object pl geprueftes Lebewesen
10 mapping restr Mapping mit Restriktionen, s.u.
11
12BESCHREIBUNG:
13 Die Methode wird verwendet, um Restriktionen (zum Beispiel fuer das
14 Casten eines Spells) zu pruefen. Sie wird von Spellbook und
15 Gildenobjekt direkt genutzt.
16
17 Ihr wird dabei ein Spielerobjekt sowie ein Mapping mit den jeweiligen
18 Restriktionen uebergeben. Die aktuell moeglichen Keys des Mappings sind
19 weiter unten gelistet.
20
21BEMERKUNGEN:
22 Es wird bei der Rasse P_REAL_RACE geprueft. Der Tarnhelm funktioniert
23 also nicht.
24
25 Bei Erweiterungsvorschlaegen wendet euch bitte an einen EM oder
26 inheritet im Zweifelsfall nach Absprache.
27 NIEMALS solchen Code einfach KOPIEREN. Spaeter muss nur irgendwer
28 eurem alten Code hinterherraeumen.
29
30Aktuelle Liste der pruefbaren Parameter:
31 P_LEVEL
32 Mindeststufe, die das Lebewesen besitzen muss, um die Aktion
33 auszufuehren.
34 P_GUILD_LEVEL
35 Gildenlevel, das das Lebewesen mindestens erreicht haben muss, um die
36 Aktion auszufuehren.
37 SR_SEER
38 Ist gesetzt, wenn das Lebewesen Seher sein muss.
39 Auswertung nur fuer Interactives, NSC ignorieren das Flag.
40 P_XP
41 Mindestmenge an Erfahrungspunkten, die ein Lebewesen besitzen muss,
42 um die Aktion auszufuehren.
43 P_QP
44 Mindestmenge an Abenteuerpunkten, die das Lebewesen haben muss.
45 P_ALCOHOL
46 Menge an Alkohol, unter der der Alkoholspiegel des Lebewesen liegen
47 muss, um die Aktion noch ausfuehren zu koennen.
48 P_DRINK
49 Menge an Fluessigkeit, unter der der Fluessigkeitsspiegel des
50 Lebewesen liegen muss, um die Aktion noch ausfuehren zu koennen.
51 P_FOOD
52 Beinhaltet die Menge an Nahrung, unter der der Nahrungsspiegel des
53 Spielers liegen muss, um die Aktion noch ausfuehren zu koennen.
54 P_DEAF
55 Ist gesetzt, falls der Spieler nicht taub sein darf.
56 P_FROG
57 Ist gesetzt, falls der Spieler kein Frosch sein darf.
58 P_BLIND
59 Ist gesetzt, falls der Spieler nicht blind sein darf.
60 Achtung: das ist nicht gleichbedeutend mit dem Umstand, dass er evtl.
61 nichts mehr sehen kann. Auch andere Gruende (zum Beispiel Dunkelheit)
62 koennen bewirken, dass ein Spieler nichts mehr sieht.
63 A_INT, A_DEX, A_CON, A_STR
64 Jeweilige Mindesthoehe eines Attribut, um eine Aktion ausfuehren zu
65 koennen.
66 SR_BAD, SR_GOOD
67 Gibt an, wie [minimal] boese bzw. wie [maximal] gut ein Charakter sein
68 darf, um eine Aktion ausfuehren zu koennen.
69 SR_MIN_SIZE, SR_MAX_SIZE
70 Gibt die minimale, bzw. die maximale Groesse an, die ein Charakter
71 maximal haben darf, um eine Aktion ausfuehren zu koennen.
72 SR_FREE_HANDS
73 Gibt an, wieviele freie Haende ein Charakter fuer diese Aktion
74 besitzen muss.
75 SR_EXCLUDE_RACE
76 Mitglieder aller in dieser Liste aufgefuehrten Rassen koennen
77 diese Aktion nicht ausfuehren.
78 SR_INCLUDE_RACE
79 Mitglieder aller NICHT in dieser Liste aufgefuehrten Rassen koennen
80 diese Aktion nicht ausfuehren.
81 SM_RACE
82 Hier kann pro Rasse ein Mapping mit besonderen (nur) fuer diese Rasse
83 geltenden Einschraenkungen vorgenommen werden. Als Keys sind die
84 in dieser Manpage beschriebenen Keys erlaubt, wobei SM_RACE nicht
85 rekursiv ausgewertet wird.
86 Der Rassenname ist gross geschrieben und "*" steht fuer alle Rassen.
87 SR_EXCLUDE_GUILD
88 SR_INCLUDE_GUILD
89 Diese beiden Keys verhalten sich wie SR_*_RACE, nur dass hier Gilden
90 genannt werden.
91 SR_FUN
92 Hier kann eine Funktion in verschiedenen Formen zum Pruefen der
93 Restriktionen angegeben werden, siehe execute_anything().
94 Das kann nuetzlich sein, um andere Restriktionen zu pruefen,
95 wie das Bestehen von Miniquests oder andere Faehigkeiten/Flags.
96 Ist der Test nicht bestanden, gibt die Funktion einen String zurueck.
97 SR_PROP
98 Hier kann ein Mapping mit Properties und zugehoerigen Werten angegeben
99 werden, die jeweils auf Identitaet geprueft werden. Zusaetzlich sollte
100 eine Meldung angegeben werden, die als Fehlermeldung ausgegeben wird,
101 wenn der Spieler die Bedingung nicht erfuellt. Es sollte immer eine
102 passende Meldung fuer den Spieler eingebaut werden. Beispiel:
103 ([ SR_PROP: ([P_AUSGANG_ENTDECKT: 1; "Dein Schwert fluestert "
104 "veraergert: Ich werde Dir erst dann zu Diensten sein, wenn Du "
105 "Dich als wuerdig erwiesen hast!"]) ])
106 Aufgrund der Meldung wird empfohlen, SR_PROP nicht in Restriktionen
107 einzusetzen, die massenweise in Savefiles landen (z.B.
108 Spielersavefiles).
109 SR_QUEST
110 Hier kann ein String-Array mit den Namen (Keys) der Quest(s) angegeben
111 werden, die der Spieler bestanden haben muss, um die Aktion ausfuehren
112 zu koennen.
113 SQ_MINIQUEST
114 Hier kann entweder ein String-Array mit den Ladenamen der vergebenden
115 Objekte oder ein Int-Array mit den Index-Nummern (IDs) der
116 Miniquest(s) (empfohlen!) angegeben werden, die der Spieler bestanden
117 haben muss, um die Aktion ausfuehren zu koennen.
118
119BEISPIELE:
120 // #1 Levelbeschraenkung in der Abenteurergilde
121 AddSpell("feuerball",20,
122 ([SI_SKILLRESTR_LEARN:([P_LEVEL:15]), ...
123
124 // #2 Glaubenstest im Klerus
125 AddSpell("bete",
126 ([SI_SKILLRESTR_LEARN: ([P_GUILD_LEVEL : LVL_NOVIZE,
127 SR_FUN : #'glaubensTest ]), ...
128 // mit
129 static string glaubensTest(object pl) {
130 if (pl->QueryProp(K_STRENGTH) < 8000)
131 return ("Deine Glaubensstaerke laesst zu wuenschen uebrig!\n");
132 return 0;
133 }
134
135 // #3 SM_RACE-Modifikation der Restriktionen:
136 // haertere Restriktionen fuer Zwerge
137 // - hoeheres Level
138 // - zusaetzlich A_STR pruefen
139 ([P_LEVEL:15,
140 A_INT:10,
141 SM_RACE: (["Zwerg": ([P_LEVEL:17, A_STR:20])])])
142 // ist identisch zu
143 ([SM_RACE: (["*": ([P_LEVEL:15, A_INT:10]),
144 "Zwerg": ([P_LEVEL:17, A_INT:10, A_STR:20])])])
145
146SIEHE AUCH:
147 execute_anything(L), AddSpell (Gilde), P_RESTRICTIONS
148
14903. Januar 2014, Arathorn