void party_booking_register(struct map_session_data *sd, short level, short mapid, short* job) { struct party_booking_ad_info *pb_ad; struct party_data *p=party_search(sd->status.party_id); int i; if (!check_party_leader(sd, p)) { clif_PartyBookingRegisterAck(sd, 1); return; } pb_ad = (struct party_booking_ad_info*)idb_get(party_booking_db, p->party.party_id); if( pb_ad == NULL ) { pb_ad = create_party_booking_data(p->party.party_id); idb_put(party_booking_db, pb_ad->index, pb_ad); } memcpy(pb_ad->charname,sd->status.name,NAME_LENGTH); pb_ad->starttime = (int)time(NULL); pb_ad->p_detail.level = level; pb_ad->p_detail.mapid = mapid; for(i=0;i<6;i++) if(job[i] != 0xFF) pb_ad->p_detail.job[i] = job[i]; else pb_ad->p_detail.job[i] = -1; clif_PartyBookingRegisterAck(sd, 0); clif_PartyBookingInsertNotify(sd, pb_ad); // Notice clif_PartyBookingSearchAck(sd->fd, &pb_ad->index, 1, false); // Update Client! return; }
void party_booking_search(struct map_session_data *sd, short level, short mapid, short job, unsigned long lastindex, short resultcount) { struct party_booking_ad_info *pb_ad; int i, count=0; unsigned long index_list[10]; bool more_result = false; DBIterator* iter = party_booking_db->iterator(party_booking_db); memset(index_list, 0, sizeof(index_list)); for( pb_ad = (struct party_booking_ad_info*)iter->first(iter,NULL); iter->exists(iter); pb_ad = (struct party_booking_ad_info*)iter->next(iter,NULL) ) { if (pb_ad->index < lastindex || (pb_ad->p_detail.level < level || pb_ad->p_detail.level-15 > level)) continue; if (count >= 10){ more_result = true; break; } if (mapid == 0 && job == -1) index_list[count] = pb_ad->index; else if (mapid == 0) { for(i=0; i<6; i++) if (pb_ad->p_detail.job[i] == job && job != -1) index_list[count] = pb_ad->index; } else if (job == -1){ if (pb_ad->p_detail.mapid == mapid) index_list[count] = pb_ad->index; } count++; } iter->destroy(iter); clif_PartyBookingSearchAck(sd->fd, index_list, count, more_result); }
void party_booking_search(struct map_session_data *sd, short level, short mapid, short job, unsigned long lastindex, short resultcount) { struct party_booking_ad_info *pb_ad; int i, count = 0; struct party_booking_ad_info *result_list[PARTY_BOOKING_RESULTS]; bool more_result = false; DBIterator *iter = db_iterator(party_booking_db); memset(result_list, 0, sizeof(result_list)); for (pb_ad = dbi_first(iter); dbi_exists(iter); pb_ad = dbi_next(iter)) { if (pb_ad->index < lastindex || (level && (pb_ad->p_detail.level < level - 15 || pb_ad->p_detail.level > level))) continue; if (count >= PARTY_BOOKING_RESULTS) { more_result = true; break; } if (mapid == 0 && job == -1) result_list[count] = pb_ad; else if (mapid == 0) { for(i = 0; i < PARTY_BOOKING_JOBS; i++) if (pb_ad->p_detail.job[i] == job && job != -1) result_list[count] = pb_ad; } else if (job == -1) { if (pb_ad->p_detail.mapid == mapid) result_list[count] = pb_ad; } if (result_list[count]) count++; } dbi_destroy(iter); clif_PartyBookingSearchAck(sd->fd, result_list, count, more_result); }