|
@@ -7045,7 +7045,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
if (tsce) {
|
|
|
i = status_change_end(bl, type, INVALID_TIMER);
|
|
|
if( i )
|
|
|
- clif_skill_nodamage(src,bl,skill_id,( skill_id == LG_FORCEOFVANGUARD ) ? skill_lv : -1,i);
|
|
|
+ clif_skill_nodamage(src,bl,skill_id,( skill_id == LG_FORCEOFVANGUARD || skill_id == RA_CAMOUFLAGE ) ? skill_lv : -1,i);
|
|
|
else if( sd )
|
|
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
|
|
map_freeblock_unlock();
|
|
@@ -7053,7 +7053,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
}
|
|
|
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);
|
|
|
+ clif_skill_nodamage(src,bl,skill_id,( skill_id == LG_FORCEOFVANGUARD || skill_id == RA_CAMOUFLAGE ) ? skill_lv : -1,i);
|
|
|
else if( sd )
|
|
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
|
|
break;
|
|
@@ -11180,15 +11180,14 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
|
|
|
|
|
|
map_freeblock_lock();
|
|
|
|
|
|
- // only normal attack and auto cast skills benefit from its bonuses
|
|
|
- if(!(skill_get_inf3(ud->skill_id)&INF3_NOENDCAMOUFLAGE))
|
|
|
- status_change_end(src,SC_CAMOUFLAGE, INVALID_TIMER);
|
|
|
-
|
|
|
if (skill_get_casttype(ud->skill_id) == CAST_NODAMAGE)
|
|
|
skill_castend_nodamage_id(src,target,ud->skill_id,ud->skill_lv,tick,flag);
|
|
|
else
|
|
|
skill_castend_damage_id(src,target,ud->skill_id,ud->skill_lv,tick,flag);
|
|
|
|
|
|
+ if (ud->skill_id != RA_CAMOUFLAGE)
|
|
|
+ status_change_end(src, SC_CAMOUFLAGE, INVALID_TIMER); // Applies to the first skill if active
|
|
|
+
|
|
|
sc = status_get_sc(src);
|
|
|
if(sc && sc->count) {
|
|
|
if(sc->data[SC_SPIRIT] &&
|
|
@@ -11390,11 +11389,12 @@ int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data)
|
|
|
// }
|
|
|
// }
|
|
|
unit_set_walkdelay(src, tick, battle_config.default_walk_delay+skill_get_walkdelay(ud->skill_id, ud->skill_lv), 1);
|
|
|
- if(!(skill_get_inf3(ud->skill_id)&INF3_NOENDCAMOUFLAGE))
|
|
|
- status_change_end(src,SC_CAMOUFLAGE, INVALID_TIMER);
|
|
|
map_freeblock_lock();
|
|
|
skill_castend_pos2(src,ud->skillx,ud->skilly,ud->skill_id,ud->skill_lv,tick,0);
|
|
|
|
|
|
+ if (ud->skill_id != RA_CAMOUFLAGE)
|
|
|
+ status_change_end(src, SC_CAMOUFLAGE, INVALID_TIMER); // Applies to the first skill if active
|
|
|
+
|
|
|
if( sd && sd->skillitem != AL_WARP ) // Warp-Portal thru items will clear data in skill_castend_map. [Inkfish]
|
|
|
sd->skillitem = sd->skillitemlv = 0;
|
|
|
|
|
@@ -17339,7 +17339,7 @@ void skill_enchant_elemental_end(struct block_list *bl, int type)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Check camouflage condition
|
|
|
+ * Check cloaking condition
|
|
|
* @param bl
|
|
|
* @param sce
|
|
|
* @return True if near wall; False otherwise
|
|
@@ -17442,10 +17442,8 @@ bool skill_check_camouflage(struct block_list *bl, struct status_change_entry *s
|
|
|
}
|
|
|
|
|
|
if( sce ) {
|
|
|
- if( !wall ) {
|
|
|
- if( sce->val1 == 1 ) //End camouflage.
|
|
|
- status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER);
|
|
|
- }
|
|
|
+ if( !wall && sce->val1 < 3 ) //End camouflage.
|
|
|
+ status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER);
|
|
|
status_calc_bl(bl,SCB_SPEED);
|
|
|
}
|
|
|
|