# 配置表訂定規範 ## **配置表的命名** 配置表的命名使用全英文,統一用大駝峰式寫法。(例如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`