blob: a3c9c29474e741d5a5b3b992eb87994b65751330 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// Dieses Ding kriegt die UID vom Clonenden.
Zesstradc1db1f2017-06-20 22:08:56 +02002// Spielerladen duerfen nur Objekte, welche die gleiche UID wie der Cloner
3// (also dieses Objekt) haben.
MG Mud User88f12472016-06-24 23:31:02 +02004// 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();
Zesstradc1db1f2017-06-20 22:08:56 +020020 seteuid(getuid());
MG Mud User88f12472016-06-24 23:31:02 +020021 set_next_reset(300);
22}
23
24public int ReleasePlayer()
25{
26 pl = 0;
27 user = 0;
MG Mud User88f12472016-06-24 23:31:02 +020028 return 1;
29}
30
31public int LoadPlayer(string name)
32{
Zesstradc1db1f2017-06-20 22:08:56 +020033 // Es duerfen nur Objekte mit der gleichen UID wie wir diesen Clone
34 // benutzen! Ansonsten koennten z.B. nicht-ROOT-Objekte einen von einem
35 // ROOT-Objekt erzeugten Clone hiervon nutzen und alles lesen...
36 if (!previous_object()
37 || getuid(previous_object()) != getuid(this_object()))
38 return 0;
MG Mud User88f12472016-06-24 23:31:02 +020039 if (query_wiz_level(getuid(previous_object())) < WIZARD_LVL)
40 return 0;
41
MG Mud User88f12472016-06-24 23:31:02 +020042 mixed userinfo=MASTER->get_userinfo(name);
43 if (!pointerp(userinfo))
44 return 0;
45 // Wenn es das Spielerobjekt gibt, ist alles gut, dann fragen wir einfach
46 // das.
47 pl = find_player(name) || find_netdead(name);
48 if (!pl)
49 {
50 // wenn nicht: Savefile einlesen.
Zesstraf3f22662017-01-30 15:54:29 +010051 restore_object(SAVEPATH + name[0..0] + "/" + name);
MG Mud User88f12472016-06-24 23:31:02 +020052 pl = name;
53 }
54 user = previous_object();
55 set_next_reset(300);
56 return 1;
57}
58
59public varargs mixed Query( string name, int Type )
60{
61 if (!user || user != previous_object())
62 return 0;
63
64 if (objectp(pl))
65 return pl->Query(name,Type);
66 else if (stringp(pl))
67 return ::Query(name, Type);
68 return 0;
69}
70
71public varargs mixed QueryProp( string name )
72{
73 if (!user || user != previous_object())
74 return 0;
75
76 if (objectp(pl))
77 return pl->QueryProp(name);
78 else if (stringp(pl))
79 return ::QueryProp(name);
80 return 0;
81}
82
83
84// kein Schreibzugriff
85public varargs mixed Set( string name, mixed Value, int Type, int extern )
86{
87 return 0;
88}
89
90public void reset()
91{
92 if (clonep(this_object()))
93 destruct(this_object());
94}
95
96public int clean_up(int ref)
97{
98 if (clonep(this_object())
99 || ref <= 1 )
100 {
101 destruct(this_object());
102 }
103 return 1;
104}
105