前言
3.7.8版本,AoA3更新到了MC1.21,也跟进了MC原版的更新内容,将AoA3的魔咒改为数据驱动。这意味着玩家也可以使用数据包对AoA3的魔咒进行增、删、改了。
为了实现魔咒的效果,AoA3也添加了一些属于自己的魔咒效果组件,本教程会介绍这些魔咒效果组件的信息,简单介绍用法。
为了实现用数据包定制魔咒,读者也需要基本如下知识:
魔咒效果组件介绍
AoA3添加的魔咒效果组件均为带条件的魔咒效果组件,其信息如下:
组件注册名 | 战利品上下文 | 效果输入参数 | 行为 |
---|---|---|---|
aoa3:crit_damage | enchanted_damage | 初始输入为0 | 影响暴击伤害 |
aoa3:spirit_consumption | enchanted_item | 初始输入为1 | 影响精神力的消耗量(倍率) |
aoa3:rune_cost | enchanted_item | 初始输入为0 | 影响符文的消耗量 |
aoa3:recoil | enchanted_item | 初始输入为1 | 影响后坐力(倍率) |
aoa3:pellet_spread | enchanted_item | 初始输入为1 | 影响霰弹的扩散程度(倍率) |
aoa3:ammo_cost | enchanted_item | 初始输入为0 | 影响弹药的消耗数量 |
分别结合使用这些组件的魔咒介绍如下:
crit_damage
该组件的上下文为 enchanted_damage,即影响有该魔咒的物品的攻击力。
使用该组件的魔咒为断绝(3.7.12版本前),其效果组件为:
"effects": {
"aoa3:crit_damage": [ ←效果组件
{
"effect": {
"type": "minecraft:add", ←魔咒效果
"value": {
"type": "minecraft:linear", ←等级依赖函数
"base": 1.15,
"per_level_above_first": 1.15
}
}
}
]
},
在效果组件中,魔咒的效果为 minecraft:add,这是值效果中的加效果,即将魔咒得到的值与输入的值(暴击伤害)相加。
初始输入为0,因此没有该魔咒(该魔咒等级为0时),攻击力 + 0,与默认值相同。
与输入值相加的值通过等级依赖函数计算,该等级依赖函数为 minecraft:linear(线性函数)。base 为1.15,即魔咒为1级时,与输入值相加的值 = 1.15。per_level_above_first 为1.15,魔咒等级每增加1级,这个值增加1.15。
通过以上分析即可看出,该魔咒的效果为每级增加1.15点暴击伤害。
spirit_consumption
该组件的上下文为 enchanted_item,即影响有该魔咒的物品本身。
使用该组件的魔咒为充能,其效果组件为:
"effects": {
"aoa3:spirit_consumption": [
{
"effect": {
"type": "aoa3:clamp",
"max": 9999.0,
"min": 0.0,
"value": {
"type": "minecraft:multiply",
"factor": {
"type": "minecraft:linear",
"base": 0.93,
"per_level_above_first": -0.07
}
}
}
}
]
},
在效果组件中,魔咒的效果为 minecraft:multiply,这是值效果中的乘效果,即将魔咒得到的值与输入的值(精神力消耗)相乘。
初始输入为1,因此没有该魔咒(该魔咒等级为0时),消耗量 × 1,与默认值相同。
相加的值的等级依赖函数为 aoa3:clamp,该等级依赖函数是对原版的 minecraft:clamp 进行了重新编码并注册,功能与之相同,对另一个等级依赖函数计算出的值进行钳制,在这里就是钳制在0到9999之间。
另一个等级依赖函数为上文介绍过的线性,不难看出,是每级减少0.07倍精神力消耗,即每级减少7%精神力消耗。
再根据前文的钳制,通过此方法计算出的值如果 < 0,就设为0;> 9999,就设为9999,得到最终的值。
rune_cost
上下文为 enchanted_item,不再赘述。
使用该组件的魔咒为法术,其效果组件为:
"effects": {
"aoa3:rune_cost": [
{
"effect": {
"type": "aoa3:clamp",
"max": 255.0,
"min": 1.0,
"value": {
"type": "minecraft:add",
"value": {
"type": "minecraft:linear",
"base": -1.0,
"per_level_above_first": -1.0
}
}
}
}
]
},
效果为加效果,等级依赖函数是钳制和线性函数的组合,上文也已经介绍过,不再赘述。
效果为,每级减少1个符文消耗量,并将结果钳制在1到255之间。试试自己解读并分析出这个效果吧!
recoil
使用该组件的魔咒为支配,效果组件为:
"effects": {
"aoa3:recoil": [
{
"effect": {
"type": "minecraft:multiply",
"factor": {
"type": "minecraft:linear",
"base": 0.85,
"per_level_above_first": -0.15
}
}
}
]
},
都是熟悉的影子!效果为乘效果,等级依赖函数为线性函数。
已经阅读到这里,相信读者不难看出效果为每级减少15%的后坐力。
pellet_spread
使用该组件的魔咒为集束,效果组件为:
"effects": {
"aoa3:pellet_spread": [
{
"effect": {
"type": "minecraft:multiply",
"factor": {
"type": "minecraft:linear",
"base": 0.85,
"per_level_above_first": -0.15
}
}
}
]
},
效果为乘效果,等级依赖函数为线性函数,每级减少15%的霰弹扩散程度。
ammo_cost
使用该组件的魔咒为贪噬诅咒,效果组件为:
"effects": {
"aoa3:ammo_cost": [
{
"effect": {
"type": "minecraft:add",
"value": {
"type": "minecraft:linear",
"base": 1.0,
"per_level_above_first": 1.0
}
}
}
]
},
效果为加效果,等级依赖函数为线性函数,每级使弹药消耗量 + 1。
如何使用这些魔咒效果组件
从上文中可以看到,AoA3的魔咒总体上实现逻辑还是比较简单的,而且这些魔咒效果的内容也并不复杂。这些魔咒效果组件只负责提供生效的效果,具体的效果值和等级依赖函数都依然使用原版的魔咒数据格式。
因此玩家也可以这些组件为载体,结合原版提供的方法,写出自己的魔咒。
在此浅举一个例子作为启发:
设计一个魔咒,让枪械有一定的概率不消耗弹药,等级越高,概率越高。
首先分析一下需求,并根据每个需求推断出需要使用什么。
行为是弹药消耗,而负责弹药消耗的魔咒效果组件是 aoa3:ammo_cost,即为我们所需的魔咒效果组件。
效果是降低概率,但该组件的行为是影响弹药的消耗数量。似乎并不相同?
但考虑到枪械每次开火,只消耗1个弹药,如果让消耗数量有概率 -1,就实现了我们所需的效果。而原版提供的魔咒效果中的二项减少(minecraft:remove_binomial)刚好符合我们的要求!
而等级越高,概率越高,几乎打了明牌,需要等级依赖函数!
根据以上的分析,我们写出了如下效果组件:
"effects": {
"aoa3:ammo_cost": [
{
"effect": {
"type": "minecraft:remove_binomial",
"chance": {
"type": "minecraft:linear",
"base": 0.07,
"per_level_above_first": 0.07
}
}
}
]
},
得到效果组件之后,其他的魔咒json中所需的参数,例如最大等级、适用物品等,就比较好写了。
题外话
上文中还有一些AoA3的魔咒没有介绍到,在此补充介绍。
炮弹魔咒直接使用了原版的魔咒效果组件。
"effects": {
"minecraft:damage": [
{
"effect": {
"type": "minecraft:multiply",
"factor": {
"type": "minecraft:linear",
"base": 1.1,
"per_level_above_first": 0.1
}
}
}
]
},
组件为 minecraft:damage,上下文为 enchanted_damage,即影响物品的攻击力。效果组件的效果为每级增加10%攻击力。
3.7.12版本后,断绝魔咒被重做。新的断绝魔咒也使用原版的魔咒效果组件。
"effects": {
"minecraft:attributes": [
{
"amount": {
"type": "minecraft:linear",
"base": 0.035,
"per_level_above_first": 0.035
},
"attribute": "aoa3:critical_hit_multiplier",
"id": "aoa3:enchantment.sever",
"operation": "add_value"
}
]
},
组件是minecraft:attributes,即魔咒给予玩家一个属性修饰,影响玩家的属性值。
属性修饰符,即影响的属性值由 attribute 给出,为 aoa3:critical_hit_multiplier,是AoA3新定义的一种属性值,该属性值影响玩家的暴击伤害倍率。
修饰值由 amount 给出,依然是我们熟悉的等级依赖函数。属性修饰的运算方式由 operation 给出,为增量操作。不难看出效果为每级令暴击伤害倍率增加0.035,即增加0.035倍(3.5%)的暴击伤害。