blob: 2db40ae3564862ad75b9390e674dfbd91d677a03 [file] [log] [blame]
// MorgenGrauen MUDlib
//
// /obj/classd.c -- master object for classes.
//
// Soll irgendwann mal Klassen aehnlich der Material-DB verwalten, momentan
// machts es erstmal einfach eine Ersetzung von Aliasen und ein Hinzufuegen
// von impliziten Klassen.
//
// $Id$
#pragma strict_types,save_types
#pragma no_clone, no_shadow, no_inherit
#pragma verbose_errors,combine_strings
#pragma pedantic, range_check, warn_deprecated
#include <class.h>
// Mapping von Aliasen fuer Klassen. Aliase duerfen nicht rekursiv sein.
private nosave mapping classaliases =
([
]);
// Mapping von impliziten Klassen fuer eine gegebene Klasse. Implizite Klassen
// sind als Array von Klassennamen gegeben. Implizite Klassen duerfen zur Zeit
// nicht rekursiv sein und keine Aliase enthalten.
private nosave mapping implicitclasses =
([
CL_ZOMBIE: ({CL_UNDEAD}),
CL_SKELETON: ({CL_UNDEAD}),
CL_GHOUL: ({CL_UNDEAD}),
CL_VAMPIRE: ({CL_UNDEAD}),
CL_HOBGOBLIN: ({CL_GOBLIN}),
CL_MAMMAL_LAND: ({CL_MAMMAL, CL_ANIMAL}),
CL_MAMMAL_WATER: ({CL_MAMMAL, CL_ANIMAL}),
CL_SNAKE: ({CL_REPTILE}),
CL_ARACHNID: ({CL_ANIMAL}),
CL_BIRD: ({CL_ANIMAL}),
CL_FISH: ({CL_ANIMAL}),
CL_FROG: ({CL_ANIMAL}),
CL_INSECT: ({CL_ANIMAL}),
CL_MAMMAL: ({CL_ANIMAL}),
CL_REPTILE: ({CL_ANIMAL}),
CL_SNAKE: ({CL_ANIMAL}),
CL_GOLEM: ({CL_CONSTRUCT}),
]);
protected void create() {
}
/** Gibt den Alias der Klasse <cls> zurueck.
* @param[in] cls string - Klassenname
* @return string* - Alias von Klasse <cls>
*/
public string * QueryClassAlias(string cls) {
if (!stringp(cls))
raise_error(sprintf(
"Got wrong argument, expected string, got %.50O\n",cls));
return copy(classaliases[cls]) || cls;
}
/** Gibt die impliziten Klassen der Klasse <cls> zurueck.
* @param[in] cls string - Klassenname
* @return string* - Liste von impliziten Klassen von <cls>
*/
public string * QueryImplicitClasses(string cls) {
if (!stringp(cls))
raise_error(sprintf(
"Got wrong argument, expected string, got %.50O\n", cls));
return copy(implicitclasses[cls]) || ({});
}
/** Adds implicit classes to the classes given in <classes>.
* Ausserdem werden Klassenaliase aufgeloest.
* @param[in] classes string* - Klassenliste.
* @return string* - neue Klassenliste
* @attention Kann das uebergebene Array aendern. Das Ergebnisarray muss nicht
* unique sein, sondern kann Dubletten enthalten.
*/
public string * AddImplicitClasses(string *classes) {
if (!pointerp(classes))
raise_error(sprintf(
"Got wrong argument, expected array, got %.50O\n",classes));
foreach(string cls : &classes) {
// zuerst Aliase ersetzen
if (member(classaliases, cls))
cls = classaliases[cls];
// dann implizite Klassen addieren.
if (member(implicitclasses, cls))
classes += implicitclasses[cls];
}
return classes;
}