blob: 0e2729bf98830247c6dd18d6286720880ef008c7 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// Dieses Ding kriegt die UID vom Clonenden.
2// Der Master exportiert allerdings per export_uid() ggf. eine UID an dieses
3// Objekt.
4// Abfragen kann es nur das Objekt, welches den Spieler geladen hat.
5
6#pragma no_inherit,no_shadow
7#pragma strong_types,save_types,rtt_checks
8
9#include <config.h>
10#include <wizlevels.h>
11
12inherit "/std/thing/properties";
13
14object|string pl;
15object user;
16
17protected void create()
18{
19 ::create();
20 seteuid(0);
21 set_next_reset(300);
22}
23
24public int ReleasePlayer()
25{
26 pl = 0;
27 user = 0;
28 // Das Objekt darf keine EUID mehr haben, damit ROOT-Objekte ihm ggf. eine
29 // neue UID exportieren koennen, damit es einen neuen Spieler laden kann.
30 seteuid(0);
31 return 1;
32}
33
34public int LoadPlayer(string name)
35{
36 if (query_wiz_level(getuid(previous_object())) < WIZARD_LVL)
37 return 0;
38
39 seteuid(getuid());
40
41 mixed userinfo=MASTER->get_userinfo(name);
42 if (!pointerp(userinfo))
43 return 0;
44 // Wenn es das Spielerobjekt gibt, ist alles gut, dann fragen wir einfach
45 // das.
46 pl = find_player(name) || find_netdead(name);
47 if (!pl)
48 {
49 // wenn nicht: Savefile einlesen.
50 restore_object("/"SAVEPATH + name[0..0] + "/" + name);
51 pl = name;
52 }
53 user = previous_object();
54 set_next_reset(300);
55 return 1;
56}
57
58public varargs mixed Query( string name, int Type )
59{
60 if (!user || user != previous_object())
61 return 0;
62
63 if (objectp(pl))
64 return pl->Query(name,Type);
65 else if (stringp(pl))
66 return ::Query(name, Type);
67 return 0;
68}
69
70public varargs mixed QueryProp( string name )
71{
72 if (!user || user != previous_object())
73 return 0;
74
75 if (objectp(pl))
76 return pl->QueryProp(name);
77 else if (stringp(pl))
78 return ::QueryProp(name);
79 return 0;
80}
81
82
83// kein Schreibzugriff
84public varargs mixed Set( string name, mixed Value, int Type, int extern )
85{
86 return 0;
87}
88
89public void reset()
90{
91 if (clonep(this_object()))
92 destruct(this_object());
93}
94
95public int clean_up(int ref)
96{
97 if (clonep(this_object())
98 || ref <= 1 )
99 {
100 destruct(this_object());
101 }
102 return 1;
103}
104