if( sc && sc->data[sC__SHADOWFORM] ) {
struct block_list *s_bl = map_id2bl(sc->data[sC__SHADOWFORM]->val2);
if( !s_bl ) { // If the shadow form target is not present remove the sc.
status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER);
} else if( status_isdead(s_bl) || !battle_check_target(src,s_bl,BCT_ENEMY)) { // If the shadow form target is dead or not your enemy remove the sc in both.
status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER);
if( s_bl->type == BL_PC )
((TBL_PC*)s_bl)->shadowform_id = 0;
} else {
if( (--sc->data[sC__SHADOWFORM]->val3) < 0 ) { // If you have exceded max hits supported, remove the sc in both.
status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER);
if( s_bl->type == BL_PC )
((TBL_PC*)s_bl)->shadowform_id = 0;
} else {
status_damage(src, s_bl, damage, 0, clif_damage(s_bl, s_bl, gettick(), 500, 500, damage, -1, 0, 0), 0);
return ATK_NONE;
}
}
}
The damage variable in here:
You could redulce this value before it's passed trought the status_damage function, right after the else.
Something like:
If you're using rAthena, One Hand Quicken is already provided when LK is linked(and have two hand quicken lv 10).
So the edits below are just for the second request.
Open src/map/skill.c
Find:
int skill_check_condition_castend(struct map_session_data* sd, short skill, short lv)
{
struct skill_condition require;
struct status_data *status;
int i;
int index[MAX_SKILL_ITEM_REQUIRE];
After ADD:
struct status_change *sc = &sd->sc;
Find and Replace the two places like that:
if( require.weapon && !pc_check_weapontype(sd,require.weapon) ) {
By this: