同一套属性、同一套时间轴,跑多遍:只普攻、只放技能、技能+普攻(技能 CD 期间补普攻),再各跑一遍「技能换成群攻」。 结果并排放,能直接看出「放技能比平砍快多少」。防御方可以有多个目标和多个种类(BOSS + 一堆小怪),攻击方按优先级集火。 所有属性默认 0,点「载入示例」看一组能打起来的数值。
属性来自「属性战力」页(去增删),这里只读。攻击方一列 + 每个模组一列(模组点上面的「+ 加入模组」加,加完这张表自动多一列);攻速(次/秒)、技能攻速(次/秒 = 1 ÷ 技能冷却)和平均技能系数是本页专用,不参与战力计算。 单位:生命/攻击/防御是数值;暴击率、命中、闪避、吸血、反伤、忽视防御是 0–1 的比例;暴伤是倍率(2 = 两倍);攻速是「每秒出手几次」;技能系数是「技能伤害相当于普攻的几倍」。
示例:攻击方 攻 100 / 血 1000 / 防 50 / 攻速 1.2 / 技能攻速 0.4(冷却 2.5 秒)/ 技能系数 1.8; BOSS ×1 攻 60 / 血 800 / 防 30 / 攻速 1.0 / 技能攻速 0.3(优先级 1);小怪 ×4 攻 20 / 血 300 / 防 10 / 攻速 0.8(优先级 2)
公式就是一行算式,直接改、点「开始模拟」生效。攻击方的属性写 attacker.攻击,防御方写 defender.防御,中间的点不能省。
只有「吸血率」「反伤率」两行能用 damage(代表本次打出的伤害)。
| 函数 | 什么意思 | 例子 |
|---|---|---|
max(a, b) | 两个数里取大的 | max(10, 3) 得 10;常用来保底:max(伤害, 1) 保证至少打 1 点 |
min(a, b) | 两个数里取小的 | min(暴击率, 1) 把超过 100% 的按 100% 算 |
clamp(x, 小, 大) | 把 x 夹在「小」和「大」之间 | clamp(1.4, 0, 1) 得 1;clamp(-0.2, 0, 1) 得 0。等于 min(max(x,小),大) |
ifelse(条件, A, B) | 条件成立取 A,否则取 B | ifelse(攻击 > 防御, 攻击 - 防御, 1):打得动就相减,打不动给 1 |
round(x) | 四舍五入取整 | round(2.6) 得 3 |
floor(x) | 向下取整(抹掉小数) | floor(2.9) 得 2 |
ceil(x) | 向上取整(有小数就进一) | ceil(2.1) 得 3 |
abs(x) | 取绝对值(去掉负号) | abs(-5) 得 5 |
pow(x, y) | x 的 y 次方 | pow(2, 3) 得 8;pow(1.1, 等级) 就是每级涨 10% |
sqrt(x) | 开平方根 | sqrt(100) 得 10 |
log(x) / exp(x) | 自然对数 / e 的 x 次方 | 做收益递减时用:log(1 + 防御 / 100) |
默认「技能伤害 = 普攻伤害 × 平均技能系数」。真实的技能循环(冷却、普攻与技能交替)不是这么算的,这里是用平均系数把一轮技能摊平,做量级对比用。
动作时长=这一招自己的动画时间;额外等待=动画播完之后还要再等多久才允许接下一招(不需要就填 0,想留一点延迟填 0.1)。 两个都到了才切,而且还要看下一招自己的 CD 转没转好——没转好就等它转好,不硬插。
群攻目标数=一次群攻最多打几个(不足就按实际活着的算); 释放条件=场上存活的敌人 ≥ 这个数才放群攻,不够就退回去放单体技能; 第 N 个目标=一次群攻打到第 N 个目标时的伤害倍率,顺序就是参战阵容的集火顺序(第一个目标打 80% 伤害就填 0.8,第二个 60% 就填 0.6)。 技能倍率、冷却、命中/暴击这些都跟单体技能一样,不用重复配。
攻击优先级:1 最高,攻击方永远先打还活着的、优先级数字最小的那个;数字一样就按阵容顺序从上到下。 数量表示这个模组放几只一样的目标(比如小怪 4 只)。 要加新种类的怪,去上面「一、属性」的「模组」里加,这里只是排阵容。
注:技能一放就进入冷却,冷却时长 = 1 ÷ 技能攻速(从起手算,已经包含技能动作时长)。技能动画播完之后,还要再等「技能 → 普攻 额外等待」这一格,才能接普攻。 这里不考虑动作表现(前摇后摇、位移、打断都不管),只排时间轴。如果切换延迟填得很短、而下一招自己的 CD 还没转好,就等它 CD 转好再打(不会硬插)。
点「开始模拟」出结果。
把上面算出来的那一场按时间播一遍:谁先动手、打谁、掉多少血,都能看出来。 注意这里是期望值的一次演出(没有逐次掷骰子),所以血条是平滑下降的。