移动牌
==========

本节讲述关于移动牌的结算规则。移动牌指的是，玩家用手把一张游戏牌从一处移动到
另一处的操作。整个游戏中最最常见的事件就是移动牌。

毫无疑问，移动牌操作的对象只能是实体牌。

移动牌本身属于事件之一。在事件的各要素中，其只有主效果。

移牌信息
------------

移动牌事件携带的数据自然就是移牌信息了。移牌信息有以下要素：

- 要移动的实体牌
- 移动的来源区域
- 移动的目标区域
- 移动的来源角色
- 移动的目标角色
- 移动类型：无类型，摸牌，弃牌，交给，置入，置入弃牌堆，获得，交换，使用，
  打出，判定，重铸
- 移动的发起者
- 相关的技能名
- 移动是否可见
- 私人牌堆名（在目标区域为私人牌堆的情况下）

在一次移动牌中，这个信息可以同时携带多个，用来表示在一次移动事件中同时进行两次
移动。

.. hint::

  同时移动的例子就是鲁肃的缔盟中的交换双方手牌，这个交换手牌分为两次移动：

  1. 将双方的手牌同时移动到处理区；
  2. 将处理区中一方的手牌同时移动到另一方手中。

移牌的流程
-------------

移动牌涉及两个触发时机：卡牌移动前、卡牌移动后。都没有承担者。

fk.BeforeCardsMove      @卡牌移动前
（若在触发本时机技能的on_use函数中return true则导致本事件与后续此事件流程终止）

fk.AfterCardsMove      @卡牌移动后

::

  若发现试图将牌置入已废除的区域，改为置入弃牌堆
  触发“卡牌移动前”
  将对应的卡牌从一处移动到另一处
  触发“卡牌移动后”

  两个时机都没有承担者，data为MoveCardsData，继承MoveCardsDataSpec。
  具体参考解析TriggerData里的MoveCardsDataSpec。

其中，卡牌移动前这个时机可能会有一些触发技修改移牌信息。

.. hint::

   有一部分规则以触发技的形式存在着。例如一些牌说明着自己离开某某区域时或者
   进入某某区域时改为销毁之，这个就由一个负责销毁牌的技能来进行。

摸牌流程
-----------

fk.BeforeDrawCard      @摸牌前
（若在触发本时机技能的on_use函数中return true则导致本事件与后续此事件流程终止）

::

  触发“摸牌前”
  根据摸牌信息，将牌堆中相关的牌移动到角色手中
  “摸牌前”中的data为DrawData，继承DrawDataSpec


摸牌是移动的一种，但是它特地增设了“摸牌前”时机。这是为了实现从牌堆底摸牌。
