Initial commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c75dc7c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+logs/*
diff --git a/CHANGELOG b/CHANGELOG
new file mode 100644
index 0000000..a6e2b8c
--- /dev/null
+++ b/CHANGELOG
@@ -0,0 +1,8 @@
+- V 0.5 (08.12.2008)
+====================
+* P_HP_HOOKS als unerwuenschte Property hinzugefuegt, da es mit AddHpHook()
+  und RemoveHpHook() ein Interface dafuer gibt.
+* Properties des alten Hooksystems (P_TMP_MOVE_HOOK, P_TMP_DIE_HOOK, 
+  P_TMP_DEFEND_HOOK, P_TMP_ATTACK_HOOK) als unerwuenschte Properties
+  hinzugefuegt, da es ein neues Hooksystem gibt, bei welchem ein Hook nicht
+  direkt mit einem Objekt blockiert ist.
diff --git a/CODEFILES b/CODEFILES
new file mode 100644
index 0000000..e51be59
--- /dev/null
+++ b/CODEFILES
@@ -0,0 +1,90 @@
+./players/notstrom/valgessa/goldstation_neu.c
+./players/notstrom/valgessa/room/gleis_n1.c
+./players/notstrom/valgessa/room/hs6.c
+./players/notstrom/valgessa/room/sitze1b.c
+./players/notstrom/valgessa/room/ph1.c
+./players/notstrom/valgessa/room/bank1.c
+./players/notstrom/valgessa/room/gleise.c
+./players/notstrom/valgessa/room/sw1.c
+./players/notstrom/valgessa/room/gleis_s1.c
+./players/notstrom/valgessa/room/eisdiele.c
+./players/notstrom/valgessa/room/tresor.c
+./players/notstrom/valgessa/room/wuehlmaus.c
+./players/notstrom/valgessa/room/railroad.c
+./players/notstrom/valgessa/room/so1.c
+./players/notstrom/valgessa/room/hoehle.c
+./players/notstrom/valgessa/room/st3.c
+./players/notstrom/valgessa/room/nw2.c
+./players/notstrom/valgessa/room/nw3.c
+./players/notstrom/valgessa/room/hs2.c
+./players/notstrom/valgessa/room/ko.c
+./players/notstrom/valgessa/room/so2.c
+./players/notstrom/valgessa/room/kw.c
+./players/notstrom/valgessa/room/foyer.c
+./players/notstrom/valgessa/room/kelbank1.c
+./players/notstrom/valgessa/room/gleis_n2.c
+./players/notstrom/valgessa/room/gleis_s4.c
+./players/notstrom/valgessa/room/kso.c
+./players/notstrom/valgessa/room/hs8.c
+./players/notstrom/valgessa/room/gleis_s2.c
+./players/notstrom/valgessa/room/projektor.c
+./players/notstrom/valgessa/room/pfad5.c
+./players/notstrom/valgessa/room/n2.c
+./players/notstrom/valgessa/room/gleis_n3.c
+./players/notstrom/valgessa/room/sitze1a.c
+./players/notstrom/valgessa/room/gleis_s3.c
+./players/notstrom/valgessa/room/wand.c
+./players/notstrom/valgessa/room/pfad1b.c
+./players/notstrom/valgessa/room/sw2.c
+./players/notstrom/valgessa/room/sitze1c.c
+./players/notstrom/valgessa/room/workroom.c
+./players/notstrom/valgessa/room/hs5.c
+./players/notstrom/valgessa/room/ph2.c
+./players/notstrom/valgessa/room/sitze2c.c
+./players/notstrom/valgessa/room/station.c
+./players/notstrom/valgessa/room/hs1.c
+./players/notstrom/valgessa/room/hs7.c
+./players/notstrom/valgessa/room/st1.c
+./players/notstrom/valgessa/room/ks.c
+./players/notstrom/valgessa/room/n1.c
+./players/notstrom/valgessa/room/hlywd.c
+./players/notstrom/valgessa/room/nw1.c
+./players/notstrom/valgessa/room/pfad3.c
+./players/notstrom/valgessa/room/pfad1.c
+./players/notstrom/valgessa/room/gleis_n4.c
+./players/notstrom/valgessa/room/sw3.c
+./players/notstrom/valgessa/room/phb.c
+./players/notstrom/valgessa/room/sitze2a.c
+./players/notstrom/valgessa/room/pfad6.c
+./players/notstrom/valgessa/room/pfad2.c
+./players/notstrom/valgessa/room/hs4.c
+./players/notstrom/valgessa/room/sitze2b.c
+./players/notstrom/valgessa/room/testraum.c
+./players/notstrom/valgessa/room/ksw.c
+./players/notstrom/valgessa/room/st2.c
+./players/notstrom/valgessa/room/hs3.c
+./players/notstrom/valgessa/room/pfad4.c
+./players/notstrom/valgessa/room/zelt.c
+./players/notstrom/valgessa/mon/oldman.c
+./players/notstrom/valgessa/mon/vorfuehrer.c
+./players/notstrom/valgessa/mon/schlange.c
+./players/notstrom/valgessa/mon/hyaene2.c
+./players/notstrom/valgessa/mon/hyaene1.c
+./players/notstrom/valgessa/mon/manticora.c
+./players/notstrom/valgessa/mon/skorpion.c
+./players/notstrom/valgessa/obj/sekundenkleber.c
+./players/notstrom/valgessa/obj/numbers.c
+./players/notstrom/valgessa/obj/deskugel.c
+./players/notstrom/valgessa/obj/whisky.c
+./players/notstrom/valgessa/obj/eistruhe.c
+./players/notstrom/valgessa/obj/eiswuerfel.c
+./players/notstrom/valgessa/obj/schliessfach.c
+./players/notstrom/valgessa/obj/hand.c
+./players/notstrom/valgessa/obj/eisport.c
+./players/notstrom/valgessa/obj/glaskugel.c
+./players/notstrom/valgessa/obj/goldzahn.c
+./players/notstrom/valgessa/obj/truhe3_1.c
+./players/notstrom/valgessa/obj/kristallglas.c
+./players/notstrom/valgessa/obj/eiseimer.c
+./players/notstrom/valgessa/obj/nugget.c
+./players/notstrom/valgessa/obj/filmrolle.c
diff --git a/HEADERFILES b/HEADERFILES
new file mode 100644
index 0000000..018bc51
--- /dev/null
+++ b/HEADERFILES
@@ -0,0 +1,2 @@
+./players/notstrom/valgessa/files.h
+./players/notstrom/valgessa/defs.h
diff --git a/LPCFILES b/LPCFILES
new file mode 100644
index 0000000..ac87f40
--- /dev/null
+++ b/LPCFILES
@@ -0,0 +1,92 @@
+./players/notstrom/valgessa/goldstation_neu.c
+./players/notstrom/valgessa/room/gleis_n1.c
+./players/notstrom/valgessa/room/hs6.c
+./players/notstrom/valgessa/room/sitze1b.c
+./players/notstrom/valgessa/room/ph1.c
+./players/notstrom/valgessa/room/bank1.c
+./players/notstrom/valgessa/room/gleise.c
+./players/notstrom/valgessa/room/sw1.c
+./players/notstrom/valgessa/room/gleis_s1.c
+./players/notstrom/valgessa/room/eisdiele.c
+./players/notstrom/valgessa/room/tresor.c
+./players/notstrom/valgessa/room/wuehlmaus.c
+./players/notstrom/valgessa/room/railroad.c
+./players/notstrom/valgessa/room/so1.c
+./players/notstrom/valgessa/room/hoehle.c
+./players/notstrom/valgessa/room/st3.c
+./players/notstrom/valgessa/room/nw2.c
+./players/notstrom/valgessa/room/nw3.c
+./players/notstrom/valgessa/room/hs2.c
+./players/notstrom/valgessa/room/ko.c
+./players/notstrom/valgessa/room/so2.c
+./players/notstrom/valgessa/room/kw.c
+./players/notstrom/valgessa/room/foyer.c
+./players/notstrom/valgessa/room/kelbank1.c
+./players/notstrom/valgessa/room/gleis_n2.c
+./players/notstrom/valgessa/room/gleis_s4.c
+./players/notstrom/valgessa/room/kso.c
+./players/notstrom/valgessa/room/hs8.c
+./players/notstrom/valgessa/room/gleis_s2.c
+./players/notstrom/valgessa/room/projektor.c
+./players/notstrom/valgessa/room/pfad5.c
+./players/notstrom/valgessa/room/n2.c
+./players/notstrom/valgessa/room/gleis_n3.c
+./players/notstrom/valgessa/room/sitze1a.c
+./players/notstrom/valgessa/room/gleis_s3.c
+./players/notstrom/valgessa/room/wand.c
+./players/notstrom/valgessa/room/pfad1b.c
+./players/notstrom/valgessa/room/sw2.c
+./players/notstrom/valgessa/room/sitze1c.c
+./players/notstrom/valgessa/room/workroom.c
+./players/notstrom/valgessa/room/hs5.c
+./players/notstrom/valgessa/room/ph2.c
+./players/notstrom/valgessa/room/sitze2c.c
+./players/notstrom/valgessa/room/station.c
+./players/notstrom/valgessa/room/hs1.c
+./players/notstrom/valgessa/room/hs7.c
+./players/notstrom/valgessa/room/st1.c
+./players/notstrom/valgessa/room/ks.c
+./players/notstrom/valgessa/room/n1.c
+./players/notstrom/valgessa/room/hlywd.c
+./players/notstrom/valgessa/room/nw1.c
+./players/notstrom/valgessa/room/pfad3.c
+./players/notstrom/valgessa/room/pfad1.c
+./players/notstrom/valgessa/room/gleis_n4.c
+./players/notstrom/valgessa/room/sw3.c
+./players/notstrom/valgessa/room/phb.c
+./players/notstrom/valgessa/room/sitze2a.c
+./players/notstrom/valgessa/room/pfad6.c
+./players/notstrom/valgessa/room/pfad2.c
+./players/notstrom/valgessa/room/hs4.c
+./players/notstrom/valgessa/room/sitze2b.c
+./players/notstrom/valgessa/room/testraum.c
+./players/notstrom/valgessa/room/ksw.c
+./players/notstrom/valgessa/room/st2.c
+./players/notstrom/valgessa/room/hs3.c
+./players/notstrom/valgessa/room/pfad4.c
+./players/notstrom/valgessa/room/zelt.c
+./players/notstrom/valgessa/mon/oldman.c
+./players/notstrom/valgessa/mon/vorfuehrer.c
+./players/notstrom/valgessa/mon/schlange.c
+./players/notstrom/valgessa/mon/hyaene2.c
+./players/notstrom/valgessa/mon/hyaene1.c
+./players/notstrom/valgessa/mon/manticora.c
+./players/notstrom/valgessa/mon/skorpion.c
+./players/notstrom/valgessa/obj/sekundenkleber.c
+./players/notstrom/valgessa/obj/numbers.c
+./players/notstrom/valgessa/obj/deskugel.c
+./players/notstrom/valgessa/obj/whisky.c
+./players/notstrom/valgessa/obj/eistruhe.c
+./players/notstrom/valgessa/obj/eiswuerfel.c
+./players/notstrom/valgessa/obj/schliessfach.c
+./players/notstrom/valgessa/obj/hand.c
+./players/notstrom/valgessa/obj/eisport.c
+./players/notstrom/valgessa/obj/glaskugel.c
+./players/notstrom/valgessa/obj/goldzahn.c
+./players/notstrom/valgessa/obj/truhe3_1.c
+./players/notstrom/valgessa/obj/kristallglas.c
+./players/notstrom/valgessa/obj/eiseimer.c
+./players/notstrom/valgessa/obj/nugget.c
+./players/notstrom/valgessa/obj/filmrolle.c
+./players/notstrom/valgessa/files.h
+./players/notstrom/valgessa/defs.h
diff --git a/README.md b/README.md
index b3abf02..5e40bb5 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,200 @@
-# static-lpc-check
-Performs some static check for common LPC coding problems in Morgengrauen
+Dieses Script prueft Regionscode auf eine Reihe von Fehlern bzw. zeigt
+Funktionen und Properties an, denen man bei der Abnahme besonderes Augenmerk
+schenken sollte.
+
+Im dem Script 'check' muss vor Benutzung  die Variable MUDLIB auf das
+Verzeichnis der Mudlib gesetzt werden.
+Anschliessend erfolg die Benutzung durch Aufruf von 'check':
+  ./check <region> <logfile>
+
+Die Ausgabe des Scriptes erfolgt primaer in Logdateien, die in logs/ abgelegt
+werden. Hierbei werden momentan 4 Stufen unterschieden:
+* Aenderung noetig (<logfile>.change_required)
+* Bitte pruefen (<logfile>.please_check)
+* Formatierung (<logfile>.formatting)
+* Kosmetik (<logfile>.cosmetics)
+
+Die Wichtigkeit und Relevanz dieser Punkte muss der RM in letzter Konsequenz
+ggf. selber entscheiden. Hierzu sollten der allgemeine Regionsleitfaden, die
+jeweiligen Regionsanforderungen und ggf. die Manpages 'goodstyle' und
+'effizienz' beachtet werden.
+
+Aenderungen noetig:
+------------------
+* Pfade in /players/
+  Pfade in /players/ duerfen von angeschlossenen Gebieten nicht benutzt
+  werden, da der betreffene RM den Code selber nicht warten kann.
+* Lambdas
+  Lambdas werden in der Regel nicht mehr angeschlossen, weil sie schwer
+  lesbar sind. Alternativen sind z.B. inlines closures.
+* Objekte ohne strong_types oder strict_types
+  Die striktere Typpruefung hilft dem Programmierer bereits bei der Ent-
+  wicklung und vor Anschluss eine Menge Fehler zu finden. Daher sollte eins
+  von beiden Pragmas in neuem Code immer benutzt werden.
+* veraltete Efuns, Lfuns und Properties
+  Es gibt eine ganze Reihe von alten Funktionen und Properties, die aus dem
+  Driver oder der Mudlib entfernt wurden oder in absehbarer Zeit entfernt
+  werden. Diese duerfen in neuem Code keinesfalls verwendet werden.
+* unerwuenschte Lfuns, Efuns, Properties und Events
+  Es gibt einige Properties und Events, die in normalen Regionscode nicht
+  verwendet werden sollten, z.B. weil sie ausschliesslich durch die Mudlib
+  benutzt werden (Eventnamen) oder weil ihre interne Datenstruktur komplex ist
+  und die Mudlib ein Interface dafuer bereitstellt. Ein weiteres Beispiel ist
+  die Verwendung von do_damage(), in aller Regel sollte stattdessen Defend()
+  genutzt werden.
+* alte Hooks
+  Die alten Hooks, welche ueber eine Prop gesetzt werden, wurden durch ein
+  neues Hooksystem abgeloest, bei dem es mehr als nur ein Objekt pro Hook
+  geben kann. s. Manpage std/hooks.
+* Umlaute
+  Umlaute haben im Mud bisher nix zu suchen. ;-)
+* Clonen von /std/thing
+  Mit Ausnahme von /std/corpse sollte aus /std/ nichts geclont und manuell
+  konfiguriert werden, da die Zuordnung von Objekten wie /std/thing in
+  Spielerinventaren schwierig ist und Typos/Bugs/Ideen nicht beim richtigen
+  Magier ankommen.
+* ueberschriebenes move()
+  Beim Ueberschreiben von move() kommt es haeufig zu Fehlern. Heutzutage
+  sollten stattdessen PreventMove() und NotifyMove() ueberschrieben werden.
+* PreventMove()/NotifyMove() ohne die geerbten Funktionen aufzurufen
+  Diese beiden Funktionen _muessen zwingend_ ihre geerbten Varianten per
+  :: aufrufen!
+* call_other(x, "???")
+  Zum Laden von Objekten soll load_object() benutzt werden.
+* Obsolete Variante von Inline Closures: (: :)
+  Diese Syntax dient im Driver nur der MudOS-Kompatibilitaet. Bitte nicht
+  in neuen Gebieten benutzen.
+* process_string(): @@*@@
+  process_string() ist ein altes Relikt und kann Sicherheitsprobleme
+  verursachen. Dank Querymethoden sollte die Verwendung unnoetig sein.
+
+Bitte pruefen (please check)
+----------------------------
+* Header (*.h) mit #pragmas...
+  Pragmas in Headern wirken sich auf alle inkludierenden Objekte aus. Eine
+  Reihe von Headern kann auch woanders verwendet werden. Es muss genau
+  geprueft werden, ob die betreffenden Header u.U. woanders genutzt werden
+  (koennten). Wenn ja, sollte man dort keine Pragmas setzen um nicht anderer
+  Magier Pragmas zu ueberschreiben.
+* Efuns, Lfuns, Properties etc. deren Verwendung der RM pruefen sollte
+  Manche Funktionen werden gerne so benutzt, dass es buggt. Daher sollt der RM
+  bei diesen besonders gruendlich schauen, ob sie korrekt verwendet werden.
+  Z.B. clone_object(). Nach dieser Funktion muss sichergestellt werden, dass
+  das geclonte Objekte entweder erfolgreich bewegt oder wieder zerstoert wird.
+* Verwendung von 'static'
+  static kann weitgehend als veraltet gelten. Im Falle von Variablen sollte
+  man das eingaengigere 'nosave' benutzen, bei Funktionen 'protected'.
+  Eine der wenigen Ausnahmen sind momentan hart-kodierte Query- und
+  Setmethoden _set_propstring() und _query_propstring(), die muessen momentan
+  noch 'static' sein. (Bitte hierzu auch die Manpage 'modifier' beachten!)
+
+Formatierung (formatting)
+-------------------------
+* Tabulatoren
+  Das Einruecken per Tabulatoren sollte man eher lassen. Falls jemand den Code
+  mal im Mud lesen muss, wird bei einem Tab immer um 8 Zeichen eingerueckt und
+  im Ergebnis ist so eingerueckter Code praktisch nicht mehr zu lesen, weil
+  die Zeilen viel zu lang werden.
+* Zeilen laenger als 78.
+  Siehe Tabulatoren, manchmal muss man Code einfach auch im Mud lesen koennen.
+  Ausserdem sind ueberlange Zeilen fuer die Augen eh anstrengend.
+
+Kosmetik (cosmetics)
+--------------------
+* Kleingeschriebenes Du/Dir/Dich.
+  Auch wenn es nach neuer dt. Rechtschreibung nicht mehr grossgeschrieben
+  werden muss, wird es im Mud meistens noch so gemacht. Hier sollte der RM auf
+  Konsistenz in seinen Gebieten achten.
+
+
+
+Anhang
+======
+Bei einigen unerwuenschten Dingen soll kurz erlaeutert werden, warum sie das
+sind.
+
+Lfuns:
+* command_me(): 
+  In aller Regel sollte die Efun command() benutzt werden, speziell wenn das
+  Lebewesen selber ein Kommando ausfuehrt. command_me() ist nur notwendig,
+  wenn ein anderes Lebewesen 'static' Kommandos ausfuehren soll.
+* _query_ac() / _set_ac(): 
+  Die Benutzung dieser Funktionen kann zu _extremen_ Inkonsistenzen und
+  beliebig hohen P_AC bei Reparaturen fuehren. Extreme Vorsicht bitte!
+* _query_item_damaged() / _set_item_damaged():
+  S.o. Soll ein Item nicht beschaedigt werden koennen, ist eine geeignete
+  Funktion Damage() zu benutzen!
+* _item_damaged():
+  Zur Kontrolle, ob ein Item beschaedigt werden kann, sollte Damage() benutzt
+  werden.
+* SpellDefend():
+  Das Abhaengen von Gildenfaehigkeiten sollte nur in Ausnahmefaellen erfolgen
+  und nicht durch die Bank. RMs sollten darauf achten.
+* NoParaObjects():
+  Diese Lfun ist obsolet. Bitte P_PARA nutzen.
+  
+Props:
+* P_EXTRA_LOOK
+  Ist veraltet. S. AddExtraLook(), RemoveExtraLook()
+* P_RESISTANCE
+  Ist veraltet. S. P_RESISTANCE_STRENGTHS
+* P_DAMAGED
+  Die direkte Manipulation dieser Prop sollte nicht stattfinden! Beschaedigen
+  oder Reparieren darf ausschliesslich via Damage() erfolgen.
+* P_NOMAGIC
+  Magier abzuhaengen bzw. zu erschweren sollte nicht wahllos erfolgen. Die
+  Benutzung dieser Prop sollten RMs also speziell im Auge behalten.
+* P_TMP_*
+  Die verschiedenen Hooks, die ueber das Setzen der P_TMP_* Properties
+  aktiviert werden, sollten kontrolliert verwendet. Einerseits, weil sie sehr
+  maechtig sind (die Benutzung muss oft die Balance genehmigen), andererseits
+  weil man hierbei leicht Fehler machen kann und zu guter Letzt, weil immer
+  nur ein Objekt einen solchen Hook belegen darf. Daher ist darauf zu achten,
+  dass die Hooks nicht laenger als noetig belegt werden und dass man nicht
+  anderer Objekte Hooks ueberschreibt!
+* P_RESISTANCE_STRENGTHS
+  Resistenzen in fremden Objekten sollte nie ueber die Manipulation dieser
+  Prop veraendert werden. Stattdessen immer AddResistanceModifier() benutzen!
+* P_PREVENT_PILE
+  Das Verhindern der Kramhaufen, die aus Leichen entstehen, sollte nur im
+  Ausnahmefall in Lagerraeumen geschehen, aus denen z.B. Spieler ihren Kram
+  "herausangeln" koennen.
+* P_SKILL_ATTRIBUTES
+  Die Datenstruktur dieser Prop ist komplex. Bitte auf gar keinen Fall ueber
+  die Prop direkt zugreifen, sondern immer die Funktionen der Mudlib dafuer
+  benutzen!
+
+Events:
+* Eventnamen, die mit evt_lib_ oder evt_guild_ beginnen
+  Diese Events duerfen ausschliessliche durch die Lib oder Gilden verwendet
+  werden!
+
+Efuns:
+* clone_object()
+  Nach dieser Funktion muss geprueft werden, ob das Objekt in ein anderes
+  Objekt bewegt wurde. Ansonsten ist es zu zerstoeren.
+* write_file()
+  Diese Funktion wird desoefteren zum Loggen verwendet. Hierzu ist die in
+  aller Regel denkbar ungeeignet: Zum einen werden Logfiles hiermit staendig
+  groesser und muellen die Platte voll und zum anderen liegen sie damit
+  meistens nicht in /log/ (wo sie hingehoeren!). Bitte log_file() verwenden!
+* shout()
+  Diese Funktion bruellt ggf. durch das ganze Mud. RMs sollten genau pruefen,
+  ob das notwendig ist oder das Gebruelle auf bestimmte Regionen/Gebiete
+  beschraenkt werden kann.
+* enable_commands() / disable_commands()
+  Diese Efuns sind nur in seltenen Ausnahmefaellen noetig und sinnvoll.
+  Speziell in NPC sind sie _nicht_ noetig.
+
+Dank an
+=======
+Arathorn, Chagall, Ennox, Vanion fuer das Beisteuern von zu pruefenden
+Punkten.
+Besonderen Dank an Chagall fuer das Ueberarbeiten der ersten
+Quick&Dirty-Version des Scripts.
+(hab ich wen vergessen? -> bitte melden)
+
+
+Ich hoffe, dass euch dieses Tool bei der Abnahme von Gebieten das Leben etwas
+erleichtert. Wenn euch etwas unklar ist, sprecht mich (Zesstra) bitte einfach an.
+
diff --git a/bad_efun.list b/bad_efun.list
new file mode 100644
index 0000000..a2651d7
--- /dev/null
+++ b/bad_efun.list
@@ -0,0 +1,23 @@
+allocate_mapping
+copy_mapping
+creator
+efun308
+file_name
+extract
+filter_array
+filter_mapping
+is_clone
+m_sizeof
+m_width
+map_array
+map_mapping
+mapping_contains
+member_array
+slice_array
+strlen
+file_date
+exclude_array
+@@.*@@
+enable_commands
+disable_commands
+efun:::*
diff --git a/bad_events.list b/bad_events.list
new file mode 100644
index 0000000..e9cefea
--- /dev/null
+++ b/bad_events.list
@@ -0,0 +1,2 @@
+evt_lib_
+evt_guild_
diff --git a/bad_lfun.list b/bad_lfun.list
new file mode 100644
index 0000000..e60baa9
--- /dev/null
+++ b/bad_lfun.list
@@ -0,0 +1,11 @@
+TestAttributeLock
+command_me
+_query_ac
+_set_ac
+_query_item_damaged
+_set_item_damaged
+NoParaObjects
+catch_msg
+catch_tell
+AddInsertHook
+RemoveInsertHook
diff --git a/bad_prop.list b/bad_prop.list
new file mode 100644
index 0000000..3d4833c
--- /dev/null
+++ b/bad_prop.list
@@ -0,0 +1,11 @@
+P_DEFAULT_INFO
+P_EXTRA_LOOK
+P_RESISTANCE[^[:alpha:]_]
+P_VULNERABILITY
+P_ARMOURS
+P_TMP_MOVE_HOOK
+P_TMP_DIE_HOOK
+P_TMP_DEFEND_HOOK
+P_TMP_ATTACK_HOOK
+P_HP_HOOKS
+\ndefault
diff --git a/check b/check
new file mode 100755
index 0000000..abfe353
--- /dev/null
+++ b/check
@@ -0,0 +1,268 @@
+#!/bin/bash
+
+export CHECKERHOME=`pwd`
+export CODEFILES="${CHECKERHOME}/CODEFILES"
+export HEADERFILES="${CHECKERHOME}/HEADERFILES"
+#export LPCFILES="${HEADERFILES} ${CODEFILES}"
+export LPCFILES="${CHECKERHOME}/LPCFILES"
+export MUDLIB="/home/mud/mudlib"
+export LOGS="${CHECKERHOME}/logs"
+
+LEVEL1="change_required"
+LEVEL2="formatting"
+LEVEL5="please_check"
+LEVEL10="cosmetics"
+
+echo -ne "LPC-Source Checker V0.3 (2008-01-09)\n\n"
+
+usage() {
+    echo -ne "usage: ./check <region> <logfile>\n"
+    exit
+}
+
+# Parameter pruefen, ansonsten usage ausgeben
+if [ -z ${1} ] || [ -z ${2} ]
+then
+	usage
+fi
+
+# gucken ob das Logverzeichnis da ist, wenn nein, dann anlegen
+if [ ! -d ${LOGS} ]
+then
+	mkdir -p ${LOGS}
+fi
+
+# rudimentaerer check ob die Mudlib da liegt, wo ${MUDLIB} hinzeigt
+if [ ! -d ${MUDLIB} ]
+then
+	echo -ne "No mudlib found in ${MUDLIB}\n"
+	exit
+fi
+
+# alten Kram entsorgen
+if [ -f ${CODEFILES} ]
+then
+	rm ${CODEFILES}
+fi
+
+if [ -f ${HEADERFILES} ]
+then
+	rm ${HEADERFILES}
+fi
+
+if [ -f ${LPCFILES} ]
+then
+	rm ${LPCFILES}
+fi
+
+echo -ne "Checking the MorgenGrauen Mudlib in ${MUDLIB}\n"
+echo -ne "Checking in ${1} (${MUDLIB}${1})\n"
+
+cd ${MUDLIB}
+
+# Dateiliste erstellen
+echo -ne "Creating file list...\n"
+
+find ./${1} -type f -name "*.c" -print > ${CODEFILES}
+find ./${1} -type f -name "*.h" -print > ${HEADERFILES}
+
+# irgendwie unschoen
+cat ${CODEFILES} ${HEADERFILES} > ${LPCFILES}
+
+# eigentlich haette man das alles in einem abfackeln koennen, aber dann gaebe
+# es keine Ueberschriften ueber den einzelnen Punkten
+
+# LEVEL 1 CHECKS (change required)
+
+# Umlaute
+echo -ne "\n\nPruefe auf Umlaute...\n" | tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep -Hn '[üöäÜÖÄß]' $line | cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL1}
+done < ${LPCFILES}
+
+# lambda()
+echo -ne "\n\nPruefe auf lambda()...\n" | tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep -Hn 'lambda(' $line| cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL1}
+done < ${LPCFILES}
+
+# Pfade in /players/
+echo -ne "\n\nPruefe auf Pfade in /players/...\n" | tee -a ${LOGS}/${2}.${LEVEL1} 
+while read line
+do
+	grep -Hn '/players/' $line| cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL1} 
+done < ${LPCFILES}
+
+# fehlende #pragma strong_types/strict_types
+echo -ne "\n\nFiles ohne #pragma strong_types oder strict_types...\n" | tee -a ${LOGS}/${2}.${LEVEL1} 
+while read line
+do
+	grep -L '#pragma.\(strong\|strict\)_types' $line | sort \
+		>> ${LOGS}/${2}.${LEVEL1} 
+done < ${CODEFILES}
+
+# direkte Verwendung von do_damage()
+echo -ne "\n\nPruefe auf direkte Verwendung von do_damage()...\n" |\
+	     tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep -Hn 'do_damage(' $line | cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL1}
+done < ${LPCFILES}
+
+# Unerwuenschte oder obsolete lfuns
+echo -ne "\n\nPruefe auf unerwuenschte oder obsolete lfuns...\n" |\
+	tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep -Hn -f ${CHECKERHOME}/bad_lfun.list $line >> ${LOGS}/${2}.${LEVEL1}
+done < ${LPCFILES}
+
+# Unerwuenschte oder obsolete efuns
+echo -ne "\n\nPruefe auf unerwuenschte oder obsolete efuns...\n" |\
+	tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep -Hn -f ${CHECKERHOME}/bad_efun.list $line >> ${LOGS}/${2}.${LEVEL1}
+done < ${LPCFILES}
+
+# Unerwuenschte oder obsolete Properties
+echo -ne "\n\nPruefe auf unerwuenschte oder obsolete Properties...\n" |\
+	tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep -Hn -f ${CHECKERHOME}/bad_prop.list $line >> ${LOGS}/${2}.${LEVEL1}
+done < ${LPCFILES}
+
+# Unerwuenschte Events
+echo -ne "\n\nPruefe auf unerwuenschte Eventnamen...\n" | tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep -Hn -f ${CHECKERHOME}/bad_events.list $line >> ${LOGS}/${2}.${LEVEL1}
+done < ${LPCFILES}
+
+# Keine clones von /std/thing
+echo -ne "\n\nPruefe auf Clones von /std/thing...\n" |\
+	     tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep -Hn 'clone_object(.*/std/thing.*)' $line | cut -d : -f 1-2 \
+	     >> ${LOGS}/${2}.${LEVEL1}
+done < ${LPCFILES}
+
+# ueberschriebenes move()
+echo -ne "\n\nPruefe auf ueberschriebenes move() (deprecated)...\n" |\
+	    tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep -Hn 'int.*move(.*mixed.*int.*)' $line | cut -d : -f 1-2 \
+	     >> ${LOGS}/${2}.${LEVEL1}
+done < ${LPCFILES}
+
+# wird geerbtes PreventMove gerufen?
+echo -ne "\n\nUeberschriebenes PreventMove() ohne geerbetes zu rufen...\n" |\
+	     tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep 'Prevent(.*object.*object.*int)' $line > ${CHECKERHOME}/check.tmp
+	grep -L '::PreventMove(' $line > ${CHECKERHOME}/check.tmp2
+done  < ${LPCFILES}
+# nur Zeilen ausgeben, die nicht im 2. File vorkommen
+grep -v -f ${CHECKERHOME}/check.tmp2 ${CHECKERHOME}/check.tmp | \
+	tee -a ${LOGS}/${2}.${LEVEL1}
+rm ${CHECKERHOME}/check.tmp*
+
+echo -ne "\n\nUeberschriebenes NotifyMove() ohne geerbetes zu rufen...\n" |\
+	     tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep 'NotfiyMove(.*object.*object.*int)' $line > ${CHECKERHOME}/check.tmp
+	grep -L '::NotifyMove(' $line > ${CHECKERHOME}/check.tmp2
+done < ${LPCFILES}
+grep -v -f ${CHECKERHOME}/check.tmp2 ${CHECKERHOME}/check.tmp \
+	>> ${LOGS}/${2}.${LEVEL1}
+rm ${CHECKERHOME}/check.tmp*
+
+# call_other(x, "???") ist obsolet
+echo -ne "\n\nPruefe auf call_other(x, "???") (obsolet)...\n" |\
+	tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep -Hn 'call_other(.*???.*)' $line | cut -d : -f 1-2 \
+	>> ${LOGS}/${2}.${LEVEL1}
+done < ${LPCFILES}
+
+# Alte Syntax der Inline-Closures
+echo -ne "\n\nPruefe auf obsolete Inline-Closures ( (: :) )...\n" | \
+	     tee -a ${LOGS}/${2}.${LEVEL1}
+while read line
+do
+	grep -Hn '(: ' $line | cut -d : -f 1-2 \
+			>> ${LOGS}/${2}.${LEVEL1}
+done < ${LPCFILES}
+
+# LEVEL 2 CHECKS
+# Tabulatoren
+echo -ne "\n\nPruefe auf Tabulatoren...\n" | tee -a ${LOGS}/${2}.${LEVEL2}
+while read line
+do
+	grep -Hn $'\t' $line | cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL2}
+done < ${LPCFILES}
+
+# Zeilen > 78 Zeichen
+echo -ne "\n\nPruefe auf Zeilen > 78 Zeichen...\n" | tee -a ${LOGS}/${2}.${LEVEL2}
+while read line
+do
+	grep -Hn '.\{79,\}' $line| cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL2}
+done < ${LPCFILES}
+
+# LEVEL 5 CHECKS
+# Header mit #pragmas
+echo -ne "\n\nHeader (*.h) mit #pragmas...\n" | tee -a ${LOGS}/${2}.${LEVEL5}
+while read line
+do
+	grep -l '#pragma' $line >> ${LOGS}/${2}.${LEVEL5}
+done < ${HEADERFILES}
+
+# efuns, Verwendung beachten
+echo -ne "\n\nPruefe auf efuns, deren Verwendung beobachtet werden sollte...\n" |\
+	    tee -a ${LOGS}/${2}.${LEVEL5}
+while read line
+do
+	grep -Hn -f ${CHECKERHOME}/warn_efun.list $line \
+	>> ${LOGS}/${2}.${LEVEL5}
+done < ${LPCFILES}
+
+# Properties, Verwendung beachten
+echo -ne "\n\nPruefe auf Properties, deren Verwendung beobachtet werden
+sollte...\n" | tee -a ${LOGS}/${2}.${LEVEL5}
+while read line
+do
+	grep -Hn -f ${CHECKERHOME}/warn_prop.list $line \
+	>> ${LOGS}/${2}.${LEVEL5}
+done < ${LPCFILES}
+	
+# Pruefung auf static -> protected
+echo -ne "\n\nPruefe auf 'static' (-> 'protected')...\n" |\
+	    tee -a ${LOGS}/${2}.${LEVEL5}
+while read line
+do
+	grep -Hn 'static' $line >> ${LOGS}/${2}.${LEVEL5}
+done < ${LPCFILES}
+
+
+# LEVEL 10 CHECKS
+# Alte Rechtschreibung rules
+echo -ne "\n\nKleingeschriebenes Du/Dir/Dich...\n" |\
+	tee -a ${LOGS}/${2}.${LEVEL10}
+while read line
+do
+	grep -Hn ' \(du\|dich\|dir\) ' $line | cut -d : -f 1-2 | sort | \
+	uniq >> ${LOGS}/${2}.${LEVEL10}
+done < ${LPCFILES}
+
+# Pfadnamen bereinigen
+sed -i -e 's#.//#/#g' ${LOGS}/${2}.*
+
+echo -ne "\nCheck finished!\n"
diff --git a/warn_efun.list b/warn_efun.list
new file mode 100644
index 0000000..85f469b
--- /dev/null
+++ b/warn_efun.list
@@ -0,0 +1,3 @@
+clone_object
+write_file
+shout
diff --git a/warn_lfun.list b/warn_lfun.list
new file mode 100644
index 0000000..61f65c7
--- /dev/null
+++ b/warn_lfun.list
@@ -0,0 +1,5 @@
+SpellDefend(
+_item_damaged(
+reduce_food
+reduce_drink
+reduce_alcohol
diff --git a/warn_prop.list b/warn_prop.list
new file mode 100644
index 0000000..f8142c4
--- /dev/null
+++ b/warn_prop.list
@@ -0,0 +1,6 @@
+P_NOMAGIC
+P_TMP_
+P_RESISTANCE_STRENGTHS
+P_PREVENT_PILE
+P_SKILL_ATTRIBUTES
+P_MAX_HANDS