|
@@ -1157,6 +1157,15 @@ void initChangeTables(void)
|
|
|
|
|
|
StatusIconChangeTable[SC_DRESSUP] = EFST_DRESS_UP;
|
|
|
|
|
|
+ // Old Glast Heim
|
|
|
+ StatusIconChangeTable[SC_GLASTHEIM_ATK] = EFST_GLASTHEIM_ATK;
|
|
|
+ StatusIconChangeTable[SC_GLASTHEIM_DEF] = EFST_GLASTHEIM_DEF;
|
|
|
+ StatusIconChangeTable[SC_GLASTHEIM_HEAL] = EFST_GLASTHEIM_HEAL;
|
|
|
+ StatusIconChangeTable[SC_GLASTHEIM_HIDDEN] = EFST_GLASTHEIM_HIDDEN;
|
|
|
+ StatusIconChangeTable[SC_GLASTHEIM_STATE] = EFST_GLASTHEIM_STATE;
|
|
|
+ StatusIconChangeTable[SC_GLASTHEIM_ITEMDEF] = EFST_GLASTHEIM_ITEMDEF;
|
|
|
+ StatusIconChangeTable[SC_GLASTHEIM_HPSP] = EFST_GLASTHEIM_HPSP;
|
|
|
+
|
|
|
/* Other SC which are not necessarily associated to skills */
|
|
|
StatusChangeFlagTable[SC_ASPDPOTION0] |= SCB_ASPD;
|
|
|
StatusChangeFlagTable[SC_ASPDPOTION1] |= SCB_ASPD;
|
|
@@ -1304,6 +1313,12 @@ void initChangeTables(void)
|
|
|
// RODEX
|
|
|
StatusChangeFlagTable[SC_DAILYSENDMAILCNT] |= SCB_NONE;
|
|
|
|
|
|
+ // Old Glast Heim
|
|
|
+ StatusChangeFlagTable[SC_GLASTHEIM_ATK] |= SCB_ALL;
|
|
|
+ StatusChangeFlagTable[SC_GLASTHEIM_STATE] |= SCB_STR|SCB_AGI|SCB_VIT|SCB_DEX|SCB_INT|SCB_LUK;
|
|
|
+ StatusChangeFlagTable[SC_GLASTHEIM_ITEMDEF] |= SCB_DEF|SCB_MDEF;
|
|
|
+ StatusChangeFlagTable[SC_GLASTHEIM_HPSP] |= SCB_MAXHP|SCB_MAXSP;
|
|
|
+
|
|
|
// Summoner
|
|
|
StatusChangeFlagTable[SC_SHRIMPBLESSING] |= SCB_REGEN;
|
|
|
StatusChangeFlagTable[SC_DORAM_WALKSPEED] |= SCB_SPEED;
|
|
@@ -3003,6 +3018,8 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
|
|
|
bonus += 30;
|
|
|
if(sc->data[SC_CROSSBOWCLAN])
|
|
|
bonus += 30;
|
|
|
+ if(sc->data[SC_GLASTHEIM_HPSP])
|
|
|
+ bonus += sc->data[SC_GLASTHEIM_HPSP]->val1;
|
|
|
}
|
|
|
} else if (type == STATUS_BONUS_RATE) {
|
|
|
struct status_change *sc = status_get_sc(bl);
|
|
@@ -3124,6 +3141,8 @@ static int status_get_spbonus(struct block_list *bl, enum e_status_bonus type) {
|
|
|
bonus += 10;
|
|
|
if(sc->data[SC_CROSSBOWCLAN])
|
|
|
bonus += 10;
|
|
|
+ if(sc->data[SC_GLASTHEIM_HPSP])
|
|
|
+ bonus += sc->data[SC_GLASTHEIM_HPSP]->val2;
|
|
|
}
|
|
|
} else if (type == STATUS_BONUS_RATE) {
|
|
|
struct status_change *sc = status_get_sc(bl);
|
|
@@ -4186,6 +4205,10 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
|
|
|
sd->subele[ELE_NEUTRAL] += sc->data[SC_MTF_MLEATKED]->val3;
|
|
|
if (sc->data[SC_MTF_CRIDAMAGE])
|
|
|
sd->bonus.crit_atk_rate += sc->data[SC_MTF_CRIDAMAGE]->val1;
|
|
|
+ if (sc->data[SC_GLASTHEIM_ATK]) {
|
|
|
+ sd->ignore_mdef_by_race[RC_UNDEAD] += sc->data[SC_GLASTHEIM_ATK]->val1;
|
|
|
+ sd->ignore_mdef_by_race[RC_DEMON] += sc->data[SC_GLASTHEIM_ATK]->val1;
|
|
|
+ }
|
|
|
}
|
|
|
status_cpy(&sd->battle_status, base_status);
|
|
|
|
|
@@ -5467,6 +5490,8 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang
|
|
|
str += str * sc->data[SC_FULL_THROTTLE]->val3 / 100;
|
|
|
if(sc->data[SC_CHEERUP])
|
|
|
str += 3;
|
|
|
+ if(sc->data[SC_GLASTHEIM_STATE])
|
|
|
+ str += sc->data[SC_GLASTHEIM_STATE]->val1;
|
|
|
|
|
|
return (unsigned short)cap_value(str,0,USHRT_MAX);
|
|
|
}
|
|
@@ -5541,6 +5566,8 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang
|
|
|
agi += sc->data[SC_ARCLOUSEDASH]->val2;
|
|
|
if(sc->data[SC_CHEERUP])
|
|
|
agi += 3;
|
|
|
+ if(sc->data[SC_GLASTHEIM_STATE])
|
|
|
+ agi += sc->data[SC_GLASTHEIM_STATE]->val1;
|
|
|
|
|
|
return (unsigned short)cap_value(agi,0,USHRT_MAX);
|
|
|
}
|
|
@@ -5607,6 +5634,8 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang
|
|
|
#endif
|
|
|
if(sc->data[SC_CHEERUP])
|
|
|
vit += 3;
|
|
|
+ if(sc->data[SC_GLASTHEIM_STATE])
|
|
|
+ vit += sc->data[SC_GLASTHEIM_STATE]->val1;
|
|
|
|
|
|
return (unsigned short)cap_value(vit,0,USHRT_MAX);
|
|
|
}
|
|
@@ -5679,6 +5708,8 @@ static unsigned short status_calc_int(struct block_list *bl, struct status_chang
|
|
|
int_ += int_ * sc->data[SC_FULL_THROTTLE]->val3 / 100;
|
|
|
if(sc->data[SC_CHEERUP])
|
|
|
int_ += 3;
|
|
|
+ if(sc->data[SC_GLASTHEIM_STATE])
|
|
|
+ int_ += sc->data[SC_GLASTHEIM_STATE]->val1;
|
|
|
|
|
|
if(bl->type != BL_PC) {
|
|
|
if(sc->data[SC_STRIPHELM])
|
|
@@ -5762,6 +5793,8 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang
|
|
|
dex += dex * sc->data[SC_FULL_THROTTLE]->val3 / 100;
|
|
|
if(sc->data[SC_CHEERUP])
|
|
|
dex += 3;
|
|
|
+ if(sc->data[SC_GLASTHEIM_STATE])
|
|
|
+ dex += sc->data[SC_GLASTHEIM_STATE]->val1;
|
|
|
|
|
|
return (unsigned short)cap_value(dex,0,USHRT_MAX);
|
|
|
}
|
|
@@ -5826,6 +5859,8 @@ static unsigned short status_calc_luk(struct block_list *bl, struct status_chang
|
|
|
luk += luk * sc->data[SC_FULL_THROTTLE]->val3 / 100;
|
|
|
if(sc->data[SC_CHEERUP])
|
|
|
luk += 3;
|
|
|
+ if(sc->data[SC_GLASTHEIM_STATE])
|
|
|
+ luk += sc->data[SC_GLASTHEIM_STATE]->val1;
|
|
|
|
|
|
return (unsigned short)cap_value(luk,0,USHRT_MAX);
|
|
|
}
|
|
@@ -6436,6 +6471,8 @@ static defType status_calc_def(struct block_list *bl, struct status_change *sc,
|
|
|
def -= def * sc->data[SC_ASH]->val3/100;
|
|
|
if( sc->data[SC_OVERED_BOOST] && bl->type == BL_HOM )
|
|
|
def -= def * sc->data[SC_OVERED_BOOST]->val4 / 100;
|
|
|
+ if(sc->data[SC_GLASTHEIM_ITEMDEF])
|
|
|
+ def += sc->data[SC_GLASTHEIM_ITEMDEF]->val1;
|
|
|
|
|
|
return (defType)cap_value(def,DEFTYPE_MIN,DEFTYPE_MAX);;
|
|
|
}
|
|
@@ -6567,6 +6604,8 @@ static defType status_calc_mdef(struct block_list *bl, struct status_change *sc,
|
|
|
}
|
|
|
if (sc->data[SC_ODINS_POWER])
|
|
|
mdef -= 20 * sc->data[SC_ODINS_POWER]->val1;
|
|
|
+ if(sc->data[SC_GLASTHEIM_ITEMDEF])
|
|
|
+ mdef += sc->data[SC_GLASTHEIM_ITEMDEF]->val2;
|
|
|
|
|
|
return (defType)cap_value(mdef,DEFTYPE_MIN,DEFTYPE_MAX);
|
|
|
}
|
|
@@ -11085,6 +11124,28 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|
|
val4 = 1;
|
|
|
break;
|
|
|
|
|
|
+ case SC_GLASTHEIM_ATK:
|
|
|
+ val1 = 100; // Undead/Demon MDEF ignore rate
|
|
|
+ break;
|
|
|
+ case SC_GLASTHEIM_HEAL:
|
|
|
+ val1 = 100; // Heal Power rate bonus
|
|
|
+ val2 = 50; // Received heal rate bonus
|
|
|
+ break;
|
|
|
+ case SC_GLASTHEIM_HIDDEN:
|
|
|
+ val1 = 90; // Damage rate reduction bonus
|
|
|
+ break;
|
|
|
+ case SC_GLASTHEIM_STATE:
|
|
|
+ val1 = 20; // All-stat bonus
|
|
|
+ break;
|
|
|
+ case SC_GLASTHEIM_ITEMDEF:
|
|
|
+ val1 = 200; // DEF bonus
|
|
|
+ val2 = 50; // MDEF bonus
|
|
|
+ break;
|
|
|
+ case SC_GLASTHEIM_HPSP:
|
|
|
+ val1 = 10000; // HP bonus
|
|
|
+ val2 = 1000; // SP bonus
|
|
|
+ break;
|
|
|
+
|
|
|
default:
|
|
|
if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == -1 && StatusIconChangeTable[type] == EFST_BLANK ) {
|
|
|
// Status change with no calc, no icon, and no skill associated...?
|