Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/secure/npcmaster.c b/secure/npcmaster.c
new file mode 100644
index 0000000..33d8bdc
--- /dev/null
+++ b/secure/npcmaster.c
@@ -0,0 +1,124 @@
+// MorgenGrauen MUDlib
+//
+// npcmaster.c - Verwaltung der eindeutigen Nummernvergabe fuer NPCs und
+//               der Stufenpunkte, die sie geben
+//
+// $Id: npcmaster.c 9142 2015-02-04 22:17:29Z Zesstra $
+//
+/*
+ * $Log: npcmaster.c,v $
+ * Revision 1.6  1996/09/18 08:59:49  Wargon
+ * Globale Variablen private gemacht...
+ *
+ * Revision 1.5  1996/04/10 17:48:37  Jof
+ * Dump-Funktion eingebaut, damit man auch was zu lesen hat :)
+ * ,
+ *
+ * Revision 1.4  1996/04/10 14:32:24  Wargon
+ * QueryNPC(): int * -> mixed
+ *
+ * Revision 1.3  1996/04/04 12:33:06  Wargon
+ * QueryNPCbyNumber() gibt jetzt wirklich Nummer und Score zurueck...
+ *
+ * Revision 1.2  1996/03/06 14:34:51  Jof
+ * QueryNPCbyNumber eingebaut, Typos gefixed
+ *
+ * Revision 1.1  1996/03/06 13:45:36  Jof
+ * Initial revision
+ *
+ */
+
+#include "/secure/npcmaster.h"
+#include "/secure/wizlevels.h"
+
+private int lastNum;
+private mapping npcs;
+private nosave mapping by_num;
+
+void make_num(string key) {
+  by_num += ([ npcs[key,NPC_NUMBER] : key; npcs[key,NPC_SCORE] ]);
+}
+
+void create()
+{
+  seteuid(getuid());
+  if (!restore_object(NPCSAVEFILE))
+  {
+    lastNum=0;
+    npcs=m_allocate(0,2);
+  }
+  by_num = m_allocate(0,2);
+  filter_indices(npcs, #'make_num/*'*/);
+}
+
+static int DumpNPCs();
+
+varargs mixed QueryNPC(int score)
+{
+  string key, val;
+  
+  if (!previous_object())
+    return NPC_INVALID_ARG;
+  key=old_explode(object_name(previous_object()),"#")[0];
+  if (val=npcs[key,NPC_NUMBER])
+    return ({val,npcs[key,NPC_SCORE]});
+  if (score<=0 || member(inherit_list(previous_object()),"/std/living/life.c") < 0)
+    return NPC_INVALID_ARG;
+  npcs[key,NPC_SCORE]=score;
+  npcs[key,NPC_NUMBER]=++lastNum;
+  by_num += ([lastNum:key;score]);
+   save_object(NPCSAVEFILE);
+  call_out("DumpNPCs",0);
+  return ({lastNum,score});
+}
+
+int SetScore(string key,int score)
+{
+  if (!IS_ARCH(this_interactive())||!IS_ARCH(geteuid(previous_object())))
+    return NPC_NO_PERMISSION;
+  if (!npcs[key,NPC_NUMBER])
+    return NPC_INVALID_ARG;
+  npcs[key,NPC_SCORE]=score;
+  by_num += ([npcs[key,NPC_NUMBER]:key;score]);
+  save_object(NPCSAVEFILE);
+  DumpNPCs();
+  return 1;
+}
+
+static int DumpNPCs()
+{
+  mixed *keys;
+  int i, max;
+
+  keys=m_indices(npcs);
+  rm(NPCDUMPFILE);
+  for (i=sizeof(keys)-1, max=0;i>=0;i--) {
+    write_file(NPCDUMPFILE,sprintf("%5d %4d %s\n",npcs[keys[i],NPC_NUMBER],
+	   npcs[keys[i],NPC_SCORE],keys[i]));
+    max += npcs[keys[i],NPC_SCORE];
+  } 
+  write_file(NPCDUMPFILE,sprintf("====================\nGesamt: %d Punkte\n",max)); 
+  return 1;
+}
+
+mixed *QueryNPCbyNumber(int num)
+{
+  if (by_num[num])
+    return ({num,by_num[num,NPC_SCORE],by_num[num,NPC_NUMBER]});
+
+  return 0;
+}
+
+int Recalculate(string s)
+{
+  int i, j;
+
+  if (!s || !sizeof(s))
+    return 0;
+
+  for (j=0, i=6*sizeof(s)-1; i>0; i--) {
+    if (test_bit(s,i))
+      j+=by_num[i,NPC_SCORE];
+  }
+  return j;
+}