destruct.c-Dateireferenz

Dieser Graph zeigt, welche Datei direkt oder indirekt diese Datei enthält:

gehe zum Quellcode dieser Datei

Funktionen

private void recursive_remove (object ob, int immediate_destruct)
protected mixed prepare_destruct (object ob)
string NotifyDestruct (object caller)

Variablen

private nosave string * deny_destruct_list

Dokumentation der Funktionen

string NotifyDestruct ( object  caller  ) 

Definiert in Zeile 108 der Datei destruct.c.

00108                                      {
00109   // Nicht jeder Magier muss den Master entsorgen koennen.
00110   if ((caller != this_object() && 
00111         funcall(symbol_function('secure_level)) < ARCH_LVL)
00112       || funcall(symbol_function('process_call)) ) {
00113     return "Du darfst den Mudlib-Master nicht zerstoeren!\n";
00114   }
00115   return 0;
00116 }

protected mixed prepare_destruct ( object  ob  ) 

Definiert in Zeile 52 der Datei destruct.c.

Benutzt deny_destruct_list, env(), IS_ARCH, item und ROOTID.

00053 {
00054   object old_env,env,item;
00055   mixed res;
00056 
00057   // zuerst das notify_destruct() rufen und ggf. abbrechen, falls ob
00058   // privilegiert ist.
00059   catch(res = (mixed)ob->NotifyDestruct(previous_object()); publish);
00060   if (res &&
00061       (getuid(ob) == ROOTID ||
00062        (IS_ARCH(ob)) ||
00063        member(deny_destruct_list, object_name(ob)) >= 0)) {
00064     if (stringp(res) && strlen(res))
00065       return res;
00066     else
00067       return sprintf("%O verweigert die Zerstoerung mittels destruct(). "
00068           "Fehlende Rechte von %O?\n",ob, previous_object());
00069   }
00070   
00071 //TODO: Mit Reboot entfernen.
00072 #if __BOOT_TIME__ < 1234212788
00073   // Lichtsystem mit der aenderung versorgen. :-/
00074   foreach(env : all_environment(ob) || ({})) {
00075       // Ja. Man ruft die _set_xxx()-Funktionen eigentlich nicht direkt auf.
00076       // Aber das Lichtsystem ist schon *so* rechenintensiv und gerade der
00077       // P_LAST_CONTENT_CHANGE-Cache wird *so* oft benoetigt, dass es mir
00078       // da um jedes bisschen Rechenzeit geht.
00079       // Der Zweck heiligt ja bekanntlich die Mittel. ;-)
00080       //
00081       // Tiamak
00082       env->_set_last_content_change();
00083   }
00084 #endif
00085   env = environment(ob);
00086 
00087   // Objekt hat kein Env: Alles zerstoeren, Spieler ins Void
00088   if (!env) {
00089     filter(all_inventory(ob), #'recursive_remove, 1);
00090   }
00091   else {
00092     // Ansonsten alles ins Environment 
00093     foreach(item : all_inventory(ob))
00094     {
00095       old_env=environment(item);
00096       // M_MOVE_ALL, falls item nen Unitobjekt ist. Sonst clonen die u.U. noch
00097       // wieder nen neues Objekt im alten Env.
00098       if(catch(item->move(env, M_NOCHECK|M_MOVE_ALL);publish))
00099         recursive_remove(item, 1);
00100       else if (item && environment(item) == old_env)
00101         recursive_remove(item, 1);
00102     }
00103   }
00104 
00105   return 0; // Erfolg
00106 }

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

private void recursive_remove ( object  ob,
int  immediate_destruct 
)

Definiert in Zeile 14 der Datei destruct.c.

Benutzt destruct(), M_NOCHECK und M_TPORT.

00014                                                                  {
00015 
00016   if (query_once_interactive(ob)) {
00017     // Spieler werden ins Void bewegt.
00018     int res;
00019     tell_object(ob, "Ploetzlich loest sich deine Welt in ihre " +
00020                   "Bestandteile auf. Zum Glueck wirst\nDu irgendwo " +
00021                   "hin geschleudert ...\n");
00022     // wenn Bewegung buggt oder nicht funktioniert und ob noch existiert,
00023     // rekursiv zerstoeren.
00024     object oldenv=environment(ob);
00025     if ( (catch(res=(int)ob->move("/room/void",M_TPORT|M_NOCHECK,0,"faellt");
00026            publish) || (ob && environment(ob) == oldenv) )
00027           && ob) {
00028             // Spieler speichern, dann erst Inventar entleeren, dann remove() und
00029         // und destruct() anwenden.
00030         catch(ob->save_me(1); publish);
00031         filter(all_inventory(ob), #'recursive_remove, immediate_destruct);
00032         if (!immediate_destruct) 
00033           catch(ob->remove(0);publish);
00034         if (ob) 
00035           destruct(ob);
00036     }
00037   }
00038   else {
00039     // kein Spieler. Rekursiv entfernen. Hierbei _zuerst_ rekursiv das
00040     // Inventar entfernen und dann ob selber, damit nicht erst das Inventar in
00041     // das Environment bewegt wird (soll ja eh zerstoert werden).
00042     filter(all_inventory(ob), #'recursive_remove, immediate_destruct);
00043     // ggf. zuerst remove versuchen
00044     if (!immediate_destruct)
00045       catch(ob->remove(1);publish);
00046     if (ob)
00047       destruct(ob);
00048   }
00049 }

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


Variablen-Dokumentation

private nosave string* deny_destruct_list
Initialisierung:
 ({
    "/obj/shut", "/room/void", "/room/netztot", "/room/jail" })

Definiert in Zeile 10 der Datei destruct.c.

Wird benutzt von prepare_destruct().

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