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;
+}
+