From 2bd262519452233fb20ae40e365be23c45839d41 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Wed, 28 Oct 2026 08:41:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=A1=E2=91=A0T8(=E6=A0=B8=E5=BF=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9D=A2=E7=BB=93=E6=9E=84=E6=94=B6=E6=95=9B?= =?UTF-8?q?=E6=89=B9):=20adventure=5Ftable=E6=8B=86=E6=AE=B5+.tres?= =?UTF-8?q?=E7=AD=89=E5=80=BC=E8=BF=81=E7=A7=BB=E2=80=94=E2=80=94=E4=B8=89?= =?UTF-8?q?=E6=AE=B5=E4=BB=B6=E5=BB=BA=E4=BB=B6(AdventureQuotaSegment=2013?= =?UTF-8?q?/ValueSegment=2013/CapSegment=209,=E6=AE=B5=E5=86=85=E6=A7=BD?= =?UTF-8?q?=E5=90=8D=E9=80=90=E5=AD=97=E4=B8=8D=E5=8A=A8)+=E5=AE=BF?= =?UTF-8?q?=E4=B8=BB44=E2=86=9212(3=E6=AE=B5=E6=88=90=E5=91=98+9=20knob?= =?UTF-8?q?=E7=95=99=E7=BD=AE)+curio=5Fquota/curio=5Fvalue/curio=5Fcap?= =?UTF-8?q?=E4=B8=89=E8=AE=BF=E9=97=AE=E5=99=A8=E7=AD=BE=E5=90=8D=E4=B8=8E?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E8=AF=AD=E4=B9=89=E9=80=90=E5=AD=97(?= =?UTF-8?q?=E5=86=85=E9=83=A8=E6=94=B9=E8=AF=BB=E6=AE=B5=E6=88=90=E5=91=98?= =?UTF-8?q?,=E6=9C=AA=E5=88=97=E7=BB=84=E5=90=88=3D0/=E7=BC=BA=E7=9C=8199?= =?UTF-8?q?=E8=AF=AD=E4=B9=89=E4=BF=9D=E6=8C=81)+adventure.tres=E7=AD=89?= =?UTF-8?q?=E5=80=BC=E8=BF=81=E7=A7=BB(22=E5=9C=A8=E5=86=8C=E5=80=BC?= =?UTF-8?q?=E9=80=90=E6=A7=BD=E7=85=A7=E6=8A=84=E5=B5=8C=E5=A5=97=E6=AE=B5?= =?UTF-8?q?sub=5Fresource,=E5=8D=95.tres=E4=BF=9D=E6=8C=81;rap/time=5Fsand?= =?UTF-8?q?=E4=B8=8Ecap=E7=BC=BA=E7=9C=81=E6=A7=BD=E4=BF=9D=E6=8C=81?= =?UTF-8?q?=E7=BC=BA=E7=9C=81=E8=AF=AD=E4=B9=89)+=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=94=B9=E5=9D=804=E5=A4=84(adventure=5Ffeats:206=E8=AF=BB?= =?UTF-8?q?=E6=AE=B5=E8=B7=AF=E5=BE=84/pool=5Fcase=5Fd:164:165:190?= =?UTF-8?q?=E6=AE=B5=E8=B7=AF=E5=BE=84=E8=AF=BB=E5=86=99,=E6=96=AD?= =?UTF-8?q?=E8=A8=80=E8=AF=AD=E4=B9=89=E4=B8=8D=E5=8F=98);=E8=A1=A8?= =?UTF-8?q?=E5=80=BC=E7=AD=89=E5=80=BC=E8=BD=BD=E4=BD=93=3Ddeck=5Ftotal?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E9=94=9A+=E8=AE=BF=E9=97=AE=E5=99=A8?= =?UTF-8?q?=E5=85=A8=E7=BB=84=E5=90=88=E8=AF=BB=E6=95=B0[=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=BF=90=E8=A1=8C=E9=AA=8C=E8=AF=81]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/data/schemas/adventure_cap_segment.gd | 15 +++ game/data/schemas/adventure_quota_segment.gd | 18 +++ game/data/schemas/adventure_table.gd | 118 +++++++------------ game/data/schemas/adventure_value_segment.gd | 18 +++ game/data/tables/adventure.tres | 44 ++++--- game/tests/unit/core/adventure_feats_test.gd | 2 +- game/tests/unit/core/pool_case_d_test.gd | 6 +- 7 files changed, 115 insertions(+), 106 deletions(-) create mode 100644 game/data/schemas/adventure_cap_segment.gd create mode 100644 game/data/schemas/adventure_quota_segment.gd create mode 100644 game/data/schemas/adventure_value_segment.gd diff --git a/game/data/schemas/adventure_cap_segment.gd b/game/data/schemas/adventure_cap_segment.gd new file mode 100644 index 00000000..4d09d676 --- /dev/null +++ b/game/data/schemas/adventure_cap_segment.gd @@ -0,0 +1,15 @@ +## 冒险表·已拿上限段(K4′ 拆段——curio_cap_* 9 槽随段件嵌套;段内槽名逐字不动; +## 概率与上限解耦〔奇物.md 池结构案D〕——概率位=档+令牌数、上限=本字段〔拿了才计、刷出不计〕; +## cap 满后该 kind 从候选视图剔除〔提前退役〕。99=实质无上限占位,实数归调参;专长 cap 在 feats.tres 行字段)。 +class_name AdventureCapSegment +extends Resource + +@export var curio_cap_attack: int = 99 # [1,99] +@export var curio_cap_max_hp: int = 99 # [1,99] +@export var curio_cap_armor: int = 99 # [1,99] +@export var curio_cap_gp: int = 99 # [1,99] +@export var curio_cap_ap: int = 99 # [1,99] +@export var curio_cap_heal: int = 99 # [1,99] +@export var curio_cap_refresh: int = 99 # [1,99] +@export var curio_cap_rap: int = 99 # [1,99] +@export var curio_cap_time_sand: int = 99 # [1,99] diff --git a/game/data/schemas/adventure_quota_segment.gd b/game/data/schemas/adventure_quota_segment.gd new file mode 100644 index 00000000..7ddc3870 --- /dev/null +++ b/game/data/schemas/adventure_quota_segment.gd @@ -0,0 +1,18 @@ +## 冒险表·令牌配额段(K4′ 拆段——curio_quota_* 13 槽随段件嵌套;段内槽名逐字不动; +## 嵌套段单 .tres 保持——形态同 settlement_table 拆段既裁)。kind/tier 词表与配额结构锚留宿主。 +class_name AdventureQuotaSegment +extends Resource + +@export var curio_quota_attack_common: int = 18 # [0,99] +@export var curio_quota_attack_excellent: int = 5 # [0,99] +@export var curio_quota_max_hp_common: int = 17 # [0,99] +@export var curio_quota_max_hp_excellent: int = 5 # [0,99] +@export var curio_quota_armor_common: int = 17 # [0,99] +@export var curio_quota_armor_excellent: int = 5 # [0,99] +@export var curio_quota_gp_common: int = 18 # [0,99] +@export var curio_quota_gp_excellent: int = 5 # [0,99] +@export var curio_quota_heal_excellent: int = 3 # [0,99]——恢复件(refresh 挤占 2 席位,总量 102 锚不变) +@export var curio_quota_refresh_excellent: int = 2 # [0,99]——刷新次数件(补给类成员;provisional 归曲线调参) +@export var curio_quota_ap_rare: int = 3 # [0,99]——AP 件(稀有档) +@export var curio_quota_rap_rare: int = 2 # [0,99]——储备金袋(投放 provisional 归调参) +@export var curio_quota_time_sand_rare: int = 2 # [0,99]——时沙(投放 provisional 归调参) diff --git a/game/data/schemas/adventure_table.gd b/game/data/schemas/adventure_table.gd index ef87d79b..bd3512bd 100644 --- a/game/data/schemas/adventure_table.gd +++ b/game/data/schemas/adventure_table.gd @@ -45,49 +45,11 @@ const TIER_QUOTAS := {"common": 70, "excellent": 25, "rare": 7, "legendary": 0} @export var shop_refresh_cost_base: int = 20 # [1,999] knob(MC-1 provisional——GP 刷新基价) @export var shop_refresh_cost_curve: float = 1.8 # [1.0,4.0] knob(MC-1 provisional——按已付费刷新数幂曲线,A 链同族) -# —— 令牌配额(kind × tier 计数;未列组合 = 0。四级档名 common/excellent/rare/legendary -# 承袭同一物理位序〔70/25/7/0〕;各 kind 现值见行注默认)—— -@export var curio_quota_attack_common: int = 18 # [0,99] -@export var curio_quota_attack_excellent: int = 5 # [0,99] -@export var curio_quota_max_hp_common: int = 17 # [0,99] -@export var curio_quota_max_hp_excellent: int = 5 # [0,99] -@export var curio_quota_armor_common: int = 17 # [0,99] -@export var curio_quota_armor_excellent: int = 5 # [0,99] -@export var curio_quota_gp_common: int = 18 # [0,99] -@export var curio_quota_gp_excellent: int = 5 # [0,99] -@export var curio_quota_heal_excellent: int = 3 # [0,99]——恢复件(refresh 挤占 2 席位,总量 102 锚不变) -@export var curio_quota_refresh_excellent: int = 2 # [0,99]——刷新次数件(补给类成员;provisional 归曲线调参) -@export var curio_quota_ap_rare: int = 3 # [0,99]——AP 件(稀有档) -@export var curio_quota_rap_rare: int = 2 # [0,99]——储备金袋(投放 provisional 归调参) -@export var curio_quota_time_sand_rare: int = 2 # [0,99]——时沙(投放 provisional 归调参) - -# —— 令牌件值(小/大数值对——v2.2 令牌池口径定稿:20/50、+1/+2、+1/+2、+5/+10、恢复+6、AP+1)—— -@export var curio_value_attack_common: int = 1 # [0,999] knob——小增伤 -@export var curio_value_attack_excellent: int = 2 # [0,999] knob——大增伤 -@export var curio_value_max_hp_common: int = 5 # [0,999] knob——小生命 -@export var curio_value_max_hp_excellent: int = 10 # [0,999] knob——大生命 -@export var curio_value_armor_common: int = 1 # [0,999] knob——小护甲 -@export var curio_value_armor_excellent: int = 2 # [0,999] knob——大护甲 -@export var curio_value_gp_common: int = 20 # [0,999] knob——小GP -@export var curio_value_gp_excellent: int = 50 # [0,999] knob——大GP -@export var curio_value_heal_excellent: int = 6 # [0,999] knob——恢复(当即回血,封顶生效上限) -@export var curio_value_refresh_excellent: int = 1 # [0,9] knob(provisional)——刷新次数件兑付值(三选一重抽次数 +N——_attune_refresh_x 增量,不进加算区) -@export var curio_value_ap_rare: int = 1 # [0,10] knob——AP 件每场战斗首轮行动点基线增量 -@export var curio_value_rap_rare: int = 3 # [0,99] knob(provisional)——储备金袋 RAP +N -@export var curio_value_time_sand_rare: int = 2 # [0,99] knob(provisional)——时沙 下轮 AP +N - -# —— 已拿上限 cap(概率与上限解耦〔奇物.md 池结构案D〕——案②令牌池+提前退役: -# 概率位=档+令牌数〔牌库物理张数〕、上限=本字段〔拿了才计、刷出不计〕;cap 满后该 kind 从候选 -# 视图剔除〔提前退役〕。99=实质无上限占位,实数归调参;专长 cap 在 feats.tres 行字段〕)—— -@export var curio_cap_attack: int = 99 # [1,99] -@export var curio_cap_max_hp: int = 99 # [1,99] -@export var curio_cap_armor: int = 99 # [1,99] -@export var curio_cap_gp: int = 99 # [1,99] -@export var curio_cap_ap: int = 99 # [1,99] -@export var curio_cap_heal: int = 99 # [1,99] -@export var curio_cap_refresh: int = 99 # [1,99] -@export var curio_cap_rap: int = 99 # [1,99] -@export var curio_cap_time_sand: int = 99 # [1,99] +# —— 列族三段件(K4′ 拆段——36 个列族标量槽随段件嵌套,段内槽名逐字不动; +# 嵌套段单 .tres 保持——形态同 settlement_table 拆段既裁)—— +@export var quota_segment: AdventureQuotaSegment = AdventureQuotaSegment.new() # 令牌配额段(curio_quota_* 13) +@export var value_segment: AdventureValueSegment = AdventureValueSegment.new() # 令牌件值段(curio_value_* 13) +@export var cap_segment: AdventureCapSegment = AdventureCapSegment.new() # 已拿上限段(curio_cap_* 9) # —— 专长获取专长凭证(非 Boss 渠道的专长入口形态,奇物.md v2.7 渠道轴定位; # 四口径契约④:拿到即开不可囤积/罕见只在概率不在价格/一局限购一次/计步保底连续 5 展示未出 @@ -120,53 +82,53 @@ func curio_apply_route(kind: String) -> String: ## heal/refresh excellent、ap rare、凭证 kind rare 档) func curio_quota(kind: String, tier: String) -> int: match [kind, tier]: - ["attack", TIER_COMMON]: return curio_quota_attack_common - ["attack", TIER_EXCELLENT]: return curio_quota_attack_excellent - ["max_hp", TIER_COMMON]: return curio_quota_max_hp_common - ["max_hp", TIER_EXCELLENT]: return curio_quota_max_hp_excellent - ["armor", TIER_COMMON]: return curio_quota_armor_common - ["armor", TIER_EXCELLENT]: return curio_quota_armor_excellent - ["gp", TIER_COMMON]: return curio_quota_gp_common - ["gp", TIER_EXCELLENT]: return curio_quota_gp_excellent - ["heal", TIER_EXCELLENT]: return curio_quota_heal_excellent - ["refresh", TIER_EXCELLENT]: return curio_quota_refresh_excellent - ["ap", TIER_RARE]: return curio_quota_ap_rare - ["rap", TIER_RARE]: return curio_quota_rap_rare - ["time_sand", TIER_RARE]: return curio_quota_time_sand_rare + ["attack", TIER_COMMON]: return quota_segment.curio_quota_attack_common + ["attack", TIER_EXCELLENT]: return quota_segment.curio_quota_attack_excellent + ["max_hp", TIER_COMMON]: return quota_segment.curio_quota_max_hp_common + ["max_hp", TIER_EXCELLENT]: return quota_segment.curio_quota_max_hp_excellent + ["armor", TIER_COMMON]: return quota_segment.curio_quota_armor_common + ["armor", TIER_EXCELLENT]: return quota_segment.curio_quota_armor_excellent + ["gp", TIER_COMMON]: return quota_segment.curio_quota_gp_common + ["gp", TIER_EXCELLENT]: return quota_segment.curio_quota_gp_excellent + ["heal", TIER_EXCELLENT]: return quota_segment.curio_quota_heal_excellent + ["refresh", TIER_EXCELLENT]: return quota_segment.curio_quota_refresh_excellent + ["ap", TIER_RARE]: return quota_segment.curio_quota_ap_rare + ["rap", TIER_RARE]: return quota_segment.curio_quota_rap_rare + ["time_sand", TIER_RARE]: return quota_segment.curio_quota_time_sand_rare return 0 ## 令牌件值(kind × tier;四级构成随配额表) func curio_value(kind: String, tier: String = TIER_COMMON) -> int: match [kind, tier]: - ["attack", TIER_COMMON]: return curio_value_attack_common - ["attack", TIER_EXCELLENT]: return curio_value_attack_excellent - ["max_hp", TIER_COMMON]: return curio_value_max_hp_common - ["max_hp", TIER_EXCELLENT]: return curio_value_max_hp_excellent - ["armor", TIER_COMMON]: return curio_value_armor_common - ["armor", TIER_EXCELLENT]: return curio_value_armor_excellent - ["gp", TIER_COMMON]: return curio_value_gp_common - ["gp", TIER_EXCELLENT]: return curio_value_gp_excellent - ["heal", TIER_EXCELLENT]: return curio_value_heal_excellent - ["refresh", TIER_EXCELLENT]: return curio_value_refresh_excellent - ["ap", TIER_RARE]: return curio_value_ap_rare - ["rap", TIER_RARE]: return curio_value_rap_rare - ["time_sand", TIER_RARE]: return curio_value_time_sand_rare + ["attack", TIER_COMMON]: return value_segment.curio_value_attack_common + ["attack", TIER_EXCELLENT]: return value_segment.curio_value_attack_excellent + ["max_hp", TIER_COMMON]: return value_segment.curio_value_max_hp_common + ["max_hp", TIER_EXCELLENT]: return value_segment.curio_value_max_hp_excellent + ["armor", TIER_COMMON]: return value_segment.curio_value_armor_common + ["armor", TIER_EXCELLENT]: return value_segment.curio_value_armor_excellent + ["gp", TIER_COMMON]: return value_segment.curio_value_gp_common + ["gp", TIER_EXCELLENT]: return value_segment.curio_value_gp_excellent + ["heal", TIER_EXCELLENT]: return value_segment.curio_value_heal_excellent + ["refresh", TIER_EXCELLENT]: return value_segment.curio_value_refresh_excellent + ["ap", TIER_RARE]: return value_segment.curio_value_ap_rare + ["rap", TIER_RARE]: return value_segment.curio_value_rap_rare + ["time_sand", TIER_RARE]: return value_segment.curio_value_time_sand_rare return 0 ## 已拿上限读数(案②——kind 维度;专长 cap 走 feats.tres 行字段不走本面) func curio_cap(kind: String) -> int: match kind: - "attack": return curio_cap_attack - "max_hp": return curio_cap_max_hp - "armor": return curio_cap_armor - "gp": return curio_cap_gp - "ap": return curio_cap_ap - "heal": return curio_cap_heal - "refresh": return curio_cap_refresh - "rap": return curio_cap_rap - "time_sand": return curio_cap_time_sand + "attack": return cap_segment.curio_cap_attack + "max_hp": return cap_segment.curio_cap_max_hp + "armor": return cap_segment.curio_cap_armor + "gp": return cap_segment.curio_cap_gp + "ap": return cap_segment.curio_cap_ap + "heal": return cap_segment.curio_cap_heal + "refresh": return cap_segment.curio_cap_refresh + "rap": return cap_segment.curio_cap_rap + "time_sand": return cap_segment.curio_cap_time_sand return 99 diff --git a/game/data/schemas/adventure_value_segment.gd b/game/data/schemas/adventure_value_segment.gd new file mode 100644 index 00000000..e64fb15c --- /dev/null +++ b/game/data/schemas/adventure_value_segment.gd @@ -0,0 +1,18 @@ +## 冒险表·令牌件值段(K4′ 拆段——curio_value_* 13 槽随段件嵌套;段内槽名逐字不动; +## 小/大数值对——v2.2 令牌池口径定稿:20/50、+1/+2、+1/+2、+5/+10、恢复+6、AP+1)。 +class_name AdventureValueSegment +extends Resource + +@export var curio_value_attack_common: int = 1 # [0,999] knob——小增伤 +@export var curio_value_attack_excellent: int = 2 # [0,999] knob——大增伤 +@export var curio_value_max_hp_common: int = 5 # [0,999] knob——小生命 +@export var curio_value_max_hp_excellent: int = 10 # [0,999] knob——大生命 +@export var curio_value_armor_common: int = 1 # [0,999] knob——小护甲 +@export var curio_value_armor_excellent: int = 2 # [0,999] knob——大护甲 +@export var curio_value_gp_common: int = 20 # [0,999] knob——小GP +@export var curio_value_gp_excellent: int = 50 # [0,999] knob——大GP +@export var curio_value_heal_excellent: int = 6 # [0,999] knob——恢复(当即回血,封顶生效上限) +@export var curio_value_refresh_excellent: int = 1 # [0,9] knob(provisional)——刷新次数件兑付值(三选一重抽次数 +N——_attune_refresh_x 增量,不进加算区) +@export var curio_value_ap_rare: int = 1 # [0,10] knob——AP 件每场战斗首轮行动点基线增量 +@export var curio_value_rap_rare: int = 3 # [0,99] knob(provisional)——储备金袋 RAP +N +@export var curio_value_time_sand_rare: int = 2 # [0,99] knob(provisional)——时沙 下轮 AP +N diff --git a/game/data/tables/adventure.tres b/game/data/tables/adventure.tres index 17a5c641..c60c6d66 100644 --- a/game/data/tables/adventure.tres +++ b/game/data/tables/adventure.tres @@ -1,11 +1,12 @@ -[gd_resource type="Resource" script_class="AdventureTable" load_steps=2 format=3] +[gd_resource type="Resource" script_class="AdventureTable" load_steps=5 format=3] [ext_resource type="Script" path="res://data/schemas/adventure_table.gd" id="1"] +[ext_resource type="Script" path="res://data/schemas/adventure_quota_segment.gd" id="2"] +[ext_resource type="Script" path="res://data/schemas/adventure_value_segment.gd" id="3"] +[ext_resource type="Script" path="res://data/schemas/adventure_cap_segment.gd" id="4"] -[resource] -script = ExtResource("1") -clear_heal_pct = 20 -curio_candidate_count = 3 +[sub_resource type="Resource" id="AdventureTable_quota"] +script = ExtResource("2") curio_quota_attack_common = 18 curio_quota_attack_excellent = 5 curio_quota_max_hp_common = 17 @@ -17,6 +18,9 @@ curio_quota_gp_excellent = 5 curio_quota_heal_excellent = 3 curio_quota_refresh_excellent = 2 curio_quota_ap_rare = 3 + +[sub_resource type="Resource" id="AdventureTable_value"] +script = ExtResource("3") curio_value_attack_common = 1 curio_value_attack_excellent = 2 curio_value_max_hp_common = 5 @@ -28,26 +32,18 @@ curio_value_gp_excellent = 50 curio_value_heal_excellent = 6 curio_value_refresh_excellent = 1 curio_value_ap_rare = 1 + +[sub_resource type="Resource" id="AdventureTable_cap"] +script = ExtResource("4") + +[resource] +script = ExtResource("1") +clear_heal_pct = 20 +curio_candidate_count = 3 +quota_segment = SubResource("AdventureTable_quota") +value_segment = SubResource("AdventureTable_value") +cap_segment = SubResource("AdventureTable_cap") feat_ticket_chance = 20 feat_ticket_quota = 2 feat_ticket_limit = 1 feat_ticket_pity_step = 5 - -; 迭代 20 T2 池结构案D 换代(2026-10-11,奇物.md 池结构与抽取 v1):四级档位 70/25/7/0 = 102 枚—— -; 稀有档投放三 kind=AP 件 3/储备金袋 2/时沙 2(ap_rare 显式载于本表,与 schema 缺省同值); -; 概率与上限解耦(案②令牌池+提前退役):概率位=档+令牌数、已拿上限=curio_cap_*(拿了才计); -; 曝光槽=三选一 2 格全池+1 格优秀档以上子池(子池空回退全池);凭证不进子池。 -; 前史 TP0 令牌池换代(2026-10-03,node-reward v2.2 追认 b 落地):三选一池 = 固定配额令牌池—— -; 洗牌不放回抽 3、选中踢池未选回池、池耗即枯竭; -; 种类次数上限退役(池消耗即上限;货架库存同账本=牌库剩余令牌数)。 -; 档位构成(现行):普通〔小GP 18/小增伤 18/小护甲 17/小生命 17〕+ 优秀〔大GP/大增伤/大护甲/大生命 各 5+恢复 3+刷新件 2〕 -; + 稀有〔AP 件 3/储备金袋 2/时沙 2〕。 -; 数值对:小GP 20/大GP 50、小增伤 +1/大 +2、小护甲 +1/大 +2、小生命 +5/大 +10、恢复 +6(当即回血)、AP +1。 -; 恢复件 = 新入池种类(优秀档)。 -; 退役字段:bonus_weight_*(E-S 权重族)/ bonus_cap_*(种类次数上限族)/ BONUS_CAP_UNLIMITED 哨兵—— -; 洗牌改令牌 Fisher-Yates(不放回抽 3,消费 reward_pick 封闭流)。 -; 迭代 11 第②批 商店共享池注记:货架 = 令牌级抽签(同 kind 去重每 kind 至多一卡、价格公式 tier-blind -; ceil(基价×b^(关序−1)×A^visit) 维持批②裁定、购买消费在架令牌本体)。 -; 末关的关卡完成不发三选一与回血(奖励只朝下一战生效)。 -; 全部 provisional-pending-曲线调参批(值锚与上调约束归 难度曲线与Boss;档位配额结构锚 70/25/7/0—— -; schema TIER_QUOTAS,validate 硬断言,改总量须重裁)。 diff --git a/game/tests/unit/core/adventure_feats_test.gd b/game/tests/unit/core/adventure_feats_test.gd index 8d8b6d01..0880d67e 100644 --- a/game/tests/unit/core/adventure_feats_test.gd +++ b/game/tests/unit/core/adventure_feats_test.gd @@ -208,7 +208,7 @@ func _smoke_adventure() -> void: var cand_ok := picks.size() == 2 var ks_gain_ok := picks.size() == 2 var resolve_ok := level_resolves.size() == 2 - var max_flat := int(_db.run.adventure.curio_value_max_hp_common) + var max_flat := int(_db.run.adventure.value_segment.curio_value_max_hp_common) var heal_pct := int(_db.run.adventure.clear_heal_pct) var hp_acc := 0 # max_hp 件累加(回血封顶断言的生效上限推导——TP0 起按兑付令牌实值,大小档分别计) var ks_prefix := 0 diff --git a/game/tests/unit/core/pool_case_d_test.gd b/game/tests/unit/core/pool_case_d_test.gd index 839ca48f..836679b0 100644 --- a/game/tests/unit/core/pool_case_d_test.gd +++ b/game/tests/unit/core/pool_case_d_test.gd @@ -161,8 +161,8 @@ func check_v8(c, db) -> void: Kit.check_quiet(false, "V8 前置:冒险启动") return # 概率位与 cap 两属性独立:改 cap 不动牌库(概率位)、改牌库不动 cap 字段 - var cap_field_before := int(db.run.adventure.curio_cap_gp) - db.run.adventure.curio_cap_gp = 1 # 独立设 cap(概率位=gp 令牌数不动) + var cap_field_before := int(db.run.adventure.cap_segment.curio_cap_gp) + db.run.adventure.cap_segment.curio_cap_gp = 1 # 独立设 cap(概率位=gp 令牌数不动) var gp_tokens: int = c.deck().pool_stock("gp") Kit.check_quiet(gp_tokens > 0 and int(db.run.adventure.curio_value("gp", "common")) == 20, "改 cap 不动概率位:牌库 gp 令牌 %d 枚在库、件值字段不受影响〔专长批 V8〕" % gp_tokens) @@ -187,4 +187,4 @@ func check_v8(c, db) -> void: gp_cand = true Kit.check_quiet(gp_in_deck >= 0 and not gp_cand, "提前退役:cap 满后候选视图零 gp(牌库本体张数不动=%d——概率位独立存活)〔专长批 V8〕" % gp_in_deck) - db.run.adventure.curio_cap_gp = cap_field_before # 还原表(同进程后续套件防御) + db.run.adventure.cap_segment.curio_cap_gp = cap_field_before # 还原表(同进程后续套件防御)