单位属性
单位属性是影响单位行为的一系列数值。
单位数值属性由基础值、百分比变化值两部分组成;基础值 * (100 + 百分比变化值) / 100 得到实际参与游戏运行的最终值; 在需要选择单位数值属性类型的地方,可以选择的内容有:
- 最终值(实际值)
- 基础值
- 百分比变化值
部分单位属性实际是由两个数值合并而成。
实际值 = 基础值 * (1 + 百分比 / 100)
理解这点,才能明白修改单位的三个api[set],[get],[add]内在区别。
-- 获取的是 实际值
u:get '攻击'
-- 基础值设置为10,百分比设置为0,实际值(计算结果)为10
u:set('攻击', 10)
-- 基础值增加10,百分比不变
u:add('攻击', 10)
-- 百分比增加10,基础值不变
u:add('攻击%', 10)
-- 会报错
u:get '攻击%'
-- 会报错
u:set('攻击%', 10)
此外影响单位属性的还有最大值和最小值,所以实际公式应该为
实际值 = min(最大值,max(最小值, 基础值 * (1 + 百分比 / 100)))
不过最大值和最小值并不一定存在,当它不存在时,就不会对单位属性有影响。
u:set('攻击', 100)
print(u:get '攻击')
u:set_attribute_max('攻击', 20)
print(u:get '攻击')
u:set_attribute_max('攻击')
print(u:get '攻击')
显示的结果为
100
20
100
为了节约网络资源,默认的情况下大多数的属性都不会通知客户端。你可以根据自己的需要选择同步哪些属性,以及用什么[同步方式]。
属性的最大值、最小值和同步方式,都有一个全局的值和单位自己的值。单位的属性只受单位自己的值影响。单位的值在单位创建时,从全局值复制而来。所以修改全局值不会影响已经存在的单位,只会影响之后创建的单位。
我们提供了21个内置属性和178个[自定义属性]。其中有16个属性是引擎内置的属性,它们确保了所有的基础设施的正常运作,无法禁用;此外还有5个内置属性是由脚本库以及客户端UI提供支持的属性,当你有能力修改这两部分内容时是可以被移除的。
引擎内置属性
攻击
在[伤害结算]中,单位普通攻击的初始伤害等于攻击
。