@Override
  public boolean set(Skill skill) {
    skill.setFirstTargetProperty(value);
    switch (value) {
      case ME:
        skill.setFirstTarget(skill.getEffector());
        break;
      case TARGETORME:
        if (skill.getFirstTarget() == null) skill.setFirstTarget(skill.getEffector());
        break;
      case TARGET:
        if (skill.getFirstTarget() == null || skill.getFirstTarget() == skill.getEffector())
          return false;
        break;
      case MYPET:
        Creature effector = skill.getEffector();
        if (effector instanceof Player) {
          Summon summon = ((Player) effector).getSummon();
          if (summon != null) skill.setFirstTarget(summon);
          else return false;
        } else return false;
        break;
      case PASSIVE:
        skill.setFirstTarget(skill.getEffector());
        break;
      case TARGET_MYPARTY_NONVISIBLE:
        if (!(skill.getFirstTarget() instanceof Player)) return false;

        Player effected = (Player) skill.getFirstTarget();

        if (effected == null
            || !GroupService.getInstance().isGroupMember(effected.getObjectId())
            || skill.getEffector().getWorldId() != effected.getWorldId()) return false;
        skill.setFirstTargetRangeCheck(false);
        break;
      case POINT:
        skill.setFirstTarget(null);
        break;
    }

    if (skill.getFirstTarget() != null)
      skill.getEffectedList().add(new CreatureWithDistance(skill.getFirstTarget(), 0));
    return true;
  }