跳到主要内容

UPDATE 类属性 ​

UPDATE 类型的属性,会在属性更新时触发,仅玩家生效。

力量 ​

我们写一个简单力量属性。

介绍 ​

每1点力量,增加 1% 点攻击力属性。

思路 ​

在属性更新时,触发者的攻击力属性可能发生了变动,所以我们在属性更新时重新计算力量所提供的攻击力属性值。
我们使用 AttributeAPI.addSourceAttribute 这个方法为触发者增加外部属性源

JavaScript
var priority = 121
var combatPower = 1.0
var attributeName = "力量"
var attributeType = "UPDATE"
var placeholder = "power"

function onLoad(attr) {
    //UPDATE 类型建议将 setSkipFilter 设为 true
    //因为当触发者失去 力量 属性值时,属性源仍然在触发者身上,这是错误的
    attr.setSkipFilter(true)
	return attr
}

//编写对应的 run 函数
function run(attr, entity, handle) {
    //获取触发者的 AttributeData 数据(AttributeData 对象)
    var data = attr.getData(entity, handle)
    //为触发器移除名为 "力量" 的属性源
    //因为 "力量" 这个属性源中含有 "攻击力" 这个属性
    //如果我们不移除它,就会重新左脚蹬右脚的情况
    AttributeAPI.takeSourceAttribute(data, "力量")

    //通过 attr.getRandomValue 获取触发者的对应属性值
    var powerValue = attr.getRandomValue(entity, "力量", handle)
    //判断,触发者的力量属性值是有效,因为我们 setSkipFilter 设为 true 了,所以我们要手动判断
    if (powerValue > 0) {
    //通过 attr.getRandomValue 获取触发者的攻击力属性值
        var attackValue = attr.getRandomValue(entity, "攻击力", handle)
        //计算需要增加的属性值,因为需要增加 力量% 的属性,所以用 攻击力 * 力量 / 100,简单的数学
        var addValue = attackValue * pownerValue / 100
        //通过 Arrays.asList 生成一个 List<String> 列表
        //注意这里 "攻击力: " + addValue 被拼接成了一个字符串
        var list = Arrays.asList("攻击力: " + addValue)
        //为触发器增加名为 "力量" 的属性源,属性源中的属性是 list
        AttributeAPI.addSourceAttribute(data, "力量", list)
        //返回
        return true
    }

    return faluse
}