blob: daaf394f98217f0660f5f97361d5b2d125cdb3a0 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001/*
2 * The new ultimate quest administration tool
3 */
4
5/* AENDERUNGEN
6 * 2006-09-29 : Zook
7 * Questtool an neue Felder "Attribute" und "Klasse"
8 * angepasst.
9 * 2000-11-18 : Zook:
10 * Questtool um neues Feld "Wartender Magier" des Questmaster
11 * erweitert.
12 * 2000-11-18 : Zook:
13 * Questtool um neues Feld "Gruppeneinordnung" des Questmaster
14 * erweitert.
15 */
16
Zesstrad39f73d2018-11-09 00:01:15 +010017inherit "/std/secure_thing";
18inherit "/std/more";
MG Mud User88f12472016-06-24 23:31:02 +020019
20#include <defines.h>
21#include <properties.h>
22#include <language.h>
23#include <wizlevels.h>
24#include "/secure/questmaster.h"
25
26#define UA this_interactive()->_unparsed_args()
27
28#define QNAME 0
29#define QP 1
30#define XP 2
31#define ALLOW 3
32#define INFO 4
33#define LEVEL 5
34#define CLASS 6
35#define ATTR 7
36#define WIZ 8
37#define SCNDWIZ 9
38#define END 10
39
40#pragma strong_types
41
42private void Load_NumKey();
43int Add_Quest ( string str );
44void ReadNewQuest ( string str );
45int Remove_Quest ( string str );
46int Change_Quest ( string str );
47int Restore_Quest ( string str );
48int Set_Quest ( string str );
49int Remove_Quest ( string str );
50int Query_Quest ( string str );
51int Query_Keys ( string str );
52int Query_Quests ( string str );
53int ActivateQuest ( string str );
54int DeactivateQuest ( string str );
55int GetReturn ( string str );
56
57string name;
58int qp;
59int xp;
60int level;
61int need;
62string *allowed;
63string info;
64string wizard;
65string scndwizard;
66int group;
67mapping num_key;
68
69object owner;
70int counter;
71mixed *savequest;
72string savekey;
73int do_change;
74string changekey;
75
76void create()
77{
78 string str;
79
80 if(IS_BLUE(ME)) return;
Zesstrac7bf1fb2018-11-09 00:46:55 +010081 secure_thing::create();
MG Mud User88f12472016-06-24 23:31:02 +020082 SetProp(P_GENDER,NEUTER);
83 owner = PL;
84 AddId("questtool");
85 AddId("qt");
86 SetProp(P_ARTICLE,0);
87 SetProp(P_GENDER, NEUTER);
88 str=capitalize(((str=owner->query_real_name())[<1]=='s'||str[<1]=='x'||str[<1]=='z')?str+="'":str+="s");
89 SetProp(P_NAME, str+" QuestTool");
90 SetProp(P_SHORT, str+" QuestTool");
91 SetProp(P_LONG,
92 "Das QuestTool dient der Administration von Quests. (by Kirk, 10.11.94)\n"
93 +"implementierte Kommandos:\n"
94 +" AddQ : Neuen Questeintrag einfuegen\n"
95 +" RemoveQ <quest> : Questeintrag loeschen\n"
96 +" ChangeQ <quest> : Questeintrag aendern\n"
97 +" ReStoreQ : Zuletzt geloeschten oder geaenderten\n"
98 +" : Questeintrag restaurieren\n"
99 +" SetQ <spieler> <quest> : Quest als 'geloest' markieren\n"
100 +" DelQ <spieler> <quest> : Quest als 'nicht geloest' markieren\n"
101 +" QueryQ <quest> : Questeintrag anzeigen\n"
102 +" QueryK : Alle Keys und Indices anzeigen\n"
103 +" QueryAllQ : Alle Eintraege vollstaendig anzeigen\n"
104 +" ActiVateQ <quest> : Quest im Questmaster aktivieren\n"
105 +" DeactiVateQ <quest> : Quest im Questmaster deaktivieren\n\n"
106 +" fuer <quest> kann der Index verwendet werden, den QueryK liefert!\n\n"
107 +" (Alle Kommandos koennen abgekuerzt werden.)\n"
108 +" -> Beispiel: DeactiVateQ == DVQ == dvq == deactivateq\n");
109
110 SetProp(P_NEVERDROP, 1);
111 SetProp(P_NODROP,
112 "Mit Hilfe des QuestTools koennen Quests eingetragen, oder geloescht\n"+
113 "werden. Du brauchst es vielleicht noch, deshalb wirfst Du es nicht weg.\n");
114 SetProp(P_NOBUY, 1);
115 AddCmd(({ "AddQ", "addq", "AQ", "aq" }), "Add_Quest");
116 AddCmd(({ "RemoveQ", "removeq", "RQ", "rq" }), "Remove_Quest");
117 AddCmd(({ "ChangeQ", "changeq", "CQ", "cq" }), "Change_Quest");
118 AddCmd(({ "ReStoreQ", "restoreq", "RSQ", "rsq" }), "Restore_Quest");
119 AddCmd(({ "SetQ", "setq", "SQ", "sq" }), "Set_Quest");
120 AddCmd(({ "DelQ", "delq", "DQ", "dq" }), "Del_Quest");
121 AddCmd(({ "QueryQ", "queryq", "QQ", "qq" }), "Query_Quest");
122 AddCmd(({ "QueryK", "queryk", "QK", "qk" }), "Query_Keys");
123 AddCmd(({ "QueryAllQ", "queryallq", "QAQ", "qaq" }), "Query_Quests");
124 AddCmd(({ "ActiVateQ", "activateq", "AVQ", "avq" }), "ActivateQuest");
125 AddCmd(({ "DeactiVateQ", "deactivateq", "DVQ", "dvq" }), "DeactivateQuest");
126 counter = QNAME;
127 savekey = "";
128 do_change = 0;
129 num_key = ([]);
130}
131
132int _query_autoloadobj() { return 1; }
133
Zesstrac7bf1fb2018-11-09 00:46:55 +0100134public varargs void init(object oldenv)
MG Mud User88f12472016-06-24 23:31:02 +0200135{
136 object tp;
137
138 if(!(tp = PL) || tp != environment())
139 return;
140
Zesstrac7bf1fb2018-11-09 00:46:55 +0100141 secure_thing::init(oldenv);
MG Mud User88f12472016-06-24 23:31:02 +0200142
143 if ( !IS_WIZARD(tp) || tp != owner )
144 return call_out("do_remove",1);
145}
146
147static void do_remove()
148{
149 write ( ME->QueryProp(P_SHORT)+" zerfaellt zu Staub.\n");
150 say ( ME->QueryProp(P_SHORT)+" zerfaellt in "+PL->name(WESSEN)+
151 " unbefugten Haenden zu Staub.\n");
152 call_out("remove",1);
153}
154
155private void Load_NumKey()
156{
157 string *keys;
158 int i;
159
Arathornd5c9c022020-01-08 22:04:28 +0100160 if ( !(keys = ({string*}) QM->QueryAllKeys()) ) return;
MG Mud User88f12472016-06-24 23:31:02 +0200161 keys=sort_array(keys,#'>);//')
162 for ( i = 0, num_key = ([]); i < sizeof(keys); i++ )
163 num_key += ([(i+1)+"":keys[i]]);
164}
165
166int Add_Quest(string str)
167{
168 counter = QNAME;
169 write ( "Neue Quest: (Abbruch mit '.' oder '~q')\n" );
170 write ( "Key :\n" );
171 input_to ( "ReadNewQuest" );
172 return 1;
173}
174
175void ReadNewQuest (string str)
176{
177 mixed *oldquest;
178 int errstat;
179 int active;
180
181 if ( str == "~q" || str == "." )
182 {
183 counter = QNAME;
184 if(do_change)
185 {
186 do_change = 0;
187 changekey = "";
188 savekey = "";
189 savequest = ({});
190 }
191 return;
192 }
193
194 switch ( counter )
195 {
196 case QNAME:
197 if((!str||!sizeof(str)) && do_change)
198 name = savekey;
199 else
200 name = str;
201 counter++;
202 write ( sprintf("Punkte (>0) [%d]:\n",
Arathornd5c9c022020-01-08 22:04:28 +0100203 (do_change ? savequest[0] : 10)) );
MG Mud User88f12472016-06-24 23:31:02 +0200204 input_to ( "ReadNewQuest" );
205 break;
206 case QP:
207 if((!str||!sizeof(str)))
208 if(do_change)
Arathornd5c9c022020-01-08 22:04:28 +0100209 qp = ({int})savequest[Q_QP];
MG Mud User88f12472016-06-24 23:31:02 +0200210 else
211 qp = 10;
212 else
213 sscanf ( str, "%d", qp );
214 counter++;
215 write ( sprintf("Erfahrung (>=0) [%d]:\n",
Arathornd5c9c022020-01-08 22:04:28 +0100216 (do_change ? savequest[1] : qp*1000)));
MG Mud User88f12472016-06-24 23:31:02 +0200217 input_to ( "ReadNewQuest" );
218 break;
219 case XP:
220 if((!str||!sizeof(str)))
221 if(do_change)
Arathornd5c9c022020-01-08 22:04:28 +0100222 xp = ({int})savequest[Q_XP];
MG Mud User88f12472016-06-24 23:31:02 +0200223 else
224 xp = qp * 1000;
225 else
226 sscanf ( str, "%d", xp );
227 counter++;
228 write ( sprintf("Filenamen file1[,file2,...]) %s:\n",
Arathornd5c9c022020-01-08 22:04:28 +0100229 (do_change?"["+implode(savequest[2],",")+"]":
MG Mud User88f12472016-06-24 23:31:02 +0200230 "")) );
231 input_to ( "ReadNewQuest" );
232 break;
233 case ALLOW:
234 if((!str||!sizeof(str)) && do_change)
Arathornd5c9c022020-01-08 22:04:28 +0100235 allowed = ({string *}) savequest[Q_ALLOWED];
MG Mud User88f12472016-06-24 23:31:02 +0200236 else
237 allowed = old_explode(implode(old_explode(str,".c"),""),",");
238 counter++;
239 write ( sprintf("Info %s:\n", (do_change?
Arathornae0fb0b2020-12-01 23:59:55 +0100240 "["+break_string("\b\b\b\b\b\b"+({string})
MG Mud User88f12472016-06-24 23:31:02 +0200241 savequest[3]+"]",78,6)
242 :"")) );
243 input_to ( "ReadNewQuest" );
244 break;
245 case INFO:
246 if((!str||!sizeof(str)) && do_change)
Arathornae0fb0b2020-12-01 23:59:55 +0100247 info = ({string}) savequest[Q_HINT];
MG Mud User88f12472016-06-24 23:31:02 +0200248 else
249 info = str;
250 counter++;
251 write ( sprintf("Stufe (-1 <=lev<=10) (-1 ist eine Seherquest) [%d]:\n",
Arathornd5c9c022020-01-08 22:04:28 +0100252 (do_change ? savequest[4] : 0)) );
MG Mud User88f12472016-06-24 23:31:02 +0200253 input_to ( "ReadNewQuest" );
254 break;
255 case LEVEL:
256 if((!str||!sizeof(str)))
257 if(do_change)
Arathornae0fb0b2020-12-01 23:59:55 +0100258 level = ({int}) savequest[Q_DIFF];
MG Mud User88f12472016-06-24 23:31:02 +0200259 else
260 level = 0;
261 sscanf ( str, "%d", level );
262 counter++;
263 write ( sprintf("Klasse ([012345]) [%d]:\n",
Arathornd5c9c022020-01-08 22:04:28 +0100264 (do_change ? savequest[5] : 0)) );
MG Mud User88f12472016-06-24 23:31:02 +0200265 input_to ( "ReadNewQuest" );
266 break;
267 case CLASS:
268 if((!str||!sizeof(str)))
269 if(do_change)
Arathornd5c9c022020-01-08 22:04:28 +0100270 need = ({int})savequest[Q_CLASS];
MG Mud User88f12472016-06-24 23:31:02 +0200271 else
272 need = 0;
273 else
274 sscanf ( str, "%d", need );
275 counter++;
276 write ( sprintf("Attribut [01234]\n(1=fleissig,2=heroisch,3=episch,4=legendaer) %s:\n",
Arathornd5c9c022020-01-08 22:04:28 +0100277 (do_change?"["+savequest[9]+"]":"")) );
MG Mud User88f12472016-06-24 23:31:02 +0200278 input_to ( "ReadNewQuest" );
279 break;
280 case ATTR:
281 if ((!str||!sizeof(str)))
282 if (do_change)
Arathornd5c9c022020-01-08 22:04:28 +0100283 group = ({int})savequest[Q_ATTR];
MG Mud User88f12472016-06-24 23:31:02 +0200284 else
285 group = 0;
286 else
287 sscanf (str, "%d", group);
288 counter++;
289 write ( sprintf("Magier %s:\n",
Arathornd5c9c022020-01-08 22:04:28 +0100290 (do_change?"["+savequest[7]+"]":"")) );
MG Mud User88f12472016-06-24 23:31:02 +0200291 input_to ( "ReadNewQuest" );
292 break;
293 case WIZ:
294 if((!str||!sizeof(str)) && do_change)
Arathornd5c9c022020-01-08 22:04:28 +0100295 wizard = ({string})savequest[Q_WIZ];
MG Mud User88f12472016-06-24 23:31:02 +0200296 else
Arathornd5c9c022020-01-08 22:04:28 +0100297 wizard = str;
MG Mud User88f12472016-06-24 23:31:02 +0200298 wizard = lower_case(wizard);
299 counter++;
300 write ( sprintf("Wartender Magier %s:\n",
Arathornae0fb0b2020-12-01 23:59:55 +0100301 (do_change?"["+({string})savequest[8]+"]":"")) );
MG Mud User88f12472016-06-24 23:31:02 +0200302 input_to ( "ReadNewQuest" );
303 break;
304 case SCNDWIZ:
305 if ((!str||!sizeof(str)) && do_change)
Arathornd5c9c022020-01-08 22:04:28 +0100306 scndwizard = ({string}) savequest[Q_SCNDWIZ];
MG Mud User88f12472016-06-24 23:31:02 +0200307 else
Arathornd5c9c022020-01-08 22:04:28 +0100308 scndwizard = str;
MG Mud User88f12472016-06-24 23:31:02 +0200309 scndwizard = lower_case(scndwizard);
310 counter++;
311 write ( "Eintragen (j/n)?\n" );
312 input_to ( "ReadNewQuest" );
313 break;
314 case END:
315 counter=QNAME;
316
317 if ( str != "j" && str != "ja" && str != "y" && str != "yes" )
318 return;
319
320 active = 0;
321 if ( do_change && changekey && sizeof(changekey) )
322 {
Arathornd5c9c022020-01-08 22:04:28 +0100323 oldquest = ({mixed *}) QM->QueryQuest ( changekey );
MG Mud User88f12472016-06-24 23:31:02 +0200324
325 if ( !pointerp ( oldquest ) || !sizeof ( oldquest ) )
326 {
327 write ( "Alten Eintrag nicht gefunden.\n" );
328 return;
329 }
330
Arathornd5c9c022020-01-08 22:04:28 +0100331 errstat = ({int}) QM->RemoveQuest( changekey );
MG Mud User88f12472016-06-24 23:31:02 +0200332
333 do_change = 0;
334 changekey = "";
335
336 switch ( errstat )
337 {
338 case 0: write ( "Zugriff auf alten Eintrag verweigert.\n" ); return;
339 case -1: write ( "Parameterfehler beim Loeschen.\n" ); return;
340 case -2: write ( "Alten Eintrag nicht gefunden.\n" ); return;
341 default: write ( "Alter Eintrag geloescht.\n" );
342 }
343 active = oldquest[6];
344 savequest = oldquest;
345 savekey = changekey;
346 }
347
348 // add new Quest deactivated by default and keep old active flag
349 // if changing an existing entry
Arathornd5c9c022020-01-08 22:04:28 +0100350 errstat= ({int})QM->AddQuest(name,qp,xp,allowed,info,level,need,active,
MG Mud User88f12472016-06-24 23:31:02 +0200351 wizard, scndwizard, group);
352
353 switch ( errstat )
354 {
355 case 0: write ( "Zugriff verweigert.\n" ); break;
356 case -1: write ( "Key ungueltig oder sizeof(key) < 5.\n" ); break;
357 case -2: write ( "QP ungueltig oder < 1.\n" ); break;
358 case -3: write ( "XP ungueltig.\n" ); break;
359 case -4: write ( "Filename(n) ungueltig.\n" ); break;
360 case -5: write ( "Info ungueltig.\n" ); break;
361 case -6: write ( "Stufe ungueltig oder < 0 oder > 20.\n" ); break;
362 case -7: write ( "Aktiv-Flag < 0 oder > 1.\n" ); break;
363 case -8: write ( "Magiername ungueltig.\n" ); break;
364 case -9: write ( "Magiername des wartenden Magiers ungueltig.\n"); break;
365 case -10: write ("Falsche Gruppeneinordnung.\n"); break;
366 default: write ( "Eintrag eingefuegt.\n" );
367 }
368 default:
369 return;
370 }
371}
372
373int Remove_Quest ( string str )
374{
375 mixed *oldquest;
376 string newstr;
377 int errstat;
378
379 if ( !(str=UA) )
380 {
381 write ( "Syntax: RemoveQ <name>\n" );
382 return 1;
383 }
384
385 Load_NumKey();
386
387 if ( !(newstr = num_key[str+""]) )
388 newstr = str;
389
Arathornd5c9c022020-01-08 22:04:28 +0100390 oldquest = ({mixed *}) QM->QueryQuest ( newstr );
MG Mud User88f12472016-06-24 23:31:02 +0200391
392 if ( !pointerp ( oldquest ) || !sizeof ( oldquest ) )
393 {
394 write ( "Keine Quest dieses Namens gefunden.\n" );
395 return 1;
396 }
397
Arathornd5c9c022020-01-08 22:04:28 +0100398 errstat = ({int}) QM->RemoveQuest( newstr );
MG Mud User88f12472016-06-24 23:31:02 +0200399
400 switch ( errstat )
401 {
402 case 0: write ( "Zugriff verweigert.\n" ); break;
403 case -1: write ( "Parameterfehler.\n" ); break;
404 case -2: write ( "Quest nicht gefunden.\n" ); break;
405 default: write ( "Quest entfernt.\n" );
406 }
407
408 savequest = oldquest;
409 savekey = newstr;
410
411 return 1;
412}
413
414int Change_Quest ( string str )
415{
416 mixed *oldquest;
417 string newstr;
418
419 if ( !(str=UA) )
420 {
421 write ( "Syntax: ChangeQ <quest>\n" );
422 return 1;
423 }
424
425 Load_NumKey();
426
427 if ( !(newstr = num_key[str+""]) )
428 newstr = str;
429
Arathornd5c9c022020-01-08 22:04:28 +0100430 oldquest = ({mixed *}) QM->QueryQuest ( newstr );
MG Mud User88f12472016-06-24 23:31:02 +0200431
432 if ( !pointerp( oldquest ) || !sizeof ( oldquest ) )
433 {
434 write ( "Keine Quest dieses Namens gefunden.\n" );
435 return 1;
436 }
437
438 do_change = 1;
439 changekey = newstr;
440 savekey = newstr;
441 savequest = oldquest;
442
443 write ( "Aktueller Eintrag:\n");
444 write ( "Key : "+newstr+"\n" );
445 write ( "Punkte : "+oldquest[Q_QP]+"\n" );
446 write ( "Erfahrung : "+oldquest[Q_XP]+"\n" );
447 write ( "Filenamen : "+implode(oldquest[Q_ALLOWED],",")+"\n" );
448 write ( "Info : "+oldquest[Q_HINT]+"\n" );
449 write ( "Stufe : "+oldquest[Q_DIFF]+"\n" );
450 write ( "Klasse : "+QCLASS_STARS(oldquest[Q_CLASS])+"\n" );
451 write ( "Attribut : "+QATTR_STRINGS[oldquest[Q_ATTR]]+"\n" );
452 write ( "Magier : "+capitalize(oldquest[Q_WIZ])+"\n" );
453 write ( "Wartender Magier : "+capitalize(oldquest[Q_SCNDWIZ])+"\n" );
454
455
456 write ( "\nNeue Quest: (mit '.' oder '~q' kann abgebrochen werden)\n" );
457 write ( sprintf("Key [%s]:\n", savekey) );
458 input_to ( "ReadNewQuest" );
459
460 return 1;
461}
462
463int Restore_Quest ( string str )
464{
465 int errstat;
466
467 if ( !savekey || !sizeof(savekey) )
468 {
469 write ( "\nTut mir leid!\n" );
470 write ( "Nichts zum Restaurieren gefunden ...\n" );
471 return 1;
472 }
473
474 errstat =
Arathornd5c9c022020-01-08 22:04:28 +0100475 ({int})QM->AddQuest(savekey, savequest[0], savequest[1],
476 savequest[2], savequest[3], savequest[4], savequest[5],
477 savequest[6], savequest[7], savequest[8]);
MG Mud User88f12472016-06-24 23:31:02 +0200478
479 switch ( errstat )
480 {
481 case 0: write ( "Zugriff verweigert.\n" ); break;
482 case -1: write ( "Key ungueltig oder sizeof(key) < 5.\n" ); break;
483 case -2: write ( "QP ungueltig oder < 1.\n" ); break;
484 case -3: write ( "XP ungueltig.\n" ); break;
485 case -4: write ( "Filename(n) ungueltig.\n" ); break;
486 case -5: write ( "Info ungueltig.\n" ); break;
487 case -6: write ( "Stufe ungueltig oder < 0 oder > 20.\n" ); break;
488 case -7: write ( "Aktiv-Flag < 0 oder > 1.\n" ); break;
489 case -8: write ( "Magiername ungueltig.\n" ); break;
490 case -9: write ( "Magiername ungueltig.\n"); break;
491 case -10: write ("Ungueltige Gruppennummer.\n"); break;
492 default: write ( "'"+savekey+"' restauriert.\n" );
493 }
494 savekey = "";
495 return 1;
496}
497
498int Set_Quest ( string str )
499{
500 string quest, player, newquest;
501 int created;
502 object ob;
503
504 if ( !(str=UA) || sscanf( str, "%s %s", player, quest ) != 2 )
505 {
506 write ( "Syntax: SetQ <player> <quest>\n" );
507 return 1;
508 }
509
510 created=0;
511 Load_NumKey();
512
513 if ( !(newquest = num_key[quest+""]) )
514 newquest = quest;
515
516 ob=find_player(player);
517 if(!ob)
518 {
519 ob=find_netdead(player);
520 if(!ob)
521 {
522 created=1;
523 ob=__create_player_dummy(player);
524 }
525 }
526 if(!ob)
527 {
528 write("Kein solcher Spieler gefunden.\n!");
529 return 1;
530 }
531
Arathornd5c9c022020-01-08 22:04:28 +0100532 write(ERRNO_2_STRING("GQ",({int})ob->GiveQuest(newquest,"__silent__"))+"\n");
MG Mud User88f12472016-06-24 23:31:02 +0200533 if(created)
534 {
535 ob->save_me(0);
536 if(!(ob->remove()))
537 {
538 destruct(ob);
539 }
540 }
541 return 1;
542}
543
544int Del_Quest ( string str )
545{
546 string quest, player, newquest;
547 int created;
548 object ob;
549
550 if ( !(str=UA) || sscanf( str, "%s %s", player, quest ) != 2 )
551 {
552 write ( "Syntax: DelQ <player> <quest>\n" );
553 return 1;
554 }
555
556 Load_NumKey();
557
558 if ( !(newquest = num_key[quest+""]) )
559 newquest = quest;
560
561 created=0;
562 ob=find_player(player);
563 if(!ob)
564 {
565 ob=find_netdead(player);
566 if(!ob)
567 {
568 created=1;
569 ob=__create_player_dummy(player);
570 }
571 }
572 if(!ob)
573 {
574 write("Kein solcher Spieler gefunden.\n!");
575 return 1;
576 }
577
Arathornd5c9c022020-01-08 22:04:28 +0100578 write(ERRNO_2_STRING("DQ",({int}) ob->DeleteQuest ( newquest ))+"\n");
MG Mud User88f12472016-06-24 23:31:02 +0200579 if(created)
580 {
581 ob->save_me(0);
582 if(!(ob->remove()))
583 {
584 destruct(ob);
585 }
586 }
587 return 1;
588}
589
590int Query_Quest ( string str )
591{
592 mixed *quest;
593 string newstr;
594 int i;
595
596 if ( !(str=UA) )
597 {
598 write ( "Syntax: QueryQ <quest>\n" );
599 return 1;
600 }
601
602 Load_NumKey();
603
604 if ( !(newstr = num_key[str+""]) )
605 newstr = str;
606
Arathornd5c9c022020-01-08 22:04:28 +0100607 quest = ({mixed *}) QM->QueryQuest( newstr );
MG Mud User88f12472016-06-24 23:31:02 +0200608
609 if ( !pointerp( quest ) || !sizeof ( quest ) )
610 {
611 write ( "Keine Quest dieses Namens gefunden.\n" );
612 return 1;
613 }
614
615 write ( "Aktueller Eintrag:\n");
616 write ( "Key : "+newstr );
617 if(quest[Q_ACTIVE])
618 write (" (aktiviert)\n");
619 else
620 write (" (deaktiviert)\n");
621 write ( "Punkte : "+quest[Q_QP]+"\n" );
622 write ( "Erfahrung : "+quest[Q_XP]+"\n" );
623 write ( break_string ( implode( quest[Q_ALLOWED], " " ), 65, "Filenamen : " ) );
624 write ( break_string ( quest[Q_HINT], 65, "Info : " ) );
625 write ( "Stufe : "+quest[Q_DIFF]+"\n" );
626 printf("Stufe (avg) : %.2f (%d)\n", quest[Q_AVERAGE][0],
627 quest[Q_AVERAGE][1]);
628 write ( "Klasse : "+ QCLASS_STARS(quest[Q_CLASS])+"\n");
629 write ( "Attribute : "+ QATTR_STRINGS[quest[Q_ATTR]]+"\n");
630 write ( "Magier : "+capitalize(quest[Q_WIZ])+"\n" );
631 write ( "Wartender Magier : "+capitalize(quest[Q_SCNDWIZ])+"\n");
632 return 1;
633}
634
635int Query_Keys ( string str )
636{
637 string *keys, active;
638 mixed *quest;
639 int i;
640
Arathornd5c9c022020-01-08 22:04:28 +0100641 if ( !(keys = ({string *}) QM->QueryAllKeys()) )
MG Mud User88f12472016-06-24 23:31:02 +0200642 return 1;
643
644 write ( "\n" );
645 keys=sort_array(keys,#'>);//')
646 for ( i = 0; i < sizeof(keys); i++ )
647 {
Arathornd5c9c022020-01-08 22:04:28 +0100648 quest = ({mixed *}) QM->QueryQuest(keys[i]);
MG Mud User88f12472016-06-24 23:31:02 +0200649 if(quest[6])
650 active="*";
651 else
652 active=" ";
653 write(sprintf("%2d%s %-33s%s",i+1,quest[6]?"*":" ",keys[i],
654 !(i%2)?" ":"\n"));
655 }
656 if(i%2)
657 write("\n");
658
659 return 1;
660}
661
662int Query_Quests ( string str )
663{
664 mixed *quest;
665 string *keys, rstr;
666 int i;
667
Arathornd5c9c022020-01-08 22:04:28 +0100668 if ( !(keys = ({mixed *})QM->QueryAllKeys()) )
MG Mud User88f12472016-06-24 23:31:02 +0200669 return 1;
670
671 keys=sort_array(keys,#'>);//')
672 for ( i = 0, rstr = ""; i < sizeof(keys); i++ )
673 {
Arathornd5c9c022020-01-08 22:04:28 +0100674 quest = ({mixed *}) QM->QueryQuest(keys[i]);
MG Mud User88f12472016-06-24 23:31:02 +0200675 write ( "\nKey : "+keys[i] );
676 if(quest[Q_ACTIVE])
677 write (" (aktiviert)\n");
678 else
679 write (" (deaktiviert)\n");
680 write ( "Punkte : "+quest[Q_QP]+"\n" );
681 write ( "Erfahrung : "+quest[Q_XP]+"\n" );
682 write ( break_string ( implode( quest[Q_ALLOWED], " " ), 78, "Filenamen : " ) );
683 write ( break_string ( quest[Q_HINT], 78, "Info : " ) );
684 write ( "Stufe : "+quest[Q_DIFF]+"\n" );
685 write ( "Klasse : "+ QCLASS_STARS(quest[Q_CLASS])+"\n");
686 write ( "Attribute : "+ QATTR_STRINGS[quest[Q_ATTR]]+"\n");
687 write ( "Magier : "+capitalize(quest[7])+"\n" );
688 write ( "Wartender Magier : "+capitalize(quest[8])+"\n");
689 }
690 More( rstr, 0 );
691 return 1;
692}
693
694int ActivateQuest( string str )
695{
696 mixed *quest;
697 string newstr;
698 int errstat;
699
700 if ( !(str=UA) )
701 {
702 write ( "Syntax: ActiVateQ <quest>\n" );
703 return 1;
704 }
705
706 Load_NumKey();
707
708 if ( !(newstr = num_key[str+""]) )
709 newstr = str;
710
711 switch( QM->SetActive( newstr, 1 ) )
712 {
713 case -3: write ( "Ungueltiger Flag.\n" ); break;
714 case -2: write ( "Quest war bereits aktiviert.\n" ); break;
715 case -1: write ( "Keine Quest dieses Namens gefunden.\n" ); break;
716 case 0: write ( "Zugriff verweigert\n" ); break;
717 case 1: write ( "Quest '"+newstr+"' aktiviert.\n" ); break;
718 default: write ( "unbekannter Fehlerstatus.\n" );
719 }
720 return 1;
721}
722
723int DeactivateQuest( string str )
724{
725 mixed *quest;
726 string newstr;
727 int errstat;
728
729 if ( !(str=UA) )
730 {
731 write ( "Syntax: DeactiVateQ <quest>\n" );
732 return 1;
733 }
734
735 Load_NumKey();
736
737 if ( !(newstr = num_key[str+""]) )
738 newstr = str;
739
740 switch( QM->SetActive( newstr, 0 ) )
741 {
742 case -3: write ( "Ungueltiger Flag.\n" ); break;
743 case -2: write ( "Quest war bereits deaktiviert.\n" ); break;
744 case -1: write ( "Keine Quest dieses Namens gefunden.\n" ); break;
745 case 0: write ( "Zugriff verweigert\n" ); break;
746 case 1: write ( "Quest '"+newstr+"' deaktiviert.\n" ); break;
747 default: write ( "unbekannter Fehlerstatus.\n" );
748 }
749 return 1;
750}
751
752