Shouldn't it be something like this?
case PR_SANCTUARY:
hp = (skill_lv > 6) ? 777 : skill_lv * 100;
if (target->id == MOBID_EMPERIUM) {
hp = 1;
}
At least in my case, the argument to the skill_calc_heal method describing the target of the skill is called literally target.
/**
* Calculates heal value of skill's effect
* @param src: Unit casting heal
* @param target: Target of src
* @param skill_id: Skill ID used
* @param skill_lv: Skill Level used
* @param heal: True if it's the heal part or false if it's the damage part of the skill
* @return modified heal value
*/
int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 skill_id, uint16 skill_lv, bool heal) {
EDIT: Actually I think this would be better and safer:
case PR_SANCTUARY:
hp = (skill_lv > 6) ? 777 : skill_lv * 100;
if (target->type == BL_MOB && target->id == MOBID_EMPERIUM) {
hp = 1;
}
I'm not 100% sure, but I think that it could be possible for another type of entity to have the same ID of the Emperium. So maybe checking the type of entity to ensure it's a monster is wise.