#include "/secure/config.h"#include "/secure/wizlevels.h"#include "/sys/snooping.h"#include "/sys/language.h"#include "/sys/thing/properties.h"#include "/sys/wizlist.h"#include "/sys/erq.h"#include "/sys/lpctypes.h"#include "/sys/daemon.h"#include "/sys/player/base.h"#include "/sys/thing/description.h"#include "/sys/container.h"#include "/sys/defines.h"#include "/sys/telnet.h"#include "/sys/objectinfo.h"#include "/sys/files.h"#include "/sys/strings.h"#include "/sys/debug_info.h"#include "/sys/time.h"#include "/sys/notify_fail.h"#include "/sys/tls.h"
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | SNOOPLOGFILE "SNOOP" |
| #define | ASNOOPLOGFILE "ARCH/SNOOP" |
| #define | IP_VALID_CACHE 86400 |
| #define | IP_RETRY 28800 |
| #define | TO efun::this_object() |
| #define | TI efun::this_interactive() |
| #define | TP efun::this_player() |
| #define | PO efun::previous_object(0) |
| #define | LEVEL(x) query_wiz_level(x) |
| #define | NAME(x) capitalize(getuid(x)) |
| #define | DEBUG(x) |
| #define | TAGE ({"Son","Mon","Die","Mit","Don","Fre","Sam"}) |
| #define | MONATE |
| #define | MAXLEN 50000 |
Funktionen | |
| string | dtime (int wann) |
| varargs int | log_file (string file, string txt, int size_to_break) |
| int | query_wiz_level (mixed player) |
| mixed * | remove_alist (mixed key, mixed *alist) |
| nomask varargs int | snoop (object me, object you) |
| nomask object | query_snoop (object who) |
| varargs string | country (mixed ip, string num) |
| int | query_wiz_grp (mixed wiz) |
| public varargs object | deep_present (mixed what, object ob) |
| nomask int | secure_level () |
| nomask string | secure_euid () |
| public nomask int | process_call () |
| nomask mixed | __create_player_dummy (string name) |
| varargs string | replace_personal (string str, mixed *obs, int caps) |
| __EFUN_DEFINED__(copy_file) | |
| varargs string | extract (string str, int from, int to) |
| varargs mixed * | slice_array (mixed *array, int from, int to) |
| int | member_array (mixed item, mixed arraystring) |
| nomask void | destruct (mixed ob) |
| string | NotifyDestruct (object caller) |
| public nomask void | remove_interactive (object ob) |
| void | ___updmaster () |
| string | query_ip_number (object ob) |
| string | query_ip_name (mixed ob) |
| static object | find_snooped (object who) |
| static private string | Lcut (string str) |
| string * | old_explode (string str, string del) |
| int | file_time (string path) |
| mixed * | exclude_alist (int i, mixed *alist) |
| varargs string | strftime (mixed fmt, int clock, int localized) |
| nomask int | shutdown (string reason) |
| __EFUN_DEFINED__(strftime) | |
| int | lowerchar (int char) |
| string | upperstring (string s) |
| string | lowerstring (string s) |
| string | version () |
| private string | stretch (string s, int width) |
| private varargs string | block_string (string s, int width, int flags) |
| public varargs string | break_string (string s, int w, mixed indent, int flags) |
| mapping | m_delete (mapping m, mixed key) |
| int | m_width (mapping m) |
| int | last_reboot_time () |
| int | first_boot_time () |
| int | exist_days () |
| string | uptime () |
| void | dangling_lfun_closure () |
| nomask void | set_this_player (object pl) |
| public void | update_actions () |
| static void | move_inv (object ob) |
| private nomask string | _process_string (string str, object po) |
| nomask string | process_string (mixed str) |
| mixed | save_object (mixed name) |
| int | restore_object (string name) |
| int | set_object_heart_beat (object ob, int flag) |
| mixed * | wizlist_info () |
| varargs void | wizlist (string name, int sortkey) |
| static int | _cost_sort (mixed *a, mixed *b) |
| void | StopCallOut (int arg) |
| protected object | _call_out_obj (mixed call_out) |
| protected void | _same_object (object ob, mapping m) |
| protected void | _same_path (object key, object *obs, mapping m) |
| protected int | _too_many (mixed key, mapping m, int i) |
| protected void | _destroy (string key, object *obs, string text, int uid) |
| protected void | _same_uid (string key, object *obs, mapping m, closure cf) |
| nomask varargs void | call_out (varargs mixed *args) |
| mixed | call_out_info () |
| mixed | query_closure_object (closure c) |
| varargs void | move_object (mixed what, mixed where) |
| private int | living_or_interactive (object o) |
| static int | _shout_filter (object ob, string pat) |
| varargs void | shout (string s, mixed where) |
| void | start_simul_efun () |
| void | __clear_ip_map () |
| protected void | reset () |
| void | cindent (string name) |
| mixed * | query_comm_stat () |
| void | set_next_reset (int time) |
| int | absolute_hb_count () |
| void | __set_environment (object ob, mixed target) |
| void | _dump_wizlist (string file, int sortby) |
| mapping | dump_ip_mapping () |
| nomask void | swap (object obj) |
| nomask varargs void | garbage_collection (string str) |
| varargs void | notify_fail (mixed nf, int prio) |
| void | _notify_fail (string str) |
| private object | _shadow (object ob, int flag) |
| public object | shadow (object ob, int flag) |
| private void | _unshadow () |
| public void | unshadow () |
| string | time2string (string format, int time) |
| nomask varargs int | query_ip_port (object pl) |
| nomask mixed | debug_info (int flag, varargs int *args) |
| varargs void | input_to (mixed fun, int onoff, varargs mixed *args) |
| nomask int | set_light (int i) |
| public string | iso2ascii (string str) |
| public varargs string | CountUp (string *s, string sep, string lastsep) |
| nomask varargs int | query_next_reset (object ob) |
| nomask int | copy_file (string source, string dest) |
| varargs mixed * | slice_array (mixed array, int from, int to) |
| int | broken_count_bits (string s) |
| int | count_bits (string s) |
| mixed * | exclude_array (mixed *arr, int from, int to) |
Variablen | |
| mixed | dtime_cache = ({-1,""}) |
| int | process_flag |
| static int | CallOutStopped = 0 |
| static int | CallOutCount |
| static int | CountMessages = 0 |
| static string | LastMessage |
| string | count_table |
| #define ASNOOPLOGFILE "ARCH/SNOOP" |
Definiert in Zeile 21 der Datei simul_efun.c.
Wird benutzt von snoop().
| #define DEBUG | ( | x | ) |
if (find_player("zesstra")) \ tell_object(find_player("zesstra"),x)
Definiert in Zeile 60 der Datei simul_efun.c.
| #define IP_RETRY 28800 |
Definiert in Zeile 51 der Datei simul_efun.c.
| #define IP_VALID_CACHE 86400 |
Definiert in Zeile 50 der Datei simul_efun.c.
Definiert in Zeile 57 der Datei simul_efun.c.
| #define MAXLEN 50000 |
Definiert in Zeile 1884 der Datei simul_efun.c.
Wird benutzt von copy_file() und grep_file().
| #define MONATE |
({"Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug",\
"Sep","Okt","Nov","Dez"})
Definiert in Zeile 486 der Datei simul_efun.c.
Wird benutzt von dtime().
Definiert in Zeile 58 der Datei simul_efun.c.
| #define PO efun::previous_object(0) |
Definiert in Zeile 56 der Datei simul_efun.c.
| #define SNOOPLOGFILE "SNOOP" |
Definiert in Zeile 20 der Datei simul_efun.c.
Wird benutzt von snoop().
| #define TAGE ({"Son","Mon","Die","Mit","Don","Fre","Sam"}) |
Definiert in Zeile 485 der Datei simul_efun.c.
Wird benutzt von dtime().
| #define TI efun::this_interactive() |
Definiert in Zeile 54 der Datei simul_efun.c.
| #define TO efun::this_object() |
Definiert in Zeile 53 der Datei simul_efun.c.
| #define TP efun::this_player() |
Definiert in Zeile 55 der Datei simul_efun.c.
| void ___updmaster | ( | ) |
Definiert in Zeile 166 der Datei simul_efun.c.
Benutzt ARCH_SECURITY, destruct(), file(), GETDIR_NAMES, GETDIR_PATH, GETDIR_UNSORTED, ob() und process_call().
00167 { 00168 object ob; 00169 00170 //sollte nicht jeder duerfen. 00171 if (process_call() || !ARCH_SECURITY) 00172 raise_error("Illegal use of ___updmaster()!"); 00173 00174 write("Removing old master ... "); 00175 foreach(string file: 00176 get_dir("/secure/master/*.c",GETDIR_NAMES|GETDIR_UNSORTED|GETDIR_PATH)) { 00177 if (ob = find_object(file)) 00178 efun::destruct(ob); 00179 } 00180 efun::destruct(efun::find_object("/secure/master")); 00181 write("done.\nLoading again ... "); 00182 load_object("/secure/master"); 00183 00184 write("done.\n"); 00185 }

| void __clear_ip_map | ( | ) |
Definiert in Zeile 1367 der Datei simul_efun.c.
| nomask mixed __create_player_dummy | ( | string | name | ) |
Definiert in Zeile 1732 der Datei simul_efun.c.
Wird benutzt von Del_Quest() und Set_Quest().
01733 { 01734 string err; 01735 object ob; 01736 mixed m; 01737 //hat nen Scherzkeks die Blueprint bewegt? 01738 if ((ob=find_object("/secure/login")) && environment(ob)) 01739 catch(destruct(ob);publish); 01740 err = catch(ob = clone_object("secure/login");publish); 01741 if (err) 01742 { 01743 write("Fehler beim Laden von /secure/login.c\n"+err+"\n"); 01744 return 0; 01745 } 01746 if (objectp(m=(mixed)ob->new_logon(name))) netdead[name]=m; 01747 return m; 01748 }

| void __set_environment | ( | object | ob, | |
| mixed | target | |||
| ) |
Definiert in Zeile 1431 der Datei simul_efun.c.
Wird benutzt von _move_base(), _mv() und modify_command().
01432 { 01433 string path; 01434 object obj; 01435 01436 if (!objectp(ob)) 01437 return; 01438 if (!IS_ARCH(geteuid(previous_object())) || !ARCH_SECURITY ) 01439 return; 01440 if (objectp(target)) 01441 { 01442 efun::set_environment(ob,target); 01443 return; 01444 } 01445 path=(string)MASTER->_get_path(target,this_interactive()); 01446 if (stringp(path) && file_size(path+".c")>=0 && 01447 !catch(load_object(path);publish) ) 01448 { 01449 obj=find_object(path); 01450 efun::set_environment(ob,obj); 01451 return; 01452 } 01453 }

| protected object _call_out_obj | ( | mixed | call_out | ) |
Definiert in Zeile 1036 der Datei simul_efun.c.
| static int _cost_sort | ( | mixed * | a, | |
| mixed * | b | |||
| ) | [static] |
Definiert in Zeile 1011 der Datei simul_efun.c.
01012 { 01013 return a[WL_TOTAL_COST]<b[WL_TOTAL_COST]; 01014 }
| protected void _destroy | ( | string | key, | |
| object * | obs, | |||
| string | text, | |||
| int | uid | |||
| ) |
Definiert in Zeile 1071 der Datei simul_efun.c.
Wird benutzt von call_out().
01071 { 01072 if (!pointerp(obs)) return; 01073 // Array mit unique Eintraege erzeugen. 01074 obs = m_indices( mkmapping(obs) ); 01075 // Fehlermeldung auf der Ebene ausgeben, im catch() mit publish, damit es 01076 // auf der Ebene direkt scrollt, der backtrace verfuegbar ist (im 01077 // gegensatz zur Loesung mittels Callout), die Ausfuehrung aber weiter 01078 // laeuft. 01079 catch( efun::raise_error( 01080 sprintf( text, 01081 uid ? (string)"/secure/master"->creator_file(key) : key, 01082 sizeof(obs), object_name(obs[<1]) ) );publish); 01083 // Und weg mit dem Kram... 01084 filter( obs, #'efun::destruct/*'*/ ); 01085 }

| void _dump_wizlist | ( | string | file, | |
| int | sortby | |||
| ) |
Definiert in Zeile 1455 der Datei simul_efun.c.
01455 { 01456 int i; 01457 mixed *a; 01458 01459 if (!LORD_SECURITY) 01460 return; 01461 if (!master()->valid_write(file,geteuid(previous_object()),"write_file")) 01462 { 01463 write("NO WRITE PERMISSION\n"); 01464 return; 01465 } 01466 a = wizlist_info(); 01467 a = sort_array(a, lambda( ({'a,'b}), 01468 ({#'<, 01469 ({#'[,'a,sortby}), 01470 ({#'[,'b,sortby}) 01471 }))); 01472 rm(file); 01473 for (i=sizeof(a)-1;i>=0;i--) 01474 write_file(file,sprintf("%-11s: eval=%-8d cmds=%-6d HBs=%-5d array=%-5d mapping=%-7d\n", 01475 a[i][WL_NAME],a[i][WL_TOTAL_COST],a[i][WL_COMMANDS],a[i][WL_HEART_BEATS], 01476 a[i][WL_ARRAY_TOTAL],a[i][WL_CALL_OUT])); 01477 }
| void _notify_fail | ( | string | str | ) |
Definiert in Zeile 1591 der Datei simul_efun.c.
Benutzt notify_fail().
Wird benutzt von _abheben(), _addguildmaster(), _addmaster(), _at_player(), _echo(), _examine(), _inventory(), _ping(), _removeguildmaster(), _removemaster(), _sense_exa(), _trans(), Bestelle(), buy(), check_cond(), cm_smoke(), cm_stopf(), DoWield(), evaluate(), extinguish(), frage(), grab(), imposs(), IsGuildMember(), LearnSkill(), LearnSpell(), lies(), light(), list(), loesche(), loesen(), look_into(), mampf(), mbanish(), menue(), msg(), really_buy(), reise(), sbanish(), schreib(), show_obj(), shut_down_game(), spott(), tbanish(), tie(), tmhist(), unwield() und wield().
01592 { 01593 //query_notify_fail() benutzen, um das Objekt 01594 //des letzten notify_fail() zu ermitteln 01595 object o; 01596 if ((o=query_notify_fail(1)) && o!=previous_object()) 01597 return; 01598 //noch kein notify_fail() fuer dieses Kommando gesetzt, auf gehts. 01599 set_this_object(previous_object()); 01600 efun::notify_fail(str); 01601 return; 01602 }


| private nomask string _process_string | ( | string | str, | |
| object | po | |||
| ) |
Definiert in Zeile 782 der Datei simul_efun.c.
Benutzt process_string().
00782 { 00783 set_this_object(po); 00784 return(efun::process_string(str)); 00785 }

| protected void _same_object | ( | object | ob, | |
| mapping | m | |||
| ) |
Definiert in Zeile 1040 der Datei simul_efun.c.
Wird benutzt von call_out().
01040 { 01041 // ist nicht so bloed, wie es aussieht, s. nachfolgede Verwendung von m 01042 if ( m[ob] ) 01043 m[ob] += ({ ob }); 01044 else 01045 m[ob] = ({ ob }); 01046 }

| protected void _same_path | ( | object | key, | |
| object * | obs, | |||
| mapping | m | |||
| ) |
| protected void _same_uid | ( | string | key, | |
| object * | obs, | |||
| mapping | m, | |||
| closure | cf | |||
| ) |
| private object _shadow | ( | object | ob, | |
| int | flag | |||
| ) |
Definiert in Zeile 1605 der Datei simul_efun.c.
Benutzt shadow().
01606 { 01607 set_this_object(previous_object(1)); 01608 return efun::shadow(ob, flag); 01609 }

| static int _shout_filter | ( | object | ob, | |
| string | pat | |||
| ) | [static] |
Definiert in Zeile 1317 der Datei simul_efun.c.
| protected int _too_many | ( | mixed | key, | |
| mapping | m, | |||
| int | i | |||
| ) |
Definiert in Zeile 1064 der Datei simul_efun.c.
Wird benutzt von call_out().
01064 { 01065 return sizeof(m[key]) >= i; 01066 }

| private void _unshadow | ( | ) |
Definiert in Zeile 1619 der Datei simul_efun.c.
01619 { 01620 set_this_object(previous_object(1)); 01621 efun::unshadow(); 01622 }
| int absolute_hb_count | ( | ) |
Definiert in Zeile 1426 der Datei simul_efun.c.
Wird benutzt von catch_up_hbs(), cmd_shoot(), create(), decay_average(), FinalSetup(), step() und upd_my_age().
01426 { 01427 return efun::debug_info(DINFO_DATA,DID_STATUS,DID_ST_HBEAT_CALLS_TOTAL); 01428 }

| private varargs string block_string | ( | string | s, | |
| int | width, | |||
| int | flags | |||
| ) |
Definiert in Zeile 619 der Datei simul_efun.c.
Benutzt BS_LEAVE_MY_LFS und BS_NO_PARINDENT.
Wird benutzt von break_string().
00619 { 00620 if (!(flags & BS_NO_PARINDENT)) { 00621 if (flags & BS_LEAVE_MY_LFS) 00622 s = " "+regreplace(s,"\n","\n ",1); 00623 else s=" "+s; 00624 } 00625 00626 s = sprintf( "%-*=s", width, s); 00627 00628 string *tmp=explode(s, "\n"); 00629 return implode( map( tmp[0..<2], #'stretch/*'*/, width ), "\n" ) 00630 + "\n" + tmp[<1]; 00631 }

| public varargs string break_string | ( | string | s, | |
| int | w, | |||
| mixed | indent, | |||
| int | flags | |||
| ) |
Definiert in Zeile 633 der Datei simul_efun.c.
Benutzt block_string(), BS_BLOCK, BS_INDENT_ONCE, BS_LEAVE_MY_LFS, BS_NO_PARINDENT, BS_PREPEND_INDENT und BS_SINGLE_SPACE.
Wird benutzt von _abheben(), _bild(), _check_immortality(), _check_unwear_restrictions(), _check_wear_restrictions(), _do_unwear(), _echoall(), _echoto(), _examine(), _feld(), _man(), _mecho(), _process_command(), _query_long(), _query_racedescr(), _recv(), _send(), _send_udp(), _todo_anzeigen(), add_player(), AddExtraLook(), AddSin(), ask_hc_question(), ask_mud_played_question(), ask_race_question(), ask_sell(), auswertung(), buy(), ChangeAutoInfo(), ChannelAdmin(), ChannelParser(), CiceroneCmd(), cm_smoke(), cm_stopf(), cmd_shoot(), CmdFilter(), CmdModus(), CmdMonitor(), CmdReassign(), ConfigureColors(), create(), create_seer(), ctime(), dirtesten(), do_frage(), do_mail(), DoChangeRow(), DoNotifyHpChange(), doUnwearMessage(), DoUnwield(), doUnwieldMessage(), DoWear(), doWearMessage(), DoWield(), doWieldMessage(), drink_this(), eat_this(), efun_break_string(), enable_spell_fatigue_compat(), evaluate(), FindRangedTarget(), finger_single(), format_error(), format_notes(), frag(), get(), get_edit_line(), get_hc_answer(), GetExits(), GetGroupName(), GibFehlerteufel(), ginfo(), give_help(), give_money(), GoblinCmdWaaagh(), gtell(), heart_beat(), Help(), HelpVerb(), identifiziere(), info(), init(), kampfschrei(), kkwho(), kosten(), list_data(), load_player_object(), long(), look_doors(), make_to_money(), mbanish(), mess(), Message(), MixedOut(), modify_threshold(), More(), murks(), NewbieChangeMsg(), NewbieStatusMsg(), QuarterReached(), Query_Quest(), Query_Quests(), query_thresholds(), QueryBedingungen(), QueryForschung(), QueryWizardRequirements(), ReadNewQuest(), really_buy(), reask_hc_question(), reise(), RemoveFP(), renew_player(), reset(), rubrik(), saeurestrahl(), sag(), sage(), SaveMessage(), scan(), scan_obj(), score(), seer_cond(), seer_sequenz1(), seer_sequenz2(), seer_sequenz3(), sell(), SendMail(), set_errormessage(), SHOUT(), shoutansw(), ShowData(), smoke3(), sponsoring(), startup_telnet_negs(), stat(), telnet_neg(), tmhist(), udp_channel(), udp_man(), udp_tell(), unalias(), Uncatchup(), update(), versende_mail(), x_heart_beat() und x_long().
00634 { 00635 if ( !s || s == "" ) return ""; 00636 00637 if ( !w ) w=78; 00638 00639 if( intp(indent) ) 00640 indent = indent ? " "*indent : ""; 00641 00642 int indentlen=stringp(indent) ? strlen(indent) : 0; 00643 00644 if (indentlen>w) { 00645 set_this_object(previous_object()); 00646 raise_error(sprintf("break_string: indent longer %d than width %d\n", 00647 indentlen,w)); 00648 // w=((indentlen/w)+1)*w; 00649 } 00650 00651 if (!(flags & BS_LEAVE_MY_LFS)) 00652 s=regreplace( s, "\n", " ", 1 ); 00653 00654 if ( flags & BS_SINGLE_SPACE ) 00655 s = regreplace( s, "(^|\n| ) *", "\\1", 1 ); 00656 00657 string prefix=""; 00658 if (indentlen && flags & BS_PREPEND_INDENT) { 00659 if (indentlen+strlen(s) > w || 00660 (flags & BS_LEAVE_MY_LFS) && strstr(s,"\n")>-1) { 00661 prefix=indent+"\n"; 00662 indent=(flags & BS_NO_PARINDENT) ? "" : " "; 00663 indentlen=strlen(indent); 00664 } 00665 } 00666 00667 if ( flags & BS_BLOCK ) { 00668 /* 00669 s = implode( map( explode( s, "\n" ), 00670 #'block_string, w, indentlen, flags), 00671 "" ); 00672 */ 00673 s = block_string( s , w - indentlen, flags ); 00674 } 00675 else { 00676 s = sprintf("%-1.*=s",w-indentlen,s); 00677 } 00678 if ( s[<1] != '\n' ) s += "\n"; 00679 00680 if ( !indentlen ) return prefix + s; 00681 00682 string indent2 = ( flags & BS_INDENT_ONCE ) ? (" "*indentlen) :indent; 00683 00684 return prefix + indent + 00685 regreplace( s[0..<2], "\n", "\n"+indent2, 1 ) + "\n"; 00686 /* 00687 string *buf; 00688 00689 buf = explode( s, "\n" ); 00690 return prefix + indent + implode( buf[0..<2], "\n"+indent2 ) + buf[<1] + "\n"; 00691 */ 00692 }

| int broken_count_bits | ( | string | s | ) |
Definiert in Zeile 2112 der Datei simul_efun.c.
Benutzt i.
Wird benutzt von count_bits().
02112 { 02113 int i, res; 02114 if( !stringp(s) || !(i=strlen(s)) ) return 0; 02115 for( ; i-->0; ) { 02116 // We are counting 6 bits at a time using a precompiled table. 02117 res += count_table[(s[i]-' ')&63]-'0'; 02118 } 02119 return res; 02120 }

| nomask varargs void call_out | ( | varargs mixed * | args | ) |
Definiert in Zeile 1159 der Datei simul_efun.c.
Benutzt _destroy(), _same_object(), _too_many(), call_out_info(), debug_info(), DID_ST_CALLOUTS, DID_STATUS, DINFO_DATA, m_delete(), master, pathmap und ROOTID.
Wird benutzt von _call_DoDecay(), _instance_upd(), _make(), _query_short(), _search(), _send_udp(), _set_amount(), _set_autoloadobj(), _set_mnpc_flags(), _transfer(), AddMiniQuest(), again_password(), archive(), asynchron(), aufraeumen(), calculate_valid_modifiers(), call_next_update(), call_out(), CallTeamAttack(), CallTeamFollow(), catch_tell(), ChangeMiniQuest(), ChannelMessage(), check(), check_all_player(), CheckWimpyAndFlee(), cleanup_data(), cm_smoke(), create(), create_seer(), create_wizard(), dirtesten(), do_decay(), do_deliver(), do_remove(), do_update(), doit(), doScanMaterials(), DoTeamFollow(), DrinkLoop(), dumpEPObjects(), exit(), expire_all(), HookFlow(), Identify(), init(), InsertNotify(), invcheck(), lauf(), light(), load_player_object(), LogCompileProblem(), LogError(), logon(), LogWarning(), MagierListe(), make_stat(), mnpc_init(), move(), nextStep(), NotifyLeave(), NotifyMove(), out_of_fuel(), ParseLine(), ProcessBuffer(), ProcessList(), QueryNPC(), ReassignError(), ReloadDeputyFile(), RemoveMiniQuest(), RemoveSensitiveObject(), renew_player(), reply_time_out(), Request(), reset(), say_str(), seer_sequenz1(), seer_sequenz2(), set_lock(), shoutansw(), ShowEPObjects(), shut(), smoke2(), Start(), start_retry_callout(), startup(), step(), TryRemove(), updall(), WaitForQuarterHour(), Walk(), wandern(), WriteRoomMessage(), x_heart_beat() und XExecFile().
01160 { 01161 mixed tmp, *call_outs; 01162 01163 // Bei >600 Callouts alle Objekte killen, die mehr als 30 Callouts laufen 01164 // haben. 01165 if ( efun::debug_info(DINFO_DATA,DID_STATUS,DID_ST_CALLOUTS) > 600 01166 && geteuid(previous_object()) != ROOTID ) { 01167 // Objekte aller Callouts ermitteln 01168 call_outs = map( efun::call_out_info(), #'_call_out_obj ); 01169 mapping objectmap = ([]); 01170 filter( call_outs, #'_same_object, &objectmap ); 01171 // Master nicht grillen... 01172 efun::m_delete( objectmap, master(1) ); 01173 // alle Objekte raussuchen, die zuviele haben... 01174 mapping res = filter_indices( objectmap, #'_too_many, objectmap, 29 ); 01175 // und ueber alle Keys gehen, an _destroy() werden Key und Array mit 01176 // Objekten uebergeben (in diesem Fall sind Keys und Array mit 01177 // Objekten jeweils das gleiche Objekt). 01178 if ( sizeof(res) ) 01179 walk_mapping(res, #'_destroy, "CALL_OUT overflow by single " 01180 "object [%O]. Destructed %d objects. [%s]\n", 0 ); 01181 01182 // Bei (auch nach dem ersten Aufraeumen noch) >800 Callouts alle 01183 // Objekte killen, die mehr als 50 Callouts laufen haben - und 01184 // diesmal zaehlen Clones nicht eigenstaendig! D.h. es werden alle 01185 // Clones einer BP gekillt, die Callouts laufen haben, falls alle 01186 // diese Objekte _zusammen_ mehr als 50 Callouts haben! 01187 if ( efun::debug_info(DINFO_DATA,DID_STATUS,DID_ST_CALLOUTS) > 800 ) { 01188 // zerstoerte Objekte von der letzten Aktion sind in objectmap nicht 01189 // mehr drin, da sie dort als Keys verwendet wurden. 01190 mapping pathmap=([]); 01191 // alle Objekt einer BP in res sortieren, BP-Name als Key, Arrays 01192 // von Objekten als Werte. 01193 walk_mapping( objectmap, #'_same_path, &pathmap); 01194 // alle BPs (und ihre Objekte) raussuchen, die zuviele haben... 01195 res = filter_indices( pathmap, #'_too_many/*'*/, pathmap, 50 ); 01196 // und ueber alle Keys gehen, an _destroy() werden die Clones 01197 // uebergeben, die Callouts haben. 01198 if ( sizeof(res) ) 01199 walk_mapping( res, #'_destroy/*'*/, "CALL_OUT overflow by file " 01200 "'%s'. Destructed %d objects. [%s]\n", 0 ); 01201 01202 // Wenn beide Aufraeumarbeiten nichts gebracht haben und immer 01203 // noch >1000 Callouts laufen, werden diesmal alle Callouts 01204 // einer UID zusammengezaehlt. 01205 // Alle Objekte einer UID, die es in Summe aller ihrer Objekt mit 01206 // Callouts auf mehr als 100 Callouts bringt, werden geroestet. 01207 if (efun::debug_info(DINFO_DATA,DID_STATUS,DID_ST_CALLOUTS)>1000){ 01208 // das nach BP-Namen vorgefilterte Mapping jetzt nach UIDs 01209 // zusammensortieren. Zerstoerte Clones filter _same_uid() 01210 // raus. 01211 mapping uidmap=([]); 01212 walk_mapping( pathmap, #'_same_uid, &uidmap, 01213 symbol_function( "creator_file", 01214 "/secure/master" ) ); 01215 // In res nun UIDs als Keys und Arrays von Objekten als Werte. 01216 // Die rausfiltern, die mehr als 100 Objekte (non-unique, d.h. 01217 // 100 Callouts!) haben. 01218 res = filter_indices( uidmap, #'_too_many, uidmap, 100 ); 01219 // und erneut ueber die Keys laufen und jeweils die Arrays mit 01220 // den Objekten zur Zerstoerung an _destroy()... 01221 if ( sizeof(res) ) 01222 walk_mapping( res, #'_destroy, "CALL_OUT overflow by " 01223 "UID '%s'. Destructed %d objects. [%s]\n", 01224 1 ); 01225 } 01226 } 01227 } 01228 01229 // Falls das aufrufende Objekt zerstoert wurde beim Aufraeumen 01230 if ( !previous_object() ) 01231 return; 01232 01233 set_this_object( previous_object() ); 01234 apply( #'efun::call_out, args ); 01235 return; 01236 }

| mixed call_out_info | ( | ) |
Definiert in Zeile 1240 der Datei simul_efun.c.
Benutzt ARCH_LVL, BACKBONEID, creator_file(), master und query_wiz_level().
Wird benutzt von call_out(), call_out_info(), get_callout() und Xcallouts().
01240 { 01241 01242 object po = previous_object(); 01243 mixed coi = efun::call_out_info(); 01244 01245 // ungefilterten Output nur fuer bestimmte Objekte, Objekte in /std oder 01246 // /obj haben die BackboneID. 01247 if (query_wiz_level(getuid(po)) >= ARCH_LVL 01248 || (string)master()->creator_file(load_name(po)) == BACKBONEID ) { 01249 return coi; 01250 } 01251 else { 01252 return filter(coi, function mixed (mixed arr) { 01253 if (pointerp(arr) && arr[0]==po) 01254 return 1; 01255 else return 0; }); 01256 } 01257 }


| void cindent | ( | string | name | ) |
Definiert in Zeile 1405 der Datei simul_efun.c.
| nomask int copy_file | ( | string | source, | |
| string | dest | |||
| ) |
Definiert in Zeile 1885 der Datei simul_efun.c.
01886 { 01887 01888 int ptr; 01889 string bytes; 01890 01891 set_this_object(previous_object()); 01892 if (!strlen(source)||!strlen(dest)||source==dest||(file_size(source)==-1)|| 01893 (!call_other(master(),"valid_read",source, 01894 getuid(this_interactive()|| 01895 previous_object()),"read_file",previous_object()))|| 01896 (!call_other(master(),"valid_read",source, 01897 getuid(this_interactive()|| 01898 previous_object()),"write_file",previous_object()))) 01899 return 1; 01900 switch (file_size(dest)) 01901 { 01902 case -1: 01903 break; 01904 case -2: 01905 if (dest[<1]!='/') dest+="/"; 01906 dest+=efun::explode(source,"/")[<1]; 01907 if (file_size(dest)==-2) return 1; 01908 if (file_size(dest)!=-1) break; 01909 default: 01910 if (!rm(dest)) return 1; 01911 break; 01912 } 01913 do 01914 { 01915 bytes = read_bytes(source, ptr, MAXLEN); ptr += MAXLEN; 01916 if (!bytes) bytes=""; 01917 write_file(dest, bytes); 01918 } 01919 while(strlen(bytes) == MAXLEN); 01920 return 0; 01921 }
| int count_bits | ( | string | s | ) |
Definiert in Zeile 2123 der Datei simul_efun.c.
Benutzt broken_count_bits().
Wird benutzt von getFreeEKsForPlayer(), makeTiplistFromBitString() und QueryRealExplorationPoints().
02123 { 02124 return(broken_count_bits(s)); 02125 }


| varargs string country | ( | mixed | ip, | |
| string | num | |||
| ) |
Definiert in Zeile 206 der Datei simul_efun.c.
Benutzt country().
00206 { 00207 mixed ret; 00208 00209 if(ret = (string)"/p/daemon/iplookup"->country(num || ip)) { 00210 return ret; 00211 } else return "???"; 00212 }

| public varargs string CountUp | ( | string * | s, | |
| string | sep, | |||
| string | lastsep | |||
| ) |
Definiert in Zeile 1848 der Datei simul_efun.c.
01849 { 01850 string ret; 01851 01852 if ( !pointerp(s) ) 01853 return ""; 01854 01855 if (!sep) sep = ", "; 01856 if (!lastsep) lastsep = " und "; 01857 01858 switch (sizeof(s)) { 01859 case 0: ret=""; break; 01860 case 1: ret=s[0]; break; 01861 default: 01862 ret = implode(s[0..<2], sep); 01863 ret += lastsep + s[<1]; 01864 } 01865 return ret; 01866 }
| void dangling_lfun_closure | ( | ) |
Definiert in Zeile 741 der Datei simul_efun.c.
| nomask mixed debug_info | ( | int | flag, | |
| varargs int * | args | |||
| ) |
Definiert in Zeile 1717 der Datei simul_efun.c.
Wird benutzt von _set_hp(), _set_sp(), call_out(), db_info(), dinfo(), doit(), efun_debug_info(), LogError(), minfo(), step() und Xdbg().
01717 { 01718 01719 // if ( (flag == 2) && 01720 // (!this_player() || !IS_ARCH(this_player()) || process_call()) ) return; 01721 01722 set_this_object(previous_object()); 01723 return(apply(#'efun::debug_info,flag, args)); 01724 }

| public varargs object deep_present | ( | mixed | what, | |
| object | ob | |||
| ) |
Definiert in Zeile 1479 der Datei simul_efun.c.
Benutzt cnt.
Wird benutzt von evaluate().
01479 { 01480 01481 if(!objectp(ob)) 01482 ob=previous_object(); 01483 // Wenn ein Objekt gesucht wird: Alle Envs dieses Objekts ermitteln und 01484 // schauen, ob in diesen ob vorkommt. Dann ist what in ob enthalten. 01485 if(objectp(what)) { 01486 object *envs=all_environment(what); 01487 // wenn ob kein Environment hat, ist es offensichtlich nicht in what 01488 // enthalten. 01489 if (!pointerp(envs)) return 0; 01490 if (member(envs, ob) != -1) return what; 01491 } 01492 // sonst wirds teurer, ueber alle Objekte im (deep) Inv laufen und per id() 01493 // testen. Dabei muss aber die gewuenschte Nr. ("flasche 3") abgeschnitten 01494 // werden und selber gezaehlt werden, welche das entsprechende Objekt ist. 01495 else if (stringp(what)) { 01496 int cnt; 01497 string newwhat; 01498 if(sscanf(what,"%s %d",newwhat,cnt)!=2) 01499 cnt=1; 01500 else 01501 what=newwhat; 01502 foreach(object invob: deep_inventory(ob)) { 01503 if (invob->id(what) && !--cnt) 01504 return invob; 01505 } 01506 } 01507 else { 01508 set_this_object(previous_object()); 01509 raise_error(sprintf("Wrong argument 1 to deep_present(). " 01510 "Expected \"object\" or \"string\", got %.50O.\n", 01511 what)); 01512 } 01513 return 0; 01514 }

| nomask void destruct | ( | mixed | ob | ) |
Definiert in Zeile 100 der Datei simul_efun.c.
Benutzt ARCH_SECURITY, dtime(), IS_ARCH, log_file und process_call().
Wird benutzt von ___updmaster(), _clone(), _destruct(), _tarn_turn_off(), _update(), abortx(), absteigen(), again_password(), check_password(), check_too_many_from_same_ip(), clone(), cmd_scan(), CommandScan(), create(), debug(), Defend(), Del_Quest(), Dest(), destruct(), Destruct(), destruct_object(), do_destruct(), do_lpc(), exec_playerob(), handle_runtime_error(), heart_beat(), impFor(), init(), Initialize(), InsertEnemy(), Kill(), load_player_ob_2(), load_player_object(), Loeschen(), logon(), logon2(), make(), make_to_money(), move(), move_object(), new_load_player_ob_2(), new_load_player_object(), new_logon(), quit(), recursive_remove(), remove(), Remove(), remove_multiple(), remove_player(), RemoveObjectFromStore(), renew_player_object(), reset(), ri_rem_ob(), SeherHatGenug(), Set_Quest(), Setzen(), shut(), start_death(), test_remove(), time_out(), update_object(), vanish(), Walk(), wechdamit(), weg() und Xtool().
00101 { 00102 string fname; 00103 object tmp; 00104 00105 if ( !objectp(ob) && !objectp(ob = find_object(ob)) ) 00106 return; 00107 00108 //bestimmte Objekte duerfen nicht so ohne weiteres zerstoert werden. 00109 fname = object_name(ob); 00110 if( member(({ "/secure/master", "/secure/simul_efun", "/obj/shut", 00111 "/secure/shut", "/room/void", "/room/netztot", "/secure/errord", 00112 "/secure/spare_simul_efun", "/secure/explorationmaster", }), 00113 fname ) >= 0 ) { 00114 if( previous_object()!=ob && !ARCH_SECURITY || process_call() ) { 00115 write("You have no permission to destruct the specified object!\n"); 00116 return; 00117 } 00118 } 00119 00120 // Nicht-EMs sollen keine EMs zerstoeren koennen, woraufhin auch evtl. 00121 // EM-Tools rumliegen koennten. 00122 if ( query_once_interactive(ob) && IS_ARCH(ob) && previous_object()!=ob && 00123 (process_call() || !ARCH_SECURITY) ) 00124 return; 00125 00126 // Das Zerstoeren von Spielern wird ggf. geloggt. 00127 if ( query_once_interactive(ob) && previous_object() != ob 00128 && previous_object() 00129 && object_name(previous_object())[0..7] != "/secure/" ) 00130 log_file( "PLAYERDEST", 00131 sprintf( "%s: %O VERNICHTET von PO %O, TI %O, TP %O\n", 00132 dtime(time()), ob, previous_object(), 00133 this_interactive(), this_player() ) ); 00134 00135 set_this_object(previous_object()); 00136 efun::destruct(ob); 00137 }

| string dtime | ( | int | wann | ) |
Definiert in Zeile 488 der Datei simul_efun.c.
Benutzt dtime_cache, MONATE, TAGE, TM_HOUR, TM_MDAY, TM_MIN, TM_MON, TM_SEC, TM_WDAY und TM_YEAR.
Wird benutzt von _add_entry(), _echo(), _examine(), _indoorbug(), _set_attack_busy(), _set_die_hook(), _set_fraternitasdonoarchmagorum(), _set_poison(), _todo_anzeigen(), access(), AddAction(), AddSin(), ArticleList(), bestaetigen(), Catchup(), ChannelMessage(), check_to_fast(), checkConsistency(), checkrcs(), cleanup_data(), create(), create_wizard(), debug(), DeliverMail(), destruct(), dirtesten(), do_damage(), Dump(), dump_file(), DumpMiniQuests(), DumpPubs(), efun_dtime(), end_query(), exec_playerob(), file_list(), FindPotion(), finger_single(), format_error(), format_notes(), ForwardArea(), GroupList(), inhalt(), IpName(), lies(), list_data(), load_player_ob_2(), loesche(), logon2(), MagierListe(), Message(), Message2string(), new(), new_load_player_ob_2(), notify_player_change(), NotifyACChange(), NotifyMove(), PostMagier(), PostSeher(), QueryFlaw(), QueryLong(), QueryValue(), QueryWhoListe(), ReadNextUnread(), real_log(), remove_interactive(), RemoveCmd(), RemoveFP(), RemoveSin(), renew_player(), reset(), rubriken(), sbanish(), SendMail(), SetMaxHeal(), SetMaxRate(), SetPubFactor(), setup(), ShortRangeSkill(), shutdown(), smart_npc_log(), snoop(), strftime(), thread(), Uncatchup() und versende_mail().
| mapping dump_ip_mapping | ( | ) |
Definiert in Zeile 1516 der Datei simul_efun.c.
| mixed* exclude_alist | ( | int | i, | |
| mixed * | alist | |||
| ) |
Definiert in Zeile 471 der Datei simul_efun.c.
00472 { 00473 int j; 00474 if (!pointerp(alist) || !sizeof(alist) || i<0) 00475 return alist; 00476 if (!pointerp(alist[0])) 00477 return alist[0..i-1]+alist[i+1..]; 00478 alist=alist[0..]; /* Create PHYSICAL copy of alist */ 00479 for (j=sizeof(alist)-1;j>=0;j--) 00480 alist[j]=alist[j][0..i-1]+alist[j][i+1..]; 00481 return alist; /* order_alist is NOT necessary - see /doc/LPC/alist */ 00482 }
| mixed* exclude_array | ( | mixed * | arr, | |
| int | from, | |||
| int | to | |||
| ) |
Definiert in Zeile 2130 der Datei simul_efun.c.
| int exist_days | ( | ) |
Definiert in Zeile 717 der Datei simul_efun.c.
Benutzt first_boot_time().
00718 { 00719 return (((time()-first_boot_time())/8640)+5)/10; 00720 }

| varargs string extract | ( | string | str, | |
| int | from, | |||
| int | to | |||
| ) |
Definiert in Zeile 2036 der Datei simul_efun.c.
Benutzt abs.
Wird benutzt von _showprops(), adjust(), align(), dump_file(), efun_extract(), explode_packet(), getrest(), lies(), QueryLong(), scan_obj(), short_path() und stat().
02036 { 02037 02038 if(!stringp(str)) { 02039 set_this_object(previous_object()); 02040 raise_error(sprintf("Bad argument 1 to extract(): %O",str)); 02041 } 02042 if (intp(from) && intp(to)) { 02043 if (from>=0 && to>=0) 02044 return(str[from .. to]); 02045 else if (from>=0 && to<0) 02046 return(str[from .. <abs(to)]); 02047 else if (from<0 && to>=0) 02048 return(str[<abs(from) .. to]); 02049 else 02050 return(str[<abs(from) .. <abs(to)]); 02051 } 02052 else if (intp(from)) { 02053 if (from>=0) 02054 return(str[from .. ]); 02055 else 02056 return(str[<abs(from) .. ]); 02057 } 02058 else { 02059 return(str); 02060 } 02061 }

| int file_time | ( | string | path | ) |
Definiert in Zeile 419 der Datei simul_efun.c.
Benutzt GETDIR_DATES.
Wird benutzt von _do_make(), checkrcs(), finger_single(), GetFolders(), make_stat(), scan(), sponsoring() und sread_line().
00419 { 00420 mixed *v; 00421 00422 set_this_object(previous_object()); 00423 if (sizeof(v=get_dir(path,GETDIR_DATES))) return v[0]; 00424 return(0); //sonst 00425 }

| static object find_snooped | ( | object | who | ) | [static] |
Definiert in Zeile 216 der Datei simul_efun.c.
Benutzt i und query_snoop().
Wird benutzt von snoop().
00217 { 00218 object *u; 00219 int i; 00220 00221 for (i=sizeof(u=users())-1;i>=0;i--) 00222 if (who==efun::query_snoop(u[i])) 00223 return u[i]; 00224 return 0; 00225 }


| int first_boot_time | ( | ) |
Definiert in Zeile 712 der Datei simul_efun.c.
Wird benutzt von exist_days().

| nomask varargs void garbage_collection | ( | string | str | ) |
Definiert in Zeile 1527 der Datei simul_efun.c.
Benutzt ARCH_SECURITY und IS_ARCH.
Wird benutzt von garbage_collection().
01528 { 01529 if(previous_object()==0 || !IS_ARCH(geteuid(previous_object())) 01530 || !ARCH_SECURITY) 01531 { 01532 write("Call GC now and the mud will crash in 5-6 hours. DONT DO IT!\n"); 01533 return; 01534 } 01535 else if (stringp(str)) 01536 { 01537 return efun::garbage_collection(str); 01538 } 01539 else 01540 return efun::garbage_collection(); 01541 }

| varargs void input_to | ( | mixed | fun, | |
| int | onoff, | |||
| varargs mixed * | args | |||
| ) |
Definiert in Zeile 1786 der Datei simul_efun.c.
Wird benutzt von _cp_ask_copy(), _todo_neu(), _todo_neu2(), abort(), Add_Quest(), ask_hc_question(), ask_mud_played_question(), ask_question(), ask_race_question(), bla(), bug(), buy(), change_password(), change_password2(), change_password3(), Change_Quest(), ConfigureColors(), correct_save(), delete_detail(), delete_door(), delete_exit(), delete_item(), delLine(), door_redisplay(), double_detail(), double_door(), double_exit(), exit_redisplay(), filewrite(), get_edit_line(), get_note_line(), get_race_answer(), get_subject(), getmode(), getshort(), getstatus(), gettext(), gotogetmode(), gotogetstatus(), gotogetstring(), gotogettext(), idea(), init(), input(), input_func(), insert_detail(), insert_detail2(), insert_door(), insert_exit(), interactiveMode(), lisp(), logon(), logon2(), md(), message(), more(), more_message(), MoreFile(), murks(), nedit(), new_password(), normal_ready(), normal_save_string(), ReadNewQuest(), reask_hc_question(), same_desc(), schreib(), self_delete(), sell(), SendMail(), set_add_detail(), set_raum(), short_ready(), short_redisplay(), short_save(), show_detail(), show_door(), show_long(), shut_down_game(), spielpause(), store_desc(), store_long(), typo(), waehle(), write_mail(), Xmsg(), XMsgSay(), XMsgShout() und XMsgTell().
01787 { 01788 mixed *arr; 01789 mapping TN; 01790 int i; 01791 01792 if ( !this_player() || !previous_object() ) 01793 return; 01794 01795 arr = ({ fun, onoff }) + args; 01796 01797 for ( i = sizeof(arr) - 1; i > 1; i-- ) 01798 if ( pointerp(arr[i]) ) 01799 arr[i] = quote(arr[i]); 01800 01801 TN = (mapping) this_player()->query_telnet_neg(); 01802 01803 if ( mappingp(TN) && mappingp(TN["received"]) && 01804 (TN["received"][TELOPT_EOR,1] == DO) ) 01805 funcall( bind_lambda( #'efun::binary_message/*'*/, this_player() ), 01806 ({ IAC, EOR }) ); 01807 01808 funcall( bind_lambda( unbound_lambda( ({}), 01809 ({ #'efun::input_to/*'*/ }) + arr ), 01810 previous_object() ) ); 01811 }
| public string iso2ascii | ( | string | str | ) |
Definiert in Zeile 1830 der Datei simul_efun.c.
01831 { 01832 if ( !stringp(str) || !strlen(str) ) 01833 return ""; 01834 01835 str = regreplace( str, "ä", "ae", 1 ); 01836 str = regreplace( str, "ö", "oe", 1 ); 01837 str = regreplace( str, "ü", "ue", 1 ); 01838 str = regreplace( str, "Ä", "Ae", 1 ); 01839 str = regreplace( str, "Ö", "Oe", 1 ); 01840 str = regreplace( str, "Ü", "Ue", 1 ); 01841 str = regreplace( str, "ß", "ss", 1 ); 01842 str = regreplace( str, "[^ -~]", "?", 1 ); 01843 01844 return str; 01845 }
| int last_reboot_time | ( | ) |
Definiert in Zeile 707 der Datei simul_efun.c.
Wird benutzt von ChannelMessage(), efun_last_reboot_time(), QueryMaxUptime(), SaveMaxUptime() und zeige_reboot().

| static private string Lcut | ( | string | str | ) | [static] |
Definiert in Zeile 227 der Datei simul_efun.c.
Wird benutzt von snoop().

| private int living_or_interactive | ( | object | o | ) |
Definiert in Zeile 1312 der Datei simul_efun.c.
| varargs int log_file | ( | string | file, | |
| string | txt, | |||
| int | size_to_break | |||
| ) |
Definiert in Zeile 428 der Datei simul_efun.c.
Benutzt MAX_LOG_SIZE und PO.
00428 { 00429 mixed *st; 00430 00431 file="/log/"+file; 00432 file=implode((efun::explode(file,"/")-({".."})),"/"); 00433 // tell_object(find_player("jof"),sprintf("LOG FILE: %O -> %O\n",previous_object(),file)); 00434 if (!funcall(bind_lambda(#'efun::call_other,PO),"secure/master",//') 00435 "valid_write",file,geteuid(PO),"log_file",PO)) 00436 return 0; 00437 if ( size_to_break >= 0 & ( 00438 sizeof(st = get_dir(file,2) ) && st[0] >= (size_to_break|MAX_LOG_SIZE))) 00439 catch(rename(file, file + ".old");publish); /* No panic if failure */ 00440 return(write_file(file,txt)); 00441 }
| int lowerchar | ( | int | char | ) |
Definiert in Zeile 555 der Datei simul_efun.c.
| string lowerstring | ( | string | s | ) |
Definiert in Zeile 576 der Datei simul_efun.c.
Wird benutzt von groupKey2Defstr() und sinners().

| mapping m_delete | ( | mapping | m, | |
| mixed | key | |||
| ) |
Definiert in Zeile 696 der Datei simul_efun.c.
Wird benutzt von _cleanup_projects(), _make(), _normalfunction(), _query_exits(), _query_internal_extralook(), _query_special_exits(), _remove_netdead(), _search(), _send_udp(), _set(), access(), add_to_tell_history(), AddDomain(), call_out(), Catchup(), ChangeEPObject(), ChannelAdmin(), ChannelMessage(), check_match(), clean_netdead(), CleanPublist(), cleanup_data(), ClearPlayerMiniQuest(), ClearPub(), ClearScoreBit(), CmdFehlerLoeschen(), CmdFix(), delete_player(), DeleteUser(), DistributeExp(), do_update(), DoChangeRow(), DoNotifyHpChange(), DoRegisterTeam(), DoRemoveMember(), DoTeamFollow(), end_query(), expire_timing_map(), find_living(), find_player(), FindDistantGroups(), flush(), GiveMiniQuest(), heart_beat(), InternalModifySkillAttribute(), KillGroup(), LiquidateEK(), LogCompileProblem(), LogError(), LogWarning(), m_delete(), MBanishDelete(), modify_threshold(), OutdateProjectCache(), PresentEnemies(), QuerySBanished(), QuerySkillAttribute(), QueryTBanished(), ReadNextUnread(), Remove(), remove(), remove_living_name(), RemoveCmd(), RemoveEPObject(), RemoveExit(), RemoveExtraLook(), RemoveFixedObject(), RemoveFromMenu(), RemoveGroup(), RemoveInfo(), RemoveMiniQuest(), RemoveNotiz(), RemoveObject(), RemoveQuest(), RemoveResistanceModifier(), RemoveSin(), RemoveSkillAttributeModifier(), removeTip(), RemoveTmpProp(), reply_time_out(), reset(), saveText(), set_object_living_name(), SetNNADWMSG(), SetPlayerMiniQuest(), SetScoreBit(), SiteBanish(), StopHuntFor(), sub(), TeamCmd(), tie(), unalias(), Unregister(), UnregisterEvent(), UnregisterHelperNPC(), update_buffers(), UpdateCounter(), UpdateResistanceStrengths(), UpdateSACache() und versende_mail().
00696 { 00697 return efun::m_delete(copy(m), key); 00698 }
| int m_width | ( | mapping | m | ) |
Definiert in Zeile 701 der Datei simul_efun.c.
| int member_array | ( | mixed | item, | |
| mixed | arraystring | |||
| ) |
Definiert in Zeile 2094 der Datei simul_efun.c.
Wird benutzt von AddHarbour(), AddKnownPotion(), allowed(), AskAllowedWrite(), catch_tell(), create(), delete_detail2(), delete_door2(), delete_exit2(), delete_item2(), DeleteUnreadFolder(), door_redisplay2(), door_redisplay3(), efun_member_array(), exit_redisplay2(), FingerMail(), frag(), getstatus(), go_door(), id(), init(), insert_detail(), insert_detail2(), insert_door(), insert_door2(), insert_door3(), insert_exit(), insert_exit2(), insert_key(), liste(), logaccess(), MakeFolder(), moeglichkeit(), MoveMsg(), new_guest(), nextAlpha(), oeffnen(), ReadNextUnread(), remove_from_spool(), RemoveFolder(), RemoveKnownPotion(), same_desc(), save_msg(), save_spool_item(), schliessen(), show_detail(), show_door(), store_desc(), store_dlong(), update(), waehle_2() und Xset().
02094 { 02095 02096 if (pointerp(arraystring)) { 02097 return(efun::member(arraystring,item)); 02098 } 02099 else if (stringp(arraystring)) { 02100 return(efun::member(arraystring,to_int(item))); 02101 } 02102 else { 02103 set_this_object(previous_object()); 02104 raise_error(sprintf("Bad argument 1 to member_array(): %O",arraystring)); 02105 } 02106 }
| static void move_inv | ( | object | ob | ) | [static] |
Definiert in Zeile 767 der Datei simul_efun.c.
| varargs void move_object | ( | mixed | what, | |
| mixed | where | |||
| ) |
Definiert in Zeile 1268 der Datei simul_efun.c.
Benutzt destruct(), log_file, NETDEAD_ROOM und set_object_heart_beat().
Wird benutzt von _at_player(), _in_room(), _move_base(), create(), move(), set_user() und upd().
01269 { 01270 object po,tmp; 01271 01272 po=previous_object(); 01273 if (!where) 01274 { 01275 where=what; 01276 what=po; 01277 } 01278 if (((stringp(where) && where==NETDEAD_ROOM ) || 01279 (objectp(where) && where==find_object(NETDEAD_ROOM))) && 01280 objectp(what) && object_name(what)!="/obj/sperrer") 01281 { 01282 if (!query_once_interactive(what)) 01283 { 01284 what->remove(); 01285 if (what) destruct(what); 01286 return; 01287 } 01288 if (living(what) || interactive(what)) 01289 { 01290 log_file("NDEAD2",sprintf("TRYED TO MOVE TO NETDEAD: %O\n",what)); 01291 return; 01292 } 01293 set_object_heart_beat(what,0); 01294 } 01295 tmp=what; 01296 while (tmp=environment(tmp)) 01297 // Ja. Man ruft die _set_xxx()-Funktionen eigentlich nicht direkt auf. 01298 // Aber das Lichtsystem ist schon *so* rechenintensiv und gerade der 01299 // P_LAST_CONTENT_CHANGE-Cache wird *so* oft benoetigt, dass es mir 01300 // da um jedes bisschen Rechenzeit geht. 01301 // Der Zweck heiligt ja bekanntlich die Mittel. ;-) 01302 // 01303 // Tiamak 01304 tmp->_set_last_content_change(); 01305 (void)funcall(bind_lambda(#'efun::move_object,po),what,where); 01306 if (tmp=what) 01307 while (tmp=environment(tmp)) 01308 tmp->_set_last_content_change(); 01309 }


| varargs void notify_fail | ( | mixed | nf, | |
| int | prio | |||
| ) |
Definiert in Zeile 1543 der Datei simul_efun.c.
Benutzt NF_NL_LIVING, NF_NL_NONE, NF_NL_OWN, NF_NL_ROOM, NF_NL_THING und PL.
Wird benutzt von _cd2(), _cp(), _destruct(), _do_unwear(), _do_wear(), _examine(), _msg_beep(), _msg_prepend(), _notify_fail(), _plantmaster(), _process_command(), _rmdir(), _sense_exa(), _showprops(), _todo(), _todo_anzeigen(), _todo_loeschen(), _todo_verschieben(), _verfolge(), add(), AddMember(), advance(), Allowed(), befoerdere(), bestaetigen(), bete(), blaettere(), board_long(), Catchup(), change(), ChangeAutoInfo(), ChangeColors(), ChangeHelper(), ChangeLeader(), ChangeName(), ChangePrio(), ChangeRow(), ChangeStatus(), ChangeWimpyRow(), ChannelAdmin(), ChannelParser(), clone(), cmd_shoot(), CmdAddNote(), CmdFehlerLoeschen(), CmdFehlerZeigen(), CmdFix(), cmdline(), CmdLock(), CmdReassign(), del(), destruct_object(), dirtesten(), DoUnwear(), DoWield(), drink_this(), eat_this(), enable_spell_fatigue_compat(), epcount(), eppladd(), epplclr(), eppldel(), epplset(), epscan(), ErgaenzeText(), ErsetzeText(), essen(), eval(), Finger(), fuelle(), GetFunc(), go_door(), haps(), info(), inhalt(), leere(), lies(), liste(), load(), loesche(), MailMessage(), mailmv(), modproj_fun(), MoveMessage(), naschen(), new_quit(), nimm(), notify_fail(), oeffnen(), open(), parsecommand(), pubtest(), raus(), ReadNextUnread(), rein(), reise(), RemoveMember(), remproj_fun(), RescueText(), rubrik(), SaveMessage(), scanart(), schleck(), schliessen(), search(), sell(), Shout(), ShowTeamHP(), sinners(), soft_destruct_object(), soft_update_object(), spaltenzahl(), spieldauer(), spielpause(), StartAttack(), Subscribe(), team_aufnahme(), team_aufnahmewunsch(), teamcmd(), TeamCmd(), throw_it(), tmhist(), trinken(), Uncatchup(), UncatchupSyntax(), Unsubscribe(), unterschreibe(), update_object(), waehle(), watch_fun(), wechdamit(), wurzel_an(), wurzel_aus(), zeige_protokoll(), ZeigeZettel() und zerreisse().
01543 { 01544 object po,oldo; 01545 int oldprio; 01546 01547 if (!PL || !objectp(po=previous_object())) return; 01548 if (!stringp(nf) && !closurep(nf)) { 01549 set_this_object(po); 01550 raise_error(sprintf( 01551 "Only strings and closures allowed for notify_fail! " 01552 "Argument was: %.50O...\n",nf)); 01553 } 01554 01555 // falls ein Objekt bereits nen notify_fail() setzte, Prioritaeten abschaetzen 01556 // und vergleichen. 01557 if (objectp(oldo=query_notify_fail(1)) && po!=oldo) { 01558 if (!prio) { 01559 //Prioritaet dieses notify_fail() 'abschaetzen' 01560 if (po==PL) // Spieler-interne (soul-cmds) 01561 prio=NF_NL_OWN; 01562 else if (living(po)) 01563 prio=NF_NL_LIVING; 01564 else if ((int)po->IsRoom()) 01565 prio=NF_NL_ROOM; 01566 else 01567 prio=NF_NL_THING; 01568 } 01569 //Prioritaet des alten Setzers abschaetzen 01570 if (oldo==PL) 01571 oldprio=NF_NL_OWN; 01572 else if (living(oldo)) 01573 oldprio=NF_NL_LIVING; 01574 else if ((int)oldo->IsRoom()) 01575 oldprio=NF_NL_ROOM; 01576 else 01577 oldprio=NF_NL_THING; 01578 } 01579 else // wenn es noch kein Notify_fail gibt: 01580 oldprio=NF_NL_NONE; 01581 01582 //vergleichen und ggf. setzen 01583 if (prio >= oldprio) { 01584 set_this_object(po); 01585 efun::notify_fail(nf); 01586 } 01587 01588 return; 01589 }
| string NotifyDestruct | ( | object | caller | ) |
Definiert in Zeile 141 der Datei simul_efun.c.
Benutzt ARCH_SECURITY und process_call().
00141 { 00142 if( (caller!=this_object() && !ARCH_SECURITY) || process_call() ) { 00143 return "Du darfst das simul_efun Objekt nicht zerstoeren!\n"; 00144 } 00145 }

| string* old_explode | ( | string | str, | |
| string | del | |||
| ) |
Definiert in Zeile 392 der Datei simul_efun.c.
Wird benutzt von _examine(), _return_args(), _showprops(), addd(), AddGroup(), AddMiniQuest(), addr(), AddScore(), addw(), alias(), area_check(), array_desc(), arrayconvert(), ArticleList(), catch_tell(), ChangeAutoInfo(), ChangeFormation(), ChangeMiniQuest(), ChannelAdmin(), ChannelMessage(), copy_ldfied(), create(), decode(), do_list(), efun_explode(), epscan(), filter_users(), FindPotion(), finger_single(), frag(), fuelle(), gehen(), get_carbon_copy(), get_detail_short(), get_killer(), get_killer_object(), gettext(), GiveExplorationPoint(), GiveExplorationPointObject(), goto(), HasMiniQuest(), initialize(), insert_detail(), load(), long_get_dir(), mail_cmds(), mailmv(), make_bmail(), Message(), move(), murks(), new_guest(), PostNote(), push_str(), query_add_details(), QueryExplore(), QueryNPC(), QueryObject(), read_host_list(), ReadNewQuest(), RegisterArmour(), RegisterDamager(), RegisterExit(), removed(), RemoveEPObject(), remover(), removew(), sag(), scan_obj(), search(), set_add_detail(), set_guest(), set_raum(), short(), shoutansw(), show_all_details(), stat(), string_desc(), tell(), telnet_neg(), tinfo(), udp_channel(), unalias(), validOb(), Xcat(), Xcd(), XFile(), Xforall(), Xgrep(), Xhead(), Xmtp(), Xproc(), Xprops(), Xsh(), Xsort(), Xtail() und zeige_hilfe().
00392 { 00393 int s, t; 00394 string *strs; 00395 00396 if (!stringp(str)) { 00397 set_this_object(previous_object()); 00398 raise_error(sprintf( 00399 "Invalid argument 1 to old_explode()! Expected <string>, got: " 00400 "%.30O\n",str)); 00401 } 00402 if (!stringp(del)) { 00403 set_this_object(previous_object()); 00404 raise_error(sprintf( 00405 "Invalid argument 2 to old_explode()! Expected <string>, got: " 00406 "%.30O\n",del)); 00407 } 00408 if(del == "") 00409 return ({str}); 00410 strs=efun::explode(str, del); 00411 t=sizeof(strs)-1; 00412 while(s<=t && strs[s++] == "");s--; 00413 while(t>=0 && strs[t--] == "");t++; 00414 if(s<=t) 00415 return strs[s..t]; 00416 return ({}); 00417 }
| public nomask int process_call | ( | ) |
Definiert in Zeile 775 der Datei simul_efun.c.
Benutzt process_flag.
Wird benutzt von ___updmaster(), __set_bb(), _internal(), access_check(), add(), AddAllowed(), AddGroup(), allowed(), auswertung(), destruct(), dump_group(), filter_private(), FingerMail(), format_error(), GetGroup(), is_allowed(), modify_command(), modify_threshold(), moeglichkeit(), new_logon(), NotifyDestruct(), remove(), RemoveAllowed(), RemoveGroup(), Sec(), secure(), security(), security_check(), SetGroup(), sub() und wahlthema().
00776 { 00777 if (process_flag>0) 00778 return process_flag; 00779 else return(0); 00780 }

| nomask string process_string | ( | mixed | str | ) |
Definiert in Zeile 787 der Datei simul_efun.c.
Benutzt err, flag und process_flag.
Wird benutzt von _process_string(), do_frage(), DoAttackChat(), DoChat(), efun_process_string(), int_long(), int_short(), long(), nextStep() und short().
00788 { 00789 string tmp, err; 00790 int flag; 00791 00792 if ( closurep(str) ) { 00793 set_this_object( previous_object() ); 00794 return funcall(str); 00795 } 00796 else if (str==0) 00797 return((string)str); 00798 else if ( !stringp(str) ) { 00799 return to_string(str); 00800 } 00801 00802 if ( !(flag = process_flag > time() - 60)) 00803 process_flag=time(); 00804 00805 err = catch(tmp = funcall(#'_process_string,str,previous_object()); publish); 00806 00807 if ( !flag ) 00808 process_flag=0; 00809 00810 if (err) { 00811 // Verarbeitung abbrechen 00812 set_this_object(previous_object()); 00813 raise_error(err); 00814 } 00815 return tmp; 00816 }

| mixed query_closure_object | ( | closure | c | ) |
Definiert in Zeile 1260 der Datei simul_efun.c.
Benutzt CLOSURE_IS_UNBOUND_LAMBDA.
Wird benutzt von _illegal_closure(), execute_anything(), heart_beat(), Registration() und Set().
01260 { 01261 return 01262 CLOSURE_IS_UNBOUND_LAMBDA(get_type_info(c, 1)) ? 01263 0 : 01264 (to_object(c) || -1); 01265 }

| mixed* query_comm_stat | ( | ) |
Definiert in Zeile 1414 der Datei simul_efun.c.
| string query_ip_name | ( | mixed | ob | ) |
Definiert in Zeile 199 der Datei simul_efun.c.
Benutzt query_ip_number().
Wird benutzt von check_illegal(), check_password(), check_too_many_from_same_ip(), check_too_many_logons(), efun_query_ip_name(), finger_single(), info(), IpName(), load_player_ob_2(), logon2(), PlayerIP() und scan().
00200 { 00201 if ( !ob || objectp(ob) ) 00202 ob=query_ip_number(ob); 00203 return (string)"/p/daemon/iplookup"->host(ob); 00204 }


| string query_ip_number | ( | object | ob | ) |
Definiert in Zeile 188 der Datei simul_efun.c.
Wird benutzt von check_illegal(), check_password(), check_too_many_from_same_ip(), check_too_many_logons(), country(), efun_query_ip_number(), finger_single(), host(), idle(), IdleTime(), info(), IpName(), load_player_ob_2(), logon2(), PlayerIP(), print_mssp_response(), query_ip_name(), query_ip_number(), renew_player_object() und scan().
00189 { 00190 ob= ob || this_player(); 00191 if (!objectp(ob) || !interactive(ob)) return 0; 00192 if(ob->query_realip() && (string)ob->query_realip()!="") 00193 { 00194 return (string)ob->query_realip(); 00195 } 00196 return efun::query_ip_number(ob); 00197 }

| nomask varargs int query_ip_port | ( | object | pl | ) |
Definiert in Zeile 1711 der Datei simul_efun.c.
| nomask varargs int query_next_reset | ( | object | ob | ) |
Definiert in Zeile 1868 der Datei simul_efun.c.
Benutzt OIB_NEXT_RESET und OINFO_BASIC.
Wird benutzt von remove().
01868 { 01869 01870 // Typpruefung: etwas anderes als Objekte oder 0 sollen Fehler sein. 01871 if (ob && !objectp(ob)) 01872 raise_error(sprintf("Bad arg 1 to query_next_reset(): got %.20O, " 01873 "expected object.\n",ob)); 01874 01875 // Defaultobjekt PO, wenn 0 uebergeben. 01876 if ( !objectp(ob) ) 01877 ob = previous_object(); 01878 01879 return object_info(ob,OINFO_BASIC)[OIB_NEXT_RESET]; 01880 }

| nomask object query_snoop | ( | object | who | ) |
Definiert in Zeile 381 der Datei simul_efun.c.
Benutzt IS_ARCH und query_wiz_grp().
Wird benutzt von efun_query_snoop(), find_snooped(), info(), PlayerSnoop(), query_snoop(), scan(), scan_obj(), snoop(), swho() und tell().
00381 { 00382 object snooper; 00383 00384 snooper=efun::query_snoop(who); 00385 if (!snooper) return 0; 00386 if (query_wiz_grp(snooper)>query_wiz_grp(getuid(previous_object())) && 00387 IS_ARCH(snooper)) return 0; 00388 return snooper; 00389 }


| int query_wiz_grp | ( | mixed | wiz | ) |
Definiert in Zeile 920 der Datei simul_efun.c.
Wird benutzt von query_snoop(), snoop() und tell().
00921 { 00922 int lev; 00923 00924 lev=query_wiz_level(wiz); 00925 if (lev<SEER_LVL) return 0; 00926 if (lev>=GOD_LVL) return lev; 00927 if (lev>=ARCH_LVL) return ARCH_GRP; 00928 if (lev>=ELDER_LVL) return ELDER_GRP; 00929 if (lev>=LORD_LVL) return LORD_GRP; 00930 if (lev>=SPECIAL_LVL) return SPECIAL_GRP; 00931 if (lev>=DOMAINMEMBER_LVL) return DOMAINMEMBER_GRP; 00932 if (lev>=WIZARD_LVL) return WIZARD_GRP; 00933 if (lev>=LEARNER_LVL) return LEARNER_GRP; 00934 return SEER_GRP; 00935 }

| int query_wiz_level | ( | mixed | player | ) |
Definiert in Zeile 444 der Datei simul_efun.c.
00444 { 00445 return (int)"/secure/master"->query_wiz_level(player); 00446 }
| mixed* remove_alist | ( | mixed | key, | |
| mixed * | alist | |||
| ) |
Definiert in Zeile 449 der Datei simul_efun.c.
Benutzt i.
00450 { 00451 int i,j; 00452 00453 if (!pointerp(alist) || !sizeof(alist)) 00454 return alist; 00455 if (!pointerp(alist[0])) 00456 { 00457 if ((i=assoc(key,alist))<0) 00458 return alist; 00459 return alist[0..i-1]+alist[i+1..]; 00460 } 00461 i = assoc(key,alist[0]); 00462 if ((i=assoc(key,alist[0]))<0) 00463 return alist; 00464 alist=alist[0..]; 00465 for (j=sizeof(alist)-1;j>=0;j--) 00466 alist[j]=alist[j][0..i-1]+alist[j][i+1..]; 00467 return alist; 00468 }
| public nomask void remove_interactive | ( | object | ob | ) |
Definiert in Zeile 147 der Datei simul_efun.c.
Wird benutzt von CheckDailyPlaytime(), disco(), efun_remove_interactive(), load_player_object() und remove_interactive().
00148 { 00149 if ( objectp(ob) && previous_object() 00150 && object_name(previous_object())[0..7] != "/secure/" 00151 && ((previous_object() != ob 00152 && (ob != this_player() || ob != this_interactive())) 00153 || (previous_object() == ob 00154 && (this_player() && this_player() != ob 00155 || this_interactive() && this_interactive() != ob)) ) ) 00156 00157 log_file( "PLAYERDEST", 00158 sprintf( "%s: %O ausgeloggt von PO %O, TI %O, TP %O\n", 00159 dtime(time()), ob, previous_object(), 00160 this_interactive(), this_player() ) ); 00161 00162 efun::remove_interactive(ob); 00163 }


| varargs string replace_personal | ( | string | str, | |
| mixed * | obs, | |||
| int | caps | |||
| ) |
__EFUN_DEFINED__(copy_file)
Definiert in Zeile 1926 der Datei simul_efun.c.
Benutzt FEMALE, i, MALE, NEUTER, PLURAL, SINGULAR, WEM, WEN, WER und WESSEN.
Wird benutzt von _process_command(), AddExtraLook(), doUnwearMessage(), doUnwieldMessage(), doWearMessage(), doWieldMessage(), drop(), give(), pick(), put(), put_or_get() und show().
01926 { 01927 int i; 01928 string *parts; 01929 01930 parts = regexplode(str, "@WE[A-SU]*[0-9]"); 01931 i = sizeof(parts); 01932 01933 if (i>1) { 01934 int j, t; 01935 closure *name_cls; 01936 01937 t = j = sizeof(obs); 01938 01939 name_cls = allocate(j); 01940 while (j--) 01941 if (objectp(obs[j])) 01942 name_cls[j] = symbol_function("name", obs[j]); 01943 else if (stringp(obs[j])) 01944 name_cls[j] = obs[j]; 01945 01946 while ((i-= 2)>0) { 01947 int ob_nr; 01948 // zu ersetzendes Token in Fall und Objektindex aufspalten 01949 ob_nr = parts[i][<1]-'1'; 01950 if (ob_nr<0 || ob_nr>=t) { 01951 set_this_object(previous_object()); 01952 raise_error(sprintf("replace_personal: using wrong object index %d\n", 01953 ob_nr)); 01954 return implode(parts, ""); 01955 } 01956 01957 // casus kann man schon hier entscheiden 01958 int casus; 01959 string part = parts[i]; 01960 switch (part[3]) { 01961 case 'R': casus = WER; break; 01962 case 'S': casus = WESSEN; break; 01963 case 'M': casus = WEM; break; 01964 case 'N': casus = WEN; break; 01965 default: continue; // passt schon jetzt nicht in das Hauptmuster 01966 } 01967 01968 // und jetzt die einzelnen Keywords ohne fuehrendes "@WE", beendende Id 01969 mixed tmp; 01970 switch (part[3..<2]) { 01971 case "R": case "SSEN": case "M": case "N": // Name 01972 parts[i] = funcall(name_cls[ob_nr], casus, 1); break; 01973 case "RU": case "SSENU": case "MU": case "NU": // unbestimmt 01974 parts[i] = funcall(name_cls[ob_nr], casus); break; 01975 case "RQP": case "SSENQP": case "MQP": case "NQP": // Pronoun 01976 if (objectp(tmp = obs[ob_nr])) 01977 parts[i] = (string)tmp->QueryPronoun(casus); 01978 break; 01979 case "RQA": case "SSENQA": case "MQA": case "NQA": // Article 01980 if (objectp(tmp = obs[ob_nr])) 01981 tmp = (string)tmp->QueryArticle(casus, 1, 1); 01982 if (stringp(tmp) && !(tmp[<1]^' ')) 01983 tmp = tmp[0..<2]; // Extra-Space wieder loeschen 01984 break; 01985 case "RQPPMS": case "SSENQPPMS": case "MQPPMS": case "NQPPMS": 01986 if (objectp(tmp = obs[ob_nr])) 01987 parts[i] = (string)tmp->QueryPossPronoun(MALE, casus, SINGULAR); 01988 break; 01989 case "RQPPFS": case "SSENQPPFS": case "MQPPFS": case "NQPPFS": 01990 if (objectp(tmp = obs[ob_nr])) 01991 parts[i] = (string)tmp->QueryPossPronoun(FEMALE, casus, SINGULAR); 01992 break; 01993 case "RQPPNS": case "SSENQPPNS": case "MQPPNS": case "NQPPNS": 01994 if (objectp(tmp = obs[ob_nr])) 01995 parts[i] = (string)tmp->QueryPossPronoun(NEUTER, casus, SINGULAR); 01996 break; 01997 case "RQPPMP": case "SSENQPPMP": case "MQPPMP": case "NQPPMP": 01998 if (objectp(tmp = obs[ob_nr])) 01999 parts[i] = (string)tmp->QueryPossPronoun(MALE, casus, PLURAL); 02000 break; 02001 case "RQPPFP": case "SSENQPPFP": case "MQPPFP": case "NQPPFP": 02002 if (objectp(tmp = obs[ob_nr])) 02003 parts[i] = (string)tmp->QueryPossPronoun(FEMALE, casus, PLURAL); 02004 break; 02005 case "RQPPNP": case "SSENQPPNP": case "MQPPNP": case "NQPPNP": 02006 if (objectp(tmp = obs[ob_nr])) 02007 parts[i] = (string)tmp->QueryPossPronoun(NEUTER, casus, PLURAL); 02008 break; 02009 default: 02010 continue; 02011 } 02012 02013 // wenn tmp ein String war, weisen wir es hier pauschal zu 02014 if (stringp(tmp)) 02015 parts[i] = tmp; 02016 02017 // auf Wunsch wird nach Satzenden gross geschrieben 02018 if (caps) 02019 switch (parts[i-1][<2..]) { 02020 case ". ": case "! ": case "? ": 02021 case ".": case "!": case "?": 02022 case ".\n": case "!\n": case "?\n": 02023 case "\" ": case "\"\n": 02024 parts[i] = capitalize(parts[i]); 02025 break; 02026 } 02027 } 02028 return implode(parts, ""); 02029 } 02030 return str; 02031 }

| protected void reset | ( | void | ) |
Definiert in Zeile 1371 der Datei simul_efun.c.
Benutzt CleanLivingData() und set_next_reset().
01371 { 01372 set_next_reset(7200); 01373 CleanLivingData(); 01374 }

| int restore_object | ( | string | name | ) |
Definiert in Zeile 870 der Datei simul_efun.c.
Wird benutzt von create(), find_userinfo(), finger_single(), GetFolders(), initialize(), Load(), logon2(), move(), new_logon(), retry_send(), update_header_file() und Xtool().
00871 { 00872 int result; 00873 mixed index; 00874 mixed save; 00875 mapping properties; 00876 int i; 00877 closure cl; 00878 00879 // get actual property settings (by create()) 00880 properties = (mapping)previous_object()->QueryProperties(); 00881 00882 // DEBUG(sprintf("RESTORE %O\n",name)); 00883 // restore object 00884 result=funcall(bind_lambda(#'efun::restore_object, previous_object()), name); 00885 //')) 00886 //_get_save_data liefert tatsaechlich mixed zurueck, wenn das auch immer ein 00887 //mapping sein sollte. 00888 save = (mixed)previous_object()->_get_save_data(); 00889 if(mappingp(save)) 00890 { 00891 index = m_indices(save); 00892 for(i = sizeof(index)-1; i>=0; i--) 00893 { 00894 properties[index[i]] = save[index[i]]; 00895 properties[index[i], F_MODE] = save[index[i], F_MODE] 00896 &~(SETCACHED|QUERYCACHED); 00897 } 00898 } 00899 else properties = ([]); 00900 00901 // restore properties 00902 (void)funcall( 00903 bind_lambda( 00904 unbound_lambda(({'arg}), //'}) 00905 ({#'call_other,({#'this_object}), 00906 "SetProperties",'arg})),//') 00907 previous_object()),properties); 00908 previous_object()->_set_save_data(0); 00909 return result; 00910 }

| mixed save_object | ( | mixed | name | ) |
Definiert in Zeile 820 der Datei simul_efun.c.
Wird benutzt von ActivateReputation(), add(), AddDomain(), AddEPObject(), AddGuild(), AddHarbour(), AddObject(), AddReputation(), AddReputationUid(), addTip(), again_password(), ChangeEPObject(), ChangeReputationMsg(), ChangeReputationName(), ChannelMessage(), check_password(), create(), DeactivateReputation(), DeleteUnreadFolder(), DeleteUser(), load_player_object(), MakeFolder(), MBanishDelete(), MBanishInsert(), modify_threshold(), new(), QueryNPC(), QueryObject(), remove(), RemoveEPObject(), RemoveFolder(), RemoveGuild(), RemoveMsg(), RemoveObject(), RemoveReputationUid(), RemoveShip(), removeTip(), reset(), save(), save_data(), save_info(), save_me(), save_msg(), save_spool_item(), SetAverage(), SetScore(), SetUser(), sub(), update(), update_header_file() und Xtool().
00821 { 00822 mapping properties; 00823 mapping save; 00824 mixed index, res; 00825 int i; 00826 00827 // nur Strings und 0 zulassen 00828 if ((!stringp(name) || !strlen(name)) && 00829 (!intp(name) || name!=0)) { 00830 set_this_object(previous_object()); 00831 raise_error(sprintf( 00832 "Only non-empty strings and 0 may be used as filename in " 00833 "sefun::save_object()! Argument was %O\n",name)); 00834 } 00835 save = m_allocate(0, 2); 00836 properties = (mapping)previous_object()->QueryProperties(); 00837 00838 if(mappingp(properties)) 00839 { 00840 // delete all entries in mapping properties without SAVE flag! 00841 index = m_indices(properties); 00842 for(i = sizeof(index)-1; i>=0;i--) 00843 { 00844 if(properties[index[i], F_MODE] & SAVE) 00845 { 00846 save[index[i]] = properties[index[i]]; 00847 save[index[i], F_MODE] = 00848 properties[index[i], F_MODE] & 00849 (~(SETMNOTFOUND|QUERYMNOTFOUND|QUERYCACHED|SETCACHED)); 00850 } 00851 } 00852 } 00853 else save = ([]); 00854 00855 // save object! 00856 previous_object()->_set_save_data(save); 00857 // format: wie definiert in config.h 00858 if (stringp(name)) 00859 res = funcall(bind_lambda(#'efun::save_object, previous_object()), name, 00860 __LIB__SAVE_FORMAT_VERSION__); 00861 else 00862 res = funcall(bind_lambda(#'efun::save_object, previous_object()), 00863 __LIB__SAVE_FORMAT_VERSION__); 00864 previous_object()->_set_save_data(0); 00865 00866 return res; 00867 }
| nomask string secure_euid | ( | ) |
Definiert in Zeile 1768 der Datei simul_efun.c.
Wird benutzt von access_check(), banish(), BanishName(), create_wizard(), is_allowed(), mbanish(), MBanishInsert(), MBanishList(), sbanish(), tbanish() und user_euid().
01769 { 01770 string euid; 01771 01772 if (!this_interactive()) // Es muss einen interactive geben 01773 return 0; 01774 euid=geteuid(this_interactive()); 01775 // ueber alle Caller iterieren. Wenn eines davon eine andere euid hat als 01776 // der Interactive und diese nicht die ROOTID ist, wird 0 zurueckgeben. 01777 // Ebenso, falls ein Selbstzerstoerer irgendwo in der Kette ist. 01778 foreach(object caller: caller_stack()) { 01779 if (!objectp(caller) || 01780 (geteuid(caller)!=euid && geteuid(caller)!=ROOTID)) 01781 return 0; 01782 } 01783 return euid; // 'sichere' euid zurueckgeben 01784 }

| nomask int secure_level | ( | ) |
Definiert in Zeile 1750 der Datei simul_efun.c.
Wird benutzt von AskAllowedWrite(), create_wizard(), eppldel(), sbanish(), secure() und security().
01751 { 01752 int *level; 01753 //kette der Caller durchlaufen, den niedrigsten Level in der Kette 01754 //zurueckgeben. Zerstoerte Objekte (Selbstzerstoerer) fuehren zur Rueckgabe 01755 //von 0. 01756 //caller_stack(1) fuegt dem Rueckgabearray this_interactive() hinzu bzw. 0, 01757 //wenn es keinen Interactive gibt. Die 0 fuehrt dann wie bei zerstoerten 01758 //Objekten zur Rueckgabe von 0, was gewuenscht ist, da es hier einen 01759 //INteractive geben muss. 01760 level=map(caller_stack(1),function int (object caller) 01761 {if (objectp(caller)) 01762 return(query_wiz_level(geteuid(caller))); 01763 return(0); // kein Objekt da, 0. 01764 } ); 01765 return(min(level)); //den kleinsten Wert im Array zurueckgeben (ggf. 0) 01766 }

| nomask int set_light | ( | int | i | ) |
Definiert in Zeile 1813 der Datei simul_efun.c.
Benutzt inv(), light(), ob(), P_INT_LIGHT und P_LIGHT.
Wird benutzt von _inventory() und init().
01815 : das Lichtlevel innerhalb des Objekts 01816 { 01817 object ob, *inv; 01818 int lall, light, dark, tmp; 01819 01820 if (!(ob=previous_object())) return 0; // ohne das gehts nicht. 01821 01822 // aus kompatibilitaetsgruenden kann man auch den Lichtlevel noch setzen 01823 if (i!=0) ob->SetProp(P_LIGHT, ob->QueryProp(P_LIGHT)+i); 01824 01825 // Lichtberechnung findet eigentlich in der Mudlib statt. 01826 return (int)ob->QueryProp(P_INT_LIGHT); 01827 }


| void set_next_reset | ( | int | time | ) |
Definiert in Zeile 1421 der Datei simul_efun.c.
Wird benutzt von create(), create_super(), GetDir(), NetDead(), reset(), SetUser() und start_simul_efun().

| int set_object_heart_beat | ( | object | ob, | |
| int | flag | |||
| ) |
Definiert in Zeile 913 der Datei simul_efun.c.
Wird benutzt von init(), invcheck(), move_object(), new_load_player_ob_2(), restart_heart_beats() und stop_heart_beats().
00914 { 00915 if (objectp(ob)) 00916 return funcall(bind_lambda(#'efun::set_heart_beat,ob),flag); 00917 }

| nomask void set_this_player | ( | object | pl | ) |
Definiert in Zeile 753 der Datei simul_efun.c.
Wird benutzt von inaugurate_master() und renew_player_object().

| public object shadow | ( | object | ob, | |
| int | flag | |||
| ) |
Definiert in Zeile 1611 der Datei simul_efun.c.
Wird benutzt von _shadow(), _tarn_turn_on(), create(), Initialize(), PrintShort(), Setzen() und start_shadow().
01612 { 01613 object res = funcall(#'_shadow,ob, flag); 01614 if (flag) 01615 "/secure/shadowmaster"->RegisterShadow(previous_object()); 01616 return res; 01617 }

| varargs void shout | ( | string | s, | |
| mixed | where | |||
| ) |
Definiert in Zeile 1331 der Datei simul_efun.c.
Wird benutzt von _echoall(), create_wizard(), efun_shout(), myshout(), seer_sequenz3(), Xmsg() und XMsgShout().
01331 { 01332 object *u; 01333 string *pfade; 01334 01335 if ( !sizeof( u = users() - ({ this_player(), 0 }) ) ) 01336 return; 01337 01338 if ( !where ) 01339 pfade = ({ "/" }); 01340 else if ( intp(where) ) 01341 pfade = 01342 ({ implode( efun::explode( object_name( environment(this_player()) ), 01343 "/" )[0..2], "/" ) + "/" }); 01344 else if ( stringp(where) ) 01345 pfade = ({ where }); 01346 else 01347 pfade = where; 01348 01349 filter( filter( u, "_shout_filter", ME, implode( pfade, "|" ) ), 01350 #'tell_object/*'*/, to_string(s) ); 01351 }

| nomask int shutdown | ( | string | reason | ) |
__EFUN_DEFINED__(strftime)
Definiert in Zeile 514 der Datei simul_efun.c.
Benutzt ARCH_SECURITY, ctime(), dtime(), log_file, name, output und ROOTID.
Wird benutzt von shut_down_game_2() und shutdown().
00515 { 00516 string name; 00517 string obname; 00518 string output; 00519 00520 if (!reason) 00521 return 0; 00522 if ( !ARCH_SECURITY && getuid(previous_object())!=ROOTID && 00523 object_name(previous_object())!="/obj/shut" ) 00524 { 00525 write("You have no permission to shut down the gamedriver!\n"); 00526 return 0; 00527 } 00528 if ((this_interactive())&&(name=getuid(this_interactive()))) 00529 { 00530 name=capitalize(name); 00531 filter(users(),#'tell_object,//' 00532 capitalize(name)+" faehrt das Spiel herunter!\n"); 00533 } 00534 else 00535 name="ANONYMOUS"; 00536 if (previous_object()) obname=capitalize(getuid(previous_object())); 00537 output=name; 00538 if (obname && name!=obname) output=output+" ("+obname+")"; 00539 if (previous_object()&&object_name(previous_object())=="/obj/shut"){ 00540 output+=" faehrt das Spiel via Armageddon herunter.\n"; 00541 output=dtime(time())+": "+output; 00542 log_file("GAME_LOG",output+"\n",-1); 00543 efun::shutdown(); 00544 return 1; 00545 } 00546 output=ctime(time())+": "+output+" faehrt das Spiel herunter.\n"; 00547 output+=" Grund: "+reason; 00548 log_file("GAME_LOG",output+"\n",-1); 00549 efun::shutdown(); 00550 return 1; 00551 }


| varargs mixed* slice_array | ( | mixed | array, | |
| int | from, | |||
| int | to | |||
| ) |
Definiert in Zeile 2065 der Datei simul_efun.c.
Benutzt abs.
02065 { 02066 02067 if(!pointerp(array)) { 02068 set_this_object(previous_object()); 02069 raise_error(sprintf("Bad argument 1 to slice_array(): %O",array)); 02070 } 02071 if (intp(from) && intp(to)) { 02072 if (from>=0 && to>=0) 02073 return(array[from .. to]); 02074 else if (from>=0 && to<0) 02075 return(array[from .. <abs(to)]); 02076 else if (from<0 && to>=0) 02077 return(array[<abs(from) .. to]); 02078 else 02079 return(array[<abs(from) .. <abs(to)]); 02080 } 02081 else if (intp(from)) { 02082 if (from>=0) 02083 return(array[from .. ]); 02084 else 02085 return(array[<abs(from) .. ]); 02086 } 02087 else { 02088 return(array); 02089 } 02090 }
| varargs mixed* slice_array | ( | mixed * | array, | |
| int | from, | |||
| int | to | |||
| ) |
Wird benutzt von efun_slice_array() und get_carbon_copy().

| nomask varargs int snoop | ( | object | me, | |
| object | you | |||
| ) |
Definiert in Zeile 231 der Datei simul_efun.c.
Benutzt ASNOOPLOGFILE, CHMASTER, dtime(), find_snooped(), IS_ARCH, IS_DEPUTY, Lcut(), log_file, NAME, P_SNOOPFLAGS, PO, query_snoop(), query_wiz_grp(), SF_LOCKED, SNOOPLOGFILE, WEM, WEN und WER.
Wird benutzt von snoop() und tell().
00232 { 00233 int ret; 00234 object snooper0, snooper, snooper2, snooper3; 00235 00236 if( !objectp(me) || me == you || !PO ) 00237 return 0; 00238 00239 snooper0 = find_snooped(me); 00240 00241 if(you){ 00242 if ( PO != me && query_wiz_grp(me) >= query_wiz_grp(geteuid(PO)) ) 00243 return 0; 00244 00245 if ( query_wiz_grp(me) <= query_wiz_grp(you) && 00246 !(you->QueryAllowSnoop(me)) ) 00247 if ( !IS_DEPUTY(me) || IS_ARCH(you) ) 00248 return 0; 00249 00250 if ( (snooper = efun::query_snoop(you)) && 00251 query_wiz_grp(snooper) >= query_wiz_grp(me) ){ 00252 if ( (int)snooper->QueryProp(P_SNOOPFLAGS) & SF_LOCKED ) 00253 return 0; 00254 00255 tell_object( snooper, sprintf( "%s snooped jetzt %s.\n", 00256 me->name(WER), you->name(WER) ) ); 00257 00258 snooper2 = me; 00259 00260 while ( snooper3 = query_snoop(snooper2) ){ 00261 tell_object( snooper, 00262 sprintf( "%s wird seinerseits von %s gesnooped.\n" 00263 ,snooper2->name(WER), 00264 snooper3->name(WEM) ) ); 00265 snooper2 = snooper3; 00266 } 00267 00268 efun::snoop( snooper, snooper2 ); 00269 00270 if ( efun::query_snoop(snooper2) != snooper ) 00271 tell_object( snooper, sprintf( "Du kannst %s nicht snoopen.\n", 00272 snooper2->name(WEN) ) ); 00273 else{ 00274 tell_object( snooper, sprintf( "Du snoopst jetzt %s.\n", 00275 snooper2->name(WEN) ) ); 00276 if ( !IS_DEPUTY(snooper) ){ 00277 log_file( SNOOPLOGFILE, sprintf("%s: %O %O %O\n", 00278 dtime(time()), 00279 snooper, 00280 snooper2, 00281 environment(snooper2) ), 00282 100000 ); 00283 if (snooper0) 00284 CHMASTER->send( "Snoop", snooper, 00285 sprintf( "%s *OFF* %s (%O)", 00286 capitalize(getuid(snooper)), 00287 capitalize(getuid(snooper0)), 00288 environment(snooper0) ) ); 00289 00290 CHMASTER->send( "Snoop", snooper, 00291 sprintf("%s -> %s (%O)", 00292 capitalize(getuid(snooper)), 00293 capitalize(getuid(snooper2)), 00294 environment(snooper2))); 00295 } 00296 else{ 00297 log_file( ASNOOPLOGFILE, sprintf( "%s: %O %O %O\n", 00298 dtime(time()), 00299 snooper, 00300 snooper2, 00301 environment(snooper2) ) 00302 ,100000 ); 00303 } 00304 } 00305 } 00306 else 00307 if (snooper) 00308 if ( !me->QueryProp(P_SNOOPFLAGS) & SF_LOCKED ){ 00309 printf( "%s wird bereits von %s gesnooped. Benutze das " 00310 "\"f\"-Flag, wenn du dennoch snoopen willst.\n", 00311 you->name(WER), snooper->name(WEM) ); 00312 return 0; 00313 } 00314 00315 ret = efun::snoop( me, you ); 00316 00317 if ( !IS_DEPUTY(me) && efun::query_snoop(you) == me){ 00318 log_file( SNOOPLOGFILE, sprintf( "%s: %O %O %O\n", 00319 Lcut(dtime(time())), 00320 me, you, environment(you) ), 00321 100000 ); 00322 00323 if (snooper0) 00324 CHMASTER->send( "Snoop", me, 00325 sprintf( "%s *OFF* %s (%O).", 00326 capitalize(getuid(me)), 00327 capitalize(getuid(snooper0)), 00328 environment(snooper0) ) ); 00329 00330 CHMASTER->send( "Snoop", me, sprintf( "%s -> %s (%O).", 00331 capitalize(getuid(me)), 00332 capitalize(getuid(you)), 00333 environment(you) ) ); 00334 } 00335 else{ 00336 if ( efun::query_snoop(you) == me ){ 00337 log_file( ASNOOPLOGFILE, sprintf( "%s: %O %O %O\n", 00338 Lcut(dtime(time())), 00339 me, you, environment(you) ), 00340 100000 ); 00341 } 00342 } 00343 00344 if ( ret && query_wiz_grp(me) <= query_wiz_grp(you) && 00345 !IS_DEPUTY(me) ) 00346 tell_object( you, "*** " + NAME(me) + " snoopt Dich!\n" ); 00347 00348 return ret; 00349 } 00350 else { 00351 if ( (me == PO || 00352 query_wiz_grp(geteuid(PO)) > query_wiz_grp(me) || 00353 (query_wiz_grp(geteuid(PO)) == query_wiz_grp(me) && 00354 query_snoop(PO) == me)) && snooper0 ){ 00355 if ( !IS_DEPUTY(me) ){ 00356 log_file( SNOOPLOGFILE, sprintf( "%s: %O %O %O *OFF*\n", 00357 Lcut(dtime(time())), me, 00358 snooper0, 00359 environment(snooper0) ), 00360 100000 ); 00361 00362 CHMASTER->send( "Snoop", me, 00363 sprintf( "%s *OFF* %s (%O).", 00364 capitalize(getuid(me)), 00365 capitalize(getuid(snooper0)), 00366 environment(snooper0) ) ); 00367 } 00368 else{ 00369 log_file( ASNOOPLOGFILE, sprintf( "%s: %O %O %O *OFF*\n", 00370 Lcut(dtime(time())), me, 00371 snooper0, 00372 environment(snooper0) ), 00373 100000 ); 00374 } 00375 00376 return efun::snoop(me); 00377 } 00378 } 00379 }


| void start_simul_efun | ( | ) |
Definiert in Zeile 1355 der Datei simul_efun.c.
Benutzt BACKBONE_WIZINFO_SIZE, info, InitLivingData() und set_next_reset().
01355 { 01356 mixed *info; 01357 01358 // Falls noch nicht getan, extra_wizinfo initialisieren 01359 if ( !pointerp(info = get_extra_wizinfo(0)) ) 01360 set_extra_wizinfo(0, info = allocate(BACKBONE_WIZINFO_SIZE)); 01361 01362 InitLivingData(info); 01363 01364 set_next_reset(10); // direkt mal aufraeumen 01365 }

| void StopCallOut | ( | int | arg | ) |
Definiert in Zeile 1022 der Datei simul_efun.c.
01023 { 01024 if (arg && extern_call() && object_name(previous_object())!="/secure/master") 01025 return 0; 01026 if (arg && !CallOutStopped) 01027 write_file("/log/call_out_stop",sprintf("__CALLED %s (%d)\n__(CUT HERE)__\n", 01028 ctime(time()),arg)); 01029 CallOutStopped=arg; 01030 }
| private string stretch | ( | string | s, | |
| int | width | |||
| ) |
Definiert in Zeile 591 der Datei simul_efun.c.
00591 { 00592 int len=strlen(s); 00593 if (len==width) return s; 00594 00595 // reine Leerzeilen, direkt zurueckgeben 00596 string trimmed=trim(s,TRIM_LEFT," "); 00597 if (trimmed=="") return s; 00598 int start_spaces = len - strlen(trimmed); 00599 00600 string* words = explode(trimmed, " "); 00601 // der letzte kriegt keine Spaces 00602 int word_count=sizeof(words) - 1; 00603 // wenn Zeile nur aus einem Wort, wird das Wort zurueckgegeben 00604 if (!word_count) 00605 return " "*start_spaces + words[0]; 00606 00607 int space_count = width - len; 00608 00609 int space_per_word=(word_count+space_count) / word_count; 00610 // Anz.Woerter mit Zusatz-Space 00611 int rest=(word_count+space_count) % word_count; 00612 // Rest-Spaces Verteilen 00613 foreach (int pos : rest) words[pos]+=" "; 00614 return (" "*start_spaces) + implode( words, " "*space_per_word ); 00615 }
| varargs string strftime | ( | mixed | fmt, | |
| int | clock, | |||
| int | localized | |||
| ) |
Definiert in Zeile 503 der Datei simul_efun.c.
Benutzt dtime().
Wird benutzt von _add_money(), _set_p_lib_disablecommands(), check_player(), CheckPlayerAttack(), ClearScoreBit(), create(), Dump(), dump_hosts_list(), FormatLogEntry(), InternalModifySkillAttribute(), LiquidateEK(), logon2(), Message(), receive_udp(), set_player_object(), SetScoreBit(), smart_log(), spielpause() und tmhist().
00503 { 00504 if (intp(clock) && clock >= 0) 00505 return dtime(clock); 00506 else if (intp(fmt) && fmt >= 0) 00507 return dtime(fmt); 00508 00509 return dtime(time()); 00510 }


| nomask void swap | ( | object | obj | ) |
Definiert in Zeile 1521 der Datei simul_efun.c.
| string time2string | ( | string | format, | |
| int | time | |||
| ) |
Definiert in Zeile 1630 der Datei simul_efun.c.
Benutzt i.
Wird benutzt von dirtesten(), scan_obj(), udp_tell() und x_long().
01631 { 01632 int days,hours,mins,secs,i,ch,max,abbr,dummy; 01633 string *parts, fmt; 01634 01635 secs = time; 01636 mins = (time/60); 01637 hours = (time/3600); 01638 days = (time/86400); 01639 abbr = 0; 01640 01641 parts = regexplode( format, "\(%\(-|\)[0-9]*[dhmsxDHMSX]\)|\(%%\)" ); 01642 01643 max = 0; 01644 for( i=1; i<sizeof(parts); i+=2 ) 01645 { 01646 ch = parts[i][<1]; 01647 switch( parts[i][<1] ) 01648 { 01649 case 'x': case 'X': 01650 abbr = sscanf( parts[i], "%%%d", dummy ) && dummy==0; 01651 // NO break ! 01652 case 'd': case 'D': 01653 max |= 7; 01654 break; 01655 case 'h': case 'H': 01656 max |= 3; 01657 break; 01658 case 'm': case 'M': 01659 max |= 1; 01660 break; 01661 } 01662 } 01663 if( max & 4 ) hours %= 24; 01664 if( max & 2 ) mins %= 60; 01665 if( max ) secs %= 60; 01666 01667 for( i=1; i<sizeof(parts); i+=2 ) 01668 { 01669 fmt = parts[i][0..<2]; 01670 ch = parts[i][<1]; 01671 if( ch=='x' ) 01672 { 01673 if( days>0 ) ch='d'; 01674 else if( hours>0 ) ch='h'; else ch = (mins>0) ? 'm' : 's'; 01675 } else if( ch=='X' ) 01676 { 01677 if( days>0 ) ch='D'; 01678 else if( hours>0 ) ch='H'; else ch = (mins>0) ? 'M' : 'S'; 01679 } 01680 switch( ch ) 01681 { 01682 case 'd': parts[i] = sprintf( fmt+"d", days ); break; 01683 case 'h': parts[i] = sprintf( fmt+"d", hours ); break; 01684 case 'm': parts[i] = sprintf( fmt+"d", mins ); break; 01685 case 's': parts[i] = sprintf( fmt+"d", secs ); break; 01686 case 'D': 01687 if(abbr) parts[i] = "d"; else 01688 parts[i] = sprintf( fmt+"s", (days==1) ? "Tag" : "Tage" ); 01689 break; 01690 case 'H': 01691 if(abbr) parts[i] = "h"; else 01692 parts[i] = sprintf( fmt+"s", (hours==1) ? "Stunde" : "Stunden" ); 01693 break; 01694 case 'M': 01695 if(abbr) parts[i] = "m"; else 01696 parts[i] = sprintf( fmt+"s", (mins==1) ? "Minute" : "Minuten" ); 01697 break; 01698 case 'S': 01699 if(abbr) parts[i] = "s"; else 01700 parts[i] = sprintf( fmt+"s", (secs==1) ? "Sekunde" : "Sekunden" ); 01701 break; 01702 case '%': 01703 parts[i] = "%"; 01704 break; 01705 } 01706 } 01707 return implode( parts, "" ); 01708 }

| public void unshadow | ( | ) |
Definiert in Zeile 1624 der Datei simul_efun.c.
Wird benutzt von _tarn_turn_off(), absteigen(), Loeschen(), remove(), SeherHatGenug() und stop_shadow().
01624 { 01625 funcall(#'_unshadow); 01626 "/secure/shadowmaster"->UnregisterShadow(previous_object()); 01627 }

| public void update_actions | ( | ) |
Definiert in Zeile 758 der Datei simul_efun.c.
| string upperstring | ( | string | s | ) |
Definiert in Zeile 562 der Datei simul_efun.c.
Benutzt i.
Wird benutzt von add_player(), getMatGroupId(), init() und parseText().
00563 { 00564 #if __EFUN_DEFINED__(upper_case) 00565 return(upper_case(s)); 00566 #else 00567 int i; 00568 if (!stringp(s)) return 0; 00569 for (i=strlen(s)-1;i>=0;i--) s[i]=((s[i]<'a'||s[i]>'z')?s[i]:s[i]-32); 00570 return s; 00571 #endif 00572 }

| string uptime | ( | ) |
Definiert in Zeile 723 der Datei simul_efun.c.
Wird benutzt von ChannelMessage() und udp_who().
00724 { 00725 int t; 00726 int tmp; 00727 string s; 00728 00729 t=time()-__BOOT_TIME__; 00730 s=""; 00731 if (t>=86400) 00732 s+=sprintf("%d Tag%s, ",tmp=t/86400,(tmp==1?"":"e")); 00733 if (t>=3600) 00734 s+=sprintf("%d Stunde%s, ",tmp=(t=t%86400)/3600,(tmp==1?"":"n")); 00735 if (t>60) 00736 s+=sprintf("%d Minute%s und ",tmp=(t=t%3600)/60,(tmp==1?"":"n")); 00737 return s+sprintf("%d Sekunde%s",t=t%60,(t==1?"":"n")); 00738 }

| string version | ( | ) |
Definiert in Zeile 584 der Datei simul_efun.c.
Wird benutzt von efun_version() und udp_query().

| varargs void wizlist | ( | string | name, | |
| int | sortkey | |||
| ) |
Definiert in Zeile 945 der Datei simul_efun.c.
Wird benutzt von efun_wizlist().
00945 { 00946 int i, pos, total_cmd; 00947 int *cmds; 00948 mixed *a; 00949 mixed *b; 00950 00951 if (!name) { 00952 if (this_player()) 00953 name = getuid(this_player()); 00954 if (!name) 00955 return; 00956 } 00957 00958 // Schluessel darf nur in einem gueltigen Bereich sein 00959 if (sortkey<=WL_NAME||sortkey>WL_EXTRA) sortkey=WL_COMMANDS; 00960 00961 a = transpose_array(wizlist_info()); 00962 00963 // Sortieren der Liste nach dem sortierschluessel 00964 if (sortkey==0) 00965 { 00966 a = order_alist(a); 00967 } else { 00968 cmds = a[sortkey]; 00969 a[sortkey] = a[0]; 00970 a[0] = cmds; 00971 a = order_alist(a); 00972 cmds = a[0]; 00973 a[0] = a[sortkey]; 00974 a[sortkey] = cmds; 00975 } 00976 00977 // cmds wurde missbraucht - wieder zuruecksetzen 00978 cmds = a[WL_COMMANDS]; 00979 00980 if ((pos = member(a[WL_NAME], name)) < 0 && name != "ALL") 00981 return; 00982 b = allocate(sizeof(cmds)); 00983 for (i = sizeof(cmds); i;) { 00984 b[<i] = i; 00985 total_cmd += cmds[--i]; 00986 } 00987 a = transpose_array(a + ({b}) ); 00988 if (name != "ALL") { 00989 if (pos + 18 < sizeof(cmds)) { 00990 a = a[pos-2..pos+2]+a[<15..]; 00991 } else if (pos < sizeof(cmds) - 13) { 00992 a = a[pos-2..]; 00993 } else { 00994 a = a[<15..]; 00995 } 00996 } 00997 write("\nWizard top score list\n\n"); 00998 if (total_cmd == 0) 00999 total_cmd = 1; 01000 for (i = sizeof(a); i; ) { 01001 b = a[<i--]; 01002 printf("%-20s %6d %2d%% %6s [%6dk,%6d] %6d %d\n", 01003 b[WL_NAME], b[WL_COMMANDS], b[WL_COMMANDS] * 100 / total_cmd, 01004 "("+(string)b[<1]+")", b[WL_TOTAL_COST] / 1000, 01005 b[WL_HEART_BEATS], b[WL_EXTRA], b[WL_ARRAY_TOTAL] 01006 ); 01007 } 01008 printf("\nTotal %7d (%d)\n\n", total_cmd, sizeof(cmds)); 01009 }

| mixed* wizlist_info | ( | ) |
Definiert in Zeile 937 der Datei simul_efun.c.
Wird benutzt von save_wiz_file().
00938 { 00939 if (ARCH_SECURITY || !extern_call()) 00940 return efun::wizlist_info(); 00941 return 0; 00942 }

int CallOutCount [static] |
Definiert in Zeile 1018 der Datei simul_efun.c.
int CallOutStopped = 0 [static] |
Definiert in Zeile 1017 der Datei simul_efun.c.
| string count_table |
"0112122312232334122323342334344512232334233434452334344534454556"
Definiert in Zeile 2110 der Datei simul_efun.c.
int CountMessages = 0 [static] |
Definiert in Zeile 1019 der Datei simul_efun.c.
| mixed dtime_cache = ({-1,""}) |
Definiert in Zeile 97 der Datei simul_efun.c.
Wird benutzt von dtime().
string LastMessage [static] |
Definiert in Zeile 1020 der Datei simul_efun.c.
| int process_flag |
Definiert in Zeile 773 der Datei simul_efun.c.
Wird benutzt von process_call() und process_string().
1.6.3