Keine Leerstrings aus AttackChats ausgeben
Schaden austeilende AttackChat-Funktionen geben regelmaessig
Leerstrings oder 0 zurueck, nachdem sie den Schaden am Gegner
verursacht haben. Wenn sie dabei z.B. an zurueckschlagenden
DefendFuncs sterben, wird der Leerstring trotzdem via send_room()
ausgegeben, und das loest durch das call_other("ReceiveMsg", ...)
eine Warnung aus.
Change-Id: Ife4fc3f434d91e540dd9aeb23ca243055ce2f0e9
diff --git a/std/npc/chat.c b/std/npc/chat.c
index 03a232a..59f7006 100644
--- a/std/npc/chat.c
+++ b/std/npc/chat.c
@@ -52,13 +52,19 @@
}
if(closurep(entry))
entry = funcall(entry, &msg_typ);
+ entry = process_string(entry);
if(msg_typ)
msg_typ|=MSG_DONT_STORE|MSG_DONT_BUFFER;
- send_room(environment(),
- process_string(entry),
- msg_typ||(MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL|
- MSG_DONT_STORE|MSG_DONT_BUFFER|MSG_DONT_WRAP));
+
+ // Nur nicht-leere Meldungen ausgeben, und nur dann, wenn der NPC noch
+ // existiert, denn im Falle von Attack-Chats koennte dieser z.B. durch
+ // reflektierten Schaden zerstoert worden sein.
+ if ( stringp(entry) && sizeof(entry) && objectp(this_object()) )
+ send_room(environment(),
+ entry,
+ msg_typ||(MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL|
+ MSG_DONT_STORE|MSG_DONT_BUFFER|MSG_DONT_WRAP));
}
}