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))