Im Homemud Gilden- und Spellbook-Inherits erzeugen
Inherits auf vorandene Repositories koennnen automatisch erzeugt werden.
Change-Id: I2c2606683f0d506425c86b8f6931c6a5440d0382
diff --git a/secure/testmud.c b/secure/testmud.c
index 2cdf469..c9e2e7b 100644
--- a/secure/testmud.c
+++ b/secure/testmud.c
@@ -5,6 +5,7 @@
#include <files.h>
#include <config.h>
+#include <new_skills.h>
// Variablen fuer das Savefile von Jof, was dieses Objekt schreibt.
string name = "jof";
@@ -12,6 +13,8 @@
int level = 100;
string shell = "/std/shells/magier";
+private void generiere_gilden();
+
public varargs int remove(int s)
{
destruct(this_object());
@@ -42,6 +45,91 @@
{
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");
+ }
+ }
+}