Typen fuer Chats ergaenzt
Statt mixed die konkreten Typen fuer die Datenstruktur verwenden.
SetChats() + SetAChats() erlauben nun auch, die Chats zu loeschen
(Uebergabe von 0) und die Chats sind ein optionales Argument,
falls man nur die Chance aendern und den Inhalt beibehalten will.
Change-Id: I4cb6f5942220848da6b0f2a6789870b6ae44cba4
diff --git a/doc/sphinx/lfun/SetChats.rst b/doc/sphinx/lfun/SetChats.rst
index fd99a3d..78f1485 100644
--- a/doc/sphinx/lfun/SetChats.rst
+++ b/doc/sphinx/lfun/SetChats.rst
@@ -16,25 +16,29 @@
int chance
Prozentuale Wahrscheinlichkeit einer Ausgabe
- mixed strs
+ <string|closure|<string|closure|int>* >* strs
Array mit den verschiedenen Moeglichkeiten der Monsterchats
+ (optional)
BESCHREIBUNG
------------
Der NPC gibt mit der Wahrscheinlichkeit <chance> pro Heartbeat einen
- zufaellig gewaehlten Text aus dem Array <strs> in den Raum aus. Dabei
- wird per Default send_room() ohne erneutes Umbrechen mit den Messagetypen
- MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL verwendet.
-
- Die einzelnen Arrayelemente koennen:
+ zufaellig gewaehlten Text aus dem Array <strs> in den Raum aus. Wird
+ kein <strs> uebergeben, wird nur die Chat-Chance geaendert und die
+ bisherigen Chats werden beibehalten.
- * Strings sein
- * Closures sein, deren Rueckgabe ausgegeben wird und die zusaetzlich
+ Per Default wird send_room() ohne erneutes Umbrechen mit den Messagetypen
+ MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL zur Ausgabe verwendet.
+
+ Die einzelnen Arrayelemente koennen sein:
+
+ * Strings
+ * Closures, deren Rueckgabe ausgegeben wird und die zusaetzlich
einen aenderbaren und in send_room() verwendeten 'msg_typ' per
Referenz uebergeben bekommen
* Arrays mit der Struktur
- `({<string|closure msg >, <int msg_typ>})` sein, fuer
+ `({<string|closure msg >, <int msg_typ>})`, fuer
die obige Regeln auf 'msg' angewendet werden und bei denen 'msg_typ'
im send_room() verwendet wird
diff --git a/std/npc/chat.c b/std/npc/chat.c
index 4c70823..9eb9184 100644
--- a/std/npc/chat.c
+++ b/std/npc/chat.c
@@ -23,29 +23,30 @@
/*
* heart_beat is called so the monster may chat.
*/
-void SetChats(int chance, mixed strs) {
- if (!pointerp(strs))
- return;
- SetProp(P_CHAT_CHANCE,chance);
- SetProp(P_CHATS,strs);
+void SetChats(int chance,
+ <string|closure|<string|closure|int>* >* strs = QueryProp(P_CHATS))
+{
+ SetProp(P_CHAT_CHANCE, chance);
+ SetProp(P_CHATS, strs);
}
-void SetAttackChats(int chance, mixed strs) {
- if (!pointerp(strs))
- return;
- SetProp(P_ACHAT_CHANCE,chance);
- SetProp(P_ACHATS,strs);
+void SetAttackChats(int chance,
+ <string|closure|<string|closure|int>* >* strs = QueryProp(P_ACHATS))
+{
+ SetProp(P_ACHAT_CHANCE, chance);
+ SetProp(P_ACHATS, strs);
}
#define SR_CHAT_MSG 0
#define SR_CHAT_TYP 1
-protected void process_chat(mixed strs) {
- if (!pointerp(strs) || !sizeof(strs))
+protected void process_chat(<string|closure|<string|closure|int>* >* strs)
+{
+ if (!sizeof(strs))
return;
int msg_typ;
- mixed entry = strs[random(sizeof(strs))];
+ <string|closure|<string|closure|int>*> entry = strs[random(sizeof(strs))];
if(pointerp(entry) && sizeof(entry)>=2 && intp(entry[SR_CHAT_TYP])) {
msg_typ = entry[SR_CHAT_TYP];