扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 175|回复: 0

[转载发布] 技能伤害式初探

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    2025-2-4 02:05
  • 签到天数: 110 天

    连续签到: 2 天

    [LV.6]常住居民II

    2327

    主题

    395

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10465
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13215

    灌水之王

    发表于 2024-2-16 08:17:41 | 显示全部楼层 |阅读模式
    写了一个小时,稍微理顺思路了。
    于是技能伤害要全部重写一遍了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)
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-10 15:49 , Processed in 0.135020 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表