| // MorgenGrauen MUDlib |
| #pragma strong_types,save_types,rtt_checks |
| #pragma no_clone,no_inherit,no_shadow |
| #pragma pedantic, range_check |
| |
| #include <files.h> |
| #include <config.h> |
| #include <new_skills.h> |
| |
| // Variablen fuer das Savefile von Jof, was dieses Objekt schreibt. |
| string name = "jof"; |
| string password = ""; |
| int level = 100; |
| string shell = "/std/shells/magier"; |
| |
| private void generiere_gilden(); |
| |
| public varargs int remove(int s) |
| { |
| destruct(this_object()); |
| return 1; |
| } |
| |
| protected void create() |
| { |
| # if !defined(__TESTMUD__) && MUDHOST==__HOST_NAME__ |
| remove(); |
| return; |
| # endif |
| seteuid(getuid(this_object())); |
| if(file_size("/players/jof") == FSIZE_NOFILE) |
| { |
| mkdir("/players/jof"); |
| } |
| if(file_size("/players/jof/workroom.c") == FSIZE_NOFILE) |
| { |
| copy_file("/std/def_workroom.c","/players/jof/workroom.c"); |
| } |
| if (!master()->find_userinfo("jof")) |
| { |
| save_object(SECURESAVEPATH+"j/jof"); |
| } |
| |
| if(file_size("/room/konstrukt.c") > 0) |
| { |
| load_object("/room/konstrukt"); |
| } |
| generiere_gilden(); |
| master()->clear_cache(); |
| remove(); |
| } |
| |
| // Files zum Inherit aus Gilden- bzw. Spellbook-Repositories automatisch |
| // erzeugen. |
| private void generiere_gilden() |
| { |
| string* dir = get_dir("/gilden/",GETDIR_NAMES); |
| string* search = ({ |
| "/gilden/files.%s/%s.c", |
| "/gilden/files.%s/gilde.c", |
| "/gilden/files.%s/room/%s.c", |
| "/gilden/files.%s/room/gilde.c"}); |
| |
| foreach(string entry : dir) |
| { |
| if(entry[0..4] != "files" || file_size("/gilden/"+entry[6..]+".c") > 0) |
| continue; |
| |
| string file = entry[6..]; |
| // Zielpfad nullen, damit auffaellt, wenn kein Ziel gefunden wird. |
| string path; |
| foreach(string s : search) |
| { |
| if(file_size(sprintf(s, file, file)) > 0) |
| { |
| path = sprintf(s, file, file); |
| break; |
| } |
| } |
| |
| if(sizeof(path)) |
| { |
| write_file("/gilden/"+file+".c", |
| "// Automatisch generierter Gilden-Inherit\n" |
| "inherit \""+path+"\";\n\n" |
| "protected void create()\n" |
| "{\n" |
| " replace_program();\n" |
| "}\n"); |
| } |
| } |
| |
| // Bei Spellbooks sieht das leider etwas anders aus, daher ist hier eine |
| // Codedoppelung der uebersichtlichere Weg. |
| dir = get_dir("/spellbooks/", GETDIR_NAMES); |
| search = ({ |
| "/spellbooks/%s/%s.c", |
| "/spellbooks/%s/spellbook.c"}); |
| |
| foreach(string entry : dir) |
| { |
| // Die Spellbooks heissen zwar alle unterschiedlich ... aber die Ordner |
| // heissen wie die Gilde. Und die Gilde kennt ihr Spellbook. |
| if(file_size("/spellbooks/"+entry) != FSIZE_DIR || |
| file_size("/gilden/"+entry+".c") == FSIZE_NOFILE) |
| { |
| continue; |
| } |
| |
| string file; |
| catch(file = ("/gilden/"+entry)->QueryProp(P_GUILD_DEFAULT_SPELLBOOK)); |
| if(!sizeof(file) || file_size("/spellbooks/"+file+".c") > 0) continue; |
| |
| string path; |
| foreach(string s : search) |
| { |
| if(file_size(sprintf(s, entry, file)) > 0) |
| { |
| path = sprintf(s, entry, file); |
| break; |
| } |
| } |
| |
| if(sizeof(path)) |
| { |
| write_file("/spellbooks/"+file+".c", |
| "// Automatisch generierter Spellbook-Inherit\n" |
| "inherit \""+path+"\";\n\n" |
| "protected void create()\n" |
| "{\n" |
| " replace_program();\n" |
| "}\n"); |
| } |
| } |
| } |