| #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); |
| } |
| |