blob: b73378db0048816bf21bba8076148ba3eef6eeef [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// master/domain.c -- Regionen und Regionsmagier
4//
5// $Id: domain.c 7162 2009-02-26 21:14:43Z Zesstra $
6
MG Mud User88f12472016-06-24 23:31:02 +02007int domain_master(string user, string domain)
8{
9 string *domains;
10 int i;
Zesstracd25d262020-01-21 19:36:39 +010011
MG Mud User88f12472016-06-24 23:31:02 +020012 if (!find_userinfo(user)||
Zesstracd25d262020-01-21 19:36:39 +010013 !pointerp(domains=query_userlist(user, USER_DOMAIN)))
MG Mud User88f12472016-06-24 23:31:02 +020014 return 0;
15 return (member(domains,domain) != -1);
16}
17
18int domain_member(string user, string domain)
19{
20 if (domain=="erzmagier") return 0;
21 return (IS_DOMAINMEMBER(user)&&file_size("/d/"+domain+"/"+user)==-2);
22}
23
24int add_domain_master(string user,string dom)
25{
26 string *domains;
27
bugfixd94d0932020-04-08 11:27:13 +020028 if ((({int})call_other(SIMUL_EFUN_FILE, "process_call") ||
29 ({int})call_other(SIMUL_EFUN_FILE, "secure_level") < GOD_LVL) ||
MG Mud User88f12472016-06-24 23:31:02 +020030 !find_userinfo(user))
31 return 0;
Zesstracd25d262020-01-21 19:36:39 +010032 domains=query_userlist(user, USER_DOMAIN);
MG Mud User88f12472016-06-24 23:31:02 +020033 if (!domains)
34 set_domains(user,({dom}));
35 else
36 {
37 // Doppelte Eintraege vermeiden
38 domains=domains-({dom})+({dom});
39 set_domains(user, domains);
40 }
41 if (get_wiz_level(user) < LORD_LVL+5) {
42 update_wiz_level(user,LORD_LVL+5);
43 SendWizardHelpMail(user, LORD_LVL+5);
44 }
45 return 1;
46}
47
48int remove_domain_master(string user,string dom)
49{
50 string *domains;
51
52 if (!IS_GOD(geteuid(previous_object()))
53 ||!find_userinfo(user)
Zesstracd25d262020-01-21 19:36:39 +010054 ||!(domains=query_userlist(user, USER_DOMAIN))
MG Mud User88f12472016-06-24 23:31:02 +020055 || member(domains,dom)==-1)
56 return 0;
57 domains-=({dom});
58 set_domains(user,domains);
59 return 1;
60}
61
62string *get_domains() {
63 string *regions=({});
64 // alle Verzeichnisse in /d/ ermitteln
65 foreach(string region: (get_dir("/"DOMAINDIR"/*")
66 || ({}))-({".","..","erzmagier"})) {
67 if (region[0]!='.' && file_size("/d/"+region) == FSIZE_DIR)
68 //Verzeichnis, kein File und faengt nicht mit "." an: aufnehmen.
69 regions+=({region});
70 }
71 return regions;
72}
73
74// in welchen Regionen hat 'wiz' ein Verzeichnis?
75string *get_domain_homes(string wiz)
76{
77 string *homes=({});
78 string tmp;
79
80 if (query_wiz_level(wiz)<=WIZARD_LVL) return ({});
81
82 tmp = "/d/%s/"+wiz;
83 foreach(string dir: get_domains()) {
84 if (dir[0]!='.' && file_size(sprintf(tmp,dir)) == FSIZE_DIR)
85 //Magierverzeichnis da und faengt nicht mit "." an: aufnehmen.
86 homes+=({dir});
87 }
88 return homes;
89}
90