跳转至

SkillExtraInfo 技能额外参数

设计SkillExtraInfo的目的主要用于传递一些客户端生成的动态变量。

考虑到技能释放频率比较高,并且如果每次释放一个动态技能时都要为其载入配置好的参数值效率不高,因此技能实例被设计成作为一个执行器而不是一个执行单元,也就是说,技能实例入参只有玩家实体这一个变量。

因此设计了这样一个储存器,用来保存客户端中得到的一些数据。

方法

get / put

这两个方法与Map的使用方法一致,不再过多赘述。

注意

存放在其中的变量使用Jackson序列化成字符串后进行传递,如果存放的参数非基本数据类型的话,需要自己为该类型增加Jackson的序列化器/反序列化器:@JsonSerialize/@JsonDeserialize

replace

当你需要替换额外参数中的键值时,需要用到该方法,否则put一个已经存在的key-value时不会生效,并且生成一条警告日志。

getExtraObject

ExtraObject是作为存储的基本单位,里面包含了对象实例以及对象类型,方便对象的反序列化。get方法返回的实例会强制转换成你所声明的变量,当你不确定存储的变量类型时,使用该方法会更加方便。

后话

回过头来看设计这么一个类型感觉有些多余,当初时为了传递技能攻击目标时加上的,自己在使用的时候感觉有点繁琐,而且没想出来还可以传些什么别的参数,或许当初直接把获取攻击单位抽离出来做为一个额外的栏目会更好,比如写几个获取攻击目标的选择器,让技能编写者自己去选哪个效果用哪个选择器。不过写都写了,也许会有用呢。