# 一字成兵工程与配置表实施方案

2026年10月27日　开发交接 v2.0／总规划 v6.0 对应实施版

沿用 OH 工程的配置生产与读取框架，在新项目仓库建立独立业务表。基础框架迁移、玩法逻辑开发和策划配数分别验收；不将现有网页原型中的 JavaScript 常量作为正式配置源。

本方案已核对 OH develop 提交 304b8ce7e2fa6ee19dc708a22491abd830d87abe（2026-10-22 17:15:23 +0800）的代码、源表及已提交导出件，并对照公司《配置表框架规范_沿用OH_20260823》。下文 YZ 前缀表名、字段及新增条件处理器均是新项目建议结构，尚未生成正式源表或接入运行。用户已确认20261027数值方案；本页更新对应字段与运算契约。OH导表、双端接入与用户实玩验收仍需分别完成。

## 01 对原开发需求的修正

| 原文不足 | 本次修正 | 对开发的影响 |
|---|---|---|
| 只要求提供表格导入 | 明确复用五行表头、ExcelOutput、双格式输出与配置读取层 | 不另造 CSV 导入器或让策划维护 JSON |
| 全局规则混放经济、时钟、战斗 | 分为账户 Global、战斗定义、模式定义、关卡难度、奖励与广告 | 同一数值有唯一主责表，避免逐关覆盖全局出兵 |
| 字、开口、随机、费用混成一张 | 字定义、开口形状、供牌池、定向牌序和价格分开引用 | 12字×8形状无需手填96张牌，改概率不改属性 |
| 单位只有一张组合总表 | 区分单位底板、武器、字层、形态、武将技能、成长及敌军构筑 | 不枚举“刀×3盾×2”的所有派生兵种 |
| 敌军属性可写层数或显式值但缺模式 | 明确构筑型与显式教学型互斥，拒绝重复乘层数 | 避免敌军数值悄悄翻倍或弱化 |
| 登录、广告等看上去全部重做 | 优先迁移现有基础模块；业务条件、渠道账号与奖账重新适配 | 表里写功能名不能自动产生新功能 |
| 只提导出版本未规定全过程 | 补上源表检查、导出、双产物对账、读表、回归及发布快照 | 导出成功不等于代码已读取或正式生效 |
| 引擎完全开放选型 | 默认先以现有 OH Unity 工程裁剪迁移做样例验证 | 若改技术栈，仍沿用表契约，并单独估算运行框架移植 |

## 02 已核对的 OH 工程分层

| 层次 | OH 当前证据 | 一字成兵处理 |
|---|---|---|
| 启动与资源 | Runtime/Boot、MiniGameResSys、资源版本与文件清单 | 优先复用加载、版本、失败恢复；替换项目资源地址与发布流水线 |
| 渠道接入 | CopySrc 内有 ZMY_Mini_WX、ZMY_Mini_DY；启动层有 SDK 接口 | 复用适配模式，检查新 AppID、登录与视频回调；不能复制凭证或声称已验收 |
| 通用运行框架 | Core 的页面、UI、资源池、事件、定时器；ViewModels 与 VMProperty | 复用页面生命周期、UI绑定、池和事件；战斗时钟另设可暂停模拟时间 |
| 配置访问 | MgrFacade.Cfg → CfgMgrProxy → CfgMgr → CfgLoader／文本资源 | 保持表名＋ID＋字段读取，项目扩展层输出有单位的类型化参数 |
| 功能与背包 | FunctionMgr、ConditionUtils、BagVM、AdVM 等业务模块 | 复用结构与交互，剥离 OH 专有活动、复活、背包道具逻辑 |
| 玩法实现 | Business/HoleGame 的黑洞、物件、场景和关卡实现 | 不当作造兵战斗直接复用；新做棋盘、线路、双武器、技能与模式流程 |
| 服务端配置 | Lua ConfigMgr、ConfigLoader、VariantConfigLoader | 保留权威账本边界；如果沿用服务器，接新业务；若更换后端，适配同一产物 |

配置访问不是自动生成全套业务代码。客户端以整表缓存并按字段读取，代理会处理实验后缀；新表需要登记／检查加载分类，新增字段需要玩法模块明确消费。纯客户端表必须进入客户端映射，不能因漏登记被默认当作 normal 表。

现有 ConditionUtils 此处核对到的直接注册是关卡解锁／通关／创角天数等条件。累计胜场、历史最高积分、武将拥有等新条件，必须补对应处理器和数据源；不能在 Condition 表写一个新字符串就算实现。其他旧条件如有 Lua 分支亦须逐一核实。

服务端读取器能识别带头数组与旧字典两种格式，不能把“diff_Config 一定是服务端专用”写成硬规定。新项目发布清单要指定服务端实际消费哪种产物，并保证与客户端来自同次导出。

## 03 基础功能与基础表

下列是复用骨架并按新项目填数据，不是把 OH 全部工作簿原样搬过来。

| 工作簿与工作表 | 配置内容 | 需要程序补齐或适配 |
|---|---|---|
| Global.xlsm／Global | 初始金币0、将签0、体力30，恢复上限30、每点300真实秒，日界04:00 | 单行账户参数；不要复制 OH 当前600秒／25等旧业务值 |
| Item.xlsm／Item | 金币、体力、将签、四将专属碎片的ID、名字、图标与上限 | 资产账本与展示；建造点是局内状态，不接局外背包加奖 |
| OpenFunction.xlsm／OpenFunction、PopWindow | 20261027当前配置见字段字典与总规划v6.0 | 不继续使用历史基数、训练与奖励公式 |
| Trigger.xlsm／Condition、Trigger | 胜场、最高积分、首次招募等条件与解锁事件 | 新条件／事件处理器注册，未知函数导出前报错 |
| Guide.xlsm／Guide | 前4场引导步骤、目标、暂停与遮罩 | 指向新UI路径；第5场起无最优路线强提示 |
| GamePopQueue.xlsm／PopQueueType、PopTask | 首登、回城、解锁、奖励的队列与优先级 | 新弹窗任务类；不把程序类名当策划可任意发明的字段 |
| Ads.xlsm／Ads、AdsDefine | 广告位置、开关、每日限制、播放类型 | 复用展示与SDK流程；奖账、局内牌许可和45秒前台时钟另适配 |
| EventTracking.xlsm／TrackingSource、TrackingButton | 登录、开局、改线、供牌、广告、结算等事件来源 | 补新业务事件；避免沿用 OH 的关卡失败编号口径 |
| config/client 下音频与展示表 | AudioConfig、AudioSetting、CurrencyDisplay等 | 表名登记客户端分类；替换音频和图标引用 |
| config/string 下业务文案与 String 总表 | StringConfig_YZBattle／YZHome／YZGrow 等新业务页 | 沿用 Lang 收集与 FinalString；不在UI脚本中复制长文案 |
| Schedule.xlsm／ScheduleConfig | 以后有定时活动时使用 | 本期塔是常驻模式，日界不要求伪造一个活动日历 |
| Activity、Shop、Charge、Task 等 | 本期不新增对应业务时不迁入其整套内容 | 不因旧工程有充值、签到、公会、任务就扩大首发范围 |

功能开关、解锁条件、弹窗展示分层。体力恢复上限与 Item 的持有上限是两件事，不能混用。Ads 的日次数与构筑许可也分层：卡牌视频成功不是向背包发一张免费牌。

## 04 目录与日常配表流程

策划源表放在新项目 config/normal/main；客户端表现表在 config/client；文案走 config/string。导出保留 Config 与 diff_Config 两份产物，文件名以工作表名为准。新建玩法工作簿统一 YZ 前缀以隔离 OH 原有表名。

| 步骤 | 执行人 | 完成条件 |
|---|---|---|
| 1 拉取并核对 | 程序／策划 | 项目分支、源表与导表工具版本确定；不覆盖别人未提交内容 |
| 2 改源表 | 策划 | 只改批准字段，说明写单位、范围、引用、默认值；结构改动与程序共同确认 |
| 3 Excel重算保存 | 策划 | 公式结果不是空缓存；费用取整与预期一致；重复ID、悬空引用先检查 |
| 4 运行导表 | 程序搭好入口后由策划执行 | 使用固定版本 ExcelOutput；正常配置输出 -v 4 和 -v 7；产物目录互不覆盖 |
| 5 处理文案 | 策划／本地化 | Lang变更先收集；FinalString专用流程按当前脚本 -r 4，不能套普通表行号 |
| 6 比对产物 | 自动校验＋程序 | 两份产物逐记录语义相同，改动字段确实输出，非预期表无变化 |
| 7 客户端与服务端读回 | 程序 | 两端读相同配置版本，引用解析成功，错误不静默用0 |
| 8 场景与公式回归 | 程序＋策划 | 单位计算、波次、价格、广告、成长、结算用例通过；再真机试玩 |
| 9 提交和发布 | 程序 | 源表、双产物、必要代码／资源、工具版本与变更说明成套提交；对局锁配置版本 |

本次没有运行 Windows/.NET 导表器，也未构建 OH 或新小游戏；已检查的是仓库现有源表、导出件及读表代码。首个开发里程碑必须在程序电脑用真实工具完成最小新表导出回归。

当前导表 README 明确两种输出使用 -v 4 与 -v 7（兼容别名 -v 1），手动指定路径要分开导出。仓库 ExportAllNormalConfig.bat 仍出现 -p \\client\\ExtAssets\\Lua\\ -a 的旧路径形式；不应直接复制进新项目就当可用。程序需用一张样表确认表内宏／批处理实际目标，再交付新项目固定入口。

导出器是 .NET Framework 4.6.1 成品，不能承诺在 Mac 原样双击运行；策划在 Mac 编辑可保留流程，但正式导出安排到已验证的 Windows 环境／构建任务。不要为绕过环境临时写一个不兼容的导出器。

## 05 表头和字段约定

| Excel行 | 新表填写规则 | 例子 |
|---|---|---|
| 1 | 英文字段；普通字段前两行纵向合并，结构体写组名横向合并 | id、hp_base_fp；结构体 reward |
| 2 | 结构体子字段；普通字段合并后无额外子字段 | item_id、item_count |
| 3 | Normal、Array、Lang、Table或规定组合 | 数组用Array；结构体子字段Normal;Normal |
| 4 | int或string | 小数不用自造float类型 |
| 5 | 中文含义、单位、范围、引用与0含义 | “模拟毫秒；>0；9000=9秒；非按关覆盖” |
| 6起 | 普通业务数据 | id不能为空；嵌套续行例外 |

说明页用 __ 前缀。备注列第1和第3行留空；不能仅起名“备注不导出”。数组单元格以 ; 分隔。Table 表示同一ID多行聚合，不是外键类型；跨表ID通常为 Normal/int或Array/int，在第5行注明引用并由校验器检查。

两种分隔符不可混淆：结构体模式 Outer;Inner 用分号；Table,Array 是嵌套数组模式用逗号；数组值仍用分号。普通行ID为空忽略，但嵌套表空ID续行不能被通用脚本丢弃。

实验使用基础字段加 _编号字母 后缀；平台微信／抖音不是实验分组。新版工具仅识别第一行、最后一段“数字＋小写字母”且基础字段存在的变体：整字段空继承、显式0保留、部分填写不逐单元格继承。客户端代理与服务端按玩家分组选择；实验归组、覆盖优先顺序与快照必须两端一致。首发不需要为了演示而占用任何 OH 实验编号。

| 数值类别 | 建议存法 | 示例与读取 |
|---|---|---|
| 时长 | int毫秒，字段写明模拟／真实 | spawn_ms=9000；route_step_ms=850；energy_recover_sec=300沿用Global秒单位 |
| 比例与概率 | int万分比 _bp | 字层增量=2000；固定减伤=3300；对兵／对城=10000；读取÷10000 |
| 属性与逻辑距离 | int定点 _fp，统一1单位=10000 | 生命42→420000；刀16→160000；逻辑速度55→550000；无物理米含义 |
| 货币、层数、次数、ID | int整数 | 建造25、刀3层、5阶、初始点125；不套万分比 |
| 概率池 | int相对权重 | 同一抽样阶段内先筛资格再归一化；别把跨池权重一起加 |
| 展示和备注 | string／Lang | 名字与提示走Lang；程序资源地址为普通string |

定点是交换格式建议，不代表每步战斗都取整。读入转换一次，战斗内部精度和计算顺序保持现有规则；伤害仅展示时取整，费用按指定floor／round取整。训练直接读取1—163级逐行实际值，不叠乘旧指数成长。新增固定精度实现如与原型有误差，必须出差异测试后再批准。

属性定点字段使用十进制整数字符串以避免32位溢出，客户端／服务端读取层转为宽数值；当前字典的string是交换契约，正式OH导表和双端读回仍需实现验证。不是把全局换成32位int。

## 06 玩法表总目录

当前36张逻辑表、303字段，职责与引用如下；详细字段、单位和校验见配置字典。新增业务处理器必须在代码注册。

| 表 | 工作簿 | 职责与说明 |
|---|---|---|
| YZBattleDefine | YZBattle.xlsm | 规则20261027：对兵／对城10000；基础间隔1500ms，最小500ms，最慢比例2；生产9000ms，运输850ms。 |
| YZMode | YZBattle.xlsm | 教学／AI／塔／试用；共享出兵，限时与结算区别由模式配置 |
| YZCardShape | YZCard.xlsm | 8形状；方向上1右2下4左8；合法mask=3,6,9,12,7,11,13,14 |
| YZLetter | YZCard.xlsm | 12单字；姓名散字不加属性；成首将扣身份2层后其余姓名每层500万分点加生命近远攻；骑每层移动1800，攻速因子0.8+0.2H。 |
| YZCardEconomy | YZCard.xlsm | 当前12000、10、2、30、5、6000、30、5、5；涨价计数属于运行时 |
| YZCardPool | YZCard.xlsm | 抽牌类型／字类别／具体字／开口分阶段；原94%字牌、字中68%基础；三口概率模式不同 |
| YZCardScript | YZCard.xlsm | 教学与试用专用；固定顺序仍从规则扣费用 |
| YZUnitBase | YZUnit.xlsm | 基础属性来自训练表；裸兵生命为盾训练×0.64，徒手为刀训练×0.4；不保留旧42／8常数。 |
| YZWeapon | YZUnit.xlsm | 刀／弓训练初值15／9，射程50／220；攻击用训练表，不叠旧16／14；无弓不远攻，最低武器资格例外。 |
| YZCombo | YZUnit.xlsm | 刀盾C1、额外近攻+.50、33%固定减伤；骑射C1.5、攻频1、射程320。 |
| YZHero | YZHero.xlsm | 四将系数与技能见v6.0；张飞生命为加法+0.80；首次身份消耗姓名各1层，额外将字才加属性。 |
| YZSkill | YZHero.xlsm | 显式实现4将和精英有限技能，不开发通用脚本语言；技能副目标独立结伤 |
| YZLevel | YZLevel.xlsm | 前20保留地图／路线／地形教学；1—4用原教学敌军构筑与波次，5场起用预算AI；全部普通属性／双方城血／奖励读新表，16场不固定姓名供牌。 |
| YZDifficulty | YZLevel.xlsm | 塔和试用独立的城血、资源、波次预算；普通对战改用YZNumericDifficulty。 |
| YZBoard | YZLevel.xlsm | 6×6；0—2石头；坐标0起；不预铺路线 |
| YZBoardObstacle | YZLevel.xlsm | 不占营地；按种子生成并校验可玩性；营地和格坐标不是美术像素 |
| YZEnemyPreset | YZEnemy.xlsm | 构筑模式调用同一属性计算器；字层与主形态显示规则同我方 |
| YZEnemyExplicit | YZEnemy.xlsm | 仅塔精英／独立试用明确面板；普通新手不再沿历史显式面板。显式面板不重乘字层，命中目标倍率1。 |
| YZEnemyWave | YZEnemy.xlsm | 用于获批的前1—4教学、塔和独立试用；普通第5场起用YZAIProfile，9秒整周期按时间段预算连续生成。 |
| YZMatch | YZMatch.xlsm | 展示分数不放大敌属性；有效胜场决定内部难度，失败不退；调试独立，不推进正式记录。 |
| YZNamePool | YZMatch.xlsm | 模拟对手昵称池；匹配引用pool_id；不伪造真人在线状态 |
| YZRank | YZMatch.xlsm | 初始50小段；末端无双使用公式编号；首次奖励和最高分由服务器维护 |
| YZTraining | YZGrowth.xlsm | 四项独立1—163级；逐级属性读取实际表值，不使用统一1.05或骑伤害成长。 |
| YZTrainingLevel | YZGrowth.xlsm | J行价为J→J+1；四项费用加总，不用原K覆盖；保留十级回落。 |
| YZHeroStar | YZGrowth.xlsm | 1—5星，1／1.05／1.10／1.15／1.20；10／20／40／80费用；片种由武将引用 |
| YZRecruitDefine | YZRecruit.xlsm | 1签、10抽保底、重复10片；免费赵云不进普通保底计数 |
| YZRecruitPool | YZRecruit.xlsm | 普通赵云85%组、稀有15%组；组内资格过滤；满材料移池；全满停抽 |
| YZReward | YZReward.xlsm | 普通按本局冻结难度计奖；放弃／未完成／无造兵／前4免费败0；失败180秒满额；塔不混用。 |
| YZAdRule | YZReward.xlsm | 引用Ads；新增系列／三口许可、资源补给和结算加奖分别走业务处理器 |
| YZTowerDefine | YZTower.xlsm | 当前150、600、60、50、30、10600、10300、3、5；保留全局生产与移动 |
| YZTowerFloor | YZTower.xlsm | 前30层固定；31后按定义计算；不重新随机破坏已铺地图 |
| YZElite | YZTower.xlsm | 甲卫、冲车、旗手替换该层首人，不额外叠一队 |
| YZTactic | YZTower.xlsm | 8战术；数值类型互斥；下一层生效，旧战术先算清层奖 |
| YZView | YZView.xlsm | 兵种、武将、卡、塔精英复用；美术仅改表现，不覆盖攻击距离或命中时刻 |
| YZNumericDifficulty | YZNumeric.xlsm | 普通163档；敌城Q(C)×F，我城Q(玩家盾训练)×F；163后复用末档。 |
| YZAIProfile | YZNumeric.xlsm | 84段原表；0/10/20/30/50/80/120边界，左闭右开；首波9秒，每波多兵同时出；三个余数流独立且跨段保留。未引用组不启用。 |

## 07 单位属性如何配置与计算

训练、星级、配置、随机种子与参考攻速在开局冻结。账号持久数据由服务器管理；运行状态保留真实字层、首个组合与主将、当前生命及技能计数；所有派生属性走同一入口。

### 2.1 基础属性与字层

K、B、S、H为兵身真实刀、弓、盾、骑层数。L(n)=0.4+0.6×min(n,1)+0.2×max(n−1,0)，0／1／2层分别0.4／1／1.2。主将星级倍率Z依次为1／1.05／1.10／1.15／1.20；未成将Z=1。G为额外将字比例。

| 属性 | 已确认公式 |
|---|---|
| 近攻 | 刀训练值×身份攻击系数C×[L(有效刀层)+近攻额外加成]×(1+G)×Z |
| 远攻 | 有有效弓时：弓训练值×C×[L(有效弓层)+远攻额外加成]×(1+G)×Z；没有有效弓时为0 |
| 生命 | 盾训练值×[(0.8+0.2S)²+身份生命额外加成]×(1+G)×Z |
| 有效攻速指数 | 骑训练值×(0.8+0.2H)×身份攻频倍率；是指数，不是每秒攻击次数 |
| 每武器攻击间隔 | max(0.5,1.5×min(本局参考骑训练值÷有效攻速指数,2)) 模拟秒；近远各自计时 |
| 本局参考攻速 | 普通对战按内部难度C列对应的骑训练值，开局冻结，敌我共用；塔／试用依自身冻结参考值 |
| 将字G | 未成将时为0；首个主将消耗名字各1层作身份，其余所有姓名层每层+5%生命／近攻／远攻，不加攻速 |
| 全局目标倍率 | 对兵1.0、对城1.0；普攻与技能追加每目标结算一次 |
| 战场移速与运输 | 移速55×0.85×(1+0.18H)；棋盘每格0.85模拟秒，骑训练不改变运输／产兵 |

黄忠有效弓=max(真实弓,1)，关羽有效刀=max(真实刀,1)，只提供武器资格，不赠真实层或基础组合。兵种额外攻击在首次成型即生效，不放入多层分支。不叠旧训练倍率或骑训练伤害；盾训练影响有盾与无盾生命。

正攻击命中伤害=max(0.1,面板攻击×技能倍率×目标倍率×攻击增益×目标类别战术增益×剩余承伤比)。保留精度，统计不计过量伤害；直接减伤仍按既有上限85%。刀盾固定减伤在受击时计算，不是随机免疫。

### 2.2 组合与武将

| 身份 | 攻击C | 攻频倍率 | 生命额外加成 | 其他能力 |
|---|---:|---:|---:|---|
| 普通 | 1 | 1 | 0 | 按字层计算 |
| 刀盾 | 1 | 1 | 0 | 近攻额外+0.50，固定减伤33%，远攻额外0 |
| 骑射 | 1.5 | 1 | 0 | 射程320；不再额外翻倍攻频 |
| 赵云 | 1.8 | 2 | 0 | 持续单体快攻 |
| 黄忠 | 1.65 | 1.65 | 0 | 射程350，贯穿最多1额外目标，原击40% |
| 张飞 | 1.8 | 1.35 | +0.80 | 每第4次有效近攻短控0.4秒，Boss0.2秒 |
| 关羽 | 1.8 | 1 | 0 | 每第3次有效近攻横扫最多3额外兵，各原击150% |

首个完整名字锁定主将。成将替换基础组合攻击系数、额外攻击与攻频；仅继承首先成型的刀盾33%减伤或骑射射程，不复乘。先成将再补组合不追授能力。张飞生命额外+0.80加在平方项外、乘将字及星级前。

四武将技能、射程、计数、目标选择、抗眩晕与城池例外保持现行规则：黄忠副目标须在主目标后80、箭线左右20且总射程350内；关羽主目标80范围内按近者优先；副伤不递归、不伤城。张飞控制结束后4秒共享抗性；空挥、攻城、追加伤害不计有效近战次数。敌将为1星，仅保留已配置敌方技能权限，不能自动获得玩家追加技能。

### 2.3 计算样例

1级训练、一层对应武器／盾、无身份特性／将字／星级／减伤时，生命45、近攻15、远攻9，标准对标为3刀或5箭。无盾时生命45×0.8²=28.8，不回退旧裸兵常数。

一层刀盾近攻=15×(1+0.5)=22.5，生命45，固定减伤33%。一层弓骑远攻=9×1.5=13.5，攻频倍率1。

赵3云2共5层姓名：2层用于赵云身份，余3将，G=15%；1星、一层刀盾后成赵云近攻=15×1.8×1.15=31.05，生命45×1.15=51.75，保留33%减伤，不保留刀盾+0.50攻击。无骑、参考骑6时赵云有效攻速9.6、间隔0.9375秒。

1星一盾张飞生命=45×(1+0.8)=81；无盾张飞=45×(0.64+0.8)=64.8。5星只在最后乘一次1.20。

普通对战全部使用C列训练及新属性，不叠旧底板或成长。1—4场保留原教学敌军构筑与波次；5场起使用E列AI预算。前四场E列只留来源，双方城血和奖励仍取新表。

## 08 最小五行表头样例

以下为YZUnitBase节选；普通字段前两行合并。正式xlsm尚待真实导表验证。

| Excel行 | id | training_hp_id | unarmed_layer_bp | move_speed_fp | armor_fp |
|---|---|---|---|---|---|
| 1 字段 | id | training_hp_id | unarmed_layer_bp | move_speed_fp | armor_fp |
| 2 子字段 | 合并至上行 | 合并至上行 | 合并至上行 | 合并至上行 | 合并至上行 |
| 3 模式 | Normal | Normal | Normal | Normal | Normal |
| 4 类型 | int | int | int | string | string |
| 5 说明 | 身份ID | 对应盾训练ID | 无刀层系数万分比 | 万分之一逻辑距离/模拟秒；十进制整数字符串 | 万分之一护甲；普通0 |
| 6 数据 | 1 | 3 | 4000 | 550000 | 0 |

跨表示例：YZWeapon.training_id 为 Normal/int，第5行写“关联 YZTraining.id；0表示无训练”。它不是 Table；只有多行聚合或结构体才使用 Table 模式。

ID冻结前由程序与策划联合分配。可在新仓库重新规划ID，但从OH迁入的枚举引用需一并重映射；不能把新功能ID恰巧等于旧“签到”而接到旧行为。所有建议表名、枚举与字段在 __说明 页记录，删除／改名同时检查客户端、服务端、宏和残留JSON。

## 09 配表校验与发布验收

| 检查组 | 必须阻止或报告的情况 |
|---|---|
| 表头 | 重名表、字段、ID；未知模式；非int/string；备注误导出；普通表与FinalString起始行混用 |
| 引用 | 形状／字／武器／训练／主将／技能／波次／地图／奖励／资源悬空；条件或技能处理器未注册 |
| 单位 | 模拟秒与真实秒混用；比率未除10000或重复除；速度被像素缩放；临界范围／概率非法 |
| 数值 | 裸兵生命0.64、首盾1.0；武器L(0/1/2)=0.4/1/1.2；刀盾+0.50与33%减伤；双武器；主将不复乘；AI余数预算不重算 |
| 敌军 | 显式与构筑两模式冲突；可见字层与真实派生不符；波次时间倒序或出城侧错误 |
| 随机 | 资格筛完空池；权重全0；名字池收敛；已有武将换牌／撤回后广告判断用最终盘面 |
| 经济 | 报价生成冻结；涨价计数、换批计数、三口免费次数分别记录；金币不流入建造点 |
| 成长与抽卡 | 20261027当前配置见字段字典与总规划v6.0 | 不继续使用历史基数、训练与奖励公式 |
| 双格式 | 对相同表ID逐字段规范化比较；数组次序保留；新字段在Config和diff_Config均存在 |
| 多端与分组 | 微信／抖音／服务端同值；基础／实验显式0／空继承一致；旧局仍用开局快照 |
| 部署 | 删改表留下孤儿JSON；资源版本与配置版本不匹配；回退配置无法被当前客户端读取 |

最小闭环先做一张单位表、一张武器表、一条组合、一张关卡和一波敌军，完成真实Excel导出、客户端读数、服务器读数以及六种典型兵种对账。随后扩到全目录；不要先录完几千个单元格才发现导表器不认格式。

程序交付：可用的新项目导表入口、读取适配与表注册、字段字典／枚举、引用和数值校验、单元计算回归、双端发布清单、错误定位到工作簿／sheet／ID／字段。策划交付：源表、中文说明、批准初值、公式和变更记录。美术交付：资源键、字体／图标／特效清单与表现表映射；不得改战斗参数。

## 10 事实依据与核验边界

| 证据 | 可支持的结论 |
|---|---|
| 公司正式规范 配置表框架规范_沿用OH_20260823.md | 表头、字段模式、目录和复用原则；旧库存数字不作当前统计 |
| OH config/outputexcel/README.md、ExcelOutput.exe.config、ExportFinalString.bat | 当前工具成品、双版本输出、变体空继承、FinalString起始行特例 |
| OH Global／OpenFunction／Trigger／Item／Level／Buff／Ads源表与同名Config JSON | 本次抽查的源表结构、说明与已导出字段；不等于重新导出全量通过 |
| OH Runtime/Game/MgrFacade.cs、CfgEx/CfgMgrProxy.cs、CoreDefine/CfgDefine.cs | 读取入口、缓存、客户端分类与AB字段重映射 |
| OH com.game.micrometa包的CfgMgr.cs | 按表解析并缓存；按字段获取；新配置仍需代码消费 |
| OH FunctionMgr／ConditionUtils／AdVM／GlobalCfgEx／ObjInfoTable | 框架和玩法耦合点；新条件与新属性不可仅改表获得 |
| OH server/script/Base/Config 下3个读取器 | 双格式识别、按版本目录加载与玩家字段选择；生产同步流程需项目构建验证 |
| OH Runtime/Boot/Res/MiniGameResSys.cs 与双渠道CopySrc目录 | 已有小游戏资源路径和渠道集成基础；不等于新游戏真机可直接发布 |
| 本项目 prototype/public/rules.js 与完整数值规划v5.4 | 本次迁移初值和六种属性样本；未改动原型玩法 |

本版结论是“保留业务规则，修正工程落地与配表方式”。36张逻辑表是待程序评审冻结的新项目结构，非OH现成表，也非已写入正式游戏的配置。真实工具导出、小游戏构建和服务器部署验证列为下一阶段开发验收。

## 20261027 当前数值与导出契约

K、B、S、H为兵身真实刀、弓、盾、骑层数。L(n)=0.4+0.6×min(n,1)+0.2×max(n−1,0)，0／1／2层分别0.4／1／1.2。主将星级倍率Z依次为1／1.05／1.10／1.15／1.20；未成将Z=1。G为额外将字比例。

| 属性 | 已确认公式 |
|---|---|
| 近攻 | 刀训练值×身份攻击系数C×[L(有效刀层)+近攻额外加成]×(1+G)×Z |
| 远攻 | 有有效弓时：弓训练值×C×[L(有效弓层)+远攻额外加成]×(1+G)×Z；没有有效弓时为0 |
| 生命 | 盾训练值×[(0.8+0.2S)²+身份生命额外加成]×(1+G)×Z |
| 有效攻速指数 | 骑训练值×(0.8+0.2H)×身份攻频倍率；是指数，不是每秒攻击次数 |
| 每武器攻击间隔 | max(0.5,1.5×min(本局参考骑训练值÷有效攻速指数,2)) 模拟秒；近远各自计时 |
| 本局参考攻速 | 普通对战按内部难度C列对应的骑训练值，开局冻结，敌我共用；塔／试用依自身冻结参考值 |
| 将字G | 未成将时为0；首个主将消耗名字各1层作身份，其余所有姓名层每层+5%生命／近攻／远攻，不加攻速 |
| 全局目标倍率 | 对兵1.0、对城1.0；普攻与技能追加每目标结算一次 |
| 战场移速与运输 | 移速55×0.85×(1+0.18H)；棋盘每格0.85模拟秒，骑训练不改变运输／产兵 |

黄忠有效弓=max(真实弓,1)，关羽有效刀=max(真实刀,1)，只提供武器资格，不赠真实层或基础组合。兵种额外攻击在首次成型即生效，不放入多层分支。不叠旧训练倍率或骑训练伤害；盾训练影响有盾与无盾生命。

正攻击命中伤害=max(0.1,面板攻击×技能倍率×目标倍率×攻击增益×目标类别战术增益×剩余承伤比)。保留精度，统计不计过量伤害；直接减伤仍按既有上限85%。刀盾固定减伤在受击时计算，不是随机免疫。

四项独立1—163级，刀／弓／盾／骑分别读表M／O／Q／S的实际属性。1级为15／9／45／6；骑是攻速指数。逐行使用策划表已复算缓存值，不实时用近似指数代替逐级取整。

J行费用表示J→J+1，每项取N／P／R／T实值，四项总价为四项相加。保留每十级回落：1→2每项10，10→11每项352，11→12每项150，20→21每项1424，21→22每项720。163级无下一档，升级按钮不可扣费；原表K总价仅追溯，不能覆盖四个已取整单价。

实际属性增长：2—10级×1.20、11—20级×1.15、21—50级×1.12、51—100级×1.10、101—163级×1.08，每级四舍五入。各项可以偏科。全四项1→163合计43,011,440金币，无新增金币赠送或升级补贴。

普通对战难度只由有效进度选择A行，C列决定敌方训练对标等级，E列保存源AI组，5场起按其生成预算AI；1—4场使用获批的原教学敌军构筑与波次。B列决定胜奖，F列决定城池系数。对手展示积分仍用中心=max(当前积分,历史最高−300)，先抽整数偏移[−100,100]再截到0；展示段位不再额外放大敌属性，也不读取玩家训练同步抬敌。

| 项目 | 生成规则 |
|---|---|
| Z 每波兵数 | 小数累计余数分配相邻整数；整数不额外随机 |
| AA 每兵基础字预算 | 与Z独立余数；50%刀盾／50%骑射取向，预算≥2先给组合两字，1字时取组合之一，剩余刀盾弓骑各25% |
| AB 每兵姓名字总预算 | 含身份两字；目标四将各25%，1字不成将，≥2先给完整名字，其余折为将字 |
| 余数与随机 | 开局固定种子生成各自初始余数，跨时间段保留；先基础字再姓名字，重复种子可重放 |
| 出兵时刻 | 首波9秒，之后18／27／36…；一波多兵同时出场，不按兵分摊9秒 |
| 时间段 | [0,10)、[10,20)、[20,30)、[30,50)、[50,80)、[80,120)、[120,结束) |
| 跨段与暂停 | 不重置出兵钟、不在边界补波；暂停不推进，加速按模拟秒 |
| 敌城 | 盾训练表Q(C)×F，必须索引C对标等级，不能取难度同行Q |
| 我城 | 玩家盾训练值×F，不吃局内字层、将字、星级 |

12组原表全部导入；当前163档只引用1／2／3、11／12／13、21／22／23，31／32／33保留数据但不自动启用。D说明统一0福利／1验证／3卡点；类型与成长增量分字段保存，不修改已给出的C。塔和试用不套普通AI曲线。

属性定点字段用十进制整数字符串表达，避免未经验证的32位int溢出；正式OH导出适配需验证精确解析和最终数值范围。36张逻辑表仍是工程结构契约，未凭此生成或部署正式xlsm；原34表之外新增YZNumericDifficulty与YZAIProfile。字段逐项清单、JSON字典和HTML由同一结构生成。
