base.c-Dateireferenz

#include <sys_debug.h>
#include <logging.h>
#include <werliste.h>
#include <time.h>
#include <player/skills.h>
#include <player.h>
#include <properties.h>
#include <udp.h>
#include <config.h>
#include <ansi.h>
#include <wizlevels.h>
#include <living.h>
#include <attributes.h>
#include <language.h>
#include <moving.h>
#include <defines.h>
#include <terminal.h>
#include <new_skills.h>
#include <pager.h>
#include <combat.h>
#include "/secure/questmaster.h"
#include "/secure/lepmaster.h"
#include <events.h>
Include-Abhängigkeitsdiagramm für base.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define NEED_PROTOTYPES
#define NAME(who)   capitalize(getuid(who))
#define SAFE_FOR_AUTOLOADER   __MAX_EVAL_COST__/4
#define MUDS_BAR   "\-------------------------------------------------------------------------------"

Funktionen

static int _set_level (int i)
static int _set_invis (int a)
static string _set_tty (string str)
static mixed _set_fraternitasdonoarchmagorum (mixed arg)
static string al_to_title (int a)
static void ndead_revive ()
 Belebt einen netztoten Spieler wieder.
static int wegmeldung (string player)
int quit ()
 Speichert den Spieler und loggt ihn aus (Spielerkommando 'ende').
void save_me (mixed value_items)
varargs int remove (mixed arg)
mixed RaceDefault (string arg)
 Setzt Defaultwerte fuer Rassen - wird von den Shells ueberschrieben.
protected void create ()
 Setzt Defaultwerte vor dem Laden des Savefiles.
void reset ()
string Forschung ()
void checkConsistency ()
 Prueft Spielerobjekt auf Konsistenz.
varargs int remove (int silent)
 Bittet das Spielerobjekt, sich zu zerstoeren.
static varargs void stop_heart_beats (mixed obs)
 Schaltet in allen Objekten im Inv HBs aus.
static void restart_heart_beats ()
 Schaltet HBs in Objekten im Inv wieder ein.
static int CheckDailyPlaytime ()
 Prueft auf abgelaufene Spielzeit.
static void Show_WaitFor_Reason (string who, int invis)
 Gibt Erwartemeldung mit Grund aus.
static void ListAwaited ()
 Gibt Liste der Erwarteten Spieler an this_player() aus.
static void delayed_notify (string wer)
 Teilt Merlin mit, wer reingekommen ist.
static int call_init (object ob, int logout)
 Ruft im uebergebenen Objekt ein init() auf, sofern notwendig.
static void inits_nachholen (int logout, object *obs)
 Holt seit dem letzten Ausloggen ausgefallene Inits nach.
varargs void Reconnect (int silent, string ip)
 Velebt einen Netztoten wieder.
void NetDead ()
 Loggt einen Spieler aus und macht ihn netztot.
protected int CheckTelnetKeepAlive ()
 Sendet ggf.
static void ndead_move_me ()
 Bewegt einen netztoten Spieler in den Netztotenraum Gerufen von heartbeat().
protected void heart_beat ()
 Heartbeat des Spielerobjektes.
varargs int id (string str, int lvl)
 ID-Funktion fuer Spielerobjekte.
static int set_homepage (string str)
 Setzt Spielerhomepage (Spielerkommando).
static int set_location (string str)
 Setzt Spieler-Wohnort (Spielerkommando).
static int set_icq (string str)
 Setzt ICQ-UIN des Spielers (Spielerkommando).
static int set_messenger (string str)
 Setzt Instant Messanger vom Spieler (Spielerkommando).
static mixed set_email (string str)
 Setzt Email-Adresse des Spielers (Spielerkommando).
static int self_delete ()
 Spielerkommando 'selbstloeschung'.
int self_delete2 (string str)
 Spielerkommando 'selbstloeschung'.
static int spieldauer (string str)
 Setzt neue taegliche Spieldauer (Spielerkommando).
private int InterpretTime (string a)
 Interpretiert Angabe des Spielers fuer Spielpause.
static int spielpause (string str)
 Setzt neue Spielpause (Spielerkommando).
static void spielpause2 (string str, int days)
 Setzt neue taegliche Spieldauer, wird ueber spielpause() gerufen.
static int change_password ()
 Setzt neues Passwort (Spielerkommando).
static int change_password2 (string str)
 Setzt neues Passwort (Spielerkommando).
static int change_password3 (string str)
 Setzt neues Passwort (Spielerkommando).
static int change_password4 (string str)
 Setzt neues Passwort (Spielerkommando).
static int bug (string str)
 Setzt eine Fehlermeldung an Magier ab (Spielerkommando).
static int bug2 (string str)
 Setzt eine Fehlermeldung an Magier ab (Spielerkommando).
static int typo (string str)
 Setzt eine Typomeldung an Magier ab (Spielerkommando).
static int typo2 (string str)
 Setzt eine Fehlermeldung an Magier ab (Spielerkommando).
static int idea (string str)
 Setzt eine Idee an Magier ab (Spielerkommando).
static int idea2 (string str)
 Setzt eine Idee an Magier ab (Spielerkommando).
static int md (string str)
 Setzt ein fehlendes Detail an Magier ab (Spielerkommando).
static int md2 (string str)
 Setzt ein fehlendes Detail an Magier ab (Spielerkommando).
void smart_log (string myname, string str)
 Loggt eine Spielermeldung an Magier.
static int new_quit ()
 Wrapper im quit() herum, verhindert 'ende', falls Spieler kaempft.
static int score (string arg)
 Gibt die Infos ueber den Char an den Spieler aus (Spielerkommando 'info').
static int short_score (string arg)
 Gibt eine kuerzere Info ueber den Char aus (Spielerkommando punkte|score).
static int very_short_score (string arg)
 Gibt eine Miniinfo ueber LP / KP aus (Spielerkommando: kurzinfo).
static string getmanpage (string dir, string page)
 Gibt eine Manpage/Hilfeseite an den Spieler aus.
static int help (string str)
 Gibt eine Hilfeseite an den Spieler aus (Spielerkommando hilfe|man).
static mixed filter_who_options (string str)
 Ermittelt angebene Optionen fuer das Spielerkommando 'wer'.
static int who (string str)
 Spielerkommando 'wer', fragt /obj/werliste ab.
static int kwho (string str)
 Spielerkommando 'kwer', fragt /obj/werliste ab.
static varargs int kkwho (string str)
 Spielerkommando 'kkwer', gibt eine einfache Liste der Anwesenden aus.
static int kill (string str)
 Spielerkommando 'toete'.
static int stop (string str)
 Spielerkommando 'stop'.
int emote (string str, int genitiv)
 Spielerkommando fuers emoten ':'.
static int remote (string str, int flag)
 Spielerkommando fuers remoten 'r:'.
static int gemote (string str)
 Spielerkommando fuers emoten im Genitiv ';'.
static int gremote (string str)
 Spielerkommando fuers remoten im Genitiv 'r;'.
static void load_auto_objects (mapping map_ldfied)
private void InitPlayer ()
 Setzt die Spielerinitialisierung nach start_player() fort.
private void InitPlayer2 ()
 Prueft Geschlecht des Spielers und fragt ggf.
private void InitPlayer3 ()
 Prueft Terminaltyp des Spielers und fragt ggf.
private int RandomSize ()
 Gibt eine Zufallszahl um P_AVERAGE_SIZE herum zurueck.
private void updates_after_restore (int newflag)
 Setzt bestimmte Props im Spieler, falls diese nicht gesetzt sind.
varargs nomask void set_hc_play (string str, int val)
 Setzt den HC-Modus.
nomask int query_hc_play ()
 gibt den HC-Modus zurueck.
varargs nomask int start_player (string str, string ip)
 Initialisiert und aktiviert das Spielerobjekt.
private void InitPlayer4 ()
 Letzte Phase der Spielerinitialisierung beim Laden des Charakters.
static void getmailaddr (string maddr)
 liest eMail-Adresse vom Spieler ein und speichert sie.
static void getgender (string gender_string)
 Liest Spielerantwort auf die Frage nach dem Geschlecht des Chars ein.
static void gettty (string ttystr)
 Liest Spielerantwort auf die Frage nach dem Terminaltyp ein.
nomask string query_real_name ()
 Liefert die UID des Charakters zurueck, also den Charakternamen.
int review ()
static int setmin (string str)
static int setmout (string str)
static int setmmin (string str)
static int setmmout (string str)
static int setcmsg (string str)
static int setdmsg (string str)
static int set_title (string str)
static int extra_input (string str, string look)
static int extralook (mixed str)
static void calculate_value ()
int save_character ()
static varargs void log_autoload (string file, string reason, mixed data, string error)
private void load_auto_object (string file, mixed data)
static int toggle_whimpy_dir (string str)
static int toggle_whimpy (string str)
varargs nomask int query_prevent_shadow (object obj)
 Bestimmt, ob das Spielerobjekt beschattet werden darf.
static int uhrzeit ()
string SetDefaultHome (string str)
string QueryDefaultHome ()
string SetPrayRoom (string str)
string QueryPrayRoom ()
void _restart_beat ()
static int weg (string str)
static string timediff (int time)
static int idlezeit (string player)
int QueryGuest ()
 Ist dieser Character ein Gast?
int disconnect (string str)
 Spielerkommando 'schlafe ein'.
static int finger (string str)
string lalign (string str, int wid)
private void format (mixed mud, mixed hosts, string output)
static int muds ()
static int stty (string str)
int set_ascii_art (string str)
int _set_shell_version (int arg)
int _query_shell_version ()
int more (string str)
static int set_visualbell (string str)
static int set_screensize (string str)
static int _query_screensize ()
static int presay (string str)
static int sethands (string str)
static int inform (string str)
void delayed_write (mixed *what)
void notify_player_change (string who, int rein, int invis)
static int erwarte (string str)
static int uhrmeldung (string str)
static int zeitzone (string str)
static int emailanzeige (string str)
static int zaubertraenke ()
static varargs int angriffsmeldung (string arg)
static string * _query_localcmds ()
static int _check_keep (object ob)
static mixed _set_testplayer (mixed arg)
int zweitiemarkierung (string arg)
int topliste (string arg)
int show_telnegs (string arg)
int set_keep_alive (string str)
int spotte (string str)
int behalte (string str)
static int _query_lep ()
nomask void set_realip (string str)
nomask string query_realip ()
mixed _query_netdead_env ()

Variablen

inherit std hook_provider
inherit std player restrictions
inherit std living attributes
inherit std living put_and_get
inherit std living clothing
inherit std thing properties
inherit std player util
inherit std thing language
inherit std player travel
inherit std player combat
inherit std player description
inherit std player moving
inherit std player life
inherit std player comm
inherit std player viewcmd
inherit std living moneyhandler
inherit std player command
inherit std living skill_attributes
inherit std player skills
inherit std player quests
inherit std player potion
inherit std player soul
inherit std more
inherit std user_filter
inherit std player telnetneg c
inherit std player guide
inherit std player reputation
mapping autoload
int hc_play
private nosave mapping autoload_rest
private nosave string * autoload_error
private nosave string realip
private nosave string passw
private nosave string passwold
private int telnet_tm_counter
nosave string default_home
nosave int ndead_lasttime
nosave mixed ndead_location
nosave string ndead_l_filename
nosave int ndead_currently
nosave int ndead_next_check
nosave object * hb_obs
nosave string pray_room
nosave mixed env_ndead_info

Makro-Dokumentation

#define MUDS_BAR   "\-------------------------------------------------------------------------------"

Definiert in Zeile 3289 der Datei base.c.

#define NAME ( who   )     capitalize(getuid(who))

Definiert in Zeile 68 der Datei base.c.

#define NEED_PROTOTYPES

Definiert in Zeile 45 der Datei base.c.

#define SAFE_FOR_AUTOLOADER   __MAX_EVAL_COST__/4

Definiert in Zeile 2788 der Datei base.c.


Dokumentation der Funktionen

static int _check_keep ( object  ob  )  [static]

Definiert in Zeile 3948 der Datei base.c.

03949 {
03950   return (ob->QueryProp(P_KEEP_ON_SELL))==geteuid(ME);
03951 }

static int _query_lep (  )  [static]

Definiert in Zeile 4126 der Datei base.c.

Benutzt LEPMASTER, P_LEP und Set().

04127 {
04128   int val;
04129   val = LEPMASTER->QueryLEP();
04130   Set( P_LEP, val );
04131   return val;
04132 }

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

static string* _query_localcmds (  )  [static]

Definiert in Zeile 3863 der Datei base.c.

Wird benutzt von _query_localcmds().

03864 {
03865   return ({({"zeilen","set_screensize",0,0}),
03866            ({"email","set_email",0,0}),
03867            ({"url","set_homepage",0,0}),
03868            ({"icq","set_icq",0,0}),
03869                    ({"messenger", "set_messenger", 0, 0}), 
03870            ({"ort","set_location",0,0}),
03871            ({"punkte","short_score",0,0}),
03872            ({"score","short_score",0,0}),
03873            ({"info","score",0,0}),
03874            ({"kurzinfo","very_short_score",0,0}),
03875            ({"quit","new_quit",0,0}),
03876            ({"ende","new_quit",0,0}),
03877            ({"disconnect","disconnect",0,0}),
03878            ({"schlaf","disconnect",1,0}),
03879            ({"speichern","save_character",0,0}),
03880            ({"save","save_character",0,0}),
03881            ({"toete","kill",0,0}),
03882            ({"angriffsmeldung","angriffsmeldung",0,0}),
03883            ({"passw","change_password",1,0}),
03884            ({"hilfe","help",1,0}),
03885            ({"selbstloeschung","self_delete",0,0}),
03886            ({"spielpause","spielpause",0,0}),
03887            ({"spieldauer","spieldauer",0,0}),
03888            ({"idee","idea",0,0}),
03889            ({"typo","typo",0,0}),
03890            ({"bug","bug",0,0}),
03891            ({"fehler","bug",0,0}),
03892            ({"md","md",0,0}),
03893            ({"detail","md",0,0}),
03894            ({"vorsicht","toggle_whimpy",0,0}),
03895            ({"stop","stop",0,0}),
03896            ({"kwho","kwho",0,0}),
03897            ({"kwer","kwho",0,0}),
03898            ({"kkwer","kkwho",0,0}),
03899            ({"kkwho","kkwho",0,0}),
03900            ({"who","who",0,0}),
03901            ({"wer","who",0,0}),
03902            ({"zeit","uhrzeit",0,0}),
03903            ({"uhrzeit","uhrzeit",0,0}),
03904            ({"weg","weg",0,0}),
03905            ({"wegmeldung", "wegmeldung", 0, 0}),
03906            ({"idlezeit", "idlezeit", 0, 0}),
03907            ({"finger","finger",0,0}),
03908            ({"muds","muds",0,0}),
03909            ({"emote","emote",0,0}),
03910            ({":","emote",1,0}),
03911            ({";","emote",1,0}),
03912            ({"remote","remote",0,SEER_LVL}),
03913            ({"r:","remote",1,0}),
03914            ({"r;","gremote",1,0}),
03915            ({"titel","set_title",0,0}),
03916            ({"review","review",0,SEER_LVL}),
03917            ({"setmin","setmin",0,SEER_LVL}),
03918            ({"setmout","setmout",0,SEER_LVL}),
03919            ({"setmmin","setmmin",0,SEER_LVL}),
03920            ({"setmmout","setmmout",0,SEER_LVL}),
03921            ({"sethands","sethands",0,SEER_LVL}),
03922            ({"presay","presay",0,SEER_LVL}),
03923            ({"extralook","extralook",0,SEER_LVL}),
03924            ({"fluchtrichtung","toggle_whimpy_dir",0,SEER_LVL}),
03925            ({"inform","inform",0,0}),
03926            ({"erwarte","erwarte",0,0}),
03927            ({"stty","stty",0,0}),
03928                    ({"grafik", "set_ascii_art", 0, 0}), 
03929            ({"uhrmeldung","uhrmeldung",0,0}),
03930            ({"zeitzone","zeitzone",0,0}),
03931            ({"behalte","behalte",0,0}),
03932            ({"zweitiemarkierung","zweitiemarkierung",0,0}),
03933            ({"emailanzeige","emailanzeige",0,0}),
03934            ({"topliste","topliste",0,0}),
03935            ({"ton","set_visualbell",0,0}),
03936            ({"telnegs","show_telnegs",0,0}),
03937            ({"spotte", "spotte", 0, 0}),
03938            ({"reise","reise",0,0}),
03939            ({"zaubertraenke","zaubertraenke",0,0}),
03940                    ({"keepalive","set_keep_alive",0,0}),
03941      })+
03942      command::_query_localcmds()+
03943      viewcmd::_query_localcmds()+
03944      comm::_query_localcmds()+
03945      skills::_query_localcmds();
03946 }

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

mixed _query_netdead_env (  ) 

Definiert in Zeile 4162 der Datei base.c.

Benutzt ndead_l_filename und ndead_location.

04162                            {
04163                 return ndead_location || ndead_l_filename;
04164 }

static int _query_screensize (  )  [static]

Definiert in Zeile 3523 der Datei base.c.

03524 {
03525     int sz,rows;
03526 
03527     if ( (sz=Query(P_SCREENSIZE)) >= 0 )
03528         return sz;
03529 
03530     if ( !rows=QueryProp(P_TTY_ROWS) )
03531         return 20;
03532 
03533     return (rows+=sz) >= 5 ? rows : 5;
03534 }

int _query_shell_version (  ) 

Definiert in Zeile 3401 der Datei base.c.

03402 {   mixed sv;
03403 
03404     if (!(sv=Query(P_SHELL_VERSION)) || !pointerp(sv) || sizeof(sv)!=2 ||
03405         sv[0]!=QueryProp(P_RACE) || !intp(sv[1]))
03406       return 0;
03407     return sv[1];
03408 }

void _restart_beat (  ) 

Definiert in Zeile 2991 der Datei base.c.

02992 {
02993   tell_object(ME,
02994       "Der GameDriver teilt Dir mit: Dein Herzschlag hat wieder eingesetzt.\n");
02995   set_heart_beat(1);
02996 }

static mixed _set_fraternitasdonoarchmagorum ( mixed  arg  )  [static]

Definiert in Zeile 4134 der Datei base.c.

Benutzt dtime(), FAO_MASTER, IS_ARCH, log_file, P_FAO, query_real_name() und Set().

04135 {
04136   if (!intp(arg)) return -1;
04137 
04138   if ((!previous_object(1)||object_name(previous_object(1))!=FAO_MASTER) && 
04139       (!this_interactive() || !IS_ARCH(this_interactive())))
04140     return -1;
04141 
04142   if (!intp(arg)) return -1;
04143 
04144   log_file("fao/P_FAO",sprintf("%s - %s P_FAO gesetzt auf %O\n",
04145                 dtime(time()),query_real_name(),arg) );
04146   return Set(P_FAO,arg);
04147 }

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

static int _set_invis ( int  a  )  [static]

Definiert in Zeile 3323 der Datei base.c.

03324 {
03325   return Set(P_INVIS, intp(a) ? a : !Query(P_INVIS));
03326 }

static int _set_level ( int  i  )  [static]

Definiert in Zeile 3316 der Datei base.c.

03317 {
03318   if (!intp(i)) return -1;
03319   if (i<1 || i>200) return -1;
03320   return Set(P_LEVEL, i);
03321 }

int _set_shell_version ( int  arg  ) 

Definiert in Zeile 3393 der Datei base.c.

03394 {
03395   if (!intp(arg))
03396     return -1;
03397   Set(P_SHELL_VERSION,({QueryProp(P_RACE),arg}));
03398   return 1;
03399 }

static mixed _set_testplayer ( mixed  arg  )  [static]

Definiert in Zeile 3953 der Datei base.c.

03953                                         {
03954   mixed res;
03955   object setob;
03956 
03957   setob=this_player();
03958   if (!objectp(setob) || !query_once_interactive(setob))
03959     setob=this_interactive();
03960   if (!objectp(setob))
03961     setob=previous_object();
03962   if (setob && !IS_DEPUTY(setob)) {
03963     arg=geteuid(setob);
03964     if (!arg || arg=="NOBODY")
03965       arg=getuid(setob);
03966     arg=capitalize(arg);
03967   }
03968   res=Set(P_TESTPLAYER,arg);
03969   Set(P_TESTPLAYER,PROTECTED,F_MODE_AS);
03970   return res;
03971 }

static string _set_tty ( string  str  )  [static]

Definiert in Zeile 3330 der Datei base.c.

03330                                    {
03331   if(str != "dumb" && str != "vt100" && str != "ansi")
03332     return Query(P_TTY);
03333   return Set(P_TTY, str);
03334 }

static string al_to_title ( int  a  )  [static]

Definiert in Zeile 2871 der Datei base.c.

Wird benutzt von score().

02872 {
02873   if (a >= KILL_NEUTRAL_ALIGNMENT * 100)
02874     return "heilig";
02875   if (a > KILL_NEUTRAL_ALIGNMENT * 20)
02876     return "gut";
02877   if (a > KILL_NEUTRAL_ALIGNMENT * 4)
02878     return "nett";
02879   if (a > - KILL_NEUTRAL_ALIGNMENT * 4)
02880     return "neutral";
02881   if (a > - KILL_NEUTRAL_ALIGNMENT * 20)
02882     return "frech";
02883   if (a > - KILL_NEUTRAL_ALIGNMENT * 100)
02884     return "boese";
02885   return "satanisch";
02886 }

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

static varargs int angriffsmeldung ( string  arg  )  [static]

Definiert in Zeile 3851 der Datei base.c.

03851                                                {
03852   if (arg=="ein" || arg=="an")
03853     SetProp(P_SHOW_ATTACK_MSG,1);
03854   else if (arg=="aus")
03855     SetProp(P_SHOW_ATTACK_MSG,0);
03856   if (QueryProp(P_SHOW_ATTACK_MSG))
03857     write("Du siehst saemtliche Angriffsmeldungen von Dir.\n");
03858   else
03859     write("Du siehst nur neue Angriffsmeldungen von Dir.\n");
03860   return 1;
03861 }

int behalte ( string  str  ) 

Definiert in Zeile 4082 der Datei base.c.

04083 {
04084   object ob,*obs;
04085   string s;
04086 
04087   if (str)
04088   {
04089     if (str=="alles") {
04090       filter_objects(all_inventory(), "SetProp", P_KEEP_ON_SELL, getuid());
04091       write("Ok!\n");
04092       return 1;
04093     }
04094     if (str=="nichts") {
04095       filter_objects(all_inventory(), "SetProp", P_KEEP_ON_SELL, 0);
04096       write("Ok!\n");
04097       return 1;
04098     }
04099     if (!sizeof(obs=find_obs(str,PUT_GET_NONE)))
04100     {
04101       _notify_fail("Aber sowas hast Du nicht dabei!\n");
04102       return 0;
04103     }
04104     else ob=obs[0];
04105 
04106     if (ob->QueryProp(P_KEEP_ON_SELL)==geteuid(ME))
04107         ob->SetProp(P_KEEP_ON_SELL,0);
04108     else
04109         ob->SetProp(P_KEEP_ON_SELL,geteuid(ME));
04110 
04111     // erneut abfragen, da sich der Wert nicht geaendert haben muss
04112     if (ob->QueryProp(P_KEEP_ON_SELL)==geteuid(ME))
04113         write(break_string(sprintf("Ok, Du wirst %s jetzt bei 'verkaufe alles' "
04114                                    "behalten.\n",ob->name(WEN)),78));
04115     else
04116         write(break_string(sprintf("Ok, Du wirst %s beim naechsten 'verkaufe "
04117                                    "alles' mitverkaufen!\n",ob->name(WEN)),78));
04118 
04119     return 1;
04120   }
04121   s=make_invlist(ME,filter(all_inventory(ME),#'_check_keep)); //'));
04122   More(s);
04123   return 1;
04124 }

static int bug ( string  str  )  [static]

Setzt eine Fehlermeldung an Magier ab (Spielerkommando).

Fragt nach der Fehlermeldung und liest sie via bug2() ein, fall der Spieler kein Argument angeben hat.

Parameter:
[in] str optionale Spielereingabe der Fehlerbeschreibung
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
bug2(string)

Definiert in Zeile 1205 der Datei base.c.

Benutzt _unparsed_args(), input_to() und smart_log().

01205                            {
01206   if (!(str=_unparsed_args())) {
01207     write( "Wie sieht der Fehler denn aus?\n]" );
01208     input_to("bug2");
01209     return 1;
01210   }
01211   write("Vielen Dank fuer die Hilfe.\n");
01212   smart_log("BUGS",str);
01213   return 1;
01214 }

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

static int bug2 ( string  str  )  [static]

Setzt eine Fehlermeldung an Magier ab (Spielerkommando).

Lies Fehlerbeschreibung ein und speichert sie ab.

Parameter:
[in] str Spielereingabe der Fehlerbeschreibung.
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
bug(string)

Definiert in Zeile 1222 der Datei base.c.

Benutzt smart_log().

01222                             {
01223   if (!str || str == "") {
01224     write("Bug abgebrochen...\n");
01225     return 1;
01226   }
01227   write("Vielen Dank fuer die Hilfe.\n");
01228   smart_log("BUGS",str);
01229   return 1;
01230 }

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

static void calculate_value (  )  [static]

Definiert in Zeile 2713 der Datei base.c.

02714 {
02715   int i, carried_value, value;
02716 
02717   carried_value=0;
02718   foreach(object ob: deep_inventory(ME)) {
02719     if (!ob->QueryProp(P_AUTOLOADOBJ))
02720       carried_value+=((value=(int)ob->QueryProp(P_VALUE)) > 1000 ? 1000 : value);
02721   }
02722   SetProp(P_CARRIED_VALUE, carried_value);
02723 }

static int call_init ( object  ob,
int  logout 
) [static]

Ruft im uebergebenen Objekt ein init() auf, sofern notwendig.

Ruft in ob ein init() auf, falls das Objekt nach dem letzten Ausloggen geschaffen wurde.

Parameter:
[in] ob object - Objekt, in dem init() gerufen wird.
[in] logout int - Letzter Logout
Rückgabe:
1, falls init() gerufen wurde. 0 sonst.

Definiert in Zeile 480 der Datei base.c.

00481 {
00482     if ( objectp(ob) && object_time(ob) > logout )
00483         return catch(ob->init(); publish), 1;
00484     return(0);
00485 }

static int change_password (  )  [static]

Setzt neues Passwort (Spielerkommando).

Fragt nach altem Passwort und ruft change_password2().

Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
change_password2(), change_password3(), change_password4()

Definiert in Zeile 1099 der Datei base.c.

Benutzt input_to().

01099                              {
01100   string verb;
01101   verb=query_verb();
01102   if (verb!="passwd"&&verb!="password"&&verb!="passwort")
01103     return 0;
01104   write("Bitte das ALTE Passwort angeben: ");
01105   input_to("change_password2",1);
01106   return 1;
01107 }

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

static int change_password2 ( string  str  )  [static]

Setzt neues Passwort (Spielerkommando).

Prueft altes Passwort, fragt nach neuem Passwort und ruft change_password3().

Parameter:
[in] str Spielereingabe des alten Passwortes
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
change_password(), change_password3(), change_password4()

Definiert in Zeile 1116 der Datei base.c.

Benutzt input_to(), MASTER und passwold.

01116                                         {
01117   write("\n");
01118   if (!str)
01119     str="";
01120   if (MASTER->update_password(str,str) == 0) {
01121     write("Falsches Passwort!\n");
01122     return 1;
01123   }
01124   passwold = str;
01125   write("Bitte das NEUE Passwort eingeben: ");
01126   input_to("change_password3",1);
01127   return 1;
01128 }

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

static int change_password3 ( string  str  )  [static]

Setzt neues Passwort (Spielerkommando).

Prueft neues Passwort, fragt nach Bestaetigung des neues Passwortes und ruft change_password4().

Parameter:
[in] str Spielereingabe des neuen Passwortes
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
change_password(), change_password2(), change_password4()

Definiert in Zeile 1137 der Datei base.c.

Benutzt input_to(), MASTER, ME, passw und passwold.

01138 {
01139     write( "\n" );
01140 
01141     if ( !str || str == "" ){
01142         write( "Abgebrochen !\n" );
01143         passwold = passw = 0;
01144         return 1;
01145     }
01146 
01147     if ( passwold == str ){
01148         write( "Das war Dein altes Passwort.\n"
01149                "Bitte das NEUE Passwort eingeben (zum Abbruch Return "
01150                "druecken): " );
01151         input_to( "change_password3", 1 );
01152         return 1;
01153     }
01154 
01155     if ( !MASTER->good_password( str, getuid(ME) ) ){
01156         write( "Bitte das NEUE Passwort eingeben: " );
01157         input_to( "change_password3", 1 );
01158         return 1;
01159     }
01160 
01161     passw = str;
01162     write( "Nochmal: " );
01163     input_to( "change_password4", 1 );
01164     return 1;
01165 }

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

static int change_password4 ( string  str  )  [static]

Setzt neues Passwort (Spielerkommando).

Prueft neues Passwort und setzt neues Passwort.

Parameter:
[in] str Spielereingabe des neuen Passwortes
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
change_password(), change_password2(), change_password3()

Definiert in Zeile 1173 der Datei base.c.

Benutzt MASTER, passw und passwold.

01174 {
01175     write( "\n" );
01176 
01177     if ( !str || str != passw ){
01178         write( "Das war verschieden! Passwort NICHT geaendert.\n" );
01179         passwold = passw = 0;
01180         return 1;
01181     }
01182 
01183     if ( MASTER->update_password( passwold, passw ) )
01184         write( "Passwort geaendert.\n" );
01185     else
01186         write( "Hat nicht geklappt!\n" );
01187 
01188     passwold = passw = 0;
01189     return 1;
01190 }

void checkConsistency (  ) 

Prueft Spielerobjekt auf Konsistenz.

Ueberprueft das Spielerobjekt nach kompletter Initialisierung (im callout) auf korrekte Werte einiger Props.

Definiert in Zeile 286 der Datei base.c.

Benutzt dtime(), F_MODE, F_MODE_AD, F_MODE_AS, F_VALUE, h, IS_LEARNER, log_file, P_BODY, P_HANDS, P_SECOND_MARK, P_TTY_COLS, P_TTY_ROWS, P_TTY_SHOW, P_TTY_TYPE, PROTECTED, Query(), RaceDefault(), SAVE und Set().

00287 { mixed h;
00288   int   m;
00289 
00290   if (pointerp(h=RaceDefault(P_HANDS)) && sizeof(h)>1)
00291     m=(int)h[1];
00292   else
00293     m=30;
00294   if((h=Query(P_HANDS))[1] > m && !IS_LEARNER(this_object())) {
00295     log_file("inconsistent", sprintf(
00296       "[%s] %O: HANDS: %d\n", dtime(time()), this_player(), h[1]));
00297     h[1] = m;
00298     Set(P_HANDS,h);
00299   }
00300 
00301   if (Query(P_BODY)!=(m=RaceDefault(P_BODY)))
00302      Set(P_BODY,m);
00303 
00304   if (!Query(P_SECOND_MARK,F_MODE))
00305     Set(P_SECOND_MARK,SAVE|PROTECTED,F_MODE_AS);
00306   if (!Query(P_TTY_SHOW,F_MODE)&SAVE)
00307   {
00308     Set(P_TTY_SHOW,0,F_VALUE);
00309     Set(P_TTY_SHOW,SAVE,F_MODE_AS);
00310   }
00311   if (Query(P_TTY_COLS,F_MODE)&SAVE)
00312   {
00313     Set(P_TTY_COLS,SAVE,F_MODE_AD);
00314     Set(P_TTY_ROWS,SAVE,F_MODE_AD);
00315     Set(P_TTY_TYPE,SAVE,F_MODE_AD);
00316   }
00317 }

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

static int CheckDailyPlaytime (  )  [static]

Prueft auf abgelaufene Spielzeit.

Prueft in Spielerobjekten, ob die taegliche Maximalspielzeit abgelaufen ist. Wird im heart_beat() gerufen.

Rückgabe:
int - Flag, ob Spielzeit abgelaufen und Logout erfolgen soll

Definiert in Zeile 380 der Datei base.c.

Benutzt ME, Name(), P_DAILY_PLAYTIME, Query(), remove_interactive(), Set(), spieldauer() und WER.

Wird benutzt von heart_beat().

00380                                 {
00381   int *spieldauer,d;
00382 
00383   if (!pointerp(spieldauer=Query(P_DAILY_PLAYTIME)))
00384     return 0;
00385   // 0:Minuten pro Tag, 1:Nr. des letzen Tages, 2:Nr. des angefangenen Tages,
00386   // 3:letzte Zeitpruefung, 4:verbleibende Zeit
00387   d=time()/86400;
00388   if (spieldauer[1]<=d) { // Ende der zeitbeschraenkten Tage?
00389     Set(P_DAILY_PLAYTIME,0);
00390     return 0;
00391   } else if (spieldauer[2]!=d) { // Neuer Tag?
00392     spieldauer[4]=spieldauer[0];
00393     spieldauer[2]=d;
00394   } else {
00395     spieldauer[4]-=(time()-spieldauer[3]);
00396   }
00397   spieldauer[3]=time();  // Letzte Zeitpruefung
00398   Set(P_DAILY_PLAYTIME,spieldauer);
00399   if (spieldauer[4]<0) { // Keine Zeit mehr uebrig fuer heute
00400     if (!interactive(ME))
00401       return 1;
00402     write("Du hast lange genug gemuddet fuer heute.\n");
00403     say(Name(WER)+" hat fuer heute genug gemuddet.\n");
00404     remove_interactive(ME);
00405     return 1;
00406   }
00407   return 0;
00408 }

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

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

protected int CheckTelnetKeepAlive (  ) 

Sendet ggf.

Telnet Timing Marks als Keep-Alive Pakete an den Client. Wird in heart_beat() gerufen.

Rückgabe:
1, falls der Spieler Keep-Alive Paket wuenscht, sonst 0.
Siehe auch:
heart_beat()

Definiert in Zeile 684 der Datei base.c.

Benutzt send_telnet_timing_mark() und telnet_tm_counter.

Wird benutzt von heart_beat().

00684                                      {
00685   if (telnet_tm_counter > 0) {
00686     // Spieler hat offenbar ein Keep-Alive konfiguriert ...
00687     if (!(--telnet_tm_counter)) {
00688       // und das Intervall ist gerade abgelaufen.
00689       // Prop offenbar gesetzt, FEature ist wirklich gewuenscht,
00690       // Telnet Timing Mark senden 
00691       send_telnet_timing_mark();
00692       // alle 300 HBs (600s, 10min).
00693       telnet_tm_counter = 300;
00694     }
00695     return 1; // Keep-Alive ist eingeschaltet
00696   }
00697   return 0;
00698 }

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

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

protected void create (  ) 

Setzt Defaultwerte vor dem Laden des Savefiles.

Definiert in Zeile 117 der Datei base.c.

Benutzt AddId(), autoload, autoload_error, autoload_rest, call_out(), create(), F_MODE, F_MODE_AD, F_MODE_AS, F_SET_METHOD, hc_play, ndead_currently, ndead_l_filename, ndead_lasttime, ndead_location, ndead_next_check, NETDEAD_CHECK_TIME, NEUTER, NOSETMETHOD, P_ALIGN, P_ALLOWED_SHADOW, P_ARTICLE, P_CALLED_FROM_IP, P_CAN_FLAGS, P_CARRIED_VALUE, P_CLOCKMSG, P_CLONE_MSG, P_CMSG, P_DAILY_PLAYTIME, P_DEADS, P_DESTRUCT_MSG, P_DMSG, P_EXTRA_LOOK, P_FAO, P_FAO_PORTALS, P_GENDER, P_GHOST, P_GUILD, P_GUILD_LEVEL, P_GUILD_RATING, P_GUILD_TITLE, P_HANDS, P_HOMEPAGE, P_ICQ, P_INFORMME, P_LAST_LOGIN, P_LAST_LOGOUT, P_LAST_QUIT, P_LEVEL, P_LOCATION, P_LONG, P_MAILADDR, P_MARRIED, P_MAX_ALCOHOL, P_MAX_DRINK, P_MAX_FOOD, P_MAX_HANDS, P_MAX_HP, P_MAX_POISON, P_MAX_SP, P_MESSENGER, P_MORE_FLAGS, P_NEEDED_QP, P_NETDEAD_ENV, P_NEWBIE_GUIDE, P_NEWSKILLS, P_NO_ASCII_ART, P_PROMPT, P_READ_NEWS, P_SCREENSIZE, P_SECOND, P_SHOW_EXITS, P_SHOWEMAIL, P_START_HOME, P_TELNET_KEEP_ALIVE, P_TESTPLAYER, P_TIMEZONE, P_TITLE, P_TTY, P_VISUALBELL, P_WAITFOR, P_WAITFOR_REASON, P_WANTS_TO_LEARN, P_WEIGHT, P_WEIGHT_PERCENT, PROTECTED, QueryProp(), realip, REQ_QP, SAVE, SECURED, Set() und SetProp().

00118 {
00119   if(QueryProp(P_LEVEL)) 
00120   {
00121     return; // darf nur EINMAL gemacht werden
00122   }
00123   call_out("checkConsistency", 0);
00124 
00125   ndead_next_check=NETDEAD_CHECK_TIME;
00126   ndead_lasttime=0;
00127   ndead_location=0;
00128   ndead_l_filename=0;
00129   ndead_currently=0;
00130   ndead_next_check=0;
00131   hc_play=0;
00132   
00133   command::create();
00134   properties::create();
00135   description::create();
00136   attributes::create();
00137   clothing::create();
00138   combat::create();
00139   life::create();
00140   comm::create();
00141   viewcmd::create();
00142   quests::create();
00143   restrictions::create();
00144   moving::create();
00145   travel::create();
00146   skills::create();
00147    
00148   SetProp(P_LEVEL, -1);
00149   Set(P_LEVEL, SAVE|SECURED, F_MODE_AS);
00150   Set(P_GHOST, SAVE, F_MODE_AS);
00151   SetProp(P_SCREENSIZE, 20);
00152   Set(P_SCREENSIZE, SAVE,F_MODE_AS);
00153   Set(P_MORE_FLAGS, SAVE, F_MODE_AS);
00154   SetProp(P_WEIGHT_PERCENT,100);
00155   SetProp(P_LONG, 0);
00156   SetProp(P_TITLE, "der hoffnungsvolle Anfaenger");
00157   SetProp(P_ALIGN, 0);
00158   SetProp(P_GENDER, NEUTER);
00159   Set(P_GENDER, SAVE, F_MODE_AS);
00160   SetProp(P_TTY, "vt100");
00161   Set(P_TTY, SAVE, F_MODE_AS);
00162   SetProp(P_WEIGHT, 75000);
00163   SetProp(P_MAX_HP,50);
00164   SetProp(P_MAX_SP,50);
00165   SetProp(P_MAX_FOOD,100);
00166   SetProp(P_MAX_DRINK,100);
00167   SetProp(P_MAX_ALCOHOL,100);
00168   SetProp(P_MAX_POISON,10);
00169   SetProp(P_HANDS, ({" mit blossen Haenden", 30}));
00170   Set(P_HANDS, SAVE, F_MODE_AS);
00171   SetProp(P_MAX_HANDS, 2);
00172 
00173   Set(P_MARRIED, SAVE, F_MODE_AS);
00174   Set(P_EXTRA_LOOK, SAVE, F_MODE_AS);
00175   Set(P_SHOW_EXITS, SAVE, F_MODE_AS);
00176   Set(P_SHOW_EXITS, 1);
00177   Set(P_WANTS_TO_LEARN, SAVE, F_MODE_AS);
00178   Set(P_CAN_FLAGS, SAVE, F_MODE_AS);
00179   Set(P_TESTPLAYER, SAVE|PROTECTED, F_MODE_AS);
00180   Set(P_ALLOWED_SHADOW, SAVE|SECURED, F_MODE_AS);
00181   Set(P_SECOND, SAVE, F_MODE_AS);
00182   Set(P_INVIS, SAVE, F_MODE_AS);
00183   Set(P_READ_NEWS, SAVE, F_MODE_AS);
00184   Set(P_START_HOME, SAVE, F_MODE_AS);
00185   Set(P_MAILADDR, SAVE, F_MODE_AS);
00186   Set(P_HOMEPAGE, SAVE, F_MODE_AS);
00187   Set(P_ICQ, SAVE, F_MODE_AS);
00188   Set(P_MESSENGER, SAVE, F_MODE_AS);
00189   Set(P_LOCATION, SAVE, F_MODE_AS);
00190 
00191   Set(P_NO_ASCII_ART, SAVE, F_MODE_AS);
00192 
00193   Set(P_VISUALBELL, SAVE, F_MODE_AS);
00194   Set(P_CARRIED_VALUE, SAVE, F_MODE_AS);
00195 
00196   Set(P_PROMPT, "> ");
00197   Set(P_PROMPT, SAVE, F_MODE_AS);
00198   Set(P_CALLED_FROM_IP, SAVE, F_MODE_AS);
00199   Set(P_INFORMME,SAVE|PROTECTED,F_MODE_AS);
00200   Set(P_WAITFOR,SAVE|PROTECTED,F_MODE_AS);
00201   Set(P_WAITFOR_REASON,SAVE|PROTECTED,F_MODE_AS);
00202   Set(P_DAILY_PLAYTIME,SAVE|PROTECTED,F_MODE_AS);
00203   Set(P_NETDEAD_ENV, PROTECTED|NOSETMETHOD, F_MODE_AS);
00204   
00205   autoload = ([]);
00206   autoload_rest = ([]);
00207   autoload_error = ({});
00208   SetProp(P_ARTICLE,0);
00209   Set(P_GUILD,SAVE,F_MODE_AS);
00210   Set(P_GUILD_TITLE,SAVE,F_MODE_AS);
00211   Set(P_GUILD_LEVEL,SAVE,F_MODE_AS);
00212   Set(P_GUILD_RATING,SAVE,F_MODE_AS);
00213   Set(P_NEWSKILLS,SAVE,F_MODE_AS);
00214   Set(P_NEEDED_QP,REQ_QP);
00215   Set(P_DEADS,0);
00216   Set(P_DEADS, NOSETMETHOD,F_SET_METHOD);
00217   Set(P_DEADS,SAVE|PROTECTED|SECURED,F_MODE_AS);
00218   Set(P_LAST_LOGIN,-1);
00219   Set(P_LAST_LOGIN, NOSETMETHOD,F_SET_METHOD);
00220   Set(P_LAST_LOGIN,SAVE|PROTECTED|SECURED,F_MODE_AS);
00221   Set(P_LAST_LOGOUT,-1);
00222   Set(P_LAST_LOGOUT, NOSETMETHOD,F_SET_METHOD);
00223   Set(P_LAST_LOGOUT,SAVE|PROTECTED|SECURED,F_MODE_AS);
00224   Set(P_CLOCKMSG,SAVE,F_MODE_AS);
00225   Set(P_TIMEZONE,SAVE,F_MODE_AS);
00226   Set(P_SHOWEMAIL,SAVE,F_MODE_AS);
00227   Set(P_LAST_QUIT,SAVE|PROTECTED|SECURED,F_MODE_AS);
00228 
00229   Set(P_CMSG, 0, F_MODE); // to clean out the old clone messages
00230   Set(P_DMSG, 0, F_MODE);
00231   Set(P_CLONE_MSG, SAVE, F_MODE);
00232   SetProp(P_CLONE_MSG, "zaubert etwas hervor");
00233   Set(P_DESTRUCT_MSG, SAVE, F_MODE);
00234   SetProp(P_DESTRUCT_MSG, "verschwindet einfach");
00235   
00236   Set(P_FAO, SAVE|SECURED, F_MODE_AS);
00237   Set(P_FAO_PORTALS, SAVE, F_MODE_AS);
00238 
00239   SetProp(P_NEWBIE_GUIDE,0);
00240   Set(P_NEWBIE_GUIDE,SAVE,F_MODE_AS);
00241  
00242   //TODO: Remove - Property ist not needed any more.
00243   Set(P_TELNET_KEEP_ALIVE, PROTECTED|SAVE, F_MODE_AD);
00244   SetProp(P_TELNET_KEEP_ALIVE, 0);
00245 
00246   AddId("Interactive");
00247   
00248   realip="";
00249 }

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

static void delayed_notify ( string  wer  )  [static]

Teilt Merlin mit, wer reingekommen ist.

Ruft in /secure/merlin notify_player_enter() auf. Merlin loest dann zeitverzoegert in anwesenden Spielern die Ausgabe der Erwartemeldung aus.

Parameter:
[in] wer string - Name des reinkommenden Spielers

Definiert in Zeile 468 der Datei base.c.

00469 {
00470   catch("/secure/merlin"->notify_player_enter(wer);publish);
00471 }

void delayed_write ( mixed *  what  ) 

Definiert in Zeile 3597 der Datei base.c.

Wird benutzt von notify_player_change().

03598 {
03599   if (!pointerp(what)||!sizeof(what)||!pointerp(what[0]))
03600     return;
03601   tell_object(ME,what[0][0]);
03602   if (sizeof(what)>1&&sizeof(what[0])>1)
03603     call_out("delayed_write",what[0][1],what[1..]);
03604 }

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

int disconnect ( string  str  ) 

Spielerkommando 'schlafe ein'.

Ruft remove_interactive() bei Spielern, bei Magiern wird quit() gerufen, um das Magierobjekt zu zerstoeren.

Siehe auch:
quit()

Definiert in Zeile 3217 der Datei base.c.

03218 { 
03219   string verb;
03220 
03221   verb=query_verb();
03222   if (!verb)
03223     verb="AUTOCALL";
03224   if (verb[0..5]=="schlaf" && str!="ein")
03225   {
03226     notify_fail(
03227       "\"schlafe ein\" beendet Deine Verbindung mit "MUDNAME". Du behaeltst "
03228      +"Deine\nSachen, aber Vorsicht: Wenn "MUDNAME" abstuerzt, waehrend Du "
03229      +"weg bist,\nverlierst Du sie doch, genauso, als wenn Du Deine Verbindung "
03230      +"mit \"ende\"\nbeendet haettest (allerdings bekommst Du dann eine "
03231      +"finanzielle Entschaedigung).\n"
03232      +"ABER: BENUTZUNG AUF EIGENE GEFAHR !!!\n" );
03233     return 0;
03234   }
03235   if (IS_LEARNER(this_object()))
03236     return quit();
03237   tell_object(this_object(),
03238     "Dieser Befehl beendet Deine Verbindung mit "MUDNAME". Du behaeltst Deine"
03239    +"\nSachen, aber Vorsicht: Wenn "MUDNAME" abstuerzt, waehrend Du weg bist," +"\nverlierst Du sie doch, genauso, als wenn Du Deine Verbindung mit \"ende\""
03240    +"\nbeendet haettest (allerdings bekommst Du dann eine finanzielle "
03241    +"Entschaedigung).\n"
03242    +"ABER: BENUTZUNG AUF EIGENE GEFAHR !!!\n" );
03243   if (clonep(environment()) && !environment()->QueryProp(P_NETDEAD_INFO))
03244     tell_object(this_object(),"\nACHTUNG: Wenn Du hier laenger als ETWA 10 Minuten schlaefst, kommst Du nicht\nan diesen Ort zurueck !\n");
03245   say(capitalize(name(WER))+" hat gerade die Verbindung zu "MUDNAME" gekappt.\n");
03246   remove_interactive(ME);
03247   call_out(#'clear_tell_history,4);
03248   return 1;
03249 }

static int emailanzeige ( string  str  )  [static]

Definiert in Zeile 3820 der Datei base.c.

03820                                    {
03821   notify_fail("Syntax: emailanzeige [alle|freunde|niemand]\n");
03822   if(!str || str==""){
03823     if(!(str=QueryProp(P_SHOWEMAIL)))str="Niemandem";
03824     else if(str=="alle")str="allen";
03825     else if(str=="freunde")str="Deinen Freunden";
03826     else if(str=="niemand")str="niemandem";
03827     else{
03828       SetProp(P_SHOWEMAIL,0);
03829       str="Niemandem";
03830     }
03831     write("Deine Email wird "+str+" angezeigt.\n");
03832     return 1;
03833   }
03834   else if(member(({"alle","freunde","niemand"}),str)==-1)return 0;
03835 
03836   SetProp(P_SHOWEMAIL,str);
03837 
03838   if(str=="alle")str="allen";
03839   else if(str=="freunde")str="Deinen Freunden";
03840   else str="niemandem";
03841   write("Deine Email wird "+str+" angezeigt.\n");
03842   return 1;
03843 }

int emote ( string  str,
int  genitiv 
)

Spielerkommando fuers emoten ':'.

Parameter:
[in] str Spielereingabe
[in] genitiv Genetivflag
Rückgabe:
1 oder 0, falls Spieler nicht emoten kann (kein CAN_EMOTE Flag in P_CAN_FLAGS).

Definiert in Zeile 1893 der Datei base.c.

01894 {
01895   string *commands,message,verb;
01896   object living;
01897   int i,size;
01898 
01899   if (!(Query(P_CAN_FLAGS)&CAN_EMOTE)) return 0;
01900   if (query_verb()[0]==';') genitiv=1;
01901   if (query_verb()[0]==':'||query_verb()[0]==';')
01902     verb=query_verb()[1..]+" ";
01903   else
01904     verb="";
01905   str=this_player()->_unparsed_args();
01906   commands=explode(verb+(str||""),"#");
01907   message=break_string((IS_SEER(ME) ? "" : ">")
01908                        +capitalize(genitiv ? name(WESSEN) :
01909                                    name())
01910                        +" "+commands[0],78);
01911   size=sizeof(commands);
01912   if(size>=3)
01913   {
01914     living=find_living(lower_case(commands[1]));
01915     if(!living || environment(living)!=environment() ||
01916        (living->QueryProp(P_INVIS)) && !IS_LEARNER(ME))
01917     {
01918       write(capitalize(commands[1])+" sehe ich hier nicht!\n");
01919       return 1;
01920     }
01921     if(living!=this_object())
01922       tell_object(living,break_string((IS_SEER(this_player()) ? "" : ">")
01923                                     +capitalize(genitiv ?
01924                                                 this_player()->name(WESSEN) :
01925                                                 this_player()->name())
01926                                     +" "+commands[2],78));
01927   }
01928   if(size>=4)
01929     write(break_string(commands[3],78));
01930   else
01931     write(message);
01932   tell_room(environment(),message,({this_object(),living}));
01933   return 1;
01934 }

static int erwarte ( string  str  )  [static]

Definiert in Zeile 3639 der Datei base.c.

03640 {
03641   string *list,*str1;
03642   mixed mlist;
03643   int i;
03644 
03645   if (!mappingp(mlist=QueryProp(P_WAITFOR_REASON)))
03646      mlist=([]);
03647   if (!pointerp(list=Query(P_WAITFOR)))
03648      list=({});
03649 
03650   if (!str || str=="-u")
03651   {
03652      if(Query(P_WAITFOR_FLAGS)&0x01)
03653        write("Du hast 'erwarte' temporaer deaktiviert.\n");
03654      write("Du erwartest jetzt");
03655      if (!sizeof(list))
03656         write(" niemanden mehr.\n");
03657      else
03658      {
03659         write(":\n");
03660         if (!str) list=sort_array(list,#'>);
03661         More(break_string(CountUp(list),78));
03662      }
03663      return 1;
03664   }
03665   if(str=="aus"){
03666     Set(P_WAITFOR_FLAGS,Query(P_WAITFOR_FLAGS)|0x01);
03667     write("Erwarte ist jetzt deaktiviert.\n");
03668     return 1;
03669   }
03670   if(str=="an" || str=="ein"){
03671     Set(P_WAITFOR_FLAGS,Query(P_WAITFOR_FLAGS)&0xFE);
03672     write("Erwarte ist jetzt aktiv.\n");
03673     return 1;
03674   }
03675 
03676   str1=explode(_unparsed_args()||""," ");
03677   if (sizeof(str1)==1)
03678   {
03679      if (str1[0]!="wegen")
03680      {
03681         str=capitalize(lower_case(str));
03682         if (member(list,str)!=-1)
03683         {
03684            SetProp(P_WAITFOR_REASON,m_delete(mlist,str));
03685            list-=({str});
03686            write(str+" aus der Liste entfernt.\n");
03687         } else
03688         {
03689            if (sizeof(list)>1000)
03690            {
03691              write("Du erwartest schon genuegend!\n");
03692              return 1;
03693            }
03694            list+=({str});
03695            write(str+" an die Liste angehaengt.\n");
03696         }
03697         Set(P_WAITFOR,list);
03698      }
03699      else
03700      {
03701         if (sizeof(mlist) && sizeof(list=m_indices(mlist)))
03702         {
03703            write("Du erwartest aus einem bestimmten Grund:\n");
03704            write(break_string(CountUp(sort_array(list,#'>))+".",78));
03705         }
03706         else write("Du erwartest niemanden aus einem bestimmten Grund.\n");
03707      }
03708      return 1;
03709   }
03710   notify_fail("Falsche Syntax, siehe 'hilfe erwarte'!\n");
03711   if (str1[1]!="wegen") return 0;
03712   if (sizeof(str1)==2)
03713      Show_WaitFor_Reason(capitalize(lower_case(str1[0])),0);
03714   else {
03715      string s=capitalize(lower_case(str1[0]));
03716      if (sizeof(str1)==3 && (str1[2]=="nichts" || str1[2]=="loeschen"))
03717         if (!mlist[s])
03718            write("Du hast "+s+" aus keinem bestimmten Grund erwartet!\n");
03719         else
03720         {
03721            SetProp(P_WAITFOR_REASON,m_delete(mlist,s));
03722            write("Du erwartest "+s+" aus keinem bestimmten Grund mehr!\n");
03723         }
03724      else
03725      {
03726         if (IS_ARCH(ME)) i=80; else if (IS_LEARNER(ME)) i=40;
03727         else if (IS_SEER(ME)) i=20; else i=10;
03728         if (!mlist[s] && sizeof(mlist)>=i)
03729            write("Sorry, aber Du erwartest schon genuegend Leute!\n");
03730         else
03731         {
03732            SetProp(P_WAITFOR_REASON,mlist+([s:implode(str1[2..]," ")]));
03733            Show_WaitFor_Reason(s,0);
03734         }
03735      }
03736   }
03737   return 1;
03738 }

static int extra_input ( string  str,
string  look 
) [static]

Definiert in Zeile 2684 der Datei base.c.

02685 {
02686   if (str=="**")
02687   {
02688     if (look=="")
02689       SetProp(P_EXTRA_LOOK,0);
02690     else
02691       SetProp(P_EXTRA_LOOK,look);
02692     write("Ok.\n");
02693     return 1;
02694   }
02695   input_to("extra_input",0,look+str+"\n");
02696   write("]");
02697   return 1;
02698 }

static int extralook ( mixed  str  )  [static]

Definiert in Zeile 2700 der Datei base.c.

02701 {
02702   if( str=="?" )
02703   {
02704     write( "Dein Extralook ist : "+QueryProp(P_EXTRA_LOOK) + "\n");
02705     return 1;
02706   }
02707   write("Bitte gib Deinen Extra-Look ein. Beenden mit **:\n");
02708   input_to("extra_input",0,"");
02709   write("]");
02710   return 1;
02711 }

static mixed filter_who_options ( string  str  )  [static]

Ermittelt angebene Optionen fuer das Spielerkommando 'wer'.

Parameter:
[in] str vom Spieler spezifizierter String von Filteroptionen: -k, -v, -a, -s (+ Langformen).
Rückgabe:
Array von Spieleroptionen als veroderte Int-Flags und Rest der Spielereingabe ohne die Optionen.

Definiert in Zeile 1678 der Datei base.c.

Benutzt i, len, WHO_ALPHA, WHO_PLAYER_VIEW, WHO_SHORT und WHO_VERTICAL.

Wird benutzt von kwho() und who().

01679 {
01680   string* opt, *ans;
01681   int i,len,res;
01682 
01683   opt = explode(str," "); len=sizeof(opt);
01684   ans = ({});
01685   res = 0;
01686   for(i=0;i<len;i++)
01687     switch(opt[i]){
01688       case "-k":
01689       case "-kurz":
01690       res |= WHO_SHORT; break;
01691       case "-v":
01692       case "-vertikal":
01693       res |= WHO_VERTICAL; break;
01694       case "-alphabetisch":
01695       case "-a":
01696       case "-alpha":
01697       res |= WHO_ALPHA; break;
01698       case "-s":
01699       case "-spieler":
01700       res |= WHO_PLAYER_VIEW; break;
01701       default:
01702       return ({ res, implode(opt[i..]," ") });
01703     }
01704   return ({ res, 0 });
01705 
01706 }

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

static int finger ( string  str  )  [static]

Definiert in Zeile 3251 der Datei base.c.

03252 {
03253   string ret;
03254   mixed xname;
03255 
03256   if (!str||str==""||sizeof(explode(str," ")-({"-n","-p","-s","-v"}))>1)
03257   {
03258     write("finger <spielername> oder finger <spielername@mudname>\n"+
03259       "Bitte nur den reinen Spielernamen verwenden, keine Namensvorsaetze oder Titel\n");
03260     return 1;
03261   }
03262   xname=explode(str,"@");
03263   if(sizeof(xname)==2)
03264   {
03265     if (xname[0]=="-n " || xname[0]=="-p " || xname[0]=="-s ")  {
03266       write("finger <spielername>@<mudname> - der Spielername fehlt.\n");
03267       return 1;
03268     }
03269     if (ret=INETD->_send_udp(xname[1],([
03270                    REQUEST: "finger",
03271                    SENDER: getuid(ME),
03272                    DATA: (explode(xname[0]," ")-({"-n","-p","-s"}))[0]
03273                    ]), 1))
03274             write(ret);
03275         else
03276       write("Anfrage abgeschickt.\n");
03277     return 1;
03278   }
03279   "/p/daemon/finger"->finger_single(str,1);
03280   return 1;
03281 }

private void format ( mixed  mud,
mixed  hosts,
string  output 
)

Definiert in Zeile 3292 der Datei base.c.

Wird benutzt von _inventory(), liste() und QuarterReached().

03293 {
03294   output += lalign(hosts[mud][HOST_NAME], 20) + "  " +
03295         (hosts[mud][HOST_STATUS] ?
03296            hosts[mud][HOST_STATUS] > 0 ?
03297              "UP       " + ctime(hosts[mud][HOST_STATUS])[4..15] :
03298              "DOWN     " + ctime(-hosts[mud][HOST_STATUS])[4..15]
03299          : "UNKNOWN  Never accessed.") + "\n";
03300 }

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

string Forschung (  ) 

Definiert in Zeile 261 der Datei base.c.

Benutzt LEPMASTER.

Wird benutzt von score().

00262 {
00263   return LEPMASTER->QueryForschung();
00264 }

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

static int gemote ( string  str  )  [static]

Spielerkommando fuers emoten im Genitiv ';'.

Ruft emote(string,int) auf.

Definiert in Zeile 2002 der Datei base.c.

02003 {
02004   return emote(str, 1);
02005 }

static void getgender ( string  gender_string  )  [static]

Liest Spielerantwort auf die Frage nach dem Geschlecht des Chars ein.

Wird gerufen von input_to(). Uebergibt an InitPlayer3().

Siehe auch:
InitPlayer3().

Definiert in Zeile 2489 der Datei base.c.

02490 {
02491     gender_string = lower_case( gender_string );
02492 
02493     if ( strlen(gender_string)==1 && gender_string[0] == 'm' ){
02494         write( "Willkommen, mein Herr!\n" );
02495         SetProp( P_GENDER, MALE );
02496     }
02497     else if ( strlen(gender_string)==1 && gender_string[0] == 'w' ){    
02498                 write( "Willkommen, gnae' Frau!\n" );
02499         SetProp( P_GENDER, FEMALE );    
02500     }    
02501     else {
02502                 write( "Wie? Was? Verstehe ich nicht!\n" );  
02503                 write( "Bist Du maennlich oder weiblich? (tippe m oder w): " );    
02504                 input_to( "getgender" );    
02505                 return;
02506     }
02507 
02508     InitPlayer3();
02509 }

static void getmailaddr ( string  maddr  )  [static]

liest eMail-Adresse vom Spieler ein und speichert sie.

Uebergibt anschliessend an InitPlayer2()

Parameter:
[in] maddr Spielereingabe der Emailadresse.
Siehe auch:
InitPlayer2().

Definiert in Zeile 2459 der Datei base.c.

02460 {
02461     if ( !stringp(maddr) || !strlen(maddr) )
02462         maddr = "none";
02463 
02464     Set( P_MAILADDR, maddr );
02465     InitPlayer2();
02466 }

static string getmanpage ( string  dir,
string  page 
) [static]

Gibt eine Manpage/Hilfeseite an den Spieler aus.

Beruecksichtigt hierbei die Synonymliste aus dir/.synonym, um die richtige Manpage auszugeben.

Parameter:
[in] dir Verzeichnis der gewuenschten Manpage
[in] page Name der gewuenschten Manpage
Rückgabe:
String der gewuenschten Manpage

Definiert in Zeile 1569 der Datei base.c.

Benutzt i und text().

Wird benutzt von help().

01570 {
01571   string text, *syn;
01572   int i;
01573 
01574   if (dir[<1] != '/')
01575     dir += "/";
01576 
01577   if ((text=read_file(dir+page)) && strlen(text))
01578     return text;
01579 
01580   if (text = read_file(dir+".synonym")) {
01581     syn = regexplode(text, "([ \t][ \t]*|\n)");
01582     if ((i=member(syn, page))!=-1)
01583       return read_file(dir+syn[i+2]);
01584   }
01585   return 0;
01586 }

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

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

static void gettty ( string  ttystr  )  [static]

Liest Spielerantwort auf die Frage nach dem Terminaltyp ein.

Wird gerufen von input_to(). Uebergibt an InitPlayer4().

Siehe auch:
InitPlayer4().

Definiert in Zeile 2533 der Datei base.c.

02534 {
02535     if ( !ttystr || ttystr == "" )
02536         ttystr = "dumb";
02537 
02538     ttystr = lower_case(ttystr);
02539 
02540     if ( ttystr == "vt100" ){
02541         write( "Dies sollte " + ANSI_BOLD + "fett" + ANSI_NORMAL + " sein.\n" );
02542         SetProp( P_TTY, ttystr );
02543     }
02544     else
02545         if ( ttystr == "ansi" ){
02546             write( "Dies sollte " + ANSI_RED + "rot" + ANSI_NORMAL +
02547                    " sein.\n" );
02548             SetProp( P_TTY, "ansi" );
02549         }
02550         else if ( ttystr == "dumb" ){
02551             write( "Ohje, oede! Besorg Dir ein besseres Terminal!\n" );
02552             SetProp( P_TTY, "dumb" );
02553         }
02554         else {
02555             write( "Dieser Terminaltyp wird nicht unterstuetzt. Nimm bitte "
02556                    "einen aus:\nvt100, ansi or dumb (default is dumb): " );
02557             input_to( "gettty" );
02558             return;
02559         }
02560 
02561     InitPlayer4();
02562 }

static int gremote ( string  str  )  [static]

Spielerkommando fuers remoten im Genitiv 'r;'.

Ruft remote(string, int) auf.

Definiert in Zeile 2010 der Datei base.c.

02011 {
02012   return remote(str, 1);
02013 }

protected void heart_beat (  ) 

Heartbeat des Spielerobjektes.

Prueft taegliche Spielzeit, speichert regelmaessig den Spieler, bewegt Netztote in den Netztodenraum, ruft die HBs aus living/combat und player/life.

Definiert in Zeile 707 der Datei base.c.

Benutzt CheckDailyPlaytime(), CheckTelnetKeepAlive(), destruct(), heart_beat(), IS_LEARNER, ME, ndead_currently, ndead_lasttime, ndead_location, ndead_move_me(), ndead_next_check, ndead_revive(), NETDEAD_CHECK_TIME, quit() und save_me().

00707                             {
00708   if (!ME)
00709     return;
00710   if (ndead_currently)
00711   {
00712     if (interactive(ME))
00713     {
00714       ndead_revive();
00715       ndead_location=0;
00716     }
00717     else return;
00718   }
00719   else
00720     if (!(ndead_next_check--))
00721     {
00722       ndead_next_check=NETDEAD_CHECK_TIME;
00723       if (!interactive(ME))
00724         if (ndead_lasttime)
00725         {
00726           save_me(1);
00727           if (IS_LEARNER(ME))
00728           {
00729             quit();
00730             if (ME)
00731               remove();
00732             if (ME)
00733               destruct(ME);
00734             return;
00735           }
00736           ndead_move_me();
00737                   // Zumindest bei Gaesten ist das Objekt jetzt zerstoert
00738                   if (!objectp(this_object()))
00739                     return;
00740         }
00741         else
00742           ndead_lasttime=1;
00743     }
00744   if (ME && ndead_lasttime && interactive(ME))
00745     ndead_lasttime=0;
00746   if (CheckDailyPlaytime())
00747     return;
00748 
00749   CheckTelnetKeepAlive();
00750 
00751   life::heart_beat();
00752   combat::heart_beat();
00753   skills::heart_beat();
00754 }

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

static int help ( string  str  )  [static]

Gibt eine Hilfeseite an den Spieler aus (Spielerkommando hilfe|man).

Die Hilfeseite wird in div. Verzeichnissen gesucht (je nach Gilde, Magier-/Spielerstatus).

Parameter:
[in] str Name der gewuenschten Hilfeseite.
Rückgabe:
1

Definiert in Zeile 1594 der Datei base.c.

Benutzt getmanpage(), gilde, IS_LEARNER, IS_SEER, More(), P_GUILD, PL, QueryProp() und text().

01594                             {
01595   string verb, rest, text, gilde;
01596   mixed found;
01597 
01598   found=0;
01599   text = "";
01600   if (str) {
01601     str = implode( explode(str, ".." ), "");
01602 
01603     if ( sscanf( str, "gilde %s %s", gilde, rest)==2)
01604       str=rest;
01605     else
01606       gilde=QueryProp(P_GUILD);
01607     if (!gilde) gilde="abenteurer";
01608 
01609     if ( sscanf( str, "%s %s",verb,rest )==2 ) str = verb;
01610 
01611     if ((IS_LEARNER(PL)) ) {
01612       if (rest = getmanpage("/doc/wiz/",str)) {
01613         found = 1;
01614         text += rest;
01615       }
01616       else if (rest = getmanpage("/doc/mcmd/", str)) {
01617         found = 1;
01618         text += rest;
01619       }
01620     }
01621 
01622     if ((IS_SEER(PL)) /*&& !found*/ ) {
01623       if (rest = getmanpage("/doc/scmd/",str)) {
01624         if (found)
01625           text += "\n--------------------\n";
01626         found = 1;
01627         text += rest;
01628       }
01629     }
01630 
01631     if (rest = getmanpage("/doc/g."+gilde+"/",str)) {
01632       if (found)
01633         text += "\n--------------------\n";
01634       found = 1;
01635       text += rest;
01636     } else {
01637       if (rest = getmanpage("/doc/help/",str)) {
01638         if (found)
01639           text += "\n--------------------\n";
01640         found = 1;
01641         text += rest;
01642       }
01643       else if (rest = getmanpage("/doc/pcmd/",str)) {
01644         if (found)
01645           text += "\n--------------------\n";
01646         found = 1;
01647         text += rest;
01648       }
01649       else if (rest = getmanpage("/doc/REGELN/",str)) {
01650         if (found)
01651           text += "\n--------------------\n";
01652         found = 1;
01653         text += rest;
01654       }
01655     }
01656 
01657     if (!found)
01658       text = "Dazu ist keine Hilfe verfuegbar.\n";
01659 
01660     More(text,0);
01661     return 1;
01662   }
01663   if (IS_LEARNER(PL))
01664     text = read_file("/doc/hilfe.magier");
01665   else if (IS_SEER(PL))
01666     text = read_file("/doc/hilfe.seher");
01667 
01668   More(text + read_file("/doc/hilfe.spieler"), 0);
01669   return 1;
01670 }

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

varargs int id ( string  str,
int  lvl 
)

ID-Funktion fuer Spielerobjekte.

id() fuer Spieler. Besondere Behandlung fuer Froesche und Geister, sowie Invis-Status. Gibt immer 0 zurueck, wenn P_INVIS && lvl < P_LEVEL

Parameter:
[in] str angefragter ID-String
[in] lvl Level des Anfragenden
Rückgabe:
1, falls str auf den Spieler zutrifft, 0 sonst.

Definiert in Zeile 764 der Datei base.c.

Benutzt P_FROG, P_GHOST, P_LEVEL, P_NAME, Query() und QueryProp().

00765 {
00766   if (::id(str))
00767     return 1;
00768   if (Query(P_INVIS) && lvl < QueryProp(P_LEVEL))
00769     return 0;
00770   if (QueryProp(P_GHOST)&& str == "geist von "+ lower_case(QueryProp(P_NAME)))
00771     return 1;
00772   if (QueryProp(P_FROG) && str == "frosch") return 1;
00773   return(0);
00774 }

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

static int idea ( string  str  )  [static]

Setzt eine Idee an Magier ab (Spielerkommando).

Fragt nach der Idee und liest sie via idee2() ein, falls der Spieler kein Argument angeben hat.

Parameter:
[in] str optionale Spielereingabe der Idee
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
idea2(string)

Definiert in Zeile 1273 der Datei base.c.

Benutzt _unparsed_args(), input_to() und smart_log().

01273                             {
01274   if (!(str=_unparsed_args())) {
01275     write( "Was fuer eine Idee hast Du denn?\n]" );
01276     input_to("idea2");
01277     return 1;
01278   }
01279   write("Vielen Dank fuer die Hilfe.\n");
01280   smart_log("IDEA",str);
01281   return 1;
01282 }

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

static int idea2 ( string  str  )  [static]

Setzt eine Idee an Magier ab (Spielerkommando).

Liest die Idee ein und speichert sie.

Parameter:
[in] str Spielereingabe der Idee
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
idea(string)

Definiert in Zeile 1290 der Datei base.c.

Benutzt smart_log().

01290                              {
01291   if (!str || str == "") {
01292     write("Idee abgebrochen...\n");
01293     return 1;
01294   }
01295   write("Vielen Dank fuer die Hilfe.\n");
01296   smart_log("IDEA",str);
01297   return 1;
01298 }

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

static int idlezeit ( string  player  )  [static]

Definiert in Zeile 3074 der Datei base.c.

03075 {
03076 
03077   object player_ob;
03078   int idle;
03079 
03080   if ( !player || player=="" || 
03081        player==lowerstring(this_player()->QueryProp(P_NAME)))
03082   {
03083     write ("Du bist selber natuerlich gerade nicht idle.\n");
03084     return 1;  
03085   }
03086 
03087   // Welcher Spieler ist gemeint?
03088   player_ob=find_player(player);
03089 
03090   // Spieler nicht da oder Invis und Anfrager is kein Magier
03091   if (!player_ob || 
03092       (player_ob->QueryProp(P_INVIS) && !IS_LEARNER(this_player()))) 
03093   {
03094     write(capitalize(player)+" ist gerade nicht im Spiel.\n");
03095     return 1;
03096   }
03097 
03098   idle=query_idle(player_ob);
03099 
03100         // player_ob->Name() gibt bei invis-Magiern "Jemand" zurueck
03101   write (player_ob->QueryProp(P_NAME)+" ist "+
03102          (idle>=60?timediff(idle):"nicht")+" passiv.\n");
03103 
03104   return 1;
03105 }

static int inform ( string  str  )  [static]

Definiert in Zeile 3565 der Datei base.c.

03566 {
03567   switch (str) {
03568     case "on":
03569     case "ein":
03570     case "an":
03571       if (Query(P_INFORMME))
03572     write("Das hattest Du schon so eingestellt.\n");
03573       else
03574       {
03575     write("Kuenftig wirst Du informiert, wenn jemand das "MUDNAME" verlaesst/betritt.\n");
03576     Set(P_INFORMME,1);
03577       }
03578       return 1;
03579     case "aus":
03580     case "off":
03581       if (!Query(P_INFORMME))
03582     write("Das hattest Du schon so eingestellt.\n");
03583       else
03584       {
03585     write("Ok.\n");
03586     Set(P_INFORMME,0);
03587       }
03588       return 1;
03589     case 0:
03590       write("Inform-Mode ist "+(Query(P_INFORMME)?"an":"aus")+"geschaltet.\n");
03591       return 1;
03592     }
03593   write("inform an oder inform aus, bitte.\n");
03594   return 1;
03595 }

private void InitPlayer (  ) 

Setzt die Spielerinitialisierung nach start_player() fort.

Prueft den Wert der vom Spieler getragenen Sachen (fuer Entschaedigung nach Reboot). Setzt div. Properties des "Spielerkoerpers", die eigentlich gespeichert werden, nach einem Reboot zurueck. Fragt ggf. nach eMail-Adresse und uebergibt per input_to an InitPlayer2().

Siehe auch:
InitPlayer3(),InitPlayer2(), InitPlayer(), start_player().

Definiert in Zeile 2420 der Datei base.c.

02421 {
02422     string mailaddr;
02423 
02424     if ( QueryProp(P_CARRIED_VALUE) > 0 ){
02425         ndead_lasttime = QueryProp(P_CARRIED_VALUE);
02426         SetProp( P_CARRIED_VALUE, 0 );
02427     }
02428 
02429     // wenn es einen Crash gab, sollen Spieler nicht noch extra bestraft werden
02430     if ( file_time( "/save/" + getuid()[0..0] + "/" + getuid() + ".o" )
02431          < last_reboot_time() ){
02432         SetProp( P_FOOD, 0 );
02433         SetProp( P_DRINK, 0 );
02434         SetProp( P_ALCOHOL, 0 );
02435         SetProp( P_BLIND, 0 );
02436         SetProp( P_DEAF, 0 );
02437         SetProp( P_POISON, 0 );
02438         SetProp( P_GHOST, 0 );
02439         SetProp( P_FROG, 0 );
02440         SetProp( P_HP, QueryProp(P_MAX_HP) );
02441         SetProp( P_SP, QueryProp(P_MAX_SP) );
02442     }
02443 
02444     if ( QueryGuest() )
02445         Set( P_MAILADDR, "none" );
02446     else if ( !(mailaddr = Query(P_MAILADDR)) || mailaddr == "" ) {
02447             write( "Gib bitte Deine EMail-Adresse an (oder 'none'): " ); 
02448             input_to( "getmailaddr" );
02449             return;
02450     }
02451     InitPlayer2();
02452 }

private void InitPlayer2 (  ) 

Prueft Geschlecht des Spielers und fragt ggf.

beim Spieler nach. Uebergibt an InitPlayer3() oder get_gender().

Siehe auch:
InitPlayer3(), get_gender().

Definiert in Zeile 2473 der Datei base.c.

02474 {
02475     if( member_array( QueryProp(P_GENDER), ({ MALE, FEMALE }) ) == -1 ){
02476         write( "Bist Du maennlich oder weiblich: " );
02477         input_to( "getgender", 0 );
02478         return;
02479     }
02480 
02481     InitPlayer3();
02482 }

private void InitPlayer3 (  ) 

Prueft Terminaltyp des Spielers und fragt ggf.

beim Spieler nach. Uebergibt an InitPlayer4() oder gettty().

Siehe auch:
InitPlayer4(), gettty().

Definiert in Zeile 2516 der Datei base.c.

02517 {
02518     if ( !QueryProp(P_TTY) || QueryProp(P_TTY) == "none" ){
02519         write( "Waehle einen Terminaltyp (kann spaeter mit <stty> geaendert "
02520                "werden)\nvt100, ansi, dumb [dumb] " );
02521         input_to( "gettty", 0 );
02522         return;
02523     }
02524 
02525     InitPlayer4();
02526 }

private void InitPlayer4 (  ) 

Letzte Phase der Spielerinitialisierung beim Laden des Charakters.

Ruft enable_commands(), aktiviert den Heartbeat und aktiviert die Kommandos aus den geerbten command.c, put_and_get.c, team.c, soul.c, guide.c, setzt den Living Name. Registriert UseSpell() als Catchall-Kommando. Laesst den Spieler ggf. einen Level per /std/gilde aufsteigen, ruft verzoegert delayed_notify(), loest Login-Event aus. Gibt Willkommenstexte, News und neue Mails aus. Findet den Startraum und bewegt den Spieler dorthin. Ruft FinalSetup() (aus den Rassenshells). Begrenzt Geldmenge im Spieler (wegen Bankzweities) nach Tragkraft und erstattet Geld bei Reboot. Ruft set_is_wizard(). Startet Clonen der Autoloader.

Siehe auch:
InitPlayer3(),InitPlayer2(), InitPlayer(), start_player().

Definiert in Zeile 2241 der Datei base.c.

02242 {
02243     int num, str, ski;
02244     string err, called_from_ip;
02245     mixed start_place;
02246     object mon;
02247 
02248     enable_commands();
02249     set_heart_beat(1);
02250     command::initialize();
02251     add_put_and_get_commands();
02252     add_team_commands();
02253     add_soul_commands();
02254     add_guide_commands();
02255     add_action( "UseSpell", "", 1 );
02256     set_living_name( getuid() );
02257     while ( remove_call_out("disconnect") != -1 )
02258         ;
02259 
02260     if ( QueryProp(P_LEVEL) == -1 ){
02261         Set( P_LEVEL, 0 );
02262         catch( "/std/gilde"->advance();publish );
02263         Set( P_LEVEL, 1 );
02264     }
02265 
02266     if ( query_once_interactive(ME) )
02267         call_out( "delayed_notify", 0, getuid(ME) );
02268 
02269     if ( interactive(this_object()) ) {
02270         cat( "/etc/NEWS" );
02271 
02272                 NewbieIntroMsg();
02273 
02274         if ( QueryProp(P_INVIS) && !IS_WIZARD(ME) )
02275             SetProp( P_INVIS, 0 );
02276 
02277         catch( num = "secure/mailer"->FingerMail(getuid());publish );
02278 
02279         if ( num )
02280             write( "Du hast " + num + " neue" +
02281                    (num == 1 ? "n Brief" : " Briefe")+" im Postamt liegen.\n" );
02282 
02283         catch( RegisterChannels();publish );
02284 
02285         if ( (called_from_ip = Query(P_CALLED_FROM_IP)) &&
02286              query_ip_number(ME) != called_from_ip ){
02287             string tmp;
02288 
02289             if ( stringp(tmp = query_ip_name(called_from_ip)) &&
02290                  tmp != called_from_ip )
02291                 tmp = " [" + tmp + "]";
02292             else
02293                 tmp = "";
02294 
02295             write( "Das letzte Mal kamst Du von " + called_from_ip
02296                    + tmp + ".\n" );
02297         }
02298 
02299         Set( P_CALLED_FROM_IP, query_ip_number(ME) );
02300     }
02301 
02302     if ( !stringp(default_home) || default_home == "" )
02303         default_home = "gilden/abenteurer";
02304 
02305     if ( IS_SEER(ME) && !IS_LEARNER(ME) )
02306         catch( start_place = HAUSVERWALTER->FindeHaus(getuid(ME));publish );
02307     else
02308         start_place = 0;
02309 
02310     if ( !start_place )
02311         start_place = QueryProp(P_START_HOME);
02312 
02313     if( objectp(start_place) || (stringp(start_place) && start_place != "" ) ){
02314         if ((err = catch(move( start_place, M_GO|M_SILENT|M_NO_SHOW );publish)) 
02315                     || !environment() )
02316             err = catch(move( default_home, M_GO|M_SILENT|M_NO_SHOW );publish);
02317     }
02318     else
02319         err = catch(move( default_home, M_GO|M_SILENT|M_NO_SHOW );publish);
02320 
02321     if ( err )
02322         catch(move( "gilden/abenteurer", M_GO|M_SILENT|M_NO_SHOW );publish);
02323 
02324     // Die Shell muss FinalSetup() nicht implementieren. Daher Callother
02325     catch( ME->FinalSetup();publish );
02326 
02327     // Login-event ausloesen
02328     EVENTD->TriggerEvent(EVT_LIB_LOGIN, ([
02329                   E_OBJECT: ME,
02330                   E_PLNAME: getuid(ME),
02331                   E_ENVIRONMENT: environment() ]) );
02332 
02333     // Schonmal sichern, falls ein Bug (Evalcost...) dazwischen kommen sollte.
02334     autoload_rest = autoload;
02335 
02336     // Um Geld-Xties mit illegal viel Geld zu vermeiden, kommt ein Check:
02337     if ( !IS_LEARNER(ME) && !Query(P_TESTPLAYER) &&
02338          mon = present( "\ngeld", ME ) ){
02339         // maximale Kraft, die der Spieler haette haben koennen
02340         str = QueryAttribute(A_STR) + 4;
02341         if ( Query(P_FROG) )
02342             str += 30;
02343         if ( str < 1 )
02344             str = QueryRealAttribute(A_STR) + 4;
02345         if ( str > 30 )
02346             str = 30;
02347 
02348         // Trageskill beachten
02349         ski = to_int(UseSkill( SK_CARRY, ([SI_SKILLARG : str ]) ));
02350         if ( !intp(ski) )
02351             ski = 0;
02352 
02353         // Wieviel konnte der Spieler insgesamt maximal tragen?
02354         num = 9200 + str * 800 + ski;
02355         if ( num < 3000 )
02356             num = 3000;
02357 
02358         // Verdoppeln fuer einen guten Container und nochmal 20% draufschlagen
02359         // zur Sicherheit. Das Ganze danach *4, um die maximale Anzahl Muenzen
02360         // zu erhalten.
02361         num = (int) (num * 8.8);
02362 
02363         // Geld, das zuviel ist, auf den Maximalwert kuerzen.
02364         // Zur Sicherheit wird mitgeloggt. Falls ein Spieler sich (zu recht)
02365         // beschwert, kann man immer noch wieder die Summe korrigieren ;-)
02366         if ( (str = mon->QueryProp(P_AMOUNT)) > num ){
02367             mon->SetProp( P_AMOUNT, num );
02368             log_file( "ZUVIEL_GELD", sprintf( "%s: %s hatte %d Muenzen bei "
02369                                               "sich. Korrigiert auf %d.\n ",
02370                                               ctime(time())[4..],
02371                                               capitalize(getuid(ME)),
02372                                               str, num ) );
02373         }
02374     }
02375 
02376     if ( ndead_lasttime ){
02377         write( "Du findest " + ndead_lasttime +
02378                " Muenzen, die Du beim letzten Mal verloren hast.\n" );
02379 
02380         if ( MayAddWeight( ndead_lasttime / 4 ) ){
02381             write( "Weil Du nicht mehr soviel tragen kannst, spendest Du den "+
02382                    "Rest der Zentralbank.\n" );
02383 
02384             num = (QueryProp(P_MAX_WEIGHT) - query_weight_contents()) * 4;
02385             ndead_lasttime = (num < 0) ? 0 : num;
02386         }
02387 
02388         AddMoney( ndead_lasttime );
02389         ndead_lasttime=0;
02390     }
02391 
02392     if ( !QueryProp(P_INVIS) )
02393         say( capitalize(name(WER)) + " betritt diese Welt.\n" );
02394     else
02395         write( "DU BIST UNSICHTBAR!\n\n" );
02396 
02397     if ( IS_WIZARD(getuid(ME)) )
02398         set_is_wizard( ME, 1 );
02399     else
02400         set_is_wizard( ME, 0 );
02401 
02402     if ( query_once_interactive(ME) )
02403         ListAwaited();
02404 
02405     // Autoloader werden ganz zum Schluss geclont, da das bis zum bitteren
02406     // (Evalcost-)Ende geschieht und danach u.U. keine Rechenzeit fuer
02407     // andere Aktionen mehr ueber ist
02408     load_auto_objects( autoload );
02409 }

static void inits_nachholen ( int  logout,
object *  obs 
) [static]

Holt seit dem letzten Ausloggen ausgefallene Inits nach.

Ruft in den uebergebenen Objekten call_init(), was einen init() ausloest, falls das Objekt seit dem letzten Ausloggen erstellt wurde.

Parameter:
[in] logout Zeitpunkt des letzten Logouts
[in] obs Array von Objekten
Siehe auch:
call_init()

Definiert in Zeile 494 der Datei base.c.

00495 {
00496     filter( obs, "call_init", ME, logout );
00497 }

private int InterpretTime ( string  a  ) 

Interpretiert Angabe des Spielers fuer Spielpause.

Parameter:
[in] a Zeitangabe fuer Spielpause.
Rückgabe:
Zeitpunkt, Ende der Spielpause.

Definiert in Zeile 998 der Datei base.c.

Benutzt i, TM_MDAY, TM_MON, TM_YEAR und zeit.

00998                                    {
00999   // akzeptiert folgende Formate:
01000   //   dd.mm.jj     (Rueckgabe: 0:00 des entsprechenden Tages)
01001 
01002   int *ts = allocate(9);
01003   int i,j,k,nrargs;
01004 
01005   if ((nrargs=sscanf(a,"%d.%d.%d",i,j,k))==3 ||
01006       (nrargs=sscanf(a,"%d.%d.",i,j))==2) {
01007     // wenn kein jahr angegeben ist, das aktuelle nehmen.
01008     if (nrargs == 2)
01009        ts[TM_YEAR] = localtime()[TM_YEAR];
01010     else {
01011        // Zwei-Ziffern-Angabe des Jahres...
01012        if (k<100)
01013                    k += 2000;
01014        ts[TM_YEAR] = k;
01015     }
01016     ts[TM_MDAY] = i;
01017     ts[TM_MON] = j - 1;
01018 
01019     int zeit = mktime(ts);
01020 
01021     // negative und vergangene Zeiten pruefen.
01022     if (zeit <= time()) {
01023       write("Dieser Zeitpunkt liegt in der Vergangenheit.\n");
01024       return 0;
01025     }
01026     return zeit;
01027   }
01028   return 0;
01029 }

static int kill ( string  str  )  [static]

Spielerkommando 'toete'.

Prueft auf Geist, Gast, toten HC-Spieler, Waffe/freie Hand. Versucht einen Gegner zu finden und ruft dann Kill(string).

Parameter:
[in] str Spielereingabe
Rückgabe:
1 oder 0, falls kein potentieller Gegner bei 'toete alle' gefunden wird.

Definiert in Zeile 1795 der Datei base.c.

01795                             {
01796   object eob,wob;
01797 
01798   if (QueryProp(P_GHOST))
01799   {
01800     write("Das kannst Du in Deinem immateriellen Zustand nicht.\n");
01801     return 1;
01802   }
01803   
01804   if(hc_play>1)
01805   {
01806     write("DAS HAST DU HINTER DIR.\n");
01807     return 1;
01808   }
01809   
01810   if (QueryGuest())
01811   {
01812     write("Du bist doch nur Gast hier.\n");
01813     return 1;
01814   }
01815   if (!str || str == "") {
01816     write("WEN willst Du toeten?\n");
01817     return 1;
01818   }
01819   if( !QueryProp(P_WEAPON) && QueryProp(P_FREE_HANDS)==0 ) {
01820     write(
01821       "Dazu solltest Du eine Waffe gezueckt oder eine Hand frei haben.\n");
01822     return 1;
01823   }
01824   str=lower_case(str);
01825   if (str=="alle") {
01826     object livs;
01827     livs=filter(all_inventory(environment(PL)),
01828                 function int (object ob) {
01829                     if (living(ob) && !query_once_interactive(ob)
01830                           && !ob->QueryProp(P_NO_GLOBAL_ATTACK)
01831                                   && !ob->QueryProp(P_FRIEND)) {
01832                                 Kill(ob);
01833                                 return 1;
01834                     }
01835                     return 0;
01836                 } );
01837     // wenn Gegner gefunden, raus, ansonsten kommt die Fehlermeldung unten.
01838     if (sizeof(livs)) return 1;
01839   }
01840   else {
01841     int i=1;
01842     while(objectp(eob = present(str,i++,environment(PL)))) {
01843       if (living(eob)) break;
01844     }
01845   }
01846   if (!objectp(eob)) {
01847     // per write und return 1 ist hier mal ok, weil dies Kommando im Spieler
01848     // eh zuletzt in der Kommandokette ausgefuehrt wird und per return 0 eh
01849     // kein anderes mehr zum Zug kommt.
01850     write("Du siehst hier kein derartiges Wesen!\n");
01851     return 1;
01852   }
01853   else if (eob == PL) {
01854     write("Selbstmord ist keine Loesung!\n");
01855     return 1;
01856   }
01857 
01858   /* Kill him */
01859   Kill(eob);
01860   return 1;
01861 }

static varargs int kkwho ( string  str  )  [static]

Spielerkommando 'kkwer', gibt eine einfache Liste der Anwesenden aus.

Filtert unsichtbare Spieler aus, falls SPielerobjekt kein Magier ist.

Parameter:
[in] str Spielereingabe mit Optionen fuer wer.
Rückgabe:
1

Definiert in Zeile 1762 der Datei base.c.

Benutzt break_string(), CountUp(), filter_users(), IS_LEARNER und obs.

01762                                      {
01763   object *obs;
01764   string *namen;
01765 
01766   obs=filter_users(str);
01767   namen=({});
01768   if (IS_LEARNER(this_player())) {
01769     foreach(object ob: obs) {
01770       if (environment(ob))
01771         namen+=({capitalize(geteuid(ob))});
01772     }
01773   } 
01774   else {
01775     foreach(object ob: obs) {
01776       if (!ob->QueryProp(P_INVIS) && environment(ob))
01777         namen+=({capitalize(geteuid(ob))});
01778     }
01779   }
01780   if (sizeof(namen))
01781     write(break_string(CountUp(sort_array(namen,#'>),", ", ", ")+".",75));
01782   else
01783     write("Keine passenden Spieler gefunden.\n");
01784   
01785   return 1;
01786 }

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

static int kwho ( string  str  )  [static]

Spielerkommando 'kwer', fragt /obj/werliste ab.

Parameter:
[in] str Spielereingabe mit Optionen fuer wer.
Rückgabe:
1

Definiert in Zeile 1741 der Datei base.c.

Benutzt filter_who_options(), IS_LEARNER, ME, More(), P_WANTS_TO_LEARN, QueryProp(), QueryWhoListe() und WHO_SHORT.

01742 {
01743   int shrt;
01744   mixed res;
01745 
01746   if(str) {
01747     res = filter_who_options(str);
01748     shrt = res[0];
01749     str = res[1];
01750   }
01751   More(implode( "/obj/werliste"->QueryWhoListe(
01752       IS_LEARNER(ME) && QueryProp(P_WANTS_TO_LEARN), shrt|WHO_SHORT ,0,str),
01753     "\n")+"\n\n",0);
01754   return 1;
01755 }

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

string lalign ( string  str,
int  wid 
)

Definiert in Zeile 3283 der Datei base.c.

03284 {
03285   return (str+"                                                   "+
03286       "                                                   ")[0..wid-1];
03287 }

static void ListAwaited (  )  [static]

Gibt Liste der Erwarteten Spieler an this_player() aus.

Definiert in Zeile 430 der Datei base.c.

Benutzt CountUp(), find_player(), IS_LEARNER, list, ME, ob(), P_WAITFOR und QueryProp().

00431 {
00432     string *list;
00433     mixed mlist;
00434     object ob;
00435     int mag;
00436 
00437     mag=IS_LEARNER(ME);
00438 
00439     list=({});
00440     foreach(string erwartet : QueryProp(P_WAITFOR)) {
00441         if (objectp(ob=find_player(lower_case(erwartet)))) {
00442                     if (ob->QueryProp(P_INVIS)) {
00443                                 if (mag) list+=({ sprintf("(%s)",erwartet) });
00444                     }
00445                     else list+=({erwartet});
00446                 }
00447     }
00448     if (sizeof(list))
00449         printf("Anwesende Erwartete: %s.\n",
00450                     CountUp(sort_array(list,#'>)));
00451 
00452     if ((mappingp(mlist=QueryProp(P_WAITFOR_REASON))) && (sizeof(mlist)))
00453         {
00454                   foreach(string erwartet : mlist) {
00455                 if (!(ob=find_player(lower_case(erwartet))) ||
00456                     (!mag && ob->QueryProp(P_INVIS)));
00457                 else Show_WaitFor_Reason(erwartet,ob->QueryProp(P_INVIS));
00458                   }
00459                 }
00460 }

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

private void load_auto_object ( string  file,
mixed  data 
)

Definiert in Zeile 2790 der Datei base.c.

02791 {
02792     object ob;
02793     string error;
02794    
02795     if( get_eval_cost() < SAFE_FOR_AUTOLOADER ) return;
02796     efun::m_delete( autoload_rest, file );
02797     autoload_error-=({file});
02798  
02799     ob = find_object(file);
02800     
02801     if (!ob)
02802     {
02803         if (file_size(file+".c")<0&&
02804            file_size(implode(explode(file,"/")[0..<2],"/")+
02805                      "/virtual_compiler.c")<0)
02806         {
02807                    log_autoload(file,"find",data,0);
02808            return;
02809         }
02810         if (error = catch(load_object(file);publish))
02811                 {
02812                    log_autoload(file,"load",data,error);
02813            return;
02814                 }
02815     }
02816     if ( error = catch(ob = clone_object(file); publish) )
02817     {
02818                 log_autoload(file,"clone",data, error);
02819         return;
02820     }
02821     
02822     if ( error = catch(ob->move( ME, M_NOCHECK );publish) ) {
02823                 log_autoload(file,"move",data, error);
02824         ob->remove();
02825         if(ob) destruct(ob);
02826         return;
02827     }
02828     
02829     if (ob)
02830         (void) catch(ob->SetProp( P_AUTOLOADOBJ, data );publish);
02831 }

static void load_auto_objects ( mapping  map_ldfied  )  [static]

Definiert in Zeile 2833 der Datei base.c.

02834 {
02835     if ( (!mappingp(map_ldfied) || !sizeof(map_ldfied)) && !sizeof(autoload_rest) )
02836         return;
02837 
02838     // Mit Netztoten Spielern rechnen manche Autoloader nicht. Also
02839     // das Clonen unterbrechen und in Reconnect() wieder anwerfen.
02840     if ( !interactive() )
02841         return;
02842 
02843     // Kleiner Hack: autoload_rest ist eine globale Variable, die beim
02844     // Clonen der einzelnen Autoloader direkt veraendert wird.
02845     // So lange das Mapping noch Eintraege hat, muessen wir noch fehlende
02846     // Autoloader clonen.
02847     if ( !sizeof(autoload_rest) )
02848         autoload_rest = map_ldfied;
02849 
02850     // Schon hier einen call_out() zum "Nach"clonen von noch nicht geclonten
02851     // Autoloadern starten, da spaeter u.U. keine Rechenzeit mehr dafuer da ist.
02852     while ( remove_call_out("load_auto_objects") != -1 )
02853         /* do nothing */;
02854     
02855     // Mit Parameter '0' aufrufen, da das globale Mapping benutzt wird.
02856     // Verzoegerung 0 in rekursiven Callouts ist bloed, also 1s Delay
02857     call_out( "load_auto_objects", 2, 0 );
02858     
02859     // Mit catch() gegen die Evalcost-Falle!
02860     // Mit Absicht das walk_mapping() aus der "alten" Version erhalten und
02861     // nicht durch eine (einfachere) Schleife inkl. get_eval_cost() ersetzt,
02862     // da eine Schleife gegenueber der walk_mapping()-Loesung den Aufbau
02863     // der previous_object()-Kette veraendern wuerde; darauf testen aber
02864     // manche Objekte.
02865     catch( walk_mapping( autoload_rest, #'load_auto_object/*'*/ ) );
02866 }

static varargs void log_autoload ( string  file,
string  reason,
mixed  data,
string  error 
) [static]

Definiert in Zeile 2778 der Datei base.c.

02779 {
02780   if (member(autoload_error,file)!=-1) return;
02781   log_file(SHELLLOG("NO_AUTO_FILE"),sprintf("%s: %s: %s\nreason: cannot %s file\ndata: %O\n%s\n",
02782            ctime()[4..15],capitalize(getuid()),file,reason,data,
02783                    (error?"Fehlermeldung: "+error+"\n":"")));
02784   autoload_error+=({file});
02785 }

static int md ( string  str  )  [static]

Setzt ein fehlendes Detail an Magier ab (Spielerkommando).

Fragt nach dem Detail und liest es via idee2() ein, falls der Spieler kein Argument angeben hat.

Parameter:
[in] str optionale Spielereingabe des fehlenden Details
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
md2(string)

Definiert in Zeile 1307 der Datei base.c.

Benutzt _unparsed_args(), input_to() und smart_log().

01307                           {
01308   if (!(str=_unparsed_args())) {
01309     write( "Fuer welches Detail fehlt denn die Beschreibung?\n]" );
01310     input_to("md2");
01311     return 1;
01312   }
01313   write("Vielen Dank fuer die Hilfe.\n");
01314   smart_log("DETAILS",str);
01315   return 1;
01316 }

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

static int md2 ( string  str  )  [static]

Setzt ein fehlendes Detail an Magier ab (Spielerkommando).

Liest das Detail ein und speichert es.

Parameter:
[in] str Spielereingabe des fehlenden Details.
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
md(string)

Definiert in Zeile 1324 der Datei base.c.

Benutzt smart_log().

01324                            {
01325   if (!str || str == "") {
01326     write("Details abgebrochen...\n");
01327     return 1;
01328   }
01329   write("Vielen Dank fuer die Hilfe.\n");
01330   smart_log("DETAILS",str);
01331   return 1;
01332 }

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

int more ( string  str  ) 

Definiert in Zeile 3412 der Datei base.c.

03413 {
03414   if(!str)
03415   {
03416     notify_fail("Usage: more <file>\n");
03417     return 0;
03418   }
03419   if (file_size(str) <= 0) {
03420     notify_fail(str+": No such file\n");
03421     return 0;
03422   }
03423   More(str, 1);
03424   return 1;
03425 }

static int muds (  )  [static]

Definiert in Zeile 3302 der Datei base.c.

Wird benutzt von Request().

03302                   {
03303   mapping hosts;
03304   int i;
03305   mixed muds, output;
03306 
03307   output = lalign("Mudname", 20) + "  Status   Last access";
03308   output += "\n" + MUDS_BAR[0..strlen(output)] + "\n";
03309   muds = sort_array(m_indices(hosts = INETD->query("hosts")),#'>);
03310   map(muds, #'format, hosts, &output);
03311   More(output);
03312   return 1;
03313 }

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

static void ndead_move_me (  )  [static]

Bewegt einen netztoten Spieler in den Netztotenraum Gerufen von heartbeat().

Zerstoert Gaeste, verlaesst ggf. das Team, ermittelt, ob der Spieler beim Aufwachen in das alte Environment bewegt werden soll oder in einen anderen Raum, hierzu wird im Environment P_NETDEAD_INFO abgefragt. Deaktiviert die Kommandos per disable_commands().

Definiert in Zeile 3164 der Datei base.c.

Wird benutzt von heart_beat().

03164                             {
03165   object team;
03166   mixed amem;
03167 
03168   set_heart_beat(0);
03169   stop_heart_beats();
03170   if (QueryGuest()) {
03171     quit();
03172     if (ME)
03173       remove();
03174     if (ME)
03175       destruct(ME);
03176     return;
03177   }
03178   ndead_next_check=NETDEAD_CHECK_TIME;
03179   ndead_currently=1;
03180   ndead_lasttime=0;
03181   ndead_location=environment();
03182   if (objectp(ndead_location))
03183     ndead_l_filename=object_name(ndead_location);
03184   
03185   if (objectp(environment())
03186       && sizeof(explode(object_name(environment()),"#")) > 1)
03187     env_ndead_info=environment()->QueryProp(P_NETDEAD_INFO);
03188   else
03189     env_ndead_info=0;
03190   
03191   if ( objectp(team=Query(P_TEAM)) )
03192       // Der Test auf assoziierte Teammitglieder (== FolgeNPCs)
03193       // verhindert, dass Spieler nach "schlafe ein" aus dem
03194       // Team ausgetragen werden. -- 29.01.2002 Tiamak
03195       //      && !objectp(amem=Query(P_TEAM_ASSOC_MEMBERS))
03196       //      && !(pointerp(amem) && sizeof(amem)))
03197     team->RemoveMember(ME);
03198   
03199   disable_commands();
03200   move(NETDEAD_ROOM,M_GO|M_NO_ATTACK|M_NOCHECK,"ins Reich der Netztoten");
03201 }

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

static void ndead_revive (  )  [static]

Belebt einen netztoten Spieler wieder.

Reaktiviert Heartbeats, bewegt den Spieler zurueck an den Ort, der eim Einschlafen zum Aufwachen ermittelt wurde (im einfachsten Fall der Raum, wo man eingeschlafen ist).

Definiert in Zeile 3113 der Datei base.c.

Wird benutzt von heart_beat().

03114 {
03115     string fname;
03116     int ret;
03117 
03118     set_heart_beat(1);
03119     ndead_next_check = NETDEAD_CHECK_TIME;
03120     ndead_currently = 0;
03121     ndead_lasttime = 0;
03122 
03123     if ( !objectp(ndead_location) && 
03124          stringp(ndead_l_filename) && strlen(ndead_l_filename)) {
03125         
03126         if ( member( ndead_l_filename, '#' ) == -1 ){
03127             catch(load_object( ndead_l_filename); publish);
03128             ndead_location = find_object(ndead_l_filename);
03129         }
03130         else {
03131             ndead_location = find_object(ndead_l_filename);
03132             if ( !ndead_location && env_ndead_info ){
03133                 fname = explode( ndead_l_filename, "#" )[0];
03134                 catch(ndead_location = 
03135                     (load_object(fname)->SetProp(P_NETDEAD_INFO, env_ndead_info));
03136                     publish);
03137                 if ( !objectp(ndead_location) ){
03138                     catch(load_object( ndead_location);publish);
03139                     ndead_location = find_object(ndead_location);
03140                 }
03141             }
03142         }
03143     }
03144 
03145     if ( !objectp(ndead_location)
03146         || catch(ret = move( ndead_location, M_GO|M_SILENT );publish) 
03147         || ret != 1 ) {
03148         move( "gilden/abenteurer", M_GO|M_SILENT );
03149         ndead_location = environment();
03150     }
03151 
03152     //  ndead_location=0;
03153     ndead_l_filename = 0;
03154     env_ndead_info = 0;
03155 }

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

void NetDead (  ) 

Loggt einen Spieler aus und macht ihn netztot.

Bewegt einen Spieler in den Netztotenraum, deaktiviert Heartbeats im Inventar, ruft BecomesNetDead(), loest Erwartemeldungen aus, triggert Ausloggevent.

Definiert in Zeile 630 der Datei base.c.

Benutzt _set_netdead(), E_ENVIRONMENT, E_OBJECT, E_PLNAME, EVENTD, EVT_LIB_LOGOUT, ME, ndead_location, notify_player_leave(), P_LAST_LOGOUT, P_NAME, query_hc_play(), QueryProp(), remove_living_name(), RemoveChannels(), Set() und set_next_reset().

00631 {
00632   object *inv;
00633   int num;
00634 
00635   catch(RemoveChannels();publish);
00636   
00637   if(query_hc_play()>1)
00638     say("Ploetzlich weicht alle spirituelle Energie aus "+QueryProp(P_NAME)+".\n");
00639   else
00640     say("Ploetzlich weicht alles Leben aus "+QueryProp(P_NAME)+".\n");
00641 
00642   _set_netdead();
00643   remove_call_out("quit");
00644   remove_living_name();
00645   // Wird zwar im save_me() gemacht, aber die Zeitunterschiede beim
00646   // fingern direkt nach dem Ausloggen fuehren immer wieder zu Verwirrungen
00647   if(query_once_interactive(ME) && !QueryProp(P_INVIS))
00648       Set(P_LAST_LOGOUT,time());
00649   if (ME)
00650     ndead_location = environment();
00651   if (query_once_interactive(ME))
00652     catch("secure/merlin"->notify_player_leave(geteuid(ME));publish);
00653    
00654   // Logout-event ausloesen
00655   EVENTD->TriggerEvent(EVT_LIB_LOGOUT, ([
00656                   E_OBJECT: ME,
00657                   E_PLNAME: getuid(ME),
00658                   E_ENVIRONMENT: environment() ]) );
00659 
00660   set_next_reset(900);
00661   /* Bei Nicht-Magier-Shells wird comm::reset() aufgerufen, das prueft, ob
00662      der Spieler immer noch netztot ist, und falls ja, die tmhist loescht.
00663      Die Methode wird von /std/shells/magier.c ueberschrieben, netztote
00664      Magier (die eigentlich schon anderweitig beseitigt worden sein sollten)
00665      werden remove()d und destruct()ed. --Amynthor 05.05.2008 */
00666 
00667   if (environment()) {
00668     catch(environment()->BecomesNetDead(ME);publish);
00669     inv = deep_inventory(ME)+all_inventory(environment());
00670   }
00671   else inv=deep_inventory(ME);
00672   foreach(object ob: inv) {
00673       if (objectp(ob)) //man weiss nie was BND() macht...
00674                   catch( call_other(ob, "BecomesNetDead", ME);publish );
00675   }
00676 }

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

static int new_quit (  )  [static]

Wrapper im quit() herum, verhindert 'ende', falls Spieler kaempft.

Rückgabe:
0 oder Rueckgabewert von quit()
Siehe auch:
quit()

Definiert in Zeile 1417 der Datei base.c.

Benutzt IS_LEARNING, ME, notify_fail(), P_LAST_COMBAT_TIME, Query() und quit().

01417                       {
01418   notify_fail("Du bist in Gedanken noch bei Deinem letzten Kampf.\n"+
01419               "Warte noch etwas bevor Du das Spiel verlaesst,\n"+
01420               "damit Du so nicht in RL weitermachst...\n");
01421   if (time()-Query(P_LAST_COMBAT_TIME)<120 && !IS_LEARNING(ME))
01422     return 0;
01423   return quit();
01424 }

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

void notify_player_change ( string  who,
int  rein,
int  invis 
)

Definiert in Zeile 3606 der Datei base.c.

03607 {
03608   string *list,name;
03609   mixed mlist;
03610 
03611   if (invis) name="("+who+")";
03612     else name=who;
03613 
03614   if (Query(P_INFORMME))
03615   {
03616       if (rein)
03617         tell_object(ME,name+" ist gerade ins "MUDNAME" gekommen.\n");
03618       else
03619         tell_object(ME,name+" hat gerade das "MUDNAME" verlassen.\n");
03620   }
03621 
03622   if(Query(P_WAITFOR_FLAGS) & (0x01))return ;
03623 
03624   if(pointerp(list=Query(P_WAITFOR)) && sizeof(list)
03625       && member(list,who)!=-1) {
03626       if (!QueryProp(P_VISUALBELL))
03627                   name+=sprintf("%c",7); // Char fuer Pieps an den String anhaengen.
03628       delayed_write(
03629             ({ ({sprintf("%s   I S T   J E T Z T   %sD A !!!\n",
03630                                                  name,(rein?"":"N I C H T   M E H R   ")),1}) 
03631                     }));  
03632   }
03633 
03634   if (rein && (sizeof(mlist=QueryProp(P_WAITFOR_REASON))) &&
03635      (mappingp(mlist)) && (mlist[who]))
03636         Show_WaitFor_Reason(who,invis);
03637 }

static int presay ( string  str  )  [static]

Definiert in Zeile 3536 der Datei base.c.

Wird benutzt von _query_presay().

03537 {
03538   if (!str=_unparsed_args())
03539     write("Dein Presay ist jetzt geloescht.\n");
03540   else
03541     printf("Dein Presay lautet jetzt: \"%s\".\n",str=capitalize(str));
03542   SetProp(P_PRESAY,str);
03543   return 1;
03544 }

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

nomask int query_hc_play (  ) 

gibt den HC-Modus zurueck.

Definiert in Zeile 2086 der Datei base.c.

Wird benutzt von bete() und NetDead().

02087 {
02088   return hc_play;
02089 }

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

varargs nomask int query_prevent_shadow ( object  obj  ) 

Bestimmt, ob das Spielerobjekt beschattet werden darf.

Beschatten ist nur fuer Objekte erlaubt, die in /std/player/shadows abgelegt sind. Ausnahme: Testspieler mit gesetztem P_ALLOWED_SHADOW

Parameter:
[in] obj Objekt, was beschatten moechte.
Rückgabe:
0, wenn Beschatten erlaubt, 1 sonst.

Definiert in Zeile 2924 der Datei base.c.

02925 {
02926   string what, allowed_shadow;
02927   int    dummy;
02928 
02929 //  if ( Query(P_TESTPLAYER) )
02930 //      return 0;
02931   
02932   if (obj){
02933     what=object_name(obj);
02934     if (what && what != "" &&
02935         sscanf(what,"/std/player/shadows/%s#%d",what,dummy)==2)
02936       return 0;
02937     
02938     // Einem Testspieler kann man P_ALLOWED_SHADOW auf einen zu testenden
02939     // Shadow setzen.
02940     if ( Query(P_TESTPLAYER) && 
02941                  stringp(what) && 
02942                  stringp(allowed_shadow=Query(P_ALLOWED_SHADOW) &&
02943                  strstr(what, allowed_shadow)==0))
02944                     return 0;
02945   }
02946   return 1;
02947 }

nomask string query_real_name (  ) 

Liefert die UID des Charakters zurueck, also den Charakternamen.

Rückgabe:
UID des Objekts (Charaktername).

Definiert in Zeile 2568 der Datei base.c.

02568                                 {
02569   /* ACHTUNG !! DIES LFUN DARF NICHT ENTFERNT WERDEN !!! */
02570   /* Sie wird vom Gamedriver (zB bei F_ED) aufgerufen !! */
02571   /* Ich bin da zwar nicht so ueberzeugt von, dass der Driver die heutzutage
02572    * noch ruft, aber die halbe Mudlib ruft sie. ;-) (Zesstra, 27.4.08)
02573    */
02574   return getuid();
02575 }

nomask string query_realip (  ) 

Definiert in Zeile 4157 der Datei base.c.

Benutzt realip.

04158 {
04159   return realip ? realip : "";
04160 }

string QueryDefaultHome (  ) 

Definiert in Zeile 2964 der Datei base.c.

02965 {
02966   return default_home;
02967 }

int QueryGuest (  ) 

Ist dieser Character ein Gast?

Rückgabe:
1, wenn Gast, 0 sonst.

Definiert in Zeile 3206 der Datei base.c.

Wird benutzt von GiveExplorationPoint() und quit().

03207 {
03208   string dummy;
03209   return sscanf(getuid(),"gast%d",dummy);
03210 }

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

string QueryPrayRoom (  ) 

Definiert in Zeile 2979 der Datei base.c.

Wird benutzt von init().

02980 {
02981   if(hc_play>1)
02982   {
02983     return "/room/nirvana";
02984   }
02985   if(QueryProp(P_GUILD)=="chaos")
02986     return "/d/polar/files.chaos/swift/room/cl2tu4_3";
02987   if (pray_room) return pray_room;
02988   else return default_home;
02989 }

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

int quit (  ) 

Speichert den Spieler und loggt ihn aus (Spielerkommando 'ende').

Der Spieler wird vollstaendig ausgeloggt, d.h. das Spielerobjekt zerstoert.

Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
disconnect()

Definiert in Zeile 1395 der Datei base.c.

Benutzt destruct(), ME, notify_player_leave(), P_LAST_QUIT, P_NAME, QueryGuest(), QueryProp(), remove_living_name(), RemoveChannels(), save_me() und SetProp().

Wird benutzt von heart_beat(), new_quit() und reset().

01396 {
01397   int arg;
01398   SetProp(P_LAST_QUIT,time());
01399   catch(RemoveChannels();publish);
01400   if(!QueryGuest())
01401   {
01402     save_me(0);
01403     tell_object(ME,"Speichere "+QueryProp(P_NAME)+".\n");
01404   }
01405   if(environment()) catch(environment()->PlayerQuit(ME);publish);
01406   if (interactive(ME) && query_once_interactive(ME)) 
01407     catch("secure/merlin"->notify_player_leave(geteuid(ME));publish);
01408   remove_living_name();
01409   if(catch(remove();publish)) destruct(ME);
01410   return 1;
01411 }

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

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

mixed RaceDefault ( string  arg  ) 

Setzt Defaultwerte fuer Rassen - wird von den Shells ueberschrieben.

Definiert in Zeile 268 der Datei base.c.

Benutzt DT_BLUDGEON, P_BODY und P_HANDS.

Wird benutzt von checkConsistency() und RaceDefault().

00269 {
00270   if (!arg)
00271     return 0;
00272   switch(arg)
00273   {
00274     case P_HANDS :
00275       return ({" mit blossen Haenden",30,DT_BLUDGEON});
00276     case P_BODY :
00277       return 0;
00278   }
00279   return 0;
00280 }

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

private int RandomSize (  ) 

Gibt eine Zufallszahl um P_AVERAGE_SIZE herum zurueck.

Rückgabe:
Zufaellige Groesse.

Definiert in Zeile 2024 der Datei base.c.

02025 {
02026   return (100+random(13)-random(13)+random(13)-random(13))*
02027     (QueryProp(P_AVERAGE_SIZE)||170)/100;
02028 }

varargs void Reconnect ( int  silent,
string  ip 
)

Velebt einen Netztoten wieder.

Wird im Login gerufen, wenn der Spieler netztot war. Aequivalent zu start_player()

Parameter:
[in] silent Wenn Flag gesetzt, werden keine Meldung an den Raum ausgegeben.
[in] ip Textuelle Repraesentation der IP-Adresse, von der der Spieler kommt.
Siehe auch:
start_player()

Definiert in Zeile 508 der Datei base.c.

Benutzt inv(), ME und ndead_location.

Wird benutzt von Reconnect().

00509 {
00510     int num;
00511     string called_from_ip;
00512     object *inv;
00513 
00514     if ( query_once_interactive(ME) ){
00515         startup_telnet_negs();
00516         Set( P_LAST_LOGIN, time() );
00517     }
00518 
00519     enable_commands();
00520     set_living_name( getuid() );
00521     _remove_netdead();
00522     set_heart_beat(1);
00523     // Hunttimes aktualisieren und ggf. Feinde vergessen.
00524     update_hunt_times((time()-QueryProp(P_LAST_LOGOUT)) /__HEART_BEAT_INTERVAL__);
00525     // Heartbeats in Objekten im Inv reaktiveren.
00526     restart_heart_beats();
00527     // life.c will ggf. was aufraeumen
00528     life::reconnect();
00529 
00530     log_file( "REENTER", sprintf( "%-11s %s, %-15s (%s).\n",
00531                                   capitalize(getuid(ME)), ctime(time())[4..15],
00532                                   query_ip_number(ME)||"Unknown",
00533                                                                   query_ip_name(ME)||"Unknown" ),
00534               200000 );
00535 
00536     if ( ndead_currently )
00537         ndead_revive();
00538 
00539     if ( !silent && query_once_interactive(ME) )
00540         delayed_notify( getuid(ME) );
00541 
00542     command::reconnect();
00543     if ( query_once_interactive(ME) )
00544         modify_prompt();
00545 
00546     // Login-event ausloesen
00547     EVENTD->TriggerEvent(EVT_LIB_LOGIN, ([
00548                   E_OBJECT: ME,
00549                   E_PLNAME: getuid(ME),
00550                   E_ENVIRONMENT: environment() ]) );
00551 
00552     catch( num = "secure/mailer"->FingerMail(geteuid());publish );
00553 
00554     if ( num )
00555         write( "Du hast " + num + " neue" + (num == 1 ? "n Brief" : " Briefe")
00556                + " im Postamt liegen.\n" );
00557 
00558     if ( QueryProp(P_AWAY) )
00559         write( break_string( "Du bist als abwesend gekennzeichnet: " +
00560                              QueryProp(P_AWAY) + ".", 78 ) );
00561 
00562     catch( RegisterChannels(); publish );
00563 
00564     if ( (called_from_ip = Query(P_CALLED_FROM_IP)) &&
00565          query_ip_number(ME) != called_from_ip ) {
00566         string tmp;
00567 
00568         if ( stringp(tmp = query_ip_name(called_from_ip)) &&
00569              tmp != called_from_ip )
00570             tmp = " [" + tmp + "]";
00571         else
00572             tmp = "";
00573 
00574         write( "Das letzte Mal kamst Du von " + called_from_ip + tmp + ".\n" );
00575     }
00576 
00577     Set( P_CALLED_FROM_IP, query_ip_number(ME) );
00578 
00579     // falls Gegenstaende mit 'upd -ar' upgedated wurden, muessen die
00580     // "verloren gegangenen" init()'s nachgeholt werden
00581     if ( query_once_interactive(ME) && !IS_LEARNER(ME) )
00582         call_out( "inits_nachholen", 0, Query(P_LAST_LOGOUT),
00583                   all_inventory(ME) );
00584 
00585     // noch nicht geclonte Autoloader "nach"clonen
00586     while ( remove_call_out("load_auto_objects") != -1 )
00587         /* do nothing */;
00588 
00589     if ( sizeof(autoload_rest) )
00590         call_out( "load_auto_objects", 0, autoload_rest );
00591 
00592     if (ndead_location) {
00593       catch( ndead_location->BecomesNetAlive(ME);publish );
00594       inv = all_inventory(ndead_location);
00595       ndead_location = 0;
00596     }
00597     else
00598       inv = ({});
00599 
00600     inv += deep_inventory(ME);
00601 
00602     //ZZ foreach statt call_other(), damit nen bug in BNA nicht die anderen
00603     //BNA verhindert.
00604     foreach(object ob: inv) {
00605                 //es ist nicht auszuschliessen, dass Items durch BecomesNetAlive()
00606                 //eines anderen zerstoert werden.
00607                 if (objectp(ob))
00608           catch( call_other(ob, "BecomesNetAlive", ME);publish );
00609     }
00610 
00611     // Erst an dieser Stelle, weil der Spieler u.U. durch ein BecomesNetAlive()
00612     // noch bewegt wurde.
00613     if ( !silent && environment() && object_name(environment()) != NETDEAD_ROOM )
00614     {
00615         if(query_hc_play()<=1)
00616           tell_room(environment(),QueryProp(P_NAME) + " weilt wieder unter den Lebenden.\n",({ME}) );
00617         else 
00618           tell_room(environment(),QueryProp(P_NAME) + " weilt wieder unter den Verstorbenen.\n",({ME}) );
00619     }
00620     
00621     if ( query_once_interactive(ME) )
00622         ListAwaited();
00623 }

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

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

static int remote ( string  str,
int  flag 
) [static]

Spielerkommando fuers remoten 'r:'.

Parameter:
[in] str Spielereingabe
[in] flag Genetivflag
Rückgabe:
1 oder 0, falls Spieler nicht emoten kann (kein CAN_REMOTE Flag in P_CAN_FLAGS).

Definiert in Zeile 1942 der Datei base.c.

01943 {
01944   int m;
01945   string tmp, dest;
01946   string *exstr;
01947   object destpl;
01948 
01949   if ( !(Query(P_CAN_FLAGS) & CAN_REMOTE) )
01950       return 0;
01951 
01952   if ( !(str=_unparsed_args()) ||
01953        sizeof( (exstr=explode(str," ")) - ({""}) ) <= 1 ){
01954       write("Was willst Du zu wem `emoten`?\n");
01955       return 1;
01956   }
01957 
01958   dest = lower_case(exstr[0]);
01959 
01960   if( !(destpl=find_player( dest ) ) ||
01961       (destpl->QueryProp(P_INVIS) && !IS_LEARNER(ME)) ){
01962     write("Einen solchen Spieler gibt es derzeit nicht.\n");
01963     return 1;
01964   }
01965 
01966   tmp = implode( exstr[1..], " " );
01967 
01968   tmp = regreplace( tmp, "(^|[^#])#($|[^#])", "\\1aus der Ferne\\2", 1 );
01969   tmp = regreplace( tmp, "(^|[^\\^])\\^($|[^\\^])", "\\1in der Ferne\\2", 1 );
01970   tmp = regreplace( tmp, "##", "#", 1 );
01971   tmp = regreplace( tmp, "\\^\\^", "^", 1 );
01972 
01973   if ( strstr( tmp, "aus der Ferne" ) == -1
01974        && strstr( tmp, "in der Ferne" ) == -1 )
01975       tmp += " aus der Ferne";
01976 
01977   if ( QueryProp(P_INVIS) && IS_LEARNER(destpl) ){
01978       str = "(" + capitalize(getuid(ME));
01979       if ( flag )
01980           str += member( "sxz", str[<1] ) == -1 ? "s" : "'";
01981       str += ")";
01982   }
01983   else
01984       str = (flag ? capitalize(name(WESSEN)) : capitalize(name(WER)));
01985 
01986   str += " " + tmp + (member( ".?!", tmp[<1] ) == -1 ? "." : "") + "\n";
01987 
01988   if ( (m = destpl->Message( break_string(str,78), MSGFLAG_REMOTE )) > 0 )
01989       _recv(destpl, capitalize(destpl->name()) + "->" + str, MSGFLAG_REMOTE);
01990   else if (m == MESSAGE_CACHE)
01991       write( capitalize(destpl->name(WER) + " ist gerade beschaeftigt.\n") );
01992   else if (m == MESSAGE_IGNORE_YOU)
01993       write( capitalize(destpl->name(WER) + " ignoriert Dich.\n") );
01994   else
01995       write( capitalize(destpl->name(WER) + " ignoriert Deine Meldung.\n") );
01996   return 1;
01997 }

varargs int remove ( int  silent  ) 

Bittet das Spielerobjekt, sich zu zerstoeren.

Parameter:
[in] silent Flag, ob ohne Textausgaben zerstoert werden soll
Rückgabe:
Erfolg der Selbstzerstoerung

Definiert in Zeile 323 der Datei base.c.

Benutzt remove().

00324 {
00325   return moving::remove(silent);
00326 }

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

varargs int remove ( mixed  arg  ) 
void reset ( void   ) 

Definiert in Zeile 253 der Datei base.c.

Benutzt reset() und set_next_reset().

00253              { 
00254   comm::reset();
00255   // momentan kann der Reset jetzt abgeschaltet werden, da er nur die
00256   // TM-History loescht und ggf. von Netdead() und Disconnect() reaktiviert
00257   // wird.
00258   set_next_reset(-1);
00259 }

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

static void restart_heart_beats (  )  [static]

Schaltet HBs in Objekten im Inv wieder ein.

Schaltet in allen Objekten in hb_obs den Heartbeat ein. In hb_obs (glob. Var.) stehen alle Objekte, die beim letzten Aufruf von stop_heart_beats() einen HB hatten.

Siehe auch:
stop_heart_beats

Definiert in Zeile 362 der Datei base.c.

Benutzt hb_obs, i, ob() und set_object_heart_beat().

00363 {
00364   int i;
00365 
00366   if (pointerp(hb_obs))
00367   {
00368     foreach(object ob: hb_obs)
00369       set_object_heart_beat(ob,1);
00370     hb_obs=0;
00371   }
00372 }

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

int review (  ) 

Definiert in Zeile 2580 der Datei base.c.

02580              {
02581   string *msg;
02582   write(short());
02583   write("Deine Bewegungen werden wie folgt gemeldet:\n"+
02584         "mout:  "+name(WER)+" "+(msg=explode(QueryProp(P_MSGOUT),"#"))[0]
02585        +" <Richtung>"+(sizeof(msg)>1 ? msg[1] : "")+".\n"+
02586         "min:   "+name(WER)+" "+QueryProp(P_MSGIN)+".\n"+
02587         "mmout: "+name(WER)+" "+QueryProp(P_MMSGOUT)+".\n"+
02588         "mmin:  "+name(WER)+" "+QueryProp(P_MMSGIN)+".\n"+
02589         (IS_LEARNER(ME) ?
02590          "cmsg:  "+name(WER)+" "+QueryProp(P_CLONE_MSG)+".\n"+
02591          "dmsg:  <Irgendetwas> "+QueryProp(P_DESTRUCT_MSG)+".\n"
02592          : "")+
02593         "Wenn Du jemanden angreifst, sieht das so aus:\n"+
02594         name(WER)+" greift Dich"+QueryProp(P_HANDS)[0]+" an.\n");
02595   return 1;
02596 }

int save_character (  ) 

Definiert in Zeile 2726 der Datei base.c.

02726                      {
02727   save_me(1);
02728   write("Ok.\n");
02729   return 1;
02730 }

void save_me ( mixed  value_items  ) 

Definiert in Zeile 2732 der Datei base.c.

02733 {
02734   mixed val;
02735   string obnam, dummy;
02736   int i;
02737 
02738   // Gaeste werden nicht gespeichert
02739   if( getuid()[0..3]=="gast" )
02740     return;
02741  
02742   // Autoloader identifizieren und speichern
02743   autoload=([]);
02744   foreach(object ob: deep_inventory(ME)) {
02745     if( val = ob->QueryProp( P_AUTOLOADOBJ ) )
02746     {
02747       if( sscanf( object_name( ob ), "%s#%s", obnam, dummy )==2  )
02748       {
02749         if (obnam=="/obj/money")
02750           autoload[obnam] += val;
02751         else
02752           autoload += ([obnam:val]);
02753       }
02754     }
02755   }
02756   // An noch nicht geclonte Autoloader denken!
02757   autoload += autoload_rest;
02758   
02759   // Im Bedarfsfall Wert des Inventory bestimmen
02760   if (value_items)
02761     calculate_value();
02762   else
02763     SetProp(P_CARRIED_VALUE, 0);
02764 
02765   // Logout-Zeit speichern
02766   if(query_once_interactive(ME) && !QueryProp(P_INVIS))
02767     Set(P_LAST_LOGOUT,time());
02768 
02769   // Funktion zur Bestimmung des Gildenrating aufrufen
02770   dummy=GUILD_DIR+QueryProp(P_GUILD);
02771   if (find_object(dummy) || file_size(dummy+".c")>-1)
02772     catch(call_other(dummy,"GuildRating",this_object());publish);
02773 
02774   // Speichern des Spielers
02775   save_object("/"+SAVEPATH+extract(getuid(),0,0)+"/" + getuid());
02776 }

static int score ( string  arg  )  [static]

Gibt die Infos ueber den Char an den Spieler aus (Spielerkommando 'info').

Parameter:
[in] arg Wenn arg=="short", wird eine Kurzuebersicht ausgegeben.
Rückgabe:
1
Siehe auch:
short_score()

Definiert in Zeile 1431 der Datei base.c.

Benutzt al_to_title(), break_string(), CountUp(), death_suffering(), FEMALE, Forschung(), gender, i, IS_LEARNING, MALE, ME, NEUTER, P_ALIGN, P_ATTRIBUTES, P_AWAY, P_GENDER, P_GHOST, P_GUILD, P_GUILD_LEVEL, P_HP, P_LAST_COMBAT_TIME, P_LEP, P_LEVEL, P_MAX_HP, P_MAX_SP, P_POISON, P_QP, P_RACE, P_SIZE, P_SP, P_WEIGHT, P_WIMPY, P_WIMPY_DIRECTION, P_XP, QM, Query(), QueryAttributeOffset(), QueryEnemies(), QueryProp(), QueryRealAttribute(), show_age(), TeamPrefix() und WEN.

Wird benutzt von LiquidateEK() und short_score().

01431                              {
01432   string tmp, gender;
01433   int i,sz,val, plev;
01434   mixed ind;
01435   object *enem1, *enem2, *inv;
01436 
01437   if (QueryProp(P_GHOST)) {
01438     write("Im ewigen Leben gibt es keine Punkte.\n");
01439     return 1;
01440   }
01441 
01442   if((plev = QueryProp(P_LEP)/100) < 0) plev = 1;
01443   switch(tmp = QueryProp(P_GENDER)) {
01444   case MALE: gender = "maennlich"; break;
01445   case FEMALE: gender = "weiblich"; break;
01446   case NEUTER: gender = "neutral"; break;
01447   default: gender = lower_case(tmp);
01448   }
01449 
01450   ind = m_indices(QueryProp(P_ATTRIBUTES));
01451   tmp = "";
01452   foreach(string index: ind) {
01453     string aname;
01454     switch (index) {
01455       case "int": aname = "Intelligenz"; break;
01456       case "con": aname = "Ausdauer"; break;
01457       case "dex": aname = "Geschicklichkeit"; break;
01458       case "str": aname = "Kraft"; break;
01459       default:
01460         if(stringp(index)) aname = capitalize(index);
01461         else aname = "Unbekannt";
01462     }
01463     aname = sprintf("%-18'.'s %2.2d", aname+" ", QueryRealAttribute(index));
01464     if((val = QueryAttributeOffset(index)))
01465       aname += sprintf(" (%s%d)", (val>=0?"+":""), val);
01466     tmp += aname + "\n";
01467   }
01468 
01469   printf("- %-'-'68s\n",
01470          TeamPrefix()+capitalize(implode(explode(short()||"","\n"),""))+" ");
01471   if(arg!="short") {
01472     printf("Rasse ............ %-' '18s Abenteuer ........ %d %s\n",
01473            QueryProp(P_RACE), QueryProp(P_QP),
01474            (val = QM->QueryTotalQP()) == QueryProp(P_QP) ? "" : "("+val+")");
01475     printf("Geschlecht ....... %-' '18s Groesse .......... %d cm\n",
01476            gender, QueryProp(P_SIZE));
01477     printf("Stufe ............ %-3.3d %-' '14s Gewicht .......... %d kg\n",
01478            QueryProp(P_LEVEL), (QueryProp(P_LEVEL) < plev ? "("+plev+")" : ""),
01479            QueryProp(P_WEIGHT) / 1000);
01480     printf("Gilde ............ %-' '18s Gildenstufe ...... %d\n",
01481          capitalize(QueryProp(P_GUILD)), QueryProp(P_GUILD_LEVEL));
01482   }
01483   printf("Erfahrung ........ %-' '18s Charakter ........ %-s\n\n",
01484          QueryProp(P_XP)+ " Punkte", al_to_title(QueryProp(P_ALIGN)));
01485   printf("%#-76.2s\n\n", tmp);
01486   printf("Gesundheit ....... %-3.3d %-' '14s Gift ............. %s\n",
01487          QueryProp(P_HP),
01488          (QueryProp(P_HP) == (val = QueryProp(P_MAX_HP)) ? "" : "("+val+")"),
01489          ((val = QueryProp(P_POISON)) ?
01490           (val < 4 ? "leicht" : "gefaehrlich") : "gesund"));
01491   printf("Konzentration .... %-3.3d %-' '14s Vorsicht ......... %s\n",
01492          QueryProp(P_SP),
01493          (QueryProp(P_SP) == (val = QueryProp(P_MAX_SP)) ? "" : "("+val+")"),
01494          ((ind = QueryProp(P_WIMPY)) ? ""+ind : "mutig"));
01495   printf("Todesfolgen....... %-' '18s %s\n",
01496          ((val = death_suffering()) ? ""+((val+9)/10) : "kein Malus"),
01497          (QueryProp(P_WIMPY) && ind=QueryProp(P_WIMPY_DIRECTION))
01498          ? sprintf("Fluchtrichtung ... %O", ind) : "");
01499   printf("%s",
01500          (time()-Query(P_LAST_COMBAT_TIME)<120 && !IS_LEARNING(ME)) ?
01501          "Spiel verlassen .. nicht moeglich\n" : ""
01502          );
01503 
01504   if(arg!="short") {
01505     write(break_string(Forschung(), 70));
01506     if(ind=QueryProp(P_AWAY))
01507       printf("Du bist nicht ansprechbar: %O\n",ind);
01508   }
01509 
01510   if(sizeof(enem1=((mixed)QueryEnemies())[0])) {
01511     enem2=({});
01512     inv=all_inventory(environment(ME));
01513     foreach(object en: enem1) {
01514       if (member(inv,en)==-1) // Ist unser Feind und ist nicht hier
01515         enem2+=({en});
01516     }
01517     if(sizeof(enem2)) {
01518       write("Du verfolgst ");
01519       write(break_string(CountUp(map_objects(enem2, "name", WEN))+".", 78));
01520     }
01521   }
01522   if(arg!="short") show_age();
01523   printf("%-'-'70s\n", "");
01524   return 1;
01525 }

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

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

static int self_delete (  )  [static]

Spielerkommando 'selbstloeschung'.

Gibt Meldung aus und fragt nach einer Bestaetigung.

Rückgabe:
1 bei Erfolg, 0 sonst.

Definiert in Zeile 907 der Datei base.c.

Benutzt input_to() und MUDNAME.

00908 {
00909   write(
00910     "     B I S T  D U  D I R  W I R K L I C H  S I C H E R ????????????\n"+
00911     "Wenn Du Dich selbstloeschen willst, ist Dein Charakter UNWIDERRUFLICH\n"+
00912     "verloren. Es gibt KEINE Moeglichkeit ihn wiederzuerschaffen. Solltest\n"+
00913     "Du nur zeitweilig vom "MUDNAME" wegbleiben wollen, so benutze bitte\n"+
00914     "den Befehl 'spielpause'.\n"+
00915     "Fallst Du Dich immer noch selbstloeschen willst, gib Dein Password ein."+
00916     "\n\n");
00917   write("Bitte das Password angeben: ");
00918   input_to("self_delete2",1);
00919   return 1;
00920 }

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

int self_delete2 ( string  str  ) 

Spielerkommando 'selbstloeschung'.

Empfaengt Bestaetigung des Spielers und ruft Loeschfunktion in /secure/master auf.

Parameter:
[in] str Spielereingabe
Rückgabe:
1 bei Erfolg, 0 sonst.

Definiert in Zeile 928 der Datei base.c.

Benutzt delete_player(), E_ENVIRONMENT, E_GUILDNAME, E_PLNAME, EVENTD, EVT_LIB_PLAYER_DELETION, GUILD_DIR, ME, name, P_DEADS, P_GUILD, PL, QueryProp() und WER.

00929 {
00930   int ret;
00931   ret=(int)"secure/master"->delete_player(str, getuid(PL));
00932   if (!ret)
00933   {
00934     write("Das hat nicht hingehauen (Gott sei Dank ....)\n");
00935     return 1;
00936   }
00937   if (QueryProp(P_GUILD)&&file_size(GUILD_DIR+QueryProp(P_GUILD)+".c")>-1)
00938     catch(call_other(GUILD_DIR+QueryProp(P_GUILD), "austreten");publish);
00939 
00940   if (QueryProp(P_DEADS) < 5) {
00941     write("Adios! Man sieht sich.\n");
00942     say(name(WER,1)+" hat sich gerade selbst zerstoert.\n");
00943   }
00944   else {
00945     write(
00946       "\nTod kommt auf seinem weissen Pferd angeritten.\n"
00947      +"Er steigt ab, baut sich drohend vor Dir auf und mustert Dich schadenfroh.\n"
00948      +"\nTod sagt: ENDLICH! NUN KANN DIR AUCH LARS NICHT MEHR HELFEN!\n"
00949      +"\nTod holt weit mit seiner Sense aus. Mit grossem Schwung laesst er sie auf\n"
00950      +"Dich zusausen und dann...\n");
00951     say(name(WER,1)+" schied gerade endgueltig von uns.\n");
00952   }
00953 
00954   // Event ausloesen. ;-)
00955   EVENTD->TriggerEvent(EVT_LIB_PLAYER_DELETION, ([
00956                 E_PLNAME: getuid(ME),
00957                 E_ENVIRONMENT: environment(),
00958                 E_GUILDNAME: QueryProp(P_GUILD) ]) );
00959 
00960   remove(1);
00961   return 1;
00962 }

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

int set_ascii_art ( string  str  ) 

Definiert in Zeile 3371 der Datei base.c.

03372 {
03373   if (str!="ein"&&str!="aus")
03374   {
03375      printf("Du moechtest 'Grafik' "+(QueryProp(P_NO_ASCII_ART)?"NICHT ":"")+
03376                                      "sehen.\n");
03377   }
03378 
03379   if (str=="ein") {
03380     SetProp(P_NO_ASCII_ART, 0);
03381     printf("Zukuenftig moechtest Du 'Grafik' sehen.\n");
03382   }
03383 
03384   if (str=="aus") {
03385     SetProp(P_NO_ASCII_ART, 1);
03386     printf("Zukuenftig moechtest Du KEINE 'Grafik' mehr sehen.\n");
03387   }
03388 
03389 
03390   return 1;
03391 }

static mixed set_email ( string  str  )  [static]

Setzt Email-Adresse des Spielers (Spielerkommando).

Parameter:
[in] str Spielereingabe
Rückgabe:
1 bei Erfolg, 0 sonst.

Definiert in Zeile 890 der Datei base.c.

Benutzt _unparsed_args(), P_MAILADDR, QueryProp() und SetProp().

00891 {
00892   if (!(str=_unparsed_args())) {
00893     write("Deine offizielle Email-Adresse lautet: " + QueryProp(P_MAILADDR)
00894           +"\n");
00895     return 1;
00896   }
00897   write("Deine offizielle Email-Adresse wurde geaendert.\n");
00898   if (str=="keine") str="none";
00899   SetProp(P_MAILADDR, str); // rumata: return entfernt
00900   return 1;
00901 }

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

varargs nomask void set_hc_play ( string  str,
int  val 
)

Setzt den HC-Modus.

Definiert in Zeile 2065 der Datei base.c.

02066 {
02067    string str1;
02068 
02069     str1 = explode( object_name(previous_object()), "#" )[0];
02070     
02071     if ( str1 != "/secure/login" &&
02072          previous_object()!=this_object() &&
02073          extern_call() &&
02074          (!geteuid(ME) || geteuid(ME) != getuid(ME) ||
02075           capitalize(geteuid(ME)) != str ||
02076           geteuid(ME) != geteuid(previous_object())) ){
02077         write( "DIESER VERSUCH WAR ILLEGAL !!\n" );
02078         return;
02079     }
02080     
02081     hc_play=val;
02082 }

static int set_homepage ( string  str  )  [static]

Setzt Spielerhomepage (Spielerkommando).

Parameter:
[in] str Spielereingabe
Rückgabe:
1 bei Erfolg, 0 sonst.

Definiert in Zeile 780 der Datei base.c.

Benutzt _unparsed_args(), P_HOMEPAGE, QueryProp() und SetProp().

00781 {
00782   mixed tmp;
00783   if (!(str=_unparsed_args())) {
00784     if (!QueryProp(P_HOMEPAGE))
00785       write("Du hast keine URL-Adresse gesetzt!\n");
00786     else
00787       write("Deine offizielle URL-Adresse lautet: " + QueryProp(P_HOMEPAGE)
00788             +"\n");
00789     return 1;
00790   }
00791   write("Deine offizielle URL-Adresse wurde geaendert.\n");
00792   if (str=="keine") 
00793     SetProp(P_HOMEPAGE, 0);
00794   else {
00795     tmp = filter(regexplode(str, "[<][^>]*[>]"),
00796                        lambda(({'e}), ({#'!=, ({#'[, 'e, 0}), '<'})));
00797     write("Sie lautet jetzt: "+(str = implode(tmp, ""))+"\n");
00798     SetProp(P_HOMEPAGE, str);
00799   }
00800   return 1;
00801 }

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

static int set_icq ( string  str  )  [static]

Setzt ICQ-UIN des Spielers (Spielerkommando).

Parameter:
[in] str Spielereingabe
Rückgabe:
1 bei Erfolg, 0 sonst.

Definiert in Zeile 836 der Datei base.c.

Benutzt P_ICQ, QueryProp() und SetProp().

00836                                {
00837   int num;
00838 
00839   if (!str || str=="") {
00840     if (!num=QueryProp(P_ICQ))
00841       write("Du hast keine ICQ-Nummer gesetzt!\n");
00842     else
00843       printf("Deine ICQ-Nummer lautet: %d\n",num);
00844     return 1;
00845   }
00846   if (sscanf(str,"%d",num)!=1 || !num) {
00847     write("Deine ICQ-Nummer wurde geloescht.\n");
00848     SetProp(P_ICQ, 0);
00849   } else {
00850     write("Deine ICQ-Nummer wurde geaendert.\n");
00851     printf("Sie lautet jetzt: %d\n",num);
00852     SetProp(P_ICQ, num);
00853   }
00854   return 1;
00855 }

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

int set_keep_alive ( string  str  ) 

Definiert in Zeile 4049 der Datei base.c.

04049                                {
04050   if (str == "ein") {
04051     telnet_tm_counter = 600 / __HEART_BEAT_INTERVAL__;
04052     tell_object(this_object(), break_string(
04053                 "An Deinen Client werden jetzt alle 10 Minuten unsichtbare Daten "
04054                 "geschickt, um zu verhindern, dass Deine Verbindung zum "MUDNAME
04055                 " beendet wird.", 78));
04056   }
04057   else if (str == "aus") {
04058     telnet_tm_counter = 0;
04059     tell_object(this_object(),break_string(
04060                 "Du hast das Senden von unsichtbaren Daten (Keep-Alive-Pakete) an "
04061                 "Deinen Client ausgeschaltet.",78));
04062   }
04063   else {
04064     if (!telnet_tm_counter)
04065       tell_object(this_object(), break_string(
04066                 "An Deinen Client werden keine Keep-Alive-Pakete geschickt.",78));
04067     else
04068       tell_object(this_object(), break_string(
04069                 "An Deinen Client werden alle 10 Minuten " 
04070                 "unsichtbare Daten geschicht, damit Deine Verbindung "
04071                 "zum "MUDNAME" nicht beendet wird.",78));
04072   }
04073   return 1;
04074 }

static int set_location ( string  str  )  [static]

Setzt Spieler-Wohnort (Spielerkommando).

Parameter:
[in] str Spielereingabe
Rückgabe:
1 bei Erfolg, 0 sonst.

Definiert in Zeile 807 der Datei base.c.

Benutzt _unparsed_args(), F_VALUE, P_LOCATION, Query() und Set().

00808 {
00809     mixed ort;
00810 
00811     if ( str == "0" || str == "loeschen" ){
00812         Set( P_LOCATION, 0 );
00813         write( "Du loescht Deine Ortsangabe.\n" );
00814         return 1;
00815     }
00816 
00817     if ( stringp(str = _unparsed_args()) && str != "" ){
00818         Set( P_LOCATION, capitalize(str) );
00819         printf( "Du aenderst Deine Ortsangabe auf \"%s\".\n",
00820                 Query(P_LOCATION) );
00821     }
00822     else if ( stringp(ort = Query(P_LOCATION)) )
00823         printf( "Deine Ortsangabe lautet \"%s\".\n", Query(P_LOCATION) );
00824     else{
00825         Set( P_LOCATION, 0, F_VALUE );
00826         write( "Du hast keine Ortsangabe gesetzt.\n" );
00827     }
00828 
00829     return 1;
00830 }

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

static int set_messenger ( string  str  )  [static]

Setzt Instant Messanger vom Spieler (Spielerkommando).

Parameter:
[in] str Spielereingabe
Rückgabe:
1 bei Erfolg, 0 sonst.

Definiert in Zeile 861 der Datei base.c.

Benutzt _unparsed_args(), P_ICQ, P_MESSENGER, QueryProp() und SetProp().

00861                                      {
00862   int num;
00863   string s;
00864 
00865   if (!str || str=="") {
00866     if (!s=QueryProp(P_MESSENGER))
00867       if (!num=QueryProp(P_ICQ)) 
00868         write("Du hast keine Messenger-ID gesetzt.\n");
00869       else 
00870         printf("Du hast keine Messenger-ID gesetzt, aber eine ICQ-Nummer: %d\n", num);
00871     else
00872       printf("Deine Messenger-ID lautet: %s\n", s);
00873     return 1;
00874   }
00875   if (str=="loeschen" || str=="keine") {
00876     write("Deine Messenger-ID wurde geloescht.\n");
00877     SetProp(P_MESSENGER, 0);
00878   } else {
00879     s = _unparsed_args();
00880     printf("Deine Messenger-ID lautet nun: %s\n", s);
00881     SetProp(P_MESSENGER, s);
00882   }
00883   return 1;
00884 }                                     

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

nomask void set_realip ( string  str  ) 

Definiert in Zeile 4149 der Datei base.c.

Benutzt realip.

04150 {
04151   if(previous_object() && strstr(object_name(previous_object()),"/secure")==0)
04152   {
04153     realip=str;
04154   }
04155 }

static int set_screensize ( string  str  )  [static]

Definiert in Zeile 3461 der Datei base.c.

03462 {
03463   int size;
03464 
03465   if (str && (str[0..2] == "abs" || str[0..2]=="rel")) {
03466     size = QueryProp(P_MORE_FLAGS);
03467     if (str[0..2] == "abs") {
03468       size |= E_ABS;
03469       write("Es wird beim Prompt die Zeilenzahl des Textes angegeben.\n");
03470     }
03471     else {
03472       size &= ~E_ABS;
03473       write("Es wird beim Prompt der prozentuale Anteil des Textes angegeben.\n");
03474     }
03475     SetProp(P_MORE_FLAGS, size);
03476     return 1;
03477   }
03478 
03479   if ( str && (str=="auto" || sscanf( str, "auto %d", size )) ){
03480       if ( size > 0 ){
03481           write("Ungueltiger Wert! "
03482                 "In Verbindung mit 'auto' sind nur negative Werte erlaubt.\n");
03483           return 1;
03484       }
03485 
03486       SetProp( P_SCREENSIZE, size-1 );
03487 
03488       write("Ok, Deine Zeilenzahl wird nun automatisch ermittelt (derzeit "+
03489             QueryProp(P_SCREENSIZE)+").\n"+
03490             break_string("Bitte beachte, dass dies nur einwandfrei "
03491                          "funktioniert, wenn Dein Client Telnetnegotiations "
03492                          "unterstuetzt (siehe auch \"hilfe telnegs\").") );
03493     return 1;
03494   }
03495 
03496   if ( !str || str=="" || !sscanf( str, "%d", size ) || size < 0 || size > 100){
03497       write(break_string(
03498             sprintf("Mit dem Befehl 'zeilen <groesse>' kannst Du einstellen, "
03499             "wieviele Zeilen bei mehrseitigen Texten auf einmal ausgegeben "
03500             "werden. Die angegebene Groesse muss zwischen 0 und 100 liegen. "
03501             "Bei Groesse 0 wird einfach alles ausgegeben (ohne Pause). Mit "
03502             "der Einstellung 'auto' wird die Groesse automatisch ueber "
03503             "die Telnetnegotiations ermittelt (siehe auch 'hilfe telnegs'). "
03504             "Um nach einer Seite Text noch etwas Platz zu haben, kann man z.B. "
03505             "'zeilen auto -3' einstellen.\n"
03506             "Die Voreinstellung ist 20 Zeilen.\n"
03507             "Mit 'zeilen abs[olut]' und 'zeilen rel[ativ]' kannst Du fest"
03508             "legen, ob im Prompt bei langen Texten die aktuelle Zeilennummer "
03509             "oder eine prozentuale Angabe ausgegeben wird.\n"
03510             "Deine aktuelle Einstellung ist %d%s Zeilen (%s).",
03511             QueryProp(P_SCREENSIZE),
03512             Query(P_SCREENSIZE) < 0 ? " 'automatische'" : "",
03513             QueryProp(P_MORE_FLAGS) & E_ABS ? "absolut" : "relativ"),78,0,1));
03514     return 1;
03515   }
03516 
03517   SetProp( P_SCREENSIZE, size );
03518 
03519   printf( "Okay, Deine Zeilenzahl steht nun auf %d.\n", size );
03520   return 1;
03521 }

static int set_title ( string  str  )  [static]

Definiert in Zeile 2659 der Datei base.c.

02660 {
02661   string bonus;
02662   
02663   if(!IS_SEER(this_object()) && !FAO_HAS_TITLE_GIFT(this_object()) )
02664   {
02665     return 0;
02666   }
02667   
02668   bonus = "";
02669   if (!(str=_unparsed_args()))
02670     str = "";
02671   else if( str[0..2]=="\\b," || str[0..2]=="\\b'" )
02672   {
02673     bonus = "\b"; // ein backspace fuer ein (hoch)komma ist ok! :-)
02674     str = str[2..];
02675   }
02676   if(str=="0")  // damit der Gildentitel zum Vorschein kommen kann
02677     SetProp(P_TITLE, 0);
02678   else
02679     SetProp(P_TITLE, bonus+str);
02680   write("Ok.\n");
02681   return 1;
02682 }

static int set_visualbell ( string  str  )  [static]

Definiert in Zeile 3427 der Datei base.c.

03428 {
03429   if(!str)
03430   {
03431     write("Derzeitige Einstellung fuer Tonausgabe: "+
03432          (QueryProp(P_VISUALBELL)?"AUS":"EIN")+".\n");
03433     return 1;
03434   }
03435   if (str=="ein")
03436   {
03437     if(!QueryProp(P_VISUALBELL))
03438       write("Die Tonausgabe stand schon auf EIN.\n");
03439     else
03440       {
03441   SetProp(P_VISUALBELL,0);
03442         write("OK, Tonausgabe auf EIN gestellt.\n");
03443       }
03444   }
03445   else
03446     if (str=="aus")
03447     {
03448       if(QueryProp(P_VISUALBELL))
03449         write("Die Tonausgabe stand schon auf AUS.\n");
03450       else
03451         {
03452           SetProp(P_VISUALBELL,1);
03453     write("OK, Tonausgabe auf AUS gestellt.\n");
03454   }
03455     }
03456     else
03457       write("Syntax: ton [ein|aus]\n");
03458   return 1;
03459 }

static int setcmsg ( string  str  )  [static]

Definiert in Zeile 2643 der Datei base.c.

02644 {
02645   SetProp(P_CLONE_MSG, _unparsed_args()||"zaubert etwas aus "
02646           + QueryPossPronoun(MALE,WEM) + " Aermel hervor");
02647   write("Ok.\n");
02648   return 1;
02649 }

string SetDefaultHome ( string  str  ) 

Definiert in Zeile 2955 der Datei base.c.

Wird benutzt von create().

02956 {
02957   if(hc_play>1)
02958   {
02959     pray_room="/room/nirvana";
02960   }
02961   return default_home=str;
02962 }

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

static int setdmsg ( string  str  )  [static]

Definiert in Zeile 2651 der Datei base.c.

02652 {
02653   SetProp(P_DESTRUCT_MSG, _unparsed_args()||"wird von " + name(WER,1)
02654           + " zerstaeubt");
02655   write("Ok.\n");
02656   return 1;
02657 }

static int sethands ( string  str  )  [static]

Definiert in Zeile 3546 der Datei base.c.

03547 {
03548   mixed *hands;
03549 
03550   if (!(str=_unparsed_args()))
03551   {
03552     write("sethands <message>\n");
03553     return 1;
03554   }
03555   if (str=="0")
03556       hands=RaceDefault(P_HANDS);
03557   if (!hands || !pointerp(hands))
03558       hands=Query(P_HANDS);
03559   hands[0]=" "+str;
03560   Set(P_HANDS,hands);
03561   write("Ok.\n");
03562   return 1;
03563 }

static int setmin ( string  str  )  [static]

Definiert in Zeile 2602 der Datei base.c.

02603 {
02604   SetProp(P_MSGIN, _unparsed_args()||"kommt an");
02605   write("Ok.\n");
02606   return 1;
02607 }

static int setmmin ( string  str  )  [static]

Definiert in Zeile 2629 der Datei base.c.

02630 {
02631   SetProp(P_MMSGIN, _unparsed_args()||"erscheint");
02632   write("Ok.\n");
02633   return 1;
02634 }

static int setmmout ( string  str  )  [static]

Definiert in Zeile 2636 der Datei base.c.

02637 {
02638   SetProp(P_MMSGOUT, _unparsed_args()||"verschwindet");
02639   write("Ok.\n");
02640   return 1;
02641 }

static int setmout ( string  str  )  [static]

Definiert in Zeile 2609 der Datei base.c.

02610 {
02611   string *msg;
02612 
02613   if(sizeof(msg=explode((_unparsed_args()||"geht"),"#"))>2)
02614   {
02615     write("Du darfst nur einmal '#' fuer die Richtung angeben.\n");
02616     return 1;
02617   }
02618   if(sizeof(msg)>1)
02619   {
02620     if (msg[0]!="" && msg[0][<1]==' ') msg[0]=msg[0][0..<2];
02621     SetProp(P_MSGOUT, msg[0]+"#"+msg[1]);
02622   }
02623   else
02624     SetProp(P_MSGOUT, _unparsed_args()||"geht");
02625   write("Ok.\n");
02626   return 1;
02627 }

string SetPrayRoom ( string  str  ) 

Definiert in Zeile 2969 der Datei base.c.

Wird benutzt von create().

02970 {
02971   if(hc_play>1)
02972   {
02973     pray_room="/room/nirvana";
02974   }
02975   pray_room=str;
02976   return(str);
02977 }

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

static int short_score ( string  arg  )  [static]

Gibt eine kuerzere Info ueber den Char aus (Spielerkommando punkte|score).

Ruft score("short").

Parameter:
[in] arg UNUSED
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
score(string), very_short_score()

Definiert in Zeile 1533 der Datei base.c.

Benutzt score().

01533                                    {
01534   return score("short");
01535 }

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

int show_telnegs ( string  arg  ) 

Definiert in Zeile 4022 der Datei base.c.

04023 {
04024     if (!arg)
04025     {
04026         write("Du bekommst Aenderungen Deiner Fenstergroesse "+
04027               (QueryProp(P_TTY_SHOW)?"":"nicht ")+"angezeigt.\n");
04028         return 1;
04029     }
04030     if (member(({"ein","an","aus"}),arg)==-1)
04031     {
04032         write("Syntax: telnegs [ein|aus]\n");
04033         return 1;
04034     }
04035     if (arg=="ein" || arg=="an")
04036     {
04037         write("Du bekommst "+(QueryProp(P_TTY_SHOW)?"":"nun ")+
04038               "Aenderungen Deiner Fenstergroesse angezeigt.\n");
04039         Set(P_TTY_SHOW,1);
04040         return 1;
04041     }
04042     write("Du bekommst "+(QueryProp(P_TTY_SHOW)?"nun ":"")+
04043           "Aenderungen Deiner Fenstergroesse nicht "+
04044           (QueryProp(P_TTY_SHOW)?"mehr ":"")+"angezeigt.\n");
04045     Set(P_TTY_SHOW,0);
04046     return 1;
04047 }

static void Show_WaitFor_Reason ( string  who,
int  invis 
) [static]

Gibt Erwartemeldung mit Grund aus.

Parameter:
[in] who string - Wer ist hereingekommen?
[in] invis int - Ist der Spieler Invis?

Definiert in Zeile 414 der Datei base.c.

Benutzt list, ME, name, P_WAITFOR_REASON und QueryProp().

Wird benutzt von notify_player_change().

00415 {
00416   mixed list;
00417   string reason,name;
00418 
00419   if (invis) name="("+who+")";
00420     else name=who;
00421   if ((mappingp(list=QueryProp(P_WAITFOR_REASON))) && (reason=list[who]))
00422     tell_object(ME,sprintf("\nDu erwartest %s wegen:\n%s\n",name,reason));
00423   else
00424     tell_object(ME,sprintf("Du erwartest %s aus keinem bestimmten Grund.\n",
00425       name));
00426 }

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

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

void smart_log ( string  myname,
string  str 
)

Loggt eine Spielermeldung an Magier.

Loggt die Spielermeldung in das passende File unter /log/report/ oder im vom Magier gewuenschten File. Hierbei werden Fehler, Ideen, MDs und Typos in getrennte Files sortiert.

Parameter:
[in] str Spielermeldung
[in] myname Art der Spielermeldung (DETAILS, BUG, TYPO, MD)
Siehe auch:
md(string), idea(string), bug(string), typo(string)

Definiert in Zeile 1342 der Datei base.c.

Benutzt creat(), log_file, MASTER, P_LOG_FILE, P_REFERENCE_OBJECT, QueryProp(), ROOTID und strftime().

Wird benutzt von bug(), bug2(), idea(), idea2(), md(), md2(), typo() und typo2().

01343 {
01344   string creat, creat_det, date, filext, obnam, rest;
01345   object obj;
01346 
01347   if( sscanf(str,"%s:%s",obnam,rest)==2 &&
01348       ((obj=present(obnam,environment())) || (obj=present(obnam)) )
01349       )
01350     str = rest;
01351   else {
01352     obj = QueryProp(P_REFERENCE_OBJECT);
01353     if (!obj || !present(obj))
01354       obj = environment(this_interactive());
01355   }
01356 
01357   date = strftime("%d. %b %Y");
01358 
01359   if(!(creat = obj->QueryProp(P_LOG_FILE))){
01360     creat = MASTER->creator_file(obj);
01361     if (member(creat, '.')!=-1) creat=explode(creat, ".")[<1];
01362 
01363     if (creat == ROOTID)
01364       creat = "ROOT";
01365     else if( !creat || creat[0]==' ' )
01366       creat="STD";
01367     switch(myname)
01368     {
01369       case "DETAIL":
01370       filext = ".det"; break;
01371       default:
01372       filext = ".rep"; break;
01373     }
01374 
01375     creat=regreplace(creat,":","_",1);
01376     creat_det = "report/" + creat + "_" + myname + filext;
01377     creat = "report/" + creat + filext;
01378   }
01379 
01380   if (!obj->SmartLog(creat, myname, str, date)) {
01381     str = myname + " von " + getuid(this_interactive()) + " [" 
01382       + object_name(obj) + "] (" + date + "):\n" + str + "\n";
01383     log_file(creat, str);
01384     // Noch einmal im spezialisierten Logfile
01385     log_file( creat_det, str );
01386   }
01387 }

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

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

static int spieldauer ( string  str  )  [static]

Setzt neue taegliche Spieldauer (Spielerkommando).

Parameter:
[in] str Spielereingabe
Rückgabe:
1 bei Erfolg, 0 sonst.

Definiert in Zeile 968 der Datei base.c.

Benutzt min, notify_fail(), P_DAILY_PLAYTIME und Set().

Wird benutzt von CheckDailyPlaytime().

00968                                   {
00969   int min,day;
00970   string foo;
00971 
00972   notify_fail("  spieldauer <x> minuten fuer %d tage\noder\n"+
00973               "  spieldauer <x> stunden fuer %d tage\n");
00974   if (!str)
00975     return 0;
00976   if (sscanf(str,"%d stunde%s fuer %d tag%s",min,foo,day,foo)==4)
00977     min*=60;
00978   else if (sscanf(str,"%d minute%s fuer %d tag%s",min,foo,day,foo)!=4)
00979     return 0;
00980   if (min<5)
00981     min=5;
00982   if (min>=1440)
00983     return notify_fail("Witzbold.\n"),0;
00984 
00985   Set(P_DAILY_PLAYTIME,
00986       ({min*60,time()/86400+day,time()/86400,time(),min*60}));
00987   // 0:Minuten pro Tag, 1:Nr. des letzen Tages, 2:Nr. des angefangenen Tages,
00988   // 3:letzte Zeitpruefung, 4:verbleibende Zeit
00989   printf("Du darfst die naechsten %d Tag(e) nur noch\n"+
00990    "%d Minuten am Tag mudden.\n",day,min);
00991   return 1;
00992 }

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

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

static int spielpause ( string  str  )  [static]

Setzt neue Spielpause (Spielerkommando).

Fragt vorher nach Bestaetigung durch den Spieler.

Parameter:
[in] str Spielereingabe
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
spielpause2()

Definiert in Zeile 1037 der Datei base.c.

Benutzt _unparsed_args(), input_to(), InterpretTime(), master, notify_fail() und strftime().

01038 {
01039   int days,endezeit;
01040   string foo;
01041 
01042   notify_fail("spielpause <x> tage          oder\n"+
01043               "spielpause bis tt.mm[.jj]\n");
01044   if (!str) return 0;
01045   if(sscanf(_unparsed_args(),"bis %s",foo)==1) {
01046     endezeit = InterpretTime(foo);
01047     if (endezeit == 0) 
01048                 return 0;
01049     days = ((endezeit - time()) / 86400) + 1;
01050   }
01051   else if(sscanf(str, "%d tag%s", days, foo) == 2) {
01052     if (days < 0)
01053                 days = -1;
01054     else
01055                 endezeit = (time()/86400) * 86400 + days * 86400;
01056   }
01057   else return 0;
01058 
01059   if (days > 0)
01060     write(strftime("Du wirst Dich erst wieder am %d.%m.%Y einloggen koennen!\n",
01061                   endezeit));
01062   else if (days < 0)
01063     write( "Du wirst Dich auf unbestimmte Zeit nicht mehr einloggen koennen.\n"
01064           +"Wenn Du wieder spielen willst, musst Du Dich an einen Gott oder\n"
01065           +"Erzmagier wenden (mit einem Gast oder Mail von aussen).\n" );
01066   else {
01067     write( "Die Spielpause ist aufgehoben.\n" );
01068     master()->TBanishName(getuid(this_object()), 0);
01069     return 1;
01070   }
01071   write( "Wenn Du das wirklich willst, gib jetzt 'ja' ein.\n]" );
01072   input_to( "spielpause2", 0, days);
01073   return 1;
01074 }

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

static void spielpause2 ( string  str,
int  days 
) [static]

Setzt neue taegliche Spieldauer, wird ueber spielpause() gerufen.

Parameter:
[in] str Spielereingabe, Bestaetigung
[in] days Dauer der Spielpause (in Tagen).
Siehe auch:
spielpause()

Definiert in Zeile 1081 der Datei base.c.

Benutzt master.

01082 {
01083   if (str && (str == "ja" || str == "Ja" || str == "JA")) {
01084     master()->TBanishName(getuid(this_object()), days);
01085     write(
01086       "Ok, die Spielpause wird mit dem naechsten Ausloggen wirksam.\n"
01087      +"Solltest Du es Dir bis dahin noch einmal ueberlegt haben, so kannst\n"
01088      +"Du den Vorgang mit 'spielpause 0 tage' wieder rueckgaengig machen.\n" );
01089     return;
01090   }
01091   write("Vorgang wurde abgebrochen.\n" );
01092 }

int spotte ( string  str  ) 

Definiert in Zeile 4076 der Datei base.c.

04077 {
04078     _notify_fail( "Hier ist nichts, was Du verspotten koenntest!\n" );
04079     return 0;
04080 }

varargs nomask int start_player ( string  str,
string  ip 
)

Initialisiert und aktiviert das Spielerobjekt.

Kann nur von /secure/login oder /secure/master gerufen werden. Startet Telnet Negotiation, laedt Savefile, setzt einige Props. Ruft updates_after_restore(), um div. Daten zu aktualisieren/reparieren. Ruft create() aus /std/player/potion.c. Bei neuem Spieler wird der entsprechende Event ausgeloest die Attribute auf die Startwerte gesetzt. Prueft Zweitiemarkierungen. Ruft InitPlayer().

Parameter:
[in] str Name des Charakters, der geladen werden soll.
[in] ip textuelle Repraesentation der IP-Adresse des Spielers.
Rückgabe:
1 bei Erfolg, 0 sonst.
Noch zu erledigen:
Div. Reparaturen/Updates nach updates_after_restore() auslagern.

Definiert in Zeile 2105 der Datei base.c.

02106 {
02107     mixed second;
02108     int newflag;  /* could player be restored? */
02109     string str1;
02110 
02111     if ( query_once_interactive(ME) ){
02112         startup_telnet_negs();
02113         modify_prompt();
02114     }
02115 
02116     call_out( "disconnect", 600 );
02117 
02118     str1 = explode( object_name(previous_object()), "#" )[0];
02119 
02120     if ( str1 != "/secure/login" &&
02121          str1 != "/secure/master" &&
02122          (!geteuid(ME) || geteuid(ME) != getuid(ME) ||
02123           capitalize(geteuid(ME)) != str ||
02124           geteuid(ME) != geteuid(previous_object())) ){
02125         write( "DIESER VERSUCH WAR ILLEGAL !!\n" );
02126         destruct(ME);
02127         return 0;
02128     }
02129 
02130     /* try to restore player. If it doesn't exist, set the new flag */
02131     Set( P_WIMPY, 20 );
02132     newflag = !restore_object( "/" + SAVEPATH + lower_case(str)[0..0] + "/"
02133                                +lower_case(str) );
02134 
02135     updates_after_restore(newflag);
02136 
02137     if ( query_once_interactive(ME) )
02138         Set( P_LAST_LOGIN, time() );
02139 
02140     Set( P_WANTS_TO_LEARN, 1 ); // 1 sollte der default sein !!!
02141     Set( P_WANTS_TO_LEARN, PROTECTED, F_MODE_AS );
02142     // Eingefuegt 18.11.99, kann nach einem Jahr wieder raus:
02143     Set( P_TESTPLAYER, PROTECTED, F_MODE_AS );
02144 
02145     if ( IS_LEARNER(ME) )
02146         SetProp( P_CAN_FLAGS, QueryProp(P_CAN_FLAGS)|CAN_REMOTE );
02147 
02148     Set( P_NAME, str );
02149     Set( P_NAME, SECURED, F_MODE_AS );
02150 
02151     if ( !QueryProp(P_NEEDED_QP) )
02152         SetProp( P_NEEDED_QP, REQ_QP );
02153 
02154     Set( P_NEEDED_QP, NOSETMETHOD, F_SET_METHOD );
02155     Set( P_NEEDED_QP, SAVE|SECURED, F_MODE_AS );
02156 
02157     /* autosave the player after 500 heartbeats */
02158     time_to_save = age + 500;
02159     potion::create(); /* DO IT HERE AFTER THE RESTORE !! */
02160 
02161     AddId( getuid() );
02162     SetProp( P_AC, 0 );
02163     SetProp( P_WEAPON, 0 );
02164 
02165     /* Set some things which wont be set when all is OK */
02166     SetProp( P_MAX_HP, (QueryAttribute(A_CON) * 8 + 42 ));
02167     SetProp( P_MAX_SP, (QueryAttribute(A_INT) * 8 + 42 ));
02168 
02169     catch( bb = "/secure/bbmaster"->query_bb() );
02170 
02171     /* If this is a new character, we call the adventurers guild to get
02172      * our first title !
02173      */
02174     if ( newflag ) {
02175         if ( QueryGuest())
02176             SetProp( P_TITLE, "ueberkommt das "MUDNAME" ..." );
02177 
02178         Set( P_LEVEL, -1 );
02179         SetProp( P_ATTRIBUTES, ([ A_STR:1, A_CON:1, A_INT:1, A_DEX:1 ]) );
02180         SetProp( P_HP, QueryProp(P_MAX_HP) );
02181 
02182                 // Event ausloesen
02183                 EVENTD->TriggerEvent(EVT_LIB_PLAYER_CREATION, ([
02184                       E_OBJECT: ME,
02185                       E_PLNAME: getuid(ME) ]) );
02186     }
02187     
02188     InitPlayer();
02189 
02190     // Padreic 01.02.1999
02191     if ( !IS_LEARNER(ME) && second = QueryProp(P_SECOND) ) {
02192         if ( stringp(second) && lower_case(second)[0..3] == "von " ) {
02193             second = lower_case(second[4..]);
02194             SetProp( P_SECOND, second );
02195         }
02196 
02197         if ( !stringp(second ) ||
02198              file_size( "/save/" + second[0..0] + "/" + second + ".o" ) <= 0 ){
02199             if ( stringp(second) &&
02200                  file_size( "/save/" + lower_case(second[0..0]) + "/" +
02201                             lower_case(second) + ".o" ) >0 ){
02202                 SetProp( P_SECOND, lower_case(second) );
02203                 log_file( "WRONG_SECOND",
02204                           sprintf( "%s: %s: P_SECOND = %O -> Automatisch "
02205                                    "korrigiert,\n",
02206                                                                    dtime(time()), object_name(), second ) );
02207             }
02208             else {
02209                 tell_object( ME,
02210                              "*\n*\n* Deine Zweitiemarkierung ist ungueltig, "
02211                              "bitte aendere diese und sprich im\n* Zweifel "
02212                              "bitte einen Erzmagier an.\n*\n*\n" );
02213 
02214                 log_file( "WRONG_SECOND",
02215                           sprintf( "%s: %s: P_SECOND = %O\n",
02216                                    dtime(time()), object_name(), second ) );
02217                 // ein bisschen deutlicher auffordern.. Padreic 08.04.1999
02218                 move( "/d/gebirge/room/zwafflad", M_GO );
02219             }
02220         }
02221     }
02222     return(0);
02223 }

static int stop ( string  str  )  [static]

Spielerkommando 'stop'.

Loescht die Gegnerliste, sofern man nicht InFight() ist.

Parameter:
[in] str Spielereingabe, wird ignoriert.
Rückgabe:
1

Definiert in Zeile 1868 der Datei base.c.

01869 {
01870     if ( InFight() ){
01871         write( "Das geht nicht mitten im Kampf.\n" );
01872         return 1;
01873     }
01874 
01875     if ( !str ){
01876         StopHuntingMode();
01877         write( "Ok.\n" );
01878         return 1;
01879     }
01880 
01881     if ( !StopHuntID(str) )
01882         write( "So jemanden verfolgst Du nicht!\n" );
01883 
01884     return 1;
01885 }

static varargs void stop_heart_beats ( mixed  obs  )  [static]

Schaltet in allen Objekten im Inv HBs aus.

Schaltet im Inv in allen Objekten (rekursiv, deep_inventory) die Heartbeats aus. Falls obs uebergeben wird, werden diese Objekte statt des Inventars benutzt. Speichert die Objekte, die einen HB hatten, in der glob. Var. hb_obs.

Parameter:
[in] obs mixed - Objekte, in denen der HB abgeschaltet werden soll. Container werden rekursiv behandelt.
Achtung:
Achtung! Niemals zweimal hintereinander rufen, ohne zwischendurch restart_heart_beats() gerufen zu haben!
Siehe auch:
restart_heart_beats

Definiert in Zeile 339 der Datei base.c.

Benutzt hb_obs, i, ME, ob() und set_object_heart_beat().

00340 {
00341   int i;
00342 
00343   if (!obs)
00344   {
00345     hb_obs=({});
00346     obs=deep_inventory(ME);
00347   } 
00348   foreach(mixed ob: obs) {
00349     if (pointerp(ob))
00350                 stop_heart_beats(ob);
00351     else if (set_object_heart_beat(ob,0))  
00352                 hb_obs+=({ob});
00353   }
00354 }

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

static int stty ( string  str  )  [static]

Definiert in Zeile 3336 der Datei base.c.

03337 {
03338   if(str!="dumb"&&str!="vt100"&&str!="ansi"&&str!="reset")
03339   {
03340     write("Kommando: stty dumb|vt100|ansi oder reset\n");
03341   }
03342   if(str == "reset") {
03343       printf("Dieser Text sollte lesbar sein!\n");
03344       return 1;
03345   }
03346 
03347   write("TTY steht jetzt auf "+SetProp(P_TTY,str)+".\n");
03348   if(str == "ansi" || str == "vt100") {
03349       printf("Terminal Test:\n");
03350       printf("VT100: fett unterstrichen "+
03351              "blinkend invers\n");
03352       if(str == "ansi") {
03353           printf("ANSI Farben und VT100 Attribute:\n");
03354           foreach(int fg: 30 .. 37) {
03355                       foreach(int bg: 40 .. 47) {
03356                   printf("[%d;%dm@", fg, bg);
03357                   printf("[%d;%dm@", fg, bg);
03358                   printf("[%d;%dm@", fg, bg);
03359                   printf("[%d;%dm@", fg, bg);
03360               }
03361               printf("\n");
03362           }
03363           printf("Sollte dieser Text hier nicht richtig lesbar\nsein,"+
03364                  "benutze das Kommando stty reset!\n");
03365       }
03366 
03367   }
03368   return 1;
03369 }

static string timediff ( int  time  )  [static]

Definiert in Zeile 3052 der Datei base.c.

03053 {
03054   string ret;
03055 
03056   ret="";
03057   if(time>=86400) {
03058     ret+=time/86400+"d ";
03059     time%=86400;
03060   }
03061   if(time<36000) ret+="0";
03062   ret+=time/3600+":";
03063   time%=3600;
03064   if(time<600) ret+="0";
03065   ret+=time/60+":";
03066   time%=60;
03067   if(time<10) ret+="0";
03068   ret+=time+"";
03069   return ret;
03070 }

static int toggle_whimpy ( string  str  )  [static]

Definiert in Zeile 2897 der Datei base.c.

02898 {
02899   int i;
02900 
02901   if(!str || str=="" || (sscanf(str,"%d",i)<0))
02902   {
02903     write("vorsicht <hp>, 0<=hp<"+QueryProp(P_MAX_HP)+"\n");
02904     return 1;
02905   }
02906   if(i>=QueryProp(P_MAX_HP) || i<0)
02907   {
02908     write("Der Wert ist nicht erlaubt.\n");
02909     return 1;
02910   }
02911   if(!i) write("Prinz Eisenherz-Modus.\n");
02912   else write("Vorsicht-Modus ("+i+")\n");
02913   SetProp(P_WIMPY,i);
02914   return 1;
02915 }

static int toggle_whimpy_dir ( string  str  )  [static]

Definiert in Zeile 2888 der Datei base.c.

02888                                          {
02889   SetProp(P_WIMPY_DIRECTION,str=_unparsed_args()||str);
02890   if (str)
02891     printf("Ok, Fluchtrichtung %O.\n",str);
02892   else
02893     printf("Ok, bevorzugte Fluchtrichtung deaktiviert.\n");
02894   return 1;
02895 }

int topliste ( string  arg  ) 

Definiert in Zeile 3998 der Datei base.c.

03999 {
04000     if (!arg)
04001     {
04002         printf("Du hast Dich fuer die Topliste %s.\n",
04003             (QueryProp(P_NO_TOPLIST) ? "gesperrt" : "freigegeben"));
04004         return 1;
04005     }
04006     else if (member(({"j","ja","n","nein"}),arg)==-1)
04007         return _notify_fail("Syntax: topliste [ja|nein]\n"),0;
04008     if (arg[0]=='j')
04009     {
04010         SetProp(P_NO_TOPLIST,0);
04011         write("Du kannst jetzt (theoretisch) in der Topliste auftauchen.\n");
04012     }
04013     else
04014     {
04015         SetProp(P_NO_TOPLIST,1);
04016         write("Du wirst jetzt nicht in der Topliste auftauchen.\n");
04017     }
04018     Set(P_NO_TOPLIST,SAVE|PROTECTED,F_MODE_AS);
04019     return 1;
04020 }

static int typo ( string  str  )  [static]

Setzt eine Typomeldung an Magier ab (Spielerkommando).

Fragt nach der Typomeldung und liest sie via typo2() ein, fall der Spieler kein Argument angeben hat.

Parameter:
[in] str optionale Spielereingabe der Typobeschreibung
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
typo2(string)

Definiert in Zeile 1239 der Datei base.c.

Benutzt _unparsed_args(), input_to() und smart_log().

01239                             {
01240   if (!(str=_unparsed_args())) {
01241     write( "Wo ist denn der Tippfehler?\n]" );
01242     input_to("typo2");
01243     return 1;
01244   }
01245   write("Vielen Dank fuer die Hilfe.\n");
01246   smart_log("TYPO",str);
01247   return 1;
01248 }

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

static int typo2 ( string  str  )  [static]

Setzt eine Fehlermeldung an Magier ab (Spielerkommando).

Liest die Typobeschreibung ein und speichert sie.

Parameter:
[in] str Spielereingabe der Typobeschreibung
Rückgabe:
1 bei Erfolg, 0 sonst.
Siehe auch:
typo(string)

Definiert in Zeile 1256 der Datei base.c.

Benutzt smart_log().

01256                              {
01257   if (!str || str == "") {
01258     write("Typo abgebrochen...\n");
01259     return 1;
01260   }
01261   smart_log("TYPO",str);
01262   write("Vielen Dank fuer die Hilfe.\n");
01263   return 1;
01264 }

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

static int uhrmeldung ( string  str  )  [static]

Definiert in Zeile 3740 der Datei base.c.

03741 {
03742   if (!(str=_unparsed_args()))
03743   {
03744     str=QueryProp(P_CLOCKMSG);
03745     if (!str)
03746     {
03747       write("Du hast die Standard-Uhrmeldung.\n");
03748       return 1;
03749     }
03750         if( !stringp(str) ) str = sprintf("%O\n",str);
03751     printf("Deine Uhrmeldung ist:\n%s\n",str[0..<2]);
03752     return 1;
03753   }
03754   if (str=="0")
03755   {
03756     SetProp(P_CLOCKMSG,0);
03757     write("Ok, Du hast jetzt wieder die Standard-Meldung.\n");
03758     return 1;
03759   }
03760   if (sizeof(explode(str,"%d"))>2)
03761   {
03762     write("Fehler, es darf nur ein %d in der Meldung vorkommen.\n");
03763     return 1;
03764   }
03765   /* Mehrere %-Parameter verursachen das Abschalten der Uhr zur vollen Stunde.
03766    */
03767   if (sizeof(explode(str,"%"))>2)
03768   {
03769     write("Fehler: Zuviele %-Parameter in der Meldung.\n");
03770     return 1;
03771   }
03772   /* Nur ein %-Parameter, aber der falsche: nicht sinnvoll. */
03773   else
03774   {
03775     int i = strstr(str,"%",0);
03776     if ( i>-1 && ( i==strlen(str)-1 || str[i+1]!='d'))
03777     {
03778       write("Fehler: Falscher %-Parameter in der Meldung.\n");
03779       return 1;
03780     }
03781   }
03782   str+="\n";
03783   SetProp(P_CLOCKMSG,str);
03784   write("Ok.\n");
03785   return 1;
03786 }

static int uhrzeit (  )  [static]

Definiert in Zeile 2949 der Datei base.c.

02950 {
02951   write(dtime(time()+QueryProp(P_TIMEZONE)*3600)+".\n");
02952   return 1;
02953 }

private void updates_after_restore ( int  newflag  ) 

Setzt bestimmte Props im Spieler, falls diese nicht gesetzt sind.

Wird von start_player() gerufen. Momentan wird ggf. nur die Groesse gesetzt, falls sie bisher 0 ist und die Skills des Spielers initialisiert bzw. repariert oder auf die aktuellste Version des Skillsystems aktualisiert und der SAVE-Status der Prop P_GUILD_PREVENTS_RACESKILL geloescht. Ruft ggf. InitSkills() und FixSkills().

Parameter:
[in] newflag Gibt an, ob es ein neuerstellter Spieler ist.
Siehe auch:
start_player(), InitSkills(), FixSkills()

Definiert in Zeile 2040 der Datei base.c.

02040                                                 {
02041   int size;
02042   attributes::UpdateAttributes();
02043   size=Query(P_SIZE);
02044   if (!size) size=RandomSize();
02045   while(size==QueryProp(P_AVERAGE_SIZE))
02046     size=RandomSize();
02047   Set(P_SIZE,size);
02048 
02049   //Allgemeine Waffenskills aktivieren, wenn noetig
02050   //set_weapon_skills();
02051   // Wird nun von InitSkills bzw. FixSkills uebernommen, falls noetig.
02052   if (newflag) {
02053     InitSkills();
02054   }
02055   else if (QueryProp(P_SKILLSVERSION) != CURRENT_SKILL_VERSION) {
02056     // Falls noetig, Skills fixen/updaten. *grummel*
02057     FixSkills();
02058   }
02059   // Prop gibt es nicht mehr. SAVE-Status loeschen. 
02060   Set(P_GUILD_PREVENTS_RACESKILL,SAVE,F_MODE_AD);
02061 }

static int very_short_score ( string  arg  )  [static]

Gibt eine Miniinfo ueber LP / KP aus (Spielerkommando: kurzinfo).

Rückgabe:
1
Siehe auch:
score(string), short_score(string)

Definiert in Zeile 1541 der Datei base.c.

Benutzt P_HP, P_MAX_HP, P_MAX_SP, P_NO_ASCII_ART, P_SP und QueryProp().

01541                                         {
01542   int    lp,mlp,xlp,kp,mkp,xkp;
01543   string bar;
01544 
01545   lp=QueryProp(P_HP); mlp=QueryProp(P_MAX_HP);
01546   kp=QueryProp(P_SP); mkp=QueryProp(P_MAX_SP);
01547   xlp=(lp*40/mlp);
01548   xkp=(kp*40/mkp);
01549   bar="  .    .    .    .    .    .    .    .  ";
01550   if (QueryProp(P_NO_ASCII_ART) || arg == "-k")
01551     printf("Gesundheit: %3.3d (%3.3d), Konzentration: %3.3d (%3.3d)\n",
01552                    lp, mlp, kp, mkp);
01553   else
01554     printf("Gesundheit:    0 |%'#'40.40s| %3.3d%s\n"+
01555                    "Konzentration: 0 |%'#'40.40s| %3.3d%s\n",
01556                    (xlp<0?bar:bar[xlp..]),lp,(lp==mlp?"":sprintf(" (%d)",mlp)),
01557                    (xkp<0?bar:bar[xkp..]),kp,(kp==mkp?"":sprintf(" (%d)",mkp))
01558                    );
01559   return 1;
01560 }

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

static int weg ( string  str  )  [static]

Definiert in Zeile 2998 der Datei base.c.

02999 {
03000   if (!(str=_unparsed_args()))
03001   {
03002     printf("Du bist nicht%s als abwesend gekennzeichnet.\n",
03003            QueryProp(P_AWAY) ? " mehr" : "");
03004     SetProp(P_AWAY, 0);
03005     return 1;
03006   }
03007   write("Du bist jetzt als abwesend gekennzeichnet.\n");
03008   SetProp(P_AWAY, str);
03009   return 1;
03010 }

static int wegmeldung ( string  player  )  [static]

Definiert in Zeile 3013 der Datei base.c.

03014 {
03015 
03016   object player_ob;
03017   string weg;
03018 
03019   if ( !player || player=="" || 
03020        player==lowerstring(this_player()->QueryProp(P_NAME)))
03021   {
03022     weg=this_player()->QueryProp(P_AWAY);
03023     write ("Du bist "+(weg?"":"nicht ")+"als abwesend gekennzeichnet.\n");
03024     if (weg)
03025       write(break_string(weg, 78,"Grund: ",BS_INDENT_ONCE));
03026     return 1;  
03027   }
03028 
03029   // Welcher Spieler ist gemeint?
03030   player_ob=find_player(player);
03031 
03032   // Spieler nicht da oder Invis und Anfrager is kein Magier
03033   if (!player_ob || 
03034       (player_ob->QueryProp(P_INVIS) && !IS_LEARNER(this_player()))) 
03035   {
03036     write(capitalize(player)+" ist gerade nicht im Spiel.\n");
03037     return 1;
03038   }
03039 
03040   weg=player_ob->QueryProp(P_AWAY);
03041 
03042         // player_ob->Name() gibt bei invis-Magiern "Jemand" zurueck
03043   write (player_ob->QueryProp(P_NAME)+" ist "+
03044          (weg?"":"nicht ")+"als abwesend gekennzeichnet.\n");
03045 
03046   if (weg)
03047     write(break_string(weg, 78,"Grund: ",BS_INDENT_ONCE));
03048 
03049   return 1;
03050 }

static int who ( string  str  )  [static]

Spielerkommando 'wer', fragt /obj/werliste ab.

Parameter:
[in] str Spielereingabe mit Optionen fuer wer.
Rückgabe:
1

Definiert in Zeile 1712 der Datei base.c.

Benutzt _unparsed_args(), filter_who_options(), i, INETD, IS_LEARNER, ME, More(), P_WANTS_TO_LEARN, QueryProp(), QueryWhoListe(), REQUEST und SENDER.

01712                            {
01713   int i,shrt;
01714   string ret;
01715   mixed ans;
01716 
01717   if ((str=_unparsed_args())&&str[0..0]!="-") {
01718     ans = filter_who_options(str);
01719     shrt = ans[0];
01720     str = ans[1];
01721     if (!shrt) {
01722       if (ret=INETD->_send_udp(str,
01723                               ([ REQUEST: "who", SENDER: getuid(ME) ]), 1 ))
01724         write(ret);
01725       else
01726         write("Anfrage abgeschickt.\n");
01727       return 1;
01728     }
01729   }
01730   if (str) i=(member(str,'o')>0); else i=0;
01731   if (strlen(str)>1 && str[0] == '-') str = str[1..1];
01732   More(implode( "/obj/werliste"->QueryWhoListe(
01733     IS_LEARNER(ME) && QueryProp(P_WANTS_TO_LEARN),shrt,0,str,i),"\n"),0);
01734   return 1;
01735 }

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

static int zaubertraenke (  )  [static]

Definiert in Zeile 3845 der Datei base.c.

03846 {
03847   More("/room/orakel"->TipListe());
03848   return 1;
03849 }

static int zeitzone ( string  str  )  [static]

Definiert in Zeile 3788 der Datei base.c.

03789 {
03790   int zt;
03791   if(!str || str==""){
03792     if(!(zt=QueryProp(P_TIMEZONE)))
03793       write("Du hast derzeit die gleiche Zeitzone wie das "MUDNAME" "+
03794             "eingestellt.\n");
03795     else if(zt>0)
03796       printf("Deine Zeitzone ist auf %d Stunden vor (oestlich) von Berlin "+
03797              "eingestellt.\n",zt);
03798     else
03799       printf("Deine Zeitzone ist auf %d Stunden nach (westlich) von "+
03800              "Berlin eingestellt.\n",-zt);
03801     return 1;
03802   }
03803   if(sscanf(str,"utc %d",zt)==1)  zt=(zt-1)%24;
03804   else zt=to_int(str)%24;
03805 
03806   SetProp(P_TIMEZONE,zt);
03807 
03808   if(!zt)
03809     write("Du hast derzeit die gleiche Zeitzone wie das "MUDNAME" "+
03810           "eingestellt.\n");
03811   else if(zt>0)
03812     printf("Deine Zeitzone ist auf %d Stunden vor (oestlich) von Berlin "+
03813            "eingestellt.\n",zt);
03814   else
03815     printf("Deine Zeitzone ist auf %d Stunden nach (westlich) von "+
03816            "Berlin eingestellt.\n",-zt);
03817   return 1;
03818 }

int zweitiemarkierung ( string  arg  ) 

Definiert in Zeile 3973 der Datei base.c.

03974 {
03975   if (!QueryProp(P_SECOND))
03976     return _notify_fail("Aber Du bist doch gar kein Zweiti.\n"),0;
03977   notify_fail("Syntax: zweitiemarkierung [unsichtbar|sichtbar|name]\n");
03978   if (!arg)
03979     return 0;
03980   switch (arg)
03981   {
03982     case "unsichtbar" :
03983       SetProp(P_SECOND_MARK,-1);
03984       write("Jetzt sieht kein Spieler mehr, dass Du ein Zweiti bist.\n");
03985       return 1;
03986     case "sichtbar" :
03987       SetProp(P_SECOND_MARK,0);
03988       write("Jetzt sieht kein Spieler mehr, wessen Zweiti Du bist.\n");
03989       return 1;
03990     case "name" :
03991       SetProp(P_SECOND_MARK,1);
03992       write("Jetzt koennen alle sehen, wessen Zweiti Du bist.\n");
03993       return 1;
03994   }
03995   return 0;
03996 }


Variablen-Dokumentation

inherit std living attributes

Definiert in Zeile 19 der Datei base.c.

mapping autoload

Definiert in Zeile 70 der Datei base.c.

private nosave string* autoload_error

Definiert in Zeile 74 der Datei base.c.

Wird benutzt von create().

private nosave mapping autoload_rest

Definiert in Zeile 73 der Datei base.c.

Wird benutzt von create().

inherit std player telnetneg c

Definiert in Zeile 41 der Datei base.c.

inherit std living clothing

Definiert in Zeile 21 der Datei base.c.

inherit std player combat

Definiert in Zeile 26 der Datei base.c.

inherit std player comm

Definiert in Zeile 30 der Datei base.c.

inherit std player command
nosave string default_home

Definiert in Zeile 85 der Datei base.c.

inherit std player description

Definiert in Zeile 27 der Datei base.c.

nosave mixed env_ndead_info

Definiert in Zeile 96 der Datei base.c.

inherit std player guide

Definiert in Zeile 42 der Datei base.c.

nosave object* hb_obs

Definiert in Zeile 92 der Datei base.c.

Wird benutzt von restart_heart_beats() und stop_heart_beats().

int hc_play

Definiert in Zeile 71 der Datei base.c.

inherit std hook_provider

Definiert in Zeile 17 der Datei base.c.

inherit std thing language

Definiert in Zeile 24 der Datei base.c.

inherit std player life

Definiert in Zeile 29 der Datei base.c.

inherit std living moneyhandler

Definiert in Zeile 32 der Datei base.c.

inherit std more

Definiert in Zeile 39 der Datei base.c.

inherit std player moving

Definiert in Zeile 28 der Datei base.c.

nosave int ndead_currently

Definiert in Zeile 90 der Datei base.c.

Wird benutzt von create() und heart_beat().

nosave string ndead_l_filename

Definiert in Zeile 89 der Datei base.c.

Wird benutzt von _query_netdead_env() und create().

nosave int ndead_lasttime

Definiert in Zeile 87 der Datei base.c.

Wird benutzt von create() und heart_beat().

nosave mixed ndead_location

Definiert in Zeile 88 der Datei base.c.

Wird benutzt von _query_netdead_env(), create(), heart_beat(), NetDead() und Reconnect().

nosave int ndead_next_check

Definiert in Zeile 91 der Datei base.c.

Wird benutzt von create() und heart_beat().

private nosave string passw

Definiert in Zeile 77 der Datei base.c.

Wird benutzt von change_password3() und change_password4().

private nosave string passwold

Definiert in Zeile 78 der Datei base.c.

Wird benutzt von change_password2(), change_password3() und change_password4().

inherit std player potion

Definiert in Zeile 37 der Datei base.c.

nosave string pray_room

Definiert in Zeile 94 der Datei base.c.

inherit std thing properties

Definiert in Zeile 22 der Datei base.c.

inherit std living put_and_get

Definiert in Zeile 20 der Datei base.c.

inherit std player quests

Definiert in Zeile 36 der Datei base.c.

private nosave string realip

Definiert in Zeile 75 der Datei base.c.

Wird benutzt von create(), query_realip() und set_realip().

inherit std player reputation

Definiert in Zeile 43 der Datei base.c.

inherit std player restrictions

Definiert in Zeile 18 der Datei base.c.

inherit std living skill_attributes

Definiert in Zeile 34 der Datei base.c.

inherit std player skills

Definiert in Zeile 35 der Datei base.c.

inherit std player soul

Definiert in Zeile 38 der Datei base.c.

private int telnet_tm_counter

Definiert in Zeile 83 der Datei base.c.

Wird benutzt von CheckTelnetKeepAlive().

inherit std player travel

Definiert in Zeile 25 der Datei base.c.

inherit std user_filter

Definiert in Zeile 40 der Datei base.c.

inherit std player util

Definiert in Zeile 23 der Datei base.c.

inherit std player viewcmd

Definiert in Zeile 31 der Datei base.c.

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