写了一个小时,稍微理顺思路了。
于是技能伤害要全部重写一遍了2333[code] 物理攻击,目标的物理防御力抵消攻击者的物理攻击力,两边同时进行放大是为了方便微调 n + (a.atk * 2 - b.def * 2) // 一比一物理伤害,n 是固定伤害量(下同) n + (a.atk * 4 - b.def * 2) // 两倍物理伤害 n + (a.atk * n - b.def * 2) // N/2 倍物理伤害 n + (a.atk * 2 - b.def * 2 * (1 - ignore_rate) ) // 【穿甲】无视目标特定比例的物理防御力,例如 n + (a.atk * 2 - b.def * 2 * (1 - 30%) ) => n + (a.atk * 2 - b.def * 1.4) // 即无视目标 30% 物理防御力 n + (a.atk * 4 - b.def * 2) / fixed_rate * damage_rate 让伤害能够超过目标物理防御,然后进行一个比例的修正,最后乘以放大倍率。比如 N 连击的技能,用 fixed_rate 对应连击次数修正伤害过高的问题,如果直接在括号内改变倍率,有可能遇到无法破防的 BUG 物理攻击的衍生类型 n + (a.atk * 2 - b.mdf * 2) // 让目标以魔法防御力承受物理攻击伤害 n 这个固定伤害量可以设计为一个子式,如下例 (a.level / 40) * 200 + (a.atk * 2 - b.def * 2) 此时 n = (a.level / 40) * 200。物理伤害除了一个固定伤害量之外,附加一个攻击者的等级加权。意味着攻击者等级达到 40 级时,固定伤害量会达到 200 点,用 n = (a.level / fixed_level) * n1 这样的方式可以方便地对固伤量过大的问题进行修正 n1 + (a.agi * n2) + (a.atk * 2 - b.mdf * 2) // 物理伤害除了一个固定伤害量之外,附加一个攻击者的敏捷值(AGI)加权,当攻击者速度越高时,附加的伤害量越大,例: (a.agi * n2) = (a.agi / 150) * 100。类似于上面的等级加权,当攻击者速度达到 150 时,会得到 100 点额外的固定伤害量,当速度达到 300 时,固定伤害量翻倍到 200 点。 除了 a.level 以及 a.agi 之外,还可以用 a.luk(幸运值)进行类似的加权。 由此可以得到完整的物理攻击伤害推广式: (n0 + n1 + n2 + n3 + ... + nn) + (a.atk * 2 - b.def * 2 * ( 1 - ingore_rate) ) / fixed_rate * damage_rate 其中: n0 = 常数固定伤害量 n1 = (a.level / fix_level) * certain_value,等级加权的固定伤害量。攻击者等级等于 fixed_level 时返回 certain_value;攻击者等级等于 fixed_level 两倍时返回 certain_value * 2 n2 = (a.agi / fixed_agi) * certain_value,敏捷值加权的固定伤害量。攻击者等级等于 fixed_agi 时返回 certain_value;攻击者等级等于 fixed_agi 两倍时返回 certain_value * 2 n3 = (a.luk / fixed_luk) * certain_value,幸运值加权的固定伤害量。攻击者等级等于 fixed_luk 时返回 certain_value;攻击者等级等于 fixed_luk 两倍时返回 certain_value * 2 n4 ~ nn = 其他的脑洞固定伤害量 ingore_rate = 无视目标物理防御力的百分比 fixed_rate = 连击类型伤害修正倍率,一般地应该等于连击次数 damage_rate = 简单粗暴的伤害放大倍率 魔法攻击 与物理攻击类似,仅需将 a.atk 与 b.def 替换为 a.mat 与 b.mdf。 其他特殊判定类型 n + (a.atk * 2 - b.mdf * 2) // 强制让目标以魔法防御力承受攻击者的物理攻击 n + (a.mat * 2 - b.def * 2) // 强制让目标以物理防御力承受攻击者的魔法攻击 n + (a.atk * 2 - b.atk * 2) // 与目标“决斗”,攻击者物理攻击力比目标高时目标受到伤害 n + (a.mat * 2 - b.mat * 2) // 与目标“斗法”,攻击者魔法攻击力比目标高时目标受到伤害 n + (a.def * 2 - b.def * 2) // 与目标“冲撞”,攻击者物理防御力比目标高时目标受到伤害,重装机兵的“撞击板”伤害判定方式即为此 n + (a.def * 2 - b.mdf * 2) // 与目标“冲撞”,攻击者物理防御力比目标魔法防御力高时目标受到伤害,这个可能比较罕见,但仍然写出来供参考了 n + (a.mdf * 2 - b.mdf * 2) // 攻击者魔法防御力比目标高时目标受到伤害,这个可能比较罕见,但仍然写出来供参考了 n + (a.mdf * 2 - b.def * 2) // 攻击者魔法防御力比目标物理防御力高时目标受到伤害,这个可能比较罕见,但仍然写出来供参考了 n + (a.atk * 2 - b.mdf * 2) + (a.mat * 2 - b.def * 2) // 同时具有物理攻击与魔法攻击伤害 其他可以写为 n 固定伤害加权或者 damage_rate 的小式子有 ((10 + a.mmp) / (10 + a.mp)) // 攻击者当前法力值越低,返回一个越大的值。可以用来制造一个竭尽全力的效果,在变量前加上 10 的修正值是为了避免出现除以零的问题 Math.random()*value // 返回一个 (0~1) * value 值的伪随机数 如果想设计真实伤害(即使无法破防仍然给出一定伤害量,则可以用如下的条件式) (eval1) > (eval2)? (eval3):(eval4) // 如果满足等式Ⅰ大于等式Ⅱ则返回等式Ⅲ,否则返回等式Ⅳ。注意不能用 return 缩写某个 eval 例如 (a.atk-b.def*0.5) |