• 浏览量:115
  • 创建日期:14天前
  • 最后编辑:13天前
  • 编辑次数:3次

历史编辑记录更多
    最近参与编辑
    本页共有 3 个游戏设定
    原版爆炸扩展 (Extended Explosion)

    1.19.2-3.6.17 版本后,AoA3的自定义爆炸系统被添加,用于优化原版爆炸,用于添加灵活度更高的其他爆炸。

    爆炸信息

    一个标准的AoA3自定义爆炸拥有以下爆炸信息数据:

    中文名变量名释义默认值
    基准损害baseDamage

    爆炸对周围实体造成的基准伤害值

    爆炸对周围方块造成的基准破坏力

    20
    基准击退baseKnockback爆炸对周围实体造成的基准击退力1
    立方半径squareRadius

    爆炸对周围方块/实体的影响的计算方式,可以在水平、竖直方向上单独定义

    一旦被填写,爆炸范围就会变成各棱与坐标轴平行的长方体,同时“半径”参数失效

    null
    半径radius

    爆炸对周围方块/实体的影响的计算方式

    在“立方半径”未填写的情况下,爆炸范围是半径为该参数值的球体

    10
    穿透力度penetrationPower

    爆炸射线对周围方块的穿透能力

    当爆炸射线穿透方块时,该项数值越大,爆炸射线被方块的削减越小

    100
    方块掉落概率blockDropChance被爆炸破坏的每个方块的掉落概率1
    爆炸音效explosionSound
    爆炸时发出的音效entity.generic.explode
    是否影响爆炸物来源affectsOwner
    是否会使爆炸发出者受到本次爆炸的影响false
    是否不伤害实体
    noEntityDamage是否不会对爆炸范围内的实体造成伤害false
    是否不击退实体
    noEntityKnockback是否不会对爆炸范围内的实体造成击退false
    是否不破坏方块
    noBlockDamage是否不会对爆炸范围内的方块造成破坏false
    单个游戏刻内爆炸完成singleTickExplosion是否会在一个游戏刻内完成本次爆炸的所有操作null

    若使用“半径”参数,则爆炸有效半径 = 半径

    若使用“立方半径”参数,则爆炸有效半径 = ( 水平爆炸范围 + 竖直爆炸范围 ) / 2


    一个标准的AoA3自定义爆炸拥有以下爆炸信息谓词:

    中文名谓词名释义默认值
    受影响实体谓词affectedEntityPredicate定义爆炸范围满足怎样条件的实体会被影响true
    受影响方块谓词affectedBlockPredicate定义爆炸范围满足怎样条件的方块会被影响true
    击退速度函数knockbackVelocityFunction定义被爆炸波及的实体会以怎样的速度计算击退1
    伤害倍率函数damageModFunction定义被爆炸波及的实体会以怎样的方式计算伤害1
    穿透倍率函数penetrationModFunction定义被爆炸波及的方块会以怎样的方式计算穿透1
    实体效果entityEffectConsumer定义被爆炸波及的实体会受到怎样的额外效果
    方块效果blockEffectConsumer定义被爆炸波及的方块会受到怎样的额外效果
    爆炸后函数afterExplodingFunction定义爆炸后额外产生的效果
    粒子particleConsumer定义爆炸产生的粒子效果

    爆炸有效半径 ≥ 4,且会破坏方块时,多次生成粒子效果

    否则,只生成一次粒子效果,在单个游戏刻内生成完毕

    爆炸条件

    不满足以下爆炸条件的爆炸无法发生:

    • 爆炸有效半径必须大于0,同时小于256,否则会报错。

    • 爆炸必须至少满足“伤害实体”“击退实体”“破坏方块”三者之一,全不满足时报错。

    爆炸对方块的效果

    【以下内容仅记录默认情况下爆炸产生的效果,有可能其他位置被修改】

    方块掉落

    被爆炸破坏的方块会根据“方块掉落概率”决定是否抽取其战利品表。

    抽取时,如果本次爆炸物来源/爆炸物为玩家,那么会算作玩家破坏了方块。

    如果“单个游戏刻内爆炸完成”,那么方块的掉落物会在爆炸全部计算完毕后统一生成。

    爆炸对实体的效果

    【以下内容仅记录默认情况下爆炸产生的效果,有可能其他位置被修改】

    影响实体的条件

    在默认情况下,爆炸只能对其波及范围内、满足如下条件的实体产生影响:

    • 不无视爆炸对其影响的

    • 满足“受影响实体谓词”定义的条件的

    • 非本次爆炸物来源的

    • 非本次爆炸物的

    持续性爆炸

    AoA3自定义的爆炸系统可以使单次爆炸不在一个游戏刻内爆炸完成。


    每个持续性爆炸都需要设置每个游戏刻尝试炸掉的方块数量。

    持续性爆炸时,每个游戏刻都会尝试炸掉该数量的方块(默认1000个)。执行完毕后,会统一生成本次得到的掉落物。

    每个游戏刻的爆炸产生的对方块的破坏力无法叠加,但是每一步爆炸都会影响这一步爆炸范围内的所有实体。


    如果本次持续性爆炸已经爆炸超过30秒(600 tick),或爆炸波及范围内的方块已经全部被炸光,就不会继续爆炸。


    在默认情况下,爆炸有效半径 ≤ 50格的爆炸会在单个游戏刻内爆炸完成,否则会持续多个游戏刻。

    优势

    相较于原版爆炸,AoA3自定义的爆炸系统有如下优势:

    • 直接获取爆炸波及范围内的所有方块和实体,避免了“爆炸射线”因其离散的特性导致的问题。

    • 使用了比原版爆炸更优的算法,拥有更高的自由度(如震击爆炸、破片爆炸),能有效降低卡顿。


    震击爆炸 (Concussive Explosion)

    1.19.2-3.6.17 版本后,此自定义爆炸类型被添加,作为AoA3最常用的爆炸类型。

    爆炸对方块的效果

    【所有对方块的效果仅在本次爆炸可以破坏方块时有效】

    爆炸对方块的效果默认不影响空气方块,也不影响无视爆炸影响的方块。

    炸毁方块

    计算是否炸毁方块时,每个方向(上下左右前后)上都会独立计算。

    计算时,会按照该方块与爆炸中心的距离从小到大逐个计算,先计算的方块可以影响后计算的方块。


    关于“一个方块是否会被炸毁”的详细判定规则如下:

    • 如果该方向上的穿透力 ≤ 0,则该方向上此后所有在范围内的方块都会被忽略。

    • 爆炸范围内的所有空气方块都会被忽略

    • 没有爆炸抗性数据的方块都会被忽略

    • 如果该方块在爆炸范围内但不能被影响,或 ( 基础损害 + 爆炸有效半径 / 2 ) 的破坏力无法炸毁该方块,则该方向上的方块穿透力将削减:

      • 剩余穿透力 = 原穿透力 - 该方块爆炸抗性 / 5,小于0时取0。

      • 如果剩余穿透力 > 0,则忽略该方块

      • 否则,如果至少有一个方向(上下左右前后)上穿透力 > 0,也会忽略该方块

      • 否则(以上两条件均不满足,意味着本次爆炸无法继续影响任何方块)本次爆炸计算结束

    • 根据如下公式计算对爆炸范围某个特定方块的影响:

      • 特定方块穿透力 = 该方向上的穿透力 * 穿透倍率函数的运算结果

    • 如果对该方块的穿透力 ≤ 该方块的爆炸抗性,则有50%概率使该方向上的剩余穿透力 = 该方向上的原穿透力 * 0.5。

    • 如果对该方块的穿透力 > 该方块的爆炸抗性,则该方向上的剩余穿透力 = 该方向上的原穿透力 - 方块爆炸抗性,该方块会被炸毁

    • 经过以上计算后,“该方向上的剩余穿透力”会作为下一个方块计算时的“该方向上的原穿透力”使用:

      • 如果该方向上的剩余穿透力 > 0,则忽略该方块

      • 否则,如果至少有一个方向(上下左右前后)上的剩余穿透力 > 0,也会忽略该方块

      • 否则(以上两条件均不满足,意味着本次爆炸无法继续影响任何方块)本次爆炸计算结束

    穿透方块

    爆炸对方块的穿透力,会在爆炸中心有流体,且该流体有爆炸抗性的情况下被削弱。

    • 实际穿透力 = 原始穿透力 * ( 0.6 - 0.1 * 流体爆炸抗性 / 100 ) ,小于0时按照0计算。

    在此基础上,爆炸在每个方向(上下左右前后)上的穿透力随机,范围在原始穿透力的0.5~1.5倍之间。

    爆炸对实体的效果

    【所有对实体的效果仅在本次爆炸可以影响实体时有效】

    伤害实体

    在爆炸可以伤害实体的情况下,按照如下公式计算其对实体的伤害:

    • 实际伤害 = 基准损害 * ( 1 / 该实体到爆炸中心的直线距离 ) * 伤害倍率函数运算结果 * 接触率

    此外,爆炸造成的实际伤害不能超过其基准损害。

    击退实体

    在爆炸可以击退实体的情况下,按照如下公式推动可推动的实体:

    • 击退方向为爆炸中心指向被击退实体

    • 实际击退 = 基准击退 * 击退速度函数运算结果 * 接触率 * ( 1 - 爆炸击退抗性[1] )

    注[1]:该参数仅在被击退实体是生物的情况下有效,若非生物,该参数值可认为0。


    破片爆炸 (Shrapnel Explosion)

    1.19.2-3.6.17 版本后,此自定义爆炸类型被添加。

    爆炸射线

    破片爆炸造成的损害集中在各个坐标轴方向上,有一定误差。

    破片爆炸发射的爆炸射线分布如下图所示:

    破片爆炸-第1张图片破片爆炸发射爆炸射线的方向(条件取原数值)破片爆炸-第2张图片破片爆炸发射爆炸射线的方向(条件放宽50倍)

    图中原点表示爆炸中心,红色所示部分在半径为1的球面上,爆炸射线的方向为原点出发指向(左图)红色区域内的随机位置。


    每条爆炸射线的初始穿透力随机,范围在设置穿透力的0.85~1.15倍之间。

    爆炸对方块的效果

    【所有对方块的效果仅在本次爆炸可以破坏方块时有效】

    爆炸对方块的效果默认不影响空气方块,也不影响无视爆炸影响的方块。

    炸毁方块

    爆炸射线发出后,会以每步1/3格向前逐步移动,直至达到爆炸有效范围的边界。

    每步进一次,都会尝试炸毁该步所经过的方块,先经过的方块会影响后经过的方块,每个射线独立计算。


    关于“一个方块是否会被炸毁”的详细判定规则如下:

    • 没有爆炸抗性数据的方块会被忽略

    • 已经被炸毁的方块会被忽略

    • 爆炸射线上的所有空气方块都会被忽略

    • 一旦爆炸射线遇到不受爆炸影响的方块,本条射线计算结束

    • 如果爆炸射线遇到阻碍实体移动的方块,但 ( 基础损害 + 爆炸有效半径 / 2 ) 的破坏力无法炸毁该方块,本条射线计算结束

    • 否则,根据如下公式计算对爆炸范围某个特定方块的影响:

      • 特定方块穿透力 = 该方向上的穿透力 * 穿透倍率函数的运算结果

      • 如果该方块的爆炸抗性 > 对该方块的穿透力,则本条射线计算结束

      • 否则,剩余穿透力 = 原穿透力 - 该方块的爆炸抗性,该方块会被炸毁

    此外,可以单独获取每条射线在达到有效范围的边界时的剩余穿透力。如果射线提前结束计算,剩余穿透力为0。

    爆炸对实体的效果

    【所有对实体的效果仅在本次爆炸可以影响实体时有效】

    爆炸射线发出后,会以每步1/3格向前逐步移动,直至达到爆炸有效范围的边界。

    每步进一次,都会尝试影响该步所经过的实体,每个射线独立计算。

    伤害实体

    在爆炸可以伤害实体的情况下,按照如下公式计算其对实体的伤害:

    • 实际伤害 = 基准损害 * ( 1 / 该实体到爆炸中心的直线距离 ) * 伤害倍率函数运算结果 * ( 0.5 + 穿过该实体的爆炸射线的数量 * 0.5 )

    此外,爆炸造成的实际伤害不能超过其基准损害。

    击退实体

    在爆炸可以击退实体的情况下,按照如下公式推动可推动的实体:

    • 击退方向为爆炸中心指向被击退实体

    • 实际击退 = 基准击退 * 击退速度函数运算结果 * ( 0.5 + 穿过该实体的爆炸射线的数量 * 0.5 ) * ( 1 - 爆炸击退抗性[1] )

    注[1]:该参数仅在被击退实体是生物的情况下有效,若非生物,该参数值可认为0。

    短评加载中..