public void regenMp() {
    int baseMpr = 1;
    int wis = _pc.getAbility().getTotalWis();
    if (wis == 15 || wis == 16) {
      baseMpr = 2;
    } else if (wis >= 17) {
      baseMpr = 3;
    }

    // 베이스 WIS 회복 보너스
    int baseStatMpr = CalcStat.calcBaseMpr(_pc.getType(), _pc.getAbility().getBaseWis());

    if (_pc.getSkillEffectTimerSet().hasSkillEffect(L1SkillId.STATUS_BLUE_POTION) == true) {
      if (wis < 11) {
        wis = 11;
      }
      baseMpr += wis - 10;
    }
    if (_pc.getSkillEffectTimerSet().hasSkillEffect(L1SkillId.STATUS_BLUE_POTION2) == true) {
      if (wis < 11) {
        wis = 11;
      }
      baseMpr += wis - 8;
    }
    if (_pc.getSkillEffectTimerSet().hasSkillEffect(L1SkillId.STATUS_BLUE_POTION3) == true) {
      baseMpr += 3;
    }
    if (_pc.getSkillEffectTimerSet().hasSkillEffect(L1SkillId.MEDITATION) == true) {
      baseMpr += 5;
    }
    if (_pc.getSkillEffectTimerSet().hasSkillEffect(L1SkillId.CONCENTRATION) == true) {
      baseMpr += 2;
    }
    if (L1HouseLocation.isInHouse(_pc.getX(), _pc.getY(), _pc.getMapId())) {
      baseMpr += 3;
    }
    if (isInn(_pc)) {
      baseMpr += 3;
    }
    if (L1HouseLocation.isRegenLoc(_pc, _pc.getX(), _pc.getY(), _pc.getMapId())) {
      baseMpr += 3;
    }

    int itemMpr = _pc.getInventory().mpRegenPerTick();
    itemMpr += _pc.getMpr();

    if (_pc.get_food() < 24 || isOverWeight(_pc)) {
      baseMpr = 0;
      baseStatMpr = 0;
      if (itemMpr > 0) {
        itemMpr = 0;
      }
    }
    int mpr = baseMpr + itemMpr + baseStatMpr;
    int newMp = _pc.getCurrentMp() + mpr;

    _pc.setCurrentMp(newMp);
  }