Bug Fixes:
* Fixed #371, missing entry for Solid Skin (EL_SOLID_SKIN) in skill_cast_db.txt, causing the skill gives effect only for a ms. * Follow up f19e2dc6 `pc_mapid2jobid` gives wrong value and revert `JOBL_SUPER_NOVICE` flag that was introduced in 82561947. Signed-off-by: Cydh Ramdh <cydh@pservero.com>
This commit is contained in:
parent
9b1c138af0
commit
2fdcd92336
@ -1916,6 +1916,8 @@
|
|||||||
8408,0,0,0,-1,0,0,-1
|
8408,0,0,0,-1,0,0,-1
|
||||||
//-- EL_ZEPHYR
|
//-- EL_ZEPHYR
|
||||||
8409,0,0,0,15000,0,0,-1
|
8409,0,0,0,15000,0,0,-1
|
||||||
|
//-- EL_SOLID_SKIN
|
||||||
|
8410,0,0,0,-1,0,0,-1
|
||||||
//-- EL_STONE_SHIELD
|
//-- EL_STONE_SHIELD
|
||||||
8411,0,0,0,-1,0,0,-1
|
8411,0,0,0,-1,0,0,-1
|
||||||
//-- EL_POWER_OF_GAIA
|
//-- EL_POWER_OF_GAIA
|
||||||
|
@ -13690,7 +13690,7 @@ void clif_parse_NoviceDoriDori(int fd, struct map_session_data *sd)
|
|||||||
/// "Help me out~ Please~ T_T"
|
/// "Help me out~ Please~ T_T"
|
||||||
void clif_parse_NoviceExplosionSpirits(int fd, struct map_session_data *sd)
|
void clif_parse_NoviceExplosionSpirits(int fd, struct map_session_data *sd)
|
||||||
{
|
{
|
||||||
if( sd->class_&JOBL_SUPER_NOVICE ) {
|
if( (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE ) {
|
||||||
unsigned int next = pc_nextbaseexp(sd);
|
unsigned int next = pc_nextbaseexp(sd);
|
||||||
|
|
||||||
if( next == 0 ) next = pc_thisbaseexp(sd);
|
if( next == 0 ) next = pc_thisbaseexp(sd);
|
||||||
|
@ -119,7 +119,6 @@ enum MOBID {
|
|||||||
#define JOBL_UPPER 0x1000 //4096
|
#define JOBL_UPPER 0x1000 //4096
|
||||||
#define JOBL_BABY 0x2000 //8192
|
#define JOBL_BABY 0x2000 //8192
|
||||||
#define JOBL_THIRD 0x4000 //16384
|
#define JOBL_THIRD 0x4000 //16384
|
||||||
#define JOBL_SUPER_NOVICE 0x8000 //32768
|
|
||||||
|
|
||||||
//for filtering and quick checking.
|
//for filtering and quick checking.
|
||||||
#define MAPID_BASEMASK 0x00ff
|
#define MAPID_BASEMASK 0x00ff
|
||||||
@ -148,7 +147,8 @@ enum e_mapid {
|
|||||||
MAPID_GANGSI,
|
MAPID_GANGSI,
|
||||||
MAPID_OKTOBERFEST,
|
MAPID_OKTOBERFEST,
|
||||||
//2-1 Jobs
|
//2-1 Jobs
|
||||||
MAPID_KNIGHT = JOBL_2_1|0x1,
|
MAPID_SUPER_NOVICE = JOBL_2_1|0x0,
|
||||||
|
MAPID_KNIGHT,
|
||||||
MAPID_WIZARD,
|
MAPID_WIZARD,
|
||||||
MAPID_HUNTER,
|
MAPID_HUNTER,
|
||||||
MAPID_PRIEST,
|
MAPID_PRIEST,
|
||||||
@ -198,7 +198,8 @@ enum e_mapid {
|
|||||||
MAPID_BABY_MERCHANT,
|
MAPID_BABY_MERCHANT,
|
||||||
MAPID_BABY_THIEF,
|
MAPID_BABY_THIEF,
|
||||||
//Baby 2-1 Jobs
|
//Baby 2-1 Jobs
|
||||||
MAPID_BABY_KNIGHT = JOBL_BABY|JOBL_2_1|0x1,
|
MAPID_SUPER_BABY = JOBL_BABY|JOBL_2_1|0x0,
|
||||||
|
MAPID_BABY_KNIGHT,
|
||||||
MAPID_BABY_WIZARD,
|
MAPID_BABY_WIZARD,
|
||||||
MAPID_BABY_HUNTER,
|
MAPID_BABY_HUNTER,
|
||||||
MAPID_BABY_PRIEST,
|
MAPID_BABY_PRIEST,
|
||||||
@ -212,7 +213,8 @@ enum e_mapid {
|
|||||||
MAPID_BABY_ALCHEMIST,
|
MAPID_BABY_ALCHEMIST,
|
||||||
MAPID_BABY_ROGUE,
|
MAPID_BABY_ROGUE,
|
||||||
//3-1 Jobs
|
//3-1 Jobs
|
||||||
MAPID_RUNE_KNIGHT = JOBL_THIRD|JOBL_2_1|0x1,
|
MAPID_SUPER_NOVICE_E = JOBL_THIRD|JOBL_2_1|0x0,
|
||||||
|
MAPID_RUNE_KNIGHT,
|
||||||
MAPID_WARLOCK,
|
MAPID_WARLOCK,
|
||||||
MAPID_RANGER,
|
MAPID_RANGER,
|
||||||
MAPID_ARCH_BISHOP,
|
MAPID_ARCH_BISHOP,
|
||||||
@ -240,7 +242,8 @@ enum e_mapid {
|
|||||||
MAPID_GENETIC_T,
|
MAPID_GENETIC_T,
|
||||||
MAPID_SHADOW_CHASER_T,
|
MAPID_SHADOW_CHASER_T,
|
||||||
//Baby 3-1 Jobs
|
//Baby 3-1 Jobs
|
||||||
MAPID_BABY_RUNE = JOBL_THIRD|JOBL_BABY|JOBL_2_1|0x1,
|
MAPID_SUPER_BABY_E = JOBL_THIRD|JOBL_BABY|JOBL_2_1|0x0,
|
||||||
|
MAPID_BABY_RUNE,
|
||||||
MAPID_BABY_WARLOCK,
|
MAPID_BABY_WARLOCK,
|
||||||
MAPID_BABY_RANGER,
|
MAPID_BABY_RANGER,
|
||||||
MAPID_BABY_BISHOP,
|
MAPID_BABY_BISHOP,
|
||||||
@ -253,11 +256,6 @@ enum e_mapid {
|
|||||||
MAPID_BABY_SURA,
|
MAPID_BABY_SURA,
|
||||||
MAPID_BABY_GENETIC,
|
MAPID_BABY_GENETIC,
|
||||||
MAPID_BABY_CHASER,
|
MAPID_BABY_CHASER,
|
||||||
//Super Novices
|
|
||||||
MAPID_SUPER_NOVICE = JOBL_SUPER_NOVICE|JOBL_2_1|0x0,
|
|
||||||
MAPID_SUPER_BABY = JOBL_SUPER_NOVICE|JOBL_BABY|JOBL_2_1|0x0,
|
|
||||||
MAPID_SUPER_NOVICE_E = JOBL_SUPER_NOVICE|JOBL_THIRD|JOBL_2_1|0x0,
|
|
||||||
MAPID_SUPER_BABY_E = JOBL_SUPER_NOVICE|JOBL_THIRD|JOBL_BABY|JOBL_2_1|0x0,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//Max size for inputs to Graffiti, Talkie Box and Vending text prompts
|
//Max size for inputs to Graffiti, Talkie Box and Vending text prompts
|
||||||
|
12
src/map/pc.c
12
src/map/pc.c
@ -1818,7 +1818,7 @@ int pc_calc_skilltree_normalize_job(struct map_session_data *sd)
|
|||||||
c = MAPID_NOVICE;
|
c = MAPID_NOVICE;
|
||||||
}
|
}
|
||||||
// limit 2nd class and above to first class job levels (super novices are exempt)
|
// limit 2nd class and above to first class job levels (super novices are exempt)
|
||||||
else if (sd->class_&JOBL_2 && !(sd->class_&JOBL_SUPER_NOVICE))
|
else if (sd->class_&JOBL_2 && (sd->class_&MAPID_UPPERMASK) != MAPID_SUPER_NOVICE)
|
||||||
{
|
{
|
||||||
// regenerate change_level_2nd
|
// regenerate change_level_2nd
|
||||||
if (!sd->change_level_2nd)
|
if (!sd->change_level_2nd)
|
||||||
@ -5779,8 +5779,6 @@ int pc_jobid2mapid(unsigned short b_class)
|
|||||||
//Reverts the map-style class id to the client-style one.
|
//Reverts the map-style class id to the client-style one.
|
||||||
int pc_mapid2jobid(unsigned short class_, int sex)
|
int pc_mapid2jobid(unsigned short class_, int sex)
|
||||||
{
|
{
|
||||||
class_ &= JOBL_SUPER_NOVICE; // Quick conversion to get proper Super Novice ID.
|
|
||||||
|
|
||||||
switch(class_) {
|
switch(class_) {
|
||||||
//Novice And 1-1 Jobs
|
//Novice And 1-1 Jobs
|
||||||
case MAPID_NOVICE: return JOB_NOVICE;
|
case MAPID_NOVICE: return JOB_NOVICE;
|
||||||
@ -6245,7 +6243,7 @@ int pc_checkbaselevelup(struct map_session_data *sd) {
|
|||||||
status_calc_pc(sd,SCO_FORCE);
|
status_calc_pc(sd,SCO_FORCE);
|
||||||
status_percent_heal(&sd->bl,100,100);
|
status_percent_heal(&sd->bl,100,100);
|
||||||
|
|
||||||
if(sd->class_&JOBL_SUPER_NOVICE) {
|
if ((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE) {
|
||||||
sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_KYRIE),100,1,skill_get_time(PR_KYRIE,1));
|
sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_KYRIE),100,1,skill_get_time(PR_KYRIE,1));
|
||||||
sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_IMPOSITIO),100,1,skill_get_time(PR_IMPOSITIO,1));
|
sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_IMPOSITIO),100,1,skill_get_time(PR_IMPOSITIO,1));
|
||||||
sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_MAGNIFICAT),100,1,skill_get_time(PR_MAGNIFICAT,1));
|
sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_MAGNIFICAT),100,1,skill_get_time(PR_MAGNIFICAT,1));
|
||||||
@ -7257,7 +7255,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
|
|||||||
|
|
||||||
// Activate Steel body if a super novice dies at 99+% exp [celest]
|
// Activate Steel body if a super novice dies at 99+% exp [celest]
|
||||||
// Super Novices have no kill or die functions attached when saved by their angel
|
// Super Novices have no kill or die functions attached when saved by their angel
|
||||||
if (sd->class_&JOBL_SUPER_NOVICE && !sd->state.snovice_dead_flag) {
|
if (!sd->state.snovice_dead_flag && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE) {
|
||||||
unsigned int next = pc_nextbaseexp(sd);
|
unsigned int next = pc_nextbaseexp(sd);
|
||||||
|
|
||||||
if( next == 0 ) next = pc_thisbaseexp(sd);
|
if( next == 0 ) next = pc_thisbaseexp(sd);
|
||||||
@ -8085,7 +8083,7 @@ bool pc_jobchange(struct map_session_data *sd,int job, char upper)
|
|||||||
return false; //Nothing to change.
|
return false; //Nothing to change.
|
||||||
|
|
||||||
// changing from 1st to 2nd job
|
// changing from 1st to 2nd job
|
||||||
if ((b_class&JOBL_2) && !(sd->class_&JOBL_2) && !(b_class&JOBL_SUPER_NOVICE)) {
|
if ((b_class&JOBL_2) && !(sd->class_&JOBL_2) && (sd->class_&MAPID_UPPERMASK) != MAPID_SUPER_NOVICE) {
|
||||||
sd->change_level_2nd = sd->status.job_level;
|
sd->change_level_2nd = sd->status.job_level;
|
||||||
pc_setglobalreg (sd, "jobchange_level", sd->change_level_2nd);
|
pc_setglobalreg (sd, "jobchange_level", sd->change_level_2nd);
|
||||||
}
|
}
|
||||||
@ -8729,7 +8727,7 @@ bool pc_setregistry(struct map_session_data *sd,const char *reg,int val,int type
|
|||||||
{
|
{
|
||||||
case 3: //Char reg
|
case 3: //Char reg
|
||||||
if( !strcmp(reg,"PC_DIE_COUNTER") && sd->die_counter != val ) {
|
if( !strcmp(reg,"PC_DIE_COUNTER") && sd->die_counter != val ) {
|
||||||
i = (!sd->die_counter && sd->class_&JOBL_SUPER_NOVICE);
|
i = (!sd->die_counter && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE);
|
||||||
sd->die_counter = val;
|
sd->die_counter = val;
|
||||||
if( i )
|
if( i )
|
||||||
status_calc_pc(sd,SCO_NONE); // Lost the bonus.
|
status_calc_pc(sd,SCO_NONE); // Lost the bonus.
|
||||||
|
@ -428,7 +428,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
|
|||||||
hp += hp * skill * 2 / 100;
|
hp += hp * skill * 2 / 100;
|
||||||
else if( src->type == BL_HOM && (skill = hom_checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0 )
|
else if( src->type == BL_HOM && (skill = hom_checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0 )
|
||||||
hp += hp * skill * 2 / 100;
|
hp += hp * skill * 2 / 100;
|
||||||
if( sd && tsd && sd->status.partner_id == tsd->status.char_id && sd->class_&JOBL_SUPER_NOVICE && sd->status.sex == 0 )
|
if( sd && tsd && sd->status.partner_id == tsd->status.char_id && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.sex == 0 )
|
||||||
hp *= 2;
|
hp *= 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -8172,7 +8172,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
case SL_SUPERNOVICE:
|
case SL_SUPERNOVICE:
|
||||||
case SL_WIZARD:
|
case SL_WIZARD:
|
||||||
//NOTE: here, 'type' has the value of the associated MAPID, not of the SC_SPIRIT constant.
|
//NOTE: here, 'type' has the value of the associated MAPID, not of the SC_SPIRIT constant.
|
||||||
if (sd && dstsd && !(((dstsd->class_&MAPID_UPPERMASK) == type) || (skill_id == SL_SUPERNOVICE && (dstsd->class_&JOBL_SUPER_NOVICE)))) {
|
if (sd && dstsd && !((dstsd->class_&MAPID_UPPERMASK) == type)) {
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2698,7 +2698,7 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
|
|||||||
bonus += sd->bonus.hp;
|
bonus += sd->bonus.hp;
|
||||||
if ((i = pc_checkskill(sd,CR_TRUST)) > 0)
|
if ((i = pc_checkskill(sd,CR_TRUST)) > 0)
|
||||||
bonus += i * 200;
|
bonus += i * 200;
|
||||||
if (sd->class_&JOBL_SUPER_NOVICE && sd->status.base_level >= 99)
|
if ((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.base_level >= 99)
|
||||||
bonus += 2000; // Supernovice lvl99 hp bonus.
|
bonus += 2000; // Supernovice lvl99 hp bonus.
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3337,7 +3337,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If a Super Novice has never died and is at least joblv 70, he gets all stats +10
|
// If a Super Novice has never died and is at least joblv 70, he gets all stats +10
|
||||||
if((sd->class_&JOBL_SUPER_NOVICE && (sd->status.job_level >= 70 || sd->class_&JOBL_THIRD)) && sd->die_counter == 0) {
|
if(((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && (sd->status.job_level >= 70 || sd->class_&JOBL_THIRD)) && sd->die_counter == 0) {
|
||||||
status->str += 10;
|
status->str += 10;
|
||||||
status->agi += 10;
|
status->agi += 10;
|
||||||
status->vit += 10;
|
status->vit += 10;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user