Filter fuer Questliste

Bei der Ausgabe der Questliste kann man nun auch nach
geloesten und ungeloesten Quests filtern.

Change-Id: I4e3a964914c0cdf141a38de7d1ae5cd6c86192d1
diff --git a/secure/questmaster.c b/secure/questmaster.c
index 9007460..6a7d952 100644
--- a/secure/questmaster.c
+++ b/secure/questmaster.c
@@ -434,7 +434,10 @@
     return i[4] > j[4];
 }
 
-varargs string liste(mixed pl) {
+#define FILTER_GELOEST   1
+#define FILTER_UNGELOEST 2
+varargs string liste(mixed pl, int geloest_filter)
+{
   int qgroups, i, j, qrfw;
   mixed *qlists, *qgrouped, *qtmp;
   string str;
@@ -448,7 +451,7 @@
   if(!objectp(pl))
     return "Ohne Spielernamen/Spielerobjekt gibt es auch keine Liste.\n";
 
-  if ( ((string)pl->QueryProp(P_TTY)) == "ansi")
+  if ( (pl->QueryProp(P_TTY)) == "ansi")
   {
       ja = ANSI_GREEN + "ja" + ANSI_NORMAL;
       nein = ANSI_RED + "nein" + ANSI_NORMAL;
@@ -474,20 +477,30 @@
   qgrouped = QueryGroupedKeys();
 
   for (i=sizeof(qgrouped)-1;i>=0; i--)
-    for (j=sizeof(qgrouped[i])-1;j>=0; j--) {
+    for (j=sizeof(qgrouped[i])-1;j>=0; j--)
+    {
       qtmp = QueryQuest(qgrouped[i][j]);
-      qlists[i] += ({ ({
-        qgrouped[i][j],
-        qtmp[Q_QP],
-        QCLASS_STARS(qtmp[Q_CLASS]),
-        capitalize(QATTR_STRINGS[qtmp[Q_ATTR]]),
-        qtmp[Q_DIFF],
-        (qtmp[Q_AVERAGE][1]>10 /*&& IS_ARCH(this_player())*/
-                  ? to_string(to_int(qtmp[Q_AVERAGE][0]))
-                  : "-"),
-        capitalize(qtmp[Q_WIZ]),
-        (int)pl->QueryQuest(qgrouped[i][j]) == OK ? ja : nein
-      }) });
+      int geloest_status = pl->QueryQuest(qgrouped[i][j]);
+      // Quest ausgeben, wenn "kein Filter" gegeben oder Quest geloest und
+      // Filter "geloest" oder Quest ungeloest und Filter "ungeloest".
+      if ( !(geloest_filter & (FILTER_GELOEST|FILTER_UNGELOEST))
+          || ((geloest_filter & FILTER_GELOEST) && geloest_status == OK)
+          || ((geloest_filter & FILTER_UNGELOEST) && geloest_status != OK)
+         )
+      {
+        qlists[i] += ({ ({
+          qgrouped[i][j],
+          qtmp[Q_QP],
+          QCLASS_STARS(qtmp[Q_CLASS]),
+          capitalize(QATTR_STRINGS[qtmp[Q_ATTR]]),
+          qtmp[Q_DIFF],
+          (qtmp[Q_AVERAGE][1]>10
+                    ? to_string(to_int(qtmp[Q_AVERAGE][0]))
+                    : "-"),
+          capitalize(qtmp[Q_WIZ]),
+          geloest_status == OK ? ja : nein
+        }) });
+      }
     }
 
   for( i=0; i<qgroups; i++ )