blob: d5d1ab82b0715d257b98484fe848bf84a66bb157 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001/** Letzte Aenderung:
2// 01.04.2008 - Objekte des VC werden jetzt im memory gespeichert
3// - Kleinere Aenderungen im Code.
4// 01.01.2007 - Grundlegende Ueberarbeitung, Vanion
5// - Verwaltung der Objekte in einer Liste
6// Dadurch kann ls die VC-Objekte darstellen
7// - Genauere Ueberpruefung der Dateinamen auf
8// Korrektheit. Falls ein illegaler Zugriff
9// stattfindet, wirds geloggt.
10//
11*/
12
13#pragma strict_types
14#pragma no_clone
15#pragma no_shadow
16#pragma no_inherit
17#pragma verbose_errors
18#pragma combine_strings
19#pragma pedantic
20#pragma warn_deprecated
21
22#include "haus.h"
23#include <thing/properties.h>
24#include <wizlevels.h>
25
26#define MEMORY "/secure/memory"
27
28private nosave mapping objects;
29private nosave int show_clone_list;
30
31/**
32 Initialisierung
33*/
34void create()
35{
36 seteuid(getuid());
37
38 // Zeiger auf Cloneliste holen
39 if (call_other(MEMORY,"HaveRights")) {
40 // Objektpointer laden
41 objects = (mixed) call_other(MEMORY,"Load","objects");
42
43 // Hats geklappt?
44 if (!mappingp(objects))
45 // vermutlich noch nicht initialisiert.
46 // Zeiger erzeugen
47 objects = ([]);
48 call_other(MEMORY,"Save","objects",objects); // Und in den Memory schreiben
49 } else {
50 // Wenn ich keinen Zeiger habe, muss ich halt einen lokalen nehmen.
51
52 objects = ([]);
53 }
54
55 show_clone_list = 0;
56}
57
58/**
59 Die Funktion wird vom GameDriver aufgerufen. Wenn die Namen-
60 konventionen passen, erzeugt compile_object ein passendes Objekt
61 und gibt es zurueck
62 \param name Name des zu ladenden Objekts
63 \return Das geladene und initialisierte Objekt
64*/
65object compile_object(string name)
66{
67 object ob;
68
69 if (name[<6..<3] == "haus" )
70 {
71 ob = (object) (VERWALTER)->_LadeHaus(name[0..<7]);
72 }
73 else if (name[<7..<4] == "raum" )
74 {
75 ob = (object) (VERWALTER)->_LadeRaum(name[0..<8], to_int(name[<3..<3]));
76 }
77 else
78 {
79 log_file("seher/haeuser/vc_load_error",
80 dtime(time())+"\n Falscher Objektname: "+name+"\n"+
81 " PO: "+object_name(previous_object(1))+",\n"+
82 " PPO: "+object_name(previous_object(2))+",\n"+
83 " TI: "+object_name(this_interactive())+".\n\n");
84 return 0;
85 }
86
87 // Objekt speichern (fuer ls)
88 if (objectp(ob)) objects[name] = ob;
89
90 return ob;
91}
92
93/**
94 Soll die Liste der Objekte zum VC per QueryObjects ausgegeben werden oder nicht?
95*/
96
97int ToggleCloneList()
98{
99 show_clone_list ^= 1;
100 tell_object(this_player(), "Die Clone List wird nun "+
101 (show_clone_list?"":"nicht mehr ")+"angezeigt.\n");
102}
103
104/**
105 return all cloned virtual objects, wird zum Beispiel fuer "ls" benutzt.
106*/
107mixed QueryObjects()
108{
109 if (show_clone_list)
110 return m_values(objects)-({0});
111 else
112 return ({});
113}
114
115/**
116 Nur EM und Maintainer duerfen die sicheren Funktionen nutzen
117*/
118int secure()
119{
120 if (ARCH_SECURITY || IS_MAINTAINER(this_interactive()))
121 return 1;
122 else
123 return 0;
124}
125
126/*
127/**
128 Die Funktion versucht, die Clones dieses VCs aus der Objekt List
129 zu regenerieren
130*/
131/*
132int regenerate_clone_list()
133{
134 if (sizeof(objects)==0)
135 HDEBUG("Tbd: regenerate_clone_list im vc");
136
137 return 1;
138}
139*/
140
141/**
142 Die Funktion zerstoert alle bereits geclonten Seherhausobjekte
143 Das gibt wirklich nur irre wenige Momente, wo das nicht schlecht ist.
144*/
145int desctruct_all_my_clones()
146{
147 mixed ob;
148
149 if (!secure()) return 0;
150
151 if(!mappingp(objects)) return 0;
152
153 for(ob = QueryObjects(); sizeof(ob); ob = ob[1..])
154 {
155 if(objectp(ob[0]))
156 {
157 ob[0]->remove();
158 if(objectp(ob[0])) destruct(ob[0]);
159 }
160 }
161
162 return 1;
163}
164