卡牌

卡牌是酒馆的核心,而商店中的所有卡牌都是基于卡牌模板生成的。为了能让玩家找到并购买卡牌,我们首先需要设计卡牌的卡牌模板。

添加一个卡牌模板

我们以创建非拓展包的人族卡牌为例,首先找到动作核心人族初始化

位置

商店阶段>卡牌模板>模板初始化>卡牌数据>核心人族初始化

P1

可以看到,我们是通过动作添加一个卡牌模板来创建卡牌模板的。下面我们来简述这个动作所有参数的作用:

  • 卡牌名称:只用于展示,无法根据卡牌名称区分卡牌。
  • 卡牌识别符:用于赋予卡牌一些特性,比如当你希望你的卡牌无法三连时,可将此参数改为“无法三连”。
  • 卡牌子类:卡牌子类跟卡牌识别符类似,也用于识别和区分卡牌。其主要功能是标识卡牌的子种族或阵营(如“原始虫群”、“塔达林”、“埃蒙”等)。
  • 卡牌种族:用来设置卡牌所属种族。
  • 初始单位:用来设置卡牌的初始单位。
  • 特效字符串:为了让卡牌具有特定的功能,我们必须使用“特效字符串”。这也是制作卡牌最重要的环节。
  • 词条说明字符串:如下图所示的词条提示,它就是根据“词条说明字符串”自动生成的。

p11

  • 虚空投影:值为时,卡牌将自带虚空投影。
  • 卡牌自定义描述:值为无文本时,将自动生成描述。否则卡牌描述将变为此值。
  • 卡牌自定义描述(三连后):与“卡牌自定义描述”类似,不过是三连后的描述。
  • 卡牌星级:1-6星的卡牌可进入商店。

卡牌识别符

用于赋予卡牌一些特性。

所有卡牌识别符

  • 无法三连:参考卡牌「挖宝奇兵」。令卡牌无法三连并且显示为暗金色。暗金色具体说明请参考“金色卡牌与三连”。
  • 无法进入卡池:这样的卡牌无法在商店中找到,出售后也不会补充到商店中。
  • 无:无特性
  • 建筑卡:参考角色“行星要塞”的特殊卡牌,包含了“无法进入卡池”的特性。
  • 红卡:将卡牌变为红色,并没有具体作用。你可以根据自己的想法赋予特性。
  • 辅助卡:参考角色“诺娃”的特殊卡牌,无法进入卡池,并且出售无法获得晶体矿。
  • 出售免费。
  • 虫卵:用于识别卡牌是否为虫卵。
  • 比赛冠军:本是用于制作寿仙杯冠军的卡牌,现在也可以用来制作特典卡牌。其特性是:每局游戏初始化时,有一定概率为卡池添加1张此卡牌,否则无法找到该卡牌。

自制卡牌识别符

假如我想做一个卡牌识别符,让进场的卡牌无法被出售(只能被摧毁)。请参考以下步骤

  1. 创建卡牌识别符
    找到预设类型卡牌识别符

    位置

    卡牌>卡牌识别符

    在其中创建新的识别符即可。
  2. 使用卡牌识别符
    找到动作尝试出售卡牌

    位置

    玩家>玩家牌库>尝试出售卡牌

    然后添加以下代码:
    p2p3
    我们只需判断玩家已选择的卡牌的成员卡牌识别符是否为进场无法出售即可。

卡牌子类

卡牌子类跟卡牌识别符类似,也用于识别和区分卡牌。

所有卡牌子类

  • UED:废案阵营。
  • 原始虫群:参考卡牌「原始刺蛇」,选择此子类的卡牌可以发现原始专有升级,并且可以跟“供养”联动。
  • 佣兵:废案阵营。
  • 无:无特性。
  • 塔达林:目前无特性,可以考虑为其添加专属升级。
  • 刀锋女王:用于识别卡牌是否为「刀锋女王」。
  • 埃蒙:选择此子类的卡牌可以发现黑暗专有升级(目前只有“虚空能量”)。

想要实现“卡牌子类”具有专属升级,请参考“升级池”。

卡牌种族

类型为整数,实际上只有4个值,我们用4个常量表示:

  • _Terran值为0,表示人族卡牌。
  • _Zerg值为1,表示虫族卡牌。
  • _Protoss值为2,表示神族卡牌。
  • _Void值为3,表示中立卡牌。

注意

无法添加新的种族,请使用卡牌子类来细分种族的阵营。

初始单位

如果你的单位种类超过了3,请使用动作为刚才的模板补充额外单位,参考卡牌「步兵联队」。

词条说明字符串

词条说明字符串由a-z26个字母组成。每一个字母对应一个词条。找到动作初始化特殊词条在此添加或修改词条。

位置

玩家卡牌特效>特殊词条>初始化特殊词条

注意

必须使用一个字符代表一个词条,切记不要用多字符代表一个词条。如果你不满足于26个词条的上限,请找到常量_特殊词条数量上限和函数特殊词条索引字符对应进行修改。

自动补充词条说明

一些子特效字符串将自动为卡牌的“词条说明字符串”添加词条。你只需要手动补充那些遗漏的词条即可。你也可以修改函数自动填充左侧特殊词条,来修改自动补充功能。

自制词条

目前酒馆最多支持26个词条,因此不推荐新建词条,而是更改目前一些不再被使用的废弃词条。修改步骤如下:

  1. 在动作初始化特殊词条中修改动作添加一个特殊词条,来修改词条。其参数如下:
  • 名称
  • 字符代号:用一个字母表示该词条。仅做修改时,不需要修改此参数。
  • 标志颜色
  • 介绍
  • 对话框中显示高度
  • 可简化:参考下图,值为时,购买后的卡牌将只显示一个“感叹号图标”。
  • 简化后标题宽度:用于确定“感叹号图标”的位置。

p12
p13

  1. 按照1对应a2对应b...的关系。根据你修改词条的字符代号,在文件夹“玩家卡牌特效>特殊词条>变量/常量”找到对应的常量。比如c对应的常量是_特殊词条 - 空投索引。然后将常量名称修改为你需要的名称。这些常量就是词条对应的索引。

提示

你可以使用函数特殊词条索引字符对应,来自根据“词条索引”为“词条说明字符串”添加词条。 也可使用函数获得特殊词条名称获得特殊词条名称带冒号快速获取词条名称。

卡牌描述

卡牌自动生成描述的规则为:

  • 卡牌自定义描述为无文本,则自动生成普通描述文本。
  • 卡牌自定义描述(三连后)为无文本且卡牌自定义描述也为无文本,则自动生成三连描述文本。
  • 卡牌自定义描述(三连后)为无文本且卡牌自定义描述不是无文本,则三连描述文本和普通描述文本相同。

想知道“特效字符串”如何自动生成卡牌描述请参考自动生成描述

想要自动生成又想自己加东西?

  • 你可以使用动作卡牌自动描述的补充描述来既保证卡牌能自动生成描述,又能在其后面补充自定义的描述。可参考卡牌「暗影卫队」中如何使用的。
  • 或者使用函数根据特效字符串生成描述文本,你可以自定义描述文本的时候,不用浪费时间写一些可以自动生成的文本。参考卡牌「阿塔尼斯」的卡牌自定义描述。

金色卡牌与三连

卡牌的金色分为普通金色暗金色。判断规则为:

  • 卡牌识别符值为无法三连,则卡牌是暗金色卡牌。
  • 卡牌变量的成员金色卡牌识别符值不为无法三连,则是金色卡牌。

三连卡牌的过程为:将卡牌变为“金色”卡牌,合并场上两张卡牌的单位,并给玩家三连奖励。因此我们可以知道,一张卡牌只要是金色,且卡牌识别符的值不是无法三连那它就具有三连效果。

提示

想将一张非金卡牌变为金色,只需要修改全局数组玩家的卡牌中对应卡牌的金色

熟练使用卡牌模板

如果你想了解更深层次的机制,请往下看。

卡牌模板索引

当动作添加一个卡牌模板运行后,它会将卡牌模板的数据存入一个全局数组变量卡牌所有模板。这个数组保存了所有卡牌模板的数据,因此我需要某个卡牌模板的数据时,只需要知道它在卡牌所有模板中的索引(也就是“卡牌模板索引”),然后就能得到卡牌模板的数据。

卡池

我们将“卡牌模板索引”塞入卡池,让玩家可以在商店中找到并购买它所对应的卡牌。这一步将是自动完成的,我们无需操作。

卡池初始化

具体如何把“卡牌模板索引”塞入卡池,请参考:商店阶段>卡池>卡池初始化

商店卡牌和暂存区卡牌

商店运作的机制

  1. 从卡池中抽取“卡牌模板索引”。
  2. 根据“卡牌模板索引”创建卡牌,陈列在商店中。
  3. 玩家购买卡牌,获得该商品的“卡牌模板索引”。
  4. 根据被购买商品的“卡牌模板索引”,生成卡牌到玩家手里。

我们从这个机制中可以知道,商店中的卡牌只是“卡牌模板索引”的体现,你是无法修改商店卡牌的具体数据的。

陈列的商品的卡牌模板

为了手动获取商店中某个玩家的某张卡牌的“卡牌模板索引”,我们可以找到全局数组变量陈列的商品的卡牌模板,我们可以看到这是一个二维数组。为了根据索引获取数据,我们还需要全局数组变量卡牌所有模板。比如我们想知道玩家2的商店中,在5号位摆放的卡牌的种族是不是人族时,我们可以这样写:
p4

值得注意的是,暂存卡牌的“卡牌模板索引”也储存在陈列的商品的卡牌模板中。比如我们想知道玩家3的暂存4号位的卡牌模板索引,我们可以这样写:
p5

你可以直接认为:“暂存区中的卡牌”和“商店中的卡牌”唯一的区别是“进场和三连”前者不需要花钱。 因此你完全可以把它们等同看待。

索引

陈列的商品的卡牌模板中索引1到_陈列商品数量上限储存的是“商店中的卡牌”的“卡牌模板索引”;(_陈列商品数量上限+1)到_陈列商品数量+手牌数量上限是“暂存的卡牌”的“卡牌模板索引”。

卡牌模板索引为0

陈列的商品的卡牌模板储存的某个值为0时,表示此玩家的此位置是一个空位。

玩家已选择的陈列商品

变量玩家已选择的陈列商品表示当前玩家选择的“商店中卡牌的位置”或者“暂存卡牌的位置”。(注意,如果是观战玩家,那他选择的位置是观看对象的卡牌位置)。

参考

函数获取玩家商店中卡牌的数量是如何实现的:

p6

玩家的卡牌

玩家的卡牌特指已进场的卡牌,因此不包括暂存卡牌。当商店卡牌或暂存卡牌进场时,会根据进场卡牌的“卡牌模板索引”获取到卡牌模板数据,然后克隆一个卡牌出来。我们用全局数组变量玩家的卡牌储存玩家卡牌的所有数据。不同于陈列的商品的卡牌模板只储存“卡牌模板索引”,玩家的卡牌储存卡牌的所有数据。

玩家已选择的卡牌

变量玩家已选择的卡牌表示当前玩家选择的卡牌位置(注意,如果是观战玩家,那他选择的位置是观看对象的卡牌位置)。

卡牌模板索引为0

玩家的卡牌的成员模板索引为0时,表示此玩家的此位置没有卡牌。如果为负则表示是特殊卡牌(如虫卵牌的卡牌模板索引为-1)

遍历玩家的卡牌

使用动作为玩家每张卡牌执行来遍历玩家所有已进场的卡牌。该动作将自动忽略模板索引为0的空卡牌。使用函数触发卡牌索引来获取当前遍历到的索引。

运用卡牌模板

记录并获取卡牌模板索引

卡牌模板初始化后,全局数组变量卡牌所有模板会进行一次重新排序。我设计了一个卡牌模板,那么如何知道这个卡牌模板的“卡牌模板索引”具体是多少呢?为此我们需要使用动作记录刚才添加的卡牌模板的索引和函数获取卡牌模板索引。参考「原始刺蛇」的记录和使用:

  1. 使用动作记录刚才添加的卡牌模板的索引添加一个卡牌模板下方,用创建的常量_模板ID - 原始刺蛇作为模板id。

p15

  1. 使用函数获取卡牌模板索引,用对应的模板id,即_模板ID - 原始刺蛇来获取“卡牌模板索引”。

p16

手动给玩家添加卡牌

使用动作塞给玩家一张卡可为玩家立即添加一张卡牌。默认添加到暂存区,如果暂存区满则直接进场(有定点部署的卡牌依然会让玩家选择部署位置)。如果场上卡牌也满了,则作废。参数只允许暂存时,暂存区满则不会直接进场。