feat: 资质概率按难度配置化,新增普通/困难两档权重

- game_config.cfg 新增 difficulty 档位与 [recruitment_normal]/[recruitment_hard] 权重表
- GameConfig 解析各档权重,get_aptitude_weights() 按当前难度返回
- DiscipleManager 资质判定改读配置权重,删除代码常量
- 设计文档补充配置写法说明(VariantParser 数组字面量陷阱)
- 计划表同步 D3 进度
This commit is contained in:
2026-08-06 00:31:02 +08:00
parent c5c7c57799
commit cfebb8dded
5 changed files with 63 additions and 22 deletions
+27 -1
View File
@@ -7,6 +7,8 @@ extends Node
const CONFIG_PATH := "res://resources/game_config.cfg"
# —— 招募系统(对应 cfg 的 [recruitment] 节)——
## 当前难度档位(对应下方各难度节,如 "normal"/"hard")。
var difficulty := "normal"
## 开局候选人数。
var opening_applicant_count := 5
## 开局必须选满数。
@@ -16,6 +18,12 @@ var recruit_interval_years := 0.1
## 定期弹窗候选人数。
var recruit_applicant_count := 3
## 各难度资质权重表(键 = 难度档位,值 = 下品/中品/上品/天骄 权重)。
var aptitude_weights_by_difficulty: Dictionary = {
"normal": [45, 35, 15, 5],
"hard": [60, 30, 8, 2],
}
func _ready() -> void:
_load_config()
@@ -23,10 +31,28 @@ func _ready() -> void:
## 读取配置文件;缺失的项保持代码默认值,不会报错。
func _load_config() -> void:
var cfg := ConfigFile.new()
if cfg.load(CONFIG_PATH) != OK:
var err := cfg.load(CONFIG_PATH)
if err != OK:
push_warning("GameConfig: 配置文件不存在,使用默认值")
return
difficulty = cfg.get_value("recruitment", "difficulty", difficulty)
opening_applicant_count = cfg.get_value("recruitment", "opening_applicant_count", opening_applicant_count)
opening_pick_count = cfg.get_value("recruitment", "opening_pick_count", opening_pick_count)
recruit_interval_years = cfg.get_value("recruitment", "recruit_interval_years", recruit_interval_years)
recruit_applicant_count = cfg.get_value("recruitment", "recruit_applicant_count", recruit_applicant_count)
# 逐档读取难度权重(INI 数组字面量,如 [45, 35, 15, 5]
for key in aptitude_weights_by_difficulty.keys():
var raw: Variant = cfg.get_value("recruitment_" + key, "aptitude_weights", [])
if raw is Array and raw.size() > 0:
var arr: Array[int] = []
for w in raw:
arr.append(int(w))
aptitude_weights_by_difficulty[key] = arr
## 当前难度下的资质权重(下品/中品/上品/天骄)。
func get_aptitude_weights() -> Array[int]:
var raw: Array = aptitude_weights_by_difficulty.get(difficulty, aptitude_weights_by_difficulty["normal"])
var result: Array[int] = []
for w in raw:
result.append(int(w))
return result