Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/doc/beispiele/master/opferstock.c b/doc/beispiele/master/opferstock.c
new file mode 100644
index 0000000..048a461
--- /dev/null
+++ b/doc/beispiele/master/opferstock.c
@@ -0,0 +1,142 @@
+#include <defines.h>
+#include <properties.h>
+#include <moving.h>
+//
+// By Rumata@MorgenGrauen 3/99
+//
+// Beispieldatei fuer die Benutzung von Mastern und Klienten.
+//
+// Ich gehe hier nicht auf die "normalen" Funktionen ein.
+
+inherit "/std/thing";
+
+#define OS_MASTER "/doc/beispiele/master/opferstockmaster"
+
+void create()
+{
+ if(IS_BLUE(ME)) return;
+ ::create();
+ SetProp( P_NAME, "Opferstock" );
+ SetProp( P_GENDER, MALE );
+ SetProp( P_VALUE, 1000 + random(2000) );
+ AddId( ({"stock","inschrift","opferstock"}) );
+ SetProp( P_SHORT, "In einer Ecke steht ein Opferstock" );
+ SetProp( P_LONG,
+ "Der Opferstock besteht aus solidem Holz. Vorne auf dem Kasten ist eine\n"
+ + "Inschrift zu sehen, die Du lesen kannst.\n"
+ + "@@contents@@"
+ );
+ SetProp( P_READ_MSG,
+ ">>>>>>>>>>>> Fuer den Aufbau eines Orkwaisenhauses <<<<<<<<<<<<\n"
+ + "In den letzten Jahren wurden immer wieder unschuldige Orkkinder\n"
+ + "durch brutale Abenteurer ihrer Eltern beraubt. Bitte unter-\n"
+ + "stuetzen Sie mit einer kleinen Spende den Aufbau eines Waisen-\n"
+ + "hauses fuer diese bemitleidenswerten Kreaturen.\n"
+ );
+ AddDetail( "holz", "Solide und so gut wie unzerbrechlich.\n" );
+ SetProp( P_NOGET,
+ "Der Opferstock ist nicht ohne Grund am Boden festgenagelt.\n" );
+ AddCmd( "spende","spende" );
+ AddCmd( ({"stecke","steck"}), "stecken" );
+ AddCmd( "oeffne","oeffne" );
+ AddCmd( ({"brich","breche"}),"breche" );
+}
+
+contents()
+{
+ switch(QueryProp(P_VALUE))
+ {
+ case 0:
+ return "Er ist leer.\n";
+ case 1:
+ return "Er enthaelt:\nEine Muenze.\n";
+ default:
+ return "Er enthaelt:\n"+QueryProp(P_VALUE)+" Muenzen.\n";
+ }
+}
+
+stecken( str )
+{
+ string was, worein;
+ if( !str || sscanf(str,"%s in %s",was,worein)!=2 || !id(worein) ) return 0;
+ return spende( str );
+}
+
+spende( str )
+{
+ int anz, newAl;
+ string arg;
+
+ notify_fail( "Wieviele Muenzen willst Du denn spenden?\n" );
+ if( !str || str=="" )
+ return 0;
+ if( sscanf(str,"%d %s",anz,arg)== 2 )
+ str = arg;
+ else
+ {
+ if( str=="eine muenze" || str=="ein goldstueck" )
+ {
+ anz = 1;
+ str = "muenze";
+ }
+ else
+ return 0;
+ }
+ if( anz<=0 ||
+ member(({"muenze","goldstueck","muenzen","goldstuecke"}), str)==-1
+ )
+ return 0;
+ if( anz>PL->QueryMoney() )
+ {
+ write( "So viel Geld hast Du nicht.\n" );
+ return 1;
+ }
+ PL->AddMoney(-anz);
+ SetProp(P_VALUE,QueryProp(P_VALUE)+anz);
+
+ // Hier wird der Master aufgerufen, der das Alignment der Spieler
+ // dann aendert.
+ if( OS_MASTER->addAlignment( PL, anz/3 ) > 0 ) {
+ // Eigentlich könnte man hier auch die Meldung ausgeben, aber
+ // der Spieler soll den Unterschied zwischen Alignment geaendert
+ // unt Alignment nicht geaendert sehen koennen.
+ }
+ write( "Du hast wahrhaft das Gefuehl, etwas Gutes getan zu haben.\n" );
+
+ say( capitalize(PL->name(WER))+" spendet "+anz
+ + ((anz==1)?" Muenze.\n":" Muenzen.\n") );
+ return 1;
+}
+
+oeffne( str )
+{
+ int newAl;
+
+ notify_fail( "WAS willst Du oeffnen?\n" );
+ if( !id(str) )
+ return 0;
+ OS_MASTER->addAlignment( PL, -30 );
+ write( "Allein schon der Gedanke....\n" );
+ return 1;
+}
+
+breche( str )
+{
+ string arg;
+ notify_fail( "WAS willst Du aufbrechen?\n" );
+ if( !str )
+ return 0;
+ if( sscanf(str,"%s auf",arg)==1 )
+ str = arg;
+ if( !id(str) )
+ return 0;
+ write( "Dein lautes Getoese ruft einen Teufel herbei, der Dich gleich\n"
+ + "mit in die Hoelle nimmt.\n"
+ );
+ say( capitalize(PL->name(WER))+" versucht, den Opferstock aufzubrechen.\n"
+ + "Gleich erscheint ein Teufel, um "+PL->QueryPronoun(WEN)
+ + " in die Hoelle zu reissen.\n" );
+ PL->move("/d/unterwelt/raeume/qualenraum",M_GO,"zur Hoelle","faehrt");
+ OS_MASTER->addAlignment( PL, -200 );
+ return 1;
+}