Filter fuer Questliste
Bei der Ausgabe der Questliste kann man nun auch nach
geloesten und ungeloesten Quests filtern.
Change-Id: I4e3a964914c0cdf141a38de7d1ae5cd6c86192d1
diff --git a/doc/help/abenteuerliste b/doc/help/abenteuerliste
index 7ac2ffe..370ddba 100644
--- a/doc/help/abenteuerliste
+++ b/doc/help/abenteuerliste
@@ -4,8 +4,12 @@
Die Liste der spielbaren Abenteuer haengt in jeder Gilde im MorgenGrauen aus.
Sie ist mit dem Kommando "liste" abrufbar.
+ Will man nur die ungeloesten Quests anzeigen lassen, geht dies mit dem
+ Kommando "liste ungeloest", die Liste der geloesten Quests entsprechend
+ mit "liste geloest".
+
Die in der Liste verwendeten Abkuerzungen werden im Folgenden erlaeutert:
-
+
AP = Fuer die Quest vergebene Abenteuerpunkte
Klasse = Subjektive Einstufung innerhalb der Gruppe bzgl. Arbeitsaufwand,
Dauer oder Gefahren
@@ -30,5 +34,5 @@
SIEHE AUCH:
abenteuer, stufen, stufenpunkte, schlafe, kampf, reset
-26.05.2016, Zesstra
+ 06.01.2020, Zesstra
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++ )
diff --git a/std/room/gilde.c b/std/room/gilde.c
index d402ac9..a153b96 100644
--- a/std/room/gilde.c
+++ b/std/room/gilde.c
@@ -347,8 +347,18 @@
{
if (!this_player())
return 0;
+ int geloest_filter;
+ switch(arg)
+ {
+ case "geloest":
+ geloest_filter = 1;
+ break;
+ case "ungeloest":
+ geloest_filter = 2;
+ break;
+ }
- string str = QM->liste(this_player());
+ string str = QM->liste(this_player(), geloest_filter);
this_player()->More( str, 0 );
return 1;