At skill.c
@@ -15709,7 +16049,9 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
return false;
}
- if( require.weapon && !pc_check_weapontype(sd,require.weapon) ) {
+ if( require.weapon && !pc_check_weapontype(sd,require.weapon) ||
+ (skill_id == LK_PARRYING && sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_KNIGHT && sd->weapontype1 == W_1HSWORD)) {
switch(skill_id) {
case RA_AIMEDBOLT:
break;
@@ -15774,6 +16116,7 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
struct status_data *status;
int i;
short index[MAX_SKILL_ITEM_REQUIRE];
+ struct status_change *sc = &sd->sc;
nullpo_retr(false,sd);
@@ -15879,7 +16222,9 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
return false;
}
- if( require.weapon && !pc_check_weapontype(sd,require.weapon) ) {
+ if( require.weapon && !(pc_check_weapontype(sd,require.weapon) ||
+ (skill_id == LK_PARRYING && sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_KNIGHT && sd->weapontype1 == W_1HSWORD))) {
clif_skill_fail(sd,skill_id,USESKILL_FAIL_THIS_WEAPON,0);
return false;
}
status.c
@@ -9835,7 +9956,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
tick = -1; // Duration sent to the client should be infinite
break;
case SC_PARRYING:
- val2 = 20 + val1*3; // Block Chance
+ if (sd && sd->weapontype1 == W_1HSWORD)
+ val2 = val1 * 3;
+ else
+ val2 = 20 + val1*3; // Block Chance
break;
case SC_WINDWALK: