P_VISUALBELL durch P_ALERT ersetzt
P_ALERT enthaelt ein Bitfeld, in dem verschiedene Konfigurationen rund
um Benachrichtigungen gespeichert werden koennen.
Dies ist eine Vorbereitung auf eine Aenderung des Klingeltons.
Langfristig soll hier auch gespeichert werden, ob der Spieler
beispielsweise lieber grafische Benachrichtigungen o.Ae. erhalten
moechte.
Bei Anwendung Regionen umstellen.
Change-Id: I0f872777d895ae1cd9fe4c73bdb8a7739c20cb68
diff --git a/doc/sphinx/lfun/ReceiveMsg.rst b/doc/sphinx/lfun/ReceiveMsg.rst
index 1734eb0..153cc73 100644
--- a/doc/sphinx/lfun/ReceiveMsg.rst
+++ b/doc/sphinx/lfun/ReceiveMsg.rst
@@ -232,6 +232,8 @@
MSG_DONT_IGNORE Nachricht kann nicht ignoriert werden
MSG_ALL_TYPES alle relevanten Sinne fuer die angegebenen Nachrichten-
typen muessen benutzbar sein (UND statt ODER).
+ MSG_ALERT Nachricht loest eine vom Spieler konfigurierte
+ Benachrichtigung aus (z.B. Piepston)
MSG_BS_LEAVE_LFS wie BS_LEAVE_MY_LFS fuer break_string()
MSG_BS_SINGLE_SPACE wie BS_SINGLE_SPACE fuer break_string()
@@ -282,4 +284,5 @@
Efuns: tell_object(E), catch_tell(L), catch_msg(L)
query_verb(E), query_once_interactive(E), break_string(SE)
-Letzte Aenderung: 07.01.2022
+Letzte Aenderung: 22.01.2022
+
diff --git a/doc/sphinx/props/P_ALERT.rst b/doc/sphinx/props/P_ALERT.rst
new file mode 100644
index 0000000..6be860a
--- /dev/null
+++ b/doc/sphinx/props/P_ALERT.rst
@@ -0,0 +1,41 @@
+P_ALERT
+=======
+
+NAME
+----
+
+ P_ALERT "visualbell"
+
+DEFINIERT IN
+------------
+
+ /sys/player/comm.h
+
+BESCHREIBUNG
+------------
+
+ Enthaelt ein Bitfeld, in welchem konfiguriert ist, bei welchen Arten von
+ Ereignissen ein Spieler welche Art von Benachrichtigung erhalten moechte.
+
+ Das Verhalten kann vom Spieler durch unterschiedliche Befehle beeinflusst
+ werden, aktuell sind dies ton und klingelton.
+
+ Aktuell gibt es folgende Moeglichkeiten:
+ - AL_NO_SOUND
+ Keine Pieptoene empfangen
+
+BEMERKUNGEN
+-----------
+
+ Bitte verwendet ReceiveMsg() mit MSG_ALERT, anstatt P_ALERT selbst
+ auszuwerten.
+
+ Das historische Standardverhalten ist 0, hierbei werden Toene empfangen und
+ es sind keine sonstigen Konfigurationen vorhanden.
+
+SIEHE AUCH
+----------
+
+ :doc:`../lfun/ReceiveMsg`
+
+Letzte Aenderung: 22.01.2022, Bugfix
diff --git a/doc/sphinx/props/P_MESSAGE_BEEP.rst b/doc/sphinx/props/P_MESSAGE_BEEP.rst
index 90b3f72..2475669 100644
--- a/doc/sphinx/props/P_MESSAGE_BEEP.rst
+++ b/doc/sphinx/props/P_MESSAGE_BEEP.rst
@@ -3,36 +3,29 @@
NAME
----
-::
- P_MESSAGE_BEEP "message_beep"
+ P_MESSAGE_BEEP "message_beep"
DEFINIERT IN
------------
-::
- /sys/player/comm.h
+ /sys/player/comm.h
BESCHREIBUNG
------------
-::
- Wertebereich: int=0..3600 (Sekunden)
- Wenn gesetzt wird in der Kommunikation des Spielers in den angegebenen
- Zeitraeumen ein Signalton ausgegeben. Wird in player/comm.c in comm_beep()
- verarbeitet.
- Ausgabe erfolgt nur, wenn P_VISUALBELL nicht gesetzt ist.
- Wird im Spielerobjekt gespeichert!
+ Wertebereich: int=0..3600 (Sekunden)
+ Wenn gesetzt wird in der Kommunikation des Spielers in den angegebenen
+ Zeitraeumen ein Signalton ausgegeben. Wird in player/comm.c in comm_beep()
+ verarbeitet.
+ Ausgabe erfolgt in Abhaengigkeit der Konfiguration in :doc:`P_ALERT`.
+
+ Wird im Spielerobjekt gespeichert und mittels des Kommandos klingelton
+ modifiziert.
SIEHE AUCH
----------
-::
- klingelton, ton, P_VISUALBELL, P_MESSAGE_LAST_BEEP
+ klingelton, ton, :doc:`P_ALERT`
-LETZTE AENDERUNG
-----------------
-::
-
- 16. Mai 2007 Ennox
-
+Letzte Aenderung: 22.01.2022, Bugfix
diff --git a/doc/sphinx/props/P_VISUALBELL.rst b/doc/sphinx/props/obsolete/P_VISUALBELL.rst
similarity index 84%
rename from doc/sphinx/props/P_VISUALBELL.rst
rename to doc/sphinx/props/obsolete/P_VISUALBELL.rst
index de55bde..c1575b3 100644
--- a/doc/sphinx/props/P_VISUALBELL.rst
+++ b/doc/sphinx/props/obsolete/P_VISUALBELL.rst
@@ -1,6 +1,11 @@
P_VISUALBELL
============
+********************* VERALTETE PROPERTY ***********************
+* Diese Property ist veraltet und wurde durch P_ALERT ersetzt. *
+* Bitte nicht mehr in neuem Code nutzen. *
+****************************************************************
+
NAME
----
::
diff --git a/std/player/base.c b/std/player/base.c
index 7f616d0..71591e2 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -206,7 +206,6 @@
Set(P_NO_ASCII_ART, SAVE, F_MODE_AS);
- Set(P_VISUALBELL, SAVE, F_MODE_AS);
Set(P_CARRIED_VALUE, SAVE, F_MODE_AS);
Set(P_PROMPT, "> ");
@@ -3654,27 +3653,27 @@
if(!str)
{
write("Derzeitige Einstellung fuer Tonausgabe: "+
- (QueryProp(P_VISUALBELL)?"AUS":"EIN")+".\n");
+ ((QueryProp(P_ALERT) & AL_NO_SOUND)?"AUS":"EIN")+".\n");
return 1;
}
if (str=="ein")
{
- if(!QueryProp(P_VISUALBELL))
+ if(!(QueryProp(P_ALERT) & AL_NO_SOUND))
write("Die Tonausgabe stand schon auf EIN.\n");
else
{
- SetProp(P_VISUALBELL,0);
+ SetProp(P_ALERT, QueryProp(P_ALERT) & ~ AL_NO_SOUND);
write("OK, Tonausgabe auf EIN gestellt.\n");
}
}
else
if (str=="aus")
{
- if(QueryProp(P_VISUALBELL))
+ if(QueryProp(P_ALERT) & AL_NO_SOUND)
write("Die Tonausgabe stand schon auf AUS.\n");
else
{
- SetProp(P_VISUALBELL,1);
+ SetProp(P_ALERT, QueryProp(P_ALERT) | AL_NO_SOUND);
write("OK, Tonausgabe auf AUS gestellt.\n");
}
}
@@ -3848,7 +3847,7 @@
if(pointerp(list=Query(P_WAITFOR)) && sizeof(list) && member(list,who)!=-1)
{
- if (!QueryProp(P_VISUALBELL))
+ if (!(QueryProp(P_ALERT) & AL_NO_SOUND))
name+=sprintf("%c",7); // Char fuer Pieps an den String anhaengen.
// Moechte der Spieler keine ASCII-Grafik sehen, wird diese Meldung ohne
// Leerzeichen formatiert, so dass sie von Screenreadern vorgelesen wird.
diff --git a/std/player/comm.c b/std/player/comm.c
index 0f529a5..dc447b7 100644
--- a/std/player/comm.c
+++ b/std/player/comm.c
@@ -84,6 +84,7 @@
void create()
{
::create();
+ Set(P_ALERT, SAVE, F_MODE_AS);
Set(P_EARMUFFS, 0);
Set(P_EARMUFFS, SAVE, F_MODE);
Set(P_EARMUFFS, SECURED, F_MODE);
@@ -532,7 +533,7 @@
}
private int comm_beep() {
- if (QueryProp(P_VISUALBELL)) return 0; // kein ton
+ if (QueryProp(P_ALERT) & AL_NO_SOUND) return 0; // kein ton
int beep_interval=({int})QueryProp(P_MESSAGE_BEEP);
if (!beep_interval || ((time()-last_beep_time) < beep_interval)) return 0;
last_beep_time=time();
@@ -1931,7 +1932,12 @@
// ggf. Piepston anhaengen. NACH Koboldablage, die sollen erstmal keinen
// Pieps kriegen.
if (comm_beep())
- msg=msg + MESSAGE_BEEP;
+ flags |= MSG_ALERT;
+ }
+
+ if(flags & MSG_ALERT && !(QueryProp(P_ALERT) & AL_NO_SOUND))
+ {
+ msg += MESSAGE_BEEP;
}
// Ausgabenachricht bauen und an den Spieler senden.
diff --git a/std/player/soul.c b/std/player/soul.c
index d75888f..8217f3a 100644
--- a/std/player/soul.c
+++ b/std/player/soul.c
@@ -2723,7 +2723,7 @@
+(adverb ? "." : (flag ? ": "+sfoo : "."));
out_oth="@@gname@@ wirft "+QPP(MALE, WEN)
+" Wecker@@adverb@@ nach @@wem@@.";
- if (!who->QueryProp(P_VISUALBELL))
+ if (!(who->QueryProp(P_ALERT) & AL_NO_SOUND))
out_vic[0]=7; // chr(7)==BEL
else out_vic=out_vic[1..];
return FeelIt();
diff --git a/std/shells/magier.c b/std/shells/magier.c
index 084652e..d415ec5 100644
--- a/std/shells/magier.c
+++ b/std/shells/magier.c
@@ -276,7 +276,7 @@
delayed_write(
({
({sprintf("%s%s IST JETZT %s!!!\n",
- (QueryProp(P_VISUALBELL) ? "" : sprintf("%c",7)),
+ ((QueryProp(P_ALERT) & AL_NO_SOUND)? "" : sprintf("%c",7)),
name,
(vis_change?
(rein?"SICHTBAR":"UNSICHTBAR"):
@@ -287,7 +287,7 @@
delayed_write(
({
({sprintf("%s%s I S T J E T Z T %s !!!\n",
- (QueryProp(P_VISUALBELL) ? "" : sprintf("%c",7)),
+ ((QueryProp(P_ALERT) & AL_NO_SOUND)? "" : sprintf("%c",7)),
name,
(vis_change?
(rein?"S I C H T B A R":"U N S I C H T B A R"):
diff --git a/sys/living/comm.h b/sys/living/comm.h
index 7cb7388..064113a 100644
--- a/sys/living/comm.h
+++ b/sys/living/comm.h
@@ -23,12 +23,14 @@
#define MSG_DONT_WRAP 4096
#define MSG_DONT_IGNORE 8192
#define MSG_ALL_SENSES 16384 // all relevant senses, not one of them
+#define MSG_ALERT 0x8000 // signal an alert to client (e.g. audio)
// Flags < 1048576 (2^20) reserviert fuer Flags
#define MSG_ALL_BS_FLAGS (BS_LEAVE_MY_LFS | BS_SINGLE_SPACE | BS_BLOCK\
| BS_NO_PARINDENT | BS_INDENT_ONCE\
|BS_PREPEND_INDENT)
#define MSG_ALL_FLAGS (MSG_DONT_BUFFER | MSG_DONT_STORE | MSG_DONT_WRAP\
- | MSG_DONT_IGNORE | MSG_ALL_SENSES | MSG_ALL_BS_FLAGS)
+ | MSG_DONT_IGNORE | MSG_ALL_SENSES | MSG_ALERT\
+ | MSG_ALL_BS_FLAGS)
// Nachrichtentypen, Werte ab 2^20
#define MT_UNKNOWN 0
diff --git a/sys/player/base.h b/sys/player/base.h
index dbb2617..d6fa88c 100644
--- a/sys/player/base.h
+++ b/sys/player/base.h
@@ -31,7 +31,6 @@
#define P_WAITFOR "waitfor"
#define P_WAITFOR_REASON "waitfor_reason"
#define P_WAITFOR_FLAGS "waitfor_flags"
-#define P_VISUALBELL "visualbell"
#define P_LOCALCMDS "localcmds"
#define P_CLOCKMSG "clockmsg"
#define P_TIMEZONE "timezone"
diff --git a/sys/player/comm.h b/sys/player/comm.h
index 5839576..5459ecb 100644
--- a/sys/player/comm.h
+++ b/sys/player/comm.h
@@ -24,6 +24,14 @@
#define MESSAGE_BEEP "\007"
+// Definitionen fuer Alerts
+// Eigentlich waere hier "p_lib_alert" als Inhalt des Defines vorgesehen, da
+// "visualbell" in den Savefiles steht, ist eine Migrations hier jedoch
+// aufwaendig und auf unbestimmte Zeit verschoben.
+#define P_ALERT "visualbell"
+#define AL_NO_SOUND 1
+// Bis 1024 (2^10) reserviert fuer allg. Einstellungen
+
// definitions for Message()
#define MSGFLAG_CHANNEL 0x0001 // messages from channeld.c