blob: 2db40ae3564862ad75b9390e674dfbd91d677a03 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// /obj/classd.c -- master object for classes.
4//
5// Soll irgendwann mal Klassen aehnlich der Material-DB verwalten, momentan
6// machts es erstmal einfach eine Ersetzung von Aliasen und ein Hinzufuegen
7// von impliziten Klassen.
8//
9// $Id$
10#pragma strict_types,save_types
11#pragma no_clone, no_shadow, no_inherit
12#pragma verbose_errors,combine_strings
13#pragma pedantic, range_check, warn_deprecated
14
15#include <class.h>
16
17// Mapping von Aliasen fuer Klassen. Aliase duerfen nicht rekursiv sein.
18private nosave mapping classaliases =
19 ([
20 ]);
21// Mapping von impliziten Klassen fuer eine gegebene Klasse. Implizite Klassen
22// sind als Array von Klassennamen gegeben. Implizite Klassen duerfen zur Zeit
23// nicht rekursiv sein und keine Aliase enthalten.
24private nosave mapping implicitclasses =
25 ([
26 CL_ZOMBIE: ({CL_UNDEAD}),
27 CL_SKELETON: ({CL_UNDEAD}),
28 CL_GHOUL: ({CL_UNDEAD}),
29 CL_VAMPIRE: ({CL_UNDEAD}),
30 CL_HOBGOBLIN: ({CL_GOBLIN}),
31 CL_MAMMAL_LAND: ({CL_MAMMAL, CL_ANIMAL}),
32 CL_MAMMAL_WATER: ({CL_MAMMAL, CL_ANIMAL}),
33 CL_SNAKE: ({CL_REPTILE}),
34 CL_ARACHNID: ({CL_ANIMAL}),
35 CL_BIRD: ({CL_ANIMAL}),
36 CL_FISH: ({CL_ANIMAL}),
37 CL_FROG: ({CL_ANIMAL}),
38 CL_INSECT: ({CL_ANIMAL}),
39 CL_MAMMAL: ({CL_ANIMAL}),
40 CL_REPTILE: ({CL_ANIMAL}),
41 CL_SNAKE: ({CL_ANIMAL}),
42 CL_GOLEM: ({CL_CONSTRUCT}),
43 ]);
44
45protected void create() {
46}
47
48/** Gibt den Alias der Klasse <cls> zurueck.
49 * @param[in] cls string - Klassenname
50 * @return string* - Alias von Klasse <cls>
51 */
52public string * QueryClassAlias(string cls) {
53 if (!stringp(cls))
54 raise_error(sprintf(
55 "Got wrong argument, expected string, got %.50O\n",cls));
56 return copy(classaliases[cls]) || cls;
57}
58
59/** Gibt die impliziten Klassen der Klasse <cls> zurueck.
60 * @param[in] cls string - Klassenname
61 * @return string* - Liste von impliziten Klassen von <cls>
62 */
63public string * QueryImplicitClasses(string cls) {
64 if (!stringp(cls))
65 raise_error(sprintf(
66 "Got wrong argument, expected string, got %.50O\n", cls));
67 return copy(implicitclasses[cls]) || ({});
68}
69
70/** Adds implicit classes to the classes given in <classes>.
71 * Ausserdem werden Klassenaliase aufgeloest.
72 * @param[in] classes string* - Klassenliste.
73 * @return string* - neue Klassenliste
74 * @attention Kann das uebergebene Array aendern. Das Ergebnisarray muss nicht
75 * unique sein, sondern kann Dubletten enthalten.
76 */
77public string * AddImplicitClasses(string *classes) {
78 if (!pointerp(classes))
79 raise_error(sprintf(
80 "Got wrong argument, expected array, got %.50O\n",classes));
81 foreach(string cls : &classes) {
82 // zuerst Aliase ersetzen
83 if (member(classaliases, cls))
84 cls = classaliases[cls];
85 // dann implizite Klassen addieren.
86 if (member(implicitclasses, cls))
87 classes += implicitclasses[cls];
88 }
89 return classes;
90}
91