---
type: reference
title: 自定义游戏仪表盘模式
summary: 一个自定义游戏如何在仪表盘上按维度声明它可自定义的字段，因为它没有清单，以及每个维度接受的字段类型。
---

一个应用市场游戏交付一个 `caputchin.json` 清单，它声明每个自定义预设可以设置哪些字段。一个自定义游戏没有清单，所以 **你在仪表盘上声明那个字段模式**。你为每个自定义游戏、按维度定义它一次，然后对着它撰写预设；从那里起，它的 [解析和应用](/docs/game-customization/overview) 恰好和一个应用市场游戏一样，在同样的套餐档位上。

这一页是那个模式的参考。撰写游戏本身见 [构建一个自托管游戏](/docs/custom-game-development/self-hosted-game)；客户侧的注册流程见 [自定义游戏](/docs/game-customization/custom-games)。

## 每个维度一个模式

一个自定义游戏的模式 **按维度** 声明，而三个维度是独立的：

| 维度 | 它自定义什么 | 模式 |
|---|---|---|
| **Locale** | 游戏的已翻译字符串。 | 隐式：locale 字段始终是纯文本，所以没有什么要声明；你直接撰写字符串预设。 |
| **Skin** | 颜色、视觉资源和呈现旋钮。 | 你声明一个皮肤预设可以设置的颜色、资源和标量（开关 / 数字 / 范围 / 选择）字段。 |
| **Configuration** | 玩法选项（难度、计数、开关）。 | 你声明一个配置预设可以设置的选项字段。 |

你只为你游戏实际用到的那些维度定义一个模式。一个没有模式的维度就只是没有那一类可自定义的字段。

## 字段类型

一个模式是一组命名的字段，每个带一个类型。这些字段类型和其余自定义所用的是同一个集合；[自定义模式参考](/docs/references/customization-schema) 是每种类型及它所接受值的权威描述。简言之：

| 类型 | 值 |
|---|---|
| `string` | 自由文本。 |
| `boolean` | `true` 或 `false`。 |
| `number` | 任何有限的数。 |
| `range` | 一个最小值和最大值之内的数。 |
| `list` | 一组固定选项里的一个。 |
| `link` | 一个 `http`/`https` URL。 |
| `color` | 一个十六进制或 `rgb()` 颜色。 |
| `image` | 一个图像 URL 或上传。 |
| `audio` | 一个音频 URL 或上传。 |
| `video` | 一个视频 URL 或上传。 |

Locale 只用 `string`（而解析器根本不校验一个 locale 模式）。Skin 和 configuration 对着你声明的模式校验撰写的值，并丢弃不合它们类型的值。

## 范围：一个模式住在哪里

一个自定义游戏模式设在一个范围上，**团队或站点密钥**，和 [覆盖](/docs/troops/overrides) 同样的范围模型。当一个团队和它的某个站点密钥都为同一个游戏和维度声明一个模式时，对那个维度而言 **站点密钥的模式替换团队的**（一次整维度替换，不是逐字段合并）。这镜像其余自定义如何按最具体者胜解析。

## 资源是绝对的

因为你自己托管那个可玩的游戏，没有一个平台包来据以解析一个相对的资源路径。一个皮肤预设里的任何 `image`、`audio` 或 `video` 值都必须是一个 **绝对 URL**。（一个应用市场游戏可以用包相对的路径；一个自定义游戏不能。）

## 一个预设如何到达游戏

一旦模式和预设存在，Caputchin 为每位访客按维度解析一个预设（跨站点密钥、团队和你的默认，最具体者胜），并通过 [游戏工厂的上下文](/docs/custom-game-development/self-hosted-game) 把解析出的值交付给你的游戏：`ctx.locale`、`ctx.skin`、`ctx.config`。你的游戏从那些对象上读它自己的字段名。模式就是那个让仪表盘编辑器显示正确输入、并在值到达一位访客之前校验它们的东西。

## 另见

- [自定义模式参考](/docs/references/customization-schema)：每种字段类型及其接受的值，完整版。
- [自定义游戏](/docs/game-customization/custom-games)：注册一个自定义游戏并定义它的模式。
- [构建一个自托管游戏](/docs/custom-game-development/self-hosted-game)：从工厂上下文里读取解析出的预设。
- [团队覆盖](/docs/troops/overrides)：模式所遵循的那个范围模型。
