Просмотр исходного кода

* Fixed NPC_TALK message being displayed with EOL character attached (bugreport:4596, since r14270).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14535 54d463be-8e91-2dee-dedb-b68131a5f0ec
ai4rei 14 лет назад
Родитель
Сommit
9808dfb86b
2 измененных файлов с 20 добавлено и 1 удалено
  1. 1 0
      Changelog-Trunk.txt
  2. 19 1
      src/map/mob.c

+ 1 - 0
Changelog-Trunk.txt

@@ -1,6 +1,7 @@
 Date	Added
 
 2010/12/01
+	* Fixed NPC_TALK message being displayed with EOL character attached (bugreport:4596, since r14270). [Ai4rei]
 	* Reverted change from r14533 and restored the 3rd field of mob_avail.txt being optional (bugreport:4599, since r14532). [Ai4rei]
 	* Monster database reading now utilizes sv_readdb. [Ai4rei]
 2010/11/30

+ 19 - 1
src/map/mob.c

@@ -3830,8 +3830,10 @@ static int mob_read_randommonster(void)
  *------------------------------------------*/
 static bool mob_parse_row_chatdb(char** str, const char* source, int line, int* last_msg_id)
 {
+	char* msg;
 	struct mob_chat *ms;
 	int msg_id;
+	size_t len;
 
 	msg_id = atoi(str[0]);
 
@@ -3853,13 +3855,29 @@ static bool mob_parse_row_chatdb(char** str, const char* source, int line, int*
 	//Color
 	ms->color=strtoul(str[1],NULL,0);
 	//Message
-	if(strlen(str[2])>(CHAT_SIZE_MAX-1)){
+	msg = str[2];
+	len = strlen(msg);
+
+	while( len && ( msg[len-1]=='\r' || msg[len-1]=='\n' ) )
+	{// find EOL to strip
+		len--;
+	}
+
+	if(len>(CHAT_SIZE_MAX-1))
+	{
 		if (msg_id != *last_msg_id) {
 			ShowError("mob_chat: readdb: Message too long! Line %d, id: %d\n", line, msg_id);
 			*last_msg_id = msg_id;
 		}
 		return false;
 	}
+	else if( !len )
+	{
+		ShowWarning("mob_parse_row_chatdb: Empty message for id %d.\n", msg_id);
+		return false;
+	}
+
+	msg[len] = 0;  // strip previously found EOL
 	strncpy(ms->msg, str[2], CHAT_SIZE_MAX);
 
 	return true;