内容包维护工具使用说明
面向策划。日常改卡、改状态、改职业和装备,只用这一份。
积木「能表达什么」的白话对照见 Docs/策划能力词典.md。程序核对用的英文合同见 Docs/内容能力词典.md。
当前正式工具是 Electron + Vue 3 + Element Plus 桌面程序。旧的 .NET / WPF 工具已废弃,不要再用。
1. 工具在整条流水线里干什么
策划改的永远是 内容数据库,不是 Unity 场景里的 JSON。
| 位置 | 是什么 | 谁改 |
|---|---|---|
ContentSource/lof-content.db | 唯一权威编辑源(SQLite) | 本工具保存时写入 |
ContentSource/Backups/ | 每次保存 / 删除 / 发布的时间戳备份 | 工具自动 |
Assets/StreamingAssets/Content/ | 编译后的只读包(catalog.json 等) | 发布到 Unity 才更新 |
Assets/Resources/CardArt/ | 卡面图片文件 | 工具导入卡图时复制 |
不要用手改 catalog.json。改了也不会进数据库,下次发布还会被覆盖;校验哈希对不上时游戏会拒绝加载。
工作顺序永远是:
- 在工具里改
- 保存(写入数据库)
- 验证整库(零
ERROR) - 发布到 Unity
- 回 Unity 等资源刷新,进战斗点一遍
只保存、不发布:游戏里还是旧包。
2. 怎么打开
本机有完整工程时,任选一种:
- 双击
Tools/启动卡牌维护工具.cmd - Unity 菜单:
Tools → Legends Of Furry → 打开卡牌维护工具
要给没有工程的电脑体验:在开发机双击 Tools/打包内容编辑器给策划.cmd,把生成的整个 Tools/PlannerOfflineKit 文件夹拷走,双击其中的 StartEditor.cmd。脱机包可以改库并保存;验证 / 发布仍需要完整工程。打包时请先关掉正在运行的编辑器,否则 app.asar 会被占用。
开发调试:Tools/CardEditor.Vue 下执行 pnpm install 后 pnpm dev。
窗口标题:Legends of Furry · 内容包编辑器。不要用浏览器打开页面,必须走 Electron。
3. 窗口总览
从上到下四层:
- 系统菜单栏(窗口最顶,Windows 原生菜单)
- 工具栏(深蓝条:新建 / 保存 / 验证 / 发布 / 版本号)
- 内容分区菜单(白底横条:卡牌、状态、职业……)
- 工作区(左列表 + 中间属性 + 右面积木/源码)
- 状态栏(最底:未保存提示、最近一次操作结果)
3.1 系统菜单
| 菜单 | 项 | 快捷键 | 作用 |
|---|---|---|---|
| 文件 | 保存 | Ctrl+S | 保存当前分区正在编辑的那一条 |
| 文件 | 刷新 | Ctrl+R | 从数据库重新加载(未保存的改动会丢) |
| 文件 | 退出 | 关闭程序 | |
| 内容 | 卡牌 / 状态 / 职业 / 角色 / 装备 / 卡池 / 牌库 / 稀有度 / 资源 / 战斗规则 | 切换分区,与横条菜单相同 | |
| 编辑 | 新建 | Ctrl+N | 当前分区新建一条 |
| 编辑 | 复制 | Ctrl+D | 复制当前条(ID 会加 _copy) |
| 编辑 | 删除 | 删除已保存条目;被引用时可能失败 | |
| 编辑 | 撤销 / 剪切 / 复制文本 / 粘贴 | 针对输入框的系统编辑,不是「撤销整张卡」 | |
| 发布 | 验证整库 | 跑内容编译器,问题出现在「校验问题」页 | |
| 发布 | 发布到 Unity | 校验通过后写入 StreamingAssets |
3.2 工具栏按钮
| 按钮 | 作用 |
|---|---|
| 新建 | 当前分区新建。卡牌会带安全默认值;稀有度一般不要随便新建 |
| 复制 | 深复制当前条,并改写行为里的 ID,避免撞车 |
| 保存 | 写入 SQLite。若停在「源码」页,会先尝试把源码应用到积木 |
| 删除 | 已保存的才能删。外键挡住时先取消牌库引用或先删引用方 |
| 验证整库 | 用权威编译器扫全库 |
| 发布到 Unity | 左边输入框填版本名,默认 development |
| 回退版本 | 右边输入框填已经发布过的版本名,只改 current.json 指针 |
| 刷新 | 放弃界面未保存改动,从数据库重读 |
版本名只能用字母、数字、点、横线、下划线。
状态栏出现 「● 未保存」 表示当前卡牌(或当前分区对象)改过还没点保存。
4. 稳定 ID 规则(所有分区通用)
稳定 ID 是程序认的名字,保存后不能改。要换 ID 就「复制」再删旧的。
必须:
- 以小写英文字母开头
- 只含小写字母、数字、
.、_、- - 例如:
sword_thrust、sharp、warrior
不要用中文、空格、大写。显示给玩家看的字写在「名称」「描述」里。
5. 分区:卡牌
横条点「卡牌」。这是最常用的一页。
5.1 左侧列表
- 搜索:按 ID 或中文名过滤。
- 分组方式:
- 按类别分组:用卡上的「类别/家族」字段(
familyId)。常见值见下表。 - 按卡池分组:用「卡池 ID」;空的进「未入卡池」。
- 按稀有度分组:灰 / 蓝 / 紫 / 金 / 红。
- 按类别分组:用卡上的「类别/家族」字段(
分组可以折叠。点一条进入编辑。
类别/家族常用值(填英文键,列表里显示中文):
| 键 | 列表里怎么显示 | 典型用途 |
|---|---|---|
none | 基础 | 爪击、疾走、格挡、包扎 |
sword | 剑 | 武器从属 |
shield | 盾 | 副手从属 |
bow | 弓 | |
staff | 法杖 | |
scepter | 手杖 | |
dagger | 匕首 | |
necklace / crystal / crystal_ball / cross / cloak | 对应饰品 | 装备从属 |
equipment | 装备 | 泛装备 |
test | 测试 | 临时试验 |
可以写尚未出现在上表的新家族,列表会原样显示键名。
5.2 基础属性
| 字段 | 说明 |
|---|---|
| 稳定 ID | 见第 4 节。已保存后锁定 |
| 卡牌名称 | 战斗和选牌里显示的中文名 |
| 描述 | 给玩家看的规则说明。这里写人话;真正结算看积木,不要只改描述指望游戏变效果 |
| 稀有度 | gray 灰、blue 蓝、purple 紫、gold 金、red 红。红多用于诅咒 |
| 类别/家族 | 见上表,用于分组和查询 |
| 卡池 ID | 加入哪个抽取池。空 = 不进任何池。武器从属一般填 sword、bow 等与武器对应的池 |
| 标签 | 可多选、可手打新标签。常用 attack(攻击牌)。查询积木「卡有标签」会读这里 |
| 卡图资源 Key | 一般导入图片后自动填,形如 card.sword_thrust.artwork |
| 加入策划测试牌库 | 勾选后这张会出现在固定牌库 planner_test,方便进战斗全卡测试 |
卡图:
- 把一张 PNG / JPG / JPEG 拖进虚线框,或点「选择 / 更换卡面…」
- 建议竖版、最长边不超过 2048、透明用 PNG
- 文件复制到
Assets/Resources/CardArt,旧图备份到ContentSource/Backups/Artwork - 一次只能拖一张。导入后仍要点 保存,发布后 Unity 才会用新图
- 不要在资源管理器里重命名已导入的图
5.3 费用
| 字段 | 说明 |
|---|---|
| 行动力 | 打出时扣的行动力,整数 ≥ 0 |
| 魔力 | 打出时扣的魔力 |
| 消耗全部行动力 | 打出时把当前剩余行动力花光(连斩类) |
| 消耗全部魔力 | 同上,针对魔力 |
「积木里的数值」和「费用」是两件事:费用在打出前扣;积木里「这次花掉的行动力」读的是本次实际支付。
5.4 卡牌标记(勾选)
| 勾选 | 含义 |
|---|---|
| 攻击牌 | 记为攻击;部分被动/问询只对攻击生效 |
| 打出后消耗 | 打出进消耗库,本场不洗回抽牌库 |
| 临时牌 | 战斗结束不回总牌库 |
| 诅咒 | 诅咒标记 |
| 无法打出 | 不能主动打出(纯触发/诅咒常用) |
| 启用 | 关掉等于这张不进发布内容(仍留在库里) |
5.5 主目标(打出时玩家怎么点)
这是卡面点选规则,不是积木里「挨个」找人。
| 字段 | 选项 | 含义 |
|---|---|---|
| 选择模式 | none 不用点 | 打出即结算,目标多用「自己」 |
self 自己 | 目标锁定出牌者 | |
unit 单位 | 玩家点一个单位 | |
cell 格子 | 玩家点棋盘一格 | |
direction 方向 | 玩家选一个方向(劈砍、穿云) | |
| 距离 | 整数格 | 能点多远。0 通常配合自己 |
| 阵营 | any 任意 / ally 友方 / enemy 敌方 | 谁能被点 |
| 生死 | any / alive 活着 / dead 已死 | 复活牌用 dead |
| 需要视线 | 勾选则中间不能被挡 | |
| 允许自己 | 点选单位时能不能点自己 |
劈砍这类「面前一排」:选择模式用 direction,积木里再用「挨个 → 面前一片」,效果目标选「当前这个」。不要指望在「造成伤害」的「对谁」里直接选所有敌人。
6. 积木画布(卡牌 / 状态 / 职业 / 角色 / 装备共用)
右侧三个页签:积木、源码、校验问题。
旧界面里的「简易效果 / 高级行为树」已经合并成这一套 Scratch 式积木。有「如果 / 重复 / 挨个」直接拖结构积木,不必换页。
6.1 积木盒(左)
四类,全部只能拖现成积木,不能写脚本。
时机(帽子)
拖到画布空白处,新建一条脚本。一条内容可以有多条时机。
结构
顺序、如果、重复、挨个。拖进某条脚本的蓝色凹槽。
效果
真正改生命、护甲、手牌的那一步。
判断
给「如果」用的条件。拖进去会变成一块「如果:某某」。
搜索框按中文名或英文键过滤。
6.2 画布(中)
- 黄帽子 = 时机。点帽子可以在右侧改时机种类。
- 蓝条 = 这条时机下面要做的事。把积木拖进「拖到这里」。
- 点积木选中(白边),右侧改参数。
- 已有积木可以拖到别的凹槽里排序或换父节点。不能拖进自己的内部(会成环)。
- 帽子(根顺序)不能拖到空白处丢掉。
- 「删除这块积木」会连子积木一起删。
每条时机最外面必须是一个顺序(工具会自动建根顺序,一般不用单独拖「顺序」,除非要在里面再套一层)。
「如果」有两个嘴:
- 则:条件成立
- 否则:不成立;可以空着
「重复」「挨个」只有一个嘴,里面的事会对每一次循环执行。
6.3 积木属性(右)
点不同积木,右侧字段会变。
| 积木类型 | 右侧主要填什么 |
|---|---|
| 帽子(根) | 时机 |
| 效果 | 做什么、对谁、数值;伤害还有伤害类型;上状态要填状态 ID |
| 如果 | 判断种类 |
| 重复 | 重复次数(目前属性面板按固定整数编辑) |
| 挨个 | 找出哪一群人/牌、范围(格) |
属性面板覆盖不了的复杂参数(动态公式、多条件 JSON)到 源码 页改嵌套 JSON,再点「应用到积木」。
常见伤害类型:normal 普通、fire 火、ice 冰、lightning 雷、light 光、dark 暗、poison 毒、true 真实。暗、毒、真实穿护甲。
效果上「对谁」目前下拉只有三种:self 自己、selected_unit 点选单位、current_graph_target 当前这个(挨个循环里正在处理的那一个)。一片人请用「挨个」,不要在单次伤害上选全场。
7. 时机一览
可打出的卡至少要有一条启用的「打出时」,否则验证会报没有入口。
7.1 事件类(做完一件事)
| 界面名称 | 英文键 | 什么时候跑 | 典型用途 |
|---|---|---|---|
| 打出时 | on_play | 费用扣完、牌打出 | 绝大多数卡 |
| 抽到时 | on_draw | 从抽牌库进手的瞬间 | 反噬 |
| 加入手牌时 | on_added_to_hand | 抽到、生成到手都算 | 入手提示 |
| 留在手牌且回合结束时 | on_turn_end_in_hand | 回合结束这张还在手上 | 碎裂类诅咒 |
| 单位回合开始时 | on_unit_turn_start | 这个单位回合刚开始 | 回魔、上buff跳字 |
| 单位回合结束时 | on_unit_turn_end | 这个单位回合结束 | 中毒跳伤、盾牌加甲 |
| 状态层数变化时 | on_status_changed | 某状态加上或去掉 | 职业「受到负面获得锋利」 |
| 使用职业主动技时 | on_activated_ability | 点了职业主动按钮 | 牧师祈福 |
合同里还规划过弃牌时、消耗时、击杀时、战斗开始时等,当前游戏未接线。积木盒里没有就不要造;硬写源码也会在验证时报尚未实现。
7.2 问询类(游戏正在问一个数字或能不能做)
状态、职业、装备的被动常用。帽子选「问询:……」,里面用「修改问询数值」或「取消这次问询」。
| 界面名称 | 英文键 | 游戏在问什么 |
|---|---|---|
| 问询:打出的攻击伤害 | query_outgoing_attack_damage | 我打出去的攻击伤害是多少 |
| 问询:受到的伤害 | query_incoming_damage | 我挨的这下是多少 |
| 问询:攻击之后 | query_after_attack | 打完这一下之后(例如锋利掉一层) |
| 问询:攻击段数 | query_attack_hit_count | 这一次攻击打几下 |
| 问询:获得护甲 | query_armor_gain | 这次加多少护甲 |
| 问询:护甲是否保留 | query_armor_retention | 护甲留不留到下回合 |
| 问询:行动力上限 | query_maximum_action_points | 本回合行动力上限 |
| 问询:可走步数 | query_move_steps | 能走几格 |
| 问询:回魔 | query_mana_gain | 这次回多少魔 |
| 问询:能否打出这张牌 | query_can_play_card | 这张能不能打 |
| 问询:能否行动 | query_can_take_turn | 这个单位这回合能不能动 |
8. 结构积木
| 界面名称 | 英文键 | 干什么 |
|---|---|---|
| 顺序 | sequence | 从上到下做完里面所有事 |
| 如果 | condition | 判断成立走「则」,否则走「否则」 |
| 重复 | repeat | 里面的事做 N 次。N 在右侧填整数;要「花掉的行动力次」请改源码里的 count 表达式 |
| 挨个 | foreach | 先找出一群,对每一个执行里面的事 |
| 效果 | effect | 真正改数值的一步 |
连斩正确拼法:打出时 → 重复(次数 = 已花行动力,源码)→ 造成伤害。
刺击:顺序 → 伤害 4 → 如果「目标有护甲」则再伤害 2。
劈砍:打出时 → 挨个「面前一片」→ 伤害,目标「当前这个」。
9. 效果积木
右侧「做什么」下拉。键名也会显示在源码里。
9.1 打和奶
| 名称 | 键 | 要点 |
|---|---|---|
| 造成伤害 | damage | 填数值、伤害类型、对谁 |
| 治疗 | heal | 不超过生命上限 |
| 获得护甲 | gain_armor | |
| 复活 | revive | 目标应能点到死者 |
| 击退 | knock_back | 往远离你的方向推一格 |
9.2 状态(卡上只负责上/改/摘,状态怎么跳伤害在「状态」分区配)
| 名称 | 键 | 要点 |
|---|---|---|
| 添加状态 | add_status | 填状态 ID、层数 |
| 设置状态 | set_status | 层数改成指定值 |
| 减少状态 | reduce_status | |
| 移除状态 | remove_status | 去掉这一种 |
| 清除状态 | clear_statuses | 按正面/负面/全部清一批(复杂参数走源码 mode) |
| 消耗自己的状态 | consume_owner_status | 结算时吃掉自己身上某状态 |
| 转化自己的状态 | transform_owner_status | 一种变成另一种 |
状态 ID 必须是「状态」分区里已有的,例如 poison、sharp。填错会在验证时报引用不存在。
9.3 行动力与魔力
| 名称 | 键 |
|---|---|
| 修改行动力 | modify_action_points(正加负扣) |
| 修改行动力上限 | modify_max_action_points |
| 修改魔力 | modify_mana |
| 消耗资源 | spend_resource |
| 开始免费移动 | begin_free_move |
| 结束回合 | end_turn |
9.4 牌
| 名称 | 键 | 注意 |
|---|---|---|
| 抽牌 | draw_cards | |
| 生成卡牌 | generate_card | 条件、放到哪个牌区,多在源码里配 |
| 移动卡牌 | move_cards | |
| 按条件移除卡牌 | remove_cards_by_query | |
| 修改卡牌数值 | modify_card_runtime_value | 给这张卡记一个临时数 |
| 查看牌顶并弃牌 | reveal_top_cards_and_choose_discard | 会暂停战斗等玩家点 |
| 免费打出牌顶 | play_top_cards_for_free | 同上,必须进游戏点一遍 |
9.5 改规则(被动)
| 名称 | 键 |
|---|---|
| 修改问询数值 | modify_query_value |
| 取消这次问询 | cancel_query |
必须挂在对应的「问询:……」帽子下,否则改的不是那一次提问。
9.6 表现
| 名称 | 键 |
|---|---|
| 播放特效 | play_vfx |
| 播放音效 | play_sfx |
| 无操作 | no_op |
表现失败不影响结算。占位卡可以用无操作。
10. 判断积木(给「如果」用)
| 名称 | 键 | 说明 |
|---|---|---|
| 全部成立 | all | 组合多条,复杂结构走源码 |
| 任一成立 | any | |
| 不成立 | not | 把结果取反 |
| 目标活着 | target_is_alive | |
| 目标已死 | target_is_dead | 复活 |
| 目标是自己 | target_is_self | |
| 目标阵营是 | target_team_is | 源码里补阵营参数 |
| 目标有护甲 | target_has_armor | 刺击 |
| 目标有状态 | target_has_status | 右侧填状态 ID |
| 卡有标签 | card_has_tag | |
| 卡在卡池 | card_in_pool | |
| 卡稀有度是 | card_rarity_is | |
| 这张卡击杀了目标 | target_killed_by_this_card | 必须写在伤害之后 |
| 造成了伤害 | damage_was_applied | 没被完全免疫 |
| 生命伤害大于 | health_damage_greater_than | |
| 资源 / 生命 / 护甲比较 | resource_compare 等 | 比较符和阈值走源码 |
| 已花行动力 / 魔力比较 | spent_action_compare 等 | |
| 随机概率 | random_chance | 0~100,10 = 一成 |
「目标有某单位标签」游戏侧未接完,先不要当正式规则。
11. 「挨个」选谁
拖「挨个」后,右侧「挨个选谁」:
| 名称 | 键 | 说明 |
|---|---|---|
| 自己 | self | |
| 点选单位 | selected_unit | |
| 点选格子 | selected_cell | |
| 点选周围单位 | units_around_selected | 方形范围,含对角线 |
| 曼哈顿范围内单位 | units_in_manhattan_range | 上下左右走几步;右侧「范围」 |
| 该方向上的单位 | units_in_direction | 直线,穿云箭 |
| 面前一片单位 | units_in_front_area | 劈砍 1×3,会友伤 |
| 全部友方 / 敌方 / 单位 | all_allies / all_enemies / all_units | |
| 当前这张卡 | current_card | 对牌自己动手 |
| 手牌 / 抽牌库 / 弃牌堆 / 消耗堆 | cards_in_hand 等 | 挪牌、删牌 |
循环里的效果,「对谁」选 当前这个。
12. 源码页
给会看 JSON 的人,或属性面板填不下的公式。
- 行为脚本:嵌套数组,和积木一一对应。改完点「应用到积木」。
- 整卡 JSON(仅卡牌页):基础字段 +
behaviors。不要删cardId。 - 非法 JSON 会显示红字,不会写进数据库。
- 数字公式示例(连斩次数):
"params": {
"count": { "kind": "spent_action_points" }
}固定数字:
"amount": { "kind": "constant", "value": 4 }表达式种类的完整清单见能力词典第 8 节(constant、spent_action_points、add 等)。不要在描述里写公式当数据。
13. 分区:状态
状态是「挂在单位身上的层数」,卡牌只负责上/改/摘。中毒怎么跳伤害、锋利怎么加伤,配在状态自己的积木上。
| 字段 | 说明 |
|---|---|
| 稳定 ID | 卡牌「状态 ID」必须填这个 |
| 名称 / 描述 | 给玩家看 |
| 类别 | neutral 中性、positive 正面、negative 负面。驱散「清负面」看这个 |
| 最大层数 | 0 表示不限制。寒冷叠满变冻结时会用到上限 |
| 叠层规则 | add 加上去、set 改成指定值、ignore 已有则不再加 |
| 持续规则 | none 不按回合掉、turns 按回合、combat 打完这场清 |
| 启用 | 关掉则发布时不算这状态 |
| 积木 | 通常用「单位回合开始/结束」或「问询:……」 |
例子:锋利 = 问询打出的攻击伤害 → 修改问询数值 +1,再在「问询:攻击之后」减一层。
14. 分区:职业
| 字段 | 说明 |
|---|---|
| 稳定 ID | 如 warrior、mage |
| 初始生命 / 初始魔力 / 魔力上限 | 开战数值 |
| 排序 | 选职业界面顺序 |
| 起始牌库配方 | 每一行:从哪个卡池抽几张;固定卡 ID 可空。当前战斗开局还会根据装备特性往牌库塞武器从属(见工程内牌库规则文档) |
| 特性 | 键值对,程序按键读取 |
常用特性键(值按现有职业填写):
| 键 | 含义 | 示例值 |
|---|---|---|
equipment_weapon_id | 默认主手装备 ID | sword 或具体装备 id |
equipment_offhand_id | 副手 | 盾 |
equipment_armor_id | 护甲槽 | |
equipment_accessory_id | 饰品 | |
equipment_treasure_id | 宝物 | |
artwork_key | 职业立绘资源 | |
uses_mana | 是否用魔力 | true / false |
activated_ability_id | 主动技内容 ID | |
activated_ability_name | 主动技显示名 | |
activated_ability_description | 主动技说明 | |
activated_ability_target_range | 主动技距离 | 整数 |
职业被动积木:和状态类似,用问询或回合时机,不要写成「打出时」(职业不是一张牌)。
15. 分区:角色
数据驱动的战斗单位模板(玩家/敌人),和场景里的模型是分开的。
| 字段 | 说明 |
|---|---|
| 生命 / 基础伤害 / 移动步数 | 开战底数;战斗规则里还可以再改全局基础移动 |
| 标签 | 查询用 |
| 积木 | 单位级被动 |
战斗规则页的「玩家角色 ID / 敌人角色 ID」要指向这里的稳定 ID。
16. 分区:装备与槽位
一件装备 = 一个槽位 + 一个从属卡池 + 可选被动积木。
| 字段 | 说明 |
|---|---|
| 槽位 | 见下表,必须用英文键 |
| 关联卡池 | 这件装备的从属牌从哪个池抽。没有这个池时保存会自动登记一个同名空池,但仍应去「卡池」分区把显示名写好,并把从属牌的「卡池 ID」设成同一个 |
| 标签 | 查询用 |
槽位(插槽)
| 键 | 含义 | 设计对应 |
|---|---|---|
weapon | 主手武器 | 单手占主手;双手是否占副手由设计规则解释,程序槽位仍是 weapon |
offhand | 副手 | 盾等 |
accessory | 饰品 | 项链等 |
armor | 护甲 | |
treasure | 宝物 | 水晶球等 |
boot | 鞋靴 |
不要自造 mainhand 这类键,验证会当非法槽位。
牌库层面:武器从属进总牌库;非武器装备发鉴定、鉴定产物为临时——这是设计规则。工具里把装备的 cardPoolId 和从属卡的池对齐即可。完整规则表见 Docs/Design/牌库与装备规则表.md。
17. 分区:卡池、牌库、稀有度、资源、战斗规则
17.1 卡池
| 字段 | 说明 |
|---|---|
| 稳定 ID | 卡牌「卡池 ID」、装备「关联卡池」都填这个 |
| 名称 | 给策划看 |
| 启用 / 排序 | 关掉则不应再被抽到 |
有卡牌或装备还在引用时,删除会被数据库拦住。
17.2 牌库
固定列表,不是随机池。
| 字段 | 说明 |
|---|---|
| 策划测试牌库 | 勾选表示这是 is_test_deck。卡牌上的「加入策划测试牌库」写入的就是 planner_test 这条 |
| 条目 | 每行一张卡 ID + 张数。卡必须已存在 |
17.3 稀有度
一般只改显示名、颜色、默认权重、排序。
权重与鉴定抽品质有关(灰 0.55、蓝 0.25、紫 0.15、金 0.05;红是另一次独立判定)。不要轻易删 gray 等内置 ID,卡牌外键会挡住。
颜色为十六进制,可带透明度,如 #474C57FF。
17.4 资源
登记图片/音效的 Key、类型、相对路径、SHA-256。卡图请优先用卡牌页的拖入导入,让工具写路径和哈希。这里适合核对或修损坏的登记,不负责从磁盘拷文件。
17.5 战斗规则
| 字段 | 默认理解 |
|---|---|
| 手牌上限 | 10 |
| 起始手牌 | 5 |
| 每回合抽牌 | 5 |
| 基础行动力 | 3 |
| 基础移动步数 | 2 |
| 玩家角色 ID / 敌人角色 ID | 必须是「角色」分区里的 ID |
改完保存,发布后战斗才读新值。
18. 验证、发布、回退、备份
验证整库会列出 [ERROR] / [WARNING] / [INFO]。只有 ERROR 会挡住发布。缺卡图通常是 WARNING,战斗用占位图。
常见 ERROR:
| 信息里常见片段 | 含义 | 怎么处理 |
|---|---|---|
card_has_no_entry_point | 能打出的卡没有启用的打出时 | 拖一个「打出时」帽子并放效果 |
unknown_*_reference | 状态 / 卡 / 池 / 资源 ID 不存在 | 先建状态或改拼写 |
*_not_executable / 尚未实现 | 选了游戏没接线的能力 | 换已有积木,或找程序加通用积木 |
invalid_json | 源码不是合法 JSON 对象 | 用「从积木重新生成」对照 |
| 外键 / 仍被引用 | 删不掉 | 先从牌库条目、装备卡池里拿掉引用 |
发布到 Unity:版本默认 development。成功后去 Assets/StreamingAssets/Content/current.json 看当前指针。回 Unity 等导入完成再进战斗。
回退版本:只切换指针,不删历史目录,也不改数据库。数据库想回去用 ContentSource/Backups 里对应时间的库(让程序操作,不要随手覆盖正在开着的 db)。
保存 / 删除 / 发布都会在 ContentSource/Backups 留备份。
19. 推荐工作习惯
- 先写人话:什么时候、对谁、做什么、有没有如果。
- 能用顺序效果就不要套三层如果。
- 新机制优先复用已有状态(中毒、锋利),不要为了一张卡发明只给它用的程序。
- 积木盒没有的效果,找程序加通用积木,加完所有卡都能用。不要为单卡写 C#
switch。 - 勾选测试牌库或放进池,验证零 ERROR,发布,进战斗点一遍。会暂停的效果(看牌顶、免费打出牌顶)必须实机点。
- 描述和积木不一致时,以积木为准;记得改描述以免玩家被骗。
20. 和旧说明的差异
- 没有「简易效果 / 高级行为树」两个设计器了,统一用积木 + 源码。
- 可以维护状态、职业、角色、装备、卡池、牌库、稀有度、资源、战斗规则,不只是卡。
- 窗口有系统菜单栏和内容横条。
- WPF 工具不要用于日常维护。
更短的积木对照表仍在 Docs/策划能力词典.md。本说明以工具界面字段为准。