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/pc.h | |
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/pc.h')
-rw-r--r-- | src/map/pc.h | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/map/pc.h b/src/map/pc.h index c68be7b97..5b0cc4cba 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -235,7 +235,7 @@ struct map_session_data { unsigned int bonus_coma : 1; } special_state; int login_id1, login_id2; - unsigned short class_; //This is the internal job ID used by the map server to simplify comparisons/queries/etc. [Skotlex] + uint16 job; //This is the internal job ID used by the map server to simplify comparisons/queries/etc. [Skotlex] /// Groups & permissions int group_id; @@ -635,13 +635,13 @@ END_ZEROED_BLOCK; #define pc_is50overweight(sd) ( (sd)->weight*100 >= (sd)->max_weight*battle->bc->natural_heal_weight_rate ) #define pc_is90overweight(sd) ( (sd)->weight*10 >= (sd)->max_weight*9 ) #define pc_maxparameter(sd) ( \ - ((sd)->class_&MAPID_BASEMASK) == MAPID_SUMMONER ? battle->bc->max_summoner_parameter : \ - ( ((sd)->class_&MAPID_UPPERMASK) == MAPID_KAGEROUOBORO \ - || ((sd)->class_&MAPID_UPPERMASK) == MAPID_REBELLION \ - || ((sd)->class_&MAPID_THIRDMASK) == MAPID_SUPER_NOVICE_E \ - ) ? battle->bc->max_extended_parameter : ((sd)->class_&JOBL_THIRD) ? \ - (((sd)->class_&JOBL_BABY) ? battle->bc->max_baby_third_parameter : battle->bc->max_third_parameter ) : \ - (((sd)->class_&JOBL_BABY) ? battle->bc->max_baby_parameter : battle->bc->max_parameter) \ + ((sd)->job & MAPID_BASEMASK) == MAPID_SUMMONER ? battle->bc->max_summoner_parameter : \ + ( ((sd)->job & MAPID_UPPERMASK) == MAPID_KAGEROUOBORO \ + || ((sd)->job & MAPID_UPPERMASK) == MAPID_REBELLION \ + || ((sd)->job & MAPID_THIRDMASK) == MAPID_SUPER_NOVICE_E \ + ) ? battle->bc->max_extended_parameter : ((sd)->job & JOBL_THIRD) ? \ + (((sd)->job & JOBL_BABY) ? battle->bc->max_baby_third_parameter : battle->bc->max_third_parameter ) : \ + (((sd)->job & JOBL_BABY) ? battle->bc->max_baby_parameter : battle->bc->max_parameter) \ ) /// Generic check for mounts #define pc_hasmount(sd) ( (sd)->sc.option&(OPTION_RIDING|OPTION_WUGRIDER|OPTION_DRAGON|OPTION_MADOGEAR) ) @@ -1004,7 +1004,7 @@ END_ZEROED_BLOCK; /* End */ int (*delspiritball) (struct map_session_data *sd,int count,int type); int (*getmaxspiritball) (struct map_session_data *sd, int min); void (*addfame) (struct map_session_data *sd,int count); - unsigned char (*famerank) (int char_id, int job); + int (*famerank) (int char_id, uint32 job); int (*set_hate_mob) (struct map_session_data *sd, int pos, struct block_list *bl); int (*readdb) (void); |