livings.c-Dateireferenz

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

Makro-Dokumentation

#define clean_log (  ) 

Definiert in Zeile 3 der Datei livings.c.

Wird benutzt von check_match(), find_living() und find_player().


Dokumentation der Funktionen

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 }

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

void _set_netdead (  ) 

Definiert in Zeile 110 der Datei livings.c.

Benutzt netdead.

Wird benutzt von NetDead().

00111 {
00112   if (query_once_interactive(previous_object()))
00113     netdead[getuid(previous_object())]=previous_object();
00114 }

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

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 }

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

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

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 }

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

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 }

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

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 }

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

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

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 (  ) 

Definiert in Zeile 136 der Datei livings.c.

Benutzt netdead.

00137 {
00138   return m_indices(netdead);
00139 }

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 }

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

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

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 }

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

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 }

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

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

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 }

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

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 }

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

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 }

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

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 }

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

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

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 }

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

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

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 }

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

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

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 }

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

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


Variablen-Dokumentation

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
private nosave mapping netdead
Erzeugt am Thu Jun 3 14:41:50 2010 für MorgenGrauen Mudlib von  doxygen 1.6.3