Team autoinform fuer alle Mitglieder.
Teammitglieder koennen sich eine Kopie des Berichtes von
autoinform ausgeben lassen, wenn der Teamleiter informiert wird.
Hierfuer wird die Quest 'Hilf den Gnarfen' benoetigt.
Der Teamleiter kann weiterhin allerdings als einziger einstellen,
*was* im Bericht gesendet wird. Und schaltet der Teamleiter den
Bericht aus, gibt es auch keine Informationen anderer Teammitglieder
mehr.
Funktion autoinform dokumentiert.
Fuer die Nutzung von autoinform ist die Quest 'Hilf den Gnarfen'
noetig.
Change-Id: I11b107a57706dd9c7c84049a97a463710269c5e8
diff --git a/doc/help/teamkampf b/doc/help/teamkampf
index 1af65c3..7e1cb53 100644
--- a/doc/help/teamkampf
+++ b/doc/help/teamkampf
@@ -120,6 +120,25 @@
vor anderen Teammitgliedern eingeordnet werden.
Ansonsten wird nach AR geordnet.
+team autoinform Hiermit kann ein automatischer Bericht ueber
+ Aenderungen der LP oder KP von Teammitgliedern
+ eingestellt werden. Nur der Teamleiter kann einstellen,
+ was berichtet wird, alle anderen im Team koennen nur
+ einstellen, dass sie auch informiert werden wollen.
+ Normalerweise wird der Bericht gesammelt hoechstens
+ einmal pro Sekunde gesendet. Fuer die Nutzung dieses
+ Berichts ist die Quest 'Hilf den Gnarfen' noetig.
+ Mit Leerzeichen getrennt koennen die folgenden Angaben
+ gemacht werden:
+ aus: autoinform abschalten
+ ein: ueber fallende LP informiert werden
+ +lp: ueber steigende und fallende LP informiert werden
+ kp: ueber fallende KP informiert werden
+ +kp: ueber steigende und fallende KP informiert werden
+ sofort: bei Aenderungen sofort einzeln informieren,
+ nicht nur einmal pro Sekunde. Kann den Scroll
+ deutlich erhoehen!
+
team farben Damit laesst sich aendern, ab wann die eigenen
Lebenspunkte bzw. Konzentrationspunkte gelb oder
gar rot (bzw. fett) angezeigt werden.
diff --git a/obj/team.c b/obj/team.c
index 9e481b0..607e07a 100644
--- a/obj/team.c
+++ b/obj/team.c
@@ -11,6 +11,8 @@
#include <new_skills.h>
#include <ansi.h>
#include <wizlevels.h>
+#include <living/comm.h>
+
#define ME this_object()
#define PO previous_object()
#define TP this_player()
@@ -43,6 +45,7 @@
private nosave mapping autoinf_hp;
private nosave mapping autoinf_sp;
private nosave int autoinf_time;
+private nosave object *autoinf_subscribers = ({});
private nosave string *hist;
private nosave object debugger;
@@ -1261,15 +1264,52 @@
string *words,txt;
int i,fl;
+ // Eigentlich braeuchte man die nur fuer die SP-Benachrichtigungen, aber
+ // dann wird alle viel komplizierter, weil man dann bei Aenderungen und
+ // Teamleiterwechseln pruefen muss etc.
+ if (!(TP->QueryProp(P_CAN_FLAGS) & CAN_REPORT_SP)) {
+ TP->ReceiveMsg("Du musst zunaechst die Quest \"Hilf den "
+ "Gnarfen\" bestehen, um diese Funktion nutzen zu koennen.",
+ MT_NOTIFICATION|MSG_DONT_IGNORE);
+ return 1;
+ }
if (TP!=leader)
- return notify_fail("Nur der Teamleiter kann automatisch "+
- "informiert werden.\n"),0;
+ {
+ switch(arg)
+ {
+ case "an":
+ case "ein":
+ if (!(TP in autoinf_subscribers))
+ autoinf_subscribers += ({TP});
+ TP->ReceiveMsg("Du erhaelst eine Kopie des Autoinform-Berichtes "
+ "an den Teamleiter, falls bzw. sobald dieser einen solchen "
+ "konfiguriert hat.",MT_NOTIFICATION|MSG_DONT_IGNORE);
+ break;
+
+ case "aus":
+ autoinf_subscribers -= ({TP});
+ TP->ReceiveMsg("Du erhaelst keine Kopie des Autoinform-Berichtes "
+ "an den Teamleiter.",MT_NOTIFICATION|MSG_DONT_IGNORE);
+ break;
+
+ default:
+ notify_fail("Nur der Teamleiter kann den Inhalt des "
+ "Autoinform-Berichts konfigurieren.\n");
+ return 0;
+ }
+ return 1;
+ }
+ //else TP == leader
words=old_explode(arg?arg:""," ");fl=0;
- for (i=sizeof(words)-1;i>=0;i--) {
+ for (i=sizeof(words)-1;i>=0;i--)
+ {
switch(words[i]) {
case "aus":
- write("Du wirst nicht mehr automatisch informiert.\n");
+ TP->ReceiveMsg(
+ "Du und das Team werden nicht mehr automatisch informiert.",
+ MT_NOTIFICATION|MSG_DONT_IGNORE);
autoinf_flags=0;
+ autoinf_subscribers -= ({TP});
return 1;
case "+kp":
fl|=AUTOINF_SP_PLUS;
@@ -1286,14 +1326,16 @@
case "sofort":
fl|=AUTOINF_INSTANT;
break;
- default:
- ;
}
}
- if (!fl)
- return notify_fail("WIE moechtest Du automatisch informiert werden?\n"),0;
+ if (!fl) {
+ notify_fail("WIE moechtest Du automatisch informiert werden?\n");
+ return 0;
+ }
if (fl==AUTOINF_INSTANT) fl|=AUTOINF_HP_MINUS;
autoinf_flags=fl;
+ if (!(TP in autoinf_subscribers))
+ autoinf_subscribers += ({TP});
txt="Du wirst"+((fl&AUTOINF_INSTANT)?" sofort ":" ")+"informiert, wenn";
if (fl&(AUTOINF_HP_PLUS|AUTOINF_HP_MINUS)) {
txt+=" die Lebenspunkte eines Teammitglieds";
@@ -1304,7 +1346,7 @@
txt+=" die Konzentrationspunkte";
if (fl&(AUTOINF_SP_PLUS)) txt+=" sich aendern"; else txt+=" fallen";
}
- write(break_string(txt+".\n",78));
+ TP->ReceiveMsg(txt+".", MT_NOTIFICATION|MSG_DONT_IGNORE);
return 1;
}
@@ -1330,11 +1372,17 @@
if (str!="") str+=", ";
str+=sprintf("%s: %d KP",ob->name(WER),autoinf_sp[ob]);
}
-
- if (str!="" && IsMember(leader))
- tell_object(leader,break_string(capitalize(str)+"\n",78));
autoinf_hp=([]);
autoinf_sp=([]);
+ str = capitalize(str);
+ // Und an alle Subscriber zustellen.
+ foreach(object pl: autoinf_subscribers)
+ {
+ if (pl)
+ pl->ReceiveMsg(str, MT_NOTIFICATION|MSG_DONT_IGNORE);
+ else
+ autoinf_subscribers -= ({0}); // bereinigen
+ }
}
void NotifyHpChange() {