death_room.c-Dateireferenz

#include <defines.h>
#include <properties.h>
#include <moving.h>
#include <language.h>
#include <wizlevels.h>
#include <daemon.h>
#include <new_skills.h>
Include-Abhängigkeitsdiagramm für death_room.c:

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

Makro-Dokumentation

#define POP (  )     (s=s[0..<2])

Definiert in Zeile 117 der Datei death_room.c.

#define PUSH ( x,
 )     (s+= ({ x }))

Definiert in Zeile 116 der Datei death_room.c.

#define STOS (  )     s[<2]

Definiert in Zeile 115 der Datei death_room.c.

Wird benutzt von parseText().

#define TOS (  )     s[<1]

Definiert in Zeile 114 der Datei death_room.c.

Wird benutzt von parseText().


Dokumentation der Funktionen

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 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

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 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

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 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

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 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

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 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

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 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

static private varargs mixed get_sequence ( string  str  )  [static]

Definiert in Zeile 340 der Datei death_room.c.

Benutzt i, len und msgCache.

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 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

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 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

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 (  ) 

Definiert in Zeile 35 der Datei death_room.c.

Benutzt M_NO_SHOW, M_NOCHECK und M_SILENT.

00036 {
00037   this_player()->move("/room/death/virtual/death_room_"+getuid(this_player()),
00038                      M_NOCHECK|M_SILENT|M_NO_SHOW);
00039   return;
00040 }

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 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public void reset ( void   ) 

Definiert in Zeile 68 der Datei death_room.c.

Benutzt flush() und reset().

00069 {
00070     ::reset();
00071     flush(1);
00072 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

public int SmartLog ( string  creat,
string  myname,
string  str,
string  date 
)

Definiert in Zeile 606 der Datei death_room.c.

Benutzt log_file und players.

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]

Variablen-Dokumentation

mapping msgCache

Definiert in Zeile 21 der Datei death_room.c.

Wird benutzt von flush() und get_sequence().

mixed* players
inherit std room

Definiert in Zeile 18 der Datei death_room.c.

Erzeugt am Thu Jun 3 14:41:03 2010 für MorgenGrauen Mudlib von  doxygen 1.6.3