
简介面向游戏数值策划与战斗系统设计者的学习资料围绕网络游戏数值体系展开重点解决属性价值评估、战斗公式推导与平衡性设计等问题适合入门至进阶阶段、希望系统理解数值建模思路的读者参考。压缩包内共1个docx文档约191KB内容以章节形式组织涵盖公式与模型、模型设定、模型特征参数、属性成长曲线、护甲减伤、闪避与招架强度转率、暴击与命中强度转率、攻击强度转DPS、EHP与EDPS计算等模块并附有各公式的推导过程与结果汇总。已有247人学习。读者可从中获得一套以PVP平砍节奏为基础的完整推导框架理解EHP与EDPS如何抽象攻防属性、如何通过设定单位属性价值规避边际效应并参考闪避强度实际价值分析等案例将思路迁移到装备、技能等数值设定中。1. 数值策划的“黑匣子”一份把战斗公式从拍脑袋变成推导的实战资料很多做战斗数值的人都有过这种经历主策丢过来一句“把护甲减伤调成 35%”你打开 Excel 随手写了个减伤 AC / (AC K)K 拍了个 1000上线后发现玩家堆护甲堆到后期直接无敌又回头把 K 改成 3000结果前期脆得像纸。问题不在于公式丑而在于这个 K 是拍出来的不是推出来的。这份《网络游戏数值学习大全》解决的正是这件事它用一套以 1v1 平砍节奏为基准的 PVP 模型把护甲减伤、闪避/招架转率、暴击/命中转率、攻强转 DPS 这几条公式的参数全部从“模型特征参数”里解出来而不是靠感觉填。适合已经能写战斗公式、但被边际效应和属性价值漂移折磨过的从业者也适合想搞明白“为什么 BLZ 系公式长那样”的新人照着推一遍。2. 模型先立住EHP/EDPS 与平砍节奏的三件套2.1 为什么必须先有战斗节奏再谈公式这份资料开篇就把话说死了公式因需求而存在运算的目的不是得出一个结果而是得出一个能满足需求的结果。它设定的需求非常朴素——两个属性完全相同的标准玩家站桩平砍打出一场节奏稳定的战斗。所谓战斗节奏就是这场平砍从开始到分出胜负要花多少秒资料里默认拍的是 20 秒。这个设定看起来简陋但它是后面所有推导的地基。因为一旦你承认“战斗节奏要被预期”攻击类属性的价值就等价于缩短节奏防御类属性的价值就等价于延长节奏公式的任务就变成了让每一单位属性对节奏的影响保持恒定。反过来如果你连节奏都没定直接去讨论“减法公式好还是除法公式好”那基本是无意义的争论——资料里作者自己也说他的公式里四则运算都有根本分不清该叫减法还是除法。所以落地时第一步不是打开 Excel 写公式而是先把这句话写进文档本项目的平砍节奏目标是多少秒PVP 还是 PVE。PVE 模型往往会忽略掉一部分防御属性的价值这份资料明确基于 PVP因为它要综合考虑攻防两端。2.2 EHP 与 EDPS把七项属性收进两个篮子模型只保留七项基本属性MHP生命上限、AP攻击强度、CHP暴击强度、HitP命中强度、AC护甲强度、DGP闪避强度、PRP招架强度。力敏耐智精这类复合属性不直接进模型因为它们不直接作用于战斗资料的处理是认为它们已经等价转化成了上面七项。然后做一次关键抽象所有防御类属性的综合体现叫 EHP有效生命值也就是抗打击能力所有攻击类属性的综合体现叫 EDPS有效伤害值也就是打击能力平砍节奏 EHP / EDPS。这一步是整个方法能不能套用的分水岭——你必须能从自己的模型里抽出独立的 EHP 和 EDPS抽不出来后面的推导全部作废。资料里还特意说明它精简掉了“影响对方防御”的攻击类属性比如精准、破甲因为这类属性会让 EDPS 的计算变复杂。如果项目里确实需要得额外推导“降低对方 EHP”和“提高自身 EDPS”之间的价值换算或者在 EDPS 公式里引入敌方防御数据。这是个很实在的边界提醒很多团队就是在这里偷懒最后属性价值算不平。2.3 稳定属性价值两个推论撑起整个方程组模型要解决的核心痛点是边际效应某属性数值越大价值越大玩家的最优策略就变成要么往死里堆、要么一点不堆。攻防相减的模型必然出现这个现象传统的闪避减伤同理。这份资料的所有公式结构都是为了把属性价值摁成常数。具体靠两条推论推论一EHP 与 EDPS 对引起它们变化的属性值成线性关系。推论二每单位战斗属性价值相等模型默认设置于是 EHP 与 EDPS 对任意属性自变量的导数相等。有了这两条就能建立方程组代入模型特征参数后联立解出公式里的待定系数。资料也提醒了反向操作的坑理论上可以先拍公式系数再反推属性价值但对于含两个及以上参数的公式必须先确认参数之间有没有相关性有的话只能由一个推另一个不能两个都拍脑袋。3. 参数怎么拍模型特征参数表与成长曲线 f(lvl)3.1 模型特征参数先定需求再谈公式模型特征参数本质上是你对这个模型的基本需求代表模型的“特征”。资料给的拍数流程是分析模型总结出特征数据、确认这些参数不常变且相互无逻辑关系、按需求赋值、然后保证游戏实际环境与拍定的数匹配。它自己拍的一套参考值如下明确说了没啥实际意义仅供参考参数取值说明总护甲减伤比例35%标准模型下 AC 转化的总减伤总闪避率15%含其它闪避率其它闪避率5%天赋/Buff/初始化生成不受削减总招架率15%含其它招架率其它招架率5%同上总暴击率25%含其它暴击率其它暴击率10%同上总命中率96%含其它命中率其它命中率90%同上f(lvl) 每增加 1 时的 MHP 增量100成长曲线斜率攻强转化 DPS 占总 DPS 比例50%攻击端拆分武器 DPS 占总 DPS 比例25%攻击端拆分等级偏移量 B4让 1 级角色有 5 级属性平砍击杀时间20 秒战斗节奏目标全技能后 EDPS 提高幅度100%技能平衡另做全技能后 EHP 提高幅度50%技能平衡另做暴击价值 / 命中价值 / 闪避价值1 / 1 / 1单位价值招架价值1.25招架略贵这张表最值得抄的不是数字是它的组织方式。资料反复强调把模型特征参数集中定义在一张表单里所有计算格都来引用计算页的公式里除了 1 之外不应该出现任何数字每个参数都是对其它单元格的引用。最终目标是模型建完后后续维护只调特征参数不动公式。这是血泪经验——把变量当常数填进公式后期调整时几十页公式得重翻一遍。还有一条容易被忽略的约束拍定的数必须和实际游戏环境匹配。你预设“其它闪避率 5%”那天赋闪避加初始闪避之和就不能离 5% 太远你设定全技能 EDPS 提高 100%做技能数值时就得往 100% 靠。模型不是写完就完事它是给后续设计立的靶子。3.2 成长曲线 f(lvl)随手写的式子和它的边界属性成长曲线 f(lvl) 是个关键表达式会被各处公式调用代表角色属性随等级成长的曲线。资料给的形式是f(lvl) level BB 取 4效果是让 1 级角色拥有实际 5 级的属性初始数值好看一些。它明确警告别随便模仿这个线性式子按这个公式每升一级增长的属性是固定值但角色能力成长幅度不一定是固定值。实际项目里要根据需求调整 f(lvl) 的结构甚至定义成纯读表的无规律函数。资料顺手给了个观察到的分段线性例子通过护甲公式反推旧区间(1level60) f(lvl) level 4.5 f(60) 64.5 中区间(60level70) f(lvl) 5.5*level - 265.5 f(70) 119.5 后区间(70level80) f(80) 约等于 174.5实测反推缺准确公式这里有个很重要的性质无论你怎么调 f(lvl) 的表达式只要所有公式都调用同一个 f(lvl)就不会影响平砍节奏。证明很简单资料略过了但这个性质意味着你可以随意调整指定等级的角色强度而不破坏节奏调数值时非常方便。3.3 属性计算公式与 B 的作用属性预期值的计算形式是y f(lvl) * (f(lvl) 每增加 1 时 y 的增量)。当 f(lvl) level B 时如果 B 0角色属性值和等级成正比1 级 100 HP、2 级 200、3 级 300。B 4 时1 级就有 500 HP、2 级 600、3 级 700相当于把整条曲线往左平移了 4 级。这个平移量就是给初始属性留的余量让新手期不至于太寒酸。落地时 B 取多少取决于你希望 1 级角色“看起来像几级”没有标准答案但一旦定了所有属性共用同一个 B别这项属性 B4、那项 B6否则标准模型就对不齐了。4. 公式推导实操从护甲减伤到攻强转 DPS 的四个解4.1 护甲减伤C 为什么等于 1护甲减伤公式的形式是减伤率 AC / (AC A * f(lvl))这一类结构资料里 C 代表强度转率效率兼极限A 是等级削减系数。推导先看 C如果 C 1EHP 公式分母里的 AC 会被消掉EHP 与 AC 变成线性关系——每点 AC 提升固定量 EHP与当前 AC 值无关。这正是模型要的效果所以 C 直接定为 1。招架和闪避的 C 值设定也走同一思路。这一步解释了一个常被误解的问题这类公式之所以长这样跟它是加法还是除法毫无关系纯粹是因为只有这个结构才能推出“EHP 与 AC 成线性关系”。然后求 A。由 EHP 对 AC 求导化简后得到A MHP增量 * (1 - 总减伤比例)。代入资料的数据每级成长 100 HP、总减伤 35%得 A 100 × (1 - 0.35) 65。于是护甲减伤公式确定为减伤率 AC / (AC 65 * f(lvl))。再往下算标准模型下的属性值B 4、level 60 时MHP (60 4) × 100 6400护甲 0.35 × 65 × (60 4) / (1 - 0.35) 2240。这两个数就是 60 级标准玩家的靶子装备、天赋、Buff 加起来要尽量往这上面靠。资料在这里花了不少篇幅吐槽某些商业游戏的护甲公式参数比如某处常数为什么是 400 而不是 425 或 340、分段曲线为什么在 60 级不相交这些吐槽的技术价值在于提醒你分段函数的段与段必须在分界等级相交否则标准模型在分界点附近会跳变。另外它还提到一个没想通的问题——某次版本把耐力价值降了 1/3、耐力数值提高 50%标准 MHP 变了但公式参数没动这在模型视角下是矛盾的。这类历史遗留问题不用深究但你自己做分段时别犯。4.2 闪避/招架转率C 是解出来的不是拍的闪避和招架的公式结构与护甲类似但多了一层等级削减后的率还要再削减一次。推导目标同样是让 EHP 对 PRP招架强度成线性关系由此反解出 C 需要满足的条件。资料代入数值后得到 C 0.92647然后 A 的推算过程与护甲完全相同。这里有个值得记住的结论这类游戏里闪避/招架削减公式的系数看起来怪异是因为它们是算出来的而不是拍出来的。资料也留了个疑问从数字看闪避的 C 值与预期吻合但招架的 C 值偏小导致招架价值大打折扣原因不明。落地时如果你发现招架堆起来收益明显低于闪避先别怀疑自己算错检查一下 C 是不是被某个“历史参数”带偏了。4.3 暴击/命中转率为什么分母里没有 x暴击和命中的转率公式与护甲那组不同分母里没有强度值 x强度与率是线性关系只受等级削减系数 A 影响。资料特意澄清这么设计不是因为“它们是攻击类属性”而是因为这两个自变量在 EDPS 公式里出现的位置不同。这个区分很重要——很多人照着“攻击属性用线性、防御属性用除法”去套套出来的 EDPS 对属性导数不是常数白忙一场。推导需要先求总 DPS。定义 F(lvl) 为 f(lvl) 每增加 1 时总 DPS 的增量联立方程解出结果再回到 EDPS 公式对暴击强度、命中强度分别求导令导数相等解出两个 A 值。资料还补了一句如果命中与暴击的判定方式是先判命中再判暴击多次掷筛结果会不一样公式要换成另一组。这就引出模型设定里的一个取舍单次掷筛圆桌还是多次掷筛。圆桌在程序上略省效率各种率的真实发生几率与面板数值吻合得好但可能导致策划算期望时因 Table 溢出出现误差且同一 Table 内属性价值相互关联、无法稳定多次掷筛则分开判定。资料明确只以圆桌模型推导并假设所有率之和不出溢。你如果项目用多次掷筛这套推导的暴击/命中部分要重来别直接抄。4.4 攻强转 DPS用价值相等联立攻强转 DPS 的公式很简单因为 DPS 与 EDPS 直接成正比DPS AP * 系数就能满足“AP 与 EDPS 成正比”。系数怎么来由 EDPS 对 AP 求导再利用“价值(AP) 价值(MHP)”以及“价值(EDPS) 平砍节奏 × 价值(EHP)”联立解出。这段推导短但它是整个模型“单位属性价值相等”假设的直接兑现。落地时如果你改了平砍节奏目标比如从 20 秒改成 15 秒这个系数会跟着变所以节奏参数一定要放在特征参数表里被引用别写死在公式里。5. 避坑与排查五条推导路上真会翻的车5.1 现象属性价值算出来不是常数越堆越强原因公式结构没选对EHP 或 EDPS 对属性自变量的导数里还带着自变量本身。最常见的是护甲公式的 C 没取 1或者暴击/命中误用了带 x 的分母结构。解决回到推导起点先写出 EHP或 EDPS表达式对目标属性求导看结果里有没有该属性。有就说明结构不对按第 4 章的思路重选 C 或换公式形式。别在系数上找补结构错了调系数只是把漂移挪个位置。5.2 现象改了平砍节奏目标所有属性预期值全乱原因节奏参数被写死在了某个公式里或者 f(lvl) 在不同公式里用了不同表达式。解决把所有模型特征参数集中到一张表计算页公式只引用单元格确认所有调用 f(lvl) 的地方引用的是同一个定义。资料的目标是“后续维护只调特征参数”做不到这一点说明抽象没做干净。5.3 现象分段成长曲线在分界等级附近数值跳变原因两段线性函数在分界点没有相交比如一段按 level-59 写、另一段按 level-60 写。解决每段函数都代入分界等级验算确保两段输出相等。资料吐槽某商业游戏分段不相交“像胃里有只苍蝇”这不是洁癖跳变会直接破坏标准模型在分界点的连续性。5.4 现象圆桌模型下各率之和溢出期望伤害对不上原因单次掷筛时所有率共享一个 Table总和超过 100% 会挤掉后面的判定面板数值和实际发生几率脱节。解决建模阶段就假设所有率之和不溢出并在特征参数表里给总暴击率、总命中率、总闪避率、总招架率留出余量上线前用脚本跑一遍各职业标准配装下的率和超了就砍。如果项目本来就用多次掷筛暴击/命中那组公式要按资料给的替代结果重推。5.5 现象玩家专堆某一属性实际强度远超模型预期原因这不是 bug是模型边界。资料说得很直白角色大幅偏离标准模型有两种常见情况装备档次整体偏高偏低误差较小可忽略以及玩家有堆某属性弃某属性的倾向。后者无法靠模型解决因为此时赖以消掉分母自变量的等式已不成立。解决接受它。资料的建议是给高端装备定制统一属性结构让玩家怎么穿都不偏或者干脆承认属性价值平衡主要是给 LightUser 一个基本靠谱的选择标准CoreUser 自己会找平衡点。真正要避免的只是“越堆某属性强得越厉害”的失控而不是玩家偏离标准模型本身。6. 用导数复核实际价值以闪避强度为例的验算习惯模型建完不等于结束资料第 10 部分给了一个很实用的复核动作在非标准模型下用 EHP 对属性求导算出该属性的实际价值。以闪避强度为例假定价值(EHP) 1由 EHP 对 DGP 求导得到闪避强度的价值表达式。这个表达式在标准模型下会退化成常数因为分母里的自变量被消掉了但在玩家实际属性偏离标准时它会告诉你当前这一点闪避到底值多少。我一般会把这个验算做成一张小表输入玩家当前七项属性输出每项属性的边际价值然后看两件事一是标准配装下七项属性的价值是否接近相等验证模型没建错二是极端配装比如全堆暴击下价值曲线是否还平缓验证没有失控的堆叠收益。下面是个简化的验算骨架参数名对应前面的特征参数表# 闪避强度实际价值验算简化骨架仅示意结构 def dodge_value(dgp, other_dodge, f_lvl, A_dodge, C_dodge, ehp_base): # 闪避率 其它闪避率 C * dgp / (dgp A * f_lvl) dodge_rate other_dodge C_dodge * dgp / (dgp A_dodge * f_lvl) # EHP 与 (1 - 闪避率) 成反比对 dgp 求导得边际价值 d_value C_dodge * A_dodge * f_lvl / ((dgp A_dodge * f_lvl) ** 2) return ehp_base * d_value / ((1 - dodge_rate) ** 2) # 标准模型下应接近常数偏离标准时观察曲线斜率 for dgp in range(0, 3000, 200): print(dgp, round(dodge_value(dgp, 0.05, 64, 65, 0.92647, 6400), 4))代码里other_dodge是不受削减的其它闪避率A_dodge和C_dodge是第 4.2 节解出的参数f_lvl是当前等级的成长曲线值ehp_base是标准 MHP。跑出来的序列如果在标准值附近基本平、往两端缓慢变化说明模型健康如果某一段突然翘起来回去查 C 和 A 是不是代错了。这个习惯救过我一次——某次改版后闪避价值在中段莫名翻倍最后发现是新加的“其它闪避率”没进特征参数表被硬编码进了公式。从那以后我每次调完特征参数都会强制走一遍“标准配装价值相等 极端配装曲线平缓”这两项验算再去看装备和技能数值。希望帮到你。本文还有配套的精品资源点击获取