设为首页收藏本站
  • 官方微信
    lmkj_wx 微信公众号 添加方式:
    1:扫描左侧二维码
  • 手机访问
    lmkj_sj
  •  找回密码
     立即注册

    QQ登录

    只需一步,快速开始

    查看: 1|回复: 0

    如何在hero引擎中正确配置新技能的伤害计算公式

    [复制链接]
    avatar
    • 打卡等级:魔龙套勇士
    • 打卡总天数:98
    • 打卡月天数:22
    • 打卡总奖励:11436
    • 最近打卡:2025-07-22 00:17:43

    5883

    主题

    96

    回帖

    7395

    积分

    管理员

    本站站长

    积分
    7395
    online_admin 发表于 昨天 18:37 | 显示全部楼层 |阅读模式
    在 Hero 引擎中,新技能的伤害计算公式需要通过技能脚本(SkillXXX.txt,XXX 为技能 ID)中的逻辑代码实现,核心是结合攻击者属性、技能等级、目标属性等参数,通过自定义公式计算最终伤害。以下是具体配置方法和示例:
    一、伤害计算公式的核心要素
    一个完整的伤害公式通常包含以下参数,需根据技能类型(物理 / 魔法 / 道术)选择组合:

    攻击者属性:物理攻击(GetAttack())、魔法攻击(GetMagic())、道术攻击(GetDao())、等级(GetLevel())、技能等级(GetSkillLevel())
    目标属性:物理防御(GetTargetDefense())、魔法防御(GetTargetMagicDefense())、等级(GetTargetLevel())
    技能参数:伤害系数(自定义,如DamageRate)、固定加成(FixedAdd)、等级加成系数(LevelAdd)
    特殊效果:暴击倍数(CritRate)、无视防御比例(IgnoreDef)、元素伤害(如火焰 / 寒冰加成)
    二、配置步骤与脚本示例
    以 “烈焰冲击”(技能 ID=1001,法师魔法技能)为例,在Skill1001.txt中配置伤害公式:
    1. 定义技能等级参数(基础数据)
    先在各等级配置中定义公式所需的基础参数(后续公式会调用这些参数):

    lua
    Level 1
    {
        ; 魔法伤害系数(1.2倍)
        DamageRate = 1.2
        ; 技能等级每级额外加成
        LevelAdd = 5
        ; 固定伤害加成
        FixedAdd = 20
        ; 暴击概率(%)
        CritRate = 10
        ; 暴击倍数
        CritMulti = 1.5
        ; 无视魔法防御比例(%)
        IgnoreMagicDef = 20
    }

    Level 2
    {
        DamageRate = 1.5
        LevelAdd = 8
        FixedAdd = 30
        CritRate = 15
        CritMulti = 1.5
        IgnoreMagicDef = 30
    }
    ; 其他等级参数类似,按平衡需求递增
    2. 编写伤害计算逻辑(核心公式)
    在Release模块中,通过代码实现最终伤害计算,替换默认的AreaDamage等简易函数:

    lua
    Release
    {
        ; 检查释放条件(省略,同之前的技能配置)
        if (TargetExist() == 0) then return 0 end
        if (GetMP() < NeedMP) then return 0 end

        ; 1. 获取基础参数
        local skillLevel = GetSkillLevel()  ; 技能等级(1-5)
        local magicAttack = GetMagic()      ; 攻击者魔法攻击(如30-50,取平均值)
        local magicAvg = (magicAttack / 2)  ; 简化:取魔法攻击平均值
        local targetMagicDef = GetTargetMagicDefense()  ; 目标魔法防御

        ; 2. 计算防御减免(考虑无视防御比例)
        local defReduce = targetMagicDef * (1 - IgnoreMagicDef/100)  ; 实际生效的防御
        local defFactor = 1 - (defReduce / (defReduce + 100))  ; 防御减免系数(非线性,避免防御过高导致伤害为0)

        ; 3. 基础伤害公式:(魔法攻击均值×伤害系数 + 技能等级×等级加成 + 固定加成) × 防御减免系数
        local baseDamage = (magicAvg * DamageRate + skillLevel * LevelAdd + FixedAdd) * defFactor

        ; 4. 暴击判定(随机数≤暴击概率则触发)
        local finalDamage = baseDamage
        if (Random(100) <= CritRate) then
            finalDamage = baseDamage * CritMulti
            SendMsg 6 "触发暴击!"  ; 提示暴击
        end

        ; 5. 对目标造成最终伤害(替换默认AreaDamage)
        SubHP Target, finalDamage  ; 扣除目标HP
        SendMsg 6 "你对" + GetTargetName() + "造成" + finalDamage + "点伤害!"  ; 伤害提示

        ; 后续逻辑(扣除MP、播放特效等,省略)
        SubMP NeedMP
        PlaySound 502
        return 1
    }
    三、不同类型技能的公式差异
    1. 物理技能(如战士技能)
    核心基于物理攻击和目标物理防御,公式示例:

    lua
    ; 物理伤害公式:(物理攻击均值×系数 + 技能等级×加成) × (1 - 物理防御×减免系数)
    local phyAttack = GetAttack()  ; 物理攻击
    local phyAvg = (phyAttack / 2)
    local targetDef = GetTargetDefense()  ; 目标物理防御
    local baseDamage = (phyAvg * DamageRate + skillLevel * LevelAdd) * (1 - (targetDef * 0.003))
    2. 道术技能(如道士毒咒)
    可能结合道术攻击和持续伤害,公式示例:

    lua
    ; 道术伤害公式:(道术攻击×系数) + (目标等级×0.5)
    local daoAttack = GetDao()  ; 道术攻击
    local baseDamage = daoAttack * DamageRate + (GetTargetLevel() * 0.5)
    ; 持续伤害(每2秒触发一次)
    AddState Target, 11  ; 毒状态ID=11
    SetStateTime Target, 11, 10000  ; 持续10秒
    四、关键函数与调试技巧
    常用函数:
    GetAttack():获取攻击者物理攻击(整数,如 “50-70” 返回 120,需除以 2 取均值)
    GetMagic()/GetDao():获取魔法 / 道术攻击(同上)
    GetTargetDefense()/GetTargetMagicDefense():获取目标防御
    Random(X):生成 0-X 的随机整数(用于概率判定)
    SubHP Target, X:对目标造成 X 点伤害(核心伤害执行函数)
    调试方法:
    游戏内使用命令@调试技能 1001强制释放技能,观察伤害数值
    用SendMsg 6 "调试:基础伤害=" + baseDamage输出中间变量,排查公式问题
    逐步调整系数(如DamageRate),确保不同等级 / 属性下的伤害符合预期平衡
    五、注意事项
    非线性防御减免:避免使用伤害=基础伤害-防御的简单公式,否则高防御目标可能免疫伤害,建议用(1 - 防御/(防御+常数))的非线性公式。
    整数处理:Hero 引擎中伤害通常为整数,必要时用Int(X)函数取整(如finalDamage = Int(baseDamage))。
    范围伤害分摊:若为群体技能,可在公式中加入范围系数(如finalDamage = baseDamage / 范围目标数)避免群体伤害过高。

    通过以上配置,即可实现灵活可控的技能伤害计算,根据职业特性和平衡需求调整公式参数即可。

    您需要登录后才可以回帖 登录 | 立即注册 qq_login

    本版积分规则

    QQArchiver 手机版 小黑屋 39传奇素材网 ( 蜀ICP备2022016510号-3 )

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