Browse Source

- Fixed the txt->sql converter not escaping character names before saving them.
- Fixed a pet's level not resetting to their db level when you enable pet leveling and later on decide to turn it off.
- Fixed a bad initialization in pc_setnewpc
- Fixed restricted equipment not updating your view info after they are unequipped.
- Removed a bunch of extra text/checks when ignoring characters (/ex) when Aegis does none of these checks. /inall now wipes your ignore list (it does this on Aegis, too).


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9400 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex 18 năm trước cách đây
mục cha
commit
0043aed5fd
5 tập tin đã thay đổi với 31 bổ sung31 xóa
  1. 10 0
      Changelog-Trunk.txt
  2. 5 2
      src/char_sql/char.c
  3. 8 26
      src/map/clif.c
  4. 4 2
      src/map/pc.c
  5. 4 1
      src/map/status.c

+ 10 - 0
Changelog-Trunk.txt

@@ -3,6 +3,16 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
+2006/12/04
+	* Fixed the txt->sql converter not escaping character names before saving
+	  them. [Skotlex]
+	* Fixed a pet's level not resetting to their db level when you enable pet
+	  leveling and later on decide to turn it off. [Skotlex]
+	* Fixed restricted equipment not updating your view info after they are
+	  unequipped. [Skotlex]
+	* Removed a bunch of extra text/checks when ignoring characters (/ex) when
+	  Aegis does none of these checks. /inall now wipes your ignore list (it does
+	  this on Aegis, too). [Skotlex]
 2006/12/03
 	* If somehow a player logs out and it's saved with 0 hp, on login his state
 	  will be set to dead as well so he can respawn (otherwise that leads to a

+ 5 - 2
src/char_sql/char.c

@@ -492,15 +492,18 @@ int mmo_char_tosql(int char_id, struct mmo_charstatus *p){
 		if (!memitemdata_to_sql(mapitem, count, p->char_id,TABLE_CART))
 			strcat(save_status, " cart");
 #ifdef TXT_SQL_CONVERT
-	//Insert the barebones to then update the rest.
+{	//Insert the barebones to then update the rest.
+	char t_name[NAME_LENGTH*2];
+	jstrescapecpy(t_name, p->name);
 	sprintf(tmp_sql, "REPLACE INTO `%s` (`account_id`, `char_num`, `name`)  VALUES ('%d', '%d', '%s')",
-		char_db, p->account_id, p->char_num, p->name);
+		char_db, p->account_id, p->char_num, t_name);
 	if(mysql_query(&mysql_handle, tmp_sql))
 	{
 		ShowSQL("DB error - %s\n",mysql_error(&mysql_handle));
 		ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
 	} else
 		strcat(save_status, " creation");
+}
 #endif
 
 	if (

+ 8 - 26
src/map/clif.c

@@ -11098,16 +11098,6 @@ void clif_parse_PMIgnore(int fd, struct map_session_data *sd) {	// Rewritten by
 
 	WFIFOW(fd,0) = 0x0d1; // R 00d1 <type>.B <fail>.B: type: 0: deny, 1: allow, fail: 0: success, 1: fail
 	WFIFOB(fd,2) = RFIFOB(fd,26);
-	// do nothing only if nick can not exist
-	if (strlen(nick) < 4) {
-		WFIFOB(fd,3) = 1; // fail
-		WFIFOSET(fd, packet_len_table[0x0d1]);
-		clif_wis_message(fd, wisp_server_name,
-			"This player name is not valid.",
-			strlen("This player name is not valid.")+1);
-		return;
-	}
-	// name can exist
 	// deny action (we add nick only if it's not already exist
 	if (RFIFOB(fd,26) == 0) { // Add block
 		for(i = 0; i < MAX_IGNORE_LIST &&
@@ -11118,9 +11108,6 @@ void clif_parse_PMIgnore(int fd, struct map_session_data *sd) {	// Rewritten by
 		if (i == MAX_IGNORE_LIST) { //Full List
 			WFIFOB(fd,3) = 1; // fail
 			WFIFOSET(fd, packet_len_table[0x0d1]);
-			clif_wis_message(fd, wisp_server_name,
-				"You can not block more people.",
-				strlen("You can not block more people.") + 1);
 			if (strcmp(wisp_server_name, nick) == 0)
 			{	// to found possible bot users who automaticaly ignore people.
 				sprintf(output, "Character '%s' (account: %d) has tried to block wisps from '%s' (wisp name of the server). Bot user?", sd->status.name, sd->status.account_id, wisp_server_name);
@@ -11130,11 +11117,8 @@ void clif_parse_PMIgnore(int fd, struct map_session_data *sd) {	// Rewritten by
 		}
 		if(sd->ignore[i].name[0] != '\0')
 		{	//Name already exists.
-			WFIFOB(fd,3) = 1; // fail
+			WFIFOB(fd,3) = 0; // Aegis reports success.
 			WFIFOSET(fd, packet_len_table[0x0d1]);
-			clif_wis_message(fd, wisp_server_name,
-				"This player is already blocked.",
-				strlen("This player is already blocked.") + 1);
 			if (strcmp(wisp_server_name, nick) == 0) { // to found possible bot users who automaticaly ignore people.
 				sprintf(output, "Character '%s' (account: %d) has tried AGAIN to block wisps from '%s' (wisp name of the server). Bot user?", sd->status.name, sd->status.account_id, wisp_server_name);
 				intif_wis_message_to_gm(wisp_server_name, battle_config.hack_info_GM_level, output);
@@ -11168,9 +11152,6 @@ void clif_parse_PMIgnore(int fd, struct map_session_data *sd) {	// Rewritten by
 	{	//Not found
 		WFIFOB(fd,3) = 1; // fail
 		WFIFOSET(fd, packet_len_table[0x0d1]);
-		clif_wis_message(fd, wisp_server_name,
-			"This player is not blocked by you.",
-			strlen("This player is not blocked by you.") + 1);
 		return;
 	}
 	//Move everything one place down to overwrite removed entry.
@@ -11199,9 +11180,6 @@ void clif_parse_PMIgnoreAll(int fd, struct map_session_data *sd) { // Rewritten
 		if (sd->state.ignoreAll) {
 			WFIFOB(fd,3) = 1; // fail
 			WFIFOSET(fd, packet_len_table[0x0d2]);
-			clif_wis_message(fd, wisp_server_name,
-				"You already block everyone.",
-				strlen("You already block everyone.") + 1);
 			return;
 		}
 		sd->state.ignoreAll = 1;
@@ -11211,11 +11189,15 @@ void clif_parse_PMIgnoreAll(int fd, struct map_session_data *sd) { // Rewritten
 	}
 	//Unblock everyone
 	if (!sd->state.ignoreAll) {
+		if (sd->ignore[0].name[0] != '\0')
+		{  //Wipe the ignore list.
+			memset(sd->ignore, 0, sizeof(sd->ignore));
+			WFIFOB(fd,3) = 0;
+			WFIFOSET(fd, packet_len_table[0x0d2]);
+			return;
+		}
 		WFIFOB(fd,3) = 1; // fail
 		WFIFOSET(fd, packet_len_table[0x0d2]);
-		clif_wis_message(fd, wisp_server_name,
-			"You already allow everyone.",
-			strlen("You already allow everyone.") + 1);
 		return;
 	}
 	sd->state.ignoreAll = 0;

+ 4 - 2
src/map/pc.c

@@ -358,7 +358,7 @@ int pc_setnewpc(struct map_session_data *sd, int account_id, int char_id, int lo
 	nullpo_retr(0, sd);
 
 	sd->bl.id        = account_id;
-	sd->status.char_id      = account_id;
+	sd->status.account_id   = account_id;
 	sd->status.char_id      = char_id;
 	sd->status.sex   = sex;
 	sd->login_id1    = login_id1;
@@ -6599,8 +6599,10 @@ int pc_checkitem(struct map_session_data *sd)
 
 	pc_setequipindex(sd);
 	if(calc_flag && sd->state.auth)
+	{
 		status_calc_pc(sd,0);
-
+		pc_equiplookall(sd);
+	}
 	return 0;
 }
 

+ 4 - 1
src/map/status.c

@@ -1474,8 +1474,11 @@ int status_calc_pet(struct pet_data *pd, int first)
 			if (!first)	//Not done the first time because the pet is not visible yet
 				clif_send_petstatus(sd);
 		}
-	} else if (first)
+	} else if (first) {
 		status_calc_misc(&pd->bl, &pd->status, pd->db->lv);
+		if (!battle_config.pet_lv_rate && pd->pet.level != pd->db->lv)
+			pd->pet.level = pd->db->lv;
+	}
 	
 	//Support rate modifier (1000 = 100%)
 	pd->rate_fix = 1000*(pd->pet.intimate - battle_config.pet_support_min_friendly)/(1000- battle_config.pet_support_min_friendly) +500;