#include <defines.h>#include <properties.h>#include <moving.h>#include <language.h>#include <wizlevels.h>#include <daemon.h>#include <new_skills.h>
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | TOS(s) s[<1] |
| #define | STOS(s) s[<2] |
| #define | PUSH(x, s) (s+= ({ x })) |
| #define | POP(s) (s=s[0..<2]) |
Funktionen | |
| static private void | flush (int unusedOnly) |
| static private string | expand (string table, int value) |
| static private string | parseText (string msg, object pl) |
| static private void | do_remove () |
| static private varargs mixed | get_sequence (string str) |
| void | add_player (object pl) |
| static int | filter_ldfied (string str) |
| public int | SmartLog (string creat, string myname, string str, string date) |
| static private void | wech_damit (object ob) |
| public mixed | hier_geblieben (mixed dest, int methods, string direction, string textout, string textin) |
| public void | init () |
| public void | create () |
| public void | reset () |
| public void | heart_beat () |
Variablen | |
| inherit std | room |
| mixed * | players |
| mapping | msgCache |
| #define POP | ( | s | ) | (s=s[0..<2]) |
Definiert in Zeile 117 der Datei death_room.c.
Definiert in Zeile 116 der Datei death_room.c.
| #define STOS | ( | s | ) | s[<2] |
Definiert in Zeile 115 der Datei death_room.c.
Wird benutzt von parseText().
| #define TOS | ( | s | ) | s[<1] |
Definiert in Zeile 114 der Datei death_room.c.
Wird benutzt von parseText().
| void add_player | ( | object | pl | ) |
Definiert in Zeile 374 der Datei death_room.c.
Benutzt break_string(), CHMASTER, FEMALE, get_sequence(), IS_LEARNING, MALE, MSG_EMPTY, MSG_GEMOTE, MSG_SAY, Name(), NEUTER, P_ARTICLE, P_DEADS, P_DEATH_MSG, P_ENEMY_DEATH_SEQUENCE, P_GENDER, P_KILL_MSG, P_KILL_NAME, P_KILLER, P_NAME, P_TESTPLAYER, players, PLURAL, SetProp(), upperstring() und WER.
00375 { 00376 // Description: Adds a player to the list 00377 int i, kart, kgen; 00378 int escaped,magiertestie; 00379 object pre, kill_liv, kill_ob; 00380 mixed dseq, act_seq, killer_name, killer_msg; 00381 string fn, kanal,testplayer; 00382 00383 set_heart_beat(1); 00384 kill_liv = 0; 00385 kill_ob = 0; 00386 dseq = 0; 00387 kart = 0; 00388 kgen = MALE; 00389 00390 foreach(pre : caller_stack(1)) { 00391 if ( !objectp(pre) || pre == pl ) 00392 continue; 00393 00394 fn = object_name(pre); 00395 00396 if ( fn[0..12] == "/secure/login" && !kill_liv ){ 00397 escaped = 1; 00398 break; 00399 } 00400 00401 if ( fn[0..7] == "/secure/" && fn[0..13] != "/secure/merlin" ) 00402 continue; 00403 00404 if ( fn[0..21] == "/room/death/death_mark" ) 00405 continue; 00406 00407 if ( living(pre) ){ 00408 kill_liv = pre; // Killer 00409 break; 00410 } 00411 00412 kill_ob = pre; // killendes Objekt 00413 } 00414 00415 if ( objectp( pre = ((object) pl->QueryProp(P_KILLER)) ) ){ 00416 dseq = (mixed) pre->QueryProp(P_ENEMY_DEATH_SEQUENCE); 00417 00418 if( !(killer_name = (mixed) pre->QueryProp(P_KILL_NAME)) ){ 00419 killer_name = (mixed) pre->QueryProp(P_NAME); 00420 kart = (int) pre->QueryProp(P_ARTICLE); 00421 kgen = (int) pre->QueryProp(P_GENDER); 00422 } 00423 00424 killer_msg = (mixed)pre->QueryProp(P_KILL_MSG); 00425 } 00426 00427 if ( !killer_name && kill_liv && function_exists( "QueryProp", kill_liv ) ){ 00428 dseq = (mixed) kill_liv->QueryProp(P_ENEMY_DEATH_SEQUENCE); 00429 00430 if( !(killer_name = (mixed) kill_liv->QueryProp(P_KILL_NAME)) ){ 00431 killer_name = (mixed) kill_liv->QueryProp(P_NAME); 00432 kart = (int) kill_liv->QueryProp(P_ARTICLE); 00433 kgen = (int) kill_liv->QueryProp(P_GENDER); 00434 } 00435 00436 killer_msg = (mixed) kill_liv->QueryProp(P_KILL_MSG); 00437 pre = kill_liv; 00438 } 00439 00440 if ( !killer_name && kill_ob && function_exists( "QueryProp", kill_ob ) ){ 00441 dseq = (mixed) kill_ob->QueryProp(P_ENEMY_DEATH_SEQUENCE); 00442 00443 if( !(killer_name = (mixed) kill_ob->QueryProp(P_KILL_NAME)) ){ 00444 killer_name = (mixed) kill_ob->QueryProp(P_NAME); 00445 kart = (int) kill_ob->QueryProp(P_ARTICLE); 00446 kgen = (int) kill_ob->QueryProp(P_GENDER); 00447 } 00448 00449 killer_msg = (mixed) kill_ob->QueryProp(P_KILL_MSG); 00450 pre = kill_ob; 00451 } 00452 00453 act_seq = 0; 00454 00455 if ( mappingp(dseq) ) 00456 act_seq = get_sequence( "/room/death/sequences/lars" ); 00457 else if ( pointerp(dseq) ) // ganze Todessequenz... 00458 act_seq = ({ dseq, 0 }); 00459 else if ( stringp(dseq) ) 00460 act_seq = get_sequence(dseq); 00461 00462 if(pl->query_hc_play()>1) 00463 { 00464 act_seq=({({22,([1:"Du faellst und faellst...\n", 00465 5:"und faellst...\n", 00466 10:"und faellst...\n", 00467 12:"direkt in die Arme von TOD.\n", 00468 14:"Triumphierend laechelt er Dich an.\n", 00469 16:"NUN GEHOERST DU FUER IMMER MIR!\n", 00470 18:"HAHHHAHAHAAAAAAAAAAHAAAAAAAAA!\n", 00471 20:"TOD schlaegt Dir mit seiner Sense den Kopf ab.\n"])}),0}); 00472 } 00473 if ( !act_seq ) 00474 act_seq = get_sequence(); 00475 00476 if ( !mappingp(dseq) ) 00477 dseq = 0; 00478 00479 for ( i = sizeof(players); i--; ) 00480 if ( players[i][0] == pl ) 00481 break; 00482 00483 if ( i == -1 ) 00484 players += ({ ({ pl, 0, dseq, act_seq[0], act_seq[1], pre }) }); 00485 else 00486 players[i][5] = pre; 00487 00488 00489 if ( escaped ){ 00490 killer_name = ""; 00491 killer_msg = upperstring(getuid(pl)) + " VERSUCHTE, MIR ZU " 00492 "ENTKOMMEN - JETZT HABE ICH WIEDER EXTRA-ARBEIT MIT "+ 00493 ((int) pl->QueryProp(P_GENDER) != 2 ? "IHM" : "IHR") + 00494 " ..."; 00495 } 00496 else if ( !killer_name ) { 00497 if ( (string) pl->QueryProp(P_KILLER) == "gift" ){ 00498 killer_name = "Vergiftung"; 00499 kgen = FEMALE; 00500 kart = 1; 00501 } 00502 else{ 00503 killer_name = "Etwas Geheimnisvolles und Unbekanntes"; 00504 kgen = NEUTER; 00505 kart = 0; 00506 } 00507 } 00508 00509 if ( !pointerp(killer_msg) ) 00510 killer_msg = ({ killer_msg, 0, 0 }); 00511 else if ( sizeof(killer_msg) < 3 ) 00512 killer_msg += ({ 0, 0, 0 }); 00513 00514 if ( stringp(killer_msg[0]) ) 00515 killer_msg[0] = sprintf( killer_msg[0], capitalize(getuid(pl)) ); 00516 00517 SetProp( P_NAME, killer_name ); 00518 SetProp( P_ARTICLE, kart ); 00519 SetProp( P_GENDER, kgen ); 00520 fn = Name(WER); 00521 SetProp( P_NAME, "Lars" ); 00522 SetProp( P_ARTICLE, 0 ); 00523 SetProp( P_GENDER,MALE ); 00524 00525 testplayer=(string) pl->QueryProp(P_TESTPLAYER); 00526 if (strlen(testplayer)) 00527 { 00528 if (testplayer[<5..<1]=="Gilde") 00529 magiertestie=0; 00530 else 00531 magiertestie=1; 00532 } 00533 else 00534 magiertestie=0; 00535 if (magiertestie || IS_LEARNING(pl)) 00536 kanal = "TdT"; 00537 else 00538 kanal = "Tod"; 00539 00540 CHMASTER->join( kanal, this_object() ); 00541 00542 if ( (!stringp(killer_name) || killer_name != "") && 00543 (sizeof(killer_msg) < 4 || !killer_msg[3]) ){ 00544 if ( killer_msg[2] == PLURAL ) 00545 CHMASTER->send( kanal, this_object(), 00546 fn + " haben gerade " + 00547 capitalize(getuid(pl)) + " umgebracht." ); 00548 else 00549 CHMASTER->send( kanal, this_object(), 00550 fn + " hat gerade " + 00551 capitalize(getuid(pl)) + " umgebracht." ); 00552 } 00553 00554 i = (int) pl->QueryProp(P_DEADS); 00555 if ( i && (getuid(pl) == "key" || i%100 == 0 || i%250 == 0) ){ 00556 SetProp( P_NAME, "Tod" ); 00557 CHMASTER->send( kanal, this_object(), 00558 sprintf( "DAS WAR SCHON DAS %dTE MAL!", i ) ); 00559 SetProp( P_NAME, "Lars" ); 00560 } 00561 00562 if( killer_msg[0] ){ 00563 if ( stringp(killer_name) && killer_name == "" ){ 00564 CHMASTER->send( kanal, this_object(), 00565 break_string( funcall(killer_msg[0]), 78, 00566 "["+kanal+":] " )[0..<2], 00567 MSG_EMPTY ); 00568 return; 00569 } 00570 else { 00571 if ( (killer_msg[1] < MSG_SAY) || (killer_msg[1] > MSG_GEMOTE) ) 00572 killer_msg[1] = MSG_SAY; 00573 00574 SetProp( P_NAME, killer_name ); 00575 SetProp( P_ARTICLE, kart ); 00576 SetProp( P_GENDER, kgen ); 00577 CHMASTER->send( kanal, this_object(), funcall(killer_msg[0]), 00578 killer_msg[1] ); 00579 SetProp( P_NAME, "Lars" ); 00580 SetProp( P_ARTICLE, 0 ); 00581 SetProp( P_GENDER, MALE ); 00582 } 00583 } 00584 00585 if ( pointerp(killer_msg = (mixed) pl->QueryProp(P_DEATH_MSG)) && 00586 sizeof(killer_msg) == 2 && stringp(killer_msg[0]) && 00587 intp(killer_msg[1]) ){ 00588 SetProp( P_NAME, capitalize(getuid(pl)) ); 00589 SetProp( P_ARTICLE, 0 ); 00590 SetProp( P_GENDER, pl->QueryProp(P_GENDER) ); 00591 CHMASTER->send( kanal, this_object(), killer_msg[0], 00592 killer_msg[1] ); 00593 SetProp( P_NAME, "Lars" ); 00594 SetProp( P_ARTICLE, 0 ); 00595 SetProp( P_GENDER, MALE ); 00596 } 00597 00598 if (pl->query_hc_play()>1){ 00599 SetProp( P_NAME, "Tod" ); 00600 CHMASTER->send( kanal, this_object(),"NUN GEHOERST DU FUER EWIG MIR!" ); 00601 SetProp( P_NAME, "Lars" ); 00602 } 00603 }

| public void create | ( | ) |
Definiert in Zeile 42 der Datei death_room.c.
Benutzt break_string(), create(), flush(), IS_CLONE, MALE, P_ARTICLE, P_GENDER, P_INT_LONG, P_INT_SHORT, P_LIGHT, P_LOG_FILE, P_NAME, players und SetProp().
00043 { 00044 if (IS_CLONE(this_object())) return; 00045 ::create(); 00046 00047 players = ({}); 00048 flush(0); 00049 00050 SetProp( P_NAME, "Lars" ); 00051 SetProp( P_GENDER, MALE ); 00052 SetProp( P_ARTICLE, 0 ); 00053 SetProp( P_LIGHT,1 ); 00054 SetProp( P_LOG_FILE, "TOD/Todesraum" ); 00055 SetProp( P_INT_SHORT, "Arbeitszimmer des Todes" ); 00056 SetProp( P_INT_LONG, break_string( 00057 "Ein dunkler Raum, erleuchtet von dunklem Licht, das sich der " 00058 "Dunkelheit nicht so sehr zu widersetzen scheint, indem es " 00059 "leuchtet, als dass es der dunkelste Punkt in einer weniger " 00060 "dunklen Umgebung ist. Im seltsamen Licht erkennst Du einen "+ 00061 "zentral aufgestellten Schreibtisch, der mit Diagrammen und " 00062 "Buechern bedeckt ist. Die Waende verschwinden hinter Regalen, " 00063 "die gefuellt sind mit in Leder gebundenen, dunklen Waelzern, " 00064 "von denen geheimnisvolle Runen leuchten.\nTod.", 78, 0, 1 ) ); 00065 }

| static private void do_remove | ( | ) | [static] |
Definiert in Zeile 303 der Datei death_room.c.
Benutzt F_QUERY_METHOD, M_GO, M_NOCHECK, M_SILENT, P_ENEMY_DEATH_SEQUENCE, P_KILLER, P_LAST_KILLER, P_NO_ATTACK, P_POISON, P_TMP_MOVE_HOOK, pl und players.
Wird benutzt von heart_beat().
00304 { 00305 int j, res; 00306 string prayroom; 00307 object plobj, pl; 00308 00309 for ( j = sizeof(players); j--; ){ 00310 if ( players[j][1] >= players[j][3][0]){ 00311 pl = players[j][0]; 00312 while ( plobj = present("\ndeath_mark", pl) ) 00313 plobj->remove(); 00314 00315 if ( !(prayroom = (string) pl->QueryPrayRoom()) ) 00316 prayroom="/room/pray_room"; 00317 00318 pl->Set( P_TMP_MOVE_HOOK, 0 ); 00319 pl->Set( P_NO_ATTACK, 0, F_QUERY_METHOD ); 00320 pl->Set( P_LAST_KILLER, 0 ); 00321 pl->Set( P_KILLER, 0 ); 00322 pl->Set( P_ENEMY_DEATH_SEQUENCE, 0 ); 00323 pl->Set( P_POISON, 0, F_QUERY_METHOD ); 00324 00325 if ( catch( res = (int) pl->move(prayroom, M_GO|M_SILENT|M_NOCHECK) ) 00326 || res < 1 ) 00327 pl->move( "/room/pray_room", M_GO|M_NOCHECK ); 00328 00329 players[j] = 0; 00330 } 00331 } 00332 00333 players -= ({0}); 00334 00335 if ( !sizeof(players) ) 00336 set_heart_beat(0); 00337 }

| static private string expand | ( | string | table, | |
| int | value | |||
| ) | [static] |
Definiert in Zeile 93 der Datei death_room.c.
Benutzt i.
Wird benutzt von parseText().
00094 { 00095 int sz, wert, i; 00096 string *texte; 00097 00098 sz = sizeof( texte = explode( table, "##" ) - ({""}) ); 00099 00100 for ( i = 0; i < sz; i++ ) 00101 if ( i%2 ){ 00102 sscanf( texte[i], "%d", wert ); 00103 00104 if ( value < wert ) 00105 break; 00106 } 00107 else 00108 table = texte[i]; 00109 00110 return table; 00111 }

| static int filter_ldfied | ( | string | str | ) | [static] |
Definiert in Zeile 126 der Datei death_room_vc.c.
Wird benutzt von long().
00127 { 00128 // Description: Filter out relevant commands. 00129 string verb; 00130 00131 verb=query_verb(); 00132 00133 if ( (verb == "schlafe" || verb == "schlaf") && str == "ein" ){ 00134 write("DU KANNST DEM TOD NICHT ENTRINNEN!\n"); 00135 return 0; 00136 } 00137 00138 if ( verb == "typo" || verb == "fehler" || verb == "bug" || verb == "idee" ) 00139 return 0; 00140 00141 write( "Dein Koerper gehorcht Dir nicht !\n" ); 00142 return 1; 00143 }

| static private void flush | ( | int | unusedOnly | ) | [static] |
Definiert in Zeile 74 der Datei death_room.c.
Benutzt i, m_delete() und msgCache.
Wird benutzt von create() und reset().
00075 { 00076 string *mi; 00077 int i; 00078 00079 if ( unusedOnly ){ 00080 if ( i = sizeof(mi = m_indices(msgCache)) ){ 00081 for ( ; i--; ) 00082 if ( msgCache[mi[i], 1] ) 00083 msgCache[mi[i], 1] = 0; 00084 else 00085 msgCache = m_delete( msgCache, mi[i] ); 00086 } 00087 } 00088 else 00089 msgCache = ([]); 00090 }


| static private varargs mixed get_sequence | ( | string | str | ) | [static] |
Definiert in Zeile 340 der Datei death_room.c.
Wird benutzt von add_player().
00341 { 00342 string *sequences, seq; 00343 int i, len, cacheable; 00344 mapping m; 00345 00346 if ( !stringp(str) || catch( len = file_size(str) ) || len <= 0 ){ 00347 sequences = get_dir( "/room/death/sequences/*" ) - ({ ".", "..", ".svn" }); 00348 str = "/room/death/sequences/" + sequences[random( sizeof(sequences) )]; 00349 } 00350 00351 if ( cacheable = ((strlen(str) > 21) && 00352 (str[0..21] == "/room/death/sequences/")) ){ 00353 if ( member(msgCache, str) ){ 00354 msgCache[str, 1] = 1; // Touch it! 00355 return ({ msgCache[str], str }); 00356 } 00357 } 00358 00359 sequences = explode( read_file(str), "\n" ); 00360 sscanf( sequences[0], "%d", len ); 00361 seq = implode( sequences[1..], "\n" ); 00362 sequences = regexplode( seq, "[0-9][0-9]*:" ); 00363 m = ([]); 00364 00365 for ( i = 1; i < sizeof(sequences)-1; i += 2 ) 00366 m[(int) sequences[i]] = sequences[i+1]; 00367 00368 if ( cacheable ) 00369 msgCache += ([ str: ({ len, m }); 1 ]); 00370 00371 return ({ ({ len, m }), str }); 00372 }

| public void heart_beat | ( | ) |
Definiert in Zeile 264 der Datei death_room.c.
Benutzt do_remove(), msg(), parseText() und players.
00265 { 00266 int j, nr; 00267 string msg; 00268 00269 j=0; 00270 00271 for ( j = sizeof(players); j--; ) 00272 if ( !objectp(players[j][0]) || 00273 environment(players[j][0]) != 00274 find_object("/room/death/virtual/death_room_"+getuid(players[j][0])) ) 00275 players[j] = 0; 00276 00277 players -= ({0}); 00278 00279 if ( !sizeof(players) ) { 00280 set_heart_beat(0); 00281 return; 00282 } 00283 00284 for ( j = sizeof(players); j--; ){ 00285 nr = ++players[j][1]; 00286 00287 if ( mappingp(players[j][2]) ) 00288 msg = players[j][2][nr]; 00289 else 00290 msg = 0; 00291 00292 if ( !msg ) 00293 msg = players[j][3][1][nr]; 00294 00295 if ( msg ) 00296 tell_object( players[j][0], parseText( msg, players[j][0] ) ); 00297 } 00298 00299 do_remove(); 00300 }

| public mixed hier_geblieben | ( | mixed | dest, | |
| int | methods, | |||
| string | direction, | |||
| string | textout, | |||
| string | textin | |||
| ) |
Definiert in Zeile 636 der Datei death_room.c.
Benutzt IS_DEPUTY, IS_LEARNER, P_TMP_MOVE_HOOK und players.
00638 { 00639 int i; 00640 00641 // Magier duerfen Spieler heraustransen 00642 if ( this_interactive() && IS_LEARNER(this_interactive()) && 00643 (this_interactive() != previous_object() || 00644 IS_DEPUTY(this_interactive())) ){ 00645 previous_object()->Set( P_TMP_MOVE_HOOK, 0 ); 00646 return ({ dest, methods, direction, textout, textin }); 00647 } 00648 00649 // Spieler haengt noch in der Todessequenz 00650 for ( i = sizeof(players); i--; ) 00651 if ( objectp(players[i][0]) && previous_object() == players[i][0] && 00652 environment(previous_object()) == find_object( 00653 "/room/death/virtual/room_death_" + getuid(previous_object()))&& 00654 interactive(previous_object()) ) { 00655 // Move nur erlaubt, wenn das Ziel wieder der Todesraum ist. 00656 // wenn mal fuer nen bestimmten Zwecks Bewegungen raus aus dem 00657 // Todesraum erforderlich sind, sollten hier entsprechende 00658 // Ausnahmen eingebaut werden. 00659 if ( (stringp(dest) && 00660 dest == object_name(environment(previous_object()))) || 00661 (objectp(dest) && 00662 dest == environment(previous_object())) ) { 00663 previous_object()->Set( P_TMP_MOVE_HOOK, 0 ); 00664 return ({ dest, methods, direction, textout, textin }); 00665 } 00666 else 00667 return -1; 00668 } 00669 00670 // Spieler ist nicht mehr im Raum oder eingeschlafen 00671 if ( previous_object() ) 00672 previous_object()->Set( P_TMP_MOVE_HOOK, 0 ); 00673 00674 return ({ dest, methods, direction, textout, textin }); 00675 }
| public void init | ( | ) |
| static private string parseText | ( | string | msg, | |
| object | pl | |||
| ) | [static] |
Definiert in Zeile 121 der Datei death_room.c.
Benutzt cnt, done(), expand(), FEMALE, i, P_ALIGN, P_DEADS, P_GENDER, P_LEVEL, P_RACE, POP, PUSH, race, RAW, STOS, TOS und upperstring().
Wird benutzt von heart_beat().
00122 { 00123 string *words, *texte, *todo, *done, tmp, cmd; 00124 int i, k, sz; 00125 int endFlag; 00126 00127 sz = sizeof( words = regexplode(msg, "[<][^>]*[>]") ); 00128 todo = ({ }); 00129 done = ({""}); 00130 00131 for ( i=1; i<sz; i+=2 ){ 00132 cmd = words[i][1..<2]; 00133 TOS(done) += words[i-1]; 00134 00135 if ( cmd[0] == '/' ){ 00136 endFlag = 1; 00137 cmd = cmd[1..]; 00138 } 00139 else 00140 endFlag = 0; 00141 00142 switch( cmd[0] ){ 00143 case 'A': /*** Alignment ersetzen ***/ 00144 if (!endFlag){ 00145 PUSH( cmd, todo ); 00146 PUSH( "", done ); 00147 } 00148 else 00149 if ( todo[<1] == "A" ){ 00150 STOS(done) += expand(TOS(done), (int) pl->QueryProp(P_ALIGN)); 00151 done = done[0..<2]; 00152 todo = todo[0..<2]; 00153 } 00154 break; 00155 00156 case 'D': /*** Tode ersetzen ***/ 00157 if ( !endFlag ){ 00158 PUSH( cmd, todo ); 00159 PUSH( "", done ); 00160 } 00161 else 00162 if ( todo[<1] == "D" ){ 00163 STOS(done) += expand(TOS(done), (int) pl->QueryProp(P_DEADS)); 00164 POP(done); 00165 POP(todo); 00166 } 00167 break; 00168 00169 case 'L': /*** Level ersetzen ***/ 00170 if ( !endFlag ){ 00171 PUSH( cmd, todo ); 00172 PUSH( "", done ); 00173 } 00174 else 00175 if ( todo[<1] == "L" ){ 00176 STOS(done) += expand(TOS(done), (int) pl->QueryProp(P_LEVEL)); 00177 POP(done); 00178 POP(todo); 00179 } 00180 break; 00181 00182 case 'Z': /*** Zufall ersetzen ***/ 00183 if ( !endFlag ){ 00184 PUSH( cmd, todo ); 00185 PUSH( "", done ); 00186 } 00187 else{ 00188 if ( todo[<1][0] == 'Z'){ 00189 int cnt, rnd, wert, sz2; 00190 00191 if ( !sscanf(todo[<1], "Z=%d", rnd) ) 00192 STOS(done) += "\n###\n### Syntax Error in <Z>!\n###\n\n"; 00193 else { 00194 rnd = random(rnd); 00195 sz2 = sizeof( texte = explode(TOS(done), "##") ); 00196 wert=0; 00197 cnt=0; 00198 00199 for ( k = 1; k < sz2; k += 2 ){ 00200 sscanf( texte[k], "%d", wert ); 00201 cnt += wert; 00202 if ( rnd < cnt ) { 00203 STOS(done) += texte[k+1]; 00204 break; 00205 } 00206 } 00207 } 00208 POP(done); 00209 POP(todo); 00210 } 00211 } 00212 break; 00213 00214 case 'G': /*** Gender ersetzen ***/ 00215 if ( !endFlag ){ 00216 PUSH( cmd, todo ); 00217 PUSH( "", done ); 00218 } 00219 else{ 00220 if( sizeof( texte = regexplode(TOS(done), ":") ) == 3 ) 00221 STOS(done) += texte[2*((int) pl->QueryProp(P_GENDER) 00222 == FEMALE)]; 00223 POP(done); 00224 POP(todo); 00225 } 00226 break; 00227 00228 case 'R': /*** Rasse ersetzen ***/ 00229 if ( !endFlag ){ 00230 PUSH( cmd, todo ); 00231 PUSH( "", done ); 00232 } 00233 else{ 00234 int race; 00235 00236 texte = regexplode( TOS(done), "\\|" ); 00237 race = 2 * (member( ({ "Mensch", "Elf", "Zwerg", "Hobbit", 00238 "Feline", "Dunkelelf" }), 00239 (string) pl->QueryProp(P_RACE) ) + 1); 00240 00241 if ( race >= sizeof(texte) ) 00242 race = 0; 00243 00244 STOS(done) += texte[race]; 00245 POP(done); 00246 POP(todo); 00247 } 00248 break; 00249 00250 case 'n': /*** Name, normal geschrieben ***/ 00251 TOS(done) += (string) (pl->name(RAW)); 00252 break; 00253 00254 case 'N': /*** Name, in Grossbuchstaben ***/ 00255 TOS(done) += (string) upperstring(pl->name(RAW)); 00256 break; 00257 } 00258 } 00259 PUSH( words[<1], done ); 00260 return implode( done, "" ); 00261 }


| public void reset | ( | void | ) |
| public int SmartLog | ( | string | creat, | |
| string | myname, | |||
| string | str, | |||
| string | date | |||
| ) |
Definiert in Zeile 606 der Datei death_room.c.
00607 { 00608 int i; 00609 string fn; 00610 00611 for ( i = sizeof(players); i--; ) 00612 if ( players[i][0] == this_player() ) 00613 break; 00614 00615 // Spieler (Magier?) ist in keiner Todessequenz -> normales Repfile 00616 if ( i == -1 ) 00617 return 0; 00618 00619 if ( !(fn = players[i][4]) ){ 00620 // Spieler hat eine unbekannte Todessequenz (kein Filename, Sequenz 00621 // wurde komplett in P_ENEMY_DEATH_SEQUENCE abgelegt) 00622 creat = "TOD/unbekannt.rep"; 00623 fn = "unbekannte Todessequenz"; 00624 } 00625 else 00626 // Jede Sequenz mit nem eigenen Repfile 00627 creat = "TOD/" + explode( fn, "/" )[<1] + ".rep"; 00628 00629 log_file( creat, myname + " von " + getuid(this_interactive()) 00630 + " ["+fn+"] (" + date + "):\n" ); 00631 log_file( creat, str + "\n" ); 00632 00633 return 1; 00634 }
| static private void wech_damit | ( | object | ob | ) | [static] |
| mapping msgCache |
Definiert in Zeile 21 der Datei death_room.c.
Wird benutzt von flush() und get_sequence().
| mixed* players |
Definiert in Zeile 20 der Datei death_room.c.
Wird benutzt von _communicate(), add_player(), create(), do_remove(), heart_beat(), hier_geblieben(), InformPlayers() und SmartLog().
| inherit std room |
Definiert in Zeile 18 der Datei death_room.c.
1.6.3