blob: c9e2e7bb3fff781adee8c527c95943ee6090c412 [file] [log] [blame]
Zesstra@Morgengrauen66656a82016-07-20 23:22:47 +02001// 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>
Bugfix880c1652016-11-22 11:36:02 +01007#include <config.h>
bugfix141c6dd2020-04-12 22:49:56 +02008#include <new_skills.h>
Zesstra@Morgengrauen66656a82016-07-20 23:22:47 +02009
10// Variablen fuer das Savefile von Jof, was dieses Objekt schreibt.
11string name = "jof";
12string password = "";
13int level = 100;
14string shell = "/std/shells/magier";
15
bugfix141c6dd2020-04-12 22:49:56 +020016private void generiere_gilden();
17
Zesstra@Morgengrauen66656a82016-07-20 23:22:47 +020018public varargs int remove(int s)
19{
20 destruct(this_object());
21 return 1;
22}
23
24protected void create()
25{
Bugfix880c1652016-11-22 11:36:02 +010026# if !defined(__TESTMUD__) && MUDHOST==__HOST_NAME__
Zesstra@Morgengrauen66656a82016-07-20 23:22:47 +020027 remove();
28 return;
29# endif
30 seteuid(getuid(this_object()));
31 if(file_size("/players/jof") == FSIZE_NOFILE)
32 {
33 mkdir("/players/jof");
34 }
bugfixf0f67a82020-04-12 21:09:27 +020035 if(file_size("/players/jof/workroom.c") == FSIZE_NOFILE)
Zesstra@Morgengrauen66656a82016-07-20 23:22:47 +020036 {
37 copy_file("/std/def_workroom.c","/players/jof/workroom.c");
38 }
Zesstra85576452017-01-30 15:43:21 +010039 if (!master()->find_userinfo("jof"))
Zesstra@Morgengrauen66656a82016-07-20 23:22:47 +020040 {
Zesstrad983f7c2017-02-03 20:26:30 +010041 save_object(SECURESAVEPATH+"j/jof");
Zesstra@Morgengrauen66656a82016-07-20 23:22:47 +020042 }
Christian Georg Beckereea981a2017-03-07 14:19:40 +010043
bugfixf0f67a82020-04-12 21:09:27 +020044 if(file_size("/room/konstrukt.c") > 0)
Christian Georg Beckereea981a2017-03-07 14:19:40 +010045 {
46 load_object("/room/konstrukt");
47 }
bugfix141c6dd2020-04-12 22:49:56 +020048 generiere_gilden();
Zesstraa1ff2c92020-04-09 12:08:06 +020049 master()->clear_cache();
Zesstra@Morgengrauen66656a82016-07-20 23:22:47 +020050 remove();
51}
bugfix141c6dd2020-04-12 22:49:56 +020052
53// Files zum Inherit aus Gilden- bzw. Spellbook-Repositories automatisch
54// erzeugen.
55private 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}