viewing paste camo | C

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
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))
Viewed 657 times, submitted by Guest.