blob: 5ce524c23eded5db0d210a51aeb4a7720506433a [file] [log] [blame]
#pragma strong_types,save_types,rtt_checks
#pragma no_clone,no_inherit,no_shadow
#pragma pedantic, range_check
#include <rooms.h>
#include <files.h>
#include <properties.h>
#include <config.h>
inherit "/std/room";
protected void add_testmud_gexits();
protected void create() {
::create();
SetProp(P_INT_LONG,
break_string(
"Du befindest Dich im \"Konstrukt\", einem weissen Nichts eines "
"jungfraeulichen Universums. Dieser Ort wartet darauf, dass Du ihn "
"mit Deiner Phantasie auffuellst. Von hier aus kann man wohl durch "
"blossen Willen andere Orte erreichen, die es in diesem jungen "
"Universum schon gibt.", 78));
SetProp(P_INT_SHORT, "Im Konstrukt");
SetProp(P_LIGHT, 1);
AddDetail(({"konstrukt","nichts"}),
break_string("Es ist weiss - und sonst Nichts.", 78));
AddDetail("universum",
break_string("Es liegt dir zu Fuessen.", 78));
AddDetail(({"fuss","fuesse"}),
break_string("Deine Fuesse.", 78));
AddDetail("phantasie",
break_string("Sie schlummert in dir. Es ist an dir, ihr Gestalt "
"zu geben.", 78));
AddExit("bsp","/doc/beispiele/misc/bspraum1");
AddExit("ssp","/doc/beispiele/ssp/l1/m3x1");
AddExit("zauberwald","/doc/beispiele/zauberwald/room/eingang");
AddExit("gilde","/gilden/abenteurer");
#if defined(__TESTMUD__) || MUDHOST!=__HOST_NAME__
({"/doc/beispiele/misc/bspraum1",
"/doc/beispiele/ssp/l1/m3x1",
"/doc/beispiele/zauberwald/room/eingang"})->AddExit("konstrukt",
load_name(this_object()));
call_out(#'add_testmud_gexits, 1);
#endif
}
protected string get_vcomp_possibility(mapping gdirectory) {
foreach(string path, int tp: gdirectory) {
if(tp>20) {
string head = read_file(path);
if(head && strstr(head, "compile_object")>=0) {
return path;
}
}
}
return 0;
}
protected void get_dirs_and_files(mapping gdirs, mapping gfiles) {
mapping gdirectory =
mkmapping(get_dir("/gilden/", GETDIR_PATH|GETDIR_UNSORTED),
get_dir("/gilden/", GETDIR_SIZES));
m_delete(gdirectory, "/gilden/access_rights.c");
gdirs = filter(gdirectory, function int(string path, int tp) {
if(tp == FSIZE_DIR)
return 1;
return 0;
});
gfiles = filter(gdirectory, function int(string path, int tp) {
if(tp > 0)
return 1;
return 0;
});
}
protected void try_add_gexit(string realpath, string *added_exists) {
object ob;
if(member(added_exists, realpath)<0 &&
!catch(ob=load_object(realpath); nolog) && ob &&
member(inherit_list(ob), "/std/gilden_room.c")>=0) {
AddExit(explode(realpath, "/")[<1][0..<3], realpath);
ob->AddExit("konstrukt", load_name(this_object()));
}
}
protected void add_testmud_gexits() {
mapping gdirs, gfiles;
get_dirs_and_files(&gdirs, &gfiles);
string vcomp = get_vcomp_possibility(gfiles);
m_delete(gfiles, vcomp);
string *added_exists = allocate(0);
foreach(string path, int tp: gfiles)
try_add_gexit(path, &added_exists);
if(vcomp)
foreach(string path, int tp: gdirs)
if(strstr(path, "files.")>0) {
string realpath = implode(explode(path, "files."), "")+".c";
try_add_gexit(realpath, &added_exists);
}
}