blob: 1b1ce2e5682c4dfbef8ffcf5f2714dc2d0d0043e [file] [log] [blame]
// MorgenGrauen MUDlib
//
// master.c -- master object
//
// $Id: master.c 7336 2009-11-19 20:37:31Z Zesstra $
#pragma strong_types
#pragma no_clone
#pragma no_shadow
#pragma no_inherit
#pragma verbose_errors
#pragma combine_strings
#pragma pedantic
#pragma range_check
#pragma warn_deprecated
#include <files.h>
#include <wizlevels.h>
#include <events.h>
#include <config.h>
#include <properties.h>
protected void create() {
seteuid(getuid(this_object()));
}
public varargs int Delete(string plname, int nobanish, int noclone) {
// definitiv nur fuer EM+ und nur Objekt mit Level 66+ in der Callchain.
if (!ARCH_SECURITY || process_call())
return -1;
// existiert der Spieler?
if (!stringp(plname)
|| !master()->find_userinfo(plname))
return -2;
// gibt es das Spielerobjekt?
object plob = find_player(plname) || find_netdead(plname);
// wenn kein Objekt: Dummyobjekt erzeugen
if (!objectp(plob) && !noclone) {
catch(plob = __create_player_dummy(plname));
}
int wlevel = query_wiz_level(plname);
string part_filename="/"+plname[0..0]+"/"+plname+".o";
// ggf. banishen
if (!nobanish && wlevel >= LEARNER_LVL)
master()->BanishName(plname, "So hiess mal ein Magier hier", 1);
else if (!nobanish && wlevel >= SEER_LVL)
master()->BanishName(plname, "So hiess mal ein Seher hier", 1);
// Spielpausen aufheben
master()->TBanishName(plname, 0);
// loggen
log_file("ARCH/ADMIN_USERDELETE",
sprintf("%s: %s geloescht durch %s (%s)\n",
strftime("%y%m%d-%H%M%S"),
plname,
secure_euid(),
to_string(query_ip_number(this_interactive())) ));
// Loesch-Event ausloesen
if (plob) {
EVENTD->TriggerEvent(EVT_LIB_PLAYER_DELETION, ([
E_PLNAME: plname,
E_ENVIRONMENT: environment(plob),
E_GUILDNAME: plob->QueryProp(P_GUILD) ]) );
// Spielerobjekt zerstoeren
plob->move("/room/void", M_NOCHECK);
plob->remove(1);
}
// Files loeschen
if (file_size("/"SECUREDIR"/save"+part_filename) > FSIZE_NOFILE)
rm("/"SECUREDIR"/save"+part_filename);
if (file_size("/"LIBSAVEDIR + part_filename) > FSIZE_NOFILE)
rm("/"LIBSAVEDIR + part_filename);
if (file_size("/"MAILDIR + part_filename) > FSIZE_NOFILE)
rm("/"MAILDIR + part_filename);
master()->RemoveFromCache(plname);
return 1;
}