blob: 45d362561bfcc3263f256b3fb02f699771f275f6 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001inherit "std/thing";
2inherit "std/more";
3inherit "/mail/nedit";
4
5#include <properties.h>
6#include <wizlevels.h>
7#include "../haus.h"
8
9#define FAQ(f) (SPECIALPATH+"faq/"+(f))
10#define FAQUSER ({ "ryne", "toss", "sting" })
11#define IS_USER(pl) (member(FAQUSER, getuid(pl)) >= 0)
12
13static string *seite;
14static string f,*s;
15
16mapping synonym = ([]);
17
18void create()
19{
20 ::create();
21 SetProp(P_NAME,"SeherFAQ");
22 SetProp(P_GENDER,FEMALE);
23 SetProp(P_NOGET,1);
24 AddId( ({"faq","seherfaq","FAQ","SeherFAQ" }) );
25 AddCmd("lies","lesen");
26 AddCmd(({"beschreib","beschreibe"}),"beschreiben");
27 AddCmd("seiten","seiten");
28 AddCmd(({"loesch","loesche"}),"loeschen");
29 AddCmd(({"kopier","kopiere"}),"kopieren");
30 restore_object(FAQ("faq"));
31 seite = get_dir(FAQ("*"))-({".","..","faq.o"});
32}
33
34void init()
35{
36 thing::init();
37 if (this_player() && IS_USER(this_player()))
38 nedit::init_rescue();
39}
40
41string
42_query_short()
43{
44 return 0;
45}
46
47string
48_query_long()
49{
50 return 0;
51}
52
53int
54id(string str)
55{
56 return 0;
57}
58
59int
60seiten(string str)
61{
62 int i,j;
63 string *syn;
64 closure filter_ldfied;
65
66 if (!IS_USER(this_player()))
67 return 0;
68
69 if(!(i = sizeof(seite)))
70 write("Keine Seiten beschrieben!\n");
71 else {
72 filter_ldfied = lambda(({'ind,'page,'map_ldfied/*'*/}),
73 ({#'==,'page,({#'[/*]'*/,'map_ldfied,'ind})}));
74 for (str = "",i-=1;i>=0;i--) {
75 syn = m_indices(filter_indices(synonym,filter_ldfied,seite[i],synonym));
76 printf("Seite '%s' - ",seite[i]);
77 if (j=sizeof(syn)) {
78 for(j-=1;j>=0;j--)
79 printf("'%s' ",syn[j]);
80 write("\n");
81 }
82 else
83 write( "(keine Synonyme definiert)\n");
84 }
85 }
86 return 1;
87}
88
89int
90lesen(string str)
91{
92 if (!IS_USER(this_player()))
93 return 0;
94
95 if (!str || str == "") {
96 notify_fail("Was willst Du denn lesen?\n");
97 return 0;
98 }
99 str = lower_case(this_player()->_unparsed_args());
100 if (member(seite,str)<0) {
101 if (!member(synonym,str)) {
102 notify_fail("Diese Seite gibt es nicht...\n");
103 return 0;
104 }
105 else
106 str = synonym[str];
107 }
108 this_player()->More(FAQ(str),1);
109 return 1;
110}
111
112int
113beschreiben(string str)
114{
115 string faq,*desc;
116 int i;
117
118 if (!IS_USER(this_player()))
119 return 0;
120
121 if (!str || str == "") {
122 notify_fail("Was willst Du denn beschreiben?\n");
123 return 0;
124 }
125
126 str = lower_case(this_player()->_unparsed_args());
127
128 if (sscanf(str,"faq %s",str)!=1) {
129 notify_fail("Syntax: beschreibe faq <seite>\n");
130 return 0;
131 }
132 str = implode(old_explode(str," ")-({""}), " ");
133 desc = old_explode(implode(old_explode(str,", "),","),",");
134 f = 0;
135 s = 0;
136
137 for (i=sizeof(desc)-1;i>=0;i--) {
138 if (member(seite,desc[i])>=0) {
139 f = desc[i];
140 s = desc-({desc[i]});
141 break;
142 }
143 }
144 if (!f) {
145 f = desc[0];
146 s = desc[1..];
147 }
148 write("Bitte Beschreibung fuer die FAQ-Seite '"+f+"' angeben\n");
149 nedit("faq");
150 return 1;
151}
152
153static void
154faq(string str)
155{
156 int i;
157 string file;
158
159 if (!str || str == 0) {
160 write("** Abbruch! **\nNichts geaendert!\n");
161 return;
162 }
163
164 if (file_size(file=FAQ(f))>=0)
165 rm(file);
166 write_file(file, str);
167 if (member(seite,f)==-1)
168 seite += ({f});
169
170 for (i=sizeof(s)-1;i>=0;i--)
171 synonym += ([ s[i] : f ]);
172
173 save_object(FAQ("faq"));
174}
175
176int
177loeschen(string str)
178{
179 string *syn;
180 int i;
181
182 if(!IS_USER(this_player()))
183 return 0;
184
185 str = lower_case(this_player()->_unparsed_args());
186 if (!str || str == "") {
187 notify_fail("Was willst Du denn loeschen?\n");
188 return 0;
189 }
190 if (member(seite,str)>=0) {
191 syn = m_indices(filter_indices(synonym,
192 lambda(({'ind,'page,'map_ldfied/*'*/}),
193 ({#'==,'page,({#'[/*]'*/,'map_ldfied,'ind})}))
194 ,seite[i],synonym));
195 rm(FAQ(str));
196 seite -= ({str});
197 }
198 else {
199 str = implode(old_explode(str," ")-({""}), " ");
200 syn = old_explode(implode(old_explode(str,", "),","),",");
201 }
202 for (i=sizeof(syn)-1; i>=0; i--)
203 synonym = filter_indices(synonym,
204 lambda(({'key,'cmp}),
205 ({#'!=,'key,'cmp/*'*/})),
206 syn[i]);
207
208 save_object(FAQ("faq"));
209 write("OK\n");
210 return 1;
211}
212
213int
214kopieren(string str)
215{
216 string *part;
217 int i;
218
219 if (!IS_USER(this_player()))
220 return 0;
221
222 str = lower_case(this_player()->_unparsed_args());
223 part = old_explode(str," ")-({""});
224 if(sizeof(part)<4 || part[0]!="faq" || part[2] != "nach" ||
225 member(seite,part[1]) == -1) {
226 notify_fail("kopiere faq <seite> nach <alias>\n");
227 return 0;
228 }
229 str = part[1];
230 part=old_explode(implode(old_explode(implode(part[3..]," "),", "),","),",");
231 for(i=sizeof(part)-1;i>=0;i--)
232 synonym += ([ part[i] : str ]);
233 save_object(FAQ("faq"));
234 write("OK.\n");
235 return 1;
236}