Browse Source

- Cleaned up friend list saving and fixed loading of friends.txt file (char-txt)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6830 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 19 năm trước cách đây
mục cha
commit
891620bc62
2 tập tin đã thay đổi với 13 bổ sung51 xóa
  1. 2 0
      Changelog-Trunk.txt
  2. 11 51
      src/char/char.c

+ 2 - 0
Changelog-Trunk.txt

@@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/05/29
+	* Cleaned up friend list saving and fixed loading of friends.txt file
+	  (char-txt) [Skotlex]
 	* Added the Arunafeltz maps, not tested yet [Playtester]
 	- someone with an up-to-date client should test them
 	* Fixed pc_gainexp resetting your exp to 0 rather than adding it in...

+ 11 - 51
src/char/char.c

@@ -354,8 +354,6 @@ int mmo_friends_list_data_str(char *str, struct mmo_charstatus *p) {
 	for (i=0;i<MAX_FRIENDS;i++){
 		if (p->friends[i].account_id > 0 && p->friends[i].char_id > 0 && p->friends[i].name[0])
 			str_p += sprintf(str_p, ",%d,%d,%s", p->friends[i].account_id, p->friends[i].char_id, p->friends[i].name);
-		else
-			str_p += sprintf(str_p,",,,");
 	}
 
 	str_p += '\0';
@@ -786,7 +784,7 @@ int parse_friend_txt(struct mmo_charstatus *p)
 		next = pos;
 		for (count = 0; next < len && count < MAX_FRIENDS; count++)
 		{ //Read friends.
-			if (sscanf(line+next, ",%d,%d,%23[^,]%n",&p->friends[count].account_id,&p->friends[count].char_id, p->friends[count].name, &pos) < 3)
+			if (sscanf(line+next, ",%d,%d,%23[^,^\n]%n",&p->friends[count].account_id,&p->friends[count].char_id, p->friends[count].name, &pos) < 3)
 			{	//Invalid friend?
 				memset(&p->friends[count], 0, sizeof(p->friends[count]));
 				break;
@@ -797,60 +795,22 @@ int parse_friend_txt(struct mmo_charstatus *p)
 			//NOTE: Of course, this will fail if someone sets their name to something like
 			//Bob,2005 but... meh, it's the problem of parsing a text file (encasing it in "
 			//won't do as quotes are also valid name chars!)
-			while(next < len && sscanf(line+next, ",%23[^,]%n", temp, &len) > 0)
+			while(next < len && sscanf(line+next, ",%23[^,^\n]%n", temp, &pos) > 0)
 			{
-				if (atoi(temp)) 
-				{	//We read the next friend, just continue.
+				if (atoi(temp)) //We read the next friend, just continue.
 					break;
-				} else {	//Append the name.
-					next+=len;
-					if (strlen(p->friends[count].name) + strlen(temp) +1 < NAME_LENGTH)
-					{
-						strcat(p->friends[count].name, ",");
-						strcat(p->friends[count].name, temp);
-					}
+				//Append the name.
+				next+=pos;
+				i = strlen(p->friends[count].name);
+				if (i + strlen(temp) +1 < NAME_LENGTH)
+				{
+					p->friends[count].name[i] = ',';
+					strcpy(p->friends[count].name+i+1, temp);
 				}
 			} //End Guess Block
 		} //Friend's for.
-		break; //Finished reading.
-	}
-	/*
-		//Character names must not exceed the 23+\0 limit. [Skotlex]
-		sscanf(line, "%d,%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23s",&cid,
-		&temp[0],p->friend_name[0],
-		&temp[1],p->friend_name[1],
-		&temp[2],p->friend_name[2],
-		&temp[3],p->friend_name[3],
-		&temp[4],p->friend_name[4],
-		&temp[5],p->friend_name[5],
-		&temp[6],p->friend_name[6],
-		&temp[7],p->friend_name[7],
-		&temp[8],p->friend_name[8],
-		&temp[9],p->friend_name[9],
-		&temp[10],p->friend_name[10],
-		&temp[11],p->friend_name[11],
-		&temp[12],p->friend_name[12],
-		&temp[13],p->friend_name[13],
-		&temp[14],p->friend_name[14],
-		&temp[15],p->friend_name[15],
-		&temp[16],p->friend_name[16],
-		&temp[17],p->friend_name[17],
-		&temp[18],p->friend_name[18],
-		&temp[19],p->friend_name[19]);
-		if (cid == p->char_id)
-			break;
+		break; //Found friends.
 	}
-	// No register of friends list
-	if (cid == 0) {
-		fclose(fp);
-		return 0;
-	}
-
-	// Fill in the list
-
-	for (i=0; i<MAX_FRIENDS; i++)
-		p->friend_id[i] = temp[i];
-*/
 	fclose(fp);
 	return count;
 }