feat: 灵根改为1~5根+容量公式(1÷根数),权重表进配置;文档同步
This commit is contained in:
@@ -21,7 +21,7 @@ var id: int = 0 # 唯一编号(DiscipleManager 分配)
|
||||
var name: String = ""
|
||||
var age: int = 0
|
||||
var aptitude: Aptitude = Aptitude.ORDINARY
|
||||
var roots: Array[SpiritRoot] = [] # 普通弟子 1~3 根;天灵根固定 1 根
|
||||
var roots: Array[SpiritRoot] = [] # 普通弟子 1~5 根;天灵根固定 1 根
|
||||
var is_heavenly: bool = false # 天灵根标记(仅天骄资质,概率见配置)
|
||||
var join_year: int = 0 # 入宗年份(0 = 未入宗/候选),accept 时快照
|
||||
var join_month: int = 0 # 入宗月份
|
||||
@@ -39,11 +39,13 @@ func get_roots_text() -> String:
|
||||
names.append(ROOT_NAMES[root])
|
||||
return "、".join(names)
|
||||
|
||||
## 灵根数量修炼倍率(根数越少越快,D5 修炼循环消费)。
|
||||
## 数值来自 GameConfig.root_count_speed,按根数-1 索引,越界钳制。
|
||||
func get_root_count_speed() -> float:
|
||||
var idx := clampi(roots.size() - 1, 0, GameConfig.root_count_speed.size() - 1)
|
||||
return GameConfig.root_count_speed[idx]
|
||||
## 灵根数量灵气容量倍率(根数越少灵气越纯、修炼越快,D5 修炼循环消费)。
|
||||
## 容量规则:单灵根 1 单位灵气充满,双灵根只充 1/2,三灵根 1/3,以此类推(容量 = 1 ÷ 根数)。
|
||||
## 无灵根无法练气,容量为 0(体修路线未来另行结算,暂不生成)。
|
||||
func get_root_count_capacity() -> float:
|
||||
if roots.is_empty():
|
||||
return 0.0
|
||||
return 1.0 / roots.size()
|
||||
|
||||
func get_realm_text() -> String:
|
||||
if realm_index == 0:
|
||||
|
||||
@@ -137,12 +137,13 @@ func _generate_name() -> String:
|
||||
return surname + given
|
||||
|
||||
## 随机生成灵根。
|
||||
## 天灵根:固定 1 根五行;普通弟子:1~3 根互不重复(根数越少修炼越快)。
|
||||
## 天灵根:固定 1 根五行;普通弟子:按配置权重掷 1~5 根,元素从五行中抽取、概率均等。
|
||||
## 无灵根暂不生成(体修路线预留)。
|
||||
## @param heavenly: 是否天灵根
|
||||
func _generate_roots(heavenly: bool) -> Array[Disciple.SpiritRoot]:
|
||||
if heavenly:
|
||||
return [randi() % Disciple.SpiritRoot.size() as Disciple.SpiritRoot]
|
||||
var count := randi_range(1, 3)
|
||||
var count := _roll_root_count()
|
||||
var pool := Disciple.SpiritRoot.values()
|
||||
pool.shuffle()
|
||||
var result: Array[Disciple.SpiritRoot] = []
|
||||
@@ -150,6 +151,19 @@ func _generate_roots(heavenly: bool) -> Array[Disciple.SpiritRoot]:
|
||||
result.append(pool[i])
|
||||
return result
|
||||
|
||||
## 按配置权重掷灵根数量(1~5 根),权重来自 GameConfig.root_count_weights。
|
||||
func _roll_root_count() -> int:
|
||||
var weights := GameConfig.root_count_weights
|
||||
var total := 0
|
||||
for w in weights:
|
||||
total += w
|
||||
var roll := randi() % total
|
||||
for i in weights.size():
|
||||
if roll < weights[i]:
|
||||
return i + 1
|
||||
roll -= weights[i]
|
||||
return 1
|
||||
|
||||
## 按权重掷资质(入宗分流),权重来自 GameConfig 当前难度配置。
|
||||
func _roll_aptitude() -> Disciple.Aptitude:
|
||||
var weights := GameConfig.get_aptitude_weights()
|
||||
|
||||
@@ -19,6 +19,8 @@ var recruit_interval_years := 0.1
|
||||
var recruit_applicant_count := 3
|
||||
## 天灵根概率(仅天骄资质中再掷一次)。
|
||||
var heavenly_root_chance := 0.5
|
||||
## 灵根数量权重(按根数-1 索引:1根~5根,和=100 即百分比概率)。
|
||||
var root_count_weights: Array[int] = [20, 20, 20, 20, 20]
|
||||
|
||||
# —— 修炼系统(对应 cfg 的 [cultivation] 节)——
|
||||
## 基础修炼速度(修为/游戏日)。
|
||||
@@ -27,8 +29,6 @@ var cultivation_base_speed := 10.0
|
||||
var qi_concentration := 1.0
|
||||
## 资质修炼倍率(按下品/中品/上品/天骄索引)。
|
||||
var aptitude_speed: Array[float] = [0.6, 1.0, 1.5, 2.0]
|
||||
## 灵根数量修炼倍率(按根数-1 索引:1根/2根/3根)。
|
||||
var root_count_speed: Array[float] = [1.0, 0.8, 0.6]
|
||||
## 天灵根额外修炼速度倍率。
|
||||
var heavenly_bonus := 1.5
|
||||
|
||||
@@ -55,6 +55,12 @@ func _load_config() -> void:
|
||||
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)
|
||||
heavenly_root_chance = cfg.get_value("recruitment", "heavenly_root_chance", heavenly_root_chance)
|
||||
var root_raw: Variant = cfg.get_value("recruitment", "root_count_weights", [])
|
||||
if root_raw is Array and root_raw.size() == root_count_weights.size():
|
||||
var arr_roots: Array[int] = []
|
||||
for w in root_raw:
|
||||
arr_roots.append(int(w))
|
||||
root_count_weights = arr_roots
|
||||
# 修炼系统
|
||||
cultivation_base_speed = cfg.get_value("cultivation", "base_speed", cultivation_base_speed)
|
||||
qi_concentration = cfg.get_value("cultivation", "qi_concentration", qi_concentration)
|
||||
@@ -65,12 +71,6 @@ func _load_config() -> void:
|
||||
for v in apt_raw:
|
||||
arr.append(float(v))
|
||||
aptitude_speed = arr
|
||||
var root_raw: Variant = cfg.get_value("cultivation", "root_count_speed", [])
|
||||
if root_raw is Array and root_raw.size() == root_count_speed.size():
|
||||
var arr2: Array[float] = []
|
||||
for v in root_raw:
|
||||
arr2.append(float(v))
|
||||
root_count_speed = arr2
|
||||
# 逐档读取难度权重(INI 数组字面量,如 [45, 35, 15, 5])
|
||||
for key in aptitude_weights_by_difficulty.keys():
|
||||
var raw: Variant = cfg.get_value("recruitment_" + key, "aptitude_weights", [])
|
||||
|
||||
Reference in New Issue
Block a user