Requires source edit. Go to src/map/skill.c, find static int can_copy().
Anywhere after nullpo_ret(sd); you can put your conditions.
if (skill_id == WZ_WATERBALL)
return 0;
If you want to carryover skill_lv, you need to edit 2 lines.
Change 1, find line:
can_copy(tsd,copy_skill,bl)) // Split all the check into their own function [Aru]
Change to:
can_copy(tsd, copy_skill, skill_lv, bl)) // Split all the check into their own function [Aru]
Change 2, find line:
static int can_copy(struct map_session_data *sd, uint16 skill_id, struct block_list *bl)
Change to:
static int can_copy(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, struct block_list *bl)