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
}