|
@@ -2576,11 +2576,14 @@ static int skill_magic_reflect(struct block_list* src, struct block_list* bl, in
|
|
struct status_change *sc = status_get_sc(bl);
|
|
struct status_change *sc = status_get_sc(bl);
|
|
struct map_session_data* sd = BL_CAST(BL_PC, bl);
|
|
struct map_session_data* sd = BL_CAST(BL_PC, bl);
|
|
|
|
|
|
- if( sc && sc->data[SC_KYOMU] ) // Nullify reflecting ability
|
|
|
|
- return 0;
|
|
|
|
|
|
+ if (!sc || !sc->data[SC_KYOMU]) { // Kyomu doesn't reflect
|
|
|
|
+ // Item-based reflection - Bypasses Boss check
|
|
|
|
+ if (sd && sd->bonus.magic_damage_return && type && rnd()%100 < sd->bonus.magic_damage_return)
|
|
|
|
+ return 1;
|
|
|
|
+ }
|
|
|
|
|
|
- // item-based reflection
|
|
|
|
- if( sd && sd->bonus.magic_damage_return && type && rnd()%100 < sd->bonus.magic_damage_return )
|
|
|
|
|
|
+ // Magic Mirror reflection - Bypasses Boss check
|
|
|
|
+ if (sc && sc->data[SC_MAGICMIRROR] && rnd()%100 < sc->data[SC_MAGICMIRROR]->val2)
|
|
return 1;
|
|
return 1;
|
|
|
|
|
|
if( is_boss(src) )
|
|
if( is_boss(src) )
|
|
@@ -2590,11 +2593,10 @@ static int skill_magic_reflect(struct block_list* src, struct block_list* bl, in
|
|
if( !sc || sc->count == 0 )
|
|
if( !sc || sc->count == 0 )
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- if( sc->data[SC_MAGICMIRROR] && rnd()%100 < sc->data[SC_MAGICMIRROR]->val2 )
|
|
|
|
- return 1;
|
|
|
|
-
|
|
|
|
- if( sc->data[SC_KAITE] && (src->type == BL_PC || status_get_lv(src) <= 80) )
|
|
|
|
- {// Kaite only works against non-players if they are low-level.
|
|
|
|
|
|
+ // Kaite reflection - Does not bypass Boss check
|
|
|
|
+ if( sc->data[SC_KAITE] && (src->type == BL_PC || status_get_lv(src) <= 80) ) {
|
|
|
|
+ // Kaite only works against non-players if they are low-level.
|
|
|
|
+ // Kyomu doesn't disable Kaite, but the "skill fail chance" part of Kyomu applies to it.
|
|
clif_specialeffect(bl, 438, AREA);
|
|
clif_specialeffect(bl, 438, AREA);
|
|
if( --sc->data[SC_KAITE]->val2 <= 0 )
|
|
if( --sc->data[SC_KAITE]->val2 <= 0 )
|
|
status_change_end(bl, SC_KAITE, INVALID_TIMER);
|
|
status_change_end(bl, SC_KAITE, INVALID_TIMER);
|
|
@@ -15117,13 +15119,6 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
- case LG_REFLECTDAMAGE:
|
|
|
|
- case CR_REFLECTSHIELD:
|
|
|
|
- if( sc && sc->data[SC_KYOMU] && rnd()%100 < 30){
|
|
|
|
- clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
case KO_JYUMONJIKIRI:
|
|
case KO_JYUMONJIKIRI:
|
|
if (sd->weapontype1 && (sd->weapontype2 || sd->status.shield))
|
|
if (sd->weapontype1 && (sd->weapontype2 || sd->status.shield))
|
|
return true;
|
|
return true;
|