int party_changeleader(struct map_session_data *sd, struct map_session_data *tsd, struct party_data *p) { int mi, tmi; if ( !p ) { if (!sd || !sd->status.party_id) return -1; if (!tsd || tsd->status.party_id != sd->status.party_id) { clif_displaymessage(sd->fd, msg_txt(sd,283)); return -3; } if ( map[sd->bl.m].flag.partylock ) { clif_displaymessage(sd->fd, msg_txt(sd,287)); return 0; } if ((p = party_search(sd->status.party_id)) == NULL ) return -1; ARR_FIND( 0, MAX_PARTY, mi, p->data[mi].sd == sd ); if (mi == MAX_PARTY) return 0; // Shouldn't happen if (!p->party.member[mi].leader) { // Need to be a party leader. clif_displaymessage(sd->fd, msg_txt(sd,282)); return 0; } ARR_FIND( 0, MAX_PARTY, tmi, p->data[tmi].sd == tsd); if (tmi == MAX_PARTY) return 0; // Shouldn't happen } else { ARR_FIND(0,MAX_PARTY,mi,p->party.member[mi].leader); if (mi == MAX_PARTY) return 0; // Shouldn't happen ARR_FIND(0,MAX_PARTY,tmi,p->data[tmi].sd == tsd); if (tmi == MAX_PARTY) return 0; // Shouldn't happen } // Change leadership. p->party.member[mi].leader = 0; p->party.member[tmi].leader = 1; // Update members clif_party_leaderchanged(p->data[mi].sd, p->data[mi].sd->status.account_id, p->data[tmi].sd->status.account_id); // Update info. intif_party_leaderchange(p->party.party_id,p->party.member[tmi].account_id,p->party.member[tmi].char_id); clif_party_info(p,NULL); return 1; }
int party_changeleader(struct map_session_data *sd, struct map_session_data *tsd, struct party_data *p) { int mi, tmi; if ( !p ) { if (!sd || !sd->status.party_id) return -1; if (!tsd || tsd->status.party_id != sd->status.party_id) { clif_displaymessage(sd->fd, msg_txt(sd,283)); return -3; } if ( map_getmapflag(sd->bl.m, MF_PARTYLOCK) ) { clif_displaymessage(sd->fd, msg_txt(sd,287)); return 0; } if ((p = party_search(sd->status.party_id)) == NULL ) return -1; ARR_FIND( 0, MAX_PARTY, mi, p->data[mi].sd == sd ); if (mi == MAX_PARTY) return 0; // Shouldn't happen if (!p->party.member[mi].leader) { // Need to be a party leader. clif_displaymessage(sd->fd, msg_txt(sd,282)); return 0; } ARR_FIND( 0, MAX_PARTY, tmi, p->data[tmi].sd == tsd); if (tmi == MAX_PARTY) return 0; // Shouldn't happen if (battle_config.change_party_leader_samemap && p->party.member[mi].map != p->party.member[tmi].map) { clif_msg(sd, PARTY_MASTER_CHANGE_SAME_MAP); return 0; } } else { ARR_FIND(0,MAX_PARTY,mi,p->party.member[mi].leader); if (mi == MAX_PARTY) return 0; // Shouldn't happen ARR_FIND(0,MAX_PARTY,tmi,p->data[tmi].sd == tsd); if (tmi == MAX_PARTY) return 0; // Shouldn't happen } // Change leadership. p->party.member[mi].leader = 0; p->party.member[tmi].leader = 1; // Update members clif_party_leaderchanged(p->data[mi].sd, p->data[mi].sd->status.account_id, p->data[tmi].sd->status.account_id); // Update info. intif_party_leaderchange(p->party.party_id,p->party.member[tmi].account_id,p->party.member[tmi].char_id); clif_party_info(p,NULL); return 1; }