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

This commit is contained in:
Matheus Macabu 2017-02-05 16:52:31 -02:00 committed by Lemongrass3110
parent 90e3f89df2
commit aa7de205fe
4 changed files with 40 additions and 0 deletions

View File

@ -1264,6 +1264,10 @@ int char_rename_char_sql(struct char_session_data *sd, uint32 char_id)
Sql_ShowDebug(sql_handle);
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.
if( char_dat.guild_id )

View File

@ -889,3 +889,29 @@ int inter_party_CharOffline(uint32 char_id, int party_id) {
idb_remove(party_db_, party_id);
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;
}

View File

@ -20,6 +20,7 @@ int inter_party_parse_frommap(int fd);
int inter_party_sql_init(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_charname_changed(int party_id, uint32 char_id, char *name);
int inter_party_CharOnline(uint32 char_id, int party_id);
int inter_party_CharOffline(uint32 char_id, int party_id);

View File

@ -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_count = 0;
int member_id;
bool rename = false;
nullpo_ret(sp);
@ -282,6 +283,9 @@ int party_recv_info(struct party* sp, uint32 char_id)
if( i == MAX_PARTY )
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 ) {
@ -346,6 +350,11 @@ int party_recv_info(struct party* sp, uint32 char_id)
if( p->instance_id != 0 )
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
sd = map_charid2sd(char_id);