diff options
author | Haru <haru@dotalux.com> | 2016-12-02 16:00:08 +0100 |
---|---|---|
committer | Haru <haru@dotalux.com> | 2016-12-03 15:38:56 +0100 |
commit | 76801cdf48a979728034cb81b81c989f7f655f5a (patch) | |
tree | 0c7ab7e9170515c982399df7eda3bd2577521a06 /src/map/party.c | |
parent | cfa4ae95efca5557d085c56815259f47e6f380fb (diff) | |
download | hercules-76801cdf48a979728034cb81b81c989f7f655f5a.tar.gz hercules-76801cdf48a979728034cb81b81c989f7f655f5a.tar.bz2 hercules-76801cdf48a979728034cb81b81c989f7f655f5a.tar.xz hercules-76801cdf48a979728034cb81b81c989f7f655f5a.zip |
Clarify some Job Class vs MapID confusion (2/2)
This commit ensures that `sd->job` and related variables only contain
MapIDs (i.e. the serverside optimized values, where High Novice is
MAPID_NOVICE | JOBL_UPPER) and are never checked against the
client-based Job Class values.
As a rule of thumb, from now on, when a variable is named `job` or
`jobid`, it is intended to contain a MapID and not a Job Class ID. The
type of such variable shall be an unsigned `uint16` or `uint32`.
To ensure that related third party code is also verified when this
commit is merged, the variable `struct map_session_data::class_ (i.e.
`sd->class_`) is renamed to `job`.
Some issues in related lines are also fixed, including:
- The atcommand `@mount` would not check properly that the requesting
character is a 2nd class Swordsman type.
- `pc->addfame()` would silently accept invalid MapIDs, sending unknown
values to the client (more on this in a subsequent commit).
- `pc->famerank()` would not use the passed job as a bitmask, causing
the caller to have to mask it beforehand (more on this in a
subsequent commit).
- The Soul Linker check in TK_JUMPKICK wasn't future-proof (no harm
caused currently).
- Gunslingers would be able to be targeted by Spiritual Bestowment
(`MO_KITRANSLATION`) and Spiritual Sphere Absorption
(`MO_ABSORBSPIRITS`) due to a faulty check introduced when the
Rebellion class was implemented (causing unintended interaction with
Coins).
Signed-off-by: Haru <haru@dotalux.com>
Diffstat (limited to 'src/map/party.c')
-rw-r--r-- | src/map/party.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/map/party.c b/src/map/party.c index 6489242fe..3bf9542c7 100644 --- a/src/map/party.c +++ b/src/map/party.c @@ -881,15 +881,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, @@ -1160,7 +1159,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; |