Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/std/lightsource.c b/std/lightsource.c
new file mode 100644
index 0000000..e4b2245
--- /dev/null
+++ b/std/lightsource.c
@@ -0,0 +1,313 @@
+// MorgenGrauen MUDlib
+//
+// lightsource.c -- standard light source
+//
+// $Id: lightsource.c 7806 2011-07-11 20:28:17Z Zesstra $
+
+// std/lightsource.c
+//
+// Original von Miril April '92
+// Neufassung von Sir Dezember '92 ( unter Boings Aegide :)
+// Version : 1.0
+//
+// Bugfixes von Sir Juni '93
+// Version : 1.2
+//
+// Wichtige Funktionen, die man in create() aufrufen sollte :
+//
+// Setzen der Brennstoffmenge :
+// SetProp( P_FUEL, int ) int gibt die Brennzeit in Sekunden an
+//
+// Setzen der Beschreibung wenn Objekt angezuendet( default : "brennend" ) :
+// SetProp( P_LIGHTDESC, string )
+//
+// Legt fest, ob ein Leuchtobjekt nach seinem Abbrennen destructed wird
+// SetProp( P_DO_DESTRUCT, int )
+//
+// Legt fest, wie hell die Fackel leuchtet.
+// SetProp( P_LIGHT, int )
+//
+// Ansonsten sind die Standardfuktionen wie z.B. SetProp( P_GENDER, MALE )
+// aufzurufen
+
+#pragma strict_types
+#pragma save_types
+#pragma no_clone
+#pragma pedantic
+#pragma range_check
+
+inherit "std/thing" ;
+
+#include <properties.h>
+#include <language.h>
+#include <defines.h>
+
+#define TRUE 1
+#define FALSE 0
+#define bool int
+
+#define DFLT_FUEL 20 // 20 Sekunden
+#define DFLT_LIGHTDESC "brennend"
+#define DFLT_LIGHT 2
+
+// So ergibt sich die Moeglichkeit sie wieder auzufuellen
+#define CALL_OUT_TIME 100
+
+#undef DEBUG
+
+// TODO: Private waer langfristig nett...
+nosave int fuel, max_fuel;
+nosave bool lighted ;
+nosave int call_time ;
+
+void create()
+{
+ thing::create() ;
+
+ SetProp( P_NAME, "Lichtquelle" ) ;
+ SetProp( P_SHORT, "Eine Lichtquelle" ) ;
+ SetProp( P_LONG, "Du siehst nichts besonderes.\n" ) ;
+ SetProp( P_GENDER, FEMALE ) ;
+ SetProp( P_FUEL, DFLT_FUEL ) ;
+ SetProp( P_LIGHTDESC, DFLT_LIGHTDESC ) ;
+ SetProp( P_LIGHT, DFLT_LIGHT );
+ SetProp( P_DO_DESTRUCT, TRUE ) ;
+ SetProp( P_VALUE, 5 ) ;
+
+ AddId( ({ "lichtquelle", "\nlichtquelle" }) ) ;
+ AddCmd( ({ "zuende", "zuend" }), "light" );
+ AddCmd( ({ "loesche", "loesch" }), "extinguish" );
+}
+
+void test_remove()
+{ if (QueryProp(P_DO_DESTRUCT)) remove(); }
+
+/*
+ * Lichtquelle anzuenden
+ */
+bool light(string str)
+{
+ string tmp ;
+ object env;
+
+ _notify_fail( "Zuende was an?\n" ) ;
+
+ if( (!str) || (!sscanf( str, "%s an", tmp )) || (!id( tmp )) )
+ return FALSE ;
+
+ if( environment() != PL ) // Player hat es nicht
+ {
+ _notify_fail( "Erstmal musst Du " + name( WEN, 0 ) + " haben.\n" ) ;
+ return FALSE ;
+ }
+
+ if( lighted )
+ {
+ _notify_fail( CAP( name( WER, 1 ) ) + " brennt schon.\n" ) ;
+ return FALSE ;
+ }
+
+ if( fuel <= 0 )
+ {
+ _notify_fail( CAP( name( WER, 1 ) ) + " ist abgebrannt.\n" ) ;
+ test_remove() ;
+ return FALSE ;
+ }
+
+ lighted = TRUE ;
+ env=this_object();
+ while (objectp(env=environment(env)))
+ // Ja. Man ruft die _set_xxx()-Funktionen eigentlich nicht direkt auf.
+ // Aber das Lichtsystem ist schon *so* rechenintensiv und gerade der
+ // P_LAST_CONTENT_CHANGE-Cache wird *so* oft benoetigt, dass es mir
+ // da um jedes bisschen Rechenzeit geht.
+ // Der Zweck heiligt ja bekanntlich die Mittel. ;-)
+ //
+ // Tiamak
+ env->_set_last_content_change();
+ call_time = (fuel < CALL_OUT_TIME)? fuel : CALL_OUT_TIME ;
+ call_out( "out_of_fuel", call_time ) ;
+ if( (int)PL->QueryProp(P_PLAYER_LIGHT) == 1 )
+ write( "Du kannst wieder etwas sehen.\n" ) ;
+ else write( "Ok.\n" ) ;
+ say((string)PL->Name(WER)
+ + " zuendet " + name( WEN, 0 ) + " an.\n" ) ;
+
+ return TRUE ;
+}
+
+bool extinguish(string str)
+{
+ int ti;
+ object env;
+
+ _notify_fail( "Welche Lichtquelle moechtest Du loeschen?\n" ) ;
+
+ if( (!str) || (!id( str )) )
+ return FALSE ;
+
+ if( !lighted )
+ {
+ _notify_fail( CAP( name( WER, 1 ) ) + " brennt gar nicht.\n" ) ;
+ return FALSE ;
+ }
+
+ if( environment() != PL )
+ {
+ _notify_fail( "Erstmal musst Du " + name( WEN, 0 ) + " haben.\n" ) ;
+ return FALSE ;
+ }
+
+ if( ( ti = remove_call_out( "out_of_fuel" ) ) == -1 )
+ ti = 0 ;
+
+ fuel -= (call_time - ti) ;
+ lighted = FALSE ;
+ env=this_object();
+ while (objectp(env=environment(env)))
+ // Ja. Man ruft die _set_xxx()-Funktionen eigentlich nicht direkt auf.
+ // Aber das Lichtsystem ist schon *so* rechenintensiv und gerade der
+ // P_LAST_CONTENT_CHANGE-Cache wird *so* oft benoetigt, dass es mir
+ // da um jedes bisschen Rechenzeit geht.
+ // Der Zweck heiligt ja bekanntlich die Mittel. ;-)
+ //
+ // Tiamak
+ env->_set_last_content_change();
+ if ( this_player()->QueryProp(P_PLAYER_LIGHT) == 0 )
+ {
+ write( "Es wird dunkel.\n" ) ;
+ say((string)PL->Name(WER)
+ + " macht das Licht aus.\n" ) ;
+ }
+ else
+ {
+ write( "Ok.\n" ) ;
+ say((string)PL->Name(WER)
+ + " loescht " + name( WEN, 0 ) + " aus.\n" ) ;
+ }
+
+ if( fuel <= 0 ) test_remove() ;
+ return TRUE ;
+}
+
+bool unlight()
+{
+ int ti;
+ object env;
+
+ if( !lighted )
+ return FALSE ;
+
+ if( ( ti = remove_call_out( "out_of_fuel" ) ) == -1 )
+ ti = 0 ;
+
+ fuel -= (call_time - ti) ;
+ lighted = FALSE ;
+ env=this_object();
+ while (objectp(env=environment(env)))
+ // Kommentar siehe oben ;^)
+ env->_set_last_content_change();
+ if( fuel <= 0 ) test_remove() ;
+ return TRUE ;
+}
+
+void out_of_fuel()
+{
+ int i;
+ object *inv, env;
+
+ fuel -= call_time ;
+
+ if (fuel>0) {
+ call_out( "out_of_fuel", call_time ) ;
+ return ;
+ }
+ lighted=FALSE;
+ env=this_object();
+ while (objectp(env=environment(env)))
+ // Immer noch nicht wirklich sauber. Aber Begruendung siehe oben.
+ env->_set_last_content_change();
+
+ if (environment())
+ {
+ if ( living(environment()) && environment(environment()) )
+ {
+ inv=(users() & all_inventory(environment(environment())))-({ environment() });
+ for (i=sizeof(inv)-1; i>=0; i--)
+ if (inv[i]->QueryProp(P_PLAYER_LIGHT)<=0)
+ tell_object(inv[i], "Es wird dunkel als " + environment()->name(WESSEN) +
+ " " + QueryProp(P_NAME) + " erlischt.\n" ) ;
+ else tell_object(inv[i], CAP( name( WER, 0 ) ) + " erlischt.\n" ) ;
+ if (environment()->QueryProp(P_PLAYER_LIGHT)<=0)
+ tell_object(environment(),
+ CAP( name( WER, 1 ) ) + " erlischt und es wird dunkel.\n" ) ;
+ else tell_object(environment(), CAP( name( WER, 1 ) ) + " erlischt.\n" ) ;
+ }
+ else
+ {
+ inv=(users() & all_inventory(environment()));
+ for (i=sizeof(inv)-1; i>=0; i--)
+ if (inv[i]->QueryProp(P_PLAYER_LIGHT)<=0)
+ tell_object(inv[i], "Es wird dunkel als " + name(WER,1)
+ + " erlischt.\n" ) ;
+ else tell_object(inv[i], CAP( name( WER, 0 ) ) + " erlischt.\n" ) ;
+ }
+ }
+ test_remove() ;
+}
+
+// Brennstoff nachfuellen
+void AddFuel(int f)
+{ fuel += f ; }
+
+// Property - Funktionen
+
+static void _set_lighted(bool l)
+{ lighted = l ; }
+
+bool _query_lighted()
+{ return lighted ; }
+
+static void _set_fuel(int f)
+{
+ if (f>max_fuel) max_fuel=f;
+ fuel = f ;
+}
+
+static int _query_fuel()
+{
+ int tmp;
+
+ if ((tmp=find_call_out("out_of_fuel"))>=0)
+ return fuel-call_time+tmp;
+ else return fuel;
+}
+
+static string _query_lightdesc()
+{
+ string *tmp;
+ int n,i;
+
+ tmp=Query(P_LIGHTDESC);
+ if (!pointerp(tmp)) return (string)tmp;
+ n=sizeof(tmp);
+ i=n*_query_fuel()/max_fuel;
+ if (i>=n) i=n-1;
+ return tmp[i];
+}
+
+static int _query_light()
+{ return (lighted ? Query(P_LIGHT) : 0); }
+
+/*
+ * short() ueberladen
+ */
+string short()
+{
+ string s;
+ string desc;
+
+ if(!(s=QueryProp(P_SHORT)))
+ return 0;
+ return s + ( (lighted)? (" ("+QueryProp( P_LIGHTDESC ) +").\n") : ".\n" );
+}