From f54e578019d10a23338174cba8ac99441694dd95 Mon Sep 17 00:00:00 2001 From: skotlex Date: Sun, 13 Aug 2006 05:07:13 +0000 Subject: - Corrected the mapif_parse_PartyChangeMap function to correctly update level-range when someone logs on/off, fixes being unable to set even-share on once it's been broken even when the characters out of range logoff. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@8254 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/char/int_party.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'src/char/int_party.c') diff --git a/src/char/int_party.c b/src/char/int_party.c index 62fc1ca7f..7f09095d9 100644 --- a/src/char/int_party.c +++ b/src/char/int_party.c @@ -620,8 +620,8 @@ int mapif_parse_PartyLeave(int fd, int party_id, int account_id, int char_id) { return 0; } -// パ?ティマップ更新要求 -int mapif_parse_PartyChangeMap(int fd, int party_id, int account_id, int char_id, unsigned short map, int online, int lv) { +int mapif_parse_PartyChangeMap(int fd, int party_id, int account_id, int char_id, unsigned short map, int online, int lv) +{ struct party_data *p; int i; @@ -634,14 +634,23 @@ int mapif_parse_PartyChangeMap(int fd, int party_id, int account_id, int char_id p->party.member[i].char_id == char_id) { p->party.member[i].map = map; - if (p->party.member[i].online != online) { + if (p->party.member[i].online != online) + { p->party.member[i].online = online; - if (online) p->party.count++; - else p->party.count--; - if (p->family && p->party.exp && !party_check_exp_share(p)) - { //Even-share lost. - p->party.exp = 0; - mapif_party_optionchanged(0, &p->party, 0, 0); + if (online) + p->party.count++; + else + p->party.count--; + // Even share check situations: Family state (always breaks) + // character logging on/off is max/min level (update level range) + // or character logging on/off has a different level (update level range using new level) + if (p->family || + (p->party.member[i].lv <= p->min_lv || p->party.member[i].lv >= p->max_lv) || + (p->party.member[i].lv != lv && (lv <= p->min_lv || lv >= p->max_lv)) + ) + { + p->party.member[i].lv = lv; + int_party_check_lv(p); } } if (p->party.member[i].lv != lv) { @@ -657,7 +666,6 @@ int mapif_parse_PartyChangeMap(int fd, int party_id, int account_id, int char_id break; } } - return 0; } -- cgit v1.2.3-60-g2f50