|
@@ -87,7 +87,7 @@ static TBL_PC* party_sd_check(int party_id, uint32 account_id, uint32 char_id)
|
|
|
sd->status.party_id = party_id;// auto-join if not in a party
|
|
|
if (sd->status.party_id != party_id)
|
|
|
{ //If player belongs to a different party, kick him out.
|
|
|
- intif_party_leave(party_id,account_id,char_id);
|
|
|
+ intif_party_leave(party_id,account_id,char_id,sd->status.name,PARTY_MEMBER_WITHDRAW_LEAVE);
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
@@ -165,7 +165,7 @@ void party_created(uint32 account_id,uint32 char_id,int fail,int party_id,char *
|
|
|
|
|
|
if (!sd || sd->status.char_id != char_id || !sd->party_creating ) { // Character logged off before creation ack?
|
|
|
if (!fail) // break up party since player could not be added to it.
|
|
|
- intif_party_leave(party_id,account_id,char_id);
|
|
|
+ intif_party_leave(party_id,account_id,char_id,"",PARTY_MEMBER_WITHDRAW_LEAVE);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -309,7 +309,7 @@ int party_recv_info(struct party* sp, uint32 char_id)
|
|
|
if( sd == NULL )
|
|
|
continue; // not online
|
|
|
|
|
|
- party_member_withdraw(sp->party_id, sd->status.account_id, sd->status.char_id);
|
|
|
+ party_member_withdraw(sp->party_id, sd->status.account_id, sd->status.char_id, sd->status.name, PARTY_MEMBER_WITHDRAW_LEAVE);
|
|
|
}
|
|
|
|
|
|
memcpy(&p->party, sp, sizeof(struct party));
|
|
@@ -488,7 +488,7 @@ int party_member_added(int party_id,uint32 account_id,uint32 char_id, int flag)
|
|
|
|
|
|
if(sd == NULL || sd->status.char_id != char_id || !sd->party_joining ) {
|
|
|
if (!flag) //Char logged off before being accepted into party.
|
|
|
- intif_party_leave(party_id,account_id,char_id);
|
|
|
+ intif_party_leave(party_id,account_id,char_id,"",PARTY_MEMBER_WITHDRAW_LEAVE);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -500,7 +500,7 @@ int party_member_added(int party_id,uint32 account_id,uint32 char_id, int flag)
|
|
|
|
|
|
if (!p) {
|
|
|
ShowError("party_member_added: party %d not found.\n",party_id);
|
|
|
- intif_party_leave(party_id,account_id,char_id);
|
|
|
+ intif_party_leave(party_id,account_id,char_id,"",PARTY_MEMBER_WITHDRAW_LEAVE);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -559,7 +559,7 @@ int party_removemember(struct map_session_data* sd, uint32 account_id, char* nam
|
|
|
return 0; // no such char in party
|
|
|
|
|
|
party_trade_bound_cancel(sd);
|
|
|
- intif_party_leave(p->party.party_id,account_id,p->party.member[i].char_id);
|
|
|
+ intif_party_leave(p->party.party_id,account_id,p->party.member[i].char_id,p->party.member[i].name,PARTY_MEMBER_WITHDRAW_EXPEL);
|
|
|
|
|
|
return 1;
|
|
|
}
|
|
@@ -571,7 +571,7 @@ int party_removemember2(struct map_session_data *sd,uint32 char_id,int party_id)
|
|
|
return -3;
|
|
|
|
|
|
party_trade_bound_cancel(sd);
|
|
|
- intif_party_leave(sd->status.party_id,sd->status.account_id,sd->status.char_id);
|
|
|
+ intif_party_leave(sd->status.party_id,sd->status.account_id,sd->status.char_id,sd->status.name,PARTY_MEMBER_WITHDRAW_EXPEL);
|
|
|
return 1;
|
|
|
} else {
|
|
|
int i;
|
|
@@ -583,7 +583,7 @@ int party_removemember2(struct map_session_data *sd,uint32 char_id,int party_id)
|
|
|
ARR_FIND(0,MAX_PARTY,i,p->party.member[i].char_id == char_id );
|
|
|
if( i >= MAX_PARTY )
|
|
|
return -1;
|
|
|
- intif_party_leave(party_id,p->party.member[i].account_id,char_id);
|
|
|
+ intif_party_leave(party_id,p->party.member[i].account_id,char_id,p->party.member[i].name,PARTY_MEMBER_WITHDRAW_EXPEL);
|
|
|
return 1;
|
|
|
}
|
|
|
}
|
|
@@ -604,21 +604,21 @@ int party_leave(struct map_session_data *sd)
|
|
|
return 0;
|
|
|
|
|
|
party_trade_bound_cancel(sd);
|
|
|
- intif_party_leave(p->party.party_id,sd->status.account_id,sd->status.char_id);
|
|
|
+ intif_party_leave(p->party.party_id,sd->status.account_id,sd->status.char_id,sd->status.name,PARTY_MEMBER_WITHDRAW_LEAVE);
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
/// Invoked (from char-server) when a party member leaves the party.
|
|
|
-int party_member_withdraw(int party_id, uint32 account_id, uint32 char_id)
|
|
|
+int party_member_withdraw(int party_id, uint32 account_id, uint32 char_id, char *name, enum e_party_member_withdraw type)
|
|
|
{
|
|
|
- struct map_session_data* sd = map_id2sd(account_id);
|
|
|
+ struct map_session_data* sd = map_charid2sd(char_id);
|
|
|
struct party_data* p = party_search(party_id);
|
|
|
|
|
|
if( p ) {
|
|
|
int i;
|
|
|
+ clif_party_withdraw(party_getavailablesd(p), account_id, name, type, PARTY);
|
|
|
ARR_FIND( 0, MAX_PARTY, i, p->party.member[i].account_id == account_id && p->party.member[i].char_id == char_id );
|
|
|
if( i < MAX_PARTY ) {
|
|
|
- clif_party_withdraw(p,sd,account_id,p->party.member[i].name,0x0);
|
|
|
memset(&p->party.member[i], 0, sizeof(p->party.member[0]));
|
|
|
memset(&p->data[i], 0, sizeof(p->data[0]));
|
|
|
p->party.count--;
|
|
@@ -626,7 +626,7 @@ int party_member_withdraw(int party_id, uint32 account_id, uint32 char_id)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if( sd && sd->status.party_id == party_id && sd->status.char_id == char_id ) {
|
|
|
+ if( sd && sd->status.party_id == party_id ) {
|
|
|
#ifdef BOUND_ITEMS
|
|
|
int idxlist[MAX_INVENTORY]; //or malloc to reduce consumtion
|
|
|
int j,i;
|
|
@@ -673,7 +673,7 @@ int party_broken(int party_id)
|
|
|
|
|
|
for( i = 0; i < MAX_PARTY; i++ ) {
|
|
|
if( p->data[i].sd != NULL ) {
|
|
|
- clif_party_withdraw(p,p->data[i].sd,p->party.member[i].account_id,p->party.member[i].name,0x10);
|
|
|
+ clif_party_withdraw(p->data[i].sd,p->party.member[i].account_id,p->party.member[i].name,PARTY_MEMBER_WITHDRAW_EXPEL,SELF);
|
|
|
p->data[i].sd->status.party_id=0;
|
|
|
}
|
|
|
}
|