diff options
Diffstat (limited to 'src/map/party.c')
-rw-r--r-- | src/map/party.c | 188 |
1 files changed, 113 insertions, 75 deletions
diff --git a/src/map/party.c b/src/map/party.c index a7a002404..e30d16c07 100644 --- a/src/map/party.c +++ b/src/map/party.c @@ -102,7 +102,7 @@ static TBL_PC* party_sd_check(int party_id, int account_id, int char_id) int party_db_final(DBKey key, DBData *data, va_list ap) { struct party_data *p; - if( ( p = iDB->data2ptr(data) ) && p->instance ) + if( ( p = DB->data2ptr(data) ) && p->instance ) aFree(p->instance); return 0; @@ -209,7 +209,7 @@ int party_request_info(int party_id, int char_id) /// Invoked (from char-server) when the party info is not found. int party_recv_noinfo(int party_id, int char_id) { - iParty->broken(party_id); + party->broken(party_id); if( char_id != 0 )// requester { struct map_session_data* sd; @@ -297,7 +297,7 @@ int party_recv_info(struct party* sp, int char_id) sd = p->data[member_id].sd; if( sd == NULL ) continue;// not online - iParty->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); } memcpy(&p->party, sp, sizeof(struct party)); memset(&p->state, 0, sizeof(p->state)); @@ -328,7 +328,7 @@ int party_recv_info(struct party* sp, int char_id) if( char_id != 0 )// requester { sd = iMap->charid2sd(char_id); - if( sd && sd->status.party_id == sp->party_id && iParty->getmemberid(p,sd) == -1 ) + if( sd && sd->status.party_id == sp->party_id && party->getmemberid(p,sd) == -1 ) sd->status.party_id = 0;// was not in the party } return 0; @@ -341,7 +341,7 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd) nullpo_ret(sd); - if( ( p = iParty->search(sd->status.party_id) ) == NULL ) + if( ( p = party->search(sd->status.party_id) ) == NULL ) return 0; // confirm if this player is a party leader @@ -430,10 +430,10 @@ void party_reply_invite(struct map_session_data *sd,int party_id,int flag) //- Player must be authed/active and belong to a party before calling this method void party_member_joined(struct map_session_data *sd) { - struct party_data* p = iParty->search(sd->status.party_id); + struct party_data* p = party->search(sd->status.party_id); int i; if (!p) { - iParty->request_info(sd->status.party_id, sd->status.char_id); + party->request_info(sd->status.party_id, sd->status.char_id); return; } ARR_FIND( 0, MAX_PARTY, i, p->party.member[i].account_id == sd->status.account_id && p->party.member[i].char_id == sd->status.char_id ); @@ -455,7 +455,7 @@ void party_member_joined(struct map_session_data *sd) int party_member_added(int party_id,int account_id,int char_id, int flag) { struct map_session_data *sd = iMap->id2sd(account_id),*sd2; - struct party_data *p = iParty->search(party_id); + struct party_data *p = party->search(party_id); int i, j; if(sd == NULL || sd->status.char_id != char_id || !sd->party_joining ) { @@ -517,7 +517,7 @@ int party_removemember(struct map_session_data* sd, int account_id, char* name) struct party_data *p; int i; - p = iParty->search(sd->status.party_id); + p = party->search(sd->status.party_id); if( p == NULL ) return 0; @@ -542,7 +542,7 @@ int party_leave(struct map_session_data *sd) struct party_data *p; int i; - p = iParty->search(sd->status.party_id); + p = party->search(sd->status.party_id); if( p == NULL ) return 0; @@ -558,7 +558,7 @@ int party_leave(struct map_session_data *sd) int party_member_withdraw(int party_id, int account_id, int char_id) { struct map_session_data* sd = iMap->id2sd(account_id); - struct party_data* p = iParty->search(party_id); + struct party_data* p = party->search(party_id); if( p ) { int i; @@ -589,7 +589,7 @@ int party_broken(int party_id) struct party_data* p; int i, j; - p = iParty->search(party_id); + p = party->search(party_id); if( p == NULL ) return 0; @@ -623,7 +623,7 @@ int party_optionchanged(int party_id,int account_id,int exp,int item,int flag) { struct party_data *p; struct map_session_data *sd=iMap->id2sd(account_id); - if( (p=iParty->search(party_id))==NULL) + if( (p=party->search(party_id))==NULL) return 0; //Flag&1: Exp change denied. Flag&2: Item change denied. @@ -656,7 +656,7 @@ bool party_changeleader(struct map_session_data *sd, struct map_session_data *ts return false; } - if ((p = iParty->search(sd->status.party_id)) == NULL) + if ((p = party->search(sd->status.party_id)) == NULL) return false; ARR_FIND( 0, MAX_PARTY, mi, p->data[mi].sd == sd ); @@ -698,7 +698,7 @@ int party_recv_movemap(int party_id,int account_id,int char_id, unsigned short m struct party_data* p; int i; - p = iParty->search(party_id); + p = party->search(party_id); if( p == NULL ) return 0; @@ -729,7 +729,7 @@ void party_send_movemap(struct map_session_data *sd) intif_party_changemap(sd,1); - p=iParty->search(sd->status.party_id); + p=party->search(sd->status.party_id); if (!p) return; if(sd->state.connect_new) { @@ -767,7 +767,7 @@ int party_send_logout(struct map_session_data *sd) return 0; intif_party_changemap(sd,0); - p=iParty->search(sd->status.party_id); + p=party->search(sd->status.party_id); if(!p) return 0; ARR_FIND( 0, MAX_PARTY, i, p->data[i].sd == sd ); @@ -784,7 +784,7 @@ int party_send_message(struct map_session_data *sd,const char *mes,int len) if(sd->status.party_id==0) return 0; intif_party_message(sd->status.party_id,sd->status.account_id,mes,len); - iParty->recv_message(sd->status.party_id,sd->status.account_id,mes,len); + party->recv_message(sd->status.party_id,sd->status.account_id,mes,len); // Chat logging type 'P' / Party Chat logs->chat(LOG_CHAT_PARTY, sd->status.party_id, sd->status.char_id, sd->status.account_id, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y, NULL, mes); @@ -795,7 +795,7 @@ int party_send_message(struct map_session_data *sd,const char *mes,int len) int party_recv_message(int party_id,int account_id,const char *mes,int len) { struct party_data *p; - if( (p=iParty->search(party_id))==NULL) + if( (p=party->search(party_id))==NULL) return 0; clif->party_message(p,account_id,mes,len); return 0; @@ -807,7 +807,7 @@ int party_skill_check(struct map_session_data *sd, int party_id, uint16 skill_id struct map_session_data *p_sd; int i; - if(!party_id || (p=iParty->search(party_id))==NULL) + if(!party_id || (p=party->search(party_id))==NULL) return 0; switch(skill_id) { case TK_COUNTER: //Increase Triple Attack rate of Monks. @@ -832,7 +832,7 @@ int party_skill_check(struct map_session_data *sd, int party_id, uint16 skill_id switch(skill_id) { case TK_COUNTER: //Increase Triple Attack rate of Monks. if((p_sd->class_&MAPID_UPPERMASK) == MAPID_MONK - && iPc->checkskill(p_sd,MO_TRIPLEATTACK)) { + && pc->checkskill(p_sd,MO_TRIPLEATTACK)) { sc_start4(&p_sd->bl,SC_SKILLRATE_UP,100,MO_TRIPLEATTACK, 50+50*skill_lv, //+100/150/200% rate 0,0,skill->get_time(SG_FRIEND, 1)); @@ -841,9 +841,9 @@ int party_skill_check(struct map_session_data *sd, int party_id, uint16 skill_id case MO_COMBOFINISH: //Increase Counter rate of Star Gladiators if((p_sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR && sd->sc.data[SC_READYCOUNTER] - && iPc->checkskill(p_sd,SG_FRIEND)) { + && pc->checkskill(p_sd,SG_FRIEND)) { sc_start4(&p_sd->bl,SC_SKILLRATE_UP,100,TK_COUNTER, - 50+50*iPc->checkskill(p_sd,SG_FRIEND), //+100/150/200% rate + 50+50*pc->checkskill(p_sd,SG_FRIEND), //+100/150/200% rate 0,0,skill->get_time(SG_FRIEND, 1)); } break; @@ -948,15 +948,15 @@ int party_exp_share(struct party_data* p, struct block_list* src, unsigned int b for (i = 0; i < c; i++) { #ifdef RENEWAL_EXP if( !(src && src->type == BL_MOB && ((TBL_MOB*)src)->db->mexp) ){ - int rate = iPc->level_penalty_mod(sd[i], (TBL_MOB*)src, 1); + int rate = pc->level_penalty_mod(sd[i], (TBL_MOB*)src, 1); base_exp = (unsigned int)cap_value(base_exp_bonus * rate / 100, 1, UINT_MAX); job_exp = (unsigned int)cap_value(job_exp_bonus * rate / 100, 1, UINT_MAX); } #endif - iPc->gainexp(sd[i], src, base_exp, job_exp, false); + pc->gainexp(sd[i], src, base_exp, job_exp, false); if (zeny) // zeny from mobs [Valaris] - iPc->getzeny(sd[i],zeny,LOG_TYPE_PICKDROP_MONSTER,NULL); + pc->getzeny(sd[i],zeny,LOG_TYPE_PICKDROP_MONSTER,NULL); } return 0; } @@ -981,7 +981,7 @@ int party_share_loot(struct party_data* p, struct map_session_data* sd, struct i if( (psd = p->data[i].sd) == NULL || sd->bl.m != psd->bl.m || pc_isdead(psd) || (battle_config.idle_no_share && pc_isidle(psd)) ) continue; - if (iPc->additem(psd,item_data,item_data->amount,LOG_TYPE_PICKDROP_PLAYER)) + if (pc->additem(psd,item_data,item_data->amount,LOG_TYPE_PICKDROP_PLAYER)) continue; //Chosen char can't pick up loot. //Successful pick. @@ -1003,7 +1003,7 @@ int party_share_loot(struct party_data* p, struct map_session_data* sd, struct i } while (count > 0) { //Pick a random member. i = rnd()%count; - if (iPc->additem(psd[i],item_data,item_data->amount,LOG_TYPE_PICKDROP_PLAYER)) + if (pc->additem(psd[i],item_data,item_data->amount,LOG_TYPE_PICKDROP_PLAYER)) { //Discard this receiver. psd[i] = psd[count-1]; count--; @@ -1017,7 +1017,7 @@ int party_share_loot(struct party_data* p, struct map_session_data* sd, struct i if (!target) { target = sd; //Give it to the char that picked it up - if ((i=iPc->additem(sd,item_data,item_data->amount,LOG_TYPE_PICKDROP_PLAYER))) + if ((i=pc->additem(sd,item_data,item_data->amount,LOG_TYPE_PICKDROP_PLAYER))) return i; } @@ -1036,7 +1036,7 @@ int party_send_dot_remove(struct map_session_data *sd) // To use for Taekwon's "Fighting Chant" // int c = 0; -// party_foreachsamemap(iParty->sub_count, sd, 0, &c); +// party_foreachsamemap(party->sub_count, sd, 0, &c); int party_sub_count(struct block_list *bl, va_list ap) { struct map_session_data *sd = (TBL_PC *)bl; @@ -1062,7 +1062,7 @@ int party_foreachsamemap(int (*func)(struct block_list*,va_list),struct map_sess nullpo_ret(sd); - if((p=iParty->search(sd->status.party_id))==NULL) + if((p=party->search(sd->status.party_id))==NULL) return 0; x0=sd->bl.x-range; @@ -1110,10 +1110,16 @@ static struct party_booking_ad_info* create_party_booking_data(void) return pb_ad; } +#ifndef PARTY_RECRUIT void party_booking_register(struct map_session_data *sd, short level, short mapid, short* job) +#else +void party_booking_register(struct map_session_data *sd, short level, const char *notice) +#endif { struct party_booking_ad_info *pb_ad; - int i; +#ifndef PARTY_RECRUIT + int i; +#endif pb_ad = (struct party_booking_ad_info*)idb_get(party_booking_db, sd->status.char_id); @@ -1129,22 +1135,32 @@ void party_booking_register(struct map_session_data *sd, short level, short mapi } memcpy(pb_ad->charname,sd->status.name,NAME_LENGTH); - pb_ad->starttime = (int)time(NULL); - pb_ad->p_detail.level = level; + pb_ad->expiretime = (int)time(NULL); + pb_ad->p_detail.level = level; +#ifndef PARTY_RECRUIT pb_ad->p_detail.mapid = mapid; for(i=0;i<PARTY_BOOKING_JOBS;i++) if(job[i] != 0xFF) pb_ad->p_detail.job[i] = job[i]; else pb_ad->p_detail.job[i] = -1; +#else + safestrncpy(pb_ad->p_detail.notice, notice, PB_NOTICE_LENGTH); +#endif clif->PartyBookingRegisterAck(sd, 0); clif->PartyBookingInsertNotify(sd, pb_ad); // Notice } +#ifndef PARTY_RECRUIT void party_booking_update(struct map_session_data *sd, short* job) +#else +void party_booking_update(struct map_session_data *sd, const char *notice) +#endif { +#ifndef PARTY_RECRUIT int i; +#endif struct party_booking_ad_info *pb_ad; pb_ad = (struct party_booking_ad_info*)idb_get(party_booking_db, sd->status.char_id); @@ -1152,20 +1168,33 @@ void party_booking_update(struct map_session_data *sd, short* job) if( pb_ad == NULL ) return; - pb_ad->starttime = (int)time(NULL);// Update time. + pb_ad->expiretime = (int)time(NULL);// Update time. +#ifndef PARTY_RECRUIT for(i=0;i<PARTY_BOOKING_JOBS;i++) if(job[i] != 0xFF) pb_ad->p_detail.job[i] = job[i]; else pb_ad->p_detail.job[i] = -1; +#else + if (notice != NULL) { + safestrncpy(pb_ad->p_detail.notice, notice, PB_NOTICE_LENGTH); + } +#endif clif->PartyBookingUpdateNotify(sd, pb_ad); } +#ifndef PARTY_RECRUIT void party_booking_search(struct map_session_data *sd, short level, short mapid, short job, unsigned long lastindex, short resultcount) +#else +void party_booking_search(struct map_session_data *sd, short level, short mapid, unsigned long lastindex, short resultcount) +#endif { struct party_booking_ad_info *pb_ad; - int i, count=0; +#ifndef PARTY_RECRUIT + int i; +#endif + int count = 0; struct party_booking_ad_info* result_list[PARTY_BOOKING_RESULTS]; bool more_result = false; DBIterator* iter = db_iterator(party_booking_db); @@ -1174,12 +1203,18 @@ void party_booking_search(struct map_session_data *sd, short level, short mapid, for( pb_ad = dbi_first(iter); dbi_exists(iter); pb_ad = dbi_next(iter) ) { +#ifndef PARTY_RECRUIT if (pb_ad->index < lastindex || (level && (pb_ad->p_detail.level < level-15 || pb_ad->p_detail.level > level))) continue; +#else + if ((level && (pb_ad->p_detail.level < level-15 || pb_ad->p_detail.level > level))) + continue; +#endif if (count >= PARTY_BOOKING_RESULTS){ more_result = true; break; } +#ifndef PARTY_RECRUIT if (mapid == 0 && job == -1) result_list[count] = pb_ad; else if (mapid == 0) { @@ -1190,6 +1225,9 @@ void party_booking_search(struct map_session_data *sd, short level, short mapid, if (pb_ad->p_detail.mapid == mapid) result_list[count] = pb_ad; } +#else + result_list[count] = pb_ad; +#endif if( result_list[count] ) { count++; @@ -1217,47 +1255,47 @@ bool party_booking_delete(struct map_session_data *sd) * created by Susu *-------------------------------------*/ void party_defaults(void) { - iParty = &iParty_s; + party = &party_s; /* funcs */ - iParty->do_init_party = do_init_party; - iParty->do_final_party = do_final_party; - iParty->search = party_search; - iParty->searchname = party_searchname; - iParty->getmemberid = party_getmemberid; - iParty->getavailablesd = party_getavailablesd; + party->do_init_party = do_init_party; + party->do_final_party = do_final_party; + party->search = party_search; + party->searchname = party_searchname; + party->getmemberid = party_getmemberid; + party->getavailablesd = party_getavailablesd; - iParty->create = party_create; - iParty->created = party_created; - iParty->request_info = party_request_info; - iParty->invite = party_invite; - iParty->member_joined = party_member_joined; - iParty->member_added = party_member_added; - iParty->leave = party_leave; - iParty->removemember = party_removemember; - iParty->member_withdraw = party_member_withdraw; - iParty->reply_invite = party_reply_invite; - iParty->recv_noinfo = party_recv_noinfo; - iParty->recv_info = party_recv_info; - iParty->recv_movemap = party_recv_movemap; - iParty->broken = party_broken; - iParty->optionchanged = party_optionchanged; - iParty->changeoption = party_changeoption; - iParty->changeleader = party_changeleader; - iParty->send_movemap = party_send_movemap; - iParty->send_levelup = party_send_levelup; - iParty->send_logout = party_send_logout; - iParty->send_message = party_send_message; - iParty->recv_message = party_recv_message; - iParty->skill_check = party_skill_check; - iParty->send_xy_clear = party_send_xy_clear; - iParty->exp_share = party_exp_share; - iParty->share_loot = party_share_loot; - iParty->send_dot_remove = party_send_dot_remove; - iParty->sub_count = party_sub_count; - iParty->booking_register = party_booking_register; - iParty->booking_update = party_booking_update; - iParty->booking_search = party_booking_search; - iParty->booking_delete = party_booking_delete; + party->create = party_create; + party->created = party_created; + party->request_info = party_request_info; + party->invite = party_invite; + party->member_joined = party_member_joined; + party->member_added = party_member_added; + party->leave = party_leave; + party->removemember = party_removemember; + party->member_withdraw = party_member_withdraw; + party->reply_invite = party_reply_invite; + party->recv_noinfo = party_recv_noinfo; + party->recv_info = party_recv_info; + party->recv_movemap = party_recv_movemap; + party->broken = party_broken; + party->optionchanged = party_optionchanged; + party->changeoption = party_changeoption; + party->changeleader = party_changeleader; + party->send_movemap = party_send_movemap; + party->send_levelup = party_send_levelup; + party->send_logout = party_send_logout; + party->send_message = party_send_message; + party->recv_message = party_recv_message; + party->skill_check = party_skill_check; + party->send_xy_clear = party_send_xy_clear; + party->exp_share = party_exp_share; + party->share_loot = party_share_loot; + party->send_dot_remove = party_send_dot_remove; + party->sub_count = party_sub_count; + party->booking_register = party_booking_register; + party->booking_update = party_booking_update; + party->booking_search = party_booking_search; + party->booking_delete = party_booking_delete; } |