ET 数值与订阅Numeric

发布于 2020-06-20  444 次阅读


本篇描述ET中的数值监听组件。

参考:ETbook 5.6数值组件的设计
代码:Model/Module/Numeric文件夹

熊猫在book中讲到了,传统面对对象设计思路中,复杂的数值模板继承带来的难以维护。
我们经常可以看到角色类拥有几十个字段的情况,某个字段发生了变化时设置isDirty = true用于判断是否需要重新计算值。
每个属性受到5个字段影响,与MaxHp关联的5个字段是:
MaxHpBase、MaxHpAdd、MaxHpPct、MaxHpFinalAdd、MaxHpFinalPct

ET的数值组件用容器存储数值,如果一个角色有数值计算的必要,则给它添加一个数值组件;
相对的,很多NPC没有战斗逻辑,也就不需要添加这个组件。
每个属性类型受到5个字典中的值影响,。

应用场景

有一名战士,更换了一件板甲胸,属性如下:
微光胸甲:防御300,力量15,体力30,智力15,HP上限200,MP上限300,附带技能:微光护罩
微光护罩:生成一个护罩,提供临时生命500点,持续时间5秒,冷却30分钟。
那么,道具设计怎么与数值组件关联的呢?

数值框架
策划根据游戏类型和产品特殊设计决定使用哪种攻防公式:
减法公式、等式、比防公式、(四个元素构成的等式)完美公式
公式方面还有:命中率公式、状态生效概率公式、暴击率公式等,作为增加游戏性的辅助手段。
力量、体力、智力等,根据数值框架会转化为多种攻防数据,或者不相干的游戏性数据。

闪躲:使你完全避免一次物理攻击的概率(无法闪躲来自身后的攻击)。
招架:使用武器招架,使你完全免受一次物理伤害,重置你的普通攻击间隔。
格挡:使用盾牌减少受到的伤害。
攻击力:
防御力:

有两种属性变更思路,一种是重新计算属性值,一种是根据更换的装备/Buff计算差值。这部分的计算逻辑,在人物的穿戴装备方法中定义。
根据一切皆Buff的设计思路,一个装备,用有任意条属性,可以理解为对应数量的Buff。
比如:持续时间无限的300力量Buff

但是,属性来源统计不影响数值组件的存储过程。

微光胸甲有防御属性,提供防御

将关联值进行了分组,缩小了值变脏的范围,比如:
在战斗中,MaxHp表示血量上限,其由5个值影响:MaxHpBase/MaxHpAdd/Max

数值组件的更新机制

数值变化消息分发机制


关注成长,注重因果。