// パーティメンバの移動 int party_send_movemap(dumb_ptr<map_session_data> sd) { struct party *p; nullpo_ret(sd); if (sd->status.party_id == 0) return 0; intif_party_changemap(sd, 1); if (sd->party_sended != 0) // もうパーティデータは送信済み return 0; // 競合確認 party_check_conflict(sd); // あるならパーティ情報送信 if ((p = party_search(sd->status.party_id)) != NULL) { party_check_member(p); // 所属を確認する if (sd->status.party_id == p->party_id) { clif_party_info(p, sd->fd); clif_party_option(p, sd, 0x100); sd->party_sended = 1; } } return 0; }
// 情報所得 int party_recv_info(struct party *sp) { struct party *p; int i; nullpo_retr(0, sp); if((p=(struct party *) numdb_search(party_db,sp->party_id))==NULL){ p=(struct party *)aCalloc(1,sizeof(struct party)); numdb_insert(party_db,sp->party_id,p); // 最初のロードなのでユーザーのチェックを行う party_check_member(sp); } memcpy(p,sp,sizeof(struct party)); for(i=0;i<MAX_PARTY;i++){ // sdの設定 struct map_session_data *sd = map_id2sd(p->member[i].account_id); if(sd!=NULL && sd->status.party_id==p->party_id && !sd->state.waitingdisconnect) p->member[i].sd=sd; else p->member[i].sd=NULL; } clif_party_info(p,-1); // Refresh hp/xy state [LuzZza] for(i=0;i<MAX_PARTY;i++) { struct map_session_data *sd = p->member[i].sd; if(sd!=NULL) { clif_party_hp(sd); clif_party_xy(sd); } } for(i=0;i<MAX_PARTY;i++){ // 設定情報の送信 struct map_session_data *sd = p->member[i].sd; if(sd!=NULL && sd->state.party_sent==0){ clif_party_option(p,sd,0x100); sd->state.party_sent=1; } } return 0; }
// パーティメンバの移動 int party_send_movemap(struct map_session_data *sd) { int i; struct party *p; nullpo_retr(0, sd); if( sd->status.party_id==0 ) return 0; intif_party_changemap(sd,1); p=party_search(sd->status.party_id); if (p && sd->fd) { //Send dots of other party members to this char. [Skotlex] for(i=0; i < MAX_PARTY; i++) { if (!p->member[i].sd || p->member[i].sd == sd || p->member[i].sd->bl.m != sd->bl.m) continue; clif_party_xy_single(sd->fd, p->member[i].sd); } } if( sd->state.party_sent ) // もうパーティデータは送信済み return 0; // 競合確認 party_check_conflict(sd); // あるならパーティ情報送信 if(p){ party_check_member(p); // 所属を確認する if(sd->status.party_id==p->party_id){ clif_party_main_info(p,sd->fd); clif_party_option(p,sd,0x100); clif_party_info(p,sd->fd); sd->state.party_sent=1; } } return 0; }
// 情報所得 int party_recv_info(const struct party *sp) { int i; nullpo_ret(sp); struct party *p = party_db.search(sp->party_id); if (p == NULL) { p = party_db.init(sp->party_id); // 最初のロードなのでユーザーのチェックを行う *p = *sp; party_check_member(p); } else *p = *sp; for (i = 0; i < MAX_PARTY; i++) { // sdの設定 dumb_ptr<map_session_data> sd = map_id2sd(p->member[i].account_id); p->member[i].sd = (sd != NULL && sd->status.party_id == p->party_id) ? sd.operator->() : NULL; } clif_party_info(p, -1); for (i = 0; i < MAX_PARTY; i++) { // 設定情報の送信 // dumb_ptr<map_session_data> sd = map_id2sd(p->member[i].account_id); dumb_ptr<map_session_data> sd = dumb_ptr<map_session_data>(p->member[i].sd); if (sd != NULL && sd->party_sended == 0) { clif_party_option(p, sd, 0x100); sd->party_sended = 1; } } return 0; }
// 情報所得 int party_recv_info(const PartyPair sp) { int i; nullpo_retz(sp); PartyPair p = party_search(sp.party_id); if (!p) { p.party_most = party_db.init(sp.party_id); // 最初のロードなのでユーザーのチェックを行う *p.party_most = *sp.party_most; party_check_member(p); } else *p.party_most = *sp.party_most; for (i = 0; i < MAX_PARTY; i++) { // sdの設定 dumb_ptr<map_session_data> sd = map_id2sd(account_to_block(p->member[i].account_id)); p->member[i].sd = (sd != nullptr && sd->status.party_id == p.party_id) ? sd.operator->() : nullptr; } clif_party_info(p, nullptr); for (i = 0; i < MAX_PARTY; i++) { // 設定情報の送信 // dumb_ptr<map_session_data> sd = map_id2sd(p->member[i].account_id); dumb_ptr<map_session_data> sd = dumb_ptr<map_session_data>(p->member[i].sd); if (sd != nullptr && sd->party_sended == 0) { clif_party_option(p, sd, 0x100); sd->party_sended = 1; } } return 0; }
// 情報所得 int party_recv_info(struct party *sp) { struct map_session_data *sd; struct party *p; int i; nullpo_retr(0, sp); p= idb_ensure(party_db, sp->party_id, create_party); if (!p->party_id) //party just received. party_check_member(sp); memcpy(p,sp,sizeof(struct party)); for(i=0;i<MAX_PARTY;i++){ // sdの設定 if (!p->member[i].account_id) { p->member[i].sd=NULL; continue; } sd = map_id2sd(p->member[i].account_id); p->member[i].sd = (sd!=NULL && sd->status.party_id==p->party_id && sd->status.char_id == p->member[i].char_id && !sd->state.waitingdisconnect)?sd:NULL; } for(i=0;i<MAX_PARTY;i++){ // 設定情報の送信 sd = p->member[i].sd; if(!sd) continue; // Refresh hp/xy state [LuzZza] clif_party_hp(sd); clif_party_xy(sd); if(sd->state.party_sent==0){ clif_party_main_info(p,-1); clif_party_option(p,sd,0x100); clif_party_info(p,-1); sd->state.party_sent=1; } } return 0; }
int party_recv_info(struct party *sp) { struct party_data *p; int i; bool party_new = false; nullpo_retr(0, sp); p = (struct party_data*)idb_ensure(party_db, sp->party_id, create_party); if (!p->party.party_id) //party just received. { party_new = true; party_check_member(sp); } memcpy(&p->party,sp,sizeof(struct party)); memset(&p->state, 0, sizeof(p->state)); memset(&p->data, 0, sizeof(p->data)); for(i=0;i<MAX_PARTY;i++){ if (!p->party.member[i].account_id) continue; p->data[i].sd = party_sd_check(p->party.party_id, p->party.member[i].account_id, p->party.member[i].char_id); } party_check_state(p); if (party_new) { //Send party data to all players. struct map_session_data *sd; for(i=0;i<MAX_PARTY;i++){ sd = p->data[i].sd; if(!sd) continue; clif_charnameupdate(sd); //Update other people's display. [Skotlex] clif_party_member_info(p,sd); clif_party_option(p,sd,0x100); clif_party_info(p,NULL); } } return 0; }
void party_send_movemap(struct map_session_data *sd) { int i; struct party_data *p; if( sd->status.party_id==0 ) return; intif_party_changemap(sd,1); p=party_search(sd->status.party_id); if (!p) return; if(!sd->state.party_sent) { party_check_member(&p->party); if(sd->status.party_id==p->party.party_id){ clif_party_option(p,sd,0x100); clif_party_info(p,sd); clif_party_member_info(p,sd); sd->state.party_sent=1; } } if (sd->fd) { // synchronize minimap positions with the rest of the party for(i=0; i < MAX_PARTY; i++) { if (p->data[i].sd && p->data[i].sd != sd && p->data[i].sd->bl.m == sd->bl.m) { clif_party_xy_single(sd->fd, p->data[i].sd); clif_party_xy_single(p->data[i].sd->fd, sd); } } } return; }
int party_recv_info(struct party *sp) { struct map_session_data *sd; struct party_data *p; int i; nullpo_retr(0, sp); p= idb_ensure(party_db, sp->party_id, create_party); if (!p->party.party_id) //party just received. party_check_member(sp); memcpy(&p->party,sp,sizeof(struct party)); memset(&p->state, 0, sizeof(p->state)); memset(&p->data, 0, sizeof(p->data)); for(i=0;i<MAX_PARTY;i++){ if (!p->party.member[i].account_id) continue; sd = map_id2sd(p->party.member[i].account_id); if (sd && sd->status.party_id==p->party.party_id && sd->status.char_id == p->party.member[i].char_id && !sd->state.waitingdisconnect) p->data[i].sd = sd; } party_check_state(p); for(i=0;i<MAX_PARTY;i++){ sd = p->data[i].sd; if(!sd || sd->state.party_sent) continue; clif_party_member_info(p,sd); clif_party_option(p,sd,0x100); clif_party_info(p,NULL); sd->state.party_sent=1; } return 0; }