|
@@ -10514,21 +10514,16 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- if( ud->skill_id == PR_TURNUNDEAD )
|
|
|
|
- {
|
|
|
|
|
|
+ else if( ud->skill_id == PR_TURNUNDEAD ) {
|
|
struct status_data *tstatus = status_get_status_data(target);
|
|
struct status_data *tstatus = status_get_status_data(target);
|
|
if( !battle_check_undead(tstatus->race, tstatus->def_ele) )
|
|
if( !battle_check_undead(tstatus->race, tstatus->def_ele) )
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
-
|
|
|
|
- if( ud->skill_id == RA_WUGSTRIKE ){
|
|
|
|
|
|
+ else if( ud->skill_id == RA_WUGSTRIKE ){
|
|
if( !path_search(NULL,src->m,src->x,src->y,target->x,target->y,1,CELL_CHKNOREACH))
|
|
if( !path_search(NULL,src->m,src->x,src->y,target->x,target->y,1,CELL_CHKNOREACH))
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
-
|
|
|
|
- if( ud->skill_id == PR_LEXDIVINA || ud->skill_id == MER_LEXDIVINA )
|
|
|
|
- {
|
|
|
|
|
|
+ else if( ud->skill_id == PR_LEXDIVINA || ud->skill_id == MER_LEXDIVINA ) {
|
|
sc = status_get_sc(target);
|
|
sc = status_get_sc(target);
|
|
if( battle_check_target(src,target, BCT_ENEMY) <= 0 && (!sc || !sc->data[SC_SILENCE]) )
|
|
if( battle_check_target(src,target, BCT_ENEMY) <= 0 && (!sc || !sc->data[SC_SILENCE]) )
|
|
{ //If it's not an enemy, and not silenced, you can't use the skill on them. [Skotlex]
|
|
{ //If it's not an enemy, and not silenced, you can't use the skill on them. [Skotlex]
|
|
@@ -10536,8 +10531,7 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- else
|
|
|
|
- { // Check target validity.
|
|
|
|
|
|
+ else { // Check target validity.
|
|
inf = skill_get_inf(ud->skill_id);
|
|
inf = skill_get_inf(ud->skill_id);
|
|
inf2 = skill_get_inf2(ud->skill_id);
|
|
inf2 = skill_get_inf2(ud->skill_id);
|
|
|
|
|
|
@@ -10559,15 +10553,11 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
|
|
inf &= ~BCT_NEUTRAL;
|
|
inf &= ~BCT_NEUTRAL;
|
|
}
|
|
}
|
|
|
|
|
|
- if( ud->skill_id >= SL_SKE && ud->skill_id <= SL_SKA && target->type == BL_MOB )
|
|
|
|
- {
|
|
|
|
|
|
+ // Specific skill check first
|
|
|
|
+ if( ud->skill_id >= SL_SKE && ud->skill_id <= SL_SKA && target->type == BL_MOB ) {
|
|
if( ((TBL_MOB*)target)->mob_id == MOBID_EMPERIUM )
|
|
if( ((TBL_MOB*)target)->mob_id == MOBID_EMPERIUM )
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- else if (inf && battle_check_target(src, target, inf) <= 0){
|
|
|
|
- if (sd) clif_skill_fail(sd,ud->skill_id,USESKILL_FAIL_LEVEL,0);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
else if( ud->skill_id == RK_PHANTOMTHRUST && target->type != BL_MOB ) {
|
|
else if( ud->skill_id == RK_PHANTOMTHRUST && target->type != BL_MOB ) {
|
|
if( !map_flag_vs(src->m) && battle_check_target(src,target,BCT_PARTY) <= 0 )
|
|
if( !map_flag_vs(src->m) && battle_check_target(src,target,BCT_PARTY) <= 0 )
|
|
break; // You can use Phantom Thurst on party members in normal maps too. [pakpil]
|
|
break; // You can use Phantom Thurst on party members in normal maps too. [pakpil]
|
|
@@ -10580,6 +10570,12 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
|
|
clif_skill_fail(sd, ud->skill_id, USESKILL_FAIL_NEED_HELPER, 0);
|
|
clif_skill_fail(sd, ud->skill_id, USESKILL_FAIL_NEED_HELPER, 0);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
+ // Common check
|
|
|
|
+ else if (inf && battle_check_target(src, target, inf) <= 0){
|
|
|
|
+ if (sd)
|
|
|
|
+ clif_skill_fail(sd,ud->skill_id,USESKILL_FAIL_LEVEL,0);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
if(inf&BCT_ENEMY && (sc = status_get_sc(target)) &&
|
|
if(inf&BCT_ENEMY && (sc = status_get_sc(target)) &&
|
|
sc->data[SC_FOGWALL] &&
|
|
sc->data[SC_FOGWALL] &&
|
|
@@ -18912,7 +18908,7 @@ int skill_select_menu(struct map_session_data *sd,uint16 skill_id) {
|
|
status_change_end(&sd->bl,SC_STOP,INVALID_TIMER);
|
|
status_change_end(&sd->bl,SC_STOP,INVALID_TIMER);
|
|
}
|
|
}
|
|
|
|
|
|
- if (!skill_id || (sk_idx = skill_get_index(skill_id)))
|
|
|
|
|
|
+ if (!skill_id || !(sk_idx = skill_get_index(skill_id)))
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
if( !(skill_get_inf2(skill_id)&INF2_AUTOSHADOWSPELL) || (id = sd->status.skill[sk_idx].id) == 0 || sd->status.skill[sk_idx].flag != SKILL_FLAG_PLAGIARIZED ) {
|
|
if( !(skill_get_inf2(skill_id)&INF2_AUTOSHADOWSPELL) || (id = sd->status.skill[sk_idx].id) == 0 || sd->status.skill[sk_idx].flag != SKILL_FLAG_PLAGIARIZED ) {
|