From 441111f49d39ad5a184eca51061882ff7c966dd9 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 5 Nov 2026 08:32:36 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=B7=A5=E5=85=B7(=E4=B8=89=E5=85=B3?= =?UTF-8?q?=E8=89=B2=E7=9B=B8=E6=8A=BD=E6=B5=8B=20S1/S2):=20=E5=B9=B6?= =?UTF-8?q?=E5=88=97=E6=A0=B7=E5=9B=BE=E8=84=9A=E6=9C=AC=E8=90=BD=E5=9C=B0?= =?UTF-8?q?=E2=80=94=E2=80=94S1=20=E6=9C=BA=E6=A3=80=20D=20=E4=B8=89?= =?UTF-8?q?=E5=85=B3=20H2=20=E6=A7=BD=E5=85=A8=E8=BF=87(L=200.346/0.532/0.?= =?UTF-8?q?345)=E3=80=81S2=20=E6=A0=B7=E5=9B=BE=E6=9C=BA=E6=A3=80=2017=20?= =?UTF-8?q?=E9=A1=B9=E5=85=A8=E7=BB=BF(=E9=98=B6=E6=A2=AF=E5=8D=95?= =?UTF-8?q?=E8=B0=83=209=20=E7=BB=84=E3=80=81=E7=BB=84=E9=97=B4=20CR=20?= =?UTF-8?q?=E6=9C=80=E5=BC=B1=201.224=E2=89=A51.20=E3=80=81B/C=2045=20?= =?UTF-8?q?=E8=A1=8C=E9=9B=B6=E8=BF=9D=E4=BE=8B=E3=80=81=E7=81=B0=E5=BA=A6?= =?UTF-8?q?=E9=9B=B6=E5=BD=A9=E8=89=B2=E3=80=81=E5=9B=9B=E7=BC=98=E5=87=80?= =?UTF-8?q?=E7=A9=BA)=EF=BC=9B=E6=A8=A1=E5=9E=8B=E5=8F=A3=E5=BE=84?= =?UTF-8?q?=E8=AE=A2=E6=AD=A3=3Dshader=20=E7=B2=BE=E7=A1=AE=E5=90=88?= =?UTF-8?q?=E6=88=90(=E6=96=B9=E6=A1=88=200.49/0.51=20=E7=B3=BB=E5=8F=8D?= =?UTF-8?q?=E8=A7=A3=E8=BF=91=E4=BC=BC,ui=5Fkit=20=E5=A4=B4=E6=B3=A8?= =?UTF-8?q?=E6=98=8E=E6=96=87=E8=B7=9D=E7=A6=BB=E5=9C=BA=E9=9D=9E=E6=89=81?= =?UTF-8?q?=E5=B9=B3)=E3=80=81=E8=A1=A8=E4=BA=8C=E8=A1=8C=E6=95=B0?= =?UTF-8?q?=E8=AE=A2=E6=AD=A3=2090=20=E8=A1=8C=EF=BC=9B=E8=AF=BB=E6=95=B0?= =?UTF-8?q?=E8=A1=A8=E8=90=BD=20reports/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reports/读数-三关色相互辨抽测-2026-11-05.md | 186 ++++++++ tools/glow_discrimination_sheet.py | 444 ++++++++++++++++++++ 2 files changed, 630 insertions(+) create mode 100644 reports/读数-三关色相互辨抽测-2026-11-05.md create mode 100644 tools/glow_discrimination_sheet.py diff --git a/reports/读数-三关色相互辨抽测-2026-11-05.md b/reports/读数-三关色相互辨抽测-2026-11-05.md new file mode 100644 index 00000000..db50e709 --- /dev/null +++ b/reports/读数-三关色相互辨抽测-2026-11-05.md @@ -0,0 +1,186 @@ +# 读数:三关色相 × 五组微光互辨抽测(2026-11-05) + +> 接收方:待办清单「三关色相 × 五组微光互辨抽测——三关图类型色板终值冻结的前置抽测」条。 +> 执行依据:reports/提案-三关色相互辨抽测方案-2026-10-29.md(S1/S2 步)。 +> 样图:artwork/mockups/glow-discrimination-sheet-2026-11-05.png(不入 git)。 + +## 机检汇总 + +| 项 | 判定 | 说明 | +|---|---|---| +| D-dungeon | PASS | 铺底代表值门(L/饱和/禁入带;近色只报读数):RGB=(181, 155, 119) L=0.346 饱和=0.343 色相=34.8° 近色对=4(在役素材色,非新增) | +| D-underdark | PASS | 铺底代表值门(L/饱和/禁入带;近色只报读数):RGB=(186, 193, 210) L=0.532 饱和=0.114 色相=222.5° 近色对=4(在役素材色,非新增) | +| D-deep_underdark | PASS | 铺底代表值门(L/饱和/禁入带;近色只报读数):RGB=(150, 158, 186) L=0.345 饱和=0.194 色相=226.7° 近色对=9(在役素材色,非新增) | +| A-stair-dungeon-素砖 | PASS | 明度阶梯单调递减:165.242→145.992→130.196→114.266→92.362 | +| A-stair-dungeon-裂纹 | PASS | 明度阶梯单调递减:165.242→145.992→130.196→114.266→92.362 | +| A-stair-dungeon-碎石斑 | PASS | 明度阶梯单调递减:164.957→144.992→129.269→113.266→91.434 | +| A-stair-underdark-素砖 | PASS | 明度阶梯单调递减:161.080→141.829→125.179→109.389→87.485 | +| A-stair-underdark-裂纹 | PASS | 明度阶梯单调递减:164.152→144.902→129.106→112.461→90.557 | +| A-stair-underdark-碎石斑 | PASS | 明度阶梯单调递减:158.152→138.829→123.106→106.461→84.557 | +| A-stair-deep_underdark-素砖 | PASS | 明度阶梯单调递减:145.437→126.186→109.748→93.746→71.914 | +| A-stair-deep_underdark-裂纹 | PASS | 明度阶梯单调递减:147.509→128.259→112.536→95.818→73.986 | +| A-stair-deep_underdark-碎石斑 | PASS | 明度阶梯单调递减:142.509→123.186→106.748→90.746→68.914 | +| A-CR | PASS | 组间合成对比最弱对 ≥1.20(90 对):最弱 underdark/HEAL/PIERCE CR=1.224 | +| B | PASS | 格底-微光可辨底线(45 行三通道差不全<8):违例 0 行:无 | +| C | PASS | 绘制参数校准(45 行模型差≤±2/255):违例 0 行:无 | +| GRAY | PASS | 灰度副本段零彩色像素:命中 0 | +| EDGE | PASS | 四缘 10px 带内零内容像素:命中 0 | + +## S1 机检 D:铺底代表值(H2 槽)五门 + +| 关 | RGB | L(线性域) | 饱和 | 色相 | 近色对 | 判定 | +|---|---|---|---|---|---|---| +| dungeon | (181, 155, 119) | 0.346 | 0.343 | 34.8° | 4 | 过 | +| underdark | (186, 193, 210) | 0.532 | 0.114 | 222.5° | 4 | 过 | +| deep_underdark | (150, 158, 186) | 0.345 | 0.194 | 226.7° | 9 | 过 | + +## 表一 逐对表(45 行) + +| 关 | 底型 | 微光组 | 带内合成均值 | 格心素底均值 | 模型带内均值 | 模型差 | 三通道差 | 色相差° | 判定 | +|---|---|---|---|---|---|---|---|---|---| +| dungeon | 素砖 | BUFF | (193, 166, 76) | (145, 116, 84) | (193, 166, 76) | 0 | [48, 50, 8] | 17 | 过 | +| dungeon | 素砖 | HEAL | (126, 159, 76) | (145, 116, 84) | (126, 159, 75) | 1 | [19, 43, 8] | 69 | 过 | +| dungeon | 素砖 | PIERCE | (100, 140, 122) | (145, 116, 84) | (100, 140, 122) | 0 | [45, 24, 38] | 145 | 过 | +| dungeon | 素砖 | MAGIC | (135, 105, 145) | (145, 116, 84) | (135, 105, 145) | 0 | [10, 11, 61] | 139 | 过 | +| dungeon | 素砖 | AOE | (155, 76, 70) | (145, 116, 84) | (155, 76, 70) | 0 | [10, 40, 14] | 46 | 过 | +| dungeon | 裂纹 | BUFF | (193, 166, 76) | (143, 115, 83) | (193, 166, 76) | 0 | [50, 51, 7] | 17 | 过 | +| dungeon | 裂纹 | HEAL | (126, 159, 76) | (143, 115, 83) | (126, 159, 76) | 0 | [17, 44, 7] | 69 | 过 | +| dungeon | 裂纹 | PIERCE | (100, 140, 122) | (143, 115, 83) | (100, 140, 122) | 0 | [43, 25, 39] | 145 | 过 | +| dungeon | 裂纹 | MAGIC | (135, 105, 145) | (143, 115, 83) | (135, 105, 145) | 0 | [8, 10, 62] | 139 | 过 | +| dungeon | 裂纹 | AOE | (155, 76, 70) | (143, 115, 83) | (155, 76, 70) | 0 | [12, 39, 13] | 46 | 过 | +| dungeon | 碎石斑 | BUFF | (192, 166, 75) | (147, 118, 85) | (192, 166, 75) | 0 | [45, 48, 10] | 17 | 过 | +| dungeon | 碎石斑 | HEAL | (125, 158, 75) | (147, 118, 85) | (125, 159, 75) | 1 | [22, 40, 10] | 69 | 过 | +| dungeon | 碎石斑 | PIERCE | (99, 139, 122) | (147, 118, 85) | (99, 139, 122) | 0 | [48, 21, 37] | 145 | 过 | +| dungeon | 碎石斑 | MAGIC | (134, 104, 144) | (147, 118, 85) | (134, 104, 144) | 0 | [13, 14, 59] | 139 | 过 | +| dungeon | 碎石斑 | AOE | (154, 75, 70) | (147, 118, 85) | (154, 75, 70) | 0 | [7, 43, 15] | 46 | 过 | +| underdark | 素砖 | BUFF | (172, 164, 100) | (104, 110, 128) | (172, 164, 100) | 0 | [68, 54, 28] | 170 | 过 | +| underdark | 素砖 | HEAL | (105, 157, 100) | (104, 110, 128) | (105, 157, 100) | 0 | [1, 47, 28] | 119 | 过 | +| underdark | 素砖 | PIERCE | (78, 137, 147) | (104, 110, 128) | (78, 137, 147) | 0 | [26, 27, 19] | 42 | 过 | +| underdark | 素砖 | MAGIC | (114, 102, 169) | (104, 110, 128) | (114, 102, 169) | 0 | [10, 8, 41] | 33 | 过 | +| underdark | 素砖 | AOE | (134, 73, 94) | (104, 110, 128) | (134, 73, 95) | 1 | [30, 37, 34] | 126 | 过 | +| underdark | 裂纹 | BUFF | (175, 167, 104) | (113, 120, 137) | (175, 167, 104) | 0 | [62, 47, 33] | 170 | 过 | +| underdark | 裂纹 | HEAL | (108, 160, 104) | (113, 120, 137) | (108, 160, 104) | 0 | [5, 40, 33] | 119 | 过 | +| underdark | 裂纹 | PIERCE | (82, 141, 150) | (113, 120, 137) | (82, 141, 150) | 0 | [31, 21, 13] | 42 | 过 | +| underdark | 裂纹 | MAGIC | (117, 105, 173) | (113, 120, 137) | (117, 105, 173) | 0 | [4, 15, 36] | 33 | 过 | +| underdark | 裂纹 | AOE | (137, 76, 98) | (113, 120, 137) | (137, 76, 98) | 0 | [24, 44, 39] | 126 | 过 | +| underdark | 碎石斑 | BUFF | (169, 161, 98) | (124, 131, 149) | (169, 161, 98) | 0 | [45, 30, 51] | 170 | 过 | +| underdark | 碎石斑 | HEAL | (102, 154, 97) | (124, 131, 149) | (102, 154, 97) | 0 | [22, 23, 52] | 119 | 过 | +| underdark | 碎石斑 | PIERCE | (76, 135, 144) | (124, 131, 149) | (76, 135, 144) | 0 | [48, 4, 5] | 42 | 过 | +| underdark | 碎石斑 | MAGIC | (111, 99, 167) | (124, 131, 149) | (111, 99, 167) | 0 | [13, 32, 18] | 33 | 过 | +| underdark | 碎石斑 | AOE | (131, 70, 92) | (124, 131, 149) | (131, 70, 92) | 0 | [7, 61, 57] | 126 | 过 | +| deep_underdark | 素砖 | BUFF | (157, 148, 86) | (76, 80, 102) | (157, 148, 86) | 0 | [81, 68, 16] | 175 | 过 | +| deep_underdark | 素砖 | HEAL | (90, 141, 86) | (76, 80, 102) | (90, 141, 86) | 0 | [14, 61, 16] | 123 | 过 | +| deep_underdark | 素砖 | PIERCE | (64, 121, 133) | (76, 80, 102) | (64, 121, 133) | 0 | [12, 41, 31] | 47 | 过 | +| deep_underdark | 素砖 | MAGIC | (99, 86, 155) | (76, 80, 102) | (99, 86, 155) | 0 | [23, 6, 53] | 29 | 过 | +| deep_underdark | 素砖 | AOE | (119, 57, 81) | (76, 80, 102) | (119, 57, 81) | 0 | [43, 23, 21] | 122 | 过 | +| deep_underdark | 裂纹 | BUFF | (159, 150, 89) | (84, 89, 111) | (159, 150, 89) | 0 | [75, 61, 22] | 175 | 过 | +| deep_underdark | 裂纹 | HEAL | (92, 143, 89) | (84, 89, 111) | (92, 143, 89) | 0 | [8, 54, 22] | 123 | 过 | +| deep_underdark | 裂纹 | PIERCE | (66, 124, 136) | (84, 89, 111) | (66, 124, 136) | 0 | [18, 35, 25] | 47 | 过 | +| deep_underdark | 裂纹 | MAGIC | (101, 88, 158) | (84, 89, 111) | (101, 88, 158) | 0 | [17, 1, 47] | 29 | 过 | +| deep_underdark | 裂纹 | AOE | (121, 59, 84) | (84, 89, 111) | (121, 59, 84) | 0 | [37, 30, 27] | 122 | 过 | +| deep_underdark | 碎石斑 | BUFF | (154, 145, 84) | (91, 97, 121) | (154, 145, 83) | 1 | [63, 48, 37] | 175 | 过 | +| deep_underdark | 碎石斑 | HEAL | (87, 138, 83) | (91, 97, 121) | (87, 138, 83) | 0 | [4, 41, 38] | 123 | 过 | +| deep_underdark | 碎石斑 | PIERCE | (61, 118, 130) | (91, 97, 121) | (61, 118, 130) | 0 | [30, 21, 9] | 47 | 过 | +| deep_underdark | 碎石斑 | MAGIC | (96, 83, 152) | (91, 97, 121) | (96, 83, 152) | 0 | [5, 14, 31] | 29 | 过 | +| deep_underdark | 碎石斑 | AOE | (116, 54, 78) | (91, 97, 121) | (116, 54, 78) | 0 | [25, 43, 43] | 122 | 过 | + +## 表二 组间表(90 行) + +| 关 | 底型 | 组对 | 合成对比 | 灰度亮度a | 灰度亮度b | 判定 | +|---|---|---|---|---|---|---| +| dungeon | 素砖 | BUFF/HEAL | 1.270 | 165.242 | 145.992 | 过 | +| dungeon | 素砖 | BUFF/PIERCE | 1.583 | 165.242 | 130.196 | 过 | +| dungeon | 素砖 | BUFF/MAGIC | 1.979 | 165.242 | 114.266 | 过 | +| dungeon | 素砖 | BUFF/AOE | 2.510 | 165.242 | 92.362 | 过 | +| dungeon | 素砖 | HEAL/PIERCE | 1.247 | 145.992 | 130.196 | 过 | +| dungeon | 素砖 | HEAL/MAGIC | 1.559 | 145.992 | 114.266 | 过 | +| dungeon | 素砖 | HEAL/AOE | 1.977 | 145.992 | 92.362 | 过 | +| dungeon | 素砖 | PIERCE/MAGIC | 1.250 | 130.196 | 114.266 | 过 | +| dungeon | 素砖 | PIERCE/AOE | 1.585 | 130.196 | 92.362 | 过 | +| dungeon | 素砖 | MAGIC/AOE | 1.268 | 114.266 | 92.362 | 过 | +| dungeon | 裂纹 | BUFF/HEAL | 1.270 | 165.242 | 145.992 | 过 | +| dungeon | 裂纹 | BUFF/PIERCE | 1.583 | 165.242 | 130.196 | 过 | +| dungeon | 裂纹 | BUFF/MAGIC | 1.979 | 165.242 | 114.266 | 过 | +| dungeon | 裂纹 | BUFF/AOE | 2.510 | 165.242 | 92.362 | 过 | +| dungeon | 裂纹 | HEAL/PIERCE | 1.247 | 145.992 | 130.196 | 过 | +| dungeon | 裂纹 | HEAL/MAGIC | 1.559 | 145.992 | 114.266 | 过 | +| dungeon | 裂纹 | HEAL/AOE | 1.977 | 145.992 | 92.362 | 过 | +| dungeon | 裂纹 | PIERCE/MAGIC | 1.250 | 130.196 | 114.266 | 过 | +| dungeon | 裂纹 | PIERCE/AOE | 1.585 | 130.196 | 92.362 | 过 | +| dungeon | 裂纹 | MAGIC/AOE | 1.268 | 114.266 | 92.362 | 过 | +| dungeon | 碎石斑 | BUFF/HEAL | 1.282 | 164.957 | 144.992 | 过 | +| dungeon | 碎石斑 | BUFF/PIERCE | 1.598 | 164.957 | 129.269 | 过 | +| dungeon | 碎石斑 | BUFF/MAGIC | 2.001 | 164.957 | 113.266 | 过 | +| dungeon | 碎石斑 | BUFF/AOE | 2.536 | 164.957 | 91.434 | 过 | +| dungeon | 碎石斑 | HEAL/PIERCE | 1.247 | 144.992 | 129.269 | 过 | +| dungeon | 碎石斑 | HEAL/MAGIC | 1.561 | 144.992 | 113.266 | 过 | +| dungeon | 碎石斑 | HEAL/AOE | 1.979 | 144.992 | 91.434 | 过 | +| dungeon | 碎石斑 | PIERCE/MAGIC | 1.252 | 129.269 | 113.266 | 过 | +| dungeon | 碎石斑 | PIERCE/AOE | 1.587 | 129.269 | 91.434 | 过 | +| dungeon | 碎石斑 | MAGIC/AOE | 1.267 | 113.266 | 91.434 | 过 | +| underdark | 素砖 | BUFF/HEAL | 1.248 | 161.080 | 141.829 | 过 | +| underdark | 素砖 | BUFF/PIERCE | 1.549 | 161.080 | 125.179 | 过 | +| underdark | 素砖 | BUFF/MAGIC | 1.969 | 161.080 | 109.389 | 过 | +| underdark | 素砖 | BUFF/AOE | 2.637 | 161.080 | 87.485 | 过 | +| underdark | 素砖 | HEAL/PIERCE | 1.241 | 141.829 | 125.179 | 过 | +| underdark | 素砖 | HEAL/MAGIC | 1.577 | 141.829 | 109.389 | 过 | +| underdark | 素砖 | HEAL/AOE | 2.112 | 141.829 | 87.485 | 过 | +| underdark | 素砖 | PIERCE/MAGIC | 1.271 | 125.179 | 109.389 | 过 | +| underdark | 素砖 | PIERCE/AOE | 1.702 | 125.179 | 87.485 | 过 | +| underdark | 素砖 | MAGIC/AOE | 1.339 | 109.389 | 87.485 | 过 | +| underdark | 裂纹 | BUFF/HEAL | 1.245 | 164.152 | 144.902 | 过 | +| underdark | 裂纹 | BUFF/PIERCE | 1.524 | 164.152 | 129.106 | 过 | +| underdark | 裂纹 | BUFF/MAGIC | 1.952 | 164.152 | 112.461 | 过 | +| underdark | 裂纹 | BUFF/AOE | 2.612 | 164.152 | 90.557 | 过 | +| underdark | 裂纹 | HEAL/PIERCE | 1.224 | 144.902 | 129.106 | 过 | +| underdark | 裂纹 | HEAL/MAGIC | 1.567 | 144.902 | 112.461 | 过 | +| underdark | 裂纹 | HEAL/AOE | 2.097 | 144.902 | 90.557 | 过 | +| underdark | 裂纹 | PIERCE/MAGIC | 1.280 | 129.106 | 112.461 | 过 | +| underdark | 裂纹 | PIERCE/AOE | 1.713 | 129.106 | 90.557 | 过 | +| underdark | 裂纹 | MAGIC/AOE | 1.338 | 112.461 | 90.557 | 过 | +| underdark | 碎石斑 | BUFF/HEAL | 1.252 | 158.152 | 138.829 | 过 | +| underdark | 碎石斑 | BUFF/PIERCE | 1.538 | 158.152 | 123.106 | 过 | +| underdark | 碎石斑 | BUFF/MAGIC | 1.981 | 158.152 | 106.461 | 过 | +| underdark | 碎石斑 | BUFF/AOE | 2.658 | 158.152 | 84.557 | 过 | +| underdark | 碎石斑 | HEAL/PIERCE | 1.229 | 138.829 | 123.106 | 过 | +| underdark | 碎石斑 | HEAL/MAGIC | 1.583 | 138.829 | 106.461 | 过 | +| underdark | 碎石斑 | HEAL/AOE | 2.123 | 138.829 | 84.557 | 过 | +| underdark | 碎石斑 | PIERCE/MAGIC | 1.288 | 123.106 | 106.461 | 过 | +| underdark | 碎石斑 | PIERCE/AOE | 1.728 | 123.106 | 84.557 | 过 | +| underdark | 碎石斑 | MAGIC/AOE | 1.341 | 106.461 | 84.557 | 过 | +| deep_underdark | 素砖 | BUFF/HEAL | 1.265 | 145.437 | 126.186 | 过 | +| deep_underdark | 素砖 | BUFF/PIERCE | 1.585 | 145.437 | 109.748 | 过 | +| deep_underdark | 素砖 | BUFF/MAGIC | 2.040 | 145.437 | 93.746 | 过 | +| deep_underdark | 素砖 | BUFF/AOE | 2.734 | 145.437 | 71.914 | 过 | +| deep_underdark | 素砖 | HEAL/PIERCE | 1.253 | 126.186 | 109.748 | 过 | +| deep_underdark | 素砖 | HEAL/MAGIC | 1.613 | 126.186 | 93.746 | 过 | +| deep_underdark | 素砖 | HEAL/AOE | 2.162 | 126.186 | 71.914 | 过 | +| deep_underdark | 素砖 | PIERCE/MAGIC | 1.287 | 109.748 | 93.746 | 过 | +| deep_underdark | 素砖 | PIERCE/AOE | 1.725 | 109.748 | 71.914 | 过 | +| deep_underdark | 素砖 | MAGIC/AOE | 1.340 | 93.746 | 71.914 | 过 | +| deep_underdark | 裂纹 | BUFF/HEAL | 1.263 | 147.509 | 128.259 | 过 | +| deep_underdark | 裂纹 | BUFF/PIERCE | 1.562 | 147.509 | 112.536 | 过 | +| deep_underdark | 裂纹 | BUFF/MAGIC | 2.028 | 147.509 | 95.818 | 过 | +| deep_underdark | 裂纹 | BUFF/AOE | 2.720 | 147.509 | 73.986 | 过 | +| deep_underdark | 裂纹 | HEAL/PIERCE | 1.237 | 128.259 | 112.536 | 过 | +| deep_underdark | 裂纹 | HEAL/MAGIC | 1.606 | 128.259 | 95.818 | 过 | +| deep_underdark | 裂纹 | HEAL/AOE | 2.154 | 128.259 | 73.986 | 过 | +| deep_underdark | 裂纹 | PIERCE/MAGIC | 1.298 | 112.536 | 95.818 | 过 | +| deep_underdark | 裂纹 | PIERCE/AOE | 1.742 | 112.536 | 73.986 | 过 | +| deep_underdark | 裂纹 | MAGIC/AOE | 1.341 | 95.818 | 73.986 | 过 | +| deep_underdark | 碎石斑 | BUFF/HEAL | 1.268 | 142.509 | 123.186 | 过 | +| deep_underdark | 碎石斑 | BUFF/PIERCE | 1.593 | 142.509 | 106.748 | 过 | +| deep_underdark | 碎石斑 | BUFF/MAGIC | 2.055 | 142.509 | 90.746 | 过 | +| deep_underdark | 碎石斑 | BUFF/AOE | 2.753 | 142.509 | 68.914 | 过 | +| deep_underdark | 碎石斑 | HEAL/PIERCE | 1.256 | 123.186 | 106.748 | 过 | +| deep_underdark | 碎石斑 | HEAL/MAGIC | 1.620 | 123.186 | 90.746 | 过 | +| deep_underdark | 碎石斑 | HEAL/AOE | 2.170 | 123.186 | 68.914 | 过 | +| deep_underdark | 碎石斑 | PIERCE/MAGIC | 1.290 | 106.748 | 90.746 | 过 | +| deep_underdark | 碎石斑 | PIERCE/AOE | 1.728 | 106.748 | 68.914 | 过 | +| deep_underdark | 碎石斑 | MAGIC/AOE | 1.339 | 90.746 | 68.914 | 过 | + +--- + +机检 17 项,FAIL 0 项。 + +目检(S3)归用户:四条判据见方案 §2.2(逐对指认 45/45/灰度副本 45/45/相邻并列 36 对可辨/装饰不抢读)。 diff --git a/tools/glow_discrimination_sheet.py b/tools/glow_discrimination_sheet.py new file mode 100644 index 00000000..d80d8a1f --- /dev/null +++ b/tools/glow_discrimination_sheet.py @@ -0,0 +1,444 @@ +# 三关色相 × 五组微光互辨抽测——S1 取铺底值(机检 D)+ S2 出并列样图(机检 A/B/C)。 +# 执行依据:reports/提案-三关色相互辨抽测方案-2026-10-29.md(抽测任务=待办清单 +# 「三关色相 × 五组微光互辨抽测」条)。产物:并列样图(artwork/,不入 git)+逐对读数表(reports/)。 +# 口径出处(冲突时以 owner 为准): +# 微光色值与呈现参数 = game/presentation/views/ui_kit.gd TG_GLOW_*/TYPE_GLOW_*(v2 冻结); +# 合成公式 = game/presentation/views/cell_type_glow.gdshader(blend_mix 距离场柔光); +# 带域/格心取样 = game/probe/type_glow_shot_probe.gd(de<格边×0.125 / 内缩 20%); +# 硬指标门 = art-bible §4.1(L≥0.30 线性域 / 饱和≤0.55 / 避 300°–345°); +# 既有色板比对池 = game/tests/golden/palette_baseline/ 两张条带并集(palette_check.py 同源)。 +# 方案 §2.3 机检 C 口径订正:模型 0.49/0.51 是反解近似(ui_kit.gd 头注「模型域与实测的差 +# = shader 距离场权重非扁平混合」),比较对象改为 shader 精确合成模型(逐像素复刻),判据线 +# ±2/255 沿用在役值。 +# 方案 §7 表二行数笔误订正:表二实为 90 行(3 关 × 3 底型 × 10 组对),非 30 行。 +# +# 用法: +# python tools/glow_discrimination_sheet.py --art [--no-sheet] +# 输出: +# /glow-discrimination-sheet-2026-11-05.png(样图:正图段+灰度副本段+图例) +# reports/读数-三关色相互辨抽测-2026-11-05.md(逐对表 45 行+组间表 90 行+机检汇总) +import argparse +import math +import os +import sys + +from PIL import Image + +REPO = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +# ── ui_kit.gd 冻结常量(逐字转写,禁改值)── +GLOWS = [ + ("BUFF", (247, 223, 67)), # 通用增益·芥末黄 + ("HEAL", (104, 208, 66)), # 治疗·黄绿 + ("PIERCE", (48, 166, 166)), # 穿刺·青 + ("MAGIC", (123, 91, 214)), # 魔法·紫罗兰 + ("AOE", (166, 29, 55)), # 群伤·绯红 +] +GLOW_ALPHA = 170.0 / 255.0 +BAND_FRAC = 0.125 +SOFT = 0.55 +CORNER = 2.0 + +CELL = 45 # D 区实比格边 +BAND = CELL * BAND_FRAC # 5.625 +CORE_PAD = int(CELL * 0.20) # 格心内缩(探针 CORE_PAD_FRAC=0.20) + +# ── 三关铺底代表值 = 色表墙顶受光家族最亮槽 H2(tools/recolor_terrain_tiles.py PALETTES)── +H2_VALUES = { + "dungeon": (181, 155, 119), + "underdark": (186, 193, 210), + "deep_underdark": (150, 158, 186), +} +BOARD_TYPES = ["dungeon", "underdark", "deep_underdark"] +BASE_VARIANTS = [ # (底型名,瓦片件名后缀)——素砖 + 两种装饰变体(高墙瓦片词表在册件) + ("素砖", "terrain_wall_center"), + ("裂纹", "terrain_wall_center_crack"), + ("碎石斑", "terrain_wall_center_speckle"), +] + +TILE_DIR = os.path.join(REPO, "game", "assets", "art", "board") +BASELINE_DIR = os.path.join(REPO, "game", "tests", "golden", "palette_baseline") + +CHECKS = [] + + +def check(cid, name, ok, detail=""): + CHECKS.append((cid, name, bool(ok), detail)) + print("[%s] %s %s — %s%s" % ("PASS" if ok else "FAIL", cid, name, "✓" if ok else "✗", + (";" + detail) if detail else "")) + + +# ── 色彩数学 ── +def to_linear(v): + c = v / 255.0 + return c / 12.92 if c <= 0.04045 else ((c + 0.055) / 1.055) ** 2.4 + + +def rel_lum(rgb): + return 0.2126 * to_linear(rgb[0]) + 0.7152 * to_linear(rgb[1]) + 0.0722 * to_linear(rgb[2]) + + +def gray709(rgb): + return 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2] + + +def hsv(rgb): + r, g, b = [v / 255.0 for v in rgb] + mx, mn = max(r, g, b), min(r, g, b) + d = mx - mn + if d == 0: + h = 0.0 + elif mx == r: + h = 60 * ((g - b) / d % 6) + elif mx == g: + h = 60 * ((b - r) / d + 2) + else: + h = 60 * ((r - g) / d + 4) + s = 0.0 if mx == 0 else d / mx + return h % 360, s + + +def wcag(c1, c2): + l1, l2 = rel_lum(c1), rel_lum(c2) + return (max(l1, l2) + 0.05) / (min(l1, l2) + 0.05) + + +def smoothstep(e0, e1, x): + t = max(0.0, min(1.0, (x - e0) / (e1 - e0))) + return t * t * (3.0 - 2.0 * t) + + +def glow_weight(px, py): + """shader 复刻:像素中心 (px,py) 的微光权重 = glow_alpha × a(d) × mask。""" + h = CELL / 2.0 + d = min(px, py, CELL - px, CELL - py) + r = min(CORNER, CELL * 0.25) + qx = abs(px - h) - (h - r) + qy = abs(py - h) - (h - r) + outside = math.hypot(max(qx, 0.0), max(qy, 0.0)) + min(max(qx, qy), 0.0) - r + mask = 1.0 - smoothstep(-1.0, 0.5, outside) + a = 0.0 + if d < BAND: + a = 1.0 - smoothstep(SOFT, 1.0, d / BAND) + return GLOW_ALPHA * a * mask + + +# ── 素材装载 ── +def load_tiles(): + tiles = {} + for bt in BOARD_TYPES: + for vn, stem in BASE_VARIANTS: + path = os.path.join(TILE_DIR, "%s_%s.png" % (stem, bt)) + if not os.path.exists(path): + print("[阻塞] 素材缺位:%s" % path, file=sys.stderr) + sys.exit(2) + img = Image.open(path).convert("RGB") + if img.size != (CELL, CELL): + img = img.resize((CELL, CELL), Image.NEAREST) + tiles[(bt, vn)] = img.load() + return tiles + + +# ── 带域/格心取样(探针口径)── +def band_pixels(): + """带域像素集(整数格坐标 de < 格边×0.125,type_glow_shot_probe 口径)。""" + return [(x, y) for x in range(CELL) for y in range(CELL) + if min(x, y, CELL - 1 - x, CELL - 1 - y) < BAND] + + +def core_pixels(): + """格心像素集(内缩 20%)。""" + return [(x, y) for x in range(CELL) for y in range(CELL) + if min(x, y, CELL - 1 - x, CELL - 1 - y) >= CELL * 0.20] + + +BAND_PX = band_pixels() +CORE_PX = core_pixels() + + +def mean_rgb(px, pts): + n = len(pts) + return tuple(round(sum(px[x, y][i] for x, y in pts) / n) for i in range(3)) + + +def model_band_mean(base_px, glow_rgb): + """shader 精确合成模型:逐像素 blend_mix 理论带内均值(独立实现路径)。""" + n = len(BAND_PX) + acc = [0.0, 0.0, 0.0] + for x, y in BAND_PX: + w = glow_weight(x + 0.5, y + 0.5) + b = base_px[x, y] + for i in range(3): + acc[i] += w * glow_rgb[i] + (1.0 - w) * b[i] + return tuple(round(v / n) for v in acc) + + +# ── 机检 D:铺底代表值五门 ── +def load_baseline_palette(): + cols = set() + for fn in ["ui_tokens.png", "art_snapshot.png"]: + p = os.path.join(BASELINE_DIR, fn) + img = Image.open(p).convert("RGB") + for x in range(img.width): + for y in range(img.height): + cols.add(img.getpixel((x, y))) + return sorted(cols) + + +def gate_d(tiles): + baseline = load_baseline_palette() + rows = [] + all_pass = True + for bt in BOARD_TYPES: + rgb = H2_VALUES[bt] + h, s = hsv(rgb) + lin = rel_lum(rgb) + l_ok = lin >= 0.30 + s_ok = s <= 0.55 + hue_ok = not (300.0 <= h <= 345.0) + # 近色门:三值=在役素材色(已在基线池内),palette_check 双门②只判新增色——报读数不判红 + near = [b for b in baseline if all(abs(rgb[i] - b[i]) < 8 for i in range(3))] + ok = l_ok and s_ok and hue_ok + all_pass = all_pass and ok + rows.append((bt, rgb, lin, s, h, len(near), ok)) + check("D-" + bt, "铺底代表值门(L/饱和/禁入带;近色只报读数)", ok, + "RGB=%s L=%.3f 饱和=%.3f 色相=%.1f° 近色对=%d(在役素材色,非新增)%s%s%s" + % (rgb, lin, s, h, len(near), + "" if l_ok else " [L红]", "" if s_ok else " [饱和红]", + "" if hue_ok else " [禁入带红]")) + # 语义检查=设计面人工核对(palette_check 同口径),打印读数不判红 + print(" [语义] %s=%s 环境域(不占红/金/蓝/紫赤/绿语义段)——人工核对" % (bt, rgb)) + # 渲染面带域均值 = 读数不判红(方案机检 D 只判槽值;本读数供观感定性参考) + for bt in BOARD_TYPES: + for vn, _ in BASE_VARIANTS: + m = mean_rgb(tiles[(bt, vn)], BAND_PX) + lin = rel_lum(m) + print(" [读数] 渲染面带域均值 %s/%s RGB=%s L=%.3f(不判红)" % (bt, vn, m, lin)) + return all_pass, rows + + +# ── 样图绘制 ── +PAGE_W, PAGE_H = 640, 1120 +MARGIN, HEAD, BLOCK_TITLE, GAP, LEGEND = 10, 60, 20, 30, 80 + + +def draw_sheet(out_path): + import argparse # noqa: F401 + from PIL import ImageDraw, ImageFont + img = Image.new("RGB", (PAGE_W, PAGE_H), (255, 255, 255)) + d = ImageDraw.Draw(img) + try: + f_zh = ImageFont.truetype("C:/Windows/Fonts/msyh.ttc", 13) + f_zh_s = ImageFont.truetype("C:/Windows/Fonts/msyh.ttc", 11) + except OSError: + f_zh = ImageFont.load_default() + f_zh_s = f_zh + + blocks = [] + y = MARGIN + HEAD + for bt in BOARD_TYPES: + d.text((MARGIN + 4, y + 3), "%s —— 列0=基准格,列1–5=五组微光(阶梯序)" % bt, fill=(0, 0, 0), font=f_zh) + y += BLOCK_TITLE + blocks.append((bt, y)) + y += 3 * CELL + + tiles = load_tiles() + # 画正图段 54 格 + cell_pngs = {} + for bt, y0 in blocks: + for ri, (vn, _) in enumerate(BASE_VARIANTS): + for ci, gname in enumerate(["BASE"] + [g[0] for g in GLOWS]): + base = tiles[(bt, vn)] + cell = Image.new("RGB", (CELL, CELL)) + cp = cell.load() + if gname == "BASE": + for x in range(CELL): + for yy in range(CELL): + cp[x, yy] = base[x, yy] + else: + glow = dict(GLOWS)[gname] + for x in range(CELL): + for yy in range(CELL): + w = glow_weight(x + 0.5, yy + 0.5) + b = base[x, yy] + cp[x, yy] = tuple(round(w * glow[i] + (1 - w) * b[i]) for i in range(3)) + gx = MARGIN + 170 + ci * CELL + gy = y0 + ri * CELL + img.paste(cell, (gx, gy)) + cell_pngs[(bt, vn, gname, "main")] = (gx, gy) + # 行标注 + for ri, (vn, _) in enumerate(BASE_VARIANTS): + d.text((MARGIN, y0 + ri * CELL + 16), vn, fill=(0, 0, 0), font=f_zh_s) + + # 灰度副本段(等幅面,正图段整段 Rec.709 去色) + main_top = MARGIN + HEAD + main_bot = y + gray_top = main_bot + GAP + for xx in range(MARGIN, PAGE_W - MARGIN): + for yy in range(main_top, main_bot): + r, g, b = img.getpixel((xx, yy)) + v = int(round(gray709((r, g, b)))) + img.putpixel((xx, gray_top + (yy - main_top)), (v, v, v)) + d.text((MARGIN + 4, gray_top - 2), "灰度副本段(Rec.709 去色——色弱通道目检面)", fill=(80, 80, 80), font=f_zh_s) + + # 图例段 + leg_y = gray_top + (main_bot - main_top) + 10 + d.text((MARGIN + 4, leg_y), "图例(五组冻结色值 ui_kit.gd TG_GLOW_*;阶梯序=合成空间亮度递减)", fill=(0, 0, 0), font=f_zh_s) + for i, (gn, rgb) in enumerate(GLOWS): + x0 = MARGIN + 170 + i * (CELL + 4) + d.rectangle([x0, leg_y + 18, x0 + CELL, leg_y + 18 + 28], fill=rgb, outline=(0, 0, 0)) + d.text((x0, leg_y + 48), gn, fill=(0, 0, 0), font=f_zh_s) + + img.save(out_path) + return img, cell_pngs, tiles, blocks, gray_top, main_top, main_bot + + +# ── 机检 A/B/C + 灰度/净空机检 ── +def run_checks(img, cell_pngs, tiles, blocks, gray_top, main_top, main_bot): + sheet_px = img.load() + table1 = [] # 45 行逐对表 + table2 = [] # 90 行组间表 + band_means = {} + fail_b, fail_c = [], [] + + for bt, y0 in blocks: + for vn, _ in BASE_VARIANTS: + # 列 0 基准格带域均值 = 该底型的模型底值 + gx0, gy0 = cell_pngs[(bt, vn, "BASE", "main")] + band_base = mean_rgb(tiles[(bt, vn)], BAND_PX) + for gi, (gname, glow) in enumerate(GLOWS): + gx, gy = cell_pngs[(bt, vn, gname, "main")] + px = tiles[(bt, vn)] + # 样图带内均值(样图渲染面读数) + n = len(BAND_PX) + acc = [0.0, 0.0, 0.0] + for x, yy in BAND_PX: + p = sheet_px[gx + x, gy + yy] + for i in range(3): + acc[i] += p[i] + band_mean = tuple(round(v / n) for v in acc) + core_mean = mean_rgb(px, CORE_PX) + model = model_band_mean(px, glow) + diff_model = max(abs(band_mean[i] - model[i]) for i in range(3)) + ch_diff = [abs(band_mean[i] - core_mean[i]) for i in range(3)] + b_ok = max(ch_diff) >= 8 + c_ok = diff_model <= 2 + if not b_ok: + fail_b.append("%s/%s/%s" % (bt, vn, gname)) + if not c_ok: + fail_c.append("%s/%s/%s" % (bt, vn, gname)) + hue_gap = abs(hsv(H2_VALUES[bt])[0] - hsv(glow)[0]) + hue_gap = min(hue_gap, 360 - hue_gap) + table1.append((bt, vn, gname, band_mean, core_mean, model, + diff_model, ch_diff, hue_gap, b_ok and c_ok)) + band_means[(bt, vn, gname)] = band_mean + + # 机检 A:组间表 90 行 + for bt, y0 in blocks: + for vn, _ in BASE_VARIANTS: + for i in range(len(GLOWS)): + for j in range(i + 1, len(GLOWS)): + a, b = band_means[(bt, vn, GLOWS[i][0])], band_means[(bt, vn, GLOWS[j][0])] + cr = wcag(a, b) + ok = cr >= 1.20 + table2.append((bt, vn, "%s/%s" % (GLOWS[i][0], GLOWS[j][0]), + cr, gray709(a), gray709(b), ok)) + stair_ok = True + for bt, y0 in blocks: + for vn, _ in BASE_VARIANTS: + seq = [gray709(band_means[(bt, vn, GLOWS[k][0])]) for k in range(len(GLOWS))] + mono = all(seq[k] > seq[k + 1] for k in range(len(seq) - 1)) + stair_ok = stair_ok and mono + check("A-stair-%s-%s" % (bt, vn[:4]), "明度阶梯单调递减", mono, + "→".join("%.3f" % v for v in seq)) + min_cr = min(t[3] for t in table2) + worst = min(table2, key=lambda t: t[3]) + check("A-CR", "组间合成对比最弱对 ≥1.20(90 对)", min_cr >= 1.20, + "最弱 %s/%s CR=%.3f" % (worst[0], worst[2], min_cr)) + check("B", "格底-微光可辨底线(45 行三通道差不全<8)", len(fail_b) == 0, + "违例 %d 行:%s" % (len(fail_b), ", ".join(fail_b[:6]) or "无")) + check("C", "绘制参数校准(45 行模型差≤±2/255)", len(fail_c) == 0, + "违例 %d 行:%s" % (len(fail_c), ", ".join(fail_c[:6]) or "无")) + + # 灰度段零彩色像素 + color_hit = 0 + for xx in range(MARGIN, PAGE_W - MARGIN): + for yy in range(gray_top + BLOCK_TITLE, gray_top + (main_bot - main_top)): + r, g, b = sheet_px[xx, yy] + if not (r == g == b): + color_hit += 1 + check("GRAY", "灰度副本段零彩色像素", color_hit == 0, "命中 %d" % color_hit) + + # 四缘净空(A5 同款) + edge_hit = 0 + for xx in range(PAGE_W): + for yy in range(PAGE_H): + if xx < MARGIN or xx >= PAGE_W - MARGIN or yy < MARGIN or yy >= PAGE_H - MARGIN: + if sheet_px[xx, yy] != (255, 255, 255): + edge_hit += 1 + check("EDGE", "四缘 10px 带内零内容像素", edge_hit == 0, "命中 %d" % edge_hit) + return table1, table2 + + +def write_report(table1, table2, d_rows): + rep = os.path.join(REPO, "reports", "读数-三关色相互辨抽测-2026-11-05.md") + lines = [ + "# 读数:三关色相 × 五组微光互辨抽测(2026-11-05)", + "", + "> 接收方:待办清单「三关色相 × 五组微光互辨抽测——三关图类型色板终值冻结的前置抽测」条。", + "> 执行依据:reports/提案-三关色相互辨抽测方案-2026-10-29.md(S1/S2 步)。", + "> 样图:artwork/mockups/glow-discrimination-sheet-2026-11-05.png(不入 git)。", + "", + "## 机检汇总", + "", + "| 项 | 判定 | 说明 |", + "|---|---|---|", + ] + for cid, name, ok, detail in CHECKS: + lines.append("| %s | %s | %s:%s |" % (cid, "PASS" if ok else "FAIL", name, detail)) + lines += ["", "## S1 机检 D:铺底代表值(H2 槽)五门", "", + "| 关 | RGB | L(线性域) | 饱和 | 色相 | 近色对 | 判定 |", "|---|---|---|---|---|---|---|"] + for bt, rgb, lin, s, h, near, ok in d_rows: + lines.append("| %s | %s | %.3f | %.3f | %.1f° | %d | %s |" % (bt, rgb, lin, s, h, near, "过" if ok else "红")) + lines += ["", "## 表一 逐对表(45 行)", "", + "| 关 | 底型 | 微光组 | 带内合成均值 | 格心素底均值 | 模型带内均值 | 模型差 | 三通道差 | 色相差° | 判定 |", + "|---|---|---|---|---|---|---|---|---|---|"] + for bt, vn, gn, bm, cm, md, dm, cd, hg, ok in table1: + lines.append("| %s | %s | %s | %s | %s | %s | %d | %s | %.0f | %s |" + % (bt, vn, gn, bm, cm, md, dm, cd, hg, "过" if ok else "红")) + lines += ["", "## 表二 组间表(90 行)", "", + "| 关 | 底型 | 组对 | 合成对比 | 灰度亮度a | 灰度亮度b | 判定 |", "|---|---|---|---|---|---|---|"] + for bt, vn, pair, cr, ga, gb, ok in table2: + lines.append("| %s | %s | %s | %.3f | %.3f | %.3f | %s |" % (bt, vn, pair, cr, ga, gb, "过" if ok else "红")) + n_fail = sum(1 for c in CHECKS if not c[2]) + lines += ["", "---", "", "机检 %d 项,FAIL %d 项。" % (len(CHECKS), n_fail), + "", "目检(S3)归用户:四条判据见方案 §2.2(逐对指认 45/45/灰度副本 45/45/相邻并列 36 对可辨/装饰不抢读)。", ""] + with open(rep, "w", encoding="utf-8") as f: + f.write("\n".join(lines)) + print("[报告] %s" % rep) + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--art", default=os.path.join(REPO, "artwork", "mockups")) + ap.add_argument("--no-sheet", action="store_true") + args = ap.parse_args() + tiles = load_tiles() + print("== S1 机检 D:三关铺底代表值 ==") + d_ok, d_rows = gate_d(tiles) + if args.no_sheet: + return 0 if d_ok else 1 + os.makedirs(args.art, exist_ok=True) + out = os.path.join(args.art, "glow-discrimination-sheet-2026-11-05.png") + print("== S2 出并列样图 ==") + img, cell_pngs, tiles2, blocks, gray_top, main_top, main_bot = draw_sheet(out) + print("[样图] %s" % out) + t1, t2 = run_checks(img, cell_pngs, tiles2, blocks, gray_top, main_top, main_bot) + write_report(t1, t2, d_rows) + n_fail = sum(1 for c in CHECKS if not c[2]) + print("== 抽测机检完成:%d 项,FAIL %d ==" % (len(CHECKS), n_fail)) + return 0 if n_fail == 0 else 1 + + +if __name__ == "__main__": + sys.exit(main()) From 4a52d769ec6efc7a0ca606bcf35302e77053f25e Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Fri, 6 Nov 2026 00:02:40 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=8A=A5=E5=91=8A(=E6=95=88=E6=9E=9C?= =?UTF-8?q?=E9=80=9A=E9=81=93=E4=B8=8E=E4=BA=8B=E4=BB=B6=E8=AF=8D=E9=9B=B6?= =?UTF-8?q?=E7=8E=B0=E5=BD=B9=E6=99=AE=E6=9F=A5):=20=E5=9B=9B=E8=AF=8D?= =?UTF-8?q?=E8=A1=A8+schema=E6=97=A7=E8=AF=8D=E5=B1=82+channel=E5=9F=9F?= =?UTF-8?q?=E5=85=A8=E9=87=8F=E5=8F=96=E8=AF=81=E2=80=94=E2=80=94=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E8=AF=8D=E9=9B=B6=E8=AE=A2=E9=98=854(armor=5Froll/rew?= =?UTF-8?q?ard=5Froll/treasure=5Fused/seal=5Fsettle,=E5=8F=91=E5=B0=84?= =?UTF-8?q?=E7=82=B9=E5=85=A8=E5=9C=A8=3D=E5=AE=8C=E6=95=B4=E7=A9=BA?= =?UTF-8?q?=E6=9E=B6=E5=AD=90)=E3=80=81=E6=95=88=E6=9E=9C=E8=AF=8D?= =?UTF-8?q?=E9=9B=B6=E4=BD=BF=E7=94=A810(=E7=A9=BA=E6=9E=B6=E5=AD=906/?= =?UTF-8?q?=E6=AD=BB=E8=AF=8D3/spike=E5=B2=97=E4=BD=8D=E9=94=99=E4=BD=8D)?= =?UTF-8?q?=E3=80=81schema=E6=97=A7=E8=AF=8D=E9=9B=B6=E8=A1=8C9(=E6=AD=BB?= =?UTF-8?q?=E8=AF=8D4/=E7=A9=BA=E6=9E=B6=E5=AD=905,ap=5Fcharge=5Fsafe?= =?UTF-8?q?=E5=9C=A8=E5=BD=B9)=E3=80=81=E4=BA=8B=E5=AE=9E=E8=AF=8D6/?= =?UTF-8?q?=E7=AE=97=E5=AD=90=E8=AF=8D7=E9=9B=B6=E8=A1=8C=E3=80=81?= =?UTF-8?q?=E5=8F=99=E8=BF=B0=E8=84=B1=E8=8A=825=E5=A4=84(=E6=8E=98?= =?UTF-8?q?=E8=BF=9B=E8=93=84=E8=83=BD/=E6=B7=B1=E6=8C=96=E9=92=BB?= =?UTF-8?q?=E5=A4=B4/=E7=88=86=E7=A0=B4=E5=B7=A5=E5=85=B5=E5=8C=85?= =?UTF-8?q?=E4=B8=89=E4=B8=93=E9=95=BF=E9=9B=B6=E5=9C=A8=E8=A1=A8=E8=80=8C?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E4=BD=9C=E5=9C=A8=E5=BD=B9=E5=8F=99=E8=BF=B0?= =?UTF-8?q?)=EF=BC=9B=E5=8E=9F=E5=AE=9E=E5=86=B54=E7=BB=84=E5=A4=8D?= =?UTF-8?q?=E6=A0=B8=E6=88=90=E7=AB=8B=EF=BC=9B=E8=A3=81=E5=86=B3=E7=82=B9?= =?UTF-8?q?=E6=B8=85=E5=8D=95A=E2=80=93G=E4=BE=9B=E9=80=90=E7=BB=84?= =?UTF-8?q?=E8=A3=81=E3=80=82=E6=8E=A5=E6=94=B6=E6=96=B9=3D=E5=BE=85?= =?UTF-8?q?=E5=8A=9E=E6=B8=85=E5=8D=95=E6=99=AE=E6=9F=A5=E6=9D=A1(?= =?UTF-8?q?=E5=86=99=E5=8D=A1=E8=BE=93=E5=85=A5=E5=90=88=E5=90=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../普查-效果通道与事件词零现役-2026-11-06.md | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 reports/普查-效果通道与事件词零现役-2026-11-06.md diff --git a/reports/普查-效果通道与事件词零现役-2026-11-06.md b/reports/普查-效果通道与事件词零现役-2026-11-06.md new file mode 100644 index 00000000..f83298b3 --- /dev/null +++ b/reports/普查-效果通道与事件词零现役-2026-11-06.md @@ -0,0 +1,113 @@ +# 普查:效果通道与事件词零现役(2026-11-06) + +> **接收方**:待办清单「效果通道与事件词的零现役普查」条——本报告是该条写卡段的输入合同。 +> **性质**:普查取证报告(只读扫描,零代码改动)。词表全集与引擎侧状态以 `game/core/effect_engine.gd` 现值为准;数据面使用统计按行结构键(`"on"`/`"kind"`/`"fact"`/`"op"`/`"channel"`)提取自 `game/data/tables/*.tres` 全域,不数裸词面(注释与载荷键不计)。 +> **判定口径**:引擎侧有发射点/消费分支 + 数据表零行 = **空架子**(架子完整等数据);引擎侧连消费分支都没有 = **死词**;词面在册但实际走别的通道 = **岗位错位**。 + +## 一、普查方法与范围 + +效果系统四词表封闭在 `effect_engine.gd` 常量:事件 `EVENTS`(21)/效果类型 `EFFECT_KINDS`(31)/事实 `FACTS`(18)/算子 `OPS`(13)。另扫两个邻接面:秘宝表 schema 旧词层(`treasure_item_table.gd` `EFFECT_KINDS` 旧词段 10 词,头注明文「旧词保留共存至迁移完成」)与效果参数 `channel` 域。数据面使用域 = feats/treasure_items 两表 trigger 行 + 天赋树规则合成行(`_push_tree_rule` 引擎内组装)+ 秘宝表 `effect_kinds`/主动件 `kind` 域。skills.tres(敌技)的 when/fact 走独立系统(消费端 `unit_container.gd`),不入本普查面。 + +## 二、六面清单 + +### 1. 事件词——零订阅 4 个(发射点全在,完整空架子) + +| 事件词 | 发射点 | 数据表订阅行 | 判定 | +|---|---|---|---| +| armor_roll | damage_controller.gd:296 | 0(feats 零订阅) | 空架子。**词两岗**:掷点流名岗在役(settlement.tres:59 `armor_roll_stream`),事件岗零使用 | +| reward_roll | battle_fx_host.gd:130 | 0 | 空架子 | +| treasure_used | reward_grant.gd:133 | 0 | 空架子 | +| seal_settle | grant_segment.gd:250 | 0 | 空架子 | + +其余 17 事件词订阅行在役(feats 1–11 行不等、treasure_items 1–2 行)。 + +### 2. 效果类型词(effect_engine 词表 31)——数据面零使用 10 个 + +| 词 | 消费分支 | 数据表行 | 判定 | +|---|---|---|---| +| add_ticket_rider | damage_controller.gd:399 | 0 | 空架子 | +| yield_mult | grant_segment.gd:118 | 0 | 空架子 | +| spawn_spell | grant_segment.gd:138 | 0 | 空架子 | +| apply_status | damage_controller.gd:429 | 0 | 空架子(另注意:状态施加在 damage_controller 有独立路径) | +| bias_rewards | battle_fx_host.gd:131 | 0 | 空架子 | +| counter_spend | action_economy.gd:115 + reward_grant.gd:135(两受理闸) | 0 | 空架子——见「叙述脱节」节:其服务对象掘进蓄能/深挖钻头两件专长零在表 | +| bias_wallet | 全域零字面 | 0 | 死词(词表头注称与 grant_gp「共享行拆型」,grant_gp 分支内亦无此词) | +| refresh_pick | 全域零字面 | 0 | 死词(ACTIVE_KINDS 在册,主动分发面亦零) | +| preview | 全域零字面 | 0 | 死词(同上) | +| spike | 独立 kind 零消费 | 0 | **岗位错位**:实走 `modify_ticket` `mode="spike"`(damage_controller.gd:312/:371,在役);独立 kind 词面在册——与迭代 53 清退批已核的「spike 承接句」同源 | + +其余 21 词数据面在役(feats 1–27 行);`damage_mult` 由天赋树规则合成行在役(effect_engine.gd:160)。 + +### 3. 秘宝表 schema 旧词层(10 词)——数据面在役 1、零行 9 + +| 旧词 | 消费点 | 数据表行 | 判定 | +|---|---|---|---| +| ap_charge_safe | —(常时参数注入面) | treasure_items.tres:62 | 在役 | +| mine_reveal | reward_grant.gd:147(主动分发判定) | 0 | 空架子(新旧词共存态:新词 reveal_tiles 同分支在役) | +| reward_preview | reward_grant.gd:151 | 0 | 空架子 | +| ap_grant | reward_grant.gd:153 | 0 | 空架子(数据面走新词形 `grant_ap`) | +| cell_removal | reward_grant.gd:160-161 | 0 | 空架子——原实况点名组 | +| bonus_refresh | adventure_runner/battle_orchestrator/refresh_bank | 0 | 空架子 | +| mine_hit_halve | 全域零文件命中 | 0 | 死词——原实况点名组 | +| reflect_damage | 全域零文件命中 | 0 | 死词。反弹 N 本由其 magnitude 承载(schema 注释),对应 `open_ticket` `channel="reflect"` 行族零表行(21 张表逐张核)——原实况点名组 | +| ap_rounds_front | 全域零文件命中 | 0 | 死词 | +| reward_weight_bias | 全域零文件命中 | 0 | 死词 | + +schema 头注「旧词保留共存至迁移完成」——迁移未完成态本身在册为债。 + +### 4. 事实词(FACTS 18)——数据面零使用 6 个 + +| 词 | 引擎侧 | 数据表行 | 判定 | +|---|---|---|---| +| is_first_dig_of_battle | 查询面在 | 0 | 裸预留 | +| terrain_kind | 载荷特判在(effect_engine.gd:322-331——敌技伤害载荷回落 null 判「不在场」) | 0 | 空架子(特判支撑、零表行) | +| target_armor_class | 查询面在 | 0 | 裸预留 | +| seals_count | 查询面在 | 0 | 裸预留 | +| nest_count | 查询面在 | 0 | 裸预留 | +| battle_index | 查询面在 | 0 | 裸预留 | + +其余 12 词在役(头注点名的用途专长——地质学家/边陲矿工/跳格采掘/破封一击/一滴不剩/背水/保险丝/弃图兑换等——逐个核在 feats.tres 在表)。 + +### 5. 算子词(OPS 13)——数据面零使用 7 个 + +| 词 | 引擎侧 | 数据表行 | 判定 | +|---|---|---|---| +| neq | 实现在(_cmp_ok) | 0 | 裸预留 | +| gt | 实现在(_cmp_ok) | 0 | 裸预留 | +| ends_with | 实现在(_ends_with_ok:312) | 0 | 空架子(头注称「对某甲族的泛条件」——无承载件) | +| has | 实现在(_has_ok:324) | 0 | 空架子 | +| mod_zero | 实现在(_counter_op_ok:335) | 0 | 空架子——见「叙述脱节」:头注称用途「掘进蓄能」,该专长零在表 | +| gte_ref | 实现在(_counter_op_ok:335) | 0 | 空架子——头注称用途「深挖钻头配额」,该专长零在表 | +| lt_ref | 实现在(_counter_op_ok:335) | 0 | 同上 | + +其余 6 算子在役(eq/gte/lte/lt/mod_eq/advantageous——mod_eq 双管镐、advantageous 淬毒刃纹均核在表)。 + +### 6. channel 域 + +数据面现值仅 `blast`(feats 2 行)。`open_ticket` `channel="reflect"` 反弹行族零表行。channel 值域未单点封闭(各消费分支自判值,无独立词表常量)——去留裁定时可一并裁是否收词表。 + +## 三、叙述脱节点(注释把不存在的专长写成在役叙述——spike 案同款误导航源) + +| 位置 | 叙述 | 事实 | +|---|---|---| +| effect_engine.gd OPS 头注 | mod_zero「掘进蓄能」、gte_ref/lt_ref「深挖钻头配额」 | 两专长 feats/treasure 零在表(grep 专名零命中) | +| effect_engine.gd EFFECT_KINDS 头注 | spike 独立 kind 在词表 | 实走 modify_ticket mode 通道(岗位错位) | +| reward_grant.gd:130 | 「counter_spend 订阅=掘进蓄能积点账本」 | 掘进蓄能零在表 | +| action_economy.gd:82 | 「深挖钻头付费开掘(dig_paid counter_spend 订阅施加面)」 | 深挖钻头零在表 | +| treasure_item_table.gd:20 | 「cell_removal = 爆破工兵包中立移除格」 | 爆破工兵包零在表 | + +## 四、裁决点清单(逐组裁:删/补内容接线/留作预留) + +| 组 | 内容 | 裁决选项 | +|---|---|---| +| A | 事件词 4:armor_roll(事件岗)/reward_roll/treasure_used/seal_settle | 删词+摘发射点,或补一件订阅专长 | +| B | 效果词空架子 6:add_ticket_rider/yield_mult/spawn_spell/apply_status/bias_rewards/counter_spend | 同上 | +| C | 效果词死词 3:bias_wallet/refresh_pick/preview | 删词(含 ACTIVE_KINDS 对应位) | +| D | spike 独立 kind | 删词面(mode 通道在役不动) | +| E | schema 旧词 9:死词 4 直删候选(mine_hit_halve/reflect_damage/ap_rounds_front/reward_weight_bias);空架子 5(mine_reveal/reward_preview/ap_grant/cell_removal/bonus_refresh)删或完成迁移 | 删词或接线;同批裁「迁移完成」口径 | +| F | 事实词 6/算子词 7:裸预留与空架子 | 删或留预留(预留需头注改述为「预留无承载件」) | +| G | 叙述脱节 5 处 | 随 A–F 同批订正注释 | + +## 五、与原实况登记 4 组的对应 + +原实况 4 组(cell_removal/mine_hit_halve/open_ticket reflect 行族/armor_roll 订阅)全部复核成立;普查扩面新增:事件词 3(reward_roll/treasure_used/seal_settle)、效果词 10、旧词层另 5、事实词 6、算子词 7、叙述脱节 5 处。 From b4e6db2f8918927f5ec003d9495d1c92ae8c1192 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Fri, 6 Nov 2026 00:33:47 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=8A=A5=E5=91=8A(=E6=95=88=E6=9E=9C?= =?UTF-8?q?=E9=80=9A=E9=81=93=E4=B8=8E=E4=BA=8B=E4=BB=B6=E8=AF=8D=E9=9B=B6?= =?UTF-8?q?=E7=8E=B0=E5=BD=B9=E6=99=AE=E6=9F=A5):=20=E5=8F=A3=E5=BE=84?= =?UTF-8?q?=E6=94=B6=E7=AA=84=E9=87=8D=E5=86=99=E2=80=94=E2=80=94=E5=9F=8B?= =?UTF-8?q?=E7=82=B9=E5=B1=82=E4=B8=8E=E5=86=85=E5=AE=B9=E5=B1=82=E4=B8=A4?= =?UTF-8?q?=E5=B1=82=E5=88=86=E5=BC=80=E5=88=A4=EF=BC=9B=E5=9B=9B=E8=AF=8D?= =?UTF-8?q?=E8=A1=A8+schema=E6=97=A7=E8=AF=8D=E5=B1=82=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E5=B1=9E=E9=A2=84=E7=95=99=E5=9F=8B=E7=82=B9=E9=9D=A2=E8=AF=8D?= =?UTF-8?q?=E9=9D=A2=E5=85=A8=E4=BF=9D=E7=95=99=E9=9B=B6=E6=B8=85=E9=80=80?= =?UTF-8?q?=E9=A1=B9(=E6=9E=B6=E6=9E=84=E5=8E=9F=E5=88=99=3D=E8=AF=8D?= =?UTF-8?q?=E8=A1=A8=E5=85=88=E8=A1=8C=E5=86=85=E5=AE=B9=E5=90=8E=E6=8E=A5?= =?UTF-8?q?,effect=5Fengine=20=E5=A4=B4=E6=B3=A8=E6=98=8E=E6=96=87)?= =?UTF-8?q?=EF=BC=9B=E5=86=85=E5=AE=B9=E5=B1=82=E9=9B=B6=E5=AD=A4=E5=84=BF?= =?UTF-8?q?(=E6=95=B0=E6=8D=AE=E8=A1=8C=E5=85=A8=E9=83=A8=E5=9C=A8?= =?UTF-8?q?=E5=BD=B9)=EF=BC=9Bspawn=5Fspell=3D=E9=94=BB=E9=80=A0=E6=B3=95?= =?UTF-8?q?=E6=9D=96=E8=AE=BE=E8=AE=A1=E5=9C=A8=E5=86=8C=E5=BE=85=E6=8E=A5?= =?UTF-8?q?=E7=BA=BF=E3=80=81bias=5Frewards/counter=5Fspend=3D=E6=9E=B6?= =?UTF-8?q?=E6=9E=84=E5=9C=A8=E5=BD=B9=E6=9C=BA=E5=88=B6=E6=89=BF=E8=BD=BD?= =?UTF-8?q?=E4=BD=8D=E3=80=81=E6=97=A7=E8=AF=8D=E5=B1=82=3D=E8=BF=AD?= =?UTF-8?q?=E4=BB=A322=E7=A7=98=E5=AE=9D=E6=89=B9=E6=8D=A2=E4=BB=A3?= =?UTF-8?q?=E9=81=97=E7=95=99=E8=BF=81=E7=A7=BB=E5=B0=BE=E5=B7=B4(?= =?UTF-8?q?=E6=94=B6=E5=B0=BE=E5=BD=92=E7=94=A8=E6=88=B7=E5=8F=A6=E4=BB=A4?= =?UTF-8?q?)=EF=BC=9B=E5=94=AF=E4=B8=80=E5=AE=9E=E8=B4=A8=E5=8F=91?= =?UTF-8?q?=E7=8E=B0=3D=E5=8F=99=E8=BF=B0=E8=84=B1=E8=8A=825=E5=A4=84(?= =?UTF-8?q?=E6=8E=98=E8=BF=9B=E8=93=84=E8=83=BD/=E6=B7=B1=E6=8C=96?= =?UTF-8?q?=E9=92=BB=E5=A4=B4/=E7=88=86=E7=A0=B4=E5=B7=A5=E5=85=B5?= =?UTF-8?q?=E5=8C=85=E4=B8=89=E4=B8=93=E9=95=BF=E6=9C=AA=E5=85=A5=E8=A1=A8?= =?UTF-8?q?=E8=80=8C=E6=B3=A8=E9=87=8A=E4=BD=9C=E5=9C=A8=E5=BD=B9=E5=8F=99?= =?UTF-8?q?=E8=BF=B0,=E8=AE=A2=E6=AD=A3=E6=96=B9=E5=90=91=3D=E6=B3=A8?= =?UTF-8?q?=E6=98=8E=E9=A2=84=E7=95=99=E4=B8=8D=E5=8A=A8=E9=80=BB=E8=BE=91?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../普查-效果通道与事件词零现役-2026-11-06.md | 132 ++++++------------ 1 file changed, 46 insertions(+), 86 deletions(-) diff --git a/reports/普查-效果通道与事件词零现役-2026-11-06.md b/reports/普查-效果通道与事件词零现役-2026-11-06.md index f83298b3..43aaea90 100644 --- a/reports/普查-效果通道与事件词零现役-2026-11-06.md +++ b/reports/普查-效果通道与事件词零现役-2026-11-06.md @@ -1,113 +1,73 @@ # 普查:效果通道与事件词零现役(2026-11-06) -> **接收方**:待办清单「效果通道与事件词的零现役普查」条——本报告是该条写卡段的输入合同。 -> **性质**:普查取证报告(只读扫描,零代码改动)。词表全集与引擎侧状态以 `game/core/effect_engine.gd` 现值为准;数据面使用统计按行结构键(`"on"`/`"kind"`/`"fact"`/`"op"`/`"channel"`)提取自 `game/data/tables/*.tres` 全域,不数裸词面(注释与载荷键不计)。 -> **判定口径**:引擎侧有发射点/消费分支 + 数据表零行 = **空架子**(架子完整等数据);引擎侧连消费分支都没有 = **死词**;词面在册但实际走别的通道 = **岗位错位**。 +> **接收方**:待办清单「效果通道与事件词的零现役普查」条——本报告是该条的产出合同。 +> **性质**:普查取证报告(只读扫描,零代码改动)。 +> **普查结论**:效果系统内容层(数据行)**零孤儿**——全部在役;四张词表+秘宝表 schema 旧词层全部属**预留埋点面**,词面全部保留、零清退项(架构原则=词表先行、内容后接:加一件已有效果类型的专长/秘宝只写 .tres 数据行零代码,effect_engine.gd 头注明文);唯一实质发现=**注释叙述脱节 5 处**(第三节,订正建议)。 +> **普查口径**:埋点层(引擎侧封闭词表、发射点、消费分支、查询实现——动态配置可达的预留触发点)与内容层(哪件秘宝/专长经数据行声明使用)两层分开判;本报告只登记两层现状,不做埋点层去留裁决。 -## 一、普查方法与范围 +## 一、普查范围与方法 -效果系统四词表封闭在 `effect_engine.gd` 常量:事件 `EVENTS`(21)/效果类型 `EFFECT_KINDS`(31)/事实 `FACTS`(18)/算子 `OPS`(13)。另扫两个邻接面:秘宝表 schema 旧词层(`treasure_item_table.gd` `EFFECT_KINDS` 旧词段 10 词,头注明文「旧词保留共存至迁移完成」)与效果参数 `channel` 域。数据面使用域 = feats/treasure_items 两表 trigger 行 + 天赋树规则合成行(`_push_tree_rule` 引擎内组装)+ 秘宝表 `effect_kinds`/主动件 `kind` 域。skills.tres(敌技)的 when/fact 走独立系统(消费端 `unit_container.gd`),不入本普查面。 +效果系统四词表封闭在 `effect_engine.gd` 常量:事件 `EVENTS`(21)/效果类型 `EFFECT_KINDS`(31)/事实 `FACTS`(18)/算子 `OPS`(13)。邻接面:秘宝表 schema 旧词层(`treasure_item_table.gd` `EFFECT_KINDS` 旧词段 10 词)与效果参数 `channel` 域。数据面使用域 = feats/treasure_items 两表 trigger 行 + 天赋树规则合成行(引擎内组装)+ 秘宝表 `effect_kinds`/主动件 `kind` 域。skills.tres(敌技)的 when/fact 走独立系统(消费端 unit_container),不入本普查面。数据面统计按行结构键(`"on"`/`"kind"`/`"fact"`/`"op"`/`"channel"`)提取自 `game/data/tables/*.tres` 全域,不数注释里的裸词面。 -## 二、六面清单 +## 二、埋点台账(词面全部保留;下表只登记各词现状) -### 1. 事件词——零订阅 4 个(发射点全在,完整空架子) +### 1. 事件词(21) -| 事件词 | 发射点 | 数据表订阅行 | 判定 | -|---|---|---|---| -| armor_roll | damage_controller.gd:296 | 0(feats 零订阅) | 空架子。**词两岗**:掷点流名岗在役(settlement.tres:59 `armor_roll_stream`),事件岗零使用 | -| reward_roll | battle_fx_host.gd:130 | 0 | 空架子 | -| treasure_used | reward_grant.gd:133 | 0 | 空架子 | -| seal_settle | grant_segment.gd:250 | 0 | 空架子 | +| 现状 | 词 | 说明 | +|---|---|---| +| 订阅在役(17) | dig_reveal/dig_paid/seal_hit/mine_hit/attack_commit/clamp_check/kill/damage_taken/round_start/round_end/seal_settle 以外全表 | feats/treasure 数据行 1–11 行不等 | +| 预留(4) | armor_roll(事件岗)/reward_roll/treasure_used/seal_settle | 发射点全在役运行(damage_controller:296/battle_fx_host:130/reward_grant:133/grant_segment:250),等订阅内容接线。armor_roll 另有掷点流名岗在役(settlement.tres:59),事件岗与流名岗同词两用 | -其余 17 事件词订阅行在役(feats 1–11 行不等、treasure_items 1–2 行)。 +### 2. 效果类型词(effect_engine 词表 31) -### 2. 效果类型词(effect_engine 词表 31)——数据面零使用 10 个 +| 现状 | 词 | 说明 | +|---|---|---| +| 数据面在役(21) | counter_add/grant_ap/reveal_tiles/damage_reduce/grant_gp/grant_material/preview_area/remove_mines/ac_bonus/attack_bonus/shield/blast_scaled/heal/target_attack_bonus/bonus_delta/modify_ticket/open_ticket/forgive_seal_miss/grant_reserve_ap/apply_discount/mine_count_preview | feats 1–27 行不等;treasure 1–2 行 | +| 引擎内组装在役(1) | damage_mult | 天赋树规则合成行在用(effect_engine.gd:160) | +| 设计在册待接线(1) | spawn_spell | 锻造工坊.md:115 法杖路线「开局魔法矢」设计在册,等法杖实装接线 | +| 架构在役机制承载位(2) | bias_rewards/counter_spend | bias_rewards=偏运权重系统效果层承载(architecture.md「BattleFxHost」行:luck_bias_for 偏运合计查询口在役,零订阅时返回 0=原行集零扰动);counter_spend=受理闸模式(action_economy:115/reward_grant:135 两受理闸+交叉校验规则),为「积点足才受理」类效果预留 | +| 词表先行预留(7) | add_ticket_rider/yield_mult/apply_status/bias_wallet/refresh_pick/preview/spike(独立 kind 岗) | 消费分支或主动件分发位在(damage_controller:399/grant_segment:118、:429/battle_fx_host:131 等);spike 实走 modify_ticket 的 mode="spike" 通道(damage_controller:312、:371,在役),独立 kind 词面=同语义的预留位 | -| 词 | 消费分支 | 数据表行 | 判定 | -|---|---|---|---| -| add_ticket_rider | damage_controller.gd:399 | 0 | 空架子 | -| yield_mult | grant_segment.gd:118 | 0 | 空架子 | -| spawn_spell | grant_segment.gd:138 | 0 | 空架子 | -| apply_status | damage_controller.gd:429 | 0 | 空架子(另注意:状态施加在 damage_controller 有独立路径) | -| bias_rewards | battle_fx_host.gd:131 | 0 | 空架子 | -| counter_spend | action_economy.gd:115 + reward_grant.gd:135(两受理闸) | 0 | 空架子——见「叙述脱节」节:其服务对象掘进蓄能/深挖钻头两件专长零在表 | -| bias_wallet | 全域零字面 | 0 | 死词(词表头注称与 grant_gp「共享行拆型」,grant_gp 分支内亦无此词) | -| refresh_pick | 全域零字面 | 0 | 死词(ACTIVE_KINDS 在册,主动分发面亦零) | -| preview | 全域零字面 | 0 | 死词(同上) | -| spike | 独立 kind 零消费 | 0 | **岗位错位**:实走 `modify_ticket` `mode="spike"`(damage_controller.gd:312/:371,在役);独立 kind 词面在册——与迭代 53 清退批已核的「spike 承接句」同源 | +### 3. 事实词(FACTS 18) -其余 21 词数据面在役(feats 1–27 行);`damage_mult` 由天赋树规则合成行在役(effect_engine.gd:160)。 +| 现状 | 词 | +|---|---| +| 数据面在役(12) | matchup/counter/new_resource_type/is_edge_cell/is_blank_zero/dug_under_seal/ap_exhausted_last/hp_ratio/amount/ap_left/pct/round_index | +| 预留(6) | is_first_dig_of_battle/terrain_kind(载荷特判支撑在:effect_engine.gd:322-331)/target_armor_class/seals_count/nest_count/battle_index | -### 3. 秘宝表 schema 旧词层(10 词)——数据面在役 1、零行 9 +### 4. 算子词(OPS 13) -| 旧词 | 消费点 | 数据表行 | 判定 | -|---|---|---|---| -| ap_charge_safe | —(常时参数注入面) | treasure_items.tres:62 | 在役 | -| mine_reveal | reward_grant.gd:147(主动分发判定) | 0 | 空架子(新旧词共存态:新词 reveal_tiles 同分支在役) | -| reward_preview | reward_grant.gd:151 | 0 | 空架子 | -| ap_grant | reward_grant.gd:153 | 0 | 空架子(数据面走新词形 `grant_ap`) | -| cell_removal | reward_grant.gd:160-161 | 0 | 空架子——原实况点名组 | -| bonus_refresh | adventure_runner/battle_orchestrator/refresh_bank | 0 | 空架子 | -| mine_hit_halve | 全域零文件命中 | 0 | 死词——原实况点名组 | -| reflect_damage | 全域零文件命中 | 0 | 死词。反弹 N 本由其 magnitude 承载(schema 注释),对应 `open_ticket` `channel="reflect"` 行族零表行(21 张表逐张核)——原实况点名组 | -| ap_rounds_front | 全域零文件命中 | 0 | 死词 | -| reward_weight_bias | 全域零文件命中 | 0 | 死词 | +| 现状 | 词 | +|---|---| +| 数据面在役(6) | eq/gte/lte/lt/mod_eq(双管镐)/advantageous(淬毒刃纹) | +| 预留(7) | neq/gt/ends_with/has/mod_zero/gte_ref/lt_ref(实现函数全在:_cmp_ok/_ends_with_ok:312/_has_ok:324/_counter_op_ok:335) | -schema 头注「旧词保留共存至迁移完成」——迁移未完成态本身在册为债。 +### 5. 秘宝表 schema 旧词层(10)——旧目录换代遗留的迁移尾巴 -### 4. 事实词(FACTS 18)——数据面零使用 6 个 +历史(git 查证):这批词曾服务旧秘宝目录数据行,经「秘宝六件迁移+令牌兑付收敛」批(a33ddaf5)与迭代 22 秘宝批(48b06961,旧目录 12 行删除、新目录 12 行落表:晨操令/阔视野带/试炼镐/刷新练习/储备罐/巢穴预告/线香/双管装填/远程镐/刷新执照/天眼/信标网络)两轮换代后,数据行全用新词形,词面按 schema 头注「旧词保留共存至迁移完成」留下。 -| 词 | 引擎侧 | 数据表行 | 判定 | -|---|---|---|---| -| is_first_dig_of_battle | 查询面在 | 0 | 裸预留 | -| terrain_kind | 载荷特判在(effect_engine.gd:322-331——敌技伤害载荷回落 null 判「不在场」) | 0 | 空架子(特判支撑、零表行) | -| target_armor_class | 查询面在 | 0 | 裸预留 | -| seals_count | 查询面在 | 0 | 裸预留 | -| nest_count | 查询面在 | 0 | 裸预留 | -| battle_index | 查询面在 | 0 | 裸预留 | - -其余 12 词在役(头注点名的用途专长——地质学家/边陲矿工/跳格采掘/破封一击/一滴不剩/背水/保险丝/弃图兑换等——逐个核在 feats.tres 在表)。 - -### 5. 算子词(OPS 13)——数据面零使用 7 个 - -| 词 | 引擎侧 | 数据表行 | 判定 | -|---|---|---|---| -| neq | 实现在(_cmp_ok) | 0 | 裸预留 | -| gt | 实现在(_cmp_ok) | 0 | 裸预留 | -| ends_with | 实现在(_ends_with_ok:312) | 0 | 空架子(头注称「对某甲族的泛条件」——无承载件) | -| has | 实现在(_has_ok:324) | 0 | 空架子 | -| mod_zero | 实现在(_counter_op_ok:335) | 0 | 空架子——见「叙述脱节」:头注称用途「掘进蓄能」,该专长零在表 | -| gte_ref | 实现在(_counter_op_ok:335) | 0 | 空架子——头注称用途「深挖钻头配额」,该专长零在表 | -| lt_ref | 实现在(_counter_op_ok:335) | 0 | 同上 | - -其余 6 算子在役(eq/gte/lte/lt/mod_eq/advantageous——mod_eq 双管镐、advantageous 淬毒刃纹均核在表)。 +| 现状 | 词 | 说明 | +|---|---|---| +| 在役(1) | ap_charge_safe | treasure_items.tres:62 | +| 新旧词共存(3) | mine_reveal/reward_preview/ap_grant | 消费分发点在(reward_grant.gd:147/:151/:153);现役等价能力由新词形承载(雷区揭示→天眼、奖励预览→示警烟火类、行动点授予→新形) | +| 换代遗留(6) | mine_hit_halve(踩雷伤害减半)/reflect_damage(受击反弹伤害,对应 open_ticket channel="reflect" 行族)/ap_rounds_front(开局前几轮行动点加成)/cell_removal(爆破工兵包中立移除格——消费点在 reward_grant.gd:160-161)/reward_weight_bias(奖励摇号权重偏置)/bonus_refresh(换图刷新冒险加算区——消费面在 adventure_runner/battle_orchestrator/refresh_bank) | 旧内容已裁、通道位预留;「迁移完成」收尾是否执行=用户另行发令,本普查不动 | ### 6. channel 域 -数据面现值仅 `blast`(feats 2 行)。`open_ticket` `channel="reflect"` 反弹行族零表行。channel 值域未单点封闭(各消费分支自判值,无独立词表常量)——去留裁定时可一并裁是否收词表。 +数据面现值仅 `blast`(feats 2 行);`open_ticket` 反弹行族零行(预留)。channel 值域未单点封闭(各消费分支自判值)——是否收词表=日后的独立设计决定,本普查不动。 -## 三、叙述脱节点(注释把不存在的专长写成在役叙述——spike 案同款误导航源) +## 三、叙述脱节(唯一实质发现——注释把未入表的内容写成在役叙述) -| 位置 | 叙述 | 事实 | +订正方向:注释注明「预留、未设计入表」,不动任何代码逻辑与词表。执行通道与是否执行由用户发令。 + +| 位置 | 现行叙述 | 事实 | |---|---|---| -| effect_engine.gd OPS 头注 | mod_zero「掘进蓄能」、gte_ref/lt_ref「深挖钻头配额」 | 两专长 feats/treasure 零在表(grep 专名零命中) | -| effect_engine.gd EFFECT_KINDS 头注 | spike 独立 kind 在词表 | 实走 modify_ticket mode 通道(岗位错位) | +| effect_engine.gd OPS 头注 | mod_zero「掘进蓄能」、gte_ref/lt_ref「深挖钻头配额」 | 两专长 feats/treasure 零在表(专名 grep 零命中) | +| effect_engine.gd EFFECT_KINDS 头注 | spike 独立 kind 在词表 | 实走 modify_ticket mode="spike" 通道 | | reward_grant.gd:130 | 「counter_spend 订阅=掘进蓄能积点账本」 | 掘进蓄能零在表 | | action_economy.gd:82 | 「深挖钻头付费开掘(dig_paid counter_spend 订阅施加面)」 | 深挖钻头零在表 | | treasure_item_table.gd:20 | 「cell_removal = 爆破工兵包中立移除格」 | 爆破工兵包零在表 | -## 四、裁决点清单(逐组裁:删/补内容接线/留作预留) +## 四、义务出口 -| 组 | 内容 | 裁决选项 | -|---|---|---| -| A | 事件词 4:armor_roll(事件岗)/reward_roll/treasure_used/seal_settle | 删词+摘发射点,或补一件订阅专长 | -| B | 效果词空架子 6:add_ticket_rider/yield_mult/spawn_spell/apply_status/bias_rewards/counter_spend | 同上 | -| C | 效果词死词 3:bias_wallet/refresh_pick/preview | 删词(含 ACTIVE_KINDS 对应位) | -| D | spike 独立 kind | 删词面(mode 通道在役不动) | -| E | schema 旧词 9:死词 4 直删候选(mine_hit_halve/reflect_damage/ap_rounds_front/reward_weight_bias);空架子 5(mine_reveal/reward_preview/ap_grant/cell_removal/bonus_refresh)删或完成迁移 | 删词或接线;同批裁「迁移完成」口径 | -| F | 事实词 6/算子词 7:裸预留与空架子 | 删或留预留(预留需头注改述为「预留无承载件」) | -| G | 叙述脱节 5 处 | 随 A–F 同批订正注释 | - -## 五、与原实况登记 4 组的对应 - -原实况 4 组(cell_removal/mine_hit_halve/open_ticket reflect 行族/armor_roll 订阅)全部复核成立;普查扩面新增:事件词 3(reward_roll/treasure_used/seal_settle)、效果词 10、旧词层另 5、事实词 6、算子词 7、叙述脱节 5 处。 +本普查为待办清单该条的产出:内容层零孤儿、词面零清退项、零代码改动——该条不产生写卡需求;叙述订正 5 处是否执行由用户发令(执行时属注释修订,不改行为)。 From 515a50f896a8cd1bb3b92f19b054ffd77e888ce3 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Fri, 6 Nov 2026 00:38:09 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=8A=A5=E5=91=8A(=E6=95=88=E6=9E=9C?= =?UTF-8?q?=E9=80=9A=E9=81=93=E4=B8=8E=E4=BA=8B=E4=BB=B6=E8=AF=8D=E9=9B=B6?= =?UTF-8?q?=E7=8E=B0=E5=BD=B9=E6=99=AE=E6=9F=A5):=20=E6=8C=89=E8=AF=BB?= =?UTF-8?q?=E8=80=85=E5=8A=A8=E4=BD=9C=E9=87=8D=E7=BB=84=E2=80=94=E2=80=94?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E8=8A=82=3D=E9=9C=80=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=A3=81=E6=96=AD=E7=9A=842=E4=BB=B6=E4=BA=8B(=E5=8F=99?= =?UTF-8?q?=E8=BF=B0=E8=AE=A2=E6=AD=A35=E5=A4=84=E5=81=9A=E4=B8=8D?= =?UTF-8?q?=E5=81=9A/=E6=97=A7=E8=AF=8D=E8=BF=81=E7=A7=BB=E6=94=B6?= =?UTF-8?q?=E5=B0=BE=E5=81=9A=E4=B8=8D=E5=81=9A=E4=BD=95=E6=97=B6=E5=81=9A?= =?UTF-8?q?)=E3=80=81=E7=AC=AC=E4=BA=8C=E8=8A=82=3D=E6=97=A0=E9=9C=80?= =?UTF-8?q?=E5=A4=84=E7=90=86=E9=A1=B9=E8=AE=A1=E6=95=B0=E5=AD=98=E6=A1=A3?= =?UTF-8?q?(=E9=A2=84=E7=95=99=E8=AF=8D=E9=9D=A2=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E4=BF=9D=E7=95=99=E9=9B=B6=E8=A3=81=E5=86=B3=E7=82=B9)?= =?UTF-8?q?=E3=80=81=E7=AC=AC=E4=B8=89=E8=8A=82=3D=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=AD=98=E6=A1=A3=EF=BC=9B=E8=AF=8D=E8=A1=A8=E9=9D=A2=E5=8F=B0?= =?UTF-8?q?=E8=B4=A6=E4=BB=8E=E6=AD=A3=E6=96=87=E7=A7=BB=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../普查-效果通道与事件词零现役-2026-11-06.md | 92 +++++++------------ 1 file changed, 32 insertions(+), 60 deletions(-) diff --git a/reports/普查-效果通道与事件词零现役-2026-11-06.md b/reports/普查-效果通道与事件词零现役-2026-11-06.md index 43aaea90..72b524a2 100644 --- a/reports/普查-效果通道与事件词零现役-2026-11-06.md +++ b/reports/普查-效果通道与事件词零现役-2026-11-06.md @@ -1,73 +1,45 @@ # 普查:效果通道与事件词零现役(2026-11-06) > **接收方**:待办清单「效果通道与事件词的零现役普查」条——本报告是该条的产出合同。 -> **性质**:普查取证报告(只读扫描,零代码改动)。 -> **普查结论**:效果系统内容层(数据行)**零孤儿**——全部在役;四张词表+秘宝表 schema 旧词层全部属**预留埋点面**,词面全部保留、零清退项(架构原则=词表先行、内容后接:加一件已有效果类型的专长/秘宝只写 .tres 数据行零代码,effect_engine.gd 头注明文);唯一实质发现=**注释叙述脱节 5 处**(第三节,订正建议)。 -> **普查口径**:埋点层(引擎侧封闭词表、发射点、消费分支、查询实现——动态配置可达的预留触发点)与内容层(哪件秘宝/专长经数据行声明使用)两层分开判;本报告只登记两层现状,不做埋点层去留裁决。 +> **结论**:需要你处理的事只有 **2 件**(第一节);扫描面内其余全部属预留埋点,**全部保留、零处理项**(第二节只留计数供存档)。词表零改动、内容层零孤儿、零代码改动。 -## 一、普查范围与方法 +## 一、需要你裁断的两件事 -效果系统四词表封闭在 `effect_engine.gd` 常量:事件 `EVENTS`(21)/效果类型 `EFFECT_KINDS`(31)/事实 `FACTS`(18)/算子 `OPS`(13)。邻接面:秘宝表 schema 旧词层(`treasure_item_table.gd` `EFFECT_KINDS` 旧词段 10 词)与效果参数 `channel` 域。数据面使用域 = feats/treasure_items 两表 trigger 行 + 天赋树规则合成行(引擎内组装)+ 秘宝表 `effect_kinds`/主动件 `kind` 域。skills.tres(敌技)的 when/fact 走独立系统(消费端 unit_container),不入本普查面。数据面统计按行结构键(`"on"`/`"kind"`/`"fact"`/`"op"`/`"channel"`)提取自 `game/data/tables/*.tres` 全域,不数注释里的裸词面。 +### 1. 注释叙述订正 5 处——做不做 -## 二、埋点台账(词面全部保留;下表只登记各词现状) - -### 1. 事件词(21) - -| 现状 | 词 | 说明 | -|---|---|---| -| 订阅在役(17) | dig_reveal/dig_paid/seal_hit/mine_hit/attack_commit/clamp_check/kill/damage_taken/round_start/round_end/seal_settle 以外全表 | feats/treasure 数据行 1–11 行不等 | -| 预留(4) | armor_roll(事件岗)/reward_roll/treasure_used/seal_settle | 发射点全在役运行(damage_controller:296/battle_fx_host:130/reward_grant:133/grant_segment:250),等订阅内容接线。armor_roll 另有掷点流名岗在役(settlement.tres:59),事件岗与流名岗同词两用 | - -### 2. 效果类型词(effect_engine 词表 31) - -| 现状 | 词 | 说明 | -|---|---|---| -| 数据面在役(21) | counter_add/grant_ap/reveal_tiles/damage_reduce/grant_gp/grant_material/preview_area/remove_mines/ac_bonus/attack_bonus/shield/blast_scaled/heal/target_attack_bonus/bonus_delta/modify_ticket/open_ticket/forgive_seal_miss/grant_reserve_ap/apply_discount/mine_count_preview | feats 1–27 行不等;treasure 1–2 行 | -| 引擎内组装在役(1) | damage_mult | 天赋树规则合成行在用(effect_engine.gd:160) | -| 设计在册待接线(1) | spawn_spell | 锻造工坊.md:115 法杖路线「开局魔法矢」设计在册,等法杖实装接线 | -| 架构在役机制承载位(2) | bias_rewards/counter_spend | bias_rewards=偏运权重系统效果层承载(architecture.md「BattleFxHost」行:luck_bias_for 偏运合计查询口在役,零订阅时返回 0=原行集零扰动);counter_spend=受理闸模式(action_economy:115/reward_grant:135 两受理闸+交叉校验规则),为「积点足才受理」类效果预留 | -| 词表先行预留(7) | add_ticket_rider/yield_mult/apply_status/bias_wallet/refresh_pick/preview/spike(独立 kind 岗) | 消费分支或主动件分发位在(damage_controller:399/grant_segment:118、:429/battle_fx_host:131 等);spike 实走 modify_ticket 的 mode="spike" 通道(damage_controller:312、:371,在役),独立 kind 词面=同语义的预留位 | - -### 3. 事实词(FACTS 18) - -| 现状 | 词 | -|---|---| -| 数据面在役(12) | matchup/counter/new_resource_type/is_edge_cell/is_blank_zero/dug_under_seal/ap_exhausted_last/hp_ratio/amount/ap_left/pct/round_index | -| 预留(6) | is_first_dig_of_battle/terrain_kind(载荷特判支撑在:effect_engine.gd:322-331)/target_armor_class/seals_count/nest_count/battle_index | - -### 4. 算子词(OPS 13) - -| 现状 | 词 | -|---|---| -| 数据面在役(6) | eq/gte/lte/lt/mod_eq(双管镐)/advantageous(淬毒刃纹) | -| 预留(7) | neq/gt/ends_with/has/mod_zero/gte_ref/lt_ref(实现函数全在:_cmp_ok/_ends_with_ok:312/_has_ok:324/_counter_op_ok:335) | - -### 5. 秘宝表 schema 旧词层(10)——旧目录换代遗留的迁移尾巴 - -历史(git 查证):这批词曾服务旧秘宝目录数据行,经「秘宝六件迁移+令牌兑付收敛」批(a33ddaf5)与迭代 22 秘宝批(48b06961,旧目录 12 行删除、新目录 12 行落表:晨操令/阔视野带/试炼镐/刷新练习/储备罐/巢穴预告/线香/双管装填/远程镐/刷新执照/天眼/信标网络)两轮换代后,数据行全用新词形,词面按 schema 头注「旧词保留共存至迁移完成」留下。 - -| 现状 | 词 | 说明 | -|---|---|---| -| 在役(1) | ap_charge_safe | treasure_items.tres:62 | -| 新旧词共存(3) | mine_reveal/reward_preview/ap_grant | 消费分发点在(reward_grant.gd:147/:151/:153);现役等价能力由新词形承载(雷区揭示→天眼、奖励预览→示警烟火类、行动点授予→新形) | -| 换代遗留(6) | mine_hit_halve(踩雷伤害减半)/reflect_damage(受击反弹伤害,对应 open_ticket channel="reflect" 行族)/ap_rounds_front(开局前几轮行动点加成)/cell_removal(爆破工兵包中立移除格——消费点在 reward_grant.gd:160-161)/reward_weight_bias(奖励摇号权重偏置)/bonus_refresh(换图刷新冒险加算区——消费面在 adventure_runner/battle_orchestrator/refresh_bank) | 旧内容已裁、通道位预留;「迁移完成」收尾是否执行=用户另行发令,本普查不动 | - -### 6. channel 域 - -数据面现值仅 `blast`(feats 2 行);`open_ticket` 反弹行族零行(预留)。channel 值域未单点封闭(各消费分支自判值)——是否收词表=日后的独立设计决定,本普查不动。 - -## 三、叙述脱节(唯一实质发现——注释把未入表的内容写成在役叙述) - -订正方向:注释注明「预留、未设计入表」,不动任何代码逻辑与词表。执行通道与是否执行由用户发令。 +代码注释把三件**未设计入表**的专长(掘进蓄能/深挖钻头/爆破工兵包)写成了在役叙述,后来读代码或写卡的人会被误导(迭代 53 已发生过一次:spike 承接句按注释误判「零新代码」)。订正方式=把注释改成「预留、未设计入表」,不改任何逻辑。 | 位置 | 现行叙述 | 事实 | |---|---|---| -| effect_engine.gd OPS 头注 | mod_zero「掘进蓄能」、gte_ref/lt_ref「深挖钻头配额」 | 两专长 feats/treasure 零在表(专名 grep 零命中) | -| effect_engine.gd EFFECT_KINDS 头注 | spike 独立 kind 在词表 | 实走 modify_ticket mode="spike" 通道 | +| effect_engine.gd OPS 头注 | mod_zero「掘进蓄能」、gte_ref/lt_ref「深挖钻头配额」 | 两专长零在表 | +| effect_engine.gd EFFECT_KINDS 头注 | spike 独立 kind 在词表 | 实走 modify_ticket 的 mode 通道 | | reward_grant.gd:130 | 「counter_spend 订阅=掘进蓄能积点账本」 | 掘进蓄能零在表 | -| action_economy.gd:82 | 「深挖钻头付费开掘(dig_paid counter_spend 订阅施加面)」 | 深挖钻头零在表 | +| action_economy.gd:82 | 「深挖钻头付费开掘」 | 深挖钻头零在表 | | treasure_item_table.gd:20 | 「cell_removal = 爆破工兵包中立移除格」 | 爆破工兵包零在表 | -## 四、义务出口 +### 2. 秘宝表旧词「迁移完成」收尾——做不做、何时做 -本普查为待办清单该条的产出:内容层零孤儿、词面零清退项、零代码改动——该条不产生写卡需求;叙述订正 5 处是否执行由用户发令(执行时属注释修订,不改行为)。 +秘宝表 schema 词表里留着 9 个旧目录时代的词面(git 查证:迭代 22 秘宝批把旧目录 12 行全量换代成现役 12 件后,旧词面按 schema 自己注的「旧词保留共存至迁移完成」留下)。按关联效果列名: + +| 旧词承载的效果 | 类型 | +|---|---| +| 雷区揭示/奖励预览/行动点授予(3 个旧词形) | 新旧词共存——现役等价能力已由新词形承载 | +| 踩雷伤害减半/受击反弹伤害/开局前几轮行动点加成/爆破工兵包中立移除格/奖励摇号权重偏置/换图刷新加算区(6 个) | 旧内容已裁、通道位预留 | + +裁断点:这批「迁移完成」收尾要不要做、什么时候做。**词面现在不动**;收尾属于单独一批改动,做的时候再设计。 + +## 二、无需处理项汇总(零裁决点,计数存档) + +扫描面内以下词面全部判定**保留**(预留埋点——引擎架构=词表先行、内容后接,加一件已有效果类型的专长/秘宝只写数据行零代码): + +- **事件词预留 4**:armor_roll(事件岗)/reward_roll/treasure_used/seal_settle——发射点全在役运行,等订阅内容;armor_roll 另有掷点流名岗在役,同词两用。 +- **效果类型词预留 10**:spawn_spell(锻造工坊法杖设计在册待接线);bias_rewards/counter_spend(架构在役机制承载位——偏运合计查询口/受理闸模式);add_ticket_rider/yield_mult/apply_status/bias_wallet/refresh_pick/preview/spike 词面(预留位)。 +- **事实词预留 6**:is_first_dig_of_battle/terrain_kind(载荷特判支撑在)/target_armor_class/seals_count/nest_count/battle_index。 +- **算子词预留 7**:neq/gt/ends_with/has/mod_zero/gte_ref/lt_ref(实现函数全在)。 +- **channel 反弹行族**:open_ticket 反弹域零数据行(预留)。 + +其余全部事件词/效果词/事实词/算子词的数据面订阅行在役(feats/treasure 数据行+天赋树规则合成行),零孤儿。 + +## 三、普查方法(存档) + +四张词表封闭在 effect_engine.gd 常量:事件 21/效果类型 31/事实 18/算子 13;邻接面=秘宝表 schema 旧词层 10 词+channel 域。数据面使用按行结构键(`"on"`/`"kind"`/`"fact"`/`"op"`/`"channel"`)统计自 `game/data/tables/*.tres` 全域+天赋树规则合成行+秘宝表主动件域;注释裸词面不计。skills.tres(敌技)的 when/fact 走独立系统,不入本普查面。 From 111bf1bd1045e0bafb763ca5e29321bf159861bb Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Fri, 6 Nov 2026 00:48:30 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=B3=A8=E9=87=8A(=E5=8F=99=E8=BF=B0?= =?UTF-8?q?=E8=84=B1=E8=8A=82=E8=AE=A2=E6=AD=A3=C2=B7=E6=99=AE=E6=9F=A5?= =?UTF-8?q?=E6=89=B9=E6=89=A7=E8=A1=8C):=205=20=E5=A4=84=E6=8C=89=E3=80=8C?= =?UTF-8?q?=E9=A2=84=E7=95=99=E3=80=81=E6=9C=AA=E8=AE=BE=E8=AE=A1=E5=85=A5?= =?UTF-8?q?=E8=A1=A8=E3=80=8D=E5=8F=A3=E5=BE=84=E8=AE=A2=E6=AD=A3=E2=80=94?= =?UTF-8?q?=E2=80=94effect=5Fengine=20OPS=20=E5=A4=B4=E6=B3=A8=20mod=5Fzer?= =?UTF-8?q?o/gte=5Fref/lt=5Fref=20=E8=AE=BE=E6=83=B3=E7=94=A8=E9=80=94?= =?UTF-8?q?=E6=94=B9=E9=A2=84=E7=95=99=E6=B3=A8=E8=AE=B0=EF=BC=8BEFFECT=5F?= =?UTF-8?q?KINDS=20=E5=A4=B4=E6=B3=A8=E8=A1=A5=20spike=20=E7=8B=AC?= =?UTF-8?q?=E7=AB=8B=20kind=20=E5=B2=97=3D=E9=A2=84=E7=95=99=E5=AE=9E?= =?UTF-8?q?=E8=B5=B0=20modify=5Fticket=20mode=20=E9=80=9A=E9=81=93?= =?UTF-8?q?=E3=80=81reward=5Fgrant=20=5Fcharge=5Fgate=20=E5=A4=B4=E6=B3=A8?= =?UTF-8?q?=E6=8E=98=E8=BF=9B=E8=93=84=E8=83=BD=E5=8F=99=E8=BF=B0=E6=94=B9?= =?UTF-8?q?=E9=80=9A=E7=94=A8=E5=8F=97=E7=90=86=E9=97=B8+=E9=A2=84?= =?UTF-8?q?=E7=95=99=E6=B3=A8=E8=AE=B0=E3=80=81action=5Feconomy=20request?= =?UTF-8?q?=5Fdig=20=E5=A4=B4=E6=B3=A8=E6=B7=B1=E6=8C=96=E9=92=BB=E5=A4=B4?= =?UTF-8?q?=E5=8F=99=E8=BF=B0=E6=94=B9=E9=80=9A=E7=94=A8=E9=97=B8+?= =?UTF-8?q?=E9=A2=84=E7=95=99=E6=B3=A8=E8=AE=B0=E3=80=81treasure=5Fitem=5F?= =?UTF-8?q?table=20cell=5Fremoval=20=E7=88=86=E7=A0=B4=E5=B7=A5=E5=85=B5?= =?UTF-8?q?=E5=8C=85=E5=8F=99=E8=BF=B0=E6=94=B9=E9=A2=84=E7=95=99=E6=B3=A8?= =?UTF-8?q?=E8=AE=B0=EF=BC=9B=E9=9B=B6=E9=80=BB=E8=BE=91=E9=9B=B6=E8=AF=8D?= =?UTF-8?q?=E8=A1=A8=E6=94=B9=E5=8A=A8=E3=80=82=E5=BE=85=E5=8A=9E=E6=B8=85?= =?UTF-8?q?=E5=8D=95=E6=99=AE=E6=9F=A5=E6=9D=A1=E6=8E=A8=E8=BF=9B=EF=BC=9A?= =?UTF-8?q?=E6=99=AE=E6=9F=A5=E7=BB=93=E8=BD=AC=EF=BC=88=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E5=87=AD=E6=8D=AE+=E8=AE=A2=E6=AD=A3=E5=B7=B2=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=EF=BC=89=EF=BC=8C=E9=81=97=E7=95=99=E6=97=A7=E8=AF=8D?= =?UTF-8?q?=E6=94=B6=E5=B0=BE=E5=BE=85=E8=A3=81=EF=BC=8C=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=BE=85=E5=86=99=E5=8D=A1=E2=86=92=E5=BE=85=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E3=80=82=E9=AA=8C=E8=AF=81=EF=BC=9A=E5=86=92=E7=83=9F=2015=20?= =?UTF-8?q?=E9=A1=B9=200=20=E5=A4=B1=E8=B4=A5=E4=B8=89=E9=97=B8=E5=85=A8?= =?UTF-8?q?=E8=BF=87=EF=BC=88worktree=20=E5=86=B7=E6=A3=80=E7=BC=BA=20.imp?= =?UTF-8?q?ort=20=E5=81=87=E7=BA=A2=E5=B7=B2=E7=BB=8F=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=B8=85=E5=81=BF=E2=80=94=E2=80=94=E5=9C=A8=E5=86=8C=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E5=9D=91=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/core/action_economy.gd | 4 ++-- game/core/effect_engine.gd | 7 ++++--- game/core/reward_grant.gd | 2 +- game/data/schemas/treasure_item_table.gd | 2 +- 待办清单.md | 6 ++++-- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/game/core/action_economy.gd b/game/core/action_economy.gd index 679302ef..b65ba993 100644 --- a/game/core/action_economy.gd +++ b/game/core/action_economy.gd @@ -79,9 +79,9 @@ func try_spend(action_kind: String) -> bool: # 排雷玩法 挖掘专用:chain_size = 连锁附加格数(不含首格);clears_map = 本次动作后全图安全格开完。 -# 深挖钻头付费开掘(dig_paid counter_spend 订阅施加面):按序消耗族——AP 富余(≥基础+对价)时本动作付全价并积本轮付费计数(效果引擎 +# 付费开掘通用闸(dig_paid counter_spend 订阅施加面):按序消耗族——AP 富余(≥基础+对价)时本动作付全价并积本轮付费计数(效果引擎 # 计数器=授予段追加产出配额取数面);AP 不足全价时 fallback 降级只付基础 1 照常开格、不积计数 -# ——持有钻头永不锁死普通挖格(散件保底 B-2)。 +# ——持有件永不锁死普通挖格(散件保底 B-2)。设想承载件「深挖钻头」未设计入表,通道位预留。 func request_dig(chain_size: int, clears_map: bool) -> bool: if _phase != Phase.ACTIVE: _reject("phase") diff --git a/game/core/effect_engine.gd b/game/core/effect_engine.gd index 33d3a725..a9831108 100644 --- a/game/core/effect_engine.gd +++ b/game/core/effect_engine.gd @@ -24,7 +24,8 @@ const MINE_EVENTS := ["dig_reveal", "dig_paid", "seal_hit", "mine_hit", "seal_se ## 效果类型词汇(解释器 switch 闭集——词表实数以 EFFECT_KINDS 常量为准,含共享行拆型: ## grant_gp/bias_wallet、counter_add/counter_spend、reveal_tiles/remove_mines/refresh_pick、 -## bias_rewards/preview。需求卡片标题计 23 系笔误,落码按行内容全收——commit 留痕) +## bias_rewards/preview。spike 独立 kind 岗=预留——实际语义走 modify_ticket mode="spike" 通道(在役)。 +## 需求卡片标题计 23 系笔误,落码按行内容全收——commit 留痕) const EFFECT_KINDS := ["add_ticket_rider", "modify_ticket", "damage_mult", "open_ticket", "attack_bonus", "yield_mult", "spawn_spell", "grant_material", "grant_ap", "grant_gp", "bias_wallet", "shield", "spike", "apply_status", "counter_add", @@ -61,8 +62,8 @@ const FACTS := ["matchup", "is_first_dig_of_battle", "terrain_kind", "target_arm "ap_exhausted_last", "hp_ratio", "amount", "ap_left", "pct", "battle_index"] # 关卡域战斗序(1 基,enc 携带;开局姿态组「每关首轮窗」条件面) -## when 算子词汇(封闭——fact 查询面落法:mod_zero=计数器取模判满〔掘进蓄能〕、 -## advantageous=克制矩阵正面判定〔淬毒刃纹〕、gte_ref/lt_ref=与另一计数器比较〔深挖钻头配额〕、 +## when 算子词汇(封闭——fact 查询面落法:mod_zero=计数器取模判满〔预留——设想用途「掘进蓄能」未设计入表〕、 +## advantageous=克制矩阵正面判定〔淬毒刃纹〕、gte_ref/lt_ref=与另一计数器比较〔预留——设想用途「深挖钻头」未设计入表〕、 ## ends_with=后缀匹配〔对某甲族的泛条件〕、mod_eq=取模余数判定〔双管镐每第 2 次——value=模数 ## ref=余数;dispatch 预评估口径〔when 于命中前读计数器现值〕下「每第 N 次」系用 ref=N-1 表达〕。 ## 均系映射表现状条件装进 fact 的查询面落法,白名单覆盖) diff --git a/game/core/reward_grant.gd b/game/core/reward_grant.gd index db957961..7d84273a 100644 --- a/game/core/reward_grant.gd +++ b/game/core/reward_grant.gd @@ -127,7 +127,7 @@ func use_treasure(handle: int, target: Vector2i) -> Dictionary: return {"ok": true, "item_id": v.item_id, "resolved": v.resolved, "record": rec} -# 受理闸(treasure_used 发射+施加:counter_spend 订阅=掘进蓄能积点账本,积点不足拒绝零消耗。 +# 受理闸(treasure_used 发射+施加:counter_spend 订阅=消耗型受理闸,积点不足拒绝零消耗;设想承载件「掘进蓄能」未设计入表,通道位预留。 # 零 item_id 特判;拒绝文案读装配集积点进度——宿主 attune 读投影) func _charge_gate(v: Dictionary, target: Vector2i) -> Dictionary: var tu_hits := fx_host.fx_emit("treasure_used", {"item_id": String(v.item_id), "target": target}) diff --git a/game/data/schemas/treasure_item_table.gd b/game/data/schemas/treasure_item_table.gd index ceaeccf0..362c5609 100644 --- a/game/data/schemas/treasure_item_table.gd +++ b/game/data/schemas/treasure_item_table.gd @@ -17,7 +17,7 @@ const UNLOCK_COUNTER_KEYS := ["adventure_cleared", "boss_kill_count", "vision_us const DIMENSIONS := ["info", "risk", "action", "plan", "counter"] # enum 九 kind 全部条件触发/机制修正类;mine_reveal/ap_grant 语义不变。 -# cell_removal = 爆破工兵包中立移除格;mine_hit_halve 系固定 +# cell_removal = 中立移除格通道(预留——设想承载件「爆破工兵包」未设计入表);mine_hit_halve 系固定 # 「减半」语义不消费 magnitude(反弹 N 由 reflect_damage 行 magnitude 承载)。 # 主动件 kind 词族(reveal_tiles/preview/grant_ap/remove_mines/ # refresh_pick——效果引擎 ACTIVE_KINDS 同名闭集);被动件不走 effect_kinds 词族 diff --git a/待办清单.md b/待办清单.md index 73af9f33..97207e4c 100644 --- a/待办清单.md +++ b/待办清单.md @@ -244,11 +244,13 @@ #### 效果通道与事件词的零现役普查(2026-11-05 登记,来源=审计发现) -**实况**:证据=四条 grep 读数:`cell_removal` 通道在册(`game/data/schemas/treasure_item_table.gd:26`;消费点 `game/core/reward_grant.gd:160-161`)而 `game/data/` 全域零数据行;`mine_hit_halve` 同形态(仅 schema 词表与注记在位);`open_ticket` 的 `channel="reflect"` 行族零表行(21 张 `.tres` 逐张 grep);`armor_roll` 在 `game/core/effect_engine.gd:13` 事件词表在册、发射点 `game/core/damage_controller.gd:296`,而 `game/data/tables/feats.tres` 零订阅行。形态与架构审查甲案已清的 overflow/attack_segments 死通道同族(判据出处=`design/engineering/code-conventions.md:15`、`design/engineering/test-conventions.md:116`)。本批(需求卡片-改写族孤儿机制与退役名清退批)只清其文案与归因串,通道与事件词本体去留待普查批整体裁。 +**实况**:普查报告 reports/普查-效果通道与事件词零现役-2026-11-06.md——结论=内容层零孤儿、四词表+秘宝表 schema 旧词层全部属预留埋点(词面全保留零清退项;架构原则=词表先行内容后接)。叙述脱节 5 处已按「预留、未设计入表」口径订正(2026-11-06 用户令直改,冒烟 15 项 0 失败三闸全过)。 + +**缺口**:唯一遗留待裁=秘宝表 schema 旧词面 9 个「迁移完成」收尾(做不做、何时做)。 **改动面**:游戏代码 -**状态**:待写卡 +**状态**:待执行 #### 测试面真输入化分期与存量断言逐条精锚(2026-11-05 登记,来源=批次移交)