/* Do not remove the headers from this file! see /USAGE for more info. */ #include <security.h> #include <classes.h> inherit M_DAEMON_DATA; /* ** Keep the list of the available skills. ** ** NOTE: The values in this mapping are unused (set to 1) */ private mapping skills = ([]); #define PRIV_REQUIRED "Mudlib:daemons" string * register_skill(string skill) { string * parts; string * result; if ( !check_privilege(PRIV_REQUIRED) ) error("security: illegal attempt to add a skill\n"); if ( skills[skill] ) return 0; /* create the skill and all parent skills */ parts = explode(skill, "/"); result = allocate(sizeof(parts)); for ( int i = sizeof(parts); i--; ) { string name = implode(parts[0..i], "/"); if ( !skills[name] ) { result[i] = name; skills[result[i]] = 1; } } save_me(); return filter(result, (: $1 :)); } string * remove_skill(string skill) { string * result = ({ skill }); if ( !check_privilege(PRIV_REQUIRED) ) error("security: illegal attempt to remove a skill\n"); if ( !skills[skill] ) return 0; /* delete the skill */ map_delete(skills, skill); /* delete all subskills: skills that start with <skill> + "/" */ skill = skill + "/"; foreach ( string name in keys(skills) ) if ( strsrch(name, skill) == 0 ) { map_delete(skills, name); result += ({ name }); } save_me(); return result; } string * query_skills() { return keys(skills); }