Index: src/map/skill.c =================================================================== --- src/map/skill.c (revision 17288) +++ src/map/skill.c (working copy) @@ -5939,6 +5983,7 @@ case LG_FORCEOFVANGUARD: case SC_REPRODUCE: case SC_INVISIBILITY: + case RA_CAMOUFLAGE: if (tsce) { i = status_change_end(bl, type, INVALID_TIMER); if( i ) @@ -5948,7 +5993,6 @@ map_freeblock_unlock(); return 0; } - case RA_CAMOUFLAGE: i = sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)); if( i ) clif_skill_nodamage(src,bl,skill_id,( skill_id == LG_FORCEOFVANGUARD ) ? skill_lv : -1,i); @@ -15199,11 +15264,8 @@ if( !wall ) { if( sce->val1 < 3 ) //End camouflage. status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER); - else if( sce->val3&1 ) { //Remove wall bonus - sce->val3&=~1; - status_calc_bl(bl,SCB_SPEED); - } } + status_calc_bl(bl,SCB_SPEED); } return wall; Index: src/map/status.c =================================================================== --- src/map/status.c (revision 17288) +++ src/map/status.c (working copy) @@ -598,7 +598,7 @@ set_sc( RA_FEARBREEZE , SC_FEARBREEZE , SI_FEARBREEZE , SCB_NONE ); set_sc( RA_ELECTRICSHOCKER , SC_ELECTRICSHOCKER , SI_ELECTRICSHOCKER , SCB_NONE ); set_sc( RA_WUGDASH , SC_WUGDASH , SI_WUGDASH , SCB_SPEED ); - set_sc( RA_CAMOUFLAGE , SC_CAMOUFLAGE , SI_CAMOUFLAGE , SCB_SPEED ); + set_sc( RA_CAMOUFLAGE , SC_CAMOUFLAGE , SI_CAMOUFLAGE , SCB_CRI|SCB_SPEED|SCB_WATK|SCB_DEF ); add_sc( RA_MAGENTATRAP , SC_ELEMENTALCHANGE ); add_sc( RA_COBALTTRAP , SC_ELEMENTALCHANGE ); add_sc( RA_MAIZETRAP , SC_ELEMENTALCHANGE ); @@ -3574,8 +3574,7 @@ || (sc->data[SC_BASILICA] && sc->data[SC_BASILICA]->val4 == bl->id) // Basilica caster cannot move || (sc->data[SC_GRAVITATION] && sc->data[SC_GRAVITATION]->val3 == BCT_SELF) || (sc->data[SC_CRYSTALIZE] && bl->type != BL_MOB) - || (sc->data[SC_CAMOUFLAGE] && sc->data[SC_CAMOUFLAGE]->val1 < 3 - && !(sc->data[SC_CAMOUFLAGE]->val3&1)) + || (sc->data[SC_CAMOUFLAGE] && sc->data[SC_CAMOUFLAGE]->val1 < 3 ) ) { sc->cant.move += ( start ? 1 : -1 ); } @@ -5230,7 +5229,7 @@ val = max( val, 70 ); if( sc->data[SC_MARSHOFABYSS] ) val = max( val, 40 + 10 * sc->data[SC_MARSHOFABYSS]->val1 ); - if( sc->data[SC_CAMOUFLAGE] && (sc->data[SC_CAMOUFLAGE]->val3&1) == 0 ) + if( sc->data[SC_CAMOUFLAGE] ) val = max( val, sc->data[SC_CAMOUFLAGE]->val1 < 3 ? 0 : 25 * (5 - sc->data[SC_CAMOUFLAGE]->val1) ); if( sc->data[SC__GROOMY] ) val = max( val, sc->data[SC__GROOMY]->val2); @@ -10480,12 +10479,32 @@ break; case SC_CAMOUFLAGE: - if(--(sce->val4) > 0){ - status_charge(bl,0,7 - sce->val1); - sc_timer_next(1000 + tick, status_change_timer, bl->id, data); - return 0; + if (!status_charge(bl, 0, 7 - sce->val1)) + break; + if (sd) { + if (--sce->val4 >= 0) { + status->cri += sd->base_status.cri * 1 / 10; //+10% per second + if (!(sce->val2 & 1)) { + if (status->cri > 1000) { //max 100% + status->cri = 1000; + sce->val2 |= 1; + } + clif_updatestatus(sd, SP_CRITICAL); + } + if (!(sce->val2 & 2)) { + status->def2 -= sd->base_status.def2 * 1 / 20; //-5% per second + if (status->def2 < 0) { //min 0 + status->def2 = 0; + sce->val2 |= 2; + } + clif_updatestatus(sd, SP_DEF1); + } + status->rhw.atk += 30; //+30 per second + clif_updatestatus(sd, SP_ATK2); + } } - break; + sc_timer_next(1000 + tick, status_change_timer, bl->id, data); + return 0; case SC__REPRODUCE: if(!status_charge(bl, 0, 1))