FreeKill/docs/diy/02-skilltype.rst

48 lines
2.0 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. SPDX-License-Identifier: GFDL-1.3-or-later
fk技能类型总览
==============
fk的目的是便于三国杀的DIY而三国杀DIY的核心就是制作各种技能了。
fk的技能分为两大类这两大类又各自细分为更小的分类
关于这部分的源码详见lua/core/skill.lua和lua/core/skill_type下的所有文件
- 可使用类技能UsableSkill
- 触发技TriggerSkill在满足一定条件时能够通过被动触发发挥效果的技能
- 主动技ActiveSkill玩家主动发动的技能
- 视为技ViewAsSkill将一张牌当做另一张牌的技能
- 状态技StatusSkill
- 距离技DistanceSkill影响距离计算的技能
- 攻击范围技DistanceSkill影响攻击范围计算的技能
- 手牌上限技MaxCardsSkill影响手牌上限计算的技能
- 禁止技ProhibitSkill禁止成为卡牌目标的技能
- 卡牌增强技TargetModSkill影响卡牌使用次数上限、目标上限、距离限制等等的技能
- 锁定视为技FilterSkill让一张牌强制视为另一张牌的技能
其中,触发技的逻辑最为复杂,但是\ :doc:`已经在这里分析过了 <../dev/gamelogic>`\ ,故不再赘述。
主动技和状态技应该不算难,先按下不表。视为技与神杀有所区别,区别如下:
在神杀中视为技是否可响应是专门写在enabled_at_response的fk则不然看倾国的代码
.. code:: lua
local qingguo = fk.CreateViewAsSkill{
name = "qingguo",
anim_type = "defensive",
pattern = "jink",
card_filter = function(self, to_select, selected)
-- ...
end,
view_as = function(self, cards)
-- ...
end,
}
可见并没有编写跟响应时候有关的函数也没有声明出牌阶段不可用。其中的奥妙就在于pattern中视为技可以转化的卡牌都应该写在pattern里面Fk会根据pattern的内容判断技能出牌阶段是否可用、是否能够响应等。