Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/obj/tools/ptool.c b/obj/tools/ptool.c
new file mode 100644
index 0000000..c836cae
--- /dev/null
+++ b/obj/tools/ptool.c
@@ -0,0 +1,291 @@
+/*
+ Objekt zum Eintragen von Raeumen die Zaubertraenke enthalten beim
+ potionmaster.
+*/
+
+#include <wizlevels.h>
+#include <properties.h>
+#include <language.h>
+
+inherit "std/thing";
+
+int dump();
+
+int secure()
+{
+ if (!previous_object()) return 0;
+ if (geteuid(previous_object())==ROOTID) return 1;
+ if (geteuid(previous_object()) != geteuid(this_interactive())) return 0;
+ if (this_interactive() != this_player()) return 0;
+ if (!ARCH_SECURITY) return 0;
+ return 1;
+}
+
+void create()
+{
+ if (!clonep(this_object())) return;
+ ::create();
+ SetProp(P_SHORT, "Potion-Tool");
+ SetProp(P_LONG,
+ "Ein Tool zum Eintragen von Raumen in den Potionmaster.\n"+
+ "Folgende Befehle gibt es:\n"+
+ "ptadd <liste> Addiert den ZT im Raum in Liste <liste>\n"+
+ " und aktiviert ihn gleichzeitig.\n"+
+ "ptset <liste> Aktiviert den ZT im Raum und setzt ihn in\n"+
+ " die Liste <liste>.\n"+
+ "ptchange <nummer> Ersetzt den ZT <nummer> durch den ZT im Raum.\n"+
+ "ptact Aktiviert einen deaktivierten ZT in seiner\n"+
+ " bisherigen Liste.\n"+
+ "ptdeact Deaktiviert den ZT im Raum aus der ZTListe\n"+
+ " und verschiebt ihn nach 'deaktivierte ZTs'.\n"+
+ "ptinfo [para] kein para: Zeigt Infos ueber den ZT im aktu-\n"+
+ " ellen Raum.\n"+
+ " int para: Zeigt Infos zum ZT para an.\n"+
+ " string para: Zeigt ZT-Infos des Spielers para.\n"+
+ "ptdump Erzeugt ein Dump der aktuellen ZTListe und\n"+
+ " speichert diesen ab.\n\n");
+ SetProp(P_NAME, "PTool");
+ SetProp(P_GENDER, NEUTER);
+ AddId(({"tool", "ptool"}));
+ SetProp(P_NODROP, 1);
+ SetProp(P_AUTOLOADOBJ, 1);
+ AddCmd("ptadd", "add");
+ AddCmd("ptset", "setlist");
+ AddCmd("ptchange", "changepath");
+ AddCmd("ptact", "activate");
+ AddCmd("ptdeact", "deactivate");
+ AddCmd("ptinfo", "info");
+ AddCmd("ptdump", "dump");
+}
+
+int add(string number)
+{
+ int nr, next, active;
+ string room;
+ if (!secure())
+ { printf("Fehler: -1\n"); return -1; }
+ if (!query_once_interactive(environment()))
+ { printf("Fehler: -2\n"); return -2; }
+ if (!number)
+ { printf("Fehler: -3\n"); return -3; }
+ sscanf(number, "%d", nr);
+ if (!intp(nr))
+ { printf("Fehler: -4\n"); return -4; }
+ room = object_name(environment(environment(this_object())));
+ next = "/secure/potionmaster"->AddPotionRoom(room,nr);
+ if (next>0)
+ printf("Raum in Gesamtliste eingetragen, Nummer: %d\n", next-1);
+ else
+ {
+ printf("Raum konnte nicht eingetragen werden, Ergebnis: %d\n", next);
+ return 1;
+ }
+ // Nicht mehr noetig, Arathorn, 2013-Mai-30
+ //active = "/secure/potionmaster"->SetListNr(room, nr);
+ if (active>=0)
+ {
+ printf("Raum aktiviert in Liste %d\n", nr);
+ dump();
+ }
+ else
+ printf("Fehler beim Aktivieren, Ergebnis: %d\n", active);
+ return 1;
+}
+
+int changepath(string number)
+{
+ int nr,neu;
+ string room;
+ mixed roomold;
+ if (!secure())
+ { printf("Fehler: -1\n"); return -1; }
+ if (!query_once_interactive(environment()))
+ { printf("Fehler: -2\n"); return -2; }
+ if (!number)
+ { printf("Fehler: -3\n"); return -3; }
+ sscanf(number, "%d", nr);
+ if (!intp(nr))
+ { printf("Fehler: -4\n"); return -4; }
+ room = object_name(environment(environment(this_object())));
+ roomold = "/secure/potionmaster"->GetFilenameByNumber(nr);
+ if (roomold==-1)
+ { printf("Fehler: -5\n"); return -5; }
+ neu = "/secure/potionmaster"->ChangeRoomPath(roomold,room);
+ if (neu>0)
+ {
+ printf("ZT %d durch aktuellen Raum ersetzt.\n", neu);
+ dump();
+ }
+ else
+ printf("ZT %d konnte nicht ersetzt werden, Ergebnis: %d\n", nr,neu);
+ return 1;
+}
+
+int setlist(string number)
+{
+ int nr, next, active;
+ string room;
+ if (!secure())
+ { printf("Fehler: -1\n"); return -1; }
+ if (!query_once_interactive(environment()))
+ { printf("Fehler: -2\n"); return -2; }
+ if (!number)
+ { printf("Fehler: -3\n"); return -3; }
+ sscanf(number, "%d", nr);
+ if (!intp(nr) || nr<0 || nr>7)
+ { printf("Fehler: -4\n"); return -4; }
+ room = object_name(environment(environment(this_object())));
+ active = "/secure/potionmaster"->SetListNr(room, nr);
+ if (active>=0)
+ {
+ printf("Raum aktiviert in Liste %d\n", nr);
+ dump();
+ }
+ else
+ printf("Fehler beim Aktivieren, Ergebnis: %d\n", active);
+ return 1;
+}
+
+int activate()
+{
+ int nr, active;
+ string room;
+
+ if (!secure())
+ { printf("Fehler: -1\n"); return -1; }
+ if (!query_once_interactive(environment()))
+ { printf("Fehler: -2\n"); return -2; }
+ room = object_name(environment(environment(this_object())));
+ active = "/secure/potionmaster"->ActivateRoom(room);
+ if (active>=0)
+ {
+ printf("Raum aktiviert in Liste %d\n", active);
+ dump();
+ }
+ else
+ printf("Fehler beim Aktivieren, Ergebnis: %d\n", active);
+ return 1;
+}
+
+int deactivate()
+{
+ int deactive;
+ string room;
+
+ if (!secure())
+ { printf("Fehler: -1\n"); return -1; }
+ if (!query_once_interactive(environment()))
+ { printf("Fehler: -2\n"); return -2; }
+ room = object_name(environment(environment(this_object())));
+ deactive = "/secure/potionmaster"->DeactivateRoom(room);
+ if (deactive>=0)
+ {
+ printf("Raum deaktiviert in Liste %d\n",deactive);
+ dump();
+ }
+ else
+ printf("Fehler beim Deaktivieren, Ergebnis: %d\n", deactive);
+ return 1;
+}
+
+int info(string para)
+{
+ int info,nr;
+ string s;
+ object room,o;
+ mixed m,*potions;
+ if (!secure())
+ { printf("Fehler: -1\n"); return -1; }
+ if (!query_once_interactive(environment()))
+ { printf("Fehler: -2\n"); return -2; }
+ if (!para || para=="")
+ {
+ room = environment(environment(this_object()));
+ info = "/secure/potionmaster"->HasPotion(room);
+ if (info>=0)
+ {
+ printf("Raum hat ZT mit Nr: %d\n\n",info);
+ nr = "/secure/potionmaster"->GetListByNumber(info);
+ if (nr>=0)
+ printf("ZT aktiv in Liste: %d\n\n",nr);
+ else
+ {
+ nr = "/secure/potionmaster"->GetInactListByNumber(info);
+ if (nr>=0)
+ printf("ZT INaktiv in Liste: %d\n\n",nr);
+ else
+ printf("ZT INaktiv\n\n");
+ }
+ if (info>=0 && s=read_file("/secure/ARCH/ZT/"+info+".zt"))
+ {
+ write("Tip:\n"+s);
+ }
+ }
+ else
+ printf("Raum hat keinen ZT eingetragen.\n");
+ }
+ else
+ if (sscanf(para,"%d",info)==1)
+ {
+ printf("ZT mit Nummer: %d\n\n",info);
+ m = "/secure/potionmaster"->GetFilenameByNumber(info);
+ if (m!=-1)
+ {
+ write("Filename: "+m+"\n\n");
+ nr = "/secure/potionmaster"->GetListByNumber(info);
+ if (nr>=0)
+ printf("ZT aktiv in Liste: %d\n\n",nr);
+ else
+ {
+ nr = "/secure/potionmaster"->GetInactListByNumber(info);
+ if (nr>=0)
+ printf("ZT INaktiv in Liste: %d\n\n",nr);
+ else
+ printf("ZT INaktiv\n\n");
+ }
+ if (info>=0 && s=read_file("/secure/ARCH/ZT/"+info+".zt"))
+ {
+ write("Tip:\n"+s);
+ }
+ }
+ else
+ write("Kein ZT mit dieser Nummer bekannt.\n");
+ }
+ else
+ {
+ write("Spieler "+capitalize(para)+"\n\n");
+ if (o=find_player(para))
+ {
+ potions=sort_array(o->QueryProp(P_POTIONROOMS),#'>);
+ if (sizeof(potions))
+ {
+ s="";
+ for (nr=0;nr<sizeof(potions);nr++)
+ s+=potions[nr]+", ";
+ write("Potionrooms:\n"+break_string(s[0..<3],78)+"\n");
+ }
+ else write("Spieler hat keine weiteren Potionrooms.\n");
+ potions=sort_array(o->QueryProp(P_KNOWN_POTIONROOMS),#'>);
+ if (sizeof(potions))
+ {
+ s="";
+ for (nr=0;nr<sizeof(potions);nr++)
+ s+=potions[nr]+", ";
+ write("Bekannte Potionrooms:\n"+
+ break_string(s[0..<3],78));
+ }
+ else write("Spieler hat keine bekannten Potionrooms.\n");
+ }
+ else
+ write("Kein Spieler mit diesem Namen anwesend.\n");
+ }
+ return 1;
+}
+
+int dump()
+{
+ "/secure/potionmaster"->DumpList();
+ printf("Liste wurde erzeugt.\n");
+ return 1;
+}
+