1 - Not sure what exactly you mean but if you want a skill to have multiple hits you need to set the number of hits too:
// 09 Number of hits (when positive, damage is increased by hits,
// negative values just show number of hits without increasing total damage)
2 - You would need to do that in the code. I guess one place you can put that is battle_calc_magic_attack in battle.c:
struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list *target,uint16 skill_id,uint16 skill_lv,int mflag)Add a "case" for AB_CHEAL and then set hp to a percent of maxhp of tstatus, like:
Code:
case AB_CHEAL: ad.damage = (tstatus->max_hp * skill_lv) / 10; break;
Make sure you set up the skill as magic skill or else it won't reach that function code. I couldn't find the skill AB_CHEAL in the code at all, so I just assumed you define it similar to AB_HIGHNESSHEAL and the likes.
PS: If you mean current HP instead of max HP just use tstatus->hp instead.