blob: 1b1ce2e5682c4dfbef8ffcf5f2714dc2d0d0043e [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// master.c -- master object
4//
5// $Id: master.c 7336 2009-11-19 20:37:31Z Zesstra $
6#pragma strong_types
7#pragma no_clone
8#pragma no_shadow
9#pragma no_inherit
10#pragma verbose_errors
11#pragma combine_strings
12#pragma pedantic
13#pragma range_check
14#pragma warn_deprecated
15
16#include <files.h>
17#include <wizlevels.h>
18#include <events.h>
19#include <config.h>
20#include <properties.h>
21
22protected void create() {
23 seteuid(getuid(this_object()));
24}
25
26public varargs int Delete(string plname, int nobanish, int noclone) {
27 // definitiv nur fuer EM+ und nur Objekt mit Level 66+ in der Callchain.
28 if (!ARCH_SECURITY || process_call())
29 return -1;
30
31 // existiert der Spieler?
32 if (!stringp(plname)
33 || !master()->find_userinfo(plname))
34 return -2;
35 // gibt es das Spielerobjekt?
36 object plob = find_player(plname) || find_netdead(plname);
37 // wenn kein Objekt: Dummyobjekt erzeugen
38 if (!objectp(plob) && !noclone) {
39 catch(plob = __create_player_dummy(plname));
40 }
41
42 int wlevel = query_wiz_level(plname);
43 string part_filename="/"+plname[0..0]+"/"+plname+".o";
44
45 // ggf. banishen
46 if (!nobanish && wlevel >= LEARNER_LVL)
47 master()->BanishName(plname, "So hiess mal ein Magier hier", 1);
48 else if (!nobanish && wlevel >= SEER_LVL)
49 master()->BanishName(plname, "So hiess mal ein Seher hier", 1);
50
51 // Spielpausen aufheben
52 master()->TBanishName(plname, 0);
53
54 // loggen
55 log_file("ARCH/ADMIN_USERDELETE",
56 sprintf("%s: %s geloescht durch %s (%s)\n",
57 strftime("%y%m%d-%H%M%S"),
58 plname,
59 secure_euid(),
60 to_string(query_ip_number(this_interactive())) ));
61
62
63 // Loesch-Event ausloesen
64 if (plob) {
65 EVENTD->TriggerEvent(EVT_LIB_PLAYER_DELETION, ([
66 E_PLNAME: plname,
67 E_ENVIRONMENT: environment(plob),
68 E_GUILDNAME: plob->QueryProp(P_GUILD) ]) );
69
70 // Spielerobjekt zerstoeren
71 plob->move("/room/void", M_NOCHECK);
72 plob->remove(1);
73 }
74
75 // Files loeschen
76 if (file_size("/"SECUREDIR"/save"+part_filename) > FSIZE_NOFILE)
77 rm("/"SECUREDIR"/save"+part_filename);
78 if (file_size("/"LIBSAVEDIR + part_filename) > FSIZE_NOFILE)
79 rm("/"LIBSAVEDIR + part_filename);
80 if (file_size("/"MAILDIR + part_filename) > FSIZE_NOFILE)
81 rm("/"MAILDIR + part_filename);
82
83 master()->RemoveFromCache(plname);
84
85 return 1;
86}
87