blob: f4146b2eebb3a4ece526859221899053e5cd24b6 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001/* Dieses Objekt dient zum Faken von Namen fuer den Channeld.
2 * Hintergrund: der Channeld braucht beim send() ein Objekt (bzw. die in der
3 * Verarbeitung dann folgenden Programme). Der Mudlibmaster sendet Meldung in
4 * anderer Leute Namen (der darf das auch). Dafuer clont und konfiguriert er
5 * dieses Objekt und uebergibt es an den channeld. Nach 3s raeumen sich Clone
6 * dieses Objektes wieder auf.
7 * Falls der Spieler/NPC existiert, wenn die meldung gesendet wird, wird vom
8 * Master das richtige Objekt uebergeben, nicht dieses hier.
9 */
10
11#include <config.h>
12#include <wizlevels.h>
13
14inherit "/std/secure_thing";
15
16// Envcheck-Mechanismus missbrauchen. ;-)
17protected void check_for_environment(string cloner)
18{
19 if (clonep(this_object()))
20 remove(1);
21}
22
23// Zur Sicherheit auch im Reset
24void reset()
25{
26 if (clonep(this_object()))
27 remove(1);
28}
29
30// Kopie aus /std/thing/properties.c. Man braucht davon wohl kein
31// zugaengliches in jedem thing...
32// Welche externen Objekte duerfen zugreifen?
33nomask private int allowed()
34{
35 if ( (previous_object() && IS_ARCH(getuid(previous_object())) &&
36 this_interactive() && IS_ARCH(this_interactive())) ||
37 (previous_object() && getuid(previous_object()) == ROOTID &&
38 geteuid(previous_object()) == ROOTID) )
39 return 1;
40 return 0;
41}
42
43// Sollte nur von ROOT oder EM+ manipuliert werden.
44// Sprich, das tut so, als seien alle Props SECURED
45public varargs mixed Set( string name, mixed value, int type, int extern )
46{
47 if ((extern || extern_call())
48 && previous_object() != this_object()
49 && !allowed()) // aus thing/properties.c
50 return -1;
51
52 return ::Set(name, value, type, extern);
53}
54