blob: eae3cee4d2b9ffe9d51b0473009848bf2029c9a3 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001#include <properties.h>
2#include <moving.h>
3#include <defines.h>
4
5inherit "/std/room";
6
7#pragma strong_types
8#pragma rtt_checks
9#pragma no_shadow
10#pragma no_inherit
11#pragma pedantic
12#pragma range_check
13
14#define BS(x) break_string(x, 78, 0, BS_LEAVE_MY_LFS|BS_SINGLE_SPACE)
15#define TUTSTART "/d/anfaenger/arathorn/minitut/room/huette_"
16
17void create() {
18 ::create();
19
20 SetProp(P_LIGHT,1);
21 SetProp(P_LIGHT_TYPE, LT_STARS|LT_MOON);
22 SetProp(P_MAP_RESTRICTIONS, MR_NOUID|MR_NOINFO);
23 SetProp(P_INDOORS,0);
24 SetProp(P_NO_TPORT, NO_TPORT);
25
26 SetProp(P_INT_SHORT, "Irgendwo im Nirgendwo");
27 SetProp(P_INT_LONG, BS(
28 "Du schwebst im Nirgendwo. Sterne umgeben Dich, und Du glaubst "
29 "zu fallen, obwohl Du Dich vollkommen schwerelos fuehlst. Ein hauch"
30 "duenner Schleier aus Staub umfaengt Dich, als Du langsam aber sicher "
31 "Deines Koerpers gewahr wirst."));
32 AddSpecialExit("welt", function int () {
33 if ( PL->QueryGuest() )
34 return PL->move("/gilden/abenteurer", M_GO);
35 else return 0;
36 });
37 Set(P_HIDE_EXITS, function mixed () {
38 return !(PL && PL->QueryGuest());
39 }, F_QUERY_METHOD);
40}
41
42void init() {
43 set_next_reset(300);
44 if ( objectp(PL) )
45 call_out("Sequenz", 0, 0);
46 return ::init();
47}
48
49// Nix resetten, aber Raum entsorgen, wenn kein Spieler drin.
50// Notfalls gibt es auch noch nen cleanup() aus dem Standardraum...
51protected void reset() {
52 if (!sizeof(filter(all_inventory(this_object()), #'query_once_interactive))
53 )
54 remove(1);
55}
56
57//TODO: Delays anpassen bzw. ausklammern, wenn immer =5 ausser am Ende.
58void Sequenz(int count) {
59 int delay;
60
61 if ( !objectp(PL) || environment(PL) != ME )
62 return;
63
64 switch(count) {
65 case 0:
66 tell_object(PL, BS(QueryProp(P_INT_LONG)));
67 delay = 4;
68 break;
69 case 1:
70 tell_object(PL, BS(
71 "\nDu schaust Dich erstaunt um. Du befindest Dich anscheinend im "
72 "Weltall, aber wie bist Du hierhergekommen? Ist das schon das "
73 "MorgenGrauen, oder bist Du wohl erst noch auf dem Weg dorthin?"));
74 delay = 8;
75 break;
76 case 2:
77 tell_object(PL, BS(
78 "\nMit einem Blick auf Deine Umgebung bemerkst Du, dass der Staub, "
79 "der Dich umgibt, sich langsam auf Dich zuzubewegen scheint. "
80 "Du willst neugierig danach greifen, aber es will Dir nicht "
81 "gelingen. Verwundert stellst Du fest, dass Du keine Haende "
82 "besitzt, und bei naeherer Betrachtung wird Dir klar, dass Du "
83 "auch sonst noch ziemlich koerperlos bist! "));
84 delay = 12;
85 break;
86 case 3:
87 tell_object(PL, BS(
88 "\nDas aendert sich aber bald, als der glitzernde Staub allmaehlich "
89 "um Dich herum eine durchscheinende Gestalt zu bilden beginnt, "
90 "die sich zuegig verdichtet."));
91 delay = 8;
92 break;
93 case 4:
94 int g = PL->QueryProp(P_GENDER);
95 string desc = PL->QueryProp(P_RACESTRING)[0];
96 string msg = (g==MALE?"ein richtiger ":"eine richtige ")+desc;
97 tell_object(PL, BS(
98 "\nSchon kurz darauf hat sich ein eleganter Koerper geformt, der "
99 "nun vollkommen Dir gehoert. Dass Du noch nackt bist, stoert Dich "
100 "nicht im geringsten, denn endlich, endlich fuehlst Du Dich "
101 "wie "+msg+"!"));
102 delay = 10;
103 break;
104 case 5:
105 tell_object(PL, BS(
106 "\nDeine Begeisterung ueber Deinen makellosen Koerper wird jaeh "
107 "unterbrochen, als ploetzlich die Sterne verblassen und sich mit "
108 "unfassbarem Tempo von Dir zu entfernen scheinen. Dann wird es "
109 "kurz schwarz um Dich herum und kurz darauf wieder hell."));
110 delay = 8;
111 break;
112 case 6:
113 tell_object(PL, "\n"+break_string(
114 "Herzlich Willkommen! Uebrigens, wenn Du auf der "
115 "Ebene Anfaenger mit anderen reden willst, folgender Tip: Probiere "
116 "mal '-anf Hallo Morgengrauen' (natuerlich ohne die ' mit "
117 "einzugeben) aus.", 78, "Merlin teilt Dir mit: "));
118 delay = 6;
119 break;
120 case 7:
121 if (PL->QueryGuest() ) {
122 PL->move("/gilden/abenteurer", M_GO);
123 return;
124 }
125 else
126 tell_object(PL, "\n"+break_string(
127 "Ich werde Dich jetzt in das Tutorial fuer Anfaenger bewegen, wo "
128 "Du Deine ersten Schritte machen kannst...",
129 78, "Merlin teilt Dir mit: ")+"\n");
130 delay = 4;
131 break;
132 case 8:
133 PL->move(TUTSTART+getuid(PL), M_GO);
134 return; // call_out nicht wieder anwerfen.
135 }
136 ++count;
137 call_out("Sequenz", delay, count);
138}
139
140// Bei Disconnect Sequenz abbrechen, bei Re-Login wieder starten mit
141// count == 5 d.h. Spieler fliegt also quasi "im Schlaf" weiter...
142void BecomesNetDead(object pl) {
143 while(remove_call_out("Sequenz")!=-1)
144 ;
145}
146
147void BecomesNetAlive(object pl) {
148 if (interactive(pl))
149 call_out("Sequenz", 6, 5);
150}
151