---
# System prepended metadata

title: 配置表訂定規範

---

# 配置表訂定規範

## **配置表的命名**

配置表的命名使用全英文，統一用大駝峰式寫法。（例如CharacterLevelUpData）<br/>禁止使用Dash（-），如果表單有一張拆多張，或是多語言類別的，使用底線（_）來區隔。<br/>

程式輸出的資料名稱會以工作表名稱為準，因此企劃需確保**工作表**名稱和 名稱相同。


## **配置表的欄位**

前4列必須是固定格式，用來當做資料的建構，第5列開始才是遊戲內的數據資料<br/>由上到下，前4列的格式如下： <br/>

| **行數 1 ** | 中文描述 | 道具ID | 道具類型 |
| ----------- | -------- | ------ | -------- |
| **行數 2**  | 英文描述 | ItemId | ItemType |
| **行數 3**  | 數據類型 | int    | int      |
| **行數 4**  | MetaData|        |          |
| **行數 5**  | 導出類型 | both   | both     |

### **行數1** : 中文名稱

此列的中文說明，不會導入遊戲，方便企劃辨識<br/>



### **行數2** : 英文名稱

正式的命名，會導入資料配置裡，命名規範「英文首位大寫（大駝峰），底線只用在編號前用」（例如StageData，或是Score_1、Score_2…等等）<br/>



### **行數3** : 數據類型

定義資料的格式，常用的類型如下(全英文小寫)

* **int** : 純整數的數字。*(20211026 討論內容增加)* 為了節省記憶體容量，數據類型 int 拆分為以下項目
   * ~~**largeint** = int64~~ 使用情況太少而不實作
   * **int** = int32 = -21e ~ 21e
   * **shortint** = int16 = -32768 ~ 32767
   * **tinyint** = int8 = -128 ~ 127
* **float** : 非必要不使用，若有小數點需求則以 int 欄位填入萬分位進行轉換 ( ex : 1 = 0.01 )
* ~~**varchar** : 一串不特定的文字，在比較能確定文字長度的情況下使用~~
* **string** : 字串，通常用來編輯說明等文字，但varchar也可以做到，使用在無法確認有多長的文字時，因此盡量都使用varchar比較省容量
  * 不過Server端只吃String，如果雙端輸出的場合盡量不要用varchar
* **bool** : 布林值，請填 0 或 1。*(20220307 討論內容修改: 從 boolean 改為 bool)*
* **entry** : 用來標註資料id的唯一值，定義好只會放在第一列
  * *(20220218 討論內容新增)* : 若表單 entry 為 skip，即為另一張表的一部分，會在導表時被程式整合。用於不固定長度的 Array 所使用
* **multi** : 用於標記該欄位內容為多語言內容，實作規格參照系統多語言規格分頁
* **text** *(20210916 討論內容新增)* : string 用於填寫「英數字元」，不填寫 Unicode；text 可用於填寫 Unicode
* **asset** *(20210916 討論內容新增)* : 用於引用 UE 內資源，如圖檔、Model 等。
   * 填寫 UE 的 Reference Path，於 Editor 的 ContentBrowser 視窗中，右鍵→Copy Reference（或 Ctrl + C），貼上後只保留''內的內容。
   * 例：World'/Game/Promotion/Maps/BossyEnemyPreview.BossyEnemyPreview'
     * /Game/Promotion/Maps/BossyEnemyPreview.BossyEnemyPreview
* **tag** *(20211026 討論內容新增)* : 用於對接 UE 的 Gameplay Tag

#### **Array** 的填寫方式

 * 可以使用在一些特殊規範來定義區隔資料
 * 例：[50,5,1]，可以表示，權重50、數量最大5、最小1
 * 只要定義清楚資料使用格式，就可以運用在許多方面
 * *(20210916 討論內容修改)* 於 DataType 中於前方填寫 [] 以表示讓欄為陣列，例：
   * []string
   * []int
   * []*entry：引用別的表單的 entry 類型欄位
 * *(20211022 討論內容新增)* 拆開欄位填寫的 array 用以下方式填寫
 * 舊表：

| 角色_1        | 角色_2         | 角色_3        | 角色_4          |
| ------------ | -------------- | ------------- | -------------- |
| Character_1  | Character_2    | Character_3   | Character_4    |
| int          | int            | int           | int            |
| both         | both           | both          | both           |
| 1001         | 1002           | 1003          | 1004           |

 * 新表：
 * *(20220224 討論內容修改)* Array記號從 DataType 改為寫在欄位名稱上

| 角色[0]       | 角色[1]          | 角色[2]        | 角色[3]          |
| ------------ | -------------- | ------------- | -------------- |
| <font color=#FF0000>Character[0]</font> | <font color=#FF0000>Character[1]</font> | <font color=#FF0000>Character[2]</font> | <font color=#FF0000>Character[3]</font> |
| <font color=#FF0000>int</font> | <font color=#FF0000>int</font> | <font color=#FF0000>int</font> | <font color=#FF0000>int</font> |
| both         | both           | both          | both           |
| 1001         | 1002           | 1003          | 1004           |

 * 英文名稱若為同一 array 則使用同一名稱
 * 數據類型後方填寫該格填寫的是第幾個項目（由 0 開始計算）
 * 另外，新增了多維陣列的規則：

| 角色_1       | 角色_2          | 角色_3        | 角色_4          |
| ------------ | -------------- | ------------- | -------------- |
| <font color=#FF0000>Character[0].ID</font> | <font color=#FF0000>Character[0].Amount</font> | <font color=#FF0000>Character[1].ID</font> | <font color=#FF0000>Character[1].Amount</font> 
| <font color=#FF0000>entry</font> | <font color=#FF0000>int</font> | <font color=#FF0000>entry</font> | <font color=#FF0000>int</font> |
| both         | both           | both          | both           |
| 1001         | 1              | 1002          | 2              |

 * 以上資料所輸出的資料會是
   * Character = [[1001,1],[1002,2]]
 * 英文名稱在名稱後，會定義各 array 的意義
 * 以上述例子來說，假設這是發放英雄的表單，筆資料填寫 2 組發放的內容
 * 那在英文名稱上，就會定義一組當中各項目的意義 [ID, Amount]
 * 而數據類型，如一維陣列同樣在數據類型後填寫的是第幾個項目（由 0 開始計算）

#### 參照欄位的填寫方式

*(20211028 討論內容修改)*
 * 若欄位需要參照其他表單的特定欄位時，在 DataType 前填寫 `*`
   * 如： `*int`, `*string`
 * 其結果會回傳該資料的 entry
   * 如：`*string` 的欄位資料中填寫 `戰士`，結果會是戰士的 Id
 * 且在 MetaData 中填寫對應的表單及欄位
 * 若參照欄位為 Group ，DataType 前填寫`*[]`
   * 如：`*[]int`
   * 此欄位在填寫資料時不用填`[]`

### **行數4** : MetaData

*(20211028 討論內容增加)*
 * 此行資料用於標記欄位的特殊規格，格式為 `key:value` 如：
   * 參照其他表單： ref:ExcelName.DataEnglishName
     * 例： ref:CharacterData.GroupId
   * 若不填寫 DataEnglishName，程式會尋找 DataType 為 entry 的欄位
 * *(20220308 討論內容增加)*
   * 用於 __extra 欄位，增寫方式有 2：
   * **cond:lesser**：於 config 中設定輸出版本，若欄位增寫內容 <= 輸出設定時才會輸出該行內容。
   * **cond:bool**：若欄位 !=0 時就會輸出。
 * *(20220310 討論內容增加)*
   * **note:** : 轉檔時不會加以分析及採用，但有企劃用的填寫規範讓程式知道需要從哪裡取值。
     * 例： `note:CharacterInfo.Name` 即欄位不會在轉檔時不會處理欄位內的資料。僅用於程式參考資料時取 `CharacterInfo.Name` 這個欄位

### **行數5** : 導出類型

資料是否要產出，或產出的資料是要給client或server端使用(全英文小寫)

- **client**：只產出給client端的檔案
- **server**：只產出給server端的檔案
- **both**：同時產出client與server端的檔案
- **skip**：不產出任何檔案，表示此列的資料內容是備註用的（前端程式有時候需要備註文字作為判斷，需與程式商量，部份備註欄位可以輸出Client）


# 特殊規則

## **開放開關**

當英文描述填寫為「__extra」時，表示此列的資料為決定該行是否要開啟。
目的為方便企劃在工作時，可以預先填寫資料進工作表內，但先不進行資料的產出，避免出錯使用表格的規範，希望企劃能統一在前二列定義統一順序，方便使用。
(20210916 討論內容修改) __extra 的 DataType 從 boolean 改為 int
 * 程式提出可以在輸出資料時設定版本，在符合版本的所有 Rows 輸出

 * 首列為流水號，也是唯一的編號，數據類型必須為entry
 * 次列為是否開放

| 道具ID(首列) | 是否開放(次列) | 道具名稱  | 備註       |
| ------------ | -------------- | --------- | ---------- |
| ItemId       | __extra        | ItemName  |            |
| entry        | int            | multi     |            |
| both         | both           | client    |            |
| 10001        | 1              | 金幣      |            |
| 10002        | 2              | 鑽石      |            |
| 10003        | 3              | PVP入場券 | 此項不開放  |
| 10004        | 99             | 補血藥    | 此項不開放  |

 * 輸出時若選擇開關「2」時，__extra 填 1, 2 的內容都會被輸出，2 以上的內容不會被輸出。比單純 boolean 控制更有彈性
 * 此欄輸出方式為`skip`