您好,

我想了解一件有趣的事情,那就是如何设计和构建一个像ARPG样的动作技能系统,比如说像Diablo这样的游戏。
我需要这样一种稍微复杂点的技能系统,它包含活跃技能和变异技能。
活跃技能可以比如说射出一个火球,它会飞行并在与敌人接触时造成伤害,但也可能在攻击时有10%的概率生成一个火球。
变异则能改变其他技能的行为,例如改变火球在接触敌人时会爆炸,对着半径范围内所有敌人造成伤害,或者改变原始技能从生成一个火球变成生成两个并在指定的锥度生成。
我的现在困难的是设计出这样一个模块化的系统既能灵活地添加许多不同类型的能力,又不至于过度地装逼(engineering)。

我的第一步是尝试把技能系统设计成块的方式。每个块可能是Spawn VFX、Deal Damage、ApplyStatus、Shake Screen 等等。这样做需要使用字符串参数来实现技能的灵活性,但我意识到这种方法可能还有点儿啰嗦难用。
再我试着做另一种是:我将技能定义为自己的class,每个技能都自己实现相关的逻辑如处理效果、碰撞、动画等。但这样做也带来了另一个问题:代码大量的重复。

所以现在,我想请问大家有什么好的结构、模式、架构或方向可以应用于这个技能系统。