技能相关架构

classDiagram

Views0
PublishedFeb 7, 2026

Loading actions...

5 minBeginnerpromptSingle file

Skill content

Main instructions and any bundled files for this skill.

markdown

技能相关架构

classDiagram
    direction LR
    Skill <|-- ActiveSkill
    ActiveSkill <|-- MainPhaseSkill
    Skill <|-- TriggeredSkill
    namespace 大部分技能 {
        class ActiveSkill {
            +bool canUse()
            +void executeProtocol()
        }
        class TriggeredSkill {
            ResolveResult execute()
        }
        class MainPhaseSkill {
            +bool canUse() = false
            +bool mainPhaseNeedNotify()
        }
    }
    class Skill {
        +SkillId skillId
        +bool isInitialSkill
    }
    Skill <|.. InvalidSkill
    OneTurnSkill <|.. CannotPlayCard
    Skill <|.. OneTurnSkill
    Skill <|.. BeforeDieSkill
    Skill <|.. ChangeDrawCardCountSkill
    Skill <|.. ChangeGameResultSkill
    Skill <|.. WinSkill
    Skill <|.. ConvertCardSkill
    OneTurnSkill <|.. MustReceiveMessage
    namespace 生成出的技能 {
        class InvalidSkill {
            +bool isInitialSkill = false
        }
        class OneTurnSkill
        class CannotPlayCard {
            -List cardType
            +bool forbidAllCard
            +bool cannotPlayCard()
        }
        class MustReceiveMessage {
            +bool mustReceive()
            +bool cannotReceive()
        }
    }
    namespace 特殊的技能 {
        class BeforeDieSkill
        class ChangeDrawCardCountSkill {
            +int changeDrawCardCount()
        }
        class ChangeGameResultSkill {
            +void changeGameResult()
        }
        class WinSkill {
            +void checkWin()
        }
        class ConvertCardSkill {
            +card_type cardTypeA
            +List<card_type> cardTypeB
            +bool must
            +void onConvert()
        }
    }
    Skill <|.. SendMessageDirectionSkill
    Skill <|.. SendMessageCanLockSkill
    Skill <|.. SendMessageCardSkill
    namespace 传情报相关 {
        class SendMessageDirectionSkill {
            +bool checkDir()
        }
        class SendMessageCanLockSkill {
            +bool checkCanLock()
        }
        class SendMessageCardSkill {
            +bool checkSendCard()
        }
    }

技能Skill是基类。其中有个变量叫做isInitialSkill,表示是否是开局就拥有的技能,只有isInitialSkill=true的技能会被无效。

  • 有一种特殊的技能叫InvalidSkill,它是某个isInitialSkill=true的技能被无效后套了一个壳,回合结束的时候会放出来。
  • 有一种特殊的技能叫OneTurnSkill,回合结束就失去这个技能。

技能分为两类,ActiveSkillTriggeredSkill

  • ActiveSkill是出牌阶段、争夺阶段、有人濒死时主动使用的技能。下面有一种特殊的子类:MainPhaseSkill, 仅在出牌阶段可以使用的技能,这种技能如果没有使用,直接点结束出牌阶段,会弹提示。
  • TriggeredSkill是其它时间触发的技能。

InvalidSkill只继承于Skill,不属于ActiveSkillTriggeredSkill

如果一个玩家不可能可以使用技能且不可能可以出牌,则争夺阶段、濒死求澄清会被跳过。

  • 当一个玩家有ActiveSkill的技能并且canUse方法判断争夺阶段可以使用技能,或者他是隐藏角色并且从未正面过,说明他可能可以使用技能。
  • 当一个玩家有牌且没有被禁止出所有牌,说明他可能可以出牌。

不能出牌

有一个特殊的技能叫CannotPlayCard,拥有这个技能的玩家不能出牌,它继承于OneTurnSkill,它有两个参数,被禁的卡牌类型列表、是否是禁了所有牌。

[!NOTE] 【禁闭】【强令】【调虎离山】会让目标玩家/所有玩家获得一个CannotPlayCard技能。

卡牌转化

有一种特殊的技能叫ConvertCardSkill,拥有这个技能的玩家的卡牌会被转化,它有三个参数,A、B、是否必须必须转化。

当玩家打出的卡牌实际是A时:

  1. 如果A必须当作B使用,且玩家想要当作的卡牌并不是B,则一定不能使用。
  2. 如果上一行不成立,玩家想要当作的卡牌本来就是A时,不发生转化,直接打出。
  3. 如果A必须/可以当作B使用,玩家想要当作的卡牌是B,则发生转化。

[!NOTE] SP李宁玉的应变继承于ConvertCardSkill(Jie_Huo, Wu_Dao, false)。 变则通让所有玩家获得一个继承于ConvertCardSkill(A, B,true)OneTurnSkill的技能。

必须接收/必须不能接收情报

有一种特殊的技能叫MustReceiveCardSkill,本回合必须接收/必须不能接收情报,它继承于OneTurnSkill

[!NOTE] 小铃铛和边云疆会让别人获得一个继承于MustReceiveCardSkill和的技能。

传情报相关的技能

  • 有一种特殊的技能叫SendMessageDirectionSkill,它会影响可以传出情报的方向
  • 有一种特殊的技能叫SendMessageCanLockSkill,它会影响传出的情报是否能锁定
  • 有一种特殊的技能叫SendMessageCardSkill,它会影响能传出哪张情报

相同类型的技能,后来的技能会使先来的技能失效

身份规则以外宣胜的技能

有一种特殊的技能叫WinSkill,它会在身份规则以外宣胜

影响游戏结果的技能

有一种特殊的技能叫ChangeGameResultSkill,它会影响游戏结果

自己死亡前的技能

有一种特殊的技能叫BeforeDieSkill。对于这种技能,自己无需存活也能发动。

影响摸牌阶段摸牌数量的技能

有一种特殊的技能叫ChangeDrawCardCountSkill,它会影响摸牌阶段摸牌的数量。

Share: