diff options
Diffstat (limited to 'src/map/party.c')
-rw-r--r-- | src/map/party.c | 316 |
1 files changed, 211 insertions, 105 deletions
diff --git a/src/map/party.c b/src/map/party.c index 551c4d56f..7d7f69620 100644 --- a/src/map/party.c +++ b/src/map/party.c @@ -2,8 +2,8 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2012-2015 Hercules Dev Team - * Copyright (C) Athena Dev Teams + * Copyright (C) 2012-2020 Hercules Dev Team + * Copyright (C) Athena Dev Teams * * Hercules is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,10 +31,12 @@ #include "map/itemdb.h" #include "map/log.h" #include "map/map.h" +#include "map/messages.h" #include "map/mob.h" // struct mob_data #include "map/pc.h" #include "map/skill.h" #include "map/status.h" +#include "map/achievement.h" #include "common/HPM.h" #include "common/cbasetypes.h" #include "common/memmgr.h" @@ -50,18 +52,22 @@ #include <stdlib.h> #include <string.h> -struct party_interface party_s; +static struct party_interface party_s; struct party_interface *party; /*========================================== * Fills the given party_member structure according to the sd provided. * Used when creating/adding people to a party. [Skotlex] *------------------------------------------*/ -void party_fill_member(struct party_member* member, struct map_session_data* sd, unsigned int leader) { +static void party_fill_member(struct party_member *member, struct map_session_data *sd, unsigned int leader) +{ + nullpo_retv(member); + nullpo_retv(sd); + member->account_id = sd->status.account_id; member->char_id = sd->status.char_id; safestrncpy(member->name, sd->status.name, NAME_LENGTH); - member->class_ = sd->status.class_; + member->class = sd->status.class; member->map = sd->mapindex; member->lv = sd->status.base_level; member->online = 1; @@ -76,7 +82,7 @@ void party_fill_member(struct party_member* member, struct map_session_data* sd, * @return the member_id. * @retval INDEX_NOT_FOUND if not in party. */ -int party_getmemberid(struct party_data *p, struct map_session_data *sd) +static int party_getmemberid(struct party_data *p, struct map_session_data *sd) { int member_id; nullpo_retr(INDEX_NOT_FOUND, p); @@ -94,7 +100,7 @@ int party_getmemberid(struct party_data *p, struct map_session_data *sd) /*========================================== * Request an available sd of this party *------------------------------------------*/ -struct map_session_data* party_getavailablesd(struct party_data *p) +static struct map_session_data *party_getavailablesd(struct party_data *p) { int i; nullpo_retr(NULL, p); @@ -105,7 +111,7 @@ struct map_session_data* party_getavailablesd(struct party_data *p) /*========================================== * Retrieves and validates the sd pointer for this party member [Skotlex] *------------------------------------------*/ -struct map_session_data *party_sd_check(int party_id, int account_id, int char_id) +static struct map_session_data *party_sd_check(int party_id, int account_id, int char_id) { struct map_session_data *sd = map->id2sd(account_id); @@ -122,7 +128,7 @@ struct map_session_data *party_sd_check(int party_id, int account_id, int char_i return sd; } -int party_db_final(union DBKey key, struct DBData *data, va_list ap) +static int party_db_final(union DBKey key, struct DBData *data, va_list ap) { struct party_data *p; @@ -135,7 +141,7 @@ int party_db_final(union DBKey key, struct DBData *data, va_list ap) return 0; } /// Party data lookup using party id. -struct party_data* party_search(int party_id) +static struct party_data *party_search(int party_id) { if(!party_id) return NULL; @@ -143,7 +149,7 @@ struct party_data* party_search(int party_id) } /// Party data lookup using party name. -struct party_data* party_searchname(const char* str) +static struct party_data *party_searchname(const char *str) { struct party_data* p; @@ -157,11 +163,14 @@ struct party_data* party_searchname(const char* str) return p; } -int party_create(struct map_session_data *sd, const char *name,int item,int item2) +static int party_create(struct map_session_data *sd, const char *name, int item, int item2) { struct party_member leader; char tname[NAME_LENGTH]; + nullpo_retr(0, sd); + nullpo_retr(0, name); + safestrncpy(tname, name, NAME_LENGTH); trim(tname); @@ -181,10 +190,13 @@ int party_create(struct map_session_data *sd, const char *name,int item,int item party->fill_member(&leader, sd, 1); intif->create_party(&leader,name,item,item2); + + achievement->validate_party_create(sd); //Achievements (Smokexyz) + return 0; } -void party_created(int account_id, int char_id, int fail, int party_id, const char *name) +static void party_created(int account_id, int char_id, int fail, int party_id, const char *name) { struct map_session_data *sd; sd=map->id2sd(account_id); @@ -208,13 +220,14 @@ void party_created(int account_id, int char_id, int fail, int party_id, const ch } -int party_request_info(int party_id, int char_id) +static int party_request_info(int party_id, int char_id) { return intif->request_partyinfo(party_id, char_id); } /// Invoked (from char-server) when the party info is not found. -int party_recv_noinfo(int party_id, int char_id) { +static int party_recv_noinfo(int party_id, int char_id) +{ party->broken(party_id); if( char_id != 0 ) { // requester @@ -226,32 +239,39 @@ int party_recv_noinfo(int party_id, int char_id) { return 0; } -void party_check_state(struct party_data *p) { +static void party_check_state(struct party_data *p) +{ int i; + nullpo_retv(p); memset(&p->state, 0, sizeof(p->state)); - for (i = 0; i < MAX_PARTY; i ++) { + for (i = 0; i < MAX_PARTY; i++) { if (!p->party.member[i].online) continue; //Those not online shouldn't apart to skill usage and all that. - switch (p->party.member[i].class_) { + switch (p->party.member[i].class) { case JOB_MONK: case JOB_BABY_MONK: case JOB_CHAMPION: + case JOB_SURA: + case JOB_SURA_T: + case JOB_BABY_SURA: p->state.monk = 1; - break; + break; case JOB_STAR_GLADIATOR: p->state.sg = 1; - break; + break; case JOB_SUPER_NOVICE: case JOB_SUPER_BABY: + case JOB_SUPER_NOVICE_E: + case JOB_SUPER_BABY_E: p->state.snovice = 1; - break; + break; case JOB_TAEKWON: p->state.tk = 1; - break; + break; } } } -int party_recv_info(const struct party *sp, int char_id) +static int party_recv_info(const struct party *sp, int char_id) { struct party_data* p; const struct party_member *member; @@ -262,6 +282,7 @@ int party_recv_info(const struct party *sp, int char_id) int added_count = 0; int j; int member_id; + int leader_account_id = 0, leader_char_id = 0; nullpo_ret(sp); @@ -275,8 +296,12 @@ int party_recv_info(const struct party *sp, int char_id) ARR_FIND(0, MAX_PARTY, i, sp->member[i].account_id == member->account_id && sp->member[i].char_id == member->char_id); - if (i == MAX_PARTY) + if (i == MAX_PARTY) { removed[removed_count++] = member_id; + } else if (member->leader != 0) { + leader_account_id = member->account_id; + leader_char_id = member->char_id; + } } for (member_id = 0; member_id < MAX_PARTY; ++member_id) { member = &sp->member[member_id]; @@ -304,6 +329,7 @@ int party_recv_info(const struct party *sp, int char_id) continue;// not online 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)); memset(&p->data, 0, sizeof(p->data)); @@ -312,6 +338,8 @@ int party_recv_info(const struct party *sp, int char_id) if ( member->char_id == 0 ) continue;// empty p->data[member_id].sd = party->sd_check(sp->party_id, member->account_id, member->char_id); + if (member->account_id == leader_account_id && member->char_id == leader_char_id) + p->party.member[member_id].leader = 1; } party->check_state(p); while( added_count > 0 ) { // new in party @@ -341,7 +369,7 @@ int party_recv_info(const struct party *sp, int char_id) return 0; } -int party_invite(struct map_session_data *sd,struct map_session_data *tsd) +static int party_invite(struct map_session_data *sd, struct map_session_data *tsd) { struct party_data *p; int i; @@ -355,7 +383,7 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd) ARR_FIND(0, MAX_PARTY, i, p->data[i].sd == sd); if( i == MAX_PARTY || !p->party.member[i].leader ) { - clif->message(sd->fd, msg_sd(sd,282)); + clif->message(sd->fd, msg_sd(sd,282)); // You need to be a party leader to use this command. return 0; } @@ -396,6 +424,12 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd) return 0; } + if ((tsd->status.allow_party & 1) != 0) { + // party invite blocked by player + clif->party_inviteack(sd, tsd->status.name, 5); + return 0; + } + tsd->party_invite=sd->status.party_id; tsd->party_invite_account=sd->status.account_id; @@ -403,10 +437,13 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd) return 1; } -void party_reply_invite(struct map_session_data *sd,int party_id,int flag) { +static void party_reply_invite(struct map_session_data *sd, int party_id, int flag) +{ struct map_session_data* tsd; struct party_member member; + nullpo_retv(sd); + if( sd->party_invite != party_id ) {// forged sd->party_invite = 0; @@ -434,10 +471,13 @@ void party_reply_invite(struct map_session_data *sd,int party_id,int flag) { //- Loads up party data if not in server //- Sets up the pointer to him //- Player must be authed/active and belong to a party before calling this method -void party_member_joined(struct map_session_data *sd) +static void party_member_joined(struct map_session_data *sd) { - struct party_data* p = party->search(sd->status.party_id); + struct party_data* p; int i; + + nullpo_retv(sd); + p = party->search(sd->status.party_id); if (!p) { party->request_info(sd->status.party_id, sd->status.char_id); return; @@ -460,7 +500,8 @@ void party_member_joined(struct map_session_data *sd) /// Invoked (from char-server) when a new member is added to the party. /// flag: 0-success, 1-failure -int party_member_added(int party_id,int account_id,int char_id, int flag) { +static int party_member_added(int party_id, int account_id, int char_id, int flag) +{ struct map_session_data *sd = map->id2sd(account_id),*sd2; struct party_data *p = party->search(party_id); int i, j; @@ -520,7 +561,7 @@ int party_member_added(int party_id,int account_id,int char_id, int flag) { } /// Party member 'sd' requesting kick of member with <account_id, name>. -int party_removemember(struct map_session_data* sd, int account_id, const char *name) +static int party_removemember(struct map_session_data *sd, int account_id, const char *name) { struct party_data *p; int i; @@ -536,6 +577,7 @@ int party_removemember(struct map_session_data* sd, int account_id, const char * if( !p->party.member[i].leader ) return 0; // only party leader may remove members + nullpo_retr(0, name); ARR_FIND( 0, MAX_PARTY, i, p->party.member[i].account_id == account_id && strncmp(p->party.member[i].name,name,NAME_LENGTH) == 0 ); if( i == MAX_PARTY ) return 0; // no such char in party @@ -545,11 +587,12 @@ int party_removemember(struct map_session_data* sd, int account_id, const char * } /// Party member 'sd' requesting exit from party. -int party_leave(struct map_session_data *sd) +static int party_leave(struct map_session_data *sd) { struct party_data *p; int i; + nullpo_ret(sd); p = party->search(sd->status.party_id); if( p == NULL ) return 0; @@ -563,7 +606,7 @@ int party_leave(struct map_session_data *sd) } /// Invoked (from char-server) when a party member leaves the party. -int party_member_withdraw(int party_id, int account_id, int char_id) +static int party_member_withdraw(int party_id, int account_id, int char_id) { struct map_session_data* sd = map->id2sd(account_id); struct party_data* p = party->search(party_id); @@ -572,11 +615,43 @@ int party_member_withdraw(int party_id, int account_id, int char_id) int i; 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 ) { + bool was_leader = false; + int prev_leader_accountId = 0; + if (p->party.member[i].leader != 0) { + was_leader = true; + prev_leader_accountId = p->party.member[i].account_id; + } + 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--; party->check_state(p); + + if (was_leader) { + int k; + // Member was party leader, try to pick a new leader from online members + ARR_FIND(0, MAX_PARTY, k, p->party.member[k].account_id != 0 && p->party.member[k].online == 1); + + if (k == MAX_PARTY) { + // No online members, get an offline one + ARR_FIND(0, MAX_PARTY, k, p->party.member[k].account_id != 0); + } + + if (k < MAX_PARTY) { + // Update party's leader + p->party.member[k].leader = 1; + + if (p->data[k].sd != NULL) { + /** update members **/ + clif->PartyLeaderChanged(p->data[k].sd, prev_leader_accountId, p->data[k].sd->status.account_id); + } + + //Update info. + intif->party_leaderchange(p->party.party_id, p->party.member[k].account_id, p->party.member[k].char_id); + clif->party_info(p, NULL); + } + } } } @@ -600,7 +675,7 @@ int party_member_withdraw(int party_id, int account_id, int char_id) } /// Invoked (from char-server) when a party is disbanded. -int party_broken(int party_id) +static int party_broken(int party_id) { struct party_data* p; int i, j; @@ -620,6 +695,7 @@ int party_broken(int party_id) 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); p->data[i].sd->status.party_id=0; + clif->charnameupdate(p->data[i].sd); } } @@ -632,7 +708,7 @@ int party_broken(int party_id) return 0; } -int party_changeoption(struct map_session_data *sd,int exp,int item) +static int party_changeoption(struct map_session_data *sd, int exp, int item) { nullpo_ret(sd); @@ -642,7 +718,8 @@ int party_changeoption(struct map_session_data *sd,int exp,int item) return 0; } -int party_optionchanged(int party_id,int account_id,int exp,int item,int flag) { +static int party_optionchanged(int party_id, int account_id, int exp, int item, int flag) +{ struct party_data *p; struct map_session_data *sd=map->id2sd(account_id); if( (p=party->search(party_id))==NULL) @@ -659,7 +736,7 @@ int party_optionchanged(int party_id,int account_id,int exp,int item,int flag) { return 0; } -bool party_changeleader(struct map_session_data *sd, struct map_session_data *tsd) +static bool party_changeleader(struct map_session_data *sd, struct map_session_data *tsd) { struct party_data *p; int mi, tmi; @@ -668,12 +745,19 @@ bool party_changeleader(struct map_session_data *sd, struct map_session_data *ts return false; if (!tsd || tsd->status.party_id != sd->status.party_id) { - clif->message(sd->fd, msg_sd(sd,283)); + clif->message(sd->fd, msg_sd(sd,283)); // Target character must be online and in your current party. + return false; + } + + if (battle_config.party_change_leader_same_map && sd->bl.m != tsd->bl.m) { +#if PACKETVER >= 20120307 + clif->msgtable(sd, MSG_PARTY_MASTER_CHANGE_SAME_MAP); // It is only possible to change the party leader while on the same map. +#endif return false; } if( map->list[sd->bl.m].flag.partylock ) { - clif->message(sd->fd, msg_sd(sd,287)); + clif->message(sd->fd, msg_sd(sd,287)); // You cannot change party leaders in this map. return false; } @@ -685,8 +769,7 @@ bool party_changeleader(struct map_session_data *sd, struct map_session_data *ts return false; //Shouldn't happen if (!p->party.member[mi].leader) { - //Need to be a party leader. - clif->message(sd->fd, msg_sd(sd,282)); + clif->message(sd->fd, msg_sd(sd,282)); // You need to be a party leader to use this command. return false; } @@ -711,7 +794,7 @@ bool party_changeleader(struct map_session_data *sd, struct map_session_data *ts /// - changes maps /// - logs in or out /// - gains a level (disabled) -int party_recv_movemap(int party_id,int account_id,int char_id, unsigned short mapid,int online,int lv) +static int party_recv_movemap(int party_id, int account_id, int char_id, unsigned short mapid, int online, int lv) { struct party_member* m; struct party_data* p; @@ -739,10 +822,12 @@ int party_recv_movemap(int party_id,int account_id,int char_id, unsigned short m return 0; } -void party_send_movemap(struct map_session_data *sd) +static void party_send_movemap(struct map_session_data *sd) { struct party_data *p; + nullpo_retv(sd); + if( sd->status.party_id==0 ) return; @@ -772,16 +857,18 @@ void party_send_movemap(struct map_session_data *sd) return; } -void party_send_levelup(struct map_session_data *sd) +static void party_send_levelup(struct map_session_data *sd) { intif->party_changemap(sd,1); } -int party_send_logout(struct map_session_data *sd) +static int party_send_logout(struct map_session_data *sd) { struct party_data *p; int i; + nullpo_ret(sd); + if(!sd->status.party_id) return 0; @@ -798,12 +885,22 @@ int party_send_logout(struct map_session_data *sd) return 1; } -int party_send_message(struct map_session_data *sd,const char *mes,int len) +static int party_send_message(struct map_session_data *sd, const char *mes) { - if(sd->status.party_id==0) + nullpo_ret(sd); + nullpo_ret(mes); + + if (sd->status.party_id == 0) + return 0; + + struct party_data *p = party->search(sd->status.party_id); + + if (p == NULL) return 0; - intif->party_message(sd->status.party_id,sd->status.account_id,mes,len); - party->recv_message(sd->status.party_id,sd->status.account_id,mes,len); + + int len = (int)strlen(mes); + + clif->party_message(p, 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); @@ -811,16 +908,7 @@ int party_send_message(struct map_session_data *sd,const char *mes,int len) return 0; } -int party_recv_message(int party_id,int account_id,const char *mes,int len) -{ - struct party_data *p; - if( (p=party->search(party_id))==NULL) - return 0; - clif->party_message(p,account_id,mes,len); - return 0; -} - -int party_skill_check(struct map_session_data *sd, int party_id, uint16 skill_id, uint16 skill_lv) +static int party_skill_check(struct map_session_data *sd, int party_id, uint16 skill_id, uint16 skill_lv) { struct party_data *p; struct map_session_data *p_sd; @@ -843,6 +931,8 @@ int party_skill_check(struct map_session_data *sd, int party_id, uint16 skill_id return 0; //Unknown case? } + nullpo_ret(sd); + for(i=0;i<MAX_PARTY;i++){ if ((p_sd = p->data[i].sd) == NULL) continue; @@ -850,15 +940,14 @@ int party_skill_check(struct map_session_data *sd, int party_id, uint16 skill_id continue; switch(skill_id) { case TK_COUNTER: //Increase Triple Attack rate of Monks. - if((p_sd->class_&MAPID_UPPERMASK) == MAPID_MONK - && pc->checkskill(p_sd,MO_TRIPLEATTACK)) { + if ((p_sd->job & MAPID_UPPERMASK) == MAPID_MONK && pc->checkskill(p_sd, MO_TRIPLEATTACK)) { sc_start4(&p_sd->bl,&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)); } break; case MO_COMBOFINISH: //Increase Counter rate of Star Gladiators - if((p_sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR + if ((p_sd->job & MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR && sd->sc.data[SC_COUNTERKICK_READY] && pc->checkskill(p_sd,SG_FRIEND)) { sc_start4(&p_sd->bl,&p_sd->bl,SC_SKILLRATE_UP,100,TK_COUNTER, @@ -871,7 +960,7 @@ int party_skill_check(struct map_session_data *sd, int party_id, uint16 skill_id return 0; } -int party_send_xy_timer(int tid, int64 tick, int id, intptr_t data) +static int party_send_xy_timer(int tid, int64 tick, int id, intptr_t data) { struct DBIterator *iter = db_iterator(party->db); struct party_data* p; @@ -910,7 +999,7 @@ int party_send_xy_timer(int tid, int64 tick, int id, intptr_t data) return 0; } -int party_send_xy_clear(struct party_data *p) +static int party_send_xy_clear(struct party_data *p) { int i; @@ -926,15 +1015,13 @@ int party_send_xy_clear(struct party_data *p) } // exp share and added zeny share [Valaris] -int party_exp_share(struct party_data* p, struct block_list* src, unsigned int base_exp, unsigned int job_exp, int zeny) +static int party_exp_share(struct party_data *p, struct block_list *src, unsigned int base_exp, unsigned int job_exp, int zeny) { struct map_session_data* sd[MAX_PARTY]; unsigned int i, c; -#ifdef RENEWAL_EXP - unsigned int job_exp_bonus, base_exp_bonus; -#endif nullpo_ret(p); + nullpo_ret(src); // count the number of players eligible for exp sharing for (i = c = 0; i < MAX_PARTY; i++) { @@ -959,21 +1046,7 @@ int party_exp_share(struct party_data* p, struct block_list* src, unsigned int b zeny = (unsigned int) cap_value(zeny * bonus/100, INT_MIN, INT_MAX); } -#ifdef RENEWAL_EXP - base_exp_bonus = base_exp; - job_exp_bonus = job_exp; -#endif - for (i = 0; i < c; i++) { -#ifdef RENEWAL_EXP - struct mob_data *md = BL_CAST(BL_MOB, src); - if (md != NULL && md->db->mexp == 0) { - int rate = pc->level_penalty_mod(md->level - (sd[i])->status.base_level, md->status.race, md->status.mode, 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 pc->gainexp(sd[i], src, base_exp, job_exp, false); if (zeny) // zeny from mobs [Valaris] @@ -983,12 +1056,16 @@ int party_exp_share(struct party_data* p, struct block_list* src, unsigned int b } //Does party loot. first_charid holds the charid of the player who has time priority to take the item. -int party_share_loot(struct party_data* p, struct map_session_data* sd, struct item* item_data, int first_charid) +static int party_share_loot(struct party_data *p, struct map_session_data *sd, struct item *item_data, int first_charid) { struct map_session_data *target = NULL; int i; + + nullpo_ret(item_data); + if (p && p->party.item&2 && (first_charid || !(battle_config.party_share_type&1))) { + nullpo_ret(sd); //item distribution to party members. if (battle_config.party_share_type&2) { //Round Robin @@ -1048,8 +1125,9 @@ int party_share_loot(struct party_data* p, struct map_session_data* sd, struct i return 0; } -int party_send_dot_remove(struct map_session_data *sd) +static int party_send_dot_remove(struct map_session_data *sd) { + nullpo_ret(sd); if (sd->status.party_id) clif->party_xy_remove(sd); return 0; @@ -1058,13 +1136,14 @@ int party_send_dot_remove(struct map_session_data *sd) // To use for Taekwon's "Fighting Chant" // int c = 0; // party_foreachsamemap(party->sub_count, sd, 0, &c); -int party_sub_count(struct block_list *bl, va_list ap) +static int party_sub_count(struct block_list *bl, va_list ap) { const struct map_session_data *sd = NULL; nullpo_ret(bl); Assert_ret(bl->type == BL_PC); sd = BL_UCCAST(BL_PC, bl); + nullpo_ret(sd); if (sd->state.autotrade) return 0; @@ -1079,7 +1158,8 @@ int party_sub_count(struct block_list *bl, va_list ap) * Arglist-based version of party_foreachsamemap * @see party_foreachsamemap */ -int party_vforeachsamemap(int (*func)(struct block_list*,va_list), struct map_session_data *sd, int range, va_list ap) { +static int party_vforeachsamemap(int (*func)(struct block_list*, va_list), struct map_session_data *sd, int range, va_list ap) +{ struct party_data *p; int i; int x0,y0,x1,y1; @@ -1125,7 +1205,7 @@ int party_vforeachsamemap(int (*func)(struct block_list*,va_list), struct map_se } // Special check for Minstrel's and Wanderer's chorus skills. -int party_sub_count_chorus(struct block_list *bl, va_list ap) +static int party_sub_count_chorus(struct block_list *bl, va_list ap) { const struct map_session_data *sd = NULL; @@ -1139,7 +1219,7 @@ int party_sub_count_chorus(struct block_list *bl, va_list ap) if (battle_config.idle_no_share && pc_isidle(sd)) return 0; - if ( (sd->class_&MAPID_THIRDMASK) != MAPID_MINSTRELWANDERER ) + if ((sd->job & MAPID_THIRDMASK) != MAPID_MINSTRELWANDERER) return 0; return 1; @@ -1153,7 +1233,8 @@ int party_sub_count_chorus(struct block_list *bl, va_list ap) * @param ... Additional parameters to pass to func() * @return Sum of the return values from func() */ -int party_foreachsamemap(int (*func)(struct block_list*,va_list), struct map_session_data *sd, int range, ...) { +static int party_foreachsamemap(int (*func)(struct block_list*, va_list), struct map_session_data *sd, int range, ...) +{ va_list ap; int ret; va_start(ap, range); @@ -1166,17 +1247,22 @@ int party_foreachsamemap(int (*func)(struct block_list*,va_list), struct map_ses * Party Booking in KRO [Spiria] *------------------------------------------*/ -struct party_booking_ad_info* create_party_booking_data(void) { +static struct party_booking_ad_info *create_party_booking_data(void) +{ struct party_booking_ad_info *pb_ad; CREATE(pb_ad, struct party_booking_ad_info, 1); pb_ad->index = party->booking_nextid++; return pb_ad; } -void party_recruit_register(struct map_session_data *sd, short level, const char *notice) { +static void party_recruit_register(struct map_session_data *sd, short level, const char *notice) +{ #ifdef PARTY_RECRUIT struct party_booking_ad_info *pb_ad; + nullpo_retv(sd); + nullpo_retv(notice); + pb_ad = (struct party_booking_ad_info*)idb_get(party->booking_db, sd->status.char_id); if( pb_ad == NULL ) @@ -1202,11 +1288,15 @@ void party_recruit_register(struct map_session_data *sd, short level, const char #endif } -void party_booking_register(struct map_session_data *sd, short level, short mapid, short* job) { +static void party_booking_register(struct map_session_data *sd, short level, short mapid, short *job) +{ #ifndef PARTY_RECRUIT struct party_booking_ad_info *pb_ad; int i; + nullpo_retv(sd); + nullpo_retv(job); + pb_ad = (struct party_booking_ad_info*)idb_get(party->booking_db, sd->status.char_id); if( pb_ad == NULL ) { @@ -1236,10 +1326,12 @@ void party_booking_register(struct map_session_data *sd, short level, short mapi #endif } -void party_recruit_update(struct map_session_data *sd, const char *notice) { +static void party_recruit_update(struct map_session_data *sd, const char *notice) +{ #ifdef PARTY_RECRUIT struct party_booking_ad_info *pb_ad; + nullpo_retv(sd); pb_ad = (struct party_booking_ad_info*)idb_get(party->booking_db, sd->status.char_id); if( pb_ad == NULL ) @@ -1256,11 +1348,15 @@ void party_recruit_update(struct map_session_data *sd, const char *notice) { return; #endif } -void party_booking_update(struct map_session_data *sd, short* job) { +static void party_booking_update(struct map_session_data *sd, short *job) +{ #ifndef PARTY_RECRUIT int i; struct party_booking_ad_info *pb_ad; + nullpo_retv(sd); + nullpo_retv(job); + pb_ad = (struct party_booking_ad_info*)idb_get(party->booking_db, sd->status.char_id); if( pb_ad == NULL ) @@ -1279,7 +1375,8 @@ void party_booking_update(struct map_session_data *sd, short* job) { #endif } -void party_recruit_search(struct map_session_data *sd, short level, short mapid, unsigned long lastindex, short resultcount) { +static void party_recruit_search(struct map_session_data *sd, short level, short mapid, unsigned long lastindex, short resultcount) +{ #ifdef PARTY_RECRUIT struct party_booking_ad_info *pb_ad; int count = 0; @@ -1287,6 +1384,7 @@ void party_recruit_search(struct map_session_data *sd, short level, short mapid, bool more_result = false; struct DBIterator *iter = db_iterator(party->booking_db); + nullpo_retv(sd); memset(result_list, 0, sizeof(result_list)); for( pb_ad = dbi_first(iter); dbi_exists(iter); pb_ad = dbi_next(iter) ) @@ -1309,7 +1407,8 @@ void party_recruit_search(struct map_session_data *sd, short level, short mapid, return; #endif } -void party_booking_search(struct map_session_data *sd, short level, short mapid, short job, unsigned long lastindex, short resultcount) { +static void party_booking_search(struct map_session_data *sd, short level, short mapid, short job, unsigned long lastindex, short resultcount) +{ #ifndef PARTY_RECRUIT struct party_booking_ad_info *pb_ad; int i; @@ -1318,6 +1417,8 @@ void party_booking_search(struct map_session_data *sd, short level, short mapid, bool more_result = false; struct DBIterator *iter = db_iterator(party->booking_db); + nullpo_retv(sd); + memset(result_list, 0, sizeof(result_list)); for( pb_ad = dbi_first(iter); dbi_exists(iter); pb_ad = dbi_next(iter) ) { @@ -1349,10 +1450,12 @@ void party_booking_search(struct map_session_data *sd, short level, short mapid, #endif } -bool party_booking_delete(struct map_session_data *sd) +static bool party_booking_delete(struct map_session_data *sd) { struct party_booking_ad_info* pb_ad; + nullpo_retr(false, sd); + if((pb_ad = (struct party_booking_ad_info*)idb_get(party->booking_db, sd->status.char_id))!=NULL) { #ifdef PARTY_RECRUIT @@ -1364,12 +1467,14 @@ bool party_booking_delete(struct map_session_data *sd) } return true; } -void do_final_party(void) { +static void do_final_party(void) +{ party->db->destroy(party->db,party->db_final); db_destroy(party->booking_db); // Party Booking [Spiria] } // Constructor, init vars -void do_init_party(bool minimal) { +static void do_init_party(bool minimal) +{ if (minimal) return; @@ -1378,12 +1483,14 @@ void do_init_party(bool minimal) { timer->add_func_list(party->send_xy_timer, "party_send_xy_timer"); timer->add_interval(timer->gettick()+battle_config.party_update_interval, party->send_xy_timer, 0, 0, battle_config.party_update_interval); } + /*===================================== -* Default Functions : party.h -* Generated by HerculesInterfaceMaker -* created by Susu -*-------------------------------------*/ -void party_defaults(void) { + * Default Functions : party.h + * Generated by HerculesInterfaceMaker + * created by Susu + *-------------------------------------*/ +void party_defaults(void) +{ party = &party_s; /* */ @@ -1420,7 +1527,6 @@ void party_defaults(void) { 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; |