blob: 942f89d0a639db8033d0447e8c72212f79877642 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001/* /obj/tools/merkzettel.c
2 Merkzettel fuer Magier
3 Autor: Zesstra
4 ggf. Changelog:
5*/
6#pragma strict_types
7#pragma no_shadow
8#pragma range_check
9#pragma pedantic
10
11inherit "/std/secure_thing";
12
13#include <properties.h>
14#include <language.h>
15#include <wizlevels.h>
16#include <moving.h>
17#include <defines.h>
18
19#define NEED_PROTOTYPES
20#include "merkzettel.h"
21#undef NEED_PROTOTYPES
22
23//Variablen
24mapping notizen;
25//mapping notizen_inaktiv;
26int maxusedID;
27static string owner; //UID des Besitzers, wird in P_AUTOLOAD gespeichert
28//static int *cache; //nach Prioritaet sortiertes Array der IDs
29
Zesstraff356512018-08-27 20:20:36 +020030protected void create() {
MG Mud User88f12472016-06-24 23:31:02 +020031 ::create();
32 SetProp(P_NAME, "Merkzettel");
33 SetProp(P_SHORT, "Ein Merkzettel");
34 AddId(({"merkzettel","zettel"}));
35 //Absicht, damit die Blueprint eine ID, P_NAME und P_SHORT hat.
36 if(!clonep(this_object())) return;
37
38 SetProp(P_LONG,
39 "Was wolltest Du gleich nochmal schoenes proggen? ;-)\n"
40 "Befehlsliste:\n"
41 "zmerke/znotiz <string> : Etwas auf den Merkzettel schreiben\n"
42 "zliste : 20 wichtigsten Notizen anzeigen\n"
43 "zliste <int> : <int> wichtigste Notizen anzeigen\n"
44 " (unwichtigste, wenn <int> negativ)\n"
45 " Angabe von 0 oder 'alle' gibt alle aus\n"
46 "zliste <int> <filter> : <int> wichtigste Notizen anzeigen\n"
47 " (Filter: 'aktiv', 'wartend'\n"
48 " 'inaktiv', 'abgehakt', 'alle'|'0')\n"
49 " Ohne Angabe eines Filter gilt 'aktiv'\n"
50 "zstatus <int> : Status von Notiz mit ID umschalten\n"
51 "zstatus <int> <int2> : Status von Notiz mit ID auf <int> setzen \n"
52 "zloesche/zrm <int> : Notiz mit ID <int> loeschen\n"
53 "zlies/zlese <int> : Notiz mit ID <int> anzeigen\n"
54 "zdeplies <int> <int2> : Abhaengigkeiten von <int> lesen, \n"
55 " : rekursiv, wenn <int2> != 0\n"
56 "zfertig/zhake <int> : Notiz mit ID <int> abhaken (fertig)\n"
57 "zprio <int1> <int2> : Notiz mit ID <int> mit Prioritaet <int2>\n"
58 " versehen.\n"
59 "zdep <int1> <int2> : Notiz mit ID <int> soll von Notiz mit ID\n"
60 " <int2> abhaengen.\n"
61 "zhelfer <int1> <namen> : Notiz mit ID <int> wird (mit)bearbeitet\n"
62 " von den angegebenen Personen\n"
63 "zergaenze <int> <text> : haengt <text> an Notiz <int> an\n"
64 "zersetze <int> <text> : ersetzt Text von Notiz <int> durch <text>\n"
65 "zexpire <int> : alle abgehakten Notizen archivieren und loeschen,\n"
66 " : die aelter als <int> Tage sind.\n"
67 "zzeige <name> ; zeige <name>, wie furchtbar viel Du zu tun hast\n"
68 "zwedel <name> : <name> aus der Ferne vor der Nase rumwedeln.\n"
69 );
70 SetProp(P_INFO,break_string("Ein Merkzettel fuer Magier. ;-)."));
71 SetProp(P_GENDER, MALE);
72 SetProp(P_ARTICLE, 1);
73 SetProp(P_WEIGHT, 0);
74 SetProp(P_VALUE, 0);
75 Set(P_AUTOLOADOBJ,#'query_autoloadobj,F_QUERY_METHOD);
76 Set(P_AUTOLOADOBJ,#'set_autoloadobj,F_SET_METHOD);
77 Set(P_AUTOLOADOBJ,PROTECTED,F_MODE_AS);
78 SetProp(P_NEVERDROP,1);
79 SetProp(P_NODROP,1);
80 AddCmd(({"zmerke","znotiz"}),"AddNotiz");
81 AddCmd(({"zliste","ztodo"}),"ListNotizen");
82 AddCmd(({"zloesche","zrm"}),"RemoveNotiz");
83 AddCmd(({"zfertig","zhake"}),"FinishNotiz");
84 AddCmd(({"zlies","zlese"}),"LiesNotiz");
85 AddCmd(({"zprio"}),"ChangePrio");
86 AddCmd(({"zdep"}),"ChangeDep");
87 AddCmd(({"zstatus"}),"ChangeStatus");
88 AddCmd(({"zersetze"}),"ErsetzeText");
89 AddCmd(({"zergaenze"}),"ErgaenzeText");
90 AddCmd(({"zhelfer","zdelegiere"}),"ChangeHelper");
91 AddCmd(({"zzeige"}),"ZeigeZettel");
92 AddCmd(({"zwedel"}),"WedelZettel");
93 AddCmd(({"zdeplies"}),"LiesDeps");
94 AddCmd(({"zexpire"}),"Expire");
95 //cache=({});
96
97}
98
99//****************** AddCmd *****************************
100int AddNotiz(string str) {
101
102 if(!objectp(TI)) return(0);
103 if(!check_allowed()) {
104 if(objectp(this_interactive()))
105 tell_object(this_interactive(),
106 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
107 return(0);
108 }
109 //ggf. nur Einlesen, Cache muss hier nicht aktualisiert werden ;-)
110 checkStatus(1);
Arathorn510e4922021-04-02 15:03:23 +0200111 str=({string})PL->_unparsed_args(0); //kein parsing
MG Mud User88f12472016-06-24 23:31:02 +0200112 if (!stringp(str) || !sizeof(str)) {
113 tell_object(PL,
114 "Was moechtest Du Dir denn notieren?\n");
115 return(1);
116 }
117 if (sizeof(str)>MAX_NOTE_LENGTH) {
118 tell_object(PL,BS(
119 sprintf("Deine Notiz ist mit %d Zeichen zu lang! Leider passen auf "
120 "Deinen Merkzettel nur % Zeichen drauf.",
121 sizeof(str),MAX_NOTE_LENGTH)));
122 return(1);
123 }
124
125 //m_allocate gilt nur bis Funktionsende, daher hilft das in
126 //checkStatus leider nicht.
127 if (!mappingp(notizen) || !sizeof(notizen))
128 notizen=m_allocate(0,7);
129
130 //freie ID finden (maxusedID+1 sollte die naechste frei sein, aber falls
131 //da mal was kaputtgegangen ist: Pruefen ;-) )
132 while(member(notizen,maxusedID)) {maxusedID++;}
133 //Reihenfolge: s. merkzettel.h
134 notizen+=([maxusedID:str;0;time();({});({});NOTE_ACTIVE;0]);
135/* notizen+=([maxusedID]);
136 notizen[maxusedID,NOTE_TEXT]=str;
137 notizen[maxusedID,NOTE_PRIO]=0;
138 notizen[maxusedID,NOTE_STARTTIME]=time();
139 notizen[maxusedID,NOTE_DEPS]=({});
140*/
141
142 //cache=({}); //cache invalidieren
143 //in Kuerze speichern, aber nicht fuer jede Aenderung speichern
144 save_me(60);
145 tell_object(PL,BS(
146 sprintf("Du schreibst sorgfaeltig Deine Notiz auf Deinen Merkzettel. "
147 "Es ist nun die %d. Notiz.",maxusedID)));
148 tell_room(environment(TI),
149 BS(sprintf("%s notiert sich etwas auf %s Merkzettel.\n",
Arathorn510e4922021-04-02 15:03:23 +0200150 capitalize(({string})TI->name(WER)),
151 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihrem" : "seinem")
MG Mud User88f12472016-06-24 23:31:02 +0200152 )),({TI}));
153 return(1);
154}
155
156int LiesNotiz(string str) {
157 int id;
158
159 if(!objectp(TI)) return(0);
160 if(!check_allowed()) {
161 if(objectp(this_interactive()))
162 tell_object(this_interactive(),
163 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
164 return(0);
165 }
166 if (!stringp(str) || !sizeof(str) || !id=to_int(str)) {
167 tell_object(PL,
168 "Welche Notiz moechtest Du lesen? Bitte eine ID angeben!\n");
169 return(1);
170 }
171 if (!checkStatus()) {
172 tell_object(PL,
173 "Es gibt keine Notiz, die Du lesen koenntest!\n");
174 return(1);
175 }
176 if (!member(notizen,id)) {
177 tell_object(PL,
178 sprintf("Es gibt keine Notiz mit der ID: %d\n",id));
179 return(1);
180 }
181 //Ausgabetext holen und ausgeben
182 tell_object(PL,sprintf("\nDu vertiefst Dich in Deinen Merkzettel und liest:\n%s\n",_LiesNotiz(id)));
183 tell_room(environment(TI),
184 BS(sprintf("%s liest etwas auf %s Merkzettel.\n",
Arathorn510e4922021-04-02 15:03:23 +0200185 capitalize(({string})TI->name(WER)),
186 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihrem" : "seinem")
MG Mud User88f12472016-06-24 23:31:02 +0200187 )),({TI}));
188 return(1);
189}
190
191int RemoveNotiz(string str) {
192 int id;
193
194 if(!objectp(TI)) return(0);
195 if(!check_allowed()) {
196 if(objectp(this_interactive()))
197 tell_object(this_interactive(),
198 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
199 return(0);
200 }
201 if (!stringp(str) || !sizeof(str) || !id=to_int(str)) {
202 tell_object(PL,
203 "Welche Notiz moechtest Du ausradieren? Bitte eine ID angeben!\n");
204 return(1);
205 }
206 if (!checkStatus()) {
207 tell_object(PL,
208 "Es gibt keine Notiz, die Du ausradieren koenntest!\n");
209 return(1);
210 }
211 if (!member(notizen,id)) {
212 tell_object(PL,
213 sprintf("Es gibt keine Notiz mit der ID: %d\n",id));
214 return(1);
215 }
216 //direkt Loeschen, keine Kopie, daher m_delete()
217 m_delete(notizen,id);
218 //in Kuerze speichern, aber nicht fuer jede Aenderung speichern
219 save_me(60);
220 //cache invalidieren
221 //cache=({});
222 tell_object(PL,
223 sprintf("Sorgfaeltig radierst Du Notiz %d von Deinem Merkzettel.\n",
224 id));
225 tell_room(environment(TI),
226 BS(sprintf("%s radiert sorgfaeltig etwas von %s Merkzettel.\n",
Arathorn510e4922021-04-02 15:03:23 +0200227 capitalize(({string})TI->name(WER)),
228 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihrem" : "seinem")
MG Mud User88f12472016-06-24 23:31:02 +0200229 )),({TI}));
230 return(1);
231}
232
233int FinishNotiz(string str) {
234 int id;
235 mixed liste;
236 if(!objectp(TI)) return(0);
237 if(!check_allowed()) {
238 if(objectp(this_interactive()))
239 tell_object(this_interactive(),
240 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
241 return(0);
242 }
243 if (!stringp(str) || !sizeof(str) || !id=to_int(str)) {
244 tell_object(PL,
245 "Welche Notiz moechtest Du abhaken? Bitte eine ID angeben!\n");
246 return(1);
247 }
248 if (!checkStatus()) {
249 tell_object(PL,
250 "Es gibt keine Notiz, die Du abhaken koenntest!\n");
251 return(1);
252 }
253 if (!member(notizen,id)) {
254 tell_object(PL,
255 sprintf("Es gibt keine Notiz mit der ID: %d\n",id));
256 return(1);
257 }
258 if(notizen[id,NOTE_STATUS]==NOTE_FINISHED) {
259 tell_object(PL,
260 sprintf("Notiz %d ist schon abgehakt!\n",id));
261 return(1);
262 }
263 liste=getUnresolvedDeps(id); //liste ist Array von ints
264 if (sizeof(liste)) {
265 liste=map(liste,#'to_string); //liste ist Array von strings
266 tell_object(PL,BS(sprintf("Du kannst Notiz %d nicht abhaken, da noch "
267 "nicht erledigte Abhaengigkeiten existieren. IDs: %s.",
268 id,CountUp(liste))));
269 return(1);
270 }
271 notizen[id,NOTE_STATUS]=NOTE_FINISHED;
272 notizen[id,NOTE_CLOSETIME]=time();
273 tell_object(PL,BS(
274 sprintf("Du malst zufrieden einen schoenen grossen Haken hinter "
275 "die Notiz Nr. %d. Hach - was bist Du nun zufrieden! :-)\n",id)));
276 tell_room(environment(TI),
277 BS(sprintf("%s hakt erfreut etwas auf %s Merkzettel ab.\n",
Arathorn510e4922021-04-02 15:03:23 +0200278 capitalize(({string})TI->name(WER)),
279 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihrem" : "seinem")
MG Mud User88f12472016-06-24 23:31:02 +0200280 )),({TI}));
281 return(1);
282}
283
284int ListNotizen(string str) {
285 int zahl,notizzahl,i,id,filterstate;
286 string txt;
287 string *arr;
288 status invers;
289
290 if(!objectp(TI)) return(0);
Arathorn510e4922021-04-02 15:03:23 +0200291 str=({string})PL->_unparsed_args(0);
MG Mud User88f12472016-06-24 23:31:02 +0200292 if(!check_allowed()) {
293 if(objectp(this_interactive()))
294 tell_object(this_interactive(),
295 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
296 return(0);
297 }
298 if (!notizzahl=checkStatus()) {
299 tell_object(PL,BS(
300 "Dein Merkzettel ist bluetenweiss und leer! Wie kommt das denn?? "
301 "Hast Du nix zu tun?"));
302 return(1);
303 }
304 //Argumente parsen
305 if(stringp(str) && sizeof(str))
306 arr=explode(str," ");
307 if (pointerp(arr)) arr-=({""}); //doppelte leerzeichen im String
308 if (pointerp(arr) && sizeof(arr)>=2) {
309 zahl=to_int(arr[0]);
310 switch(arr[1]) {
311 case "aktiv":
312 filterstate=NOTE_ACTIVE; break;
313 case "inaktiv":
314 filterstate=NOTE_INACTIVE; break;
315 case "wartend":
316 case "pending":
317 filterstate=NOTE_PENDING; break;
318 case "abgehakt":
319 case "fertig":
320 case "abgeschlossen":
321 filterstate=NOTE_FINISHED; break;
322 case "alle":
323 filterstate=0; break;
324 default:
325 filterstate=to_int(arr[1]);
326 break;
327 }
328 }
329 else if (pointerp(arr) && sizeof(arr)==1) {
330 zahl=to_int(arr[0]);
331 filterstate=NOTE_ACTIVE;
332 }
333 else {
334 //Voreinstellungen
335 zahl=20;
336 filterstate=NOTE_ACTIVE;
337 }
338 //1. Argument "all" oder "alle" ist: alle anzeigen
339 if (pointerp(arr) && sizeof(arr) && stringp(arr[0]) &&
340 sizeof(arr[0]) && arr[0]=="alle")
341 zahl=notizzahl; //alle anzeigen
342
343 //wenn die gewuenschte Zahl die Anzahl gespeicherter
344 //Notizen ueberschreitet (oder 0 ist)
345 if(!zahl || zahl>notizzahl) zahl=notizzahl;
346
347 //wenn 1. Argument negativ: Liste in umgekehrter Reihenfolge
348 if (zahl<0) {
349 invers=1;
350 zahl=zahl*-1;
351 }
352 txt=sprintf("\n|%:9|s|%:56|s|%:7|s|\n","ID","Notiztext","Prio.");
353 txt+=sprintf("%:78'-'s\n","-");
354 //alle passenden Notizen ermitteln
355 arr=filter(m_indices(notizen),#'note_filter,filterstate);
356 //sortieren
357 arr=sort_array(arr,#'sort_prio);
358 if (zahl>sizeof(arr)) zahl=sizeof(arr);
359 //ausgeben
360 for(i=0;i<zahl;i++) {
361 if (!invers)
362 id=to_int(arr[i]);
363 else
364 //von hinten
365 id=to_int(arr[<i+1]); // i+1 ist wirklich Absicht. ;-)
366 txt+=sprintf("| %:7|d | %:54-s | %:5|d |\n",
367 id,
368 //nur bis zum ersten \n anzeigen
369 explode(notizen[id,NOTE_TEXT],"\n")[0],
370 notizen[id,NOTE_PRIO]);
371 }
372 txt+=sprintf("%:78'-'s\n\n","-");
373 tell_object(PL,txt);
374 tell_room(environment(TI),
375 BS(sprintf("%s wirft einen Blick auf %s Merkzettel.\n",
Arathorn510e4922021-04-02 15:03:23 +0200376 capitalize(({string})TI->name(WER)),
377 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihren" : "seinen")
MG Mud User88f12472016-06-24 23:31:02 +0200378 )),({TI}));
379 return(1);
380}
381
382int ChangeDep(string str) {
383 int id;
384 string *arr;
MG Mud User88f12472016-06-24 23:31:02 +0200385
386 notify_fail("Bitte eine ID und eine min. eine Abhaengigkeit angeben!\n");
387 if(!objectp(TI)) return(0);
388 if(!check_allowed()) {
389 if(objectp(this_interactive()))
390 tell_object(this_interactive(),
391 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
392 return(0);
393 }
Arathorn510e4922021-04-02 15:03:23 +0200394 str=({string})PL->_unparsed_args(0);
MG Mud User88f12472016-06-24 23:31:02 +0200395 if (!stringp(str) || !sizeof(str))
396 return(0);
397
398 if (!checkStatus()) {
399 tell_object(PL,BS(
400 "Dein Merkzettel ist bluetenweiss und leer! Wie kommt das denn?? "
401 "Hast Du nix zu tun?"));
402 return(1);
403 }
404 arr=explode(str," ");
405 arr-=({""}); // "" entfernen, wichtig. ;-)
406 if (sizeof(arr)<2)
407 return(0);
408 id=to_int(arr[0]);
409 arr-=({arr[0]}); //eigene ID loeschen
410 if (sizeof(arr)<1)
411 return(0); //mehrfach die eigene ID gilt nicht.;-)
412 if (!member(notizen,id)) {
413 tell_object(PL,
414 sprintf("Es gibt keine Notiz mit der ID: %d\n",id));
415 return(1);
416 }
417 //dies updated direkt die Abhaengigkeiten in 'notizen'!
418 map(arr,#'update_deps,id);
419 save_me(60);
420 tell_object(PL,BS(
421 sprintf("Du aenderst die Abhaengigkeiten von Notiz %d.\n",
422 id)));
423 tell_room(environment(TI),
424 BS(sprintf("%s kritzelt auf %s Merkzettel herum.\n",
Arathorn510e4922021-04-02 15:03:23 +0200425 capitalize(({string})TI->name(WER)),
426 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihrem" : "seinem")
MG Mud User88f12472016-06-24 23:31:02 +0200427 )),({TI}));
428 return(1);
429}
430
431int ChangePrio(string str) {
432 int id, prio;
433 string* arr;
434
435 notify_fail("Bitte eine ID und eine neue Prioritaet angeben!\n");
436 if(!objectp(TI)) return(0);
437 if(!check_allowed()) {
438 if(objectp(this_interactive()))
439 tell_object(this_interactive(),
440 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
441 return(0);
442 }
Arathorn510e4922021-04-02 15:03:23 +0200443 str=({string})PL->_unparsed_args(0);
MG Mud User88f12472016-06-24 23:31:02 +0200444 if (!stringp(str) || !sizeof(str))
445 return(0);
446
447 if (!checkStatus()) {
448 tell_object(PL,BS(
449 "Dein Merkzettel ist bluetenweiss und leer! Wie kommt das denn?? "
450 "Hast Du nix zu tun?"));
451 return(1);
452 }
453 arr=explode(str," ");
454 if (sizeof(arr)>2) {
455 notify_fail("Bitte nur eine ID und eine neue Prioritaet angeben!");
456 return(0);
457 }
458 else if(sizeof(arr)==2) {
459 id=to_int(arr[0]);
460 prio=to_int(arr[1]);
461 }
462 else
463 return(0);
464
465 if (!member(notizen,id)) {
466 tell_object(PL,
467 sprintf("Es gibt keine Notiz mit der ID: %d\n",id));
468 return(1);
469 }
470 notizen[id,NOTE_PRIO]=prio;
471 //cache=({}); //cache invalidieren
472 save_me(60);
473 tell_object(PL,BS(
474 sprintf("Du aenderst die Prioritaet von Notiz %d auf %d.",
475 id,notizen[id,NOTE_PRIO])));
476 tell_room(environment(TI),
477 BS(sprintf("%s kritzelt auf %s Merkzettel herum.\n",
Arathorn510e4922021-04-02 15:03:23 +0200478 capitalize(({string})TI->name(WER)),
479 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihrem" : "seinem")
MG Mud User88f12472016-06-24 23:31:02 +0200480 )),({TI}));
481 return(1);
482}
483
484int ChangeHelper(string str) {
485 int id;
486 string *arr;
487
488 notify_fail("Bitte eine ID und eine min. einen Namen angeben!\n");
489 if(!objectp(TI)) return(0);
490 if(!check_allowed()) {
491 if(objectp(this_interactive()))
492 tell_object(this_interactive(),
493 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
494 return(0);
495 }
Arathorn510e4922021-04-02 15:03:23 +0200496 str=({string})PL->_unparsed_args(0);
MG Mud User88f12472016-06-24 23:31:02 +0200497 if (!stringp(str) || !sizeof(str))
498 return(0);
499
500 if (!checkStatus()) {
501 tell_object(PL,BS(
502 "Dein Merkzettel ist bluetenweiss und leer! Wie kommt das denn?? "
503 "Hast Du nix zu tun?"));
504 return(1);
505 }
506 arr=explode(str," ");
507 arr-=({""}); // "" entfernen, wichtig. ;-)
508 if (sizeof(arr)<2)
509 return(0);
510 id=to_int(arr[0]);
511 arr-=({arr[0]}); //eigene ID loeschen
512 if (sizeof(arr)<1)
513 return(0); //mehrfach die eigene ID gilt nicht.;-)
514 if (!member(notizen,id)) {
515 tell_object(PL,
516 sprintf("Es gibt keine Notiz mit der ID: %d\n",id));
517 return(1);
518 }
519 notizen[id,NOTE_HELPER]=arr;
520 save_me(60);
521 tell_object(PL,BS(
522 sprintf("Mitarbeiter von Notiz %d geaendert.",id)));
523 tell_room(environment(TI),
524 BS(sprintf("%s kritzelt auf %s Merkzettel herum.\n",
Arathorn510e4922021-04-02 15:03:23 +0200525 capitalize(({string})TI->name(WER)),
526 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihrem" : "seinem")
MG Mud User88f12472016-06-24 23:31:02 +0200527 )),({TI}));
528 return(1);
529}
530
531int ChangeStatus(string str) {
532 int id, state;
533 string *arr;
534
535 notify_fail(BS(
536 "Bitte min. eine ID angeben, um den Status umzuschalten oder "
537 "eine ID und den neuen Status (1==Aktiv, 2==Wartend, "
538 "-1==Inaktiv/Pause)"));
539 if(!objectp(TI)) return(0);
540 if(!check_allowed()) {
541 if(objectp(this_interactive()))
542 tell_object(this_interactive(),
543 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
544 return(0);
545 }
Arathorn510e4922021-04-02 15:03:23 +0200546 str=({string})PL->_unparsed_args(0);
MG Mud User88f12472016-06-24 23:31:02 +0200547 if (!stringp(str) || !sizeof(str))
548 return(0);
549 if (!checkStatus()) {
550 tell_object(PL,BS(
551 "Dein Merkzettel ist bluetenweiss und leer! Wie kommt das denn?? "
552 "Hast Du nix zu tun?"));
553 return(1);
554 }
555 arr=explode(str," ");
556 if (sizeof(arr)>2) {
557 notify_fail("Bitte nur eine ID und einen neuen Status angeben!");
558 return(0);
559 }
560 else if(sizeof(arr)==2) {
561 id=to_int(arr[0]);
562 state=to_int(arr[1]);
563 }
564 else if(sizeof(arr)==1) {
565 id=to_int(arr[0]);
566 }
567 else
568 return(0);
569
570 if (!member(notizen,id)) {
571 tell_object(PL,
572 sprintf("Es gibt keine Notiz mit der ID: %d\n",id));
573 return(1);
574 }
575 if(member(NOTE_STATES,state)==-1) {
576 if (notizen[id,NOTE_STATUS]==NOTE_ACTIVE) {
577 tell_object(PL,BS(
578 sprintf("%d ist ein unbekannter Status, setzt Notiz %d auf "
579 "'Inaktiv'.",state,id)));
580 state=NOTE_INACTIVE;
581 }
582 else {
583 tell_object(PL,BS(
584 sprintf("%d ist ein unbekannter Status, setzt Notiz %d auf "
585 "'Aktiv'.",state,id)));
586 state=NOTE_ACTIVE;
587 }
588 }
589 notizen[id,NOTE_STATUS]=state;
590 save_me(60);
591 tell_object(PL,BS(
592 sprintf("Status von Notiz %d geaendert.",id)));
593 tell_room(environment(TI),
594 BS(sprintf("%s kritzelt auf %s Notizzettel herum.\n",
Arathorn510e4922021-04-02 15:03:23 +0200595 capitalize(({string})TI->name(WER)),
596 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihrem" : "seinem")
MG Mud User88f12472016-06-24 23:31:02 +0200597 )),({TI}));
598 return(1);
599}
600
601int ErsetzeText(string str) {
602 string *arr;
603 int id;
604
605 notify_fail("Bitte eine ID und einen neuen Text angeben!\n");
606 if(!objectp(TI)) return(0);
607
608 if(!check_allowed()) {
609 if(objectp(this_interactive()))
610 tell_object(this_interactive(),
611 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
612 return(0);
613 }
Arathorn510e4922021-04-02 15:03:23 +0200614 str=({string})PL->_unparsed_args(0);
MG Mud User88f12472016-06-24 23:31:02 +0200615 if (!stringp(str) || !sizeof(str))
616 return(0);
617
618 if (!checkStatus()) {
619 tell_object(PL,BS(
620 "Dein Merkzettel ist bluetenweiss und leer! Wie kommt das denn?? "
621 "Hast Du nix zu tun?"));
622 return(1);
623 }
624 arr=explode(str," ");
625 arr-=({""}); // "" entfernen
626 if (sizeof(arr)<2)
627 return(0);
628 id=to_int(arr[0]);
629 str=implode(arr[1..]," "); //text wiederherstellen, ohne erstes Element
630 if (!sizeof(str)) return(0);
631 if (!member(notizen,id)) {
632 tell_object(PL,
633 sprintf("Es gibt keine Notiz mit der ID: %d\n",id));
634 return(1);
635 }
636 notizen[id,NOTE_TEXT]=str;
637 save_me(60);
638 tell_object(PL,BS(
639 sprintf("Text von Notiz %d ersetzt.",id)));
640 tell_room(environment(TI),
641 BS(sprintf("%s radiert zuerst etwas auf %s Notizzettel herum und "
642 "schreibt anschliessend sorgfaeltig etwas neues auf.\n",
Arathorn510e4922021-04-02 15:03:23 +0200643 capitalize(({string})TI->name(WER)),
644 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihrem" : "seinem")
MG Mud User88f12472016-06-24 23:31:02 +0200645 )),({TI}));
646 return(1);
647}
648
649int ErgaenzeText(string str) {
650 string *arr;
651 int id;
652
653 notify_fail("Bitte eine ID und einen Text angeben!\n");
654 if(!objectp(TI)) return(0);
655 if(!check_allowed()) {
656 if(objectp(this_interactive()))
657 tell_object(this_interactive(),
658 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
659 return(0);
660 }
Arathorn510e4922021-04-02 15:03:23 +0200661 str=({string})PL->_unparsed_args(0);
MG Mud User88f12472016-06-24 23:31:02 +0200662 if (!stringp(str) || !sizeof(str))
663 return(0);
664
665 if (!checkStatus()) {
666 tell_object(PL,BS(
667 "Dein Merkzettel ist bluetenweiss und leer! Wie kommt das denn?? "
668 "Hast Du nix zu tun?"));
669 return(1);
670 }
671 arr=explode(str," ");
672 arr-=({""}); // "" entfernen
673 if (sizeof(arr)<2)
674 return(0);
675 id=to_int(arr[0]);
676 str="\n";
677 str+=implode(arr[1..]," "); //text wiederherstellen
678 if (!member(notizen,id)) {
679 tell_object(PL,
680 sprintf("Es gibt keine Notiz mit der ID: %d\n",id));
681 return(1);
682 }
683 notizen[id,NOTE_TEXT]+=str;
684 save_me(60);
685 tell_object(PL,BS(
686 sprintf("Text von Notiz %d ergaenzt.",id)));
687 tell_room(environment(TI),
688 BS(sprintf("%s ergaenzt etwas auf %s Notizzettel.\n",
Arathorn510e4922021-04-02 15:03:23 +0200689 capitalize(({string})TI->name(WER)),
690 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihrem" : "seinem")
MG Mud User88f12472016-06-24 23:31:02 +0200691 )),({TI}));
692 return(1);
693}
694
695int ZeigeZettel(string str) {
696 //anderen zeigen, wie furchtbar viel man zu tun hat.
697 object pl;
MG Mud User88f12472016-06-24 23:31:02 +0200698 int *ids;
699
700 notify_fail("Wem willst Du Deinen Merkzettel zeigen?\n");
701 if (!objectp(TI)) return(0);
702 if (!environment() || !environment(environment()))
703 return(0);
704 if (!stringp(str) || !sizeof(str)) return(0);
705 if(!check_allowed()) {
706 if(objectp(this_interactive()))
707 tell_object(this_interactive(),
708 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
709 return(0);
710 }
711 if (!checkStatus()) {
712 tell_object(PL,BS(
713 "Dein Merkzettel ist bluetenweiss und leer! Wie kommt das denn?? "
714 "Hast Du nix zu tun? Du willst anderen Leuten doch bestimmt nicht "
715 "zeigen, dass Du nix zu tun hast, oder?"));
716 return(1);
717 }
718 if(!objectp(pl=present(str,environment(environment()))))
719 return(0);
720 if (!living(pl))
721 return(0);
722
723 ids=filter(m_indices(notizen),#'note_filter,NOTE_ACTIVE);
Arathorn5fecd832020-07-27 23:46:37 +0200724 tell_object(TI,BS("Du zeigst "+({string})pl->Name(WEM)+
725 " voller Stolz deinen vollen Merkzettel."));
MG Mud User88f12472016-06-24 23:31:02 +0200726 tell_room(environment(environment()),BS(sprintf(
727 "%s zeigt %s %s Merkzettel.",
Arathorn5fecd832020-07-27 23:46:37 +0200728 ({string})TI->Name(WER), ({string})pl->Name(WEM),
729 ({string})TI->QueryPossPronoun(MALE,WEN,SINGULAR))),
MG Mud User88f12472016-06-24 23:31:02 +0200730 ({TI,pl}));
731 switch(sizeof(ids)) {
732 case 0..10:
733 tell_object(pl,BS(sprintf("%s zeigt Dir voller Stolz %s Merkzettel. Du "
734 "wirfst einen schnellen Blick darueber und zaehlst %d "
735 "Notizen. Na, soviel ist das ja zum Glueck noch nicht.",
Arathorn5fecd832020-07-27 23:46:37 +0200736 ({string})TI->Name(WER),
737 ({string})TI->QueryPossPronoun(MALE,WEN,SINGULAR),
MG Mud User88f12472016-06-24 23:31:02 +0200738 sizeof(ids))));
739 break;
740 case 11..20:
741 tell_object(pl,BS(sprintf("%s zeigt Dir voller Stolz %s Merkzettel. Du "
742 "wirfst einen schnellen Blick darueber und zaehlst %d "
743 "Notizen. Oh, das ist ja schon so einiges!",
Arathorn5fecd832020-07-27 23:46:37 +0200744 ({string})TI->Name(WER),
745 ({string})TI->QueryPossPronoun(MALE,WEN,SINGULAR),
MG Mud User88f12472016-06-24 23:31:02 +0200746 sizeof(ids))));
747 break;
748 default:
749 tell_object(pl,BS(sprintf("%s zeigt Dir voller Stolz %s Merkzettel. Du "
750 "wirfst einen schnellen Blick darueber und zaehlst %d "
751 "Notizen. Puuuh. %s hat ganz schoen viel zu tun! In "
752 "Dir regt sich leises Mitleid.",
Arathorn5fecd832020-07-27 23:46:37 +0200753 ({string})TI->Name(WER),
754 ({string})TI->QueryPossPronoun(MALE,WEN,SINGULAR),
755 sizeof(ids),
756 ({string})TI->Name(WER) )));
MG Mud User88f12472016-06-24 23:31:02 +0200757 break;
758 }
759 return(1);
Arathorn510e4922021-04-02 15:03:23 +0200760}
MG Mud User88f12472016-06-24 23:31:02 +0200761
762int WedelZettel(string str) {
763 object pl;
764 string rwedel;
765 //wedelt anderen mit dem Zettel vor der Nase herum.
766 notify_fail("Wem willst Du Deinen Merkzettel zeigen?\n");
767 if (!objectp(TI)) return(0);
768 if (!environment() || !environment(environment()))
769 return(0);
770 if (!stringp(str) || !sizeof(str)) return(0);
771 if(!check_allowed()) {
772 if(objectp(this_interactive()))
773 tell_object(this_interactive(),
774 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
775 return(0);
776 }
777 if (!objectp(pl=find_player(str))) return(0);
778 if (!present(pl,environment(environment())))
779 rwedel="aus der Ferne";
780
Arathorn5fecd832020-07-27 23:46:37 +0200781 tell_object(PL,BS("Du wedelst "+({string})pl->Name(WEM)+
782 (rwedel?" "+rwedel:"")+
783 " heftig mit Deinem Merkzettel vor der Nase herum."));
784 tell_object(pl,BS(({string})PL->Name(WER)+ " wedelt Dir "
785 +(rwedel?rwedel+" ":"") +"heftig mit "
786 +({string})PL->QueryPossPronoun(MALE,WEM,SINGULAR)
787 +" Merkzettel vor der Nase herum."));
788 tell_room(environment(pl),BS(({string})PL->Name(WER) + " wedelt "
789 +({string})pl->Name(WEM) + (rwedel?" "+rwedel:"") + " heftig mit "
790 +({string})PL->QueryPossPronoun(MALE,WEM,SINGULAR)
791 +" Merkzettel vor der Nase herum."),({PL,pl}));
MG Mud User88f12472016-06-24 23:31:02 +0200792 return(1);
793}
794
795int LiesDeps(string str) {
796 //erstmal (rekursiv) alle Abhaengigkeiten einer Notiz ermitteln
797 string *arr;
798 int id, rec, i;
799 int *liste;
800
801 notify_fail("Bitte eine ID und ggf. '1' fuer rekursive Suche angeben!\n");
802 if(!objectp(TI)) return(0);
803 if(!check_allowed()) {
804 if(objectp(this_interactive()))
805 tell_object(this_interactive(),
806 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
807 return(0);
808 }
Arathorn510e4922021-04-02 15:03:23 +0200809 str=({string})PL->_unparsed_args(0);
MG Mud User88f12472016-06-24 23:31:02 +0200810 if (!stringp(str) || !sizeof(str))
811 return(0);
812
813 if (!checkStatus()) {
814 tell_object(PL,BS(
815 "Dein Merkzettel ist bluetenweiss und leer! Wie kommt das denn?? "
816 "Hast Du nix zu tun?"));
817 return(1);
818 }
819 arr=explode(str," ");
820 arr-=({""}); // "" entfernen
821 if (sizeof(arr)==1) {
822 id=to_int(arr[0]);
823 rec=0; //Standard: keine Rekursion
824 }
825 else if (sizeof(arr)>=2) {
826 id=to_int(arr[0]);
827 rec=to_int(arr[1]);
828 }
829 else {
830 return(0);
831 }
832 if (!member(notizen,id)) {
833 tell_object(PL,
834 sprintf("Es gibt keine Notiz mit der ID: %d\n",id));
835 return(1);
836 }
837 //Notizen, von denen id abhaengt, holen
838 //und nur aktive Notizen behalten
839 liste=filter(getDeps(id,rec),#'note_filter,NOTE_ACTIVE);
840 //nach Prioritaet sortieren
841 liste=sort_array(liste,#'sort_prio);
842 //dann mal ausgeben.
843 i=sizeof(liste);
844 tell_object(PL,BS(sprintf("Du vertiefst Dich in die Abhaenhigkeiten von Notiz: %d\n",id)));
845 while(i--) {
846 tell_object(PL,_LiesNotiz(liste[i])+"\n");
847 }
848 tell_room(environment(TI),
849 BS(sprintf("%s liest etwas auf %s Merkzettel.\n",
Arathorn510e4922021-04-02 15:03:23 +0200850 capitalize(({string})TI->name(WER)),
851 ((({int})TI->QueryProp(P_GENDER))==FEMALE ? "ihrem" : "seinem")
MG Mud User88f12472016-06-24 23:31:02 +0200852 )),({TI}));
853 return(1);
854}
855
856int Expire(string str) {
857 float age;
858 int sekunden, i;
859 int *liste;
860 string res;
861
862 notify_fail("Bitte angeben, wie alt zu loeschende Notizen sein sollen (in Tagen)!\n");
863 if(!objectp(TI)) return(0);
864 if(!check_allowed()) {
865 if(objectp(this_interactive()))
866 tell_object(this_interactive(),
867 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
868 return(0);
869 }
Arathorn510e4922021-04-02 15:03:23 +0200870 str=({string})PL->_unparsed_args(0);
MG Mud User88f12472016-06-24 23:31:02 +0200871 if (!stringp(str) || !sizeof(str))
872 return(0);
873 age=to_float(str);
874 if (age<=0) return(0);
875 sekunden=time() - (int)(age*86400);
876 if (!checkStatus()) {
877 tell_object(PL,BS(
878 "Dein Merkzettel ist bluetenweiss und leer! Wie kommt das denn?? "
879 "Hast Du nix zu tun?"));
880 return(1);
881 }
882 //abgehakte Notizen ermitteln
883 liste=filter(m_indices(notizen),#'note_filter,NOTE_FINISHED);
884 //Notizen ermitteln, die lang genug abgehakt sind.
885 liste=filter(liste,#'aelter_als,sekunden);
886 if (!sizeof(liste)) {
887 tell_object(PL,BS("Keine Notizen gefunden, die lang genug abgehakt sind."));
888 return(1);
889 }
890 res=sprintf("Archivierte Notizen vom %s\n\n",dtime(time()));
891 for (i=sizeof(liste);i--;) {
892 //Infos noch einmal ausgeben und loeschen
893 res+=_LiesNotiz(liste[i])+"\n";
894 m_delete(notizen,liste[i]);
895 }
896 res+="\n";
897 write_file(ARCHIVE(owner),res);
898 tell_object(PL,BS(sprintf(
899 "%d alte Notizen wurden nach %s archiviert und geloescht.",
900 sizeof(liste),ARCHIVE(owner))));
901 return(1);
902}
903
904//
905static string _LiesNotiz(int id) {
906 //Funktion verlaesst sich drauf, dass id existiert. ;-)
907 string res,txt;
908 res=BSL(sprintf("%-11s: %d","Notiz-Nr.",id));
909 res+=break_string(notizen[id,NOTE_TEXT],78,"Notiztext : ",
910 BS_INDENT_ONCE|BS_LEAVE_MY_LFS);
911 res+=sprintf("%-11s: %d\n","Prioritaet",notizen[id,NOTE_PRIO]);
912 //wenn nicht aktiv: Status anzeigen
913 if (notizen[id,NOTE_STATUS]!=NOTE_ACTIVE) {
914 switch(notizen[id,NOTE_STATUS]) {
915 case NOTE_INACTIVE:
916 txt="Inaktiv/Pause";
917 break;
918 case NOTE_FINISHED:
919 txt="Abgeschlossen";
920 break;
921 case NOTE_PENDING:
922 txt="Warte auf Rueckmeldung";
923 break;
924 default: txt=sprintf("%d",notizen[id,NOTE_STATUS]); break;
925 }
926 res+=sprintf("%-11s: %s\n","Status",txt);
927 //wenn abgeschlossen: Endezeit anzeigen
928 if (notizen[id,NOTE_STATUS]==NOTE_FINISHED)
929 res+=sprintf("%-11s: %s\n","Endezeit",
930 dtime(notizen[id,NOTE_CLOSETIME]));
931 }
932 res+=sprintf("%-11s: %s\n","Merkzeit",dtime(notizen[id,NOTE_STARTTIME]));
933 //nur wenn Abhaengigkeiten: anezeigen
934 if (pointerp(notizen[id,NOTE_DEPS]) && sizeof(notizen[id,NOTE_DEPS])) {
935 txt=implode(map(notizen[id,NOTE_DEPS],#'to_string)," ");
936 res+=sprintf("%-11s: %s\n","abh. von",txt);
937 }
938 //nur wenn Helfer: anezeigen
939 if (pointerp(notizen[id,NOTE_HELPER]) && sizeof(notizen[id,NOTE_HELPER]))
940 res+=sprintf("%-11s: %s\n","Helfer",
941 implode(notizen[id,NOTE_HELPER]," "));
942 return(res);
943}
944
945//int. Helfer
946static int note_filter(int id,int filterstate) {
947 //kein filter -> passt immer
948 if (!filterstate) return(1);
949 if (member(notizen,id) &&
950 notizen[id,NOTE_STATUS]==filterstate)
951 return(1);
952 return(0);
953}
954
955static int aelter_als(int id,int zeit) {
956 //liefert 1 zurueck, wenn Schliesszeit der Notiz laenger als 'sekunden' her ist, sonst 0.
957 if (notizen[id,NOTE_CLOSETIME]<zeit) return(1);
958 return(0);
959}
960
961static string update_deps(string str,int id) {
962 //wandelt str nach int um
963 //schaut, ob dep positiv und noch nicht bekannt ist, wenn ja:
964 //zu deps hinzufuegen
965 //wenn dep < 0 und bekannt ist: aus deps entfernen
966 //Rueckgabewert ist egal. ;-)
967 int dep;
968 dep=to_int(str);
969 if (dep>0 && member(notizen[id,NOTE_DEPS],dep)==-1)
970 notizen[id,NOTE_DEPS]+=({dep});
971 else if (dep<0 && member(notizen[id,NOTE_DEPS],dep*-1)!=-1)
972 notizen[id,NOTE_DEPS]-=({dep*-1});
973 return("");
974}
975
976static int *getDeps(int id, int rec) {
977 //ermittelt (ggf. rekursiv bei rec!=0) die Abhaengigkeiten einer Notiz
978 int i, *liste;
979 liste=notizen[id,NOTE_DEPS];
980 //jetzt ggf. noch rekursiv weiterholen
981 if (rec) {
982 i=0;
983 while(i<sizeof(liste)) {
984 //nicht schreien. ;-)
985 if (get_eval_cost()<100000) {
986 tell_object(PL,"Fehler: Zu lange Rekursion bei "
987 "Ermitteln der Abhaengigkeiten, Abbruch\n");
988 return(liste);
989 }
990 //Abhaengigkeiten der anderen Abhaengigkeiten hinten anhaengen.
991 liste+=notizen[liste[i],NOTE_DEPS];
992 i++;
993 }
994 }
995 return(liste);
996}
997
998static int *getUnresolvedDeps(int id) {
999 //liefert die Anzahl der nicht abgehakten Notizen, von denen eine
1000 //Notiz abhaengig ist (rekursiv)
1001 int *liste;
1002 //Abhaengigkeiten rekursiv holen
1003 liste=getDeps(id,1);
1004 //nicht abgehakte zurueckgeben
1005 return(liste-filter(liste,#'note_filter,NOTE_FINISHED));
1006}
1007
Zesstraff356512018-08-27 20:20:36 +02001008public varargs void init(object origin) {
MG Mud User88f12472016-06-24 23:31:02 +02001009 ::init();
1010 //wenn kein Env, Env kein magier oder nicht der Eigentuemer ist: weg
1011 if (!objectp(environment()) || !IS_LEARNER(environment())
1012 || (stringp(owner) && getuid(environment())!=owner) ) {
1013 if (find_call_out("remove") == -1)
1014 call_out("remove",1,1);
1015 return;
1016 }
1017 //beim erstmaligen Bewegen in einen Magier wird der als Eigentuemer
1018 //registriert. Danach kommt diese Info aus P_AUTOLOAD
1019 if (!stringp(owner))
1020 owner=getuid(environment());
1021}
1022
1023static nomask status check_allowed() {
1024 //Zugriff auf die Daten fuer den Eigentuemer
1025 if(objectp(this_interactive()) &&
1026 getuid(this_interactive())==owner
1027 && !process_call())
1028 return(1);
1029 return(0);
1030}
1031
1032protected int restore_me() {
1033 //laedt Savefile im Home vom Magier
1034 if(!stringp(owner)) return(0);
1035 if(!restore_object(SAVEFILE(owner))) {
1036 maxusedID=1;
1037 notizen=0;
1038 //cache=({});
1039 return(0);
1040 }
1041 return(1);
1042}
1043
1044varargs protected void save_me(int delay) {
1045 //speichert Savefile im Home vom Magier
1046 if(!stringp(owner)) return;
1047 //wenn maxusedID==0 wurde der zettel noch nicht ordentlich initialisiert
1048 //bzw. restauriert. In diesem Fall wuerde ein leeres Savefile geschrieben
1049 if (maxusedID==0)
1050 restore_me();
1051 if(!delay)
1052 //direkt speichen. ;-)
1053 save_object(SAVEFILE(owner));
1054 else {
1055 //verzoegert speichern, wenn schon ein call_out laeuft, nehm ich den
1056 if(find_call_out(#'save_me)==-1)
1057 call_out(#'save_me,delay);
1058 }
1059}
1060
1061varargs int remove(int silent) {
1062 //erstmal speichern. ;-)
1063 save_me();
1064 return ::remove(silent);
1065}
1066
1067static string query_autoloadobj() {
1068 //in P_AUTOLOAD wird nur der Eigentuemer gespeichert
1069 return owner;
1070}
1071
1072static string set_autoloadobj(mixed arg) {
1073 //Eigentuemer aus P_AUTOLOAD restaurieren
1074 if (stringp(arg))
1075 owner=arg;
1076 return(owner);
1077}
1078
1079//Shadow unerwuenscht
1080int query_prevent_shadow() {return(1);}
1081
1082varargs static int checkStatus(int nocache) {
1083 //schaut, ob Notizen da, ob der Cache Ok ist, etc.
1084 //liefert Anzahl der Notizen auf dem Merkzettel
1085
1086 //wenn keine Notizen da sind, schauen, ob das Savefile eingelesen werden
1087 //kann
1088 if (!mappingp(notizen) || !sizeof(notizen))
1089 restore_me();
1090 if (!mappingp(notizen)) return(0);
1091/* Cache ist eigentlich nicht noetig und mir gerade zu unpraktisch, raus damit.
1092 //wenn keine Aktualisierung des Cache erwuenscht ist
1093 if(nocache) return(0);
1094
1095 if (sizeof(notizen)) {
1096 if(!pointerp(cache) || !sizeof(cache)) {
1097 //cache erneuern
1098 cache=sort_array(m_indices(notizen),"sort_prio");
1099 }
1100 }
1101 return(sizeof(cache)); //aequivalent zu sizeof(notizen)
1102 */
1103 return(sizeof(notizen));
1104}
1105
1106static status sort_prio(int key1, int key2) {
1107 // 1, falls falsche Reihenfolge,
1108 // 0, wenn richtige
1109 // und zwar _absteigend_, also hoechste Prio in liste[0] !
1110 return(notizen[key1,NOTE_PRIO]<=notizen[key2,NOTE_PRIO]);
1111}
1112
1113
1114//*******************************************************
1115
1116// Debugging
1117mapping QueryNotizen() {
1118
1119 if(!check_allowed()) {
1120 if(objectp(this_interactive()))
1121 tell_object(this_interactive(),
1122 BS("Dieser Zugriff auf den Merkzettel wurde nicht erlaubt."));
1123 return(0);
1124 }
1125 checkStatus();
1126 return(notizen);
1127}
1128
1129//int *QueryCache() {return(cache);}
1130
1131int QuerySize() {return(sizeof(notizen));}
1132
1133string QueryOwner() {return(owner);}