/**
  * @see TargetSlot
  * @param targetSlot
  */
 public void removeAbnormalEffectsByTargetSlot(SkillTargetSlot targetSlot) {
   for (Effect effect : abnormalEffectMap.values()) {
     if (effect.getTargetSlot() == targetSlot.ordinal()) {
       effect.endEffect();
       abnormalEffectMap.remove(effect.getStack());
     }
   }
 }
  /**
   * @param targetSlot
   * @param count
   */
  public void removeEffectByTargetSlot(SkillTargetSlot targetSlot, int count) {
    for (Effect effect : abnormalEffectMap.values()) {
      if (count == 0) break;

      if (effect.getTargetSlot() == targetSlot.ordinal()) {
        if (targetSlot == SkillTargetSlot.BUFF && effect.getTargetSlotLevel() > 1) continue;
        effect.endEffect();
        abnormalEffectMap.remove(effect.getStack());
        count--;
      }
    }
  }
  /**
   * @param dispelCat
   * @param targetSlot
   * @param count
   */
  public void removeEffectByDispelCat(
      DispelCategoryType dispelCat, SkillTargetSlot targetSlot, int count) {
    for (Effect effect : abnormalEffectMap.values()) {
      if (count == 0) break;
      if (effect.getTargetSlot() == targetSlot.ordinal()) {
        boolean remove = false;
        switch (dispelCat) {
          case ALL:
            if (effect.getDispelCat() == DispelCategoryType.ALL
                || effect.getDispelCat() == DispelCategoryType.DEBUFF_MENTAL
                || effect.getDispelCat() == DispelCategoryType.DEBUFF_PHYSICAL) remove = true;
            break;
          case DEBUFF_MENTAL:
            if (effect.getDispelCat() == DispelCategoryType.ALL
                || effect.getDispelCat() == DispelCategoryType.DEBUFF_MENTAL) remove = true;
            break;
          case DEBUFF_PHYSICAL:
            if (effect.getDispelCat() == DispelCategoryType.ALL
                || effect.getDispelCat() == DispelCategoryType.DEBUFF_PHYSICAL) remove = true;
            break;
          case BUFF:
            if (effect.getDispelCat() == DispelCategoryType.BUFF && effect.getTargetSlotLevel() < 1)
              remove = true;
            break;
          case STUN:
            if (effect.getDispelCat() == DispelCategoryType.STUN) remove = true;
            break;
        }

        if (remove) {
          effect.endEffect();
          abnormalEffectMap.remove(effect.getStack());
          count--;
        }
      }
    }
  }