Fixed hidden statuses not being applied

* Follow up to a75133e.
* Fixes #2111.
Thanks to @Canoe, @Lemongrass3110, and @Jeybla!
This commit is contained in:
aleos 2017-05-02 17:33:54 -04:00
parent 07e1a670bc
commit ef3ad997c7
4 changed files with 92 additions and 51 deletions

View File

@ -176,6 +176,11 @@ rental_mount_speed_boost: 25
// Default (official): no // Default (official): no
show_status_katar_crit: no show_status_katar_crit: no
// Display all status changes in the status window? (Note 1)
// This setting only takes effect in renewal mode.
// Default: no
show_status_sc: no
//=================================== //===================================
// VIP system // VIP system
//=================================== //===================================

View File

@ -8397,6 +8397,7 @@ static const struct _battle_data {
{ "mvp_exp_reward_message", &battle_config.mvp_exp_reward_message, 0, 0, 1, }, { "mvp_exp_reward_message", &battle_config.mvp_exp_reward_message, 0, 0, 1, },
{ "can_damage_skill", &battle_config.can_damage_skill, 1, 0, BL_ALL, }, { "can_damage_skill", &battle_config.can_damage_skill, 1, 0, BL_ALL, },
{ "show_status_katar_crit", &battle_config.show_status_katar_crit, 0, 0, 1, }, { "show_status_katar_crit", &battle_config.show_status_katar_crit, 0, 0, 1, },
{ "show_status_sc", &battle_config.show_status_sc, 0, 0, 1, },
{ "atcommand_levelup_events", &battle_config.atcommand_levelup_events, 0, 0, 1, }, { "atcommand_levelup_events", &battle_config.atcommand_levelup_events, 0, 0, 1, },
{ "block_account_in_same_party", &battle_config.block_account_in_same_party, 1, 0, 1, }, { "block_account_in_same_party", &battle_config.block_account_in_same_party, 1, 0, 1, },
{ "tarotcard_equal_chance", &battle_config.tarotcard_equal_chance, 0, 0, 1, }, { "tarotcard_equal_chance", &battle_config.tarotcard_equal_chance, 0, 0, 1, },

View File

@ -612,6 +612,7 @@ extern struct Battle_Config
int mvp_exp_reward_message; int mvp_exp_reward_message;
int can_damage_skill; //Which BL types can damage traps int can_damage_skill; //Which BL types can damage traps
int show_status_katar_crit; int show_status_katar_crit;
int show_status_sc;
int atcommand_levelup_events; int atcommand_levelup_events;
int block_account_in_same_party; int block_account_in_same_party;
int tarotcard_equal_chance; //Official or equal chance for each card int tarotcard_equal_chance; //Official or equal chance for each card

View File

@ -5702,11 +5702,15 @@ unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc,
if(!sc || !sc->count) if(!sc || !sc->count)
return cap_value(batk,0,USHRT_MAX); return cap_value(batk,0,USHRT_MAX);
if(!display) { // Status Changes that are hidden in the status window.
if(sc->data[SC_ATKPOTION]) if(sc->data[SC_ATKPOTION])
batk += sc->data[SC_ATKPOTION]->val1; batk += sc->data[SC_ATKPOTION]->val1;
#ifdef RENEWAL
// All other Status Changes are hidden in the status window.
if(!display&&!battle_config.show_status_sc) {
return (unsigned short)cap_value(batk,0,USHRT_MAX); return (unsigned short)cap_value(batk,0,USHRT_MAX);
} }
#endif
if(sc->data[SC_BATKFOOD]) if(sc->data[SC_BATKFOOD])
batk += sc->data[SC_BATKFOOD]->val1; batk += sc->data[SC_BATKFOOD]->val1;
@ -5787,13 +5791,17 @@ unsigned short status_calc_watk(struct block_list *bl, struct status_change *sc,
if(!sc || !sc->count) if(!sc || !sc->count)
return (unsigned short)cap_value(watk,0,USHRT_MAX); return (unsigned short)cap_value(watk,0,USHRT_MAX);
if(!display) { // Status Changes that are hidden in the status window.
if(sc->data[SC_WATER_BARRIER]) if(sc->data[SC_WATER_BARRIER])
watk -= sc->data[SC_WATER_BARRIER]->val2; watk -= sc->data[SC_WATER_BARRIER]->val2;
if(sc->data[SC_GT_CHANGE]) if(sc->data[SC_GT_CHANGE])
watk += sc->data[SC_GT_CHANGE]->val2; watk += sc->data[SC_GT_CHANGE]->val2;
#ifdef RENEWAL
// All other Status Changes are hidden in the status window.
if(!display&&!battle_config.show_status_sc) {
return (unsigned short)cap_value(watk,0,USHRT_MAX); return (unsigned short)cap_value(watk,0,USHRT_MAX);
} }
#endif
#ifndef RENEWAL #ifndef RENEWAL
if(sc->data[SC_IMPOSITIO]) if(sc->data[SC_IMPOSITIO])
@ -5938,11 +5946,15 @@ unsigned short status_calc_matk(struct block_list *bl, struct status_change *sc,
if(!sc || !sc->count) if(!sc || !sc->count)
return (unsigned short)cap_value(matk,0,USHRT_MAX); return (unsigned short)cap_value(matk,0,USHRT_MAX);
if(!display) { // Status Changes that are hidden in the status window.
if(sc->data[SC_MINDBREAKER]) if(sc->data[SC_MINDBREAKER])
matk += matk * sc->data[SC_MINDBREAKER]->val2 / 100; matk += matk * sc->data[SC_MINDBREAKER]->val2 / 100;
#ifdef RENEWAL
// All other Status Changes are hidden in the status window.
if(!display&&!battle_config.show_status_sc) {
return (unsigned short)cap_value(matk,0,USHRT_MAX); return (unsigned short)cap_value(matk,0,USHRT_MAX);
} }
#endif
#ifndef RENEWAL #ifndef RENEWAL
/// Take note fixed value first before % modifiers [PRE-RENEWAL] /// Take note fixed value first before % modifiers [PRE-RENEWAL]
@ -6005,15 +6017,20 @@ signed short status_calc_critical(struct block_list *bl, struct status_change *s
{ {
if(!sc || !sc->count) if(!sc || !sc->count)
return (short)cap_value(critical,10,SHRT_MAX); return (short)cap_value(critical,10,SHRT_MAX);
if(!display) { // Status Changes that are hidden in the status window.
if (sc->data[SC_INCCRI]) { if (sc->data[SC_INCCRI]) {
if (bl->type == BL_PC && ((TBL_PC*)bl)->status.weapon == W_KATAR) // Gives double critical rate when using Katar weapons [Limestone] if (bl->type == BL_PC && ((TBL_PC*)bl)->status.weapon == W_KATAR) // Gives double critical rate when using Katar weapons [Limestone]
critical += sc->data[SC_INCCRI]->val2 * 2; critical += sc->data[SC_INCCRI]->val2 * 2;
else else
critical += sc->data[SC_INCCRI]->val2; critical += sc->data[SC_INCCRI]->val2;
} }
#ifdef RENEWAL
// All other Status Changes are hidden in the status window.
if(!display&&!battle_config.show_status_sc) {
return (short)cap_value(critical,10,SHRT_MAX); return (short)cap_value(critical,10,SHRT_MAX);
} }
#endif
if (sc->data[SC_CRIFOOD]) if (sc->data[SC_CRIFOOD])
critical += sc->data[SC_CRIFOOD]->val1; critical += sc->data[SC_CRIFOOD]->val1;
@ -6054,9 +6071,12 @@ signed short status_calc_hit(struct block_list *bl, struct status_change *sc, in
if(!sc || !sc->count) if(!sc || !sc->count)
return (short)cap_value(hit,1,SHRT_MAX); return (short)cap_value(hit,1,SHRT_MAX);
if(!display) { // Status Changes that are hidden in the status window. #ifdef RENEWAL
// All other Status Changes are hidden in the status window.
if(!display&&!battle_config.show_status_sc) {
return (short)cap_value(hit,1,SHRT_MAX); return (short)cap_value(hit,1,SHRT_MAX);
} }
#endif
if(sc->data[SC_INCHIT]) if(sc->data[SC_INCHIT])
hit += sc->data[SC_INCHIT]->val1; hit += sc->data[SC_INCHIT]->val1;
@ -6116,9 +6136,12 @@ signed short status_calc_flee(struct block_list *bl, struct status_change *sc, i
if(!sc || !sc->count) if(!sc || !sc->count)
return (short)cap_value(flee,1,SHRT_MAX); return (short)cap_value(flee,1,SHRT_MAX);
if(!display) { // Status Changes that are hidden in the status window. #ifdef RENEWAL
// All other Status Changes are hidden in the status window.
if(!display&&!battle_config.show_status_sc) {
return (short)cap_value(flee,1,SHRT_MAX); return (short)cap_value(flee,1,SHRT_MAX);
} }
#endif
if(sc->data[SC_OVERED_BOOST]) //Should be final and unmodifiable by any means if(sc->data[SC_OVERED_BOOST]) //Should be final and unmodifiable by any means
return sc->data[SC_OVERED_BOOST]->val2; return sc->data[SC_OVERED_BOOST]->val2;
@ -6219,9 +6242,12 @@ signed short status_calc_flee2(struct block_list *bl, struct status_change *sc,
if(!sc || !sc->count) if(!sc || !sc->count)
return (short)cap_value(flee2,10,SHRT_MAX); return (short)cap_value(flee2,10,SHRT_MAX);
if(!display) { // Status Changes that are hidden in the status window. #ifdef RENEWAL
// All other Status Changes are hidden in the status window.
if(!display&&!battle_config.show_status_sc) {
return (short)cap_value(flee2,10,SHRT_MAX); return (short)cap_value(flee2,10,SHRT_MAX);
} }
#endif
if(sc->data[SC_INCFLEE2]) if(sc->data[SC_INCFLEE2])
flee2 += sc->data[SC_INCFLEE2]->val2; flee2 += sc->data[SC_INCFLEE2]->val2;
@ -6246,7 +6272,6 @@ defType status_calc_def(struct block_list *bl, struct status_change *sc, int def
if(!sc || !sc->count) if(!sc || !sc->count)
return (defType)cap_value(def,DEFTYPE_MIN,DEFTYPE_MAX); return (defType)cap_value(def,DEFTYPE_MIN,DEFTYPE_MAX);
if(!display) { // Status Changes that are hidden in the status window.
#ifdef RENEWAL #ifdef RENEWAL
if(sc->data[SC_ASSUMPTIO]) if(sc->data[SC_ASSUMPTIO])
def <<= 1; // only eDEF is doubled def <<= 1; // only eDEF is doubled
@ -6259,8 +6284,13 @@ defType status_calc_def(struct block_list *bl, struct status_change *sc, int def
def -= def * 5 * sc->data[SC_CAMOUFLAGE]->val3 / 100; def -= def * 5 * sc->data[SC_CAMOUFLAGE]->val3 / 100;
if(sc->data[SC_OVERED_BOOST] && bl->type == BL_PC) if(sc->data[SC_OVERED_BOOST] && bl->type == BL_PC)
def -= def * sc->data[SC_OVERED_BOOST]->val4 / 100; def -= def * sc->data[SC_OVERED_BOOST]->val4 / 100;
#ifdef RENEWAL
// All other Status Changes are hidden in the status window.
if(!display&&!battle_config.show_status_sc) {
return (defType)cap_value(def,DEFTYPE_MIN,DEFTYPE_MAX); return (defType)cap_value(def,DEFTYPE_MIN,DEFTYPE_MAX);
} }
#endif
if(sc->data[SC_BERSERK]) if(sc->data[SC_BERSERK])
return 0; return 0;
@ -6353,17 +6383,17 @@ signed short status_calc_def2(struct block_list *bl, struct status_change *sc, i
#endif #endif
} }
if(!display) { // Status Changes that are hidden in the status window.
if(sc->data[SC_CAMOUFLAGE]) if(sc->data[SC_CAMOUFLAGE])
def2 -= def2 * 5 * sc->data[SC_CAMOUFLAGE]->val3 / 100; def2 -= def2 * 5 * sc->data[SC_CAMOUFLAGE]->val3 / 100;
if(sc->data[SC_GT_REVITALIZE]) if(sc->data[SC_GT_REVITALIZE])
def2 += sc->data[SC_GT_REVITALIZE]->val4; def2 += sc->data[SC_GT_REVITALIZE]->val4;
#ifdef RENEWAL #ifdef RENEWAL
// All other Status Changes are hidden in the status window.
if(!display&&!battle_config.show_status_sc) {
return (short)cap_value(def2,SHRT_MIN,SHRT_MAX); return (short)cap_value(def2,SHRT_MIN,SHRT_MAX);
#else
return (short)cap_value(def2,1,SHRT_MAX);
#endif
} }
#endif
if(sc->data[SC_BERSERK]) if(sc->data[SC_BERSERK])
return 0; return 0;
@ -6432,15 +6462,19 @@ defType status_calc_mdef(struct block_list *bl, struct status_change *sc, int md
if(!sc || !sc->count) if(!sc || !sc->count)
return (defType)cap_value(mdef,DEFTYPE_MIN,DEFTYPE_MAX); return (defType)cap_value(mdef,DEFTYPE_MIN,DEFTYPE_MAX);
if(!display) { // Status Changes that are hidden in the status window.
#ifdef RENEWAL #ifdef RENEWAL
if(sc->data[SC_ASSUMPTIO]) if(sc->data[SC_ASSUMPTIO])
mdef <<= 1; // only eMDEF is doubled mdef <<= 1; // only eMDEF is doubled
#endif #endif
if(sc->data[SC_NEUTRALBARRIER]) if(sc->data[SC_NEUTRALBARRIER])
mdef += mdef * sc->data[SC_NEUTRALBARRIER]->val2 / 100; mdef += mdef * sc->data[SC_NEUTRALBARRIER]->val2 / 100;
#ifdef RENEWAL
// All other Status Changes are hidden in the status window.
if(!display&&!battle_config.show_status_sc) {
return (defType)cap_value(mdef,DEFTYPE_MIN,DEFTYPE_MAX); return (defType)cap_value(mdef,DEFTYPE_MIN,DEFTYPE_MAX);
} }
#endif
if(sc->data[SC_BERSERK]) if(sc->data[SC_BERSERK])
return 0; return 0;
@ -6499,15 +6533,15 @@ signed short status_calc_mdef2(struct block_list *bl, struct status_change *sc,
#endif #endif
} }
if(!display) { // Status Changes that are hidden in the status window.
if(sc->data[SC_MINDBREAKER]) if(sc->data[SC_MINDBREAKER])
mdef2 -= mdef2 * sc->data[SC_MINDBREAKER]->val3 / 100; mdef2 -= mdef2 * sc->data[SC_MINDBREAKER]->val3 / 100;
#ifdef RENEWAL #ifdef RENEWAL
// All other Status Changes are hidden in the status window.
if(!display&&!battle_config.show_status_sc) {
return (short)cap_value(mdef2,SHRT_MIN,SHRT_MAX); return (short)cap_value(mdef2,SHRT_MIN,SHRT_MAX);
#else
return (short)cap_value(mdef2,1,SHRT_MAX);
#endif
} }
#endif
if(sc->data[SC_BERSERK]) if(sc->data[SC_BERSERK])
return 0; return 0;