gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | clean_log(s) |
Funktionen | |
| private void | InitLivingData (mixed wizinfo) |
| public varargs string | getuuid (object ob) |
| void | set_object_living_name (string livname, object obj) |
| void | set_living_name (string livname) |
| void | remove_living_name () |
| void | _set_netdead () |
| void | _remove_netdead () |
| object | find_netdead (string uuid) |
| string * | dump_netdead () |
| object | find_living (string livname) |
| object * | find_livings (string livname) |
| object | find_player (string uuid) |
| static private int | check_match (string str, int players_only) |
| varargs mixed | match_living (string str, int players_only, string *exclude) |
| mixed * | dump_livings () |
| private void | clean_name_living_m (string *keys, int left, int num) |
| private void | clean_netdead () |
| private void | CleanLivingData () |
Variablen | |
| private nosave mapping | living_name_m |
| private nosave mapping | name_living_m |
| private nosave mapping | netdead |
| #define clean_log | ( | s | ) |
Definiert in Zeile 3 der Datei livings.c.
Wird benutzt von check_match(), find_living() und find_player().
| void _remove_netdead | ( | ) |
Definiert in Zeile 116 der Datei livings.c.
Benutzt m_delete() und netdead.
00117 { 00118 efun::m_delete(netdead,getuid(previous_object())); 00119 }

| void _set_netdead | ( | ) |
| static private int check_match | ( | string | str, | |
| int | players_only | |||
| ) | [static] |
Definiert in Zeile 235 der Datei livings.c.
Benutzt clean_log, m_delete() und name_living_m.
Wird benutzt von match_living().
00236 { 00237 mixed match; 00238 00239 if ( !(match = name_living_m[str]) ) 00240 return 0; 00241 00242 if ( !pointerp(match) ) 00243 match = ({ match }); 00244 00245 match -= ({0}); 00246 00247 if ( sizeof(match) ){ 00248 if ( players_only ) 00249 return sizeof(filter( match, #'query_once_interactive/*'*/ )) 00250 > 0; 00251 else 00252 return 1; 00253 } 00254 00255 efun::m_delete( name_living_m, str ); 00256 clean_log( sprintf("check_match loescht %s\n", str) ); 00257 return 0; 00258 }


| private void clean_name_living_m | ( | string * | keys, | |
| int | left, | |||
| int | num | |||
| ) |
Definiert in Zeile 298 der Datei livings.c.
Wird benutzt von CleanLivingData().
00299 { 00300 int i, j; 00301 mixed a; 00302 00303 while (left && num--) 00304 { 00305 if (pointerp(a = name_living_m[keys[--left]]) && member(a, 0)>=0) 00306 { 00307 a-=({0}); 00308 name_living_m[keys[left]] = a; 00309 } 00310 if (!a || (pointerp(a) && !sizeof(a))) 00311 { 00312 clean_log("Toasting "+keys[left]+"\n"); 00313 efun::m_delete(name_living_m, keys[left]); 00314 } else clean_log(sprintf("KEEPING %s (%O)\n",keys[left],pointerp(a)?sizeof(a):a)); 00315 } 00316 if (left) 00317 efun::call_out(#'clean_name_living_m, 1, keys, left, 80); 00318 else 00319 clean_log("Clean process finished\n"); 00320 }

| private void clean_netdead | ( | ) |
Definiert in Zeile 322 der Datei livings.c.
Benutzt i, m_delete(), netdead und ob().
00322 { 00323 int i; 00324 string *s; 00325 object ob; 00326 00327 s=m_indices(netdead); 00328 for (i=sizeof(s)-1;i>=0;i--) 00329 if (!objectp(ob=netdead[s[i]]) || interactive(ob)) 00330 efun::m_delete(netdead,s[i]); 00331 }

| private void CleanLivingData | ( | ) |
Definiert in Zeile 333 der Datei livings.c.
Benutzt clean_name_living_m() und name_living_m.
Wird benutzt von reset().
00333 { 00334 if (find_call_out(#'clean_name_living_m) < 0) { 00335 clean_log("Starting clean process\n"); 00336 efun::call_out(#'clean_name_living_m, 00337 1, 00338 m_indices(name_living_m), 00339 sizeof(name_living_m), 00340 80 00341 ); 00342 } 00343 efun::call_out(#'clean_netdead,2); 00344 }


| mixed* dump_livings | ( | ) |
Definiert in Zeile 292 der Datei livings.c.
Benutzt name_living_m.
00293 { 00294 return sort_array(m_indices(name_living_m),#'>); 00295 }
| string* dump_netdead | ( | ) |
| object find_living | ( | string | livname | ) |
Definiert in Zeile 141 der Datei livings.c.
Benutzt clean_log, i, m_delete() und name_living_m.
Wird benutzt von _at_player(), _frieden(), _trans(), _verfolge(), efun_find_living(), filter_users(), find_living_nr(), FindObj(), goto() und lv().
00141 { 00142 mixed *a, r; 00143 int i; 00144 00145 if (pointerp(r = name_living_m[livname])) { 00146 if (member(r,0)>=0) 00147 r-=({0}); 00148 if (!sizeof(r)){ 00149 efun::m_delete(name_living_m,livname); 00150 clean_log(sprintf("find_living loescht %s\n",livname)); 00151 return 0; 00152 } 00153 if ( !living(r = (a = r)[0])) { 00154 for (i = sizeof(a); --i;) { 00155 if (living(a[<i])) { 00156 r = a[<i]; 00157 a[<i] = a[0]; 00158 return a[0] = r; 00159 } 00160 } 00161 } 00162 return r; 00163 } 00164 return living(r) && r; 00165 }


| object* find_livings | ( | string | livname | ) |
Definiert in Zeile 167 der Datei livings.c.
Benutzt name_living_m.
Wird benutzt von find_living_nr().
00168 { 00169 mixed r; 00170 00171 if (pointerp(r=name_living_m[livname])) 00172 r-=({0}); 00173 else 00174 if (objectp(r)) 00175 r=({r}); 00176 if (!pointerp(r)||!sizeof(r)) 00177 return 0; 00178 return r; 00179 }

| object find_netdead | ( | string | uuid | ) |
Definiert in Zeile 121 der Datei livings.c.
Benutzt getuuid(), i und netdead.
Wird benutzt von AddSin(), Del_Quest(), find_playerob(), finger_single(), liste(), load_player_object(), new_load_player_object(), notify_player_change(), pl(), QueryPlAttacked() und Set_Quest().
00122 { 00123 int i; 00124 string uid; 00125 // Wenn sscanf() 2 liefert, ist uuid auch ne uuid. 00126 int is_uuid = sscanf(uuid, "%s_%d", uid, i) == 2; 00127 if (!is_uuid) 00128 uid = uuid; 00129 00130 if (is_uuid && getuuid(netdead[uid]) != uuid) 00131 return 0; 00132 00133 return netdead[uid]; 00134 }


| object find_player | ( | string | uuid | ) |
Definiert in Zeile 181 der Datei livings.c.
Benutzt clean_log, getuuid(), i, m_delete() und name_living_m.
Wird benutzt von _echoto(), _ping(), _verfolge(), AddSin(), advance(), ChangeLeader(), cmdline(), create(), create_wizard(), ctime(), DBG(), debug(), Del_Quest(), efun_find_player(), failed_to_deliver(), filter_users(), find_playerob(), FindObj(), finger_single(), get_carbon_copy(), get_killer_object(), gtell(), heart_beat(), info(), ListAwaited(), liste(), load_player_object(), logaccess(), message(), msg(), new_load_player_object(), notify_player_change(), notify_player_enter(), ParseRemote(), pl(), QueryPlAttacked(), renew_player(), reset(), rpeers(), rtell(), rwho(), save_msg(), seer_sequenz3(), Set_Quest(), set_user(), ShortRangeSkill(), smoke2(), smoke3(), step(), team_aufnahme(), team_aufnahmewunsch(), tell(), udp_locate(), udp_tell(), updall() und update().
00181 { 00182 object *objs; 00183 mixed res; 00184 int i; 00185 string uid; 00186 00187 if (!stringp(uuid)) 00188 return 0; 00189 // Wenn sscanf() 2 liefert, ist uuid auch ne uuid. 00190 int is_uuid = sscanf(uuid, "%s_%d", uid, i) == 2; 00191 if (!is_uuid) 00192 uid = uuid; 00193 00194 if (pointerp(res = name_living_m[uid])) { 00195 // zerstoerte Objekte ggf. entfernen 00196 if (member(res,0)>=0) { 00197 res-=({0}); 00198 name_living_m[uid] = res; 00199 } 00200 // ggf. Namen ohne Objekte entfernen. 00201 if (!sizeof(res)){ 00202 efun::m_delete(name_living_m,uid); 00203 clean_log(sprintf("find_player loescht %s\n",uid)); 00204 return 0; 00205 } 00206 objs = res; 00207 res = objs[0]; 00208 // Wenn das 0. Element der Spieler ist, sind wir fertig. Ansonsten suchen 00209 // wir den Spieler und schieben ihn an die 0. Stelle im Array. 00210 if ( !query_once_interactive(res)) { 00211 for (i = sizeof(objs); --i;) { 00212 if (objs[<i] && query_once_interactive(objs[<i])) { 00213 res = objs[<i]; 00214 objs[<i] = objs[0]; 00215 objs[0] = res; 00216 break; 00217 } 00218 } 00219 res = (objectp(res) && query_once_interactive(res)) ? res : 0; 00220 } 00221 // else: in res steht der Spieler schon. 00222 } 00223 else if (objectp(res)) // r ist nen Einzelobjekt 00224 res = query_once_interactive(res) ? res : 0; 00225 00226 // res ist jetzt ggf. der Spieler. Aber wenn der ne andere als die gesuchte 00227 // UUID hat, ist das Ergebnis trotzdem 0. 00228 if (is_uuid && getuuid(res)!=uuid) 00229 return 0; 00230 00231 // endlich gefunden 00232 return res; 00233 }

| public varargs string getuuid | ( | object | ob | ) |
Definiert in Zeile 24 der Datei livings.c.
Benutzt master.
Wird benutzt von find_netdead() und find_player().
00025 { 00026 mixed *ret; 00027 00028 if ( !objectp(ob) ) 00029 ob = previous_object(); 00030 00031 if ( !query_once_interactive(ob) ) 00032 return getuid(ob); 00033 00034 ret = (mixed)master()->get_userinfo( getuid(ob) ); 00035 00036 if ( !pointerp(ret) || sizeof(ret) < 5 ) 00037 return getuid(ob); 00038 00039 // Username + "_" + CreationDate 00040 return ret[0] + "_" + ret[5]; 00041 }

| private void InitLivingData | ( | mixed | wizinfo | ) |
Definiert in Zeile 8 der Datei livings.c.
Benutzt LIVING_NAME, living_name_m, NAME_LIVING, name_living_m, netdead und NETDEAD_MAP.
Wird benutzt von start_simul_efun().
00008 { 00009 // living_name ist ein Pointer der auch in der extra_wizinfo gehalten 00010 // wird, so kann die simul_efun neu geladen werden, ohne dass dieses 00011 // Mapping verloren geht 00012 if (!mappingp(living_name_m = wizinfo[LIVING_NAME])) 00013 living_name_m = wizinfo[LIVING_NAME] = m_allocate(0, 1); 00014 00015 // Gleiches gilt fuer das Mapping Name-Living 00016 if (!mappingp(name_living_m = wizinfo[NAME_LIVING])) 00017 name_living_m = wizinfo[NAME_LIVING] = m_allocate(0, 1); 00018 00019 // Netztote sind ebenfalls in der extra_wizinfo 00020 if (!mappingp(netdead = wizinfo[NETDEAD_MAP])) 00021 netdead = wizinfo[NETDEAD_MAP] = ([]); 00022 }

| varargs mixed match_living | ( | string | str, | |
| int | players_only, | |||
| string * | exclude | |||
| ) |
Definiert in Zeile 260 der Datei livings.c.
Benutzt check_match(), i, name_living_m und user.
Wird benutzt von _at_player(), _trans(), _verfolge(), goto(), ParseRemote(), ParseRest() und pl().
00261 { 00262 int i, s; 00263 mixed match, *user; 00264 00265 if ( !str || str == "" ) 00266 return 0; 00267 00268 if ( !pointerp(exclude) ) 00269 exclude = ({ exclude }); 00270 00271 if ( member(exclude, str) < 0 && check_match(str, players_only) ) 00272 return str; 00273 00274 user = m_indices(name_living_m); 00275 s = strlen(str); 00276 match = 0; 00277 00278 for ( i = sizeof(user); i--; ) 00279 if ( str == user[i][0..s-1] && member( exclude, user[i] ) < 0 ) 00280 if ( match ) 00281 return -1; 00282 else 00283 if ( check_match(user[i], players_only) ) 00284 match = user[i]; 00285 00286 if ( !match ) 00287 return -2; 00288 00289 return match; 00290 }


| void remove_living_name | ( | ) |
Definiert in Zeile 86 der Datei livings.c.
Benutzt living_name_m, m_delete() und name_living_m.
Wird benutzt von NetDead() und quit().
00087 { 00088 string livname; 00089 00090 if (!previous_object()) 00091 return; 00092 if (livname=living_name_m[previous_object()]) 00093 { 00094 efun::m_delete(living_name_m,previous_object()); 00095 if (objectp(name_living_m[livname])) 00096 { 00097 if (name_living_m[livname]==previous_object()) 00098 efun::m_delete(name_living_m,livname); 00099 return; 00100 } 00101 if (pointerp(name_living_m[livname])) 00102 { 00103 name_living_m[livname]-=({previous_object()}); 00104 if (!sizeof(name_living_m[livname])) 00105 efun::m_delete(name_living_m,livname); 00106 } 00107 } 00108 }


| void set_living_name | ( | string | livname | ) |
Definiert in Zeile 81 der Datei livings.c.
Benutzt set_object_living_name().
Wird benutzt von _set_name(), create() und efun_set_living_name().
00082 { 00083 set_object_living_name(livname,previous_object()); 00084 }


| void set_object_living_name | ( | string | livname, | |
| object | obj | |||
| ) |
Definiert in Zeile 43 der Datei livings.c.
Benutzt i, living_name_m, m_delete(), master und name_living_m.
Wird benutzt von set_living_name().
00044 { 00045 string old; 00046 mixed a; 00047 int i; 00048 00049 if (previous_object()==obj || previous_object()==this_object() || 00050 previous_object()==master()) 00051 { 00052 if(!livname || !stringp(livname)) { 00053 set_this_object(previous_object()); 00054 raise_error(sprintf("%O: illegal living name: %O\n", obj, livname)); 00055 } 00056 if (old = living_name_m[obj]) { 00057 if (pointerp(a = name_living_m[old])) { 00058 a[member(a, obj)] = 0; 00059 } else { 00060 efun::m_delete(name_living_m, old); 00061 } 00062 } 00063 living_name_m[obj] = livname; 00064 if (a = name_living_m[livname]) { 00065 if (!pointerp(a)) { 00066 name_living_m[livname] = ({a, obj}); 00067 return; 00068 } 00069 /* Try to reallocate entry from destructed object */ 00070 if ((i = member(a, 0)) >= 0) { 00071 a[i] = obj; 00072 return; 00073 } 00074 name_living_m[livname] = a + ({obj}); 00075 return; 00076 } 00077 name_living_m[livname] = obj; 00078 } 00079 }


| private nosave mapping living_name_m |
Definiert in Zeile 6 der Datei livings.c.
Wird benutzt von InitLivingData(), remove_living_name() und set_object_living_name().
| private nosave mapping name_living_m |
Definiert in Zeile 6 der Datei livings.c.
Wird benutzt von check_match(), CleanLivingData(), dump_livings(), find_living(), find_livings(), find_player(), InitLivingData(), match_living(), remove_living_name() und set_object_living_name().
| private nosave mapping netdead |
Definiert in Zeile 6 der Datei livings.c.
Wird benutzt von _remove_netdead(), _set_netdead(), clean_netdead(), dump_netdead(), find_netdead(), heart_beat(), InitLivingData() und PresentEnemies().
1.6.3