diff options
Diffstat (limited to 'src/map/status.c')
-rw-r--r-- | src/map/status.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/src/map/status.c b/src/map/status.c index 290882e05..1f7d81ccf 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1746,10 +1746,8 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin hide_flag &= ~OPTION_HIDE; else { switch ( skill_id ) { - case LG_OVERBRAND: - case LG_OVERBRAND_BRANDISH: - case LG_OVERBRAND_PLUSATK: - hide_flag &=~ OPTION_CLOAK|OPTION_CHASEWALK; + case MO_ABSORBSPIRITS: // it works when already casted and target suddenly hides. + hide_flag &= ~OPTION_HIDE; break; } } @@ -4832,6 +4830,8 @@ defType status_calc_def(struct block_list *bl, struct status_change *sc, int def def -= def * 5 * (10-sc->data[SC_CAMOUFLAGE]->val4) / 100; if( sc && sc->data[SC_GENTLETOUCH_REVITALIZE] && sc->data[SC_GENTLETOUCH_REVITALIZE]->val4 ) def += 2 * sc->data[SC_GENTLETOUCH_REVITALIZE]->val4; + if( sc->data[SC_FORCEOFVANGUARD] ) + def += def * 2 * sc->data[SC_FORCEOFVANGUARD]->val1 / 100; return (defType)cap_value(def,DEFTYPE_MIN,DEFTYPE_MAX); } @@ -4882,8 +4882,6 @@ defType status_calc_def(struct block_list *bl, struct status_change *sc, int def def -= def * (sc->data[SC_FLING]->val2)/100; if( sc->data[SC_ANALYZE] ) def -= def * ( 14 * sc->data[SC_ANALYZE]->val1 ) / 100; - if( sc->data[SC_FORCEOFVANGUARD] ) - def += def * 2 * sc->data[SC_FORCEOFVANGUARD]->val1 / 100; if(sc->data[SC_SATURDAY_NIGHT_FEVER]) def -= def * (10 + 10 * sc->data[SC_SATURDAY_NIGHT_FEVER]->val1) / 100; if(sc->data[SC_EARTHDRIVE]) @@ -8406,11 +8404,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val val4 = tick/10000; tick_time = 10000; // [GodLesZ] tick time break; - case SC_FORCEOFVANGUARD: // This is not the official way to handle it but I think we should use it. [pakpil] - val2 = 20 + 12 * (val1 - 1); // Chance - val3 = 5 + (2 * val1); // Max rage counters + case SC_FORCEOFVANGUARD: + val2 = 8 + 12 * val1; // Chance + val3 = 5 + 2 * val1; // Max rage counters tick = -1; //endless duration in the client - tick_time = 6000; // [GodLesZ] tick time break; case SC_EXEEDBREAK: val1 *= 150; // 150 * skill_lv @@ -9265,6 +9262,7 @@ int status_change_clear(struct block_list* bl, int type) { sc->opt2 = 0; sc->opt3 = 0; sc->bs_counter = 0; + sc->fv_counter = 0; #ifndef RENEWAL sc->sg_counter = 0; #endif @@ -10654,11 +10652,11 @@ int status_change_timer(int tid, int64 tick, int id, intptr_t data) { return 0; } break; - + case SC_FORCEOFVANGUARD: - if( !status->charge(bl,0,20) ) + if( !status->charge(bl, 0, (24 - 4 * sce->val1)) ) break; - sc_timer_next(6000 + tick, status->change_timer, bl->id, data); + sc_timer_next(10000 + tick, status->change_timer, bl->id, data); return 0; case SC_BANDING: |