MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | // 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. |
| 18 | private 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. |
| 24 | private 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 | |
| 45 | protected 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 | */ |
| 52 | public 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 | */ |
| 63 | public 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 | */ |
| 77 | public 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 | |