/*
/secure/master/create_dom_creator.c
Originally bashed at Final Realms
Fixed and tweaked by Radix : March 5, 1997
*/
#define POSTAL_D "/obj/handlers/postal_d"
int create_creator(string);
int create_domain(string, string);
int demote_creator(string);
int create_domain(string name, string lord)
{
string file;
if(this_player() != this_player(1) || !this_player()->query_god())
{
tell_object(this_player(),"You must be a god to create a "
"new domain.\n");
return 0;
}
if(high_programmer(capitalize(name)))
{
tell_object(this_player(), "Invalid name....\n");
return 0;
}
if(file_size("/d/"+name) != -1)
{
tell_object(this_player(),"Domain already exists (or invalid).\n");
return 0;
}
if(sizeof(explode(name, "/")) > 1)
{
tell_object(this_player(),"Invalid to have a / in the "
"domain name.\n");
return 0;
}
if(!"/secure/login"->test_creator(lord))
{
tell_object(this_player(),"The lord must exist and be a "
"creator.\n");
return 0;
}
mkdir("/d/"+name);
file = read_file("/std/dom/master.c");
write_file("/d/"+name+"/master.c", "#define DOM_LORD \""+lord+"\"\n");
write_file("/d/"+name+"/master.c", "#define DOMAIN \""+name+"\"\n");
write_file("/d/"+name+"/master.c", file);
file = read_file("/std/dom/common.c");
write_file("/d/"+name+"/common.c",
"#define DOM_TITLE \"the domain of "+name+"\"\n");
write_file("/d/"+name+"/common.c", "#define DOM_LORD \""+lord+"\"\n");
write_file("/d/"+name+"/common.c", "#define DOMAIN \""+name+"\"\n");
write_file("/d/"+name+"/common.c", file);
file = read_file("/std/dom/loader.c");
write_file("/d/"+name+"/loader.c", "#define DOMAIN \""+name+"\"\n");
write_file("/d/"+name+"/loader.c", file);
save_object("/secure/master",1);
write("Created domain "+name+".\n");
log_file("PROMOTIONS", "Domain "+name+" created with a lord of "+lord+
" by "+geteuid(previous_object())+"\n");
return 1;
}
int create_creator(string name)
{
string file;
seteuid("Root");
if(!query_lord(geteuid(previous_object())))
return 0;
if(!"/secure/login"->test_user(name))
return 0;
if(file_size("/w/"+name) != -1)
{
write("Directory already exists or invalid.\n");
return 0;
}
mkdir("/w/"+name);
file = read_file("/std/creator/workroom.c");
write_file("/w/"+name+"/workroom.c", "#define CREATOR \""+name+"\"\n");
write_file("/w/"+name+"/workroom.c", file);
file = read_file("/std/creator/workroom2.c");
write_file("/w/"+name+"/workroom2.c", "#define CREATOR \""+name+"\"\n");
write_file("/w/"+name+"/workroom2.c", file);
log_file("PROMOTIONS", name+" promoted to creator by "+
geteuid(previous_object())+"\n");
write("Creator "+name+" promoted.\n");
if(find_player(name))
{
find_player(name)->set_creator(1);
find_player(name)->save();
tell_object(find_player(name), "You have been promoted to "
"creator by "+capitalize(geteuid(previous_object()))+".\n");
}
else
write_file("/players/"+name[0..0]+"/"+name+".o","creator 1\n");
return 1;
}
int demote_creator(string str)
{
string name, reason;
if(!query_lord(geteuid(previous_object())))
return 0;
if(sscanf(str, "%s %s", name, reason) != 2)
{
notify_fail("Usage: demote <creator> <reason>\n");
return 0;
}
if(!"/secure/login"->test_creator(name))
return 0;
if(query_lord(name))
{
notify_fail("Lords can not be demoted.\n");
return 0;
}
write_file("/log/DEMOTE", name+" demoted by "+
previous_object()->query_cap_name()+" at "+ctime(time())+
"\nReason: "+reason+"\n");
if(find_player(name))
{
find_player(name)->set_creator(0);
find_player(name)->save();
tell_object(find_player(name), "You have just been demoted by "+
capitalize(previous_object()->query_cap_name())+".\n");
find_player(name)->really_quit();
}
write_file("/players/"+name[0..0]+"/"+name+".o","creator 0\n");
rename("/w/"+name,"/w/oldcreators/"+name);
rename("/players/"+name[0..0]+"/"+name+".o","/w/oldcreators/"+name);
write("Creator "+capitalize(name)+" demoted.\n");
write("Removing their mail...");
POSTAL_D->retire_user(name);
write("Done.\n");
write_file("/w/oldcreators/"+name+"/DEMOTED",
capitalize(name)+" demoted by "+
previous_object()->query_cap_name()+" : "+ctime(time())+
"\nReason: "+reason+"\n\n");
return 1;
}