// パーティメンバの移動通知 int party_recv_movemap(int party_id,int account_id,char *map,int online,int lv) { struct party *p; int i; if( (p=party_search(party_id))==NULL) return 0; for(i=0;i<MAX_PARTY;i++){ struct party_member *m=&p->member[i]; if( m == NULL ){ ShowError("party_recv_movemap nullpo?\n"); return 0; } if(m->account_id==account_id){ memcpy(m->map,map,MAP_NAME_LENGTH-1); m->online=online; m->lv=lv; break; } } if(i==MAX_PARTY){ if(battle_config.error_log) ShowError("party: not found member %d on %d[%s]",account_id,party_id,p->name); return 0; } for(i=0;i<MAX_PARTY;i++){ // sd再設定 struct 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->state.waitingdisconnect)?sd:NULL; } party_send_xy_clear(p); // 座標再通知要請 clif_party_info(p,-1); return 0; }
// パーティが追加された int party_member_added(int party_id, int account_id, int flag) { dumb_ptr<map_session_data> sd = map_id2sd(account_id), sd2; struct party *p = party_search(party_id); if (sd == NULL) { if (flag == 0) { if (battle_config.error_log) PRINTF("party: member added error %d is not online\n", account_id); intif_party_leave(party_id, account_id); // キャラ側に登録できなかったため脱退要求を出す } return 0; } sd2 = map_id2sd(sd->party_invite_account); sd->party_invite = 0; sd->party_invite_account = 0; if (p == NULL) { PRINTF("party_member_added: party %d not found.\n", party_id); intif_party_leave(party_id, account_id); return 0; } if (flag == 1) { // 失敗 if (sd2 != NULL) clif_party_inviteack(sd2, sd->status.name, 0); return 0; } // 成功 sd->party_sended = 0; sd->status.party_id = party_id; if (sd2 != NULL) clif_party_inviteack(sd2, sd->status.name, 2); // いちおう競合確認 party_check_conflict(sd); party_send_xy_clear(p); return 0; }
// パーティが追加された int party_member_added(PartyId party_id, AccountId account_id, int flag) { dumb_ptr<map_session_data> sd = map_id2sd(account_to_block(account_id)), sd2; PartyPair p = party_search(party_id); if (sd == nullptr) { if (flag == 0) { if (battle_config.error_log) PRINTF("party: member added error %d is not online\n"_fmt, account_id); intif_party_leave(party_id, account_id); // キャラ側に登録できなかったため脱退要求を出す } return 0; } sd2 = map_id2sd(account_to_block(sd->party_invite_account)); sd->party_invite = PartyId(); sd->party_invite_account = AccountId(); if (!p) { PRINTF("party_member_added: party %d not found.\n"_fmt, party_id); intif_party_leave(party_id, account_id); return 0; } if (flag == 1) { // 失敗 if (sd2 != nullptr) clif_party_inviteack(sd2, sd->status_key.name, 0); return 0; } // 成功 sd->party_sended = 0; sd->status.party_id = party_id; if (sd2 != nullptr) clif_party_inviteack(sd2, sd->status_key.name, 2); // いちおう競合確認 party_check_conflict(sd); party_send_xy_clear(p); return 0; }
// パーティメンバの移動通知 void party_recv_movemap(int party_id, int account_id, MapName mapname, int online, int lv) { struct party *p; int i; if ((p = party_search(party_id)) == NULL) return; for (i = 0; i < MAX_PARTY; i++) { struct party_member *m = &p->member[i]; if (m == NULL) { PRINTF("party_recv_movemap nullpo?\n"); return; } if (m->account_id == account_id) { m->map = mapname; m->online = online; m->lv = lv; break; } } if (i == MAX_PARTY) { if (battle_config.error_log) PRINTF("party: not found member %d on %d[%s]", account_id, party_id, p->name); return; } 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; } party_send_xy_clear(p); // 座標再通知要請 clif_party_info(p, -1); }
// パーティメンバの移動通知 void party_recv_movemap(PartyId party_id, AccountId account_id, MapName mapname, int online, int lv) { PartyPair p; int i; if (!(p = party_search(party_id))) return; for (i = 0; i < MAX_PARTY; i++) { PartyMember *m = &p->member[i]; if (m == nullptr) { PRINTF("party_recv_movemap nullpo?\n"_fmt); return; } if (m->account_id == account_id) { m->map = mapname; m->online = online; m->lv = lv; break; } } if (i == MAX_PARTY) { if (battle_config.error_log) PRINTF("party: not found member %d on %d[%s]"_fmt, account_id, party_id, p->name); return; } 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; } party_send_xy_clear(p); // 座標再通知要請 clif_party_info(p, nullptr); }