Bläddra i källkod

Update name for all party members on rename (#1715)

Matheus Macabu 8 år sedan
förälder
incheckning
aa7de205fe
4 ändrade filer med 40 tillägg och 0 borttagningar
  1. 4 0
      src/char/char.c
  2. 26 0
      src/char/int_party.c
  3. 1 0
      src/char/int_party.h
  4. 9 0
      src/map/party.c

+ 4 - 0
src/char/char.c

@@ -1264,6 +1264,10 @@ int char_rename_char_sql(struct char_session_data *sd, uint32 char_id)
 		Sql_ShowDebug(sql_handle);
 		Sql_ShowDebug(sql_handle);
 		return 3;
 		return 3;
 	}
 	}
+	
+	// Update party and party members with the new player name
+	if( char_dat.party_id )
+		inter_party_charname_changed(char_dat.party_id, char_id, sd->new_name);
 
 
 	// Change character's name into guild_db.
 	// Change character's name into guild_db.
 	if( char_dat.guild_id )
 	if( char_dat.guild_id )

+ 26 - 0
src/char/int_party.c

@@ -889,3 +889,29 @@ int inter_party_CharOffline(uint32 char_id, int party_id) {
 		idb_remove(party_db_, party_id);
 		idb_remove(party_db_, party_id);
 	return 1;
 	return 1;
 }
 }
+
+int inter_party_charname_changed(int party_id, uint32 char_id, char *name)
+{
+	struct party_data* p = NULL;
+	int i;
+
+	p = inter_party_fromsql(party_id);
+	if( p == NULL || p->party.party_id == 0 )
+	{
+		ShowError("inter_party_charname_changed: Can't find party %d.\n", party_id);
+		return 0;
+	}
+
+	ARR_FIND(0, MAX_PARTY, i, p->party.member[i].char_id == char_id);
+	if( i == MAX_PARTY )
+	{
+		ShowError("inter_party_charname_changed: Can't find character %d in party %d.\n", char_id, party_id);
+		return 0;
+	}
+
+	safestrncpy(p->party.member[i].name, name, NAME_LENGTH);
+
+	mapif_party_info(-1, &p->party, char_id);
+	
+	return 0;
+}

+ 1 - 0
src/char/int_party.h

@@ -20,6 +20,7 @@ int inter_party_parse_frommap(int fd);
 int inter_party_sql_init(void);
 int inter_party_sql_init(void);
 void inter_party_sql_final(void);
 void inter_party_sql_final(void);
 int inter_party_leave(int party_id,uint32 account_id, uint32 char_id, char *name);
 int inter_party_leave(int party_id,uint32 account_id, uint32 char_id, char *name);
+int inter_party_charname_changed(int party_id, uint32 char_id, char *name);
 int inter_party_CharOnline(uint32 char_id, int party_id);
 int inter_party_CharOnline(uint32 char_id, int party_id);
 int inter_party_CharOffline(uint32 char_id, int party_id);
 int inter_party_CharOffline(uint32 char_id, int party_id);
 
 

+ 9 - 0
src/map/party.c

@@ -262,6 +262,7 @@ int party_recv_info(struct party* sp, uint32 char_id)
 	int added[MAX_PARTY];// member_id in new data
 	int added[MAX_PARTY];// member_id in new data
 	int added_count = 0;
 	int added_count = 0;
 	int member_id;
 	int member_id;
+	bool rename = false;
 
 
 	nullpo_ret(sp);
 	nullpo_ret(sp);
 
 
@@ -282,6 +283,9 @@ int party_recv_info(struct party* sp, uint32 char_id)
 
 
 			if( i == MAX_PARTY )
 			if( i == MAX_PARTY )
 				removed[removed_count++] = member_id;
 				removed[removed_count++] = member_id;
+			// If the member already existed, compare the old to the (possible) new name
+			else if( !rename && strcmp(member->name,sp->member[i].name) )
+				rename = true;
 		}
 		}
 
 
 		for( member_id = 0; member_id < MAX_PARTY; ++member_id ) {
 		for( member_id = 0; member_id < MAX_PARTY; ++member_id ) {
@@ -346,6 +350,11 @@ int party_recv_info(struct party* sp, uint32 char_id)
 		if( p->instance_id != 0 )
 		if( p->instance_id != 0 )
 			instance_reqinfo(sd,p->instance_id);
 			instance_reqinfo(sd,p->instance_id);
 	}
 	}
+	
+	// If a player was renamed, make sure to resend the party information
+	if( rename ){
+		clif_party_info(p,NULL);
+	}
 
 
 	if( char_id != 0 ) { // requester
 	if( char_id != 0 ) { // requester
 		sd = map_charid2sd(char_id);
 		sd = map_charid2sd(char_id);