Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/std/shells/magier.c b/std/shells/magier.c
new file mode 100644
index 0000000..dc2a150
--- /dev/null
+++ b/std/shells/magier.c
@@ -0,0 +1,326 @@
+// MorgenGrauen MUDlib
+//
+// shells/magier.c -- magier shell
+//
+// $Id: magier.c 9231 2015-05-27 21:53:32Z Zesstra $
+
+//
+// Magiershell Basisfile
+//
+// Ueberarbeitung abgeschlossen am 18.12.2002
+//
+// Dank an Zwirch@PK, Rikus@MG, Zoran@PK, Vanion@MG
+// und viele andere, die ich vergessen habe.
+//
+// Fragen und Bughinweise an Mandragon@MG oder einen
+// Erzmagier Deiner Wahl.
+//
+// Zur Shell gehoeren ausser dieser Datei:
+// admin.c:      Administrative Befehle
+// comm.c:       Kommunikationsbefehle
+// fileedit.c:   Befehle zum Veraendern von Dateien
+// fileview.c:   Befehle zum Lesen von Dateien
+// magier_ext.c: Generelle Magierbefehle
+// moving.c:     Bewegungsbefehle
+// objects.c:    Erzeugen und zerstoeren von Objekten
+// parsing.c     Auswertung von Pfadangaben und Wildcards
+// players.c:    Befehle zur Beeinflussung von Spielern
+// todo.c:       Implementation der Todoliste
+// upd.c:        Der Befehl upd
+// magier.h      Generelle Header-Datei
+//
+
+#pragma strict_types,save_types
+
+inherit "/std/player/base";
+inherit "/std/shells/magier/magier_ext";
+
+#include <wizlevels.h>
+#include <moving.h>
+#include <properties.h>
+#include <new_skills.h>
+#include <config.h>
+
+protected void create()
+{
+  if (!clonep() || object_name(this_object()) == __FILE__[0..<3]) {
+      set_next_reset(-1);
+      return;
+  }
+
+  base::create();
+
+  Set(P_RACE, SAVE, F_MODE);
+  Set(P_ZAP_MSG, SAVE, F_MODE);
+  Set(P_TRANK_FINDEN, SAVE, F_MODE);
+  Set(P_HANDS, SAVE, F_MODE);
+  Set(P_RACESTRING, SAVE, F_MODE);
+  SetDefaultHome("/gilden/abenteurer");
+  SetProp(P_ENEMY_DEATH_SEQUENCE,
+    ([17:"Der Tod schuettelt verstaendnislos den Kopf.\n\n",
+      18:"Der Tod sagt: WIESO MUSSTEST DU DICH AUCH UNBEDINGT "
+      "MIT EINEM MAGIER ANLEGEN?\n\n"]));
+  SetProp(P_ATTRIBUTES_OFFSETS,([]));
+  SetProp(P_AVERAGE_SIZE,185);
+  if(!QueryProp(P_DEFAULT_GUILD)) SetProp(P_DEFAULT_GUILD,"abenteurer");
+}
+
+protected void create_super() {
+  set_next_reset(-1);
+}
+
+
+protected void heart_beat()
+{
+  mixed *en;
+
+  if (!QueryProp(P_WANTS_TO_LEARN)||((en=QueryEnemies())&&sizeof(en[0])))
+    base::heart_beat();
+  else if (!CheckTelnetKeepAlive()) {
+    // Wenn der Magier kein Telnet Keep-Alive wuenscht, kann der HB ganz
+    // abgeschaltet werden. Sonst muss er aber weiterlaufen, damit
+    // CheckTelnetKeepAlive() regelmaessig gerufen wird.
+    set_heart_beat(0);
+  }
+}
+
+
+public varargs int remove(int silent)
+{
+  string workroom;
+
+  if (IS_WIZARD(this_object()))
+    workroom = "/players/"+getuid()+"/workroom";
+  else
+    workroom = "/secure/merlin";
+  if( !environment() || object_name(environment()) != workroom )
+    catch(move(workroom, M_GO, "nach Hause"));
+  return base::remove(silent);
+}
+
+public string NotifyDestruct(object caller) {
+
+  if (previous_object() != master()
+      || object_name(this_object()) == __FILE__[..<3])
+    return 0;
+  
+  // Nicht-EMs sollen keine EMs zerstoeren koennen, woraufhin auch evtl.
+  // EM-Tools rumliegen koennten.
+  if ( IS_ARCH(this_object()) && caller != this_object() 
+      && getuid(caller) != ROOTID
+      && (process_call() || !ARCH_SECURITY) )
+    return "Das Zerstoeren von EMs ist ein Fehler. ;-)\n";
+
+  return ::NotifyDestruct(caller);
+}
+
+void reset()
+{
+  if (!interactive(this_object()))
+  {
+    quit();
+    if (this_object())
+      remove();
+    if (this_object())
+        destruct(this_object());
+    return;
+  }
+}
+
+//                ####################
+//################# Query-Funktionen ##################
+//                ####################
+
+varargs int id (string str) {
+  if (QueryProp(P_INVIS) &&
+      (!this_interactive() ||!IS_LEARNER(this_interactive())))
+    return 0;
+  return ::id(str);
+}
+
+
+static string *_query_racestring()
+{
+  if (pointerp(Query(P_RACESTRING)))
+    return Query(P_RACESTRING);
+  else
+    return
+    ({QueryProp(P_RACE),QueryProp(P_RACE),
+      QueryProp(P_RACE),QueryProp(P_RACE)});
+}
+
+
+static string _query_default_guild()
+{
+    return (Query(P_DEFAULT_GUILD)||"abenteurer");
+}
+
+
+static string _query_racedescr()
+{
+  return "Magier koennen einfach alles. Aber manche Magier koennen mehr.\n";
+}
+
+
+static string _query_race()
+{
+  if (previous_object() && previous_object()->query_login_object())
+    return 0;
+
+  return Query(P_RACE) ? Query(P_RACE) : Set(P_RACE, "Magier");
+}
+
+
+static mixed _query_localcmds()
+{
+  return
+    base::_query_localcmds()
+    +magier_ext::_query_localcmds();
+}
+
+
+static void upd_my_age()
+{
+  age=_age+absolute_hb_count()-_hbstop;
+  _age=age;
+  _hbstop=absolute_hb_count();
+  return;
+}
+
+
+static int _query_age()
+{
+  upd_my_age();
+  return age;
+}
+
+static int _set_earmuffs(int level)
+{
+  int maxl=1+query_wiz_level(this_object());
+  maxl = max(maxl,99);
+  return Set(P_EARMUFFS,min(maxl,level));
+}
+
+
+//                   ############################
+//#################### Interne Shell-Funktionen ####################
+//                   ############################
+
+int MayAddWeight(int w) { return 0;}
+int MayAddObject(object ob) { return 1; }
+
+
+static void initialize()
+{
+  magier_ext::initialize();
+  return;
+}
+
+
+static void FinalSetup()
+{
+  SetProp(P_CURRENTDIR,"/players/"+getuid());
+  initialize();
+  if (IS_LEARNER(this_player())) cat("/etc/WIZNEWS");
+  _age=age;
+  _hbstop=absolute_hb_count();
+  return;
+}
+
+
+void save_me(int i)
+{
+  upd_my_age();
+  base::save_me(i);
+  return;
+}
+
+
+varargs void Reconnect(int silent,string my_ip)
+{
+  base::Reconnect(silent,my_ip);
+  magier_ext::reconnect();
+  return;
+}
+
+
+void notify_player_change(string who, int rein, int invis)
+{
+  string *list,name;
+  mixed mlist;
+  int vis_change;
+
+  if (invis) name="("+who+")";
+    else name=who;
+
+  if(query_verb() && (query_verb()=="vis" || query_verb()=="invis"))
+    vis_change=1;
+
+  if (Query(P_INFORMME) && !vis_change)
+  {
+    if (rein) 
+      tell_object(this_object(),
+                  sprintf("%s ist gerade ins "MUDNAME" gekommen.\n",name));
+    else
+      tell_object(this_object(),
+                  sprintf("%s hat gerade das "MUDNAME" verlassen.\n",name));
+  }
+
+  if(Query(P_WAITFOR_FLAGS) & (0x01))return ;
+
+  if (pointerp(list=Query(P_WAITFOR))&&sizeof(list))
+    if (member(list,who)!=-1)
+      delayed_write(
+         ({
+           ({sprintf("%s%s   I S T   J E T Z T   %s !!!\n",
+                     (QueryProp(P_VISUALBELL) ? "" : sprintf("%c",7)),
+                     name,
+                     (vis_change?
+                       (rein?"S I C H T B A R":"U N S I C H T B A R"):
+                       (rein?"D A":"N I C H T   M E H R   D A"))),
+           0})
+         }));
+
+  if (rein && (sizeof(mlist=QueryProp(P_WAITFOR_REASON))) &&
+     (mappingp(mlist)) && (mlist[who]))
+        Show_WaitFor_Reason(who,invis);
+  return;
+}
+
+mixed modify_command(string str) {
+  if (previous_object() &&
+      (previous_object()!=this_object() || process_call()) )
+  {
+    if (IS_ARCH(this_object()))
+      tell_object(this_object(),
+        sprintf("Illegal modify_command(%s) from %O\n",
+        str, previous_object()));
+    return 0;
+  }
+  //////////////////////////////////////////////////////////////////////
+  // Magier-Escape-Kommandos werden behandelt 
+  if (str=="\\ESCAPE" && IS_LORD(this_object()))
+  {
+    __set_environment(this_object(),"/room/void");
+    environment()->init();
+    printf("You escaped.\n");
+    return "";
+  }
+  if (str[0..2]=="\\\\\\" && IS_LORD(this_object()))
+  {
+    str = _return_args(str);
+    string* input = explode(str[3..]," ");
+    string verb = input[0];
+    if (verb && verb!="")
+    {
+      string cmd = implode(input[1..]," ");
+      if (!__auswerten(cmd,verb))
+        SoulComm(cmd,verb);
+    }
+    return 1;
+  }
+  //////////////////////////////////////////////////////////////////////
+
+  return ::modify_command(str);
+}
+