esdion 發表於 2026-1-30 22:38

靈魂/靈魂石

package com.lineage.config;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* 靈魂/靈魂石配置類別
* 負責加載和管理遊戲中靈魂系統相關的配置設定
*/
public final class ConfigSoul {
    private static final Logger logger = Logger.getLogger(ConfigSoul.class.getName());

    // ========== 系統核心固定參數(硬編碼) ==========
    /** 授權過期時間:2100年1月1日 00:00:00 UTC */
    private static final long AUTH_EXPIRE_TIMESTAMP = 4102416000000L;

    /** 配置檔案路徑(相對路徑) */
    private static final String SOUL_CONFIG_FILE = "./config/soul.properties";

    // ========== 靈魂系統設定(外部配置) ==========
    /** 是否啟用靈魂系統 */
    public static boolean enableSoulSystem = true;

    /** 靈魂石最大堆疊數量 */
    public static int maxSoulStoneStack = 100;

    /** 靈魂石掉落機率(百分比) */
    public static double soulStoneDropRate = 0.1;

    /** 靈魂石製作成功機率(百分比) */
    public static double soulStoneCraftSuccessRate = 0.8;

    /** 靈魂石製作金幣消耗 */
    public static int soulStoneCraftCost = 1000;

    /** 靈魂石製作所需材料數量 */
    public static int soulStoneCraftMaterialCount = 5;

    // ========== 靈魂強化設定(外部配置) ==========
    /** 是否啟用靈魂強化 */
    public static boolean enableSoulEnhancement = true;

    /** 靈魂強化最大等級 */
    public static int maxSoulEnhanceLevel = 10;

    /** 靈魂強化基礎成功機率(百分比) */
    public static double baseSoulEnhanceSuccessRate = 0.7;

    /** 靈魂強化失敗懲罰(是否降低等級) */
    public static boolean soulEnhanceFailurePenalty = true;

    /** 靈魂強化金幣消耗基數 */
    public static int soulEnhanceCostBase = 500;

    // ========== 靈魂技能設定(外部配置) ==========
    /** 是否啟用靈魂技能 */
    public static boolean enableSoulSkills = true;

    /** 靈魂技能激活等級需求 */
    public static int soulSkillActivateLevel = 20;

    /** 靈魂技能MP消耗倍率 */
    public static double soulSkillMpCostMultiplier = 1.2;

    /** 靈魂技能冷卻時間倍率 */
    public static double soulSkillCooldownMultiplier = 0.8;

    /** 靈魂技能效果倍率 */
    public static double soulSkillEffectMultiplier = 1.5;

    // ========== 靈魂特殊效果設定(外部配置) ==========
    /** 是否啟用靈魂特殊效果 */
    public static boolean enableSoulSpecialEffects = true;

    /** 靈魂持續回復效果間隔(秒) */
    public static int soulRegenInterval = 5;

    /** 靈魂持續回復HP數量 */
    public static int soulRegenHpAmount = 10;

    /** 靈魂持續回復MP數量 */
    public static int soulRegenMpAmount = 5;

    /** 靈魂攻擊力加成(百分比) */
    public static double soulAttackBonus = 0.1;

    /** 靈魂防禦力加成(百分比) */
    public static double soulDefenseBonus = 0.05;

    /**
   * 私有建構子,防止實例化
   */
    private ConfigSoul() {
      // 授權時間檢查
      if (new Date().after(new Date(AUTH_EXPIRE_TIMESTAMP))) {
            throw new RuntimeException("授權已過期,靈魂配置無法啟動!");
      }
    }

    /**
   * 加載靈魂配置
   * @throws ConfigErrorException 當配置加載失敗時拋出
   */
    public static void load() throws ConfigErrorException {
      Properties properties = new Properties();
      FileInputStream fis = null;

      try {
            File configFile = new File(SOUL_CONFIG_FILE);
            if (!configFile.exists()) {
                logger.warning("靈魂配置檔案不存在: " + SOUL_CONFIG_FILE + ",使用預設值");
                logDefaultConfiguration();
                return;
            }

            fis = new FileInputStream(configFile);
            properties.load(fis);

            // 載入靈魂系統設定
            enableSoulSystem = Boolean.parseBoolean(
                properties.getProperty("EnableSoulSystem", "true"));
            maxSoulStoneStack = Integer.parseInt(
                properties.getProperty("MaxSoulStoneStack", "100"));
            soulStoneDropRate = Double.parseDouble(
                properties.getProperty("SoulStoneDropRate", "0.1"));
            soulStoneCraftSuccessRate = Double.parseDouble(
                properties.getProperty("SoulStoneCraftSuccessRate", "0.8"));
            soulStoneCraftCost = Integer.parseInt(
                properties.getProperty("SoulStoneCraftCost", "1000"));
            soulStoneCraftMaterialCount = Integer.parseInt(
                properties.getProperty("SoulStoneCraftMaterialCount", "5"));

            // 載入靈魂強化設定
            enableSoulEnhancement = Boolean.parseBoolean(
                properties.getProperty("EnableSoulEnhancement", "true"));
            maxSoulEnhanceLevel = Integer.parseInt(
                properties.getProperty("MaxSoulEnhanceLevel", "10"));
            baseSoulEnhanceSuccessRate = Double.parseDouble(
                properties.getProperty("BaseSoulEnhanceSuccessRate", "0.7"));
            soulEnhanceFailurePenalty = Boolean.parseBoolean(
                properties.getProperty("SoulEnhanceFailurePenalty", "true"));
            soulEnhanceCostBase = Integer.parseInt(
                properties.getProperty("SoulEnhanceCostBase", "500"));

            // 載入靈魂技能設定
            enableSoulSkills = Boolean.parseBoolean(
                properties.getProperty("EnableSoulSkills", "true"));
            soulSkillActivateLevel = Integer.parseInt(
                properties.getProperty("SoulSkillActivateLevel", "20"));
            soulSkillMpCostMultiplier = Double.parseDouble(
                properties.getProperty("SoulSkillMpCostMultiplier", "1.2"));
            soulSkillCooldownMultiplier = Double.parseDouble(
                properties.getProperty("SoulSkillCooldownMultiplier", "0.8"));
            soulSkillEffectMultiplier = Double.parseDouble(
                properties.getProperty("SoulSkillEffectMultiplier", "1.5"));

            // 載入靈魂特殊效果設定
            enableSoulSpecialEffects = Boolean.parseBoolean(
                properties.getProperty("EnableSoulSpecialEffects", "true"));
            soulRegenInterval = Integer.parseInt(
                properties.getProperty("SoulRegenInterval", "5"));
            soulRegenHpAmount = Integer.parseInt(
                properties.getProperty("SoulRegenHpAmount", "10"));
            soulRegenMpAmount = Integer.parseInt(
                properties.getProperty("SoulRegenMpAmount", "5"));
            soulAttackBonus = Double.parseDouble(
                properties.getProperty("SoulAttackBonus", "0.1"));
            soulDefenseBonus = Double.parseDouble(
                properties.getProperty("SoulDefenseBonus", "0.05"));

            logger.info("靈魂配置加載完成");
            logConfiguration();

      } catch (NumberFormatException e) {
            String errorMsg = "靈魂配置檔案中包含無效的數字格式: " + e.getMessage();
            logger.severe(errorMsg);
            throw new ConfigErrorException(errorMsg);
      } catch (IOException e) {
            String errorMsg = "讀取靈魂配置檔案時發生錯誤: " + e.getMessage();
            logger.severe(errorMsg);
            throw new ConfigErrorException(errorMsg);
      } catch (Exception e) {
            String errorMsg = "加載靈魂配置時發生未預期錯誤: " + e.getMessage();
            logger.severe(errorMsg);
            throw new ConfigErrorException(errorMsg);
      } finally {
            if (fis != null) {
                try {
                  fis.close();
                } catch (IOException e) {
                  logger.log(Level.WARNING, "關閉靈魂配置檔案輸入流時發生錯誤", e);
                }
            }
            properties.clear();
      }
    }

    /**
   * 記錄預設配置資訊
   */
    private static void logDefaultConfiguration() {
      logger.info("使用預設靈魂配置設定");
      logConfiguration();
    }

    /**
   * 記錄當前配置設定到日誌
   */
    private static void logConfiguration() {
      logger.info("=== 靈魂配置設定 ===");
      logger.info("靈魂系統: " + (enableSoulSystem ? "啟用" : "停用"));
      if (enableSoulSystem) {
            logger.info("靈魂石最大堆疊: " + maxSoulStoneStack);
            logger.info("靈魂石掉落機率: " + (soulStoneDropRate * 100) + "%");
            logger.info("靈魂石製作成本: " + soulStoneCraftCost + "金幣");
      }
      logger.info("靈魂強化: " + (enableSoulEnhancement ? "啟用" : "停用"));
      if (enableSoulEnhancement) {
            logger.info("最大強化等級: " + maxSoulEnhanceLevel);
            logger.info("基礎成功機率: " + (baseSoulEnhanceSuccessRate * 100) + "%");
      }
      logger.info("靈魂技能: " + (enableSoulSkills ? "啟用" : "停用"));
      if (enableSoulSkills) {
            logger.info("技能激活等級: " + soulSkillActivateLevel);
            logger.info("技能效果倍率: " + soulSkillEffectMultiplier + "x");
      }
      logger.info("靈魂特效: " + (enableSoulSpecialEffects ? "啟用" : "停用"));
      logger.info("=================");
    }

    /**
   * 計算靈魂強化成功機率
   * @param level 當前強化等級
   * @return 成功機率(0.0-1.0)
   */
    public static double calculateSoulEnhanceSuccessRate(int level) {
      if (!enableSoulEnhancement || level <= 0 || level >= maxSoulEnhanceLevel) {
            return 0.0;
      }

      // 等級越高,成功機率越低
      double rateReduction = (level - 1) * 0.05; // 每等級降低5%
      return Math.max(0.1, baseSoulEnhanceSuccessRate - rateReduction);
    }

    /**
   * 計算靈魂強化消耗
   * @param level 當前強化等級
   * @return 金幣消耗量
   */
    public static int calculateSoulEnhanceCost(int level) {
      if (!enableSoulEnhancement || level <= 0 || level >= maxSoulEnhanceLevel) {
            return 0;
      }

      // 等級越高,消耗越多
      return soulEnhanceCostBase * level;
    }

    /**
   * 計算靈魂技能MP消耗
   * @param baseCost 基礎MP消耗
   * @return 調整後的MP消耗
   */
    public static int calculateSoulSkillMpCost(int baseCost) {
      if (!enableSoulSkills) {
            return baseCost;
      }

      return (int) Math.max(1, baseCost * soulSkillMpCostMultiplier);
    }

    /**
   * 計算靈魂技能冷卻時間
   * @param baseCooldown 基礎冷卻時間(毫秒)
   * @return 調整後的冷卻時間
   */
    public static int calculateSoulSkillCooldown(int baseCooldown) {
      if (!enableSoulSkills) {
            return baseCooldown;
      }

      return (int) Math.max(100, baseCooldown * soulSkillCooldownMultiplier);
    }

    /**
   * 計算靈魂技能效果
   * @param baseEffect 基礎效果值
   * @return 調整後的效果值
   */
    public static int calculateSoulSkillEffect(int baseEffect) {
      if (!enableSoulSkills) {
            return baseEffect;
      }

      return (int) Math.max(1, baseEffect * soulSkillEffectMultiplier);
    }

    /**
   * 檢查是否可以使用靈魂系統
   * @param playerLevel 玩家等級
   * @return 如果可以使用返回true
   */
    public static boolean canUseSoulSystem(int playerLevel) {
      return enableSoulSystem && playerLevel >= soulSkillActivateLevel;
    }

    /**
   * 獲取配置摘要資訊
   * @return 配置摘要字串
   */
    public static String getConfigurationSummary() {
      return String.format(
            "靈魂配置 - 系統: %s, 強化: %s, 技能: %s, 特效: %s",
            enableSoulSystem ? "啟用" : "停用",
            enableSoulEnhancement ? "啟用" : "停用",
            enableSoulSkills ? "啟用" : "停用",
            enableSoulSpecialEffects ? "啟用" : "停用"
      );
    }
}

頁: [1]
查看完整版本: 靈魂/靈魂石