diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-08-13 05:07:13 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-08-13 05:07:13 +0000 |
commit | f54e578019d10a23338174cba8ac99441694dd95 (patch) | |
tree | 4a2a02fa7ddfa446897a2cc655db813ea87f79aa /src | |
parent | 4d345ccb426e98df70bfaee2426cb331c6a73752 (diff) | |
download | hercules-f54e578019d10a23338174cba8ac99441694dd95.tar.gz hercules-f54e578019d10a23338174cba8ac99441694dd95.tar.bz2 hercules-f54e578019d10a23338174cba8ac99441694dd95.tar.xz hercules-f54e578019d10a23338174cba8ac99441694dd95.zip |
- 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
Diffstat (limited to 'src')
-rw-r--r-- | src/char/int_party.c | 28 | ||||
-rw-r--r-- | src/char_sql/int_party.c | 23 | ||||
-rw-r--r-- | src/map/status.c | 2 |
3 files changed, 35 insertions, 18 deletions
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;
}
diff --git a/src/char_sql/int_party.c b/src/char_sql/int_party.c index 115c59cd2..1cfc3c74b 100644 --- a/src/char_sql/int_party.c +++ b/src/char_sql/int_party.c @@ -722,14 +722,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) {
diff --git a/src/map/status.c b/src/map/status.c index f5b0d4c97..40d9351c9 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -407,7 +407,7 @@ void initChangeTables(void) { StatusIconChangeTable[SC_SPEEDUP1] = SI_SPEEDPOTION2; StatusIconChangeTable[SC_INCSTR] = SI_INCSTR; StatusIconChangeTable[SC_MIRACLE] = SI_SPIRIT; - + //Other SC which are not necessarily associated to skills. StatusChangeFlagTable[SC_ASPDPOTION0] = SCB_ASPD; StatusChangeFlagTable[SC_ASPDPOTION1] = SCB_ASPD; |