#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>
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 |
| #define MUDS_BAR "\-------------------------------------------------------------------------------" |
| 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] |
| 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 }

| 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 | ( | ) |
| void _restart_beat | ( | ) |
| 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 }

| static int _set_invis | ( | int | a | ) | [static] |
| static int _set_level | ( | int | i | ) | [static] |
| int _set_shell_version | ( | int | arg | ) |
| 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] |
| 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 }

| 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.
| [in] | str | optionale Spielereingabe der Fehlerbeschreibung |
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 }

| static int bug2 | ( | string | str | ) | [static] |
Setzt eine Fehlermeldung an Magier ab (Spielerkommando).
Lies Fehlerbeschreibung ein und speichert sie ab.
| [in] | str | Spielereingabe der Fehlerbeschreibung. |
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 }

| 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] |
| static int change_password | ( | ) | [static] |
Setzt neues Passwort (Spielerkommando).
Fragt nach altem Passwort und ruft change_password2().
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 }

| static int change_password2 | ( | string | str | ) | [static] |
Setzt neues Passwort (Spielerkommando).
Prueft altes Passwort, fragt nach neuem Passwort und ruft change_password3().
| [in] | str | Spielereingabe des alten Passwortes |
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 }

| static int change_password3 | ( | string | str | ) | [static] |
Setzt neues Passwort (Spielerkommando).
Prueft neues Passwort, fragt nach Bestaetigung des neues Passwortes und ruft change_password4().
| [in] | str | Spielereingabe des neuen Passwortes |
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 }

| static int change_password4 | ( | string | str | ) | [static] |
Setzt neues Passwort (Spielerkommando).
Prueft neues Passwort und setzt neues Passwort.
| [in] | str | Spielereingabe des neuen Passwortes |
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 }

| static int CheckDailyPlaytime | ( | ) | [static] |
Prueft auf abgelaufene Spielzeit.
Prueft in Spielerobjekten, ob die taegliche Maximalspielzeit abgelaufen ist. Wird im heart_beat() gerufen.
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 }


| protected int CheckTelnetKeepAlive | ( | ) |
Sendet ggf.
Telnet Timing Marks als Keep-Alive Pakete an den Client. Wird in heart_beat() gerufen.
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 }


| 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 }

| 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.
| [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 }

| int disconnect | ( | string | str | ) |
Spielerkommando 'schlafe ein'.
Ruft remove_interactive() bei Spielern, bei Magiern wird quit() gerufen, um das Magierobjekt zu zerstoeren.
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 ':'.
| [in] | str | Spielereingabe |
| [in] | genitiv | Genetivflag |
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'.
| [in] | str | vom Spieler spezifizierter String von Filteroptionen: -k, -v, -a, -s (+ Langformen). |
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 }

| 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 }

| string Forschung | ( | ) |
| 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().
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()
| [in] | maddr | Spielereingabe der Emailadresse. |
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.
| [in] | dir | Verzeichnis der gewuenschten Manpage |
| [in] | page | Name der gewuenschten Manpage |
Definiert in Zeile 1569 der Datei base.c.
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 }


| static void gettty | ( | string | ttystr | ) | [static] |
Liest Spielerantwort auf die Frage nach dem Terminaltyp ein.
Wird gerufen von input_to(). Uebergibt an 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 }

| 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).
| [in] | str | Name der gewuenschten Hilfeseite. |
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 }

| 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
| [in] | str | angefragter ID-String |
| [in] | lvl | Level des Anfragenden |
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 }

| 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.
| [in] | str | optionale Spielereingabe der Idee |
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 }

| static int idea2 | ( | string | str | ) | [static] |
Setzt eine Idee an Magier ab (Spielerkommando).
Liest die Idee ein und speichert sie.
| [in] | str | Spielereingabe der Idee |
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 }

| 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().
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().
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().
| 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.
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.
| [in] | logout | Zeitpunkt des letzten Logouts |
| [in] | obs | Array von Objekten |
| private int InterpretTime | ( | string | a | ) |
Interpretiert Angabe des Spielers fuer Spielpause.
| [in] | a | Zeitangabe fuer 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).
| [in] | str | Spielereingabe |
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.
| [in] | str | Spielereingabe mit Optionen fuer wer. |
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 }

| static int kwho | ( | string | str | ) | [static] |
Spielerkommando 'kwer', fragt /obj/werliste ab.
| [in] | str | Spielereingabe mit Optionen fuer wer. |
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 }

| string lalign | ( | string | str, | |
| int | wid | |||
| ) |
| 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 }

| 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.
| [in] | str | optionale Spielereingabe des fehlenden Details |
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 }

| static int md2 | ( | string | str | ) | [static] |
Setzt ein fehlendes Detail an Magier ab (Spielerkommando).
Liest das Detail ein und speichert es.
| [in] | str | Spielereingabe des fehlenden Details. |
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 }

| 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 }

| 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 }

| 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 }

| 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 }

| static int new_quit | ( | ) | [static] |
Wrapper im quit() herum, verhindert 'ende', falls Spieler kaempft.
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 }

| 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 }

| nomask int query_hc_play | ( | ) |
| 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
| [in] | obj | Objekt, was beschatten moechte. |
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.
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 | ( | ) |
| string QueryDefaultHome | ( | ) |
Definiert in Zeile 2964 der Datei base.c.
02965 { 02966 return default_home; 02967 }
| int QueryGuest | ( | ) |
Ist dieser Character ein Gast?
Definiert in Zeile 3206 der Datei base.c.
Wird benutzt von GiveExplorationPoint() und quit().

| 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 }

| int quit | ( | ) |
Speichert den Spieler und loggt ihn aus (Spielerkommando 'ende').
Der Spieler wird vollstaendig ausgeloggt, d.h. das Spielerobjekt zerstoert.
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 }


| 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 }

| private int RandomSize | ( | ) |
Gibt eine Zufallszahl um P_AVERAGE_SIZE herum zurueck.
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()
| [in] | silent | Wenn Flag gesetzt, werden keine Meldung an den Raum ausgegeben. |
| [in] | ip | Textuelle Repraesentation der IP-Adresse, von der der Spieler kommt. |
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 }


| static int remote | ( | string | str, | |
| int | flag | |||
| ) | [static] |
Spielerkommando fuers remoten 'r:'.
| [in] | str | Spielereingabe |
| [in] | flag | Genetivflag |
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.
| [in] | silent | Flag, ob ohne Textausgaben zerstoert werden soll |
Definiert in Zeile 323 der Datei base.c.
Benutzt remove().
00324 { 00325 return moving::remove(silent); 00326 }

| 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 }

| 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.
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 }

| 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 | ( | ) |
| 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').
| [in] | arg | Wenn arg=="short", wird eine Kurzuebersicht ausgegeben. |
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 }


| static int self_delete | ( | ) | [static] |
Spielerkommando 'selbstloeschung'.
Gibt Meldung aus und fragt nach einer Bestaetigung.
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 }

| int self_delete2 | ( | string | str | ) |
Spielerkommando 'selbstloeschung'.
Empfaengt Bestaetigung des Spielers und ruft Loeschfunktion in /secure/master auf.
| [in] | str | Spielereingabe |
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 }

| 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).
| [in] | str | Spielereingabe |
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 }

| 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).
| [in] | str | Spielereingabe |
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 }

| static int set_icq | ( | string | str | ) | [static] |
Setzt ICQ-UIN des Spielers (Spielerkommando).
| [in] | str | Spielereingabe |
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 }

| 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).
| [in] | str | Spielereingabe |
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 }

| static int set_messenger | ( | string | str | ) | [static] |
Setzt Instant Messanger vom Spieler (Spielerkommando).
| [in] | str | Spielereingabe |
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 }

| nomask void set_realip | ( | string | str | ) |
| 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 | ) |
| 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 | ) |
| static int short_score | ( | string | arg | ) | [static] |
Gibt eine kuerzere Info ueber den Char aus (Spielerkommando punkte|score).
Ruft score("short").
| [in] | arg | UNUSED |
Definiert in Zeile 1533 der Datei base.c.
Benutzt score().
01533 { 01534 return score("short"); 01535 }

| 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.
| [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 }


| 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.
| [in] | str | Spielermeldung |
| [in] | myname | Art der Spielermeldung (DETAILS, BUG, TYPO, MD) |
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 }


| static int spieldauer | ( | string | str | ) | [static] |
Setzt neue taegliche Spieldauer (Spielerkommando).
| [in] | str | Spielereingabe |
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 }


| static int spielpause | ( | string | str | ) | [static] |
Setzt neue Spielpause (Spielerkommando).
Fragt vorher nach Bestaetigung durch den Spieler.
| [in] | str | Spielereingabe |
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 }

| static void spielpause2 | ( | string | str, | |
| int | days | |||
| ) | [static] |
Setzt neue taegliche Spieldauer, wird ueber spielpause() gerufen.
| [in] | str | Spielereingabe, Bestaetigung |
| [in] | days | Dauer der Spielpause (in Tagen). |
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().
| [in] | str | Name des Charakters, der geladen werden soll. |
| [in] | ip | textuelle Repraesentation der IP-Adresse des Spielers. |
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.
| [in] | str | Spielereingabe, wird ignoriert. |
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.
| [in] | obs | mixed - Objekte, in denen der HB abgeschaltet werden soll. Container werden rekursiv behandelt. |
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 }

| 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("[30;47m[0mDieser 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: [1mfett[0m [4munterstrichen[0m "+ 03351 "[5mblinkend[0m [7minvers[0m\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[1m@[0m", fg, bg); 03357 printf("[%d;%dm[4m@[0m", fg, bg); 03358 printf("[%d;%dm[5m@[0m", fg, bg); 03359 printf("[%d;%dm[7m@[0m", 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.
| [in] | str | optionale Spielereingabe der Typobeschreibung |
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 }

| static int typo2 | ( | string | str | ) | [static] |
Setzt eine Fehlermeldung an Magier ab (Spielerkommando).
Liest die Typobeschreibung ein und speichert sie.
| [in] | str | Spielereingabe der Typobeschreibung |
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 }

| 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().
| [in] | newflag | Gibt an, ob es ein neuerstellter Spieler ist. |
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).
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 }

| 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.
| [in] | str | Spielereingabe mit Optionen fuer wer. |
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 }

| static int zaubertraenke | ( | ) | [static] |
| 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 }
| inherit std living attributes |
| private nosave string* autoload_error |
| private nosave mapping autoload_rest |
Definiert in Zeile 33 der Datei base.c.
Wird benutzt von _clone_items(), _move_base(), AddArmour(), AddWeapon(), alias(), command_me(), do_list(), DoTeamAttack(), DoTeamFollow(), Drink(), Flee(), more(), nextStep(), reise(), reset(), use_best_combat_command() und walk_random().
| nosave string default_home |
| inherit std player description |
| nosave mixed env_ndead_info |
| nosave object* hb_obs |
Definiert in Zeile 92 der Datei base.c.
Wird benutzt von restart_heart_beats() und stop_heart_beats().
| inherit std hook_provider |
| inherit std living moneyhandler |
| 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 thing properties |
| inherit std living put_and_get |
| 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 |
| inherit std player restrictions |
| inherit std living skill_attributes |
| private int telnet_tm_counter |
Definiert in Zeile 83 der Datei base.c.
Wird benutzt von CheckTelnetKeepAlive().
| inherit std user_filter |
1.6.3