Zesstra@Morgengrauen | 66656a8 | 2016-07-20 23:22:47 +0200 | [diff] [blame] | 1 | // MorgenGrauen MUDlib |
| 2 | #pragma strong_types,save_types,rtt_checks |
| 3 | #pragma no_clone,no_inherit,no_shadow |
| 4 | #pragma pedantic, range_check |
| 5 | |
| 6 | #include <files.h> |
Bugfix | 880c165 | 2016-11-22 11:36:02 +0100 | [diff] [blame] | 7 | #include <config.h> |
bugfix | 141c6dd | 2020-04-12 22:49:56 +0200 | [diff] [blame^] | 8 | #include <new_skills.h> |
Zesstra@Morgengrauen | 66656a8 | 2016-07-20 23:22:47 +0200 | [diff] [blame] | 9 | |
| 10 | // Variablen fuer das Savefile von Jof, was dieses Objekt schreibt. |
| 11 | string name = "jof"; |
| 12 | string password = ""; |
| 13 | int level = 100; |
| 14 | string shell = "/std/shells/magier"; |
| 15 | |
bugfix | 141c6dd | 2020-04-12 22:49:56 +0200 | [diff] [blame^] | 16 | private void generiere_gilden(); |
| 17 | |
Zesstra@Morgengrauen | 66656a8 | 2016-07-20 23:22:47 +0200 | [diff] [blame] | 18 | public varargs int remove(int s) |
| 19 | { |
| 20 | destruct(this_object()); |
| 21 | return 1; |
| 22 | } |
| 23 | |
| 24 | protected void create() |
| 25 | { |
Bugfix | 880c165 | 2016-11-22 11:36:02 +0100 | [diff] [blame] | 26 | # if !defined(__TESTMUD__) && MUDHOST==__HOST_NAME__ |
Zesstra@Morgengrauen | 66656a8 | 2016-07-20 23:22:47 +0200 | [diff] [blame] | 27 | remove(); |
| 28 | return; |
| 29 | # endif |
| 30 | seteuid(getuid(this_object())); |
| 31 | if(file_size("/players/jof") == FSIZE_NOFILE) |
| 32 | { |
| 33 | mkdir("/players/jof"); |
| 34 | } |
bugfix | f0f67a8 | 2020-04-12 21:09:27 +0200 | [diff] [blame] | 35 | if(file_size("/players/jof/workroom.c") == FSIZE_NOFILE) |
Zesstra@Morgengrauen | 66656a8 | 2016-07-20 23:22:47 +0200 | [diff] [blame] | 36 | { |
| 37 | copy_file("/std/def_workroom.c","/players/jof/workroom.c"); |
| 38 | } |
Zesstra | 8557645 | 2017-01-30 15:43:21 +0100 | [diff] [blame] | 39 | if (!master()->find_userinfo("jof")) |
Zesstra@Morgengrauen | 66656a8 | 2016-07-20 23:22:47 +0200 | [diff] [blame] | 40 | { |
Zesstra | d983f7c | 2017-02-03 20:26:30 +0100 | [diff] [blame] | 41 | save_object(SECURESAVEPATH+"j/jof"); |
Zesstra@Morgengrauen | 66656a8 | 2016-07-20 23:22:47 +0200 | [diff] [blame] | 42 | } |
Christian Georg Becker | eea981a | 2017-03-07 14:19:40 +0100 | [diff] [blame] | 43 | |
bugfix | f0f67a8 | 2020-04-12 21:09:27 +0200 | [diff] [blame] | 44 | if(file_size("/room/konstrukt.c") > 0) |
Christian Georg Becker | eea981a | 2017-03-07 14:19:40 +0100 | [diff] [blame] | 45 | { |
| 46 | load_object("/room/konstrukt"); |
| 47 | } |
bugfix | 141c6dd | 2020-04-12 22:49:56 +0200 | [diff] [blame^] | 48 | generiere_gilden(); |
Zesstra | a1ff2c9 | 2020-04-09 12:08:06 +0200 | [diff] [blame] | 49 | master()->clear_cache(); |
Zesstra@Morgengrauen | 66656a8 | 2016-07-20 23:22:47 +0200 | [diff] [blame] | 50 | remove(); |
| 51 | } |
bugfix | 141c6dd | 2020-04-12 22:49:56 +0200 | [diff] [blame^] | 52 | |
| 53 | // Files zum Inherit aus Gilden- bzw. Spellbook-Repositories automatisch |
| 54 | // erzeugen. |
| 55 | private void generiere_gilden() |
| 56 | { |
| 57 | string* dir = get_dir("/gilden/",GETDIR_NAMES); |
| 58 | string* search = ({ |
| 59 | "/gilden/files.%s/%s.c", |
| 60 | "/gilden/files.%s/gilde.c", |
| 61 | "/gilden/files.%s/room/%s.c", |
| 62 | "/gilden/files.%s/room/gilde.c"}); |
| 63 | |
| 64 | foreach(string entry : dir) |
| 65 | { |
| 66 | if(entry[0..4] != "files" || file_size("/gilden/"+entry[6..]+".c") > 0) |
| 67 | continue; |
| 68 | |
| 69 | string file = entry[6..]; |
| 70 | // Zielpfad nullen, damit auffaellt, wenn kein Ziel gefunden wird. |
| 71 | string path; |
| 72 | foreach(string s : search) |
| 73 | { |
| 74 | if(file_size(sprintf(s, file, file)) > 0) |
| 75 | { |
| 76 | path = sprintf(s, file, file); |
| 77 | break; |
| 78 | } |
| 79 | } |
| 80 | |
| 81 | if(sizeof(path)) |
| 82 | { |
| 83 | write_file("/gilden/"+file+".c", |
| 84 | "// Automatisch generierter Gilden-Inherit\n" |
| 85 | "inherit \""+path+"\";\n\n" |
| 86 | "protected void create()\n" |
| 87 | "{\n" |
| 88 | " replace_program();\n" |
| 89 | "}\n"); |
| 90 | } |
| 91 | } |
| 92 | |
| 93 | // Bei Spellbooks sieht das leider etwas anders aus, daher ist hier eine |
| 94 | // Codedoppelung der uebersichtlichere Weg. |
| 95 | dir = get_dir("/spellbooks/", GETDIR_NAMES); |
| 96 | search = ({ |
| 97 | "/spellbooks/%s/%s.c", |
| 98 | "/spellbooks/%s/spellbook.c"}); |
| 99 | |
| 100 | foreach(string entry : dir) |
| 101 | { |
| 102 | // Die Spellbooks heissen zwar alle unterschiedlich ... aber die Ordner |
| 103 | // heissen wie die Gilde. Und die Gilde kennt ihr Spellbook. |
| 104 | if(file_size("/spellbooks/"+entry) != FSIZE_DIR || |
| 105 | file_size("/gilden/"+entry+".c") == FSIZE_NOFILE) |
| 106 | { |
| 107 | continue; |
| 108 | } |
| 109 | |
| 110 | string file; |
| 111 | catch(file = ("/gilden/"+entry)->QueryProp(P_GUILD_DEFAULT_SPELLBOOK)); |
| 112 | if(!sizeof(file) || file_size("/spellbooks/"+file+".c") > 0) continue; |
| 113 | |
| 114 | string path; |
| 115 | foreach(string s : search) |
| 116 | { |
| 117 | if(file_size(sprintf(s, entry, file)) > 0) |
| 118 | { |
| 119 | path = sprintf(s, entry, file); |
| 120 | break; |
| 121 | } |
| 122 | } |
| 123 | |
| 124 | if(sizeof(path)) |
| 125 | { |
| 126 | write_file("/spellbooks/"+file+".c", |
| 127 | "// Automatisch generierter Spellbook-Inherit\n" |
| 128 | "inherit \""+path+"\";\n\n" |
| 129 | "protected void create()\n" |
| 130 | "{\n" |
| 131 | " replace_program();\n" |
| 132 | "}\n"); |
| 133 | } |
| 134 | } |
| 135 | } |