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/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];