#include <properties.h>#include <defines.h>#include <language.h>#include <moving.h>#include "/secure/wizlevels.h"
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | S_PRESAY 1 |
| #define | S_IGNORE 2 |
| #define | messages1 |
| #define | messages2 |
| #define | messages3 |
| #define | messages4 |
Funktionen | |
| static int | _query_restzeit () |
| static string * | _query_ignore () |
| public varargs void | die (int poisondeath, int extern) |
| status | access_check () |
| public void | create () |
| static varargs string | text_time (int sec, int flag) |
| public string | _query_long () |
| public string | _query_short () |
| public int | shut (mixed minutes) |
| static void | SHOUT (string str, int flags) |
| static void | NextStep (int seconds) |
| static void | ArmasShout () |
| public void | catch_tell (string str) |
| public int | remove () |
| public int | do_damage (int dam, object enemy) |
| string | NotifyDestruct (object caller) |
Variablen | |
| inherit std | npc |
| static int | restzeit |
| static string * | ignorierer = ({}) |
| #define messages1 |
({ \
"Wolken ballen sich am Himmel. Es scheint wohl ein Unwetter aufzuziehen. " \
"Du hast ein ungutes Gefuehl in Deiner Haut.", \
"Aus der Ferne hoerst Du ein Donnern ... ob das ein Gewitter ist?", \
"Wolken ziehen schnell vorbei und verdunkeln die Sonne und die Sterne. " \
"Dies scheint keines der normalen Unwetter zu sein, die Du schon erlebt " \
"hast.", \
"Das ferne Rauschen der Baeche und Fluesse wird lauter. Die Wassermassen " \
"scheinen nicht mehr kontrolliert zu fliessen und Du bekommst Angst!", \
"Der Himmel faerbt sich violett. Das Unwetter scheint gewaltiger zu " \
"werden als sonst. Dir laeuft ein Schauer ueber den Ruecken." \
})
| #define messages2 |
({ \
"Die Wolken verdunkeln den Himmel. Es wird ueberall duester in der Welt " \
"und Du kannst kaum noch erkennen, was um Dich herum geschieht.", \
"Ein starker Wind weht durch alle Gegenden und zerrt an allem, was nicht " \
"fest ist. Hoffentlich wird das nicht noch schlimmer.", \
"Regen prasselt ueberall nieder und fuellt die Baeche und Seen, die das " \
"Wasser aber kaum noch halten koennen. Du versucht eine trockene Stelle " \
"zu finden.", \
"Der Himmel ist fast schwarz. Der Regen faellt in einer Menge, als haetten " \
"alle Schleusen der Welt geoeffnet, um sie fuer immer zu ertraenken.", \
"Die Luft scheint zu knistern! Das Ende des Unwetters ist sicher noch nicht "\
"in Sicht. Elektrizitaet entlaedt sich im Himmel zwischen den Wolken. " \
"Was fuer ein Lichtspiel!", \
"Blitz und Donner hallen durch die Welt. Es scheint keine Stelle zu geben, " \
"an der man sicher sein kann." \
})
| #define messages3 |
({ \
"Du siehst, wie die Einwohner der Welt versuchen, sich panisch vor dem " \
"Unwetter zu retten, aber es ist fuer sie zu spaet.", \
"Blitze nie gesehener Gewalt schlagen rund um Dich ein. Feuer flammen auf " \
"und scheinen alles verbrennen zu wollen, was um Dich herum existiert.", \
"Dicke Wolken tuermen sich immer weiter auf und scheinen Dich erdruecken zu "\
"wollen. Sie sind nicht mehr schwarz, sondern blutrot wie das Wasser, was " \
"sie von sich geben.", \
"Die Fluesse und Meere der Welt treten ueber ihre Ufer und zerstoeren alles "\
"Leben. Das Wasser hat sich zu Blut gewandelt! Um Dich herum wird alles " \
"rot!", \
"Der Donner grollt mit roher Gewalt durch die Welt. Die Schallwellen " \
"schlagen mit aller Kraft gegen die Gebirge und scheinen sie reizen zu " \
"wollen. Du kriegst Angst!", \
"Der Regen faerbt sich rot! Das ist kein Wasser mehr, sondern Blut, was da " \
"auf Dich herabregnet. Dir schwinden kurz die Sinne beim Gedanken an das, " \
"was noch kommen mag." \
})
| #define messages4 |
({ \
"Das Blut des Regens scheint Dich fortzuschwemmen. Ueberall ist das Blut " \
"ueber die Ufer getreten und sucht sich seinen toedlichen Weg.", \
"Die Vulkane der Welt brechen aus und die Lava verbrennt alles, was sich " \
"ihr in den Weg stellt. Sie bringt das Blut zum Verdampfen und erfuellt " \
"alles mit ihrer zerstoererischen, grausamen Hitze.", \
"Ploetzlich ist alles mit Feuer und Hitze erfuellt. Die Meere und " \
"Fluesse verdampfen und der Dampf treibt heiss ueber die Welt, um alles " \
"zu verbruehen, was sich nicht schuetzt!", \
"Von ueberall hoerst Du Schreie und Du erkennst panische Angst in den " \
"Augen der Eingeborenen. Elendig verenden sie in der Hitze zwischen Feuer " \
"und Lava. Dir wird uebel.", \
"Um Dich herum siehst Du nur brennende Truemmer. Die Welt scheint vor " \
"ihrem Untergang, denn ueberall oeffnet sich der Boden und spuckt Feuer. " \
"Heisses Magma quillt aus ihm heraus und mischt sich zischend mit dem Blut " \
"der Meere. Es gibt nun sicher kein Entrinnen mehr.", \
"Du kannst Dich kaum noch halten. Erdbeben erschuettern alles um Dich " \
"herum. Ueberall kannst Du nur noch Truemmer erkennen, wo einmal Haeuser " \
"standen. Alles ist erfuellt vom Geruch des Todes!" \
})
| static string* _query_ignore | ( | ) | [static] |
| public string _query_long | ( | ) |
Definiert in Zeile 194 der Datei shut.c.
Benutzt _query_restzeit(), break_string() und text_time().
00195 { 00196 return break_string( "Dies ist Armageddon, der Weltenvernichter. Als Du " 00197 "ihn ansiehst, blickt er auf und fluestert Dir zu: " 00198 "Noch " + text_time(_query_restzeit()) + 00199 " muessen vergehen, ehe ich die Welt vernichte.", 78 ); 00200 }

| static int _query_restzeit | ( | ) | [static] |
Definiert in Zeile 106 der Datei shut.c.
Benutzt restzeit.
Wird benutzt von _query_long().
00106 { return restzeit + find_call_out("NextStep"); }

| public string _query_short | ( | ) |
| status access_check | ( | ) |
Definiert in Zeile 124 der Datei shut.c.
Benutzt ELDER_SECURITY und process_call().
Wird benutzt von create(), ReassignError(), set_lock() und shut().
00124 { 00125 //wer darf rebooten? 00126 00127 //in einem process_string() gar nicht. 00128 if (process_call()) return(0); 00129 00130 //Master darf natuerlich. (->slow_shut_down(), vom Driver bei 00131 //Speicherknappheit gerufen.) 00132 if (previous_object() && 00133 previous_object()==find_object(__MASTER_OBJECT__)) 00134 return(1); 00135 00136 // rebooten duerfen ansonsten nur [W]+ 00137 if ( ELDER_SECURITY) { 00138 return(1); 00139 } 00140 00141 //andere nicht. 00142 return(0); 00143 }


| static void ArmasShout | ( | ) | [static] |
Definiert in Zeile 297 der Datei shut.c.
00298 { 00299 int dauer; 00300 00301 dauer = _query_restzeit(); 00302 call_out( "ArmasShout", 40+random(40) ); 00303 00304 if ( 701 < dauer ) 00305 SHOUT( messages1[ random(sizeof(messages1))], S_IGNORE); 00306 else if ( 501 < dauer ) 00307 SHOUT( messages2[ random(sizeof(messages2))], S_IGNORE); 00308 else if ( 251 < dauer ) 00309 SHOUT( messages3[ random(sizeof(messages3))], S_IGNORE); 00310 else 00311 SHOUT( messages4[ random(sizeof(messages4))], S_IGNORE); 00312 }
| public void catch_tell | ( | string | str | ) |
Definiert in Zeile 315 der Datei shut.c.
00316 { 00317 string who, what; 00318 object ob; 00319 00320 if ( sscanf( str, "%s teilt Dir mit: %s", who, what ) != 2 || 00321 !this_player() ) 00322 return; 00323 00324 // Ein Spieler will fuer dieses Reboot ignoriert werden, oder 00325 // das Ignoriere soll aufgehoben werden. 00326 if (lower_case(what)[0..<2]=="ruhe"){ 00327 if (member(ignorierer, getuid(this_player()))>-1) 00328 { 00329 ignorierer -= ({ getuid(this_player()) }); 00330 tell_object( this_player(), break_string( 00331 "Gut, ich notier's mir. Ab nun hast Du wieder am grossen Showdown " 00332 "teil. Viel Spass dabei.\n", 78, "Armageddon teilt Dir mit: ")); 00333 } else { 00334 ignorierer += ({ getuid(this_player()) }); 00335 tell_object( this_player(), break_string( 00336 "Gut, ich notier's mir. Der Weltuntergang soll Dich beim Spielen " 00337 "nicht weiter stoeren.\n", 78, "Armageddon teilt Dir mit: ")); 00338 } 00339 return; 00340 } 00341 00342 // In den Laden 00343 if ( _query_restzeit() < 600 ){ 00344 this_player()->move( "/d/ebene/room/PortVain/laden", M_TPORT ); 00345 return; 00346 } 00347 00348 tell_object( this_player(), 00349 break_string( "Es ist noch zu frueh! Probier es 10 Minuten " 00350 "vor dem Ende nochmal!\nIn " + 00351 text_time( _query_restzeit(), 1 ) + 00352 " ist es soweit!", 78, 00353 "Armageddon teilt Dir mit: ", 1 ) ); 00354 return; 00355 }
| public void create | ( | ) |
Definiert in Zeile 145 der Datei shut.c.
Benutzt access_check(), AddId(), create(), destruct(), MALE, P_ARTICLE, P_GENDER, P_NAME, P_NO_ATTACK, P_SHORT, P_XP, set_living_name() und SetProp().
00146 { 00147 ::create(); 00148 00149 SetProp( P_NAME, "Armageddon" ); 00150 SetProp( P_GENDER, MALE ); 00151 SetProp( P_SHORT, "Armageddon, der Weltenvernichter" ); 00152 AddId( "armageddon" ); 00153 set_living_name( "armageddon" ); 00154 SetProp( P_ARTICLE, 0 ); 00155 SetProp( P_XP, 0 ); 00156 SetProp( P_NO_ATTACK, 00157 "Armageddon grinst: Dein Ende kommt noch frueh genug!\n" ); 00158 00159 if (!access_check()) { 00160 destruct(this_object()); 00161 raise_error("Armageddon darf nur von W+ aktiviert werden!"); 00162 } 00163 }

| public varargs void die | ( | int | poisondeath, | |
| int | extern | |||
| ) |
Definiert in Zeile 109 der Datei shut.c.
Benutzt room.
Wird benutzt von do_damage() und heart_beat().
00110 { 00111 object tp; 00112 object room; 00113 00114 if (objectp(room=environment(this_object()))) 00115 if (!objectp(tp=this_player())) 00116 tell_room(room,"Armageddon kratzt sich ratlos am Kopf.\n"); 00117 else 00118 tell_room(room, 00119 "Armageddon sagt: Ich weigere mich, einfach so zu sterben, "+ 00120 (tp->Name())+".\n"); 00121 return; 00122 }

| public int do_damage | ( | int | dam, | |
| object | enemy | |||
| ) |
Definiert in Zeile 365 der Datei shut.c.
Wird benutzt von heart_beat().

| static void NextStep | ( | int | seconds | ) | [static] |
Definiert in Zeile 265 der Datei shut.c.
00266 { 00267 int neu; 00268 00269 if ( seconds <= 0 ){ 00270 SHOUT( "Ich starte das Spiel jetzt neu !", S_PRESAY); 00271 shutdown(""); 00272 return; 00273 } 00274 00275 if ( seconds <= 600 ) 00276 SHOUT( "Teile mir mit, wenn Du in den Laden gebracht werden willst!", 00277 S_PRESAY|S_IGNORE); 00278 00279 if ( seconds > 2 * 86400 ) 00280 neu = seconds - 5 * 3600; 00281 else if ( seconds > 4800 ) 00282 neu = seconds - 1800; 00283 else 00284 neu = seconds * 3 / 4 - 10; 00285 00286 restzeit = neu; 00287 call_out( "NextStep", seconds-neu, neu ); 00288 00289 SHOUT( "In " + text_time( seconds, 1 ) + " werde ich die Welt " 00290 "zerstoeren und neu erschaffen!", S_PRESAY|S_IGNORE); 00291 00292 if ( neu < 900 && find_call_out("ArmasShout") == -1 ) 00293 call_out( "ArmasShout", random(60)+10 ); 00294 }
| string NotifyDestruct | ( | object | caller | ) |
Definiert in Zeile 371 der Datei shut.c.
Wird benutzt von NotifyDestruct().
00371 { 00372 if( (caller!=this_object() && !ELDER_SECURITY) || process_call() ) { 00373 return "Du darfst Armageddon nicht zerstoeren!\n"; 00374 } 00375 return 0; 00376 }

| public int remove | ( | ) |
| static void SHOUT | ( | string | str, | |
| int | flags | |||
| ) | [static] |
Definiert in Zeile 248 der Datei shut.c.
Benutzt break_string(), ignorierer, S_IGNORE und S_PRESAY.
00249 { 00250 if (flags&S_PRESAY) 00251 str = break_string(str, 78, "Armageddon ruft: "); 00252 else 00253 str = break_string(str, 78); 00254 00255 if (flags&S_IGNORE) 00256 filter( 00257 users()-filter_objects(users(),"TestIgnore",({"armageddon"})) 00258 -map(ignorierer, #'find_player), 00259 #'tell_object, str); 00260 else 00261 filter( users(), #'tell_object, str); 00262 }

| public int shut | ( | mixed | minutes | ) |
Definiert in Zeile 209 der Datei shut.c.
Benutzt access_check(), c, call_out(), destruct(), M_GO, ME, move() und restzeit.
00210 { 00211 int a, b, c; 00212 00213 if (!access_check()) { 00214 destruct(this_object()); 00215 raise_error("Armageddon darf nur von W+ aktiviert werden!"); 00216 return(-1); //never reached 00217 } 00218 00219 a = b = c = 0; 00220 move( "/gilden/abenteurer", M_GO ); 00221 00222 if ( intp(minutes) ) 00223 c = minutes; 00224 else if ( stringp(minutes) ){ 00225 if ( sscanf( minutes, "%d:%d:%d", a, b, c ) == 3 ) 00226 c += b * 60 + a * 24 * 60; 00227 else if( sscanf( minutes, "%d:%d", b, c) == 2 ) 00228 c += b * 60; 00229 else if( sscanf( minutes, "%d", c ) != 1 ) 00230 return -2; 00231 } 00232 else { 00233 destruct(ME); 00234 raise_error("Illegal argument type to shut()\n"); 00235 } 00236 00237 while ( remove_call_out("NextStep") >= 0 ) 00238 ; 00239 00240 restzeit = c * 60; 00241 call_out( "NextStep", 0, restzeit ); 00242 return restzeit; 00243 }

| static varargs string text_time | ( | int | sec, | |
| int | flag | |||
| ) | [static] |
Definiert in Zeile 166 der Datei shut.c.
Wird benutzt von _query_long().
00167 { 00168 string s; 00169 int tage, stunden, minuten, sekunden; 00170 00171 sekunden = sec; 00172 tage = sekunden / 86400; 00173 stunden = (sekunden % 86400) / 3600; 00174 minuten = (sekunden % 3600) / 60; 00175 sekunden = sec % 60; 00176 s = ""; 00177 00178 if ( sec >= 86400 ) 00179 s += tage + " Tag" + (tage == 1 ? ", " : (flag ? "en, " : "e, ")); 00180 00181 if ( sec >= 3600 ) 00182 s += stunden + " Stunde" + (stunden == 1 ? ", " : "n, "); 00183 00184 if ( sec >= 60 ) 00185 s += minuten + " Minute" + (minuten == 1 ? "" : "n"); 00186 00187 s += (sec/60 ? " und " : " ") + sekunden + " Sekunde" + 00188 (sekunden == 1 ? "" : "n"); 00189 00190 return s; 00191 }

string* ignorierer = ({}) [static] |
Definiert in Zeile 104 der Datei shut.c.
Wird benutzt von _query_ignore() und SHOUT().
int restzeit [static] |
Definiert in Zeile 103 der Datei shut.c.
Wird benutzt von _query_restzeit() und shut().
1.6.3