diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt index ef8d37dff1..647e17ee7b 100644 --- a/db/re/skill_cast_db.txt +++ b/db/re/skill_cast_db.txt @@ -1916,6 +1916,8 @@ 8408,0,0,0,-1,0,0,-1 //-- EL_ZEPHYR 8409,0,0,0,15000,0,0,-1 +//-- EL_SOLID_SKIN +8410,0,0,0,-1,0,0,-1 //-- EL_STONE_SHIELD 8411,0,0,0,-1,0,0,-1 //-- EL_POWER_OF_GAIA diff --git a/src/map/clif.c b/src/map/clif.c index 77a222588a..25109c010d 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -13690,7 +13690,7 @@ void clif_parse_NoviceDoriDori(int fd, struct map_session_data *sd) /// "Help me out~ Please~ T_T" 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); if( next == 0 ) next = pc_thisbaseexp(sd); diff --git a/src/map/map.h b/src/map/map.h index 547af38a79..d35e30249c 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -119,7 +119,6 @@ enum MOBID { #define JOBL_UPPER 0x1000 //4096 #define JOBL_BABY 0x2000 //8192 #define JOBL_THIRD 0x4000 //16384 -#define JOBL_SUPER_NOVICE 0x8000 //32768 //for filtering and quick checking. #define MAPID_BASEMASK 0x00ff @@ -148,7 +147,8 @@ enum e_mapid { MAPID_GANGSI, MAPID_OKTOBERFEST, //2-1 Jobs - MAPID_KNIGHT = JOBL_2_1|0x1, + MAPID_SUPER_NOVICE = JOBL_2_1|0x0, + MAPID_KNIGHT, MAPID_WIZARD, MAPID_HUNTER, MAPID_PRIEST, @@ -198,7 +198,8 @@ enum e_mapid { MAPID_BABY_MERCHANT, MAPID_BABY_THIEF, //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_HUNTER, MAPID_BABY_PRIEST, @@ -212,7 +213,8 @@ enum e_mapid { MAPID_BABY_ALCHEMIST, MAPID_BABY_ROGUE, //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_RANGER, MAPID_ARCH_BISHOP, @@ -240,7 +242,8 @@ enum e_mapid { MAPID_GENETIC_T, MAPID_SHADOW_CHASER_T, //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_RANGER, MAPID_BABY_BISHOP, @@ -253,11 +256,6 @@ enum e_mapid { MAPID_BABY_SURA, MAPID_BABY_GENETIC, 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 diff --git a/src/map/pc.c b/src/map/pc.c index 41273a8350..5c824e5d26 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1818,7 +1818,7 @@ int pc_calc_skilltree_normalize_job(struct map_session_data *sd) c = MAPID_NOVICE; } // 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 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. int pc_mapid2jobid(unsigned short class_, int sex) { - class_ &= JOBL_SUPER_NOVICE; // Quick conversion to get proper Super Novice ID. - switch(class_) { //Novice And 1-1 Jobs 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_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_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)); @@ -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] // 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); 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. // 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; 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 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; if( i ) status_calc_pc(sd,SCO_NONE); // Lost the bonus. diff --git a/src/map/skill.c b/src/map/skill.c index c12f685823..c3a282ed9c 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -428,7 +428,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk hp += hp * skill * 2 / 100; else if( src->type == BL_HOM && (skill = hom_checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0 ) 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; break; } @@ -8172,7 +8172,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SL_SUPERNOVICE: case SL_WIZARD: //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); break; } diff --git a/src/map/status.c b/src/map/status.c index 6e67b80657..e2dd75b376 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2698,7 +2698,7 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) { bonus += sd->bonus.hp; if ((i = pc_checkskill(sd,CR_TRUST)) > 0) 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. } @@ -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((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->agi += 10; status->vit += 10;