blob: 7e05245058921e10ce0eb9bab8636200432499f0 [file] [log] [blame]
/** Letzte Aenderung:
// 01.04.2008 - Objekte des VC werden jetzt im memory gespeichert
// - Kleinere Aenderungen im Code.
// 01.01.2007 - Grundlegende Ueberarbeitung, Vanion
// - Verwaltung der Objekte in einer Liste
// Dadurch kann ls die VC-Objekte darstellen
// - Genauere Ueberpruefung der Dateinamen auf
// Korrektheit. Falls ein illegaler Zugriff
// stattfindet, wirds geloggt.
//
*/
#pragma strict_types
#pragma no_clone
#pragma no_shadow
#pragma no_inherit
#pragma verbose_errors
#pragma combine_strings
//#pragma pedantic
#pragma warn_deprecated
#include "haus.h"
#include <thing/properties.h>
#include <wizlevels.h>
#define MEMORY "/secure/memory"
private nosave mapping objects;
private nosave int show_clone_list;
/**
Initialisierung
*/
void create()
{
seteuid(getuid());
// Zeiger auf Cloneliste holen
if (call_other(MEMORY,"HaveRights")) {
// Objektpointer laden
objects = call_other(MEMORY,"Load","objects");
// Hats geklappt?
if (!mappingp(objects))
// vermutlich noch nicht initialisiert.
// Zeiger erzeugen
objects = ([]);
call_other(MEMORY,"Save","objects",objects); // Und in den Memory schreiben
} else {
// Wenn ich keinen Zeiger habe, muss ich halt einen lokalen nehmen.
objects = ([]);
}
show_clone_list = 0;
}
/**
Die Funktion wird vom GameDriver aufgerufen. Wenn die Namen-
konventionen passen, erzeugt compile_object ein passendes Objekt
und gibt es zurueck
\param name Name des zu ladenden Objekts
\return Das geladene und initialisierte Objekt
*/
object compile_object(string name)
{
object ob;
if (name[<6..<3] == "haus" )
{
ob = ({object})(VERWALTER)->_LadeHaus(name[0..<7]);
}
else if (name[<7..<4] == "raum" )
{
ob = ({object})(VERWALTER)->_LadeRaum(name[0..<8], to_int(name[<3..<3]));
}
else
{
log_file("seher/haeuser/vc_load_error",
dtime(time())+"\n Falscher Objektname: "+name+"\n"+
" PO: "+object_name(previous_object(1))+",\n"+
" PPO: "+object_name(previous_object(2))+",\n"+
" TI: "+object_name(this_interactive())+".\n\n");
return 0;
}
// Objekt speichern (fuer ls)
if (objectp(ob)) objects[name] = ob;
return ob;
}
/**
Soll die Liste der Objekte zum VC per QueryObjects ausgegeben werden oder nicht?
*/
void ToggleCloneList()
{
show_clone_list ^= 1;
tell_object(this_player(), "Die Clone List wird nun "+
(show_clone_list?"":"nicht mehr ")+"angezeigt.\n");
}
/**
return all cloned virtual objects, wird zum Beispiel fuer "ls" benutzt.
*/
mixed QueryObjects()
{
if (show_clone_list)
return m_values(objects)-({0});
else
return ({});
}
/**
Nur EM und Maintainer duerfen die sicheren Funktionen nutzen
*/
int secure()
{
if (ARCH_SECURITY || IS_MAINTAINER(this_interactive()))
return 1;
else
return 0;
}
/*
/**
Die Funktion versucht, die Clones dieses VCs aus der Objekt List
zu regenerieren
*/
/*
int regenerate_clone_list()
{
if (sizeof(objects)==0)
HDEBUG("Tbd: regenerate_clone_list im vc");
return 1;
}
*/
/**
Die Funktion zerstoert alle bereits geclonten Seherhausobjekte
Das gibt wirklich nur irre wenige Momente, wo das nicht schlecht ist.
*/
int desctruct_all_my_clones()
{
mixed ob;
if (!secure()) return 0;
if(!mappingp(objects)) return 0;
for(ob = QueryObjects(); sizeof(ob); ob = ob[1..])
{
if(objectp(ob[0]))
{
ob[0]->remove();
if(objectp(ob[0])) destruct(ob[0]);
}
}
return 1;
}