浏览代码

Pets & Homun renaming with empty name fix, bugreport:3032
Also:
- Fixed client crash when sending weapon + dragon/mado/newmount
- Fixed 2011-11-16 charinfo_size bug on char selection screen

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

shennetsind 13 年之前
父节点
当前提交
fb6af6b958
共有 3 个文件被更改,包括 23 次插入10 次删除
  1. 15 8
      src/char_sql/char.c
  2. 4 1
      src/map/homunculus.c
  3. 4 1
      src/map/pet.c

+ 15 - 8
src/char_sql/char.c

@@ -937,6 +937,7 @@ int mmo_chars_fromsql(struct char_session_data* sd, uint8* buf)
 	{
 		if( p.delete_date && p.delete_date < time(NULL) ) {
 			delete_char_sql(p.char_id);
+			i--;
 			continue;
 		}
 		p.last_point.map = mapindex_name2id(last_map);
@@ -1644,7 +1645,10 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
 	WBUFW(buf,50) = DEFAULT_WALK_SPEED; // p->speed;
 	WBUFW(buf,52) = p->class_;
 	WBUFW(buf,54) = p->hair;
-	WBUFW(buf,56) = p->option&0x20 ? 0 : p->weapon; //When the weapon is sent and your option is riding, the client crashes on login!?
+	
+	//When the weapon is sent and your option is riding, the client crashes on login!?
+	WBUFW(buf,56) = p->option&(0x20|0x80000|0x100000|0x200000|0x400000|0x800000|0x1000000|0x2000000|0x4000000|0x8000000) ? 0 : p->weapon;
+	
 	WBUFW(buf,58) = p->base_level;
 	WBUFW(buf,60) = min(p->skill_point, INT16_MAX);
 	WBUFW(buf,62) = p->head_bottom;
@@ -1677,14 +1681,17 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
 	WBUFL(buf,128) = p->robe;
 	offset += 4;
 #endif
-#if PACKETVER >= 20110928
-	WBUFL(buf,132) = 0;  // change slot feature (0 = disabled, otherwise enabled)
-	offset += 4;
-#endif
-#if PACKETVER >= 20111025
-	WBUFL(buf,136) = 0;  // unknown purpose (0 = disabled, otherwise displays "Add-Ons" sidebar)
-	offset += 4;
+#if PACKETVER != 20111116 //2011-11-16 wants 136, ask gravity.
+	#if PACKETVER >= 20110928
+		WBUFL(buf,132) = 0;  // change slot feature (0 = disabled, otherwise enabled)
+		offset += 4;
+	#endif
+	#if PACKETVER >= 20111025
+		WBUFL(buf,136) = 0;  // unknown purpose (0 = disabled, otherwise displays "Add-Ons" sidebar)
+		offset += 4;
+	#endif
 #endif
+
 	return 106+offset;
 }
 

+ 4 - 1
src/map/homunculus.c

@@ -555,7 +555,10 @@ int merc_hom_change_name_ack(struct map_session_data *sd, char* name, int flag)
 {
 	struct homun_data *hd = sd->hd;
 	if (!merc_is_hom_active(hd)) return 0;
-	if (!flag) {
+
+	normalize_name(name," ");//bugreport:3032
+	
+	if ( !flag || !strlen(name) ) {
 		clif_displaymessage(sd->fd, msg_txt(280)); // You cannot use this name
 		return 0;
 	}

+ 4 - 1
src/map/pet.c

@@ -630,7 +630,10 @@ int pet_change_name_ack(struct map_session_data *sd, char* name, int flag)
 {
 	struct pet_data *pd = sd->pd;
 	if (!pd) return 0;
-	if (!flag) {
+
+	normalize_name(name," ");//bugreport:3032
+
+	if ( !flag || !strlen(name) ) {
 		clif_displaymessage(sd->fd, msg_txt(280)); // You cannot use this name for your pet.
 		clif_send_petstatus(sd); //Send status so client knows oet name change got rejected.
 		return 0;