一字成兵工程与配置表实施方案
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现成表,也非已写入正式游戏的配置。真实工具导出、小游戏构建和服务器部署验证列为下一阶段开发验收。
11当前数值与导出契约
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由同一结构生成。