login.c-Dateireferenz

#include <config.h>
#include <properties.h>
#include <moving.h>
#include "/secure/wizlevels.h"
#include <telnet.h>
#include <defines.h>
Include-Abhängigkeitsdiagramm für login.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define SSL_GRRETING   "REMOTE_HOST="
#define PROXIES   ({"127.0.0.1","84.16.224.224"})
#define GUESTMASTER   "/secure/guestmaster"
#define DEBUG(x)   if(find_player("tiamak")) tell_object(find_player("tiamak"),x)
#define DEBUGM(x)   if(find_player("muadib")) tell_object(find_player("muadib"),x)

Funktionen

static void SendTelopts ()
public nomask string loginname ()
public nomask int logon ()
static int check_illegal (string str)
static int valid_name (string str)
static int logon2 (string str)
static int new_password (string str)
static int again_password (string str)
static int check_password (string str)
static void select_race ()
static void ask_race_question ()
static void get_race_answer (string str)
static int load_player_object (int guestflag)
static void load_player_ob_2 (string obname, int guestflag)
public void create ()
public string short ()
public string query_real_name ()
public nomask int query_prevent_shadow ()
static void time_out ()
public int remove ()
public mixed new_logon (string str)
static mixed new_load_player_object ()
static mixed new_load_player_ob_2 (string obname)
static void reask_hc_question ()
static void ask_hc_question ()
static void get_hc_answer (string str)
static void ask_mud_played_question ()
static void get_mud_played_answer (string str)
static int check_too_many_logons ()
static int check_too_many_from_same_ip ()
string query_realip ()

Variablen

inherit secure mini_telnetneg c
int level
int loginfails
int creation_date
string password
string name
string shell
string ep
string ek
string mq
string ektips
string fptips
string * domains
string * guilds
string * uidstotakecare
static int invis
static int neu
static string loginname
static string cap_name
static object myself
static string * userentry
static string banish
static mixed * races
static int hc_play
static int newbie
static int hc_confirm
static string realip

Makro-Dokumentation

#define DEBUG ( x   )     if(find_player("tiamak")) tell_object(find_player("tiamak"),x)

Definiert in Zeile 46 der Datei login.c.

#define DEBUGM ( x   )     if(find_player("muadib")) tell_object(find_player("muadib"),x)

Definiert in Zeile 47 der Datei login.c.

#define GUESTMASTER   "/secure/guestmaster"

Definiert in Zeile 43 der Datei login.c.

Wird benutzt von load_player_ob_2() und load_player_object().

#define PROXIES   ({"127.0.0.1","84.16.224.224"})

Definiert in Zeile 42 der Datei login.c.

Wird benutzt von logon2().

#define SSL_GRRETING   "REMOTE_HOST="

Definiert in Zeile 41 der Datei login.c.

Wird benutzt von logon2().


Dokumentation der Funktionen

static int again_password ( string  str  )  [static]

Definiert in Zeile 493 der Datei login.c.

Benutzt call_out(), destruct(), load_player_object(), loginname, master, password, save_object() und SECURESAVEPATH.

00494 {
00495     write( "\n" );
00496 
00497     if ( str != password ){
00498         write( "Die Passwoerter stimmten nicht ueberein!\n" );
00499         destruct( this_object() );
00500         return 1;
00501     }
00502 
00503     while ( remove_call_out( "time_out" ) != -1 )
00504         ;
00505     call_out( "time_out", 600 );
00506 
00507     password = md5_crypt( password, 0 );
00508     save_object( SECURESAVEPATH + loginname[0..0] + "/" + loginname );
00509     master()->RemoveFromCache( loginname );
00510 
00511     load_player_object(0);
00512     return 1;
00513 }

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

static void ask_hc_question (  )  [static]

Definiert in Zeile 630 der Datei login.c.

Benutzt break_string(), BS_LEAVE_MY_LFS, input_to() und newbie.

Wird benutzt von get_hc_answer() und get_race_answer().

00631 {
00632   write( break_string(
00633             "\nDu musst Dich nun entscheiden, ob Du dieser Welt mit den Mitteln "+
00634             "der Wiedergeburt entgegentreten willst, oder ob Dir ein Leben "+
00635             "ausreicht. Triff diese Wahl sorgfaeltig, es gibt keine zweite "+
00636             "Wahl. Sollte Dir nicht klar sein, was diese Frage bedeutet, so "+
00637             "bekommst du mit \"?\" Hilfe.\n\n",78,0,BS_LEAVE_MY_LFS));
00638 
00639   if (newbie)
00640   {
00641                   write("Du solltest hier unbedingt \"nein\" eingeben.\n"
00642                                                   "Eine andere Wahl bringt keine Vorteile!\n");
00643   }
00644     write( "\nNun entscheide Dich, willst Du nur ein Leben?(ja,nein,?): " );
00645 
00646     input_to( "get_hc_answer" );
00647     return;
00648 }

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

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

static void ask_mud_played_question (  )  [static]

Definiert in Zeile 650 der Datei login.c.

Benutzt break_string(), BS_LEAVE_MY_LFS und input_to().

Wird benutzt von get_mud_played_answer().

00651 {
00652                 write(break_string(
00653                                 "\nWenn Du ein absoluter Neuling in diesem Spiel bist moechten "
00654                                 "wir Dir mit einigen Tips zu Beginn beiseite stehen.\n\n"
00655                                 "Hast Du schon einmal in einem MUD gespielt?(ja,nein): ",78,
00656                                 0,BS_LEAVE_MY_LFS));
00657                 input_to( "get_mud_played_answer" );
00658                 return;
00659 }

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

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

static void ask_race_question (  )  [static]

Definiert in Zeile 661 der Datei login.c.

Benutzt break_string(), BS_LEAVE_MY_LFS, i, input_to(), newbie und races.

Wird benutzt von get_mud_played_answer() und get_race_answer().

00662 {
00663     int i, j;
00664 
00665     write( break_string( "Du musst Dich jetzt entscheiden, welcher Rasse Du "
00666                          "in dieser Welt angehoeren moechtest. Alle Rassen "
00667                          "haben verschiedene Vor- und Nachteile, insgesamt "
00668                          "aber gleich gute Chancen. Auch das Startgebiet "
00669                          "haengt von der ausgewaehlten Rasse ab. Im "
00670                          "Normalfall kann die Rasse nicht mehr gewechselt "
00671                          "werden, nachdem sie einmal ausgewaehlt wurde. "
00672                          "Ueberlege Dir Deine Entscheidung also gut. Derzeit "
00673                          "stehen folgende Rassen zur Auswahl:\n\n", 78 ) );
00674 
00675     for ( i = 0, j = sizeof(races); i < j; i++ )
00676         printf( "% 2d. %-30s   %s", i+1, capitalize(races[i][1]),
00677                 (i % 2 ? "\n" : "| ") );
00678 
00679     if ( sizeof(races) % 2 )
00680         write( "\n" );
00681 
00682     write( break_string( "\nDurch Eingabe einer Ziffer waehlst Du die Rasse "
00683                          "aus, durch Eingabe eines \"\?\" gefolgt von einer "
00684                          "Ziffer erhaelst Du naehere Informationen ueber "
00685                          "eine Rasse. Ein \"\?\" allein wiederholt diese "
00686                          "Liste.", 78, 0, 1 ) );
00687 
00688     if (newbie)
00689     {
00690                     write(break_string("\nAls Neuling solltest Du Dich NICHT fuer "
00691                                                                     "die Dunkelelfen entscheiden. Diese "
00692                                                                     "Rasse hat einige Probleme im Umgang "
00693                                                                     "mit den anderen Rassen und mit dem "
00694                                                                     "Sonnenlicht.",78,0,BS_LEAVE_MY_LFS));
00695     }
00696     write( "\nWas willst Du tun: " );
00697 
00698     input_to( "get_race_answer" );
00699     return;
00700 }

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

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

static int check_illegal ( string  str  )  [static]

Definiert in Zeile 221 der Datei login.c.

Benutzt ctime(), log_file, master, query_ip_name() und query_ip_number().

Wird benutzt von logon2().

00222 {
00223     string res;
00224 
00225     res = (string)master()->QuerySBanished(query_ip_number(this_object()));
00226 
00227     if ( res ){
00228         write( res );
00229         log_file( "LOGIN_DENY", sprintf( "%s: %-11s %-15s (%s)\n",
00230                                          ctime(time())[4..15], str,
00231                                          query_ip_number(this_object()),
00232                                          query_ip_name(this_object()) ) );
00233         this_object()->remove();
00234         return 1;
00235     }
00236 
00237     return 0;
00238 }

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

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

static int check_password ( string  str  )  [static]

Definiert in Zeile 515 der Datei login.c.

Benutzt crypt, ctime(), destruct(), invis, level, load_player_object(), log_file, loginfails, loginname, master, password, query_ip_name(), query_ip_number(), save_object() und SECURESAVEPATH.

00516 {
00517     write( "\n" );
00518 
00519     // Invis einloggen?
00520     if (strlen(str) > 1 && str[0] == '-') {
00521                 invis = 1;
00522                 str = str[1..];
00523     }
00524 
00525     // welcher Hash ists denn?
00526     if (strlen(password) > 13) {
00527                 // MD5-Hash
00528                 str = md5_crypt(str, password);
00529     }
00530     else if (strlen(password) > 2) {
00531                 // Crypt-Hash
00532                 str = crypt(str, password[0..1]);
00533     }
00534     else {
00535                 // keiner von beiden Hashes -> ungueltiges PW
00536                 str = 0;
00537     }
00538 
00539     if ( !stringp(str) || str != password ) {
00540                 // Hashes stimmen nicht ueberein -> und schluss...
00541                 write( "Falsches Passwort!\n" );
00542       
00543                 log_file( (level < 60 ? "LOGINFAIL" : "ARCH/LOGINFAIL"),
00544                     sprintf( "PASSWORD: %-11s %s, %-15s (%s)\n",           
00545                               loginname, ctime(time())[4..15],
00546                               query_ip_number(this_object()),           
00547                                       query_ip_name(this_object()) ), 200000 );
00548       
00549                 loginfails++;
00550                 save_object( SECURESAVEPATH + loginname[0..0] + "/" + loginname );
00551                 master()->RemoveFromCache( loginname );
00552                 destruct( this_object() );
00553                 return 1;
00554     }
00555 
00556     if ( loginfails ) {
00557         write( loginfails + " fehlgeschlagene" + (loginfails == 1 ? "r" : "") +
00558                " Login-Versuch" + (loginfails == 1 ? "" : "e") +
00559                " seit dem letzten erfolgreichen Login.\n" );
00560         loginfails = 0;
00561     }
00562 
00563     save_object( SECURESAVEPATH + loginname[0..0] + "/" + loginname );
00564     master()->RemoveFromCache( loginname );
00565 
00566     load_player_object(0);
00567     return 1;
00568 }

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

static int check_too_many_from_same_ip (  )  [static]

Definiert in Zeile 189 der Datei login.c.

Benutzt addr(), ctime(), destruct(), log_file, MUDNAME, ob(), P_AGE, query_ip_name() und query_ip_number().

Wird benutzt von logon2().

00190 {
00191     object *u;
00192     string ip;
00193 
00194     ip = query_ip_number(this_object());
00195     u = filter(users(), function status (object ob, string addr, int a) {
00196         return query_ip_number(ob) == addr
00197                && ob->QueryProp(P_AGE) < a;
00198     }, ip, 12*60*60); // 24h in heart_beats
00199 
00200     if ( sizeof(u) > 25 ){
00201         write( "\nDa anscheinend gerade jemand von Deiner Adresse aus "
00202                "versucht, das \n"MUDNAME" mit neuen Charakteren zu "
00203                "ueberschwemmen, werden momentan \nnur aeltere Charaktere "
00204                "von dieser Adresse zugelassen.\nWenn Du meinst, dass es "
00205                "sich um einen Fehler handelt, logg Dich bitte als \n"
00206                "Gast ein und sprich einen Erzmagier oder Gott an.\n" );
00207         
00208         log_file( "LOGIN_DENY", sprintf( "%s: >10 Spieler von %-15s (%s)\n",
00209                                          ctime(time())[4..15],
00210                                          query_ip_number(this_object()),
00211                                          query_ip_name(this_object()) ) );
00212         
00213         destruct(this_object());
00214         return 1;
00215     }
00216     else
00217         return 0;
00218 }

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

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

static int check_too_many_logons (  )  [static]

Definiert in Zeile 132 der Datei login.c.

Benutzt addr(), ctime(), log_file, ob(), query_ip_name() und query_ip_number().

Wird benutzt von logon().

00133 {
00134     object *u;
00135     string ip;
00136 
00137     ip = query_ip_number(this_object());
00138     // users() nehmen, falls nicht-interaktive Clones von login.c existieren.
00139     u = filter( users(), function status (object ob, string addr) {
00140         return object_name(ob) == "/secure/login"
00141                && query_ip_number(ob) == addr;
00142     }, ip );
00143 
00144     if ( sizeof(u) > 5 ){
00145         write( "\nEs laufen schon zu viele Anmeldungen von Deiner Adresse "
00146                "aus.\nProbier es bitte in ein bis zwei Minuten noch "
00147                "einmal.\n" );
00148         
00149         log_file( "LOGIN_DENY", sprintf( "%s: >5 Logons von %-15s (%s)\n",
00150                                          ctime(time())[4..15],
00151                                          query_ip_number(this_object()),
00152                                          query_ip_name(this_object()) ) );
00153         return 1;
00154     }
00155     else
00156         return 0;
00157 }

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

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

public void create (  ) 

Definiert in Zeile 1019 der Datei login.c.

Benutzt creation_date, hc_play, loginfails, loginname, myself und realip.

01020 {
01021     if( myself )
01022         return;
01023 
01024     loginname = "logon";
01025     hc_play=0;
01026     creation_date = -1;
01027     catch( load_object( "/secure/merlin");publish );
01028     loginfails = 0;
01029     realip="";
01030 }

static void get_hc_answer ( string  str  )  [static]

Definiert in Zeile 756 der Datei login.c.

Benutzt ask_hc_question(), break_string(), BS_LEAVE_MY_LFS, hc_confirm, hc_play, load_player_ob_2(), loginname, master, reask_hc_question() und shell.

00757 {
00758 
00759     if ( str == "?" )
00760     {
00761       write( break_string(
00762             "Stirbst Du, so wirst Du normalerweise wiedergeboren und kannst "+
00763             "mit dem Spielen fortfahren. Waehlst Du hier nur ein Leben, so ist "+
00764             "der Tod das Ende des Spielens. Als Neuling solltest Du diese Frage "+
00765             "mit \"nein\" beantworten!\n\n",78,0,BS_LEAVE_MY_LFS));
00766         return ask_hc_question();
00767     }
00768     
00769     str=lower_case(str);
00770     if (str=="ja" || str=="j" )
00771     {
00772       if(hc_confirm==0)
00773       {
00774         return reask_hc_question();
00775       }
00776       else
00777       {
00778         hc_play=1;
00779         write( "Ok, Du hast nun nur ein Leben.\n" );
00780       }
00781     }
00782     else if (str=="nein" || str="n" )
00783     {
00784       hc_play=0;
00785       write( "Ok, Du erfaehrst die Gnade der Wiedergeburt.\n" );
00786     }
00787     else
00788     {
00789       write("Was willst Du tun?\n");
00790       return ask_hc_question();
00791     }
00792 
00793 
00794     master()->set_player_object( loginname, shell );
00795     load_player_ob_2( shell, 0 );
00796     return;
00797 }

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

static void get_mud_played_answer ( string  str  )  [static]

Definiert in Zeile 735 der Datei login.c.

Benutzt ask_mud_played_question(), ask_race_question(), MUDNAME und newbie.

00736 {
00737                 if ( str == "ja" || str=="j")
00738                                 {
00739                                 newbie=0;
00740                                 return ask_race_question();
00741                                 }
00742                 if ( str != "nein" && str!="n")
00743                 {
00744                                 write("\n\nAntworte bitte mit ja oder nein.\n\n");
00745                                                                 
00746                                 return ask_mud_played_question();
00747                 }
00748         newbie=1;
00749                 write("\n\nEine kleine Einfuehrung in das "MUDNAME" bekommst "
00750                                                 "Du auch hier:\n\n"
00751                                                 "http://mg.mud.de/newweb/hilfe/tutorial/inhalt.shtml\n\n");
00752                 return ask_race_question();
00753                 
00754 }

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

static void get_race_answer ( string  str  )  [static]

Definiert in Zeile 703 der Datei login.c.

Benutzt ask_hc_question(), ask_race_question(), hc_confirm, input_to(), P_RACE_DESCRIPTION, races und shell.

00704 {
00705     int num;
00706 
00707     if ( str == "?" )
00708         return ask_race_question();
00709 
00710     if ( sscanf( str, "?%d", num ) ){
00711         if ( num < 1 || num > sizeof(races) ){
00712             write( "Das geht nicht.\n\nWas willst Du tun: " );
00713             input_to( "get_race_answer" );
00714             return;
00715         }
00716 
00717         write( call_other( races[num - 1][0], "QueryProp", P_RACE_DESCRIPTION )
00718                + "\nWas willst Du tun: " );
00719         input_to( "get_race_answer" );
00720         return;
00721     }
00722 
00723     if ( sscanf( str, "%d", num ) && num >= 1 && num <= sizeof(races) ){
00724         write( "Ok, Du bist jetzt ein " + capitalize(races[num-1][1]) + "\n" );
00725 
00726         shell = races[num-1][0];
00727         hc_confirm=0;
00728         return ask_hc_question();
00729     }
00730 
00731     write(" Wie bitte?\n\nWas willst Du tun: " );
00732     input_to( "get_race_answer" );
00733 }

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

static void load_player_ob_2 ( string  obname,
int  guestflag 
) [static]

Definiert in Zeile 939 der Datei login.c.

Benutzt cap_name, creation_date, ctime(), destruct(), dtime(), err, F_MODE_AS, GUESTMASTER, hc_play, invis, IS_WIZARD, log_file, loginname, name, ob(), P_AGE, PROTECTED, query_ip_name(), query_ip_number(), realip, SAVE, SECURED und shell.

Wird benutzt von get_hc_answer() und load_player_object().

00940 {
00941     object blueprint;
00942     string err, ob_name;
00943     object ob, old_ob;
00944 
00945     /* start player activity */
00946     log_file( "ENTER", sprintf( "%-11s %s, %-15s (%s).\n",
00947                                 capitalize(name), ctime(time())[4..15],
00948                                 query_ip_number(this_object()),
00949                                 query_ip_name(this_object()) ), 200000 );
00950 
00951     seteuid(loginname);
00952 
00953     /* load the "real" player object */
00954     /* If some asshole has moved the blueprint */
00955     if ( objectp(blueprint = find_object(obname))  && environment(blueprint) )
00956         destruct(blueprint);
00957 
00958     if ( err = catch(ob = clone_object(obname);publish) ){
00959         log_file( "SHELLS", "Failed to load shell " + obname + ", " +
00960                   dtime(time()) + ", " + loginname + "\n" + err + "\n\n" );
00961 
00962         write( "Konnte das passende Playerobjekt nicht laden. Lade "
00963                "stattdessen\ndas Objekt Mensch. BITTE ERZMAGIER "
00964                "BENACHRICHIGEN !\n" );
00965         err = catch(ob = clone_object("std/shells/human");publish);
00966     }
00967 
00968     if ( !ob || err ) {
00969         write( "Error on loading " + shell + "\nError = " + err + "\n" );
00970         destruct( this_object() );
00971         return;
00972     }
00973 
00974     if ( guestflag )
00975         catch( GUESTMASTER->set_guest( guestflag, ob );publish );
00976 
00977     ob_name = explode( object_name(ob), "#" )[0];
00978 
00979     if ( strlen(ob_name) > 11 && ob_name[0..11] == "/std/shells/" )
00980         ob_name = ob_name[11..];
00981 
00982     ob_name = ob_name + ":" + lower_case(cap_name);
00983 
00984   if( !guestflag ){
00985       if ( old_ob = find_object(ob_name) ){
00986           catch(old_ob->remove();publish);
00987 
00988           if ( old_ob )
00989               destruct( old_ob );
00990       }
00991 
00992       rename_object( ob, ob_name );
00993       ob->__reload_explore();
00994   }
00995 
00996   if(hc_play)
00997   {
00998     ob->set_hc_play(cap_name,1);
00999     log_file("HCPLAY",dtime(time())+" "+cap_name+" ist sehr mutig!\n");
01000   }
01001   
01002   exec( ob, this_object() );
01003   ob->set_realip(realip);
01004   ob->start_player( cap_name );
01005   ob->SetProp( "creation_date", creation_date );
01006   ob->Set( "creation_date", SAVE|SECURED|PROTECTED, F_MODE_AS );
01007 
01008   if ( invis && IS_WIZARD(ob) ){
01009       ob->SetProp( P_INVIS, ob->QueryProp(P_AGE) );
01010       tell_object( ob, "DU BIST UNSICHTBAR!\n" );
01011   }
01012   destruct( this_object() );
01013 }

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

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

static int load_player_object ( int  guestflag  )  [static]

Definiert in Zeile 800 der Datei login.c.

Benutzt break_string(), BS_LEAVE_MY_LFS, BS_SINGLE_SPACE, call_out(), cap_name, ctime(), destruct(), find_netdead(), find_player(), GUESTMASTER, i, IS_ARCH, IS_WIZARD, load_player_ob_2(), log_file, loginname, master, MUDNAME, name, ob(), P_LEVEL, realip, remove_interactive(), save_object(), secure_isavefile(), SECURESAVEPATH, select_race(), shell und user.

Wird benutzt von again_password(), check_password() und logon2().

00801 {
00802     object ob;
00803     string fname;
00804     int was_interactive;
00805 
00806     if ( sizeof(users()) >= 195 && !IS_WIZARD(loginname) ){
00807         write( "Die maximale Spielerzahl wurde bereits erreicht!!!\n"
00808                "Aus technischen Gruenden duerfen sich nur noch Magier "
00809                "einloggen.\nVersuch es spaeter noch einmal ...\n" );
00810         destruct( this_object() );
00811         return 1;
00812     }
00813     else if ( sizeof(users()) >= 198 && !IS_ARCH(loginname) ){
00814         write( "Die maximale Spieler- und Magierzahl wurde bereits erreicht!!!"
00815                "\nAus technischen Gruenden duerfen sich nur noch Erzmagier "
00816                "einloggen.\nVersuch es spaeter noch einmal ...\n" );
00817         destruct( this_object() );
00818         return 1;
00819     }
00820 
00821     if ( file_size("/etc/NOLOGIN")>=0 )
00822     {
00823       if (file_size("/etc/NOLOGIN.info")>0) {
00824         //NOLOGIN.info enthaelt evtl. weitergehende Informationen fuer 
00825         //Spieler, z.B. vorrauss. Wiederverfuegbarkeit.
00826         write(break_string(read_file("/etc/NOLOGIN.info"),78,"",
00827               BS_LEAVE_MY_LFS|BS_SINGLE_SPACE));
00828       }
00829       else {
00830         //sonst Standardmeldung ausgeben.
00831         write ("\nAufgrund von technischen Problemen ist das Einloggen ins "
00832                 MUDNAME" zur \nZeit nicht moeglich. Bitte versuch es "
00833                               "spaeter noch einmal.\n\n");
00834       }
00835       if ( IS_ARCH(loginname) || 
00836            member(explode(read_file("/etc/NOLOGIN")||"","\n"),
00837                   loginname)!=-1 )
00838       {
00839                 write("Im Moment koennen nur Erzmagier einloggen. Um Spieler "
00840               "wieder ins Spiel zu lassen, muss die Datei '/etc/NOLOGIN' "
00841                       "geloescht werden.\n\n ");
00842       } else {
00843         destruct( this_object() );
00844         return 1;                                               
00845       }
00846     }
00847 
00848     if ( (fname = (string)master()->secure_isavefile(loginname)) != "" ) {
00849         save_object( SECURESAVEPATH + loginname[0..0] + "/" + loginname );
00850         "/secure/master"->RemoveFromCache( loginname );
00851 
00852         // Just to be sure ...
00853         rm( fname + ".o" );
00854 
00855         log_file( "REACTIVATE", ctime(time()) + ": " + capitalize(loginname) +
00856                   " reactivated\n" );
00857     }
00858 
00859     if ( guestflag ){
00860         if ( catch(guestflag = (int)GUESTMASTER->new_guest();publish) || !guestflag ){
00861             write( "Derzeit kein Gastlogin moeglich!\n" );
00862             destruct( this_object() );
00863         }
00864 
00865         loginname = "gast" + guestflag;
00866         cap_name = capitalize(loginname);
00867         name = cap_name;
00868 
00869         if ( !(ob = find_player(loginname) || find_netdead(loginname)) ){
00870             object *user;
00871             int i;
00872 
00873             // gegen Horden von Gast1 - wenn ein Gast noch am Prompt fuer
00874             // das Geschlecht haengt, ist er ueber find_player() noch nicht
00875             // zu finden ...
00876             for ( i = sizeof(user = users() - ({ 0, this_object() })); i--; )
00877                 if ( object_name(user[i])[0..11] == "/std/shells/" &&
00878                      getuid(user[i]) == loginname ){
00879                     ob = user[i];
00880                     break;
00881                 }
00882         }
00883 
00884         if ( ob ){
00885             tell_object( ob, "Ein anderer Spieler moechte diesen Gastzugang "
00886                          "jetzt benutzen. Wenn es Dir hier\ngefallen hat, "
00887                          "ueberleg Dir doch einen Charakternamen und komm "
00888                          "unter diesem\nNamen wieder!\n" );
00889             destruct(ob);
00890         }
00891 
00892         load_player_ob_2( "std/shells/human", guestflag );
00893 
00894         return 1;
00895     }
00896     else {
00897         /* Test if we are already playing */
00898         was_interactive = 0;
00899         ob = find_player(loginname) || find_netdead(loginname);
00900 
00901         if (ob) {
00902             write( "Du nimmst schon am Spiel teil!\n" );
00903             write( "Verwende Deine alte sterbliche Huelle ...\n" );
00904 
00905             if ( interactive(ob) ) {
00906                 /* The other object is still interactive; reconnect that "soul"
00907                    to a dummy object and destruct that, thus disconnecting the
00908                    other probably linkdead user. The real "body" is still
00909                    there for reconnecting by login.c */
00910                 remove_interactive(ob);
00911                 was_interactive = 1;
00912             }
00913 
00914             /* Now reconnect to the old body */
00915             exec( ob, this_object() );
00916                     /* NewbieIntroMsg? */
00917                     ob->NewbieIntroMsg();
00918                     ob->set_realip(realip);
00919             if ( ((int)ob->QueryProp(P_LEVEL)) == -1 )
00920                 ob->start_player( cap_name );
00921             else
00922                 ob->Reconnect( was_interactive );
00923 
00924             call_out( "remove", 1 );
00925             return 1;
00926         }
00927     }
00928 
00929     /* read player object from passwd file */
00930     if ( stringp(shell) && shell != "" )
00931         load_player_ob_2 ( shell, 0 );
00932     else
00933         select_race();
00934 
00935     return 1;
00936 }

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

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

public nomask string loginname (  ) 

Definiert in Zeile 127 der Datei login.c.

Benutzt loginname.

00128 {
00129     return loginname ? loginname : "";
00130 }

public nomask int logon (  ) 

Definiert in Zeile 163 der Datei login.c.

Benutzt call_out(), check_too_many_logons(), destruct(), hc_play, input_to(), loginname, newbie, realip und SendTelopts().

00164 {
00165     loginname = "logon";
00166     hc_play=0;
00167     newbie=0;
00168     realip="";
00169     
00170     SendTelopts();
00171 
00172     if ( check_too_many_logons() ){
00173         destruct(this_object());
00174         return 0;
00175     }
00176 
00177     // ist die Verbindung schon wieder weg?
00178     if (objectp(this_object()) && interactive(this_object())) {
00179       cat( "/etc/WELCOME" );
00180       write( "Wie heisst Du denn (\"neu\" fuer neuen Spieler)? " );
00181     }
00182 
00183     input_to( "logon2" );
00184     call_out( "time_out", 120 );
00185     return 1;
00186 }

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

static int logon2 ( string  str  )  [static]

Definiert in Zeile 273 der Datei login.c.

Benutzt cap_name, check_illegal(), check_late_player(), check_too_many_from_same_ip(), creation_date, destruct(), domains, dtime(), ek, ektips, ep, fptips, guilds, i, input_to(), level, load_player_object(), log_file, loginname, master, mq, name, neu, password, PROXIES, query_ip_name(), query_ip_number(), QueryBanished(), QueryTBanished(), realip, restore_object(), secure_savefile(), shell, SSL_GRRETING, strftime(), user und valid_name().

00274 {
00275     int i, arg;
00276     mixed txt;
00277 
00278     if ( !str || str == "" ){
00279         write( "Abbruch!\n" );
00280         destruct( this_object() );
00281         return 0;
00282     }
00283 
00284     // Unterstuetzung fuer das Mud Server Status Protocol
00285     // (http://tintin.sourceforge.net/mssp/)
00286 #ifdef MSSP_SUPPORT
00287     if (str == "MSSP-REQUEST") {
00288       "/secure/misc/mssp"->print_mssp_response();
00289       log_file( "MSSP.log", sprintf( "%s: %-15s (%s)\n",
00290                                          strftime("%c"),
00291                                          query_ip_number(this_object()),
00292                                          query_ip_name(this_object()) ) );
00293       write( "Wie heisst Du denn (\"neu\" fuer neuen Spieler)? " );
00294       input_to("logon2");
00295       return 1;
00296     }
00297 #endif
00298 
00299     if(strstr(str,SSL_GRRETING)==0)
00300     {
00301       if( member(PROXIES,query_ip_number(this_object()))>-1 )
00302       {
00303         realip=str[strlen(SSL_GRRETING)..];
00304       } // andere IPs werden einfach ignoriert. -> log/PROXY.REQ ?
00305       input_to( "logon2" );
00306       return 1;
00307     }
00308     
00309     if ( loginname != "logon" ) {
00310         log_file( "ILLEGAL", sprintf( "%s Illegal patch of login: "
00311                                       "loginname = %O\n",
00312                                       dtime(time()), loginname ) );
00313         destruct( this_object() );
00314         return 0;
00315     }
00316 
00317     cap_name = capitalize(str);
00318     str = lower_case(str);
00319 
00320     if ( str == "neu" && !neu ){
00321         cat( "/etc/WELCOME_NEW" );
00322         neu = 1;
00323         input_to( "logon2" );
00324         return 1;
00325     }
00326 
00327     if ( !valid_name(str) ){
00328         if ( !neu )
00329             write( "Wie heisst Du denn (\"neu\" fuer neuen Spieler)? " );
00330         else
00331             write( "Bitte gib Dir einen anderen Namen: " );
00332 
00333         input_to( "logon2" );
00334         return 1;
00335     }
00336 
00337     if ( sscanf( str, "gast%d", arg ) == 1 ){
00338         write( "Du meinst wohl 'Gast' ...\n" );
00339         str = "gast";
00340     }
00341 
00342     loginname = str;
00343 
00344     /* read the secure save file to see if character already exists */
00345     if ( str != "gast" &&
00346          !restore_object( master()->secure_savefile(str) ) ){
00347         object *user;
00348 
00349         if ( !neu ){
00350             write( "Es existiert kein Charakter mit diesem Namen.\n" );
00351             write( "Falls Du einen neuen Charakter erschaffen moechtest, "
00352                    "tippe bitte \"neu\" ein.\n" );
00353 
00354             write( "Wie heisst Du denn (\"neu\" fuer neuen Spieler)? " );
00355             loginname = "logon";
00356             input_to( "logon2" );
00357             return 1;
00358         }
00359 
00360         for ( i = sizeof(user = users() - ({ 0, this_object() })); i--; )
00361             if ( object_name(user[i])[0..12] == "/secure/login" &&
00362                  ((string)user[i]->loginname()) == loginname ){
00363                 write( "Eine Anmeldung fuer diesen Namen laeuft bereits.\n" );
00364                 destruct( this_object() );
00365                 return 1;
00366             }
00367 
00368         // Site-Banish checken
00369         if ( check_illegal(str) )
00370             return 1;
00371 
00372         if ( check_too_many_from_same_ip() )
00373             return 1;
00374 
00375         /* new character */
00376         if ( strlen(str) < 3 ){
00377             write( "Der Name ist zu kurz.\nVersuch einen anderen: " );
00378             loginname = "logon";
00379             input_to( "logon2" );
00380             return 1;
00381         }
00382 
00383         
00384         if ( (txt = (string)master()->QueryBanished(str)) ){
00385             if ( txt != "Dieser Name ist gesperrt." )
00386                 txt = sprintf("Hoppla - dieser Name ist reserviert oder gesperrt "
00387                     "(\"gebanisht\")!\nGrund: %s\n",txt);
00388             else
00389                 txt = "Hoppla - dieser Name ist reserviert oder gesperrt "
00390                     "(\"gebanisht\")!\n";
00391             write( txt + "Bitte gib Dir einen anderen Namen: " );
00392             loginname = "logon";
00393             input_to( "logon2" );
00394             return 1;
00395         }
00396 
00397         /* Initialize the new secure savefile */
00398         name = str;
00399         password = "";
00400         level = 0;
00401         domains = ({ });
00402                 guilds = ({ }); 
00403         shell = "";
00404         ep = "";
00405         ek = "";
00406         mq = "";
00407                                 ektips="";
00408                                 fptips="";
00409         creation_date = time();
00410 
00411         write( "Waehle ein Passwort: " );
00412         input_to( "new_password", 1 );
00413         return 1;
00414     }
00415     else {
00416         if ( str == "gast" ){
00417             if ( check_illegal(str) )
00418                 return 1;
00419 
00420             load_player_object(1);
00421             return 1;
00422         }
00423 
00424         if ( neu ){
00425             write( "Es existiert bereits ein Charakter dieses Namens.\n" );
00426             write( "Gib Dir einen anderen Namen: " );
00427             loginname = "logon";
00428             input_to( "logon2" );
00429             return 1;
00430         }
00431 
00432         if ( (int)master()->check_late_player(str) )
00433         {
00434             write( "Dieser Spieler hat uns leider fuer immer verlassen.\n" );
00435             write( "Wie heisst Du denn (\"neu\" fuer neuen Spieler)? " );
00436             loginname = "logon";
00437             input_to( "logon2" );
00438             return 1;
00439         }
00440 
00441         if ( txt = (string)master()->QueryTBanished(str) ){
00442             write( txt );
00443             write( "Wie heisst Du denn (\"neu\" fuer neuen Spieler)? " );
00444             loginname = "logon";
00445             input_to( "logon2" );
00446             return 1;
00447         }
00448 
00449         if ( creation_date > (time() - 30*24*60*60)
00450              && check_too_many_from_same_ip() )
00451             return 1;
00452 
00453         write( "Schoen, dass Du wieder da bist, "+capitalize(str)+"!\n" );
00454 
00455         if ( !stringp(password) || password == "" ) {
00456             write( "Du hast KEIN PASSWORD!\n" );
00457             write( "Benutze den \"password\"-Befehl, um das zu aendern !\n" );
00458             load_player_object(0);
00459             return 1;
00460         }
00461 
00462         write( "Passwort: " );
00463         input_to( "check_password", 1 );
00464         return 1;
00465     }
00466 }

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

static mixed new_load_player_ob_2 ( string  obname  )  [static]

Definiert in Zeile 1119 der Datei login.c.

Benutzt cap_name, creation_date, destruct(), dtime(), err, F_MODE_AS, log_file, loginname, M_NOCHECK, ob(), PROTECTED, realip, SAVE, SECURED, set_object_heart_beat() und shell.

Wird benutzt von new_load_player_object().

01120 {
01121     object blueprint;
01122     string err, ob_name;
01123     object ob, old_ob;
01124 
01125     seteuid(loginname);
01126 
01127     /* load the "real" player object */
01128     /* If some asshole has moved the blueprint */
01129     if ( objectp(blueprint = find_object(obname)) && environment(blueprint) )
01130         destruct( blueprint );
01131 
01132     err = catch(ob = clone_object(obname);publish);
01133 
01134     if ( err ){
01135         log_file( "SHELLS", "Failed to load shell " + obname + ", " +
01136                   dtime(time()) + ", " + loginname + "\n" + err + "\n\n" );
01137 
01138         write( "Konnte das passende Playerobjekt nicht laden. "
01139                "Lade stattdessen\ndas Objekt Mensch!\n" );
01140 
01141         err = catch(ob = clone_object( "std/shells/human" );publish );
01142     }
01143 
01144     if ( !ob || err ){
01145         write( "Error on loading " + shell + "\nError = " + err + "\n" );
01146         destruct( this_object() );
01147         return 0;
01148     }
01149 
01150     ob_name = explode( object_name(ob), "#" )[0];
01151 
01152     if ( strlen(ob_name) > 11 && ob_name[0..11] == "/std/shells/" )
01153         ob_name = ob_name[11..];
01154 
01155     ob_name = ob_name + ":" + lower_case(cap_name);
01156 
01157     if ( old_ob = find_object(ob_name) ){
01158         catch( old_ob->remove(); publish );
01159 
01160         if ( old_ob )
01161             destruct( old_ob );
01162     }
01163 
01164     rename_object( ob, ob_name );
01165     ob->__reload_explore();
01166     ob->set_realip(realip);
01167     ob->start_player(cap_name);
01168     ob->SetProp( "creation_date", creation_date );
01169     ob->Set( "creation_date", SAVE|SECURED|PROTECTED, F_MODE_AS );
01170 
01171     ob->move( "/room/nowhere", M_NOCHECK );
01172     set_object_heart_beat( ob, 0 );
01173     destruct( this_object() );
01174 
01175     return ob;
01176 }

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

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

static mixed new_load_player_object (  )  [static]

Definiert in Zeile 1100 der Datei login.c.

Benutzt destruct(), find_netdead(), find_player(), loginname, new_load_player_ob_2() und shell.

Wird benutzt von new_logon().

01101 {
01102     if ( find_player(loginname) || find_netdead(loginname) ){
01103         write( "Der Spieler ist bereits online oder netztot!\n" );
01104         destruct( this_object() );
01105         return 2;
01106     }
01107 
01108     /* read player object from passwd file */
01109     if ( stringp(shell) && shell != "" )
01110         return new_load_player_ob_2( shell );
01111     else {
01112         write( "Keine Shell angegeben!\n" );
01113         destruct( this_object() );
01114         return 0;
01115     }
01116 }

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

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

public mixed new_logon ( string  str  ) 

Definiert in Zeile 1066 der Datei login.c.

Benutzt ARCH_SECURITY, cap_name, destruct(), loginname, master, new_load_player_object(), process_call(), restore_object(), ROOTID und secure_savefile().

01067 {
01068     seteuid(getuid()); // sonst funkt ARCH_SECURITY nicht
01069 
01070     if ( !ARCH_SECURITY || process_call() ){
01071         write( "Nur fuer Erzmagier erlaubt!\n" );
01072         destruct( this_object() );
01073         return -1;
01074     }
01075 
01076     if ( !str || str == "" ){
01077         write( "Kein Name angegeben!\n" );
01078         destruct( this_object() );
01079         return 0;
01080     }
01081 
01082     cap_name = capitalize(str);
01083     str = lower_case(str);
01084     loginname = str;
01085     seteuid(ROOTID);
01086 
01087     /* read the secure save file to see if character already exists */
01088     if ( !restore_object( master()->secure_savefile(str) ) ){
01089         write( "Kein solcher Spieler!\n" );
01090         destruct( this_object() );
01091         return 0;
01092     }
01093     else {
01094         write( "Ok, der Spieler " + capitalize(str) + " existiert!\n" );
01095         return new_load_player_object();
01096     }
01097 }

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

static int new_password ( string  str  )  [static]

Definiert in Zeile 469 der Datei login.c.

Benutzt input_to(), loginname, master und password.

00470 {
00471     write( "\n" );
00472 
00473     if ( !str || str == "" )
00474         return remove();
00475 
00476     password = str;
00477 
00478     if ( !master()->good_password( str, loginname ) ){
00479         write( "Bitte gib ein Passwort an: " );
00480         input_to( "new_password", 1 );
00481         return 1;
00482     }
00483 
00484     write( "\nZur Erinnerung: Es ist  v e r b o t e n, andere Spieler "
00485            "anzugreifen!\n" );
00486     write( "Das gilt auch fuer Froesche, bei denen \"Ein Frosch namens "
00487            "XXXXX\" steht.\n\n" );
00488     write( "Passwort bitte nochmal eingeben: " );
00489     input_to( "again_password", 1 );
00490     return 1;
00491 }

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

public nomask int query_prevent_shadow (  ) 

Definiert in Zeile 1045 der Datei login.c.

01046 {
01047     return 1;
01048 }

public string query_real_name (  ) 

Definiert in Zeile 1039 der Datei login.c.

Wird benutzt von _set_fraternitasdonoarchmagorum(), GiveQuest(), schreib(), udp_channel() und ww().

01040 {
01041     return "<logon>";
01042 }

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

string query_realip (  ) 

Definiert in Zeile 1178 der Datei login.c.

Benutzt realip.

01179 {
01180   return realip ? realip : "";
01181 }

static void reask_hc_question (  )  [static]

Definiert in Zeile 610 der Datei login.c.

Benutzt break_string(), BS_LEAVE_MY_LFS, hc_confirm, input_to() und MUDNAME.

Wird benutzt von get_hc_answer().

00611 {
00612   hc_confirm=1;
00613   write( break_string(
00614             "Du moechtest den Gefahren dieser Welt mit nur einem Leben "
00615             "entgegentreten. Doch bedenke wohl, dies ist ein schwerer Weg "
00616             "und bist Du erstmal in das Reich des Todes eingetreten, so gibt "
00617             "es kein Entrinnen.\n"
00618             "Als Neuling solltest Du Dir ueberlegen, ob Du das "
00619             MUDNAME" vielleicht nicht doch lieber mit der Moeglichkeit zur "
00620             "Wiedergeburt erkunden moechtest.\n"
00621             "Solltest Du Dir noch nicht ganz ueber die Folgen Deiner Entscheidung "
00622             "im Klaren sein, bekommst du mit \"?\" Hilfe.\n\n",78,0,BS_LEAVE_MY_LFS));
00623 
00624     write( "\nNun entscheide Dich, willst Du wirklich nur ein Leben?(ja,nein,?): " );
00625 
00626     input_to( "get_hc_answer" );
00627     return;
00628 }

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

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

public int remove (  ) 

Definiert in Zeile 1059 der Datei login.c.

Benutzt destruct().

01060 {
01061     destruct( this_object() );
01062     return 1;
01063 }

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

static void select_race (  )  [static]

Definiert in Zeile 571 der Datei login.c.

Benutzt i, P_RACE und races.

Wird benutzt von load_player_object().

00572 {
00573     int i;
00574     string s;
00575 
00576     races = get_dir( "/std/shells/*.c" );
00577 
00578     // Mensch soll immer als erstes in der Auswahlliste stehen.
00579     if (member(races,"human.c")!=-1)
00580                     races=({"human.c"})+(races-({"human.c"}));
00581     
00582     for ( i = sizeof(races); i--; ){
00583         races[i] = "/std/shells/" + races[i][0..<3];
00584         s = 0;
00585 
00586         if ( catch(s = (string)call_other( races[i], "QueryAllowSelect" ); publish) 
00587                     || !s)
00588             s = 0;
00589         else if ( catch(s = (string)call_other( races[i], "QueryProp", P_RACE );publish) )
00590                     s = 0;
00591 
00592         if ( !strlen(s) )
00593             races[i..i] = ({});
00594         else
00595             races[i] = ({ races[i], s });
00596     }
00597 
00598     if ( sizeof(races) == 1 ){
00599         write( "Es gibt nur eine Rasse, Du hast also keine Wahl.\n" );
00600 
00601         shell = races[0][0];
00602         master()->set_player_object( loginname, shell );
00603 
00604         return load_player_ob_2( shell, 0 );
00605     }
00606 
00607     return ask_mud_played_question();
00608 }

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

static void SendTelopts (  )  [static]

Definiert in Zeile 101 der Datei login.c.

Benutzt DO, IAC, TELOPT_ENVIRON, TELOPT_EOR, TELOPT_LINEMODE, TELOPT_NAWS, TELOPT_NEWENV, TELOPT_TSPEED, TELOPT_TTYPE, TELOPT_XDISPLOC, TN und WILL.

Wird benutzt von logon().

00102 {
00103     efun::binary_message(({
00104         IAC,DO,TELOPT_LINEMODE,
00105             IAC,WILL,TELOPT_EOR,
00106             IAC,DO,TELOPT_NAWS,
00107             IAC,DO,TELOPT_TTYPE,
00108             IAC,DO,TELOPT_XDISPLOC,
00109             IAC,DO,TELOPT_ENVIRON,
00110             IAC,DO,TELOPT_NEWENV,
00111             IAC,DO,TELOPT_TSPEED,
00112             }),3);
00113 
00114     TN=(["sent":([
00115                   TELOPT_LINEMODE:0;DO;0,
00116                   TELOPT_EOR:WILL;0;0,
00117                   TELOPT_NAWS:0;DO;0,
00118                   TELOPT_TTYPE:0;DO;0,
00119                   TELOPT_ENVIRON:0;DO;0,
00120                   TELOPT_NEWENV:0;DO;0,
00121                   TELOPT_XDISPLOC:0;DO;0,
00122                   TELOPT_TSPEED:0;DO;0,
00123                   ])]);
00124 }

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

public string short (  ) 

Definiert in Zeile 1033 der Datei login.c.

01034 {
01035     return "<Einloggender Teilnehmer>.\n";
01036 }

static void time_out (  )  [static]

Definiert in Zeile 1051 der Datei login.c.

Benutzt destruct().

01052 {
01053     if (this_player())
01054       tell_object(this_player(),"Time out!");
01055     destruct( this_object() );
01056 }

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

static int valid_name ( string  str  )  [static]

Definiert in Zeile 245 der Datei login.c.

Benutzt i.

Wird benutzt von logon2().

00246 {
00247     int i;
00248 
00249     if ( str == "logon" ){
00250         write( "Der Name wuerde nur Verwirrung stiften.\n" );
00251         return 0;
00252     }
00253 
00254     i = strlen(str);
00255 
00256     if ( i > 11 ){
00257         write( "Dein Name ist zu lang, nimm bitte einen anderen.\n" );
00258         return 0;
00259     }
00260 
00261     for ( ; i--; )
00262         if ( str[i] < 'a' || str[i] > 'z' ) {
00263             write( "Unerlaubtes Zeichen '" + str[i..i] + "' im Namen: " + str
00264                                                     + "\n" );
00265             write( "Benutze bitte nur Buchstaben ohne Umlaute.\n" );
00266             return 0;
00267         }
00268 
00269     return 1;
00270 }

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


Variablen-Dokumentation

string banish [static]

Definiert in Zeile 63 der Datei login.c.

inherit secure mini_telnetneg c
string cap_name [static]

Definiert in Zeile 60 der Datei login.c.

Wird benutzt von load_player_ob_2(), load_player_object(), logon2(), new_load_player_ob_2() und new_logon().

Definiert in Zeile 52 der Datei login.c.

Wird benutzt von create(), find_userinfo(), load_player_ob_2(), logon2() und new_load_player_ob_2().

string* domains

Definiert in Zeile 56 der Datei login.c.

string ek

Definiert in Zeile 53 der Datei login.c.

Wird benutzt von ClearScoreBit(), find_userinfo(), logon2() und SetScoreBit().

string ektips

Definiert in Zeile 54 der Datei login.c.

Wird benutzt von check_player(), find_userinfo(), getFreeEKsForPlayer() und logon2().

string ep
string fptips

Definiert in Zeile 55 der Datei login.c.

Wird benutzt von find_userinfo() und logon2().

string * guilds

Definiert in Zeile 56 der Datei login.c.

Wird benutzt von add_guild_master(), find_userinfo(), guild_master(), logon2() und remove_guild_master().

int hc_confirm [static]

Definiert in Zeile 67 der Datei login.c.

Wird benutzt von get_hc_answer(), get_race_answer() und reask_hc_question().

int hc_play [static]

Definiert in Zeile 65 der Datei login.c.

int invis [static]

Definiert in Zeile 58 der Datei login.c.

int level

Definiert in Zeile 52 der Datei login.c.

Definiert in Zeile 52 der Datei login.c.

Wird benutzt von check_password() und create().

public nomask string loginname [static]
string mq
object myself [static]

Definiert in Zeile 61 der Datei login.c.

Wird benutzt von create().

string name

Definiert in Zeile 53 der Datei login.c.

int neu [static]

Definiert in Zeile 58 der Datei login.c.

Wird benutzt von change(), changepath(), logon2() und NewbieIntroMsg().

int newbie [static]

Definiert in Zeile 66 der Datei login.c.

Wird benutzt von ask_hc_question(), ask_race_question(), get_mud_played_answer() und logon().

string password

Definiert in Zeile 53 der Datei login.c.

Wird benutzt von again_password(), check_password(), delete_player(), find_userinfo(), logon2() und new_password().

mixed* races [static]

Definiert in Zeile 64 der Datei login.c.

Wird benutzt von ask_race_question(), get_race_answer() und select_race().

string realip [static]
string shell
string * uidstotakecare

Definiert in Zeile 56 der Datei login.c.

Wird benutzt von find_userinfo().

string* userentry [static]

Definiert in Zeile 62 der Datei login.c.

Wird benutzt von query_player_object().

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