Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/room/welcome/std.c b/room/welcome/std.c
new file mode 100644
index 0000000..eae3cee
--- /dev/null
+++ b/room/welcome/std.c
@@ -0,0 +1,151 @@
+#include <properties.h>
+#include <moving.h>
+#include <defines.h>
+
+inherit "/std/room";
+
+#pragma strong_types
+#pragma rtt_checks
+#pragma no_shadow
+#pragma no_inherit
+#pragma pedantic
+#pragma range_check
+
+#define BS(x) break_string(x, 78, 0, BS_LEAVE_MY_LFS|BS_SINGLE_SPACE)
+#define TUTSTART "/d/anfaenger/arathorn/minitut/room/huette_"
+
+void create() {
+ ::create();
+
+ SetProp(P_LIGHT,1);
+ SetProp(P_LIGHT_TYPE, LT_STARS|LT_MOON);
+ SetProp(P_MAP_RESTRICTIONS, MR_NOUID|MR_NOINFO);
+ SetProp(P_INDOORS,0);
+ SetProp(P_NO_TPORT, NO_TPORT);
+
+ SetProp(P_INT_SHORT, "Irgendwo im Nirgendwo");
+ SetProp(P_INT_LONG, BS(
+ "Du schwebst im Nirgendwo. Sterne umgeben Dich, und Du glaubst "
+ "zu fallen, obwohl Du Dich vollkommen schwerelos fuehlst. Ein hauch"
+ "duenner Schleier aus Staub umfaengt Dich, als Du langsam aber sicher "
+ "Deines Koerpers gewahr wirst."));
+ AddSpecialExit("welt", function int () {
+ if ( PL->QueryGuest() )
+ return PL->move("/gilden/abenteurer", M_GO);
+ else return 0;
+ });
+ Set(P_HIDE_EXITS, function mixed () {
+ return !(PL && PL->QueryGuest());
+ }, F_QUERY_METHOD);
+}
+
+void init() {
+ set_next_reset(300);
+ if ( objectp(PL) )
+ call_out("Sequenz", 0, 0);
+ return ::init();
+}
+
+// Nix resetten, aber Raum entsorgen, wenn kein Spieler drin.
+// Notfalls gibt es auch noch nen cleanup() aus dem Standardraum...
+protected void reset() {
+ if (!sizeof(filter(all_inventory(this_object()), #'query_once_interactive))
+ )
+ remove(1);
+}
+
+//TODO: Delays anpassen bzw. ausklammern, wenn immer =5 ausser am Ende.
+void Sequenz(int count) {
+ int delay;
+
+ if ( !objectp(PL) || environment(PL) != ME )
+ return;
+
+ switch(count) {
+ case 0:
+ tell_object(PL, BS(QueryProp(P_INT_LONG)));
+ delay = 4;
+ break;
+ case 1:
+ tell_object(PL, BS(
+ "\nDu schaust Dich erstaunt um. Du befindest Dich anscheinend im "
+ "Weltall, aber wie bist Du hierhergekommen? Ist das schon das "
+ "MorgenGrauen, oder bist Du wohl erst noch auf dem Weg dorthin?"));
+ delay = 8;
+ break;
+ case 2:
+ tell_object(PL, BS(
+ "\nMit einem Blick auf Deine Umgebung bemerkst Du, dass der Staub, "
+ "der Dich umgibt, sich langsam auf Dich zuzubewegen scheint. "
+ "Du willst neugierig danach greifen, aber es will Dir nicht "
+ "gelingen. Verwundert stellst Du fest, dass Du keine Haende "
+ "besitzt, und bei naeherer Betrachtung wird Dir klar, dass Du "
+ "auch sonst noch ziemlich koerperlos bist! "));
+ delay = 12;
+ break;
+ case 3:
+ tell_object(PL, BS(
+ "\nDas aendert sich aber bald, als der glitzernde Staub allmaehlich "
+ "um Dich herum eine durchscheinende Gestalt zu bilden beginnt, "
+ "die sich zuegig verdichtet."));
+ delay = 8;
+ break;
+ case 4:
+ int g = PL->QueryProp(P_GENDER);
+ string desc = PL->QueryProp(P_RACESTRING)[0];
+ string msg = (g==MALE?"ein richtiger ":"eine richtige ")+desc;
+ tell_object(PL, BS(
+ "\nSchon kurz darauf hat sich ein eleganter Koerper geformt, der "
+ "nun vollkommen Dir gehoert. Dass Du noch nackt bist, stoert Dich "
+ "nicht im geringsten, denn endlich, endlich fuehlst Du Dich "
+ "wie "+msg+"!"));
+ delay = 10;
+ break;
+ case 5:
+ tell_object(PL, BS(
+ "\nDeine Begeisterung ueber Deinen makellosen Koerper wird jaeh "
+ "unterbrochen, als ploetzlich die Sterne verblassen und sich mit "
+ "unfassbarem Tempo von Dir zu entfernen scheinen. Dann wird es "
+ "kurz schwarz um Dich herum und kurz darauf wieder hell."));
+ delay = 8;
+ break;
+ case 6:
+ tell_object(PL, "\n"+break_string(
+ "Herzlich Willkommen! Uebrigens, wenn Du auf der "
+ "Ebene Anfaenger mit anderen reden willst, folgender Tip: Probiere "
+ "mal '-anf Hallo Morgengrauen' (natuerlich ohne die ' mit "
+ "einzugeben) aus.", 78, "Merlin teilt Dir mit: "));
+ delay = 6;
+ break;
+ case 7:
+ if (PL->QueryGuest() ) {
+ PL->move("/gilden/abenteurer", M_GO);
+ return;
+ }
+ else
+ tell_object(PL, "\n"+break_string(
+ "Ich werde Dich jetzt in das Tutorial fuer Anfaenger bewegen, wo "
+ "Du Deine ersten Schritte machen kannst...",
+ 78, "Merlin teilt Dir mit: ")+"\n");
+ delay = 4;
+ break;
+ case 8:
+ PL->move(TUTSTART+getuid(PL), M_GO);
+ return; // call_out nicht wieder anwerfen.
+ }
+ ++count;
+ call_out("Sequenz", delay, count);
+}
+
+// Bei Disconnect Sequenz abbrechen, bei Re-Login wieder starten mit
+// count == 5 d.h. Spieler fliegt also quasi "im Schlaf" weiter...
+void BecomesNetDead(object pl) {
+ while(remove_call_out("Sequenz")!=-1)
+ ;
+}
+
+void BecomesNetAlive(object pl) {
+ if (interactive(pl))
+ call_out("Sequenz", 6, 5);
+}
+