summaryrefslogtreecommitdiff
path: root/script
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2019-11-22 23:26:32 +0800
committer最萌小汐 <sumneko@hotmail.com>2019-11-22 23:26:32 +0800
commitd0ff66c9abe9d6abbca12fd811e0c3cb69c1033a (patch)
treebb34518d70b85de7656dbdbe958dfa221a3ff3b3 /script
parent0a2c2ad15e1ec359171fb0dd4c72e57c5b66e9ba (diff)
downloadlua-language-server-d0ff66c9abe9d6abbca12fd811e0c3cb69c1033a.zip
整理一下目录结构
Diffstat (limited to 'script')
-rw-r--r--script/build_package.lua329
-rw-r--r--script/debugger.lua52
-rw-r--r--script/main.lua23
-rw-r--r--script/meta/Lua 5.4/basic.lua145
-rw-r--r--script/meta/Lua 5.4/meta.lua27
-rw-r--r--script/platform.lua26
-rw-r--r--script/publish.lua189
-rw-r--r--script/src/3rd/lua-uri/uri.lua504
-rw-r--r--script/src/3rd/lua-uri/uri/_login.lua96
-rw-r--r--script/src/3rd/lua-uri/uri/_relative.lua81
-rw-r--r--script/src/3rd/lua-uri/uri/_util.lua128
-rw-r--r--script/src/3rd/lua-uri/uri/data.lua116
-rw-r--r--script/src/3rd/lua-uri/uri/file.lua72
-rw-r--r--script/src/3rd/lua-uri/uri/file/unix.lua26
-rw-r--r--script/src/3rd/lua-uri/uri/file/win32.lua34
-rw-r--r--script/src/3rd/lua-uri/uri/ftp.lua53
-rw-r--r--script/src/3rd/lua-uri/uri/http.lua32
-rw-r--r--script/src/3rd/lua-uri/uri/https.lua9
-rw-r--r--script/src/3rd/lua-uri/uri/pop.lua111
-rw-r--r--script/src/3rd/lua-uri/uri/rtsp.lua9
-rw-r--r--script/src/3rd/lua-uri/uri/rtspu.lua7
-rw-r--r--script/src/3rd/lua-uri/uri/telnet.lua38
-rw-r--r--script/src/3rd/lua-uri/uri/urn.lua131
-rw-r--r--script/src/3rd/lua-uri/uri/urn/isbn.lua67
-rw-r--r--script/src/3rd/lua-uri/uri/urn/issn.lua65
-rw-r--r--script/src/3rd/lua-uri/uri/urn/oid.lua62
-rw-r--r--script/src/async/async.lua126
-rw-r--r--script/src/async/init.lua1
-rw-r--r--script/src/async/loadfile.lua13
-rw-r--r--script/src/async/proto.lua57
-rw-r--r--script/src/async/scanfiles.lua55
-rw-r--r--script/src/capability/completion.lua53
-rw-r--r--script/src/capability/init.lua3
-rw-r--r--script/src/config.lua194
-rw-r--r--script/src/constant/DiagnosticDefaultSeverity.lua22
-rw-r--r--script/src/constant/DiagnosticSeverity.lua6
-rw-r--r--script/src/constant/DiagnosticTag.lua4
-rw-r--r--script/src/core/code_action.lua410
-rw-r--r--script/src/core/completion.lua1079
-rw-r--r--script/src/core/definition.lua296
-rw-r--r--script/src/core/diagnostics.lua1042
-rw-r--r--script/src/core/document_symbol.lua260
-rw-r--r--script/src/core/find_lib.lua65
-rw-r--r--script/src/core/find_source.lua59
-rw-r--r--script/src/core/folding_range.lua73
-rw-r--r--script/src/core/global.lua49
-rw-r--r--script/src/core/highlight.lua54
-rw-r--r--script/src/core/hover/emmy_function.lua143
-rw-r--r--script/src/core/hover/function.lua243
-rw-r--r--script/src/core/hover/hover.lua326
-rw-r--r--script/src/core/hover/init.lua1
-rw-r--r--script/src/core/hover/lib_function.lua222
-rw-r--r--script/src/core/hover/name.lua38
-rw-r--r--script/src/core/implementation.lua204
-rw-r--r--script/src/core/init.lua19
-rw-r--r--script/src/core/library.lua296
-rw-r--r--script/src/core/matchKey.lua30
-rw-r--r--script/src/core/name.lua70
-rw-r--r--script/src/core/references.lua91
-rw-r--r--script/src/core/rename.lua72
-rw-r--r--script/src/core/signature.lua133
-rw-r--r--script/src/core/snippet.lua64
-rw-r--r--script/src/emmy/alias.lua42
-rw-r--r--script/src/emmy/arrayType.lua37
-rw-r--r--script/src/emmy/class.lua61
-rw-r--r--script/src/emmy/field.lua45
-rw-r--r--script/src/emmy/funcType.lua64
-rw-r--r--script/src/emmy/generic.lua27
-rw-r--r--script/src/emmy/init.lua1
-rw-r--r--script/src/emmy/manager.lua221
-rw-r--r--script/src/emmy/param.lua70
-rw-r--r--script/src/emmy/return.lua36
-rw-r--r--script/src/emmy/tableType.lua40
-rw-r--r--script/src/emmy/type.lua55
-rw-r--r--script/src/emmy/typeUnit.lua51
-rw-r--r--script/src/files/file.lua158
-rw-r--r--script/src/files/files.lua115
-rw-r--r--script/src/files/init.lua1
-rw-r--r--script/src/glob/gitignore.lua222
-rw-r--r--script/src/glob/glob.lua122
-rw-r--r--script/src/glob/init.lua4
-rw-r--r--script/src/glob/matcher.lua151
-rw-r--r--script/src/json/decode.lua153
-rw-r--r--script/src/json/encode.lua135
-rw-r--r--script/src/json/init.lua6
-rw-r--r--script/src/language.lua136
-rw-r--r--script/src/log.lua116
-rw-r--r--script/src/meta/type.lua4
-rw-r--r--script/src/method/exit.lua4
-rw-r--r--script/src/method/init.lua32
-rw-r--r--script/src/method/initialize.lua50
-rw-r--r--script/src/method/initialized.lua69
-rw-r--r--script/src/method/shutdown.lua4
-rw-r--r--script/src/method/textDocument/codeAction.lua23
-rw-r--r--script/src/method/textDocument/completion.lua104
-rw-r--r--script/src/method/textDocument/definition.lua88
-rw-r--r--script/src/method/textDocument/didChange.lua16
-rw-r--r--script/src/method/textDocument/didClose.lua5
-rw-r--r--script/src/method/textDocument/didOpen.lua5
-rw-r--r--script/src/method/textDocument/documentHighlight.lua37
-rw-r--r--script/src/method/textDocument/documentSymbol.lua72
-rw-r--r--script/src/method/textDocument/foldingRange.lua57
-rw-r--r--script/src/method/textDocument/hover.lua44
-rw-r--r--script/src/method/textDocument/implementation.lua108
-rw-r--r--script/src/method/textDocument/onTypeFormatting.lua14
-rw-r--r--script/src/method/textDocument/publishDiagnostics.lua163
-rw-r--r--script/src/method/textDocument/references.lua86
-rw-r--r--script/src/method/textDocument/rename.lua50
-rw-r--r--script/src/method/textDocument/signatureHelp.lua50
-rw-r--r--script/src/method/workspace/didChangeConfiguration.lua27
-rw-r--r--script/src/method/workspace/didChangeWatchedFiles.lua44
-rw-r--r--script/src/method/workspace/didChangeWorkspaceFolders.lua20
-rw-r--r--script/src/method/workspace/executeCommand.lua258
-rw-r--r--script/src/parser/ast.lua1912
-rw-r--r--script/src/parser/calcline.lua93
-rw-r--r--script/src/parser/grammar.lua630
-rw-r--r--script/src/parser/init.lua9
-rw-r--r--script/src/parser/lines.lua187
-rw-r--r--script/src/parser/parse.lua41
-rw-r--r--script/src/parser/relabel.lua361
-rw-r--r--script/src/parser/split.lua9
-rw-r--r--script/src/plugin.lua98
-rw-r--r--script/src/rpc.lua91
-rw-r--r--script/src/sandbox.lua167
-rw-r--r--script/src/service.lua1023
-rw-r--r--script/src/task.lua64
-rw-r--r--script/src/timer.lua276
-rw-r--r--script/src/uri.lua29
-rw-r--r--script/src/utility.lua234
-rw-r--r--script/src/vm/chain.lua65
-rw-r--r--script/src/vm/emmy.lua372
-rw-r--r--script/src/vm/function.lua551
-rw-r--r--script/src/vm/global.lua25
-rw-r--r--script/src/vm/init.lua1
-rw-r--r--script/src/vm/ipairs.lua51
-rw-r--r--script/src/vm/label.lua75
-rw-r--r--script/src/vm/library.lua112
-rw-r--r--script/src/vm/list.lua30
-rw-r--r--script/src/vm/local.lua191
-rw-r--r--script/src/vm/manager.lua17
-rw-r--r--script/src/vm/module.lua56
-rw-r--r--script/src/vm/multi.lua83
-rw-r--r--script/src/vm/pcall.lua50
-rw-r--r--script/src/vm/raw.lua30
-rw-r--r--script/src/vm/source.lua183
-rw-r--r--script/src/vm/special.lua130
-rw-r--r--script/src/vm/value.lua634
-rw-r--r--script/src/vm/vm.lua1334
-rw-r--r--script/src/workspace.lua517
-rw-r--r--script/test.lua61
-rw-r--r--script/test/completion/init.lua1494
-rw-r--r--script/test/crossfile/completion.lua621
-rw-r--r--script/test/crossfile/definition.lua422
-rw-r--r--script/test/crossfile/document_symbol.lua121
-rw-r--r--script/test/crossfile/hover.lua361
-rw-r--r--script/test/crossfile/init.lua5
-rw-r--r--script/test/crossfile/references.lua215
-rw-r--r--script/test/definition/arg.lua19
-rw-r--r--script/test/definition/bug.lua90
-rw-r--r--script/test/definition/emmy.lua91
-rw-r--r--script/test/definition/function.lua24
-rw-r--r--script/test/definition/init.lua64
-rw-r--r--script/test/definition/label.lua29
-rw-r--r--script/test/definition/local.lua195
-rw-r--r--script/test/definition/method.lua140
-rw-r--r--script/test/definition/set.lua50
-rw-r--r--script/test/definition/table.lua114
-rw-r--r--script/test/diagnostics/init.lua74
-rw-r--r--script/test/diagnostics/normal.lua503
-rw-r--r--script/test/diagnostics/syntax.lua8
-rw-r--r--script/test/document_symbol/init.lua478
-rw-r--r--script/test/example/largeGlobal.txt28101
-rw-r--r--script/test/example/vm.txt1544
-rw-r--r--script/test/find_lib/init.lua106
-rw-r--r--script/test/full/dirty.lua15
-rw-r--r--script/test/full/example.lua42
-rw-r--r--script/test/full/init.lua16
-rw-r--r--script/test/full/normal.lua157
-rw-r--r--script/test/highlight/init.lua85
-rw-r--r--script/test/hover/init.lua890
-rw-r--r--script/test/other/init.lua11
-rw-r--r--script/test/references/init.lua114
-rw-r--r--script/test/rename/init.lua85
-rw-r--r--script/test/signature/init.lua135
-rw-r--r--script/test/type_inference/init.lua187
185 files changed, 58206 insertions, 0 deletions
diff --git a/script/build_package.lua b/script/build_package.lua
new file mode 100644
index 00000000..402cea14
--- /dev/null
+++ b/script/build_package.lua
@@ -0,0 +1,329 @@
+local json = require 'json'
+local diagDefault = require 'constant.DiagnosticDefaultSeverity'
+
+local VERSION = "0.14.2"
+
+local package = {
+ name = "lua",
+ displayName = "Lua",
+ description = "Lua Language Server coded by Lua",
+ author = "sumneko",
+ icon = "images/logo.png",
+ license = "MIT",
+ repository = {
+ type = "git",
+ url = "https://github.com/sumneko/lua-language-server"
+ },
+ publisher = "sumneko",
+ categories = {
+ "Linters",
+ "Programming Languages",
+ "Snippets"
+ },
+ keywords = {
+ "Lua",
+ "LSP",
+ "GoTo Definition",
+ "IntelliSense"
+ },
+ engines = {
+ vscode = "^1.23.0"
+ },
+ activationEvents = {
+ "onLanguage:lua"
+ },
+ main = "./client/out/extension",
+ contributes = {
+ configuration = {
+ type = "object",
+ title = "Lua",
+ properties = {
+ ["Lua.runtime.version"] = {
+ scope = "resource",
+ type = "string",
+ default = "Lua 5.3",
+ enum = {
+ "Lua 5.1",
+ "Lua 5.2",
+ "Lua 5.3",
+ "Lua 5.4",
+ "LuaJIT"
+ },
+ markdownDescription = "%config.runtime.version%"
+ },
+ ["Lua.runtime.path"] = {
+ scope = "resource",
+ type = "array",
+ items = {
+ type = 'string',
+ },
+ markdownDescription = "%config.runtime.path%",
+ default = {
+ "?.lua",
+ "?/init.lua",
+ "?/?.lua"
+ }
+ },
+ ["Lua.diagnostics.enable"] = {
+ scope = 'resource',
+ type = 'boolean',
+ default = true,
+ markdownDescription = "%config.diagnostics.enable%"
+ },
+ ["Lua.diagnostics.disable"] = {
+ scope = "resource",
+ type = "array",
+ items = {
+ type = 'string',
+ },
+ markdownDescription = "%config.diagnostics.disable%"
+ },
+ ["Lua.diagnostics.globals"] = {
+ scope = "resource",
+ type = "array",
+ items = {
+ type = 'string',
+ },
+ markdownDescription = "%config.diagnostics.globals%"
+ },
+ ["Lua.diagnostics.severity"] = {
+ scope = "resource",
+ type = 'object',
+ markdownDescription = "%config.diagnostics.severity%",
+ title = "severity",
+ properties = {}
+ },
+ ["Lua.workspace.ignoreDir"] = {
+ scope = "resource",
+ type = "array",
+ items = {
+ type = 'string',
+ },
+ markdownDescription = "%config.workspace.ignoreDir%",
+ default = {
+ ".vscode",
+ },
+ },
+ ["Lua.workspace.ignoreSubmodules"] = {
+ scope = "resource",
+ type = "boolean",
+ default = true,
+ markdownDescription = "%config.workspace.ignoreSubmodules%"
+ },
+ ["Lua.workspace.useGitIgnore"] = {
+ scope = "resource",
+ type = "boolean",
+ default = true,
+ markdownDescription = "%config.workspace.useGitIgnore%"
+ },
+ ["Lua.workspace.maxPreload"] = {
+ scope = "resource",
+ type = "integer",
+ default = 300,
+ markdownDescription = "%config.workspace.maxPreload%"
+ },
+ ["Lua.workspace.preloadFileSize"] = {
+ scope = "resource",
+ type = "integer",
+ default = 100,
+ markdownDescription = "%config.workspace.preloadFileSize%"
+ },
+ ["Lua.workspace.library"] = {
+ scope = 'resource',
+ type = 'object',
+ markdownDescription = "%config.workspace.library%"
+ },
+ ["Lua.completion.enable"] = {
+ scope = "resource",
+ type = "boolean",
+ default = true,
+ markdownDescription = "%config.completion.enable%"
+ },
+ ["Lua.completion.callSnippet"] = {
+ scope = "resource",
+ type = "string",
+ default = "Disable",
+ enum = {
+ "Disable",
+ "Both",
+ "Replace",
+ },
+ markdownEnumDescriptions = {
+ "%config.completion.callSnippet.Disable%",
+ "%config.completion.callSnippet.Both%",
+ "%config.completion.callSnippet.Replace%",
+ },
+ markdownDescription = "%config.completion.callSnippet%"
+ },
+ ["Lua.completion.keywordSnippet"] = {
+ scope = "resource",
+ type = "string",
+ default = "Replace",
+ enum = {
+ "Disable",
+ "Both",
+ "Replace",
+ },
+ markdownEnumDescriptions = {
+ "%config.completion.keywordSnippet.Disable%",
+ "%config.completion.keywordSnippet.Both%",
+ "%config.completion.keywordSnippet.Replace%",
+ },
+ markdownDescription = "%config.completion.keywordSnippet%"
+ },
+ --["Lua.plugin.enable"] = {
+ -- scope = "resource",
+ -- type = "boolean",
+ -- default = false,
+ -- markdownDescription = "%config.plugin.enable%"
+ --},
+ --["Lua.plugin.path"] = {
+ -- scope = "resource",
+ -- type = "string",
+ -- default = ".vscode/lua-plugin/*.lua",
+ -- markdownDescription = "%config.plugin.path%"
+ --},
+ ["Lua.zzzzzz.cat"] = {
+ scope = "resource",
+ type = "boolean",
+ default = false,
+ markdownDescription = "%config.zzzzzz.cat%"
+ },
+ }
+ },
+ grammars = {
+ {
+ language = "lua",
+ scopeName = "source.lua",
+ path = "./syntaxes/lua.tmLanguage.json"
+ }
+ }
+ },
+ __metadata = {
+ id = "3a15b5a7-be12-47e3-8445-88ee3eabc8b2",
+ publisherDisplayName = "sumneko",
+ publisherId = "fb626675-24cf-4881-8c13-b465f29bec2f",
+ },
+}
+
+local DiagSeverity = package.contributes.configuration.properties["Lua.diagnostics.severity"].properties
+for name, level in pairs(diagDefault) do
+ DiagSeverity[name] = {
+ scope = 'resource',
+ type = 'string',
+ default = level,
+ enum = {
+ 'Error',
+ 'Warning',
+ 'Information',
+ 'Hint',
+ }
+ }
+end
+
+package.version = VERSION
+
+io.save(ROOT:parent_path() / 'package.json', json.encode(package))
+
+local example = {
+ library = [[
+```json
+"Lua.workspace.library": {
+ "C:/lua": true,
+ "../lib": [
+ "temp/*"
+ ]
+}
+```
+]],
+ disable = [[
+```json
+"Lua.diagnostics.disable" : [
+ "unused-local",
+ "lowercase-global"
+]
+```
+]],
+ globals = [[
+```json
+"Lua.diagnostics.globals" : [
+ "GLOBAL1",
+ "GLOBAL2"
+]
+```
+]],
+ severity = [[
+```json
+"Lua.diagnostics.severity" : {
+ "redefined-local" : "Warning",
+ "emmy-lua" : "Hint"
+}
+```
+]],
+ ignoreDir = [[
+```json
+"Lua.workspace.ignoreDir" : [
+ "temp/*.*",
+ "!temp/*.lua"
+]
+```
+]]
+}
+
+io.save(ROOT:parent_path() / 'package.nls.json', json.encode {
+ ["config.runtime.version"] = "Lua runtime version.",
+ ["config.runtime.path"] = "`package.path`",
+ ["config.diagnostics.enable"] = "Enable diagnostics.",
+ ["config.diagnostics.disable"] = "Disabled diagnostic (Use code in hover brackets).\n" .. example.disable,
+ ["config.diagnostics.globals"] = "Defined global variables.\n" .. example.globals,
+ ["config.diagnostics.severity"] = "Modified diagnostic severity.\n" .. example.severity,
+ ["config.workspace.ignoreDir"] = "Ignored directories (Use `.gitignore` grammar).\n" .. example.ignoreDir,
+ ["config.workspace.ignoreSubmodules"] = "Ignore submodules.",
+ ["config.workspace.useGitIgnore"] = "Ignore files list in `.gitignore` .",
+ ["config.workspace.maxPreload"] = "Max preloaded files.",
+ ["config.workspace.preloadFileSize"] = "Skip files larger than this value (KB) when preloading.",
+ ["config.workspace.library"] = [[
+Load external library.
+This feature can load external Lua files, which can be used for definition, automatic completion and other functions. Note that the language server does not monitor changes in external files and needs to restart if the external files are modified.
+The following example shows loaded files in `C:/lua` and `../lib` ,exclude `../lib/temp`.
+]] .. example.library,
+ ['config.completion.enable'] = 'Enable completion.',
+ ['config.completion.callSnippet'] = 'Shows function call snippets.',
+ ['config.completion.callSnippet.Disable'] = "Only shows `function name`.",
+ ['config.completion.callSnippet.Both'] = "Shows `function name` and `call snippet`.",
+ ['config.completion.callSnippet.Replace'] = "Only shows `call snippet.`",
+ ['config.completion.keywordSnippet'] = 'Shows keyword syntax snippets.',
+ ['config.completion.keywordSnippet.Disable'] = "Only shows `keyword`.",
+ ['config.completion.keywordSnippet.Both'] = "Shows `keyword` and `syntax snippet`.",
+ ['config.completion.keywordSnippet.Replace'] = "Only shows `syntax snippet`.",
+ ['config.zzzzzz.cat'] = 'DO NOT TOUCH ME, LET ME SLEEP >_<\n\n(This will enable beta version, which are still in the early stages of development, and all features will fail after enabling this setting.)',
+})
+
+io.save(ROOT:parent_path() / 'package.nls.zh-cn.json', json.encode {
+ ["config.runtime.version"] = "Lua运行版本。",
+ ["config.runtime.path"] = "`package.path`",
+ ["config.diagnostics.enable"] = "启用诊断。",
+ ["config.diagnostics.disable"] = "禁用的诊断(使用浮框括号内的代码)。\n" .. example.disable,
+ ["config.diagnostics.globals"] = "已定义的全局变量。\n" .. example.globals,
+ ["config.diagnostics.severity"] = "修改诊断等级。\n" .. example.severity,
+ ["config.workspace.ignoreDir"] = "忽略的目录(使用 `.gitignore` 语法)。\n" .. example.ignoreDir,
+ ["config.workspace.ignoreSubmodules"] = "忽略子模块。",
+ ["config.workspace.useGitIgnore"] = "忽略 `.gitignore` 中列举的文件。",
+ ["config.workspace.maxPreload"] = "最大预加载文件数。",
+ ["config.workspace.preloadFileSize"] = "预加载时跳过大小大于该值(KB)的文件。",
+ ["config.workspace.library"] = [[
+加载外部函数库。
+该功能可以加载外部的Lua文件,用于函数定义、自动完成等功能。注意,语言服务不会监视外部文件的变化,如果修改了外部文件需要重启。
+下面这个例子表示加载`C:/lua`与`../lib`中的所有文件,但不加载`../lib/temp`中的文件。
+]] .. example.library,
+ ['config.completion.enable'] = '启用自动完成。',
+ ['config.completion.callSnippet'] = '显示函数调用片段。',
+ ['config.completion.callSnippet.Disable'] = "只显示 `函数名`。",
+ ['config.completion.callSnippet.Both'] = "显示 `函数名` 与 `调用片段`。",
+ ['config.completion.callSnippet.Replace'] = "只显示 `调用片段`。",
+ ['config.completion.keywordSnippet'] = '显示关键字语法片段',
+ ['config.completion.keywordSnippet.Disable'] = "只显示 `关键字`。",
+ ['config.completion.keywordSnippet.Both'] = "显示 `关键字` 与 `语法片段`。",
+ ['config.completion.keywordSnippet.Replace'] = "只显示 `语法片段`。",
+ ['config.zzzzzz.cat'] = 'DO NOT TOUCH ME, LET ME SLEEP >_<\n\n(这会启用还处于早期开发阶段的beta版,开启后所有的功能都会失效)',
+})
diff --git a/script/debugger.lua b/script/debugger.lua
new file mode 100644
index 00000000..79b2931d
--- /dev/null
+++ b/script/debugger.lua
@@ -0,0 +1,52 @@
+local fs = require 'bee.filesystem'
+local extensionPath = fs.path(os.getenv 'USERPROFILE') / '.vscode' / 'extensions'
+log.debug('Search extensions at:', extensionPath:string())
+if not fs.is_directory(extensionPath) then
+ log.debug('Extension path is not a directory.')
+ return
+end
+
+local luaDebugs = {}
+for path in extensionPath:list_directory() do
+ if fs.is_directory(path) then
+ local name = path:filename():string()
+ if name:find('actboy168.lua-debug-', 1, true) then
+ luaDebugs[#luaDebugs+1] = name
+ end
+ end
+end
+
+if #luaDebugs == 0 then
+ log.debug('Cant find "actboy168.lua-debug"')
+ return
+end
+
+local function getVer(filename)
+ local a, b, c = filename:match('(%d+)%.(%d+)%.(%d+)$')
+ if not a then
+ return 0
+ end
+ return a * 1000000 + b * 1000 + c
+end
+
+table.sort(luaDebugs, function (a, b)
+ return getVer(a) > getVer(b)
+end)
+
+local debugPath = extensionPath / luaDebugs[1]
+local cpath = "/runtime/win64/lua54/?.dll"
+local path = "/script/?.lua"
+
+local function tryDebugger()
+ local entry = assert(package.searchpath('debugger', debugPath:string() .. path))
+ local root = debugPath:string()
+ local port = '11411'
+ local addr = "127.0.0.1:" .. port
+ local dbg = loadfile(entry)('windows', root)
+ dbg:start(addr)
+ dbg:wait()
+ log.debug('Debugger startup, listen port:', port)
+ log.debug('Debugger args:', addr, root, path, cpath)
+end
+
+xpcall(tryDebugger, log.debug)
diff --git a/script/main.lua b/script/main.lua
new file mode 100644
index 00000000..afb32f03
--- /dev/null
+++ b/script/main.lua
@@ -0,0 +1,23 @@
+local currentPath = debug.getinfo(1, 'S').source:sub(2)
+local rootPath = currentPath:gsub('[/\\]*[^/\\]-$', '')
+dofile(rootPath .. '/platform.lua')
+local fs = require 'bee.filesystem'
+ROOT = fs.current_path() / rootPath
+LANG = LANG or 'en-US'
+
+--collectgarbage('generational')
+collectgarbage("setpause", 100)
+collectgarbage("setstepmul", 1000)
+
+log = require 'log'
+log.init(ROOT, ROOT / 'log' / 'service.log')
+log.info('Lua Lsp startup, root: ', ROOT)
+log.debug('ROOT:', ROOT:string())
+ac = {}
+
+--xpcall(dofile, log.debug, rootPath .. '/debugger.lua')
+require 'utility'
+local service = require 'service'
+local session = service()
+
+session:listen()
diff --git a/script/meta/Lua 5.4/basic.lua b/script/meta/Lua 5.4/basic.lua
new file mode 100644
index 00000000..54f74a5c
--- /dev/null
+++ b/script/meta/Lua 5.4/basic.lua
@@ -0,0 +1,145 @@
+--- 独立版Lua的启动参数。
+arg = {}
+
+--- 如果其参数 `v` 的值为假,它就调用 `error`。
+---@overload fun(v:any):any
+---@param v any
+---@param message any {optional = 'self'}
+---@return any
+function assert(v, message) end
+
+---@overload fun()
+---@overload fun(opt:GCOption):any
+---@param opt GCOption {optional = 'after'}
+---@param arg integer {optional = 'self'}
+---@return any
+function collectgarbage(opt, arg) end
+
+--- 打开该名字的文件,并执行文件中的 Lua 代码块。
+---@overload fun():any
+---@param filename string {optional = 'self', special = 'dofile:1'}
+---@return any
+function dofile(filename) end
+
+--- 中止上一次保护函数调用,将错误对象 `message` 返回。
+---@overload fun(message:any)
+---@param message any
+---@param level integer {optional = 'self'}
+function error(message, level) end
+
+--- 内部储存有全局环境。
+_G = {}
+
+--- 返回该对象的元表。
+---@param object any
+---@return table {name = 'metatable'}
+function getmetatable(object) end
+
+--- 能迭代表 `t` 中序列的键值对。
+---|```lua
+---|for i, v in ipairs(t) do
+---| -- body
+---|end
+---|```
+---@param t table
+---@return {name = 'iterator'}
+---@return table {name = 't'}
+---@return integer {name = 'i'}
+function ipairs(t)
+ --- 返回该键的下一个键及其关联的值。
+ ---@overload fun(t:table):integer,any
+ ---@param t table
+ ---@param index any {optional = 'self'}
+ ---@return integer {name = 'index'}
+ ---@return any {name = 'value'}
+ local function iterator(t, index) end
+
+ return iterator, t, nil
+end
+
+--- 加载一个代码块。
+---@overload fun():function,string
+---@overload fun(chunk:string|function):function,string
+---@overload fun(chunk:string|function, chunkname:string):function,string
+---@overload fun(chunk:string|function, chunkname:string, mode:loadOption):function,string
+---@param chunk string|function
+---@param chunkname string {optional = 'after'}
+---@param mode loadOption {optional = 'after'}
+---@param env table {optional = 'self'}
+---@return {name = 'init'}
+---@return string {name = 'errMessage', optional = 'self'}
+function load(chunk, chunkname, mode, env)
+ return function (...) end
+end
+
+--- 从文件中获取代码块。
+---@overload fun():function,string
+---@overload fun(filename:string):function,string
+---@overload fun(filename:string, mode:loadOption):function,string
+---@param filename string {optional = 'after', special = 'loadfile:1'}
+---@param mode loadOption {optional = 'after'}
+---@param env table {optional = 'self'}
+---@return {name = 'init'}
+---@return string {name = 'errMessage', optional = 'self'}
+function loadfile(filename, mode, env)
+ return function (...) end
+end
+
+--- 返回该键的下一个键及其关联的值。
+---@overload fun(t:table):any, any
+---@param t table
+---@param index any {optional = 'self'}
+---@return any {name = 'key'}
+---@return any {name = 'value'}
+function next(t, index) end
+
+--- 能迭代表 `t` 中的所有键值对。
+---|```lua
+---|for k, v in pairs(t) do
+---| -- body
+---|end
+---|```
+---@param t table
+---@return {name = 'next'}
+---@return table {name = 't'}
+---@return any {name = 'key'}
+function pairs(t)
+ --- 返回该键的下一个键及其关联的值。
+ ---@overload fun(t:table):any, any
+ ---@param t table
+ ---@param index any {optional = 'self'}
+ ---@return any {name = 'key'}
+ ---@return any {name = 'value'}
+ local function next(t, index) end
+
+ return next, t, nil
+end
+
+--- 传入参数,以 *保护模式* 调用函数 `f` 。
+---@param f function {special = 'pcall:1'}
+---@param arg1 any {optional = 'after'}
+---@return boolean {name = 'success'}
+---@return {name = 'result'}
+function pcall(f, arg1, ...)
+end
+
+--- 接收任意数量的参数,并将它们的值打印到 `stdout`。
+function print(...)
+end
+
+--- 在不触发任何元方法的情况下 检查 `v1` 是否和 `v2` 相等。
+---@param v1 any
+---@param v2 any
+---@return boolean
+function rawequal(v1, v2)
+end
+
+--- 加载一个模块,返回该模块的返回值(`nil`时为`true`)。
+---@param modname string {special = 'require:1'}
+---@return any
+---@return {name = 'loaderdata'}
+function require(modname)
+end
+
+--- 当前解释器版本号。
+_VERSION = 'Lua 5.4'
diff --git a/script/meta/Lua 5.4/meta.lua b/script/meta/Lua 5.4/meta.lua
new file mode 100644
index 00000000..4fe28af2
--- /dev/null
+++ b/script/meta/Lua 5.4/meta.lua
@@ -0,0 +1,27 @@
+---@class any
+---@class string any
+---@class number any
+---@class integer number
+---@class boolean any
+---@class table any
+---@class function any
+---@class nil any
+---@class userdata any
+---@class thread any
+
+---@alias GCOption string
+---| > '"collect"' # 做一次完整的垃圾收集循环。
+---| '"stop"' # 停止垃圾收集器的运行。
+---| '"restart"' # 重启垃圾收集器的自动运行。
+---| '"count"' # 以 K 字节数为单位返回 Lua 使用的总内存数。
+---| '"step"' # 单步运行垃圾收集器。
+---| '"setpause"' # 设置收集器的 `间歇率`。
+---| '"setstepmul"' # 设置收集器的 `步进倍率`。
+---| '"incremental"' # 改变收集器模式为增量模式。
+---| '"generational"' # 改变收集器模式为分代模式。
+---| '"isrunning"' # 返回表示收集器是否在工作的布尔值。
+
+---@alias loadOption string
+---| "'b'" # 只能是二进制代码块。
+---| "'t'" # 只能是文本代码块。
+---| > "'bt'" # 可以是二进制也可以是文本。
diff --git a/script/platform.lua b/script/platform.lua
new file mode 100644
index 00000000..5384ad3d
--- /dev/null
+++ b/script/platform.lua
@@ -0,0 +1,26 @@
+local currentPath = debug.getinfo(1, 'S').source:sub(2)
+local rootPath = currentPath:gsub('[^/\\]-$', '')
+if package.loadlib(rootPath .. 'Windows/bin/bee.dll', 'luaopen_bee_platform') then
+ if rootPath == '' then
+ rootPath = '.\\'
+ end
+ package.cpath = rootPath .. 'Windows\\bin\\?.dll'
+ package.path = rootPath .. 'src\\?.lua'
+ .. ';' .. rootPath .. 'src\\?\\init.lua'
+elseif package.loadlib(rootPath .. 'macOS/bin/bee.so', 'luaopen_bee_platform') then
+ if rootPath == '' then
+ rootPath = './'
+ end
+ package.cpath = rootPath .. 'macOS/bin/?.so'
+ package.path = rootPath .. 'src/?.lua'
+ .. ';' .. rootPath .. 'src/?/init.lua'
+elseif package.loadlib(rootPath .. 'Linux/bin/bee.so', 'luaopen_bee_platform') then
+ if rootPath == '' then
+ rootPath = './'
+ end
+ package.cpath = rootPath .. 'Linux/bin/?.so'
+ package.path = rootPath .. 'src/?.lua'
+ .. ';' .. rootPath .. 'src/?/init.lua'
+else
+ error([[It doesn't seem to support your OS, please let me know at https://github.com/sumneko/lua-language-server/issues]])
+end
diff --git a/script/publish.lua b/script/publish.lua
new file mode 100644
index 00000000..7d0321aa
--- /dev/null
+++ b/script/publish.lua
@@ -0,0 +1,189 @@
+local currentPath = debug.getinfo(1, 'S').source:sub(2)
+local rootPath = currentPath:gsub('[^/\\]-$', '')
+if rootPath == '' then
+ rootPath = './'
+end
+dofile(rootPath .. 'platform.lua')
+local fs = require 'bee.filesystem'
+local subprocess = require 'bee.subprocess'
+local platform = require 'bee.platform'
+ROOT = fs.absolute(fs.path(rootPath):parent_path())
+EXTENSION = ROOT:parent_path()
+
+require 'utility'
+local json = require 'json'
+
+local function loadPackage()
+ local buf = io.load(EXTENSION / 'package.json')
+ if not buf then
+ error(ROOT:string() .. '|' .. EXTENSION:string())
+ end
+ local package = json.decode(buf)
+ return package.version
+end
+
+local function updateNodeModules(out, postinstall)
+ local current = fs.current_path()
+ fs.current_path(out)
+ local cmd = io.popen(postinstall)
+ for line in cmd:lines 'l' do
+ print(line)
+ end
+ local suc = cmd:close()
+ if not suc then
+ error('更新NodeModules失败!')
+ end
+ fs.current_path(current)
+end
+
+local function createDirectory(version)
+ local out = EXTENSION / 'publish' / version
+ fs.create_directories(out)
+ return out
+end
+
+local function copyFiles(root, out)
+ return function (dirs)
+ local count = 0
+ local function copy(relative, mode)
+ local source = root / relative
+ local target = out / relative
+ if not fs.exists(source) then
+ return
+ end
+ if fs.is_directory(source) then
+ fs.create_directory(target)
+ if mode == true then
+ for path in source:list_directory() do
+ copy(relative / path:filename(), true)
+ end
+ else
+ for name, v in pairs(mode) do
+ copy(relative / name, v)
+ end
+ end
+ else
+ fs.copy_file(source, target)
+ count = count + 1
+ end
+ end
+
+ copy(fs.path '', dirs)
+ return count
+ end
+end
+
+local function runTest(root)
+ local ext = platform.OS == 'Windows' and '.exe' or ''
+ local exe = root / platform.OS / 'bin' / 'lua-language-server' .. ext
+ local test = root / 'test.lua'
+ local lua = subprocess.spawn {
+ exe,
+ test,
+ '-E',
+ cwd = root,
+ stdout = true,
+ stderr = true,
+ }
+ for line in lua.stdout:lines 'l' do
+ print(line)
+ end
+ lua:wait()
+ local err = lua.stderr:read 'a'
+ if err ~= '' then
+ error(err)
+ end
+end
+
+local function removeFiles(out)
+ return function (dirs)
+ local function remove(relative, mode)
+ local target = out / relative
+ if not fs.exists(target) then
+ return
+ end
+ if fs.is_directory(target) then
+ if mode == true then
+ for path in target:list_directory() do
+ remove(relative / path:filename(), true)
+ end
+ fs.remove(target)
+ else
+ for name, v in pairs(mode) do
+ remove(relative / name, v)
+ end
+ end
+ else
+ fs.remove(target)
+ end
+ end
+
+ remove(fs.path '', dirs)
+ end
+end
+
+local version = loadPackage()
+print('版本号为:' .. version)
+
+local out = createDirectory(version)
+
+print('清理目录...')
+removeFiles(out)(true)
+
+print('开始复制文件...')
+local count = copyFiles(EXTENSION , out) {
+ ['client'] = {
+ ['node_modules'] = true,
+ ['out'] = true,
+ ['package-lock.json'] = true,
+ ['package.json'] = true,
+ ['tsconfig.json'] = true,
+ },
+ ['server'] = {
+ ['Windows'] = true,
+ ['macOS'] = true,
+ ['Linux'] = true,
+ ['libs'] = true,
+ ['locale'] = true,
+ ['src'] = true,
+ ['test'] = true,
+ ['main.lua'] = true,
+ ['platform.lua'] = true,
+ ['test.lua'] = true,
+ ['build_package.lua'] = true,
+ },
+ ['images'] = {
+ ['logo.png'] = true,
+ },
+ ['syntaxes'] = true,
+ ['package-lock.json'] = true,
+ ['package.json'] = true,
+ ['README.md'] = true,
+ ['tsconfig.json'] = true,
+ ['package.nls.json'] = true,
+ ['package.nls.zh-cn.json'] = true,
+}
+print(('复制了[%d]个文件'):format(count))
+
+print('开始测试...')
+runTest(out / 'server')
+
+print('删除多余文件...')
+removeFiles(out) {
+ ['server'] = {
+ ['log'] = true,
+ ['test'] = true,
+ ['test.lua'] = true,
+ ['build_package.lua'] = true,
+ },
+}
+
+local path = EXTENSION / 'publish' / 'lua'
+print('清理发布目录...')
+removeFiles(path)(true)
+
+print('复制到发布目录...')
+local count = copyFiles(out, path)(true)
+print(('复制了[%d]个文件'):format(count))
+
+print('完成')
diff --git a/script/src/3rd/lua-uri/uri.lua b/script/src/3rd/lua-uri/uri.lua
new file mode 100644
index 00000000..395edcd9
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri.lua
@@ -0,0 +1,504 @@
+local M = { _NAME = "uri", VERSION = "1.0" }
+M.__index = M
+
+local Util = require "uri._util"
+
+local _UNRESERVED = "A-Za-z0-9%-._~"
+local _GEN_DELIMS = ":/?#%[%]@"
+local _SUB_DELIMS = "!$&'()*+,;="
+local _RESERVED = _GEN_DELIMS .. _SUB_DELIMS
+local _USERINFO = "^[" .. _UNRESERVED .. "%%" .. _SUB_DELIMS .. ":]*$"
+local _REG_NAME = "^[" .. _UNRESERVED .. "%%" .. _SUB_DELIMS .. "]*$"
+local _IP_FUTURE_LITERAL = "^v[0-9A-Fa-f]+%." ..
+ "[" .. _UNRESERVED .. _SUB_DELIMS .. "]+$"
+local _QUERY_OR_FRAG = "^[" .. _UNRESERVED .. "%%" .. _SUB_DELIMS .. ":@/?]*$"
+local _PATH_CHARS = "^[" .. _UNRESERVED .. "%%" .. _SUB_DELIMS .. ":@/]*$"
+
+local function _normalize_percent_encoding (s)
+ if s:find("%%$") or s:find("%%.$") then
+ error("unfinished percent encoding at end of URI '" .. s .. "'")
+ end
+
+ return s:gsub("%%(..)", function (hex)
+ if not hex:find("^[0-9A-Fa-f][0-9A-Fa-f]$") then
+ error("invalid percent encoding '%" .. hex ..
+ "' in URI '" .. s .. "'")
+ end
+
+ -- Never percent-encode unreserved characters, and always use uppercase
+ -- hexadecimal for percent encoding. RFC 3986 section 6.2.2.2.
+ local char = string.char(tonumber("0x" .. hex))
+ return char:find("^[" .. _UNRESERVED .. "]") and char or "%" .. hex:upper()
+ end)
+end
+
+local function _is_ip4_literal (s)
+ if not s:find("^[0-9]+%.[0-9]+%.[0-9]+%.[0-9]+$") then return false end
+
+ for dec_octet in s:gmatch("[0-9]+") do
+ if dec_octet:len() > 3 or dec_octet:find("^0.") or
+ tonumber(dec_octet) > 255 then
+ return false
+ end
+ end
+
+ return true
+end
+
+local function _is_ip6_literal (s)
+ local had_elipsis = false -- true when '::' found
+ local num_chunks = 0
+ while s ~= "" do
+ num_chunks = num_chunks + 1
+ local p1, p2 = s:find("::?")
+ local chunk
+ if p1 then
+ chunk = s:sub(1, p1 - 1)
+ s = s:sub(p2 + 1)
+ if p2 ~= p1 then -- found '::'
+ if had_elipsis then return false end -- two of '::'
+ had_elipsis = true
+ if chunk == "" then num_chunks = num_chunks - 1 end
+ else
+ if chunk == "" then return false end -- ':' at start
+ if s == "" then return false end -- ':' at end
+ end
+ else
+ chunk = s
+ s = ""
+ end
+
+ -- Chunk is neither 4-digit hex num, nor IPv4address in last chunk.
+ if (not chunk:find("^[0-9a-f]+$") or chunk:len() > 4) and
+ (s ~= "" or not _is_ip4_literal(chunk)) and
+ chunk ~= "" then
+ return false
+ end
+
+ -- IPv4address in last position counts for two chunks of hex digits.
+ if chunk:len() > 4 then num_chunks = num_chunks + 1 end
+ end
+
+ if had_elipsis then
+ if num_chunks > 7 then return false end
+ else
+ if num_chunks ~= 8 then return false end
+ end
+
+ return true
+end
+
+local function _is_valid_host (host)
+ if host:find("^%[.*%]$") then
+ local ip_literal = host:sub(2, -2)
+ if ip_literal:find("^v") then
+ if not ip_literal:find(_IP_FUTURE_LITERAL) then
+ return "invalid IPvFuture literal '" .. ip_literal .. "'"
+ end
+ else
+ if not _is_ip6_literal(ip_literal) then
+ return "invalid IPv6 address '" .. ip_literal .. "'"
+ end
+ end
+ elseif not _is_ip4_literal(host) and not host:find(_REG_NAME) then
+ return "invalid host value '" .. host .. "'"
+ end
+
+ return nil
+end
+
+local function _normalize_and_check_path (s, normalize)
+ if not s:find(_PATH_CHARS) then return false end
+ if not normalize then return s end
+
+ -- Remove unnecessary percent encoding for path values.
+ -- TODO - I think this should be HTTP-specific (probably file also).
+ --s = Util.uri_decode(s, _SUB_DELIMS .. ":@")
+
+ return Util.remove_dot_segments(s)
+end
+
+function M.new (class, uri, base)
+ if not uri then error("usage: URI:new(uristring, [baseuri])") end
+ if type(uri) ~= "string" then uri = tostring(uri) end
+
+ if base then
+ local uri, err = M.new(class, uri)
+ if not uri then return nil, err end
+ if type(base) ~= "table" then
+ base, err = M.new(class, base)
+ if not base then return nil, "error parsing base URI: " .. err end
+ end
+ if base:is_relative() then return nil, "base URI must be absolute" end
+ local ok, err = pcall(uri.resolve, uri, base)
+ if not ok then return nil, err end
+ return uri
+ end
+
+ local s = _normalize_percent_encoding(uri)
+
+ local _, p
+ local scheme, authority, userinfo, host, port, path, query, fragment
+
+ _, p, scheme = s:find("^([a-zA-Z][-+.a-zA-Z0-9]*):")
+ if scheme then
+ scheme = scheme:lower()
+ s = s:sub(p + 1)
+ end
+
+ _, p, authority = s:find("^//([^/?#]*)")
+ if authority then
+ s = s:sub(p + 1)
+
+ _, p, userinfo = authority:find("^([^@]*)@")
+ if userinfo then
+ if not userinfo:find(_USERINFO) then
+ return nil, "invalid userinfo value '" .. userinfo .. "'"
+ end
+ authority = authority:sub(p + 1)
+ end
+
+ p, _, port = authority:find(":([0-9]*)$")
+ if port then
+ port = (port ~= "") and tonumber(port) or nil
+ authority = authority:sub(1, p - 1)
+ end
+
+ host = authority:lower()
+ local err = _is_valid_host(host)
+ if err then return nil, err end
+ end
+
+ _, p, path = s:find("^([^?#]*)")
+ if path ~= "" then
+ local normpath = _normalize_and_check_path(path, scheme)
+ if not normpath then return nil, "invalid path '" .. path .. "'" end
+ path = normpath
+ s = s:sub(p + 1)
+ end
+
+ _, p, query = s:find("^%?([^#]*)")
+ if query then
+ s = s:sub(p + 1)
+ if not query:find(_QUERY_OR_FRAG) then
+ return nil, "invalid query value '?" .. query .. "'"
+ end
+ end
+
+ _, p, fragment = s:find("^#(.*)")
+ if fragment then
+ if not fragment:find(_QUERY_OR_FRAG) then
+ return nil, "invalid fragment value '#" .. fragment .. "'"
+ end
+ end
+
+ local o = {
+ _scheme = scheme,
+ _userinfo = userinfo,
+ _host = host,
+ _port = port,
+ _path = path,
+ _query = query,
+ _fragment = fragment,
+ }
+ setmetatable(o, scheme and class or (require "uri._relative"))
+
+ return o:init()
+end
+
+function M.uri (self, ...)
+ local uri = self._uri
+
+ if not uri then
+ local scheme = self:scheme()
+ if scheme then
+ uri = scheme .. ":"
+ else
+ uri = ""
+ end
+
+ local host, port, userinfo = self:host(), self._port, self:userinfo()
+ if host or port or userinfo then
+ uri = uri .. "//"
+ if userinfo then uri = uri .. userinfo .. "@" end
+ if host then uri = uri .. host end
+ if port then uri = uri .. ":" .. port end
+ end
+
+ local path = self:path()
+ if uri == "" and path:find("^[^/]*:") then
+ path = "./" .. path
+ end
+
+ uri = uri .. path
+ if self:query() then uri = uri .. "?" .. self:query() end
+ if self:fragment() then uri = uri .. "#" .. self:fragment() end
+
+ self._uri = uri -- cache
+ end
+
+ if select("#", ...) > 0 then
+ local new = ...
+ if not new then error("URI can't be set to nil") end
+ local newuri, err = M:new(new)
+ if not newuri then
+ error("new URI string is invalid (" .. err .. ")")
+ end
+ setmetatable(self, getmetatable(newuri))
+ for k in pairs(self) do self[k] = nil end
+ for k, v in pairs(newuri) do self[k] = v end
+ end
+
+ return uri
+end
+
+function M.__tostring (self) return self:uri() end
+
+function M.eq (a, b)
+ if type(a) == "string" then a = assert(M:new(a)) end
+ if type(b) == "string" then b = assert(M:new(b)) end
+ return a:uri() == b:uri()
+end
+
+function M.scheme (self, ...)
+ local old = self._scheme
+
+ if select("#", ...) > 0 then
+ local new = ...
+ if not new then error("can't remove scheme from absolute URI") end
+ if type(new) ~= "string" then new = tostring(new) end
+ if not new:find("^[a-zA-Z][-+.a-zA-Z0-9]*$") then
+ error("invalid scheme '" .. new .. "'")
+ end
+ Util.do_class_changing_change(self, M, "scheme", new,
+ function (uri, new) uri._scheme = new end)
+ end
+
+ return old
+end
+
+function M.userinfo (self, ...)
+ local old = self._userinfo
+
+ if select("#", ...) > 0 then
+ local new = ...
+ if new then
+ if not new:find(_USERINFO) then
+ error("invalid userinfo value '" .. new .. "'")
+ end
+ new = _normalize_percent_encoding(new)
+ end
+ self._userinfo = new
+ if new and not self._host then self._host = "" end
+ self._uri = nil
+ end
+
+ return old
+end
+
+function M.host (self, ...)
+ local old = self._host
+
+ if select("#", ...) > 0 then
+ local new = ...
+ if new then
+ new = tostring(new):lower()
+ local err = _is_valid_host(new)
+ if err then error(err) end
+ else
+ if self._userinfo or self._port then
+ error("there must be a host if there is a userinfo or port," ..
+ " although it can be the empty string")
+ end
+ end
+ self._host = new
+ self._uri = nil
+ end
+
+ return old
+end
+
+function M.port (self, ...)
+ local old = self._port or self:default_port()
+
+ if select("#", ...) > 0 then
+ local new = ...
+ if new then
+ if type(new) == "string" then new = tonumber(new) end
+ if new < 0 then error("port number must not be negative") end
+ local newint = new - new % 1
+ if newint ~= new then error("port number not integer") end
+ if new == self:default_port() then new = nil end
+ end
+ self._port = new
+ if new and not self._host then self._host = "" end
+ self._uri = nil
+ end
+
+ return old
+end
+
+function M.path (self, ...)
+ local old = self._path
+
+ if select("#", ...) > 0 then
+ local new = ... or ""
+ new = _normalize_percent_encoding(new)
+ new = Util.uri_encode(new, "^A-Za-z0-9%-._~%%!$&'()*+,;=:@/")
+ if self._host then
+ if new ~= "" and not new:find("^/") then
+ error("path must begin with '/' when there is an authority")
+ end
+ else
+ if new:find("^//") then new = "/%2F" .. new:sub(3) end
+ end
+ self._path = new
+ self._uri = nil
+ end
+
+ return old
+end
+
+function M.query (self, ...)
+ local old = self._query
+
+ if select("#", ...) > 0 then
+ local new = ...
+ if new then
+ new = Util.uri_encode(new, "^" .. _UNRESERVED .. "%%" .. _SUB_DELIMS .. ":@/?")
+ end
+ self._query = new
+ self._uri = nil
+ end
+
+ return old
+end
+
+function M.fragment (self, ...)
+ local old = self._fragment
+
+ if select("#", ...) > 0 then
+ local new = ...
+ if new then
+ new = Util.uri_encode(new, "^" .. _UNRESERVED .. "%%" .. _SUB_DELIMS .. ":@/?")
+ end
+ self._fragment = new
+ self._uri = nil
+ end
+
+ return old
+end
+
+function M.init (self)
+ local scheme_class
+ = Util.attempt_require("uri." .. self._scheme:gsub("[-+.]", "_"))
+ if scheme_class then
+ setmetatable(self, scheme_class)
+ if self._port and self._port == self:default_port() then
+ self._port = nil
+ end
+ -- Call the subclass 'init' method, if it has its own.
+ if scheme_class ~= M and self.init ~= M.init then
+ return self:init()
+ end
+ end
+ return self
+end
+
+function M.default_port () return nil end
+function M.is_relative () return false end
+function M.resolve () end -- only does anything in uri._relative
+
+-- TODO - there should probably be an option or something allowing you to
+-- choose between making a link relative whenever possible (always using a
+-- relative path if the scheme and authority are the same as the base URI) or
+-- just using a relative reference to make the link as small as possible, which
+-- might meaning using a path of '/' instead if '../../../' or whatever.
+-- This method's algorithm is loosely based on the one described here:
+-- http://lists.w3.org/Archives/Public/uri/2007Sep/0003.html
+function M.relativize (self, base)
+ if type(base) == "string" then base = assert(M:new(base)) end
+
+ -- Leave it alone if we can't a relative URI, or if it would be a network
+ -- path reference.
+ if self._scheme ~= base._scheme or self._host ~= base._host or
+ self._port ~= base._port or self._userinfo ~= base._userinfo then
+ return
+ end
+
+ local basepath = base._path
+ local oldpath = self._path
+ -- This is to avoid trying to make a URN or something relative, which
+ -- is likely to lead to grief.
+ if not basepath:find("^/") or not oldpath:find("^/") then return end
+
+ -- Turn it into a relative reference.
+ self._uri = nil
+ self._scheme = nil
+ self._host = nil
+ self._port = nil
+ self._userinfo = nil
+ setmetatable(self, require "uri._relative")
+
+ -- Use empty path if the path in the base URI is already correct.
+ if oldpath == basepath then
+ if self._query or not base._query then
+ self._path = ""
+ else
+ -- An empty URI reference leaves the query string in the base URI
+ -- unchanged, so to get a result with no query part we have to
+ -- have something in the relative path.
+ local _, _, lastseg = oldpath:find("/([^/]+)$")
+ if lastseg and lastseg:find(":") then lastseg = "./" .. lastseg end
+ self._path = lastseg or "."
+ end
+ return
+ end
+
+ if oldpath == "/" or basepath == "/" then return end
+
+ local basesegs = Util.split("/", basepath:sub(2))
+ local oldsegs = Util.split("/", oldpath:sub(2))
+
+ if oldsegs[1] ~= basesegs[1] then return end
+
+ table.remove(basesegs)
+
+ while #oldsegs > 1 and #basesegs > 0 and oldsegs[1] == basesegs[1] do
+ table.remove(oldsegs, 1)
+ table.remove(basesegs, 1)
+ end
+
+ local path_naked = true
+ local newpath = ""
+ while #basesegs > 0 do
+ table.remove(basesegs, 1)
+ newpath = newpath .. "../"
+ path_naked = false
+ end
+
+ if path_naked and #oldsegs == 1 and oldsegs[1] == "" then
+ newpath = "./"
+ table.remove(oldsegs)
+ end
+
+ while #oldsegs > 0 do
+ if path_naked then
+ if oldsegs[1]:find(":") then
+ newpath = newpath .. "./"
+ elseif #oldsegs > 1 and oldsegs[1] == "" and oldsegs[2] == "" then
+ newpath = newpath .. "/."
+ end
+ end
+
+ newpath = newpath .. oldsegs[1]
+ path_naked = false
+ table.remove(oldsegs, 1)
+ if #oldsegs > 0 then newpath = newpath .. "/" end
+ end
+
+ self._path = newpath
+end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/_login.lua b/script/src/3rd/lua-uri/uri/_login.lua
new file mode 100644
index 00000000..4e9e6844
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/_login.lua
@@ -0,0 +1,96 @@
+local M = { _NAME = "uri._login" }
+local Util = require "uri._util"
+local URI = require "uri"
+Util.subclass_of(M, URI)
+
+-- Generic terminal logins. This is used as a base class for 'telnet' and
+-- 'ftp' URL schemes.
+
+local function _valid_userinfo (userinfo)
+ if userinfo then
+ local colon = userinfo:find(":")
+ if colon and userinfo:find(":", colon + 1) then
+ return nil, "only one colon allowed in userinfo"
+ end
+ end
+ return true
+end
+
+-- TODO - this is a bit of a hack because currently subclasses are required
+-- to know whether their superclass has one of these that needs calling.
+-- It should be called from 'init' before anything more specific is done,
+-- and it has the same calling convention.
+-- According to RFC 1738 there should be at most one colon in the userinfo.
+-- I apply that restriction for schemes where it's used for a username/password
+-- pair.
+function M.init_base (self)
+ local host = self:host()
+ if not host or host == "" then
+ return nil, "host missing from login URI"
+ end
+
+ local ok, err = _valid_userinfo(self:userinfo())
+ if not ok then return nil, err end
+
+ return self
+end
+
+function M.userinfo (self, ...)
+ if select("#", ...) > 0 then
+ local ok, err = _valid_userinfo(...)
+ if not ok then error("invalid userinfo value (" .. err .. ")") end
+ end
+ return M._SUPER.userinfo(self, ...)
+end
+
+function M.username (self, ...)
+ local info = M._SUPER.userinfo(self)
+ local old, colon
+ if info then
+ local colon = info and info:find(":")
+ old = colon and info:sub(1, colon - 1) or info
+ old = Util.uri_decode(old)
+ end
+
+ if select('#', ...) > 0 then
+ local pass = colon and info:sub(colon) or "" -- includes colon
+ local new = ...
+ if not new then
+ M._SUPER.userinfo(self, nil)
+ else
+ -- Escape anything that's not allowed in a userinfo, and also
+ -- colon, because that indicates the end of the username.
+ new = Util.uri_encode(new, "^A-Za-z0-9%-._~!$&'()*+,;=")
+ M._SUPER.userinfo(self, new .. pass)
+ end
+ end
+
+ return old
+end
+
+function M.password (self, ...)
+ local info = M._SUPER.userinfo(self)
+ local old, colon
+ if info then
+ colon = info and info:find(":")
+ old = colon and info:sub(colon + 1) or nil
+ if old then old = Util.uri_decode(old) end
+ end
+
+ if select('#', ...) > 0 then
+ local new = ...
+ local user = colon and info:sub(1, colon - 1) or info
+ if not new then
+ M._SUPER.userinfo(self, user)
+ else
+ if not user then user = "" end
+ new = Util.uri_encode(new, "^A-Za-z0-9%-._~!$&'()*+,;=")
+ M._SUPER.userinfo(self, user .. ":" .. new)
+ end
+ end
+
+ return old
+end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/_relative.lua b/script/src/3rd/lua-uri/uri/_relative.lua
new file mode 100644
index 00000000..8cd53ca7
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/_relative.lua
@@ -0,0 +1,81 @@
+local M = { _NAME = "uri._relative" }
+local Util = require "uri._util"
+local URI = require "uri"
+Util.subclass_of(M, URI)
+
+-- There needs to be an 'init' method in this class, to because the base-class
+-- one expects there to be a 'scheme' value.
+function M.init (self)
+ return self
+end
+
+function M.scheme (self, ...)
+ if select("#", ...) > 0 then
+ error("relative URI references can't have a scheme, perhaps you" ..
+ " need to resolve this against an absolute URI instead")
+ end
+ return nil
+end
+
+function M.is_relative () return true end
+
+-- This implements the algorithm from RFC 3986 section 5.2.3
+-- Note that this takes an additional argument which appears to be required
+-- by the algorithm, but isn't shown when it is used in the RFC.
+local function _merge_paths (base, r, base_has_auth)
+ if base_has_auth and base == "" then
+ return "/" .. r
+ end
+
+ return base:gsub("[^/]+$", "", 1) .. r
+end
+
+local function _do_resolve (self, base)
+ if type(base) == "string" then base = assert(URI:new(base)) end
+ setmetatable(self, URI)
+
+ if self:host() or self:userinfo() or self:port() then
+ -- network path reference, just needs a scheme
+ self:path(Util.remove_dot_segments(self:path()))
+ self:scheme(base:scheme())
+ return
+ end
+
+ local path = self:path()
+ if path == "" then
+ self:path(base:path())
+ if not self:query() then self:query(base:query()) end
+ else
+ if path:find("^/") then
+ self:path(Util.remove_dot_segments(path))
+ else
+ local base_has_auth = base:host() or base:userinfo() or base:port()
+ local merged = _merge_paths(base:path(), path, base_has_auth)
+ self:path(Util.remove_dot_segments(merged))
+ end
+ end
+ self:host(base:host())
+ self:userinfo(base:userinfo())
+ self:port(base:port())
+ self:scheme(base:scheme())
+end
+
+function M.resolve (self, base)
+ local orig = tostring(self)
+ local ok, result = pcall(_do_resolve, self, base)
+ if ok then return end
+
+ -- If the resolving causes an exception, it means that the resulting URI
+ -- would be invalid, so we restore self to its original state and rethrow
+ -- the exception.
+ local restored = assert(URI:new(orig))
+ for k in pairs(self) do self[k] = nil end
+ for k, v in pairs(restored) do self[k] = v end
+ setmetatable(self, getmetatable(restored))
+ error("resolved URI reference would be invalid: " .. result)
+end
+
+function M.relativize (self, base) end -- already relative
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/_util.lua b/script/src/3rd/lua-uri/uri/_util.lua
new file mode 100644
index 00000000..16a3b289
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/_util.lua
@@ -0,0 +1,128 @@
+local M = { _NAME = "uri._util" }
+
+-- Build a char->hex map
+local escapes = {}
+for i = 0, 255 do
+ escapes[string.char(i)] = string.format("%%%02X", i)
+end
+
+function M.uri_encode (text, patn)
+ if not text then return end
+ if not patn then
+ -- Default unsafe characters. RFC 2732 ^(uric - reserved)
+ -- TODO - this should be updated to the latest RFC.
+ patn = "^A-Za-z0-9%-_.!~*'()"
+ end
+ return (text:gsub("([" .. patn .. "])",
+ function (chr) return escapes[chr] end))
+end
+
+function M.uri_decode (str, patn)
+ -- Note from RFC1630: "Sequences which start with a percent sign
+ -- but are not followed by two hexadecimal characters are reserved
+ -- for future extension"
+ if not str then return end
+ if patn then patn = "[" .. patn .. "]" end
+ return (str:gsub("%%(%x%x)", function (hex)
+ local char = string.char(tonumber(hex, 16))
+ return (patn and not char:find(patn)) and "%" .. hex or char
+ end))
+end
+
+-- This is the remove_dot_segments algorithm from RFC 3986 section 5.2.4.
+-- The input buffer is 's', the output buffer 'path'.
+function M.remove_dot_segments (s)
+ local path = ""
+
+ while s ~= "" do
+ if s:find("^%.%.?/") then -- A
+ s = s:gsub("^%.%.?/", "", 1)
+ elseif s:find("^/%./") or s == "/." then -- B
+ s = s:gsub("^/%./?", "/", 1)
+ elseif s:find("^/%.%./") or s == "/.." then -- C
+ s = s:gsub("^/%.%./?", "/", 1)
+ if path:find("/") then
+ path = path:gsub("/[^/]*$", "", 1)
+ else
+ path = ""
+ end
+ elseif s == "." or s == ".." then -- D
+ s = ""
+ else -- E
+ local _, p, seg = s:find("^(/?[^/]*)")
+ s = s:sub(p + 1)
+ path = path .. seg
+ end
+ end
+
+ return path
+end
+
+-- TODO - wouldn't this be better as a method on string? s:split(patn)
+function M.split (patn, s, max)
+ if s == "" then return {} end
+
+ local i, j = 1, string.find(s, patn)
+ if not j then return { s } end
+
+ local list = {}
+ while true do
+ if #list + 1 == max then list[max] = s:sub(i); return list end
+ list[#list + 1] = s:sub(i, j - 1)
+ i = j + 1
+ j = string.find(s, patn, i)
+ if not j then
+ list[#list + 1] = s:sub(i)
+ break
+ end
+ end
+ return list
+end
+
+function M.attempt_require (modname)
+ local ok, result = pcall(require, modname)
+ if ok then
+ return result
+ elseif type(result) == "string" and
+ result:find("module '.*' not found") then
+ return nil
+ else
+ error(result)
+ end
+end
+
+function M.subclass_of (class, baseclass)
+ class.__index = class
+ class.__tostring = baseclass.__tostring
+ class._SUPER = baseclass
+ setmetatable(class, baseclass)
+end
+
+function M.do_class_changing_change (uri, baseclass, changedesc, newvalue,
+ changefunc)
+ local tmpuri = {}
+ setmetatable(tmpuri, baseclass)
+ for k, v in pairs(uri) do tmpuri[k] = v end
+ changefunc(tmpuri, newvalue)
+ tmpuri._uri = nil
+
+ local foo, err = tmpuri:init()
+ if not foo then
+ error("URI not valid after " .. changedesc .. " changed to '" ..
+ newvalue .. "': " .. err)
+ end
+
+ setmetatable(uri, getmetatable(tmpuri))
+ for k in pairs(uri) do uri[k] = nil end
+ for k, v in pairs(tmpuri) do uri[k] = v end
+end
+
+function M.uri_part_not_allowed (class, method)
+ class[method] = function (self, new)
+ if new then error(method .. " not allowed on this kind of URI") end
+ return self["_" .. method]
+ end
+end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/data.lua b/script/src/3rd/lua-uri/uri/data.lua
new file mode 100644
index 00000000..c425621a
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/data.lua
@@ -0,0 +1,116 @@
+local M = { _NAME = "uri.data" }
+local Util = require "uri._util"
+local URI = require "uri"
+Util.subclass_of(M, URI)
+
+-- This implements the 'data' scheme defined in RFC 2397.
+
+local Filter = Util.attempt_require("datafilter")
+
+local function _valid_base64 (data) return data:find("^[0-9a-zA-Z/+]*$") end
+
+local function _split_path (path)
+ local _, _, mediatype, data = path:find("^([^,]*),(.*)")
+ if not mediatype then return "must have comma in path" end
+ local base64 = false
+ if mediatype:find(";base64$") then
+ base64 = true
+ mediatype = mediatype:sub(1, -8)
+ end
+ if base64 and not _valid_base64(data) then
+ return "illegal character in base64 encoding"
+ end
+ return nil, mediatype, base64, data
+end
+
+function M.init (self)
+ if M._SUPER.host(self) then
+ return nil, "data URIs may not have authority parts"
+ end
+ local err, mediatype, base64, data = _split_path(M._SUPER.path(self))
+ if err then return nil, "invalid data URI (" .. err .. ")" end
+ return self
+end
+
+function M.data_media_type (self, ...)
+ local _, old, base64, data = _split_path(M._SUPER.path(self))
+
+ if select('#', ...) > 0 then
+ local new = ... or ""
+ new = Util.uri_encode(new, "^A-Za-z0-9%-._~!$&'()*+;=:@/")
+ if base64 then new = new .. ";base64" end
+ M._SUPER.path(self, new .. "," .. data)
+ end
+
+ if old ~= "" then
+ if old:find("^;") then old = "text/plain" .. old end
+ return Util.uri_decode(old)
+ else
+ return "text/plain;charset=US-ASCII" -- default type
+ end
+end
+
+local function _urienc_len (s)
+ local num_unsafe_chars = s:gsub("[A-Za-z0-9%-._~!$&'()*+,;=:@/]", ""):len()
+ local num_safe_chars = s:len() - num_unsafe_chars
+ return num_safe_chars + num_unsafe_chars * 3
+end
+
+local function _base64_len (s)
+ local num_blocks = (s:len() + 2) / 3
+ num_blocks = num_blocks - num_blocks % 1
+ return num_blocks * 4
+ + 7 -- because of ";base64" marker
+end
+
+local function _do_filter (algorithm, input)
+ return Filter[algorithm](input)
+end
+
+function M.data_bytes (self, ...)
+ local _, mediatype, base64, old = _split_path(M._SUPER.path(self))
+ if base64 then
+ if not Filter then
+ error("'datafilter' Lua module required to decode base64 data")
+ end
+ old = _do_filter("base64_decode", old)
+ else
+ old = Util.uri_decode(old)
+ end
+
+ if select('#', ...) > 0 then
+ local new = ... or ""
+ local urienc_len = _urienc_len(new)
+ local base64_len = _base64_len(new)
+ if base64_len < urienc_len and Filter then
+ mediatype = mediatype .. ";base64"
+ new = _do_filter("base64_encode", new)
+ else
+ new = new:gsub("%%", "%%25")
+ end
+ M._SUPER.path(self, mediatype .. "," .. new)
+ end
+
+ return old
+end
+
+function M.path (self, ...)
+ local old = M._SUPER.path(self)
+
+ if select('#', ...) > 0 then
+ local new = ...
+ if not new then error("there must be a path in a data URI") end
+ local err = _split_path(new)
+ if err then error("invalid data URI (" .. err .. ")") end
+ M._SUPER.path(self, new)
+ end
+
+ return old
+end
+
+Util.uri_part_not_allowed(M, "userinfo")
+Util.uri_part_not_allowed(M, "host")
+Util.uri_part_not_allowed(M, "port")
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/file.lua b/script/src/3rd/lua-uri/uri/file.lua
new file mode 100644
index 00000000..271cb3ed
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/file.lua
@@ -0,0 +1,72 @@
+local M = { _NAME = "uri.file" }
+local Util = require "uri._util"
+local URI = require "uri"
+Util.subclass_of(M, URI)
+
+function M.init (self)
+ if self:userinfo() or self:port() then
+ return nil, "usernames and passwords are not allowed in HTTP URIs"
+ end
+
+ local host = self:host()
+ local path = self:path()
+ if host then
+ if host:lower() == "localhost" then self:host("") end
+ else
+ if not path:find("^/") then
+ return nil, "file URIs must contain a host, even if it's empty"
+ end
+ self:host("")
+ end
+
+ if path == "" then self:path("/") end
+
+ return self
+end
+
+function M.host (self, ...)
+ local old = M._SUPER.host(self)
+
+ if select('#', ...) > 0 then
+ local new = ...
+ if not new then error("file URIs must have an authority part") end
+ if new:lower() == "localhost" then new = "" end
+ M._SUPER.host(self, new)
+ end
+
+ return old
+end
+
+function M.path (self, ...)
+ local old = M._SUPER.path(self)
+
+ if select('#', ...) > 0 then
+ local new = ...
+ if not new or new == "" then new = "/" end
+ M._SUPER.path(self, new)
+ end
+
+ return old
+end
+
+local function _os_implementation (os)
+ local FileImpl = Util.attempt_require("uri.file." .. os:lower())
+ if not FileImpl then
+ error("no file URI implementation for operating system " .. os)
+ end
+ return FileImpl
+end
+
+function M.filesystem_path (self, os)
+ return _os_implementation(os).filesystem_path(self)
+end
+
+function M.make_file_uri (path, os)
+ return _os_implementation(os).make_file_uri(path)
+end
+
+Util.uri_part_not_allowed(M, "userinfo")
+Util.uri_part_not_allowed(M, "port")
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/file/unix.lua b/script/src/3rd/lua-uri/uri/file/unix.lua
new file mode 100644
index 00000000..8bd4c942
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/file/unix.lua
@@ -0,0 +1,26 @@
+local M = { _NAME = "uri.file.unix" }
+local URI = require "uri"
+local Util = require "uri._util"
+
+function M.filesystem_path (uri)
+ if uri:host() ~= "" then
+ error("a file URI with a host name can't be converted to a Unix path")
+ end
+ local path = uri:path()
+ if path:find("%%00") or path:find("%%2F") then
+ error("Unix paths cannot contain encoded null bytes or slashes")
+ end
+ return Util.uri_decode(path)
+end
+
+function M.make_file_uri (path)
+ if not path:find("^/") then
+ error("Unix relative paths can't be converted to file URIs")
+ end
+ path = path:gsub("//+", "/")
+ path = Util.uri_encode(path, "^A-Za-z0-9%-._~!$&'()*+,;=@/")
+ return assert(URI:new("file://" .. path))
+end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/file/win32.lua b/script/src/3rd/lua-uri/uri/file/win32.lua
new file mode 100644
index 00000000..d4e40243
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/file/win32.lua
@@ -0,0 +1,34 @@
+local M = { _NAME = "uri.file.win32" }
+local URI = require "uri"
+local Util = require "uri._util"
+
+function M.filesystem_path (uri)
+ local host = uri:host()
+ local path = Util.uri_decode(uri:path())
+ if host ~= "" then path = "//" .. host .. path end
+ if path:find("^/[A-Za-z]|/") or path:find("^/[A-Za-z]|$") then
+ path = path:gsub("|", ":", 1)
+ end
+ if path:find("^/[A-Za-z]:/") then
+ path = path:sub(2)
+ elseif path:find("^/[A-Za-z]:$") then
+ path = path:sub(2) .. "/"
+ end
+ path = path:gsub("/", "\\")
+ return path
+end
+
+function M.make_file_uri (path)
+ path = path:gsub("\\", "/")
+ if path:find("^[A-Za-z]:$") then path = path .. "/" end
+ local _, _, host, hostpath = path:find("^//([A-Za-z0-9.]+)/(.*)$")
+ host = host or ""
+ hostpath = hostpath or path
+ hostpath = hostpath:gsub("//+", "/")
+ hostpath = Util.uri_encode(hostpath, "^A-Za-z0-9%-._~!$&'()*+,;=@/")
+ if not hostpath:find("^/") then hostpath = "/" .. hostpath end
+ return assert(URI:new("file://" .. host .. hostpath))
+end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/ftp.lua b/script/src/3rd/lua-uri/uri/ftp.lua
new file mode 100644
index 00000000..2d9e3f6c
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/ftp.lua
@@ -0,0 +1,53 @@
+local M = { _NAME = "uri.ftp" }
+local Util = require "uri._util"
+local LoginURI = require "uri._login"
+Util.subclass_of(M, LoginURI)
+
+function M.default_port () return 21 end
+
+function M.init (self)
+ self, err = M._SUPER.init_base(self)
+ if not self then return nil, err end
+
+ local host = self:host()
+ if not host or host == "" then
+ return nil, "FTP URIs must have a hostname"
+ end
+
+ -- I don't think there's any distinction in FTP URIs between empty path
+ -- and the root directory, so probably best to normalize as we do for HTTP.
+ if self:path() == "" then self:path("/") end
+
+ return self
+end
+
+function M.path (self, ...)
+ local old = M._SUPER.path(self)
+
+ if select("#", ...) > 0 then
+ local new = ...
+ if not new or new == "" then new = "/" end
+ M._SUPER.path(self, new)
+ end
+
+ return old
+end
+
+function M.ftp_typecode (self, ...)
+ local path = M._SUPER.path(self)
+ local _, _, withouttype, old = path:find("^(.*);type=(.*)$")
+ if not withouttype then withouttype = path end
+ if old == "" then old = nil end
+
+ if select("#", ...) > 0 then
+ local new = ...
+ if not new then new = "" end
+ if new ~= "" then new = ";type=" .. new end
+ M._SUPER.path(self, withouttype .. new)
+ end
+
+ return old
+end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/http.lua b/script/src/3rd/lua-uri/uri/http.lua
new file mode 100644
index 00000000..91f7a57f
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/http.lua
@@ -0,0 +1,32 @@
+local M = { _NAME = "uri.http" }
+local Util = require "uri._util"
+local URI = require "uri"
+Util.subclass_of(M, URI)
+
+-- This implementation is based on RFC 2616 section 3.2 and RFC 1738
+-- section 3.3.
+--
+-- An HTTP URI with a 'userinfo' field is considered invalid, because it isn't
+-- shown in the syntax given in RFC 2616, and is explicitly disallowed by
+-- RFC 1738.
+
+function M.default_port () return 80 end
+
+function M.init (self)
+ if self:userinfo() then
+ return nil, "usernames and passwords are not allowed in HTTP URIs"
+ end
+
+ -- RFC 2616 section 3.2.3 says that this is OK, but not that using the
+ -- redundant slash is canonical. I'm adding it because browsers tend to
+ -- treat the version with the extra slash as the normalized form, and
+ -- the initial slash is always present in an HTTP GET request.
+ if self:path() == "" then self:path("/") end
+
+ return self
+end
+
+Util.uri_part_not_allowed(M, "userinfo")
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/https.lua b/script/src/3rd/lua-uri/uri/https.lua
new file mode 100644
index 00000000..0c4c8bc3
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/https.lua
@@ -0,0 +1,9 @@
+local M = { _NAME = "uri.https" }
+local Util = require "uri._util"
+local Http = require "uri.http"
+Util.subclass_of(M, Http)
+
+function M.default_port () return 443 end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/pop.lua b/script/src/3rd/lua-uri/uri/pop.lua
new file mode 100644
index 00000000..e42d9d41
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/pop.lua
@@ -0,0 +1,111 @@
+local M = { _NAME = "uri.pop" }
+local URI = require "uri"
+local Util = require "uri._util"
+Util.subclass_of(M, URI)
+
+-- This is the set of characters must be encoded in a POP userinfo, which
+-- unlike for other schemes includes the ';' character.
+local _POP_USERINFO_ENCODE = "^A-Za-z0-9%-._~%%!$&'()*+,=:"
+
+function M.default_port () return 110 end
+
+local function _update_userinfo (self, old, new)
+ if new then
+ local _, _, user, auth = new:find("^(.*);[Aa][Uu][Tt][Hh]=(.*)$")
+ if not user then user = new end
+ if user == "" then return "pop user name must not be empty" end
+ user = Util.uri_encode(user, _POP_USERINFO_ENCODE)
+ if auth then
+ if auth == "" then return "pop auth type must not be empty" end
+ if auth == "*" then auth = nil end
+ auth = Util.uri_encode(auth, _POP_USERINFO_ENCODE)
+ end
+ new = user .. (auth and ";auth=" .. auth or "")
+ end
+
+ if new ~= old then M._SUPER.userinfo(self, new) end
+ return nil
+end
+
+function M.init (self)
+ if M._SUPER.path(self) ~= "" then
+ return nil, "pop URIs must have an empty path"
+ end
+
+ local userinfo = M._SUPER.userinfo(self)
+ local err = _update_userinfo(self, userinfo, userinfo)
+ if err then return nil, err end
+
+ return self
+end
+
+function M.userinfo (self, ...)
+ local old = M._SUPER.userinfo(self)
+
+ if select('#', ...) > 0 then
+ local new = ...
+ local err = _update_userinfo(self, old, new)
+ if err then error(err) end
+ end
+
+ return old
+end
+
+function M.path (self, new)
+ if new and new ~= "" then error("POP URIs must have an empty path") end
+ return ""
+end
+
+local function _decode_userinfo (self)
+ local old = M._SUPER.userinfo(self)
+ if not old then return nil, nil end
+ local _, _, old_user, old_auth = old:find("^(.*);auth=(.*)$")
+ if not old_user then old_user = old end
+ return old_user, old_auth
+end
+
+function M.pop_user (self, ...)
+ local old_user, old_auth = _decode_userinfo(self)
+
+ if select('#', ...) > 0 then
+ local new = ...
+ if new == "" then error("pop user name must not be empty") end
+ if not new and old_auth then
+ error("pop user name required when an auth type is specified")
+ end
+ if new then
+ new = Util.uri_encode(new, _POP_USERINFO_ENCODE)
+ if old_auth then new = new .. ";auth=" .. old_auth end
+ end
+ M._SUPER.userinfo(self, new)
+ end
+
+ return Util.uri_decode(old_user)
+end
+
+function M.pop_auth (self, ...)
+ local old_user, old_auth = _decode_userinfo(self)
+
+ if select('#', ...) > 0 then
+ local new = ...
+ if not new or new == ""
+ then error("pop auth type must not be empty")
+ end
+ if new == "*" then new = nil end
+ if new and not old_user then
+ error("pop auth type can't be specified without user name")
+ end
+ if new then
+ new = old_user .. ";auth=" ..
+ Util.uri_encode(new, _POP_USERINFO_ENCODE)
+ else
+ new = old_user
+ end
+ M._SUPER.userinfo(self, new)
+ end
+
+ return old_auth and Util.uri_decode(old_auth) or "*"
+end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/rtsp.lua b/script/src/3rd/lua-uri/uri/rtsp.lua
new file mode 100644
index 00000000..03c71485
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/rtsp.lua
@@ -0,0 +1,9 @@
+local M = { _NAME = "uri.rtsp" }
+local Util = require "uri._util"
+local HttpURI = require "uri.http"
+Util.subclass_of(M, HttpURI)
+
+function M.default_port () return 554 end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/rtspu.lua b/script/src/3rd/lua-uri/uri/rtspu.lua
new file mode 100644
index 00000000..16f5e3ee
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/rtspu.lua
@@ -0,0 +1,7 @@
+local M = { _NAME = "uri.rtspu" }
+local Util = require "uri._util"
+local RtspURI = require "uri.rtsp"
+Util.subclass_of(M, RtspURI)
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/telnet.lua b/script/src/3rd/lua-uri/uri/telnet.lua
new file mode 100644
index 00000000..339e21ee
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/telnet.lua
@@ -0,0 +1,38 @@
+local M = { _NAME = "uri.telnet" }
+local Util = require "uri._util"
+local LoginURI = require "uri._login"
+Util.subclass_of(M, LoginURI)
+
+function M.default_port () return 23 end
+
+function M.init (self)
+ self, err = M._SUPER.init_base(self)
+ if not self then return nil, err end
+
+ -- RFC 4248 does not discuss what a path longer than '/' might mean, and
+ -- there are no examples with anything significant in the path, so I'm
+ -- assuming that extra information in the path is not allowed.
+ local path = M._SUPER.path(self)
+ if path ~= "" and path ~= "/" then
+ return nil, "superfluous information in path of telnet URI"
+ end
+
+ -- RFC 4248 section 2 says that the '/' can be omitted. I chose to
+ -- normalize to having it there, since the example shown in the RFC has
+ -- it, and this is consistent with the way I treat HTTP URIs.
+ if path == "" then self:path("/") end
+
+ return self
+end
+
+-- The path is always '/', so setting it won't do anything, but we do throw
+-- an exception on an attempt to set it to anything invalid.
+function M.path (self, new)
+ if new and new ~= "" and new ~= "/" then
+ error("invalid path for telnet URI")
+ end
+ return "/"
+end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/urn.lua b/script/src/3rd/lua-uri/uri/urn.lua
new file mode 100644
index 00000000..aa4b1776
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/urn.lua
@@ -0,0 +1,131 @@
+local M = { _NAME = "uri.urn" }
+local Util = require "uri._util"
+local URI = require "uri"
+Util.subclass_of(M, URI)
+
+-- This implements RFC 2141, and attempts to change the class of the URI object
+-- to one of its subclasses for further validation and normalization of the
+-- namespace-specific string.
+
+-- Check NID syntax matches RFC 2141 section 2.1.
+local function _valid_nid (nid)
+ if nid == "" then return nil, "missing completely" end
+ if nid:len() > 32 then return nil, "too long" end
+ if not nid:find("^[A-Za-z0-9][-A-Za-z0-9]*$") then
+ return nil, "contains illegal character"
+ end
+ if nid:lower() == "urn" then return nil, "'urn' is reserved" end
+ return true
+end
+
+-- Check NSS syntax matches RFC 2141 section 2.2.
+local function _valid_nss (nss)
+ if nss == "" then return nil, "can't be empty" end
+ if nss:find("[^A-Za-z0-9()+,%-.:=@;$_!*'/%%]") then
+ return nil, "contains illegal character"
+ end
+ return true
+end
+
+local function _validate_and_normalize_path (path)
+ local _, _, nid, nss = path:find("^([^:]+):(.*)$")
+ if not nid then return nil, "illegal path syntax for URN" end
+
+ local ok, msg = _valid_nid(nid)
+ if not ok then
+ return nil, "invalid namespace identifier (" .. msg .. ")"
+ end
+ ok, msg = _valid_nss(nss)
+ if not ok then
+ return nil, "invalid namespace specific string (" .. msg .. ")"
+ end
+
+ return nid:lower() .. ":" .. nss
+end
+
+-- TODO - this should check that percent-encoded bytes are valid UTF-8
+function M.init (self)
+ if M._SUPER.query(self) then
+ return nil, "URNs may not have query parts"
+ end
+ if M._SUPER.host(self) then
+ return nil, "URNs may not have authority parts"
+ end
+
+ local path, msg = _validate_and_normalize_path(self:path())
+ if not path then return nil, msg end
+ M._SUPER.path(self, path)
+
+ local nid_class
+ = Util.attempt_require("uri.urn." .. self:nid():gsub("%-", "_"))
+ if nid_class then
+ setmetatable(self, nid_class)
+ if self.init ~= M.init then return self:init() end
+ end
+
+ return self
+end
+
+function M.nid (self, new)
+ local _, _, old = self:path():find("^([^:]+)")
+
+ if new then
+ new = new:lower()
+ if new ~= old then
+ local ok, msg = _valid_nid(new)
+ if not ok then
+ error("invalid namespace identifier (" .. msg .. ")")
+ end
+ end
+ Util.do_class_changing_change(self, M, "NID", new, function (uri, new)
+ M._SUPER.path(uri, new .. ":" .. uri:nss())
+ end)
+ end
+
+ return old
+end
+
+function M.nss (self, new)
+ local _, _, old = self:path():find(":(.*)")
+
+ if new and new ~= old then
+ local ok, msg = _valid_nss(new)
+ if not ok then
+ error("invalid namespace specific string (" .. msg .. ")")
+ end
+ M._SUPER.path(self, self:nid() .. ":" .. new)
+ end
+
+ return old
+end
+
+function M.path (self, new)
+ local old = M._SUPER.path(self)
+
+ if new and new ~= old then
+ local path, msg = _validate_and_normalize_path(new)
+ if not path then
+ error("invalid path for URN '" .. new .. "' (" ..msg .. ")")
+ end
+ local _, _, newnid, newnss = path:find("^([^:]+):(.*)")
+ if not newnid then error("bad path for URN, no NID part found") end
+ local ok, msg = _valid_nid(newnid)
+ if not ok then error("invalid namespace identifier (" .. msg .. ")") end
+ if newnid:lower() == self:nid() then
+ self:nss(newnss)
+ else
+ Util.do_class_changing_change(self, M, "path", path,
+ function (uri, new) M._SUPER.path(uri, new) end)
+ end
+ end
+
+ return old
+end
+
+Util.uri_part_not_allowed(M, "userinfo")
+Util.uri_part_not_allowed(M, "host")
+Util.uri_part_not_allowed(M, "port")
+Util.uri_part_not_allowed(M, "query")
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/urn/isbn.lua b/script/src/3rd/lua-uri/uri/urn/isbn.lua
new file mode 100644
index 00000000..5f0bdb69
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/urn/isbn.lua
@@ -0,0 +1,67 @@
+local M = { _NAME = "uri.urn.isbn" }
+local Util = require "uri._util"
+local URN = require "uri.urn"
+Util.subclass_of(M, URN)
+
+-- This implements the 'isbn' NID defined in RFC 3187, and is consistent
+-- with the same NID suggested in RFC 2288.
+
+local function _valid_isbn (isbn)
+ if not isbn:find("^[-%d]+[%dXx]$") then return nil, "invalid character" end
+ local ISBN = Util.attempt_require("isbn")
+ if ISBN then return ISBN:new(isbn) end
+ return isbn
+end
+
+local function _normalize_isbn (isbn)
+ isbn = isbn:gsub("%-", ""):upper()
+ local ISBN = Util.attempt_require("isbn")
+ if ISBN then return tostring(ISBN:new(isbn)) end
+ return isbn
+end
+
+function M.init (self)
+ local nss = self:nss()
+ local ok, msg = _valid_isbn(nss)
+ if not ok then return nil, "invalid ISBN value (" .. msg .. ")" end
+ self:nss(_normalize_isbn(nss))
+ return self
+end
+
+function M.nss (self, new)
+ local old = M._SUPER.nss(self)
+
+ if new then
+ local ok, msg = _valid_isbn(new)
+ if not ok then
+ error("bad ISBN value '" .. new .. "' (" .. msg .. ")")
+ end
+ M._SUPER.nss(self, _normalize_isbn(new))
+ end
+
+ return old
+end
+
+function M.isbn_digits (self, new)
+ local old = self:nss():gsub("%-", "")
+
+ if new then
+ local ok, msg = _valid_isbn(new)
+ if not ok then
+ error("bad ISBN value '" .. new .. "' (" .. msg .. ")")
+ end
+ self._SUPER.nss(self, _normalize_isbn(new))
+ end
+
+ return old
+end
+
+function M.isbn (self, new)
+ local ISBN = require "isbn"
+ local old = ISBN:new(self:nss())
+ if new then self:nss(tostring(new)) end
+ return old
+end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/urn/issn.lua b/script/src/3rd/lua-uri/uri/urn/issn.lua
new file mode 100644
index 00000000..c5f37f8c
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/urn/issn.lua
@@ -0,0 +1,65 @@
+local M = { _NAME = "uri.urn.issn" }
+local Util = require "uri._util"
+local URN = require "uri.urn"
+Util.subclass_of(M, URN)
+
+local function _parse_issn (issn)
+ local _, _, nums1, nums2, checksum
+ = issn:find("^(%d%d%d%d)-?(%d%d%d)([%dxX])$")
+ if checksum == "x" then checksum = "X" end
+ return nums1, nums2, checksum
+end
+
+local function _valid_issn (issn)
+ local nums1, nums2, actual_checksum = _parse_issn(issn)
+ if not nums1 then return nil, "invalid ISSN syntax" end
+ local nums = nums1 .. nums2
+
+ local expected_checksum = 0
+ for i = 1, 7 do
+ expected_checksum = expected_checksum + tonumber(nums:sub(i, i)) * (9 - i)
+ end
+ expected_checksum = (11 - expected_checksum % 11) % 11
+ expected_checksum = (expected_checksum == 10) and "X"
+ or tostring(expected_checksum)
+ if actual_checksum ~= expected_checksum then
+ return nil, "wrong checksum, expected " .. expected_checksum
+ end
+
+ return true
+end
+
+local function _normalize_issn (issn)
+ local nums1, nums2, checksum = _parse_issn(issn)
+ return nums1 .. "-" .. nums2 .. checksum
+end
+
+function M.init (self)
+ local nss = self:nss()
+ local ok, msg = _valid_issn(nss)
+ if not ok then return nil, "bad NSS value for ISSN URI (" .. msg .. ")" end
+ M._SUPER.nss(self, _normalize_issn(nss))
+ return self
+end
+
+function M.nss (self, new)
+ local old = M._SUPER.nss(self)
+
+ if new then
+ local ok, msg = _valid_issn(new)
+ if not ok then
+ error("bad ISSN value '" .. new .. "' (" .. msg .. ")")
+ end
+ M._SUPER.nss(self, _normalize_issn(new))
+ end
+
+ return old
+end
+
+function M.issn_digits (self, new)
+ local old = self:nss(new)
+ return old:sub(1, 4) .. old:sub(6, 9)
+end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/3rd/lua-uri/uri/urn/oid.lua b/script/src/3rd/lua-uri/uri/urn/oid.lua
new file mode 100644
index 00000000..37110cda
--- /dev/null
+++ b/script/src/3rd/lua-uri/uri/urn/oid.lua
@@ -0,0 +1,62 @@
+local M = { _NAME = "uri.urn.oid" }
+local Util = require "uri._util"
+local URN = require "uri.urn"
+Util.subclass_of(M, URN)
+
+-- This implements RFC 3061.
+
+local function _valid_oid (oid)
+ if oid == "" then return nil, "OID can't be zero-length" end
+ if not oid:find("^[.0-9]*$") then return nil, "bad character in OID" end
+ if oid:find("%.%.") then return nil, "missing number in OID" end
+ if oid:find("^0[^.]") or oid:find("%.0[^.]") then
+ return nil, "OID numbers shouldn't have leading zeros"
+ end
+ return true
+end
+
+function M.init (self)
+ local nss = self:nss()
+ local ok, msg = _valid_oid(nss)
+ if not ok then return nil, "bad NSS value for OID URI (" .. msg .. ")" end
+ return self
+end
+
+function M.nss (self, new)
+ local old = M._SUPER.nss(self)
+
+ if new then
+ local ok, msg = _valid_oid(new)
+ if not ok then
+ error("bad OID value '" .. new .. "' (" .. msg .. ")")
+ end
+ M._SUPER.nss(self, new)
+ end
+
+ return old
+end
+
+function M.oid_numbers (self, new)
+ local old = Util.split("%.", self:nss())
+ for i = 1, #old do old[i] = tonumber(old[i]) end
+
+ if new then
+ if type(new) ~= "table" then error("expected array of numbers") end
+ local nss = ""
+ for _, n in ipairs(new) do
+ if type(n) == "string" and n:find("^%d+$") then n = tonumber(n) end
+ if type(n) ~= "number" then error("bad type for number in OID") end
+ n = n - n % 1
+ if n < 0 then error("negative numbers not allowed in OID") end
+ if nss ~= "" then nss = nss .. "." end
+ nss = nss .. n
+ end
+ if nss == "" then error("no numbers in new OID value") end
+ self:nss(nss)
+ end
+
+ return old
+end
+
+return M
+-- vi:ts=4 sw=4 expandtab
diff --git a/script/src/async/async.lua b/script/src/async/async.lua
new file mode 100644
index 00000000..34716502
--- /dev/null
+++ b/script/src/async/async.lua
@@ -0,0 +1,126 @@
+local thread = require 'bee.thread'
+local errlog = thread.channel 'errlog'
+
+local TaskId = 0
+local IdlePool = {}
+local RunningList = {}
+local GCInfo = {}
+
+thread.newchannel 'gc'
+
+local function createTask(name)
+ TaskId = TaskId + 1
+ GCInfo[TaskId] = false
+ local id = TaskId
+ local requestName = 'request' .. tostring(id)
+ local responseName = 'response' .. tostring(id)
+ thread.newchannel(requestName)
+ thread.newchannel(responseName)
+ local buf = ([[
+ID = %d
+package.cpath = %q
+package.path = %q
+local thread = require 'bee.thread'
+local request = thread.channel(%q)
+local response = thread.channel(%q)
+local errlog = thread.channel 'errlog'
+local gc = thread.channel 'gc'
+
+local function task()
+ local dump, arg = request:bpop()
+ local env = setmetatable({
+ IN = request,
+ OUT = response,
+ ERR = errlog,
+ GC = gc,
+ }, { __index = _ENV })
+ local f, err = load(dump, '=task', 't', env)
+ if not f then
+ errlog:push(err .. '\n' .. dump)
+ return
+ end
+ local result = f(arg)
+ response:push(result)
+end
+
+while true do
+ local ok, result = xpcall(task, debug.traceback)
+ if not ok then
+ errlog:push(result)
+ end
+ collectgarbage()
+ gc:push(ID, collectgarbage 'count')
+end
+]]):format(id, package.cpath, package.path, requestName, responseName)
+ log.debug('Create thread, id: ', id, 'task: ', name)
+ return {
+ id = id,
+ thread = thread.thread(buf),
+ request = thread.channel(requestName),
+ response = thread.channel(responseName),
+ }
+end
+
+local function run(name, arg, callback)
+ local dump = io.load(ROOT / 'src' / 'async' / (name .. '.lua'))
+ if not dump then
+ error(('找不到[%s]'):format(name))
+ end
+ local task = table.remove(IdlePool)
+ if not task then
+ task = createTask(name)
+ end
+ RunningList[task.id] = {
+ task = task,
+ callback = callback,
+ }
+ task.request:push(dump, arg)
+ -- TODO 线程回收后禁止外部再使用通道
+ return task.request, task.response
+end
+
+local function callback(id, running)
+ if running.callback then
+ while true do
+ local results = table.pack(running.task.response:pop())
+ if not results[1] then
+ break
+ end
+ -- TODO 封装成对象
+ local suc, destroy = xpcall(running.callback, log.error, table.unpack(results, 2))
+ if not suc or destroy then
+ RunningList[id] = nil
+ IdlePool[#IdlePool+1] = running.task
+ break
+ end
+ end
+ end
+end
+
+local function checkGC()
+ local gc = thread.channel 'gc'
+ while true do
+ local ok, id, count = gc:pop()
+ if not ok then
+ break
+ end
+ GCInfo[id] = count
+ end
+end
+
+local function onTick()
+ local ok, msg = errlog:pop()
+ if ok then
+ log.error(msg)
+ end
+ for id, running in pairs(RunningList) do
+ callback(id, running)
+ end
+ checkGC()
+end
+
+return {
+ onTick = onTick,
+ run = run,
+ info = GCInfo,
+}
diff --git a/script/src/async/init.lua b/script/src/async/init.lua
new file mode 100644
index 00000000..3d75a720
--- /dev/null
+++ b/script/src/async/init.lua
@@ -0,0 +1 @@
+return require 'async.async'
diff --git a/script/src/async/loadfile.lua b/script/src/async/loadfile.lua
new file mode 100644
index 00000000..b9d0f41c
--- /dev/null
+++ b/script/src/async/loadfile.lua
@@ -0,0 +1,13 @@
+require 'utility'
+local fs = require 'bee.filesystem'
+
+while true do
+ local filename, mode = IN:bpop()
+ local buf = io.load(fs.path(filename))
+ if buf then
+ OUT:push(filename, mode, buf)
+ else
+ ERR:push('Load failed:' .. filename)
+ end
+ GC:push(ID, collectgarbage 'count')
+end
diff --git a/script/src/async/proto.lua b/script/src/async/proto.lua
new file mode 100644
index 00000000..3e7fcc60
--- /dev/null
+++ b/script/src/async/proto.lua
@@ -0,0 +1,57 @@
+local json = require 'json'
+
+local function pushError(...)
+ local t = table.pack(...)
+ for i = 1, t.n do
+ t[i] = tostring(t[i])
+ end
+ local buf = table.concat(t, '\t')
+ ERR:push(buf)
+end
+
+local function readProtoHeader()
+ local header = io.read 'l'
+ if header:sub(1, #'Content-Length') == 'Content-Length' then
+ return header
+ elseif header:sub(1, #'Content-Type') == 'Content-Type' then
+ return nil
+ else
+ pushError('Proto header error:', header)
+ return nil
+ end
+end
+
+local function readProtoContent(header)
+ local len = tonumber(header:match('%d+'))
+ if not len then
+ pushError('Proto header error:', header)
+ return nil
+ end
+ local buf = io.read(len+2)
+ if not buf then
+ return nil
+ end
+ local suc, res = pcall(json.decode, buf)
+ if not suc then
+ pushError('Proto error:', buf)
+ return nil
+ end
+ return res
+end
+
+local function readProto()
+ local header = readProtoHeader()
+ if not header then
+ return
+ end
+ local data = readProtoContent(header)
+ if not data then
+ return
+ end
+ OUT:push(data)
+end
+
+while true do
+ readProto()
+ GC:push(ID, collectgarbage 'count')
+end
diff --git a/script/src/async/scanfiles.lua b/script/src/async/scanfiles.lua
new file mode 100644
index 00000000..f5249c8e
--- /dev/null
+++ b/script/src/async/scanfiles.lua
@@ -0,0 +1,55 @@
+local args = ...
+
+require 'utility'
+local fs = require 'bee.filesystem'
+local glob = require 'glob'
+
+local function scan(mode, root, pattern, options)
+ OUT:push('log', 'Scanning:', root:string())
+ OUT:push('log', 'Scan pattern:', table.dump(pattern))
+ OUT:push('log', 'Scan options:', table.dump(options))
+ local session = glob.gitignore(pattern, options)
+
+ session:setInterface('type', function (path)
+ local fullpath = root / path
+ if not fs.exists(fullpath) then
+ return nil
+ end
+ if fs.is_directory(fullpath) then
+ return 'directory'
+ else
+ return 'file'
+ end
+ return nil
+ end)
+ session:setInterface('list', function (path)
+ local fullpath = root / path
+ if not fs.exists(fullpath) then
+ return nil
+ end
+ local list = {}
+ for child in fullpath:list_directory() do
+ list[#list+1] = child:string()
+ end
+ return list
+ end)
+
+ session:scan(function (path)
+ local ok, msg = IN:pop()
+ if ok and msg == 'stop' then
+ OUT:push 'stop'
+ return
+ end
+ OUT:push(mode, fs.absolute(root / path):string())
+ end)
+end
+
+for _, data in ipairs(args) do
+ local root = fs.path(data.root)
+ local suc, err = xpcall(scan, debug.traceback, data.mode, root, data.pattern, data.options)
+ if not suc then
+ ERR:push(err)
+ end
+end
+
+OUT:push 'ok'
diff --git a/script/src/capability/completion.lua b/script/src/capability/completion.lua
new file mode 100644
index 00000000..28a6036c
--- /dev/null
+++ b/script/src/capability/completion.lua
@@ -0,0 +1,53 @@
+local rpc = require 'rpc'
+
+local isEnable = false
+
+local function allWords()
+ local str = [[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.:('"[,#*@| ]]
+ local list = {}
+ for c in str:gmatch '.' do
+ list[#list+1] = c
+ end
+ return list
+end
+
+local function enable()
+ if isEnable then
+ return
+ end
+ isEnable = true
+ log.debug('Enable completion.')
+ rpc:request('client/registerCapability', {
+ registrations = {
+ {
+ id = 'completion',
+ method = 'textDocument/completion',
+ registerOptions = {
+ resolveProvider = false,
+ triggerCharacters = allWords(),
+ },
+ },
+ }
+ })
+end
+
+local function disable()
+ if not isEnable then
+ return
+ end
+ isEnable = false
+ log.debug('Disable completion.')
+ rpc:request('client/unregisterCapability', {
+ unregisterations = {
+ {
+ id = 'completion',
+ method = 'textDocument/completion',
+ },
+ }
+ })
+end
+
+return {
+ enable = enable,
+ disable = disable,
+}
diff --git a/script/src/capability/init.lua b/script/src/capability/init.lua
new file mode 100644
index 00000000..09eb6a09
--- /dev/null
+++ b/script/src/capability/init.lua
@@ -0,0 +1,3 @@
+return {
+ completion = require 'capability.completion',
+}
diff --git a/script/src/config.lua b/script/src/config.lua
new file mode 100644
index 00000000..f58df498
--- /dev/null
+++ b/script/src/config.lua
@@ -0,0 +1,194 @@
+local DiagnosticDefaultSeverity = require 'constant.DiagnosticDefaultSeverity'
+
+local function Boolean(v)
+ if type(v) == 'boolean' then
+ return true, v
+ end
+ return false
+end
+
+local function Integer(v)
+ if type(v) == 'number' then
+ return true, math.floor(v)
+ end
+ return false
+end
+
+local function String(v)
+ return true, tostring(v)
+end
+
+local function Str2Hash(sep)
+ return function (v)
+ if type(v) == 'string' then
+ local t = {}
+ for s in v:gmatch('[^'..sep..']+') do
+ t[s] = true
+ end
+ return true, t
+ end
+ if type(v) == 'table' then
+ local t = {}
+ for _, s in ipairs(v) do
+ if type(s) == 'string' then
+ t[s] = true
+ end
+ end
+ return true, t
+ end
+ return false
+ end
+end
+
+local function Array(checker)
+ return function (tbl)
+ if type(tbl) ~= 'table' then
+ return false
+ end
+ local t = {}
+ for _, v in ipairs(tbl) do
+ local ok, result = checker(v)
+ if ok then
+ t[#t+1] = result
+ end
+ end
+ return true, t
+ end
+end
+
+local function Hash(keyChecker, valueChecker)
+ return function (tbl)
+ if type(tbl) ~= 'table' then
+ return false
+ end
+ local t = {}
+ for k, v in pairs(tbl) do
+ local ok1, key = keyChecker(k)
+ local ok2, value = valueChecker(v)
+ if ok1 and ok2 then
+ t[key] = value
+ end
+ end
+ if not next(t) then
+ return false
+ end
+ return true, t
+ end
+end
+
+local function Or(...)
+ local checkers = {...}
+ return function (obj)
+ for _, checker in ipairs(checkers) do
+ local suc, res = checker(obj)
+ if suc then
+ return true, res
+ end
+ end
+ return false
+ end
+end
+
+local ConfigTemplate = {
+ runtime = {
+ version = {'Lua 5.3', String},
+ library = {{}, Str2Hash ';'},
+ path = {{
+ "?.lua",
+ "?/init.lua",
+ "?/?.lua"
+ }, Array(String)},
+ },
+ diagnostics = {
+ enable = {true, Boolean},
+ globals = {{}, Str2Hash ';'},
+ disable = {{}, Str2Hash ';'},
+ severity = {
+ table.deepCopy(DiagnosticDefaultSeverity),
+ Hash(String, String),
+ },
+ },
+ workspace = {
+ ignoreDir = {{}, Str2Hash ';'},
+ ignoreSubmodules= {true, Boolean},
+ useGitIgnore = {true, Boolean},
+ maxPreload = {300, Integer},
+ preloadFileSize = {100, Integer},
+ library = {{}, Hash(
+ String,
+ Or(Boolean, Array(String))
+ )}
+ },
+ completion = {
+ enable = {true, Boolean},
+ callSnippet = {'Both', String},
+ keywordSnippet = {'Both', String},
+ },
+ plugin = {
+ enable = {false, Boolean},
+ path = {'.vscode/lua-plugin/*.lua', String},
+ },
+}
+
+local OtherTemplate = {
+ associations = {{}, Hash(String, String)},
+ exclude = {{}, Hash(String, Boolean)},
+}
+
+local Config, Other
+
+local function init()
+ if Config then
+ return
+ end
+
+ Config = {}
+ for c, t in pairs(ConfigTemplate) do
+ Config[c] = {}
+ for k, info in pairs(t) do
+ Config[c][k] = info[1]
+ end
+ end
+
+ Other = {}
+ for k, info in pairs(OtherTemplate) do
+ Other[k] = info[1]
+ end
+end
+
+local function setConfig(self, config, other)
+ xpcall(function ()
+ for c, t in pairs(config) do
+ for k, v in pairs(t) do
+ local region = ConfigTemplate[c]
+ if region then
+ local info = region[k]
+ local suc, v = info[2](v)
+ if suc then
+ Config[c][k] = v
+ else
+ Config[c][k] = info[1]
+ end
+ end
+ end
+ end
+ for k, v in pairs(other) do
+ local info = OtherTemplate[k]
+ local suc, v = info[2](v)
+ if suc then
+ Other[k] = v
+ else
+ Other[k] = info[1]
+ end
+ end
+ log.debug('Config update: ', table.dump(Config), table.dump(Other))
+ end, log.error)
+end
+
+init()
+
+return {
+ setConfig = setConfig,
+ config = Config,
+ other = Other,
+}
diff --git a/script/src/constant/DiagnosticDefaultSeverity.lua b/script/src/constant/DiagnosticDefaultSeverity.lua
new file mode 100644
index 00000000..b7f07f63
--- /dev/null
+++ b/script/src/constant/DiagnosticDefaultSeverity.lua
@@ -0,0 +1,22 @@
+return {
+ ['unused-local'] = 'Hint',
+ ['unused-function'] = 'Hint',
+ ['undefined-global'] = 'Warning',
+ ['global-in-nil-env'] = 'Warning',
+ ['unused-label'] = 'Hint',
+ ['unused-vararg'] = 'Hint',
+ ['trailing-space'] = 'Hint',
+ ['redefined-local'] = 'Hint',
+ ['newline-call'] = 'Information',
+ ['newfield-call'] = 'Warning',
+ ['redundant-parameter'] = 'Hint',
+ ['ambiguity-1'] = 'Warning',
+ ['lowercase-global'] = 'Information',
+ ['undefined-env-child'] = 'Information',
+ ['duplicate-index'] = 'Warning',
+ ['duplicate-method'] = 'Warning',
+ ['empty-block'] = 'Hint',
+ ['redundant-value'] = 'Hint',
+ ['emmy-lua'] = 'Warning',
+ ['set-const'] = 'Error',
+}
diff --git a/script/src/constant/DiagnosticSeverity.lua b/script/src/constant/DiagnosticSeverity.lua
new file mode 100644
index 00000000..05bd3659
--- /dev/null
+++ b/script/src/constant/DiagnosticSeverity.lua
@@ -0,0 +1,6 @@
+return {
+ Error = 1,
+ Warning = 2,
+ Information = 3,
+ Hint = 4,
+}
diff --git a/script/src/constant/DiagnosticTag.lua b/script/src/constant/DiagnosticTag.lua
new file mode 100644
index 00000000..918b7bad
--- /dev/null
+++ b/script/src/constant/DiagnosticTag.lua
@@ -0,0 +1,4 @@
+return {
+ Unnecessary = 1,
+ Deprecated = 2,
+}
diff --git a/script/src/core/code_action.lua b/script/src/core/code_action.lua
new file mode 100644
index 00000000..2c1fb14d
--- /dev/null
+++ b/script/src/core/code_action.lua
@@ -0,0 +1,410 @@
+local lang = require 'language'
+local library = require 'core.library'
+
+local function disableDiagnostic(lsp, uri, data, callback)
+ callback {
+ title = lang.script('ACTION_DISABLE_DIAG', data.code),
+ kind = 'quickfix',
+ command = {
+ title = lang.script.COMMAND_DISABLE_DIAG,
+ command = 'config',
+ arguments = {
+ {
+ key = {'diagnostics', 'disable'},
+ action = 'add',
+ value = data.code,
+ }
+ }
+ }
+ }
+end
+
+local function addGlobal(name, callback)
+ callback {
+ title = lang.script('ACTION_MARK_GLOBAL', name),
+ kind = 'quickfix',
+ command = {
+ title = lang.script.COMMAND_MARK_GLOBAL,
+ command = 'config',
+ arguments = {
+ {
+ key = {'diagnostics', 'globals'},
+ action = 'add',
+ value = name,
+ }
+ }
+ },
+ }
+end
+
+local function changeVersion(version, callback)
+ callback {
+ title = lang.script('ACTION_RUNTIME_VERSION', version),
+ kind = 'quickfix',
+ command = {
+ title = lang.script.COMMAND_RUNTIME_VERSION,
+ command = 'config',
+ arguments = {
+ {
+ key = {'runtime', 'version'},
+ action = 'set',
+ value = version,
+ }
+ }
+ },
+ }
+end
+
+local function openCustomLibrary(libName, callback)
+ callback {
+ title = lang.script('ACTION_OPEN_LIBRARY', libName),
+ kind = 'quickfix',
+ command = {
+ title = lang.script.COMMAND_OPEN_LIBRARY,
+ command = 'config',
+ arguments = {
+ {
+ key = {'runtime', 'library'},
+ action = 'add',
+ value = libName,
+ }
+ }
+ },
+ }
+end
+
+local function solveUndefinedGlobal(lsp, uri, data, callback)
+ local vm, lines, text = lsp:getVM(uri)
+ if not vm then
+ return
+ end
+ local start = lines:position(data.range.start.line + 1, data.range.start.character + 1)
+ local finish = lines:position(data.range['end'].line + 1, data.range['end'].character)
+ local name = text:sub(start, finish)
+ if #name < 0 or name:find('[^%w_]') then
+ return
+ end
+ addGlobal(name, callback)
+ local otherVersion = library.other[name]
+ if otherVersion then
+ for _, version in ipairs(otherVersion) do
+ changeVersion(version, callback)
+ end
+ end
+
+ local customLibrary = library.custom[name]
+ if customLibrary then
+ for _, libName in ipairs(customLibrary) do
+ openCustomLibrary(libName, callback)
+ end
+ end
+end
+
+local function solveLowercaseGlobal(lsp, uri, data, callback)
+ local vm, lines, text = lsp:getVM(uri)
+ if not vm then
+ return
+ end
+ local start = lines:position(data.range.start.line + 1, data.range.start.character + 1)
+ local finish = lines:position(data.range['end'].line + 1, data.range['end'].character)
+ local name = text:sub(start, finish)
+ if #name < 0 or name:find('[^%w_]') then
+ return
+ end
+ addGlobal(name, callback)
+end
+
+local function solveTrailingSpace(lsp, uri, data, callback)
+ callback {
+ title = lang.script.ACTION_REMOVE_SPACE,
+ kind = 'quickfix',
+ command = {
+ title = lang.script.COMMAND_REMOVE_SPACE,
+ command = 'removeSpace',
+ arguments = {
+ {
+ uri = uri,
+ }
+ }
+ },
+ }
+end
+
+local function solveNewlineCall(lsp, uri, data, callback)
+ callback {
+ title = lang.script.ACTION_ADD_SEMICOLON,
+ kind = 'quickfix',
+ edit = {
+ changes = {
+ [uri] = {
+ {
+ range = {
+ start = data.range.start,
+ ['end'] = data.range.start,
+ },
+ newText = ';',
+ }
+ }
+ }
+ }
+ }
+end
+
+local function solveAmbiguity1(lsp, uri, data, callback)
+ callback {
+ title = lang.script.ACTION_ADD_BRACKETS,
+ kind = 'quickfix',
+ command = {
+ title = lang.script.COMMAND_ADD_BRACKETS,
+ command = 'solve',
+ arguments = {
+ {
+ name = 'ambiguity-1',
+ uri = uri,
+ range = data.range,
+ }
+ }
+ },
+ }
+end
+
+local function findSyntax(astErr, lines, data)
+ local start = lines:position(data.range.start.line + 1, data.range.start.character + 1)
+ local finish = lines:position(data.range['end'].line + 1, data.range['end'].character)
+ for _, err in ipairs(astErr) do
+ if err.start == start and err.finish == finish then
+ return err
+ end
+ end
+ return nil
+end
+
+local function solveSyntaxByChangeVersion(err, callback)
+ if type(err.version) == 'table' then
+ for _, version in ipairs(err.version) do
+ changeVersion(version, callback)
+ end
+ else
+ changeVersion(err.version, callback)
+ end
+end
+
+local function solveSyntaxByAddDoEnd(uri, data, callback)
+ callback {
+ title = lang.script.ACTION_ADD_DO_END,
+ kind = 'quickfix',
+ edit = {
+ changes = {
+ [uri] = {
+ {
+ range = {
+ start = data.range.start,
+ ['end'] = data.range.start,
+ },
+ newText = 'do ',
+ },
+ {
+ range = {
+ start = data.range['end'],
+ ['end'] = data.range['end'],
+ },
+ newText = ' end',
+ }
+ }
+ }
+ }
+ }
+end
+
+local function solveSyntaxByFix(uri, err, lines, callback)
+ local changes = {}
+ for _, e in ipairs(err.fix) do
+ local start_row, start_col = lines:rowcol(e.start)
+ local finish_row, finish_col = lines:rowcol(e.finish)
+ changes[#changes+1] = {
+ range = {
+ start = {
+ line = start_row - 1,
+ character = start_col - 1,
+ },
+ ['end'] = {
+ line = finish_row - 1,
+ character = finish_col,
+ },
+ },
+ newText = e.text,
+ }
+ end
+ callback {
+ title = lang.script['ACTION_' .. err.fix.title],
+ kind = 'quickfix',
+ edit = {
+ changes = {
+ [uri] = changes,
+ }
+ }
+ }
+end
+
+local function findEndPosition(lines, row, endrow)
+ if endrow == row then
+ return {
+ newText = ' end',
+ range = {
+ start = {
+ line = row - 1,
+ character = 999999,
+ },
+ ['end'] = {
+ line = row - 1,
+ character = 999999,
+ }
+ }
+ }
+ else
+ local l = lines[row]
+ return {
+ newText = ('\t'):rep(l.tab) .. (' '):rep(l.sp) .. 'end\n',
+ range = {
+ start = {
+ line = endrow,
+ character = 0,
+ },
+ ['end'] = {
+ line = endrow,
+ character = 0,
+ }
+ }
+ }
+ end
+end
+
+local function isIfPart(id, lines, i)
+ if id ~= 'if' then
+ return false
+ end
+ local buf = lines:line(i)
+ local first = buf:match '^[%s\t]*([%w]+)'
+ if first == 'else' or first == 'elseif' then
+ return true
+ end
+ return false
+end
+
+local function solveSyntaxByAddEnd(uri, start, finish, lines, callback)
+ local row = lines:rowcol(start)
+ local line = lines[row]
+ if not line then
+ return nil
+ end
+ local id = lines.buf:sub(start, finish)
+ local sp = line.sp + line.tab * 4
+ for i = row + 1, #lines do
+ local nl = lines[i]
+ local lsp = nl.sp + nl.tab * 4
+ if lsp <= sp and not isIfPart(id, lines, i) then
+ callback {
+ title = lang.script['ACTION_ADD_END'],
+ kind = 'quickfix',
+ edit = {
+ changes = {
+ [uri] = {
+ findEndPosition(lines, row, i - 1)
+ }
+ }
+ }
+ }
+ return
+ end
+ end
+ return nil
+end
+
+---@param lsp LSP
+---@param uri uri
+---@param data table
+---@param callback function
+local function solveSyntax(lsp, uri, data, callback)
+ local file = lsp:getFile(uri)
+ if not file then
+ return
+ end
+ local astErr, lines = file:getAstErr(), file:getLines()
+ if not astErr or not lines then
+ return
+ end
+ local err = findSyntax(astErr, lines, data)
+ if not err then
+ return nil
+ end
+ if err.version then
+ solveSyntaxByChangeVersion(err, callback)
+ end
+ if err.type == 'ACTION_AFTER_BREAK' or err.type == 'ACTION_AFTER_RETURN' then
+ solveSyntaxByAddDoEnd(uri, data, callback)
+ end
+ if err.type == 'MISS_END' then
+ solveSyntaxByAddEnd(uri, err.start, err.finish, lines, callback)
+ end
+ if err.type == 'MISS_SYMBOL' and err.info.symbol == 'end' then
+ solveSyntaxByAddEnd(uri, err.info.related[1], err.info.related[2], lines, callback)
+ end
+ if err.fix then
+ solveSyntaxByFix(uri, err, lines, callback)
+ end
+end
+
+local function solveDiagnostic(lsp, uri, data, callback)
+ if data.source == lang.script.DIAG_SYNTAX_CHECK then
+ solveSyntax(lsp, uri, data, callback)
+ end
+ if not data.code then
+ return
+ end
+ if data.code == 'undefined-global' then
+ solveUndefinedGlobal(lsp, uri, data, callback)
+ end
+ if data.code == 'trailing-space' then
+ solveTrailingSpace(lsp, uri, data, callback)
+ end
+ if data.code == 'newline-call' then
+ solveNewlineCall(lsp, uri, data, callback)
+ end
+ if data.code == 'ambiguity-1' then
+ solveAmbiguity1(lsp, uri, data, callback)
+ end
+ if data.code == 'lowercase-global' then
+ solveLowercaseGlobal(lsp, uri, data, callback)
+ end
+ disableDiagnostic(lsp, uri, data, callback)
+end
+
+local function rangeContain(a, b)
+ if a.start.line > b.start.line then
+ return false
+ end
+ if a.start.character > b.start.character then
+ return false
+ end
+ if a['end'].line < b['end'].line then
+ return false
+ end
+ if a['end'].character < b['end'].character then
+ return false
+ end
+ return true
+end
+
+return function (lsp, uri, diagnostics, range)
+ local results = {}
+
+ for _, data in ipairs(diagnostics) do
+ if rangeContain(data.range, range) then
+ solveDiagnostic(lsp, uri, data, function (result)
+ results[#results+1] = result
+ end)
+ end
+ end
+
+ return results
+end
diff --git a/script/src/core/completion.lua b/script/src/core/completion.lua
new file mode 100644
index 00000000..756f136b
--- /dev/null
+++ b/script/src/core/completion.lua
@@ -0,0 +1,1079 @@
+local findSource = require 'core.find_source'
+local getFunctionHover = require 'core.hover.function'
+local getFunctionHoverAsLib = require 'core.hover.lib_function'
+local getFunctionHoverAsEmmy = require 'core.hover.emmy_function'
+local sourceMgr = require 'vm.source'
+local config = require 'config'
+local matchKey = require 'core.matchKey'
+local parser = require 'parser'
+local lang = require 'language'
+local snippet = require 'core.snippet'
+local State
+
+local CompletionItemKind = {
+ Text = 1,
+ Method = 2,
+ Function = 3,
+ Constructor = 4,
+ Field = 5,
+ Variable = 6,
+ Class = 7,
+ Interface = 8,
+ Module = 9,
+ Property = 10,
+ Unit = 11,
+ Value = 12,
+ Enum = 13,
+ Keyword = 14,
+ Snippet = 15,
+ Color = 16,
+ File = 17,
+ Reference = 18,
+ Folder = 19,
+ EnumMember = 20,
+ Constant = 21,
+ Struct = 22,
+ Event = 23,
+ Operator = 24,
+ TypeParameter = 25,
+}
+
+local KEYS = {'and', 'break', 'do', 'else', 'elseif', 'end', 'false', 'for', 'function', 'goto', 'if', 'in', 'local', 'nil', 'not', 'or', 'repeat', 'return', 'then', 'true', 'until', 'while'}
+local KEYMAP = {}
+for _, k in ipairs(KEYS) do
+ KEYMAP[k] = true
+end
+
+local EMMY_KEYWORD = {'class', 'type', 'alias', 'param', 'return', 'field', 'generic', 'vararg', 'language', 'see', 'overload'}
+
+local function getDucumentation(name, value)
+ if value:getType() == 'function' then
+ local lib = value:getLib()
+ local hover
+ if lib then
+ hover = getFunctionHoverAsLib(name, lib)
+ else
+ local emmy = value:getEmmy()
+ if emmy and emmy.type == 'emmy.functionType' then
+ hover = getFunctionHoverAsEmmy(name, emmy)
+ else
+ hover = getFunctionHover(name, value:getFunction())
+ end
+ end
+ if not hover then
+ return nil
+ end
+ local text = ([[
+```lua
+%s
+```
+%s
+```lua
+%s
+```
+%s
+]]):format(hover.label or '', hover.description or '', hover.enum or '', hover.doc or '')
+ return {
+ kind = 'markdown',
+ value = text,
+ }
+ end
+ local lib = value:getLib()
+ if lib then
+ return {
+ kind = 'markdown',
+ value = lib.description,
+ }
+ end
+ local comment = value:getComment()
+ if comment then
+ return {
+ kind = 'markdown',
+ value = comment,
+ }
+ end
+ return nil
+end
+
+local function getDetail(value)
+ local literal = value:getLiteral()
+ local tp = type(literal)
+ local detals = {}
+ if value:getType() ~= 'any' then
+ detals[#detals+1] = ('(%s)'):format(value:getType())
+ end
+ if tp == 'boolean' then
+ detals[#detals+1] = (' = %q'):format(literal)
+ elseif tp == 'string' then
+ detals[#detals+1] = (' = %q'):format(literal)
+ elseif tp == 'number' then
+ if math.type(literal) == 'integer' then
+ detals[#detals+1] = (' = %q'):format(literal)
+ else
+ local str = (' = %.16f'):format(literal)
+ local dot = str:find('.', 1, true)
+ local suffix = str:find('[0]+$', dot + 2)
+ if suffix then
+ detals[#detals+1] = str:sub(1, suffix - 1)
+ else
+ detals[#detals+1] = str
+ end
+ end
+ end
+ if value:getType() == 'function' then
+ ---@type emmyFunction
+ local func = value:getFunction()
+ local overLoads = func and func:getEmmyOverLoads()
+ if overLoads then
+ detals[#detals+1] = lang.script('HOVER_MULTI_PROTOTYPE', #overLoads + 1)
+ end
+ end
+ if #detals == 0 then
+ return nil
+ end
+ return table.concat(detals)
+end
+
+local function getKind(cata, value)
+ if value:getType() == 'function' then
+ local func = value:getFunction()
+ if func and func:getObject() then
+ return CompletionItemKind.Method
+ else
+ return CompletionItemKind.Function
+ end
+ end
+ if cata == 'field' then
+ local literal = value:getLiteral()
+ local tp = type(literal)
+ if tp == 'number' or tp == 'integer' or tp == 'string' then
+ return CompletionItemKind.Enum
+ end
+ end
+ return nil
+end
+
+local function buildSnipArgs(args, enums)
+ local t = {}
+ for i, arg in ipairs(args) do
+ local name = arg:match '^[^:]+'
+ local enum = enums and enums[name]
+ if enum and #enum > 0 then
+ t[i] = ('${%d|%s|}'):format(i, table.concat(enum, ','))
+ else
+ t[i] = ('${%d:%s}'):format(i, arg)
+ end
+ end
+ return table.concat(t, ', ')
+end
+
+local function getFunctionSnip(name, value, source)
+ if value:getType() ~= 'function' then
+ return
+ end
+ local lib = value:getLib()
+ local object = source:get 'object'
+ local hover
+ if lib then
+ hover = getFunctionHoverAsLib(name, lib, object)
+ else
+ local emmy = value:getEmmy()
+ if emmy and emmy.type == 'emmy.functionType' then
+ hover = getFunctionHoverAsEmmy(name, emmy, object)
+ else
+ hover = getFunctionHover(name, value:getFunction(), object)
+ end
+ end
+ if not hover then
+ return ('%s()'):format(name)
+ end
+ if not hover.args then
+ return ('%s()'):format(name)
+ end
+ return ('%s(%s)'):format(name, buildSnipArgs(hover.args, hover.rawEnum))
+end
+
+local function getValueData(cata, name, value, pos, source)
+ local data = {
+ documentation = getDucumentation(name, value),
+ detail = getDetail(value),
+ kind = getKind(cata, value),
+ snip = getFunctionSnip(name, value, source),
+ }
+ if cata == 'field' then
+ if not parser:grammar(name, 'Name') then
+ if source:get 'simple' and source:get 'simple' [1] ~= source then
+ data.textEdit = {
+ start = pos + 1,
+ finish = pos,
+ newText = ('[%q]'):format(name),
+ }
+ data.additionalTextEdits = {
+ {
+ start = pos,
+ finish = pos,
+ newText = '',
+ }
+ }
+ else
+ data.textEdit = {
+ start = pos + 1,
+ finish = pos,
+ newText = ('_ENV[%q]'):format(name),
+ }
+ data.additionalTextEdits = {
+ {
+ start = pos,
+ finish = pos,
+ newText = '',
+ }
+ }
+ end
+ end
+ end
+ return data
+end
+
+local function searchLocals(vm, source, word, callback, pos)
+ vm:eachSource(function (src)
+ local loc = src:bindLocal()
+ if not loc then
+ return
+ end
+
+ if src.start <= source.start
+ and loc:close() >= source.finish
+ and matchKey(word, loc:getName())
+ then
+ callback(loc:getName(), src, CompletionItemKind.Variable, getValueData('local', loc:getName(), loc:getValue(), pos, source))
+ end
+ end)
+end
+
+local function sortPairs(t)
+ local keys = {}
+ for k in pairs(t) do
+ keys[#keys+1] = k
+ end
+ table.sort(keys)
+ local i = 0
+ return function ()
+ i = i + 1
+ local k = keys[i]
+ return k, t[k]
+ end
+end
+
+local function searchFieldsByInfo(parent, word, source, map)
+ parent:eachInfo(function (info, src)
+ local k = info[1]
+ if src == source then
+ return
+ end
+ if map[k] then
+ return
+ end
+ if KEYMAP[k] then
+ return
+ end
+ if info.type ~= 'set child' and info.type ~= 'get child' then
+ return
+ end
+ if type(k) ~= 'string' then
+ return
+ end
+ local v = parent:getChild(k)
+ if not v then
+ return
+ end
+ if source:get 'object' and v:getType() ~= 'function' then
+ return
+ end
+ if matchKey(word, k) then
+ map[k] = v
+ end
+ end)
+end
+
+local function searchFieldsByChild(parent, word, source, map)
+ parent:eachChild(function (k, v)
+ if map[k] then
+ return
+ end
+ if KEYMAP[k] then
+ return
+ end
+ if not v:getLib() then
+ return
+ end
+ if type(k) ~= 'string' then
+ return
+ end
+ if source:get 'object' and v:getType() ~= 'function' then
+ return
+ end
+ if matchKey(word, k) then
+ map[k] = v
+ end
+ end)
+end
+
+---@param vm VM
+local function searchFields(vm, source, word, callback, pos)
+ local parent = source:get 'parent' or vm.env:getValue()
+ if not parent then
+ return
+ end
+ local map = {}
+ local current = parent
+ for _ = 1, 3 do
+ searchFieldsByInfo(current, word, source, map)
+ current = current:getMetaMethod('__index')
+ if not current then
+ break
+ end
+ end
+ searchFieldsByChild(parent, word, source, map)
+ for k, v in sortPairs(map) do
+ callback(k, nil, CompletionItemKind.Field, getValueData('field', k, v, pos, source))
+ end
+end
+
+local function searchIndex(vm, source, word, callback)
+ vm:eachSource(function (src)
+ if src:get 'table index' then
+ if matchKey(word, src[1]) then
+ callback(src[1], src, CompletionItemKind.Property)
+ end
+ end
+ end)
+end
+
+local function searchCloseGlobal(vm, start, finish, word, callback)
+ vm:eachSource(function (src)
+ if (src:get 'global' or src:bindLocal())
+ and src.start >= start
+ and src.finish <= finish
+ then
+ if matchKey(word, src[1]) then
+ callback(src[1], src, CompletionItemKind.Variable)
+ end
+ end
+ end)
+end
+
+local function searchParams(vm, source, func, word, callback)
+ if not func then
+ return
+ end
+ ---@type emmyFunction
+ local emmyParams = func:getEmmyParams()
+ if not emmyParams then
+ return
+ end
+ if #emmyParams > 1 then
+ if not func.args
+ or not func.args[1]
+ or func.args[1]:getSource() == source then
+ if matchKey(word, source and source[1] or '') then
+ local names = {}
+ for _, param in ipairs(emmyParams) do
+ local name = param:getName()
+ names[#names+1] = name
+ end
+ callback(table.concat(names, ', '), nil, CompletionItemKind.Snippet)
+ end
+ end
+ end
+ for _, param in ipairs(emmyParams) do
+ local name = param:getName()
+ if matchKey(word, name) then
+ callback(name, param:getSource(), CompletionItemKind.Interface)
+ end
+ end
+end
+
+local function searchKeyWords(vm, source, word, callback)
+ local snipType = config.config.completion.keywordSnippet
+ for _, key in ipairs(KEYS) do
+ if matchKey(word, key) then
+ if snippet.key[key] then
+ if snipType ~= 'Replace'
+ or key == 'local'
+ or key == 'return' then
+ callback(key, nil, CompletionItemKind.Keyword)
+ end
+ if snipType ~= 'Disable' then
+ for _, data in ipairs(snippet.key[key]) do
+ callback(data.label, nil, CompletionItemKind.Snippet, {
+ insertText = data.text,
+ })
+ end
+ end
+ else
+ callback(key, nil, CompletionItemKind.Keyword)
+ end
+ end
+ end
+end
+
+local function searchGlobals(vm, source, word, callback, pos)
+ local global = vm.env:getValue()
+ local map = {}
+ local current = global
+ for _ = 1, 3 do
+ searchFieldsByInfo(current, word, source, map)
+ current = current:getMetaMethod('__index')
+ if not current then
+ break
+ end
+ end
+ searchFieldsByChild(global, word, source, map)
+ for k, v in sortPairs(map) do
+ callback(k, nil, CompletionItemKind.Field, getValueData('field', k, v, pos, source))
+ end
+end
+
+local function searchAsGlobal(vm, source, word, callback, pos)
+ if word == '' then
+ return
+ end
+ searchLocals(vm, source, word, callback, pos)
+ searchFields(vm, source, word, callback, pos)
+ searchKeyWords(vm, source, word, callback)
+end
+
+local function searchAsKeyowrd(vm, source, word, callback, pos)
+ searchLocals(vm, source, word, callback, pos)
+ searchGlobals(vm, source, word, callback, pos)
+ searchKeyWords(vm, source, word, callback)
+end
+
+local function searchAsSuffix(vm, source, word, callback, pos)
+ searchFields(vm, source, word, callback, pos)
+end
+
+local function searchAsIndex(vm, source, word, callback, pos)
+ searchLocals(vm, source, word, callback, pos)
+ searchIndex(vm, source, word, callback)
+ searchFields(vm, source, word, callback, pos)
+end
+
+local function searchAsLocal(vm, source, word, callback)
+ local loc = source:bindLocal()
+ if not loc then
+ return
+ end
+ local close = loc:close()
+ -- 因为闭包的关系落在局部变量finish到close范围内的全局变量一定能访问到该局部变量
+ searchCloseGlobal(vm, source.finish, close, word, callback)
+ -- 特殊支持 local function
+ if matchKey(word, 'function') then
+ callback('function', nil, CompletionItemKind.Keyword)
+ -- TODO 需要有更优美的实现方式
+ local data = snippet.key['function'][1]
+ callback(data.label, nil, CompletionItemKind.Snippet, {
+ insertText = data.text,
+ })
+ end
+end
+
+local function searchAsArg(vm, source, word, callback)
+ searchParams(vm, source, source:get 'arg', word, callback)
+
+ local loc = source:bindLocal()
+ if loc then
+ local close = loc:close()
+ -- 因为闭包的关系落在局部变量finish到close范围内的全局变量一定能访问到该局部变量
+ searchCloseGlobal(vm, source.finish, close, word, callback)
+ return
+ end
+end
+
+local function searchFunction(vm, source, word, pos, callback)
+ if pos >= source.argStart and pos <= source.argFinish then
+ searchParams(vm, nil, source:bindFunction():getFunction(), word, callback)
+ searchCloseGlobal(vm, source.argFinish, source.finish, word, callback)
+ end
+end
+
+local function searchEmmyKeyword(vm, source, word, callback)
+ for _, kw in ipairs(EMMY_KEYWORD) do
+ if matchKey(word, kw) then
+ callback(kw, nil, CompletionItemKind.Keyword)
+ end
+ end
+end
+
+local function searchEmmyClass(vm, source, word, callback)
+ local classes = {}
+ vm.emmyMgr:eachClass(function (class)
+ if class.type == 'emmy.class' or class.type == 'emmy.alias' then
+ if matchKey(word, class:getName()) then
+ classes[#classes+1] = class
+ end
+ end
+ end)
+ table.sort(classes, function (a, b)
+ return a:getName() < b:getName()
+ end)
+ for _, class in ipairs(classes) do
+ callback(class:getName(), class:getSource(), CompletionItemKind.Class)
+ end
+end
+
+local function searchEmmyFunctionParam(vm, source, word, callback)
+ local func = source:get 'emmy function'
+ if not func.args then
+ return
+ end
+ if #func.args > 1 and matchKey(word, func.args[1].name) then
+ local list = {}
+ local args = {}
+ for i, arg in ipairs(func.args) do
+ if func:getObject() and i == 1 then
+ goto NEXT
+ end
+ args[#args+1] = arg.name
+ if #list == 0 then
+ list[#list+1] = ('%s any'):format(arg.name)
+ else
+ list[#list+1] = ('---@param %s any'):format(arg.name)
+ end
+ :: NEXT ::
+ end
+ callback(('%s'):format(table.concat(args, ', ')), nil, CompletionItemKind.Snippet, {
+ insertText = table.concat(list, '\n')
+ })
+ end
+ for i, arg in ipairs(func.args) do
+ if func:getObject() and i == 1 then
+ goto NEXT
+ end
+ if matchKey(word, arg.name) then
+ callback(arg.name, nil, CompletionItemKind.Interface)
+ end
+ :: NEXT ::
+ end
+end
+
+local function searchSource(vm, source, word, callback, pos)
+ if source.type == 'keyword' then
+ searchAsKeyowrd(vm, source, word, callback, pos)
+ return
+ end
+ if source:get 'table index' then
+ searchAsIndex(vm, source, word, callback, pos)
+ return
+ end
+ if source:get 'arg' then
+ searchAsArg(vm, source, word, callback)
+ return
+ end
+ if source:get 'global' then
+ searchAsGlobal(vm, source, word, callback, pos)
+ return
+ end
+ if source:action() == 'local' then
+ searchAsLocal(vm, source, word, callback)
+ return
+ end
+ if source:bindLocal() then
+ searchAsGlobal(vm, source, word, callback, pos)
+ return
+ end
+ if source:get 'simple'
+ and (source.type == 'name' or source.type == '.' or source.type == ':') then
+ searchAsSuffix(vm, source, word, callback, pos)
+ return
+ end
+ if source:bindFunction() then
+ searchFunction(vm, source, word, pos, callback)
+ return
+ end
+ if source.type == 'emmyIncomplete' then
+ searchEmmyKeyword(vm, source, word, callback)
+ State.ignoreText = true
+ return
+ end
+ if source:get 'emmy class' then
+ searchEmmyClass(vm, source, word, callback)
+ State.ignoreText = true
+ return
+ end
+ if source:get 'emmy function' then
+ searchEmmyFunctionParam(vm, source, word, callback)
+ State.ignoreText = true
+ return
+ end
+end
+
+local function buildTextEdit(start, finish, str, quo)
+ local text, lquo, rquo, label, filterText
+ if quo == nil then
+ local text = str:gsub('\r', '\\r'):gsub('\n', '\\n'):gsub('"', '\\"')
+ return {
+ label = '"' .. text .. '"'
+ }
+ end
+ if quo == '"' then
+ label = str
+ filterText = str
+ text = str:gsub('\r', '\\r'):gsub('\n', '\\n'):gsub('"', '\\"')
+ lquo = quo
+ rquo = quo
+ elseif quo == "'" then
+ label = str
+ filterText = str
+ text = str:gsub('\r', '\\r'):gsub('\n', '\\n'):gsub("'", "\\'")
+ lquo = quo
+ rquo = quo
+ else
+ label = str
+ filterText = str
+ lquo = quo
+ rquo = ']' .. lquo:sub(2, -2) .. ']'
+ while str:find(rquo, 1, true) do
+ lquo = '[=' .. quo:sub(2)
+ rquo = ']' .. lquo:sub(2, -2) .. ']'
+ end
+ text = str
+ end
+ return {
+ label = label,
+ filterText = filterText,
+ textEdit = {
+ start = start + #quo,
+ finish = finish - #quo,
+ newText = text,
+ },
+ additionalTextEdits = {
+ {
+ start = start,
+ finish = start + #quo - 1,
+ newText = lquo,
+ },
+ {
+ start = finish - #quo + 1,
+ finish = finish,
+ newText = rquo,
+ },
+ }
+ }
+end
+
+local function searchInRequire(vm, source, callback)
+ if not vm.lsp or not vm.lsp.workspace then
+ return
+ end
+ if source.type ~= 'string' then
+ return
+ end
+ local list, map = vm.lsp.workspace:matchPath(vm.uri, source[1])
+ if not list then
+ return
+ end
+ for _, str in ipairs(list) do
+ local data = buildTextEdit(source.start, source.finish, str, source[2])
+ data.documentation = map[str]
+ callback(str, nil, CompletionItemKind.Reference, data)
+ end
+end
+
+local function searchEnumAsLib(vm, source, word, callback, pos, args, lib)
+ local select = #args + 1
+ for i, arg in ipairs(args) do
+ if arg.start <= pos and arg.finish >= pos then
+ select = i
+ break
+ end
+ end
+
+ -- 根据参数位置找枚举值
+ if lib.args and lib.enums then
+ local arg = lib.args[select]
+ local name = arg and arg.name
+ for _, enum in ipairs(lib.enums) do
+ if enum.name and enum.name == name and enum.enum then
+ if matchKey(word, enum.enum) then
+ local strSource = parser:parse(tostring(enum.enum), 'String')
+ if strSource then
+ if source.type == 'string' then
+ local data = buildTextEdit(source.start, source.finish, strSource[1], source[2])
+ data.documentation = enum.description
+ callback(enum.enum, nil, CompletionItemKind.EnumMember, data)
+ else
+ callback(enum.enum, nil, CompletionItemKind.EnumMember, {
+ documentation = enum.description
+ })
+ end
+ end
+ else
+ callback(enum.enum, nil, CompletionItemKind.EnumMember, {
+ documentation = enum.description
+ })
+ end
+ end
+ end
+ end
+
+ -- 搜索特殊函数
+ if lib.special == 'require' then
+ if select == 1 then
+ searchInRequire(vm, source, callback)
+ end
+ end
+end
+
+local function buildEmmyEnumComment(enum, data)
+ if not enum.comment then
+ return data
+ end
+ if not data then
+ data = {}
+ end
+ data.documentation = tostring(enum.comment)
+ return data
+end
+
+local function searchEnumAsEmmyParams(vm, source, word, callback, pos, args, func)
+ local select = #args + 1
+ for i, arg in ipairs(args) do
+ if arg.start <= pos and arg.finish >= pos then
+ select = i
+ break
+ end
+ end
+
+ local param = func:findEmmyParamByIndex(select)
+ if not param then
+ return
+ end
+
+ param:eachEnum(function (enum)
+ local str = enum[1]
+ if matchKey(word, str) then
+ local strSource = parser:parse(tostring(str), 'String')
+ if strSource then
+ if source.type == 'string' then
+ local data = buildTextEdit(source.start, source.finish, strSource[1], source[2])
+ callback(str, nil, CompletionItemKind.EnumMember, buildEmmyEnumComment(enum, data))
+ else
+ callback(str, nil, CompletionItemKind.EnumMember, buildEmmyEnumComment(enum))
+ end
+ else
+ callback(str, nil, CompletionItemKind.EnumMember, buildEmmyEnumComment(enum))
+ end
+ end
+ end)
+
+ local option = param:getOption()
+ if option and option.special == 'require:1' then
+ searchInRequire(vm, source, callback)
+ end
+end
+
+local function getSelect(args, pos)
+ if not args then
+ return 1
+ end
+ for i, arg in ipairs(args) do
+ if arg.start <= pos and arg.finish >= pos - 1 then
+ return i
+ end
+ end
+ return #args + 1
+end
+
+local function isInFunctionOrTable(call, pos)
+ local args = call:bindCall()
+ if not args then
+ return false
+ end
+ local select = getSelect(args, pos)
+ local arg = args[select]
+ if not arg then
+ return false
+ end
+ if arg.type == 'function' or arg.type == 'table' then
+ return true
+ end
+ return false
+end
+
+local function searchCallArg(vm, source, word, callback, pos)
+ local results = {}
+ vm:eachSource(function (src)
+ if src.type == 'call'
+ and src.start <= pos
+ and src.finish >= pos
+ then
+ results[#results+1] = src
+ end
+ end)
+ if #results == 0 then
+ return nil
+ end
+ -- 可能处于 'func1(func2(' 的嵌套中,将最近的call放到最前面
+ table.sort(results, function (a, b)
+ return a.start > b.start
+ end)
+ local call = results[1]
+ if isInFunctionOrTable(call, pos) then
+ return
+ end
+
+ local args = call:bindCall()
+ if not args then
+ return
+ end
+
+ local value = call:findCallFunction()
+ if not value then
+ return
+ end
+
+ local lib = value:getLib()
+ if lib then
+ searchEnumAsLib(vm, source, word, callback, pos, args, lib)
+ return
+ end
+
+ ---@type emmyFunction
+ local func = value:getFunction()
+ if func then
+ searchEnumAsEmmyParams(vm, source, word, callback, pos, args, func)
+ return
+ end
+end
+
+local function searchAllWords(vm, source, word, callback, pos)
+ if word == '' then
+ return
+ end
+ if source.type == 'string' then
+ return
+ end
+ vm:eachSource(function (src)
+ if src.type == 'name'
+ and not (src.start <= pos and src.finish >= pos)
+ and matchKey(word, src[1])
+ then
+ callback(src[1], src, CompletionItemKind.Text)
+ end
+ end)
+end
+
+local function searchSpecialHashSign(vm, pos, text, callback)
+ -- 尝试 XXX[#XXX+1]
+ -- 1. 搜索 []
+ local index
+ vm:eachSource(function (src)
+ if src.type == 'index'
+ and src.start <= pos
+ and src.finish >= pos
+ then
+ index = src
+ return true
+ end
+ end)
+ if not index then
+ return nil
+ end
+ -- 2. [] 内部只能有一个 #
+ local inside = index[1]
+ if not inside then
+ return nil
+ end
+ if inside.op ~= '#' then
+ return nil
+ end
+ -- 3. [] 左侧必须是 simple ,且index 是 simple 的最后一项
+ local simple = index:get 'simple'
+ if not simple then
+ return nil
+ end
+ if simple[#simple] ~= index then
+ return nil
+ end
+ local chars = text:sub(simple.start, simple[#simple-1].finish)
+ -- 4. 创建代码片段
+ if simple:get 'as action' then
+ local label = chars .. '+1'
+ callback(label, nil, CompletionItemKind.Snippet, {
+ textEdit = {
+ start = inside.start + 1,
+ finish = index.finish,
+ newText = ('%s] = '):format(label),
+ },
+ })
+ else
+ local label = chars
+ callback(label, nil, CompletionItemKind.Snippet, {
+ textEdit = {
+ start = inside.start + 1,
+ finish = index.finish,
+ newText = ('%s]'):format(label),
+ },
+ })
+ end
+end
+
+local function searchSpecial(vm, source, word, callback, pos, text)
+ searchSpecialHashSign(vm, pos, text, callback)
+end
+
+local function makeList(source, pos, word)
+ local list = {}
+ local mark = {}
+ return function (name, src, kind, data)
+ if src == source then
+ return
+ end
+ if word == name then
+ if src and src.start <= pos and src.finish >= pos then
+ return
+ end
+ end
+ if mark[name] then
+ return
+ end
+ mark[name] = true
+ if not data then
+ data = {}
+ end
+ if not data.label then
+ data.label = name
+ end
+ if not data.kind then
+ data.kind = kind
+ end
+ list[#list+1] = data
+ if data.snip then
+ local snipType = config.config.completion.callSnippet
+ if snipType ~= 'Disable' then
+ local snipData = table.deepCopy(data)
+ snipData.insertText = data.snip
+ snipData.kind = CompletionItemKind.Snippet
+ snipData.label = snipData.label .. '()'
+ snipData.snip = nil
+ if snipType == 'Both' then
+ list[#list+1] = snipData
+ elseif snipType == 'Replace' then
+ list[#list] = snipData
+ end
+ end
+ data.snip = nil
+ end
+ end, list
+end
+
+local function keywordSource(vm, word, pos)
+ if not KEYMAP[word] then
+ return nil
+ end
+ return vm:instantSource {
+ type = 'keyword',
+ start = pos,
+ finish = pos + #word - 1,
+ [1] = word,
+ }
+end
+
+local function findStartPos(pos, buf)
+ local res = nil
+ for i = pos, 1, -1 do
+ local c = buf:sub(i, i)
+ if c:find '[%w_]' then
+ res = i
+ else
+ break
+ end
+ end
+ if not res then
+ for i = pos, 1, -1 do
+ local c = buf:sub(i, i)
+ if c == '.' or c == ':' or c == '|' or c == '(' then
+ res = i
+ break
+ elseif c == '#' or c == '@' then
+ res = i + 1
+ break
+ elseif c:find '[%s%c]' then
+ else
+ break
+ end
+ end
+ end
+ if not res then
+ return pos
+ end
+ return res
+end
+
+local function findWord(position, text)
+ local word = text
+ for i = position, 1, -1 do
+ local c = text:sub(i, i)
+ if not c:find '[%w_]' then
+ word = text:sub(i+1, position)
+ break
+ end
+ end
+ return word:match('^([%w_]*)')
+end
+
+local function getSource(vm, pos, text, filter)
+ local word = findWord(pos, text)
+ local source = keywordSource(vm, word, pos)
+ if source then
+ return source, pos, word
+ end
+ source = findSource(vm, pos, filter)
+ if source then
+ return source, pos, word
+ end
+ pos = findStartPos(pos, text)
+ source = findSource(vm, pos, filter) or findSource(vm, pos-1, filter)
+ return source, pos, word
+end
+
+return function (vm, text, pos, oldText)
+ local filter = {
+ ['name'] = true,
+ ['string'] = true,
+ ['.'] = true,
+ [':'] = true,
+ ['emmyName'] = true,
+ ['emmyIncomplete'] = true,
+ ['call'] = true,
+ ['function'] = true,
+ ['localfunction'] = true,
+ }
+ local source, pos, word = getSource(vm, pos, text, filter)
+ if not source then
+ return nil
+ end
+ if oldText then
+ local oldWord = oldText:sub(source.start, source.finish)
+ if word:sub(1, #oldWord) ~= oldWord then
+ return nil
+ end
+ end
+ State = {}
+ local callback, list = makeList(source, pos, word)
+ searchSpecial(vm, source, word, callback, pos, text)
+ searchCallArg(vm, source, word, callback, pos)
+ searchSource(vm, source, word, callback, pos)
+ if not oldText or #list > 0 then
+ if not State.ignoreText then
+ searchAllWords(vm, source, word, callback, pos)
+ end
+ end
+
+ if #list == 0 then
+ return nil
+ end
+
+ return list
+end
diff --git a/script/src/core/definition.lua b/script/src/core/definition.lua
new file mode 100644
index 00000000..8680a29b
--- /dev/null
+++ b/script/src/core/definition.lua
@@ -0,0 +1,296 @@
+local findSource = require 'core.find_source'
+local Mode
+
+local function parseValueSimily(callback, vm, source)
+ local key = source[1]
+ if not key then
+ return nil
+ end
+ vm:eachSource(function (other)
+ if other == source then
+ goto CONTINUE
+ end
+ if other[1] == key
+ and not other:bindLocal()
+ and other:bindValue()
+ and source:bindValue() ~= other:bindValue()
+ then
+ if Mode == 'definition' then
+ if other:action() == 'set' then
+ callback(other)
+ end
+ elseif Mode == 'reference' then
+ if other:action() == 'set' or other:action() == 'get' then
+ callback(other)
+ end
+ end
+ end
+ :: CONTINUE ::
+ end)
+end
+
+local function parseLocal(callback, vm, source)
+ ---@type Local
+ local loc = source:bindLocal()
+ callback(loc:getSource())
+ loc:eachInfo(function (info, src)
+ if Mode == 'definition' then
+ if info.type == 'set' or info.type == 'local' then
+ if vm.uri == src:getUri() then
+ if source.id >= src.id then
+ callback(src)
+ end
+ end
+ end
+ elseif Mode == 'reference' then
+ if info.type == 'set' or info.type == 'local' or info.type == 'return' or info.type == 'get' then
+ callback(src)
+ end
+ end
+ end)
+end
+
+local function parseValueByValue(callback, vm, source, value)
+ if not source then
+ return
+ end
+ local mark = { [vm] = true }
+ local list = {}
+ for _ = 1, 5 do
+ value:eachInfo(function (info, src)
+ if Mode == 'definition' then
+ if info.type == 'local' then
+ if vm.uri == src:getUri() then
+ if source.id >= src.id then
+ callback(src)
+ end
+ end
+ end
+ if info.type == 'set' then
+ if vm.uri == src:getUri() then
+ if source.id >= src.id then
+ callback(src)
+ end
+ else
+ callback(src)
+ end
+ end
+ if info.type == 'return' then
+ if (src.type ~= 'simple' or src[#src].type == 'call')
+ and src.type ~= 'name'
+ then
+ callback(src)
+ end
+ if vm.lsp then
+ local destVM = vm.lsp:getVM(src:getUri())
+ if destVM and not mark[destVM] then
+ mark[destVM] = true
+ list[#list+1] = { destVM, src }
+ end
+ end
+ end
+ elseif Mode == 'reference' then
+ if info.type == 'set' or info.type == 'local' or info.type == 'return' or info.type == 'get' then
+ callback(src)
+ end
+ end
+ end)
+ local nextData = table.remove(list, 1)
+ if nextData then
+ vm, source = nextData[1], nextData[2]
+ end
+ end
+end
+
+local function parseValue(callback, vm, source)
+ local value = source:bindValue()
+ local isGlobal
+ if value then
+ isGlobal = value:isGlobal()
+ parseValueByValue(callback, vm, source, value)
+ local emmy = value:getEmmy()
+ if emmy and emmy.type == 'emmy.type' then
+ ---@type EmmyType
+ local emmyType = emmy
+ emmyType:eachClass(function (class)
+ if class and class:getValue() then
+ local emmyVM = vm
+ if vm.lsp then
+ local destVM = vm.lsp:getVM(class:getSource():getUri())
+ if destVM then
+ emmyVM = destVM
+ end
+ end
+ parseValueByValue(callback, emmyVM, class:getValue():getSource(), class:getValue())
+ end
+ end)
+ end
+ end
+ local parent = source:get 'parent'
+ for _ = 1, 3 do
+ if parent then
+ local ok = parent:eachInfo(function (info, src)
+ if Mode == 'definition' then
+ if info.type == 'set child' and info[1] == source[1] then
+ callback(src)
+ return true
+ end
+ elseif Mode == 'reference' then
+ if (info.type == 'set child' or info.type == 'get child') and info[1] == source[1] then
+ callback(src)
+ return true
+ end
+ end
+ end)
+ if ok then
+ break
+ end
+ parent = parent:getMetaMethod('__index')
+ end
+ end
+ return isGlobal
+end
+
+local function parseLabel(callback, vm, label)
+ label:eachInfo(function (info, src)
+ if Mode == 'definition' then
+ if info.type == 'set' then
+ callback(src)
+ end
+ elseif Mode == 'reference' then
+ if info.type == 'set' or info.type == 'get' then
+ callback(src)
+ end
+ end
+ end)
+end
+
+local function jumpUri(callback, vm, source)
+ local uri = source:get 'target uri'
+ callback {
+ start = 0,
+ finish = 0,
+ uri = uri
+ }
+end
+
+local function parseClass(callback, vm, source)
+ local className = source:get 'emmy class'
+ vm.emmyMgr:eachClass(className, function (class)
+ if Mode == 'definition' then
+ if class.type == 'emmy.class' or class.type == 'emmy.alias' then
+ local src = class:getSource()
+ callback(src)
+ end
+ elseif Mode == 'reference' then
+ if class.type == 'emmy.class' or class.type == 'emmy.alias' or class.type == 'emmy.typeUnit' then
+ local src = class:getSource()
+ callback(src)
+ end
+ end
+ end)
+end
+
+local function parseSee(callback, vm, source)
+ local see = source:get 'emmy see'
+ local className = see[1][1]
+ local childName = see[2][1]
+ vm.emmyMgr:eachClass(className, function (class)
+ ---@type value
+ local value = class:getValue()
+ local child = value:getChild(childName)
+ parseValueByValue(callback, vm, source, child)
+ end)
+end
+
+local function parseFunction(callback, vm, source)
+ if Mode == 'definition' then
+ callback(source:bindFunction():getSource())
+ source:bindFunction():eachInfo(function (info, src)
+ if info.type == 'set' or info.type == 'local' then
+ if vm.uri == src:getUri() then
+ if source.id >= src.id then
+ callback(src)
+ end
+ else
+ callback(src)
+ end
+ end
+ end)
+ elseif Mode == 'reference' then
+ callback(source:bindFunction():getSource())
+ source:bindFunction():eachInfo(function (info, src)
+ if info.type == 'set' or info.type == 'local' or info.type == 'get' then
+ callback(src)
+ end
+ end)
+ end
+end
+
+local function makeList(source)
+ local list = {}
+ local mark = {}
+ return list, function (src)
+ if mark[src] then
+ return
+ end
+ mark[src] = true
+ list[#list+1] = {
+ src.start,
+ src.finish,
+ src.uri
+ }
+ end
+end
+
+return function (vm, pos, mode)
+ local filter = {
+ ['name'] = true,
+ ['string'] = true,
+ ['number'] = true,
+ ['boolean'] = true,
+ ['label'] = true,
+ ['goto'] = true,
+ ['function'] = true,
+ ['...'] = true,
+ ['emmyName'] = true,
+ ['emmyIncomplete'] = true,
+ }
+ local source = findSource(vm, pos, filter)
+ if not source then
+ return nil
+ end
+ Mode = mode
+ local list, callback = makeList(source)
+ local isGlobal
+ if source:bindLocal() then
+ parseLocal(callback, vm, source)
+ end
+ if source:bindValue() then
+ isGlobal = parseValue(callback, vm, source)
+ end
+ if source:bindLabel() then
+ parseLabel(callback, vm, source:bindLabel())
+ end
+ if source:bindFunction() then
+ parseFunction(callback, vm, source)
+ end
+ if source:get 'target uri' then
+ jumpUri(callback, vm, source)
+ end
+ if source:get 'in index' then
+ isGlobal = parseValue(callback, vm, source)
+ end
+ if source:get 'emmy class' then
+ parseClass(callback, vm, source)
+ end
+ if source:get 'emmy see' then
+ parseSee(callback, vm, source)
+ end
+
+ if #list == 0 then
+ parseValueSimily(callback, vm, source)
+ end
+
+ return list, isGlobal
+end
diff --git a/script/src/core/diagnostics.lua b/script/src/core/diagnostics.lua
new file mode 100644
index 00000000..3b11b818
--- /dev/null
+++ b/script/src/core/diagnostics.lua
@@ -0,0 +1,1042 @@
+local lang = require 'language'
+local config = require 'config'
+local library = require 'core.library'
+local buildGlobal = require 'vm.global'
+local DiagnosticSeverity = require 'constant.DiagnosticSeverity'
+local DiagnosticDefaultSeverity = require 'constant.DiagnosticDefaultSeverity'
+local DiagnosticTag = require 'constant.DiagnosticTag'
+
+local mt = {}
+mt.__index = mt
+
+local function isContainPos(obj, start, finish)
+ if obj.start <= start and obj.finish >= finish then
+ return true
+ end
+ return false
+end
+
+function mt:searchUnusedLocals(callback)
+ self.vm:eachSource(function (source)
+ local loc = source:bindLocal()
+ if not loc then
+ return
+ end
+ if loc:get 'emmy arg' then
+ return
+ end
+ local name = loc:getName()
+ if name == '_' or name == '_ENV' or name == '' then
+ return
+ end
+ if source:action() ~= 'local' then
+ return
+ end
+ if loc:get 'hide' then
+ return
+ end
+ local used = loc:eachInfo(function (info)
+ if info.type == 'get' then
+ return true
+ end
+ end)
+ if not used then
+ callback(source.start, source.finish, name)
+ end
+ end)
+end
+
+function mt:searchUnusedFunctions(callback)
+ self.vm:eachSource(function (source)
+ local loc = source:bindLocal()
+ if not loc then
+ return
+ end
+ if loc:get 'emmy arg' then
+ return
+ end
+ if source:action() ~= 'local' then
+ return
+ end
+ if loc:get 'hide' then
+ return
+ end
+ local used = loc:eachInfo(function (info)
+ if info.type == 'get' then
+ return true
+ end
+ end)
+ if used then
+ return
+ end
+ loc:eachInfo(function (info, src)
+ if info.type == 'set' or info.type == 'local' then
+ local v = src:bindValue()
+ local func = v and v:getFunction()
+ if func and func:getSource().uri == self.vm.uri then
+ callback(func:getSource().start, func:getSource().finish)
+ end
+ end
+ end)
+ end)
+end
+
+function mt:searchUndefinedGlobal(callback)
+ local definedGlobal = {}
+ for name in pairs(config.config.diagnostics.globals) do
+ definedGlobal[name] = true
+ end
+ local envValue = buildGlobal(self.vm.lsp)
+ envValue:eachInfo(function (info)
+ if info.type == 'set child' then
+ local name = info[1]
+ definedGlobal[name] = true
+ end
+ end)
+ self.vm:eachSource(function (source)
+ if not source:get 'global' then
+ return
+ end
+ local name = source:getName()
+ if name == '' then
+ return
+ end
+ local parent = source:get 'parent'
+ if not parent then
+ return
+ end
+ if not parent:get 'ENV' and not source:get 'in index' then
+ return
+ end
+ if definedGlobal[name] then
+ return
+ end
+ if type(name) ~= 'string' then
+ return
+ end
+ callback(source.start, source.finish, name)
+ end)
+end
+
+function mt:searchUnusedLabel(callback)
+ self.vm:eachSource(function (source)
+ local label = source:bindLabel()
+ if not label then
+ return
+ end
+ if source:action() ~= 'set' then
+ return
+ end
+ local used = label:eachInfo(function (info)
+ if info.type == 'get' then
+ return true
+ end
+ end)
+ if not used then
+ callback(source.start, source.finish, label:getName())
+ end
+ end)
+end
+
+function mt:searchUnusedVararg(callback)
+ self.vm:eachSource(function (source)
+ local value = source:bindFunction()
+ if not value then
+ return
+ end
+ local func = value:getFunction()
+ if not func then
+ return
+ end
+ if func._dotsSource and not func._dotsLoad then
+ callback(func._dotsSource.start, func._dotsSource.finish)
+ end
+ end)
+end
+
+local function isInString(vm, start, finish)
+ return vm:eachSource(function (source)
+ if source.type == 'string' and isContainPos(source, start, finish) then
+ return true
+ end
+ end)
+end
+
+function mt:searchSpaces(callback)
+ local vm = self.vm
+ local lines = self.lines
+ for i = 1, #lines do
+ local line = lines:line(i)
+
+ if line:find '^[ \t]+$' then
+ local start, finish = lines:range(i)
+ if isInString(vm, start, finish) then
+ goto NEXT_LINE
+ end
+ callback(start, finish, lang.script.DIAG_LINE_ONLY_SPACE)
+ goto NEXT_LINE
+ end
+
+ local pos = line:find '[ \t]+$'
+ if pos then
+ local start, finish = lines:range(i)
+ start = start + pos - 1
+ if isInString(vm, start, finish) then
+ goto NEXT_LINE
+ end
+ callback(start, finish, lang.script.DIAG_LINE_POST_SPACE)
+ goto NEXT_LINE
+ end
+
+ ::NEXT_LINE::
+ end
+end
+
+function mt:searchRedefinition(callback)
+ local used = {}
+ local uri = self.uri
+ self.vm:eachSource(function (source)
+ local loc = source:bindLocal()
+ if not loc then
+ return
+ end
+ local shadow = loc:shadow()
+ if not shadow then
+ return
+ end
+ if used[shadow] then
+ return
+ end
+ used[shadow] = true
+ if loc:get 'hide' then
+ return
+ end
+ local name = loc:getName()
+ if name == '_' or name == '_ENV' or name == '' then
+ return
+ end
+ local related = {}
+ for i = 1, #shadow do
+ related[i] = {
+ start = shadow[i]:getSource().start,
+ finish = shadow[i]:getSource().finish,
+ uri = uri,
+ }
+ end
+ for i = 2, #shadow do
+ callback(shadow[i]:getSource().start, shadow[i]:getSource().finish, name, related)
+ end
+ end)
+end
+
+function mt:searchNewLineCall(callback)
+ local lines = self.lines
+ self.vm:eachSource(function (source)
+ if source.type ~= 'simple' then
+ return
+ end
+ for i = 1, #source - 1 do
+ local callSource = source[i]
+ local funcSource = source[i-1]
+ if callSource.type ~= 'call' then
+ goto CONTINUE
+ end
+ local callLine = lines:rowcol(callSource.start)
+ local funcLine = lines:rowcol(funcSource.finish)
+ if callLine > funcLine then
+ callback(callSource.start, callSource.finish)
+ end
+ :: CONTINUE ::
+ end
+ end)
+end
+
+function mt:searchNewFieldCall(callback)
+ local lines = self.lines
+ self.vm:eachSource(function (source)
+ if source.type ~= 'table' then
+ return
+ end
+ for i = 1, #source do
+ local field = source[i]
+ if field.type == 'simple' then
+ local callSource = field[#field]
+ local funcSource = field[#field-1]
+ local callLine = lines:rowcol(callSource.start)
+ local funcLine = lines:rowcol(funcSource.finish)
+ if callLine > funcLine then
+ callback(funcSource.start, callSource.finish
+ , lines.buf:sub(funcSource.start, funcSource.finish)
+ , lines.buf:sub(callSource.start, callSource.finish)
+ )
+ end
+ end
+ end
+ end)
+end
+
+function mt:searchRedundantParameters(callback)
+ self.vm:eachSource(function (source)
+ local args = source:bindCall()
+ if not args then
+ return
+ end
+
+ -- 回调函数不检查
+ local simple = source:get 'simple'
+ if simple and simple[2] == source then
+ local loc = simple[1]:bindLocal()
+ if loc then
+ local source = loc:getSource()
+ if source:get 'arg' then
+ return
+ end
+ end
+ end
+
+ local value = source:findCallFunction()
+ if not value then
+ return
+ end
+
+ local func = value:getFunction()
+ -- 参数中有 ... ,不用再检查了
+ if func:hasDots() then
+ return
+ end
+ local max = #func.args
+ local passed = #args
+ -- function m.open() end
+ -- m:open()
+ -- 这种写法不算错
+ if passed == 1 and source:get 'has object' then
+ return
+ end
+ for i = max + 1, passed do
+ local extra = args[i]
+ callback(extra.start, extra.finish, max, passed)
+ end
+ end)
+end
+
+local opMap = {
+ ['+'] = true,
+ ['-'] = true,
+ ['*'] = true,
+ ['/'] = true,
+ ['//'] = true,
+ ['^'] = true,
+ ['<<'] = true,
+ ['>>'] = true,
+ ['&'] = true,
+ ['|'] = true,
+ ['~'] = true,
+ ['..'] = true,
+}
+
+local literalMap = {
+ ['number'] = true,
+ ['boolean'] = true,
+ ['string'] = true,
+ ['table'] = true,
+}
+
+function mt:searchAmbiguity1(callback)
+ self.vm:eachSource(function (source)
+ if source.op ~= 'or' then
+ return
+ end
+ local first = source[1]
+ local second = source[2]
+ -- a + (b or 0) --> (a + b) or 0
+ do
+ if opMap[first.op]
+ and first.type ~= 'unary'
+ and not second.op
+ and literalMap[second.type]
+ and not first.brackets
+ then
+ callback(source.start, source.finish, first.start, first.finish)
+ end
+ end
+ -- (a or 0) + c --> a or (0 + c)
+ do
+ if opMap[second.op]
+ and second.type ~= 'unary'
+ and not first.op
+ and literalMap[second[1].type]
+ and not second.brackets
+ then
+ callback(source.start, source.finish, second.start, second.finish)
+ end
+ end
+ end)
+end
+
+function mt:searchLowercaseGlobal(callback)
+ local definedGlobal = {}
+ for name in pairs(config.config.diagnostics.globals) do
+ definedGlobal[name] = true
+ end
+ for name in pairs(library.global) do
+ definedGlobal[name] = true
+ end
+ self.vm:eachSource(function (source)
+ if source.type == 'name'
+ and source:get 'parent'
+ and not source:get 'simple'
+ and not source:get 'table index'
+ and source:action() == 'set'
+ then
+ local name = source[1]
+ if definedGlobal[name] then
+ return
+ end
+ local first = name:match '%w'
+ if not first then
+ return
+ end
+ if first:match '%l' then
+ callback(source.start, source.finish)
+ end
+ end
+ end)
+end
+
+function mt:searchDuplicateIndex(callback)
+ self.vm:eachSource(function (source)
+ if source.type ~= 'table' then
+ return
+ end
+ local mark = {}
+ for _, obj in ipairs(source) do
+ if obj.type == 'pair' then
+ local key = obj[1]
+ local name
+ if key.index then
+ if key.type == 'string' then
+ name = key[1]
+ end
+ elseif key.type == 'name' then
+ name = key[1]
+ end
+ if name then
+ if mark[name] then
+ mark[name][#mark[name]+1] = obj
+ else
+ mark[name] = { obj }
+ end
+ end
+ end
+ end
+ for name, defs in pairs(mark) do
+ if #defs > 1 then
+ local related = {}
+ for i = 1, #defs do
+ related[i] = {
+ start = defs[i][1].start,
+ finish = defs[i][2].finish,
+ uri = self.uri,
+ }
+ end
+ for i = 1, #defs - 1 do
+ callback(defs[i][1].start, defs[i][2].finish, name, related, 'unused')
+ end
+ for i = #defs, #defs do
+ callback(defs[i][1].start, defs[i][1].finish, name, related, 'duplicate')
+ end
+ end
+ end
+ end)
+end
+
+function mt:searchDuplicateMethod(callback)
+ local uri = self.uri
+ local mark = {}
+ local map = {}
+ self.vm:eachSource(function (source)
+ local parent = source:get 'parent'
+ if not parent then
+ return
+ end
+ if mark[parent] then
+ return
+ end
+ mark[parent] = true
+ local relates = {}
+ parent:eachInfo(function (info, src)
+ local k = info[1]
+ if info.type ~= 'set child' then
+ return
+ end
+ if type(k) ~= 'string' then
+ return
+ end
+ if src.start == 0 then
+ return
+ end
+ if not src:get 'object' then
+ return
+ end
+ if map[src] then
+ return
+ end
+ if not relates[k] then
+ relates[k] = map[src] or {
+ name = k,
+ }
+ end
+ map[src] = relates[k]
+ relates[k][#relates[k]+1] = {
+ start = src.start,
+ finish = src.finish,
+ uri = src.uri
+ }
+ end)
+ end)
+ for src, relate in pairs(map) do
+ if #relate > 1 and src.uri == uri then
+ callback(src.start, src.finish, relate.name, relate)
+ end
+ end
+end
+
+function mt:searchEmptyBlock(callback)
+ self.vm:eachSource(function (source)
+ -- 认为空repeat与空while是合法的
+ -- 要去vm中激活source
+ if source.type == 'if' then
+ for _, block in ipairs(source) do
+ if #block > 0 then
+ return
+ end
+ end
+ callback(source.start, source.finish)
+ return
+ end
+ if source.type == 'loop'
+ or source.type == 'in'
+ then
+ if #source == 0 then
+ callback(source.start, source.finish)
+ end
+ return
+ end
+ end)
+end
+
+function mt:searchRedundantValue(callback)
+ self.vm:eachSource(function (source)
+ if source.type == 'set' or source.type == 'local' then
+ local args = source[1]
+ local values = source[2]
+ if not source[2] then
+ return
+ end
+ local argCount, valueCount
+ if args.type == 'list' then
+ argCount = #args
+ else
+ argCount = 1
+ end
+ if values.type == 'list' then
+ valueCount = #values
+ else
+ valueCount = 1
+ end
+ for i = argCount + 1, valueCount do
+ local value = values[i]
+ callback(value.start, value.finish, argCount, valueCount)
+ end
+ end
+ end)
+end
+
+function mt:searchUndefinedEnvChild(callback)
+ self.vm:eachSource(function (source)
+ if not source:get 'global' then
+ return
+ end
+ local name = source:getName()
+ if name == '' then
+ return
+ end
+ if source:get 'in index' then
+ return
+ end
+ local parent = source:get 'parent'
+ if parent:get 'ENV' then
+ return
+ end
+ local value = source:bindValue()
+ if not value then
+ return
+ end
+ if value:getSource() == source then
+ callback(source.start, source.finish, name)
+ end
+ return
+ end)
+end
+
+function mt:searchGlobalInNilEnv(callback)
+ self.vm:eachSource(function (source)
+ if not source:get 'global' then
+ return
+ end
+ local name = source:getName()
+ if name == '' then
+ return
+ end
+ local parentSource = source:get 'parent' :getSource()
+ if parentSource and parentSource.type == 'nil' then
+ callback(source.start, source.finish, {
+ {
+ start = parentSource.start,
+ finish = parentSource.finish,
+ uri = self.uri,
+ }
+ })
+ end
+ return
+ end)
+end
+
+function mt:checkEmmyClass(source, callback)
+ local class = source:get 'emmy.class'
+ if not class then
+ return
+ end
+ -- class重复定义
+ local name = class:getName()
+ local related = {}
+ self.vm.emmyMgr:eachClass(name, function (class)
+ if class.type ~= 'emmy.class' and class.type ~= 'emmy.alias' then
+ return
+ end
+ local src = class:getSource()
+ if src ~= source then
+ related[#related+1] = {
+ start = src.start,
+ finish = src.finish,
+ uri = src.uri,
+ }
+ end
+ end)
+ if #related > 0 then
+ callback(source.start, source.finish, lang.script.DIAG_DUPLICATE_CLASS ,related)
+ end
+ -- 继承不存在的class
+ local extends = class.extends
+ if not extends then
+ return
+ end
+ local parent = self.vm.emmyMgr:eachClass(extends, function (parent)
+ if parent.type == 'emmy.class' then
+ return parent
+ end
+ end)
+ if not parent then
+ callback(source[2].start, source[2].finish, lang.script.DIAG_UNDEFINED_CLASS)
+ return
+ end
+
+ -- class循环继承
+ local related = {}
+ local current = class
+ for _ = 1, 10 do
+ local extends = current.extends
+ if not extends then
+ break
+ end
+ related[#related+1] = {
+ start = current:getSource().start,
+ finish = current:getSource().finish,
+ uri = current:getSource().uri,
+ }
+ current = self.vm.emmyMgr:eachClass(extends, function (parent)
+ if parent.type == 'emmy.class' then
+ return parent
+ end
+ end)
+ if not current then
+ break
+ end
+ if current:getName() == class:getName() then
+ callback(source.start, source.finish, lang.script.DIAG_CYCLIC_EXTENDS, related)
+ break
+ end
+ end
+end
+
+function mt:checkEmmyType(source, callback)
+ for _, tpsource in ipairs(source) do
+ local name = tpsource[1]
+ local class = self.vm.emmyMgr:eachClass(name, function (class)
+ if class.type == 'emmy.class' or class.type == 'emmy.alias' then
+ return class
+ end
+ end)
+ if not class then
+ callback(tpsource.start, tpsource.finish, lang.script.DIAG_UNDEFINED_CLASS)
+ end
+ end
+end
+
+function mt:checkEmmyAlias(source, callback)
+ local class = source:get 'emmy.alias'
+ if not class then
+ return
+ end
+ -- class重复定义
+ local name = class:getName()
+ local related = {}
+ self.vm.emmyMgr:eachClass(name, function (class)
+ if class.type ~= 'emmy.class' and class.type ~= 'emmy.alias' then
+ return
+ end
+ local src = class:getSource()
+ if src ~= source then
+ related[#related+1] = {
+ start = src.start,
+ finish = src.finish,
+ uri = src.uri,
+ }
+ end
+ end)
+ if #related > 0 then
+ callback(source.start, source.finish, lang.script.DIAG_DUPLICATE_CLASS ,related)
+ end
+end
+
+function mt:checkEmmyParam(source, callback, mark)
+ local func = source:get 'emmy function'
+ if not func then
+ return
+ end
+ if mark[func] then
+ return
+ end
+ mark[func] = true
+
+ -- 检查不存在的参数
+ local emmyParams = func:getEmmyParams()
+ local funcParams = {}
+ if func.args then
+ for _, arg in ipairs(func.args) do
+ funcParams[arg.name] = true
+ end
+ end
+ for _, param in ipairs(emmyParams) do
+ local name = param:getName()
+ if not funcParams[name] then
+ callback(param:getSource()[1].start, param:getSource()[1].finish, lang.script.DIAG_INEXISTENT_PARAM)
+ end
+ end
+
+ -- 检查重复的param
+ local lists = {}
+ for _, param in ipairs(emmyParams) do
+ local name = param:getName()
+ if not lists[name] then
+ lists[name] = {}
+ end
+ lists[name][#lists[name]+1] = param:getSource()[1]
+ end
+ for _, list in pairs(lists) do
+ if #list > 1 then
+ local related = {}
+ for _, src in ipairs(list) do
+ related[#related+1] = {
+ src.start,
+ src.finish,
+ src.uri,
+ }
+ callback(src.start, src.finish, lang.script.DIAG_DUPLICATE_PARAM)
+ end
+ end
+ end
+end
+
+function mt:checkEmmyField(source, callback, mark)
+ ---@type EmmyClass
+ local class = source:get 'target class'
+ -- 必须写在 class 的后面
+ if not class then
+ callback(source.start, source.finish, lang.script.DIAG_NEED_CLASS)
+ end
+
+ -- 检查重复的 field
+ if class and not mark[class] then
+ mark[class] = true
+ local lists = {}
+ class:eachField(function (field)
+ local name = field:getName()
+ if not lists[name] then
+ lists[name] = {}
+ end
+ lists[name][#lists[name]+1] = field:getSource()[2]
+ end)
+ for _, list in pairs(lists) do
+ if #list > 1 then
+ local related = {}
+ for _, src in ipairs(list) do
+ related[#related+1] = {
+ src.start,
+ src.finish,
+ src.uri,
+ }
+ callback(src.start, src.finish, lang.script.DIAG_DUPLICATE_FIELD)
+ end
+ end
+ end
+ end
+end
+
+function mt:searchEmmyLua(callback)
+ local mark = {}
+ self.vm:eachSource(function (source)
+ if source.type == 'emmyClass' then
+ self:checkEmmyClass(source, callback)
+ elseif source.type == 'emmyType' then
+ self:checkEmmyType(source, callback)
+ elseif source.type == 'emmyAlias' then
+ self:checkEmmyAlias(source, callback)
+ elseif source.type == 'emmyParam' then
+ self:checkEmmyParam(source, callback, mark)
+ elseif source.type == 'emmyField' then
+ self:checkEmmyField(source, callback, mark)
+ end
+ end)
+end
+
+function mt:searchSetConstLocal(callback)
+ local mark = {}
+ self.vm:eachSource(function (source)
+ local loc = source:bindLocal()
+ if not loc then
+ return
+ end
+ if mark[loc] then
+ return
+ end
+ mark[loc] = true
+ if not loc.tags then
+ return
+ end
+ local const
+ for _, tag in ipairs(loc.tags) do
+ if tag[1] == 'const' then
+ const = true
+ break
+ end
+ end
+ if not const then
+ return
+ end
+ loc:eachInfo(function (info, src)
+ if info.type == 'set' then
+ callback(src.start, src.finish)
+ end
+ end)
+ end)
+end
+
+function mt:doDiagnostics(func, code, callback)
+ if config.config.diagnostics.disable[code] then
+ return
+ end
+ local level = config.config.diagnostics.severity[code]
+ if not DiagnosticSeverity[level] then
+ level = DiagnosticDefaultSeverity[code]
+ end
+ func(self, function (start, finish, ...)
+ local data = callback(...)
+ data.code = code
+ data.start = start
+ data.finish = finish
+ data.level = data.level or DiagnosticSeverity[level]
+ self.datas[#self.datas+1] = data
+ end)
+ if coroutine.isyieldable() then
+ if self.vm:isRemoved() then
+ coroutine.yield('stop')
+ else
+ coroutine.yield()
+ end
+ end
+end
+
+return function (vm, lines, uri)
+ local session = setmetatable({
+ vm = vm,
+ lines = lines,
+ uri = uri,
+ datas = {},
+ }, mt)
+
+ -- 未使用的局部变量
+ session:doDiagnostics(session.searchUnusedLocals, 'unused-local', function (key)
+ return {
+ message = lang.script('DIAG_UNUSED_LOCAL', key),
+ tags = {DiagnosticTag.Unnecessary},
+ }
+ end)
+ -- 未使用的函数
+ session:doDiagnostics(session.searchUnusedFunctions, 'unused-function', function ()
+ return {
+ message = lang.script.DIAG_UNUSED_FUNCTION,
+ tags = {DiagnosticTag.Unnecessary},
+ }
+ end)
+ -- 读取未定义全局变量
+ session:doDiagnostics(session.searchUndefinedGlobal, 'undefined-global', function (key)
+ local message = lang.script('DIAG_UNDEF_GLOBAL', key)
+ local otherVersion = library.other[key]
+ local customLib = library.custom[key]
+ if otherVersion then
+ message = ('%s(%s)'):format(message, lang.script('DIAG_DEFINED_VERSION', table.concat(otherVersion, '/'), config.config.runtime.version))
+ end
+ if customLib then
+ message = ('%s(%s)'):format(message, lang.script('DIAG_DEFINED_CUSTOM', table.concat(customLib, '/')))
+ end
+ return {
+ message = message,
+ }
+ end)
+ -- 未使用的Label
+ session:doDiagnostics(session.searchUnusedLabel, 'unused-label', function (key)
+ return {
+ message = lang.script('DIAG_UNUSED_LABEL', key),
+ tags = {DiagnosticTag.Unnecessary},
+ }
+ end)
+ -- 未使用的不定参数
+ session:doDiagnostics(session.searchUnusedVararg, 'unused-vararg', function ()
+ return {
+ message = lang.script.DIAG_UNUSED_VARARG,
+ tags = {DiagnosticTag.Unnecessary},
+ }
+ end)
+ -- 只有空格与制表符的行,以及后置空格
+ session:doDiagnostics(session.searchSpaces, 'trailing-space', function (message)
+ return {
+ message = message,
+ }
+ end)
+ -- 重定义局部变量
+ session:doDiagnostics(session.searchRedefinition, 'redefined-local', function (key, related)
+ return {
+ message = lang.script('DIAG_REDEFINED_LOCAL', key),
+ related = related,
+ }
+ end)
+ -- 以括号开始的一行(可能被误解析为了上一行的call)
+ session:doDiagnostics(session.searchNewLineCall, 'newline-call', function ()
+ return {
+ message = lang.script.DIAG_PREVIOUS_CALL,
+ }
+ end)
+ -- 以字符串开始的field(可能被误解析为了上一行的call)
+ session:doDiagnostics(session.searchNewFieldCall, 'newfield-call', function (func, call)
+ return {
+ message = lang.script('DIAG_PREFIELD_CALL', func, call),
+ }
+ end)
+ -- 调用函数时的参数数量是否超过函数的接收数量
+ session:doDiagnostics(session.searchRedundantParameters, 'redundant-parameter', function (max, passed)
+ return {
+ message = lang.script('DIAG_OVER_MAX_ARGS', max, passed),
+ tags = {DiagnosticTag.Unnecessary},
+ }
+ end)
+ -- x or 0 + 1
+ session:doDiagnostics(session.searchAmbiguity1, 'ambiguity-1', function (start, finish)
+ return {
+ message = lang.script('DIAG_AMBIGUITY_1', lines.buf:sub(start, finish)),
+ }
+ end)
+ -- 不允许定义首字母小写的全局变量(很可能是拼错或者漏删)
+ session:doDiagnostics(session.searchLowercaseGlobal, 'lowercase-global', function ()
+ return {
+ message = lang.script.DIAG_LOWERCASE_GLOBAL,
+ }
+ end)
+ -- 未定义的变量(重载了 `_ENV`)
+ session:doDiagnostics(session.searchUndefinedEnvChild, 'undefined-env-child', function (key)
+ if vm.envType == '_ENV' then
+ return {
+ message = lang.script('DIAG_UNDEF_ENV_CHILD', key),
+ }
+ else
+ return {
+ message = lang.script('DIAG_UNDEF_FENV_CHILD', key),
+ }
+ end
+ end)
+ -- 全局变量不可用(置空了 `_ENV`)
+ session:doDiagnostics(session.searchGlobalInNilEnv, 'global-in-nil-env', function (related)
+ if vm.envType == '_ENV' then
+ return {
+ message = lang.script.DIAG_GLOBAL_IN_NIL_ENV,
+ related = related,
+ }
+ else
+ return {
+ message = lang.script.DIAG_GLOBAL_IN_NIL_FENV,
+ related = related,
+ }
+ end
+ end)
+ -- 构建表时重复定义field
+ session:doDiagnostics(session.searchDuplicateIndex, 'duplicate-index', function (key, related, type)
+ if type == 'unused' then
+ return {
+ message = lang.script('DIAG_DUPLICATE_INDEX', key),
+ related = related,
+ level = DiagnosticSeverity.Hint,
+ tags = {DiagnosticTag.Unnecessary},
+ }
+ else
+ return {
+ message = lang.script('DIAG_DUPLICATE_INDEX', key),
+ related = related,
+ }
+ end
+ end)
+ -- 往表里面塞重复的method
+ --session:doDiagnostics(session.searchDuplicateMethod, 'duplicate-method', function (key, related)
+ -- return {
+ -- message = lang.script('DIAG_DUPLICATE_METHOD', key),
+ -- related = related,
+ -- }
+ --end)
+ -- 空代码块
+ session:doDiagnostics(session.searchEmptyBlock, 'empty-block', function ()
+ return {
+ message = lang.script.DIAG_EMPTY_BLOCK,
+ tags = {DiagnosticTag.Unnecessary},
+ }
+ end)
+ -- 多余的赋值
+ session:doDiagnostics(session.searchRedundantValue, 'redundant-value', function (max, passed)
+ return {
+ message = lang.script('DIAG_OVER_MAX_VALUES', max, passed),
+ tags = {DiagnosticTag.Unnecessary},
+ }
+ end)
+ -- Emmy相关的检查
+ session:doDiagnostics(session.searchEmmyLua, 'emmy-lua', function (message, related)
+ return {
+ message = message,
+ related = related,
+ }
+ end)
+ -- 检查给const变量赋值
+ session:doDiagnostics(session.searchSetConstLocal, 'set-const', function ()
+ return {
+ message = lang.script.DIAG_SET_CONST
+ }
+ end)
+ return session.datas
+end
diff --git a/script/src/core/document_symbol.lua b/script/src/core/document_symbol.lua
new file mode 100644
index 00000000..48e01332
--- /dev/null
+++ b/script/src/core/document_symbol.lua
@@ -0,0 +1,260 @@
+local hoverFunction = require 'core.hover.function'
+local getName = require 'core.name'
+local hover = require 'core.hover'
+
+local SymbolKind = {
+ File = 1,
+ Module = 2,
+ Namespace = 3,
+ Package = 4,
+ Class = 5,
+ Method = 6,
+ Property = 7,
+ Field = 8,
+ Constructor = 9,
+ Enum = 10,
+ Interface = 11,
+ Function = 12,
+ Variable = 13,
+ Constant = 14,
+ String = 15,
+ Number = 16,
+ Boolean = 17,
+ Array = 18,
+ Object = 19,
+ Key = 20,
+ Null = 21,
+ EnumMember = 22,
+ Struct = 23,
+ Event = 24,
+ Operator = 25,
+ TypeParameter = 26,
+}
+
+local function buildLocal(vm, source, used, callback)
+ local vars = source[1]
+ local exps = source[2]
+ if vars.type ~= 'list' then
+ vars = {vars}
+ end
+ if not exps or exps.type ~= 'list' then
+ exps = {exps}
+ end
+ for i, var in ipairs(vars) do
+ local exp = exps[i]
+ local data = {}
+ local loc = var:bindLocal()
+ data.name = loc:getName()
+ data.range = { var.start, var.finish }
+ data.selectionRange = { var.start, var.finish }
+ if exp then
+ local hvr = hover(var)
+ if exp.type == 'function' then
+ data.kind = SymbolKind.Function
+ else
+ data.kind = SymbolKind.Variable
+ end
+ data.detail = hvr.label:gsub('[\r\n]', '')
+ data.valueRange = { exp.start, exp.finish }
+ used[exp] = true
+ else
+ data.kind = SymbolKind.Variable
+ data.detail = ''
+ data.valueRange = { var.start, var.finish }
+ end
+ callback(data)
+ end
+end
+
+local function buildSet(vm, source, used, callback)
+ local vars = source[1]
+ local exps = source[2]
+ if vars.type ~= 'list' then
+ vars = {vars}
+ end
+ if not exps or exps.type ~= 'list' then
+ exps = {exps}
+ end
+ for i, var in ipairs(vars) do
+ if var:bindLocal() then
+ goto CONTINUE
+ end
+ local exp = exps[i]
+ local data = {}
+ data.name = getName(var)
+ data.range = { var.start, var.finish }
+ data.selectionRange = { var.start, var.finish }
+ if exp then
+ local hvr = hover(var)
+ if not hvr then
+ goto CONTINUE
+ end
+ if exp.type == 'function' then
+ data.kind = SymbolKind.Function
+ else
+ data.kind = SymbolKind.Property
+ end
+ data.detail = hvr.label:gsub('[\r\n]', '')
+ data.valueRange = { exp.start, exp.finish }
+ used[exp] = true
+ else
+ data.kind = SymbolKind.Property
+ data.detail = ''
+ data.valueRange = { var.start, var.finish }
+ end
+ callback(data)
+ :: CONTINUE ::
+ end
+end
+
+local function buildPair(vm, source, used, callback)
+ local var = source[1]
+ local exp = source[2]
+ local data = {}
+ data.name = getName(var)
+ data.range = { var.start, var.finish }
+ data.selectionRange = { var.start, var.finish }
+ if exp then
+ local hvr = hover(var)
+ if not hvr then
+ return
+ end
+ if exp.type == 'function' then
+ data.kind = SymbolKind.Function
+ else
+ data.kind = SymbolKind.Class
+ end
+ data.detail = hvr.label:gsub('[\r\n]', '')
+ data.valueRange = { exp.start, exp.finish }
+ used[exp] = true
+ else
+ data.kind = SymbolKind.Class
+ data.detail = ''
+ data.valueRange = { var.start, var.finish }
+ end
+ callback(data)
+end
+
+local function buildLocalFunction(vm, source, used, callback)
+ local value = source:bindFunction()
+ if not value then
+ return
+ end
+ local name = getName(source.name)
+ local hvr = hoverFunction(name, value:getFunction())
+ if not hvr then
+ return
+ end
+ local kind = SymbolKind.Function
+ callback {
+ name = name,
+ detail = hvr.label:gsub('[\r\n]', ''),
+ kind = kind,
+ range = { source.start, source.finish },
+ selectionRange = { source.name.start, source.name.finish },
+ valueRange = { source.start, source.finish },
+ }
+end
+
+
+local function buildFunction(vm, source, used, callback)
+ if used[source] then
+ return
+ end
+ local value = source:bindFunction()
+ if not value then
+ return
+ end
+ local name = getName(source.name)
+ local func = value:getFunction()
+ if not func then
+ return
+ end
+ local hvr = hoverFunction(name, func, func:getObject())
+ if not hvr then
+ return
+ end
+ local data = {}
+ data.name = name
+ data.detail = hvr.label:gsub('[\r\n]', '')
+ data.range = { source.start, source.finish }
+ data.valueRange = { source.start, source.finish }
+ if source.name then
+ data.selectionRange = { source.name.start, source.name.finish }
+ else
+ data.selectionRange = { source.start, source.start }
+ end
+ if func:getObject() then
+ data.kind = SymbolKind.Field
+ else
+ data.kind = SymbolKind.Function
+ end
+ callback(data)
+end
+
+local function buildSource(vm, source, used, callback)
+ if source.type == 'local' then
+ buildLocal(vm, source, used, callback)
+ return
+ end
+ if source.type == 'set' then
+ buildSet(vm, source, used, callback)
+ return
+ end
+ if source.type == 'pair' then
+ buildPair(vm, source, used, callback)
+ return
+ end
+ if source.type == 'localfunction' then
+ buildLocalFunction(vm, source, used, callback)
+ return
+ end
+ if source.type == 'function' then
+ buildFunction(vm, source, used, callback)
+ return
+ end
+end
+
+local function packChild(symbols, finish, kind)
+ local t
+ while true do
+ local symbol = symbols[#symbols]
+ if not symbol then
+ break
+ end
+ if symbol.valueRange[1] > finish then
+ break
+ end
+ symbols[#symbols] = nil
+ symbol.children = packChild(symbols, symbol.valueRange[2], symbol.kind)
+ if not t then
+ t = {}
+ end
+ t[#t+1] = symbol
+ end
+ return t
+end
+
+local function packSymbols(symbols)
+ -- 按照start位置反向排序
+ table.sort(symbols, function (a, b)
+ return a.range[1] > b.range[1]
+ end)
+ -- 处理嵌套
+ return packChild(symbols, math.maxinteger, SymbolKind.Function)
+end
+
+return function (vm)
+ local symbols = {}
+ local used = {}
+
+ vm:eachSource(function (source)
+ buildSource(vm, source, used, function (data)
+ symbols[#symbols+1] = data
+ end)
+ end)
+
+ local packedSymbols = packSymbols(symbols)
+
+ return packedSymbols
+end
diff --git a/script/src/core/find_lib.lua b/script/src/core/find_lib.lua
new file mode 100644
index 00000000..e76549a8
--- /dev/null
+++ b/script/src/core/find_lib.lua
@@ -0,0 +1,65 @@
+local hoverName = require 'core.hover.name'
+
+local function getParentName(lib, isObject)
+ for _, parent in ipairs(lib.parent) do
+ if isObject then
+ if parent.type == 'object' then
+ return parent.nick or parent.name
+ end
+ else
+ if parent.type ~= 'object' then
+ return parent.nick or parent.name
+ end
+ end
+ end
+ return ''
+end
+
+local function findLib(source)
+ local value = source:bindValue()
+ local lib = value:getLib()
+ if not lib then
+ return nil
+ end
+ if lib.parent then
+ if source:get 'object' then
+ -- *string:sub
+ local fullKey = ('*%s:%s'):format(getParentName(lib, true), lib.name)
+ return lib, fullKey
+ else
+ local parentValue = source:get 'parent'
+ if parentValue and parentValue:getType() == 'string' then
+ -- *string.sub
+ local fullKey = ('*%s.%s'):format(getParentName(lib, false), lib.name)
+ return lib, fullKey
+ else
+ -- string.sub
+ local fullKey = ('%s.%s'):format(getParentName(lib, false), lib.name)
+ return lib, fullKey
+ end
+ end
+ else
+ local name = hoverName(source)
+ local libName = lib.nick or lib.name
+ if name == libName or not libName then
+ return lib, name
+ elseif name == '' then
+ return lib, libName
+ else
+ return lib, ('%s<%s>'):format(name, libName)
+ end
+ end
+end
+
+return function (source)
+ if source:bindValue() then
+ local lib, fullKey = findLib(source)
+ return lib, fullKey
+ end
+ if source:get 'in index' then
+ source = source:get 'in index'
+ local lib, fullKey = findLib(source)
+ return lib, fullKey
+ end
+ return nil
+end
diff --git a/script/src/core/find_source.lua b/script/src/core/find_source.lua
new file mode 100644
index 00000000..a64a047e
--- /dev/null
+++ b/script/src/core/find_source.lua
@@ -0,0 +1,59 @@
+local function isContainPos(obj, pos)
+ if obj.start <= pos and obj.finish >= pos then
+ return true
+ end
+ return false
+end
+
+local function isValidSource(source)
+ return source.start ~= nil and source.start ~= 0
+end
+
+local function matchFilter(source, filter)
+ if not filter then
+ return true
+ end
+ return filter[source.type]
+end
+
+local function findAtPos(vm, pos, filter)
+ local res = {}
+ vm:eachSource(function (source)
+ if isValidSource(source)
+ and isContainPos(source, pos)
+ and matchFilter(source, filter)
+ then
+ res[#res+1] = source
+ end
+ end)
+ if #res == 0 then
+ return nil
+ end
+ table.sort(res, function (a, b)
+ if a == b then
+ return false
+ end
+ local rangeA = a.finish - a.start
+ local rangeB = b.finish - b.start
+ -- 特殊处理:func 'str' 的情况下,list与string的范围会完全相同,此时取string
+ if rangeA == rangeB then
+ if b.type == 'call' and #b == 1 and b[1] == a then
+ return true
+ elseif a.type == 'call' and #a == 1 and a[1] == b then
+ return false
+ else
+ return a.id < b.id
+ end
+ end
+ return rangeA < rangeB
+ end)
+ local source = res[1]
+ if not source then
+ return nil
+ end
+ return source
+end
+
+return function (vm, pos, filter)
+ return findAtPos(vm, pos, filter)
+end
diff --git a/script/src/core/folding_range.lua b/script/src/core/folding_range.lua
new file mode 100644
index 00000000..e94d1ffe
--- /dev/null
+++ b/script/src/core/folding_range.lua
@@ -0,0 +1,73 @@
+local foldingType = {
+ ['function'] = {'region', 'end', },
+ ['localfunction'] = {'region', 'end', },
+ ['do'] = {'region', 'end', },
+ ['if'] = {'region', 'end', },
+ ['loop'] = {'region', 'end', },
+ ['in'] = {'region', 'end', },
+ ['while'] = {'region', 'end', },
+ ['repeat'] = {'region', 'until',},
+ ['table'] = {'region', '}', },
+ ['string'] = {'regtion', ']', },
+}
+
+return function (vm, comments)
+ local result = {}
+ vm:eachSource(function (source)
+ local tp = source.type
+ local data = foldingType[tp]
+ if not data then
+ return
+ end
+ local start = source.start
+ local finish = source.finish
+ if tp == 'repeat' then
+ if #source > 0 then
+ finish = source[#source].finish
+ else
+ finish = start + #'repeat'
+ end
+ finish = vm.text:find('until', finish, true) or finish
+ result[#result+1] = {
+ start = start,
+ finish = finish,
+ kind = data[1],
+ }
+ elseif tp == 'if' then
+ for i = 1, #source do
+ local block = source[i]
+ local nblock = source[i+1]
+ result[#result+1] = {
+ start = block.start,
+ finish = nblock and nblock.start or finish,
+ kind = data[1],
+ }
+ end
+ elseif tp == 'string' then
+ result[#result+1] = {
+ start = start,
+ finish = finish,
+ kind = data[1],
+ }
+ elseif data[1] == 'region' then
+ result[#result+1] = {
+ start = start,
+ finish = finish,
+ kind = data[1],
+ }
+ end
+ end)
+ if comments then
+ for _, comment in ipairs(comments) do
+ result[#result+1] = {
+ start = comment.start,
+ finish = comment.finish,
+ kind = 'comment',
+ }
+ end
+ end
+ if #result == 0 then
+ return nil
+ end
+ return result
+end
diff --git a/script/src/core/global.lua b/script/src/core/global.lua
new file mode 100644
index 00000000..961ad304
--- /dev/null
+++ b/script/src/core/global.lua
@@ -0,0 +1,49 @@
+local mt = {}
+mt.__index = mt
+
+function mt:markSet(uri)
+ if not uri then
+ return
+ end
+ self.set[uri] = true
+end
+
+function mt:markGet(uri)
+ if not uri then
+ return
+ end
+ self.get[uri] = true
+end
+
+function mt:clearGlobal(uri)
+ self.set[uri] = nil
+ self.get[uri] = nil
+end
+
+function mt:getAllUris()
+ local uris = {}
+ for uri in pairs(self.set) do
+ uris[#uris+1] = uri
+ end
+ for uri in pairs(self.get) do
+ if not self.set[uri] then
+ uris[#uris+1] = uri
+ end
+ end
+ return uris
+end
+
+function mt:hasSetGlobal(uri)
+ return self.set[uri] ~= nil
+end
+
+function mt:remove()
+end
+
+return function (lsp)
+ return setmetatable({
+ get = {},
+ set = {},
+ lsp = lsp,
+ }, mt)
+end
diff --git a/script/src/core/highlight.lua b/script/src/core/highlight.lua
new file mode 100644
index 00000000..2073573d
--- /dev/null
+++ b/script/src/core/highlight.lua
@@ -0,0 +1,54 @@
+local findSource = require 'core.find_source'
+local parser = require 'parser'
+
+local DocumentHighlightKind = {
+ Text = 1,
+ Read = 2,
+ Write = 3,
+}
+
+local function parseResult(source)
+ local positions = {}
+ if source:bindLabel() then
+ source:bindLabel():eachInfo(function (info, src)
+ positions[#positions+1] = { src.start, src.finish, DocumentHighlightKind.Text }
+ end)
+ return positions
+ end
+ if source:bindLocal() then
+ local loc = source:bindLocal()
+ local mark = {}
+ loc:eachInfo(function (info, src)
+ if not mark[src] then
+ mark[src] = info
+ positions[#positions+1] = { src.start, src.finish, DocumentHighlightKind.Text }
+ end
+ end)
+ return positions
+ end
+ if source:bindValue() and source:get 'parent' then
+ local parent = source:get 'parent'
+ local mark = {}
+ parent:eachInfo(function (info, src)
+ if not mark[src] and source.uri == src.uri then
+ mark[src] = info
+ if info.type == 'get child' or info.type == 'set child' then
+ if info[1] == source[1] then
+ positions[#positions+1] = {src.start, src.finish, DocumentHighlightKind.Text}
+ end
+ end
+ end
+ end)
+ return positions
+ end
+ return nil
+end
+
+return function (vm, pos)
+ local source = findSource(vm, pos)
+ if not source then
+ return nil
+ end
+ local positions = parseResult(source)
+ return positions
+end
diff --git a/script/src/core/hover/emmy_function.lua b/script/src/core/hover/emmy_function.lua
new file mode 100644
index 00000000..7c87954e
--- /dev/null
+++ b/script/src/core/hover/emmy_function.lua
@@ -0,0 +1,143 @@
+---@param emmy EmmyFunctionType
+local function buildEmmyArgs(emmy, object, select)
+ local start
+ if object then
+ start = 2
+ else
+ start = 1
+ end
+ local strs = {}
+ local args = {}
+ local i = 0
+ emmy:eachParam(function (name, typeObj)
+ i = i + 1
+ if i < start then
+ return
+ end
+ if i > start then
+ strs[#strs+1] = ', '
+ end
+ if i == select then
+ strs[#strs+1] = '@ARG'
+ end
+ strs[#strs+1] = name .. ': ' .. typeObj:getType()
+ args[#args+1] = strs[#strs]
+ if i == select then
+ strs[#strs+1] = '@ARG'
+ end
+ end)
+ local text = table.concat(strs)
+ local argLabel = {}
+ for i = 1, 2 do
+ local pos = text:find('@ARG', 1, true)
+ if pos then
+ if i == 1 then
+ argLabel[i] = pos
+ else
+ argLabel[i] = pos - 1
+ end
+ text = text:sub(1, pos-1) .. text:sub(pos+4)
+ end
+ end
+ if #argLabel == 0 then
+ argLabel = nil
+ end
+ return text, argLabel, args
+end
+
+local function buildEmmyReturns(emmy)
+ local rtns = {}
+ local i = 0
+ emmy:eachReturn(function (rtn)
+ i = i + 1
+ if i > 1 then
+ rtns[#rtns+1] = ('\n% 3d. '):format(i)
+ end
+ rtns[#rtns+1] = rtn:getType()
+ end)
+ if #rtns == 0 then
+ return '\n -> ' .. 'any'
+ else
+ return '\n -> ' .. table.concat(rtns)
+ end
+end
+
+local function buildEnum(lib)
+ if not lib.enums then
+ return ''
+ end
+ local container = table.container()
+ for _, enum in ipairs(lib.enums) do
+ if not enum.name or (not enum.enum and not enum.code) then
+ goto NEXT_ENUM
+ end
+ if not container[enum.name] then
+ container[enum.name] = {}
+ if lib.args then
+ for _, arg in ipairs(lib.args) do
+ if arg.name == enum.name then
+ container[enum.name].type = arg.type
+ break
+ end
+ end
+ end
+ if lib.returns then
+ for _, rtn in ipairs(lib.returns) do
+ if rtn.name == enum.name then
+ container[enum.name].type = rtn.type
+ break
+ end
+ end
+ end
+ end
+ table.insert(container[enum.name], enum)
+ ::NEXT_ENUM::
+ end
+ local strs = {}
+ local raw = {}
+ for name, enums in pairs(container) do
+ local tp
+ if type(enums.type) == 'table' then
+ tp = table.concat(enums.type, '/')
+ else
+ tp = enums.type
+ end
+ raw[name] = {}
+ strs[#strs+1] = ('\n%s: %s'):format(name, tp or 'any')
+ for _, enum in ipairs(enums) do
+ if enum.default then
+ strs[#strs+1] = '\n -> '
+ else
+ strs[#strs+1] = '\n | '
+ end
+ if enum.code then
+ strs[#strs+1] = tostring(enum.code)
+ else
+ strs[#strs+1] = ('%q'):format(enum.enum)
+ end
+ raw[name][#raw[name]+1] = strs[#strs]
+ if enum.description then
+ strs[#strs+1] = ' -- ' .. enum.description
+ end
+ end
+ end
+ return table.concat(strs), raw
+end
+
+return function (name, emmy, object, select)
+ local argStr, argLabel, args = buildEmmyArgs(emmy, object, select)
+ local returns = buildEmmyReturns(emmy)
+ local enum, rawEnum = buildEnum(emmy)
+ local tip = emmy.description
+ return {
+ label = ('function %s(%s)%s'):format(name, argStr, returns),
+ name = name,
+ argStr = argStr,
+ returns = returns,
+ description = tip,
+ enum = enum,
+ rawEnum = rawEnum,
+ argLabel = argLabel,
+ args = args,
+ }
+end
diff --git a/script/src/core/hover/function.lua b/script/src/core/hover/function.lua
new file mode 100644
index 00000000..3865f602
--- /dev/null
+++ b/script/src/core/hover/function.lua
@@ -0,0 +1,243 @@
+local emmyFunction = require 'core.hover.emmy_function'
+
+local function buildValueArgs(func, object, select)
+ if not func then
+ return '', nil
+ end
+ local names = {}
+ local values = {}
+ local options = {}
+ if func.argValues then
+ for i, value in ipairs(func.argValues) do
+ values[i] = value:getType()
+ end
+ end
+ if func.args then
+ for i, arg in ipairs(func.args) do
+ names[#names+1] = arg:getName()
+ local param = func:findEmmyParamByName(arg:getName())
+ if param then
+ values[i] = param:getType()
+ options[i] = param:getOption()
+ end
+ end
+ end
+ local strs = {}
+ local start = 1
+ if object then
+ start = 2
+ end
+ local max
+ if func:getSource() then
+ max = #names
+ else
+ max = math.max(#names, #values)
+ end
+ local args = {}
+ for i = start, max do
+ local name = names[i]
+ local value = values[i] or 'any'
+ local option = options[i]
+ if option and option.optional then
+ if i > start then
+ strs[#strs+1] = ' ['
+ else
+ strs[#strs+1] = '['
+ end
+ end
+ if i > start then
+ strs[#strs+1] = ', '
+ end
+
+ if i == select then
+ strs[#strs+1] = '@ARG'
+ end
+ if name then
+ strs[#strs+1] = name .. ': ' .. value
+ else
+ strs[#strs+1] = value
+ end
+ args[#args+1] = strs[#strs]
+ if i == select then
+ strs[#strs+1] = '@ARG'
+ end
+
+ if option and option.optional == 'self' then
+ strs[#strs+1] = ']'
+ end
+ end
+ if func:hasDots() then
+ if max > 0 then
+ strs[#strs+1] = ', '
+ end
+ strs[#strs+1] = '...'
+ end
+
+ if options then
+ for _, option in pairs(options) do
+ if option.optional == 'after' then
+ strs[#strs+1] = ']'
+ end
+ end
+ end
+
+ local text = table.concat(strs)
+ local argLabel = {}
+ for i = 1, 2 do
+ local pos = text:find('@ARG', 1, true)
+ if pos then
+ if i == 1 then
+ argLabel[i] = pos
+ else
+ argLabel[i] = pos - 1
+ end
+ text = text:sub(1, pos-1) .. text:sub(pos+4)
+ end
+ end
+ if #argLabel == 0 then
+ argLabel = nil
+ end
+ return text, argLabel, args
+end
+
+local function buildValueReturns(func)
+ if not func then
+ return '\n -> any'
+ end
+ if not func:get 'hasReturn' then
+ return ''
+ end
+ local strs = {}
+ local emmys = {}
+ local n = 0
+ func:eachEmmyReturn(function (emmy)
+ n = n + 1
+ emmys[n] = emmy
+ end)
+ if func.returns then
+ for i, rtn in ipairs(func.returns) do
+ local emmy = emmys[i]
+ local option = emmy and emmy.option
+ if option and option.optional then
+ if i > 1 then
+ strs[#strs+1] = ' ['
+ else
+ strs[#strs+1] = '['
+ end
+ end
+ if i > 1 then
+ strs[#strs+1] = ('\n% 3d. '):format(i)
+ end
+ if emmy and emmy.name then
+ strs[#strs+1] = ('%s: '):format(emmy.name)
+ elseif option and option.name then
+ strs[#strs+1] = ('%s: '):format(option.name)
+ end
+ strs[#strs+1] = rtn:getType()
+ if option and option.optional == 'self' then
+ strs[#strs+1] = ']'
+ end
+ end
+ for i = 1, #func.returns do
+ local emmy = emmys[i]
+ if emmy and emmy.option and emmy.option.optional == 'after' then
+ strs[#strs+1] = ']'
+ end
+ end
+ end
+ if #strs == 0 then
+ strs[1] = 'any'
+ end
+ return '\n -> ' .. table.concat(strs)
+end
+
+---@param func emmyFunction
+local function buildEnum(func)
+ if not func then
+ return nil
+ end
+ local params = func:getEmmyParams()
+ if not params then
+ return nil
+ end
+ local strs = {}
+ local raw = {}
+ for _, param in ipairs(params) do
+ local first = true
+ local name = param:getName()
+ raw[name] = {}
+ param:eachEnum(function (enum)
+ if first then
+ first = false
+ strs[#strs+1] = ('\n%s: %s'):format(param:getName(), param:getType())
+ end
+ if enum.default then
+ strs[#strs+1] = ('\n |>%s'):format(enum[1])
+ else
+ strs[#strs+1] = ('\n | %s'):format(enum[1])
+ end
+ if enum.comment then
+ strs[#strs+1] = ' -- ' .. enum.comment
+ end
+ raw[name][#raw[name]+1] = enum[1]
+ end)
+ end
+ if #strs == 0 then
+ return nil
+ end
+ return table.concat(strs), raw
+end
+
+local function getComment(func)
+ if not func then
+ return nil
+ end
+ local comments = {}
+ local params = func:getEmmyParams()
+ if params then
+ for _, param in ipairs(params) do
+ local option = param:getOption()
+ if option and option.comment then
+ comments[#comments+1] = ('+ `%s`*(%s)*: %s'):format(param:getName(), param:getType(), option.comment)
+ end
+ end
+ end
+ comments[#comments+1] = func:getComment()
+ if #comments == 0 then
+ return nil
+ end
+ return table.concat(comments, '\n\n')
+end
+
+local function getOverLoads(name, func, object, select)
+ local overloads = func and func:getEmmyOverLoads()
+ if not overloads then
+ return nil
+ end
+ local list = {}
+ for _, ol in ipairs(overloads) do
+ local hover = emmyFunction(name, ol, object, select)
+ list[#list+1] = hover.label
+ end
+ return table.concat(list, '\n')
+end
+
+return function (name, func, object, select)
+ local argStr, argLabel, args = buildValueArgs(func, object, select)
+ local returns = buildValueReturns(func)
+ local enum, rawEnum = buildEnum(func)
+ local comment = getComment(func)
+ local overloads = getOverLoads(name, func, object, select)
+ return {
+ label = ('function %s(%s)%s'):format(name, argStr, returns),
+ name = name,
+ argStr = argStr,
+ returns = returns,
+ description = comment,
+ enum = enum,
+ rawEnum = rawEnum,
+ argLabel = argLabel,
+ overloads = overloads,
+ args = args,
+ }
+end
diff --git a/script/src/core/hover/hover.lua b/script/src/core/hover/hover.lua
new file mode 100644
index 00000000..2ee5cf46
--- /dev/null
+++ b/script/src/core/hover/hover.lua
@@ -0,0 +1,326 @@
+local findLib = require 'core.find_lib'
+local getFunctionHover = require 'core.hover.function'
+local getFunctionHoverAsLib = require 'core.hover.lib_function'
+local getFunctionHoverAsEmmy = require 'core.hover.emmy_function'
+local buildValueName = require 'core.hover.name'
+
+local OriginTypes = {
+ ['any'] = true,
+ ['nil'] = true,
+ ['integer'] = true,
+ ['number'] = true,
+ ['boolean'] = true,
+ ['string'] = true,
+ ['thread'] = true,
+ ['userdata'] = true,
+ ['table'] = true,
+ ['function'] = true,
+}
+
+local function longString(str)
+ for i = 0, 10 do
+ local finish = ']' .. ('='):rep(i) .. ']'
+ if not str:find(finish, 1, true) then
+ return ('[%s[\n%s%s'):format(('='):rep(i), str, finish)
+ end
+ end
+ return ('%q'):format(str)
+end
+
+local function formatString(str)
+ if #str > 1000 then
+ str = str:sub(1000)
+ end
+ if str:find('[\r\n]') then
+ str = str:gsub('[\000-\008\011-\012\014-\031\127]', '')
+ return longString(str)
+ else
+ str = str:gsub('[\000-\008\011-\012\014-\031\127]', function (char)
+ return ('\\%03d'):format(char:byte())
+ end)
+ local single = str:find("'", 1, true)
+ local double = str:find('"', 1, true)
+ if single and double then
+ return longString(str)
+ elseif double then
+ return ("'%s'"):format(str)
+ else
+ return ('"%s"'):format(str)
+ end
+ end
+end
+
+local function formatLiteral(v)
+ if math.type(v) == 'float' then
+ return ('%.10f'):format(v):gsub('[0]*$', ''):gsub('%.$', '.0')
+ elseif type(v) == 'string' then
+ return formatString(v)
+ else
+ return ('%q'):format(v)
+ end
+end
+
+local function findClass(value)
+ -- 检查是否有emmy
+ local emmy = value:getEmmy()
+ if emmy then
+ return emmy:getType()
+ end
+ -- 检查对象元表
+ local metaValue = value:getMetaTable()
+ if not metaValue then
+ return nil
+ end
+ -- 检查元表中的 __name
+ local metaName = metaValue:rawGet('__name')
+ if metaName and type(metaName:getLiteral()) == 'string' then
+ return metaName:getLiteral()
+ end
+ -- 检查元表的 __index
+ local indexValue = metaValue:rawGet('__index')
+ if not indexValue then
+ return nil
+ end
+ -- 查找index方法中的以下字段: type name class
+ -- 允许多重继承
+ return indexValue:eachChild(function (k, v)
+ -- 键值类型必须均为字符串
+ if type(k) ~= 'string' then
+ return
+ end
+ if type(v:getLiteral()) ~= 'string' then
+ return
+ end
+ local lKey = k:lower()
+ if lKey == 'type'
+ or lKey == 'name'
+ or lKey == 'class'
+ then
+ -- 必须只有过一次赋值
+ local hasSet = false
+ local ok = v:eachInfo(function (info)
+ if info.type == 'set' then
+ if hasSet then
+ return false
+ else
+ hasSet = true
+ end
+ end
+ end)
+ if ok == false then
+ return false
+ end
+ return v:getLiteral()
+ end
+ end)
+end
+
+local function formatKey(key)
+ local kType = type(key)
+ if kType == 'table' then
+ key = ('[*%s]'):format(key:getType())
+ elseif math.type(key) == 'integer' then
+ key = ('[%03d]'):format(key)
+ elseif kType == 'string' then
+ if key:find '^%d' or key:find '[^%w_]' then
+ key = ('[%s]'):format(formatString(key))
+ end
+ elseif key == '' then
+ key = '[*any]'
+ else
+ key = ('[%s]'):format(key)
+ end
+ return key
+end
+
+local function unpackTable(value)
+ local lines = {}
+ value:eachChild(function (key, child)
+ key = formatKey(key)
+
+ local vType = type(child:getLiteral())
+ if vType == 'boolean'
+ or vType == 'integer'
+ or vType == 'number'
+ or vType == 'string'
+ then
+ lines[#lines+1] = ('%s: %s = %s'):format(key, child:getType(), formatLiteral(child:getLiteral()))
+ else
+ lines[#lines+1] = ('%s: %s'):format(key, child:getType())
+ end
+ end)
+ local emmy = value:getEmmy()
+ if emmy then
+ if emmy.type == 'emmy.arrayType' then
+ lines[#lines+1] = ('[*integer]: %s'):format(emmy:getName())
+ elseif emmy.type == 'emmy.tableType' then
+ lines[#lines+1] = ('[*%s]: %s'):format(emmy:getKeyType():getType(), emmy:getValueType():getType())
+ end
+ end
+ if #lines == 0 then
+ return '{}'
+ end
+
+ -- 整理一下表
+ local cleaned = {}
+ local used = {}
+ for _, line in ipairs(lines) do
+ if used[line] then
+ goto CONTINUE
+ end
+ used[line] = true
+ if line == '[*any]: any' then
+ goto CONTINUE
+ end
+ cleaned[#cleaned+1] = ' ' .. line .. ','
+ :: CONTINUE ::
+ end
+
+ table.sort(cleaned)
+ table.insert(cleaned, 1, '{')
+ cleaned[#cleaned+1] = '}'
+ return table.concat(cleaned, '\r\n')
+end
+
+local function getValueHover(source, name, value, lib)
+ local valueType = value:getType()
+ local class = findClass(value)
+
+ if class then
+ valueType = class
+ lib = nil
+ end
+
+ if not OriginTypes[valueType] then
+ valueType = '*' .. valueType
+ end
+
+ local tips = {}
+ local literal
+ if lib then
+ literal = lib.code or (lib.value and formatLiteral(lib.value))
+ tips[#tips+1] = lib.description
+ else
+ literal = value:getLiteral() and formatLiteral(value:getLiteral())
+ end
+
+ tips[#tips+1] = value:getComment()
+
+ local tp
+ if source:bindLocal() then
+ tp = 'local'
+ local loc = source:bindLocal()
+ if loc.tags then
+ local mark = {}
+ local tagBufs = {}
+ for _, tag in ipairs(loc.tags) do
+ local tagName = tag[1]
+ if not mark[tagName] then
+ mark[tagName] = true
+ tagBufs[#tagBufs+1] = ('<%s>'):format(tagName)
+ end
+ end
+ name = name .. ' ' .. table.concat(tagBufs, ' ')
+ end
+ tips[#tips+1] = loc:getComment()
+ elseif source:get 'global' then
+ tp = 'global'
+ elseif source:get 'simple' then
+ local simple = source:get 'simple'
+ if simple[1]:get 'global' then
+ tp = 'global'
+ else
+ tp = 'field'
+ end
+ else
+ tp = 'field'
+ end
+
+ local text
+ if valueType == 'table' then
+ text = ('%s %s: %s'):format(tp, name, unpackTable(value))
+ else
+ if literal == nil then
+ if class and not OriginTypes[class] then
+ text = ('%s %s: %s %s'):format(tp, name, valueType, unpackTable(value))
+ else
+ text = ('%s %s: %s'):format(tp, name, valueType)
+ end
+ else
+ text = ('%s %s: %s = %s'):format(tp, name, valueType, literal)
+ end
+ end
+
+ local tip
+ if #tips > 0 then
+ tip = table.concat(tips, '\n\n-------------\n\n')
+ end
+ return {
+ label = text,
+ description = tip,
+ }
+end
+
+local function hoverAsValue(source, lsp, select)
+ local lib, fullkey = findLib(source)
+ ---@type value
+ local value = source:findValue()
+ local name = fullkey or buildValueName(source)
+
+ local hover
+ if value:getType() == 'function' then
+ local object = source:get 'object'
+ if lib then
+ hover = getFunctionHoverAsLib(name, lib, object, select)
+ else
+ local emmy = value:getEmmy()
+ if emmy and emmy.type == 'emmy.functionType' then
+ hover = getFunctionHoverAsEmmy(name, emmy, object, select)
+ else
+ local func = value:getFunction()
+ hover = getFunctionHover(name, func, object, select)
+ end
+ end
+ else
+ hover = getValueHover(source, name, value, lib)
+ end
+
+ if not hover then
+ return nil
+ end
+ hover.name = name
+ return hover
+end
+
+local function hoverAsTargetUri(source, lsp)
+ local uri = source:get 'target uri'
+ if not lsp or not lsp.workspace then
+ return nil
+ end
+ local path = lsp.workspace:relativePathByUri(uri)
+ if not path then
+ return nil
+ end
+ return {
+ description = ('[%s](%s)'):format(path:string(), uri),
+ }
+end
+
+return function (source, lsp, select)
+ if not source then
+ return nil
+ end
+ if source:get 'target uri' then
+ return hoverAsTargetUri(source, lsp)
+ end
+ if source.type == 'name' and source:bindValue() then
+ return hoverAsValue(source, lsp, select)
+ end
+ if source.type == 'simple' then
+ source = source[#source]
+ if source.type == 'name' and source:bindValue() then
+ return hoverAsValue(source, lsp, select)
+ end
+ end
+ return nil
+end
diff --git a/script/src/core/hover/init.lua b/script/src/core/hover/init.lua
new file mode 100644
index 00000000..be5b5632
--- /dev/null
+++ b/script/src/core/hover/init.lua
@@ -0,0 +1 @@
+return require 'core.hover.hover'
diff --git a/script/src/core/hover/lib_function.lua b/script/src/core/hover/lib_function.lua
new file mode 100644
index 00000000..06087312
--- /dev/null
+++ b/script/src/core/hover/lib_function.lua
@@ -0,0 +1,222 @@
+local lang = require 'language'
+local config = require 'config'
+local function buildLibArgs(lib, object, select)
+ if not lib.args then
+ return ''
+ end
+ local start
+ if object then
+ start = 2
+ else
+ start = 1
+ end
+ local strs = {}
+ local args = {}
+ for i = start, #lib.args do
+ local arg = lib.args[i]
+ if arg.optional then
+ if i > start then
+ strs[#strs+1] = ' ['
+ else
+ strs[#strs+1] = '['
+ end
+ end
+ if i > start then
+ strs[#strs+1] = ', '
+ end
+
+ local argStr = {}
+ if i == select then
+ argStr[#argStr+1] = '@ARG'
+ end
+ local name = ''
+ if arg.name then
+ name = ('%s: '):format(arg.name)
+ end
+ if type(arg.type) == 'table' then
+ name = name .. table.concat(arg.type, '/')
+ else
+ name = name .. (arg.type or 'any')
+ end
+ argStr[#argStr+1] = name
+ args[#args+1] = name
+ if arg.default then
+ argStr[#argStr+1] = ('(%q)'):format(arg.default)
+ end
+ if i == select then
+ argStr[#argStr+1] = '@ARG'
+ end
+
+ for _, str in ipairs(argStr) do
+ strs[#strs+1] = str
+ end
+ if arg.optional == 'self' then
+ strs[#strs+1] = ']'
+ end
+ end
+ for _, arg in ipairs(lib.args) do
+ if arg.optional == 'after' then
+ strs[#strs+1] = ']'
+ end
+ end
+ local text = table.concat(strs)
+ local argLabel = {}
+ for i = 1, 2 do
+ local pos = text:find('@ARG', 1, true)
+ if pos then
+ if i == 1 then
+ argLabel[i] = pos
+ else
+ argLabel[i] = pos - 1
+ end
+ text = text:sub(1, pos-1) .. text:sub(pos+4)
+ end
+ end
+ if #argLabel == 0 then
+ argLabel = nil
+ end
+ return text, argLabel, args
+end
+
+local function buildLibReturns(lib)
+ if not lib.returns then
+ return ''
+ end
+ local strs = {}
+ for i, rtn in ipairs(lib.returns) do
+ if rtn.optional then
+ if i > 1 then
+ strs[#strs+1] = ' ['
+ else
+ strs[#strs+1] = '['
+ end
+ end
+ if i > 1 then
+ strs[#strs+1] = ('\n% 3d. '):format(i)
+ end
+ if rtn.name then
+ strs[#strs+1] = ('%s: '):format(rtn.name)
+ end
+ if type(rtn.type) == 'table' then
+ strs[#strs+1] = table.concat(rtn.type, '/')
+ else
+ strs[#strs+1] = rtn.type or 'any'
+ end
+ if rtn.default then
+ strs[#strs+1] = ('(%q)'):format(rtn.default)
+ end
+ if rtn.optional == 'self' then
+ strs[#strs+1] = ']'
+ end
+ end
+ for _, rtn in ipairs(lib.returns) do
+ if rtn.optional == 'after' then
+ strs[#strs+1] = ']'
+ end
+ end
+ return '\n -> ' .. table.concat(strs)
+end
+
+local function buildEnum(lib)
+ if not lib.enums then
+ return ''
+ end
+ local container = table.container()
+ for _, enum in ipairs(lib.enums) do
+ if not enum.name or (not enum.enum and not enum.code) then
+ goto NEXT_ENUM
+ end
+ if not container[enum.name] then
+ container[enum.name] = {}
+ if lib.args then
+ for _, arg in ipairs(lib.args) do
+ if arg.name == enum.name then
+ container[enum.name].type = arg.type
+ break
+ end
+ end
+ end
+ if lib.returns then
+ for _, rtn in ipairs(lib.returns) do
+ if rtn.name == enum.name then
+ container[enum.name].type = rtn.type
+ break
+ end
+ end
+ end
+ end
+ table.insert(container[enum.name], enum)
+ ::NEXT_ENUM::
+ end
+ local strs = {}
+ local raw = {}
+ for name, enums in pairs(container) do
+ local tp
+ if type(enums.type) == 'table' then
+ tp = table.concat(enums.type, '/')
+ else
+ tp = enums.type
+ end
+ strs[#strs+1] = ('\n%s: %s'):format(name, tp or 'any')
+ raw[name] = {}
+ for _, enum in ipairs(enums) do
+ if enum.default then
+ strs[#strs+1] = '\n -> '
+ else
+ strs[#strs+1] = '\n | '
+ end
+ if enum.code then
+ strs[#strs+1] = tostring(enum.code)
+ else
+ strs[#strs+1] = tostring(enum.enum)
+ end
+ raw[name][#raw[name]+1] = strs[#strs]
+ if enum.description then
+ strs[#strs+1] = ' -- ' .. enum.description
+ end
+ end
+ end
+ return table.concat(strs), raw
+end
+
+local function buildDoc(lib)
+ local doc = lib.doc
+ if not doc then
+ return
+ end
+ if lib.web then
+ return lang.script(lib.web, doc)
+ end
+ local version = config.config.runtime.version
+ if version == 'Lua 5.1' then
+ return lang.script('HOVER_DOCUMENT_LUA51', doc)
+ elseif version == 'Lua 5.2' then
+ return lang.script('HOVER_DOCUMENT_LUA52', doc)
+ elseif version == 'Lua 5.3' then
+ return lang.script('HOVER_DOCUMENT_LUA53', doc)
+ elseif version == 'Lua 5.4' then
+ return lang.script('HOVER_DOCUMENT_LUA54', doc)
+ elseif version == 'LuaJIT' then
+ return lang.script('HOVER_DOCUMENT_LUAJIT', doc)
+ end
+end
+
+return function (name, lib, object, select)
+ local argStr, argLabel, args = buildLibArgs(lib, object, select)
+ local returns = buildLibReturns(lib)
+ local enum, rawEnum = buildEnum(lib)
+ local tip = lib.description
+ local doc = buildDoc(lib)
+ return {
+ label = ('function %s(%s)%s'):format(name, argStr, returns),
+ name = name,
+ argStr = argStr,
+ returns = returns,
+ description = tip,
+ enum = enum,
+ rawEnum = rawEnum,
+ argLabel = argLabel,
+ doc = doc,
+ args = args,
+ }
+end
diff --git a/script/src/core/hover/name.lua b/script/src/core/hover/name.lua
new file mode 100644
index 00000000..763083b9
--- /dev/null
+++ b/script/src/core/hover/name.lua
@@ -0,0 +1,38 @@
+local getName = require 'core.name'
+
+return function (source)
+ if not source then
+ return ''
+ end
+ local value = source:bindValue()
+ if not value then
+ return ''
+ end
+ local func = value:getFunction()
+ local declarat
+ if func and func:getSource() then
+ declarat = func:getSource().name
+ else
+ declarat = source
+ end
+ if not declarat then
+ -- 如果声明者没有给名字,则找一个合适的名字
+ local names = {}
+ value:eachInfo(function (info, src)
+ if info.type == 'local' or info.type == 'set' or info.type == 'return' then
+ if src.type == 'name' and src.uri == value.uri then
+ names[#names+1] = src
+ end
+ end
+ end)
+ if #names == 0 then
+ return ''
+ end
+ table.sort(names, function (a, b)
+ return a.id < b.id
+ end)
+ return names[1][1] or ''
+ end
+
+ return getName(declarat, source)
+end
diff --git a/script/src/core/implementation.lua b/script/src/core/implementation.lua
new file mode 100644
index 00000000..f51a97ca
--- /dev/null
+++ b/script/src/core/implementation.lua
@@ -0,0 +1,204 @@
+local function parseValueSimily(vm, source, lsp)
+ local key = source[1]
+ if not key then
+ return nil
+ end
+ local positions = {}
+ vm:eachSource(function (other)
+ if other == source then
+ return
+ end
+ if other[1] == key
+ and not other:bindLocal()
+ and other:bindValue()
+ and other:action() == 'set'
+ and source:bindValue() ~= other:bindValue()
+ then
+ positions[#positions+1] = {
+ other.start,
+ other.finish,
+ }
+ end
+ end)
+ if #positions == 0 then
+ return nil
+ end
+ return positions
+end
+
+local function parseValueCrossFile(vm, source, lsp)
+ local value = source:bindValue()
+ local positions = {}
+ value:eachInfo(function (info, src)
+ if info.type == 'local' and src.uri == value.uri then
+ positions[#positions+1] = {
+ src.start,
+ src.finish,
+ value.uri,
+ }
+ return true
+ end
+ end)
+ if #positions > 0 then
+ return positions
+ end
+
+ value:eachInfo(function (info, src)
+ if info.type == 'set' and src.uri == value.uri then
+ positions[#positions+1] = {
+ src.start,
+ src.finish,
+ value.uri,
+ }
+ end
+ end)
+ if #positions > 0 then
+ return positions
+ end
+
+ value:eachInfo(function (info, src)
+ if info.type == 'return' and src.uri == value.uri then
+ positions[#positions+1] = {
+ src.start,
+ src.finish,
+ value.uri,
+ }
+ end
+ end)
+ if #positions > 0 then
+ return positions
+ end
+
+ local destVM = lsp:getVM(value.uri)
+ if not destVM then
+ positions[#positions+1] = {
+ 0, 0, value.uri,
+ }
+ return positions
+ end
+
+ local result = parseValueSimily(destVM, source, lsp)
+ if result then
+ for _, position in ipairs(result) do
+ positions[#positions+1] = position
+ position[3] = value.uri
+ end
+ end
+ if #positions > 0 then
+ return positions
+ end
+
+ return positions
+end
+
+local function parseValue(vm, source, lsp)
+ local positions = {}
+ local mark = {}
+
+ local function callback(src)
+ if source == src then
+ return
+ end
+ if mark[src] then
+ return
+ end
+ mark[src] = true
+ if src.start == 0 then
+ return
+ end
+ local uri = src.uri
+ if uri == '' then
+ uri = nil
+ end
+ positions[#positions+1] = {
+ src.start,
+ src.finish,
+ uri,
+ }
+ end
+
+ if source:bindValue() then
+ source:bindValue():eachInfo(function (info, src)
+ if info.type == 'set' or info.type == 'local' or info.type == 'return' then
+ callback(src)
+ return true
+ end
+ end)
+ end
+ local parent = source:get 'parent'
+ if parent then
+ parent:eachInfo(function (info, src)
+ if info[1] == source[1] then
+ if info.type == 'set child' then
+ callback(src)
+ end
+ end
+ end)
+ end
+ if #positions == 0 then
+ return nil
+ end
+ return positions
+end
+
+local function parseLabel(vm, label, lsp)
+ local positions = {}
+ label:eachInfo(function (info, src)
+ if info.type == 'set' then
+ positions[#positions+1] = {
+ src.start,
+ src.finish,
+ }
+ end
+ end)
+ if #positions == 0 then
+ return nil
+ end
+ return positions
+end
+
+local function jumpUri(vm, source, lsp)
+ local uri = source:get 'target uri'
+ local positions = {}
+ positions[#positions+1] = {
+ 0, 0, uri,
+ }
+ return positions
+end
+
+local function parseClass(vm, source)
+ local className = source:get 'emmy class'
+ local positions = {}
+ vm.emmyMgr:eachClass(className, function (class)
+ local src = class:getSource()
+ positions[#positions+1] = {
+ src.start,
+ src.finish,
+ src.uri,
+ }
+ end)
+ return positions
+end
+
+return function (vm, source, lsp)
+ if not source then
+ return nil
+ end
+ if source:bindValue() then
+ return parseValue(vm, source, lsp)
+ or parseValueSimily(vm, source, lsp)
+ end
+ if source:bindLabel() then
+ return parseLabel(vm, source:bindLabel(), lsp)
+ end
+ if source:get 'target uri' then
+ return jumpUri(vm, source, lsp)
+ end
+ if source:get 'in index' then
+ return parseValue(vm, source, lsp)
+ or parseValueSimily(vm, source, lsp)
+ end
+ if source:get 'emmy class' then
+ return parseClass(vm, source)
+ end
+end
diff --git a/script/src/core/init.lua b/script/src/core/init.lua
new file mode 100644
index 00000000..213dbaca
--- /dev/null
+++ b/script/src/core/init.lua
@@ -0,0 +1,19 @@
+local api = {
+ definition = require 'core.definition',
+ implementation = require 'core.implementation',
+ references = require 'core.references',
+ rename = require 'core.rename',
+ hover = require 'core.hover',
+ diagnostics = require 'core.diagnostics',
+ findSource = require 'core.find_source',
+ findLib = require 'core.find_lib',
+ completion = require 'core.completion',
+ signature = require 'core.signature',
+ documentSymbol = require 'core.document_symbol',
+ global = require 'core.global',
+ highlight = require 'core.highlight',
+ codeAction = require 'core.code_action',
+ foldingRange = require 'core.folding_range',
+}
+
+return api
diff --git a/script/src/core/library.lua b/script/src/core/library.lua
new file mode 100644
index 00000000..d5edad66
--- /dev/null
+++ b/script/src/core/library.lua
@@ -0,0 +1,296 @@
+local lni = require 'lni'
+local fs = require 'bee.filesystem'
+local config = require 'config'
+
+local Library = {}
+
+local function mergeEnum(lib, locale)
+ if not lib or not locale then
+ return
+ end
+ local pack = {}
+ for _, enum in ipairs(lib) do
+ if enum.enum then
+ pack[enum.enum] = enum
+ end
+ if enum.code then
+ pack[enum.code] = enum
+ end
+ end
+ for _, enum in ipairs(locale) do
+ if pack[enum.enum] then
+ if enum.description then
+ pack[enum.enum].description = enum.description
+ end
+ end
+ if pack[enum.code] then
+ if enum.description then
+ pack[enum.code].description = enum.description
+ end
+ end
+ end
+end
+
+local function mergeField(lib, locale)
+ if not lib or not locale then
+ return
+ end
+ local pack = {}
+ for _, field in ipairs(lib) do
+ if field.field then
+ pack[field.field] = field
+ end
+ end
+ for _, field in ipairs(locale) do
+ if pack[field.field] then
+ if field.description then
+ pack[field.field].description = field.description
+ end
+ end
+ end
+end
+
+local function mergeLocale(libs, locale)
+ if not libs or not locale then
+ return
+ end
+ for name in pairs(locale) do
+ if libs[name] then
+ if locale[name].description then
+ libs[name].description = locale[name].description
+ end
+ mergeEnum(libs[name].enums, locale[name].enums)
+ mergeField(libs[name].fields, locale[name].fields)
+ end
+ end
+end
+
+local function isMatchVersion(version)
+ if not version then
+ return true
+ end
+ local runtimeVersion = config.config.runtime.version
+ if type(version) == 'table' then
+ for i = 1, #version do
+ if version[i] == runtimeVersion then
+ return true
+ end
+ end
+ else
+ if version == runtimeVersion then
+ return true
+ end
+ end
+ return false
+end
+
+local function insertGlobal(tbl, key, value)
+ if not isMatchVersion(value.version) then
+ return false
+ end
+ if not value.doc then
+ value.doc = key
+ end
+ tbl[key] = value
+ return true
+end
+
+local function insertOther(tbl, key, value)
+ if not value.version then
+ return
+ end
+ if not tbl[key] then
+ tbl[key] = {}
+ end
+ if type(value.version) == 'string' then
+ tbl[key][#tbl[key]+1] = value.version
+ elseif type(value.version) == 'table' then
+ for _, version in ipairs(value.version) do
+ if type(version) == 'string' then
+ tbl[key][#tbl[key]+1] = version
+ end
+ end
+ end
+ table.sort(tbl[key])
+end
+
+local function insertCustom(tbl, key, value, libName)
+ if not tbl[key] then
+ tbl[key] = {}
+ end
+ tbl[key][#tbl[key]+1] = libName
+ table.sort(tbl[key])
+end
+
+local function isEnableGlobal(libName)
+ if config.config.runtime.library[libName] then
+ return true
+ end
+ if libName:sub(1, 1) == '@' then
+ return true
+ end
+ return false
+end
+
+local function mergeSource(alllibs, name, lib, libName)
+ if not lib.source then
+ if isEnableGlobal(libName) then
+ local suc = insertGlobal(alllibs.global, name, lib)
+ if not suc then
+ insertOther(alllibs.other, name, lib)
+ end
+ else
+ insertCustom(alllibs.custom, name, lib, libName)
+ end
+ return
+ end
+ for _, source in ipairs(lib.source) do
+ local sourceName = source.name or name
+ if source.type == 'global' then
+ if isEnableGlobal(libName) then
+ local suc = insertGlobal(alllibs.global, sourceName, lib)
+ if not suc then
+ insertOther(alllibs.other, sourceName, lib)
+ end
+ else
+ insertCustom(alllibs.custom, sourceName, lib, libName)
+ end
+ elseif source.type == 'library' then
+ insertGlobal(alllibs.library, sourceName, lib)
+ elseif source.type == 'object' then
+ insertGlobal(alllibs.object, sourceName, lib)
+ end
+ end
+end
+
+local function copy(t)
+ local new = {}
+ for k, v in pairs(t) do
+ new[k] = v
+ end
+ return new
+end
+
+local function insertChild(tbl, name, key, value)
+ if not name or not key then
+ return
+ end
+ if not isMatchVersion(value.version) then
+ return
+ end
+ if not value.doc then
+ value.doc = ('%s.%s'):format(name, key)
+ end
+ if not tbl[name] then
+ tbl[name] = {
+ type = name,
+ name = name,
+ child = {},
+ }
+ end
+ tbl[name].child[key] = copy(value)
+end
+
+local function mergeParent(alllibs, name, lib, libName)
+ for _, parent in ipairs(lib.parent) do
+ if parent.type == 'global' then
+ if isEnableGlobal(libName) then
+ insertChild(alllibs.global, parent.name, name, lib)
+ end
+ elseif parent.type == 'library' then
+ insertChild(alllibs.library, parent.name, name, lib)
+ elseif parent.type == 'object' then
+ insertChild(alllibs.object, parent.name, name, lib)
+ end
+ end
+end
+
+local function mergeLibs(alllibs, libs, libName)
+ if not libs then
+ return
+ end
+ for _, lib in pairs(libs) do
+ if lib.parent then
+ mergeParent(alllibs, lib.name, lib, libName)
+ else
+ mergeSource(alllibs, lib.name, lib, libName)
+ end
+ end
+end
+
+local function loadLocale(language, relative)
+ local localePath = ROOT / 'locale' / language / relative
+ local localeBuf = io.load(localePath)
+ if localeBuf then
+ local locale = table.container()
+ xpcall(lni, log.error, localeBuf, localePath:string(), {locale})
+ return locale
+ end
+ return nil
+end
+
+local function fix(libs)
+ for name, lib in pairs(libs) do
+ lib.name = lib.name or name
+ lib.child = {}
+ end
+end
+
+local function scan(path)
+ local result = {path}
+ local i = 0
+ return function ()
+ i = i + 1
+ local current = result[i]
+ if not current then
+ return nil
+ end
+ if fs.is_directory(current) then
+ for path in current:list_directory() do
+ result[#result+1] = path
+ end
+ end
+ return current
+ end
+end
+
+local function init()
+ local lang = require 'language'
+ local id = lang.id
+ Library.global = table.container()
+ Library.library = table.container()
+ Library.object = table.container()
+ Library.other = table.container()
+ Library.custom = table.container()
+
+ for libPath in (ROOT / 'libs'):list_directory() do
+ local enableGlobal
+ local libName = libPath:filename():string()
+ for path in scan(libPath) do
+ local libs
+ local buf = io.load(path)
+ if buf then
+ libs = table.container()
+ xpcall(lni, log.error, buf, path:string(), {libs})
+ fix(libs)
+ end
+ local relative = fs.relative(path, ROOT)
+
+ local locale = loadLocale('en-US', relative)
+ mergeLocale(libs, locale)
+ if id ~= 'en-US' then
+ locale = loadLocale(id, relative)
+ mergeLocale(libs, locale)
+ end
+ mergeLibs(Library, libs, libName)
+ end
+ end
+end
+
+function Library.reload()
+ init()
+end
+
+init()
+
+return Library
diff --git a/script/src/core/matchKey.lua b/script/src/core/matchKey.lua
new file mode 100644
index 00000000..b46250cb
--- /dev/null
+++ b/script/src/core/matchKey.lua
@@ -0,0 +1,30 @@
+return function (me, other)
+ if me == other then
+ return true
+ end
+ if me == '' then
+ return true
+ end
+ if #me > #other then
+ return false
+ end
+ local lMe = me:lower()
+ local lOther = other:lower()
+ if lMe == lOther:sub(1, #lMe) then
+ return true
+ end
+ local chars = {}
+ for i = 1, #lOther do
+ local c = lOther:sub(i, i)
+ chars[c] = (chars[c] or 0) + 1
+ end
+ for i = 1, #lMe do
+ local c = lMe:sub(i, i)
+ if chars[c] and chars[c] > 0 then
+ chars[c] = chars[c] - 1
+ else
+ return false
+ end
+ end
+ return true
+end
diff --git a/script/src/core/name.lua b/script/src/core/name.lua
new file mode 100644
index 00000000..54947974
--- /dev/null
+++ b/script/src/core/name.lua
@@ -0,0 +1,70 @@
+return function (source, caller)
+ if not source then
+ return ''
+ end
+ local key
+ if source:get 'simple' then
+ local simple = source:get 'simple'
+ local chars = {}
+ for i, obj in ipairs(simple) do
+ if obj.type == 'name' then
+ chars[i] = obj[1]
+ elseif obj.type == 'index' then
+ chars[i] = '[?]'
+ elseif obj.type == 'call' then
+ chars[i] = '(?)'
+ elseif obj.type == ':' then
+ chars[i] = ':'
+ elseif obj.type == '.' then
+ chars[i] = '.'
+ else
+ chars[i] = '*' .. obj.type
+ end
+ if obj == source then
+ break
+ end
+ end
+ key = table.concat(chars)
+ elseif source.type == 'name' then
+ key = source[1]
+ elseif source.type == 'string' then
+ key = ('%q'):format(source[1])
+ elseif source.type == 'number' or source.type == 'boolean' then
+ key = tostring(source[1])
+ elseif source.type == 'simple' then
+ local chars = {}
+ for i, obj in ipairs(source) do
+ if obj.type == 'name' then
+ chars[i] = obj[1]
+ elseif obj.type == 'index' then
+ chars[i] = '[?]'
+ elseif obj.type == 'call' then
+ chars[i] = '(?)'
+ elseif obj.type == ':' then
+ chars[i] = ':'
+ elseif obj.type == '.' then
+ chars[i] = '.'
+ else
+ chars[i] = '*' .. obj.type
+ end
+ end
+ -- 这里有个特殊处理
+ -- function mt:func() 以 mt.func 的形式调用时
+ -- hover 显示为 mt.func(self)
+ if caller then
+ if chars[#chars-1] == ':' then
+ if not caller:get 'object' then
+ chars[#chars-1] = '.'
+ end
+ elseif chars[#chars-1] == '.' then
+ if caller:get 'object' then
+ chars[#chars-1] = ':'
+ end
+ end
+ end
+ key = table.concat(chars)
+ else
+ key = ''
+ end
+ return key
+end
diff --git a/script/src/core/references.lua b/script/src/core/references.lua
new file mode 100644
index 00000000..33b38fec
--- /dev/null
+++ b/script/src/core/references.lua
@@ -0,0 +1,91 @@
+local findSource = require 'core.find_source'
+
+local function parseResult(vm, source, declarat, callback)
+ local isGlobal
+ if source:bindLabel() then
+ source:bindLabel():eachInfo(function (info, src)
+ if (declarat and info.type == 'set') or info.type == 'get' then
+ callback(src)
+ end
+ end)
+ end
+ if source:bindLocal() then
+ local loc = source:bindLocal()
+ callback(loc:getSource())
+ loc:eachInfo(function (info, src)
+ if (declarat and info.type == 'set') or info.type == 'get' then
+ callback(src)
+ end
+ end)
+ loc:getValue():eachInfo(function (info, src)
+ if (declarat and (info.type == 'set' or info.type == 'local' or info.type == 'return')) or info.type == 'get' then
+ callback(src)
+ end
+ end)
+ end
+ if source:bindFunction() then
+ if declarat then
+ callback(source:bindFunction():getSource())
+ end
+ source:bindFunction():eachInfo(function (info, src)
+ if (declarat and (info.type == 'set' or info.type == 'local')) or info.type == 'get' then
+ callback(src)
+ end
+ end)
+ end
+ if source:bindValue() then
+ source:bindValue():eachInfo(function (info, src)
+ if (declarat and (info.type == 'set' or info.type == 'local')) or info.type == 'get' then
+ callback(src)
+ end
+ end)
+ if source:bindValue():isGlobal() then
+ isGlobal = true
+ end
+ end
+ local parent = source:get 'parent'
+ if parent then
+ parent:eachInfo(function (info, src)
+ if info[1] == source[1] then
+ if (declarat and info.type == 'set child') or info.type == 'get child' then
+ callback(src)
+ end
+ end
+ end)
+ end
+ --local emmy = source:getEmmy()
+ --if emmy then
+ -- if emmy.type == 'emmy.class' or emmy.type == 'emmy.type' --then
+--
+ -- end
+ --end
+ return isGlobal
+end
+
+return function (vm, pos, declarat)
+ local source = findSource(vm, pos)
+ if not source then
+ return nil
+ end
+ local positions = {}
+ local mark = {}
+ local isGlobal = parseResult(vm, source, declarat, function (src)
+ if mark[src] then
+ return
+ end
+ mark[src] = true
+ if src.start == 0 then
+ return
+ end
+ local uri = src.uri
+ if uri == '' then
+ uri = nil
+ end
+ positions[#positions+1] = {
+ src.start,
+ src.finish,
+ uri,
+ }
+ end)
+ return positions, isGlobal
+end
diff --git a/script/src/core/rename.lua b/script/src/core/rename.lua
new file mode 100644
index 00000000..3a2e8532
--- /dev/null
+++ b/script/src/core/rename.lua
@@ -0,0 +1,72 @@
+local findSource = require 'core.find_source'
+local parser = require 'parser'
+
+local function parseResult(source, newName)
+ local positions = {}
+ if source:bindLabel() then
+ if not parser:grammar(newName, 'Name') then
+ return nil
+ end
+ source:bindLabel():eachInfo(function (info, src)
+ positions[#positions+1] = { src.start, src.finish, src:getUri() }
+ end)
+ return positions
+ end
+ if source:bindLocal() then
+ local loc = source:bindLocal()
+ if loc:get 'hide' then
+ return nil
+ end
+ if source:get 'in index' then
+ if not parser:grammar(newName, 'Exp') then
+ return positions
+ end
+ else
+ if not parser:grammar(newName, 'Name') then
+ return positions
+ end
+ end
+ local mark = {}
+ loc:eachInfo(function (info, src)
+ if not mark[src] then
+ mark[src] = info
+ positions[#positions+1] = { src.start, src.finish, src:getUri() }
+ end
+ end)
+ return positions
+ end
+ if source:bindValue() and source:get 'parent' then
+ if source:get 'in index' then
+ if not parser:grammar(newName, 'Exp') then
+ return positions
+ end
+ else
+ if not parser:grammar(newName, 'Name') then
+ return positions
+ end
+ end
+ local parent = source:get 'parent'
+ local mark = {}
+ parent:eachInfo(function (info, src)
+ if not mark[src] then
+ mark[src] = info
+ if info.type == 'get child' or info.type == 'set child' then
+ if info[1] == source[1] then
+ positions[#positions+1] = {src.start, src.finish, src:getUri()}
+ end
+ end
+ end
+ end)
+ return positions
+ end
+ return nil
+end
+
+return function (vm, pos, newName)
+ local source = findSource(vm, pos)
+ if not source then
+ return nil
+ end
+ local positions = parseResult(source, newName)
+ return positions
+end
diff --git a/script/src/core/signature.lua b/script/src/core/signature.lua
new file mode 100644
index 00000000..bbe35ffa
--- /dev/null
+++ b/script/src/core/signature.lua
@@ -0,0 +1,133 @@
+local getFunctionHover = require 'core.hover.function'
+local getFunctionHoverAsLib = require 'core.hover.lib_function'
+local getFunctionHoverAsEmmy = require 'core.hover.emmy_function'
+local findLib = require 'core.find_lib'
+local buildValueName = require 'core.hover.name'
+local findSource = require 'core.find_source'
+
+local function findCall(vm, pos)
+ local results = {}
+ vm:eachSource(function (src)
+ if src.type == 'call'
+ and src.start <= pos
+ and src.finish >= pos
+ then
+ results[#results+1] = src
+ end
+ end)
+ if #results == 0 then
+ return nil
+ end
+ -- 可能处于 'func1(func2(' 的嵌套中,将最近的call放到最前面
+ table.sort(results, function (a, b)
+ return a.start > b.start
+ end)
+ return results
+end
+
+local function getSelect(args, pos)
+ if not args then
+ return 1
+ end
+ for i, arg in ipairs(args) do
+ if arg.start <= pos and arg.finish >= pos - 1 then
+ return i
+ end
+ end
+ return #args + 1
+end
+
+local function getFunctionSource(call)
+ local simple = call:get 'simple'
+ for i, source in ipairs(simple) do
+ if source == call then
+ return simple[i-1]
+ end
+ end
+ return nil
+end
+
+local function getHover(call, pos)
+ local args = call:bindCall()
+ if not args then
+ return nil
+ end
+
+ local value = call:findCallFunction()
+ if not value then
+ return nil
+ end
+
+ local select = getSelect(args, pos)
+ local source = getFunctionSource(call)
+ local object = source:get 'object'
+ local lib, fullkey = findLib(source)
+ local name = fullkey or buildValueName(source)
+ local hover
+ if lib then
+ hover = getFunctionHoverAsLib(name, lib, object, select)
+ else
+ local emmy = value:getEmmy()
+ if emmy and emmy.type == 'emmy.functionType' then
+ hover = getFunctionHoverAsEmmy(name, emmy, object, select)
+ else
+ ---@type emmyFunction
+ local func = value:getFunction()
+ hover = getFunctionHover(name, func, object, select)
+ local overLoads = func and func:getEmmyOverLoads()
+ if overLoads then
+ for _, ol in ipairs(overLoads) do
+ hover = getFunctionHoverAsEmmy(name, ol, object, select)
+ end
+ end
+ end
+ end
+ return hover
+end
+
+local function isInFunctionOrTable(call, pos)
+ local args = call:bindCall()
+ if not args then
+ return false
+ end
+ local select = getSelect(args, pos)
+ local arg = args[select]
+ if not arg then
+ return false
+ end
+ if arg.type == 'function' or arg.type == 'table' then
+ return true
+ end
+ return false
+end
+
+return function (vm, pos)
+ local source = findSource(vm, pos) or findSource(vm, pos-1)
+ if not source or source.type == 'string' then
+ return
+ end
+ local calls = findCall(vm, pos)
+ if not calls or #calls == 0 then
+ return nil
+ end
+
+ local nearCall = calls[1]
+ if isInFunctionOrTable(nearCall, pos) then
+ return nil
+ end
+
+ local hover = getHover(nearCall, pos)
+ if not hover then
+ return nil
+ end
+
+ -- skip `name(`
+ local head = #hover.name + 1
+ hover.label = ('%s(%s)'):format(hover.name, hover.argStr)
+ if hover.argLabel then
+ hover.argLabel[1] = hover.argLabel[1] + head
+ hover.argLabel[2] = hover.argLabel[2] + head
+ end
+
+ return { hover }
+end
diff --git a/script/src/core/snippet.lua b/script/src/core/snippet.lua
new file mode 100644
index 00000000..7532ce9b
--- /dev/null
+++ b/script/src/core/snippet.lua
@@ -0,0 +1,64 @@
+local snippet = {}
+
+local function add(cate, key, label)
+ return function (text)
+ if not snippet[cate] then
+ snippet[cate] = {}
+ end
+ if not snippet[cate][key] then
+ snippet[cate][key] = {}
+ end
+ snippet[cate][key][#snippet[cate][key]+1] = {
+ label = label,
+ text = text,
+ }
+ end
+end
+
+add('key', 'do', 'do .. end') [[
+do
+ $0
+end]]
+
+add('key', 'elseif', 'elseif .. then')
+[[elseif ${1:true} then]]
+
+add('key', 'for', 'for .. in') [[
+for ${1:key, value} in ${2:pairs(t)} do
+ $0
+end]]
+
+add('key', 'for', 'for i = ..') [[
+for ${1:i} = ${2:1}, ${3:10, 2} do
+ $0
+end]]
+
+add('key', 'function', 'function ()') [[
+function $1(${2:arg1, arg2, arg3})
+ $0
+end]]
+
+add('key', 'local', 'local function') [[
+local function ${1:name}(${2:arg1, arg2, arg3})
+ $0
+end]]
+
+add('key', 'if', 'if .. then') [[
+if ${1:true} then
+ $0
+end]]
+
+add('key', 'repeat', 'repeat .. until') [[
+repeat
+ $0
+until ${1:true}]]
+
+add('key', 'while', 'while .. do') [[
+while ${1:true} do
+ $0
+end]]
+
+add('key', 'return', 'do return end')
+[[do return ${1:true} end]]
+
+return snippet
diff --git a/script/src/emmy/alias.lua b/script/src/emmy/alias.lua
new file mode 100644
index 00000000..be47cb4f
--- /dev/null
+++ b/script/src/emmy/alias.lua
@@ -0,0 +1,42 @@
+local listMgr = require 'vm.list'
+
+---@class EmmyAlias
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.alias'
+
+function mt:getName()
+ return self.name
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:bindType(type)
+ if type then
+ self._bindType = type
+ else
+ return self._bindType
+ end
+end
+
+function mt:addEnum(enum)
+ self._enum[#self._enum+1] = enum
+end
+
+function mt:eachEnum(callback)
+ for _, enum in ipairs(self._enum) do
+ callback(enum)
+ end
+end
+
+return function (manager, source)
+ local self = setmetatable({
+ name = source[1][1],
+ source = source.id,
+ _manager = manager,
+ _enum = {},
+ }, mt)
+ return self
+end
diff --git a/script/src/emmy/arrayType.lua b/script/src/emmy/arrayType.lua
new file mode 100644
index 00000000..c5d73500
--- /dev/null
+++ b/script/src/emmy/arrayType.lua
@@ -0,0 +1,37 @@
+local listMgr = require 'vm.list'
+
+---@class EmmyArrayType
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.arrayType'
+
+function mt:getType()
+ return 'table'
+end
+
+function mt:getName()
+ return self.name
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:setValue(value)
+ self.value = value
+ self._child:setValue(value)
+end
+
+function mt:getValue()
+ return self.value
+end
+
+return function (manager, source, child)
+ local self = setmetatable({
+ name = child:getName(),
+ source = source.id,
+ _child = child,
+ _manager = manager,
+ }, mt)
+ return self
+end
diff --git a/script/src/emmy/class.lua b/script/src/emmy/class.lua
new file mode 100644
index 00000000..6728e2c4
--- /dev/null
+++ b/script/src/emmy/class.lua
@@ -0,0 +1,61 @@
+local listMgr = require 'vm.list'
+
+---@class EmmyClass
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.class'
+
+function mt:getType()
+ return self.name
+end
+
+function mt:getName()
+ return self.name
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:setValue(value)
+ self.value = value
+end
+
+function mt:getValue()
+ return self.value
+end
+
+function mt:eachChild(callback)
+ self._manager:eachClass(self.name, function (obj)
+ if obj.type == 'emmy.typeUnit' then
+ callback(obj)
+ end
+ end)
+end
+
+function mt:addField(field)
+ if not self._fields then
+ self._fields = {}
+ end
+ self._fields[#self._fields+1] = field
+end
+
+function mt:eachField(callback)
+ if not self._fields then
+ return
+ end
+ ---@param field EmmyField
+ for _, field in ipairs(self._fields) do
+ callback(field)
+ end
+end
+
+return function (manager, name, extends, source)
+ local self = setmetatable({
+ name = name,
+ source = source.id,
+ extends = extends,
+ _manager = manager,
+ }, mt)
+ return self
+end
diff --git a/script/src/emmy/field.lua b/script/src/emmy/field.lua
new file mode 100644
index 00000000..f9e9cbf6
--- /dev/null
+++ b/script/src/emmy/field.lua
@@ -0,0 +1,45 @@
+local listMgr = require 'vm.list'
+
+---@class EmmyField
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.field'
+
+function mt:getName()
+ return self.name
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:bindType(type)
+ if type then
+ self._bindType = type
+ else
+ return self._bindType
+ end
+end
+
+function mt:bindValue(value)
+ if value then
+ self._bindValue = value
+ else
+ if self._bindValue then
+ if not self._bindValue:getSource() then
+ self._bindValue = nil
+ end
+ end
+ return self._bindValue
+ end
+end
+
+return function (manager, source)
+ local self = setmetatable({
+ name = source[2][1],
+ source = source.id,
+ visible = source[1],
+ _manager = manager,
+ }, mt)
+ return self
+end
diff --git a/script/src/emmy/funcType.lua b/script/src/emmy/funcType.lua
new file mode 100644
index 00000000..2c073fe2
--- /dev/null
+++ b/script/src/emmy/funcType.lua
@@ -0,0 +1,64 @@
+local listMgr = require 'vm.list'
+
+---@class EmmyFunctionType
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.functionType'
+
+function mt:getType()
+ return 'function'
+end
+
+function mt:getName()
+ return 'function'
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:setValue(value)
+ self.value = value
+end
+
+function mt:getValue()
+ return self.value
+end
+
+function mt:addParam(name, type)
+ self._params[#self._params+1] = { name, type }
+end
+
+function mt:addReturn(type)
+ self._returns[#self._returns+1] = type
+end
+
+function mt:eachParam(callback)
+ for _, data in ipairs(self._params) do
+ callback(data[1], data[2])
+ end
+end
+
+function mt:eachReturn(callback)
+ for _, rtn in ipairs(self._returns) do
+ callback(rtn)
+ end
+end
+
+function mt:bindFunction(func)
+ if func then
+ self._bindFunction = func
+ else
+ return self._bindFunction
+ end
+end
+
+return function (manager, source)
+ local self = setmetatable({
+ source = source.id,
+ _params = {},
+ _returns = {},
+ _manager = manager,
+ }, mt)
+ return self
+end
diff --git a/script/src/emmy/generic.lua b/script/src/emmy/generic.lua
new file mode 100644
index 00000000..82fd0c4b
--- /dev/null
+++ b/script/src/emmy/generic.lua
@@ -0,0 +1,27 @@
+local listMgr = require 'vm.list'
+
+---@class EmmyGeneric
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.generic'
+
+function mt:getName()
+ return self.name:getName()
+end
+
+function mt:setValue(value)
+ self._value = value
+end
+
+function mt:getValue()
+ return self._value
+end
+
+return function (manager, defs)
+ for _, def in ipairs(defs) do
+ setmetatable(def, mt)
+ def._manager = manager
+ def._binds = {}
+ end
+ return defs
+end
diff --git a/script/src/emmy/init.lua b/script/src/emmy/init.lua
new file mode 100644
index 00000000..769c9e05
--- /dev/null
+++ b/script/src/emmy/init.lua
@@ -0,0 +1 @@
+return require 'vm.emmy.emmy'
diff --git a/script/src/emmy/manager.lua b/script/src/emmy/manager.lua
new file mode 100644
index 00000000..c80e05df
--- /dev/null
+++ b/script/src/emmy/manager.lua
@@ -0,0 +1,221 @@
+local listMgr = require 'vm.list'
+local sourceMgr = require 'vm.source'
+local newClass = require 'emmy.class'
+local newType = require 'emmy.type'
+local newTypeUnit = require 'emmy.typeUnit'
+local newAlias = require 'emmy.alias'
+local newParam = require 'emmy.param'
+local newReturn = require 'emmy.return'
+local newField = require 'emmy.field'
+local newGeneric = require 'emmy.generic'
+local newArrayType = require 'emmy.arrayType'
+local newTableType = require 'emmy.tableType'
+local newFuncType = require 'emmy.funcType'
+
+local mt = {}
+mt.__index = mt
+mt.__name = 'emmyMgr'
+
+function mt:flushClass(name)
+ local list = self._class[name]
+ if not list then
+ return
+ end
+ local version = listMgr.getVersion()
+ if version == list.version then
+ return
+ end
+ for srcId in pairs(list) do
+ if not listMgr.get(srcId) then
+ list[srcId] = nil
+ end
+ end
+ if not next(list) then
+ self._class[name] = nil
+ return
+ end
+ list.version = version
+end
+
+function mt:eachClassByName(name, callback)
+ self:flushClass(name)
+ local list = self._class[name]
+ if not list then
+ return
+ end
+ for k, class in pairs(list) do
+ if k ~= 'version' then
+ local res = callback(class)
+ if res ~= nil then
+ return res
+ end
+ end
+ end
+end
+
+function mt:eachClass(...)
+ local n = select('#', ...)
+ if n == 1 then
+ local callback = ...
+ for name in pairs(self._class) do
+ local res = self:eachClassByName(name, callback)
+ if res ~= nil then
+ return res
+ end
+ end
+ else
+ local name, callback = ...
+ return self:eachClassByName(name, callback)
+ end
+end
+
+function mt:getClass(name)
+ self:flushClass(name)
+ local list = self._class[name]
+ local version = listMgr.getVersion()
+ if not list then
+ list = {
+ version = version,
+ }
+ self._class[name] = list
+ end
+ return list
+end
+
+function mt:newClass(name, extends, source)
+ local list = self:getClass(name)
+ list[source.id] = newClass(self, name, extends, source)
+ return list[source.id]
+end
+
+function mt:addClass(source)
+ local className = source[1][1]
+ local extends = source[2] and source[2][1]
+ local class = self:newClass(className, extends, source)
+ return class
+end
+
+function mt:addType(source)
+ local typeObj = newType(self, source)
+ for i, obj in ipairs(source) do
+ local typeUnit = newTypeUnit(self, obj)
+ local className = obj[1]
+ if className then
+ local list = self:getClass(className)
+ list[source.id] = typeUnit
+ end
+ typeUnit:setParent(typeObj)
+ typeObj._childs[i] = typeUnit
+ obj:set('emmy.typeUnit', typeUnit)
+ end
+ return typeObj
+end
+
+function mt:addArrayType(source)
+ local typeObj = self:addType(source)
+ local arrayTypeObj = newArrayType(self, source, typeObj)
+ return arrayTypeObj
+end
+
+function mt:addTableType(source, keyType, valueType)
+ local typeObj = newTableType(self, source, keyType, valueType)
+ return typeObj
+end
+
+function mt:addFunctionType(source)
+ local typeObj = newFuncType(self, source)
+ return typeObj
+end
+
+function mt:addAlias(source, typeObj)
+ local aliasName = source[1][1]
+ local aliasObj = newAlias(self, source)
+ aliasObj:bindType(typeObj)
+ local list = self:getClass(aliasName)
+ list[source.id] = aliasObj
+ for i = 3, #source do
+ aliasObj:addEnum(source[i])
+ end
+ return aliasObj
+end
+
+function mt:addParam(source, bind)
+ local paramObj = newParam(self, source)
+ if bind.type == 'emmy.generic' then
+ paramObj:bindGeneric(bind)
+ else
+ paramObj:bindType(bind)
+ self:eachClass(bind:getType(), function (class)
+ if class.type == 'emmy.alias' then
+ class:eachEnum(function (enum)
+ paramObj:addEnum(enum)
+ end)
+ end
+ end)
+ end
+ for i = 3, #source do
+ paramObj:addEnum(source[i])
+ end
+ paramObj:setOption(source.option)
+ return paramObj
+end
+
+function mt:addReturn(source, bind, name)
+ local returnObj = newReturn(self, source, name)
+ if bind then
+ if bind.type == 'emmy.generic' then
+ returnObj:bindGeneric(bind)
+ else
+ returnObj:bindType(bind)
+ end
+ end
+ return returnObj
+end
+
+function mt:addField(source, typeObj, value)
+ local fieldObj = newField(self, source)
+ fieldObj:bindType(typeObj)
+ fieldObj:bindValue(value)
+ return fieldObj
+end
+
+function mt:addGeneric(defs)
+ local genericObj = newGeneric(self, defs)
+ return genericObj
+end
+
+function mt:remove()
+end
+
+function mt:count()
+ local count = 0
+ for _, list in pairs(self._class) do
+ for k in pairs(list) do
+ if k ~= 'version' then
+ count = count + 1
+ end
+ end
+ end
+ return count
+end
+
+return function ()
+ ---@class emmyMgr
+ local self = setmetatable({
+ _class = {},
+ }, mt)
+
+ local source = sourceMgr.dummy()
+ self:newClass('any', nil, source)
+ self:newClass('string', 'any', source)
+ self:newClass('number', 'any', source)
+ self:newClass('integer', 'number', source)
+ self:newClass('boolean', 'any', source)
+ self:newClass('table', 'any', source)
+ self:newClass('function', 'any', source)
+ self:newClass('nil', 'any', source)
+ self:newClass('userdata', 'any', source)
+ self:newClass('thread', 'any', source)
+
+ return self
+end
diff --git a/script/src/emmy/param.lua b/script/src/emmy/param.lua
new file mode 100644
index 00000000..12ac0633
--- /dev/null
+++ b/script/src/emmy/param.lua
@@ -0,0 +1,70 @@
+local listMgr = require 'vm.list'
+
+---@class EmmyParam
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.param'
+
+function mt:getName()
+ return self.name
+end
+
+function mt:getType()
+ if self._bindType then
+ return self._bindType:getType()
+ else
+ return 'any'
+ end
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:bindType(type)
+ if type then
+ self._bindType = type
+ else
+ return self._bindType
+ end
+end
+
+function mt:bindGeneric(generic)
+ if generic then
+ self._bindGeneric = generic
+ else
+ return self._bindGeneric
+ end
+end
+
+function mt:addEnum(enum)
+ self._enum[#self._enum+1] = enum
+end
+
+function mt:eachEnum(callback)
+ for _, enum in ipairs(self._enum) do
+ callback(enum)
+ end
+end
+
+function mt:setOption(option)
+ self._option = option
+end
+
+function mt:getOption()
+ return self._option
+end
+
+return function (manager, source)
+ local self = setmetatable({
+ source = source.id,
+ _manager = manager,
+ _enum = {},
+ }, mt)
+ if source.type == 'emmyParam' then
+ self.name = source[1][1]
+ elseif source.type == 'emmyVararg' then
+ self.name = '...'
+ end
+ return self
+end
diff --git a/script/src/emmy/return.lua b/script/src/emmy/return.lua
new file mode 100644
index 00000000..1fc97923
--- /dev/null
+++ b/script/src/emmy/return.lua
@@ -0,0 +1,36 @@
+local listMgr = require 'vm.list'
+
+---@class EmmyReturn
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.return'
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:bindType(type)
+ if type then
+ self._bindType = type
+ else
+ return self._bindType
+ end
+end
+
+function mt:bindGeneric(generic)
+ if generic then
+ self._bindGeneric = generic
+ else
+ return self._bindGeneric
+ end
+end
+
+return function (manager, source, name)
+ local self = setmetatable({
+ source = source.id,
+ name = name and name[1],
+ option = source.option,
+ _manager = manager,
+ }, mt)
+ return self
+end
diff --git a/script/src/emmy/tableType.lua b/script/src/emmy/tableType.lua
new file mode 100644
index 00000000..3882cd61
--- /dev/null
+++ b/script/src/emmy/tableType.lua
@@ -0,0 +1,40 @@
+local listMgr = require 'vm.list'
+
+---@class EmmyTableType
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.tableType'
+
+function mt:getType()
+ return 'table'
+end
+
+function mt:getKeyType()
+ return self.keyType
+end
+
+function mt:getValueType()
+ return self.valueType
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:setValue(value)
+ self.value = value
+end
+
+function mt:getValue()
+ return self.value
+end
+
+return function (manager, source, keyType, valueType)
+ local self = setmetatable({
+ source = source.id,
+ keyType = keyType,
+ valueType = valueType,
+ _manager = manager,
+ }, mt)
+ return self
+end
diff --git a/script/src/emmy/type.lua b/script/src/emmy/type.lua
new file mode 100644
index 00000000..b7e451b2
--- /dev/null
+++ b/script/src/emmy/type.lua
@@ -0,0 +1,55 @@
+local listMgr = require 'vm.list'
+
+local function buildName(source)
+ local names = {}
+ for i, type in ipairs(source) do
+ names[i] = type[1]
+ end
+ return table.concat(names, '|')
+end
+
+---@class EmmyType
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.type'
+
+function mt:getType()
+ return self.name
+end
+
+function mt:getName()
+ return self.name
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:eachClass(callback)
+ for _, typeUnit in ipairs(self._childs) do
+ ---@type EmmyTypeUnit
+ local emmyTypeUnit = typeUnit
+ emmyTypeUnit:getClass(callback)
+ end
+end
+
+function mt:setValue(value)
+ self.value = value
+ for _, typeUnit in ipairs(self._childs) do
+ typeUnit:setValue(value)
+ end
+end
+
+function mt:getValue()
+ return self.value
+end
+
+return function (manager, source)
+ local self = setmetatable({
+ name = buildName(source),
+ source = source.id,
+ _manager = manager,
+ _childs = {},
+ }, mt)
+ return self
+end
diff --git a/script/src/emmy/typeUnit.lua b/script/src/emmy/typeUnit.lua
new file mode 100644
index 00000000..73d7ea6b
--- /dev/null
+++ b/script/src/emmy/typeUnit.lua
@@ -0,0 +1,51 @@
+local listMgr = require 'vm.list'
+
+---@class EmmyTypeUnit
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.typeUnit'
+
+function mt:getType()
+ return self.name
+end
+
+function mt:getName()
+ return self.name
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:getClass(callback)
+ self._manager:eachClass(self:getName(), function (class)
+ if class.type == 'emmy.class' then
+ callback(class)
+ end
+ end)
+end
+
+function mt:setValue(value)
+ self.value = value
+end
+
+function mt:getValue()
+ return self.value
+end
+
+function mt:setParent(parent)
+ self.parent = parent
+end
+
+function mt:getParent()
+ return self.parent
+end
+
+return function (manager, source)
+ local self = setmetatable({
+ name = source[1],
+ source = source.id,
+ _manager = manager,
+ }, mt)
+ return self
+end
diff --git a/script/src/files/file.lua b/script/src/files/file.lua
new file mode 100644
index 00000000..81aabba5
--- /dev/null
+++ b/script/src/files/file.lua
@@ -0,0 +1,158 @@
+---@class file
+local mt = {}
+mt.__index = mt
+mt.type = 'file'
+mt._uri = ''
+mt._oldText = ''
+mt._text = ''
+mt._version = -1
+mt._vmCost = 0.0
+mt._lineCost = 0.0
+
+---@param buf string
+function mt:setText(buf)
+ self._oldText = self._text
+ self._text = buf
+end
+
+---@return string
+function mt:getText()
+ return self._text
+end
+
+---@return string
+function mt:getOldText()
+ return self._oldText
+end
+
+function mt:clearOldText()
+ self._oldText = nil
+end
+
+---@param version integer
+function mt:setVersion(version)
+ self._version = version
+end
+
+---@return integer
+function mt:getVersion()
+ return self._version
+end
+
+function mt:remove()
+ if self._removed then
+ return
+ end
+ self._removed = true
+ self._text = nil
+ self._version = nil
+ if self._vm then
+ self._vm:remove()
+ end
+end
+
+---@return boolean
+function mt:isRemoved()
+ return self._removed == true
+end
+
+---@param vm VM
+---@param version integer
+---@param cost number
+function mt:saveVM(vm, version, cost)
+ if self._vm then
+ self._vm:remove()
+ end
+ self._vm = vm
+ if vm then
+ vm:setVersion(version)
+ end
+ self._vmCost = cost
+end
+
+---@return VM
+function mt:getVM()
+ return self._vm
+end
+
+---@return number
+function mt:getVMCost()
+ return self._vmCost
+end
+
+function mt:removeVM()
+ if not self._vm then
+ return
+ end
+ self._vm:remove()
+ self._vm = nil
+end
+
+---@param lines table
+---@param cost number
+function mt:saveLines(lines, cost)
+ self._lines = lines
+ self._lineCost = cost
+end
+
+---@return table
+function mt:getLines()
+ return self._lines
+end
+
+function mt:getComments()
+ return self.comments
+end
+
+---@return file
+function mt:getParent()
+ return self._parent
+end
+
+---@param uri uri
+function mt:addChild(uri)
+ self._child[uri] = true
+end
+
+---@param uri uri
+function mt:removeChild(uri)
+ self._child[uri] = nil
+end
+
+---@param uri uri
+function mt:addParent(uri)
+ self._parent[uri] = true
+end
+
+---@param uri uri
+function mt:removeParent(uri)
+ self._parent[uri] = nil
+end
+
+function mt:eachChild()
+ return pairs(self._child)
+end
+
+function mt:eachParent()
+ return pairs(self._parent)
+end
+
+---@param err table
+function mt:setAstErr(err)
+ self._astErr = err
+end
+
+---@return table
+function mt:getAstErr()
+ return self._astErr
+end
+
+---@param uri string
+return function (uri)
+ local self = setmetatable({
+ _uri = uri,
+ _parent = {},
+ _child = {},
+ }, mt)
+ return self
+end
diff --git a/script/src/files/files.lua b/script/src/files/files.lua
new file mode 100644
index 00000000..88ff7444
--- /dev/null
+++ b/script/src/files/files.lua
@@ -0,0 +1,115 @@
+local file = require 'files.file'
+
+---@class files
+local mt = {}
+mt.__index = mt
+mt.type = 'files'
+mt._fileCount = 0
+---@type table<uri, file>
+mt._files = nil
+
+---@param uri uri
+---@param text string
+function mt:save(uri, text, version)
+ local f = self._files[uri]
+ if not f then
+ f = file(uri)
+ self._files[uri] = f
+ self._fileCount = self._fileCount + 1
+ end
+ f:setText(text)
+ f:setVersion(version)
+end
+
+---@param uri uri
+function mt:remove(uri)
+ local f = self._files[uri]
+ if not f then
+ return
+ end
+
+ f:remove()
+ self._files[uri] = nil
+ self._fileCount = self._fileCount - 1
+end
+
+---@param uri uri
+function mt:open(uri, text)
+ self._open[uri] = text
+end
+
+---@param uri uri
+function mt:close(uri)
+ self._open[uri] = nil
+end
+
+---@param uri uri
+---@return boolean
+function mt:isOpen(uri)
+ return self._open[uri] ~= nil
+end
+
+---@param uri uri
+function mt:setLibrary(uri)
+ self._library[uri] = true
+end
+
+---@param uri uri
+---@return uri
+function mt:isLibrary(uri)
+ return self._library[uri] == true
+end
+
+---@param uri uri
+function mt:isDead(uri)
+ local f = self._files[uri]
+ if not f then
+ return true
+ end
+ if f:isRemoved() then
+ return true
+ end
+ return f:getVersion() == -1
+end
+
+---@param uri uri
+---@return file
+function mt:get(uri)
+ return self._files[uri]
+end
+
+function mt:clear()
+ for _, f in pairs(self._files) do
+ f:remove()
+ end
+ self._files = {}
+ self._library = {}
+ self._fileCount = nil
+end
+
+function mt:clearVM()
+ for _, f in pairs(self._files) do
+ f:removeVM()
+ end
+end
+
+function mt:eachFile()
+ return pairs(self._files)
+end
+
+function mt:eachOpened()
+ return pairs(self._open)
+end
+
+function mt:count()
+ return self._fileCount
+end
+
+return function ()
+ local self = setmetatable({
+ _files = {},
+ _open = {},
+ _library = {},
+ }, mt)
+ return self
+end
diff --git a/script/src/files/init.lua b/script/src/files/init.lua
new file mode 100644
index 00000000..e090874d
--- /dev/null
+++ b/script/src/files/init.lua
@@ -0,0 +1 @@
+return require 'files.files'
diff --git a/script/src/glob/gitignore.lua b/script/src/glob/gitignore.lua
new file mode 100644
index 00000000..f96aa627
--- /dev/null
+++ b/script/src/glob/gitignore.lua
@@ -0,0 +1,222 @@
+local m = require 'lpeglabel'
+local matcher = require 'glob.matcher'
+
+local function prop(name, pat)
+ return m.Cg(m.Cc(true), name) * pat
+end
+
+local function object(type, pat)
+ return m.Ct(
+ m.Cg(m.Cc(type), 'type') *
+ m.Cg(pat, 'value')
+ )
+end
+
+local function expect(p, err)
+ return p + m.T(err)
+end
+
+local parser = m.P {
+ 'Main',
+ ['Sp'] = m.S(' \t')^0,
+ ['Slash'] = m.S('/\\')^1,
+ ['Main'] = m.Ct(m.V'Sp' * m.P'{' * m.V'Pattern' * (',' * expect(m.V'Pattern', 'Miss exp after ","'))^0 * m.P'}')
+ + m.Ct(m.V'Pattern')
+ + m.T'Main Failed'
+ ,
+ ['Pattern'] = m.Ct(m.V'Sp' * prop('neg', m.P'!') * expect(m.V'Unit', 'Miss exp after "!"'))
+ + m.Ct(m.V'Unit')
+ ,
+ ['NeedRoot'] = prop('root', (m.P'.' * m.V'Slash' + m.V'Slash')),
+ ['Unit'] = m.V'Sp' * m.V'NeedRoot'^-1 * expect(m.V'Exp', 'Miss exp') * m.V'Sp',
+ ['Exp'] = m.V'Sp' * (m.V'FSymbol' + object('/', m.V'Slash') + m.V'Word')^0 * m.V'Sp',
+ ['Word'] = object('word', m.Ct((m.V'CSymbol' + m.V'Char' - m.V'FSymbol')^1)),
+ ['CSymbol'] = object('*', m.P'*')
+ + object('?', m.P'?')
+ + object('[]', m.V'Range')
+ ,
+ ['Char'] = object('char', (1 - m.S',{}[]*?/\\')^1),
+ ['FSymbol'] = object('**', m.P'**'),
+ ['Range'] = m.P'[' * m.Ct(m.V'RangeUnit'^0) * m.P']'^-1,
+ ['RangeUnit'] = m.Ct(- m.P']' * m.C(m.P(1)) * (m.P'-' * - m.P']' * m.C(m.P(1)))^-1),
+}
+
+---@class gitignore
+local mt = {}
+mt.__index = mt
+mt.__name = 'gitignore'
+
+function mt:addPattern(pat)
+ if type(pat) ~= 'string' then
+ return
+ end
+ self.pattern[#self.pattern+1] = pat
+ if self.options.ignoreCase then
+ pat = pat:lower()
+ end
+ local states, err = parser:match(pat)
+ if not states then
+ self.errors[#self.errors+1] = {
+ pattern = pat,
+ message = err
+ }
+ return
+ end
+ for _, state in ipairs(states) do
+ self.matcher[#self.matcher+1] = matcher(state)
+ end
+end
+
+function mt:setOption(op, val)
+ if val == nil then
+ val = true
+ end
+ self.options[op] = val
+end
+
+---@param key string | "'type'" | "'list'"
+---@param func function | "function (path) end"
+function mt:setInterface(key, func)
+ if type(func) ~= 'function' then
+ return
+ end
+ self.interface[key] = func
+end
+
+function mt:callInterface(name, ...)
+ local func = self.interface[name]
+ return func(...)
+end
+
+function mt:hasInterface(name)
+ return self.interface[name] ~= nil
+end
+
+function mt:checkDirectory(catch, path, matcher)
+ if not self:hasInterface 'type' then
+ return true
+ end
+ if not matcher:isNeedDirectory() then
+ return true
+ end
+ if #catch < #path then
+ -- if path is 'a/b/c' and catch is 'a/b'
+ -- then the catch must be a directory
+ return true
+ else
+ return self:callInterface('type', path) == 'directory'
+ end
+end
+
+function mt:simpleMatch(path)
+ for i = #self.matcher, 1, -1 do
+ local matcher = self.matcher[i]
+ local catch = matcher(path)
+ if catch and self:checkDirectory(catch, path, matcher) then
+ if matcher:isNegative() then
+ return false
+ else
+ return true
+ end
+ end
+ end
+ return nil
+end
+
+function mt:finishMatch(path)
+ local paths = {}
+ for filename in path:gmatch '[^/\\]+' do
+ paths[#paths+1] = filename
+ end
+ for i = 1, #paths do
+ local newPath = table.concat(paths, '/', 1, i)
+ local passed = self:simpleMatch(newPath)
+ if passed == true then
+ return true
+ elseif passed == false then
+ return false
+ end
+ end
+ return false
+end
+
+function mt:scan(callback)
+ local files = {}
+ if type(callback) ~= 'function' then
+ callback = nil
+ end
+ local list = {}
+ local result = self:callInterface('list', '')
+ if type(result) ~= 'table' then
+ return files
+ end
+ for _, path in ipairs(result) do
+ list[#list+1] = path:match '([^/\\]+)[/\\]*$'
+ end
+ while #list > 0 do
+ local current = list[#list]
+ if not current then
+ break
+ end
+ list[#list] = nil
+ if not self:simpleMatch(current) then
+ local fileType = self:callInterface('type', current)
+ if fileType == 'file' then
+ if callback then
+ callback(current)
+ end
+ files[#files+1] = current
+ elseif fileType == 'directory' then
+ local result = self:callInterface('list', current)
+ if type(result) == 'table' then
+ for _, path in ipairs(result) do
+ local filename = path:match '([^/\\]+)[/\\]*$'
+ if filename then
+ list[#list+1] = current .. '/' .. filename
+ end
+ end
+ end
+ end
+ end
+ end
+ return files
+end
+
+function mt:__call(path)
+ if self.options.ignoreCase then
+ path = path:lower()
+ end
+ return self:finishMatch(path)
+end
+
+return function (pattern, options, interface)
+ local self = setmetatable({
+ pattern = {},
+ options = {},
+ matcher = {},
+ errors = {},
+ interface = {},
+ }, mt)
+
+ if type(pattern) == 'table' then
+ for _, pat in ipairs(pattern) do
+ self:addPattern(pat)
+ end
+ else
+ self:addPattern(pattern)
+ end
+
+ if type(options) == 'table' then
+ for op, val in pairs(options) do
+ self:setOption(op, val)
+ end
+ end
+
+ if type(interface) == 'table' then
+ for key, func in pairs(interface) do
+ self:setInterface(key, func)
+ end
+ end
+
+ return self
+end
diff --git a/script/src/glob/glob.lua b/script/src/glob/glob.lua
new file mode 100644
index 00000000..aa8923f3
--- /dev/null
+++ b/script/src/glob/glob.lua
@@ -0,0 +1,122 @@
+local m = require 'lpeglabel'
+local matcher = require 'glob.matcher'
+
+local function prop(name, pat)
+ return m.Cg(m.Cc(true), name) * pat
+end
+
+local function object(type, pat)
+ return m.Ct(
+ m.Cg(m.Cc(type), 'type') *
+ m.Cg(pat, 'value')
+ )
+end
+
+local function expect(p, err)
+ return p + m.T(err)
+end
+
+local parser = m.P {
+ 'Main',
+ ['Sp'] = m.S(' \t')^0,
+ ['Slash'] = m.S('/\\')^1,
+ ['Main'] = m.Ct(m.V'Sp' * m.P'{' * m.V'Pattern' * (',' * expect(m.V'Pattern', 'Miss exp after ","'))^0 * m.P'}')
+ + m.Ct(m.V'Pattern')
+ + m.T'Main Failed'
+ ,
+ ['Pattern'] = m.Ct(m.V'Sp' * prop('neg', m.P'!') * expect(m.V'Unit', 'Miss exp after "!"'))
+ + m.Ct(m.V'Unit')
+ ,
+ ['NeedRoot'] = prop('root', (m.P'.' * m.V'Slash' + m.V'Slash')),
+ ['Unit'] = m.V'Sp' * m.V'NeedRoot'^-1 * expect(m.V'Exp', 'Miss exp') * m.V'Sp',
+ ['Exp'] = m.V'Sp' * (m.V'FSymbol' + object('/', m.V'Slash') + m.V'Word')^0 * m.V'Sp',
+ ['Word'] = object('word', m.Ct((m.V'CSymbol' + m.V'Char' - m.V'FSymbol')^1)),
+ ['CSymbol'] = object('*', m.P'*')
+ + object('?', m.P'?')
+ + object('[]', m.V'Range')
+ ,
+ ['Char'] = object('char', (1 - m.S',{}[]*?/\\')^1),
+ ['FSymbol'] = object('**', m.P'**'),
+ ['RangeWord'] = 1 - m.P']',
+ ['Range'] = m.P'[' * m.Ct(m.V'RangeUnit'^0) * m.P']'^-1,
+ ['RangeUnit'] = m.Ct(m.C(m.V'RangeWord') * m.P'-' * m.C(m.V'RangeWord'))
+ + m.V'RangeWord',
+}
+
+local mt = {}
+mt.__index = mt
+mt.__name = 'glob'
+
+function mt:addPattern(pat)
+ if type(pat) ~= 'string' then
+ return
+ end
+ self.pattern[#self.pattern+1] = pat
+ if self.options.ignoreCase then
+ pat = pat:lower()
+ end
+ local states, err = parser:match(pat)
+ if not states then
+ self.errors[#self.errors+1] = {
+ pattern = pat,
+ message = err
+ }
+ return
+ end
+ for _, state in ipairs(states) do
+ if state.neg then
+ self.refused[#self.refused+1] = matcher(state)
+ else
+ self.passed[#self.passed+1] = matcher(state)
+ end
+ end
+end
+
+function mt:setOption(op, val)
+ if val == nil then
+ val = true
+ end
+ self.options[op] = val
+end
+
+function mt:__call(path)
+ if self.options.ignoreCase then
+ path = path:lower()
+ end
+ for _, refused in ipairs(self.refused) do
+ if refused(path) then
+ return false
+ end
+ end
+ for _, passed in ipairs(self.passed) do
+ if passed(path) then
+ return true
+ end
+ end
+ return false
+end
+
+return function (pattern, options)
+ local self = setmetatable({
+ pattern = {},
+ options = {},
+ passed = {},
+ refused = {},
+ errors = {},
+ }, mt)
+
+ if type(pattern) == 'table' then
+ for _, pat in ipairs(pattern) do
+ self:addPattern(pat)
+ end
+ else
+ self:addPattern(pattern)
+ end
+
+ if type(options) == 'table' then
+ for op, val in pairs(options) do
+ self:setOption(op, val)
+ end
+ end
+ return self
+end
diff --git a/script/src/glob/init.lua b/script/src/glob/init.lua
new file mode 100644
index 00000000..6578a0d4
--- /dev/null
+++ b/script/src/glob/init.lua
@@ -0,0 +1,4 @@
+return {
+ glob = require 'glob.glob',
+ gitignore = require 'glob.gitignore',
+}
diff --git a/script/src/glob/matcher.lua b/script/src/glob/matcher.lua
new file mode 100644
index 00000000..f4c2b12c
--- /dev/null
+++ b/script/src/glob/matcher.lua
@@ -0,0 +1,151 @@
+local m = require 'lpeglabel'
+
+local Slash = m.S('/\\')^1
+local Symbol = m.S',{}[]*?/\\'
+local Char = 1 - Symbol
+local Path = Char^1 * Slash
+local NoWord = #(m.P(-1) + Symbol)
+local function whatHappened()
+ return m.Cmt(m.P(1)^1, function (...)
+ print(...)
+ end)
+end
+
+local mt = {}
+mt.__index = mt
+mt.__name = 'matcher'
+
+function mt:exp(state, index)
+ local exp = state[index]
+ if not exp then
+ return
+ end
+ if exp.type == 'word' then
+ return self:word(exp, state, index + 1)
+ elseif exp.type == 'char' then
+ return self:char(exp, state, index + 1)
+ elseif exp.type == '**' then
+ return self:anyPath(exp, state, index + 1)
+ elseif exp.type == '*' then
+ return self:anyChar(exp, state, index + 1)
+ elseif exp.type == '?' then
+ return self:oneChar(exp, state, index + 1)
+ elseif exp.type == '[]' then
+ return self:range(exp, state, index + 1)
+ elseif exp.type == '/' then
+ return self:slash(exp, state, index + 1)
+ end
+end
+
+function mt:word(exp, state, index)
+ local current = self:exp(exp.value, 1)
+ local after = self:exp(state, index)
+ if after then
+ return current * Slash * after
+ else
+ return current
+ end
+end
+
+function mt:char(exp, state, index)
+ local current = m.P(exp.value)
+ local after = self:exp(state, index)
+ if after then
+ return current * after * NoWord
+ else
+ return current * NoWord
+ end
+end
+
+function mt:anyPath(_, state, index)
+ local after = self:exp(state, index)
+ if after then
+ return m.P {
+ 'Main',
+ Main = after
+ + Path * m.V'Main'
+ }
+ else
+ return Path^0
+ end
+end
+
+function mt:anyChar(_, state, index)
+ local after = self:exp(state, index)
+ if after then
+ return m.P {
+ 'Main',
+ Main = after
+ + Char * m.V'Main'
+ }
+ else
+ return Char^0
+ end
+end
+
+function mt:oneChar(_, state, index)
+ local after = self:exp(state, index)
+ if after then
+ return Char * after
+ else
+ return Char
+ end
+end
+
+function mt:range(exp, state, index)
+ local after = self:exp(state, index)
+ local ranges = {}
+ local selects = {}
+ for _, range in ipairs(exp.value) do
+ if #range == 1 then
+ selects[#selects+1] = range[1]
+ elseif #range == 2 then
+ ranges[#ranges+1] = range[1] .. range[2]
+ end
+ end
+ local current = m.S(table.concat(selects)) + m.R(table.unpack(ranges))
+ if after then
+ return current * after
+ else
+ return current
+ end
+end
+
+function mt:slash(_, state, index)
+ local after = self:exp(state, index)
+ if after then
+ return after
+ else
+ self.needDirectory = true
+ return nil
+ end
+end
+
+function mt:pattern(state)
+ if state.root then
+ return m.C(self:exp(state, 1))
+ else
+ return m.C(self:anyPath(nil, state, 1))
+ end
+end
+
+function mt:isNeedDirectory()
+ return self.needDirectory == true
+end
+
+function mt:isNegative()
+ return self.state.neg == true
+end
+
+function mt:__call(path)
+ return self.matcher:match(path)
+end
+
+return function (state, options)
+ local self = setmetatable({
+ options = options,
+ state = state,
+ }, mt)
+ self.matcher = self:pattern(state)
+ return self
+end
diff --git a/script/src/json/decode.lua b/script/src/json/decode.lua
new file mode 100644
index 00000000..36f8aa54
--- /dev/null
+++ b/script/src/json/decode.lua
@@ -0,0 +1,153 @@
+local lpeg = require 'lpeglabel'
+local tablePack = table.pack
+local rawset = rawset
+local tointeger = math.tointeger
+local tonumber = tonumber
+local setmetatable = setmetatable
+local stringChar = string.char
+local error = error
+
+_ENV = nil
+
+local SaveSort
+local P = lpeg.P
+local S = lpeg.S
+local R = lpeg.R
+local V = lpeg.V
+local C = lpeg.C
+local Ct = lpeg.Ct
+local Cc = lpeg.Cc
+local Cp = lpeg.Cp
+local Cs = lpeg.Cs
+
+local EscMap = {
+ ['t'] = '\t',
+ ['r'] = '\r',
+ ['n'] = '\n',
+ ['"'] = '"',
+ ['\\'] = '\\',
+}
+local BoolMap = {
+ ['true'] = true,
+ ['false'] = false,
+}
+
+local hashmt = {
+ __pairs = function (self)
+ local i = 1
+ local function next()
+ i = i + 1
+ local k = self[i]
+ if k == nil then
+ return
+ end
+ local v = self[k]
+ if v == nil then
+ return next()
+ end
+ return k, v
+ end
+ return next
+ end,
+ __newindex = function (self, k, v)
+ local i = 2
+ while self[i] do
+ i = i + 1
+ end
+ rawset(self, i, k)
+ rawset(self, k, v)
+ end,
+}
+
+-----------------------------------------------------------------------------
+-- JSON4Lua: JSON encoding / decoding support for the Lua language.
+-- json Module.
+-- Author: Craig Mason-Jones
+-- Homepage: http://github.com/craigmj/json4lua/
+-- Version: 1.0.0
+-- This module is released under the MIT License (MIT).
+-- Please see LICENCE.txt for details.
+--
+local function Utf8(str)
+ local n = tonumber(str, 16)
+ -- math.floor(x/2^y) == lazy right shift
+ -- a % 2^b == bitwise_and(a, (2^b)-1)
+ -- 64 = 2^6
+ -- 4096 = 2^12 (or 2^6 * 2^6)
+ local x
+ if n < 0x80 then
+ x = stringChar(n % 0x80)
+ elseif n < 0x800 then
+ -- [110x xxxx] [10xx xxxx]
+ x = stringChar(0xC0 + ((n // 64) % 0x20), 0x80 + (n % 0x40))
+ else
+ -- [1110 xxxx] [10xx xxxx] [10xx xxxx]
+ x = stringChar(0xE0 + ((n // 4096) % 0x10), 0x80 + ((n // 64) % 0x40), 0x80 + (n % 0x40))
+ end
+ return x
+end
+
+local function HashTable(patt)
+ return C(patt) / function (_, ...)
+ local hash = tablePack(...)
+ local n = hash.n
+ hash.n = nil
+ if SaveSort then
+ local max = n // 2
+ for i = 1, max do
+ local key, value = hash[2*i-1], hash[2*i]
+ hash[key] = value
+ hash[i+1] = key
+ end
+ hash[1] = nil
+ for i = max+2, max*2 do
+ hash[i] = nil
+ end
+ return setmetatable(hash, hashmt)
+ else
+ local max = n // 2
+ for i = 1, max do
+ local a = 2*i-1
+ local b = 2*i
+ local key, value = hash[a], hash[b]
+ hash[key] = value
+ hash[a] = nil
+ hash[b] = nil
+ end
+ return hash
+ end
+ end
+end
+
+local Token = P
+{
+ V'Value' * Cp(),
+ Nl = P'\r\n' + S'\r\n',
+ Sp = S' \t' + '//' * (1-V'Nl')^0,
+ Spnl = (V'Sp' + V'Nl')^0,
+ Bool = C(P'true' + P'false') / BoolMap,
+ Int = C('0' + (P'-'^-1 * R'19' * R'09'^0)) / tointeger,
+ Float = C(P'-'^-1 * ('0' + R'19' * R'09'^0) * '.' * R'09'^0) / tonumber,
+ Null = P'null' * Cc(nil),
+ String = '"' * Cs(V'Char'^0) * '"',
+ Char = V'Esc' + V'Utf8' + (1 - P'"' - P'\t' - V'Nl'),
+ Esc = P'\\' * C(S'tnr"\\') / EscMap,
+ Utf8 = P'\\u' * C(P(4)) / Utf8,
+ Hash = V'Spnl' * '{' * V'Spnl' * HashTable((V'Object' + P',' * V'Spnl')^0) * V'Spnl' * P'}' * V'Spnl',
+ Array = V'Spnl' * '[' * V'Spnl' * Ct((V'Value' * V'Spnl' + P',' * V'Spnl')^0) * V'Spnl' * P']' * V'Spnl',
+ Object = V'Spnl' * V'Key' * V'Spnl' * V'Value' * V'Spnl',
+ Key = V'String' * V'Spnl' * ':',
+ Value = V'Hash' + V'Array' + V'Bool' + V'Null' + V'String' + V'Float' + V'Int',
+}
+
+return function (str, save_sort_)
+ SaveSort = save_sort_
+ local table, res, pos = Token:match(str)
+ if not table then
+ if not pos or pos <= #str then
+ pos = pos or 1
+ error(('没匹配完[%s][%s]\n%s'):format(pos, res, str:sub(pos, pos+100)))
+ end
+ end
+ return table
+end
diff --git a/script/src/json/encode.lua b/script/src/json/encode.lua
new file mode 100644
index 00000000..97a1680b
--- /dev/null
+++ b/script/src/json/encode.lua
@@ -0,0 +1,135 @@
+
+local rep = string.rep
+local format = string.format
+local gsub = string.gsub
+local sub = string.sub
+local sort = table.sort
+local find = string.find
+local tostring = tostring
+local getmetatable = debug.getmetatable
+local type = type
+local next = next
+local ipairs = ipairs
+
+local index
+local lines
+local n = -1
+local tabs = {}
+
+local esc_map = {
+ ['\\'] = '\\\\',
+ ['\r'] = '\\r',
+ ['\n'] = '\\n',
+ ['\t'] = '\\t',
+ ['"'] = '\\"',
+}
+
+local function encode(data, key)
+ n = n + 1
+ if not tabs[n] then
+ tabs[n] = rep(' ', n)
+ end
+ local tp = type(data)
+ if tp == 'table' then
+ if not data[1] and next(data) then
+ -- 认为这个是哈希表
+ if key then
+ index=index+1;lines[index] = tabs[n] .. '"' .. gsub(key, '[\\\r\n\t"]', esc_map) .. '": {\r\n'
+ else
+ index=index+1;lines[index] = tabs[n] .. '{\r\n'
+ end
+ local meta = getmetatable(data)
+ local sep
+ if meta and meta.__pairs then
+ for k, v in meta.__pairs(data), data do
+ if encode(v, k) then
+ index=index+1;lines[index] = ',\r\n'
+ sep = true
+ end
+ end
+ else
+ local list = {}
+ local i = 0
+ for k in next, data do
+ i=i+1;list[i] = k
+ end
+ sort(list)
+ for j = 1, i do
+ local k = list[j]
+ if encode(data[k], k) then
+ index=index+1;lines[index] = ',\r\n'
+ sep = true
+ end
+ end
+ end
+ if sep then
+ lines[index] = '\r\n'
+ end
+ index=index+1;lines[index] = tabs[n] .. '}'
+ else
+ -- 认为这个是数组
+ if key then
+ index=index+1;lines[index] = tabs[n] .. '"' .. gsub(key, '[\\\r\n\t"]', esc_map) .. '": [\r\n'
+ else
+ index=index+1;lines[index] = tabs[n] .. '[\r\n'
+ end
+ local sep
+ for k, v in pairs(data) do
+ if encode(v) then
+ index=index+1;lines[index] = ',\r\n'
+ sep = true
+ end
+ end
+ if sep then
+ lines[index] = '\r\n'
+ end
+ index=index+1;lines[index] = tabs[n] .. ']'
+ end
+ elseif tp == 'number' then
+ data = tostring(data)
+ -- 判断 inf -inf -nan(ind) 1.#INF -1.#INF -1.#IND
+ if find(data, '%a') then
+ data = '0'
+ end
+ if key then
+ index=index+1;lines[index] = tabs[n] .. '"' .. gsub(key, '[\\\r\n\t"]', esc_map) .. '": ' .. data
+ else
+ index=index+1;lines[index] = tabs[n] .. data
+ end
+ elseif tp == 'boolean' then
+ if key then
+ index=index+1;lines[index] = tabs[n] .. '"' .. gsub(key, '[\\\r\n\t"]', esc_map) .. '": ' .. tostring(data)
+ else
+ index=index+1;lines[index] = tabs[n] .. tostring(data)
+ end
+ elseif tp == 'nil' then
+ if key then
+ index=index+1;lines[index] = tabs[n] .. '"' .. gsub(key, '[\\\r\n\t"]', esc_map) .. '": null'
+ else
+ index=index+1;lines[index] = tabs[n] .. 'null'
+ end
+ elseif tp == 'string' then
+ local str = gsub(data, '[\\\r\n\t"]', esc_map)
+ if key then
+ index=index+1;lines[index] = tabs[n] .. '"' .. gsub(key, '[\\\r\n\t"]', esc_map) .. '": "' .. str .. '"'
+ else
+ index=index+1;lines[index] = tabs[n] .. '"' .. str .. '"'
+ end
+ else
+ n = n - 1
+ return false
+ end
+ n = n - 1
+ return true
+end
+
+local function json(t)
+ lines = {}
+ index = 0
+
+ encode(t)
+
+ return table.concat(lines)
+end
+
+return json
diff --git a/script/src/json/init.lua b/script/src/json/init.lua
new file mode 100644
index 00000000..c28e7aed
--- /dev/null
+++ b/script/src/json/init.lua
@@ -0,0 +1,6 @@
+local api = {
+ decode = require 'json.decode',
+ encode = require 'json.encode',
+}
+
+return api
diff --git a/script/src/language.lua b/script/src/language.lua
new file mode 100644
index 00000000..3294c5b2
--- /dev/null
+++ b/script/src/language.lua
@@ -0,0 +1,136 @@
+local fs = require 'bee.filesystem'
+local lni = require 'lni'
+
+local function supportLanguage()
+ local list = {}
+ for path in (ROOT / 'locale'):list_directory() do
+ if fs.is_directory(path) then
+ list[#list+1] = path:filename():string():lower()
+ end
+ end
+ return list
+end
+
+local function osLanguage()
+ return LANG:lower()
+end
+
+local function getLanguage(id)
+ local support = supportLanguage()
+ -- 检查是否支持语言
+ if support[id] then
+ return id
+ end
+ -- 根据语言的前2个字母来找近似语言
+ for _, lang in ipairs(support) do
+ if lang:sub(1, 2) == id:sub(1, 2) then
+ return lang
+ end
+ end
+ -- 使用英文
+ return 'enUS'
+end
+
+local function loadFileByLanguage(name, language)
+ local path = ROOT / 'locale' / language / (name .. '.lni')
+ local buf = io.load(path)
+ if not buf then
+ return {}
+ end
+ local suc, tbl = xpcall(lni, log.error, buf, path:string())
+ if not suc then
+ return {}
+ end
+ return tbl
+end
+
+local function formatAsArray(str, ...)
+ local index = 0
+ local args = {...}
+ return str:gsub('%{(.-)%}', function (pat)
+ local id, fmt
+ local pos = pat:find(':', 1, true)
+ if pos then
+ id = pat:sub(1, pos-1)
+ fmt = pat:sub(pos+1)
+ else
+ id = pat
+ fmt = 's'
+ end
+ id = tonumber(id)
+ if not id then
+ index = index + 1
+ id = index
+ end
+ return ('%'..fmt):format(args[id])
+ end)
+end
+
+local function formatAsTable(str, ...)
+ local args = ...
+ return str:gsub('%{(.-)%}', function (pat)
+ local id, fmt
+ local pos = pat:find(':', 1, true)
+ if pos then
+ id = pat:sub(1, pos-1)
+ fmt = pat:sub(pos+1)
+ else
+ id = pat
+ fmt = 's'
+ end
+ if not id then
+ return
+ end
+ return ('%'..fmt):format(args[id])
+ end)
+end
+
+local function loadLang(name, language)
+ local tbl = loadFileByLanguage(name, 'en-US')
+ if language ~= 'en-US' then
+ local other = loadFileByLanguage(name, language)
+ for k, v in pairs(other) do
+ tbl[k] = v
+ end
+ end
+ return setmetatable(tbl, {
+ __index = function (self, key)
+ self[key] = key
+ return key
+ end,
+ __call = function (self, key, ...)
+ local str = self[key]
+ local suc, res
+ if type(...) == 'table' then
+ suc, res = pcall(formatAsTable, str, ...)
+ else
+ suc, res = pcall(formatAsArray, str, ...)
+ end
+ if suc then
+ return res
+ else
+ -- 这里不能使用翻译,以免死循环
+ log.warn(('[%s][%s-%s] formated error: %s'):format(
+ language, name, key, str
+ ))
+ return str
+ end
+ end,
+ })
+end
+
+local function init()
+ local id = osLanguage()
+ local language = getLanguage(id)
+ log.info(('VSC language: %s'):format(id))
+ log.info(('LS language: %s'):format(language))
+ return setmetatable({ id = language }, {
+ __index = function (self, name)
+ local tbl = loadLang(name, language)
+ self[name] = tbl
+ return tbl
+ end,
+ })
+end
+
+return init()
diff --git a/script/src/log.lua b/script/src/log.lua
new file mode 100644
index 00000000..d8e782c0
--- /dev/null
+++ b/script/src/log.lua
@@ -0,0 +1,116 @@
+local fs = require 'bee.filesystem'
+
+local log = {}
+
+log.file = nil
+log.start_time = os.time() - os.clock()
+log.size = 0
+log.max_size = 100 * 1024 * 1024
+
+local function trim_src(src)
+ src = src:sub(log.prefix_len + 3, -5)
+ src = src:gsub('^[/\\]+', '')
+ src = src:gsub('[\\/]+', '.')
+ return src
+end
+
+local function init_log_file()
+ if not log.file then
+ log.file = io.open(log.path, 'w')
+ if not log.file then
+ return
+ end
+ log.file:write('')
+ log.file:close()
+ log.file = io.open(log.path, 'ab')
+ if not log.file then
+ return
+ end
+ log.file:setvbuf 'no'
+ end
+end
+
+local function push_log(level, ...)
+ if not log.path then
+ return
+ end
+ if log.size > log.max_size then
+ return
+ end
+ local t = table.pack(...)
+ for i = 1, t.n do
+ t[i] = tostring(t[i])
+ end
+ local str = table.concat(t, '\t', 1, t.n)
+ if level == 'error' then
+ str = str .. '\n' .. debug.traceback(nil, 3)
+ io.stderr:write(str .. '\n')
+ end
+ init_log_file()
+ if not log.file then
+ return
+ end
+ local sec, ms = math.modf(log.start_time + os.clock())
+ local timestr = os.date('%Y-%m-%d %H:%M:%S', sec)
+ local info = debug.getinfo(3, 'Sl')
+ local buf
+ if info and info.currentline > 0 then
+ buf = ('[%s.%03.f][%s]: [%s:%s]%s\n'):format(timestr, ms * 1000, level, trim_src(info.source), info.currentline, str)
+ else
+ buf = ('[%s.%03.f][%s]: %s\n'):format(timestr, ms * 1000, level, str)
+ end
+ log.file:write(buf)
+ log.size = log.size + #buf
+ if log.size > log.max_size then
+ log.file:write('[REACH MAX SIZE]')
+ end
+ return str
+end
+
+function log.info(...)
+ push_log('info', ...)
+end
+
+function log.debug(...)
+ push_log('debug', ...)
+end
+
+function log.trace(...)
+ push_log('trace', ...)
+end
+
+function log.warn(...)
+ push_log('warn', ...)
+end
+
+function log.error(...)
+ return push_log('error', ...)
+end
+
+function log.init(root, path)
+ local lastBuf
+ if log.file then
+ log.file:close()
+ log.file = nil
+ local file = io.open(log.path, 'rb')
+ if file then
+ lastBuf = file:read 'a'
+ file:close()
+ end
+ end
+ log.path = path:string()
+ log.prefix_len = #root:string()
+ log.size = 0
+ if not fs.exists(path:parent_path()) then
+ fs.create_directories(path:parent_path())
+ end
+ if lastBuf then
+ init_log_file()
+ if log.file then
+ log.file:write(lastBuf)
+ log.size = log.size + #lastBuf
+ end
+ end
+end
+
+return log
diff --git a/script/src/meta/type.lua b/script/src/meta/type.lua
new file mode 100644
index 00000000..9b47d5bc
--- /dev/null
+++ b/script/src/meta/type.lua
@@ -0,0 +1,4 @@
+---@class uri string
+---@class path
+
+"This is syntax error, due to `workspace.library`, this error never shows."
diff --git a/script/src/method/exit.lua b/script/src/method/exit.lua
new file mode 100644
index 00000000..fa550243
--- /dev/null
+++ b/script/src/method/exit.lua
@@ -0,0 +1,4 @@
+return function ()
+ log.info('Server exited.')
+ os.exit(true)
+end
diff --git a/script/src/method/init.lua b/script/src/method/init.lua
new file mode 100644
index 00000000..8827768b
--- /dev/null
+++ b/script/src/method/init.lua
@@ -0,0 +1,32 @@
+local method = {}
+
+local function init(name)
+ method[name] = require('method.' .. name:gsub('/', '.'))
+end
+
+init 'exit'
+init 'initialize'
+init 'initialized'
+init 'shutdown'
+init 'textDocument/codeAction'
+init 'textDocument/completion'
+init 'textDocument/definition'
+init 'textDocument/didOpen'
+init 'textDocument/didChange'
+init 'textDocument/didClose'
+init 'textDocument/documentHighlight'
+init 'textDocument/documentSymbol'
+init 'textDocument/foldingRange'
+init 'textDocument/hover'
+init 'textDocument/implementation'
+init 'textDocument/onTypeFormatting'
+init 'textDocument/publishDiagnostics'
+init 'textDocument/rename'
+init 'textDocument/references'
+init 'textDocument/signatureHelp'
+init 'workspace/didChangeConfiguration'
+init 'workspace/didChangeWatchedFiles'
+init 'workspace/didChangeWorkspaceFolders'
+init 'workspace/executeCommand'
+
+return method
diff --git a/script/src/method/initialize.lua b/script/src/method/initialize.lua
new file mode 100644
index 00000000..02a96695
--- /dev/null
+++ b/script/src/method/initialize.lua
@@ -0,0 +1,50 @@
+local function allWords()
+ local str = [[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.:('"[,#*@| ]]
+ local list = {}
+ for c in str:gmatch '.' do
+ list[#list+1] = c
+ end
+ return list
+end
+
+return function (lsp)
+ lsp._inited = true
+ return {
+ capabilities = {
+ hoverProvider = true,
+ definitionProvider = true,
+ referencesProvider = true,
+ renameProvider = true,
+ documentSymbolProvider = true,
+ documentHighlightProvider = true,
+ codeActionProvider = true,
+ foldingRangeProvider = true,
+ signatureHelpProvider = {
+ triggerCharacters = { '(', ',' },
+ },
+ -- 文本同步方式
+ textDocumentSync = {
+ -- 打开关闭文本时通知
+ openClose = true,
+ -- 文本改变时完全通知 TODO 支持差量更新(2)
+ change = 1,
+ },
+ workspace = {
+ workspaceFolders = {
+ supported = true,
+ changeNotifications = true,
+ }
+ },
+ documentOnTypeFormattingProvider = {
+ firstTriggerCharacter = '}',
+ },
+ executeCommandProvider = {
+ commands = {
+ 'config',
+ 'removeSpace',
+ 'solve',
+ },
+ },
+ }
+ }
+end
diff --git a/script/src/method/initialized.lua b/script/src/method/initialized.lua
new file mode 100644
index 00000000..d84a2159
--- /dev/null
+++ b/script/src/method/initialized.lua
@@ -0,0 +1,69 @@
+local rpc = require 'rpc'
+local workspace = require 'workspace'
+
+local function initAfterConfig(lsp, firstScope)
+ if firstScope then
+ lsp.workspace = workspace(lsp, firstScope.name)
+ lsp.workspace:init(firstScope.uri)
+ end
+ -- 必须动态注册的事件:
+ rpc:request('client/registerCapability', {
+ registrations = {
+ -- 监视文件变化
+ {
+ id = '0',
+ method = 'workspace/didChangeWatchedFiles',
+ registerOptions = {
+ watchers = {
+ {
+ globPattern = '**/',
+ kind = 1 | 2 | 4,
+ }
+ },
+ },
+ },
+ -- 配置变化
+ {
+ id = '1',
+ method = 'workspace/didChangeConfiguration',
+ }
+ }
+ }, function ()
+ log.debug('client/registerCapability Success!')
+ end)
+end
+
+return function (lsp)
+ -- 请求工作目录
+ rpc:request('workspace/workspaceFolders', nil, function (folders)
+ local firstScope
+ if folders then
+ firstScope = folders[1]
+ end
+ local uri = firstScope and firstScope.uri
+ -- 请求配置
+ rpc:request('workspace/configuration', {
+ items = {
+ {
+ scopeUri = uri,
+ section = 'Lua',
+ },
+ {
+ scopeUri = uri,
+ section = 'files.associations',
+ },
+ {
+ scopeUri = uri,
+ section = 'files.exclude',
+ }
+ },
+ }, function (configs)
+ lsp:onUpdateConfig(configs[1], {
+ associations = configs[2],
+ exclude = configs[3],
+ })
+ initAfterConfig(lsp, firstScope)
+ end)
+ end)
+ return true
+end
diff --git a/script/src/method/shutdown.lua b/script/src/method/shutdown.lua
new file mode 100644
index 00000000..bb81306e
--- /dev/null
+++ b/script/src/method/shutdown.lua
@@ -0,0 +1,4 @@
+return function ()
+ log.info('Server shutdown.')
+ return true
+end
diff --git a/script/src/method/textDocument/codeAction.lua b/script/src/method/textDocument/codeAction.lua
new file mode 100644
index 00000000..3c6e8d49
--- /dev/null
+++ b/script/src/method/textDocument/codeAction.lua
@@ -0,0 +1,23 @@
+local core = require 'core'
+
+return function (lsp, params)
+ local uri = params.textDocument.uri
+ local vm, lines = lsp:getVM(uri)
+ if not vm then
+ return
+ end
+ local diagnostics = params.context.diagnostics
+ local range = params.range
+
+ local results = core.codeAction(lsp
+ , uri
+ , diagnostics
+ , range
+ )
+
+ if #results == 0 then
+ return nil
+ end
+
+ return results
+end
diff --git a/script/src/method/textDocument/completion.lua b/script/src/method/textDocument/completion.lua
new file mode 100644
index 00000000..4c7581df
--- /dev/null
+++ b/script/src/method/textDocument/completion.lua
@@ -0,0 +1,104 @@
+local core = require 'core'
+local parser = require 'parser'
+
+local function posToRange(lines, start, finish)
+ local start_row, start_col = lines:rowcol(start)
+ local finish_row, finish_col = lines:rowcol(finish)
+ return {
+ start = {
+ line = start_row - 1,
+ character = start_col - 1,
+ },
+ ['end'] = {
+ line = finish_row - 1,
+ character = finish_col,
+ },
+ }
+end
+
+local function fastCompletion(lsp, params, lines)
+ local uri = params.textDocument.uri
+ local text, oldText = lsp:getText(uri)
+ -- lua是从1开始的,因此都要+1
+ local position = lines:positionAsChar(params.position.line + 1, params.position.character)
+
+ local vm = lsp:getVM(uri)
+ if not vm then
+ vm = lsp:loadVM(uri)
+ if not vm then
+ return nil
+ end
+ end
+
+ local items = core.completion(vm, text, position, oldText)
+ if not items or #items == 0 then
+ vm = lsp:loadVM(uri)
+ if not vm then
+ return nil
+ end
+ items = core.completion(vm, text, position)
+ if not items or #items == 0 then
+ return nil
+ end
+ end
+
+ return items
+end
+
+local function finishCompletion(lsp, params, lines)
+ local uri = params.textDocument.uri
+ local text = lsp:getText(uri)
+ -- lua是从1开始的,因此都要+1
+ local position = lines:positionAsChar(params.position.line + 1, params.position.character)
+
+ local vm = lsp:loadVM(uri)
+ if not vm then
+ return nil
+ end
+
+ local items = core.completion(vm, text, position)
+ if not items or #items == 0 then
+ return nil
+ end
+
+ return items
+end
+
+return function (lsp, params)
+ local uri = params.textDocument.uri
+ local text, oldText = lsp:getText(uri)
+ if not text then
+ return nil
+ end
+
+ local lines = parser:lines(text, 'utf8')
+ local items = fastCompletion(lsp, params, lines)
+ --local items = finishCompletion(lsp, params, lines)
+ if not items then
+ return nil
+ end
+
+ for i, item in ipairs(items) do
+ item.sortText = ('%04d'):format(i)
+ item.insertTextFormat = 2
+ item.insertText = item.insertText or item.label
+ if item.textEdit then
+ item.textEdit.range = posToRange(lines, item.textEdit.start, item.textEdit.finish)
+ item.textEdit.start = nil
+ item.textEdit.finish = nil
+ end
+ if item.additionalTextEdits then
+ for _, textEdit in ipairs(item.additionalTextEdits) do
+ textEdit.range = posToRange(lines, textEdit.start, textEdit.finish)
+ textEdit.start = nil
+ textEdit.finish = nil
+ end
+ end
+ end
+
+ local response = {
+ isIncomplete = true,
+ items = items,
+ }
+ return response
+end
diff --git a/script/src/method/textDocument/definition.lua b/script/src/method/textDocument/definition.lua
new file mode 100644
index 00000000..dbf9e41c
--- /dev/null
+++ b/script/src/method/textDocument/definition.lua
@@ -0,0 +1,88 @@
+local core = require 'core'
+
+local function findResult(lsp, uri, position)
+ local vm = lsp:getVM(uri)
+
+ local positions, isGlobal = core.definition(vm, position, 'definition')
+ if not positions then
+ return nil, isGlobal
+ end
+
+ local locations = {}
+ for i, position in ipairs(positions) do
+ local start, finish, valueUri = position[1], position[2], (position[3] or uri)
+ local vm, valueLines = lsp:getVM(valueUri)
+ if valueLines then
+ local start_row, start_col = valueLines:rowcol(start)
+ local finish_row, finish_col = valueLines:rowcol(finish)
+ locations[#locations+1] = {
+ uri = valueUri,
+ range = {
+ start = {
+ line = start_row - 1,
+ character = start_col - 1,
+ },
+ ['end'] = {
+ line = finish_row - 1,
+ -- 这里不用-1,因为前端期待的是匹配完成后的位置
+ character = finish_col,
+ },
+ }
+ }
+ elseif vm then
+ locations[#locations+1] = {
+ uri = valueUri,
+ range = {
+ start = {
+ line = 0,
+ character = 0,
+ },
+ ['end'] = {
+ line = 0,
+ character = 0,
+ },
+ }
+ }
+ end
+ end
+
+ if #locations == 0 then
+ return nil, isGlobal
+ end
+
+ return locations, isGlobal
+end
+
+local LastTask
+
+---@param lsp LSP
+---@param params table
+return function (lsp, params)
+ local uri = params.textDocument.uri
+ local vm, lines = lsp:loadVM(uri)
+ if not vm then
+ return nil
+ end
+
+ if LastTask then
+ LastTask:remove()
+ LastTask = nil
+ end
+
+ -- lua是从1开始的,因此都要+1
+ local position = lines:positionAsChar(params.position.line + 1, params.position.character)
+
+ return function (response)
+ local clock = os.clock()
+ LastTask = ac.loop(0.1, function ()
+ local result, isGlobal = findResult(lsp, uri, position)
+ if isGlobal and lsp:isWaitingCompile() and os.clock() - clock < 1 then
+ return
+ end
+ response(result)
+ LastTask:remove()
+ LastTask = nil
+ end)
+ LastTask:onTimer()
+ end
+end
diff --git a/script/src/method/textDocument/didChange.lua b/script/src/method/textDocument/didChange.lua
new file mode 100644
index 00000000..82e6c096
--- /dev/null
+++ b/script/src/method/textDocument/didChange.lua
@@ -0,0 +1,16 @@
+return function (lsp, params)
+ local doc = params.textDocument
+ local change = params.contentChanges
+ if lsp.workspace then
+ local path = lsp.workspace:relativePathByUri(doc.uri)
+ if not path or not lsp.workspace:isLuaFile(path) then
+ return
+ end
+ if not lsp:isOpen(doc.uri) and lsp.workspace.gitignore(path:string()) then
+ return
+ end
+ end
+ -- TODO 支持差量更新
+ lsp:saveText(doc.uri, doc.version, change[1].text)
+ return true
+end
diff --git a/script/src/method/textDocument/didClose.lua b/script/src/method/textDocument/didClose.lua
new file mode 100644
index 00000000..589b212f
--- /dev/null
+++ b/script/src/method/textDocument/didClose.lua
@@ -0,0 +1,5 @@
+return function (lsp, params)
+ local doc = params.textDocument
+ lsp:close(doc.uri)
+ return true
+end
diff --git a/script/src/method/textDocument/didOpen.lua b/script/src/method/textDocument/didOpen.lua
new file mode 100644
index 00000000..e2a67fd2
--- /dev/null
+++ b/script/src/method/textDocument/didOpen.lua
@@ -0,0 +1,5 @@
+return function (lsp, params)
+ local doc = params.textDocument
+ lsp:open(doc.uri, doc.version, doc.text)
+ return true
+end
diff --git a/script/src/method/textDocument/documentHighlight.lua b/script/src/method/textDocument/documentHighlight.lua
new file mode 100644
index 00000000..377ffcdf
--- /dev/null
+++ b/script/src/method/textDocument/documentHighlight.lua
@@ -0,0 +1,37 @@
+local core = require 'core'
+
+return function (lsp, params)
+ local uri = params.textDocument.uri
+ local vm, lines = lsp:loadVM(uri)
+ if not vm then
+ return nil
+ end
+ local position = lines:positionAsChar(params.position.line + 1, params.position.character)
+ local positions = core.highlight(vm, position)
+ if not positions then
+ return nil
+ end
+
+ local result = {}
+ for i, position in ipairs(positions) do
+ local start, finish = position[1], position[2]
+ local start_row, start_col = lines:rowcol(start)
+ local finish_row, finish_col = lines:rowcol(finish)
+ result[i] = {
+ range = {
+ start = {
+ line = start_row - 1,
+ character = start_col - 1,
+ },
+ ['end'] = {
+ line = finish_row - 1,
+ -- 这里不用-1,因为前端期待的是匹配完成后的位置
+ character = finish_col,
+ },
+ },
+ kind = position[3],
+ }
+ end
+
+ return result
+end
diff --git a/script/src/method/textDocument/documentSymbol.lua b/script/src/method/textDocument/documentSymbol.lua
new file mode 100644
index 00000000..a4b0c3b7
--- /dev/null
+++ b/script/src/method/textDocument/documentSymbol.lua
@@ -0,0 +1,72 @@
+local core = require 'core'
+local lang = require 'language'
+
+local timerCache = {}
+
+local function posToRange(lines, start, finish)
+ local start_row, start_col = lines:rowcol(start)
+ local finish_row, finish_col = lines:rowcol(finish)
+ return {
+ start = {
+ line = start_row - 1,
+ character = start_col - 1,
+ },
+ ['end'] = {
+ line = finish_row - 1,
+ character = finish_col,
+ },
+ }
+end
+
+local function convertRange(lines, symbol)
+ symbol.range = posToRange(lines, symbol.range[1], symbol.range[2])
+ symbol.selectionRange = posToRange(lines, symbol.selectionRange[1], symbol.selectionRange[2])
+ if symbol.name == '' then
+ symbol.name = lang.script.SYMBOL_ANONYMOUS
+ end
+
+ if symbol.children then
+ for _, child in ipairs(symbol.children) do
+ convertRange(lines, child)
+ end
+ end
+end
+
+return function (lsp, params)
+ local uri = params.textDocument.uri
+
+ if timerCache[uri] then
+ timerCache[uri]:remove()
+ timerCache[uri] = nil
+ end
+
+ return function (response)
+ local clock = os.clock()
+ timerCache[uri] = ac.loop(0.1, function (t)
+ local vm, lines = lsp:getVM(uri)
+ if not vm then
+ if os.clock() - clock > 10 then
+ t:remove()
+ timerCache[uri] = nil
+ response(nil)
+ end
+ return
+ end
+
+ t:remove()
+ timerCache[uri] = nil
+
+ local symbols = core.documentSymbol(vm)
+ if not symbols then
+ response(nil)
+ return
+ end
+
+ for _, symbol in ipairs(symbols) do
+ convertRange(lines, symbol)
+ end
+
+ response(symbols)
+ end)
+ end
+end
diff --git a/script/src/method/textDocument/foldingRange.lua b/script/src/method/textDocument/foldingRange.lua
new file mode 100644
index 00000000..0320b422
--- /dev/null
+++ b/script/src/method/textDocument/foldingRange.lua
@@ -0,0 +1,57 @@
+local core = require 'core'
+
+local timerCache = {}
+
+local function convertRange(lines, range)
+ local start_row, start_col = lines:rowcol(range.start)
+ local finish_row, finish_col = lines:rowcol(range.finish)
+ local result = {
+ startLine = start_row - 1,
+ endLine = finish_row - 2,
+ kind = range.kind,
+ }
+ if result.startLine >= result.endLine then
+ return nil
+ end
+ return result
+end
+
+return function (lsp, params)
+ local uri = params.textDocument.uri
+ if timerCache[uri] then
+ timerCache[uri]:remove()
+ timerCache[uri] = nil
+ end
+
+ return function (response)
+ local clock = os.clock()
+ timerCache[uri] = ac.loop(0.1, function (t)
+ local vm, lines = lsp:getVM(uri)
+ if not vm then
+ if os.clock() - clock > 10 then
+ t:remove()
+ timerCache[uri] = nil
+ response(nil)
+ end
+ return
+ end
+
+ t:remove()
+ timerCache[uri] = nil
+
+ local comments = lsp:getComments(uri)
+ local ranges = core.foldingRange(vm, comments)
+ if not ranges then
+ response(nil)
+ return
+ end
+
+ local results = {}
+ for _, range in ipairs(ranges) do
+ results[#results+1] = convertRange(lines, range)
+ end
+
+ response(results)
+ end)
+ end
+end
diff --git a/script/src/method/textDocument/hover.lua b/script/src/method/textDocument/hover.lua
new file mode 100644
index 00000000..f8dba27c
--- /dev/null
+++ b/script/src/method/textDocument/hover.lua
@@ -0,0 +1,44 @@
+local core = require 'core'
+
+return function (lsp, params)
+ local uri = params.textDocument.uri
+ local vm, lines = lsp:loadVM(uri)
+ if not vm then
+ return nil
+ end
+ -- lua是从1开始的,因此都要+1
+ local position = lines:positionAsChar(params.position.line + 1, params.position.character)
+
+ local source = core.findSource(vm, position)
+ if not source then
+ return nil
+ end
+
+ local hover = core.hover(source, lsp)
+ if not hover then
+ return nil
+ end
+
+ local text = ([[
+```lua
+%s
+```
+```lua
+%s
+```
+%s
+```lua
+%s
+```
+%s
+]]):format(hover.label or '', hover.overloads or '', hover.description or '', hover.enum or '', hover.doc or '')
+
+ local response = {
+ contents = {
+ value = text:gsub("```lua\n\n```", ""),
+ kind = 'markdown',
+ }
+ }
+
+ return response
+end
diff --git a/script/src/method/textDocument/implementation.lua b/script/src/method/textDocument/implementation.lua
new file mode 100644
index 00000000..14e2f24c
--- /dev/null
+++ b/script/src/method/textDocument/implementation.lua
@@ -0,0 +1,108 @@
+local core = require 'core'
+
+local function checkWorkSpaceComplete(lsp, source)
+ if not source:bindValue() then
+ return
+ end
+ if not source:bindValue():get 'cross file' then
+ return
+ end
+ lsp:checkWorkSpaceComplete()
+end
+
+local function findResult(lsp, params)
+ local uri = params.textDocument.uri
+ local vm, lines = lsp:loadVM(uri)
+ if not vm then
+ return nil
+ end
+ -- lua是从1开始的,因此都要+1
+ local position = lines:positionAsChar(params.position.line + 1, params.position.character)
+ local source = core.findSource(vm, position)
+ if not source then
+ return nil
+ end
+
+ checkWorkSpaceComplete(lsp, source)
+
+ local positions = core.implementation(vm, source, lsp)
+ if not positions then
+ return nil
+ end
+
+ local locations = {}
+ for i, position in ipairs(positions) do
+ local start, finish, valueUri = position[1], position[2], (position[3] or uri)
+ local _, valueLines = lsp:loadVM(valueUri)
+ if valueLines then
+ local start_row, start_col = valueLines:rowcol(start)
+ local finish_row, finish_col = valueLines:rowcol(finish)
+ locations[#locations+1] = {
+ uri = valueUri,
+ range = {
+ start = {
+ line = start_row - 1,
+ character = start_col - 1,
+ },
+ ['end'] = {
+ line = finish_row - 1,
+ -- 这里不用-1,因为前端期待的是匹配完成后的位置
+ character = finish_col,
+ },
+ }
+ }
+ else
+ locations[#locations+1] = {
+ uri = valueUri,
+ range = {
+ start = {
+ line = 0,
+ character = 0,
+ },
+ ['end'] = {
+ line = 0,
+ character = 0,
+ },
+ }
+ }
+ end
+ end
+
+ if #locations == 0 then
+ return nil
+ end
+
+ return locations
+end
+
+local LastTask
+
+return function (lsp, params)
+ if LastTask then
+ LastTask:remove()
+ LastTask = nil
+ end
+ local result = findResult(lsp, params)
+ if result then
+ return result
+ end
+ return function (response)
+ local count = 0
+ LastTask = ac.loop(0.1, function ()
+ local result = findResult(lsp, params)
+ if result then
+ LastTask:remove()
+ LastTask = nil
+ response(result)
+ return
+ end
+ count = count + 1
+ if lsp:isWaitingCompile() and count < 10 then
+ return
+ end
+ LastTask:remove()
+ LastTask = nil
+ response(nil)
+ end)
+ end
+end
diff --git a/script/src/method/textDocument/onTypeFormatting.lua b/script/src/method/textDocument/onTypeFormatting.lua
new file mode 100644
index 00000000..fc9cbdc9
--- /dev/null
+++ b/script/src/method/textDocument/onTypeFormatting.lua
@@ -0,0 +1,14 @@
+return function (lsp, params)
+ local uri = params.textDocument.uri
+ local vm, lines = lsp:loadVM(uri)
+ --log.debug(table.dump(params))
+ if not vm then
+ return nil
+ end
+ local position = lines:position(params.position.line + 1, params.position.character)
+ local ch = params.ch
+ local options = params.options
+ local tabSize = options.tabSize
+ local insertSpaces = options.insertSpaces
+ return nil
+end
diff --git a/script/src/method/textDocument/publishDiagnostics.lua b/script/src/method/textDocument/publishDiagnostics.lua
new file mode 100644
index 00000000..c767e934
--- /dev/null
+++ b/script/src/method/textDocument/publishDiagnostics.lua
@@ -0,0 +1,163 @@
+local core = require 'core'
+local lang = require 'language'
+local config = require 'config'
+
+local DiagnosticSeverity = {
+ Error = 1,
+ Warning = 2,
+ Information = 3,
+ Hint = 4,
+}
+
+--[[
+/**
+ * Represents a related message and source code location for a diagnostic. This should be
+ * used to point to code locations that cause or related to a diagnostics, e.g when duplicating
+ * a symbol in a scope.
+ */
+export interface DiagnosticRelatedInformation {
+ /**
+ * The location of this related diagnostic information.
+ */
+ location: Location;
+
+ /**
+ * The message of this related diagnostic information.
+ */
+ message: string;
+}
+]]--
+
+local function getRange(start, finish, lines)
+ local start_row, start_col = lines:rowcol(start)
+ local finish_row, finish_col = lines:rowcol(finish)
+ return {
+ start = {
+ line = start_row - 1,
+ character = start_col - 1,
+ },
+ ['end'] = {
+ line = finish_row - 1,
+ -- 这里不用-1,因为前端期待的是匹配完成后的位置
+ character = finish_col,
+ },
+ }
+end
+
+local function createInfo(lsp, data, lines)
+ local diagnostic = {
+ source = lang.script.DIAG_DIAGNOSTICS,
+ range = getRange(data.start, data.finish, lines),
+ severity = data.level,
+ message = data.message,
+ code = data.code,
+ tags = data.tags,
+ }
+ if data.related then
+ local related = {}
+ for _, info in ipairs(data.related) do
+ local _, lines = lsp:getVM(info.uri)
+ if lines then
+ local message = info.message
+ if not message then
+ local start_line = lines:rowcol(info.start)
+ local finish_line = lines:rowcol(info.finish)
+ local chars = {}
+ for n = start_line, finish_line do
+ chars[#chars+1] = lines:line(n)
+ end
+ message = table.concat(chars, '\n')
+ end
+ related[#related+1] = {
+ message = message,
+ location = {
+ uri = info.uri,
+ range = getRange(info.start, info.finish, lines),
+ }
+ }
+ end
+ end
+ diagnostic.relatedInformation = related
+ end
+ return diagnostic
+end
+
+local function buildError(err, lines, uri)
+ local diagnostic = {
+ source = lang.script.DIAG_SYNTAX_CHECK,
+ message = lang.script('PARSER_'..err.type, err.info)
+ }
+ if err.version then
+ local currentVersion = err.info and err.info.version or config.config.runtime.version
+ if type(err.version) == 'table' then
+ diagnostic.message = ('%s(%s)'):format(diagnostic.message, lang.script('DIAG_NEED_VERSION', table.concat(err.version, '/'), currentVersion))
+ else
+ diagnostic.message = ('%s(%s)'):format(diagnostic.message, lang.script('DIAG_NEED_VERSION', err.version, currentVersion))
+ end
+ end
+ if err.level == 'error' then
+ diagnostic.severity = DiagnosticSeverity.Error
+ else
+ diagnostic.severity = DiagnosticSeverity.Warning
+ end
+ local startrow, startcol = lines:rowcol(err.start)
+ local endrow, endcol = lines:rowcol(err.finish)
+ if err.type == 'UNKNOWN' then
+ local _, max = lines:range(endrow)
+ endcol = max
+ end
+ local range = {
+ start = {
+ line = startrow - 1,
+ character = startcol - 1,
+ },
+ ['end'] = {
+ line = endrow - 1,
+ character = endcol,
+ },
+ }
+ diagnostic.range = range
+
+ local related = err.info and err.info.related
+ if related then
+ local start_line = lines:rowcol(related[1])
+ local finish_line = lines:rowcol(related[2])
+ local chars = {}
+ for n = start_line, finish_line do
+ chars[#chars+1] = lines:line(n)
+ end
+ local message = table.concat(chars, '\n')
+ diagnostic.relatedInformation = {
+ {
+ message = message,
+ location = {
+ uri = uri,
+ range = getRange(related[1], related[2], lines),
+ }
+ }
+ }
+ end
+ return diagnostic
+end
+
+return function (lsp, params)
+ local vm = params.vm
+ local lines = params.lines
+ local uri = params.uri
+ local errs = lsp:getAstErrors(uri)
+
+ local diagnostics = {}
+ if vm then
+ local datas = core.diagnostics(vm, lines, uri)
+ for _, data in ipairs(datas) do
+ diagnostics[#diagnostics+1] = createInfo(lsp, data, lines)
+ end
+ end
+ if errs then
+ for _, err in ipairs(errs) do
+ diagnostics[#diagnostics+1] = buildError(err, lines, uri)
+ end
+ end
+
+ return diagnostics
+end
diff --git a/script/src/method/textDocument/references.lua b/script/src/method/textDocument/references.lua
new file mode 100644
index 00000000..0a198323
--- /dev/null
+++ b/script/src/method/textDocument/references.lua
@@ -0,0 +1,86 @@
+local core = require 'core'
+local LastTask
+
+local function findReferences(lsp, uri, position)
+ local vm = lsp:getVM(uri)
+
+ local positions, isGlobal = core.definition(vm, position, 'reference')
+ if not positions then
+ return nil, isGlobal
+ end
+
+ local locations = {}
+ for i, position in ipairs(positions) do
+ local start, finish, valueUri = position[1], position[2], (position[3] or uri)
+ local vm, valueLines = lsp:getVM(valueUri)
+ if valueLines then
+ local start_row, start_col = valueLines:rowcol(start)
+ local finish_row, finish_col = valueLines:rowcol(finish)
+ locations[#locations+1] = {
+ uri = valueUri,
+ range = {
+ start = {
+ line = start_row - 1,
+ character = start_col - 1,
+ },
+ ['end'] = {
+ line = finish_row - 1,
+ -- 这里不用-1,因为前端期待的是匹配完成后的位置
+ character = finish_col,
+ },
+ }
+ }
+ elseif vm then
+ locations[#locations+1] = {
+ uri = valueUri,
+ range = {
+ start = {
+ line = 0,
+ character = 0,
+ },
+ ['end'] = {
+ line = 0,
+ character = 0,
+ },
+ }
+ }
+ end
+ end
+
+ if #locations == 0 then
+ return nil, isGlobal
+ end
+
+ return locations, isGlobal
+end
+
+return function (lsp, params)
+ local uri = params.textDocument.uri
+ local declarat = params.context.includeDeclaration
+ local vm, lines = lsp:loadVM(uri)
+ if not vm then
+ return nil
+ end
+
+ if LastTask then
+ LastTask:remove()
+ LastTask = nil
+ end
+
+ -- lua是从1开始的,因此都要+1
+ local position = lines:positionAsChar(params.position.line + 1, params.position.character)
+
+ return function (response)
+ local clock = os.clock()
+ LastTask = ac.loop(0.1, function ()
+ local positions, isGlobal = findReferences(lsp, uri, position)
+ if isGlobal and lsp:isWaitingCompile() and os.clock() - clock < 5 then
+ return
+ end
+ response(positions)
+ LastTask:remove()
+ LastTask = nil
+ end)
+ LastTask:onTimer()
+ end
+end
diff --git a/script/src/method/textDocument/rename.lua b/script/src/method/textDocument/rename.lua
new file mode 100644
index 00000000..6da9c721
--- /dev/null
+++ b/script/src/method/textDocument/rename.lua
@@ -0,0 +1,50 @@
+local core = require 'core'
+
+return function (lsp, params)
+ local uri = params.textDocument.uri
+ local newName = params.newName
+ local vm, lines = lsp:loadVM(uri)
+ if not vm then
+ return {}
+ end
+ local position = lines:positionAsChar(params.position.line + 1, params.position.character)
+ local positions = core.rename(vm, position, newName)
+ if not positions then
+ return {}
+ end
+
+ local changes = {}
+ for _, position in ipairs(positions) do
+ local start, finish, uri = position[1], position[2], position[3]
+ local _, lines = lsp:getVM(uri)
+ if not lines then
+ goto CONTINUE
+ end
+ local start_row, start_col = lines:rowcol(start)
+ local finish_row, finish_col = lines:rowcol(finish)
+ if not changes[uri] then
+ changes[uri] = {}
+ end
+ changes[uri][#changes[uri]+1] = {
+ newText = newName,
+ range = {
+ start = {
+ line = start_row - 1,
+ character = start_col - 1,
+ },
+ ['end'] = {
+ line = finish_row - 1,
+ -- 这里不用-1,因为前端期待的是匹配完成后的位置
+ character = finish_col,
+ },
+ }
+ }
+ ::CONTINUE::
+ end
+
+ local response = {
+ changes = changes,
+ }
+
+ return response
+end
diff --git a/script/src/method/textDocument/signatureHelp.lua b/script/src/method/textDocument/signatureHelp.lua
new file mode 100644
index 00000000..01d6289d
--- /dev/null
+++ b/script/src/method/textDocument/signatureHelp.lua
@@ -0,0 +1,50 @@
+local core = require 'core'
+
+return function (lsp, params)
+ local uri = params.textDocument.uri
+ local vm, lines = lsp:loadVM(uri)
+ if not vm then
+ return
+ end
+ local position = lines:position(params.position.line + 1, params.position.character + 1)
+ local hovers = core.signature(vm, position)
+ if not hovers then
+ return
+ end
+
+ local hover = hovers[1]
+ local desc = {}
+ desc[#desc+1] = hover.description
+ local active
+ local signatures = {}
+ for i, hover in ipairs(hovers) do
+ local signature = {
+ label = hover.label,
+ documentation = {
+ kind = 'markdown',
+ value = table.concat(desc, '\n'),
+ },
+ }
+ if hover.argLabel then
+ if not active then
+ active = i
+ end
+ signature.parameters = {
+ {
+ label = {
+ hover.argLabel[1] - 1,
+ hover.argLabel[2],
+ }
+ }
+ }
+ end
+ signatures[i] = signature
+ end
+
+ local response = {
+ signatures = signatures,
+ activeSignature = active and active - 1 or 0,
+ }
+
+ return response
+end
diff --git a/script/src/method/workspace/didChangeConfiguration.lua b/script/src/method/workspace/didChangeConfiguration.lua
new file mode 100644
index 00000000..ecaa9182
--- /dev/null
+++ b/script/src/method/workspace/didChangeConfiguration.lua
@@ -0,0 +1,27 @@
+local rpc = require 'rpc'
+
+return function (lsp)
+ local uri = lsp.workspace and lsp.workspace.uri
+ -- 请求配置
+ rpc:request('workspace/configuration', {
+ items = {
+ {
+ scopeUri = uri,
+ section = 'Lua',
+ },
+ {
+ scopeUri = uri,
+ section = 'files.associations',
+ },
+ {
+ scopeUri = uri,
+ section = 'files.exclude',
+ }
+ },
+ }, function (configs)
+ lsp:onUpdateConfig(configs[1], {
+ associations = configs[2],
+ exclude = configs[3],
+ })
+ end)
+end
diff --git a/script/src/method/workspace/didChangeWatchedFiles.lua b/script/src/method/workspace/didChangeWatchedFiles.lua
new file mode 100644
index 00000000..3ce68924
--- /dev/null
+++ b/script/src/method/workspace/didChangeWatchedFiles.lua
@@ -0,0 +1,44 @@
+local fs = require 'bee.filesystem'
+local uric = require 'uri'
+
+local FileChangeType = {
+ Created = 1,
+ Changed = 2,
+ Deleted = 3,
+}
+
+return function (lsp, params)
+ if not lsp.workspace then
+ return
+ end
+ local needReset
+ for _, change in ipairs(params.changes) do
+ local path = uric.decode(change.uri)
+ if not path then
+ goto CONTINUE
+ end
+ if change.type == FileChangeType.Created then
+ lsp.workspace:addFile(path)
+ if lsp:getVM(change.uri) then
+ needReset = true
+ end
+ elseif change.type == FileChangeType.Deleted then
+ lsp.workspace:removeFile(path)
+ if lsp:getVM(change.uri) then
+ needReset = true
+ end
+ end
+ -- 排除类文件发生更改需要重新扫描
+ local filename = path:filename():string()
+ if lsp.workspace:fileNameEq(filename, '.gitignore')
+ or lsp.workspace:fileNameEq(filename, '.gitmodules')
+ then
+ lsp:reScanFiles()
+ end
+ ::CONTINUE::
+ end
+ -- 缓存过的文件发生变化后,重新计算
+ if needReset then
+ lsp.workspace:reset()
+ end
+end
diff --git a/script/src/method/workspace/didChangeWorkspaceFolders.lua b/script/src/method/workspace/didChangeWorkspaceFolders.lua
new file mode 100644
index 00000000..01a28abd
--- /dev/null
+++ b/script/src/method/workspace/didChangeWorkspaceFolders.lua
@@ -0,0 +1,20 @@
+local rpc = require 'rpc'
+local lang = require 'language'
+
+return function ()
+ -- 暂不支持多个工作目录,因此当工作目录切换时,暴力结束服务,让前端重启服务
+ rpc:requestWait('window/showMessageRequest', {
+ type = 3,
+ message = lang.script('MWS_NOT_SUPPORT', '[Lua]'),
+ actions = {
+ {
+ title = lang.script.MWS_RESTART,
+ }
+ }
+ }, function ()
+ os.exit(true)
+ end)
+ ac.wait(5, function ()
+ os.exit(true)
+ end)
+end
diff --git a/script/src/method/workspace/executeCommand.lua b/script/src/method/workspace/executeCommand.lua
new file mode 100644
index 00000000..cfa4023e
--- /dev/null
+++ b/script/src/method/workspace/executeCommand.lua
@@ -0,0 +1,258 @@
+local fs = require 'bee.filesystem'
+local json = require 'json'
+local config = require 'config'
+local rpc = require 'rpc'
+local lang = require 'language'
+local platform = require 'bee.platform'
+
+local command = {}
+
+local function isContainPos(obj, start, finish)
+ if obj.start <= start and obj.finish >= finish then
+ return true
+ end
+ return false
+end
+
+local function isInString(vm, start, finish)
+ return vm:eachSource(function (source)
+ if source.type == 'string' and isContainPos(source, start, finish) then
+ return true
+ end
+ end)
+end
+
+local function posToRange(lines, start, finish)
+ local start_row, start_col = lines:rowcol(start)
+ local finish_row, finish_col = lines:rowcol(finish)
+ return {
+ start = {
+ line = start_row - 1,
+ character = start_col - 1,
+ },
+ ['end'] = {
+ line = finish_row - 1,
+ character = finish_col,
+ },
+ }
+end
+
+function command.config(lsp, data)
+ local def = config.config
+ for _, k in ipairs(data.key) do
+ def = def[k]
+ if not def then
+ return
+ end
+ end
+ if data.action == 'add' then
+ if type(def) ~= 'table' then
+ return
+ end
+ end
+
+ local vscodePath
+ local mode
+ if lsp.workspace then
+ vscodePath = lsp.workspace.root / '.vscode'
+ mode = 'workspace'
+ else
+ if platform.OS == 'Windows' then
+ vscodePath = fs.path(os.getenv 'USERPROFILE') / 'AppData' / 'Roaming' / 'Code' / 'User'
+ else
+ vscodePath = fs.path(os.getenv 'HOME') / '.vscode-server' / 'data' / 'Machine'
+ end
+ mode = 'user'
+ if not fs.exists(vscodePath) then
+ rpc:notify('window/showMessage', {
+ type = 3,
+ message = lang.script.MWS_UCONFIG_FAILED,
+ })
+ return
+ end
+ end
+
+ local settingBuf = io.load(vscodePath / 'settings.json')
+ if not settingBuf then
+ fs.create_directories(vscodePath)
+ end
+
+ local setting = json.decode(settingBuf or '', true) or {}
+ local key = 'Lua.' .. table.concat(data.key, '.')
+ local attr = setting[key]
+
+ if data.action == 'add' then
+ if attr == nil then
+ attr = {}
+ elseif type(attr) == 'string' then
+ attr = {}
+ for str in attr:gmatch '[^;]+' do
+ attr[#attr+1] = str
+ end
+ elseif type(attr) == 'table' then
+ else
+ return
+ end
+
+ attr[#attr+1] = data.value
+ setting[key] = attr
+ elseif data.action == 'set' then
+ setting[key] = data.value
+ end
+
+ io.save(vscodePath / 'settings.json', json.encode(setting) .. '\r\n')
+
+ if mode == 'workspace' then
+ rpc:notify('window/showMessage', {
+ type = 3,
+ message = lang.script.MWS_WCONFIG_UPDATED,
+ })
+ elseif mode == 'user' then
+ rpc:notify('window/showMessage', {
+ type = 3,
+ message = lang.script.MWS_UCONFIG_UPDATED,
+ })
+ end
+end
+
+function command.removeSpace(lsp, data)
+ local uri = data.uri
+ local vm, lines = lsp:getVM(uri)
+ if not vm then
+ return
+ end
+
+ local textEdit = {}
+ for i = 1, #lines do
+ local line = lines:line(i)
+ local pos = line:find '[ \t]+$'
+ if pos then
+ local start, finish = lines:range(i)
+ start = start + pos - 1
+ if isInString(vm, start, finish) then
+ goto NEXT_LINE
+ end
+ textEdit[#textEdit+1] = {
+ range = posToRange(lines, start, finish),
+ newText = '',
+ }
+ goto NEXT_LINE
+ end
+
+ ::NEXT_LINE::
+ end
+
+ if #textEdit == 0 then
+ return
+ end
+
+ rpc:request('workspace/applyEdit', {
+ label = lang.script.COMMAND_REMOVE_SPACE,
+ edit = {
+ changes = {
+ [uri] = textEdit,
+ }
+ },
+ })
+end
+
+local opMap = {
+ ['+'] = true,
+ ['-'] = true,
+ ['*'] = true,
+ ['/'] = true,
+ ['//'] = true,
+ ['^'] = true,
+ ['<<'] = true,
+ ['>>'] = true,
+ ['&'] = true,
+ ['|'] = true,
+ ['~'] = true,
+ ['..'] = true,
+}
+
+local literalMap = {
+ ['number'] = true,
+ ['boolean'] = true,
+ ['string'] = true,
+ ['table'] = true,
+}
+
+function command.solve(lsp, data)
+ local uri = data.uri
+ local vm, lines = lsp:getVM(uri)
+ if not vm then
+ return
+ end
+
+ local start = lines:position(data.range.start.line + 1, data.range.start.character + 1)
+ local finish = lines:position(data.range['end'].line + 1, data.range['end'].character)
+
+ local result = vm:eachSource(function (source)
+ if not isContainPos(source, start, finish) then
+ return
+ end
+ if source.op ~= 'or' then
+ return
+ end
+ local first = source[1]
+ local second = source[2]
+ -- (a + b) or 0 --> a + (b or 0)
+ do
+ if opMap[first.op]
+ and first.type ~= 'unary'
+ and not second.op
+ and literalMap[second.type]
+ then
+ return {
+ start = source[1][2].start,
+ finish = source[2].finish,
+ }
+ end
+ end
+ -- a or (b + c) --> (a or b) + c
+ do
+ if opMap[second.op]
+ and second.type ~= 'unary'
+ and not first.op
+ and literalMap[second[1].type]
+ then
+ return {
+ start = source[1].start,
+ finish = source[2][1].finish,
+ }
+ end
+ end
+ end)
+
+ if not result then
+ return
+ end
+
+ rpc:request('workspace/applyEdit', {
+ label = lang.script.COMMAND_ADD_BRACKETS,
+ edit = {
+ changes = {
+ [uri] = {
+ {
+ range = posToRange(lines, result.start, result.start - 1),
+ newText = '(',
+ },
+ {
+ range = posToRange(lines, result.finish + 1, result.finish),
+ newText = ')',
+ },
+ }
+ }
+ },
+ })
+end
+
+return function (lsp, params)
+ local name = params.command
+ if not command[name] then
+ return
+ end
+ local result = command[name](lsp, params.arguments[1])
+ return result
+end
diff --git a/script/src/parser/ast.lua b/script/src/parser/ast.lua
new file mode 100644
index 00000000..38cd8576
--- /dev/null
+++ b/script/src/parser/ast.lua
@@ -0,0 +1,1912 @@
+local tonumber = tonumber
+local string_char = string.char
+local utf8_char = utf8.char
+local type = type
+local table = table
+
+local Errs
+local State
+local function pushError(err)
+ if err.finish < err.start then
+ err.finish = err.start
+ end
+ local last = Errs[#Errs]
+ if last then
+ if last.start <= err.start and last.finish >= err.finish then
+ return
+ end
+ end
+ err.level = err.level or 'error'
+ Errs[#Errs+1] = err
+ return err
+end
+
+-- goto 单独处理
+local RESERVED = {
+ ['and'] = true,
+ ['break'] = true,
+ ['do'] = true,
+ ['else'] = true,
+ ['elseif'] = true,
+ ['end'] = true,
+ ['false'] = true,
+ ['for'] = true,
+ ['function'] = true,
+ ['if'] = true,
+ ['in'] = true,
+ ['local'] = true,
+ ['nil'] = true,
+ ['not'] = true,
+ ['or'] = true,
+ ['repeat'] = true,
+ ['return'] = true,
+ ['then'] = true,
+ ['true'] = true,
+ ['until'] = true,
+ ['while'] = true,
+}
+
+local VersionOp = {
+ ['&'] = {'Lua 5.3', 'Lua 5.4'},
+ ['~'] = {'Lua 5.3', 'Lua 5.4'},
+ ['|'] = {'Lua 5.3', 'Lua 5.4'},
+ ['<<'] = {'Lua 5.3', 'Lua 5.4'},
+ ['>>'] = {'Lua 5.3', 'Lua 5.4'},
+ ['//'] = {'Lua 5.3', 'Lua 5.4'},
+}
+
+local function checkOpVersion(op, start)
+ local versions = VersionOp[op]
+ if not versions then
+ return
+ end
+ for i = 1, #versions do
+ if versions[i] == State.Version then
+ return
+ end
+ end
+ pushError {
+ type = 'UNSUPPORT_SYMBOL',
+ start = start,
+ finish = start + #op - 1,
+ version = versions,
+ info = {
+ version = State.Version,
+ }
+ }
+end
+
+local Exp
+
+local function expSplit(list, start, finish, level)
+ if start == finish then
+ return list[start]
+ end
+ local info = Exp[level]
+ if not info then
+ return
+ end
+ local func = info[1]
+ return func(list, start, finish, level)
+end
+
+local function binaryForward(list, start, finish, level)
+ local info = Exp[level]
+ for i = finish-1, start+2, -1 do
+ local op = list[i]
+ if info[op] then
+ local e1 = expSplit(list, start, i-2, level)
+ if not e1 then
+ goto CONTINUE
+ end
+ local e2 = expSplit(list, i+1, finish, level+1)
+ if not e2 then
+ goto CONTINUE
+ end
+ checkOpVersion(op, list[i-1])
+ return {
+ type = 'binary',
+ op = op,
+ start = e1.start,
+ finish = e2.finish,
+ [1] = e1,
+ [2] = e2,
+ }
+ end
+ ::CONTINUE::
+ end
+ return expSplit(list, start, finish, level+1)
+end
+
+local function binaryBackward(list, start, finish, level)
+ local info = Exp[level]
+ for i = start+2, finish-1 do
+ local op = list[i]
+ if info[op] then
+ local e1 = expSplit(list, start, i-2, level+1)
+ if not e1 then
+ goto CONTINUE
+ end
+ local e2 = expSplit(list, i+1, finish, level)
+ if not e2 then
+ goto CONTINUE
+ end
+ checkOpVersion(op, list[i-1])
+ return {
+ type = 'binary',
+ op = op,
+ start = e1.start,
+ finish = e2.finish,
+ [1] = e1,
+ [2] = e2,
+ }
+ end
+ ::CONTINUE::
+ end
+ return expSplit(list, start, finish, level+1)
+end
+
+local function unary(list, start, finish, level)
+ local info = Exp[level]
+ local op = list[start+1]
+ if info[op] then
+ local e1 = expSplit(list, start+2, finish, level)
+ if e1 then
+ checkOpVersion(op, list[start])
+ return {
+ type = 'unary',
+ op = op,
+ start = list[start],
+ finish = e1.finish,
+ [1] = e1,
+ }
+ end
+ end
+ return expSplit(list, start, finish, level+1)
+end
+
+local function checkMissEnd(start)
+ if not State.MissEndErr then
+ return
+ end
+ local err = State.MissEndErr
+ State.MissEndErr = nil
+ local _, finish = State.Lua:find('[%w_]+', start)
+ if not finish then
+ return
+ end
+ err.info.related = { start, finish }
+ pushError {
+ type = 'MISS_END',
+ start = start,
+ finish = finish,
+ }
+end
+
+Exp = {
+ {
+ ['or'] = true,
+ binaryForward,
+ },
+ {
+ ['and'] = true,
+ binaryForward,
+ },
+ {
+ ['<='] = true,
+ ['>='] = true,
+ ['<'] = true,
+ ['>'] = true,
+ ['~='] = true,
+ ['=='] = true,
+ binaryForward,
+ },
+ {
+ ['|'] = true,
+ binaryForward,
+ },
+ {
+ ['~'] = true,
+ binaryForward,
+ },
+ {
+ ['&'] = true,
+ binaryForward,
+ },
+ {
+ ['<<'] = true,
+ ['>>'] = true,
+ binaryForward,
+ },
+ {
+ ['..'] = true,
+ binaryBackward,
+ },
+ {
+ ['+'] = true,
+ ['-'] = true,
+ binaryForward,
+ },
+ {
+ ['*'] = true,
+ ['//'] = true,
+ ['/'] = true,
+ ['%'] = true,
+ binaryForward,
+ },
+ {
+ ['^'] = true,
+ binaryBackward,
+ },
+ {
+ ['not'] = true,
+ ['#'] = true,
+ ['~'] = true,
+ ['-'] = true,
+ unary,
+ },
+}
+
+local Defs = {
+ Nil = function (pos)
+ return {
+ type = 'nil',
+ start = pos,
+ finish = pos + 2,
+ }
+ end,
+ True = function (pos)
+ return {
+ type = 'boolean',
+ start = pos,
+ finish = pos + 3,
+ [1] = true,
+ }
+ end,
+ False = function (pos)
+ return {
+ type = 'boolean',
+ start = pos,
+ finish = pos + 4,
+ [1] = false,
+ }
+ end,
+ LongComment = function (beforeEq, afterEq, str, finish, missPos)
+ State.Comments[#State.Comments+1] = {
+ start = beforeEq,
+ finish = finish,
+ }
+ if missPos then
+ local endSymbol = ']' .. ('='):rep(afterEq-beforeEq) .. ']'
+ local s, _, w = str:find('(%][%=]*%])[%c%s]*$')
+ if s then
+ pushError {
+ type = 'ERR_LCOMMENT_END',
+ start = missPos - #str + s - 1,
+ finish = missPos - #str + s + #w - 2,
+ info = {
+ symbol = endSymbol,
+ },
+ fix = {
+ title = 'FIX_LCOMMENT_END',
+ {
+ start = missPos - #str + s - 1,
+ finish = missPos - #str + s + #w - 2,
+ text = endSymbol,
+ }
+ },
+ }
+ end
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = missPos,
+ finish = missPos,
+ info = {
+ symbol = endSymbol,
+ },
+ fix = {
+ title = 'ADD_LCOMMENT_END',
+ {
+ start = missPos,
+ finish = missPos,
+ text = endSymbol,
+ }
+ },
+ }
+ end
+ end,
+ CLongComment = function (start1, finish1, start2, finish2)
+ pushError {
+ type = 'ERR_C_LONG_COMMENT',
+ start = start1,
+ finish = finish2 - 1,
+ fix = {
+ title = 'FIX_C_LONG_COMMENT',
+ {
+ start = start1,
+ finish = finish1 - 1,
+ text = '--[[',
+ },
+ {
+ start = start2,
+ finish = finish2 - 1,
+ text = '--]]'
+ },
+ }
+ }
+ end,
+ CCommentPrefix = function (start, finish)
+ pushError {
+ type = 'ERR_COMMENT_PREFIX',
+ start = start,
+ finish = finish - 1,
+ fix = {
+ title = 'FIX_COMMENT_PREFIX',
+ {
+ start = start,
+ finish = finish - 1,
+ text = '--',
+ },
+ }
+ }
+ return false
+ end,
+ String = function (start, quote, str, finish)
+ return {
+ type = 'string',
+ start = start,
+ finish = finish - 1,
+ [1] = str,
+ [2] = quote,
+ }
+ end,
+ LongString = function (beforeEq, afterEq, str, missPos)
+ if missPos then
+ local endSymbol = ']' .. ('='):rep(afterEq-beforeEq) .. ']'
+ local s, _, w = str:find('(%][%=]*%])[%c%s]*$')
+ if s then
+ pushError {
+ type = 'ERR_LSTRING_END',
+ start = missPos - #str + s - 1,
+ finish = missPos - #str + s + #w - 2,
+ info = {
+ symbol = endSymbol,
+ },
+ fix = {
+ title = 'FIX_LSTRING_END',
+ {
+ start = missPos - #str + s - 1,
+ finish = missPos - #str + s + #w - 2,
+ text = endSymbol,
+ }
+ },
+ }
+ end
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = missPos,
+ finish = missPos,
+ info = {
+ symbol = endSymbol,
+ },
+ fix = {
+ title = 'ADD_LSTRING_END',
+ {
+ start = missPos,
+ finish = missPos,
+ text = endSymbol,
+ }
+ },
+ }
+ end
+ return '[' .. ('='):rep(afterEq-beforeEq) .. '[', str
+ end,
+ Char10 = function (char)
+ char = tonumber(char)
+ if not char or char < 0 or char > 255 then
+ return ''
+ end
+ return string_char(char)
+ end,
+ Char16 = function (pos, char)
+ if State.Version == 'Lua 5.1' then
+ pushError {
+ type = 'ERR_ESC',
+ start = pos-1,
+ finish = pos,
+ version = {'Lua 5.2', 'Lua 5.3', 'Lua 5.4', 'LuaJIT'},
+ info = {
+ version = State.Version,
+ }
+ }
+ return char
+ end
+ return string_char(tonumber(char, 16))
+ end,
+ CharUtf8 = function (pos, char)
+ if State.Version ~= 'Lua 5.3'
+ and State.Version ~= 'Lua 5.4'
+ and State.Version ~= 'LuaJIT'
+ then
+ pushError {
+ type = 'ERR_ESC',
+ start = pos-3,
+ finish = pos-2,
+ version = {'Lua 5.3', 'Lua 5.4', 'LuaJIT'},
+ info = {
+ version = State.Version,
+ }
+ }
+ return char
+ end
+ if #char == 0 then
+ pushError {
+ type = 'UTF8_SMALL',
+ start = pos-3,
+ finish = pos,
+ }
+ return ''
+ end
+ local v = tonumber(char, 16)
+ if not v then
+ for i = 1, #char do
+ if not tonumber(char:sub(i, i), 16) then
+ pushError {
+ type = 'MUST_X16',
+ start = pos + i - 1,
+ finish = pos + i - 1,
+ }
+ end
+ end
+ return ''
+ end
+ if State.Version == 'Lua 5.4' then
+ if v < 0 or v > 0x7FFFFFFF then
+ pushError {
+ type = 'UTF8_MAX',
+ start = pos-3,
+ finish = pos+#char,
+ info = {
+ min = '00000000',
+ max = '7FFFFFFF',
+ }
+ }
+ end
+ else
+ if v < 0 or v > 0x10FFFF then
+ pushError {
+ type = 'UTF8_MAX',
+ start = pos-3,
+ finish = pos+#char,
+ version = v <= 0x7FFFFFFF and 'Lua 5.4' or nil,
+ info = {
+ min = '000000',
+ max = '10FFFF',
+ }
+ }
+ end
+ end
+ if v >= 0 and v <= 0x10FFFF then
+ return utf8_char(v)
+ end
+ return ''
+ end,
+ Number = function (start, number, finish)
+ local n = tonumber(number)
+ if n then
+ State.LastNumber = {
+ type = 'number',
+ start = start,
+ finish = finish - 1,
+ [1] = n,
+ }
+ return State.LastNumber
+ else
+ pushError {
+ type = 'MALFORMED_NUMBER',
+ start = start,
+ finish = finish - 1,
+ }
+ State.LastNumber = {
+ type = 'number',
+ start = start,
+ finish = finish - 1,
+ [1] = 0,
+ }
+ return State.LastNumber
+ end
+ end,
+ FFINumber = function (start, symbol)
+ if math.type(State.LastNumber[1]) == 'float' then
+ pushError {
+ type = 'UNKNOWN_SYMBOL',
+ start = start,
+ finish = start + #symbol - 1,
+ info = {
+ symbol = symbol,
+ }
+ }
+ State.LastNumber[1] = 0
+ return
+ end
+ if State.Version ~= 'LuaJIT' then
+ pushError {
+ type = 'UNSUPPORT_SYMBOL',
+ start = start,
+ finish = start + #symbol - 1,
+ version = 'LuaJIT',
+ info = {
+ version = State.Version,
+ }
+ }
+ State.LastNumber[1] = 0
+ end
+ end,
+ ImaginaryNumber = function (start, symbol)
+ if State.Version ~= 'LuaJIT' then
+ pushError {
+ type = 'UNSUPPORT_SYMBOL',
+ start = start,
+ finish = start + #symbol - 1,
+ version = 'LuaJIT',
+ info = {
+ version = State.Version,
+ }
+ }
+ end
+ State.LastNumber[1] = 0
+ end,
+ Name = function (start, str, finish)
+ local isKeyWord
+ if RESERVED[str] then
+ isKeyWord = true
+ elseif str == 'goto' then
+ if State.Version ~= 'Lua 5.1' and State.Version ~= 'LuaJIT' then
+ isKeyWord = true
+ end
+ end
+ if isKeyWord then
+ pushError {
+ type = 'KEYWORD',
+ start = start,
+ finish = finish - 1,
+ }
+ end
+ return {
+ type = 'name',
+ start = start,
+ finish = finish - 1,
+ [1] = str,
+ }
+ end,
+ Simple = function (first, ...)
+ if ... then
+ local obj = {
+ type = 'simple',
+ start = first.start,
+ first, ...,
+ }
+ local last = obj[#obj]
+ obj.finish = last.finish
+ return obj
+ elseif first == '' then
+ return nil
+ else
+ return first
+ end
+ end,
+ SimpleCall = function (simple)
+ if not simple then
+ return nil
+ end
+ if simple.type ~= 'simple' then
+ pushError {
+ type = 'EXP_IN_ACTION',
+ start = simple.start,
+ finish = simple.finish,
+ }
+ return simple
+ end
+ local last = simple[#simple]
+ if last.type == 'call' then
+ return simple
+ end
+ local colon = simple[#simple-1]
+ if colon and colon.type == ':' then
+ -- 型如 `obj:method`,将错误让给MISS_SYMBOL
+ return simple
+ end
+ pushError {
+ type = 'EXP_IN_ACTION',
+ start = simple[1].start,
+ finish = last.finish,
+ }
+ return simple
+ end,
+ Exp = function (first, ...)
+ if not ... then
+ return first
+ end
+ local list = {first, ...}
+ return expSplit(list, 1, #list, 1)
+ end,
+ Prefix = function (start, exp, finish)
+ exp.brackets = true
+ return exp
+ end,
+ Index = function (start, exp, finish)
+ return {
+ type = 'index',
+ start = start,
+ finish = finish - 1,
+ [1] = exp,
+ }
+ end,
+ Call = function (start, arg, finish)
+ if arg == nil then
+ return {
+ type = 'call',
+ start = start,
+ finish = finish - 1,
+ }
+ end
+ if arg.type == 'list' then
+ arg.type = 'call'
+ arg.start = start
+ arg.finish = finish - 1
+ return arg
+ end
+ local obj = {
+ type = 'call',
+ start = start,
+ finish = finish - 1,
+ [1] = arg,
+ }
+ return obj
+ end,
+ DOTS = function (start)
+ return {
+ type = '...',
+ start = start,
+ finish = start + 2,
+ }
+ end,
+ DotsAsArg = function (obj)
+ State.Dots[#State.Dots] = true
+ return obj
+ end,
+ DotsAsExp = function (obj)
+ if not State.Dots[#State.Dots] then
+ pushError {
+ type = 'UNEXPECT_DOTS',
+ start = obj.start,
+ finish = obj.finish,
+ }
+ end
+ return obj
+ end,
+ COLON = function (start)
+ return {
+ type = ':',
+ start = start,
+ finish = start,
+ }
+ end,
+ DOT = function (start)
+ return {
+ type = '.',
+ start = start,
+ finish = start,
+ }
+ end,
+ Function = function (start, argStart, arg, argFinish, ...)
+ local obj = {
+ type = 'function',
+ start = start,
+ arg = arg,
+ argStart = argStart - 1,
+ argFinish = argFinish,
+ ...
+ }
+ local max = #obj
+ obj.finish = obj[max] - 1
+ obj[max] = nil
+ if obj.argFinish > obj.finish then
+ obj.argFinish = obj.finish
+ end
+ checkMissEnd(start)
+ return obj
+ end,
+ NamedFunction = function (start, name, argStart, arg, argFinish, ...)
+ local obj = {
+ type = 'function',
+ start = start,
+ name = name,
+ arg = arg,
+ argStart = argStart - 1,
+ argFinish = argFinish,
+ ...
+ }
+ local max = #obj
+ obj.finish = obj[max] - 1
+ obj[max] = nil
+ if obj.argFinish > obj.finish then
+ obj.argFinish = obj.finish
+ end
+ checkMissEnd(start)
+ return obj
+ end,
+ LocalFunction = function (start, name, argStart, arg, argFinish, ...)
+ local obj = {
+ type = 'localfunction',
+ start = start,
+ name = name,
+ arg = arg,
+ argStart = argStart - 1,
+ argFinish = argFinish,
+ ...
+ }
+ local max = #obj
+ obj.finish = obj[max] - 1
+ obj[max] = nil
+ if obj.argFinish > obj.finish then
+ obj.argFinish = obj.finish
+ end
+
+ if name.type ~= 'name' then
+ pushError {
+ type = 'UNEXPECT_LFUNC_NAME',
+ start = name.start,
+ finish = name.finish,
+ }
+ end
+
+ checkMissEnd(start)
+ return obj
+ end,
+ Table = function (start, ...)
+ local args = {...}
+ local max = #args
+ local finish = args[max] - 1
+ local table = {
+ type = 'table',
+ start = start,
+ finish = finish
+ }
+ start = start + 1
+ local wantField = true
+ for i = 1, max-1 do
+ local arg = args[i]
+ local isField = type(arg) == 'table'
+ local isEmmy = isField and arg.type:sub(1, 4) == 'emmy'
+ if wantField and not isField then
+ pushError {
+ type = 'MISS_EXP',
+ start = start,
+ finish = arg - 1,
+ }
+ elseif not wantField and isField and not isEmmy then
+ pushError {
+ type = 'MISS_SEP_IN_TABLE',
+ start = start,
+ finish = arg.start-1,
+ }
+ end
+ if isField then
+ table[#table+1] = arg
+ if not isEmmy then
+ wantField = false
+ start = arg.finish + 1
+ end
+ else
+ wantField = true
+ start = arg
+ end
+ end
+ return table
+ end,
+ NewField = function (key, value)
+ return {
+ type = 'pair',
+ start = key.start,
+ finish = value.finish,
+ key, value,
+ }
+ end,
+ NewIndex = function (key, value)
+ return {
+ type = 'pair',
+ start = key.start,
+ finish = value.finish,
+ key, value,
+ }
+ end,
+ List = function (first, second, ...)
+ if second then
+ local list = {
+ type = 'list',
+ start = first.start,
+ first, second, ...
+ }
+ local last = list[#list]
+ list.finish = last.finish
+ return list
+ elseif type(first) == 'table' then
+ return first
+ else
+ return nil
+ end
+ end,
+ ArgList = function (...)
+ if ... == '' then
+ return nil
+ end
+ local args = table.pack(...)
+ local list = {}
+ local max = args.n
+ args.n = nil
+ local wantName = true
+ for i = 1, max do
+ local obj = args[i]
+ if type(obj) == 'number' then
+ if wantName then
+ pushError {
+ type = 'MISS_NAME',
+ start = obj,
+ finish = obj,
+ }
+ end
+ wantName = true
+ else
+ if not wantName then
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = obj.start-1,
+ finish = obj.start-1,
+ info = {
+ symbol = ',',
+ }
+ }
+ end
+ wantName = false
+ list[#list+1] = obj
+ if obj.type == '...' then
+ if i < max then
+ local a = args[i+1]
+ local b = args[max]
+ pushError {
+ type = 'ARGS_AFTER_DOTS',
+ start = type(a) == 'number' and a or a.start,
+ finish = type(b) == 'number' and b or b.finish,
+ }
+ end
+ break
+ end
+ end
+ end
+ if wantName then
+ local last = args[max]
+ pushError {
+ type = 'MISS_NAME',
+ start = last+1,
+ finish = last+1,
+ }
+ end
+ if #list == 0 then
+ return nil
+ elseif #list == 1 then
+ return list[1]
+ else
+ list.type = 'list'
+ list.start = list[1].start
+ list.finish = list[#list].finish
+ return list
+ end
+ end,
+ CallArgList = function (start, ...)
+ local args = {...}
+ local max = #args
+ local finish = args[max] - 1
+ local exps = {
+ type = 'list',
+ start = start,
+ finish = finish,
+ }
+ local wantExp = true
+ for i = 1, max-1 do
+ local arg = args[i]
+ local isExp = type(arg) == 'table'
+ if wantExp and not isExp then
+ pushError {
+ type = 'MISS_EXP',
+ start = start,
+ finish = arg - 1,
+ }
+ elseif not wantExp and isExp then
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = start,
+ finish = arg.start-1,
+ info = {
+ symbol = ',',
+ }
+ }
+ end
+ if isExp then
+ exps[#exps+1] = arg
+ wantExp = false
+ start = arg.finish + 1
+ else
+ wantExp = true
+ start = arg
+ end
+ end
+ if wantExp then
+ pushError {
+ type = 'MISS_EXP',
+ start = start,
+ finish = finish,
+ }
+ end
+ if #exps == 0 then
+ return nil
+ elseif #exps == 1 then
+ return exps[1]
+ else
+ return exps
+ end
+ end,
+ Nothing = function ()
+ return nil
+ end,
+ None = function()
+ return
+ end,
+ Skip = function ()
+ return false
+ end,
+ Set = function (keys, values)
+ return {
+ type = 'set',
+ keys, values,
+ }
+ end,
+ LocalTag = function (...)
+ if not ... or ... == '' then
+ return nil
+ end
+ local tags = {...}
+ for i, tag in ipairs(tags) do
+ if State.Version ~= 'Lua 5.4' then
+ pushError {
+ type = 'UNSUPPORT_SYMBOL',
+ start = tag.start,
+ finish = tag.finish,
+ version = 'Lua 5.4',
+ info = {
+ version = State.Version,
+ }
+ }
+ elseif tag[1] ~= 'const' and tag[1] ~= 'close' then
+ pushError {
+ type = 'UNKNOWN_TAG',
+ start = tag.start,
+ finish = tag.finish,
+ info = {
+ tag = tag[1],
+ }
+ }
+ elseif i > 1 then
+ pushError {
+ type = 'MULTI_TAG',
+ start = tag.start,
+ finish = tag.finish,
+ info = {
+ tag = tag[1],
+ }
+ }
+ end
+ end
+ return tags
+ end,
+ LocalName = function (name, tags)
+ name.tags = tags
+ return name
+ end,
+ Local = function (keys, values)
+ return {
+ type = 'local',
+ keys, values,
+ }
+ end,
+ DoBody = function (...)
+ if ... == '' then
+ return {
+ type = 'do',
+ }
+ else
+ return {
+ type = 'do',
+ ...
+ }
+ end
+ end,
+ Do = function (start, action, finish)
+ action.start = start
+ action.finish = finish - 1
+ checkMissEnd(start)
+ return action
+ end,
+ Break = function (finish, ...)
+ if State.Break > 0 then
+ local breakChunk = {
+ type = 'break',
+ }
+ if not ... then
+ return breakChunk
+ end
+ local action = select(-1, ...)
+ if not action then
+ return breakChunk
+ end
+ if State.Version == 'Lua 5.1' or State.Version == 'LuaJIT' then
+ pushError {
+ type = 'ACTION_AFTER_BREAK',
+ start = finish - #'break',
+ finish = finish - 1,
+ }
+ end
+ return breakChunk, action
+ else
+ pushError {
+ type = 'BREAK_OUTSIDE',
+ start = finish - #'break',
+ finish = finish - 1,
+ }
+ if not ... then
+ return false
+ end
+ local action = select(-1, ...)
+ if not action then
+ return false
+ end
+ return action
+ end
+ end,
+ BreakStart = function ()
+ State.Break = State.Break + 1
+ end,
+ BreakEnd = function ()
+ State.Break = State.Break - 1
+ end,
+ Return = function (start, exp, finish)
+ if not finish then
+ finish = exp
+ exp = {
+ type = 'return',
+ start = start,
+ finish = finish - 1,
+ }
+ else
+ if exp.type == 'list' then
+ exp.type = 'return'
+ exp.start = start
+ exp.finish = finish - 1
+ else
+ exp = {
+ type = 'return',
+ start = start,
+ finish = finish - 1,
+ [1] = exp,
+ }
+ end
+ end
+ return exp
+ end,
+ Label = function (start, name, finish)
+ if State.Version == 'Lua 5.1' then
+ pushError {
+ type = 'UNSUPPORT_SYMBOL',
+ start = start,
+ finish = finish - 1,
+ version = {'Lua 5.2', 'Lua 5.3', 'Lua 5.4', 'LuaJIT'},
+ info = {
+ version = State.Version,
+ }
+ }
+ return false
+ end
+ name.type = 'label'
+ local labels = State.Label[#State.Label]
+ local str = name[1]
+ if labels[str] then
+ --pushError {
+ -- type = 'REDEFINE_LABEL',
+ -- start = name.start,
+ -- finish = name.finish,
+ -- info = {
+ -- label = str,
+ -- related = {labels[str].start, labels[str].finish},
+ -- }
+ --}
+ else
+ labels[str] = name
+ end
+ return name
+ end,
+ GoTo = function (start, name, finish)
+ if State.Version == 'Lua 5.1' then
+ pushError {
+ type = 'UNSUPPORT_SYMBOL',
+ start = start,
+ finish = finish - 1,
+ version = {'Lua 5.2', 'Lua 5.3', 'Lua 5.4', 'LuaJIT'},
+ info = {
+ version = State.Version,
+ }
+ }
+ return false
+ end
+ name.type = 'goto'
+ local labels = State.Label[#State.Label]
+ labels[#labels+1] = name
+ return name
+ end,
+ -- TODO 这里的检查不完整,但是完整的检查比较复杂,开销比较高
+ -- 不能jump到另一个局部变量的作用域
+ -- 函数会切断goto与label
+ -- 不能从block外jump到block内,但是可以从block内jump到block外
+ BlockStart = function ()
+ State.Label[#State.Label+1] = {}
+ State.Dots[#State.Dots+1] = false
+ end,
+ BlockEnd = function ()
+ local labels = State.Label[#State.Label]
+ State.Label[#State.Label] = nil
+ State.Dots[#State.Dots] = nil
+ for i = 1, #labels do
+ local name = labels[i]
+ local str = name[1]
+ if not labels[str] then
+ pushError {
+ type = 'NO_VISIBLE_LABEL',
+ start = name.start,
+ finish = name.finish,
+ info = {
+ label = str,
+ }
+ }
+ end
+ end
+ end,
+ IfBlock = function (exp, start, ...)
+ local obj = {
+ filter = exp,
+ start = start,
+ ...
+ }
+ local max = #obj
+ obj.finish = obj[max]
+ obj[max] = nil
+ return obj
+ end,
+ ElseIfBlock = function (exp, start, ...)
+ local obj = {
+ filter = exp,
+ start = start,
+ ...
+ }
+ local max = #obj
+ obj.finish = obj[max]
+ obj[max] = nil
+ return obj
+ end,
+ ElseBlock = function (start, ...)
+ local obj = {
+ start = start,
+ ...
+ }
+ local max = #obj
+ obj.finish = obj[max]
+ obj[max] = nil
+ return obj
+ end,
+ If = function (start, ...)
+ local obj = {
+ type = 'if',
+ start = start,
+ ...
+ }
+ local max = #obj
+ obj.finish = obj[max] - 1
+ obj[max] = nil
+ checkMissEnd(start)
+ return obj
+ end,
+ Loop = function (start, arg, min, max, step, ...)
+ local obj = {
+ type = 'loop',
+ start = start,
+ arg = arg,
+ min = min,
+ max = max,
+ step = step,
+ ...
+ }
+ local max = #obj
+ obj.finish = obj[max] - 1
+ obj[max] = nil
+ checkMissEnd(start)
+ return obj
+ end,
+ In = function (start, arg, exp, ...)
+ local obj = {
+ type = 'in',
+ start = start,
+ arg = arg,
+ exp = exp,
+ ...
+ }
+ local max = #obj
+ obj.finish = obj[max] - 1
+ obj[max] = nil
+ checkMissEnd(start)
+ return obj
+ end,
+ While = function (start, filter, ...)
+ local obj = {
+ type = 'while',
+ start = start,
+ filter = filter,
+ ...
+ }
+ local max = #obj
+ obj.finish = obj[max] - 1
+ obj[max] = nil
+ checkMissEnd(start)
+ return obj
+ end,
+ Repeat = function (start, ...)
+ local obj = {
+ type = 'repeat',
+ start = start,
+ ...
+ }
+ local max = #obj
+ obj.finish = obj[max] - 1
+ obj.filter = obj[max-1]
+ obj[max] = nil
+ obj[max-1] = nil
+ return obj
+ end,
+ Lua = function (...)
+ if ... == '' then
+ return {}
+ end
+ return {...}
+ end,
+
+ -- EmmyLua 支持
+ EmmyName = function (start, str)
+ return {
+ type = 'emmyName',
+ start = start,
+ finish = start + #str - 1,
+ [1] = str,
+ }
+ end,
+ DirtyEmmyName = function (pos)
+ pushError {
+ type = 'MISS_NAME',
+ level = 'warning',
+ start = pos,
+ finish = pos,
+ }
+ return {
+ type = 'emmyName',
+ start = pos-1,
+ finish = pos-1,
+ [1] = ''
+ }
+ end,
+ EmmyClass = function (class, startPos, extends)
+ if extends and extends[1] == '' then
+ extends.start = startPos
+ end
+ return {
+ type = 'emmyClass',
+ start = class.start,
+ finish = (extends or class).finish,
+ [1] = class,
+ [2] = extends,
+ }
+ end,
+ EmmyType = function (typeDef)
+ return typeDef
+ end,
+ EmmyCommonType = function (...)
+ local result = {
+ type = 'emmyType',
+ ...
+ }
+ for i = 1, #result // 2 do
+ local startPos = result[i * 2]
+ local emmyName = result[i * 2 + 1]
+ if emmyName[1] == '' then
+ emmyName.start = startPos
+ end
+ result[i + 1] = emmyName
+ end
+ for i = #result // 2 + 2, #result do
+ result[i] = nil
+ end
+ result.start = result[1].start
+ result.finish = result[#result].finish
+ return result
+ end,
+ EmmyArrayType = function (start, emmy, _, finish)
+ emmy.type = 'emmyArrayType'
+ emmy.start = start
+ emmy.finish = finish - 1
+ return emmy
+ end,
+ EmmyTableType = function (start, keyType, valueType, finish)
+ return {
+ type = 'emmyTableType',
+ start = start,
+ finish = finish - 1,
+ [1] = keyType,
+ [2] = valueType,
+ }
+ end,
+ EmmyFunctionType = function (start, args, returns, finish)
+ local result = {
+ start = start,
+ finish = finish - 1,
+ type = 'emmyFunctionType',
+ args = args,
+ returns = returns,
+ }
+ return result
+ end,
+ EmmyFunctionRtns = function (...)
+ return {...}
+ end,
+ EmmyFunctionArgs = function (...)
+ local args = {...}
+ args[#args] = nil
+ return args
+ end,
+ EmmyAlias = function (name, emmyName, ...)
+ return {
+ type = 'emmyAlias',
+ start = name.start,
+ finish = emmyName.finish,
+ name,
+ emmyName,
+ ...
+ }
+ end,
+ EmmyParam = function (argName, emmyName, option, ...)
+ local emmy = {
+ type = 'emmyParam',
+ option = option,
+ argName,
+ emmyName,
+ ...
+ }
+ emmy.start = emmy[1].start
+ emmy.finish = emmy[#emmy].finish
+ return emmy
+ end,
+ EmmyReturn = function (start, type, name, finish, option)
+ local emmy = {
+ type = 'emmyReturn',
+ option = option,
+ start = start,
+ finish = finish - 1,
+ [1] = type,
+ [2] = name,
+ }
+ return emmy
+ end,
+ EmmyField = function (access, fieldName, ...)
+ local obj = {
+ type = 'emmyField',
+ access, fieldName,
+ ...
+ }
+ obj.start = obj[2].start
+ obj.finish = obj[3].finish
+ return obj
+ end,
+ EmmyGenericBlock = function (genericName, parentName)
+ return {
+ start = genericName.start,
+ finish = parentName and parentName.finish or genericName.finish,
+ genericName,
+ parentName,
+ }
+ end,
+ EmmyGeneric = function (...)
+ local emmy = {
+ type = 'emmyGeneric',
+ ...
+ }
+ emmy.start = emmy[1].start
+ emmy.finish = emmy[#emmy].finish
+ return emmy
+ end,
+ EmmyVararg = function (typeName)
+ return {
+ type = 'emmyVararg',
+ start = typeName.start,
+ finish = typeName.finish,
+ typeName,
+ }
+ end,
+ EmmyLanguage = function (language)
+ return {
+ type = 'emmyLanguage',
+ start = language.start,
+ finish = language.finish,
+ language,
+ }
+ end,
+ EmmySee = function (start, className, methodName, finish)
+ return {
+ type = 'emmySee',
+ start = start,
+ finish = finish - 1,
+ className, methodName
+ }
+ end,
+ EmmyOverLoad = function (EmmyFunctionType)
+ EmmyFunctionType.type = 'emmyOverLoad'
+ return EmmyFunctionType
+ end,
+ EmmyIncomplete = function (emmyName)
+ emmyName.type = 'emmyIncomplete'
+ return emmyName
+ end,
+ EmmyComment = function (...)
+ local lines = {...}
+ for i = 2, #lines do
+ local line = lines[i]
+ if line:sub(1, 1) == '|' then
+ lines[i] = '\n' .. line:sub(2)
+ end
+ end
+ return {
+ type = 'emmyComment',
+ [1] = table.concat(lines, '\n'),
+ }
+ end,
+ EmmyOption = function (options)
+ if not options or options == '' then
+ return nil
+ end
+ local option = {}
+ for _, pair in ipairs(options) do
+ if pair.type == 'pair' then
+ local key = pair[1]
+ local value = pair[2]
+ if key.type == 'name' then
+ option[key[1]] = value[1]
+ end
+ end
+ end
+ return option
+ end,
+ EmmyTypeEnum = function (default, enum, comment)
+ enum.type = 'emmyEnum'
+ if default ~= '' then
+ enum.default = true
+ end
+ enum.comment = comment
+ return enum
+ end,
+
+ -- 捕获错误
+ UnknownSymbol = function (start, symbol)
+ pushError {
+ type = 'UNKNOWN_SYMBOL',
+ start = start,
+ finish = start + #symbol - 1,
+ info = {
+ symbol = symbol,
+ }
+ }
+ return
+ end,
+ UnknownAction = function (start, symbol)
+ pushError {
+ type = 'UNKNOWN_SYMBOL',
+ start = start,
+ finish = start + #symbol - 1,
+ info = {
+ symbol = symbol,
+ }
+ }
+ return false
+ end,
+ DirtyName = function (pos)
+ pushError {
+ type = 'MISS_NAME',
+ start = pos,
+ finish = pos,
+ }
+ return {
+ type = 'name',
+ start = pos-1,
+ finish = pos-1,
+ [1] = ''
+ }
+ end,
+ DirtyExp = function (pos)
+ pushError {
+ type = 'MISS_EXP',
+ start = pos,
+ finish = pos,
+ }
+ return {
+ type = 'name',
+ start = pos,
+ finish = pos,
+ [1] = ''
+ }
+ end,
+ MissExp = function (pos)
+ pushError {
+ type = 'MISS_EXP',
+ start = pos,
+ finish = pos,
+ }
+ end,
+ MissExponent = function (start, finish)
+ pushError {
+ type = 'MISS_EXPONENT',
+ start = start,
+ finish = finish - 1,
+ }
+ end,
+ MissQuote1 = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = '"'
+ }
+ }
+ end,
+ MissQuote2 = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = "'"
+ }
+ }
+ end,
+ MissEscX = function (pos)
+ pushError {
+ type = 'MISS_ESC_X',
+ start = pos-2,
+ finish = pos+1,
+ }
+ end,
+ MissTL = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = '{',
+ }
+ }
+ end,
+ MissTR = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = '}',
+ }
+ }
+ return pos + 1
+ end,
+ MissBR = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = ']',
+ }
+ }
+ return pos + 1
+ end,
+ MissPL = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = '(',
+ }
+ }
+ end,
+ DirtyPR = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = ')',
+ }
+ }
+ return pos + 1
+ end,
+ MissPR = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = ')',
+ }
+ }
+ end,
+ ErrEsc = function (pos)
+ pushError {
+ type = 'ERR_ESC',
+ start = pos-1,
+ finish = pos,
+ }
+ end,
+ MustX16 = function (pos, str)
+ pushError {
+ type = 'MUST_X16',
+ start = pos,
+ finish = pos + #str - 1,
+ }
+ end,
+ MissAssign = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = '=',
+ }
+ }
+ end,
+ MissTableSep = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = ','
+ }
+ }
+ end,
+ MissField = function (pos)
+ pushError {
+ type = 'MISS_FIELD',
+ start = pos,
+ finish = pos,
+ }
+ end,
+ MissMethod = function (pos)
+ pushError {
+ type = 'MISS_METHOD',
+ start = pos,
+ finish = pos,
+ }
+ end,
+ MissLabel = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = '::',
+ }
+ }
+ end,
+ MissEnd = function (pos)
+ State.MissEndErr = pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = 'end',
+ }
+ }
+ end,
+ MissDo = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = 'do',
+ }
+ }
+ end,
+ MissComma = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = ',',
+ }
+ }
+ end,
+ MissIn = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = 'in',
+ }
+ }
+ end,
+ MissUntil = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = 'until',
+ }
+ }
+ end,
+ MissThen = function (pos)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = pos,
+ finish = pos,
+ info = {
+ symbol = 'then',
+ }
+ }
+ end,
+ ExpInAction = function (start, exp, finish)
+ pushError {
+ type = 'EXP_IN_ACTION',
+ start = start,
+ finish = finish - 1,
+ }
+ return exp
+ end,
+ AfterReturn = function (rtn, ...)
+ if not ... then
+ return rtn
+ end
+ local action = select(-1, ...)
+ if not action then
+ return rtn
+ end
+ pushError {
+ type = 'ACTION_AFTER_RETURN',
+ start = rtn.start,
+ finish = rtn.finish,
+ }
+ return rtn, action
+ end,
+ MissIf = function (start, block)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = start,
+ finish = start,
+ info = {
+ symbol = 'if',
+ }
+ }
+ return block
+ end,
+ MissGT = function (start)
+ pushError {
+ type = 'MISS_SYMBOL',
+ start = start,
+ finish = start,
+ info = {
+ symbol = '>'
+ }
+ }
+ end,
+ ErrAssign = function (start, finish)
+ pushError {
+ type = 'ERR_ASSIGN_AS_EQ',
+ start = start,
+ finish = finish - 1,
+ fix = {
+ title = 'FIX_ASSIGN_AS_EQ',
+ {
+ start = start,
+ finish = finish - 1,
+ text = '=',
+ }
+ }
+ }
+ end,
+ ErrEQ = function (start, finish)
+ pushError {
+ type = 'ERR_EQ_AS_ASSIGN',
+ start = start,
+ finish = finish - 1,
+ fix = {
+ title = 'FIX_EQ_AS_ASSIGN',
+ {
+ start = start,
+ finish = finish - 1,
+ text = '==',
+ }
+ }
+ }
+ return '=='
+ end,
+ ErrUEQ = function (start, finish)
+ pushError {
+ type = 'ERR_UEQ',
+ start = start,
+ finish = finish - 1,
+ fix = {
+ title = 'FIX_UEQ',
+ {
+ start = start,
+ finish = finish - 1,
+ text = '~=',
+ }
+ }
+ }
+ return '=='
+ end,
+ ErrThen = function (start, finish)
+ pushError {
+ type = 'ERR_THEN_AS_DO',
+ start = start,
+ finish = finish - 1,
+ fix = {
+ title = 'FIX_THEN_AS_DO',
+ {
+ start = start,
+ finish = finish - 1,
+ text = 'then',
+ }
+ }
+ }
+ end,
+ ErrDo = function (start, finish)
+ pushError {
+ type = 'ERR_DO_AS_THEN',
+ start = start,
+ finish = finish - 1,
+ fix = {
+ title = 'FIX_DO_AS_THEN',
+ {
+ start = start,
+ finish = finish - 1,
+ text = 'do',
+ }
+ }
+ }
+ end,
+}
+
+local function init(state, errs)
+ State = state
+ Errs = errs
+end
+
+return {
+ defs = Defs,
+ init = init,
+}
diff --git a/script/src/parser/calcline.lua b/script/src/parser/calcline.lua
new file mode 100644
index 00000000..26f475d9
--- /dev/null
+++ b/script/src/parser/calcline.lua
@@ -0,0 +1,93 @@
+local m = require 'lpeglabel'
+
+local row
+local fl
+local NL = (m.P'\r\n' + m.S'\r\n') * m.Cp() / function (pos)
+ row = row + 1
+ fl = pos
+end
+local ROWCOL = (NL + m.P(1))^0
+local function rowcol(str, n)
+ row = 1
+ fl = 1
+ ROWCOL:match(str:sub(1, n))
+ local col = n - fl + 1
+ return row, col
+end
+
+local function rowcol_utf8(str, n)
+ row = 1
+ fl = 1
+ ROWCOL:match(str:sub(1, n))
+ return row, utf8.len(str, fl, n)
+end
+
+local function position(str, _row, _col)
+ local cur = 1
+ local row = 1
+ while true do
+ if row == _row then
+ return cur + _col - 1
+ elseif row > _row then
+ return cur - 1
+ end
+ local pos = str:find('[\r\n]', cur)
+ if not pos then
+ return #str
+ end
+ row = row + 1
+ if str:sub(pos, pos+1) == '\r\n' then
+ cur = pos + 2
+ else
+ cur = pos + 1
+ end
+ end
+end
+
+local function position_utf8(str, _row, _col)
+ local cur = 1
+ local row = 1
+ while true do
+ if row == _row then
+ return utf8.offset(str, _col, cur)
+ elseif row > _row then
+ return cur - 1
+ end
+ local pos = str:find('[\r\n]', cur)
+ if not pos then
+ return #str
+ end
+ row = row + 1
+ if str:sub(pos, pos+1) == '\r\n' then
+ cur = pos + 2
+ else
+ cur = pos + 1
+ end
+ end
+end
+
+local NL = m.P'\r\n' + m.S'\r\n'
+
+local function line(str, row)
+ local count = 0
+ local res
+ local LINE = m.Cmt((1 - NL)^0, function (_, _, c)
+ count = count + 1
+ if count == row then
+ res = c
+ return false
+ end
+ return true
+ end)
+ local MATCH = (LINE * NL)^0 * LINE
+ MATCH:match(str)
+ return res
+end
+
+return {
+ rowcol = rowcol,
+ rowcol_utf8 = rowcol_utf8,
+ position = position,
+ position_utf8 = position_utf8,
+ line = line,
+}
diff --git a/script/src/parser/grammar.lua b/script/src/parser/grammar.lua
new file mode 100644
index 00000000..568b8544
--- /dev/null
+++ b/script/src/parser/grammar.lua
@@ -0,0 +1,630 @@
+local re = require 'parser.relabel'
+local m = require 'lpeglabel'
+local ast = require 'parser.ast'
+
+local scriptBuf = ''
+local compiled = {}
+local parser
+local defs = ast.defs
+
+-- goto 可以作为名字,合法性之后处理
+local RESERVED = {
+ ['and'] = true,
+ ['break'] = true,
+ ['do'] = true,
+ ['else'] = true,
+ ['elseif'] = true,
+ ['end'] = true,
+ ['false'] = true,
+ ['for'] = true,
+ ['function'] = true,
+ ['if'] = true,
+ ['in'] = true,
+ ['local'] = true,
+ ['nil'] = true,
+ ['not'] = true,
+ ['or'] = true,
+ ['repeat'] = true,
+ ['return'] = true,
+ ['then'] = true,
+ ['true'] = true,
+ ['until'] = true,
+ ['while'] = true,
+}
+
+defs.nl = (m.P'\r\n' + m.S'\r\n')
+defs.s = m.S' \t'
+defs.S = - defs.s
+defs.ea = '\a'
+defs.eb = '\b'
+defs.ef = '\f'
+defs.en = '\n'
+defs.er = '\r'
+defs.et = '\t'
+defs.ev = '\v'
+defs['nil'] = m.Cp() / function () return nil end
+defs['false'] = m.Cp() / function () return false end
+defs.NotReserved = function (_, _, str)
+ if RESERVED[str] then
+ return false
+ end
+ return true
+end
+defs.Reserved = function (_, _, str)
+ if RESERVED[str] then
+ return true
+ end
+ return false
+end
+defs.None = function () end
+defs.np = m.Cp() / function (n) return n+1 end
+
+m.setmaxstack(1000)
+
+local eof = re.compile '!. / %{SYNTAX_ERROR}'
+
+local function grammar(tag)
+ return function (script)
+ scriptBuf = script .. '\r\n' .. scriptBuf
+ compiled[tag] = re.compile(scriptBuf, defs) * eof
+ end
+end
+
+local function errorpos(pos, err)
+ return {
+ type = 'UNKNOWN',
+ start = pos or 0,
+ finish = pos or 0,
+ err = err,
+ }
+end
+
+grammar 'Comment' [[
+Comment <- LongComment / '--' ShortComment
+LongComment <- ('--[' {} {:eq: '='* :} {} '['
+ {(!CommentClose .)*}
+ (CommentClose {} / {} {}))
+ -> LongComment
+ / (
+ {} '/*' {}
+ (!'*/' .)*
+ {} '*/' {}
+ )
+ -> CLongComment
+CommentClose <- ']' =eq ']'
+ShortComment <- (!%nl .)*
+]]
+
+grammar 'Sp' [[
+Sp <- (Comment / %nl / %s)*
+Sps <- (Comment / %nl / %s)+
+]]
+
+grammar 'Common' [[
+Word <- [a-zA-Z0-9_]
+Cut <- !Word
+X16 <- [a-fA-F0-9]
+Rest <- (!%nl .)*
+
+AND <- Sp {'and'} Cut
+BREAK <- Sp 'break' Cut
+DO <- Sp 'do' Cut
+ / Sp ({} 'then' Cut {}) -> ErrDo
+ELSE <- Sp 'else' Cut
+ELSEIF <- Sp 'elseif' Cut
+END <- Sp 'end' Cut
+FALSE <- Sp 'false' Cut
+FOR <- Sp 'for' Cut
+FUNCTION <- Sp 'function' Cut
+GOTO <- Sp 'goto' Cut
+IF <- Sp 'if' Cut
+IN <- Sp 'in' Cut
+LOCAL <- Sp 'local' Cut
+NIL <- Sp 'nil' Cut
+NOT <- Sp 'not' Cut
+OR <- Sp {'or'} Cut
+REPEAT <- Sp 'repeat' Cut
+RETURN <- Sp 'return' Cut
+THEN <- Sp 'then' Cut
+ / Sp ({} 'do' Cut {}) -> ErrThen
+TRUE <- Sp 'true' Cut
+UNTIL <- Sp 'until' Cut
+WHILE <- Sp 'while' Cut
+
+Esc <- '\' -> ''
+ EChar
+EChar <- 'a' -> ea
+ / 'b' -> eb
+ / 'f' -> ef
+ / 'n' -> en
+ / 'r' -> er
+ / 't' -> et
+ / 'v' -> ev
+ / '\'
+ / '"'
+ / "'"
+ / %nl
+ / ('z' (%nl / %s)*) -> ''
+ / ({} 'x' {X16 X16}) -> Char16
+ / ([0-9] [0-9]? [0-9]?) -> Char10
+ / ('u{' {} {Word*} '}') -> CharUtf8
+ -- 错误处理
+ / 'x' {} -> MissEscX
+ / 'u' !'{' {} -> MissTL
+ / 'u{' Word* !'}' {} -> MissTR
+ / {} -> ErrEsc
+
+BOR <- Sp {'|'}
+BXOR <- Sp {'~'} !'='
+BAND <- Sp {'&'}
+Bshift <- Sp {BshiftList}
+BshiftList <- '<<'
+ / '>>'
+Concat <- Sp {'..'}
+Adds <- Sp {AddsList}
+AddsList <- '+'
+ / '-'
+Muls <- Sp {MulsList}
+MulsList <- '*'
+ / '//'
+ / '/'
+ / '%'
+Unary <- Sp {} {UnaryList}
+UnaryList <- NOT
+ / '#'
+ / '-'
+ / '~' !'='
+POWER <- Sp {'^'}
+
+BinaryOp <- Sp {} {'or'} Cut
+ / Sp {} {'and'} Cut
+ / Sp {} {'<=' / '>=' / '<'!'<' / '>'!'>' / '~=' / '=='}
+ / Sp {} ({} '=' {}) -> ErrEQ
+ / Sp {} ({} '!=' {}) -> ErrUEQ
+ / Sp {} {'|'}
+ / Sp {} {'~'}
+ / Sp {} {'&'}
+ / Sp {} {'<<' / '>>'}
+ / Sp {} {'..'} !'.'
+ / Sp {} {'+' / '-'}
+ / Sp {} {'*' / '//' / '/' / '%'}
+ / Sp {} {'^'}
+UnaryOp <- Sp {} {'not' Cut / '#' / '~' !'=' / '-' !'-'}
+
+PL <- Sp '('
+PR <- Sp ')'
+BL <- Sp '[' !'[' !'='
+BR <- Sp ']'
+TL <- Sp '{'
+TR <- Sp '}'
+COMMA <- Sp ','
+SEMICOLON <- Sp ';'
+DOTS <- Sp ({} '...') -> DOTS
+DOT <- Sp ({} '.' !'.') -> DOT
+COLON <- Sp ({} ':' !':') -> COLON
+LABEL <- Sp '::'
+ASSIGN <- Sp '=' !'='
+AssignOrEQ <- Sp ({} '==' {}) -> ErrAssign
+ / Sp '='
+
+Nothing <- {} -> Nothing
+
+DirtyBR <- BR {} / {} -> MissBR
+DirtyTR <- TR {} / {} -> MissTR
+DirtyPR <- PR {} / {} -> DirtyPR
+DirtyLabel <- LABEL / {} -> MissLabel
+NeedPR <- PR / {} -> MissPR
+NeedEnd <- END / {} -> MissEnd
+NeedDo <- DO / {} -> MissDo
+NeedAssign <- ASSIGN / {} -> MissAssign
+NeedComma <- COMMA / {} -> MissComma
+NeedIn <- IN / {} -> MissIn
+NeedUntil <- UNTIL / {} -> MissUntil
+]]
+
+grammar 'Nil' [[
+Nil <- Sp ({} -> Nil) NIL
+]]
+
+grammar 'Boolean' [[
+Boolean <- Sp ({} -> True) TRUE
+ / Sp ({} -> False) FALSE
+]]
+
+grammar 'String' [[
+String <- Sp ({} StringDef {})
+ -> String
+StringDef <- {'"'}
+ {~(Esc / !%nl !'"' .)*~} -> 1
+ ('"' / {} -> MissQuote1)
+ / {"'"}
+ {~(Esc / !%nl !"'" .)*~} -> 1
+ ("'" / {} -> MissQuote2)
+ / ('[' {} {:eq: '='* :} {} '[' %nl?
+ {(!StringClose .)*} -> 1
+ (StringClose / {}))
+ -> LongString
+StringClose <- ']' =eq ']'
+]]
+
+grammar 'Number' [[
+Number <- Sp ({} {NumberDef} {}) -> Number
+ NumberSuffix?
+ ErrNumber?
+NumberDef <- Number16 / Number10
+NumberSuffix<- ({} {[uU]? [lL] [lL]}) -> FFINumber
+ / ({} {[iI]}) -> ImaginaryNumber
+ErrNumber <- ({} {([0-9a-zA-Z] / '.')+}) -> UnknownSymbol
+
+Number10 <- Float10 Float10Exp?
+ / Integer10 Float10? Float10Exp?
+Integer10 <- [0-9]+ ('.' [0-9]*)?
+Float10 <- '.' [0-9]+
+Float10Exp <- [eE] [+-]? [0-9]+
+ / ({} [eE] [+-]? {}) -> MissExponent
+
+Number16 <- '0' [xX] Float16 Float16Exp?
+ / '0' [xX] Integer16 Float16? Float16Exp?
+Integer16 <- X16+ ('.' X16*)?
+ / ({} {Word*}) -> MustX16
+Float16 <- '.' X16+
+ / '.' ({} {Word*}) -> MustX16
+Float16Exp <- [pP] [+-]? [0-9]+
+ / ({} [pP] [+-]? {}) -> MissExponent
+]]
+
+grammar 'Name' [[
+Name <- Sp ({} NameBody {})
+ -> Name
+NameBody <- {[a-zA-Z_] [a-zA-Z0-9_]*}
+FreeName <- Sp ({} {NameBody=>NotReserved} {})
+ -> Name
+MustName <- Name / DirtyName
+DirtyName <- {} -> DirtyName
+]]
+
+grammar 'Exp' [[
+Exp <- (UnUnit (BinaryOp (UnUnit / {} -> DirtyExp))*)
+ -> Exp
+UnUnit <- ExpUnit
+ / UnaryOp+ (ExpUnit / {} -> DirtyExp)
+ExpUnit <- Nil
+ / Boolean
+ / String
+ / Number
+ / DOTS -> DotsAsExp
+ / Table
+ / Function
+ / Simple
+
+Simple <- (Prefix (Sp Suffix)*)
+ -> Simple
+Prefix <- Sp ({} PL DirtyExp DirtyPR)
+ -> Prefix
+ / FreeName
+Index <- ({} BL DirtyExp DirtyBR) -> Index
+Suffix <- DOT Name / DOT {} -> MissField
+ / Method (!(Sp CallStart) {} -> MissPL)?
+ / ({} Table {}) -> Call
+ / ({} String {}) -> Call
+ / Index
+ / ({} PL CallArgList DirtyPR) -> Call
+Method <- COLON Name / COLON {} -> MissMethod
+CallStart <- PL
+ / TL
+ / '"'
+ / "'"
+ / '[' '='* '['
+
+DirtyExp <- Exp
+ / {} -> DirtyExp
+MaybeExp <- Exp / MissExp
+MissExp <- {} -> MissExp
+ExpList <- Sp (MaybeExp (COMMA (MaybeExp))*)
+ -> List
+MustExpList <- Sp (Exp (COMMA (MaybeExp))*)
+ -> List
+CallArgList <- Sp ({} (COMMA {} / Exp)+ {})
+ -> CallArgList
+ / %nil
+NameList <- (MustName (COMMA MustName)*)
+ -> List
+
+ArgList <- (DOTS -> DotsAsArg / Name / Sp {} COMMA)*
+ -> ArgList
+
+Table <- Sp ({} TL TableFields? DirtyTR)
+ -> Table
+TableFields <- (Emmy / TableSep {} / TableField)+
+TableSep <- COMMA / SEMICOLON
+TableField <- NewIndex / NewField / Exp
+NewIndex <- Sp (Index NeedAssign DirtyExp)
+ -> NewIndex
+NewField <- (MustName ASSIGN DirtyExp)
+ -> NewField
+
+Function <- Sp ({} FunctionBody {})
+ -> Function
+FuncArg <- PL {} ArgList {} NeedPR
+ / {} {} -> MissPL Nothing {}
+FunctionBody<- FUNCTION BlockStart FuncArg
+ (Emmy / !END Action)*
+ BlockEnd
+ NeedEnd
+
+BlockStart <- {} -> BlockStart
+BlockEnd <- {} -> BlockEnd
+
+-- 纯占位,修改了 `relabel.lua` 使重复定义不抛错
+Action <- !END .
+Set <- END
+Emmy <- '---@'
+]]
+
+grammar 'Action' [[
+Action <- Sp (CrtAction / UnkAction)
+CrtAction <- Semicolon
+ / Do
+ / Break
+ / Return
+ / Label
+ / GoTo
+ / If
+ / For
+ / While
+ / Repeat
+ / NamedFunction
+ / LocalFunction
+ / Local
+ / Set
+ / Call
+ / ExpInAction
+UnkAction <- ({} {Word+})
+ -> UnknownAction
+ / ({} '//' {} (LongComment / ShortComment))
+ -> CCommentPrefix
+ / ({} {. (!Sps !CrtAction .)*})
+ -> UnknownAction
+ExpInAction <- Sp ({} Exp {})
+ -> ExpInAction
+
+Semicolon <- SEMICOLON
+ -> Skip
+SimpleList <- (Simple (COMMA Simple)*)
+ -> List
+
+Do <- Sp ({} 'do' Cut DoBody NeedEnd {})
+ -> Do
+DoBody <- (Emmy / !END Action)*
+ -> DoBody
+
+Break <- BREAK ({} Semicolon* AfterBreak?)
+ -> Break
+AfterBreak <- Sp !END !UNTIL !ELSEIF !ELSE Action
+BreakStart <- {} -> BreakStart
+BreakEnd <- {} -> BreakEnd
+
+Return <- (ReturnBody Semicolon* AfterReturn?)
+ -> AfterReturn
+ReturnBody <- Sp ({} RETURN MustExpList? {})
+ -> Return
+AfterReturn <- Sp !END !UNTIL !ELSEIF !ELSE Action
+
+Label <- Sp ({} LABEL MustName DirtyLabel {}) -> Label
+
+GoTo <- Sp ({} GOTO MustName {}) -> GoTo
+
+If <- Sp ({} IfBody {})
+ -> If
+IfHead <- (IfPart -> IfBlock)
+ / ({} ElseIfPart -> ElseIfBlock)
+ -> MissIf
+ / ({} ElsePart -> ElseBlock)
+ -> MissIf
+IfBody <- IfHead
+ (ElseIfPart -> ElseIfBlock)*
+ (ElsePart -> ElseBlock)?
+ NeedEnd
+IfPart <- IF DirtyExp THEN
+ {} (Emmy / !ELSEIF !ELSE !END Action)* {}
+ / IF DirtyExp {}->MissThen
+ {} {}
+ElseIfPart <- ELSEIF DirtyExp THEN
+ {} (Emmy / !ELSE !ELSEIF !END Action)* {}
+ / ELSEIF DirtyExp {}->MissThen
+ {} {}
+ElsePart <- ELSE
+ {} (Emmy / !END Action)* {}
+
+For <- Loop / In
+ / FOR
+
+Loop <- Sp ({} LoopBody {})
+ -> Loop
+LoopBody <- FOR LoopStart LoopFinish LoopStep NeedDo
+ BreakStart
+ (Emmy / !END Action)*
+ BreakEnd
+ NeedEnd
+LoopStart <- MustName AssignOrEQ DirtyExp
+LoopFinish <- NeedComma DirtyExp
+LoopStep <- COMMA DirtyExp
+ / NeedComma Exp
+ / Nothing
+
+In <- Sp ({} InBody {})
+ -> In
+InBody <- FOR InNameList NeedIn ExpList NeedDo
+ BreakStart
+ (Emmy / !END Action)*
+ BreakEnd
+ NeedEnd
+InNameList <- &IN DirtyName
+ / NameList
+
+While <- Sp ({} WhileBody {})
+ -> While
+WhileBody <- WHILE DirtyExp NeedDo
+ BreakStart
+ (Emmy / !END Action)*
+ BreakEnd
+ NeedEnd
+
+Repeat <- Sp ({} RepeatBody {})
+ -> Repeat
+RepeatBody <- REPEAT
+ BreakStart
+ (Emmy / !UNTIL Action)*
+ BreakEnd
+ NeedUntil DirtyExp
+
+LocalTag <- (Sp '<' Sp MustName Sp LocalTagEnd)*
+ -> LocalTag
+LocalTagEnd <- '>' / {} -> MissGT
+Local <- (LOCAL LocalNameList (AssignOrEQ ExpList)?)
+ -> Local
+Set <- (SimpleList AssignOrEQ ExpList?)
+ -> Set
+LocalNameList
+ <- (LocalName (COMMA LocalName)*)
+ -> List
+LocalName <- (MustName LocalTag)
+ -> LocalName
+
+Call <- Simple
+ -> SimpleCall
+
+LocalFunction
+ <- Sp ({} LOCAL FunctionNamedBody {})
+ -> LocalFunction
+
+NamedFunction
+ <- Sp ({} FunctionNamedBody {})
+ -> NamedFunction
+FunctionNamedBody
+ <- FUNCTION FuncName BlockStart FuncArg
+ (Emmy / !END Action)*
+ BlockEnd
+ NeedEnd
+FuncName <- (MustName (DOT MustName)* FuncMethod?)
+ -> Simple
+FuncMethod <- COLON Name / COLON {} -> MissMethod
+
+-- 占位
+Emmy <- '---@'
+]]
+
+grammar 'Emmy' [[
+Emmy <- EmmyAction
+ / EmmyComments
+EmmyAction <- EmmySp '---' %s* '@' EmmyBody ShortComment
+EmmySp <- (!'---' Comment / %s / %nl)*
+EmmyComments <- EmmyComment+
+ -> EmmyComment
+EmmyComment <- EmmySp '---' %s* !'@' {(!%nl .)*}
+EmmyBody <- 'class' %s+ EmmyClass -> EmmyClass
+ / 'type' %s+ EmmyType -> EmmyType
+ / 'alias' %s+ EmmyAlias -> EmmyAlias
+ / 'param' %s+ EmmyParam -> EmmyParam
+ / 'return' %s+ EmmyReturn -> EmmyReturn
+ / 'field' %s+ EmmyField -> EmmyField
+ / 'generic' %s+ EmmyGeneric -> EmmyGeneric
+ / 'vararg' %s+ EmmyVararg -> EmmyVararg
+ / 'language' %s+ EmmyLanguage -> EmmyLanguage
+ / 'see' %s+ EmmySee -> EmmySee
+ / 'overload' %s+ EmmyOverLoad -> EmmyOverLoad
+ / EmmyIncomplete
+
+EmmyName <- ({} {[a-zA-Z_] [a-zA-Z0-9_]*})
+ -> EmmyName
+MustEmmyName <- EmmyName / DirtyEmmyName
+DirtyEmmyName <- {} -> DirtyEmmyName
+EmmyLongName <- ({} {(!%nl .)+})
+ -> EmmyName
+EmmyIncomplete <- MustEmmyName
+ -> EmmyIncomplete
+
+EmmyClass <- (MustEmmyName EmmyParentClass?)
+EmmyParentClass <- %s* {} ':' %s* MustEmmyName
+
+EmmyType <- EmmyFunctionType
+ / EmmyTableType
+ / EmmyArrayType
+ / EmmyCommonType
+EmmyCommonType <- EmmyTypeNames
+ -> EmmyCommonType
+EmmyTypeNames <- EmmyTypeName (%s* {} '|' %s* !String EmmyTypeName)*
+EmmyTypeName <- EmmyFunctionType
+ / EmmyTableType
+ / EmmyArrayType
+ / MustEmmyName
+EmmyTypeEnum <- %s* (%nl %s* '---')? '|' EmmyEnum
+ -> EmmyTypeEnum
+EmmyEnum <- %s* {'>'?} %s* String (EmmyEnumComment / (!%nl !'|' .)*)
+EmmyEnumComment <- %s* '#' %s* {(!%nl .)*}
+
+EmmyAlias <- MustEmmyName %s* EmmyType EmmyTypeEnum*
+
+EmmyParam <- MustEmmyName %s* EmmyType %s* EmmyOption %s* EmmyTypeEnum*
+EmmyOption <- Table?
+ -> EmmyOption
+
+EmmyReturn <- {} %nil %nil {} Table -> EmmyOption
+ / {} EmmyType (%s* EmmyName/%nil) {} EmmyOption
+
+EmmyField <- (EmmyFieldAccess MustEmmyName %s* EmmyType)
+EmmyFieldAccess <- ({'public'} Cut %s*)
+ / ({'protected'} Cut %s*)
+ / ({'private'} Cut %s*)
+ / {} -> 'public'
+
+EmmyGeneric <- EmmyGenericBlock
+ (%s* ',' %s* EmmyGenericBlock)*
+EmmyGenericBlock<- (MustEmmyName %s* (':' %s* EmmyType)?)
+ -> EmmyGenericBlock
+
+EmmyVararg <- EmmyType
+
+EmmyLanguage <- MustEmmyName
+
+EmmyArrayType <- ({} MustEmmyName -> EmmyCommonType {} '[' DirtyBR)
+ -> EmmyArrayType
+ / ({} PL EmmyCommonType DirtyPR '[' DirtyBR)
+ -> EmmyArrayType
+
+EmmyTableType <- ({} 'table' Cut '<' %s* EmmyType %s* ',' %s* EmmyType %s* '>' {})
+ -> EmmyTableType
+
+EmmyFunctionType<- ({} 'fun' Cut %s* EmmyFunctionArgs %s* EmmyFunctionRtns {})
+ -> EmmyFunctionType
+EmmyFunctionArgs<- ('(' %s* EmmyFunctionArg %s* (',' %s* EmmyFunctionArg %s*)* DirtyPR)
+ -> EmmyFunctionArgs
+ / '(' %nil DirtyPR -> None
+ / %nil
+EmmyFunctionRtns<- (':' %s* EmmyType (%s* ',' %s* EmmyType)*)
+ -> EmmyFunctionRtns
+ / %nil
+EmmyFunctionArg <- MustEmmyName %s* ':' %s* EmmyType
+
+EmmySee <- {} MustEmmyName %s* '#' %s* MustEmmyName {}
+EmmyOverLoad <- EmmyFunctionType
+]]
+
+grammar 'Lua' [[
+Lua <- Head?
+ (Emmy / Action)* -> Lua
+ BlockEnd
+ Sp
+Head <- '#' (!%nl .)*
+]]
+
+return function (self, lua, mode)
+ local gram = compiled[mode] or compiled['Lua']
+ local r, _, pos = gram:match(lua)
+ if not r then
+ local err = errorpos(pos)
+ return nil, err
+ end
+
+ return r
+end
diff --git a/script/src/parser/init.lua b/script/src/parser/init.lua
new file mode 100644
index 00000000..30596dbe
--- /dev/null
+++ b/script/src/parser/init.lua
@@ -0,0 +1,9 @@
+local api = {
+ grammar = require 'parser.grammar',
+ parse = require 'parser.parse',
+ split = require 'parser.split',
+ calcline = require 'parser.calcline',
+ lines = require 'parser.lines',
+}
+
+return api
diff --git a/script/src/parser/lines.lua b/script/src/parser/lines.lua
new file mode 100644
index 00000000..f2f076e1
--- /dev/null
+++ b/script/src/parser/lines.lua
@@ -0,0 +1,187 @@
+local m = require 'lpeglabel'
+
+local function utf8_len(buf, start, finish)
+ local len, pos = utf8.len(buf, start, finish)
+ if len then
+ return len
+ end
+ return 1 + utf8_len(buf, start, pos-1) + utf8_len(buf, pos+1, finish)
+end
+
+local function Line(start, line, finish)
+ line.start = start
+ line.finish = finish - 1
+ return line
+end
+
+local function Space(...)
+ local line = {...}
+ local sp = 0
+ local tab = 0
+ for i = 1, #line do
+ if line[i] == ' ' then
+ sp = sp + 1
+ elseif line[i] == '\t' then
+ tab = tab + 1
+ end
+ line[i] = nil
+ end
+ line.sp = sp
+ line.tab = tab
+ return line
+end
+
+local parser = m.P{
+'Lines',
+Lines = m.Ct(m.V'Line'^0 * m.V'LastLine'),
+Line = m.Cp() * m.V'Indent' * (1 - m.V'Nl')^0 * m.Cp() * m.V'Nl' / Line,
+LastLine= m.Cp() * m.V'Indent' * (1 - m.V'Nl')^0 * m.Cp() / Line,
+Nl = m.P'\r\n' + m.S'\r\n',
+Indent = m.C(m.S' \t')^0 / Space,
+}
+
+local mt = {}
+mt.__index = mt
+
+function mt:position(row, col, code)
+ if row < 1 then
+ return 1
+ end
+ code = code or self.code
+ if row > #self then
+ if code == 'utf8' then
+ return utf8_len(self.buf) + 1
+ else
+ return #self.buf + 1
+ end
+ end
+ local line = self[row]
+ local next_line = self[row+1]
+ local start = line.start
+ local finish
+ if next_line then
+ finish = next_line.start - 1
+ else
+ finish = #self.buf + 1
+ end
+ local pos
+ if code == 'utf8' then
+ pos = utf8.offset(self.buf, col, start) or finish
+ else
+ pos = start + col - 1
+ end
+ if pos < start then
+ pos = start
+ elseif pos > finish then
+ pos = finish
+ end
+ return pos
+end
+
+local function isCharByte(byte)
+ if not byte then
+ return false
+ end
+ -- [0-9]
+ if byte >= 48 and byte <= 57 then
+ return true
+ end
+ -- [A-Z]
+ if byte >= 65 and byte <= 90 then
+ return true
+ end
+ -- [a-z]
+ if byte >= 97 and byte <= 122 then
+ return true
+ end
+ -- <utf8>
+ if byte >= 128 then
+ return true
+ end
+ return false
+end
+
+function mt:positionAsChar(row, col, code)
+ local pos = self:position(row, col, code)
+ if isCharByte(self.buf:byte(pos, pos)) then
+ return pos
+ elseif isCharByte(self.buf:byte(pos+1, pos+1)) then
+ return pos + 1
+ end
+ return pos
+end
+
+function mt:rowcol(pos, code)
+ if pos < 1 then
+ return 1, 1
+ end
+ code = code or self.code
+ if pos >= #self.buf + 1 then
+ local start = self[#self].start
+ if code == 'utf8' then
+ return #self, utf8_len(self.buf, start) + 1
+ else
+ return #self, #self.buf - start + 2
+ end
+ end
+ local min = 1
+ local max = #self
+ for _ = 1, 100 do
+ if max == min then
+ local start = self[min].start
+ if code == 'utf8' then
+ return min, utf8_len(self.buf, start, pos)
+ else
+ return min, pos - start + 1
+ end
+ end
+ local row = (max - min) // 2 + min
+ local start = self[row].start
+ if pos < start then
+ max = row
+ elseif pos > start then
+ local next_start = self[row + 1].start
+ if pos < next_start then
+ if code == 'utf8' then
+ return row, utf8_len(self.buf, start, pos)
+ else
+ return row, pos - start + 1
+ end
+ elseif pos > next_start then
+ min = row + 1
+ else
+ return row + 1, 1
+ end
+ else
+ return row, 1
+ end
+ end
+ error('rowcol failed!')
+end
+
+function mt:line(i)
+ local start, finish = self:range(i)
+ return self.buf:sub(start, finish)
+end
+
+function mt:range(i)
+ if i < 1 or i > #self then
+ return 0, 0
+ end
+ return self[i].start, self[i].finish
+end
+
+function mt:set_code(code)
+ self.code = code
+end
+
+return function (self, buf, code)
+ local lines, err = parser:match(buf)
+ if not lines then
+ return nil, err
+ end
+ lines.buf = buf
+ lines.code = code
+
+ return setmetatable(lines, mt)
+end
diff --git a/script/src/parser/parse.lua b/script/src/parser/parse.lua
new file mode 100644
index 00000000..6ad79d9b
--- /dev/null
+++ b/script/src/parser/parse.lua
@@ -0,0 +1,41 @@
+local ast = require 'parser.ast'
+
+local Errs
+local State
+
+local function pushError(err)
+ if err.finish < err.start then
+ err.finish = err.start
+ end
+ local last = Errs[#Errs]
+ if last then
+ if last.start <= err.start and last.finish >= err.finish then
+ return
+ end
+ end
+ err.level = err.level or 'error'
+ Errs[#Errs+1] = err
+ return err
+end
+
+return function (self, lua, mode, version)
+ Errs = {}
+ State= {
+ Break = 0,
+ Label = {{}},
+ Dots = {true},
+ Version = version,
+ Comments = {},
+ Lua = lua,
+ }
+ ast.init(State, Errs)
+ local suc, res, err = xpcall(self.grammar, debug.traceback, self, lua, mode)
+ if not suc then
+ return nil, res
+ end
+ if not res then
+ pushError(err)
+ return nil, Errs
+ end
+ return res, Errs, State.Comments
+end
diff --git a/script/src/parser/relabel.lua b/script/src/parser/relabel.lua
new file mode 100644
index 00000000..ac902403
--- /dev/null
+++ b/script/src/parser/relabel.lua
@@ -0,0 +1,361 @@
+-- $Id: re.lua,v 1.44 2013/03/26 20:11:40 roberto Exp $
+
+-- imported functions and modules
+local tonumber, type, print, error = tonumber, type, print, error
+local pcall = pcall
+local setmetatable = setmetatable
+local tinsert, concat = table.insert, table.concat
+local rep = string.rep
+local m = require"lpeglabel"
+
+-- 'm' will be used to parse expressions, and 'mm' will be used to
+-- create expressions; that is, 're' runs on 'm', creating patterns
+-- on 'mm'
+local mm = m
+
+-- pattern's metatable
+local mt = getmetatable(mm.P(0))
+
+
+
+-- No more global accesses after this point
+_ENV = nil
+
+
+local any = m.P(1)
+local dummy = mm.P(false)
+
+
+local errinfo = {
+ NoPatt = "no pattern found",
+ ExtraChars = "unexpected characters after the pattern",
+
+ ExpPatt1 = "expected a pattern after '/'",
+
+ ExpPatt2 = "expected a pattern after '&'",
+ ExpPatt3 = "expected a pattern after '!'",
+
+ ExpPatt4 = "expected a pattern after '('",
+ ExpPatt5 = "expected a pattern after ':'",
+ ExpPatt6 = "expected a pattern after '{~'",
+ ExpPatt7 = "expected a pattern after '{|'",
+
+ ExpPatt8 = "expected a pattern after '<-'",
+
+ ExpPattOrClose = "expected a pattern or closing '}' after '{'",
+
+ ExpNumName = "expected a number, '+', '-' or a name (no space) after '^'",
+ ExpCap = "expected a string, number, '{}' or name after '->'",
+
+ ExpName1 = "expected the name of a rule after '=>'",
+ ExpName2 = "expected the name of a rule after '=' (no space)",
+ ExpName3 = "expected the name of a rule after '<' (no space)",
+
+ ExpLab1 = "expected a label after '{'",
+
+ ExpNameOrLab = "expected a name or label after '%' (no space)",
+
+ ExpItem = "expected at least one item after '[' or '^'",
+
+ MisClose1 = "missing closing ')'",
+ MisClose2 = "missing closing ':}'",
+ MisClose3 = "missing closing '~}'",
+ MisClose4 = "missing closing '|}'",
+ MisClose5 = "missing closing '}'", -- for the captures
+
+ MisClose6 = "missing closing '>'",
+ MisClose7 = "missing closing '}'", -- for the labels
+
+ MisClose8 = "missing closing ']'",
+
+ MisTerm1 = "missing terminating single quote",
+ MisTerm2 = "missing terminating double quote",
+}
+
+local function expect (pattern, label)
+ return pattern + m.T(label)
+end
+
+
+-- Pre-defined names
+local Predef = { nl = m.P"\n" }
+
+
+local mem
+local fmem
+local gmem
+
+
+local function updatelocale ()
+ mm.locale(Predef)
+ Predef.a = Predef.alpha
+ Predef.c = Predef.cntrl
+ Predef.d = Predef.digit
+ Predef.g = Predef.graph
+ Predef.l = Predef.lower
+ Predef.p = Predef.punct
+ Predef.s = Predef.space
+ Predef.u = Predef.upper
+ Predef.w = Predef.alnum
+ Predef.x = Predef.xdigit
+ Predef.A = any - Predef.a
+ Predef.C = any - Predef.c
+ Predef.D = any - Predef.d
+ Predef.G = any - Predef.g
+ Predef.L = any - Predef.l
+ Predef.P = any - Predef.p
+ Predef.S = any - Predef.s
+ Predef.U = any - Predef.u
+ Predef.W = any - Predef.w
+ Predef.X = any - Predef.x
+ mem = {} -- restart memoization
+ fmem = {}
+ gmem = {}
+ local mt = {__mode = "v"}
+ setmetatable(mem, mt)
+ setmetatable(fmem, mt)
+ setmetatable(gmem, mt)
+end
+
+
+updatelocale()
+
+
+
+local I = m.P(function (s,i) print(i, s:sub(1, i-1)); return i end)
+
+
+local function getdef (id, defs)
+ local c = defs and defs[id]
+ if not c then
+ error("undefined name: " .. id)
+ end
+ return c
+end
+
+
+local function mult (p, n)
+ local np = mm.P(true)
+ while n >= 1 do
+ if n%2 >= 1 then np = np * p end
+ p = p * p
+ n = n/2
+ end
+ return np
+end
+
+local function equalcap (s, i, c)
+ if type(c) ~= "string" then return nil end
+ local e = #c + i
+ if s:sub(i, e - 1) == c then return e else return nil end
+end
+
+
+local S = (Predef.space + "--" * (any - Predef.nl)^0)^0
+
+local name = m.C(m.R("AZ", "az", "__") * m.R("AZ", "az", "__", "09")^0)
+
+local arrow = S * "<-"
+
+-- a defined name only have meaning in a given environment
+local Def = name * m.Carg(1)
+
+local num = m.C(m.R"09"^1) * S / tonumber
+
+local String = "'" * m.C((any - "'" - m.P"\n")^0) * expect("'", "MisTerm1")
+ + '"' * m.C((any - '"' - m.P"\n")^0) * expect('"', "MisTerm2")
+
+
+local defined = "%" * Def / function (c,Defs)
+ local cat = Defs and Defs[c] or Predef[c]
+ if not cat then
+ error("name '" .. c .. "' undefined")
+ end
+ return cat
+end
+
+local Range = m.Cs(any * (m.P"-"/"") * (any - "]")) / mm.R
+
+local item = defined + Range + m.C(any - m.P"\n")
+
+local Class =
+ "["
+ * (m.C(m.P"^"^-1)) -- optional complement symbol
+ * m.Cf(expect(item, "ExpItem") * (item - "]")^0, mt.__add)
+ / function (c, p) return c == "^" and any - p or p end
+ * expect("]", "MisClose8")
+
+local function adddef (t, k, exp)
+ if t[k] then
+ -- TODO 改了一下这里的代码,重复定义不会抛错
+ --error("'"..k.."' already defined as a rule")
+ else
+ t[k] = exp
+ end
+ return t
+end
+
+local function firstdef (n, r) return adddef({n}, n, r) end
+
+
+local function NT (n, b)
+ if not b then
+ error("rule '"..n.."' used outside a grammar")
+ else return mm.V(n)
+ end
+end
+
+
+local exp = m.P{ "Exp",
+ Exp = S * ( m.V"Grammar"
+ + m.Cf(m.V"Seq" * (S * "/" * expect(S * m.V"Seq", "ExpPatt1"))^0, mt.__add) );
+ Seq = m.Cf(m.Cc(m.P"") * m.V"Prefix" * (S * m.V"Prefix")^0, mt.__mul);
+ Prefix = "&" * expect(S * m.V"Prefix", "ExpPatt2") / mt.__len
+ + "!" * expect(S * m.V"Prefix", "ExpPatt3") / mt.__unm
+ + m.V"Suffix";
+ Suffix = m.Cf(m.V"Primary" *
+ ( S * ( m.P"+" * m.Cc(1, mt.__pow)
+ + m.P"*" * m.Cc(0, mt.__pow)
+ + m.P"?" * m.Cc(-1, mt.__pow)
+ + "^" * expect( m.Cg(num * m.Cc(mult))
+ + m.Cg(m.C(m.S"+-" * m.R"09"^1) * m.Cc(mt.__pow)
+ + name * m.Cc"lab"
+ ),
+ "ExpNumName")
+ + "->" * expect(S * ( m.Cg((String + num) * m.Cc(mt.__div))
+ + m.P"{}" * m.Cc(nil, m.Ct)
+ + m.Cg(Def / getdef * m.Cc(mt.__div))
+ ),
+ "ExpCap")
+ + "=>" * expect(S * m.Cg(Def / getdef * m.Cc(m.Cmt)),
+ "ExpName1")
+ )
+ )^0, function (a,b,f) if f == "lab" then return a + mm.T(b) else return f(a,b) end end );
+ Primary = "(" * expect(m.V"Exp", "ExpPatt4") * expect(S * ")", "MisClose1")
+ + String / mm.P
+ + Class
+ + defined
+ + "%" * expect(m.P"{", "ExpNameOrLab")
+ * expect(S * m.V"Label", "ExpLab1")
+ * expect(S * "}", "MisClose7") / mm.T
+ + "{:" * (name * ":" + m.Cc(nil)) * expect(m.V"Exp", "ExpPatt5")
+ * expect(S * ":}", "MisClose2")
+ / function (n, p) return mm.Cg(p, n) end
+ + "=" * expect(name, "ExpName2")
+ / function (n) return mm.Cmt(mm.Cb(n), equalcap) end
+ + m.P"{}" / mm.Cp
+ + "{~" * expect(m.V"Exp", "ExpPatt6")
+ * expect(S * "~}", "MisClose3") / mm.Cs
+ + "{|" * expect(m.V"Exp", "ExpPatt7")
+ * expect(S * "|}", "MisClose4") / mm.Ct
+ + "{" * expect(m.V"Exp", "ExpPattOrClose")
+ * expect(S * "}", "MisClose5") / mm.C
+ + m.P"." * m.Cc(any)
+ + (name * -arrow + "<" * expect(name, "ExpName3")
+ * expect(">", "MisClose6")) * m.Cb("G") / NT;
+ Label = num + name;
+ Definition = name * arrow * expect(m.V"Exp", "ExpPatt8");
+ Grammar = m.Cg(m.Cc(true), "G")
+ * m.Cf(m.V"Definition" / firstdef * (S * m.Cg(m.V"Definition"))^0,
+ adddef) / mm.P;
+}
+
+local pattern = S * m.Cg(m.Cc(false), "G") * expect(exp, "NoPatt") / mm.P
+ * S * expect(-any, "ExtraChars")
+
+local function lineno (s, i)
+ if i == 1 then return 1, 1 end
+ local adjustment = 0
+ -- report the current line if at end of line, not the next
+ if s:sub(i,i) == '\n' then
+ i = i-1
+ adjustment = 1
+ end
+ local rest, num = s:sub(1,i):gsub("[^\n]*\n", "")
+ local r = #rest
+ return 1 + num, (r ~= 0 and r or 1) + adjustment
+end
+
+local function calcline (s, i)
+ if i == 1 then return 1, 1 end
+ local rest, line = s:sub(1,i):gsub("[^\n]*\n", "")
+ local col = #rest
+ return 1 + line, col ~= 0 and col or 1
+end
+
+
+local function splitlines(str)
+ local t = {}
+ local function helper(line) tinsert(t, line) return "" end
+ helper((str:gsub("(.-)\r?\n", helper)))
+ return t
+end
+
+local function compile (p, defs)
+ if mm.type(p) == "pattern" then return p end -- already compiled
+ p = p .. " " -- for better reporting of column numbers in errors when at EOF
+ local ok, cp, label, poserr = pcall(function() return pattern:match(p, 1, defs) end)
+ if not ok and cp then
+ if type(cp) == "string" then
+ cp = cp:gsub("^[^:]+:[^:]+: ", "")
+ end
+ error(cp, 3)
+ end
+ if not cp then
+ local lines = splitlines(p)
+ local line, col = lineno(p, poserr)
+ local err = {}
+ tinsert(err, "L" .. line .. ":C" .. col .. ": " .. errinfo[label])
+ tinsert(err, lines[line])
+ tinsert(err, rep(" ", col-1) .. "^")
+ error("syntax error(s) in pattern\n" .. concat(err, "\n"), 3)
+ end
+ return cp
+end
+
+local function match (s, p, i)
+ local cp = mem[p]
+ if not cp then
+ cp = compile(p)
+ mem[p] = cp
+ end
+ return cp:match(s, i or 1)
+end
+
+local function find (s, p, i)
+ local cp = fmem[p]
+ if not cp then
+ cp = compile(p) / 0
+ cp = mm.P{ mm.Cp() * cp * mm.Cp() + 1 * mm.V(1) }
+ fmem[p] = cp
+ end
+ local i, e = cp:match(s, i or 1)
+ if i then return i, e - 1
+ else return i
+ end
+end
+
+local function gsub (s, p, rep)
+ local g = gmem[p] or {} -- ensure gmem[p] is not collected while here
+ gmem[p] = g
+ local cp = g[rep]
+ if not cp then
+ cp = compile(p)
+ cp = mm.Cs((cp / rep + 1)^0)
+ g[rep] = cp
+ end
+ return cp:match(s)
+end
+
+
+-- exported names
+local re = {
+ compile = compile,
+ match = match,
+ find = find,
+ gsub = gsub,
+ updatelocale = updatelocale,
+ calcline = calcline
+}
+
+return re
diff --git a/script/src/parser/split.lua b/script/src/parser/split.lua
new file mode 100644
index 00000000..6ce4a4e7
--- /dev/null
+++ b/script/src/parser/split.lua
@@ -0,0 +1,9 @@
+local m = require 'lpeglabel'
+
+local NL = m.P'\r\n' + m.S'\r\n'
+local LINE = m.C(1 - NL)
+
+return function (str)
+ local MATCH = m.Ct((LINE * NL)^0 * LINE)
+ return MATCH:match(str)
+end
diff --git a/script/src/plugin.lua b/script/src/plugin.lua
new file mode 100644
index 00000000..eba224d6
--- /dev/null
+++ b/script/src/plugin.lua
@@ -0,0 +1,98 @@
+local fs = require 'bee.filesystem'
+local rpc = require 'rpc'
+local config = require 'config'
+local glob = require 'glob'
+local platform = require 'bee.platform'
+local sandbox = require 'sandbox'
+
+local Plugins
+
+local function showError(msg)
+ local traceback = log.error(msg)
+ rpc:notify('window/showMessage', {
+ type = 3,
+ message = traceback,
+ })
+ return traceback
+end
+
+local function showWarn(msg)
+ log.warn(msg)
+ rpc:notify('window/showMessage', {
+ type = 3,
+ message = msg,
+ })
+ return msg
+end
+
+local function scan(path, callback)
+ if fs.is_directory(path) then
+ for p in path:list_directory() do
+ scan(p, callback)
+ end
+ else
+ callback(path)
+ end
+end
+
+local function loadPluginFrom(path, root)
+ log.info('Load plugin from:', path:string())
+ local env = setmetatable({}, { __index = _G })
+ sandbox(path:filename():string(), root:string(), io.open, package.loaded, env)
+ Plugins[#Plugins+1] = env
+end
+
+local function load(workspace)
+ Plugins = nil
+
+ if not config.config.plugin.enable then
+ return
+ end
+ local suc, path = xpcall(fs.path, showWarn, config.config.plugin.path)
+ if not suc then
+ return
+ end
+
+ Plugins = {}
+ local pluginPath
+ if workspace then
+ pluginPath = fs.absolute(workspace.root / path)
+ else
+ pluginPath = fs.absolute(path)
+ end
+ if not fs.is_directory(pluginPath) then
+ pluginPath = pluginPath:parent_path()
+ end
+
+ local pattern = {config.config.plugin.path}
+ local options = {
+ ignoreCase = platform.OS == 'Windows'
+ }
+ local parser = glob.glob(pattern, options)
+
+ scan(pluginPath:parent_path(), function (filePath)
+ if parser(filePath:string()) then
+ loadPluginFrom(filePath, pluginPath)
+ end
+ end)
+end
+
+local function call(name, ...)
+ if not Plugins then
+ return nil
+ end
+ for _, plugin in ipairs(Plugins) do
+ if type(plugin[name]) == 'function' then
+ local suc, res = xpcall(plugin[name], showError, ...)
+ if suc and res ~= nil then
+ return res
+ end
+ end
+ end
+ return nil
+end
+
+return {
+ load = load,
+ call = call,
+}
diff --git a/script/src/rpc.lua b/script/src/rpc.lua
new file mode 100644
index 00000000..4a495695
--- /dev/null
+++ b/script/src/rpc.lua
@@ -0,0 +1,91 @@
+local json = require 'json'
+
+local TIMEOUT = 600.0
+
+local ID = 0
+local BUF = {}
+
+local function notify(self, method, params)
+ local pack = {
+ jsonrpc = '2.0',
+ method = method,
+ params = params,
+ }
+ local content = json.encode(pack)
+ local buf = ('Content-Length: %d\r\n\r\n%s'):format(#content, content)
+ io.write(buf)
+end
+
+local function request(self, method, params, callback)
+ ID = ID + 1
+ local pack = {
+ jsonrpc = '2.0',
+ id = ID,
+ method = method,
+ params = params,
+ }
+ local content = json.encode(pack)
+ local buf = ('Content-Length: %d\r\n\r\n%s'):format(#content, content)
+ BUF[ID] = {
+ callback = callback,
+ timeout = os.clock() + TIMEOUT,
+ }
+ io.write(buf)
+end
+
+local function requestWait(self, method, params, callback)
+ ID = ID + 1
+ local pack = {
+ jsonrpc = '2.0',
+ id = ID,
+ method = method,
+ params = params,
+ }
+ local content = json.encode(pack)
+ local buf = ('Content-Length: %d\r\n\r\n%s'):format(#content, content)
+ BUF[ID] = {
+ callback = callback,
+ }
+ io.write(buf)
+end
+
+local function response(self, id, data)
+ data.jsonrpc = '2.0'
+ data.id = id
+ local content = json.encode(data)
+ local buf = ('Content-Length: %d\r\n\r\n%s'):format(#content, content)
+ io.write(buf)
+end
+
+local function recieve(self, proto)
+ local id = proto.id
+ local data = BUF[id]
+ if not data then
+ log.warn('Recieve id not found: ', table.dump(proto))
+ return
+ end
+ BUF[id] = nil
+ if data.timeout and os.clock() > data.timeout then
+ log.warn('Recieve timeout: ', table.dump(proto))
+ if data.callback then
+ local info = debug.getinfo(data.callback, 'S')
+ log.warn('Call back info: ', info.source, info.linedefined)
+ end
+ return
+ end
+ if proto.error then
+ log.warn('Recieve: ', table.dump(proto.error))
+ return
+ end
+ if data.callback then
+ data.callback(proto.result)
+ end
+end
+
+return {
+ notify = notify,
+ request = request,
+ requestWait = requestWait,
+ response = response,
+ recieve = recieve,
+}
diff --git a/script/src/sandbox.lua b/script/src/sandbox.lua
new file mode 100644
index 00000000..6b2f2a32
--- /dev/null
+++ b/script/src/sandbox.lua
@@ -0,0 +1,167 @@
+local function standard(loaded, env)
+ local r = env or {}
+ for _, s in ipairs {
+ --'package',
+ 'coroutine',
+ 'table',
+ --'io',
+ 'os',
+ 'string',
+ 'math',
+ 'utf8',
+ 'debug',
+ } do
+ r[s] = _G[s]
+ loaded[s] = _G[s]
+ end
+ for _, s in ipairs {
+ 'assert',
+ 'collectgarbage',
+ --'dofile',
+ 'error',
+ 'getmetatable',
+ 'ipairs',
+ --'loadfile',
+ 'load',
+ 'next',
+ 'pairs',
+ 'pcall',
+ 'print',
+ 'rawequal',
+ 'rawlen',
+ 'rawget',
+ 'rawset',
+ 'select',
+ 'setmetatable',
+ 'tonumber',
+ 'tostring',
+ 'type',
+ 'xpcall',
+ '_VERSION',
+ --'require',
+ } do
+ r[s] = _G[s]
+ end
+ return r
+end
+
+local function sandbox_env(loadlua, openfile, loaded, env)
+ local _LOADED = loaded or {}
+ local _E = standard(_LOADED, env)
+ local _PRELOAD = {}
+
+ _E.io = {
+ open = openfile,
+ }
+
+ local function searchpath(name, path)
+ local err = ''
+ name = string.gsub(name, '%.', '/')
+ for c in string.gmatch(path, '[^;]+') do
+ local filename = string.gsub(c, '%?', name)
+ local f = openfile(filename)
+ if f then
+ f:close()
+ return filename
+ end
+ err = err .. ("\n\tno file '%s'"):format(filename)
+ end
+ return nil, err
+ end
+
+ local function searcher_preload(name)
+ assert(type(_PRELOAD) == "table", "'package.preload' must be a table")
+ if _PRELOAD[name] == nil then
+ return ("\n\tno field package.preload['%s']"):format(name)
+ end
+ return _PRELOAD[name]
+ end
+
+ local function searcher_lua(name)
+ assert(type(_E.package.path) == "string", "'package.path' must be a string")
+ local filename, err = searchpath(name, _E.package.path)
+ if not filename then
+ return err
+ end
+ local f, err = loadlua(filename)
+ if not f then
+ error(("error loading module '%s' from file '%s':\n\t%s"):format(name, filename, err))
+ end
+ return f, filename
+ end
+
+ local function require_load(name)
+ local msg = ''
+ local _SEARCHERS = _E.package.searchers
+ assert(type(_SEARCHERS) == "table", "'package.searchers' must be a table")
+ for _, searcher in ipairs(_SEARCHERS) do
+ local f, extra = searcher(name)
+ if type(f) == 'function' then
+ return f, extra
+ elseif type(f) == 'string' then
+ msg = msg .. f
+ end
+ end
+ error(("module '%s' not found:%s"):format(name, msg))
+ end
+
+ _E.require = function(name)
+ assert(type(name) == "string", ("bad argument #1 to 'require' (string expected, got %s)"):format(type(name)))
+ local p = _LOADED[name]
+ if p ~= nil then
+ return p
+ end
+ local init, extra = require_load(name)
+ if debug.getupvalue(init, 1) == '_ENV' then
+ debug.setupvalue(init, 1, _E)
+ end
+ local res = init(name, extra)
+ if res ~= nil then
+ _LOADED[name] = res
+ end
+ if _LOADED[name] == nil then
+ _LOADED[name] = true
+ end
+ return _LOADED[name]
+ end
+ _E.package = {
+ config = [[
+ \
+ ;
+ ?
+ !
+ -
+ ]],
+ loaded = _LOADED,
+ path = '?.lua',
+ preload = _PRELOAD,
+ searchers = { searcher_preload, searcher_lua },
+ searchpath = searchpath
+ }
+ return _E
+end
+
+return function(name, root, io_open, loaded, env)
+ if not root:sub(-1):find '[/\\]' then
+ root = root .. '/'
+ end
+ local function openfile(name, mode)
+ return io_open(root .. name, mode)
+ end
+ local function loadlua(name)
+ local f = openfile(name, 'r')
+ if f then
+ local str = f:read 'a'
+ f:close()
+ return load(str, '@' .. root .. name)
+ end
+ end
+ local init = loadlua(name)
+ if not init then
+ return
+ end
+ if debug.getupvalue(init, 1) == '_ENV' then
+ debug.setupvalue(init, 1, sandbox_env(loadlua, openfile, loaded, env))
+ end
+ return init()
+end
diff --git a/script/src/service.lua b/script/src/service.lua
new file mode 100644
index 00000000..2d8a3e64
--- /dev/null
+++ b/script/src/service.lua
@@ -0,0 +1,1023 @@
+local subprocess = require 'bee.subprocess'
+local method = require 'method'
+local thread = require 'bee.thread'
+local async = require 'async'
+local rpc = require 'rpc'
+local parser = require 'parser'
+local core = require 'core'
+local lang = require 'language'
+local updateTimer= require 'timer'
+local buildVM = require 'vm'
+local sourceMgr = require 'vm.source'
+local localMgr = require 'vm.local'
+local valueMgr = require 'vm.value'
+local chainMgr = require 'vm.chain'
+local functionMgr= require 'vm.function'
+local listMgr = require 'vm.list'
+local emmyMgr = require 'emmy.manager'
+local config = require 'config'
+local task = require 'task'
+local files = require 'files'
+local uric = require 'uri'
+local capability = require 'capability'
+local plugin = require 'plugin'
+
+local ErrorCodes = {
+ -- Defined by JSON RPC
+ ParseError = -32700,
+ InvalidRequest = -32600,
+ MethodNotFound = -32601,
+ InvalidParams = -32602,
+ InternalError = -32603,
+ serverErrorStart = -32099,
+ serverErrorEnd = -32000,
+ ServerNotInitialized = -32002,
+ UnknownErrorCode = -32001,
+
+ -- Defined by the protocol.
+ RequestCancelled = -32800,
+}
+
+local CachedVM = setmetatable({}, {__mode = 'kv'})
+
+---@class LSP
+local mt = {}
+mt.__index = mt
+---@type files
+mt._files = nil
+
+function mt:_callMethod(name, params)
+ local optional
+ if name:sub(1, 2) == '$/' then
+ name = name:sub(3)
+ optional = true
+ end
+ local f = method[name]
+ if f then
+ local clock = os.clock()
+ local suc, res = xpcall(f, debug.traceback, self, params)
+ local passed = os.clock() - clock
+ if passed > 0.2 then
+ log.debug(('Task [%s] takes [%.3f]sec.'):format(name, passed))
+ end
+ if suc then
+ return res
+ else
+ local ok, r = pcall(table.dump, params)
+ local dump = ok and r or '<Cyclic table>'
+ log.debug(('Task [%s] failed, params: %s'):format(
+ name, dump
+ ))
+ log.error(res)
+ if res:find 'not enough memory' then
+ self:restartDueToMemoryLeak()
+ end
+ return nil, {
+ code = ErrorCodes.InternalError,
+ message = r .. '\n' .. res,
+ }
+ end
+ end
+ if optional then
+ return nil
+ else
+ return nil, {
+ code = ErrorCodes.MethodNotFound,
+ message = 'MethodNotFound',
+ }
+ end
+end
+
+function mt:responseProto(id, response, err)
+ local container = table.container()
+ if err then
+ container.error = err
+ else
+ container.result = response
+ end
+ rpc:response(id, container)
+end
+
+function mt:_doProto(proto)
+ local id = proto.id
+ local name = proto.method
+ local params = proto.params
+ local response, err = self:_callMethod(name, params)
+ if not id then
+ return
+ end
+ if type(response) == 'function' then
+ response(function (final)
+ self:responseProto(id, final)
+ end)
+ else
+ self:responseProto(id, response, err)
+ end
+end
+
+function mt:clearDiagnostics(uri)
+ rpc:notify('textDocument/publishDiagnostics', {
+ uri = uri,
+ diagnostics = {},
+ })
+ self._needDiagnostics[uri] = nil
+end
+
+---@param uri uri
+---@param compiled table
+---@param mode string
+---@return boolean
+function mt:needCompile(uri, compiled, mode)
+ self._needDiagnostics[uri] = true
+ if self._needCompile[uri] then
+ return false
+ end
+ if not compiled then
+ compiled = {}
+ end
+ if compiled[uri] then
+ return false
+ end
+ self._needCompile[uri] = compiled
+ if mode == 'child' then
+ table.insert(self._needCompile, uri)
+ else
+ table.insert(self._needCompile, 1, uri)
+ end
+ return true
+end
+
+function mt:isNeedCompile(uri)
+ return self._needCompile[uri]
+end
+
+function mt:isWaitingCompile()
+ if self._needCompile[1] then
+ return true
+ else
+ return false
+ end
+end
+
+---@param uri uri
+---@param version integer
+---@param text string
+function mt:saveText(uri, version, text)
+ self._lastLoadedVM = uri
+ self._files:save(uri, text, version)
+ self:needCompile(uri)
+end
+
+---@param uri uri
+function mt:isDeadText(uri)
+ return self._files:isDead(uri)
+end
+
+---@param uri uri
+---@return boolean
+function mt:isLua(uri)
+ if not self.workspace then
+ return true
+ end
+ local path = self.workspace:absolutePathByUri(uri)
+ if not path then
+ return false
+ end
+ if self.workspace:isLuaFile(path) then
+ return true
+ end
+ return false
+end
+
+function mt:isIgnored(uri)
+ if not self.workspace then
+ return true
+ end
+ if not self.workspace.gitignore then
+ return true
+ end
+ local path = self.workspace:relativePathByUri(uri)
+ if not path then
+ return true
+ end
+ if self.workspace.gitignore(path:string()) then
+ return true
+ end
+ return false
+end
+
+---@param uri uri
+---@param version integer
+---@param text string
+function mt:open(uri, version, text)
+ if not self:isLua(uri) then
+ return
+ end
+ self:saveText(uri, version, text)
+ self._files:open(uri, text)
+end
+
+---@param uri uri
+function mt:close(uri)
+ self._files:close(uri)
+ if self._files:isLibrary(uri) then
+ return
+ end
+ if not self:isLua(uri) or self:isIgnored(uri) then
+ self:removeText(uri)
+ end
+end
+
+---@param uri uri
+---@return boolean
+function mt:isOpen(uri)
+ return self._files:isOpen(uri)
+end
+
+---@param uri uri
+---@param path path
+---@param text string
+function mt:checkReadFile(uri, path, text)
+ if not text then
+ log.debug('No file: ', path)
+ return false
+ end
+ local size = #text / 1000.0
+ if size > config.config.workspace.preloadFileSize then
+ log.info(('Skip large file, size: %.3f KB: %s'):format(size, uri))
+ return false
+ end
+ if self:getCachedFileCount() >= config.config.workspace.maxPreload then
+ if not self._hasShowHitMaxPreload then
+ self._hasShowHitMaxPreload = true
+ rpc:notify('window/showMessage', {
+ type = 3,
+ message = lang.script('MWS_MAX_PRELOAD', config.config.workspace.maxPreload),
+ })
+ end
+ return false
+ end
+ return true
+end
+
+---@param uri uri
+---@param path path
+---@param buf string
+---@param compiled table
+function mt:readText(uri, path, buf, compiled)
+ if self._files:get(uri) then
+ log.debug('Read failed due to duplicate:', uri)
+ return
+ end
+ if not self:isLua(uri) then
+ log.debug('Read failed due to not lua:', uri)
+ return
+ end
+ if not self._files:isOpen() and self:isIgnored(uri) then
+ log.debug('Read failed due to ignored:', uri)
+ return
+ end
+ local text = buf or io.load(path)
+ if not self._files:isOpen() and not self:checkReadFile(uri, path, text) then
+ log.debug('Read failed due to check failed:', uri)
+ return
+ end
+ self._files:save(uri, text, 0)
+ self:needCompile(uri, compiled)
+end
+
+---@param uri uri
+---@param path path
+---@param buf string
+---@param compiled table
+function mt:readLibrary(uri, path, buf, compiled)
+ if not self:isLua(uri) then
+ return
+ end
+ if not self:checkReadFile(uri, path, buf) then
+ return
+ end
+ self._files:save(uri, buf, 0)
+ self._files:setLibrary(uri)
+ self:needCompile(uri, compiled)
+ self:clearDiagnostics(uri)
+end
+
+---@param uri uri
+function mt:removeText(uri)
+ self._files:remove(uri)
+ self:compileVM(uri)
+end
+
+function mt:getCachedFileCount()
+ return self._files:count()
+end
+
+function mt:reCompile()
+ if self.global then
+ self.global:remove()
+ end
+ if self.chain then
+ self.chain:remove()
+ end
+ if self.emmy then
+ self.emmy:remove()
+ end
+
+ local compiled = {}
+ self._files:clearVM()
+
+ for _, obj in pairs(listMgr.list) do
+ if obj.type == 'source' or obj.type == 'function' then
+ obj:kill()
+ end
+ end
+
+ self.global = core.global(self)
+ self.chain = chainMgr()
+ self.emmy = emmyMgr()
+ self.globalValue = nil
+ self._compileTask:remove()
+ self._needCompile = {}
+ local n = 0
+ for uri in self._files:eachFile() do
+ self:needCompile(uri, compiled)
+ n = n + 1
+ end
+ log.debug('reCompile:', n, self._files:count())
+
+ self:_testMemory('skip')
+end
+
+function mt:reDiagnostic()
+ for uri in self._files:eachFile() do
+ self:clearDiagnostics(uri)
+ self._needDiagnostics[uri] = true
+ end
+end
+
+function mt:clearAllFiles()
+ for uri in self._files:eachFile() do
+ self:clearDiagnostics(uri)
+ end
+ self._files:clear()
+end
+
+---@param uri uri
+function mt:loadVM(uri)
+ local file = self._files:get(uri)
+ if not file then
+ return nil
+ end
+ if uri ~= self._lastLoadedVM then
+ self:needCompile(uri)
+ end
+ if self._compileTask
+ and not self._compileTask:isRemoved()
+ and self._compileTask:get 'uri' == uri
+ then
+ self._compileTask:fastForward()
+ else
+ self:compileVM(uri)
+ end
+ if file:getVM() then
+ self._lastLoadedVM = uri
+ end
+ return file:getVM(), file:getLines()
+end
+
+function mt:_markCompiled(uri, compiled)
+ local newCompiled = self._needCompile[uri]
+ if newCompiled then
+ newCompiled[uri] = true
+ self._needCompile[uri] = nil
+ end
+ for i, u in ipairs(self._needCompile) do
+ if u == uri then
+ table.remove(self._needCompile, i)
+ break
+ end
+ end
+ if newCompiled == compiled then
+ return compiled
+ end
+ if not compiled then
+ compiled = {}
+ end
+ for k, v in pairs(newCompiled) do
+ compiled[k] = v
+ end
+ return compiled
+end
+
+---@param file file
+---@return table
+function mt:compileAst(file)
+ local ast, err, comments = parser:parse(file:getText(), 'lua', config.config.runtime.version)
+ file.comments = comments
+ if ast then
+ file:setAstErr(err)
+ else
+ if type(err) == 'string' then
+ local message = lang.script('PARSER_CRASH', err)
+ log.debug(message)
+ rpc:notify('window/showMessage', {
+ type = 3,
+ message = lang.script('PARSER_CRASH', err:match '%.lua%:%d+%:(.+)' or err),
+ })
+ if message:find 'not enough memory' then
+ self:restartDueToMemoryLeak()
+ end
+ end
+ end
+ return ast
+end
+
+---@param file file
+---@param uri uri
+function mt:_clearChainNode(file, uri)
+ for pUri in file:eachParent() do
+ local parent = self._files:get(pUri)
+ if parent then
+ parent:removeChild(uri)
+ end
+ end
+end
+
+---@param file file
+---@param compiled table
+function mt:_compileChain(file, compiled)
+ if not compiled then
+ compiled = {}
+ end
+ for uri in file:eachChild() do
+ self:needCompile(uri, compiled, 'child')
+ end
+ for uri in file:eachParent() do
+ self:needCompile(uri, compiled, 'parent')
+ end
+end
+
+function mt:_compileGlobal(compiled)
+ local uris = self.global:getAllUris()
+ for _, uri in ipairs(uris) do
+ self:needCompile(uri, compiled, 'global')
+ end
+end
+
+function mt:_clearGlobal(uri)
+ self.global:clearGlobal(uri)
+end
+
+function mt:_hasSetGlobal(uri)
+ return self.global:hasSetGlobal(uri)
+end
+
+---@param uri uri
+function mt:compileVM(uri)
+ local file = self._files:get(uri)
+ if not file then
+ self:_markCompiled(uri)
+ return nil
+ end
+ local compiled = self._needCompile[uri]
+ if not compiled then
+ return nil
+ end
+ file:removeVM()
+
+ local clock = os.clock()
+ local ast = self:compileAst(file)
+ local version = file:getVersion()
+ local astCost = os.clock() - clock
+ if astCost > 0.1 then
+ log.warn(('Compile Ast[%s] takes [%.3f] sec, size [%.3f]kb'):format(uri, astCost, #file:getText() / 1000))
+ end
+ file:clearOldText()
+
+ self:_clearChainNode(file, uri)
+ self:_clearGlobal(uri)
+
+ local clock = os.clock()
+ local vm, err = buildVM(ast, self, uri, file:getText())
+ if vm then
+ CachedVM[vm] = true
+ end
+ if self:isDeadText(uri)
+ or file:isRemoved()
+ or version ~= file:getVersion()
+ then
+ if vm then
+ vm:remove()
+ end
+ return nil
+ end
+ if self._needCompile[uri] then
+ self:_markCompiled(uri, compiled)
+ self._needDiagnostics[uri] = true
+ else
+ if vm then
+ vm:remove()
+ end
+ return nil
+ end
+ file:saveVM(vm, version, os.clock() - clock)
+
+ local clock = os.clock()
+ local lines = parser:lines(file:getText(), 'utf8')
+ local lineCost = os.clock() - clock
+ file:saveLines(lines, lineCost)
+
+ if file:getVMCost() > 0.2 then
+ log.debug(('Compile VM[%s] takes: %.3f sec'):format(uri, file:getVMCost()))
+ end
+ if not vm then
+ error(err)
+ end
+
+ self:_compileChain(file, compiled)
+ if self:_hasSetGlobal(uri) then
+ self:_compileGlobal(compiled)
+ end
+
+ return file
+end
+
+---@param uri uri
+function mt:doDiagnostics(uri)
+ if not config.config.diagnostics.enable then
+ self._needDiagnostics[uri] = nil
+ return
+ end
+ if not self._needDiagnostics[uri] then
+ return
+ end
+ local name = 'textDocument/publishDiagnostics'
+ local file = self._files:get(uri)
+ if not file
+ or file:isRemoved()
+ or not file:getVM()
+ or file:getVM():isRemoved()
+ or self._files:isLibrary(uri)
+ then
+ self._needDiagnostics[uri] = nil
+ self:clearDiagnostics(uri)
+ return
+ end
+ local data = {
+ uri = uri,
+ vm = file:getVM(),
+ lines = file:getLines(),
+ version = file:getVM():getVersion(),
+ }
+ local res = self:_callMethod(name, data)
+ if self:isDeadText(uri) then
+ return
+ end
+ if file:getVM():getVersion() ~= data.version then
+ return
+ end
+ if self._needDiagnostics[uri] then
+ self._needDiagnostics[uri] = nil
+ else
+ return
+ end
+ if res then
+ rpc:notify(name, {
+ uri = uri,
+ diagnostics = res,
+ })
+ else
+ self:clearDiagnostics(uri)
+ end
+end
+
+---@param uri uri
+---@return file
+function mt:getFile(uri)
+ return self._files:get(uri)
+end
+
+---@param uri uri
+---@return VM
+---@return table
+---@return string
+function mt:getVM(uri)
+ local file = self._files:get(uri)
+ if not file then
+ return nil
+ end
+ return file:getVM(), file:getLines(), file:getText()
+end
+
+---@param uri uri
+---@return string
+---@return string
+function mt:getText(uri)
+ local file = self._files:get(uri)
+ if not file then
+ return nil
+ end
+ return file:getText(), file:getOldText()
+end
+
+function mt:getComments(uri)
+ local file = self._files:get(uri)
+ if not file then
+ return nil
+ end
+ return file:getComments()
+end
+
+---@param uri uri
+---@return table
+function mt:getAstErrors(uri)
+ local file = self._files:get(uri)
+ if not file then
+ return nil
+ end
+ return file:getAstErr()
+end
+
+---@param child uri
+---@param parent uri
+function mt:compileChain(child, parent)
+ local parentFile = self._files:get(parent)
+ local childFile = self._files:get(child)
+
+ if not parentFile or not childFile then
+ return
+ end
+ if parentFile == childFile then
+ return
+ end
+
+ parentFile:addChild(child)
+ childFile:addParent(parent)
+end
+
+function mt:checkWorkSpaceComplete()
+ if self._hasCheckedWorkSpaceComplete then
+ return
+ end
+ self._hasCheckedWorkSpaceComplete = true
+ if self.workspace:isComplete() then
+ return
+ end
+ self._needShowComplete = true
+ rpc:notify('window/showMessage', {
+ type = 3,
+ message = lang.script.MWS_NOT_COMPLETE,
+ })
+end
+
+function mt:_createCompileTask()
+ if not self:isWaitingCompile() and not next(self._needDiagnostics) then
+ if self._needShowComplete then
+ self._needShowComplete = nil
+ rpc:notify('window/showMessage', {
+ type = 3,
+ message = lang.script.MWS_COMPLETE,
+ })
+ end
+ end
+ self._compileTask = task(function ()
+ self:doDiagnostics(self._lastLoadedVM)
+ local uri = self._needCompile[1]
+ if uri then
+ self._compileTask:set('uri', uri)
+ pcall(function () self:compileVM(uri) end)
+ else
+ uri = next(self._needDiagnostics)
+ if uri then
+ self:doDiagnostics(uri)
+ end
+ end
+ end)
+end
+
+function mt:_doCompileTask()
+ if not self._compileTask or self._compileTask:isRemoved() then
+ self:_createCompileTask()
+ end
+ while true do
+ local res = self._compileTask:step()
+ if res == 'stop' then
+ self._compileTask:remove()
+ break
+ end
+ if self._compileTask:isRemoved() then
+ break
+ end
+ end
+ self:_loadProto()
+end
+
+function mt:_loadProto()
+ while true do
+ local ok, proto = self._proto:pop()
+ if not ok then
+ break
+ end
+ if proto.method then
+ self:_doProto(proto)
+ else
+ rpc:recieve(proto)
+ end
+ end
+end
+
+function mt:restartDueToMemoryLeak()
+ rpc:requestWait('window/showMessageRequest', {
+ type = 3,
+ message = lang.script('DEBUG_MEMORY_LEAK', '[Lua]'),
+ actions = {
+ {
+ title = lang.script.DEBUG_RESTART_NOW,
+ }
+ }
+ }, function ()
+ os.exit(true)
+ end)
+ ac.wait(5, function ()
+ os.exit(true)
+ end)
+end
+
+function mt:reScanFiles()
+ if not self.workspace then
+ return
+ end
+ log.debug('reScanFiles')
+ self:clearAllFiles()
+ self.workspace:scanFiles()
+end
+
+function mt:onUpdateConfig(updated, other)
+ local oldConfig = table.deepCopy(config.config)
+ local oldOther = table.deepCopy(config.other)
+ config:setConfig(updated, other)
+ local newConfig = config.config
+ local newOther = config.other
+ if not table.equal(oldConfig.runtime, newConfig.runtime) then
+ local library = require 'core.library'
+ library.reload()
+ self:reCompile()
+ end
+ if not table.equal(oldConfig.diagnostics, newConfig.diagnostics) then
+ log.debug('reDiagnostic')
+ self:reDiagnostic()
+ end
+ if newConfig.completion.enable then
+ capability.completion.enable()
+ else
+ capability.completion.disable()
+ end
+ if not table.equal(oldConfig.plugin, newConfig.plugin) then
+ plugin.load(self.workspace)
+ end
+ if not table.equal(oldConfig.workspace, newConfig.workspace)
+ or not table.equal(oldConfig.plugin, newConfig.plugin)
+ or not table.equal(oldOther.associations, newOther.associations)
+ or not table.equal(oldOther.exclude, newOther.exclude)
+ then
+ self:reScanFiles()
+ end
+end
+
+function mt:_testMemory(skipDead)
+ local clock = os.clock()
+ collectgarbage()
+ log.debug('collectgarbage: ', ('%.3f'):format(os.clock() - clock))
+
+ local clock = os.clock()
+ local cachedVM = 0
+ local cachedSource = 0
+ local cachedFunction = 0
+ for _, file in self._files:eachFile() do
+ local vm = file:getVM()
+ if vm and not vm:isRemoved() then
+ cachedVM = cachedVM + 1
+ cachedSource = cachedSource + #vm.sources
+ cachedFunction = cachedFunction + #vm.funcs
+ end
+ end
+ local aliveVM = 0
+ local deadVM = 0
+ for vm in pairs(CachedVM) do
+ if vm:isRemoved() then
+ deadVM = deadVM + 1
+ else
+ aliveVM = aliveVM + 1
+ end
+ end
+
+ local alivedSource = 0
+ local deadSource = 0
+ for _, id in pairs(sourceMgr.watch) do
+ if listMgr.get(id) then
+ alivedSource = alivedSource + 1
+ else
+ deadSource = deadSource + 1
+ end
+ end
+
+ local alivedFunction = 0
+ local deadFunction = 0
+ for _, id in pairs(functionMgr.watch) do
+ if listMgr.get(id) then
+ alivedFunction = alivedFunction + 1
+ else
+ deadFunction = deadFunction + 1
+ end
+ end
+
+ local totalLocal = 0
+ for _ in pairs(localMgr.watch) do
+ totalLocal = totalLocal + 1
+ end
+
+ local totalValue = 0
+ local deadValue = 0
+ for value in pairs(valueMgr.watch) do
+ totalValue = totalValue + 1
+ if not value:getSource() then
+ deadValue = deadValue + 1
+ end
+ end
+
+ local totalEmmy = self.emmy:count()
+
+ local mem = collectgarbage 'count'
+ local threadInfo = async.info
+ local threadBuf = {}
+ for i, count in ipairs(threadInfo) do
+ if count then
+ threadBuf[i] = ('#%03d Mem: [%.3f]kb'):format(i, count)
+ else
+ threadBuf[i] = ('#%03d Mem: <Unknown>'):format(i)
+ end
+ end
+
+ log.debug(('\n\z
+ State\n\z
+ Main Mem: [%.3f]kb\n\z
+ %s\n\z
+-------------------\n\z
+ CachedVM: [%d]\n\z
+ AlivedVM: [%d]\n\z
+ DeadVM: [%d]\n\z
+-------------------\n\z
+ CachedSrc: [%d]\n\z
+ AlivedSrc: [%d]\n\z
+ DeadSrc: [%d]\n\z
+-------------------\n\z
+ CachedFunc:[%d]\n\z
+ AlivedFunc:[%d]\n\z
+ DeadFunc: [%d]\n\z
+-------------------\n\z
+ TotalVal: [%d]\n\z
+ DeadVal: [%d]\n\z
+-------------------\n\z
+ TotalLoc: [%d]\n\z
+ TotalEmmy: [%d]\n\z'):format(
+ mem,
+ table.concat(threadBuf, '\n'),
+
+ cachedVM,
+ aliveVM,
+ deadVM,
+
+ cachedSource,
+ alivedSource,
+ deadSource,
+
+ cachedFunction,
+ alivedFunction,
+ deadFunction,
+
+ totalValue,
+ deadValue,
+ totalLocal,
+ totalEmmy
+ ))
+ log.debug('test memory: ', ('%.3f'):format(os.clock() - clock))
+
+ if deadValue / totalValue >= 0.5 and not skipDead then
+ self:_testFindDeadValues()
+ end
+end
+
+function mt:_testFindDeadValues()
+ if self._testHasFoundDeadValues then
+ return
+ end
+ self._testHasFoundDeadValues = true
+
+ log.debug('Start find dead values, may takes few seconds...')
+
+ local mark = {}
+ local stack = {}
+ local count = 0
+ local clock = os.clock()
+ local function push(info)
+ stack[#stack+1] = info
+ end
+ local function pop()
+ stack[#stack] = nil
+ end
+ local function showStack(uri)
+ count = count + 1
+ log.debug(uri, table.concat(stack, '->'))
+ end
+ local function scan(name, tbl)
+ if count > 100 or os.clock() - clock > 5.0 then
+ return
+ end
+ if type(tbl) ~= 'table' then
+ return
+ end
+ if mark[tbl] then
+ return
+ end
+ mark[tbl] = true
+ if tbl.type then
+ push(('%s<%s>'):format(name, tbl.type))
+ else
+ push(name)
+ end
+ if tbl.type == 'value' then
+ if not tbl:getSource() then
+ showStack(tbl.uri)
+ end
+ elseif tbl.type == 'files' then
+ for k, v in tbl:eachFile() do
+ scan(k, v)
+ end
+ else
+ for k, v in pairs(tbl) do
+ scan(k, v)
+ end
+ end
+ pop()
+ end
+ scan('root', self._files)
+ log.debug('Finish...')
+end
+
+function mt:onTick()
+ self:_loadProto()
+ self:_doCompileTask()
+ if (os.clock() - self._clock >= 60 and not self:isWaitingCompile())
+ or (os.clock() - self._clock >= 300)
+ then
+ self._clock = os.clock()
+ self:_testMemory()
+ end
+end
+
+function mt:listen()
+ subprocess.filemode(io.stdin, 'b')
+ subprocess.filemode(io.stdout, 'b')
+ io.stdin:setvbuf 'no'
+ io.stdout:setvbuf 'no'
+
+ local _, out = async.run 'proto'
+ self._proto = out
+
+ local timerClock = 0.0
+ while true do
+ local startClock = os.clock()
+ async.onTick()
+ self:onTick()
+
+ local delta = os.clock() - timerClock
+ local suc, err = xpcall(updateTimer, log.error, delta)
+ if not suc then
+ io.stderr:write(err)
+ io.stderr:flush()
+ end
+ timerClock = os.clock()
+
+ local passedClock = os.clock() - startClock
+ if passedClock > 0.1 then
+ thread.sleep(0.0)
+ else
+ thread.sleep(0.001)
+ end
+ end
+end
+
+return function ()
+ local session = setmetatable({
+ _needCompile = {},
+ _needDiagnostics = {},
+ _clock = -100,
+ _version = 0,
+ _files = files(),
+ }, mt)
+ session.global = core.global(session)
+ session.chain = chainMgr()
+ session.emmy = emmyMgr()
+ return session
+end
diff --git a/script/src/task.lua b/script/src/task.lua
new file mode 100644
index 00000000..bb1a7922
--- /dev/null
+++ b/script/src/task.lua
@@ -0,0 +1,64 @@
+local mt = {}
+mt.__index = mt
+mt.type = 'task'
+
+function mt:remove()
+ if self._removed then
+ return
+ end
+ self._removed = true
+ coroutine.close(self.task)
+end
+
+function mt:isRemoved()
+ return self._removed
+end
+
+function mt:step()
+ if self._removed then
+ return
+ end
+ local suc, res = coroutine.resume(self.task)
+ if not suc then
+ self:remove()
+ log.error(debug.traceback(self.task, res))
+ return
+ end
+ if coroutine.status(self.task) == 'dead' then
+ self:remove()
+ end
+ return res
+end
+
+function mt:fastForward()
+ if self._removed then
+ return
+ end
+ while true do
+ local suc = coroutine.resume(self.task)
+ if not suc then
+ self:remove()
+ break
+ end
+ if coroutine.status(self.task) == 'dead' then
+ self:remove()
+ break
+ end
+ end
+end
+
+function mt:set(key, value)
+ self.data[key] = value
+end
+
+function mt:get(key)
+ return self.data[key]
+end
+
+return function (callback)
+ local self = setmetatable({
+ data = {},
+ task = coroutine.create(callback),
+ }, mt)
+ return self
+end
diff --git a/script/src/timer.lua b/script/src/timer.lua
new file mode 100644
index 00000000..dc36e6a0
--- /dev/null
+++ b/script/src/timer.lua
@@ -0,0 +1,276 @@
+local setmetatable = setmetatable
+local pairs = pairs
+local tableInsert = table.insert
+local mathMax = math.max
+local mathFloor = math.floor
+
+local curFrame = 0
+local maxFrame = 0
+local curIndex = 0
+local freeQueue = {}
+local timer = {}
+
+local function allocQueue()
+ local n = #freeQueue
+ if n > 0 then
+ local r = freeQueue[n]
+ freeQueue[n] = nil
+ return r
+ else
+ return {}
+ end
+end
+
+local function mTimeout(self, timeout)
+ if self._pauseRemaining or self._running then
+ return
+ end
+ local ti = curFrame + timeout
+ local q = timer[ti]
+ if q == nil then
+ q = allocQueue()
+ timer[ti] = q
+ end
+ self._timeoutFrame = ti
+ self._running = true
+ q[#q + 1] = self
+end
+
+local function mWakeup(self)
+ if self._removed then
+ return
+ end
+ self._running = false
+ if self._onTimer then
+ xpcall(self._onTimer, log.error, self)
+ end
+ if self._removed then
+ return
+ end
+ if self._timerCount then
+ if self._timerCount > 1 then
+ self._timerCount = self._timerCount - 1
+ mTimeout(self, self._timeout)
+ else
+ self._removed = true
+ end
+ else
+ mTimeout(self, self._timeout)
+ end
+end
+
+local function getRemaining(self)
+ if self._removed then
+ return 0
+ end
+ if self._pauseRemaining then
+ return self._pauseRemaining
+ end
+ if self._timeoutFrame == curFrame then
+ return self._timeout or 0
+ end
+ return self._timeoutFrame - curFrame
+end
+
+local function onTick()
+ local q = timer[curFrame]
+ if q == nil then
+ curIndex = 0
+ return
+ end
+ for i = curIndex + 1, #q do
+ local callback = q[i]
+ curIndex = i
+ q[i] = nil
+ if callback then
+ mWakeup(callback)
+ end
+ end
+ curIndex = 0
+ timer[curFrame] = nil
+ freeQueue[#freeQueue + 1] = q
+end
+
+function ac.clock()
+ return curFrame / 1000.0
+end
+
+function ac.timer_size()
+ local n = 0
+ for _, ts in pairs(timer) do
+ n = n + #ts
+ end
+ return n
+end
+
+function ac.timer_all()
+ local tbl = {}
+ for _, ts in pairs(timer) do
+ for i, t in ipairs(ts) do
+ if t then
+ tbl[#tbl + 1] = t
+ end
+ end
+ end
+ return tbl
+end
+
+local function update(delta)
+ if curIndex ~= 0 then
+ curFrame = curFrame - 1
+ end
+ maxFrame = maxFrame + delta * 1000.0
+ while curFrame < maxFrame do
+ curFrame = curFrame + 1
+ onTick()
+ end
+end
+
+local mt = {}
+mt.__index = mt
+mt.type = 'timer'
+
+function mt:__tostring()
+ return '[table:timer]'
+end
+
+function mt:__call()
+ if self._onTimer then
+ self:_onTimer()
+ end
+end
+
+function mt:remove()
+ self._removed = true
+end
+
+function mt:pause()
+ if self._removed or self._pauseRemaining then
+ return
+ end
+ self._pauseRemaining = getRemaining(self)
+ self._running = false
+ local ti = self._timeoutFrame
+ local q = timer[ti]
+ if q then
+ for i = #q, 1, -1 do
+ if q[i] == self then
+ q[i] = false
+ return
+ end
+ end
+ end
+end
+
+function mt:resume()
+ if self._removed or not self._pauseRemaining then
+ return
+ end
+ local timeout = self._pauseRemaining
+ self._pauseRemaining = nil
+ mTimeout(self, timeout)
+end
+
+function mt:restart()
+ if self._removed or self._pauseRemaining or not self._running then
+ return
+ end
+ local ti = self._timeoutFrame
+ local q = timer[ti]
+ if q then
+ for i = #q, 1, -1 do
+ if q[i] == self then
+ q[i] = false
+ break
+ end
+ end
+ end
+ self._running = false
+ mTimeout(self, self._timeout)
+end
+
+function mt:remaining()
+ return getRemaining(self) / 1000.0
+end
+
+function mt:onTimer()
+ self:_onTimer()
+end
+
+function ac.wait(timeout, onTimer)
+ local t = setmetatable({
+ ['_timeout'] = mathMax(mathFloor(timeout * 1000.0), 1),
+ ['_onTimer'] = onTimer,
+ ['_timerCount'] = 1,
+ }, mt)
+ mTimeout(t, t._timeout)
+ return t
+end
+
+function ac.loop(timeout, onTimer)
+ local t = setmetatable({
+ ['_timeout'] = mathFloor(timeout * 1000.0),
+ ['_onTimer'] = onTimer,
+ }, mt)
+ mTimeout(t, t._timeout)
+ return t
+end
+
+function ac.timer(timeout, count, onTimer)
+ if count == 0 then
+ return ac.loop(timeout, onTimer)
+ end
+ local t = setmetatable({
+ ['_timeout'] = mathFloor(timeout * 1000.0),
+ ['_onTimer'] = onTimer,
+ ['_timerCount'] = count,
+ }, mt)
+ mTimeout(t, t._timeout)
+ return t
+end
+
+local function utimer_initialize(u)
+ if not u._timers then
+ u._timers = {}
+ end
+ if #u._timers > 0 then
+ return
+ end
+ u._timers[1] = ac.loop(0.01, function()
+ local timers = u._timers
+ for i = #timers, 2, -1 do
+ if timers[i]._removed then
+ local len = #timers
+ timers[i] = timers[len]
+ timers[len] = nil
+ end
+ end
+ if #timers == 1 then
+ timers[1]:remove()
+ timers[1] = nil
+ end
+ end)
+end
+
+function ac.uwait(u, timeout, onTimer)
+ utimer_initialize(u)
+ local t = ac.wait(timeout, onTimer)
+ tableInsert(u._timers, t)
+ return t
+end
+
+function ac.uloop(u, timeout, onTimer)
+ utimer_initialize(u)
+ local t = ac.loop(timeout, onTimer)
+ tableInsert(u._timers, t)
+ return t
+end
+
+function ac.utimer(u, timeout, count, onTimer)
+ utimer_initialize(u)
+ local t = ac.timer(timeout, count, onTimer)
+ tableInsert(u._timers, t)
+ return t
+end
+
+return update
diff --git a/script/src/uri.lua b/script/src/uri.lua
new file mode 100644
index 00000000..9053447c
--- /dev/null
+++ b/script/src/uri.lua
@@ -0,0 +1,29 @@
+local fs = require 'bee.filesystem'
+local platform = require 'bee.platform'
+local sandbox = require 'sandbox'
+local luaUriPath = (ROOT / 'src' / '3rd' / 'lua-uri'):string()
+local URI = sandbox('uri.lua', luaUriPath, io.open)
+local URI_FILE = sandbox('uri/file.lua', luaUriPath, io.open)
+local OS = platform.OS == 'Windows' and 'win32' or 'unix'
+
+local function decode(uri)
+ local obj = URI:new(uri)
+ if not obj.filesystem_path then
+ return nil
+ end
+ local fullPath = obj:filesystem_path(OS)
+ local path = fs.path(fullPath)
+ return path
+end
+
+local function encode(path)
+ local fullPath = fs.absolute(ROOT / path)
+ local obj = URI_FILE.make_file_uri(fullPath:string(), OS)
+ local uri = obj:uri()
+ return uri
+end
+
+return {
+ encode = encode,
+ decode = decode,
+}
diff --git a/script/src/utility.lua b/script/src/utility.lua
new file mode 100644
index 00000000..d7fc9dde
--- /dev/null
+++ b/script/src/utility.lua
@@ -0,0 +1,234 @@
+local fs = require 'bee.filesystem'
+
+local table_sort = table.sort
+local stringRep = string.rep
+local type = type
+local pairs = pairs
+local ipairs = ipairs
+local math_type = math.type
+local next = next
+local rawset = rawset
+local move = table.move
+local setmetatable = setmetatable
+local tableSort = table.sort
+local mathType = math.type
+
+local function formatNumber(n)
+ local str = ('%.10f'):format(n)
+ str = str:gsub('%.?0*$', '')
+ return str
+end
+
+local TAB = setmetatable({}, { __index = function (self, n)
+ self[n] = stringRep('\t', n)
+ return self[n]
+end})
+
+local RESERVED = {
+ ['and'] = true,
+ ['break'] = true,
+ ['do'] = true,
+ ['else'] = true,
+ ['elseif'] = true,
+ ['end'] = true,
+ ['false'] = true,
+ ['for'] = true,
+ ['function'] = true,
+ ['goto'] = true,
+ ['if'] = true,
+ ['in'] = true,
+ ['local'] = true,
+ ['nil'] = true,
+ ['not'] = true,
+ ['or'] = true,
+ ['repeat'] = true,
+ ['return'] = true,
+ ['then'] = true,
+ ['true'] = true,
+ ['until'] = true,
+ ['while'] = true,
+}
+
+function table.dump(tbl)
+ if type(tbl) ~= 'table' then
+ return ('%q'):format(tbl)
+ end
+ local lines = {}
+ local mark = {}
+ lines[#lines+1] = '{'
+ local function unpack(tbl, tab)
+ if mark[tbl] and mark[tbl] > 0 then
+ lines[#lines+1] = TAB[tab+1] .. '"<Loop>"'
+ return
+ end
+ if #lines > 10000 then
+ lines[#lines+1] = TAB[tab+1] .. '"<Large>"'
+ return
+ end
+ mark[tbl] = (mark[tbl] or 0) + 1
+ local keys = {}
+ local keymap = {}
+ local integerFormat = '[%d]'
+ if #tbl >= 10 then
+ local width = math.log(#tbl, 10)
+ integerFormat = ('[%%0%dd]'):format(math.ceil(width))
+ end
+ for key in pairs(tbl) do
+ if type(key) == 'string' then
+ if not key:match('^[%a_][%w_]*$')
+ or #key >= 32
+ or RESERVED[key]
+ then
+ keymap[key] = ('[%q]'):format(key)
+ else
+ keymap[key] = key
+ end
+ elseif mathType(key) == 'integer' then
+ keymap[key] = integerFormat:format(key)
+ else
+ keymap[key] = ('["<%s>"]'):format(key)
+ end
+ keys[#keys+1] = key
+ end
+ local mt = getmetatable(tbl)
+ if not mt or not mt.__pairs then
+ tableSort(keys, function (a, b)
+ return keymap[a] < keymap[b]
+ end)
+ end
+ for _, key in ipairs(keys) do
+ local value = tbl[key]
+ local tp = type(value)
+ if tp == 'table' then
+ lines[#lines+1] = ('%s%s = {'):format(TAB[tab+1], keymap[key])
+ unpack(value, tab+1)
+ lines[#lines+1] = ('%s},'):format(TAB[tab+1])
+ elseif tp == 'string' or tp == 'boolean' then
+ lines[#lines+1] = ('%s%s = %q,'):format(TAB[tab+1], keymap[key], value)
+ elseif tp == 'number' then
+ lines[#lines+1] = ('%s%s = %s,'):format(TAB[tab+1], keymap[key], formatNumber(value))
+ elseif tp == 'nil' then
+ else
+ lines[#lines+1] = ('%s%s = %s,'):format(TAB[tab+1], keymap[key], tostring(value))
+ end
+ end
+ mark[tbl] = mark[tbl] - 1
+ end
+ unpack(tbl, 0)
+ lines[#lines+1] = '}'
+ return table.concat(lines, '\r\n')
+end
+
+local function sort_table(tbl)
+ if not tbl then
+ tbl = {}
+ end
+ local mt = {}
+ local keys = {}
+ local mark = {}
+ local n = 0
+ for key in next, tbl do
+ n=n+1;keys[n] = key
+ mark[key] = true
+ end
+ table_sort(keys)
+ function mt:__newindex(key, value)
+ rawset(self, key, value)
+ n=n+1;keys[n] = key
+ mark[key] = true
+ if type(value) == 'table' then
+ sort_table(value)
+ end
+ end
+ function mt:__pairs()
+ local list = {}
+ local m = 0
+ for key in next, self do
+ if not mark[key] then
+ m=m+1;list[m] = key
+ end
+ end
+ if m > 0 then
+ move(keys, 1, n, m+1)
+ table_sort(list)
+ for i = 1, m do
+ local key = list[i]
+ keys[i] = key
+ mark[key] = true
+ end
+ n = n + m
+ end
+ local i = 0
+ return function ()
+ i = i + 1
+ local key = keys[i]
+ return key, self[key]
+ end
+ end
+
+ return setmetatable(tbl, mt)
+end
+
+function table.container(tbl)
+ return sort_table(tbl)
+end
+
+function table.equal(a, b)
+ local tp1, tp2 = type(a), type(b)
+ if tp1 ~= tp2 then
+ return false
+ end
+ if tp1 == 'table' then
+ local mark = {}
+ for k in pairs(a) do
+ if not table.equal(a[k], b[k]) then
+ return false
+ end
+ mark[k] = true
+ end
+ for k in pairs(b) do
+ if not mark[k] then
+ return false
+ end
+ end
+ return true
+ end
+ return a == b
+end
+
+function table.deepCopy(a)
+ local t = {}
+ for k, v in pairs(a) do
+ if type(v) == 'table' then
+ t[k] = table.deepCopy(v)
+ else
+ t[k] = v
+ end
+ end
+ return t
+end
+
+function io.load(file_path)
+ local f, e = io.open(file_path:string(), 'rb')
+ if not f then
+ return nil, e
+ end
+ if f:read(3) ~= '\xEF\xBB\xBF' then
+ f:seek("set")
+ end
+ local buf = f:read 'a'
+ f:close()
+ return buf
+end
+
+function io.save(file_path, content)
+ local f, e = io.open(file_path:string(), "wb")
+
+ if f then
+ f:write(content)
+ f:close()
+ return true
+ else
+ return false, e
+ end
+end
diff --git a/script/src/vm/chain.lua b/script/src/vm/chain.lua
new file mode 100644
index 00000000..6e7c6ac7
--- /dev/null
+++ b/script/src/vm/chain.lua
@@ -0,0 +1,65 @@
+local valueMgr = require 'vm.value'
+local sourceMgr = require 'vm.source'
+
+local mt = {}
+mt.__index = mt
+mt.type = 'chain'
+
+mt.min = 100
+mt.max = 100
+mt.count = 0
+
+function mt:clearCache()
+ if self.count <= self.max then
+ return
+ end
+ local clock = os.clock()
+ local n = 0
+ for uri, value in pairs(self.cache) do
+ local ok = value:eachInfo(function ()
+ return true
+ end)
+ if ok then
+ n = n + 1
+ else
+ value:getSource():kill()
+ self.cache[uri] = nil
+ end
+ end
+ self.count = n
+ self.max = self.count * 1.1 + 10
+ if self.max < self.min then
+ self.max = self.min
+ end
+ local passed = os.clock() - clock
+ if passed > 0.1 then
+ log.warn(('chain:clearCache takes: [%.3f]sec, self.count: %d'):format(passed, self.count))
+ end
+end
+
+function mt:get(uri)
+ if not self.cache[uri] then
+ self.count = self.count + 1
+ self:clearCache()
+ self.cache[uri] = valueMgr.create('any', sourceMgr.dummy())
+ self.cache[uri]:markGlobal()
+ self.cache[uri].uri = uri
+ end
+ return self.cache[uri]
+end
+
+function mt:remove()
+ if self.removed then
+ return
+ end
+ self.removed = true
+ for _, value in pairs(self.cache) do
+ value:getSource():kill()
+ end
+end
+
+return function ()
+ return setmetatable({
+ cache = {},
+ }, mt)
+end
diff --git a/script/src/vm/emmy.lua b/script/src/vm/emmy.lua
new file mode 100644
index 00000000..9342a851
--- /dev/null
+++ b/script/src/vm/emmy.lua
@@ -0,0 +1,372 @@
+local functionMgr = require 'vm.function'
+local library = require 'vm.library'
+local mt = require 'vm.manager'
+
+function mt:clearEmmy()
+ self._emmy = nil
+ self._emmyParams = nil
+ self._emmyReturns = nil
+ self._emmyGeneric = nil
+ self._emmyComment = nil
+ self._emmyOverLoads = nil
+end
+
+function mt:doEmmy(action)
+ local tp = action.type
+ if tp == 'emmyClass' then
+ self:doEmmyClass(action)
+ elseif tp == 'emmyType' then
+ self:doEmmyType(action)
+ elseif tp == 'emmyAlias' then
+ self:doEmmyAlias(action)
+ elseif tp == 'emmyParam' then
+ self:doEmmyParam(action)
+ elseif tp == 'emmyReturn' then
+ self:doEmmyReturn(action)
+ elseif tp == 'emmyField' then
+ self:doEmmyField(action)
+ elseif tp == 'emmyGeneric' then
+ self:doEmmyGeneric(action)
+ elseif tp == 'emmyVararg' then
+ self:doEmmyVararg(action)
+ elseif tp == 'emmyLanguage' then
+ elseif tp == 'emmyArrayType' then
+ self:doEmmyArrayType(action)
+ elseif tp == 'emmyTableType' then
+ self:doEmmyTableType(action)
+ elseif tp == 'emmyFunctionType' then
+ self:doEmmyFunctionType(action)
+ elseif tp == 'emmySee' then
+ self:doEmmySee(action)
+ elseif tp == 'emmyOverLoad' then
+ self:doEmmyOverLoad(action)
+ elseif tp == 'emmyIncomplete' then
+ self:doEmmyIncomplete(action)
+ elseif tp == 'emmyComment' then
+ self:doEmmyComment(action)
+ end
+end
+
+function mt:getEmmy()
+ local emmy = self._emmy
+ self._emmy = nil
+ return emmy
+end
+
+function mt:addEmmyParam(param)
+ if not self._emmyParams then
+ self._emmyParams = {}
+ end
+ self._emmyParams[#self._emmyParams+1] = param
+end
+
+function mt:addEmmyReturn(rtn)
+ if not self._emmyReturns then
+ self._emmyReturns = {}
+ end
+ self._emmyReturns[#self._emmyReturns+1] = rtn
+end
+
+function mt:addEmmyOverLoad(funcObj)
+ if not self._emmyOverLoads then
+ self._emmyOverLoads = {}
+ end
+ self._emmyOverLoads[#self._emmyOverLoads+1] = funcObj
+end
+
+function mt:getEmmyParams()
+ local params = self._emmyParams
+ self._emmyParams = nil
+ return params
+end
+
+function mt:getEmmyReturns()
+ local returns = self._emmyReturns
+ self._emmyReturns = nil
+ return returns
+end
+
+function mt:getEmmyOverLoads()
+ local overLoads = self._emmyOverLoads
+ self._emmyOverLoads = nil
+ return overLoads
+end
+
+function mt:getEmmyGeneric()
+ local generic = self._emmyGeneric
+ self._emmyGeneric = nil
+ return generic
+end
+
+---@return string
+function mt:getEmmyComment()
+ local comment = self._emmyComment
+ self._emmyComment = nil
+ return comment
+end
+
+function mt:doEmmyClass(action)
+ ---@type emmyMgr
+ local emmyMgr = self.emmyMgr
+ self:instantSource(action)
+ self:instantSource(action[1])
+ local class = emmyMgr:addClass(action)
+ action:set('emmy class', class:getName())
+ action[1]:set('emmy class', class:getName())
+ local extends = action[2]
+ if extends then
+ self:instantSource(extends)
+ extends:set('emmy class', extends[1])
+ end
+ self._emmy = class
+ action:set('emmy.class', class)
+ if self.lsp then
+ self.lsp.global:markSet(self:getUri())
+ end
+end
+
+function mt:buildEmmyType(action)
+ ---@type emmyMgr
+ local emmyMgr = self.emmyMgr
+ self:instantSource(action)
+ for _, obj in ipairs(action) do
+ self:instantSource(obj)
+ obj:set('emmy class', obj[1])
+ end
+ local type = emmyMgr:addType(action)
+ return type
+end
+
+function mt:doEmmyType(action)
+ local type = self:buildEmmyType(action)
+ self._emmy = type
+ if self.lsp then
+ self.lsp.global:markGet(self:getUri())
+ end
+ return type
+end
+
+function mt:doEmmyAlias(action)
+ ---@type emmyMgr
+ local emmyMgr = self.emmyMgr
+ self:instantSource(action)
+ self:instantSource(action[1])
+ local type = self:buildEmmyAnyType(action[2])
+ local alias = emmyMgr:addAlias(action, type)
+ action:set('emmy.alias', alias)
+ action[1]:set('emmy class', alias:getName())
+ self._emmy = type
+ if self.lsp then
+ self.lsp.global:markSet(self:getUri())
+ end
+end
+
+function mt:getGenericByType(type)
+ local generics = self._emmyGeneric
+ if not generics then
+ return
+ end
+ if #type > 1 then
+ return
+ end
+ local name = type[1][1]
+ for _, generic in ipairs(generics) do
+ if generic:getName() == name then
+ return generic
+ end
+ end
+ return nil
+end
+
+function mt:doEmmyParam(action)
+ ---@type emmyMgr
+ local emmyMgr = self.emmyMgr
+ self:instantSource(action)
+ self:instantSource(action[1])
+ local type = self:getGenericByType(action[2]) or self:buildEmmyAnyType(action[2])
+ local param = emmyMgr:addParam(action, type)
+ action:set('emmy.param', param)
+ self:addEmmyParam(param)
+ if self.lsp then
+ self.lsp.global:markGet(self:getUri())
+ end
+end
+
+function mt:doEmmyReturn(action)
+ ---@type emmyMgr
+ local emmyMgr = self.emmyMgr
+ self:instantSource(action)
+ local type = action[1] and (self:getGenericByType(action[1]) or self:buildEmmyAnyType(action[1]))
+ local name = action[2]
+ local rtn = emmyMgr:addReturn(action, type, name)
+ action:set('emmy.return', rtn)
+ self:addEmmyReturn(rtn)
+ if self.lsp then
+ self.lsp.global:markGet(self:getUri())
+ end
+end
+
+function mt:doEmmyField(action)
+ ---@type emmyMgr
+ local emmyMgr = self.emmyMgr
+ self:instantSource(action)
+ self:instantSource(action[2])
+ local type = self:buildEmmyAnyType(action[3])
+ local value = self:createValue('nil', action[2])
+ local field = emmyMgr:addField(action, type, value)
+ value:setEmmy(type)
+ action:set('emmy.field', field)
+
+ local class = self._emmy
+ if not self._emmy or self._emmy.type ~= 'emmy.class' then
+ return
+ end
+ class:addField(field)
+ action:set('target class', class)
+end
+
+function mt:doEmmyGeneric(action)
+ ---@type emmyMgr
+ local emmyMgr = self.emmyMgr
+ self:instantSource(action)
+
+ local defs = {}
+ for i, obj in ipairs(action) do
+ defs[i] = {}
+ defs[i].name = self:instantSource(obj[1])
+ if obj[2] then
+ defs[i].type = self:buildEmmyAnyType(obj[2])
+ end
+ end
+
+ local generic = emmyMgr:addGeneric(defs)
+ self._emmyGeneric = generic
+end
+
+function mt:doEmmyVararg(action)
+ ---@type emmyMgr
+ local emmyMgr = self.emmyMgr
+ self:instantSource(action)
+ local type = self:getGenericByType(action[1]) or self:buildEmmyAnyType(action[1])
+ local param = emmyMgr:addParam(action, type)
+ action:set('emmy.param', param)
+ self:addEmmyParam(param)
+ if self.lsp then
+ self.lsp.global:markGet(self:getUri())
+ end
+end
+
+function mt:buildEmmyArrayType(action)
+ ---@type emmyMgr
+ local emmyMgr = self.emmyMgr
+ self:instantSource(action)
+ for _, obj in ipairs(action) do
+ self:instantSource(obj)
+ action:set('emmy class', obj[1])
+ end
+ local type = emmyMgr:addArrayType(action)
+ return type
+end
+
+function mt:doEmmyArrayType(action)
+ local type = self:buildEmmyArrayType(action)
+ self._emmy = type
+ if self.lsp then
+ self.lsp.global:markGet(self:getUri())
+ end
+ return type
+end
+
+function mt:buildEmmyTableType(action)
+ ---@type emmyMgr
+ local emmyMgr = self.emmyMgr
+ self:instantSource(action)
+ local keyType = self:buildEmmyAnyType(action[1])
+ local valueType = self:buildEmmyAnyType(action[2])
+ local type = emmyMgr:addTableType(action, keyType, valueType)
+ return type
+end
+
+function mt:doEmmyTableType(action)
+ local type = self:buildEmmyTableType(action)
+ self._emmy = type
+ if self.lsp then
+ self.lsp.global:markGet(self:getUri())
+ end
+ return type
+end
+
+function mt:buildEmmyFunctionType(source)
+ ---@type emmyMgr
+ local emmyMgr = self.emmyMgr
+ self:instantSource(source)
+ local funcObj = emmyMgr:addFunctionType(source)
+ ---@type emmyFunction
+ local func = functionMgr.create(source)
+ local args = source.args
+ if args then
+ for i = 1, #args // 2 do
+ local nameSource = args[i*2-1]
+ local typeSource = args[i*2]
+ local paramType = self:buildEmmyAnyType(typeSource)
+ funcObj:addParam(nameSource[1], paramType)
+ local value = self:createValue(paramType:getType(), typeSource)
+ value:setEmmy(paramType)
+ self:instantSource(nameSource)
+ local arg = func:addArg(nameSource[1], nameSource, value)
+ arg:set('emmy arg', true)
+ end
+ end
+ local returns = source.returns
+ if returns then
+ for i = 1, #returns do
+ local returnSource = returns[i]
+ local returnType = self:buildEmmyAnyType(returnSource)
+ funcObj:addReturn(returnType)
+ local value = self:createValue(returnType:getType(), returnSource)
+ value:setEmmy(returnType)
+ func:setReturn(i, value)
+ end
+ end
+ funcObj:bindFunction(func)
+ return funcObj
+end
+
+function mt:doEmmyFunctionType(action)
+ local funcObj = self:buildEmmyFunctionType(action)
+ self._emmy = funcObj
+ return funcObj
+end
+
+function mt:buildEmmyAnyType(source)
+ if source.type == 'emmyType' then
+ return self:buildEmmyType(source)
+ elseif source.type == 'emmyArrayType' then
+ return self:buildEmmyArrayType(source)
+ elseif source.type == 'emmyTableType' then
+ return self:buildEmmyTableType(source)
+ elseif source.type == 'emmyFunctionType' then
+ return self:buildEmmyFunctionType(source)
+ else
+ error('Unknown emmy type: ' .. table.dump(source))
+ end
+end
+
+function mt:doEmmyIncomplete(action)
+ self:instantSource(action)
+end
+
+function mt:doEmmyComment(action)
+ self._emmyComment = action[1]
+end
+
+function mt:doEmmySee(action)
+ self:instantSource(action)
+ self:instantSource(action[2])
+ action[2]:set('emmy see', action)
+end
+
+function mt:doEmmyOverLoad(action)
+ local funcObj = self:buildEmmyFunctionType(action)
+ self:addEmmyOverLoad(funcObj)
+end
diff --git a/script/src/vm/function.lua b/script/src/vm/function.lua
new file mode 100644
index 00000000..1ba01363
--- /dev/null
+++ b/script/src/vm/function.lua
@@ -0,0 +1,551 @@
+local createMulti = require 'vm.multi'
+local valueMgr = require 'vm.value'
+local localMgr = require 'vm.local'
+local sourceMgr = require 'vm.source'
+local listMgr = require 'vm.list'
+
+local Watch = setmetatable({}, {__mode = 'kv'})
+
+---@class emmyFunction
+local mt = {}
+mt.__index = mt
+mt.type = 'function'
+mt._runed = 0
+mt._top = 0
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:getUri()
+ local source = self:getSource()
+ return source and source.uri or ''
+end
+
+function mt:push(source, ischunk)
+ if self._removed then
+ return
+ end
+ self._top = self._top + 1
+ self.locals[self._top] = {}
+ self.finishs[self._top] = source and source.finish or math.maxinteger
+end
+
+function mt:markChunk()
+ self.chunk[self._top] = true
+end
+
+function mt:pop()
+ if self._removed then
+ return
+ end
+ local closed = self.finishs[self._top]
+ local closedLocals = self.locals[self._top]
+ self.locals[self._top] = nil
+ self.chunk[self._top] = nil
+ for _, loc in pairs(closedLocals) do
+ loc:close(closed)
+ end
+ self._top = self._top - 1
+end
+
+function mt:saveLocal(name, loc)
+ if self._removed then
+ return
+ end
+ if loc.type ~= 'local' then
+ error('saveLocal必须是local')
+ end
+ if not loc:getSource() then
+ return
+ end
+ local old = self:loadLocal(name)
+ if old then
+ loc:shadow(old)
+ end
+ self.locals[self._top][name] = loc
+end
+
+function mt:saveUpvalue(name, loc)
+ if self._removed then
+ return
+ end
+ if loc.type ~= 'local' then
+ error('saveLocal必须是local')
+ end
+ self.upvalues[name] = loc
+end
+
+function mt:loadLocal(name)
+ for i = self._top, 1, -1 do
+ local locals = self.locals[i]
+ local loc = locals[name]
+ if loc then
+ return loc
+ end
+ if self.chunk[i] then
+ break
+ end
+ end
+ local uv = self.upvalues[name]
+ if uv then
+ return uv
+ end
+ return nil
+end
+
+function mt:eachLocal(callback)
+ local mark = {}
+ for i = self._top, 1, -1 do
+ local locals = self.locals[i]
+ for name, loc in pairs(locals) do
+ if not mark[name] then
+ mark[name] = true
+ local res = callback(name, loc)
+ if res ~= nil then
+ return res
+ end
+ end
+ end
+ if self.chunk[i] then
+ break
+ end
+ end
+ for name, loc in pairs(self.upvalues) do
+ if not mark[name] then
+ mark[name] = true
+ local res = callback(name, loc)
+ if res ~= nil then
+ return res
+ end
+ end
+ end
+ return nil
+end
+
+function mt:saveLabel(label)
+ if self._removed then
+ return
+ end
+ if not self._label then
+ self._label = {}
+ end
+ self._label[#self._label+1] = label
+end
+
+function mt:loadLabel(name)
+ if not self._label then
+ return nil
+ end
+ for _, label in ipairs(self._label) do
+ if label:getName() == name then
+ return label
+ end
+ end
+ return nil
+end
+
+function mt:rawSetReturn(index, value)
+ if self._removed then
+ return
+ end
+ self:set('hasReturn', true)
+ if not self.returns then
+ self.returns = createMulti()
+ end
+ if value then
+ self.returns:set(index, value)
+ if self._global then
+ value:markGlobal()
+ end
+ end
+end
+
+function mt:setReturn(index, value)
+ local emmy = self._emmyReturns and self._emmyReturns[index]
+ if emmy then
+ if emmy:bindType() or emmy:bindGeneric() then
+ return
+ end
+ end
+ return self:rawSetReturn(index, value)
+end
+
+function mt:mergeReturn(index, value)
+ if self._removed then
+ return
+ end
+ local emmy = self._emmyReturns and self._emmyReturns[index]
+ if emmy then
+ if emmy:bindType() or emmy:bindGeneric() then
+ return
+ end
+ end
+ self:set('hasReturn', true)
+ if not self.returns then
+ self.returns = createMulti()
+ end
+ if value then
+ if self.returns[index] then
+ self.returns[index]:mergeValue(value)
+ self.returns[index] = value
+ else
+ self.returns:set(index, value)
+ end
+ end
+ if self._global then
+ value:markGlobal()
+ end
+end
+
+function mt:getReturn(index)
+ if self._removed then
+ return nil
+ end
+ if self.maxReturns and index and self.maxReturns < index then
+ return nil
+ end
+ if not self.returns then
+ self.returns = createMulti()
+ end
+ if index then
+ return self.returns:get(index)
+ else
+ return self.returns
+ end
+end
+
+function mt:returnDots(index)
+ if not self.returns then
+ self.returns = createMulti()
+ end
+ --self.returns[index] = createMulti()
+end
+
+function mt:loadDots()
+ if not self._dots then
+ self._dots = createMulti()
+ end
+ self._dotsLoad = true
+ return self._dots
+end
+
+function mt:setObject(value, source)
+ self._objectValue = value
+ self._objectSource = source
+end
+
+function mt:getObject()
+ return self._objectSource, self._objectValue
+end
+
+function mt:hasRuned()
+ return self._runed > 0
+end
+
+function mt:needSkip()
+ return self._runed > 3
+end
+
+---@param vm VM
+function mt:run(vm)
+ if self._removed then
+ return
+ end
+ if not self:getSource() then
+ return
+ end
+
+ self._runed = self._runed + 1
+
+ -- 第一次运行函数时,创建函数的参数
+ if self._runed == 1 then
+ -- 如果是面向对象形式的函数,创建隐藏的参数self
+ if self._objectSource then
+ local loc = localMgr.create('self', vm:instantSource(self._objectSource), self._objectValue)
+ loc:set('hide', true)
+ loc:set('start', self:getSource().start)
+ loc:close(self:getSource().finish)
+ self:saveUpvalue('self', loc)
+ self.args[#self.args+1] = loc
+ end
+
+ -- 显性声明的参数
+ self:createArgs(vm)
+ end
+
+ if self:needSkip() then
+ return
+ end
+
+ -- 向局部变量中填充参数
+ for i, loc in ipairs(self.args) do
+ loc:setValue(self.argValues[i])
+ local emmyParam = self:findEmmyParamByName(loc:getName())
+ if emmyParam then
+ local typeObj = emmyParam:bindType()
+ if typeObj then
+ loc:getValue():setEmmy(typeObj)
+ end
+ local genericObj = emmyParam:bindGeneric()
+ if genericObj then
+ genericObj:setValue(loc:getValue())
+ end
+ end
+ end
+ if self._dots then
+ local emmyParam = self:findEmmyParamByName('...')
+ self._dots = createMulti()
+ for i = #self.args + 1, #self.argValues do
+ local value = self.argValues[i]
+ self._dots:push(value)
+ if emmyParam then
+ local typeObj = emmyParam:bindType()
+ if typeObj then
+ value:setEmmy(typeObj)
+ end
+ local genericObj = emmyParam:bindGeneric()
+ if genericObj then
+ genericObj:setValue(value)
+ end
+ end
+ end
+ if emmyParam then
+ local typeObj = emmyParam:bindType()
+ if typeObj then
+ self._dots:setEmmy(typeObj)
+ end
+ local genericObj = emmyParam:bindGeneric()
+ if genericObj then
+ local value = self._dots:first()
+ if value then
+ genericObj:setValue(value)
+ end
+ end
+ end
+ end
+
+ -- 填充返回值
+ if self._emmyReturns then
+ for i, rtn in ipairs(self._emmyReturns) do
+ local value = vm:createValue('nil', rtn:getSource())
+ local typeObj = rtn:bindType()
+ if typeObj then
+ value:setEmmy(typeObj)
+ end
+ local genericObj = rtn:bindGeneric()
+ if genericObj then
+ local destValue = genericObj:getValue()
+ if destValue then
+ value:mergeType(destValue)
+ end
+ end
+ self:rawSetReturn(i, value)
+ end
+ end
+end
+
+function mt:eachEmmyReturn(callback)
+ if not self._emmyReturns then
+ return
+ end
+ for _, rtn in ipairs(self._emmyReturns) do
+ callback(rtn)
+ end
+end
+
+function mt:setArgs(values)
+ for i = 1, #self.argValues do
+ self.argValues[i] = nil
+ end
+ for i = 1, #values do
+ self.argValues[i] = values[i]
+ end
+end
+
+function mt:findEmmyParamByName(name)
+ local params = self._emmyParams
+ if not params then
+ return nil
+ end
+ for i = #params, 1, -1 do
+ local param = params[i]
+ if param:getName() == name then
+ return param
+ end
+ end
+ return nil
+end
+
+function mt:findEmmyParamByIndex(index)
+ local arg = self.args[index]
+ if not arg then
+ return nil
+ end
+ local name = arg:getName()
+ return self:findEmmyParamByName(name)
+end
+
+function mt:addArg(name, source, value, close)
+ local loc = localMgr.create(name, source, value)
+ loc:close(close)
+ self:saveUpvalue(name, loc)
+ self.args[#self.args+1] = loc
+ return loc
+end
+
+function mt:createArg(vm, arg, close)
+ vm:instantSource(arg)
+ arg:set('arg', self)
+ if arg.type == 'name' then
+ vm:instantSource(arg)
+ local value = valueMgr.create('nil', arg)
+ self:addArg(arg[1], arg, value, close)
+ elseif arg.type == '...' then
+ self._dots = createMulti()
+ self._dotsSource = arg
+ end
+end
+
+function mt:createLibArg(arg, source)
+ if arg.type == '...' then
+ self._dots = createMulti()
+ else
+ local name = arg.name or '_'
+ local loc = localMgr.create(name, source, valueMgr.create('any', source))
+ self:saveUpvalue(name, loc)
+ self.args[#self.args+1] = loc
+ end
+end
+
+function mt:hasDots()
+ return self._dots ~= nil
+end
+
+function mt:createArgs(vm)
+ if not self:getSource() then
+ return
+ end
+ local args = self:getSource().arg
+ if not args then
+ return
+ end
+ local close = self:getSource().finish
+ if args.type == 'list' then
+ for _, arg in ipairs(args) do
+ self:createArg(vm, arg, close)
+ end
+ else
+ self:createArg(vm, args, close)
+ end
+end
+
+function mt:set(name, v)
+ if not self._flag then
+ self._flag = {}
+ end
+ self._flag[name] = v
+end
+
+function mt:get(name)
+ if not self._flag then
+ return nil
+ end
+ return self._flag[name]
+end
+
+function mt:getSource()
+ if self._removed then
+ return nil
+ end
+ return listMgr.get(self.source)
+end
+
+function mt:kill()
+ if self._removed then
+ return
+ end
+ self._removed = true
+ listMgr.clear(self.id)
+end
+
+function mt:markGlobal()
+ if self._global then
+ return
+ end
+ self._global = true
+ if self.returns then
+ self.returns:eachValue(function (_, v)
+ v:markGlobal()
+ end)
+ end
+end
+
+function mt:setEmmy(params, returns, overLoads)
+ if params then
+ self._emmyParams = params
+ for _, param in ipairs(params) do
+ param:getSource():set('emmy function', self)
+ param:getSource()[1]:set('emmy function', self)
+ end
+ end
+ if returns then
+ self._emmyReturns = returns
+ for _, rtn in ipairs(returns) do
+ rtn:getSource():set('emmy function', self)
+ end
+ end
+ if overLoads then
+ self._emmyOverLoads = overLoads
+ for _, ol in ipairs(overLoads) do
+ ol:getSource():set('emmy function', self)
+ end
+ end
+end
+
+---@param comment string
+function mt:setComment(comment)
+ self._comment = comment
+end
+
+---@return string
+function mt:getComment()
+ return self._comment
+end
+
+function mt:getEmmyParams()
+ return self._emmyParams
+end
+
+function mt:getEmmyOverLoads()
+ return self._emmyOverLoads
+end
+
+local function create(source)
+ if not source then
+ error('Function need source')
+ end
+ local id = source.id
+ if not id then
+ error('Not instanted source')
+ end
+ local self = setmetatable({
+ source = id,
+ locals = {},
+ upvalues = {},
+ chunk = {},
+ finishs = {},
+ args = {},
+ argValues = {},
+ }, mt)
+
+ local id = listMgr.add(self)
+ self.id = id
+ Watch[self] = id
+ return self
+end
+
+return {
+ create = create,
+ watch = Watch,
+}
diff --git a/script/src/vm/global.lua b/script/src/vm/global.lua
new file mode 100644
index 00000000..af30ffdd
--- /dev/null
+++ b/script/src/vm/global.lua
@@ -0,0 +1,25 @@
+local library = require 'core.library'
+local libraryBuilder = require 'vm.library'
+local sourceMgr = require 'vm.source'
+
+return function (lsp)
+ local global = lsp and lsp.globalValue
+ if not global then
+ libraryBuilder.clear()
+ local t = {}
+ for name, lib in pairs(library.global) do
+ t[name] = libraryBuilder.value(lib)
+ end
+
+ global = t._G
+ global:markGlobal()
+ global:set('ENV', true)
+ for k, v in pairs(t) do
+ global:setChild(k, v, sourceMgr.dummy())
+ end
+ end
+ if lsp then
+ lsp.globalValue = global
+ end
+ return global
+end
diff --git a/script/src/vm/init.lua b/script/src/vm/init.lua
new file mode 100644
index 00000000..87576ba5
--- /dev/null
+++ b/script/src/vm/init.lua
@@ -0,0 +1 @@
+return require 'vm.vm'
diff --git a/script/src/vm/ipairs.lua b/script/src/vm/ipairs.lua
new file mode 100644
index 00000000..cb8356da
--- /dev/null
+++ b/script/src/vm/ipairs.lua
@@ -0,0 +1,51 @@
+local mt = require 'vm.manager'
+local library = require 'vm.library'
+
+---@param func emmyFunction
+function mt:callIpairs(func, values, source)
+ local tbl = values[1]
+ func:setReturn(1, library.special['@ipairs'])
+ func:setReturn(2, tbl)
+end
+
+---@param func emmyFunction
+function mt:callAtIpairs(func, values, source)
+ local tbl = values[1]
+ if tbl then
+ local emmy = tbl:getEmmy()
+ if emmy then
+ if emmy.type == 'emmy.arrayType' then
+ local value = self:createValue(emmy:getName(), source)
+ func:setReturn(2, value)
+ end
+ end
+ end
+end
+
+---@param func emmyFunction
+function mt:callPairs(func, values, source)
+ local tbl = values[1]
+ func:setReturn(1, library.special['next'])
+ func:setReturn(2, tbl)
+end
+
+---@param func emmyFunction
+function mt:callNext(func, values, source)
+ local tbl = values[1]
+ if tbl then
+ local emmy = tbl:getEmmy()
+ if emmy then
+ if emmy.type == 'emmy.arrayType' then
+ local key = self:createValue('integer', source)
+ local value = self:createValue(emmy:getName(), source)
+ func:setReturn(1, key)
+ func:setReturn(2, value)
+ elseif emmy.type == 'emmy.tableType' then
+ local key = self:createValue(emmy:getKeyType():getType(), source)
+ local value = self:createValue(emmy:getValueType():getType(), source)
+ func:setReturn(1, key)
+ func:setReturn(2, value)
+ end
+ end
+ end
+end
diff --git a/script/src/vm/label.lua b/script/src/vm/label.lua
new file mode 100644
index 00000000..c0e0dfb8
--- /dev/null
+++ b/script/src/vm/label.lua
@@ -0,0 +1,75 @@
+local listMgr = require 'vm.list'
+
+local Sort = 0
+
+local mt = {}
+mt.__index = mt
+mt.type = 'label'
+
+function mt:getName()
+ return self.name
+end
+
+function mt:addInfo(tp, source)
+ if not source then
+ error('No source')
+ end
+ local id = source.id
+ if not id then
+ error('Not instanted source')
+ end
+ if self._info[id] then
+ return
+ end
+ Sort = Sort + 1
+ local info = {
+ type = tp,
+ source = id,
+ _sort = Sort,
+ }
+
+ self._info[id] = info
+end
+
+function mt:eachInfo(callback)
+ local list = {}
+ for srcId, info in pairs(self._info) do
+ local src = listMgr.get(srcId)
+ if src then
+ list[#list+1] = info
+ else
+ self._info[srcId] = nil
+ end
+ end
+ table.sort(list, function (a, b)
+ return a._sort < b._sort
+ end)
+ for i = 1, #list do
+ local info = list[i]
+ local res = callback(info, listMgr.get(info.source))
+ if res ~= nil then
+ return res
+ end
+ end
+ return nil
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+return function (name, source)
+ if not source then
+ error('No source')
+ end
+ local id = source.id
+ if not id then
+ error('Not instanted source')
+ end
+ local self = setmetatable({
+ name = name,
+ source = id,
+ _info = {},
+ }, mt)
+ return self
+end
diff --git a/script/src/vm/library.lua b/script/src/vm/library.lua
new file mode 100644
index 00000000..018d69f3
--- /dev/null
+++ b/script/src/vm/library.lua
@@ -0,0 +1,112 @@
+local sourceMgr = require 'vm.source'
+
+local valueMgr
+local functionMgr
+
+local CHILD_CACHE = {}
+local VALUE_CACHE = {}
+local Special = {}
+
+local buildLibValue
+local buildLibChild
+
+function buildLibValue(lib)
+ if VALUE_CACHE[lib] then
+ return VALUE_CACHE[lib]
+ end
+ if not valueMgr then
+ valueMgr = require 'vm.value'
+ functionMgr = require 'vm.function'
+ end
+ local tp = lib.type
+ local value
+ if tp == 'table' then
+ value = valueMgr.create('table', sourceMgr.dummy())
+ elseif tp == 'function' then
+ local dummySource = sourceMgr.dummy()
+ value = valueMgr.create('function', dummySource)
+ local func = functionMgr.create(dummySource)
+ value:setFunction(func)
+ if lib.args then
+ for _, arg in ipairs(lib.args) do
+ func:createLibArg(arg, sourceMgr.dummy())
+ end
+ end
+ if lib.returns then
+ for i, rtn in ipairs(lib.returns) do
+ if rtn.type == '...' then
+ func:returnDots(i)
+ else
+ func:setReturn(i, buildLibValue(rtn))
+ end
+ end
+ if lib.special == 'pairs' then
+ func:setReturn(1, Special['next'])
+ end
+ if lib.special == 'ipairs' then
+ func:setReturn(1, Special['@ipairs'])
+ end
+ end
+ elseif tp == 'string' then
+ value = valueMgr.create('string', sourceMgr.dummy())
+ elseif tp == 'boolean' then
+ value = valueMgr.create('boolean', sourceMgr.dummy())
+ elseif tp == 'number' then
+ value = valueMgr.create('number', sourceMgr.dummy())
+ elseif tp == 'integer' then
+ value = valueMgr.create('integer', sourceMgr.dummy())
+ elseif tp == 'nil' then
+ value = valueMgr.create('nil', sourceMgr.dummy())
+ else
+ value = valueMgr.create(tp or 'any', sourceMgr.dummy())
+ end
+ value:setLib(lib)
+ VALUE_CACHE[lib] = value
+
+ if lib.child then
+ for fName, fLib in pairs(lib.child) do
+ local fValue = buildLibValue(fLib)
+ value:rawSet(fName, fValue)
+ value:addInfo('set child', sourceMgr.dummy(), fName, fValue)
+ end
+ end
+
+ if lib.special == 'next' then
+ Special['next'] = value
+ end
+ if lib.special == '@ipairs' then
+ Special['@ipairs'] = value
+ return nil
+ end
+
+ return value
+end
+
+function buildLibChild(lib)
+ if not valueMgr then
+ valueMgr = require 'vm.value'
+ functionMgr = require 'vm.function'
+ end
+ if CHILD_CACHE[lib] then
+ return CHILD_CACHE[lib]
+ end
+ local child = {}
+ for fName, fLib in pairs(lib.child) do
+ local fValue = buildLibValue(fLib)
+ child[fName] = fValue
+ end
+ CHILD_CACHE[lib] = child
+ return child
+end
+
+local function clearCache()
+ CHILD_CACHE = {}
+ VALUE_CACHE = {}
+end
+
+return {
+ value = buildLibValue,
+ child = buildLibChild,
+ clear = clearCache,
+ special = Special,
+}
diff --git a/script/src/vm/list.lua b/script/src/vm/list.lua
new file mode 100644
index 00000000..234f241f
--- /dev/null
+++ b/script/src/vm/list.lua
@@ -0,0 +1,30 @@
+local Id = 0
+local Version = 0
+local List = {}
+
+local function get(id)
+ return List[id]
+end
+
+local function add(obj)
+ Id = Id + 1
+ List[Id] = obj
+ return Id
+end
+
+local function clear(id)
+ List[id] = nil
+ Version = Version + 1
+end
+
+local function getVersion()
+ return Version
+end
+
+return {
+ get = get,
+ add = add,
+ clear = clear,
+ list = List,
+ getVersion = getVersion,
+}
diff --git a/script/src/vm/local.lua b/script/src/vm/local.lua
new file mode 100644
index 00000000..7e8af0f1
--- /dev/null
+++ b/script/src/vm/local.lua
@@ -0,0 +1,191 @@
+local listMgr = require 'vm.list'
+
+local Sort = 0
+local Watch = setmetatable({}, {__mode = 'kv'})
+
+---@class Local
+local mt = {}
+mt.__index = mt
+mt.type = 'local'
+mt._close = math.maxinteger
+
+function mt:setValue(value)
+ if not value then
+ return
+ end
+ if self.value then
+ --self.value:mergeValue(value)
+ self.value:mergeType(value)
+ self.value = value
+ else
+ self.value = value
+ end
+ if self._emmy then
+ self.value:setEmmy(self._emmy)
+ end
+ return value
+end
+
+function mt:getValue()
+ return self.value
+end
+
+function mt:addInfo(tp, source)
+ if not source then
+ error('No source')
+ end
+ local id = source.id
+ if not id then
+ error('Not instanted source')
+ end
+ if self._info[id] then
+ return
+ end
+ Sort = Sort + 1
+ local info = {
+ type = tp,
+ source = id,
+ _sort = Sort,
+ }
+
+ self._info[id] = info
+end
+
+function mt:eachInfo(callback)
+ local list = {}
+ for srcId, info in pairs(self._info) do
+ local src = listMgr.get(srcId)
+ if src then
+ list[#list+1] = info
+ else
+ self._info[srcId] = nil
+ end
+ end
+ table.sort(list, function (a, b)
+ return a._sort < b._sort
+ end)
+ for i = 1, #list do
+ local info = list[i]
+ local res = callback(info, listMgr.get(info.source))
+ if res ~= nil then
+ return res
+ end
+ end
+ return nil
+end
+
+function mt:set(name, v)
+ if not self._flag then
+ self._flag = {}
+ end
+ self._flag[name] = v
+end
+
+function mt:get(name)
+ if not self._flag then
+ return nil
+ end
+ return self._flag[name]
+end
+
+function mt:getName()
+ return self.name
+end
+
+function mt:shadow(old)
+ if not old then
+ if not self._shadow then
+ return nil
+ end
+ for i = #self._shadow, 1, -1 do
+ local loc = self._shadow[i]
+ if not loc:getSource() then
+ table.remove(self._shadow, i)
+ end
+ end
+ return self._shadow
+ end
+ local group = old._shadow
+ if not group then
+ group = {}
+ group[#group+1] = old
+ end
+ group[#group+1] = self
+ self._shadow = group
+
+ if not self:getSource() then
+ log.error('local no source')
+ return
+ end
+
+ old:close(self:getSource().start - 1)
+end
+
+function mt:close(pos)
+ if pos then
+ if pos <= 0 then
+ pos = math.maxinteger
+ end
+ self._close = pos
+ else
+ return self._close
+ end
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+local EMMY_TYPE = {
+ ['emmy.class'] = true,
+ ['emmy.type'] = true,
+ ['emmy.arrayType'] = true,
+ ['emmy.tableType'] = true,
+ ['emmy.functionType'] = true,
+}
+
+function mt:setEmmy(emmy)
+ if not emmy then
+ return
+ end
+ if self.value and EMMY_TYPE[emmy.type] then
+ self.value:setEmmy(emmy)
+ end
+end
+
+---@param comment string
+function mt:setComment(comment)
+ self._comment = comment
+end
+
+---@return string
+function mt:getComment()
+ return self._comment
+end
+
+local function create(name, source, value, tags)
+ if not value then
+ error('Local must has a value')
+ end
+ if not source then
+ error('No source')
+ end
+ local id = source.id
+ if not id then
+ error('Not instanted source')
+ end
+ local self = setmetatable({
+ name = name,
+ source = id,
+ value = value,
+ tags = tags,
+ _info = {},
+ }, mt)
+ Watch[self] = true
+ return self
+end
+
+return {
+ create = create,
+ watch = Watch,
+}
diff --git a/script/src/vm/manager.lua b/script/src/vm/manager.lua
new file mode 100644
index 00000000..b9762d2e
--- /dev/null
+++ b/script/src/vm/manager.lua
@@ -0,0 +1,17 @@
+---@class VM
+local mt = {}
+mt.__index = mt
+mt.type = 'vm'
+mt._version = -1
+
+---@param version integer
+function mt:setVersion(version)
+ self._version = version
+end
+
+---@return integer
+function mt:getVersion()
+ return self._version
+end
+
+return mt
diff --git a/script/src/vm/module.lua b/script/src/vm/module.lua
new file mode 100644
index 00000000..60191bf3
--- /dev/null
+++ b/script/src/vm/module.lua
@@ -0,0 +1,56 @@
+local mt = require 'vm.manager'
+local createMulti = require 'vm.multi'
+
+--[[
+function module(name, ...)
+ local env = {}
+ for _, opt in ipairs {...} do
+ opt(env)
+ end
+ @ENV = env
+end
+--]]
+function mt:callModuel(func, values)
+ local envLoc = self:loadLocal('@ENV')
+ if not envLoc then
+ return
+ end
+ local source = self:getDefaultSource()
+ local newEnvValue = self:createValue('table', source)
+ local args = createMulti()
+
+ args:push(newEnvValue)
+
+ for i = 2, #values do
+ local value = values[i]
+ -- opt(env)
+ self:call(value, args, source)
+ end
+
+ -- @ENV = env
+ envLoc:setValue(newEnvValue)
+end
+
+--[[
+function package.seeall(env)
+ setmetatable(env, { __index = @ENV })
+end
+--]]
+function mt:callSeeAll(func, values)
+ local newEnv = values[1]
+ if not newEnv then
+ return
+ end
+ local envLoc = self:loadLocal('@ENV')
+ if not envLoc then
+ return
+ end
+ local oldEnv = envLoc:getValue()
+ if not oldEnv then
+ return
+ end
+ local source = self:getDefaultSource()
+ local meta = self:createValue('table', source)
+ meta:setChild('__index', oldEnv, source)
+ newEnv:setMetaTable(meta)
+end
diff --git a/script/src/vm/multi.lua b/script/src/vm/multi.lua
new file mode 100644
index 00000000..4b27b8cf
--- /dev/null
+++ b/script/src/vm/multi.lua
@@ -0,0 +1,83 @@
+local mt = {}
+mt.__index = mt
+mt.type = 'multi'
+mt.len = 0
+
+function mt:push(value, isLast)
+ if value and value.type == 'list' then
+ if isLast then
+ for _, v in ipairs(value) do
+ self.len = self.len + 1
+ self[self.len] = v
+ end
+ else
+ self.len = self.len + 1
+ self[self.len] = value[1]
+ end
+ else
+ self.len = self.len + 1
+ self[self.len] = value
+ end
+end
+
+function mt:get(index)
+ return self[index]
+end
+
+function mt:set(index, value)
+ if index > self.len then
+ self.len = index
+ end
+ self[index] = value
+end
+
+function mt:first()
+ local value = self[1]
+ if not value then
+ return nil
+ end
+ if value.type == 'multi' then
+ return value:first()
+ else
+ return value
+ end
+end
+
+function mt:eachValue(callback)
+ local i = 0
+ for n, value in ipairs(self) do
+ if value.type == 'multi' then
+ if n == self.len then
+ value:eachValue(function (_, nvalue)
+ i = i + 1
+ callback(i, nvalue)
+ end)
+ else
+ i = i + 1
+ value:first()
+ end
+ else
+ i = i + 1
+ callback(i, value)
+ end
+ end
+end
+
+function mt:merge(other)
+ other:eachValue(function (_, value)
+ self:push(value)
+ end)
+end
+
+function mt:setEmmy(emmy)
+ self._emmy = emmy
+end
+
+function mt:getEmmy()
+ return self._emmy
+end
+
+return function ()
+ local self = setmetatable({}, mt)
+ return self
+end
diff --git a/script/src/vm/pcall.lua b/script/src/vm/pcall.lua
new file mode 100644
index 00000000..e5d1e26f
--- /dev/null
+++ b/script/src/vm/pcall.lua
@@ -0,0 +1,50 @@
+local mt = require 'vm.manager'
+local multi = require 'vm.multi'
+
+function mt:callPcall(func, values, source)
+ local funcValue = values:first()
+ if not funcValue then
+ return
+ end
+ local realFunc = funcValue:getFunction()
+ if not realFunc then
+ return
+ end
+ local argList = multi()
+ values:eachValue(function (i, v)
+ if i >= 2 then
+ argList:push(v)
+ end
+ end)
+ self:call(funcValue, argList, source)
+ if realFunc ~= func then
+ func:setReturn(1, self:createValue('boolean', source))
+ realFunc:getReturn():eachValue(function (i, v)
+ func:setReturn(i + 1, v)
+ end)
+ end
+end
+
+function mt:callXpcall(func, values, source)
+ local funcValue = values:first()
+ if not funcValue then
+ return
+ end
+ local realFunc = funcValue:getFunction()
+ if not realFunc then
+ return
+ end
+ local argList = multi()
+ values:eachValue(function (i, v)
+ if i >= 3 then
+ argList:push(v)
+ end
+ end)
+ self:call(funcValue, argList, source)
+ if realFunc ~= func then
+ func:setReturn(1, self:createValue('boolean', source))
+ realFunc:getReturn():eachValue(function (i, v)
+ func:setReturn(i + 1, v)
+ end)
+ end
+end
diff --git a/script/src/vm/raw.lua b/script/src/vm/raw.lua
new file mode 100644
index 00000000..f8c35734
--- /dev/null
+++ b/script/src/vm/raw.lua
@@ -0,0 +1,30 @@
+local mt = require 'vm.manager'
+
+function mt:callRawSet(func, values, source)
+ local tbl = values[1]
+ local index = values[2]
+ local value = values[3]
+ if not tbl or not index or not value then
+ return
+ end
+ if index:getLiteral() then
+ index = index:getLiteral()
+ end
+ tbl:addInfo('set child', source, index)
+ tbl:rawSet(index, value, source)
+ func:setReturn(1, tbl)
+end
+
+function mt:callRawGet(func, values, source)
+ local tbl = values[1]
+ local index = values[2]
+ if not tbl or not index then
+ return
+ end
+ if index:getLiteral() then
+ index = index:getLiteral()
+ end
+ tbl:addInfo('get child', source, index)
+ local value = tbl:rawGet(index)
+ func:setReturn(1, value)
+end
diff --git a/script/src/vm/source.lua b/script/src/vm/source.lua
new file mode 100644
index 00000000..7a10a38e
--- /dev/null
+++ b/script/src/vm/source.lua
@@ -0,0 +1,183 @@
+local listMgr = require 'vm.list'
+
+---@class source
+local mt = {}
+mt.__index = mt
+mt.type = 'source'
+mt.uri = ''
+mt.start = 0
+mt.finish = 0
+mt.id = 0
+
+local Watch = setmetatable({}, {__mode = 'k'})
+
+function mt:bindLocal(loc, action)
+ if loc then
+ self._bindLocal = loc
+ self._bindValue = loc:getValue()
+ self._action = action
+ loc:addInfo(action, self)
+ else
+ if not self._bindLocal then
+ return nil
+ end
+ if not self._bindLocal:getSource() then
+ self._bindLocal = nil
+ return nil
+ end
+ return self._bindLocal
+ end
+end
+
+function mt:bindLabel(label, action)
+ if label then
+ self._bindLabel = label
+ self._action = action
+ label:addInfo(action, self)
+ else
+ return self._bindLabel
+ end
+end
+
+function mt:bindFunction(func)
+ if func then
+ self._bindFunction = func
+ else
+ return self._bindFunction
+ end
+end
+
+function mt:bindValue(value, action)
+ if value then
+ self._bindValue = value
+ self._action = action
+ value:addInfo(action, self)
+ else
+ return self._bindValue
+ end
+end
+
+function mt:bindCall(args)
+ if args then
+ self._bindCallArgs = args
+ else
+ return self._bindCallArgs
+ end
+end
+
+function mt:bindMetatable(meta)
+ if meta then
+ self._bindMetatable = meta
+ else
+ return self._bindMetatable
+ end
+end
+
+function mt:action()
+ return self._action
+end
+
+function mt:setUri(uri)
+ self.uri = uri
+end
+
+function mt:getUri()
+ return self.uri
+end
+
+function mt:set(name, v)
+ if not self._flag then
+ self._flag = {}
+ end
+ self._flag[name] = v
+end
+
+function mt:get(name)
+ if not self._flag then
+ return nil
+ end
+ return self._flag[name]
+end
+
+function mt:getName()
+ return self[1]
+end
+
+function mt:kill()
+ self._dead = true
+ listMgr.clear(self.id)
+end
+
+function mt:isDead()
+ return self._dead
+end
+
+function mt:findValue()
+ local value = self:bindValue()
+ if not value then
+ return nil
+ end
+ if not value:isGlobal() then
+ return value
+ end
+ if self.type ~= 'name' then
+ return value
+ end
+ local parent = self:get 'parent'
+ if not parent then
+ return value
+ end
+ local name = self[1]
+ if type(name) ~= 'string' then
+ return value
+ end
+ return parent:getChild(name) or value
+end
+
+function mt:findCallFunction()
+ local simple = self:get 'simple'
+ if not simple then
+ return nil
+ end
+ local source
+ for i = 1, #simple do
+ if simple[i] == self then
+ source = simple[i-1]
+ end
+ end
+ if not source then
+ return nil
+ end
+ local value = source:bindValue()
+ if value and value:getFunction() then
+ return value
+ end
+ value = source:findValue()
+ if value and value:getFunction() then
+ return value
+ end
+ return nil
+end
+
+local function instant(source)
+ if source.id then
+ return false
+ end
+ local id = listMgr.add(source)
+ source.id = id
+ Watch[source] = id
+ setmetatable(source, mt)
+ return true
+end
+
+local function dummy()
+ local src = {}
+ instant(src)
+ return src
+end
+
+return {
+ instant = instant,
+ watch = Watch,
+ dummy = dummy,
+}
diff --git a/script/src/vm/special.lua b/script/src/vm/special.lua
new file mode 100644
index 00000000..e93c4445
--- /dev/null
+++ b/script/src/vm/special.lua
@@ -0,0 +1,130 @@
+local mt = require 'vm.manager'
+local multi = require 'vm.multi'
+local library = require 'core.library'
+local libraryBuilder = require 'vm.library'
+local plugin = require 'plugin'
+
+---@param func emmyFunction
+---@param values table
+function mt:callEmmySpecial(func, values, source)
+ local emmyParams = func:getEmmyParams()
+ for index, param in ipairs(emmyParams) do
+ local option = param:getOption()
+ if option and type(option.special) == 'string' then
+ self:checkEmmyParam(func, values, index, option.special, source)
+ end
+ end
+end
+
+---@param func emmyFunction
+---@param values table
+---@param index integer
+---@param special string
+function mt:checkEmmyParam(func, values, index, special, source)
+ if special == 'dofile:1' then
+ self:callEmmyDoFile(func, values, index)
+ elseif special == 'loadfile:1' then
+ self:callEmmyLoadFile(func, values, index)
+ elseif special == 'pcall:1' then
+ self:callEmmyPCall(func, values, index, source)
+ elseif special == 'require:1' then
+ self:callEmmyRequire(func, values, index)
+ end
+end
+
+---@param func emmyFunction
+---@param values table
+---@param index integer
+function mt:callEmmyDoFile(func, values, index)
+ if not values[index] then
+ values[index] = self:createValue('any', self:getDefaultSource())
+ end
+ local str = values[index]:getLiteral()
+ if type(str) ~= 'string' then
+ return
+ end
+ local requireValue = self:tryRequireOne(str, values[index], 'dofile')
+ if not requireValue then
+ requireValue = self:createValue('any', self:getDefaultSource())
+ requireValue.isRequire = true
+ end
+ func:setReturn(1, requireValue)
+end
+
+---@param func emmyFunction
+---@param values table
+---@param index integer
+function mt:callEmmyLoadFile(func, values, index)
+ if not values[index] then
+ values[index] = self:createValue('any', self:getDefaultSource())
+ end
+ local str = values[index]:getLiteral()
+ if type(str) ~= 'string' then
+ return
+ end
+ local requireValue = self:tryRequireOne(str, values[index], 'loadfile')
+ if not requireValue then
+ requireValue = self:createValue('any', self:getDefaultSource())
+ requireValue:set('cross file', true)
+ end
+ func:setReturn(1, requireValue)
+end
+
+---@param func emmyFunction
+---@param values table
+---@param index integer
+---@param source source
+function mt:callEmmyPCall(func, values, index, source)
+ local funcValue = values[index]
+ if not funcValue then
+ return
+ end
+ local realFunc = funcValue:getFunction()
+ if not realFunc then
+ return
+ end
+ local argList = multi()
+ values:eachValue(function (i, v)
+ if i > index then
+ argList:push(v)
+ end
+ end)
+ self:call(funcValue, argList, source)
+ if realFunc ~= func then
+ func:setReturn(1, self:createValue('boolean', source))
+ realFunc:getReturn():eachValue(function (i, v)
+ func:setReturn(i + 1, v)
+ end)
+ end
+end
+
+---@param func emmyFunction
+---@param values table
+---@param index integer
+function mt:callEmmyRequire(func, values, index)
+ if not values[index] then
+ values[index] = self:createValue('any', self:getDefaultSource())
+ end
+ local strValue = values[index]
+ local strSource = strValue:getSource()
+ if not strSource then
+ return nil
+ end
+ local str = strValue:getLiteral()
+ local raw = self.text:sub(strSource.start, strSource.finish)
+ str = plugin.call('OnRequirePath', str, raw) or str
+ local lib = library.library[str]
+ if lib then
+ local value = libraryBuilder.value(lib)
+ value:markGlobal()
+ func:setReturn(1, value)
+ return
+ else
+ local requireValue = self:tryRequireOne(str, strValue, 'require')
+ if not requireValue then
+ requireValue = self:createValue('any', self:getDefaultSource())
+ requireValue:set('cross file', true)
+ end
+ func:setReturn(1, requireValue)
+ end
+end
diff --git a/script/src/vm/value.lua b/script/src/vm/value.lua
new file mode 100644
index 00000000..5de0d8e8
--- /dev/null
+++ b/script/src/vm/value.lua
@@ -0,0 +1,634 @@
+local libraryBuilder = require 'vm.library'
+local library = require 'core.library'
+local listMgr = require 'vm.list'
+local config = require 'config'
+
+local Sort = 0
+local Watch = setmetatable({}, {__mode = 'kv'})
+local TypeLevel = {
+ ['table'] = 1.0,
+ ['function'] = 0.9,
+ ['string'] = 0.8,
+ ['integer'] = 0.7,
+ ['number'] = 0.6,
+}
+
+---@class value
+local mt = {}
+mt.__index = mt
+mt.type = 'value'
+mt.uri = ''
+mt._global = false
+
+local function create (tp, source, literal)
+ if tp == '...' then
+ error('Value type cant be ...')
+ end
+ if not source then
+ error('No source')
+ end
+ local id = source.id
+ if not id then
+ error('Not instanted source')
+ end
+ local self = setmetatable({
+ source = id,
+ _type = {},
+ _literal = literal,
+ _info = {},
+ }, mt)
+ if type(tp) == 'table' then
+ for i = 1, #tp do
+ self:setType(tp[i], 1.0 / #tp)
+ end
+ else
+ self:setType(tp, 1.0)
+ end
+ Watch[self] = true
+ return self
+end
+
+function mt:setType(tp, rate)
+ if type(tp) == 'table' then
+ for _, ctp in ipairs(tp) do
+ self:setType(ctp, rate)
+ end
+ return
+ end
+ if tp == '...' then
+ error('Value type cant be ...')
+ end
+ if not tp then
+ tp = 'nil'
+ end
+ if tp == 'any' or tp == 'nil' then
+ rate = 0.0
+ end
+ if tp == 'integer' then
+ local version = config.config.runtime.version
+ if version ~= 'Lua 5.3' and version ~= 'Lua 5.4' then
+ tp = 'number'
+ end
+ end
+ local current = self._type[tp] or 0.0
+ if rate > current then
+ self._type[tp] = rate
+ end
+end
+
+function mt:getType()
+ if self:getEmmy() then
+ return self:getEmmy():getType(), 1.0
+ end
+ if not self._type then
+ return 'nil', 0.0
+ end
+ local mRate = 0.0
+ local mType
+ for tp, rate in pairs(self._type) do
+ if rate > mRate then
+ mRate = rate
+ mType = tp
+ elseif rate == mRate then
+ local level1 = TypeLevel[tp] or 0.0
+ local level2 = TypeLevel[mType] or 0.0
+ if level1 > level2 then
+ mRate = rate
+ mType = tp
+ end
+ end
+ end
+ return mType or 'any', mRate
+end
+
+function mt:rawSet(index, value, source)
+ if index == nil then
+ return
+ end
+ if not self._child then
+ self._child = {}
+ end
+ if self._child[index] then
+ if self._global then
+ self._child[index]:mergeValue(value)
+ else
+ self._child[index]:mergeType(value)
+ self._child[index]:mergeInfo(value)
+ end
+ self._child[index] = value
+ else
+ self._child[index] = value
+ end
+ self:addInfo('set child', source, index, self._child[index])
+ if self._global then
+ self._child[index]:markGlobal()
+ end
+end
+
+function mt:rawGet(index)
+ if not self._child then
+ return nil
+ end
+ self:flushChild()
+ local child = self._child[index]
+ if not child then
+ return nil
+ end
+ return child
+end
+
+function mt:setChild(index, value, source)
+ if index == nil then
+ return
+ end
+ self:setType('table', 0.5)
+ self:rawSet(index, value, source)
+ return value
+end
+
+function mt:getLibChild(index)
+ local tp = self:getType()
+ local lib = library.object[tp]
+ if lib then
+ local childs = libraryBuilder.child(lib)
+ return childs[index]
+ end
+ return nil
+end
+
+function mt:eachLibChild(callback)
+ local tp = self:getType()
+ local lib = library.object[tp]
+ if lib then
+ local childs = libraryBuilder.child(lib)
+ for k, v in pairs(childs) do
+ callback(k, v)
+ end
+ end
+end
+
+function mt:getChild(index, source)
+ self:setType('table', 0.5)
+ local parent = self
+ local value
+ -- 最多检查3层 __index
+ for _ = 1, 3 do
+ value = parent:rawGet(index)
+ if value then
+ break
+ end
+ local method = parent:getMetaMethod('__index')
+ if not method then
+ value = parent:getLibChild(index)
+ break
+ end
+ parent = method
+ end
+ if not value and source then
+ local emmy = self:getEmmy()
+ if emmy then
+ if emmy.type == 'emmy.arrayType' then
+ if type(index) == 'number' then
+ value = create(emmy:getName(), source)
+ end
+ elseif emmy.type == 'emmy.tableType' then
+ value = create(emmy:getValueType():getType(), source)
+ end
+ end
+ if not value then
+ value = create('any', source)
+ end
+ self:setChild(index, value)
+ value.uri = self.uri
+ end
+ return value
+end
+
+function mt:setMetaTable(metatable)
+ local source = metatable:getSource()
+ if not source then
+ return
+ end
+ source:bindMetatable(metatable)
+ self._meta = metatable.source
+end
+
+function mt:getMetaTable()
+ if not self._meta then
+ return nil
+ end
+ local metaSource = listMgr.get(self._meta)
+ if not metaSource then
+ self._meta = nil
+ return nil
+ end
+ return metaSource:bindMetatable()
+end
+
+function mt:getMetaMethod(name)
+ local meta = self:getMetaTable()
+ if not meta then
+ return nil
+ end
+ return meta:rawGet(name)
+end
+
+function mt:flushChild()
+ if not self._child then
+ return nil
+ end
+ -- 非全局值不会出现dead child
+ if not self._global then
+ return
+ end
+ local listVersion = listMgr.getVersion()
+ if self._flushVersion == listVersion then
+ return
+ end
+ self._flushVersion = listVersion
+ local alived = {}
+ local infos = self._info
+ local count = 0
+ for srcId, info in pairs(infos) do
+ local src = listMgr.get(srcId)
+ if src then
+ if info.type == 'set child' or info.type == 'get child' then
+ if info[1] then
+ alived[info[1]] = true
+ end
+ end
+ count = count + 1
+ else
+ infos[srcId] = nil
+ end
+ end
+ infos._count = count
+ infos._limit = count * 1.1 + 10
+ infos._version = listMgr.getVersion()
+ for index in pairs(self._child) do
+ if not alived[index] then
+ self._child[index] = nil
+ end
+ end
+end
+
+function mt:rawEach(callback, mark)
+ if not self._child then
+ return nil
+ end
+ self:flushChild()
+ for index, value in pairs(self._child) do
+ if mark then
+ if mark[index] then
+ goto CONTINUE
+ end
+ mark[index] = true
+ end
+ local res = callback(index, value)
+ if res ~= nil then
+ return res
+ end
+ ::CONTINUE::
+ end
+ return nil
+end
+
+function mt:eachChild(callback)
+ local mark = {}
+ local parent = self
+ -- 最多检查3层 __index
+ for _ = 1, 3 do
+ local res = parent:rawEach(callback, mark)
+ if res ~= nil then
+ return res
+ end
+ local method = parent:getMetaMethod('__index')
+ if not method then
+ return parent:eachLibChild(callback)
+ end
+ parent = method
+ end
+end
+
+function mt:mergeType(value)
+ if self == value then
+ return
+ end
+ if not value then
+ return
+ end
+ if self._emmy and not value._emmy then
+ value._emmy = self._emmy
+ return
+ elseif not self._emmy and value._emmy then
+ self._emmy = value._emmy
+ return
+ end
+ if value._type then
+ for tp, rate in pairs(value._type) do
+ self:setType(tp, rate)
+ end
+ end
+ value._type = self._type
+end
+
+function mt:mergeInfo(value)
+ if self == value then
+ return
+ end
+ if not value then
+ return
+ end
+ local infos = self._info
+ for srcId, info in pairs(value._info) do
+ local src = listMgr.get(srcId)
+ if src and not infos[srcId] then
+ infos[srcId] = info
+ infos._count = (infos._count or 0) + 1
+ end
+ end
+ value._info = infos
+end
+
+function mt:mergeValue(value)
+ if self == value then
+ return
+ end
+ if not value then
+ return
+ end
+ local list = {self, value}
+ local pos = 1
+ while true do
+ local a, b = list[pos], list[pos+1]
+ if not a then
+ break
+ end
+ pos = pos + 2
+ list[a] = true
+ list[b] = true
+ a:mergeType(b)
+ a:mergeInfo(b)
+
+ a:flushChild()
+ b:flushChild()
+ local global = a._global or b._global
+ if b._child then
+ if not a._child then
+ a._child = {}
+ end
+ for k, bc in pairs(b._child) do
+ local ac = a._child[k]
+ if ac and ac ~= bc and global then
+ if list[ac] and list[bc] then
+ else
+ list[#list+1] = ac
+ list[#list+1] = bc
+ end
+ end
+ a._child[k] = bc
+ end
+ end
+ b._child = a._child
+ if global then
+ a:markGlobal()
+ b:markGlobal()
+ end
+
+ if b._meta then
+ a._meta = b._meta
+ end
+ if b._func then
+ a._func = b._func
+ end
+ if b._lib then
+ a._lib = b._lib
+ end
+ if b.uri then
+ a.uri = b.uri
+ end
+ end
+end
+
+function mt:addInfo(tp, source, ...)
+ if not source then
+ return
+ end
+ if not source.start then
+ error('Miss start: ' .. table.dump(source))
+ end
+ local id = source.id
+ if not id then
+ error('Not instanted source')
+ end
+ if not tp then
+ error('Miss info type')
+ end
+
+ local infos = self._info
+ if infos[id] then
+ return
+ end
+ Sort = Sort + 1
+ local info = {
+ type = tp,
+ source = id,
+ _sort = Sort,
+ ...
+ }
+ infos[id] = info
+ infos._count = (infos._count or 0) + 1
+ local version = listMgr.getVersion()
+ -- 只有全局值需要压缩info
+ if self._global and infos._count > (infos._limit or 10) and infos._version ~= version then
+ local count = 0
+ for srcId in pairs(infos) do
+ local src = listMgr.get(srcId)
+ if src then
+ count = count + 1
+ else
+ infos[srcId] = nil
+ end
+ end
+ infos._count = count
+ infos._limit = count * 1.1 + 10
+ infos._version = version
+ end
+end
+
+function mt:eachInfo(callback)
+ local clock = os.clock()
+ local infos = self._info
+ local list = {}
+ for srcId, info in pairs(infos) do
+ local src = listMgr.get(srcId)
+ if src then
+ list[#list+1] = info
+ else
+ infos[srcId] = nil
+ end
+ end
+ infos._count = #list
+ infos._limit = infos._count * 1.1 + 10
+ infos._version = listMgr.getVersion()
+ --local clock2 = os.clock()
+ --table.sort(list, function (a, b)
+ -- return a._sort < b._sort
+ --end)
+ local passed = os.clock() - clock
+ if passed > 0.1 then
+ log.warn(('eachInfo takes: [%.3f]sec, #list: %d'):format(passed, #list))
+ end
+ for i = 1, #list do
+ local info = list[i]
+ local res = callback(info, listMgr.get(info.source))
+ if res ~= nil then
+ return res
+ end
+ end
+ return nil
+end
+
+function mt:setFunction(func)
+ self._func = func.id
+ if self._global then
+ func:markGlobal()
+ end
+end
+
+function mt:getFunction()
+ local id = self._func
+ local func = listMgr.get(id)
+ if not func then
+ return nil
+ end
+ if func._removed then
+ return nil
+ end
+ if not func:getSource() then
+ func = nil
+ listMgr.clear(id)
+ end
+ return func
+end
+
+function mt:setLib(lib)
+ self._lib = lib
+end
+
+function mt:getLib()
+ return self._lib
+end
+
+function mt:getLiteral()
+ return self._literal
+end
+
+function mt:set(name, v)
+ if not self._flag then
+ self._flag = {}
+ end
+ self._flag[name] = v
+end
+
+function mt:get(name)
+ if not self._flag then
+ return nil
+ end
+ return self._flag[name]
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:markGlobal()
+ if self._global then
+ return
+ end
+ self._global = true
+ self:rawEach(function (index, value)
+ value:markGlobal()
+ end)
+ local func = self:getFunction()
+ if func then
+ func:markGlobal()
+ end
+end
+
+function mt:isGlobal()
+ return self._global
+end
+
+function mt:setEmmy(emmy)
+ if not emmy then
+ return
+ end
+ if emmy.type == 'emmy.class' then
+ ---@type EmmyClass
+ local emmyClass = emmy
+ emmyClass:setValue(self)
+ emmyClass:eachChild(function (obj)
+ local value = obj:getValue()
+ if value then
+ value:mergeValue(self)
+ end
+ end)
+ emmyClass:eachField(function (field)
+ local name = field:getName()
+ local value = field:bindValue()
+ self:setChild(name, value, field:getSource())
+ end)
+ elseif emmy.type == 'emmy.type' then
+ ---@type EmmyType
+ local emmyType = emmy
+ emmyType:setValue(self)
+ emmyType:eachClass(function (class)
+ if class then
+ self:mergeValue(class:getValue())
+ end
+ end)
+ elseif emmy.type == 'emmy.arrayType' then
+ ---@type EmmyArrayType
+ local emmyArrayType = emmy
+ emmyArrayType:setValue(self)
+ elseif emmy.type == 'emmy.tableType' then
+ ---@type EmmyTableType
+ local emmyTableType = emmy
+ emmyTableType:setValue(self)
+ elseif emmy.type == 'emmy.functionType' then
+ ---@type EmmyFunctionType
+ local emmyFuncType = emmy
+ emmyFuncType:setValue(self)
+ self:setFunction(emmyFuncType:bindFunction())
+ else
+ return
+ end
+ self._emmy = emmy
+ self:markGlobal()
+end
+
+function mt:getEmmy()
+ if not self._emmy then
+ return nil
+ end
+ local source = self._emmy.source
+ if not listMgr.get(source) then
+ self._emmy = nil
+ return nil
+ end
+ return self._emmy
+end
+
+function mt:setComment(comment)
+ self._comment = comment
+end
+
+function mt:getComment(comment)
+ return self._comment
+end
+
+return {
+ create = create,
+ watch = Watch,
+}
diff --git a/script/src/vm/vm.lua b/script/src/vm/vm.lua
new file mode 100644
index 00000000..36ad78c9
--- /dev/null
+++ b/script/src/vm/vm.lua
@@ -0,0 +1,1334 @@
+local library = require 'core.library'
+local valueMgr = require 'vm.value'
+local localMgr = require 'vm.local'
+local createLabel = require 'vm.label'
+local functionMgr = require 'vm.function'
+local sourceMgr = require 'vm.source'
+local buildGlobal = require 'vm.global'
+local createMulti = require 'vm.multi'
+local libraryBuilder = require 'vm.library'
+local emmyMgr = require 'emmy.manager'
+local config = require 'config'
+local mt = require 'vm.manager'
+local plugin = require 'plugin'
+
+require 'vm.module'
+require 'vm.raw'
+require 'vm.pcall'
+require 'vm.ipairs'
+require 'vm.emmy'
+require 'vm.special'
+
+-- TODO source测试
+--rawset(_G, 'CachedSource', setmetatable({}, { __mode = 'kv' }))
+
+function mt:getDefaultSource()
+ return self:instantSource {
+ start = 0,
+ finish = 0,
+ }
+end
+
+function mt:scopePush(source)
+ self.currentFunction:push(source)
+end
+
+function mt:scopePop()
+ self.currentFunction:pop()
+end
+
+function mt:buildTable(source)
+ local tbl = self:createValue('table', source)
+ if not source then
+ return tbl
+ end
+ local n = 0
+ for index, obj in ipairs(source) do
+ local emmy = self:getEmmy()
+ if obj.type == 'pair' then
+ local value = self:getFirstInMulti(self:getExp(obj[2]))
+ if value then
+ local key = obj[1]
+ self:instantSource(obj)
+ self:instantSource(key)
+ key:bindValue(value, 'set')
+ value:setEmmy(emmy)
+ if key.type == 'index' then
+ local index = self:getIndex(key)
+ key:set('parent', tbl)
+ tbl:setChild(index, value, key)
+ else
+ if key.type == 'name' then
+ key:set('parent', tbl)
+ key:set('table index', true)
+ tbl:setChild(key[1], value, key)
+ end
+ end
+ end
+ elseif obj.type:sub(1, 4) == 'emmy' then
+ self:doEmmy(obj)
+ else
+ local value = self:getExp(obj)
+ if value.type == 'multi' then
+ if index == #source then
+ value:eachValue(function (_, v)
+ n = n + 1
+ tbl:setChild(n, v, obj)
+ end)
+ else
+ n = n + 1
+ local v = self:getFirstInMulti(value)
+ tbl:setChild(n, v, obj)
+ end
+ else
+ n = n + 1
+ tbl:setChild(n, value, obj)
+ end
+ -- 处理写了一半的 key = value,把name类的数组元素视为哈希键
+ if obj.type == 'name' then
+ obj:set('table index', true)
+ end
+ end
+ end
+ return tbl
+end
+
+function mt:runFunction(func)
+ func:run(self)
+
+ if not func:getSource() then
+ return
+ end
+
+ if func:needSkip() then
+ return
+ end
+
+ -- 暂时使用这种方式激活参数的source
+ for _, arg in ipairs(func.args) do
+ if arg:getSource() ~= func:getObject() then
+ self:bindLocal(arg:getSource(), arg, 'local')
+ end
+ end
+
+ local originFunction = self:getCurrentFunction()
+ self:setCurrentFunction(func)
+ func:push(func:getSource())
+ func:markChunk()
+
+ self:doActions(func:getSource())
+
+ func:pop()
+ self:setCurrentFunction(originFunction)
+end
+
+function mt:buildFunction(exp)
+ if exp and exp:bindFunction() then
+ return exp:bindFunction()
+ end
+
+ local value = self:createFunction(exp)
+
+ if not exp then
+ return value
+ end
+
+ exp:bindFunction(value)
+ local func = value:getFunction()
+
+ self:eachLocal(function (name, loc)
+ func:saveUpvalue(name, loc)
+ end)
+
+ return value
+end
+
+function mt:forList(list, callback)
+ if not list then
+ return
+ end
+ if list.type == 'list' then
+ for i = 1, #list do
+ callback(list[i])
+ end
+ else
+ callback(list)
+ end
+end
+
+function mt:callSetMetaTable(func, values, source)
+ if not values[1] then
+ values[1] = self:createValue('any', self:getDefaultSource())
+ end
+ if not values[2] then
+ values[2] = self:createValue('any', self:getDefaultSource())
+ end
+ func:setReturn(1, values[1])
+ values[1]:setMetaTable(values[2])
+end
+
+function mt:tryRequireOne(str, strValue, mode)
+ if not self.lsp or not self.lsp.workspace then
+ return nil
+ end
+ local strSource = strValue:getSource()
+ if not strSource then
+ return nil
+ end
+ if type(str) == 'string' then
+ -- 支持 require 'xxx' 的转到定义
+ self:instantSource(strSource)
+ local uri
+ if mode == 'require' then
+ uri = self.lsp.workspace:searchPath(self:getUri(), str)
+ elseif mode == 'loadfile' then
+ uri = self.lsp.workspace:loadPath(self:getUri(), str)
+ elseif mode == 'dofile' then
+ uri = self.lsp.workspace:loadPath(self:getUri(), str)
+ end
+ if not uri then
+ return nil
+ end
+
+ strSource:set('target uri', uri)
+ self.lsp:compileChain(self:getUri(), uri)
+ return self.lsp.chain:get(uri)
+ end
+ return nil
+end
+
+function mt:callRequire(func, values)
+ if not values[1] then
+ values[1] = self:createValue('any', self:getDefaultSource())
+ end
+ local strValue = values[1]
+ local strSource = strValue:getSource()
+ if not strSource then
+ return nil
+ end
+ local str = strValue:getLiteral()
+ local raw = self.text:sub(strSource.start, strSource.finish)
+ str = plugin.call('OnRequirePath', str, raw) or str
+ local lib = library.library[str]
+ if lib then
+ local value = libraryBuilder.value(lib)
+ value:markGlobal()
+ func:setReturn(1, value)
+ return
+ else
+ local requireValue = self:tryRequireOne(str, values[1], 'require')
+ if not requireValue then
+ requireValue = self:createValue('any', self:getDefaultSource())
+ requireValue:set('cross file', true)
+ end
+ func:setReturn(1, requireValue)
+ end
+end
+
+function mt:callLoadFile(func, values)
+ if not values[1] then
+ values[1] = self:createValue('any', self:getDefaultSource())
+ end
+ local strValue = values[1]
+ local requireValue = self:tryRequireOne(strValue:getLiteral(), values[1], 'loadfile')
+ if not requireValue then
+ requireValue = self:createValue('any', self:getDefaultSource())
+ requireValue:set('cross file', true)
+ end
+ func:setReturn(1, requireValue)
+end
+
+function mt:callDoFile(func, values)
+ if not values[1] then
+ values[1] = self:createValue('any', self:getDefaultSource())
+ end
+ local strValue = values[1]
+ local requireValue = self:tryRequireOne(strValue:getLiteral(), values[1], 'dofile')
+ if not requireValue then
+ requireValue = self:createValue('any', self:getDefaultSource())
+ requireValue.isRequire = true
+ end
+ func:setReturn(1, requireValue)
+end
+
+function mt:callLibrary(func, values, source, lib)
+ if lib.args then
+ for i, arg in ipairs(lib.args) do
+ local value = values[i]
+ if value and arg.type ~= '...' then
+ value:setType(arg.type, 0.6)
+ end
+ end
+ end
+ if lib.returns then
+ for i, rtn in ipairs(lib.returns) do
+ if rtn.type == '...' then
+ --func:getReturn(i):setType('any', 0.0)
+ else
+ if rtn.type == 'boolean' or rtn.type == 'number' or rtn.type == 'integer' or rtn.type == 'string' then
+ func:setReturn(i, self:createValue(rtn.type, self:getDefaultSource()))
+ end
+ local value = func:getReturn(i)
+ if value then
+ value:setType(rtn.type or 'any', 0.6)
+ end
+ end
+ end
+ end
+ if lib.special then
+ if lib.special == 'setmetatable' then
+ self:callSetMetaTable(func, values, source)
+ elseif lib.special == 'require' then
+ self:callRequire(func, values)
+ elseif lib.special == 'loadfile' then
+ self:callLoadFile(func, values)
+ elseif lib.special == 'dofile' then
+ self:callDoFile(func, values)
+ elseif lib.special == 'module' then
+ self:callModuel(func, values)
+ elseif lib.special == 'seeall' then
+ self:callSeeAll(func, values)
+ elseif lib.special == 'rawset' then
+ self:callRawSet(func, values, source)
+ elseif lib.special == 'rawget' then
+ self:callRawGet(func, values, source)
+ elseif lib.special == 'pcall' then
+ self:callPcall(func, values, source)
+ elseif lib.special == 'xpcall' then
+ self:callXpcall(func, values, source)
+ elseif lib.special == 'ipairs' then
+ self:callIpairs(func, values, source)
+ elseif lib.special == '@ipairs' then
+ self:callAtIpairs(func, values, source)
+ elseif lib.special == 'pairs' then
+ self:callPairs(func, values, source)
+ elseif lib.special == 'next' then
+ self:callNext(func, values, source)
+ end
+ else
+ -- 如果lib的参数中有function,则立即执行function
+ if lib.args then
+ local args
+ for i = 1, #lib.args do
+ local value = values[i]
+ if value and value:getFunction() then
+ if not args then
+ args = createMulti()
+ end
+ self:call(value, args, source)
+ end
+ end
+ end
+ end
+end
+
+function mt:call(value, values, source)
+ local lib = value:getLib()
+ ---@type emmyFunction
+ local func = value:getFunction()
+ value:setType('function', 0.5)
+ if not func then
+ return
+ end
+ self:instantSource(source)
+ if lib then
+ self:callLibrary(func, values, source, lib)
+ else
+ if func:getSource() then
+ if not source:get 'called' then
+ source:set('called', true)
+ func:setArgs(values)
+ self:runFunction(func)
+ end
+ else
+ func:mergeReturn(1, self:createValue('any', source))
+ end
+ if func:getEmmyParams() then
+ self:callEmmySpecial(func, values, source)
+ end
+ end
+
+ return func:getReturn()
+end
+
+function mt:createValue(tp, source, literal)
+ local value = valueMgr.create(tp, source, literal)
+ value.uri = self:getUri()
+ return value
+end
+
+function mt:getName(name, source)
+ if source then
+ self:instantSource(source)
+ if source:bindLocal() then
+ local loc = source:bindLocal()
+ return loc:getValue()
+ end
+ end
+ local loc = self:loadLocal(name)
+ if loc then
+ source:bindLocal(loc, 'get')
+ return loc:getValue()
+ end
+ local global = source:bindValue()
+ if global then
+ return global
+ end
+ local ENV
+ if self.envType == '_ENV' then
+ ENV = self:loadLocal('_ENV')
+ else
+ ENV = self:loadLocal('@ENV')
+ end
+ local ENVValue = ENV:getValue()
+ ENVValue:addInfo('get child', source, name)
+ global = ENVValue:getChild(name, source)
+ source:bindValue(global, 'get')
+ source:set('global', true)
+ source:set('parent', ENVValue)
+ if not global:getLib() then
+ if self.lsp then
+ self.lsp.global:markGet(self:getUri())
+ end
+ end
+ return global
+end
+
+function mt:setName(name, source, value)
+ self:instantSource(source)
+ local loc = self:loadLocal(name)
+ if loc then
+ loc:setValue(value)
+ source:bindLocal(loc, 'set')
+ return
+ end
+ local global = source:bindValue()
+ if global then
+ return global
+ end
+ local ENV
+ if self.envType == '_ENV' then
+ ENV = self:loadLocal('_ENV')
+ else
+ ENV = self:loadLocal('@ENV')
+ end
+ local ENVValue = ENV:getValue()
+ source:bindValue(value, 'set')
+ ENVValue:setChild(name, value, source)
+ source:set('global', true)
+ source:set('parent', ENVValue)
+ if self.lsp then
+ self.lsp.global:markSet(self:getUri())
+ end
+end
+
+function mt:getIndex(source)
+ local child = source[1]
+ if child.type == 'name' then
+ local value = self:getName(child[1], child)
+ child:set('in index', source)
+ return value
+ elseif child.type == 'string' or child.type == 'number' or child.type == 'boolean' then
+ self:instantSource(child)
+ child:set('in index', source)
+ return child[1]
+ else
+ local index = self:getExp(child)
+ return self:getFirstInMulti(index)
+ end
+end
+
+function mt:unpackList(list)
+ local values = createMulti()
+ local exps = createMulti()
+ if not list then
+ return values
+ end
+ if list.type == 'list' or list.type == 'call' or list.type == 'return' then
+ for i, exp in ipairs(list) do
+ self:instantSource(exp)
+ exps:push(exp)
+ if exp.type == '...' then
+ values:merge(self:loadDots())
+ break
+ end
+ local value = self:getExp(exp)
+ if value.type == 'multi' then
+ if i == #list then
+ value:eachValue(function (_, v)
+ values:push(v)
+ end)
+ else
+ values:push(self:getFirstInMulti(value))
+ end
+ else
+ values:push(value)
+ end
+ end
+ elseif list.type == '...' then
+ self:instantSource(list)
+ exps:push(list)
+ values:merge(self:loadDots())
+ else
+ self:instantSource(list)
+ exps:push(list)
+ local value = self:getExp(list)
+ if value.type == 'multi' then
+ value:eachValue(function (_, v)
+ values:push(v)
+ end)
+ else
+ values:push(value)
+ end
+ end
+ return values, exps
+end
+
+function mt:getFirstInMulti(multi)
+ if not multi then
+ return multi
+ end
+ if multi.type == 'multi' then
+ return self:getFirstInMulti(multi[1])
+ else
+ return multi
+ end
+end
+
+function mt:getSimple(simple, max)
+ self:instantSource(simple)
+ local first = simple[1]
+ self:instantSource(first)
+ local value = self:getExp(first)
+ value = self:getFirstInMulti(value) or valueMgr.create('nil', self:getDefaultSource())
+ first:bindValue(value, 'get')
+ if not max then
+ max = #simple
+ elseif max < 0 then
+ max = #simple + 1 + max
+ end
+ local object
+ for i = 2, max do
+ local source = simple[i]
+ self:instantSource(source)
+ source:set('simple', simple)
+ value = self:getFirstInMulti(value) or valueMgr.create('nil', self:getDefaultSource())
+
+ if source.type == 'call' then
+ local values, args = self:unpackList(source)
+ local func = value
+ if object then
+ table.insert(values, 1, object)
+ table.insert(args, 1, simple[i-3])
+ source:set('has object', true)
+ end
+ object = nil
+ source:bindCall(args)
+ value = self:call(func, values, source) or valueMgr.create('any', self:getDefaultSource())
+ elseif source.type == 'index' then
+ local child = source[1]
+ local index = self:getIndex(source)
+ child:set('parent', value)
+ value:addInfo('get child', source, index)
+ value = value:getChild(index, source)
+ source:bindValue(value, 'get')
+ elseif source.type == 'name' then
+ source:set('parent', value)
+ source:set('object', object)
+ value:addInfo('get child', source, source[1])
+ value = value:getChild(source[1], source)
+ source:bindValue(value, 'get')
+ elseif source.type == ':' then
+ object = value
+ source:set('parent', value)
+ source:set('object', object)
+ elseif source.type == '.' then
+ source:set('parent', value)
+ end
+ end
+ return value
+end
+
+function mt:isTrue(v)
+ if v:getType() == 'nil' then
+ return false
+ end
+ if v:getType() == 'boolean' and not v:getLiteral() then
+ return false
+ end
+ return true
+end
+
+function mt:getBinary(exp)
+ self:instantSource(exp)
+ local v1 = self:getExp(exp[1])
+ local v2 = self:getExp(exp[2])
+ v1 = self:getFirstInMulti(v1) or valueMgr.create('nil', exp[1])
+ v2 = self:getFirstInMulti(v2) or valueMgr.create('nil', exp[2])
+ local op = exp.op
+ -- TODO 搜索元方法
+ if op == 'or' then
+ if self:isTrue(v1) then
+ return v1
+ else
+ return v2
+ end
+ elseif op == 'and' then
+ if self:isTrue(v1) then
+ return v2
+ else
+ return v1
+ end
+ elseif op == '<='
+ or op == '>='
+ or op == '<'
+ or op == '>'
+ then
+ v1:setType('number', 0.5)
+ v2:setType('number', 0.5)
+ v1:setType('string', 0.1)
+ v2:setType('string', 0.1)
+ return self:createValue('boolean', exp)
+ elseif op == '~='
+ or op == '=='
+ then
+ return self:createValue('boolean', exp)
+ elseif op == '|'
+ or op == '~'
+ or op == '&'
+ or op == '<<'
+ or op == '>>'
+ then
+ v1:setType('integer', 0.5)
+ v2:setType('integer', 0.5)
+ v1:setType('number', 0.5)
+ v2:setType('number', 0.5)
+ v1:setType('string', 0.1)
+ v2:setType('string', 0.1)
+ if math.type(v1:getLiteral()) == 'integer' and math.type(v2:getLiteral()) == 'integer' then
+ if op == '|' then
+ return self:createValue('integer', exp, v1:getLiteral() | v2:getLiteral())
+ elseif op == '~' then
+ return self:createValue('integer', exp, v1:getLiteral() ~ v2:getLiteral())
+ elseif op == '&' then
+ return self:createValue('integer', exp, v1:getLiteral() &v2:getLiteral())
+ elseif op == '<<' then
+ return self:createValue('integer', exp, v1:getLiteral() << v2:getLiteral())
+ elseif op == '>>' then
+ return self:createValue('integer', exp, v1:getLiteral() >> v2:getLiteral())
+ end
+ end
+ return self:createValue('integer', exp)
+ elseif op == '..' then
+ v1:setType('string', 0.5)
+ v2:setType('string', 0.5)
+ v1:setType('number', 0.1)
+ v2:setType('number', 0.1)
+ if type(v1:getLiteral()) == 'string' and type(v2:getLiteral()) == 'string' then
+ return self:createValue('string', exp, v1:getLiteral() .. v2:getLiteral())
+ end
+ return self:createValue('string', exp)
+ elseif op == '+'
+ or op == '-'
+ or op == '*'
+ or op == '/'
+ or op == '^'
+ or op == '%'
+ or op == '//'
+ then
+ v1:setType('number', 0.5)
+ v2:setType('number', 0.5)
+ if type(v1:getLiteral()) == 'number' and type(v2:getLiteral()) == 'number' then
+ if op == '+' then
+ return self:createValue('number', exp, v1:getLiteral() + v2:getLiteral())
+ elseif op == '-' then
+ return self:createValue('number', exp, v1:getLiteral() - v2:getLiteral())
+ elseif op == '*' then
+ return self:createValue('number', exp, v1:getLiteral() * v2:getLiteral())
+ elseif op == '/' then
+ if v2:getLiteral() ~= 0 then
+ return self:createValue('number', exp, v1:getLiteral() / v2:getLiteral())
+ end
+ elseif op == '^' then
+ return self:createValue('number', exp, v1:getLiteral() ^ v2:getLiteral())
+ elseif op == '%' then
+ if v2:getLiteral() ~= 0 then
+ return self:createValue('number', exp, v1:getLiteral() % v2:getLiteral())
+ end
+ elseif op == '//' then
+ if v2:getLiteral() ~= 0 then
+ return self:createValue('number', exp, v1:getLiteral() // v2:getLiteral())
+ end
+ end
+ end
+ return self:createValue('number', exp)
+ end
+ return nil
+end
+
+function mt:getUnary(exp)
+ self:instantSource(exp)
+ local v1 = self:getExp(exp[1])
+ v1 = self:getFirstInMulti(v1) or self:createValue('nil', exp[1])
+ local op = exp.op
+ -- TODO 搜索元方法
+ if op == 'not' then
+ return self:createValue('boolean', exp)
+ elseif op == '#' then
+ v1:setType('table', 0.5)
+ v1:setType('string', 0.5)
+ if type(v1:getLiteral()) == 'string' then
+ return self:createValue('integer', exp, #v1:getLiteral())
+ end
+ return self:createValue('integer', exp)
+ elseif op == '-' then
+ v1:setType('number', 0.5)
+ if type(v1:getLiteral()) == 'number' then
+ return self:createValue('number', exp, -v1:getLiteral())
+ end
+ return self:createValue('number', exp)
+ elseif op == '~' then
+ v1:setType('integer', 0.5)
+ if math.type(v1:getLiteral()) == 'integer' then
+ return self:createValue('integer', exp, ~v1:getLiteral())
+ end
+ return self:createValue('integer', exp)
+ end
+ return nil
+end
+
+function mt:getExp(exp)
+ self:instantSource(exp)
+ local tp = exp.type
+ if tp == 'nil' then
+ return self:createValue('nil', exp)
+ elseif tp == 'string' then
+ return self:createValue('string', exp, exp[1])
+ elseif tp == 'boolean' then
+ return self:createValue('boolean', exp, exp[1])
+ elseif tp == 'number' then
+ return self:createValue('number', exp, exp[1])
+ elseif tp == 'name' then
+ local value = self:getName(exp[1], exp)
+ return value
+ elseif tp == 'simple' then
+ return self:getSimple(exp)
+ elseif tp == 'index' then
+ return self:getIndex(exp)
+ elseif tp == 'binary' then
+ return self:getBinary(exp)
+ elseif tp == 'unary' then
+ return self:getUnary(exp)
+ elseif tp == 'function' then
+ return self:buildFunction(exp)
+ elseif tp == 'table' then
+ return self:buildTable(exp)
+ elseif tp == '...' then
+ return self:loadDots()
+ elseif tp == 'list' then
+ return self:getMultiByList(exp)
+ end
+ error('Unkown exp type: ' .. tostring(tp))
+end
+
+function mt:getMultiByList(list)
+ local multi = createMulti()
+ for i, exp in ipairs(list) do
+ multi:push(self:getExp(exp), i == #list)
+ end
+ return multi
+end
+
+function mt:doDo(action)
+ self:instantSource(action)
+ self:scopePush(action)
+ self:doActions(action)
+ self:scopePop()
+end
+
+function mt:doReturn(action)
+ if #action == 0 then
+ return
+ end
+ self:instantSource(action)
+ local values = self:unpackList(action)
+ local func = self:getCurrentFunction()
+ values:eachValue(function (n, value)
+ value.uri = self:getUri()
+ func:mergeReturn(n, value)
+ local source = action[n] or value:getSource()
+ if not source or source.start == 0 then
+ source = self:getDefaultSource()
+ end
+ value:addInfo('return', source)
+ end)
+end
+
+function mt:doLabel(source)
+ local name = source[1]
+ local label = self:loadLabel(name)
+ if label then
+ self:bindLabel(source, label, 'set')
+ else
+ label = self:createLabel(name, source, 'set')
+ end
+end
+
+function mt:createLabel(name, source, action)
+ local label = self:bindLabel(source)
+ if label then
+ self:saveLabel(label)
+ return label
+ end
+
+ label = createLabel(name, source)
+ self:saveLabel(label)
+ self:bindLabel(source, label, action)
+ return label
+end
+
+function mt:doGoTo(source)
+ local name = source[1]
+ local label = self:loadLabel(name)
+ if label then
+ self:bindLabel(source, label, 'get')
+ else
+ label = self:createLabel(name, source, 'get')
+ end
+end
+
+function mt:setOne(var, value, emmy, comment)
+ if not value then
+ value = valueMgr.create('nil', self:getDefaultSource())
+ end
+ value:setEmmy(emmy)
+ value:setComment(comment)
+ self:instantSource(var)
+ if var.type == 'name' then
+ self:setName(var[1], var, value)
+ elseif var.type == 'simple' then
+ local parent = self:getSimple(var, -2)
+ parent = self:getFirstInMulti(parent)
+ local key = var[#var]
+ self:instantSource(key)
+ key:set('simple', var)
+ if key.type == 'index' then
+ local index = self:getIndex(key)
+ key[1]:set('parent', parent)
+ parent:setChild(index, value, key[1])
+ elseif key.type == 'name' then
+ local index = key[1]
+ key:set('parent', parent)
+ parent:setChild(index, value, key)
+ end
+ key:bindValue(value, 'set')
+ end
+end
+
+function mt:doSet(action)
+ local emmy = self:getEmmy()
+ local comment = self:getEmmyComment()
+ if not action[2] then
+ return
+ end
+ self:instantSource(action)
+ -- 要先计算值
+ local vars = action[1]
+ local exps = action[2]
+ local value = self:getExp(exps)
+ local values = {}
+ if value.type == 'multi' then
+ if not emmy then
+ emmy = value:getEmmy()
+ end
+ value:eachValue(function (i, v)
+ values[i] = v
+ end)
+ else
+ values[1] = value
+ end
+ local i = 0
+ self:forList(vars, function (var)
+ i = i + 1
+ self:setOne(var, values[i], emmy, comment)
+ end)
+end
+
+function mt:doLocal(action)
+ local emmy = self:getEmmy()
+ local comment = self:getEmmyComment()
+ self:instantSource(action)
+ local vars = action[1]
+ local exps = action[2]
+ local values
+ if exps then
+ local value = self:getExp(exps)
+ values = {}
+ if value.type == 'multi' then
+ if not emmy then
+ emmy = value:getEmmy()
+ end
+ value:eachValue(function (i, v)
+ values[i] = v
+ end)
+ else
+ values[1] = value
+ end
+ end
+ local i = 0
+ self:forList(vars, function (key)
+ i = i + 1
+ local value
+ if values then
+ value = values[i]
+ end
+ self:createLocal(key[1], key, value, emmy, comment)
+ end)
+end
+
+function mt:doIf(action)
+ self:instantSource(action)
+ for _, block in ipairs(action) do
+ if block.filter then
+ self:getExp(block.filter)
+ end
+
+ self:scopePush(block)
+ self:doActions(block)
+ self:scopePop()
+ end
+end
+
+function mt:doLoop(action)
+ self:instantSource(action)
+ local min = self:getFirstInMulti(self:getExp(action.min))
+ self:getExp(action.max)
+ if action.step then
+ self:getExp(action.step)
+ end
+
+ self:scopePush(action)
+ self:createLocal(action.arg[1], action.arg, min)
+ self:doActions(action)
+ self:scopePop()
+end
+
+function mt:doIn(action)
+ local emmyParams = self:getEmmyParams()
+ self:instantSource(action)
+ local args = self:unpackList(action.exp)
+
+ self:scopePush(action)
+ local func = table.remove(args, 1) or valueMgr.create('any', self:getDefaultSource())
+ local values = self:call(func, args, action) or createMulti()
+ self:forList(action.arg, function (arg)
+ self:instantSource(arg)
+ local value = table.remove(values, 1) or self:createValue('nil', arg)
+ if emmyParams then
+ for i = #emmyParams, 1, -1 do
+ local emmyParam = emmyParams[i]
+ if emmyParam and emmyParam:getName() == arg[1] then
+ value:setEmmy(emmyParam:bindType())
+ end
+ end
+ end
+ self:createLocal(arg[1], arg, value)
+ end)
+
+ self:doActions(action)
+
+ self:scopePop()
+end
+
+function mt:doWhile(action)
+ self:instantSource(action)
+ self:getExp(action.filter)
+
+ self:scopePush(action)
+ self:doActions(action)
+ self:scopePop()
+end
+
+function mt:doRepeat(action)
+ self:instantSource(action)
+ self:scopePush(action)
+ self:doActions(action)
+ self:getExp(action.filter)
+ self:scopePop()
+end
+
+function mt:doFunction(action)
+ self:instantSource(action)
+ local name = action.name
+ if name then
+ self:instantSource(name)
+ if name.type == 'simple' then
+ local parent = self:getSimple(name, -2)
+ if name[#name-1].type == ':' then
+ local value = self:buildFunction(action)
+ local source = name[#name]
+ self:instantSource(source)
+ source:set('simple', name)
+ source:set('parent', parent)
+ source:set('object', parent)
+ if source.type == 'index' then
+ local index = self:getIndex(source)
+ parent:setChild(index, value, source[1])
+ elseif source.type == 'name' then
+ local index = source[1]
+ parent:setChild(index, value, source)
+ end
+ source:bindValue(value, 'set')
+
+ local func = value:getFunction()
+ if func then
+ if #name == 3 then
+ -- function x:b()
+ local loc = self:loadLocal(name[1][1])
+ if loc then
+ func:setObject(parent, loc:getSource())
+ else
+ func:setObject(parent, name[#name-2])
+ end
+ else
+ func:setObject(parent, name[#name-2])
+ end
+ end
+ else
+ local value = self:buildFunction(action)
+ local source = name[#name]
+ self:instantSource(source)
+ source:set('simple', name)
+ source:set('parent', parent)
+ if source.type == 'index' then
+ local index = self:getIndex(source)
+ parent:setChild(index, value, source[1])
+ elseif source.type == 'name' then
+ local index = source[1]
+ parent:setChild(index, value, source)
+ end
+ source:bindValue(value, 'set')
+ end
+ else
+ local value = self:buildFunction(action)
+ self:setName(name[1], name, value)
+ end
+ else
+ self:buildFunction(action)
+ end
+end
+
+function mt:doLocalFunction(action)
+ self:instantSource(action)
+ local name = action.name
+ if name then
+ self:instantSource(name)
+ if name.type == 'simple' then
+ self:doFunction(action)
+ else
+ local loc = self:createLocal(name[1], name)
+ local func = self:buildFunction(action)
+ func:addInfo('local', name)
+ loc:setValue(func)
+ name:bindValue(func, 'local')
+ end
+ end
+end
+
+function mt:doAction(action)
+ if not action then
+ -- Skip
+ return
+ end
+ if coroutine.isyieldable() then
+ if self.lsp:isNeedCompile(self.uri) then
+ coroutine.yield()
+ if self._removed then
+ coroutine.yield('stop')
+ return
+ end
+ else
+ self:remove()
+ coroutine.yield('stop')
+ return
+ end
+ end
+ local tp = action.type
+ if tp:sub(1, 4) == 'emmy' then
+ self:doEmmy(action)
+ return
+ end
+ if tp == 'do' then
+ self:doDo(action)
+ elseif tp == 'break' then
+ elseif tp == 'return' then
+ self:doReturn(action)
+ elseif tp == 'label' then
+ self:doLabel(action)
+ elseif tp == 'goto' then
+ self:doGoTo(action)
+ elseif tp == 'set' then
+ self:doSet(action)
+ elseif tp == 'local' then
+ self:doLocal(action)
+ elseif tp == 'simple' then
+ -- call
+ self:getSimple(action)
+ action:set('as action', true)
+ elseif tp == 'if' then
+ self:doIf(action)
+ elseif tp == 'loop' then
+ self:doLoop(action)
+ elseif tp == 'in' then
+ self:doIn(action)
+ elseif tp == 'while' then
+ self:doWhile(action)
+ elseif tp == 'repeat' then
+ self:doRepeat(action)
+ elseif tp == 'function' then
+ self:doFunction(action)
+ elseif tp == 'localfunction' then
+ self:doLocalFunction(action)
+ else
+ self:getExp(action)
+ action:set('as action', true)
+ end
+ self:clearEmmy()
+end
+
+function mt:doActions(actions)
+ for _, action in ipairs(actions) do
+ self:doAction(action)
+ end
+end
+
+function mt:createFunction(source)
+ local value = self:createValue('function', source)
+ local func = functionMgr.create(source)
+ func:setEmmy(self:getEmmyParams(), self:getEmmyReturns(), self:getEmmyOverLoads())
+ func:setComment(self:getEmmyComment())
+ value:setFunction(func)
+ value:setType('function', 1.0)
+ if source:getUri() == self.uri then
+ self.funcs[#self.funcs+1] = func
+ end
+ return value
+end
+
+function mt:callLeftFuncions()
+ for _, func in ipairs(self.funcs) do
+ if not func:hasRuned() then
+ self:runFunction(func)
+ end
+ end
+end
+
+function mt:setCurrentFunction(func)
+ self.currentFunction = func
+end
+
+function mt:getCurrentFunction()
+ return self.currentFunction
+end
+
+function mt:saveLocal(name, loc)
+ self.currentFunction:saveLocal(name, loc)
+end
+
+function mt:saveUpvalue(name, loc)
+ self.currentFunction:saveUpvalue(name, loc)
+end
+
+function mt:loadLocal(name)
+ return self.currentFunction:loadLocal(name)
+end
+
+function mt:eachLocal(callback)
+ return self.currentFunction:eachLocal(callback)
+end
+
+function mt:saveLabel(label)
+ self.currentFunction:saveLabel(label)
+end
+
+function mt:loadLabel(name)
+ return self.currentFunction:loadLabel(name)
+end
+
+function mt:loadDots()
+ return self.currentFunction:loadDots()
+end
+
+function mt:getUri()
+ return self.currentFunction and self.currentFunction:getUri() or self.uri
+end
+
+function mt:instantSource(source)
+ if self:isRemoved() then
+ error('dead vm')
+ return nil
+ end
+ if sourceMgr.instant(source) then
+ source:setUri(self:getUri())
+ self.sources[#self.sources+1] = source
+ --CachedSource[source] = true
+ end
+ return source
+end
+
+function mt:bindLocal(source, loc, action)
+ if not source then
+ return
+ end
+ self:instantSource(source)
+ if loc then
+ source:bindLocal(loc, action)
+ else
+ return source:bindLocal()
+ end
+end
+
+function mt:bindLabel(source, label, action)
+ self:instantSource(source)
+ if label then
+ source:bindLabel(label, action)
+ else
+ return source:bindLabel()
+ end
+end
+
+function mt:createLocal(key, source, value, emmy, comment)
+ local loc = self:bindLocal(source)
+ if not value then
+ value = self:createValue('nil', source)
+ end
+ if loc then
+ loc:setValue(value)
+ loc:setEmmy(emmy)
+ self:saveLocal(key, loc)
+ return loc
+ end
+
+ loc = localMgr.create(key, source, value, source.tags)
+ loc:setEmmy(emmy)
+ loc:setComment(comment)
+ self:saveLocal(key, loc)
+ self:bindLocal(source, loc, 'local')
+ loc:close(self:getCurrentFunction():getSource().finish)
+ value:addInfo('local', source)
+ return loc
+end
+
+function mt:createUpvalue(key, source, value)
+ local loc = self:bindLocal(source)
+ if not value then
+ value = self:createValue('nil', source)
+ end
+ if loc then
+ loc:setValue(value)
+ self:saveUpvalue(key, loc)
+ return loc
+ end
+
+ loc = localMgr.create(key, source, value)
+ self:saveUpvalue(key, loc)
+ self:bindLocal(source, loc, 'local')
+ value:addInfo('local', source)
+ return loc
+end
+
+function mt:createEnvironment(ast)
+ -- 整个文件是一个函数
+ self.main = self:createFunction(ast)
+ self:setCurrentFunction(self.main:getFunction())
+ if self.lsp then
+ self.main:getFunction():mergeReturn(1, self.lsp.chain:get(self.uri))
+ end
+ -- 全局变量`_G`
+ local global = buildGlobal(self.lsp)
+ local env
+ if self.envType == '_ENV' then
+ -- 隐藏的上值`_ENV`
+ env = self:createUpvalue('_ENV', self:getDefaultSource(), global)
+ else
+ -- 为了实现方便,fenv也使用隐藏上值来实现
+ -- 使用了非法标识符保证用户无法访问
+ env = self:createUpvalue('@ENV', self:getDefaultSource(), global)
+ end
+ env:set('hide', true)
+ self.env = env
+end
+
+function mt:eachSource(callback)
+ if self._removed then
+ return
+ end
+ local sources = self.sources
+ for i = 1, #sources do
+ local res = callback(sources[i])
+ if res ~= nil then
+ return res
+ end
+ end
+end
+
+function mt:isRemoved()
+ return self._removed == true
+end
+
+function mt:remove()
+ if self._removed then
+ return
+ end
+ self._removed = true
+ for _, source in ipairs(self.sources) do
+ source:kill()
+ end
+ self.sources = nil
+ for _, func in ipairs(self.funcs) do
+ func:kill()
+ end
+ self.funcs = nil
+end
+
+local function compile(vm, ast, lsp, uri)
+ -- 创建初始环境
+ ast.uri = vm.uri
+ -- 根据运行版本决定环境实现方式
+ if config.config.runtime.version == 'Lua 5.1' or config.config.runtime.version == 'LuaJIT' then
+ vm.envType = 'fenv'
+ else
+ vm.envType = '_ENV'
+ end
+ vm:instantSource(ast)
+ vm:createEnvironment(ast)
+
+ -- 检查所有没有调用过的函数,调用一遍
+ vm:callLeftFuncions()
+
+ return vm
+end
+
+return function (ast, lsp, uri, text)
+ if not ast then
+ return nil, 'Ast failed'
+ end
+ local vm = setmetatable({
+ funcs = {},
+ sources = {},
+ main = nil,
+ env = nil,
+ emmy = nil,
+ ---@type emmyMgr
+ emmyMgr = lsp and lsp.emmy or emmyMgr(),
+ lsp = lsp,
+ uri = uri or '',
+ text = text or '',
+ }, mt)
+ local suc, res = xpcall(compile, log.error, vm, ast, lsp, uri)
+ if not suc then
+ vm:remove()
+ return nil, res
+ end
+ return res
+end
diff --git a/script/src/workspace.lua b/script/src/workspace.lua
new file mode 100644
index 00000000..f9b243ad
--- /dev/null
+++ b/script/src/workspace.lua
@@ -0,0 +1,517 @@
+local fs = require 'bee.filesystem'
+local async = require 'async'
+local config = require 'config'
+local ll = require 'lpeglabel'
+local platform = require 'bee.platform'
+local glob = require 'glob'
+local uric = require 'uri'
+
+local TrueName = {}
+
+local function getFileName(path)
+ local name = path:string()
+ if platform.OS == 'Windows' then
+ local lname = name:lower()
+ TrueName[lname] = name
+ return lname
+ else
+ return name
+ end
+end
+
+local function getTrueName(name)
+ return TrueName[name] or name
+end
+
+local function split(str, sep)
+ local t = {}
+ for s in str:gmatch('[^' .. sep .. ']+') do
+ t[#t+1] = s
+ end
+ return t
+end
+
+local function similarity(a, b)
+ local ta = split(a, '/\\')
+ local tb = split(b, '/\\')
+ for i = 1, #ta do
+ if ta[i] ~= tb[i] then
+ return i - 1
+ end
+ end
+ return #ta
+end
+
+local mt = {}
+mt.__index = mt
+
+function mt:fileNameEq(a, b)
+ if platform.OS == 'Windows' then
+ return a:lower() == b:lower()
+ else
+ return a == b
+ end
+end
+
+function mt:listenLoadFile()
+ self._loadFileRequest = async.run('loadfile', nil, function (filename, mode, buf)
+ local path = fs.path(filename)
+ local name = getFileName(path)
+ local uri = uric.encode(path)
+ self.files[name] = uri
+ if mode == 'workspace' then
+ self.lsp:readText(uri, path, buf, self._currentScanCompiled)
+ elseif mode == 'library' then
+ self.lsp:readLibrary(uri, path, buf, self._currentScanCompiled)
+ else
+ error('Unknown mode:' .. tostring(mode))
+ end
+ end)
+end
+
+function mt:buildScanPattern()
+ local pattern = {}
+
+ -- config.workspace.ignoreDir
+ for path in pairs(config.config.workspace.ignoreDir) do
+ pattern[#pattern+1] = path
+ end
+ -- config.files.exclude
+ for path, ignore in pairs(config.other.exclude) do
+ if ignore then
+ pattern[#pattern+1] = path
+ end
+ end
+ -- config.workspace.ignoreSubmodules
+ if config.config.workspace.ignoreSubmodules then
+ local buf = io.load(self.root / '.gitmodules')
+ if buf then
+ for path in buf:gmatch('path = ([^\r\n]+)') do
+ log.info('忽略子模块:', path)
+ pattern[#pattern+1] = path
+ end
+ end
+ end
+ -- config.workspace.useGitIgnore
+ if config.config.workspace.useGitIgnore then
+ local buf = io.load(self.root / '.gitignore')
+ if buf then
+ for line in buf:gmatch '[^\r\n]+' do
+ pattern[#pattern+1] = line
+ end
+ end
+ end
+ -- config.workspace.library
+ for path in pairs(config.config.workspace.library) do
+ pattern[#pattern+1] = path
+ end
+
+ return pattern
+end
+
+---@param options table
+function mt:buildLibraryRequests(options)
+ local requests = {}
+ for path, pattern in pairs(config.config.workspace.library) do
+ requests[#requests+1] = {
+ mode = 'library',
+ root = fs.absolute(fs.path(path)):string(),
+ pattern = pattern,
+ options = options,
+ }
+ end
+ return table.unpack(requests)
+end
+
+function mt:scanFiles()
+ if self._scanRequest then
+ log.info('Break scan.')
+ self._scanRequest:push('stop')
+ self._scanRequest = nil
+ self._complete = false
+ self:reset()
+ end
+
+ local pattern = self:buildScanPattern()
+ local options = {
+ ignoreCase = platform.OS == 'Windows',
+ }
+
+ self.gitignore = glob.gitignore(pattern, options)
+ self._currentScanCompiled = {}
+ local count = 0
+ self._scanRequest = async.run('scanfiles', {
+ {
+ mode = 'workspace',
+ root = self.root:string(),
+ pattern = pattern,
+ options = options,
+ },
+ self:buildLibraryRequests(options),
+ }, function (mode, ...)
+ if mode == 'ok' then
+ log.info('Scan finish, got', count, 'files.')
+ self._complete = true
+ self._scanRequest = nil
+ self:reset()
+ return true
+ elseif mode == 'log' then
+ log.debug(...)
+ elseif mode == 'workspace' then
+ local path = fs.path(...)
+ if not self:isLuaFile(path) then
+ return
+ end
+ self._loadFileRequest:push(path:string(), 'workspace')
+ count = count + 1
+ elseif mode == 'library' then
+ local path = fs.path(...)
+ if not self:isLuaFile(path) then
+ return
+ end
+ self._loadFileRequest:push(path:string(), 'library')
+ count = count + 1
+ elseif mode == 'stop' then
+ log.info('Scan stoped.')
+ return false
+ end
+ end)
+end
+
+function mt:init(rootUri)
+ self.root = uric.decode(rootUri)
+ self.uri = rootUri
+ if not self.root then
+ return
+ end
+ log.info('Workspace inited, root: ', self.root)
+ log.info('Workspace inited, uri: ', rootUri)
+ local logPath = ROOT / 'log' / (rootUri:gsub('[/:]+', '_') .. '.log')
+ log.info('Log path: ', logPath)
+ log.init(ROOT, logPath)
+
+ self:scanFiles()
+end
+
+function mt:isComplete()
+ return self._complete == true
+end
+
+function mt:isLuaFile(path)
+ local ext = path:extension():string()
+ for k, v in pairs(config.other.associations) do
+ if self:fileNameEq(ext, k:match('[^%*]+$')) then
+ if v == 'lua' then
+ return true
+ else
+ return false
+ end
+ end
+ end
+ if self:fileNameEq(ext, '.lua') then
+ return true
+ end
+ return false
+end
+
+function mt:addFile(path)
+ if not self:isLuaFile(path) then
+ return
+ end
+ local name = getFileName(path)
+ local uri = uric.encode(path)
+ self.files[name] = uri
+ self.lsp:readText(uri, path)
+end
+
+function mt:removeFile(path)
+ local name = getFileName(path)
+ if not self.files[name] then
+ return
+ end
+ self.files[name] = nil
+ local uri = uric.encode(path)
+ self.lsp:removeText(uri)
+end
+
+function mt:findPath(baseUri, searchers)
+ local results = {}
+ local basePath = uric.decode(baseUri)
+ if not basePath then
+ return nil
+ end
+ local baseName = getFileName(basePath)
+ for filename, uri in pairs(self.files) do
+ if filename ~= baseName then
+ for _, searcher in ipairs(searchers) do
+ if filename:sub(-#searcher) == searcher then
+ local sep = filename:sub(-#searcher-1, -#searcher-1)
+ if sep == '/' or sep == '\\' then
+ results[#results+1] = uri
+ end
+ end
+ end
+ end
+ end
+
+ if #results == 0 then
+ return nil
+ end
+ local uri
+ if #results == 1 then
+ uri = results[1]
+ else
+ table.sort(results, function (a, b)
+ return similarity(a, baseUri) > similarity(b, baseUri)
+ end)
+ uri = results[1]
+ end
+ return uri
+end
+
+function mt:createCompiler(str)
+ local state = {
+ 'Main',
+ }
+ local function push(c)
+ if state.Main then
+ state.Main = state.Main * c
+ else
+ state.Main = c
+ end
+ end
+ local count = 0
+ local function code()
+ count = count + 1
+ local name = 'C' .. tostring(count)
+ local nextName = 'C' .. tostring(count + 1)
+ state[name] = ll.P(1) * (#ll.V(nextName) + ll.V(name))
+ return ll.V(name)
+ end
+ local function static(c)
+ count = count + 1
+ local name = 'C' .. tostring(count)
+ local nextName = 'C' .. tostring(count + 1)
+ local catch = #ll.V(nextName)
+ if platform.OS == 'Windows' then
+ for i = #c, 1, -1 do
+ local char = c:sub(i, i)
+ local u = char:upper()
+ local l = char:lower()
+ if u == l then
+ catch = ll.P(char) * catch
+ else
+ catch = (ll.P(u) + ll.P(l)) * catch
+ end
+ end
+ else
+ catch = ll.P(c) * catch
+ end
+ state[name] = catch
+ return ll.V(name)
+ end
+ local function eof()
+ count = count + 1
+ local name = 'C' .. tostring(count)
+ state[name] = ll.Cmt(ll.P(1) + ll.Cp(), function (_, _, c)
+ return type(c) == 'number'
+ end)
+ return ll.V(name)
+ end
+ local isFirstCode = true
+ local firstCode
+ local compiler = ll.P {
+ 'Result',
+ Result = (ll.V'Code' + ll.V'Static')^1,
+ Code = ll.P'?' / function ()
+ if isFirstCode then
+ isFirstCode = false
+ push(ll.Cmt(ll.C(code()), function (_, pos, code)
+ firstCode = code
+ return pos, code
+ end))
+ else
+ push(ll.Cmt(
+ ll.C(code()),
+ function (_, _, me)
+ return firstCode == me
+ end
+ ))
+ end
+ end,
+ Static = (1 - ll.P'?')^1 / function (c)
+ push(static(c))
+ end,
+ }
+ compiler:match(str)
+ push(eof())
+ return ll.P(state)
+end
+
+function mt:compileLuaPath()
+ for i, luapath in ipairs(config.config.runtime.path) do
+ self.pathMatcher[i] = self:createCompiler(luapath)
+ end
+end
+
+function mt:convertPathAsRequire(filename, start)
+ local list
+ for _, matcher in ipairs(self.pathMatcher) do
+ local str = matcher:match(filename:sub(start))
+ if str then
+ if not list then
+ list = {}
+ end
+ list[#list+1] = str:gsub('/', '.')
+ end
+ end
+ return list
+end
+
+function mt:matchPath(baseUri, input)
+ local first = input:match '^[^%.]+'
+ if not first then
+ return nil
+ end
+ first = first:gsub('%W', '%%%1')
+ local basePath = uric.decode(baseUri)
+ if not basePath then
+ return nil
+ end
+ local baseName = getFileName(basePath)
+ local rootLen = #self.root:string(basePath)
+ local map = {}
+ for filename in pairs(self.files) do
+ if filename ~= baseName then
+ local trueFilename = getTrueName(filename)
+ local start
+ if platform.OS == 'Windows' then
+ start = filename:find('[/\\]' .. first:lower(), rootLen + 1)
+ else
+ start = trueFilename:find('[/\\]' .. first, rootLen + 1)
+ end
+ if start then
+ local list = self:convertPathAsRequire(trueFilename, start + 1)
+ if list then
+ for _, str in ipairs(list) do
+ if #str >= #input and self:fileNameEq(str:sub(1, #input), input) then
+ if not map[str] then
+ map[str] = trueFilename
+ else
+ local s1 = similarity(trueFilename, baseName)
+ local s2 = similarity(map[str], baseName)
+ if s1 > s2 then
+ map[str] = trueFilename
+ elseif s1 == s2 then
+ if trueFilename < map[str] then
+ map[str] = trueFilename
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ local list = {}
+ for str in pairs(map) do
+ list[#list+1] = str
+ map[str] = map[str]:sub(rootLen + 2)
+ end
+ if #list == 0 then
+ return nil
+ end
+ table.sort(list, function (a, b)
+ local sa = similarity(map[a], baseName)
+ local sb = similarity(map[b], baseName)
+ if sa == sb then
+ return a < b
+ else
+ return sa > sb
+ end
+ end)
+ return list, map
+end
+
+function mt:searchPath(baseUri, str)
+ str = getFileName(fs.path(str))
+ if self.searched[baseUri] and self.searched[baseUri][str] then
+ return self.searched[baseUri][str]
+ end
+ str = str:gsub('%.', '/')
+ local searchers = {}
+ for i, luapath in ipairs(config.config.runtime.path) do
+ searchers[i] = luapath:gsub('%?', str)
+ end
+
+ local uri = self:findPath(baseUri, searchers)
+ if uri then
+ if not self.searched[baseUri] then
+ self.searched[baseUri] = {}
+ end
+ self.searched[baseUri][str] = uri
+ end
+ return uri
+end
+
+function mt:loadPath(baseUri, str)
+ local ok, relative = pcall(fs.relative, fs.absolute(self.root / str), self.root)
+ if not ok then
+ return nil
+ end
+ str = getFileName(relative)
+ if self.loaded[str] then
+ return self.loaded[str]
+ end
+
+ local searchers = { str }
+
+ local uri = self:findPath(baseUri, searchers)
+ if uri then
+ self.loaded[str] = uri
+ end
+ return uri
+end
+
+function mt:reset()
+ self.searched = {}
+ self.loaded = {}
+ self.lsp:reCompile()
+end
+
+---@param uri uri
+---@return path
+function mt:relativePathByUri(uri)
+ local path = uric.decode(uri)
+ if not path then
+ return nil
+ end
+ local relate = fs.relative(path, self.root)
+ return relate
+end
+
+---@param uri uri
+---@return path
+function mt:absolutePathByUri(uri)
+ local path = uric.decode(uri)
+ if not path then
+ return nil
+ end
+ return fs.absolute(path)
+end
+
+return function (lsp, name)
+ local workspace = setmetatable({
+ lsp = lsp,
+ name = name,
+ files = {},
+ searched = {},
+ loaded = {},
+ pathMatcher = {}
+ }, mt)
+ workspace:compileLuaPath()
+ workspace:listenLoadFile()
+ return workspace
+end
diff --git a/script/test.lua b/script/test.lua
new file mode 100644
index 00000000..5e238049
--- /dev/null
+++ b/script/test.lua
@@ -0,0 +1,61 @@
+local currentPath = debug.getinfo(1, 'S').source:sub(2)
+local rootPath = currentPath:gsub('[^/\\]-$', '')
+if rootPath == '' then
+ rootPath = './'
+end
+dofile(rootPath .. 'platform.lua')
+package.path = package.path
+ .. ';' .. rootPath .. 'test/?.lua'
+ .. ';' .. rootPath .. 'test/?/init.lua'
+local fs = require 'bee.filesystem'
+ROOT = fs.absolute(fs.path(rootPath):parent_path())
+LANG = 'en-US'
+
+log = require 'log'
+log.init(ROOT, ROOT / 'log' / 'test.log')
+log.debug('测试开始')
+ac = {}
+
+require 'utility'
+dofile((ROOT / 'build_package.lua'):string())
+
+local function loadAllLibs()
+ assert(require 'bee.filesystem')
+ assert(require 'bee.subprocess')
+ assert(require 'bee.thread')
+ assert(require 'bee.socket')
+ assert(require 'lni')
+ assert(require 'lpeglabel')
+end
+
+local function main()
+ local function test(name)
+ local clock = os.clock()
+ print(('测试[%s]...'):format(name))
+ require(name)
+ print(('测试[%s]用时[%.3f]'):format(name, os.clock() - clock))
+ end
+
+ test 'core'
+ test 'definition'
+ test 'rename'
+ test 'highlight'
+ test 'references'
+ test 'diagnostics'
+ test 'type_inference'
+ test 'find_lib'
+ test 'hover'
+ test 'completion'
+ test 'signature'
+ test 'document_symbol'
+ test 'crossfile'
+ test 'full'
+ test 'other'
+
+ print('测试完成')
+end
+
+loadAllLibs()
+main()
+
+log.debug('测试完成')
diff --git a/script/test/completion/init.lua b/script/test/completion/init.lua
new file mode 100644
index 00000000..76c0d910
--- /dev/null
+++ b/script/test/completion/init.lua
@@ -0,0 +1,1494 @@
+local core = require 'core'
+local parser = require 'parser'
+local buildVM = require 'vm'
+
+local CompletionItemKind = {
+ Text = 1,
+ Method = 2,
+ Function = 3,
+ Constructor = 4,
+ Field = 5,
+ Variable = 6,
+ Class = 7,
+ Interface = 8,
+ Module = 9,
+ Property = 10,
+ Unit = 11,
+ Value = 12,
+ Enum = 13,
+ Keyword = 14,
+ Snippet = 15,
+ Color = 16,
+ File = 17,
+ Reference = 18,
+ Folder = 19,
+ EnumMember = 20,
+ Constant = 21,
+ Struct = 22,
+ Event = 23,
+ Operator = 24,
+ TypeParameter = 25,
+}
+
+local EXISTS = {'EXISTS'}
+
+local function eq(a, b)
+ if a == EXISTS and b ~= nil then
+ return true
+ end
+ local tp1, tp2 = type(a), type(b)
+ if tp1 ~= tp2 then
+ return false
+ end
+ if tp1 == 'table' then
+ local mark = {}
+ for k in pairs(a) do
+ if not eq(a[k], b[k]) then
+ return false
+ end
+ mark[k] = true
+ end
+ for k in pairs(b) do
+ if not mark[k] then
+ return false
+ end
+ end
+ return true
+ end
+ return a == b
+end
+
+rawset(_G, 'TEST', true)
+
+function TEST(script)
+ return function (expect)
+ local pos = script:find('$', 1, true) - 1
+ local new_script = script:gsub('%$', '')
+ local ast = parser:parse(new_script, 'lua', 'Lua 5.4')
+ local vm = buildVM(ast)
+ assert(vm)
+ local result = core.completion(vm, new_script, pos)
+ if expect then
+ assert(result)
+ assert(eq(expect, result))
+ else
+ assert(result == nil)
+ end
+ end
+end
+
+TEST [[
+local zabcde
+za$
+]]
+{
+ {
+ label = 'zabcde',
+ kind = CompletionItemKind.Variable,
+ }
+}
+
+TEST [[
+local zabcdefg
+local zabcde
+zabcde$
+]]
+{
+ {
+ label = 'zabcdefg',
+ kind = CompletionItemKind.Variable,
+ },
+ {
+ label = 'zabcde',
+ kind = CompletionItemKind.Variable,
+ },
+}
+
+TEST [[
+local zabcdefg
+za$
+local zabcde
+]]
+{
+ {
+ label = 'zabcdefg',
+ kind = CompletionItemKind.Variable,
+ },
+ {
+ label = 'zabcde',
+ kind = CompletionItemKind.Text,
+ },
+}
+
+TEST [[
+local zabcde
+zace$
+]]
+{
+ {
+ label = 'zabcde',
+ kind = CompletionItemKind.Variable,
+ }
+}
+
+TEST [[
+ZABC
+local zabc
+zac$
+]]
+{
+ {
+ label = 'zabc',
+ kind = CompletionItemKind.Variable,
+ },
+ {
+ label = 'ZABC',
+ kind = CompletionItemKind.Field,
+ },
+}
+
+TEST [[
+ass$
+]]
+{
+ {
+ label = 'assert',
+ kind = CompletionItemKind.Function,
+ documentation = EXISTS,
+ detail = '(function)',
+ },
+ {
+ label = 'assert()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ insertText = EXISTS,
+ detail = '(function)',
+ },
+}
+
+TEST [[
+local zabc = 1
+z$
+]]
+{
+ {
+ label = 'zabc',
+ kind = CompletionItemKind.Variable,
+ detail = '(number) = 1',
+ }
+}
+
+TEST [[
+local zabc = 1.0
+z$
+]]
+{
+ {
+ label = 'zabc',
+ kind = CompletionItemKind.Variable,
+ detail = '(number) = 1.0',
+ }
+}
+
+TEST [[
+local t = {
+ abc = 1,
+}
+t.a$
+]]
+{
+ {
+ label = 'abc',
+ kind = CompletionItemKind.Enum,
+ detail = '(number) = 1',
+ }
+}
+
+TEST [[
+local mt = {}
+function mt:get(a, b)
+ return 1
+end
+mt:g$
+]]
+{
+ {
+ label = 'get',
+ kind = CompletionItemKind.Method,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'get()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ insertText = EXISTS,
+ detail = EXISTS,
+ },
+}
+
+TEST [[
+loc$
+]]
+{
+ {
+ label = 'collectgarbage',
+ kind = CompletionItemKind.Function,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'collectgarbage()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ detail = EXISTS,
+ insertText = EXISTS,
+ },
+ {
+ label = 'local',
+ kind = CompletionItemKind.Keyword,
+ },
+ {
+ label = 'local function',
+ kind = CompletionItemKind.Snippet,
+ insertText = EXISTS,
+ }
+}
+
+TEST [[
+t.a = {}
+t.b = {}
+t.$
+]]
+{
+ {
+ label = 'a',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ },
+ {
+ label = 'b',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ },
+}
+
+TEST [[
+t.a = {}
+t.b = {}
+t. $
+]]
+{
+ {
+ label = 'a',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ },
+ {
+ label = 'b',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ },
+}
+
+TEST [[
+t.a = {}
+function t:b()
+end
+t:$
+]]
+{
+ {
+ label = 'b',
+ kind = CompletionItemKind.Method,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'b()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ detail = EXISTS,
+ insertText = EXISTS,
+ },
+}
+
+TEST [[
+local t = {
+ a = {},
+}
+t.$
+xxx()
+]]
+{
+ {
+ label = 'a',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ },
+ {
+ label = 'xxx',
+ kind = CompletionItemKind.Function,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'xxx()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ detail = EXISTS,
+ insertText = EXISTS,
+ },
+}
+
+TEST [[
+(''):$
+]]
+(EXISTS)
+
+TEST 'local s = "a:$"' (nil)
+
+TEST 'debug.$'
+(EXISTS)
+
+TEST [[
+local xxxx = {
+ xxyy = 1,
+ xxzz = 2,
+}
+
+local t = {
+ x$
+}
+]]
+{
+ {
+ label = 'xxxx',
+ kind = CompletionItemKind.Variable,
+ detail = EXISTS,
+ },
+ {
+ label = 'xxyy',
+ kind = CompletionItemKind.Property,
+ },
+ {
+ label = 'xxzz',
+ kind = CompletionItemKind.Property,
+ },
+ {
+ label = 'next',
+ kind = CompletionItemKind.Function,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'next()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ detail = EXISTS,
+ insertText = EXISTS,
+ },
+ {
+ label = 'xpcall',
+ kind = CompletionItemKind.Function,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'xpcall()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ detail = EXISTS,
+ insertText = EXISTS,
+ },
+}
+
+TEST [[
+print(ff2)
+local faa
+local f$
+print(fff)
+]]
+{
+ {
+ label = 'fff',
+ kind = CompletionItemKind.Variable,
+ },
+ {
+ label = 'function',
+ kind = CompletionItemKind.Keyword,
+ },
+ {
+ label = 'function ()',
+ kind = CompletionItemKind.Snippet,
+ insertText = EXISTS,
+ },
+ {
+ label = 'ff2',
+ kind = CompletionItemKind.Text,
+ },
+ {
+ label = 'faa',
+ kind = CompletionItemKind.Text,
+ },
+}
+
+TEST [[
+local function f(ff$)
+ print(fff)
+end
+]]
+{
+ {
+ label = 'fff',
+ kind = CompletionItemKind.Variable,
+ },
+}
+
+TEST [[
+collectgarbage('$')
+]]
+{
+ {
+ label = 'collect',
+ filterText = 'collect',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'stop',
+ filterText = 'stop',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'restart',
+ filterText = 'restart',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'count',
+ filterText = 'count',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'step',
+ filterText = 'step',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'setpause',
+ filterText = 'setpause',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'setstepmul',
+ filterText = 'setstepmul',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'isrunning',
+ filterText = 'isrunning',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+}
+
+TEST [[
+collectgarbage($)
+]]
+(EXISTS)
+
+TEST [[
+io.read($)
+]]
+{
+ {
+ label = '"n"',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ },
+ {
+ label = '"a"',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ },
+ {
+ label = '"l"',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ },
+ {
+ label = '"L"',
+ kind = CompletionItemKind.EnumMember,
+ documentation = EXISTS,
+ },
+}
+
+TEST [[
+local function f(a, $)
+end
+]]
+(nil)
+
+TEST [[
+self.results.list[#$]
+]]
+{
+ {
+ label = 'self.results.list+1',
+ kind = CompletionItemKind.Snippet,
+ textEdit = {
+ start = 20,
+ finish = 20,
+ newText = 'self.results.list+1] = ',
+ },
+ },
+}
+
+TEST [[
+self.results.list[#self.re$]
+]]
+{
+ {
+ label = 'self.results.list+1',
+ kind = CompletionItemKind.Snippet,
+ textEdit = {
+ start = 20,
+ finish = 27,
+ newText = 'self.results.list+1] = ',
+ },
+ },
+ {
+ label = 'results',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ },
+}
+
+TEST [[
+fff[#ff$]
+]]
+{
+ {
+ label = 'fff+1',
+ kind = CompletionItemKind.Snippet,
+ textEdit = {
+ start = 6,
+ finish = 8,
+ newText = 'fff+1] = ',
+ },
+ },
+ {
+ label = 'fff',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ }
+}
+
+TEST [[
+local _ = fff.kkk[#$]
+]]
+{
+ {
+ label = 'fff.kkk',
+ kind = CompletionItemKind.Snippet,
+ textEdit = {
+ start = 20,
+ finish = 20,
+ newText = 'fff.kkk]',
+ },
+ },
+}
+
+TEST [[
+local t = {
+ a = 1,
+}
+
+t . $
+]]
+(EXISTS)
+
+TEST [[
+local t = {
+ a = 1,
+}
+
+t . $ b
+]]
+(EXISTS)
+
+TEST [[
+local t = {
+ a = 1,
+}
+
+t $
+]]
+(nil)
+
+TEST [[
+local t = {
+ a = 1,
+}
+
+t $.
+]]
+(nil)
+
+TEST [[
+local xxxx
+xxxx$
+]]
+{
+ {
+ label = 'xxxx',
+ kind = CompletionItemKind.Variable,
+ },
+}
+
+TEST [[
+local xxxx
+local XXXX
+xxxx$
+]]
+{
+ {
+ label = 'xxxx',
+ kind = CompletionItemKind.Variable,
+ },
+ {
+ label = 'XXXX',
+ kind = CompletionItemKind.Variable,
+ },
+}
+
+TEST [[
+local t = {
+ xxxxx = 1,
+}
+xx$
+]]
+{
+ {
+ label = 'xxxxx',
+ kind = CompletionItemKind.Text,
+ },
+}
+
+TEST [[
+local index
+tbl[ind$]
+]]
+{
+ {
+ label = 'index',
+ kind = CompletionItemKind.Variable,
+ },
+}
+
+TEST [[
+return function ()
+ local t = {
+ a = {},
+ b = {},
+ }
+ t.$
+end
+]]
+{
+ {
+ label = 'a',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ },
+ {
+ label = 'b',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ },
+}
+
+TEST [[
+local ast = 1
+local t = 'as$'
+local ask = 1
+]]
+(nil)
+
+TEST [[
+local add
+
+function f(a$)
+ local _ = add
+end
+]]
+{
+ {
+ label = 'add',
+ kind = CompletionItemKind.Variable,
+ },
+}
+
+TEST [[
+function table.i$
+]]
+(EXISTS)
+
+TEST [[
+do
+ xx.$
+end
+]]
+(nil)
+
+require 'config' .config.runtime.version = 'Lua 5.4'
+--TEST [[
+--local $
+--]]
+--{
+-- {
+-- label = '<toclose>',
+-- kind = CompletionItemKind.Keyword,
+-- },
+-- {
+-- label = '<const>',
+-- kind = CompletionItemKind.Keyword,
+-- },
+--}
+--
+--TEST [[
+--local <toc$
+--]]
+--{
+-- {
+-- label = '<toclose>',
+-- kind = CompletionItemKind.Keyword,
+-- }
+--}
+
+TEST [[
+local mt = {}
+mt.__index = mt
+local t = setmetatable({}, mt)
+
+t.$
+]]
+{
+ {
+ label = '__index',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ }
+}
+
+TEST [[
+local elseaaa
+ELSE = 1
+if a then
+else$
+]]
+{
+ {
+ label = 'elseaaa',
+ kind = CompletionItemKind.Variable,
+ },
+ {
+ label = 'ELSE',
+ kind = CompletionItemKind.Enum,
+ detail = EXISTS,
+ },
+ {
+ label = 'select',
+ kind = CompletionItemKind.Function,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'select()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ detail = EXISTS,
+ insertText = EXISTS,
+ },
+ {
+ label = 'setmetatable',
+ kind = CompletionItemKind.Function,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'setmetatable()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ detail = EXISTS,
+ insertText = EXISTS,
+ },
+ {
+ label = 'else',
+ kind = CompletionItemKind.Keyword,
+ },
+ {
+ label = 'elseif',
+ kind = CompletionItemKind.Keyword,
+ },
+ {
+ label = 'elseif .. then',
+ kind = CompletionItemKind.Snippet,
+ insertText = EXISTS,
+ }
+}
+
+TEST [[
+local xpcal
+xpcal$
+]]
+{
+ {
+ label = 'xpcal',
+ kind = CompletionItemKind.Variable,
+ },
+ {
+ label = 'xpcall',
+ kind = CompletionItemKind.Function,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'xpcall()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ detail = EXISTS,
+ insertText = EXISTS,
+ },
+}
+
+TEST [[
+function mt:f(a, b, c)
+end
+
+mt:f$
+]]
+{
+ {
+ label = 'f',
+ kind = CompletionItemKind.Method,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'f()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ detail = EXISTS,
+ insertText = 'f(${1:a: any}, ${2:b: any}, ${3:c: any})',
+ },
+}
+
+TEST [[
+---@$
+]]
+(EXISTS)
+
+TEST [[
+---@cl$
+]]
+{
+ {
+ label = 'class',
+ kind = CompletionItemKind.Keyword
+ }
+}
+
+TEST [[
+---@class ZABC
+---@class ZBBC : Z$
+]]
+{
+ {
+ label = 'ZABC',
+ kind = CompletionItemKind.Class,
+ },
+ {
+ label = 'ZBBC',
+ kind = CompletionItemKind.Class,
+ },
+}
+
+TEST [[
+---@class zabc
+local abcd
+---@type za$
+]]
+{
+ {
+ label = 'zabc',
+ kind = CompletionItemKind.Class,
+ },
+}
+
+TEST [[
+---@class abc
+local abcd
+---@type $
+]]
+(EXISTS)
+
+TEST [[
+---@class zabc
+local abcd
+---@type zxxx|z$
+]]
+{
+ {
+ label = 'zabc',
+ kind = CompletionItemKind.Class,
+ }
+}
+
+TEST [[
+---@alias zabc zabb
+---@type za$
+]]
+{
+ {
+ label = 'zabc',
+ kind = CompletionItemKind.Class,
+ },
+}
+
+TEST [[
+---@class Class
+---@param x C$
+]]
+{
+ {
+ label = 'Class',
+ kind = CompletionItemKind.Class,
+ },
+ {
+ label = 'function',
+ kind = CompletionItemKind.Class,
+ },
+}
+
+TEST [[
+---@param $
+function f(a, b, c)
+end
+]]
+{
+ {
+ label = 'a, b, c',
+ kind = CompletionItemKind.Snippet,
+ insertText = [[
+a any
+---@param b any
+---@param c any]]
+ },
+ {
+ label = 'a',
+ kind = CompletionItemKind.Interface,
+ },
+ {
+ label = 'b',
+ kind = CompletionItemKind.Interface,
+ },
+ {
+ label = 'c',
+ kind = CompletionItemKind.Interface,
+ },
+}
+
+TEST [[
+local function f()
+ ---@param $
+ function f(a, b, c)
+ end
+end
+]]
+{
+ {
+ label = 'a, b, c',
+ kind = CompletionItemKind.Snippet,
+ insertText = [[
+a any
+---@param b any
+---@param c any]]
+ },
+ {
+ label = 'a',
+ kind = CompletionItemKind.Interface,
+ },
+ {
+ label = 'b',
+ kind = CompletionItemKind.Interface,
+ },
+ {
+ label = 'c',
+ kind = CompletionItemKind.Interface,
+ },
+}
+
+TEST [[
+---@param $
+function mt:f(a, b, c)
+end
+]]
+{
+ {
+ label = 'a, b, c',
+ kind = CompletionItemKind.Snippet,
+ insertText = [[
+a any
+---@param b any
+---@param c any]]
+ },
+ {
+ label = 'a',
+ kind = CompletionItemKind.Interface,
+ },
+ {
+ label = 'b',
+ kind = CompletionItemKind.Interface,
+ },
+ {
+ label = 'c',
+ kind = CompletionItemKind.Interface,
+ },
+}
+
+TEST [[
+---@param xyz Class
+---@param xxx Class
+function f(x$)
+]]
+{
+ {
+ label = 'xyz, xxx',
+ kind = CompletionItemKind.Snippet,
+ },
+ {
+ label = 'xyz',
+ kind = CompletionItemKind.Interface,
+ },
+ {
+ label = 'xxx',
+ kind = CompletionItemKind.Interface,
+ },
+}
+
+TEST [[
+---@param xyz Class
+---@param xxx Class
+function f($
+]]
+{
+ {
+ label = 'xyz, xxx',
+ kind = CompletionItemKind.Snippet,
+ },
+ {
+ label = 'xyz',
+ kind = CompletionItemKind.Interface,
+ },
+ {
+ label = 'xxx',
+ kind = CompletionItemKind.Interface,
+ },
+}
+
+TEST [[
+---@param xyz Class
+---@param xxx Class
+function f($)
+]]
+{
+ {
+ label = 'xyz, xxx',
+ kind = CompletionItemKind.Snippet,
+ },
+ {
+ label = 'xyz',
+ kind = CompletionItemKind.Interface,
+ },
+ {
+ label = 'xxx',
+ kind = CompletionItemKind.Interface,
+ },
+}
+
+TEST [[
+local function f()
+ ---@t$
+end
+]]
+{
+ {
+ label = 'type',
+ kind = CompletionItemKind.Keyword,
+ },
+ {
+ label = 'return',
+ kind = CompletionItemKind.Keyword,
+ }
+}
+
+TEST [[
+---@class Class
+---@field name string
+---@field id integer
+local mt = {}
+mt.$
+]]
+{
+ {
+ label = 'id',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ },
+ {
+ label = 'name',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ },
+}
+
+TEST [[
+local function f()
+ if a then
+ else$
+end
+]]
+{
+ {
+ label = 'select',
+ kind = CompletionItemKind.Function,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'select()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ detail = EXISTS,
+ insertText = EXISTS,
+ },
+ {
+ label = 'setmetatable',
+ kind = CompletionItemKind.Function,
+ documentation = EXISTS,
+ detail = EXISTS,
+ },
+ {
+ label = 'setmetatable()',
+ kind = CompletionItemKind.Snippet,
+ documentation = EXISTS,
+ detail = EXISTS,
+ insertText = EXISTS,
+ },
+ {
+ label = 'else',
+ kind = CompletionItemKind.Keyword,
+ },
+ {
+ label = 'elseif',
+ kind = CompletionItemKind.Keyword,
+ },
+ {
+ label = 'elseif .. then',
+ kind = CompletionItemKind.Snippet,
+ insertText = EXISTS,
+ },
+}
+
+TEST [[
+---@param x string | "'AAA'" | "'BBB'" | "'CCC'"
+function f(y, x)
+end
+
+f(1, $)
+]]
+{
+ {
+ label = "'AAA'",
+ kind = CompletionItemKind.EnumMember,
+ },
+ {
+ label = "'BBB'",
+ kind = CompletionItemKind.EnumMember,
+ },
+ {
+ label = "'CCC'",
+ kind = CompletionItemKind.EnumMember,
+ }
+}
+
+TEST [[
+---@param x string | "'AAA'" | "'BBB'" | "'CCC'"
+function f(y, x)
+end
+
+f(1,$)
+]]
+{
+ {
+ label = "'AAA'",
+ kind = CompletionItemKind.EnumMember,
+ },
+ {
+ label = "'BBB'",
+ kind = CompletionItemKind.EnumMember,
+ },
+ {
+ label = "'CCC'",
+ kind = CompletionItemKind.EnumMember,
+ }
+}
+
+TEST [[
+---@param x string | "'AAA'" | "'BBB'" | "'CCC'"
+function f(x)
+end
+
+f($)
+]]
+{
+ {
+ label = "'AAA'",
+ kind = CompletionItemKind.EnumMember,
+ },
+ {
+ label = "'BBB'",
+ kind = CompletionItemKind.EnumMember,
+ },
+ {
+ label = "'CCC'",
+ kind = CompletionItemKind.EnumMember,
+ }
+}
+
+TEST [[
+---@alias Option string | "'AAA'" | "'BBB'" | "'CCC'"
+---@param x Option
+function f(x)
+end
+
+f($)
+]]
+{
+ {
+ label = "'AAA'",
+ kind = CompletionItemKind.EnumMember,
+ },
+ {
+ label = "'BBB'",
+ kind = CompletionItemKind.EnumMember,
+ },
+ {
+ label = "'CCC'",
+ kind = CompletionItemKind.EnumMember,
+ }
+}
+
+TEST [[
+---@param x string | "'AAA'" | "'BBB'" | "'CCC'"
+function f(x)
+end
+
+f('$')
+]]
+{
+ {
+ label = "AAA",
+ filterText = 'AAA',
+ kind = CompletionItemKind.EnumMember,
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = "BBB",
+ filterText = 'BBB',
+ kind = CompletionItemKind.EnumMember,
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = "CCC",
+ filterText = 'CCC',
+ kind = CompletionItemKind.EnumMember,
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ }
+}
+
+TEST [[
+---@param x function | 'function () end'
+function f(x)
+end
+
+f(function ()
+ $
+end)
+]]
+(nil)
+
+TEST [[
+local t = {
+ ['a.b.c'] = {}
+}
+
+t.$
+]]
+{
+ {
+ label = 'a.b.c',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ textEdit = {
+ start = 37,
+ finish = 36,
+ newText = '["a.b.c"]',
+ },
+ additionalTextEdits = {
+ {
+ start = 36,
+ finish = 36,
+ newText = '',
+ }
+ }
+ }
+}
+
+TEST [[
+_ENV['z.b.c'] = {}
+
+z$
+]]
+{
+ {
+ label = 'z.b.c',
+ kind = CompletionItemKind.Field,
+ detail = EXISTS,
+ textEdit = {
+ start = 22,
+ finish = 21,
+ newText = '_ENV["z.b.c"]',
+ },
+ additionalTextEdits = {
+ {
+ start = 21,
+ finish = 21,
+ newText = '',
+ }
+ }
+ }
+}
+
+TEST [[
+io.close(1, $)
+]]
+(nil)
+
+TEST [[
+--- JustTest
+---@overload fun(list:table):string
+---@overload fun(list:table, sep:string):string
+---@overload fun(list:table, sep:string, i:number):string
+---@param list table
+---@param sep string
+---@param i number
+---@param j number
+---@return string
+local function zzzzz(list, sep, i, j) end
+
+zzz$
+]]
+{
+ {
+ label = 'zzzzz',
+ kind = CompletionItemKind.Function,
+ detail = '(function)(4 prototypes)',
+ documentation = {
+ kind = 'markdown',
+ value = [[
+```lua
+function zzzzz(list: table, sep: string, i: number, j: number)
+ -> string
+```
+JustTest
+```lua
+
+```
+
+]]
+ },
+ },
+ {
+ label = 'zzzzz()',
+ kind = CompletionItemKind.Snippet,
+ detail = '(function)(4 prototypes)',
+ insertText = EXISTS,
+ documentation = EXISTS,
+ }
+}
+
+TEST [[
+--- abc
+zzz = 1
+zz$
+]]
+{
+ {
+ label = 'zzz',
+ kind = CompletionItemKind.Enum,
+ detail = '(number) = 1',
+ documentation = {
+ kind = 'markdown',
+ value = 'abc',
+ }
+ }
+}
+
+TEST [[
+---@param x string
+---| "'选项1'" # 注释1
+---| "'选项2'" # 注释2
+function f(x) end
+
+f($)
+]]
+{
+ {
+ label = "'选项1'",
+ kind = CompletionItemKind.EnumMember,
+ documentation = '注释1',
+ },
+ {
+ label = "'选项2'",
+ kind = CompletionItemKind.EnumMember,
+ documentation = '注释2',
+ },
+}
diff --git a/script/test/crossfile/completion.lua b/script/test/crossfile/completion.lua
new file mode 100644
index 00000000..cb9f2f65
--- /dev/null
+++ b/script/test/crossfile/completion.lua
@@ -0,0 +1,621 @@
+local service = require 'service'
+local workspace = require 'workspace'
+local fs = require 'bee.filesystem'
+local core = require 'core'
+local uric = require 'uri'
+
+rawset(_G, 'TEST', true)
+
+local CompletionItemKind = {
+ Text = 1,
+ Method = 2,
+ Function = 3,
+ Constructor = 4,
+ Field = 5,
+ Variable = 6,
+ Class = 7,
+ Interface = 8,
+ Module = 9,
+ Property = 10,
+ Unit = 11,
+ Value = 12,
+ Enum = 13,
+ Keyword = 14,
+ Snippet = 15,
+ Color = 16,
+ File = 17,
+ Reference = 18,
+ Folder = 19,
+ EnumMember = 20,
+ Constant = 21,
+ Struct = 22,
+ Event = 23,
+ Operator = 24,
+ TypeParameter = 25,
+}
+
+local EXISTS = {}
+
+local function eq(a, b)
+ if a == EXISTS and b ~= nil then
+ return true
+ end
+ local tp1, tp2 = type(a), type(b)
+ if tp1 ~= tp2 then
+ return false
+ end
+ if tp1 == 'table' then
+ local mark = {}
+ for k in pairs(a) do
+ if not eq(a[k], b[k]) then
+ return false
+ end
+ mark[k] = true
+ end
+ for k in pairs(b) do
+ if not mark[k] then
+ return false
+ end
+ end
+ return true
+ end
+ return a == b
+end
+
+function TEST(data)
+ local lsp = service()
+ local ws = workspace(lsp, 'test')
+ lsp.workspace = ws
+ ws.root = ROOT
+
+ local mainUri
+ local mainBuf
+ local pos
+ for _, info in ipairs(data) do
+ local uri = uric.encode(fs.path(info.path))
+ local script = info.content
+ if info.main then
+ pos = script:find('$', 1, true) - 1
+ script = script:gsub('%$', '')
+ mainUri = uri
+ mainBuf = script
+ end
+ lsp:saveText(uri, 1, script)
+ ws:addFile(uric.decode(uri))
+
+ while lsp._needCompile[1] do
+ lsp:compileVM(lsp._needCompile[1])
+ end
+ end
+
+ local vm = lsp:loadVM(mainUri)
+ assert(vm)
+ local result = core.completion(vm, mainBuf, pos)
+ local expect = data.completion
+ if expect then
+ assert(result)
+ assert(eq(expect, result))
+ else
+ assert(result == nil)
+ end
+end
+
+if require'bee.platform'.OS == 'Windows' then
+
+TEST {
+ {
+ path = 'abc.lua',
+ content = '',
+ },
+ {
+ path = 'abc/aaa.lua',
+ content = '',
+ },
+ {
+ path = 'xxx/abcde.lua',
+ content = '',
+ },
+ {
+ path = 'test.lua',
+ content = 'require "a$"',
+ main = true,
+ },
+ completion = {
+ {
+ label = 'abc',
+ filterText = 'abc',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'abc.aaa',
+ filterText = 'abc.aaa',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc/aaa.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'abcde',
+ filterText = 'abcde',
+ kind = CompletionItemKind.Reference,
+ documentation = 'xxx/abcde.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+TEST {
+ {
+ path = 'abc.lua',
+ content = '',
+ },
+ {
+ path = 'test.lua',
+ content = 'require "A$"',
+ main = true,
+ },
+ completion = {
+ {
+ label = 'abc',
+ filterText = 'abc',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+TEST {
+ {
+ path = 'abc.lua',
+ content = '',
+ },
+ {
+ path = 'ABCD.lua',
+ content = '',
+ },
+ {
+ path = 'test.lua',
+ content = 'require "a$"',
+ main = true,
+ },
+ completion = {
+ {
+ label = 'ABCD',
+ filterText = 'ABCD',
+ kind = CompletionItemKind.Reference,
+ documentation = 'ABCD.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'abc',
+ filterText = 'abc',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+else
+
+TEST {
+ {
+ path = 'abc.lua',
+ content = '',
+ },
+ {
+ path = 'ABCD.lua',
+ content = '',
+ },
+ {
+ path = 'test.lua',
+ content = 'require "a$"',
+ main = true,
+ },
+ completion = {
+ {
+ label = 'abc',
+ filterText = 'abc',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+end
+
+TEST {
+ {
+ path = 'abc.lua',
+ content = '',
+ },
+ {
+ path = 'abc/init.lua',
+ content = '',
+ },
+ {
+ path = 'test.lua',
+ content = 'require "abc$"',
+ main = true,
+ },
+ completion = {
+ {
+ label = 'abc',
+ filterText = 'abc',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'abc.init',
+ filterText = 'abc.init',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc/init.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+TEST {
+ {
+ path = 'abc/init.lua',
+ content = '',
+ },
+ {
+ path = 'abc/bbc.lua',
+ content = '',
+ },
+ {
+ path = 'test.lua',
+ content = 'require "abc$"',
+ main = true,
+ },
+ completion = {
+ {
+ label = 'abc',
+ filterText = 'abc',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc/init.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'abc.bbc',
+ filterText = 'abc.bbc',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc/bbc.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'abc.init',
+ filterText = 'abc.init',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc/init.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+TEST {
+ {
+ path = 'abc.lua',
+ content = '',
+ },
+ {
+ path = 'abc/init.lua',
+ content = '',
+ },
+ {
+ path = 'test.lua',
+ content = 'require "abc.$"',
+ main = true,
+ },
+ completion = {
+ {
+ label = 'abc.init',
+ filterText = 'abc.init',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc/init.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+TEST {
+ {
+ path = 'abc.lua',
+ content = '',
+ },
+ {
+ path = 'abc/init.lua',
+ content = '',
+ },
+ {
+ path = 'test.lua',
+ content = 'require "abc.i$"',
+ main = true,
+ },
+ completion = {
+ {
+ label = 'abc.init',
+ filterText = 'abc.init',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc/init.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+TEST {
+ {
+ path = 'core/core.lua',
+ content = '',
+ },
+ {
+ path = 'core/xxx.lua',
+ content = '',
+ },
+ {
+ path = 'test.lua',
+ content = 'require "core.co$"',
+ main = true,
+ },
+ completion = {
+ {
+ label = 'core.core',
+ filterText = 'core.core',
+ kind = CompletionItemKind.Reference,
+ documentation = 'core/core.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+TEST {
+ {
+ path = 'x000.lua',
+ content = '',
+ },
+ {
+ path = 'abc/x111.lua',
+ content = '',
+ },
+ {
+ path = 'abc/test.lua',
+ content = 'require "x$"',
+ main = true,
+ },
+ completion = {
+ {
+ label = 'x000',
+ filterText = 'x000',
+ kind = CompletionItemKind.Reference,
+ documentation = 'x000.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ {
+ label = 'x111',
+ filterText = 'x111',
+ kind = CompletionItemKind.Reference,
+ documentation = 'abc/x111.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ return {
+ a = 1,
+ b = 2,
+ c = 3,
+ }
+ ]]
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local t = require 'a'
+ t.$
+ ]],
+ main = true,
+ },
+ completion = {
+ {
+ label = 'a',
+ kind = CompletionItemKind.Enum,
+ detail = '(number) = 1',
+ },
+ {
+ label = 'b',
+ kind = CompletionItemKind.Enum,
+ detail = '(number) = 2',
+ },
+ {
+ label = 'c',
+ kind = CompletionItemKind.Enum,
+ detail = '(number) = 3',
+ },
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ zabc = 1
+ ]]
+ },
+ {
+ path = 'a.lua',
+ content = [[
+ zabcd = print
+ ]]
+ },
+ {
+ path = 'a.lua',
+ content = [[
+ zabcdef = 1
+ ]]
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ zab$
+ ]],
+ main = true,
+ },
+ completion = {
+ {
+ label = 'zabcdef',
+ kind = CompletionItemKind.Enum,
+ detail = '(number) = 1',
+ },
+ }
+}
+
+TEST {
+ {
+ path = 'init.lua',
+ content = [[
+ setmetatable(_G, {__index = {}})
+ ]]
+ },
+ {
+ path = 'a.lua',
+ content = [[
+ print(zabc)
+ ]]
+ },
+ {
+ path = 'a.lua',
+ content = [[
+ zabcdef = 1
+ ]]
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ zab$
+ ]],
+ main = true,
+ },
+ completion = {
+ {
+ label = 'zabcdef',
+ kind = CompletionItemKind.Enum,
+ detail = '(number) = 1',
+ },
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ local japi = require 'jass.japi'
+ japi.xxxaaaaxxxx
+ ]]
+ },
+ {
+ path = 'a.lua',
+ content = [[
+ local japi = require 'jass.japi'
+ japi.xxxaaaax$
+ ]],
+ main = true,
+ },
+}
+
+TEST {
+ {
+ path = 'xxx.lua',
+ content = ''
+ },
+ {
+ path = 'xxxx.lua',
+ content = [[
+ require 'xx$'
+ ]],
+ main = true,
+ },
+ completion = {
+ {
+ label = 'xxx',
+ filterText = 'xxx',
+ kind = CompletionItemKind.Reference,
+ documentation = 'xxx.lua',
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+TEST {
+ {
+ path = [[xx'xx.lua]],
+ content = ''
+ },
+ {
+ path = 'main.lua',
+ content = [[
+ require 'xx$'
+ ]],
+ main = true,
+ },
+ completion = {
+ {
+ label = [[xx'xx]],
+ filterText = [[xx'xx]],
+ kind = CompletionItemKind.Reference,
+ documentation = [[xx'xx.lua]],
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
+
+TEST {
+ {
+ path = [[xx]=]xx.lua]],
+ content = ''
+ },
+ {
+ path = 'main.lua',
+ content = [[
+ require [=[xx$]=]'
+ ]],
+ main = true,
+ },
+ completion = {
+ {
+ label = [[xx]=]xx]],
+ filterText = [[xx]=]xx]],
+ kind = CompletionItemKind.Reference,
+ documentation = [[xx]=]xx.lua]],
+ textEdit = EXISTS,
+ additionalTextEdits = EXISTS,
+ },
+ }
+}
diff --git a/script/test/crossfile/definition.lua b/script/test/crossfile/definition.lua
new file mode 100644
index 00000000..c765d98a
--- /dev/null
+++ b/script/test/crossfile/definition.lua
@@ -0,0 +1,422 @@
+local service = require 'service'
+local workspace = require 'workspace'
+local fs = require 'bee.filesystem'
+local core = require 'core'
+local uric = require 'uri'
+
+rawset(_G, 'TEST', true)
+
+local function catch_target(script, sep)
+ local list = {}
+ local cur = 1
+ local cut = 0
+ while true do
+ local start, finish = script:find(('<%%%s.-%%%s>'):format(sep, sep), cur)
+ if not start then
+ break
+ end
+ list[#list+1] = { start - cut, finish - 4 - cut }
+ cur = finish + 1
+ cut = cut + 4
+ end
+ local new_script = script:gsub(('<%%%s(.-)%%%s>'):format(sep, sep), '%1')
+ return new_script, list
+end
+
+local function founded(targets, results)
+ if #targets ~= #results then
+ return false
+ end
+ for _, target in ipairs(targets) do
+ for _, result in ipairs(results) do
+ if target[1] == result[1]
+ and target[2] == result[2]
+ and target[3] == result[3]
+ then
+ goto NEXT
+ end
+ end
+ do return false end
+ ::NEXT::
+ end
+ return true
+end
+
+function TEST(datas)
+ local lsp = service()
+ local ws = workspace(lsp, 'test')
+ lsp.workspace = ws
+
+ local compiled = {}
+ local targetList = {}
+ local sourceList, sourceUri
+
+ for i, data in ipairs(datas) do
+ local uri = uric.encode(fs.path(data.path))
+ local new, list = catch_target(data.content, '!')
+ if new ~= data.content or data.target then
+ if data.target then
+ targetList[#targetList+1] = {
+ data.target[1],
+ data.target[2],
+ uri
+ }
+ else
+ for _, position in ipairs(list) do
+ targetList[#targetList+1] = {
+ position[1],
+ position[2],
+ uri
+ }
+ end
+ end
+ data.content = new
+ end
+ new, list = catch_target(data.content, '?')
+ if new ~= data.content then
+ compiled[i] = new
+ sourceList = list
+ sourceUri = uri
+ data.content = new
+ end
+ lsp:saveText(uri, 1, data.content)
+ ws:addFile(uric.decode(uri))
+ end
+
+ while lsp._needCompile[1] do
+ lsp:compileVM(lsp._needCompile[1])
+ end
+
+ local sourceVM = lsp:getVM(sourceUri)
+ assert(sourceVM)
+ local sourcePos = (sourceList[1][1] + sourceList[1][2]) // 2
+ local positions = core.definition(sourceVM, sourcePos, 'definition')
+ if positions then
+ assert(founded(targetList, positions))
+ else
+ assert(#targetList == 0)
+ end
+end
+
+TEST {
+ {
+ path = 'a.lua',
+ content = '',
+ target = {0, 0},
+ },
+ {
+ path = 'b.lua',
+ content = 'require <?"a"?>',
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = 'local <!t!> = 1; return t',
+ },
+ {
+ path = 'b.lua',
+ content = 'local <?t?> = require "a"',
+ target = {7, 7},
+ },
+}
+
+if require 'bee.platform'.OS == 'Windows' then
+TEST {
+ {
+ path = 'a.lua',
+ content = '',
+ target = {0, 0},
+ },
+ {
+ path = 'b.lua',
+ content = 'require <?"A"?>',
+ },
+}
+end
+
+TEST {
+ {
+ path = 'a.lua',
+ content = 'local <!t!> = 1; return t',
+ },
+ {
+ path = 'b.lua',
+ content = 'local <?t?> = require "a"',
+ target = {7, 7},
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ local t = {
+ <!x!> = 1,
+ }
+ return t
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local t = require "a"
+ t.<?x?>()
+ ]],
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ return {
+ <!x!> = 1,
+ }
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local t = require "a"
+ t.<?x?>()
+ ]],
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ return <!function ()
+ end!>
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local <!f!> = require "a"
+ <?f?>()
+ ]],
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ return <!a():b():c()!>
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local <?t?> = require 'a'
+ ]],
+ target = {19, 19},
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ <!global!> = 1
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ print(<?global?>)
+ ]],
+ }
+}
+
+TEST {
+ {
+ path = 'b.lua',
+ content = [[
+ print(<?global?>)
+ ]],
+ },
+ {
+ path = 'a.lua',
+ content = [[
+ <!global!> = 1
+ ]],
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ x = {}
+ x.<!global!> = 1
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ print(x.<?global?>)
+ ]],
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ x.<!global!> = 1
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ print(x.<?global?>)
+ ]],
+ },
+ {
+ path = 'c.lua',
+ content = [[
+ x = {}
+ ]]
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ return function (<!arg!>)
+ print(<?arg?>)
+ end
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local f = require 'a'
+ local v = 1
+ f(v)
+ ]],
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ return <!{
+ a = 1,
+ }!>
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local <!t!> = require 'a'
+ <?t?>
+ ]],
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ return <!function () end!>
+ ]]
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local f = require 'a'
+ ]]
+ },
+ {
+ path = 'c.lua',
+ content = [[
+ local <!f!> = require 'a'
+ <?f?>
+ ]]
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ local function <!f!>()
+ end
+ return f
+ ]]
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local f = require 'a'
+ ]]
+ },
+ {
+ path = 'c.lua',
+ content = [[
+ local <!f!> = require 'a'
+ <?f?>
+ ]]
+ }
+}
+
+TEST {
+ {
+ path = 'a/xxx.lua',
+ content = [[
+ return <!function () end!>
+ ]]
+ },
+ {
+ path = 'b/xxx.lua',
+ content = [[
+ local <!f!> = require 'xxx'
+ <?f?>
+ return function () end
+ ]]
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ ---@class Class
+ local <!obj!>
+ ]]
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ ---@type Class
+ local <!obj!>
+ <?obj?>
+ ]]
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ ---@type Class
+ local <!obj!>
+ <?obj?>
+ ]]
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ ---@class Class
+ local <!obj!>
+ ]]
+ },
+}
diff --git a/script/test/crossfile/document_symbol.lua b/script/test/crossfile/document_symbol.lua
new file mode 100644
index 00000000..997d42c5
--- /dev/null
+++ b/script/test/crossfile/document_symbol.lua
@@ -0,0 +1,121 @@
+local service = require 'service'
+local workspace = require 'workspace'
+local fs = require 'bee.filesystem'
+local core = require 'core'
+local uric = require 'uri'
+
+local SymbolKind = {
+ File = 1,
+ Module = 2,
+ Namespace = 3,
+ Package = 4,
+ Class = 5,
+ Method = 6,
+ Property = 7,
+ Field = 8,
+ Constructor = 9,
+ Enum = 10,
+ Interface = 11,
+ Function = 12,
+ Variable = 13,
+ Constant = 14,
+ String = 15,
+ Number = 16,
+ Boolean = 17,
+ Array = 18,
+ Object = 19,
+ Key = 20,
+ Null = 21,
+ EnumMember = 22,
+ Struct = 23,
+ Event = 24,
+ Operator = 25,
+ TypeParameter = 26,
+}
+
+local EXISTS = {}
+
+local function eq(a, b)
+ if a == EXISTS and b ~= nil then
+ return true
+ end
+ local tp1, tp2 = type(a), type(b)
+ if tp1 ~= tp2 then
+ return false
+ end
+ if tp1 == 'table' then
+ local mark = {}
+ for k in pairs(a) do
+ if not eq(a[k], b[k]) then
+ return false
+ end
+ mark[k] = true
+ end
+ for k in pairs(b) do
+ if not mark[k] then
+ return false
+ end
+ end
+ return true
+ end
+ return a == b
+end
+
+rawset(_G, 'TEST', true)
+
+function TEST(data)
+ local lsp = service()
+ local ws = workspace(lsp, 'test')
+ lsp.workspace = ws
+
+ local targetUri = uric.encode(fs.path(data[1].path))
+ local sourceUri = uric.encode(fs.path(data[2].path))
+
+ lsp:saveText(sourceUri, 1, data[2].content)
+ ws:addFile(uric.decode(sourceUri))
+ lsp:saveText(targetUri, 1, data[1].content)
+ ws:addFile(uric.decode(targetUri))
+ while lsp._needCompile[1] do
+ lsp:compileVM(lsp._needCompile[1])
+ end
+
+ local sourceVM = lsp:getVM(sourceUri)
+ assert(sourceVM)
+ local result = core.documentSymbol(sourceVM)
+ assert(eq(data.symbol, result))
+end
+
+TEST {
+ {
+ path = 'a.lua',
+ content = 'return function () end',
+ },
+ {
+ path = 'b.lua',
+ content = [[
+local t = {
+ x = require 'a',
+}
+ ]],
+ },
+ symbol = {
+ [1] = {
+ name = 't',
+ detail = EXISTS,
+ kind = SymbolKind.Variable,
+ range = {7, 7},
+ selectionRange = {7, 7},
+ valueRange = {11, 34},
+ children = {
+ [1] = {
+ name = 'x',
+ detail = EXISTS,
+ kind = SymbolKind.Class,
+ range = {17, 17},
+ selectionRange = {17, 17},
+ valueRange = {21, 31},
+ },
+ }
+ }
+ }
+}
diff --git a/script/test/crossfile/hover.lua b/script/test/crossfile/hover.lua
new file mode 100644
index 00000000..b0e5a55f
--- /dev/null
+++ b/script/test/crossfile/hover.lua
@@ -0,0 +1,361 @@
+local service = require 'service'
+local workspace = require 'workspace'
+local fs = require 'bee.filesystem'
+local core = require 'core'
+local uric = require 'uri'
+
+rawset(_G, 'TEST', true)
+
+local EXISTS = {}
+
+local function eq(a, b)
+ if a == EXISTS and b ~= nil then
+ return true
+ end
+ if b == EXISTS and a ~= nil then
+ return true
+ end
+ local tp1, tp2 = type(a), type(b)
+ if tp1 ~= tp2 then
+ return false
+ end
+ if tp1 == 'table' then
+ local mark = {}
+ for k in pairs(a) do
+ if not eq(a[k], b[k]) then
+ return false
+ end
+ mark[k] = true
+ end
+ for k in pairs(b) do
+ if not mark[k] then
+ return false
+ end
+ end
+ return true
+ end
+ return a == b
+end
+
+local function catch_target(script, sep)
+ local list = {}
+ local cur = 1
+ local cut = 0
+ while true do
+ local start, finish = script:find(('<%%%s.-%%%s>'):format(sep, sep), cur)
+ if not start then
+ break
+ end
+ list[#list+1] = { start - cut, finish - 4 - cut }
+ cur = finish + 1
+ cut = cut + 4
+ end
+ local new_script = script:gsub(('<%%%s(.-)%%%s>'):format(sep, sep), '%1')
+ return new_script, list
+end
+
+function TEST(data)
+ local lsp = service()
+ local ws = workspace(lsp, 'test')
+ lsp.workspace = ws
+ ws.root = ROOT
+
+ local targetScript = data[1].content
+ local targetUri = uric.encode(fs.path(data[1].path))
+
+ local sourceScript, sourceList = catch_target(data[2].content, '?')
+ local sourceUri = uric.encode(fs.path(data[2].path))
+
+ lsp:saveText(targetUri, 1, targetScript)
+ ws:addFile(uric.decode(targetUri))
+ lsp:compileVM(targetUri)
+ lsp:saveText(sourceUri, 1, sourceScript)
+ ws:addFile(uric.decode(sourceUri))
+ lsp:compileVM(sourceUri)
+
+ local sourceVM = lsp:loadVM(sourceUri)
+ assert(sourceVM)
+ local sourcePos = (sourceList[1][1] + sourceList[1][2]) // 2
+ local source = core.findSource(sourceVM, sourcePos)
+ local hover = core.hover(source, lsp)
+ assert(hover)
+ if data.hover.description then
+ local uriROOT = uric.encode(ROOT):gsub('%%', '%%%%')
+ data.hover.description = data.hover.description:gsub('%$ROOT%$', uriROOT)
+ end
+ if hover.label then
+ hover.label = hover.label:gsub('\r\n', '\n')
+ end
+ assert(eq(hover, data.hover))
+end
+
+TEST {
+ {
+ path = 'a.lua',
+ content = '',
+ },
+ {
+ path = 'b.lua',
+ content = 'require <?"a"?>',
+ },
+ hover = {
+ description = [[[a.lua]($ROOT$/a.lua)]],
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ local function f(a, b)
+ end
+ return f
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local x = require 'a'
+ <?x?>()
+ ]]
+ },
+ hover = {
+ label = 'function f(a: any, b: any)',
+ name = 'f',
+ args = EXISTS,
+ argStr = EXISTS,
+ returns = EXISTS,
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ return function (a, b)
+ end
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local f = require 'a'
+ <?f?>()
+ ]]
+ },
+ hover = {
+ label = 'function (a: any, b: any)',
+ name = '',
+ args = EXISTS,
+ argStr = EXISTS,
+ returns = EXISTS,
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ local mt = {}
+ mt.__index = mt
+
+ function mt:add(a, b)
+ end
+
+ return function ()
+ return setmetatable({}, mt)
+ end
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local m = require 'a'
+ local obj = m()
+ obj:<?add?>()
+ ]]
+ },
+ hover = {
+ label = 'function mt:add(a: any, b: any)',
+ name = 'mt:add',
+ args = EXISTS,
+ argStr = EXISTS,
+ returns = EXISTS,
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ t = {
+ [{}] = 1,
+ }
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ <?t?>[{}] = 2
+ ]]
+ },
+ hover = {
+ label = [[
+global t: {
+ [*table]: number = 1,
+ [*table]: number = 2,
+}]],
+ name = 't',
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ t = {
+ [{}] = 1,
+ }
+ ]],
+ },
+ {
+ path = 'a.lua',
+ content = [[
+ <?t?>[{}] = 2
+ ]]
+ },
+ hover = {
+ label = [[
+global t: {
+ [*table]: number = 2,
+}]],
+ name = 't',
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = '',
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ --- abc
+ ---@param x number
+ function <?f?>(x) end
+ ]],
+ },
+ hover = {
+ label = [[function f(x: number)]],
+ name = 'f',
+ description = 'abc',
+ args = EXISTS,
+ argStr = EXISTS,
+ returns = EXISTS,
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = '',
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ --- abc
+ <?x?> = 1
+ ]],
+ },
+ hover = {
+ label = [[global x: number = 1]],
+ name = 'x',
+ description = 'abc',
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = '',
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ ---@param x string
+ ---| "'选项1'" # 注释1
+ ---| > "'选项2'" # 注释2
+ function <?f?>(x) end
+ ]]
+ },
+ hover = {
+ label = 'function f(x: string)',
+ name = 'f',
+ args = EXISTS,
+ rawEnum = EXISTS,
+ argStr = EXISTS,
+ returns = EXISTS,
+ enum = [[
+
+x: string
+ | '选项1' -- 注释1
+ |>'选项2' -- 注释2]]
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = '',
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ ---@alias option
+ ---| "'选项1'" # 注释1
+ ---| > "'选项2'" # 注释2
+ ---@param x option
+ function <?f?>(x) end
+ ]]
+ },
+ hover = {
+ label = 'function f(x: option)',
+ name = 'f',
+ args = EXISTS,
+ rawEnum = EXISTS,
+ argStr = EXISTS,
+ returns = EXISTS,
+ enum = [[
+
+x: option
+ | '选项1' -- 注释1
+ |>'选项2' -- 注释2]]
+ }
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = '',
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ ---@param x string {comment = 'aaaa'}
+ ---@param y string {comment = 'bbbb'}
+ local function <?f?>(x, y) end
+ ]]
+ },
+ hover = {
+ label = 'function f(x: string, y: string)',
+ name = 'f',
+ args = EXISTS,
+ argStr = EXISTS,
+ returns = EXISTS,
+ description = [[
++ `x`*(string)*: aaaa
+
++ `y`*(string)*: bbbb]]
+ }
+}
diff --git a/script/test/crossfile/init.lua b/script/test/crossfile/init.lua
new file mode 100644
index 00000000..96462fa5
--- /dev/null
+++ b/script/test/crossfile/init.lua
@@ -0,0 +1,5 @@
+require 'crossfile.definition'
+require 'crossfile.hover'
+require 'crossfile.completion'
+require 'crossfile.document_symbol'
+require 'crossfile.references'
diff --git a/script/test/crossfile/references.lua b/script/test/crossfile/references.lua
new file mode 100644
index 00000000..9f81707c
--- /dev/null
+++ b/script/test/crossfile/references.lua
@@ -0,0 +1,215 @@
+local service = require 'service'
+local workspace = require 'workspace'
+local fs = require 'bee.filesystem'
+local core = require 'core'
+local uric = require 'uri'
+
+rawset(_G, 'TEST', true)
+
+local EXISTS = {}
+
+local function eq(a, b)
+ if a == EXISTS and b ~= nil then
+ return true
+ end
+ local tp1, tp2 = type(a), type(b)
+ if tp1 ~= tp2 then
+ return false
+ end
+ if tp1 == 'table' then
+ local mark = {}
+ for k in pairs(a) do
+ if not eq(a[k], b[k]) then
+ return false
+ end
+ mark[k] = true
+ end
+ for k in pairs(b) do
+ if not mark[k] then
+ return false
+ end
+ end
+ return true
+ end
+ return a == b
+end
+
+local function catch_target(script)
+ local list = {}
+ local cur = 1
+ while true do
+ local start, finish = script:find('<[!?].-[!?]>', cur)
+ if not start then
+ break
+ end
+ list[#list+1] = { start + 2, finish - 2 }
+ cur = finish + 1
+ end
+ return list
+end
+
+local function founded(targets, results)
+ if #targets ~= #results then
+ return false
+ end
+ for _, target in ipairs(targets) do
+ for _, result in ipairs(results) do
+ if target[1] == result[1] and target[2] == result[2] then
+ goto NEXT
+ end
+ end
+ do return false end
+ ::NEXT::
+ end
+ return true
+end
+
+local function compileAll(lsp)
+ while lsp._needCompile[1] do
+ lsp:compileVM(lsp._needCompile[1])
+ end
+end
+
+function TEST(data)
+ local lsp = service()
+ local ws = workspace(lsp, 'test')
+ lsp.workspace = ws
+ ws.root = ROOT
+
+ local mainUri
+ local pos
+ local expect = {}
+ for _, info in ipairs(data) do
+ local uri = uric.encode(fs.path(info.path))
+ ws:addFile(uric.decode(uri))
+ end
+ for _, info in ipairs(data) do
+ local uri = uric.encode(fs.path(info.path))
+ local script = info.content
+ local list = catch_target(script)
+ for _, location in ipairs(list) do
+ expect[#expect+1] = {
+ location[1],
+ location[2],
+ uri,
+ }
+ end
+ local start = script:find('<?', 1, true)
+ local finish = script:find('?>', 1, true)
+ if start then
+ mainUri = uri
+ pos = (start + finish) // 2 + 1
+ end
+ local newScript = script:gsub('<[!?]', ' '):gsub('[!?]>', ' ')
+ lsp:saveText(uri, 1, newScript)
+ compileAll(lsp)
+ end
+
+ local vm = lsp:loadVM(mainUri)
+
+ compileAll(lsp)
+
+ assert(vm)
+ local result = core.definition(vm, pos, 'reference')
+ if expect then
+ assert(result)
+ assert(founded(expect, result))
+ else
+ assert(result == nil)
+ end
+end
+
+TEST {
+ {
+ path = 'lib.lua',
+ content = [[
+ return <!function ()
+ end!>
+ ]],
+ },
+ {
+ path = 'a.lua',
+ content = [[
+ local <?f?> = require 'lib'
+ ]],
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ local <!f!> = require 'lib'
+ ]],
+ },
+ {
+ path = 'lib.lua',
+ content = [[
+ return <?function ()
+ end?>
+ ]],
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ <!ROOT!> = 1
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ print(<?ROOT?>)
+ ]],
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ <?ROOT?> = 1
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ print(<!ROOT!>)
+ ]],
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = [[
+ return <?function () end?>
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local t = require 'a'
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local t = require 'a'
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local t = require 'a'
+ ]],
+ },
+ {
+ path = 'b.lua',
+ content = [[
+ local <!t!> = require 'a'
+ ]],
+ },
+}
diff --git a/script/test/definition/arg.lua b/script/test/definition/arg.lua
new file mode 100644
index 00000000..9e88b2bf
--- /dev/null
+++ b/script/test/definition/arg.lua
@@ -0,0 +1,19 @@
+TEST [[
+local function xx (<!xx!>)
+ <?xx?>()
+end
+]]
+
+TEST [[
+local <!mt!>
+function mt:x()
+ <?self?>()
+end
+mt:x()
+]]
+
+TEST [[
+function mt:x(<!self!>)
+ <?self?>()
+end
+]]
diff --git a/script/test/definition/bug.lua b/script/test/definition/bug.lua
new file mode 100644
index 00000000..1d3ab02c
--- /dev/null
+++ b/script/test/definition/bug.lua
@@ -0,0 +1,90 @@
+TEST [[
+local <!x!>
+function _(x)
+end
+function _()
+ <?x?>()
+end
+]]
+
+TEST [[
+function _(<!x!>)
+ do return end
+ <?x?>()
+end
+]]
+
+TEST [[
+local <!a!>
+function a:b()
+ a:b()
+ <?self?>()
+end
+]]
+
+TEST [[
+function _(...)
+ function _()
+ print(<?...?>)
+ end
+end
+]]
+
+TEST [[
+local <!a!>
+(<?a?> / b)()
+]]
+
+TEST [[
+local <!args!>
+io.load(root / <?args?>.source / 'API' / path)
+]]
+
+TEST [[
+obj[#<?obj?>+1] = {}
+]]
+
+TEST [[
+self = {
+ results = {
+ <!labels!> = {},
+ }
+}
+self[self.results.<?labels?>] = lbl
+]]
+
+TEST [[
+local mt = {}
+function mt:<!x!>()
+end
+mt:x()
+mt:<?x?>()
+]]
+
+TEST [[
+local function func(<!a!>)
+ x = {
+ xx(),
+ <?a?>,
+ }
+end
+]]
+
+TEST [[
+local <!x!>
+local t = {
+ ...,
+ <?x?>,
+}
+]]
+
+TEST [[
+local a
+local <!b!>
+return f(), <?b?>
+]]
+
+TEST [[
+local a = os.clock()
+local <?<!b!>?> = os.clock()
+]]
diff --git a/script/test/definition/emmy.lua b/script/test/definition/emmy.lua
new file mode 100644
index 00000000..ee8fa6a7
--- /dev/null
+++ b/script/test/definition/emmy.lua
@@ -0,0 +1,91 @@
+TEST [[
+---@class <!A!>
+---@class B : <?A?>
+]]
+
+TEST [[
+---@class <!A!>
+---@type B|<?A?>
+]]
+
+TEST [[
+---@class A
+local mt = {}
+function mt:<!cast!>()
+end
+
+---@type A
+local obj
+obj:<?cast?>()
+]]
+
+TEST [[
+---@class A
+local <!mt!> = {}
+function mt:cast()
+end
+
+---@type A
+local <!obj!>
+<?obj?>:cast()
+]]
+
+TEST [[
+---@type A
+local <?<!obj!>?>
+
+---@class A
+local <!mt!>
+]]
+
+TEST [[
+---@type A
+local obj
+obj:<?func?>()
+
+---@class A
+local mt
+function mt:<!func!>()
+end
+]]
+
+TEST [[
+---@type A
+local obj
+obj:<?func?>()
+
+local mt = {}
+mt.__index = mt
+function mt:<!func!>()
+end
+---@class A
+local obj = setmetatable({}, mt)
+]]
+
+TEST [[
+---@alias <!B A!>
+---@type <?B?>
+]]
+
+TEST [[
+---@class <!Class!>
+---@param a <?Class?>
+]]
+
+TEST [[
+---@class Class
+---@field <!name string!>
+---@field id integer
+local mt = {}
+mt.<?name?>
+]]
+
+TEST [[
+---@class loli
+local unit
+
+function unit:<!pants!>()
+end
+
+---@see loli#<?pants?>
+]]
diff --git a/script/test/definition/function.lua b/script/test/definition/function.lua
new file mode 100644
index 00000000..ce20f50b
--- /dev/null
+++ b/script/test/definition/function.lua
@@ -0,0 +1,24 @@
+
+TEST [[
+function <!x!> () end
+<?x?>()
+]]
+
+TEST [[
+local function <!x!> () end
+<?x?>()
+]]
+
+TEST [[
+local x
+local function <!x!> ()
+ <?x?>()
+end
+]]
+
+TEST [[
+local <!x!>
+function <!x!>()
+end
+<?x?>()
+]]
diff --git a/script/test/definition/init.lua b/script/test/definition/init.lua
new file mode 100644
index 00000000..022b1d3b
--- /dev/null
+++ b/script/test/definition/init.lua
@@ -0,0 +1,64 @@
+local core = require 'core'
+local parser = require 'parser'
+local buildVM = require 'vm'
+
+rawset(_G, 'TEST', true)
+
+local function catch_target(script)
+ local list = {}
+ local cur = 1
+ while true do
+ local start, finish = script:find('<!.-!>', cur)
+ if not start then
+ break
+ end
+ list[#list+1] = { start + 2, finish - 2 }
+ cur = finish + 1
+ end
+ return list
+end
+
+local function founded(targets, results)
+ if #targets ~= #results then
+ return false
+ end
+ for _, target in ipairs(targets) do
+ for _, result in ipairs(results) do
+ if target[1] == result[1] and target[2] == result[2] then
+ goto NEXT
+ end
+ end
+ do return false end
+ ::NEXT::
+ end
+ return true
+end
+
+function TEST(script)
+ local target = catch_target(script)
+ local start = script:find('<?', 1, true)
+ local finish = script:find('?>', 1, true)
+ local pos = (start + finish) // 2 + 1
+ local new_script = script:gsub('<[!?]', ' '):gsub('[!?]>', ' ')
+ local ast = parser:parse(new_script, 'lua', 'Lua 5.3')
+ assert(ast)
+ local vm = buildVM(ast)
+ assert(vm)
+
+ local positions = core.definition(vm, pos, 'definition')
+ if positions then
+ assert(founded(target, positions))
+ else
+ assert(#target == 0)
+ end
+end
+
+require 'definition.set'
+require 'definition.local'
+require 'definition.arg'
+require 'definition.function'
+require 'definition.table'
+require 'definition.method'
+require 'definition.label'
+require 'definition.bug'
+require 'definition.emmy'
diff --git a/script/test/definition/label.lua b/script/test/definition/label.lua
new file mode 100644
index 00000000..4859d70e
--- /dev/null
+++ b/script/test/definition/label.lua
@@ -0,0 +1,29 @@
+TEST [[
+::<!LABEL!>::
+goto <?LABEL?>
+]]
+
+TEST [[
+goto <?LABEL?>
+::<!LABEL!>::
+]]
+
+TEST [[
+::LABEL::
+function _()
+ goto <?LABEL?>
+end
+]]
+
+TEST [[
+do
+ goto <?LABEL?>
+end
+::<!LABEL!>::
+]]
+
+TEST [[
+::<!LABEL!>::
+goto <?LABEL?>
+::<!LABEL!>::
+]]
diff --git a/script/test/definition/local.lua b/script/test/definition/local.lua
new file mode 100644
index 00000000..4153bfa0
--- /dev/null
+++ b/script/test/definition/local.lua
@@ -0,0 +1,195 @@
+TEST [[
+local <!x!>
+<?x?>()
+]]
+
+TEST [[
+local z, y, <!x!>
+<?x?>()
+]]
+
+TEST [[
+local <!x!> = 1
+<?x?>()
+]]
+
+TEST [[
+local z, y, <!x!> = 1
+<?x?>()
+]]
+
+TEST [[
+local x
+local <!x!>
+<?x?>()
+]]
+
+TEST [[
+local <!x!>
+do
+ <?x?>()
+end
+]]
+
+TEST [[
+local <!x!>
+do
+ local x
+end
+<?x?>()
+]]
+
+TEST [[
+local <!x!>
+if <?x?> then
+ local x
+end
+]]
+
+TEST [[
+local <!x!>
+if x then
+ local x
+elseif <?x?> then
+ local x
+end
+]]
+
+TEST [[
+local <!x!>
+if x then
+ local x
+elseif x then
+ local x
+else
+ local x
+end
+<?x?>()
+]]
+
+TEST [[
+local <!x!>
+if x then
+ <?x?>()
+elseif x then
+ local x
+else
+ local x
+end
+]]
+
+TEST [[
+local <!x!>
+for x = 1, 10 do
+end
+<?x?>()
+]]
+
+TEST [[
+local x
+for <!x!> = 1, 10 do
+ <?x?>()
+end
+]]
+
+TEST [[
+local <!x!>
+for x in x do
+end
+<?x?>()
+]]
+
+TEST [[
+local <!x!>
+for x in <?x?> do
+end
+]]
+
+TEST [[
+local x
+for <!x!> in x do
+ <?x?>()
+end
+]]
+
+TEST [[
+local x
+for z, y, <!x!> in x do
+ <?x?>()
+end
+]]
+
+TEST [[
+local <!x!>
+while <?x?> do
+end
+]]
+
+TEST [[
+local <!x!>
+while x do
+ <?x?>()
+end
+]]
+
+TEST [[
+local <!x!>
+while x do
+ local x
+end
+<?x?>()
+]]
+
+TEST [[
+local <!x!>
+repeat
+ <?x?>()
+until true
+]]
+
+TEST [[
+local <!x!>
+repeat
+ local x
+until true
+<?x?>()
+]]
+
+TEST [[
+local <!x!>
+repeat
+until <?x?>
+]]
+
+TEST [[
+local x
+repeat
+ local <!x!>
+until <?x?>
+]]
+
+TEST [[
+local <!x!>
+function _()
+ local x
+end
+<?x?>()
+]]
+
+TEST [[
+local <!x!>
+return function ()
+ <?x?>()
+end
+]]
+
+TEST [[
+local <!x!>
+local x = function ()
+ <?x?>()
+end
+]]
+
+TEST [[
+local <?<!x!>?>
+]]
diff --git a/script/test/definition/method.lua b/script/test/definition/method.lua
new file mode 100644
index 00000000..08b56f61
--- /dev/null
+++ b/script/test/definition/method.lua
@@ -0,0 +1,140 @@
+TEST [[
+function mt:<!a!>()
+end
+function mt:b()
+ mt:<?a?>()
+end
+]]
+
+TEST [[
+function mt:<!m1!>()
+end
+function mt:m2()
+ self:<?m1?>()
+end
+]]
+
+TEST [[
+function mt:m3()
+ mt:<?m4?>()
+end
+function mt:<!m4!>()
+end
+]]
+
+TEST [[
+function mt:m3()
+ self:<?m4?>()
+end
+function mt:<!m4!>()
+end
+]]
+
+TEST [[
+local mt
+mt.__index = mt
+function mt:<!method1!>()
+end
+
+local obj = setmetatable({}, mt)
+obj:<?method1?>()
+]]
+
+TEST [[
+local mt
+mt.__index = mt
+function mt:<!method1!>()
+end
+
+local obj = setmetatable({}, mt)
+obj:<?method1?>()
+]]
+
+TEST [[
+local mt
+function mt:<!method1!>()
+end
+
+local obj = setmetatable({}, { __index = mt })
+obj:<?method1?>()
+]]
+
+TEST [[
+local mt
+local api
+function mt:<!method1!>()
+end
+
+setmetatable(api, { __index = mt })
+api:<?method1?>()
+]]
+
+TEST [[
+local mt
+function mt:x()
+ self.<?init?>()
+end
+
+local obj = setmetatable({}, { __index = mt })
+obj.<!init!> = 1
+obj:x()
+]]
+
+TEST [[
+local mt
+function mt:x()
+ self.<?init?>()
+end
+
+local obj = setmetatable({ <!init!> = 1 }, { __index = mt })
+obj:x()
+]]
+
+TEST [[
+local mt
+function mt:x()
+ self.a.<?out?>()
+end
+
+local obj = setmetatable({
+ a = {
+ <!out!> = 1,
+ }
+}, { __index = mt })
+obj:x()
+]]
+
+TEST [[
+local sm = setmetatable
+local mt
+mt.__index = mt
+function mt:<!method1!>()
+end
+
+local obj = sm({}, mt)
+obj:<?method1?>()
+]]
+
+TEST [[
+local mt = {}
+function mt:<!x!>()
+end
+
+local obj = setmetatable({}, {__index = mt})
+function obj:x()
+end
+
+mt:<?x?>()
+]]
+
+TEST [[
+local mt = {}
+function mt:x()
+end
+
+local obj = setmetatable({}, {__index = mt})
+function obj:<!x!>()
+end
+
+obj:<?x?>()
+]]
diff --git a/script/test/definition/set.lua b/script/test/definition/set.lua
new file mode 100644
index 00000000..44277d33
--- /dev/null
+++ b/script/test/definition/set.lua
@@ -0,0 +1,50 @@
+TEST [[
+<!x!> = 1
+<?x?>()
+]]
+
+TEST [[
+do
+ <!global!> = 1
+end
+<?global?>()
+]]
+
+TEST [[
+<!x!> = 1
+do
+ local x = 1
+end
+<?x?>()
+]]
+
+TEST [[
+x = 1
+do
+ local <!x!> = 1
+ do
+ <!x!> = 2
+ end
+ <?x?>()
+end
+]]
+
+TEST [[
+<!x!> = 1
+if y then
+ <!x!> = 2
+else
+ <!x!> = 3
+end
+print(<?x?>)
+]]
+
+TEST [[
+_G.<!x!> = 1
+print(<?x?>)
+]]
+
+TEST [[
+rawset<!(_G, 'x', 1)!>
+print(<?x?>)
+]]
diff --git a/script/test/definition/table.lua b/script/test/definition/table.lua
new file mode 100644
index 00000000..90e7926f
--- /dev/null
+++ b/script/test/definition/table.lua
@@ -0,0 +1,114 @@
+TEST [[
+local <!t!>
+a = {
+ <?t?>
+}
+]]
+
+TEST [[
+local t
+t.<!x!> = 1
+t.<?x?>()
+]]
+
+TEST [[
+t.<!x!> = 1
+t.<?x?>()
+]]
+
+TEST [[
+local <!t!>
+t.x = 1
+<?t?>.x = 1
+]]
+
+TEST [[
+t.<!x!> = 1
+t.<?x?>.y = 1
+]]
+
+TEST [[
+local t
+t.<!x!> = 1
+t.<?x?>()
+]]
+
+TEST [[
+local t
+t[<!1!>] = 1
+t[<?1?>]()
+]]
+
+TEST [[
+local t
+t[<!true!>] = 1
+t[<?true?>]()
+]]
+
+TEST [[
+local t
+t[<!"method"!>] = 1
+t[<?"method"?>]()
+]]
+
+TEST [[
+local t
+t[<!"longString"!>] = 1
+t[<?[==[longString]==]?>]()
+]]
+
+TEST [[
+local t
+t.<!x!> = 1
+t[<?'x'?>]()
+]]
+
+TEST [[
+local t
+t.<!a!> = 1
+t.<?a?>.b()
+]]
+
+TEST [[
+local t
+local <!x!>
+t[<?x?>]()
+]]
+
+TEST[[
+local <!t!>
+local _ = {
+ _ = <?t?>
+}
+]]
+
+TEST[[
+local <!t!>
+t {
+ _ = <?t?>.x
+}
+]]
+
+TEST[[
+local t = {
+ <!insert!> = 1,
+}
+t.<?insert?>()
+]]
+
+--TEST[[
+--local t = {
+-- <!insert!> = 1,
+--}
+--y.<?insert?>()
+--]]
+
+--TEST[[
+--local t = {
+-- <!insert!> = 1,
+--}
+--local y = {
+-- insert = 1,
+--}
+--t.<?insert?>()
+--]]
diff --git a/script/test/diagnostics/init.lua b/script/test/diagnostics/init.lua
new file mode 100644
index 00000000..eee03d2e
--- /dev/null
+++ b/script/test/diagnostics/init.lua
@@ -0,0 +1,74 @@
+local core = require 'core'
+local buildVM = require 'vm'
+local parser = require 'parser'
+local service = require 'service'
+local config = require 'config'
+
+rawset(_G, 'TEST', true)
+
+local function catch_target(script, ...)
+ local list = {}
+ local function catch(buf)
+ local cur = 1
+ local cut = 0
+ while true do
+ local start, finish = buf:find('<!.-!>', cur)
+ if not start then
+ break
+ end
+ list[#list+1] = { start - cut, finish - 4 - cut }
+ cur = finish + 1
+ cut = cut + 4
+ end
+ end
+ catch(script)
+ if ... then
+ for _, buf in ipairs {...} do
+ catch(buf)
+ end
+ end
+ local new_script = script:gsub('<!(.-)!>', '%1')
+ return new_script, list
+end
+
+local function founded(targets, results)
+ if #targets ~= #results then
+ return false
+ end
+ for _, target in ipairs(targets) do
+ for _, result in ipairs(results) do
+ if target[1] == result[1] and target[2] == result[2] then
+ goto NEXT
+ end
+ end
+ do return false end
+ ::NEXT::
+ end
+ return true
+end
+
+function TEST(script, ...)
+ local new_script, target = catch_target(script, ...)
+ local lsp = service()
+ local ast = parser:parse(new_script, 'lua', 'Lua 5.3')
+ assert(ast)
+ local lines = parser:lines(new_script)
+ local vm = buildVM(ast, lsp, 'test')
+ assert(vm)
+ local datas = core.diagnostics(vm, lines, 'test')
+ local results = {}
+ for i, data in ipairs(datas) do
+ results[i] = { data.start, data.finish }
+ end
+
+ if results[1] then
+ if not founded(target, results) then
+ error(('%s\n%s'):format(table.dump(target), table.dump(results)))
+ end
+ else
+ assert(#target == 0)
+ end
+end
+
+require 'diagnostics.normal'
+require 'diagnostics.syntax'
diff --git a/script/test/diagnostics/normal.lua b/script/test/diagnostics/normal.lua
new file mode 100644
index 00000000..5fdc3ba8
--- /dev/null
+++ b/script/test/diagnostics/normal.lua
@@ -0,0 +1,503 @@
+local config = require 'config'
+
+TEST [[
+local <!x!>
+]]
+
+TEST([[
+<!local function x()
+end!>
+]],
+[[
+local function <!x!>()
+end
+]]
+)
+
+TEST [[
+local <!x!> = <!function () end!>
+]]
+
+TEST [[
+local <!x!>
+x = <!function () end!>
+]]
+
+
+TEST [[
+print(<!x!>)
+print(<!log!>)
+print(<!X!>)
+print(<!Log!>)
+print(_VERSION)
+print(<!y!>)
+print(Z)
+Z = 1
+]]
+
+TEST [[
+::<!LABEL!>::
+]]
+
+TEST [[
+<! !>
+]]
+
+TEST [[
+X = 1<! !>
+]]
+
+TEST [[
+X = [=[
+ ]=]
+]]
+
+TEST [[
+local x
+print(x)
+local <!x!>
+print(x)
+]]
+
+TEST [[
+local x
+print(x)
+local <!x!>
+print(x)
+local <!x!>
+print(x)
+]]
+
+TEST [[
+local _
+print(_)
+local _
+print(_)
+local _ENV
+<!print!>(_ENV) -- 由于重定义了_ENV,因此print变为了未定义全局变量
+]]
+
+TEST [[
+print(1)
+_ENV = nil
+]]
+
+config.config.diagnostics.disable['undefined-env-child'] = true
+TEST [[
+_ENV = nil
+<!GLOBAL!> = 1 --> _ENV.GLOBAL = 1
+]]
+
+TEST [[
+_ENV = nil
+local _ = <!GLOBAL!> --> local _ = _ENV.GLOBAL
+]]
+
+TEST [[
+_ENV = {}
+GLOBAL = 1 --> _ENV.GLOBAL = 1
+]]
+
+TEST [[
+_ENV = {}
+local _ = GLOBAL --> local _ = _ENV.GLOBAL
+]]
+
+config.config.diagnostics.disable['undefined-env-child'] = nil
+TEST [[
+print()
+<!('string')!>:sub(1, 1)
+]]
+
+TEST [[
+print()
+('string')
+]]
+
+TEST [[
+return {
+ <!print
+ 'string'!>
+}
+]]
+
+TEST [[
+return {
+ <!print
+ {
+ x = 1,
+ }!>
+}
+]]
+
+TEST [[
+print()
+'string'
+]]
+
+TEST [[
+print
+{
+ x = 1,
+}
+]]
+
+TEST [[
+local function x(a, b)
+ return a, b
+end
+x(1, 2, <!3!>)
+]]
+
+TEST [[
+InstanceName = 1
+Instance = _G[InstanceName]
+]]
+
+TEST [[
+(''):sub(1, 2)
+]]
+
+TEST [=[
+return [[
+
+]]
+]=]
+
+TEST [[
+local mt, x
+function mt:m()
+ function x:m()
+ end
+end
+]]
+
+TEST [[
+local mt = {}
+function mt:f()
+end
+]]
+
+TEST [[
+local function f(<!self!>)
+end
+f()
+]]
+
+TEST [[
+local function f(<!...!>)
+end
+f()
+]]
+
+TEST [[
+local function f(var)
+ print(var)
+end
+local var
+f(var)
+]]
+
+TEST [[
+local function f(a, b)
+ return a, b
+end
+f(1, 2, <!3!>, <!4!>)
+]]
+
+TEST [[
+local mt = {}
+function mt:f(a, b)
+ return a, b
+end
+mt.f(1, 2, 3, <!4!>)
+]]
+
+
+TEST [[
+local mt = {}
+function mt.f(a, b)
+ return a, b
+end
+mt:f(1, <!2!>, <!3!>, <!4!>)
+]]
+
+TEST [[
+local mt = {}
+function mt:f(a, b)
+ return a, b
+end
+mt:f(1, 2, <!3!>, <!4!>)
+]]
+
+TEST [[
+local function f(a, b, ...)
+ return a, b, ...
+end
+f(1, 2, 3, 4)
+]]
+
+TEST [[
+next({}, 1, <!2!>)
+print(1, 2, 3, 4, 5)
+]]
+
+TEST [[
+local function f(callback)
+ callback(1, 2, 3)
+end
+f(function () end)
+]]
+
+--TEST [[
+--local realTostring = tostring
+--tostring = function () end
+--tostring(<!1!>)
+--tostring = realTostring
+--tostring(1)
+--]]
+
+TEST [[
+<!aa!> = 1
+tostring = 1
+ROOT = 1
+_G.bb = 1
+]]
+
+TEST [[
+local f = load('')
+f(1, 2, 3)
+]]
+
+require 'config' .config.runtime.version = 'Lua 5.3'
+TEST [[
+<!warn!>(1)
+]]
+
+TEST [[
+X = table[<!x!>]
+]]
+
+TEST [[
+return {
+ <!x = 1!>,
+ y = 2,
+ <!x!> = 3,
+}
+]]
+
+TEST [[
+local m = {}
+function m.open()
+end
+
+m:open()
+]]
+
+TEST [[
+<!if true then
+end!>
+]]
+
+TEST [[
+<!if true then
+else
+end!>
+]]
+
+TEST [[
+if true then
+else
+ return
+end
+]]
+
+TEST [[
+while true do
+end
+]]
+
+TEST [[
+<!for _ = 1, 10 do
+end!>
+]]
+
+TEST [[
+<!for _ in pairs(_VERSION) do
+end!>
+]]
+
+TEST [[
+local _ = 1, <!2!>
+]]
+
+TEST [[
+_ = 1, <!2!>
+]]
+
+TEST [[
+local function x()
+ do
+ local k
+ print(k)
+ x()
+ end
+ local k = 1
+ print(k)
+end
+]]
+
+TEST [[
+local function x()
+ local loc
+ x()
+ print(loc)
+end
+]]
+
+TEST [[
+---@class <!Class!>
+---@class <!Class!>
+]]
+
+TEST [[
+---@class A : <!B!>
+]]
+
+TEST [[
+---@class <!A : B!>
+---@class <!B : C!>
+---@class <!C : D!>
+---@class <!D : A!>
+]]
+
+TEST [[
+---@class A : B
+---@class B : C
+---@class C : D
+---@class D
+]]
+
+TEST [[
+---@type <!A!>
+]]
+
+TEST [[
+---@class A
+---@type A|<!B!>|<!C!>
+]]
+
+TEST [[
+---@class AAA
+---@alias B AAA
+
+---@type B
+]]
+
+TEST [[
+---@alias B <!AAA!>
+]]
+
+TEST [[
+---@class <!A!>
+---@class B
+---@alias <!A B!>
+]]
+
+TEST [[
+---@param x <!Class!>
+]]
+
+TEST [[
+---@class Class
+---@param <!y!> Class
+local function f(x)
+ return x
+end
+f()
+]]
+
+TEST [[
+---@class Class
+---@param <!y!> Class
+function F(x)
+ return x
+end
+F()
+]]
+
+TEST [[
+---@class Class
+---@param <!x!> Class
+---@param y Class
+---@param <!x!> Class
+local function f(x, y)
+ return x, y
+end
+f()
+]]
+
+TEST [[
+---@field <!x Class!>
+---@class Class
+]]
+
+TEST [[
+---@class Class
+---@field <!x!> Class
+---@field <!x!> Class
+]]
+
+TEST [[
+---@class Class : any
+]]
+
+TEST [[
+---@type fun(a: integer)
+local f
+f()
+]]
+
+TEST [[
+local x
+x = <!x or 0 + 1!>
+]]
+
+TEST [[
+local x, y
+x = <!x + y or 0!>
+]]
+
+TEST [[
+local x, y, z
+x = x and y or '' .. z
+]]
+
+TEST [[
+local x
+x = x or -1
+]]
+
+TEST [[
+local x
+x = x or (0 + 1)
+]]
+
+TEST [[
+local x, y
+x = (x + y) or 0
+]]
+
+--TEST [[
+--local t = {}
+--function t:<!a!>()
+--end
+--function t:<!a!>()
+--end
+--]]
+
+TEST [[
+local t = {}
+t.a = 1
+t.a = 2
+]]
diff --git a/script/test/diagnostics/syntax.lua b/script/test/diagnostics/syntax.lua
new file mode 100644
index 00000000..887d05f0
--- /dev/null
+++ b/script/test/diagnostics/syntax.lua
@@ -0,0 +1,8 @@
+local config = require 'config'
+
+TEST [[
+local x <const> = 1
+<!x!> = 2
+return x
+]]
+
diff --git a/script/test/document_symbol/init.lua b/script/test/document_symbol/init.lua
new file mode 100644
index 00000000..f677d857
--- /dev/null
+++ b/script/test/document_symbol/init.lua
@@ -0,0 +1,478 @@
+local parser = require 'parser'
+local core = require 'core'
+local buildVM = require 'vm'
+
+local SymbolKind = {
+ File = 1,
+ Module = 2,
+ Namespace = 3,
+ Package = 4,
+ Class = 5,
+ Method = 6,
+ Property = 7,
+ Field = 8,
+ Constructor = 9,
+ Enum = 10,
+ Interface = 11,
+ Function = 12,
+ Variable = 13,
+ Constant = 14,
+ String = 15,
+ Number = 16,
+ Boolean = 17,
+ Array = 18,
+ Object = 19,
+ Key = 20,
+ Null = 21,
+ EnumMember = 22,
+ Struct = 23,
+ Event = 24,
+ Operator = 25,
+ TypeParameter = 26,
+}
+
+rawset(_G, 'TEST', true)
+
+local EXISTS = {}
+
+local function eq(a, b)
+ if a == EXISTS and b ~= nil then
+ return true
+ end
+ local tp1, tp2 = type(a), type(b)
+ if tp1 ~= tp2 then
+ return false
+ end
+ if tp1 == 'table' then
+ local mark = {}
+ for k in pairs(a) do
+ if not eq(a[k], b[k]) then
+ return false
+ end
+ mark[k] = true
+ end
+ for k in pairs(b) do
+ if not mark[k] then
+ return false
+ end
+ end
+ return true
+ end
+ return a == b
+end
+
+local function checkArcoss(symbols)
+ local lastFinish = 0
+ for _, symbol in ipairs(symbols) do
+ assert(symbol.range[1] <= symbol.selectionRange[1])
+ assert(symbol.range[2] >= symbol.selectionRange[2])
+ assert(symbol.range[2] > lastFinish)
+ lastFinish = symbol.range[2]
+ if symbol.children then
+ checkArcoss(symbol.children)
+ end
+ end
+end
+
+function TEST(script)
+ return function (expect)
+ local ast = parser:parse(script, 'lua', 'Lua 5.3')
+ local vm = buildVM(ast)
+ assert(vm)
+ local result = core.documentSymbol(vm)
+ assert(eq(expect, result))
+ checkArcoss(result)
+ end
+end
+
+TEST [[
+local function f()
+end
+]]
+{
+ [1] = {
+ name = 'f',
+ detail = 'function f()',
+ kind = SymbolKind.Function,
+ range = {1, 22},
+ selectionRange = {16, 16},
+ valueRange = {1, 22},
+ }
+}
+
+TEST [[
+function f()
+end
+]]
+{
+ [1] = {
+ name = 'f',
+ detail = 'function f()',
+ kind = SymbolKind.Function,
+ range = {1, 16},
+ selectionRange = {10, 10},
+ valueRange = {1, 16},
+ }
+}
+
+TEST [[
+return function ()
+end
+]]
+{
+ [1] = {
+ name = '',
+ detail = 'function ()',
+ kind = SymbolKind.Function,
+ range = {8, 22},
+ selectionRange = {8, 8},
+ valueRange = {8, 22},
+ }
+}
+
+TEST [[
+f = function ()
+end
+]]
+{
+ [1] = {
+ name = 'f',
+ detail = 'function f()',
+ kind = SymbolKind.Function,
+ range = {1, 1},
+ selectionRange = {1, 1},
+ valueRange = {5, 19},
+ }
+}
+
+TEST [[
+local f = function ()
+end
+]]
+{
+ [1] = {
+ name = 'f',
+ detail = 'function f()',
+ kind = SymbolKind.Function,
+ range = {7, 7},
+ selectionRange = {7, 7},
+ valueRange = {11, 25},
+ }
+}
+
+TEST [[
+function mt:add()
+end
+]]
+{
+ [1] = {
+ name = 'mt:add',
+ detail = 'function mt:add()',
+ kind = SymbolKind.Field,
+ range = {1, 21},
+ selectionRange = {10, 15},
+ valueRange = {1, 21},
+ }
+}
+
+TEST [[
+function A()
+ function A1()
+ end
+ function A2()
+ end
+end
+function B()
+end
+]]
+{
+ [1] = {
+ name = 'A',
+ detail = 'function A()',
+ kind = SymbolKind.Function,
+ range = {1, 68},
+ selectionRange = {10, 10},
+ valueRange = {1, 68},
+ children = {
+ [1] = {
+ name = 'A1',
+ detail = 'function A1()',
+ kind = SymbolKind.Function,
+ range = {18, 38},
+ selectionRange = {27, 28},
+ valueRange = {18, 38},
+ },
+ [2] = {
+ name = 'A2',
+ detail = 'function A2()',
+ kind = SymbolKind.Function,
+ range = {44, 64},
+ selectionRange = {53, 54},
+ valueRange = {44, 64},
+ },
+ },
+ },
+ [2] = {
+ name = 'B',
+ detail = 'function B()',
+ kind = SymbolKind.Function,
+ range = {70, 85},
+ selectionRange = {79, 79},
+ valueRange = {70, 85},
+ },
+}
+
+TEST [[
+local x = 1
+local function f()
+ local x = 'x'
+ local y = {}
+ --= 1
+end
+local y = true
+local z
+]]
+{
+ [1] = {
+ name = 'x',
+ detail = 'local x: number = 1',
+ kind = SymbolKind.Variable,
+ range = {7, 7},
+ selectionRange = {7, 7},
+ valueRange = {11, 11},
+ },
+ [2] = {
+ name = 'f',
+ detail = 'function f()',
+ kind = SymbolKind.Function,
+ range = {13, 79},
+ selectionRange = {28, 28},
+ valueRange = {13, 79},
+ children = {
+ [1] = {
+ name = 'x',
+ detail = 'local x: string = "x"',
+ kind = SymbolKind.Variable,
+ range = {42, 42},
+ selectionRange = {42, 42},
+ valueRange = {46, 48},
+ },
+ [2] = {
+ name = 'y',
+ detail = 'local y: {}',
+ kind = SymbolKind.Variable,
+ range = {60, 60},
+ selectionRange = {60, 60},
+ valueRange = {64, 65},
+ },
+ --[3] = {
+ -- name = 'z',
+ -- detail = 'global z: number = 1',
+ -- kind = SymbolKind.Object,
+ -- range = {71, 71},
+ -- selectionRange = {71, 71},
+ -- valueRange = {75, 75},
+ --},
+ },
+ },
+ [3] = {
+ name = 'y',
+ detail = 'local y: boolean = true',
+ kind = SymbolKind.Variable,
+ range = {87, 87},
+ selectionRange = {87, 87},
+ valueRange = {91, 94},
+ },
+ [4] = {
+ name = 'z',
+ detail = '',
+ kind = SymbolKind.Variable,
+ range = {102, 102},
+ selectionRange = {102, 102},
+ valueRange = {102, 102},
+ },
+}
+
+TEST [[
+local t = {
+ a = 1,
+ b = 2,
+ c = 3,
+}
+]]
+{
+ [1] = {
+ name = 't',
+ detail = EXISTS,
+ kind = SymbolKind.Variable,
+ range = {7, 7},
+ selectionRange = {7, 7},
+ valueRange = {11, 46},
+ children = {
+ [1] = {
+ name = 'a',
+ detail = 'field a: number = 1',
+ kind = SymbolKind.Class,
+ range = {17, 17},
+ selectionRange = {17, 17},
+ valueRange = {21, 21},
+ },
+ [2] = {
+ name = 'b',
+ detail = 'field b: number = 2',
+ kind = SymbolKind.Class,
+ range = {28, 28},
+ selectionRange = {28, 28},
+ valueRange = {32, 32},
+ },
+ [3] = {
+ name = 'c',
+ detail = 'field c: number = 3',
+ kind = SymbolKind.Class,
+ range = {39, 39},
+ selectionRange = {39, 39},
+ valueRange = {43, 43},
+ },
+ }
+ }
+}
+
+TEST [[
+local t = {
+ a = {
+ b = 1,
+ }
+}
+]]
+{
+ [1] = {
+ name = 't',
+ detail = EXISTS,
+ kind = SymbolKind.Variable,
+ range = {7, 7},
+ selectionRange = {7, 7},
+ valueRange = {11, 44},
+ children = {
+ [1] = {
+ name = 'a',
+ detail = EXISTS,
+ kind = SymbolKind.Class,
+ range = {17, 17},
+ selectionRange = {17, 17},
+ valueRange = {21, 42},
+ children = {
+ [1] = {
+ name = 'b',
+ detail = EXISTS,
+ kind = SymbolKind.Class,
+ range = {31, 31},
+ selectionRange = {31, 31},
+ valueRange = {35, 35},
+ }
+ }
+ },
+ }
+ }
+}
+
+TEST[[
+local function g()
+end
+
+g = 1
+]]{
+ [1] = {
+ name = 'g',
+ detail = 'function g()',
+ kind = SymbolKind.Function,
+ range = {1, 22},
+ selectionRange = {16, 16},
+ valueRange = {1, 22},
+ }
+}
+
+TEST[[
+function f(...)
+ local x = ...
+ print(x.a)
+end
+]]{
+ [1] = {
+ name = 'f',
+ detail = 'function f(...)',
+ kind = SymbolKind.Function,
+ range = {1, 52},
+ selectionRange = {10, 10},
+ valueRange = {1, 52},
+ children = {
+ [1] = {
+ name = 'x',
+ detail = EXISTS,
+ kind = SymbolKind.Variable,
+ range = {27, 27},
+ selectionRange = {27, 27},
+ valueRange = {31, 33},
+ }
+ }
+ },
+}
+
+TEST [[
+local t = {
+ a = 1,
+ b = 2,
+}
+
+local v = t
+]]{
+ [1] = {
+ name = 't',
+ detail = EXISTS,
+ kind = SymbolKind.Variable,
+ range = {7, 7},
+ selectionRange = {7, 7},
+ valueRange = {11, 35},
+ children = EXISTS,
+ },
+ [2] = {
+ name = 'v',
+ detail = EXISTS,
+ kind = SymbolKind.Variable,
+ range = {44, 44},
+ selectionRange = {44, 44},
+ valueRange = {48, 48},
+ },
+}
+
+TEST [[
+local x
+local function
+]]{
+ [1] = {
+ name = 'x',
+ detail = EXISTS,
+ kind = SymbolKind.Variable,
+ range = {7, 7},
+ selectionRange = {7, 7},
+ valueRange = {7, 7},
+ },
+ [2] = {
+ name = '',
+ detail = EXISTS,
+ kind = SymbolKind.Function,
+ range = {9, 22},
+ selectionRange = {22, 22},
+ valueRange = {9, 22},
+ }
+}
+
+-- 临时
+local fs = require 'bee.filesystem'
+local function testIfExit(path)
+ local buf = io.load(fs.path(path))
+ if buf then
+ TEST(buf)(EXISTS)
+ end
+end
+testIfExit[[D:\Github\lua\testes\coroutine.lua]]
+testIfExit[[D:\Github\War3-lua-map\scripts\game\init.lua]]
diff --git a/script/test/example/largeGlobal.txt b/script/test/example/largeGlobal.txt
new file mode 100644
index 00000000..23c93d6a
--- /dev/null
+++ b/script/test/example/largeGlobal.txt
@@ -0,0 +1,28101 @@
+--Generated By protoc-gen-lua Do not Edit
+local protobuf = require "protobuf.protobuf"
+local config_predefine_pb = require("Protol.config_predefine_pb")
+module('Protol.config_pb')
+
+ARENA_DATA_CFG = protobuf.Descriptor();
+ARENA_DATA_CFG_ACTIVITY_LEVEL_FIELD = protobuf.FieldDescriptor();
+ARENA_DATA_CFG_ACTIVITY_CYCLE_FIELD = protobuf.FieldDescriptor();
+ARENA_DATA_CFG_DURATION_FIELD = protobuf.FieldDescriptor();
+ARENA_DATA_CFG_DAY_LIST_FIELD = protobuf.FieldDescriptor();
+ARENA_DATA_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+ARENA_DATA_CFG_SPAN_TIME_FIELD = protobuf.FieldDescriptor();
+ARENA_DATA_CFG_MIN_RATIO_FIELD = protobuf.FieldDescriptor();
+ARENA_DATA_CFG_RATIO_ADDITION_FIELD = protobuf.FieldDescriptor();
+ARENA_DATA_CFG_MAX_RATIO_FIELD = protobuf.FieldDescriptor();
+ARENA_DATA_CFG_DIFF_TEAMMATE_FIELD = protobuf.FieldDescriptor();
+ARENA_DATA_CFG_DIFF_OPPONENT_FIELD = protobuf.FieldDescriptor();
+ARENA_DATA_CFGS = protobuf.Descriptor();
+ARENA_DATA_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ARENA_REWARD_CFG = protobuf.Descriptor();
+ARENA_REWARD_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ARENA_REWARD_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+ARENA_REWARD_CFG_ITEM_COUNT_FIELD = protobuf.FieldDescriptor();
+ARENA_REWARD_CFG_ATTRIBUTE_TYPE_FIELD = protobuf.FieldDescriptor();
+ARENA_REWARD_CFG_ATTRIBUTE_COUNT_FIELD = protobuf.FieldDescriptor();
+ARENA_REWARD_CFGS = protobuf.Descriptor();
+ARENA_REWARD_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOWINFO_CFG = protobuf.Descriptor();
+BOSS_SHOWINFO_CFG_ID_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOWINFO_CFG_SHOW_EQU_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOWINFO_CFGS = protobuf.Descriptor();
+BOSS_SHOWINFO_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_UI_CFG = protobuf.Descriptor();
+BOSS_SHOW_UI_CFG_ID_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_UI_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_UI_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_UI_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_UI_CFG_PAINT_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_UI_CFG_CLOSE_TIMER_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_UI_CFG_CAM_MOTION_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_UI_CFGS = protobuf.Descriptor();
+BOSS_SHOW_UI_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_CAM_CFG = protobuf.Descriptor();
+BOSS_SHOW_CAM_CFG_ID_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_CAM_CFG_POS_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_CAM_CFG_DURATION_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_CAM_CFG_ROLL_FIELD = protobuf.FieldDescriptor();
+BOSS_SHOW_CAM_CFGS = protobuf.Descriptor();
+BOSS_SHOW_CAM_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG = protobuf.Descriptor();
+BUFF_CFG_ID_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_NAME_TIPS_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_DESC_TIPS_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_ICON_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_VISUABLE_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_COUNTDOWN_TYPE_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_BUFF_TYPE_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_EXIST_TIME_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_ATK_LV_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_AM_BEATEN_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_AM_BEATEN_EFF_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_BEATEN_TIME_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_BEAT_BACK_TYPE_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_BEAT_DIS_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_BEAT_BACK_MOVE_TIME_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_AM_DEAD_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_DEAD_BACK_TYPE_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_DEAD_DIS_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_DEAD_BACK_MOVE_TIME_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_CRIT_EFFECT_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_DEAD_STRIKE_EFFECT_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_BUFF_WORD_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_BUFF_IDLE_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_BUFF_RUN_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_BUFF_EFFECT_FIELD = protobuf.FieldDescriptor();
+BUFF_CFG_BUFF_TRIGGER_EFFECT_FIELD = protobuf.FieldDescriptor();
+BUFF_CFGS = protobuf.Descriptor();
+BUFF_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BUFF_EFFECT_CFG = protobuf.Descriptor();
+BUFF_EFFECT_CFG_ID_FIELD = protobuf.FieldDescriptor();
+BUFF_EFFECT_CFG_FORMULA_ID_FIELD = protobuf.FieldDescriptor();
+BUFF_EFFECT_CFGS = protobuf.Descriptor();
+BUFF_EFFECT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG = protobuf.Descriptor();
+CHAR_DEFAULT_CFG_PROF_TYPE_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_GENDER_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_SHOW_INDEX_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_PROF_ICON_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_MODEL_PATH_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_PROFNAME_ICON_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_PROP_STARS_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_PROF_HEAD_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_POS_DES_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_PROF_NAME_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_PROF_RES_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_PROF_ANIM1_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_PROF_ANIM2_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_SKILL_RES_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_RANDOM_CFG_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_IS_OPEN_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_DEFAULT_PARTS_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_MP_TYPE_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFG_IS_MINISTER_FIELD = protobuf.FieldDescriptor();
+CHAR_DEFAULT_CFGS = protobuf.Descriptor();
+CHAR_DEFAULT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+COOLDOWN_CFG = protobuf.Descriptor();
+COOLDOWN_CFG_ID_FIELD = protobuf.FieldDescriptor();
+COOLDOWN_CFG_TATOL_TIME_FIELD = protobuf.FieldDescriptor();
+COOLDOWN_CFGS = protobuf.Descriptor();
+COOLDOWN_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG = protobuf.Descriptor();
+MONSTER_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_SHOW_NAME_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_SHOW_ICON_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_WHETHER_SHOWNAME_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_MONSTER_DESC_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_CAMP_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_CAMP_RELATION_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_PROPS_ID_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_ATTACK_LEVEL_LIMIT_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_SKILLS_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_AVATAR_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_AVATAR_SCALE_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_ACT_IDLE_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_ACT_MOVE_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_ACT_IDLE_BATTLE_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_ACT_MOVE_BATTLE_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_ACT_BORN_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_BORN_TIME_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_ACT_DEAD_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_RANGE_TYPE_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_RANGE_PARA1_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_RANGE_PARA2_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_DROP_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_HEAD_PORTRAIT_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_RADIUS_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_MONSTER_TYPE_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_LOCK_SIZE_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_HALO_SWITCH_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFG_ACTIVITY_EXCLUSIVE_FIELD = protobuf.FieldDescriptor();
+MONSTER_CFGS = protobuf.Descriptor();
+MONSTER_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BUSINESS_ACTIVITY_CFG = protobuf.Descriptor();
+BUSINESS_ACTIVITY_CFG_GUID_FIELD = protobuf.FieldDescriptor();
+BUSINESS_ACTIVITY_CFG_BUSINESS_ID_FIELD = protobuf.FieldDescriptor();
+BUSINESS_ACTIVITY_CFGS = protobuf.Descriptor();
+BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG = protobuf.Descriptor();
+ACTIVITY_CFG_GUID_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_DACTIVITY_NAME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_ACTIVITY_PLAY_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_NEED_LEVEL_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_TOTAL_TIMES_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_ACTIVATION_POINT_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_ACTIVATION_TOPLIMIT_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_ACTIVATION_MODE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_START_WEEKS_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_SIGNUP_TIME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_SIGNDOWN_TIME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_BEGIN_TIME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_END_TIME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_DAILY_TYPE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_WHETHER_BATTLE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_DACTIVITY_ICON_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_PARTAKE_MODE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_PARTAKE_SUBTYPE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_TICKETITEM_ID_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_TICKETITEM_COUNT_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_CONDUCT_SCENEID_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_FINDING_PATH_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_OPEN_FUNC_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_OPEN_FUNC_PARAM_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_ITEM_COUNT_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_TIME_SHOW_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_FORM_SHOW_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_TIPS_SHOW_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_CRYSTAL_SHOW_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_ITEMS_SHOW_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_CUE_SHOW_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_CUE_TEXT_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_CORRECT_TEXT_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFG_NEGATE_TEXT_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_CFGS = protobuf.Descriptor();
+ACTIVITY_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_CFG = protobuf.Descriptor();
+ACTIVATION_CFG_EVERYDAY_TOPLIMIT_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_CFG_RESET_TIME_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_CFG_DEPOSIT_LV_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_CFG_DEPOSIT_TOPLIMIT_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_CFGS = protobuf.Descriptor();
+ACTIVATION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_REWARD_CFG = protobuf.Descriptor();
+ACTIVATION_REWARD_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_REWARD_CFG_ACTIVATION_STAGE_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_REWARD_CFG_REWARD_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_REWARD_CFG_REWARD_ITEM_COUNT_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_REWARD_CFG_REWARD_PLUS_FIELD = protobuf.FieldDescriptor();
+ACTIVATION_REWARD_CFGS = protobuf.Descriptor();
+ACTIVATION_REWARD_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TRADE_TOP_TABS_CFG = protobuf.Descriptor();
+TRADE_TOP_TABS_CFG_ID_FIELD = protobuf.FieldDescriptor();
+TRADE_TOP_TABS_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+TRADE_TOP_TABS_CFG_TABS_FIELD = protobuf.FieldDescriptor();
+TRADE_TOP_TABS_CFGS = protobuf.Descriptor();
+TRADE_TOP_TABS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TRADE_SUB_TABS_CFG = protobuf.Descriptor();
+TRADE_SUB_TABS_CFG_ID_FIELD = protobuf.FieldDescriptor();
+TRADE_SUB_TABS_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+TRADE_SUB_TABS_CFG_RULES_FIELD = protobuf.FieldDescriptor();
+TRADE_SUB_TABS_CFG_FILTER_RULES1_FIELD = protobuf.FieldDescriptor();
+TRADE_SUB_TABS_CFG_FILTER_RULES2_FIELD = protobuf.FieldDescriptor();
+TRADE_SUB_TABS_CFG_FILTER_RULES3_FIELD = protobuf.FieldDescriptor();
+TRADE_SUB_TABS_CFG_FILTER_RULES4_FIELD = protobuf.FieldDescriptor();
+TRADE_SUB_TABS_CFG_SORT_RULES_FIELD = protobuf.FieldDescriptor();
+TRADE_SUB_TABS_CFGS = protobuf.Descriptor();
+TRADE_SUB_TABS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TRADE_FILTER_RULES_CFG = protobuf.Descriptor();
+TRADE_FILTER_RULES_CFG_ID_FIELD = protobuf.FieldDescriptor();
+TRADE_FILTER_RULES_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+TRADE_FILTER_RULES_CFG_FIELDS_FIELD = protobuf.FieldDescriptor();
+TRADE_FILTER_RULES_CFG_VALUES_FIELD = protobuf.FieldDescriptor();
+TRADE_FILTER_RULES_CFGS = protobuf.Descriptor();
+TRADE_FILTER_RULES_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TRADE_SORT_RULES_CFG = protobuf.Descriptor();
+TRADE_SORT_RULES_CFG_ID_FIELD = protobuf.FieldDescriptor();
+TRADE_SORT_RULES_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+TRADE_SORT_RULES_CFG_PROP_FIELD = protobuf.FieldDescriptor();
+TRADE_SORT_RULES_CFG_UP_FIELD = protobuf.FieldDescriptor();
+TRADE_SORT_RULES_CFGS = protobuf.Descriptor();
+TRADE_SORT_RULES_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG = protobuf.Descriptor();
+BASE_PROP_CFG_PROF_TYPE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_HP_MAX_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_MP_MAX_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_ATTACK_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_DEFENSE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_HIT_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_DODGE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_CRITICAL_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_ANTI_CRITICAL_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_CRITICAL_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_XP_MAX_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_HIT_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_DODGE_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_CRITICAL_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_ANTI_CRITICAL_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_CRITICAL_POWER_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_DECELERATTE_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_ANTI_DECELERATTE_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_SLEEP_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_ANTI_SLEEP_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_HOLD_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_ANTI_HOLD_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_CHARM_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_ANTI_CHARM_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_SILENCE_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_ANTI_SILENCE_POWER_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_SPEED_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_HP_SELF_HEAL_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_MP_SELF_HEAL_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_HP_HIT_RETURN_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_MP_HIT_RETURN_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_HP_DAMAGE_RETURN_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_MP_DAMAGE_RETURN_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_EXTRA_DAMAGE_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_REDUCE_DAMAGE_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_EXTRA_HEAL_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_EXTRA_HEALED_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_MAUD_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_MIND_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_CONSTITUTION_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_INTENSITY_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_DEADLY_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_DEFY_DEFENSE_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_BLOCK_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_DEFY_BLOCK_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_HP_KILL_RETURN_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_EXP_KILL_RETURN_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_REDUCE_SKILL_CD_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_REDUCE_SKILL_COST_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_NPC_EXTRA_DAMAGE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_REDUCE_NPC_DAMAGE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_XP_SELF_HEAL_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFG_LOGIC_REPEAT3_RATE_FIELD = protobuf.FieldDescriptor();
+BASE_PROP_CFGS = protobuf.Descriptor();
+BASE_PROP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG = protobuf.Descriptor();
+LEVEL_EXP_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG_NEED_EXP_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG_CAMP_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG_COMBAT_POINT_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG_KILL_POPULARITY_MIN_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG_KILL_POPULARITY_MAX_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG_ASSISTS_POPULARITY_MIN_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG_GOLD_COUPON_MAX_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG_EXP_MAX_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG_POPULARITY_MAX_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG_BIND_POPULARITY_MAX_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFG_ANNIHILATION_REWARD_FIELD = protobuf.FieldDescriptor();
+LEVEL_EXP_CFGS = protobuf.Descriptor();
+LEVEL_EXP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+LANGUAGE_CFG = protobuf.Descriptor();
+LANGUAGE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+LANGUAGE_CFG_TEXT_FIELD = protobuf.FieldDescriptor();
+LANGUAGE_CFGS = protobuf.Descriptor();
+LANGUAGE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG = protobuf.Descriptor();
+MISSION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_GROUPID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_COLOUR_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_NAME_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_TEXT_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_TARGET1_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_TARGET2_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_TARGET3_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_TYPE_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_TARGETTYPE_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_OCCUPATION_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_REPEAT_WHETHER_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_DIRECTACCE_WHETHER_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_AUTO_WHETHER_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_AUTO_COMMIT_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_FRONTID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_TRIGGERLV_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_GIVEUP_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSIONNODE_LIST_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_DAILY_TIMES_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_RESET_TIME_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_DURATION_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_ACCEPT_SCENEID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_ACCEPT_NPCID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_CONDUCT_SCENEID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_CONDUCT_NPCID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_SUBMIT_SCENEID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_SUBMIT_NPCID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_ACCEPTSEAT_PLOTID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_CONDUCTSEAT_PLOTID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_SUBMITSEAT_PLOTID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_KILL_NPCID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_KILL_NPCNUM_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_KILL_NPCDROP_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_TALK_PLOTID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_COLLECT_ITEMID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_COLLECT_ITEMNUM_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_SCENE_ID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_POS_X_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_POS_Z_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_COLLECTION_NPCID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_COLLECTION_NPCNUM_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_USED_ITEMID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_INTO_BATTLEID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_TARGET_GRADE_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_FUNCTION_SCRIPT_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_ACCEPT_PLOTID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_CONDUCT_PLOTID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_SUBMIT_PLOTID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_TRIGGER_BLUR_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_ACCEPT_BLUR_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_CONDUCT_BLUR_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_REWARD_ITEMID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_FAILED_ITEMID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_EXCLUSIVE4_ITEMID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_DISPLAY_WHETHER_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_ACCEPT_DELIVERY_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_MISSION_CONVOYS_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_BIAOCHE_MOUNT_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_SCENE_IS_COPY_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_ALLOW_SHOW_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_ACCEPTED_SHOW_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_COMMIT_SHOW_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_ACCEPTED_INEXECUTION_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_OPEN_FUNC_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_BTN_NAME_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_EVENT_TYPE_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_KILL_PLAYER_NUM_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_KILL_PLAYER_LEVEL_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_KILL_PLAYER_MAP_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_SUPPORT_PAUSE_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_SUBMISSION_HEAD_FIELD = protobuf.FieldDescriptor();
+MISSION_CFG_ROUTE_MARK_ID_FIELD = protobuf.FieldDescriptor();
+MISSION_CFGS = protobuf.Descriptor();
+MISSION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MISSION_GROUP_CFG = protobuf.Descriptor();
+MISSION_GROUP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MISSION_GROUP_CFG_QUEST_GROUPNAME_FIELD = protobuf.FieldDescriptor();
+MISSION_GROUP_CFG_QUEST_GROUPTIPS_FIELD = protobuf.FieldDescriptor();
+MISSION_GROUP_CFGS = protobuf.Descriptor();
+MISSION_GROUP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG = protobuf.Descriptor();
+NPC_SPAWN_METHOD_CFG_ID_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_GROUP_ID_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_NPC_ID_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_POS_X_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_POS_Y_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_POS_Z_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_ORIENTATION_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_RELIVE_TYPE_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_RELIVE_TIME_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_SERVICE_LIST_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFG_MISSION_IDS_FIELD = protobuf.FieldDescriptor();
+NPC_SPAWN_METHOD_CFGS = protobuf.Descriptor();
+NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+NPC_FUNCTION_CFG = protobuf.Descriptor();
+NPC_FUNCTION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+NPC_FUNCTION_CFG_SCENE_ID_FIELD = protobuf.FieldDescriptor();
+NPC_FUNCTION_CFG_OPEN_DIALOG_FIELD = protobuf.FieldDescriptor();
+NPC_FUNCTION_CFG_BUTTONS_FIELD = protobuf.FieldDescriptor();
+NPC_FUNCTION_CFG_CONTENT_FIELD = protobuf.FieldDescriptor();
+NPC_FUNCTION_CFG_FUNCTIONS_FIELD = protobuf.FieldDescriptor();
+NPC_FUNCTION_CFG_FUNC_PARA_FIELD = protobuf.FieldDescriptor();
+NPC_FUNCTION_CFG_SHOW_SCALE_FIELD = protobuf.FieldDescriptor();
+NPC_FUNCTION_CFGS = protobuf.Descriptor();
+NPC_FUNCTION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PLAYSCG_CFG = protobuf.Descriptor();
+PLAYSCG_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PLAYSCG_CFG_STATE_FIELD = protobuf.FieldDescriptor();
+PLAYSCG_CFGS = protobuf.Descriptor();
+PLAYSCG_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG = protobuf.Descriptor();
+PLOT_DATA_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_NEXT_PLOT_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_CONTENT_ID_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_CAN_SKIP_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_ID_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_IMAGE_ID_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_STAY_TIME_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_AUDIORES_ID_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_POS_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_SCALE_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_IMG_LEFT_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_NAME_LEFT_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_DARK_LEFT_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_ZOOM_LEFT_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_IMG_RIGHT_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_NAME_RIGHT_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_DARK_RIGHT_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_ZOOM_RIGHT_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_SHOW_BG_ID_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFG_INSERT_NAME_FIELD = protobuf.FieldDescriptor();
+PLOT_DATA_CFGS = protobuf.Descriptor();
+PLOT_DATA_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GLOBAL_PARAM_CFG = protobuf.Descriptor();
+GLOBAL_PARAM_CFG_ID_FIELD = protobuf.FieldDescriptor();
+GLOBAL_PARAM_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+GLOBAL_PARAM_CFG_VALUE_FIELD = protobuf.FieldDescriptor();
+GLOBAL_PARAM_CFGS = protobuf.Descriptor();
+GLOBAL_PARAM_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PROP_TYPE_CFG = protobuf.Descriptor();
+PROP_TYPE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PROP_TYPE_CFG_IS_RATE_FIELD = protobuf.FieldDescriptor();
+PROP_TYPE_CFG_ATTRIBUTE_FIELD = protobuf.FieldDescriptor();
+PROP_TYPE_CFGS = protobuf.Descriptor();
+PROP_TYPE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ATTRIBUTE_SHOW_CFG = protobuf.Descriptor();
+ATTRIBUTE_SHOW_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ATTRIBUTE_SHOW_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+ATTRIBUTE_SHOW_CFGS = protobuf.Descriptor();
+ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RES_PATH_CFG = protobuf.Descriptor();
+RES_PATH_CFG_ID_FIELD = protobuf.FieldDescriptor();
+RES_PATH_CFG_RES_PATH_FIELD = protobuf.FieldDescriptor();
+RES_PATH_CFG_ONE_BUNDLE_FIELD = protobuf.FieldDescriptor();
+RES_PATH_CFGS = protobuf.Descriptor();
+RES_PATH_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG = protobuf.Descriptor();
+SCENE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_MAPID_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_IS_SAME_SCENE_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_SCENE_ROUTE_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_CAMERA_PATH_RES_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_SCENE_RECAST_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_SCENE_LENGTH_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_SCENE_WIDTH_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_REFRESH_TYPE_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_REFRESH_PARAMETER_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_PARTNER_CARRY_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_SHOW_CG_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_RES_PATH_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_BORN_X_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_BORN_Y_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_BORN_Z_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_BORN_ROTATION_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_GOAL_X_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_GOAL_Y_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_GOAL_Z_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_DEFAULT_ATTACK_PATTERM_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_SWITCH_ATTACK_PATTERM_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_CAN_TEAM_CALL_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_IS_BATTLE_FIELD_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_CAM_OPTIONS_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_CFG_CAN_USE_WORLDMAP_FIELD = protobuf.FieldDescriptor();
+SCENE_CFGS = protobuf.Descriptor();
+SCENE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG = protobuf.Descriptor();
+SKILL_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_NAME_TIP_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_SKILL_LEVEL_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_PLAYER_LEVEL_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LEVELUP_COST_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_NEXT_LEVEL_ID_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_SKILL_ICON_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_SKILL_PROF_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_TIPS2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_TIPS_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_TIPS3_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_TIPS_PARA1_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_TIPS_PARA2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_TIPS_PARA3_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_TIPS_PARA4_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_TIPS_PARA5_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_TIPS_PARA6_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_NEXT_SKILL_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_NEXT_CHANGE_SKILL_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_AUTO_SKILL_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_NEXT_SKILL_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_SKILL_TYPE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ENERGY_COST_TYPE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ENERGY_VALUE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MAX_ENERGY_VALUE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_RET_ENERGY_VALUE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_RET_HP_EFFECT_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_SHOW_PROGRESS_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_PROGRESS_WORD_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_IS_TRIGGER_PASSIVE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_IS_PASSIVE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_TRIGGER_TYPE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ACCELERATE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_IS_CONCURRENCY_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_INT_CHANNEL_WHEN_BEATEN_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_IS_CHANNEL_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_CHANNEL_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_CAN_CANCEL_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_BASE_POS_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_TARGET_TYPE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_REMOVE_BUFF_WHEN_CANCEL_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_WORK_WHEN_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_CD_GROUP_ID_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_CD_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_CD_NUM_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_CAST_DISTANCE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOCKED_BY_SERVER_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_RANGE_TYPE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_RANGE_PARA1_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_RANGE_PARA2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOCK_TARGET_DISTANCE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOCK_MAX_COUNT_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_CAST_SWING_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_CAST_STIFF_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_CAST_BACK_SWING_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MAGIC_PERFORMANCE_ID_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_HIT_EFFECT_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_HIT_EFFECT_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TYPE1_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_POINT1_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ADJUST_DISTANCE1_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_DISTANCE1_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TIME1_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TYPE2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_POINT2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ADJUST_DISTANCE2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_DISTANCE2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TIME2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TYPE3_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_POINT3_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ADJUST_DISTANCE3_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_DISTANCE3_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TIME3_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TYPE4_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_POINT4_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ADJUST_DISTANCE4_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_DISTANCE4_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TIME4_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TYPE5_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_POINT5_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ADJUST_DISTANCE5_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_DISTANCE5_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TIME5_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TYPE6_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_POINT6_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ADJUST_DISTANCE6_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_DISTANCE6_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TIME6_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TYPE7_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_POINT7_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ADJUST_DISTANCE7_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_DISTANCE7_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TIME7_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TYPE8_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_POINT8_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ADJUST_DISTANCE8_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_DISTANCE8_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_MOVE_TIME8_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_1_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_1_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_1_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_3_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_3_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_3_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_4_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_4_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_4_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_5_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_5_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_5_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_6_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_6_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_6_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_7_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_7_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_7_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_8_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_8_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_8_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_9_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_9_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_9_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_10_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_10_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_10_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_11_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_11_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_11_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TYPE_12_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_TIME_12_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_LOGIC_ID_12_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_AFFECT_RANGE_TYPE_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ART_PARA1_FIELD = protobuf.FieldDescriptor();
+SKILL_CFG_ART_PARA2_FIELD = protobuf.FieldDescriptor();
+SKILL_CFGS = protobuf.Descriptor();
+SKILL_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SKILL_ID_CFG = protobuf.Descriptor();
+SKILL_ID_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SKILL_ID_CFG_SKILL_ID_ARRAY_FIELD = protobuf.FieldDescriptor();
+SKILL_ID_CFGS = protobuf.Descriptor();
+SKILL_ID_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG = protobuf.Descriptor();
+SKILL_CONDITION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_RANGE_TYPE_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_RANGE_ANGLE_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_RANGE_OFFSET_X_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_RANGE_OFFSET_Z_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_RANGE_PARA1_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_RANGE_PARA2_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_ENTITY_TYPES_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_INCLUDE_TARGET_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_TARGET_NUM_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_IGNORE_BLOCK_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_IGNORE_DODGE_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_REPEAT_NUM_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_HIT_RATE_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_ATK_LV_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_AM_BEATEN_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_AM_BEATEN_EFF_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_BEATEN_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_BEAT_BACK_TYPE_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_BEAT_DIS_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_BEAT_BACK_MOVE_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_AM_DEAD_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_DEAD_BACK_TYPE_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_DEAD_DIS_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_DEAD_BACK_MOVE_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_SELF_EFFECT_1_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_SELF_HIT_BUFF1_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_SELF_HIT_BUFF_CHANCE1_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_HIT_EFFECT_1_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_HIT_EFFECT_2_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_HIT_EFFECT_3_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_HIT_BUFF1_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE1_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_HIT_BUFF2_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE2_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_HIT_BUFF3_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE3_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_CRIT_EFFECT_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_DEAD_STRIKE_EFFECT_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_BUFF_WHEN_CRIT_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_CRIT_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_BUFF_WHEN_DEADSTRIKE_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_DEADSTRIKE_FIELD = protobuf.FieldDescriptor();
+SKILL_CONDITION_CFGS = protobuf.Descriptor();
+SKILL_CONDITION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TEST_CFG = protobuf.Descriptor();
+TEST_CFG_ID_FIELD = protobuf.FieldDescriptor();
+TEST_CFG_TESTSTRUCT1_FIELD = protobuf.FieldDescriptor();
+TEST_CFG_TES_FIELD = protobuf.FieldDescriptor();
+TEST_CFGS = protobuf.Descriptor();
+TEST_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG = protobuf.Descriptor();
+ITEM_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_ITEM_NAME_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_FORMULA_ID_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_ITEM_DESC_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_STACK_MAX_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_NEED_LEVEL_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_NEED_PROF_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_ITEM_TYPE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_ITEM_SUB_TYPE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_ITEM_PART_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_DISPLAY_TYPE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_ITEM_COLOR_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_ITEM_ICON_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_ITEM_MARK_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_OWN_MAX_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_COULD_TRADE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_TRADE_COOLDOWN_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_COULD_SELL_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_SELL_COST_TYPE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_SELL_COST_NUM_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_COULD_USE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_COULD_WINDOWUSE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_WINDOWUSE_MAX_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_COULD_SHOW_USE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_USE_DELAY_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_COULD_BULK_USE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_CD_GROUP_ID_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_CD_TIME_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_COULD_IN_STORAGE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_COULD_OBTAIN_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_OBTAIN_LIST_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_PROP_EFFECT1_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_PROP_EFFECT2_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_PROP_EFFECT3_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_PROP_EFFECT4_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_PROP_EFFECT5_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_PROP_EFFECT6_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_PROP_EFFECT7_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_PROP_EFFECT8_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_PRICE_GOLD_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_LUCK_VALUE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_POP_VALUE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_COMBAT_POINT_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_EFFECT_TIMELIMITED_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_DROP_ID_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_COST_TYPE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_COST_COUNT_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_HOLE_NUM_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_INLAY_TYPE_FIELD = protobuf.FieldDescriptor();
+ITEM_CFG_INLAY_LEVEL_FIELD = protobuf.FieldDescriptor();
+ITEM_CFGS = protobuf.Descriptor();
+ITEM_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_CFG = protobuf.Descriptor();
+FIGHTCRIME_CFG_ID_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_CFG_VALUE_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_CFG_COLOR_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_CFG_IMGBG_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_CFG_IMGICON_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_CFG_IMGFRAME_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_CFG_IMGNUMBER_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_CFGS = protobuf.Descriptor();
+FIGHTCRIME_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+FIGHTCIRME_REWARD_CFG = protobuf.Descriptor();
+FIGHTCIRME_REWARD_CFG_ID_FIELD = protobuf.FieldDescriptor();
+FIGHTCIRME_REWARD_CFG_ITEMS_FIELD = protobuf.FieldDescriptor();
+FIGHTCIRME_REWARD_CFGS = protobuf.Descriptor();
+FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_MONSTER_CFG = protobuf.Descriptor();
+FIGHTCRIME_MONSTER_CFG_ID_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_MONSTER_CFG_MONSTERS_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_MONSTER_CFG_ICONS_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_MONSTER_CFG_TIME_FIELD = protobuf.FieldDescriptor();
+FIGHTCRIME_MONSTER_CFGS = protobuf.Descriptor();
+FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+EQUIP_CFG = protobuf.Descriptor();
+EQUIP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+EQUIP_CFG_UPGRADE_ID_FIELD = protobuf.FieldDescriptor();
+EQUIP_CFG_UPGRADE_MATERIAL_FIELD = protobuf.FieldDescriptor();
+EQUIP_CFG_UPGRADE_REQ_LEVEL_FIELD = protobuf.FieldDescriptor();
+EQUIP_CFG_REFINE_MATERIAL_FIELD = protobuf.FieldDescriptor();
+EQUIP_CFG_REFINE_COUNT_FIELD = protobuf.FieldDescriptor();
+EQUIP_CFG_REFINE_COST_FIELD = protobuf.FieldDescriptor();
+EQUIP_CFG_ACTIVE_STRENGTH_MATERIAL_FIELD = protobuf.FieldDescriptor();
+EQUIP_CFG_ACTIVE_STRENGTH_COUNT_FIELD = protobuf.FieldDescriptor();
+EQUIP_CFG_ACTIVE_COST_FIELD = protobuf.FieldDescriptor();
+EQUIP_CFGS = protobuf.Descriptor();
+EQUIP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+EQUIP_SET_CFG = protobuf.Descriptor();
+EQUIP_SET_CFG_ID_FIELD = protobuf.FieldDescriptor();
+EQUIP_SET_CFG_EQUIP_IDS_FIELD = protobuf.FieldDescriptor();
+EQUIP_SET_CFG_SET_NAME_FIELD = protobuf.FieldDescriptor();
+EQUIP_SET_CFG_EQUIP_LEVEL_FIELD = protobuf.FieldDescriptor();
+EQUIP_SET_CFGS = protobuf.Descriptor();
+EQUIP_SET_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+EQUIP_SET_PROP_CFG = protobuf.Descriptor();
+EQUIP_SET_PROP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+EQUIP_SET_PROP_CFG_EQUIP_COUNT_FIELD = protobuf.FieldDescriptor();
+EQUIP_SET_PROP_CFG_ACTIVE_PROP_FIELD = protobuf.FieldDescriptor();
+EQUIP_SET_PROP_CFGS = protobuf.Descriptor();
+EQUIP_SET_PROP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG = protobuf.Descriptor();
+STRENGTHEN_CFG_ID_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_SEG_LIMIT_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_RATE_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_REQ_LEVEL_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_MAT_ID_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_MAT_NUM_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_PROP_EFFECT1_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_PROP_EFFECT2_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_PROP_EFFECT3_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_PROP_EFFECT4_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_EXTRA_EFFECT_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_BLESSING_LIMIT_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_ASSIST_JEWEL_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFG_COMBAT_POINT_FIELD = protobuf.FieldDescriptor();
+STRENGTHEN_CFGS = protobuf.Descriptor();
+STRENGTHEN_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_LIST_CFG = protobuf.Descriptor();
+RUNE_MAKE_LIST_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_LIST_CFG_WEAPON_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_LIST_CFG_HEAD_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_LIST_CFG_CLOTHES_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_LIST_CFG_TROUSERS_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_LIST_CFG_SHOES_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_LIST_CFGS = protobuf.Descriptor();
+RUNE_MAKE_LIST_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG = protobuf.Descriptor();
+RUNE_MAKE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG_COST_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG_MAKE_MATERIAL_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG_ELITE_MATERIAL_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG_PROP_COUNT_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG_SPECIAL_SPELL_RATE_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG_SPECIAL_SPELL_ELITE_RATE_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG_SPELL_GROUP_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG_SPELL_RATE_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG_SPELL_ELITE_RATE_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG_PROP_GROUP_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFG_MAGIC_GROUP_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_MAKE_CFGS = protobuf.Descriptor();
+RUNE_MAKE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG = protobuf.Descriptor();
+RUNE_PROP_GROUP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_ASSIST_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_GROUP_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_VALUE1_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_VALUE2_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_VALUE3_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_VALUE4_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_VALUE5_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_VALUE6_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE1_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE2_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE3_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE4_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE5_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE6_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_GROUP_CFGS = protobuf.Descriptor();
+RUNE_PROP_GROUP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+EQUIP_LIST_CFG = protobuf.Descriptor();
+EQUIP_LIST_CFG_ID_FIELD = protobuf.FieldDescriptor();
+EQUIP_LIST_CFG_EQUIP_LIST_FIELD = protobuf.FieldDescriptor();
+EQUIP_LIST_CFGS = protobuf.Descriptor();
+EQUIP_LIST_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_GROUP_CFG = protobuf.Descriptor();
+RUNE_SKILL_GROUP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_GROUP_CFG_GROUP_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_GROUP_CFG_SKILL_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_GROUP_CFG_LEVEL_RAND_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_GROUP_CFG_RATE_1_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_GROUP_CFG_RATE_2_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_GROUP_CFG_RATE_3_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_GROUP_CFG_RATE_4_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_GROUP_CFG_RATE_5_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_GROUP_CFGS = protobuf.Descriptor();
+RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG = protobuf.Descriptor();
+RUNE_DECOMPOSE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG_SILVER_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG_GOLD_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG_ITEM_ID1_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG_ITEM_RATE1_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG_ITEM_COUNT1_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG_ITEM_ID2_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG_ITEM_RATE2_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG_ITEM_COUNT2_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG_ITEM_ID3_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG_ITEM_RATE3_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFG_ITEM_COUNT3_FIELD = protobuf.FieldDescriptor();
+RUNE_DECOMPOSE_CFGS = protobuf.Descriptor();
+RUNE_DECOMPOSE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+JEWELRY_MAKE_CFG = protobuf.Descriptor();
+JEWELRY_MAKE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+JEWELRY_MAKE_CFG_POP_COST_FIELD = protobuf.FieldDescriptor();
+JEWELRY_MAKE_CFG_MONEY_COST_FIELD = protobuf.FieldDescriptor();
+JEWELRY_MAKE_CFGS = protobuf.Descriptor();
+JEWELRY_MAKE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+WORLD_MAP_CFG = protobuf.Descriptor();
+WORLD_MAP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+WORLD_MAP_CFG_SCENE_NAME_FIELD = protobuf.FieldDescriptor();
+WORLD_MAP_CFG_SCENE_NAMESHOW_FIELD = protobuf.FieldDescriptor();
+WORLD_MAP_CFG_OPEN_LV_FIELD = protobuf.FieldDescriptor();
+WORLD_MAP_CFG_OPENLV_SHOW_FIELD = protobuf.FieldDescriptor();
+WORLD_MAP_CFG_LANGUAGE_ID_FIELD = protobuf.FieldDescriptor();
+WORLD_MAP_CFG_SCENE_ID_FIELD = protobuf.FieldDescriptor();
+WORLD_MAP_CFG_INITIAL_WHETHER_FIELD = protobuf.FieldDescriptor();
+WORLD_MAP_CFG_SCENE_ICON_FIELD = protobuf.FieldDescriptor();
+WORLD_MAP_CFGS = protobuf.Descriptor();
+WORLD_MAP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_CURRENCY_CFG = protobuf.Descriptor();
+PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD = protobuf.FieldDescriptor();
+PARTNER_CURRENCY_CFG_CURRENCY_NUM_FIELD = protobuf.FieldDescriptor();
+PARTNER_CURRENCY_CFGS = protobuf.Descriptor();
+PARTNER_CURRENCY_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG = protobuf.Descriptor();
+PARTNER_ACTIVATION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_PLOTID_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_BRANCHPLOTID_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_PARTNERID_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_PARTNERIMPRESSIONLEVEL_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_COMBATPOWER_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_ICON_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_MOODIDS_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_PROPORTIONS_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_MAXIMPRESSIONLEVEL_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_GITS_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_PRESENTATION1_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_PRESENTATION2_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_PRESENTATION3_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_MOVE_HEAD_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_HEAD_TIME_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_MOVE_BODY_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_BODY_TIME_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_MOVE_LEG_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_LEG_TIME_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_MOVE_PROMOTE_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFG_PRONOTE_TIME_FIELD = protobuf.FieldDescriptor();
+PARTNER_ACTIVATION_CFGS = protobuf.Descriptor();
+PARTNER_ACTIVATION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_MOOD_CFG = protobuf.Descriptor();
+PARTNER_MOOD_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_MOOD_CFG_GIFTID_FIELD = protobuf.FieldDescriptor();
+PARTNER_MOOD_CFG_MOODTEXT_FIELD = protobuf.FieldDescriptor();
+PARTNER_MOOD_CFG_MULTIPLE_FIELD = protobuf.FieldDescriptor();
+PARTNER_MOOD_CFGS = protobuf.Descriptor();
+PARTNER_MOOD_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_IMPRESSION_CFG = protobuf.Descriptor();
+PARTNER_IMPRESSION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_IMPRESSION_CFG_PARTNERID_FIELD = protobuf.FieldDescriptor();
+PARTNER_IMPRESSION_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+PARTNER_IMPRESSION_CFG_BIOGRAPHYID_FIELD = protobuf.FieldDescriptor();
+PARTNER_IMPRESSION_CFGS = protobuf.Descriptor();
+PARTNER_IMPRESSION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_IMPRE_LEVELUP_CFG = protobuf.Descriptor();
+PARTNER_IMPRE_LEVELUP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_IMPRE_LEVELUP_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+PARTNER_IMPRE_LEVELUP_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+PARTNER_IMPRE_LEVELUP_CFG_EXP_FIELD = protobuf.FieldDescriptor();
+PARTNER_IMPRE_LEVELUP_CFGS = protobuf.Descriptor();
+PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_MULTIPLE_CFG = protobuf.Descriptor();
+PARTNER_MULTIPLE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_MULTIPLE_CFG_CLICKGROWTH_FIELD = protobuf.FieldDescriptor();
+PARTNER_MULTIPLE_CFG_PROBABILITY_FIELD = protobuf.FieldDescriptor();
+PARTNER_MULTIPLE_CFG_MULTIPLE_FIELD = protobuf.FieldDescriptor();
+PARTNER_MULTIPLE_CFGS = protobuf.Descriptor();
+PARTNER_MULTIPLE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG = protobuf.Descriptor();
+PARTNER_STAR_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_PARTNER_TYPE_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_STAR_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_STUDY_GROUP_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_STUDY_LIMIT_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_STUDY_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_STUDY_ITEM_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_STUDY_COST_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_EXCLUDE_ITEM_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_EXCLUDE_COST_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_STAR_PROP1_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_STAR_PROP2_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_STAR_PROP3_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_UPSTAR_ITEM_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_UPSTAR_COST_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_REBUILD_ITEM_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFG_REBUILD_COST_FIELD = protobuf.FieldDescriptor();
+PARTNER_STAR_CFGS = protobuf.Descriptor();
+PARTNER_STAR_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_STUDY_CFG = protobuf.Descriptor();
+PARTNER_STUDY_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_STUDY_CFG_STUDY_GROUP_FIELD = protobuf.FieldDescriptor();
+PARTNER_STUDY_CFG_STUDY_PROP_FIELD = protobuf.FieldDescriptor();
+PARTNER_STUDY_CFGS = protobuf.Descriptor();
+PARTNER_STUDY_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_ITEM_COMPOUND_CFG = protobuf.Descriptor();
+PARTNER_ITEM_COMPOUND_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_ITEM_COMPOUND_CFG_FRAGMENT_NUM_FIELD = protobuf.FieldDescriptor();
+PARTNER_ITEM_COMPOUND_CFG_NEED_FRAGMENT_NUM_FIELD = protobuf.FieldDescriptor();
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_TYPE_FIELD = protobuf.FieldDescriptor();
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_NUM_FIELD = protobuf.FieldDescriptor();
+PARTNER_ITEM_COMPOUND_CFGS = protobuf.Descriptor();
+PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTENR_EXPERIENCE_CFG = protobuf.Descriptor();
+PARTENR_EXPERIENCE_CFG_KEY_FIELD = protobuf.FieldDescriptor();
+PARTENR_EXPERIENCE_CFG_COST_ITEM_FIELD = protobuf.FieldDescriptor();
+PARTENR_EXPERIENCE_CFG_COST_ITEM_NUM_FIELD = protobuf.FieldDescriptor();
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_NUM_FIELD = protobuf.FieldDescriptor();
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_EVENT_FIELD = protobuf.FieldDescriptor();
+PARTENR_EXPERIENCE_CFG_EVENT_TYPE_FIELD = protobuf.FieldDescriptor();
+PARTENR_EXPERIENCE_CFGS = protobuf.Descriptor();
+PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG = protobuf.Descriptor();
+PARTNER_BASE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_SHOW_NAME_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_LOCK_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_HEAD_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_DRAW_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_POKEDEX_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_SKILLS_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_AVATAR_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_ACT_IDLE_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_ACT_MOVE_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_ACT_BORN_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_ACT_DEAD_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_RESURRECTION_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_ADDITION_RATIO_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_QUALITY_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_GROWTH_CAP_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_USE_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_USE_ITEM_NUM_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_CAN_USE_OMNIPOTENT_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_END_SKILLS_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_PASSIVE_SKILLS_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_EXPERIENCE_MAX_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_RESOURCES_TYPE_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_RESOURCES_NUM_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_RESOURCES_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_ITEMS_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_ITEMS_COUNT_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_RANGE_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_FETTERS_NUM_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_PARTNER_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_IS_RARE_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFG_DIVINE_GROUP_FIELD = protobuf.FieldDescriptor();
+PARTNER_BASE_CFGS = protobuf.Descriptor();
+PARTNER_BASE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_ATTRIBUTE_CFG = protobuf.Descriptor();
+PARTNER_ATTRIBUTE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_ATTRIBUTE_CFG_LEVELUP_EXP_FIELD = protobuf.FieldDescriptor();
+PARTNER_ATTRIBUTE_CFGS = protobuf.Descriptor();
+PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG = protobuf.Descriptor();
+PARTNER_PASSIVESKILL_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG_ICON_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG_POKEDEX_TYPE_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG_ATT_VALUE_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG_POKEDEX_DESC_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG_NEXT_LEVEL_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFG_UPPER_LEVEL_FIELD = protobuf.FieldDescriptor();
+PARTNER_PASSIVESKILL_CFGS = protobuf.Descriptor();
+PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_CHIP_CFG = protobuf.Descriptor();
+PARTNER_CHIP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_CHIP_CFG_CHIP_NAME_FIELD = protobuf.FieldDescriptor();
+PARTNER_CHIP_CFG_ICON_FIELD = protobuf.FieldDescriptor();
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM1_FIELD = protobuf.FieldDescriptor();
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM2_FIELD = protobuf.FieldDescriptor();
+PARTNER_CHIP_CFG_CHANGE_NEED_PROP_FIELD = protobuf.FieldDescriptor();
+PARTNER_CHIP_CFG_CHANGE_NEED_PROPNUM_FIELD = protobuf.FieldDescriptor();
+PARTNER_CHIP_CFGS = protobuf.Descriptor();
+PARTNER_CHIP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+FETTER_CFG = protobuf.Descriptor();
+FETTER_CFG_ID_FIELD = protobuf.FieldDescriptor();
+FETTER_CFG_TID_FIELD = protobuf.FieldDescriptor();
+FETTER_CFG_FETTER_NAME_FIELD = protobuf.FieldDescriptor();
+FETTER_CFG_FETTER_DESC_FIELD = protobuf.FieldDescriptor();
+FETTER_CFG_FETTER_OBJECT_FIELD = protobuf.FieldDescriptor();
+FETTER_CFGS = protobuf.Descriptor();
+FETTER_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_EQUIPHECHENG_CFG = protobuf.Descriptor();
+PARTNER_EQUIPHECHENG_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_EQUIPHECHENG_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+PARTNER_EQUIPHECHENG_CFG_STUFFID_FIELD = protobuf.FieldDescriptor();
+PARTNER_EQUIPHECHENG_CFG_STUFFID2_FIELD = protobuf.FieldDescriptor();
+PARTNER_EQUIPHECHENG_CFG_COMPOSITE_DISPLAY_FIELD = protobuf.FieldDescriptor();
+PARTNER_EQUIPHECHENG_CFGS = protobuf.Descriptor();
+PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+PARTNER_FORMATION_CFG = protobuf.Descriptor();
+PARTNER_FORMATION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+PARTNER_FORMATION_CFG_PROP_ADD1_FIELD = protobuf.FieldDescriptor();
+PARTNER_FORMATION_CFG_PROP_ADD2_FIELD = protobuf.FieldDescriptor();
+PARTNER_FORMATION_CFG_PROP_ADD3_FIELD = protobuf.FieldDescriptor();
+PARTNER_FORMATION_CFGS = protobuf.Descriptor();
+PARTNER_FORMATION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_CFG = protobuf.Descriptor();
+GUILD_MISSION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_CFG_GUILD_TASK_LEVEL_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_CFG_GUILD_TASK_DAY_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_CFG_GUILD_TASK_TARGETID_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_NUMBER_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_CFG_GUILD_TASK_REWAEDID_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_CFGS = protobuf.Descriptor();
+GUILD_MISSION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GUILD_BUILDING_MISSION_CFG = protobuf.Descriptor();
+GUILD_BUILDING_MISSION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_FIELD = protobuf.FieldDescriptor();
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_REWARD_FIELD = protobuf.FieldDescriptor();
+GUILD_BUILDING_MISSION_CFGS = protobuf.Descriptor();
+GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BUILDING_MISSION_POOL_CFG = protobuf.Descriptor();
+BUILDING_MISSION_POOL_CFG_ID_FIELD = protobuf.FieldDescriptor();
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_NUMBER_FIELD = protobuf.FieldDescriptor();
+BUILDING_MISSION_POOL_CFG_IS_HELP_FIELD = protobuf.FieldDescriptor();
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_FIELD = protobuf.FieldDescriptor();
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_NEMBER_FIELD = protobuf.FieldDescriptor();
+BUILDING_MISSION_POOL_CFG_HELP_REWARD_FIELD = protobuf.FieldDescriptor();
+BUILDING_MISSION_POOL_CFGS = protobuf.Descriptor();
+BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_BASE_CFG = protobuf.Descriptor();
+GUILD_MISSION_BASE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_WHITE_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_GREEN_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_BLUE_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_PURPLE_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_ORANGE_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_NUMBER_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_TYPE_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_NUMBER_FIELD = protobuf.FieldDescriptor();
+GUILD_MISSION_BASE_CFGS = protobuf.Descriptor();
+GUILD_MISSION_BASE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG = protobuf.Descriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_GROUP_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_LEVEL_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_TYPE_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ICON_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_NAME_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EFFECT_DESCRIBE_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BATTLE_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_LEVEL_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE1_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE2_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_ITEM_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_NUMBER_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_MAX_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ATTRIBUTE_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BUFF_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CONT_CFGS = protobuf.Descriptor();
+GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CFG = protobuf.Descriptor();
+GUILD_PRACTICE_GROUP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CFG_GUILD_PRACTICE_GROUP_FIELD = protobuf.FieldDescriptor();
+GUILD_PRACTICE_GROUP_CFGS = protobuf.Descriptor();
+GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG = protobuf.Descriptor();
+GUILD_BASE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_REMOVE_COST_MONEY_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_DAY_COST_MONEY_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_UPPER_LIMIT_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_APPRENTICE_LIMIT_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_VICE_LEADER_LIMIT_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_ELITE_LIMIT_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_BABY_LIMIT_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_UNLOCK_SHOP_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_UNLOCK_TASK_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_UNLOCK_LEVELUP_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_UNLOCK_GUIDANCE_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_TASK_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_PRACTICE_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_PRACTICE_HELP_MAX_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE1_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE2_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_NAME_COST_TYPE_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFG_GUILD_NAME_COST_NUMBER_FIELD = protobuf.FieldDescriptor();
+GUILD_BASE_CFGS = protobuf.Descriptor();
+GUILD_BASE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GUILD_FLAG_CFG = protobuf.Descriptor();
+GUILD_FLAG_CFG_ID_FIELD = protobuf.FieldDescriptor();
+GUILD_FLAG_CFG_GUILD_BIG_FLAG_ICON_FIELD = protobuf.FieldDescriptor();
+GUILD_FLAG_CFG_GUILD_SAMLL_FLAG_ICON_FIELD = protobuf.FieldDescriptor();
+GUILD_FLAG_CFG_GUILD_FLAG_MONEY_FIELD = protobuf.FieldDescriptor();
+GUILD_FLAG_CFGS = protobuf.Descriptor();
+GUILD_FLAG_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG = protobuf.Descriptor();
+GUIL_POST_CFG_ID_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_POST_LANGUAGEID_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_REMOVE_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_MAIL_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_APPOINTMENT_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_EXPEL_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_INVITATION_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_APPROVAL_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_TEAM_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_CALL_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_HOSTILE_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_TERRITORIAL_TRANSFER_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_FLAG_MODIFY_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_NAME_MODIFY_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFG_GUILD_NOTICE_FIELD = protobuf.FieldDescriptor();
+GUIL_POST_CFGS = protobuf.Descriptor();
+GUIL_POST_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG = protobuf.Descriptor();
+INNER_ALCHEMY_CFG_ID_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_ACTIVATION_TYPE_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_ITEM_ICON_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_ICON_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_FORMULA_ICON_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_UNLOCK_COST_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_UNLOCK_COST_NUM_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_ACTIVATION_COST_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_ACTIVATION_COST_NUM_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_ICON_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_NUM_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_PROP_EFFECT1_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_PROP_EFFECT2_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_PROP_EFFECT3_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_OCCUPATION_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_COMBAT_POINT_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFG_SUIT_COMBAT_POINT_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_CFGS = protobuf.Descriptor();
+INNER_ALCHEMY_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_GROUP_CFG = protobuf.Descriptor();
+INNER_ALCHEMY_GROUP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_GROUP_CFG_INNER_ALCHEMY_GROUP_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_GROUP_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_GROUP_CFG_GROUP_EFFECT_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_GROUP_CFG_SKILL_ID_INDEX_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_GROUP_CFG_SKILL_ARRAY_FIELD = protobuf.FieldDescriptor();
+INNER_ALCHEMY_GROUP_CFGS = protobuf.Descriptor();
+INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MEDAL_GROUP_CFG = protobuf.Descriptor();
+MEDAL_GROUP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MEDAL_GROUP_CFG_STARLEVEL_FIELD = protobuf.FieldDescriptor();
+MEDAL_GROUP_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+MEDAL_GROUP_CFG_GROUP_NAME_FIELD = protobuf.FieldDescriptor();
+MEDAL_GROUP_CFG_MEMBER_ID_FIELD = protobuf.FieldDescriptor();
+MEDAL_GROUP_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE1_FIELD = protobuf.FieldDescriptor();
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE2_FIELD = protobuf.FieldDescriptor();
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE3_FIELD = protobuf.FieldDescriptor();
+MEDAL_GROUP_CFGS = protobuf.Descriptor();
+MEDAL_GROUP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MEDAL_BASE_CFG = protobuf.Descriptor();
+MEDAL_BASE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MEDAL_BASE_CFG_MEDAL_NAME_FIELD = protobuf.FieldDescriptor();
+MEDAL_BASE_CFG_ICON_FIELD = protobuf.FieldDescriptor();
+MEDAL_BASE_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+MEDAL_BASE_CFG_CHANGE_NEED_PROPNUM_FIELD = protobuf.FieldDescriptor();
+MEDAL_BASE_CFG_DISASSEMBLE_GET_PROPNUM_FIELD = protobuf.FieldDescriptor();
+MEDAL_BASE_CFGS = protobuf.Descriptor();
+MEDAL_BASE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MEDAL_COMPOSITE_ADDITION_CFG = protobuf.Descriptor();
+MEDAL_COMPOSITE_ADDITION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MEDAL_COMPOSITE_ADDITION_CFG_STARLEVEL_FIELD = protobuf.FieldDescriptor();
+MEDAL_COMPOSITE_ADDITION_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+MEDAL_COMPOSITE_ADDITION_CFG_NEED_GROUP_NUM_FIELD = protobuf.FieldDescriptor();
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE1_FIELD = protobuf.FieldDescriptor();
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE2_FIELD = protobuf.FieldDescriptor();
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE3_FIELD = protobuf.FieldDescriptor();
+MEDAL_COMPOSITE_ADDITION_CFGS = protobuf.Descriptor();
+MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MEDAL_OPEN_LEVEL_CFG = protobuf.Descriptor();
+MEDAL_OPEN_LEVEL_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+MEDAL_OPEN_LEVEL_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+MEDAL_OPEN_LEVEL_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+MEDAL_OPEN_LEVEL_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+MEDAL_OPEN_LEVEL_CFGS = protobuf.Descriptor();
+MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MEDAL_STAR_OPEN_LEVEL_CFG = protobuf.Descriptor();
+MEDAL_STAR_OPEN_LEVEL_CFG_STARLEVEL_FIELD = protobuf.FieldDescriptor();
+MEDAL_STAR_OPEN_LEVEL_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+MEDAL_STAR_OPEN_LEVEL_CFG_NUM_FIELD = protobuf.FieldDescriptor();
+MEDAL_STAR_OPEN_LEVEL_CFGS = protobuf.Descriptor();
+MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+FORMULA_CFG = protobuf.Descriptor();
+FORMULA_CFG_FORMULA_ID_FIELD = protobuf.FieldDescriptor();
+FORMULA_CFG_COST_IDS_FIELD = protobuf.FieldDescriptor();
+FORMULA_CFG_COST_COUNTS_FIELD = protobuf.FieldDescriptor();
+FORMULA_CFG_ITEM_IDS_FIELD = protobuf.FieldDescriptor();
+FORMULA_CFG_ITEM_COUNTS_FIELD = protobuf.FieldDescriptor();
+FORMULA_CFGS = protobuf.Descriptor();
+FORMULA_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MALL_ITEM_CFG = protobuf.Descriptor();
+MALL_ITEM_CFG_GUID_FIELD = protobuf.FieldDescriptor();
+MALL_ITEM_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+MALL_ITEM_CFG_REAL_GUID_FIELD = protobuf.FieldDescriptor();
+MALL_ITEM_CFG_COST_TYPE_FIELD = protobuf.FieldDescriptor();
+MALL_ITEM_CFG_COST_ORIGINAL_FIELD = protobuf.FieldDescriptor();
+MALL_ITEM_CFG_COST_CURRENT_FIELD = protobuf.FieldDescriptor();
+MALL_ITEM_CFGS = protobuf.Descriptor();
+MALL_ITEM_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG = protobuf.Descriptor();
+SHOP_TYPE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_SHOP_NAME_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_OPEN_LVL_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_SHOP_TYPE_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_SHOPSUB_TYPE_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_SHOP_ITEMS_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_ISTAB_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_TAB_NAME1_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_TAB_NAME2_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_TAB_NAME3_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_TAB_ITEMS1_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_TAB_ITEMS2_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFG_TAB_ITEMS3_FIELD = protobuf.FieldDescriptor();
+SHOP_TYPE_CFGS = protobuf.Descriptor();
+SHOP_TYPE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG = protobuf.Descriptor();
+SCENE_EVENT_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG_STEP_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG_EVENT_TYPE_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG_CONDIDITON1_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG_CONDIDITON2_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG_CONDIDITON3_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG_CONDIDITON4_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG_RESULT_TYPE_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG_RESULT1_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG_RESULT2_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG_RESULT3_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFG_RESULT4_FIELD = protobuf.FieldDescriptor();
+SCENE_EVENT_CFGS = protobuf.Descriptor();
+SCENE_EVENT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SCENE_PORTAL_CFG = protobuf.Descriptor();
+SCENE_PORTAL_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_PORTAL_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_PORTAL_CFG_POS_X_FIELD = protobuf.FieldDescriptor();
+SCENE_PORTAL_CFG_POS_Y_FIELD = protobuf.FieldDescriptor();
+SCENE_PORTAL_CFG_POS_Z_FIELD = protobuf.FieldDescriptor();
+SCENE_PORTAL_CFG_RADIUS_FIELD = protobuf.FieldDescriptor();
+SCENE_PORTAL_CFG_ORIENTATION_FIELD = protobuf.FieldDescriptor();
+SCENE_PORTAL_CFG_ENABLED_FIELD = protobuf.FieldDescriptor();
+SCENE_PORTAL_CFG_RESID_FIELD = protobuf.FieldDescriptor();
+SCENE_PORTAL_CFGS = protobuf.Descriptor();
+SCENE_PORTAL_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG = protobuf.Descriptor();
+SCENE_FUNCTION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG_OPEN_PARAS_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG_BACK_SCENE_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG_RANK_IDS_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG_RANK_TYPE_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG_RANK_LINENAMES_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD = protobuf.FieldDescriptor();
+SCENE_FUNCTION_CFGS = protobuf.Descriptor();
+SCENE_FUNCTION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFG = protobuf.Descriptor();
+SCENE_AREA_CFG_AREA_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFG_AREA_TYPE_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFG_POS_X_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFG_POS_Y_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFG_RADIUS_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFG_WIDTH_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFG_HEIGHT_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFG_ACTION_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFG_PARAM1_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFG_PARAM2_FIELD = protobuf.FieldDescriptor();
+SCENE_AREA_CFGS = protobuf.Descriptor();
+SCENE_AREA_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CFG = protobuf.Descriptor();
+CLIENT_TRIGGER_CFG_ID_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CFG_EVENTS_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CFG_CONDITIONS_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CFG_ACTIONS_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CFG_OPENED_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CFG_CANCYCLETRIGGLE_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CFGS = protobuf.Descriptor();
+CLIENT_TRIGGER_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG = protobuf.Descriptor();
+CLIENT_TRIGGER_EVENT_CFG_EVENT_ID_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG_PARAM1_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG_PARAM2_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG_PARAM3_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG_PARAM4_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG_PARAM5_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG_PARAM6_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG_PARAM7_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG_PARAM8_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG_PARAM9_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFG_PARAM10_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_EVENT_CFGS = protobuf.Descriptor();
+CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG = protobuf.Descriptor();
+CLIENT_TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG_PARAM1_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG_PARAM2_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG_PARAM3_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG_PARAM4_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG_PARAM5_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG_PARAM6_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG_PARAM7_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG_PARAM8_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG_PARAM9_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFG_PARAM10_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_CONDITION_CFGS = protobuf.Descriptor();
+CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG = protobuf.Descriptor();
+CLIENT_TRIGGER_ACTION_CFG_ACTION_ID_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG_PARAM1_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG_PARAM2_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG_PARAM3_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG_PARAM4_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG_PARAM5_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG_PARAM6_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG_PARAM7_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG_PARAM8_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG_PARAM9_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFG_PARAM10_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_ACTION_CFGS = protobuf.Descriptor();
+CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_VARIABLE_CFG = protobuf.Descriptor();
+CLIENT_TRIGGER_VARIABLE_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_VARIABLE_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_VARIABLE_CFG_IS_VEC_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM1_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM2_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM3_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM4_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM5_FIELD = protobuf.FieldDescriptor();
+CLIENT_TRIGGER_VARIABLE_CFGS = protobuf.Descriptor();
+CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFG = protobuf.Descriptor();
+SCENE_ORGAN_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFG_MODULE_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFG_POS_X_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFG_POS_Y_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFG_POS_Z_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFG_ORIENTATION_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFG_SKILL_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFG_ENABLED_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFG_SHOW_NAME_FIELD = protobuf.FieldDescriptor();
+SCENE_ORGAN_CFGS = protobuf.Descriptor();
+SCENE_ORGAN_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFG = protobuf.Descriptor();
+MAP_SIGNS_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFG_SUB_TYPE_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFG_AUTO_ID_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFG_POS_X_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFG_POS_Y_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFG_POS_Z_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFG_IS_AUTO_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFG_IS_SHOW_FIELD = protobuf.FieldDescriptor();
+MAP_SIGNS_CFGS = protobuf.Descriptor();
+MAP_SIGNS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SCENE_TRIGGER_CFG = protobuf.Descriptor();
+SCENE_TRIGGER_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+SCENE_TRIGGER_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_TRIGGER_CFG_EVENTS_FIELD = protobuf.FieldDescriptor();
+SCENE_TRIGGER_CFG_CONDITIONS_FIELD = protobuf.FieldDescriptor();
+SCENE_TRIGGER_CFG_ACTIONS_FIELD = protobuf.FieldDescriptor();
+SCENE_TRIGGER_CFG_OPENED_FIELD = protobuf.FieldDescriptor();
+SCENE_TRIGGER_CFGS = protobuf.Descriptor();
+SCENE_TRIGGER_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG = protobuf.Descriptor();
+TRIGGER_EVENT_CFG_EVENT_ID_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG_PARAM1_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG_PARAM2_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG_PARAM3_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG_PARAM4_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG_PARAM5_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG_PARAM6_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG_PARAM7_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG_PARAM8_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG_PARAM9_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFG_PARAM10_FIELD = protobuf.FieldDescriptor();
+TRIGGER_EVENT_CFGS = protobuf.Descriptor();
+TRIGGER_EVENT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG = protobuf.Descriptor();
+TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG_PARAM1_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG_PARAM2_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG_PARAM3_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG_PARAM4_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG_PARAM5_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG_PARAM6_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG_PARAM7_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG_PARAM8_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG_PARAM9_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFG_PARAM10_FIELD = protobuf.FieldDescriptor();
+TRIGGER_CONDITION_CFGS = protobuf.Descriptor();
+TRIGGER_CONDITION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG = protobuf.Descriptor();
+TRIGGER_ACTION_CFG_ACTION_ID_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG_PARAM1_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG_PARAM2_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG_PARAM3_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG_PARAM4_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG_PARAM5_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG_PARAM6_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG_PARAM7_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG_PARAM8_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG_PARAM9_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFG_PARAM10_FIELD = protobuf.FieldDescriptor();
+TRIGGER_ACTION_CFGS = protobuf.Descriptor();
+TRIGGER_ACTION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TRIGGER_VARIABLE_CFG = protobuf.Descriptor();
+TRIGGER_VARIABLE_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+TRIGGER_VARIABLE_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+TRIGGER_VARIABLE_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+TRIGGER_VARIABLE_CFG_IS_VEC_FIELD = protobuf.FieldDescriptor();
+TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD = protobuf.FieldDescriptor();
+TRIGGER_VARIABLE_CFG_PARAM1_FIELD = protobuf.FieldDescriptor();
+TRIGGER_VARIABLE_CFG_PARAM2_FIELD = protobuf.FieldDescriptor();
+TRIGGER_VARIABLE_CFG_PARAM3_FIELD = protobuf.FieldDescriptor();
+TRIGGER_VARIABLE_CFG_PARAM4_FIELD = protobuf.FieldDescriptor();
+TRIGGER_VARIABLE_CFG_PARAM5_FIELD = protobuf.FieldDescriptor();
+TRIGGER_VARIABLE_CFGS = protobuf.Descriptor();
+TRIGGER_VARIABLE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SCENE_DOOR_CFG = protobuf.Descriptor();
+SCENE_DOOR_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_DOOR_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+SCENE_DOOR_CFG_POS_X_FIELD = protobuf.FieldDescriptor();
+SCENE_DOOR_CFG_POS_Y_FIELD = protobuf.FieldDescriptor();
+SCENE_DOOR_CFG_POS_Z_FIELD = protobuf.FieldDescriptor();
+SCENE_DOOR_CFG_WIDTH_FIELD = protobuf.FieldDescriptor();
+SCENE_DOOR_CFG_ORIENTATION_FIELD = protobuf.FieldDescriptor();
+SCENE_DOOR_CFG_OPENED_FIELD = protobuf.FieldDescriptor();
+SCENE_DOOR_CFG_RESID_FIELD = protobuf.FieldDescriptor();
+SCENE_DOOR_CFGS = protobuf.Descriptor();
+SCENE_DOOR_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+REVIVE_SHOW_CFG = protobuf.Descriptor();
+REVIVE_SHOW_CFG_ID_FIELD = protobuf.FieldDescriptor();
+REVIVE_SHOW_CFG_INDEX_FIELD = protobuf.FieldDescriptor();
+REVIVE_SHOW_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+REVIVE_SHOW_CFGS = protobuf.Descriptor();
+REVIVE_SHOW_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+FASHION_APPRECIATION_CFG = protobuf.Descriptor();
+FASHION_APPRECIATION_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+FASHION_APPRECIATION_CFG_NEXT_LEVEL_FIELD = protobuf.FieldDescriptor();
+FASHION_APPRECIATION_CFG_NEED_POINT_FIELD = protobuf.FieldDescriptor();
+FASHION_APPRECIATION_CFG_COST_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+FASHION_APPRECIATION_CFG_COST_ITEM_COUNT_FIELD = protobuf.FieldDescriptor();
+FASHION_APPRECIATION_CFG_COST_COIN_TYPE_FIELD = protobuf.FieldDescriptor();
+FASHION_APPRECIATION_CFG_COST_COIN_COUNT_FIELD = protobuf.FieldDescriptor();
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_TYPE_FIELD = protobuf.FieldDescriptor();
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_COUNT_FIELD = protobuf.FieldDescriptor();
+FASHION_APPRECIATION_CFG_COMBAT_POINT_FIELD = protobuf.FieldDescriptor();
+FASHION_APPRECIATION_CFGS = protobuf.Descriptor();
+FASHION_APPRECIATION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG = protobuf.Descriptor();
+FASHION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_ID_GROUP_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_FASHION_COST_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_FASHION_TYPE_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_VOCATION_LIMIT_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_FASHION_NAME_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_FASHION_ICON_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_FASHION_PARTS_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_FASHION_COLOUR_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_FASHION_TIPS_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_ATTRIBUTE_TYPE_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_ATTRIBUTE_MODE_FIELD = protobuf.FieldDescriptor();
+FASHION_CFG_ATTRIBUTE_COUNT_FIELD = protobuf.FieldDescriptor();
+FASHION_CFGS = protobuf.Descriptor();
+FASHION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG = protobuf.Descriptor();
+FASHION_COST_CFG_ID_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_FASHION_TIME_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_FASHION_POINT_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_UNLOCK_LEVEL_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_UNLOCK_FRONTID_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_UNLOCK_ITEMID_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_UNLOCK_ITEMCOUNT_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_UNLOCK_COINTYPE_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_UNLOCK_COINCOUNT_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_UNLOCK_ALLINTENSIFY_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_UNLOCK_SPECIFYINTENSIFY_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_UNLOCK_GEMSTONELV_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_UNLOCK_QUALITY_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFG_UNLOCK_POWER_FIELD = protobuf.FieldDescriptor();
+FASHION_COST_CFGS = protobuf.Descriptor();
+FASHION_COST_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG = protobuf.Descriptor();
+MOUNTEQUIP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_ITEM_NAME_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_ITEM_DESC_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_NEED_LEVEL_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_EQUIP_PLACE_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_DISPLAY_TYPE_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_ITEM_COLOR_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_ITEM_ICON_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_COULD_TRADE_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_EFFECT_TIMELIMITED_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_ATTRIBUTE_TYPE_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_ATTRIBUTE_MODE_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_ATTRIBUTE_COUNT_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFG_COMBAT_POINT_FIELD = protobuf.FieldDescriptor();
+MOUNTEQUIP_CFGS = protobuf.Descriptor();
+MOUNTEQUIP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+INDEPENDENT_RANDOM_REWARD_CFG = protobuf.Descriptor();
+INDEPENDENT_RANDOM_REWARD_CFG_ID_FIELD = protobuf.FieldDescriptor();
+INDEPENDENT_RANDOM_REWARD_CFG_DROP_RATE_FIELD = protobuf.FieldDescriptor();
+INDEPENDENT_RANDOM_REWARD_CFG_RANDOM_REWARD_ID_FIELD = protobuf.FieldDescriptor();
+INDEPENDENT_RANDOM_REWARD_CFGS = protobuf.Descriptor();
+INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+WEIGHT_RANDOM_REWARD_CFG = protobuf.Descriptor();
+WEIGHT_RANDOM_REWARD_CFG_ID_FIELD = protobuf.FieldDescriptor();
+WEIGHT_RANDOM_REWARD_CFG_REWARD_RATE_FIELD = protobuf.FieldDescriptor();
+WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD = protobuf.FieldDescriptor();
+WEIGHT_RANDOM_REWARD_CFG_REWARD_ID_FIELD = protobuf.FieldDescriptor();
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MIN_FIELD = protobuf.FieldDescriptor();
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MAX_FIELD = protobuf.FieldDescriptor();
+WEIGHT_RANDOM_REWARD_CFG_SHOW_FIELD = protobuf.FieldDescriptor();
+WEIGHT_RANDOM_REWARD_CFGS = protobuf.Descriptor();
+WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG = protobuf.Descriptor();
+REWARD_CFG_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_ITEM_COUNT_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_MAGIC_ROCK_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_MAGIC_ROCK_COUNT_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_REFINE_ROCK_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_REFINE_ROCK_COUNT_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_SOUL_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_SOUL_COUNT_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_PARTNER_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_REWARD_PARTNER_COUNT_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_PROFESSION1_REWARD_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_PROFESSION1_REWARD_ATTRIBUTE_COUNT_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_PROFESSION2_REWARD_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_PROFESSION2_REWARD_ATTRIBUTE_COUNT_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_PROFESSION3_REWARD_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_PROFESSION3_REWARD_ATTRIBUTE_COUNT_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_PROFESSION4_REWARD_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_PROFESSION4_REWARD_ATTRIBUTE_COUNT_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_PROFESSION5_REWARD_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+REWARD_CFG_PROFESSION5_REWARD_ATTRIBUTE_COUNT_FIELD = protobuf.FieldDescriptor();
+REWARD_CFGS = protobuf.Descriptor();
+REWARD_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+FUNC_TYPE_WEIGHT_CFG = protobuf.Descriptor();
+FUNC_TYPE_WEIGHT_CFG_ID_FIELD = protobuf.FieldDescriptor();
+FUNC_TYPE_WEIGHT_CFG_DROPS_FIELD = protobuf.FieldDescriptor();
+FUNC_TYPE_WEIGHT_CFG_WEIGHTS_FIELD = protobuf.FieldDescriptor();
+FUNC_TYPE_WEIGHT_CFGS = protobuf.Descriptor();
+FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ZONE_LOCATION_CFG = protobuf.Descriptor();
+ZONE_LOCATION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ZONE_LOCATION_CFG_PROVINCE_ID_FIELD = protobuf.FieldDescriptor();
+ZONE_LOCATION_CFG_PROVINCE_LANGUAGE_ID_FIELD = protobuf.FieldDescriptor();
+ZONE_LOCATION_CFG_CITY_ID_FIELD = protobuf.FieldDescriptor();
+ZONE_LOCATION_CFG_CITY_LANGUAGE_ID_FIELD = protobuf.FieldDescriptor();
+ZONE_LOCATION_CFGS = protobuf.Descriptor();
+ZONE_LOCATION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GIFT_GIVING_CFG = protobuf.Descriptor();
+GIFT_GIVING_CFG_ID_FIELD = protobuf.FieldDescriptor();
+GIFT_GIVING_CFG_GIFT_TYPE_FIELD = protobuf.FieldDescriptor();
+GIFT_GIVING_CFG_GIFT_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+GIFT_GIVING_CFG_GIVE_FRIEND_DEGREE_FIELD = protobuf.FieldDescriptor();
+GIFT_GIVING_CFG_IS_GIVE_FRIEBD_FIELD = protobuf.FieldDescriptor();
+GIFT_GIVING_CFG_IS_GIVE_DELETE_FIELD = protobuf.FieldDescriptor();
+GIFT_GIVING_CFGS = protobuf.Descriptor();
+GIFT_GIVING_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+FRIEND_TITLE_CFG = protobuf.Descriptor();
+FRIEND_TITLE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LEVEL_FIELD = protobuf.FieldDescriptor();
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LANGUAGEID_FIELD = protobuf.FieldDescriptor();
+FRIEND_TITLE_CFG_NEED_FRIEND_DEGREE_FIELD = protobuf.FieldDescriptor();
+FRIEND_TITLE_CFGS = protobuf.Descriptor();
+FRIEND_TITLE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+FATE_VALUE_REWARD_CFG = protobuf.Descriptor();
+FATE_VALUE_REWARD_CFG_FATE_ID_FIELD = protobuf.FieldDescriptor();
+FATE_VALUE_REWARD_CFG_NEED_FATE_VALUE_FIELD = protobuf.FieldDescriptor();
+FATE_VALUE_REWARD_CFG_FATE_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+FATE_VALUE_REWARD_CFG_FATE_ITEM_NUMBER_FIELD = protobuf.FieldDescriptor();
+FATE_VALUE_REWARD_CFGS = protobuf.Descriptor();
+FATE_VALUE_REWARD_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_INLAY_CFG = protobuf.Descriptor();
+GEMSTONE_INLAY_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_INLAY_CFG_ITEM_NUM_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_INLAY_CFG_ITEM_FAIL_NUM_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_INLAY_CFG_RANGE_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_INLAY_CFG_ITEM_SUC_ID_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_INLAY_CFG_ITEM_SUC_NUM_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_INLAY_CFG_ITEM_DESC_ID_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_INLAY_CFGS = protobuf.Descriptor();
+GEMSTONE_INLAY_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_LIST_CFG = protobuf.Descriptor();
+GEMSTONE_LIST_CFG_GEM_ID_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_LIST_CFG_GEM_NAMEID_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_LIST_CFG_GEM_PICID_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_LIST_CFG_GEM_KNAMEID_FIELD = protobuf.FieldDescriptor();
+GEMSTONE_LIST_CFGS = protobuf.Descriptor();
+GEMSTONE_LIST_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CHEST_DROP_CFG = protobuf.Descriptor();
+CHEST_DROP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+CHEST_DROP_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+CHEST_DROP_CFG_COUNT_FIELD = protobuf.FieldDescriptor();
+CHEST_DROP_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+CHEST_DROP_CFG_RES_ID_FIELD = protobuf.FieldDescriptor();
+CHEST_DROP_CFG_RADIUS_FIELD = protobuf.FieldDescriptor();
+CHEST_DROP_CFG_SPACE_ROWS_FIELD = protobuf.FieldDescriptor();
+CHEST_DROP_CFG_SPACE_COLS_FIELD = protobuf.FieldDescriptor();
+CHEST_DROP_CFG_LIVE_TIME_FIELD = protobuf.FieldDescriptor();
+CHEST_DROP_CFG_REFRESH_TIME_FIELD = protobuf.FieldDescriptor();
+CHEST_DROP_CFGS = protobuf.Descriptor();
+CHEST_DROP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MINIMAP_CFG = protobuf.Descriptor();
+MINIMAP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MINIMAP_CFG_POS_X_FIELD = protobuf.FieldDescriptor();
+MINIMAP_CFG_POS_Z_FIELD = protobuf.FieldDescriptor();
+MINIMAP_CFG_WIDTH_FIELD = protobuf.FieldDescriptor();
+MINIMAP_CFG_HEIGHT_FIELD = protobuf.FieldDescriptor();
+MINIMAP_CFG_TEX_WIDTH_FIELD = protobuf.FieldDescriptor();
+MINIMAP_CFG_TEX_HEIGHT_FIELD = protobuf.FieldDescriptor();
+MINIMAP_CFG_RES_ID_FIELD = protobuf.FieldDescriptor();
+MINIMAP_CFG_ROTATION_FIELD = protobuf.FieldDescriptor();
+MINIMAP_CFG_MINIMAP_RADIUS_FIELD = protobuf.FieldDescriptor();
+MINIMAP_CFGS = protobuf.Descriptor();
+MINIMAP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TREASURE_ROOMS_CFG = protobuf.Descriptor();
+TREASURE_ROOMS_CFG_GROUPID_FIELD = protobuf.FieldDescriptor();
+TREASURE_ROOMS_CFG_AREA_ID_FIELD = protobuf.FieldDescriptor();
+TREASURE_ROOMS_CFG_RED_NUM_FIELD = protobuf.FieldDescriptor();
+TREASURE_ROOMS_CFG_BLUE_NUM_FIELD = protobuf.FieldDescriptor();
+TREASURE_ROOMS_CFG_MIN_LEVEL_FIELD = protobuf.FieldDescriptor();
+TREASURE_ROOMS_CFG_MAX_LEVEL_FIELD = protobuf.FieldDescriptor();
+TREASURE_ROOMS_CFGS = protobuf.Descriptor();
+TREASURE_ROOMS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CRUSADE_BASE_CFG = protobuf.Descriptor();
+CRUSADE_BASE_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+CRUSADE_BASE_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+CRUSADE_BASE_CFG_SCENE_ID_FIELD = protobuf.FieldDescriptor();
+CRUSADE_BASE_CFG_NPC_ID_FIELD = protobuf.FieldDescriptor();
+CRUSADE_BASE_CFG_GROUP_ID_FIELD = protobuf.FieldDescriptor();
+CRUSADE_BASE_CFGS = protobuf.Descriptor();
+CRUSADE_BASE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CRUSADE_DUNGON_CFG = protobuf.Descriptor();
+CRUSADE_DUNGON_CFG_NPCID_FIELD = protobuf.FieldDescriptor();
+CRUSADE_DUNGON_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+CRUSADE_DUNGON_CFG_NPC_STAGETYPE_FIELD = protobuf.FieldDescriptor();
+CRUSADE_DUNGON_CFG_REWARD_ID_FIELD = protobuf.FieldDescriptor();
+CRUSADE_DUNGON_CFG_BIRTH_X_FIELD = protobuf.FieldDescriptor();
+CRUSADE_DUNGON_CFG_BIRTH_Y_FIELD = protobuf.FieldDescriptor();
+CRUSADE_DUNGON_CFG_BIRTH_Z_FIELD = protobuf.FieldDescriptor();
+CRUSADE_DUNGON_CFG_DIFFICULT_FIELD = protobuf.FieldDescriptor();
+CRUSADE_DUNGON_CFGS = protobuf.Descriptor();
+CRUSADE_DUNGON_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+STRENGTH_CONVERT_CFG = protobuf.Descriptor();
+STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD = protobuf.FieldDescriptor();
+STRENGTH_CONVERT_CFG_FACTOR_FIELD = protobuf.FieldDescriptor();
+STRENGTH_CONVERT_CFGS = protobuf.Descriptor();
+STRENGTH_CONVERT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_NPC_CFG = protobuf.Descriptor();
+SKILL_SUMMONED_NPC_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_NPC_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_NPC_CFG_NPC_ID_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_NPC_CFGS = protobuf.Descriptor();
+SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG = protobuf.Descriptor();
+SKILL_SUMMONED_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG_RING_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG_EXIST_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG_SPEED_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG_EFF_START_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG_EFF_START_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG_EFF_KEEP_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG_EFF_DESTROY_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG_EFF_DESTROY_TIME_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG_EFF_KEEP_HEIGHT_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFG_EFF_DESTROY_HEIGHT_FIELD = protobuf.FieldDescriptor();
+SKILL_SUMMONED_CFGS = protobuf.Descriptor();
+SKILL_SUMMONED_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CLUE_CFG = protobuf.Descriptor();
+CLUE_CFG_CLUE_ID_FIELD = protobuf.FieldDescriptor();
+CLUE_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+CLUE_CFG_SCENE_ID_FIELD = protobuf.FieldDescriptor();
+CLUE_CFG_POS_FIELD = protobuf.FieldDescriptor();
+CLUE_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+CLUE_CFG_BOXES_POS_X_FIELD = protobuf.FieldDescriptor();
+CLUE_CFG_BOXES_POS_Z_FIELD = protobuf.FieldDescriptor();
+CLUE_CFG_COST_ID_FIELD = protobuf.FieldDescriptor();
+CLUE_CFG_CORE_COORDINATE_FIELD = protobuf.FieldDescriptor();
+CLUE_CFG_MAP_RANGE_FIELD = protobuf.FieldDescriptor();
+CLUE_CFGS = protobuf.Descriptor();
+CLUE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BOXS_CFG = protobuf.Descriptor();
+BOXS_CFG_BOXES_ID_FIELD = protobuf.FieldDescriptor();
+BOXS_CFG_BOX_ID_FIELD = protobuf.FieldDescriptor();
+BOXS_CFG_BOX_RATE_FIELD = protobuf.FieldDescriptor();
+BOXS_CFGS = protobuf.Descriptor();
+BOXS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BOX_COLLECT_CFG = protobuf.Descriptor();
+BOX_COLLECT_CFG_BOX_ID_FIELD = protobuf.FieldDescriptor();
+BOX_COLLECT_CFG_BOX_RES_FIELD = protobuf.FieldDescriptor();
+BOX_COLLECT_CFG_ITEM_TYPE_FIELD = protobuf.FieldDescriptor();
+BOX_COLLECT_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+BOX_COLLECT_CFG_ITEM_RATE_FIELD = protobuf.FieldDescriptor();
+BOX_COLLECT_CFG_SHOW_TYPE_FIELD = protobuf.FieldDescriptor();
+BOX_COLLECT_CFG_MODEL_SCALE_FIELD = protobuf.FieldDescriptor();
+BOX_COLLECT_CFGS = protobuf.Descriptor();
+BOX_COLLECT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+DIG_TREASURE_EVENT_CFG = protobuf.Descriptor();
+DIG_TREASURE_EVENT_CFG_EVENT_ID_FIELD = protobuf.FieldDescriptor();
+DIG_TREASURE_EVENT_CFG_DISCRIBE_FIELD = protobuf.FieldDescriptor();
+DIG_TREASURE_EVENT_CFG_BOXES_ID_FIELD = protobuf.FieldDescriptor();
+DIG_TREASURE_EVENT_CFG_DUNGEON_X_FIELD = protobuf.FieldDescriptor();
+DIG_TREASURE_EVENT_CFG_DUNGEON_Z_FIELD = protobuf.FieldDescriptor();
+DIG_TREASURE_EVENT_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_TASK_ID_FIELD = protobuf.FieldDescriptor();
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_RATE_FIELD = protobuf.FieldDescriptor();
+DIG_TREASURE_EVENT_CFG_ELITE_MONSTER_FIELD = protobuf.FieldDescriptor();
+DIG_TREASURE_EVENT_CFG_BROAD_FIELD = protobuf.FieldDescriptor();
+DIG_TREASURE_EVENT_CFGS = protobuf.Descriptor();
+DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+DROP_POINT_CFG = protobuf.Descriptor();
+DROP_POINT_CFG_ID_FIELD = protobuf.FieldDescriptor();
+DROP_POINT_CFG_MODULE_FIELD = protobuf.FieldDescriptor();
+DROP_POINT_CFG_MINDISTANCE_FIELD = protobuf.FieldDescriptor();
+DROP_POINT_CFG_PICKTYPE_FIELD = protobuf.FieldDescriptor();
+DROP_POINT_CFG_BSHOW_FIELD = protobuf.FieldDescriptor();
+DROP_POINT_CFG_TEXTID_FIELD = protobuf.FieldDescriptor();
+DROP_POINT_CFGS = protobuf.Descriptor();
+DROP_POINT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RANK_FUNCTION_CFG = protobuf.Descriptor();
+RANK_FUNCTION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+RANK_FUNCTION_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+RANK_FUNCTION_CFG_SELECT_SHOW_FIELD = protobuf.FieldDescriptor();
+RANK_FUNCTION_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+RANK_FUNCTION_CFG_CHILD_NAMES_FIELD = protobuf.FieldDescriptor();
+RANK_FUNCTION_CFG_CHILD_TYPES_FIELD = protobuf.FieldDescriptor();
+RANK_FUNCTION_CFG_CHILD_VALUES_FIELD = protobuf.FieldDescriptor();
+RANK_FUNCTION_CFG_SHOW_FIELDS_FIELD = protobuf.FieldDescriptor();
+RANK_FUNCTION_CFG_HOST_FIELD_FIELD = protobuf.FieldDescriptor();
+RANK_FUNCTION_CFGS = protobuf.Descriptor();
+RANK_FUNCTION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RANK_FIELD_CFG = protobuf.Descriptor();
+RANK_FIELD_CFG_ID_FIELD = protobuf.FieldDescriptor();
+RANK_FIELD_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+RANK_FIELD_CFG_FIELD_NAME_FIELD = protobuf.FieldDescriptor();
+RANK_FIELD_CFG_CHILD_NAMES_FIELD = protobuf.FieldDescriptor();
+RANK_FIELD_CFG_CHILD_TYPES_FIELD = protobuf.FieldDescriptor();
+RANK_FIELD_CFG_CHILD_VALUES_FIELD = protobuf.FieldDescriptor();
+RANK_FIELD_CFG_HOST_FIELD_FIELD = protobuf.FieldDescriptor();
+RANK_FIELD_CFGS = protobuf.Descriptor();
+RANK_FIELD_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+EDN_CFG = protobuf.Descriptor();
+EDN_CFG_LVL_FIELD = protobuf.FieldDescriptor();
+EDN_CFG_LVLUP_EXP_FIELD = protobuf.FieldDescriptor();
+EDN_CFGS = protobuf.Descriptor();
+EDN_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+EDN_SCENE_CFG = protobuf.Descriptor();
+EDN_SCENE_CFG_SCENE_ID_FIELD = protobuf.FieldDescriptor();
+EDN_SCENE_CFG_OPEN_LVL_FIELD = protobuf.FieldDescriptor();
+EDN_SCENE_CFG_MAPNAME_ID_FIELD = protobuf.FieldDescriptor();
+EDN_SCENE_CFG_MAP_NAME_FIELD = protobuf.FieldDescriptor();
+EDN_SCENE_CFG_MAP_IMGID_FIELD = protobuf.FieldDescriptor();
+EDN_SCENE_CFG_MAP_RELICSIDS_FIELD = protobuf.FieldDescriptor();
+EDN_SCENE_CFGS = protobuf.Descriptor();
+EDN_SCENE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+EDN_RELIC_CFG = protobuf.Descriptor();
+EDN_RELIC_CFG_ID_FIELD = protobuf.FieldDescriptor();
+EDN_RELIC_CFG_NAME_ID_FIELD = protobuf.FieldDescriptor();
+EDN_RELIC_CFG_NAME_STRING_FIELD = protobuf.FieldDescriptor();
+EDN_RELIC_CFG_IMAGE_ID_FIELD = protobuf.FieldDescriptor();
+EDN_RELIC_CFG_REWARDS_FIELD = protobuf.FieldDescriptor();
+EDN_RELIC_CFG_TIPS_ID_FIELD = protobuf.FieldDescriptor();
+EDN_RELIC_CFGS = protobuf.Descriptor();
+EDN_RELIC_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG = protobuf.Descriptor();
+TOWER_BASE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_ITEM_COUNT_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_RAID_ITEMID_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_RAID_ITEMCOUNT_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_MONEYTYPE_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_MONEYCOUNT_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_ITEMID_CROSS_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_ITEMCOUNT_CROSS_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_EXP_CROSS_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_HANGUP_REWARD_EXP_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_HANGUP_REWARD_MONEYTYPE_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_HANGUP_REWARD_MONEY_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_COUNT_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_BIRTH_X_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_BIRTH_Y_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFG_BIRTH_Z_FIELD = protobuf.FieldDescriptor();
+TOWER_BASE_CFGS = protobuf.Descriptor();
+TOWER_BASE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG = protobuf.Descriptor();
+STARSPIRIT_DUNGOEN_CFG_ID_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_LEVEL_STATE_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_MAP_IMAGE_ID_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_MAP_NAME_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_MIN_FIGHTVAL_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_RECOMMEND_FIGHTVAL_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_TYPE_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_NUM_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_ENTER_DELAY_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_DEFAULT_CANCEL_BUTON_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_REWARD_TYPE_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_MIN_TEAM_NUM_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_ICON_ID_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_CONSUME_SHOW_NAME_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+STARSPIRIT_DUNGOEN_CFGS = protobuf.Descriptor();
+STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RUNE_QUALITY_CFG = protobuf.Descriptor();
+RUNE_QUALITY_CFG_RUNE_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_QUALITY_CFG_POWER_UPLIMIT_FIELD = protobuf.FieldDescriptor();
+RUNE_QUALITY_CFG_POWER_DOWNLIMIT_FIELD = protobuf.FieldDescriptor();
+RUNE_QUALITY_CFG_BETTER_EFFECT_RATE_FIELD = protobuf.FieldDescriptor();
+RUNE_QUALITY_CFG_BEST_EFFECT_RATE_FIELD = protobuf.FieldDescriptor();
+RUNE_QUALITY_CFGS = protobuf.Descriptor();
+RUNE_QUALITY_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_REFINE_CFG = protobuf.Descriptor();
+RUNE_PROP_REFINE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_REFINE_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_REFINE_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_REFINE_CFG_ITEM_COUNT_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_REFINE_CFG_SILVER_COST_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_REFINE_CFG_PROP_LIMIT_FIELD = protobuf.FieldDescriptor();
+RUNE_PROP_REFINE_CFGS = protobuf.Descriptor();
+RUNE_PROP_REFINE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_REFINE_CFG = protobuf.Descriptor();
+RUNE_SKILL_REFINE_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_REFINE_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_REFINE_CFG_ITEM_COUNT_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_REFINE_CFG_SILVER_COST_FIELD = protobuf.FieldDescriptor();
+RUNE_SKILL_REFINE_CFGS = protobuf.Descriptor();
+RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MONTHCARD_BASE_CFG = protobuf.Descriptor();
+MONTHCARD_BASE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MONTHCARD_BASE_CFG_CONTINUEDAY_FIELD = protobuf.FieldDescriptor();
+MONTHCARD_BASE_CFG_PRICE_FIELD = protobuf.FieldDescriptor();
+MONTHCARD_BASE_CFG_INGOTSCOUNT_FIELD = protobuf.FieldDescriptor();
+MONTHCARD_BASE_CFG_EXP_PERCENT_FIELD = protobuf.FieldDescriptor();
+MONTHCARD_BASE_CFG_POPULARITY_PER_FIELD = protobuf.FieldDescriptor();
+MONTHCARD_BASE_CFGS = protobuf.Descriptor();
+MONTHCARD_BASE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG = protobuf.Descriptor();
+SIGNUP_BASE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH1_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH2_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH3_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH4_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH5_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH6_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH7_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH8_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH9_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH10_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH11_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH12_FIELD = protobuf.FieldDescriptor();
+SIGNUP_BASE_CFGS = protobuf.Descriptor();
+SIGNUP_BASE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SIGNUP_ACCUMULATION_CFG = protobuf.Descriptor();
+SIGNUP_ACCUMULATION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SIGNUP_ACCUMULATION_CFG_REACH_NUMBER_FIELD = protobuf.FieldDescriptor();
+SIGNUP_ACCUMULATION_CFG_REWARD_ID_FIELD = protobuf.FieldDescriptor();
+SIGNUP_ACCUMULATION_CFG_REWARD_NUM_FIELD = protobuf.FieldDescriptor();
+SIGNUP_ACCUMULATION_CFGS = protobuf.Descriptor();
+SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SERVICE_CFG = protobuf.Descriptor();
+SERVICE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SERVICE_CFG_SERVICE_ID_FIELD = protobuf.FieldDescriptor();
+SERVICE_CFG_PARAM1_FIELD = protobuf.FieldDescriptor();
+SERVICE_CFG_PARAM2_FIELD = protobuf.FieldDescriptor();
+SERVICE_CFG_PARAM3_FIELD = protobuf.FieldDescriptor();
+SERVICE_CFG_PARAM4_FIELD = protobuf.FieldDescriptor();
+SERVICE_CFG_PARAM5_FIELD = protobuf.FieldDescriptor();
+SERVICE_CFGS = protobuf.Descriptor();
+SERVICE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MATERIAL_ITEM_CFG = protobuf.Descriptor();
+MATERIAL_ITEM_CFG_NUM_FIELD = protobuf.FieldDescriptor();
+MATERIAL_ITEM_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MATERIAL_ITEM_CFG_WEIGHT_FIELD = protobuf.FieldDescriptor();
+MATERIAL_ITEM_CFG_REWARD_ID_FIELD = protobuf.FieldDescriptor();
+MATERIAL_ITEM_CFGS = protobuf.Descriptor();
+MATERIAL_ITEM_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+STATE_CFG = protobuf.Descriptor();
+STATE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+STATE_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+STATE_CFG_ACTIONS_FIELD = protobuf.FieldDescriptor();
+STATE_CFGS = protobuf.Descriptor();
+STATE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG = protobuf.Descriptor();
+CAM_OPTIONS_CFG_ID_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG_MIN_PITCH_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG_MAX_PITCH_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG_MAX_FOLLOW_DIS_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG_MIN_FOLLOW_DIS_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG_DEF_YAW_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG_DEF_PITCH_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG_FOLLOW_AUTO_ROT_YAW_SPEED_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG_OFFSET_X_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG_OFFSET_Y_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG_OFFSET_Z_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFG_FOV_FIELD = protobuf.FieldDescriptor();
+CAM_OPTIONS_CFGS = protobuf.Descriptor();
+CAM_OPTIONS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG = protobuf.Descriptor();
+LEVEL_PACKAGE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REACH_GRADE_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_ITEM1_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_NUMBER1_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_ITEM2_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_NUMBER2_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_ITEM3_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_NUMBER3_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_ITEM4_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_NUMBER4_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_ITEM5_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_NUMBER5_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_ITEM6_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFG_REWARD_NUMBER6_FIELD = protobuf.FieldDescriptor();
+LEVEL_PACKAGE_CFGS = protobuf.Descriptor();
+LEVEL_PACKAGE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_INFO_CFG = protobuf.Descriptor();
+BATTLE_CRYSTAL_INFO_CFG_ID_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_INFO_CFG_START_TIME_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_INFO_CFG_END_TIME_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_INFO_CFG_LEVEL_LIMIT_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_INFO_CFG_TIMES_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_INFO_CFG_WEEK_LOOP_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_INFO_CFGS = protobuf.Descriptor();
+BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_ROOMS_CFG = protobuf.Descriptor();
+BATTLE_CRYSTAL_ROOMS_CFG_ID_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_ROOMS_CFG_RED_NUM_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_ROOMS_CFG_BLUE_NUM_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_ROOMS_CFG_MIN_LEVEL_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_ROOMS_CFG_MAX_LEVEL_FIELD = protobuf.FieldDescriptor();
+BATTLE_CRYSTAL_ROOMS_CFGS = protobuf.Descriptor();
+BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BATTLE_COLLECT_CRYSTAL_CFG = protobuf.Descriptor();
+BATTLE_COLLECT_CRYSTAL_CFG_ID_FIELD = protobuf.FieldDescriptor();
+BATTLE_COLLECT_CRYSTAL_CFG_CRYSTAL_NUM_FIELD = protobuf.FieldDescriptor();
+BATTLE_COLLECT_CRYSTAL_CFGS = protobuf.Descriptor();
+BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ELITE_LEVEL_CFG = protobuf.Descriptor();
+ELITE_LEVEL_CFG_LEVEL_ID_FIELD = protobuf.FieldDescriptor();
+ELITE_LEVEL_CFG_LEVEL_MIN_FIELD = protobuf.FieldDescriptor();
+ELITE_LEVEL_CFG_LEVEL_MAX_FIELD = protobuf.FieldDescriptor();
+ELITE_LEVEL_CFG_FIGHT_POWER1_FIELD = protobuf.FieldDescriptor();
+ELITE_LEVEL_CFG_FIGHT_POWER2_FIELD = protobuf.FieldDescriptor();
+ELITE_LEVEL_CFGS = protobuf.Descriptor();
+ELITE_LEVEL_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ELITE_COMMON_INFO_CFG = protobuf.Descriptor();
+ELITE_COMMON_INFO_CFG_LEVEL_ID_FIELD = protobuf.FieldDescriptor();
+ELITE_COMMON_INFO_CFG_GAME_ID_FIELD = protobuf.FieldDescriptor();
+ELITE_COMMON_INFO_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+ELITE_COMMON_INFO_CFG_NODE_FIELD = protobuf.FieldDescriptor();
+ELITE_COMMON_INFO_CFG_TIME_FIELD = protobuf.FieldDescriptor();
+ELITE_COMMON_INFO_CFG_GRADE_FIELD = protobuf.FieldDescriptor();
+ELITE_COMMON_INFO_CFG_REWARD_ID_FIELD = protobuf.FieldDescriptor();
+ELITE_COMMON_INFO_CFG_MONSTER_LEVEL_FIELD = protobuf.FieldDescriptor();
+ELITE_COMMON_INFO_CFG_CHECKPOINT_TIME_FIELD = protobuf.FieldDescriptor();
+ELITE_COMMON_INFO_CFG_OPEN_TIME_FIELD = protobuf.FieldDescriptor();
+ELITE_COMMON_INFO_CFGS = protobuf.Descriptor();
+ELITE_COMMON_INFO_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ELITE_HELL_INFO_CFG = protobuf.Descriptor();
+ELITE_HELL_INFO_CFG_LEVEL_ID_FIELD = protobuf.FieldDescriptor();
+ELITE_HELL_INFO_CFG_GAME_ID_FIELD = protobuf.FieldDescriptor();
+ELITE_HELL_INFO_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+ELITE_HELL_INFO_CFG_NODE_FIELD = protobuf.FieldDescriptor();
+ELITE_HELL_INFO_CFG_TIME_FIELD = protobuf.FieldDescriptor();
+ELITE_HELL_INFO_CFG_GRADE_FIELD = protobuf.FieldDescriptor();
+ELITE_HELL_INFO_CFG_REWARD_ID_FIELD = protobuf.FieldDescriptor();
+ELITE_HELL_INFO_CFG_MONSTER_LEVEL_FIELD = protobuf.FieldDescriptor();
+ELITE_HELL_INFO_CFG_CHECKPOINT_TIME_FIELD = protobuf.FieldDescriptor();
+ELITE_HELL_INFO_CFG_OPEN_TIME_FIELD = protobuf.FieldDescriptor();
+ELITE_HELL_INFO_CFGS = protobuf.Descriptor();
+ELITE_HELL_INFO_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ELITE_REWARD_CFG = protobuf.Descriptor();
+ELITE_REWARD_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ELITE_REWARD_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+ELITE_REWARD_CFG_ITEM_COUNT_FIELD = protobuf.FieldDescriptor();
+ELITE_REWARD_CFGS = protobuf.Descriptor();
+ELITE_REWARD_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SUBSYS_CFG = protobuf.Descriptor();
+SUBSYS_CFG_ID_FIELD = protobuf.FieldDescriptor();
+SUBSYS_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+SUBSYS_CFG_TITLE_ID_FIELD = protobuf.FieldDescriptor();
+SUBSYS_CFG_DESC_ID_FIELD = protobuf.FieldDescriptor();
+SUBSYS_CFG_UI_STYLE_FIELD = protobuf.FieldDescriptor();
+SUBSYS_CFG_NOTES_FIELD = protobuf.FieldDescriptor();
+SUBSYS_CFGS = protobuf.Descriptor();
+SUBSYS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+BAG_ROUTINE_CFG = protobuf.Descriptor();
+BAG_ROUTINE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+BAG_ROUTINE_CFG_BAG_TYPE_FIELD = protobuf.FieldDescriptor();
+BAG_ROUTINE_CFG_BAG_INITIAL_FIELD = protobuf.FieldDescriptor();
+BAG_ROUTINE_CFG_BAG_MAX_FIELD = protobuf.FieldDescriptor();
+BAG_ROUTINE_CFG_BAG_OPENLEVEL_FIELD = protobuf.FieldDescriptor();
+BAG_ROUTINE_CFGS = protobuf.Descriptor();
+BAG_ROUTINE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+DEPOT_UNLOCK_CFG = protobuf.Descriptor();
+DEPOT_UNLOCK_CFG_UNLOCK_COUNT_FIELD = protobuf.FieldDescriptor();
+DEPOT_UNLOCK_CFG_CURRENCY_TYPE_FIELD = protobuf.FieldDescriptor();
+DEPOT_UNLOCK_CFG_CURRENCY_COUNT_FIELD = protobuf.FieldDescriptor();
+DEPOT_UNLOCK_CFGS = protobuf.Descriptor();
+DEPOT_UNLOCK_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ROLE_PARTS_CFG = protobuf.Descriptor();
+ROLE_PARTS_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ROLE_PARTS_CFG_NAME_ID_FIELD = protobuf.FieldDescriptor();
+ROLE_PARTS_CFG_SLOT_FIELD = protobuf.FieldDescriptor();
+ROLE_PARTS_CFG_RES_ID_FIELD = protobuf.FieldDescriptor();
+ROLE_PARTS_CFGS = protobuf.Descriptor();
+ROLE_PARTS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SUPPRESS_CFG = protobuf.Descriptor();
+SUPPRESS_CFG_SCENE_ID_FIELD = protobuf.FieldDescriptor();
+SUPPRESS_CFG_FIT_LVL_FIELD = protobuf.FieldDescriptor();
+SUPPRESS_CFG_GROUP_COUNT_FIELD = protobuf.FieldDescriptor();
+SUPPRESS_CFG_KILL_BOS_CHEST_FIELD = protobuf.FieldDescriptor();
+SUPPRESS_CFG_BOSS_MAP_SIGNSID_FIELD = protobuf.FieldDescriptor();
+SUPPRESS_CFGS = protobuf.Descriptor();
+SUPPRESS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SUPPRESS_GROUP_CFG = protobuf.Descriptor();
+SUPPRESS_GROUP_CFG_SCENE_ID_FIELD = protobuf.FieldDescriptor();
+SUPPRESS_GROUP_CFG_REFRESH_NUM_FIELD = protobuf.FieldDescriptor();
+SUPPRESS_GROUP_CFG_MONSTER_MAP_SIGNSID_FIELD = protobuf.FieldDescriptor();
+SUPPRESS_GROUP_CFGS = protobuf.Descriptor();
+SUPPRESS_GROUP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+UI_CONTRIBUTION_CFG = protobuf.Descriptor();
+UI_CONTRIBUTION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+UI_CONTRIBUTION_CFG_TITLEID_FIELD = protobuf.FieldDescriptor();
+UI_CONTRIBUTION_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+UI_CONTRIBUTION_CFG_IMAGEID_FIELD = protobuf.FieldDescriptor();
+UI_CONTRIBUTION_CFG_SUBTITLE_1ID_FIELD = protobuf.FieldDescriptor();
+UI_CONTRIBUTION_CFG_SUBTITLE_2ID_FIELD = protobuf.FieldDescriptor();
+UI_CONTRIBUTION_CFG_ATLASID_FIELD = protobuf.FieldDescriptor();
+UI_CONTRIBUTION_CFG_ICONNAME_FIELD = protobuf.FieldDescriptor();
+UI_CONTRIBUTION_CFG_BTNTEXTID_FIELD = protobuf.FieldDescriptor();
+UI_CONTRIBUTION_CFG_TIPSID_FIELD = protobuf.FieldDescriptor();
+UI_CONTRIBUTION_CFGS = protobuf.Descriptor();
+UI_CONTRIBUTION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG = protobuf.Descriptor();
+ACTIVITY_DUNGEON_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_RESOUCE_NAME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_LEVEL_LIMIT_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_MAP_NAME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_MAP_IMGID_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_RECOMMEND_FIGHTVALUE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_LOW_FIGHTVALUE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_ADVANCED_ITEM_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_NORMAL_ITEM_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_TIMES_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_ISONLYCAPTAIN_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_WAIT_TIME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_ALONEREWARDS_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_TEAMREWARDS_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_MAX_TIMER_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_MAX_WAVE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_MONEY_POSX_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_MONEY_POSY_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFG_MONEY_POSZ_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_DUNGEON_CFGS = protobuf.Descriptor();
+ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RESOURCE_COMPUND_CFG = protobuf.Descriptor();
+RESOURCE_COMPUND_CFG_ID_FIELD = protobuf.FieldDescriptor();
+RESOURCE_COMPUND_CFG_NEED_ITEM_NUM_FIELD = protobuf.FieldDescriptor();
+RESOURCE_COMPUND_CFGS = protobuf.Descriptor();
+RESOURCE_COMPUND_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ROUTE_MARK_CFG = protobuf.Descriptor();
+ROUTE_MARK_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ROUTE_MARK_CFG_MODEL_ID_FIELD = protobuf.FieldDescriptor();
+ROUTE_MARK_CFG_SCENE_ID_FIELD = protobuf.FieldDescriptor();
+ROUTE_MARK_CFG_POS_X_FIELD = protobuf.FieldDescriptor();
+ROUTE_MARK_CFG_POS_Y_FIELD = protobuf.FieldDescriptor();
+ROUTE_MARK_CFG_POS_Z_FIELD = protobuf.FieldDescriptor();
+ROUTE_MARK_CFGS = protobuf.Descriptor();
+ROUTE_MARK_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+JUMP_CFG = protobuf.Descriptor();
+JUMP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+JUMP_CFG_WAY_POINTS_FIELD = protobuf.FieldDescriptor();
+JUMP_CFG_JUMP_ACTION_ID_FIELD = protobuf.FieldDescriptor();
+JUMP_CFGS = protobuf.Descriptor();
+JUMP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+JUMP_ACTION_CFG = protobuf.Descriptor();
+JUMP_ACTION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+JUMP_ACTION_CFG_ANIMATION_NAME_FIELD = protobuf.FieldDescriptor();
+JUMP_ACTION_CFG_SPLITES_FIELD = protobuf.FieldDescriptor();
+JUMP_ACTION_CFG_DURATION_FIELD = protobuf.FieldDescriptor();
+JUMP_ACTION_CFGS = protobuf.Descriptor();
+JUMP_ACTION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MAGIC_ATT_CFG = protobuf.Descriptor();
+MAGIC_ATT_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_ATT_CFG_MAGIC_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_ATT_CFG_RANGE_FIELD = protobuf.FieldDescriptor();
+MAGIC_ATT_CFG_PROP_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_ATT_CFG_ATT_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_ATT_CFG_ATT_VALUE_FIELD = protobuf.FieldDescriptor();
+MAGIC_ATT_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+MAGIC_ATT_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+MAGIC_ATT_CFG_ICON_FIELD = protobuf.FieldDescriptor();
+MAGIC_ATT_CFGS = protobuf.Descriptor();
+MAGIC_ATT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MAGIC_OSTIOLE_CFG = protobuf.Descriptor();
+MAGIC_OSTIOLE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_OSTIOLE_CFG_POS_FIELD = protobuf.FieldDescriptor();
+MAGIC_OSTIOLE_CFG_MAGIC_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_OSTIOLE_CFG_PLAYER_LEVEL_FIELD = protobuf.FieldDescriptor();
+MAGIC_OSTIOLE_CFG_RANGE_FIELD = protobuf.FieldDescriptor();
+MAGIC_OSTIOLE_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_OSTIOLE_CFG_ITEM_NUM_FIELD = protobuf.FieldDescriptor();
+MAGIC_OSTIOLE_CFG_MAX_BEATIFIC_FIELD = protobuf.FieldDescriptor();
+MAGIC_OSTIOLE_CFGS = protobuf.Descriptor();
+MAGIC_OSTIOLE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MAGIC_LEVELUP_CFG = protobuf.Descriptor();
+MAGIC_LEVELUP_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_LEVELUP_CFG_MAGIC_LEVEL_FIELD = protobuf.FieldDescriptor();
+MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_LEVELUP_CFG_ATT_VALUE_FIELD = protobuf.FieldDescriptor();
+MAGIC_LEVELUP_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_LEVELUP_CFG_ITEM_NUM_FIELD = protobuf.FieldDescriptor();
+MAGIC_LEVELUP_CFG_RANGE_FIELD = protobuf.FieldDescriptor();
+MAGIC_LEVELUP_CFGS = protobuf.Descriptor();
+MAGIC_LEVELUP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MAGIC_COMBINATION_CFG = protobuf.Descriptor();
+MAGIC_COMBINATION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_COMBINATION_CFG_COMBINATION_LEVEL_FIELD = protobuf.FieldDescriptor();
+MAGIC_COMBINATION_CFG_MAGIC_IDS_FIELD = protobuf.FieldDescriptor();
+MAGIC_COMBINATION_CFG_MAGIC_NUM_FIELD = protobuf.FieldDescriptor();
+MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_COMBINATION_CFG_ATT_VALUE_FIELD = protobuf.FieldDescriptor();
+MAGIC_COMBINATION_CFG_MG_NAME_FIELD = protobuf.FieldDescriptor();
+MAGIC_COMBINATION_CFGS = protobuf.Descriptor();
+MAGIC_COMBINATION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_CFG = protobuf.Descriptor();
+CONVOY_BIAOCHE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_CFG_FIRST_START_TIME_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_CFG_FIRST_END_TIME_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_CFG_SECOND_START_TIME_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_CFG_SECOND_END_TIME_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_CFG_SCENE_ID_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_CFG_WEEK_LOOP_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_CFGS = protobuf.Descriptor();
+CONVOY_BIAOCHE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG = protobuf.Descriptor();
+CONVOY_BIAOCHE_SCENE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MIN_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MAX_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_RATE_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_MISSION_ID_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_MISSION_ID_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NPC_DISTANCE_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NEED_ITEMID_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_DISTANCE_LIMIT_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_TIME_LIMIT_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_RIDE_LIMIT_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_NODE_STAY_TIME_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_DISTANCE_LIMIT_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_TIME_LIMIT_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_DISTANCE_LIMIT_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_TIME_LIMIT_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_COMPLETE_TIME_LIMIT_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_CAMP_REWARD_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_ENEMY_REWARD_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_CAMP_REWARD_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_ENEMY_REWARD_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_GOLD_LIMIT_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_SILVER_LIMIT_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_FREE_POS_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFG_ALLIANCE_POS_FIELD = protobuf.FieldDescriptor();
+CONVOY_BIAOCHE_SCENE_CFGS = protobuf.Descriptor();
+CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_INFO_CFG = protobuf.Descriptor();
+ACTIVITY_INFO_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_INFO_CFG_ENTRY_TIME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_INFO_CFG_ENTRY_END_TIME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_INFO_CFG_START_TIME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_INFO_CFG_END_TIME_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_INFO_CFG_LEVEL_LIMIT_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_INFO_CFG_TIMES_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_INFO_CFG_WEEK_LOOP_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_INFO_CFGS = protobuf.Descriptor();
+ACTIVITY_INFO_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_ROOMS_CFG = protobuf.Descriptor();
+ACTIVITY_ROOMS_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_ROOMS_CFG_AREA_ID_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_ROOMS_CFG_RED_NUM_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_ROOMS_CFG_BLUE_NUM_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_ROOMS_CFG_MIN_LEVEL_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_ROOMS_CFG_MAX_LEVEL_FIELD = protobuf.FieldDescriptor();
+ACTIVITY_ROOMS_CFGS = protobuf.Descriptor();
+ACTIVITY_ROOMS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG = protobuf.Descriptor();
+GROW_POINT_CFG_ID_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG_MODULE_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG_POS_X_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG_POS_Y_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG_POS_Z_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG_MAX_COUNT_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG_SHOW_COUNT_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG_QUALITY_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFG_SKILL_INDEX_FIELD = protobuf.FieldDescriptor();
+GROW_POINT_CFGS = protobuf.Descriptor();
+GROW_POINT_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+ERRORCODE_NOTIFY_CFG = protobuf.Descriptor();
+ERRORCODE_NOTIFY_CFG_ID_FIELD = protobuf.FieldDescriptor();
+ERRORCODE_NOTIFY_CFG_CONTENT_FIELD = protobuf.FieldDescriptor();
+ERRORCODE_NOTIFY_CFGS = protobuf.Descriptor();
+ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+OPEN_RULES_DATA_CFG = protobuf.Descriptor();
+OPEN_RULES_DATA_CFG_ID_FIELD = protobuf.FieldDescriptor();
+OPEN_RULES_DATA_CFG_OPEN_RULES_TYPE_FIELD = protobuf.FieldDescriptor();
+OPEN_RULES_DATA_CFG_LIMIT_TYPE_FIELD = protobuf.FieldDescriptor();
+OPEN_RULES_DATA_CFG_LIMIT_DAY_FIELD = protobuf.FieldDescriptor();
+OPEN_RULES_DATA_CFG_BEGIN_HOUR_FIELD = protobuf.FieldDescriptor();
+OPEN_RULES_DATA_CFG_BEGIN_MIN_FIELD = protobuf.FieldDescriptor();
+OPEN_RULES_DATA_CFG_END_HOUR_FIELD = protobuf.FieldDescriptor();
+OPEN_RULES_DATA_CFG_END_MIN_FIELD = protobuf.FieldDescriptor();
+OPEN_RULES_DATA_CFGS = protobuf.Descriptor();
+OPEN_RULES_DATA_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CAMPBOSS_CFG = protobuf.Descriptor();
+CAMPBOSS_CFG_ID_FIELD = protobuf.FieldDescriptor();
+CAMPBOSS_CFG_NEED_LEVEL_FIELD = protobuf.FieldDescriptor();
+CAMPBOSS_CFG_SCENE_ID_FIELD = protobuf.FieldDescriptor();
+CAMPBOSS_CFG_MAP_ID_FIELD = protobuf.FieldDescriptor();
+CAMPBOSS_CFG_X_POINT_FIELD = protobuf.FieldDescriptor();
+CAMPBOSS_CFG_Y_POINT_FIELD = protobuf.FieldDescriptor();
+CAMPBOSS_CFG_Z_POINT_FIELD = protobuf.FieldDescriptor();
+CAMPBOSS_CFGS = protobuf.Descriptor();
+CAMPBOSS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+TIPS_CFG = protobuf.Descriptor();
+TIPS_CFG_ID_FIELD = protobuf.FieldDescriptor();
+TIPS_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+TIPS_CFG_CONTENT_FIELD = protobuf.FieldDescriptor();
+TIPS_CFGS = protobuf.Descriptor();
+TIPS_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG = protobuf.Descriptor();
+CAMP_RELATION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_SCRIP_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE_SCRIP_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE0_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE1_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE2_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE3_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE4_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE5_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE6_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE7_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE8_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE9_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE10_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE11_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE12_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE13_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE14_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFG_TYPE15_FIELD = protobuf.FieldDescriptor();
+CAMP_RELATION_CFGS = protobuf.Descriptor();
+CAMP_RELATION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+CAMP_CHANGE_COST_CFG = protobuf.Descriptor();
+CAMP_CHANGE_COST_CFG_ID_FIELD = protobuf.FieldDescriptor();
+CAMP_CHANGE_COST_CFG_COIN_TYPE_FIELD = protobuf.FieldDescriptor();
+CAMP_CHANGE_COST_CFG_COIN_NUM_FIELD = protobuf.FieldDescriptor();
+CAMP_CHANGE_COST_CFGS = protobuf.Descriptor();
+CAMP_CHANGE_COST_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RANDOMMAN_CFG = protobuf.Descriptor();
+RANDOMMAN_CFG_NAME0_FIELD = protobuf.FieldDescriptor();
+RANDOMMAN_CFG_NAME1_FIELD = protobuf.FieldDescriptor();
+RANDOMMAN_CFGS = protobuf.Descriptor();
+RANDOMMAN_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+RANDOMWOMAN_CFG = protobuf.Descriptor();
+RANDOMWOMAN_CFG_NAME0_FIELD = protobuf.FieldDescriptor();
+RANDOMWOMAN_CFG_NAME1_FIELD = protobuf.FieldDescriptor();
+RANDOMWOMAN_CFGS = protobuf.Descriptor();
+RANDOMWOMAN_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG = protobuf.Descriptor();
+SOUL_BASE_ATTR_CFG_STAR_LEVEL_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_FIGHT_POWER_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_ATTACK_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_DEFENSE_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_MAXHP_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_CRITICALRATE_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_CRITICALPOWERRATE_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_HITRATE_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_DEFYBLOCKRATE_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_MAUD_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_MIND_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_CONSTITUTION_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_BLOCKRATE_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_DODGERATE_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_ANTICRITICALRATE_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_ANTICRITICALPOWERRATE_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_HPHITRETURN_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_INTENSITY_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_DEFYDEFENSERATE_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFG_DEADLYRATE_FIELD = protobuf.FieldDescriptor();
+SOUL_BASE_ATTR_CFGS = protobuf.Descriptor();
+SOUL_BASE_ATTR_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ATTR_CFG = protobuf.Descriptor();
+SOUL_MAGIC_ATTR_CFG_STAR_LEVEL_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ATTR_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ATTR_CFG_FIGHT_POWER_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ATTR_CFGS = protobuf.Descriptor();
+SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG = protobuf.Descriptor();
+SOUL_SUIT_ATTR_CFG_STAR_LEVEL_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG_SUITID_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG_SUITNAME_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG_SUIT_NUM_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG_SUIT_DATA_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG_SUIT_CION_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG_SUIT_TWO_NUM_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG_SUIT_SKILL_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_TWO_FIELD = protobuf.FieldDescriptor();
+SOUL_SUIT_ATTR_CFGS = protobuf.Descriptor();
+SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG = protobuf.Descriptor();
+SOUL_LEVEL_UP_CFG_STAR_LEVEL_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG_EXP_ONE_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG_EXP_TWO_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG_EXP_THREE_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG_EXP_FOUR_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG_EXP_FIVE_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG_EXP_SIX_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG_EXP_SEVEN_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG_EXP_EIGHT_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG_EXP_NINE_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG_EXP_TEN_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFG_EXP_CHANGE_FIELD = protobuf.FieldDescriptor();
+SOUL_LEVEL_UP_CFGS = protobuf.Descriptor();
+SOUL_LEVEL_UP_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ROCK_CFG = protobuf.Descriptor();
+SOUL_MAGIC_ROCK_CFG_MAGIC_ID_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ROCK_CFG_MAGIC_NAME_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ROCK_CFG_TYPE_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ROCK_CFG_MIN_DATA_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ROCK_CFG_MAX_DATA_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ROCK_CFG_MAX_ADD_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ROCK_CFG_SUCCESS_RATIO_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ROCK_CFG_ICON_FIELD = protobuf.FieldDescriptor();
+SOUL_MAGIC_ROCK_CFGS = protobuf.Descriptor();
+SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+SOUL_REFINE_ROCK_CFG = protobuf.Descriptor();
+SOUL_REFINE_ROCK_CFG_REFINE_ID_FIELD = protobuf.FieldDescriptor();
+SOUL_REFINE_ROCK_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+SOUL_REFINE_ROCK_CFG_COUNT_FIELD = protobuf.FieldDescriptor();
+SOUL_REFINE_ROCK_CFG_ICON_FIELD = protobuf.FieldDescriptor();
+SOUL_REFINE_ROCK_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+SOUL_REFINE_ROCK_CFG_DESC_FIELD = protobuf.FieldDescriptor();
+SOUL_REFINE_ROCK_CFG_POSITION_FIELD = protobuf.FieldDescriptor();
+SOUL_REFINE_ROCK_CFGS = protobuf.Descriptor();
+SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+WIZARD_TASK_CFG = protobuf.Descriptor();
+WIZARD_TASK_CFG_LEVEL_ID_FIELD = protobuf.FieldDescriptor();
+WIZARD_TASK_CFG_LEVEL_MIN_FIELD = protobuf.FieldDescriptor();
+WIZARD_TASK_CFG_USE_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+WIZARD_TASK_CFG_USE_ITEM_NUM_FIELD = protobuf.FieldDescriptor();
+WIZARD_TASK_CFGS = protobuf.Descriptor();
+WIZARD_TASK_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+WIZARD_LEVEL_CFG = protobuf.Descriptor();
+WIZARD_LEVEL_CFG_ID_FIELD = protobuf.FieldDescriptor();
+WIZARD_LEVEL_CFG_LEGENDARY_FIELD = protobuf.FieldDescriptor();
+WIZARD_LEVEL_CFG_ICON_ID_FIELD = protobuf.FieldDescriptor();
+WIZARD_LEVEL_CFG_NAME_FIELD = protobuf.FieldDescriptor();
+WIZARD_LEVEL_CFG_REWARD_ID_FIELD = protobuf.FieldDescriptor();
+WIZARD_LEVEL_CFG_DEL_LEGENDARY_FIELD = protobuf.FieldDescriptor();
+WIZARD_LEVEL_CFGS = protobuf.Descriptor();
+WIZARD_LEVEL_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+WIZARD_BASE_CFG = protobuf.Descriptor();
+WIZARD_BASE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+WIZARD_BASE_CFG_DATA_FIELD = protobuf.FieldDescriptor();
+WIZARD_BASE_CFGS = protobuf.Descriptor();
+WIZARD_BASE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MAGIC_DIVINE_CFG = protobuf.Descriptor();
+MAGIC_DIVINE_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_DIVINE_CFG_PROP_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_DIVINE_CFG_PROP_NUM_FIELD = protobuf.FieldDescriptor();
+MAGIC_DIVINE_CFG_WEEK_DAY_FIELD = protobuf.FieldDescriptor();
+MAGIC_DIVINE_CFG_TIMES_FIELD = protobuf.FieldDescriptor();
+MAGIC_DIVINE_CFG_SECTION_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_DIVINE_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+MAGIC_DIVINE_CFGS = protobuf.Descriptor();
+MAGIC_DIVINE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+DIVINE_SECTION_CFG = protobuf.Descriptor();
+DIVINE_SECTION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+DIVINE_SECTION_CFG_GROUP_FIELD = protobuf.FieldDescriptor();
+DIVINE_SECTION_CFG_GROUP_NAME_FIELD = protobuf.FieldDescriptor();
+DIVINE_SECTION_CFG_SECTION_FIELD = protobuf.FieldDescriptor();
+DIVINE_SECTION_CFG_SECTION_NAME_FIELD = protobuf.FieldDescriptor();
+DIVINE_SECTION_CFG_SECTION_DESC_FIELD = protobuf.FieldDescriptor();
+DIVINE_SECTION_CFG_MISSION_ID_FIELD = protobuf.FieldDescriptor();
+DIVINE_SECTION_CFG_PARTNER_ID_FIELD = protobuf.FieldDescriptor();
+DIVINE_SECTION_CFGS = protobuf.Descriptor();
+DIVINE_SECTION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+DIVINE_MISSION_CFG = protobuf.Descriptor();
+DIVINE_MISSION_CFG_ID_FIELD = protobuf.FieldDescriptor();
+DIVINE_MISSION_CFG_MISSION_ID_FIELD = protobuf.FieldDescriptor();
+DIVINE_MISSION_CFG_RANGE_FIELD = protobuf.FieldDescriptor();
+DIVINE_MISSION_CFG_QUALITY_FIELD = protobuf.FieldDescriptor();
+DIVINE_MISSION_CFG_FETTERS_NUM_FIELD = protobuf.FieldDescriptor();
+DIVINE_MISSION_CFG_QUALITYRANGE_FIELD = protobuf.FieldDescriptor();
+DIVINE_MISSION_CFGS = protobuf.Descriptor();
+DIVINE_MISSION_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_CFG = protobuf.Descriptor();
+MAGIC_SKILL_CFG_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_CFG_LAYERID_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_CFG_MAX_LEVEL_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_CFG_MAGICID_ARR_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_CFG_MAGIC_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_CFG_SLOT_LOCK_COND_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_CFG_SKILL_POSITION_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_CFG_SKILL_ICON_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_CFG_SKILL_NAME_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_CFG_SKILL_CONDITION_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_CFGS = protobuf.Descriptor();
+MAGIC_SKILL_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_UPLEVEL_CFG = protobuf.Descriptor();
+MAGIC_SKILL_UPLEVEL_CFG_LEVEL_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_UPLEVEL_CFG_NEXT_LEVEL_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_UPLEVEL_CFG_MAGICID_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_VALUE_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_BASE_RATE_INCR_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_INCR_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_UPLEVEL_CFG_SKILL_TIPS_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_UPLEVEL_CFG_PARTNER_TIPS_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_UPLEVEL_CFGS = protobuf.Descriptor();
+MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_LAYER_CFG = protobuf.Descriptor();
+MAGIC_SKILL_LAYER_CFG_LAYERID_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_LAYER_CFG_ROLE_LEVEL_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_LAYER_CFG_LAYERID_ARR_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_LAYER_CFG_MAX_MAGIC_SKILL_NUM_FIELD = protobuf.FieldDescriptor();
+MAGIC_SKILL_LAYER_CFGS = protobuf.Descriptor();
+MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG = protobuf.Descriptor();
+MAGIC_POINT_REFINE_CFG_CONFID_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG_MAIN_QUEST_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG_ROLE_LEVEL_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG_MIN_POINT_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG_MAX_POINT_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG_ITEM_ID_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG_ITEM_NUM_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG_COIN_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG_COIN_NUM_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG_REFINE_TIME_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_TYPE_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_NUM_FIELD = protobuf.FieldDescriptor();
+MAGIC_POINT_REFINE_CFGS = protobuf.Descriptor();
+MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD = protobuf.FieldDescriptor();
+
+ARENA_DATA_CFG_ACTIVITY_LEVEL_FIELD.name = "activity_level"
+ARENA_DATA_CFG_ACTIVITY_LEVEL_FIELD.full_name = ".ftcfg.arena_data_cfg.activity_level"
+ARENA_DATA_CFG_ACTIVITY_LEVEL_FIELD.number = 1
+ARENA_DATA_CFG_ACTIVITY_LEVEL_FIELD.index = 0
+ARENA_DATA_CFG_ACTIVITY_LEVEL_FIELD.label = 2
+ARENA_DATA_CFG_ACTIVITY_LEVEL_FIELD.has_default_value = false
+ARENA_DATA_CFG_ACTIVITY_LEVEL_FIELD.default_value = 0
+ARENA_DATA_CFG_ACTIVITY_LEVEL_FIELD.type = 5
+ARENA_DATA_CFG_ACTIVITY_LEVEL_FIELD.cpp_type = 1
+
+ARENA_DATA_CFG_ACTIVITY_CYCLE_FIELD.name = "activity_cycle"
+ARENA_DATA_CFG_ACTIVITY_CYCLE_FIELD.full_name = ".ftcfg.arena_data_cfg.activity_cycle"
+ARENA_DATA_CFG_ACTIVITY_CYCLE_FIELD.number = 2
+ARENA_DATA_CFG_ACTIVITY_CYCLE_FIELD.index = 1
+ARENA_DATA_CFG_ACTIVITY_CYCLE_FIELD.label = 2
+ARENA_DATA_CFG_ACTIVITY_CYCLE_FIELD.has_default_value = false
+ARENA_DATA_CFG_ACTIVITY_CYCLE_FIELD.default_value = 0
+ARENA_DATA_CFG_ACTIVITY_CYCLE_FIELD.type = 5
+ARENA_DATA_CFG_ACTIVITY_CYCLE_FIELD.cpp_type = 1
+
+ARENA_DATA_CFG_DURATION_FIELD.name = "duration"
+ARENA_DATA_CFG_DURATION_FIELD.full_name = ".ftcfg.arena_data_cfg.duration"
+ARENA_DATA_CFG_DURATION_FIELD.number = 3
+ARENA_DATA_CFG_DURATION_FIELD.index = 2
+ARENA_DATA_CFG_DURATION_FIELD.label = 2
+ARENA_DATA_CFG_DURATION_FIELD.has_default_value = false
+ARENA_DATA_CFG_DURATION_FIELD.default_value = 0
+ARENA_DATA_CFG_DURATION_FIELD.type = 5
+ARENA_DATA_CFG_DURATION_FIELD.cpp_type = 1
+
+ARENA_DATA_CFG_DAY_LIST_FIELD.name = "day_list"
+ARENA_DATA_CFG_DAY_LIST_FIELD.full_name = ".ftcfg.arena_data_cfg.day_list"
+ARENA_DATA_CFG_DAY_LIST_FIELD.number = 4
+ARENA_DATA_CFG_DAY_LIST_FIELD.index = 3
+ARENA_DATA_CFG_DAY_LIST_FIELD.label = 3
+ARENA_DATA_CFG_DAY_LIST_FIELD.has_default_value = false
+ARENA_DATA_CFG_DAY_LIST_FIELD.default_value = {}
+ARENA_DATA_CFG_DAY_LIST_FIELD.type = 2
+ARENA_DATA_CFG_DAY_LIST_FIELD.cpp_type = 6
+
+ARENA_DATA_CFG_MAP_ID_FIELD.name = "map_id"
+ARENA_DATA_CFG_MAP_ID_FIELD.full_name = ".ftcfg.arena_data_cfg.map_id"
+ARENA_DATA_CFG_MAP_ID_FIELD.number = 5
+ARENA_DATA_CFG_MAP_ID_FIELD.index = 4
+ARENA_DATA_CFG_MAP_ID_FIELD.label = 2
+ARENA_DATA_CFG_MAP_ID_FIELD.has_default_value = false
+ARENA_DATA_CFG_MAP_ID_FIELD.default_value = 0
+ARENA_DATA_CFG_MAP_ID_FIELD.type = 5
+ARENA_DATA_CFG_MAP_ID_FIELD.cpp_type = 1
+
+ARENA_DATA_CFG_SPAN_TIME_FIELD.name = "span_time"
+ARENA_DATA_CFG_SPAN_TIME_FIELD.full_name = ".ftcfg.arena_data_cfg.span_time"
+ARENA_DATA_CFG_SPAN_TIME_FIELD.number = 6
+ARENA_DATA_CFG_SPAN_TIME_FIELD.index = 5
+ARENA_DATA_CFG_SPAN_TIME_FIELD.label = 2
+ARENA_DATA_CFG_SPAN_TIME_FIELD.has_default_value = false
+ARENA_DATA_CFG_SPAN_TIME_FIELD.default_value = 0
+ARENA_DATA_CFG_SPAN_TIME_FIELD.type = 5
+ARENA_DATA_CFG_SPAN_TIME_FIELD.cpp_type = 1
+
+ARENA_DATA_CFG_MIN_RATIO_FIELD.name = "min_ratio"
+ARENA_DATA_CFG_MIN_RATIO_FIELD.full_name = ".ftcfg.arena_data_cfg.min_ratio"
+ARENA_DATA_CFG_MIN_RATIO_FIELD.number = 7
+ARENA_DATA_CFG_MIN_RATIO_FIELD.index = 6
+ARENA_DATA_CFG_MIN_RATIO_FIELD.label = 2
+ARENA_DATA_CFG_MIN_RATIO_FIELD.has_default_value = false
+ARENA_DATA_CFG_MIN_RATIO_FIELD.default_value = 0.0
+ARENA_DATA_CFG_MIN_RATIO_FIELD.type = 2
+ARENA_DATA_CFG_MIN_RATIO_FIELD.cpp_type = 6
+
+ARENA_DATA_CFG_RATIO_ADDITION_FIELD.name = "ratio_addition"
+ARENA_DATA_CFG_RATIO_ADDITION_FIELD.full_name = ".ftcfg.arena_data_cfg.ratio_addition"
+ARENA_DATA_CFG_RATIO_ADDITION_FIELD.number = 8
+ARENA_DATA_CFG_RATIO_ADDITION_FIELD.index = 7
+ARENA_DATA_CFG_RATIO_ADDITION_FIELD.label = 2
+ARENA_DATA_CFG_RATIO_ADDITION_FIELD.has_default_value = false
+ARENA_DATA_CFG_RATIO_ADDITION_FIELD.default_value = 0.0
+ARENA_DATA_CFG_RATIO_ADDITION_FIELD.type = 2
+ARENA_DATA_CFG_RATIO_ADDITION_FIELD.cpp_type = 6
+
+ARENA_DATA_CFG_MAX_RATIO_FIELD.name = "max_ratio"
+ARENA_DATA_CFG_MAX_RATIO_FIELD.full_name = ".ftcfg.arena_data_cfg.max_ratio"
+ARENA_DATA_CFG_MAX_RATIO_FIELD.number = 9
+ARENA_DATA_CFG_MAX_RATIO_FIELD.index = 8
+ARENA_DATA_CFG_MAX_RATIO_FIELD.label = 2
+ARENA_DATA_CFG_MAX_RATIO_FIELD.has_default_value = false
+ARENA_DATA_CFG_MAX_RATIO_FIELD.default_value = 0.0
+ARENA_DATA_CFG_MAX_RATIO_FIELD.type = 2
+ARENA_DATA_CFG_MAX_RATIO_FIELD.cpp_type = 6
+
+ARENA_DATA_CFG_DIFF_TEAMMATE_FIELD.name = "diff_teammate"
+ARENA_DATA_CFG_DIFF_TEAMMATE_FIELD.full_name = ".ftcfg.arena_data_cfg.diff_teammate"
+ARENA_DATA_CFG_DIFF_TEAMMATE_FIELD.number = 10
+ARENA_DATA_CFG_DIFF_TEAMMATE_FIELD.index = 9
+ARENA_DATA_CFG_DIFF_TEAMMATE_FIELD.label = 2
+ARENA_DATA_CFG_DIFF_TEAMMATE_FIELD.has_default_value = false
+ARENA_DATA_CFG_DIFF_TEAMMATE_FIELD.default_value = 0.0
+ARENA_DATA_CFG_DIFF_TEAMMATE_FIELD.type = 2
+ARENA_DATA_CFG_DIFF_TEAMMATE_FIELD.cpp_type = 6
+
+ARENA_DATA_CFG_DIFF_OPPONENT_FIELD.name = "diff_opponent"
+ARENA_DATA_CFG_DIFF_OPPONENT_FIELD.full_name = ".ftcfg.arena_data_cfg.diff_opponent"
+ARENA_DATA_CFG_DIFF_OPPONENT_FIELD.number = 11
+ARENA_DATA_CFG_DIFF_OPPONENT_FIELD.index = 10
+ARENA_DATA_CFG_DIFF_OPPONENT_FIELD.label = 2
+ARENA_DATA_CFG_DIFF_OPPONENT_FIELD.has_default_value = false
+ARENA_DATA_CFG_DIFF_OPPONENT_FIELD.default_value = 0.0
+ARENA_DATA_CFG_DIFF_OPPONENT_FIELD.type = 2
+ARENA_DATA_CFG_DIFF_OPPONENT_FIELD.cpp_type = 6
+
+ARENA_DATA_CFG.name = "arena_data_cfg"
+ARENA_DATA_CFG.full_name = ".ftcfg.arena_data_cfg"
+ARENA_DATA_CFG.nested_types = {}
+ARENA_DATA_CFG.enum_types = {}
+ARENA_DATA_CFG.fields = {ARENA_DATA_CFG_ACTIVITY_LEVEL_FIELD, ARENA_DATA_CFG_ACTIVITY_CYCLE_FIELD, ARENA_DATA_CFG_DURATION_FIELD, ARENA_DATA_CFG_DAY_LIST_FIELD, ARENA_DATA_CFG_MAP_ID_FIELD, ARENA_DATA_CFG_SPAN_TIME_FIELD, ARENA_DATA_CFG_MIN_RATIO_FIELD, ARENA_DATA_CFG_RATIO_ADDITION_FIELD, ARENA_DATA_CFG_MAX_RATIO_FIELD, ARENA_DATA_CFG_DIFF_TEAMMATE_FIELD, ARENA_DATA_CFG_DIFF_OPPONENT_FIELD}
+ARENA_DATA_CFG.is_extendable = false
+ARENA_DATA_CFG.extensions = {}
+ARENA_DATA_CFGS_ITEMS_FIELD.name = "items"
+ARENA_DATA_CFGS_ITEMS_FIELD.full_name = ".ftcfg.arena_data_cfgs.items"
+ARENA_DATA_CFGS_ITEMS_FIELD.number = 1
+ARENA_DATA_CFGS_ITEMS_FIELD.index = 0
+ARENA_DATA_CFGS_ITEMS_FIELD.label = 3
+ARENA_DATA_CFGS_ITEMS_FIELD.has_default_value = false
+ARENA_DATA_CFGS_ITEMS_FIELD.default_value = {}
+ARENA_DATA_CFGS_ITEMS_FIELD.message_type = ARENA_DATA_CFG
+ARENA_DATA_CFGS_ITEMS_FIELD.type = 11
+ARENA_DATA_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ARENA_DATA_CFGS.name = "arena_data_cfgs"
+ARENA_DATA_CFGS.full_name = ".ftcfg.arena_data_cfgs"
+ARENA_DATA_CFGS.nested_types = {}
+ARENA_DATA_CFGS.enum_types = {}
+ARENA_DATA_CFGS.fields = {ARENA_DATA_CFGS_ITEMS_FIELD}
+ARENA_DATA_CFGS.is_extendable = false
+ARENA_DATA_CFGS.extensions = {}
+ARENA_REWARD_CFG_ID_FIELD.name = "id"
+ARENA_REWARD_CFG_ID_FIELD.full_name = ".ftcfg.arena_reward_cfg.id"
+ARENA_REWARD_CFG_ID_FIELD.number = 1
+ARENA_REWARD_CFG_ID_FIELD.index = 0
+ARENA_REWARD_CFG_ID_FIELD.label = 2
+ARENA_REWARD_CFG_ID_FIELD.has_default_value = false
+ARENA_REWARD_CFG_ID_FIELD.default_value = 0
+ARENA_REWARD_CFG_ID_FIELD.type = 5
+ARENA_REWARD_CFG_ID_FIELD.cpp_type = 1
+
+ARENA_REWARD_CFG_ITEM_ID_FIELD.name = "item_id"
+ARENA_REWARD_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.arena_reward_cfg.item_id"
+ARENA_REWARD_CFG_ITEM_ID_FIELD.number = 2
+ARENA_REWARD_CFG_ITEM_ID_FIELD.index = 1
+ARENA_REWARD_CFG_ITEM_ID_FIELD.label = 3
+ARENA_REWARD_CFG_ITEM_ID_FIELD.has_default_value = false
+ARENA_REWARD_CFG_ITEM_ID_FIELD.default_value = {}
+ARENA_REWARD_CFG_ITEM_ID_FIELD.type = 13
+ARENA_REWARD_CFG_ITEM_ID_FIELD.cpp_type = 3
+
+ARENA_REWARD_CFG_ITEM_COUNT_FIELD.name = "item_count"
+ARENA_REWARD_CFG_ITEM_COUNT_FIELD.full_name = ".ftcfg.arena_reward_cfg.item_count"
+ARENA_REWARD_CFG_ITEM_COUNT_FIELD.number = 3
+ARENA_REWARD_CFG_ITEM_COUNT_FIELD.index = 2
+ARENA_REWARD_CFG_ITEM_COUNT_FIELD.label = 3
+ARENA_REWARD_CFG_ITEM_COUNT_FIELD.has_default_value = false
+ARENA_REWARD_CFG_ITEM_COUNT_FIELD.default_value = {}
+ARENA_REWARD_CFG_ITEM_COUNT_FIELD.type = 5
+ARENA_REWARD_CFG_ITEM_COUNT_FIELD.cpp_type = 1
+
+ARENA_REWARD_CFG_ATTRIBUTE_TYPE_FIELD.name = "attribute_type"
+ARENA_REWARD_CFG_ATTRIBUTE_TYPE_FIELD.full_name = ".ftcfg.arena_reward_cfg.attribute_type"
+ARENA_REWARD_CFG_ATTRIBUTE_TYPE_FIELD.number = 4
+ARENA_REWARD_CFG_ATTRIBUTE_TYPE_FIELD.index = 3
+ARENA_REWARD_CFG_ATTRIBUTE_TYPE_FIELD.label = 3
+ARENA_REWARD_CFG_ATTRIBUTE_TYPE_FIELD.has_default_value = false
+ARENA_REWARD_CFG_ATTRIBUTE_TYPE_FIELD.default_value = {}
+ARENA_REWARD_CFG_ATTRIBUTE_TYPE_FIELD.type = 5
+ARENA_REWARD_CFG_ATTRIBUTE_TYPE_FIELD.cpp_type = 1
+
+ARENA_REWARD_CFG_ATTRIBUTE_COUNT_FIELD.name = "attribute_count"
+ARENA_REWARD_CFG_ATTRIBUTE_COUNT_FIELD.full_name = ".ftcfg.arena_reward_cfg.attribute_count"
+ARENA_REWARD_CFG_ATTRIBUTE_COUNT_FIELD.number = 5
+ARENA_REWARD_CFG_ATTRIBUTE_COUNT_FIELD.index = 4
+ARENA_REWARD_CFG_ATTRIBUTE_COUNT_FIELD.label = 3
+ARENA_REWARD_CFG_ATTRIBUTE_COUNT_FIELD.has_default_value = false
+ARENA_REWARD_CFG_ATTRIBUTE_COUNT_FIELD.default_value = {}
+ARENA_REWARD_CFG_ATTRIBUTE_COUNT_FIELD.type = 5
+ARENA_REWARD_CFG_ATTRIBUTE_COUNT_FIELD.cpp_type = 1
+
+ARENA_REWARD_CFG.name = "arena_reward_cfg"
+ARENA_REWARD_CFG.full_name = ".ftcfg.arena_reward_cfg"
+ARENA_REWARD_CFG.nested_types = {}
+ARENA_REWARD_CFG.enum_types = {}
+ARENA_REWARD_CFG.fields = {ARENA_REWARD_CFG_ID_FIELD, ARENA_REWARD_CFG_ITEM_ID_FIELD, ARENA_REWARD_CFG_ITEM_COUNT_FIELD, ARENA_REWARD_CFG_ATTRIBUTE_TYPE_FIELD, ARENA_REWARD_CFG_ATTRIBUTE_COUNT_FIELD}
+ARENA_REWARD_CFG.is_extendable = false
+ARENA_REWARD_CFG.extensions = {}
+ARENA_REWARD_CFGS_ITEMS_FIELD.name = "items"
+ARENA_REWARD_CFGS_ITEMS_FIELD.full_name = ".ftcfg.arena_reward_cfgs.items"
+ARENA_REWARD_CFGS_ITEMS_FIELD.number = 1
+ARENA_REWARD_CFGS_ITEMS_FIELD.index = 0
+ARENA_REWARD_CFGS_ITEMS_FIELD.label = 3
+ARENA_REWARD_CFGS_ITEMS_FIELD.has_default_value = false
+ARENA_REWARD_CFGS_ITEMS_FIELD.default_value = {}
+ARENA_REWARD_CFGS_ITEMS_FIELD.message_type = ARENA_REWARD_CFG
+ARENA_REWARD_CFGS_ITEMS_FIELD.type = 11
+ARENA_REWARD_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ARENA_REWARD_CFGS.name = "arena_reward_cfgs"
+ARENA_REWARD_CFGS.full_name = ".ftcfg.arena_reward_cfgs"
+ARENA_REWARD_CFGS.nested_types = {}
+ARENA_REWARD_CFGS.enum_types = {}
+ARENA_REWARD_CFGS.fields = {ARENA_REWARD_CFGS_ITEMS_FIELD}
+ARENA_REWARD_CFGS.is_extendable = false
+ARENA_REWARD_CFGS.extensions = {}
+BOSS_SHOWINFO_CFG_ID_FIELD.name = "id"
+BOSS_SHOWINFO_CFG_ID_FIELD.full_name = ".ftcfg.boss_showinfo_cfg.id"
+BOSS_SHOWINFO_CFG_ID_FIELD.number = 1
+BOSS_SHOWINFO_CFG_ID_FIELD.index = 0
+BOSS_SHOWINFO_CFG_ID_FIELD.label = 2
+BOSS_SHOWINFO_CFG_ID_FIELD.has_default_value = false
+BOSS_SHOWINFO_CFG_ID_FIELD.default_value = 0
+BOSS_SHOWINFO_CFG_ID_FIELD.type = 5
+BOSS_SHOWINFO_CFG_ID_FIELD.cpp_type = 1
+
+BOSS_SHOWINFO_CFG_SHOW_EQU_FIELD.name = "show_equ"
+BOSS_SHOWINFO_CFG_SHOW_EQU_FIELD.full_name = ".ftcfg.boss_showinfo_cfg.show_equ"
+BOSS_SHOWINFO_CFG_SHOW_EQU_FIELD.number = 2
+BOSS_SHOWINFO_CFG_SHOW_EQU_FIELD.index = 1
+BOSS_SHOWINFO_CFG_SHOW_EQU_FIELD.label = 3
+BOSS_SHOWINFO_CFG_SHOW_EQU_FIELD.has_default_value = false
+BOSS_SHOWINFO_CFG_SHOW_EQU_FIELD.default_value = {}
+BOSS_SHOWINFO_CFG_SHOW_EQU_FIELD.type = 9
+BOSS_SHOWINFO_CFG_SHOW_EQU_FIELD.cpp_type = 9
+
+BOSS_SHOWINFO_CFG.name = "boss_showinfo_cfg"
+BOSS_SHOWINFO_CFG.full_name = ".ftcfg.boss_showinfo_cfg"
+BOSS_SHOWINFO_CFG.nested_types = {}
+BOSS_SHOWINFO_CFG.enum_types = {}
+BOSS_SHOWINFO_CFG.fields = {BOSS_SHOWINFO_CFG_ID_FIELD, BOSS_SHOWINFO_CFG_SHOW_EQU_FIELD}
+BOSS_SHOWINFO_CFG.is_extendable = false
+BOSS_SHOWINFO_CFG.extensions = {}
+BOSS_SHOWINFO_CFGS_ITEMS_FIELD.name = "items"
+BOSS_SHOWINFO_CFGS_ITEMS_FIELD.full_name = ".ftcfg.boss_showinfo_cfgs.items"
+BOSS_SHOWINFO_CFGS_ITEMS_FIELD.number = 1
+BOSS_SHOWINFO_CFGS_ITEMS_FIELD.index = 0
+BOSS_SHOWINFO_CFGS_ITEMS_FIELD.label = 3
+BOSS_SHOWINFO_CFGS_ITEMS_FIELD.has_default_value = false
+BOSS_SHOWINFO_CFGS_ITEMS_FIELD.default_value = {}
+BOSS_SHOWINFO_CFGS_ITEMS_FIELD.message_type = BOSS_SHOWINFO_CFG
+BOSS_SHOWINFO_CFGS_ITEMS_FIELD.type = 11
+BOSS_SHOWINFO_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BOSS_SHOWINFO_CFGS.name = "boss_showinfo_cfgs"
+BOSS_SHOWINFO_CFGS.full_name = ".ftcfg.boss_showinfo_cfgs"
+BOSS_SHOWINFO_CFGS.nested_types = {}
+BOSS_SHOWINFO_CFGS.enum_types = {}
+BOSS_SHOWINFO_CFGS.fields = {BOSS_SHOWINFO_CFGS_ITEMS_FIELD}
+BOSS_SHOWINFO_CFGS.is_extendable = false
+BOSS_SHOWINFO_CFGS.extensions = {}
+BOSS_SHOW_UI_CFG_ID_FIELD.name = "id"
+BOSS_SHOW_UI_CFG_ID_FIELD.full_name = ".ftcfg.boss_show_ui_cfg.id"
+BOSS_SHOW_UI_CFG_ID_FIELD.number = 1
+BOSS_SHOW_UI_CFG_ID_FIELD.index = 0
+BOSS_SHOW_UI_CFG_ID_FIELD.label = 2
+BOSS_SHOW_UI_CFG_ID_FIELD.has_default_value = false
+BOSS_SHOW_UI_CFG_ID_FIELD.default_value = 0
+BOSS_SHOW_UI_CFG_ID_FIELD.type = 5
+BOSS_SHOW_UI_CFG_ID_FIELD.cpp_type = 1
+
+BOSS_SHOW_UI_CFG_NAME_FIELD.name = "name"
+BOSS_SHOW_UI_CFG_NAME_FIELD.full_name = ".ftcfg.boss_show_ui_cfg.name"
+BOSS_SHOW_UI_CFG_NAME_FIELD.number = 2
+BOSS_SHOW_UI_CFG_NAME_FIELD.index = 1
+BOSS_SHOW_UI_CFG_NAME_FIELD.label = 2
+BOSS_SHOW_UI_CFG_NAME_FIELD.has_default_value = false
+BOSS_SHOW_UI_CFG_NAME_FIELD.default_value = 0
+BOSS_SHOW_UI_CFG_NAME_FIELD.type = 5
+BOSS_SHOW_UI_CFG_NAME_FIELD.cpp_type = 1
+
+BOSS_SHOW_UI_CFG_LEVEL_FIELD.name = "level"
+BOSS_SHOW_UI_CFG_LEVEL_FIELD.full_name = ".ftcfg.boss_show_ui_cfg.level"
+BOSS_SHOW_UI_CFG_LEVEL_FIELD.number = 3
+BOSS_SHOW_UI_CFG_LEVEL_FIELD.index = 2
+BOSS_SHOW_UI_CFG_LEVEL_FIELD.label = 2
+BOSS_SHOW_UI_CFG_LEVEL_FIELD.has_default_value = false
+BOSS_SHOW_UI_CFG_LEVEL_FIELD.default_value = 0
+BOSS_SHOW_UI_CFG_LEVEL_FIELD.type = 5
+BOSS_SHOW_UI_CFG_LEVEL_FIELD.cpp_type = 1
+
+BOSS_SHOW_UI_CFG_DESC_FIELD.name = "desc"
+BOSS_SHOW_UI_CFG_DESC_FIELD.full_name = ".ftcfg.boss_show_ui_cfg.desc"
+BOSS_SHOW_UI_CFG_DESC_FIELD.number = 4
+BOSS_SHOW_UI_CFG_DESC_FIELD.index = 3
+BOSS_SHOW_UI_CFG_DESC_FIELD.label = 2
+BOSS_SHOW_UI_CFG_DESC_FIELD.has_default_value = false
+BOSS_SHOW_UI_CFG_DESC_FIELD.default_value = 0
+BOSS_SHOW_UI_CFG_DESC_FIELD.type = 5
+BOSS_SHOW_UI_CFG_DESC_FIELD.cpp_type = 1
+
+BOSS_SHOW_UI_CFG_PAINT_FIELD.name = "paint"
+BOSS_SHOW_UI_CFG_PAINT_FIELD.full_name = ".ftcfg.boss_show_ui_cfg.paint"
+BOSS_SHOW_UI_CFG_PAINT_FIELD.number = 5
+BOSS_SHOW_UI_CFG_PAINT_FIELD.index = 4
+BOSS_SHOW_UI_CFG_PAINT_FIELD.label = 2
+BOSS_SHOW_UI_CFG_PAINT_FIELD.has_default_value = false
+BOSS_SHOW_UI_CFG_PAINT_FIELD.default_value = 0
+BOSS_SHOW_UI_CFG_PAINT_FIELD.type = 5
+BOSS_SHOW_UI_CFG_PAINT_FIELD.cpp_type = 1
+
+BOSS_SHOW_UI_CFG_CLOSE_TIMER_FIELD.name = "close_timer"
+BOSS_SHOW_UI_CFG_CLOSE_TIMER_FIELD.full_name = ".ftcfg.boss_show_ui_cfg.close_timer"
+BOSS_SHOW_UI_CFG_CLOSE_TIMER_FIELD.number = 6
+BOSS_SHOW_UI_CFG_CLOSE_TIMER_FIELD.index = 5
+BOSS_SHOW_UI_CFG_CLOSE_TIMER_FIELD.label = 2
+BOSS_SHOW_UI_CFG_CLOSE_TIMER_FIELD.has_default_value = false
+BOSS_SHOW_UI_CFG_CLOSE_TIMER_FIELD.default_value = 0
+BOSS_SHOW_UI_CFG_CLOSE_TIMER_FIELD.type = 5
+BOSS_SHOW_UI_CFG_CLOSE_TIMER_FIELD.cpp_type = 1
+
+BOSS_SHOW_UI_CFG_CAM_MOTION_FIELD.name = "cam_motion"
+BOSS_SHOW_UI_CFG_CAM_MOTION_FIELD.full_name = ".ftcfg.boss_show_ui_cfg.cam_motion"
+BOSS_SHOW_UI_CFG_CAM_MOTION_FIELD.number = 7
+BOSS_SHOW_UI_CFG_CAM_MOTION_FIELD.index = 6
+BOSS_SHOW_UI_CFG_CAM_MOTION_FIELD.label = 2
+BOSS_SHOW_UI_CFG_CAM_MOTION_FIELD.has_default_value = false
+BOSS_SHOW_UI_CFG_CAM_MOTION_FIELD.default_value = 0
+BOSS_SHOW_UI_CFG_CAM_MOTION_FIELD.type = 5
+BOSS_SHOW_UI_CFG_CAM_MOTION_FIELD.cpp_type = 1
+
+BOSS_SHOW_UI_CFG.name = "boss_show_ui_cfg"
+BOSS_SHOW_UI_CFG.full_name = ".ftcfg.boss_show_ui_cfg"
+BOSS_SHOW_UI_CFG.nested_types = {}
+BOSS_SHOW_UI_CFG.enum_types = {}
+BOSS_SHOW_UI_CFG.fields = {BOSS_SHOW_UI_CFG_ID_FIELD, BOSS_SHOW_UI_CFG_NAME_FIELD, BOSS_SHOW_UI_CFG_LEVEL_FIELD, BOSS_SHOW_UI_CFG_DESC_FIELD, BOSS_SHOW_UI_CFG_PAINT_FIELD, BOSS_SHOW_UI_CFG_CLOSE_TIMER_FIELD, BOSS_SHOW_UI_CFG_CAM_MOTION_FIELD}
+BOSS_SHOW_UI_CFG.is_extendable = false
+BOSS_SHOW_UI_CFG.extensions = {}
+BOSS_SHOW_UI_CFGS_ITEMS_FIELD.name = "items"
+BOSS_SHOW_UI_CFGS_ITEMS_FIELD.full_name = ".ftcfg.boss_show_ui_cfgs.items"
+BOSS_SHOW_UI_CFGS_ITEMS_FIELD.number = 1
+BOSS_SHOW_UI_CFGS_ITEMS_FIELD.index = 0
+BOSS_SHOW_UI_CFGS_ITEMS_FIELD.label = 3
+BOSS_SHOW_UI_CFGS_ITEMS_FIELD.has_default_value = false
+BOSS_SHOW_UI_CFGS_ITEMS_FIELD.default_value = {}
+BOSS_SHOW_UI_CFGS_ITEMS_FIELD.message_type = BOSS_SHOW_UI_CFG
+BOSS_SHOW_UI_CFGS_ITEMS_FIELD.type = 11
+BOSS_SHOW_UI_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BOSS_SHOW_UI_CFGS.name = "boss_show_ui_cfgs"
+BOSS_SHOW_UI_CFGS.full_name = ".ftcfg.boss_show_ui_cfgs"
+BOSS_SHOW_UI_CFGS.nested_types = {}
+BOSS_SHOW_UI_CFGS.enum_types = {}
+BOSS_SHOW_UI_CFGS.fields = {BOSS_SHOW_UI_CFGS_ITEMS_FIELD}
+BOSS_SHOW_UI_CFGS.is_extendable = false
+BOSS_SHOW_UI_CFGS.extensions = {}
+BOSS_SHOW_CAM_CFG_ID_FIELD.name = "id"
+BOSS_SHOW_CAM_CFG_ID_FIELD.full_name = ".ftcfg.boss_show_cam_cfg.id"
+BOSS_SHOW_CAM_CFG_ID_FIELD.number = 1
+BOSS_SHOW_CAM_CFG_ID_FIELD.index = 0
+BOSS_SHOW_CAM_CFG_ID_FIELD.label = 2
+BOSS_SHOW_CAM_CFG_ID_FIELD.has_default_value = false
+BOSS_SHOW_CAM_CFG_ID_FIELD.default_value = 0
+BOSS_SHOW_CAM_CFG_ID_FIELD.type = 5
+BOSS_SHOW_CAM_CFG_ID_FIELD.cpp_type = 1
+
+BOSS_SHOW_CAM_CFG_POS_FIELD.name = "pos"
+BOSS_SHOW_CAM_CFG_POS_FIELD.full_name = ".ftcfg.boss_show_cam_cfg.pos"
+BOSS_SHOW_CAM_CFG_POS_FIELD.number = 2
+BOSS_SHOW_CAM_CFG_POS_FIELD.index = 1
+BOSS_SHOW_CAM_CFG_POS_FIELD.label = 3
+BOSS_SHOW_CAM_CFG_POS_FIELD.has_default_value = false
+BOSS_SHOW_CAM_CFG_POS_FIELD.default_value = {}
+BOSS_SHOW_CAM_CFG_POS_FIELD.type = 2
+BOSS_SHOW_CAM_CFG_POS_FIELD.cpp_type = 6
+
+BOSS_SHOW_CAM_CFG_DURATION_FIELD.name = "duration"
+BOSS_SHOW_CAM_CFG_DURATION_FIELD.full_name = ".ftcfg.boss_show_cam_cfg.duration"
+BOSS_SHOW_CAM_CFG_DURATION_FIELD.number = 3
+BOSS_SHOW_CAM_CFG_DURATION_FIELD.index = 2
+BOSS_SHOW_CAM_CFG_DURATION_FIELD.label = 2
+BOSS_SHOW_CAM_CFG_DURATION_FIELD.has_default_value = false
+BOSS_SHOW_CAM_CFG_DURATION_FIELD.default_value = 0.0
+BOSS_SHOW_CAM_CFG_DURATION_FIELD.type = 2
+BOSS_SHOW_CAM_CFG_DURATION_FIELD.cpp_type = 6
+
+BOSS_SHOW_CAM_CFG_ROLL_FIELD.name = "roll"
+BOSS_SHOW_CAM_CFG_ROLL_FIELD.full_name = ".ftcfg.boss_show_cam_cfg.roll"
+BOSS_SHOW_CAM_CFG_ROLL_FIELD.number = 4
+BOSS_SHOW_CAM_CFG_ROLL_FIELD.index = 3
+BOSS_SHOW_CAM_CFG_ROLL_FIELD.label = 2
+BOSS_SHOW_CAM_CFG_ROLL_FIELD.has_default_value = false
+BOSS_SHOW_CAM_CFG_ROLL_FIELD.default_value = 0.0
+BOSS_SHOW_CAM_CFG_ROLL_FIELD.type = 2
+BOSS_SHOW_CAM_CFG_ROLL_FIELD.cpp_type = 6
+
+BOSS_SHOW_CAM_CFG.name = "boss_show_cam_cfg"
+BOSS_SHOW_CAM_CFG.full_name = ".ftcfg.boss_show_cam_cfg"
+BOSS_SHOW_CAM_CFG.nested_types = {}
+BOSS_SHOW_CAM_CFG.enum_types = {}
+BOSS_SHOW_CAM_CFG.fields = {BOSS_SHOW_CAM_CFG_ID_FIELD, BOSS_SHOW_CAM_CFG_POS_FIELD, BOSS_SHOW_CAM_CFG_DURATION_FIELD, BOSS_SHOW_CAM_CFG_ROLL_FIELD}
+BOSS_SHOW_CAM_CFG.is_extendable = false
+BOSS_SHOW_CAM_CFG.extensions = {}
+BOSS_SHOW_CAM_CFGS_ITEMS_FIELD.name = "items"
+BOSS_SHOW_CAM_CFGS_ITEMS_FIELD.full_name = ".ftcfg.boss_show_cam_cfgs.items"
+BOSS_SHOW_CAM_CFGS_ITEMS_FIELD.number = 1
+BOSS_SHOW_CAM_CFGS_ITEMS_FIELD.index = 0
+BOSS_SHOW_CAM_CFGS_ITEMS_FIELD.label = 3
+BOSS_SHOW_CAM_CFGS_ITEMS_FIELD.has_default_value = false
+BOSS_SHOW_CAM_CFGS_ITEMS_FIELD.default_value = {}
+BOSS_SHOW_CAM_CFGS_ITEMS_FIELD.message_type = BOSS_SHOW_CAM_CFG
+BOSS_SHOW_CAM_CFGS_ITEMS_FIELD.type = 11
+BOSS_SHOW_CAM_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BOSS_SHOW_CAM_CFGS.name = "boss_show_cam_cfgs"
+BOSS_SHOW_CAM_CFGS.full_name = ".ftcfg.boss_show_cam_cfgs"
+BOSS_SHOW_CAM_CFGS.nested_types = {}
+BOSS_SHOW_CAM_CFGS.enum_types = {}
+BOSS_SHOW_CAM_CFGS.fields = {BOSS_SHOW_CAM_CFGS_ITEMS_FIELD}
+BOSS_SHOW_CAM_CFGS.is_extendable = false
+BOSS_SHOW_CAM_CFGS.extensions = {}
+BUFF_CFG_ID_FIELD.name = "id"
+BUFF_CFG_ID_FIELD.full_name = ".ftcfg.buff_cfg.id"
+BUFF_CFG_ID_FIELD.number = 1
+BUFF_CFG_ID_FIELD.index = 0
+BUFF_CFG_ID_FIELD.label = 2
+BUFF_CFG_ID_FIELD.has_default_value = false
+BUFF_CFG_ID_FIELD.default_value = 0
+BUFF_CFG_ID_FIELD.type = 5
+BUFF_CFG_ID_FIELD.cpp_type = 1
+
+BUFF_CFG_NAME_TIPS_FIELD.name = "name_tips"
+BUFF_CFG_NAME_TIPS_FIELD.full_name = ".ftcfg.buff_cfg.name_tips"
+BUFF_CFG_NAME_TIPS_FIELD.number = 2
+BUFF_CFG_NAME_TIPS_FIELD.index = 1
+BUFF_CFG_NAME_TIPS_FIELD.label = 2
+BUFF_CFG_NAME_TIPS_FIELD.has_default_value = false
+BUFF_CFG_NAME_TIPS_FIELD.default_value = ""
+BUFF_CFG_NAME_TIPS_FIELD.type = 9
+BUFF_CFG_NAME_TIPS_FIELD.cpp_type = 9
+
+BUFF_CFG_DESC_TIPS_FIELD.name = "desc_tips"
+BUFF_CFG_DESC_TIPS_FIELD.full_name = ".ftcfg.buff_cfg.desc_tips"
+BUFF_CFG_DESC_TIPS_FIELD.number = 3
+BUFF_CFG_DESC_TIPS_FIELD.index = 2
+BUFF_CFG_DESC_TIPS_FIELD.label = 2
+BUFF_CFG_DESC_TIPS_FIELD.has_default_value = false
+BUFF_CFG_DESC_TIPS_FIELD.default_value = ""
+BUFF_CFG_DESC_TIPS_FIELD.type = 9
+BUFF_CFG_DESC_TIPS_FIELD.cpp_type = 9
+
+BUFF_CFG_NAME_FIELD.name = "name"
+BUFF_CFG_NAME_FIELD.full_name = ".ftcfg.buff_cfg.name"
+BUFF_CFG_NAME_FIELD.number = 4
+BUFF_CFG_NAME_FIELD.index = 3
+BUFF_CFG_NAME_FIELD.label = 2
+BUFF_CFG_NAME_FIELD.has_default_value = false
+BUFF_CFG_NAME_FIELD.default_value = 0
+BUFF_CFG_NAME_FIELD.type = 5
+BUFF_CFG_NAME_FIELD.cpp_type = 1
+
+BUFF_CFG_DESC_FIELD.name = "desc"
+BUFF_CFG_DESC_FIELD.full_name = ".ftcfg.buff_cfg.desc"
+BUFF_CFG_DESC_FIELD.number = 5
+BUFF_CFG_DESC_FIELD.index = 4
+BUFF_CFG_DESC_FIELD.label = 2
+BUFF_CFG_DESC_FIELD.has_default_value = false
+BUFF_CFG_DESC_FIELD.default_value = 0
+BUFF_CFG_DESC_FIELD.type = 5
+BUFF_CFG_DESC_FIELD.cpp_type = 1
+
+BUFF_CFG_ICON_FIELD.name = "icon"
+BUFF_CFG_ICON_FIELD.full_name = ".ftcfg.buff_cfg.icon"
+BUFF_CFG_ICON_FIELD.number = 6
+BUFF_CFG_ICON_FIELD.index = 5
+BUFF_CFG_ICON_FIELD.label = 2
+BUFF_CFG_ICON_FIELD.has_default_value = false
+BUFF_CFG_ICON_FIELD.default_value = 0
+BUFF_CFG_ICON_FIELD.type = 5
+BUFF_CFG_ICON_FIELD.cpp_type = 1
+
+BUFF_CFG_VISUABLE_FIELD.name = "visuable"
+BUFF_CFG_VISUABLE_FIELD.full_name = ".ftcfg.buff_cfg.visuable"
+BUFF_CFG_VISUABLE_FIELD.number = 7
+BUFF_CFG_VISUABLE_FIELD.index = 6
+BUFF_CFG_VISUABLE_FIELD.label = 2
+BUFF_CFG_VISUABLE_FIELD.has_default_value = false
+BUFF_CFG_VISUABLE_FIELD.default_value = false
+BUFF_CFG_VISUABLE_FIELD.type = 8
+BUFF_CFG_VISUABLE_FIELD.cpp_type = 7
+
+BUFF_CFG_COUNTDOWN_TYPE_FIELD.name = "countdown_type"
+BUFF_CFG_COUNTDOWN_TYPE_FIELD.full_name = ".ftcfg.buff_cfg.countdown_type"
+BUFF_CFG_COUNTDOWN_TYPE_FIELD.number = 8
+BUFF_CFG_COUNTDOWN_TYPE_FIELD.index = 7
+BUFF_CFG_COUNTDOWN_TYPE_FIELD.label = 2
+BUFF_CFG_COUNTDOWN_TYPE_FIELD.has_default_value = false
+BUFF_CFG_COUNTDOWN_TYPE_FIELD.default_value = 0
+BUFF_CFG_COUNTDOWN_TYPE_FIELD.type = 5
+BUFF_CFG_COUNTDOWN_TYPE_FIELD.cpp_type = 1
+
+BUFF_CFG_BUFF_TYPE_FIELD.name = "buff_type"
+BUFF_CFG_BUFF_TYPE_FIELD.full_name = ".ftcfg.buff_cfg.buff_type"
+BUFF_CFG_BUFF_TYPE_FIELD.number = 9
+BUFF_CFG_BUFF_TYPE_FIELD.index = 8
+BUFF_CFG_BUFF_TYPE_FIELD.label = 2
+BUFF_CFG_BUFF_TYPE_FIELD.has_default_value = false
+BUFF_CFG_BUFF_TYPE_FIELD.default_value = 0
+BUFF_CFG_BUFF_TYPE_FIELD.type = 5
+BUFF_CFG_BUFF_TYPE_FIELD.cpp_type = 1
+
+BUFF_CFG_EXIST_TIME_FIELD.name = "exist_time"
+BUFF_CFG_EXIST_TIME_FIELD.full_name = ".ftcfg.buff_cfg.exist_time"
+BUFF_CFG_EXIST_TIME_FIELD.number = 10
+BUFF_CFG_EXIST_TIME_FIELD.index = 9
+BUFF_CFG_EXIST_TIME_FIELD.label = 2
+BUFF_CFG_EXIST_TIME_FIELD.has_default_value = false
+BUFF_CFG_EXIST_TIME_FIELD.default_value = 0
+BUFF_CFG_EXIST_TIME_FIELD.type = 5
+BUFF_CFG_EXIST_TIME_FIELD.cpp_type = 1
+
+BUFF_CFG_ATK_LV_FIELD.name = "atk_lv"
+BUFF_CFG_ATK_LV_FIELD.full_name = ".ftcfg.buff_cfg.atk_lv"
+BUFF_CFG_ATK_LV_FIELD.number = 11
+BUFF_CFG_ATK_LV_FIELD.index = 10
+BUFF_CFG_ATK_LV_FIELD.label = 2
+BUFF_CFG_ATK_LV_FIELD.has_default_value = false
+BUFF_CFG_ATK_LV_FIELD.default_value = 0
+BUFF_CFG_ATK_LV_FIELD.type = 5
+BUFF_CFG_ATK_LV_FIELD.cpp_type = 1
+
+BUFF_CFG_AM_BEATEN_FIELD.name = "am_beaten"
+BUFF_CFG_AM_BEATEN_FIELD.full_name = ".ftcfg.buff_cfg.am_beaten"
+BUFF_CFG_AM_BEATEN_FIELD.number = 12
+BUFF_CFG_AM_BEATEN_FIELD.index = 11
+BUFF_CFG_AM_BEATEN_FIELD.label = 2
+BUFF_CFG_AM_BEATEN_FIELD.has_default_value = false
+BUFF_CFG_AM_BEATEN_FIELD.default_value = ""
+BUFF_CFG_AM_BEATEN_FIELD.type = 9
+BUFF_CFG_AM_BEATEN_FIELD.cpp_type = 9
+
+BUFF_CFG_AM_BEATEN_EFF_FIELD.name = "am_beaten_eff"
+BUFF_CFG_AM_BEATEN_EFF_FIELD.full_name = ".ftcfg.buff_cfg.am_beaten_eff"
+BUFF_CFG_AM_BEATEN_EFF_FIELD.number = 13
+BUFF_CFG_AM_BEATEN_EFF_FIELD.index = 12
+BUFF_CFG_AM_BEATEN_EFF_FIELD.label = 2
+BUFF_CFG_AM_BEATEN_EFF_FIELD.has_default_value = false
+BUFF_CFG_AM_BEATEN_EFF_FIELD.default_value = ""
+BUFF_CFG_AM_BEATEN_EFF_FIELD.type = 9
+BUFF_CFG_AM_BEATEN_EFF_FIELD.cpp_type = 9
+
+BUFF_CFG_BEATEN_TIME_FIELD.name = "beaten_time"
+BUFF_CFG_BEATEN_TIME_FIELD.full_name = ".ftcfg.buff_cfg.beaten_time"
+BUFF_CFG_BEATEN_TIME_FIELD.number = 14
+BUFF_CFG_BEATEN_TIME_FIELD.index = 13
+BUFF_CFG_BEATEN_TIME_FIELD.label = 2
+BUFF_CFG_BEATEN_TIME_FIELD.has_default_value = false
+BUFF_CFG_BEATEN_TIME_FIELD.default_value = 0
+BUFF_CFG_BEATEN_TIME_FIELD.type = 5
+BUFF_CFG_BEATEN_TIME_FIELD.cpp_type = 1
+
+BUFF_CFG_BEAT_BACK_TYPE_FIELD.name = "beat_back_type"
+BUFF_CFG_BEAT_BACK_TYPE_FIELD.full_name = ".ftcfg.buff_cfg.beat_back_type"
+BUFF_CFG_BEAT_BACK_TYPE_FIELD.number = 15
+BUFF_CFG_BEAT_BACK_TYPE_FIELD.index = 14
+BUFF_CFG_BEAT_BACK_TYPE_FIELD.label = 2
+BUFF_CFG_BEAT_BACK_TYPE_FIELD.has_default_value = false
+BUFF_CFG_BEAT_BACK_TYPE_FIELD.default_value = 0
+BUFF_CFG_BEAT_BACK_TYPE_FIELD.type = 5
+BUFF_CFG_BEAT_BACK_TYPE_FIELD.cpp_type = 1
+
+BUFF_CFG_BEAT_DIS_FIELD.name = "beat_dis"
+BUFF_CFG_BEAT_DIS_FIELD.full_name = ".ftcfg.buff_cfg.beat_dis"
+BUFF_CFG_BEAT_DIS_FIELD.number = 16
+BUFF_CFG_BEAT_DIS_FIELD.index = 15
+BUFF_CFG_BEAT_DIS_FIELD.label = 2
+BUFF_CFG_BEAT_DIS_FIELD.has_default_value = false
+BUFF_CFG_BEAT_DIS_FIELD.default_value = 0.0
+BUFF_CFG_BEAT_DIS_FIELD.type = 2
+BUFF_CFG_BEAT_DIS_FIELD.cpp_type = 6
+
+BUFF_CFG_BEAT_BACK_MOVE_TIME_FIELD.name = "beat_back_move_time"
+BUFF_CFG_BEAT_BACK_MOVE_TIME_FIELD.full_name = ".ftcfg.buff_cfg.beat_back_move_time"
+BUFF_CFG_BEAT_BACK_MOVE_TIME_FIELD.number = 17
+BUFF_CFG_BEAT_BACK_MOVE_TIME_FIELD.index = 16
+BUFF_CFG_BEAT_BACK_MOVE_TIME_FIELD.label = 2
+BUFF_CFG_BEAT_BACK_MOVE_TIME_FIELD.has_default_value = false
+BUFF_CFG_BEAT_BACK_MOVE_TIME_FIELD.default_value = 0
+BUFF_CFG_BEAT_BACK_MOVE_TIME_FIELD.type = 5
+BUFF_CFG_BEAT_BACK_MOVE_TIME_FIELD.cpp_type = 1
+
+BUFF_CFG_AM_DEAD_FIELD.name = "am_dead"
+BUFF_CFG_AM_DEAD_FIELD.full_name = ".ftcfg.buff_cfg.am_dead"
+BUFF_CFG_AM_DEAD_FIELD.number = 18
+BUFF_CFG_AM_DEAD_FIELD.index = 17
+BUFF_CFG_AM_DEAD_FIELD.label = 2
+BUFF_CFG_AM_DEAD_FIELD.has_default_value = false
+BUFF_CFG_AM_DEAD_FIELD.default_value = 0
+BUFF_CFG_AM_DEAD_FIELD.type = 5
+BUFF_CFG_AM_DEAD_FIELD.cpp_type = 1
+
+BUFF_CFG_DEAD_BACK_TYPE_FIELD.name = "dead_back_type"
+BUFF_CFG_DEAD_BACK_TYPE_FIELD.full_name = ".ftcfg.buff_cfg.dead_back_type"
+BUFF_CFG_DEAD_BACK_TYPE_FIELD.number = 19
+BUFF_CFG_DEAD_BACK_TYPE_FIELD.index = 18
+BUFF_CFG_DEAD_BACK_TYPE_FIELD.label = 2
+BUFF_CFG_DEAD_BACK_TYPE_FIELD.has_default_value = false
+BUFF_CFG_DEAD_BACK_TYPE_FIELD.default_value = 0
+BUFF_CFG_DEAD_BACK_TYPE_FIELD.type = 5
+BUFF_CFG_DEAD_BACK_TYPE_FIELD.cpp_type = 1
+
+BUFF_CFG_DEAD_DIS_FIELD.name = "dead_dis"
+BUFF_CFG_DEAD_DIS_FIELD.full_name = ".ftcfg.buff_cfg.dead_dis"
+BUFF_CFG_DEAD_DIS_FIELD.number = 20
+BUFF_CFG_DEAD_DIS_FIELD.index = 19
+BUFF_CFG_DEAD_DIS_FIELD.label = 2
+BUFF_CFG_DEAD_DIS_FIELD.has_default_value = false
+BUFF_CFG_DEAD_DIS_FIELD.default_value = 0.0
+BUFF_CFG_DEAD_DIS_FIELD.type = 2
+BUFF_CFG_DEAD_DIS_FIELD.cpp_type = 6
+
+BUFF_CFG_DEAD_BACK_MOVE_TIME_FIELD.name = "dead_back_move_time"
+BUFF_CFG_DEAD_BACK_MOVE_TIME_FIELD.full_name = ".ftcfg.buff_cfg.dead_back_move_time"
+BUFF_CFG_DEAD_BACK_MOVE_TIME_FIELD.number = 21
+BUFF_CFG_DEAD_BACK_MOVE_TIME_FIELD.index = 20
+BUFF_CFG_DEAD_BACK_MOVE_TIME_FIELD.label = 2
+BUFF_CFG_DEAD_BACK_MOVE_TIME_FIELD.has_default_value = false
+BUFF_CFG_DEAD_BACK_MOVE_TIME_FIELD.default_value = 0
+BUFF_CFG_DEAD_BACK_MOVE_TIME_FIELD.type = 5
+BUFF_CFG_DEAD_BACK_MOVE_TIME_FIELD.cpp_type = 1
+
+BUFF_CFG_CRIT_EFFECT_FIELD.name = "crit_effect"
+BUFF_CFG_CRIT_EFFECT_FIELD.full_name = ".ftcfg.buff_cfg.crit_effect"
+BUFF_CFG_CRIT_EFFECT_FIELD.number = 22
+BUFF_CFG_CRIT_EFFECT_FIELD.index = 21
+BUFF_CFG_CRIT_EFFECT_FIELD.label = 2
+BUFF_CFG_CRIT_EFFECT_FIELD.has_default_value = false
+BUFF_CFG_CRIT_EFFECT_FIELD.default_value = 0
+BUFF_CFG_CRIT_EFFECT_FIELD.type = 5
+BUFF_CFG_CRIT_EFFECT_FIELD.cpp_type = 1
+
+BUFF_CFG_DEAD_STRIKE_EFFECT_FIELD.name = "dead_strike_effect"
+BUFF_CFG_DEAD_STRIKE_EFFECT_FIELD.full_name = ".ftcfg.buff_cfg.dead_strike_effect"
+BUFF_CFG_DEAD_STRIKE_EFFECT_FIELD.number = 23
+BUFF_CFG_DEAD_STRIKE_EFFECT_FIELD.index = 22
+BUFF_CFG_DEAD_STRIKE_EFFECT_FIELD.label = 2
+BUFF_CFG_DEAD_STRIKE_EFFECT_FIELD.has_default_value = false
+BUFF_CFG_DEAD_STRIKE_EFFECT_FIELD.default_value = 0
+BUFF_CFG_DEAD_STRIKE_EFFECT_FIELD.type = 5
+BUFF_CFG_DEAD_STRIKE_EFFECT_FIELD.cpp_type = 1
+
+BUFF_CFG_BUFF_WORD_FIELD.name = "buff_word"
+BUFF_CFG_BUFF_WORD_FIELD.full_name = ".ftcfg.buff_cfg.buff_word"
+BUFF_CFG_BUFF_WORD_FIELD.number = 24
+BUFF_CFG_BUFF_WORD_FIELD.index = 23
+BUFF_CFG_BUFF_WORD_FIELD.label = 2
+BUFF_CFG_BUFF_WORD_FIELD.has_default_value = false
+BUFF_CFG_BUFF_WORD_FIELD.default_value = 0
+BUFF_CFG_BUFF_WORD_FIELD.type = 5
+BUFF_CFG_BUFF_WORD_FIELD.cpp_type = 1
+
+BUFF_CFG_BUFF_IDLE_FIELD.name = "buff_idle"
+BUFF_CFG_BUFF_IDLE_FIELD.full_name = ".ftcfg.buff_cfg.buff_idle"
+BUFF_CFG_BUFF_IDLE_FIELD.number = 25
+BUFF_CFG_BUFF_IDLE_FIELD.index = 24
+BUFF_CFG_BUFF_IDLE_FIELD.label = 2
+BUFF_CFG_BUFF_IDLE_FIELD.has_default_value = false
+BUFF_CFG_BUFF_IDLE_FIELD.default_value = ""
+BUFF_CFG_BUFF_IDLE_FIELD.type = 9
+BUFF_CFG_BUFF_IDLE_FIELD.cpp_type = 9
+
+BUFF_CFG_BUFF_RUN_FIELD.name = "buff_run"
+BUFF_CFG_BUFF_RUN_FIELD.full_name = ".ftcfg.buff_cfg.buff_run"
+BUFF_CFG_BUFF_RUN_FIELD.number = 26
+BUFF_CFG_BUFF_RUN_FIELD.index = 25
+BUFF_CFG_BUFF_RUN_FIELD.label = 2
+BUFF_CFG_BUFF_RUN_FIELD.has_default_value = false
+BUFF_CFG_BUFF_RUN_FIELD.default_value = ""
+BUFF_CFG_BUFF_RUN_FIELD.type = 9
+BUFF_CFG_BUFF_RUN_FIELD.cpp_type = 9
+
+BUFF_CFG_BUFF_EFFECT_FIELD.name = "buff_effect"
+BUFF_CFG_BUFF_EFFECT_FIELD.full_name = ".ftcfg.buff_cfg.buff_effect"
+BUFF_CFG_BUFF_EFFECT_FIELD.number = 27
+BUFF_CFG_BUFF_EFFECT_FIELD.index = 26
+BUFF_CFG_BUFF_EFFECT_FIELD.label = 2
+BUFF_CFG_BUFF_EFFECT_FIELD.has_default_value = false
+BUFF_CFG_BUFF_EFFECT_FIELD.default_value = ""
+BUFF_CFG_BUFF_EFFECT_FIELD.type = 9
+BUFF_CFG_BUFF_EFFECT_FIELD.cpp_type = 9
+
+BUFF_CFG_BUFF_TRIGGER_EFFECT_FIELD.name = "buff_trigger_effect"
+BUFF_CFG_BUFF_TRIGGER_EFFECT_FIELD.full_name = ".ftcfg.buff_cfg.buff_trigger_effect"
+BUFF_CFG_BUFF_TRIGGER_EFFECT_FIELD.number = 28
+BUFF_CFG_BUFF_TRIGGER_EFFECT_FIELD.index = 27
+BUFF_CFG_BUFF_TRIGGER_EFFECT_FIELD.label = 2
+BUFF_CFG_BUFF_TRIGGER_EFFECT_FIELD.has_default_value = false
+BUFF_CFG_BUFF_TRIGGER_EFFECT_FIELD.default_value = ""
+BUFF_CFG_BUFF_TRIGGER_EFFECT_FIELD.type = 9
+BUFF_CFG_BUFF_TRIGGER_EFFECT_FIELD.cpp_type = 9
+
+BUFF_CFG.name = "buff_cfg"
+BUFF_CFG.full_name = ".ftcfg.buff_cfg"
+BUFF_CFG.nested_types = {}
+BUFF_CFG.enum_types = {}
+BUFF_CFG.fields = {BUFF_CFG_ID_FIELD, BUFF_CFG_NAME_TIPS_FIELD, BUFF_CFG_DESC_TIPS_FIELD, BUFF_CFG_NAME_FIELD, BUFF_CFG_DESC_FIELD, BUFF_CFG_ICON_FIELD, BUFF_CFG_VISUABLE_FIELD, BUFF_CFG_COUNTDOWN_TYPE_FIELD, BUFF_CFG_BUFF_TYPE_FIELD, BUFF_CFG_EXIST_TIME_FIELD, BUFF_CFG_ATK_LV_FIELD, BUFF_CFG_AM_BEATEN_FIELD, BUFF_CFG_AM_BEATEN_EFF_FIELD, BUFF_CFG_BEATEN_TIME_FIELD, BUFF_CFG_BEAT_BACK_TYPE_FIELD, BUFF_CFG_BEAT_DIS_FIELD, BUFF_CFG_BEAT_BACK_MOVE_TIME_FIELD, BUFF_CFG_AM_DEAD_FIELD, BUFF_CFG_DEAD_BACK_TYPE_FIELD, BUFF_CFG_DEAD_DIS_FIELD, BUFF_CFG_DEAD_BACK_MOVE_TIME_FIELD, BUFF_CFG_CRIT_EFFECT_FIELD, BUFF_CFG_DEAD_STRIKE_EFFECT_FIELD, BUFF_CFG_BUFF_WORD_FIELD, BUFF_CFG_BUFF_IDLE_FIELD, BUFF_CFG_BUFF_RUN_FIELD, BUFF_CFG_BUFF_EFFECT_FIELD, BUFF_CFG_BUFF_TRIGGER_EFFECT_FIELD}
+BUFF_CFG.is_extendable = false
+BUFF_CFG.extensions = {}
+BUFF_CFGS_ITEMS_FIELD.name = "items"
+BUFF_CFGS_ITEMS_FIELD.full_name = ".ftcfg.buff_cfgs.items"
+BUFF_CFGS_ITEMS_FIELD.number = 1
+BUFF_CFGS_ITEMS_FIELD.index = 0
+BUFF_CFGS_ITEMS_FIELD.label = 3
+BUFF_CFGS_ITEMS_FIELD.has_default_value = false
+BUFF_CFGS_ITEMS_FIELD.default_value = {}
+BUFF_CFGS_ITEMS_FIELD.message_type = BUFF_CFG
+BUFF_CFGS_ITEMS_FIELD.type = 11
+BUFF_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BUFF_CFGS.name = "buff_cfgs"
+BUFF_CFGS.full_name = ".ftcfg.buff_cfgs"
+BUFF_CFGS.nested_types = {}
+BUFF_CFGS.enum_types = {}
+BUFF_CFGS.fields = {BUFF_CFGS_ITEMS_FIELD}
+BUFF_CFGS.is_extendable = false
+BUFF_CFGS.extensions = {}
+BUFF_EFFECT_CFG_ID_FIELD.name = "id"
+BUFF_EFFECT_CFG_ID_FIELD.full_name = ".ftcfg.buff_effect_cfg.id"
+BUFF_EFFECT_CFG_ID_FIELD.number = 1
+BUFF_EFFECT_CFG_ID_FIELD.index = 0
+BUFF_EFFECT_CFG_ID_FIELD.label = 2
+BUFF_EFFECT_CFG_ID_FIELD.has_default_value = false
+BUFF_EFFECT_CFG_ID_FIELD.default_value = 0
+BUFF_EFFECT_CFG_ID_FIELD.type = 5
+BUFF_EFFECT_CFG_ID_FIELD.cpp_type = 1
+
+BUFF_EFFECT_CFG_FORMULA_ID_FIELD.name = "formula_id"
+BUFF_EFFECT_CFG_FORMULA_ID_FIELD.full_name = ".ftcfg.buff_effect_cfg.formula_id"
+BUFF_EFFECT_CFG_FORMULA_ID_FIELD.number = 2
+BUFF_EFFECT_CFG_FORMULA_ID_FIELD.index = 1
+BUFF_EFFECT_CFG_FORMULA_ID_FIELD.label = 2
+BUFF_EFFECT_CFG_FORMULA_ID_FIELD.has_default_value = false
+BUFF_EFFECT_CFG_FORMULA_ID_FIELD.default_value = nil
+BUFF_EFFECT_CFG_FORMULA_ID_FIELD.enum_type = config_predefine_pb.EEFFECTFORMULATYPE
+BUFF_EFFECT_CFG_FORMULA_ID_FIELD.type = 14
+BUFF_EFFECT_CFG_FORMULA_ID_FIELD.cpp_type = 8
+
+BUFF_EFFECT_CFG.name = "buff_effect_cfg"
+BUFF_EFFECT_CFG.full_name = ".ftcfg.buff_effect_cfg"
+BUFF_EFFECT_CFG.nested_types = {}
+BUFF_EFFECT_CFG.enum_types = {}
+BUFF_EFFECT_CFG.fields = {BUFF_EFFECT_CFG_ID_FIELD, BUFF_EFFECT_CFG_FORMULA_ID_FIELD}
+BUFF_EFFECT_CFG.is_extendable = false
+BUFF_EFFECT_CFG.extensions = {}
+BUFF_EFFECT_CFGS_ITEMS_FIELD.name = "items"
+BUFF_EFFECT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.buff_effect_cfgs.items"
+BUFF_EFFECT_CFGS_ITEMS_FIELD.number = 1
+BUFF_EFFECT_CFGS_ITEMS_FIELD.index = 0
+BUFF_EFFECT_CFGS_ITEMS_FIELD.label = 3
+BUFF_EFFECT_CFGS_ITEMS_FIELD.has_default_value = false
+BUFF_EFFECT_CFGS_ITEMS_FIELD.default_value = {}
+BUFF_EFFECT_CFGS_ITEMS_FIELD.message_type = BUFF_EFFECT_CFG
+BUFF_EFFECT_CFGS_ITEMS_FIELD.type = 11
+BUFF_EFFECT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BUFF_EFFECT_CFGS.name = "buff_effect_cfgs"
+BUFF_EFFECT_CFGS.full_name = ".ftcfg.buff_effect_cfgs"
+BUFF_EFFECT_CFGS.nested_types = {}
+BUFF_EFFECT_CFGS.enum_types = {}
+BUFF_EFFECT_CFGS.fields = {BUFF_EFFECT_CFGS_ITEMS_FIELD}
+BUFF_EFFECT_CFGS.is_extendable = false
+BUFF_EFFECT_CFGS.extensions = {}
+CHAR_DEFAULT_CFG_PROF_TYPE_FIELD.name = "prof_type"
+CHAR_DEFAULT_CFG_PROF_TYPE_FIELD.full_name = ".ftcfg.char_default_cfg.prof_type"
+CHAR_DEFAULT_CFG_PROF_TYPE_FIELD.number = 1
+CHAR_DEFAULT_CFG_PROF_TYPE_FIELD.index = 0
+CHAR_DEFAULT_CFG_PROF_TYPE_FIELD.label = 2
+CHAR_DEFAULT_CFG_PROF_TYPE_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_PROF_TYPE_FIELD.default_value = nil
+CHAR_DEFAULT_CFG_PROF_TYPE_FIELD.enum_type = config_predefine_pb.EPROFTYPE
+CHAR_DEFAULT_CFG_PROF_TYPE_FIELD.type = 14
+CHAR_DEFAULT_CFG_PROF_TYPE_FIELD.cpp_type = 8
+
+CHAR_DEFAULT_CFG_GENDER_FIELD.name = "gender"
+CHAR_DEFAULT_CFG_GENDER_FIELD.full_name = ".ftcfg.char_default_cfg.gender"
+CHAR_DEFAULT_CFG_GENDER_FIELD.number = 2
+CHAR_DEFAULT_CFG_GENDER_FIELD.index = 1
+CHAR_DEFAULT_CFG_GENDER_FIELD.label = 2
+CHAR_DEFAULT_CFG_GENDER_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_GENDER_FIELD.default_value = nil
+CHAR_DEFAULT_CFG_GENDER_FIELD.enum_type = config_predefine_pb.EGENDERTYPE
+CHAR_DEFAULT_CFG_GENDER_FIELD.type = 14
+CHAR_DEFAULT_CFG_GENDER_FIELD.cpp_type = 8
+
+CHAR_DEFAULT_CFG_SHOW_INDEX_FIELD.name = "show_index"
+CHAR_DEFAULT_CFG_SHOW_INDEX_FIELD.full_name = ".ftcfg.char_default_cfg.show_index"
+CHAR_DEFAULT_CFG_SHOW_INDEX_FIELD.number = 3
+CHAR_DEFAULT_CFG_SHOW_INDEX_FIELD.index = 2
+CHAR_DEFAULT_CFG_SHOW_INDEX_FIELD.label = 2
+CHAR_DEFAULT_CFG_SHOW_INDEX_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_SHOW_INDEX_FIELD.default_value = 0
+CHAR_DEFAULT_CFG_SHOW_INDEX_FIELD.type = 5
+CHAR_DEFAULT_CFG_SHOW_INDEX_FIELD.cpp_type = 1
+
+CHAR_DEFAULT_CFG_PROF_ICON_FIELD.name = "prof_icon"
+CHAR_DEFAULT_CFG_PROF_ICON_FIELD.full_name = ".ftcfg.char_default_cfg.prof_icon"
+CHAR_DEFAULT_CFG_PROF_ICON_FIELD.number = 4
+CHAR_DEFAULT_CFG_PROF_ICON_FIELD.index = 3
+CHAR_DEFAULT_CFG_PROF_ICON_FIELD.label = 2
+CHAR_DEFAULT_CFG_PROF_ICON_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_PROF_ICON_FIELD.default_value = ""
+CHAR_DEFAULT_CFG_PROF_ICON_FIELD.type = 9
+CHAR_DEFAULT_CFG_PROF_ICON_FIELD.cpp_type = 9
+
+CHAR_DEFAULT_CFG_MODEL_PATH_FIELD.name = "model_path"
+CHAR_DEFAULT_CFG_MODEL_PATH_FIELD.full_name = ".ftcfg.char_default_cfg.model_path"
+CHAR_DEFAULT_CFG_MODEL_PATH_FIELD.number = 5
+CHAR_DEFAULT_CFG_MODEL_PATH_FIELD.index = 4
+CHAR_DEFAULT_CFG_MODEL_PATH_FIELD.label = 2
+CHAR_DEFAULT_CFG_MODEL_PATH_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_MODEL_PATH_FIELD.default_value = 0
+CHAR_DEFAULT_CFG_MODEL_PATH_FIELD.type = 5
+CHAR_DEFAULT_CFG_MODEL_PATH_FIELD.cpp_type = 1
+
+CHAR_DEFAULT_CFG_PROFNAME_ICON_FIELD.name = "profname_icon"
+CHAR_DEFAULT_CFG_PROFNAME_ICON_FIELD.full_name = ".ftcfg.char_default_cfg.profname_icon"
+CHAR_DEFAULT_CFG_PROFNAME_ICON_FIELD.number = 6
+CHAR_DEFAULT_CFG_PROFNAME_ICON_FIELD.index = 5
+CHAR_DEFAULT_CFG_PROFNAME_ICON_FIELD.label = 2
+CHAR_DEFAULT_CFG_PROFNAME_ICON_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_PROFNAME_ICON_FIELD.default_value = ""
+CHAR_DEFAULT_CFG_PROFNAME_ICON_FIELD.type = 9
+CHAR_DEFAULT_CFG_PROFNAME_ICON_FIELD.cpp_type = 9
+
+CHAR_DEFAULT_CFG_PROP_STARS_FIELD.name = "prop_stars"
+CHAR_DEFAULT_CFG_PROP_STARS_FIELD.full_name = ".ftcfg.char_default_cfg.prop_stars"
+CHAR_DEFAULT_CFG_PROP_STARS_FIELD.number = 7
+CHAR_DEFAULT_CFG_PROP_STARS_FIELD.index = 6
+CHAR_DEFAULT_CFG_PROP_STARS_FIELD.label = 3
+CHAR_DEFAULT_CFG_PROP_STARS_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_PROP_STARS_FIELD.default_value = {}
+CHAR_DEFAULT_CFG_PROP_STARS_FIELD.type = 5
+CHAR_DEFAULT_CFG_PROP_STARS_FIELD.cpp_type = 1
+
+CHAR_DEFAULT_CFG_PROF_HEAD_FIELD.name = "prof_head"
+CHAR_DEFAULT_CFG_PROF_HEAD_FIELD.full_name = ".ftcfg.char_default_cfg.prof_head"
+CHAR_DEFAULT_CFG_PROF_HEAD_FIELD.number = 8
+CHAR_DEFAULT_CFG_PROF_HEAD_FIELD.index = 7
+CHAR_DEFAULT_CFG_PROF_HEAD_FIELD.label = 2
+CHAR_DEFAULT_CFG_PROF_HEAD_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_PROF_HEAD_FIELD.default_value = ""
+CHAR_DEFAULT_CFG_PROF_HEAD_FIELD.type = 9
+CHAR_DEFAULT_CFG_PROF_HEAD_FIELD.cpp_type = 9
+
+CHAR_DEFAULT_CFG_POS_DES_FIELD.name = "pos_des"
+CHAR_DEFAULT_CFG_POS_DES_FIELD.full_name = ".ftcfg.char_default_cfg.pos_des"
+CHAR_DEFAULT_CFG_POS_DES_FIELD.number = 9
+CHAR_DEFAULT_CFG_POS_DES_FIELD.index = 8
+CHAR_DEFAULT_CFG_POS_DES_FIELD.label = 2
+CHAR_DEFAULT_CFG_POS_DES_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_POS_DES_FIELD.default_value = 0
+CHAR_DEFAULT_CFG_POS_DES_FIELD.type = 5
+CHAR_DEFAULT_CFG_POS_DES_FIELD.cpp_type = 1
+
+CHAR_DEFAULT_CFG_PROF_NAME_FIELD.name = "prof_name"
+CHAR_DEFAULT_CFG_PROF_NAME_FIELD.full_name = ".ftcfg.char_default_cfg.prof_name"
+CHAR_DEFAULT_CFG_PROF_NAME_FIELD.number = 10
+CHAR_DEFAULT_CFG_PROF_NAME_FIELD.index = 9
+CHAR_DEFAULT_CFG_PROF_NAME_FIELD.label = 2
+CHAR_DEFAULT_CFG_PROF_NAME_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_PROF_NAME_FIELD.default_value = 0
+CHAR_DEFAULT_CFG_PROF_NAME_FIELD.type = 5
+CHAR_DEFAULT_CFG_PROF_NAME_FIELD.cpp_type = 1
+
+CHAR_DEFAULT_CFG_PROF_RES_FIELD.name = "prof_res"
+CHAR_DEFAULT_CFG_PROF_RES_FIELD.full_name = ".ftcfg.char_default_cfg.prof_res"
+CHAR_DEFAULT_CFG_PROF_RES_FIELD.number = 11
+CHAR_DEFAULT_CFG_PROF_RES_FIELD.index = 10
+CHAR_DEFAULT_CFG_PROF_RES_FIELD.label = 2
+CHAR_DEFAULT_CFG_PROF_RES_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_PROF_RES_FIELD.default_value = 0
+CHAR_DEFAULT_CFG_PROF_RES_FIELD.type = 5
+CHAR_DEFAULT_CFG_PROF_RES_FIELD.cpp_type = 1
+
+CHAR_DEFAULT_CFG_PROF_ANIM1_FIELD.name = "prof_anim1"
+CHAR_DEFAULT_CFG_PROF_ANIM1_FIELD.full_name = ".ftcfg.char_default_cfg.prof_anim1"
+CHAR_DEFAULT_CFG_PROF_ANIM1_FIELD.number = 12
+CHAR_DEFAULT_CFG_PROF_ANIM1_FIELD.index = 11
+CHAR_DEFAULT_CFG_PROF_ANIM1_FIELD.label = 2
+CHAR_DEFAULT_CFG_PROF_ANIM1_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_PROF_ANIM1_FIELD.default_value = ""
+CHAR_DEFAULT_CFG_PROF_ANIM1_FIELD.type = 9
+CHAR_DEFAULT_CFG_PROF_ANIM1_FIELD.cpp_type = 9
+
+CHAR_DEFAULT_CFG_PROF_ANIM2_FIELD.name = "prof_anim2"
+CHAR_DEFAULT_CFG_PROF_ANIM2_FIELD.full_name = ".ftcfg.char_default_cfg.prof_anim2"
+CHAR_DEFAULT_CFG_PROF_ANIM2_FIELD.number = 13
+CHAR_DEFAULT_CFG_PROF_ANIM2_FIELD.index = 12
+CHAR_DEFAULT_CFG_PROF_ANIM2_FIELD.label = 2
+CHAR_DEFAULT_CFG_PROF_ANIM2_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_PROF_ANIM2_FIELD.default_value = ""
+CHAR_DEFAULT_CFG_PROF_ANIM2_FIELD.type = 9
+CHAR_DEFAULT_CFG_PROF_ANIM2_FIELD.cpp_type = 9
+
+CHAR_DEFAULT_CFG_SKILL_RES_FIELD.name = "skill_res"
+CHAR_DEFAULT_CFG_SKILL_RES_FIELD.full_name = ".ftcfg.char_default_cfg.skill_res"
+CHAR_DEFAULT_CFG_SKILL_RES_FIELD.number = 14
+CHAR_DEFAULT_CFG_SKILL_RES_FIELD.index = 13
+CHAR_DEFAULT_CFG_SKILL_RES_FIELD.label = 2
+CHAR_DEFAULT_CFG_SKILL_RES_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_SKILL_RES_FIELD.default_value = 0
+CHAR_DEFAULT_CFG_SKILL_RES_FIELD.type = 5
+CHAR_DEFAULT_CFG_SKILL_RES_FIELD.cpp_type = 1
+
+CHAR_DEFAULT_CFG_RANDOM_CFG_FIELD.name = "random_cfg"
+CHAR_DEFAULT_CFG_RANDOM_CFG_FIELD.full_name = ".ftcfg.char_default_cfg.random_cfg"
+CHAR_DEFAULT_CFG_RANDOM_CFG_FIELD.number = 15
+CHAR_DEFAULT_CFG_RANDOM_CFG_FIELD.index = 14
+CHAR_DEFAULT_CFG_RANDOM_CFG_FIELD.label = 2
+CHAR_DEFAULT_CFG_RANDOM_CFG_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_RANDOM_CFG_FIELD.default_value = ""
+CHAR_DEFAULT_CFG_RANDOM_CFG_FIELD.type = 9
+CHAR_DEFAULT_CFG_RANDOM_CFG_FIELD.cpp_type = 9
+
+CHAR_DEFAULT_CFG_IS_OPEN_FIELD.name = "is_open"
+CHAR_DEFAULT_CFG_IS_OPEN_FIELD.full_name = ".ftcfg.char_default_cfg.is_open"
+CHAR_DEFAULT_CFG_IS_OPEN_FIELD.number = 16
+CHAR_DEFAULT_CFG_IS_OPEN_FIELD.index = 15
+CHAR_DEFAULT_CFG_IS_OPEN_FIELD.label = 2
+CHAR_DEFAULT_CFG_IS_OPEN_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_IS_OPEN_FIELD.default_value = false
+CHAR_DEFAULT_CFG_IS_OPEN_FIELD.type = 8
+CHAR_DEFAULT_CFG_IS_OPEN_FIELD.cpp_type = 7
+
+CHAR_DEFAULT_CFG_DEFAULT_PARTS_FIELD.name = "default_parts"
+CHAR_DEFAULT_CFG_DEFAULT_PARTS_FIELD.full_name = ".ftcfg.char_default_cfg.default_parts"
+CHAR_DEFAULT_CFG_DEFAULT_PARTS_FIELD.number = 17
+CHAR_DEFAULT_CFG_DEFAULT_PARTS_FIELD.index = 16
+CHAR_DEFAULT_CFG_DEFAULT_PARTS_FIELD.label = 3
+CHAR_DEFAULT_CFG_DEFAULT_PARTS_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_DEFAULT_PARTS_FIELD.default_value = {}
+CHAR_DEFAULT_CFG_DEFAULT_PARTS_FIELD.type = 5
+CHAR_DEFAULT_CFG_DEFAULT_PARTS_FIELD.cpp_type = 1
+
+CHAR_DEFAULT_CFG_MP_TYPE_FIELD.name = "mp_type"
+CHAR_DEFAULT_CFG_MP_TYPE_FIELD.full_name = ".ftcfg.char_default_cfg.mp_type"
+CHAR_DEFAULT_CFG_MP_TYPE_FIELD.number = 18
+CHAR_DEFAULT_CFG_MP_TYPE_FIELD.index = 17
+CHAR_DEFAULT_CFG_MP_TYPE_FIELD.label = 2
+CHAR_DEFAULT_CFG_MP_TYPE_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_MP_TYPE_FIELD.default_value = 0
+CHAR_DEFAULT_CFG_MP_TYPE_FIELD.type = 5
+CHAR_DEFAULT_CFG_MP_TYPE_FIELD.cpp_type = 1
+
+CHAR_DEFAULT_CFG_IS_MINISTER_FIELD.name = "is_minister"
+CHAR_DEFAULT_CFG_IS_MINISTER_FIELD.full_name = ".ftcfg.char_default_cfg.is_minister"
+CHAR_DEFAULT_CFG_IS_MINISTER_FIELD.number = 19
+CHAR_DEFAULT_CFG_IS_MINISTER_FIELD.index = 18
+CHAR_DEFAULT_CFG_IS_MINISTER_FIELD.label = 2
+CHAR_DEFAULT_CFG_IS_MINISTER_FIELD.has_default_value = false
+CHAR_DEFAULT_CFG_IS_MINISTER_FIELD.default_value = false
+CHAR_DEFAULT_CFG_IS_MINISTER_FIELD.type = 8
+CHAR_DEFAULT_CFG_IS_MINISTER_FIELD.cpp_type = 7
+
+CHAR_DEFAULT_CFG.name = "char_default_cfg"
+CHAR_DEFAULT_CFG.full_name = ".ftcfg.char_default_cfg"
+CHAR_DEFAULT_CFG.nested_types = {}
+CHAR_DEFAULT_CFG.enum_types = {}
+CHAR_DEFAULT_CFG.fields = {CHAR_DEFAULT_CFG_PROF_TYPE_FIELD, CHAR_DEFAULT_CFG_GENDER_FIELD, CHAR_DEFAULT_CFG_SHOW_INDEX_FIELD, CHAR_DEFAULT_CFG_PROF_ICON_FIELD, CHAR_DEFAULT_CFG_MODEL_PATH_FIELD, CHAR_DEFAULT_CFG_PROFNAME_ICON_FIELD, CHAR_DEFAULT_CFG_PROP_STARS_FIELD, CHAR_DEFAULT_CFG_PROF_HEAD_FIELD, CHAR_DEFAULT_CFG_POS_DES_FIELD, CHAR_DEFAULT_CFG_PROF_NAME_FIELD, CHAR_DEFAULT_CFG_PROF_RES_FIELD, CHAR_DEFAULT_CFG_PROF_ANIM1_FIELD, CHAR_DEFAULT_CFG_PROF_ANIM2_FIELD, CHAR_DEFAULT_CFG_SKILL_RES_FIELD, CHAR_DEFAULT_CFG_RANDOM_CFG_FIELD, CHAR_DEFAULT_CFG_IS_OPEN_FIELD, CHAR_DEFAULT_CFG_DEFAULT_PARTS_FIELD, CHAR_DEFAULT_CFG_MP_TYPE_FIELD, CHAR_DEFAULT_CFG_IS_MINISTER_FIELD}
+CHAR_DEFAULT_CFG.is_extendable = false
+CHAR_DEFAULT_CFG.extensions = {}
+CHAR_DEFAULT_CFGS_ITEMS_FIELD.name = "items"
+CHAR_DEFAULT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.char_default_cfgs.items"
+CHAR_DEFAULT_CFGS_ITEMS_FIELD.number = 1
+CHAR_DEFAULT_CFGS_ITEMS_FIELD.index = 0
+CHAR_DEFAULT_CFGS_ITEMS_FIELD.label = 3
+CHAR_DEFAULT_CFGS_ITEMS_FIELD.has_default_value = false
+CHAR_DEFAULT_CFGS_ITEMS_FIELD.default_value = {}
+CHAR_DEFAULT_CFGS_ITEMS_FIELD.message_type = CHAR_DEFAULT_CFG
+CHAR_DEFAULT_CFGS_ITEMS_FIELD.type = 11
+CHAR_DEFAULT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CHAR_DEFAULT_CFGS.name = "char_default_cfgs"
+CHAR_DEFAULT_CFGS.full_name = ".ftcfg.char_default_cfgs"
+CHAR_DEFAULT_CFGS.nested_types = {}
+CHAR_DEFAULT_CFGS.enum_types = {}
+CHAR_DEFAULT_CFGS.fields = {CHAR_DEFAULT_CFGS_ITEMS_FIELD}
+CHAR_DEFAULT_CFGS.is_extendable = false
+CHAR_DEFAULT_CFGS.extensions = {}
+COOLDOWN_CFG_ID_FIELD.name = "id"
+COOLDOWN_CFG_ID_FIELD.full_name = ".ftcfg.cooldown_cfg.id"
+COOLDOWN_CFG_ID_FIELD.number = 1
+COOLDOWN_CFG_ID_FIELD.index = 0
+COOLDOWN_CFG_ID_FIELD.label = 2
+COOLDOWN_CFG_ID_FIELD.has_default_value = false
+COOLDOWN_CFG_ID_FIELD.default_value = 0
+COOLDOWN_CFG_ID_FIELD.type = 5
+COOLDOWN_CFG_ID_FIELD.cpp_type = 1
+
+COOLDOWN_CFG_TATOL_TIME_FIELD.name = "tatol_time"
+COOLDOWN_CFG_TATOL_TIME_FIELD.full_name = ".ftcfg.cooldown_cfg.tatol_time"
+COOLDOWN_CFG_TATOL_TIME_FIELD.number = 2
+COOLDOWN_CFG_TATOL_TIME_FIELD.index = 1
+COOLDOWN_CFG_TATOL_TIME_FIELD.label = 2
+COOLDOWN_CFG_TATOL_TIME_FIELD.has_default_value = false
+COOLDOWN_CFG_TATOL_TIME_FIELD.default_value = 0
+COOLDOWN_CFG_TATOL_TIME_FIELD.type = 5
+COOLDOWN_CFG_TATOL_TIME_FIELD.cpp_type = 1
+
+COOLDOWN_CFG.name = "cooldown_cfg"
+COOLDOWN_CFG.full_name = ".ftcfg.cooldown_cfg"
+COOLDOWN_CFG.nested_types = {}
+COOLDOWN_CFG.enum_types = {}
+COOLDOWN_CFG.fields = {COOLDOWN_CFG_ID_FIELD, COOLDOWN_CFG_TATOL_TIME_FIELD}
+COOLDOWN_CFG.is_extendable = false
+COOLDOWN_CFG.extensions = {}
+COOLDOWN_CFGS_ITEMS_FIELD.name = "items"
+COOLDOWN_CFGS_ITEMS_FIELD.full_name = ".ftcfg.cooldown_cfgs.items"
+COOLDOWN_CFGS_ITEMS_FIELD.number = 1
+COOLDOWN_CFGS_ITEMS_FIELD.index = 0
+COOLDOWN_CFGS_ITEMS_FIELD.label = 3
+COOLDOWN_CFGS_ITEMS_FIELD.has_default_value = false
+COOLDOWN_CFGS_ITEMS_FIELD.default_value = {}
+COOLDOWN_CFGS_ITEMS_FIELD.message_type = COOLDOWN_CFG
+COOLDOWN_CFGS_ITEMS_FIELD.type = 11
+COOLDOWN_CFGS_ITEMS_FIELD.cpp_type = 10
+
+COOLDOWN_CFGS.name = "cooldown_cfgs"
+COOLDOWN_CFGS.full_name = ".ftcfg.cooldown_cfgs"
+COOLDOWN_CFGS.nested_types = {}
+COOLDOWN_CFGS.enum_types = {}
+COOLDOWN_CFGS.fields = {COOLDOWN_CFGS_ITEMS_FIELD}
+COOLDOWN_CFGS.is_extendable = false
+COOLDOWN_CFGS.extensions = {}
+MONSTER_CFG_ID_FIELD.name = "id"
+MONSTER_CFG_ID_FIELD.full_name = ".ftcfg.monster_cfg.id"
+MONSTER_CFG_ID_FIELD.number = 1
+MONSTER_CFG_ID_FIELD.index = 0
+MONSTER_CFG_ID_FIELD.label = 2
+MONSTER_CFG_ID_FIELD.has_default_value = false
+MONSTER_CFG_ID_FIELD.default_value = 0
+MONSTER_CFG_ID_FIELD.type = 13
+MONSTER_CFG_ID_FIELD.cpp_type = 3
+
+MONSTER_CFG_SHOW_NAME_FIELD.name = "show_name"
+MONSTER_CFG_SHOW_NAME_FIELD.full_name = ".ftcfg.monster_cfg.show_name"
+MONSTER_CFG_SHOW_NAME_FIELD.number = 2
+MONSTER_CFG_SHOW_NAME_FIELD.index = 1
+MONSTER_CFG_SHOW_NAME_FIELD.label = 2
+MONSTER_CFG_SHOW_NAME_FIELD.has_default_value = false
+MONSTER_CFG_SHOW_NAME_FIELD.default_value = 0
+MONSTER_CFG_SHOW_NAME_FIELD.type = 5
+MONSTER_CFG_SHOW_NAME_FIELD.cpp_type = 1
+
+MONSTER_CFG_SHOW_ICON_FIELD.name = "show_icon"
+MONSTER_CFG_SHOW_ICON_FIELD.full_name = ".ftcfg.monster_cfg.show_icon"
+MONSTER_CFG_SHOW_ICON_FIELD.number = 3
+MONSTER_CFG_SHOW_ICON_FIELD.index = 2
+MONSTER_CFG_SHOW_ICON_FIELD.label = 2
+MONSTER_CFG_SHOW_ICON_FIELD.has_default_value = false
+MONSTER_CFG_SHOW_ICON_FIELD.default_value = 0
+MONSTER_CFG_SHOW_ICON_FIELD.type = 5
+MONSTER_CFG_SHOW_ICON_FIELD.cpp_type = 1
+
+MONSTER_CFG_WHETHER_SHOWNAME_FIELD.name = "whether_showname"
+MONSTER_CFG_WHETHER_SHOWNAME_FIELD.full_name = ".ftcfg.monster_cfg.whether_showname"
+MONSTER_CFG_WHETHER_SHOWNAME_FIELD.number = 4
+MONSTER_CFG_WHETHER_SHOWNAME_FIELD.index = 3
+MONSTER_CFG_WHETHER_SHOWNAME_FIELD.label = 2
+MONSTER_CFG_WHETHER_SHOWNAME_FIELD.has_default_value = false
+MONSTER_CFG_WHETHER_SHOWNAME_FIELD.default_value = 0
+MONSTER_CFG_WHETHER_SHOWNAME_FIELD.type = 5
+MONSTER_CFG_WHETHER_SHOWNAME_FIELD.cpp_type = 1
+
+MONSTER_CFG_MONSTER_DESC_FIELD.name = "monster_desc"
+MONSTER_CFG_MONSTER_DESC_FIELD.full_name = ".ftcfg.monster_cfg.monster_desc"
+MONSTER_CFG_MONSTER_DESC_FIELD.number = 5
+MONSTER_CFG_MONSTER_DESC_FIELD.index = 4
+MONSTER_CFG_MONSTER_DESC_FIELD.label = 2
+MONSTER_CFG_MONSTER_DESC_FIELD.has_default_value = false
+MONSTER_CFG_MONSTER_DESC_FIELD.default_value = 0
+MONSTER_CFG_MONSTER_DESC_FIELD.type = 5
+MONSTER_CFG_MONSTER_DESC_FIELD.cpp_type = 1
+
+MONSTER_CFG_TYPE_FIELD.name = "type"
+MONSTER_CFG_TYPE_FIELD.full_name = ".ftcfg.monster_cfg.type"
+MONSTER_CFG_TYPE_FIELD.number = 6
+MONSTER_CFG_TYPE_FIELD.index = 5
+MONSTER_CFG_TYPE_FIELD.label = 2
+MONSTER_CFG_TYPE_FIELD.has_default_value = false
+MONSTER_CFG_TYPE_FIELD.default_value = 0
+MONSTER_CFG_TYPE_FIELD.type = 5
+MONSTER_CFG_TYPE_FIELD.cpp_type = 1
+
+MONSTER_CFG_CAMP_FIELD.name = "camp"
+MONSTER_CFG_CAMP_FIELD.full_name = ".ftcfg.monster_cfg.camp"
+MONSTER_CFG_CAMP_FIELD.number = 7
+MONSTER_CFG_CAMP_FIELD.index = 6
+MONSTER_CFG_CAMP_FIELD.label = 2
+MONSTER_CFG_CAMP_FIELD.has_default_value = false
+MONSTER_CFG_CAMP_FIELD.default_value = 0
+MONSTER_CFG_CAMP_FIELD.type = 5
+MONSTER_CFG_CAMP_FIELD.cpp_type = 1
+
+MONSTER_CFG_CAMP_RELATION_FIELD.name = "camp_relation"
+MONSTER_CFG_CAMP_RELATION_FIELD.full_name = ".ftcfg.monster_cfg.camp_relation"
+MONSTER_CFG_CAMP_RELATION_FIELD.number = 8
+MONSTER_CFG_CAMP_RELATION_FIELD.index = 7
+MONSTER_CFG_CAMP_RELATION_FIELD.label = 2
+MONSTER_CFG_CAMP_RELATION_FIELD.has_default_value = false
+MONSTER_CFG_CAMP_RELATION_FIELD.default_value = 0
+MONSTER_CFG_CAMP_RELATION_FIELD.type = 5
+MONSTER_CFG_CAMP_RELATION_FIELD.cpp_type = 1
+
+MONSTER_CFG_PROPS_ID_FIELD.name = "props_id"
+MONSTER_CFG_PROPS_ID_FIELD.full_name = ".ftcfg.monster_cfg.props_id"
+MONSTER_CFG_PROPS_ID_FIELD.number = 9
+MONSTER_CFG_PROPS_ID_FIELD.index = 8
+MONSTER_CFG_PROPS_ID_FIELD.label = 2
+MONSTER_CFG_PROPS_ID_FIELD.has_default_value = false
+MONSTER_CFG_PROPS_ID_FIELD.default_value = 0
+MONSTER_CFG_PROPS_ID_FIELD.type = 5
+MONSTER_CFG_PROPS_ID_FIELD.cpp_type = 1
+
+MONSTER_CFG_LEVEL_FIELD.name = "level"
+MONSTER_CFG_LEVEL_FIELD.full_name = ".ftcfg.monster_cfg.level"
+MONSTER_CFG_LEVEL_FIELD.number = 10
+MONSTER_CFG_LEVEL_FIELD.index = 9
+MONSTER_CFG_LEVEL_FIELD.label = 2
+MONSTER_CFG_LEVEL_FIELD.has_default_value = false
+MONSTER_CFG_LEVEL_FIELD.default_value = 0
+MONSTER_CFG_LEVEL_FIELD.type = 5
+MONSTER_CFG_LEVEL_FIELD.cpp_type = 1
+
+MONSTER_CFG_ATTACK_LEVEL_LIMIT_FIELD.name = "attack_level_limit"
+MONSTER_CFG_ATTACK_LEVEL_LIMIT_FIELD.full_name = ".ftcfg.monster_cfg.attack_level_limit"
+MONSTER_CFG_ATTACK_LEVEL_LIMIT_FIELD.number = 11
+MONSTER_CFG_ATTACK_LEVEL_LIMIT_FIELD.index = 10
+MONSTER_CFG_ATTACK_LEVEL_LIMIT_FIELD.label = 2
+MONSTER_CFG_ATTACK_LEVEL_LIMIT_FIELD.has_default_value = false
+MONSTER_CFG_ATTACK_LEVEL_LIMIT_FIELD.default_value = 0
+MONSTER_CFG_ATTACK_LEVEL_LIMIT_FIELD.type = 5
+MONSTER_CFG_ATTACK_LEVEL_LIMIT_FIELD.cpp_type = 1
+
+MONSTER_CFG_SKILLS_FIELD.name = "skills"
+MONSTER_CFG_SKILLS_FIELD.full_name = ".ftcfg.monster_cfg.skills"
+MONSTER_CFG_SKILLS_FIELD.number = 12
+MONSTER_CFG_SKILLS_FIELD.index = 11
+MONSTER_CFG_SKILLS_FIELD.label = 3
+MONSTER_CFG_SKILLS_FIELD.has_default_value = false
+MONSTER_CFG_SKILLS_FIELD.default_value = {}
+MONSTER_CFG_SKILLS_FIELD.type = 5
+MONSTER_CFG_SKILLS_FIELD.cpp_type = 1
+
+MONSTER_CFG_AVATAR_FIELD.name = "avatar"
+MONSTER_CFG_AVATAR_FIELD.full_name = ".ftcfg.monster_cfg.avatar"
+MONSTER_CFG_AVATAR_FIELD.number = 13
+MONSTER_CFG_AVATAR_FIELD.index = 12
+MONSTER_CFG_AVATAR_FIELD.label = 2
+MONSTER_CFG_AVATAR_FIELD.has_default_value = false
+MONSTER_CFG_AVATAR_FIELD.default_value = 0
+MONSTER_CFG_AVATAR_FIELD.type = 5
+MONSTER_CFG_AVATAR_FIELD.cpp_type = 1
+
+MONSTER_CFG_AVATAR_SCALE_FIELD.name = "avatar_scale"
+MONSTER_CFG_AVATAR_SCALE_FIELD.full_name = ".ftcfg.monster_cfg.avatar_scale"
+MONSTER_CFG_AVATAR_SCALE_FIELD.number = 14
+MONSTER_CFG_AVATAR_SCALE_FIELD.index = 13
+MONSTER_CFG_AVATAR_SCALE_FIELD.label = 2
+MONSTER_CFG_AVATAR_SCALE_FIELD.has_default_value = false
+MONSTER_CFG_AVATAR_SCALE_FIELD.default_value = 0.0
+MONSTER_CFG_AVATAR_SCALE_FIELD.type = 2
+MONSTER_CFG_AVATAR_SCALE_FIELD.cpp_type = 6
+
+MONSTER_CFG_ACT_IDLE_FIELD.name = "act_idle"
+MONSTER_CFG_ACT_IDLE_FIELD.full_name = ".ftcfg.monster_cfg.act_idle"
+MONSTER_CFG_ACT_IDLE_FIELD.number = 15
+MONSTER_CFG_ACT_IDLE_FIELD.index = 14
+MONSTER_CFG_ACT_IDLE_FIELD.label = 2
+MONSTER_CFG_ACT_IDLE_FIELD.has_default_value = false
+MONSTER_CFG_ACT_IDLE_FIELD.default_value = ""
+MONSTER_CFG_ACT_IDLE_FIELD.type = 9
+MONSTER_CFG_ACT_IDLE_FIELD.cpp_type = 9
+
+MONSTER_CFG_ACT_MOVE_FIELD.name = "act_move"
+MONSTER_CFG_ACT_MOVE_FIELD.full_name = ".ftcfg.monster_cfg.act_move"
+MONSTER_CFG_ACT_MOVE_FIELD.number = 16
+MONSTER_CFG_ACT_MOVE_FIELD.index = 15
+MONSTER_CFG_ACT_MOVE_FIELD.label = 2
+MONSTER_CFG_ACT_MOVE_FIELD.has_default_value = false
+MONSTER_CFG_ACT_MOVE_FIELD.default_value = ""
+MONSTER_CFG_ACT_MOVE_FIELD.type = 9
+MONSTER_CFG_ACT_MOVE_FIELD.cpp_type = 9
+
+MONSTER_CFG_ACT_IDLE_BATTLE_FIELD.name = "act_idle_battle"
+MONSTER_CFG_ACT_IDLE_BATTLE_FIELD.full_name = ".ftcfg.monster_cfg.act_idle_battle"
+MONSTER_CFG_ACT_IDLE_BATTLE_FIELD.number = 17
+MONSTER_CFG_ACT_IDLE_BATTLE_FIELD.index = 16
+MONSTER_CFG_ACT_IDLE_BATTLE_FIELD.label = 2
+MONSTER_CFG_ACT_IDLE_BATTLE_FIELD.has_default_value = false
+MONSTER_CFG_ACT_IDLE_BATTLE_FIELD.default_value = ""
+MONSTER_CFG_ACT_IDLE_BATTLE_FIELD.type = 9
+MONSTER_CFG_ACT_IDLE_BATTLE_FIELD.cpp_type = 9
+
+MONSTER_CFG_ACT_MOVE_BATTLE_FIELD.name = "act_move_battle"
+MONSTER_CFG_ACT_MOVE_BATTLE_FIELD.full_name = ".ftcfg.monster_cfg.act_move_battle"
+MONSTER_CFG_ACT_MOVE_BATTLE_FIELD.number = 18
+MONSTER_CFG_ACT_MOVE_BATTLE_FIELD.index = 17
+MONSTER_CFG_ACT_MOVE_BATTLE_FIELD.label = 2
+MONSTER_CFG_ACT_MOVE_BATTLE_FIELD.has_default_value = false
+MONSTER_CFG_ACT_MOVE_BATTLE_FIELD.default_value = ""
+MONSTER_CFG_ACT_MOVE_BATTLE_FIELD.type = 9
+MONSTER_CFG_ACT_MOVE_BATTLE_FIELD.cpp_type = 9
+
+MONSTER_CFG_ACT_BORN_FIELD.name = "act_born"
+MONSTER_CFG_ACT_BORN_FIELD.full_name = ".ftcfg.monster_cfg.act_born"
+MONSTER_CFG_ACT_BORN_FIELD.number = 19
+MONSTER_CFG_ACT_BORN_FIELD.index = 18
+MONSTER_CFG_ACT_BORN_FIELD.label = 2
+MONSTER_CFG_ACT_BORN_FIELD.has_default_value = false
+MONSTER_CFG_ACT_BORN_FIELD.default_value = ""
+MONSTER_CFG_ACT_BORN_FIELD.type = 9
+MONSTER_CFG_ACT_BORN_FIELD.cpp_type = 9
+
+MONSTER_CFG_BORN_TIME_FIELD.name = "born_time"
+MONSTER_CFG_BORN_TIME_FIELD.full_name = ".ftcfg.monster_cfg.born_time"
+MONSTER_CFG_BORN_TIME_FIELD.number = 20
+MONSTER_CFG_BORN_TIME_FIELD.index = 19
+MONSTER_CFG_BORN_TIME_FIELD.label = 2
+MONSTER_CFG_BORN_TIME_FIELD.has_default_value = false
+MONSTER_CFG_BORN_TIME_FIELD.default_value = 0.0
+MONSTER_CFG_BORN_TIME_FIELD.type = 1
+MONSTER_CFG_BORN_TIME_FIELD.cpp_type = 5
+
+MONSTER_CFG_ACT_DEAD_FIELD.name = "act_dead"
+MONSTER_CFG_ACT_DEAD_FIELD.full_name = ".ftcfg.monster_cfg.act_dead"
+MONSTER_CFG_ACT_DEAD_FIELD.number = 21
+MONSTER_CFG_ACT_DEAD_FIELD.index = 20
+MONSTER_CFG_ACT_DEAD_FIELD.label = 3
+MONSTER_CFG_ACT_DEAD_FIELD.has_default_value = false
+MONSTER_CFG_ACT_DEAD_FIELD.default_value = {}
+MONSTER_CFG_ACT_DEAD_FIELD.type = 9
+MONSTER_CFG_ACT_DEAD_FIELD.cpp_type = 9
+
+MONSTER_CFG_RANGE_TYPE_FIELD.name = "range_type"
+MONSTER_CFG_RANGE_TYPE_FIELD.full_name = ".ftcfg.monster_cfg.range_type"
+MONSTER_CFG_RANGE_TYPE_FIELD.number = 22
+MONSTER_CFG_RANGE_TYPE_FIELD.index = 21
+MONSTER_CFG_RANGE_TYPE_FIELD.label = 2
+MONSTER_CFG_RANGE_TYPE_FIELD.has_default_value = false
+MONSTER_CFG_RANGE_TYPE_FIELD.default_value = nil
+MONSTER_CFG_RANGE_TYPE_FIELD.enum_type = config_predefine_pb.EAREATYPE
+MONSTER_CFG_RANGE_TYPE_FIELD.type = 14
+MONSTER_CFG_RANGE_TYPE_FIELD.cpp_type = 8
+
+MONSTER_CFG_RANGE_PARA1_FIELD.name = "range_para1"
+MONSTER_CFG_RANGE_PARA1_FIELD.full_name = ".ftcfg.monster_cfg.range_para1"
+MONSTER_CFG_RANGE_PARA1_FIELD.number = 23
+MONSTER_CFG_RANGE_PARA1_FIELD.index = 22
+MONSTER_CFG_RANGE_PARA1_FIELD.label = 2
+MONSTER_CFG_RANGE_PARA1_FIELD.has_default_value = false
+MONSTER_CFG_RANGE_PARA1_FIELD.default_value = 0.0
+MONSTER_CFG_RANGE_PARA1_FIELD.type = 2
+MONSTER_CFG_RANGE_PARA1_FIELD.cpp_type = 6
+
+MONSTER_CFG_RANGE_PARA2_FIELD.name = "range_para2"
+MONSTER_CFG_RANGE_PARA2_FIELD.full_name = ".ftcfg.monster_cfg.range_para2"
+MONSTER_CFG_RANGE_PARA2_FIELD.number = 24
+MONSTER_CFG_RANGE_PARA2_FIELD.index = 23
+MONSTER_CFG_RANGE_PARA2_FIELD.label = 2
+MONSTER_CFG_RANGE_PARA2_FIELD.has_default_value = false
+MONSTER_CFG_RANGE_PARA2_FIELD.default_value = 0.0
+MONSTER_CFG_RANGE_PARA2_FIELD.type = 2
+MONSTER_CFG_RANGE_PARA2_FIELD.cpp_type = 6
+
+MONSTER_CFG_DROP_FIELD.name = "drop"
+MONSTER_CFG_DROP_FIELD.full_name = ".ftcfg.monster_cfg.drop"
+MONSTER_CFG_DROP_FIELD.number = 25
+MONSTER_CFG_DROP_FIELD.index = 24
+MONSTER_CFG_DROP_FIELD.label = 2
+MONSTER_CFG_DROP_FIELD.has_default_value = false
+MONSTER_CFG_DROP_FIELD.default_value = 0
+MONSTER_CFG_DROP_FIELD.type = 5
+MONSTER_CFG_DROP_FIELD.cpp_type = 1
+
+MONSTER_CFG_HEAD_PORTRAIT_FIELD.name = "head_portrait"
+MONSTER_CFG_HEAD_PORTRAIT_FIELD.full_name = ".ftcfg.monster_cfg.head_portrait"
+MONSTER_CFG_HEAD_PORTRAIT_FIELD.number = 26
+MONSTER_CFG_HEAD_PORTRAIT_FIELD.index = 25
+MONSTER_CFG_HEAD_PORTRAIT_FIELD.label = 2
+MONSTER_CFG_HEAD_PORTRAIT_FIELD.has_default_value = false
+MONSTER_CFG_HEAD_PORTRAIT_FIELD.default_value = 0
+MONSTER_CFG_HEAD_PORTRAIT_FIELD.type = 5
+MONSTER_CFG_HEAD_PORTRAIT_FIELD.cpp_type = 1
+
+MONSTER_CFG_RADIUS_FIELD.name = "radius"
+MONSTER_CFG_RADIUS_FIELD.full_name = ".ftcfg.monster_cfg.radius"
+MONSTER_CFG_RADIUS_FIELD.number = 27
+MONSTER_CFG_RADIUS_FIELD.index = 26
+MONSTER_CFG_RADIUS_FIELD.label = 2
+MONSTER_CFG_RADIUS_FIELD.has_default_value = false
+MONSTER_CFG_RADIUS_FIELD.default_value = 0.0
+MONSTER_CFG_RADIUS_FIELD.type = 2
+MONSTER_CFG_RADIUS_FIELD.cpp_type = 6
+
+MONSTER_CFG_MONSTER_TYPE_FIELD.name = "monster_type"
+MONSTER_CFG_MONSTER_TYPE_FIELD.full_name = ".ftcfg.monster_cfg.monster_type"
+MONSTER_CFG_MONSTER_TYPE_FIELD.number = 28
+MONSTER_CFG_MONSTER_TYPE_FIELD.index = 27
+MONSTER_CFG_MONSTER_TYPE_FIELD.label = 2
+MONSTER_CFG_MONSTER_TYPE_FIELD.has_default_value = false
+MONSTER_CFG_MONSTER_TYPE_FIELD.default_value = 0
+MONSTER_CFG_MONSTER_TYPE_FIELD.type = 5
+MONSTER_CFG_MONSTER_TYPE_FIELD.cpp_type = 1
+
+MONSTER_CFG_LOCK_SIZE_FIELD.name = "lock_size"
+MONSTER_CFG_LOCK_SIZE_FIELD.full_name = ".ftcfg.monster_cfg.lock_size"
+MONSTER_CFG_LOCK_SIZE_FIELD.number = 29
+MONSTER_CFG_LOCK_SIZE_FIELD.index = 28
+MONSTER_CFG_LOCK_SIZE_FIELD.label = 2
+MONSTER_CFG_LOCK_SIZE_FIELD.has_default_value = false
+MONSTER_CFG_LOCK_SIZE_FIELD.default_value = 0.0
+MONSTER_CFG_LOCK_SIZE_FIELD.type = 2
+MONSTER_CFG_LOCK_SIZE_FIELD.cpp_type = 6
+
+MONSTER_CFG_HALO_SWITCH_FIELD.name = "halo_switch"
+MONSTER_CFG_HALO_SWITCH_FIELD.full_name = ".ftcfg.monster_cfg.halo_switch"
+MONSTER_CFG_HALO_SWITCH_FIELD.number = 30
+MONSTER_CFG_HALO_SWITCH_FIELD.index = 29
+MONSTER_CFG_HALO_SWITCH_FIELD.label = 2
+MONSTER_CFG_HALO_SWITCH_FIELD.has_default_value = false
+MONSTER_CFG_HALO_SWITCH_FIELD.default_value = 0.0
+MONSTER_CFG_HALO_SWITCH_FIELD.type = 2
+MONSTER_CFG_HALO_SWITCH_FIELD.cpp_type = 6
+
+MONSTER_CFG_ACTIVITY_EXCLUSIVE_FIELD.name = "activity_exclusive"
+MONSTER_CFG_ACTIVITY_EXCLUSIVE_FIELD.full_name = ".ftcfg.monster_cfg.activity_exclusive"
+MONSTER_CFG_ACTIVITY_EXCLUSIVE_FIELD.number = 31
+MONSTER_CFG_ACTIVITY_EXCLUSIVE_FIELD.index = 30
+MONSTER_CFG_ACTIVITY_EXCLUSIVE_FIELD.label = 2
+MONSTER_CFG_ACTIVITY_EXCLUSIVE_FIELD.has_default_value = false
+MONSTER_CFG_ACTIVITY_EXCLUSIVE_FIELD.default_value = 0
+MONSTER_CFG_ACTIVITY_EXCLUSIVE_FIELD.type = 5
+MONSTER_CFG_ACTIVITY_EXCLUSIVE_FIELD.cpp_type = 1
+
+MONSTER_CFG.name = "monster_cfg"
+MONSTER_CFG.full_name = ".ftcfg.monster_cfg"
+MONSTER_CFG.nested_types = {}
+MONSTER_CFG.enum_types = {}
+MONSTER_CFG.fields = {MONSTER_CFG_ID_FIELD, MONSTER_CFG_SHOW_NAME_FIELD, MONSTER_CFG_SHOW_ICON_FIELD, MONSTER_CFG_WHETHER_SHOWNAME_FIELD, MONSTER_CFG_MONSTER_DESC_FIELD, MONSTER_CFG_TYPE_FIELD, MONSTER_CFG_CAMP_FIELD, MONSTER_CFG_CAMP_RELATION_FIELD, MONSTER_CFG_PROPS_ID_FIELD, MONSTER_CFG_LEVEL_FIELD, MONSTER_CFG_ATTACK_LEVEL_LIMIT_FIELD, MONSTER_CFG_SKILLS_FIELD, MONSTER_CFG_AVATAR_FIELD, MONSTER_CFG_AVATAR_SCALE_FIELD, MONSTER_CFG_ACT_IDLE_FIELD, MONSTER_CFG_ACT_MOVE_FIELD, MONSTER_CFG_ACT_IDLE_BATTLE_FIELD, MONSTER_CFG_ACT_MOVE_BATTLE_FIELD, MONSTER_CFG_ACT_BORN_FIELD, MONSTER_CFG_BORN_TIME_FIELD, MONSTER_CFG_ACT_DEAD_FIELD, MONSTER_CFG_RANGE_TYPE_FIELD, MONSTER_CFG_RANGE_PARA1_FIELD, MONSTER_CFG_RANGE_PARA2_FIELD, MONSTER_CFG_DROP_FIELD, MONSTER_CFG_HEAD_PORTRAIT_FIELD, MONSTER_CFG_RADIUS_FIELD, MONSTER_CFG_MONSTER_TYPE_FIELD, MONSTER_CFG_LOCK_SIZE_FIELD, MONSTER_CFG_HALO_SWITCH_FIELD, MONSTER_CFG_ACTIVITY_EXCLUSIVE_FIELD}
+MONSTER_CFG.is_extendable = false
+MONSTER_CFG.extensions = {}
+MONSTER_CFGS_ITEMS_FIELD.name = "items"
+MONSTER_CFGS_ITEMS_FIELD.full_name = ".ftcfg.monster_cfgs.items"
+MONSTER_CFGS_ITEMS_FIELD.number = 1
+MONSTER_CFGS_ITEMS_FIELD.index = 0
+MONSTER_CFGS_ITEMS_FIELD.label = 3
+MONSTER_CFGS_ITEMS_FIELD.has_default_value = false
+MONSTER_CFGS_ITEMS_FIELD.default_value = {}
+MONSTER_CFGS_ITEMS_FIELD.message_type = MONSTER_CFG
+MONSTER_CFGS_ITEMS_FIELD.type = 11
+MONSTER_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MONSTER_CFGS.name = "monster_cfgs"
+MONSTER_CFGS.full_name = ".ftcfg.monster_cfgs"
+MONSTER_CFGS.nested_types = {}
+MONSTER_CFGS.enum_types = {}
+MONSTER_CFGS.fields = {MONSTER_CFGS_ITEMS_FIELD}
+MONSTER_CFGS.is_extendable = false
+MONSTER_CFGS.extensions = {}
+BUSINESS_ACTIVITY_CFG_GUID_FIELD.name = "guid"
+BUSINESS_ACTIVITY_CFG_GUID_FIELD.full_name = ".ftcfg.business_activity_cfg.guid"
+BUSINESS_ACTIVITY_CFG_GUID_FIELD.number = 1
+BUSINESS_ACTIVITY_CFG_GUID_FIELD.index = 0
+BUSINESS_ACTIVITY_CFG_GUID_FIELD.label = 2
+BUSINESS_ACTIVITY_CFG_GUID_FIELD.has_default_value = false
+BUSINESS_ACTIVITY_CFG_GUID_FIELD.default_value = 0
+BUSINESS_ACTIVITY_CFG_GUID_FIELD.type = 13
+BUSINESS_ACTIVITY_CFG_GUID_FIELD.cpp_type = 3
+
+BUSINESS_ACTIVITY_CFG_BUSINESS_ID_FIELD.name = "business_id"
+BUSINESS_ACTIVITY_CFG_BUSINESS_ID_FIELD.full_name = ".ftcfg.business_activity_cfg.business_id"
+BUSINESS_ACTIVITY_CFG_BUSINESS_ID_FIELD.number = 2
+BUSINESS_ACTIVITY_CFG_BUSINESS_ID_FIELD.index = 1
+BUSINESS_ACTIVITY_CFG_BUSINESS_ID_FIELD.label = 2
+BUSINESS_ACTIVITY_CFG_BUSINESS_ID_FIELD.has_default_value = false
+BUSINESS_ACTIVITY_CFG_BUSINESS_ID_FIELD.default_value = 0
+BUSINESS_ACTIVITY_CFG_BUSINESS_ID_FIELD.type = 13
+BUSINESS_ACTIVITY_CFG_BUSINESS_ID_FIELD.cpp_type = 3
+
+BUSINESS_ACTIVITY_CFG.name = "business_activity_cfg"
+BUSINESS_ACTIVITY_CFG.full_name = ".ftcfg.business_activity_cfg"
+BUSINESS_ACTIVITY_CFG.nested_types = {}
+BUSINESS_ACTIVITY_CFG.enum_types = {}
+BUSINESS_ACTIVITY_CFG.fields = {BUSINESS_ACTIVITY_CFG_GUID_FIELD, BUSINESS_ACTIVITY_CFG_BUSINESS_ID_FIELD}
+BUSINESS_ACTIVITY_CFG.is_extendable = false
+BUSINESS_ACTIVITY_CFG.extensions = {}
+BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD.name = "items"
+BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD.full_name = ".ftcfg.business_activity_cfgs.items"
+BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD.number = 1
+BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD.index = 0
+BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD.label = 3
+BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD.has_default_value = false
+BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD.default_value = {}
+BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD.message_type = BUSINESS_ACTIVITY_CFG
+BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD.type = 11
+BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BUSINESS_ACTIVITY_CFGS.name = "business_activity_cfgs"
+BUSINESS_ACTIVITY_CFGS.full_name = ".ftcfg.business_activity_cfgs"
+BUSINESS_ACTIVITY_CFGS.nested_types = {}
+BUSINESS_ACTIVITY_CFGS.enum_types = {}
+BUSINESS_ACTIVITY_CFGS.fields = {BUSINESS_ACTIVITY_CFGS_ITEMS_FIELD}
+BUSINESS_ACTIVITY_CFGS.is_extendable = false
+BUSINESS_ACTIVITY_CFGS.extensions = {}
+ACTIVITY_CFG_GUID_FIELD.name = "guid"
+ACTIVITY_CFG_GUID_FIELD.full_name = ".ftcfg.activity_cfg.guid"
+ACTIVITY_CFG_GUID_FIELD.number = 1
+ACTIVITY_CFG_GUID_FIELD.index = 0
+ACTIVITY_CFG_GUID_FIELD.label = 2
+ACTIVITY_CFG_GUID_FIELD.has_default_value = false
+ACTIVITY_CFG_GUID_FIELD.default_value = 0
+ACTIVITY_CFG_GUID_FIELD.type = 13
+ACTIVITY_CFG_GUID_FIELD.cpp_type = 3
+
+ACTIVITY_CFG_DACTIVITY_NAME_FIELD.name = "dactivity_name"
+ACTIVITY_CFG_DACTIVITY_NAME_FIELD.full_name = ".ftcfg.activity_cfg.dactivity_name"
+ACTIVITY_CFG_DACTIVITY_NAME_FIELD.number = 2
+ACTIVITY_CFG_DACTIVITY_NAME_FIELD.index = 1
+ACTIVITY_CFG_DACTIVITY_NAME_FIELD.label = 2
+ACTIVITY_CFG_DACTIVITY_NAME_FIELD.has_default_value = false
+ACTIVITY_CFG_DACTIVITY_NAME_FIELD.default_value = 0
+ACTIVITY_CFG_DACTIVITY_NAME_FIELD.type = 5
+ACTIVITY_CFG_DACTIVITY_NAME_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_NAME_FIELD.name = "name"
+ACTIVITY_CFG_NAME_FIELD.full_name = ".ftcfg.activity_cfg.name"
+ACTIVITY_CFG_NAME_FIELD.number = 3
+ACTIVITY_CFG_NAME_FIELD.index = 2
+ACTIVITY_CFG_NAME_FIELD.label = 2
+ACTIVITY_CFG_NAME_FIELD.has_default_value = false
+ACTIVITY_CFG_NAME_FIELD.default_value = ""
+ACTIVITY_CFG_NAME_FIELD.type = 9
+ACTIVITY_CFG_NAME_FIELD.cpp_type = 9
+
+ACTIVITY_CFG_TYPE_FIELD.name = "type"
+ACTIVITY_CFG_TYPE_FIELD.full_name = ".ftcfg.activity_cfg.type"
+ACTIVITY_CFG_TYPE_FIELD.number = 4
+ACTIVITY_CFG_TYPE_FIELD.index = 3
+ACTIVITY_CFG_TYPE_FIELD.label = 2
+ACTIVITY_CFG_TYPE_FIELD.has_default_value = false
+ACTIVITY_CFG_TYPE_FIELD.default_value = 0
+ACTIVITY_CFG_TYPE_FIELD.type = 13
+ACTIVITY_CFG_TYPE_FIELD.cpp_type = 3
+
+ACTIVITY_CFG_ACTIVITY_PLAY_FIELD.name = "activity_play"
+ACTIVITY_CFG_ACTIVITY_PLAY_FIELD.full_name = ".ftcfg.activity_cfg.activity_play"
+ACTIVITY_CFG_ACTIVITY_PLAY_FIELD.number = 5
+ACTIVITY_CFG_ACTIVITY_PLAY_FIELD.index = 4
+ACTIVITY_CFG_ACTIVITY_PLAY_FIELD.label = 2
+ACTIVITY_CFG_ACTIVITY_PLAY_FIELD.has_default_value = false
+ACTIVITY_CFG_ACTIVITY_PLAY_FIELD.default_value = 0
+ACTIVITY_CFG_ACTIVITY_PLAY_FIELD.type = 13
+ACTIVITY_CFG_ACTIVITY_PLAY_FIELD.cpp_type = 3
+
+ACTIVITY_CFG_NEED_LEVEL_FIELD.name = "need_level"
+ACTIVITY_CFG_NEED_LEVEL_FIELD.full_name = ".ftcfg.activity_cfg.need_level"
+ACTIVITY_CFG_NEED_LEVEL_FIELD.number = 6
+ACTIVITY_CFG_NEED_LEVEL_FIELD.index = 5
+ACTIVITY_CFG_NEED_LEVEL_FIELD.label = 2
+ACTIVITY_CFG_NEED_LEVEL_FIELD.has_default_value = false
+ACTIVITY_CFG_NEED_LEVEL_FIELD.default_value = 0
+ACTIVITY_CFG_NEED_LEVEL_FIELD.type = 13
+ACTIVITY_CFG_NEED_LEVEL_FIELD.cpp_type = 3
+
+ACTIVITY_CFG_TOTAL_TIMES_FIELD.name = "total_times"
+ACTIVITY_CFG_TOTAL_TIMES_FIELD.full_name = ".ftcfg.activity_cfg.total_times"
+ACTIVITY_CFG_TOTAL_TIMES_FIELD.number = 7
+ACTIVITY_CFG_TOTAL_TIMES_FIELD.index = 6
+ACTIVITY_CFG_TOTAL_TIMES_FIELD.label = 2
+ACTIVITY_CFG_TOTAL_TIMES_FIELD.has_default_value = false
+ACTIVITY_CFG_TOTAL_TIMES_FIELD.default_value = 0
+ACTIVITY_CFG_TOTAL_TIMES_FIELD.type = 13
+ACTIVITY_CFG_TOTAL_TIMES_FIELD.cpp_type = 3
+
+ACTIVITY_CFG_ACTIVATION_POINT_FIELD.name = "activation_point"
+ACTIVITY_CFG_ACTIVATION_POINT_FIELD.full_name = ".ftcfg.activity_cfg.activation_point"
+ACTIVITY_CFG_ACTIVATION_POINT_FIELD.number = 8
+ACTIVITY_CFG_ACTIVATION_POINT_FIELD.index = 7
+ACTIVITY_CFG_ACTIVATION_POINT_FIELD.label = 2
+ACTIVITY_CFG_ACTIVATION_POINT_FIELD.has_default_value = false
+ACTIVITY_CFG_ACTIVATION_POINT_FIELD.default_value = 0
+ACTIVITY_CFG_ACTIVATION_POINT_FIELD.type = 13
+ACTIVITY_CFG_ACTIVATION_POINT_FIELD.cpp_type = 3
+
+ACTIVITY_CFG_ACTIVATION_TOPLIMIT_FIELD.name = "activation_toplimit"
+ACTIVITY_CFG_ACTIVATION_TOPLIMIT_FIELD.full_name = ".ftcfg.activity_cfg.activation_toplimit"
+ACTIVITY_CFG_ACTIVATION_TOPLIMIT_FIELD.number = 9
+ACTIVITY_CFG_ACTIVATION_TOPLIMIT_FIELD.index = 8
+ACTIVITY_CFG_ACTIVATION_TOPLIMIT_FIELD.label = 2
+ACTIVITY_CFG_ACTIVATION_TOPLIMIT_FIELD.has_default_value = false
+ACTIVITY_CFG_ACTIVATION_TOPLIMIT_FIELD.default_value = 0
+ACTIVITY_CFG_ACTIVATION_TOPLIMIT_FIELD.type = 13
+ACTIVITY_CFG_ACTIVATION_TOPLIMIT_FIELD.cpp_type = 3
+
+ACTIVITY_CFG_ACTIVATION_MODE_FIELD.name = "activation_mode"
+ACTIVITY_CFG_ACTIVATION_MODE_FIELD.full_name = ".ftcfg.activity_cfg.activation_mode"
+ACTIVITY_CFG_ACTIVATION_MODE_FIELD.number = 10
+ACTIVITY_CFG_ACTIVATION_MODE_FIELD.index = 9
+ACTIVITY_CFG_ACTIVATION_MODE_FIELD.label = 2
+ACTIVITY_CFG_ACTIVATION_MODE_FIELD.has_default_value = false
+ACTIVITY_CFG_ACTIVATION_MODE_FIELD.default_value = 0
+ACTIVITY_CFG_ACTIVATION_MODE_FIELD.type = 13
+ACTIVITY_CFG_ACTIVATION_MODE_FIELD.cpp_type = 3
+
+ACTIVITY_CFG_START_WEEKS_FIELD.name = "start_weeks"
+ACTIVITY_CFG_START_WEEKS_FIELD.full_name = ".ftcfg.activity_cfg.start_weeks"
+ACTIVITY_CFG_START_WEEKS_FIELD.number = 11
+ACTIVITY_CFG_START_WEEKS_FIELD.index = 10
+ACTIVITY_CFG_START_WEEKS_FIELD.label = 3
+ACTIVITY_CFG_START_WEEKS_FIELD.has_default_value = false
+ACTIVITY_CFG_START_WEEKS_FIELD.default_value = {}
+ACTIVITY_CFG_START_WEEKS_FIELD.type = 13
+ACTIVITY_CFG_START_WEEKS_FIELD.cpp_type = 3
+
+ACTIVITY_CFG_SIGNUP_TIME_FIELD.name = "signup_time"
+ACTIVITY_CFG_SIGNUP_TIME_FIELD.full_name = ".ftcfg.activity_cfg.signup_time"
+ACTIVITY_CFG_SIGNUP_TIME_FIELD.number = 12
+ACTIVITY_CFG_SIGNUP_TIME_FIELD.index = 11
+ACTIVITY_CFG_SIGNUP_TIME_FIELD.label = 3
+ACTIVITY_CFG_SIGNUP_TIME_FIELD.has_default_value = false
+ACTIVITY_CFG_SIGNUP_TIME_FIELD.default_value = {}
+ACTIVITY_CFG_SIGNUP_TIME_FIELD.type = 9
+ACTIVITY_CFG_SIGNUP_TIME_FIELD.cpp_type = 9
+
+ACTIVITY_CFG_SIGNDOWN_TIME_FIELD.name = "signdown_time"
+ACTIVITY_CFG_SIGNDOWN_TIME_FIELD.full_name = ".ftcfg.activity_cfg.signdown_time"
+ACTIVITY_CFG_SIGNDOWN_TIME_FIELD.number = 13
+ACTIVITY_CFG_SIGNDOWN_TIME_FIELD.index = 12
+ACTIVITY_CFG_SIGNDOWN_TIME_FIELD.label = 3
+ACTIVITY_CFG_SIGNDOWN_TIME_FIELD.has_default_value = false
+ACTIVITY_CFG_SIGNDOWN_TIME_FIELD.default_value = {}
+ACTIVITY_CFG_SIGNDOWN_TIME_FIELD.type = 9
+ACTIVITY_CFG_SIGNDOWN_TIME_FIELD.cpp_type = 9
+
+ACTIVITY_CFG_BEGIN_TIME_FIELD.name = "begin_time"
+ACTIVITY_CFG_BEGIN_TIME_FIELD.full_name = ".ftcfg.activity_cfg.begin_time"
+ACTIVITY_CFG_BEGIN_TIME_FIELD.number = 14
+ACTIVITY_CFG_BEGIN_TIME_FIELD.index = 13
+ACTIVITY_CFG_BEGIN_TIME_FIELD.label = 3
+ACTIVITY_CFG_BEGIN_TIME_FIELD.has_default_value = false
+ACTIVITY_CFG_BEGIN_TIME_FIELD.default_value = {}
+ACTIVITY_CFG_BEGIN_TIME_FIELD.type = 9
+ACTIVITY_CFG_BEGIN_TIME_FIELD.cpp_type = 9
+
+ACTIVITY_CFG_END_TIME_FIELD.name = "end_time"
+ACTIVITY_CFG_END_TIME_FIELD.full_name = ".ftcfg.activity_cfg.end_time"
+ACTIVITY_CFG_END_TIME_FIELD.number = 15
+ACTIVITY_CFG_END_TIME_FIELD.index = 14
+ACTIVITY_CFG_END_TIME_FIELD.label = 3
+ACTIVITY_CFG_END_TIME_FIELD.has_default_value = false
+ACTIVITY_CFG_END_TIME_FIELD.default_value = {}
+ACTIVITY_CFG_END_TIME_FIELD.type = 9
+ACTIVITY_CFG_END_TIME_FIELD.cpp_type = 9
+
+ACTIVITY_CFG_DAILY_TYPE_FIELD.name = "daily_type"
+ACTIVITY_CFG_DAILY_TYPE_FIELD.full_name = ".ftcfg.activity_cfg.daily_type"
+ACTIVITY_CFG_DAILY_TYPE_FIELD.number = 16
+ACTIVITY_CFG_DAILY_TYPE_FIELD.index = 15
+ACTIVITY_CFG_DAILY_TYPE_FIELD.label = 2
+ACTIVITY_CFG_DAILY_TYPE_FIELD.has_default_value = false
+ACTIVITY_CFG_DAILY_TYPE_FIELD.default_value = 0
+ACTIVITY_CFG_DAILY_TYPE_FIELD.type = 5
+ACTIVITY_CFG_DAILY_TYPE_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_WHETHER_BATTLE_FIELD.name = "whether_battle"
+ACTIVITY_CFG_WHETHER_BATTLE_FIELD.full_name = ".ftcfg.activity_cfg.whether_battle"
+ACTIVITY_CFG_WHETHER_BATTLE_FIELD.number = 17
+ACTIVITY_CFG_WHETHER_BATTLE_FIELD.index = 16
+ACTIVITY_CFG_WHETHER_BATTLE_FIELD.label = 2
+ACTIVITY_CFG_WHETHER_BATTLE_FIELD.has_default_value = false
+ACTIVITY_CFG_WHETHER_BATTLE_FIELD.default_value = 0
+ACTIVITY_CFG_WHETHER_BATTLE_FIELD.type = 5
+ACTIVITY_CFG_WHETHER_BATTLE_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_DACTIVITY_ICON_FIELD.name = "dactivity_icon"
+ACTIVITY_CFG_DACTIVITY_ICON_FIELD.full_name = ".ftcfg.activity_cfg.dactivity_icon"
+ACTIVITY_CFG_DACTIVITY_ICON_FIELD.number = 18
+ACTIVITY_CFG_DACTIVITY_ICON_FIELD.index = 17
+ACTIVITY_CFG_DACTIVITY_ICON_FIELD.label = 2
+ACTIVITY_CFG_DACTIVITY_ICON_FIELD.has_default_value = false
+ACTIVITY_CFG_DACTIVITY_ICON_FIELD.default_value = 0
+ACTIVITY_CFG_DACTIVITY_ICON_FIELD.type = 5
+ACTIVITY_CFG_DACTIVITY_ICON_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_PARTAKE_MODE_FIELD.name = "partake_mode"
+ACTIVITY_CFG_PARTAKE_MODE_FIELD.full_name = ".ftcfg.activity_cfg.partake_mode"
+ACTIVITY_CFG_PARTAKE_MODE_FIELD.number = 19
+ACTIVITY_CFG_PARTAKE_MODE_FIELD.index = 18
+ACTIVITY_CFG_PARTAKE_MODE_FIELD.label = 2
+ACTIVITY_CFG_PARTAKE_MODE_FIELD.has_default_value = false
+ACTIVITY_CFG_PARTAKE_MODE_FIELD.default_value = 0
+ACTIVITY_CFG_PARTAKE_MODE_FIELD.type = 5
+ACTIVITY_CFG_PARTAKE_MODE_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_PARTAKE_SUBTYPE_FIELD.name = "partake_subtype"
+ACTIVITY_CFG_PARTAKE_SUBTYPE_FIELD.full_name = ".ftcfg.activity_cfg.partake_subtype"
+ACTIVITY_CFG_PARTAKE_SUBTYPE_FIELD.number = 20
+ACTIVITY_CFG_PARTAKE_SUBTYPE_FIELD.index = 19
+ACTIVITY_CFG_PARTAKE_SUBTYPE_FIELD.label = 2
+ACTIVITY_CFG_PARTAKE_SUBTYPE_FIELD.has_default_value = false
+ACTIVITY_CFG_PARTAKE_SUBTYPE_FIELD.default_value = 0
+ACTIVITY_CFG_PARTAKE_SUBTYPE_FIELD.type = 5
+ACTIVITY_CFG_PARTAKE_SUBTYPE_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_TICKETITEM_ID_FIELD.name = "ticketitem_id"
+ACTIVITY_CFG_TICKETITEM_ID_FIELD.full_name = ".ftcfg.activity_cfg.ticketitem_id"
+ACTIVITY_CFG_TICKETITEM_ID_FIELD.number = 21
+ACTIVITY_CFG_TICKETITEM_ID_FIELD.index = 20
+ACTIVITY_CFG_TICKETITEM_ID_FIELD.label = 2
+ACTIVITY_CFG_TICKETITEM_ID_FIELD.has_default_value = false
+ACTIVITY_CFG_TICKETITEM_ID_FIELD.default_value = 0
+ACTIVITY_CFG_TICKETITEM_ID_FIELD.type = 5
+ACTIVITY_CFG_TICKETITEM_ID_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_TICKETITEM_COUNT_FIELD.name = "ticketitem_count"
+ACTIVITY_CFG_TICKETITEM_COUNT_FIELD.full_name = ".ftcfg.activity_cfg.ticketitem_count"
+ACTIVITY_CFG_TICKETITEM_COUNT_FIELD.number = 22
+ACTIVITY_CFG_TICKETITEM_COUNT_FIELD.index = 21
+ACTIVITY_CFG_TICKETITEM_COUNT_FIELD.label = 2
+ACTIVITY_CFG_TICKETITEM_COUNT_FIELD.has_default_value = false
+ACTIVITY_CFG_TICKETITEM_COUNT_FIELD.default_value = 0
+ACTIVITY_CFG_TICKETITEM_COUNT_FIELD.type = 5
+ACTIVITY_CFG_TICKETITEM_COUNT_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_CONDUCT_SCENEID_FIELD.name = "conduct_sceneid"
+ACTIVITY_CFG_CONDUCT_SCENEID_FIELD.full_name = ".ftcfg.activity_cfg.conduct_sceneid"
+ACTIVITY_CFG_CONDUCT_SCENEID_FIELD.number = 23
+ACTIVITY_CFG_CONDUCT_SCENEID_FIELD.index = 22
+ACTIVITY_CFG_CONDUCT_SCENEID_FIELD.label = 2
+ACTIVITY_CFG_CONDUCT_SCENEID_FIELD.has_default_value = false
+ACTIVITY_CFG_CONDUCT_SCENEID_FIELD.default_value = 0
+ACTIVITY_CFG_CONDUCT_SCENEID_FIELD.type = 5
+ACTIVITY_CFG_CONDUCT_SCENEID_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_FINDING_PATH_FIELD.name = "finding_path"
+ACTIVITY_CFG_FINDING_PATH_FIELD.full_name = ".ftcfg.activity_cfg.finding_path"
+ACTIVITY_CFG_FINDING_PATH_FIELD.number = 24
+ACTIVITY_CFG_FINDING_PATH_FIELD.index = 23
+ACTIVITY_CFG_FINDING_PATH_FIELD.label = 2
+ACTIVITY_CFG_FINDING_PATH_FIELD.has_default_value = false
+ACTIVITY_CFG_FINDING_PATH_FIELD.default_value = 0
+ACTIVITY_CFG_FINDING_PATH_FIELD.type = 5
+ACTIVITY_CFG_FINDING_PATH_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_OPEN_FUNC_FIELD.name = "open_func"
+ACTIVITY_CFG_OPEN_FUNC_FIELD.full_name = ".ftcfg.activity_cfg.open_func"
+ACTIVITY_CFG_OPEN_FUNC_FIELD.number = 25
+ACTIVITY_CFG_OPEN_FUNC_FIELD.index = 24
+ACTIVITY_CFG_OPEN_FUNC_FIELD.label = 2
+ACTIVITY_CFG_OPEN_FUNC_FIELD.has_default_value = false
+ACTIVITY_CFG_OPEN_FUNC_FIELD.default_value = nil
+ACTIVITY_CFG_OPEN_FUNC_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+ACTIVITY_CFG_OPEN_FUNC_FIELD.type = 14
+ACTIVITY_CFG_OPEN_FUNC_FIELD.cpp_type = 8
+
+ACTIVITY_CFG_OPEN_FUNC_PARAM_FIELD.name = "open_func_param"
+ACTIVITY_CFG_OPEN_FUNC_PARAM_FIELD.full_name = ".ftcfg.activity_cfg.open_func_param"
+ACTIVITY_CFG_OPEN_FUNC_PARAM_FIELD.number = 26
+ACTIVITY_CFG_OPEN_FUNC_PARAM_FIELD.index = 25
+ACTIVITY_CFG_OPEN_FUNC_PARAM_FIELD.label = 2
+ACTIVITY_CFG_OPEN_FUNC_PARAM_FIELD.has_default_value = false
+ACTIVITY_CFG_OPEN_FUNC_PARAM_FIELD.default_value = 0
+ACTIVITY_CFG_OPEN_FUNC_PARAM_FIELD.type = 5
+ACTIVITY_CFG_OPEN_FUNC_PARAM_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_ITEM_ID_FIELD.name = "item_id"
+ACTIVITY_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.activity_cfg.item_id"
+ACTIVITY_CFG_ITEM_ID_FIELD.number = 27
+ACTIVITY_CFG_ITEM_ID_FIELD.index = 26
+ACTIVITY_CFG_ITEM_ID_FIELD.label = 2
+ACTIVITY_CFG_ITEM_ID_FIELD.has_default_value = false
+ACTIVITY_CFG_ITEM_ID_FIELD.default_value = 0
+ACTIVITY_CFG_ITEM_ID_FIELD.type = 5
+ACTIVITY_CFG_ITEM_ID_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_ITEM_COUNT_FIELD.name = "item_count"
+ACTIVITY_CFG_ITEM_COUNT_FIELD.full_name = ".ftcfg.activity_cfg.item_count"
+ACTIVITY_CFG_ITEM_COUNT_FIELD.number = 28
+ACTIVITY_CFG_ITEM_COUNT_FIELD.index = 27
+ACTIVITY_CFG_ITEM_COUNT_FIELD.label = 2
+ACTIVITY_CFG_ITEM_COUNT_FIELD.has_default_value = false
+ACTIVITY_CFG_ITEM_COUNT_FIELD.default_value = 0
+ACTIVITY_CFG_ITEM_COUNT_FIELD.type = 5
+ACTIVITY_CFG_ITEM_COUNT_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_TIME_SHOW_FIELD.name = "time_show"
+ACTIVITY_CFG_TIME_SHOW_FIELD.full_name = ".ftcfg.activity_cfg.time_show"
+ACTIVITY_CFG_TIME_SHOW_FIELD.number = 29
+ACTIVITY_CFG_TIME_SHOW_FIELD.index = 28
+ACTIVITY_CFG_TIME_SHOW_FIELD.label = 2
+ACTIVITY_CFG_TIME_SHOW_FIELD.has_default_value = false
+ACTIVITY_CFG_TIME_SHOW_FIELD.default_value = 0
+ACTIVITY_CFG_TIME_SHOW_FIELD.type = 5
+ACTIVITY_CFG_TIME_SHOW_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_FORM_SHOW_FIELD.name = "form_show"
+ACTIVITY_CFG_FORM_SHOW_FIELD.full_name = ".ftcfg.activity_cfg.form_show"
+ACTIVITY_CFG_FORM_SHOW_FIELD.number = 30
+ACTIVITY_CFG_FORM_SHOW_FIELD.index = 29
+ACTIVITY_CFG_FORM_SHOW_FIELD.label = 2
+ACTIVITY_CFG_FORM_SHOW_FIELD.has_default_value = false
+ACTIVITY_CFG_FORM_SHOW_FIELD.default_value = 0
+ACTIVITY_CFG_FORM_SHOW_FIELD.type = 5
+ACTIVITY_CFG_FORM_SHOW_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_TIPS_SHOW_FIELD.name = "tips_show"
+ACTIVITY_CFG_TIPS_SHOW_FIELD.full_name = ".ftcfg.activity_cfg.tips_show"
+ACTIVITY_CFG_TIPS_SHOW_FIELD.number = 31
+ACTIVITY_CFG_TIPS_SHOW_FIELD.index = 30
+ACTIVITY_CFG_TIPS_SHOW_FIELD.label = 2
+ACTIVITY_CFG_TIPS_SHOW_FIELD.has_default_value = false
+ACTIVITY_CFG_TIPS_SHOW_FIELD.default_value = 0
+ACTIVITY_CFG_TIPS_SHOW_FIELD.type = 5
+ACTIVITY_CFG_TIPS_SHOW_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_CRYSTAL_SHOW_FIELD.name = "crystal_show"
+ACTIVITY_CFG_CRYSTAL_SHOW_FIELD.full_name = ".ftcfg.activity_cfg.crystal_show"
+ACTIVITY_CFG_CRYSTAL_SHOW_FIELD.number = 32
+ACTIVITY_CFG_CRYSTAL_SHOW_FIELD.index = 31
+ACTIVITY_CFG_CRYSTAL_SHOW_FIELD.label = 3
+ACTIVITY_CFG_CRYSTAL_SHOW_FIELD.has_default_value = false
+ACTIVITY_CFG_CRYSTAL_SHOW_FIELD.default_value = {}
+ACTIVITY_CFG_CRYSTAL_SHOW_FIELD.type = 5
+ACTIVITY_CFG_CRYSTAL_SHOW_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_ITEMS_SHOW_FIELD.name = "items_show"
+ACTIVITY_CFG_ITEMS_SHOW_FIELD.full_name = ".ftcfg.activity_cfg.items_show"
+ACTIVITY_CFG_ITEMS_SHOW_FIELD.number = 33
+ACTIVITY_CFG_ITEMS_SHOW_FIELD.index = 32
+ACTIVITY_CFG_ITEMS_SHOW_FIELD.label = 3
+ACTIVITY_CFG_ITEMS_SHOW_FIELD.has_default_value = false
+ACTIVITY_CFG_ITEMS_SHOW_FIELD.default_value = {}
+ACTIVITY_CFG_ITEMS_SHOW_FIELD.type = 5
+ACTIVITY_CFG_ITEMS_SHOW_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_CUE_SHOW_FIELD.name = "cue_show"
+ACTIVITY_CFG_CUE_SHOW_FIELD.full_name = ".ftcfg.activity_cfg.cue_show"
+ACTIVITY_CFG_CUE_SHOW_FIELD.number = 34
+ACTIVITY_CFG_CUE_SHOW_FIELD.index = 33
+ACTIVITY_CFG_CUE_SHOW_FIELD.label = 2
+ACTIVITY_CFG_CUE_SHOW_FIELD.has_default_value = false
+ACTIVITY_CFG_CUE_SHOW_FIELD.default_value = 0
+ACTIVITY_CFG_CUE_SHOW_FIELD.type = 5
+ACTIVITY_CFG_CUE_SHOW_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_CUE_TEXT_FIELD.name = "cue_text"
+ACTIVITY_CFG_CUE_TEXT_FIELD.full_name = ".ftcfg.activity_cfg.cue_text"
+ACTIVITY_CFG_CUE_TEXT_FIELD.number = 35
+ACTIVITY_CFG_CUE_TEXT_FIELD.index = 34
+ACTIVITY_CFG_CUE_TEXT_FIELD.label = 2
+ACTIVITY_CFG_CUE_TEXT_FIELD.has_default_value = false
+ACTIVITY_CFG_CUE_TEXT_FIELD.default_value = 0
+ACTIVITY_CFG_CUE_TEXT_FIELD.type = 5
+ACTIVITY_CFG_CUE_TEXT_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_CORRECT_TEXT_FIELD.name = "correct_text"
+ACTIVITY_CFG_CORRECT_TEXT_FIELD.full_name = ".ftcfg.activity_cfg.correct_text"
+ACTIVITY_CFG_CORRECT_TEXT_FIELD.number = 36
+ACTIVITY_CFG_CORRECT_TEXT_FIELD.index = 35
+ACTIVITY_CFG_CORRECT_TEXT_FIELD.label = 2
+ACTIVITY_CFG_CORRECT_TEXT_FIELD.has_default_value = false
+ACTIVITY_CFG_CORRECT_TEXT_FIELD.default_value = 0
+ACTIVITY_CFG_CORRECT_TEXT_FIELD.type = 5
+ACTIVITY_CFG_CORRECT_TEXT_FIELD.cpp_type = 1
+
+ACTIVITY_CFG_NEGATE_TEXT_FIELD.name = "negate_text"
+ACTIVITY_CFG_NEGATE_TEXT_FIELD.full_name = ".ftcfg.activity_cfg.negate_text"
+ACTIVITY_CFG_NEGATE_TEXT_FIELD.number = 37
+ACTIVITY_CFG_NEGATE_TEXT_FIELD.index = 36
+ACTIVITY_CFG_NEGATE_TEXT_FIELD.label = 2
+ACTIVITY_CFG_NEGATE_TEXT_FIELD.has_default_value = false
+ACTIVITY_CFG_NEGATE_TEXT_FIELD.default_value = 0
+ACTIVITY_CFG_NEGATE_TEXT_FIELD.type = 5
+ACTIVITY_CFG_NEGATE_TEXT_FIELD.cpp_type = 1
+
+ACTIVITY_CFG.name = "activity_cfg"
+ACTIVITY_CFG.full_name = ".ftcfg.activity_cfg"
+ACTIVITY_CFG.nested_types = {}
+ACTIVITY_CFG.enum_types = {}
+ACTIVITY_CFG.fields = {ACTIVITY_CFG_GUID_FIELD, ACTIVITY_CFG_DACTIVITY_NAME_FIELD, ACTIVITY_CFG_NAME_FIELD, ACTIVITY_CFG_TYPE_FIELD, ACTIVITY_CFG_ACTIVITY_PLAY_FIELD, ACTIVITY_CFG_NEED_LEVEL_FIELD, ACTIVITY_CFG_TOTAL_TIMES_FIELD, ACTIVITY_CFG_ACTIVATION_POINT_FIELD, ACTIVITY_CFG_ACTIVATION_TOPLIMIT_FIELD, ACTIVITY_CFG_ACTIVATION_MODE_FIELD, ACTIVITY_CFG_START_WEEKS_FIELD, ACTIVITY_CFG_SIGNUP_TIME_FIELD, ACTIVITY_CFG_SIGNDOWN_TIME_FIELD, ACTIVITY_CFG_BEGIN_TIME_FIELD, ACTIVITY_CFG_END_TIME_FIELD, ACTIVITY_CFG_DAILY_TYPE_FIELD, ACTIVITY_CFG_WHETHER_BATTLE_FIELD, ACTIVITY_CFG_DACTIVITY_ICON_FIELD, ACTIVITY_CFG_PARTAKE_MODE_FIELD, ACTIVITY_CFG_PARTAKE_SUBTYPE_FIELD, ACTIVITY_CFG_TICKETITEM_ID_FIELD, ACTIVITY_CFG_TICKETITEM_COUNT_FIELD, ACTIVITY_CFG_CONDUCT_SCENEID_FIELD, ACTIVITY_CFG_FINDING_PATH_FIELD, ACTIVITY_CFG_OPEN_FUNC_FIELD, ACTIVITY_CFG_OPEN_FUNC_PARAM_FIELD, ACTIVITY_CFG_ITEM_ID_FIELD, ACTIVITY_CFG_ITEM_COUNT_FIELD, ACTIVITY_CFG_TIME_SHOW_FIELD, ACTIVITY_CFG_FORM_SHOW_FIELD, ACTIVITY_CFG_TIPS_SHOW_FIELD, ACTIVITY_CFG_CRYSTAL_SHOW_FIELD, ACTIVITY_CFG_ITEMS_SHOW_FIELD, ACTIVITY_CFG_CUE_SHOW_FIELD, ACTIVITY_CFG_CUE_TEXT_FIELD, ACTIVITY_CFG_CORRECT_TEXT_FIELD, ACTIVITY_CFG_NEGATE_TEXT_FIELD}
+ACTIVITY_CFG.is_extendable = false
+ACTIVITY_CFG.extensions = {}
+ACTIVITY_CFGS_ITEMS_FIELD.name = "items"
+ACTIVITY_CFGS_ITEMS_FIELD.full_name = ".ftcfg.activity_cfgs.items"
+ACTIVITY_CFGS_ITEMS_FIELD.number = 1
+ACTIVITY_CFGS_ITEMS_FIELD.index = 0
+ACTIVITY_CFGS_ITEMS_FIELD.label = 3
+ACTIVITY_CFGS_ITEMS_FIELD.has_default_value = false
+ACTIVITY_CFGS_ITEMS_FIELD.default_value = {}
+ACTIVITY_CFGS_ITEMS_FIELD.message_type = ACTIVITY_CFG
+ACTIVITY_CFGS_ITEMS_FIELD.type = 11
+ACTIVITY_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ACTIVITY_CFGS.name = "activity_cfgs"
+ACTIVITY_CFGS.full_name = ".ftcfg.activity_cfgs"
+ACTIVITY_CFGS.nested_types = {}
+ACTIVITY_CFGS.enum_types = {}
+ACTIVITY_CFGS.fields = {ACTIVITY_CFGS_ITEMS_FIELD}
+ACTIVITY_CFGS.is_extendable = false
+ACTIVITY_CFGS.extensions = {}
+ACTIVATION_CFG_EVERYDAY_TOPLIMIT_FIELD.name = "everyday_toplimit"
+ACTIVATION_CFG_EVERYDAY_TOPLIMIT_FIELD.full_name = ".ftcfg.activation_cfg.everyday_toplimit"
+ACTIVATION_CFG_EVERYDAY_TOPLIMIT_FIELD.number = 1
+ACTIVATION_CFG_EVERYDAY_TOPLIMIT_FIELD.index = 0
+ACTIVATION_CFG_EVERYDAY_TOPLIMIT_FIELD.label = 2
+ACTIVATION_CFG_EVERYDAY_TOPLIMIT_FIELD.has_default_value = false
+ACTIVATION_CFG_EVERYDAY_TOPLIMIT_FIELD.default_value = 0
+ACTIVATION_CFG_EVERYDAY_TOPLIMIT_FIELD.type = 13
+ACTIVATION_CFG_EVERYDAY_TOPLIMIT_FIELD.cpp_type = 3
+
+ACTIVATION_CFG_RESET_TIME_FIELD.name = "reset_time"
+ACTIVATION_CFG_RESET_TIME_FIELD.full_name = ".ftcfg.activation_cfg.reset_time"
+ACTIVATION_CFG_RESET_TIME_FIELD.number = 2
+ACTIVATION_CFG_RESET_TIME_FIELD.index = 1
+ACTIVATION_CFG_RESET_TIME_FIELD.label = 3
+ACTIVATION_CFG_RESET_TIME_FIELD.has_default_value = false
+ACTIVATION_CFG_RESET_TIME_FIELD.default_value = {}
+ACTIVATION_CFG_RESET_TIME_FIELD.type = 9
+ACTIVATION_CFG_RESET_TIME_FIELD.cpp_type = 9
+
+ACTIVATION_CFG_DEPOSIT_LV_FIELD.name = "deposit_lv"
+ACTIVATION_CFG_DEPOSIT_LV_FIELD.full_name = ".ftcfg.activation_cfg.deposit_lv"
+ACTIVATION_CFG_DEPOSIT_LV_FIELD.number = 3
+ACTIVATION_CFG_DEPOSIT_LV_FIELD.index = 2
+ACTIVATION_CFG_DEPOSIT_LV_FIELD.label = 3
+ACTIVATION_CFG_DEPOSIT_LV_FIELD.has_default_value = false
+ACTIVATION_CFG_DEPOSIT_LV_FIELD.default_value = {}
+ACTIVATION_CFG_DEPOSIT_LV_FIELD.type = 13
+ACTIVATION_CFG_DEPOSIT_LV_FIELD.cpp_type = 3
+
+ACTIVATION_CFG_DEPOSIT_TOPLIMIT_FIELD.name = "deposit_toplimit"
+ACTIVATION_CFG_DEPOSIT_TOPLIMIT_FIELD.full_name = ".ftcfg.activation_cfg.deposit_toplimit"
+ACTIVATION_CFG_DEPOSIT_TOPLIMIT_FIELD.number = 4
+ACTIVATION_CFG_DEPOSIT_TOPLIMIT_FIELD.index = 3
+ACTIVATION_CFG_DEPOSIT_TOPLIMIT_FIELD.label = 3
+ACTIVATION_CFG_DEPOSIT_TOPLIMIT_FIELD.has_default_value = false
+ACTIVATION_CFG_DEPOSIT_TOPLIMIT_FIELD.default_value = {}
+ACTIVATION_CFG_DEPOSIT_TOPLIMIT_FIELD.type = 13
+ACTIVATION_CFG_DEPOSIT_TOPLIMIT_FIELD.cpp_type = 3
+
+ACTIVATION_CFG.name = "activation_cfg"
+ACTIVATION_CFG.full_name = ".ftcfg.activation_cfg"
+ACTIVATION_CFG.nested_types = {}
+ACTIVATION_CFG.enum_types = {}
+ACTIVATION_CFG.fields = {ACTIVATION_CFG_EVERYDAY_TOPLIMIT_FIELD, ACTIVATION_CFG_RESET_TIME_FIELD, ACTIVATION_CFG_DEPOSIT_LV_FIELD, ACTIVATION_CFG_DEPOSIT_TOPLIMIT_FIELD}
+ACTIVATION_CFG.is_extendable = false
+ACTIVATION_CFG.extensions = {}
+ACTIVATION_CFGS_ITEMS_FIELD.name = "items"
+ACTIVATION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.activation_cfgs.items"
+ACTIVATION_CFGS_ITEMS_FIELD.number = 1
+ACTIVATION_CFGS_ITEMS_FIELD.index = 0
+ACTIVATION_CFGS_ITEMS_FIELD.label = 3
+ACTIVATION_CFGS_ITEMS_FIELD.has_default_value = false
+ACTIVATION_CFGS_ITEMS_FIELD.default_value = {}
+ACTIVATION_CFGS_ITEMS_FIELD.message_type = ACTIVATION_CFG
+ACTIVATION_CFGS_ITEMS_FIELD.type = 11
+ACTIVATION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ACTIVATION_CFGS.name = "activation_cfgs"
+ACTIVATION_CFGS.full_name = ".ftcfg.activation_cfgs"
+ACTIVATION_CFGS.nested_types = {}
+ACTIVATION_CFGS.enum_types = {}
+ACTIVATION_CFGS.fields = {ACTIVATION_CFGS_ITEMS_FIELD}
+ACTIVATION_CFGS.is_extendable = false
+ACTIVATION_CFGS.extensions = {}
+ACTIVATION_REWARD_CFG_ID_FIELD.name = "id"
+ACTIVATION_REWARD_CFG_ID_FIELD.full_name = ".ftcfg.activation_reward_cfg.id"
+ACTIVATION_REWARD_CFG_ID_FIELD.number = 1
+ACTIVATION_REWARD_CFG_ID_FIELD.index = 0
+ACTIVATION_REWARD_CFG_ID_FIELD.label = 2
+ACTIVATION_REWARD_CFG_ID_FIELD.has_default_value = false
+ACTIVATION_REWARD_CFG_ID_FIELD.default_value = 0
+ACTIVATION_REWARD_CFG_ID_FIELD.type = 13
+ACTIVATION_REWARD_CFG_ID_FIELD.cpp_type = 3
+
+ACTIVATION_REWARD_CFG_ACTIVATION_STAGE_FIELD.name = "activation_stage"
+ACTIVATION_REWARD_CFG_ACTIVATION_STAGE_FIELD.full_name = ".ftcfg.activation_reward_cfg.activation_stage"
+ACTIVATION_REWARD_CFG_ACTIVATION_STAGE_FIELD.number = 2
+ACTIVATION_REWARD_CFG_ACTIVATION_STAGE_FIELD.index = 1
+ACTIVATION_REWARD_CFG_ACTIVATION_STAGE_FIELD.label = 2
+ACTIVATION_REWARD_CFG_ACTIVATION_STAGE_FIELD.has_default_value = false
+ACTIVATION_REWARD_CFG_ACTIVATION_STAGE_FIELD.default_value = 0
+ACTIVATION_REWARD_CFG_ACTIVATION_STAGE_FIELD.type = 13
+ACTIVATION_REWARD_CFG_ACTIVATION_STAGE_FIELD.cpp_type = 3
+
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.name = "reward_attribute_id"
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.full_name = ".ftcfg.activation_reward_cfg.reward_attribute_id"
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.number = 3
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.index = 2
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.label = 2
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.has_default_value = false
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.default_value = 0
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.type = 13
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.cpp_type = 3
+
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.name = "reward_attribute_count"
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.full_name = ".ftcfg.activation_reward_cfg.reward_attribute_count"
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.number = 4
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.index = 3
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.label = 2
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.has_default_value = false
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.default_value = 0
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.type = 13
+ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.cpp_type = 3
+
+ACTIVATION_REWARD_CFG_REWARD_ITEM_ID_FIELD.name = "reward_item_id"
+ACTIVATION_REWARD_CFG_REWARD_ITEM_ID_FIELD.full_name = ".ftcfg.activation_reward_cfg.reward_item_id"
+ACTIVATION_REWARD_CFG_REWARD_ITEM_ID_FIELD.number = 5
+ACTIVATION_REWARD_CFG_REWARD_ITEM_ID_FIELD.index = 4
+ACTIVATION_REWARD_CFG_REWARD_ITEM_ID_FIELD.label = 2
+ACTIVATION_REWARD_CFG_REWARD_ITEM_ID_FIELD.has_default_value = false
+ACTIVATION_REWARD_CFG_REWARD_ITEM_ID_FIELD.default_value = 0
+ACTIVATION_REWARD_CFG_REWARD_ITEM_ID_FIELD.type = 13
+ACTIVATION_REWARD_CFG_REWARD_ITEM_ID_FIELD.cpp_type = 3
+
+ACTIVATION_REWARD_CFG_REWARD_ITEM_COUNT_FIELD.name = "reward_item_count"
+ACTIVATION_REWARD_CFG_REWARD_ITEM_COUNT_FIELD.full_name = ".ftcfg.activation_reward_cfg.reward_item_count"
+ACTIVATION_REWARD_CFG_REWARD_ITEM_COUNT_FIELD.number = 6
+ACTIVATION_REWARD_CFG_REWARD_ITEM_COUNT_FIELD.index = 5
+ACTIVATION_REWARD_CFG_REWARD_ITEM_COUNT_FIELD.label = 2
+ACTIVATION_REWARD_CFG_REWARD_ITEM_COUNT_FIELD.has_default_value = false
+ACTIVATION_REWARD_CFG_REWARD_ITEM_COUNT_FIELD.default_value = 0
+ACTIVATION_REWARD_CFG_REWARD_ITEM_COUNT_FIELD.type = 13
+ACTIVATION_REWARD_CFG_REWARD_ITEM_COUNT_FIELD.cpp_type = 3
+
+ACTIVATION_REWARD_CFG_REWARD_PLUS_FIELD.name = "reward_plus"
+ACTIVATION_REWARD_CFG_REWARD_PLUS_FIELD.full_name = ".ftcfg.activation_reward_cfg.reward_plus"
+ACTIVATION_REWARD_CFG_REWARD_PLUS_FIELD.number = 7
+ACTIVATION_REWARD_CFG_REWARD_PLUS_FIELD.index = 6
+ACTIVATION_REWARD_CFG_REWARD_PLUS_FIELD.label = 2
+ACTIVATION_REWARD_CFG_REWARD_PLUS_FIELD.has_default_value = false
+ACTIVATION_REWARD_CFG_REWARD_PLUS_FIELD.default_value = 0
+ACTIVATION_REWARD_CFG_REWARD_PLUS_FIELD.type = 13
+ACTIVATION_REWARD_CFG_REWARD_PLUS_FIELD.cpp_type = 3
+
+ACTIVATION_REWARD_CFG.name = "activation_reward_cfg"
+ACTIVATION_REWARD_CFG.full_name = ".ftcfg.activation_reward_cfg"
+ACTIVATION_REWARD_CFG.nested_types = {}
+ACTIVATION_REWARD_CFG.enum_types = {}
+ACTIVATION_REWARD_CFG.fields = {ACTIVATION_REWARD_CFG_ID_FIELD, ACTIVATION_REWARD_CFG_ACTIVATION_STAGE_FIELD, ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD, ACTIVATION_REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD, ACTIVATION_REWARD_CFG_REWARD_ITEM_ID_FIELD, ACTIVATION_REWARD_CFG_REWARD_ITEM_COUNT_FIELD, ACTIVATION_REWARD_CFG_REWARD_PLUS_FIELD}
+ACTIVATION_REWARD_CFG.is_extendable = false
+ACTIVATION_REWARD_CFG.extensions = {}
+ACTIVATION_REWARD_CFGS_ITEMS_FIELD.name = "items"
+ACTIVATION_REWARD_CFGS_ITEMS_FIELD.full_name = ".ftcfg.activation_reward_cfgs.items"
+ACTIVATION_REWARD_CFGS_ITEMS_FIELD.number = 1
+ACTIVATION_REWARD_CFGS_ITEMS_FIELD.index = 0
+ACTIVATION_REWARD_CFGS_ITEMS_FIELD.label = 3
+ACTIVATION_REWARD_CFGS_ITEMS_FIELD.has_default_value = false
+ACTIVATION_REWARD_CFGS_ITEMS_FIELD.default_value = {}
+ACTIVATION_REWARD_CFGS_ITEMS_FIELD.message_type = ACTIVATION_REWARD_CFG
+ACTIVATION_REWARD_CFGS_ITEMS_FIELD.type = 11
+ACTIVATION_REWARD_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ACTIVATION_REWARD_CFGS.name = "activation_reward_cfgs"
+ACTIVATION_REWARD_CFGS.full_name = ".ftcfg.activation_reward_cfgs"
+ACTIVATION_REWARD_CFGS.nested_types = {}
+ACTIVATION_REWARD_CFGS.enum_types = {}
+ACTIVATION_REWARD_CFGS.fields = {ACTIVATION_REWARD_CFGS_ITEMS_FIELD}
+ACTIVATION_REWARD_CFGS.is_extendable = false
+ACTIVATION_REWARD_CFGS.extensions = {}
+TRADE_TOP_TABS_CFG_ID_FIELD.name = "id"
+TRADE_TOP_TABS_CFG_ID_FIELD.full_name = ".ftcfg.trade_top_tabs_cfg.id"
+TRADE_TOP_TABS_CFG_ID_FIELD.number = 1
+TRADE_TOP_TABS_CFG_ID_FIELD.index = 0
+TRADE_TOP_TABS_CFG_ID_FIELD.label = 2
+TRADE_TOP_TABS_CFG_ID_FIELD.has_default_value = false
+TRADE_TOP_TABS_CFG_ID_FIELD.default_value = 0
+TRADE_TOP_TABS_CFG_ID_FIELD.type = 5
+TRADE_TOP_TABS_CFG_ID_FIELD.cpp_type = 1
+
+TRADE_TOP_TABS_CFG_NAME_FIELD.name = "name"
+TRADE_TOP_TABS_CFG_NAME_FIELD.full_name = ".ftcfg.trade_top_tabs_cfg.name"
+TRADE_TOP_TABS_CFG_NAME_FIELD.number = 2
+TRADE_TOP_TABS_CFG_NAME_FIELD.index = 1
+TRADE_TOP_TABS_CFG_NAME_FIELD.label = 2
+TRADE_TOP_TABS_CFG_NAME_FIELD.has_default_value = false
+TRADE_TOP_TABS_CFG_NAME_FIELD.default_value = ""
+TRADE_TOP_TABS_CFG_NAME_FIELD.type = 9
+TRADE_TOP_TABS_CFG_NAME_FIELD.cpp_type = 9
+
+TRADE_TOP_TABS_CFG_TABS_FIELD.name = "tabs"
+TRADE_TOP_TABS_CFG_TABS_FIELD.full_name = ".ftcfg.trade_top_tabs_cfg.tabs"
+TRADE_TOP_TABS_CFG_TABS_FIELD.number = 3
+TRADE_TOP_TABS_CFG_TABS_FIELD.index = 2
+TRADE_TOP_TABS_CFG_TABS_FIELD.label = 3
+TRADE_TOP_TABS_CFG_TABS_FIELD.has_default_value = false
+TRADE_TOP_TABS_CFG_TABS_FIELD.default_value = {}
+TRADE_TOP_TABS_CFG_TABS_FIELD.type = 5
+TRADE_TOP_TABS_CFG_TABS_FIELD.cpp_type = 1
+
+TRADE_TOP_TABS_CFG.name = "trade_top_tabs_cfg"
+TRADE_TOP_TABS_CFG.full_name = ".ftcfg.trade_top_tabs_cfg"
+TRADE_TOP_TABS_CFG.nested_types = {}
+TRADE_TOP_TABS_CFG.enum_types = {}
+TRADE_TOP_TABS_CFG.fields = {TRADE_TOP_TABS_CFG_ID_FIELD, TRADE_TOP_TABS_CFG_NAME_FIELD, TRADE_TOP_TABS_CFG_TABS_FIELD}
+TRADE_TOP_TABS_CFG.is_extendable = false
+TRADE_TOP_TABS_CFG.extensions = {}
+TRADE_TOP_TABS_CFGS_ITEMS_FIELD.name = "items"
+TRADE_TOP_TABS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.trade_top_tabs_cfgs.items"
+TRADE_TOP_TABS_CFGS_ITEMS_FIELD.number = 1
+TRADE_TOP_TABS_CFGS_ITEMS_FIELD.index = 0
+TRADE_TOP_TABS_CFGS_ITEMS_FIELD.label = 3
+TRADE_TOP_TABS_CFGS_ITEMS_FIELD.has_default_value = false
+TRADE_TOP_TABS_CFGS_ITEMS_FIELD.default_value = {}
+TRADE_TOP_TABS_CFGS_ITEMS_FIELD.message_type = TRADE_TOP_TABS_CFG
+TRADE_TOP_TABS_CFGS_ITEMS_FIELD.type = 11
+TRADE_TOP_TABS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TRADE_TOP_TABS_CFGS.name = "trade_top_tabs_cfgs"
+TRADE_TOP_TABS_CFGS.full_name = ".ftcfg.trade_top_tabs_cfgs"
+TRADE_TOP_TABS_CFGS.nested_types = {}
+TRADE_TOP_TABS_CFGS.enum_types = {}
+TRADE_TOP_TABS_CFGS.fields = {TRADE_TOP_TABS_CFGS_ITEMS_FIELD}
+TRADE_TOP_TABS_CFGS.is_extendable = false
+TRADE_TOP_TABS_CFGS.extensions = {}
+TRADE_SUB_TABS_CFG_ID_FIELD.name = "id"
+TRADE_SUB_TABS_CFG_ID_FIELD.full_name = ".ftcfg.trade_sub_tabs_cfg.id"
+TRADE_SUB_TABS_CFG_ID_FIELD.number = 1
+TRADE_SUB_TABS_CFG_ID_FIELD.index = 0
+TRADE_SUB_TABS_CFG_ID_FIELD.label = 2
+TRADE_SUB_TABS_CFG_ID_FIELD.has_default_value = false
+TRADE_SUB_TABS_CFG_ID_FIELD.default_value = 0
+TRADE_SUB_TABS_CFG_ID_FIELD.type = 5
+TRADE_SUB_TABS_CFG_ID_FIELD.cpp_type = 1
+
+TRADE_SUB_TABS_CFG_NAME_FIELD.name = "name"
+TRADE_SUB_TABS_CFG_NAME_FIELD.full_name = ".ftcfg.trade_sub_tabs_cfg.name"
+TRADE_SUB_TABS_CFG_NAME_FIELD.number = 2
+TRADE_SUB_TABS_CFG_NAME_FIELD.index = 1
+TRADE_SUB_TABS_CFG_NAME_FIELD.label = 2
+TRADE_SUB_TABS_CFG_NAME_FIELD.has_default_value = false
+TRADE_SUB_TABS_CFG_NAME_FIELD.default_value = ""
+TRADE_SUB_TABS_CFG_NAME_FIELD.type = 9
+TRADE_SUB_TABS_CFG_NAME_FIELD.cpp_type = 9
+
+TRADE_SUB_TABS_CFG_RULES_FIELD.name = "rules"
+TRADE_SUB_TABS_CFG_RULES_FIELD.full_name = ".ftcfg.trade_sub_tabs_cfg.rules"
+TRADE_SUB_TABS_CFG_RULES_FIELD.number = 3
+TRADE_SUB_TABS_CFG_RULES_FIELD.index = 2
+TRADE_SUB_TABS_CFG_RULES_FIELD.label = 3
+TRADE_SUB_TABS_CFG_RULES_FIELD.has_default_value = false
+TRADE_SUB_TABS_CFG_RULES_FIELD.default_value = {}
+TRADE_SUB_TABS_CFG_RULES_FIELD.type = 5
+TRADE_SUB_TABS_CFG_RULES_FIELD.cpp_type = 1
+
+TRADE_SUB_TABS_CFG_FILTER_RULES1_FIELD.name = "filter_rules1"
+TRADE_SUB_TABS_CFG_FILTER_RULES1_FIELD.full_name = ".ftcfg.trade_sub_tabs_cfg.filter_rules1"
+TRADE_SUB_TABS_CFG_FILTER_RULES1_FIELD.number = 4
+TRADE_SUB_TABS_CFG_FILTER_RULES1_FIELD.index = 3
+TRADE_SUB_TABS_CFG_FILTER_RULES1_FIELD.label = 3
+TRADE_SUB_TABS_CFG_FILTER_RULES1_FIELD.has_default_value = false
+TRADE_SUB_TABS_CFG_FILTER_RULES1_FIELD.default_value = {}
+TRADE_SUB_TABS_CFG_FILTER_RULES1_FIELD.type = 5
+TRADE_SUB_TABS_CFG_FILTER_RULES1_FIELD.cpp_type = 1
+
+TRADE_SUB_TABS_CFG_FILTER_RULES2_FIELD.name = "filter_rules2"
+TRADE_SUB_TABS_CFG_FILTER_RULES2_FIELD.full_name = ".ftcfg.trade_sub_tabs_cfg.filter_rules2"
+TRADE_SUB_TABS_CFG_FILTER_RULES2_FIELD.number = 5
+TRADE_SUB_TABS_CFG_FILTER_RULES2_FIELD.index = 4
+TRADE_SUB_TABS_CFG_FILTER_RULES2_FIELD.label = 3
+TRADE_SUB_TABS_CFG_FILTER_RULES2_FIELD.has_default_value = false
+TRADE_SUB_TABS_CFG_FILTER_RULES2_FIELD.default_value = {}
+TRADE_SUB_TABS_CFG_FILTER_RULES2_FIELD.type = 5
+TRADE_SUB_TABS_CFG_FILTER_RULES2_FIELD.cpp_type = 1
+
+TRADE_SUB_TABS_CFG_FILTER_RULES3_FIELD.name = "filter_rules3"
+TRADE_SUB_TABS_CFG_FILTER_RULES3_FIELD.full_name = ".ftcfg.trade_sub_tabs_cfg.filter_rules3"
+TRADE_SUB_TABS_CFG_FILTER_RULES3_FIELD.number = 6
+TRADE_SUB_TABS_CFG_FILTER_RULES3_FIELD.index = 5
+TRADE_SUB_TABS_CFG_FILTER_RULES3_FIELD.label = 3
+TRADE_SUB_TABS_CFG_FILTER_RULES3_FIELD.has_default_value = false
+TRADE_SUB_TABS_CFG_FILTER_RULES3_FIELD.default_value = {}
+TRADE_SUB_TABS_CFG_FILTER_RULES3_FIELD.type = 5
+TRADE_SUB_TABS_CFG_FILTER_RULES3_FIELD.cpp_type = 1
+
+TRADE_SUB_TABS_CFG_FILTER_RULES4_FIELD.name = "filter_rules4"
+TRADE_SUB_TABS_CFG_FILTER_RULES4_FIELD.full_name = ".ftcfg.trade_sub_tabs_cfg.filter_rules4"
+TRADE_SUB_TABS_CFG_FILTER_RULES4_FIELD.number = 7
+TRADE_SUB_TABS_CFG_FILTER_RULES4_FIELD.index = 6
+TRADE_SUB_TABS_CFG_FILTER_RULES4_FIELD.label = 3
+TRADE_SUB_TABS_CFG_FILTER_RULES4_FIELD.has_default_value = false
+TRADE_SUB_TABS_CFG_FILTER_RULES4_FIELD.default_value = {}
+TRADE_SUB_TABS_CFG_FILTER_RULES4_FIELD.type = 5
+TRADE_SUB_TABS_CFG_FILTER_RULES4_FIELD.cpp_type = 1
+
+TRADE_SUB_TABS_CFG_SORT_RULES_FIELD.name = "sort_rules"
+TRADE_SUB_TABS_CFG_SORT_RULES_FIELD.full_name = ".ftcfg.trade_sub_tabs_cfg.sort_rules"
+TRADE_SUB_TABS_CFG_SORT_RULES_FIELD.number = 8
+TRADE_SUB_TABS_CFG_SORT_RULES_FIELD.index = 7
+TRADE_SUB_TABS_CFG_SORT_RULES_FIELD.label = 3
+TRADE_SUB_TABS_CFG_SORT_RULES_FIELD.has_default_value = false
+TRADE_SUB_TABS_CFG_SORT_RULES_FIELD.default_value = {}
+TRADE_SUB_TABS_CFG_SORT_RULES_FIELD.type = 5
+TRADE_SUB_TABS_CFG_SORT_RULES_FIELD.cpp_type = 1
+
+TRADE_SUB_TABS_CFG.name = "trade_sub_tabs_cfg"
+TRADE_SUB_TABS_CFG.full_name = ".ftcfg.trade_sub_tabs_cfg"
+TRADE_SUB_TABS_CFG.nested_types = {}
+TRADE_SUB_TABS_CFG.enum_types = {}
+TRADE_SUB_TABS_CFG.fields = {TRADE_SUB_TABS_CFG_ID_FIELD, TRADE_SUB_TABS_CFG_NAME_FIELD, TRADE_SUB_TABS_CFG_RULES_FIELD, TRADE_SUB_TABS_CFG_FILTER_RULES1_FIELD, TRADE_SUB_TABS_CFG_FILTER_RULES2_FIELD, TRADE_SUB_TABS_CFG_FILTER_RULES3_FIELD, TRADE_SUB_TABS_CFG_FILTER_RULES4_FIELD, TRADE_SUB_TABS_CFG_SORT_RULES_FIELD}
+TRADE_SUB_TABS_CFG.is_extendable = false
+TRADE_SUB_TABS_CFG.extensions = {}
+TRADE_SUB_TABS_CFGS_ITEMS_FIELD.name = "items"
+TRADE_SUB_TABS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.trade_sub_tabs_cfgs.items"
+TRADE_SUB_TABS_CFGS_ITEMS_FIELD.number = 1
+TRADE_SUB_TABS_CFGS_ITEMS_FIELD.index = 0
+TRADE_SUB_TABS_CFGS_ITEMS_FIELD.label = 3
+TRADE_SUB_TABS_CFGS_ITEMS_FIELD.has_default_value = false
+TRADE_SUB_TABS_CFGS_ITEMS_FIELD.default_value = {}
+TRADE_SUB_TABS_CFGS_ITEMS_FIELD.message_type = TRADE_SUB_TABS_CFG
+TRADE_SUB_TABS_CFGS_ITEMS_FIELD.type = 11
+TRADE_SUB_TABS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TRADE_SUB_TABS_CFGS.name = "trade_sub_tabs_cfgs"
+TRADE_SUB_TABS_CFGS.full_name = ".ftcfg.trade_sub_tabs_cfgs"
+TRADE_SUB_TABS_CFGS.nested_types = {}
+TRADE_SUB_TABS_CFGS.enum_types = {}
+TRADE_SUB_TABS_CFGS.fields = {TRADE_SUB_TABS_CFGS_ITEMS_FIELD}
+TRADE_SUB_TABS_CFGS.is_extendable = false
+TRADE_SUB_TABS_CFGS.extensions = {}
+TRADE_FILTER_RULES_CFG_ID_FIELD.name = "id"
+TRADE_FILTER_RULES_CFG_ID_FIELD.full_name = ".ftcfg.trade_filter_rules_cfg.id"
+TRADE_FILTER_RULES_CFG_ID_FIELD.number = 1
+TRADE_FILTER_RULES_CFG_ID_FIELD.index = 0
+TRADE_FILTER_RULES_CFG_ID_FIELD.label = 2
+TRADE_FILTER_RULES_CFG_ID_FIELD.has_default_value = false
+TRADE_FILTER_RULES_CFG_ID_FIELD.default_value = 0
+TRADE_FILTER_RULES_CFG_ID_FIELD.type = 5
+TRADE_FILTER_RULES_CFG_ID_FIELD.cpp_type = 1
+
+TRADE_FILTER_RULES_CFG_NAME_FIELD.name = "name"
+TRADE_FILTER_RULES_CFG_NAME_FIELD.full_name = ".ftcfg.trade_filter_rules_cfg.name"
+TRADE_FILTER_RULES_CFG_NAME_FIELD.number = 2
+TRADE_FILTER_RULES_CFG_NAME_FIELD.index = 1
+TRADE_FILTER_RULES_CFG_NAME_FIELD.label = 2
+TRADE_FILTER_RULES_CFG_NAME_FIELD.has_default_value = false
+TRADE_FILTER_RULES_CFG_NAME_FIELD.default_value = ""
+TRADE_FILTER_RULES_CFG_NAME_FIELD.type = 9
+TRADE_FILTER_RULES_CFG_NAME_FIELD.cpp_type = 9
+
+TRADE_FILTER_RULES_CFG_FIELDS_FIELD.name = "fields"
+TRADE_FILTER_RULES_CFG_FIELDS_FIELD.full_name = ".ftcfg.trade_filter_rules_cfg.fields"
+TRADE_FILTER_RULES_CFG_FIELDS_FIELD.number = 3
+TRADE_FILTER_RULES_CFG_FIELDS_FIELD.index = 2
+TRADE_FILTER_RULES_CFG_FIELDS_FIELD.label = 3
+TRADE_FILTER_RULES_CFG_FIELDS_FIELD.has_default_value = false
+TRADE_FILTER_RULES_CFG_FIELDS_FIELD.default_value = {}
+TRADE_FILTER_RULES_CFG_FIELDS_FIELD.type = 9
+TRADE_FILTER_RULES_CFG_FIELDS_FIELD.cpp_type = 9
+
+TRADE_FILTER_RULES_CFG_VALUES_FIELD.name = "values"
+TRADE_FILTER_RULES_CFG_VALUES_FIELD.full_name = ".ftcfg.trade_filter_rules_cfg.values"
+TRADE_FILTER_RULES_CFG_VALUES_FIELD.number = 4
+TRADE_FILTER_RULES_CFG_VALUES_FIELD.index = 3
+TRADE_FILTER_RULES_CFG_VALUES_FIELD.label = 3
+TRADE_FILTER_RULES_CFG_VALUES_FIELD.has_default_value = false
+TRADE_FILTER_RULES_CFG_VALUES_FIELD.default_value = {}
+TRADE_FILTER_RULES_CFG_VALUES_FIELD.type = 5
+TRADE_FILTER_RULES_CFG_VALUES_FIELD.cpp_type = 1
+
+TRADE_FILTER_RULES_CFG.name = "trade_filter_rules_cfg"
+TRADE_FILTER_RULES_CFG.full_name = ".ftcfg.trade_filter_rules_cfg"
+TRADE_FILTER_RULES_CFG.nested_types = {}
+TRADE_FILTER_RULES_CFG.enum_types = {}
+TRADE_FILTER_RULES_CFG.fields = {TRADE_FILTER_RULES_CFG_ID_FIELD, TRADE_FILTER_RULES_CFG_NAME_FIELD, TRADE_FILTER_RULES_CFG_FIELDS_FIELD, TRADE_FILTER_RULES_CFG_VALUES_FIELD}
+TRADE_FILTER_RULES_CFG.is_extendable = false
+TRADE_FILTER_RULES_CFG.extensions = {}
+TRADE_FILTER_RULES_CFGS_ITEMS_FIELD.name = "items"
+TRADE_FILTER_RULES_CFGS_ITEMS_FIELD.full_name = ".ftcfg.trade_filter_rules_cfgs.items"
+TRADE_FILTER_RULES_CFGS_ITEMS_FIELD.number = 1
+TRADE_FILTER_RULES_CFGS_ITEMS_FIELD.index = 0
+TRADE_FILTER_RULES_CFGS_ITEMS_FIELD.label = 3
+TRADE_FILTER_RULES_CFGS_ITEMS_FIELD.has_default_value = false
+TRADE_FILTER_RULES_CFGS_ITEMS_FIELD.default_value = {}
+TRADE_FILTER_RULES_CFGS_ITEMS_FIELD.message_type = TRADE_FILTER_RULES_CFG
+TRADE_FILTER_RULES_CFGS_ITEMS_FIELD.type = 11
+TRADE_FILTER_RULES_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TRADE_FILTER_RULES_CFGS.name = "trade_filter_rules_cfgs"
+TRADE_FILTER_RULES_CFGS.full_name = ".ftcfg.trade_filter_rules_cfgs"
+TRADE_FILTER_RULES_CFGS.nested_types = {}
+TRADE_FILTER_RULES_CFGS.enum_types = {}
+TRADE_FILTER_RULES_CFGS.fields = {TRADE_FILTER_RULES_CFGS_ITEMS_FIELD}
+TRADE_FILTER_RULES_CFGS.is_extendable = false
+TRADE_FILTER_RULES_CFGS.extensions = {}
+TRADE_SORT_RULES_CFG_ID_FIELD.name = "id"
+TRADE_SORT_RULES_CFG_ID_FIELD.full_name = ".ftcfg.trade_sort_rules_cfg.id"
+TRADE_SORT_RULES_CFG_ID_FIELD.number = 1
+TRADE_SORT_RULES_CFG_ID_FIELD.index = 0
+TRADE_SORT_RULES_CFG_ID_FIELD.label = 2
+TRADE_SORT_RULES_CFG_ID_FIELD.has_default_value = false
+TRADE_SORT_RULES_CFG_ID_FIELD.default_value = 0
+TRADE_SORT_RULES_CFG_ID_FIELD.type = 5
+TRADE_SORT_RULES_CFG_ID_FIELD.cpp_type = 1
+
+TRADE_SORT_RULES_CFG_NAME_FIELD.name = "name"
+TRADE_SORT_RULES_CFG_NAME_FIELD.full_name = ".ftcfg.trade_sort_rules_cfg.name"
+TRADE_SORT_RULES_CFG_NAME_FIELD.number = 2
+TRADE_SORT_RULES_CFG_NAME_FIELD.index = 1
+TRADE_SORT_RULES_CFG_NAME_FIELD.label = 2
+TRADE_SORT_RULES_CFG_NAME_FIELD.has_default_value = false
+TRADE_SORT_RULES_CFG_NAME_FIELD.default_value = ""
+TRADE_SORT_RULES_CFG_NAME_FIELD.type = 9
+TRADE_SORT_RULES_CFG_NAME_FIELD.cpp_type = 9
+
+TRADE_SORT_RULES_CFG_PROP_FIELD.name = "prop"
+TRADE_SORT_RULES_CFG_PROP_FIELD.full_name = ".ftcfg.trade_sort_rules_cfg.prop"
+TRADE_SORT_RULES_CFG_PROP_FIELD.number = 3
+TRADE_SORT_RULES_CFG_PROP_FIELD.index = 2
+TRADE_SORT_RULES_CFG_PROP_FIELD.label = 2
+TRADE_SORT_RULES_CFG_PROP_FIELD.has_default_value = false
+TRADE_SORT_RULES_CFG_PROP_FIELD.default_value = 0
+TRADE_SORT_RULES_CFG_PROP_FIELD.type = 5
+TRADE_SORT_RULES_CFG_PROP_FIELD.cpp_type = 1
+
+TRADE_SORT_RULES_CFG_UP_FIELD.name = "up"
+TRADE_SORT_RULES_CFG_UP_FIELD.full_name = ".ftcfg.trade_sort_rules_cfg.up"
+TRADE_SORT_RULES_CFG_UP_FIELD.number = 4
+TRADE_SORT_RULES_CFG_UP_FIELD.index = 3
+TRADE_SORT_RULES_CFG_UP_FIELD.label = 2
+TRADE_SORT_RULES_CFG_UP_FIELD.has_default_value = false
+TRADE_SORT_RULES_CFG_UP_FIELD.default_value = false
+TRADE_SORT_RULES_CFG_UP_FIELD.type = 8
+TRADE_SORT_RULES_CFG_UP_FIELD.cpp_type = 7
+
+TRADE_SORT_RULES_CFG.name = "trade_sort_rules_cfg"
+TRADE_SORT_RULES_CFG.full_name = ".ftcfg.trade_sort_rules_cfg"
+TRADE_SORT_RULES_CFG.nested_types = {}
+TRADE_SORT_RULES_CFG.enum_types = {}
+TRADE_SORT_RULES_CFG.fields = {TRADE_SORT_RULES_CFG_ID_FIELD, TRADE_SORT_RULES_CFG_NAME_FIELD, TRADE_SORT_RULES_CFG_PROP_FIELD, TRADE_SORT_RULES_CFG_UP_FIELD}
+TRADE_SORT_RULES_CFG.is_extendable = false
+TRADE_SORT_RULES_CFG.extensions = {}
+TRADE_SORT_RULES_CFGS_ITEMS_FIELD.name = "items"
+TRADE_SORT_RULES_CFGS_ITEMS_FIELD.full_name = ".ftcfg.trade_sort_rules_cfgs.items"
+TRADE_SORT_RULES_CFGS_ITEMS_FIELD.number = 1
+TRADE_SORT_RULES_CFGS_ITEMS_FIELD.index = 0
+TRADE_SORT_RULES_CFGS_ITEMS_FIELD.label = 3
+TRADE_SORT_RULES_CFGS_ITEMS_FIELD.has_default_value = false
+TRADE_SORT_RULES_CFGS_ITEMS_FIELD.default_value = {}
+TRADE_SORT_RULES_CFGS_ITEMS_FIELD.message_type = TRADE_SORT_RULES_CFG
+TRADE_SORT_RULES_CFGS_ITEMS_FIELD.type = 11
+TRADE_SORT_RULES_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TRADE_SORT_RULES_CFGS.name = "trade_sort_rules_cfgs"
+TRADE_SORT_RULES_CFGS.full_name = ".ftcfg.trade_sort_rules_cfgs"
+TRADE_SORT_RULES_CFGS.nested_types = {}
+TRADE_SORT_RULES_CFGS.enum_types = {}
+TRADE_SORT_RULES_CFGS.fields = {TRADE_SORT_RULES_CFGS_ITEMS_FIELD}
+TRADE_SORT_RULES_CFGS.is_extendable = false
+TRADE_SORT_RULES_CFGS.extensions = {}
+BASE_PROP_CFG_PROF_TYPE_FIELD.name = "prof_type"
+BASE_PROP_CFG_PROF_TYPE_FIELD.full_name = ".ftcfg.base_prop_cfg.prof_type"
+BASE_PROP_CFG_PROF_TYPE_FIELD.number = 1
+BASE_PROP_CFG_PROF_TYPE_FIELD.index = 0
+BASE_PROP_CFG_PROF_TYPE_FIELD.label = 2
+BASE_PROP_CFG_PROF_TYPE_FIELD.has_default_value = false
+BASE_PROP_CFG_PROF_TYPE_FIELD.default_value = nil
+BASE_PROP_CFG_PROF_TYPE_FIELD.enum_type = config_predefine_pb.EPROFTYPE
+BASE_PROP_CFG_PROF_TYPE_FIELD.type = 14
+BASE_PROP_CFG_PROF_TYPE_FIELD.cpp_type = 8
+
+BASE_PROP_CFG_LEVEL_FIELD.name = "level"
+BASE_PROP_CFG_LEVEL_FIELD.full_name = ".ftcfg.base_prop_cfg.level"
+BASE_PROP_CFG_LEVEL_FIELD.number = 2
+BASE_PROP_CFG_LEVEL_FIELD.index = 1
+BASE_PROP_CFG_LEVEL_FIELD.label = 2
+BASE_PROP_CFG_LEVEL_FIELD.has_default_value = false
+BASE_PROP_CFG_LEVEL_FIELD.default_value = 0
+BASE_PROP_CFG_LEVEL_FIELD.type = 5
+BASE_PROP_CFG_LEVEL_FIELD.cpp_type = 1
+
+BASE_PROP_CFG_HP_MAX_FIELD.name = "hp_max"
+BASE_PROP_CFG_HP_MAX_FIELD.full_name = ".ftcfg.base_prop_cfg.hp_max"
+BASE_PROP_CFG_HP_MAX_FIELD.number = 3
+BASE_PROP_CFG_HP_MAX_FIELD.index = 2
+BASE_PROP_CFG_HP_MAX_FIELD.label = 2
+BASE_PROP_CFG_HP_MAX_FIELD.has_default_value = false
+BASE_PROP_CFG_HP_MAX_FIELD.default_value = 0.0
+BASE_PROP_CFG_HP_MAX_FIELD.type = 1
+BASE_PROP_CFG_HP_MAX_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_MP_MAX_FIELD.name = "mp_max"
+BASE_PROP_CFG_MP_MAX_FIELD.full_name = ".ftcfg.base_prop_cfg.mp_max"
+BASE_PROP_CFG_MP_MAX_FIELD.number = 4
+BASE_PROP_CFG_MP_MAX_FIELD.index = 3
+BASE_PROP_CFG_MP_MAX_FIELD.label = 2
+BASE_PROP_CFG_MP_MAX_FIELD.has_default_value = false
+BASE_PROP_CFG_MP_MAX_FIELD.default_value = 0.0
+BASE_PROP_CFG_MP_MAX_FIELD.type = 1
+BASE_PROP_CFG_MP_MAX_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_ATTACK_FIELD.name = "attack"
+BASE_PROP_CFG_ATTACK_FIELD.full_name = ".ftcfg.base_prop_cfg.attack"
+BASE_PROP_CFG_ATTACK_FIELD.number = 5
+BASE_PROP_CFG_ATTACK_FIELD.index = 4
+BASE_PROP_CFG_ATTACK_FIELD.label = 2
+BASE_PROP_CFG_ATTACK_FIELD.has_default_value = false
+BASE_PROP_CFG_ATTACK_FIELD.default_value = 0.0
+BASE_PROP_CFG_ATTACK_FIELD.type = 1
+BASE_PROP_CFG_ATTACK_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_DEFENSE_FIELD.name = "defense"
+BASE_PROP_CFG_DEFENSE_FIELD.full_name = ".ftcfg.base_prop_cfg.defense"
+BASE_PROP_CFG_DEFENSE_FIELD.number = 6
+BASE_PROP_CFG_DEFENSE_FIELD.index = 5
+BASE_PROP_CFG_DEFENSE_FIELD.label = 2
+BASE_PROP_CFG_DEFENSE_FIELD.has_default_value = false
+BASE_PROP_CFG_DEFENSE_FIELD.default_value = 0.0
+BASE_PROP_CFG_DEFENSE_FIELD.type = 1
+BASE_PROP_CFG_DEFENSE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_HIT_FIELD.name = "hit"
+BASE_PROP_CFG_HIT_FIELD.full_name = ".ftcfg.base_prop_cfg.hit"
+BASE_PROP_CFG_HIT_FIELD.number = 7
+BASE_PROP_CFG_HIT_FIELD.index = 6
+BASE_PROP_CFG_HIT_FIELD.label = 2
+BASE_PROP_CFG_HIT_FIELD.has_default_value = false
+BASE_PROP_CFG_HIT_FIELD.default_value = 0.0
+BASE_PROP_CFG_HIT_FIELD.type = 1
+BASE_PROP_CFG_HIT_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_DODGE_FIELD.name = "dodge"
+BASE_PROP_CFG_DODGE_FIELD.full_name = ".ftcfg.base_prop_cfg.dodge"
+BASE_PROP_CFG_DODGE_FIELD.number = 8
+BASE_PROP_CFG_DODGE_FIELD.index = 7
+BASE_PROP_CFG_DODGE_FIELD.label = 2
+BASE_PROP_CFG_DODGE_FIELD.has_default_value = false
+BASE_PROP_CFG_DODGE_FIELD.default_value = 0.0
+BASE_PROP_CFG_DODGE_FIELD.type = 1
+BASE_PROP_CFG_DODGE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_CRITICAL_FIELD.name = "critical"
+BASE_PROP_CFG_CRITICAL_FIELD.full_name = ".ftcfg.base_prop_cfg.critical"
+BASE_PROP_CFG_CRITICAL_FIELD.number = 9
+BASE_PROP_CFG_CRITICAL_FIELD.index = 8
+BASE_PROP_CFG_CRITICAL_FIELD.label = 2
+BASE_PROP_CFG_CRITICAL_FIELD.has_default_value = false
+BASE_PROP_CFG_CRITICAL_FIELD.default_value = 0.0
+BASE_PROP_CFG_CRITICAL_FIELD.type = 1
+BASE_PROP_CFG_CRITICAL_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_ANTI_CRITICAL_FIELD.name = "anti_critical"
+BASE_PROP_CFG_ANTI_CRITICAL_FIELD.full_name = ".ftcfg.base_prop_cfg.anti_critical"
+BASE_PROP_CFG_ANTI_CRITICAL_FIELD.number = 10
+BASE_PROP_CFG_ANTI_CRITICAL_FIELD.index = 9
+BASE_PROP_CFG_ANTI_CRITICAL_FIELD.label = 2
+BASE_PROP_CFG_ANTI_CRITICAL_FIELD.has_default_value = false
+BASE_PROP_CFG_ANTI_CRITICAL_FIELD.default_value = 0.0
+BASE_PROP_CFG_ANTI_CRITICAL_FIELD.type = 1
+BASE_PROP_CFG_ANTI_CRITICAL_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_CRITICAL_POWER_FIELD.name = "critical_power"
+BASE_PROP_CFG_CRITICAL_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.critical_power"
+BASE_PROP_CFG_CRITICAL_POWER_FIELD.number = 11
+BASE_PROP_CFG_CRITICAL_POWER_FIELD.index = 10
+BASE_PROP_CFG_CRITICAL_POWER_FIELD.label = 2
+BASE_PROP_CFG_CRITICAL_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_CRITICAL_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_CRITICAL_POWER_FIELD.type = 1
+BASE_PROP_CFG_CRITICAL_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_FIELD.name = "anti_critical_power"
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.anti_critical_power"
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_FIELD.number = 12
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_FIELD.index = 11
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_FIELD.label = 2
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_FIELD.type = 1
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_XP_MAX_FIELD.name = "xp_max"
+BASE_PROP_CFG_XP_MAX_FIELD.full_name = ".ftcfg.base_prop_cfg.xp_max"
+BASE_PROP_CFG_XP_MAX_FIELD.number = 13
+BASE_PROP_CFG_XP_MAX_FIELD.index = 12
+BASE_PROP_CFG_XP_MAX_FIELD.label = 2
+BASE_PROP_CFG_XP_MAX_FIELD.has_default_value = false
+BASE_PROP_CFG_XP_MAX_FIELD.default_value = 0.0
+BASE_PROP_CFG_XP_MAX_FIELD.type = 1
+BASE_PROP_CFG_XP_MAX_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_HIT_RATE_FIELD.name = "hit_rate"
+BASE_PROP_CFG_HIT_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.hit_rate"
+BASE_PROP_CFG_HIT_RATE_FIELD.number = 14
+BASE_PROP_CFG_HIT_RATE_FIELD.index = 13
+BASE_PROP_CFG_HIT_RATE_FIELD.label = 2
+BASE_PROP_CFG_HIT_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_HIT_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_HIT_RATE_FIELD.type = 1
+BASE_PROP_CFG_HIT_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_DODGE_RATE_FIELD.name = "dodge_rate"
+BASE_PROP_CFG_DODGE_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.dodge_rate"
+BASE_PROP_CFG_DODGE_RATE_FIELD.number = 15
+BASE_PROP_CFG_DODGE_RATE_FIELD.index = 14
+BASE_PROP_CFG_DODGE_RATE_FIELD.label = 2
+BASE_PROP_CFG_DODGE_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_DODGE_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_DODGE_RATE_FIELD.type = 1
+BASE_PROP_CFG_DODGE_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_CRITICAL_RATE_FIELD.name = "critical_rate"
+BASE_PROP_CFG_CRITICAL_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.critical_rate"
+BASE_PROP_CFG_CRITICAL_RATE_FIELD.number = 16
+BASE_PROP_CFG_CRITICAL_RATE_FIELD.index = 15
+BASE_PROP_CFG_CRITICAL_RATE_FIELD.label = 2
+BASE_PROP_CFG_CRITICAL_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_CRITICAL_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_CRITICAL_RATE_FIELD.type = 1
+BASE_PROP_CFG_CRITICAL_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_ANTI_CRITICAL_RATE_FIELD.name = "anti_critical_rate"
+BASE_PROP_CFG_ANTI_CRITICAL_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.anti_critical_rate"
+BASE_PROP_CFG_ANTI_CRITICAL_RATE_FIELD.number = 17
+BASE_PROP_CFG_ANTI_CRITICAL_RATE_FIELD.index = 16
+BASE_PROP_CFG_ANTI_CRITICAL_RATE_FIELD.label = 2
+BASE_PROP_CFG_ANTI_CRITICAL_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_ANTI_CRITICAL_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_ANTI_CRITICAL_RATE_FIELD.type = 1
+BASE_PROP_CFG_ANTI_CRITICAL_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_CRITICAL_POWER_RATE_FIELD.name = "critical_power_rate"
+BASE_PROP_CFG_CRITICAL_POWER_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.critical_power_rate"
+BASE_PROP_CFG_CRITICAL_POWER_RATE_FIELD.number = 18
+BASE_PROP_CFG_CRITICAL_POWER_RATE_FIELD.index = 17
+BASE_PROP_CFG_CRITICAL_POWER_RATE_FIELD.label = 2
+BASE_PROP_CFG_CRITICAL_POWER_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_CRITICAL_POWER_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_CRITICAL_POWER_RATE_FIELD.type = 1
+BASE_PROP_CFG_CRITICAL_POWER_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_RATE_FIELD.name = "anti_critical_power_rate"
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.anti_critical_power_rate"
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_RATE_FIELD.number = 19
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_RATE_FIELD.index = 18
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_RATE_FIELD.label = 2
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_RATE_FIELD.type = 1
+BASE_PROP_CFG_ANTI_CRITICAL_POWER_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_DECELERATTE_POWER_FIELD.name = "deceleratte_power"
+BASE_PROP_CFG_DECELERATTE_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.deceleratte_power"
+BASE_PROP_CFG_DECELERATTE_POWER_FIELD.number = 20
+BASE_PROP_CFG_DECELERATTE_POWER_FIELD.index = 19
+BASE_PROP_CFG_DECELERATTE_POWER_FIELD.label = 2
+BASE_PROP_CFG_DECELERATTE_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_DECELERATTE_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_DECELERATTE_POWER_FIELD.type = 1
+BASE_PROP_CFG_DECELERATTE_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_ANTI_DECELERATTE_POWER_FIELD.name = "anti_deceleratte_power"
+BASE_PROP_CFG_ANTI_DECELERATTE_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.anti_deceleratte_power"
+BASE_PROP_CFG_ANTI_DECELERATTE_POWER_FIELD.number = 21
+BASE_PROP_CFG_ANTI_DECELERATTE_POWER_FIELD.index = 20
+BASE_PROP_CFG_ANTI_DECELERATTE_POWER_FIELD.label = 2
+BASE_PROP_CFG_ANTI_DECELERATTE_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_ANTI_DECELERATTE_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_ANTI_DECELERATTE_POWER_FIELD.type = 1
+BASE_PROP_CFG_ANTI_DECELERATTE_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_SLEEP_POWER_FIELD.name = "sleep_power"
+BASE_PROP_CFG_SLEEP_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.sleep_power"
+BASE_PROP_CFG_SLEEP_POWER_FIELD.number = 22
+BASE_PROP_CFG_SLEEP_POWER_FIELD.index = 21
+BASE_PROP_CFG_SLEEP_POWER_FIELD.label = 2
+BASE_PROP_CFG_SLEEP_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_SLEEP_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_SLEEP_POWER_FIELD.type = 1
+BASE_PROP_CFG_SLEEP_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_ANTI_SLEEP_POWER_FIELD.name = "anti_sleep_power"
+BASE_PROP_CFG_ANTI_SLEEP_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.anti_sleep_power"
+BASE_PROP_CFG_ANTI_SLEEP_POWER_FIELD.number = 23
+BASE_PROP_CFG_ANTI_SLEEP_POWER_FIELD.index = 22
+BASE_PROP_CFG_ANTI_SLEEP_POWER_FIELD.label = 2
+BASE_PROP_CFG_ANTI_SLEEP_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_ANTI_SLEEP_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_ANTI_SLEEP_POWER_FIELD.type = 1
+BASE_PROP_CFG_ANTI_SLEEP_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_HOLD_POWER_FIELD.name = "hold_power"
+BASE_PROP_CFG_HOLD_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.hold_power"
+BASE_PROP_CFG_HOLD_POWER_FIELD.number = 24
+BASE_PROP_CFG_HOLD_POWER_FIELD.index = 23
+BASE_PROP_CFG_HOLD_POWER_FIELD.label = 2
+BASE_PROP_CFG_HOLD_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_HOLD_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_HOLD_POWER_FIELD.type = 1
+BASE_PROP_CFG_HOLD_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_ANTI_HOLD_POWER_FIELD.name = "anti_hold_power"
+BASE_PROP_CFG_ANTI_HOLD_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.anti_hold_power"
+BASE_PROP_CFG_ANTI_HOLD_POWER_FIELD.number = 25
+BASE_PROP_CFG_ANTI_HOLD_POWER_FIELD.index = 24
+BASE_PROP_CFG_ANTI_HOLD_POWER_FIELD.label = 2
+BASE_PROP_CFG_ANTI_HOLD_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_ANTI_HOLD_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_ANTI_HOLD_POWER_FIELD.type = 1
+BASE_PROP_CFG_ANTI_HOLD_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_CHARM_POWER_FIELD.name = "charm_power"
+BASE_PROP_CFG_CHARM_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.charm_power"
+BASE_PROP_CFG_CHARM_POWER_FIELD.number = 26
+BASE_PROP_CFG_CHARM_POWER_FIELD.index = 25
+BASE_PROP_CFG_CHARM_POWER_FIELD.label = 2
+BASE_PROP_CFG_CHARM_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_CHARM_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_CHARM_POWER_FIELD.type = 1
+BASE_PROP_CFG_CHARM_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_ANTI_CHARM_POWER_FIELD.name = "anti_charm_power"
+BASE_PROP_CFG_ANTI_CHARM_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.anti_charm_power"
+BASE_PROP_CFG_ANTI_CHARM_POWER_FIELD.number = 27
+BASE_PROP_CFG_ANTI_CHARM_POWER_FIELD.index = 26
+BASE_PROP_CFG_ANTI_CHARM_POWER_FIELD.label = 2
+BASE_PROP_CFG_ANTI_CHARM_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_ANTI_CHARM_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_ANTI_CHARM_POWER_FIELD.type = 1
+BASE_PROP_CFG_ANTI_CHARM_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_SILENCE_POWER_FIELD.name = "silence_power"
+BASE_PROP_CFG_SILENCE_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.silence_power"
+BASE_PROP_CFG_SILENCE_POWER_FIELD.number = 28
+BASE_PROP_CFG_SILENCE_POWER_FIELD.index = 27
+BASE_PROP_CFG_SILENCE_POWER_FIELD.label = 2
+BASE_PROP_CFG_SILENCE_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_SILENCE_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_SILENCE_POWER_FIELD.type = 1
+BASE_PROP_CFG_SILENCE_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_ANTI_SILENCE_POWER_FIELD.name = "anti_silence_power"
+BASE_PROP_CFG_ANTI_SILENCE_POWER_FIELD.full_name = ".ftcfg.base_prop_cfg.anti_silence_power"
+BASE_PROP_CFG_ANTI_SILENCE_POWER_FIELD.number = 29
+BASE_PROP_CFG_ANTI_SILENCE_POWER_FIELD.index = 28
+BASE_PROP_CFG_ANTI_SILENCE_POWER_FIELD.label = 2
+BASE_PROP_CFG_ANTI_SILENCE_POWER_FIELD.has_default_value = false
+BASE_PROP_CFG_ANTI_SILENCE_POWER_FIELD.default_value = 0.0
+BASE_PROP_CFG_ANTI_SILENCE_POWER_FIELD.type = 1
+BASE_PROP_CFG_ANTI_SILENCE_POWER_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_SPEED_FIELD.name = "speed"
+BASE_PROP_CFG_SPEED_FIELD.full_name = ".ftcfg.base_prop_cfg.speed"
+BASE_PROP_CFG_SPEED_FIELD.number = 30
+BASE_PROP_CFG_SPEED_FIELD.index = 29
+BASE_PROP_CFG_SPEED_FIELD.label = 2
+BASE_PROP_CFG_SPEED_FIELD.has_default_value = false
+BASE_PROP_CFG_SPEED_FIELD.default_value = 0.0
+BASE_PROP_CFG_SPEED_FIELD.type = 1
+BASE_PROP_CFG_SPEED_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_HP_SELF_HEAL_FIELD.name = "hp_self_heal"
+BASE_PROP_CFG_HP_SELF_HEAL_FIELD.full_name = ".ftcfg.base_prop_cfg.hp_self_heal"
+BASE_PROP_CFG_HP_SELF_HEAL_FIELD.number = 31
+BASE_PROP_CFG_HP_SELF_HEAL_FIELD.index = 30
+BASE_PROP_CFG_HP_SELF_HEAL_FIELD.label = 2
+BASE_PROP_CFG_HP_SELF_HEAL_FIELD.has_default_value = false
+BASE_PROP_CFG_HP_SELF_HEAL_FIELD.default_value = 0.0
+BASE_PROP_CFG_HP_SELF_HEAL_FIELD.type = 1
+BASE_PROP_CFG_HP_SELF_HEAL_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_MP_SELF_HEAL_FIELD.name = "mp_self_heal"
+BASE_PROP_CFG_MP_SELF_HEAL_FIELD.full_name = ".ftcfg.base_prop_cfg.mp_self_heal"
+BASE_PROP_CFG_MP_SELF_HEAL_FIELD.number = 32
+BASE_PROP_CFG_MP_SELF_HEAL_FIELD.index = 31
+BASE_PROP_CFG_MP_SELF_HEAL_FIELD.label = 2
+BASE_PROP_CFG_MP_SELF_HEAL_FIELD.has_default_value = false
+BASE_PROP_CFG_MP_SELF_HEAL_FIELD.default_value = 0.0
+BASE_PROP_CFG_MP_SELF_HEAL_FIELD.type = 1
+BASE_PROP_CFG_MP_SELF_HEAL_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_HP_HIT_RETURN_FIELD.name = "hp_hit_return"
+BASE_PROP_CFG_HP_HIT_RETURN_FIELD.full_name = ".ftcfg.base_prop_cfg.hp_hit_return"
+BASE_PROP_CFG_HP_HIT_RETURN_FIELD.number = 33
+BASE_PROP_CFG_HP_HIT_RETURN_FIELD.index = 32
+BASE_PROP_CFG_HP_HIT_RETURN_FIELD.label = 2
+BASE_PROP_CFG_HP_HIT_RETURN_FIELD.has_default_value = false
+BASE_PROP_CFG_HP_HIT_RETURN_FIELD.default_value = 0.0
+BASE_PROP_CFG_HP_HIT_RETURN_FIELD.type = 1
+BASE_PROP_CFG_HP_HIT_RETURN_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_MP_HIT_RETURN_FIELD.name = "mp_hit_return"
+BASE_PROP_CFG_MP_HIT_RETURN_FIELD.full_name = ".ftcfg.base_prop_cfg.mp_hit_return"
+BASE_PROP_CFG_MP_HIT_RETURN_FIELD.number = 34
+BASE_PROP_CFG_MP_HIT_RETURN_FIELD.index = 33
+BASE_PROP_CFG_MP_HIT_RETURN_FIELD.label = 2
+BASE_PROP_CFG_MP_HIT_RETURN_FIELD.has_default_value = false
+BASE_PROP_CFG_MP_HIT_RETURN_FIELD.default_value = 0.0
+BASE_PROP_CFG_MP_HIT_RETURN_FIELD.type = 1
+BASE_PROP_CFG_MP_HIT_RETURN_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_HP_DAMAGE_RETURN_RATE_FIELD.name = "hp_damage_return_rate"
+BASE_PROP_CFG_HP_DAMAGE_RETURN_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.hp_damage_return_rate"
+BASE_PROP_CFG_HP_DAMAGE_RETURN_RATE_FIELD.number = 35
+BASE_PROP_CFG_HP_DAMAGE_RETURN_RATE_FIELD.index = 34
+BASE_PROP_CFG_HP_DAMAGE_RETURN_RATE_FIELD.label = 2
+BASE_PROP_CFG_HP_DAMAGE_RETURN_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_HP_DAMAGE_RETURN_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_HP_DAMAGE_RETURN_RATE_FIELD.type = 1
+BASE_PROP_CFG_HP_DAMAGE_RETURN_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_MP_DAMAGE_RETURN_RATE_FIELD.name = "mp_damage_return_rate"
+BASE_PROP_CFG_MP_DAMAGE_RETURN_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.mp_damage_return_rate"
+BASE_PROP_CFG_MP_DAMAGE_RETURN_RATE_FIELD.number = 36
+BASE_PROP_CFG_MP_DAMAGE_RETURN_RATE_FIELD.index = 35
+BASE_PROP_CFG_MP_DAMAGE_RETURN_RATE_FIELD.label = 2
+BASE_PROP_CFG_MP_DAMAGE_RETURN_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_MP_DAMAGE_RETURN_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_MP_DAMAGE_RETURN_RATE_FIELD.type = 1
+BASE_PROP_CFG_MP_DAMAGE_RETURN_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_EXTRA_DAMAGE_RATE_FIELD.name = "extra_damage_rate"
+BASE_PROP_CFG_EXTRA_DAMAGE_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.extra_damage_rate"
+BASE_PROP_CFG_EXTRA_DAMAGE_RATE_FIELD.number = 37
+BASE_PROP_CFG_EXTRA_DAMAGE_RATE_FIELD.index = 36
+BASE_PROP_CFG_EXTRA_DAMAGE_RATE_FIELD.label = 2
+BASE_PROP_CFG_EXTRA_DAMAGE_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_EXTRA_DAMAGE_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_EXTRA_DAMAGE_RATE_FIELD.type = 1
+BASE_PROP_CFG_EXTRA_DAMAGE_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_REDUCE_DAMAGE_RATE_FIELD.name = "reduce_damage_rate"
+BASE_PROP_CFG_REDUCE_DAMAGE_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.reduce_damage_rate"
+BASE_PROP_CFG_REDUCE_DAMAGE_RATE_FIELD.number = 38
+BASE_PROP_CFG_REDUCE_DAMAGE_RATE_FIELD.index = 37
+BASE_PROP_CFG_REDUCE_DAMAGE_RATE_FIELD.label = 2
+BASE_PROP_CFG_REDUCE_DAMAGE_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_REDUCE_DAMAGE_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_REDUCE_DAMAGE_RATE_FIELD.type = 1
+BASE_PROP_CFG_REDUCE_DAMAGE_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_EXTRA_HEAL_RATE_FIELD.name = "extra_heal_rate"
+BASE_PROP_CFG_EXTRA_HEAL_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.extra_heal_rate"
+BASE_PROP_CFG_EXTRA_HEAL_RATE_FIELD.number = 39
+BASE_PROP_CFG_EXTRA_HEAL_RATE_FIELD.index = 38
+BASE_PROP_CFG_EXTRA_HEAL_RATE_FIELD.label = 2
+BASE_PROP_CFG_EXTRA_HEAL_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_EXTRA_HEAL_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_EXTRA_HEAL_RATE_FIELD.type = 1
+BASE_PROP_CFG_EXTRA_HEAL_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_EXTRA_HEALED_RATE_FIELD.name = "extra_healed_rate"
+BASE_PROP_CFG_EXTRA_HEALED_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.extra_healed_rate"
+BASE_PROP_CFG_EXTRA_HEALED_RATE_FIELD.number = 40
+BASE_PROP_CFG_EXTRA_HEALED_RATE_FIELD.index = 39
+BASE_PROP_CFG_EXTRA_HEALED_RATE_FIELD.label = 2
+BASE_PROP_CFG_EXTRA_HEALED_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_EXTRA_HEALED_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_EXTRA_HEALED_RATE_FIELD.type = 1
+BASE_PROP_CFG_EXTRA_HEALED_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_MAUD_FIELD.name = "maud"
+BASE_PROP_CFG_MAUD_FIELD.full_name = ".ftcfg.base_prop_cfg.maud"
+BASE_PROP_CFG_MAUD_FIELD.number = 41
+BASE_PROP_CFG_MAUD_FIELD.index = 40
+BASE_PROP_CFG_MAUD_FIELD.label = 2
+BASE_PROP_CFG_MAUD_FIELD.has_default_value = false
+BASE_PROP_CFG_MAUD_FIELD.default_value = 0.0
+BASE_PROP_CFG_MAUD_FIELD.type = 1
+BASE_PROP_CFG_MAUD_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_MIND_FIELD.name = "mind"
+BASE_PROP_CFG_MIND_FIELD.full_name = ".ftcfg.base_prop_cfg.mind"
+BASE_PROP_CFG_MIND_FIELD.number = 42
+BASE_PROP_CFG_MIND_FIELD.index = 41
+BASE_PROP_CFG_MIND_FIELD.label = 2
+BASE_PROP_CFG_MIND_FIELD.has_default_value = false
+BASE_PROP_CFG_MIND_FIELD.default_value = 0.0
+BASE_PROP_CFG_MIND_FIELD.type = 1
+BASE_PROP_CFG_MIND_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_CONSTITUTION_FIELD.name = "constitution"
+BASE_PROP_CFG_CONSTITUTION_FIELD.full_name = ".ftcfg.base_prop_cfg.constitution"
+BASE_PROP_CFG_CONSTITUTION_FIELD.number = 43
+BASE_PROP_CFG_CONSTITUTION_FIELD.index = 42
+BASE_PROP_CFG_CONSTITUTION_FIELD.label = 2
+BASE_PROP_CFG_CONSTITUTION_FIELD.has_default_value = false
+BASE_PROP_CFG_CONSTITUTION_FIELD.default_value = 0.0
+BASE_PROP_CFG_CONSTITUTION_FIELD.type = 1
+BASE_PROP_CFG_CONSTITUTION_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_INTENSITY_FIELD.name = "intensity"
+BASE_PROP_CFG_INTENSITY_FIELD.full_name = ".ftcfg.base_prop_cfg.intensity"
+BASE_PROP_CFG_INTENSITY_FIELD.number = 44
+BASE_PROP_CFG_INTENSITY_FIELD.index = 43
+BASE_PROP_CFG_INTENSITY_FIELD.label = 2
+BASE_PROP_CFG_INTENSITY_FIELD.has_default_value = false
+BASE_PROP_CFG_INTENSITY_FIELD.default_value = 0.0
+BASE_PROP_CFG_INTENSITY_FIELD.type = 1
+BASE_PROP_CFG_INTENSITY_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_DEADLY_RATE_FIELD.name = "deadly_rate"
+BASE_PROP_CFG_DEADLY_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.deadly_rate"
+BASE_PROP_CFG_DEADLY_RATE_FIELD.number = 45
+BASE_PROP_CFG_DEADLY_RATE_FIELD.index = 44
+BASE_PROP_CFG_DEADLY_RATE_FIELD.label = 2
+BASE_PROP_CFG_DEADLY_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_DEADLY_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_DEADLY_RATE_FIELD.type = 1
+BASE_PROP_CFG_DEADLY_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_DEFY_DEFENSE_RATE_FIELD.name = "defy_defense_rate"
+BASE_PROP_CFG_DEFY_DEFENSE_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.defy_defense_rate"
+BASE_PROP_CFG_DEFY_DEFENSE_RATE_FIELD.number = 46
+BASE_PROP_CFG_DEFY_DEFENSE_RATE_FIELD.index = 45
+BASE_PROP_CFG_DEFY_DEFENSE_RATE_FIELD.label = 2
+BASE_PROP_CFG_DEFY_DEFENSE_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_DEFY_DEFENSE_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_DEFY_DEFENSE_RATE_FIELD.type = 1
+BASE_PROP_CFG_DEFY_DEFENSE_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_BLOCK_RATE_FIELD.name = "block_rate"
+BASE_PROP_CFG_BLOCK_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.block_rate"
+BASE_PROP_CFG_BLOCK_RATE_FIELD.number = 47
+BASE_PROP_CFG_BLOCK_RATE_FIELD.index = 46
+BASE_PROP_CFG_BLOCK_RATE_FIELD.label = 2
+BASE_PROP_CFG_BLOCK_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_BLOCK_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_BLOCK_RATE_FIELD.type = 1
+BASE_PROP_CFG_BLOCK_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_DEFY_BLOCK_RATE_FIELD.name = "defy_block_rate"
+BASE_PROP_CFG_DEFY_BLOCK_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.defy_block_rate"
+BASE_PROP_CFG_DEFY_BLOCK_RATE_FIELD.number = 48
+BASE_PROP_CFG_DEFY_BLOCK_RATE_FIELD.index = 47
+BASE_PROP_CFG_DEFY_BLOCK_RATE_FIELD.label = 2
+BASE_PROP_CFG_DEFY_BLOCK_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_DEFY_BLOCK_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_DEFY_BLOCK_RATE_FIELD.type = 1
+BASE_PROP_CFG_DEFY_BLOCK_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_HP_KILL_RETURN_FIELD.name = "hp_kill_return"
+BASE_PROP_CFG_HP_KILL_RETURN_FIELD.full_name = ".ftcfg.base_prop_cfg.hp_kill_return"
+BASE_PROP_CFG_HP_KILL_RETURN_FIELD.number = 49
+BASE_PROP_CFG_HP_KILL_RETURN_FIELD.index = 48
+BASE_PROP_CFG_HP_KILL_RETURN_FIELD.label = 2
+BASE_PROP_CFG_HP_KILL_RETURN_FIELD.has_default_value = false
+BASE_PROP_CFG_HP_KILL_RETURN_FIELD.default_value = 0.0
+BASE_PROP_CFG_HP_KILL_RETURN_FIELD.type = 1
+BASE_PROP_CFG_HP_KILL_RETURN_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_EXP_KILL_RETURN_FIELD.name = "exp_kill_return"
+BASE_PROP_CFG_EXP_KILL_RETURN_FIELD.full_name = ".ftcfg.base_prop_cfg.exp_kill_return"
+BASE_PROP_CFG_EXP_KILL_RETURN_FIELD.number = 50
+BASE_PROP_CFG_EXP_KILL_RETURN_FIELD.index = 49
+BASE_PROP_CFG_EXP_KILL_RETURN_FIELD.label = 2
+BASE_PROP_CFG_EXP_KILL_RETURN_FIELD.has_default_value = false
+BASE_PROP_CFG_EXP_KILL_RETURN_FIELD.default_value = 0.0
+BASE_PROP_CFG_EXP_KILL_RETURN_FIELD.type = 1
+BASE_PROP_CFG_EXP_KILL_RETURN_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_REDUCE_SKILL_CD_FIELD.name = "reduce_skill_cd"
+BASE_PROP_CFG_REDUCE_SKILL_CD_FIELD.full_name = ".ftcfg.base_prop_cfg.reduce_skill_cd"
+BASE_PROP_CFG_REDUCE_SKILL_CD_FIELD.number = 51
+BASE_PROP_CFG_REDUCE_SKILL_CD_FIELD.index = 50
+BASE_PROP_CFG_REDUCE_SKILL_CD_FIELD.label = 2
+BASE_PROP_CFG_REDUCE_SKILL_CD_FIELD.has_default_value = false
+BASE_PROP_CFG_REDUCE_SKILL_CD_FIELD.default_value = 0.0
+BASE_PROP_CFG_REDUCE_SKILL_CD_FIELD.type = 1
+BASE_PROP_CFG_REDUCE_SKILL_CD_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_REDUCE_SKILL_COST_FIELD.name = "reduce_skill_cost"
+BASE_PROP_CFG_REDUCE_SKILL_COST_FIELD.full_name = ".ftcfg.base_prop_cfg.reduce_skill_cost"
+BASE_PROP_CFG_REDUCE_SKILL_COST_FIELD.number = 52
+BASE_PROP_CFG_REDUCE_SKILL_COST_FIELD.index = 51
+BASE_PROP_CFG_REDUCE_SKILL_COST_FIELD.label = 2
+BASE_PROP_CFG_REDUCE_SKILL_COST_FIELD.has_default_value = false
+BASE_PROP_CFG_REDUCE_SKILL_COST_FIELD.default_value = 0.0
+BASE_PROP_CFG_REDUCE_SKILL_COST_FIELD.type = 1
+BASE_PROP_CFG_REDUCE_SKILL_COST_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_NPC_EXTRA_DAMAGE_FIELD.name = "npc_extra_damage"
+BASE_PROP_CFG_NPC_EXTRA_DAMAGE_FIELD.full_name = ".ftcfg.base_prop_cfg.npc_extra_damage"
+BASE_PROP_CFG_NPC_EXTRA_DAMAGE_FIELD.number = 53
+BASE_PROP_CFG_NPC_EXTRA_DAMAGE_FIELD.index = 52
+BASE_PROP_CFG_NPC_EXTRA_DAMAGE_FIELD.label = 2
+BASE_PROP_CFG_NPC_EXTRA_DAMAGE_FIELD.has_default_value = false
+BASE_PROP_CFG_NPC_EXTRA_DAMAGE_FIELD.default_value = 0.0
+BASE_PROP_CFG_NPC_EXTRA_DAMAGE_FIELD.type = 1
+BASE_PROP_CFG_NPC_EXTRA_DAMAGE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_REDUCE_NPC_DAMAGE_FIELD.name = "reduce_npc_damage"
+BASE_PROP_CFG_REDUCE_NPC_DAMAGE_FIELD.full_name = ".ftcfg.base_prop_cfg.reduce_npc_damage"
+BASE_PROP_CFG_REDUCE_NPC_DAMAGE_FIELD.number = 54
+BASE_PROP_CFG_REDUCE_NPC_DAMAGE_FIELD.index = 53
+BASE_PROP_CFG_REDUCE_NPC_DAMAGE_FIELD.label = 2
+BASE_PROP_CFG_REDUCE_NPC_DAMAGE_FIELD.has_default_value = false
+BASE_PROP_CFG_REDUCE_NPC_DAMAGE_FIELD.default_value = 0.0
+BASE_PROP_CFG_REDUCE_NPC_DAMAGE_FIELD.type = 1
+BASE_PROP_CFG_REDUCE_NPC_DAMAGE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_XP_SELF_HEAL_FIELD.name = "xp_self_heal"
+BASE_PROP_CFG_XP_SELF_HEAL_FIELD.full_name = ".ftcfg.base_prop_cfg.xp_self_heal"
+BASE_PROP_CFG_XP_SELF_HEAL_FIELD.number = 55
+BASE_PROP_CFG_XP_SELF_HEAL_FIELD.index = 54
+BASE_PROP_CFG_XP_SELF_HEAL_FIELD.label = 2
+BASE_PROP_CFG_XP_SELF_HEAL_FIELD.has_default_value = false
+BASE_PROP_CFG_XP_SELF_HEAL_FIELD.default_value = 0.0
+BASE_PROP_CFG_XP_SELF_HEAL_FIELD.type = 1
+BASE_PROP_CFG_XP_SELF_HEAL_FIELD.cpp_type = 5
+
+BASE_PROP_CFG_LOGIC_REPEAT3_RATE_FIELD.name = "logic_repeat3_rate"
+BASE_PROP_CFG_LOGIC_REPEAT3_RATE_FIELD.full_name = ".ftcfg.base_prop_cfg.logic_repeat3_rate"
+BASE_PROP_CFG_LOGIC_REPEAT3_RATE_FIELD.number = 56
+BASE_PROP_CFG_LOGIC_REPEAT3_RATE_FIELD.index = 55
+BASE_PROP_CFG_LOGIC_REPEAT3_RATE_FIELD.label = 2
+BASE_PROP_CFG_LOGIC_REPEAT3_RATE_FIELD.has_default_value = false
+BASE_PROP_CFG_LOGIC_REPEAT3_RATE_FIELD.default_value = 0.0
+BASE_PROP_CFG_LOGIC_REPEAT3_RATE_FIELD.type = 1
+BASE_PROP_CFG_LOGIC_REPEAT3_RATE_FIELD.cpp_type = 5
+
+BASE_PROP_CFG.name = "base_prop_cfg"
+BASE_PROP_CFG.full_name = ".ftcfg.base_prop_cfg"
+BASE_PROP_CFG.nested_types = {}
+BASE_PROP_CFG.enum_types = {}
+BASE_PROP_CFG.fields = {BASE_PROP_CFG_PROF_TYPE_FIELD, BASE_PROP_CFG_LEVEL_FIELD, BASE_PROP_CFG_HP_MAX_FIELD, BASE_PROP_CFG_MP_MAX_FIELD, BASE_PROP_CFG_ATTACK_FIELD, BASE_PROP_CFG_DEFENSE_FIELD, BASE_PROP_CFG_HIT_FIELD, BASE_PROP_CFG_DODGE_FIELD, BASE_PROP_CFG_CRITICAL_FIELD, BASE_PROP_CFG_ANTI_CRITICAL_FIELD, BASE_PROP_CFG_CRITICAL_POWER_FIELD, BASE_PROP_CFG_ANTI_CRITICAL_POWER_FIELD, BASE_PROP_CFG_XP_MAX_FIELD, BASE_PROP_CFG_HIT_RATE_FIELD, BASE_PROP_CFG_DODGE_RATE_FIELD, BASE_PROP_CFG_CRITICAL_RATE_FIELD, BASE_PROP_CFG_ANTI_CRITICAL_RATE_FIELD, BASE_PROP_CFG_CRITICAL_POWER_RATE_FIELD, BASE_PROP_CFG_ANTI_CRITICAL_POWER_RATE_FIELD, BASE_PROP_CFG_DECELERATTE_POWER_FIELD, BASE_PROP_CFG_ANTI_DECELERATTE_POWER_FIELD, BASE_PROP_CFG_SLEEP_POWER_FIELD, BASE_PROP_CFG_ANTI_SLEEP_POWER_FIELD, BASE_PROP_CFG_HOLD_POWER_FIELD, BASE_PROP_CFG_ANTI_HOLD_POWER_FIELD, BASE_PROP_CFG_CHARM_POWER_FIELD, BASE_PROP_CFG_ANTI_CHARM_POWER_FIELD, BASE_PROP_CFG_SILENCE_POWER_FIELD, BASE_PROP_CFG_ANTI_SILENCE_POWER_FIELD, BASE_PROP_CFG_SPEED_FIELD, BASE_PROP_CFG_HP_SELF_HEAL_FIELD, BASE_PROP_CFG_MP_SELF_HEAL_FIELD, BASE_PROP_CFG_HP_HIT_RETURN_FIELD, BASE_PROP_CFG_MP_HIT_RETURN_FIELD, BASE_PROP_CFG_HP_DAMAGE_RETURN_RATE_FIELD, BASE_PROP_CFG_MP_DAMAGE_RETURN_RATE_FIELD, BASE_PROP_CFG_EXTRA_DAMAGE_RATE_FIELD, BASE_PROP_CFG_REDUCE_DAMAGE_RATE_FIELD, BASE_PROP_CFG_EXTRA_HEAL_RATE_FIELD, BASE_PROP_CFG_EXTRA_HEALED_RATE_FIELD, BASE_PROP_CFG_MAUD_FIELD, BASE_PROP_CFG_MIND_FIELD, BASE_PROP_CFG_CONSTITUTION_FIELD, BASE_PROP_CFG_INTENSITY_FIELD, BASE_PROP_CFG_DEADLY_RATE_FIELD, BASE_PROP_CFG_DEFY_DEFENSE_RATE_FIELD, BASE_PROP_CFG_BLOCK_RATE_FIELD, BASE_PROP_CFG_DEFY_BLOCK_RATE_FIELD, BASE_PROP_CFG_HP_KILL_RETURN_FIELD, BASE_PROP_CFG_EXP_KILL_RETURN_FIELD, BASE_PROP_CFG_REDUCE_SKILL_CD_FIELD, BASE_PROP_CFG_REDUCE_SKILL_COST_FIELD, BASE_PROP_CFG_NPC_EXTRA_DAMAGE_FIELD, BASE_PROP_CFG_REDUCE_NPC_DAMAGE_FIELD, BASE_PROP_CFG_XP_SELF_HEAL_FIELD, BASE_PROP_CFG_LOGIC_REPEAT3_RATE_FIELD}
+BASE_PROP_CFG.is_extendable = false
+BASE_PROP_CFG.extensions = {}
+BASE_PROP_CFGS_ITEMS_FIELD.name = "items"
+BASE_PROP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.base_prop_cfgs.items"
+BASE_PROP_CFGS_ITEMS_FIELD.number = 1
+BASE_PROP_CFGS_ITEMS_FIELD.index = 0
+BASE_PROP_CFGS_ITEMS_FIELD.label = 3
+BASE_PROP_CFGS_ITEMS_FIELD.has_default_value = false
+BASE_PROP_CFGS_ITEMS_FIELD.default_value = {}
+BASE_PROP_CFGS_ITEMS_FIELD.message_type = BASE_PROP_CFG
+BASE_PROP_CFGS_ITEMS_FIELD.type = 11
+BASE_PROP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BASE_PROP_CFGS.name = "base_prop_cfgs"
+BASE_PROP_CFGS.full_name = ".ftcfg.base_prop_cfgs"
+BASE_PROP_CFGS.nested_types = {}
+BASE_PROP_CFGS.enum_types = {}
+BASE_PROP_CFGS.fields = {BASE_PROP_CFGS_ITEMS_FIELD}
+BASE_PROP_CFGS.is_extendable = false
+BASE_PROP_CFGS.extensions = {}
+LEVEL_EXP_CFG_LEVEL_FIELD.name = "level"
+LEVEL_EXP_CFG_LEVEL_FIELD.full_name = ".ftcfg.level_exp_cfg.level"
+LEVEL_EXP_CFG_LEVEL_FIELD.number = 1
+LEVEL_EXP_CFG_LEVEL_FIELD.index = 0
+LEVEL_EXP_CFG_LEVEL_FIELD.label = 2
+LEVEL_EXP_CFG_LEVEL_FIELD.has_default_value = false
+LEVEL_EXP_CFG_LEVEL_FIELD.default_value = 0
+LEVEL_EXP_CFG_LEVEL_FIELD.type = 5
+LEVEL_EXP_CFG_LEVEL_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG_NEED_EXP_FIELD.name = "need_exp"
+LEVEL_EXP_CFG_NEED_EXP_FIELD.full_name = ".ftcfg.level_exp_cfg.need_exp"
+LEVEL_EXP_CFG_NEED_EXP_FIELD.number = 2
+LEVEL_EXP_CFG_NEED_EXP_FIELD.index = 1
+LEVEL_EXP_CFG_NEED_EXP_FIELD.label = 2
+LEVEL_EXP_CFG_NEED_EXP_FIELD.has_default_value = false
+LEVEL_EXP_CFG_NEED_EXP_FIELD.default_value = 0
+LEVEL_EXP_CFG_NEED_EXP_FIELD.type = 5
+LEVEL_EXP_CFG_NEED_EXP_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG_CAMP_FIELD.name = "camp"
+LEVEL_EXP_CFG_CAMP_FIELD.full_name = ".ftcfg.level_exp_cfg.camp"
+LEVEL_EXP_CFG_CAMP_FIELD.number = 3
+LEVEL_EXP_CFG_CAMP_FIELD.index = 2
+LEVEL_EXP_CFG_CAMP_FIELD.label = 2
+LEVEL_EXP_CFG_CAMP_FIELD.has_default_value = false
+LEVEL_EXP_CFG_CAMP_FIELD.default_value = 0
+LEVEL_EXP_CFG_CAMP_FIELD.type = 5
+LEVEL_EXP_CFG_CAMP_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG_COMBAT_POINT_FIELD.name = "combat_point"
+LEVEL_EXP_CFG_COMBAT_POINT_FIELD.full_name = ".ftcfg.level_exp_cfg.combat_point"
+LEVEL_EXP_CFG_COMBAT_POINT_FIELD.number = 4
+LEVEL_EXP_CFG_COMBAT_POINT_FIELD.index = 3
+LEVEL_EXP_CFG_COMBAT_POINT_FIELD.label = 2
+LEVEL_EXP_CFG_COMBAT_POINT_FIELD.has_default_value = false
+LEVEL_EXP_CFG_COMBAT_POINT_FIELD.default_value = 0
+LEVEL_EXP_CFG_COMBAT_POINT_FIELD.type = 5
+LEVEL_EXP_CFG_COMBAT_POINT_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG_KILL_POPULARITY_MIN_FIELD.name = "kill_popularity_min"
+LEVEL_EXP_CFG_KILL_POPULARITY_MIN_FIELD.full_name = ".ftcfg.level_exp_cfg.kill_popularity_min"
+LEVEL_EXP_CFG_KILL_POPULARITY_MIN_FIELD.number = 5
+LEVEL_EXP_CFG_KILL_POPULARITY_MIN_FIELD.index = 4
+LEVEL_EXP_CFG_KILL_POPULARITY_MIN_FIELD.label = 2
+LEVEL_EXP_CFG_KILL_POPULARITY_MIN_FIELD.has_default_value = false
+LEVEL_EXP_CFG_KILL_POPULARITY_MIN_FIELD.default_value = 0
+LEVEL_EXP_CFG_KILL_POPULARITY_MIN_FIELD.type = 5
+LEVEL_EXP_CFG_KILL_POPULARITY_MIN_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG_KILL_POPULARITY_MAX_FIELD.name = "kill_popularity_max"
+LEVEL_EXP_CFG_KILL_POPULARITY_MAX_FIELD.full_name = ".ftcfg.level_exp_cfg.kill_popularity_max"
+LEVEL_EXP_CFG_KILL_POPULARITY_MAX_FIELD.number = 6
+LEVEL_EXP_CFG_KILL_POPULARITY_MAX_FIELD.index = 5
+LEVEL_EXP_CFG_KILL_POPULARITY_MAX_FIELD.label = 2
+LEVEL_EXP_CFG_KILL_POPULARITY_MAX_FIELD.has_default_value = false
+LEVEL_EXP_CFG_KILL_POPULARITY_MAX_FIELD.default_value = 0
+LEVEL_EXP_CFG_KILL_POPULARITY_MAX_FIELD.type = 5
+LEVEL_EXP_CFG_KILL_POPULARITY_MAX_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG_ASSISTS_POPULARITY_MIN_FIELD.name = "assists_popularity_min"
+LEVEL_EXP_CFG_ASSISTS_POPULARITY_MIN_FIELD.full_name = ".ftcfg.level_exp_cfg.assists_popularity_min"
+LEVEL_EXP_CFG_ASSISTS_POPULARITY_MIN_FIELD.number = 7
+LEVEL_EXP_CFG_ASSISTS_POPULARITY_MIN_FIELD.index = 6
+LEVEL_EXP_CFG_ASSISTS_POPULARITY_MIN_FIELD.label = 2
+LEVEL_EXP_CFG_ASSISTS_POPULARITY_MIN_FIELD.has_default_value = false
+LEVEL_EXP_CFG_ASSISTS_POPULARITY_MIN_FIELD.default_value = 0
+LEVEL_EXP_CFG_ASSISTS_POPULARITY_MIN_FIELD.type = 5
+LEVEL_EXP_CFG_ASSISTS_POPULARITY_MIN_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG_GOLD_COUPON_MAX_FIELD.name = "gold_coupon_max"
+LEVEL_EXP_CFG_GOLD_COUPON_MAX_FIELD.full_name = ".ftcfg.level_exp_cfg.gold_coupon_max"
+LEVEL_EXP_CFG_GOLD_COUPON_MAX_FIELD.number = 8
+LEVEL_EXP_CFG_GOLD_COUPON_MAX_FIELD.index = 7
+LEVEL_EXP_CFG_GOLD_COUPON_MAX_FIELD.label = 2
+LEVEL_EXP_CFG_GOLD_COUPON_MAX_FIELD.has_default_value = false
+LEVEL_EXP_CFG_GOLD_COUPON_MAX_FIELD.default_value = 0
+LEVEL_EXP_CFG_GOLD_COUPON_MAX_FIELD.type = 5
+LEVEL_EXP_CFG_GOLD_COUPON_MAX_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG_EXP_MAX_FIELD.name = "exp_max"
+LEVEL_EXP_CFG_EXP_MAX_FIELD.full_name = ".ftcfg.level_exp_cfg.exp_max"
+LEVEL_EXP_CFG_EXP_MAX_FIELD.number = 9
+LEVEL_EXP_CFG_EXP_MAX_FIELD.index = 8
+LEVEL_EXP_CFG_EXP_MAX_FIELD.label = 2
+LEVEL_EXP_CFG_EXP_MAX_FIELD.has_default_value = false
+LEVEL_EXP_CFG_EXP_MAX_FIELD.default_value = 0
+LEVEL_EXP_CFG_EXP_MAX_FIELD.type = 5
+LEVEL_EXP_CFG_EXP_MAX_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG_POPULARITY_MAX_FIELD.name = "popularity_max"
+LEVEL_EXP_CFG_POPULARITY_MAX_FIELD.full_name = ".ftcfg.level_exp_cfg.popularity_max"
+LEVEL_EXP_CFG_POPULARITY_MAX_FIELD.number = 10
+LEVEL_EXP_CFG_POPULARITY_MAX_FIELD.index = 9
+LEVEL_EXP_CFG_POPULARITY_MAX_FIELD.label = 2
+LEVEL_EXP_CFG_POPULARITY_MAX_FIELD.has_default_value = false
+LEVEL_EXP_CFG_POPULARITY_MAX_FIELD.default_value = 0
+LEVEL_EXP_CFG_POPULARITY_MAX_FIELD.type = 5
+LEVEL_EXP_CFG_POPULARITY_MAX_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG_BIND_POPULARITY_MAX_FIELD.name = "bind_popularity_max"
+LEVEL_EXP_CFG_BIND_POPULARITY_MAX_FIELD.full_name = ".ftcfg.level_exp_cfg.bind_popularity_max"
+LEVEL_EXP_CFG_BIND_POPULARITY_MAX_FIELD.number = 11
+LEVEL_EXP_CFG_BIND_POPULARITY_MAX_FIELD.index = 10
+LEVEL_EXP_CFG_BIND_POPULARITY_MAX_FIELD.label = 2
+LEVEL_EXP_CFG_BIND_POPULARITY_MAX_FIELD.has_default_value = false
+LEVEL_EXP_CFG_BIND_POPULARITY_MAX_FIELD.default_value = 0
+LEVEL_EXP_CFG_BIND_POPULARITY_MAX_FIELD.type = 5
+LEVEL_EXP_CFG_BIND_POPULARITY_MAX_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG_ANNIHILATION_REWARD_FIELD.name = "annihilation_reward"
+LEVEL_EXP_CFG_ANNIHILATION_REWARD_FIELD.full_name = ".ftcfg.level_exp_cfg.annihilation_reward"
+LEVEL_EXP_CFG_ANNIHILATION_REWARD_FIELD.number = 12
+LEVEL_EXP_CFG_ANNIHILATION_REWARD_FIELD.index = 11
+LEVEL_EXP_CFG_ANNIHILATION_REWARD_FIELD.label = 2
+LEVEL_EXP_CFG_ANNIHILATION_REWARD_FIELD.has_default_value = false
+LEVEL_EXP_CFG_ANNIHILATION_REWARD_FIELD.default_value = 0
+LEVEL_EXP_CFG_ANNIHILATION_REWARD_FIELD.type = 5
+LEVEL_EXP_CFG_ANNIHILATION_REWARD_FIELD.cpp_type = 1
+
+LEVEL_EXP_CFG.name = "level_exp_cfg"
+LEVEL_EXP_CFG.full_name = ".ftcfg.level_exp_cfg"
+LEVEL_EXP_CFG.nested_types = {}
+LEVEL_EXP_CFG.enum_types = {}
+LEVEL_EXP_CFG.fields = {LEVEL_EXP_CFG_LEVEL_FIELD, LEVEL_EXP_CFG_NEED_EXP_FIELD, LEVEL_EXP_CFG_CAMP_FIELD, LEVEL_EXP_CFG_COMBAT_POINT_FIELD, LEVEL_EXP_CFG_KILL_POPULARITY_MIN_FIELD, LEVEL_EXP_CFG_KILL_POPULARITY_MAX_FIELD, LEVEL_EXP_CFG_ASSISTS_POPULARITY_MIN_FIELD, LEVEL_EXP_CFG_GOLD_COUPON_MAX_FIELD, LEVEL_EXP_CFG_EXP_MAX_FIELD, LEVEL_EXP_CFG_POPULARITY_MAX_FIELD, LEVEL_EXP_CFG_BIND_POPULARITY_MAX_FIELD, LEVEL_EXP_CFG_ANNIHILATION_REWARD_FIELD}
+LEVEL_EXP_CFG.is_extendable = false
+LEVEL_EXP_CFG.extensions = {}
+LEVEL_EXP_CFGS_ITEMS_FIELD.name = "items"
+LEVEL_EXP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.level_exp_cfgs.items"
+LEVEL_EXP_CFGS_ITEMS_FIELD.number = 1
+LEVEL_EXP_CFGS_ITEMS_FIELD.index = 0
+LEVEL_EXP_CFGS_ITEMS_FIELD.label = 3
+LEVEL_EXP_CFGS_ITEMS_FIELD.has_default_value = false
+LEVEL_EXP_CFGS_ITEMS_FIELD.default_value = {}
+LEVEL_EXP_CFGS_ITEMS_FIELD.message_type = LEVEL_EXP_CFG
+LEVEL_EXP_CFGS_ITEMS_FIELD.type = 11
+LEVEL_EXP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+LEVEL_EXP_CFGS.name = "level_exp_cfgs"
+LEVEL_EXP_CFGS.full_name = ".ftcfg.level_exp_cfgs"
+LEVEL_EXP_CFGS.nested_types = {}
+LEVEL_EXP_CFGS.enum_types = {}
+LEVEL_EXP_CFGS.fields = {LEVEL_EXP_CFGS_ITEMS_FIELD}
+LEVEL_EXP_CFGS.is_extendable = false
+LEVEL_EXP_CFGS.extensions = {}
+LANGUAGE_CFG_ID_FIELD.name = "id"
+LANGUAGE_CFG_ID_FIELD.full_name = ".ftcfg.language_cfg.id"
+LANGUAGE_CFG_ID_FIELD.number = 1
+LANGUAGE_CFG_ID_FIELD.index = 0
+LANGUAGE_CFG_ID_FIELD.label = 2
+LANGUAGE_CFG_ID_FIELD.has_default_value = false
+LANGUAGE_CFG_ID_FIELD.default_value = 0
+LANGUAGE_CFG_ID_FIELD.type = 5
+LANGUAGE_CFG_ID_FIELD.cpp_type = 1
+
+LANGUAGE_CFG_TEXT_FIELD.name = "text"
+LANGUAGE_CFG_TEXT_FIELD.full_name = ".ftcfg.language_cfg.text"
+LANGUAGE_CFG_TEXT_FIELD.number = 2
+LANGUAGE_CFG_TEXT_FIELD.index = 1
+LANGUAGE_CFG_TEXT_FIELD.label = 2
+LANGUAGE_CFG_TEXT_FIELD.has_default_value = false
+LANGUAGE_CFG_TEXT_FIELD.default_value = ""
+LANGUAGE_CFG_TEXT_FIELD.type = 9
+LANGUAGE_CFG_TEXT_FIELD.cpp_type = 9
+
+LANGUAGE_CFG.name = "language_cfg"
+LANGUAGE_CFG.full_name = ".ftcfg.language_cfg"
+LANGUAGE_CFG.nested_types = {}
+LANGUAGE_CFG.enum_types = {}
+LANGUAGE_CFG.fields = {LANGUAGE_CFG_ID_FIELD, LANGUAGE_CFG_TEXT_FIELD}
+LANGUAGE_CFG.is_extendable = false
+LANGUAGE_CFG.extensions = {}
+LANGUAGE_CFGS_ITEMS_FIELD.name = "items"
+LANGUAGE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.language_cfgs.items"
+LANGUAGE_CFGS_ITEMS_FIELD.number = 1
+LANGUAGE_CFGS_ITEMS_FIELD.index = 0
+LANGUAGE_CFGS_ITEMS_FIELD.label = 3
+LANGUAGE_CFGS_ITEMS_FIELD.has_default_value = false
+LANGUAGE_CFGS_ITEMS_FIELD.default_value = {}
+LANGUAGE_CFGS_ITEMS_FIELD.message_type = LANGUAGE_CFG
+LANGUAGE_CFGS_ITEMS_FIELD.type = 11
+LANGUAGE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+LANGUAGE_CFGS.name = "language_cfgs"
+LANGUAGE_CFGS.full_name = ".ftcfg.language_cfgs"
+LANGUAGE_CFGS.nested_types = {}
+LANGUAGE_CFGS.enum_types = {}
+LANGUAGE_CFGS.fields = {LANGUAGE_CFGS_ITEMS_FIELD}
+LANGUAGE_CFGS.is_extendable = false
+LANGUAGE_CFGS.extensions = {}
+MISSION_CFG_ID_FIELD.name = "id"
+MISSION_CFG_ID_FIELD.full_name = ".ftcfg.mission_cfg.id"
+MISSION_CFG_ID_FIELD.number = 1
+MISSION_CFG_ID_FIELD.index = 0
+MISSION_CFG_ID_FIELD.label = 2
+MISSION_CFG_ID_FIELD.has_default_value = false
+MISSION_CFG_ID_FIELD.default_value = 0
+MISSION_CFG_ID_FIELD.type = 5
+MISSION_CFG_ID_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_GROUPID_FIELD.name = "mission_groupid"
+MISSION_CFG_MISSION_GROUPID_FIELD.full_name = ".ftcfg.mission_cfg.mission_groupid"
+MISSION_CFG_MISSION_GROUPID_FIELD.number = 2
+MISSION_CFG_MISSION_GROUPID_FIELD.index = 1
+MISSION_CFG_MISSION_GROUPID_FIELD.label = 2
+MISSION_CFG_MISSION_GROUPID_FIELD.has_default_value = false
+MISSION_CFG_MISSION_GROUPID_FIELD.default_value = 0
+MISSION_CFG_MISSION_GROUPID_FIELD.type = 5
+MISSION_CFG_MISSION_GROUPID_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_COLOUR_FIELD.name = "mission_colour"
+MISSION_CFG_MISSION_COLOUR_FIELD.full_name = ".ftcfg.mission_cfg.mission_colour"
+MISSION_CFG_MISSION_COLOUR_FIELD.number = 3
+MISSION_CFG_MISSION_COLOUR_FIELD.index = 2
+MISSION_CFG_MISSION_COLOUR_FIELD.label = 2
+MISSION_CFG_MISSION_COLOUR_FIELD.has_default_value = false
+MISSION_CFG_MISSION_COLOUR_FIELD.default_value = 0
+MISSION_CFG_MISSION_COLOUR_FIELD.type = 5
+MISSION_CFG_MISSION_COLOUR_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_NAME_FIELD.name = "mission_name"
+MISSION_CFG_MISSION_NAME_FIELD.full_name = ".ftcfg.mission_cfg.mission_name"
+MISSION_CFG_MISSION_NAME_FIELD.number = 4
+MISSION_CFG_MISSION_NAME_FIELD.index = 3
+MISSION_CFG_MISSION_NAME_FIELD.label = 2
+MISSION_CFG_MISSION_NAME_FIELD.has_default_value = false
+MISSION_CFG_MISSION_NAME_FIELD.default_value = 0
+MISSION_CFG_MISSION_NAME_FIELD.type = 5
+MISSION_CFG_MISSION_NAME_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_TEXT_FIELD.name = "mission_text"
+MISSION_CFG_MISSION_TEXT_FIELD.full_name = ".ftcfg.mission_cfg.mission_text"
+MISSION_CFG_MISSION_TEXT_FIELD.number = 5
+MISSION_CFG_MISSION_TEXT_FIELD.index = 4
+MISSION_CFG_MISSION_TEXT_FIELD.label = 2
+MISSION_CFG_MISSION_TEXT_FIELD.has_default_value = false
+MISSION_CFG_MISSION_TEXT_FIELD.default_value = 0
+MISSION_CFG_MISSION_TEXT_FIELD.type = 5
+MISSION_CFG_MISSION_TEXT_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_TARGET1_FIELD.name = "mission_target1"
+MISSION_CFG_MISSION_TARGET1_FIELD.full_name = ".ftcfg.mission_cfg.mission_target1"
+MISSION_CFG_MISSION_TARGET1_FIELD.number = 6
+MISSION_CFG_MISSION_TARGET1_FIELD.index = 5
+MISSION_CFG_MISSION_TARGET1_FIELD.label = 2
+MISSION_CFG_MISSION_TARGET1_FIELD.has_default_value = false
+MISSION_CFG_MISSION_TARGET1_FIELD.default_value = 0
+MISSION_CFG_MISSION_TARGET1_FIELD.type = 5
+MISSION_CFG_MISSION_TARGET1_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_TARGET2_FIELD.name = "mission_target2"
+MISSION_CFG_MISSION_TARGET2_FIELD.full_name = ".ftcfg.mission_cfg.mission_target2"
+MISSION_CFG_MISSION_TARGET2_FIELD.number = 7
+MISSION_CFG_MISSION_TARGET2_FIELD.index = 6
+MISSION_CFG_MISSION_TARGET2_FIELD.label = 2
+MISSION_CFG_MISSION_TARGET2_FIELD.has_default_value = false
+MISSION_CFG_MISSION_TARGET2_FIELD.default_value = 0
+MISSION_CFG_MISSION_TARGET2_FIELD.type = 5
+MISSION_CFG_MISSION_TARGET2_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_TARGET3_FIELD.name = "mission_target3"
+MISSION_CFG_MISSION_TARGET3_FIELD.full_name = ".ftcfg.mission_cfg.mission_target3"
+MISSION_CFG_MISSION_TARGET3_FIELD.number = 8
+MISSION_CFG_MISSION_TARGET3_FIELD.index = 7
+MISSION_CFG_MISSION_TARGET3_FIELD.label = 2
+MISSION_CFG_MISSION_TARGET3_FIELD.has_default_value = false
+MISSION_CFG_MISSION_TARGET3_FIELD.default_value = 0
+MISSION_CFG_MISSION_TARGET3_FIELD.type = 5
+MISSION_CFG_MISSION_TARGET3_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_TYPE_FIELD.name = "mission_type"
+MISSION_CFG_MISSION_TYPE_FIELD.full_name = ".ftcfg.mission_cfg.mission_type"
+MISSION_CFG_MISSION_TYPE_FIELD.number = 9
+MISSION_CFG_MISSION_TYPE_FIELD.index = 8
+MISSION_CFG_MISSION_TYPE_FIELD.label = 2
+MISSION_CFG_MISSION_TYPE_FIELD.has_default_value = false
+MISSION_CFG_MISSION_TYPE_FIELD.default_value = 0
+MISSION_CFG_MISSION_TYPE_FIELD.type = 5
+MISSION_CFG_MISSION_TYPE_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_TARGETTYPE_FIELD.name = "mission_targettype"
+MISSION_CFG_MISSION_TARGETTYPE_FIELD.full_name = ".ftcfg.mission_cfg.mission_targettype"
+MISSION_CFG_MISSION_TARGETTYPE_FIELD.number = 10
+MISSION_CFG_MISSION_TARGETTYPE_FIELD.index = 9
+MISSION_CFG_MISSION_TARGETTYPE_FIELD.label = 2
+MISSION_CFG_MISSION_TARGETTYPE_FIELD.has_default_value = false
+MISSION_CFG_MISSION_TARGETTYPE_FIELD.default_value = 0
+MISSION_CFG_MISSION_TARGETTYPE_FIELD.type = 5
+MISSION_CFG_MISSION_TARGETTYPE_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_OCCUPATION_FIELD.name = "mission_occupation"
+MISSION_CFG_MISSION_OCCUPATION_FIELD.full_name = ".ftcfg.mission_cfg.mission_occupation"
+MISSION_CFG_MISSION_OCCUPATION_FIELD.number = 11
+MISSION_CFG_MISSION_OCCUPATION_FIELD.index = 10
+MISSION_CFG_MISSION_OCCUPATION_FIELD.label = 3
+MISSION_CFG_MISSION_OCCUPATION_FIELD.has_default_value = false
+MISSION_CFG_MISSION_OCCUPATION_FIELD.default_value = {}
+MISSION_CFG_MISSION_OCCUPATION_FIELD.type = 5
+MISSION_CFG_MISSION_OCCUPATION_FIELD.cpp_type = 1
+
+MISSION_CFG_REPEAT_WHETHER_FIELD.name = "repeat_whether"
+MISSION_CFG_REPEAT_WHETHER_FIELD.full_name = ".ftcfg.mission_cfg.repeat_whether"
+MISSION_CFG_REPEAT_WHETHER_FIELD.number = 12
+MISSION_CFG_REPEAT_WHETHER_FIELD.index = 11
+MISSION_CFG_REPEAT_WHETHER_FIELD.label = 2
+MISSION_CFG_REPEAT_WHETHER_FIELD.has_default_value = false
+MISSION_CFG_REPEAT_WHETHER_FIELD.default_value = 0
+MISSION_CFG_REPEAT_WHETHER_FIELD.type = 5
+MISSION_CFG_REPEAT_WHETHER_FIELD.cpp_type = 1
+
+MISSION_CFG_DIRECTACCE_WHETHER_FIELD.name = "directacce_whether"
+MISSION_CFG_DIRECTACCE_WHETHER_FIELD.full_name = ".ftcfg.mission_cfg.directacce_whether"
+MISSION_CFG_DIRECTACCE_WHETHER_FIELD.number = 13
+MISSION_CFG_DIRECTACCE_WHETHER_FIELD.index = 12
+MISSION_CFG_DIRECTACCE_WHETHER_FIELD.label = 2
+MISSION_CFG_DIRECTACCE_WHETHER_FIELD.has_default_value = false
+MISSION_CFG_DIRECTACCE_WHETHER_FIELD.default_value = 0
+MISSION_CFG_DIRECTACCE_WHETHER_FIELD.type = 5
+MISSION_CFG_DIRECTACCE_WHETHER_FIELD.cpp_type = 1
+
+MISSION_CFG_AUTO_WHETHER_FIELD.name = "auto_whether"
+MISSION_CFG_AUTO_WHETHER_FIELD.full_name = ".ftcfg.mission_cfg.auto_whether"
+MISSION_CFG_AUTO_WHETHER_FIELD.number = 14
+MISSION_CFG_AUTO_WHETHER_FIELD.index = 13
+MISSION_CFG_AUTO_WHETHER_FIELD.label = 2
+MISSION_CFG_AUTO_WHETHER_FIELD.has_default_value = false
+MISSION_CFG_AUTO_WHETHER_FIELD.default_value = 0
+MISSION_CFG_AUTO_WHETHER_FIELD.type = 5
+MISSION_CFG_AUTO_WHETHER_FIELD.cpp_type = 1
+
+MISSION_CFG_AUTO_COMMIT_FIELD.name = "auto_commit"
+MISSION_CFG_AUTO_COMMIT_FIELD.full_name = ".ftcfg.mission_cfg.auto_commit"
+MISSION_CFG_AUTO_COMMIT_FIELD.number = 15
+MISSION_CFG_AUTO_COMMIT_FIELD.index = 14
+MISSION_CFG_AUTO_COMMIT_FIELD.label = 2
+MISSION_CFG_AUTO_COMMIT_FIELD.has_default_value = false
+MISSION_CFG_AUTO_COMMIT_FIELD.default_value = 0
+MISSION_CFG_AUTO_COMMIT_FIELD.type = 5
+MISSION_CFG_AUTO_COMMIT_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_FRONTID_FIELD.name = "mission_frontid"
+MISSION_CFG_MISSION_FRONTID_FIELD.full_name = ".ftcfg.mission_cfg.mission_frontid"
+MISSION_CFG_MISSION_FRONTID_FIELD.number = 16
+MISSION_CFG_MISSION_FRONTID_FIELD.index = 15
+MISSION_CFG_MISSION_FRONTID_FIELD.label = 2
+MISSION_CFG_MISSION_FRONTID_FIELD.has_default_value = false
+MISSION_CFG_MISSION_FRONTID_FIELD.default_value = 0
+MISSION_CFG_MISSION_FRONTID_FIELD.type = 5
+MISSION_CFG_MISSION_FRONTID_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_TRIGGERLV_FIELD.name = "mission_triggerlv"
+MISSION_CFG_MISSION_TRIGGERLV_FIELD.full_name = ".ftcfg.mission_cfg.mission_triggerlv"
+MISSION_CFG_MISSION_TRIGGERLV_FIELD.number = 17
+MISSION_CFG_MISSION_TRIGGERLV_FIELD.index = 16
+MISSION_CFG_MISSION_TRIGGERLV_FIELD.label = 2
+MISSION_CFG_MISSION_TRIGGERLV_FIELD.has_default_value = false
+MISSION_CFG_MISSION_TRIGGERLV_FIELD.default_value = 0
+MISSION_CFG_MISSION_TRIGGERLV_FIELD.type = 5
+MISSION_CFG_MISSION_TRIGGERLV_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_GIVEUP_FIELD.name = "mission_giveup"
+MISSION_CFG_MISSION_GIVEUP_FIELD.full_name = ".ftcfg.mission_cfg.mission_giveup"
+MISSION_CFG_MISSION_GIVEUP_FIELD.number = 18
+MISSION_CFG_MISSION_GIVEUP_FIELD.index = 17
+MISSION_CFG_MISSION_GIVEUP_FIELD.label = 2
+MISSION_CFG_MISSION_GIVEUP_FIELD.has_default_value = false
+MISSION_CFG_MISSION_GIVEUP_FIELD.default_value = 0
+MISSION_CFG_MISSION_GIVEUP_FIELD.type = 5
+MISSION_CFG_MISSION_GIVEUP_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSIONNODE_LIST_FIELD.name = "missionnode_list"
+MISSION_CFG_MISSIONNODE_LIST_FIELD.full_name = ".ftcfg.mission_cfg.missionnode_list"
+MISSION_CFG_MISSIONNODE_LIST_FIELD.number = 19
+MISSION_CFG_MISSIONNODE_LIST_FIELD.index = 18
+MISSION_CFG_MISSIONNODE_LIST_FIELD.label = 3
+MISSION_CFG_MISSIONNODE_LIST_FIELD.has_default_value = false
+MISSION_CFG_MISSIONNODE_LIST_FIELD.default_value = {}
+MISSION_CFG_MISSIONNODE_LIST_FIELD.type = 5
+MISSION_CFG_MISSIONNODE_LIST_FIELD.cpp_type = 1
+
+MISSION_CFG_DAILY_TIMES_FIELD.name = "daily_times"
+MISSION_CFG_DAILY_TIMES_FIELD.full_name = ".ftcfg.mission_cfg.daily_times"
+MISSION_CFG_DAILY_TIMES_FIELD.number = 20
+MISSION_CFG_DAILY_TIMES_FIELD.index = 19
+MISSION_CFG_DAILY_TIMES_FIELD.label = 2
+MISSION_CFG_DAILY_TIMES_FIELD.has_default_value = false
+MISSION_CFG_DAILY_TIMES_FIELD.default_value = 0
+MISSION_CFG_DAILY_TIMES_FIELD.type = 5
+MISSION_CFG_DAILY_TIMES_FIELD.cpp_type = 1
+
+MISSION_CFG_RESET_TIME_FIELD.name = "reset_time"
+MISSION_CFG_RESET_TIME_FIELD.full_name = ".ftcfg.mission_cfg.reset_time"
+MISSION_CFG_RESET_TIME_FIELD.number = 21
+MISSION_CFG_RESET_TIME_FIELD.index = 20
+MISSION_CFG_RESET_TIME_FIELD.label = 2
+MISSION_CFG_RESET_TIME_FIELD.has_default_value = false
+MISSION_CFG_RESET_TIME_FIELD.default_value = 0
+MISSION_CFG_RESET_TIME_FIELD.type = 5
+MISSION_CFG_RESET_TIME_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_DURATION_FIELD.name = "mission_duration"
+MISSION_CFG_MISSION_DURATION_FIELD.full_name = ".ftcfg.mission_cfg.mission_duration"
+MISSION_CFG_MISSION_DURATION_FIELD.number = 22
+MISSION_CFG_MISSION_DURATION_FIELD.index = 21
+MISSION_CFG_MISSION_DURATION_FIELD.label = 2
+MISSION_CFG_MISSION_DURATION_FIELD.has_default_value = false
+MISSION_CFG_MISSION_DURATION_FIELD.default_value = 0
+MISSION_CFG_MISSION_DURATION_FIELD.type = 5
+MISSION_CFG_MISSION_DURATION_FIELD.cpp_type = 1
+
+MISSION_CFG_ACCEPT_SCENEID_FIELD.name = "accept_sceneid"
+MISSION_CFG_ACCEPT_SCENEID_FIELD.full_name = ".ftcfg.mission_cfg.accept_sceneid"
+MISSION_CFG_ACCEPT_SCENEID_FIELD.number = 23
+MISSION_CFG_ACCEPT_SCENEID_FIELD.index = 22
+MISSION_CFG_ACCEPT_SCENEID_FIELD.label = 2
+MISSION_CFG_ACCEPT_SCENEID_FIELD.has_default_value = false
+MISSION_CFG_ACCEPT_SCENEID_FIELD.default_value = 0
+MISSION_CFG_ACCEPT_SCENEID_FIELD.type = 5
+MISSION_CFG_ACCEPT_SCENEID_FIELD.cpp_type = 1
+
+MISSION_CFG_ACCEPT_NPCID_FIELD.name = "accept_npcid"
+MISSION_CFG_ACCEPT_NPCID_FIELD.full_name = ".ftcfg.mission_cfg.accept_npcid"
+MISSION_CFG_ACCEPT_NPCID_FIELD.number = 24
+MISSION_CFG_ACCEPT_NPCID_FIELD.index = 23
+MISSION_CFG_ACCEPT_NPCID_FIELD.label = 2
+MISSION_CFG_ACCEPT_NPCID_FIELD.has_default_value = false
+MISSION_CFG_ACCEPT_NPCID_FIELD.default_value = 0
+MISSION_CFG_ACCEPT_NPCID_FIELD.type = 5
+MISSION_CFG_ACCEPT_NPCID_FIELD.cpp_type = 1
+
+MISSION_CFG_CONDUCT_SCENEID_FIELD.name = "conduct_sceneid"
+MISSION_CFG_CONDUCT_SCENEID_FIELD.full_name = ".ftcfg.mission_cfg.conduct_sceneid"
+MISSION_CFG_CONDUCT_SCENEID_FIELD.number = 25
+MISSION_CFG_CONDUCT_SCENEID_FIELD.index = 24
+MISSION_CFG_CONDUCT_SCENEID_FIELD.label = 2
+MISSION_CFG_CONDUCT_SCENEID_FIELD.has_default_value = false
+MISSION_CFG_CONDUCT_SCENEID_FIELD.default_value = 0
+MISSION_CFG_CONDUCT_SCENEID_FIELD.type = 5
+MISSION_CFG_CONDUCT_SCENEID_FIELD.cpp_type = 1
+
+MISSION_CFG_CONDUCT_NPCID_FIELD.name = "conduct_npcid"
+MISSION_CFG_CONDUCT_NPCID_FIELD.full_name = ".ftcfg.mission_cfg.conduct_npcid"
+MISSION_CFG_CONDUCT_NPCID_FIELD.number = 26
+MISSION_CFG_CONDUCT_NPCID_FIELD.index = 25
+MISSION_CFG_CONDUCT_NPCID_FIELD.label = 2
+MISSION_CFG_CONDUCT_NPCID_FIELD.has_default_value = false
+MISSION_CFG_CONDUCT_NPCID_FIELD.default_value = 0
+MISSION_CFG_CONDUCT_NPCID_FIELD.type = 5
+MISSION_CFG_CONDUCT_NPCID_FIELD.cpp_type = 1
+
+MISSION_CFG_SUBMIT_SCENEID_FIELD.name = "submit_sceneid"
+MISSION_CFG_SUBMIT_SCENEID_FIELD.full_name = ".ftcfg.mission_cfg.submit_sceneid"
+MISSION_CFG_SUBMIT_SCENEID_FIELD.number = 27
+MISSION_CFG_SUBMIT_SCENEID_FIELD.index = 26
+MISSION_CFG_SUBMIT_SCENEID_FIELD.label = 2
+MISSION_CFG_SUBMIT_SCENEID_FIELD.has_default_value = false
+MISSION_CFG_SUBMIT_SCENEID_FIELD.default_value = 0
+MISSION_CFG_SUBMIT_SCENEID_FIELD.type = 5
+MISSION_CFG_SUBMIT_SCENEID_FIELD.cpp_type = 1
+
+MISSION_CFG_SUBMIT_NPCID_FIELD.name = "submit_npcid"
+MISSION_CFG_SUBMIT_NPCID_FIELD.full_name = ".ftcfg.mission_cfg.submit_npcid"
+MISSION_CFG_SUBMIT_NPCID_FIELD.number = 28
+MISSION_CFG_SUBMIT_NPCID_FIELD.index = 27
+MISSION_CFG_SUBMIT_NPCID_FIELD.label = 2
+MISSION_CFG_SUBMIT_NPCID_FIELD.has_default_value = false
+MISSION_CFG_SUBMIT_NPCID_FIELD.default_value = 0
+MISSION_CFG_SUBMIT_NPCID_FIELD.type = 5
+MISSION_CFG_SUBMIT_NPCID_FIELD.cpp_type = 1
+
+MISSION_CFG_ACCEPTSEAT_PLOTID_FIELD.name = "acceptseat_plotid"
+MISSION_CFG_ACCEPTSEAT_PLOTID_FIELD.full_name = ".ftcfg.mission_cfg.acceptseat_plotid"
+MISSION_CFG_ACCEPTSEAT_PLOTID_FIELD.number = 29
+MISSION_CFG_ACCEPTSEAT_PLOTID_FIELD.index = 28
+MISSION_CFG_ACCEPTSEAT_PLOTID_FIELD.label = 2
+MISSION_CFG_ACCEPTSEAT_PLOTID_FIELD.has_default_value = false
+MISSION_CFG_ACCEPTSEAT_PLOTID_FIELD.default_value = 0
+MISSION_CFG_ACCEPTSEAT_PLOTID_FIELD.type = 5
+MISSION_CFG_ACCEPTSEAT_PLOTID_FIELD.cpp_type = 1
+
+MISSION_CFG_CONDUCTSEAT_PLOTID_FIELD.name = "conductseat_plotid"
+MISSION_CFG_CONDUCTSEAT_PLOTID_FIELD.full_name = ".ftcfg.mission_cfg.conductseat_plotid"
+MISSION_CFG_CONDUCTSEAT_PLOTID_FIELD.number = 30
+MISSION_CFG_CONDUCTSEAT_PLOTID_FIELD.index = 29
+MISSION_CFG_CONDUCTSEAT_PLOTID_FIELD.label = 2
+MISSION_CFG_CONDUCTSEAT_PLOTID_FIELD.has_default_value = false
+MISSION_CFG_CONDUCTSEAT_PLOTID_FIELD.default_value = 0
+MISSION_CFG_CONDUCTSEAT_PLOTID_FIELD.type = 5
+MISSION_CFG_CONDUCTSEAT_PLOTID_FIELD.cpp_type = 1
+
+MISSION_CFG_SUBMITSEAT_PLOTID_FIELD.name = "submitseat_plotid"
+MISSION_CFG_SUBMITSEAT_PLOTID_FIELD.full_name = ".ftcfg.mission_cfg.submitseat_plotid"
+MISSION_CFG_SUBMITSEAT_PLOTID_FIELD.number = 31
+MISSION_CFG_SUBMITSEAT_PLOTID_FIELD.index = 30
+MISSION_CFG_SUBMITSEAT_PLOTID_FIELD.label = 2
+MISSION_CFG_SUBMITSEAT_PLOTID_FIELD.has_default_value = false
+MISSION_CFG_SUBMITSEAT_PLOTID_FIELD.default_value = 0
+MISSION_CFG_SUBMITSEAT_PLOTID_FIELD.type = 5
+MISSION_CFG_SUBMITSEAT_PLOTID_FIELD.cpp_type = 1
+
+MISSION_CFG_KILL_NPCID_FIELD.name = "kill_npcid"
+MISSION_CFG_KILL_NPCID_FIELD.full_name = ".ftcfg.mission_cfg.kill_npcid"
+MISSION_CFG_KILL_NPCID_FIELD.number = 32
+MISSION_CFG_KILL_NPCID_FIELD.index = 31
+MISSION_CFG_KILL_NPCID_FIELD.label = 3
+MISSION_CFG_KILL_NPCID_FIELD.has_default_value = false
+MISSION_CFG_KILL_NPCID_FIELD.default_value = {}
+MISSION_CFG_KILL_NPCID_FIELD.type = 5
+MISSION_CFG_KILL_NPCID_FIELD.cpp_type = 1
+
+MISSION_CFG_KILL_NPCNUM_FIELD.name = "kill_npcnum"
+MISSION_CFG_KILL_NPCNUM_FIELD.full_name = ".ftcfg.mission_cfg.kill_npcnum"
+MISSION_CFG_KILL_NPCNUM_FIELD.number = 33
+MISSION_CFG_KILL_NPCNUM_FIELD.index = 32
+MISSION_CFG_KILL_NPCNUM_FIELD.label = 3
+MISSION_CFG_KILL_NPCNUM_FIELD.has_default_value = false
+MISSION_CFG_KILL_NPCNUM_FIELD.default_value = {}
+MISSION_CFG_KILL_NPCNUM_FIELD.type = 5
+MISSION_CFG_KILL_NPCNUM_FIELD.cpp_type = 1
+
+MISSION_CFG_KILL_NPCDROP_FIELD.name = "kill_npcdrop"
+MISSION_CFG_KILL_NPCDROP_FIELD.full_name = ".ftcfg.mission_cfg.kill_npcdrop"
+MISSION_CFG_KILL_NPCDROP_FIELD.number = 34
+MISSION_CFG_KILL_NPCDROP_FIELD.index = 33
+MISSION_CFG_KILL_NPCDROP_FIELD.label = 3
+MISSION_CFG_KILL_NPCDROP_FIELD.has_default_value = false
+MISSION_CFG_KILL_NPCDROP_FIELD.default_value = {}
+MISSION_CFG_KILL_NPCDROP_FIELD.type = 5
+MISSION_CFG_KILL_NPCDROP_FIELD.cpp_type = 1
+
+MISSION_CFG_TALK_PLOTID_FIELD.name = "talk_plotid"
+MISSION_CFG_TALK_PLOTID_FIELD.full_name = ".ftcfg.mission_cfg.talk_plotid"
+MISSION_CFG_TALK_PLOTID_FIELD.number = 35
+MISSION_CFG_TALK_PLOTID_FIELD.index = 34
+MISSION_CFG_TALK_PLOTID_FIELD.label = 2
+MISSION_CFG_TALK_PLOTID_FIELD.has_default_value = false
+MISSION_CFG_TALK_PLOTID_FIELD.default_value = 0
+MISSION_CFG_TALK_PLOTID_FIELD.type = 5
+MISSION_CFG_TALK_PLOTID_FIELD.cpp_type = 1
+
+MISSION_CFG_COLLECT_ITEMID_FIELD.name = "collect_itemid"
+MISSION_CFG_COLLECT_ITEMID_FIELD.full_name = ".ftcfg.mission_cfg.collect_itemid"
+MISSION_CFG_COLLECT_ITEMID_FIELD.number = 36
+MISSION_CFG_COLLECT_ITEMID_FIELD.index = 35
+MISSION_CFG_COLLECT_ITEMID_FIELD.label = 3
+MISSION_CFG_COLLECT_ITEMID_FIELD.has_default_value = false
+MISSION_CFG_COLLECT_ITEMID_FIELD.default_value = {}
+MISSION_CFG_COLLECT_ITEMID_FIELD.type = 5
+MISSION_CFG_COLLECT_ITEMID_FIELD.cpp_type = 1
+
+MISSION_CFG_COLLECT_ITEMNUM_FIELD.name = "collect_itemnum"
+MISSION_CFG_COLLECT_ITEMNUM_FIELD.full_name = ".ftcfg.mission_cfg.collect_itemnum"
+MISSION_CFG_COLLECT_ITEMNUM_FIELD.number = 37
+MISSION_CFG_COLLECT_ITEMNUM_FIELD.index = 36
+MISSION_CFG_COLLECT_ITEMNUM_FIELD.label = 3
+MISSION_CFG_COLLECT_ITEMNUM_FIELD.has_default_value = false
+MISSION_CFG_COLLECT_ITEMNUM_FIELD.default_value = {}
+MISSION_CFG_COLLECT_ITEMNUM_FIELD.type = 5
+MISSION_CFG_COLLECT_ITEMNUM_FIELD.cpp_type = 1
+
+MISSION_CFG_SCENE_ID_FIELD.name = "scene_id"
+MISSION_CFG_SCENE_ID_FIELD.full_name = ".ftcfg.mission_cfg.scene_id"
+MISSION_CFG_SCENE_ID_FIELD.number = 38
+MISSION_CFG_SCENE_ID_FIELD.index = 37
+MISSION_CFG_SCENE_ID_FIELD.label = 2
+MISSION_CFG_SCENE_ID_FIELD.has_default_value = false
+MISSION_CFG_SCENE_ID_FIELD.default_value = 0
+MISSION_CFG_SCENE_ID_FIELD.type = 5
+MISSION_CFG_SCENE_ID_FIELD.cpp_type = 1
+
+MISSION_CFG_POS_X_FIELD.name = "pos_x"
+MISSION_CFG_POS_X_FIELD.full_name = ".ftcfg.mission_cfg.pos_x"
+MISSION_CFG_POS_X_FIELD.number = 39
+MISSION_CFG_POS_X_FIELD.index = 38
+MISSION_CFG_POS_X_FIELD.label = 2
+MISSION_CFG_POS_X_FIELD.has_default_value = false
+MISSION_CFG_POS_X_FIELD.default_value = 0
+MISSION_CFG_POS_X_FIELD.type = 5
+MISSION_CFG_POS_X_FIELD.cpp_type = 1
+
+MISSION_CFG_POS_Z_FIELD.name = "pos_z"
+MISSION_CFG_POS_Z_FIELD.full_name = ".ftcfg.mission_cfg.pos_z"
+MISSION_CFG_POS_Z_FIELD.number = 40
+MISSION_CFG_POS_Z_FIELD.index = 39
+MISSION_CFG_POS_Z_FIELD.label = 2
+MISSION_CFG_POS_Z_FIELD.has_default_value = false
+MISSION_CFG_POS_Z_FIELD.default_value = 0
+MISSION_CFG_POS_Z_FIELD.type = 5
+MISSION_CFG_POS_Z_FIELD.cpp_type = 1
+
+MISSION_CFG_COLLECTION_NPCID_FIELD.name = "collection_npcid"
+MISSION_CFG_COLLECTION_NPCID_FIELD.full_name = ".ftcfg.mission_cfg.collection_npcid"
+MISSION_CFG_COLLECTION_NPCID_FIELD.number = 41
+MISSION_CFG_COLLECTION_NPCID_FIELD.index = 40
+MISSION_CFG_COLLECTION_NPCID_FIELD.label = 3
+MISSION_CFG_COLLECTION_NPCID_FIELD.has_default_value = false
+MISSION_CFG_COLLECTION_NPCID_FIELD.default_value = {}
+MISSION_CFG_COLLECTION_NPCID_FIELD.type = 5
+MISSION_CFG_COLLECTION_NPCID_FIELD.cpp_type = 1
+
+MISSION_CFG_COLLECTION_NPCNUM_FIELD.name = "collection_npcnum"
+MISSION_CFG_COLLECTION_NPCNUM_FIELD.full_name = ".ftcfg.mission_cfg.collection_npcnum"
+MISSION_CFG_COLLECTION_NPCNUM_FIELD.number = 42
+MISSION_CFG_COLLECTION_NPCNUM_FIELD.index = 41
+MISSION_CFG_COLLECTION_NPCNUM_FIELD.label = 3
+MISSION_CFG_COLLECTION_NPCNUM_FIELD.has_default_value = false
+MISSION_CFG_COLLECTION_NPCNUM_FIELD.default_value = {}
+MISSION_CFG_COLLECTION_NPCNUM_FIELD.type = 5
+MISSION_CFG_COLLECTION_NPCNUM_FIELD.cpp_type = 1
+
+MISSION_CFG_USED_ITEMID_FIELD.name = "used_itemid"
+MISSION_CFG_USED_ITEMID_FIELD.full_name = ".ftcfg.mission_cfg.used_itemid"
+MISSION_CFG_USED_ITEMID_FIELD.number = 43
+MISSION_CFG_USED_ITEMID_FIELD.index = 42
+MISSION_CFG_USED_ITEMID_FIELD.label = 2
+MISSION_CFG_USED_ITEMID_FIELD.has_default_value = false
+MISSION_CFG_USED_ITEMID_FIELD.default_value = 0
+MISSION_CFG_USED_ITEMID_FIELD.type = 5
+MISSION_CFG_USED_ITEMID_FIELD.cpp_type = 1
+
+MISSION_CFG_INTO_BATTLEID_FIELD.name = "into_battleid"
+MISSION_CFG_INTO_BATTLEID_FIELD.full_name = ".ftcfg.mission_cfg.into_battleid"
+MISSION_CFG_INTO_BATTLEID_FIELD.number = 44
+MISSION_CFG_INTO_BATTLEID_FIELD.index = 43
+MISSION_CFG_INTO_BATTLEID_FIELD.label = 2
+MISSION_CFG_INTO_BATTLEID_FIELD.has_default_value = false
+MISSION_CFG_INTO_BATTLEID_FIELD.default_value = 0
+MISSION_CFG_INTO_BATTLEID_FIELD.type = 5
+MISSION_CFG_INTO_BATTLEID_FIELD.cpp_type = 1
+
+MISSION_CFG_TARGET_GRADE_FIELD.name = "target_grade"
+MISSION_CFG_TARGET_GRADE_FIELD.full_name = ".ftcfg.mission_cfg.target_grade"
+MISSION_CFG_TARGET_GRADE_FIELD.number = 45
+MISSION_CFG_TARGET_GRADE_FIELD.index = 44
+MISSION_CFG_TARGET_GRADE_FIELD.label = 2
+MISSION_CFG_TARGET_GRADE_FIELD.has_default_value = false
+MISSION_CFG_TARGET_GRADE_FIELD.default_value = 0
+MISSION_CFG_TARGET_GRADE_FIELD.type = 5
+MISSION_CFG_TARGET_GRADE_FIELD.cpp_type = 1
+
+MISSION_CFG_FUNCTION_SCRIPT_FIELD.name = "function_script"
+MISSION_CFG_FUNCTION_SCRIPT_FIELD.full_name = ".ftcfg.mission_cfg.function_script"
+MISSION_CFG_FUNCTION_SCRIPT_FIELD.number = 46
+MISSION_CFG_FUNCTION_SCRIPT_FIELD.index = 45
+MISSION_CFG_FUNCTION_SCRIPT_FIELD.label = 2
+MISSION_CFG_FUNCTION_SCRIPT_FIELD.has_default_value = false
+MISSION_CFG_FUNCTION_SCRIPT_FIELD.default_value = ""
+MISSION_CFG_FUNCTION_SCRIPT_FIELD.type = 9
+MISSION_CFG_FUNCTION_SCRIPT_FIELD.cpp_type = 9
+
+MISSION_CFG_ACCEPT_PLOTID_FIELD.name = "accept_plotid"
+MISSION_CFG_ACCEPT_PLOTID_FIELD.full_name = ".ftcfg.mission_cfg.accept_plotid"
+MISSION_CFG_ACCEPT_PLOTID_FIELD.number = 47
+MISSION_CFG_ACCEPT_PLOTID_FIELD.index = 46
+MISSION_CFG_ACCEPT_PLOTID_FIELD.label = 2
+MISSION_CFG_ACCEPT_PLOTID_FIELD.has_default_value = false
+MISSION_CFG_ACCEPT_PLOTID_FIELD.default_value = 0
+MISSION_CFG_ACCEPT_PLOTID_FIELD.type = 5
+MISSION_CFG_ACCEPT_PLOTID_FIELD.cpp_type = 1
+
+MISSION_CFG_CONDUCT_PLOTID_FIELD.name = "conduct_plotid"
+MISSION_CFG_CONDUCT_PLOTID_FIELD.full_name = ".ftcfg.mission_cfg.conduct_plotid"
+MISSION_CFG_CONDUCT_PLOTID_FIELD.number = 48
+MISSION_CFG_CONDUCT_PLOTID_FIELD.index = 47
+MISSION_CFG_CONDUCT_PLOTID_FIELD.label = 2
+MISSION_CFG_CONDUCT_PLOTID_FIELD.has_default_value = false
+MISSION_CFG_CONDUCT_PLOTID_FIELD.default_value = 0
+MISSION_CFG_CONDUCT_PLOTID_FIELD.type = 5
+MISSION_CFG_CONDUCT_PLOTID_FIELD.cpp_type = 1
+
+MISSION_CFG_SUBMIT_PLOTID_FIELD.name = "submit_plotid"
+MISSION_CFG_SUBMIT_PLOTID_FIELD.full_name = ".ftcfg.mission_cfg.submit_plotid"
+MISSION_CFG_SUBMIT_PLOTID_FIELD.number = 49
+MISSION_CFG_SUBMIT_PLOTID_FIELD.index = 48
+MISSION_CFG_SUBMIT_PLOTID_FIELD.label = 2
+MISSION_CFG_SUBMIT_PLOTID_FIELD.has_default_value = false
+MISSION_CFG_SUBMIT_PLOTID_FIELD.default_value = 0
+MISSION_CFG_SUBMIT_PLOTID_FIELD.type = 5
+MISSION_CFG_SUBMIT_PLOTID_FIELD.cpp_type = 1
+
+MISSION_CFG_TRIGGER_BLUR_FIELD.name = "trigger_blur"
+MISSION_CFG_TRIGGER_BLUR_FIELD.full_name = ".ftcfg.mission_cfg.trigger_blur"
+MISSION_CFG_TRIGGER_BLUR_FIELD.number = 50
+MISSION_CFG_TRIGGER_BLUR_FIELD.index = 49
+MISSION_CFG_TRIGGER_BLUR_FIELD.label = 2
+MISSION_CFG_TRIGGER_BLUR_FIELD.has_default_value = false
+MISSION_CFG_TRIGGER_BLUR_FIELD.default_value = 0
+MISSION_CFG_TRIGGER_BLUR_FIELD.type = 5
+MISSION_CFG_TRIGGER_BLUR_FIELD.cpp_type = 1
+
+MISSION_CFG_ACCEPT_BLUR_FIELD.name = "accept_blur"
+MISSION_CFG_ACCEPT_BLUR_FIELD.full_name = ".ftcfg.mission_cfg.accept_blur"
+MISSION_CFG_ACCEPT_BLUR_FIELD.number = 51
+MISSION_CFG_ACCEPT_BLUR_FIELD.index = 50
+MISSION_CFG_ACCEPT_BLUR_FIELD.label = 2
+MISSION_CFG_ACCEPT_BLUR_FIELD.has_default_value = false
+MISSION_CFG_ACCEPT_BLUR_FIELD.default_value = 0
+MISSION_CFG_ACCEPT_BLUR_FIELD.type = 5
+MISSION_CFG_ACCEPT_BLUR_FIELD.cpp_type = 1
+
+MISSION_CFG_CONDUCT_BLUR_FIELD.name = "conduct_blur"
+MISSION_CFG_CONDUCT_BLUR_FIELD.full_name = ".ftcfg.mission_cfg.conduct_blur"
+MISSION_CFG_CONDUCT_BLUR_FIELD.number = 52
+MISSION_CFG_CONDUCT_BLUR_FIELD.index = 51
+MISSION_CFG_CONDUCT_BLUR_FIELD.label = 2
+MISSION_CFG_CONDUCT_BLUR_FIELD.has_default_value = false
+MISSION_CFG_CONDUCT_BLUR_FIELD.default_value = 0
+MISSION_CFG_CONDUCT_BLUR_FIELD.type = 5
+MISSION_CFG_CONDUCT_BLUR_FIELD.cpp_type = 1
+
+MISSION_CFG_REWARD_ITEMID_FIELD.name = "reward_itemid"
+MISSION_CFG_REWARD_ITEMID_FIELD.full_name = ".ftcfg.mission_cfg.reward_itemid"
+MISSION_CFG_REWARD_ITEMID_FIELD.number = 53
+MISSION_CFG_REWARD_ITEMID_FIELD.index = 52
+MISSION_CFG_REWARD_ITEMID_FIELD.label = 2
+MISSION_CFG_REWARD_ITEMID_FIELD.has_default_value = false
+MISSION_CFG_REWARD_ITEMID_FIELD.default_value = 0
+MISSION_CFG_REWARD_ITEMID_FIELD.type = 5
+MISSION_CFG_REWARD_ITEMID_FIELD.cpp_type = 1
+
+MISSION_CFG_FAILED_ITEMID_FIELD.name = "failed_itemid"
+MISSION_CFG_FAILED_ITEMID_FIELD.full_name = ".ftcfg.mission_cfg.failed_itemid"
+MISSION_CFG_FAILED_ITEMID_FIELD.number = 54
+MISSION_CFG_FAILED_ITEMID_FIELD.index = 53
+MISSION_CFG_FAILED_ITEMID_FIELD.label = 2
+MISSION_CFG_FAILED_ITEMID_FIELD.has_default_value = false
+MISSION_CFG_FAILED_ITEMID_FIELD.default_value = 0
+MISSION_CFG_FAILED_ITEMID_FIELD.type = 5
+MISSION_CFG_FAILED_ITEMID_FIELD.cpp_type = 1
+
+MISSION_CFG_EXCLUSIVE4_ITEMID_FIELD.name = "exclusive4_itemid"
+MISSION_CFG_EXCLUSIVE4_ITEMID_FIELD.full_name = ".ftcfg.mission_cfg.exclusive4_itemid"
+MISSION_CFG_EXCLUSIVE4_ITEMID_FIELD.number = 55
+MISSION_CFG_EXCLUSIVE4_ITEMID_FIELD.index = 54
+MISSION_CFG_EXCLUSIVE4_ITEMID_FIELD.label = 3
+MISSION_CFG_EXCLUSIVE4_ITEMID_FIELD.has_default_value = false
+MISSION_CFG_EXCLUSIVE4_ITEMID_FIELD.default_value = {}
+MISSION_CFG_EXCLUSIVE4_ITEMID_FIELD.type = 5
+MISSION_CFG_EXCLUSIVE4_ITEMID_FIELD.cpp_type = 1
+
+MISSION_CFG_DISPLAY_WHETHER_FIELD.name = "display_whether"
+MISSION_CFG_DISPLAY_WHETHER_FIELD.full_name = ".ftcfg.mission_cfg.display_whether"
+MISSION_CFG_DISPLAY_WHETHER_FIELD.number = 56
+MISSION_CFG_DISPLAY_WHETHER_FIELD.index = 55
+MISSION_CFG_DISPLAY_WHETHER_FIELD.label = 2
+MISSION_CFG_DISPLAY_WHETHER_FIELD.has_default_value = false
+MISSION_CFG_DISPLAY_WHETHER_FIELD.default_value = 0
+MISSION_CFG_DISPLAY_WHETHER_FIELD.type = 5
+MISSION_CFG_DISPLAY_WHETHER_FIELD.cpp_type = 1
+
+MISSION_CFG_ACCEPT_DELIVERY_FIELD.name = "accept_delivery"
+MISSION_CFG_ACCEPT_DELIVERY_FIELD.full_name = ".ftcfg.mission_cfg.accept_delivery"
+MISSION_CFG_ACCEPT_DELIVERY_FIELD.number = 57
+MISSION_CFG_ACCEPT_DELIVERY_FIELD.index = 56
+MISSION_CFG_ACCEPT_DELIVERY_FIELD.label = 3
+MISSION_CFG_ACCEPT_DELIVERY_FIELD.has_default_value = false
+MISSION_CFG_ACCEPT_DELIVERY_FIELD.default_value = {}
+MISSION_CFG_ACCEPT_DELIVERY_FIELD.type = 5
+MISSION_CFG_ACCEPT_DELIVERY_FIELD.cpp_type = 1
+
+MISSION_CFG_MISSION_CONVOYS_FIELD.name = "mission_convoys"
+MISSION_CFG_MISSION_CONVOYS_FIELD.full_name = ".ftcfg.mission_cfg.mission_convoys"
+MISSION_CFG_MISSION_CONVOYS_FIELD.number = 58
+MISSION_CFG_MISSION_CONVOYS_FIELD.index = 57
+MISSION_CFG_MISSION_CONVOYS_FIELD.label = 3
+MISSION_CFG_MISSION_CONVOYS_FIELD.has_default_value = false
+MISSION_CFG_MISSION_CONVOYS_FIELD.default_value = {}
+MISSION_CFG_MISSION_CONVOYS_FIELD.type = 5
+MISSION_CFG_MISSION_CONVOYS_FIELD.cpp_type = 1
+
+MISSION_CFG_BIAOCHE_MOUNT_FIELD.name = "biaoche_mount"
+MISSION_CFG_BIAOCHE_MOUNT_FIELD.full_name = ".ftcfg.mission_cfg.biaoche_mount"
+MISSION_CFG_BIAOCHE_MOUNT_FIELD.number = 59
+MISSION_CFG_BIAOCHE_MOUNT_FIELD.index = 58
+MISSION_CFG_BIAOCHE_MOUNT_FIELD.label = 2
+MISSION_CFG_BIAOCHE_MOUNT_FIELD.has_default_value = false
+MISSION_CFG_BIAOCHE_MOUNT_FIELD.default_value = 0
+MISSION_CFG_BIAOCHE_MOUNT_FIELD.type = 5
+MISSION_CFG_BIAOCHE_MOUNT_FIELD.cpp_type = 1
+
+MISSION_CFG_SCENE_IS_COPY_FIELD.name = "scene_is_copy"
+MISSION_CFG_SCENE_IS_COPY_FIELD.full_name = ".ftcfg.mission_cfg.scene_is_copy"
+MISSION_CFG_SCENE_IS_COPY_FIELD.number = 60
+MISSION_CFG_SCENE_IS_COPY_FIELD.index = 59
+MISSION_CFG_SCENE_IS_COPY_FIELD.label = 2
+MISSION_CFG_SCENE_IS_COPY_FIELD.has_default_value = false
+MISSION_CFG_SCENE_IS_COPY_FIELD.default_value = 0
+MISSION_CFG_SCENE_IS_COPY_FIELD.type = 5
+MISSION_CFG_SCENE_IS_COPY_FIELD.cpp_type = 1
+
+MISSION_CFG_ALLOW_SHOW_FIELD.name = "allow_show"
+MISSION_CFG_ALLOW_SHOW_FIELD.full_name = ".ftcfg.mission_cfg.allow_show"
+MISSION_CFG_ALLOW_SHOW_FIELD.number = 61
+MISSION_CFG_ALLOW_SHOW_FIELD.index = 60
+MISSION_CFG_ALLOW_SHOW_FIELD.label = 2
+MISSION_CFG_ALLOW_SHOW_FIELD.has_default_value = false
+MISSION_CFG_ALLOW_SHOW_FIELD.default_value = 0
+MISSION_CFG_ALLOW_SHOW_FIELD.type = 5
+MISSION_CFG_ALLOW_SHOW_FIELD.cpp_type = 1
+
+MISSION_CFG_ACCEPTED_SHOW_FIELD.name = "accepted_show"
+MISSION_CFG_ACCEPTED_SHOW_FIELD.full_name = ".ftcfg.mission_cfg.accepted_show"
+MISSION_CFG_ACCEPTED_SHOW_FIELD.number = 62
+MISSION_CFG_ACCEPTED_SHOW_FIELD.index = 61
+MISSION_CFG_ACCEPTED_SHOW_FIELD.label = 2
+MISSION_CFG_ACCEPTED_SHOW_FIELD.has_default_value = false
+MISSION_CFG_ACCEPTED_SHOW_FIELD.default_value = 0
+MISSION_CFG_ACCEPTED_SHOW_FIELD.type = 5
+MISSION_CFG_ACCEPTED_SHOW_FIELD.cpp_type = 1
+
+MISSION_CFG_COMMIT_SHOW_FIELD.name = "commit_show"
+MISSION_CFG_COMMIT_SHOW_FIELD.full_name = ".ftcfg.mission_cfg.commit_show"
+MISSION_CFG_COMMIT_SHOW_FIELD.number = 63
+MISSION_CFG_COMMIT_SHOW_FIELD.index = 62
+MISSION_CFG_COMMIT_SHOW_FIELD.label = 2
+MISSION_CFG_COMMIT_SHOW_FIELD.has_default_value = false
+MISSION_CFG_COMMIT_SHOW_FIELD.default_value = 0
+MISSION_CFG_COMMIT_SHOW_FIELD.type = 5
+MISSION_CFG_COMMIT_SHOW_FIELD.cpp_type = 1
+
+MISSION_CFG_ACCEPTED_INEXECUTION_FIELD.name = "accepted_inexecution"
+MISSION_CFG_ACCEPTED_INEXECUTION_FIELD.full_name = ".ftcfg.mission_cfg.accepted_inexecution"
+MISSION_CFG_ACCEPTED_INEXECUTION_FIELD.number = 64
+MISSION_CFG_ACCEPTED_INEXECUTION_FIELD.index = 63
+MISSION_CFG_ACCEPTED_INEXECUTION_FIELD.label = 2
+MISSION_CFG_ACCEPTED_INEXECUTION_FIELD.has_default_value = false
+MISSION_CFG_ACCEPTED_INEXECUTION_FIELD.default_value = 0
+MISSION_CFG_ACCEPTED_INEXECUTION_FIELD.type = 5
+MISSION_CFG_ACCEPTED_INEXECUTION_FIELD.cpp_type = 1
+
+MISSION_CFG_OPEN_FUNC_FIELD.name = "open_func"
+MISSION_CFG_OPEN_FUNC_FIELD.full_name = ".ftcfg.mission_cfg.open_func"
+MISSION_CFG_OPEN_FUNC_FIELD.number = 65
+MISSION_CFG_OPEN_FUNC_FIELD.index = 64
+MISSION_CFG_OPEN_FUNC_FIELD.label = 2
+MISSION_CFG_OPEN_FUNC_FIELD.has_default_value = false
+MISSION_CFG_OPEN_FUNC_FIELD.default_value = nil
+MISSION_CFG_OPEN_FUNC_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+MISSION_CFG_OPEN_FUNC_FIELD.type = 14
+MISSION_CFG_OPEN_FUNC_FIELD.cpp_type = 8
+
+MISSION_CFG_BTN_NAME_FIELD.name = "btn_name"
+MISSION_CFG_BTN_NAME_FIELD.full_name = ".ftcfg.mission_cfg.btn_name"
+MISSION_CFG_BTN_NAME_FIELD.number = 66
+MISSION_CFG_BTN_NAME_FIELD.index = 65
+MISSION_CFG_BTN_NAME_FIELD.label = 2
+MISSION_CFG_BTN_NAME_FIELD.has_default_value = false
+MISSION_CFG_BTN_NAME_FIELD.default_value = 0
+MISSION_CFG_BTN_NAME_FIELD.type = 5
+MISSION_CFG_BTN_NAME_FIELD.cpp_type = 1
+
+MISSION_CFG_EVENT_TYPE_FIELD.name = "event_type"
+MISSION_CFG_EVENT_TYPE_FIELD.full_name = ".ftcfg.mission_cfg.event_type"
+MISSION_CFG_EVENT_TYPE_FIELD.number = 67
+MISSION_CFG_EVENT_TYPE_FIELD.index = 66
+MISSION_CFG_EVENT_TYPE_FIELD.label = 2
+MISSION_CFG_EVENT_TYPE_FIELD.has_default_value = false
+MISSION_CFG_EVENT_TYPE_FIELD.default_value = 0
+MISSION_CFG_EVENT_TYPE_FIELD.type = 5
+MISSION_CFG_EVENT_TYPE_FIELD.cpp_type = 1
+
+MISSION_CFG_KILL_PLAYER_NUM_FIELD.name = "kill_player_num"
+MISSION_CFG_KILL_PLAYER_NUM_FIELD.full_name = ".ftcfg.mission_cfg.kill_player_num"
+MISSION_CFG_KILL_PLAYER_NUM_FIELD.number = 68
+MISSION_CFG_KILL_PLAYER_NUM_FIELD.index = 67
+MISSION_CFG_KILL_PLAYER_NUM_FIELD.label = 2
+MISSION_CFG_KILL_PLAYER_NUM_FIELD.has_default_value = false
+MISSION_CFG_KILL_PLAYER_NUM_FIELD.default_value = 0
+MISSION_CFG_KILL_PLAYER_NUM_FIELD.type = 5
+MISSION_CFG_KILL_PLAYER_NUM_FIELD.cpp_type = 1
+
+MISSION_CFG_KILL_PLAYER_LEVEL_FIELD.name = "kill_player_level"
+MISSION_CFG_KILL_PLAYER_LEVEL_FIELD.full_name = ".ftcfg.mission_cfg.kill_player_level"
+MISSION_CFG_KILL_PLAYER_LEVEL_FIELD.number = 69
+MISSION_CFG_KILL_PLAYER_LEVEL_FIELD.index = 68
+MISSION_CFG_KILL_PLAYER_LEVEL_FIELD.label = 2
+MISSION_CFG_KILL_PLAYER_LEVEL_FIELD.has_default_value = false
+MISSION_CFG_KILL_PLAYER_LEVEL_FIELD.default_value = 0
+MISSION_CFG_KILL_PLAYER_LEVEL_FIELD.type = 5
+MISSION_CFG_KILL_PLAYER_LEVEL_FIELD.cpp_type = 1
+
+MISSION_CFG_KILL_PLAYER_MAP_FIELD.name = "kill_player_map"
+MISSION_CFG_KILL_PLAYER_MAP_FIELD.full_name = ".ftcfg.mission_cfg.kill_player_map"
+MISSION_CFG_KILL_PLAYER_MAP_FIELD.number = 70
+MISSION_CFG_KILL_PLAYER_MAP_FIELD.index = 69
+MISSION_CFG_KILL_PLAYER_MAP_FIELD.label = 3
+MISSION_CFG_KILL_PLAYER_MAP_FIELD.has_default_value = false
+MISSION_CFG_KILL_PLAYER_MAP_FIELD.default_value = {}
+MISSION_CFG_KILL_PLAYER_MAP_FIELD.type = 5
+MISSION_CFG_KILL_PLAYER_MAP_FIELD.cpp_type = 1
+
+MISSION_CFG_SUPPORT_PAUSE_FIELD.name = "support_pause"
+MISSION_CFG_SUPPORT_PAUSE_FIELD.full_name = ".ftcfg.mission_cfg.support_pause"
+MISSION_CFG_SUPPORT_PAUSE_FIELD.number = 71
+MISSION_CFG_SUPPORT_PAUSE_FIELD.index = 70
+MISSION_CFG_SUPPORT_PAUSE_FIELD.label = 2
+MISSION_CFG_SUPPORT_PAUSE_FIELD.has_default_value = false
+MISSION_CFG_SUPPORT_PAUSE_FIELD.default_value = 0
+MISSION_CFG_SUPPORT_PAUSE_FIELD.type = 5
+MISSION_CFG_SUPPORT_PAUSE_FIELD.cpp_type = 1
+
+MISSION_CFG_SUBMISSION_HEAD_FIELD.name = "submission_head"
+MISSION_CFG_SUBMISSION_HEAD_FIELD.full_name = ".ftcfg.mission_cfg.submission_head"
+MISSION_CFG_SUBMISSION_HEAD_FIELD.number = 72
+MISSION_CFG_SUBMISSION_HEAD_FIELD.index = 71
+MISSION_CFG_SUBMISSION_HEAD_FIELD.label = 2
+MISSION_CFG_SUBMISSION_HEAD_FIELD.has_default_value = false
+MISSION_CFG_SUBMISSION_HEAD_FIELD.default_value = 0
+MISSION_CFG_SUBMISSION_HEAD_FIELD.type = 5
+MISSION_CFG_SUBMISSION_HEAD_FIELD.cpp_type = 1
+
+MISSION_CFG_ROUTE_MARK_ID_FIELD.name = "route_mark_id"
+MISSION_CFG_ROUTE_MARK_ID_FIELD.full_name = ".ftcfg.mission_cfg.route_mark_id"
+MISSION_CFG_ROUTE_MARK_ID_FIELD.number = 73
+MISSION_CFG_ROUTE_MARK_ID_FIELD.index = 72
+MISSION_CFG_ROUTE_MARK_ID_FIELD.label = 2
+MISSION_CFG_ROUTE_MARK_ID_FIELD.has_default_value = false
+MISSION_CFG_ROUTE_MARK_ID_FIELD.default_value = 0
+MISSION_CFG_ROUTE_MARK_ID_FIELD.type = 5
+MISSION_CFG_ROUTE_MARK_ID_FIELD.cpp_type = 1
+
+MISSION_CFG.name = "mission_cfg"
+MISSION_CFG.full_name = ".ftcfg.mission_cfg"
+MISSION_CFG.nested_types = {}
+MISSION_CFG.enum_types = {}
+MISSION_CFG.fields = {MISSION_CFG_ID_FIELD, MISSION_CFG_MISSION_GROUPID_FIELD, MISSION_CFG_MISSION_COLOUR_FIELD, MISSION_CFG_MISSION_NAME_FIELD, MISSION_CFG_MISSION_TEXT_FIELD, MISSION_CFG_MISSION_TARGET1_FIELD, MISSION_CFG_MISSION_TARGET2_FIELD, MISSION_CFG_MISSION_TARGET3_FIELD, MISSION_CFG_MISSION_TYPE_FIELD, MISSION_CFG_MISSION_TARGETTYPE_FIELD, MISSION_CFG_MISSION_OCCUPATION_FIELD, MISSION_CFG_REPEAT_WHETHER_FIELD, MISSION_CFG_DIRECTACCE_WHETHER_FIELD, MISSION_CFG_AUTO_WHETHER_FIELD, MISSION_CFG_AUTO_COMMIT_FIELD, MISSION_CFG_MISSION_FRONTID_FIELD, MISSION_CFG_MISSION_TRIGGERLV_FIELD, MISSION_CFG_MISSION_GIVEUP_FIELD, MISSION_CFG_MISSIONNODE_LIST_FIELD, MISSION_CFG_DAILY_TIMES_FIELD, MISSION_CFG_RESET_TIME_FIELD, MISSION_CFG_MISSION_DURATION_FIELD, MISSION_CFG_ACCEPT_SCENEID_FIELD, MISSION_CFG_ACCEPT_NPCID_FIELD, MISSION_CFG_CONDUCT_SCENEID_FIELD, MISSION_CFG_CONDUCT_NPCID_FIELD, MISSION_CFG_SUBMIT_SCENEID_FIELD, MISSION_CFG_SUBMIT_NPCID_FIELD, MISSION_CFG_ACCEPTSEAT_PLOTID_FIELD, MISSION_CFG_CONDUCTSEAT_PLOTID_FIELD, MISSION_CFG_SUBMITSEAT_PLOTID_FIELD, MISSION_CFG_KILL_NPCID_FIELD, MISSION_CFG_KILL_NPCNUM_FIELD, MISSION_CFG_KILL_NPCDROP_FIELD, MISSION_CFG_TALK_PLOTID_FIELD, MISSION_CFG_COLLECT_ITEMID_FIELD, MISSION_CFG_COLLECT_ITEMNUM_FIELD, MISSION_CFG_SCENE_ID_FIELD, MISSION_CFG_POS_X_FIELD, MISSION_CFG_POS_Z_FIELD, MISSION_CFG_COLLECTION_NPCID_FIELD, MISSION_CFG_COLLECTION_NPCNUM_FIELD, MISSION_CFG_USED_ITEMID_FIELD, MISSION_CFG_INTO_BATTLEID_FIELD, MISSION_CFG_TARGET_GRADE_FIELD, MISSION_CFG_FUNCTION_SCRIPT_FIELD, MISSION_CFG_ACCEPT_PLOTID_FIELD, MISSION_CFG_CONDUCT_PLOTID_FIELD, MISSION_CFG_SUBMIT_PLOTID_FIELD, MISSION_CFG_TRIGGER_BLUR_FIELD, MISSION_CFG_ACCEPT_BLUR_FIELD, MISSION_CFG_CONDUCT_BLUR_FIELD, MISSION_CFG_REWARD_ITEMID_FIELD, MISSION_CFG_FAILED_ITEMID_FIELD, MISSION_CFG_EXCLUSIVE4_ITEMID_FIELD, MISSION_CFG_DISPLAY_WHETHER_FIELD, MISSION_CFG_ACCEPT_DELIVERY_FIELD, MISSION_CFG_MISSION_CONVOYS_FIELD, MISSION_CFG_BIAOCHE_MOUNT_FIELD, MISSION_CFG_SCENE_IS_COPY_FIELD, MISSION_CFG_ALLOW_SHOW_FIELD, MISSION_CFG_ACCEPTED_SHOW_FIELD, MISSION_CFG_COMMIT_SHOW_FIELD, MISSION_CFG_ACCEPTED_INEXECUTION_FIELD, MISSION_CFG_OPEN_FUNC_FIELD, MISSION_CFG_BTN_NAME_FIELD, MISSION_CFG_EVENT_TYPE_FIELD, MISSION_CFG_KILL_PLAYER_NUM_FIELD, MISSION_CFG_KILL_PLAYER_LEVEL_FIELD, MISSION_CFG_KILL_PLAYER_MAP_FIELD, MISSION_CFG_SUPPORT_PAUSE_FIELD, MISSION_CFG_SUBMISSION_HEAD_FIELD, MISSION_CFG_ROUTE_MARK_ID_FIELD}
+MISSION_CFG.is_extendable = false
+MISSION_CFG.extensions = {}
+MISSION_CFGS_ITEMS_FIELD.name = "items"
+MISSION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.mission_cfgs.items"
+MISSION_CFGS_ITEMS_FIELD.number = 1
+MISSION_CFGS_ITEMS_FIELD.index = 0
+MISSION_CFGS_ITEMS_FIELD.label = 3
+MISSION_CFGS_ITEMS_FIELD.has_default_value = false
+MISSION_CFGS_ITEMS_FIELD.default_value = {}
+MISSION_CFGS_ITEMS_FIELD.message_type = MISSION_CFG
+MISSION_CFGS_ITEMS_FIELD.type = 11
+MISSION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MISSION_CFGS.name = "mission_cfgs"
+MISSION_CFGS.full_name = ".ftcfg.mission_cfgs"
+MISSION_CFGS.nested_types = {}
+MISSION_CFGS.enum_types = {}
+MISSION_CFGS.fields = {MISSION_CFGS_ITEMS_FIELD}
+MISSION_CFGS.is_extendable = false
+MISSION_CFGS.extensions = {}
+MISSION_GROUP_CFG_ID_FIELD.name = "id"
+MISSION_GROUP_CFG_ID_FIELD.full_name = ".ftcfg.mission_group_cfg.id"
+MISSION_GROUP_CFG_ID_FIELD.number = 1
+MISSION_GROUP_CFG_ID_FIELD.index = 0
+MISSION_GROUP_CFG_ID_FIELD.label = 2
+MISSION_GROUP_CFG_ID_FIELD.has_default_value = false
+MISSION_GROUP_CFG_ID_FIELD.default_value = 0
+MISSION_GROUP_CFG_ID_FIELD.type = 5
+MISSION_GROUP_CFG_ID_FIELD.cpp_type = 1
+
+MISSION_GROUP_CFG_QUEST_GROUPNAME_FIELD.name = "quest_groupname"
+MISSION_GROUP_CFG_QUEST_GROUPNAME_FIELD.full_name = ".ftcfg.mission_group_cfg.quest_groupname"
+MISSION_GROUP_CFG_QUEST_GROUPNAME_FIELD.number = 2
+MISSION_GROUP_CFG_QUEST_GROUPNAME_FIELD.index = 1
+MISSION_GROUP_CFG_QUEST_GROUPNAME_FIELD.label = 2
+MISSION_GROUP_CFG_QUEST_GROUPNAME_FIELD.has_default_value = false
+MISSION_GROUP_CFG_QUEST_GROUPNAME_FIELD.default_value = 0
+MISSION_GROUP_CFG_QUEST_GROUPNAME_FIELD.type = 5
+MISSION_GROUP_CFG_QUEST_GROUPNAME_FIELD.cpp_type = 1
+
+MISSION_GROUP_CFG_QUEST_GROUPTIPS_FIELD.name = "quest_grouptips"
+MISSION_GROUP_CFG_QUEST_GROUPTIPS_FIELD.full_name = ".ftcfg.mission_group_cfg.quest_grouptips"
+MISSION_GROUP_CFG_QUEST_GROUPTIPS_FIELD.number = 3
+MISSION_GROUP_CFG_QUEST_GROUPTIPS_FIELD.index = 2
+MISSION_GROUP_CFG_QUEST_GROUPTIPS_FIELD.label = 2
+MISSION_GROUP_CFG_QUEST_GROUPTIPS_FIELD.has_default_value = false
+MISSION_GROUP_CFG_QUEST_GROUPTIPS_FIELD.default_value = 0
+MISSION_GROUP_CFG_QUEST_GROUPTIPS_FIELD.type = 5
+MISSION_GROUP_CFG_QUEST_GROUPTIPS_FIELD.cpp_type = 1
+
+MISSION_GROUP_CFG.name = "mission_group_cfg"
+MISSION_GROUP_CFG.full_name = ".ftcfg.mission_group_cfg"
+MISSION_GROUP_CFG.nested_types = {}
+MISSION_GROUP_CFG.enum_types = {}
+MISSION_GROUP_CFG.fields = {MISSION_GROUP_CFG_ID_FIELD, MISSION_GROUP_CFG_QUEST_GROUPNAME_FIELD, MISSION_GROUP_CFG_QUEST_GROUPTIPS_FIELD}
+MISSION_GROUP_CFG.is_extendable = false
+MISSION_GROUP_CFG.extensions = {}
+MISSION_GROUP_CFGS_ITEMS_FIELD.name = "items"
+MISSION_GROUP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.mission_group_cfgs.items"
+MISSION_GROUP_CFGS_ITEMS_FIELD.number = 1
+MISSION_GROUP_CFGS_ITEMS_FIELD.index = 0
+MISSION_GROUP_CFGS_ITEMS_FIELD.label = 3
+MISSION_GROUP_CFGS_ITEMS_FIELD.has_default_value = false
+MISSION_GROUP_CFGS_ITEMS_FIELD.default_value = {}
+MISSION_GROUP_CFGS_ITEMS_FIELD.message_type = MISSION_GROUP_CFG
+MISSION_GROUP_CFGS_ITEMS_FIELD.type = 11
+MISSION_GROUP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MISSION_GROUP_CFGS.name = "mission_group_cfgs"
+MISSION_GROUP_CFGS.full_name = ".ftcfg.mission_group_cfgs"
+MISSION_GROUP_CFGS.nested_types = {}
+MISSION_GROUP_CFGS.enum_types = {}
+MISSION_GROUP_CFGS.fields = {MISSION_GROUP_CFGS_ITEMS_FIELD}
+MISSION_GROUP_CFGS.is_extendable = false
+MISSION_GROUP_CFGS.extensions = {}
+NPC_SPAWN_METHOD_CFG_ID_FIELD.name = "id"
+NPC_SPAWN_METHOD_CFG_ID_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.id"
+NPC_SPAWN_METHOD_CFG_ID_FIELD.number = 1
+NPC_SPAWN_METHOD_CFG_ID_FIELD.index = 0
+NPC_SPAWN_METHOD_CFG_ID_FIELD.label = 2
+NPC_SPAWN_METHOD_CFG_ID_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_ID_FIELD.default_value = 0
+NPC_SPAWN_METHOD_CFG_ID_FIELD.type = 5
+NPC_SPAWN_METHOD_CFG_ID_FIELD.cpp_type = 1
+
+NPC_SPAWN_METHOD_CFG_GROUP_ID_FIELD.name = "group_id"
+NPC_SPAWN_METHOD_CFG_GROUP_ID_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.group_id"
+NPC_SPAWN_METHOD_CFG_GROUP_ID_FIELD.number = 2
+NPC_SPAWN_METHOD_CFG_GROUP_ID_FIELD.index = 1
+NPC_SPAWN_METHOD_CFG_GROUP_ID_FIELD.label = 2
+NPC_SPAWN_METHOD_CFG_GROUP_ID_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_GROUP_ID_FIELD.default_value = 0
+NPC_SPAWN_METHOD_CFG_GROUP_ID_FIELD.type = 5
+NPC_SPAWN_METHOD_CFG_GROUP_ID_FIELD.cpp_type = 1
+
+NPC_SPAWN_METHOD_CFG_MAP_ID_FIELD.name = "map_id"
+NPC_SPAWN_METHOD_CFG_MAP_ID_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.map_id"
+NPC_SPAWN_METHOD_CFG_MAP_ID_FIELD.number = 3
+NPC_SPAWN_METHOD_CFG_MAP_ID_FIELD.index = 2
+NPC_SPAWN_METHOD_CFG_MAP_ID_FIELD.label = 2
+NPC_SPAWN_METHOD_CFG_MAP_ID_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_MAP_ID_FIELD.default_value = 0
+NPC_SPAWN_METHOD_CFG_MAP_ID_FIELD.type = 5
+NPC_SPAWN_METHOD_CFG_MAP_ID_FIELD.cpp_type = 1
+
+NPC_SPAWN_METHOD_CFG_NPC_ID_FIELD.name = "npc_id"
+NPC_SPAWN_METHOD_CFG_NPC_ID_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.npc_id"
+NPC_SPAWN_METHOD_CFG_NPC_ID_FIELD.number = 4
+NPC_SPAWN_METHOD_CFG_NPC_ID_FIELD.index = 3
+NPC_SPAWN_METHOD_CFG_NPC_ID_FIELD.label = 2
+NPC_SPAWN_METHOD_CFG_NPC_ID_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_NPC_ID_FIELD.default_value = 0
+NPC_SPAWN_METHOD_CFG_NPC_ID_FIELD.type = 5
+NPC_SPAWN_METHOD_CFG_NPC_ID_FIELD.cpp_type = 1
+
+NPC_SPAWN_METHOD_CFG_POS_X_FIELD.name = "pos_x"
+NPC_SPAWN_METHOD_CFG_POS_X_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.pos_x"
+NPC_SPAWN_METHOD_CFG_POS_X_FIELD.number = 5
+NPC_SPAWN_METHOD_CFG_POS_X_FIELD.index = 4
+NPC_SPAWN_METHOD_CFG_POS_X_FIELD.label = 2
+NPC_SPAWN_METHOD_CFG_POS_X_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_POS_X_FIELD.default_value = 0.0
+NPC_SPAWN_METHOD_CFG_POS_X_FIELD.type = 2
+NPC_SPAWN_METHOD_CFG_POS_X_FIELD.cpp_type = 6
+
+NPC_SPAWN_METHOD_CFG_POS_Y_FIELD.name = "pos_y"
+NPC_SPAWN_METHOD_CFG_POS_Y_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.pos_y"
+NPC_SPAWN_METHOD_CFG_POS_Y_FIELD.number = 6
+NPC_SPAWN_METHOD_CFG_POS_Y_FIELD.index = 5
+NPC_SPAWN_METHOD_CFG_POS_Y_FIELD.label = 2
+NPC_SPAWN_METHOD_CFG_POS_Y_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_POS_Y_FIELD.default_value = 0.0
+NPC_SPAWN_METHOD_CFG_POS_Y_FIELD.type = 2
+NPC_SPAWN_METHOD_CFG_POS_Y_FIELD.cpp_type = 6
+
+NPC_SPAWN_METHOD_CFG_POS_Z_FIELD.name = "pos_z"
+NPC_SPAWN_METHOD_CFG_POS_Z_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.pos_z"
+NPC_SPAWN_METHOD_CFG_POS_Z_FIELD.number = 7
+NPC_SPAWN_METHOD_CFG_POS_Z_FIELD.index = 6
+NPC_SPAWN_METHOD_CFG_POS_Z_FIELD.label = 2
+NPC_SPAWN_METHOD_CFG_POS_Z_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_POS_Z_FIELD.default_value = 0.0
+NPC_SPAWN_METHOD_CFG_POS_Z_FIELD.type = 2
+NPC_SPAWN_METHOD_CFG_POS_Z_FIELD.cpp_type = 6
+
+NPC_SPAWN_METHOD_CFG_ORIENTATION_FIELD.name = "orientation"
+NPC_SPAWN_METHOD_CFG_ORIENTATION_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.orientation"
+NPC_SPAWN_METHOD_CFG_ORIENTATION_FIELD.number = 8
+NPC_SPAWN_METHOD_CFG_ORIENTATION_FIELD.index = 7
+NPC_SPAWN_METHOD_CFG_ORIENTATION_FIELD.label = 2
+NPC_SPAWN_METHOD_CFG_ORIENTATION_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_ORIENTATION_FIELD.default_value = 0.0
+NPC_SPAWN_METHOD_CFG_ORIENTATION_FIELD.type = 2
+NPC_SPAWN_METHOD_CFG_ORIENTATION_FIELD.cpp_type = 6
+
+NPC_SPAWN_METHOD_CFG_RELIVE_TYPE_FIELD.name = "relive_type"
+NPC_SPAWN_METHOD_CFG_RELIVE_TYPE_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.relive_type"
+NPC_SPAWN_METHOD_CFG_RELIVE_TYPE_FIELD.number = 9
+NPC_SPAWN_METHOD_CFG_RELIVE_TYPE_FIELD.index = 8
+NPC_SPAWN_METHOD_CFG_RELIVE_TYPE_FIELD.label = 2
+NPC_SPAWN_METHOD_CFG_RELIVE_TYPE_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_RELIVE_TYPE_FIELD.default_value = 0
+NPC_SPAWN_METHOD_CFG_RELIVE_TYPE_FIELD.type = 5
+NPC_SPAWN_METHOD_CFG_RELIVE_TYPE_FIELD.cpp_type = 1
+
+NPC_SPAWN_METHOD_CFG_RELIVE_TIME_FIELD.name = "relive_time"
+NPC_SPAWN_METHOD_CFG_RELIVE_TIME_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.relive_time"
+NPC_SPAWN_METHOD_CFG_RELIVE_TIME_FIELD.number = 10
+NPC_SPAWN_METHOD_CFG_RELIVE_TIME_FIELD.index = 9
+NPC_SPAWN_METHOD_CFG_RELIVE_TIME_FIELD.label = 2
+NPC_SPAWN_METHOD_CFG_RELIVE_TIME_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_RELIVE_TIME_FIELD.default_value = 0
+NPC_SPAWN_METHOD_CFG_RELIVE_TIME_FIELD.type = 5
+NPC_SPAWN_METHOD_CFG_RELIVE_TIME_FIELD.cpp_type = 1
+
+NPC_SPAWN_METHOD_CFG_SERVICE_LIST_FIELD.name = "service_list"
+NPC_SPAWN_METHOD_CFG_SERVICE_LIST_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.service_list"
+NPC_SPAWN_METHOD_CFG_SERVICE_LIST_FIELD.number = 11
+NPC_SPAWN_METHOD_CFG_SERVICE_LIST_FIELD.index = 10
+NPC_SPAWN_METHOD_CFG_SERVICE_LIST_FIELD.label = 3
+NPC_SPAWN_METHOD_CFG_SERVICE_LIST_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_SERVICE_LIST_FIELD.default_value = {}
+NPC_SPAWN_METHOD_CFG_SERVICE_LIST_FIELD.type = 5
+NPC_SPAWN_METHOD_CFG_SERVICE_LIST_FIELD.cpp_type = 1
+
+NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD.name = "npc_type"
+NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.npc_type"
+NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD.number = 12
+NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD.index = 11
+NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD.label = 2
+NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD.default_value = nil
+NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD.enum_type = config_predefine_pb.EENTITYTYPE
+NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD.type = 14
+NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD.cpp_type = 8
+
+NPC_SPAWN_METHOD_CFG_MISSION_IDS_FIELD.name = "mission_ids"
+NPC_SPAWN_METHOD_CFG_MISSION_IDS_FIELD.full_name = ".ftcfg.npc_spawn_method_cfg.mission_ids"
+NPC_SPAWN_METHOD_CFG_MISSION_IDS_FIELD.number = 13
+NPC_SPAWN_METHOD_CFG_MISSION_IDS_FIELD.index = 12
+NPC_SPAWN_METHOD_CFG_MISSION_IDS_FIELD.label = 3
+NPC_SPAWN_METHOD_CFG_MISSION_IDS_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFG_MISSION_IDS_FIELD.default_value = {}
+NPC_SPAWN_METHOD_CFG_MISSION_IDS_FIELD.type = 5
+NPC_SPAWN_METHOD_CFG_MISSION_IDS_FIELD.cpp_type = 1
+
+NPC_SPAWN_METHOD_CFG.name = "npc_spawn_method_cfg"
+NPC_SPAWN_METHOD_CFG.full_name = ".ftcfg.npc_spawn_method_cfg"
+NPC_SPAWN_METHOD_CFG.nested_types = {}
+NPC_SPAWN_METHOD_CFG.enum_types = {}
+NPC_SPAWN_METHOD_CFG.fields = {NPC_SPAWN_METHOD_CFG_ID_FIELD, NPC_SPAWN_METHOD_CFG_GROUP_ID_FIELD, NPC_SPAWN_METHOD_CFG_MAP_ID_FIELD, NPC_SPAWN_METHOD_CFG_NPC_ID_FIELD, NPC_SPAWN_METHOD_CFG_POS_X_FIELD, NPC_SPAWN_METHOD_CFG_POS_Y_FIELD, NPC_SPAWN_METHOD_CFG_POS_Z_FIELD, NPC_SPAWN_METHOD_CFG_ORIENTATION_FIELD, NPC_SPAWN_METHOD_CFG_RELIVE_TYPE_FIELD, NPC_SPAWN_METHOD_CFG_RELIVE_TIME_FIELD, NPC_SPAWN_METHOD_CFG_SERVICE_LIST_FIELD, NPC_SPAWN_METHOD_CFG_NPC_TYPE_FIELD, NPC_SPAWN_METHOD_CFG_MISSION_IDS_FIELD}
+NPC_SPAWN_METHOD_CFG.is_extendable = false
+NPC_SPAWN_METHOD_CFG.extensions = {}
+NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD.name = "items"
+NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD.full_name = ".ftcfg.npc_spawn_method_cfgs.items"
+NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD.number = 1
+NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD.index = 0
+NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD.label = 3
+NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD.has_default_value = false
+NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD.default_value = {}
+NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD.message_type = NPC_SPAWN_METHOD_CFG
+NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD.type = 11
+NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD.cpp_type = 10
+
+NPC_SPAWN_METHOD_CFGS.name = "npc_spawn_method_cfgs"
+NPC_SPAWN_METHOD_CFGS.full_name = ".ftcfg.npc_spawn_method_cfgs"
+NPC_SPAWN_METHOD_CFGS.nested_types = {}
+NPC_SPAWN_METHOD_CFGS.enum_types = {}
+NPC_SPAWN_METHOD_CFGS.fields = {NPC_SPAWN_METHOD_CFGS_ITEMS_FIELD}
+NPC_SPAWN_METHOD_CFGS.is_extendable = false
+NPC_SPAWN_METHOD_CFGS.extensions = {}
+NPC_FUNCTION_CFG_ID_FIELD.name = "id"
+NPC_FUNCTION_CFG_ID_FIELD.full_name = ".ftcfg.npc_function_cfg.id"
+NPC_FUNCTION_CFG_ID_FIELD.number = 1
+NPC_FUNCTION_CFG_ID_FIELD.index = 0
+NPC_FUNCTION_CFG_ID_FIELD.label = 2
+NPC_FUNCTION_CFG_ID_FIELD.has_default_value = false
+NPC_FUNCTION_CFG_ID_FIELD.default_value = 0
+NPC_FUNCTION_CFG_ID_FIELD.type = 5
+NPC_FUNCTION_CFG_ID_FIELD.cpp_type = 1
+
+NPC_FUNCTION_CFG_SCENE_ID_FIELD.name = "scene_id"
+NPC_FUNCTION_CFG_SCENE_ID_FIELD.full_name = ".ftcfg.npc_function_cfg.scene_id"
+NPC_FUNCTION_CFG_SCENE_ID_FIELD.number = 2
+NPC_FUNCTION_CFG_SCENE_ID_FIELD.index = 1
+NPC_FUNCTION_CFG_SCENE_ID_FIELD.label = 2
+NPC_FUNCTION_CFG_SCENE_ID_FIELD.has_default_value = false
+NPC_FUNCTION_CFG_SCENE_ID_FIELD.default_value = 0
+NPC_FUNCTION_CFG_SCENE_ID_FIELD.type = 5
+NPC_FUNCTION_CFG_SCENE_ID_FIELD.cpp_type = 1
+
+NPC_FUNCTION_CFG_OPEN_DIALOG_FIELD.name = "open_dialog"
+NPC_FUNCTION_CFG_OPEN_DIALOG_FIELD.full_name = ".ftcfg.npc_function_cfg.open_dialog"
+NPC_FUNCTION_CFG_OPEN_DIALOG_FIELD.number = 3
+NPC_FUNCTION_CFG_OPEN_DIALOG_FIELD.index = 2
+NPC_FUNCTION_CFG_OPEN_DIALOG_FIELD.label = 2
+NPC_FUNCTION_CFG_OPEN_DIALOG_FIELD.has_default_value = false
+NPC_FUNCTION_CFG_OPEN_DIALOG_FIELD.default_value = false
+NPC_FUNCTION_CFG_OPEN_DIALOG_FIELD.type = 8
+NPC_FUNCTION_CFG_OPEN_DIALOG_FIELD.cpp_type = 7
+
+NPC_FUNCTION_CFG_BUTTONS_FIELD.name = "buttons"
+NPC_FUNCTION_CFG_BUTTONS_FIELD.full_name = ".ftcfg.npc_function_cfg.buttons"
+NPC_FUNCTION_CFG_BUTTONS_FIELD.number = 4
+NPC_FUNCTION_CFG_BUTTONS_FIELD.index = 3
+NPC_FUNCTION_CFG_BUTTONS_FIELD.label = 3
+NPC_FUNCTION_CFG_BUTTONS_FIELD.has_default_value = false
+NPC_FUNCTION_CFG_BUTTONS_FIELD.default_value = {}
+NPC_FUNCTION_CFG_BUTTONS_FIELD.type = 5
+NPC_FUNCTION_CFG_BUTTONS_FIELD.cpp_type = 1
+
+NPC_FUNCTION_CFG_CONTENT_FIELD.name = "content"
+NPC_FUNCTION_CFG_CONTENT_FIELD.full_name = ".ftcfg.npc_function_cfg.content"
+NPC_FUNCTION_CFG_CONTENT_FIELD.number = 5
+NPC_FUNCTION_CFG_CONTENT_FIELD.index = 4
+NPC_FUNCTION_CFG_CONTENT_FIELD.label = 2
+NPC_FUNCTION_CFG_CONTENT_FIELD.has_default_value = false
+NPC_FUNCTION_CFG_CONTENT_FIELD.default_value = 0
+NPC_FUNCTION_CFG_CONTENT_FIELD.type = 5
+NPC_FUNCTION_CFG_CONTENT_FIELD.cpp_type = 1
+
+NPC_FUNCTION_CFG_FUNCTIONS_FIELD.name = "functions"
+NPC_FUNCTION_CFG_FUNCTIONS_FIELD.full_name = ".ftcfg.npc_function_cfg.functions"
+NPC_FUNCTION_CFG_FUNCTIONS_FIELD.number = 6
+NPC_FUNCTION_CFG_FUNCTIONS_FIELD.index = 5
+NPC_FUNCTION_CFG_FUNCTIONS_FIELD.label = 3
+NPC_FUNCTION_CFG_FUNCTIONS_FIELD.has_default_value = false
+NPC_FUNCTION_CFG_FUNCTIONS_FIELD.default_value = {}
+NPC_FUNCTION_CFG_FUNCTIONS_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+NPC_FUNCTION_CFG_FUNCTIONS_FIELD.type = 14
+NPC_FUNCTION_CFG_FUNCTIONS_FIELD.cpp_type = 8
+
+NPC_FUNCTION_CFG_FUNC_PARA_FIELD.name = "func_para"
+NPC_FUNCTION_CFG_FUNC_PARA_FIELD.full_name = ".ftcfg.npc_function_cfg.func_para"
+NPC_FUNCTION_CFG_FUNC_PARA_FIELD.number = 7
+NPC_FUNCTION_CFG_FUNC_PARA_FIELD.index = 6
+NPC_FUNCTION_CFG_FUNC_PARA_FIELD.label = 3
+NPC_FUNCTION_CFG_FUNC_PARA_FIELD.has_default_value = false
+NPC_FUNCTION_CFG_FUNC_PARA_FIELD.default_value = {}
+NPC_FUNCTION_CFG_FUNC_PARA_FIELD.type = 5
+NPC_FUNCTION_CFG_FUNC_PARA_FIELD.cpp_type = 1
+
+NPC_FUNCTION_CFG_SHOW_SCALE_FIELD.name = "show_scale"
+NPC_FUNCTION_CFG_SHOW_SCALE_FIELD.full_name = ".ftcfg.npc_function_cfg.show_scale"
+NPC_FUNCTION_CFG_SHOW_SCALE_FIELD.number = 8
+NPC_FUNCTION_CFG_SHOW_SCALE_FIELD.index = 7
+NPC_FUNCTION_CFG_SHOW_SCALE_FIELD.label = 2
+NPC_FUNCTION_CFG_SHOW_SCALE_FIELD.has_default_value = false
+NPC_FUNCTION_CFG_SHOW_SCALE_FIELD.default_value = 0.0
+NPC_FUNCTION_CFG_SHOW_SCALE_FIELD.type = 2
+NPC_FUNCTION_CFG_SHOW_SCALE_FIELD.cpp_type = 6
+
+NPC_FUNCTION_CFG.name = "npc_function_cfg"
+NPC_FUNCTION_CFG.full_name = ".ftcfg.npc_function_cfg"
+NPC_FUNCTION_CFG.nested_types = {}
+NPC_FUNCTION_CFG.enum_types = {}
+NPC_FUNCTION_CFG.fields = {NPC_FUNCTION_CFG_ID_FIELD, NPC_FUNCTION_CFG_SCENE_ID_FIELD, NPC_FUNCTION_CFG_OPEN_DIALOG_FIELD, NPC_FUNCTION_CFG_BUTTONS_FIELD, NPC_FUNCTION_CFG_CONTENT_FIELD, NPC_FUNCTION_CFG_FUNCTIONS_FIELD, NPC_FUNCTION_CFG_FUNC_PARA_FIELD, NPC_FUNCTION_CFG_SHOW_SCALE_FIELD}
+NPC_FUNCTION_CFG.is_extendable = false
+NPC_FUNCTION_CFG.extensions = {}
+NPC_FUNCTION_CFGS_ITEMS_FIELD.name = "items"
+NPC_FUNCTION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.npc_function_cfgs.items"
+NPC_FUNCTION_CFGS_ITEMS_FIELD.number = 1
+NPC_FUNCTION_CFGS_ITEMS_FIELD.index = 0
+NPC_FUNCTION_CFGS_ITEMS_FIELD.label = 3
+NPC_FUNCTION_CFGS_ITEMS_FIELD.has_default_value = false
+NPC_FUNCTION_CFGS_ITEMS_FIELD.default_value = {}
+NPC_FUNCTION_CFGS_ITEMS_FIELD.message_type = NPC_FUNCTION_CFG
+NPC_FUNCTION_CFGS_ITEMS_FIELD.type = 11
+NPC_FUNCTION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+NPC_FUNCTION_CFGS.name = "npc_function_cfgs"
+NPC_FUNCTION_CFGS.full_name = ".ftcfg.npc_function_cfgs"
+NPC_FUNCTION_CFGS.nested_types = {}
+NPC_FUNCTION_CFGS.enum_types = {}
+NPC_FUNCTION_CFGS.fields = {NPC_FUNCTION_CFGS_ITEMS_FIELD}
+NPC_FUNCTION_CFGS.is_extendable = false
+NPC_FUNCTION_CFGS.extensions = {}
+PLAYSCG_CFG_ID_FIELD.name = "id"
+PLAYSCG_CFG_ID_FIELD.full_name = ".ftcfg.playscg_cfg.id"
+PLAYSCG_CFG_ID_FIELD.number = 1
+PLAYSCG_CFG_ID_FIELD.index = 0
+PLAYSCG_CFG_ID_FIELD.label = 2
+PLAYSCG_CFG_ID_FIELD.has_default_value = false
+PLAYSCG_CFG_ID_FIELD.default_value = 0
+PLAYSCG_CFG_ID_FIELD.type = 5
+PLAYSCG_CFG_ID_FIELD.cpp_type = 1
+
+PLAYSCG_CFG_STATE_FIELD.name = "state"
+PLAYSCG_CFG_STATE_FIELD.full_name = ".ftcfg.playscg_cfg.state"
+PLAYSCG_CFG_STATE_FIELD.number = 2
+PLAYSCG_CFG_STATE_FIELD.index = 1
+PLAYSCG_CFG_STATE_FIELD.label = 2
+PLAYSCG_CFG_STATE_FIELD.has_default_value = false
+PLAYSCG_CFG_STATE_FIELD.default_value = 0
+PLAYSCG_CFG_STATE_FIELD.type = 5
+PLAYSCG_CFG_STATE_FIELD.cpp_type = 1
+
+PLAYSCG_CFG.name = "playscg_cfg"
+PLAYSCG_CFG.full_name = ".ftcfg.playscg_cfg"
+PLAYSCG_CFG.nested_types = {}
+PLAYSCG_CFG.enum_types = {}
+PLAYSCG_CFG.fields = {PLAYSCG_CFG_ID_FIELD, PLAYSCG_CFG_STATE_FIELD}
+PLAYSCG_CFG.is_extendable = false
+PLAYSCG_CFG.extensions = {}
+PLAYSCG_CFGS_ITEMS_FIELD.name = "items"
+PLAYSCG_CFGS_ITEMS_FIELD.full_name = ".ftcfg.playscg_cfgs.items"
+PLAYSCG_CFGS_ITEMS_FIELD.number = 1
+PLAYSCG_CFGS_ITEMS_FIELD.index = 0
+PLAYSCG_CFGS_ITEMS_FIELD.label = 3
+PLAYSCG_CFGS_ITEMS_FIELD.has_default_value = false
+PLAYSCG_CFGS_ITEMS_FIELD.default_value = {}
+PLAYSCG_CFGS_ITEMS_FIELD.message_type = PLAYSCG_CFG
+PLAYSCG_CFGS_ITEMS_FIELD.type = 11
+PLAYSCG_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PLAYSCG_CFGS.name = "playscg_cfgs"
+PLAYSCG_CFGS.full_name = ".ftcfg.playscg_cfgs"
+PLAYSCG_CFGS.nested_types = {}
+PLAYSCG_CFGS.enum_types = {}
+PLAYSCG_CFGS.fields = {PLAYSCG_CFGS_ITEMS_FIELD}
+PLAYSCG_CFGS.is_extendable = false
+PLAYSCG_CFGS.extensions = {}
+PLOT_DATA_CFG_ID_FIELD.name = "id"
+PLOT_DATA_CFG_ID_FIELD.full_name = ".ftcfg.plot_data_cfg.id"
+PLOT_DATA_CFG_ID_FIELD.number = 1
+PLOT_DATA_CFG_ID_FIELD.index = 0
+PLOT_DATA_CFG_ID_FIELD.label = 2
+PLOT_DATA_CFG_ID_FIELD.has_default_value = false
+PLOT_DATA_CFG_ID_FIELD.default_value = 0
+PLOT_DATA_CFG_ID_FIELD.type = 5
+PLOT_DATA_CFG_ID_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_TYPE_FIELD.name = "type"
+PLOT_DATA_CFG_TYPE_FIELD.full_name = ".ftcfg.plot_data_cfg.type"
+PLOT_DATA_CFG_TYPE_FIELD.number = 2
+PLOT_DATA_CFG_TYPE_FIELD.index = 1
+PLOT_DATA_CFG_TYPE_FIELD.label = 2
+PLOT_DATA_CFG_TYPE_FIELD.has_default_value = false
+PLOT_DATA_CFG_TYPE_FIELD.default_value = 0
+PLOT_DATA_CFG_TYPE_FIELD.type = 5
+PLOT_DATA_CFG_TYPE_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_NEXT_PLOT_FIELD.name = "next_plot"
+PLOT_DATA_CFG_NEXT_PLOT_FIELD.full_name = ".ftcfg.plot_data_cfg.next_plot"
+PLOT_DATA_CFG_NEXT_PLOT_FIELD.number = 3
+PLOT_DATA_CFG_NEXT_PLOT_FIELD.index = 2
+PLOT_DATA_CFG_NEXT_PLOT_FIELD.label = 2
+PLOT_DATA_CFG_NEXT_PLOT_FIELD.has_default_value = false
+PLOT_DATA_CFG_NEXT_PLOT_FIELD.default_value = 0
+PLOT_DATA_CFG_NEXT_PLOT_FIELD.type = 5
+PLOT_DATA_CFG_NEXT_PLOT_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_CONTENT_ID_FIELD.name = "content_id"
+PLOT_DATA_CFG_CONTENT_ID_FIELD.full_name = ".ftcfg.plot_data_cfg.content_id"
+PLOT_DATA_CFG_CONTENT_ID_FIELD.number = 4
+PLOT_DATA_CFG_CONTENT_ID_FIELD.index = 3
+PLOT_DATA_CFG_CONTENT_ID_FIELD.label = 2
+PLOT_DATA_CFG_CONTENT_ID_FIELD.has_default_value = false
+PLOT_DATA_CFG_CONTENT_ID_FIELD.default_value = 0
+PLOT_DATA_CFG_CONTENT_ID_FIELD.type = 5
+PLOT_DATA_CFG_CONTENT_ID_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_CAN_SKIP_FIELD.name = "can_skip"
+PLOT_DATA_CFG_CAN_SKIP_FIELD.full_name = ".ftcfg.plot_data_cfg.can_skip"
+PLOT_DATA_CFG_CAN_SKIP_FIELD.number = 5
+PLOT_DATA_CFG_CAN_SKIP_FIELD.index = 4
+PLOT_DATA_CFG_CAN_SKIP_FIELD.label = 2
+PLOT_DATA_CFG_CAN_SKIP_FIELD.has_default_value = false
+PLOT_DATA_CFG_CAN_SKIP_FIELD.default_value = false
+PLOT_DATA_CFG_CAN_SKIP_FIELD.type = 8
+PLOT_DATA_CFG_CAN_SKIP_FIELD.cpp_type = 7
+
+PLOT_DATA_CFG_SHOW_ID_FIELD.name = "show_id"
+PLOT_DATA_CFG_SHOW_ID_FIELD.full_name = ".ftcfg.plot_data_cfg.show_id"
+PLOT_DATA_CFG_SHOW_ID_FIELD.number = 6
+PLOT_DATA_CFG_SHOW_ID_FIELD.index = 5
+PLOT_DATA_CFG_SHOW_ID_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_ID_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_ID_FIELD.default_value = 0
+PLOT_DATA_CFG_SHOW_ID_FIELD.type = 5
+PLOT_DATA_CFG_SHOW_ID_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_IMAGE_ID_FIELD.name = "image_id"
+PLOT_DATA_CFG_IMAGE_ID_FIELD.full_name = ".ftcfg.plot_data_cfg.image_id"
+PLOT_DATA_CFG_IMAGE_ID_FIELD.number = 7
+PLOT_DATA_CFG_IMAGE_ID_FIELD.index = 6
+PLOT_DATA_CFG_IMAGE_ID_FIELD.label = 2
+PLOT_DATA_CFG_IMAGE_ID_FIELD.has_default_value = false
+PLOT_DATA_CFG_IMAGE_ID_FIELD.default_value = 0
+PLOT_DATA_CFG_IMAGE_ID_FIELD.type = 5
+PLOT_DATA_CFG_IMAGE_ID_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_STAY_TIME_FIELD.name = "stay_time"
+PLOT_DATA_CFG_STAY_TIME_FIELD.full_name = ".ftcfg.plot_data_cfg.stay_time"
+PLOT_DATA_CFG_STAY_TIME_FIELD.number = 8
+PLOT_DATA_CFG_STAY_TIME_FIELD.index = 7
+PLOT_DATA_CFG_STAY_TIME_FIELD.label = 2
+PLOT_DATA_CFG_STAY_TIME_FIELD.has_default_value = false
+PLOT_DATA_CFG_STAY_TIME_FIELD.default_value = 0.0
+PLOT_DATA_CFG_STAY_TIME_FIELD.type = 2
+PLOT_DATA_CFG_STAY_TIME_FIELD.cpp_type = 6
+
+PLOT_DATA_CFG_AUDIORES_ID_FIELD.name = "audiores_id"
+PLOT_DATA_CFG_AUDIORES_ID_FIELD.full_name = ".ftcfg.plot_data_cfg.audiores_id"
+PLOT_DATA_CFG_AUDIORES_ID_FIELD.number = 9
+PLOT_DATA_CFG_AUDIORES_ID_FIELD.index = 8
+PLOT_DATA_CFG_AUDIORES_ID_FIELD.label = 2
+PLOT_DATA_CFG_AUDIORES_ID_FIELD.has_default_value = false
+PLOT_DATA_CFG_AUDIORES_ID_FIELD.default_value = 0
+PLOT_DATA_CFG_AUDIORES_ID_FIELD.type = 5
+PLOT_DATA_CFG_AUDIORES_ID_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_SHOW_POS_FIELD.name = "show_pos"
+PLOT_DATA_CFG_SHOW_POS_FIELD.full_name = ".ftcfg.plot_data_cfg.show_pos"
+PLOT_DATA_CFG_SHOW_POS_FIELD.number = 10
+PLOT_DATA_CFG_SHOW_POS_FIELD.index = 9
+PLOT_DATA_CFG_SHOW_POS_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_POS_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_POS_FIELD.default_value = 0.0
+PLOT_DATA_CFG_SHOW_POS_FIELD.type = 2
+PLOT_DATA_CFG_SHOW_POS_FIELD.cpp_type = 6
+
+PLOT_DATA_CFG_SHOW_SCALE_FIELD.name = "show_scale"
+PLOT_DATA_CFG_SHOW_SCALE_FIELD.full_name = ".ftcfg.plot_data_cfg.show_scale"
+PLOT_DATA_CFG_SHOW_SCALE_FIELD.number = 11
+PLOT_DATA_CFG_SHOW_SCALE_FIELD.index = 10
+PLOT_DATA_CFG_SHOW_SCALE_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_SCALE_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_SCALE_FIELD.default_value = 0.0
+PLOT_DATA_CFG_SHOW_SCALE_FIELD.type = 2
+PLOT_DATA_CFG_SHOW_SCALE_FIELD.cpp_type = 6
+
+PLOT_DATA_CFG_SHOW_IMG_LEFT_FIELD.name = "show_img_left"
+PLOT_DATA_CFG_SHOW_IMG_LEFT_FIELD.full_name = ".ftcfg.plot_data_cfg.show_img_left"
+PLOT_DATA_CFG_SHOW_IMG_LEFT_FIELD.number = 12
+PLOT_DATA_CFG_SHOW_IMG_LEFT_FIELD.index = 11
+PLOT_DATA_CFG_SHOW_IMG_LEFT_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_IMG_LEFT_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_IMG_LEFT_FIELD.default_value = 0
+PLOT_DATA_CFG_SHOW_IMG_LEFT_FIELD.type = 5
+PLOT_DATA_CFG_SHOW_IMG_LEFT_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_SHOW_NAME_LEFT_FIELD.name = "show_name_left"
+PLOT_DATA_CFG_SHOW_NAME_LEFT_FIELD.full_name = ".ftcfg.plot_data_cfg.show_name_left"
+PLOT_DATA_CFG_SHOW_NAME_LEFT_FIELD.number = 13
+PLOT_DATA_CFG_SHOW_NAME_LEFT_FIELD.index = 12
+PLOT_DATA_CFG_SHOW_NAME_LEFT_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_NAME_LEFT_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_NAME_LEFT_FIELD.default_value = 0
+PLOT_DATA_CFG_SHOW_NAME_LEFT_FIELD.type = 5
+PLOT_DATA_CFG_SHOW_NAME_LEFT_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_SHOW_DARK_LEFT_FIELD.name = "show_dark_left"
+PLOT_DATA_CFG_SHOW_DARK_LEFT_FIELD.full_name = ".ftcfg.plot_data_cfg.show_dark_left"
+PLOT_DATA_CFG_SHOW_DARK_LEFT_FIELD.number = 14
+PLOT_DATA_CFG_SHOW_DARK_LEFT_FIELD.index = 13
+PLOT_DATA_CFG_SHOW_DARK_LEFT_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_DARK_LEFT_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_DARK_LEFT_FIELD.default_value = 0
+PLOT_DATA_CFG_SHOW_DARK_LEFT_FIELD.type = 5
+PLOT_DATA_CFG_SHOW_DARK_LEFT_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_SHOW_ZOOM_LEFT_FIELD.name = "show_zoom_left"
+PLOT_DATA_CFG_SHOW_ZOOM_LEFT_FIELD.full_name = ".ftcfg.plot_data_cfg.show_zoom_left"
+PLOT_DATA_CFG_SHOW_ZOOM_LEFT_FIELD.number = 15
+PLOT_DATA_CFG_SHOW_ZOOM_LEFT_FIELD.index = 14
+PLOT_DATA_CFG_SHOW_ZOOM_LEFT_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_ZOOM_LEFT_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_ZOOM_LEFT_FIELD.default_value = 0.0
+PLOT_DATA_CFG_SHOW_ZOOM_LEFT_FIELD.type = 2
+PLOT_DATA_CFG_SHOW_ZOOM_LEFT_FIELD.cpp_type = 6
+
+PLOT_DATA_CFG_SHOW_IMG_RIGHT_FIELD.name = "show_img_right"
+PLOT_DATA_CFG_SHOW_IMG_RIGHT_FIELD.full_name = ".ftcfg.plot_data_cfg.show_img_right"
+PLOT_DATA_CFG_SHOW_IMG_RIGHT_FIELD.number = 16
+PLOT_DATA_CFG_SHOW_IMG_RIGHT_FIELD.index = 15
+PLOT_DATA_CFG_SHOW_IMG_RIGHT_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_IMG_RIGHT_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_IMG_RIGHT_FIELD.default_value = 0
+PLOT_DATA_CFG_SHOW_IMG_RIGHT_FIELD.type = 5
+PLOT_DATA_CFG_SHOW_IMG_RIGHT_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_SHOW_NAME_RIGHT_FIELD.name = "show_name_right"
+PLOT_DATA_CFG_SHOW_NAME_RIGHT_FIELD.full_name = ".ftcfg.plot_data_cfg.show_name_right"
+PLOT_DATA_CFG_SHOW_NAME_RIGHT_FIELD.number = 17
+PLOT_DATA_CFG_SHOW_NAME_RIGHT_FIELD.index = 16
+PLOT_DATA_CFG_SHOW_NAME_RIGHT_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_NAME_RIGHT_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_NAME_RIGHT_FIELD.default_value = 0
+PLOT_DATA_CFG_SHOW_NAME_RIGHT_FIELD.type = 5
+PLOT_DATA_CFG_SHOW_NAME_RIGHT_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_SHOW_DARK_RIGHT_FIELD.name = "show_dark_right"
+PLOT_DATA_CFG_SHOW_DARK_RIGHT_FIELD.full_name = ".ftcfg.plot_data_cfg.show_dark_right"
+PLOT_DATA_CFG_SHOW_DARK_RIGHT_FIELD.number = 18
+PLOT_DATA_CFG_SHOW_DARK_RIGHT_FIELD.index = 17
+PLOT_DATA_CFG_SHOW_DARK_RIGHT_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_DARK_RIGHT_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_DARK_RIGHT_FIELD.default_value = 0
+PLOT_DATA_CFG_SHOW_DARK_RIGHT_FIELD.type = 5
+PLOT_DATA_CFG_SHOW_DARK_RIGHT_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_SHOW_ZOOM_RIGHT_FIELD.name = "show_zoom_right"
+PLOT_DATA_CFG_SHOW_ZOOM_RIGHT_FIELD.full_name = ".ftcfg.plot_data_cfg.show_zoom_right"
+PLOT_DATA_CFG_SHOW_ZOOM_RIGHT_FIELD.number = 19
+PLOT_DATA_CFG_SHOW_ZOOM_RIGHT_FIELD.index = 18
+PLOT_DATA_CFG_SHOW_ZOOM_RIGHT_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_ZOOM_RIGHT_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_ZOOM_RIGHT_FIELD.default_value = 0.0
+PLOT_DATA_CFG_SHOW_ZOOM_RIGHT_FIELD.type = 2
+PLOT_DATA_CFG_SHOW_ZOOM_RIGHT_FIELD.cpp_type = 6
+
+PLOT_DATA_CFG_SHOW_BG_ID_FIELD.name = "show_bg_id"
+PLOT_DATA_CFG_SHOW_BG_ID_FIELD.full_name = ".ftcfg.plot_data_cfg.show_bg_id"
+PLOT_DATA_CFG_SHOW_BG_ID_FIELD.number = 20
+PLOT_DATA_CFG_SHOW_BG_ID_FIELD.index = 19
+PLOT_DATA_CFG_SHOW_BG_ID_FIELD.label = 2
+PLOT_DATA_CFG_SHOW_BG_ID_FIELD.has_default_value = false
+PLOT_DATA_CFG_SHOW_BG_ID_FIELD.default_value = 0
+PLOT_DATA_CFG_SHOW_BG_ID_FIELD.type = 5
+PLOT_DATA_CFG_SHOW_BG_ID_FIELD.cpp_type = 1
+
+PLOT_DATA_CFG_INSERT_NAME_FIELD.name = "insert_name"
+PLOT_DATA_CFG_INSERT_NAME_FIELD.full_name = ".ftcfg.plot_data_cfg.insert_name"
+PLOT_DATA_CFG_INSERT_NAME_FIELD.number = 21
+PLOT_DATA_CFG_INSERT_NAME_FIELD.index = 20
+PLOT_DATA_CFG_INSERT_NAME_FIELD.label = 2
+PLOT_DATA_CFG_INSERT_NAME_FIELD.has_default_value = false
+PLOT_DATA_CFG_INSERT_NAME_FIELD.default_value = false
+PLOT_DATA_CFG_INSERT_NAME_FIELD.type = 8
+PLOT_DATA_CFG_INSERT_NAME_FIELD.cpp_type = 7
+
+PLOT_DATA_CFG.name = "plot_data_cfg"
+PLOT_DATA_CFG.full_name = ".ftcfg.plot_data_cfg"
+PLOT_DATA_CFG.nested_types = {}
+PLOT_DATA_CFG.enum_types = {}
+PLOT_DATA_CFG.fields = {PLOT_DATA_CFG_ID_FIELD, PLOT_DATA_CFG_TYPE_FIELD, PLOT_DATA_CFG_NEXT_PLOT_FIELD, PLOT_DATA_CFG_CONTENT_ID_FIELD, PLOT_DATA_CFG_CAN_SKIP_FIELD, PLOT_DATA_CFG_SHOW_ID_FIELD, PLOT_DATA_CFG_IMAGE_ID_FIELD, PLOT_DATA_CFG_STAY_TIME_FIELD, PLOT_DATA_CFG_AUDIORES_ID_FIELD, PLOT_DATA_CFG_SHOW_POS_FIELD, PLOT_DATA_CFG_SHOW_SCALE_FIELD, PLOT_DATA_CFG_SHOW_IMG_LEFT_FIELD, PLOT_DATA_CFG_SHOW_NAME_LEFT_FIELD, PLOT_DATA_CFG_SHOW_DARK_LEFT_FIELD, PLOT_DATA_CFG_SHOW_ZOOM_LEFT_FIELD, PLOT_DATA_CFG_SHOW_IMG_RIGHT_FIELD, PLOT_DATA_CFG_SHOW_NAME_RIGHT_FIELD, PLOT_DATA_CFG_SHOW_DARK_RIGHT_FIELD, PLOT_DATA_CFG_SHOW_ZOOM_RIGHT_FIELD, PLOT_DATA_CFG_SHOW_BG_ID_FIELD, PLOT_DATA_CFG_INSERT_NAME_FIELD}
+PLOT_DATA_CFG.is_extendable = false
+PLOT_DATA_CFG.extensions = {}
+PLOT_DATA_CFGS_ITEMS_FIELD.name = "items"
+PLOT_DATA_CFGS_ITEMS_FIELD.full_name = ".ftcfg.plot_data_cfgs.items"
+PLOT_DATA_CFGS_ITEMS_FIELD.number = 1
+PLOT_DATA_CFGS_ITEMS_FIELD.index = 0
+PLOT_DATA_CFGS_ITEMS_FIELD.label = 3
+PLOT_DATA_CFGS_ITEMS_FIELD.has_default_value = false
+PLOT_DATA_CFGS_ITEMS_FIELD.default_value = {}
+PLOT_DATA_CFGS_ITEMS_FIELD.message_type = PLOT_DATA_CFG
+PLOT_DATA_CFGS_ITEMS_FIELD.type = 11
+PLOT_DATA_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PLOT_DATA_CFGS.name = "plot_data_cfgs"
+PLOT_DATA_CFGS.full_name = ".ftcfg.plot_data_cfgs"
+PLOT_DATA_CFGS.nested_types = {}
+PLOT_DATA_CFGS.enum_types = {}
+PLOT_DATA_CFGS.fields = {PLOT_DATA_CFGS_ITEMS_FIELD}
+PLOT_DATA_CFGS.is_extendable = false
+PLOT_DATA_CFGS.extensions = {}
+GLOBAL_PARAM_CFG_ID_FIELD.name = "id"
+GLOBAL_PARAM_CFG_ID_FIELD.full_name = ".ftcfg.global_param_cfg.id"
+GLOBAL_PARAM_CFG_ID_FIELD.number = 1
+GLOBAL_PARAM_CFG_ID_FIELD.index = 0
+GLOBAL_PARAM_CFG_ID_FIELD.label = 2
+GLOBAL_PARAM_CFG_ID_FIELD.has_default_value = false
+GLOBAL_PARAM_CFG_ID_FIELD.default_value = 0
+GLOBAL_PARAM_CFG_ID_FIELD.type = 5
+GLOBAL_PARAM_CFG_ID_FIELD.cpp_type = 1
+
+GLOBAL_PARAM_CFG_DESC_FIELD.name = "desc"
+GLOBAL_PARAM_CFG_DESC_FIELD.full_name = ".ftcfg.global_param_cfg.desc"
+GLOBAL_PARAM_CFG_DESC_FIELD.number = 2
+GLOBAL_PARAM_CFG_DESC_FIELD.index = 1
+GLOBAL_PARAM_CFG_DESC_FIELD.label = 2
+GLOBAL_PARAM_CFG_DESC_FIELD.has_default_value = false
+GLOBAL_PARAM_CFG_DESC_FIELD.default_value = ""
+GLOBAL_PARAM_CFG_DESC_FIELD.type = 9
+GLOBAL_PARAM_CFG_DESC_FIELD.cpp_type = 9
+
+GLOBAL_PARAM_CFG_VALUE_FIELD.name = "value"
+GLOBAL_PARAM_CFG_VALUE_FIELD.full_name = ".ftcfg.global_param_cfg.value"
+GLOBAL_PARAM_CFG_VALUE_FIELD.number = 3
+GLOBAL_PARAM_CFG_VALUE_FIELD.index = 2
+GLOBAL_PARAM_CFG_VALUE_FIELD.label = 2
+GLOBAL_PARAM_CFG_VALUE_FIELD.has_default_value = false
+GLOBAL_PARAM_CFG_VALUE_FIELD.default_value = 0.0
+GLOBAL_PARAM_CFG_VALUE_FIELD.type = 1
+GLOBAL_PARAM_CFG_VALUE_FIELD.cpp_type = 5
+
+GLOBAL_PARAM_CFG.name = "global_param_cfg"
+GLOBAL_PARAM_CFG.full_name = ".ftcfg.global_param_cfg"
+GLOBAL_PARAM_CFG.nested_types = {}
+GLOBAL_PARAM_CFG.enum_types = {}
+GLOBAL_PARAM_CFG.fields = {GLOBAL_PARAM_CFG_ID_FIELD, GLOBAL_PARAM_CFG_DESC_FIELD, GLOBAL_PARAM_CFG_VALUE_FIELD}
+GLOBAL_PARAM_CFG.is_extendable = false
+GLOBAL_PARAM_CFG.extensions = {}
+GLOBAL_PARAM_CFGS_ITEMS_FIELD.name = "items"
+GLOBAL_PARAM_CFGS_ITEMS_FIELD.full_name = ".ftcfg.global_param_cfgs.items"
+GLOBAL_PARAM_CFGS_ITEMS_FIELD.number = 1
+GLOBAL_PARAM_CFGS_ITEMS_FIELD.index = 0
+GLOBAL_PARAM_CFGS_ITEMS_FIELD.label = 3
+GLOBAL_PARAM_CFGS_ITEMS_FIELD.has_default_value = false
+GLOBAL_PARAM_CFGS_ITEMS_FIELD.default_value = {}
+GLOBAL_PARAM_CFGS_ITEMS_FIELD.message_type = GLOBAL_PARAM_CFG
+GLOBAL_PARAM_CFGS_ITEMS_FIELD.type = 11
+GLOBAL_PARAM_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GLOBAL_PARAM_CFGS.name = "global_param_cfgs"
+GLOBAL_PARAM_CFGS.full_name = ".ftcfg.global_param_cfgs"
+GLOBAL_PARAM_CFGS.nested_types = {}
+GLOBAL_PARAM_CFGS.enum_types = {}
+GLOBAL_PARAM_CFGS.fields = {GLOBAL_PARAM_CFGS_ITEMS_FIELD}
+GLOBAL_PARAM_CFGS.is_extendable = false
+GLOBAL_PARAM_CFGS.extensions = {}
+PROP_TYPE_CFG_ID_FIELD.name = "id"
+PROP_TYPE_CFG_ID_FIELD.full_name = ".ftcfg.prop_type_cfg.id"
+PROP_TYPE_CFG_ID_FIELD.number = 1
+PROP_TYPE_CFG_ID_FIELD.index = 0
+PROP_TYPE_CFG_ID_FIELD.label = 2
+PROP_TYPE_CFG_ID_FIELD.has_default_value = false
+PROP_TYPE_CFG_ID_FIELD.default_value = 0
+PROP_TYPE_CFG_ID_FIELD.type = 5
+PROP_TYPE_CFG_ID_FIELD.cpp_type = 1
+
+PROP_TYPE_CFG_IS_RATE_FIELD.name = "is_rate"
+PROP_TYPE_CFG_IS_RATE_FIELD.full_name = ".ftcfg.prop_type_cfg.is_rate"
+PROP_TYPE_CFG_IS_RATE_FIELD.number = 2
+PROP_TYPE_CFG_IS_RATE_FIELD.index = 1
+PROP_TYPE_CFG_IS_RATE_FIELD.label = 2
+PROP_TYPE_CFG_IS_RATE_FIELD.has_default_value = false
+PROP_TYPE_CFG_IS_RATE_FIELD.default_value = false
+PROP_TYPE_CFG_IS_RATE_FIELD.type = 8
+PROP_TYPE_CFG_IS_RATE_FIELD.cpp_type = 7
+
+PROP_TYPE_CFG_ATTRIBUTE_FIELD.name = "attribute"
+PROP_TYPE_CFG_ATTRIBUTE_FIELD.full_name = ".ftcfg.prop_type_cfg.attribute"
+PROP_TYPE_CFG_ATTRIBUTE_FIELD.number = 3
+PROP_TYPE_CFG_ATTRIBUTE_FIELD.index = 2
+PROP_TYPE_CFG_ATTRIBUTE_FIELD.label = 3
+PROP_TYPE_CFG_ATTRIBUTE_FIELD.has_default_value = false
+PROP_TYPE_CFG_ATTRIBUTE_FIELD.default_value = {}
+PROP_TYPE_CFG_ATTRIBUTE_FIELD.enum_type = config_predefine_pb.EPROPATTRIBUTETYPE
+PROP_TYPE_CFG_ATTRIBUTE_FIELD.type = 14
+PROP_TYPE_CFG_ATTRIBUTE_FIELD.cpp_type = 8
+
+PROP_TYPE_CFG.name = "prop_type_cfg"
+PROP_TYPE_CFG.full_name = ".ftcfg.prop_type_cfg"
+PROP_TYPE_CFG.nested_types = {}
+PROP_TYPE_CFG.enum_types = {}
+PROP_TYPE_CFG.fields = {PROP_TYPE_CFG_ID_FIELD, PROP_TYPE_CFG_IS_RATE_FIELD, PROP_TYPE_CFG_ATTRIBUTE_FIELD}
+PROP_TYPE_CFG.is_extendable = false
+PROP_TYPE_CFG.extensions = {}
+PROP_TYPE_CFGS_ITEMS_FIELD.name = "items"
+PROP_TYPE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.prop_type_cfgs.items"
+PROP_TYPE_CFGS_ITEMS_FIELD.number = 1
+PROP_TYPE_CFGS_ITEMS_FIELD.index = 0
+PROP_TYPE_CFGS_ITEMS_FIELD.label = 3
+PROP_TYPE_CFGS_ITEMS_FIELD.has_default_value = false
+PROP_TYPE_CFGS_ITEMS_FIELD.default_value = {}
+PROP_TYPE_CFGS_ITEMS_FIELD.message_type = PROP_TYPE_CFG
+PROP_TYPE_CFGS_ITEMS_FIELD.type = 11
+PROP_TYPE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PROP_TYPE_CFGS.name = "prop_type_cfgs"
+PROP_TYPE_CFGS.full_name = ".ftcfg.prop_type_cfgs"
+PROP_TYPE_CFGS.nested_types = {}
+PROP_TYPE_CFGS.enum_types = {}
+PROP_TYPE_CFGS.fields = {PROP_TYPE_CFGS_ITEMS_FIELD}
+PROP_TYPE_CFGS.is_extendable = false
+PROP_TYPE_CFGS.extensions = {}
+ATTRIBUTE_SHOW_CFG_ID_FIELD.name = "id"
+ATTRIBUTE_SHOW_CFG_ID_FIELD.full_name = ".ftcfg.attribute_show_cfg.id"
+ATTRIBUTE_SHOW_CFG_ID_FIELD.number = 1
+ATTRIBUTE_SHOW_CFG_ID_FIELD.index = 0
+ATTRIBUTE_SHOW_CFG_ID_FIELD.label = 2
+ATTRIBUTE_SHOW_CFG_ID_FIELD.has_default_value = false
+ATTRIBUTE_SHOW_CFG_ID_FIELD.default_value = 0
+ATTRIBUTE_SHOW_CFG_ID_FIELD.type = 5
+ATTRIBUTE_SHOW_CFG_ID_FIELD.cpp_type = 1
+
+ATTRIBUTE_SHOW_CFG_ITEM_ID_FIELD.name = "item_id"
+ATTRIBUTE_SHOW_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.attribute_show_cfg.item_id"
+ATTRIBUTE_SHOW_CFG_ITEM_ID_FIELD.number = 2
+ATTRIBUTE_SHOW_CFG_ITEM_ID_FIELD.index = 1
+ATTRIBUTE_SHOW_CFG_ITEM_ID_FIELD.label = 2
+ATTRIBUTE_SHOW_CFG_ITEM_ID_FIELD.has_default_value = false
+ATTRIBUTE_SHOW_CFG_ITEM_ID_FIELD.default_value = 0
+ATTRIBUTE_SHOW_CFG_ITEM_ID_FIELD.type = 5
+ATTRIBUTE_SHOW_CFG_ITEM_ID_FIELD.cpp_type = 1
+
+ATTRIBUTE_SHOW_CFG.name = "attribute_show_cfg"
+ATTRIBUTE_SHOW_CFG.full_name = ".ftcfg.attribute_show_cfg"
+ATTRIBUTE_SHOW_CFG.nested_types = {}
+ATTRIBUTE_SHOW_CFG.enum_types = {}
+ATTRIBUTE_SHOW_CFG.fields = {ATTRIBUTE_SHOW_CFG_ID_FIELD, ATTRIBUTE_SHOW_CFG_ITEM_ID_FIELD}
+ATTRIBUTE_SHOW_CFG.is_extendable = false
+ATTRIBUTE_SHOW_CFG.extensions = {}
+ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD.name = "items"
+ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD.full_name = ".ftcfg.attribute_show_cfgs.items"
+ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD.number = 1
+ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD.index = 0
+ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD.label = 3
+ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD.has_default_value = false
+ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD.default_value = {}
+ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD.message_type = ATTRIBUTE_SHOW_CFG
+ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD.type = 11
+ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ATTRIBUTE_SHOW_CFGS.name = "attribute_show_cfgs"
+ATTRIBUTE_SHOW_CFGS.full_name = ".ftcfg.attribute_show_cfgs"
+ATTRIBUTE_SHOW_CFGS.nested_types = {}
+ATTRIBUTE_SHOW_CFGS.enum_types = {}
+ATTRIBUTE_SHOW_CFGS.fields = {ATTRIBUTE_SHOW_CFGS_ITEMS_FIELD}
+ATTRIBUTE_SHOW_CFGS.is_extendable = false
+ATTRIBUTE_SHOW_CFGS.extensions = {}
+RES_PATH_CFG_ID_FIELD.name = "id"
+RES_PATH_CFG_ID_FIELD.full_name = ".ftcfg.res_path_cfg.id"
+RES_PATH_CFG_ID_FIELD.number = 1
+RES_PATH_CFG_ID_FIELD.index = 0
+RES_PATH_CFG_ID_FIELD.label = 2
+RES_PATH_CFG_ID_FIELD.has_default_value = false
+RES_PATH_CFG_ID_FIELD.default_value = 0
+RES_PATH_CFG_ID_FIELD.type = 5
+RES_PATH_CFG_ID_FIELD.cpp_type = 1
+
+RES_PATH_CFG_RES_PATH_FIELD.name = "res_path"
+RES_PATH_CFG_RES_PATH_FIELD.full_name = ".ftcfg.res_path_cfg.res_path"
+RES_PATH_CFG_RES_PATH_FIELD.number = 2
+RES_PATH_CFG_RES_PATH_FIELD.index = 1
+RES_PATH_CFG_RES_PATH_FIELD.label = 2
+RES_PATH_CFG_RES_PATH_FIELD.has_default_value = false
+RES_PATH_CFG_RES_PATH_FIELD.default_value = ""
+RES_PATH_CFG_RES_PATH_FIELD.type = 9
+RES_PATH_CFG_RES_PATH_FIELD.cpp_type = 9
+
+RES_PATH_CFG_ONE_BUNDLE_FIELD.name = "one_bundle"
+RES_PATH_CFG_ONE_BUNDLE_FIELD.full_name = ".ftcfg.res_path_cfg.one_bundle"
+RES_PATH_CFG_ONE_BUNDLE_FIELD.number = 3
+RES_PATH_CFG_ONE_BUNDLE_FIELD.index = 2
+RES_PATH_CFG_ONE_BUNDLE_FIELD.label = 2
+RES_PATH_CFG_ONE_BUNDLE_FIELD.has_default_value = false
+RES_PATH_CFG_ONE_BUNDLE_FIELD.default_value = 0
+RES_PATH_CFG_ONE_BUNDLE_FIELD.type = 5
+RES_PATH_CFG_ONE_BUNDLE_FIELD.cpp_type = 1
+
+RES_PATH_CFG.name = "res_path_cfg"
+RES_PATH_CFG.full_name = ".ftcfg.res_path_cfg"
+RES_PATH_CFG.nested_types = {}
+RES_PATH_CFG.enum_types = {}
+RES_PATH_CFG.fields = {RES_PATH_CFG_ID_FIELD, RES_PATH_CFG_RES_PATH_FIELD, RES_PATH_CFG_ONE_BUNDLE_FIELD}
+RES_PATH_CFG.is_extendable = false
+RES_PATH_CFG.extensions = {}
+RES_PATH_CFGS_ITEMS_FIELD.name = "items"
+RES_PATH_CFGS_ITEMS_FIELD.full_name = ".ftcfg.res_path_cfgs.items"
+RES_PATH_CFGS_ITEMS_FIELD.number = 1
+RES_PATH_CFGS_ITEMS_FIELD.index = 0
+RES_PATH_CFGS_ITEMS_FIELD.label = 3
+RES_PATH_CFGS_ITEMS_FIELD.has_default_value = false
+RES_PATH_CFGS_ITEMS_FIELD.default_value = {}
+RES_PATH_CFGS_ITEMS_FIELD.message_type = RES_PATH_CFG
+RES_PATH_CFGS_ITEMS_FIELD.type = 11
+RES_PATH_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RES_PATH_CFGS.name = "res_path_cfgs"
+RES_PATH_CFGS.full_name = ".ftcfg.res_path_cfgs"
+RES_PATH_CFGS.nested_types = {}
+RES_PATH_CFGS.enum_types = {}
+RES_PATH_CFGS.fields = {RES_PATH_CFGS_ITEMS_FIELD}
+RES_PATH_CFGS.is_extendable = false
+RES_PATH_CFGS.extensions = {}
+SCENE_CFG_ID_FIELD.name = "id"
+SCENE_CFG_ID_FIELD.full_name = ".ftcfg.scene_cfg.id"
+SCENE_CFG_ID_FIELD.number = 1
+SCENE_CFG_ID_FIELD.index = 0
+SCENE_CFG_ID_FIELD.label = 2
+SCENE_CFG_ID_FIELD.has_default_value = false
+SCENE_CFG_ID_FIELD.default_value = 0
+SCENE_CFG_ID_FIELD.type = 5
+SCENE_CFG_ID_FIELD.cpp_type = 1
+
+SCENE_CFG_NAME_FIELD.name = "name"
+SCENE_CFG_NAME_FIELD.full_name = ".ftcfg.scene_cfg.name"
+SCENE_CFG_NAME_FIELD.number = 2
+SCENE_CFG_NAME_FIELD.index = 1
+SCENE_CFG_NAME_FIELD.label = 2
+SCENE_CFG_NAME_FIELD.has_default_value = false
+SCENE_CFG_NAME_FIELD.default_value = 0
+SCENE_CFG_NAME_FIELD.type = 5
+SCENE_CFG_NAME_FIELD.cpp_type = 1
+
+SCENE_CFG_MAPID_FIELD.name = "mapid"
+SCENE_CFG_MAPID_FIELD.full_name = ".ftcfg.scene_cfg.mapid"
+SCENE_CFG_MAPID_FIELD.number = 3
+SCENE_CFG_MAPID_FIELD.index = 2
+SCENE_CFG_MAPID_FIELD.label = 2
+SCENE_CFG_MAPID_FIELD.has_default_value = false
+SCENE_CFG_MAPID_FIELD.default_value = 0
+SCENE_CFG_MAPID_FIELD.type = 5
+SCENE_CFG_MAPID_FIELD.cpp_type = 1
+
+SCENE_CFG_TYPE_FIELD.name = "type"
+SCENE_CFG_TYPE_FIELD.full_name = ".ftcfg.scene_cfg.type"
+SCENE_CFG_TYPE_FIELD.number = 4
+SCENE_CFG_TYPE_FIELD.index = 3
+SCENE_CFG_TYPE_FIELD.label = 2
+SCENE_CFG_TYPE_FIELD.has_default_value = false
+SCENE_CFG_TYPE_FIELD.default_value = nil
+SCENE_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ESCENETYPE
+SCENE_CFG_TYPE_FIELD.type = 14
+SCENE_CFG_TYPE_FIELD.cpp_type = 8
+
+SCENE_CFG_IS_SAME_SCENE_FIELD.name = "is_same_scene"
+SCENE_CFG_IS_SAME_SCENE_FIELD.full_name = ".ftcfg.scene_cfg.is_same_scene"
+SCENE_CFG_IS_SAME_SCENE_FIELD.number = 5
+SCENE_CFG_IS_SAME_SCENE_FIELD.index = 4
+SCENE_CFG_IS_SAME_SCENE_FIELD.label = 2
+SCENE_CFG_IS_SAME_SCENE_FIELD.has_default_value = false
+SCENE_CFG_IS_SAME_SCENE_FIELD.default_value = 0
+SCENE_CFG_IS_SAME_SCENE_FIELD.type = 5
+SCENE_CFG_IS_SAME_SCENE_FIELD.cpp_type = 1
+
+SCENE_CFG_SCENE_ROUTE_FIELD.name = "scene_route"
+SCENE_CFG_SCENE_ROUTE_FIELD.full_name = ".ftcfg.scene_cfg.scene_route"
+SCENE_CFG_SCENE_ROUTE_FIELD.number = 6
+SCENE_CFG_SCENE_ROUTE_FIELD.index = 5
+SCENE_CFG_SCENE_ROUTE_FIELD.label = 2
+SCENE_CFG_SCENE_ROUTE_FIELD.has_default_value = false
+SCENE_CFG_SCENE_ROUTE_FIELD.default_value = ""
+SCENE_CFG_SCENE_ROUTE_FIELD.type = 9
+SCENE_CFG_SCENE_ROUTE_FIELD.cpp_type = 9
+
+SCENE_CFG_CAMERA_PATH_RES_FIELD.name = "camera_path_res"
+SCENE_CFG_CAMERA_PATH_RES_FIELD.full_name = ".ftcfg.scene_cfg.camera_path_res"
+SCENE_CFG_CAMERA_PATH_RES_FIELD.number = 7
+SCENE_CFG_CAMERA_PATH_RES_FIELD.index = 6
+SCENE_CFG_CAMERA_PATH_RES_FIELD.label = 2
+SCENE_CFG_CAMERA_PATH_RES_FIELD.has_default_value = false
+SCENE_CFG_CAMERA_PATH_RES_FIELD.default_value = 0
+SCENE_CFG_CAMERA_PATH_RES_FIELD.type = 5
+SCENE_CFG_CAMERA_PATH_RES_FIELD.cpp_type = 1
+
+SCENE_CFG_SCENE_RECAST_FIELD.name = "scene_recast"
+SCENE_CFG_SCENE_RECAST_FIELD.full_name = ".ftcfg.scene_cfg.scene_recast"
+SCENE_CFG_SCENE_RECAST_FIELD.number = 8
+SCENE_CFG_SCENE_RECAST_FIELD.index = 7
+SCENE_CFG_SCENE_RECAST_FIELD.label = 2
+SCENE_CFG_SCENE_RECAST_FIELD.has_default_value = false
+SCENE_CFG_SCENE_RECAST_FIELD.default_value = ""
+SCENE_CFG_SCENE_RECAST_FIELD.type = 9
+SCENE_CFG_SCENE_RECAST_FIELD.cpp_type = 9
+
+SCENE_CFG_SCENE_LENGTH_FIELD.name = "scene_length"
+SCENE_CFG_SCENE_LENGTH_FIELD.full_name = ".ftcfg.scene_cfg.scene_length"
+SCENE_CFG_SCENE_LENGTH_FIELD.number = 9
+SCENE_CFG_SCENE_LENGTH_FIELD.index = 8
+SCENE_CFG_SCENE_LENGTH_FIELD.label = 2
+SCENE_CFG_SCENE_LENGTH_FIELD.has_default_value = false
+SCENE_CFG_SCENE_LENGTH_FIELD.default_value = 0
+SCENE_CFG_SCENE_LENGTH_FIELD.type = 5
+SCENE_CFG_SCENE_LENGTH_FIELD.cpp_type = 1
+
+SCENE_CFG_SCENE_WIDTH_FIELD.name = "scene_width"
+SCENE_CFG_SCENE_WIDTH_FIELD.full_name = ".ftcfg.scene_cfg.scene_width"
+SCENE_CFG_SCENE_WIDTH_FIELD.number = 10
+SCENE_CFG_SCENE_WIDTH_FIELD.index = 9
+SCENE_CFG_SCENE_WIDTH_FIELD.label = 2
+SCENE_CFG_SCENE_WIDTH_FIELD.has_default_value = false
+SCENE_CFG_SCENE_WIDTH_FIELD.default_value = 0
+SCENE_CFG_SCENE_WIDTH_FIELD.type = 5
+SCENE_CFG_SCENE_WIDTH_FIELD.cpp_type = 1
+
+SCENE_CFG_REFRESH_TYPE_FIELD.name = "refresh_type"
+SCENE_CFG_REFRESH_TYPE_FIELD.full_name = ".ftcfg.scene_cfg.refresh_type"
+SCENE_CFG_REFRESH_TYPE_FIELD.number = 11
+SCENE_CFG_REFRESH_TYPE_FIELD.index = 10
+SCENE_CFG_REFRESH_TYPE_FIELD.label = 2
+SCENE_CFG_REFRESH_TYPE_FIELD.has_default_value = false
+SCENE_CFG_REFRESH_TYPE_FIELD.default_value = 0
+SCENE_CFG_REFRESH_TYPE_FIELD.type = 5
+SCENE_CFG_REFRESH_TYPE_FIELD.cpp_type = 1
+
+SCENE_CFG_REFRESH_PARAMETER_FIELD.name = "refresh_parameter"
+SCENE_CFG_REFRESH_PARAMETER_FIELD.full_name = ".ftcfg.scene_cfg.refresh_parameter"
+SCENE_CFG_REFRESH_PARAMETER_FIELD.number = 12
+SCENE_CFG_REFRESH_PARAMETER_FIELD.index = 11
+SCENE_CFG_REFRESH_PARAMETER_FIELD.label = 3
+SCENE_CFG_REFRESH_PARAMETER_FIELD.has_default_value = false
+SCENE_CFG_REFRESH_PARAMETER_FIELD.default_value = {}
+SCENE_CFG_REFRESH_PARAMETER_FIELD.type = 5
+SCENE_CFG_REFRESH_PARAMETER_FIELD.cpp_type = 1
+
+SCENE_CFG_PARTNER_CARRY_FIELD.name = "partner_carry"
+SCENE_CFG_PARTNER_CARRY_FIELD.full_name = ".ftcfg.scene_cfg.partner_carry"
+SCENE_CFG_PARTNER_CARRY_FIELD.number = 13
+SCENE_CFG_PARTNER_CARRY_FIELD.index = 12
+SCENE_CFG_PARTNER_CARRY_FIELD.label = 2
+SCENE_CFG_PARTNER_CARRY_FIELD.has_default_value = false
+SCENE_CFG_PARTNER_CARRY_FIELD.default_value = 0
+SCENE_CFG_PARTNER_CARRY_FIELD.type = 5
+SCENE_CFG_PARTNER_CARRY_FIELD.cpp_type = 1
+
+SCENE_CFG_SHOW_CG_FIELD.name = "show_cg"
+SCENE_CFG_SHOW_CG_FIELD.full_name = ".ftcfg.scene_cfg.show_cg"
+SCENE_CFG_SHOW_CG_FIELD.number = 14
+SCENE_CFG_SHOW_CG_FIELD.index = 13
+SCENE_CFG_SHOW_CG_FIELD.label = 2
+SCENE_CFG_SHOW_CG_FIELD.has_default_value = false
+SCENE_CFG_SHOW_CG_FIELD.default_value = 0
+SCENE_CFG_SHOW_CG_FIELD.type = 5
+SCENE_CFG_SHOW_CG_FIELD.cpp_type = 1
+
+SCENE_CFG_RES_PATH_FIELD.name = "res_path"
+SCENE_CFG_RES_PATH_FIELD.full_name = ".ftcfg.scene_cfg.res_path"
+SCENE_CFG_RES_PATH_FIELD.number = 15
+SCENE_CFG_RES_PATH_FIELD.index = 14
+SCENE_CFG_RES_PATH_FIELD.label = 2
+SCENE_CFG_RES_PATH_FIELD.has_default_value = false
+SCENE_CFG_RES_PATH_FIELD.default_value = 0
+SCENE_CFG_RES_PATH_FIELD.type = 5
+SCENE_CFG_RES_PATH_FIELD.cpp_type = 1
+
+SCENE_CFG_BORN_X_FIELD.name = "born_x"
+SCENE_CFG_BORN_X_FIELD.full_name = ".ftcfg.scene_cfg.born_x"
+SCENE_CFG_BORN_X_FIELD.number = 16
+SCENE_CFG_BORN_X_FIELD.index = 15
+SCENE_CFG_BORN_X_FIELD.label = 2
+SCENE_CFG_BORN_X_FIELD.has_default_value = false
+SCENE_CFG_BORN_X_FIELD.default_value = 0.0
+SCENE_CFG_BORN_X_FIELD.type = 2
+SCENE_CFG_BORN_X_FIELD.cpp_type = 6
+
+SCENE_CFG_BORN_Y_FIELD.name = "born_y"
+SCENE_CFG_BORN_Y_FIELD.full_name = ".ftcfg.scene_cfg.born_y"
+SCENE_CFG_BORN_Y_FIELD.number = 17
+SCENE_CFG_BORN_Y_FIELD.index = 16
+SCENE_CFG_BORN_Y_FIELD.label = 2
+SCENE_CFG_BORN_Y_FIELD.has_default_value = false
+SCENE_CFG_BORN_Y_FIELD.default_value = 0.0
+SCENE_CFG_BORN_Y_FIELD.type = 2
+SCENE_CFG_BORN_Y_FIELD.cpp_type = 6
+
+SCENE_CFG_BORN_Z_FIELD.name = "born_z"
+SCENE_CFG_BORN_Z_FIELD.full_name = ".ftcfg.scene_cfg.born_z"
+SCENE_CFG_BORN_Z_FIELD.number = 18
+SCENE_CFG_BORN_Z_FIELD.index = 17
+SCENE_CFG_BORN_Z_FIELD.label = 2
+SCENE_CFG_BORN_Z_FIELD.has_default_value = false
+SCENE_CFG_BORN_Z_FIELD.default_value = 0.0
+SCENE_CFG_BORN_Z_FIELD.type = 2
+SCENE_CFG_BORN_Z_FIELD.cpp_type = 6
+
+SCENE_CFG_BORN_ROTATION_FIELD.name = "born_rotation"
+SCENE_CFG_BORN_ROTATION_FIELD.full_name = ".ftcfg.scene_cfg.born_rotation"
+SCENE_CFG_BORN_ROTATION_FIELD.number = 19
+SCENE_CFG_BORN_ROTATION_FIELD.index = 18
+SCENE_CFG_BORN_ROTATION_FIELD.label = 2
+SCENE_CFG_BORN_ROTATION_FIELD.has_default_value = false
+SCENE_CFG_BORN_ROTATION_FIELD.default_value = 0.0
+SCENE_CFG_BORN_ROTATION_FIELD.type = 2
+SCENE_CFG_BORN_ROTATION_FIELD.cpp_type = 6
+
+SCENE_CFG_GOAL_X_FIELD.name = "goal_x"
+SCENE_CFG_GOAL_X_FIELD.full_name = ".ftcfg.scene_cfg.goal_x"
+SCENE_CFG_GOAL_X_FIELD.number = 20
+SCENE_CFG_GOAL_X_FIELD.index = 19
+SCENE_CFG_GOAL_X_FIELD.label = 2
+SCENE_CFG_GOAL_X_FIELD.has_default_value = false
+SCENE_CFG_GOAL_X_FIELD.default_value = 0.0
+SCENE_CFG_GOAL_X_FIELD.type = 2
+SCENE_CFG_GOAL_X_FIELD.cpp_type = 6
+
+SCENE_CFG_GOAL_Y_FIELD.name = "goal_y"
+SCENE_CFG_GOAL_Y_FIELD.full_name = ".ftcfg.scene_cfg.goal_y"
+SCENE_CFG_GOAL_Y_FIELD.number = 21
+SCENE_CFG_GOAL_Y_FIELD.index = 20
+SCENE_CFG_GOAL_Y_FIELD.label = 2
+SCENE_CFG_GOAL_Y_FIELD.has_default_value = false
+SCENE_CFG_GOAL_Y_FIELD.default_value = 0.0
+SCENE_CFG_GOAL_Y_FIELD.type = 2
+SCENE_CFG_GOAL_Y_FIELD.cpp_type = 6
+
+SCENE_CFG_GOAL_Z_FIELD.name = "goal_z"
+SCENE_CFG_GOAL_Z_FIELD.full_name = ".ftcfg.scene_cfg.goal_z"
+SCENE_CFG_GOAL_Z_FIELD.number = 22
+SCENE_CFG_GOAL_Z_FIELD.index = 21
+SCENE_CFG_GOAL_Z_FIELD.label = 2
+SCENE_CFG_GOAL_Z_FIELD.has_default_value = false
+SCENE_CFG_GOAL_Z_FIELD.default_value = 0.0
+SCENE_CFG_GOAL_Z_FIELD.type = 2
+SCENE_CFG_GOAL_Z_FIELD.cpp_type = 6
+
+SCENE_CFG_DEFAULT_ATTACK_PATTERM_FIELD.name = "default_attack_patterm"
+SCENE_CFG_DEFAULT_ATTACK_PATTERM_FIELD.full_name = ".ftcfg.scene_cfg.default_attack_patterm"
+SCENE_CFG_DEFAULT_ATTACK_PATTERM_FIELD.number = 23
+SCENE_CFG_DEFAULT_ATTACK_PATTERM_FIELD.index = 22
+SCENE_CFG_DEFAULT_ATTACK_PATTERM_FIELD.label = 2
+SCENE_CFG_DEFAULT_ATTACK_PATTERM_FIELD.has_default_value = false
+SCENE_CFG_DEFAULT_ATTACK_PATTERM_FIELD.default_value = 0
+SCENE_CFG_DEFAULT_ATTACK_PATTERM_FIELD.type = 5
+SCENE_CFG_DEFAULT_ATTACK_PATTERM_FIELD.cpp_type = 1
+
+SCENE_CFG_SWITCH_ATTACK_PATTERM_FIELD.name = "switch_attack_patterm"
+SCENE_CFG_SWITCH_ATTACK_PATTERM_FIELD.full_name = ".ftcfg.scene_cfg.switch_attack_patterm"
+SCENE_CFG_SWITCH_ATTACK_PATTERM_FIELD.number = 24
+SCENE_CFG_SWITCH_ATTACK_PATTERM_FIELD.index = 23
+SCENE_CFG_SWITCH_ATTACK_PATTERM_FIELD.label = 2
+SCENE_CFG_SWITCH_ATTACK_PATTERM_FIELD.has_default_value = false
+SCENE_CFG_SWITCH_ATTACK_PATTERM_FIELD.default_value = 0
+SCENE_CFG_SWITCH_ATTACK_PATTERM_FIELD.type = 5
+SCENE_CFG_SWITCH_ATTACK_PATTERM_FIELD.cpp_type = 1
+
+SCENE_CFG_CAN_TEAM_CALL_FIELD.name = "can_team_call"
+SCENE_CFG_CAN_TEAM_CALL_FIELD.full_name = ".ftcfg.scene_cfg.can_team_call"
+SCENE_CFG_CAN_TEAM_CALL_FIELD.number = 25
+SCENE_CFG_CAN_TEAM_CALL_FIELD.index = 24
+SCENE_CFG_CAN_TEAM_CALL_FIELD.label = 2
+SCENE_CFG_CAN_TEAM_CALL_FIELD.has_default_value = false
+SCENE_CFG_CAN_TEAM_CALL_FIELD.default_value = 0
+SCENE_CFG_CAN_TEAM_CALL_FIELD.type = 5
+SCENE_CFG_CAN_TEAM_CALL_FIELD.cpp_type = 1
+
+SCENE_CFG_IS_BATTLE_FIELD_FIELD.name = "is_battle_field"
+SCENE_CFG_IS_BATTLE_FIELD_FIELD.full_name = ".ftcfg.scene_cfg.is_battle_field"
+SCENE_CFG_IS_BATTLE_FIELD_FIELD.number = 26
+SCENE_CFG_IS_BATTLE_FIELD_FIELD.index = 25
+SCENE_CFG_IS_BATTLE_FIELD_FIELD.label = 2
+SCENE_CFG_IS_BATTLE_FIELD_FIELD.has_default_value = false
+SCENE_CFG_IS_BATTLE_FIELD_FIELD.default_value = 0
+SCENE_CFG_IS_BATTLE_FIELD_FIELD.type = 5
+SCENE_CFG_IS_BATTLE_FIELD_FIELD.cpp_type = 1
+
+SCENE_CFG_CAM_OPTIONS_ID_FIELD.name = "cam_options_id"
+SCENE_CFG_CAM_OPTIONS_ID_FIELD.full_name = ".ftcfg.scene_cfg.cam_options_id"
+SCENE_CFG_CAM_OPTIONS_ID_FIELD.number = 27
+SCENE_CFG_CAM_OPTIONS_ID_FIELD.index = 26
+SCENE_CFG_CAM_OPTIONS_ID_FIELD.label = 2
+SCENE_CFG_CAM_OPTIONS_ID_FIELD.has_default_value = false
+SCENE_CFG_CAM_OPTIONS_ID_FIELD.default_value = 0
+SCENE_CFG_CAM_OPTIONS_ID_FIELD.type = 5
+SCENE_CFG_CAM_OPTIONS_ID_FIELD.cpp_type = 1
+
+SCENE_CFG_CAN_USE_WORLDMAP_FIELD.name = "can_use_worldmap"
+SCENE_CFG_CAN_USE_WORLDMAP_FIELD.full_name = ".ftcfg.scene_cfg.can_use_worldmap"
+SCENE_CFG_CAN_USE_WORLDMAP_FIELD.number = 28
+SCENE_CFG_CAN_USE_WORLDMAP_FIELD.index = 27
+SCENE_CFG_CAN_USE_WORLDMAP_FIELD.label = 2
+SCENE_CFG_CAN_USE_WORLDMAP_FIELD.has_default_value = false
+SCENE_CFG_CAN_USE_WORLDMAP_FIELD.default_value = 0
+SCENE_CFG_CAN_USE_WORLDMAP_FIELD.type = 5
+SCENE_CFG_CAN_USE_WORLDMAP_FIELD.cpp_type = 1
+
+SCENE_CFG.name = "scene_cfg"
+SCENE_CFG.full_name = ".ftcfg.scene_cfg"
+SCENE_CFG.nested_types = {}
+SCENE_CFG.enum_types = {}
+SCENE_CFG.fields = {SCENE_CFG_ID_FIELD, SCENE_CFG_NAME_FIELD, SCENE_CFG_MAPID_FIELD, SCENE_CFG_TYPE_FIELD, SCENE_CFG_IS_SAME_SCENE_FIELD, SCENE_CFG_SCENE_ROUTE_FIELD, SCENE_CFG_CAMERA_PATH_RES_FIELD, SCENE_CFG_SCENE_RECAST_FIELD, SCENE_CFG_SCENE_LENGTH_FIELD, SCENE_CFG_SCENE_WIDTH_FIELD, SCENE_CFG_REFRESH_TYPE_FIELD, SCENE_CFG_REFRESH_PARAMETER_FIELD, SCENE_CFG_PARTNER_CARRY_FIELD, SCENE_CFG_SHOW_CG_FIELD, SCENE_CFG_RES_PATH_FIELD, SCENE_CFG_BORN_X_FIELD, SCENE_CFG_BORN_Y_FIELD, SCENE_CFG_BORN_Z_FIELD, SCENE_CFG_BORN_ROTATION_FIELD, SCENE_CFG_GOAL_X_FIELD, SCENE_CFG_GOAL_Y_FIELD, SCENE_CFG_GOAL_Z_FIELD, SCENE_CFG_DEFAULT_ATTACK_PATTERM_FIELD, SCENE_CFG_SWITCH_ATTACK_PATTERM_FIELD, SCENE_CFG_CAN_TEAM_CALL_FIELD, SCENE_CFG_IS_BATTLE_FIELD_FIELD, SCENE_CFG_CAM_OPTIONS_ID_FIELD, SCENE_CFG_CAN_USE_WORLDMAP_FIELD}
+SCENE_CFG.is_extendable = false
+SCENE_CFG.extensions = {}
+SCENE_CFGS_ITEMS_FIELD.name = "items"
+SCENE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.scene_cfgs.items"
+SCENE_CFGS_ITEMS_FIELD.number = 1
+SCENE_CFGS_ITEMS_FIELD.index = 0
+SCENE_CFGS_ITEMS_FIELD.label = 3
+SCENE_CFGS_ITEMS_FIELD.has_default_value = false
+SCENE_CFGS_ITEMS_FIELD.default_value = {}
+SCENE_CFGS_ITEMS_FIELD.message_type = SCENE_CFG
+SCENE_CFGS_ITEMS_FIELD.type = 11
+SCENE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SCENE_CFGS.name = "scene_cfgs"
+SCENE_CFGS.full_name = ".ftcfg.scene_cfgs"
+SCENE_CFGS.nested_types = {}
+SCENE_CFGS.enum_types = {}
+SCENE_CFGS.fields = {SCENE_CFGS_ITEMS_FIELD}
+SCENE_CFGS.is_extendable = false
+SCENE_CFGS.extensions = {}
+SKILL_CFG_ID_FIELD.name = "id"
+SKILL_CFG_ID_FIELD.full_name = ".ftcfg.skill_cfg.id"
+SKILL_CFG_ID_FIELD.number = 1
+SKILL_CFG_ID_FIELD.index = 0
+SKILL_CFG_ID_FIELD.label = 2
+SKILL_CFG_ID_FIELD.has_default_value = false
+SKILL_CFG_ID_FIELD.default_value = 0
+SKILL_CFG_ID_FIELD.type = 5
+SKILL_CFG_ID_FIELD.cpp_type = 1
+
+SKILL_CFG_NAME_TIP_FIELD.name = "name_tip"
+SKILL_CFG_NAME_TIP_FIELD.full_name = ".ftcfg.skill_cfg.name_tip"
+SKILL_CFG_NAME_TIP_FIELD.number = 2
+SKILL_CFG_NAME_TIP_FIELD.index = 1
+SKILL_CFG_NAME_TIP_FIELD.label = 2
+SKILL_CFG_NAME_TIP_FIELD.has_default_value = false
+SKILL_CFG_NAME_TIP_FIELD.default_value = ""
+SKILL_CFG_NAME_TIP_FIELD.type = 9
+SKILL_CFG_NAME_TIP_FIELD.cpp_type = 9
+
+SKILL_CFG_NAME_FIELD.name = "name"
+SKILL_CFG_NAME_FIELD.full_name = ".ftcfg.skill_cfg.name"
+SKILL_CFG_NAME_FIELD.number = 3
+SKILL_CFG_NAME_FIELD.index = 2
+SKILL_CFG_NAME_FIELD.label = 2
+SKILL_CFG_NAME_FIELD.has_default_value = false
+SKILL_CFG_NAME_FIELD.default_value = 0
+SKILL_CFG_NAME_FIELD.type = 5
+SKILL_CFG_NAME_FIELD.cpp_type = 1
+
+SKILL_CFG_SKILL_LEVEL_FIELD.name = "skill_level"
+SKILL_CFG_SKILL_LEVEL_FIELD.full_name = ".ftcfg.skill_cfg.skill_level"
+SKILL_CFG_SKILL_LEVEL_FIELD.number = 4
+SKILL_CFG_SKILL_LEVEL_FIELD.index = 3
+SKILL_CFG_SKILL_LEVEL_FIELD.label = 2
+SKILL_CFG_SKILL_LEVEL_FIELD.has_default_value = false
+SKILL_CFG_SKILL_LEVEL_FIELD.default_value = 0
+SKILL_CFG_SKILL_LEVEL_FIELD.type = 5
+SKILL_CFG_SKILL_LEVEL_FIELD.cpp_type = 1
+
+SKILL_CFG_PLAYER_LEVEL_FIELD.name = "player_level"
+SKILL_CFG_PLAYER_LEVEL_FIELD.full_name = ".ftcfg.skill_cfg.player_level"
+SKILL_CFG_PLAYER_LEVEL_FIELD.number = 5
+SKILL_CFG_PLAYER_LEVEL_FIELD.index = 4
+SKILL_CFG_PLAYER_LEVEL_FIELD.label = 2
+SKILL_CFG_PLAYER_LEVEL_FIELD.has_default_value = false
+SKILL_CFG_PLAYER_LEVEL_FIELD.default_value = 0
+SKILL_CFG_PLAYER_LEVEL_FIELD.type = 5
+SKILL_CFG_PLAYER_LEVEL_FIELD.cpp_type = 1
+
+SKILL_CFG_LEVELUP_COST_FIELD.name = "levelup_cost"
+SKILL_CFG_LEVELUP_COST_FIELD.full_name = ".ftcfg.skill_cfg.levelup_cost"
+SKILL_CFG_LEVELUP_COST_FIELD.number = 6
+SKILL_CFG_LEVELUP_COST_FIELD.index = 5
+SKILL_CFG_LEVELUP_COST_FIELD.label = 2
+SKILL_CFG_LEVELUP_COST_FIELD.has_default_value = false
+SKILL_CFG_LEVELUP_COST_FIELD.default_value = 0
+SKILL_CFG_LEVELUP_COST_FIELD.type = 5
+SKILL_CFG_LEVELUP_COST_FIELD.cpp_type = 1
+
+SKILL_CFG_NEXT_LEVEL_ID_FIELD.name = "next_level_id"
+SKILL_CFG_NEXT_LEVEL_ID_FIELD.full_name = ".ftcfg.skill_cfg.next_level_id"
+SKILL_CFG_NEXT_LEVEL_ID_FIELD.number = 7
+SKILL_CFG_NEXT_LEVEL_ID_FIELD.index = 6
+SKILL_CFG_NEXT_LEVEL_ID_FIELD.label = 2
+SKILL_CFG_NEXT_LEVEL_ID_FIELD.has_default_value = false
+SKILL_CFG_NEXT_LEVEL_ID_FIELD.default_value = 0
+SKILL_CFG_NEXT_LEVEL_ID_FIELD.type = 5
+SKILL_CFG_NEXT_LEVEL_ID_FIELD.cpp_type = 1
+
+SKILL_CFG_SKILL_ICON_FIELD.name = "skill_icon"
+SKILL_CFG_SKILL_ICON_FIELD.full_name = ".ftcfg.skill_cfg.skill_icon"
+SKILL_CFG_SKILL_ICON_FIELD.number = 8
+SKILL_CFG_SKILL_ICON_FIELD.index = 7
+SKILL_CFG_SKILL_ICON_FIELD.label = 2
+SKILL_CFG_SKILL_ICON_FIELD.has_default_value = false
+SKILL_CFG_SKILL_ICON_FIELD.default_value = 0
+SKILL_CFG_SKILL_ICON_FIELD.type = 5
+SKILL_CFG_SKILL_ICON_FIELD.cpp_type = 1
+
+SKILL_CFG_SKILL_PROF_FIELD.name = "skill_prof"
+SKILL_CFG_SKILL_PROF_FIELD.full_name = ".ftcfg.skill_cfg.skill_prof"
+SKILL_CFG_SKILL_PROF_FIELD.number = 9
+SKILL_CFG_SKILL_PROF_FIELD.index = 8
+SKILL_CFG_SKILL_PROF_FIELD.label = 2
+SKILL_CFG_SKILL_PROF_FIELD.has_default_value = false
+SKILL_CFG_SKILL_PROF_FIELD.default_value = 0
+SKILL_CFG_SKILL_PROF_FIELD.type = 5
+SKILL_CFG_SKILL_PROF_FIELD.cpp_type = 1
+
+SKILL_CFG_TIPS2_FIELD.name = "tips2"
+SKILL_CFG_TIPS2_FIELD.full_name = ".ftcfg.skill_cfg.tips2"
+SKILL_CFG_TIPS2_FIELD.number = 10
+SKILL_CFG_TIPS2_FIELD.index = 9
+SKILL_CFG_TIPS2_FIELD.label = 2
+SKILL_CFG_TIPS2_FIELD.has_default_value = false
+SKILL_CFG_TIPS2_FIELD.default_value = 0
+SKILL_CFG_TIPS2_FIELD.type = 5
+SKILL_CFG_TIPS2_FIELD.cpp_type = 1
+
+SKILL_CFG_TIPS_FIELD.name = "tips"
+SKILL_CFG_TIPS_FIELD.full_name = ".ftcfg.skill_cfg.tips"
+SKILL_CFG_TIPS_FIELD.number = 11
+SKILL_CFG_TIPS_FIELD.index = 10
+SKILL_CFG_TIPS_FIELD.label = 2
+SKILL_CFG_TIPS_FIELD.has_default_value = false
+SKILL_CFG_TIPS_FIELD.default_value = 0
+SKILL_CFG_TIPS_FIELD.type = 5
+SKILL_CFG_TIPS_FIELD.cpp_type = 1
+
+SKILL_CFG_TIPS3_FIELD.name = "tips3"
+SKILL_CFG_TIPS3_FIELD.full_name = ".ftcfg.skill_cfg.tips3"
+SKILL_CFG_TIPS3_FIELD.number = 12
+SKILL_CFG_TIPS3_FIELD.index = 11
+SKILL_CFG_TIPS3_FIELD.label = 2
+SKILL_CFG_TIPS3_FIELD.has_default_value = false
+SKILL_CFG_TIPS3_FIELD.default_value = 0
+SKILL_CFG_TIPS3_FIELD.type = 5
+SKILL_CFG_TIPS3_FIELD.cpp_type = 1
+
+SKILL_CFG_TIPS_PARA1_FIELD.name = "tips_para1"
+SKILL_CFG_TIPS_PARA1_FIELD.full_name = ".ftcfg.skill_cfg.tips_para1"
+SKILL_CFG_TIPS_PARA1_FIELD.number = 13
+SKILL_CFG_TIPS_PARA1_FIELD.index = 12
+SKILL_CFG_TIPS_PARA1_FIELD.label = 2
+SKILL_CFG_TIPS_PARA1_FIELD.has_default_value = false
+SKILL_CFG_TIPS_PARA1_FIELD.default_value = 0.0
+SKILL_CFG_TIPS_PARA1_FIELD.type = 2
+SKILL_CFG_TIPS_PARA1_FIELD.cpp_type = 6
+
+SKILL_CFG_TIPS_PARA2_FIELD.name = "tips_para2"
+SKILL_CFG_TIPS_PARA2_FIELD.full_name = ".ftcfg.skill_cfg.tips_para2"
+SKILL_CFG_TIPS_PARA2_FIELD.number = 14
+SKILL_CFG_TIPS_PARA2_FIELD.index = 13
+SKILL_CFG_TIPS_PARA2_FIELD.label = 2
+SKILL_CFG_TIPS_PARA2_FIELD.has_default_value = false
+SKILL_CFG_TIPS_PARA2_FIELD.default_value = 0.0
+SKILL_CFG_TIPS_PARA2_FIELD.type = 2
+SKILL_CFG_TIPS_PARA2_FIELD.cpp_type = 6
+
+SKILL_CFG_TIPS_PARA3_FIELD.name = "tips_para3"
+SKILL_CFG_TIPS_PARA3_FIELD.full_name = ".ftcfg.skill_cfg.tips_para3"
+SKILL_CFG_TIPS_PARA3_FIELD.number = 15
+SKILL_CFG_TIPS_PARA3_FIELD.index = 14
+SKILL_CFG_TIPS_PARA3_FIELD.label = 2
+SKILL_CFG_TIPS_PARA3_FIELD.has_default_value = false
+SKILL_CFG_TIPS_PARA3_FIELD.default_value = 0.0
+SKILL_CFG_TIPS_PARA3_FIELD.type = 2
+SKILL_CFG_TIPS_PARA3_FIELD.cpp_type = 6
+
+SKILL_CFG_TIPS_PARA4_FIELD.name = "tips_para4"
+SKILL_CFG_TIPS_PARA4_FIELD.full_name = ".ftcfg.skill_cfg.tips_para4"
+SKILL_CFG_TIPS_PARA4_FIELD.number = 16
+SKILL_CFG_TIPS_PARA4_FIELD.index = 15
+SKILL_CFG_TIPS_PARA4_FIELD.label = 2
+SKILL_CFG_TIPS_PARA4_FIELD.has_default_value = false
+SKILL_CFG_TIPS_PARA4_FIELD.default_value = 0.0
+SKILL_CFG_TIPS_PARA4_FIELD.type = 2
+SKILL_CFG_TIPS_PARA4_FIELD.cpp_type = 6
+
+SKILL_CFG_TIPS_PARA5_FIELD.name = "tips_para5"
+SKILL_CFG_TIPS_PARA5_FIELD.full_name = ".ftcfg.skill_cfg.tips_para5"
+SKILL_CFG_TIPS_PARA5_FIELD.number = 17
+SKILL_CFG_TIPS_PARA5_FIELD.index = 16
+SKILL_CFG_TIPS_PARA5_FIELD.label = 2
+SKILL_CFG_TIPS_PARA5_FIELD.has_default_value = false
+SKILL_CFG_TIPS_PARA5_FIELD.default_value = 0.0
+SKILL_CFG_TIPS_PARA5_FIELD.type = 2
+SKILL_CFG_TIPS_PARA5_FIELD.cpp_type = 6
+
+SKILL_CFG_TIPS_PARA6_FIELD.name = "tips_para6"
+SKILL_CFG_TIPS_PARA6_FIELD.full_name = ".ftcfg.skill_cfg.tips_para6"
+SKILL_CFG_TIPS_PARA6_FIELD.number = 18
+SKILL_CFG_TIPS_PARA6_FIELD.index = 17
+SKILL_CFG_TIPS_PARA6_FIELD.label = 2
+SKILL_CFG_TIPS_PARA6_FIELD.has_default_value = false
+SKILL_CFG_TIPS_PARA6_FIELD.default_value = 0.0
+SKILL_CFG_TIPS_PARA6_FIELD.type = 2
+SKILL_CFG_TIPS_PARA6_FIELD.cpp_type = 6
+
+SKILL_CFG_NEXT_SKILL_FIELD.name = "next_skill"
+SKILL_CFG_NEXT_SKILL_FIELD.full_name = ".ftcfg.skill_cfg.next_skill"
+SKILL_CFG_NEXT_SKILL_FIELD.number = 19
+SKILL_CFG_NEXT_SKILL_FIELD.index = 18
+SKILL_CFG_NEXT_SKILL_FIELD.label = 2
+SKILL_CFG_NEXT_SKILL_FIELD.has_default_value = false
+SKILL_CFG_NEXT_SKILL_FIELD.default_value = 0
+SKILL_CFG_NEXT_SKILL_FIELD.type = 5
+SKILL_CFG_NEXT_SKILL_FIELD.cpp_type = 1
+
+SKILL_CFG_NEXT_CHANGE_SKILL_FIELD.name = "next_change_skill"
+SKILL_CFG_NEXT_CHANGE_SKILL_FIELD.full_name = ".ftcfg.skill_cfg.next_change_skill"
+SKILL_CFG_NEXT_CHANGE_SKILL_FIELD.number = 20
+SKILL_CFG_NEXT_CHANGE_SKILL_FIELD.index = 19
+SKILL_CFG_NEXT_CHANGE_SKILL_FIELD.label = 2
+SKILL_CFG_NEXT_CHANGE_SKILL_FIELD.has_default_value = false
+SKILL_CFG_NEXT_CHANGE_SKILL_FIELD.default_value = 0
+SKILL_CFG_NEXT_CHANGE_SKILL_FIELD.type = 5
+SKILL_CFG_NEXT_CHANGE_SKILL_FIELD.cpp_type = 1
+
+SKILL_CFG_AUTO_SKILL_FIELD.name = "auto_skill"
+SKILL_CFG_AUTO_SKILL_FIELD.full_name = ".ftcfg.skill_cfg.auto_skill"
+SKILL_CFG_AUTO_SKILL_FIELD.number = 21
+SKILL_CFG_AUTO_SKILL_FIELD.index = 20
+SKILL_CFG_AUTO_SKILL_FIELD.label = 2
+SKILL_CFG_AUTO_SKILL_FIELD.has_default_value = false
+SKILL_CFG_AUTO_SKILL_FIELD.default_value = false
+SKILL_CFG_AUTO_SKILL_FIELD.type = 8
+SKILL_CFG_AUTO_SKILL_FIELD.cpp_type = 7
+
+SKILL_CFG_NEXT_SKILL_TIME_FIELD.name = "next_skill_time"
+SKILL_CFG_NEXT_SKILL_TIME_FIELD.full_name = ".ftcfg.skill_cfg.next_skill_time"
+SKILL_CFG_NEXT_SKILL_TIME_FIELD.number = 22
+SKILL_CFG_NEXT_SKILL_TIME_FIELD.index = 21
+SKILL_CFG_NEXT_SKILL_TIME_FIELD.label = 2
+SKILL_CFG_NEXT_SKILL_TIME_FIELD.has_default_value = false
+SKILL_CFG_NEXT_SKILL_TIME_FIELD.default_value = 0
+SKILL_CFG_NEXT_SKILL_TIME_FIELD.type = 5
+SKILL_CFG_NEXT_SKILL_TIME_FIELD.cpp_type = 1
+
+SKILL_CFG_SKILL_TYPE_FIELD.name = "skill_type"
+SKILL_CFG_SKILL_TYPE_FIELD.full_name = ".ftcfg.skill_cfg.skill_type"
+SKILL_CFG_SKILL_TYPE_FIELD.number = 23
+SKILL_CFG_SKILL_TYPE_FIELD.index = 22
+SKILL_CFG_SKILL_TYPE_FIELD.label = 2
+SKILL_CFG_SKILL_TYPE_FIELD.has_default_value = false
+SKILL_CFG_SKILL_TYPE_FIELD.default_value = nil
+SKILL_CFG_SKILL_TYPE_FIELD.enum_type = config_predefine_pb.ESKILLTYPE
+SKILL_CFG_SKILL_TYPE_FIELD.type = 14
+SKILL_CFG_SKILL_TYPE_FIELD.cpp_type = 8
+
+SKILL_CFG_ENERGY_COST_TYPE_FIELD.name = "energy_cost_type"
+SKILL_CFG_ENERGY_COST_TYPE_FIELD.full_name = ".ftcfg.skill_cfg.energy_cost_type"
+SKILL_CFG_ENERGY_COST_TYPE_FIELD.number = 24
+SKILL_CFG_ENERGY_COST_TYPE_FIELD.index = 23
+SKILL_CFG_ENERGY_COST_TYPE_FIELD.label = 2
+SKILL_CFG_ENERGY_COST_TYPE_FIELD.has_default_value = false
+SKILL_CFG_ENERGY_COST_TYPE_FIELD.default_value = nil
+SKILL_CFG_ENERGY_COST_TYPE_FIELD.enum_type = config_predefine_pb.ESKILLCOSTTYPE
+SKILL_CFG_ENERGY_COST_TYPE_FIELD.type = 14
+SKILL_CFG_ENERGY_COST_TYPE_FIELD.cpp_type = 8
+
+SKILL_CFG_ENERGY_VALUE_FIELD.name = "energy_value"
+SKILL_CFG_ENERGY_VALUE_FIELD.full_name = ".ftcfg.skill_cfg.energy_value"
+SKILL_CFG_ENERGY_VALUE_FIELD.number = 25
+SKILL_CFG_ENERGY_VALUE_FIELD.index = 24
+SKILL_CFG_ENERGY_VALUE_FIELD.label = 2
+SKILL_CFG_ENERGY_VALUE_FIELD.has_default_value = false
+SKILL_CFG_ENERGY_VALUE_FIELD.default_value = 0
+SKILL_CFG_ENERGY_VALUE_FIELD.type = 5
+SKILL_CFG_ENERGY_VALUE_FIELD.cpp_type = 1
+
+SKILL_CFG_MAX_ENERGY_VALUE_FIELD.name = "max_energy_value"
+SKILL_CFG_MAX_ENERGY_VALUE_FIELD.full_name = ".ftcfg.skill_cfg.max_energy_value"
+SKILL_CFG_MAX_ENERGY_VALUE_FIELD.number = 26
+SKILL_CFG_MAX_ENERGY_VALUE_FIELD.index = 25
+SKILL_CFG_MAX_ENERGY_VALUE_FIELD.label = 2
+SKILL_CFG_MAX_ENERGY_VALUE_FIELD.has_default_value = false
+SKILL_CFG_MAX_ENERGY_VALUE_FIELD.default_value = 0
+SKILL_CFG_MAX_ENERGY_VALUE_FIELD.type = 5
+SKILL_CFG_MAX_ENERGY_VALUE_FIELD.cpp_type = 1
+
+SKILL_CFG_RET_ENERGY_VALUE_FIELD.name = "ret_energy_value"
+SKILL_CFG_RET_ENERGY_VALUE_FIELD.full_name = ".ftcfg.skill_cfg.ret_energy_value"
+SKILL_CFG_RET_ENERGY_VALUE_FIELD.number = 27
+SKILL_CFG_RET_ENERGY_VALUE_FIELD.index = 26
+SKILL_CFG_RET_ENERGY_VALUE_FIELD.label = 2
+SKILL_CFG_RET_ENERGY_VALUE_FIELD.has_default_value = false
+SKILL_CFG_RET_ENERGY_VALUE_FIELD.default_value = 0
+SKILL_CFG_RET_ENERGY_VALUE_FIELD.type = 5
+SKILL_CFG_RET_ENERGY_VALUE_FIELD.cpp_type = 1
+
+SKILL_CFG_RET_HP_EFFECT_FIELD.name = "ret_hp_effect"
+SKILL_CFG_RET_HP_EFFECT_FIELD.full_name = ".ftcfg.skill_cfg.ret_hp_effect"
+SKILL_CFG_RET_HP_EFFECT_FIELD.number = 28
+SKILL_CFG_RET_HP_EFFECT_FIELD.index = 27
+SKILL_CFG_RET_HP_EFFECT_FIELD.label = 2
+SKILL_CFG_RET_HP_EFFECT_FIELD.has_default_value = false
+SKILL_CFG_RET_HP_EFFECT_FIELD.default_value = 0
+SKILL_CFG_RET_HP_EFFECT_FIELD.type = 5
+SKILL_CFG_RET_HP_EFFECT_FIELD.cpp_type = 1
+
+SKILL_CFG_SHOW_PROGRESS_FIELD.name = "show_progress"
+SKILL_CFG_SHOW_PROGRESS_FIELD.full_name = ".ftcfg.skill_cfg.show_progress"
+SKILL_CFG_SHOW_PROGRESS_FIELD.number = 29
+SKILL_CFG_SHOW_PROGRESS_FIELD.index = 28
+SKILL_CFG_SHOW_PROGRESS_FIELD.label = 2
+SKILL_CFG_SHOW_PROGRESS_FIELD.has_default_value = false
+SKILL_CFG_SHOW_PROGRESS_FIELD.default_value = 0
+SKILL_CFG_SHOW_PROGRESS_FIELD.type = 5
+SKILL_CFG_SHOW_PROGRESS_FIELD.cpp_type = 1
+
+SKILL_CFG_PROGRESS_WORD_FIELD.name = "progress_word"
+SKILL_CFG_PROGRESS_WORD_FIELD.full_name = ".ftcfg.skill_cfg.progress_word"
+SKILL_CFG_PROGRESS_WORD_FIELD.number = 30
+SKILL_CFG_PROGRESS_WORD_FIELD.index = 29
+SKILL_CFG_PROGRESS_WORD_FIELD.label = 2
+SKILL_CFG_PROGRESS_WORD_FIELD.has_default_value = false
+SKILL_CFG_PROGRESS_WORD_FIELD.default_value = 0
+SKILL_CFG_PROGRESS_WORD_FIELD.type = 5
+SKILL_CFG_PROGRESS_WORD_FIELD.cpp_type = 1
+
+SKILL_CFG_IS_TRIGGER_PASSIVE_FIELD.name = "is_trigger_passive"
+SKILL_CFG_IS_TRIGGER_PASSIVE_FIELD.full_name = ".ftcfg.skill_cfg.is_trigger_passive"
+SKILL_CFG_IS_TRIGGER_PASSIVE_FIELD.number = 31
+SKILL_CFG_IS_TRIGGER_PASSIVE_FIELD.index = 30
+SKILL_CFG_IS_TRIGGER_PASSIVE_FIELD.label = 2
+SKILL_CFG_IS_TRIGGER_PASSIVE_FIELD.has_default_value = false
+SKILL_CFG_IS_TRIGGER_PASSIVE_FIELD.default_value = false
+SKILL_CFG_IS_TRIGGER_PASSIVE_FIELD.type = 8
+SKILL_CFG_IS_TRIGGER_PASSIVE_FIELD.cpp_type = 7
+
+SKILL_CFG_IS_PASSIVE_FIELD.name = "is_passive"
+SKILL_CFG_IS_PASSIVE_FIELD.full_name = ".ftcfg.skill_cfg.is_passive"
+SKILL_CFG_IS_PASSIVE_FIELD.number = 32
+SKILL_CFG_IS_PASSIVE_FIELD.index = 31
+SKILL_CFG_IS_PASSIVE_FIELD.label = 2
+SKILL_CFG_IS_PASSIVE_FIELD.has_default_value = false
+SKILL_CFG_IS_PASSIVE_FIELD.default_value = false
+SKILL_CFG_IS_PASSIVE_FIELD.type = 8
+SKILL_CFG_IS_PASSIVE_FIELD.cpp_type = 7
+
+SKILL_CFG_TRIGGER_TYPE_FIELD.name = "trigger_type"
+SKILL_CFG_TRIGGER_TYPE_FIELD.full_name = ".ftcfg.skill_cfg.trigger_type"
+SKILL_CFG_TRIGGER_TYPE_FIELD.number = 33
+SKILL_CFG_TRIGGER_TYPE_FIELD.index = 32
+SKILL_CFG_TRIGGER_TYPE_FIELD.label = 2
+SKILL_CFG_TRIGGER_TYPE_FIELD.has_default_value = false
+SKILL_CFG_TRIGGER_TYPE_FIELD.default_value = nil
+SKILL_CFG_TRIGGER_TYPE_FIELD.enum_type = config_predefine_pb.EBATTLEEVENTTYPE
+SKILL_CFG_TRIGGER_TYPE_FIELD.type = 14
+SKILL_CFG_TRIGGER_TYPE_FIELD.cpp_type = 8
+
+SKILL_CFG_ACCELERATE_FIELD.name = "accelerate"
+SKILL_CFG_ACCELERATE_FIELD.full_name = ".ftcfg.skill_cfg.accelerate"
+SKILL_CFG_ACCELERATE_FIELD.number = 34
+SKILL_CFG_ACCELERATE_FIELD.index = 33
+SKILL_CFG_ACCELERATE_FIELD.label = 2
+SKILL_CFG_ACCELERATE_FIELD.has_default_value = false
+SKILL_CFG_ACCELERATE_FIELD.default_value = false
+SKILL_CFG_ACCELERATE_FIELD.type = 8
+SKILL_CFG_ACCELERATE_FIELD.cpp_type = 7
+
+SKILL_CFG_IS_CONCURRENCY_FIELD.name = "is_concurrency"
+SKILL_CFG_IS_CONCURRENCY_FIELD.full_name = ".ftcfg.skill_cfg.is_concurrency"
+SKILL_CFG_IS_CONCURRENCY_FIELD.number = 35
+SKILL_CFG_IS_CONCURRENCY_FIELD.index = 34
+SKILL_CFG_IS_CONCURRENCY_FIELD.label = 2
+SKILL_CFG_IS_CONCURRENCY_FIELD.has_default_value = false
+SKILL_CFG_IS_CONCURRENCY_FIELD.default_value = false
+SKILL_CFG_IS_CONCURRENCY_FIELD.type = 8
+SKILL_CFG_IS_CONCURRENCY_FIELD.cpp_type = 7
+
+SKILL_CFG_INT_CHANNEL_WHEN_BEATEN_FIELD.name = "int_channel_when_beaten"
+SKILL_CFG_INT_CHANNEL_WHEN_BEATEN_FIELD.full_name = ".ftcfg.skill_cfg.int_channel_when_beaten"
+SKILL_CFG_INT_CHANNEL_WHEN_BEATEN_FIELD.number = 36
+SKILL_CFG_INT_CHANNEL_WHEN_BEATEN_FIELD.index = 35
+SKILL_CFG_INT_CHANNEL_WHEN_BEATEN_FIELD.label = 2
+SKILL_CFG_INT_CHANNEL_WHEN_BEATEN_FIELD.has_default_value = false
+SKILL_CFG_INT_CHANNEL_WHEN_BEATEN_FIELD.default_value = false
+SKILL_CFG_INT_CHANNEL_WHEN_BEATEN_FIELD.type = 8
+SKILL_CFG_INT_CHANNEL_WHEN_BEATEN_FIELD.cpp_type = 7
+
+SKILL_CFG_IS_CHANNEL_FIELD.name = "is_channel"
+SKILL_CFG_IS_CHANNEL_FIELD.full_name = ".ftcfg.skill_cfg.is_channel"
+SKILL_CFG_IS_CHANNEL_FIELD.number = 37
+SKILL_CFG_IS_CHANNEL_FIELD.index = 36
+SKILL_CFG_IS_CHANNEL_FIELD.label = 2
+SKILL_CFG_IS_CHANNEL_FIELD.has_default_value = false
+SKILL_CFG_IS_CHANNEL_FIELD.default_value = false
+SKILL_CFG_IS_CHANNEL_FIELD.type = 8
+SKILL_CFG_IS_CHANNEL_FIELD.cpp_type = 7
+
+SKILL_CFG_CHANNEL_TIME_FIELD.name = "channel_time"
+SKILL_CFG_CHANNEL_TIME_FIELD.full_name = ".ftcfg.skill_cfg.channel_time"
+SKILL_CFG_CHANNEL_TIME_FIELD.number = 38
+SKILL_CFG_CHANNEL_TIME_FIELD.index = 37
+SKILL_CFG_CHANNEL_TIME_FIELD.label = 2
+SKILL_CFG_CHANNEL_TIME_FIELD.has_default_value = false
+SKILL_CFG_CHANNEL_TIME_FIELD.default_value = 0
+SKILL_CFG_CHANNEL_TIME_FIELD.type = 5
+SKILL_CFG_CHANNEL_TIME_FIELD.cpp_type = 1
+
+SKILL_CFG_CAN_CANCEL_FIELD.name = "can_cancel"
+SKILL_CFG_CAN_CANCEL_FIELD.full_name = ".ftcfg.skill_cfg.can_cancel"
+SKILL_CFG_CAN_CANCEL_FIELD.number = 39
+SKILL_CFG_CAN_CANCEL_FIELD.index = 38
+SKILL_CFG_CAN_CANCEL_FIELD.label = 2
+SKILL_CFG_CAN_CANCEL_FIELD.has_default_value = false
+SKILL_CFG_CAN_CANCEL_FIELD.default_value = false
+SKILL_CFG_CAN_CANCEL_FIELD.type = 8
+SKILL_CFG_CAN_CANCEL_FIELD.cpp_type = 7
+
+SKILL_CFG_BASE_POS_FIELD.name = "base_pos"
+SKILL_CFG_BASE_POS_FIELD.full_name = ".ftcfg.skill_cfg.base_pos"
+SKILL_CFG_BASE_POS_FIELD.number = 40
+SKILL_CFG_BASE_POS_FIELD.index = 39
+SKILL_CFG_BASE_POS_FIELD.label = 2
+SKILL_CFG_BASE_POS_FIELD.has_default_value = false
+SKILL_CFG_BASE_POS_FIELD.default_value = nil
+SKILL_CFG_BASE_POS_FIELD.enum_type = config_predefine_pb.EBASEAREATYPE
+SKILL_CFG_BASE_POS_FIELD.type = 14
+SKILL_CFG_BASE_POS_FIELD.cpp_type = 8
+
+SKILL_CFG_TARGET_TYPE_FIELD.name = "target_type"
+SKILL_CFG_TARGET_TYPE_FIELD.full_name = ".ftcfg.skill_cfg.target_type"
+SKILL_CFG_TARGET_TYPE_FIELD.number = 41
+SKILL_CFG_TARGET_TYPE_FIELD.index = 40
+SKILL_CFG_TARGET_TYPE_FIELD.label = 2
+SKILL_CFG_TARGET_TYPE_FIELD.has_default_value = false
+SKILL_CFG_TARGET_TYPE_FIELD.default_value = 0
+SKILL_CFG_TARGET_TYPE_FIELD.type = 5
+SKILL_CFG_TARGET_TYPE_FIELD.cpp_type = 1
+
+SKILL_CFG_REMOVE_BUFF_WHEN_CANCEL_FIELD.name = "remove_buff_when_cancel"
+SKILL_CFG_REMOVE_BUFF_WHEN_CANCEL_FIELD.full_name = ".ftcfg.skill_cfg.remove_buff_when_cancel"
+SKILL_CFG_REMOVE_BUFF_WHEN_CANCEL_FIELD.number = 42
+SKILL_CFG_REMOVE_BUFF_WHEN_CANCEL_FIELD.index = 41
+SKILL_CFG_REMOVE_BUFF_WHEN_CANCEL_FIELD.label = 2
+SKILL_CFG_REMOVE_BUFF_WHEN_CANCEL_FIELD.has_default_value = false
+SKILL_CFG_REMOVE_BUFF_WHEN_CANCEL_FIELD.default_value = false
+SKILL_CFG_REMOVE_BUFF_WHEN_CANCEL_FIELD.type = 8
+SKILL_CFG_REMOVE_BUFF_WHEN_CANCEL_FIELD.cpp_type = 7
+
+SKILL_CFG_WORK_WHEN_FIELD.name = "work_when"
+SKILL_CFG_WORK_WHEN_FIELD.full_name = ".ftcfg.skill_cfg.work_when"
+SKILL_CFG_WORK_WHEN_FIELD.number = 43
+SKILL_CFG_WORK_WHEN_FIELD.index = 42
+SKILL_CFG_WORK_WHEN_FIELD.label = 2
+SKILL_CFG_WORK_WHEN_FIELD.has_default_value = false
+SKILL_CFG_WORK_WHEN_FIELD.default_value = 0
+SKILL_CFG_WORK_WHEN_FIELD.type = 5
+SKILL_CFG_WORK_WHEN_FIELD.cpp_type = 1
+
+SKILL_CFG_CD_GROUP_ID_FIELD.name = "cd_group_id"
+SKILL_CFG_CD_GROUP_ID_FIELD.full_name = ".ftcfg.skill_cfg.cd_group_id"
+SKILL_CFG_CD_GROUP_ID_FIELD.number = 44
+SKILL_CFG_CD_GROUP_ID_FIELD.index = 43
+SKILL_CFG_CD_GROUP_ID_FIELD.label = 2
+SKILL_CFG_CD_GROUP_ID_FIELD.has_default_value = false
+SKILL_CFG_CD_GROUP_ID_FIELD.default_value = 0
+SKILL_CFG_CD_GROUP_ID_FIELD.type = 5
+SKILL_CFG_CD_GROUP_ID_FIELD.cpp_type = 1
+
+SKILL_CFG_CD_TIME_FIELD.name = "cd_time"
+SKILL_CFG_CD_TIME_FIELD.full_name = ".ftcfg.skill_cfg.cd_time"
+SKILL_CFG_CD_TIME_FIELD.number = 45
+SKILL_CFG_CD_TIME_FIELD.index = 44
+SKILL_CFG_CD_TIME_FIELD.label = 2
+SKILL_CFG_CD_TIME_FIELD.has_default_value = false
+SKILL_CFG_CD_TIME_FIELD.default_value = 0.0
+SKILL_CFG_CD_TIME_FIELD.type = 2
+SKILL_CFG_CD_TIME_FIELD.cpp_type = 6
+
+SKILL_CFG_CD_NUM_FIELD.name = "cd_num"
+SKILL_CFG_CD_NUM_FIELD.full_name = ".ftcfg.skill_cfg.cd_num"
+SKILL_CFG_CD_NUM_FIELD.number = 46
+SKILL_CFG_CD_NUM_FIELD.index = 45
+SKILL_CFG_CD_NUM_FIELD.label = 2
+SKILL_CFG_CD_NUM_FIELD.has_default_value = false
+SKILL_CFG_CD_NUM_FIELD.default_value = 0
+SKILL_CFG_CD_NUM_FIELD.type = 5
+SKILL_CFG_CD_NUM_FIELD.cpp_type = 1
+
+SKILL_CFG_CAST_DISTANCE_FIELD.name = "cast_distance"
+SKILL_CFG_CAST_DISTANCE_FIELD.full_name = ".ftcfg.skill_cfg.cast_distance"
+SKILL_CFG_CAST_DISTANCE_FIELD.number = 47
+SKILL_CFG_CAST_DISTANCE_FIELD.index = 46
+SKILL_CFG_CAST_DISTANCE_FIELD.label = 2
+SKILL_CFG_CAST_DISTANCE_FIELD.has_default_value = false
+SKILL_CFG_CAST_DISTANCE_FIELD.default_value = 0.0
+SKILL_CFG_CAST_DISTANCE_FIELD.type = 2
+SKILL_CFG_CAST_DISTANCE_FIELD.cpp_type = 6
+
+SKILL_CFG_LOCKED_BY_SERVER_FIELD.name = "locked_by_server"
+SKILL_CFG_LOCKED_BY_SERVER_FIELD.full_name = ".ftcfg.skill_cfg.locked_by_server"
+SKILL_CFG_LOCKED_BY_SERVER_FIELD.number = 48
+SKILL_CFG_LOCKED_BY_SERVER_FIELD.index = 47
+SKILL_CFG_LOCKED_BY_SERVER_FIELD.label = 2
+SKILL_CFG_LOCKED_BY_SERVER_FIELD.has_default_value = false
+SKILL_CFG_LOCKED_BY_SERVER_FIELD.default_value = false
+SKILL_CFG_LOCKED_BY_SERVER_FIELD.type = 8
+SKILL_CFG_LOCKED_BY_SERVER_FIELD.cpp_type = 7
+
+SKILL_CFG_RANGE_TYPE_FIELD.name = "range_type"
+SKILL_CFG_RANGE_TYPE_FIELD.full_name = ".ftcfg.skill_cfg.range_type"
+SKILL_CFG_RANGE_TYPE_FIELD.number = 49
+SKILL_CFG_RANGE_TYPE_FIELD.index = 48
+SKILL_CFG_RANGE_TYPE_FIELD.label = 2
+SKILL_CFG_RANGE_TYPE_FIELD.has_default_value = false
+SKILL_CFG_RANGE_TYPE_FIELD.default_value = nil
+SKILL_CFG_RANGE_TYPE_FIELD.enum_type = config_predefine_pb.EAREATYPE
+SKILL_CFG_RANGE_TYPE_FIELD.type = 14
+SKILL_CFG_RANGE_TYPE_FIELD.cpp_type = 8
+
+SKILL_CFG_RANGE_PARA1_FIELD.name = "range_para1"
+SKILL_CFG_RANGE_PARA1_FIELD.full_name = ".ftcfg.skill_cfg.range_para1"
+SKILL_CFG_RANGE_PARA1_FIELD.number = 50
+SKILL_CFG_RANGE_PARA1_FIELD.index = 49
+SKILL_CFG_RANGE_PARA1_FIELD.label = 2
+SKILL_CFG_RANGE_PARA1_FIELD.has_default_value = false
+SKILL_CFG_RANGE_PARA1_FIELD.default_value = 0.0
+SKILL_CFG_RANGE_PARA1_FIELD.type = 2
+SKILL_CFG_RANGE_PARA1_FIELD.cpp_type = 6
+
+SKILL_CFG_RANGE_PARA2_FIELD.name = "range_para2"
+SKILL_CFG_RANGE_PARA2_FIELD.full_name = ".ftcfg.skill_cfg.range_para2"
+SKILL_CFG_RANGE_PARA2_FIELD.number = 51
+SKILL_CFG_RANGE_PARA2_FIELD.index = 50
+SKILL_CFG_RANGE_PARA2_FIELD.label = 2
+SKILL_CFG_RANGE_PARA2_FIELD.has_default_value = false
+SKILL_CFG_RANGE_PARA2_FIELD.default_value = 0.0
+SKILL_CFG_RANGE_PARA2_FIELD.type = 2
+SKILL_CFG_RANGE_PARA2_FIELD.cpp_type = 6
+
+SKILL_CFG_LOCK_TARGET_DISTANCE_FIELD.name = "lock_target_distance"
+SKILL_CFG_LOCK_TARGET_DISTANCE_FIELD.full_name = ".ftcfg.skill_cfg.lock_target_distance"
+SKILL_CFG_LOCK_TARGET_DISTANCE_FIELD.number = 52
+SKILL_CFG_LOCK_TARGET_DISTANCE_FIELD.index = 51
+SKILL_CFG_LOCK_TARGET_DISTANCE_FIELD.label = 2
+SKILL_CFG_LOCK_TARGET_DISTANCE_FIELD.has_default_value = false
+SKILL_CFG_LOCK_TARGET_DISTANCE_FIELD.default_value = 0.0
+SKILL_CFG_LOCK_TARGET_DISTANCE_FIELD.type = 2
+SKILL_CFG_LOCK_TARGET_DISTANCE_FIELD.cpp_type = 6
+
+SKILL_CFG_LOCK_MAX_COUNT_FIELD.name = "lock_max_count"
+SKILL_CFG_LOCK_MAX_COUNT_FIELD.full_name = ".ftcfg.skill_cfg.lock_max_count"
+SKILL_CFG_LOCK_MAX_COUNT_FIELD.number = 53
+SKILL_CFG_LOCK_MAX_COUNT_FIELD.index = 52
+SKILL_CFG_LOCK_MAX_COUNT_FIELD.label = 2
+SKILL_CFG_LOCK_MAX_COUNT_FIELD.has_default_value = false
+SKILL_CFG_LOCK_MAX_COUNT_FIELD.default_value = 0
+SKILL_CFG_LOCK_MAX_COUNT_FIELD.type = 5
+SKILL_CFG_LOCK_MAX_COUNT_FIELD.cpp_type = 1
+
+SKILL_CFG_CAST_SWING_TIME_FIELD.name = "cast_swing_time"
+SKILL_CFG_CAST_SWING_TIME_FIELD.full_name = ".ftcfg.skill_cfg.cast_swing_time"
+SKILL_CFG_CAST_SWING_TIME_FIELD.number = 54
+SKILL_CFG_CAST_SWING_TIME_FIELD.index = 53
+SKILL_CFG_CAST_SWING_TIME_FIELD.label = 2
+SKILL_CFG_CAST_SWING_TIME_FIELD.has_default_value = false
+SKILL_CFG_CAST_SWING_TIME_FIELD.default_value = 0
+SKILL_CFG_CAST_SWING_TIME_FIELD.type = 5
+SKILL_CFG_CAST_SWING_TIME_FIELD.cpp_type = 1
+
+SKILL_CFG_CAST_STIFF_TIME_FIELD.name = "cast_stiff_time"
+SKILL_CFG_CAST_STIFF_TIME_FIELD.full_name = ".ftcfg.skill_cfg.cast_stiff_time"
+SKILL_CFG_CAST_STIFF_TIME_FIELD.number = 55
+SKILL_CFG_CAST_STIFF_TIME_FIELD.index = 54
+SKILL_CFG_CAST_STIFF_TIME_FIELD.label = 2
+SKILL_CFG_CAST_STIFF_TIME_FIELD.has_default_value = false
+SKILL_CFG_CAST_STIFF_TIME_FIELD.default_value = 0
+SKILL_CFG_CAST_STIFF_TIME_FIELD.type = 5
+SKILL_CFG_CAST_STIFF_TIME_FIELD.cpp_type = 1
+
+SKILL_CFG_CAST_BACK_SWING_TIME_FIELD.name = "cast_back_swing_time"
+SKILL_CFG_CAST_BACK_SWING_TIME_FIELD.full_name = ".ftcfg.skill_cfg.cast_back_swing_time"
+SKILL_CFG_CAST_BACK_SWING_TIME_FIELD.number = 56
+SKILL_CFG_CAST_BACK_SWING_TIME_FIELD.index = 55
+SKILL_CFG_CAST_BACK_SWING_TIME_FIELD.label = 2
+SKILL_CFG_CAST_BACK_SWING_TIME_FIELD.has_default_value = false
+SKILL_CFG_CAST_BACK_SWING_TIME_FIELD.default_value = 0
+SKILL_CFG_CAST_BACK_SWING_TIME_FIELD.type = 5
+SKILL_CFG_CAST_BACK_SWING_TIME_FIELD.cpp_type = 1
+
+SKILL_CFG_MAGIC_PERFORMANCE_ID_FIELD.name = "magic_performance_id"
+SKILL_CFG_MAGIC_PERFORMANCE_ID_FIELD.full_name = ".ftcfg.skill_cfg.magic_performance_id"
+SKILL_CFG_MAGIC_PERFORMANCE_ID_FIELD.number = 57
+SKILL_CFG_MAGIC_PERFORMANCE_ID_FIELD.index = 56
+SKILL_CFG_MAGIC_PERFORMANCE_ID_FIELD.label = 2
+SKILL_CFG_MAGIC_PERFORMANCE_ID_FIELD.has_default_value = false
+SKILL_CFG_MAGIC_PERFORMANCE_ID_FIELD.default_value = ""
+SKILL_CFG_MAGIC_PERFORMANCE_ID_FIELD.type = 9
+SKILL_CFG_MAGIC_PERFORMANCE_ID_FIELD.cpp_type = 9
+
+SKILL_CFG_HIT_EFFECT_FIELD.name = "hit_effect"
+SKILL_CFG_HIT_EFFECT_FIELD.full_name = ".ftcfg.skill_cfg.hit_effect"
+SKILL_CFG_HIT_EFFECT_FIELD.number = 58
+SKILL_CFG_HIT_EFFECT_FIELD.index = 57
+SKILL_CFG_HIT_EFFECT_FIELD.label = 2
+SKILL_CFG_HIT_EFFECT_FIELD.has_default_value = false
+SKILL_CFG_HIT_EFFECT_FIELD.default_value = ""
+SKILL_CFG_HIT_EFFECT_FIELD.type = 9
+SKILL_CFG_HIT_EFFECT_FIELD.cpp_type = 9
+
+SKILL_CFG_HIT_EFFECT_TIME_FIELD.name = "hit_effect_time"
+SKILL_CFG_HIT_EFFECT_TIME_FIELD.full_name = ".ftcfg.skill_cfg.hit_effect_time"
+SKILL_CFG_HIT_EFFECT_TIME_FIELD.number = 59
+SKILL_CFG_HIT_EFFECT_TIME_FIELD.index = 58
+SKILL_CFG_HIT_EFFECT_TIME_FIELD.label = 2
+SKILL_CFG_HIT_EFFECT_TIME_FIELD.has_default_value = false
+SKILL_CFG_HIT_EFFECT_TIME_FIELD.default_value = 0
+SKILL_CFG_HIT_EFFECT_TIME_FIELD.type = 5
+SKILL_CFG_HIT_EFFECT_TIME_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_TYPE1_FIELD.name = "move_type1"
+SKILL_CFG_MOVE_TYPE1_FIELD.full_name = ".ftcfg.skill_cfg.move_type1"
+SKILL_CFG_MOVE_TYPE1_FIELD.number = 60
+SKILL_CFG_MOVE_TYPE1_FIELD.index = 59
+SKILL_CFG_MOVE_TYPE1_FIELD.label = 2
+SKILL_CFG_MOVE_TYPE1_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TYPE1_FIELD.default_value = 0
+SKILL_CFG_MOVE_TYPE1_FIELD.type = 5
+SKILL_CFG_MOVE_TYPE1_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_POINT1_FIELD.name = "move_point1"
+SKILL_CFG_MOVE_POINT1_FIELD.full_name = ".ftcfg.skill_cfg.move_point1"
+SKILL_CFG_MOVE_POINT1_FIELD.number = 61
+SKILL_CFG_MOVE_POINT1_FIELD.index = 60
+SKILL_CFG_MOVE_POINT1_FIELD.label = 2
+SKILL_CFG_MOVE_POINT1_FIELD.has_default_value = false
+SKILL_CFG_MOVE_POINT1_FIELD.default_value = 0
+SKILL_CFG_MOVE_POINT1_FIELD.type = 5
+SKILL_CFG_MOVE_POINT1_FIELD.cpp_type = 1
+
+SKILL_CFG_ADJUST_DISTANCE1_FIELD.name = "adjust_distance1"
+SKILL_CFG_ADJUST_DISTANCE1_FIELD.full_name = ".ftcfg.skill_cfg.adjust_distance1"
+SKILL_CFG_ADJUST_DISTANCE1_FIELD.number = 62
+SKILL_CFG_ADJUST_DISTANCE1_FIELD.index = 61
+SKILL_CFG_ADJUST_DISTANCE1_FIELD.label = 2
+SKILL_CFG_ADJUST_DISTANCE1_FIELD.has_default_value = false
+SKILL_CFG_ADJUST_DISTANCE1_FIELD.default_value = 0.0
+SKILL_CFG_ADJUST_DISTANCE1_FIELD.type = 2
+SKILL_CFG_ADJUST_DISTANCE1_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_DISTANCE1_FIELD.name = "move_distance1"
+SKILL_CFG_MOVE_DISTANCE1_FIELD.full_name = ".ftcfg.skill_cfg.move_distance1"
+SKILL_CFG_MOVE_DISTANCE1_FIELD.number = 63
+SKILL_CFG_MOVE_DISTANCE1_FIELD.index = 62
+SKILL_CFG_MOVE_DISTANCE1_FIELD.label = 2
+SKILL_CFG_MOVE_DISTANCE1_FIELD.has_default_value = false
+SKILL_CFG_MOVE_DISTANCE1_FIELD.default_value = 0.0
+SKILL_CFG_MOVE_DISTANCE1_FIELD.type = 2
+SKILL_CFG_MOVE_DISTANCE1_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_TIME1_FIELD.name = "move_time1"
+SKILL_CFG_MOVE_TIME1_FIELD.full_name = ".ftcfg.skill_cfg.move_time1"
+SKILL_CFG_MOVE_TIME1_FIELD.number = 64
+SKILL_CFG_MOVE_TIME1_FIELD.index = 63
+SKILL_CFG_MOVE_TIME1_FIELD.label = 2
+SKILL_CFG_MOVE_TIME1_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TIME1_FIELD.default_value = 0
+SKILL_CFG_MOVE_TIME1_FIELD.type = 5
+SKILL_CFG_MOVE_TIME1_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_TYPE2_FIELD.name = "move_type2"
+SKILL_CFG_MOVE_TYPE2_FIELD.full_name = ".ftcfg.skill_cfg.move_type2"
+SKILL_CFG_MOVE_TYPE2_FIELD.number = 65
+SKILL_CFG_MOVE_TYPE2_FIELD.index = 64
+SKILL_CFG_MOVE_TYPE2_FIELD.label = 2
+SKILL_CFG_MOVE_TYPE2_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TYPE2_FIELD.default_value = 0
+SKILL_CFG_MOVE_TYPE2_FIELD.type = 5
+SKILL_CFG_MOVE_TYPE2_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_POINT2_FIELD.name = "move_point2"
+SKILL_CFG_MOVE_POINT2_FIELD.full_name = ".ftcfg.skill_cfg.move_point2"
+SKILL_CFG_MOVE_POINT2_FIELD.number = 66
+SKILL_CFG_MOVE_POINT2_FIELD.index = 65
+SKILL_CFG_MOVE_POINT2_FIELD.label = 2
+SKILL_CFG_MOVE_POINT2_FIELD.has_default_value = false
+SKILL_CFG_MOVE_POINT2_FIELD.default_value = 0
+SKILL_CFG_MOVE_POINT2_FIELD.type = 5
+SKILL_CFG_MOVE_POINT2_FIELD.cpp_type = 1
+
+SKILL_CFG_ADJUST_DISTANCE2_FIELD.name = "adjust_distance2"
+SKILL_CFG_ADJUST_DISTANCE2_FIELD.full_name = ".ftcfg.skill_cfg.adjust_distance2"
+SKILL_CFG_ADJUST_DISTANCE2_FIELD.number = 67
+SKILL_CFG_ADJUST_DISTANCE2_FIELD.index = 66
+SKILL_CFG_ADJUST_DISTANCE2_FIELD.label = 2
+SKILL_CFG_ADJUST_DISTANCE2_FIELD.has_default_value = false
+SKILL_CFG_ADJUST_DISTANCE2_FIELD.default_value = 0.0
+SKILL_CFG_ADJUST_DISTANCE2_FIELD.type = 2
+SKILL_CFG_ADJUST_DISTANCE2_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_DISTANCE2_FIELD.name = "move_distance2"
+SKILL_CFG_MOVE_DISTANCE2_FIELD.full_name = ".ftcfg.skill_cfg.move_distance2"
+SKILL_CFG_MOVE_DISTANCE2_FIELD.number = 68
+SKILL_CFG_MOVE_DISTANCE2_FIELD.index = 67
+SKILL_CFG_MOVE_DISTANCE2_FIELD.label = 2
+SKILL_CFG_MOVE_DISTANCE2_FIELD.has_default_value = false
+SKILL_CFG_MOVE_DISTANCE2_FIELD.default_value = 0.0
+SKILL_CFG_MOVE_DISTANCE2_FIELD.type = 2
+SKILL_CFG_MOVE_DISTANCE2_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_TIME2_FIELD.name = "move_time2"
+SKILL_CFG_MOVE_TIME2_FIELD.full_name = ".ftcfg.skill_cfg.move_time2"
+SKILL_CFG_MOVE_TIME2_FIELD.number = 69
+SKILL_CFG_MOVE_TIME2_FIELD.index = 68
+SKILL_CFG_MOVE_TIME2_FIELD.label = 2
+SKILL_CFG_MOVE_TIME2_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TIME2_FIELD.default_value = 0
+SKILL_CFG_MOVE_TIME2_FIELD.type = 5
+SKILL_CFG_MOVE_TIME2_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_TYPE3_FIELD.name = "move_type3"
+SKILL_CFG_MOVE_TYPE3_FIELD.full_name = ".ftcfg.skill_cfg.move_type3"
+SKILL_CFG_MOVE_TYPE3_FIELD.number = 70
+SKILL_CFG_MOVE_TYPE3_FIELD.index = 69
+SKILL_CFG_MOVE_TYPE3_FIELD.label = 2
+SKILL_CFG_MOVE_TYPE3_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TYPE3_FIELD.default_value = 0
+SKILL_CFG_MOVE_TYPE3_FIELD.type = 5
+SKILL_CFG_MOVE_TYPE3_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_POINT3_FIELD.name = "move_point3"
+SKILL_CFG_MOVE_POINT3_FIELD.full_name = ".ftcfg.skill_cfg.move_point3"
+SKILL_CFG_MOVE_POINT3_FIELD.number = 71
+SKILL_CFG_MOVE_POINT3_FIELD.index = 70
+SKILL_CFG_MOVE_POINT3_FIELD.label = 2
+SKILL_CFG_MOVE_POINT3_FIELD.has_default_value = false
+SKILL_CFG_MOVE_POINT3_FIELD.default_value = 0
+SKILL_CFG_MOVE_POINT3_FIELD.type = 5
+SKILL_CFG_MOVE_POINT3_FIELD.cpp_type = 1
+
+SKILL_CFG_ADJUST_DISTANCE3_FIELD.name = "adjust_distance3"
+SKILL_CFG_ADJUST_DISTANCE3_FIELD.full_name = ".ftcfg.skill_cfg.adjust_distance3"
+SKILL_CFG_ADJUST_DISTANCE3_FIELD.number = 72
+SKILL_CFG_ADJUST_DISTANCE3_FIELD.index = 71
+SKILL_CFG_ADJUST_DISTANCE3_FIELD.label = 2
+SKILL_CFG_ADJUST_DISTANCE3_FIELD.has_default_value = false
+SKILL_CFG_ADJUST_DISTANCE3_FIELD.default_value = 0.0
+SKILL_CFG_ADJUST_DISTANCE3_FIELD.type = 2
+SKILL_CFG_ADJUST_DISTANCE3_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_DISTANCE3_FIELD.name = "move_distance3"
+SKILL_CFG_MOVE_DISTANCE3_FIELD.full_name = ".ftcfg.skill_cfg.move_distance3"
+SKILL_CFG_MOVE_DISTANCE3_FIELD.number = 73
+SKILL_CFG_MOVE_DISTANCE3_FIELD.index = 72
+SKILL_CFG_MOVE_DISTANCE3_FIELD.label = 2
+SKILL_CFG_MOVE_DISTANCE3_FIELD.has_default_value = false
+SKILL_CFG_MOVE_DISTANCE3_FIELD.default_value = 0.0
+SKILL_CFG_MOVE_DISTANCE3_FIELD.type = 2
+SKILL_CFG_MOVE_DISTANCE3_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_TIME3_FIELD.name = "move_time3"
+SKILL_CFG_MOVE_TIME3_FIELD.full_name = ".ftcfg.skill_cfg.move_time3"
+SKILL_CFG_MOVE_TIME3_FIELD.number = 74
+SKILL_CFG_MOVE_TIME3_FIELD.index = 73
+SKILL_CFG_MOVE_TIME3_FIELD.label = 2
+SKILL_CFG_MOVE_TIME3_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TIME3_FIELD.default_value = 0
+SKILL_CFG_MOVE_TIME3_FIELD.type = 5
+SKILL_CFG_MOVE_TIME3_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_TYPE4_FIELD.name = "move_type4"
+SKILL_CFG_MOVE_TYPE4_FIELD.full_name = ".ftcfg.skill_cfg.move_type4"
+SKILL_CFG_MOVE_TYPE4_FIELD.number = 75
+SKILL_CFG_MOVE_TYPE4_FIELD.index = 74
+SKILL_CFG_MOVE_TYPE4_FIELD.label = 2
+SKILL_CFG_MOVE_TYPE4_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TYPE4_FIELD.default_value = 0
+SKILL_CFG_MOVE_TYPE4_FIELD.type = 5
+SKILL_CFG_MOVE_TYPE4_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_POINT4_FIELD.name = "move_point4"
+SKILL_CFG_MOVE_POINT4_FIELD.full_name = ".ftcfg.skill_cfg.move_point4"
+SKILL_CFG_MOVE_POINT4_FIELD.number = 76
+SKILL_CFG_MOVE_POINT4_FIELD.index = 75
+SKILL_CFG_MOVE_POINT4_FIELD.label = 2
+SKILL_CFG_MOVE_POINT4_FIELD.has_default_value = false
+SKILL_CFG_MOVE_POINT4_FIELD.default_value = 0
+SKILL_CFG_MOVE_POINT4_FIELD.type = 5
+SKILL_CFG_MOVE_POINT4_FIELD.cpp_type = 1
+
+SKILL_CFG_ADJUST_DISTANCE4_FIELD.name = "adjust_distance4"
+SKILL_CFG_ADJUST_DISTANCE4_FIELD.full_name = ".ftcfg.skill_cfg.adjust_distance4"
+SKILL_CFG_ADJUST_DISTANCE4_FIELD.number = 77
+SKILL_CFG_ADJUST_DISTANCE4_FIELD.index = 76
+SKILL_CFG_ADJUST_DISTANCE4_FIELD.label = 2
+SKILL_CFG_ADJUST_DISTANCE4_FIELD.has_default_value = false
+SKILL_CFG_ADJUST_DISTANCE4_FIELD.default_value = 0.0
+SKILL_CFG_ADJUST_DISTANCE4_FIELD.type = 2
+SKILL_CFG_ADJUST_DISTANCE4_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_DISTANCE4_FIELD.name = "move_distance4"
+SKILL_CFG_MOVE_DISTANCE4_FIELD.full_name = ".ftcfg.skill_cfg.move_distance4"
+SKILL_CFG_MOVE_DISTANCE4_FIELD.number = 78
+SKILL_CFG_MOVE_DISTANCE4_FIELD.index = 77
+SKILL_CFG_MOVE_DISTANCE4_FIELD.label = 2
+SKILL_CFG_MOVE_DISTANCE4_FIELD.has_default_value = false
+SKILL_CFG_MOVE_DISTANCE4_FIELD.default_value = 0.0
+SKILL_CFG_MOVE_DISTANCE4_FIELD.type = 2
+SKILL_CFG_MOVE_DISTANCE4_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_TIME4_FIELD.name = "move_time4"
+SKILL_CFG_MOVE_TIME4_FIELD.full_name = ".ftcfg.skill_cfg.move_time4"
+SKILL_CFG_MOVE_TIME4_FIELD.number = 79
+SKILL_CFG_MOVE_TIME4_FIELD.index = 78
+SKILL_CFG_MOVE_TIME4_FIELD.label = 2
+SKILL_CFG_MOVE_TIME4_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TIME4_FIELD.default_value = 0
+SKILL_CFG_MOVE_TIME4_FIELD.type = 5
+SKILL_CFG_MOVE_TIME4_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_TYPE5_FIELD.name = "move_type5"
+SKILL_CFG_MOVE_TYPE5_FIELD.full_name = ".ftcfg.skill_cfg.move_type5"
+SKILL_CFG_MOVE_TYPE5_FIELD.number = 80
+SKILL_CFG_MOVE_TYPE5_FIELD.index = 79
+SKILL_CFG_MOVE_TYPE5_FIELD.label = 2
+SKILL_CFG_MOVE_TYPE5_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TYPE5_FIELD.default_value = 0
+SKILL_CFG_MOVE_TYPE5_FIELD.type = 5
+SKILL_CFG_MOVE_TYPE5_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_POINT5_FIELD.name = "move_point5"
+SKILL_CFG_MOVE_POINT5_FIELD.full_name = ".ftcfg.skill_cfg.move_point5"
+SKILL_CFG_MOVE_POINT5_FIELD.number = 81
+SKILL_CFG_MOVE_POINT5_FIELD.index = 80
+SKILL_CFG_MOVE_POINT5_FIELD.label = 2
+SKILL_CFG_MOVE_POINT5_FIELD.has_default_value = false
+SKILL_CFG_MOVE_POINT5_FIELD.default_value = 0
+SKILL_CFG_MOVE_POINT5_FIELD.type = 5
+SKILL_CFG_MOVE_POINT5_FIELD.cpp_type = 1
+
+SKILL_CFG_ADJUST_DISTANCE5_FIELD.name = "adjust_distance5"
+SKILL_CFG_ADJUST_DISTANCE5_FIELD.full_name = ".ftcfg.skill_cfg.adjust_distance5"
+SKILL_CFG_ADJUST_DISTANCE5_FIELD.number = 82
+SKILL_CFG_ADJUST_DISTANCE5_FIELD.index = 81
+SKILL_CFG_ADJUST_DISTANCE5_FIELD.label = 2
+SKILL_CFG_ADJUST_DISTANCE5_FIELD.has_default_value = false
+SKILL_CFG_ADJUST_DISTANCE5_FIELD.default_value = 0.0
+SKILL_CFG_ADJUST_DISTANCE5_FIELD.type = 2
+SKILL_CFG_ADJUST_DISTANCE5_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_DISTANCE5_FIELD.name = "move_distance5"
+SKILL_CFG_MOVE_DISTANCE5_FIELD.full_name = ".ftcfg.skill_cfg.move_distance5"
+SKILL_CFG_MOVE_DISTANCE5_FIELD.number = 83
+SKILL_CFG_MOVE_DISTANCE5_FIELD.index = 82
+SKILL_CFG_MOVE_DISTANCE5_FIELD.label = 2
+SKILL_CFG_MOVE_DISTANCE5_FIELD.has_default_value = false
+SKILL_CFG_MOVE_DISTANCE5_FIELD.default_value = 0.0
+SKILL_CFG_MOVE_DISTANCE5_FIELD.type = 2
+SKILL_CFG_MOVE_DISTANCE5_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_TIME5_FIELD.name = "move_time5"
+SKILL_CFG_MOVE_TIME5_FIELD.full_name = ".ftcfg.skill_cfg.move_time5"
+SKILL_CFG_MOVE_TIME5_FIELD.number = 84
+SKILL_CFG_MOVE_TIME5_FIELD.index = 83
+SKILL_CFG_MOVE_TIME5_FIELD.label = 2
+SKILL_CFG_MOVE_TIME5_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TIME5_FIELD.default_value = 0
+SKILL_CFG_MOVE_TIME5_FIELD.type = 5
+SKILL_CFG_MOVE_TIME5_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_TYPE6_FIELD.name = "move_type6"
+SKILL_CFG_MOVE_TYPE6_FIELD.full_name = ".ftcfg.skill_cfg.move_type6"
+SKILL_CFG_MOVE_TYPE6_FIELD.number = 85
+SKILL_CFG_MOVE_TYPE6_FIELD.index = 84
+SKILL_CFG_MOVE_TYPE6_FIELD.label = 2
+SKILL_CFG_MOVE_TYPE6_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TYPE6_FIELD.default_value = 0
+SKILL_CFG_MOVE_TYPE6_FIELD.type = 5
+SKILL_CFG_MOVE_TYPE6_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_POINT6_FIELD.name = "move_point6"
+SKILL_CFG_MOVE_POINT6_FIELD.full_name = ".ftcfg.skill_cfg.move_point6"
+SKILL_CFG_MOVE_POINT6_FIELD.number = 86
+SKILL_CFG_MOVE_POINT6_FIELD.index = 85
+SKILL_CFG_MOVE_POINT6_FIELD.label = 2
+SKILL_CFG_MOVE_POINT6_FIELD.has_default_value = false
+SKILL_CFG_MOVE_POINT6_FIELD.default_value = 0
+SKILL_CFG_MOVE_POINT6_FIELD.type = 5
+SKILL_CFG_MOVE_POINT6_FIELD.cpp_type = 1
+
+SKILL_CFG_ADJUST_DISTANCE6_FIELD.name = "adjust_distance6"
+SKILL_CFG_ADJUST_DISTANCE6_FIELD.full_name = ".ftcfg.skill_cfg.adjust_distance6"
+SKILL_CFG_ADJUST_DISTANCE6_FIELD.number = 87
+SKILL_CFG_ADJUST_DISTANCE6_FIELD.index = 86
+SKILL_CFG_ADJUST_DISTANCE6_FIELD.label = 2
+SKILL_CFG_ADJUST_DISTANCE6_FIELD.has_default_value = false
+SKILL_CFG_ADJUST_DISTANCE6_FIELD.default_value = 0.0
+SKILL_CFG_ADJUST_DISTANCE6_FIELD.type = 2
+SKILL_CFG_ADJUST_DISTANCE6_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_DISTANCE6_FIELD.name = "move_distance6"
+SKILL_CFG_MOVE_DISTANCE6_FIELD.full_name = ".ftcfg.skill_cfg.move_distance6"
+SKILL_CFG_MOVE_DISTANCE6_FIELD.number = 88
+SKILL_CFG_MOVE_DISTANCE6_FIELD.index = 87
+SKILL_CFG_MOVE_DISTANCE6_FIELD.label = 2
+SKILL_CFG_MOVE_DISTANCE6_FIELD.has_default_value = false
+SKILL_CFG_MOVE_DISTANCE6_FIELD.default_value = 0.0
+SKILL_CFG_MOVE_DISTANCE6_FIELD.type = 2
+SKILL_CFG_MOVE_DISTANCE6_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_TIME6_FIELD.name = "move_time6"
+SKILL_CFG_MOVE_TIME6_FIELD.full_name = ".ftcfg.skill_cfg.move_time6"
+SKILL_CFG_MOVE_TIME6_FIELD.number = 89
+SKILL_CFG_MOVE_TIME6_FIELD.index = 88
+SKILL_CFG_MOVE_TIME6_FIELD.label = 2
+SKILL_CFG_MOVE_TIME6_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TIME6_FIELD.default_value = 0
+SKILL_CFG_MOVE_TIME6_FIELD.type = 5
+SKILL_CFG_MOVE_TIME6_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_TYPE7_FIELD.name = "move_type7"
+SKILL_CFG_MOVE_TYPE7_FIELD.full_name = ".ftcfg.skill_cfg.move_type7"
+SKILL_CFG_MOVE_TYPE7_FIELD.number = 90
+SKILL_CFG_MOVE_TYPE7_FIELD.index = 89
+SKILL_CFG_MOVE_TYPE7_FIELD.label = 2
+SKILL_CFG_MOVE_TYPE7_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TYPE7_FIELD.default_value = 0
+SKILL_CFG_MOVE_TYPE7_FIELD.type = 5
+SKILL_CFG_MOVE_TYPE7_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_POINT7_FIELD.name = "move_point7"
+SKILL_CFG_MOVE_POINT7_FIELD.full_name = ".ftcfg.skill_cfg.move_point7"
+SKILL_CFG_MOVE_POINT7_FIELD.number = 91
+SKILL_CFG_MOVE_POINT7_FIELD.index = 90
+SKILL_CFG_MOVE_POINT7_FIELD.label = 2
+SKILL_CFG_MOVE_POINT7_FIELD.has_default_value = false
+SKILL_CFG_MOVE_POINT7_FIELD.default_value = 0
+SKILL_CFG_MOVE_POINT7_FIELD.type = 5
+SKILL_CFG_MOVE_POINT7_FIELD.cpp_type = 1
+
+SKILL_CFG_ADJUST_DISTANCE7_FIELD.name = "adjust_distance7"
+SKILL_CFG_ADJUST_DISTANCE7_FIELD.full_name = ".ftcfg.skill_cfg.adjust_distance7"
+SKILL_CFG_ADJUST_DISTANCE7_FIELD.number = 92
+SKILL_CFG_ADJUST_DISTANCE7_FIELD.index = 91
+SKILL_CFG_ADJUST_DISTANCE7_FIELD.label = 2
+SKILL_CFG_ADJUST_DISTANCE7_FIELD.has_default_value = false
+SKILL_CFG_ADJUST_DISTANCE7_FIELD.default_value = 0.0
+SKILL_CFG_ADJUST_DISTANCE7_FIELD.type = 2
+SKILL_CFG_ADJUST_DISTANCE7_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_DISTANCE7_FIELD.name = "move_distance7"
+SKILL_CFG_MOVE_DISTANCE7_FIELD.full_name = ".ftcfg.skill_cfg.move_distance7"
+SKILL_CFG_MOVE_DISTANCE7_FIELD.number = 93
+SKILL_CFG_MOVE_DISTANCE7_FIELD.index = 92
+SKILL_CFG_MOVE_DISTANCE7_FIELD.label = 2
+SKILL_CFG_MOVE_DISTANCE7_FIELD.has_default_value = false
+SKILL_CFG_MOVE_DISTANCE7_FIELD.default_value = 0.0
+SKILL_CFG_MOVE_DISTANCE7_FIELD.type = 2
+SKILL_CFG_MOVE_DISTANCE7_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_TIME7_FIELD.name = "move_time7"
+SKILL_CFG_MOVE_TIME7_FIELD.full_name = ".ftcfg.skill_cfg.move_time7"
+SKILL_CFG_MOVE_TIME7_FIELD.number = 94
+SKILL_CFG_MOVE_TIME7_FIELD.index = 93
+SKILL_CFG_MOVE_TIME7_FIELD.label = 2
+SKILL_CFG_MOVE_TIME7_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TIME7_FIELD.default_value = 0
+SKILL_CFG_MOVE_TIME7_FIELD.type = 5
+SKILL_CFG_MOVE_TIME7_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_TYPE8_FIELD.name = "move_type8"
+SKILL_CFG_MOVE_TYPE8_FIELD.full_name = ".ftcfg.skill_cfg.move_type8"
+SKILL_CFG_MOVE_TYPE8_FIELD.number = 95
+SKILL_CFG_MOVE_TYPE8_FIELD.index = 94
+SKILL_CFG_MOVE_TYPE8_FIELD.label = 2
+SKILL_CFG_MOVE_TYPE8_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TYPE8_FIELD.default_value = 0
+SKILL_CFG_MOVE_TYPE8_FIELD.type = 5
+SKILL_CFG_MOVE_TYPE8_FIELD.cpp_type = 1
+
+SKILL_CFG_MOVE_POINT8_FIELD.name = "move_point8"
+SKILL_CFG_MOVE_POINT8_FIELD.full_name = ".ftcfg.skill_cfg.move_point8"
+SKILL_CFG_MOVE_POINT8_FIELD.number = 96
+SKILL_CFG_MOVE_POINT8_FIELD.index = 95
+SKILL_CFG_MOVE_POINT8_FIELD.label = 2
+SKILL_CFG_MOVE_POINT8_FIELD.has_default_value = false
+SKILL_CFG_MOVE_POINT8_FIELD.default_value = 0
+SKILL_CFG_MOVE_POINT8_FIELD.type = 5
+SKILL_CFG_MOVE_POINT8_FIELD.cpp_type = 1
+
+SKILL_CFG_ADJUST_DISTANCE8_FIELD.name = "adjust_distance8"
+SKILL_CFG_ADJUST_DISTANCE8_FIELD.full_name = ".ftcfg.skill_cfg.adjust_distance8"
+SKILL_CFG_ADJUST_DISTANCE8_FIELD.number = 97
+SKILL_CFG_ADJUST_DISTANCE8_FIELD.index = 96
+SKILL_CFG_ADJUST_DISTANCE8_FIELD.label = 2
+SKILL_CFG_ADJUST_DISTANCE8_FIELD.has_default_value = false
+SKILL_CFG_ADJUST_DISTANCE8_FIELD.default_value = 0.0
+SKILL_CFG_ADJUST_DISTANCE8_FIELD.type = 2
+SKILL_CFG_ADJUST_DISTANCE8_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_DISTANCE8_FIELD.name = "move_distance8"
+SKILL_CFG_MOVE_DISTANCE8_FIELD.full_name = ".ftcfg.skill_cfg.move_distance8"
+SKILL_CFG_MOVE_DISTANCE8_FIELD.number = 98
+SKILL_CFG_MOVE_DISTANCE8_FIELD.index = 97
+SKILL_CFG_MOVE_DISTANCE8_FIELD.label = 2
+SKILL_CFG_MOVE_DISTANCE8_FIELD.has_default_value = false
+SKILL_CFG_MOVE_DISTANCE8_FIELD.default_value = 0.0
+SKILL_CFG_MOVE_DISTANCE8_FIELD.type = 2
+SKILL_CFG_MOVE_DISTANCE8_FIELD.cpp_type = 6
+
+SKILL_CFG_MOVE_TIME8_FIELD.name = "move_time8"
+SKILL_CFG_MOVE_TIME8_FIELD.full_name = ".ftcfg.skill_cfg.move_time8"
+SKILL_CFG_MOVE_TIME8_FIELD.number = 99
+SKILL_CFG_MOVE_TIME8_FIELD.index = 98
+SKILL_CFG_MOVE_TIME8_FIELD.label = 2
+SKILL_CFG_MOVE_TIME8_FIELD.has_default_value = false
+SKILL_CFG_MOVE_TIME8_FIELD.default_value = 0
+SKILL_CFG_MOVE_TIME8_FIELD.type = 5
+SKILL_CFG_MOVE_TIME8_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_1_FIELD.name = "logic_type_1"
+SKILL_CFG_LOGIC_TYPE_1_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_1"
+SKILL_CFG_LOGIC_TYPE_1_FIELD.number = 100
+SKILL_CFG_LOGIC_TYPE_1_FIELD.index = 99
+SKILL_CFG_LOGIC_TYPE_1_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_1_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_1_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_1_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_1_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_1_FIELD.name = "logic_time_1"
+SKILL_CFG_LOGIC_TIME_1_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_1"
+SKILL_CFG_LOGIC_TIME_1_FIELD.number = 101
+SKILL_CFG_LOGIC_TIME_1_FIELD.index = 100
+SKILL_CFG_LOGIC_TIME_1_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_1_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_1_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_1_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_1_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_1_FIELD.name = "logic_id_1"
+SKILL_CFG_LOGIC_ID_1_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_1"
+SKILL_CFG_LOGIC_ID_1_FIELD.number = 102
+SKILL_CFG_LOGIC_ID_1_FIELD.index = 101
+SKILL_CFG_LOGIC_ID_1_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_1_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_1_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_1_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_1_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_2_FIELD.name = "logic_type_2"
+SKILL_CFG_LOGIC_TYPE_2_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_2"
+SKILL_CFG_LOGIC_TYPE_2_FIELD.number = 103
+SKILL_CFG_LOGIC_TYPE_2_FIELD.index = 102
+SKILL_CFG_LOGIC_TYPE_2_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_2_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_2_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_2_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_2_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_2_FIELD.name = "logic_time_2"
+SKILL_CFG_LOGIC_TIME_2_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_2"
+SKILL_CFG_LOGIC_TIME_2_FIELD.number = 104
+SKILL_CFG_LOGIC_TIME_2_FIELD.index = 103
+SKILL_CFG_LOGIC_TIME_2_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_2_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_2_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_2_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_2_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_2_FIELD.name = "logic_id_2"
+SKILL_CFG_LOGIC_ID_2_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_2"
+SKILL_CFG_LOGIC_ID_2_FIELD.number = 105
+SKILL_CFG_LOGIC_ID_2_FIELD.index = 104
+SKILL_CFG_LOGIC_ID_2_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_2_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_2_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_2_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_2_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_3_FIELD.name = "logic_type_3"
+SKILL_CFG_LOGIC_TYPE_3_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_3"
+SKILL_CFG_LOGIC_TYPE_3_FIELD.number = 106
+SKILL_CFG_LOGIC_TYPE_3_FIELD.index = 105
+SKILL_CFG_LOGIC_TYPE_3_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_3_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_3_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_3_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_3_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_3_FIELD.name = "logic_time_3"
+SKILL_CFG_LOGIC_TIME_3_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_3"
+SKILL_CFG_LOGIC_TIME_3_FIELD.number = 107
+SKILL_CFG_LOGIC_TIME_3_FIELD.index = 106
+SKILL_CFG_LOGIC_TIME_3_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_3_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_3_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_3_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_3_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_3_FIELD.name = "logic_id_3"
+SKILL_CFG_LOGIC_ID_3_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_3"
+SKILL_CFG_LOGIC_ID_3_FIELD.number = 108
+SKILL_CFG_LOGIC_ID_3_FIELD.index = 107
+SKILL_CFG_LOGIC_ID_3_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_3_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_3_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_3_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_3_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_4_FIELD.name = "logic_type_4"
+SKILL_CFG_LOGIC_TYPE_4_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_4"
+SKILL_CFG_LOGIC_TYPE_4_FIELD.number = 109
+SKILL_CFG_LOGIC_TYPE_4_FIELD.index = 108
+SKILL_CFG_LOGIC_TYPE_4_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_4_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_4_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_4_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_4_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_4_FIELD.name = "logic_time_4"
+SKILL_CFG_LOGIC_TIME_4_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_4"
+SKILL_CFG_LOGIC_TIME_4_FIELD.number = 110
+SKILL_CFG_LOGIC_TIME_4_FIELD.index = 109
+SKILL_CFG_LOGIC_TIME_4_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_4_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_4_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_4_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_4_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_4_FIELD.name = "logic_id_4"
+SKILL_CFG_LOGIC_ID_4_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_4"
+SKILL_CFG_LOGIC_ID_4_FIELD.number = 111
+SKILL_CFG_LOGIC_ID_4_FIELD.index = 110
+SKILL_CFG_LOGIC_ID_4_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_4_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_4_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_4_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_4_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_5_FIELD.name = "logic_type_5"
+SKILL_CFG_LOGIC_TYPE_5_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_5"
+SKILL_CFG_LOGIC_TYPE_5_FIELD.number = 112
+SKILL_CFG_LOGIC_TYPE_5_FIELD.index = 111
+SKILL_CFG_LOGIC_TYPE_5_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_5_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_5_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_5_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_5_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_5_FIELD.name = "logic_time_5"
+SKILL_CFG_LOGIC_TIME_5_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_5"
+SKILL_CFG_LOGIC_TIME_5_FIELD.number = 113
+SKILL_CFG_LOGIC_TIME_5_FIELD.index = 112
+SKILL_CFG_LOGIC_TIME_5_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_5_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_5_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_5_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_5_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_5_FIELD.name = "logic_id_5"
+SKILL_CFG_LOGIC_ID_5_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_5"
+SKILL_CFG_LOGIC_ID_5_FIELD.number = 114
+SKILL_CFG_LOGIC_ID_5_FIELD.index = 113
+SKILL_CFG_LOGIC_ID_5_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_5_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_5_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_5_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_5_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_6_FIELD.name = "logic_type_6"
+SKILL_CFG_LOGIC_TYPE_6_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_6"
+SKILL_CFG_LOGIC_TYPE_6_FIELD.number = 115
+SKILL_CFG_LOGIC_TYPE_6_FIELD.index = 114
+SKILL_CFG_LOGIC_TYPE_6_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_6_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_6_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_6_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_6_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_6_FIELD.name = "logic_time_6"
+SKILL_CFG_LOGIC_TIME_6_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_6"
+SKILL_CFG_LOGIC_TIME_6_FIELD.number = 116
+SKILL_CFG_LOGIC_TIME_6_FIELD.index = 115
+SKILL_CFG_LOGIC_TIME_6_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_6_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_6_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_6_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_6_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_6_FIELD.name = "logic_id_6"
+SKILL_CFG_LOGIC_ID_6_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_6"
+SKILL_CFG_LOGIC_ID_6_FIELD.number = 117
+SKILL_CFG_LOGIC_ID_6_FIELD.index = 116
+SKILL_CFG_LOGIC_ID_6_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_6_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_6_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_6_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_6_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_7_FIELD.name = "logic_type_7"
+SKILL_CFG_LOGIC_TYPE_7_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_7"
+SKILL_CFG_LOGIC_TYPE_7_FIELD.number = 118
+SKILL_CFG_LOGIC_TYPE_7_FIELD.index = 117
+SKILL_CFG_LOGIC_TYPE_7_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_7_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_7_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_7_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_7_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_7_FIELD.name = "logic_time_7"
+SKILL_CFG_LOGIC_TIME_7_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_7"
+SKILL_CFG_LOGIC_TIME_7_FIELD.number = 119
+SKILL_CFG_LOGIC_TIME_7_FIELD.index = 118
+SKILL_CFG_LOGIC_TIME_7_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_7_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_7_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_7_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_7_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_7_FIELD.name = "logic_id_7"
+SKILL_CFG_LOGIC_ID_7_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_7"
+SKILL_CFG_LOGIC_ID_7_FIELD.number = 120
+SKILL_CFG_LOGIC_ID_7_FIELD.index = 119
+SKILL_CFG_LOGIC_ID_7_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_7_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_7_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_7_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_7_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_8_FIELD.name = "logic_type_8"
+SKILL_CFG_LOGIC_TYPE_8_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_8"
+SKILL_CFG_LOGIC_TYPE_8_FIELD.number = 121
+SKILL_CFG_LOGIC_TYPE_8_FIELD.index = 120
+SKILL_CFG_LOGIC_TYPE_8_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_8_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_8_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_8_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_8_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_8_FIELD.name = "logic_time_8"
+SKILL_CFG_LOGIC_TIME_8_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_8"
+SKILL_CFG_LOGIC_TIME_8_FIELD.number = 122
+SKILL_CFG_LOGIC_TIME_8_FIELD.index = 121
+SKILL_CFG_LOGIC_TIME_8_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_8_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_8_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_8_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_8_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_8_FIELD.name = "logic_id_8"
+SKILL_CFG_LOGIC_ID_8_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_8"
+SKILL_CFG_LOGIC_ID_8_FIELD.number = 123
+SKILL_CFG_LOGIC_ID_8_FIELD.index = 122
+SKILL_CFG_LOGIC_ID_8_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_8_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_8_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_8_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_8_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_9_FIELD.name = "logic_type_9"
+SKILL_CFG_LOGIC_TYPE_9_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_9"
+SKILL_CFG_LOGIC_TYPE_9_FIELD.number = 124
+SKILL_CFG_LOGIC_TYPE_9_FIELD.index = 123
+SKILL_CFG_LOGIC_TYPE_9_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_9_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_9_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_9_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_9_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_9_FIELD.name = "logic_time_9"
+SKILL_CFG_LOGIC_TIME_9_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_9"
+SKILL_CFG_LOGIC_TIME_9_FIELD.number = 125
+SKILL_CFG_LOGIC_TIME_9_FIELD.index = 124
+SKILL_CFG_LOGIC_TIME_9_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_9_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_9_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_9_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_9_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_9_FIELD.name = "logic_id_9"
+SKILL_CFG_LOGIC_ID_9_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_9"
+SKILL_CFG_LOGIC_ID_9_FIELD.number = 126
+SKILL_CFG_LOGIC_ID_9_FIELD.index = 125
+SKILL_CFG_LOGIC_ID_9_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_9_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_9_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_9_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_9_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_10_FIELD.name = "logic_type_10"
+SKILL_CFG_LOGIC_TYPE_10_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_10"
+SKILL_CFG_LOGIC_TYPE_10_FIELD.number = 127
+SKILL_CFG_LOGIC_TYPE_10_FIELD.index = 126
+SKILL_CFG_LOGIC_TYPE_10_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_10_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_10_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_10_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_10_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_10_FIELD.name = "logic_time_10"
+SKILL_CFG_LOGIC_TIME_10_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_10"
+SKILL_CFG_LOGIC_TIME_10_FIELD.number = 128
+SKILL_CFG_LOGIC_TIME_10_FIELD.index = 127
+SKILL_CFG_LOGIC_TIME_10_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_10_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_10_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_10_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_10_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_10_FIELD.name = "logic_id_10"
+SKILL_CFG_LOGIC_ID_10_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_10"
+SKILL_CFG_LOGIC_ID_10_FIELD.number = 129
+SKILL_CFG_LOGIC_ID_10_FIELD.index = 128
+SKILL_CFG_LOGIC_ID_10_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_10_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_10_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_10_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_10_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_11_FIELD.name = "logic_type_11"
+SKILL_CFG_LOGIC_TYPE_11_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_11"
+SKILL_CFG_LOGIC_TYPE_11_FIELD.number = 130
+SKILL_CFG_LOGIC_TYPE_11_FIELD.index = 129
+SKILL_CFG_LOGIC_TYPE_11_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_11_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_11_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_11_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_11_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_11_FIELD.name = "logic_time_11"
+SKILL_CFG_LOGIC_TIME_11_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_11"
+SKILL_CFG_LOGIC_TIME_11_FIELD.number = 131
+SKILL_CFG_LOGIC_TIME_11_FIELD.index = 130
+SKILL_CFG_LOGIC_TIME_11_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_11_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_11_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_11_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_11_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_11_FIELD.name = "logic_id_11"
+SKILL_CFG_LOGIC_ID_11_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_11"
+SKILL_CFG_LOGIC_ID_11_FIELD.number = 132
+SKILL_CFG_LOGIC_ID_11_FIELD.index = 131
+SKILL_CFG_LOGIC_ID_11_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_11_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_11_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_11_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_11_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TYPE_12_FIELD.name = "logic_type_12"
+SKILL_CFG_LOGIC_TYPE_12_FIELD.full_name = ".ftcfg.skill_cfg.logic_type_12"
+SKILL_CFG_LOGIC_TYPE_12_FIELD.number = 133
+SKILL_CFG_LOGIC_TYPE_12_FIELD.index = 132
+SKILL_CFG_LOGIC_TYPE_12_FIELD.label = 2
+SKILL_CFG_LOGIC_TYPE_12_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TYPE_12_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TYPE_12_FIELD.type = 5
+SKILL_CFG_LOGIC_TYPE_12_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_TIME_12_FIELD.name = "logic_time_12"
+SKILL_CFG_LOGIC_TIME_12_FIELD.full_name = ".ftcfg.skill_cfg.logic_time_12"
+SKILL_CFG_LOGIC_TIME_12_FIELD.number = 134
+SKILL_CFG_LOGIC_TIME_12_FIELD.index = 133
+SKILL_CFG_LOGIC_TIME_12_FIELD.label = 2
+SKILL_CFG_LOGIC_TIME_12_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_TIME_12_FIELD.default_value = 0
+SKILL_CFG_LOGIC_TIME_12_FIELD.type = 5
+SKILL_CFG_LOGIC_TIME_12_FIELD.cpp_type = 1
+
+SKILL_CFG_LOGIC_ID_12_FIELD.name = "logic_id_12"
+SKILL_CFG_LOGIC_ID_12_FIELD.full_name = ".ftcfg.skill_cfg.logic_id_12"
+SKILL_CFG_LOGIC_ID_12_FIELD.number = 135
+SKILL_CFG_LOGIC_ID_12_FIELD.index = 134
+SKILL_CFG_LOGIC_ID_12_FIELD.label = 2
+SKILL_CFG_LOGIC_ID_12_FIELD.has_default_value = false
+SKILL_CFG_LOGIC_ID_12_FIELD.default_value = 0
+SKILL_CFG_LOGIC_ID_12_FIELD.type = 5
+SKILL_CFG_LOGIC_ID_12_FIELD.cpp_type = 1
+
+SKILL_CFG_AFFECT_RANGE_TYPE_FIELD.name = "affect_range_type"
+SKILL_CFG_AFFECT_RANGE_TYPE_FIELD.full_name = ".ftcfg.skill_cfg.affect_range_type"
+SKILL_CFG_AFFECT_RANGE_TYPE_FIELD.number = 136
+SKILL_CFG_AFFECT_RANGE_TYPE_FIELD.index = 135
+SKILL_CFG_AFFECT_RANGE_TYPE_FIELD.label = 2
+SKILL_CFG_AFFECT_RANGE_TYPE_FIELD.has_default_value = false
+SKILL_CFG_AFFECT_RANGE_TYPE_FIELD.default_value = nil
+SKILL_CFG_AFFECT_RANGE_TYPE_FIELD.enum_type = config_predefine_pb.EAFFECTAREATYPE
+SKILL_CFG_AFFECT_RANGE_TYPE_FIELD.type = 14
+SKILL_CFG_AFFECT_RANGE_TYPE_FIELD.cpp_type = 8
+
+SKILL_CFG_ART_PARA1_FIELD.name = "art_para1"
+SKILL_CFG_ART_PARA1_FIELD.full_name = ".ftcfg.skill_cfg.art_para1"
+SKILL_CFG_ART_PARA1_FIELD.number = 137
+SKILL_CFG_ART_PARA1_FIELD.index = 136
+SKILL_CFG_ART_PARA1_FIELD.label = 2
+SKILL_CFG_ART_PARA1_FIELD.has_default_value = false
+SKILL_CFG_ART_PARA1_FIELD.default_value = 0
+SKILL_CFG_ART_PARA1_FIELD.type = 5
+SKILL_CFG_ART_PARA1_FIELD.cpp_type = 1
+
+SKILL_CFG_ART_PARA2_FIELD.name = "art_para2"
+SKILL_CFG_ART_PARA2_FIELD.full_name = ".ftcfg.skill_cfg.art_para2"
+SKILL_CFG_ART_PARA2_FIELD.number = 138
+SKILL_CFG_ART_PARA2_FIELD.index = 137
+SKILL_CFG_ART_PARA2_FIELD.label = 2
+SKILL_CFG_ART_PARA2_FIELD.has_default_value = false
+SKILL_CFG_ART_PARA2_FIELD.default_value = 0
+SKILL_CFG_ART_PARA2_FIELD.type = 5
+SKILL_CFG_ART_PARA2_FIELD.cpp_type = 1
+
+SKILL_CFG.name = "skill_cfg"
+SKILL_CFG.full_name = ".ftcfg.skill_cfg"
+SKILL_CFG.nested_types = {}
+SKILL_CFG.enum_types = {}
+SKILL_CFG.fields = {SKILL_CFG_ID_FIELD, SKILL_CFG_NAME_TIP_FIELD, SKILL_CFG_NAME_FIELD, SKILL_CFG_SKILL_LEVEL_FIELD, SKILL_CFG_PLAYER_LEVEL_FIELD, SKILL_CFG_LEVELUP_COST_FIELD, SKILL_CFG_NEXT_LEVEL_ID_FIELD, SKILL_CFG_SKILL_ICON_FIELD, SKILL_CFG_SKILL_PROF_FIELD, SKILL_CFG_TIPS2_FIELD, SKILL_CFG_TIPS_FIELD, SKILL_CFG_TIPS3_FIELD, SKILL_CFG_TIPS_PARA1_FIELD, SKILL_CFG_TIPS_PARA2_FIELD, SKILL_CFG_TIPS_PARA3_FIELD, SKILL_CFG_TIPS_PARA4_FIELD, SKILL_CFG_TIPS_PARA5_FIELD, SKILL_CFG_TIPS_PARA6_FIELD, SKILL_CFG_NEXT_SKILL_FIELD, SKILL_CFG_NEXT_CHANGE_SKILL_FIELD, SKILL_CFG_AUTO_SKILL_FIELD, SKILL_CFG_NEXT_SKILL_TIME_FIELD, SKILL_CFG_SKILL_TYPE_FIELD, SKILL_CFG_ENERGY_COST_TYPE_FIELD, SKILL_CFG_ENERGY_VALUE_FIELD, SKILL_CFG_MAX_ENERGY_VALUE_FIELD, SKILL_CFG_RET_ENERGY_VALUE_FIELD, SKILL_CFG_RET_HP_EFFECT_FIELD, SKILL_CFG_SHOW_PROGRESS_FIELD, SKILL_CFG_PROGRESS_WORD_FIELD, SKILL_CFG_IS_TRIGGER_PASSIVE_FIELD, SKILL_CFG_IS_PASSIVE_FIELD, SKILL_CFG_TRIGGER_TYPE_FIELD, SKILL_CFG_ACCELERATE_FIELD, SKILL_CFG_IS_CONCURRENCY_FIELD, SKILL_CFG_INT_CHANNEL_WHEN_BEATEN_FIELD, SKILL_CFG_IS_CHANNEL_FIELD, SKILL_CFG_CHANNEL_TIME_FIELD, SKILL_CFG_CAN_CANCEL_FIELD, SKILL_CFG_BASE_POS_FIELD, SKILL_CFG_TARGET_TYPE_FIELD, SKILL_CFG_REMOVE_BUFF_WHEN_CANCEL_FIELD, SKILL_CFG_WORK_WHEN_FIELD, SKILL_CFG_CD_GROUP_ID_FIELD, SKILL_CFG_CD_TIME_FIELD, SKILL_CFG_CD_NUM_FIELD, SKILL_CFG_CAST_DISTANCE_FIELD, SKILL_CFG_LOCKED_BY_SERVER_FIELD, SKILL_CFG_RANGE_TYPE_FIELD, SKILL_CFG_RANGE_PARA1_FIELD, SKILL_CFG_RANGE_PARA2_FIELD, SKILL_CFG_LOCK_TARGET_DISTANCE_FIELD, SKILL_CFG_LOCK_MAX_COUNT_FIELD, SKILL_CFG_CAST_SWING_TIME_FIELD, SKILL_CFG_CAST_STIFF_TIME_FIELD, SKILL_CFG_CAST_BACK_SWING_TIME_FIELD, SKILL_CFG_MAGIC_PERFORMANCE_ID_FIELD, SKILL_CFG_HIT_EFFECT_FIELD, SKILL_CFG_HIT_EFFECT_TIME_FIELD, SKILL_CFG_MOVE_TYPE1_FIELD, SKILL_CFG_MOVE_POINT1_FIELD, SKILL_CFG_ADJUST_DISTANCE1_FIELD, SKILL_CFG_MOVE_DISTANCE1_FIELD, SKILL_CFG_MOVE_TIME1_FIELD, SKILL_CFG_MOVE_TYPE2_FIELD, SKILL_CFG_MOVE_POINT2_FIELD, SKILL_CFG_ADJUST_DISTANCE2_FIELD, SKILL_CFG_MOVE_DISTANCE2_FIELD, SKILL_CFG_MOVE_TIME2_FIELD, SKILL_CFG_MOVE_TYPE3_FIELD, SKILL_CFG_MOVE_POINT3_FIELD, SKILL_CFG_ADJUST_DISTANCE3_FIELD, SKILL_CFG_MOVE_DISTANCE3_FIELD, SKILL_CFG_MOVE_TIME3_FIELD, SKILL_CFG_MOVE_TYPE4_FIELD, SKILL_CFG_MOVE_POINT4_FIELD, SKILL_CFG_ADJUST_DISTANCE4_FIELD, SKILL_CFG_MOVE_DISTANCE4_FIELD, SKILL_CFG_MOVE_TIME4_FIELD, SKILL_CFG_MOVE_TYPE5_FIELD, SKILL_CFG_MOVE_POINT5_FIELD, SKILL_CFG_ADJUST_DISTANCE5_FIELD, SKILL_CFG_MOVE_DISTANCE5_FIELD, SKILL_CFG_MOVE_TIME5_FIELD, SKILL_CFG_MOVE_TYPE6_FIELD, SKILL_CFG_MOVE_POINT6_FIELD, SKILL_CFG_ADJUST_DISTANCE6_FIELD, SKILL_CFG_MOVE_DISTANCE6_FIELD, SKILL_CFG_MOVE_TIME6_FIELD, SKILL_CFG_MOVE_TYPE7_FIELD, SKILL_CFG_MOVE_POINT7_FIELD, SKILL_CFG_ADJUST_DISTANCE7_FIELD, SKILL_CFG_MOVE_DISTANCE7_FIELD, SKILL_CFG_MOVE_TIME7_FIELD, SKILL_CFG_MOVE_TYPE8_FIELD, SKILL_CFG_MOVE_POINT8_FIELD, SKILL_CFG_ADJUST_DISTANCE8_FIELD, SKILL_CFG_MOVE_DISTANCE8_FIELD, SKILL_CFG_MOVE_TIME8_FIELD, SKILL_CFG_LOGIC_TYPE_1_FIELD, SKILL_CFG_LOGIC_TIME_1_FIELD, SKILL_CFG_LOGIC_ID_1_FIELD, SKILL_CFG_LOGIC_TYPE_2_FIELD, SKILL_CFG_LOGIC_TIME_2_FIELD, SKILL_CFG_LOGIC_ID_2_FIELD, SKILL_CFG_LOGIC_TYPE_3_FIELD, SKILL_CFG_LOGIC_TIME_3_FIELD, SKILL_CFG_LOGIC_ID_3_FIELD, SKILL_CFG_LOGIC_TYPE_4_FIELD, SKILL_CFG_LOGIC_TIME_4_FIELD, SKILL_CFG_LOGIC_ID_4_FIELD, SKILL_CFG_LOGIC_TYPE_5_FIELD, SKILL_CFG_LOGIC_TIME_5_FIELD, SKILL_CFG_LOGIC_ID_5_FIELD, SKILL_CFG_LOGIC_TYPE_6_FIELD, SKILL_CFG_LOGIC_TIME_6_FIELD, SKILL_CFG_LOGIC_ID_6_FIELD, SKILL_CFG_LOGIC_TYPE_7_FIELD, SKILL_CFG_LOGIC_TIME_7_FIELD, SKILL_CFG_LOGIC_ID_7_FIELD, SKILL_CFG_LOGIC_TYPE_8_FIELD, SKILL_CFG_LOGIC_TIME_8_FIELD, SKILL_CFG_LOGIC_ID_8_FIELD, SKILL_CFG_LOGIC_TYPE_9_FIELD, SKILL_CFG_LOGIC_TIME_9_FIELD, SKILL_CFG_LOGIC_ID_9_FIELD, SKILL_CFG_LOGIC_TYPE_10_FIELD, SKILL_CFG_LOGIC_TIME_10_FIELD, SKILL_CFG_LOGIC_ID_10_FIELD, SKILL_CFG_LOGIC_TYPE_11_FIELD, SKILL_CFG_LOGIC_TIME_11_FIELD, SKILL_CFG_LOGIC_ID_11_FIELD, SKILL_CFG_LOGIC_TYPE_12_FIELD, SKILL_CFG_LOGIC_TIME_12_FIELD, SKILL_CFG_LOGIC_ID_12_FIELD, SKILL_CFG_AFFECT_RANGE_TYPE_FIELD, SKILL_CFG_ART_PARA1_FIELD, SKILL_CFG_ART_PARA2_FIELD}
+SKILL_CFG.is_extendable = false
+SKILL_CFG.extensions = {}
+SKILL_CFGS_ITEMS_FIELD.name = "items"
+SKILL_CFGS_ITEMS_FIELD.full_name = ".ftcfg.skill_cfgs.items"
+SKILL_CFGS_ITEMS_FIELD.number = 1
+SKILL_CFGS_ITEMS_FIELD.index = 0
+SKILL_CFGS_ITEMS_FIELD.label = 3
+SKILL_CFGS_ITEMS_FIELD.has_default_value = false
+SKILL_CFGS_ITEMS_FIELD.default_value = {}
+SKILL_CFGS_ITEMS_FIELD.message_type = SKILL_CFG
+SKILL_CFGS_ITEMS_FIELD.type = 11
+SKILL_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SKILL_CFGS.name = "skill_cfgs"
+SKILL_CFGS.full_name = ".ftcfg.skill_cfgs"
+SKILL_CFGS.nested_types = {}
+SKILL_CFGS.enum_types = {}
+SKILL_CFGS.fields = {SKILL_CFGS_ITEMS_FIELD}
+SKILL_CFGS.is_extendable = false
+SKILL_CFGS.extensions = {}
+SKILL_ID_CFG_ID_FIELD.name = "id"
+SKILL_ID_CFG_ID_FIELD.full_name = ".ftcfg.skill_id_cfg.id"
+SKILL_ID_CFG_ID_FIELD.number = 1
+SKILL_ID_CFG_ID_FIELD.index = 0
+SKILL_ID_CFG_ID_FIELD.label = 2
+SKILL_ID_CFG_ID_FIELD.has_default_value = false
+SKILL_ID_CFG_ID_FIELD.default_value = 0
+SKILL_ID_CFG_ID_FIELD.type = 5
+SKILL_ID_CFG_ID_FIELD.cpp_type = 1
+
+SKILL_ID_CFG_SKILL_ID_ARRAY_FIELD.name = "skill_id_array"
+SKILL_ID_CFG_SKILL_ID_ARRAY_FIELD.full_name = ".ftcfg.skill_id_cfg.skill_id_array"
+SKILL_ID_CFG_SKILL_ID_ARRAY_FIELD.number = 2
+SKILL_ID_CFG_SKILL_ID_ARRAY_FIELD.index = 1
+SKILL_ID_CFG_SKILL_ID_ARRAY_FIELD.label = 3
+SKILL_ID_CFG_SKILL_ID_ARRAY_FIELD.has_default_value = false
+SKILL_ID_CFG_SKILL_ID_ARRAY_FIELD.default_value = {}
+SKILL_ID_CFG_SKILL_ID_ARRAY_FIELD.type = 5
+SKILL_ID_CFG_SKILL_ID_ARRAY_FIELD.cpp_type = 1
+
+SKILL_ID_CFG.name = "skill_id_cfg"
+SKILL_ID_CFG.full_name = ".ftcfg.skill_id_cfg"
+SKILL_ID_CFG.nested_types = {}
+SKILL_ID_CFG.enum_types = {}
+SKILL_ID_CFG.fields = {SKILL_ID_CFG_ID_FIELD, SKILL_ID_CFG_SKILL_ID_ARRAY_FIELD}
+SKILL_ID_CFG.is_extendable = false
+SKILL_ID_CFG.extensions = {}
+SKILL_ID_CFGS_ITEMS_FIELD.name = "items"
+SKILL_ID_CFGS_ITEMS_FIELD.full_name = ".ftcfg.skill_id_cfgs.items"
+SKILL_ID_CFGS_ITEMS_FIELD.number = 1
+SKILL_ID_CFGS_ITEMS_FIELD.index = 0
+SKILL_ID_CFGS_ITEMS_FIELD.label = 3
+SKILL_ID_CFGS_ITEMS_FIELD.has_default_value = false
+SKILL_ID_CFGS_ITEMS_FIELD.default_value = {}
+SKILL_ID_CFGS_ITEMS_FIELD.message_type = SKILL_ID_CFG
+SKILL_ID_CFGS_ITEMS_FIELD.type = 11
+SKILL_ID_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SKILL_ID_CFGS.name = "skill_id_cfgs"
+SKILL_ID_CFGS.full_name = ".ftcfg.skill_id_cfgs"
+SKILL_ID_CFGS.nested_types = {}
+SKILL_ID_CFGS.enum_types = {}
+SKILL_ID_CFGS.fields = {SKILL_ID_CFGS_ITEMS_FIELD}
+SKILL_ID_CFGS.is_extendable = false
+SKILL_ID_CFGS.extensions = {}
+SKILL_CONDITION_CFG_ID_FIELD.name = "id"
+SKILL_CONDITION_CFG_ID_FIELD.full_name = ".ftcfg.skill_condition_cfg.id"
+SKILL_CONDITION_CFG_ID_FIELD.number = 1
+SKILL_CONDITION_CFG_ID_FIELD.index = 0
+SKILL_CONDITION_CFG_ID_FIELD.label = 2
+SKILL_CONDITION_CFG_ID_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_ID_FIELD.default_value = 0
+SKILL_CONDITION_CFG_ID_FIELD.type = 5
+SKILL_CONDITION_CFG_ID_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_DESC_FIELD.name = "desc"
+SKILL_CONDITION_CFG_DESC_FIELD.full_name = ".ftcfg.skill_condition_cfg.desc"
+SKILL_CONDITION_CFG_DESC_FIELD.number = 2
+SKILL_CONDITION_CFG_DESC_FIELD.index = 1
+SKILL_CONDITION_CFG_DESC_FIELD.label = 2
+SKILL_CONDITION_CFG_DESC_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_DESC_FIELD.default_value = ""
+SKILL_CONDITION_CFG_DESC_FIELD.type = 9
+SKILL_CONDITION_CFG_DESC_FIELD.cpp_type = 9
+
+SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD.name = "effect_target"
+SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD.full_name = ".ftcfg.skill_condition_cfg.effect_target"
+SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD.number = 3
+SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD.index = 2
+SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD.label = 2
+SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD.default_value = nil
+SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD.enum_type = config_predefine_pb.CONDITIONTARGETTYPE
+SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD.type = 14
+SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD.cpp_type = 8
+
+SKILL_CONDITION_CFG_RANGE_TYPE_FIELD.name = "range_type"
+SKILL_CONDITION_CFG_RANGE_TYPE_FIELD.full_name = ".ftcfg.skill_condition_cfg.range_type"
+SKILL_CONDITION_CFG_RANGE_TYPE_FIELD.number = 4
+SKILL_CONDITION_CFG_RANGE_TYPE_FIELD.index = 3
+SKILL_CONDITION_CFG_RANGE_TYPE_FIELD.label = 2
+SKILL_CONDITION_CFG_RANGE_TYPE_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_RANGE_TYPE_FIELD.default_value = nil
+SKILL_CONDITION_CFG_RANGE_TYPE_FIELD.enum_type = config_predefine_pb.EAREATYPE
+SKILL_CONDITION_CFG_RANGE_TYPE_FIELD.type = 14
+SKILL_CONDITION_CFG_RANGE_TYPE_FIELD.cpp_type = 8
+
+SKILL_CONDITION_CFG_RANGE_ANGLE_FIELD.name = "range_angle"
+SKILL_CONDITION_CFG_RANGE_ANGLE_FIELD.full_name = ".ftcfg.skill_condition_cfg.range_angle"
+SKILL_CONDITION_CFG_RANGE_ANGLE_FIELD.number = 5
+SKILL_CONDITION_CFG_RANGE_ANGLE_FIELD.index = 4
+SKILL_CONDITION_CFG_RANGE_ANGLE_FIELD.label = 2
+SKILL_CONDITION_CFG_RANGE_ANGLE_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_RANGE_ANGLE_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_RANGE_ANGLE_FIELD.type = 2
+SKILL_CONDITION_CFG_RANGE_ANGLE_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_RANGE_OFFSET_X_FIELD.name = "range_offset_x"
+SKILL_CONDITION_CFG_RANGE_OFFSET_X_FIELD.full_name = ".ftcfg.skill_condition_cfg.range_offset_x"
+SKILL_CONDITION_CFG_RANGE_OFFSET_X_FIELD.number = 6
+SKILL_CONDITION_CFG_RANGE_OFFSET_X_FIELD.index = 5
+SKILL_CONDITION_CFG_RANGE_OFFSET_X_FIELD.label = 2
+SKILL_CONDITION_CFG_RANGE_OFFSET_X_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_RANGE_OFFSET_X_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_RANGE_OFFSET_X_FIELD.type = 2
+SKILL_CONDITION_CFG_RANGE_OFFSET_X_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_RANGE_OFFSET_Z_FIELD.name = "range_offset_z"
+SKILL_CONDITION_CFG_RANGE_OFFSET_Z_FIELD.full_name = ".ftcfg.skill_condition_cfg.range_offset_z"
+SKILL_CONDITION_CFG_RANGE_OFFSET_Z_FIELD.number = 7
+SKILL_CONDITION_CFG_RANGE_OFFSET_Z_FIELD.index = 6
+SKILL_CONDITION_CFG_RANGE_OFFSET_Z_FIELD.label = 2
+SKILL_CONDITION_CFG_RANGE_OFFSET_Z_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_RANGE_OFFSET_Z_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_RANGE_OFFSET_Z_FIELD.type = 2
+SKILL_CONDITION_CFG_RANGE_OFFSET_Z_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_RANGE_PARA1_FIELD.name = "range_para1"
+SKILL_CONDITION_CFG_RANGE_PARA1_FIELD.full_name = ".ftcfg.skill_condition_cfg.range_para1"
+SKILL_CONDITION_CFG_RANGE_PARA1_FIELD.number = 8
+SKILL_CONDITION_CFG_RANGE_PARA1_FIELD.index = 7
+SKILL_CONDITION_CFG_RANGE_PARA1_FIELD.label = 2
+SKILL_CONDITION_CFG_RANGE_PARA1_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_RANGE_PARA1_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_RANGE_PARA1_FIELD.type = 2
+SKILL_CONDITION_CFG_RANGE_PARA1_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_RANGE_PARA2_FIELD.name = "range_para2"
+SKILL_CONDITION_CFG_RANGE_PARA2_FIELD.full_name = ".ftcfg.skill_condition_cfg.range_para2"
+SKILL_CONDITION_CFG_RANGE_PARA2_FIELD.number = 9
+SKILL_CONDITION_CFG_RANGE_PARA2_FIELD.index = 8
+SKILL_CONDITION_CFG_RANGE_PARA2_FIELD.label = 2
+SKILL_CONDITION_CFG_RANGE_PARA2_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_RANGE_PARA2_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_RANGE_PARA2_FIELD.type = 2
+SKILL_CONDITION_CFG_RANGE_PARA2_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_ENTITY_TYPES_FIELD.name = "entity_types"
+SKILL_CONDITION_CFG_ENTITY_TYPES_FIELD.full_name = ".ftcfg.skill_condition_cfg.entity_types"
+SKILL_CONDITION_CFG_ENTITY_TYPES_FIELD.number = 10
+SKILL_CONDITION_CFG_ENTITY_TYPES_FIELD.index = 9
+SKILL_CONDITION_CFG_ENTITY_TYPES_FIELD.label = 3
+SKILL_CONDITION_CFG_ENTITY_TYPES_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_ENTITY_TYPES_FIELD.default_value = {}
+SKILL_CONDITION_CFG_ENTITY_TYPES_FIELD.type = 5
+SKILL_CONDITION_CFG_ENTITY_TYPES_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_INCLUDE_TARGET_FIELD.name = "include_target"
+SKILL_CONDITION_CFG_INCLUDE_TARGET_FIELD.full_name = ".ftcfg.skill_condition_cfg.include_target"
+SKILL_CONDITION_CFG_INCLUDE_TARGET_FIELD.number = 11
+SKILL_CONDITION_CFG_INCLUDE_TARGET_FIELD.index = 10
+SKILL_CONDITION_CFG_INCLUDE_TARGET_FIELD.label = 2
+SKILL_CONDITION_CFG_INCLUDE_TARGET_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_INCLUDE_TARGET_FIELD.default_value = false
+SKILL_CONDITION_CFG_INCLUDE_TARGET_FIELD.type = 8
+SKILL_CONDITION_CFG_INCLUDE_TARGET_FIELD.cpp_type = 7
+
+SKILL_CONDITION_CFG_TARGET_NUM_FIELD.name = "target_num"
+SKILL_CONDITION_CFG_TARGET_NUM_FIELD.full_name = ".ftcfg.skill_condition_cfg.target_num"
+SKILL_CONDITION_CFG_TARGET_NUM_FIELD.number = 12
+SKILL_CONDITION_CFG_TARGET_NUM_FIELD.index = 11
+SKILL_CONDITION_CFG_TARGET_NUM_FIELD.label = 2
+SKILL_CONDITION_CFG_TARGET_NUM_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_TARGET_NUM_FIELD.default_value = 0
+SKILL_CONDITION_CFG_TARGET_NUM_FIELD.type = 5
+SKILL_CONDITION_CFG_TARGET_NUM_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_IGNORE_BLOCK_FIELD.name = "ignore_block"
+SKILL_CONDITION_CFG_IGNORE_BLOCK_FIELD.full_name = ".ftcfg.skill_condition_cfg.ignore_block"
+SKILL_CONDITION_CFG_IGNORE_BLOCK_FIELD.number = 13
+SKILL_CONDITION_CFG_IGNORE_BLOCK_FIELD.index = 12
+SKILL_CONDITION_CFG_IGNORE_BLOCK_FIELD.label = 2
+SKILL_CONDITION_CFG_IGNORE_BLOCK_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_IGNORE_BLOCK_FIELD.default_value = false
+SKILL_CONDITION_CFG_IGNORE_BLOCK_FIELD.type = 8
+SKILL_CONDITION_CFG_IGNORE_BLOCK_FIELD.cpp_type = 7
+
+SKILL_CONDITION_CFG_IGNORE_DODGE_FIELD.name = "ignore_dodge"
+SKILL_CONDITION_CFG_IGNORE_DODGE_FIELD.full_name = ".ftcfg.skill_condition_cfg.ignore_dodge"
+SKILL_CONDITION_CFG_IGNORE_DODGE_FIELD.number = 14
+SKILL_CONDITION_CFG_IGNORE_DODGE_FIELD.index = 13
+SKILL_CONDITION_CFG_IGNORE_DODGE_FIELD.label = 2
+SKILL_CONDITION_CFG_IGNORE_DODGE_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_IGNORE_DODGE_FIELD.default_value = false
+SKILL_CONDITION_CFG_IGNORE_DODGE_FIELD.type = 8
+SKILL_CONDITION_CFG_IGNORE_DODGE_FIELD.cpp_type = 7
+
+SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD.name = "target_order_type"
+SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD.full_name = ".ftcfg.skill_condition_cfg.target_order_type"
+SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD.number = 15
+SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD.index = 14
+SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD.label = 2
+SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD.default_value = nil
+SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD.enum_type = config_predefine_pb.ECONDITIONORDERTYPE
+SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD.type = 14
+SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD.cpp_type = 8
+
+SKILL_CONDITION_CFG_REPEAT_NUM_FIELD.name = "repeat_num"
+SKILL_CONDITION_CFG_REPEAT_NUM_FIELD.full_name = ".ftcfg.skill_condition_cfg.repeat_num"
+SKILL_CONDITION_CFG_REPEAT_NUM_FIELD.number = 16
+SKILL_CONDITION_CFG_REPEAT_NUM_FIELD.index = 15
+SKILL_CONDITION_CFG_REPEAT_NUM_FIELD.label = 2
+SKILL_CONDITION_CFG_REPEAT_NUM_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_REPEAT_NUM_FIELD.default_value = 0
+SKILL_CONDITION_CFG_REPEAT_NUM_FIELD.type = 5
+SKILL_CONDITION_CFG_REPEAT_NUM_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_HIT_RATE_FIELD.name = "hit_rate"
+SKILL_CONDITION_CFG_HIT_RATE_FIELD.full_name = ".ftcfg.skill_condition_cfg.hit_rate"
+SKILL_CONDITION_CFG_HIT_RATE_FIELD.number = 17
+SKILL_CONDITION_CFG_HIT_RATE_FIELD.index = 16
+SKILL_CONDITION_CFG_HIT_RATE_FIELD.label = 2
+SKILL_CONDITION_CFG_HIT_RATE_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_HIT_RATE_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_HIT_RATE_FIELD.type = 2
+SKILL_CONDITION_CFG_HIT_RATE_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_ATK_LV_FIELD.name = "atk_lv"
+SKILL_CONDITION_CFG_ATK_LV_FIELD.full_name = ".ftcfg.skill_condition_cfg.atk_lv"
+SKILL_CONDITION_CFG_ATK_LV_FIELD.number = 18
+SKILL_CONDITION_CFG_ATK_LV_FIELD.index = 17
+SKILL_CONDITION_CFG_ATK_LV_FIELD.label = 2
+SKILL_CONDITION_CFG_ATK_LV_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_ATK_LV_FIELD.default_value = 0
+SKILL_CONDITION_CFG_ATK_LV_FIELD.type = 5
+SKILL_CONDITION_CFG_ATK_LV_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_AM_BEATEN_FIELD.name = "am_beaten"
+SKILL_CONDITION_CFG_AM_BEATEN_FIELD.full_name = ".ftcfg.skill_condition_cfg.am_beaten"
+SKILL_CONDITION_CFG_AM_BEATEN_FIELD.number = 19
+SKILL_CONDITION_CFG_AM_BEATEN_FIELD.index = 18
+SKILL_CONDITION_CFG_AM_BEATEN_FIELD.label = 2
+SKILL_CONDITION_CFG_AM_BEATEN_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_AM_BEATEN_FIELD.default_value = ""
+SKILL_CONDITION_CFG_AM_BEATEN_FIELD.type = 9
+SKILL_CONDITION_CFG_AM_BEATEN_FIELD.cpp_type = 9
+
+SKILL_CONDITION_CFG_AM_BEATEN_EFF_FIELD.name = "am_beaten_eff"
+SKILL_CONDITION_CFG_AM_BEATEN_EFF_FIELD.full_name = ".ftcfg.skill_condition_cfg.am_beaten_eff"
+SKILL_CONDITION_CFG_AM_BEATEN_EFF_FIELD.number = 20
+SKILL_CONDITION_CFG_AM_BEATEN_EFF_FIELD.index = 19
+SKILL_CONDITION_CFG_AM_BEATEN_EFF_FIELD.label = 2
+SKILL_CONDITION_CFG_AM_BEATEN_EFF_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_AM_BEATEN_EFF_FIELD.default_value = ""
+SKILL_CONDITION_CFG_AM_BEATEN_EFF_FIELD.type = 9
+SKILL_CONDITION_CFG_AM_BEATEN_EFF_FIELD.cpp_type = 9
+
+SKILL_CONDITION_CFG_BEATEN_TIME_FIELD.name = "beaten_time"
+SKILL_CONDITION_CFG_BEATEN_TIME_FIELD.full_name = ".ftcfg.skill_condition_cfg.beaten_time"
+SKILL_CONDITION_CFG_BEATEN_TIME_FIELD.number = 21
+SKILL_CONDITION_CFG_BEATEN_TIME_FIELD.index = 20
+SKILL_CONDITION_CFG_BEATEN_TIME_FIELD.label = 2
+SKILL_CONDITION_CFG_BEATEN_TIME_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_BEATEN_TIME_FIELD.default_value = 0
+SKILL_CONDITION_CFG_BEATEN_TIME_FIELD.type = 5
+SKILL_CONDITION_CFG_BEATEN_TIME_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_BEAT_BACK_TYPE_FIELD.name = "beat_back_type"
+SKILL_CONDITION_CFG_BEAT_BACK_TYPE_FIELD.full_name = ".ftcfg.skill_condition_cfg.beat_back_type"
+SKILL_CONDITION_CFG_BEAT_BACK_TYPE_FIELD.number = 22
+SKILL_CONDITION_CFG_BEAT_BACK_TYPE_FIELD.index = 21
+SKILL_CONDITION_CFG_BEAT_BACK_TYPE_FIELD.label = 2
+SKILL_CONDITION_CFG_BEAT_BACK_TYPE_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_BEAT_BACK_TYPE_FIELD.default_value = 0
+SKILL_CONDITION_CFG_BEAT_BACK_TYPE_FIELD.type = 5
+SKILL_CONDITION_CFG_BEAT_BACK_TYPE_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_BEAT_DIS_FIELD.name = "beat_dis"
+SKILL_CONDITION_CFG_BEAT_DIS_FIELD.full_name = ".ftcfg.skill_condition_cfg.beat_dis"
+SKILL_CONDITION_CFG_BEAT_DIS_FIELD.number = 23
+SKILL_CONDITION_CFG_BEAT_DIS_FIELD.index = 22
+SKILL_CONDITION_CFG_BEAT_DIS_FIELD.label = 2
+SKILL_CONDITION_CFG_BEAT_DIS_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_BEAT_DIS_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_BEAT_DIS_FIELD.type = 2
+SKILL_CONDITION_CFG_BEAT_DIS_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_BEAT_BACK_MOVE_TIME_FIELD.name = "beat_back_move_time"
+SKILL_CONDITION_CFG_BEAT_BACK_MOVE_TIME_FIELD.full_name = ".ftcfg.skill_condition_cfg.beat_back_move_time"
+SKILL_CONDITION_CFG_BEAT_BACK_MOVE_TIME_FIELD.number = 24
+SKILL_CONDITION_CFG_BEAT_BACK_MOVE_TIME_FIELD.index = 23
+SKILL_CONDITION_CFG_BEAT_BACK_MOVE_TIME_FIELD.label = 2
+SKILL_CONDITION_CFG_BEAT_BACK_MOVE_TIME_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_BEAT_BACK_MOVE_TIME_FIELD.default_value = 0
+SKILL_CONDITION_CFG_BEAT_BACK_MOVE_TIME_FIELD.type = 5
+SKILL_CONDITION_CFG_BEAT_BACK_MOVE_TIME_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_AM_DEAD_FIELD.name = "am_dead"
+SKILL_CONDITION_CFG_AM_DEAD_FIELD.full_name = ".ftcfg.skill_condition_cfg.am_dead"
+SKILL_CONDITION_CFG_AM_DEAD_FIELD.number = 25
+SKILL_CONDITION_CFG_AM_DEAD_FIELD.index = 24
+SKILL_CONDITION_CFG_AM_DEAD_FIELD.label = 2
+SKILL_CONDITION_CFG_AM_DEAD_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_AM_DEAD_FIELD.default_value = 0
+SKILL_CONDITION_CFG_AM_DEAD_FIELD.type = 5
+SKILL_CONDITION_CFG_AM_DEAD_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_DEAD_BACK_TYPE_FIELD.name = "dead_back_type"
+SKILL_CONDITION_CFG_DEAD_BACK_TYPE_FIELD.full_name = ".ftcfg.skill_condition_cfg.dead_back_type"
+SKILL_CONDITION_CFG_DEAD_BACK_TYPE_FIELD.number = 26
+SKILL_CONDITION_CFG_DEAD_BACK_TYPE_FIELD.index = 25
+SKILL_CONDITION_CFG_DEAD_BACK_TYPE_FIELD.label = 2
+SKILL_CONDITION_CFG_DEAD_BACK_TYPE_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_DEAD_BACK_TYPE_FIELD.default_value = 0
+SKILL_CONDITION_CFG_DEAD_BACK_TYPE_FIELD.type = 5
+SKILL_CONDITION_CFG_DEAD_BACK_TYPE_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_DEAD_DIS_FIELD.name = "dead_dis"
+SKILL_CONDITION_CFG_DEAD_DIS_FIELD.full_name = ".ftcfg.skill_condition_cfg.dead_dis"
+SKILL_CONDITION_CFG_DEAD_DIS_FIELD.number = 27
+SKILL_CONDITION_CFG_DEAD_DIS_FIELD.index = 26
+SKILL_CONDITION_CFG_DEAD_DIS_FIELD.label = 2
+SKILL_CONDITION_CFG_DEAD_DIS_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_DEAD_DIS_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_DEAD_DIS_FIELD.type = 2
+SKILL_CONDITION_CFG_DEAD_DIS_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_DEAD_BACK_MOVE_TIME_FIELD.name = "dead_back_move_time"
+SKILL_CONDITION_CFG_DEAD_BACK_MOVE_TIME_FIELD.full_name = ".ftcfg.skill_condition_cfg.dead_back_move_time"
+SKILL_CONDITION_CFG_DEAD_BACK_MOVE_TIME_FIELD.number = 28
+SKILL_CONDITION_CFG_DEAD_BACK_MOVE_TIME_FIELD.index = 27
+SKILL_CONDITION_CFG_DEAD_BACK_MOVE_TIME_FIELD.label = 2
+SKILL_CONDITION_CFG_DEAD_BACK_MOVE_TIME_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_DEAD_BACK_MOVE_TIME_FIELD.default_value = 0
+SKILL_CONDITION_CFG_DEAD_BACK_MOVE_TIME_FIELD.type = 5
+SKILL_CONDITION_CFG_DEAD_BACK_MOVE_TIME_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_SELF_EFFECT_1_FIELD.name = "self_effect_1"
+SKILL_CONDITION_CFG_SELF_EFFECT_1_FIELD.full_name = ".ftcfg.skill_condition_cfg.self_effect_1"
+SKILL_CONDITION_CFG_SELF_EFFECT_1_FIELD.number = 29
+SKILL_CONDITION_CFG_SELF_EFFECT_1_FIELD.index = 28
+SKILL_CONDITION_CFG_SELF_EFFECT_1_FIELD.label = 2
+SKILL_CONDITION_CFG_SELF_EFFECT_1_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_SELF_EFFECT_1_FIELD.default_value = 0
+SKILL_CONDITION_CFG_SELF_EFFECT_1_FIELD.type = 5
+SKILL_CONDITION_CFG_SELF_EFFECT_1_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_SELF_HIT_BUFF1_FIELD.name = "self_hit_buff1"
+SKILL_CONDITION_CFG_SELF_HIT_BUFF1_FIELD.full_name = ".ftcfg.skill_condition_cfg.self_hit_buff1"
+SKILL_CONDITION_CFG_SELF_HIT_BUFF1_FIELD.number = 30
+SKILL_CONDITION_CFG_SELF_HIT_BUFF1_FIELD.index = 29
+SKILL_CONDITION_CFG_SELF_HIT_BUFF1_FIELD.label = 2
+SKILL_CONDITION_CFG_SELF_HIT_BUFF1_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_SELF_HIT_BUFF1_FIELD.default_value = 0
+SKILL_CONDITION_CFG_SELF_HIT_BUFF1_FIELD.type = 5
+SKILL_CONDITION_CFG_SELF_HIT_BUFF1_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_SELF_HIT_BUFF_CHANCE1_FIELD.name = "self_hit_buff_chance1"
+SKILL_CONDITION_CFG_SELF_HIT_BUFF_CHANCE1_FIELD.full_name = ".ftcfg.skill_condition_cfg.self_hit_buff_chance1"
+SKILL_CONDITION_CFG_SELF_HIT_BUFF_CHANCE1_FIELD.number = 31
+SKILL_CONDITION_CFG_SELF_HIT_BUFF_CHANCE1_FIELD.index = 30
+SKILL_CONDITION_CFG_SELF_HIT_BUFF_CHANCE1_FIELD.label = 2
+SKILL_CONDITION_CFG_SELF_HIT_BUFF_CHANCE1_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_SELF_HIT_BUFF_CHANCE1_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_SELF_HIT_BUFF_CHANCE1_FIELD.type = 2
+SKILL_CONDITION_CFG_SELF_HIT_BUFF_CHANCE1_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_HIT_EFFECT_1_FIELD.name = "hit_effect_1"
+SKILL_CONDITION_CFG_HIT_EFFECT_1_FIELD.full_name = ".ftcfg.skill_condition_cfg.hit_effect_1"
+SKILL_CONDITION_CFG_HIT_EFFECT_1_FIELD.number = 32
+SKILL_CONDITION_CFG_HIT_EFFECT_1_FIELD.index = 31
+SKILL_CONDITION_CFG_HIT_EFFECT_1_FIELD.label = 2
+SKILL_CONDITION_CFG_HIT_EFFECT_1_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_HIT_EFFECT_1_FIELD.default_value = 0
+SKILL_CONDITION_CFG_HIT_EFFECT_1_FIELD.type = 5
+SKILL_CONDITION_CFG_HIT_EFFECT_1_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_HIT_EFFECT_2_FIELD.name = "hit_effect_2"
+SKILL_CONDITION_CFG_HIT_EFFECT_2_FIELD.full_name = ".ftcfg.skill_condition_cfg.hit_effect_2"
+SKILL_CONDITION_CFG_HIT_EFFECT_2_FIELD.number = 33
+SKILL_CONDITION_CFG_HIT_EFFECT_2_FIELD.index = 32
+SKILL_CONDITION_CFG_HIT_EFFECT_2_FIELD.label = 2
+SKILL_CONDITION_CFG_HIT_EFFECT_2_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_HIT_EFFECT_2_FIELD.default_value = 0
+SKILL_CONDITION_CFG_HIT_EFFECT_2_FIELD.type = 5
+SKILL_CONDITION_CFG_HIT_EFFECT_2_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_HIT_EFFECT_3_FIELD.name = "hit_effect_3"
+SKILL_CONDITION_CFG_HIT_EFFECT_3_FIELD.full_name = ".ftcfg.skill_condition_cfg.hit_effect_3"
+SKILL_CONDITION_CFG_HIT_EFFECT_3_FIELD.number = 34
+SKILL_CONDITION_CFG_HIT_EFFECT_3_FIELD.index = 33
+SKILL_CONDITION_CFG_HIT_EFFECT_3_FIELD.label = 2
+SKILL_CONDITION_CFG_HIT_EFFECT_3_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_HIT_EFFECT_3_FIELD.default_value = 0
+SKILL_CONDITION_CFG_HIT_EFFECT_3_FIELD.type = 5
+SKILL_CONDITION_CFG_HIT_EFFECT_3_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_HIT_BUFF1_FIELD.name = "hit_buff1"
+SKILL_CONDITION_CFG_HIT_BUFF1_FIELD.full_name = ".ftcfg.skill_condition_cfg.hit_buff1"
+SKILL_CONDITION_CFG_HIT_BUFF1_FIELD.number = 35
+SKILL_CONDITION_CFG_HIT_BUFF1_FIELD.index = 34
+SKILL_CONDITION_CFG_HIT_BUFF1_FIELD.label = 2
+SKILL_CONDITION_CFG_HIT_BUFF1_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_HIT_BUFF1_FIELD.default_value = 0
+SKILL_CONDITION_CFG_HIT_BUFF1_FIELD.type = 5
+SKILL_CONDITION_CFG_HIT_BUFF1_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE1_FIELD.name = "hit_buff_chance1"
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE1_FIELD.full_name = ".ftcfg.skill_condition_cfg.hit_buff_chance1"
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE1_FIELD.number = 36
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE1_FIELD.index = 35
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE1_FIELD.label = 2
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE1_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE1_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE1_FIELD.type = 2
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE1_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_HIT_BUFF2_FIELD.name = "hit_buff2"
+SKILL_CONDITION_CFG_HIT_BUFF2_FIELD.full_name = ".ftcfg.skill_condition_cfg.hit_buff2"
+SKILL_CONDITION_CFG_HIT_BUFF2_FIELD.number = 37
+SKILL_CONDITION_CFG_HIT_BUFF2_FIELD.index = 36
+SKILL_CONDITION_CFG_HIT_BUFF2_FIELD.label = 2
+SKILL_CONDITION_CFG_HIT_BUFF2_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_HIT_BUFF2_FIELD.default_value = 0
+SKILL_CONDITION_CFG_HIT_BUFF2_FIELD.type = 5
+SKILL_CONDITION_CFG_HIT_BUFF2_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE2_FIELD.name = "hit_buff_chance2"
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE2_FIELD.full_name = ".ftcfg.skill_condition_cfg.hit_buff_chance2"
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE2_FIELD.number = 38
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE2_FIELD.index = 37
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE2_FIELD.label = 2
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE2_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE2_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE2_FIELD.type = 2
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE2_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_HIT_BUFF3_FIELD.name = "hit_buff3"
+SKILL_CONDITION_CFG_HIT_BUFF3_FIELD.full_name = ".ftcfg.skill_condition_cfg.hit_buff3"
+SKILL_CONDITION_CFG_HIT_BUFF3_FIELD.number = 39
+SKILL_CONDITION_CFG_HIT_BUFF3_FIELD.index = 38
+SKILL_CONDITION_CFG_HIT_BUFF3_FIELD.label = 2
+SKILL_CONDITION_CFG_HIT_BUFF3_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_HIT_BUFF3_FIELD.default_value = 0
+SKILL_CONDITION_CFG_HIT_BUFF3_FIELD.type = 5
+SKILL_CONDITION_CFG_HIT_BUFF3_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE3_FIELD.name = "hit_buff_chance3"
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE3_FIELD.full_name = ".ftcfg.skill_condition_cfg.hit_buff_chance3"
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE3_FIELD.number = 40
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE3_FIELD.index = 39
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE3_FIELD.label = 2
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE3_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE3_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE3_FIELD.type = 2
+SKILL_CONDITION_CFG_HIT_BUFF_CHANCE3_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_CRIT_EFFECT_FIELD.name = "crit_effect"
+SKILL_CONDITION_CFG_CRIT_EFFECT_FIELD.full_name = ".ftcfg.skill_condition_cfg.crit_effect"
+SKILL_CONDITION_CFG_CRIT_EFFECT_FIELD.number = 41
+SKILL_CONDITION_CFG_CRIT_EFFECT_FIELD.index = 40
+SKILL_CONDITION_CFG_CRIT_EFFECT_FIELD.label = 2
+SKILL_CONDITION_CFG_CRIT_EFFECT_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_CRIT_EFFECT_FIELD.default_value = 0
+SKILL_CONDITION_CFG_CRIT_EFFECT_FIELD.type = 5
+SKILL_CONDITION_CFG_CRIT_EFFECT_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_DEAD_STRIKE_EFFECT_FIELD.name = "dead_strike_effect"
+SKILL_CONDITION_CFG_DEAD_STRIKE_EFFECT_FIELD.full_name = ".ftcfg.skill_condition_cfg.dead_strike_effect"
+SKILL_CONDITION_CFG_DEAD_STRIKE_EFFECT_FIELD.number = 42
+SKILL_CONDITION_CFG_DEAD_STRIKE_EFFECT_FIELD.index = 41
+SKILL_CONDITION_CFG_DEAD_STRIKE_EFFECT_FIELD.label = 2
+SKILL_CONDITION_CFG_DEAD_STRIKE_EFFECT_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_DEAD_STRIKE_EFFECT_FIELD.default_value = 0
+SKILL_CONDITION_CFG_DEAD_STRIKE_EFFECT_FIELD.type = 5
+SKILL_CONDITION_CFG_DEAD_STRIKE_EFFECT_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_BUFF_WHEN_CRIT_FIELD.name = "buff_when_crit"
+SKILL_CONDITION_CFG_BUFF_WHEN_CRIT_FIELD.full_name = ".ftcfg.skill_condition_cfg.buff_when_crit"
+SKILL_CONDITION_CFG_BUFF_WHEN_CRIT_FIELD.number = 43
+SKILL_CONDITION_CFG_BUFF_WHEN_CRIT_FIELD.index = 42
+SKILL_CONDITION_CFG_BUFF_WHEN_CRIT_FIELD.label = 2
+SKILL_CONDITION_CFG_BUFF_WHEN_CRIT_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_BUFF_WHEN_CRIT_FIELD.default_value = 0
+SKILL_CONDITION_CFG_BUFF_WHEN_CRIT_FIELD.type = 5
+SKILL_CONDITION_CFG_BUFF_WHEN_CRIT_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_CRIT_FIELD.name = "buff_chance_when_crit"
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_CRIT_FIELD.full_name = ".ftcfg.skill_condition_cfg.buff_chance_when_crit"
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_CRIT_FIELD.number = 44
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_CRIT_FIELD.index = 43
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_CRIT_FIELD.label = 2
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_CRIT_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_CRIT_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_CRIT_FIELD.type = 2
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_CRIT_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG_BUFF_WHEN_DEADSTRIKE_FIELD.name = "buff_when_deadstrike"
+SKILL_CONDITION_CFG_BUFF_WHEN_DEADSTRIKE_FIELD.full_name = ".ftcfg.skill_condition_cfg.buff_when_deadstrike"
+SKILL_CONDITION_CFG_BUFF_WHEN_DEADSTRIKE_FIELD.number = 45
+SKILL_CONDITION_CFG_BUFF_WHEN_DEADSTRIKE_FIELD.index = 44
+SKILL_CONDITION_CFG_BUFF_WHEN_DEADSTRIKE_FIELD.label = 2
+SKILL_CONDITION_CFG_BUFF_WHEN_DEADSTRIKE_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_BUFF_WHEN_DEADSTRIKE_FIELD.default_value = 0
+SKILL_CONDITION_CFG_BUFF_WHEN_DEADSTRIKE_FIELD.type = 5
+SKILL_CONDITION_CFG_BUFF_WHEN_DEADSTRIKE_FIELD.cpp_type = 1
+
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_DEADSTRIKE_FIELD.name = "buff_chance_when_deadstrike"
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_DEADSTRIKE_FIELD.full_name = ".ftcfg.skill_condition_cfg.buff_chance_when_deadstrike"
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_DEADSTRIKE_FIELD.number = 46
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_DEADSTRIKE_FIELD.index = 45
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_DEADSTRIKE_FIELD.label = 2
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_DEADSTRIKE_FIELD.has_default_value = false
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_DEADSTRIKE_FIELD.default_value = 0.0
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_DEADSTRIKE_FIELD.type = 2
+SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_DEADSTRIKE_FIELD.cpp_type = 6
+
+SKILL_CONDITION_CFG.name = "skill_condition_cfg"
+SKILL_CONDITION_CFG.full_name = ".ftcfg.skill_condition_cfg"
+SKILL_CONDITION_CFG.nested_types = {}
+SKILL_CONDITION_CFG.enum_types = {}
+SKILL_CONDITION_CFG.fields = {SKILL_CONDITION_CFG_ID_FIELD, SKILL_CONDITION_CFG_DESC_FIELD, SKILL_CONDITION_CFG_EFFECT_TARGET_FIELD, SKILL_CONDITION_CFG_RANGE_TYPE_FIELD, SKILL_CONDITION_CFG_RANGE_ANGLE_FIELD, SKILL_CONDITION_CFG_RANGE_OFFSET_X_FIELD, SKILL_CONDITION_CFG_RANGE_OFFSET_Z_FIELD, SKILL_CONDITION_CFG_RANGE_PARA1_FIELD, SKILL_CONDITION_CFG_RANGE_PARA2_FIELD, SKILL_CONDITION_CFG_ENTITY_TYPES_FIELD, SKILL_CONDITION_CFG_INCLUDE_TARGET_FIELD, SKILL_CONDITION_CFG_TARGET_NUM_FIELD, SKILL_CONDITION_CFG_IGNORE_BLOCK_FIELD, SKILL_CONDITION_CFG_IGNORE_DODGE_FIELD, SKILL_CONDITION_CFG_TARGET_ORDER_TYPE_FIELD, SKILL_CONDITION_CFG_REPEAT_NUM_FIELD, SKILL_CONDITION_CFG_HIT_RATE_FIELD, SKILL_CONDITION_CFG_ATK_LV_FIELD, SKILL_CONDITION_CFG_AM_BEATEN_FIELD, SKILL_CONDITION_CFG_AM_BEATEN_EFF_FIELD, SKILL_CONDITION_CFG_BEATEN_TIME_FIELD, SKILL_CONDITION_CFG_BEAT_BACK_TYPE_FIELD, SKILL_CONDITION_CFG_BEAT_DIS_FIELD, SKILL_CONDITION_CFG_BEAT_BACK_MOVE_TIME_FIELD, SKILL_CONDITION_CFG_AM_DEAD_FIELD, SKILL_CONDITION_CFG_DEAD_BACK_TYPE_FIELD, SKILL_CONDITION_CFG_DEAD_DIS_FIELD, SKILL_CONDITION_CFG_DEAD_BACK_MOVE_TIME_FIELD, SKILL_CONDITION_CFG_SELF_EFFECT_1_FIELD, SKILL_CONDITION_CFG_SELF_HIT_BUFF1_FIELD, SKILL_CONDITION_CFG_SELF_HIT_BUFF_CHANCE1_FIELD, SKILL_CONDITION_CFG_HIT_EFFECT_1_FIELD, SKILL_CONDITION_CFG_HIT_EFFECT_2_FIELD, SKILL_CONDITION_CFG_HIT_EFFECT_3_FIELD, SKILL_CONDITION_CFG_HIT_BUFF1_FIELD, SKILL_CONDITION_CFG_HIT_BUFF_CHANCE1_FIELD, SKILL_CONDITION_CFG_HIT_BUFF2_FIELD, SKILL_CONDITION_CFG_HIT_BUFF_CHANCE2_FIELD, SKILL_CONDITION_CFG_HIT_BUFF3_FIELD, SKILL_CONDITION_CFG_HIT_BUFF_CHANCE3_FIELD, SKILL_CONDITION_CFG_CRIT_EFFECT_FIELD, SKILL_CONDITION_CFG_DEAD_STRIKE_EFFECT_FIELD, SKILL_CONDITION_CFG_BUFF_WHEN_CRIT_FIELD, SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_CRIT_FIELD, SKILL_CONDITION_CFG_BUFF_WHEN_DEADSTRIKE_FIELD, SKILL_CONDITION_CFG_BUFF_CHANCE_WHEN_DEADSTRIKE_FIELD}
+SKILL_CONDITION_CFG.is_extendable = false
+SKILL_CONDITION_CFG.extensions = {}
+SKILL_CONDITION_CFGS_ITEMS_FIELD.name = "items"
+SKILL_CONDITION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.skill_condition_cfgs.items"
+SKILL_CONDITION_CFGS_ITEMS_FIELD.number = 1
+SKILL_CONDITION_CFGS_ITEMS_FIELD.index = 0
+SKILL_CONDITION_CFGS_ITEMS_FIELD.label = 3
+SKILL_CONDITION_CFGS_ITEMS_FIELD.has_default_value = false
+SKILL_CONDITION_CFGS_ITEMS_FIELD.default_value = {}
+SKILL_CONDITION_CFGS_ITEMS_FIELD.message_type = SKILL_CONDITION_CFG
+SKILL_CONDITION_CFGS_ITEMS_FIELD.type = 11
+SKILL_CONDITION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SKILL_CONDITION_CFGS.name = "skill_condition_cfgs"
+SKILL_CONDITION_CFGS.full_name = ".ftcfg.skill_condition_cfgs"
+SKILL_CONDITION_CFGS.nested_types = {}
+SKILL_CONDITION_CFGS.enum_types = {}
+SKILL_CONDITION_CFGS.fields = {SKILL_CONDITION_CFGS_ITEMS_FIELD}
+SKILL_CONDITION_CFGS.is_extendable = false
+SKILL_CONDITION_CFGS.extensions = {}
+TEST_CFG_ID_FIELD.name = "id"
+TEST_CFG_ID_FIELD.full_name = ".ftcfg.test_cfg.id"
+TEST_CFG_ID_FIELD.number = 1
+TEST_CFG_ID_FIELD.index = 0
+TEST_CFG_ID_FIELD.label = 2
+TEST_CFG_ID_FIELD.has_default_value = false
+TEST_CFG_ID_FIELD.default_value = 0
+TEST_CFG_ID_FIELD.type = 5
+TEST_CFG_ID_FIELD.cpp_type = 1
+
+TEST_CFG_TESTSTRUCT1_FIELD.name = "testStruct1"
+TEST_CFG_TESTSTRUCT1_FIELD.full_name = ".ftcfg.test_cfg.testStruct1"
+TEST_CFG_TESTSTRUCT1_FIELD.number = 2
+TEST_CFG_TESTSTRUCT1_FIELD.index = 1
+TEST_CFG_TESTSTRUCT1_FIELD.label = 1
+TEST_CFG_TESTSTRUCT1_FIELD.has_default_value = false
+TEST_CFG_TESTSTRUCT1_FIELD.default_value = nil
+TEST_CFG_TESTSTRUCT1_FIELD.message_type = config_predefine_pb.TESTSTRUCT
+TEST_CFG_TESTSTRUCT1_FIELD.type = 11
+TEST_CFG_TESTSTRUCT1_FIELD.cpp_type = 10
+
+TEST_CFG_TES_FIELD.name = "tes"
+TEST_CFG_TES_FIELD.full_name = ".ftcfg.test_cfg.tes"
+TEST_CFG_TES_FIELD.number = 3
+TEST_CFG_TES_FIELD.index = 2
+TEST_CFG_TES_FIELD.label = 3
+TEST_CFG_TES_FIELD.has_default_value = false
+TEST_CFG_TES_FIELD.default_value = {}
+TEST_CFG_TES_FIELD.enum_type = config_predefine_pb.TESTENUM
+TEST_CFG_TES_FIELD.type = 14
+TEST_CFG_TES_FIELD.cpp_type = 8
+
+TEST_CFG.name = "test_cfg"
+TEST_CFG.full_name = ".ftcfg.test_cfg"
+TEST_CFG.nested_types = {}
+TEST_CFG.enum_types = {}
+TEST_CFG.fields = {TEST_CFG_ID_FIELD, TEST_CFG_TESTSTRUCT1_FIELD, TEST_CFG_TES_FIELD}
+TEST_CFG.is_extendable = false
+TEST_CFG.extensions = {}
+TEST_CFGS_ITEMS_FIELD.name = "items"
+TEST_CFGS_ITEMS_FIELD.full_name = ".ftcfg.test_cfgs.items"
+TEST_CFGS_ITEMS_FIELD.number = 1
+TEST_CFGS_ITEMS_FIELD.index = 0
+TEST_CFGS_ITEMS_FIELD.label = 3
+TEST_CFGS_ITEMS_FIELD.has_default_value = false
+TEST_CFGS_ITEMS_FIELD.default_value = {}
+TEST_CFGS_ITEMS_FIELD.message_type = TEST_CFG
+TEST_CFGS_ITEMS_FIELD.type = 11
+TEST_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TEST_CFGS.name = "test_cfgs"
+TEST_CFGS.full_name = ".ftcfg.test_cfgs"
+TEST_CFGS.nested_types = {}
+TEST_CFGS.enum_types = {}
+TEST_CFGS.fields = {TEST_CFGS_ITEMS_FIELD}
+TEST_CFGS.is_extendable = false
+TEST_CFGS.extensions = {}
+ITEM_CFG_ID_FIELD.name = "id"
+ITEM_CFG_ID_FIELD.full_name = ".ftcfg.item_cfg.id"
+ITEM_CFG_ID_FIELD.number = 1
+ITEM_CFG_ID_FIELD.index = 0
+ITEM_CFG_ID_FIELD.label = 2
+ITEM_CFG_ID_FIELD.has_default_value = false
+ITEM_CFG_ID_FIELD.default_value = 0
+ITEM_CFG_ID_FIELD.type = 13
+ITEM_CFG_ID_FIELD.cpp_type = 3
+
+ITEM_CFG_ITEM_NAME_FIELD.name = "item_name"
+ITEM_CFG_ITEM_NAME_FIELD.full_name = ".ftcfg.item_cfg.item_name"
+ITEM_CFG_ITEM_NAME_FIELD.number = 2
+ITEM_CFG_ITEM_NAME_FIELD.index = 1
+ITEM_CFG_ITEM_NAME_FIELD.label = 2
+ITEM_CFG_ITEM_NAME_FIELD.has_default_value = false
+ITEM_CFG_ITEM_NAME_FIELD.default_value = ""
+ITEM_CFG_ITEM_NAME_FIELD.type = 9
+ITEM_CFG_ITEM_NAME_FIELD.cpp_type = 9
+
+ITEM_CFG_FORMULA_ID_FIELD.name = "formula_id"
+ITEM_CFG_FORMULA_ID_FIELD.full_name = ".ftcfg.item_cfg.formula_id"
+ITEM_CFG_FORMULA_ID_FIELD.number = 3
+ITEM_CFG_FORMULA_ID_FIELD.index = 2
+ITEM_CFG_FORMULA_ID_FIELD.label = 2
+ITEM_CFG_FORMULA_ID_FIELD.has_default_value = false
+ITEM_CFG_FORMULA_ID_FIELD.default_value = 0
+ITEM_CFG_FORMULA_ID_FIELD.type = 5
+ITEM_CFG_FORMULA_ID_FIELD.cpp_type = 1
+
+ITEM_CFG_ITEM_DESC_FIELD.name = "item_desc"
+ITEM_CFG_ITEM_DESC_FIELD.full_name = ".ftcfg.item_cfg.item_desc"
+ITEM_CFG_ITEM_DESC_FIELD.number = 4
+ITEM_CFG_ITEM_DESC_FIELD.index = 3
+ITEM_CFG_ITEM_DESC_FIELD.label = 2
+ITEM_CFG_ITEM_DESC_FIELD.has_default_value = false
+ITEM_CFG_ITEM_DESC_FIELD.default_value = ""
+ITEM_CFG_ITEM_DESC_FIELD.type = 9
+ITEM_CFG_ITEM_DESC_FIELD.cpp_type = 9
+
+ITEM_CFG_STACK_MAX_FIELD.name = "stack_max"
+ITEM_CFG_STACK_MAX_FIELD.full_name = ".ftcfg.item_cfg.stack_max"
+ITEM_CFG_STACK_MAX_FIELD.number = 5
+ITEM_CFG_STACK_MAX_FIELD.index = 4
+ITEM_CFG_STACK_MAX_FIELD.label = 2
+ITEM_CFG_STACK_MAX_FIELD.has_default_value = false
+ITEM_CFG_STACK_MAX_FIELD.default_value = 0
+ITEM_CFG_STACK_MAX_FIELD.type = 5
+ITEM_CFG_STACK_MAX_FIELD.cpp_type = 1
+
+ITEM_CFG_NEED_LEVEL_FIELD.name = "need_level"
+ITEM_CFG_NEED_LEVEL_FIELD.full_name = ".ftcfg.item_cfg.need_level"
+ITEM_CFG_NEED_LEVEL_FIELD.number = 6
+ITEM_CFG_NEED_LEVEL_FIELD.index = 5
+ITEM_CFG_NEED_LEVEL_FIELD.label = 2
+ITEM_CFG_NEED_LEVEL_FIELD.has_default_value = false
+ITEM_CFG_NEED_LEVEL_FIELD.default_value = 0
+ITEM_CFG_NEED_LEVEL_FIELD.type = 5
+ITEM_CFG_NEED_LEVEL_FIELD.cpp_type = 1
+
+ITEM_CFG_NEED_PROF_FIELD.name = "need_prof"
+ITEM_CFG_NEED_PROF_FIELD.full_name = ".ftcfg.item_cfg.need_prof"
+ITEM_CFG_NEED_PROF_FIELD.number = 7
+ITEM_CFG_NEED_PROF_FIELD.index = 6
+ITEM_CFG_NEED_PROF_FIELD.label = 2
+ITEM_CFG_NEED_PROF_FIELD.has_default_value = false
+ITEM_CFG_NEED_PROF_FIELD.default_value = nil
+ITEM_CFG_NEED_PROF_FIELD.enum_type = config_predefine_pb.EPROFTYPE
+ITEM_CFG_NEED_PROF_FIELD.type = 14
+ITEM_CFG_NEED_PROF_FIELD.cpp_type = 8
+
+ITEM_CFG_ITEM_TYPE_FIELD.name = "item_type"
+ITEM_CFG_ITEM_TYPE_FIELD.full_name = ".ftcfg.item_cfg.item_type"
+ITEM_CFG_ITEM_TYPE_FIELD.number = 8
+ITEM_CFG_ITEM_TYPE_FIELD.index = 7
+ITEM_CFG_ITEM_TYPE_FIELD.label = 2
+ITEM_CFG_ITEM_TYPE_FIELD.has_default_value = false
+ITEM_CFG_ITEM_TYPE_FIELD.default_value = nil
+ITEM_CFG_ITEM_TYPE_FIELD.enum_type = config_predefine_pb.EITEMTYPE
+ITEM_CFG_ITEM_TYPE_FIELD.type = 14
+ITEM_CFG_ITEM_TYPE_FIELD.cpp_type = 8
+
+ITEM_CFG_ITEM_SUB_TYPE_FIELD.name = "item_sub_type"
+ITEM_CFG_ITEM_SUB_TYPE_FIELD.full_name = ".ftcfg.item_cfg.item_sub_type"
+ITEM_CFG_ITEM_SUB_TYPE_FIELD.number = 9
+ITEM_CFG_ITEM_SUB_TYPE_FIELD.index = 8
+ITEM_CFG_ITEM_SUB_TYPE_FIELD.label = 2
+ITEM_CFG_ITEM_SUB_TYPE_FIELD.has_default_value = false
+ITEM_CFG_ITEM_SUB_TYPE_FIELD.default_value = 0
+ITEM_CFG_ITEM_SUB_TYPE_FIELD.type = 5
+ITEM_CFG_ITEM_SUB_TYPE_FIELD.cpp_type = 1
+
+ITEM_CFG_ITEM_PART_FIELD.name = "item_part"
+ITEM_CFG_ITEM_PART_FIELD.full_name = ".ftcfg.item_cfg.item_part"
+ITEM_CFG_ITEM_PART_FIELD.number = 10
+ITEM_CFG_ITEM_PART_FIELD.index = 9
+ITEM_CFG_ITEM_PART_FIELD.label = 3
+ITEM_CFG_ITEM_PART_FIELD.has_default_value = false
+ITEM_CFG_ITEM_PART_FIELD.default_value = {}
+ITEM_CFG_ITEM_PART_FIELD.type = 5
+ITEM_CFG_ITEM_PART_FIELD.cpp_type = 1
+
+ITEM_CFG_DISPLAY_TYPE_FIELD.name = "display_type"
+ITEM_CFG_DISPLAY_TYPE_FIELD.full_name = ".ftcfg.item_cfg.display_type"
+ITEM_CFG_DISPLAY_TYPE_FIELD.number = 11
+ITEM_CFG_DISPLAY_TYPE_FIELD.index = 10
+ITEM_CFG_DISPLAY_TYPE_FIELD.label = 2
+ITEM_CFG_DISPLAY_TYPE_FIELD.has_default_value = false
+ITEM_CFG_DISPLAY_TYPE_FIELD.default_value = 0
+ITEM_CFG_DISPLAY_TYPE_FIELD.type = 5
+ITEM_CFG_DISPLAY_TYPE_FIELD.cpp_type = 1
+
+ITEM_CFG_ITEM_COLOR_FIELD.name = "item_color"
+ITEM_CFG_ITEM_COLOR_FIELD.full_name = ".ftcfg.item_cfg.item_color"
+ITEM_CFG_ITEM_COLOR_FIELD.number = 12
+ITEM_CFG_ITEM_COLOR_FIELD.index = 11
+ITEM_CFG_ITEM_COLOR_FIELD.label = 2
+ITEM_CFG_ITEM_COLOR_FIELD.has_default_value = false
+ITEM_CFG_ITEM_COLOR_FIELD.default_value = nil
+ITEM_CFG_ITEM_COLOR_FIELD.enum_type = config_predefine_pb.EITEMCOLOR
+ITEM_CFG_ITEM_COLOR_FIELD.type = 14
+ITEM_CFG_ITEM_COLOR_FIELD.cpp_type = 8
+
+ITEM_CFG_ITEM_ICON_FIELD.name = "item_icon"
+ITEM_CFG_ITEM_ICON_FIELD.full_name = ".ftcfg.item_cfg.item_icon"
+ITEM_CFG_ITEM_ICON_FIELD.number = 13
+ITEM_CFG_ITEM_ICON_FIELD.index = 12
+ITEM_CFG_ITEM_ICON_FIELD.label = 2
+ITEM_CFG_ITEM_ICON_FIELD.has_default_value = false
+ITEM_CFG_ITEM_ICON_FIELD.default_value = ""
+ITEM_CFG_ITEM_ICON_FIELD.type = 9
+ITEM_CFG_ITEM_ICON_FIELD.cpp_type = 9
+
+ITEM_CFG_ITEM_MARK_FIELD.name = "item_mark"
+ITEM_CFG_ITEM_MARK_FIELD.full_name = ".ftcfg.item_cfg.item_mark"
+ITEM_CFG_ITEM_MARK_FIELD.number = 14
+ITEM_CFG_ITEM_MARK_FIELD.index = 13
+ITEM_CFG_ITEM_MARK_FIELD.label = 2
+ITEM_CFG_ITEM_MARK_FIELD.has_default_value = false
+ITEM_CFG_ITEM_MARK_FIELD.default_value = 0
+ITEM_CFG_ITEM_MARK_FIELD.type = 5
+ITEM_CFG_ITEM_MARK_FIELD.cpp_type = 1
+
+ITEM_CFG_OWN_MAX_FIELD.name = "own_max"
+ITEM_CFG_OWN_MAX_FIELD.full_name = ".ftcfg.item_cfg.own_max"
+ITEM_CFG_OWN_MAX_FIELD.number = 15
+ITEM_CFG_OWN_MAX_FIELD.index = 14
+ITEM_CFG_OWN_MAX_FIELD.label = 2
+ITEM_CFG_OWN_MAX_FIELD.has_default_value = false
+ITEM_CFG_OWN_MAX_FIELD.default_value = 0
+ITEM_CFG_OWN_MAX_FIELD.type = 13
+ITEM_CFG_OWN_MAX_FIELD.cpp_type = 3
+
+ITEM_CFG_COULD_TRADE_FIELD.name = "could_trade"
+ITEM_CFG_COULD_TRADE_FIELD.full_name = ".ftcfg.item_cfg.could_trade"
+ITEM_CFG_COULD_TRADE_FIELD.number = 16
+ITEM_CFG_COULD_TRADE_FIELD.index = 15
+ITEM_CFG_COULD_TRADE_FIELD.label = 2
+ITEM_CFG_COULD_TRADE_FIELD.has_default_value = false
+ITEM_CFG_COULD_TRADE_FIELD.default_value = 0
+ITEM_CFG_COULD_TRADE_FIELD.type = 5
+ITEM_CFG_COULD_TRADE_FIELD.cpp_type = 1
+
+ITEM_CFG_TRADE_COOLDOWN_FIELD.name = "trade_cooldown"
+ITEM_CFG_TRADE_COOLDOWN_FIELD.full_name = ".ftcfg.item_cfg.trade_cooldown"
+ITEM_CFG_TRADE_COOLDOWN_FIELD.number = 17
+ITEM_CFG_TRADE_COOLDOWN_FIELD.index = 16
+ITEM_CFG_TRADE_COOLDOWN_FIELD.label = 2
+ITEM_CFG_TRADE_COOLDOWN_FIELD.has_default_value = false
+ITEM_CFG_TRADE_COOLDOWN_FIELD.default_value = 0
+ITEM_CFG_TRADE_COOLDOWN_FIELD.type = 5
+ITEM_CFG_TRADE_COOLDOWN_FIELD.cpp_type = 1
+
+ITEM_CFG_COULD_SELL_FIELD.name = "could_sell"
+ITEM_CFG_COULD_SELL_FIELD.full_name = ".ftcfg.item_cfg.could_sell"
+ITEM_CFG_COULD_SELL_FIELD.number = 18
+ITEM_CFG_COULD_SELL_FIELD.index = 17
+ITEM_CFG_COULD_SELL_FIELD.label = 2
+ITEM_CFG_COULD_SELL_FIELD.has_default_value = false
+ITEM_CFG_COULD_SELL_FIELD.default_value = 0
+ITEM_CFG_COULD_SELL_FIELD.type = 5
+ITEM_CFG_COULD_SELL_FIELD.cpp_type = 1
+
+ITEM_CFG_SELL_COST_TYPE_FIELD.name = "sell_cost_type"
+ITEM_CFG_SELL_COST_TYPE_FIELD.full_name = ".ftcfg.item_cfg.sell_cost_type"
+ITEM_CFG_SELL_COST_TYPE_FIELD.number = 19
+ITEM_CFG_SELL_COST_TYPE_FIELD.index = 18
+ITEM_CFG_SELL_COST_TYPE_FIELD.label = 2
+ITEM_CFG_SELL_COST_TYPE_FIELD.has_default_value = false
+ITEM_CFG_SELL_COST_TYPE_FIELD.default_value = 0
+ITEM_CFG_SELL_COST_TYPE_FIELD.type = 5
+ITEM_CFG_SELL_COST_TYPE_FIELD.cpp_type = 1
+
+ITEM_CFG_SELL_COST_NUM_FIELD.name = "sell_cost_num"
+ITEM_CFG_SELL_COST_NUM_FIELD.full_name = ".ftcfg.item_cfg.sell_cost_num"
+ITEM_CFG_SELL_COST_NUM_FIELD.number = 20
+ITEM_CFG_SELL_COST_NUM_FIELD.index = 19
+ITEM_CFG_SELL_COST_NUM_FIELD.label = 2
+ITEM_CFG_SELL_COST_NUM_FIELD.has_default_value = false
+ITEM_CFG_SELL_COST_NUM_FIELD.default_value = 0
+ITEM_CFG_SELL_COST_NUM_FIELD.type = 5
+ITEM_CFG_SELL_COST_NUM_FIELD.cpp_type = 1
+
+ITEM_CFG_COULD_USE_FIELD.name = "could_use"
+ITEM_CFG_COULD_USE_FIELD.full_name = ".ftcfg.item_cfg.could_use"
+ITEM_CFG_COULD_USE_FIELD.number = 21
+ITEM_CFG_COULD_USE_FIELD.index = 20
+ITEM_CFG_COULD_USE_FIELD.label = 2
+ITEM_CFG_COULD_USE_FIELD.has_default_value = false
+ITEM_CFG_COULD_USE_FIELD.default_value = 0
+ITEM_CFG_COULD_USE_FIELD.type = 5
+ITEM_CFG_COULD_USE_FIELD.cpp_type = 1
+
+ITEM_CFG_COULD_WINDOWUSE_FIELD.name = "could_windowuse"
+ITEM_CFG_COULD_WINDOWUSE_FIELD.full_name = ".ftcfg.item_cfg.could_windowuse"
+ITEM_CFG_COULD_WINDOWUSE_FIELD.number = 22
+ITEM_CFG_COULD_WINDOWUSE_FIELD.index = 21
+ITEM_CFG_COULD_WINDOWUSE_FIELD.label = 2
+ITEM_CFG_COULD_WINDOWUSE_FIELD.has_default_value = false
+ITEM_CFG_COULD_WINDOWUSE_FIELD.default_value = 0
+ITEM_CFG_COULD_WINDOWUSE_FIELD.type = 5
+ITEM_CFG_COULD_WINDOWUSE_FIELD.cpp_type = 1
+
+ITEM_CFG_WINDOWUSE_MAX_FIELD.name = "windowuse_max"
+ITEM_CFG_WINDOWUSE_MAX_FIELD.full_name = ".ftcfg.item_cfg.windowuse_max"
+ITEM_CFG_WINDOWUSE_MAX_FIELD.number = 23
+ITEM_CFG_WINDOWUSE_MAX_FIELD.index = 22
+ITEM_CFG_WINDOWUSE_MAX_FIELD.label = 2
+ITEM_CFG_WINDOWUSE_MAX_FIELD.has_default_value = false
+ITEM_CFG_WINDOWUSE_MAX_FIELD.default_value = 0
+ITEM_CFG_WINDOWUSE_MAX_FIELD.type = 5
+ITEM_CFG_WINDOWUSE_MAX_FIELD.cpp_type = 1
+
+ITEM_CFG_COULD_SHOW_USE_FIELD.name = "could_show_use"
+ITEM_CFG_COULD_SHOW_USE_FIELD.full_name = ".ftcfg.item_cfg.could_show_use"
+ITEM_CFG_COULD_SHOW_USE_FIELD.number = 24
+ITEM_CFG_COULD_SHOW_USE_FIELD.index = 23
+ITEM_CFG_COULD_SHOW_USE_FIELD.label = 2
+ITEM_CFG_COULD_SHOW_USE_FIELD.has_default_value = false
+ITEM_CFG_COULD_SHOW_USE_FIELD.default_value = 0
+ITEM_CFG_COULD_SHOW_USE_FIELD.type = 5
+ITEM_CFG_COULD_SHOW_USE_FIELD.cpp_type = 1
+
+ITEM_CFG_USE_DELAY_FIELD.name = "use_delay"
+ITEM_CFG_USE_DELAY_FIELD.full_name = ".ftcfg.item_cfg.use_delay"
+ITEM_CFG_USE_DELAY_FIELD.number = 25
+ITEM_CFG_USE_DELAY_FIELD.index = 24
+ITEM_CFG_USE_DELAY_FIELD.label = 2
+ITEM_CFG_USE_DELAY_FIELD.has_default_value = false
+ITEM_CFG_USE_DELAY_FIELD.default_value = 0
+ITEM_CFG_USE_DELAY_FIELD.type = 5
+ITEM_CFG_USE_DELAY_FIELD.cpp_type = 1
+
+ITEM_CFG_COULD_BULK_USE_FIELD.name = "could_bulk_use"
+ITEM_CFG_COULD_BULK_USE_FIELD.full_name = ".ftcfg.item_cfg.could_bulk_use"
+ITEM_CFG_COULD_BULK_USE_FIELD.number = 26
+ITEM_CFG_COULD_BULK_USE_FIELD.index = 25
+ITEM_CFG_COULD_BULK_USE_FIELD.label = 2
+ITEM_CFG_COULD_BULK_USE_FIELD.has_default_value = false
+ITEM_CFG_COULD_BULK_USE_FIELD.default_value = 0
+ITEM_CFG_COULD_BULK_USE_FIELD.type = 5
+ITEM_CFG_COULD_BULK_USE_FIELD.cpp_type = 1
+
+ITEM_CFG_CD_GROUP_ID_FIELD.name = "cd_group_id"
+ITEM_CFG_CD_GROUP_ID_FIELD.full_name = ".ftcfg.item_cfg.cd_group_id"
+ITEM_CFG_CD_GROUP_ID_FIELD.number = 27
+ITEM_CFG_CD_GROUP_ID_FIELD.index = 26
+ITEM_CFG_CD_GROUP_ID_FIELD.label = 2
+ITEM_CFG_CD_GROUP_ID_FIELD.has_default_value = false
+ITEM_CFG_CD_GROUP_ID_FIELD.default_value = 0
+ITEM_CFG_CD_GROUP_ID_FIELD.type = 5
+ITEM_CFG_CD_GROUP_ID_FIELD.cpp_type = 1
+
+ITEM_CFG_CD_TIME_FIELD.name = "cd_time"
+ITEM_CFG_CD_TIME_FIELD.full_name = ".ftcfg.item_cfg.cd_time"
+ITEM_CFG_CD_TIME_FIELD.number = 28
+ITEM_CFG_CD_TIME_FIELD.index = 27
+ITEM_CFG_CD_TIME_FIELD.label = 2
+ITEM_CFG_CD_TIME_FIELD.has_default_value = false
+ITEM_CFG_CD_TIME_FIELD.default_value = 0
+ITEM_CFG_CD_TIME_FIELD.type = 5
+ITEM_CFG_CD_TIME_FIELD.cpp_type = 1
+
+ITEM_CFG_COULD_IN_STORAGE_FIELD.name = "could_in_storage"
+ITEM_CFG_COULD_IN_STORAGE_FIELD.full_name = ".ftcfg.item_cfg.could_in_storage"
+ITEM_CFG_COULD_IN_STORAGE_FIELD.number = 29
+ITEM_CFG_COULD_IN_STORAGE_FIELD.index = 28
+ITEM_CFG_COULD_IN_STORAGE_FIELD.label = 2
+ITEM_CFG_COULD_IN_STORAGE_FIELD.has_default_value = false
+ITEM_CFG_COULD_IN_STORAGE_FIELD.default_value = 0
+ITEM_CFG_COULD_IN_STORAGE_FIELD.type = 5
+ITEM_CFG_COULD_IN_STORAGE_FIELD.cpp_type = 1
+
+ITEM_CFG_COULD_OBTAIN_FIELD.name = "could_obtain"
+ITEM_CFG_COULD_OBTAIN_FIELD.full_name = ".ftcfg.item_cfg.could_obtain"
+ITEM_CFG_COULD_OBTAIN_FIELD.number = 30
+ITEM_CFG_COULD_OBTAIN_FIELD.index = 29
+ITEM_CFG_COULD_OBTAIN_FIELD.label = 2
+ITEM_CFG_COULD_OBTAIN_FIELD.has_default_value = false
+ITEM_CFG_COULD_OBTAIN_FIELD.default_value = 0
+ITEM_CFG_COULD_OBTAIN_FIELD.type = 5
+ITEM_CFG_COULD_OBTAIN_FIELD.cpp_type = 1
+
+ITEM_CFG_OBTAIN_LIST_FIELD.name = "obtain_list"
+ITEM_CFG_OBTAIN_LIST_FIELD.full_name = ".ftcfg.item_cfg.obtain_list"
+ITEM_CFG_OBTAIN_LIST_FIELD.number = 31
+ITEM_CFG_OBTAIN_LIST_FIELD.index = 30
+ITEM_CFG_OBTAIN_LIST_FIELD.label = 2
+ITEM_CFG_OBTAIN_LIST_FIELD.has_default_value = false
+ITEM_CFG_OBTAIN_LIST_FIELD.default_value = 0
+ITEM_CFG_OBTAIN_LIST_FIELD.type = 5
+ITEM_CFG_OBTAIN_LIST_FIELD.cpp_type = 1
+
+ITEM_CFG_PROP_EFFECT1_FIELD.name = "prop_effect1"
+ITEM_CFG_PROP_EFFECT1_FIELD.full_name = ".ftcfg.item_cfg.prop_effect1"
+ITEM_CFG_PROP_EFFECT1_FIELD.number = 32
+ITEM_CFG_PROP_EFFECT1_FIELD.index = 31
+ITEM_CFG_PROP_EFFECT1_FIELD.label = 2
+ITEM_CFG_PROP_EFFECT1_FIELD.has_default_value = false
+ITEM_CFG_PROP_EFFECT1_FIELD.default_value = ""
+ITEM_CFG_PROP_EFFECT1_FIELD.type = 9
+ITEM_CFG_PROP_EFFECT1_FIELD.cpp_type = 9
+
+ITEM_CFG_PROP_EFFECT2_FIELD.name = "prop_effect2"
+ITEM_CFG_PROP_EFFECT2_FIELD.full_name = ".ftcfg.item_cfg.prop_effect2"
+ITEM_CFG_PROP_EFFECT2_FIELD.number = 33
+ITEM_CFG_PROP_EFFECT2_FIELD.index = 32
+ITEM_CFG_PROP_EFFECT2_FIELD.label = 2
+ITEM_CFG_PROP_EFFECT2_FIELD.has_default_value = false
+ITEM_CFG_PROP_EFFECT2_FIELD.default_value = ""
+ITEM_CFG_PROP_EFFECT2_FIELD.type = 9
+ITEM_CFG_PROP_EFFECT2_FIELD.cpp_type = 9
+
+ITEM_CFG_PROP_EFFECT3_FIELD.name = "prop_effect3"
+ITEM_CFG_PROP_EFFECT3_FIELD.full_name = ".ftcfg.item_cfg.prop_effect3"
+ITEM_CFG_PROP_EFFECT3_FIELD.number = 34
+ITEM_CFG_PROP_EFFECT3_FIELD.index = 33
+ITEM_CFG_PROP_EFFECT3_FIELD.label = 2
+ITEM_CFG_PROP_EFFECT3_FIELD.has_default_value = false
+ITEM_CFG_PROP_EFFECT3_FIELD.default_value = ""
+ITEM_CFG_PROP_EFFECT3_FIELD.type = 9
+ITEM_CFG_PROP_EFFECT3_FIELD.cpp_type = 9
+
+ITEM_CFG_PROP_EFFECT4_FIELD.name = "prop_effect4"
+ITEM_CFG_PROP_EFFECT4_FIELD.full_name = ".ftcfg.item_cfg.prop_effect4"
+ITEM_CFG_PROP_EFFECT4_FIELD.number = 35
+ITEM_CFG_PROP_EFFECT4_FIELD.index = 34
+ITEM_CFG_PROP_EFFECT4_FIELD.label = 2
+ITEM_CFG_PROP_EFFECT4_FIELD.has_default_value = false
+ITEM_CFG_PROP_EFFECT4_FIELD.default_value = ""
+ITEM_CFG_PROP_EFFECT4_FIELD.type = 9
+ITEM_CFG_PROP_EFFECT4_FIELD.cpp_type = 9
+
+ITEM_CFG_PROP_EFFECT5_FIELD.name = "prop_effect5"
+ITEM_CFG_PROP_EFFECT5_FIELD.full_name = ".ftcfg.item_cfg.prop_effect5"
+ITEM_CFG_PROP_EFFECT5_FIELD.number = 36
+ITEM_CFG_PROP_EFFECT5_FIELD.index = 35
+ITEM_CFG_PROP_EFFECT5_FIELD.label = 2
+ITEM_CFG_PROP_EFFECT5_FIELD.has_default_value = false
+ITEM_CFG_PROP_EFFECT5_FIELD.default_value = ""
+ITEM_CFG_PROP_EFFECT5_FIELD.type = 9
+ITEM_CFG_PROP_EFFECT5_FIELD.cpp_type = 9
+
+ITEM_CFG_PROP_EFFECT6_FIELD.name = "prop_effect6"
+ITEM_CFG_PROP_EFFECT6_FIELD.full_name = ".ftcfg.item_cfg.prop_effect6"
+ITEM_CFG_PROP_EFFECT6_FIELD.number = 37
+ITEM_CFG_PROP_EFFECT6_FIELD.index = 36
+ITEM_CFG_PROP_EFFECT6_FIELD.label = 2
+ITEM_CFG_PROP_EFFECT6_FIELD.has_default_value = false
+ITEM_CFG_PROP_EFFECT6_FIELD.default_value = ""
+ITEM_CFG_PROP_EFFECT6_FIELD.type = 9
+ITEM_CFG_PROP_EFFECT6_FIELD.cpp_type = 9
+
+ITEM_CFG_PROP_EFFECT7_FIELD.name = "prop_effect7"
+ITEM_CFG_PROP_EFFECT7_FIELD.full_name = ".ftcfg.item_cfg.prop_effect7"
+ITEM_CFG_PROP_EFFECT7_FIELD.number = 38
+ITEM_CFG_PROP_EFFECT7_FIELD.index = 37
+ITEM_CFG_PROP_EFFECT7_FIELD.label = 2
+ITEM_CFG_PROP_EFFECT7_FIELD.has_default_value = false
+ITEM_CFG_PROP_EFFECT7_FIELD.default_value = ""
+ITEM_CFG_PROP_EFFECT7_FIELD.type = 9
+ITEM_CFG_PROP_EFFECT7_FIELD.cpp_type = 9
+
+ITEM_CFG_PROP_EFFECT8_FIELD.name = "prop_effect8"
+ITEM_CFG_PROP_EFFECT8_FIELD.full_name = ".ftcfg.item_cfg.prop_effect8"
+ITEM_CFG_PROP_EFFECT8_FIELD.number = 39
+ITEM_CFG_PROP_EFFECT8_FIELD.index = 38
+ITEM_CFG_PROP_EFFECT8_FIELD.label = 2
+ITEM_CFG_PROP_EFFECT8_FIELD.has_default_value = false
+ITEM_CFG_PROP_EFFECT8_FIELD.default_value = ""
+ITEM_CFG_PROP_EFFECT8_FIELD.type = 9
+ITEM_CFG_PROP_EFFECT8_FIELD.cpp_type = 9
+
+ITEM_CFG_PRICE_GOLD_FIELD.name = "price_gold"
+ITEM_CFG_PRICE_GOLD_FIELD.full_name = ".ftcfg.item_cfg.price_gold"
+ITEM_CFG_PRICE_GOLD_FIELD.number = 40
+ITEM_CFG_PRICE_GOLD_FIELD.index = 39
+ITEM_CFG_PRICE_GOLD_FIELD.label = 2
+ITEM_CFG_PRICE_GOLD_FIELD.has_default_value = false
+ITEM_CFG_PRICE_GOLD_FIELD.default_value = 0
+ITEM_CFG_PRICE_GOLD_FIELD.type = 13
+ITEM_CFG_PRICE_GOLD_FIELD.cpp_type = 3
+
+ITEM_CFG_LUCK_VALUE_FIELD.name = "luck_value"
+ITEM_CFG_LUCK_VALUE_FIELD.full_name = ".ftcfg.item_cfg.luck_value"
+ITEM_CFG_LUCK_VALUE_FIELD.number = 41
+ITEM_CFG_LUCK_VALUE_FIELD.index = 40
+ITEM_CFG_LUCK_VALUE_FIELD.label = 2
+ITEM_CFG_LUCK_VALUE_FIELD.has_default_value = false
+ITEM_CFG_LUCK_VALUE_FIELD.default_value = 0
+ITEM_CFG_LUCK_VALUE_FIELD.type = 5
+ITEM_CFG_LUCK_VALUE_FIELD.cpp_type = 1
+
+ITEM_CFG_POP_VALUE_FIELD.name = "pop_value"
+ITEM_CFG_POP_VALUE_FIELD.full_name = ".ftcfg.item_cfg.pop_value"
+ITEM_CFG_POP_VALUE_FIELD.number = 42
+ITEM_CFG_POP_VALUE_FIELD.index = 41
+ITEM_CFG_POP_VALUE_FIELD.label = 2
+ITEM_CFG_POP_VALUE_FIELD.has_default_value = false
+ITEM_CFG_POP_VALUE_FIELD.default_value = 0
+ITEM_CFG_POP_VALUE_FIELD.type = 13
+ITEM_CFG_POP_VALUE_FIELD.cpp_type = 3
+
+ITEM_CFG_COMBAT_POINT_FIELD.name = "combat_point"
+ITEM_CFG_COMBAT_POINT_FIELD.full_name = ".ftcfg.item_cfg.combat_point"
+ITEM_CFG_COMBAT_POINT_FIELD.number = 43
+ITEM_CFG_COMBAT_POINT_FIELD.index = 42
+ITEM_CFG_COMBAT_POINT_FIELD.label = 2
+ITEM_CFG_COMBAT_POINT_FIELD.has_default_value = false
+ITEM_CFG_COMBAT_POINT_FIELD.default_value = 0
+ITEM_CFG_COMBAT_POINT_FIELD.type = 13
+ITEM_CFG_COMBAT_POINT_FIELD.cpp_type = 3
+
+ITEM_CFG_EFFECT_TIMELIMITED_FIELD.name = "effect_timelimited"
+ITEM_CFG_EFFECT_TIMELIMITED_FIELD.full_name = ".ftcfg.item_cfg.effect_timelimited"
+ITEM_CFG_EFFECT_TIMELIMITED_FIELD.number = 44
+ITEM_CFG_EFFECT_TIMELIMITED_FIELD.index = 43
+ITEM_CFG_EFFECT_TIMELIMITED_FIELD.label = 2
+ITEM_CFG_EFFECT_TIMELIMITED_FIELD.has_default_value = false
+ITEM_CFG_EFFECT_TIMELIMITED_FIELD.default_value = 0
+ITEM_CFG_EFFECT_TIMELIMITED_FIELD.type = 5
+ITEM_CFG_EFFECT_TIMELIMITED_FIELD.cpp_type = 1
+
+ITEM_CFG_DROP_ID_FIELD.name = "drop_id"
+ITEM_CFG_DROP_ID_FIELD.full_name = ".ftcfg.item_cfg.drop_id"
+ITEM_CFG_DROP_ID_FIELD.number = 45
+ITEM_CFG_DROP_ID_FIELD.index = 44
+ITEM_CFG_DROP_ID_FIELD.label = 2
+ITEM_CFG_DROP_ID_FIELD.has_default_value = false
+ITEM_CFG_DROP_ID_FIELD.default_value = 0
+ITEM_CFG_DROP_ID_FIELD.type = 13
+ITEM_CFG_DROP_ID_FIELD.cpp_type = 3
+
+ITEM_CFG_COST_TYPE_FIELD.name = "cost_type"
+ITEM_CFG_COST_TYPE_FIELD.full_name = ".ftcfg.item_cfg.cost_type"
+ITEM_CFG_COST_TYPE_FIELD.number = 46
+ITEM_CFG_COST_TYPE_FIELD.index = 45
+ITEM_CFG_COST_TYPE_FIELD.label = 3
+ITEM_CFG_COST_TYPE_FIELD.has_default_value = false
+ITEM_CFG_COST_TYPE_FIELD.default_value = {}
+ITEM_CFG_COST_TYPE_FIELD.type = 13
+ITEM_CFG_COST_TYPE_FIELD.cpp_type = 3
+
+ITEM_CFG_COST_COUNT_FIELD.name = "cost_count"
+ITEM_CFG_COST_COUNT_FIELD.full_name = ".ftcfg.item_cfg.cost_count"
+ITEM_CFG_COST_COUNT_FIELD.number = 47
+ITEM_CFG_COST_COUNT_FIELD.index = 46
+ITEM_CFG_COST_COUNT_FIELD.label = 3
+ITEM_CFG_COST_COUNT_FIELD.has_default_value = false
+ITEM_CFG_COST_COUNT_FIELD.default_value = {}
+ITEM_CFG_COST_COUNT_FIELD.type = 13
+ITEM_CFG_COST_COUNT_FIELD.cpp_type = 3
+
+ITEM_CFG_HOLE_NUM_FIELD.name = "hole_num"
+ITEM_CFG_HOLE_NUM_FIELD.full_name = ".ftcfg.item_cfg.hole_num"
+ITEM_CFG_HOLE_NUM_FIELD.number = 48
+ITEM_CFG_HOLE_NUM_FIELD.index = 47
+ITEM_CFG_HOLE_NUM_FIELD.label = 2
+ITEM_CFG_HOLE_NUM_FIELD.has_default_value = false
+ITEM_CFG_HOLE_NUM_FIELD.default_value = 0
+ITEM_CFG_HOLE_NUM_FIELD.type = 5
+ITEM_CFG_HOLE_NUM_FIELD.cpp_type = 1
+
+ITEM_CFG_INLAY_TYPE_FIELD.name = "inlay_type"
+ITEM_CFG_INLAY_TYPE_FIELD.full_name = ".ftcfg.item_cfg.inlay_type"
+ITEM_CFG_INLAY_TYPE_FIELD.number = 49
+ITEM_CFG_INLAY_TYPE_FIELD.index = 48
+ITEM_CFG_INLAY_TYPE_FIELD.label = 3
+ITEM_CFG_INLAY_TYPE_FIELD.has_default_value = false
+ITEM_CFG_INLAY_TYPE_FIELD.default_value = {}
+ITEM_CFG_INLAY_TYPE_FIELD.type = 5
+ITEM_CFG_INLAY_TYPE_FIELD.cpp_type = 1
+
+ITEM_CFG_INLAY_LEVEL_FIELD.name = "inlay_level"
+ITEM_CFG_INLAY_LEVEL_FIELD.full_name = ".ftcfg.item_cfg.inlay_level"
+ITEM_CFG_INLAY_LEVEL_FIELD.number = 50
+ITEM_CFG_INLAY_LEVEL_FIELD.index = 49
+ITEM_CFG_INLAY_LEVEL_FIELD.label = 2
+ITEM_CFG_INLAY_LEVEL_FIELD.has_default_value = false
+ITEM_CFG_INLAY_LEVEL_FIELD.default_value = 0
+ITEM_CFG_INLAY_LEVEL_FIELD.type = 5
+ITEM_CFG_INLAY_LEVEL_FIELD.cpp_type = 1
+
+ITEM_CFG.name = "item_cfg"
+ITEM_CFG.full_name = ".ftcfg.item_cfg"
+ITEM_CFG.nested_types = {}
+ITEM_CFG.enum_types = {}
+ITEM_CFG.fields = {ITEM_CFG_ID_FIELD, ITEM_CFG_ITEM_NAME_FIELD, ITEM_CFG_FORMULA_ID_FIELD, ITEM_CFG_ITEM_DESC_FIELD, ITEM_CFG_STACK_MAX_FIELD, ITEM_CFG_NEED_LEVEL_FIELD, ITEM_CFG_NEED_PROF_FIELD, ITEM_CFG_ITEM_TYPE_FIELD, ITEM_CFG_ITEM_SUB_TYPE_FIELD, ITEM_CFG_ITEM_PART_FIELD, ITEM_CFG_DISPLAY_TYPE_FIELD, ITEM_CFG_ITEM_COLOR_FIELD, ITEM_CFG_ITEM_ICON_FIELD, ITEM_CFG_ITEM_MARK_FIELD, ITEM_CFG_OWN_MAX_FIELD, ITEM_CFG_COULD_TRADE_FIELD, ITEM_CFG_TRADE_COOLDOWN_FIELD, ITEM_CFG_COULD_SELL_FIELD, ITEM_CFG_SELL_COST_TYPE_FIELD, ITEM_CFG_SELL_COST_NUM_FIELD, ITEM_CFG_COULD_USE_FIELD, ITEM_CFG_COULD_WINDOWUSE_FIELD, ITEM_CFG_WINDOWUSE_MAX_FIELD, ITEM_CFG_COULD_SHOW_USE_FIELD, ITEM_CFG_USE_DELAY_FIELD, ITEM_CFG_COULD_BULK_USE_FIELD, ITEM_CFG_CD_GROUP_ID_FIELD, ITEM_CFG_CD_TIME_FIELD, ITEM_CFG_COULD_IN_STORAGE_FIELD, ITEM_CFG_COULD_OBTAIN_FIELD, ITEM_CFG_OBTAIN_LIST_FIELD, ITEM_CFG_PROP_EFFECT1_FIELD, ITEM_CFG_PROP_EFFECT2_FIELD, ITEM_CFG_PROP_EFFECT3_FIELD, ITEM_CFG_PROP_EFFECT4_FIELD, ITEM_CFG_PROP_EFFECT5_FIELD, ITEM_CFG_PROP_EFFECT6_FIELD, ITEM_CFG_PROP_EFFECT7_FIELD, ITEM_CFG_PROP_EFFECT8_FIELD, ITEM_CFG_PRICE_GOLD_FIELD, ITEM_CFG_LUCK_VALUE_FIELD, ITEM_CFG_POP_VALUE_FIELD, ITEM_CFG_COMBAT_POINT_FIELD, ITEM_CFG_EFFECT_TIMELIMITED_FIELD, ITEM_CFG_DROP_ID_FIELD, ITEM_CFG_COST_TYPE_FIELD, ITEM_CFG_COST_COUNT_FIELD, ITEM_CFG_HOLE_NUM_FIELD, ITEM_CFG_INLAY_TYPE_FIELD, ITEM_CFG_INLAY_LEVEL_FIELD}
+ITEM_CFG.is_extendable = false
+ITEM_CFG.extensions = {}
+ITEM_CFGS_ITEMS_FIELD.name = "items"
+ITEM_CFGS_ITEMS_FIELD.full_name = ".ftcfg.item_cfgs.items"
+ITEM_CFGS_ITEMS_FIELD.number = 1
+ITEM_CFGS_ITEMS_FIELD.index = 0
+ITEM_CFGS_ITEMS_FIELD.label = 3
+ITEM_CFGS_ITEMS_FIELD.has_default_value = false
+ITEM_CFGS_ITEMS_FIELD.default_value = {}
+ITEM_CFGS_ITEMS_FIELD.message_type = ITEM_CFG
+ITEM_CFGS_ITEMS_FIELD.type = 11
+ITEM_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ITEM_CFGS.name = "item_cfgs"
+ITEM_CFGS.full_name = ".ftcfg.item_cfgs"
+ITEM_CFGS.nested_types = {}
+ITEM_CFGS.enum_types = {}
+ITEM_CFGS.fields = {ITEM_CFGS_ITEMS_FIELD}
+ITEM_CFGS.is_extendable = false
+ITEM_CFGS.extensions = {}
+FIGHTCRIME_CFG_ID_FIELD.name = "id"
+FIGHTCRIME_CFG_ID_FIELD.full_name = ".ftcfg.fightcrime_cfg.id"
+FIGHTCRIME_CFG_ID_FIELD.number = 1
+FIGHTCRIME_CFG_ID_FIELD.index = 0
+FIGHTCRIME_CFG_ID_FIELD.label = 2
+FIGHTCRIME_CFG_ID_FIELD.has_default_value = false
+FIGHTCRIME_CFG_ID_FIELD.default_value = 0
+FIGHTCRIME_CFG_ID_FIELD.type = 5
+FIGHTCRIME_CFG_ID_FIELD.cpp_type = 1
+
+FIGHTCRIME_CFG_VALUE_FIELD.name = "value"
+FIGHTCRIME_CFG_VALUE_FIELD.full_name = ".ftcfg.fightcrime_cfg.value"
+FIGHTCRIME_CFG_VALUE_FIELD.number = 2
+FIGHTCRIME_CFG_VALUE_FIELD.index = 1
+FIGHTCRIME_CFG_VALUE_FIELD.label = 2
+FIGHTCRIME_CFG_VALUE_FIELD.has_default_value = false
+FIGHTCRIME_CFG_VALUE_FIELD.default_value = 0
+FIGHTCRIME_CFG_VALUE_FIELD.type = 5
+FIGHTCRIME_CFG_VALUE_FIELD.cpp_type = 1
+
+FIGHTCRIME_CFG_COLOR_FIELD.name = "color"
+FIGHTCRIME_CFG_COLOR_FIELD.full_name = ".ftcfg.fightcrime_cfg.color"
+FIGHTCRIME_CFG_COLOR_FIELD.number = 3
+FIGHTCRIME_CFG_COLOR_FIELD.index = 2
+FIGHTCRIME_CFG_COLOR_FIELD.label = 2
+FIGHTCRIME_CFG_COLOR_FIELD.has_default_value = false
+FIGHTCRIME_CFG_COLOR_FIELD.default_value = 0
+FIGHTCRIME_CFG_COLOR_FIELD.type = 5
+FIGHTCRIME_CFG_COLOR_FIELD.cpp_type = 1
+
+FIGHTCRIME_CFG_IMGBG_FIELD.name = "imgBg"
+FIGHTCRIME_CFG_IMGBG_FIELD.full_name = ".ftcfg.fightcrime_cfg.imgBg"
+FIGHTCRIME_CFG_IMGBG_FIELD.number = 4
+FIGHTCRIME_CFG_IMGBG_FIELD.index = 3
+FIGHTCRIME_CFG_IMGBG_FIELD.label = 2
+FIGHTCRIME_CFG_IMGBG_FIELD.has_default_value = false
+FIGHTCRIME_CFG_IMGBG_FIELD.default_value = 0
+FIGHTCRIME_CFG_IMGBG_FIELD.type = 5
+FIGHTCRIME_CFG_IMGBG_FIELD.cpp_type = 1
+
+FIGHTCRIME_CFG_IMGICON_FIELD.name = "imgIcon"
+FIGHTCRIME_CFG_IMGICON_FIELD.full_name = ".ftcfg.fightcrime_cfg.imgIcon"
+FIGHTCRIME_CFG_IMGICON_FIELD.number = 5
+FIGHTCRIME_CFG_IMGICON_FIELD.index = 4
+FIGHTCRIME_CFG_IMGICON_FIELD.label = 2
+FIGHTCRIME_CFG_IMGICON_FIELD.has_default_value = false
+FIGHTCRIME_CFG_IMGICON_FIELD.default_value = 0
+FIGHTCRIME_CFG_IMGICON_FIELD.type = 5
+FIGHTCRIME_CFG_IMGICON_FIELD.cpp_type = 1
+
+FIGHTCRIME_CFG_IMGFRAME_FIELD.name = "imgFrame"
+FIGHTCRIME_CFG_IMGFRAME_FIELD.full_name = ".ftcfg.fightcrime_cfg.imgFrame"
+FIGHTCRIME_CFG_IMGFRAME_FIELD.number = 6
+FIGHTCRIME_CFG_IMGFRAME_FIELD.index = 5
+FIGHTCRIME_CFG_IMGFRAME_FIELD.label = 2
+FIGHTCRIME_CFG_IMGFRAME_FIELD.has_default_value = false
+FIGHTCRIME_CFG_IMGFRAME_FIELD.default_value = 0
+FIGHTCRIME_CFG_IMGFRAME_FIELD.type = 5
+FIGHTCRIME_CFG_IMGFRAME_FIELD.cpp_type = 1
+
+FIGHTCRIME_CFG_IMGNUMBER_FIELD.name = "imgNumber"
+FIGHTCRIME_CFG_IMGNUMBER_FIELD.full_name = ".ftcfg.fightcrime_cfg.imgNumber"
+FIGHTCRIME_CFG_IMGNUMBER_FIELD.number = 7
+FIGHTCRIME_CFG_IMGNUMBER_FIELD.index = 6
+FIGHTCRIME_CFG_IMGNUMBER_FIELD.label = 2
+FIGHTCRIME_CFG_IMGNUMBER_FIELD.has_default_value = false
+FIGHTCRIME_CFG_IMGNUMBER_FIELD.default_value = 0
+FIGHTCRIME_CFG_IMGNUMBER_FIELD.type = 5
+FIGHTCRIME_CFG_IMGNUMBER_FIELD.cpp_type = 1
+
+FIGHTCRIME_CFG.name = "fightcrime_cfg"
+FIGHTCRIME_CFG.full_name = ".ftcfg.fightcrime_cfg"
+FIGHTCRIME_CFG.nested_types = {}
+FIGHTCRIME_CFG.enum_types = {}
+FIGHTCRIME_CFG.fields = {FIGHTCRIME_CFG_ID_FIELD, FIGHTCRIME_CFG_VALUE_FIELD, FIGHTCRIME_CFG_COLOR_FIELD, FIGHTCRIME_CFG_IMGBG_FIELD, FIGHTCRIME_CFG_IMGICON_FIELD, FIGHTCRIME_CFG_IMGFRAME_FIELD, FIGHTCRIME_CFG_IMGNUMBER_FIELD}
+FIGHTCRIME_CFG.is_extendable = false
+FIGHTCRIME_CFG.extensions = {}
+FIGHTCRIME_CFGS_ITEMS_FIELD.name = "items"
+FIGHTCRIME_CFGS_ITEMS_FIELD.full_name = ".ftcfg.fightcrime_cfgs.items"
+FIGHTCRIME_CFGS_ITEMS_FIELD.number = 1
+FIGHTCRIME_CFGS_ITEMS_FIELD.index = 0
+FIGHTCRIME_CFGS_ITEMS_FIELD.label = 3
+FIGHTCRIME_CFGS_ITEMS_FIELD.has_default_value = false
+FIGHTCRIME_CFGS_ITEMS_FIELD.default_value = {}
+FIGHTCRIME_CFGS_ITEMS_FIELD.message_type = FIGHTCRIME_CFG
+FIGHTCRIME_CFGS_ITEMS_FIELD.type = 11
+FIGHTCRIME_CFGS_ITEMS_FIELD.cpp_type = 10
+
+FIGHTCRIME_CFGS.name = "fightcrime_cfgs"
+FIGHTCRIME_CFGS.full_name = ".ftcfg.fightcrime_cfgs"
+FIGHTCRIME_CFGS.nested_types = {}
+FIGHTCRIME_CFGS.enum_types = {}
+FIGHTCRIME_CFGS.fields = {FIGHTCRIME_CFGS_ITEMS_FIELD}
+FIGHTCRIME_CFGS.is_extendable = false
+FIGHTCRIME_CFGS.extensions = {}
+FIGHTCIRME_REWARD_CFG_ID_FIELD.name = "id"
+FIGHTCIRME_REWARD_CFG_ID_FIELD.full_name = ".ftcfg.fightcirme_reward_cfg.id"
+FIGHTCIRME_REWARD_CFG_ID_FIELD.number = 1
+FIGHTCIRME_REWARD_CFG_ID_FIELD.index = 0
+FIGHTCIRME_REWARD_CFG_ID_FIELD.label = 2
+FIGHTCIRME_REWARD_CFG_ID_FIELD.has_default_value = false
+FIGHTCIRME_REWARD_CFG_ID_FIELD.default_value = 0
+FIGHTCIRME_REWARD_CFG_ID_FIELD.type = 5
+FIGHTCIRME_REWARD_CFG_ID_FIELD.cpp_type = 1
+
+FIGHTCIRME_REWARD_CFG_ITEMS_FIELD.name = "items"
+FIGHTCIRME_REWARD_CFG_ITEMS_FIELD.full_name = ".ftcfg.fightcirme_reward_cfg.items"
+FIGHTCIRME_REWARD_CFG_ITEMS_FIELD.number = 2
+FIGHTCIRME_REWARD_CFG_ITEMS_FIELD.index = 1
+FIGHTCIRME_REWARD_CFG_ITEMS_FIELD.label = 3
+FIGHTCIRME_REWARD_CFG_ITEMS_FIELD.has_default_value = false
+FIGHTCIRME_REWARD_CFG_ITEMS_FIELD.default_value = {}
+FIGHTCIRME_REWARD_CFG_ITEMS_FIELD.type = 13
+FIGHTCIRME_REWARD_CFG_ITEMS_FIELD.cpp_type = 3
+
+FIGHTCIRME_REWARD_CFG.name = "fightcirme_reward_cfg"
+FIGHTCIRME_REWARD_CFG.full_name = ".ftcfg.fightcirme_reward_cfg"
+FIGHTCIRME_REWARD_CFG.nested_types = {}
+FIGHTCIRME_REWARD_CFG.enum_types = {}
+FIGHTCIRME_REWARD_CFG.fields = {FIGHTCIRME_REWARD_CFG_ID_FIELD, FIGHTCIRME_REWARD_CFG_ITEMS_FIELD}
+FIGHTCIRME_REWARD_CFG.is_extendable = false
+FIGHTCIRME_REWARD_CFG.extensions = {}
+FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD.name = "items"
+FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD.full_name = ".ftcfg.fightcirme_reward_cfgs.items"
+FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD.number = 1
+FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD.index = 0
+FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD.label = 3
+FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD.has_default_value = false
+FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD.default_value = {}
+FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD.message_type = FIGHTCIRME_REWARD_CFG
+FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD.type = 11
+FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD.cpp_type = 10
+
+FIGHTCIRME_REWARD_CFGS.name = "fightcirme_reward_cfgs"
+FIGHTCIRME_REWARD_CFGS.full_name = ".ftcfg.fightcirme_reward_cfgs"
+FIGHTCIRME_REWARD_CFGS.nested_types = {}
+FIGHTCIRME_REWARD_CFGS.enum_types = {}
+FIGHTCIRME_REWARD_CFGS.fields = {FIGHTCIRME_REWARD_CFGS_ITEMS_FIELD}
+FIGHTCIRME_REWARD_CFGS.is_extendable = false
+FIGHTCIRME_REWARD_CFGS.extensions = {}
+FIGHTCRIME_MONSTER_CFG_ID_FIELD.name = "id"
+FIGHTCRIME_MONSTER_CFG_ID_FIELD.full_name = ".ftcfg.fightcrime_monster_cfg.id"
+FIGHTCRIME_MONSTER_CFG_ID_FIELD.number = 1
+FIGHTCRIME_MONSTER_CFG_ID_FIELD.index = 0
+FIGHTCRIME_MONSTER_CFG_ID_FIELD.label = 2
+FIGHTCRIME_MONSTER_CFG_ID_FIELD.has_default_value = false
+FIGHTCRIME_MONSTER_CFG_ID_FIELD.default_value = 0
+FIGHTCRIME_MONSTER_CFG_ID_FIELD.type = 5
+FIGHTCRIME_MONSTER_CFG_ID_FIELD.cpp_type = 1
+
+FIGHTCRIME_MONSTER_CFG_MONSTERS_FIELD.name = "monsters"
+FIGHTCRIME_MONSTER_CFG_MONSTERS_FIELD.full_name = ".ftcfg.fightcrime_monster_cfg.monsters"
+FIGHTCRIME_MONSTER_CFG_MONSTERS_FIELD.number = 2
+FIGHTCRIME_MONSTER_CFG_MONSTERS_FIELD.index = 1
+FIGHTCRIME_MONSTER_CFG_MONSTERS_FIELD.label = 3
+FIGHTCRIME_MONSTER_CFG_MONSTERS_FIELD.has_default_value = false
+FIGHTCRIME_MONSTER_CFG_MONSTERS_FIELD.default_value = {}
+FIGHTCRIME_MONSTER_CFG_MONSTERS_FIELD.type = 13
+FIGHTCRIME_MONSTER_CFG_MONSTERS_FIELD.cpp_type = 3
+
+FIGHTCRIME_MONSTER_CFG_ICONS_FIELD.name = "icons"
+FIGHTCRIME_MONSTER_CFG_ICONS_FIELD.full_name = ".ftcfg.fightcrime_monster_cfg.icons"
+FIGHTCRIME_MONSTER_CFG_ICONS_FIELD.number = 3
+FIGHTCRIME_MONSTER_CFG_ICONS_FIELD.index = 2
+FIGHTCRIME_MONSTER_CFG_ICONS_FIELD.label = 3
+FIGHTCRIME_MONSTER_CFG_ICONS_FIELD.has_default_value = false
+FIGHTCRIME_MONSTER_CFG_ICONS_FIELD.default_value = {}
+FIGHTCRIME_MONSTER_CFG_ICONS_FIELD.type = 13
+FIGHTCRIME_MONSTER_CFG_ICONS_FIELD.cpp_type = 3
+
+FIGHTCRIME_MONSTER_CFG_TIME_FIELD.name = "time"
+FIGHTCRIME_MONSTER_CFG_TIME_FIELD.full_name = ".ftcfg.fightcrime_monster_cfg.time"
+FIGHTCRIME_MONSTER_CFG_TIME_FIELD.number = 4
+FIGHTCRIME_MONSTER_CFG_TIME_FIELD.index = 3
+FIGHTCRIME_MONSTER_CFG_TIME_FIELD.label = 2
+FIGHTCRIME_MONSTER_CFG_TIME_FIELD.has_default_value = false
+FIGHTCRIME_MONSTER_CFG_TIME_FIELD.default_value = 0.0
+FIGHTCRIME_MONSTER_CFG_TIME_FIELD.type = 2
+FIGHTCRIME_MONSTER_CFG_TIME_FIELD.cpp_type = 6
+
+FIGHTCRIME_MONSTER_CFG.name = "fightcrime_monster_cfg"
+FIGHTCRIME_MONSTER_CFG.full_name = ".ftcfg.fightcrime_monster_cfg"
+FIGHTCRIME_MONSTER_CFG.nested_types = {}
+FIGHTCRIME_MONSTER_CFG.enum_types = {}
+FIGHTCRIME_MONSTER_CFG.fields = {FIGHTCRIME_MONSTER_CFG_ID_FIELD, FIGHTCRIME_MONSTER_CFG_MONSTERS_FIELD, FIGHTCRIME_MONSTER_CFG_ICONS_FIELD, FIGHTCRIME_MONSTER_CFG_TIME_FIELD}
+FIGHTCRIME_MONSTER_CFG.is_extendable = false
+FIGHTCRIME_MONSTER_CFG.extensions = {}
+FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD.name = "items"
+FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD.full_name = ".ftcfg.fightcrime_monster_cfgs.items"
+FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD.number = 1
+FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD.index = 0
+FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD.label = 3
+FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD.has_default_value = false
+FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD.default_value = {}
+FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD.message_type = FIGHTCRIME_MONSTER_CFG
+FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD.type = 11
+FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD.cpp_type = 10
+
+FIGHTCRIME_MONSTER_CFGS.name = "fightcrime_monster_cfgs"
+FIGHTCRIME_MONSTER_CFGS.full_name = ".ftcfg.fightcrime_monster_cfgs"
+FIGHTCRIME_MONSTER_CFGS.nested_types = {}
+FIGHTCRIME_MONSTER_CFGS.enum_types = {}
+FIGHTCRIME_MONSTER_CFGS.fields = {FIGHTCRIME_MONSTER_CFGS_ITEMS_FIELD}
+FIGHTCRIME_MONSTER_CFGS.is_extendable = false
+FIGHTCRIME_MONSTER_CFGS.extensions = {}
+EQUIP_CFG_ID_FIELD.name = "id"
+EQUIP_CFG_ID_FIELD.full_name = ".ftcfg.equip_cfg.id"
+EQUIP_CFG_ID_FIELD.number = 1
+EQUIP_CFG_ID_FIELD.index = 0
+EQUIP_CFG_ID_FIELD.label = 2
+EQUIP_CFG_ID_FIELD.has_default_value = false
+EQUIP_CFG_ID_FIELD.default_value = 0
+EQUIP_CFG_ID_FIELD.type = 13
+EQUIP_CFG_ID_FIELD.cpp_type = 3
+
+EQUIP_CFG_UPGRADE_ID_FIELD.name = "upgrade_id"
+EQUIP_CFG_UPGRADE_ID_FIELD.full_name = ".ftcfg.equip_cfg.upgrade_id"
+EQUIP_CFG_UPGRADE_ID_FIELD.number = 2
+EQUIP_CFG_UPGRADE_ID_FIELD.index = 1
+EQUIP_CFG_UPGRADE_ID_FIELD.label = 2
+EQUIP_CFG_UPGRADE_ID_FIELD.has_default_value = false
+EQUIP_CFG_UPGRADE_ID_FIELD.default_value = 0
+EQUIP_CFG_UPGRADE_ID_FIELD.type = 13
+EQUIP_CFG_UPGRADE_ID_FIELD.cpp_type = 3
+
+EQUIP_CFG_UPGRADE_MATERIAL_FIELD.name = "upgrade_material"
+EQUIP_CFG_UPGRADE_MATERIAL_FIELD.full_name = ".ftcfg.equip_cfg.upgrade_material"
+EQUIP_CFG_UPGRADE_MATERIAL_FIELD.number = 3
+EQUIP_CFG_UPGRADE_MATERIAL_FIELD.index = 2
+EQUIP_CFG_UPGRADE_MATERIAL_FIELD.label = 3
+EQUIP_CFG_UPGRADE_MATERIAL_FIELD.has_default_value = false
+EQUIP_CFG_UPGRADE_MATERIAL_FIELD.default_value = {}
+EQUIP_CFG_UPGRADE_MATERIAL_FIELD.type = 13
+EQUIP_CFG_UPGRADE_MATERIAL_FIELD.cpp_type = 3
+
+EQUIP_CFG_UPGRADE_REQ_LEVEL_FIELD.name = "upgrade_req_level"
+EQUIP_CFG_UPGRADE_REQ_LEVEL_FIELD.full_name = ".ftcfg.equip_cfg.upgrade_req_level"
+EQUIP_CFG_UPGRADE_REQ_LEVEL_FIELD.number = 4
+EQUIP_CFG_UPGRADE_REQ_LEVEL_FIELD.index = 3
+EQUIP_CFG_UPGRADE_REQ_LEVEL_FIELD.label = 2
+EQUIP_CFG_UPGRADE_REQ_LEVEL_FIELD.has_default_value = false
+EQUIP_CFG_UPGRADE_REQ_LEVEL_FIELD.default_value = 0
+EQUIP_CFG_UPGRADE_REQ_LEVEL_FIELD.type = 5
+EQUIP_CFG_UPGRADE_REQ_LEVEL_FIELD.cpp_type = 1
+
+EQUIP_CFG_REFINE_MATERIAL_FIELD.name = "refine_material"
+EQUIP_CFG_REFINE_MATERIAL_FIELD.full_name = ".ftcfg.equip_cfg.refine_material"
+EQUIP_CFG_REFINE_MATERIAL_FIELD.number = 5
+EQUIP_CFG_REFINE_MATERIAL_FIELD.index = 4
+EQUIP_CFG_REFINE_MATERIAL_FIELD.label = 2
+EQUIP_CFG_REFINE_MATERIAL_FIELD.has_default_value = false
+EQUIP_CFG_REFINE_MATERIAL_FIELD.default_value = 0
+EQUIP_CFG_REFINE_MATERIAL_FIELD.type = 13
+EQUIP_CFG_REFINE_MATERIAL_FIELD.cpp_type = 3
+
+EQUIP_CFG_REFINE_COUNT_FIELD.name = "refine_count"
+EQUIP_CFG_REFINE_COUNT_FIELD.full_name = ".ftcfg.equip_cfg.refine_count"
+EQUIP_CFG_REFINE_COUNT_FIELD.number = 6
+EQUIP_CFG_REFINE_COUNT_FIELD.index = 5
+EQUIP_CFG_REFINE_COUNT_FIELD.label = 2
+EQUIP_CFG_REFINE_COUNT_FIELD.has_default_value = false
+EQUIP_CFG_REFINE_COUNT_FIELD.default_value = 0
+EQUIP_CFG_REFINE_COUNT_FIELD.type = 5
+EQUIP_CFG_REFINE_COUNT_FIELD.cpp_type = 1
+
+EQUIP_CFG_REFINE_COST_FIELD.name = "refine_cost"
+EQUIP_CFG_REFINE_COST_FIELD.full_name = ".ftcfg.equip_cfg.refine_cost"
+EQUIP_CFG_REFINE_COST_FIELD.number = 7
+EQUIP_CFG_REFINE_COST_FIELD.index = 6
+EQUIP_CFG_REFINE_COST_FIELD.label = 2
+EQUIP_CFG_REFINE_COST_FIELD.has_default_value = false
+EQUIP_CFG_REFINE_COST_FIELD.default_value = 0
+EQUIP_CFG_REFINE_COST_FIELD.type = 5
+EQUIP_CFG_REFINE_COST_FIELD.cpp_type = 1
+
+EQUIP_CFG_ACTIVE_STRENGTH_MATERIAL_FIELD.name = "active_strength_material"
+EQUIP_CFG_ACTIVE_STRENGTH_MATERIAL_FIELD.full_name = ".ftcfg.equip_cfg.active_strength_material"
+EQUIP_CFG_ACTIVE_STRENGTH_MATERIAL_FIELD.number = 8
+EQUIP_CFG_ACTIVE_STRENGTH_MATERIAL_FIELD.index = 7
+EQUIP_CFG_ACTIVE_STRENGTH_MATERIAL_FIELD.label = 2
+EQUIP_CFG_ACTIVE_STRENGTH_MATERIAL_FIELD.has_default_value = false
+EQUIP_CFG_ACTIVE_STRENGTH_MATERIAL_FIELD.default_value = 0
+EQUIP_CFG_ACTIVE_STRENGTH_MATERIAL_FIELD.type = 13
+EQUIP_CFG_ACTIVE_STRENGTH_MATERIAL_FIELD.cpp_type = 3
+
+EQUIP_CFG_ACTIVE_STRENGTH_COUNT_FIELD.name = "active_strength_count"
+EQUIP_CFG_ACTIVE_STRENGTH_COUNT_FIELD.full_name = ".ftcfg.equip_cfg.active_strength_count"
+EQUIP_CFG_ACTIVE_STRENGTH_COUNT_FIELD.number = 9
+EQUIP_CFG_ACTIVE_STRENGTH_COUNT_FIELD.index = 8
+EQUIP_CFG_ACTIVE_STRENGTH_COUNT_FIELD.label = 2
+EQUIP_CFG_ACTIVE_STRENGTH_COUNT_FIELD.has_default_value = false
+EQUIP_CFG_ACTIVE_STRENGTH_COUNT_FIELD.default_value = 0
+EQUIP_CFG_ACTIVE_STRENGTH_COUNT_FIELD.type = 5
+EQUIP_CFG_ACTIVE_STRENGTH_COUNT_FIELD.cpp_type = 1
+
+EQUIP_CFG_ACTIVE_COST_FIELD.name = "active_cost"
+EQUIP_CFG_ACTIVE_COST_FIELD.full_name = ".ftcfg.equip_cfg.active_cost"
+EQUIP_CFG_ACTIVE_COST_FIELD.number = 10
+EQUIP_CFG_ACTIVE_COST_FIELD.index = 9
+EQUIP_CFG_ACTIVE_COST_FIELD.label = 2
+EQUIP_CFG_ACTIVE_COST_FIELD.has_default_value = false
+EQUIP_CFG_ACTIVE_COST_FIELD.default_value = 0
+EQUIP_CFG_ACTIVE_COST_FIELD.type = 5
+EQUIP_CFG_ACTIVE_COST_FIELD.cpp_type = 1
+
+EQUIP_CFG.name = "equip_cfg"
+EQUIP_CFG.full_name = ".ftcfg.equip_cfg"
+EQUIP_CFG.nested_types = {}
+EQUIP_CFG.enum_types = {}
+EQUIP_CFG.fields = {EQUIP_CFG_ID_FIELD, EQUIP_CFG_UPGRADE_ID_FIELD, EQUIP_CFG_UPGRADE_MATERIAL_FIELD, EQUIP_CFG_UPGRADE_REQ_LEVEL_FIELD, EQUIP_CFG_REFINE_MATERIAL_FIELD, EQUIP_CFG_REFINE_COUNT_FIELD, EQUIP_CFG_REFINE_COST_FIELD, EQUIP_CFG_ACTIVE_STRENGTH_MATERIAL_FIELD, EQUIP_CFG_ACTIVE_STRENGTH_COUNT_FIELD, EQUIP_CFG_ACTIVE_COST_FIELD}
+EQUIP_CFG.is_extendable = false
+EQUIP_CFG.extensions = {}
+EQUIP_CFGS_ITEMS_FIELD.name = "items"
+EQUIP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.equip_cfgs.items"
+EQUIP_CFGS_ITEMS_FIELD.number = 1
+EQUIP_CFGS_ITEMS_FIELD.index = 0
+EQUIP_CFGS_ITEMS_FIELD.label = 3
+EQUIP_CFGS_ITEMS_FIELD.has_default_value = false
+EQUIP_CFGS_ITEMS_FIELD.default_value = {}
+EQUIP_CFGS_ITEMS_FIELD.message_type = EQUIP_CFG
+EQUIP_CFGS_ITEMS_FIELD.type = 11
+EQUIP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+EQUIP_CFGS.name = "equip_cfgs"
+EQUIP_CFGS.full_name = ".ftcfg.equip_cfgs"
+EQUIP_CFGS.nested_types = {}
+EQUIP_CFGS.enum_types = {}
+EQUIP_CFGS.fields = {EQUIP_CFGS_ITEMS_FIELD}
+EQUIP_CFGS.is_extendable = false
+EQUIP_CFGS.extensions = {}
+EQUIP_SET_CFG_ID_FIELD.name = "id"
+EQUIP_SET_CFG_ID_FIELD.full_name = ".ftcfg.equip_set_cfg.id"
+EQUIP_SET_CFG_ID_FIELD.number = 1
+EQUIP_SET_CFG_ID_FIELD.index = 0
+EQUIP_SET_CFG_ID_FIELD.label = 2
+EQUIP_SET_CFG_ID_FIELD.has_default_value = false
+EQUIP_SET_CFG_ID_FIELD.default_value = 0
+EQUIP_SET_CFG_ID_FIELD.type = 13
+EQUIP_SET_CFG_ID_FIELD.cpp_type = 3
+
+EQUIP_SET_CFG_EQUIP_IDS_FIELD.name = "equip_ids"
+EQUIP_SET_CFG_EQUIP_IDS_FIELD.full_name = ".ftcfg.equip_set_cfg.equip_ids"
+EQUIP_SET_CFG_EQUIP_IDS_FIELD.number = 2
+EQUIP_SET_CFG_EQUIP_IDS_FIELD.index = 1
+EQUIP_SET_CFG_EQUIP_IDS_FIELD.label = 3
+EQUIP_SET_CFG_EQUIP_IDS_FIELD.has_default_value = false
+EQUIP_SET_CFG_EQUIP_IDS_FIELD.default_value = {}
+EQUIP_SET_CFG_EQUIP_IDS_FIELD.type = 13
+EQUIP_SET_CFG_EQUIP_IDS_FIELD.cpp_type = 3
+
+EQUIP_SET_CFG_SET_NAME_FIELD.name = "set_name"
+EQUIP_SET_CFG_SET_NAME_FIELD.full_name = ".ftcfg.equip_set_cfg.set_name"
+EQUIP_SET_CFG_SET_NAME_FIELD.number = 3
+EQUIP_SET_CFG_SET_NAME_FIELD.index = 2
+EQUIP_SET_CFG_SET_NAME_FIELD.label = 2
+EQUIP_SET_CFG_SET_NAME_FIELD.has_default_value = false
+EQUIP_SET_CFG_SET_NAME_FIELD.default_value = ""
+EQUIP_SET_CFG_SET_NAME_FIELD.type = 9
+EQUIP_SET_CFG_SET_NAME_FIELD.cpp_type = 9
+
+EQUIP_SET_CFG_EQUIP_LEVEL_FIELD.name = "equip_level"
+EQUIP_SET_CFG_EQUIP_LEVEL_FIELD.full_name = ".ftcfg.equip_set_cfg.equip_level"
+EQUIP_SET_CFG_EQUIP_LEVEL_FIELD.number = 4
+EQUIP_SET_CFG_EQUIP_LEVEL_FIELD.index = 3
+EQUIP_SET_CFG_EQUIP_LEVEL_FIELD.label = 2
+EQUIP_SET_CFG_EQUIP_LEVEL_FIELD.has_default_value = false
+EQUIP_SET_CFG_EQUIP_LEVEL_FIELD.default_value = 0
+EQUIP_SET_CFG_EQUIP_LEVEL_FIELD.type = 5
+EQUIP_SET_CFG_EQUIP_LEVEL_FIELD.cpp_type = 1
+
+EQUIP_SET_CFG.name = "equip_set_cfg"
+EQUIP_SET_CFG.full_name = ".ftcfg.equip_set_cfg"
+EQUIP_SET_CFG.nested_types = {}
+EQUIP_SET_CFG.enum_types = {}
+EQUIP_SET_CFG.fields = {EQUIP_SET_CFG_ID_FIELD, EQUIP_SET_CFG_EQUIP_IDS_FIELD, EQUIP_SET_CFG_SET_NAME_FIELD, EQUIP_SET_CFG_EQUIP_LEVEL_FIELD}
+EQUIP_SET_CFG.is_extendable = false
+EQUIP_SET_CFG.extensions = {}
+EQUIP_SET_CFGS_ITEMS_FIELD.name = "items"
+EQUIP_SET_CFGS_ITEMS_FIELD.full_name = ".ftcfg.equip_set_cfgs.items"
+EQUIP_SET_CFGS_ITEMS_FIELD.number = 1
+EQUIP_SET_CFGS_ITEMS_FIELD.index = 0
+EQUIP_SET_CFGS_ITEMS_FIELD.label = 3
+EQUIP_SET_CFGS_ITEMS_FIELD.has_default_value = false
+EQUIP_SET_CFGS_ITEMS_FIELD.default_value = {}
+EQUIP_SET_CFGS_ITEMS_FIELD.message_type = EQUIP_SET_CFG
+EQUIP_SET_CFGS_ITEMS_FIELD.type = 11
+EQUIP_SET_CFGS_ITEMS_FIELD.cpp_type = 10
+
+EQUIP_SET_CFGS.name = "equip_set_cfgs"
+EQUIP_SET_CFGS.full_name = ".ftcfg.equip_set_cfgs"
+EQUIP_SET_CFGS.nested_types = {}
+EQUIP_SET_CFGS.enum_types = {}
+EQUIP_SET_CFGS.fields = {EQUIP_SET_CFGS_ITEMS_FIELD}
+EQUIP_SET_CFGS.is_extendable = false
+EQUIP_SET_CFGS.extensions = {}
+EQUIP_SET_PROP_CFG_ID_FIELD.name = "id"
+EQUIP_SET_PROP_CFG_ID_FIELD.full_name = ".ftcfg.equip_set_prop_cfg.id"
+EQUIP_SET_PROP_CFG_ID_FIELD.number = 1
+EQUIP_SET_PROP_CFG_ID_FIELD.index = 0
+EQUIP_SET_PROP_CFG_ID_FIELD.label = 2
+EQUIP_SET_PROP_CFG_ID_FIELD.has_default_value = false
+EQUIP_SET_PROP_CFG_ID_FIELD.default_value = 0
+EQUIP_SET_PROP_CFG_ID_FIELD.type = 13
+EQUIP_SET_PROP_CFG_ID_FIELD.cpp_type = 3
+
+EQUIP_SET_PROP_CFG_EQUIP_COUNT_FIELD.name = "equip_count"
+EQUIP_SET_PROP_CFG_EQUIP_COUNT_FIELD.full_name = ".ftcfg.equip_set_prop_cfg.equip_count"
+EQUIP_SET_PROP_CFG_EQUIP_COUNT_FIELD.number = 2
+EQUIP_SET_PROP_CFG_EQUIP_COUNT_FIELD.index = 1
+EQUIP_SET_PROP_CFG_EQUIP_COUNT_FIELD.label = 2
+EQUIP_SET_PROP_CFG_EQUIP_COUNT_FIELD.has_default_value = false
+EQUIP_SET_PROP_CFG_EQUIP_COUNT_FIELD.default_value = 0
+EQUIP_SET_PROP_CFG_EQUIP_COUNT_FIELD.type = 13
+EQUIP_SET_PROP_CFG_EQUIP_COUNT_FIELD.cpp_type = 3
+
+EQUIP_SET_PROP_CFG_ACTIVE_PROP_FIELD.name = "active_prop"
+EQUIP_SET_PROP_CFG_ACTIVE_PROP_FIELD.full_name = ".ftcfg.equip_set_prop_cfg.active_prop"
+EQUIP_SET_PROP_CFG_ACTIVE_PROP_FIELD.number = 3
+EQUIP_SET_PROP_CFG_ACTIVE_PROP_FIELD.index = 2
+EQUIP_SET_PROP_CFG_ACTIVE_PROP_FIELD.label = 2
+EQUIP_SET_PROP_CFG_ACTIVE_PROP_FIELD.has_default_value = false
+EQUIP_SET_PROP_CFG_ACTIVE_PROP_FIELD.default_value = ""
+EQUIP_SET_PROP_CFG_ACTIVE_PROP_FIELD.type = 9
+EQUIP_SET_PROP_CFG_ACTIVE_PROP_FIELD.cpp_type = 9
+
+EQUIP_SET_PROP_CFG.name = "equip_set_prop_cfg"
+EQUIP_SET_PROP_CFG.full_name = ".ftcfg.equip_set_prop_cfg"
+EQUIP_SET_PROP_CFG.nested_types = {}
+EQUIP_SET_PROP_CFG.enum_types = {}
+EQUIP_SET_PROP_CFG.fields = {EQUIP_SET_PROP_CFG_ID_FIELD, EQUIP_SET_PROP_CFG_EQUIP_COUNT_FIELD, EQUIP_SET_PROP_CFG_ACTIVE_PROP_FIELD}
+EQUIP_SET_PROP_CFG.is_extendable = false
+EQUIP_SET_PROP_CFG.extensions = {}
+EQUIP_SET_PROP_CFGS_ITEMS_FIELD.name = "items"
+EQUIP_SET_PROP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.equip_set_prop_cfgs.items"
+EQUIP_SET_PROP_CFGS_ITEMS_FIELD.number = 1
+EQUIP_SET_PROP_CFGS_ITEMS_FIELD.index = 0
+EQUIP_SET_PROP_CFGS_ITEMS_FIELD.label = 3
+EQUIP_SET_PROP_CFGS_ITEMS_FIELD.has_default_value = false
+EQUIP_SET_PROP_CFGS_ITEMS_FIELD.default_value = {}
+EQUIP_SET_PROP_CFGS_ITEMS_FIELD.message_type = EQUIP_SET_PROP_CFG
+EQUIP_SET_PROP_CFGS_ITEMS_FIELD.type = 11
+EQUIP_SET_PROP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+EQUIP_SET_PROP_CFGS.name = "equip_set_prop_cfgs"
+EQUIP_SET_PROP_CFGS.full_name = ".ftcfg.equip_set_prop_cfgs"
+EQUIP_SET_PROP_CFGS.nested_types = {}
+EQUIP_SET_PROP_CFGS.enum_types = {}
+EQUIP_SET_PROP_CFGS.fields = {EQUIP_SET_PROP_CFGS_ITEMS_FIELD}
+EQUIP_SET_PROP_CFGS.is_extendable = false
+EQUIP_SET_PROP_CFGS.extensions = {}
+STRENGTHEN_CFG_ID_FIELD.name = "id"
+STRENGTHEN_CFG_ID_FIELD.full_name = ".ftcfg.strengthen_cfg.id"
+STRENGTHEN_CFG_ID_FIELD.number = 1
+STRENGTHEN_CFG_ID_FIELD.index = 0
+STRENGTHEN_CFG_ID_FIELD.label = 2
+STRENGTHEN_CFG_ID_FIELD.has_default_value = false
+STRENGTHEN_CFG_ID_FIELD.default_value = 0
+STRENGTHEN_CFG_ID_FIELD.type = 13
+STRENGTHEN_CFG_ID_FIELD.cpp_type = 3
+
+STRENGTHEN_CFG_SEG_LIMIT_FIELD.name = "seg_limit"
+STRENGTHEN_CFG_SEG_LIMIT_FIELD.full_name = ".ftcfg.strengthen_cfg.seg_limit"
+STRENGTHEN_CFG_SEG_LIMIT_FIELD.number = 2
+STRENGTHEN_CFG_SEG_LIMIT_FIELD.index = 1
+STRENGTHEN_CFG_SEG_LIMIT_FIELD.label = 2
+STRENGTHEN_CFG_SEG_LIMIT_FIELD.has_default_value = false
+STRENGTHEN_CFG_SEG_LIMIT_FIELD.default_value = 0
+STRENGTHEN_CFG_SEG_LIMIT_FIELD.type = 13
+STRENGTHEN_CFG_SEG_LIMIT_FIELD.cpp_type = 3
+
+STRENGTHEN_CFG_RATE_FIELD.name = "rate"
+STRENGTHEN_CFG_RATE_FIELD.full_name = ".ftcfg.strengthen_cfg.rate"
+STRENGTHEN_CFG_RATE_FIELD.number = 3
+STRENGTHEN_CFG_RATE_FIELD.index = 2
+STRENGTHEN_CFG_RATE_FIELD.label = 2
+STRENGTHEN_CFG_RATE_FIELD.has_default_value = false
+STRENGTHEN_CFG_RATE_FIELD.default_value = 0
+STRENGTHEN_CFG_RATE_FIELD.type = 13
+STRENGTHEN_CFG_RATE_FIELD.cpp_type = 3
+
+STRENGTHEN_CFG_REQ_LEVEL_FIELD.name = "req_level"
+STRENGTHEN_CFG_REQ_LEVEL_FIELD.full_name = ".ftcfg.strengthen_cfg.req_level"
+STRENGTHEN_CFG_REQ_LEVEL_FIELD.number = 4
+STRENGTHEN_CFG_REQ_LEVEL_FIELD.index = 3
+STRENGTHEN_CFG_REQ_LEVEL_FIELD.label = 2
+STRENGTHEN_CFG_REQ_LEVEL_FIELD.has_default_value = false
+STRENGTHEN_CFG_REQ_LEVEL_FIELD.default_value = 0
+STRENGTHEN_CFG_REQ_LEVEL_FIELD.type = 13
+STRENGTHEN_CFG_REQ_LEVEL_FIELD.cpp_type = 3
+
+STRENGTHEN_CFG_MAT_ID_FIELD.name = "mat_id"
+STRENGTHEN_CFG_MAT_ID_FIELD.full_name = ".ftcfg.strengthen_cfg.mat_id"
+STRENGTHEN_CFG_MAT_ID_FIELD.number = 5
+STRENGTHEN_CFG_MAT_ID_FIELD.index = 4
+STRENGTHEN_CFG_MAT_ID_FIELD.label = 2
+STRENGTHEN_CFG_MAT_ID_FIELD.has_default_value = false
+STRENGTHEN_CFG_MAT_ID_FIELD.default_value = 0
+STRENGTHEN_CFG_MAT_ID_FIELD.type = 13
+STRENGTHEN_CFG_MAT_ID_FIELD.cpp_type = 3
+
+STRENGTHEN_CFG_MAT_NUM_FIELD.name = "mat_num"
+STRENGTHEN_CFG_MAT_NUM_FIELD.full_name = ".ftcfg.strengthen_cfg.mat_num"
+STRENGTHEN_CFG_MAT_NUM_FIELD.number = 6
+STRENGTHEN_CFG_MAT_NUM_FIELD.index = 5
+STRENGTHEN_CFG_MAT_NUM_FIELD.label = 2
+STRENGTHEN_CFG_MAT_NUM_FIELD.has_default_value = false
+STRENGTHEN_CFG_MAT_NUM_FIELD.default_value = 0
+STRENGTHEN_CFG_MAT_NUM_FIELD.type = 13
+STRENGTHEN_CFG_MAT_NUM_FIELD.cpp_type = 3
+
+STRENGTHEN_CFG_PROP_EFFECT1_FIELD.name = "prop_effect1"
+STRENGTHEN_CFG_PROP_EFFECT1_FIELD.full_name = ".ftcfg.strengthen_cfg.prop_effect1"
+STRENGTHEN_CFG_PROP_EFFECT1_FIELD.number = 7
+STRENGTHEN_CFG_PROP_EFFECT1_FIELD.index = 6
+STRENGTHEN_CFG_PROP_EFFECT1_FIELD.label = 2
+STRENGTHEN_CFG_PROP_EFFECT1_FIELD.has_default_value = false
+STRENGTHEN_CFG_PROP_EFFECT1_FIELD.default_value = ""
+STRENGTHEN_CFG_PROP_EFFECT1_FIELD.type = 9
+STRENGTHEN_CFG_PROP_EFFECT1_FIELD.cpp_type = 9
+
+STRENGTHEN_CFG_PROP_EFFECT2_FIELD.name = "prop_effect2"
+STRENGTHEN_CFG_PROP_EFFECT2_FIELD.full_name = ".ftcfg.strengthen_cfg.prop_effect2"
+STRENGTHEN_CFG_PROP_EFFECT2_FIELD.number = 8
+STRENGTHEN_CFG_PROP_EFFECT2_FIELD.index = 7
+STRENGTHEN_CFG_PROP_EFFECT2_FIELD.label = 2
+STRENGTHEN_CFG_PROP_EFFECT2_FIELD.has_default_value = false
+STRENGTHEN_CFG_PROP_EFFECT2_FIELD.default_value = ""
+STRENGTHEN_CFG_PROP_EFFECT2_FIELD.type = 9
+STRENGTHEN_CFG_PROP_EFFECT2_FIELD.cpp_type = 9
+
+STRENGTHEN_CFG_PROP_EFFECT3_FIELD.name = "prop_effect3"
+STRENGTHEN_CFG_PROP_EFFECT3_FIELD.full_name = ".ftcfg.strengthen_cfg.prop_effect3"
+STRENGTHEN_CFG_PROP_EFFECT3_FIELD.number = 9
+STRENGTHEN_CFG_PROP_EFFECT3_FIELD.index = 8
+STRENGTHEN_CFG_PROP_EFFECT3_FIELD.label = 2
+STRENGTHEN_CFG_PROP_EFFECT3_FIELD.has_default_value = false
+STRENGTHEN_CFG_PROP_EFFECT3_FIELD.default_value = ""
+STRENGTHEN_CFG_PROP_EFFECT3_FIELD.type = 9
+STRENGTHEN_CFG_PROP_EFFECT3_FIELD.cpp_type = 9
+
+STRENGTHEN_CFG_PROP_EFFECT4_FIELD.name = "prop_effect4"
+STRENGTHEN_CFG_PROP_EFFECT4_FIELD.full_name = ".ftcfg.strengthen_cfg.prop_effect4"
+STRENGTHEN_CFG_PROP_EFFECT4_FIELD.number = 10
+STRENGTHEN_CFG_PROP_EFFECT4_FIELD.index = 9
+STRENGTHEN_CFG_PROP_EFFECT4_FIELD.label = 2
+STRENGTHEN_CFG_PROP_EFFECT4_FIELD.has_default_value = false
+STRENGTHEN_CFG_PROP_EFFECT4_FIELD.default_value = ""
+STRENGTHEN_CFG_PROP_EFFECT4_FIELD.type = 9
+STRENGTHEN_CFG_PROP_EFFECT4_FIELD.cpp_type = 9
+
+STRENGTHEN_CFG_EXTRA_EFFECT_FIELD.name = "extra_effect"
+STRENGTHEN_CFG_EXTRA_EFFECT_FIELD.full_name = ".ftcfg.strengthen_cfg.extra_effect"
+STRENGTHEN_CFG_EXTRA_EFFECT_FIELD.number = 11
+STRENGTHEN_CFG_EXTRA_EFFECT_FIELD.index = 10
+STRENGTHEN_CFG_EXTRA_EFFECT_FIELD.label = 2
+STRENGTHEN_CFG_EXTRA_EFFECT_FIELD.has_default_value = false
+STRENGTHEN_CFG_EXTRA_EFFECT_FIELD.default_value = 0
+STRENGTHEN_CFG_EXTRA_EFFECT_FIELD.type = 13
+STRENGTHEN_CFG_EXTRA_EFFECT_FIELD.cpp_type = 3
+
+STRENGTHEN_CFG_BLESSING_LIMIT_FIELD.name = "blessing_limit"
+STRENGTHEN_CFG_BLESSING_LIMIT_FIELD.full_name = ".ftcfg.strengthen_cfg.blessing_limit"
+STRENGTHEN_CFG_BLESSING_LIMIT_FIELD.number = 12
+STRENGTHEN_CFG_BLESSING_LIMIT_FIELD.index = 11
+STRENGTHEN_CFG_BLESSING_LIMIT_FIELD.label = 2
+STRENGTHEN_CFG_BLESSING_LIMIT_FIELD.has_default_value = false
+STRENGTHEN_CFG_BLESSING_LIMIT_FIELD.default_value = 0
+STRENGTHEN_CFG_BLESSING_LIMIT_FIELD.type = 13
+STRENGTHEN_CFG_BLESSING_LIMIT_FIELD.cpp_type = 3
+
+STRENGTHEN_CFG_ASSIST_JEWEL_FIELD.name = "assist_jewel"
+STRENGTHEN_CFG_ASSIST_JEWEL_FIELD.full_name = ".ftcfg.strengthen_cfg.assist_jewel"
+STRENGTHEN_CFG_ASSIST_JEWEL_FIELD.number = 13
+STRENGTHEN_CFG_ASSIST_JEWEL_FIELD.index = 12
+STRENGTHEN_CFG_ASSIST_JEWEL_FIELD.label = 3
+STRENGTHEN_CFG_ASSIST_JEWEL_FIELD.has_default_value = false
+STRENGTHEN_CFG_ASSIST_JEWEL_FIELD.default_value = {}
+STRENGTHEN_CFG_ASSIST_JEWEL_FIELD.type = 13
+STRENGTHEN_CFG_ASSIST_JEWEL_FIELD.cpp_type = 3
+
+STRENGTHEN_CFG_COMBAT_POINT_FIELD.name = "combat_point"
+STRENGTHEN_CFG_COMBAT_POINT_FIELD.full_name = ".ftcfg.strengthen_cfg.combat_point"
+STRENGTHEN_CFG_COMBAT_POINT_FIELD.number = 14
+STRENGTHEN_CFG_COMBAT_POINT_FIELD.index = 13
+STRENGTHEN_CFG_COMBAT_POINT_FIELD.label = 2
+STRENGTHEN_CFG_COMBAT_POINT_FIELD.has_default_value = false
+STRENGTHEN_CFG_COMBAT_POINT_FIELD.default_value = 0
+STRENGTHEN_CFG_COMBAT_POINT_FIELD.type = 13
+STRENGTHEN_CFG_COMBAT_POINT_FIELD.cpp_type = 3
+
+STRENGTHEN_CFG.name = "strengthen_cfg"
+STRENGTHEN_CFG.full_name = ".ftcfg.strengthen_cfg"
+STRENGTHEN_CFG.nested_types = {}
+STRENGTHEN_CFG.enum_types = {}
+STRENGTHEN_CFG.fields = {STRENGTHEN_CFG_ID_FIELD, STRENGTHEN_CFG_SEG_LIMIT_FIELD, STRENGTHEN_CFG_RATE_FIELD, STRENGTHEN_CFG_REQ_LEVEL_FIELD, STRENGTHEN_CFG_MAT_ID_FIELD, STRENGTHEN_CFG_MAT_NUM_FIELD, STRENGTHEN_CFG_PROP_EFFECT1_FIELD, STRENGTHEN_CFG_PROP_EFFECT2_FIELD, STRENGTHEN_CFG_PROP_EFFECT3_FIELD, STRENGTHEN_CFG_PROP_EFFECT4_FIELD, STRENGTHEN_CFG_EXTRA_EFFECT_FIELD, STRENGTHEN_CFG_BLESSING_LIMIT_FIELD, STRENGTHEN_CFG_ASSIST_JEWEL_FIELD, STRENGTHEN_CFG_COMBAT_POINT_FIELD}
+STRENGTHEN_CFG.is_extendable = false
+STRENGTHEN_CFG.extensions = {}
+STRENGTHEN_CFGS_ITEMS_FIELD.name = "items"
+STRENGTHEN_CFGS_ITEMS_FIELD.full_name = ".ftcfg.strengthen_cfgs.items"
+STRENGTHEN_CFGS_ITEMS_FIELD.number = 1
+STRENGTHEN_CFGS_ITEMS_FIELD.index = 0
+STRENGTHEN_CFGS_ITEMS_FIELD.label = 3
+STRENGTHEN_CFGS_ITEMS_FIELD.has_default_value = false
+STRENGTHEN_CFGS_ITEMS_FIELD.default_value = {}
+STRENGTHEN_CFGS_ITEMS_FIELD.message_type = STRENGTHEN_CFG
+STRENGTHEN_CFGS_ITEMS_FIELD.type = 11
+STRENGTHEN_CFGS_ITEMS_FIELD.cpp_type = 10
+
+STRENGTHEN_CFGS.name = "strengthen_cfgs"
+STRENGTHEN_CFGS.full_name = ".ftcfg.strengthen_cfgs"
+STRENGTHEN_CFGS.nested_types = {}
+STRENGTHEN_CFGS.enum_types = {}
+STRENGTHEN_CFGS.fields = {STRENGTHEN_CFGS_ITEMS_FIELD}
+STRENGTHEN_CFGS.is_extendable = false
+STRENGTHEN_CFGS.extensions = {}
+RUNE_MAKE_LIST_CFG_LEVEL_FIELD.name = "level"
+RUNE_MAKE_LIST_CFG_LEVEL_FIELD.full_name = ".ftcfg.rune_make_list_cfg.level"
+RUNE_MAKE_LIST_CFG_LEVEL_FIELD.number = 1
+RUNE_MAKE_LIST_CFG_LEVEL_FIELD.index = 0
+RUNE_MAKE_LIST_CFG_LEVEL_FIELD.label = 2
+RUNE_MAKE_LIST_CFG_LEVEL_FIELD.has_default_value = false
+RUNE_MAKE_LIST_CFG_LEVEL_FIELD.default_value = 0
+RUNE_MAKE_LIST_CFG_LEVEL_FIELD.type = 5
+RUNE_MAKE_LIST_CFG_LEVEL_FIELD.cpp_type = 1
+
+RUNE_MAKE_LIST_CFG_WEAPON_FIELD.name = "weapon"
+RUNE_MAKE_LIST_CFG_WEAPON_FIELD.full_name = ".ftcfg.rune_make_list_cfg.weapon"
+RUNE_MAKE_LIST_CFG_WEAPON_FIELD.number = 2
+RUNE_MAKE_LIST_CFG_WEAPON_FIELD.index = 1
+RUNE_MAKE_LIST_CFG_WEAPON_FIELD.label = 2
+RUNE_MAKE_LIST_CFG_WEAPON_FIELD.has_default_value = false
+RUNE_MAKE_LIST_CFG_WEAPON_FIELD.default_value = 0
+RUNE_MAKE_LIST_CFG_WEAPON_FIELD.type = 5
+RUNE_MAKE_LIST_CFG_WEAPON_FIELD.cpp_type = 1
+
+RUNE_MAKE_LIST_CFG_HEAD_FIELD.name = "head"
+RUNE_MAKE_LIST_CFG_HEAD_FIELD.full_name = ".ftcfg.rune_make_list_cfg.head"
+RUNE_MAKE_LIST_CFG_HEAD_FIELD.number = 3
+RUNE_MAKE_LIST_CFG_HEAD_FIELD.index = 2
+RUNE_MAKE_LIST_CFG_HEAD_FIELD.label = 2
+RUNE_MAKE_LIST_CFG_HEAD_FIELD.has_default_value = false
+RUNE_MAKE_LIST_CFG_HEAD_FIELD.default_value = 0
+RUNE_MAKE_LIST_CFG_HEAD_FIELD.type = 5
+RUNE_MAKE_LIST_CFG_HEAD_FIELD.cpp_type = 1
+
+RUNE_MAKE_LIST_CFG_CLOTHES_FIELD.name = "clothes"
+RUNE_MAKE_LIST_CFG_CLOTHES_FIELD.full_name = ".ftcfg.rune_make_list_cfg.clothes"
+RUNE_MAKE_LIST_CFG_CLOTHES_FIELD.number = 4
+RUNE_MAKE_LIST_CFG_CLOTHES_FIELD.index = 3
+RUNE_MAKE_LIST_CFG_CLOTHES_FIELD.label = 2
+RUNE_MAKE_LIST_CFG_CLOTHES_FIELD.has_default_value = false
+RUNE_MAKE_LIST_CFG_CLOTHES_FIELD.default_value = 0
+RUNE_MAKE_LIST_CFG_CLOTHES_FIELD.type = 5
+RUNE_MAKE_LIST_CFG_CLOTHES_FIELD.cpp_type = 1
+
+RUNE_MAKE_LIST_CFG_TROUSERS_FIELD.name = "trousers"
+RUNE_MAKE_LIST_CFG_TROUSERS_FIELD.full_name = ".ftcfg.rune_make_list_cfg.trousers"
+RUNE_MAKE_LIST_CFG_TROUSERS_FIELD.number = 5
+RUNE_MAKE_LIST_CFG_TROUSERS_FIELD.index = 4
+RUNE_MAKE_LIST_CFG_TROUSERS_FIELD.label = 2
+RUNE_MAKE_LIST_CFG_TROUSERS_FIELD.has_default_value = false
+RUNE_MAKE_LIST_CFG_TROUSERS_FIELD.default_value = 0
+RUNE_MAKE_LIST_CFG_TROUSERS_FIELD.type = 5
+RUNE_MAKE_LIST_CFG_TROUSERS_FIELD.cpp_type = 1
+
+RUNE_MAKE_LIST_CFG_SHOES_FIELD.name = "shoes"
+RUNE_MAKE_LIST_CFG_SHOES_FIELD.full_name = ".ftcfg.rune_make_list_cfg.shoes"
+RUNE_MAKE_LIST_CFG_SHOES_FIELD.number = 6
+RUNE_MAKE_LIST_CFG_SHOES_FIELD.index = 5
+RUNE_MAKE_LIST_CFG_SHOES_FIELD.label = 2
+RUNE_MAKE_LIST_CFG_SHOES_FIELD.has_default_value = false
+RUNE_MAKE_LIST_CFG_SHOES_FIELD.default_value = 0
+RUNE_MAKE_LIST_CFG_SHOES_FIELD.type = 5
+RUNE_MAKE_LIST_CFG_SHOES_FIELD.cpp_type = 1
+
+RUNE_MAKE_LIST_CFG.name = "rune_make_list_cfg"
+RUNE_MAKE_LIST_CFG.full_name = ".ftcfg.rune_make_list_cfg"
+RUNE_MAKE_LIST_CFG.nested_types = {}
+RUNE_MAKE_LIST_CFG.enum_types = {}
+RUNE_MAKE_LIST_CFG.fields = {RUNE_MAKE_LIST_CFG_LEVEL_FIELD, RUNE_MAKE_LIST_CFG_WEAPON_FIELD, RUNE_MAKE_LIST_CFG_HEAD_FIELD, RUNE_MAKE_LIST_CFG_CLOTHES_FIELD, RUNE_MAKE_LIST_CFG_TROUSERS_FIELD, RUNE_MAKE_LIST_CFG_SHOES_FIELD}
+RUNE_MAKE_LIST_CFG.is_extendable = false
+RUNE_MAKE_LIST_CFG.extensions = {}
+RUNE_MAKE_LIST_CFGS_ITEMS_FIELD.name = "items"
+RUNE_MAKE_LIST_CFGS_ITEMS_FIELD.full_name = ".ftcfg.rune_make_list_cfgs.items"
+RUNE_MAKE_LIST_CFGS_ITEMS_FIELD.number = 1
+RUNE_MAKE_LIST_CFGS_ITEMS_FIELD.index = 0
+RUNE_MAKE_LIST_CFGS_ITEMS_FIELD.label = 3
+RUNE_MAKE_LIST_CFGS_ITEMS_FIELD.has_default_value = false
+RUNE_MAKE_LIST_CFGS_ITEMS_FIELD.default_value = {}
+RUNE_MAKE_LIST_CFGS_ITEMS_FIELD.message_type = RUNE_MAKE_LIST_CFG
+RUNE_MAKE_LIST_CFGS_ITEMS_FIELD.type = 11
+RUNE_MAKE_LIST_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RUNE_MAKE_LIST_CFGS.name = "rune_make_list_cfgs"
+RUNE_MAKE_LIST_CFGS.full_name = ".ftcfg.rune_make_list_cfgs"
+RUNE_MAKE_LIST_CFGS.nested_types = {}
+RUNE_MAKE_LIST_CFGS.enum_types = {}
+RUNE_MAKE_LIST_CFGS.fields = {RUNE_MAKE_LIST_CFGS_ITEMS_FIELD}
+RUNE_MAKE_LIST_CFGS.is_extendable = false
+RUNE_MAKE_LIST_CFGS.extensions = {}
+RUNE_MAKE_CFG_ID_FIELD.name = "id"
+RUNE_MAKE_CFG_ID_FIELD.full_name = ".ftcfg.rune_make_cfg.id"
+RUNE_MAKE_CFG_ID_FIELD.number = 1
+RUNE_MAKE_CFG_ID_FIELD.index = 0
+RUNE_MAKE_CFG_ID_FIELD.label = 2
+RUNE_MAKE_CFG_ID_FIELD.has_default_value = false
+RUNE_MAKE_CFG_ID_FIELD.default_value = 0
+RUNE_MAKE_CFG_ID_FIELD.type = 13
+RUNE_MAKE_CFG_ID_FIELD.cpp_type = 3
+
+RUNE_MAKE_CFG_COST_FIELD.name = "cost"
+RUNE_MAKE_CFG_COST_FIELD.full_name = ".ftcfg.rune_make_cfg.cost"
+RUNE_MAKE_CFG_COST_FIELD.number = 2
+RUNE_MAKE_CFG_COST_FIELD.index = 1
+RUNE_MAKE_CFG_COST_FIELD.label = 2
+RUNE_MAKE_CFG_COST_FIELD.has_default_value = false
+RUNE_MAKE_CFG_COST_FIELD.default_value = 0
+RUNE_MAKE_CFG_COST_FIELD.type = 5
+RUNE_MAKE_CFG_COST_FIELD.cpp_type = 1
+
+RUNE_MAKE_CFG_MAKE_MATERIAL_FIELD.name = "make_material"
+RUNE_MAKE_CFG_MAKE_MATERIAL_FIELD.full_name = ".ftcfg.rune_make_cfg.make_material"
+RUNE_MAKE_CFG_MAKE_MATERIAL_FIELD.number = 3
+RUNE_MAKE_CFG_MAKE_MATERIAL_FIELD.index = 2
+RUNE_MAKE_CFG_MAKE_MATERIAL_FIELD.label = 3
+RUNE_MAKE_CFG_MAKE_MATERIAL_FIELD.has_default_value = false
+RUNE_MAKE_CFG_MAKE_MATERIAL_FIELD.default_value = {}
+RUNE_MAKE_CFG_MAKE_MATERIAL_FIELD.type = 13
+RUNE_MAKE_CFG_MAKE_MATERIAL_FIELD.cpp_type = 3
+
+RUNE_MAKE_CFG_ELITE_MATERIAL_FIELD.name = "elite_material"
+RUNE_MAKE_CFG_ELITE_MATERIAL_FIELD.full_name = ".ftcfg.rune_make_cfg.elite_material"
+RUNE_MAKE_CFG_ELITE_MATERIAL_FIELD.number = 4
+RUNE_MAKE_CFG_ELITE_MATERIAL_FIELD.index = 3
+RUNE_MAKE_CFG_ELITE_MATERIAL_FIELD.label = 3
+RUNE_MAKE_CFG_ELITE_MATERIAL_FIELD.has_default_value = false
+RUNE_MAKE_CFG_ELITE_MATERIAL_FIELD.default_value = {}
+RUNE_MAKE_CFG_ELITE_MATERIAL_FIELD.type = 13
+RUNE_MAKE_CFG_ELITE_MATERIAL_FIELD.cpp_type = 3
+
+RUNE_MAKE_CFG_PROP_COUNT_FIELD.name = "prop_count"
+RUNE_MAKE_CFG_PROP_COUNT_FIELD.full_name = ".ftcfg.rune_make_cfg.prop_count"
+RUNE_MAKE_CFG_PROP_COUNT_FIELD.number = 5
+RUNE_MAKE_CFG_PROP_COUNT_FIELD.index = 4
+RUNE_MAKE_CFG_PROP_COUNT_FIELD.label = 2
+RUNE_MAKE_CFG_PROP_COUNT_FIELD.has_default_value = false
+RUNE_MAKE_CFG_PROP_COUNT_FIELD.default_value = 0
+RUNE_MAKE_CFG_PROP_COUNT_FIELD.type = 13
+RUNE_MAKE_CFG_PROP_COUNT_FIELD.cpp_type = 3
+
+RUNE_MAKE_CFG_SPECIAL_SPELL_RATE_FIELD.name = "special_spell_rate"
+RUNE_MAKE_CFG_SPECIAL_SPELL_RATE_FIELD.full_name = ".ftcfg.rune_make_cfg.special_spell_rate"
+RUNE_MAKE_CFG_SPECIAL_SPELL_RATE_FIELD.number = 6
+RUNE_MAKE_CFG_SPECIAL_SPELL_RATE_FIELD.index = 5
+RUNE_MAKE_CFG_SPECIAL_SPELL_RATE_FIELD.label = 2
+RUNE_MAKE_CFG_SPECIAL_SPELL_RATE_FIELD.has_default_value = false
+RUNE_MAKE_CFG_SPECIAL_SPELL_RATE_FIELD.default_value = 0
+RUNE_MAKE_CFG_SPECIAL_SPELL_RATE_FIELD.type = 13
+RUNE_MAKE_CFG_SPECIAL_SPELL_RATE_FIELD.cpp_type = 3
+
+RUNE_MAKE_CFG_SPECIAL_SPELL_ELITE_RATE_FIELD.name = "special_spell_elite_rate"
+RUNE_MAKE_CFG_SPECIAL_SPELL_ELITE_RATE_FIELD.full_name = ".ftcfg.rune_make_cfg.special_spell_elite_rate"
+RUNE_MAKE_CFG_SPECIAL_SPELL_ELITE_RATE_FIELD.number = 7
+RUNE_MAKE_CFG_SPECIAL_SPELL_ELITE_RATE_FIELD.index = 6
+RUNE_MAKE_CFG_SPECIAL_SPELL_ELITE_RATE_FIELD.label = 2
+RUNE_MAKE_CFG_SPECIAL_SPELL_ELITE_RATE_FIELD.has_default_value = false
+RUNE_MAKE_CFG_SPECIAL_SPELL_ELITE_RATE_FIELD.default_value = 0
+RUNE_MAKE_CFG_SPECIAL_SPELL_ELITE_RATE_FIELD.type = 13
+RUNE_MAKE_CFG_SPECIAL_SPELL_ELITE_RATE_FIELD.cpp_type = 3
+
+RUNE_MAKE_CFG_SPELL_GROUP_ID_FIELD.name = "spell_group_id"
+RUNE_MAKE_CFG_SPELL_GROUP_ID_FIELD.full_name = ".ftcfg.rune_make_cfg.spell_group_id"
+RUNE_MAKE_CFG_SPELL_GROUP_ID_FIELD.number = 8
+RUNE_MAKE_CFG_SPELL_GROUP_ID_FIELD.index = 7
+RUNE_MAKE_CFG_SPELL_GROUP_ID_FIELD.label = 2
+RUNE_MAKE_CFG_SPELL_GROUP_ID_FIELD.has_default_value = false
+RUNE_MAKE_CFG_SPELL_GROUP_ID_FIELD.default_value = 0
+RUNE_MAKE_CFG_SPELL_GROUP_ID_FIELD.type = 13
+RUNE_MAKE_CFG_SPELL_GROUP_ID_FIELD.cpp_type = 3
+
+RUNE_MAKE_CFG_SPELL_RATE_FIELD.name = "spell_rate"
+RUNE_MAKE_CFG_SPELL_RATE_FIELD.full_name = ".ftcfg.rune_make_cfg.spell_rate"
+RUNE_MAKE_CFG_SPELL_RATE_FIELD.number = 9
+RUNE_MAKE_CFG_SPELL_RATE_FIELD.index = 8
+RUNE_MAKE_CFG_SPELL_RATE_FIELD.label = 2
+RUNE_MAKE_CFG_SPELL_RATE_FIELD.has_default_value = false
+RUNE_MAKE_CFG_SPELL_RATE_FIELD.default_value = 0
+RUNE_MAKE_CFG_SPELL_RATE_FIELD.type = 13
+RUNE_MAKE_CFG_SPELL_RATE_FIELD.cpp_type = 3
+
+RUNE_MAKE_CFG_SPELL_ELITE_RATE_FIELD.name = "spell_elite_rate"
+RUNE_MAKE_CFG_SPELL_ELITE_RATE_FIELD.full_name = ".ftcfg.rune_make_cfg.spell_elite_rate"
+RUNE_MAKE_CFG_SPELL_ELITE_RATE_FIELD.number = 10
+RUNE_MAKE_CFG_SPELL_ELITE_RATE_FIELD.index = 9
+RUNE_MAKE_CFG_SPELL_ELITE_RATE_FIELD.label = 2
+RUNE_MAKE_CFG_SPELL_ELITE_RATE_FIELD.has_default_value = false
+RUNE_MAKE_CFG_SPELL_ELITE_RATE_FIELD.default_value = 0
+RUNE_MAKE_CFG_SPELL_ELITE_RATE_FIELD.type = 13
+RUNE_MAKE_CFG_SPELL_ELITE_RATE_FIELD.cpp_type = 3
+
+RUNE_MAKE_CFG_PROP_GROUP_ID_FIELD.name = "prop_group_id"
+RUNE_MAKE_CFG_PROP_GROUP_ID_FIELD.full_name = ".ftcfg.rune_make_cfg.prop_group_id"
+RUNE_MAKE_CFG_PROP_GROUP_ID_FIELD.number = 11
+RUNE_MAKE_CFG_PROP_GROUP_ID_FIELD.index = 10
+RUNE_MAKE_CFG_PROP_GROUP_ID_FIELD.label = 3
+RUNE_MAKE_CFG_PROP_GROUP_ID_FIELD.has_default_value = false
+RUNE_MAKE_CFG_PROP_GROUP_ID_FIELD.default_value = {}
+RUNE_MAKE_CFG_PROP_GROUP_ID_FIELD.type = 13
+RUNE_MAKE_CFG_PROP_GROUP_ID_FIELD.cpp_type = 3
+
+RUNE_MAKE_CFG_MAGIC_GROUP_ID_FIELD.name = "magic_group_id"
+RUNE_MAKE_CFG_MAGIC_GROUP_ID_FIELD.full_name = ".ftcfg.rune_make_cfg.magic_group_id"
+RUNE_MAKE_CFG_MAGIC_GROUP_ID_FIELD.number = 12
+RUNE_MAKE_CFG_MAGIC_GROUP_ID_FIELD.index = 11
+RUNE_MAKE_CFG_MAGIC_GROUP_ID_FIELD.label = 3
+RUNE_MAKE_CFG_MAGIC_GROUP_ID_FIELD.has_default_value = false
+RUNE_MAKE_CFG_MAGIC_GROUP_ID_FIELD.default_value = {}
+RUNE_MAKE_CFG_MAGIC_GROUP_ID_FIELD.type = 13
+RUNE_MAKE_CFG_MAGIC_GROUP_ID_FIELD.cpp_type = 3
+
+RUNE_MAKE_CFG.name = "rune_make_cfg"
+RUNE_MAKE_CFG.full_name = ".ftcfg.rune_make_cfg"
+RUNE_MAKE_CFG.nested_types = {}
+RUNE_MAKE_CFG.enum_types = {}
+RUNE_MAKE_CFG.fields = {RUNE_MAKE_CFG_ID_FIELD, RUNE_MAKE_CFG_COST_FIELD, RUNE_MAKE_CFG_MAKE_MATERIAL_FIELD, RUNE_MAKE_CFG_ELITE_MATERIAL_FIELD, RUNE_MAKE_CFG_PROP_COUNT_FIELD, RUNE_MAKE_CFG_SPECIAL_SPELL_RATE_FIELD, RUNE_MAKE_CFG_SPECIAL_SPELL_ELITE_RATE_FIELD, RUNE_MAKE_CFG_SPELL_GROUP_ID_FIELD, RUNE_MAKE_CFG_SPELL_RATE_FIELD, RUNE_MAKE_CFG_SPELL_ELITE_RATE_FIELD, RUNE_MAKE_CFG_PROP_GROUP_ID_FIELD, RUNE_MAKE_CFG_MAGIC_GROUP_ID_FIELD}
+RUNE_MAKE_CFG.is_extendable = false
+RUNE_MAKE_CFG.extensions = {}
+RUNE_MAKE_CFGS_ITEMS_FIELD.name = "items"
+RUNE_MAKE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.rune_make_cfgs.items"
+RUNE_MAKE_CFGS_ITEMS_FIELD.number = 1
+RUNE_MAKE_CFGS_ITEMS_FIELD.index = 0
+RUNE_MAKE_CFGS_ITEMS_FIELD.label = 3
+RUNE_MAKE_CFGS_ITEMS_FIELD.has_default_value = false
+RUNE_MAKE_CFGS_ITEMS_FIELD.default_value = {}
+RUNE_MAKE_CFGS_ITEMS_FIELD.message_type = RUNE_MAKE_CFG
+RUNE_MAKE_CFGS_ITEMS_FIELD.type = 11
+RUNE_MAKE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RUNE_MAKE_CFGS.name = "rune_make_cfgs"
+RUNE_MAKE_CFGS.full_name = ".ftcfg.rune_make_cfgs"
+RUNE_MAKE_CFGS.nested_types = {}
+RUNE_MAKE_CFGS.enum_types = {}
+RUNE_MAKE_CFGS.fields = {RUNE_MAKE_CFGS_ITEMS_FIELD}
+RUNE_MAKE_CFGS.is_extendable = false
+RUNE_MAKE_CFGS.extensions = {}
+RUNE_PROP_GROUP_CFG_ID_FIELD.name = "id"
+RUNE_PROP_GROUP_CFG_ID_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.id"
+RUNE_PROP_GROUP_CFG_ID_FIELD.number = 1
+RUNE_PROP_GROUP_CFG_ID_FIELD.index = 0
+RUNE_PROP_GROUP_CFG_ID_FIELD.label = 2
+RUNE_PROP_GROUP_CFG_ID_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_ID_FIELD.default_value = 0
+RUNE_PROP_GROUP_CFG_ID_FIELD.type = 13
+RUNE_PROP_GROUP_CFG_ID_FIELD.cpp_type = 3
+
+RUNE_PROP_GROUP_CFG_ASSIST_ID_FIELD.name = "assist_id"
+RUNE_PROP_GROUP_CFG_ASSIST_ID_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.assist_id"
+RUNE_PROP_GROUP_CFG_ASSIST_ID_FIELD.number = 2
+RUNE_PROP_GROUP_CFG_ASSIST_ID_FIELD.index = 1
+RUNE_PROP_GROUP_CFG_ASSIST_ID_FIELD.label = 2
+RUNE_PROP_GROUP_CFG_ASSIST_ID_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_ASSIST_ID_FIELD.default_value = 0
+RUNE_PROP_GROUP_CFG_ASSIST_ID_FIELD.type = 13
+RUNE_PROP_GROUP_CFG_ASSIST_ID_FIELD.cpp_type = 3
+
+RUNE_PROP_GROUP_CFG_GROUP_ID_FIELD.name = "group_id"
+RUNE_PROP_GROUP_CFG_GROUP_ID_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.group_id"
+RUNE_PROP_GROUP_CFG_GROUP_ID_FIELD.number = 3
+RUNE_PROP_GROUP_CFG_GROUP_ID_FIELD.index = 2
+RUNE_PROP_GROUP_CFG_GROUP_ID_FIELD.label = 2
+RUNE_PROP_GROUP_CFG_GROUP_ID_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_GROUP_ID_FIELD.default_value = 0
+RUNE_PROP_GROUP_CFG_GROUP_ID_FIELD.type = 13
+RUNE_PROP_GROUP_CFG_GROUP_ID_FIELD.cpp_type = 3
+
+RUNE_PROP_GROUP_CFG_PROP_FIELD.name = "prop"
+RUNE_PROP_GROUP_CFG_PROP_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop"
+RUNE_PROP_GROUP_CFG_PROP_FIELD.number = 4
+RUNE_PROP_GROUP_CFG_PROP_FIELD.index = 3
+RUNE_PROP_GROUP_CFG_PROP_FIELD.label = 2
+RUNE_PROP_GROUP_CFG_PROP_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_FIELD.default_value = ""
+RUNE_PROP_GROUP_CFG_PROP_FIELD.type = 9
+RUNE_PROP_GROUP_CFG_PROP_FIELD.cpp_type = 9
+
+RUNE_PROP_GROUP_CFG_PROP_VALUE1_FIELD.name = "prop_value1"
+RUNE_PROP_GROUP_CFG_PROP_VALUE1_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_value1"
+RUNE_PROP_GROUP_CFG_PROP_VALUE1_FIELD.number = 5
+RUNE_PROP_GROUP_CFG_PROP_VALUE1_FIELD.index = 4
+RUNE_PROP_GROUP_CFG_PROP_VALUE1_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_VALUE1_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_VALUE1_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_VALUE1_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_VALUE1_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG_PROP_VALUE2_FIELD.name = "prop_value2"
+RUNE_PROP_GROUP_CFG_PROP_VALUE2_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_value2"
+RUNE_PROP_GROUP_CFG_PROP_VALUE2_FIELD.number = 6
+RUNE_PROP_GROUP_CFG_PROP_VALUE2_FIELD.index = 5
+RUNE_PROP_GROUP_CFG_PROP_VALUE2_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_VALUE2_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_VALUE2_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_VALUE2_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_VALUE2_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG_PROP_VALUE3_FIELD.name = "prop_value3"
+RUNE_PROP_GROUP_CFG_PROP_VALUE3_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_value3"
+RUNE_PROP_GROUP_CFG_PROP_VALUE3_FIELD.number = 7
+RUNE_PROP_GROUP_CFG_PROP_VALUE3_FIELD.index = 6
+RUNE_PROP_GROUP_CFG_PROP_VALUE3_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_VALUE3_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_VALUE3_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_VALUE3_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_VALUE3_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG_PROP_VALUE4_FIELD.name = "prop_value4"
+RUNE_PROP_GROUP_CFG_PROP_VALUE4_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_value4"
+RUNE_PROP_GROUP_CFG_PROP_VALUE4_FIELD.number = 8
+RUNE_PROP_GROUP_CFG_PROP_VALUE4_FIELD.index = 7
+RUNE_PROP_GROUP_CFG_PROP_VALUE4_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_VALUE4_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_VALUE4_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_VALUE4_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_VALUE4_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG_PROP_VALUE5_FIELD.name = "prop_value5"
+RUNE_PROP_GROUP_CFG_PROP_VALUE5_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_value5"
+RUNE_PROP_GROUP_CFG_PROP_VALUE5_FIELD.number = 9
+RUNE_PROP_GROUP_CFG_PROP_VALUE5_FIELD.index = 8
+RUNE_PROP_GROUP_CFG_PROP_VALUE5_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_VALUE5_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_VALUE5_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_VALUE5_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_VALUE5_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG_PROP_VALUE6_FIELD.name = "prop_value6"
+RUNE_PROP_GROUP_CFG_PROP_VALUE6_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_value6"
+RUNE_PROP_GROUP_CFG_PROP_VALUE6_FIELD.number = 10
+RUNE_PROP_GROUP_CFG_PROP_VALUE6_FIELD.index = 9
+RUNE_PROP_GROUP_CFG_PROP_VALUE6_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_VALUE6_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_VALUE6_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_VALUE6_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_VALUE6_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE1_FIELD.name = "prop_elite_value1"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE1_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_elite_value1"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE1_FIELD.number = 11
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE1_FIELD.index = 10
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE1_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE1_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE1_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE1_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE1_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE2_FIELD.name = "prop_elite_value2"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE2_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_elite_value2"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE2_FIELD.number = 12
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE2_FIELD.index = 11
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE2_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE2_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE2_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE2_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE2_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE3_FIELD.name = "prop_elite_value3"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE3_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_elite_value3"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE3_FIELD.number = 13
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE3_FIELD.index = 12
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE3_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE3_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE3_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE3_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE3_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE4_FIELD.name = "prop_elite_value4"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE4_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_elite_value4"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE4_FIELD.number = 14
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE4_FIELD.index = 13
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE4_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE4_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE4_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE4_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE4_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE5_FIELD.name = "prop_elite_value5"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE5_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_elite_value5"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE5_FIELD.number = 15
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE5_FIELD.index = 14
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE5_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE5_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE5_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE5_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE5_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE6_FIELD.name = "prop_elite_value6"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE6_FIELD.full_name = ".ftcfg.rune_prop_group_cfg.prop_elite_value6"
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE6_FIELD.number = 16
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE6_FIELD.index = 15
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE6_FIELD.label = 3
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE6_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE6_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE6_FIELD.type = 1
+RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE6_FIELD.cpp_type = 5
+
+RUNE_PROP_GROUP_CFG.name = "rune_prop_group_cfg"
+RUNE_PROP_GROUP_CFG.full_name = ".ftcfg.rune_prop_group_cfg"
+RUNE_PROP_GROUP_CFG.nested_types = {}
+RUNE_PROP_GROUP_CFG.enum_types = {}
+RUNE_PROP_GROUP_CFG.fields = {RUNE_PROP_GROUP_CFG_ID_FIELD, RUNE_PROP_GROUP_CFG_ASSIST_ID_FIELD, RUNE_PROP_GROUP_CFG_GROUP_ID_FIELD, RUNE_PROP_GROUP_CFG_PROP_FIELD, RUNE_PROP_GROUP_CFG_PROP_VALUE1_FIELD, RUNE_PROP_GROUP_CFG_PROP_VALUE2_FIELD, RUNE_PROP_GROUP_CFG_PROP_VALUE3_FIELD, RUNE_PROP_GROUP_CFG_PROP_VALUE4_FIELD, RUNE_PROP_GROUP_CFG_PROP_VALUE5_FIELD, RUNE_PROP_GROUP_CFG_PROP_VALUE6_FIELD, RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE1_FIELD, RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE2_FIELD, RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE3_FIELD, RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE4_FIELD, RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE5_FIELD, RUNE_PROP_GROUP_CFG_PROP_ELITE_VALUE6_FIELD}
+RUNE_PROP_GROUP_CFG.is_extendable = false
+RUNE_PROP_GROUP_CFG.extensions = {}
+RUNE_PROP_GROUP_CFGS_ITEMS_FIELD.name = "items"
+RUNE_PROP_GROUP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.rune_prop_group_cfgs.items"
+RUNE_PROP_GROUP_CFGS_ITEMS_FIELD.number = 1
+RUNE_PROP_GROUP_CFGS_ITEMS_FIELD.index = 0
+RUNE_PROP_GROUP_CFGS_ITEMS_FIELD.label = 3
+RUNE_PROP_GROUP_CFGS_ITEMS_FIELD.has_default_value = false
+RUNE_PROP_GROUP_CFGS_ITEMS_FIELD.default_value = {}
+RUNE_PROP_GROUP_CFGS_ITEMS_FIELD.message_type = RUNE_PROP_GROUP_CFG
+RUNE_PROP_GROUP_CFGS_ITEMS_FIELD.type = 11
+RUNE_PROP_GROUP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RUNE_PROP_GROUP_CFGS.name = "rune_prop_group_cfgs"
+RUNE_PROP_GROUP_CFGS.full_name = ".ftcfg.rune_prop_group_cfgs"
+RUNE_PROP_GROUP_CFGS.nested_types = {}
+RUNE_PROP_GROUP_CFGS.enum_types = {}
+RUNE_PROP_GROUP_CFGS.fields = {RUNE_PROP_GROUP_CFGS_ITEMS_FIELD}
+RUNE_PROP_GROUP_CFGS.is_extendable = false
+RUNE_PROP_GROUP_CFGS.extensions = {}
+EQUIP_LIST_CFG_ID_FIELD.name = "id"
+EQUIP_LIST_CFG_ID_FIELD.full_name = ".ftcfg.equip_list_cfg.id"
+EQUIP_LIST_CFG_ID_FIELD.number = 1
+EQUIP_LIST_CFG_ID_FIELD.index = 0
+EQUIP_LIST_CFG_ID_FIELD.label = 2
+EQUIP_LIST_CFG_ID_FIELD.has_default_value = false
+EQUIP_LIST_CFG_ID_FIELD.default_value = 0
+EQUIP_LIST_CFG_ID_FIELD.type = 5
+EQUIP_LIST_CFG_ID_FIELD.cpp_type = 1
+
+EQUIP_LIST_CFG_EQUIP_LIST_FIELD.name = "equip_list"
+EQUIP_LIST_CFG_EQUIP_LIST_FIELD.full_name = ".ftcfg.equip_list_cfg.equip_list"
+EQUIP_LIST_CFG_EQUIP_LIST_FIELD.number = 2
+EQUIP_LIST_CFG_EQUIP_LIST_FIELD.index = 1
+EQUIP_LIST_CFG_EQUIP_LIST_FIELD.label = 3
+EQUIP_LIST_CFG_EQUIP_LIST_FIELD.has_default_value = false
+EQUIP_LIST_CFG_EQUIP_LIST_FIELD.default_value = {}
+EQUIP_LIST_CFG_EQUIP_LIST_FIELD.type = 13
+EQUIP_LIST_CFG_EQUIP_LIST_FIELD.cpp_type = 3
+
+EQUIP_LIST_CFG.name = "equip_list_cfg"
+EQUIP_LIST_CFG.full_name = ".ftcfg.equip_list_cfg"
+EQUIP_LIST_CFG.nested_types = {}
+EQUIP_LIST_CFG.enum_types = {}
+EQUIP_LIST_CFG.fields = {EQUIP_LIST_CFG_ID_FIELD, EQUIP_LIST_CFG_EQUIP_LIST_FIELD}
+EQUIP_LIST_CFG.is_extendable = false
+EQUIP_LIST_CFG.extensions = {}
+EQUIP_LIST_CFGS_ITEMS_FIELD.name = "items"
+EQUIP_LIST_CFGS_ITEMS_FIELD.full_name = ".ftcfg.equip_list_cfgs.items"
+EQUIP_LIST_CFGS_ITEMS_FIELD.number = 1
+EQUIP_LIST_CFGS_ITEMS_FIELD.index = 0
+EQUIP_LIST_CFGS_ITEMS_FIELD.label = 3
+EQUIP_LIST_CFGS_ITEMS_FIELD.has_default_value = false
+EQUIP_LIST_CFGS_ITEMS_FIELD.default_value = {}
+EQUIP_LIST_CFGS_ITEMS_FIELD.message_type = EQUIP_LIST_CFG
+EQUIP_LIST_CFGS_ITEMS_FIELD.type = 11
+EQUIP_LIST_CFGS_ITEMS_FIELD.cpp_type = 10
+
+EQUIP_LIST_CFGS.name = "equip_list_cfgs"
+EQUIP_LIST_CFGS.full_name = ".ftcfg.equip_list_cfgs"
+EQUIP_LIST_CFGS.nested_types = {}
+EQUIP_LIST_CFGS.enum_types = {}
+EQUIP_LIST_CFGS.fields = {EQUIP_LIST_CFGS_ITEMS_FIELD}
+EQUIP_LIST_CFGS.is_extendable = false
+EQUIP_LIST_CFGS.extensions = {}
+RUNE_SKILL_GROUP_CFG_ID_FIELD.name = "id"
+RUNE_SKILL_GROUP_CFG_ID_FIELD.full_name = ".ftcfg.rune_skill_group_cfg.id"
+RUNE_SKILL_GROUP_CFG_ID_FIELD.number = 1
+RUNE_SKILL_GROUP_CFG_ID_FIELD.index = 0
+RUNE_SKILL_GROUP_CFG_ID_FIELD.label = 2
+RUNE_SKILL_GROUP_CFG_ID_FIELD.has_default_value = false
+RUNE_SKILL_GROUP_CFG_ID_FIELD.default_value = 0
+RUNE_SKILL_GROUP_CFG_ID_FIELD.type = 13
+RUNE_SKILL_GROUP_CFG_ID_FIELD.cpp_type = 3
+
+RUNE_SKILL_GROUP_CFG_GROUP_ID_FIELD.name = "group_id"
+RUNE_SKILL_GROUP_CFG_GROUP_ID_FIELD.full_name = ".ftcfg.rune_skill_group_cfg.group_id"
+RUNE_SKILL_GROUP_CFG_GROUP_ID_FIELD.number = 2
+RUNE_SKILL_GROUP_CFG_GROUP_ID_FIELD.index = 1
+RUNE_SKILL_GROUP_CFG_GROUP_ID_FIELD.label = 2
+RUNE_SKILL_GROUP_CFG_GROUP_ID_FIELD.has_default_value = false
+RUNE_SKILL_GROUP_CFG_GROUP_ID_FIELD.default_value = 0
+RUNE_SKILL_GROUP_CFG_GROUP_ID_FIELD.type = 13
+RUNE_SKILL_GROUP_CFG_GROUP_ID_FIELD.cpp_type = 3
+
+RUNE_SKILL_GROUP_CFG_SKILL_ID_FIELD.name = "skill_id"
+RUNE_SKILL_GROUP_CFG_SKILL_ID_FIELD.full_name = ".ftcfg.rune_skill_group_cfg.skill_id"
+RUNE_SKILL_GROUP_CFG_SKILL_ID_FIELD.number = 3
+RUNE_SKILL_GROUP_CFG_SKILL_ID_FIELD.index = 2
+RUNE_SKILL_GROUP_CFG_SKILL_ID_FIELD.label = 2
+RUNE_SKILL_GROUP_CFG_SKILL_ID_FIELD.has_default_value = false
+RUNE_SKILL_GROUP_CFG_SKILL_ID_FIELD.default_value = 0
+RUNE_SKILL_GROUP_CFG_SKILL_ID_FIELD.type = 5
+RUNE_SKILL_GROUP_CFG_SKILL_ID_FIELD.cpp_type = 1
+
+RUNE_SKILL_GROUP_CFG_LEVEL_RAND_FIELD.name = "level_rand"
+RUNE_SKILL_GROUP_CFG_LEVEL_RAND_FIELD.full_name = ".ftcfg.rune_skill_group_cfg.level_rand"
+RUNE_SKILL_GROUP_CFG_LEVEL_RAND_FIELD.number = 4
+RUNE_SKILL_GROUP_CFG_LEVEL_RAND_FIELD.index = 3
+RUNE_SKILL_GROUP_CFG_LEVEL_RAND_FIELD.label = 3
+RUNE_SKILL_GROUP_CFG_LEVEL_RAND_FIELD.has_default_value = false
+RUNE_SKILL_GROUP_CFG_LEVEL_RAND_FIELD.default_value = {}
+RUNE_SKILL_GROUP_CFG_LEVEL_RAND_FIELD.type = 13
+RUNE_SKILL_GROUP_CFG_LEVEL_RAND_FIELD.cpp_type = 3
+
+RUNE_SKILL_GROUP_CFG_RATE_1_FIELD.name = "rate_1"
+RUNE_SKILL_GROUP_CFG_RATE_1_FIELD.full_name = ".ftcfg.rune_skill_group_cfg.rate_1"
+RUNE_SKILL_GROUP_CFG_RATE_1_FIELD.number = 5
+RUNE_SKILL_GROUP_CFG_RATE_1_FIELD.index = 4
+RUNE_SKILL_GROUP_CFG_RATE_1_FIELD.label = 2
+RUNE_SKILL_GROUP_CFG_RATE_1_FIELD.has_default_value = false
+RUNE_SKILL_GROUP_CFG_RATE_1_FIELD.default_value = 0
+RUNE_SKILL_GROUP_CFG_RATE_1_FIELD.type = 5
+RUNE_SKILL_GROUP_CFG_RATE_1_FIELD.cpp_type = 1
+
+RUNE_SKILL_GROUP_CFG_RATE_2_FIELD.name = "rate_2"
+RUNE_SKILL_GROUP_CFG_RATE_2_FIELD.full_name = ".ftcfg.rune_skill_group_cfg.rate_2"
+RUNE_SKILL_GROUP_CFG_RATE_2_FIELD.number = 6
+RUNE_SKILL_GROUP_CFG_RATE_2_FIELD.index = 5
+RUNE_SKILL_GROUP_CFG_RATE_2_FIELD.label = 2
+RUNE_SKILL_GROUP_CFG_RATE_2_FIELD.has_default_value = false
+RUNE_SKILL_GROUP_CFG_RATE_2_FIELD.default_value = 0
+RUNE_SKILL_GROUP_CFG_RATE_2_FIELD.type = 5
+RUNE_SKILL_GROUP_CFG_RATE_2_FIELD.cpp_type = 1
+
+RUNE_SKILL_GROUP_CFG_RATE_3_FIELD.name = "rate_3"
+RUNE_SKILL_GROUP_CFG_RATE_3_FIELD.full_name = ".ftcfg.rune_skill_group_cfg.rate_3"
+RUNE_SKILL_GROUP_CFG_RATE_3_FIELD.number = 7
+RUNE_SKILL_GROUP_CFG_RATE_3_FIELD.index = 6
+RUNE_SKILL_GROUP_CFG_RATE_3_FIELD.label = 2
+RUNE_SKILL_GROUP_CFG_RATE_3_FIELD.has_default_value = false
+RUNE_SKILL_GROUP_CFG_RATE_3_FIELD.default_value = 0
+RUNE_SKILL_GROUP_CFG_RATE_3_FIELD.type = 5
+RUNE_SKILL_GROUP_CFG_RATE_3_FIELD.cpp_type = 1
+
+RUNE_SKILL_GROUP_CFG_RATE_4_FIELD.name = "rate_4"
+RUNE_SKILL_GROUP_CFG_RATE_4_FIELD.full_name = ".ftcfg.rune_skill_group_cfg.rate_4"
+RUNE_SKILL_GROUP_CFG_RATE_4_FIELD.number = 8
+RUNE_SKILL_GROUP_CFG_RATE_4_FIELD.index = 7
+RUNE_SKILL_GROUP_CFG_RATE_4_FIELD.label = 2
+RUNE_SKILL_GROUP_CFG_RATE_4_FIELD.has_default_value = false
+RUNE_SKILL_GROUP_CFG_RATE_4_FIELD.default_value = 0
+RUNE_SKILL_GROUP_CFG_RATE_4_FIELD.type = 5
+RUNE_SKILL_GROUP_CFG_RATE_4_FIELD.cpp_type = 1
+
+RUNE_SKILL_GROUP_CFG_RATE_5_FIELD.name = "rate_5"
+RUNE_SKILL_GROUP_CFG_RATE_5_FIELD.full_name = ".ftcfg.rune_skill_group_cfg.rate_5"
+RUNE_SKILL_GROUP_CFG_RATE_5_FIELD.number = 9
+RUNE_SKILL_GROUP_CFG_RATE_5_FIELD.index = 8
+RUNE_SKILL_GROUP_CFG_RATE_5_FIELD.label = 2
+RUNE_SKILL_GROUP_CFG_RATE_5_FIELD.has_default_value = false
+RUNE_SKILL_GROUP_CFG_RATE_5_FIELD.default_value = 0
+RUNE_SKILL_GROUP_CFG_RATE_5_FIELD.type = 5
+RUNE_SKILL_GROUP_CFG_RATE_5_FIELD.cpp_type = 1
+
+RUNE_SKILL_GROUP_CFG.name = "rune_skill_group_cfg"
+RUNE_SKILL_GROUP_CFG.full_name = ".ftcfg.rune_skill_group_cfg"
+RUNE_SKILL_GROUP_CFG.nested_types = {}
+RUNE_SKILL_GROUP_CFG.enum_types = {}
+RUNE_SKILL_GROUP_CFG.fields = {RUNE_SKILL_GROUP_CFG_ID_FIELD, RUNE_SKILL_GROUP_CFG_GROUP_ID_FIELD, RUNE_SKILL_GROUP_CFG_SKILL_ID_FIELD, RUNE_SKILL_GROUP_CFG_LEVEL_RAND_FIELD, RUNE_SKILL_GROUP_CFG_RATE_1_FIELD, RUNE_SKILL_GROUP_CFG_RATE_2_FIELD, RUNE_SKILL_GROUP_CFG_RATE_3_FIELD, RUNE_SKILL_GROUP_CFG_RATE_4_FIELD, RUNE_SKILL_GROUP_CFG_RATE_5_FIELD}
+RUNE_SKILL_GROUP_CFG.is_extendable = false
+RUNE_SKILL_GROUP_CFG.extensions = {}
+RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD.name = "items"
+RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.rune_skill_group_cfgs.items"
+RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD.number = 1
+RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD.index = 0
+RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD.label = 3
+RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD.has_default_value = false
+RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD.default_value = {}
+RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD.message_type = RUNE_SKILL_GROUP_CFG
+RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD.type = 11
+RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RUNE_SKILL_GROUP_CFGS.name = "rune_skill_group_cfgs"
+RUNE_SKILL_GROUP_CFGS.full_name = ".ftcfg.rune_skill_group_cfgs"
+RUNE_SKILL_GROUP_CFGS.nested_types = {}
+RUNE_SKILL_GROUP_CFGS.enum_types = {}
+RUNE_SKILL_GROUP_CFGS.fields = {RUNE_SKILL_GROUP_CFGS_ITEMS_FIELD}
+RUNE_SKILL_GROUP_CFGS.is_extendable = false
+RUNE_SKILL_GROUP_CFGS.extensions = {}
+RUNE_DECOMPOSE_CFG_ID_FIELD.name = "id"
+RUNE_DECOMPOSE_CFG_ID_FIELD.full_name = ".ftcfg.rune_decompose_cfg.id"
+RUNE_DECOMPOSE_CFG_ID_FIELD.number = 1
+RUNE_DECOMPOSE_CFG_ID_FIELD.index = 0
+RUNE_DECOMPOSE_CFG_ID_FIELD.label = 2
+RUNE_DECOMPOSE_CFG_ID_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_ID_FIELD.default_value = 0
+RUNE_DECOMPOSE_CFG_ID_FIELD.type = 13
+RUNE_DECOMPOSE_CFG_ID_FIELD.cpp_type = 3
+
+RUNE_DECOMPOSE_CFG_SILVER_FIELD.name = "silver"
+RUNE_DECOMPOSE_CFG_SILVER_FIELD.full_name = ".ftcfg.rune_decompose_cfg.silver"
+RUNE_DECOMPOSE_CFG_SILVER_FIELD.number = 2
+RUNE_DECOMPOSE_CFG_SILVER_FIELD.index = 1
+RUNE_DECOMPOSE_CFG_SILVER_FIELD.label = 3
+RUNE_DECOMPOSE_CFG_SILVER_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_SILVER_FIELD.default_value = {}
+RUNE_DECOMPOSE_CFG_SILVER_FIELD.type = 5
+RUNE_DECOMPOSE_CFG_SILVER_FIELD.cpp_type = 1
+
+RUNE_DECOMPOSE_CFG_GOLD_FIELD.name = "gold"
+RUNE_DECOMPOSE_CFG_GOLD_FIELD.full_name = ".ftcfg.rune_decompose_cfg.gold"
+RUNE_DECOMPOSE_CFG_GOLD_FIELD.number = 3
+RUNE_DECOMPOSE_CFG_GOLD_FIELD.index = 2
+RUNE_DECOMPOSE_CFG_GOLD_FIELD.label = 3
+RUNE_DECOMPOSE_CFG_GOLD_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_GOLD_FIELD.default_value = {}
+RUNE_DECOMPOSE_CFG_GOLD_FIELD.type = 5
+RUNE_DECOMPOSE_CFG_GOLD_FIELD.cpp_type = 1
+
+RUNE_DECOMPOSE_CFG_ITEM_ID1_FIELD.name = "item_id1"
+RUNE_DECOMPOSE_CFG_ITEM_ID1_FIELD.full_name = ".ftcfg.rune_decompose_cfg.item_id1"
+RUNE_DECOMPOSE_CFG_ITEM_ID1_FIELD.number = 4
+RUNE_DECOMPOSE_CFG_ITEM_ID1_FIELD.index = 3
+RUNE_DECOMPOSE_CFG_ITEM_ID1_FIELD.label = 2
+RUNE_DECOMPOSE_CFG_ITEM_ID1_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_ITEM_ID1_FIELD.default_value = 0
+RUNE_DECOMPOSE_CFG_ITEM_ID1_FIELD.type = 13
+RUNE_DECOMPOSE_CFG_ITEM_ID1_FIELD.cpp_type = 3
+
+RUNE_DECOMPOSE_CFG_ITEM_RATE1_FIELD.name = "item_rate1"
+RUNE_DECOMPOSE_CFG_ITEM_RATE1_FIELD.full_name = ".ftcfg.rune_decompose_cfg.item_rate1"
+RUNE_DECOMPOSE_CFG_ITEM_RATE1_FIELD.number = 5
+RUNE_DECOMPOSE_CFG_ITEM_RATE1_FIELD.index = 4
+RUNE_DECOMPOSE_CFG_ITEM_RATE1_FIELD.label = 2
+RUNE_DECOMPOSE_CFG_ITEM_RATE1_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_ITEM_RATE1_FIELD.default_value = 0
+RUNE_DECOMPOSE_CFG_ITEM_RATE1_FIELD.type = 13
+RUNE_DECOMPOSE_CFG_ITEM_RATE1_FIELD.cpp_type = 3
+
+RUNE_DECOMPOSE_CFG_ITEM_COUNT1_FIELD.name = "item_count1"
+RUNE_DECOMPOSE_CFG_ITEM_COUNT1_FIELD.full_name = ".ftcfg.rune_decompose_cfg.item_count1"
+RUNE_DECOMPOSE_CFG_ITEM_COUNT1_FIELD.number = 6
+RUNE_DECOMPOSE_CFG_ITEM_COUNT1_FIELD.index = 5
+RUNE_DECOMPOSE_CFG_ITEM_COUNT1_FIELD.label = 2
+RUNE_DECOMPOSE_CFG_ITEM_COUNT1_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_ITEM_COUNT1_FIELD.default_value = 0
+RUNE_DECOMPOSE_CFG_ITEM_COUNT1_FIELD.type = 13
+RUNE_DECOMPOSE_CFG_ITEM_COUNT1_FIELD.cpp_type = 3
+
+RUNE_DECOMPOSE_CFG_ITEM_ID2_FIELD.name = "item_id2"
+RUNE_DECOMPOSE_CFG_ITEM_ID2_FIELD.full_name = ".ftcfg.rune_decompose_cfg.item_id2"
+RUNE_DECOMPOSE_CFG_ITEM_ID2_FIELD.number = 7
+RUNE_DECOMPOSE_CFG_ITEM_ID2_FIELD.index = 6
+RUNE_DECOMPOSE_CFG_ITEM_ID2_FIELD.label = 2
+RUNE_DECOMPOSE_CFG_ITEM_ID2_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_ITEM_ID2_FIELD.default_value = 0
+RUNE_DECOMPOSE_CFG_ITEM_ID2_FIELD.type = 13
+RUNE_DECOMPOSE_CFG_ITEM_ID2_FIELD.cpp_type = 3
+
+RUNE_DECOMPOSE_CFG_ITEM_RATE2_FIELD.name = "item_rate2"
+RUNE_DECOMPOSE_CFG_ITEM_RATE2_FIELD.full_name = ".ftcfg.rune_decompose_cfg.item_rate2"
+RUNE_DECOMPOSE_CFG_ITEM_RATE2_FIELD.number = 8
+RUNE_DECOMPOSE_CFG_ITEM_RATE2_FIELD.index = 7
+RUNE_DECOMPOSE_CFG_ITEM_RATE2_FIELD.label = 2
+RUNE_DECOMPOSE_CFG_ITEM_RATE2_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_ITEM_RATE2_FIELD.default_value = 0
+RUNE_DECOMPOSE_CFG_ITEM_RATE2_FIELD.type = 13
+RUNE_DECOMPOSE_CFG_ITEM_RATE2_FIELD.cpp_type = 3
+
+RUNE_DECOMPOSE_CFG_ITEM_COUNT2_FIELD.name = "item_count2"
+RUNE_DECOMPOSE_CFG_ITEM_COUNT2_FIELD.full_name = ".ftcfg.rune_decompose_cfg.item_count2"
+RUNE_DECOMPOSE_CFG_ITEM_COUNT2_FIELD.number = 9
+RUNE_DECOMPOSE_CFG_ITEM_COUNT2_FIELD.index = 8
+RUNE_DECOMPOSE_CFG_ITEM_COUNT2_FIELD.label = 2
+RUNE_DECOMPOSE_CFG_ITEM_COUNT2_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_ITEM_COUNT2_FIELD.default_value = 0
+RUNE_DECOMPOSE_CFG_ITEM_COUNT2_FIELD.type = 13
+RUNE_DECOMPOSE_CFG_ITEM_COUNT2_FIELD.cpp_type = 3
+
+RUNE_DECOMPOSE_CFG_ITEM_ID3_FIELD.name = "item_id3"
+RUNE_DECOMPOSE_CFG_ITEM_ID3_FIELD.full_name = ".ftcfg.rune_decompose_cfg.item_id3"
+RUNE_DECOMPOSE_CFG_ITEM_ID3_FIELD.number = 10
+RUNE_DECOMPOSE_CFG_ITEM_ID3_FIELD.index = 9
+RUNE_DECOMPOSE_CFG_ITEM_ID3_FIELD.label = 2
+RUNE_DECOMPOSE_CFG_ITEM_ID3_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_ITEM_ID3_FIELD.default_value = 0
+RUNE_DECOMPOSE_CFG_ITEM_ID3_FIELD.type = 13
+RUNE_DECOMPOSE_CFG_ITEM_ID3_FIELD.cpp_type = 3
+
+RUNE_DECOMPOSE_CFG_ITEM_RATE3_FIELD.name = "item_rate3"
+RUNE_DECOMPOSE_CFG_ITEM_RATE3_FIELD.full_name = ".ftcfg.rune_decompose_cfg.item_rate3"
+RUNE_DECOMPOSE_CFG_ITEM_RATE3_FIELD.number = 11
+RUNE_DECOMPOSE_CFG_ITEM_RATE3_FIELD.index = 10
+RUNE_DECOMPOSE_CFG_ITEM_RATE3_FIELD.label = 2
+RUNE_DECOMPOSE_CFG_ITEM_RATE3_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_ITEM_RATE3_FIELD.default_value = 0
+RUNE_DECOMPOSE_CFG_ITEM_RATE3_FIELD.type = 13
+RUNE_DECOMPOSE_CFG_ITEM_RATE3_FIELD.cpp_type = 3
+
+RUNE_DECOMPOSE_CFG_ITEM_COUNT3_FIELD.name = "item_count3"
+RUNE_DECOMPOSE_CFG_ITEM_COUNT3_FIELD.full_name = ".ftcfg.rune_decompose_cfg.item_count3"
+RUNE_DECOMPOSE_CFG_ITEM_COUNT3_FIELD.number = 12
+RUNE_DECOMPOSE_CFG_ITEM_COUNT3_FIELD.index = 11
+RUNE_DECOMPOSE_CFG_ITEM_COUNT3_FIELD.label = 2
+RUNE_DECOMPOSE_CFG_ITEM_COUNT3_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFG_ITEM_COUNT3_FIELD.default_value = 0
+RUNE_DECOMPOSE_CFG_ITEM_COUNT3_FIELD.type = 13
+RUNE_DECOMPOSE_CFG_ITEM_COUNT3_FIELD.cpp_type = 3
+
+RUNE_DECOMPOSE_CFG.name = "rune_decompose_cfg"
+RUNE_DECOMPOSE_CFG.full_name = ".ftcfg.rune_decompose_cfg"
+RUNE_DECOMPOSE_CFG.nested_types = {}
+RUNE_DECOMPOSE_CFG.enum_types = {}
+RUNE_DECOMPOSE_CFG.fields = {RUNE_DECOMPOSE_CFG_ID_FIELD, RUNE_DECOMPOSE_CFG_SILVER_FIELD, RUNE_DECOMPOSE_CFG_GOLD_FIELD, RUNE_DECOMPOSE_CFG_ITEM_ID1_FIELD, RUNE_DECOMPOSE_CFG_ITEM_RATE1_FIELD, RUNE_DECOMPOSE_CFG_ITEM_COUNT1_FIELD, RUNE_DECOMPOSE_CFG_ITEM_ID2_FIELD, RUNE_DECOMPOSE_CFG_ITEM_RATE2_FIELD, RUNE_DECOMPOSE_CFG_ITEM_COUNT2_FIELD, RUNE_DECOMPOSE_CFG_ITEM_ID3_FIELD, RUNE_DECOMPOSE_CFG_ITEM_RATE3_FIELD, RUNE_DECOMPOSE_CFG_ITEM_COUNT3_FIELD}
+RUNE_DECOMPOSE_CFG.is_extendable = false
+RUNE_DECOMPOSE_CFG.extensions = {}
+RUNE_DECOMPOSE_CFGS_ITEMS_FIELD.name = "items"
+RUNE_DECOMPOSE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.rune_decompose_cfgs.items"
+RUNE_DECOMPOSE_CFGS_ITEMS_FIELD.number = 1
+RUNE_DECOMPOSE_CFGS_ITEMS_FIELD.index = 0
+RUNE_DECOMPOSE_CFGS_ITEMS_FIELD.label = 3
+RUNE_DECOMPOSE_CFGS_ITEMS_FIELD.has_default_value = false
+RUNE_DECOMPOSE_CFGS_ITEMS_FIELD.default_value = {}
+RUNE_DECOMPOSE_CFGS_ITEMS_FIELD.message_type = RUNE_DECOMPOSE_CFG
+RUNE_DECOMPOSE_CFGS_ITEMS_FIELD.type = 11
+RUNE_DECOMPOSE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RUNE_DECOMPOSE_CFGS.name = "rune_decompose_cfgs"
+RUNE_DECOMPOSE_CFGS.full_name = ".ftcfg.rune_decompose_cfgs"
+RUNE_DECOMPOSE_CFGS.nested_types = {}
+RUNE_DECOMPOSE_CFGS.enum_types = {}
+RUNE_DECOMPOSE_CFGS.fields = {RUNE_DECOMPOSE_CFGS_ITEMS_FIELD}
+RUNE_DECOMPOSE_CFGS.is_extendable = false
+RUNE_DECOMPOSE_CFGS.extensions = {}
+JEWELRY_MAKE_CFG_ID_FIELD.name = "id"
+JEWELRY_MAKE_CFG_ID_FIELD.full_name = ".ftcfg.jewelry_make_cfg.id"
+JEWELRY_MAKE_CFG_ID_FIELD.number = 1
+JEWELRY_MAKE_CFG_ID_FIELD.index = 0
+JEWELRY_MAKE_CFG_ID_FIELD.label = 2
+JEWELRY_MAKE_CFG_ID_FIELD.has_default_value = false
+JEWELRY_MAKE_CFG_ID_FIELD.default_value = 0
+JEWELRY_MAKE_CFG_ID_FIELD.type = 13
+JEWELRY_MAKE_CFG_ID_FIELD.cpp_type = 3
+
+JEWELRY_MAKE_CFG_POP_COST_FIELD.name = "pop_cost"
+JEWELRY_MAKE_CFG_POP_COST_FIELD.full_name = ".ftcfg.jewelry_make_cfg.pop_cost"
+JEWELRY_MAKE_CFG_POP_COST_FIELD.number = 2
+JEWELRY_MAKE_CFG_POP_COST_FIELD.index = 1
+JEWELRY_MAKE_CFG_POP_COST_FIELD.label = 2
+JEWELRY_MAKE_CFG_POP_COST_FIELD.has_default_value = false
+JEWELRY_MAKE_CFG_POP_COST_FIELD.default_value = 0
+JEWELRY_MAKE_CFG_POP_COST_FIELD.type = 5
+JEWELRY_MAKE_CFG_POP_COST_FIELD.cpp_type = 1
+
+JEWELRY_MAKE_CFG_MONEY_COST_FIELD.name = "money_cost"
+JEWELRY_MAKE_CFG_MONEY_COST_FIELD.full_name = ".ftcfg.jewelry_make_cfg.money_cost"
+JEWELRY_MAKE_CFG_MONEY_COST_FIELD.number = 3
+JEWELRY_MAKE_CFG_MONEY_COST_FIELD.index = 2
+JEWELRY_MAKE_CFG_MONEY_COST_FIELD.label = 2
+JEWELRY_MAKE_CFG_MONEY_COST_FIELD.has_default_value = false
+JEWELRY_MAKE_CFG_MONEY_COST_FIELD.default_value = 0
+JEWELRY_MAKE_CFG_MONEY_COST_FIELD.type = 5
+JEWELRY_MAKE_CFG_MONEY_COST_FIELD.cpp_type = 1
+
+JEWELRY_MAKE_CFG.name = "jewelry_make_cfg"
+JEWELRY_MAKE_CFG.full_name = ".ftcfg.jewelry_make_cfg"
+JEWELRY_MAKE_CFG.nested_types = {}
+JEWELRY_MAKE_CFG.enum_types = {}
+JEWELRY_MAKE_CFG.fields = {JEWELRY_MAKE_CFG_ID_FIELD, JEWELRY_MAKE_CFG_POP_COST_FIELD, JEWELRY_MAKE_CFG_MONEY_COST_FIELD}
+JEWELRY_MAKE_CFG.is_extendable = false
+JEWELRY_MAKE_CFG.extensions = {}
+JEWELRY_MAKE_CFGS_ITEMS_FIELD.name = "items"
+JEWELRY_MAKE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.jewelry_make_cfgs.items"
+JEWELRY_MAKE_CFGS_ITEMS_FIELD.number = 1
+JEWELRY_MAKE_CFGS_ITEMS_FIELD.index = 0
+JEWELRY_MAKE_CFGS_ITEMS_FIELD.label = 3
+JEWELRY_MAKE_CFGS_ITEMS_FIELD.has_default_value = false
+JEWELRY_MAKE_CFGS_ITEMS_FIELD.default_value = {}
+JEWELRY_MAKE_CFGS_ITEMS_FIELD.message_type = JEWELRY_MAKE_CFG
+JEWELRY_MAKE_CFGS_ITEMS_FIELD.type = 11
+JEWELRY_MAKE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+JEWELRY_MAKE_CFGS.name = "jewelry_make_cfgs"
+JEWELRY_MAKE_CFGS.full_name = ".ftcfg.jewelry_make_cfgs"
+JEWELRY_MAKE_CFGS.nested_types = {}
+JEWELRY_MAKE_CFGS.enum_types = {}
+JEWELRY_MAKE_CFGS.fields = {JEWELRY_MAKE_CFGS_ITEMS_FIELD}
+JEWELRY_MAKE_CFGS.is_extendable = false
+JEWELRY_MAKE_CFGS.extensions = {}
+WORLD_MAP_CFG_ID_FIELD.name = "id"
+WORLD_MAP_CFG_ID_FIELD.full_name = ".ftcfg.world_map_cfg.id"
+WORLD_MAP_CFG_ID_FIELD.number = 1
+WORLD_MAP_CFG_ID_FIELD.index = 0
+WORLD_MAP_CFG_ID_FIELD.label = 2
+WORLD_MAP_CFG_ID_FIELD.has_default_value = false
+WORLD_MAP_CFG_ID_FIELD.default_value = 0
+WORLD_MAP_CFG_ID_FIELD.type = 5
+WORLD_MAP_CFG_ID_FIELD.cpp_type = 1
+
+WORLD_MAP_CFG_SCENE_NAME_FIELD.name = "scene_name"
+WORLD_MAP_CFG_SCENE_NAME_FIELD.full_name = ".ftcfg.world_map_cfg.scene_name"
+WORLD_MAP_CFG_SCENE_NAME_FIELD.number = 2
+WORLD_MAP_CFG_SCENE_NAME_FIELD.index = 1
+WORLD_MAP_CFG_SCENE_NAME_FIELD.label = 2
+WORLD_MAP_CFG_SCENE_NAME_FIELD.has_default_value = false
+WORLD_MAP_CFG_SCENE_NAME_FIELD.default_value = 0
+WORLD_MAP_CFG_SCENE_NAME_FIELD.type = 5
+WORLD_MAP_CFG_SCENE_NAME_FIELD.cpp_type = 1
+
+WORLD_MAP_CFG_SCENE_NAMESHOW_FIELD.name = "scene_nameshow"
+WORLD_MAP_CFG_SCENE_NAMESHOW_FIELD.full_name = ".ftcfg.world_map_cfg.scene_nameshow"
+WORLD_MAP_CFG_SCENE_NAMESHOW_FIELD.number = 3
+WORLD_MAP_CFG_SCENE_NAMESHOW_FIELD.index = 2
+WORLD_MAP_CFG_SCENE_NAMESHOW_FIELD.label = 2
+WORLD_MAP_CFG_SCENE_NAMESHOW_FIELD.has_default_value = false
+WORLD_MAP_CFG_SCENE_NAMESHOW_FIELD.default_value = ""
+WORLD_MAP_CFG_SCENE_NAMESHOW_FIELD.type = 9
+WORLD_MAP_CFG_SCENE_NAMESHOW_FIELD.cpp_type = 9
+
+WORLD_MAP_CFG_OPEN_LV_FIELD.name = "open_lv"
+WORLD_MAP_CFG_OPEN_LV_FIELD.full_name = ".ftcfg.world_map_cfg.open_lv"
+WORLD_MAP_CFG_OPEN_LV_FIELD.number = 4
+WORLD_MAP_CFG_OPEN_LV_FIELD.index = 3
+WORLD_MAP_CFG_OPEN_LV_FIELD.label = 2
+WORLD_MAP_CFG_OPEN_LV_FIELD.has_default_value = false
+WORLD_MAP_CFG_OPEN_LV_FIELD.default_value = 0
+WORLD_MAP_CFG_OPEN_LV_FIELD.type = 5
+WORLD_MAP_CFG_OPEN_LV_FIELD.cpp_type = 1
+
+WORLD_MAP_CFG_OPENLV_SHOW_FIELD.name = "openlv_show"
+WORLD_MAP_CFG_OPENLV_SHOW_FIELD.full_name = ".ftcfg.world_map_cfg.openlv_show"
+WORLD_MAP_CFG_OPENLV_SHOW_FIELD.number = 5
+WORLD_MAP_CFG_OPENLV_SHOW_FIELD.index = 4
+WORLD_MAP_CFG_OPENLV_SHOW_FIELD.label = 2
+WORLD_MAP_CFG_OPENLV_SHOW_FIELD.has_default_value = false
+WORLD_MAP_CFG_OPENLV_SHOW_FIELD.default_value = 0
+WORLD_MAP_CFG_OPENLV_SHOW_FIELD.type = 5
+WORLD_MAP_CFG_OPENLV_SHOW_FIELD.cpp_type = 1
+
+WORLD_MAP_CFG_LANGUAGE_ID_FIELD.name = "language_id"
+WORLD_MAP_CFG_LANGUAGE_ID_FIELD.full_name = ".ftcfg.world_map_cfg.language_id"
+WORLD_MAP_CFG_LANGUAGE_ID_FIELD.number = 6
+WORLD_MAP_CFG_LANGUAGE_ID_FIELD.index = 5
+WORLD_MAP_CFG_LANGUAGE_ID_FIELD.label = 2
+WORLD_MAP_CFG_LANGUAGE_ID_FIELD.has_default_value = false
+WORLD_MAP_CFG_LANGUAGE_ID_FIELD.default_value = ""
+WORLD_MAP_CFG_LANGUAGE_ID_FIELD.type = 9
+WORLD_MAP_CFG_LANGUAGE_ID_FIELD.cpp_type = 9
+
+WORLD_MAP_CFG_SCENE_ID_FIELD.name = "scene_id"
+WORLD_MAP_CFG_SCENE_ID_FIELD.full_name = ".ftcfg.world_map_cfg.scene_id"
+WORLD_MAP_CFG_SCENE_ID_FIELD.number = 7
+WORLD_MAP_CFG_SCENE_ID_FIELD.index = 6
+WORLD_MAP_CFG_SCENE_ID_FIELD.label = 2
+WORLD_MAP_CFG_SCENE_ID_FIELD.has_default_value = false
+WORLD_MAP_CFG_SCENE_ID_FIELD.default_value = 0
+WORLD_MAP_CFG_SCENE_ID_FIELD.type = 5
+WORLD_MAP_CFG_SCENE_ID_FIELD.cpp_type = 1
+
+WORLD_MAP_CFG_INITIAL_WHETHER_FIELD.name = "initial_whether"
+WORLD_MAP_CFG_INITIAL_WHETHER_FIELD.full_name = ".ftcfg.world_map_cfg.initial_whether"
+WORLD_MAP_CFG_INITIAL_WHETHER_FIELD.number = 8
+WORLD_MAP_CFG_INITIAL_WHETHER_FIELD.index = 7
+WORLD_MAP_CFG_INITIAL_WHETHER_FIELD.label = 2
+WORLD_MAP_CFG_INITIAL_WHETHER_FIELD.has_default_value = false
+WORLD_MAP_CFG_INITIAL_WHETHER_FIELD.default_value = 0
+WORLD_MAP_CFG_INITIAL_WHETHER_FIELD.type = 5
+WORLD_MAP_CFG_INITIAL_WHETHER_FIELD.cpp_type = 1
+
+WORLD_MAP_CFG_SCENE_ICON_FIELD.name = "scene_icon"
+WORLD_MAP_CFG_SCENE_ICON_FIELD.full_name = ".ftcfg.world_map_cfg.scene_icon"
+WORLD_MAP_CFG_SCENE_ICON_FIELD.number = 9
+WORLD_MAP_CFG_SCENE_ICON_FIELD.index = 8
+WORLD_MAP_CFG_SCENE_ICON_FIELD.label = 2
+WORLD_MAP_CFG_SCENE_ICON_FIELD.has_default_value = false
+WORLD_MAP_CFG_SCENE_ICON_FIELD.default_value = 0
+WORLD_MAP_CFG_SCENE_ICON_FIELD.type = 5
+WORLD_MAP_CFG_SCENE_ICON_FIELD.cpp_type = 1
+
+WORLD_MAP_CFG.name = "world_map_cfg"
+WORLD_MAP_CFG.full_name = ".ftcfg.world_map_cfg"
+WORLD_MAP_CFG.nested_types = {}
+WORLD_MAP_CFG.enum_types = {}
+WORLD_MAP_CFG.fields = {WORLD_MAP_CFG_ID_FIELD, WORLD_MAP_CFG_SCENE_NAME_FIELD, WORLD_MAP_CFG_SCENE_NAMESHOW_FIELD, WORLD_MAP_CFG_OPEN_LV_FIELD, WORLD_MAP_CFG_OPENLV_SHOW_FIELD, WORLD_MAP_CFG_LANGUAGE_ID_FIELD, WORLD_MAP_CFG_SCENE_ID_FIELD, WORLD_MAP_CFG_INITIAL_WHETHER_FIELD, WORLD_MAP_CFG_SCENE_ICON_FIELD}
+WORLD_MAP_CFG.is_extendable = false
+WORLD_MAP_CFG.extensions = {}
+WORLD_MAP_CFGS_ITEMS_FIELD.name = "items"
+WORLD_MAP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.world_map_cfgs.items"
+WORLD_MAP_CFGS_ITEMS_FIELD.number = 1
+WORLD_MAP_CFGS_ITEMS_FIELD.index = 0
+WORLD_MAP_CFGS_ITEMS_FIELD.label = 3
+WORLD_MAP_CFGS_ITEMS_FIELD.has_default_value = false
+WORLD_MAP_CFGS_ITEMS_FIELD.default_value = {}
+WORLD_MAP_CFGS_ITEMS_FIELD.message_type = WORLD_MAP_CFG
+WORLD_MAP_CFGS_ITEMS_FIELD.type = 11
+WORLD_MAP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+WORLD_MAP_CFGS.name = "world_map_cfgs"
+WORLD_MAP_CFGS.full_name = ".ftcfg.world_map_cfgs"
+WORLD_MAP_CFGS.nested_types = {}
+WORLD_MAP_CFGS.enum_types = {}
+WORLD_MAP_CFGS.fields = {WORLD_MAP_CFGS_ITEMS_FIELD}
+WORLD_MAP_CFGS.is_extendable = false
+WORLD_MAP_CFGS.extensions = {}
+PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD.name = "partner_quality"
+PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD.full_name = ".ftcfg.partner_currency_cfg.partner_quality"
+PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD.number = 1
+PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD.index = 0
+PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD.label = 2
+PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD.has_default_value = false
+PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD.default_value = nil
+PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD.enum_type = config_predefine_pb.EITEMCOLOR
+PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD.type = 14
+PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD.cpp_type = 8
+
+PARTNER_CURRENCY_CFG_CURRENCY_NUM_FIELD.name = "currency_num"
+PARTNER_CURRENCY_CFG_CURRENCY_NUM_FIELD.full_name = ".ftcfg.partner_currency_cfg.currency_num"
+PARTNER_CURRENCY_CFG_CURRENCY_NUM_FIELD.number = 2
+PARTNER_CURRENCY_CFG_CURRENCY_NUM_FIELD.index = 1
+PARTNER_CURRENCY_CFG_CURRENCY_NUM_FIELD.label = 3
+PARTNER_CURRENCY_CFG_CURRENCY_NUM_FIELD.has_default_value = false
+PARTNER_CURRENCY_CFG_CURRENCY_NUM_FIELD.default_value = {}
+PARTNER_CURRENCY_CFG_CURRENCY_NUM_FIELD.type = 5
+PARTNER_CURRENCY_CFG_CURRENCY_NUM_FIELD.cpp_type = 1
+
+PARTNER_CURRENCY_CFG.name = "partner_currency_cfg"
+PARTNER_CURRENCY_CFG.full_name = ".ftcfg.partner_currency_cfg"
+PARTNER_CURRENCY_CFG.nested_types = {}
+PARTNER_CURRENCY_CFG.enum_types = {}
+PARTNER_CURRENCY_CFG.fields = {PARTNER_CURRENCY_CFG_PARTNER_QUALITY_FIELD, PARTNER_CURRENCY_CFG_CURRENCY_NUM_FIELD}
+PARTNER_CURRENCY_CFG.is_extendable = false
+PARTNER_CURRENCY_CFG.extensions = {}
+PARTNER_CURRENCY_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_CURRENCY_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_currency_cfgs.items"
+PARTNER_CURRENCY_CFGS_ITEMS_FIELD.number = 1
+PARTNER_CURRENCY_CFGS_ITEMS_FIELD.index = 0
+PARTNER_CURRENCY_CFGS_ITEMS_FIELD.label = 3
+PARTNER_CURRENCY_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_CURRENCY_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_CURRENCY_CFGS_ITEMS_FIELD.message_type = PARTNER_CURRENCY_CFG
+PARTNER_CURRENCY_CFGS_ITEMS_FIELD.type = 11
+PARTNER_CURRENCY_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_CURRENCY_CFGS.name = "partner_currency_cfgs"
+PARTNER_CURRENCY_CFGS.full_name = ".ftcfg.partner_currency_cfgs"
+PARTNER_CURRENCY_CFGS.nested_types = {}
+PARTNER_CURRENCY_CFGS.enum_types = {}
+PARTNER_CURRENCY_CFGS.fields = {PARTNER_CURRENCY_CFGS_ITEMS_FIELD}
+PARTNER_CURRENCY_CFGS.is_extendable = false
+PARTNER_CURRENCY_CFGS.extensions = {}
+PARTNER_ACTIVATION_CFG_ID_FIELD.name = "id"
+PARTNER_ACTIVATION_CFG_ID_FIELD.full_name = ".ftcfg.partner_activation_cfg.id"
+PARTNER_ACTIVATION_CFG_ID_FIELD.number = 1
+PARTNER_ACTIVATION_CFG_ID_FIELD.index = 0
+PARTNER_ACTIVATION_CFG_ID_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_ID_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_ID_FIELD.default_value = 0
+PARTNER_ACTIVATION_CFG_ID_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_ID_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_PLOTID_FIELD.name = "plotid"
+PARTNER_ACTIVATION_CFG_PLOTID_FIELD.full_name = ".ftcfg.partner_activation_cfg.plotid"
+PARTNER_ACTIVATION_CFG_PLOTID_FIELD.number = 2
+PARTNER_ACTIVATION_CFG_PLOTID_FIELD.index = 1
+PARTNER_ACTIVATION_CFG_PLOTID_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_PLOTID_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_PLOTID_FIELD.default_value = 0
+PARTNER_ACTIVATION_CFG_PLOTID_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_PLOTID_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_BRANCHPLOTID_FIELD.name = "branchplotid"
+PARTNER_ACTIVATION_CFG_BRANCHPLOTID_FIELD.full_name = ".ftcfg.partner_activation_cfg.branchplotid"
+PARTNER_ACTIVATION_CFG_BRANCHPLOTID_FIELD.number = 3
+PARTNER_ACTIVATION_CFG_BRANCHPLOTID_FIELD.index = 2
+PARTNER_ACTIVATION_CFG_BRANCHPLOTID_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_BRANCHPLOTID_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_BRANCHPLOTID_FIELD.default_value = 0
+PARTNER_ACTIVATION_CFG_BRANCHPLOTID_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_BRANCHPLOTID_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_PARTNERID_FIELD.name = "partnerid"
+PARTNER_ACTIVATION_CFG_PARTNERID_FIELD.full_name = ".ftcfg.partner_activation_cfg.partnerid"
+PARTNER_ACTIVATION_CFG_PARTNERID_FIELD.number = 4
+PARTNER_ACTIVATION_CFG_PARTNERID_FIELD.index = 3
+PARTNER_ACTIVATION_CFG_PARTNERID_FIELD.label = 3
+PARTNER_ACTIVATION_CFG_PARTNERID_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_PARTNERID_FIELD.default_value = {}
+PARTNER_ACTIVATION_CFG_PARTNERID_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_PARTNERID_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_PARTNERIMPRESSIONLEVEL_FIELD.name = "partnerimpressionlevel"
+PARTNER_ACTIVATION_CFG_PARTNERIMPRESSIONLEVEL_FIELD.full_name = ".ftcfg.partner_activation_cfg.partnerimpressionlevel"
+PARTNER_ACTIVATION_CFG_PARTNERIMPRESSIONLEVEL_FIELD.number = 5
+PARTNER_ACTIVATION_CFG_PARTNERIMPRESSIONLEVEL_FIELD.index = 4
+PARTNER_ACTIVATION_CFG_PARTNERIMPRESSIONLEVEL_FIELD.label = 3
+PARTNER_ACTIVATION_CFG_PARTNERIMPRESSIONLEVEL_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_PARTNERIMPRESSIONLEVEL_FIELD.default_value = {}
+PARTNER_ACTIVATION_CFG_PARTNERIMPRESSIONLEVEL_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_PARTNERIMPRESSIONLEVEL_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_COMBATPOWER_FIELD.name = "combatpower"
+PARTNER_ACTIVATION_CFG_COMBATPOWER_FIELD.full_name = ".ftcfg.partner_activation_cfg.combatpower"
+PARTNER_ACTIVATION_CFG_COMBATPOWER_FIELD.number = 6
+PARTNER_ACTIVATION_CFG_COMBATPOWER_FIELD.index = 5
+PARTNER_ACTIVATION_CFG_COMBATPOWER_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_COMBATPOWER_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_COMBATPOWER_FIELD.default_value = 0
+PARTNER_ACTIVATION_CFG_COMBATPOWER_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_COMBATPOWER_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_NAME_FIELD.name = "name"
+PARTNER_ACTIVATION_CFG_NAME_FIELD.full_name = ".ftcfg.partner_activation_cfg.name"
+PARTNER_ACTIVATION_CFG_NAME_FIELD.number = 7
+PARTNER_ACTIVATION_CFG_NAME_FIELD.index = 6
+PARTNER_ACTIVATION_CFG_NAME_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_NAME_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_NAME_FIELD.default_value = ""
+PARTNER_ACTIVATION_CFG_NAME_FIELD.type = 9
+PARTNER_ACTIVATION_CFG_NAME_FIELD.cpp_type = 9
+
+PARTNER_ACTIVATION_CFG_ICON_FIELD.name = "icon"
+PARTNER_ACTIVATION_CFG_ICON_FIELD.full_name = ".ftcfg.partner_activation_cfg.icon"
+PARTNER_ACTIVATION_CFG_ICON_FIELD.number = 8
+PARTNER_ACTIVATION_CFG_ICON_FIELD.index = 7
+PARTNER_ACTIVATION_CFG_ICON_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_ICON_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_ICON_FIELD.default_value = 0
+PARTNER_ACTIVATION_CFG_ICON_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_ICON_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_DESC_FIELD.name = "desc"
+PARTNER_ACTIVATION_CFG_DESC_FIELD.full_name = ".ftcfg.partner_activation_cfg.desc"
+PARTNER_ACTIVATION_CFG_DESC_FIELD.number = 9
+PARTNER_ACTIVATION_CFG_DESC_FIELD.index = 8
+PARTNER_ACTIVATION_CFG_DESC_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_DESC_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_DESC_FIELD.default_value = ""
+PARTNER_ACTIVATION_CFG_DESC_FIELD.type = 9
+PARTNER_ACTIVATION_CFG_DESC_FIELD.cpp_type = 9
+
+PARTNER_ACTIVATION_CFG_MOODIDS_FIELD.name = "moodids"
+PARTNER_ACTIVATION_CFG_MOODIDS_FIELD.full_name = ".ftcfg.partner_activation_cfg.moodids"
+PARTNER_ACTIVATION_CFG_MOODIDS_FIELD.number = 10
+PARTNER_ACTIVATION_CFG_MOODIDS_FIELD.index = 9
+PARTNER_ACTIVATION_CFG_MOODIDS_FIELD.label = 3
+PARTNER_ACTIVATION_CFG_MOODIDS_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_MOODIDS_FIELD.default_value = {}
+PARTNER_ACTIVATION_CFG_MOODIDS_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_MOODIDS_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_PROPORTIONS_FIELD.name = "proportions"
+PARTNER_ACTIVATION_CFG_PROPORTIONS_FIELD.full_name = ".ftcfg.partner_activation_cfg.proportions"
+PARTNER_ACTIVATION_CFG_PROPORTIONS_FIELD.number = 11
+PARTNER_ACTIVATION_CFG_PROPORTIONS_FIELD.index = 10
+PARTNER_ACTIVATION_CFG_PROPORTIONS_FIELD.label = 3
+PARTNER_ACTIVATION_CFG_PROPORTIONS_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_PROPORTIONS_FIELD.default_value = {}
+PARTNER_ACTIVATION_CFG_PROPORTIONS_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_PROPORTIONS_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_MAXIMPRESSIONLEVEL_FIELD.name = "maximpressionlevel"
+PARTNER_ACTIVATION_CFG_MAXIMPRESSIONLEVEL_FIELD.full_name = ".ftcfg.partner_activation_cfg.maximpressionlevel"
+PARTNER_ACTIVATION_CFG_MAXIMPRESSIONLEVEL_FIELD.number = 12
+PARTNER_ACTIVATION_CFG_MAXIMPRESSIONLEVEL_FIELD.index = 11
+PARTNER_ACTIVATION_CFG_MAXIMPRESSIONLEVEL_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_MAXIMPRESSIONLEVEL_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_MAXIMPRESSIONLEVEL_FIELD.default_value = 0
+PARTNER_ACTIVATION_CFG_MAXIMPRESSIONLEVEL_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_MAXIMPRESSIONLEVEL_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_GITS_FIELD.name = "gits"
+PARTNER_ACTIVATION_CFG_GITS_FIELD.full_name = ".ftcfg.partner_activation_cfg.gits"
+PARTNER_ACTIVATION_CFG_GITS_FIELD.number = 13
+PARTNER_ACTIVATION_CFG_GITS_FIELD.index = 12
+PARTNER_ACTIVATION_CFG_GITS_FIELD.label = 3
+PARTNER_ACTIVATION_CFG_GITS_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_GITS_FIELD.default_value = {}
+PARTNER_ACTIVATION_CFG_GITS_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_GITS_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_PRESENTATION1_FIELD.name = "presentation1"
+PARTNER_ACTIVATION_CFG_PRESENTATION1_FIELD.full_name = ".ftcfg.partner_activation_cfg.presentation1"
+PARTNER_ACTIVATION_CFG_PRESENTATION1_FIELD.number = 14
+PARTNER_ACTIVATION_CFG_PRESENTATION1_FIELD.index = 13
+PARTNER_ACTIVATION_CFG_PRESENTATION1_FIELD.label = 3
+PARTNER_ACTIVATION_CFG_PRESENTATION1_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_PRESENTATION1_FIELD.default_value = {}
+PARTNER_ACTIVATION_CFG_PRESENTATION1_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_PRESENTATION1_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_PRESENTATION2_FIELD.name = "presentation2"
+PARTNER_ACTIVATION_CFG_PRESENTATION2_FIELD.full_name = ".ftcfg.partner_activation_cfg.presentation2"
+PARTNER_ACTIVATION_CFG_PRESENTATION2_FIELD.number = 15
+PARTNER_ACTIVATION_CFG_PRESENTATION2_FIELD.index = 14
+PARTNER_ACTIVATION_CFG_PRESENTATION2_FIELD.label = 3
+PARTNER_ACTIVATION_CFG_PRESENTATION2_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_PRESENTATION2_FIELD.default_value = {}
+PARTNER_ACTIVATION_CFG_PRESENTATION2_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_PRESENTATION2_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_PRESENTATION3_FIELD.name = "presentation3"
+PARTNER_ACTIVATION_CFG_PRESENTATION3_FIELD.full_name = ".ftcfg.partner_activation_cfg.presentation3"
+PARTNER_ACTIVATION_CFG_PRESENTATION3_FIELD.number = 16
+PARTNER_ACTIVATION_CFG_PRESENTATION3_FIELD.index = 15
+PARTNER_ACTIVATION_CFG_PRESENTATION3_FIELD.label = 3
+PARTNER_ACTIVATION_CFG_PRESENTATION3_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_PRESENTATION3_FIELD.default_value = {}
+PARTNER_ACTIVATION_CFG_PRESENTATION3_FIELD.type = 5
+PARTNER_ACTIVATION_CFG_PRESENTATION3_FIELD.cpp_type = 1
+
+PARTNER_ACTIVATION_CFG_MOVE_HEAD_FIELD.name = "move_head"
+PARTNER_ACTIVATION_CFG_MOVE_HEAD_FIELD.full_name = ".ftcfg.partner_activation_cfg.move_head"
+PARTNER_ACTIVATION_CFG_MOVE_HEAD_FIELD.number = 17
+PARTNER_ACTIVATION_CFG_MOVE_HEAD_FIELD.index = 16
+PARTNER_ACTIVATION_CFG_MOVE_HEAD_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_MOVE_HEAD_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_MOVE_HEAD_FIELD.default_value = ""
+PARTNER_ACTIVATION_CFG_MOVE_HEAD_FIELD.type = 9
+PARTNER_ACTIVATION_CFG_MOVE_HEAD_FIELD.cpp_type = 9
+
+PARTNER_ACTIVATION_CFG_HEAD_TIME_FIELD.name = "head_time"
+PARTNER_ACTIVATION_CFG_HEAD_TIME_FIELD.full_name = ".ftcfg.partner_activation_cfg.head_time"
+PARTNER_ACTIVATION_CFG_HEAD_TIME_FIELD.number = 18
+PARTNER_ACTIVATION_CFG_HEAD_TIME_FIELD.index = 17
+PARTNER_ACTIVATION_CFG_HEAD_TIME_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_HEAD_TIME_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_HEAD_TIME_FIELD.default_value = 0.0
+PARTNER_ACTIVATION_CFG_HEAD_TIME_FIELD.type = 2
+PARTNER_ACTIVATION_CFG_HEAD_TIME_FIELD.cpp_type = 6
+
+PARTNER_ACTIVATION_CFG_MOVE_BODY_FIELD.name = "move_body"
+PARTNER_ACTIVATION_CFG_MOVE_BODY_FIELD.full_name = ".ftcfg.partner_activation_cfg.move_body"
+PARTNER_ACTIVATION_CFG_MOVE_BODY_FIELD.number = 19
+PARTNER_ACTIVATION_CFG_MOVE_BODY_FIELD.index = 18
+PARTNER_ACTIVATION_CFG_MOVE_BODY_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_MOVE_BODY_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_MOVE_BODY_FIELD.default_value = ""
+PARTNER_ACTIVATION_CFG_MOVE_BODY_FIELD.type = 9
+PARTNER_ACTIVATION_CFG_MOVE_BODY_FIELD.cpp_type = 9
+
+PARTNER_ACTIVATION_CFG_BODY_TIME_FIELD.name = "body_time"
+PARTNER_ACTIVATION_CFG_BODY_TIME_FIELD.full_name = ".ftcfg.partner_activation_cfg.body_time"
+PARTNER_ACTIVATION_CFG_BODY_TIME_FIELD.number = 20
+PARTNER_ACTIVATION_CFG_BODY_TIME_FIELD.index = 19
+PARTNER_ACTIVATION_CFG_BODY_TIME_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_BODY_TIME_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_BODY_TIME_FIELD.default_value = 0.0
+PARTNER_ACTIVATION_CFG_BODY_TIME_FIELD.type = 2
+PARTNER_ACTIVATION_CFG_BODY_TIME_FIELD.cpp_type = 6
+
+PARTNER_ACTIVATION_CFG_MOVE_LEG_FIELD.name = "move_leg"
+PARTNER_ACTIVATION_CFG_MOVE_LEG_FIELD.full_name = ".ftcfg.partner_activation_cfg.move_leg"
+PARTNER_ACTIVATION_CFG_MOVE_LEG_FIELD.number = 21
+PARTNER_ACTIVATION_CFG_MOVE_LEG_FIELD.index = 20
+PARTNER_ACTIVATION_CFG_MOVE_LEG_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_MOVE_LEG_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_MOVE_LEG_FIELD.default_value = ""
+PARTNER_ACTIVATION_CFG_MOVE_LEG_FIELD.type = 9
+PARTNER_ACTIVATION_CFG_MOVE_LEG_FIELD.cpp_type = 9
+
+PARTNER_ACTIVATION_CFG_LEG_TIME_FIELD.name = "leg_time"
+PARTNER_ACTIVATION_CFG_LEG_TIME_FIELD.full_name = ".ftcfg.partner_activation_cfg.leg_time"
+PARTNER_ACTIVATION_CFG_LEG_TIME_FIELD.number = 22
+PARTNER_ACTIVATION_CFG_LEG_TIME_FIELD.index = 21
+PARTNER_ACTIVATION_CFG_LEG_TIME_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_LEG_TIME_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_LEG_TIME_FIELD.default_value = 0.0
+PARTNER_ACTIVATION_CFG_LEG_TIME_FIELD.type = 2
+PARTNER_ACTIVATION_CFG_LEG_TIME_FIELD.cpp_type = 6
+
+PARTNER_ACTIVATION_CFG_MOVE_PROMOTE_FIELD.name = "move_promote"
+PARTNER_ACTIVATION_CFG_MOVE_PROMOTE_FIELD.full_name = ".ftcfg.partner_activation_cfg.move_promote"
+PARTNER_ACTIVATION_CFG_MOVE_PROMOTE_FIELD.number = 23
+PARTNER_ACTIVATION_CFG_MOVE_PROMOTE_FIELD.index = 22
+PARTNER_ACTIVATION_CFG_MOVE_PROMOTE_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_MOVE_PROMOTE_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_MOVE_PROMOTE_FIELD.default_value = ""
+PARTNER_ACTIVATION_CFG_MOVE_PROMOTE_FIELD.type = 9
+PARTNER_ACTIVATION_CFG_MOVE_PROMOTE_FIELD.cpp_type = 9
+
+PARTNER_ACTIVATION_CFG_PRONOTE_TIME_FIELD.name = "pronote_time"
+PARTNER_ACTIVATION_CFG_PRONOTE_TIME_FIELD.full_name = ".ftcfg.partner_activation_cfg.pronote_time"
+PARTNER_ACTIVATION_CFG_PRONOTE_TIME_FIELD.number = 24
+PARTNER_ACTIVATION_CFG_PRONOTE_TIME_FIELD.index = 23
+PARTNER_ACTIVATION_CFG_PRONOTE_TIME_FIELD.label = 2
+PARTNER_ACTIVATION_CFG_PRONOTE_TIME_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFG_PRONOTE_TIME_FIELD.default_value = 0.0
+PARTNER_ACTIVATION_CFG_PRONOTE_TIME_FIELD.type = 2
+PARTNER_ACTIVATION_CFG_PRONOTE_TIME_FIELD.cpp_type = 6
+
+PARTNER_ACTIVATION_CFG.name = "partner_activation_cfg"
+PARTNER_ACTIVATION_CFG.full_name = ".ftcfg.partner_activation_cfg"
+PARTNER_ACTIVATION_CFG.nested_types = {}
+PARTNER_ACTIVATION_CFG.enum_types = {}
+PARTNER_ACTIVATION_CFG.fields = {PARTNER_ACTIVATION_CFG_ID_FIELD, PARTNER_ACTIVATION_CFG_PLOTID_FIELD, PARTNER_ACTIVATION_CFG_BRANCHPLOTID_FIELD, PARTNER_ACTIVATION_CFG_PARTNERID_FIELD, PARTNER_ACTIVATION_CFG_PARTNERIMPRESSIONLEVEL_FIELD, PARTNER_ACTIVATION_CFG_COMBATPOWER_FIELD, PARTNER_ACTIVATION_CFG_NAME_FIELD, PARTNER_ACTIVATION_CFG_ICON_FIELD, PARTNER_ACTIVATION_CFG_DESC_FIELD, PARTNER_ACTIVATION_CFG_MOODIDS_FIELD, PARTNER_ACTIVATION_CFG_PROPORTIONS_FIELD, PARTNER_ACTIVATION_CFG_MAXIMPRESSIONLEVEL_FIELD, PARTNER_ACTIVATION_CFG_GITS_FIELD, PARTNER_ACTIVATION_CFG_PRESENTATION1_FIELD, PARTNER_ACTIVATION_CFG_PRESENTATION2_FIELD, PARTNER_ACTIVATION_CFG_PRESENTATION3_FIELD, PARTNER_ACTIVATION_CFG_MOVE_HEAD_FIELD, PARTNER_ACTIVATION_CFG_HEAD_TIME_FIELD, PARTNER_ACTIVATION_CFG_MOVE_BODY_FIELD, PARTNER_ACTIVATION_CFG_BODY_TIME_FIELD, PARTNER_ACTIVATION_CFG_MOVE_LEG_FIELD, PARTNER_ACTIVATION_CFG_LEG_TIME_FIELD, PARTNER_ACTIVATION_CFG_MOVE_PROMOTE_FIELD, PARTNER_ACTIVATION_CFG_PRONOTE_TIME_FIELD}
+PARTNER_ACTIVATION_CFG.is_extendable = false
+PARTNER_ACTIVATION_CFG.extensions = {}
+PARTNER_ACTIVATION_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_ACTIVATION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_activation_cfgs.items"
+PARTNER_ACTIVATION_CFGS_ITEMS_FIELD.number = 1
+PARTNER_ACTIVATION_CFGS_ITEMS_FIELD.index = 0
+PARTNER_ACTIVATION_CFGS_ITEMS_FIELD.label = 3
+PARTNER_ACTIVATION_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_ACTIVATION_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_ACTIVATION_CFGS_ITEMS_FIELD.message_type = PARTNER_ACTIVATION_CFG
+PARTNER_ACTIVATION_CFGS_ITEMS_FIELD.type = 11
+PARTNER_ACTIVATION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_ACTIVATION_CFGS.name = "partner_activation_cfgs"
+PARTNER_ACTIVATION_CFGS.full_name = ".ftcfg.partner_activation_cfgs"
+PARTNER_ACTIVATION_CFGS.nested_types = {}
+PARTNER_ACTIVATION_CFGS.enum_types = {}
+PARTNER_ACTIVATION_CFGS.fields = {PARTNER_ACTIVATION_CFGS_ITEMS_FIELD}
+PARTNER_ACTIVATION_CFGS.is_extendable = false
+PARTNER_ACTIVATION_CFGS.extensions = {}
+PARTNER_MOOD_CFG_ID_FIELD.name = "id"
+PARTNER_MOOD_CFG_ID_FIELD.full_name = ".ftcfg.partner_mood_cfg.id"
+PARTNER_MOOD_CFG_ID_FIELD.number = 1
+PARTNER_MOOD_CFG_ID_FIELD.index = 0
+PARTNER_MOOD_CFG_ID_FIELD.label = 2
+PARTNER_MOOD_CFG_ID_FIELD.has_default_value = false
+PARTNER_MOOD_CFG_ID_FIELD.default_value = 0
+PARTNER_MOOD_CFG_ID_FIELD.type = 5
+PARTNER_MOOD_CFG_ID_FIELD.cpp_type = 1
+
+PARTNER_MOOD_CFG_GIFTID_FIELD.name = "giftid"
+PARTNER_MOOD_CFG_GIFTID_FIELD.full_name = ".ftcfg.partner_mood_cfg.giftid"
+PARTNER_MOOD_CFG_GIFTID_FIELD.number = 2
+PARTNER_MOOD_CFG_GIFTID_FIELD.index = 1
+PARTNER_MOOD_CFG_GIFTID_FIELD.label = 3
+PARTNER_MOOD_CFG_GIFTID_FIELD.has_default_value = false
+PARTNER_MOOD_CFG_GIFTID_FIELD.default_value = {}
+PARTNER_MOOD_CFG_GIFTID_FIELD.type = 5
+PARTNER_MOOD_CFG_GIFTID_FIELD.cpp_type = 1
+
+PARTNER_MOOD_CFG_MOODTEXT_FIELD.name = "moodtext"
+PARTNER_MOOD_CFG_MOODTEXT_FIELD.full_name = ".ftcfg.partner_mood_cfg.moodtext"
+PARTNER_MOOD_CFG_MOODTEXT_FIELD.number = 3
+PARTNER_MOOD_CFG_MOODTEXT_FIELD.index = 2
+PARTNER_MOOD_CFG_MOODTEXT_FIELD.label = 2
+PARTNER_MOOD_CFG_MOODTEXT_FIELD.has_default_value = false
+PARTNER_MOOD_CFG_MOODTEXT_FIELD.default_value = ""
+PARTNER_MOOD_CFG_MOODTEXT_FIELD.type = 9
+PARTNER_MOOD_CFG_MOODTEXT_FIELD.cpp_type = 9
+
+PARTNER_MOOD_CFG_MULTIPLE_FIELD.name = "multiple"
+PARTNER_MOOD_CFG_MULTIPLE_FIELD.full_name = ".ftcfg.partner_mood_cfg.multiple"
+PARTNER_MOOD_CFG_MULTIPLE_FIELD.number = 4
+PARTNER_MOOD_CFG_MULTIPLE_FIELD.index = 3
+PARTNER_MOOD_CFG_MULTIPLE_FIELD.label = 2
+PARTNER_MOOD_CFG_MULTIPLE_FIELD.has_default_value = false
+PARTNER_MOOD_CFG_MULTIPLE_FIELD.default_value = 0
+PARTNER_MOOD_CFG_MULTIPLE_FIELD.type = 5
+PARTNER_MOOD_CFG_MULTIPLE_FIELD.cpp_type = 1
+
+PARTNER_MOOD_CFG.name = "partner_mood_cfg"
+PARTNER_MOOD_CFG.full_name = ".ftcfg.partner_mood_cfg"
+PARTNER_MOOD_CFG.nested_types = {}
+PARTNER_MOOD_CFG.enum_types = {}
+PARTNER_MOOD_CFG.fields = {PARTNER_MOOD_CFG_ID_FIELD, PARTNER_MOOD_CFG_GIFTID_FIELD, PARTNER_MOOD_CFG_MOODTEXT_FIELD, PARTNER_MOOD_CFG_MULTIPLE_FIELD}
+PARTNER_MOOD_CFG.is_extendable = false
+PARTNER_MOOD_CFG.extensions = {}
+PARTNER_MOOD_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_MOOD_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_mood_cfgs.items"
+PARTNER_MOOD_CFGS_ITEMS_FIELD.number = 1
+PARTNER_MOOD_CFGS_ITEMS_FIELD.index = 0
+PARTNER_MOOD_CFGS_ITEMS_FIELD.label = 3
+PARTNER_MOOD_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_MOOD_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_MOOD_CFGS_ITEMS_FIELD.message_type = PARTNER_MOOD_CFG
+PARTNER_MOOD_CFGS_ITEMS_FIELD.type = 11
+PARTNER_MOOD_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_MOOD_CFGS.name = "partner_mood_cfgs"
+PARTNER_MOOD_CFGS.full_name = ".ftcfg.partner_mood_cfgs"
+PARTNER_MOOD_CFGS.nested_types = {}
+PARTNER_MOOD_CFGS.enum_types = {}
+PARTNER_MOOD_CFGS.fields = {PARTNER_MOOD_CFGS_ITEMS_FIELD}
+PARTNER_MOOD_CFGS.is_extendable = false
+PARTNER_MOOD_CFGS.extensions = {}
+PARTNER_IMPRESSION_CFG_ID_FIELD.name = "id"
+PARTNER_IMPRESSION_CFG_ID_FIELD.full_name = ".ftcfg.partner_impression_cfg.id"
+PARTNER_IMPRESSION_CFG_ID_FIELD.number = 1
+PARTNER_IMPRESSION_CFG_ID_FIELD.index = 0
+PARTNER_IMPRESSION_CFG_ID_FIELD.label = 2
+PARTNER_IMPRESSION_CFG_ID_FIELD.has_default_value = false
+PARTNER_IMPRESSION_CFG_ID_FIELD.default_value = 0
+PARTNER_IMPRESSION_CFG_ID_FIELD.type = 5
+PARTNER_IMPRESSION_CFG_ID_FIELD.cpp_type = 1
+
+PARTNER_IMPRESSION_CFG_PARTNERID_FIELD.name = "partnerid"
+PARTNER_IMPRESSION_CFG_PARTNERID_FIELD.full_name = ".ftcfg.partner_impression_cfg.partnerid"
+PARTNER_IMPRESSION_CFG_PARTNERID_FIELD.number = 2
+PARTNER_IMPRESSION_CFG_PARTNERID_FIELD.index = 1
+PARTNER_IMPRESSION_CFG_PARTNERID_FIELD.label = 2
+PARTNER_IMPRESSION_CFG_PARTNERID_FIELD.has_default_value = false
+PARTNER_IMPRESSION_CFG_PARTNERID_FIELD.default_value = 0
+PARTNER_IMPRESSION_CFG_PARTNERID_FIELD.type = 5
+PARTNER_IMPRESSION_CFG_PARTNERID_FIELD.cpp_type = 1
+
+PARTNER_IMPRESSION_CFG_LEVEL_FIELD.name = "level"
+PARTNER_IMPRESSION_CFG_LEVEL_FIELD.full_name = ".ftcfg.partner_impression_cfg.level"
+PARTNER_IMPRESSION_CFG_LEVEL_FIELD.number = 3
+PARTNER_IMPRESSION_CFG_LEVEL_FIELD.index = 2
+PARTNER_IMPRESSION_CFG_LEVEL_FIELD.label = 2
+PARTNER_IMPRESSION_CFG_LEVEL_FIELD.has_default_value = false
+PARTNER_IMPRESSION_CFG_LEVEL_FIELD.default_value = 0
+PARTNER_IMPRESSION_CFG_LEVEL_FIELD.type = 5
+PARTNER_IMPRESSION_CFG_LEVEL_FIELD.cpp_type = 1
+
+PARTNER_IMPRESSION_CFG_BIOGRAPHYID_FIELD.name = "biographyid"
+PARTNER_IMPRESSION_CFG_BIOGRAPHYID_FIELD.full_name = ".ftcfg.partner_impression_cfg.biographyid"
+PARTNER_IMPRESSION_CFG_BIOGRAPHYID_FIELD.number = 4
+PARTNER_IMPRESSION_CFG_BIOGRAPHYID_FIELD.index = 3
+PARTNER_IMPRESSION_CFG_BIOGRAPHYID_FIELD.label = 2
+PARTNER_IMPRESSION_CFG_BIOGRAPHYID_FIELD.has_default_value = false
+PARTNER_IMPRESSION_CFG_BIOGRAPHYID_FIELD.default_value = 0
+PARTNER_IMPRESSION_CFG_BIOGRAPHYID_FIELD.type = 5
+PARTNER_IMPRESSION_CFG_BIOGRAPHYID_FIELD.cpp_type = 1
+
+PARTNER_IMPRESSION_CFG.name = "partner_impression_cfg"
+PARTNER_IMPRESSION_CFG.full_name = ".ftcfg.partner_impression_cfg"
+PARTNER_IMPRESSION_CFG.nested_types = {}
+PARTNER_IMPRESSION_CFG.enum_types = {}
+PARTNER_IMPRESSION_CFG.fields = {PARTNER_IMPRESSION_CFG_ID_FIELD, PARTNER_IMPRESSION_CFG_PARTNERID_FIELD, PARTNER_IMPRESSION_CFG_LEVEL_FIELD, PARTNER_IMPRESSION_CFG_BIOGRAPHYID_FIELD}
+PARTNER_IMPRESSION_CFG.is_extendable = false
+PARTNER_IMPRESSION_CFG.extensions = {}
+PARTNER_IMPRESSION_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_IMPRESSION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_impression_cfgs.items"
+PARTNER_IMPRESSION_CFGS_ITEMS_FIELD.number = 1
+PARTNER_IMPRESSION_CFGS_ITEMS_FIELD.index = 0
+PARTNER_IMPRESSION_CFGS_ITEMS_FIELD.label = 3
+PARTNER_IMPRESSION_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_IMPRESSION_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_IMPRESSION_CFGS_ITEMS_FIELD.message_type = PARTNER_IMPRESSION_CFG
+PARTNER_IMPRESSION_CFGS_ITEMS_FIELD.type = 11
+PARTNER_IMPRESSION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_IMPRESSION_CFGS.name = "partner_impression_cfgs"
+PARTNER_IMPRESSION_CFGS.full_name = ".ftcfg.partner_impression_cfgs"
+PARTNER_IMPRESSION_CFGS.nested_types = {}
+PARTNER_IMPRESSION_CFGS.enum_types = {}
+PARTNER_IMPRESSION_CFGS.fields = {PARTNER_IMPRESSION_CFGS_ITEMS_FIELD}
+PARTNER_IMPRESSION_CFGS.is_extendable = false
+PARTNER_IMPRESSION_CFGS.extensions = {}
+PARTNER_IMPRE_LEVELUP_CFG_ID_FIELD.name = "id"
+PARTNER_IMPRE_LEVELUP_CFG_ID_FIELD.full_name = ".ftcfg.partner_impre_levelup_cfg.id"
+PARTNER_IMPRE_LEVELUP_CFG_ID_FIELD.number = 1
+PARTNER_IMPRE_LEVELUP_CFG_ID_FIELD.index = 0
+PARTNER_IMPRE_LEVELUP_CFG_ID_FIELD.label = 2
+PARTNER_IMPRE_LEVELUP_CFG_ID_FIELD.has_default_value = false
+PARTNER_IMPRE_LEVELUP_CFG_ID_FIELD.default_value = 0
+PARTNER_IMPRE_LEVELUP_CFG_ID_FIELD.type = 5
+PARTNER_IMPRE_LEVELUP_CFG_ID_FIELD.cpp_type = 1
+
+PARTNER_IMPRE_LEVELUP_CFG_TYPE_FIELD.name = "type"
+PARTNER_IMPRE_LEVELUP_CFG_TYPE_FIELD.full_name = ".ftcfg.partner_impre_levelup_cfg.type"
+PARTNER_IMPRE_LEVELUP_CFG_TYPE_FIELD.number = 2
+PARTNER_IMPRE_LEVELUP_CFG_TYPE_FIELD.index = 1
+PARTNER_IMPRE_LEVELUP_CFG_TYPE_FIELD.label = 2
+PARTNER_IMPRE_LEVELUP_CFG_TYPE_FIELD.has_default_value = false
+PARTNER_IMPRE_LEVELUP_CFG_TYPE_FIELD.default_value = 0
+PARTNER_IMPRE_LEVELUP_CFG_TYPE_FIELD.type = 5
+PARTNER_IMPRE_LEVELUP_CFG_TYPE_FIELD.cpp_type = 1
+
+PARTNER_IMPRE_LEVELUP_CFG_LEVEL_FIELD.name = "level"
+PARTNER_IMPRE_LEVELUP_CFG_LEVEL_FIELD.full_name = ".ftcfg.partner_impre_levelup_cfg.level"
+PARTNER_IMPRE_LEVELUP_CFG_LEVEL_FIELD.number = 3
+PARTNER_IMPRE_LEVELUP_CFG_LEVEL_FIELD.index = 2
+PARTNER_IMPRE_LEVELUP_CFG_LEVEL_FIELD.label = 2
+PARTNER_IMPRE_LEVELUP_CFG_LEVEL_FIELD.has_default_value = false
+PARTNER_IMPRE_LEVELUP_CFG_LEVEL_FIELD.default_value = 0
+PARTNER_IMPRE_LEVELUP_CFG_LEVEL_FIELD.type = 5
+PARTNER_IMPRE_LEVELUP_CFG_LEVEL_FIELD.cpp_type = 1
+
+PARTNER_IMPRE_LEVELUP_CFG_EXP_FIELD.name = "exp"
+PARTNER_IMPRE_LEVELUP_CFG_EXP_FIELD.full_name = ".ftcfg.partner_impre_levelup_cfg.exp"
+PARTNER_IMPRE_LEVELUP_CFG_EXP_FIELD.number = 4
+PARTNER_IMPRE_LEVELUP_CFG_EXP_FIELD.index = 3
+PARTNER_IMPRE_LEVELUP_CFG_EXP_FIELD.label = 2
+PARTNER_IMPRE_LEVELUP_CFG_EXP_FIELD.has_default_value = false
+PARTNER_IMPRE_LEVELUP_CFG_EXP_FIELD.default_value = 0
+PARTNER_IMPRE_LEVELUP_CFG_EXP_FIELD.type = 5
+PARTNER_IMPRE_LEVELUP_CFG_EXP_FIELD.cpp_type = 1
+
+PARTNER_IMPRE_LEVELUP_CFG.name = "partner_impre_levelup_cfg"
+PARTNER_IMPRE_LEVELUP_CFG.full_name = ".ftcfg.partner_impre_levelup_cfg"
+PARTNER_IMPRE_LEVELUP_CFG.nested_types = {}
+PARTNER_IMPRE_LEVELUP_CFG.enum_types = {}
+PARTNER_IMPRE_LEVELUP_CFG.fields = {PARTNER_IMPRE_LEVELUP_CFG_ID_FIELD, PARTNER_IMPRE_LEVELUP_CFG_TYPE_FIELD, PARTNER_IMPRE_LEVELUP_CFG_LEVEL_FIELD, PARTNER_IMPRE_LEVELUP_CFG_EXP_FIELD}
+PARTNER_IMPRE_LEVELUP_CFG.is_extendable = false
+PARTNER_IMPRE_LEVELUP_CFG.extensions = {}
+PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_impre_levelup_cfgs.items"
+PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD.number = 1
+PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD.index = 0
+PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD.label = 3
+PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD.message_type = PARTNER_IMPRE_LEVELUP_CFG
+PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD.type = 11
+PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_IMPRE_LEVELUP_CFGS.name = "partner_impre_levelup_cfgs"
+PARTNER_IMPRE_LEVELUP_CFGS.full_name = ".ftcfg.partner_impre_levelup_cfgs"
+PARTNER_IMPRE_LEVELUP_CFGS.nested_types = {}
+PARTNER_IMPRE_LEVELUP_CFGS.enum_types = {}
+PARTNER_IMPRE_LEVELUP_CFGS.fields = {PARTNER_IMPRE_LEVELUP_CFGS_ITEMS_FIELD}
+PARTNER_IMPRE_LEVELUP_CFGS.is_extendable = false
+PARTNER_IMPRE_LEVELUP_CFGS.extensions = {}
+PARTNER_MULTIPLE_CFG_ID_FIELD.name = "id"
+PARTNER_MULTIPLE_CFG_ID_FIELD.full_name = ".ftcfg.partner_multiple_cfg.id"
+PARTNER_MULTIPLE_CFG_ID_FIELD.number = 1
+PARTNER_MULTIPLE_CFG_ID_FIELD.index = 0
+PARTNER_MULTIPLE_CFG_ID_FIELD.label = 2
+PARTNER_MULTIPLE_CFG_ID_FIELD.has_default_value = false
+PARTNER_MULTIPLE_CFG_ID_FIELD.default_value = 0
+PARTNER_MULTIPLE_CFG_ID_FIELD.type = 5
+PARTNER_MULTIPLE_CFG_ID_FIELD.cpp_type = 1
+
+PARTNER_MULTIPLE_CFG_CLICKGROWTH_FIELD.name = "clickgrowth"
+PARTNER_MULTIPLE_CFG_CLICKGROWTH_FIELD.full_name = ".ftcfg.partner_multiple_cfg.clickgrowth"
+PARTNER_MULTIPLE_CFG_CLICKGROWTH_FIELD.number = 2
+PARTNER_MULTIPLE_CFG_CLICKGROWTH_FIELD.index = 1
+PARTNER_MULTIPLE_CFG_CLICKGROWTH_FIELD.label = 2
+PARTNER_MULTIPLE_CFG_CLICKGROWTH_FIELD.has_default_value = false
+PARTNER_MULTIPLE_CFG_CLICKGROWTH_FIELD.default_value = 0
+PARTNER_MULTIPLE_CFG_CLICKGROWTH_FIELD.type = 5
+PARTNER_MULTIPLE_CFG_CLICKGROWTH_FIELD.cpp_type = 1
+
+PARTNER_MULTIPLE_CFG_PROBABILITY_FIELD.name = "probability"
+PARTNER_MULTIPLE_CFG_PROBABILITY_FIELD.full_name = ".ftcfg.partner_multiple_cfg.probability"
+PARTNER_MULTIPLE_CFG_PROBABILITY_FIELD.number = 3
+PARTNER_MULTIPLE_CFG_PROBABILITY_FIELD.index = 2
+PARTNER_MULTIPLE_CFG_PROBABILITY_FIELD.label = 3
+PARTNER_MULTIPLE_CFG_PROBABILITY_FIELD.has_default_value = false
+PARTNER_MULTIPLE_CFG_PROBABILITY_FIELD.default_value = {}
+PARTNER_MULTIPLE_CFG_PROBABILITY_FIELD.type = 5
+PARTNER_MULTIPLE_CFG_PROBABILITY_FIELD.cpp_type = 1
+
+PARTNER_MULTIPLE_CFG_MULTIPLE_FIELD.name = "multiple"
+PARTNER_MULTIPLE_CFG_MULTIPLE_FIELD.full_name = ".ftcfg.partner_multiple_cfg.multiple"
+PARTNER_MULTIPLE_CFG_MULTIPLE_FIELD.number = 4
+PARTNER_MULTIPLE_CFG_MULTIPLE_FIELD.index = 3
+PARTNER_MULTIPLE_CFG_MULTIPLE_FIELD.label = 3
+PARTNER_MULTIPLE_CFG_MULTIPLE_FIELD.has_default_value = false
+PARTNER_MULTIPLE_CFG_MULTIPLE_FIELD.default_value = {}
+PARTNER_MULTIPLE_CFG_MULTIPLE_FIELD.type = 5
+PARTNER_MULTIPLE_CFG_MULTIPLE_FIELD.cpp_type = 1
+
+PARTNER_MULTIPLE_CFG.name = "partner_multiple_cfg"
+PARTNER_MULTIPLE_CFG.full_name = ".ftcfg.partner_multiple_cfg"
+PARTNER_MULTIPLE_CFG.nested_types = {}
+PARTNER_MULTIPLE_CFG.enum_types = {}
+PARTNER_MULTIPLE_CFG.fields = {PARTNER_MULTIPLE_CFG_ID_FIELD, PARTNER_MULTIPLE_CFG_CLICKGROWTH_FIELD, PARTNER_MULTIPLE_CFG_PROBABILITY_FIELD, PARTNER_MULTIPLE_CFG_MULTIPLE_FIELD}
+PARTNER_MULTIPLE_CFG.is_extendable = false
+PARTNER_MULTIPLE_CFG.extensions = {}
+PARTNER_MULTIPLE_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_MULTIPLE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_multiple_cfgs.items"
+PARTNER_MULTIPLE_CFGS_ITEMS_FIELD.number = 1
+PARTNER_MULTIPLE_CFGS_ITEMS_FIELD.index = 0
+PARTNER_MULTIPLE_CFGS_ITEMS_FIELD.label = 3
+PARTNER_MULTIPLE_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_MULTIPLE_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_MULTIPLE_CFGS_ITEMS_FIELD.message_type = PARTNER_MULTIPLE_CFG
+PARTNER_MULTIPLE_CFGS_ITEMS_FIELD.type = 11
+PARTNER_MULTIPLE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_MULTIPLE_CFGS.name = "partner_multiple_cfgs"
+PARTNER_MULTIPLE_CFGS.full_name = ".ftcfg.partner_multiple_cfgs"
+PARTNER_MULTIPLE_CFGS.nested_types = {}
+PARTNER_MULTIPLE_CFGS.enum_types = {}
+PARTNER_MULTIPLE_CFGS.fields = {PARTNER_MULTIPLE_CFGS_ITEMS_FIELD}
+PARTNER_MULTIPLE_CFGS.is_extendable = false
+PARTNER_MULTIPLE_CFGS.extensions = {}
+PARTNER_STAR_CFG_ID_FIELD.name = "id"
+PARTNER_STAR_CFG_ID_FIELD.full_name = ".ftcfg.partner_star_cfg.id"
+PARTNER_STAR_CFG_ID_FIELD.number = 1
+PARTNER_STAR_CFG_ID_FIELD.index = 0
+PARTNER_STAR_CFG_ID_FIELD.label = 2
+PARTNER_STAR_CFG_ID_FIELD.has_default_value = false
+PARTNER_STAR_CFG_ID_FIELD.default_value = 0
+PARTNER_STAR_CFG_ID_FIELD.type = 5
+PARTNER_STAR_CFG_ID_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_PARTNER_TYPE_FIELD.name = "partner_type"
+PARTNER_STAR_CFG_PARTNER_TYPE_FIELD.full_name = ".ftcfg.partner_star_cfg.partner_type"
+PARTNER_STAR_CFG_PARTNER_TYPE_FIELD.number = 2
+PARTNER_STAR_CFG_PARTNER_TYPE_FIELD.index = 1
+PARTNER_STAR_CFG_PARTNER_TYPE_FIELD.label = 2
+PARTNER_STAR_CFG_PARTNER_TYPE_FIELD.has_default_value = false
+PARTNER_STAR_CFG_PARTNER_TYPE_FIELD.default_value = 0
+PARTNER_STAR_CFG_PARTNER_TYPE_FIELD.type = 5
+PARTNER_STAR_CFG_PARTNER_TYPE_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_STAR_FIELD.name = "star"
+PARTNER_STAR_CFG_STAR_FIELD.full_name = ".ftcfg.partner_star_cfg.star"
+PARTNER_STAR_CFG_STAR_FIELD.number = 3
+PARTNER_STAR_CFG_STAR_FIELD.index = 2
+PARTNER_STAR_CFG_STAR_FIELD.label = 2
+PARTNER_STAR_CFG_STAR_FIELD.has_default_value = false
+PARTNER_STAR_CFG_STAR_FIELD.default_value = 0
+PARTNER_STAR_CFG_STAR_FIELD.type = 5
+PARTNER_STAR_CFG_STAR_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_STUDY_GROUP_FIELD.name = "study_group"
+PARTNER_STAR_CFG_STUDY_GROUP_FIELD.full_name = ".ftcfg.partner_star_cfg.study_group"
+PARTNER_STAR_CFG_STUDY_GROUP_FIELD.number = 4
+PARTNER_STAR_CFG_STUDY_GROUP_FIELD.index = 3
+PARTNER_STAR_CFG_STUDY_GROUP_FIELD.label = 2
+PARTNER_STAR_CFG_STUDY_GROUP_FIELD.has_default_value = false
+PARTNER_STAR_CFG_STUDY_GROUP_FIELD.default_value = 0
+PARTNER_STAR_CFG_STUDY_GROUP_FIELD.type = 5
+PARTNER_STAR_CFG_STUDY_GROUP_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_STUDY_LIMIT_FIELD.name = "study_limit"
+PARTNER_STAR_CFG_STUDY_LIMIT_FIELD.full_name = ".ftcfg.partner_star_cfg.study_limit"
+PARTNER_STAR_CFG_STUDY_LIMIT_FIELD.number = 5
+PARTNER_STAR_CFG_STUDY_LIMIT_FIELD.index = 4
+PARTNER_STAR_CFG_STUDY_LIMIT_FIELD.label = 2
+PARTNER_STAR_CFG_STUDY_LIMIT_FIELD.has_default_value = false
+PARTNER_STAR_CFG_STUDY_LIMIT_FIELD.default_value = 0
+PARTNER_STAR_CFG_STUDY_LIMIT_FIELD.type = 5
+PARTNER_STAR_CFG_STUDY_LIMIT_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_STUDY_FIELD.name = "study"
+PARTNER_STAR_CFG_STUDY_FIELD.full_name = ".ftcfg.partner_star_cfg.study"
+PARTNER_STAR_CFG_STUDY_FIELD.number = 6
+PARTNER_STAR_CFG_STUDY_FIELD.index = 5
+PARTNER_STAR_CFG_STUDY_FIELD.label = 2
+PARTNER_STAR_CFG_STUDY_FIELD.has_default_value = false
+PARTNER_STAR_CFG_STUDY_FIELD.default_value = 0
+PARTNER_STAR_CFG_STUDY_FIELD.type = 5
+PARTNER_STAR_CFG_STUDY_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_STUDY_ITEM_FIELD.name = "study_item"
+PARTNER_STAR_CFG_STUDY_ITEM_FIELD.full_name = ".ftcfg.partner_star_cfg.study_item"
+PARTNER_STAR_CFG_STUDY_ITEM_FIELD.number = 7
+PARTNER_STAR_CFG_STUDY_ITEM_FIELD.index = 6
+PARTNER_STAR_CFG_STUDY_ITEM_FIELD.label = 2
+PARTNER_STAR_CFG_STUDY_ITEM_FIELD.has_default_value = false
+PARTNER_STAR_CFG_STUDY_ITEM_FIELD.default_value = 0
+PARTNER_STAR_CFG_STUDY_ITEM_FIELD.type = 5
+PARTNER_STAR_CFG_STUDY_ITEM_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_STUDY_COST_FIELD.name = "study_cost"
+PARTNER_STAR_CFG_STUDY_COST_FIELD.full_name = ".ftcfg.partner_star_cfg.study_cost"
+PARTNER_STAR_CFG_STUDY_COST_FIELD.number = 8
+PARTNER_STAR_CFG_STUDY_COST_FIELD.index = 7
+PARTNER_STAR_CFG_STUDY_COST_FIELD.label = 2
+PARTNER_STAR_CFG_STUDY_COST_FIELD.has_default_value = false
+PARTNER_STAR_CFG_STUDY_COST_FIELD.default_value = 0
+PARTNER_STAR_CFG_STUDY_COST_FIELD.type = 5
+PARTNER_STAR_CFG_STUDY_COST_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_EXCLUDE_ITEM_FIELD.name = "exclude_item"
+PARTNER_STAR_CFG_EXCLUDE_ITEM_FIELD.full_name = ".ftcfg.partner_star_cfg.exclude_item"
+PARTNER_STAR_CFG_EXCLUDE_ITEM_FIELD.number = 9
+PARTNER_STAR_CFG_EXCLUDE_ITEM_FIELD.index = 8
+PARTNER_STAR_CFG_EXCLUDE_ITEM_FIELD.label = 2
+PARTNER_STAR_CFG_EXCLUDE_ITEM_FIELD.has_default_value = false
+PARTNER_STAR_CFG_EXCLUDE_ITEM_FIELD.default_value = 0
+PARTNER_STAR_CFG_EXCLUDE_ITEM_FIELD.type = 5
+PARTNER_STAR_CFG_EXCLUDE_ITEM_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_EXCLUDE_COST_FIELD.name = "exclude_cost"
+PARTNER_STAR_CFG_EXCLUDE_COST_FIELD.full_name = ".ftcfg.partner_star_cfg.exclude_cost"
+PARTNER_STAR_CFG_EXCLUDE_COST_FIELD.number = 10
+PARTNER_STAR_CFG_EXCLUDE_COST_FIELD.index = 9
+PARTNER_STAR_CFG_EXCLUDE_COST_FIELD.label = 2
+PARTNER_STAR_CFG_EXCLUDE_COST_FIELD.has_default_value = false
+PARTNER_STAR_CFG_EXCLUDE_COST_FIELD.default_value = 0
+PARTNER_STAR_CFG_EXCLUDE_COST_FIELD.type = 5
+PARTNER_STAR_CFG_EXCLUDE_COST_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_STAR_PROP1_FIELD.name = "star_prop1"
+PARTNER_STAR_CFG_STAR_PROP1_FIELD.full_name = ".ftcfg.partner_star_cfg.star_prop1"
+PARTNER_STAR_CFG_STAR_PROP1_FIELD.number = 11
+PARTNER_STAR_CFG_STAR_PROP1_FIELD.index = 10
+PARTNER_STAR_CFG_STAR_PROP1_FIELD.label = 2
+PARTNER_STAR_CFG_STAR_PROP1_FIELD.has_default_value = false
+PARTNER_STAR_CFG_STAR_PROP1_FIELD.default_value = ""
+PARTNER_STAR_CFG_STAR_PROP1_FIELD.type = 9
+PARTNER_STAR_CFG_STAR_PROP1_FIELD.cpp_type = 9
+
+PARTNER_STAR_CFG_STAR_PROP2_FIELD.name = "star_prop2"
+PARTNER_STAR_CFG_STAR_PROP2_FIELD.full_name = ".ftcfg.partner_star_cfg.star_prop2"
+PARTNER_STAR_CFG_STAR_PROP2_FIELD.number = 12
+PARTNER_STAR_CFG_STAR_PROP2_FIELD.index = 11
+PARTNER_STAR_CFG_STAR_PROP2_FIELD.label = 2
+PARTNER_STAR_CFG_STAR_PROP2_FIELD.has_default_value = false
+PARTNER_STAR_CFG_STAR_PROP2_FIELD.default_value = ""
+PARTNER_STAR_CFG_STAR_PROP2_FIELD.type = 9
+PARTNER_STAR_CFG_STAR_PROP2_FIELD.cpp_type = 9
+
+PARTNER_STAR_CFG_STAR_PROP3_FIELD.name = "star_prop3"
+PARTNER_STAR_CFG_STAR_PROP3_FIELD.full_name = ".ftcfg.partner_star_cfg.star_prop3"
+PARTNER_STAR_CFG_STAR_PROP3_FIELD.number = 13
+PARTNER_STAR_CFG_STAR_PROP3_FIELD.index = 12
+PARTNER_STAR_CFG_STAR_PROP3_FIELD.label = 2
+PARTNER_STAR_CFG_STAR_PROP3_FIELD.has_default_value = false
+PARTNER_STAR_CFG_STAR_PROP3_FIELD.default_value = ""
+PARTNER_STAR_CFG_STAR_PROP3_FIELD.type = 9
+PARTNER_STAR_CFG_STAR_PROP3_FIELD.cpp_type = 9
+
+PARTNER_STAR_CFG_UPSTAR_ITEM_FIELD.name = "upstar_item"
+PARTNER_STAR_CFG_UPSTAR_ITEM_FIELD.full_name = ".ftcfg.partner_star_cfg.upstar_item"
+PARTNER_STAR_CFG_UPSTAR_ITEM_FIELD.number = 14
+PARTNER_STAR_CFG_UPSTAR_ITEM_FIELD.index = 13
+PARTNER_STAR_CFG_UPSTAR_ITEM_FIELD.label = 2
+PARTNER_STAR_CFG_UPSTAR_ITEM_FIELD.has_default_value = false
+PARTNER_STAR_CFG_UPSTAR_ITEM_FIELD.default_value = 0
+PARTNER_STAR_CFG_UPSTAR_ITEM_FIELD.type = 5
+PARTNER_STAR_CFG_UPSTAR_ITEM_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_UPSTAR_COST_FIELD.name = "upstar_cost"
+PARTNER_STAR_CFG_UPSTAR_COST_FIELD.full_name = ".ftcfg.partner_star_cfg.upstar_cost"
+PARTNER_STAR_CFG_UPSTAR_COST_FIELD.number = 15
+PARTNER_STAR_CFG_UPSTAR_COST_FIELD.index = 14
+PARTNER_STAR_CFG_UPSTAR_COST_FIELD.label = 2
+PARTNER_STAR_CFG_UPSTAR_COST_FIELD.has_default_value = false
+PARTNER_STAR_CFG_UPSTAR_COST_FIELD.default_value = 0
+PARTNER_STAR_CFG_UPSTAR_COST_FIELD.type = 5
+PARTNER_STAR_CFG_UPSTAR_COST_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_REBUILD_ITEM_FIELD.name = "rebuild_item"
+PARTNER_STAR_CFG_REBUILD_ITEM_FIELD.full_name = ".ftcfg.partner_star_cfg.rebuild_item"
+PARTNER_STAR_CFG_REBUILD_ITEM_FIELD.number = 16
+PARTNER_STAR_CFG_REBUILD_ITEM_FIELD.index = 15
+PARTNER_STAR_CFG_REBUILD_ITEM_FIELD.label = 2
+PARTNER_STAR_CFG_REBUILD_ITEM_FIELD.has_default_value = false
+PARTNER_STAR_CFG_REBUILD_ITEM_FIELD.default_value = 0
+PARTNER_STAR_CFG_REBUILD_ITEM_FIELD.type = 5
+PARTNER_STAR_CFG_REBUILD_ITEM_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG_REBUILD_COST_FIELD.name = "rebuild_cost"
+PARTNER_STAR_CFG_REBUILD_COST_FIELD.full_name = ".ftcfg.partner_star_cfg.rebuild_cost"
+PARTNER_STAR_CFG_REBUILD_COST_FIELD.number = 17
+PARTNER_STAR_CFG_REBUILD_COST_FIELD.index = 16
+PARTNER_STAR_CFG_REBUILD_COST_FIELD.label = 2
+PARTNER_STAR_CFG_REBUILD_COST_FIELD.has_default_value = false
+PARTNER_STAR_CFG_REBUILD_COST_FIELD.default_value = 0
+PARTNER_STAR_CFG_REBUILD_COST_FIELD.type = 5
+PARTNER_STAR_CFG_REBUILD_COST_FIELD.cpp_type = 1
+
+PARTNER_STAR_CFG.name = "partner_star_cfg"
+PARTNER_STAR_CFG.full_name = ".ftcfg.partner_star_cfg"
+PARTNER_STAR_CFG.nested_types = {}
+PARTNER_STAR_CFG.enum_types = {}
+PARTNER_STAR_CFG.fields = {PARTNER_STAR_CFG_ID_FIELD, PARTNER_STAR_CFG_PARTNER_TYPE_FIELD, PARTNER_STAR_CFG_STAR_FIELD, PARTNER_STAR_CFG_STUDY_GROUP_FIELD, PARTNER_STAR_CFG_STUDY_LIMIT_FIELD, PARTNER_STAR_CFG_STUDY_FIELD, PARTNER_STAR_CFG_STUDY_ITEM_FIELD, PARTNER_STAR_CFG_STUDY_COST_FIELD, PARTNER_STAR_CFG_EXCLUDE_ITEM_FIELD, PARTNER_STAR_CFG_EXCLUDE_COST_FIELD, PARTNER_STAR_CFG_STAR_PROP1_FIELD, PARTNER_STAR_CFG_STAR_PROP2_FIELD, PARTNER_STAR_CFG_STAR_PROP3_FIELD, PARTNER_STAR_CFG_UPSTAR_ITEM_FIELD, PARTNER_STAR_CFG_UPSTAR_COST_FIELD, PARTNER_STAR_CFG_REBUILD_ITEM_FIELD, PARTNER_STAR_CFG_REBUILD_COST_FIELD}
+PARTNER_STAR_CFG.is_extendable = false
+PARTNER_STAR_CFG.extensions = {}
+PARTNER_STAR_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_STAR_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_star_cfgs.items"
+PARTNER_STAR_CFGS_ITEMS_FIELD.number = 1
+PARTNER_STAR_CFGS_ITEMS_FIELD.index = 0
+PARTNER_STAR_CFGS_ITEMS_FIELD.label = 3
+PARTNER_STAR_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_STAR_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_STAR_CFGS_ITEMS_FIELD.message_type = PARTNER_STAR_CFG
+PARTNER_STAR_CFGS_ITEMS_FIELD.type = 11
+PARTNER_STAR_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_STAR_CFGS.name = "partner_star_cfgs"
+PARTNER_STAR_CFGS.full_name = ".ftcfg.partner_star_cfgs"
+PARTNER_STAR_CFGS.nested_types = {}
+PARTNER_STAR_CFGS.enum_types = {}
+PARTNER_STAR_CFGS.fields = {PARTNER_STAR_CFGS_ITEMS_FIELD}
+PARTNER_STAR_CFGS.is_extendable = false
+PARTNER_STAR_CFGS.extensions = {}
+PARTNER_STUDY_CFG_ID_FIELD.name = "id"
+PARTNER_STUDY_CFG_ID_FIELD.full_name = ".ftcfg.partner_study_cfg.id"
+PARTNER_STUDY_CFG_ID_FIELD.number = 1
+PARTNER_STUDY_CFG_ID_FIELD.index = 0
+PARTNER_STUDY_CFG_ID_FIELD.label = 2
+PARTNER_STUDY_CFG_ID_FIELD.has_default_value = false
+PARTNER_STUDY_CFG_ID_FIELD.default_value = 0
+PARTNER_STUDY_CFG_ID_FIELD.type = 5
+PARTNER_STUDY_CFG_ID_FIELD.cpp_type = 1
+
+PARTNER_STUDY_CFG_STUDY_GROUP_FIELD.name = "study_group"
+PARTNER_STUDY_CFG_STUDY_GROUP_FIELD.full_name = ".ftcfg.partner_study_cfg.study_group"
+PARTNER_STUDY_CFG_STUDY_GROUP_FIELD.number = 2
+PARTNER_STUDY_CFG_STUDY_GROUP_FIELD.index = 1
+PARTNER_STUDY_CFG_STUDY_GROUP_FIELD.label = 2
+PARTNER_STUDY_CFG_STUDY_GROUP_FIELD.has_default_value = false
+PARTNER_STUDY_CFG_STUDY_GROUP_FIELD.default_value = 0
+PARTNER_STUDY_CFG_STUDY_GROUP_FIELD.type = 5
+PARTNER_STUDY_CFG_STUDY_GROUP_FIELD.cpp_type = 1
+
+PARTNER_STUDY_CFG_STUDY_PROP_FIELD.name = "study_prop"
+PARTNER_STUDY_CFG_STUDY_PROP_FIELD.full_name = ".ftcfg.partner_study_cfg.study_prop"
+PARTNER_STUDY_CFG_STUDY_PROP_FIELD.number = 3
+PARTNER_STUDY_CFG_STUDY_PROP_FIELD.index = 2
+PARTNER_STUDY_CFG_STUDY_PROP_FIELD.label = 2
+PARTNER_STUDY_CFG_STUDY_PROP_FIELD.has_default_value = false
+PARTNER_STUDY_CFG_STUDY_PROP_FIELD.default_value = ""
+PARTNER_STUDY_CFG_STUDY_PROP_FIELD.type = 9
+PARTNER_STUDY_CFG_STUDY_PROP_FIELD.cpp_type = 9
+
+PARTNER_STUDY_CFG.name = "partner_study_cfg"
+PARTNER_STUDY_CFG.full_name = ".ftcfg.partner_study_cfg"
+PARTNER_STUDY_CFG.nested_types = {}
+PARTNER_STUDY_CFG.enum_types = {}
+PARTNER_STUDY_CFG.fields = {PARTNER_STUDY_CFG_ID_FIELD, PARTNER_STUDY_CFG_STUDY_GROUP_FIELD, PARTNER_STUDY_CFG_STUDY_PROP_FIELD}
+PARTNER_STUDY_CFG.is_extendable = false
+PARTNER_STUDY_CFG.extensions = {}
+PARTNER_STUDY_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_STUDY_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_study_cfgs.items"
+PARTNER_STUDY_CFGS_ITEMS_FIELD.number = 1
+PARTNER_STUDY_CFGS_ITEMS_FIELD.index = 0
+PARTNER_STUDY_CFGS_ITEMS_FIELD.label = 3
+PARTNER_STUDY_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_STUDY_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_STUDY_CFGS_ITEMS_FIELD.message_type = PARTNER_STUDY_CFG
+PARTNER_STUDY_CFGS_ITEMS_FIELD.type = 11
+PARTNER_STUDY_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_STUDY_CFGS.name = "partner_study_cfgs"
+PARTNER_STUDY_CFGS.full_name = ".ftcfg.partner_study_cfgs"
+PARTNER_STUDY_CFGS.nested_types = {}
+PARTNER_STUDY_CFGS.enum_types = {}
+PARTNER_STUDY_CFGS.fields = {PARTNER_STUDY_CFGS_ITEMS_FIELD}
+PARTNER_STUDY_CFGS.is_extendable = false
+PARTNER_STUDY_CFGS.extensions = {}
+PARTNER_ITEM_COMPOUND_CFG_ID_FIELD.name = "id"
+PARTNER_ITEM_COMPOUND_CFG_ID_FIELD.full_name = ".ftcfg.partner_item_compound_cfg.id"
+PARTNER_ITEM_COMPOUND_CFG_ID_FIELD.number = 1
+PARTNER_ITEM_COMPOUND_CFG_ID_FIELD.index = 0
+PARTNER_ITEM_COMPOUND_CFG_ID_FIELD.label = 2
+PARTNER_ITEM_COMPOUND_CFG_ID_FIELD.has_default_value = false
+PARTNER_ITEM_COMPOUND_CFG_ID_FIELD.default_value = 0
+PARTNER_ITEM_COMPOUND_CFG_ID_FIELD.type = 13
+PARTNER_ITEM_COMPOUND_CFG_ID_FIELD.cpp_type = 3
+
+PARTNER_ITEM_COMPOUND_CFG_FRAGMENT_NUM_FIELD.name = "fragment_num"
+PARTNER_ITEM_COMPOUND_CFG_FRAGMENT_NUM_FIELD.full_name = ".ftcfg.partner_item_compound_cfg.fragment_num"
+PARTNER_ITEM_COMPOUND_CFG_FRAGMENT_NUM_FIELD.number = 2
+PARTNER_ITEM_COMPOUND_CFG_FRAGMENT_NUM_FIELD.index = 1
+PARTNER_ITEM_COMPOUND_CFG_FRAGMENT_NUM_FIELD.label = 2
+PARTNER_ITEM_COMPOUND_CFG_FRAGMENT_NUM_FIELD.has_default_value = false
+PARTNER_ITEM_COMPOUND_CFG_FRAGMENT_NUM_FIELD.default_value = 0
+PARTNER_ITEM_COMPOUND_CFG_FRAGMENT_NUM_FIELD.type = 5
+PARTNER_ITEM_COMPOUND_CFG_FRAGMENT_NUM_FIELD.cpp_type = 1
+
+PARTNER_ITEM_COMPOUND_CFG_NEED_FRAGMENT_NUM_FIELD.name = "need_fragment_num"
+PARTNER_ITEM_COMPOUND_CFG_NEED_FRAGMENT_NUM_FIELD.full_name = ".ftcfg.partner_item_compound_cfg.need_fragment_num"
+PARTNER_ITEM_COMPOUND_CFG_NEED_FRAGMENT_NUM_FIELD.number = 3
+PARTNER_ITEM_COMPOUND_CFG_NEED_FRAGMENT_NUM_FIELD.index = 2
+PARTNER_ITEM_COMPOUND_CFG_NEED_FRAGMENT_NUM_FIELD.label = 2
+PARTNER_ITEM_COMPOUND_CFG_NEED_FRAGMENT_NUM_FIELD.has_default_value = false
+PARTNER_ITEM_COMPOUND_CFG_NEED_FRAGMENT_NUM_FIELD.default_value = 0
+PARTNER_ITEM_COMPOUND_CFG_NEED_FRAGMENT_NUM_FIELD.type = 5
+PARTNER_ITEM_COMPOUND_CFG_NEED_FRAGMENT_NUM_FIELD.cpp_type = 1
+
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_TYPE_FIELD.name = "currency_type"
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_TYPE_FIELD.full_name = ".ftcfg.partner_item_compound_cfg.currency_type"
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_TYPE_FIELD.number = 4
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_TYPE_FIELD.index = 3
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_TYPE_FIELD.label = 2
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_TYPE_FIELD.has_default_value = false
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_TYPE_FIELD.default_value = 0
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_TYPE_FIELD.type = 5
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_TYPE_FIELD.cpp_type = 1
+
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_NUM_FIELD.name = "currency_num"
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_NUM_FIELD.full_name = ".ftcfg.partner_item_compound_cfg.currency_num"
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_NUM_FIELD.number = 5
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_NUM_FIELD.index = 4
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_NUM_FIELD.label = 2
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_NUM_FIELD.has_default_value = false
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_NUM_FIELD.default_value = 0
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_NUM_FIELD.type = 5
+PARTNER_ITEM_COMPOUND_CFG_CURRENCY_NUM_FIELD.cpp_type = 1
+
+PARTNER_ITEM_COMPOUND_CFG.name = "partner_item_compound_cfg"
+PARTNER_ITEM_COMPOUND_CFG.full_name = ".ftcfg.partner_item_compound_cfg"
+PARTNER_ITEM_COMPOUND_CFG.nested_types = {}
+PARTNER_ITEM_COMPOUND_CFG.enum_types = {}
+PARTNER_ITEM_COMPOUND_CFG.fields = {PARTNER_ITEM_COMPOUND_CFG_ID_FIELD, PARTNER_ITEM_COMPOUND_CFG_FRAGMENT_NUM_FIELD, PARTNER_ITEM_COMPOUND_CFG_NEED_FRAGMENT_NUM_FIELD, PARTNER_ITEM_COMPOUND_CFG_CURRENCY_TYPE_FIELD, PARTNER_ITEM_COMPOUND_CFG_CURRENCY_NUM_FIELD}
+PARTNER_ITEM_COMPOUND_CFG.is_extendable = false
+PARTNER_ITEM_COMPOUND_CFG.extensions = {}
+PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_item_compound_cfgs.items"
+PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD.number = 1
+PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD.index = 0
+PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD.label = 3
+PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD.message_type = PARTNER_ITEM_COMPOUND_CFG
+PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD.type = 11
+PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_ITEM_COMPOUND_CFGS.name = "partner_item_compound_cfgs"
+PARTNER_ITEM_COMPOUND_CFGS.full_name = ".ftcfg.partner_item_compound_cfgs"
+PARTNER_ITEM_COMPOUND_CFGS.nested_types = {}
+PARTNER_ITEM_COMPOUND_CFGS.enum_types = {}
+PARTNER_ITEM_COMPOUND_CFGS.fields = {PARTNER_ITEM_COMPOUND_CFGS_ITEMS_FIELD}
+PARTNER_ITEM_COMPOUND_CFGS.is_extendable = false
+PARTNER_ITEM_COMPOUND_CFGS.extensions = {}
+PARTENR_EXPERIENCE_CFG_KEY_FIELD.name = "key"
+PARTENR_EXPERIENCE_CFG_KEY_FIELD.full_name = ".ftcfg.partenr_experience_cfg.key"
+PARTENR_EXPERIENCE_CFG_KEY_FIELD.number = 1
+PARTENR_EXPERIENCE_CFG_KEY_FIELD.index = 0
+PARTENR_EXPERIENCE_CFG_KEY_FIELD.label = 2
+PARTENR_EXPERIENCE_CFG_KEY_FIELD.has_default_value = false
+PARTENR_EXPERIENCE_CFG_KEY_FIELD.default_value = 0
+PARTENR_EXPERIENCE_CFG_KEY_FIELD.type = 13
+PARTENR_EXPERIENCE_CFG_KEY_FIELD.cpp_type = 3
+
+PARTENR_EXPERIENCE_CFG_COST_ITEM_FIELD.name = "cost_item"
+PARTENR_EXPERIENCE_CFG_COST_ITEM_FIELD.full_name = ".ftcfg.partenr_experience_cfg.cost_item"
+PARTENR_EXPERIENCE_CFG_COST_ITEM_FIELD.number = 2
+PARTENR_EXPERIENCE_CFG_COST_ITEM_FIELD.index = 1
+PARTENR_EXPERIENCE_CFG_COST_ITEM_FIELD.label = 2
+PARTENR_EXPERIENCE_CFG_COST_ITEM_FIELD.has_default_value = false
+PARTENR_EXPERIENCE_CFG_COST_ITEM_FIELD.default_value = 0
+PARTENR_EXPERIENCE_CFG_COST_ITEM_FIELD.type = 5
+PARTENR_EXPERIENCE_CFG_COST_ITEM_FIELD.cpp_type = 1
+
+PARTENR_EXPERIENCE_CFG_COST_ITEM_NUM_FIELD.name = "cost_item_num"
+PARTENR_EXPERIENCE_CFG_COST_ITEM_NUM_FIELD.full_name = ".ftcfg.partenr_experience_cfg.cost_item_num"
+PARTENR_EXPERIENCE_CFG_COST_ITEM_NUM_FIELD.number = 3
+PARTENR_EXPERIENCE_CFG_COST_ITEM_NUM_FIELD.index = 2
+PARTENR_EXPERIENCE_CFG_COST_ITEM_NUM_FIELD.label = 2
+PARTENR_EXPERIENCE_CFG_COST_ITEM_NUM_FIELD.has_default_value = false
+PARTENR_EXPERIENCE_CFG_COST_ITEM_NUM_FIELD.default_value = 0
+PARTENR_EXPERIENCE_CFG_COST_ITEM_NUM_FIELD.type = 5
+PARTENR_EXPERIENCE_CFG_COST_ITEM_NUM_FIELD.cpp_type = 1
+
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_NUM_FIELD.name = "experience_num"
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_NUM_FIELD.full_name = ".ftcfg.partenr_experience_cfg.experience_num"
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_NUM_FIELD.number = 4
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_NUM_FIELD.index = 3
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_NUM_FIELD.label = 2
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_NUM_FIELD.has_default_value = false
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_NUM_FIELD.default_value = 0
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_NUM_FIELD.type = 5
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_NUM_FIELD.cpp_type = 1
+
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_EVENT_FIELD.name = "experience_event"
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_EVENT_FIELD.full_name = ".ftcfg.partenr_experience_cfg.experience_event"
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_EVENT_FIELD.number = 5
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_EVENT_FIELD.index = 4
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_EVENT_FIELD.label = 3
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_EVENT_FIELD.has_default_value = false
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_EVENT_FIELD.default_value = {}
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_EVENT_FIELD.type = 5
+PARTENR_EXPERIENCE_CFG_EXPERIENCE_EVENT_FIELD.cpp_type = 1
+
+PARTENR_EXPERIENCE_CFG_EVENT_TYPE_FIELD.name = "event_type"
+PARTENR_EXPERIENCE_CFG_EVENT_TYPE_FIELD.full_name = ".ftcfg.partenr_experience_cfg.event_type"
+PARTENR_EXPERIENCE_CFG_EVENT_TYPE_FIELD.number = 6
+PARTENR_EXPERIENCE_CFG_EVENT_TYPE_FIELD.index = 5
+PARTENR_EXPERIENCE_CFG_EVENT_TYPE_FIELD.label = 3
+PARTENR_EXPERIENCE_CFG_EVENT_TYPE_FIELD.has_default_value = false
+PARTENR_EXPERIENCE_CFG_EVENT_TYPE_FIELD.default_value = {}
+PARTENR_EXPERIENCE_CFG_EVENT_TYPE_FIELD.type = 5
+PARTENR_EXPERIENCE_CFG_EVENT_TYPE_FIELD.cpp_type = 1
+
+PARTENR_EXPERIENCE_CFG.name = "partenr_experience_cfg"
+PARTENR_EXPERIENCE_CFG.full_name = ".ftcfg.partenr_experience_cfg"
+PARTENR_EXPERIENCE_CFG.nested_types = {}
+PARTENR_EXPERIENCE_CFG.enum_types = {}
+PARTENR_EXPERIENCE_CFG.fields = {PARTENR_EXPERIENCE_CFG_KEY_FIELD, PARTENR_EXPERIENCE_CFG_COST_ITEM_FIELD, PARTENR_EXPERIENCE_CFG_COST_ITEM_NUM_FIELD, PARTENR_EXPERIENCE_CFG_EXPERIENCE_NUM_FIELD, PARTENR_EXPERIENCE_CFG_EXPERIENCE_EVENT_FIELD, PARTENR_EXPERIENCE_CFG_EVENT_TYPE_FIELD}
+PARTENR_EXPERIENCE_CFG.is_extendable = false
+PARTENR_EXPERIENCE_CFG.extensions = {}
+PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD.name = "items"
+PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partenr_experience_cfgs.items"
+PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD.number = 1
+PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD.index = 0
+PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD.label = 3
+PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD.has_default_value = false
+PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD.default_value = {}
+PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD.message_type = PARTENR_EXPERIENCE_CFG
+PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD.type = 11
+PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTENR_EXPERIENCE_CFGS.name = "partenr_experience_cfgs"
+PARTENR_EXPERIENCE_CFGS.full_name = ".ftcfg.partenr_experience_cfgs"
+PARTENR_EXPERIENCE_CFGS.nested_types = {}
+PARTENR_EXPERIENCE_CFGS.enum_types = {}
+PARTENR_EXPERIENCE_CFGS.fields = {PARTENR_EXPERIENCE_CFGS_ITEMS_FIELD}
+PARTENR_EXPERIENCE_CFGS.is_extendable = false
+PARTENR_EXPERIENCE_CFGS.extensions = {}
+PARTNER_BASE_CFG_ID_FIELD.name = "id"
+PARTNER_BASE_CFG_ID_FIELD.full_name = ".ftcfg.partner_base_cfg.id"
+PARTNER_BASE_CFG_ID_FIELD.number = 1
+PARTNER_BASE_CFG_ID_FIELD.index = 0
+PARTNER_BASE_CFG_ID_FIELD.label = 2
+PARTNER_BASE_CFG_ID_FIELD.has_default_value = false
+PARTNER_BASE_CFG_ID_FIELD.default_value = 0
+PARTNER_BASE_CFG_ID_FIELD.type = 13
+PARTNER_BASE_CFG_ID_FIELD.cpp_type = 3
+
+PARTNER_BASE_CFG_SHOW_NAME_FIELD.name = "show_name"
+PARTNER_BASE_CFG_SHOW_NAME_FIELD.full_name = ".ftcfg.partner_base_cfg.show_name"
+PARTNER_BASE_CFG_SHOW_NAME_FIELD.number = 2
+PARTNER_BASE_CFG_SHOW_NAME_FIELD.index = 1
+PARTNER_BASE_CFG_SHOW_NAME_FIELD.label = 2
+PARTNER_BASE_CFG_SHOW_NAME_FIELD.has_default_value = false
+PARTNER_BASE_CFG_SHOW_NAME_FIELD.default_value = ""
+PARTNER_BASE_CFG_SHOW_NAME_FIELD.type = 9
+PARTNER_BASE_CFG_SHOW_NAME_FIELD.cpp_type = 9
+
+PARTNER_BASE_CFG_LOCK_FIELD.name = "lock"
+PARTNER_BASE_CFG_LOCK_FIELD.full_name = ".ftcfg.partner_base_cfg.lock"
+PARTNER_BASE_CFG_LOCK_FIELD.number = 3
+PARTNER_BASE_CFG_LOCK_FIELD.index = 2
+PARTNER_BASE_CFG_LOCK_FIELD.label = 2
+PARTNER_BASE_CFG_LOCK_FIELD.has_default_value = false
+PARTNER_BASE_CFG_LOCK_FIELD.default_value = 0
+PARTNER_BASE_CFG_LOCK_FIELD.type = 5
+PARTNER_BASE_CFG_LOCK_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_HEAD_FIELD.name = "head"
+PARTNER_BASE_CFG_HEAD_FIELD.full_name = ".ftcfg.partner_base_cfg.head"
+PARTNER_BASE_CFG_HEAD_FIELD.number = 4
+PARTNER_BASE_CFG_HEAD_FIELD.index = 3
+PARTNER_BASE_CFG_HEAD_FIELD.label = 2
+PARTNER_BASE_CFG_HEAD_FIELD.has_default_value = false
+PARTNER_BASE_CFG_HEAD_FIELD.default_value = 0
+PARTNER_BASE_CFG_HEAD_FIELD.type = 5
+PARTNER_BASE_CFG_HEAD_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_DRAW_FIELD.name = "draw"
+PARTNER_BASE_CFG_DRAW_FIELD.full_name = ".ftcfg.partner_base_cfg.draw"
+PARTNER_BASE_CFG_DRAW_FIELD.number = 5
+PARTNER_BASE_CFG_DRAW_FIELD.index = 4
+PARTNER_BASE_CFG_DRAW_FIELD.label = 2
+PARTNER_BASE_CFG_DRAW_FIELD.has_default_value = false
+PARTNER_BASE_CFG_DRAW_FIELD.default_value = 0
+PARTNER_BASE_CFG_DRAW_FIELD.type = 5
+PARTNER_BASE_CFG_DRAW_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_TYPE_FIELD.name = "type"
+PARTNER_BASE_CFG_TYPE_FIELD.full_name = ".ftcfg.partner_base_cfg.type"
+PARTNER_BASE_CFG_TYPE_FIELD.number = 6
+PARTNER_BASE_CFG_TYPE_FIELD.index = 5
+PARTNER_BASE_CFG_TYPE_FIELD.label = 2
+PARTNER_BASE_CFG_TYPE_FIELD.has_default_value = false
+PARTNER_BASE_CFG_TYPE_FIELD.default_value = 0
+PARTNER_BASE_CFG_TYPE_FIELD.type = 5
+PARTNER_BASE_CFG_TYPE_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_POKEDEX_FIELD.name = "pokedex"
+PARTNER_BASE_CFG_POKEDEX_FIELD.full_name = ".ftcfg.partner_base_cfg.pokedex"
+PARTNER_BASE_CFG_POKEDEX_FIELD.number = 7
+PARTNER_BASE_CFG_POKEDEX_FIELD.index = 6
+PARTNER_BASE_CFG_POKEDEX_FIELD.label = 2
+PARTNER_BASE_CFG_POKEDEX_FIELD.has_default_value = false
+PARTNER_BASE_CFG_POKEDEX_FIELD.default_value = 0
+PARTNER_BASE_CFG_POKEDEX_FIELD.type = 5
+PARTNER_BASE_CFG_POKEDEX_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_SKILLS_FIELD.name = "skills"
+PARTNER_BASE_CFG_SKILLS_FIELD.full_name = ".ftcfg.partner_base_cfg.skills"
+PARTNER_BASE_CFG_SKILLS_FIELD.number = 8
+PARTNER_BASE_CFG_SKILLS_FIELD.index = 7
+PARTNER_BASE_CFG_SKILLS_FIELD.label = 3
+PARTNER_BASE_CFG_SKILLS_FIELD.has_default_value = false
+PARTNER_BASE_CFG_SKILLS_FIELD.default_value = {}
+PARTNER_BASE_CFG_SKILLS_FIELD.type = 5
+PARTNER_BASE_CFG_SKILLS_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_AVATAR_FIELD.name = "avatar"
+PARTNER_BASE_CFG_AVATAR_FIELD.full_name = ".ftcfg.partner_base_cfg.avatar"
+PARTNER_BASE_CFG_AVATAR_FIELD.number = 9
+PARTNER_BASE_CFG_AVATAR_FIELD.index = 8
+PARTNER_BASE_CFG_AVATAR_FIELD.label = 2
+PARTNER_BASE_CFG_AVATAR_FIELD.has_default_value = false
+PARTNER_BASE_CFG_AVATAR_FIELD.default_value = 0
+PARTNER_BASE_CFG_AVATAR_FIELD.type = 5
+PARTNER_BASE_CFG_AVATAR_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_ACT_IDLE_FIELD.name = "act_idle"
+PARTNER_BASE_CFG_ACT_IDLE_FIELD.full_name = ".ftcfg.partner_base_cfg.act_idle"
+PARTNER_BASE_CFG_ACT_IDLE_FIELD.number = 10
+PARTNER_BASE_CFG_ACT_IDLE_FIELD.index = 9
+PARTNER_BASE_CFG_ACT_IDLE_FIELD.label = 2
+PARTNER_BASE_CFG_ACT_IDLE_FIELD.has_default_value = false
+PARTNER_BASE_CFG_ACT_IDLE_FIELD.default_value = ""
+PARTNER_BASE_CFG_ACT_IDLE_FIELD.type = 9
+PARTNER_BASE_CFG_ACT_IDLE_FIELD.cpp_type = 9
+
+PARTNER_BASE_CFG_ACT_MOVE_FIELD.name = "act_move"
+PARTNER_BASE_CFG_ACT_MOVE_FIELD.full_name = ".ftcfg.partner_base_cfg.act_move"
+PARTNER_BASE_CFG_ACT_MOVE_FIELD.number = 11
+PARTNER_BASE_CFG_ACT_MOVE_FIELD.index = 10
+PARTNER_BASE_CFG_ACT_MOVE_FIELD.label = 2
+PARTNER_BASE_CFG_ACT_MOVE_FIELD.has_default_value = false
+PARTNER_BASE_CFG_ACT_MOVE_FIELD.default_value = ""
+PARTNER_BASE_CFG_ACT_MOVE_FIELD.type = 9
+PARTNER_BASE_CFG_ACT_MOVE_FIELD.cpp_type = 9
+
+PARTNER_BASE_CFG_ACT_BORN_FIELD.name = "act_born"
+PARTNER_BASE_CFG_ACT_BORN_FIELD.full_name = ".ftcfg.partner_base_cfg.act_born"
+PARTNER_BASE_CFG_ACT_BORN_FIELD.number = 12
+PARTNER_BASE_CFG_ACT_BORN_FIELD.index = 11
+PARTNER_BASE_CFG_ACT_BORN_FIELD.label = 2
+PARTNER_BASE_CFG_ACT_BORN_FIELD.has_default_value = false
+PARTNER_BASE_CFG_ACT_BORN_FIELD.default_value = ""
+PARTNER_BASE_CFG_ACT_BORN_FIELD.type = 9
+PARTNER_BASE_CFG_ACT_BORN_FIELD.cpp_type = 9
+
+PARTNER_BASE_CFG_ACT_DEAD_FIELD.name = "act_dead"
+PARTNER_BASE_CFG_ACT_DEAD_FIELD.full_name = ".ftcfg.partner_base_cfg.act_dead"
+PARTNER_BASE_CFG_ACT_DEAD_FIELD.number = 13
+PARTNER_BASE_CFG_ACT_DEAD_FIELD.index = 12
+PARTNER_BASE_CFG_ACT_DEAD_FIELD.label = 2
+PARTNER_BASE_CFG_ACT_DEAD_FIELD.has_default_value = false
+PARTNER_BASE_CFG_ACT_DEAD_FIELD.default_value = ""
+PARTNER_BASE_CFG_ACT_DEAD_FIELD.type = 9
+PARTNER_BASE_CFG_ACT_DEAD_FIELD.cpp_type = 9
+
+PARTNER_BASE_CFG_RESURRECTION_FIELD.name = "resurrection"
+PARTNER_BASE_CFG_RESURRECTION_FIELD.full_name = ".ftcfg.partner_base_cfg.resurrection"
+PARTNER_BASE_CFG_RESURRECTION_FIELD.number = 14
+PARTNER_BASE_CFG_RESURRECTION_FIELD.index = 13
+PARTNER_BASE_CFG_RESURRECTION_FIELD.label = 2
+PARTNER_BASE_CFG_RESURRECTION_FIELD.has_default_value = false
+PARTNER_BASE_CFG_RESURRECTION_FIELD.default_value = 0
+PARTNER_BASE_CFG_RESURRECTION_FIELD.type = 5
+PARTNER_BASE_CFG_RESURRECTION_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_ADDITION_RATIO_FIELD.name = "addition_ratio"
+PARTNER_BASE_CFG_ADDITION_RATIO_FIELD.full_name = ".ftcfg.partner_base_cfg.addition_ratio"
+PARTNER_BASE_CFG_ADDITION_RATIO_FIELD.number = 15
+PARTNER_BASE_CFG_ADDITION_RATIO_FIELD.index = 14
+PARTNER_BASE_CFG_ADDITION_RATIO_FIELD.label = 2
+PARTNER_BASE_CFG_ADDITION_RATIO_FIELD.has_default_value = false
+PARTNER_BASE_CFG_ADDITION_RATIO_FIELD.default_value = 0.0
+PARTNER_BASE_CFG_ADDITION_RATIO_FIELD.type = 1
+PARTNER_BASE_CFG_ADDITION_RATIO_FIELD.cpp_type = 5
+
+PARTNER_BASE_CFG_QUALITY_FIELD.name = "quality"
+PARTNER_BASE_CFG_QUALITY_FIELD.full_name = ".ftcfg.partner_base_cfg.quality"
+PARTNER_BASE_CFG_QUALITY_FIELD.number = 16
+PARTNER_BASE_CFG_QUALITY_FIELD.index = 15
+PARTNER_BASE_CFG_QUALITY_FIELD.label = 2
+PARTNER_BASE_CFG_QUALITY_FIELD.has_default_value = false
+PARTNER_BASE_CFG_QUALITY_FIELD.default_value = 0
+PARTNER_BASE_CFG_QUALITY_FIELD.type = 5
+PARTNER_BASE_CFG_QUALITY_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_GROWTH_CAP_FIELD.name = "growth_cap"
+PARTNER_BASE_CFG_GROWTH_CAP_FIELD.full_name = ".ftcfg.partner_base_cfg.growth_cap"
+PARTNER_BASE_CFG_GROWTH_CAP_FIELD.number = 17
+PARTNER_BASE_CFG_GROWTH_CAP_FIELD.index = 16
+PARTNER_BASE_CFG_GROWTH_CAP_FIELD.label = 3
+PARTNER_BASE_CFG_GROWTH_CAP_FIELD.has_default_value = false
+PARTNER_BASE_CFG_GROWTH_CAP_FIELD.default_value = {}
+PARTNER_BASE_CFG_GROWTH_CAP_FIELD.type = 5
+PARTNER_BASE_CFG_GROWTH_CAP_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_USE_ITEM_ID_FIELD.name = "use_item_id"
+PARTNER_BASE_CFG_USE_ITEM_ID_FIELD.full_name = ".ftcfg.partner_base_cfg.use_item_id"
+PARTNER_BASE_CFG_USE_ITEM_ID_FIELD.number = 18
+PARTNER_BASE_CFG_USE_ITEM_ID_FIELD.index = 17
+PARTNER_BASE_CFG_USE_ITEM_ID_FIELD.label = 2
+PARTNER_BASE_CFG_USE_ITEM_ID_FIELD.has_default_value = false
+PARTNER_BASE_CFG_USE_ITEM_ID_FIELD.default_value = 0
+PARTNER_BASE_CFG_USE_ITEM_ID_FIELD.type = 13
+PARTNER_BASE_CFG_USE_ITEM_ID_FIELD.cpp_type = 3
+
+PARTNER_BASE_CFG_USE_ITEM_NUM_FIELD.name = "use_item_num"
+PARTNER_BASE_CFG_USE_ITEM_NUM_FIELD.full_name = ".ftcfg.partner_base_cfg.use_item_num"
+PARTNER_BASE_CFG_USE_ITEM_NUM_FIELD.number = 19
+PARTNER_BASE_CFG_USE_ITEM_NUM_FIELD.index = 18
+PARTNER_BASE_CFG_USE_ITEM_NUM_FIELD.label = 2
+PARTNER_BASE_CFG_USE_ITEM_NUM_FIELD.has_default_value = false
+PARTNER_BASE_CFG_USE_ITEM_NUM_FIELD.default_value = 0
+PARTNER_BASE_CFG_USE_ITEM_NUM_FIELD.type = 5
+PARTNER_BASE_CFG_USE_ITEM_NUM_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_CAN_USE_OMNIPOTENT_FIELD.name = "can_use_omnipotent"
+PARTNER_BASE_CFG_CAN_USE_OMNIPOTENT_FIELD.full_name = ".ftcfg.partner_base_cfg.can_use_omnipotent"
+PARTNER_BASE_CFG_CAN_USE_OMNIPOTENT_FIELD.number = 20
+PARTNER_BASE_CFG_CAN_USE_OMNIPOTENT_FIELD.index = 19
+PARTNER_BASE_CFG_CAN_USE_OMNIPOTENT_FIELD.label = 2
+PARTNER_BASE_CFG_CAN_USE_OMNIPOTENT_FIELD.has_default_value = false
+PARTNER_BASE_CFG_CAN_USE_OMNIPOTENT_FIELD.default_value = 0
+PARTNER_BASE_CFG_CAN_USE_OMNIPOTENT_FIELD.type = 5
+PARTNER_BASE_CFG_CAN_USE_OMNIPOTENT_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_END_SKILLS_FIELD.name = "end_skills"
+PARTNER_BASE_CFG_END_SKILLS_FIELD.full_name = ".ftcfg.partner_base_cfg.end_skills"
+PARTNER_BASE_CFG_END_SKILLS_FIELD.number = 21
+PARTNER_BASE_CFG_END_SKILLS_FIELD.index = 20
+PARTNER_BASE_CFG_END_SKILLS_FIELD.label = 2
+PARTNER_BASE_CFG_END_SKILLS_FIELD.has_default_value = false
+PARTNER_BASE_CFG_END_SKILLS_FIELD.default_value = 0
+PARTNER_BASE_CFG_END_SKILLS_FIELD.type = 5
+PARTNER_BASE_CFG_END_SKILLS_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_PASSIVE_SKILLS_FIELD.name = "passive_skills"
+PARTNER_BASE_CFG_PASSIVE_SKILLS_FIELD.full_name = ".ftcfg.partner_base_cfg.passive_skills"
+PARTNER_BASE_CFG_PASSIVE_SKILLS_FIELD.number = 22
+PARTNER_BASE_CFG_PASSIVE_SKILLS_FIELD.index = 21
+PARTNER_BASE_CFG_PASSIVE_SKILLS_FIELD.label = 3
+PARTNER_BASE_CFG_PASSIVE_SKILLS_FIELD.has_default_value = false
+PARTNER_BASE_CFG_PASSIVE_SKILLS_FIELD.default_value = {}
+PARTNER_BASE_CFG_PASSIVE_SKILLS_FIELD.type = 5
+PARTNER_BASE_CFG_PASSIVE_SKILLS_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_EXPERIENCE_MAX_FIELD.name = "experience_max"
+PARTNER_BASE_CFG_EXPERIENCE_MAX_FIELD.full_name = ".ftcfg.partner_base_cfg.experience_max"
+PARTNER_BASE_CFG_EXPERIENCE_MAX_FIELD.number = 23
+PARTNER_BASE_CFG_EXPERIENCE_MAX_FIELD.index = 22
+PARTNER_BASE_CFG_EXPERIENCE_MAX_FIELD.label = 2
+PARTNER_BASE_CFG_EXPERIENCE_MAX_FIELD.has_default_value = false
+PARTNER_BASE_CFG_EXPERIENCE_MAX_FIELD.default_value = 0
+PARTNER_BASE_CFG_EXPERIENCE_MAX_FIELD.type = 5
+PARTNER_BASE_CFG_EXPERIENCE_MAX_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_RESOURCES_TYPE_FIELD.name = "resources_type"
+PARTNER_BASE_CFG_RESOURCES_TYPE_FIELD.full_name = ".ftcfg.partner_base_cfg.resources_type"
+PARTNER_BASE_CFG_RESOURCES_TYPE_FIELD.number = 24
+PARTNER_BASE_CFG_RESOURCES_TYPE_FIELD.index = 23
+PARTNER_BASE_CFG_RESOURCES_TYPE_FIELD.label = 2
+PARTNER_BASE_CFG_RESOURCES_TYPE_FIELD.has_default_value = false
+PARTNER_BASE_CFG_RESOURCES_TYPE_FIELD.default_value = 0
+PARTNER_BASE_CFG_RESOURCES_TYPE_FIELD.type = 5
+PARTNER_BASE_CFG_RESOURCES_TYPE_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_RESOURCES_NUM_FIELD.name = "resources_num"
+PARTNER_BASE_CFG_RESOURCES_NUM_FIELD.full_name = ".ftcfg.partner_base_cfg.resources_num"
+PARTNER_BASE_CFG_RESOURCES_NUM_FIELD.number = 25
+PARTNER_BASE_CFG_RESOURCES_NUM_FIELD.index = 24
+PARTNER_BASE_CFG_RESOURCES_NUM_FIELD.label = 2
+PARTNER_BASE_CFG_RESOURCES_NUM_FIELD.has_default_value = false
+PARTNER_BASE_CFG_RESOURCES_NUM_FIELD.default_value = 0
+PARTNER_BASE_CFG_RESOURCES_NUM_FIELD.type = 5
+PARTNER_BASE_CFG_RESOURCES_NUM_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_RESOURCES_ID_FIELD.name = "resources_id"
+PARTNER_BASE_CFG_RESOURCES_ID_FIELD.full_name = ".ftcfg.partner_base_cfg.resources_id"
+PARTNER_BASE_CFG_RESOURCES_ID_FIELD.number = 26
+PARTNER_BASE_CFG_RESOURCES_ID_FIELD.index = 25
+PARTNER_BASE_CFG_RESOURCES_ID_FIELD.label = 2
+PARTNER_BASE_CFG_RESOURCES_ID_FIELD.has_default_value = false
+PARTNER_BASE_CFG_RESOURCES_ID_FIELD.default_value = 0
+PARTNER_BASE_CFG_RESOURCES_ID_FIELD.type = 5
+PARTNER_BASE_CFG_RESOURCES_ID_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_ITEMS_ID_FIELD.name = "items_id"
+PARTNER_BASE_CFG_ITEMS_ID_FIELD.full_name = ".ftcfg.partner_base_cfg.items_id"
+PARTNER_BASE_CFG_ITEMS_ID_FIELD.number = 27
+PARTNER_BASE_CFG_ITEMS_ID_FIELD.index = 26
+PARTNER_BASE_CFG_ITEMS_ID_FIELD.label = 3
+PARTNER_BASE_CFG_ITEMS_ID_FIELD.has_default_value = false
+PARTNER_BASE_CFG_ITEMS_ID_FIELD.default_value = {}
+PARTNER_BASE_CFG_ITEMS_ID_FIELD.type = 5
+PARTNER_BASE_CFG_ITEMS_ID_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_ITEMS_COUNT_FIELD.name = "items_count"
+PARTNER_BASE_CFG_ITEMS_COUNT_FIELD.full_name = ".ftcfg.partner_base_cfg.items_count"
+PARTNER_BASE_CFG_ITEMS_COUNT_FIELD.number = 28
+PARTNER_BASE_CFG_ITEMS_COUNT_FIELD.index = 27
+PARTNER_BASE_CFG_ITEMS_COUNT_FIELD.label = 3
+PARTNER_BASE_CFG_ITEMS_COUNT_FIELD.has_default_value = false
+PARTNER_BASE_CFG_ITEMS_COUNT_FIELD.default_value = {}
+PARTNER_BASE_CFG_ITEMS_COUNT_FIELD.type = 5
+PARTNER_BASE_CFG_ITEMS_COUNT_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_RANGE_FIELD.name = "range"
+PARTNER_BASE_CFG_RANGE_FIELD.full_name = ".ftcfg.partner_base_cfg.range"
+PARTNER_BASE_CFG_RANGE_FIELD.number = 29
+PARTNER_BASE_CFG_RANGE_FIELD.index = 28
+PARTNER_BASE_CFG_RANGE_FIELD.label = 2
+PARTNER_BASE_CFG_RANGE_FIELD.has_default_value = false
+PARTNER_BASE_CFG_RANGE_FIELD.default_value = 0
+PARTNER_BASE_CFG_RANGE_FIELD.type = 5
+PARTNER_BASE_CFG_RANGE_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_FETTERS_NUM_FIELD.name = "fetters_num"
+PARTNER_BASE_CFG_FETTERS_NUM_FIELD.full_name = ".ftcfg.partner_base_cfg.fetters_num"
+PARTNER_BASE_CFG_FETTERS_NUM_FIELD.number = 30
+PARTNER_BASE_CFG_FETTERS_NUM_FIELD.index = 29
+PARTNER_BASE_CFG_FETTERS_NUM_FIELD.label = 2
+PARTNER_BASE_CFG_FETTERS_NUM_FIELD.has_default_value = false
+PARTNER_BASE_CFG_FETTERS_NUM_FIELD.default_value = 0
+PARTNER_BASE_CFG_FETTERS_NUM_FIELD.type = 5
+PARTNER_BASE_CFG_FETTERS_NUM_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_PARTNER_ID_FIELD.name = "partner_id"
+PARTNER_BASE_CFG_PARTNER_ID_FIELD.full_name = ".ftcfg.partner_base_cfg.partner_id"
+PARTNER_BASE_CFG_PARTNER_ID_FIELD.number = 31
+PARTNER_BASE_CFG_PARTNER_ID_FIELD.index = 30
+PARTNER_BASE_CFG_PARTNER_ID_FIELD.label = 2
+PARTNER_BASE_CFG_PARTNER_ID_FIELD.has_default_value = false
+PARTNER_BASE_CFG_PARTNER_ID_FIELD.default_value = 0
+PARTNER_BASE_CFG_PARTNER_ID_FIELD.type = 5
+PARTNER_BASE_CFG_PARTNER_ID_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG_IS_RARE_FIELD.name = "is_rare"
+PARTNER_BASE_CFG_IS_RARE_FIELD.full_name = ".ftcfg.partner_base_cfg.is_rare"
+PARTNER_BASE_CFG_IS_RARE_FIELD.number = 32
+PARTNER_BASE_CFG_IS_RARE_FIELD.index = 31
+PARTNER_BASE_CFG_IS_RARE_FIELD.label = 2
+PARTNER_BASE_CFG_IS_RARE_FIELD.has_default_value = false
+PARTNER_BASE_CFG_IS_RARE_FIELD.default_value = false
+PARTNER_BASE_CFG_IS_RARE_FIELD.type = 8
+PARTNER_BASE_CFG_IS_RARE_FIELD.cpp_type = 7
+
+PARTNER_BASE_CFG_DIVINE_GROUP_FIELD.name = "divine_group"
+PARTNER_BASE_CFG_DIVINE_GROUP_FIELD.full_name = ".ftcfg.partner_base_cfg.divine_group"
+PARTNER_BASE_CFG_DIVINE_GROUP_FIELD.number = 33
+PARTNER_BASE_CFG_DIVINE_GROUP_FIELD.index = 32
+PARTNER_BASE_CFG_DIVINE_GROUP_FIELD.label = 2
+PARTNER_BASE_CFG_DIVINE_GROUP_FIELD.has_default_value = false
+PARTNER_BASE_CFG_DIVINE_GROUP_FIELD.default_value = 0
+PARTNER_BASE_CFG_DIVINE_GROUP_FIELD.type = 5
+PARTNER_BASE_CFG_DIVINE_GROUP_FIELD.cpp_type = 1
+
+PARTNER_BASE_CFG.name = "partner_base_cfg"
+PARTNER_BASE_CFG.full_name = ".ftcfg.partner_base_cfg"
+PARTNER_BASE_CFG.nested_types = {}
+PARTNER_BASE_CFG.enum_types = {}
+PARTNER_BASE_CFG.fields = {PARTNER_BASE_CFG_ID_FIELD, PARTNER_BASE_CFG_SHOW_NAME_FIELD, PARTNER_BASE_CFG_LOCK_FIELD, PARTNER_BASE_CFG_HEAD_FIELD, PARTNER_BASE_CFG_DRAW_FIELD, PARTNER_BASE_CFG_TYPE_FIELD, PARTNER_BASE_CFG_POKEDEX_FIELD, PARTNER_BASE_CFG_SKILLS_FIELD, PARTNER_BASE_CFG_AVATAR_FIELD, PARTNER_BASE_CFG_ACT_IDLE_FIELD, PARTNER_BASE_CFG_ACT_MOVE_FIELD, PARTNER_BASE_CFG_ACT_BORN_FIELD, PARTNER_BASE_CFG_ACT_DEAD_FIELD, PARTNER_BASE_CFG_RESURRECTION_FIELD, PARTNER_BASE_CFG_ADDITION_RATIO_FIELD, PARTNER_BASE_CFG_QUALITY_FIELD, PARTNER_BASE_CFG_GROWTH_CAP_FIELD, PARTNER_BASE_CFG_USE_ITEM_ID_FIELD, PARTNER_BASE_CFG_USE_ITEM_NUM_FIELD, PARTNER_BASE_CFG_CAN_USE_OMNIPOTENT_FIELD, PARTNER_BASE_CFG_END_SKILLS_FIELD, PARTNER_BASE_CFG_PASSIVE_SKILLS_FIELD, PARTNER_BASE_CFG_EXPERIENCE_MAX_FIELD, PARTNER_BASE_CFG_RESOURCES_TYPE_FIELD, PARTNER_BASE_CFG_RESOURCES_NUM_FIELD, PARTNER_BASE_CFG_RESOURCES_ID_FIELD, PARTNER_BASE_CFG_ITEMS_ID_FIELD, PARTNER_BASE_CFG_ITEMS_COUNT_FIELD, PARTNER_BASE_CFG_RANGE_FIELD, PARTNER_BASE_CFG_FETTERS_NUM_FIELD, PARTNER_BASE_CFG_PARTNER_ID_FIELD, PARTNER_BASE_CFG_IS_RARE_FIELD, PARTNER_BASE_CFG_DIVINE_GROUP_FIELD}
+PARTNER_BASE_CFG.is_extendable = false
+PARTNER_BASE_CFG.extensions = {}
+PARTNER_BASE_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_BASE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_base_cfgs.items"
+PARTNER_BASE_CFGS_ITEMS_FIELD.number = 1
+PARTNER_BASE_CFGS_ITEMS_FIELD.index = 0
+PARTNER_BASE_CFGS_ITEMS_FIELD.label = 3
+PARTNER_BASE_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_BASE_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_BASE_CFGS_ITEMS_FIELD.message_type = PARTNER_BASE_CFG
+PARTNER_BASE_CFGS_ITEMS_FIELD.type = 11
+PARTNER_BASE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_BASE_CFGS.name = "partner_base_cfgs"
+PARTNER_BASE_CFGS.full_name = ".ftcfg.partner_base_cfgs"
+PARTNER_BASE_CFGS.nested_types = {}
+PARTNER_BASE_CFGS.enum_types = {}
+PARTNER_BASE_CFGS.fields = {PARTNER_BASE_CFGS_ITEMS_FIELD}
+PARTNER_BASE_CFGS.is_extendable = false
+PARTNER_BASE_CFGS.extensions = {}
+PARTNER_ATTRIBUTE_CFG_ID_FIELD.name = "id"
+PARTNER_ATTRIBUTE_CFG_ID_FIELD.full_name = ".ftcfg.partner_attribute_cfg.id"
+PARTNER_ATTRIBUTE_CFG_ID_FIELD.number = 1
+PARTNER_ATTRIBUTE_CFG_ID_FIELD.index = 0
+PARTNER_ATTRIBUTE_CFG_ID_FIELD.label = 2
+PARTNER_ATTRIBUTE_CFG_ID_FIELD.has_default_value = false
+PARTNER_ATTRIBUTE_CFG_ID_FIELD.default_value = 0
+PARTNER_ATTRIBUTE_CFG_ID_FIELD.type = 5
+PARTNER_ATTRIBUTE_CFG_ID_FIELD.cpp_type = 1
+
+PARTNER_ATTRIBUTE_CFG_LEVELUP_EXP_FIELD.name = "levelup_exp"
+PARTNER_ATTRIBUTE_CFG_LEVELUP_EXP_FIELD.full_name = ".ftcfg.partner_attribute_cfg.levelup_exp"
+PARTNER_ATTRIBUTE_CFG_LEVELUP_EXP_FIELD.number = 2
+PARTNER_ATTRIBUTE_CFG_LEVELUP_EXP_FIELD.index = 1
+PARTNER_ATTRIBUTE_CFG_LEVELUP_EXP_FIELD.label = 2
+PARTNER_ATTRIBUTE_CFG_LEVELUP_EXP_FIELD.has_default_value = false
+PARTNER_ATTRIBUTE_CFG_LEVELUP_EXP_FIELD.default_value = 0.0
+PARTNER_ATTRIBUTE_CFG_LEVELUP_EXP_FIELD.type = 1
+PARTNER_ATTRIBUTE_CFG_LEVELUP_EXP_FIELD.cpp_type = 5
+
+PARTNER_ATTRIBUTE_CFG.name = "partner_attribute_cfg"
+PARTNER_ATTRIBUTE_CFG.full_name = ".ftcfg.partner_attribute_cfg"
+PARTNER_ATTRIBUTE_CFG.nested_types = {}
+PARTNER_ATTRIBUTE_CFG.enum_types = {}
+PARTNER_ATTRIBUTE_CFG.fields = {PARTNER_ATTRIBUTE_CFG_ID_FIELD, PARTNER_ATTRIBUTE_CFG_LEVELUP_EXP_FIELD}
+PARTNER_ATTRIBUTE_CFG.is_extendable = false
+PARTNER_ATTRIBUTE_CFG.extensions = {}
+PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_attribute_cfgs.items"
+PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD.number = 1
+PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD.index = 0
+PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD.label = 3
+PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD.message_type = PARTNER_ATTRIBUTE_CFG
+PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD.type = 11
+PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_ATTRIBUTE_CFGS.name = "partner_attribute_cfgs"
+PARTNER_ATTRIBUTE_CFGS.full_name = ".ftcfg.partner_attribute_cfgs"
+PARTNER_ATTRIBUTE_CFGS.nested_types = {}
+PARTNER_ATTRIBUTE_CFGS.enum_types = {}
+PARTNER_ATTRIBUTE_CFGS.fields = {PARTNER_ATTRIBUTE_CFGS_ITEMS_FIELD}
+PARTNER_ATTRIBUTE_CFGS.is_extendable = false
+PARTNER_ATTRIBUTE_CFGS.extensions = {}
+PARTNER_PASSIVESKILL_CFG_ID_FIELD.name = "id"
+PARTNER_PASSIVESKILL_CFG_ID_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.id"
+PARTNER_PASSIVESKILL_CFG_ID_FIELD.number = 1
+PARTNER_PASSIVESKILL_CFG_ID_FIELD.index = 0
+PARTNER_PASSIVESKILL_CFG_ID_FIELD.label = 2
+PARTNER_PASSIVESKILL_CFG_ID_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_ID_FIELD.default_value = 0
+PARTNER_PASSIVESKILL_CFG_ID_FIELD.type = 5
+PARTNER_PASSIVESKILL_CFG_ID_FIELD.cpp_type = 1
+
+PARTNER_PASSIVESKILL_CFG_NAME_FIELD.name = "name"
+PARTNER_PASSIVESKILL_CFG_NAME_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.name"
+PARTNER_PASSIVESKILL_CFG_NAME_FIELD.number = 2
+PARTNER_PASSIVESKILL_CFG_NAME_FIELD.index = 1
+PARTNER_PASSIVESKILL_CFG_NAME_FIELD.label = 2
+PARTNER_PASSIVESKILL_CFG_NAME_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_NAME_FIELD.default_value = ""
+PARTNER_PASSIVESKILL_CFG_NAME_FIELD.type = 9
+PARTNER_PASSIVESKILL_CFG_NAME_FIELD.cpp_type = 9
+
+PARTNER_PASSIVESKILL_CFG_LEVEL_FIELD.name = "level"
+PARTNER_PASSIVESKILL_CFG_LEVEL_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.level"
+PARTNER_PASSIVESKILL_CFG_LEVEL_FIELD.number = 3
+PARTNER_PASSIVESKILL_CFG_LEVEL_FIELD.index = 2
+PARTNER_PASSIVESKILL_CFG_LEVEL_FIELD.label = 2
+PARTNER_PASSIVESKILL_CFG_LEVEL_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_LEVEL_FIELD.default_value = 0
+PARTNER_PASSIVESKILL_CFG_LEVEL_FIELD.type = 5
+PARTNER_PASSIVESKILL_CFG_LEVEL_FIELD.cpp_type = 1
+
+PARTNER_PASSIVESKILL_CFG_ICON_FIELD.name = "icon"
+PARTNER_PASSIVESKILL_CFG_ICON_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.icon"
+PARTNER_PASSIVESKILL_CFG_ICON_FIELD.number = 4
+PARTNER_PASSIVESKILL_CFG_ICON_FIELD.index = 3
+PARTNER_PASSIVESKILL_CFG_ICON_FIELD.label = 2
+PARTNER_PASSIVESKILL_CFG_ICON_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_ICON_FIELD.default_value = 0
+PARTNER_PASSIVESKILL_CFG_ICON_FIELD.type = 5
+PARTNER_PASSIVESKILL_CFG_ICON_FIELD.cpp_type = 1
+
+PARTNER_PASSIVESKILL_CFG_POKEDEX_TYPE_FIELD.name = "pokedex_type"
+PARTNER_PASSIVESKILL_CFG_POKEDEX_TYPE_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.pokedex_type"
+PARTNER_PASSIVESKILL_CFG_POKEDEX_TYPE_FIELD.number = 5
+PARTNER_PASSIVESKILL_CFG_POKEDEX_TYPE_FIELD.index = 4
+PARTNER_PASSIVESKILL_CFG_POKEDEX_TYPE_FIELD.label = 3
+PARTNER_PASSIVESKILL_CFG_POKEDEX_TYPE_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_POKEDEX_TYPE_FIELD.default_value = {}
+PARTNER_PASSIVESKILL_CFG_POKEDEX_TYPE_FIELD.type = 5
+PARTNER_PASSIVESKILL_CFG_POKEDEX_TYPE_FIELD.cpp_type = 1
+
+PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD.name = "prop_type"
+PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.prop_type"
+PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD.number = 6
+PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD.index = 5
+PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD.label = 3
+PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD.default_value = {}
+PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPOPTYPE
+PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD.type = 14
+PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD.cpp_type = 8
+
+PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD.name = "att_type"
+PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.att_type"
+PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD.number = 7
+PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD.index = 6
+PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD.label = 3
+PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD.default_value = {}
+PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPTYPE
+PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD.type = 14
+PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD.cpp_type = 8
+
+PARTNER_PASSIVESKILL_CFG_ATT_VALUE_FIELD.name = "att_value"
+PARTNER_PASSIVESKILL_CFG_ATT_VALUE_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.att_value"
+PARTNER_PASSIVESKILL_CFG_ATT_VALUE_FIELD.number = 8
+PARTNER_PASSIVESKILL_CFG_ATT_VALUE_FIELD.index = 7
+PARTNER_PASSIVESKILL_CFG_ATT_VALUE_FIELD.label = 3
+PARTNER_PASSIVESKILL_CFG_ATT_VALUE_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_ATT_VALUE_FIELD.default_value = {}
+PARTNER_PASSIVESKILL_CFG_ATT_VALUE_FIELD.type = 2
+PARTNER_PASSIVESKILL_CFG_ATT_VALUE_FIELD.cpp_type = 6
+
+PARTNER_PASSIVESKILL_CFG_DESC_FIELD.name = "desc"
+PARTNER_PASSIVESKILL_CFG_DESC_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.desc"
+PARTNER_PASSIVESKILL_CFG_DESC_FIELD.number = 9
+PARTNER_PASSIVESKILL_CFG_DESC_FIELD.index = 8
+PARTNER_PASSIVESKILL_CFG_DESC_FIELD.label = 2
+PARTNER_PASSIVESKILL_CFG_DESC_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_DESC_FIELD.default_value = ""
+PARTNER_PASSIVESKILL_CFG_DESC_FIELD.type = 9
+PARTNER_PASSIVESKILL_CFG_DESC_FIELD.cpp_type = 9
+
+PARTNER_PASSIVESKILL_CFG_POKEDEX_DESC_FIELD.name = "pokedex_desc"
+PARTNER_PASSIVESKILL_CFG_POKEDEX_DESC_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.pokedex_desc"
+PARTNER_PASSIVESKILL_CFG_POKEDEX_DESC_FIELD.number = 10
+PARTNER_PASSIVESKILL_CFG_POKEDEX_DESC_FIELD.index = 9
+PARTNER_PASSIVESKILL_CFG_POKEDEX_DESC_FIELD.label = 2
+PARTNER_PASSIVESKILL_CFG_POKEDEX_DESC_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_POKEDEX_DESC_FIELD.default_value = ""
+PARTNER_PASSIVESKILL_CFG_POKEDEX_DESC_FIELD.type = 9
+PARTNER_PASSIVESKILL_CFG_POKEDEX_DESC_FIELD.cpp_type = 9
+
+PARTNER_PASSIVESKILL_CFG_NEXT_LEVEL_FIELD.name = "next_level"
+PARTNER_PASSIVESKILL_CFG_NEXT_LEVEL_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.next_level"
+PARTNER_PASSIVESKILL_CFG_NEXT_LEVEL_FIELD.number = 11
+PARTNER_PASSIVESKILL_CFG_NEXT_LEVEL_FIELD.index = 10
+PARTNER_PASSIVESKILL_CFG_NEXT_LEVEL_FIELD.label = 2
+PARTNER_PASSIVESKILL_CFG_NEXT_LEVEL_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_NEXT_LEVEL_FIELD.default_value = 0
+PARTNER_PASSIVESKILL_CFG_NEXT_LEVEL_FIELD.type = 5
+PARTNER_PASSIVESKILL_CFG_NEXT_LEVEL_FIELD.cpp_type = 1
+
+PARTNER_PASSIVESKILL_CFG_UPPER_LEVEL_FIELD.name = "upper_level"
+PARTNER_PASSIVESKILL_CFG_UPPER_LEVEL_FIELD.full_name = ".ftcfg.partner_passiveskill_cfg.upper_level"
+PARTNER_PASSIVESKILL_CFG_UPPER_LEVEL_FIELD.number = 12
+PARTNER_PASSIVESKILL_CFG_UPPER_LEVEL_FIELD.index = 11
+PARTNER_PASSIVESKILL_CFG_UPPER_LEVEL_FIELD.label = 2
+PARTNER_PASSIVESKILL_CFG_UPPER_LEVEL_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFG_UPPER_LEVEL_FIELD.default_value = 0
+PARTNER_PASSIVESKILL_CFG_UPPER_LEVEL_FIELD.type = 5
+PARTNER_PASSIVESKILL_CFG_UPPER_LEVEL_FIELD.cpp_type = 1
+
+PARTNER_PASSIVESKILL_CFG.name = "partner_passiveskill_cfg"
+PARTNER_PASSIVESKILL_CFG.full_name = ".ftcfg.partner_passiveskill_cfg"
+PARTNER_PASSIVESKILL_CFG.nested_types = {}
+PARTNER_PASSIVESKILL_CFG.enum_types = {}
+PARTNER_PASSIVESKILL_CFG.fields = {PARTNER_PASSIVESKILL_CFG_ID_FIELD, PARTNER_PASSIVESKILL_CFG_NAME_FIELD, PARTNER_PASSIVESKILL_CFG_LEVEL_FIELD, PARTNER_PASSIVESKILL_CFG_ICON_FIELD, PARTNER_PASSIVESKILL_CFG_POKEDEX_TYPE_FIELD, PARTNER_PASSIVESKILL_CFG_PROP_TYPE_FIELD, PARTNER_PASSIVESKILL_CFG_ATT_TYPE_FIELD, PARTNER_PASSIVESKILL_CFG_ATT_VALUE_FIELD, PARTNER_PASSIVESKILL_CFG_DESC_FIELD, PARTNER_PASSIVESKILL_CFG_POKEDEX_DESC_FIELD, PARTNER_PASSIVESKILL_CFG_NEXT_LEVEL_FIELD, PARTNER_PASSIVESKILL_CFG_UPPER_LEVEL_FIELD}
+PARTNER_PASSIVESKILL_CFG.is_extendable = false
+PARTNER_PASSIVESKILL_CFG.extensions = {}
+PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_passiveskill_cfgs.items"
+PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD.number = 1
+PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD.index = 0
+PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD.label = 3
+PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD.message_type = PARTNER_PASSIVESKILL_CFG
+PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD.type = 11
+PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_PASSIVESKILL_CFGS.name = "partner_passiveskill_cfgs"
+PARTNER_PASSIVESKILL_CFGS.full_name = ".ftcfg.partner_passiveskill_cfgs"
+PARTNER_PASSIVESKILL_CFGS.nested_types = {}
+PARTNER_PASSIVESKILL_CFGS.enum_types = {}
+PARTNER_PASSIVESKILL_CFGS.fields = {PARTNER_PASSIVESKILL_CFGS_ITEMS_FIELD}
+PARTNER_PASSIVESKILL_CFGS.is_extendable = false
+PARTNER_PASSIVESKILL_CFGS.extensions = {}
+PARTNER_CHIP_CFG_ID_FIELD.name = "id"
+PARTNER_CHIP_CFG_ID_FIELD.full_name = ".ftcfg.partner_chip_cfg.id"
+PARTNER_CHIP_CFG_ID_FIELD.number = 1
+PARTNER_CHIP_CFG_ID_FIELD.index = 0
+PARTNER_CHIP_CFG_ID_FIELD.label = 2
+PARTNER_CHIP_CFG_ID_FIELD.has_default_value = false
+PARTNER_CHIP_CFG_ID_FIELD.default_value = 0
+PARTNER_CHIP_CFG_ID_FIELD.type = 13
+PARTNER_CHIP_CFG_ID_FIELD.cpp_type = 3
+
+PARTNER_CHIP_CFG_CHIP_NAME_FIELD.name = "chip_name"
+PARTNER_CHIP_CFG_CHIP_NAME_FIELD.full_name = ".ftcfg.partner_chip_cfg.chip_name"
+PARTNER_CHIP_CFG_CHIP_NAME_FIELD.number = 2
+PARTNER_CHIP_CFG_CHIP_NAME_FIELD.index = 1
+PARTNER_CHIP_CFG_CHIP_NAME_FIELD.label = 2
+PARTNER_CHIP_CFG_CHIP_NAME_FIELD.has_default_value = false
+PARTNER_CHIP_CFG_CHIP_NAME_FIELD.default_value = ""
+PARTNER_CHIP_CFG_CHIP_NAME_FIELD.type = 9
+PARTNER_CHIP_CFG_CHIP_NAME_FIELD.cpp_type = 9
+
+PARTNER_CHIP_CFG_ICON_FIELD.name = "icon"
+PARTNER_CHIP_CFG_ICON_FIELD.full_name = ".ftcfg.partner_chip_cfg.icon"
+PARTNER_CHIP_CFG_ICON_FIELD.number = 3
+PARTNER_CHIP_CFG_ICON_FIELD.index = 2
+PARTNER_CHIP_CFG_ICON_FIELD.label = 2
+PARTNER_CHIP_CFG_ICON_FIELD.has_default_value = false
+PARTNER_CHIP_CFG_ICON_FIELD.default_value = ""
+PARTNER_CHIP_CFG_ICON_FIELD.type = 9
+PARTNER_CHIP_CFG_ICON_FIELD.cpp_type = 9
+
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM1_FIELD.name = "change_need_num1"
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM1_FIELD.full_name = ".ftcfg.partner_chip_cfg.change_need_num1"
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM1_FIELD.number = 4
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM1_FIELD.index = 3
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM1_FIELD.label = 2
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM1_FIELD.has_default_value = false
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM1_FIELD.default_value = 0
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM1_FIELD.type = 5
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM1_FIELD.cpp_type = 1
+
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM2_FIELD.name = "change_need_num2"
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM2_FIELD.full_name = ".ftcfg.partner_chip_cfg.change_need_num2"
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM2_FIELD.number = 5
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM2_FIELD.index = 4
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM2_FIELD.label = 2
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM2_FIELD.has_default_value = false
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM2_FIELD.default_value = 0
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM2_FIELD.type = 5
+PARTNER_CHIP_CFG_CHANGE_NEED_NUM2_FIELD.cpp_type = 1
+
+PARTNER_CHIP_CFG_CHANGE_NEED_PROP_FIELD.name = "change_need_prop"
+PARTNER_CHIP_CFG_CHANGE_NEED_PROP_FIELD.full_name = ".ftcfg.partner_chip_cfg.change_need_prop"
+PARTNER_CHIP_CFG_CHANGE_NEED_PROP_FIELD.number = 6
+PARTNER_CHIP_CFG_CHANGE_NEED_PROP_FIELD.index = 5
+PARTNER_CHIP_CFG_CHANGE_NEED_PROP_FIELD.label = 2
+PARTNER_CHIP_CFG_CHANGE_NEED_PROP_FIELD.has_default_value = false
+PARTNER_CHIP_CFG_CHANGE_NEED_PROP_FIELD.default_value = 0
+PARTNER_CHIP_CFG_CHANGE_NEED_PROP_FIELD.type = 13
+PARTNER_CHIP_CFG_CHANGE_NEED_PROP_FIELD.cpp_type = 3
+
+PARTNER_CHIP_CFG_CHANGE_NEED_PROPNUM_FIELD.name = "change_need_propnum"
+PARTNER_CHIP_CFG_CHANGE_NEED_PROPNUM_FIELD.full_name = ".ftcfg.partner_chip_cfg.change_need_propnum"
+PARTNER_CHIP_CFG_CHANGE_NEED_PROPNUM_FIELD.number = 7
+PARTNER_CHIP_CFG_CHANGE_NEED_PROPNUM_FIELD.index = 6
+PARTNER_CHIP_CFG_CHANGE_NEED_PROPNUM_FIELD.label = 2
+PARTNER_CHIP_CFG_CHANGE_NEED_PROPNUM_FIELD.has_default_value = false
+PARTNER_CHIP_CFG_CHANGE_NEED_PROPNUM_FIELD.default_value = 0
+PARTNER_CHIP_CFG_CHANGE_NEED_PROPNUM_FIELD.type = 5
+PARTNER_CHIP_CFG_CHANGE_NEED_PROPNUM_FIELD.cpp_type = 1
+
+PARTNER_CHIP_CFG.name = "partner_chip_cfg"
+PARTNER_CHIP_CFG.full_name = ".ftcfg.partner_chip_cfg"
+PARTNER_CHIP_CFG.nested_types = {}
+PARTNER_CHIP_CFG.enum_types = {}
+PARTNER_CHIP_CFG.fields = {PARTNER_CHIP_CFG_ID_FIELD, PARTNER_CHIP_CFG_CHIP_NAME_FIELD, PARTNER_CHIP_CFG_ICON_FIELD, PARTNER_CHIP_CFG_CHANGE_NEED_NUM1_FIELD, PARTNER_CHIP_CFG_CHANGE_NEED_NUM2_FIELD, PARTNER_CHIP_CFG_CHANGE_NEED_PROP_FIELD, PARTNER_CHIP_CFG_CHANGE_NEED_PROPNUM_FIELD}
+PARTNER_CHIP_CFG.is_extendable = false
+PARTNER_CHIP_CFG.extensions = {}
+PARTNER_CHIP_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_CHIP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_chip_cfgs.items"
+PARTNER_CHIP_CFGS_ITEMS_FIELD.number = 1
+PARTNER_CHIP_CFGS_ITEMS_FIELD.index = 0
+PARTNER_CHIP_CFGS_ITEMS_FIELD.label = 3
+PARTNER_CHIP_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_CHIP_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_CHIP_CFGS_ITEMS_FIELD.message_type = PARTNER_CHIP_CFG
+PARTNER_CHIP_CFGS_ITEMS_FIELD.type = 11
+PARTNER_CHIP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_CHIP_CFGS.name = "partner_chip_cfgs"
+PARTNER_CHIP_CFGS.full_name = ".ftcfg.partner_chip_cfgs"
+PARTNER_CHIP_CFGS.nested_types = {}
+PARTNER_CHIP_CFGS.enum_types = {}
+PARTNER_CHIP_CFGS.fields = {PARTNER_CHIP_CFGS_ITEMS_FIELD}
+PARTNER_CHIP_CFGS.is_extendable = false
+PARTNER_CHIP_CFGS.extensions = {}
+FETTER_CFG_ID_FIELD.name = "id"
+FETTER_CFG_ID_FIELD.full_name = ".ftcfg.fetter_cfg.id"
+FETTER_CFG_ID_FIELD.number = 1
+FETTER_CFG_ID_FIELD.index = 0
+FETTER_CFG_ID_FIELD.label = 2
+FETTER_CFG_ID_FIELD.has_default_value = false
+FETTER_CFG_ID_FIELD.default_value = 0
+FETTER_CFG_ID_FIELD.type = 13
+FETTER_CFG_ID_FIELD.cpp_type = 3
+
+FETTER_CFG_TID_FIELD.name = "tid"
+FETTER_CFG_TID_FIELD.full_name = ".ftcfg.fetter_cfg.tid"
+FETTER_CFG_TID_FIELD.number = 2
+FETTER_CFG_TID_FIELD.index = 1
+FETTER_CFG_TID_FIELD.label = 2
+FETTER_CFG_TID_FIELD.has_default_value = false
+FETTER_CFG_TID_FIELD.default_value = 0
+FETTER_CFG_TID_FIELD.type = 13
+FETTER_CFG_TID_FIELD.cpp_type = 3
+
+FETTER_CFG_FETTER_NAME_FIELD.name = "fetter_name"
+FETTER_CFG_FETTER_NAME_FIELD.full_name = ".ftcfg.fetter_cfg.fetter_name"
+FETTER_CFG_FETTER_NAME_FIELD.number = 3
+FETTER_CFG_FETTER_NAME_FIELD.index = 2
+FETTER_CFG_FETTER_NAME_FIELD.label = 2
+FETTER_CFG_FETTER_NAME_FIELD.has_default_value = false
+FETTER_CFG_FETTER_NAME_FIELD.default_value = ""
+FETTER_CFG_FETTER_NAME_FIELD.type = 9
+FETTER_CFG_FETTER_NAME_FIELD.cpp_type = 9
+
+FETTER_CFG_FETTER_DESC_FIELD.name = "fetter_desc"
+FETTER_CFG_FETTER_DESC_FIELD.full_name = ".ftcfg.fetter_cfg.fetter_desc"
+FETTER_CFG_FETTER_DESC_FIELD.number = 4
+FETTER_CFG_FETTER_DESC_FIELD.index = 3
+FETTER_CFG_FETTER_DESC_FIELD.label = 2
+FETTER_CFG_FETTER_DESC_FIELD.has_default_value = false
+FETTER_CFG_FETTER_DESC_FIELD.default_value = ""
+FETTER_CFG_FETTER_DESC_FIELD.type = 9
+FETTER_CFG_FETTER_DESC_FIELD.cpp_type = 9
+
+FETTER_CFG_FETTER_OBJECT_FIELD.name = "fetter_object"
+FETTER_CFG_FETTER_OBJECT_FIELD.full_name = ".ftcfg.fetter_cfg.fetter_object"
+FETTER_CFG_FETTER_OBJECT_FIELD.number = 5
+FETTER_CFG_FETTER_OBJECT_FIELD.index = 4
+FETTER_CFG_FETTER_OBJECT_FIELD.label = 3
+FETTER_CFG_FETTER_OBJECT_FIELD.has_default_value = false
+FETTER_CFG_FETTER_OBJECT_FIELD.default_value = {}
+FETTER_CFG_FETTER_OBJECT_FIELD.type = 13
+FETTER_CFG_FETTER_OBJECT_FIELD.cpp_type = 3
+
+FETTER_CFG.name = "fetter_cfg"
+FETTER_CFG.full_name = ".ftcfg.fetter_cfg"
+FETTER_CFG.nested_types = {}
+FETTER_CFG.enum_types = {}
+FETTER_CFG.fields = {FETTER_CFG_ID_FIELD, FETTER_CFG_TID_FIELD, FETTER_CFG_FETTER_NAME_FIELD, FETTER_CFG_FETTER_DESC_FIELD, FETTER_CFG_FETTER_OBJECT_FIELD}
+FETTER_CFG.is_extendable = false
+FETTER_CFG.extensions = {}
+FETTER_CFGS_ITEMS_FIELD.name = "items"
+FETTER_CFGS_ITEMS_FIELD.full_name = ".ftcfg.fetter_cfgs.items"
+FETTER_CFGS_ITEMS_FIELD.number = 1
+FETTER_CFGS_ITEMS_FIELD.index = 0
+FETTER_CFGS_ITEMS_FIELD.label = 3
+FETTER_CFGS_ITEMS_FIELD.has_default_value = false
+FETTER_CFGS_ITEMS_FIELD.default_value = {}
+FETTER_CFGS_ITEMS_FIELD.message_type = FETTER_CFG
+FETTER_CFGS_ITEMS_FIELD.type = 11
+FETTER_CFGS_ITEMS_FIELD.cpp_type = 10
+
+FETTER_CFGS.name = "fetter_cfgs"
+FETTER_CFGS.full_name = ".ftcfg.fetter_cfgs"
+FETTER_CFGS.nested_types = {}
+FETTER_CFGS.enum_types = {}
+FETTER_CFGS.fields = {FETTER_CFGS_ITEMS_FIELD}
+FETTER_CFGS.is_extendable = false
+FETTER_CFGS.extensions = {}
+PARTNER_EQUIPHECHENG_CFG_ID_FIELD.name = "id"
+PARTNER_EQUIPHECHENG_CFG_ID_FIELD.full_name = ".ftcfg.partner_equiphecheng_cfg.id"
+PARTNER_EQUIPHECHENG_CFG_ID_FIELD.number = 1
+PARTNER_EQUIPHECHENG_CFG_ID_FIELD.index = 0
+PARTNER_EQUIPHECHENG_CFG_ID_FIELD.label = 2
+PARTNER_EQUIPHECHENG_CFG_ID_FIELD.has_default_value = false
+PARTNER_EQUIPHECHENG_CFG_ID_FIELD.default_value = 0
+PARTNER_EQUIPHECHENG_CFG_ID_FIELD.type = 13
+PARTNER_EQUIPHECHENG_CFG_ID_FIELD.cpp_type = 3
+
+PARTNER_EQUIPHECHENG_CFG_NAME_FIELD.name = "name"
+PARTNER_EQUIPHECHENG_CFG_NAME_FIELD.full_name = ".ftcfg.partner_equiphecheng_cfg.name"
+PARTNER_EQUIPHECHENG_CFG_NAME_FIELD.number = 2
+PARTNER_EQUIPHECHENG_CFG_NAME_FIELD.index = 1
+PARTNER_EQUIPHECHENG_CFG_NAME_FIELD.label = 2
+PARTNER_EQUIPHECHENG_CFG_NAME_FIELD.has_default_value = false
+PARTNER_EQUIPHECHENG_CFG_NAME_FIELD.default_value = ""
+PARTNER_EQUIPHECHENG_CFG_NAME_FIELD.type = 9
+PARTNER_EQUIPHECHENG_CFG_NAME_FIELD.cpp_type = 9
+
+PARTNER_EQUIPHECHENG_CFG_STUFFID_FIELD.name = "stuffid"
+PARTNER_EQUIPHECHENG_CFG_STUFFID_FIELD.full_name = ".ftcfg.partner_equiphecheng_cfg.stuffid"
+PARTNER_EQUIPHECHENG_CFG_STUFFID_FIELD.number = 3
+PARTNER_EQUIPHECHENG_CFG_STUFFID_FIELD.index = 2
+PARTNER_EQUIPHECHENG_CFG_STUFFID_FIELD.label = 3
+PARTNER_EQUIPHECHENG_CFG_STUFFID_FIELD.has_default_value = false
+PARTNER_EQUIPHECHENG_CFG_STUFFID_FIELD.default_value = {}
+PARTNER_EQUIPHECHENG_CFG_STUFFID_FIELD.type = 13
+PARTNER_EQUIPHECHENG_CFG_STUFFID_FIELD.cpp_type = 3
+
+PARTNER_EQUIPHECHENG_CFG_STUFFID2_FIELD.name = "stuffid2"
+PARTNER_EQUIPHECHENG_CFG_STUFFID2_FIELD.full_name = ".ftcfg.partner_equiphecheng_cfg.stuffid2"
+PARTNER_EQUIPHECHENG_CFG_STUFFID2_FIELD.number = 4
+PARTNER_EQUIPHECHENG_CFG_STUFFID2_FIELD.index = 3
+PARTNER_EQUIPHECHENG_CFG_STUFFID2_FIELD.label = 3
+PARTNER_EQUIPHECHENG_CFG_STUFFID2_FIELD.has_default_value = false
+PARTNER_EQUIPHECHENG_CFG_STUFFID2_FIELD.default_value = {}
+PARTNER_EQUIPHECHENG_CFG_STUFFID2_FIELD.type = 13
+PARTNER_EQUIPHECHENG_CFG_STUFFID2_FIELD.cpp_type = 3
+
+PARTNER_EQUIPHECHENG_CFG_COMPOSITE_DISPLAY_FIELD.name = "composite_display"
+PARTNER_EQUIPHECHENG_CFG_COMPOSITE_DISPLAY_FIELD.full_name = ".ftcfg.partner_equiphecheng_cfg.composite_display"
+PARTNER_EQUIPHECHENG_CFG_COMPOSITE_DISPLAY_FIELD.number = 5
+PARTNER_EQUIPHECHENG_CFG_COMPOSITE_DISPLAY_FIELD.index = 4
+PARTNER_EQUIPHECHENG_CFG_COMPOSITE_DISPLAY_FIELD.label = 2
+PARTNER_EQUIPHECHENG_CFG_COMPOSITE_DISPLAY_FIELD.has_default_value = false
+PARTNER_EQUIPHECHENG_CFG_COMPOSITE_DISPLAY_FIELD.default_value = 0
+PARTNER_EQUIPHECHENG_CFG_COMPOSITE_DISPLAY_FIELD.type = 5
+PARTNER_EQUIPHECHENG_CFG_COMPOSITE_DISPLAY_FIELD.cpp_type = 1
+
+PARTNER_EQUIPHECHENG_CFG.name = "partner_equiphecheng_cfg"
+PARTNER_EQUIPHECHENG_CFG.full_name = ".ftcfg.partner_equiphecheng_cfg"
+PARTNER_EQUIPHECHENG_CFG.nested_types = {}
+PARTNER_EQUIPHECHENG_CFG.enum_types = {}
+PARTNER_EQUIPHECHENG_CFG.fields = {PARTNER_EQUIPHECHENG_CFG_ID_FIELD, PARTNER_EQUIPHECHENG_CFG_NAME_FIELD, PARTNER_EQUIPHECHENG_CFG_STUFFID_FIELD, PARTNER_EQUIPHECHENG_CFG_STUFFID2_FIELD, PARTNER_EQUIPHECHENG_CFG_COMPOSITE_DISPLAY_FIELD}
+PARTNER_EQUIPHECHENG_CFG.is_extendable = false
+PARTNER_EQUIPHECHENG_CFG.extensions = {}
+PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_equiphecheng_cfgs.items"
+PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD.number = 1
+PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD.index = 0
+PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD.label = 3
+PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD.message_type = PARTNER_EQUIPHECHENG_CFG
+PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD.type = 11
+PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_EQUIPHECHENG_CFGS.name = "partner_equiphecheng_cfgs"
+PARTNER_EQUIPHECHENG_CFGS.full_name = ".ftcfg.partner_equiphecheng_cfgs"
+PARTNER_EQUIPHECHENG_CFGS.nested_types = {}
+PARTNER_EQUIPHECHENG_CFGS.enum_types = {}
+PARTNER_EQUIPHECHENG_CFGS.fields = {PARTNER_EQUIPHECHENG_CFGS_ITEMS_FIELD}
+PARTNER_EQUIPHECHENG_CFGS.is_extendable = false
+PARTNER_EQUIPHECHENG_CFGS.extensions = {}
+PARTNER_FORMATION_CFG_ID_FIELD.name = "id"
+PARTNER_FORMATION_CFG_ID_FIELD.full_name = ".ftcfg.partner_formation_cfg.id"
+PARTNER_FORMATION_CFG_ID_FIELD.number = 1
+PARTNER_FORMATION_CFG_ID_FIELD.index = 0
+PARTNER_FORMATION_CFG_ID_FIELD.label = 2
+PARTNER_FORMATION_CFG_ID_FIELD.has_default_value = false
+PARTNER_FORMATION_CFG_ID_FIELD.default_value = 0
+PARTNER_FORMATION_CFG_ID_FIELD.type = 5
+PARTNER_FORMATION_CFG_ID_FIELD.cpp_type = 1
+
+PARTNER_FORMATION_CFG_PROP_ADD1_FIELD.name = "prop_add1"
+PARTNER_FORMATION_CFG_PROP_ADD1_FIELD.full_name = ".ftcfg.partner_formation_cfg.prop_add1"
+PARTNER_FORMATION_CFG_PROP_ADD1_FIELD.number = 2
+PARTNER_FORMATION_CFG_PROP_ADD1_FIELD.index = 1
+PARTNER_FORMATION_CFG_PROP_ADD1_FIELD.label = 2
+PARTNER_FORMATION_CFG_PROP_ADD1_FIELD.has_default_value = false
+PARTNER_FORMATION_CFG_PROP_ADD1_FIELD.default_value = nil
+PARTNER_FORMATION_CFG_PROP_ADD1_FIELD.enum_type = config_predefine_pb.ECPROPTYPE
+PARTNER_FORMATION_CFG_PROP_ADD1_FIELD.type = 14
+PARTNER_FORMATION_CFG_PROP_ADD1_FIELD.cpp_type = 8
+
+PARTNER_FORMATION_CFG_PROP_ADD2_FIELD.name = "prop_add2"
+PARTNER_FORMATION_CFG_PROP_ADD2_FIELD.full_name = ".ftcfg.partner_formation_cfg.prop_add2"
+PARTNER_FORMATION_CFG_PROP_ADD2_FIELD.number = 3
+PARTNER_FORMATION_CFG_PROP_ADD2_FIELD.index = 2
+PARTNER_FORMATION_CFG_PROP_ADD2_FIELD.label = 2
+PARTNER_FORMATION_CFG_PROP_ADD2_FIELD.has_default_value = false
+PARTNER_FORMATION_CFG_PROP_ADD2_FIELD.default_value = nil
+PARTNER_FORMATION_CFG_PROP_ADD2_FIELD.enum_type = config_predefine_pb.ECPROPTYPE
+PARTNER_FORMATION_CFG_PROP_ADD2_FIELD.type = 14
+PARTNER_FORMATION_CFG_PROP_ADD2_FIELD.cpp_type = 8
+
+PARTNER_FORMATION_CFG_PROP_ADD3_FIELD.name = "prop_add3"
+PARTNER_FORMATION_CFG_PROP_ADD3_FIELD.full_name = ".ftcfg.partner_formation_cfg.prop_add3"
+PARTNER_FORMATION_CFG_PROP_ADD3_FIELD.number = 4
+PARTNER_FORMATION_CFG_PROP_ADD3_FIELD.index = 3
+PARTNER_FORMATION_CFG_PROP_ADD3_FIELD.label = 2
+PARTNER_FORMATION_CFG_PROP_ADD3_FIELD.has_default_value = false
+PARTNER_FORMATION_CFG_PROP_ADD3_FIELD.default_value = nil
+PARTNER_FORMATION_CFG_PROP_ADD3_FIELD.enum_type = config_predefine_pb.ECPROPTYPE
+PARTNER_FORMATION_CFG_PROP_ADD3_FIELD.type = 14
+PARTNER_FORMATION_CFG_PROP_ADD3_FIELD.cpp_type = 8
+
+PARTNER_FORMATION_CFG.name = "partner_formation_cfg"
+PARTNER_FORMATION_CFG.full_name = ".ftcfg.partner_formation_cfg"
+PARTNER_FORMATION_CFG.nested_types = {}
+PARTNER_FORMATION_CFG.enum_types = {}
+PARTNER_FORMATION_CFG.fields = {PARTNER_FORMATION_CFG_ID_FIELD, PARTNER_FORMATION_CFG_PROP_ADD1_FIELD, PARTNER_FORMATION_CFG_PROP_ADD2_FIELD, PARTNER_FORMATION_CFG_PROP_ADD3_FIELD}
+PARTNER_FORMATION_CFG.is_extendable = false
+PARTNER_FORMATION_CFG.extensions = {}
+PARTNER_FORMATION_CFGS_ITEMS_FIELD.name = "items"
+PARTNER_FORMATION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.partner_formation_cfgs.items"
+PARTNER_FORMATION_CFGS_ITEMS_FIELD.number = 1
+PARTNER_FORMATION_CFGS_ITEMS_FIELD.index = 0
+PARTNER_FORMATION_CFGS_ITEMS_FIELD.label = 3
+PARTNER_FORMATION_CFGS_ITEMS_FIELD.has_default_value = false
+PARTNER_FORMATION_CFGS_ITEMS_FIELD.default_value = {}
+PARTNER_FORMATION_CFGS_ITEMS_FIELD.message_type = PARTNER_FORMATION_CFG
+PARTNER_FORMATION_CFGS_ITEMS_FIELD.type = 11
+PARTNER_FORMATION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+PARTNER_FORMATION_CFGS.name = "partner_formation_cfgs"
+PARTNER_FORMATION_CFGS.full_name = ".ftcfg.partner_formation_cfgs"
+PARTNER_FORMATION_CFGS.nested_types = {}
+PARTNER_FORMATION_CFGS.enum_types = {}
+PARTNER_FORMATION_CFGS.fields = {PARTNER_FORMATION_CFGS_ITEMS_FIELD}
+PARTNER_FORMATION_CFGS.is_extendable = false
+PARTNER_FORMATION_CFGS.extensions = {}
+GUILD_MISSION_CFG_ID_FIELD.name = "id"
+GUILD_MISSION_CFG_ID_FIELD.full_name = ".ftcfg.guild_mission_cfg.id"
+GUILD_MISSION_CFG_ID_FIELD.number = 1
+GUILD_MISSION_CFG_ID_FIELD.index = 0
+GUILD_MISSION_CFG_ID_FIELD.label = 2
+GUILD_MISSION_CFG_ID_FIELD.has_default_value = false
+GUILD_MISSION_CFG_ID_FIELD.default_value = 0
+GUILD_MISSION_CFG_ID_FIELD.type = 13
+GUILD_MISSION_CFG_ID_FIELD.cpp_type = 3
+
+GUILD_MISSION_CFG_GUILD_TASK_LEVEL_FIELD.name = "guild_task_level"
+GUILD_MISSION_CFG_GUILD_TASK_LEVEL_FIELD.full_name = ".ftcfg.guild_mission_cfg.guild_task_level"
+GUILD_MISSION_CFG_GUILD_TASK_LEVEL_FIELD.number = 2
+GUILD_MISSION_CFG_GUILD_TASK_LEVEL_FIELD.index = 1
+GUILD_MISSION_CFG_GUILD_TASK_LEVEL_FIELD.label = 2
+GUILD_MISSION_CFG_GUILD_TASK_LEVEL_FIELD.has_default_value = false
+GUILD_MISSION_CFG_GUILD_TASK_LEVEL_FIELD.default_value = 0
+GUILD_MISSION_CFG_GUILD_TASK_LEVEL_FIELD.type = 5
+GUILD_MISSION_CFG_GUILD_TASK_LEVEL_FIELD.cpp_type = 1
+
+GUILD_MISSION_CFG_GUILD_TASK_DAY_FIELD.name = "guild_task_day"
+GUILD_MISSION_CFG_GUILD_TASK_DAY_FIELD.full_name = ".ftcfg.guild_mission_cfg.guild_task_day"
+GUILD_MISSION_CFG_GUILD_TASK_DAY_FIELD.number = 3
+GUILD_MISSION_CFG_GUILD_TASK_DAY_FIELD.index = 2
+GUILD_MISSION_CFG_GUILD_TASK_DAY_FIELD.label = 3
+GUILD_MISSION_CFG_GUILD_TASK_DAY_FIELD.has_default_value = false
+GUILD_MISSION_CFG_GUILD_TASK_DAY_FIELD.default_value = {}
+GUILD_MISSION_CFG_GUILD_TASK_DAY_FIELD.type = 5
+GUILD_MISSION_CFG_GUILD_TASK_DAY_FIELD.cpp_type = 1
+
+GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD.name = "guild_task_quality"
+GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD.full_name = ".ftcfg.guild_mission_cfg.guild_task_quality"
+GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD.number = 4
+GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD.index = 3
+GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD.label = 2
+GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD.has_default_value = false
+GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD.default_value = nil
+GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD.enum_type = config_predefine_pb.EGUILDQUALITYTYPE
+GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD.type = 14
+GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD.cpp_type = 8
+
+GUILD_MISSION_CFG_GUILD_TASK_TARGETID_FIELD.name = "guild_task_targetid"
+GUILD_MISSION_CFG_GUILD_TASK_TARGETID_FIELD.full_name = ".ftcfg.guild_mission_cfg.guild_task_targetid"
+GUILD_MISSION_CFG_GUILD_TASK_TARGETID_FIELD.number = 5
+GUILD_MISSION_CFG_GUILD_TASK_TARGETID_FIELD.index = 4
+GUILD_MISSION_CFG_GUILD_TASK_TARGETID_FIELD.label = 2
+GUILD_MISSION_CFG_GUILD_TASK_TARGETID_FIELD.has_default_value = false
+GUILD_MISSION_CFG_GUILD_TASK_TARGETID_FIELD.default_value = 0
+GUILD_MISSION_CFG_GUILD_TASK_TARGETID_FIELD.type = 5
+GUILD_MISSION_CFG_GUILD_TASK_TARGETID_FIELD.cpp_type = 1
+
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD.name = "guild_task_condition_type"
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD.full_name = ".ftcfg.guild_mission_cfg.guild_task_condition_type"
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD.number = 6
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD.index = 5
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD.label = 2
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD.has_default_value = false
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD.default_value = nil
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD.enum_type = config_predefine_pb.EGUILDTASKTYPE
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD.type = 14
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD.cpp_type = 8
+
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_NUMBER_FIELD.name = "guild_task_condition_number"
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_NUMBER_FIELD.full_name = ".ftcfg.guild_mission_cfg.guild_task_condition_number"
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_NUMBER_FIELD.number = 7
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_NUMBER_FIELD.index = 6
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_NUMBER_FIELD.label = 3
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_NUMBER_FIELD.has_default_value = false
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_NUMBER_FIELD.default_value = {}
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_NUMBER_FIELD.type = 5
+GUILD_MISSION_CFG_GUILD_TASK_CONDITION_NUMBER_FIELD.cpp_type = 1
+
+GUILD_MISSION_CFG_GUILD_TASK_REWAEDID_FIELD.name = "guild_task_rewaedid"
+GUILD_MISSION_CFG_GUILD_TASK_REWAEDID_FIELD.full_name = ".ftcfg.guild_mission_cfg.guild_task_rewaedid"
+GUILD_MISSION_CFG_GUILD_TASK_REWAEDID_FIELD.number = 8
+GUILD_MISSION_CFG_GUILD_TASK_REWAEDID_FIELD.index = 7
+GUILD_MISSION_CFG_GUILD_TASK_REWAEDID_FIELD.label = 2
+GUILD_MISSION_CFG_GUILD_TASK_REWAEDID_FIELD.has_default_value = false
+GUILD_MISSION_CFG_GUILD_TASK_REWAEDID_FIELD.default_value = 0
+GUILD_MISSION_CFG_GUILD_TASK_REWAEDID_FIELD.type = 5
+GUILD_MISSION_CFG_GUILD_TASK_REWAEDID_FIELD.cpp_type = 1
+
+GUILD_MISSION_CFG.name = "guild_mission_cfg"
+GUILD_MISSION_CFG.full_name = ".ftcfg.guild_mission_cfg"
+GUILD_MISSION_CFG.nested_types = {}
+GUILD_MISSION_CFG.enum_types = {}
+GUILD_MISSION_CFG.fields = {GUILD_MISSION_CFG_ID_FIELD, GUILD_MISSION_CFG_GUILD_TASK_LEVEL_FIELD, GUILD_MISSION_CFG_GUILD_TASK_DAY_FIELD, GUILD_MISSION_CFG_GUILD_TASK_QUALITY_FIELD, GUILD_MISSION_CFG_GUILD_TASK_TARGETID_FIELD, GUILD_MISSION_CFG_GUILD_TASK_CONDITION_TYPE_FIELD, GUILD_MISSION_CFG_GUILD_TASK_CONDITION_NUMBER_FIELD, GUILD_MISSION_CFG_GUILD_TASK_REWAEDID_FIELD}
+GUILD_MISSION_CFG.is_extendable = false
+GUILD_MISSION_CFG.extensions = {}
+GUILD_MISSION_CFGS_ITEMS_FIELD.name = "items"
+GUILD_MISSION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.guild_mission_cfgs.items"
+GUILD_MISSION_CFGS_ITEMS_FIELD.number = 1
+GUILD_MISSION_CFGS_ITEMS_FIELD.index = 0
+GUILD_MISSION_CFGS_ITEMS_FIELD.label = 3
+GUILD_MISSION_CFGS_ITEMS_FIELD.has_default_value = false
+GUILD_MISSION_CFGS_ITEMS_FIELD.default_value = {}
+GUILD_MISSION_CFGS_ITEMS_FIELD.message_type = GUILD_MISSION_CFG
+GUILD_MISSION_CFGS_ITEMS_FIELD.type = 11
+GUILD_MISSION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GUILD_MISSION_CFGS.name = "guild_mission_cfgs"
+GUILD_MISSION_CFGS.full_name = ".ftcfg.guild_mission_cfgs"
+GUILD_MISSION_CFGS.nested_types = {}
+GUILD_MISSION_CFGS.enum_types = {}
+GUILD_MISSION_CFGS.fields = {GUILD_MISSION_CFGS_ITEMS_FIELD}
+GUILD_MISSION_CFGS.is_extendable = false
+GUILD_MISSION_CFGS.extensions = {}
+GUILD_BUILDING_MISSION_CFG_ID_FIELD.name = "id"
+GUILD_BUILDING_MISSION_CFG_ID_FIELD.full_name = ".ftcfg.guild_building_mission_cfg.id"
+GUILD_BUILDING_MISSION_CFG_ID_FIELD.number = 1
+GUILD_BUILDING_MISSION_CFG_ID_FIELD.index = 0
+GUILD_BUILDING_MISSION_CFG_ID_FIELD.label = 2
+GUILD_BUILDING_MISSION_CFG_ID_FIELD.has_default_value = false
+GUILD_BUILDING_MISSION_CFG_ID_FIELD.default_value = 0
+GUILD_BUILDING_MISSION_CFG_ID_FIELD.type = 13
+GUILD_BUILDING_MISSION_CFG_ID_FIELD.cpp_type = 3
+
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_FIELD.name = "submit_condition"
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_FIELD.full_name = ".ftcfg.guild_building_mission_cfg.submit_condition"
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_FIELD.number = 2
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_FIELD.index = 1
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_FIELD.label = 3
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_FIELD.has_default_value = false
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_FIELD.default_value = {}
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_FIELD.type = 5
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_FIELD.cpp_type = 1
+
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_REWARD_FIELD.name = "submit_condition_reward"
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_REWARD_FIELD.full_name = ".ftcfg.guild_building_mission_cfg.submit_condition_reward"
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_REWARD_FIELD.number = 3
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_REWARD_FIELD.index = 2
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_REWARD_FIELD.label = 3
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_REWARD_FIELD.has_default_value = false
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_REWARD_FIELD.default_value = {}
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_REWARD_FIELD.type = 5
+GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_REWARD_FIELD.cpp_type = 1
+
+GUILD_BUILDING_MISSION_CFG.name = "guild_building_mission_cfg"
+GUILD_BUILDING_MISSION_CFG.full_name = ".ftcfg.guild_building_mission_cfg"
+GUILD_BUILDING_MISSION_CFG.nested_types = {}
+GUILD_BUILDING_MISSION_CFG.enum_types = {}
+GUILD_BUILDING_MISSION_CFG.fields = {GUILD_BUILDING_MISSION_CFG_ID_FIELD, GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_FIELD, GUILD_BUILDING_MISSION_CFG_SUBMIT_CONDITION_REWARD_FIELD}
+GUILD_BUILDING_MISSION_CFG.is_extendable = false
+GUILD_BUILDING_MISSION_CFG.extensions = {}
+GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD.name = "items"
+GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.guild_building_mission_cfgs.items"
+GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD.number = 1
+GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD.index = 0
+GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD.label = 3
+GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD.has_default_value = false
+GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD.default_value = {}
+GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD.message_type = GUILD_BUILDING_MISSION_CFG
+GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD.type = 11
+GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GUILD_BUILDING_MISSION_CFGS.name = "guild_building_mission_cfgs"
+GUILD_BUILDING_MISSION_CFGS.full_name = ".ftcfg.guild_building_mission_cfgs"
+GUILD_BUILDING_MISSION_CFGS.nested_types = {}
+GUILD_BUILDING_MISSION_CFGS.enum_types = {}
+GUILD_BUILDING_MISSION_CFGS.fields = {GUILD_BUILDING_MISSION_CFGS_ITEMS_FIELD}
+GUILD_BUILDING_MISSION_CFGS.is_extendable = false
+GUILD_BUILDING_MISSION_CFGS.extensions = {}
+BUILDING_MISSION_POOL_CFG_ID_FIELD.name = "id"
+BUILDING_MISSION_POOL_CFG_ID_FIELD.full_name = ".ftcfg.building_mission_pool_cfg.id"
+BUILDING_MISSION_POOL_CFG_ID_FIELD.number = 1
+BUILDING_MISSION_POOL_CFG_ID_FIELD.index = 0
+BUILDING_MISSION_POOL_CFG_ID_FIELD.label = 2
+BUILDING_MISSION_POOL_CFG_ID_FIELD.has_default_value = false
+BUILDING_MISSION_POOL_CFG_ID_FIELD.default_value = 0
+BUILDING_MISSION_POOL_CFG_ID_FIELD.type = 13
+BUILDING_MISSION_POOL_CFG_ID_FIELD.cpp_type = 3
+
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_ID_FIELD.name = "need_item_id"
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_ID_FIELD.full_name = ".ftcfg.building_mission_pool_cfg.need_item_id"
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_ID_FIELD.number = 2
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_ID_FIELD.index = 1
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_ID_FIELD.label = 2
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_ID_FIELD.has_default_value = false
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_ID_FIELD.default_value = 0
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_ID_FIELD.type = 5
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_ID_FIELD.cpp_type = 1
+
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_NUMBER_FIELD.name = "need_item_number"
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_NUMBER_FIELD.full_name = ".ftcfg.building_mission_pool_cfg.need_item_number"
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_NUMBER_FIELD.number = 3
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_NUMBER_FIELD.index = 2
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_NUMBER_FIELD.label = 2
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_NUMBER_FIELD.has_default_value = false
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_NUMBER_FIELD.default_value = 0
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_NUMBER_FIELD.type = 5
+BUILDING_MISSION_POOL_CFG_NEED_ITEM_NUMBER_FIELD.cpp_type = 1
+
+BUILDING_MISSION_POOL_CFG_IS_HELP_FIELD.name = "is_help"
+BUILDING_MISSION_POOL_CFG_IS_HELP_FIELD.full_name = ".ftcfg.building_mission_pool_cfg.is_help"
+BUILDING_MISSION_POOL_CFG_IS_HELP_FIELD.number = 4
+BUILDING_MISSION_POOL_CFG_IS_HELP_FIELD.index = 3
+BUILDING_MISSION_POOL_CFG_IS_HELP_FIELD.label = 2
+BUILDING_MISSION_POOL_CFG_IS_HELP_FIELD.has_default_value = false
+BUILDING_MISSION_POOL_CFG_IS_HELP_FIELD.default_value = false
+BUILDING_MISSION_POOL_CFG_IS_HELP_FIELD.type = 8
+BUILDING_MISSION_POOL_CFG_IS_HELP_FIELD.cpp_type = 7
+
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_FIELD.name = "buy_coin_type"
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_FIELD.full_name = ".ftcfg.building_mission_pool_cfg.buy_coin_type"
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_FIELD.number = 5
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_FIELD.index = 4
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_FIELD.label = 2
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_FIELD.has_default_value = false
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_FIELD.default_value = 0
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_FIELD.type = 5
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_FIELD.cpp_type = 1
+
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_NEMBER_FIELD.name = "buy_coin_type_nember"
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_NEMBER_FIELD.full_name = ".ftcfg.building_mission_pool_cfg.buy_coin_type_nember"
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_NEMBER_FIELD.number = 6
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_NEMBER_FIELD.index = 5
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_NEMBER_FIELD.label = 2
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_NEMBER_FIELD.has_default_value = false
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_NEMBER_FIELD.default_value = 0
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_NEMBER_FIELD.type = 5
+BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_NEMBER_FIELD.cpp_type = 1
+
+BUILDING_MISSION_POOL_CFG_HELP_REWARD_FIELD.name = "help_reward"
+BUILDING_MISSION_POOL_CFG_HELP_REWARD_FIELD.full_name = ".ftcfg.building_mission_pool_cfg.help_reward"
+BUILDING_MISSION_POOL_CFG_HELP_REWARD_FIELD.number = 7
+BUILDING_MISSION_POOL_CFG_HELP_REWARD_FIELD.index = 6
+BUILDING_MISSION_POOL_CFG_HELP_REWARD_FIELD.label = 2
+BUILDING_MISSION_POOL_CFG_HELP_REWARD_FIELD.has_default_value = false
+BUILDING_MISSION_POOL_CFG_HELP_REWARD_FIELD.default_value = 0
+BUILDING_MISSION_POOL_CFG_HELP_REWARD_FIELD.type = 5
+BUILDING_MISSION_POOL_CFG_HELP_REWARD_FIELD.cpp_type = 1
+
+BUILDING_MISSION_POOL_CFG.name = "building_mission_pool_cfg"
+BUILDING_MISSION_POOL_CFG.full_name = ".ftcfg.building_mission_pool_cfg"
+BUILDING_MISSION_POOL_CFG.nested_types = {}
+BUILDING_MISSION_POOL_CFG.enum_types = {}
+BUILDING_MISSION_POOL_CFG.fields = {BUILDING_MISSION_POOL_CFG_ID_FIELD, BUILDING_MISSION_POOL_CFG_NEED_ITEM_ID_FIELD, BUILDING_MISSION_POOL_CFG_NEED_ITEM_NUMBER_FIELD, BUILDING_MISSION_POOL_CFG_IS_HELP_FIELD, BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_FIELD, BUILDING_MISSION_POOL_CFG_BUY_COIN_TYPE_NEMBER_FIELD, BUILDING_MISSION_POOL_CFG_HELP_REWARD_FIELD}
+BUILDING_MISSION_POOL_CFG.is_extendable = false
+BUILDING_MISSION_POOL_CFG.extensions = {}
+BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD.name = "items"
+BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD.full_name = ".ftcfg.building_mission_pool_cfgs.items"
+BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD.number = 1
+BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD.index = 0
+BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD.label = 3
+BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD.has_default_value = false
+BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD.default_value = {}
+BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD.message_type = BUILDING_MISSION_POOL_CFG
+BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD.type = 11
+BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BUILDING_MISSION_POOL_CFGS.name = "building_mission_pool_cfgs"
+BUILDING_MISSION_POOL_CFGS.full_name = ".ftcfg.building_mission_pool_cfgs"
+BUILDING_MISSION_POOL_CFGS.nested_types = {}
+BUILDING_MISSION_POOL_CFGS.enum_types = {}
+BUILDING_MISSION_POOL_CFGS.fields = {BUILDING_MISSION_POOL_CFGS_ITEMS_FIELD}
+BUILDING_MISSION_POOL_CFGS.is_extendable = false
+BUILDING_MISSION_POOL_CFGS.extensions = {}
+GUILD_MISSION_BASE_CFG_ID_FIELD.name = "id"
+GUILD_MISSION_BASE_CFG_ID_FIELD.full_name = ".ftcfg.guild_mission_base_cfg.id"
+GUILD_MISSION_BASE_CFG_ID_FIELD.number = 1
+GUILD_MISSION_BASE_CFG_ID_FIELD.index = 0
+GUILD_MISSION_BASE_CFG_ID_FIELD.label = 2
+GUILD_MISSION_BASE_CFG_ID_FIELD.has_default_value = false
+GUILD_MISSION_BASE_CFG_ID_FIELD.default_value = 0
+GUILD_MISSION_BASE_CFG_ID_FIELD.type = 13
+GUILD_MISSION_BASE_CFG_ID_FIELD.cpp_type = 3
+
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_WHITE_FIELD.name = "quality_probability_white"
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_WHITE_FIELD.full_name = ".ftcfg.guild_mission_base_cfg.quality_probability_white"
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_WHITE_FIELD.number = 2
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_WHITE_FIELD.index = 1
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_WHITE_FIELD.label = 2
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_WHITE_FIELD.has_default_value = false
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_WHITE_FIELD.default_value = 0
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_WHITE_FIELD.type = 5
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_WHITE_FIELD.cpp_type = 1
+
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_GREEN_FIELD.name = "quality_probability_Green"
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_GREEN_FIELD.full_name = ".ftcfg.guild_mission_base_cfg.quality_probability_Green"
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_GREEN_FIELD.number = 3
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_GREEN_FIELD.index = 2
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_GREEN_FIELD.label = 2
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_GREEN_FIELD.has_default_value = false
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_GREEN_FIELD.default_value = 0
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_GREEN_FIELD.type = 5
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_GREEN_FIELD.cpp_type = 1
+
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_BLUE_FIELD.name = "quality_probability_Blue"
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_BLUE_FIELD.full_name = ".ftcfg.guild_mission_base_cfg.quality_probability_Blue"
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_BLUE_FIELD.number = 4
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_BLUE_FIELD.index = 3
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_BLUE_FIELD.label = 2
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_BLUE_FIELD.has_default_value = false
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_BLUE_FIELD.default_value = 0
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_BLUE_FIELD.type = 5
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_BLUE_FIELD.cpp_type = 1
+
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_PURPLE_FIELD.name = "quality_probability_Purple"
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_PURPLE_FIELD.full_name = ".ftcfg.guild_mission_base_cfg.quality_probability_Purple"
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_PURPLE_FIELD.number = 5
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_PURPLE_FIELD.index = 4
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_PURPLE_FIELD.label = 2
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_PURPLE_FIELD.has_default_value = false
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_PURPLE_FIELD.default_value = 0
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_PURPLE_FIELD.type = 5
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_PURPLE_FIELD.cpp_type = 1
+
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_ORANGE_FIELD.name = "quality_probability_Orange"
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_ORANGE_FIELD.full_name = ".ftcfg.guild_mission_base_cfg.quality_probability_Orange"
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_ORANGE_FIELD.number = 6
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_ORANGE_FIELD.index = 5
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_ORANGE_FIELD.label = 2
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_ORANGE_FIELD.has_default_value = false
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_ORANGE_FIELD.default_value = 0
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_ORANGE_FIELD.type = 5
+GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_ORANGE_FIELD.cpp_type = 1
+
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_FIELD.name = "refresh_cost_item"
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_FIELD.full_name = ".ftcfg.guild_mission_base_cfg.refresh_cost_item"
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_FIELD.number = 7
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_FIELD.index = 6
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_FIELD.label = 2
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_FIELD.has_default_value = false
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_FIELD.default_value = 0
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_FIELD.type = 5
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_FIELD.cpp_type = 1
+
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_NUMBER_FIELD.name = "refresh_cost_item_number"
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_NUMBER_FIELD.full_name = ".ftcfg.guild_mission_base_cfg.refresh_cost_item_number"
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_NUMBER_FIELD.number = 8
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_NUMBER_FIELD.index = 7
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_NUMBER_FIELD.label = 2
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_NUMBER_FIELD.has_default_value = false
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_NUMBER_FIELD.default_value = 0
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_NUMBER_FIELD.type = 5
+GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_NUMBER_FIELD.cpp_type = 1
+
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_TYPE_FIELD.name = "refresh_cost_cion_type"
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_TYPE_FIELD.full_name = ".ftcfg.guild_mission_base_cfg.refresh_cost_cion_type"
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_TYPE_FIELD.number = 9
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_TYPE_FIELD.index = 8
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_TYPE_FIELD.label = 2
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_TYPE_FIELD.has_default_value = false
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_TYPE_FIELD.default_value = 0
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_TYPE_FIELD.type = 5
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_TYPE_FIELD.cpp_type = 1
+
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_NUMBER_FIELD.name = "refresh_cost_cion_number"
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_NUMBER_FIELD.full_name = ".ftcfg.guild_mission_base_cfg.refresh_cost_cion_number"
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_NUMBER_FIELD.number = 10
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_NUMBER_FIELD.index = 9
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_NUMBER_FIELD.label = 2
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_NUMBER_FIELD.has_default_value = false
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_NUMBER_FIELD.default_value = 0
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_NUMBER_FIELD.type = 5
+GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_NUMBER_FIELD.cpp_type = 1
+
+GUILD_MISSION_BASE_CFG.name = "guild_mission_base_cfg"
+GUILD_MISSION_BASE_CFG.full_name = ".ftcfg.guild_mission_base_cfg"
+GUILD_MISSION_BASE_CFG.nested_types = {}
+GUILD_MISSION_BASE_CFG.enum_types = {}
+GUILD_MISSION_BASE_CFG.fields = {GUILD_MISSION_BASE_CFG_ID_FIELD, GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_WHITE_FIELD, GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_GREEN_FIELD, GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_BLUE_FIELD, GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_PURPLE_FIELD, GUILD_MISSION_BASE_CFG_QUALITY_PROBABILITY_ORANGE_FIELD, GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_FIELD, GUILD_MISSION_BASE_CFG_REFRESH_COST_ITEM_NUMBER_FIELD, GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_TYPE_FIELD, GUILD_MISSION_BASE_CFG_REFRESH_COST_CION_NUMBER_FIELD}
+GUILD_MISSION_BASE_CFG.is_extendable = false
+GUILD_MISSION_BASE_CFG.extensions = {}
+GUILD_MISSION_BASE_CFGS_ITEMS_FIELD.name = "items"
+GUILD_MISSION_BASE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.guild_mission_base_cfgs.items"
+GUILD_MISSION_BASE_CFGS_ITEMS_FIELD.number = 1
+GUILD_MISSION_BASE_CFGS_ITEMS_FIELD.index = 0
+GUILD_MISSION_BASE_CFGS_ITEMS_FIELD.label = 3
+GUILD_MISSION_BASE_CFGS_ITEMS_FIELD.has_default_value = false
+GUILD_MISSION_BASE_CFGS_ITEMS_FIELD.default_value = {}
+GUILD_MISSION_BASE_CFGS_ITEMS_FIELD.message_type = GUILD_MISSION_BASE_CFG
+GUILD_MISSION_BASE_CFGS_ITEMS_FIELD.type = 11
+GUILD_MISSION_BASE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GUILD_MISSION_BASE_CFGS.name = "guild_mission_base_cfgs"
+GUILD_MISSION_BASE_CFGS.full_name = ".ftcfg.guild_mission_base_cfgs"
+GUILD_MISSION_BASE_CFGS.nested_types = {}
+GUILD_MISSION_BASE_CFGS.enum_types = {}
+GUILD_MISSION_BASE_CFGS.fields = {GUILD_MISSION_BASE_CFGS_ITEMS_FIELD}
+GUILD_MISSION_BASE_CFGS.is_extendable = false
+GUILD_MISSION_BASE_CFGS.extensions = {}
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_GROUP_FIELD.name = "guild_practice_group"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_GROUP_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_group"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_GROUP_FIELD.number = 1
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_GROUP_FIELD.index = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_GROUP_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_GROUP_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_GROUP_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_GROUP_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_GROUP_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_LEVEL_FIELD.name = "guild_practice_level"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_LEVEL_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_level"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_LEVEL_FIELD.number = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_LEVEL_FIELD.index = 1
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_LEVEL_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_LEVEL_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_LEVEL_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_LEVEL_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_LEVEL_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_TYPE_FIELD.name = "guild_practice_type"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_TYPE_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_type"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_TYPE_FIELD.number = 3
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_TYPE_FIELD.index = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_TYPE_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_TYPE_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_TYPE_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_TYPE_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_TYPE_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ICON_FIELD.name = "guild_practice_icon"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ICON_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_icon"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ICON_FIELD.number = 4
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ICON_FIELD.index = 3
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ICON_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ICON_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ICON_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ICON_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ICON_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_NAME_FIELD.name = "guild_practice_name"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_NAME_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_name"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_NAME_FIELD.number = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_NAME_FIELD.index = 4
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_NAME_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_NAME_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_NAME_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_NAME_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_NAME_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EFFECT_DESCRIBE_FIELD.name = "guild_practice_effect_describe"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EFFECT_DESCRIBE_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_effect_describe"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EFFECT_DESCRIBE_FIELD.number = 6
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EFFECT_DESCRIBE_FIELD.index = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EFFECT_DESCRIBE_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EFFECT_DESCRIBE_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EFFECT_DESCRIBE_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EFFECT_DESCRIBE_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EFFECT_DESCRIBE_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BATTLE_FIELD.name = "guild_practice_battle"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BATTLE_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_battle"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BATTLE_FIELD.number = 7
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BATTLE_FIELD.index = 6
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BATTLE_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BATTLE_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BATTLE_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BATTLE_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BATTLE_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_LEVEL_FIELD.name = "guild_practice_cost_level"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_LEVEL_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_cost_level"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_LEVEL_FIELD.number = 8
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_LEVEL_FIELD.index = 7
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_LEVEL_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_LEVEL_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_LEVEL_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_LEVEL_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_LEVEL_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE1_FIELD.name = "guild_practice_cost_cointype1"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE1_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_cost_cointype1"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE1_FIELD.number = 9
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE1_FIELD.index = 8
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE1_FIELD.label = 3
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE1_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE1_FIELD.default_value = {}
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE1_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE1_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE2_FIELD.name = "guild_practice_cost_cointype2"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE2_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_cost_cointype2"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE2_FIELD.number = 10
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE2_FIELD.index = 9
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE2_FIELD.label = 3
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE2_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE2_FIELD.default_value = {}
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE2_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE2_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_ITEM_FIELD.name = "guild_practice_cost_item"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_ITEM_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_cost_item"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_ITEM_FIELD.number = 11
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_ITEM_FIELD.index = 10
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_ITEM_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_ITEM_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_ITEM_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_ITEM_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_ITEM_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_NUMBER_FIELD.name = "guild_practice_cost_number"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_NUMBER_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_cost_number"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_NUMBER_FIELD.number = 12
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_NUMBER_FIELD.index = 11
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_NUMBER_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_NUMBER_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_NUMBER_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_NUMBER_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_NUMBER_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_FIELD.name = "guild_practice_exp"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_exp"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_FIELD.number = 13
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_FIELD.index = 12
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_MAX_FIELD.name = "guild_practice_exp_max"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_MAX_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_exp_max"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_MAX_FIELD.number = 14
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_MAX_FIELD.index = 13
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_MAX_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_MAX_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_MAX_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_MAX_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_MAX_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ATTRIBUTE_FIELD.name = "guild_practice_attribute"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ATTRIBUTE_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_attribute"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ATTRIBUTE_FIELD.number = 15
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ATTRIBUTE_FIELD.index = 14
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ATTRIBUTE_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ATTRIBUTE_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ATTRIBUTE_FIELD.default_value = ""
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ATTRIBUTE_FIELD.type = 9
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ATTRIBUTE_FIELD.cpp_type = 9
+
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BUFF_FIELD.name = "guild_practice_buff"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BUFF_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfg.guild_practice_buff"
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BUFF_FIELD.number = 16
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BUFF_FIELD.index = 15
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BUFF_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BUFF_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BUFF_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BUFF_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BUFF_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CONT_CFG.name = "guild_practice_group_cont_cfg"
+GUILD_PRACTICE_GROUP_CONT_CFG.full_name = ".ftcfg.guild_practice_group_cont_cfg"
+GUILD_PRACTICE_GROUP_CONT_CFG.nested_types = {}
+GUILD_PRACTICE_GROUP_CONT_CFG.enum_types = {}
+GUILD_PRACTICE_GROUP_CONT_CFG.fields = {GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_GROUP_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_LEVEL_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_TYPE_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ICON_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_NAME_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EFFECT_DESCRIBE_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BATTLE_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_LEVEL_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE1_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_COINTYPE2_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_ITEM_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_COST_NUMBER_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_EXP_MAX_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_ATTRIBUTE_FIELD, GUILD_PRACTICE_GROUP_CONT_CFG_GUILD_PRACTICE_BUFF_FIELD}
+GUILD_PRACTICE_GROUP_CONT_CFG.is_extendable = false
+GUILD_PRACTICE_GROUP_CONT_CFG.extensions = {}
+GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD.name = "items"
+GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.guild_practice_group_cont_cfgs.items"
+GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD.number = 1
+GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD.index = 0
+GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD.label = 3
+GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD.default_value = {}
+GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD.message_type = GUILD_PRACTICE_GROUP_CONT_CFG
+GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD.type = 11
+GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GUILD_PRACTICE_GROUP_CONT_CFGS.name = "guild_practice_group_cont_cfgs"
+GUILD_PRACTICE_GROUP_CONT_CFGS.full_name = ".ftcfg.guild_practice_group_cont_cfgs"
+GUILD_PRACTICE_GROUP_CONT_CFGS.nested_types = {}
+GUILD_PRACTICE_GROUP_CONT_CFGS.enum_types = {}
+GUILD_PRACTICE_GROUP_CONT_CFGS.fields = {GUILD_PRACTICE_GROUP_CONT_CFGS_ITEMS_FIELD}
+GUILD_PRACTICE_GROUP_CONT_CFGS.is_extendable = false
+GUILD_PRACTICE_GROUP_CONT_CFGS.extensions = {}
+GUILD_PRACTICE_GROUP_CFG_ID_FIELD.name = "id"
+GUILD_PRACTICE_GROUP_CFG_ID_FIELD.full_name = ".ftcfg.guild_practice_group_cfg.id"
+GUILD_PRACTICE_GROUP_CFG_ID_FIELD.number = 1
+GUILD_PRACTICE_GROUP_CFG_ID_FIELD.index = 0
+GUILD_PRACTICE_GROUP_CFG_ID_FIELD.label = 2
+GUILD_PRACTICE_GROUP_CFG_ID_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CFG_ID_FIELD.default_value = 0
+GUILD_PRACTICE_GROUP_CFG_ID_FIELD.type = 13
+GUILD_PRACTICE_GROUP_CFG_ID_FIELD.cpp_type = 3
+
+GUILD_PRACTICE_GROUP_CFG_GUILD_PRACTICE_GROUP_FIELD.name = "guild_practice_group"
+GUILD_PRACTICE_GROUP_CFG_GUILD_PRACTICE_GROUP_FIELD.full_name = ".ftcfg.guild_practice_group_cfg.guild_practice_group"
+GUILD_PRACTICE_GROUP_CFG_GUILD_PRACTICE_GROUP_FIELD.number = 2
+GUILD_PRACTICE_GROUP_CFG_GUILD_PRACTICE_GROUP_FIELD.index = 1
+GUILD_PRACTICE_GROUP_CFG_GUILD_PRACTICE_GROUP_FIELD.label = 3
+GUILD_PRACTICE_GROUP_CFG_GUILD_PRACTICE_GROUP_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CFG_GUILD_PRACTICE_GROUP_FIELD.default_value = {}
+GUILD_PRACTICE_GROUP_CFG_GUILD_PRACTICE_GROUP_FIELD.type = 5
+GUILD_PRACTICE_GROUP_CFG_GUILD_PRACTICE_GROUP_FIELD.cpp_type = 1
+
+GUILD_PRACTICE_GROUP_CFG.name = "guild_practice_group_cfg"
+GUILD_PRACTICE_GROUP_CFG.full_name = ".ftcfg.guild_practice_group_cfg"
+GUILD_PRACTICE_GROUP_CFG.nested_types = {}
+GUILD_PRACTICE_GROUP_CFG.enum_types = {}
+GUILD_PRACTICE_GROUP_CFG.fields = {GUILD_PRACTICE_GROUP_CFG_ID_FIELD, GUILD_PRACTICE_GROUP_CFG_GUILD_PRACTICE_GROUP_FIELD}
+GUILD_PRACTICE_GROUP_CFG.is_extendable = false
+GUILD_PRACTICE_GROUP_CFG.extensions = {}
+GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD.name = "items"
+GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.guild_practice_group_cfgs.items"
+GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD.number = 1
+GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD.index = 0
+GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD.label = 3
+GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD.has_default_value = false
+GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD.default_value = {}
+GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD.message_type = GUILD_PRACTICE_GROUP_CFG
+GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD.type = 11
+GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GUILD_PRACTICE_GROUP_CFGS.name = "guild_practice_group_cfgs"
+GUILD_PRACTICE_GROUP_CFGS.full_name = ".ftcfg.guild_practice_group_cfgs"
+GUILD_PRACTICE_GROUP_CFGS.nested_types = {}
+GUILD_PRACTICE_GROUP_CFGS.enum_types = {}
+GUILD_PRACTICE_GROUP_CFGS.fields = {GUILD_PRACTICE_GROUP_CFGS_ITEMS_FIELD}
+GUILD_PRACTICE_GROUP_CFGS.is_extendable = false
+GUILD_PRACTICE_GROUP_CFGS.extensions = {}
+GUILD_BASE_CFG_ID_FIELD.name = "id"
+GUILD_BASE_CFG_ID_FIELD.full_name = ".ftcfg.guild_base_cfg.id"
+GUILD_BASE_CFG_ID_FIELD.number = 1
+GUILD_BASE_CFG_ID_FIELD.index = 0
+GUILD_BASE_CFG_ID_FIELD.label = 2
+GUILD_BASE_CFG_ID_FIELD.has_default_value = false
+GUILD_BASE_CFG_ID_FIELD.default_value = 0
+GUILD_BASE_CFG_ID_FIELD.type = 13
+GUILD_BASE_CFG_ID_FIELD.cpp_type = 3
+
+GUILD_BASE_CFG_GUILD_REMOVE_COST_MONEY_FIELD.name = "Guild_remove_cost_money"
+GUILD_BASE_CFG_GUILD_REMOVE_COST_MONEY_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_remove_cost_money"
+GUILD_BASE_CFG_GUILD_REMOVE_COST_MONEY_FIELD.number = 2
+GUILD_BASE_CFG_GUILD_REMOVE_COST_MONEY_FIELD.index = 1
+GUILD_BASE_CFG_GUILD_REMOVE_COST_MONEY_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_REMOVE_COST_MONEY_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_REMOVE_COST_MONEY_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_REMOVE_COST_MONEY_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_REMOVE_COST_MONEY_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_DAY_COST_MONEY_FIELD.name = "Day_cost_money"
+GUILD_BASE_CFG_DAY_COST_MONEY_FIELD.full_name = ".ftcfg.guild_base_cfg.Day_cost_money"
+GUILD_BASE_CFG_DAY_COST_MONEY_FIELD.number = 3
+GUILD_BASE_CFG_DAY_COST_MONEY_FIELD.index = 2
+GUILD_BASE_CFG_DAY_COST_MONEY_FIELD.label = 2
+GUILD_BASE_CFG_DAY_COST_MONEY_FIELD.has_default_value = false
+GUILD_BASE_CFG_DAY_COST_MONEY_FIELD.default_value = 0
+GUILD_BASE_CFG_DAY_COST_MONEY_FIELD.type = 5
+GUILD_BASE_CFG_DAY_COST_MONEY_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_UPPER_LIMIT_FIELD.name = "Guild_upper_limit"
+GUILD_BASE_CFG_GUILD_UPPER_LIMIT_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_upper_limit"
+GUILD_BASE_CFG_GUILD_UPPER_LIMIT_FIELD.number = 4
+GUILD_BASE_CFG_GUILD_UPPER_LIMIT_FIELD.index = 3
+GUILD_BASE_CFG_GUILD_UPPER_LIMIT_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_UPPER_LIMIT_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_UPPER_LIMIT_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_UPPER_LIMIT_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_UPPER_LIMIT_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_APPRENTICE_LIMIT_FIELD.name = "Guild_apprentice_limit"
+GUILD_BASE_CFG_GUILD_APPRENTICE_LIMIT_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_apprentice_limit"
+GUILD_BASE_CFG_GUILD_APPRENTICE_LIMIT_FIELD.number = 5
+GUILD_BASE_CFG_GUILD_APPRENTICE_LIMIT_FIELD.index = 4
+GUILD_BASE_CFG_GUILD_APPRENTICE_LIMIT_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_APPRENTICE_LIMIT_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_APPRENTICE_LIMIT_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_APPRENTICE_LIMIT_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_APPRENTICE_LIMIT_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_VICE_LEADER_LIMIT_FIELD.name = "Guild_vice_leader_limit"
+GUILD_BASE_CFG_GUILD_VICE_LEADER_LIMIT_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_vice_leader_limit"
+GUILD_BASE_CFG_GUILD_VICE_LEADER_LIMIT_FIELD.number = 6
+GUILD_BASE_CFG_GUILD_VICE_LEADER_LIMIT_FIELD.index = 5
+GUILD_BASE_CFG_GUILD_VICE_LEADER_LIMIT_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_VICE_LEADER_LIMIT_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_VICE_LEADER_LIMIT_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_VICE_LEADER_LIMIT_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_VICE_LEADER_LIMIT_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_ELITE_LIMIT_FIELD.name = "Guild_elite_limit"
+GUILD_BASE_CFG_GUILD_ELITE_LIMIT_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_elite_limit"
+GUILD_BASE_CFG_GUILD_ELITE_LIMIT_FIELD.number = 7
+GUILD_BASE_CFG_GUILD_ELITE_LIMIT_FIELD.index = 6
+GUILD_BASE_CFG_GUILD_ELITE_LIMIT_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_ELITE_LIMIT_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_ELITE_LIMIT_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_ELITE_LIMIT_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_ELITE_LIMIT_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_BABY_LIMIT_FIELD.name = "Guild_baby_limit"
+GUILD_BASE_CFG_GUILD_BABY_LIMIT_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_baby_limit"
+GUILD_BASE_CFG_GUILD_BABY_LIMIT_FIELD.number = 8
+GUILD_BASE_CFG_GUILD_BABY_LIMIT_FIELD.index = 7
+GUILD_BASE_CFG_GUILD_BABY_LIMIT_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_BABY_LIMIT_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_BABY_LIMIT_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_BABY_LIMIT_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_BABY_LIMIT_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_UNLOCK_SHOP_FIELD.name = "Guild_unlock_shop"
+GUILD_BASE_CFG_GUILD_UNLOCK_SHOP_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_unlock_shop"
+GUILD_BASE_CFG_GUILD_UNLOCK_SHOP_FIELD.number = 9
+GUILD_BASE_CFG_GUILD_UNLOCK_SHOP_FIELD.index = 8
+GUILD_BASE_CFG_GUILD_UNLOCK_SHOP_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_UNLOCK_SHOP_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_UNLOCK_SHOP_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_UNLOCK_SHOP_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_UNLOCK_SHOP_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_UNLOCK_TASK_FIELD.name = "Guild_unlock_task"
+GUILD_BASE_CFG_GUILD_UNLOCK_TASK_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_unlock_task"
+GUILD_BASE_CFG_GUILD_UNLOCK_TASK_FIELD.number = 10
+GUILD_BASE_CFG_GUILD_UNLOCK_TASK_FIELD.index = 9
+GUILD_BASE_CFG_GUILD_UNLOCK_TASK_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_UNLOCK_TASK_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_UNLOCK_TASK_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_UNLOCK_TASK_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_UNLOCK_TASK_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_UNLOCK_LEVELUP_FIELD.name = "Guild_unlock_levelup"
+GUILD_BASE_CFG_GUILD_UNLOCK_LEVELUP_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_unlock_levelup"
+GUILD_BASE_CFG_GUILD_UNLOCK_LEVELUP_FIELD.number = 11
+GUILD_BASE_CFG_GUILD_UNLOCK_LEVELUP_FIELD.index = 10
+GUILD_BASE_CFG_GUILD_UNLOCK_LEVELUP_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_UNLOCK_LEVELUP_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_UNLOCK_LEVELUP_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_UNLOCK_LEVELUP_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_UNLOCK_LEVELUP_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_UNLOCK_GUIDANCE_FIELD.name = "Guild_unlock_guidance"
+GUILD_BASE_CFG_GUILD_UNLOCK_GUIDANCE_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_unlock_guidance"
+GUILD_BASE_CFG_GUILD_UNLOCK_GUIDANCE_FIELD.number = 12
+GUILD_BASE_CFG_GUILD_UNLOCK_GUIDANCE_FIELD.index = 11
+GUILD_BASE_CFG_GUILD_UNLOCK_GUIDANCE_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_UNLOCK_GUIDANCE_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_UNLOCK_GUIDANCE_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_UNLOCK_GUIDANCE_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_UNLOCK_GUIDANCE_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_TASK_FIELD.name = "Guild_unlock_build_task"
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_TASK_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_unlock_build_task"
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_TASK_FIELD.number = 13
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_TASK_FIELD.index = 12
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_TASK_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_TASK_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_TASK_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_TASK_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_TASK_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_PRACTICE_FIELD.name = "Guild_unlock_build_practice"
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_PRACTICE_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_unlock_build_practice"
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_PRACTICE_FIELD.number = 14
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_PRACTICE_FIELD.index = 13
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_PRACTICE_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_PRACTICE_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_PRACTICE_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_PRACTICE_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_PRACTICE_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_PRACTICE_HELP_MAX_FIELD.name = "Guild_practice_help_max"
+GUILD_BASE_CFG_GUILD_PRACTICE_HELP_MAX_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_practice_help_max"
+GUILD_BASE_CFG_GUILD_PRACTICE_HELP_MAX_FIELD.number = 15
+GUILD_BASE_CFG_GUILD_PRACTICE_HELP_MAX_FIELD.index = 14
+GUILD_BASE_CFG_GUILD_PRACTICE_HELP_MAX_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_PRACTICE_HELP_MAX_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_PRACTICE_HELP_MAX_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_PRACTICE_HELP_MAX_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_PRACTICE_HELP_MAX_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE1_FIELD.name = "Guild_type_practice1"
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE1_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_type_practice1"
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE1_FIELD.number = 16
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE1_FIELD.index = 15
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE1_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE1_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE1_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE1_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE1_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE2_FIELD.name = "Guild_type_practice2"
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE2_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_type_practice2"
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE2_FIELD.number = 17
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE2_FIELD.index = 16
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE2_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE2_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE2_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE2_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_TYPE_PRACTICE2_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_NAME_COST_TYPE_FIELD.name = "Guild_name_cost_type"
+GUILD_BASE_CFG_GUILD_NAME_COST_TYPE_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_name_cost_type"
+GUILD_BASE_CFG_GUILD_NAME_COST_TYPE_FIELD.number = 18
+GUILD_BASE_CFG_GUILD_NAME_COST_TYPE_FIELD.index = 17
+GUILD_BASE_CFG_GUILD_NAME_COST_TYPE_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_NAME_COST_TYPE_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_NAME_COST_TYPE_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_NAME_COST_TYPE_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_NAME_COST_TYPE_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG_GUILD_NAME_COST_NUMBER_FIELD.name = "Guild_name_cost_number"
+GUILD_BASE_CFG_GUILD_NAME_COST_NUMBER_FIELD.full_name = ".ftcfg.guild_base_cfg.Guild_name_cost_number"
+GUILD_BASE_CFG_GUILD_NAME_COST_NUMBER_FIELD.number = 19
+GUILD_BASE_CFG_GUILD_NAME_COST_NUMBER_FIELD.index = 18
+GUILD_BASE_CFG_GUILD_NAME_COST_NUMBER_FIELD.label = 2
+GUILD_BASE_CFG_GUILD_NAME_COST_NUMBER_FIELD.has_default_value = false
+GUILD_BASE_CFG_GUILD_NAME_COST_NUMBER_FIELD.default_value = 0
+GUILD_BASE_CFG_GUILD_NAME_COST_NUMBER_FIELD.type = 5
+GUILD_BASE_CFG_GUILD_NAME_COST_NUMBER_FIELD.cpp_type = 1
+
+GUILD_BASE_CFG.name = "guild_base_cfg"
+GUILD_BASE_CFG.full_name = ".ftcfg.guild_base_cfg"
+GUILD_BASE_CFG.nested_types = {}
+GUILD_BASE_CFG.enum_types = {}
+GUILD_BASE_CFG.fields = {GUILD_BASE_CFG_ID_FIELD, GUILD_BASE_CFG_GUILD_REMOVE_COST_MONEY_FIELD, GUILD_BASE_CFG_DAY_COST_MONEY_FIELD, GUILD_BASE_CFG_GUILD_UPPER_LIMIT_FIELD, GUILD_BASE_CFG_GUILD_APPRENTICE_LIMIT_FIELD, GUILD_BASE_CFG_GUILD_VICE_LEADER_LIMIT_FIELD, GUILD_BASE_CFG_GUILD_ELITE_LIMIT_FIELD, GUILD_BASE_CFG_GUILD_BABY_LIMIT_FIELD, GUILD_BASE_CFG_GUILD_UNLOCK_SHOP_FIELD, GUILD_BASE_CFG_GUILD_UNLOCK_TASK_FIELD, GUILD_BASE_CFG_GUILD_UNLOCK_LEVELUP_FIELD, GUILD_BASE_CFG_GUILD_UNLOCK_GUIDANCE_FIELD, GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_TASK_FIELD, GUILD_BASE_CFG_GUILD_UNLOCK_BUILD_PRACTICE_FIELD, GUILD_BASE_CFG_GUILD_PRACTICE_HELP_MAX_FIELD, GUILD_BASE_CFG_GUILD_TYPE_PRACTICE1_FIELD, GUILD_BASE_CFG_GUILD_TYPE_PRACTICE2_FIELD, GUILD_BASE_CFG_GUILD_NAME_COST_TYPE_FIELD, GUILD_BASE_CFG_GUILD_NAME_COST_NUMBER_FIELD}
+GUILD_BASE_CFG.is_extendable = false
+GUILD_BASE_CFG.extensions = {}
+GUILD_BASE_CFGS_ITEMS_FIELD.name = "items"
+GUILD_BASE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.guild_base_cfgs.items"
+GUILD_BASE_CFGS_ITEMS_FIELD.number = 1
+GUILD_BASE_CFGS_ITEMS_FIELD.index = 0
+GUILD_BASE_CFGS_ITEMS_FIELD.label = 3
+GUILD_BASE_CFGS_ITEMS_FIELD.has_default_value = false
+GUILD_BASE_CFGS_ITEMS_FIELD.default_value = {}
+GUILD_BASE_CFGS_ITEMS_FIELD.message_type = GUILD_BASE_CFG
+GUILD_BASE_CFGS_ITEMS_FIELD.type = 11
+GUILD_BASE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GUILD_BASE_CFGS.name = "guild_base_cfgs"
+GUILD_BASE_CFGS.full_name = ".ftcfg.guild_base_cfgs"
+GUILD_BASE_CFGS.nested_types = {}
+GUILD_BASE_CFGS.enum_types = {}
+GUILD_BASE_CFGS.fields = {GUILD_BASE_CFGS_ITEMS_FIELD}
+GUILD_BASE_CFGS.is_extendable = false
+GUILD_BASE_CFGS.extensions = {}
+GUILD_FLAG_CFG_ID_FIELD.name = "id"
+GUILD_FLAG_CFG_ID_FIELD.full_name = ".ftcfg.guild_flag_cfg.id"
+GUILD_FLAG_CFG_ID_FIELD.number = 1
+GUILD_FLAG_CFG_ID_FIELD.index = 0
+GUILD_FLAG_CFG_ID_FIELD.label = 2
+GUILD_FLAG_CFG_ID_FIELD.has_default_value = false
+GUILD_FLAG_CFG_ID_FIELD.default_value = 0
+GUILD_FLAG_CFG_ID_FIELD.type = 5
+GUILD_FLAG_CFG_ID_FIELD.cpp_type = 1
+
+GUILD_FLAG_CFG_GUILD_BIG_FLAG_ICON_FIELD.name = "Guild_big_flag_icon"
+GUILD_FLAG_CFG_GUILD_BIG_FLAG_ICON_FIELD.full_name = ".ftcfg.guild_flag_cfg.Guild_big_flag_icon"
+GUILD_FLAG_CFG_GUILD_BIG_FLAG_ICON_FIELD.number = 2
+GUILD_FLAG_CFG_GUILD_BIG_FLAG_ICON_FIELD.index = 1
+GUILD_FLAG_CFG_GUILD_BIG_FLAG_ICON_FIELD.label = 2
+GUILD_FLAG_CFG_GUILD_BIG_FLAG_ICON_FIELD.has_default_value = false
+GUILD_FLAG_CFG_GUILD_BIG_FLAG_ICON_FIELD.default_value = 0
+GUILD_FLAG_CFG_GUILD_BIG_FLAG_ICON_FIELD.type = 5
+GUILD_FLAG_CFG_GUILD_BIG_FLAG_ICON_FIELD.cpp_type = 1
+
+GUILD_FLAG_CFG_GUILD_SAMLL_FLAG_ICON_FIELD.name = "Guild_samll_flag_icon"
+GUILD_FLAG_CFG_GUILD_SAMLL_FLAG_ICON_FIELD.full_name = ".ftcfg.guild_flag_cfg.Guild_samll_flag_icon"
+GUILD_FLAG_CFG_GUILD_SAMLL_FLAG_ICON_FIELD.number = 3
+GUILD_FLAG_CFG_GUILD_SAMLL_FLAG_ICON_FIELD.index = 2
+GUILD_FLAG_CFG_GUILD_SAMLL_FLAG_ICON_FIELD.label = 2
+GUILD_FLAG_CFG_GUILD_SAMLL_FLAG_ICON_FIELD.has_default_value = false
+GUILD_FLAG_CFG_GUILD_SAMLL_FLAG_ICON_FIELD.default_value = ""
+GUILD_FLAG_CFG_GUILD_SAMLL_FLAG_ICON_FIELD.type = 9
+GUILD_FLAG_CFG_GUILD_SAMLL_FLAG_ICON_FIELD.cpp_type = 9
+
+GUILD_FLAG_CFG_GUILD_FLAG_MONEY_FIELD.name = "Guild_flag_money"
+GUILD_FLAG_CFG_GUILD_FLAG_MONEY_FIELD.full_name = ".ftcfg.guild_flag_cfg.Guild_flag_money"
+GUILD_FLAG_CFG_GUILD_FLAG_MONEY_FIELD.number = 4
+GUILD_FLAG_CFG_GUILD_FLAG_MONEY_FIELD.index = 3
+GUILD_FLAG_CFG_GUILD_FLAG_MONEY_FIELD.label = 2
+GUILD_FLAG_CFG_GUILD_FLAG_MONEY_FIELD.has_default_value = false
+GUILD_FLAG_CFG_GUILD_FLAG_MONEY_FIELD.default_value = 0
+GUILD_FLAG_CFG_GUILD_FLAG_MONEY_FIELD.type = 5
+GUILD_FLAG_CFG_GUILD_FLAG_MONEY_FIELD.cpp_type = 1
+
+GUILD_FLAG_CFG.name = "guild_flag_cfg"
+GUILD_FLAG_CFG.full_name = ".ftcfg.guild_flag_cfg"
+GUILD_FLAG_CFG.nested_types = {}
+GUILD_FLAG_CFG.enum_types = {}
+GUILD_FLAG_CFG.fields = {GUILD_FLAG_CFG_ID_FIELD, GUILD_FLAG_CFG_GUILD_BIG_FLAG_ICON_FIELD, GUILD_FLAG_CFG_GUILD_SAMLL_FLAG_ICON_FIELD, GUILD_FLAG_CFG_GUILD_FLAG_MONEY_FIELD}
+GUILD_FLAG_CFG.is_extendable = false
+GUILD_FLAG_CFG.extensions = {}
+GUILD_FLAG_CFGS_ITEMS_FIELD.name = "items"
+GUILD_FLAG_CFGS_ITEMS_FIELD.full_name = ".ftcfg.guild_flag_cfgs.items"
+GUILD_FLAG_CFGS_ITEMS_FIELD.number = 1
+GUILD_FLAG_CFGS_ITEMS_FIELD.index = 0
+GUILD_FLAG_CFGS_ITEMS_FIELD.label = 3
+GUILD_FLAG_CFGS_ITEMS_FIELD.has_default_value = false
+GUILD_FLAG_CFGS_ITEMS_FIELD.default_value = {}
+GUILD_FLAG_CFGS_ITEMS_FIELD.message_type = GUILD_FLAG_CFG
+GUILD_FLAG_CFGS_ITEMS_FIELD.type = 11
+GUILD_FLAG_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GUILD_FLAG_CFGS.name = "guild_flag_cfgs"
+GUILD_FLAG_CFGS.full_name = ".ftcfg.guild_flag_cfgs"
+GUILD_FLAG_CFGS.nested_types = {}
+GUILD_FLAG_CFGS.enum_types = {}
+GUILD_FLAG_CFGS.fields = {GUILD_FLAG_CFGS_ITEMS_FIELD}
+GUILD_FLAG_CFGS.is_extendable = false
+GUILD_FLAG_CFGS.extensions = {}
+GUIL_POST_CFG_ID_FIELD.name = "id"
+GUIL_POST_CFG_ID_FIELD.full_name = ".ftcfg.guil_post_cfg.id"
+GUIL_POST_CFG_ID_FIELD.number = 1
+GUIL_POST_CFG_ID_FIELD.index = 0
+GUIL_POST_CFG_ID_FIELD.label = 2
+GUIL_POST_CFG_ID_FIELD.has_default_value = false
+GUIL_POST_CFG_ID_FIELD.default_value = 0
+GUIL_POST_CFG_ID_FIELD.type = 13
+GUIL_POST_CFG_ID_FIELD.cpp_type = 3
+
+GUIL_POST_CFG_GUILD_POST_LANGUAGEID_FIELD.name = "Guild_post_languageid"
+GUIL_POST_CFG_GUILD_POST_LANGUAGEID_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_post_languageid"
+GUIL_POST_CFG_GUILD_POST_LANGUAGEID_FIELD.number = 2
+GUIL_POST_CFG_GUILD_POST_LANGUAGEID_FIELD.index = 1
+GUIL_POST_CFG_GUILD_POST_LANGUAGEID_FIELD.label = 2
+GUIL_POST_CFG_GUILD_POST_LANGUAGEID_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_POST_LANGUAGEID_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_POST_LANGUAGEID_FIELD.type = 5
+GUIL_POST_CFG_GUILD_POST_LANGUAGEID_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_REMOVE_FIELD.name = "Guild_remove"
+GUIL_POST_CFG_GUILD_REMOVE_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_remove"
+GUIL_POST_CFG_GUILD_REMOVE_FIELD.number = 3
+GUIL_POST_CFG_GUILD_REMOVE_FIELD.index = 2
+GUIL_POST_CFG_GUILD_REMOVE_FIELD.label = 2
+GUIL_POST_CFG_GUILD_REMOVE_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_REMOVE_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_REMOVE_FIELD.type = 5
+GUIL_POST_CFG_GUILD_REMOVE_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_MAIL_FIELD.name = "Guild_mail"
+GUIL_POST_CFG_GUILD_MAIL_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_mail"
+GUIL_POST_CFG_GUILD_MAIL_FIELD.number = 4
+GUIL_POST_CFG_GUILD_MAIL_FIELD.index = 3
+GUIL_POST_CFG_GUILD_MAIL_FIELD.label = 2
+GUIL_POST_CFG_GUILD_MAIL_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_MAIL_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_MAIL_FIELD.type = 5
+GUIL_POST_CFG_GUILD_MAIL_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_APPOINTMENT_FIELD.name = "Guild_appointment"
+GUIL_POST_CFG_GUILD_APPOINTMENT_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_appointment"
+GUIL_POST_CFG_GUILD_APPOINTMENT_FIELD.number = 5
+GUIL_POST_CFG_GUILD_APPOINTMENT_FIELD.index = 4
+GUIL_POST_CFG_GUILD_APPOINTMENT_FIELD.label = 2
+GUIL_POST_CFG_GUILD_APPOINTMENT_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_APPOINTMENT_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_APPOINTMENT_FIELD.type = 5
+GUIL_POST_CFG_GUILD_APPOINTMENT_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_EXPEL_FIELD.name = "Guild_expel"
+GUIL_POST_CFG_GUILD_EXPEL_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_expel"
+GUIL_POST_CFG_GUILD_EXPEL_FIELD.number = 6
+GUIL_POST_CFG_GUILD_EXPEL_FIELD.index = 5
+GUIL_POST_CFG_GUILD_EXPEL_FIELD.label = 2
+GUIL_POST_CFG_GUILD_EXPEL_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_EXPEL_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_EXPEL_FIELD.type = 5
+GUIL_POST_CFG_GUILD_EXPEL_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_INVITATION_FIELD.name = "Guild_invitation"
+GUIL_POST_CFG_GUILD_INVITATION_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_invitation"
+GUIL_POST_CFG_GUILD_INVITATION_FIELD.number = 7
+GUIL_POST_CFG_GUILD_INVITATION_FIELD.index = 6
+GUIL_POST_CFG_GUILD_INVITATION_FIELD.label = 2
+GUIL_POST_CFG_GUILD_INVITATION_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_INVITATION_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_INVITATION_FIELD.type = 5
+GUIL_POST_CFG_GUILD_INVITATION_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_APPROVAL_FIELD.name = "Guild_approval"
+GUIL_POST_CFG_GUILD_APPROVAL_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_approval"
+GUIL_POST_CFG_GUILD_APPROVAL_FIELD.number = 8
+GUIL_POST_CFG_GUILD_APPROVAL_FIELD.index = 7
+GUIL_POST_CFG_GUILD_APPROVAL_FIELD.label = 2
+GUIL_POST_CFG_GUILD_APPROVAL_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_APPROVAL_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_APPROVAL_FIELD.type = 5
+GUIL_POST_CFG_GUILD_APPROVAL_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_TEAM_FIELD.name = "Guild_team"
+GUIL_POST_CFG_GUILD_TEAM_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_team"
+GUIL_POST_CFG_GUILD_TEAM_FIELD.number = 9
+GUIL_POST_CFG_GUILD_TEAM_FIELD.index = 8
+GUIL_POST_CFG_GUILD_TEAM_FIELD.label = 2
+GUIL_POST_CFG_GUILD_TEAM_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_TEAM_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_TEAM_FIELD.type = 5
+GUIL_POST_CFG_GUILD_TEAM_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_CALL_FIELD.name = "Guild_call"
+GUIL_POST_CFG_GUILD_CALL_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_call"
+GUIL_POST_CFG_GUILD_CALL_FIELD.number = 10
+GUIL_POST_CFG_GUILD_CALL_FIELD.index = 9
+GUIL_POST_CFG_GUILD_CALL_FIELD.label = 2
+GUIL_POST_CFG_GUILD_CALL_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_CALL_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_CALL_FIELD.type = 5
+GUIL_POST_CFG_GUILD_CALL_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_HOSTILE_FIELD.name = "Guild_hostile"
+GUIL_POST_CFG_GUILD_HOSTILE_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_hostile"
+GUIL_POST_CFG_GUILD_HOSTILE_FIELD.number = 11
+GUIL_POST_CFG_GUILD_HOSTILE_FIELD.index = 10
+GUIL_POST_CFG_GUILD_HOSTILE_FIELD.label = 2
+GUIL_POST_CFG_GUILD_HOSTILE_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_HOSTILE_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_HOSTILE_FIELD.type = 5
+GUIL_POST_CFG_GUILD_HOSTILE_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_TERRITORIAL_TRANSFER_FIELD.name = "Guild_territorial_transfer"
+GUIL_POST_CFG_GUILD_TERRITORIAL_TRANSFER_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_territorial_transfer"
+GUIL_POST_CFG_GUILD_TERRITORIAL_TRANSFER_FIELD.number = 12
+GUIL_POST_CFG_GUILD_TERRITORIAL_TRANSFER_FIELD.index = 11
+GUIL_POST_CFG_GUILD_TERRITORIAL_TRANSFER_FIELD.label = 2
+GUIL_POST_CFG_GUILD_TERRITORIAL_TRANSFER_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_TERRITORIAL_TRANSFER_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_TERRITORIAL_TRANSFER_FIELD.type = 5
+GUIL_POST_CFG_GUILD_TERRITORIAL_TRANSFER_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_FLAG_MODIFY_FIELD.name = "Guild_flag_modify"
+GUIL_POST_CFG_GUILD_FLAG_MODIFY_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_flag_modify"
+GUIL_POST_CFG_GUILD_FLAG_MODIFY_FIELD.number = 13
+GUIL_POST_CFG_GUILD_FLAG_MODIFY_FIELD.index = 12
+GUIL_POST_CFG_GUILD_FLAG_MODIFY_FIELD.label = 2
+GUIL_POST_CFG_GUILD_FLAG_MODIFY_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_FLAG_MODIFY_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_FLAG_MODIFY_FIELD.type = 5
+GUIL_POST_CFG_GUILD_FLAG_MODIFY_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_NAME_MODIFY_FIELD.name = "Guild_name_modify"
+GUIL_POST_CFG_GUILD_NAME_MODIFY_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_name_modify"
+GUIL_POST_CFG_GUILD_NAME_MODIFY_FIELD.number = 14
+GUIL_POST_CFG_GUILD_NAME_MODIFY_FIELD.index = 13
+GUIL_POST_CFG_GUILD_NAME_MODIFY_FIELD.label = 2
+GUIL_POST_CFG_GUILD_NAME_MODIFY_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_NAME_MODIFY_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_NAME_MODIFY_FIELD.type = 5
+GUIL_POST_CFG_GUILD_NAME_MODIFY_FIELD.cpp_type = 1
+
+GUIL_POST_CFG_GUILD_NOTICE_FIELD.name = "Guild_notice"
+GUIL_POST_CFG_GUILD_NOTICE_FIELD.full_name = ".ftcfg.guil_post_cfg.Guild_notice"
+GUIL_POST_CFG_GUILD_NOTICE_FIELD.number = 15
+GUIL_POST_CFG_GUILD_NOTICE_FIELD.index = 14
+GUIL_POST_CFG_GUILD_NOTICE_FIELD.label = 2
+GUIL_POST_CFG_GUILD_NOTICE_FIELD.has_default_value = false
+GUIL_POST_CFG_GUILD_NOTICE_FIELD.default_value = 0
+GUIL_POST_CFG_GUILD_NOTICE_FIELD.type = 5
+GUIL_POST_CFG_GUILD_NOTICE_FIELD.cpp_type = 1
+
+GUIL_POST_CFG.name = "guil_post_cfg"
+GUIL_POST_CFG.full_name = ".ftcfg.guil_post_cfg"
+GUIL_POST_CFG.nested_types = {}
+GUIL_POST_CFG.enum_types = {}
+GUIL_POST_CFG.fields = {GUIL_POST_CFG_ID_FIELD, GUIL_POST_CFG_GUILD_POST_LANGUAGEID_FIELD, GUIL_POST_CFG_GUILD_REMOVE_FIELD, GUIL_POST_CFG_GUILD_MAIL_FIELD, GUIL_POST_CFG_GUILD_APPOINTMENT_FIELD, GUIL_POST_CFG_GUILD_EXPEL_FIELD, GUIL_POST_CFG_GUILD_INVITATION_FIELD, GUIL_POST_CFG_GUILD_APPROVAL_FIELD, GUIL_POST_CFG_GUILD_TEAM_FIELD, GUIL_POST_CFG_GUILD_CALL_FIELD, GUIL_POST_CFG_GUILD_HOSTILE_FIELD, GUIL_POST_CFG_GUILD_TERRITORIAL_TRANSFER_FIELD, GUIL_POST_CFG_GUILD_FLAG_MODIFY_FIELD, GUIL_POST_CFG_GUILD_NAME_MODIFY_FIELD, GUIL_POST_CFG_GUILD_NOTICE_FIELD}
+GUIL_POST_CFG.is_extendable = false
+GUIL_POST_CFG.extensions = {}
+GUIL_POST_CFGS_ITEMS_FIELD.name = "items"
+GUIL_POST_CFGS_ITEMS_FIELD.full_name = ".ftcfg.guil_post_cfgs.items"
+GUIL_POST_CFGS_ITEMS_FIELD.number = 1
+GUIL_POST_CFGS_ITEMS_FIELD.index = 0
+GUIL_POST_CFGS_ITEMS_FIELD.label = 3
+GUIL_POST_CFGS_ITEMS_FIELD.has_default_value = false
+GUIL_POST_CFGS_ITEMS_FIELD.default_value = {}
+GUIL_POST_CFGS_ITEMS_FIELD.message_type = GUIL_POST_CFG
+GUIL_POST_CFGS_ITEMS_FIELD.type = 11
+GUIL_POST_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GUIL_POST_CFGS.name = "guil_post_cfgs"
+GUIL_POST_CFGS.full_name = ".ftcfg.guil_post_cfgs"
+GUIL_POST_CFGS.nested_types = {}
+GUIL_POST_CFGS.enum_types = {}
+GUIL_POST_CFGS.fields = {GUIL_POST_CFGS_ITEMS_FIELD}
+GUIL_POST_CFGS.is_extendable = false
+GUIL_POST_CFGS.extensions = {}
+INNER_ALCHEMY_CFG_ID_FIELD.name = "id"
+INNER_ALCHEMY_CFG_ID_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.id"
+INNER_ALCHEMY_CFG_ID_FIELD.number = 1
+INNER_ALCHEMY_CFG_ID_FIELD.index = 0
+INNER_ALCHEMY_CFG_ID_FIELD.label = 2
+INNER_ALCHEMY_CFG_ID_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_ID_FIELD.default_value = 0
+INNER_ALCHEMY_CFG_ID_FIELD.type = 13
+INNER_ALCHEMY_CFG_ID_FIELD.cpp_type = 3
+
+INNER_ALCHEMY_CFG_NAME_FIELD.name = "name"
+INNER_ALCHEMY_CFG_NAME_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.name"
+INNER_ALCHEMY_CFG_NAME_FIELD.number = 2
+INNER_ALCHEMY_CFG_NAME_FIELD.index = 1
+INNER_ALCHEMY_CFG_NAME_FIELD.label = 2
+INNER_ALCHEMY_CFG_NAME_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_NAME_FIELD.default_value = ""
+INNER_ALCHEMY_CFG_NAME_FIELD.type = 9
+INNER_ALCHEMY_CFG_NAME_FIELD.cpp_type = 9
+
+INNER_ALCHEMY_CFG_ACTIVATION_TYPE_FIELD.name = "activation_type"
+INNER_ALCHEMY_CFG_ACTIVATION_TYPE_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.activation_type"
+INNER_ALCHEMY_CFG_ACTIVATION_TYPE_FIELD.number = 3
+INNER_ALCHEMY_CFG_ACTIVATION_TYPE_FIELD.index = 2
+INNER_ALCHEMY_CFG_ACTIVATION_TYPE_FIELD.label = 2
+INNER_ALCHEMY_CFG_ACTIVATION_TYPE_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_ACTIVATION_TYPE_FIELD.default_value = 0
+INNER_ALCHEMY_CFG_ACTIVATION_TYPE_FIELD.type = 5
+INNER_ALCHEMY_CFG_ACTIVATION_TYPE_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_DESC_FIELD.name = "desc"
+INNER_ALCHEMY_CFG_DESC_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.desc"
+INNER_ALCHEMY_CFG_DESC_FIELD.number = 4
+INNER_ALCHEMY_CFG_DESC_FIELD.index = 3
+INNER_ALCHEMY_CFG_DESC_FIELD.label = 2
+INNER_ALCHEMY_CFG_DESC_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_DESC_FIELD.default_value = ""
+INNER_ALCHEMY_CFG_DESC_FIELD.type = 9
+INNER_ALCHEMY_CFG_DESC_FIELD.cpp_type = 9
+
+INNER_ALCHEMY_CFG_ITEM_ICON_FIELD.name = "item_icon"
+INNER_ALCHEMY_CFG_ITEM_ICON_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.item_icon"
+INNER_ALCHEMY_CFG_ITEM_ICON_FIELD.number = 5
+INNER_ALCHEMY_CFG_ITEM_ICON_FIELD.index = 4
+INNER_ALCHEMY_CFG_ITEM_ICON_FIELD.label = 2
+INNER_ALCHEMY_CFG_ITEM_ICON_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_ITEM_ICON_FIELD.default_value = 0
+INNER_ALCHEMY_CFG_ITEM_ICON_FIELD.type = 5
+INNER_ALCHEMY_CFG_ITEM_ICON_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_ICON_FIELD.name = "icon"
+INNER_ALCHEMY_CFG_ICON_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.icon"
+INNER_ALCHEMY_CFG_ICON_FIELD.number = 6
+INNER_ALCHEMY_CFG_ICON_FIELD.index = 5
+INNER_ALCHEMY_CFG_ICON_FIELD.label = 2
+INNER_ALCHEMY_CFG_ICON_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_ICON_FIELD.default_value = 0
+INNER_ALCHEMY_CFG_ICON_FIELD.type = 5
+INNER_ALCHEMY_CFG_ICON_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_FORMULA_ICON_FIELD.name = "formula_icon"
+INNER_ALCHEMY_CFG_FORMULA_ICON_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.formula_icon"
+INNER_ALCHEMY_CFG_FORMULA_ICON_FIELD.number = 7
+INNER_ALCHEMY_CFG_FORMULA_ICON_FIELD.index = 6
+INNER_ALCHEMY_CFG_FORMULA_ICON_FIELD.label = 2
+INNER_ALCHEMY_CFG_FORMULA_ICON_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_FORMULA_ICON_FIELD.default_value = 0
+INNER_ALCHEMY_CFG_FORMULA_ICON_FIELD.type = 5
+INNER_ALCHEMY_CFG_FORMULA_ICON_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_UNLOCK_COST_FIELD.name = "unlock_cost"
+INNER_ALCHEMY_CFG_UNLOCK_COST_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.unlock_cost"
+INNER_ALCHEMY_CFG_UNLOCK_COST_FIELD.number = 8
+INNER_ALCHEMY_CFG_UNLOCK_COST_FIELD.index = 7
+INNER_ALCHEMY_CFG_UNLOCK_COST_FIELD.label = 2
+INNER_ALCHEMY_CFG_UNLOCK_COST_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_UNLOCK_COST_FIELD.default_value = 0
+INNER_ALCHEMY_CFG_UNLOCK_COST_FIELD.type = 5
+INNER_ALCHEMY_CFG_UNLOCK_COST_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_UNLOCK_COST_NUM_FIELD.name = "unlock_cost_num"
+INNER_ALCHEMY_CFG_UNLOCK_COST_NUM_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.unlock_cost_num"
+INNER_ALCHEMY_CFG_UNLOCK_COST_NUM_FIELD.number = 9
+INNER_ALCHEMY_CFG_UNLOCK_COST_NUM_FIELD.index = 8
+INNER_ALCHEMY_CFG_UNLOCK_COST_NUM_FIELD.label = 2
+INNER_ALCHEMY_CFG_UNLOCK_COST_NUM_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_UNLOCK_COST_NUM_FIELD.default_value = 0
+INNER_ALCHEMY_CFG_UNLOCK_COST_NUM_FIELD.type = 5
+INNER_ALCHEMY_CFG_UNLOCK_COST_NUM_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_ACTIVATION_COST_FIELD.name = "activation_cost"
+INNER_ALCHEMY_CFG_ACTIVATION_COST_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.activation_cost"
+INNER_ALCHEMY_CFG_ACTIVATION_COST_FIELD.number = 10
+INNER_ALCHEMY_CFG_ACTIVATION_COST_FIELD.index = 9
+INNER_ALCHEMY_CFG_ACTIVATION_COST_FIELD.label = 2
+INNER_ALCHEMY_CFG_ACTIVATION_COST_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_ACTIVATION_COST_FIELD.default_value = 0
+INNER_ALCHEMY_CFG_ACTIVATION_COST_FIELD.type = 5
+INNER_ALCHEMY_CFG_ACTIVATION_COST_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_ACTIVATION_COST_NUM_FIELD.name = "activation_cost_num"
+INNER_ALCHEMY_CFG_ACTIVATION_COST_NUM_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.activation_cost_num"
+INNER_ALCHEMY_CFG_ACTIVATION_COST_NUM_FIELD.number = 11
+INNER_ALCHEMY_CFG_ACTIVATION_COST_NUM_FIELD.index = 10
+INNER_ALCHEMY_CFG_ACTIVATION_COST_NUM_FIELD.label = 2
+INNER_ALCHEMY_CFG_ACTIVATION_COST_NUM_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_ACTIVATION_COST_NUM_FIELD.default_value = 0
+INNER_ALCHEMY_CFG_ACTIVATION_COST_NUM_FIELD.type = 5
+INNER_ALCHEMY_CFG_ACTIVATION_COST_NUM_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_ICON_FIELD.name = "activation_resources_icon"
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_ICON_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.activation_resources_icon"
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_ICON_FIELD.number = 12
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_ICON_FIELD.index = 11
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_ICON_FIELD.label = 3
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_ICON_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_ICON_FIELD.default_value = {}
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_ICON_FIELD.type = 5
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_ICON_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_FIELD.name = "activation_resources_cost"
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.activation_resources_cost"
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_FIELD.number = 13
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_FIELD.index = 12
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_FIELD.label = 3
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_FIELD.default_value = {}
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_FIELD.type = 5
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_NUM_FIELD.name = "activation_resources_cost_num"
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_NUM_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.activation_resources_cost_num"
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_NUM_FIELD.number = 14
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_NUM_FIELD.index = 13
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_NUM_FIELD.label = 3
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_NUM_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_NUM_FIELD.default_value = {}
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_NUM_FIELD.type = 5
+INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_NUM_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_PROP_EFFECT1_FIELD.name = "prop_effect1"
+INNER_ALCHEMY_CFG_PROP_EFFECT1_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.prop_effect1"
+INNER_ALCHEMY_CFG_PROP_EFFECT1_FIELD.number = 15
+INNER_ALCHEMY_CFG_PROP_EFFECT1_FIELD.index = 14
+INNER_ALCHEMY_CFG_PROP_EFFECT1_FIELD.label = 2
+INNER_ALCHEMY_CFG_PROP_EFFECT1_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_PROP_EFFECT1_FIELD.default_value = ""
+INNER_ALCHEMY_CFG_PROP_EFFECT1_FIELD.type = 9
+INNER_ALCHEMY_CFG_PROP_EFFECT1_FIELD.cpp_type = 9
+
+INNER_ALCHEMY_CFG_PROP_EFFECT2_FIELD.name = "prop_effect2"
+INNER_ALCHEMY_CFG_PROP_EFFECT2_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.prop_effect2"
+INNER_ALCHEMY_CFG_PROP_EFFECT2_FIELD.number = 16
+INNER_ALCHEMY_CFG_PROP_EFFECT2_FIELD.index = 15
+INNER_ALCHEMY_CFG_PROP_EFFECT2_FIELD.label = 2
+INNER_ALCHEMY_CFG_PROP_EFFECT2_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_PROP_EFFECT2_FIELD.default_value = ""
+INNER_ALCHEMY_CFG_PROP_EFFECT2_FIELD.type = 9
+INNER_ALCHEMY_CFG_PROP_EFFECT2_FIELD.cpp_type = 9
+
+INNER_ALCHEMY_CFG_PROP_EFFECT3_FIELD.name = "prop_effect3"
+INNER_ALCHEMY_CFG_PROP_EFFECT3_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.prop_effect3"
+INNER_ALCHEMY_CFG_PROP_EFFECT3_FIELD.number = 17
+INNER_ALCHEMY_CFG_PROP_EFFECT3_FIELD.index = 16
+INNER_ALCHEMY_CFG_PROP_EFFECT3_FIELD.label = 2
+INNER_ALCHEMY_CFG_PROP_EFFECT3_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_PROP_EFFECT3_FIELD.default_value = ""
+INNER_ALCHEMY_CFG_PROP_EFFECT3_FIELD.type = 9
+INNER_ALCHEMY_CFG_PROP_EFFECT3_FIELD.cpp_type = 9
+
+INNER_ALCHEMY_CFG_OCCUPATION_FIELD.name = "occupation"
+INNER_ALCHEMY_CFG_OCCUPATION_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.occupation"
+INNER_ALCHEMY_CFG_OCCUPATION_FIELD.number = 18
+INNER_ALCHEMY_CFG_OCCUPATION_FIELD.index = 17
+INNER_ALCHEMY_CFG_OCCUPATION_FIELD.label = 2
+INNER_ALCHEMY_CFG_OCCUPATION_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_OCCUPATION_FIELD.default_value = 0
+INNER_ALCHEMY_CFG_OCCUPATION_FIELD.type = 5
+INNER_ALCHEMY_CFG_OCCUPATION_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_CFG_COMBAT_POINT_FIELD.name = "combat_point"
+INNER_ALCHEMY_CFG_COMBAT_POINT_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.combat_point"
+INNER_ALCHEMY_CFG_COMBAT_POINT_FIELD.number = 19
+INNER_ALCHEMY_CFG_COMBAT_POINT_FIELD.index = 18
+INNER_ALCHEMY_CFG_COMBAT_POINT_FIELD.label = 2
+INNER_ALCHEMY_CFG_COMBAT_POINT_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_COMBAT_POINT_FIELD.default_value = 0.0
+INNER_ALCHEMY_CFG_COMBAT_POINT_FIELD.type = 2
+INNER_ALCHEMY_CFG_COMBAT_POINT_FIELD.cpp_type = 6
+
+INNER_ALCHEMY_CFG_SUIT_COMBAT_POINT_FIELD.name = "suit_combat_point"
+INNER_ALCHEMY_CFG_SUIT_COMBAT_POINT_FIELD.full_name = ".ftcfg.inner_alchemy_cfg.suit_combat_point"
+INNER_ALCHEMY_CFG_SUIT_COMBAT_POINT_FIELD.number = 20
+INNER_ALCHEMY_CFG_SUIT_COMBAT_POINT_FIELD.index = 19
+INNER_ALCHEMY_CFG_SUIT_COMBAT_POINT_FIELD.label = 2
+INNER_ALCHEMY_CFG_SUIT_COMBAT_POINT_FIELD.has_default_value = false
+INNER_ALCHEMY_CFG_SUIT_COMBAT_POINT_FIELD.default_value = 0.0
+INNER_ALCHEMY_CFG_SUIT_COMBAT_POINT_FIELD.type = 2
+INNER_ALCHEMY_CFG_SUIT_COMBAT_POINT_FIELD.cpp_type = 6
+
+INNER_ALCHEMY_CFG.name = "inner_alchemy_cfg"
+INNER_ALCHEMY_CFG.full_name = ".ftcfg.inner_alchemy_cfg"
+INNER_ALCHEMY_CFG.nested_types = {}
+INNER_ALCHEMY_CFG.enum_types = {}
+INNER_ALCHEMY_CFG.fields = {INNER_ALCHEMY_CFG_ID_FIELD, INNER_ALCHEMY_CFG_NAME_FIELD, INNER_ALCHEMY_CFG_ACTIVATION_TYPE_FIELD, INNER_ALCHEMY_CFG_DESC_FIELD, INNER_ALCHEMY_CFG_ITEM_ICON_FIELD, INNER_ALCHEMY_CFG_ICON_FIELD, INNER_ALCHEMY_CFG_FORMULA_ICON_FIELD, INNER_ALCHEMY_CFG_UNLOCK_COST_FIELD, INNER_ALCHEMY_CFG_UNLOCK_COST_NUM_FIELD, INNER_ALCHEMY_CFG_ACTIVATION_COST_FIELD, INNER_ALCHEMY_CFG_ACTIVATION_COST_NUM_FIELD, INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_ICON_FIELD, INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_FIELD, INNER_ALCHEMY_CFG_ACTIVATION_RESOURCES_COST_NUM_FIELD, INNER_ALCHEMY_CFG_PROP_EFFECT1_FIELD, INNER_ALCHEMY_CFG_PROP_EFFECT2_FIELD, INNER_ALCHEMY_CFG_PROP_EFFECT3_FIELD, INNER_ALCHEMY_CFG_OCCUPATION_FIELD, INNER_ALCHEMY_CFG_COMBAT_POINT_FIELD, INNER_ALCHEMY_CFG_SUIT_COMBAT_POINT_FIELD}
+INNER_ALCHEMY_CFG.is_extendable = false
+INNER_ALCHEMY_CFG.extensions = {}
+INNER_ALCHEMY_CFGS_ITEMS_FIELD.name = "items"
+INNER_ALCHEMY_CFGS_ITEMS_FIELD.full_name = ".ftcfg.inner_alchemy_cfgs.items"
+INNER_ALCHEMY_CFGS_ITEMS_FIELD.number = 1
+INNER_ALCHEMY_CFGS_ITEMS_FIELD.index = 0
+INNER_ALCHEMY_CFGS_ITEMS_FIELD.label = 3
+INNER_ALCHEMY_CFGS_ITEMS_FIELD.has_default_value = false
+INNER_ALCHEMY_CFGS_ITEMS_FIELD.default_value = {}
+INNER_ALCHEMY_CFGS_ITEMS_FIELD.message_type = INNER_ALCHEMY_CFG
+INNER_ALCHEMY_CFGS_ITEMS_FIELD.type = 11
+INNER_ALCHEMY_CFGS_ITEMS_FIELD.cpp_type = 10
+
+INNER_ALCHEMY_CFGS.name = "inner_alchemy_cfgs"
+INNER_ALCHEMY_CFGS.full_name = ".ftcfg.inner_alchemy_cfgs"
+INNER_ALCHEMY_CFGS.nested_types = {}
+INNER_ALCHEMY_CFGS.enum_types = {}
+INNER_ALCHEMY_CFGS.fields = {INNER_ALCHEMY_CFGS_ITEMS_FIELD}
+INNER_ALCHEMY_CFGS.is_extendable = false
+INNER_ALCHEMY_CFGS.extensions = {}
+INNER_ALCHEMY_GROUP_CFG_ID_FIELD.name = "id"
+INNER_ALCHEMY_GROUP_CFG_ID_FIELD.full_name = ".ftcfg.inner_alchemy_group_cfg.id"
+INNER_ALCHEMY_GROUP_CFG_ID_FIELD.number = 1
+INNER_ALCHEMY_GROUP_CFG_ID_FIELD.index = 0
+INNER_ALCHEMY_GROUP_CFG_ID_FIELD.label = 2
+INNER_ALCHEMY_GROUP_CFG_ID_FIELD.has_default_value = false
+INNER_ALCHEMY_GROUP_CFG_ID_FIELD.default_value = 0
+INNER_ALCHEMY_GROUP_CFG_ID_FIELD.type = 13
+INNER_ALCHEMY_GROUP_CFG_ID_FIELD.cpp_type = 3
+
+INNER_ALCHEMY_GROUP_CFG_INNER_ALCHEMY_GROUP_FIELD.name = "inner_alchemy_group"
+INNER_ALCHEMY_GROUP_CFG_INNER_ALCHEMY_GROUP_FIELD.full_name = ".ftcfg.inner_alchemy_group_cfg.inner_alchemy_group"
+INNER_ALCHEMY_GROUP_CFG_INNER_ALCHEMY_GROUP_FIELD.number = 2
+INNER_ALCHEMY_GROUP_CFG_INNER_ALCHEMY_GROUP_FIELD.index = 1
+INNER_ALCHEMY_GROUP_CFG_INNER_ALCHEMY_GROUP_FIELD.label = 3
+INNER_ALCHEMY_GROUP_CFG_INNER_ALCHEMY_GROUP_FIELD.has_default_value = false
+INNER_ALCHEMY_GROUP_CFG_INNER_ALCHEMY_GROUP_FIELD.default_value = {}
+INNER_ALCHEMY_GROUP_CFG_INNER_ALCHEMY_GROUP_FIELD.type = 5
+INNER_ALCHEMY_GROUP_CFG_INNER_ALCHEMY_GROUP_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_GROUP_CFG_DESC_FIELD.name = "desc"
+INNER_ALCHEMY_GROUP_CFG_DESC_FIELD.full_name = ".ftcfg.inner_alchemy_group_cfg.desc"
+INNER_ALCHEMY_GROUP_CFG_DESC_FIELD.number = 3
+INNER_ALCHEMY_GROUP_CFG_DESC_FIELD.index = 2
+INNER_ALCHEMY_GROUP_CFG_DESC_FIELD.label = 2
+INNER_ALCHEMY_GROUP_CFG_DESC_FIELD.has_default_value = false
+INNER_ALCHEMY_GROUP_CFG_DESC_FIELD.default_value = ""
+INNER_ALCHEMY_GROUP_CFG_DESC_FIELD.type = 9
+INNER_ALCHEMY_GROUP_CFG_DESC_FIELD.cpp_type = 9
+
+INNER_ALCHEMY_GROUP_CFG_GROUP_EFFECT_FIELD.name = "group_effect"
+INNER_ALCHEMY_GROUP_CFG_GROUP_EFFECT_FIELD.full_name = ".ftcfg.inner_alchemy_group_cfg.group_effect"
+INNER_ALCHEMY_GROUP_CFG_GROUP_EFFECT_FIELD.number = 4
+INNER_ALCHEMY_GROUP_CFG_GROUP_EFFECT_FIELD.index = 3
+INNER_ALCHEMY_GROUP_CFG_GROUP_EFFECT_FIELD.label = 2
+INNER_ALCHEMY_GROUP_CFG_GROUP_EFFECT_FIELD.has_default_value = false
+INNER_ALCHEMY_GROUP_CFG_GROUP_EFFECT_FIELD.default_value = 0
+INNER_ALCHEMY_GROUP_CFG_GROUP_EFFECT_FIELD.type = 5
+INNER_ALCHEMY_GROUP_CFG_GROUP_EFFECT_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_GROUP_CFG_SKILL_ID_INDEX_FIELD.name = "skill_id_index"
+INNER_ALCHEMY_GROUP_CFG_SKILL_ID_INDEX_FIELD.full_name = ".ftcfg.inner_alchemy_group_cfg.skill_id_index"
+INNER_ALCHEMY_GROUP_CFG_SKILL_ID_INDEX_FIELD.number = 5
+INNER_ALCHEMY_GROUP_CFG_SKILL_ID_INDEX_FIELD.index = 4
+INNER_ALCHEMY_GROUP_CFG_SKILL_ID_INDEX_FIELD.label = 2
+INNER_ALCHEMY_GROUP_CFG_SKILL_ID_INDEX_FIELD.has_default_value = false
+INNER_ALCHEMY_GROUP_CFG_SKILL_ID_INDEX_FIELD.default_value = 0
+INNER_ALCHEMY_GROUP_CFG_SKILL_ID_INDEX_FIELD.type = 5
+INNER_ALCHEMY_GROUP_CFG_SKILL_ID_INDEX_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_GROUP_CFG_SKILL_ARRAY_FIELD.name = "skill_array"
+INNER_ALCHEMY_GROUP_CFG_SKILL_ARRAY_FIELD.full_name = ".ftcfg.inner_alchemy_group_cfg.skill_array"
+INNER_ALCHEMY_GROUP_CFG_SKILL_ARRAY_FIELD.number = 6
+INNER_ALCHEMY_GROUP_CFG_SKILL_ARRAY_FIELD.index = 5
+INNER_ALCHEMY_GROUP_CFG_SKILL_ARRAY_FIELD.label = 3
+INNER_ALCHEMY_GROUP_CFG_SKILL_ARRAY_FIELD.has_default_value = false
+INNER_ALCHEMY_GROUP_CFG_SKILL_ARRAY_FIELD.default_value = {}
+INNER_ALCHEMY_GROUP_CFG_SKILL_ARRAY_FIELD.type = 5
+INNER_ALCHEMY_GROUP_CFG_SKILL_ARRAY_FIELD.cpp_type = 1
+
+INNER_ALCHEMY_GROUP_CFG.name = "inner_alchemy_group_cfg"
+INNER_ALCHEMY_GROUP_CFG.full_name = ".ftcfg.inner_alchemy_group_cfg"
+INNER_ALCHEMY_GROUP_CFG.nested_types = {}
+INNER_ALCHEMY_GROUP_CFG.enum_types = {}
+INNER_ALCHEMY_GROUP_CFG.fields = {INNER_ALCHEMY_GROUP_CFG_ID_FIELD, INNER_ALCHEMY_GROUP_CFG_INNER_ALCHEMY_GROUP_FIELD, INNER_ALCHEMY_GROUP_CFG_DESC_FIELD, INNER_ALCHEMY_GROUP_CFG_GROUP_EFFECT_FIELD, INNER_ALCHEMY_GROUP_CFG_SKILL_ID_INDEX_FIELD, INNER_ALCHEMY_GROUP_CFG_SKILL_ARRAY_FIELD}
+INNER_ALCHEMY_GROUP_CFG.is_extendable = false
+INNER_ALCHEMY_GROUP_CFG.extensions = {}
+INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD.name = "items"
+INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.inner_alchemy_group_cfgs.items"
+INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD.number = 1
+INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD.index = 0
+INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD.label = 3
+INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD.has_default_value = false
+INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD.default_value = {}
+INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD.message_type = INNER_ALCHEMY_GROUP_CFG
+INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD.type = 11
+INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+INNER_ALCHEMY_GROUP_CFGS.name = "inner_alchemy_group_cfgs"
+INNER_ALCHEMY_GROUP_CFGS.full_name = ".ftcfg.inner_alchemy_group_cfgs"
+INNER_ALCHEMY_GROUP_CFGS.nested_types = {}
+INNER_ALCHEMY_GROUP_CFGS.enum_types = {}
+INNER_ALCHEMY_GROUP_CFGS.fields = {INNER_ALCHEMY_GROUP_CFGS_ITEMS_FIELD}
+INNER_ALCHEMY_GROUP_CFGS.is_extendable = false
+INNER_ALCHEMY_GROUP_CFGS.extensions = {}
+MEDAL_GROUP_CFG_ID_FIELD.name = "id"
+MEDAL_GROUP_CFG_ID_FIELD.full_name = ".ftcfg.medal_group_cfg.id"
+MEDAL_GROUP_CFG_ID_FIELD.number = 1
+MEDAL_GROUP_CFG_ID_FIELD.index = 0
+MEDAL_GROUP_CFG_ID_FIELD.label = 2
+MEDAL_GROUP_CFG_ID_FIELD.has_default_value = false
+MEDAL_GROUP_CFG_ID_FIELD.default_value = 0
+MEDAL_GROUP_CFG_ID_FIELD.type = 13
+MEDAL_GROUP_CFG_ID_FIELD.cpp_type = 3
+
+MEDAL_GROUP_CFG_STARLEVEL_FIELD.name = "starLevel"
+MEDAL_GROUP_CFG_STARLEVEL_FIELD.full_name = ".ftcfg.medal_group_cfg.starLevel"
+MEDAL_GROUP_CFG_STARLEVEL_FIELD.number = 2
+MEDAL_GROUP_CFG_STARLEVEL_FIELD.index = 1
+MEDAL_GROUP_CFG_STARLEVEL_FIELD.label = 2
+MEDAL_GROUP_CFG_STARLEVEL_FIELD.has_default_value = false
+MEDAL_GROUP_CFG_STARLEVEL_FIELD.default_value = 0
+MEDAL_GROUP_CFG_STARLEVEL_FIELD.type = 5
+MEDAL_GROUP_CFG_STARLEVEL_FIELD.cpp_type = 1
+
+MEDAL_GROUP_CFG_TYPE_FIELD.name = "type"
+MEDAL_GROUP_CFG_TYPE_FIELD.full_name = ".ftcfg.medal_group_cfg.type"
+MEDAL_GROUP_CFG_TYPE_FIELD.number = 3
+MEDAL_GROUP_CFG_TYPE_FIELD.index = 2
+MEDAL_GROUP_CFG_TYPE_FIELD.label = 2
+MEDAL_GROUP_CFG_TYPE_FIELD.has_default_value = false
+MEDAL_GROUP_CFG_TYPE_FIELD.default_value = 0
+MEDAL_GROUP_CFG_TYPE_FIELD.type = 5
+MEDAL_GROUP_CFG_TYPE_FIELD.cpp_type = 1
+
+MEDAL_GROUP_CFG_GROUP_NAME_FIELD.name = "group_name"
+MEDAL_GROUP_CFG_GROUP_NAME_FIELD.full_name = ".ftcfg.medal_group_cfg.group_name"
+MEDAL_GROUP_CFG_GROUP_NAME_FIELD.number = 4
+MEDAL_GROUP_CFG_GROUP_NAME_FIELD.index = 3
+MEDAL_GROUP_CFG_GROUP_NAME_FIELD.label = 2
+MEDAL_GROUP_CFG_GROUP_NAME_FIELD.has_default_value = false
+MEDAL_GROUP_CFG_GROUP_NAME_FIELD.default_value = 0
+MEDAL_GROUP_CFG_GROUP_NAME_FIELD.type = 5
+MEDAL_GROUP_CFG_GROUP_NAME_FIELD.cpp_type = 1
+
+MEDAL_GROUP_CFG_MEMBER_ID_FIELD.name = "member_id"
+MEDAL_GROUP_CFG_MEMBER_ID_FIELD.full_name = ".ftcfg.medal_group_cfg.member_id"
+MEDAL_GROUP_CFG_MEMBER_ID_FIELD.number = 5
+MEDAL_GROUP_CFG_MEMBER_ID_FIELD.index = 4
+MEDAL_GROUP_CFG_MEMBER_ID_FIELD.label = 3
+MEDAL_GROUP_CFG_MEMBER_ID_FIELD.has_default_value = false
+MEDAL_GROUP_CFG_MEMBER_ID_FIELD.default_value = {}
+MEDAL_GROUP_CFG_MEMBER_ID_FIELD.type = 13
+MEDAL_GROUP_CFG_MEMBER_ID_FIELD.cpp_type = 3
+
+MEDAL_GROUP_CFG_DESC_FIELD.name = "desc"
+MEDAL_GROUP_CFG_DESC_FIELD.full_name = ".ftcfg.medal_group_cfg.desc"
+MEDAL_GROUP_CFG_DESC_FIELD.number = 6
+MEDAL_GROUP_CFG_DESC_FIELD.index = 5
+MEDAL_GROUP_CFG_DESC_FIELD.label = 2
+MEDAL_GROUP_CFG_DESC_FIELD.has_default_value = false
+MEDAL_GROUP_CFG_DESC_FIELD.default_value = 0
+MEDAL_GROUP_CFG_DESC_FIELD.type = 5
+MEDAL_GROUP_CFG_DESC_FIELD.cpp_type = 1
+
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE1_FIELD.name = "activation_attribute1"
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE1_FIELD.full_name = ".ftcfg.medal_group_cfg.activation_attribute1"
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE1_FIELD.number = 7
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE1_FIELD.index = 6
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE1_FIELD.label = 2
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE1_FIELD.has_default_value = false
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE1_FIELD.default_value = ""
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE1_FIELD.type = 9
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE1_FIELD.cpp_type = 9
+
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE2_FIELD.name = "activation_attribute2"
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE2_FIELD.full_name = ".ftcfg.medal_group_cfg.activation_attribute2"
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE2_FIELD.number = 8
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE2_FIELD.index = 7
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE2_FIELD.label = 2
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE2_FIELD.has_default_value = false
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE2_FIELD.default_value = ""
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE2_FIELD.type = 9
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE2_FIELD.cpp_type = 9
+
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE3_FIELD.name = "activation_attribute3"
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE3_FIELD.full_name = ".ftcfg.medal_group_cfg.activation_attribute3"
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE3_FIELD.number = 9
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE3_FIELD.index = 8
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE3_FIELD.label = 2
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE3_FIELD.has_default_value = false
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE3_FIELD.default_value = ""
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE3_FIELD.type = 9
+MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE3_FIELD.cpp_type = 9
+
+MEDAL_GROUP_CFG.name = "medal_group_cfg"
+MEDAL_GROUP_CFG.full_name = ".ftcfg.medal_group_cfg"
+MEDAL_GROUP_CFG.nested_types = {}
+MEDAL_GROUP_CFG.enum_types = {}
+MEDAL_GROUP_CFG.fields = {MEDAL_GROUP_CFG_ID_FIELD, MEDAL_GROUP_CFG_STARLEVEL_FIELD, MEDAL_GROUP_CFG_TYPE_FIELD, MEDAL_GROUP_CFG_GROUP_NAME_FIELD, MEDAL_GROUP_CFG_MEMBER_ID_FIELD, MEDAL_GROUP_CFG_DESC_FIELD, MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE1_FIELD, MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE2_FIELD, MEDAL_GROUP_CFG_ACTIVATION_ATTRIBUTE3_FIELD}
+MEDAL_GROUP_CFG.is_extendable = false
+MEDAL_GROUP_CFG.extensions = {}
+MEDAL_GROUP_CFGS_ITEMS_FIELD.name = "items"
+MEDAL_GROUP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.medal_group_cfgs.items"
+MEDAL_GROUP_CFGS_ITEMS_FIELD.number = 1
+MEDAL_GROUP_CFGS_ITEMS_FIELD.index = 0
+MEDAL_GROUP_CFGS_ITEMS_FIELD.label = 3
+MEDAL_GROUP_CFGS_ITEMS_FIELD.has_default_value = false
+MEDAL_GROUP_CFGS_ITEMS_FIELD.default_value = {}
+MEDAL_GROUP_CFGS_ITEMS_FIELD.message_type = MEDAL_GROUP_CFG
+MEDAL_GROUP_CFGS_ITEMS_FIELD.type = 11
+MEDAL_GROUP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MEDAL_GROUP_CFGS.name = "medal_group_cfgs"
+MEDAL_GROUP_CFGS.full_name = ".ftcfg.medal_group_cfgs"
+MEDAL_GROUP_CFGS.nested_types = {}
+MEDAL_GROUP_CFGS.enum_types = {}
+MEDAL_GROUP_CFGS.fields = {MEDAL_GROUP_CFGS_ITEMS_FIELD}
+MEDAL_GROUP_CFGS.is_extendable = false
+MEDAL_GROUP_CFGS.extensions = {}
+MEDAL_BASE_CFG_ID_FIELD.name = "id"
+MEDAL_BASE_CFG_ID_FIELD.full_name = ".ftcfg.medal_base_cfg.id"
+MEDAL_BASE_CFG_ID_FIELD.number = 1
+MEDAL_BASE_CFG_ID_FIELD.index = 0
+MEDAL_BASE_CFG_ID_FIELD.label = 2
+MEDAL_BASE_CFG_ID_FIELD.has_default_value = false
+MEDAL_BASE_CFG_ID_FIELD.default_value = 0
+MEDAL_BASE_CFG_ID_FIELD.type = 13
+MEDAL_BASE_CFG_ID_FIELD.cpp_type = 3
+
+MEDAL_BASE_CFG_MEDAL_NAME_FIELD.name = "medal_name"
+MEDAL_BASE_CFG_MEDAL_NAME_FIELD.full_name = ".ftcfg.medal_base_cfg.medal_name"
+MEDAL_BASE_CFG_MEDAL_NAME_FIELD.number = 2
+MEDAL_BASE_CFG_MEDAL_NAME_FIELD.index = 1
+MEDAL_BASE_CFG_MEDAL_NAME_FIELD.label = 2
+MEDAL_BASE_CFG_MEDAL_NAME_FIELD.has_default_value = false
+MEDAL_BASE_CFG_MEDAL_NAME_FIELD.default_value = 0
+MEDAL_BASE_CFG_MEDAL_NAME_FIELD.type = 5
+MEDAL_BASE_CFG_MEDAL_NAME_FIELD.cpp_type = 1
+
+MEDAL_BASE_CFG_ICON_FIELD.name = "icon"
+MEDAL_BASE_CFG_ICON_FIELD.full_name = ".ftcfg.medal_base_cfg.icon"
+MEDAL_BASE_CFG_ICON_FIELD.number = 3
+MEDAL_BASE_CFG_ICON_FIELD.index = 2
+MEDAL_BASE_CFG_ICON_FIELD.label = 2
+MEDAL_BASE_CFG_ICON_FIELD.has_default_value = false
+MEDAL_BASE_CFG_ICON_FIELD.default_value = 0
+MEDAL_BASE_CFG_ICON_FIELD.type = 5
+MEDAL_BASE_CFG_ICON_FIELD.cpp_type = 1
+
+MEDAL_BASE_CFG_TYPE_FIELD.name = "type"
+MEDAL_BASE_CFG_TYPE_FIELD.full_name = ".ftcfg.medal_base_cfg.type"
+MEDAL_BASE_CFG_TYPE_FIELD.number = 4
+MEDAL_BASE_CFG_TYPE_FIELD.index = 3
+MEDAL_BASE_CFG_TYPE_FIELD.label = 2
+MEDAL_BASE_CFG_TYPE_FIELD.has_default_value = false
+MEDAL_BASE_CFG_TYPE_FIELD.default_value = 0
+MEDAL_BASE_CFG_TYPE_FIELD.type = 5
+MEDAL_BASE_CFG_TYPE_FIELD.cpp_type = 1
+
+MEDAL_BASE_CFG_CHANGE_NEED_PROPNUM_FIELD.name = "change_need_propnum"
+MEDAL_BASE_CFG_CHANGE_NEED_PROPNUM_FIELD.full_name = ".ftcfg.medal_base_cfg.change_need_propnum"
+MEDAL_BASE_CFG_CHANGE_NEED_PROPNUM_FIELD.number = 5
+MEDAL_BASE_CFG_CHANGE_NEED_PROPNUM_FIELD.index = 4
+MEDAL_BASE_CFG_CHANGE_NEED_PROPNUM_FIELD.label = 2
+MEDAL_BASE_CFG_CHANGE_NEED_PROPNUM_FIELD.has_default_value = false
+MEDAL_BASE_CFG_CHANGE_NEED_PROPNUM_FIELD.default_value = 0
+MEDAL_BASE_CFG_CHANGE_NEED_PROPNUM_FIELD.type = 5
+MEDAL_BASE_CFG_CHANGE_NEED_PROPNUM_FIELD.cpp_type = 1
+
+MEDAL_BASE_CFG_DISASSEMBLE_GET_PROPNUM_FIELD.name = "disassemble_get_propnum"
+MEDAL_BASE_CFG_DISASSEMBLE_GET_PROPNUM_FIELD.full_name = ".ftcfg.medal_base_cfg.disassemble_get_propnum"
+MEDAL_BASE_CFG_DISASSEMBLE_GET_PROPNUM_FIELD.number = 6
+MEDAL_BASE_CFG_DISASSEMBLE_GET_PROPNUM_FIELD.index = 5
+MEDAL_BASE_CFG_DISASSEMBLE_GET_PROPNUM_FIELD.label = 2
+MEDAL_BASE_CFG_DISASSEMBLE_GET_PROPNUM_FIELD.has_default_value = false
+MEDAL_BASE_CFG_DISASSEMBLE_GET_PROPNUM_FIELD.default_value = 0
+MEDAL_BASE_CFG_DISASSEMBLE_GET_PROPNUM_FIELD.type = 5
+MEDAL_BASE_CFG_DISASSEMBLE_GET_PROPNUM_FIELD.cpp_type = 1
+
+MEDAL_BASE_CFG.name = "medal_base_cfg"
+MEDAL_BASE_CFG.full_name = ".ftcfg.medal_base_cfg"
+MEDAL_BASE_CFG.nested_types = {}
+MEDAL_BASE_CFG.enum_types = {}
+MEDAL_BASE_CFG.fields = {MEDAL_BASE_CFG_ID_FIELD, MEDAL_BASE_CFG_MEDAL_NAME_FIELD, MEDAL_BASE_CFG_ICON_FIELD, MEDAL_BASE_CFG_TYPE_FIELD, MEDAL_BASE_CFG_CHANGE_NEED_PROPNUM_FIELD, MEDAL_BASE_CFG_DISASSEMBLE_GET_PROPNUM_FIELD}
+MEDAL_BASE_CFG.is_extendable = false
+MEDAL_BASE_CFG.extensions = {}
+MEDAL_BASE_CFGS_ITEMS_FIELD.name = "items"
+MEDAL_BASE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.medal_base_cfgs.items"
+MEDAL_BASE_CFGS_ITEMS_FIELD.number = 1
+MEDAL_BASE_CFGS_ITEMS_FIELD.index = 0
+MEDAL_BASE_CFGS_ITEMS_FIELD.label = 3
+MEDAL_BASE_CFGS_ITEMS_FIELD.has_default_value = false
+MEDAL_BASE_CFGS_ITEMS_FIELD.default_value = {}
+MEDAL_BASE_CFGS_ITEMS_FIELD.message_type = MEDAL_BASE_CFG
+MEDAL_BASE_CFGS_ITEMS_FIELD.type = 11
+MEDAL_BASE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MEDAL_BASE_CFGS.name = "medal_base_cfgs"
+MEDAL_BASE_CFGS.full_name = ".ftcfg.medal_base_cfgs"
+MEDAL_BASE_CFGS.nested_types = {}
+MEDAL_BASE_CFGS.enum_types = {}
+MEDAL_BASE_CFGS.fields = {MEDAL_BASE_CFGS_ITEMS_FIELD}
+MEDAL_BASE_CFGS.is_extendable = false
+MEDAL_BASE_CFGS.extensions = {}
+MEDAL_COMPOSITE_ADDITION_CFG_ID_FIELD.name = "id"
+MEDAL_COMPOSITE_ADDITION_CFG_ID_FIELD.full_name = ".ftcfg.medal_composite_addition_cfg.id"
+MEDAL_COMPOSITE_ADDITION_CFG_ID_FIELD.number = 1
+MEDAL_COMPOSITE_ADDITION_CFG_ID_FIELD.index = 0
+MEDAL_COMPOSITE_ADDITION_CFG_ID_FIELD.label = 2
+MEDAL_COMPOSITE_ADDITION_CFG_ID_FIELD.has_default_value = false
+MEDAL_COMPOSITE_ADDITION_CFG_ID_FIELD.default_value = 0
+MEDAL_COMPOSITE_ADDITION_CFG_ID_FIELD.type = 13
+MEDAL_COMPOSITE_ADDITION_CFG_ID_FIELD.cpp_type = 3
+
+MEDAL_COMPOSITE_ADDITION_CFG_STARLEVEL_FIELD.name = "starLevel"
+MEDAL_COMPOSITE_ADDITION_CFG_STARLEVEL_FIELD.full_name = ".ftcfg.medal_composite_addition_cfg.starLevel"
+MEDAL_COMPOSITE_ADDITION_CFG_STARLEVEL_FIELD.number = 2
+MEDAL_COMPOSITE_ADDITION_CFG_STARLEVEL_FIELD.index = 1
+MEDAL_COMPOSITE_ADDITION_CFG_STARLEVEL_FIELD.label = 2
+MEDAL_COMPOSITE_ADDITION_CFG_STARLEVEL_FIELD.has_default_value = false
+MEDAL_COMPOSITE_ADDITION_CFG_STARLEVEL_FIELD.default_value = 0
+MEDAL_COMPOSITE_ADDITION_CFG_STARLEVEL_FIELD.type = 5
+MEDAL_COMPOSITE_ADDITION_CFG_STARLEVEL_FIELD.cpp_type = 1
+
+MEDAL_COMPOSITE_ADDITION_CFG_TYPE_FIELD.name = "type"
+MEDAL_COMPOSITE_ADDITION_CFG_TYPE_FIELD.full_name = ".ftcfg.medal_composite_addition_cfg.type"
+MEDAL_COMPOSITE_ADDITION_CFG_TYPE_FIELD.number = 3
+MEDAL_COMPOSITE_ADDITION_CFG_TYPE_FIELD.index = 2
+MEDAL_COMPOSITE_ADDITION_CFG_TYPE_FIELD.label = 2
+MEDAL_COMPOSITE_ADDITION_CFG_TYPE_FIELD.has_default_value = false
+MEDAL_COMPOSITE_ADDITION_CFG_TYPE_FIELD.default_value = 0
+MEDAL_COMPOSITE_ADDITION_CFG_TYPE_FIELD.type = 5
+MEDAL_COMPOSITE_ADDITION_CFG_TYPE_FIELD.cpp_type = 1
+
+MEDAL_COMPOSITE_ADDITION_CFG_NEED_GROUP_NUM_FIELD.name = "need_group_num"
+MEDAL_COMPOSITE_ADDITION_CFG_NEED_GROUP_NUM_FIELD.full_name = ".ftcfg.medal_composite_addition_cfg.need_group_num"
+MEDAL_COMPOSITE_ADDITION_CFG_NEED_GROUP_NUM_FIELD.number = 4
+MEDAL_COMPOSITE_ADDITION_CFG_NEED_GROUP_NUM_FIELD.index = 3
+MEDAL_COMPOSITE_ADDITION_CFG_NEED_GROUP_NUM_FIELD.label = 2
+MEDAL_COMPOSITE_ADDITION_CFG_NEED_GROUP_NUM_FIELD.has_default_value = false
+MEDAL_COMPOSITE_ADDITION_CFG_NEED_GROUP_NUM_FIELD.default_value = 0
+MEDAL_COMPOSITE_ADDITION_CFG_NEED_GROUP_NUM_FIELD.type = 5
+MEDAL_COMPOSITE_ADDITION_CFG_NEED_GROUP_NUM_FIELD.cpp_type = 1
+
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE1_FIELD.name = "activation_attribute1"
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE1_FIELD.full_name = ".ftcfg.medal_composite_addition_cfg.activation_attribute1"
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE1_FIELD.number = 5
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE1_FIELD.index = 4
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE1_FIELD.label = 2
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE1_FIELD.has_default_value = false
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE1_FIELD.default_value = ""
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE1_FIELD.type = 9
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE1_FIELD.cpp_type = 9
+
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE2_FIELD.name = "activation_attribute2"
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE2_FIELD.full_name = ".ftcfg.medal_composite_addition_cfg.activation_attribute2"
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE2_FIELD.number = 6
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE2_FIELD.index = 5
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE2_FIELD.label = 2
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE2_FIELD.has_default_value = false
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE2_FIELD.default_value = ""
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE2_FIELD.type = 9
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE2_FIELD.cpp_type = 9
+
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE3_FIELD.name = "activation_attribute3"
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE3_FIELD.full_name = ".ftcfg.medal_composite_addition_cfg.activation_attribute3"
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE3_FIELD.number = 7
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE3_FIELD.index = 6
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE3_FIELD.label = 2
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE3_FIELD.has_default_value = false
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE3_FIELD.default_value = ""
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE3_FIELD.type = 9
+MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE3_FIELD.cpp_type = 9
+
+MEDAL_COMPOSITE_ADDITION_CFG.name = "medal_composite_addition_cfg"
+MEDAL_COMPOSITE_ADDITION_CFG.full_name = ".ftcfg.medal_composite_addition_cfg"
+MEDAL_COMPOSITE_ADDITION_CFG.nested_types = {}
+MEDAL_COMPOSITE_ADDITION_CFG.enum_types = {}
+MEDAL_COMPOSITE_ADDITION_CFG.fields = {MEDAL_COMPOSITE_ADDITION_CFG_ID_FIELD, MEDAL_COMPOSITE_ADDITION_CFG_STARLEVEL_FIELD, MEDAL_COMPOSITE_ADDITION_CFG_TYPE_FIELD, MEDAL_COMPOSITE_ADDITION_CFG_NEED_GROUP_NUM_FIELD, MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE1_FIELD, MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE2_FIELD, MEDAL_COMPOSITE_ADDITION_CFG_ACTIVATION_ATTRIBUTE3_FIELD}
+MEDAL_COMPOSITE_ADDITION_CFG.is_extendable = false
+MEDAL_COMPOSITE_ADDITION_CFG.extensions = {}
+MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD.name = "items"
+MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.medal_composite_addition_cfgs.items"
+MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD.number = 1
+MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD.index = 0
+MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD.label = 3
+MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD.has_default_value = false
+MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD.default_value = {}
+MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD.message_type = MEDAL_COMPOSITE_ADDITION_CFG
+MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD.type = 11
+MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MEDAL_COMPOSITE_ADDITION_CFGS.name = "medal_composite_addition_cfgs"
+MEDAL_COMPOSITE_ADDITION_CFGS.full_name = ".ftcfg.medal_composite_addition_cfgs"
+MEDAL_COMPOSITE_ADDITION_CFGS.nested_types = {}
+MEDAL_COMPOSITE_ADDITION_CFGS.enum_types = {}
+MEDAL_COMPOSITE_ADDITION_CFGS.fields = {MEDAL_COMPOSITE_ADDITION_CFGS_ITEMS_FIELD}
+MEDAL_COMPOSITE_ADDITION_CFGS.is_extendable = false
+MEDAL_COMPOSITE_ADDITION_CFGS.extensions = {}
+MEDAL_OPEN_LEVEL_CFG_TYPE_FIELD.name = "type"
+MEDAL_OPEN_LEVEL_CFG_TYPE_FIELD.full_name = ".ftcfg.medal_open_level_cfg.type"
+MEDAL_OPEN_LEVEL_CFG_TYPE_FIELD.number = 1
+MEDAL_OPEN_LEVEL_CFG_TYPE_FIELD.index = 0
+MEDAL_OPEN_LEVEL_CFG_TYPE_FIELD.label = 2
+MEDAL_OPEN_LEVEL_CFG_TYPE_FIELD.has_default_value = false
+MEDAL_OPEN_LEVEL_CFG_TYPE_FIELD.default_value = 0
+MEDAL_OPEN_LEVEL_CFG_TYPE_FIELD.type = 5
+MEDAL_OPEN_LEVEL_CFG_TYPE_FIELD.cpp_type = 1
+
+MEDAL_OPEN_LEVEL_CFG_LEVEL_FIELD.name = "level"
+MEDAL_OPEN_LEVEL_CFG_LEVEL_FIELD.full_name = ".ftcfg.medal_open_level_cfg.level"
+MEDAL_OPEN_LEVEL_CFG_LEVEL_FIELD.number = 2
+MEDAL_OPEN_LEVEL_CFG_LEVEL_FIELD.index = 1
+MEDAL_OPEN_LEVEL_CFG_LEVEL_FIELD.label = 2
+MEDAL_OPEN_LEVEL_CFG_LEVEL_FIELD.has_default_value = false
+MEDAL_OPEN_LEVEL_CFG_LEVEL_FIELD.default_value = 0
+MEDAL_OPEN_LEVEL_CFG_LEVEL_FIELD.type = 5
+MEDAL_OPEN_LEVEL_CFG_LEVEL_FIELD.cpp_type = 1
+
+MEDAL_OPEN_LEVEL_CFG_NAME_FIELD.name = "name"
+MEDAL_OPEN_LEVEL_CFG_NAME_FIELD.full_name = ".ftcfg.medal_open_level_cfg.name"
+MEDAL_OPEN_LEVEL_CFG_NAME_FIELD.number = 3
+MEDAL_OPEN_LEVEL_CFG_NAME_FIELD.index = 2
+MEDAL_OPEN_LEVEL_CFG_NAME_FIELD.label = 2
+MEDAL_OPEN_LEVEL_CFG_NAME_FIELD.has_default_value = false
+MEDAL_OPEN_LEVEL_CFG_NAME_FIELD.default_value = 0
+MEDAL_OPEN_LEVEL_CFG_NAME_FIELD.type = 5
+MEDAL_OPEN_LEVEL_CFG_NAME_FIELD.cpp_type = 1
+
+MEDAL_OPEN_LEVEL_CFG_DESC_FIELD.name = "desc"
+MEDAL_OPEN_LEVEL_CFG_DESC_FIELD.full_name = ".ftcfg.medal_open_level_cfg.desc"
+MEDAL_OPEN_LEVEL_CFG_DESC_FIELD.number = 4
+MEDAL_OPEN_LEVEL_CFG_DESC_FIELD.index = 3
+MEDAL_OPEN_LEVEL_CFG_DESC_FIELD.label = 2
+MEDAL_OPEN_LEVEL_CFG_DESC_FIELD.has_default_value = false
+MEDAL_OPEN_LEVEL_CFG_DESC_FIELD.default_value = 0
+MEDAL_OPEN_LEVEL_CFG_DESC_FIELD.type = 5
+MEDAL_OPEN_LEVEL_CFG_DESC_FIELD.cpp_type = 1
+
+MEDAL_OPEN_LEVEL_CFG.name = "medal_open_level_cfg"
+MEDAL_OPEN_LEVEL_CFG.full_name = ".ftcfg.medal_open_level_cfg"
+MEDAL_OPEN_LEVEL_CFG.nested_types = {}
+MEDAL_OPEN_LEVEL_CFG.enum_types = {}
+MEDAL_OPEN_LEVEL_CFG.fields = {MEDAL_OPEN_LEVEL_CFG_TYPE_FIELD, MEDAL_OPEN_LEVEL_CFG_LEVEL_FIELD, MEDAL_OPEN_LEVEL_CFG_NAME_FIELD, MEDAL_OPEN_LEVEL_CFG_DESC_FIELD}
+MEDAL_OPEN_LEVEL_CFG.is_extendable = false
+MEDAL_OPEN_LEVEL_CFG.extensions = {}
+MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD.name = "items"
+MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD.full_name = ".ftcfg.medal_open_level_cfgs.items"
+MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD.number = 1
+MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD.index = 0
+MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD.label = 3
+MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD.has_default_value = false
+MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD.default_value = {}
+MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD.message_type = MEDAL_OPEN_LEVEL_CFG
+MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD.type = 11
+MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MEDAL_OPEN_LEVEL_CFGS.name = "medal_open_level_cfgs"
+MEDAL_OPEN_LEVEL_CFGS.full_name = ".ftcfg.medal_open_level_cfgs"
+MEDAL_OPEN_LEVEL_CFGS.nested_types = {}
+MEDAL_OPEN_LEVEL_CFGS.enum_types = {}
+MEDAL_OPEN_LEVEL_CFGS.fields = {MEDAL_OPEN_LEVEL_CFGS_ITEMS_FIELD}
+MEDAL_OPEN_LEVEL_CFGS.is_extendable = false
+MEDAL_OPEN_LEVEL_CFGS.extensions = {}
+MEDAL_STAR_OPEN_LEVEL_CFG_STARLEVEL_FIELD.name = "starlevel"
+MEDAL_STAR_OPEN_LEVEL_CFG_STARLEVEL_FIELD.full_name = ".ftcfg.medal_star_open_level_cfg.starlevel"
+MEDAL_STAR_OPEN_LEVEL_CFG_STARLEVEL_FIELD.number = 1
+MEDAL_STAR_OPEN_LEVEL_CFG_STARLEVEL_FIELD.index = 0
+MEDAL_STAR_OPEN_LEVEL_CFG_STARLEVEL_FIELD.label = 2
+MEDAL_STAR_OPEN_LEVEL_CFG_STARLEVEL_FIELD.has_default_value = false
+MEDAL_STAR_OPEN_LEVEL_CFG_STARLEVEL_FIELD.default_value = 0
+MEDAL_STAR_OPEN_LEVEL_CFG_STARLEVEL_FIELD.type = 5
+MEDAL_STAR_OPEN_LEVEL_CFG_STARLEVEL_FIELD.cpp_type = 1
+
+MEDAL_STAR_OPEN_LEVEL_CFG_LEVEL_FIELD.name = "level"
+MEDAL_STAR_OPEN_LEVEL_CFG_LEVEL_FIELD.full_name = ".ftcfg.medal_star_open_level_cfg.level"
+MEDAL_STAR_OPEN_LEVEL_CFG_LEVEL_FIELD.number = 2
+MEDAL_STAR_OPEN_LEVEL_CFG_LEVEL_FIELD.index = 1
+MEDAL_STAR_OPEN_LEVEL_CFG_LEVEL_FIELD.label = 2
+MEDAL_STAR_OPEN_LEVEL_CFG_LEVEL_FIELD.has_default_value = false
+MEDAL_STAR_OPEN_LEVEL_CFG_LEVEL_FIELD.default_value = 0
+MEDAL_STAR_OPEN_LEVEL_CFG_LEVEL_FIELD.type = 5
+MEDAL_STAR_OPEN_LEVEL_CFG_LEVEL_FIELD.cpp_type = 1
+
+MEDAL_STAR_OPEN_LEVEL_CFG_NUM_FIELD.name = "num"
+MEDAL_STAR_OPEN_LEVEL_CFG_NUM_FIELD.full_name = ".ftcfg.medal_star_open_level_cfg.num"
+MEDAL_STAR_OPEN_LEVEL_CFG_NUM_FIELD.number = 3
+MEDAL_STAR_OPEN_LEVEL_CFG_NUM_FIELD.index = 2
+MEDAL_STAR_OPEN_LEVEL_CFG_NUM_FIELD.label = 2
+MEDAL_STAR_OPEN_LEVEL_CFG_NUM_FIELD.has_default_value = false
+MEDAL_STAR_OPEN_LEVEL_CFG_NUM_FIELD.default_value = 0
+MEDAL_STAR_OPEN_LEVEL_CFG_NUM_FIELD.type = 5
+MEDAL_STAR_OPEN_LEVEL_CFG_NUM_FIELD.cpp_type = 1
+
+MEDAL_STAR_OPEN_LEVEL_CFG.name = "medal_star_open_level_cfg"
+MEDAL_STAR_OPEN_LEVEL_CFG.full_name = ".ftcfg.medal_star_open_level_cfg"
+MEDAL_STAR_OPEN_LEVEL_CFG.nested_types = {}
+MEDAL_STAR_OPEN_LEVEL_CFG.enum_types = {}
+MEDAL_STAR_OPEN_LEVEL_CFG.fields = {MEDAL_STAR_OPEN_LEVEL_CFG_STARLEVEL_FIELD, MEDAL_STAR_OPEN_LEVEL_CFG_LEVEL_FIELD, MEDAL_STAR_OPEN_LEVEL_CFG_NUM_FIELD}
+MEDAL_STAR_OPEN_LEVEL_CFG.is_extendable = false
+MEDAL_STAR_OPEN_LEVEL_CFG.extensions = {}
+MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD.name = "items"
+MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD.full_name = ".ftcfg.medal_star_open_level_cfgs.items"
+MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD.number = 1
+MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD.index = 0
+MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD.label = 3
+MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD.has_default_value = false
+MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD.default_value = {}
+MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD.message_type = MEDAL_STAR_OPEN_LEVEL_CFG
+MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD.type = 11
+MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MEDAL_STAR_OPEN_LEVEL_CFGS.name = "medal_star_open_level_cfgs"
+MEDAL_STAR_OPEN_LEVEL_CFGS.full_name = ".ftcfg.medal_star_open_level_cfgs"
+MEDAL_STAR_OPEN_LEVEL_CFGS.nested_types = {}
+MEDAL_STAR_OPEN_LEVEL_CFGS.enum_types = {}
+MEDAL_STAR_OPEN_LEVEL_CFGS.fields = {MEDAL_STAR_OPEN_LEVEL_CFGS_ITEMS_FIELD}
+MEDAL_STAR_OPEN_LEVEL_CFGS.is_extendable = false
+MEDAL_STAR_OPEN_LEVEL_CFGS.extensions = {}
+FORMULA_CFG_FORMULA_ID_FIELD.name = "formula_id"
+FORMULA_CFG_FORMULA_ID_FIELD.full_name = ".ftcfg.formula_cfg.formula_id"
+FORMULA_CFG_FORMULA_ID_FIELD.number = 1
+FORMULA_CFG_FORMULA_ID_FIELD.index = 0
+FORMULA_CFG_FORMULA_ID_FIELD.label = 2
+FORMULA_CFG_FORMULA_ID_FIELD.has_default_value = false
+FORMULA_CFG_FORMULA_ID_FIELD.default_value = 0
+FORMULA_CFG_FORMULA_ID_FIELD.type = 5
+FORMULA_CFG_FORMULA_ID_FIELD.cpp_type = 1
+
+FORMULA_CFG_COST_IDS_FIELD.name = "cost_ids"
+FORMULA_CFG_COST_IDS_FIELD.full_name = ".ftcfg.formula_cfg.cost_ids"
+FORMULA_CFG_COST_IDS_FIELD.number = 2
+FORMULA_CFG_COST_IDS_FIELD.index = 1
+FORMULA_CFG_COST_IDS_FIELD.label = 3
+FORMULA_CFG_COST_IDS_FIELD.has_default_value = false
+FORMULA_CFG_COST_IDS_FIELD.default_value = {}
+FORMULA_CFG_COST_IDS_FIELD.type = 5
+FORMULA_CFG_COST_IDS_FIELD.cpp_type = 1
+
+FORMULA_CFG_COST_COUNTS_FIELD.name = "cost_counts"
+FORMULA_CFG_COST_COUNTS_FIELD.full_name = ".ftcfg.formula_cfg.cost_counts"
+FORMULA_CFG_COST_COUNTS_FIELD.number = 3
+FORMULA_CFG_COST_COUNTS_FIELD.index = 2
+FORMULA_CFG_COST_COUNTS_FIELD.label = 3
+FORMULA_CFG_COST_COUNTS_FIELD.has_default_value = false
+FORMULA_CFG_COST_COUNTS_FIELD.default_value = {}
+FORMULA_CFG_COST_COUNTS_FIELD.type = 5
+FORMULA_CFG_COST_COUNTS_FIELD.cpp_type = 1
+
+FORMULA_CFG_ITEM_IDS_FIELD.name = "item_ids"
+FORMULA_CFG_ITEM_IDS_FIELD.full_name = ".ftcfg.formula_cfg.item_ids"
+FORMULA_CFG_ITEM_IDS_FIELD.number = 4
+FORMULA_CFG_ITEM_IDS_FIELD.index = 3
+FORMULA_CFG_ITEM_IDS_FIELD.label = 3
+FORMULA_CFG_ITEM_IDS_FIELD.has_default_value = false
+FORMULA_CFG_ITEM_IDS_FIELD.default_value = {}
+FORMULA_CFG_ITEM_IDS_FIELD.type = 5
+FORMULA_CFG_ITEM_IDS_FIELD.cpp_type = 1
+
+FORMULA_CFG_ITEM_COUNTS_FIELD.name = "item_counts"
+FORMULA_CFG_ITEM_COUNTS_FIELD.full_name = ".ftcfg.formula_cfg.item_counts"
+FORMULA_CFG_ITEM_COUNTS_FIELD.number = 5
+FORMULA_CFG_ITEM_COUNTS_FIELD.index = 4
+FORMULA_CFG_ITEM_COUNTS_FIELD.label = 3
+FORMULA_CFG_ITEM_COUNTS_FIELD.has_default_value = false
+FORMULA_CFG_ITEM_COUNTS_FIELD.default_value = {}
+FORMULA_CFG_ITEM_COUNTS_FIELD.type = 5
+FORMULA_CFG_ITEM_COUNTS_FIELD.cpp_type = 1
+
+FORMULA_CFG.name = "formula_cfg"
+FORMULA_CFG.full_name = ".ftcfg.formula_cfg"
+FORMULA_CFG.nested_types = {}
+FORMULA_CFG.enum_types = {}
+FORMULA_CFG.fields = {FORMULA_CFG_FORMULA_ID_FIELD, FORMULA_CFG_COST_IDS_FIELD, FORMULA_CFG_COST_COUNTS_FIELD, FORMULA_CFG_ITEM_IDS_FIELD, FORMULA_CFG_ITEM_COUNTS_FIELD}
+FORMULA_CFG.is_extendable = false
+FORMULA_CFG.extensions = {}
+FORMULA_CFGS_ITEMS_FIELD.name = "items"
+FORMULA_CFGS_ITEMS_FIELD.full_name = ".ftcfg.formula_cfgs.items"
+FORMULA_CFGS_ITEMS_FIELD.number = 1
+FORMULA_CFGS_ITEMS_FIELD.index = 0
+FORMULA_CFGS_ITEMS_FIELD.label = 3
+FORMULA_CFGS_ITEMS_FIELD.has_default_value = false
+FORMULA_CFGS_ITEMS_FIELD.default_value = {}
+FORMULA_CFGS_ITEMS_FIELD.message_type = FORMULA_CFG
+FORMULA_CFGS_ITEMS_FIELD.type = 11
+FORMULA_CFGS_ITEMS_FIELD.cpp_type = 10
+
+FORMULA_CFGS.name = "formula_cfgs"
+FORMULA_CFGS.full_name = ".ftcfg.formula_cfgs"
+FORMULA_CFGS.nested_types = {}
+FORMULA_CFGS.enum_types = {}
+FORMULA_CFGS.fields = {FORMULA_CFGS_ITEMS_FIELD}
+FORMULA_CFGS.is_extendable = false
+FORMULA_CFGS.extensions = {}
+MALL_ITEM_CFG_GUID_FIELD.name = "guid"
+MALL_ITEM_CFG_GUID_FIELD.full_name = ".ftcfg.mall_item_cfg.guid"
+MALL_ITEM_CFG_GUID_FIELD.number = 1
+MALL_ITEM_CFG_GUID_FIELD.index = 0
+MALL_ITEM_CFG_GUID_FIELD.label = 2
+MALL_ITEM_CFG_GUID_FIELD.has_default_value = false
+MALL_ITEM_CFG_GUID_FIELD.default_value = 0
+MALL_ITEM_CFG_GUID_FIELD.type = 13
+MALL_ITEM_CFG_GUID_FIELD.cpp_type = 3
+
+MALL_ITEM_CFG_TYPE_FIELD.name = "type"
+MALL_ITEM_CFG_TYPE_FIELD.full_name = ".ftcfg.mall_item_cfg.type"
+MALL_ITEM_CFG_TYPE_FIELD.number = 2
+MALL_ITEM_CFG_TYPE_FIELD.index = 1
+MALL_ITEM_CFG_TYPE_FIELD.label = 2
+MALL_ITEM_CFG_TYPE_FIELD.has_default_value = false
+MALL_ITEM_CFG_TYPE_FIELD.default_value = 0
+MALL_ITEM_CFG_TYPE_FIELD.type = 13
+MALL_ITEM_CFG_TYPE_FIELD.cpp_type = 3
+
+MALL_ITEM_CFG_REAL_GUID_FIELD.name = "real_guid"
+MALL_ITEM_CFG_REAL_GUID_FIELD.full_name = ".ftcfg.mall_item_cfg.real_guid"
+MALL_ITEM_CFG_REAL_GUID_FIELD.number = 3
+MALL_ITEM_CFG_REAL_GUID_FIELD.index = 2
+MALL_ITEM_CFG_REAL_GUID_FIELD.label = 2
+MALL_ITEM_CFG_REAL_GUID_FIELD.has_default_value = false
+MALL_ITEM_CFG_REAL_GUID_FIELD.default_value = 0
+MALL_ITEM_CFG_REAL_GUID_FIELD.type = 13
+MALL_ITEM_CFG_REAL_GUID_FIELD.cpp_type = 3
+
+MALL_ITEM_CFG_COST_TYPE_FIELD.name = "cost_type"
+MALL_ITEM_CFG_COST_TYPE_FIELD.full_name = ".ftcfg.mall_item_cfg.cost_type"
+MALL_ITEM_CFG_COST_TYPE_FIELD.number = 4
+MALL_ITEM_CFG_COST_TYPE_FIELD.index = 3
+MALL_ITEM_CFG_COST_TYPE_FIELD.label = 2
+MALL_ITEM_CFG_COST_TYPE_FIELD.has_default_value = false
+MALL_ITEM_CFG_COST_TYPE_FIELD.default_value = 0
+MALL_ITEM_CFG_COST_TYPE_FIELD.type = 13
+MALL_ITEM_CFG_COST_TYPE_FIELD.cpp_type = 3
+
+MALL_ITEM_CFG_COST_ORIGINAL_FIELD.name = "cost_original"
+MALL_ITEM_CFG_COST_ORIGINAL_FIELD.full_name = ".ftcfg.mall_item_cfg.cost_original"
+MALL_ITEM_CFG_COST_ORIGINAL_FIELD.number = 5
+MALL_ITEM_CFG_COST_ORIGINAL_FIELD.index = 4
+MALL_ITEM_CFG_COST_ORIGINAL_FIELD.label = 2
+MALL_ITEM_CFG_COST_ORIGINAL_FIELD.has_default_value = false
+MALL_ITEM_CFG_COST_ORIGINAL_FIELD.default_value = 0
+MALL_ITEM_CFG_COST_ORIGINAL_FIELD.type = 13
+MALL_ITEM_CFG_COST_ORIGINAL_FIELD.cpp_type = 3
+
+MALL_ITEM_CFG_COST_CURRENT_FIELD.name = "cost_current"
+MALL_ITEM_CFG_COST_CURRENT_FIELD.full_name = ".ftcfg.mall_item_cfg.cost_current"
+MALL_ITEM_CFG_COST_CURRENT_FIELD.number = 6
+MALL_ITEM_CFG_COST_CURRENT_FIELD.index = 5
+MALL_ITEM_CFG_COST_CURRENT_FIELD.label = 2
+MALL_ITEM_CFG_COST_CURRENT_FIELD.has_default_value = false
+MALL_ITEM_CFG_COST_CURRENT_FIELD.default_value = 0
+MALL_ITEM_CFG_COST_CURRENT_FIELD.type = 13
+MALL_ITEM_CFG_COST_CURRENT_FIELD.cpp_type = 3
+
+MALL_ITEM_CFG.name = "mall_item_cfg"
+MALL_ITEM_CFG.full_name = ".ftcfg.mall_item_cfg"
+MALL_ITEM_CFG.nested_types = {}
+MALL_ITEM_CFG.enum_types = {}
+MALL_ITEM_CFG.fields = {MALL_ITEM_CFG_GUID_FIELD, MALL_ITEM_CFG_TYPE_FIELD, MALL_ITEM_CFG_REAL_GUID_FIELD, MALL_ITEM_CFG_COST_TYPE_FIELD, MALL_ITEM_CFG_COST_ORIGINAL_FIELD, MALL_ITEM_CFG_COST_CURRENT_FIELD}
+MALL_ITEM_CFG.is_extendable = false
+MALL_ITEM_CFG.extensions = {}
+MALL_ITEM_CFGS_ITEMS_FIELD.name = "items"
+MALL_ITEM_CFGS_ITEMS_FIELD.full_name = ".ftcfg.mall_item_cfgs.items"
+MALL_ITEM_CFGS_ITEMS_FIELD.number = 1
+MALL_ITEM_CFGS_ITEMS_FIELD.index = 0
+MALL_ITEM_CFGS_ITEMS_FIELD.label = 3
+MALL_ITEM_CFGS_ITEMS_FIELD.has_default_value = false
+MALL_ITEM_CFGS_ITEMS_FIELD.default_value = {}
+MALL_ITEM_CFGS_ITEMS_FIELD.message_type = MALL_ITEM_CFG
+MALL_ITEM_CFGS_ITEMS_FIELD.type = 11
+MALL_ITEM_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MALL_ITEM_CFGS.name = "mall_item_cfgs"
+MALL_ITEM_CFGS.full_name = ".ftcfg.mall_item_cfgs"
+MALL_ITEM_CFGS.nested_types = {}
+MALL_ITEM_CFGS.enum_types = {}
+MALL_ITEM_CFGS.fields = {MALL_ITEM_CFGS_ITEMS_FIELD}
+MALL_ITEM_CFGS.is_extendable = false
+MALL_ITEM_CFGS.extensions = {}
+SHOP_TYPE_CFG_ID_FIELD.name = "id"
+SHOP_TYPE_CFG_ID_FIELD.full_name = ".ftcfg.shop_type_cfg.id"
+SHOP_TYPE_CFG_ID_FIELD.number = 1
+SHOP_TYPE_CFG_ID_FIELD.index = 0
+SHOP_TYPE_CFG_ID_FIELD.label = 2
+SHOP_TYPE_CFG_ID_FIELD.has_default_value = false
+SHOP_TYPE_CFG_ID_FIELD.default_value = 0
+SHOP_TYPE_CFG_ID_FIELD.type = 13
+SHOP_TYPE_CFG_ID_FIELD.cpp_type = 3
+
+SHOP_TYPE_CFG_SHOP_NAME_FIELD.name = "shop_name"
+SHOP_TYPE_CFG_SHOP_NAME_FIELD.full_name = ".ftcfg.shop_type_cfg.shop_name"
+SHOP_TYPE_CFG_SHOP_NAME_FIELD.number = 2
+SHOP_TYPE_CFG_SHOP_NAME_FIELD.index = 1
+SHOP_TYPE_CFG_SHOP_NAME_FIELD.label = 2
+SHOP_TYPE_CFG_SHOP_NAME_FIELD.has_default_value = false
+SHOP_TYPE_CFG_SHOP_NAME_FIELD.default_value = ""
+SHOP_TYPE_CFG_SHOP_NAME_FIELD.type = 9
+SHOP_TYPE_CFG_SHOP_NAME_FIELD.cpp_type = 9
+
+SHOP_TYPE_CFG_OPEN_LVL_FIELD.name = "open_lvl"
+SHOP_TYPE_CFG_OPEN_LVL_FIELD.full_name = ".ftcfg.shop_type_cfg.open_lvl"
+SHOP_TYPE_CFG_OPEN_LVL_FIELD.number = 3
+SHOP_TYPE_CFG_OPEN_LVL_FIELD.index = 2
+SHOP_TYPE_CFG_OPEN_LVL_FIELD.label = 2
+SHOP_TYPE_CFG_OPEN_LVL_FIELD.has_default_value = false
+SHOP_TYPE_CFG_OPEN_LVL_FIELD.default_value = 0
+SHOP_TYPE_CFG_OPEN_LVL_FIELD.type = 5
+SHOP_TYPE_CFG_OPEN_LVL_FIELD.cpp_type = 1
+
+SHOP_TYPE_CFG_SHOP_TYPE_FIELD.name = "shop_type"
+SHOP_TYPE_CFG_SHOP_TYPE_FIELD.full_name = ".ftcfg.shop_type_cfg.shop_type"
+SHOP_TYPE_CFG_SHOP_TYPE_FIELD.number = 4
+SHOP_TYPE_CFG_SHOP_TYPE_FIELD.index = 3
+SHOP_TYPE_CFG_SHOP_TYPE_FIELD.label = 2
+SHOP_TYPE_CFG_SHOP_TYPE_FIELD.has_default_value = false
+SHOP_TYPE_CFG_SHOP_TYPE_FIELD.default_value = nil
+SHOP_TYPE_CFG_SHOP_TYPE_FIELD.enum_type = config_predefine_pb.ESHOPTYPE
+SHOP_TYPE_CFG_SHOP_TYPE_FIELD.type = 14
+SHOP_TYPE_CFG_SHOP_TYPE_FIELD.cpp_type = 8
+
+SHOP_TYPE_CFG_SHOPSUB_TYPE_FIELD.name = "shopsub_type"
+SHOP_TYPE_CFG_SHOPSUB_TYPE_FIELD.full_name = ".ftcfg.shop_type_cfg.shopsub_type"
+SHOP_TYPE_CFG_SHOPSUB_TYPE_FIELD.number = 5
+SHOP_TYPE_CFG_SHOPSUB_TYPE_FIELD.index = 4
+SHOP_TYPE_CFG_SHOPSUB_TYPE_FIELD.label = 2
+SHOP_TYPE_CFG_SHOPSUB_TYPE_FIELD.has_default_value = false
+SHOP_TYPE_CFG_SHOPSUB_TYPE_FIELD.default_value = 0
+SHOP_TYPE_CFG_SHOPSUB_TYPE_FIELD.type = 5
+SHOP_TYPE_CFG_SHOPSUB_TYPE_FIELD.cpp_type = 1
+
+SHOP_TYPE_CFG_SHOP_ITEMS_FIELD.name = "shop_items"
+SHOP_TYPE_CFG_SHOP_ITEMS_FIELD.full_name = ".ftcfg.shop_type_cfg.shop_items"
+SHOP_TYPE_CFG_SHOP_ITEMS_FIELD.number = 6
+SHOP_TYPE_CFG_SHOP_ITEMS_FIELD.index = 5
+SHOP_TYPE_CFG_SHOP_ITEMS_FIELD.label = 3
+SHOP_TYPE_CFG_SHOP_ITEMS_FIELD.has_default_value = false
+SHOP_TYPE_CFG_SHOP_ITEMS_FIELD.default_value = {}
+SHOP_TYPE_CFG_SHOP_ITEMS_FIELD.type = 5
+SHOP_TYPE_CFG_SHOP_ITEMS_FIELD.cpp_type = 1
+
+SHOP_TYPE_CFG_ISTAB_FIELD.name = "istab"
+SHOP_TYPE_CFG_ISTAB_FIELD.full_name = ".ftcfg.shop_type_cfg.istab"
+SHOP_TYPE_CFG_ISTAB_FIELD.number = 7
+SHOP_TYPE_CFG_ISTAB_FIELD.index = 6
+SHOP_TYPE_CFG_ISTAB_FIELD.label = 2
+SHOP_TYPE_CFG_ISTAB_FIELD.has_default_value = false
+SHOP_TYPE_CFG_ISTAB_FIELD.default_value = 0
+SHOP_TYPE_CFG_ISTAB_FIELD.type = 5
+SHOP_TYPE_CFG_ISTAB_FIELD.cpp_type = 1
+
+SHOP_TYPE_CFG_TAB_NAME1_FIELD.name = "tab_name1"
+SHOP_TYPE_CFG_TAB_NAME1_FIELD.full_name = ".ftcfg.shop_type_cfg.tab_name1"
+SHOP_TYPE_CFG_TAB_NAME1_FIELD.number = 8
+SHOP_TYPE_CFG_TAB_NAME1_FIELD.index = 7
+SHOP_TYPE_CFG_TAB_NAME1_FIELD.label = 2
+SHOP_TYPE_CFG_TAB_NAME1_FIELD.has_default_value = false
+SHOP_TYPE_CFG_TAB_NAME1_FIELD.default_value = ""
+SHOP_TYPE_CFG_TAB_NAME1_FIELD.type = 9
+SHOP_TYPE_CFG_TAB_NAME1_FIELD.cpp_type = 9
+
+SHOP_TYPE_CFG_TAB_NAME2_FIELD.name = "tab_name2"
+SHOP_TYPE_CFG_TAB_NAME2_FIELD.full_name = ".ftcfg.shop_type_cfg.tab_name2"
+SHOP_TYPE_CFG_TAB_NAME2_FIELD.number = 9
+SHOP_TYPE_CFG_TAB_NAME2_FIELD.index = 8
+SHOP_TYPE_CFG_TAB_NAME2_FIELD.label = 2
+SHOP_TYPE_CFG_TAB_NAME2_FIELD.has_default_value = false
+SHOP_TYPE_CFG_TAB_NAME2_FIELD.default_value = ""
+SHOP_TYPE_CFG_TAB_NAME2_FIELD.type = 9
+SHOP_TYPE_CFG_TAB_NAME2_FIELD.cpp_type = 9
+
+SHOP_TYPE_CFG_TAB_NAME3_FIELD.name = "tab_name3"
+SHOP_TYPE_CFG_TAB_NAME3_FIELD.full_name = ".ftcfg.shop_type_cfg.tab_name3"
+SHOP_TYPE_CFG_TAB_NAME3_FIELD.number = 10
+SHOP_TYPE_CFG_TAB_NAME3_FIELD.index = 9
+SHOP_TYPE_CFG_TAB_NAME3_FIELD.label = 2
+SHOP_TYPE_CFG_TAB_NAME3_FIELD.has_default_value = false
+SHOP_TYPE_CFG_TAB_NAME3_FIELD.default_value = ""
+SHOP_TYPE_CFG_TAB_NAME3_FIELD.type = 9
+SHOP_TYPE_CFG_TAB_NAME3_FIELD.cpp_type = 9
+
+SHOP_TYPE_CFG_TAB_ITEMS1_FIELD.name = "tab_items1"
+SHOP_TYPE_CFG_TAB_ITEMS1_FIELD.full_name = ".ftcfg.shop_type_cfg.tab_items1"
+SHOP_TYPE_CFG_TAB_ITEMS1_FIELD.number = 11
+SHOP_TYPE_CFG_TAB_ITEMS1_FIELD.index = 10
+SHOP_TYPE_CFG_TAB_ITEMS1_FIELD.label = 3
+SHOP_TYPE_CFG_TAB_ITEMS1_FIELD.has_default_value = false
+SHOP_TYPE_CFG_TAB_ITEMS1_FIELD.default_value = {}
+SHOP_TYPE_CFG_TAB_ITEMS1_FIELD.type = 5
+SHOP_TYPE_CFG_TAB_ITEMS1_FIELD.cpp_type = 1
+
+SHOP_TYPE_CFG_TAB_ITEMS2_FIELD.name = "tab_items2"
+SHOP_TYPE_CFG_TAB_ITEMS2_FIELD.full_name = ".ftcfg.shop_type_cfg.tab_items2"
+SHOP_TYPE_CFG_TAB_ITEMS2_FIELD.number = 12
+SHOP_TYPE_CFG_TAB_ITEMS2_FIELD.index = 11
+SHOP_TYPE_CFG_TAB_ITEMS2_FIELD.label = 3
+SHOP_TYPE_CFG_TAB_ITEMS2_FIELD.has_default_value = false
+SHOP_TYPE_CFG_TAB_ITEMS2_FIELD.default_value = {}
+SHOP_TYPE_CFG_TAB_ITEMS2_FIELD.type = 5
+SHOP_TYPE_CFG_TAB_ITEMS2_FIELD.cpp_type = 1
+
+SHOP_TYPE_CFG_TAB_ITEMS3_FIELD.name = "tab_items3"
+SHOP_TYPE_CFG_TAB_ITEMS3_FIELD.full_name = ".ftcfg.shop_type_cfg.tab_items3"
+SHOP_TYPE_CFG_TAB_ITEMS3_FIELD.number = 13
+SHOP_TYPE_CFG_TAB_ITEMS3_FIELD.index = 12
+SHOP_TYPE_CFG_TAB_ITEMS3_FIELD.label = 3
+SHOP_TYPE_CFG_TAB_ITEMS3_FIELD.has_default_value = false
+SHOP_TYPE_CFG_TAB_ITEMS3_FIELD.default_value = {}
+SHOP_TYPE_CFG_TAB_ITEMS3_FIELD.type = 5
+SHOP_TYPE_CFG_TAB_ITEMS3_FIELD.cpp_type = 1
+
+SHOP_TYPE_CFG.name = "shop_type_cfg"
+SHOP_TYPE_CFG.full_name = ".ftcfg.shop_type_cfg"
+SHOP_TYPE_CFG.nested_types = {}
+SHOP_TYPE_CFG.enum_types = {}
+SHOP_TYPE_CFG.fields = {SHOP_TYPE_CFG_ID_FIELD, SHOP_TYPE_CFG_SHOP_NAME_FIELD, SHOP_TYPE_CFG_OPEN_LVL_FIELD, SHOP_TYPE_CFG_SHOP_TYPE_FIELD, SHOP_TYPE_CFG_SHOPSUB_TYPE_FIELD, SHOP_TYPE_CFG_SHOP_ITEMS_FIELD, SHOP_TYPE_CFG_ISTAB_FIELD, SHOP_TYPE_CFG_TAB_NAME1_FIELD, SHOP_TYPE_CFG_TAB_NAME2_FIELD, SHOP_TYPE_CFG_TAB_NAME3_FIELD, SHOP_TYPE_CFG_TAB_ITEMS1_FIELD, SHOP_TYPE_CFG_TAB_ITEMS2_FIELD, SHOP_TYPE_CFG_TAB_ITEMS3_FIELD}
+SHOP_TYPE_CFG.is_extendable = false
+SHOP_TYPE_CFG.extensions = {}
+SHOP_TYPE_CFGS_ITEMS_FIELD.name = "items"
+SHOP_TYPE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.shop_type_cfgs.items"
+SHOP_TYPE_CFGS_ITEMS_FIELD.number = 1
+SHOP_TYPE_CFGS_ITEMS_FIELD.index = 0
+SHOP_TYPE_CFGS_ITEMS_FIELD.label = 3
+SHOP_TYPE_CFGS_ITEMS_FIELD.has_default_value = false
+SHOP_TYPE_CFGS_ITEMS_FIELD.default_value = {}
+SHOP_TYPE_CFGS_ITEMS_FIELD.message_type = SHOP_TYPE_CFG
+SHOP_TYPE_CFGS_ITEMS_FIELD.type = 11
+SHOP_TYPE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SHOP_TYPE_CFGS.name = "shop_type_cfgs"
+SHOP_TYPE_CFGS.full_name = ".ftcfg.shop_type_cfgs"
+SHOP_TYPE_CFGS.nested_types = {}
+SHOP_TYPE_CFGS.enum_types = {}
+SHOP_TYPE_CFGS.fields = {SHOP_TYPE_CFGS_ITEMS_FIELD}
+SHOP_TYPE_CFGS.is_extendable = false
+SHOP_TYPE_CFGS.extensions = {}
+SCENE_EVENT_CFG_ID_FIELD.name = "id"
+SCENE_EVENT_CFG_ID_FIELD.full_name = ".ftcfg.scene_event_cfg.id"
+SCENE_EVENT_CFG_ID_FIELD.number = 1
+SCENE_EVENT_CFG_ID_FIELD.index = 0
+SCENE_EVENT_CFG_ID_FIELD.label = 2
+SCENE_EVENT_CFG_ID_FIELD.has_default_value = false
+SCENE_EVENT_CFG_ID_FIELD.default_value = 0
+SCENE_EVENT_CFG_ID_FIELD.type = 5
+SCENE_EVENT_CFG_ID_FIELD.cpp_type = 1
+
+SCENE_EVENT_CFG_STEP_ID_FIELD.name = "step_id"
+SCENE_EVENT_CFG_STEP_ID_FIELD.full_name = ".ftcfg.scene_event_cfg.step_id"
+SCENE_EVENT_CFG_STEP_ID_FIELD.number = 2
+SCENE_EVENT_CFG_STEP_ID_FIELD.index = 1
+SCENE_EVENT_CFG_STEP_ID_FIELD.label = 2
+SCENE_EVENT_CFG_STEP_ID_FIELD.has_default_value = false
+SCENE_EVENT_CFG_STEP_ID_FIELD.default_value = 0
+SCENE_EVENT_CFG_STEP_ID_FIELD.type = 5
+SCENE_EVENT_CFG_STEP_ID_FIELD.cpp_type = 1
+
+SCENE_EVENT_CFG_EVENT_TYPE_FIELD.name = "event_type"
+SCENE_EVENT_CFG_EVENT_TYPE_FIELD.full_name = ".ftcfg.scene_event_cfg.event_type"
+SCENE_EVENT_CFG_EVENT_TYPE_FIELD.number = 3
+SCENE_EVENT_CFG_EVENT_TYPE_FIELD.index = 2
+SCENE_EVENT_CFG_EVENT_TYPE_FIELD.label = 2
+SCENE_EVENT_CFG_EVENT_TYPE_FIELD.has_default_value = false
+SCENE_EVENT_CFG_EVENT_TYPE_FIELD.default_value = nil
+SCENE_EVENT_CFG_EVENT_TYPE_FIELD.enum_type = config_predefine_pb.ESCENEEVENTTYPE
+SCENE_EVENT_CFG_EVENT_TYPE_FIELD.type = 14
+SCENE_EVENT_CFG_EVENT_TYPE_FIELD.cpp_type = 8
+
+SCENE_EVENT_CFG_CONDIDITON1_FIELD.name = "condiditon1"
+SCENE_EVENT_CFG_CONDIDITON1_FIELD.full_name = ".ftcfg.scene_event_cfg.condiditon1"
+SCENE_EVENT_CFG_CONDIDITON1_FIELD.number = 4
+SCENE_EVENT_CFG_CONDIDITON1_FIELD.index = 3
+SCENE_EVENT_CFG_CONDIDITON1_FIELD.label = 2
+SCENE_EVENT_CFG_CONDIDITON1_FIELD.has_default_value = false
+SCENE_EVENT_CFG_CONDIDITON1_FIELD.default_value = 0
+SCENE_EVENT_CFG_CONDIDITON1_FIELD.type = 5
+SCENE_EVENT_CFG_CONDIDITON1_FIELD.cpp_type = 1
+
+SCENE_EVENT_CFG_CONDIDITON2_FIELD.name = "condiditon2"
+SCENE_EVENT_CFG_CONDIDITON2_FIELD.full_name = ".ftcfg.scene_event_cfg.condiditon2"
+SCENE_EVENT_CFG_CONDIDITON2_FIELD.number = 5
+SCENE_EVENT_CFG_CONDIDITON2_FIELD.index = 4
+SCENE_EVENT_CFG_CONDIDITON2_FIELD.label = 2
+SCENE_EVENT_CFG_CONDIDITON2_FIELD.has_default_value = false
+SCENE_EVENT_CFG_CONDIDITON2_FIELD.default_value = 0
+SCENE_EVENT_CFG_CONDIDITON2_FIELD.type = 5
+SCENE_EVENT_CFG_CONDIDITON2_FIELD.cpp_type = 1
+
+SCENE_EVENT_CFG_CONDIDITON3_FIELD.name = "condiditon3"
+SCENE_EVENT_CFG_CONDIDITON3_FIELD.full_name = ".ftcfg.scene_event_cfg.condiditon3"
+SCENE_EVENT_CFG_CONDIDITON3_FIELD.number = 6
+SCENE_EVENT_CFG_CONDIDITON3_FIELD.index = 5
+SCENE_EVENT_CFG_CONDIDITON3_FIELD.label = 2
+SCENE_EVENT_CFG_CONDIDITON3_FIELD.has_default_value = false
+SCENE_EVENT_CFG_CONDIDITON3_FIELD.default_value = 0
+SCENE_EVENT_CFG_CONDIDITON3_FIELD.type = 5
+SCENE_EVENT_CFG_CONDIDITON3_FIELD.cpp_type = 1
+
+SCENE_EVENT_CFG_CONDIDITON4_FIELD.name = "condiditon4"
+SCENE_EVENT_CFG_CONDIDITON4_FIELD.full_name = ".ftcfg.scene_event_cfg.condiditon4"
+SCENE_EVENT_CFG_CONDIDITON4_FIELD.number = 7
+SCENE_EVENT_CFG_CONDIDITON4_FIELD.index = 6
+SCENE_EVENT_CFG_CONDIDITON4_FIELD.label = 2
+SCENE_EVENT_CFG_CONDIDITON4_FIELD.has_default_value = false
+SCENE_EVENT_CFG_CONDIDITON4_FIELD.default_value = 0
+SCENE_EVENT_CFG_CONDIDITON4_FIELD.type = 5
+SCENE_EVENT_CFG_CONDIDITON4_FIELD.cpp_type = 1
+
+SCENE_EVENT_CFG_RESULT_TYPE_FIELD.name = "result_type"
+SCENE_EVENT_CFG_RESULT_TYPE_FIELD.full_name = ".ftcfg.scene_event_cfg.result_type"
+SCENE_EVENT_CFG_RESULT_TYPE_FIELD.number = 8
+SCENE_EVENT_CFG_RESULT_TYPE_FIELD.index = 7
+SCENE_EVENT_CFG_RESULT_TYPE_FIELD.label = 2
+SCENE_EVENT_CFG_RESULT_TYPE_FIELD.has_default_value = false
+SCENE_EVENT_CFG_RESULT_TYPE_FIELD.default_value = nil
+SCENE_EVENT_CFG_RESULT_TYPE_FIELD.enum_type = config_predefine_pb.ESCENERESULTTYPE
+SCENE_EVENT_CFG_RESULT_TYPE_FIELD.type = 14
+SCENE_EVENT_CFG_RESULT_TYPE_FIELD.cpp_type = 8
+
+SCENE_EVENT_CFG_RESULT1_FIELD.name = "result1"
+SCENE_EVENT_CFG_RESULT1_FIELD.full_name = ".ftcfg.scene_event_cfg.result1"
+SCENE_EVENT_CFG_RESULT1_FIELD.number = 9
+SCENE_EVENT_CFG_RESULT1_FIELD.index = 8
+SCENE_EVENT_CFG_RESULT1_FIELD.label = 3
+SCENE_EVENT_CFG_RESULT1_FIELD.has_default_value = false
+SCENE_EVENT_CFG_RESULT1_FIELD.default_value = {}
+SCENE_EVENT_CFG_RESULT1_FIELD.type = 5
+SCENE_EVENT_CFG_RESULT1_FIELD.cpp_type = 1
+
+SCENE_EVENT_CFG_RESULT2_FIELD.name = "result2"
+SCENE_EVENT_CFG_RESULT2_FIELD.full_name = ".ftcfg.scene_event_cfg.result2"
+SCENE_EVENT_CFG_RESULT2_FIELD.number = 10
+SCENE_EVENT_CFG_RESULT2_FIELD.index = 9
+SCENE_EVENT_CFG_RESULT2_FIELD.label = 3
+SCENE_EVENT_CFG_RESULT2_FIELD.has_default_value = false
+SCENE_EVENT_CFG_RESULT2_FIELD.default_value = {}
+SCENE_EVENT_CFG_RESULT2_FIELD.type = 5
+SCENE_EVENT_CFG_RESULT2_FIELD.cpp_type = 1
+
+SCENE_EVENT_CFG_RESULT3_FIELD.name = "result3"
+SCENE_EVENT_CFG_RESULT3_FIELD.full_name = ".ftcfg.scene_event_cfg.result3"
+SCENE_EVENT_CFG_RESULT3_FIELD.number = 11
+SCENE_EVENT_CFG_RESULT3_FIELD.index = 10
+SCENE_EVENT_CFG_RESULT3_FIELD.label = 3
+SCENE_EVENT_CFG_RESULT3_FIELD.has_default_value = false
+SCENE_EVENT_CFG_RESULT3_FIELD.default_value = {}
+SCENE_EVENT_CFG_RESULT3_FIELD.type = 5
+SCENE_EVENT_CFG_RESULT3_FIELD.cpp_type = 1
+
+SCENE_EVENT_CFG_RESULT4_FIELD.name = "result4"
+SCENE_EVENT_CFG_RESULT4_FIELD.full_name = ".ftcfg.scene_event_cfg.result4"
+SCENE_EVENT_CFG_RESULT4_FIELD.number = 12
+SCENE_EVENT_CFG_RESULT4_FIELD.index = 11
+SCENE_EVENT_CFG_RESULT4_FIELD.label = 3
+SCENE_EVENT_CFG_RESULT4_FIELD.has_default_value = false
+SCENE_EVENT_CFG_RESULT4_FIELD.default_value = {}
+SCENE_EVENT_CFG_RESULT4_FIELD.type = 5
+SCENE_EVENT_CFG_RESULT4_FIELD.cpp_type = 1
+
+SCENE_EVENT_CFG.name = "scene_event_cfg"
+SCENE_EVENT_CFG.full_name = ".ftcfg.scene_event_cfg"
+SCENE_EVENT_CFG.nested_types = {}
+SCENE_EVENT_CFG.enum_types = {}
+SCENE_EVENT_CFG.fields = {SCENE_EVENT_CFG_ID_FIELD, SCENE_EVENT_CFG_STEP_ID_FIELD, SCENE_EVENT_CFG_EVENT_TYPE_FIELD, SCENE_EVENT_CFG_CONDIDITON1_FIELD, SCENE_EVENT_CFG_CONDIDITON2_FIELD, SCENE_EVENT_CFG_CONDIDITON3_FIELD, SCENE_EVENT_CFG_CONDIDITON4_FIELD, SCENE_EVENT_CFG_RESULT_TYPE_FIELD, SCENE_EVENT_CFG_RESULT1_FIELD, SCENE_EVENT_CFG_RESULT2_FIELD, SCENE_EVENT_CFG_RESULT3_FIELD, SCENE_EVENT_CFG_RESULT4_FIELD}
+SCENE_EVENT_CFG.is_extendable = false
+SCENE_EVENT_CFG.extensions = {}
+SCENE_EVENT_CFGS_ITEMS_FIELD.name = "items"
+SCENE_EVENT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.scene_event_cfgs.items"
+SCENE_EVENT_CFGS_ITEMS_FIELD.number = 1
+SCENE_EVENT_CFGS_ITEMS_FIELD.index = 0
+SCENE_EVENT_CFGS_ITEMS_FIELD.label = 3
+SCENE_EVENT_CFGS_ITEMS_FIELD.has_default_value = false
+SCENE_EVENT_CFGS_ITEMS_FIELD.default_value = {}
+SCENE_EVENT_CFGS_ITEMS_FIELD.message_type = SCENE_EVENT_CFG
+SCENE_EVENT_CFGS_ITEMS_FIELD.type = 11
+SCENE_EVENT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SCENE_EVENT_CFGS.name = "scene_event_cfgs"
+SCENE_EVENT_CFGS.full_name = ".ftcfg.scene_event_cfgs"
+SCENE_EVENT_CFGS.nested_types = {}
+SCENE_EVENT_CFGS.enum_types = {}
+SCENE_EVENT_CFGS.fields = {SCENE_EVENT_CFGS_ITEMS_FIELD}
+SCENE_EVENT_CFGS.is_extendable = false
+SCENE_EVENT_CFGS.extensions = {}
+SCENE_PORTAL_CFG_ID_FIELD.name = "id"
+SCENE_PORTAL_CFG_ID_FIELD.full_name = ".ftcfg.scene_portal_cfg.id"
+SCENE_PORTAL_CFG_ID_FIELD.number = 1
+SCENE_PORTAL_CFG_ID_FIELD.index = 0
+SCENE_PORTAL_CFG_ID_FIELD.label = 2
+SCENE_PORTAL_CFG_ID_FIELD.has_default_value = false
+SCENE_PORTAL_CFG_ID_FIELD.default_value = 0
+SCENE_PORTAL_CFG_ID_FIELD.type = 5
+SCENE_PORTAL_CFG_ID_FIELD.cpp_type = 1
+
+SCENE_PORTAL_CFG_MAP_ID_FIELD.name = "map_id"
+SCENE_PORTAL_CFG_MAP_ID_FIELD.full_name = ".ftcfg.scene_portal_cfg.map_id"
+SCENE_PORTAL_CFG_MAP_ID_FIELD.number = 2
+SCENE_PORTAL_CFG_MAP_ID_FIELD.index = 1
+SCENE_PORTAL_CFG_MAP_ID_FIELD.label = 2
+SCENE_PORTAL_CFG_MAP_ID_FIELD.has_default_value = false
+SCENE_PORTAL_CFG_MAP_ID_FIELD.default_value = 0
+SCENE_PORTAL_CFG_MAP_ID_FIELD.type = 5
+SCENE_PORTAL_CFG_MAP_ID_FIELD.cpp_type = 1
+
+SCENE_PORTAL_CFG_POS_X_FIELD.name = "pos_x"
+SCENE_PORTAL_CFG_POS_X_FIELD.full_name = ".ftcfg.scene_portal_cfg.pos_x"
+SCENE_PORTAL_CFG_POS_X_FIELD.number = 3
+SCENE_PORTAL_CFG_POS_X_FIELD.index = 2
+SCENE_PORTAL_CFG_POS_X_FIELD.label = 2
+SCENE_PORTAL_CFG_POS_X_FIELD.has_default_value = false
+SCENE_PORTAL_CFG_POS_X_FIELD.default_value = 0.0
+SCENE_PORTAL_CFG_POS_X_FIELD.type = 2
+SCENE_PORTAL_CFG_POS_X_FIELD.cpp_type = 6
+
+SCENE_PORTAL_CFG_POS_Y_FIELD.name = "pos_y"
+SCENE_PORTAL_CFG_POS_Y_FIELD.full_name = ".ftcfg.scene_portal_cfg.pos_y"
+SCENE_PORTAL_CFG_POS_Y_FIELD.number = 4
+SCENE_PORTAL_CFG_POS_Y_FIELD.index = 3
+SCENE_PORTAL_CFG_POS_Y_FIELD.label = 2
+SCENE_PORTAL_CFG_POS_Y_FIELD.has_default_value = false
+SCENE_PORTAL_CFG_POS_Y_FIELD.default_value = 0.0
+SCENE_PORTAL_CFG_POS_Y_FIELD.type = 2
+SCENE_PORTAL_CFG_POS_Y_FIELD.cpp_type = 6
+
+SCENE_PORTAL_CFG_POS_Z_FIELD.name = "pos_z"
+SCENE_PORTAL_CFG_POS_Z_FIELD.full_name = ".ftcfg.scene_portal_cfg.pos_z"
+SCENE_PORTAL_CFG_POS_Z_FIELD.number = 5
+SCENE_PORTAL_CFG_POS_Z_FIELD.index = 4
+SCENE_PORTAL_CFG_POS_Z_FIELD.label = 2
+SCENE_PORTAL_CFG_POS_Z_FIELD.has_default_value = false
+SCENE_PORTAL_CFG_POS_Z_FIELD.default_value = 0.0
+SCENE_PORTAL_CFG_POS_Z_FIELD.type = 2
+SCENE_PORTAL_CFG_POS_Z_FIELD.cpp_type = 6
+
+SCENE_PORTAL_CFG_RADIUS_FIELD.name = "radius"
+SCENE_PORTAL_CFG_RADIUS_FIELD.full_name = ".ftcfg.scene_portal_cfg.radius"
+SCENE_PORTAL_CFG_RADIUS_FIELD.number = 6
+SCENE_PORTAL_CFG_RADIUS_FIELD.index = 5
+SCENE_PORTAL_CFG_RADIUS_FIELD.label = 2
+SCENE_PORTAL_CFG_RADIUS_FIELD.has_default_value = false
+SCENE_PORTAL_CFG_RADIUS_FIELD.default_value = 0.0
+SCENE_PORTAL_CFG_RADIUS_FIELD.type = 2
+SCENE_PORTAL_CFG_RADIUS_FIELD.cpp_type = 6
+
+SCENE_PORTAL_CFG_ORIENTATION_FIELD.name = "orientation"
+SCENE_PORTAL_CFG_ORIENTATION_FIELD.full_name = ".ftcfg.scene_portal_cfg.orientation"
+SCENE_PORTAL_CFG_ORIENTATION_FIELD.number = 7
+SCENE_PORTAL_CFG_ORIENTATION_FIELD.index = 6
+SCENE_PORTAL_CFG_ORIENTATION_FIELD.label = 2
+SCENE_PORTAL_CFG_ORIENTATION_FIELD.has_default_value = false
+SCENE_PORTAL_CFG_ORIENTATION_FIELD.default_value = 0.0
+SCENE_PORTAL_CFG_ORIENTATION_FIELD.type = 2
+SCENE_PORTAL_CFG_ORIENTATION_FIELD.cpp_type = 6
+
+SCENE_PORTAL_CFG_ENABLED_FIELD.name = "enabled"
+SCENE_PORTAL_CFG_ENABLED_FIELD.full_name = ".ftcfg.scene_portal_cfg.enabled"
+SCENE_PORTAL_CFG_ENABLED_FIELD.number = 8
+SCENE_PORTAL_CFG_ENABLED_FIELD.index = 7
+SCENE_PORTAL_CFG_ENABLED_FIELD.label = 2
+SCENE_PORTAL_CFG_ENABLED_FIELD.has_default_value = false
+SCENE_PORTAL_CFG_ENABLED_FIELD.default_value = 0
+SCENE_PORTAL_CFG_ENABLED_FIELD.type = 5
+SCENE_PORTAL_CFG_ENABLED_FIELD.cpp_type = 1
+
+SCENE_PORTAL_CFG_RESID_FIELD.name = "resid"
+SCENE_PORTAL_CFG_RESID_FIELD.full_name = ".ftcfg.scene_portal_cfg.resid"
+SCENE_PORTAL_CFG_RESID_FIELD.number = 9
+SCENE_PORTAL_CFG_RESID_FIELD.index = 8
+SCENE_PORTAL_CFG_RESID_FIELD.label = 2
+SCENE_PORTAL_CFG_RESID_FIELD.has_default_value = false
+SCENE_PORTAL_CFG_RESID_FIELD.default_value = 0
+SCENE_PORTAL_CFG_RESID_FIELD.type = 5
+SCENE_PORTAL_CFG_RESID_FIELD.cpp_type = 1
+
+SCENE_PORTAL_CFG.name = "scene_portal_cfg"
+SCENE_PORTAL_CFG.full_name = ".ftcfg.scene_portal_cfg"
+SCENE_PORTAL_CFG.nested_types = {}
+SCENE_PORTAL_CFG.enum_types = {}
+SCENE_PORTAL_CFG.fields = {SCENE_PORTAL_CFG_ID_FIELD, SCENE_PORTAL_CFG_MAP_ID_FIELD, SCENE_PORTAL_CFG_POS_X_FIELD, SCENE_PORTAL_CFG_POS_Y_FIELD, SCENE_PORTAL_CFG_POS_Z_FIELD, SCENE_PORTAL_CFG_RADIUS_FIELD, SCENE_PORTAL_CFG_ORIENTATION_FIELD, SCENE_PORTAL_CFG_ENABLED_FIELD, SCENE_PORTAL_CFG_RESID_FIELD}
+SCENE_PORTAL_CFG.is_extendable = false
+SCENE_PORTAL_CFG.extensions = {}
+SCENE_PORTAL_CFGS_ITEMS_FIELD.name = "items"
+SCENE_PORTAL_CFGS_ITEMS_FIELD.full_name = ".ftcfg.scene_portal_cfgs.items"
+SCENE_PORTAL_CFGS_ITEMS_FIELD.number = 1
+SCENE_PORTAL_CFGS_ITEMS_FIELD.index = 0
+SCENE_PORTAL_CFGS_ITEMS_FIELD.label = 3
+SCENE_PORTAL_CFGS_ITEMS_FIELD.has_default_value = false
+SCENE_PORTAL_CFGS_ITEMS_FIELD.default_value = {}
+SCENE_PORTAL_CFGS_ITEMS_FIELD.message_type = SCENE_PORTAL_CFG
+SCENE_PORTAL_CFGS_ITEMS_FIELD.type = 11
+SCENE_PORTAL_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SCENE_PORTAL_CFGS.name = "scene_portal_cfgs"
+SCENE_PORTAL_CFGS.full_name = ".ftcfg.scene_portal_cfgs"
+SCENE_PORTAL_CFGS.nested_types = {}
+SCENE_PORTAL_CFGS.enum_types = {}
+SCENE_PORTAL_CFGS.fields = {SCENE_PORTAL_CFGS_ITEMS_FIELD}
+SCENE_PORTAL_CFGS.is_extendable = false
+SCENE_PORTAL_CFGS.extensions = {}
+SCENE_FUNCTION_CFG_ID_FIELD.name = "id"
+SCENE_FUNCTION_CFG_ID_FIELD.full_name = ".ftcfg.scene_function_cfg.id"
+SCENE_FUNCTION_CFG_ID_FIELD.number = 1
+SCENE_FUNCTION_CFG_ID_FIELD.index = 0
+SCENE_FUNCTION_CFG_ID_FIELD.label = 2
+SCENE_FUNCTION_CFG_ID_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_ID_FIELD.default_value = 0
+SCENE_FUNCTION_CFG_ID_FIELD.type = 5
+SCENE_FUNCTION_CFG_ID_FIELD.cpp_type = 1
+
+SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD.name = "open_functions"
+SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD.full_name = ".ftcfg.scene_function_cfg.open_functions"
+SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD.number = 2
+SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD.index = 1
+SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD.label = 3
+SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD.default_value = {}
+SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD.type = 14
+SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD.cpp_type = 8
+
+SCENE_FUNCTION_CFG_OPEN_PARAS_FIELD.name = "open_paras"
+SCENE_FUNCTION_CFG_OPEN_PARAS_FIELD.full_name = ".ftcfg.scene_function_cfg.open_paras"
+SCENE_FUNCTION_CFG_OPEN_PARAS_FIELD.number = 3
+SCENE_FUNCTION_CFG_OPEN_PARAS_FIELD.index = 2
+SCENE_FUNCTION_CFG_OPEN_PARAS_FIELD.label = 3
+SCENE_FUNCTION_CFG_OPEN_PARAS_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_OPEN_PARAS_FIELD.default_value = {}
+SCENE_FUNCTION_CFG_OPEN_PARAS_FIELD.type = 5
+SCENE_FUNCTION_CFG_OPEN_PARAS_FIELD.cpp_type = 1
+
+SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD.name = "close_functions"
+SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD.full_name = ".ftcfg.scene_function_cfg.close_functions"
+SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD.number = 4
+SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD.index = 3
+SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD.label = 3
+SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD.default_value = {}
+SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD.type = 14
+SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD.cpp_type = 8
+
+SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD.name = "leave_functions"
+SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD.full_name = ".ftcfg.scene_function_cfg.leave_functions"
+SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD.number = 5
+SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD.index = 4
+SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD.label = 3
+SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD.default_value = {}
+SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD.type = 14
+SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD.cpp_type = 8
+
+SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD.name = "limit_functions"
+SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD.full_name = ".ftcfg.scene_function_cfg.limit_functions"
+SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD.number = 6
+SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD.index = 5
+SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD.label = 3
+SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD.default_value = {}
+SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD.type = 14
+SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD.cpp_type = 8
+
+SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD.name = "slimit_functions"
+SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD.full_name = ".ftcfg.scene_function_cfg.slimit_functions"
+SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD.number = 7
+SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD.index = 6
+SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD.label = 3
+SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD.default_value = {}
+SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD.type = 14
+SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD.cpp_type = 8
+
+SCENE_FUNCTION_CFG_BACK_SCENE_FIELD.name = "back_scene"
+SCENE_FUNCTION_CFG_BACK_SCENE_FIELD.full_name = ".ftcfg.scene_function_cfg.back_scene"
+SCENE_FUNCTION_CFG_BACK_SCENE_FIELD.number = 8
+SCENE_FUNCTION_CFG_BACK_SCENE_FIELD.index = 7
+SCENE_FUNCTION_CFG_BACK_SCENE_FIELD.label = 2
+SCENE_FUNCTION_CFG_BACK_SCENE_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_BACK_SCENE_FIELD.default_value = 0
+SCENE_FUNCTION_CFG_BACK_SCENE_FIELD.type = 5
+SCENE_FUNCTION_CFG_BACK_SCENE_FIELD.cpp_type = 1
+
+SCENE_FUNCTION_CFG_RANK_IDS_FIELD.name = "rank_ids"
+SCENE_FUNCTION_CFG_RANK_IDS_FIELD.full_name = ".ftcfg.scene_function_cfg.rank_ids"
+SCENE_FUNCTION_CFG_RANK_IDS_FIELD.number = 9
+SCENE_FUNCTION_CFG_RANK_IDS_FIELD.index = 8
+SCENE_FUNCTION_CFG_RANK_IDS_FIELD.label = 3
+SCENE_FUNCTION_CFG_RANK_IDS_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_RANK_IDS_FIELD.default_value = {}
+SCENE_FUNCTION_CFG_RANK_IDS_FIELD.type = 5
+SCENE_FUNCTION_CFG_RANK_IDS_FIELD.cpp_type = 1
+
+SCENE_FUNCTION_CFG_RANK_TYPE_FIELD.name = "rank_type"
+SCENE_FUNCTION_CFG_RANK_TYPE_FIELD.full_name = ".ftcfg.scene_function_cfg.rank_type"
+SCENE_FUNCTION_CFG_RANK_TYPE_FIELD.number = 10
+SCENE_FUNCTION_CFG_RANK_TYPE_FIELD.index = 9
+SCENE_FUNCTION_CFG_RANK_TYPE_FIELD.label = 2
+SCENE_FUNCTION_CFG_RANK_TYPE_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_RANK_TYPE_FIELD.default_value = nil
+SCENE_FUNCTION_CFG_RANK_TYPE_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+SCENE_FUNCTION_CFG_RANK_TYPE_FIELD.type = 14
+SCENE_FUNCTION_CFG_RANK_TYPE_FIELD.cpp_type = 8
+
+SCENE_FUNCTION_CFG_RANK_LINENAMES_FIELD.name = "rank_linenames"
+SCENE_FUNCTION_CFG_RANK_LINENAMES_FIELD.full_name = ".ftcfg.scene_function_cfg.rank_linenames"
+SCENE_FUNCTION_CFG_RANK_LINENAMES_FIELD.number = 11
+SCENE_FUNCTION_CFG_RANK_LINENAMES_FIELD.index = 10
+SCENE_FUNCTION_CFG_RANK_LINENAMES_FIELD.label = 3
+SCENE_FUNCTION_CFG_RANK_LINENAMES_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_RANK_LINENAMES_FIELD.default_value = {}
+SCENE_FUNCTION_CFG_RANK_LINENAMES_FIELD.type = 5
+SCENE_FUNCTION_CFG_RANK_LINENAMES_FIELD.cpp_type = 1
+
+SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD.name = "close_opens"
+SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD.full_name = ".ftcfg.scene_function_cfg.close_opens"
+SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD.number = 12
+SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD.index = 11
+SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD.label = 3
+SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD.has_default_value = false
+SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD.default_value = {}
+SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD.type = 14
+SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD.cpp_type = 8
+
+SCENE_FUNCTION_CFG.name = "scene_function_cfg"
+SCENE_FUNCTION_CFG.full_name = ".ftcfg.scene_function_cfg"
+SCENE_FUNCTION_CFG.nested_types = {}
+SCENE_FUNCTION_CFG.enum_types = {}
+SCENE_FUNCTION_CFG.fields = {SCENE_FUNCTION_CFG_ID_FIELD, SCENE_FUNCTION_CFG_OPEN_FUNCTIONS_FIELD, SCENE_FUNCTION_CFG_OPEN_PARAS_FIELD, SCENE_FUNCTION_CFG_CLOSE_FUNCTIONS_FIELD, SCENE_FUNCTION_CFG_LEAVE_FUNCTIONS_FIELD, SCENE_FUNCTION_CFG_LIMIT_FUNCTIONS_FIELD, SCENE_FUNCTION_CFG_SLIMIT_FUNCTIONS_FIELD, SCENE_FUNCTION_CFG_BACK_SCENE_FIELD, SCENE_FUNCTION_CFG_RANK_IDS_FIELD, SCENE_FUNCTION_CFG_RANK_TYPE_FIELD, SCENE_FUNCTION_CFG_RANK_LINENAMES_FIELD, SCENE_FUNCTION_CFG_CLOSE_OPENS_FIELD}
+SCENE_FUNCTION_CFG.is_extendable = false
+SCENE_FUNCTION_CFG.extensions = {}
+SCENE_FUNCTION_CFGS_ITEMS_FIELD.name = "items"
+SCENE_FUNCTION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.scene_function_cfgs.items"
+SCENE_FUNCTION_CFGS_ITEMS_FIELD.number = 1
+SCENE_FUNCTION_CFGS_ITEMS_FIELD.index = 0
+SCENE_FUNCTION_CFGS_ITEMS_FIELD.label = 3
+SCENE_FUNCTION_CFGS_ITEMS_FIELD.has_default_value = false
+SCENE_FUNCTION_CFGS_ITEMS_FIELD.default_value = {}
+SCENE_FUNCTION_CFGS_ITEMS_FIELD.message_type = SCENE_FUNCTION_CFG
+SCENE_FUNCTION_CFGS_ITEMS_FIELD.type = 11
+SCENE_FUNCTION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SCENE_FUNCTION_CFGS.name = "scene_function_cfgs"
+SCENE_FUNCTION_CFGS.full_name = ".ftcfg.scene_function_cfgs"
+SCENE_FUNCTION_CFGS.nested_types = {}
+SCENE_FUNCTION_CFGS.enum_types = {}
+SCENE_FUNCTION_CFGS.fields = {SCENE_FUNCTION_CFGS_ITEMS_FIELD}
+SCENE_FUNCTION_CFGS.is_extendable = false
+SCENE_FUNCTION_CFGS.extensions = {}
+SCENE_AREA_CFG_AREA_ID_FIELD.name = "area_id"
+SCENE_AREA_CFG_AREA_ID_FIELD.full_name = ".ftcfg.scene_area_cfg.area_id"
+SCENE_AREA_CFG_AREA_ID_FIELD.number = 1
+SCENE_AREA_CFG_AREA_ID_FIELD.index = 0
+SCENE_AREA_CFG_AREA_ID_FIELD.label = 2
+SCENE_AREA_CFG_AREA_ID_FIELD.has_default_value = false
+SCENE_AREA_CFG_AREA_ID_FIELD.default_value = 0
+SCENE_AREA_CFG_AREA_ID_FIELD.type = 5
+SCENE_AREA_CFG_AREA_ID_FIELD.cpp_type = 1
+
+SCENE_AREA_CFG_MAP_ID_FIELD.name = "map_id"
+SCENE_AREA_CFG_MAP_ID_FIELD.full_name = ".ftcfg.scene_area_cfg.map_id"
+SCENE_AREA_CFG_MAP_ID_FIELD.number = 2
+SCENE_AREA_CFG_MAP_ID_FIELD.index = 1
+SCENE_AREA_CFG_MAP_ID_FIELD.label = 2
+SCENE_AREA_CFG_MAP_ID_FIELD.has_default_value = false
+SCENE_AREA_CFG_MAP_ID_FIELD.default_value = 0
+SCENE_AREA_CFG_MAP_ID_FIELD.type = 5
+SCENE_AREA_CFG_MAP_ID_FIELD.cpp_type = 1
+
+SCENE_AREA_CFG_AREA_TYPE_FIELD.name = "area_type"
+SCENE_AREA_CFG_AREA_TYPE_FIELD.full_name = ".ftcfg.scene_area_cfg.area_type"
+SCENE_AREA_CFG_AREA_TYPE_FIELD.number = 3
+SCENE_AREA_CFG_AREA_TYPE_FIELD.index = 2
+SCENE_AREA_CFG_AREA_TYPE_FIELD.label = 2
+SCENE_AREA_CFG_AREA_TYPE_FIELD.has_default_value = false
+SCENE_AREA_CFG_AREA_TYPE_FIELD.default_value = nil
+SCENE_AREA_CFG_AREA_TYPE_FIELD.enum_type = config_predefine_pb.EAREATRIGGERTYPE
+SCENE_AREA_CFG_AREA_TYPE_FIELD.type = 14
+SCENE_AREA_CFG_AREA_TYPE_FIELD.cpp_type = 8
+
+SCENE_AREA_CFG_POS_X_FIELD.name = "pos_x"
+SCENE_AREA_CFG_POS_X_FIELD.full_name = ".ftcfg.scene_area_cfg.pos_x"
+SCENE_AREA_CFG_POS_X_FIELD.number = 4
+SCENE_AREA_CFG_POS_X_FIELD.index = 3
+SCENE_AREA_CFG_POS_X_FIELD.label = 2
+SCENE_AREA_CFG_POS_X_FIELD.has_default_value = false
+SCENE_AREA_CFG_POS_X_FIELD.default_value = 0.0
+SCENE_AREA_CFG_POS_X_FIELD.type = 2
+SCENE_AREA_CFG_POS_X_FIELD.cpp_type = 6
+
+SCENE_AREA_CFG_POS_Y_FIELD.name = "pos_y"
+SCENE_AREA_CFG_POS_Y_FIELD.full_name = ".ftcfg.scene_area_cfg.pos_y"
+SCENE_AREA_CFG_POS_Y_FIELD.number = 5
+SCENE_AREA_CFG_POS_Y_FIELD.index = 4
+SCENE_AREA_CFG_POS_Y_FIELD.label = 2
+SCENE_AREA_CFG_POS_Y_FIELD.has_default_value = false
+SCENE_AREA_CFG_POS_Y_FIELD.default_value = 0.0
+SCENE_AREA_CFG_POS_Y_FIELD.type = 2
+SCENE_AREA_CFG_POS_Y_FIELD.cpp_type = 6
+
+SCENE_AREA_CFG_RADIUS_FIELD.name = "radius"
+SCENE_AREA_CFG_RADIUS_FIELD.full_name = ".ftcfg.scene_area_cfg.radius"
+SCENE_AREA_CFG_RADIUS_FIELD.number = 6
+SCENE_AREA_CFG_RADIUS_FIELD.index = 5
+SCENE_AREA_CFG_RADIUS_FIELD.label = 2
+SCENE_AREA_CFG_RADIUS_FIELD.has_default_value = false
+SCENE_AREA_CFG_RADIUS_FIELD.default_value = 0.0
+SCENE_AREA_CFG_RADIUS_FIELD.type = 2
+SCENE_AREA_CFG_RADIUS_FIELD.cpp_type = 6
+
+SCENE_AREA_CFG_WIDTH_FIELD.name = "width"
+SCENE_AREA_CFG_WIDTH_FIELD.full_name = ".ftcfg.scene_area_cfg.width"
+SCENE_AREA_CFG_WIDTH_FIELD.number = 7
+SCENE_AREA_CFG_WIDTH_FIELD.index = 6
+SCENE_AREA_CFG_WIDTH_FIELD.label = 2
+SCENE_AREA_CFG_WIDTH_FIELD.has_default_value = false
+SCENE_AREA_CFG_WIDTH_FIELD.default_value = 0.0
+SCENE_AREA_CFG_WIDTH_FIELD.type = 2
+SCENE_AREA_CFG_WIDTH_FIELD.cpp_type = 6
+
+SCENE_AREA_CFG_HEIGHT_FIELD.name = "height"
+SCENE_AREA_CFG_HEIGHT_FIELD.full_name = ".ftcfg.scene_area_cfg.height"
+SCENE_AREA_CFG_HEIGHT_FIELD.number = 8
+SCENE_AREA_CFG_HEIGHT_FIELD.index = 7
+SCENE_AREA_CFG_HEIGHT_FIELD.label = 2
+SCENE_AREA_CFG_HEIGHT_FIELD.has_default_value = false
+SCENE_AREA_CFG_HEIGHT_FIELD.default_value = 0.0
+SCENE_AREA_CFG_HEIGHT_FIELD.type = 2
+SCENE_AREA_CFG_HEIGHT_FIELD.cpp_type = 6
+
+SCENE_AREA_CFG_ACTION_FIELD.name = "action"
+SCENE_AREA_CFG_ACTION_FIELD.full_name = ".ftcfg.scene_area_cfg.action"
+SCENE_AREA_CFG_ACTION_FIELD.number = 9
+SCENE_AREA_CFG_ACTION_FIELD.index = 8
+SCENE_AREA_CFG_ACTION_FIELD.label = 2
+SCENE_AREA_CFG_ACTION_FIELD.has_default_value = false
+SCENE_AREA_CFG_ACTION_FIELD.default_value = nil
+SCENE_AREA_CFG_ACTION_FIELD.enum_type = config_predefine_pb.ETRIGGERACTIONTYPE
+SCENE_AREA_CFG_ACTION_FIELD.type = 14
+SCENE_AREA_CFG_ACTION_FIELD.cpp_type = 8
+
+SCENE_AREA_CFG_PARAM1_FIELD.name = "param1"
+SCENE_AREA_CFG_PARAM1_FIELD.full_name = ".ftcfg.scene_area_cfg.param1"
+SCENE_AREA_CFG_PARAM1_FIELD.number = 10
+SCENE_AREA_CFG_PARAM1_FIELD.index = 9
+SCENE_AREA_CFG_PARAM1_FIELD.label = 2
+SCENE_AREA_CFG_PARAM1_FIELD.has_default_value = false
+SCENE_AREA_CFG_PARAM1_FIELD.default_value = 0
+SCENE_AREA_CFG_PARAM1_FIELD.type = 5
+SCENE_AREA_CFG_PARAM1_FIELD.cpp_type = 1
+
+SCENE_AREA_CFG_PARAM2_FIELD.name = "param2"
+SCENE_AREA_CFG_PARAM2_FIELD.full_name = ".ftcfg.scene_area_cfg.param2"
+SCENE_AREA_CFG_PARAM2_FIELD.number = 11
+SCENE_AREA_CFG_PARAM2_FIELD.index = 10
+SCENE_AREA_CFG_PARAM2_FIELD.label = 2
+SCENE_AREA_CFG_PARAM2_FIELD.has_default_value = false
+SCENE_AREA_CFG_PARAM2_FIELD.default_value = 0
+SCENE_AREA_CFG_PARAM2_FIELD.type = 5
+SCENE_AREA_CFG_PARAM2_FIELD.cpp_type = 1
+
+SCENE_AREA_CFG.name = "scene_area_cfg"
+SCENE_AREA_CFG.full_name = ".ftcfg.scene_area_cfg"
+SCENE_AREA_CFG.nested_types = {}
+SCENE_AREA_CFG.enum_types = {}
+SCENE_AREA_CFG.fields = {SCENE_AREA_CFG_AREA_ID_FIELD, SCENE_AREA_CFG_MAP_ID_FIELD, SCENE_AREA_CFG_AREA_TYPE_FIELD, SCENE_AREA_CFG_POS_X_FIELD, SCENE_AREA_CFG_POS_Y_FIELD, SCENE_AREA_CFG_RADIUS_FIELD, SCENE_AREA_CFG_WIDTH_FIELD, SCENE_AREA_CFG_HEIGHT_FIELD, SCENE_AREA_CFG_ACTION_FIELD, SCENE_AREA_CFG_PARAM1_FIELD, SCENE_AREA_CFG_PARAM2_FIELD}
+SCENE_AREA_CFG.is_extendable = false
+SCENE_AREA_CFG.extensions = {}
+SCENE_AREA_CFGS_ITEMS_FIELD.name = "items"
+SCENE_AREA_CFGS_ITEMS_FIELD.full_name = ".ftcfg.scene_area_cfgs.items"
+SCENE_AREA_CFGS_ITEMS_FIELD.number = 1
+SCENE_AREA_CFGS_ITEMS_FIELD.index = 0
+SCENE_AREA_CFGS_ITEMS_FIELD.label = 3
+SCENE_AREA_CFGS_ITEMS_FIELD.has_default_value = false
+SCENE_AREA_CFGS_ITEMS_FIELD.default_value = {}
+SCENE_AREA_CFGS_ITEMS_FIELD.message_type = SCENE_AREA_CFG
+SCENE_AREA_CFGS_ITEMS_FIELD.type = 11
+SCENE_AREA_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SCENE_AREA_CFGS.name = "scene_area_cfgs"
+SCENE_AREA_CFGS.full_name = ".ftcfg.scene_area_cfgs"
+SCENE_AREA_CFGS.nested_types = {}
+SCENE_AREA_CFGS.enum_types = {}
+SCENE_AREA_CFGS.fields = {SCENE_AREA_CFGS_ITEMS_FIELD}
+SCENE_AREA_CFGS.is_extendable = false
+SCENE_AREA_CFGS.extensions = {}
+CLIENT_TRIGGER_CFG_ID_FIELD.name = "id"
+CLIENT_TRIGGER_CFG_ID_FIELD.full_name = ".ftcfg.client_trigger_cfg.id"
+CLIENT_TRIGGER_CFG_ID_FIELD.number = 1
+CLIENT_TRIGGER_CFG_ID_FIELD.index = 0
+CLIENT_TRIGGER_CFG_ID_FIELD.label = 2
+CLIENT_TRIGGER_CFG_ID_FIELD.has_default_value = false
+CLIENT_TRIGGER_CFG_ID_FIELD.default_value = 0
+CLIENT_TRIGGER_CFG_ID_FIELD.type = 5
+CLIENT_TRIGGER_CFG_ID_FIELD.cpp_type = 1
+
+CLIENT_TRIGGER_CFG_MAP_ID_FIELD.name = "map_id"
+CLIENT_TRIGGER_CFG_MAP_ID_FIELD.full_name = ".ftcfg.client_trigger_cfg.map_id"
+CLIENT_TRIGGER_CFG_MAP_ID_FIELD.number = 2
+CLIENT_TRIGGER_CFG_MAP_ID_FIELD.index = 1
+CLIENT_TRIGGER_CFG_MAP_ID_FIELD.label = 2
+CLIENT_TRIGGER_CFG_MAP_ID_FIELD.has_default_value = false
+CLIENT_TRIGGER_CFG_MAP_ID_FIELD.default_value = 0
+CLIENT_TRIGGER_CFG_MAP_ID_FIELD.type = 5
+CLIENT_TRIGGER_CFG_MAP_ID_FIELD.cpp_type = 1
+
+CLIENT_TRIGGER_CFG_EVENTS_FIELD.name = "events"
+CLIENT_TRIGGER_CFG_EVENTS_FIELD.full_name = ".ftcfg.client_trigger_cfg.events"
+CLIENT_TRIGGER_CFG_EVENTS_FIELD.number = 3
+CLIENT_TRIGGER_CFG_EVENTS_FIELD.index = 2
+CLIENT_TRIGGER_CFG_EVENTS_FIELD.label = 3
+CLIENT_TRIGGER_CFG_EVENTS_FIELD.has_default_value = false
+CLIENT_TRIGGER_CFG_EVENTS_FIELD.default_value = {}
+CLIENT_TRIGGER_CFG_EVENTS_FIELD.type = 5
+CLIENT_TRIGGER_CFG_EVENTS_FIELD.cpp_type = 1
+
+CLIENT_TRIGGER_CFG_CONDITIONS_FIELD.name = "conditions"
+CLIENT_TRIGGER_CFG_CONDITIONS_FIELD.full_name = ".ftcfg.client_trigger_cfg.conditions"
+CLIENT_TRIGGER_CFG_CONDITIONS_FIELD.number = 4
+CLIENT_TRIGGER_CFG_CONDITIONS_FIELD.index = 3
+CLIENT_TRIGGER_CFG_CONDITIONS_FIELD.label = 3
+CLIENT_TRIGGER_CFG_CONDITIONS_FIELD.has_default_value = false
+CLIENT_TRIGGER_CFG_CONDITIONS_FIELD.default_value = {}
+CLIENT_TRIGGER_CFG_CONDITIONS_FIELD.type = 5
+CLIENT_TRIGGER_CFG_CONDITIONS_FIELD.cpp_type = 1
+
+CLIENT_TRIGGER_CFG_ACTIONS_FIELD.name = "actions"
+CLIENT_TRIGGER_CFG_ACTIONS_FIELD.full_name = ".ftcfg.client_trigger_cfg.actions"
+CLIENT_TRIGGER_CFG_ACTIONS_FIELD.number = 5
+CLIENT_TRIGGER_CFG_ACTIONS_FIELD.index = 4
+CLIENT_TRIGGER_CFG_ACTIONS_FIELD.label = 3
+CLIENT_TRIGGER_CFG_ACTIONS_FIELD.has_default_value = false
+CLIENT_TRIGGER_CFG_ACTIONS_FIELD.default_value = {}
+CLIENT_TRIGGER_CFG_ACTIONS_FIELD.type = 5
+CLIENT_TRIGGER_CFG_ACTIONS_FIELD.cpp_type = 1
+
+CLIENT_TRIGGER_CFG_OPENED_FIELD.name = "opened"
+CLIENT_TRIGGER_CFG_OPENED_FIELD.full_name = ".ftcfg.client_trigger_cfg.opened"
+CLIENT_TRIGGER_CFG_OPENED_FIELD.number = 6
+CLIENT_TRIGGER_CFG_OPENED_FIELD.index = 5
+CLIENT_TRIGGER_CFG_OPENED_FIELD.label = 2
+CLIENT_TRIGGER_CFG_OPENED_FIELD.has_default_value = false
+CLIENT_TRIGGER_CFG_OPENED_FIELD.default_value = 0
+CLIENT_TRIGGER_CFG_OPENED_FIELD.type = 5
+CLIENT_TRIGGER_CFG_OPENED_FIELD.cpp_type = 1
+
+CLIENT_TRIGGER_CFG_CANCYCLETRIGGLE_FIELD.name = "canCycleTriggle"
+CLIENT_TRIGGER_CFG_CANCYCLETRIGGLE_FIELD.full_name = ".ftcfg.client_trigger_cfg.canCycleTriggle"
+CLIENT_TRIGGER_CFG_CANCYCLETRIGGLE_FIELD.number = 7
+CLIENT_TRIGGER_CFG_CANCYCLETRIGGLE_FIELD.index = 6
+CLIENT_TRIGGER_CFG_CANCYCLETRIGGLE_FIELD.label = 2
+CLIENT_TRIGGER_CFG_CANCYCLETRIGGLE_FIELD.has_default_value = false
+CLIENT_TRIGGER_CFG_CANCYCLETRIGGLE_FIELD.default_value = 0
+CLIENT_TRIGGER_CFG_CANCYCLETRIGGLE_FIELD.type = 5
+CLIENT_TRIGGER_CFG_CANCYCLETRIGGLE_FIELD.cpp_type = 1
+
+CLIENT_TRIGGER_CFG.name = "client_trigger_cfg"
+CLIENT_TRIGGER_CFG.full_name = ".ftcfg.client_trigger_cfg"
+CLIENT_TRIGGER_CFG.nested_types = {}
+CLIENT_TRIGGER_CFG.enum_types = {}
+CLIENT_TRIGGER_CFG.fields = {CLIENT_TRIGGER_CFG_ID_FIELD, CLIENT_TRIGGER_CFG_MAP_ID_FIELD, CLIENT_TRIGGER_CFG_EVENTS_FIELD, CLIENT_TRIGGER_CFG_CONDITIONS_FIELD, CLIENT_TRIGGER_CFG_ACTIONS_FIELD, CLIENT_TRIGGER_CFG_OPENED_FIELD, CLIENT_TRIGGER_CFG_CANCYCLETRIGGLE_FIELD}
+CLIENT_TRIGGER_CFG.is_extendable = false
+CLIENT_TRIGGER_CFG.extensions = {}
+CLIENT_TRIGGER_CFGS_ITEMS_FIELD.name = "items"
+CLIENT_TRIGGER_CFGS_ITEMS_FIELD.full_name = ".ftcfg.client_trigger_cfgs.items"
+CLIENT_TRIGGER_CFGS_ITEMS_FIELD.number = 1
+CLIENT_TRIGGER_CFGS_ITEMS_FIELD.index = 0
+CLIENT_TRIGGER_CFGS_ITEMS_FIELD.label = 3
+CLIENT_TRIGGER_CFGS_ITEMS_FIELD.has_default_value = false
+CLIENT_TRIGGER_CFGS_ITEMS_FIELD.default_value = {}
+CLIENT_TRIGGER_CFGS_ITEMS_FIELD.message_type = CLIENT_TRIGGER_CFG
+CLIENT_TRIGGER_CFGS_ITEMS_FIELD.type = 11
+CLIENT_TRIGGER_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CLIENT_TRIGGER_CFGS.name = "client_trigger_cfgs"
+CLIENT_TRIGGER_CFGS.full_name = ".ftcfg.client_trigger_cfgs"
+CLIENT_TRIGGER_CFGS.nested_types = {}
+CLIENT_TRIGGER_CFGS.enum_types = {}
+CLIENT_TRIGGER_CFGS.fields = {CLIENT_TRIGGER_CFGS_ITEMS_FIELD}
+CLIENT_TRIGGER_CFGS.is_extendable = false
+CLIENT_TRIGGER_CFGS.extensions = {}
+CLIENT_TRIGGER_EVENT_CFG_EVENT_ID_FIELD.name = "event_id"
+CLIENT_TRIGGER_EVENT_CFG_EVENT_ID_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.event_id"
+CLIENT_TRIGGER_EVENT_CFG_EVENT_ID_FIELD.number = 1
+CLIENT_TRIGGER_EVENT_CFG_EVENT_ID_FIELD.index = 0
+CLIENT_TRIGGER_EVENT_CFG_EVENT_ID_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_EVENT_ID_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_EVENT_ID_FIELD.default_value = 0
+CLIENT_TRIGGER_EVENT_CFG_EVENT_ID_FIELD.type = 5
+CLIENT_TRIGGER_EVENT_CFG_EVENT_ID_FIELD.cpp_type = 1
+
+CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD.name = "type"
+CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.type"
+CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD.number = 2
+CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD.index = 1
+CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD.default_value = nil
+CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ECLIENTTRIGGEREVENTTYPE
+CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD.type = 14
+CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD.cpp_type = 8
+
+CLIENT_TRIGGER_EVENT_CFG_PARAM1_FIELD.name = "param1"
+CLIENT_TRIGGER_EVENT_CFG_PARAM1_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.param1"
+CLIENT_TRIGGER_EVENT_CFG_PARAM1_FIELD.number = 3
+CLIENT_TRIGGER_EVENT_CFG_PARAM1_FIELD.index = 2
+CLIENT_TRIGGER_EVENT_CFG_PARAM1_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_PARAM1_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_PARAM1_FIELD.default_value = ""
+CLIENT_TRIGGER_EVENT_CFG_PARAM1_FIELD.type = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM1_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_EVENT_CFG_PARAM2_FIELD.name = "param2"
+CLIENT_TRIGGER_EVENT_CFG_PARAM2_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.param2"
+CLIENT_TRIGGER_EVENT_CFG_PARAM2_FIELD.number = 4
+CLIENT_TRIGGER_EVENT_CFG_PARAM2_FIELD.index = 3
+CLIENT_TRIGGER_EVENT_CFG_PARAM2_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_PARAM2_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_PARAM2_FIELD.default_value = ""
+CLIENT_TRIGGER_EVENT_CFG_PARAM2_FIELD.type = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM2_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_EVENT_CFG_PARAM3_FIELD.name = "param3"
+CLIENT_TRIGGER_EVENT_CFG_PARAM3_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.param3"
+CLIENT_TRIGGER_EVENT_CFG_PARAM3_FIELD.number = 5
+CLIENT_TRIGGER_EVENT_CFG_PARAM3_FIELD.index = 4
+CLIENT_TRIGGER_EVENT_CFG_PARAM3_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_PARAM3_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_PARAM3_FIELD.default_value = ""
+CLIENT_TRIGGER_EVENT_CFG_PARAM3_FIELD.type = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM3_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_EVENT_CFG_PARAM4_FIELD.name = "param4"
+CLIENT_TRIGGER_EVENT_CFG_PARAM4_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.param4"
+CLIENT_TRIGGER_EVENT_CFG_PARAM4_FIELD.number = 6
+CLIENT_TRIGGER_EVENT_CFG_PARAM4_FIELD.index = 5
+CLIENT_TRIGGER_EVENT_CFG_PARAM4_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_PARAM4_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_PARAM4_FIELD.default_value = ""
+CLIENT_TRIGGER_EVENT_CFG_PARAM4_FIELD.type = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM4_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_EVENT_CFG_PARAM5_FIELD.name = "param5"
+CLIENT_TRIGGER_EVENT_CFG_PARAM5_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.param5"
+CLIENT_TRIGGER_EVENT_CFG_PARAM5_FIELD.number = 7
+CLIENT_TRIGGER_EVENT_CFG_PARAM5_FIELD.index = 6
+CLIENT_TRIGGER_EVENT_CFG_PARAM5_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_PARAM5_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_PARAM5_FIELD.default_value = ""
+CLIENT_TRIGGER_EVENT_CFG_PARAM5_FIELD.type = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM5_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_EVENT_CFG_PARAM6_FIELD.name = "param6"
+CLIENT_TRIGGER_EVENT_CFG_PARAM6_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.param6"
+CLIENT_TRIGGER_EVENT_CFG_PARAM6_FIELD.number = 8
+CLIENT_TRIGGER_EVENT_CFG_PARAM6_FIELD.index = 7
+CLIENT_TRIGGER_EVENT_CFG_PARAM6_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_PARAM6_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_PARAM6_FIELD.default_value = ""
+CLIENT_TRIGGER_EVENT_CFG_PARAM6_FIELD.type = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM6_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_EVENT_CFG_PARAM7_FIELD.name = "param7"
+CLIENT_TRIGGER_EVENT_CFG_PARAM7_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.param7"
+CLIENT_TRIGGER_EVENT_CFG_PARAM7_FIELD.number = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM7_FIELD.index = 8
+CLIENT_TRIGGER_EVENT_CFG_PARAM7_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_PARAM7_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_PARAM7_FIELD.default_value = ""
+CLIENT_TRIGGER_EVENT_CFG_PARAM7_FIELD.type = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM7_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_EVENT_CFG_PARAM8_FIELD.name = "param8"
+CLIENT_TRIGGER_EVENT_CFG_PARAM8_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.param8"
+CLIENT_TRIGGER_EVENT_CFG_PARAM8_FIELD.number = 10
+CLIENT_TRIGGER_EVENT_CFG_PARAM8_FIELD.index = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM8_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_PARAM8_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_PARAM8_FIELD.default_value = ""
+CLIENT_TRIGGER_EVENT_CFG_PARAM8_FIELD.type = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM8_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_EVENT_CFG_PARAM9_FIELD.name = "param9"
+CLIENT_TRIGGER_EVENT_CFG_PARAM9_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.param9"
+CLIENT_TRIGGER_EVENT_CFG_PARAM9_FIELD.number = 11
+CLIENT_TRIGGER_EVENT_CFG_PARAM9_FIELD.index = 10
+CLIENT_TRIGGER_EVENT_CFG_PARAM9_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_PARAM9_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_PARAM9_FIELD.default_value = ""
+CLIENT_TRIGGER_EVENT_CFG_PARAM9_FIELD.type = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM9_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_EVENT_CFG_PARAM10_FIELD.name = "param10"
+CLIENT_TRIGGER_EVENT_CFG_PARAM10_FIELD.full_name = ".ftcfg.client_trigger_event_cfg.param10"
+CLIENT_TRIGGER_EVENT_CFG_PARAM10_FIELD.number = 12
+CLIENT_TRIGGER_EVENT_CFG_PARAM10_FIELD.index = 11
+CLIENT_TRIGGER_EVENT_CFG_PARAM10_FIELD.label = 2
+CLIENT_TRIGGER_EVENT_CFG_PARAM10_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFG_PARAM10_FIELD.default_value = ""
+CLIENT_TRIGGER_EVENT_CFG_PARAM10_FIELD.type = 9
+CLIENT_TRIGGER_EVENT_CFG_PARAM10_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_EVENT_CFG.name = "client_trigger_event_cfg"
+CLIENT_TRIGGER_EVENT_CFG.full_name = ".ftcfg.client_trigger_event_cfg"
+CLIENT_TRIGGER_EVENT_CFG.nested_types = {}
+CLIENT_TRIGGER_EVENT_CFG.enum_types = {}
+CLIENT_TRIGGER_EVENT_CFG.fields = {CLIENT_TRIGGER_EVENT_CFG_EVENT_ID_FIELD, CLIENT_TRIGGER_EVENT_CFG_TYPE_FIELD, CLIENT_TRIGGER_EVENT_CFG_PARAM1_FIELD, CLIENT_TRIGGER_EVENT_CFG_PARAM2_FIELD, CLIENT_TRIGGER_EVENT_CFG_PARAM3_FIELD, CLIENT_TRIGGER_EVENT_CFG_PARAM4_FIELD, CLIENT_TRIGGER_EVENT_CFG_PARAM5_FIELD, CLIENT_TRIGGER_EVENT_CFG_PARAM6_FIELD, CLIENT_TRIGGER_EVENT_CFG_PARAM7_FIELD, CLIENT_TRIGGER_EVENT_CFG_PARAM8_FIELD, CLIENT_TRIGGER_EVENT_CFG_PARAM9_FIELD, CLIENT_TRIGGER_EVENT_CFG_PARAM10_FIELD}
+CLIENT_TRIGGER_EVENT_CFG.is_extendable = false
+CLIENT_TRIGGER_EVENT_CFG.extensions = {}
+CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD.name = "items"
+CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.client_trigger_event_cfgs.items"
+CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD.number = 1
+CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD.index = 0
+CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD.label = 3
+CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD.has_default_value = false
+CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD.default_value = {}
+CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD.message_type = CLIENT_TRIGGER_EVENT_CFG
+CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD.type = 11
+CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CLIENT_TRIGGER_EVENT_CFGS.name = "client_trigger_event_cfgs"
+CLIENT_TRIGGER_EVENT_CFGS.full_name = ".ftcfg.client_trigger_event_cfgs"
+CLIENT_TRIGGER_EVENT_CFGS.nested_types = {}
+CLIENT_TRIGGER_EVENT_CFGS.enum_types = {}
+CLIENT_TRIGGER_EVENT_CFGS.fields = {CLIENT_TRIGGER_EVENT_CFGS_ITEMS_FIELD}
+CLIENT_TRIGGER_EVENT_CFGS.is_extendable = false
+CLIENT_TRIGGER_EVENT_CFGS.extensions = {}
+CLIENT_TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.name = "condition_id"
+CLIENT_TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.condition_id"
+CLIENT_TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.number = 1
+CLIENT_TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.index = 0
+CLIENT_TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.default_value = 0
+CLIENT_TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.type = 5
+CLIENT_TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.cpp_type = 1
+
+CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD.name = "type"
+CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.type"
+CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD.number = 2
+CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD.index = 1
+CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD.default_value = nil
+CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ECLIENTTRIGGERCONDITIONTYPE
+CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD.type = 14
+CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD.cpp_type = 8
+
+CLIENT_TRIGGER_CONDITION_CFG_PARAM1_FIELD.name = "param1"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM1_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.param1"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM1_FIELD.number = 3
+CLIENT_TRIGGER_CONDITION_CFG_PARAM1_FIELD.index = 2
+CLIENT_TRIGGER_CONDITION_CFG_PARAM1_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_PARAM1_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_PARAM1_FIELD.default_value = ""
+CLIENT_TRIGGER_CONDITION_CFG_PARAM1_FIELD.type = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM1_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_CONDITION_CFG_PARAM2_FIELD.name = "param2"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM2_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.param2"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM2_FIELD.number = 4
+CLIENT_TRIGGER_CONDITION_CFG_PARAM2_FIELD.index = 3
+CLIENT_TRIGGER_CONDITION_CFG_PARAM2_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_PARAM2_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_PARAM2_FIELD.default_value = ""
+CLIENT_TRIGGER_CONDITION_CFG_PARAM2_FIELD.type = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM2_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_CONDITION_CFG_PARAM3_FIELD.name = "param3"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM3_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.param3"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM3_FIELD.number = 5
+CLIENT_TRIGGER_CONDITION_CFG_PARAM3_FIELD.index = 4
+CLIENT_TRIGGER_CONDITION_CFG_PARAM3_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_PARAM3_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_PARAM3_FIELD.default_value = ""
+CLIENT_TRIGGER_CONDITION_CFG_PARAM3_FIELD.type = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM3_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_CONDITION_CFG_PARAM4_FIELD.name = "param4"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM4_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.param4"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM4_FIELD.number = 6
+CLIENT_TRIGGER_CONDITION_CFG_PARAM4_FIELD.index = 5
+CLIENT_TRIGGER_CONDITION_CFG_PARAM4_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_PARAM4_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_PARAM4_FIELD.default_value = ""
+CLIENT_TRIGGER_CONDITION_CFG_PARAM4_FIELD.type = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM4_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_CONDITION_CFG_PARAM5_FIELD.name = "param5"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM5_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.param5"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM5_FIELD.number = 7
+CLIENT_TRIGGER_CONDITION_CFG_PARAM5_FIELD.index = 6
+CLIENT_TRIGGER_CONDITION_CFG_PARAM5_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_PARAM5_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_PARAM5_FIELD.default_value = ""
+CLIENT_TRIGGER_CONDITION_CFG_PARAM5_FIELD.type = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM5_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_CONDITION_CFG_PARAM6_FIELD.name = "param6"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM6_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.param6"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM6_FIELD.number = 8
+CLIENT_TRIGGER_CONDITION_CFG_PARAM6_FIELD.index = 7
+CLIENT_TRIGGER_CONDITION_CFG_PARAM6_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_PARAM6_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_PARAM6_FIELD.default_value = ""
+CLIENT_TRIGGER_CONDITION_CFG_PARAM6_FIELD.type = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM6_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_CONDITION_CFG_PARAM7_FIELD.name = "param7"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM7_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.param7"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM7_FIELD.number = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM7_FIELD.index = 8
+CLIENT_TRIGGER_CONDITION_CFG_PARAM7_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_PARAM7_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_PARAM7_FIELD.default_value = ""
+CLIENT_TRIGGER_CONDITION_CFG_PARAM7_FIELD.type = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM7_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_CONDITION_CFG_PARAM8_FIELD.name = "param8"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM8_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.param8"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM8_FIELD.number = 10
+CLIENT_TRIGGER_CONDITION_CFG_PARAM8_FIELD.index = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM8_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_PARAM8_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_PARAM8_FIELD.default_value = ""
+CLIENT_TRIGGER_CONDITION_CFG_PARAM8_FIELD.type = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM8_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_CONDITION_CFG_PARAM9_FIELD.name = "param9"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM9_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.param9"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM9_FIELD.number = 11
+CLIENT_TRIGGER_CONDITION_CFG_PARAM9_FIELD.index = 10
+CLIENT_TRIGGER_CONDITION_CFG_PARAM9_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_PARAM9_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_PARAM9_FIELD.default_value = ""
+CLIENT_TRIGGER_CONDITION_CFG_PARAM9_FIELD.type = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM9_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_CONDITION_CFG_PARAM10_FIELD.name = "param10"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM10_FIELD.full_name = ".ftcfg.client_trigger_condition_cfg.param10"
+CLIENT_TRIGGER_CONDITION_CFG_PARAM10_FIELD.number = 12
+CLIENT_TRIGGER_CONDITION_CFG_PARAM10_FIELD.index = 11
+CLIENT_TRIGGER_CONDITION_CFG_PARAM10_FIELD.label = 2
+CLIENT_TRIGGER_CONDITION_CFG_PARAM10_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFG_PARAM10_FIELD.default_value = ""
+CLIENT_TRIGGER_CONDITION_CFG_PARAM10_FIELD.type = 9
+CLIENT_TRIGGER_CONDITION_CFG_PARAM10_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_CONDITION_CFG.name = "client_trigger_condition_cfg"
+CLIENT_TRIGGER_CONDITION_CFG.full_name = ".ftcfg.client_trigger_condition_cfg"
+CLIENT_TRIGGER_CONDITION_CFG.nested_types = {}
+CLIENT_TRIGGER_CONDITION_CFG.enum_types = {}
+CLIENT_TRIGGER_CONDITION_CFG.fields = {CLIENT_TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD, CLIENT_TRIGGER_CONDITION_CFG_TYPE_FIELD, CLIENT_TRIGGER_CONDITION_CFG_PARAM1_FIELD, CLIENT_TRIGGER_CONDITION_CFG_PARAM2_FIELD, CLIENT_TRIGGER_CONDITION_CFG_PARAM3_FIELD, CLIENT_TRIGGER_CONDITION_CFG_PARAM4_FIELD, CLIENT_TRIGGER_CONDITION_CFG_PARAM5_FIELD, CLIENT_TRIGGER_CONDITION_CFG_PARAM6_FIELD, CLIENT_TRIGGER_CONDITION_CFG_PARAM7_FIELD, CLIENT_TRIGGER_CONDITION_CFG_PARAM8_FIELD, CLIENT_TRIGGER_CONDITION_CFG_PARAM9_FIELD, CLIENT_TRIGGER_CONDITION_CFG_PARAM10_FIELD}
+CLIENT_TRIGGER_CONDITION_CFG.is_extendable = false
+CLIENT_TRIGGER_CONDITION_CFG.extensions = {}
+CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD.name = "items"
+CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.client_trigger_condition_cfgs.items"
+CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD.number = 1
+CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD.index = 0
+CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD.label = 3
+CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD.has_default_value = false
+CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD.default_value = {}
+CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD.message_type = CLIENT_TRIGGER_CONDITION_CFG
+CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD.type = 11
+CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CLIENT_TRIGGER_CONDITION_CFGS.name = "client_trigger_condition_cfgs"
+CLIENT_TRIGGER_CONDITION_CFGS.full_name = ".ftcfg.client_trigger_condition_cfgs"
+CLIENT_TRIGGER_CONDITION_CFGS.nested_types = {}
+CLIENT_TRIGGER_CONDITION_CFGS.enum_types = {}
+CLIENT_TRIGGER_CONDITION_CFGS.fields = {CLIENT_TRIGGER_CONDITION_CFGS_ITEMS_FIELD}
+CLIENT_TRIGGER_CONDITION_CFGS.is_extendable = false
+CLIENT_TRIGGER_CONDITION_CFGS.extensions = {}
+CLIENT_TRIGGER_ACTION_CFG_ACTION_ID_FIELD.name = "action_id"
+CLIENT_TRIGGER_ACTION_CFG_ACTION_ID_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.action_id"
+CLIENT_TRIGGER_ACTION_CFG_ACTION_ID_FIELD.number = 1
+CLIENT_TRIGGER_ACTION_CFG_ACTION_ID_FIELD.index = 0
+CLIENT_TRIGGER_ACTION_CFG_ACTION_ID_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_ACTION_ID_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_ACTION_ID_FIELD.default_value = 0
+CLIENT_TRIGGER_ACTION_CFG_ACTION_ID_FIELD.type = 5
+CLIENT_TRIGGER_ACTION_CFG_ACTION_ID_FIELD.cpp_type = 1
+
+CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD.name = "type"
+CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.type"
+CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD.number = 2
+CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD.index = 1
+CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD.default_value = nil
+CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ECLIENTTRIGGERACTIONTYPE
+CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD.type = 14
+CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD.cpp_type = 8
+
+CLIENT_TRIGGER_ACTION_CFG_PARAM1_FIELD.name = "param1"
+CLIENT_TRIGGER_ACTION_CFG_PARAM1_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.param1"
+CLIENT_TRIGGER_ACTION_CFG_PARAM1_FIELD.number = 3
+CLIENT_TRIGGER_ACTION_CFG_PARAM1_FIELD.index = 2
+CLIENT_TRIGGER_ACTION_CFG_PARAM1_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_PARAM1_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_PARAM1_FIELD.default_value = ""
+CLIENT_TRIGGER_ACTION_CFG_PARAM1_FIELD.type = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM1_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_ACTION_CFG_PARAM2_FIELD.name = "param2"
+CLIENT_TRIGGER_ACTION_CFG_PARAM2_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.param2"
+CLIENT_TRIGGER_ACTION_CFG_PARAM2_FIELD.number = 4
+CLIENT_TRIGGER_ACTION_CFG_PARAM2_FIELD.index = 3
+CLIENT_TRIGGER_ACTION_CFG_PARAM2_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_PARAM2_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_PARAM2_FIELD.default_value = ""
+CLIENT_TRIGGER_ACTION_CFG_PARAM2_FIELD.type = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM2_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_ACTION_CFG_PARAM3_FIELD.name = "param3"
+CLIENT_TRIGGER_ACTION_CFG_PARAM3_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.param3"
+CLIENT_TRIGGER_ACTION_CFG_PARAM3_FIELD.number = 5
+CLIENT_TRIGGER_ACTION_CFG_PARAM3_FIELD.index = 4
+CLIENT_TRIGGER_ACTION_CFG_PARAM3_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_PARAM3_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_PARAM3_FIELD.default_value = ""
+CLIENT_TRIGGER_ACTION_CFG_PARAM3_FIELD.type = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM3_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_ACTION_CFG_PARAM4_FIELD.name = "param4"
+CLIENT_TRIGGER_ACTION_CFG_PARAM4_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.param4"
+CLIENT_TRIGGER_ACTION_CFG_PARAM4_FIELD.number = 6
+CLIENT_TRIGGER_ACTION_CFG_PARAM4_FIELD.index = 5
+CLIENT_TRIGGER_ACTION_CFG_PARAM4_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_PARAM4_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_PARAM4_FIELD.default_value = ""
+CLIENT_TRIGGER_ACTION_CFG_PARAM4_FIELD.type = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM4_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_ACTION_CFG_PARAM5_FIELD.name = "param5"
+CLIENT_TRIGGER_ACTION_CFG_PARAM5_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.param5"
+CLIENT_TRIGGER_ACTION_CFG_PARAM5_FIELD.number = 7
+CLIENT_TRIGGER_ACTION_CFG_PARAM5_FIELD.index = 6
+CLIENT_TRIGGER_ACTION_CFG_PARAM5_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_PARAM5_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_PARAM5_FIELD.default_value = ""
+CLIENT_TRIGGER_ACTION_CFG_PARAM5_FIELD.type = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM5_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_ACTION_CFG_PARAM6_FIELD.name = "param6"
+CLIENT_TRIGGER_ACTION_CFG_PARAM6_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.param6"
+CLIENT_TRIGGER_ACTION_CFG_PARAM6_FIELD.number = 8
+CLIENT_TRIGGER_ACTION_CFG_PARAM6_FIELD.index = 7
+CLIENT_TRIGGER_ACTION_CFG_PARAM6_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_PARAM6_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_PARAM6_FIELD.default_value = ""
+CLIENT_TRIGGER_ACTION_CFG_PARAM6_FIELD.type = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM6_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_ACTION_CFG_PARAM7_FIELD.name = "param7"
+CLIENT_TRIGGER_ACTION_CFG_PARAM7_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.param7"
+CLIENT_TRIGGER_ACTION_CFG_PARAM7_FIELD.number = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM7_FIELD.index = 8
+CLIENT_TRIGGER_ACTION_CFG_PARAM7_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_PARAM7_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_PARAM7_FIELD.default_value = ""
+CLIENT_TRIGGER_ACTION_CFG_PARAM7_FIELD.type = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM7_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_ACTION_CFG_PARAM8_FIELD.name = "param8"
+CLIENT_TRIGGER_ACTION_CFG_PARAM8_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.param8"
+CLIENT_TRIGGER_ACTION_CFG_PARAM8_FIELD.number = 10
+CLIENT_TRIGGER_ACTION_CFG_PARAM8_FIELD.index = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM8_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_PARAM8_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_PARAM8_FIELD.default_value = ""
+CLIENT_TRIGGER_ACTION_CFG_PARAM8_FIELD.type = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM8_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_ACTION_CFG_PARAM9_FIELD.name = "param9"
+CLIENT_TRIGGER_ACTION_CFG_PARAM9_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.param9"
+CLIENT_TRIGGER_ACTION_CFG_PARAM9_FIELD.number = 11
+CLIENT_TRIGGER_ACTION_CFG_PARAM9_FIELD.index = 10
+CLIENT_TRIGGER_ACTION_CFG_PARAM9_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_PARAM9_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_PARAM9_FIELD.default_value = ""
+CLIENT_TRIGGER_ACTION_CFG_PARAM9_FIELD.type = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM9_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_ACTION_CFG_PARAM10_FIELD.name = "param10"
+CLIENT_TRIGGER_ACTION_CFG_PARAM10_FIELD.full_name = ".ftcfg.client_trigger_action_cfg.param10"
+CLIENT_TRIGGER_ACTION_CFG_PARAM10_FIELD.number = 12
+CLIENT_TRIGGER_ACTION_CFG_PARAM10_FIELD.index = 11
+CLIENT_TRIGGER_ACTION_CFG_PARAM10_FIELD.label = 2
+CLIENT_TRIGGER_ACTION_CFG_PARAM10_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFG_PARAM10_FIELD.default_value = ""
+CLIENT_TRIGGER_ACTION_CFG_PARAM10_FIELD.type = 9
+CLIENT_TRIGGER_ACTION_CFG_PARAM10_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_ACTION_CFG.name = "client_trigger_action_cfg"
+CLIENT_TRIGGER_ACTION_CFG.full_name = ".ftcfg.client_trigger_action_cfg"
+CLIENT_TRIGGER_ACTION_CFG.nested_types = {}
+CLIENT_TRIGGER_ACTION_CFG.enum_types = {}
+CLIENT_TRIGGER_ACTION_CFG.fields = {CLIENT_TRIGGER_ACTION_CFG_ACTION_ID_FIELD, CLIENT_TRIGGER_ACTION_CFG_TYPE_FIELD, CLIENT_TRIGGER_ACTION_CFG_PARAM1_FIELD, CLIENT_TRIGGER_ACTION_CFG_PARAM2_FIELD, CLIENT_TRIGGER_ACTION_CFG_PARAM3_FIELD, CLIENT_TRIGGER_ACTION_CFG_PARAM4_FIELD, CLIENT_TRIGGER_ACTION_CFG_PARAM5_FIELD, CLIENT_TRIGGER_ACTION_CFG_PARAM6_FIELD, CLIENT_TRIGGER_ACTION_CFG_PARAM7_FIELD, CLIENT_TRIGGER_ACTION_CFG_PARAM8_FIELD, CLIENT_TRIGGER_ACTION_CFG_PARAM9_FIELD, CLIENT_TRIGGER_ACTION_CFG_PARAM10_FIELD}
+CLIENT_TRIGGER_ACTION_CFG.is_extendable = false
+CLIENT_TRIGGER_ACTION_CFG.extensions = {}
+CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD.name = "items"
+CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.client_trigger_action_cfgs.items"
+CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD.number = 1
+CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD.index = 0
+CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD.label = 3
+CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD.has_default_value = false
+CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD.default_value = {}
+CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD.message_type = CLIENT_TRIGGER_ACTION_CFG
+CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD.type = 11
+CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CLIENT_TRIGGER_ACTION_CFGS.name = "client_trigger_action_cfgs"
+CLIENT_TRIGGER_ACTION_CFGS.full_name = ".ftcfg.client_trigger_action_cfgs"
+CLIENT_TRIGGER_ACTION_CFGS.nested_types = {}
+CLIENT_TRIGGER_ACTION_CFGS.enum_types = {}
+CLIENT_TRIGGER_ACTION_CFGS.fields = {CLIENT_TRIGGER_ACTION_CFGS_ITEMS_FIELD}
+CLIENT_TRIGGER_ACTION_CFGS.is_extendable = false
+CLIENT_TRIGGER_ACTION_CFGS.extensions = {}
+CLIENT_TRIGGER_VARIABLE_CFG_NAME_FIELD.name = "name"
+CLIENT_TRIGGER_VARIABLE_CFG_NAME_FIELD.full_name = ".ftcfg.client_trigger_variable_cfg.name"
+CLIENT_TRIGGER_VARIABLE_CFG_NAME_FIELD.number = 1
+CLIENT_TRIGGER_VARIABLE_CFG_NAME_FIELD.index = 0
+CLIENT_TRIGGER_VARIABLE_CFG_NAME_FIELD.label = 2
+CLIENT_TRIGGER_VARIABLE_CFG_NAME_FIELD.has_default_value = false
+CLIENT_TRIGGER_VARIABLE_CFG_NAME_FIELD.default_value = ""
+CLIENT_TRIGGER_VARIABLE_CFG_NAME_FIELD.type = 9
+CLIENT_TRIGGER_VARIABLE_CFG_NAME_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.name = "map_id"
+CLIENT_TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.full_name = ".ftcfg.client_trigger_variable_cfg.map_id"
+CLIENT_TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.number = 2
+CLIENT_TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.index = 1
+CLIENT_TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.label = 2
+CLIENT_TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.has_default_value = false
+CLIENT_TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.default_value = 0
+CLIENT_TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.type = 5
+CLIENT_TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.cpp_type = 1
+
+CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD.name = "type"
+CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD.full_name = ".ftcfg.client_trigger_variable_cfg.type"
+CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD.number = 3
+CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD.index = 2
+CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD.label = 2
+CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD.has_default_value = false
+CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD.default_value = nil
+CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ECLIENTTRIGGERVARIABLETYPE
+CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD.type = 14
+CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD.cpp_type = 8
+
+CLIENT_TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.name = "is_vec"
+CLIENT_TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.full_name = ".ftcfg.client_trigger_variable_cfg.is_vec"
+CLIENT_TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.number = 4
+CLIENT_TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.index = 3
+CLIENT_TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.label = 2
+CLIENT_TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.has_default_value = false
+CLIENT_TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.default_value = 0
+CLIENT_TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.type = 13
+CLIENT_TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.cpp_type = 3
+
+CLIENT_TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.name = "vec_size"
+CLIENT_TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.full_name = ".ftcfg.client_trigger_variable_cfg.vec_size"
+CLIENT_TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.number = 5
+CLIENT_TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.index = 4
+CLIENT_TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.label = 2
+CLIENT_TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.has_default_value = false
+CLIENT_TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.default_value = 0
+CLIENT_TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.type = 13
+CLIENT_TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.cpp_type = 3
+
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM1_FIELD.name = "param1"
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM1_FIELD.full_name = ".ftcfg.client_trigger_variable_cfg.param1"
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM1_FIELD.number = 6
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM1_FIELD.index = 5
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM1_FIELD.label = 2
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM1_FIELD.has_default_value = false
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM1_FIELD.default_value = ""
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM1_FIELD.type = 9
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM1_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM2_FIELD.name = "param2"
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM2_FIELD.full_name = ".ftcfg.client_trigger_variable_cfg.param2"
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM2_FIELD.number = 7
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM2_FIELD.index = 6
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM2_FIELD.label = 2
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM2_FIELD.has_default_value = false
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM2_FIELD.default_value = ""
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM2_FIELD.type = 9
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM2_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM3_FIELD.name = "param3"
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM3_FIELD.full_name = ".ftcfg.client_trigger_variable_cfg.param3"
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM3_FIELD.number = 8
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM3_FIELD.index = 7
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM3_FIELD.label = 2
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM3_FIELD.has_default_value = false
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM3_FIELD.default_value = ""
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM3_FIELD.type = 9
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM3_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM4_FIELD.name = "param4"
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM4_FIELD.full_name = ".ftcfg.client_trigger_variable_cfg.param4"
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM4_FIELD.number = 9
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM4_FIELD.index = 8
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM4_FIELD.label = 2
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM4_FIELD.has_default_value = false
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM4_FIELD.default_value = ""
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM4_FIELD.type = 9
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM4_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM5_FIELD.name = "param5"
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM5_FIELD.full_name = ".ftcfg.client_trigger_variable_cfg.param5"
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM5_FIELD.number = 10
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM5_FIELD.index = 9
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM5_FIELD.label = 2
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM5_FIELD.has_default_value = false
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM5_FIELD.default_value = ""
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM5_FIELD.type = 9
+CLIENT_TRIGGER_VARIABLE_CFG_PARAM5_FIELD.cpp_type = 9
+
+CLIENT_TRIGGER_VARIABLE_CFG.name = "client_trigger_variable_cfg"
+CLIENT_TRIGGER_VARIABLE_CFG.full_name = ".ftcfg.client_trigger_variable_cfg"
+CLIENT_TRIGGER_VARIABLE_CFG.nested_types = {}
+CLIENT_TRIGGER_VARIABLE_CFG.enum_types = {}
+CLIENT_TRIGGER_VARIABLE_CFG.fields = {CLIENT_TRIGGER_VARIABLE_CFG_NAME_FIELD, CLIENT_TRIGGER_VARIABLE_CFG_MAP_ID_FIELD, CLIENT_TRIGGER_VARIABLE_CFG_TYPE_FIELD, CLIENT_TRIGGER_VARIABLE_CFG_IS_VEC_FIELD, CLIENT_TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD, CLIENT_TRIGGER_VARIABLE_CFG_PARAM1_FIELD, CLIENT_TRIGGER_VARIABLE_CFG_PARAM2_FIELD, CLIENT_TRIGGER_VARIABLE_CFG_PARAM3_FIELD, CLIENT_TRIGGER_VARIABLE_CFG_PARAM4_FIELD, CLIENT_TRIGGER_VARIABLE_CFG_PARAM5_FIELD}
+CLIENT_TRIGGER_VARIABLE_CFG.is_extendable = false
+CLIENT_TRIGGER_VARIABLE_CFG.extensions = {}
+CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.name = "items"
+CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.client_trigger_variable_cfgs.items"
+CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.number = 1
+CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.index = 0
+CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.label = 3
+CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.has_default_value = false
+CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.default_value = {}
+CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.message_type = CLIENT_TRIGGER_VARIABLE_CFG
+CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.type = 11
+CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CLIENT_TRIGGER_VARIABLE_CFGS.name = "client_trigger_variable_cfgs"
+CLIENT_TRIGGER_VARIABLE_CFGS.full_name = ".ftcfg.client_trigger_variable_cfgs"
+CLIENT_TRIGGER_VARIABLE_CFGS.nested_types = {}
+CLIENT_TRIGGER_VARIABLE_CFGS.enum_types = {}
+CLIENT_TRIGGER_VARIABLE_CFGS.fields = {CLIENT_TRIGGER_VARIABLE_CFGS_ITEMS_FIELD}
+CLIENT_TRIGGER_VARIABLE_CFGS.is_extendable = false
+CLIENT_TRIGGER_VARIABLE_CFGS.extensions = {}
+SCENE_ORGAN_CFG_ID_FIELD.name = "id"
+SCENE_ORGAN_CFG_ID_FIELD.full_name = ".ftcfg.scene_organ_cfg.id"
+SCENE_ORGAN_CFG_ID_FIELD.number = 1
+SCENE_ORGAN_CFG_ID_FIELD.index = 0
+SCENE_ORGAN_CFG_ID_FIELD.label = 2
+SCENE_ORGAN_CFG_ID_FIELD.has_default_value = false
+SCENE_ORGAN_CFG_ID_FIELD.default_value = 0
+SCENE_ORGAN_CFG_ID_FIELD.type = 5
+SCENE_ORGAN_CFG_ID_FIELD.cpp_type = 1
+
+SCENE_ORGAN_CFG_NAME_FIELD.name = "name"
+SCENE_ORGAN_CFG_NAME_FIELD.full_name = ".ftcfg.scene_organ_cfg.name"
+SCENE_ORGAN_CFG_NAME_FIELD.number = 2
+SCENE_ORGAN_CFG_NAME_FIELD.index = 1
+SCENE_ORGAN_CFG_NAME_FIELD.label = 2
+SCENE_ORGAN_CFG_NAME_FIELD.has_default_value = false
+SCENE_ORGAN_CFG_NAME_FIELD.default_value = 0
+SCENE_ORGAN_CFG_NAME_FIELD.type = 5
+SCENE_ORGAN_CFG_NAME_FIELD.cpp_type = 1
+
+SCENE_ORGAN_CFG_MODULE_FIELD.name = "module"
+SCENE_ORGAN_CFG_MODULE_FIELD.full_name = ".ftcfg.scene_organ_cfg.module"
+SCENE_ORGAN_CFG_MODULE_FIELD.number = 3
+SCENE_ORGAN_CFG_MODULE_FIELD.index = 2
+SCENE_ORGAN_CFG_MODULE_FIELD.label = 2
+SCENE_ORGAN_CFG_MODULE_FIELD.has_default_value = false
+SCENE_ORGAN_CFG_MODULE_FIELD.default_value = 0
+SCENE_ORGAN_CFG_MODULE_FIELD.type = 5
+SCENE_ORGAN_CFG_MODULE_FIELD.cpp_type = 1
+
+SCENE_ORGAN_CFG_MAP_ID_FIELD.name = "map_id"
+SCENE_ORGAN_CFG_MAP_ID_FIELD.full_name = ".ftcfg.scene_organ_cfg.map_id"
+SCENE_ORGAN_CFG_MAP_ID_FIELD.number = 4
+SCENE_ORGAN_CFG_MAP_ID_FIELD.index = 3
+SCENE_ORGAN_CFG_MAP_ID_FIELD.label = 2
+SCENE_ORGAN_CFG_MAP_ID_FIELD.has_default_value = false
+SCENE_ORGAN_CFG_MAP_ID_FIELD.default_value = 0
+SCENE_ORGAN_CFG_MAP_ID_FIELD.type = 5
+SCENE_ORGAN_CFG_MAP_ID_FIELD.cpp_type = 1
+
+SCENE_ORGAN_CFG_POS_X_FIELD.name = "pos_x"
+SCENE_ORGAN_CFG_POS_X_FIELD.full_name = ".ftcfg.scene_organ_cfg.pos_x"
+SCENE_ORGAN_CFG_POS_X_FIELD.number = 5
+SCENE_ORGAN_CFG_POS_X_FIELD.index = 4
+SCENE_ORGAN_CFG_POS_X_FIELD.label = 2
+SCENE_ORGAN_CFG_POS_X_FIELD.has_default_value = false
+SCENE_ORGAN_CFG_POS_X_FIELD.default_value = 0.0
+SCENE_ORGAN_CFG_POS_X_FIELD.type = 2
+SCENE_ORGAN_CFG_POS_X_FIELD.cpp_type = 6
+
+SCENE_ORGAN_CFG_POS_Y_FIELD.name = "pos_y"
+SCENE_ORGAN_CFG_POS_Y_FIELD.full_name = ".ftcfg.scene_organ_cfg.pos_y"
+SCENE_ORGAN_CFG_POS_Y_FIELD.number = 6
+SCENE_ORGAN_CFG_POS_Y_FIELD.index = 5
+SCENE_ORGAN_CFG_POS_Y_FIELD.label = 2
+SCENE_ORGAN_CFG_POS_Y_FIELD.has_default_value = false
+SCENE_ORGAN_CFG_POS_Y_FIELD.default_value = 0.0
+SCENE_ORGAN_CFG_POS_Y_FIELD.type = 2
+SCENE_ORGAN_CFG_POS_Y_FIELD.cpp_type = 6
+
+SCENE_ORGAN_CFG_POS_Z_FIELD.name = "pos_z"
+SCENE_ORGAN_CFG_POS_Z_FIELD.full_name = ".ftcfg.scene_organ_cfg.pos_z"
+SCENE_ORGAN_CFG_POS_Z_FIELD.number = 7
+SCENE_ORGAN_CFG_POS_Z_FIELD.index = 6
+SCENE_ORGAN_CFG_POS_Z_FIELD.label = 2
+SCENE_ORGAN_CFG_POS_Z_FIELD.has_default_value = false
+SCENE_ORGAN_CFG_POS_Z_FIELD.default_value = 0.0
+SCENE_ORGAN_CFG_POS_Z_FIELD.type = 2
+SCENE_ORGAN_CFG_POS_Z_FIELD.cpp_type = 6
+
+SCENE_ORGAN_CFG_ORIENTATION_FIELD.name = "orientation"
+SCENE_ORGAN_CFG_ORIENTATION_FIELD.full_name = ".ftcfg.scene_organ_cfg.orientation"
+SCENE_ORGAN_CFG_ORIENTATION_FIELD.number = 8
+SCENE_ORGAN_CFG_ORIENTATION_FIELD.index = 7
+SCENE_ORGAN_CFG_ORIENTATION_FIELD.label = 2
+SCENE_ORGAN_CFG_ORIENTATION_FIELD.has_default_value = false
+SCENE_ORGAN_CFG_ORIENTATION_FIELD.default_value = 0.0
+SCENE_ORGAN_CFG_ORIENTATION_FIELD.type = 2
+SCENE_ORGAN_CFG_ORIENTATION_FIELD.cpp_type = 6
+
+SCENE_ORGAN_CFG_SKILL_ID_FIELD.name = "skill_id"
+SCENE_ORGAN_CFG_SKILL_ID_FIELD.full_name = ".ftcfg.scene_organ_cfg.skill_id"
+SCENE_ORGAN_CFG_SKILL_ID_FIELD.number = 9
+SCENE_ORGAN_CFG_SKILL_ID_FIELD.index = 8
+SCENE_ORGAN_CFG_SKILL_ID_FIELD.label = 2
+SCENE_ORGAN_CFG_SKILL_ID_FIELD.has_default_value = false
+SCENE_ORGAN_CFG_SKILL_ID_FIELD.default_value = 0
+SCENE_ORGAN_CFG_SKILL_ID_FIELD.type = 5
+SCENE_ORGAN_CFG_SKILL_ID_FIELD.cpp_type = 1
+
+SCENE_ORGAN_CFG_ENABLED_FIELD.name = "enabled"
+SCENE_ORGAN_CFG_ENABLED_FIELD.full_name = ".ftcfg.scene_organ_cfg.enabled"
+SCENE_ORGAN_CFG_ENABLED_FIELD.number = 10
+SCENE_ORGAN_CFG_ENABLED_FIELD.index = 9
+SCENE_ORGAN_CFG_ENABLED_FIELD.label = 2
+SCENE_ORGAN_CFG_ENABLED_FIELD.has_default_value = false
+SCENE_ORGAN_CFG_ENABLED_FIELD.default_value = 0
+SCENE_ORGAN_CFG_ENABLED_FIELD.type = 5
+SCENE_ORGAN_CFG_ENABLED_FIELD.cpp_type = 1
+
+SCENE_ORGAN_CFG_SHOW_NAME_FIELD.name = "show_name"
+SCENE_ORGAN_CFG_SHOW_NAME_FIELD.full_name = ".ftcfg.scene_organ_cfg.show_name"
+SCENE_ORGAN_CFG_SHOW_NAME_FIELD.number = 11
+SCENE_ORGAN_CFG_SHOW_NAME_FIELD.index = 10
+SCENE_ORGAN_CFG_SHOW_NAME_FIELD.label = 2
+SCENE_ORGAN_CFG_SHOW_NAME_FIELD.has_default_value = false
+SCENE_ORGAN_CFG_SHOW_NAME_FIELD.default_value = 0
+SCENE_ORGAN_CFG_SHOW_NAME_FIELD.type = 5
+SCENE_ORGAN_CFG_SHOW_NAME_FIELD.cpp_type = 1
+
+SCENE_ORGAN_CFG.name = "scene_organ_cfg"
+SCENE_ORGAN_CFG.full_name = ".ftcfg.scene_organ_cfg"
+SCENE_ORGAN_CFG.nested_types = {}
+SCENE_ORGAN_CFG.enum_types = {}
+SCENE_ORGAN_CFG.fields = {SCENE_ORGAN_CFG_ID_FIELD, SCENE_ORGAN_CFG_NAME_FIELD, SCENE_ORGAN_CFG_MODULE_FIELD, SCENE_ORGAN_CFG_MAP_ID_FIELD, SCENE_ORGAN_CFG_POS_X_FIELD, SCENE_ORGAN_CFG_POS_Y_FIELD, SCENE_ORGAN_CFG_POS_Z_FIELD, SCENE_ORGAN_CFG_ORIENTATION_FIELD, SCENE_ORGAN_CFG_SKILL_ID_FIELD, SCENE_ORGAN_CFG_ENABLED_FIELD, SCENE_ORGAN_CFG_SHOW_NAME_FIELD}
+SCENE_ORGAN_CFG.is_extendable = false
+SCENE_ORGAN_CFG.extensions = {}
+SCENE_ORGAN_CFGS_ITEMS_FIELD.name = "items"
+SCENE_ORGAN_CFGS_ITEMS_FIELD.full_name = ".ftcfg.scene_organ_cfgs.items"
+SCENE_ORGAN_CFGS_ITEMS_FIELD.number = 1
+SCENE_ORGAN_CFGS_ITEMS_FIELD.index = 0
+SCENE_ORGAN_CFGS_ITEMS_FIELD.label = 3
+SCENE_ORGAN_CFGS_ITEMS_FIELD.has_default_value = false
+SCENE_ORGAN_CFGS_ITEMS_FIELD.default_value = {}
+SCENE_ORGAN_CFGS_ITEMS_FIELD.message_type = SCENE_ORGAN_CFG
+SCENE_ORGAN_CFGS_ITEMS_FIELD.type = 11
+SCENE_ORGAN_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SCENE_ORGAN_CFGS.name = "scene_organ_cfgs"
+SCENE_ORGAN_CFGS.full_name = ".ftcfg.scene_organ_cfgs"
+SCENE_ORGAN_CFGS.nested_types = {}
+SCENE_ORGAN_CFGS.enum_types = {}
+SCENE_ORGAN_CFGS.fields = {SCENE_ORGAN_CFGS_ITEMS_FIELD}
+SCENE_ORGAN_CFGS.is_extendable = false
+SCENE_ORGAN_CFGS.extensions = {}
+MAP_SIGNS_CFG_ID_FIELD.name = "id"
+MAP_SIGNS_CFG_ID_FIELD.full_name = ".ftcfg.map_signs_cfg.id"
+MAP_SIGNS_CFG_ID_FIELD.number = 1
+MAP_SIGNS_CFG_ID_FIELD.index = 0
+MAP_SIGNS_CFG_ID_FIELD.label = 2
+MAP_SIGNS_CFG_ID_FIELD.has_default_value = false
+MAP_SIGNS_CFG_ID_FIELD.default_value = 0
+MAP_SIGNS_CFG_ID_FIELD.type = 5
+MAP_SIGNS_CFG_ID_FIELD.cpp_type = 1
+
+MAP_SIGNS_CFG_NAME_FIELD.name = "name"
+MAP_SIGNS_CFG_NAME_FIELD.full_name = ".ftcfg.map_signs_cfg.name"
+MAP_SIGNS_CFG_NAME_FIELD.number = 2
+MAP_SIGNS_CFG_NAME_FIELD.index = 1
+MAP_SIGNS_CFG_NAME_FIELD.label = 2
+MAP_SIGNS_CFG_NAME_FIELD.has_default_value = false
+MAP_SIGNS_CFG_NAME_FIELD.default_value = 0
+MAP_SIGNS_CFG_NAME_FIELD.type = 5
+MAP_SIGNS_CFG_NAME_FIELD.cpp_type = 1
+
+MAP_SIGNS_CFG_MAP_ID_FIELD.name = "map_id"
+MAP_SIGNS_CFG_MAP_ID_FIELD.full_name = ".ftcfg.map_signs_cfg.map_id"
+MAP_SIGNS_CFG_MAP_ID_FIELD.number = 3
+MAP_SIGNS_CFG_MAP_ID_FIELD.index = 2
+MAP_SIGNS_CFG_MAP_ID_FIELD.label = 2
+MAP_SIGNS_CFG_MAP_ID_FIELD.has_default_value = false
+MAP_SIGNS_CFG_MAP_ID_FIELD.default_value = 0
+MAP_SIGNS_CFG_MAP_ID_FIELD.type = 5
+MAP_SIGNS_CFG_MAP_ID_FIELD.cpp_type = 1
+
+MAP_SIGNS_CFG_TYPE_FIELD.name = "type"
+MAP_SIGNS_CFG_TYPE_FIELD.full_name = ".ftcfg.map_signs_cfg.type"
+MAP_SIGNS_CFG_TYPE_FIELD.number = 4
+MAP_SIGNS_CFG_TYPE_FIELD.index = 3
+MAP_SIGNS_CFG_TYPE_FIELD.label = 2
+MAP_SIGNS_CFG_TYPE_FIELD.has_default_value = false
+MAP_SIGNS_CFG_TYPE_FIELD.default_value = 0
+MAP_SIGNS_CFG_TYPE_FIELD.type = 5
+MAP_SIGNS_CFG_TYPE_FIELD.cpp_type = 1
+
+MAP_SIGNS_CFG_SUB_TYPE_FIELD.name = "sub_type"
+MAP_SIGNS_CFG_SUB_TYPE_FIELD.full_name = ".ftcfg.map_signs_cfg.sub_type"
+MAP_SIGNS_CFG_SUB_TYPE_FIELD.number = 5
+MAP_SIGNS_CFG_SUB_TYPE_FIELD.index = 4
+MAP_SIGNS_CFG_SUB_TYPE_FIELD.label = 2
+MAP_SIGNS_CFG_SUB_TYPE_FIELD.has_default_value = false
+MAP_SIGNS_CFG_SUB_TYPE_FIELD.default_value = nil
+MAP_SIGNS_CFG_SUB_TYPE_FIELD.enum_type = config_predefine_pb.EACTIVETYPE
+MAP_SIGNS_CFG_SUB_TYPE_FIELD.type = 14
+MAP_SIGNS_CFG_SUB_TYPE_FIELD.cpp_type = 8
+
+MAP_SIGNS_CFG_AUTO_ID_FIELD.name = "auto_id"
+MAP_SIGNS_CFG_AUTO_ID_FIELD.full_name = ".ftcfg.map_signs_cfg.auto_id"
+MAP_SIGNS_CFG_AUTO_ID_FIELD.number = 6
+MAP_SIGNS_CFG_AUTO_ID_FIELD.index = 5
+MAP_SIGNS_CFG_AUTO_ID_FIELD.label = 2
+MAP_SIGNS_CFG_AUTO_ID_FIELD.has_default_value = false
+MAP_SIGNS_CFG_AUTO_ID_FIELD.default_value = 0
+MAP_SIGNS_CFG_AUTO_ID_FIELD.type = 5
+MAP_SIGNS_CFG_AUTO_ID_FIELD.cpp_type = 1
+
+MAP_SIGNS_CFG_POS_X_FIELD.name = "pos_x"
+MAP_SIGNS_CFG_POS_X_FIELD.full_name = ".ftcfg.map_signs_cfg.pos_x"
+MAP_SIGNS_CFG_POS_X_FIELD.number = 7
+MAP_SIGNS_CFG_POS_X_FIELD.index = 6
+MAP_SIGNS_CFG_POS_X_FIELD.label = 2
+MAP_SIGNS_CFG_POS_X_FIELD.has_default_value = false
+MAP_SIGNS_CFG_POS_X_FIELD.default_value = 0.0
+MAP_SIGNS_CFG_POS_X_FIELD.type = 2
+MAP_SIGNS_CFG_POS_X_FIELD.cpp_type = 6
+
+MAP_SIGNS_CFG_POS_Y_FIELD.name = "pos_y"
+MAP_SIGNS_CFG_POS_Y_FIELD.full_name = ".ftcfg.map_signs_cfg.pos_y"
+MAP_SIGNS_CFG_POS_Y_FIELD.number = 8
+MAP_SIGNS_CFG_POS_Y_FIELD.index = 7
+MAP_SIGNS_CFG_POS_Y_FIELD.label = 2
+MAP_SIGNS_CFG_POS_Y_FIELD.has_default_value = false
+MAP_SIGNS_CFG_POS_Y_FIELD.default_value = 0.0
+MAP_SIGNS_CFG_POS_Y_FIELD.type = 2
+MAP_SIGNS_CFG_POS_Y_FIELD.cpp_type = 6
+
+MAP_SIGNS_CFG_POS_Z_FIELD.name = "pos_z"
+MAP_SIGNS_CFG_POS_Z_FIELD.full_name = ".ftcfg.map_signs_cfg.pos_z"
+MAP_SIGNS_CFG_POS_Z_FIELD.number = 9
+MAP_SIGNS_CFG_POS_Z_FIELD.index = 8
+MAP_SIGNS_CFG_POS_Z_FIELD.label = 2
+MAP_SIGNS_CFG_POS_Z_FIELD.has_default_value = false
+MAP_SIGNS_CFG_POS_Z_FIELD.default_value = 0.0
+MAP_SIGNS_CFG_POS_Z_FIELD.type = 2
+MAP_SIGNS_CFG_POS_Z_FIELD.cpp_type = 6
+
+MAP_SIGNS_CFG_IS_AUTO_FIELD.name = "is_auto"
+MAP_SIGNS_CFG_IS_AUTO_FIELD.full_name = ".ftcfg.map_signs_cfg.is_auto"
+MAP_SIGNS_CFG_IS_AUTO_FIELD.number = 10
+MAP_SIGNS_CFG_IS_AUTO_FIELD.index = 9
+MAP_SIGNS_CFG_IS_AUTO_FIELD.label = 2
+MAP_SIGNS_CFG_IS_AUTO_FIELD.has_default_value = false
+MAP_SIGNS_CFG_IS_AUTO_FIELD.default_value = 0
+MAP_SIGNS_CFG_IS_AUTO_FIELD.type = 5
+MAP_SIGNS_CFG_IS_AUTO_FIELD.cpp_type = 1
+
+MAP_SIGNS_CFG_IS_SHOW_FIELD.name = "is_show"
+MAP_SIGNS_CFG_IS_SHOW_FIELD.full_name = ".ftcfg.map_signs_cfg.is_show"
+MAP_SIGNS_CFG_IS_SHOW_FIELD.number = 11
+MAP_SIGNS_CFG_IS_SHOW_FIELD.index = 10
+MAP_SIGNS_CFG_IS_SHOW_FIELD.label = 2
+MAP_SIGNS_CFG_IS_SHOW_FIELD.has_default_value = false
+MAP_SIGNS_CFG_IS_SHOW_FIELD.default_value = 0
+MAP_SIGNS_CFG_IS_SHOW_FIELD.type = 5
+MAP_SIGNS_CFG_IS_SHOW_FIELD.cpp_type = 1
+
+MAP_SIGNS_CFG.name = "map_signs_cfg"
+MAP_SIGNS_CFG.full_name = ".ftcfg.map_signs_cfg"
+MAP_SIGNS_CFG.nested_types = {}
+MAP_SIGNS_CFG.enum_types = {}
+MAP_SIGNS_CFG.fields = {MAP_SIGNS_CFG_ID_FIELD, MAP_SIGNS_CFG_NAME_FIELD, MAP_SIGNS_CFG_MAP_ID_FIELD, MAP_SIGNS_CFG_TYPE_FIELD, MAP_SIGNS_CFG_SUB_TYPE_FIELD, MAP_SIGNS_CFG_AUTO_ID_FIELD, MAP_SIGNS_CFG_POS_X_FIELD, MAP_SIGNS_CFG_POS_Y_FIELD, MAP_SIGNS_CFG_POS_Z_FIELD, MAP_SIGNS_CFG_IS_AUTO_FIELD, MAP_SIGNS_CFG_IS_SHOW_FIELD}
+MAP_SIGNS_CFG.is_extendable = false
+MAP_SIGNS_CFG.extensions = {}
+MAP_SIGNS_CFGS_ITEMS_FIELD.name = "items"
+MAP_SIGNS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.map_signs_cfgs.items"
+MAP_SIGNS_CFGS_ITEMS_FIELD.number = 1
+MAP_SIGNS_CFGS_ITEMS_FIELD.index = 0
+MAP_SIGNS_CFGS_ITEMS_FIELD.label = 3
+MAP_SIGNS_CFGS_ITEMS_FIELD.has_default_value = false
+MAP_SIGNS_CFGS_ITEMS_FIELD.default_value = {}
+MAP_SIGNS_CFGS_ITEMS_FIELD.message_type = MAP_SIGNS_CFG
+MAP_SIGNS_CFGS_ITEMS_FIELD.type = 11
+MAP_SIGNS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MAP_SIGNS_CFGS.name = "map_signs_cfgs"
+MAP_SIGNS_CFGS.full_name = ".ftcfg.map_signs_cfgs"
+MAP_SIGNS_CFGS.nested_types = {}
+MAP_SIGNS_CFGS.enum_types = {}
+MAP_SIGNS_CFGS.fields = {MAP_SIGNS_CFGS_ITEMS_FIELD}
+MAP_SIGNS_CFGS.is_extendable = false
+MAP_SIGNS_CFGS.extensions = {}
+SCENE_TRIGGER_CFG_NAME_FIELD.name = "name"
+SCENE_TRIGGER_CFG_NAME_FIELD.full_name = ".ftcfg.scene_trigger_cfg.name"
+SCENE_TRIGGER_CFG_NAME_FIELD.number = 1
+SCENE_TRIGGER_CFG_NAME_FIELD.index = 0
+SCENE_TRIGGER_CFG_NAME_FIELD.label = 2
+SCENE_TRIGGER_CFG_NAME_FIELD.has_default_value = false
+SCENE_TRIGGER_CFG_NAME_FIELD.default_value = ""
+SCENE_TRIGGER_CFG_NAME_FIELD.type = 9
+SCENE_TRIGGER_CFG_NAME_FIELD.cpp_type = 9
+
+SCENE_TRIGGER_CFG_MAP_ID_FIELD.name = "map_id"
+SCENE_TRIGGER_CFG_MAP_ID_FIELD.full_name = ".ftcfg.scene_trigger_cfg.map_id"
+SCENE_TRIGGER_CFG_MAP_ID_FIELD.number = 2
+SCENE_TRIGGER_CFG_MAP_ID_FIELD.index = 1
+SCENE_TRIGGER_CFG_MAP_ID_FIELD.label = 2
+SCENE_TRIGGER_CFG_MAP_ID_FIELD.has_default_value = false
+SCENE_TRIGGER_CFG_MAP_ID_FIELD.default_value = 0
+SCENE_TRIGGER_CFG_MAP_ID_FIELD.type = 5
+SCENE_TRIGGER_CFG_MAP_ID_FIELD.cpp_type = 1
+
+SCENE_TRIGGER_CFG_EVENTS_FIELD.name = "events"
+SCENE_TRIGGER_CFG_EVENTS_FIELD.full_name = ".ftcfg.scene_trigger_cfg.events"
+SCENE_TRIGGER_CFG_EVENTS_FIELD.number = 3
+SCENE_TRIGGER_CFG_EVENTS_FIELD.index = 2
+SCENE_TRIGGER_CFG_EVENTS_FIELD.label = 3
+SCENE_TRIGGER_CFG_EVENTS_FIELD.has_default_value = false
+SCENE_TRIGGER_CFG_EVENTS_FIELD.default_value = {}
+SCENE_TRIGGER_CFG_EVENTS_FIELD.type = 5
+SCENE_TRIGGER_CFG_EVENTS_FIELD.cpp_type = 1
+
+SCENE_TRIGGER_CFG_CONDITIONS_FIELD.name = "conditions"
+SCENE_TRIGGER_CFG_CONDITIONS_FIELD.full_name = ".ftcfg.scene_trigger_cfg.conditions"
+SCENE_TRIGGER_CFG_CONDITIONS_FIELD.number = 4
+SCENE_TRIGGER_CFG_CONDITIONS_FIELD.index = 3
+SCENE_TRIGGER_CFG_CONDITIONS_FIELD.label = 3
+SCENE_TRIGGER_CFG_CONDITIONS_FIELD.has_default_value = false
+SCENE_TRIGGER_CFG_CONDITIONS_FIELD.default_value = {}
+SCENE_TRIGGER_CFG_CONDITIONS_FIELD.type = 5
+SCENE_TRIGGER_CFG_CONDITIONS_FIELD.cpp_type = 1
+
+SCENE_TRIGGER_CFG_ACTIONS_FIELD.name = "actions"
+SCENE_TRIGGER_CFG_ACTIONS_FIELD.full_name = ".ftcfg.scene_trigger_cfg.actions"
+SCENE_TRIGGER_CFG_ACTIONS_FIELD.number = 5
+SCENE_TRIGGER_CFG_ACTIONS_FIELD.index = 4
+SCENE_TRIGGER_CFG_ACTIONS_FIELD.label = 3
+SCENE_TRIGGER_CFG_ACTIONS_FIELD.has_default_value = false
+SCENE_TRIGGER_CFG_ACTIONS_FIELD.default_value = {}
+SCENE_TRIGGER_CFG_ACTIONS_FIELD.type = 5
+SCENE_TRIGGER_CFG_ACTIONS_FIELD.cpp_type = 1
+
+SCENE_TRIGGER_CFG_OPENED_FIELD.name = "opened"
+SCENE_TRIGGER_CFG_OPENED_FIELD.full_name = ".ftcfg.scene_trigger_cfg.opened"
+SCENE_TRIGGER_CFG_OPENED_FIELD.number = 6
+SCENE_TRIGGER_CFG_OPENED_FIELD.index = 5
+SCENE_TRIGGER_CFG_OPENED_FIELD.label = 2
+SCENE_TRIGGER_CFG_OPENED_FIELD.has_default_value = false
+SCENE_TRIGGER_CFG_OPENED_FIELD.default_value = 0
+SCENE_TRIGGER_CFG_OPENED_FIELD.type = 5
+SCENE_TRIGGER_CFG_OPENED_FIELD.cpp_type = 1
+
+SCENE_TRIGGER_CFG.name = "scene_trigger_cfg"
+SCENE_TRIGGER_CFG.full_name = ".ftcfg.scene_trigger_cfg"
+SCENE_TRIGGER_CFG.nested_types = {}
+SCENE_TRIGGER_CFG.enum_types = {}
+SCENE_TRIGGER_CFG.fields = {SCENE_TRIGGER_CFG_NAME_FIELD, SCENE_TRIGGER_CFG_MAP_ID_FIELD, SCENE_TRIGGER_CFG_EVENTS_FIELD, SCENE_TRIGGER_CFG_CONDITIONS_FIELD, SCENE_TRIGGER_CFG_ACTIONS_FIELD, SCENE_TRIGGER_CFG_OPENED_FIELD}
+SCENE_TRIGGER_CFG.is_extendable = false
+SCENE_TRIGGER_CFG.extensions = {}
+SCENE_TRIGGER_CFGS_ITEMS_FIELD.name = "items"
+SCENE_TRIGGER_CFGS_ITEMS_FIELD.full_name = ".ftcfg.scene_trigger_cfgs.items"
+SCENE_TRIGGER_CFGS_ITEMS_FIELD.number = 1
+SCENE_TRIGGER_CFGS_ITEMS_FIELD.index = 0
+SCENE_TRIGGER_CFGS_ITEMS_FIELD.label = 3
+SCENE_TRIGGER_CFGS_ITEMS_FIELD.has_default_value = false
+SCENE_TRIGGER_CFGS_ITEMS_FIELD.default_value = {}
+SCENE_TRIGGER_CFGS_ITEMS_FIELD.message_type = SCENE_TRIGGER_CFG
+SCENE_TRIGGER_CFGS_ITEMS_FIELD.type = 11
+SCENE_TRIGGER_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SCENE_TRIGGER_CFGS.name = "scene_trigger_cfgs"
+SCENE_TRIGGER_CFGS.full_name = ".ftcfg.scene_trigger_cfgs"
+SCENE_TRIGGER_CFGS.nested_types = {}
+SCENE_TRIGGER_CFGS.enum_types = {}
+SCENE_TRIGGER_CFGS.fields = {SCENE_TRIGGER_CFGS_ITEMS_FIELD}
+SCENE_TRIGGER_CFGS.is_extendable = false
+SCENE_TRIGGER_CFGS.extensions = {}
+TRIGGER_EVENT_CFG_EVENT_ID_FIELD.name = "event_id"
+TRIGGER_EVENT_CFG_EVENT_ID_FIELD.full_name = ".ftcfg.trigger_event_cfg.event_id"
+TRIGGER_EVENT_CFG_EVENT_ID_FIELD.number = 1
+TRIGGER_EVENT_CFG_EVENT_ID_FIELD.index = 0
+TRIGGER_EVENT_CFG_EVENT_ID_FIELD.label = 2
+TRIGGER_EVENT_CFG_EVENT_ID_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_EVENT_ID_FIELD.default_value = 0
+TRIGGER_EVENT_CFG_EVENT_ID_FIELD.type = 5
+TRIGGER_EVENT_CFG_EVENT_ID_FIELD.cpp_type = 1
+
+TRIGGER_EVENT_CFG_TYPE_FIELD.name = "type"
+TRIGGER_EVENT_CFG_TYPE_FIELD.full_name = ".ftcfg.trigger_event_cfg.type"
+TRIGGER_EVENT_CFG_TYPE_FIELD.number = 2
+TRIGGER_EVENT_CFG_TYPE_FIELD.index = 1
+TRIGGER_EVENT_CFG_TYPE_FIELD.label = 2
+TRIGGER_EVENT_CFG_TYPE_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_TYPE_FIELD.default_value = nil
+TRIGGER_EVENT_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ETRIGGEREVENTTYPE
+TRIGGER_EVENT_CFG_TYPE_FIELD.type = 14
+TRIGGER_EVENT_CFG_TYPE_FIELD.cpp_type = 8
+
+TRIGGER_EVENT_CFG_PARAM1_FIELD.name = "param1"
+TRIGGER_EVENT_CFG_PARAM1_FIELD.full_name = ".ftcfg.trigger_event_cfg.param1"
+TRIGGER_EVENT_CFG_PARAM1_FIELD.number = 3
+TRIGGER_EVENT_CFG_PARAM1_FIELD.index = 2
+TRIGGER_EVENT_CFG_PARAM1_FIELD.label = 2
+TRIGGER_EVENT_CFG_PARAM1_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_PARAM1_FIELD.default_value = ""
+TRIGGER_EVENT_CFG_PARAM1_FIELD.type = 9
+TRIGGER_EVENT_CFG_PARAM1_FIELD.cpp_type = 9
+
+TRIGGER_EVENT_CFG_PARAM2_FIELD.name = "param2"
+TRIGGER_EVENT_CFG_PARAM2_FIELD.full_name = ".ftcfg.trigger_event_cfg.param2"
+TRIGGER_EVENT_CFG_PARAM2_FIELD.number = 4
+TRIGGER_EVENT_CFG_PARAM2_FIELD.index = 3
+TRIGGER_EVENT_CFG_PARAM2_FIELD.label = 2
+TRIGGER_EVENT_CFG_PARAM2_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_PARAM2_FIELD.default_value = ""
+TRIGGER_EVENT_CFG_PARAM2_FIELD.type = 9
+TRIGGER_EVENT_CFG_PARAM2_FIELD.cpp_type = 9
+
+TRIGGER_EVENT_CFG_PARAM3_FIELD.name = "param3"
+TRIGGER_EVENT_CFG_PARAM3_FIELD.full_name = ".ftcfg.trigger_event_cfg.param3"
+TRIGGER_EVENT_CFG_PARAM3_FIELD.number = 5
+TRIGGER_EVENT_CFG_PARAM3_FIELD.index = 4
+TRIGGER_EVENT_CFG_PARAM3_FIELD.label = 2
+TRIGGER_EVENT_CFG_PARAM3_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_PARAM3_FIELD.default_value = ""
+TRIGGER_EVENT_CFG_PARAM3_FIELD.type = 9
+TRIGGER_EVENT_CFG_PARAM3_FIELD.cpp_type = 9
+
+TRIGGER_EVENT_CFG_PARAM4_FIELD.name = "param4"
+TRIGGER_EVENT_CFG_PARAM4_FIELD.full_name = ".ftcfg.trigger_event_cfg.param4"
+TRIGGER_EVENT_CFG_PARAM4_FIELD.number = 6
+TRIGGER_EVENT_CFG_PARAM4_FIELD.index = 5
+TRIGGER_EVENT_CFG_PARAM4_FIELD.label = 2
+TRIGGER_EVENT_CFG_PARAM4_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_PARAM4_FIELD.default_value = ""
+TRIGGER_EVENT_CFG_PARAM4_FIELD.type = 9
+TRIGGER_EVENT_CFG_PARAM4_FIELD.cpp_type = 9
+
+TRIGGER_EVENT_CFG_PARAM5_FIELD.name = "param5"
+TRIGGER_EVENT_CFG_PARAM5_FIELD.full_name = ".ftcfg.trigger_event_cfg.param5"
+TRIGGER_EVENT_CFG_PARAM5_FIELD.number = 7
+TRIGGER_EVENT_CFG_PARAM5_FIELD.index = 6
+TRIGGER_EVENT_CFG_PARAM5_FIELD.label = 2
+TRIGGER_EVENT_CFG_PARAM5_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_PARAM5_FIELD.default_value = ""
+TRIGGER_EVENT_CFG_PARAM5_FIELD.type = 9
+TRIGGER_EVENT_CFG_PARAM5_FIELD.cpp_type = 9
+
+TRIGGER_EVENT_CFG_PARAM6_FIELD.name = "param6"
+TRIGGER_EVENT_CFG_PARAM6_FIELD.full_name = ".ftcfg.trigger_event_cfg.param6"
+TRIGGER_EVENT_CFG_PARAM6_FIELD.number = 8
+TRIGGER_EVENT_CFG_PARAM6_FIELD.index = 7
+TRIGGER_EVENT_CFG_PARAM6_FIELD.label = 2
+TRIGGER_EVENT_CFG_PARAM6_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_PARAM6_FIELD.default_value = ""
+TRIGGER_EVENT_CFG_PARAM6_FIELD.type = 9
+TRIGGER_EVENT_CFG_PARAM6_FIELD.cpp_type = 9
+
+TRIGGER_EVENT_CFG_PARAM7_FIELD.name = "param7"
+TRIGGER_EVENT_CFG_PARAM7_FIELD.full_name = ".ftcfg.trigger_event_cfg.param7"
+TRIGGER_EVENT_CFG_PARAM7_FIELD.number = 9
+TRIGGER_EVENT_CFG_PARAM7_FIELD.index = 8
+TRIGGER_EVENT_CFG_PARAM7_FIELD.label = 2
+TRIGGER_EVENT_CFG_PARAM7_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_PARAM7_FIELD.default_value = ""
+TRIGGER_EVENT_CFG_PARAM7_FIELD.type = 9
+TRIGGER_EVENT_CFG_PARAM7_FIELD.cpp_type = 9
+
+TRIGGER_EVENT_CFG_PARAM8_FIELD.name = "param8"
+TRIGGER_EVENT_CFG_PARAM8_FIELD.full_name = ".ftcfg.trigger_event_cfg.param8"
+TRIGGER_EVENT_CFG_PARAM8_FIELD.number = 10
+TRIGGER_EVENT_CFG_PARAM8_FIELD.index = 9
+TRIGGER_EVENT_CFG_PARAM8_FIELD.label = 2
+TRIGGER_EVENT_CFG_PARAM8_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_PARAM8_FIELD.default_value = ""
+TRIGGER_EVENT_CFG_PARAM8_FIELD.type = 9
+TRIGGER_EVENT_CFG_PARAM8_FIELD.cpp_type = 9
+
+TRIGGER_EVENT_CFG_PARAM9_FIELD.name = "param9"
+TRIGGER_EVENT_CFG_PARAM9_FIELD.full_name = ".ftcfg.trigger_event_cfg.param9"
+TRIGGER_EVENT_CFG_PARAM9_FIELD.number = 11
+TRIGGER_EVENT_CFG_PARAM9_FIELD.index = 10
+TRIGGER_EVENT_CFG_PARAM9_FIELD.label = 2
+TRIGGER_EVENT_CFG_PARAM9_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_PARAM9_FIELD.default_value = ""
+TRIGGER_EVENT_CFG_PARAM9_FIELD.type = 9
+TRIGGER_EVENT_CFG_PARAM9_FIELD.cpp_type = 9
+
+TRIGGER_EVENT_CFG_PARAM10_FIELD.name = "param10"
+TRIGGER_EVENT_CFG_PARAM10_FIELD.full_name = ".ftcfg.trigger_event_cfg.param10"
+TRIGGER_EVENT_CFG_PARAM10_FIELD.number = 12
+TRIGGER_EVENT_CFG_PARAM10_FIELD.index = 11
+TRIGGER_EVENT_CFG_PARAM10_FIELD.label = 2
+TRIGGER_EVENT_CFG_PARAM10_FIELD.has_default_value = false
+TRIGGER_EVENT_CFG_PARAM10_FIELD.default_value = ""
+TRIGGER_EVENT_CFG_PARAM10_FIELD.type = 9
+TRIGGER_EVENT_CFG_PARAM10_FIELD.cpp_type = 9
+
+TRIGGER_EVENT_CFG.name = "trigger_event_cfg"
+TRIGGER_EVENT_CFG.full_name = ".ftcfg.trigger_event_cfg"
+TRIGGER_EVENT_CFG.nested_types = {}
+TRIGGER_EVENT_CFG.enum_types = {}
+TRIGGER_EVENT_CFG.fields = {TRIGGER_EVENT_CFG_EVENT_ID_FIELD, TRIGGER_EVENT_CFG_TYPE_FIELD, TRIGGER_EVENT_CFG_PARAM1_FIELD, TRIGGER_EVENT_CFG_PARAM2_FIELD, TRIGGER_EVENT_CFG_PARAM3_FIELD, TRIGGER_EVENT_CFG_PARAM4_FIELD, TRIGGER_EVENT_CFG_PARAM5_FIELD, TRIGGER_EVENT_CFG_PARAM6_FIELD, TRIGGER_EVENT_CFG_PARAM7_FIELD, TRIGGER_EVENT_CFG_PARAM8_FIELD, TRIGGER_EVENT_CFG_PARAM9_FIELD, TRIGGER_EVENT_CFG_PARAM10_FIELD}
+TRIGGER_EVENT_CFG.is_extendable = false
+TRIGGER_EVENT_CFG.extensions = {}
+TRIGGER_EVENT_CFGS_ITEMS_FIELD.name = "items"
+TRIGGER_EVENT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.trigger_event_cfgs.items"
+TRIGGER_EVENT_CFGS_ITEMS_FIELD.number = 1
+TRIGGER_EVENT_CFGS_ITEMS_FIELD.index = 0
+TRIGGER_EVENT_CFGS_ITEMS_FIELD.label = 3
+TRIGGER_EVENT_CFGS_ITEMS_FIELD.has_default_value = false
+TRIGGER_EVENT_CFGS_ITEMS_FIELD.default_value = {}
+TRIGGER_EVENT_CFGS_ITEMS_FIELD.message_type = TRIGGER_EVENT_CFG
+TRIGGER_EVENT_CFGS_ITEMS_FIELD.type = 11
+TRIGGER_EVENT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TRIGGER_EVENT_CFGS.name = "trigger_event_cfgs"
+TRIGGER_EVENT_CFGS.full_name = ".ftcfg.trigger_event_cfgs"
+TRIGGER_EVENT_CFGS.nested_types = {}
+TRIGGER_EVENT_CFGS.enum_types = {}
+TRIGGER_EVENT_CFGS.fields = {TRIGGER_EVENT_CFGS_ITEMS_FIELD}
+TRIGGER_EVENT_CFGS.is_extendable = false
+TRIGGER_EVENT_CFGS.extensions = {}
+TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.name = "condition_id"
+TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.full_name = ".ftcfg.trigger_condition_cfg.condition_id"
+TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.number = 1
+TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.index = 0
+TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.label = 2
+TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.default_value = 0
+TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.type = 5
+TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD.cpp_type = 1
+
+TRIGGER_CONDITION_CFG_TYPE_FIELD.name = "type"
+TRIGGER_CONDITION_CFG_TYPE_FIELD.full_name = ".ftcfg.trigger_condition_cfg.type"
+TRIGGER_CONDITION_CFG_TYPE_FIELD.number = 2
+TRIGGER_CONDITION_CFG_TYPE_FIELD.index = 1
+TRIGGER_CONDITION_CFG_TYPE_FIELD.label = 2
+TRIGGER_CONDITION_CFG_TYPE_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_TYPE_FIELD.default_value = nil
+TRIGGER_CONDITION_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ETRIGGERCONDITIONTYPE
+TRIGGER_CONDITION_CFG_TYPE_FIELD.type = 14
+TRIGGER_CONDITION_CFG_TYPE_FIELD.cpp_type = 8
+
+TRIGGER_CONDITION_CFG_PARAM1_FIELD.name = "param1"
+TRIGGER_CONDITION_CFG_PARAM1_FIELD.full_name = ".ftcfg.trigger_condition_cfg.param1"
+TRIGGER_CONDITION_CFG_PARAM1_FIELD.number = 3
+TRIGGER_CONDITION_CFG_PARAM1_FIELD.index = 2
+TRIGGER_CONDITION_CFG_PARAM1_FIELD.label = 2
+TRIGGER_CONDITION_CFG_PARAM1_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_PARAM1_FIELD.default_value = ""
+TRIGGER_CONDITION_CFG_PARAM1_FIELD.type = 9
+TRIGGER_CONDITION_CFG_PARAM1_FIELD.cpp_type = 9
+
+TRIGGER_CONDITION_CFG_PARAM2_FIELD.name = "param2"
+TRIGGER_CONDITION_CFG_PARAM2_FIELD.full_name = ".ftcfg.trigger_condition_cfg.param2"
+TRIGGER_CONDITION_CFG_PARAM2_FIELD.number = 4
+TRIGGER_CONDITION_CFG_PARAM2_FIELD.index = 3
+TRIGGER_CONDITION_CFG_PARAM2_FIELD.label = 2
+TRIGGER_CONDITION_CFG_PARAM2_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_PARAM2_FIELD.default_value = ""
+TRIGGER_CONDITION_CFG_PARAM2_FIELD.type = 9
+TRIGGER_CONDITION_CFG_PARAM2_FIELD.cpp_type = 9
+
+TRIGGER_CONDITION_CFG_PARAM3_FIELD.name = "param3"
+TRIGGER_CONDITION_CFG_PARAM3_FIELD.full_name = ".ftcfg.trigger_condition_cfg.param3"
+TRIGGER_CONDITION_CFG_PARAM3_FIELD.number = 5
+TRIGGER_CONDITION_CFG_PARAM3_FIELD.index = 4
+TRIGGER_CONDITION_CFG_PARAM3_FIELD.label = 2
+TRIGGER_CONDITION_CFG_PARAM3_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_PARAM3_FIELD.default_value = ""
+TRIGGER_CONDITION_CFG_PARAM3_FIELD.type = 9
+TRIGGER_CONDITION_CFG_PARAM3_FIELD.cpp_type = 9
+
+TRIGGER_CONDITION_CFG_PARAM4_FIELD.name = "param4"
+TRIGGER_CONDITION_CFG_PARAM4_FIELD.full_name = ".ftcfg.trigger_condition_cfg.param4"
+TRIGGER_CONDITION_CFG_PARAM4_FIELD.number = 6
+TRIGGER_CONDITION_CFG_PARAM4_FIELD.index = 5
+TRIGGER_CONDITION_CFG_PARAM4_FIELD.label = 2
+TRIGGER_CONDITION_CFG_PARAM4_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_PARAM4_FIELD.default_value = ""
+TRIGGER_CONDITION_CFG_PARAM4_FIELD.type = 9
+TRIGGER_CONDITION_CFG_PARAM4_FIELD.cpp_type = 9
+
+TRIGGER_CONDITION_CFG_PARAM5_FIELD.name = "param5"
+TRIGGER_CONDITION_CFG_PARAM5_FIELD.full_name = ".ftcfg.trigger_condition_cfg.param5"
+TRIGGER_CONDITION_CFG_PARAM5_FIELD.number = 7
+TRIGGER_CONDITION_CFG_PARAM5_FIELD.index = 6
+TRIGGER_CONDITION_CFG_PARAM5_FIELD.label = 2
+TRIGGER_CONDITION_CFG_PARAM5_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_PARAM5_FIELD.default_value = ""
+TRIGGER_CONDITION_CFG_PARAM5_FIELD.type = 9
+TRIGGER_CONDITION_CFG_PARAM5_FIELD.cpp_type = 9
+
+TRIGGER_CONDITION_CFG_PARAM6_FIELD.name = "param6"
+TRIGGER_CONDITION_CFG_PARAM6_FIELD.full_name = ".ftcfg.trigger_condition_cfg.param6"
+TRIGGER_CONDITION_CFG_PARAM6_FIELD.number = 8
+TRIGGER_CONDITION_CFG_PARAM6_FIELD.index = 7
+TRIGGER_CONDITION_CFG_PARAM6_FIELD.label = 2
+TRIGGER_CONDITION_CFG_PARAM6_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_PARAM6_FIELD.default_value = ""
+TRIGGER_CONDITION_CFG_PARAM6_FIELD.type = 9
+TRIGGER_CONDITION_CFG_PARAM6_FIELD.cpp_type = 9
+
+TRIGGER_CONDITION_CFG_PARAM7_FIELD.name = "param7"
+TRIGGER_CONDITION_CFG_PARAM7_FIELD.full_name = ".ftcfg.trigger_condition_cfg.param7"
+TRIGGER_CONDITION_CFG_PARAM7_FIELD.number = 9
+TRIGGER_CONDITION_CFG_PARAM7_FIELD.index = 8
+TRIGGER_CONDITION_CFG_PARAM7_FIELD.label = 2
+TRIGGER_CONDITION_CFG_PARAM7_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_PARAM7_FIELD.default_value = ""
+TRIGGER_CONDITION_CFG_PARAM7_FIELD.type = 9
+TRIGGER_CONDITION_CFG_PARAM7_FIELD.cpp_type = 9
+
+TRIGGER_CONDITION_CFG_PARAM8_FIELD.name = "param8"
+TRIGGER_CONDITION_CFG_PARAM8_FIELD.full_name = ".ftcfg.trigger_condition_cfg.param8"
+TRIGGER_CONDITION_CFG_PARAM8_FIELD.number = 10
+TRIGGER_CONDITION_CFG_PARAM8_FIELD.index = 9
+TRIGGER_CONDITION_CFG_PARAM8_FIELD.label = 2
+TRIGGER_CONDITION_CFG_PARAM8_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_PARAM8_FIELD.default_value = ""
+TRIGGER_CONDITION_CFG_PARAM8_FIELD.type = 9
+TRIGGER_CONDITION_CFG_PARAM8_FIELD.cpp_type = 9
+
+TRIGGER_CONDITION_CFG_PARAM9_FIELD.name = "param9"
+TRIGGER_CONDITION_CFG_PARAM9_FIELD.full_name = ".ftcfg.trigger_condition_cfg.param9"
+TRIGGER_CONDITION_CFG_PARAM9_FIELD.number = 11
+TRIGGER_CONDITION_CFG_PARAM9_FIELD.index = 10
+TRIGGER_CONDITION_CFG_PARAM9_FIELD.label = 2
+TRIGGER_CONDITION_CFG_PARAM9_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_PARAM9_FIELD.default_value = ""
+TRIGGER_CONDITION_CFG_PARAM9_FIELD.type = 9
+TRIGGER_CONDITION_CFG_PARAM9_FIELD.cpp_type = 9
+
+TRIGGER_CONDITION_CFG_PARAM10_FIELD.name = "param10"
+TRIGGER_CONDITION_CFG_PARAM10_FIELD.full_name = ".ftcfg.trigger_condition_cfg.param10"
+TRIGGER_CONDITION_CFG_PARAM10_FIELD.number = 12
+TRIGGER_CONDITION_CFG_PARAM10_FIELD.index = 11
+TRIGGER_CONDITION_CFG_PARAM10_FIELD.label = 2
+TRIGGER_CONDITION_CFG_PARAM10_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFG_PARAM10_FIELD.default_value = ""
+TRIGGER_CONDITION_CFG_PARAM10_FIELD.type = 9
+TRIGGER_CONDITION_CFG_PARAM10_FIELD.cpp_type = 9
+
+TRIGGER_CONDITION_CFG.name = "trigger_condition_cfg"
+TRIGGER_CONDITION_CFG.full_name = ".ftcfg.trigger_condition_cfg"
+TRIGGER_CONDITION_CFG.nested_types = {}
+TRIGGER_CONDITION_CFG.enum_types = {}
+TRIGGER_CONDITION_CFG.fields = {TRIGGER_CONDITION_CFG_CONDITION_ID_FIELD, TRIGGER_CONDITION_CFG_TYPE_FIELD, TRIGGER_CONDITION_CFG_PARAM1_FIELD, TRIGGER_CONDITION_CFG_PARAM2_FIELD, TRIGGER_CONDITION_CFG_PARAM3_FIELD, TRIGGER_CONDITION_CFG_PARAM4_FIELD, TRIGGER_CONDITION_CFG_PARAM5_FIELD, TRIGGER_CONDITION_CFG_PARAM6_FIELD, TRIGGER_CONDITION_CFG_PARAM7_FIELD, TRIGGER_CONDITION_CFG_PARAM8_FIELD, TRIGGER_CONDITION_CFG_PARAM9_FIELD, TRIGGER_CONDITION_CFG_PARAM10_FIELD}
+TRIGGER_CONDITION_CFG.is_extendable = false
+TRIGGER_CONDITION_CFG.extensions = {}
+TRIGGER_CONDITION_CFGS_ITEMS_FIELD.name = "items"
+TRIGGER_CONDITION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.trigger_condition_cfgs.items"
+TRIGGER_CONDITION_CFGS_ITEMS_FIELD.number = 1
+TRIGGER_CONDITION_CFGS_ITEMS_FIELD.index = 0
+TRIGGER_CONDITION_CFGS_ITEMS_FIELD.label = 3
+TRIGGER_CONDITION_CFGS_ITEMS_FIELD.has_default_value = false
+TRIGGER_CONDITION_CFGS_ITEMS_FIELD.default_value = {}
+TRIGGER_CONDITION_CFGS_ITEMS_FIELD.message_type = TRIGGER_CONDITION_CFG
+TRIGGER_CONDITION_CFGS_ITEMS_FIELD.type = 11
+TRIGGER_CONDITION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TRIGGER_CONDITION_CFGS.name = "trigger_condition_cfgs"
+TRIGGER_CONDITION_CFGS.full_name = ".ftcfg.trigger_condition_cfgs"
+TRIGGER_CONDITION_CFGS.nested_types = {}
+TRIGGER_CONDITION_CFGS.enum_types = {}
+TRIGGER_CONDITION_CFGS.fields = {TRIGGER_CONDITION_CFGS_ITEMS_FIELD}
+TRIGGER_CONDITION_CFGS.is_extendable = false
+TRIGGER_CONDITION_CFGS.extensions = {}
+TRIGGER_ACTION_CFG_ACTION_ID_FIELD.name = "action_id"
+TRIGGER_ACTION_CFG_ACTION_ID_FIELD.full_name = ".ftcfg.trigger_action_cfg.action_id"
+TRIGGER_ACTION_CFG_ACTION_ID_FIELD.number = 1
+TRIGGER_ACTION_CFG_ACTION_ID_FIELD.index = 0
+TRIGGER_ACTION_CFG_ACTION_ID_FIELD.label = 2
+TRIGGER_ACTION_CFG_ACTION_ID_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_ACTION_ID_FIELD.default_value = 0
+TRIGGER_ACTION_CFG_ACTION_ID_FIELD.type = 5
+TRIGGER_ACTION_CFG_ACTION_ID_FIELD.cpp_type = 1
+
+TRIGGER_ACTION_CFG_TYPE_FIELD.name = "type"
+TRIGGER_ACTION_CFG_TYPE_FIELD.full_name = ".ftcfg.trigger_action_cfg.type"
+TRIGGER_ACTION_CFG_TYPE_FIELD.number = 2
+TRIGGER_ACTION_CFG_TYPE_FIELD.index = 1
+TRIGGER_ACTION_CFG_TYPE_FIELD.label = 2
+TRIGGER_ACTION_CFG_TYPE_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_TYPE_FIELD.default_value = nil
+TRIGGER_ACTION_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ETRIGGERACTION0TYPE
+TRIGGER_ACTION_CFG_TYPE_FIELD.type = 14
+TRIGGER_ACTION_CFG_TYPE_FIELD.cpp_type = 8
+
+TRIGGER_ACTION_CFG_PARAM1_FIELD.name = "param1"
+TRIGGER_ACTION_CFG_PARAM1_FIELD.full_name = ".ftcfg.trigger_action_cfg.param1"
+TRIGGER_ACTION_CFG_PARAM1_FIELD.number = 3
+TRIGGER_ACTION_CFG_PARAM1_FIELD.index = 2
+TRIGGER_ACTION_CFG_PARAM1_FIELD.label = 2
+TRIGGER_ACTION_CFG_PARAM1_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_PARAM1_FIELD.default_value = ""
+TRIGGER_ACTION_CFG_PARAM1_FIELD.type = 9
+TRIGGER_ACTION_CFG_PARAM1_FIELD.cpp_type = 9
+
+TRIGGER_ACTION_CFG_PARAM2_FIELD.name = "param2"
+TRIGGER_ACTION_CFG_PARAM2_FIELD.full_name = ".ftcfg.trigger_action_cfg.param2"
+TRIGGER_ACTION_CFG_PARAM2_FIELD.number = 4
+TRIGGER_ACTION_CFG_PARAM2_FIELD.index = 3
+TRIGGER_ACTION_CFG_PARAM2_FIELD.label = 2
+TRIGGER_ACTION_CFG_PARAM2_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_PARAM2_FIELD.default_value = ""
+TRIGGER_ACTION_CFG_PARAM2_FIELD.type = 9
+TRIGGER_ACTION_CFG_PARAM2_FIELD.cpp_type = 9
+
+TRIGGER_ACTION_CFG_PARAM3_FIELD.name = "param3"
+TRIGGER_ACTION_CFG_PARAM3_FIELD.full_name = ".ftcfg.trigger_action_cfg.param3"
+TRIGGER_ACTION_CFG_PARAM3_FIELD.number = 5
+TRIGGER_ACTION_CFG_PARAM3_FIELD.index = 4
+TRIGGER_ACTION_CFG_PARAM3_FIELD.label = 2
+TRIGGER_ACTION_CFG_PARAM3_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_PARAM3_FIELD.default_value = ""
+TRIGGER_ACTION_CFG_PARAM3_FIELD.type = 9
+TRIGGER_ACTION_CFG_PARAM3_FIELD.cpp_type = 9
+
+TRIGGER_ACTION_CFG_PARAM4_FIELD.name = "param4"
+TRIGGER_ACTION_CFG_PARAM4_FIELD.full_name = ".ftcfg.trigger_action_cfg.param4"
+TRIGGER_ACTION_CFG_PARAM4_FIELD.number = 6
+TRIGGER_ACTION_CFG_PARAM4_FIELD.index = 5
+TRIGGER_ACTION_CFG_PARAM4_FIELD.label = 2
+TRIGGER_ACTION_CFG_PARAM4_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_PARAM4_FIELD.default_value = ""
+TRIGGER_ACTION_CFG_PARAM4_FIELD.type = 9
+TRIGGER_ACTION_CFG_PARAM4_FIELD.cpp_type = 9
+
+TRIGGER_ACTION_CFG_PARAM5_FIELD.name = "param5"
+TRIGGER_ACTION_CFG_PARAM5_FIELD.full_name = ".ftcfg.trigger_action_cfg.param5"
+TRIGGER_ACTION_CFG_PARAM5_FIELD.number = 7
+TRIGGER_ACTION_CFG_PARAM5_FIELD.index = 6
+TRIGGER_ACTION_CFG_PARAM5_FIELD.label = 2
+TRIGGER_ACTION_CFG_PARAM5_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_PARAM5_FIELD.default_value = ""
+TRIGGER_ACTION_CFG_PARAM5_FIELD.type = 9
+TRIGGER_ACTION_CFG_PARAM5_FIELD.cpp_type = 9
+
+TRIGGER_ACTION_CFG_PARAM6_FIELD.name = "param6"
+TRIGGER_ACTION_CFG_PARAM6_FIELD.full_name = ".ftcfg.trigger_action_cfg.param6"
+TRIGGER_ACTION_CFG_PARAM6_FIELD.number = 8
+TRIGGER_ACTION_CFG_PARAM6_FIELD.index = 7
+TRIGGER_ACTION_CFG_PARAM6_FIELD.label = 2
+TRIGGER_ACTION_CFG_PARAM6_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_PARAM6_FIELD.default_value = ""
+TRIGGER_ACTION_CFG_PARAM6_FIELD.type = 9
+TRIGGER_ACTION_CFG_PARAM6_FIELD.cpp_type = 9
+
+TRIGGER_ACTION_CFG_PARAM7_FIELD.name = "param7"
+TRIGGER_ACTION_CFG_PARAM7_FIELD.full_name = ".ftcfg.trigger_action_cfg.param7"
+TRIGGER_ACTION_CFG_PARAM7_FIELD.number = 9
+TRIGGER_ACTION_CFG_PARAM7_FIELD.index = 8
+TRIGGER_ACTION_CFG_PARAM7_FIELD.label = 2
+TRIGGER_ACTION_CFG_PARAM7_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_PARAM7_FIELD.default_value = ""
+TRIGGER_ACTION_CFG_PARAM7_FIELD.type = 9
+TRIGGER_ACTION_CFG_PARAM7_FIELD.cpp_type = 9
+
+TRIGGER_ACTION_CFG_PARAM8_FIELD.name = "param8"
+TRIGGER_ACTION_CFG_PARAM8_FIELD.full_name = ".ftcfg.trigger_action_cfg.param8"
+TRIGGER_ACTION_CFG_PARAM8_FIELD.number = 10
+TRIGGER_ACTION_CFG_PARAM8_FIELD.index = 9
+TRIGGER_ACTION_CFG_PARAM8_FIELD.label = 2
+TRIGGER_ACTION_CFG_PARAM8_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_PARAM8_FIELD.default_value = ""
+TRIGGER_ACTION_CFG_PARAM8_FIELD.type = 9
+TRIGGER_ACTION_CFG_PARAM8_FIELD.cpp_type = 9
+
+TRIGGER_ACTION_CFG_PARAM9_FIELD.name = "param9"
+TRIGGER_ACTION_CFG_PARAM9_FIELD.full_name = ".ftcfg.trigger_action_cfg.param9"
+TRIGGER_ACTION_CFG_PARAM9_FIELD.number = 11
+TRIGGER_ACTION_CFG_PARAM9_FIELD.index = 10
+TRIGGER_ACTION_CFG_PARAM9_FIELD.label = 2
+TRIGGER_ACTION_CFG_PARAM9_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_PARAM9_FIELD.default_value = ""
+TRIGGER_ACTION_CFG_PARAM9_FIELD.type = 9
+TRIGGER_ACTION_CFG_PARAM9_FIELD.cpp_type = 9
+
+TRIGGER_ACTION_CFG_PARAM10_FIELD.name = "param10"
+TRIGGER_ACTION_CFG_PARAM10_FIELD.full_name = ".ftcfg.trigger_action_cfg.param10"
+TRIGGER_ACTION_CFG_PARAM10_FIELD.number = 12
+TRIGGER_ACTION_CFG_PARAM10_FIELD.index = 11
+TRIGGER_ACTION_CFG_PARAM10_FIELD.label = 2
+TRIGGER_ACTION_CFG_PARAM10_FIELD.has_default_value = false
+TRIGGER_ACTION_CFG_PARAM10_FIELD.default_value = ""
+TRIGGER_ACTION_CFG_PARAM10_FIELD.type = 9
+TRIGGER_ACTION_CFG_PARAM10_FIELD.cpp_type = 9
+
+TRIGGER_ACTION_CFG.name = "trigger_action_cfg"
+TRIGGER_ACTION_CFG.full_name = ".ftcfg.trigger_action_cfg"
+TRIGGER_ACTION_CFG.nested_types = {}
+TRIGGER_ACTION_CFG.enum_types = {}
+TRIGGER_ACTION_CFG.fields = {TRIGGER_ACTION_CFG_ACTION_ID_FIELD, TRIGGER_ACTION_CFG_TYPE_FIELD, TRIGGER_ACTION_CFG_PARAM1_FIELD, TRIGGER_ACTION_CFG_PARAM2_FIELD, TRIGGER_ACTION_CFG_PARAM3_FIELD, TRIGGER_ACTION_CFG_PARAM4_FIELD, TRIGGER_ACTION_CFG_PARAM5_FIELD, TRIGGER_ACTION_CFG_PARAM6_FIELD, TRIGGER_ACTION_CFG_PARAM7_FIELD, TRIGGER_ACTION_CFG_PARAM8_FIELD, TRIGGER_ACTION_CFG_PARAM9_FIELD, TRIGGER_ACTION_CFG_PARAM10_FIELD}
+TRIGGER_ACTION_CFG.is_extendable = false
+TRIGGER_ACTION_CFG.extensions = {}
+TRIGGER_ACTION_CFGS_ITEMS_FIELD.name = "items"
+TRIGGER_ACTION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.trigger_action_cfgs.items"
+TRIGGER_ACTION_CFGS_ITEMS_FIELD.number = 1
+TRIGGER_ACTION_CFGS_ITEMS_FIELD.index = 0
+TRIGGER_ACTION_CFGS_ITEMS_FIELD.label = 3
+TRIGGER_ACTION_CFGS_ITEMS_FIELD.has_default_value = false
+TRIGGER_ACTION_CFGS_ITEMS_FIELD.default_value = {}
+TRIGGER_ACTION_CFGS_ITEMS_FIELD.message_type = TRIGGER_ACTION_CFG
+TRIGGER_ACTION_CFGS_ITEMS_FIELD.type = 11
+TRIGGER_ACTION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TRIGGER_ACTION_CFGS.name = "trigger_action_cfgs"
+TRIGGER_ACTION_CFGS.full_name = ".ftcfg.trigger_action_cfgs"
+TRIGGER_ACTION_CFGS.nested_types = {}
+TRIGGER_ACTION_CFGS.enum_types = {}
+TRIGGER_ACTION_CFGS.fields = {TRIGGER_ACTION_CFGS_ITEMS_FIELD}
+TRIGGER_ACTION_CFGS.is_extendable = false
+TRIGGER_ACTION_CFGS.extensions = {}
+TRIGGER_VARIABLE_CFG_NAME_FIELD.name = "name"
+TRIGGER_VARIABLE_CFG_NAME_FIELD.full_name = ".ftcfg.trigger_variable_cfg.name"
+TRIGGER_VARIABLE_CFG_NAME_FIELD.number = 1
+TRIGGER_VARIABLE_CFG_NAME_FIELD.index = 0
+TRIGGER_VARIABLE_CFG_NAME_FIELD.label = 2
+TRIGGER_VARIABLE_CFG_NAME_FIELD.has_default_value = false
+TRIGGER_VARIABLE_CFG_NAME_FIELD.default_value = ""
+TRIGGER_VARIABLE_CFG_NAME_FIELD.type = 9
+TRIGGER_VARIABLE_CFG_NAME_FIELD.cpp_type = 9
+
+TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.name = "map_id"
+TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.full_name = ".ftcfg.trigger_variable_cfg.map_id"
+TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.number = 2
+TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.index = 1
+TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.label = 2
+TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.has_default_value = false
+TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.default_value = 0
+TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.type = 5
+TRIGGER_VARIABLE_CFG_MAP_ID_FIELD.cpp_type = 1
+
+TRIGGER_VARIABLE_CFG_TYPE_FIELD.name = "type"
+TRIGGER_VARIABLE_CFG_TYPE_FIELD.full_name = ".ftcfg.trigger_variable_cfg.type"
+TRIGGER_VARIABLE_CFG_TYPE_FIELD.number = 3
+TRIGGER_VARIABLE_CFG_TYPE_FIELD.index = 2
+TRIGGER_VARIABLE_CFG_TYPE_FIELD.label = 2
+TRIGGER_VARIABLE_CFG_TYPE_FIELD.has_default_value = false
+TRIGGER_VARIABLE_CFG_TYPE_FIELD.default_value = nil
+TRIGGER_VARIABLE_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ETRIGGERVARIABLETYPE
+TRIGGER_VARIABLE_CFG_TYPE_FIELD.type = 14
+TRIGGER_VARIABLE_CFG_TYPE_FIELD.cpp_type = 8
+
+TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.name = "is_vec"
+TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.full_name = ".ftcfg.trigger_variable_cfg.is_vec"
+TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.number = 4
+TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.index = 3
+TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.label = 2
+TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.has_default_value = false
+TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.default_value = 0
+TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.type = 13
+TRIGGER_VARIABLE_CFG_IS_VEC_FIELD.cpp_type = 3
+
+TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.name = "vec_size"
+TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.full_name = ".ftcfg.trigger_variable_cfg.vec_size"
+TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.number = 5
+TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.index = 4
+TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.label = 2
+TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.has_default_value = false
+TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.default_value = 0
+TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.type = 13
+TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD.cpp_type = 3
+
+TRIGGER_VARIABLE_CFG_PARAM1_FIELD.name = "param1"
+TRIGGER_VARIABLE_CFG_PARAM1_FIELD.full_name = ".ftcfg.trigger_variable_cfg.param1"
+TRIGGER_VARIABLE_CFG_PARAM1_FIELD.number = 6
+TRIGGER_VARIABLE_CFG_PARAM1_FIELD.index = 5
+TRIGGER_VARIABLE_CFG_PARAM1_FIELD.label = 2
+TRIGGER_VARIABLE_CFG_PARAM1_FIELD.has_default_value = false
+TRIGGER_VARIABLE_CFG_PARAM1_FIELD.default_value = ""
+TRIGGER_VARIABLE_CFG_PARAM1_FIELD.type = 9
+TRIGGER_VARIABLE_CFG_PARAM1_FIELD.cpp_type = 9
+
+TRIGGER_VARIABLE_CFG_PARAM2_FIELD.name = "param2"
+TRIGGER_VARIABLE_CFG_PARAM2_FIELD.full_name = ".ftcfg.trigger_variable_cfg.param2"
+TRIGGER_VARIABLE_CFG_PARAM2_FIELD.number = 7
+TRIGGER_VARIABLE_CFG_PARAM2_FIELD.index = 6
+TRIGGER_VARIABLE_CFG_PARAM2_FIELD.label = 2
+TRIGGER_VARIABLE_CFG_PARAM2_FIELD.has_default_value = false
+TRIGGER_VARIABLE_CFG_PARAM2_FIELD.default_value = ""
+TRIGGER_VARIABLE_CFG_PARAM2_FIELD.type = 9
+TRIGGER_VARIABLE_CFG_PARAM2_FIELD.cpp_type = 9
+
+TRIGGER_VARIABLE_CFG_PARAM3_FIELD.name = "param3"
+TRIGGER_VARIABLE_CFG_PARAM3_FIELD.full_name = ".ftcfg.trigger_variable_cfg.param3"
+TRIGGER_VARIABLE_CFG_PARAM3_FIELD.number = 8
+TRIGGER_VARIABLE_CFG_PARAM3_FIELD.index = 7
+TRIGGER_VARIABLE_CFG_PARAM3_FIELD.label = 2
+TRIGGER_VARIABLE_CFG_PARAM3_FIELD.has_default_value = false
+TRIGGER_VARIABLE_CFG_PARAM3_FIELD.default_value = ""
+TRIGGER_VARIABLE_CFG_PARAM3_FIELD.type = 9
+TRIGGER_VARIABLE_CFG_PARAM3_FIELD.cpp_type = 9
+
+TRIGGER_VARIABLE_CFG_PARAM4_FIELD.name = "param4"
+TRIGGER_VARIABLE_CFG_PARAM4_FIELD.full_name = ".ftcfg.trigger_variable_cfg.param4"
+TRIGGER_VARIABLE_CFG_PARAM4_FIELD.number = 9
+TRIGGER_VARIABLE_CFG_PARAM4_FIELD.index = 8
+TRIGGER_VARIABLE_CFG_PARAM4_FIELD.label = 2
+TRIGGER_VARIABLE_CFG_PARAM4_FIELD.has_default_value = false
+TRIGGER_VARIABLE_CFG_PARAM4_FIELD.default_value = ""
+TRIGGER_VARIABLE_CFG_PARAM4_FIELD.type = 9
+TRIGGER_VARIABLE_CFG_PARAM4_FIELD.cpp_type = 9
+
+TRIGGER_VARIABLE_CFG_PARAM5_FIELD.name = "param5"
+TRIGGER_VARIABLE_CFG_PARAM5_FIELD.full_name = ".ftcfg.trigger_variable_cfg.param5"
+TRIGGER_VARIABLE_CFG_PARAM5_FIELD.number = 10
+TRIGGER_VARIABLE_CFG_PARAM5_FIELD.index = 9
+TRIGGER_VARIABLE_CFG_PARAM5_FIELD.label = 2
+TRIGGER_VARIABLE_CFG_PARAM5_FIELD.has_default_value = false
+TRIGGER_VARIABLE_CFG_PARAM5_FIELD.default_value = ""
+TRIGGER_VARIABLE_CFG_PARAM5_FIELD.type = 9
+TRIGGER_VARIABLE_CFG_PARAM5_FIELD.cpp_type = 9
+
+TRIGGER_VARIABLE_CFG.name = "trigger_variable_cfg"
+TRIGGER_VARIABLE_CFG.full_name = ".ftcfg.trigger_variable_cfg"
+TRIGGER_VARIABLE_CFG.nested_types = {}
+TRIGGER_VARIABLE_CFG.enum_types = {}
+TRIGGER_VARIABLE_CFG.fields = {TRIGGER_VARIABLE_CFG_NAME_FIELD, TRIGGER_VARIABLE_CFG_MAP_ID_FIELD, TRIGGER_VARIABLE_CFG_TYPE_FIELD, TRIGGER_VARIABLE_CFG_IS_VEC_FIELD, TRIGGER_VARIABLE_CFG_VEC_SIZE_FIELD, TRIGGER_VARIABLE_CFG_PARAM1_FIELD, TRIGGER_VARIABLE_CFG_PARAM2_FIELD, TRIGGER_VARIABLE_CFG_PARAM3_FIELD, TRIGGER_VARIABLE_CFG_PARAM4_FIELD, TRIGGER_VARIABLE_CFG_PARAM5_FIELD}
+TRIGGER_VARIABLE_CFG.is_extendable = false
+TRIGGER_VARIABLE_CFG.extensions = {}
+TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.name = "items"
+TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.trigger_variable_cfgs.items"
+TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.number = 1
+TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.index = 0
+TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.label = 3
+TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.has_default_value = false
+TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.default_value = {}
+TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.message_type = TRIGGER_VARIABLE_CFG
+TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.type = 11
+TRIGGER_VARIABLE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TRIGGER_VARIABLE_CFGS.name = "trigger_variable_cfgs"
+TRIGGER_VARIABLE_CFGS.full_name = ".ftcfg.trigger_variable_cfgs"
+TRIGGER_VARIABLE_CFGS.nested_types = {}
+TRIGGER_VARIABLE_CFGS.enum_types = {}
+TRIGGER_VARIABLE_CFGS.fields = {TRIGGER_VARIABLE_CFGS_ITEMS_FIELD}
+TRIGGER_VARIABLE_CFGS.is_extendable = false
+TRIGGER_VARIABLE_CFGS.extensions = {}
+SCENE_DOOR_CFG_ID_FIELD.name = "id"
+SCENE_DOOR_CFG_ID_FIELD.full_name = ".ftcfg.scene_door_cfg.id"
+SCENE_DOOR_CFG_ID_FIELD.number = 1
+SCENE_DOOR_CFG_ID_FIELD.index = 0
+SCENE_DOOR_CFG_ID_FIELD.label = 2
+SCENE_DOOR_CFG_ID_FIELD.has_default_value = false
+SCENE_DOOR_CFG_ID_FIELD.default_value = 0
+SCENE_DOOR_CFG_ID_FIELD.type = 5
+SCENE_DOOR_CFG_ID_FIELD.cpp_type = 1
+
+SCENE_DOOR_CFG_MAP_ID_FIELD.name = "map_id"
+SCENE_DOOR_CFG_MAP_ID_FIELD.full_name = ".ftcfg.scene_door_cfg.map_id"
+SCENE_DOOR_CFG_MAP_ID_FIELD.number = 2
+SCENE_DOOR_CFG_MAP_ID_FIELD.index = 1
+SCENE_DOOR_CFG_MAP_ID_FIELD.label = 2
+SCENE_DOOR_CFG_MAP_ID_FIELD.has_default_value = false
+SCENE_DOOR_CFG_MAP_ID_FIELD.default_value = 0
+SCENE_DOOR_CFG_MAP_ID_FIELD.type = 5
+SCENE_DOOR_CFG_MAP_ID_FIELD.cpp_type = 1
+
+SCENE_DOOR_CFG_POS_X_FIELD.name = "pos_x"
+SCENE_DOOR_CFG_POS_X_FIELD.full_name = ".ftcfg.scene_door_cfg.pos_x"
+SCENE_DOOR_CFG_POS_X_FIELD.number = 3
+SCENE_DOOR_CFG_POS_X_FIELD.index = 2
+SCENE_DOOR_CFG_POS_X_FIELD.label = 2
+SCENE_DOOR_CFG_POS_X_FIELD.has_default_value = false
+SCENE_DOOR_CFG_POS_X_FIELD.default_value = 0.0
+SCENE_DOOR_CFG_POS_X_FIELD.type = 2
+SCENE_DOOR_CFG_POS_X_FIELD.cpp_type = 6
+
+SCENE_DOOR_CFG_POS_Y_FIELD.name = "pos_y"
+SCENE_DOOR_CFG_POS_Y_FIELD.full_name = ".ftcfg.scene_door_cfg.pos_y"
+SCENE_DOOR_CFG_POS_Y_FIELD.number = 4
+SCENE_DOOR_CFG_POS_Y_FIELD.index = 3
+SCENE_DOOR_CFG_POS_Y_FIELD.label = 2
+SCENE_DOOR_CFG_POS_Y_FIELD.has_default_value = false
+SCENE_DOOR_CFG_POS_Y_FIELD.default_value = 0.0
+SCENE_DOOR_CFG_POS_Y_FIELD.type = 2
+SCENE_DOOR_CFG_POS_Y_FIELD.cpp_type = 6
+
+SCENE_DOOR_CFG_POS_Z_FIELD.name = "pos_z"
+SCENE_DOOR_CFG_POS_Z_FIELD.full_name = ".ftcfg.scene_door_cfg.pos_z"
+SCENE_DOOR_CFG_POS_Z_FIELD.number = 5
+SCENE_DOOR_CFG_POS_Z_FIELD.index = 4
+SCENE_DOOR_CFG_POS_Z_FIELD.label = 2
+SCENE_DOOR_CFG_POS_Z_FIELD.has_default_value = false
+SCENE_DOOR_CFG_POS_Z_FIELD.default_value = 0.0
+SCENE_DOOR_CFG_POS_Z_FIELD.type = 2
+SCENE_DOOR_CFG_POS_Z_FIELD.cpp_type = 6
+
+SCENE_DOOR_CFG_WIDTH_FIELD.name = "width"
+SCENE_DOOR_CFG_WIDTH_FIELD.full_name = ".ftcfg.scene_door_cfg.width"
+SCENE_DOOR_CFG_WIDTH_FIELD.number = 6
+SCENE_DOOR_CFG_WIDTH_FIELD.index = 5
+SCENE_DOOR_CFG_WIDTH_FIELD.label = 2
+SCENE_DOOR_CFG_WIDTH_FIELD.has_default_value = false
+SCENE_DOOR_CFG_WIDTH_FIELD.default_value = 0.0
+SCENE_DOOR_CFG_WIDTH_FIELD.type = 2
+SCENE_DOOR_CFG_WIDTH_FIELD.cpp_type = 6
+
+SCENE_DOOR_CFG_ORIENTATION_FIELD.name = "orientation"
+SCENE_DOOR_CFG_ORIENTATION_FIELD.full_name = ".ftcfg.scene_door_cfg.orientation"
+SCENE_DOOR_CFG_ORIENTATION_FIELD.number = 7
+SCENE_DOOR_CFG_ORIENTATION_FIELD.index = 6
+SCENE_DOOR_CFG_ORIENTATION_FIELD.label = 2
+SCENE_DOOR_CFG_ORIENTATION_FIELD.has_default_value = false
+SCENE_DOOR_CFG_ORIENTATION_FIELD.default_value = 0.0
+SCENE_DOOR_CFG_ORIENTATION_FIELD.type = 2
+SCENE_DOOR_CFG_ORIENTATION_FIELD.cpp_type = 6
+
+SCENE_DOOR_CFG_OPENED_FIELD.name = "opened"
+SCENE_DOOR_CFG_OPENED_FIELD.full_name = ".ftcfg.scene_door_cfg.opened"
+SCENE_DOOR_CFG_OPENED_FIELD.number = 8
+SCENE_DOOR_CFG_OPENED_FIELD.index = 7
+SCENE_DOOR_CFG_OPENED_FIELD.label = 2
+SCENE_DOOR_CFG_OPENED_FIELD.has_default_value = false
+SCENE_DOOR_CFG_OPENED_FIELD.default_value = 0
+SCENE_DOOR_CFG_OPENED_FIELD.type = 5
+SCENE_DOOR_CFG_OPENED_FIELD.cpp_type = 1
+
+SCENE_DOOR_CFG_RESID_FIELD.name = "resid"
+SCENE_DOOR_CFG_RESID_FIELD.full_name = ".ftcfg.scene_door_cfg.resid"
+SCENE_DOOR_CFG_RESID_FIELD.number = 9
+SCENE_DOOR_CFG_RESID_FIELD.index = 8
+SCENE_DOOR_CFG_RESID_FIELD.label = 2
+SCENE_DOOR_CFG_RESID_FIELD.has_default_value = false
+SCENE_DOOR_CFG_RESID_FIELD.default_value = 0
+SCENE_DOOR_CFG_RESID_FIELD.type = 5
+SCENE_DOOR_CFG_RESID_FIELD.cpp_type = 1
+
+SCENE_DOOR_CFG.name = "scene_door_cfg"
+SCENE_DOOR_CFG.full_name = ".ftcfg.scene_door_cfg"
+SCENE_DOOR_CFG.nested_types = {}
+SCENE_DOOR_CFG.enum_types = {}
+SCENE_DOOR_CFG.fields = {SCENE_DOOR_CFG_ID_FIELD, SCENE_DOOR_CFG_MAP_ID_FIELD, SCENE_DOOR_CFG_POS_X_FIELD, SCENE_DOOR_CFG_POS_Y_FIELD, SCENE_DOOR_CFG_POS_Z_FIELD, SCENE_DOOR_CFG_WIDTH_FIELD, SCENE_DOOR_CFG_ORIENTATION_FIELD, SCENE_DOOR_CFG_OPENED_FIELD, SCENE_DOOR_CFG_RESID_FIELD}
+SCENE_DOOR_CFG.is_extendable = false
+SCENE_DOOR_CFG.extensions = {}
+SCENE_DOOR_CFGS_ITEMS_FIELD.name = "items"
+SCENE_DOOR_CFGS_ITEMS_FIELD.full_name = ".ftcfg.scene_door_cfgs.items"
+SCENE_DOOR_CFGS_ITEMS_FIELD.number = 1
+SCENE_DOOR_CFGS_ITEMS_FIELD.index = 0
+SCENE_DOOR_CFGS_ITEMS_FIELD.label = 3
+SCENE_DOOR_CFGS_ITEMS_FIELD.has_default_value = false
+SCENE_DOOR_CFGS_ITEMS_FIELD.default_value = {}
+SCENE_DOOR_CFGS_ITEMS_FIELD.message_type = SCENE_DOOR_CFG
+SCENE_DOOR_CFGS_ITEMS_FIELD.type = 11
+SCENE_DOOR_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SCENE_DOOR_CFGS.name = "scene_door_cfgs"
+SCENE_DOOR_CFGS.full_name = ".ftcfg.scene_door_cfgs"
+SCENE_DOOR_CFGS.nested_types = {}
+SCENE_DOOR_CFGS.enum_types = {}
+SCENE_DOOR_CFGS.fields = {SCENE_DOOR_CFGS_ITEMS_FIELD}
+SCENE_DOOR_CFGS.is_extendable = false
+SCENE_DOOR_CFGS.extensions = {}
+REVIVE_SHOW_CFG_ID_FIELD.name = "id"
+REVIVE_SHOW_CFG_ID_FIELD.full_name = ".ftcfg.revive_show_cfg.id"
+REVIVE_SHOW_CFG_ID_FIELD.number = 1
+REVIVE_SHOW_CFG_ID_FIELD.index = 0
+REVIVE_SHOW_CFG_ID_FIELD.label = 2
+REVIVE_SHOW_CFG_ID_FIELD.has_default_value = false
+REVIVE_SHOW_CFG_ID_FIELD.default_value = 0
+REVIVE_SHOW_CFG_ID_FIELD.type = 5
+REVIVE_SHOW_CFG_ID_FIELD.cpp_type = 1
+
+REVIVE_SHOW_CFG_INDEX_FIELD.name = "index"
+REVIVE_SHOW_CFG_INDEX_FIELD.full_name = ".ftcfg.revive_show_cfg.index"
+REVIVE_SHOW_CFG_INDEX_FIELD.number = 2
+REVIVE_SHOW_CFG_INDEX_FIELD.index = 1
+REVIVE_SHOW_CFG_INDEX_FIELD.label = 2
+REVIVE_SHOW_CFG_INDEX_FIELD.has_default_value = false
+REVIVE_SHOW_CFG_INDEX_FIELD.default_value = 0
+REVIVE_SHOW_CFG_INDEX_FIELD.type = 5
+REVIVE_SHOW_CFG_INDEX_FIELD.cpp_type = 1
+
+REVIVE_SHOW_CFG_NAME_FIELD.name = "name"
+REVIVE_SHOW_CFG_NAME_FIELD.full_name = ".ftcfg.revive_show_cfg.name"
+REVIVE_SHOW_CFG_NAME_FIELD.number = 3
+REVIVE_SHOW_CFG_NAME_FIELD.index = 2
+REVIVE_SHOW_CFG_NAME_FIELD.label = 2
+REVIVE_SHOW_CFG_NAME_FIELD.has_default_value = false
+REVIVE_SHOW_CFG_NAME_FIELD.default_value = 0
+REVIVE_SHOW_CFG_NAME_FIELD.type = 5
+REVIVE_SHOW_CFG_NAME_FIELD.cpp_type = 1
+
+REVIVE_SHOW_CFG.name = "revive_show_cfg"
+REVIVE_SHOW_CFG.full_name = ".ftcfg.revive_show_cfg"
+REVIVE_SHOW_CFG.nested_types = {}
+REVIVE_SHOW_CFG.enum_types = {}
+REVIVE_SHOW_CFG.fields = {REVIVE_SHOW_CFG_ID_FIELD, REVIVE_SHOW_CFG_INDEX_FIELD, REVIVE_SHOW_CFG_NAME_FIELD}
+REVIVE_SHOW_CFG.is_extendable = false
+REVIVE_SHOW_CFG.extensions = {}
+REVIVE_SHOW_CFGS_ITEMS_FIELD.name = "items"
+REVIVE_SHOW_CFGS_ITEMS_FIELD.full_name = ".ftcfg.revive_show_cfgs.items"
+REVIVE_SHOW_CFGS_ITEMS_FIELD.number = 1
+REVIVE_SHOW_CFGS_ITEMS_FIELD.index = 0
+REVIVE_SHOW_CFGS_ITEMS_FIELD.label = 3
+REVIVE_SHOW_CFGS_ITEMS_FIELD.has_default_value = false
+REVIVE_SHOW_CFGS_ITEMS_FIELD.default_value = {}
+REVIVE_SHOW_CFGS_ITEMS_FIELD.message_type = REVIVE_SHOW_CFG
+REVIVE_SHOW_CFGS_ITEMS_FIELD.type = 11
+REVIVE_SHOW_CFGS_ITEMS_FIELD.cpp_type = 10
+
+REVIVE_SHOW_CFGS.name = "revive_show_cfgs"
+REVIVE_SHOW_CFGS.full_name = ".ftcfg.revive_show_cfgs"
+REVIVE_SHOW_CFGS.nested_types = {}
+REVIVE_SHOW_CFGS.enum_types = {}
+REVIVE_SHOW_CFGS.fields = {REVIVE_SHOW_CFGS_ITEMS_FIELD}
+REVIVE_SHOW_CFGS.is_extendable = false
+REVIVE_SHOW_CFGS.extensions = {}
+FASHION_APPRECIATION_CFG_LEVEL_FIELD.name = "level"
+FASHION_APPRECIATION_CFG_LEVEL_FIELD.full_name = ".ftcfg.fashion_appreciation_cfg.level"
+FASHION_APPRECIATION_CFG_LEVEL_FIELD.number = 1
+FASHION_APPRECIATION_CFG_LEVEL_FIELD.index = 0
+FASHION_APPRECIATION_CFG_LEVEL_FIELD.label = 2
+FASHION_APPRECIATION_CFG_LEVEL_FIELD.has_default_value = false
+FASHION_APPRECIATION_CFG_LEVEL_FIELD.default_value = 0
+FASHION_APPRECIATION_CFG_LEVEL_FIELD.type = 13
+FASHION_APPRECIATION_CFG_LEVEL_FIELD.cpp_type = 3
+
+FASHION_APPRECIATION_CFG_NEXT_LEVEL_FIELD.name = "next_level"
+FASHION_APPRECIATION_CFG_NEXT_LEVEL_FIELD.full_name = ".ftcfg.fashion_appreciation_cfg.next_level"
+FASHION_APPRECIATION_CFG_NEXT_LEVEL_FIELD.number = 2
+FASHION_APPRECIATION_CFG_NEXT_LEVEL_FIELD.index = 1
+FASHION_APPRECIATION_CFG_NEXT_LEVEL_FIELD.label = 2
+FASHION_APPRECIATION_CFG_NEXT_LEVEL_FIELD.has_default_value = false
+FASHION_APPRECIATION_CFG_NEXT_LEVEL_FIELD.default_value = 0
+FASHION_APPRECIATION_CFG_NEXT_LEVEL_FIELD.type = 13
+FASHION_APPRECIATION_CFG_NEXT_LEVEL_FIELD.cpp_type = 3
+
+FASHION_APPRECIATION_CFG_NEED_POINT_FIELD.name = "need_point"
+FASHION_APPRECIATION_CFG_NEED_POINT_FIELD.full_name = ".ftcfg.fashion_appreciation_cfg.need_point"
+FASHION_APPRECIATION_CFG_NEED_POINT_FIELD.number = 3
+FASHION_APPRECIATION_CFG_NEED_POINT_FIELD.index = 2
+FASHION_APPRECIATION_CFG_NEED_POINT_FIELD.label = 2
+FASHION_APPRECIATION_CFG_NEED_POINT_FIELD.has_default_value = false
+FASHION_APPRECIATION_CFG_NEED_POINT_FIELD.default_value = 0
+FASHION_APPRECIATION_CFG_NEED_POINT_FIELD.type = 13
+FASHION_APPRECIATION_CFG_NEED_POINT_FIELD.cpp_type = 3
+
+FASHION_APPRECIATION_CFG_COST_ITEM_ID_FIELD.name = "cost_item_id"
+FASHION_APPRECIATION_CFG_COST_ITEM_ID_FIELD.full_name = ".ftcfg.fashion_appreciation_cfg.cost_item_id"
+FASHION_APPRECIATION_CFG_COST_ITEM_ID_FIELD.number = 4
+FASHION_APPRECIATION_CFG_COST_ITEM_ID_FIELD.index = 3
+FASHION_APPRECIATION_CFG_COST_ITEM_ID_FIELD.label = 3
+FASHION_APPRECIATION_CFG_COST_ITEM_ID_FIELD.has_default_value = false
+FASHION_APPRECIATION_CFG_COST_ITEM_ID_FIELD.default_value = {}
+FASHION_APPRECIATION_CFG_COST_ITEM_ID_FIELD.type = 5
+FASHION_APPRECIATION_CFG_COST_ITEM_ID_FIELD.cpp_type = 1
+
+FASHION_APPRECIATION_CFG_COST_ITEM_COUNT_FIELD.name = "cost_item_count"
+FASHION_APPRECIATION_CFG_COST_ITEM_COUNT_FIELD.full_name = ".ftcfg.fashion_appreciation_cfg.cost_item_count"
+FASHION_APPRECIATION_CFG_COST_ITEM_COUNT_FIELD.number = 5
+FASHION_APPRECIATION_CFG_COST_ITEM_COUNT_FIELD.index = 4
+FASHION_APPRECIATION_CFG_COST_ITEM_COUNT_FIELD.label = 3
+FASHION_APPRECIATION_CFG_COST_ITEM_COUNT_FIELD.has_default_value = false
+FASHION_APPRECIATION_CFG_COST_ITEM_COUNT_FIELD.default_value = {}
+FASHION_APPRECIATION_CFG_COST_ITEM_COUNT_FIELD.type = 5
+FASHION_APPRECIATION_CFG_COST_ITEM_COUNT_FIELD.cpp_type = 1
+
+FASHION_APPRECIATION_CFG_COST_COIN_TYPE_FIELD.name = "cost_coin_type"
+FASHION_APPRECIATION_CFG_COST_COIN_TYPE_FIELD.full_name = ".ftcfg.fashion_appreciation_cfg.cost_coin_type"
+FASHION_APPRECIATION_CFG_COST_COIN_TYPE_FIELD.number = 6
+FASHION_APPRECIATION_CFG_COST_COIN_TYPE_FIELD.index = 5
+FASHION_APPRECIATION_CFG_COST_COIN_TYPE_FIELD.label = 3
+FASHION_APPRECIATION_CFG_COST_COIN_TYPE_FIELD.has_default_value = false
+FASHION_APPRECIATION_CFG_COST_COIN_TYPE_FIELD.default_value = {}
+FASHION_APPRECIATION_CFG_COST_COIN_TYPE_FIELD.type = 5
+FASHION_APPRECIATION_CFG_COST_COIN_TYPE_FIELD.cpp_type = 1
+
+FASHION_APPRECIATION_CFG_COST_COIN_COUNT_FIELD.name = "cost_coin_count"
+FASHION_APPRECIATION_CFG_COST_COIN_COUNT_FIELD.full_name = ".ftcfg.fashion_appreciation_cfg.cost_coin_count"
+FASHION_APPRECIATION_CFG_COST_COIN_COUNT_FIELD.number = 7
+FASHION_APPRECIATION_CFG_COST_COIN_COUNT_FIELD.index = 6
+FASHION_APPRECIATION_CFG_COST_COIN_COUNT_FIELD.label = 3
+FASHION_APPRECIATION_CFG_COST_COIN_COUNT_FIELD.has_default_value = false
+FASHION_APPRECIATION_CFG_COST_COIN_COUNT_FIELD.default_value = {}
+FASHION_APPRECIATION_CFG_COST_COIN_COUNT_FIELD.type = 5
+FASHION_APPRECIATION_CFG_COST_COIN_COUNT_FIELD.cpp_type = 1
+
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_TYPE_FIELD.name = "reward_attribute_type"
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_TYPE_FIELD.full_name = ".ftcfg.fashion_appreciation_cfg.reward_attribute_type"
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_TYPE_FIELD.number = 8
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_TYPE_FIELD.index = 7
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_TYPE_FIELD.label = 3
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_TYPE_FIELD.has_default_value = false
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_TYPE_FIELD.default_value = {}
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_TYPE_FIELD.type = 5
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_TYPE_FIELD.cpp_type = 1
+
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.name = "reward_attribute_count"
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.full_name = ".ftcfg.fashion_appreciation_cfg.reward_attribute_count"
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.number = 9
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.index = 8
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.label = 3
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.has_default_value = false
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.default_value = {}
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.type = 5
+FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.cpp_type = 1
+
+FASHION_APPRECIATION_CFG_COMBAT_POINT_FIELD.name = "combat_point"
+FASHION_APPRECIATION_CFG_COMBAT_POINT_FIELD.full_name = ".ftcfg.fashion_appreciation_cfg.combat_point"
+FASHION_APPRECIATION_CFG_COMBAT_POINT_FIELD.number = 10
+FASHION_APPRECIATION_CFG_COMBAT_POINT_FIELD.index = 9
+FASHION_APPRECIATION_CFG_COMBAT_POINT_FIELD.label = 2
+FASHION_APPRECIATION_CFG_COMBAT_POINT_FIELD.has_default_value = false
+FASHION_APPRECIATION_CFG_COMBAT_POINT_FIELD.default_value = 0.0
+FASHION_APPRECIATION_CFG_COMBAT_POINT_FIELD.type = 2
+FASHION_APPRECIATION_CFG_COMBAT_POINT_FIELD.cpp_type = 6
+
+FASHION_APPRECIATION_CFG.name = "fashion_appreciation_cfg"
+FASHION_APPRECIATION_CFG.full_name = ".ftcfg.fashion_appreciation_cfg"
+FASHION_APPRECIATION_CFG.nested_types = {}
+FASHION_APPRECIATION_CFG.enum_types = {}
+FASHION_APPRECIATION_CFG.fields = {FASHION_APPRECIATION_CFG_LEVEL_FIELD, FASHION_APPRECIATION_CFG_NEXT_LEVEL_FIELD, FASHION_APPRECIATION_CFG_NEED_POINT_FIELD, FASHION_APPRECIATION_CFG_COST_ITEM_ID_FIELD, FASHION_APPRECIATION_CFG_COST_ITEM_COUNT_FIELD, FASHION_APPRECIATION_CFG_COST_COIN_TYPE_FIELD, FASHION_APPRECIATION_CFG_COST_COIN_COUNT_FIELD, FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_TYPE_FIELD, FASHION_APPRECIATION_CFG_REWARD_ATTRIBUTE_COUNT_FIELD, FASHION_APPRECIATION_CFG_COMBAT_POINT_FIELD}
+FASHION_APPRECIATION_CFG.is_extendable = false
+FASHION_APPRECIATION_CFG.extensions = {}
+FASHION_APPRECIATION_CFGS_ITEMS_FIELD.name = "items"
+FASHION_APPRECIATION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.fashion_appreciation_cfgs.items"
+FASHION_APPRECIATION_CFGS_ITEMS_FIELD.number = 1
+FASHION_APPRECIATION_CFGS_ITEMS_FIELD.index = 0
+FASHION_APPRECIATION_CFGS_ITEMS_FIELD.label = 3
+FASHION_APPRECIATION_CFGS_ITEMS_FIELD.has_default_value = false
+FASHION_APPRECIATION_CFGS_ITEMS_FIELD.default_value = {}
+FASHION_APPRECIATION_CFGS_ITEMS_FIELD.message_type = FASHION_APPRECIATION_CFG
+FASHION_APPRECIATION_CFGS_ITEMS_FIELD.type = 11
+FASHION_APPRECIATION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+FASHION_APPRECIATION_CFGS.name = "fashion_appreciation_cfgs"
+FASHION_APPRECIATION_CFGS.full_name = ".ftcfg.fashion_appreciation_cfgs"
+FASHION_APPRECIATION_CFGS.nested_types = {}
+FASHION_APPRECIATION_CFGS.enum_types = {}
+FASHION_APPRECIATION_CFGS.fields = {FASHION_APPRECIATION_CFGS_ITEMS_FIELD}
+FASHION_APPRECIATION_CFGS.is_extendable = false
+FASHION_APPRECIATION_CFGS.extensions = {}
+FASHION_CFG_ID_FIELD.name = "id"
+FASHION_CFG_ID_FIELD.full_name = ".ftcfg.fashion_cfg.id"
+FASHION_CFG_ID_FIELD.number = 1
+FASHION_CFG_ID_FIELD.index = 0
+FASHION_CFG_ID_FIELD.label = 2
+FASHION_CFG_ID_FIELD.has_default_value = false
+FASHION_CFG_ID_FIELD.default_value = 0
+FASHION_CFG_ID_FIELD.type = 5
+FASHION_CFG_ID_FIELD.cpp_type = 1
+
+FASHION_CFG_ID_GROUP_FIELD.name = "id_group"
+FASHION_CFG_ID_GROUP_FIELD.full_name = ".ftcfg.fashion_cfg.id_group"
+FASHION_CFG_ID_GROUP_FIELD.number = 2
+FASHION_CFG_ID_GROUP_FIELD.index = 1
+FASHION_CFG_ID_GROUP_FIELD.label = 2
+FASHION_CFG_ID_GROUP_FIELD.has_default_value = false
+FASHION_CFG_ID_GROUP_FIELD.default_value = 0
+FASHION_CFG_ID_GROUP_FIELD.type = 13
+FASHION_CFG_ID_GROUP_FIELD.cpp_type = 3
+
+FASHION_CFG_FASHION_COST_FIELD.name = "fashion_cost"
+FASHION_CFG_FASHION_COST_FIELD.full_name = ".ftcfg.fashion_cfg.fashion_cost"
+FASHION_CFG_FASHION_COST_FIELD.number = 3
+FASHION_CFG_FASHION_COST_FIELD.index = 2
+FASHION_CFG_FASHION_COST_FIELD.label = 3
+FASHION_CFG_FASHION_COST_FIELD.has_default_value = false
+FASHION_CFG_FASHION_COST_FIELD.default_value = {}
+FASHION_CFG_FASHION_COST_FIELD.type = 13
+FASHION_CFG_FASHION_COST_FIELD.cpp_type = 3
+
+FASHION_CFG_FASHION_TYPE_FIELD.name = "fashion_type"
+FASHION_CFG_FASHION_TYPE_FIELD.full_name = ".ftcfg.fashion_cfg.fashion_type"
+FASHION_CFG_FASHION_TYPE_FIELD.number = 4
+FASHION_CFG_FASHION_TYPE_FIELD.index = 3
+FASHION_CFG_FASHION_TYPE_FIELD.label = 2
+FASHION_CFG_FASHION_TYPE_FIELD.has_default_value = false
+FASHION_CFG_FASHION_TYPE_FIELD.default_value = 0
+FASHION_CFG_FASHION_TYPE_FIELD.type = 13
+FASHION_CFG_FASHION_TYPE_FIELD.cpp_type = 3
+
+FASHION_CFG_VOCATION_LIMIT_FIELD.name = "vocation_limit"
+FASHION_CFG_VOCATION_LIMIT_FIELD.full_name = ".ftcfg.fashion_cfg.vocation_limit"
+FASHION_CFG_VOCATION_LIMIT_FIELD.number = 5
+FASHION_CFG_VOCATION_LIMIT_FIELD.index = 4
+FASHION_CFG_VOCATION_LIMIT_FIELD.label = 2
+FASHION_CFG_VOCATION_LIMIT_FIELD.has_default_value = false
+FASHION_CFG_VOCATION_LIMIT_FIELD.default_value = 0
+FASHION_CFG_VOCATION_LIMIT_FIELD.type = 5
+FASHION_CFG_VOCATION_LIMIT_FIELD.cpp_type = 1
+
+FASHION_CFG_FASHION_NAME_FIELD.name = "fashion_name"
+FASHION_CFG_FASHION_NAME_FIELD.full_name = ".ftcfg.fashion_cfg.fashion_name"
+FASHION_CFG_FASHION_NAME_FIELD.number = 6
+FASHION_CFG_FASHION_NAME_FIELD.index = 5
+FASHION_CFG_FASHION_NAME_FIELD.label = 2
+FASHION_CFG_FASHION_NAME_FIELD.has_default_value = false
+FASHION_CFG_FASHION_NAME_FIELD.default_value = 0
+FASHION_CFG_FASHION_NAME_FIELD.type = 5
+FASHION_CFG_FASHION_NAME_FIELD.cpp_type = 1
+
+FASHION_CFG_FASHION_ICON_FIELD.name = "fashion_icon"
+FASHION_CFG_FASHION_ICON_FIELD.full_name = ".ftcfg.fashion_cfg.fashion_icon"
+FASHION_CFG_FASHION_ICON_FIELD.number = 7
+FASHION_CFG_FASHION_ICON_FIELD.index = 6
+FASHION_CFG_FASHION_ICON_FIELD.label = 2
+FASHION_CFG_FASHION_ICON_FIELD.has_default_value = false
+FASHION_CFG_FASHION_ICON_FIELD.default_value = 0
+FASHION_CFG_FASHION_ICON_FIELD.type = 5
+FASHION_CFG_FASHION_ICON_FIELD.cpp_type = 1
+
+FASHION_CFG_FASHION_PARTS_FIELD.name = "fashion_parts"
+FASHION_CFG_FASHION_PARTS_FIELD.full_name = ".ftcfg.fashion_cfg.fashion_parts"
+FASHION_CFG_FASHION_PARTS_FIELD.number = 8
+FASHION_CFG_FASHION_PARTS_FIELD.index = 7
+FASHION_CFG_FASHION_PARTS_FIELD.label = 3
+FASHION_CFG_FASHION_PARTS_FIELD.has_default_value = false
+FASHION_CFG_FASHION_PARTS_FIELD.default_value = {}
+FASHION_CFG_FASHION_PARTS_FIELD.type = 5
+FASHION_CFG_FASHION_PARTS_FIELD.cpp_type = 1
+
+FASHION_CFG_FASHION_COLOUR_FIELD.name = "fashion_colour"
+FASHION_CFG_FASHION_COLOUR_FIELD.full_name = ".ftcfg.fashion_cfg.fashion_colour"
+FASHION_CFG_FASHION_COLOUR_FIELD.number = 9
+FASHION_CFG_FASHION_COLOUR_FIELD.index = 8
+FASHION_CFG_FASHION_COLOUR_FIELD.label = 2
+FASHION_CFG_FASHION_COLOUR_FIELD.has_default_value = false
+FASHION_CFG_FASHION_COLOUR_FIELD.default_value = 0
+FASHION_CFG_FASHION_COLOUR_FIELD.type = 5
+FASHION_CFG_FASHION_COLOUR_FIELD.cpp_type = 1
+
+FASHION_CFG_FASHION_TIPS_FIELD.name = "fashion_tips"
+FASHION_CFG_FASHION_TIPS_FIELD.full_name = ".ftcfg.fashion_cfg.fashion_tips"
+FASHION_CFG_FASHION_TIPS_FIELD.number = 10
+FASHION_CFG_FASHION_TIPS_FIELD.index = 9
+FASHION_CFG_FASHION_TIPS_FIELD.label = 2
+FASHION_CFG_FASHION_TIPS_FIELD.has_default_value = false
+FASHION_CFG_FASHION_TIPS_FIELD.default_value = 0
+FASHION_CFG_FASHION_TIPS_FIELD.type = 5
+FASHION_CFG_FASHION_TIPS_FIELD.cpp_type = 1
+
+FASHION_CFG_ATTRIBUTE_TYPE_FIELD.name = "attribute_type"
+FASHION_CFG_ATTRIBUTE_TYPE_FIELD.full_name = ".ftcfg.fashion_cfg.attribute_type"
+FASHION_CFG_ATTRIBUTE_TYPE_FIELD.number = 11
+FASHION_CFG_ATTRIBUTE_TYPE_FIELD.index = 10
+FASHION_CFG_ATTRIBUTE_TYPE_FIELD.label = 3
+FASHION_CFG_ATTRIBUTE_TYPE_FIELD.has_default_value = false
+FASHION_CFG_ATTRIBUTE_TYPE_FIELD.default_value = {}
+FASHION_CFG_ATTRIBUTE_TYPE_FIELD.type = 5
+FASHION_CFG_ATTRIBUTE_TYPE_FIELD.cpp_type = 1
+
+FASHION_CFG_ATTRIBUTE_MODE_FIELD.name = "attribute_mode"
+FASHION_CFG_ATTRIBUTE_MODE_FIELD.full_name = ".ftcfg.fashion_cfg.attribute_mode"
+FASHION_CFG_ATTRIBUTE_MODE_FIELD.number = 12
+FASHION_CFG_ATTRIBUTE_MODE_FIELD.index = 11
+FASHION_CFG_ATTRIBUTE_MODE_FIELD.label = 3
+FASHION_CFG_ATTRIBUTE_MODE_FIELD.has_default_value = false
+FASHION_CFG_ATTRIBUTE_MODE_FIELD.default_value = {}
+FASHION_CFG_ATTRIBUTE_MODE_FIELD.type = 5
+FASHION_CFG_ATTRIBUTE_MODE_FIELD.cpp_type = 1
+
+FASHION_CFG_ATTRIBUTE_COUNT_FIELD.name = "attribute_count"
+FASHION_CFG_ATTRIBUTE_COUNT_FIELD.full_name = ".ftcfg.fashion_cfg.attribute_count"
+FASHION_CFG_ATTRIBUTE_COUNT_FIELD.number = 13
+FASHION_CFG_ATTRIBUTE_COUNT_FIELD.index = 12
+FASHION_CFG_ATTRIBUTE_COUNT_FIELD.label = 3
+FASHION_CFG_ATTRIBUTE_COUNT_FIELD.has_default_value = false
+FASHION_CFG_ATTRIBUTE_COUNT_FIELD.default_value = {}
+FASHION_CFG_ATTRIBUTE_COUNT_FIELD.type = 2
+FASHION_CFG_ATTRIBUTE_COUNT_FIELD.cpp_type = 6
+
+FASHION_CFG.name = "fashion_cfg"
+FASHION_CFG.full_name = ".ftcfg.fashion_cfg"
+FASHION_CFG.nested_types = {}
+FASHION_CFG.enum_types = {}
+FASHION_CFG.fields = {FASHION_CFG_ID_FIELD, FASHION_CFG_ID_GROUP_FIELD, FASHION_CFG_FASHION_COST_FIELD, FASHION_CFG_FASHION_TYPE_FIELD, FASHION_CFG_VOCATION_LIMIT_FIELD, FASHION_CFG_FASHION_NAME_FIELD, FASHION_CFG_FASHION_ICON_FIELD, FASHION_CFG_FASHION_PARTS_FIELD, FASHION_CFG_FASHION_COLOUR_FIELD, FASHION_CFG_FASHION_TIPS_FIELD, FASHION_CFG_ATTRIBUTE_TYPE_FIELD, FASHION_CFG_ATTRIBUTE_MODE_FIELD, FASHION_CFG_ATTRIBUTE_COUNT_FIELD}
+FASHION_CFG.is_extendable = false
+FASHION_CFG.extensions = {}
+FASHION_CFGS_ITEMS_FIELD.name = "items"
+FASHION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.fashion_cfgs.items"
+FASHION_CFGS_ITEMS_FIELD.number = 1
+FASHION_CFGS_ITEMS_FIELD.index = 0
+FASHION_CFGS_ITEMS_FIELD.label = 3
+FASHION_CFGS_ITEMS_FIELD.has_default_value = false
+FASHION_CFGS_ITEMS_FIELD.default_value = {}
+FASHION_CFGS_ITEMS_FIELD.message_type = FASHION_CFG
+FASHION_CFGS_ITEMS_FIELD.type = 11
+FASHION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+FASHION_CFGS.name = "fashion_cfgs"
+FASHION_CFGS.full_name = ".ftcfg.fashion_cfgs"
+FASHION_CFGS.nested_types = {}
+FASHION_CFGS.enum_types = {}
+FASHION_CFGS.fields = {FASHION_CFGS_ITEMS_FIELD}
+FASHION_CFGS.is_extendable = false
+FASHION_CFGS.extensions = {}
+FASHION_COST_CFG_ID_FIELD.name = "id"
+FASHION_COST_CFG_ID_FIELD.full_name = ".ftcfg.fashion_cost_cfg.id"
+FASHION_COST_CFG_ID_FIELD.number = 1
+FASHION_COST_CFG_ID_FIELD.index = 0
+FASHION_COST_CFG_ID_FIELD.label = 2
+FASHION_COST_CFG_ID_FIELD.has_default_value = false
+FASHION_COST_CFG_ID_FIELD.default_value = 0
+FASHION_COST_CFG_ID_FIELD.type = 13
+FASHION_COST_CFG_ID_FIELD.cpp_type = 3
+
+FASHION_COST_CFG_FASHION_TIME_FIELD.name = "fashion_time"
+FASHION_COST_CFG_FASHION_TIME_FIELD.full_name = ".ftcfg.fashion_cost_cfg.fashion_time"
+FASHION_COST_CFG_FASHION_TIME_FIELD.number = 2
+FASHION_COST_CFG_FASHION_TIME_FIELD.index = 1
+FASHION_COST_CFG_FASHION_TIME_FIELD.label = 2
+FASHION_COST_CFG_FASHION_TIME_FIELD.has_default_value = false
+FASHION_COST_CFG_FASHION_TIME_FIELD.default_value = 0
+FASHION_COST_CFG_FASHION_TIME_FIELD.type = 5
+FASHION_COST_CFG_FASHION_TIME_FIELD.cpp_type = 1
+
+FASHION_COST_CFG_FASHION_POINT_FIELD.name = "fashion_point"
+FASHION_COST_CFG_FASHION_POINT_FIELD.full_name = ".ftcfg.fashion_cost_cfg.fashion_point"
+FASHION_COST_CFG_FASHION_POINT_FIELD.number = 3
+FASHION_COST_CFG_FASHION_POINT_FIELD.index = 2
+FASHION_COST_CFG_FASHION_POINT_FIELD.label = 2
+FASHION_COST_CFG_FASHION_POINT_FIELD.has_default_value = false
+FASHION_COST_CFG_FASHION_POINT_FIELD.default_value = 0
+FASHION_COST_CFG_FASHION_POINT_FIELD.type = 13
+FASHION_COST_CFG_FASHION_POINT_FIELD.cpp_type = 3
+
+FASHION_COST_CFG_UNLOCK_LEVEL_FIELD.name = "unlock_level"
+FASHION_COST_CFG_UNLOCK_LEVEL_FIELD.full_name = ".ftcfg.fashion_cost_cfg.unlock_level"
+FASHION_COST_CFG_UNLOCK_LEVEL_FIELD.number = 4
+FASHION_COST_CFG_UNLOCK_LEVEL_FIELD.index = 3
+FASHION_COST_CFG_UNLOCK_LEVEL_FIELD.label = 2
+FASHION_COST_CFG_UNLOCK_LEVEL_FIELD.has_default_value = false
+FASHION_COST_CFG_UNLOCK_LEVEL_FIELD.default_value = 0
+FASHION_COST_CFG_UNLOCK_LEVEL_FIELD.type = 5
+FASHION_COST_CFG_UNLOCK_LEVEL_FIELD.cpp_type = 1
+
+FASHION_COST_CFG_UNLOCK_FRONTID_FIELD.name = "unlock_frontid"
+FASHION_COST_CFG_UNLOCK_FRONTID_FIELD.full_name = ".ftcfg.fashion_cost_cfg.unlock_frontid"
+FASHION_COST_CFG_UNLOCK_FRONTID_FIELD.number = 5
+FASHION_COST_CFG_UNLOCK_FRONTID_FIELD.index = 4
+FASHION_COST_CFG_UNLOCK_FRONTID_FIELD.label = 3
+FASHION_COST_CFG_UNLOCK_FRONTID_FIELD.has_default_value = false
+FASHION_COST_CFG_UNLOCK_FRONTID_FIELD.default_value = {}
+FASHION_COST_CFG_UNLOCK_FRONTID_FIELD.type = 5
+FASHION_COST_CFG_UNLOCK_FRONTID_FIELD.cpp_type = 1
+
+FASHION_COST_CFG_UNLOCK_ITEMID_FIELD.name = "unlock_itemid"
+FASHION_COST_CFG_UNLOCK_ITEMID_FIELD.full_name = ".ftcfg.fashion_cost_cfg.unlock_itemid"
+FASHION_COST_CFG_UNLOCK_ITEMID_FIELD.number = 6
+FASHION_COST_CFG_UNLOCK_ITEMID_FIELD.index = 5
+FASHION_COST_CFG_UNLOCK_ITEMID_FIELD.label = 3
+FASHION_COST_CFG_UNLOCK_ITEMID_FIELD.has_default_value = false
+FASHION_COST_CFG_UNLOCK_ITEMID_FIELD.default_value = {}
+FASHION_COST_CFG_UNLOCK_ITEMID_FIELD.type = 5
+FASHION_COST_CFG_UNLOCK_ITEMID_FIELD.cpp_type = 1
+
+FASHION_COST_CFG_UNLOCK_ITEMCOUNT_FIELD.name = "unlock_itemcount"
+FASHION_COST_CFG_UNLOCK_ITEMCOUNT_FIELD.full_name = ".ftcfg.fashion_cost_cfg.unlock_itemcount"
+FASHION_COST_CFG_UNLOCK_ITEMCOUNT_FIELD.number = 7
+FASHION_COST_CFG_UNLOCK_ITEMCOUNT_FIELD.index = 6
+FASHION_COST_CFG_UNLOCK_ITEMCOUNT_FIELD.label = 3
+FASHION_COST_CFG_UNLOCK_ITEMCOUNT_FIELD.has_default_value = false
+FASHION_COST_CFG_UNLOCK_ITEMCOUNT_FIELD.default_value = {}
+FASHION_COST_CFG_UNLOCK_ITEMCOUNT_FIELD.type = 5
+FASHION_COST_CFG_UNLOCK_ITEMCOUNT_FIELD.cpp_type = 1
+
+FASHION_COST_CFG_UNLOCK_COINTYPE_FIELD.name = "unlock_cointype"
+FASHION_COST_CFG_UNLOCK_COINTYPE_FIELD.full_name = ".ftcfg.fashion_cost_cfg.unlock_cointype"
+FASHION_COST_CFG_UNLOCK_COINTYPE_FIELD.number = 8
+FASHION_COST_CFG_UNLOCK_COINTYPE_FIELD.index = 7
+FASHION_COST_CFG_UNLOCK_COINTYPE_FIELD.label = 3
+FASHION_COST_CFG_UNLOCK_COINTYPE_FIELD.has_default_value = false
+FASHION_COST_CFG_UNLOCK_COINTYPE_FIELD.default_value = {}
+FASHION_COST_CFG_UNLOCK_COINTYPE_FIELD.type = 5
+FASHION_COST_CFG_UNLOCK_COINTYPE_FIELD.cpp_type = 1
+
+FASHION_COST_CFG_UNLOCK_COINCOUNT_FIELD.name = "unlock_coincount"
+FASHION_COST_CFG_UNLOCK_COINCOUNT_FIELD.full_name = ".ftcfg.fashion_cost_cfg.unlock_coincount"
+FASHION_COST_CFG_UNLOCK_COINCOUNT_FIELD.number = 9
+FASHION_COST_CFG_UNLOCK_COINCOUNT_FIELD.index = 8
+FASHION_COST_CFG_UNLOCK_COINCOUNT_FIELD.label = 3
+FASHION_COST_CFG_UNLOCK_COINCOUNT_FIELD.has_default_value = false
+FASHION_COST_CFG_UNLOCK_COINCOUNT_FIELD.default_value = {}
+FASHION_COST_CFG_UNLOCK_COINCOUNT_FIELD.type = 5
+FASHION_COST_CFG_UNLOCK_COINCOUNT_FIELD.cpp_type = 1
+
+FASHION_COST_CFG_UNLOCK_ALLINTENSIFY_FIELD.name = "unlock_allintensify"
+FASHION_COST_CFG_UNLOCK_ALLINTENSIFY_FIELD.full_name = ".ftcfg.fashion_cost_cfg.unlock_allintensify"
+FASHION_COST_CFG_UNLOCK_ALLINTENSIFY_FIELD.number = 10
+FASHION_COST_CFG_UNLOCK_ALLINTENSIFY_FIELD.index = 9
+FASHION_COST_CFG_UNLOCK_ALLINTENSIFY_FIELD.label = 2
+FASHION_COST_CFG_UNLOCK_ALLINTENSIFY_FIELD.has_default_value = false
+FASHION_COST_CFG_UNLOCK_ALLINTENSIFY_FIELD.default_value = 0
+FASHION_COST_CFG_UNLOCK_ALLINTENSIFY_FIELD.type = 5
+FASHION_COST_CFG_UNLOCK_ALLINTENSIFY_FIELD.cpp_type = 1
+
+FASHION_COST_CFG_UNLOCK_SPECIFYINTENSIFY_FIELD.name = "unlock_specifyintensify"
+FASHION_COST_CFG_UNLOCK_SPECIFYINTENSIFY_FIELD.full_name = ".ftcfg.fashion_cost_cfg.unlock_specifyintensify"
+FASHION_COST_CFG_UNLOCK_SPECIFYINTENSIFY_FIELD.number = 11
+FASHION_COST_CFG_UNLOCK_SPECIFYINTENSIFY_FIELD.index = 10
+FASHION_COST_CFG_UNLOCK_SPECIFYINTENSIFY_FIELD.label = 3
+FASHION_COST_CFG_UNLOCK_SPECIFYINTENSIFY_FIELD.has_default_value = false
+FASHION_COST_CFG_UNLOCK_SPECIFYINTENSIFY_FIELD.default_value = {}
+FASHION_COST_CFG_UNLOCK_SPECIFYINTENSIFY_FIELD.type = 5
+FASHION_COST_CFG_UNLOCK_SPECIFYINTENSIFY_FIELD.cpp_type = 1
+
+FASHION_COST_CFG_UNLOCK_GEMSTONELV_FIELD.name = "unlock_gemstonelv"
+FASHION_COST_CFG_UNLOCK_GEMSTONELV_FIELD.full_name = ".ftcfg.fashion_cost_cfg.unlock_gemstonelv"
+FASHION_COST_CFG_UNLOCK_GEMSTONELV_FIELD.number = 12
+FASHION_COST_CFG_UNLOCK_GEMSTONELV_FIELD.index = 11
+FASHION_COST_CFG_UNLOCK_GEMSTONELV_FIELD.label = 2
+FASHION_COST_CFG_UNLOCK_GEMSTONELV_FIELD.has_default_value = false
+FASHION_COST_CFG_UNLOCK_GEMSTONELV_FIELD.default_value = 0
+FASHION_COST_CFG_UNLOCK_GEMSTONELV_FIELD.type = 5
+FASHION_COST_CFG_UNLOCK_GEMSTONELV_FIELD.cpp_type = 1
+
+FASHION_COST_CFG_UNLOCK_QUALITY_FIELD.name = "unlock_quality"
+FASHION_COST_CFG_UNLOCK_QUALITY_FIELD.full_name = ".ftcfg.fashion_cost_cfg.unlock_quality"
+FASHION_COST_CFG_UNLOCK_QUALITY_FIELD.number = 13
+FASHION_COST_CFG_UNLOCK_QUALITY_FIELD.index = 12
+FASHION_COST_CFG_UNLOCK_QUALITY_FIELD.label = 3
+FASHION_COST_CFG_UNLOCK_QUALITY_FIELD.has_default_value = false
+FASHION_COST_CFG_UNLOCK_QUALITY_FIELD.default_value = {}
+FASHION_COST_CFG_UNLOCK_QUALITY_FIELD.type = 5
+FASHION_COST_CFG_UNLOCK_QUALITY_FIELD.cpp_type = 1
+
+FASHION_COST_CFG_UNLOCK_POWER_FIELD.name = "unlock_power"
+FASHION_COST_CFG_UNLOCK_POWER_FIELD.full_name = ".ftcfg.fashion_cost_cfg.unlock_power"
+FASHION_COST_CFG_UNLOCK_POWER_FIELD.number = 14
+FASHION_COST_CFG_UNLOCK_POWER_FIELD.index = 13
+FASHION_COST_CFG_UNLOCK_POWER_FIELD.label = 2
+FASHION_COST_CFG_UNLOCK_POWER_FIELD.has_default_value = false
+FASHION_COST_CFG_UNLOCK_POWER_FIELD.default_value = 0
+FASHION_COST_CFG_UNLOCK_POWER_FIELD.type = 5
+FASHION_COST_CFG_UNLOCK_POWER_FIELD.cpp_type = 1
+
+FASHION_COST_CFG.name = "fashion_cost_cfg"
+FASHION_COST_CFG.full_name = ".ftcfg.fashion_cost_cfg"
+FASHION_COST_CFG.nested_types = {}
+FASHION_COST_CFG.enum_types = {}
+FASHION_COST_CFG.fields = {FASHION_COST_CFG_ID_FIELD, FASHION_COST_CFG_FASHION_TIME_FIELD, FASHION_COST_CFG_FASHION_POINT_FIELD, FASHION_COST_CFG_UNLOCK_LEVEL_FIELD, FASHION_COST_CFG_UNLOCK_FRONTID_FIELD, FASHION_COST_CFG_UNLOCK_ITEMID_FIELD, FASHION_COST_CFG_UNLOCK_ITEMCOUNT_FIELD, FASHION_COST_CFG_UNLOCK_COINTYPE_FIELD, FASHION_COST_CFG_UNLOCK_COINCOUNT_FIELD, FASHION_COST_CFG_UNLOCK_ALLINTENSIFY_FIELD, FASHION_COST_CFG_UNLOCK_SPECIFYINTENSIFY_FIELD, FASHION_COST_CFG_UNLOCK_GEMSTONELV_FIELD, FASHION_COST_CFG_UNLOCK_QUALITY_FIELD, FASHION_COST_CFG_UNLOCK_POWER_FIELD}
+FASHION_COST_CFG.is_extendable = false
+FASHION_COST_CFG.extensions = {}
+FASHION_COST_CFGS_ITEMS_FIELD.name = "items"
+FASHION_COST_CFGS_ITEMS_FIELD.full_name = ".ftcfg.fashion_cost_cfgs.items"
+FASHION_COST_CFGS_ITEMS_FIELD.number = 1
+FASHION_COST_CFGS_ITEMS_FIELD.index = 0
+FASHION_COST_CFGS_ITEMS_FIELD.label = 3
+FASHION_COST_CFGS_ITEMS_FIELD.has_default_value = false
+FASHION_COST_CFGS_ITEMS_FIELD.default_value = {}
+FASHION_COST_CFGS_ITEMS_FIELD.message_type = FASHION_COST_CFG
+FASHION_COST_CFGS_ITEMS_FIELD.type = 11
+FASHION_COST_CFGS_ITEMS_FIELD.cpp_type = 10
+
+FASHION_COST_CFGS.name = "fashion_cost_cfgs"
+FASHION_COST_CFGS.full_name = ".ftcfg.fashion_cost_cfgs"
+FASHION_COST_CFGS.nested_types = {}
+FASHION_COST_CFGS.enum_types = {}
+FASHION_COST_CFGS.fields = {FASHION_COST_CFGS_ITEMS_FIELD}
+FASHION_COST_CFGS.is_extendable = false
+FASHION_COST_CFGS.extensions = {}
+MOUNTEQUIP_CFG_ID_FIELD.name = "id"
+MOUNTEQUIP_CFG_ID_FIELD.full_name = ".ftcfg.mountequip_cfg.id"
+MOUNTEQUIP_CFG_ID_FIELD.number = 1
+MOUNTEQUIP_CFG_ID_FIELD.index = 0
+MOUNTEQUIP_CFG_ID_FIELD.label = 2
+MOUNTEQUIP_CFG_ID_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_ID_FIELD.default_value = 0
+MOUNTEQUIP_CFG_ID_FIELD.type = 13
+MOUNTEQUIP_CFG_ID_FIELD.cpp_type = 3
+
+MOUNTEQUIP_CFG_ITEM_NAME_FIELD.name = "item_name"
+MOUNTEQUIP_CFG_ITEM_NAME_FIELD.full_name = ".ftcfg.mountequip_cfg.item_name"
+MOUNTEQUIP_CFG_ITEM_NAME_FIELD.number = 2
+MOUNTEQUIP_CFG_ITEM_NAME_FIELD.index = 1
+MOUNTEQUIP_CFG_ITEM_NAME_FIELD.label = 2
+MOUNTEQUIP_CFG_ITEM_NAME_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_ITEM_NAME_FIELD.default_value = 0
+MOUNTEQUIP_CFG_ITEM_NAME_FIELD.type = 5
+MOUNTEQUIP_CFG_ITEM_NAME_FIELD.cpp_type = 1
+
+MOUNTEQUIP_CFG_ITEM_DESC_FIELD.name = "item_desc"
+MOUNTEQUIP_CFG_ITEM_DESC_FIELD.full_name = ".ftcfg.mountequip_cfg.item_desc"
+MOUNTEQUIP_CFG_ITEM_DESC_FIELD.number = 3
+MOUNTEQUIP_CFG_ITEM_DESC_FIELD.index = 2
+MOUNTEQUIP_CFG_ITEM_DESC_FIELD.label = 2
+MOUNTEQUIP_CFG_ITEM_DESC_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_ITEM_DESC_FIELD.default_value = 0
+MOUNTEQUIP_CFG_ITEM_DESC_FIELD.type = 5
+MOUNTEQUIP_CFG_ITEM_DESC_FIELD.cpp_type = 1
+
+MOUNTEQUIP_CFG_NEED_LEVEL_FIELD.name = "need_level"
+MOUNTEQUIP_CFG_NEED_LEVEL_FIELD.full_name = ".ftcfg.mountequip_cfg.need_level"
+MOUNTEQUIP_CFG_NEED_LEVEL_FIELD.number = 4
+MOUNTEQUIP_CFG_NEED_LEVEL_FIELD.index = 3
+MOUNTEQUIP_CFG_NEED_LEVEL_FIELD.label = 2
+MOUNTEQUIP_CFG_NEED_LEVEL_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_NEED_LEVEL_FIELD.default_value = 0
+MOUNTEQUIP_CFG_NEED_LEVEL_FIELD.type = 5
+MOUNTEQUIP_CFG_NEED_LEVEL_FIELD.cpp_type = 1
+
+MOUNTEQUIP_CFG_EQUIP_PLACE_FIELD.name = "equip_place"
+MOUNTEQUIP_CFG_EQUIP_PLACE_FIELD.full_name = ".ftcfg.mountequip_cfg.equip_place"
+MOUNTEQUIP_CFG_EQUIP_PLACE_FIELD.number = 5
+MOUNTEQUIP_CFG_EQUIP_PLACE_FIELD.index = 4
+MOUNTEQUIP_CFG_EQUIP_PLACE_FIELD.label = 2
+MOUNTEQUIP_CFG_EQUIP_PLACE_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_EQUIP_PLACE_FIELD.default_value = 0
+MOUNTEQUIP_CFG_EQUIP_PLACE_FIELD.type = 5
+MOUNTEQUIP_CFG_EQUIP_PLACE_FIELD.cpp_type = 1
+
+MOUNTEQUIP_CFG_DISPLAY_TYPE_FIELD.name = "display_type"
+MOUNTEQUIP_CFG_DISPLAY_TYPE_FIELD.full_name = ".ftcfg.mountequip_cfg.display_type"
+MOUNTEQUIP_CFG_DISPLAY_TYPE_FIELD.number = 6
+MOUNTEQUIP_CFG_DISPLAY_TYPE_FIELD.index = 5
+MOUNTEQUIP_CFG_DISPLAY_TYPE_FIELD.label = 2
+MOUNTEQUIP_CFG_DISPLAY_TYPE_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_DISPLAY_TYPE_FIELD.default_value = 0
+MOUNTEQUIP_CFG_DISPLAY_TYPE_FIELD.type = 5
+MOUNTEQUIP_CFG_DISPLAY_TYPE_FIELD.cpp_type = 1
+
+MOUNTEQUIP_CFG_ITEM_COLOR_FIELD.name = "item_color"
+MOUNTEQUIP_CFG_ITEM_COLOR_FIELD.full_name = ".ftcfg.mountequip_cfg.item_color"
+MOUNTEQUIP_CFG_ITEM_COLOR_FIELD.number = 7
+MOUNTEQUIP_CFG_ITEM_COLOR_FIELD.index = 6
+MOUNTEQUIP_CFG_ITEM_COLOR_FIELD.label = 2
+MOUNTEQUIP_CFG_ITEM_COLOR_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_ITEM_COLOR_FIELD.default_value = nil
+MOUNTEQUIP_CFG_ITEM_COLOR_FIELD.enum_type = config_predefine_pb.EITEMCOLOR
+MOUNTEQUIP_CFG_ITEM_COLOR_FIELD.type = 14
+MOUNTEQUIP_CFG_ITEM_COLOR_FIELD.cpp_type = 8
+
+MOUNTEQUIP_CFG_ITEM_ICON_FIELD.name = "item_icon"
+MOUNTEQUIP_CFG_ITEM_ICON_FIELD.full_name = ".ftcfg.mountequip_cfg.item_icon"
+MOUNTEQUIP_CFG_ITEM_ICON_FIELD.number = 8
+MOUNTEQUIP_CFG_ITEM_ICON_FIELD.index = 7
+MOUNTEQUIP_CFG_ITEM_ICON_FIELD.label = 2
+MOUNTEQUIP_CFG_ITEM_ICON_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_ITEM_ICON_FIELD.default_value = 0
+MOUNTEQUIP_CFG_ITEM_ICON_FIELD.type = 5
+MOUNTEQUIP_CFG_ITEM_ICON_FIELD.cpp_type = 1
+
+MOUNTEQUIP_CFG_COULD_TRADE_FIELD.name = "could_trade"
+MOUNTEQUIP_CFG_COULD_TRADE_FIELD.full_name = ".ftcfg.mountequip_cfg.could_trade"
+MOUNTEQUIP_CFG_COULD_TRADE_FIELD.number = 9
+MOUNTEQUIP_CFG_COULD_TRADE_FIELD.index = 8
+MOUNTEQUIP_CFG_COULD_TRADE_FIELD.label = 2
+MOUNTEQUIP_CFG_COULD_TRADE_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_COULD_TRADE_FIELD.default_value = 0
+MOUNTEQUIP_CFG_COULD_TRADE_FIELD.type = 5
+MOUNTEQUIP_CFG_COULD_TRADE_FIELD.cpp_type = 1
+
+MOUNTEQUIP_CFG_EFFECT_TIMELIMITED_FIELD.name = "effect_timelimited"
+MOUNTEQUIP_CFG_EFFECT_TIMELIMITED_FIELD.full_name = ".ftcfg.mountequip_cfg.effect_timelimited"
+MOUNTEQUIP_CFG_EFFECT_TIMELIMITED_FIELD.number = 10
+MOUNTEQUIP_CFG_EFFECT_TIMELIMITED_FIELD.index = 9
+MOUNTEQUIP_CFG_EFFECT_TIMELIMITED_FIELD.label = 2
+MOUNTEQUIP_CFG_EFFECT_TIMELIMITED_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_EFFECT_TIMELIMITED_FIELD.default_value = 0
+MOUNTEQUIP_CFG_EFFECT_TIMELIMITED_FIELD.type = 5
+MOUNTEQUIP_CFG_EFFECT_TIMELIMITED_FIELD.cpp_type = 1
+
+MOUNTEQUIP_CFG_ATTRIBUTE_TYPE_FIELD.name = "attribute_type"
+MOUNTEQUIP_CFG_ATTRIBUTE_TYPE_FIELD.full_name = ".ftcfg.mountequip_cfg.attribute_type"
+MOUNTEQUIP_CFG_ATTRIBUTE_TYPE_FIELD.number = 11
+MOUNTEQUIP_CFG_ATTRIBUTE_TYPE_FIELD.index = 10
+MOUNTEQUIP_CFG_ATTRIBUTE_TYPE_FIELD.label = 3
+MOUNTEQUIP_CFG_ATTRIBUTE_TYPE_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_ATTRIBUTE_TYPE_FIELD.default_value = {}
+MOUNTEQUIP_CFG_ATTRIBUTE_TYPE_FIELD.type = 5
+MOUNTEQUIP_CFG_ATTRIBUTE_TYPE_FIELD.cpp_type = 1
+
+MOUNTEQUIP_CFG_ATTRIBUTE_MODE_FIELD.name = "attribute_mode"
+MOUNTEQUIP_CFG_ATTRIBUTE_MODE_FIELD.full_name = ".ftcfg.mountequip_cfg.attribute_mode"
+MOUNTEQUIP_CFG_ATTRIBUTE_MODE_FIELD.number = 12
+MOUNTEQUIP_CFG_ATTRIBUTE_MODE_FIELD.index = 11
+MOUNTEQUIP_CFG_ATTRIBUTE_MODE_FIELD.label = 3
+MOUNTEQUIP_CFG_ATTRIBUTE_MODE_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_ATTRIBUTE_MODE_FIELD.default_value = {}
+MOUNTEQUIP_CFG_ATTRIBUTE_MODE_FIELD.type = 5
+MOUNTEQUIP_CFG_ATTRIBUTE_MODE_FIELD.cpp_type = 1
+
+MOUNTEQUIP_CFG_ATTRIBUTE_COUNT_FIELD.name = "attribute_count"
+MOUNTEQUIP_CFG_ATTRIBUTE_COUNT_FIELD.full_name = ".ftcfg.mountequip_cfg.attribute_count"
+MOUNTEQUIP_CFG_ATTRIBUTE_COUNT_FIELD.number = 13
+MOUNTEQUIP_CFG_ATTRIBUTE_COUNT_FIELD.index = 12
+MOUNTEQUIP_CFG_ATTRIBUTE_COUNT_FIELD.label = 3
+MOUNTEQUIP_CFG_ATTRIBUTE_COUNT_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_ATTRIBUTE_COUNT_FIELD.default_value = {}
+MOUNTEQUIP_CFG_ATTRIBUTE_COUNT_FIELD.type = 2
+MOUNTEQUIP_CFG_ATTRIBUTE_COUNT_FIELD.cpp_type = 6
+
+MOUNTEQUIP_CFG_COMBAT_POINT_FIELD.name = "combat_point"
+MOUNTEQUIP_CFG_COMBAT_POINT_FIELD.full_name = ".ftcfg.mountequip_cfg.combat_point"
+MOUNTEQUIP_CFG_COMBAT_POINT_FIELD.number = 14
+MOUNTEQUIP_CFG_COMBAT_POINT_FIELD.index = 13
+MOUNTEQUIP_CFG_COMBAT_POINT_FIELD.label = 2
+MOUNTEQUIP_CFG_COMBAT_POINT_FIELD.has_default_value = false
+MOUNTEQUIP_CFG_COMBAT_POINT_FIELD.default_value = 0
+MOUNTEQUIP_CFG_COMBAT_POINT_FIELD.type = 13
+MOUNTEQUIP_CFG_COMBAT_POINT_FIELD.cpp_type = 3
+
+MOUNTEQUIP_CFG.name = "mountequip_cfg"
+MOUNTEQUIP_CFG.full_name = ".ftcfg.mountequip_cfg"
+MOUNTEQUIP_CFG.nested_types = {}
+MOUNTEQUIP_CFG.enum_types = {}
+MOUNTEQUIP_CFG.fields = {MOUNTEQUIP_CFG_ID_FIELD, MOUNTEQUIP_CFG_ITEM_NAME_FIELD, MOUNTEQUIP_CFG_ITEM_DESC_FIELD, MOUNTEQUIP_CFG_NEED_LEVEL_FIELD, MOUNTEQUIP_CFG_EQUIP_PLACE_FIELD, MOUNTEQUIP_CFG_DISPLAY_TYPE_FIELD, MOUNTEQUIP_CFG_ITEM_COLOR_FIELD, MOUNTEQUIP_CFG_ITEM_ICON_FIELD, MOUNTEQUIP_CFG_COULD_TRADE_FIELD, MOUNTEQUIP_CFG_EFFECT_TIMELIMITED_FIELD, MOUNTEQUIP_CFG_ATTRIBUTE_TYPE_FIELD, MOUNTEQUIP_CFG_ATTRIBUTE_MODE_FIELD, MOUNTEQUIP_CFG_ATTRIBUTE_COUNT_FIELD, MOUNTEQUIP_CFG_COMBAT_POINT_FIELD}
+MOUNTEQUIP_CFG.is_extendable = false
+MOUNTEQUIP_CFG.extensions = {}
+MOUNTEQUIP_CFGS_ITEMS_FIELD.name = "items"
+MOUNTEQUIP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.mountequip_cfgs.items"
+MOUNTEQUIP_CFGS_ITEMS_FIELD.number = 1
+MOUNTEQUIP_CFGS_ITEMS_FIELD.index = 0
+MOUNTEQUIP_CFGS_ITEMS_FIELD.label = 3
+MOUNTEQUIP_CFGS_ITEMS_FIELD.has_default_value = false
+MOUNTEQUIP_CFGS_ITEMS_FIELD.default_value = {}
+MOUNTEQUIP_CFGS_ITEMS_FIELD.message_type = MOUNTEQUIP_CFG
+MOUNTEQUIP_CFGS_ITEMS_FIELD.type = 11
+MOUNTEQUIP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MOUNTEQUIP_CFGS.name = "mountequip_cfgs"
+MOUNTEQUIP_CFGS.full_name = ".ftcfg.mountequip_cfgs"
+MOUNTEQUIP_CFGS.nested_types = {}
+MOUNTEQUIP_CFGS.enum_types = {}
+MOUNTEQUIP_CFGS.fields = {MOUNTEQUIP_CFGS_ITEMS_FIELD}
+MOUNTEQUIP_CFGS.is_extendable = false
+MOUNTEQUIP_CFGS.extensions = {}
+INDEPENDENT_RANDOM_REWARD_CFG_ID_FIELD.name = "id"
+INDEPENDENT_RANDOM_REWARD_CFG_ID_FIELD.full_name = ".ftcfg.independent_random_reward_cfg.id"
+INDEPENDENT_RANDOM_REWARD_CFG_ID_FIELD.number = 1
+INDEPENDENT_RANDOM_REWARD_CFG_ID_FIELD.index = 0
+INDEPENDENT_RANDOM_REWARD_CFG_ID_FIELD.label = 2
+INDEPENDENT_RANDOM_REWARD_CFG_ID_FIELD.has_default_value = false
+INDEPENDENT_RANDOM_REWARD_CFG_ID_FIELD.default_value = 0
+INDEPENDENT_RANDOM_REWARD_CFG_ID_FIELD.type = 5
+INDEPENDENT_RANDOM_REWARD_CFG_ID_FIELD.cpp_type = 1
+
+INDEPENDENT_RANDOM_REWARD_CFG_DROP_RATE_FIELD.name = "drop_rate"
+INDEPENDENT_RANDOM_REWARD_CFG_DROP_RATE_FIELD.full_name = ".ftcfg.independent_random_reward_cfg.drop_rate"
+INDEPENDENT_RANDOM_REWARD_CFG_DROP_RATE_FIELD.number = 2
+INDEPENDENT_RANDOM_REWARD_CFG_DROP_RATE_FIELD.index = 1
+INDEPENDENT_RANDOM_REWARD_CFG_DROP_RATE_FIELD.label = 3
+INDEPENDENT_RANDOM_REWARD_CFG_DROP_RATE_FIELD.has_default_value = false
+INDEPENDENT_RANDOM_REWARD_CFG_DROP_RATE_FIELD.default_value = {}
+INDEPENDENT_RANDOM_REWARD_CFG_DROP_RATE_FIELD.type = 5
+INDEPENDENT_RANDOM_REWARD_CFG_DROP_RATE_FIELD.cpp_type = 1
+
+INDEPENDENT_RANDOM_REWARD_CFG_RANDOM_REWARD_ID_FIELD.name = "random_reward_id"
+INDEPENDENT_RANDOM_REWARD_CFG_RANDOM_REWARD_ID_FIELD.full_name = ".ftcfg.independent_random_reward_cfg.random_reward_id"
+INDEPENDENT_RANDOM_REWARD_CFG_RANDOM_REWARD_ID_FIELD.number = 3
+INDEPENDENT_RANDOM_REWARD_CFG_RANDOM_REWARD_ID_FIELD.index = 2
+INDEPENDENT_RANDOM_REWARD_CFG_RANDOM_REWARD_ID_FIELD.label = 3
+INDEPENDENT_RANDOM_REWARD_CFG_RANDOM_REWARD_ID_FIELD.has_default_value = false
+INDEPENDENT_RANDOM_REWARD_CFG_RANDOM_REWARD_ID_FIELD.default_value = {}
+INDEPENDENT_RANDOM_REWARD_CFG_RANDOM_REWARD_ID_FIELD.type = 5
+INDEPENDENT_RANDOM_REWARD_CFG_RANDOM_REWARD_ID_FIELD.cpp_type = 1
+
+INDEPENDENT_RANDOM_REWARD_CFG.name = "independent_random_reward_cfg"
+INDEPENDENT_RANDOM_REWARD_CFG.full_name = ".ftcfg.independent_random_reward_cfg"
+INDEPENDENT_RANDOM_REWARD_CFG.nested_types = {}
+INDEPENDENT_RANDOM_REWARD_CFG.enum_types = {}
+INDEPENDENT_RANDOM_REWARD_CFG.fields = {INDEPENDENT_RANDOM_REWARD_CFG_ID_FIELD, INDEPENDENT_RANDOM_REWARD_CFG_DROP_RATE_FIELD, INDEPENDENT_RANDOM_REWARD_CFG_RANDOM_REWARD_ID_FIELD}
+INDEPENDENT_RANDOM_REWARD_CFG.is_extendable = false
+INDEPENDENT_RANDOM_REWARD_CFG.extensions = {}
+INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD.name = "items"
+INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD.full_name = ".ftcfg.independent_random_reward_cfgs.items"
+INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD.number = 1
+INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD.index = 0
+INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD.label = 3
+INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD.has_default_value = false
+INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD.default_value = {}
+INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD.message_type = INDEPENDENT_RANDOM_REWARD_CFG
+INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD.type = 11
+INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD.cpp_type = 10
+
+INDEPENDENT_RANDOM_REWARD_CFGS.name = "independent_random_reward_cfgs"
+INDEPENDENT_RANDOM_REWARD_CFGS.full_name = ".ftcfg.independent_random_reward_cfgs"
+INDEPENDENT_RANDOM_REWARD_CFGS.nested_types = {}
+INDEPENDENT_RANDOM_REWARD_CFGS.enum_types = {}
+INDEPENDENT_RANDOM_REWARD_CFGS.fields = {INDEPENDENT_RANDOM_REWARD_CFGS_ITEMS_FIELD}
+INDEPENDENT_RANDOM_REWARD_CFGS.is_extendable = false
+INDEPENDENT_RANDOM_REWARD_CFGS.extensions = {}
+WEIGHT_RANDOM_REWARD_CFG_ID_FIELD.name = "id"
+WEIGHT_RANDOM_REWARD_CFG_ID_FIELD.full_name = ".ftcfg.weight_random_reward_cfg.id"
+WEIGHT_RANDOM_REWARD_CFG_ID_FIELD.number = 1
+WEIGHT_RANDOM_REWARD_CFG_ID_FIELD.index = 0
+WEIGHT_RANDOM_REWARD_CFG_ID_FIELD.label = 2
+WEIGHT_RANDOM_REWARD_CFG_ID_FIELD.has_default_value = false
+WEIGHT_RANDOM_REWARD_CFG_ID_FIELD.default_value = 0
+WEIGHT_RANDOM_REWARD_CFG_ID_FIELD.type = 5
+WEIGHT_RANDOM_REWARD_CFG_ID_FIELD.cpp_type = 1
+
+WEIGHT_RANDOM_REWARD_CFG_REWARD_RATE_FIELD.name = "reward_rate"
+WEIGHT_RANDOM_REWARD_CFG_REWARD_RATE_FIELD.full_name = ".ftcfg.weight_random_reward_cfg.reward_rate"
+WEIGHT_RANDOM_REWARD_CFG_REWARD_RATE_FIELD.number = 2
+WEIGHT_RANDOM_REWARD_CFG_REWARD_RATE_FIELD.index = 1
+WEIGHT_RANDOM_REWARD_CFG_REWARD_RATE_FIELD.label = 3
+WEIGHT_RANDOM_REWARD_CFG_REWARD_RATE_FIELD.has_default_value = false
+WEIGHT_RANDOM_REWARD_CFG_REWARD_RATE_FIELD.default_value = {}
+WEIGHT_RANDOM_REWARD_CFG_REWARD_RATE_FIELD.type = 5
+WEIGHT_RANDOM_REWARD_CFG_REWARD_RATE_FIELD.cpp_type = 1
+
+WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD.name = "reward_type"
+WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD.full_name = ".ftcfg.weight_random_reward_cfg.reward_type"
+WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD.number = 3
+WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD.index = 2
+WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD.label = 3
+WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD.has_default_value = false
+WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD.default_value = {}
+WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD.enum_type = config_predefine_pb.EREWARDTYPE
+WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD.type = 14
+WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD.cpp_type = 8
+
+WEIGHT_RANDOM_REWARD_CFG_REWARD_ID_FIELD.name = "reward_id"
+WEIGHT_RANDOM_REWARD_CFG_REWARD_ID_FIELD.full_name = ".ftcfg.weight_random_reward_cfg.reward_id"
+WEIGHT_RANDOM_REWARD_CFG_REWARD_ID_FIELD.number = 4
+WEIGHT_RANDOM_REWARD_CFG_REWARD_ID_FIELD.index = 3
+WEIGHT_RANDOM_REWARD_CFG_REWARD_ID_FIELD.label = 3
+WEIGHT_RANDOM_REWARD_CFG_REWARD_ID_FIELD.has_default_value = false
+WEIGHT_RANDOM_REWARD_CFG_REWARD_ID_FIELD.default_value = {}
+WEIGHT_RANDOM_REWARD_CFG_REWARD_ID_FIELD.type = 5
+WEIGHT_RANDOM_REWARD_CFG_REWARD_ID_FIELD.cpp_type = 1
+
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MIN_FIELD.name = "random_min"
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MIN_FIELD.full_name = ".ftcfg.weight_random_reward_cfg.random_min"
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MIN_FIELD.number = 5
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MIN_FIELD.index = 4
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MIN_FIELD.label = 3
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MIN_FIELD.has_default_value = false
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MIN_FIELD.default_value = {}
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MIN_FIELD.type = 5
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MIN_FIELD.cpp_type = 1
+
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MAX_FIELD.name = "random_max"
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MAX_FIELD.full_name = ".ftcfg.weight_random_reward_cfg.random_max"
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MAX_FIELD.number = 6
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MAX_FIELD.index = 5
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MAX_FIELD.label = 3
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MAX_FIELD.has_default_value = false
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MAX_FIELD.default_value = {}
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MAX_FIELD.type = 5
+WEIGHT_RANDOM_REWARD_CFG_RANDOM_MAX_FIELD.cpp_type = 1
+
+WEIGHT_RANDOM_REWARD_CFG_SHOW_FIELD.name = "show"
+WEIGHT_RANDOM_REWARD_CFG_SHOW_FIELD.full_name = ".ftcfg.weight_random_reward_cfg.show"
+WEIGHT_RANDOM_REWARD_CFG_SHOW_FIELD.number = 7
+WEIGHT_RANDOM_REWARD_CFG_SHOW_FIELD.index = 6
+WEIGHT_RANDOM_REWARD_CFG_SHOW_FIELD.label = 2
+WEIGHT_RANDOM_REWARD_CFG_SHOW_FIELD.has_default_value = false
+WEIGHT_RANDOM_REWARD_CFG_SHOW_FIELD.default_value = 0
+WEIGHT_RANDOM_REWARD_CFG_SHOW_FIELD.type = 5
+WEIGHT_RANDOM_REWARD_CFG_SHOW_FIELD.cpp_type = 1
+
+WEIGHT_RANDOM_REWARD_CFG.name = "weight_random_reward_cfg"
+WEIGHT_RANDOM_REWARD_CFG.full_name = ".ftcfg.weight_random_reward_cfg"
+WEIGHT_RANDOM_REWARD_CFG.nested_types = {}
+WEIGHT_RANDOM_REWARD_CFG.enum_types = {}
+WEIGHT_RANDOM_REWARD_CFG.fields = {WEIGHT_RANDOM_REWARD_CFG_ID_FIELD, WEIGHT_RANDOM_REWARD_CFG_REWARD_RATE_FIELD, WEIGHT_RANDOM_REWARD_CFG_REWARD_TYPE_FIELD, WEIGHT_RANDOM_REWARD_CFG_REWARD_ID_FIELD, WEIGHT_RANDOM_REWARD_CFG_RANDOM_MIN_FIELD, WEIGHT_RANDOM_REWARD_CFG_RANDOM_MAX_FIELD, WEIGHT_RANDOM_REWARD_CFG_SHOW_FIELD}
+WEIGHT_RANDOM_REWARD_CFG.is_extendable = false
+WEIGHT_RANDOM_REWARD_CFG.extensions = {}
+WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD.name = "items"
+WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD.full_name = ".ftcfg.weight_random_reward_cfgs.items"
+WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD.number = 1
+WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD.index = 0
+WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD.label = 3
+WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD.has_default_value = false
+WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD.default_value = {}
+WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD.message_type = WEIGHT_RANDOM_REWARD_CFG
+WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD.type = 11
+WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD.cpp_type = 10
+
+WEIGHT_RANDOM_REWARD_CFGS.name = "weight_random_reward_cfgs"
+WEIGHT_RANDOM_REWARD_CFGS.full_name = ".ftcfg.weight_random_reward_cfgs"
+WEIGHT_RANDOM_REWARD_CFGS.nested_types = {}
+WEIGHT_RANDOM_REWARD_CFGS.enum_types = {}
+WEIGHT_RANDOM_REWARD_CFGS.fields = {WEIGHT_RANDOM_REWARD_CFGS_ITEMS_FIELD}
+WEIGHT_RANDOM_REWARD_CFGS.is_extendable = false
+WEIGHT_RANDOM_REWARD_CFGS.extensions = {}
+REWARD_CFG_ID_FIELD.name = "id"
+REWARD_CFG_ID_FIELD.full_name = ".ftcfg.reward_cfg.id"
+REWARD_CFG_ID_FIELD.number = 1
+REWARD_CFG_ID_FIELD.index = 0
+REWARD_CFG_ID_FIELD.label = 2
+REWARD_CFG_ID_FIELD.has_default_value = false
+REWARD_CFG_ID_FIELD.default_value = 0
+REWARD_CFG_ID_FIELD.type = 5
+REWARD_CFG_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.name = "reward_attribute_id"
+REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.full_name = ".ftcfg.reward_cfg.reward_attribute_id"
+REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.number = 2
+REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.index = 1
+REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.label = 3
+REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.has_default_value = false
+REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.default_value = {}
+REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.type = 5
+REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.name = "reward_attribute_count"
+REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.full_name = ".ftcfg.reward_cfg.reward_attribute_count"
+REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.number = 3
+REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.index = 2
+REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.label = 3
+REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.has_default_value = false
+REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.default_value = {}
+REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.type = 5
+REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_ITEM_ID_FIELD.name = "reward_item_id"
+REWARD_CFG_REWARD_ITEM_ID_FIELD.full_name = ".ftcfg.reward_cfg.reward_item_id"
+REWARD_CFG_REWARD_ITEM_ID_FIELD.number = 4
+REWARD_CFG_REWARD_ITEM_ID_FIELD.index = 3
+REWARD_CFG_REWARD_ITEM_ID_FIELD.label = 3
+REWARD_CFG_REWARD_ITEM_ID_FIELD.has_default_value = false
+REWARD_CFG_REWARD_ITEM_ID_FIELD.default_value = {}
+REWARD_CFG_REWARD_ITEM_ID_FIELD.type = 5
+REWARD_CFG_REWARD_ITEM_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_ITEM_COUNT_FIELD.name = "reward_item_count"
+REWARD_CFG_REWARD_ITEM_COUNT_FIELD.full_name = ".ftcfg.reward_cfg.reward_item_count"
+REWARD_CFG_REWARD_ITEM_COUNT_FIELD.number = 5
+REWARD_CFG_REWARD_ITEM_COUNT_FIELD.index = 4
+REWARD_CFG_REWARD_ITEM_COUNT_FIELD.label = 3
+REWARD_CFG_REWARD_ITEM_COUNT_FIELD.has_default_value = false
+REWARD_CFG_REWARD_ITEM_COUNT_FIELD.default_value = {}
+REWARD_CFG_REWARD_ITEM_COUNT_FIELD.type = 5
+REWARD_CFG_REWARD_ITEM_COUNT_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_MAGIC_ROCK_ID_FIELD.name = "reward_magic_rock_id"
+REWARD_CFG_REWARD_MAGIC_ROCK_ID_FIELD.full_name = ".ftcfg.reward_cfg.reward_magic_rock_id"
+REWARD_CFG_REWARD_MAGIC_ROCK_ID_FIELD.number = 6
+REWARD_CFG_REWARD_MAGIC_ROCK_ID_FIELD.index = 5
+REWARD_CFG_REWARD_MAGIC_ROCK_ID_FIELD.label = 3
+REWARD_CFG_REWARD_MAGIC_ROCK_ID_FIELD.has_default_value = false
+REWARD_CFG_REWARD_MAGIC_ROCK_ID_FIELD.default_value = {}
+REWARD_CFG_REWARD_MAGIC_ROCK_ID_FIELD.type = 5
+REWARD_CFG_REWARD_MAGIC_ROCK_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_MAGIC_ROCK_COUNT_FIELD.name = "reward_magic_rock_count"
+REWARD_CFG_REWARD_MAGIC_ROCK_COUNT_FIELD.full_name = ".ftcfg.reward_cfg.reward_magic_rock_count"
+REWARD_CFG_REWARD_MAGIC_ROCK_COUNT_FIELD.number = 7
+REWARD_CFG_REWARD_MAGIC_ROCK_COUNT_FIELD.index = 6
+REWARD_CFG_REWARD_MAGIC_ROCK_COUNT_FIELD.label = 3
+REWARD_CFG_REWARD_MAGIC_ROCK_COUNT_FIELD.has_default_value = false
+REWARD_CFG_REWARD_MAGIC_ROCK_COUNT_FIELD.default_value = {}
+REWARD_CFG_REWARD_MAGIC_ROCK_COUNT_FIELD.type = 5
+REWARD_CFG_REWARD_MAGIC_ROCK_COUNT_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_REFINE_ROCK_ID_FIELD.name = "reward_refine_rock_id"
+REWARD_CFG_REWARD_REFINE_ROCK_ID_FIELD.full_name = ".ftcfg.reward_cfg.reward_refine_rock_id"
+REWARD_CFG_REWARD_REFINE_ROCK_ID_FIELD.number = 8
+REWARD_CFG_REWARD_REFINE_ROCK_ID_FIELD.index = 7
+REWARD_CFG_REWARD_REFINE_ROCK_ID_FIELD.label = 3
+REWARD_CFG_REWARD_REFINE_ROCK_ID_FIELD.has_default_value = false
+REWARD_CFG_REWARD_REFINE_ROCK_ID_FIELD.default_value = {}
+REWARD_CFG_REWARD_REFINE_ROCK_ID_FIELD.type = 5
+REWARD_CFG_REWARD_REFINE_ROCK_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_REFINE_ROCK_COUNT_FIELD.name = "reward_refine_rock_count"
+REWARD_CFG_REWARD_REFINE_ROCK_COUNT_FIELD.full_name = ".ftcfg.reward_cfg.reward_refine_rock_count"
+REWARD_CFG_REWARD_REFINE_ROCK_COUNT_FIELD.number = 9
+REWARD_CFG_REWARD_REFINE_ROCK_COUNT_FIELD.index = 8
+REWARD_CFG_REWARD_REFINE_ROCK_COUNT_FIELD.label = 3
+REWARD_CFG_REWARD_REFINE_ROCK_COUNT_FIELD.has_default_value = false
+REWARD_CFG_REWARD_REFINE_ROCK_COUNT_FIELD.default_value = {}
+REWARD_CFG_REWARD_REFINE_ROCK_COUNT_FIELD.type = 5
+REWARD_CFG_REWARD_REFINE_ROCK_COUNT_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_SOUL_ID_FIELD.name = "reward_soul_id"
+REWARD_CFG_REWARD_SOUL_ID_FIELD.full_name = ".ftcfg.reward_cfg.reward_soul_id"
+REWARD_CFG_REWARD_SOUL_ID_FIELD.number = 10
+REWARD_CFG_REWARD_SOUL_ID_FIELD.index = 9
+REWARD_CFG_REWARD_SOUL_ID_FIELD.label = 3
+REWARD_CFG_REWARD_SOUL_ID_FIELD.has_default_value = false
+REWARD_CFG_REWARD_SOUL_ID_FIELD.default_value = {}
+REWARD_CFG_REWARD_SOUL_ID_FIELD.type = 5
+REWARD_CFG_REWARD_SOUL_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_SOUL_COUNT_FIELD.name = "reward_soul_count"
+REWARD_CFG_REWARD_SOUL_COUNT_FIELD.full_name = ".ftcfg.reward_cfg.reward_soul_count"
+REWARD_CFG_REWARD_SOUL_COUNT_FIELD.number = 11
+REWARD_CFG_REWARD_SOUL_COUNT_FIELD.index = 10
+REWARD_CFG_REWARD_SOUL_COUNT_FIELD.label = 3
+REWARD_CFG_REWARD_SOUL_COUNT_FIELD.has_default_value = false
+REWARD_CFG_REWARD_SOUL_COUNT_FIELD.default_value = {}
+REWARD_CFG_REWARD_SOUL_COUNT_FIELD.type = 5
+REWARD_CFG_REWARD_SOUL_COUNT_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_PARTNER_ID_FIELD.name = "reward_partner_id"
+REWARD_CFG_REWARD_PARTNER_ID_FIELD.full_name = ".ftcfg.reward_cfg.reward_partner_id"
+REWARD_CFG_REWARD_PARTNER_ID_FIELD.number = 12
+REWARD_CFG_REWARD_PARTNER_ID_FIELD.index = 11
+REWARD_CFG_REWARD_PARTNER_ID_FIELD.label = 3
+REWARD_CFG_REWARD_PARTNER_ID_FIELD.has_default_value = false
+REWARD_CFG_REWARD_PARTNER_ID_FIELD.default_value = {}
+REWARD_CFG_REWARD_PARTNER_ID_FIELD.type = 5
+REWARD_CFG_REWARD_PARTNER_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_REWARD_PARTNER_COUNT_FIELD.name = "reward_partner_count"
+REWARD_CFG_REWARD_PARTNER_COUNT_FIELD.full_name = ".ftcfg.reward_cfg.reward_partner_count"
+REWARD_CFG_REWARD_PARTNER_COUNT_FIELD.number = 13
+REWARD_CFG_REWARD_PARTNER_COUNT_FIELD.index = 12
+REWARD_CFG_REWARD_PARTNER_COUNT_FIELD.label = 3
+REWARD_CFG_REWARD_PARTNER_COUNT_FIELD.has_default_value = false
+REWARD_CFG_REWARD_PARTNER_COUNT_FIELD.default_value = {}
+REWARD_CFG_REWARD_PARTNER_COUNT_FIELD.type = 5
+REWARD_CFG_REWARD_PARTNER_COUNT_FIELD.cpp_type = 1
+
+REWARD_CFG_PROFESSION1_REWARD_ITEM_ID_FIELD.name = "profession1_reward_item_id"
+REWARD_CFG_PROFESSION1_REWARD_ITEM_ID_FIELD.full_name = ".ftcfg.reward_cfg.profession1_reward_item_id"
+REWARD_CFG_PROFESSION1_REWARD_ITEM_ID_FIELD.number = 14
+REWARD_CFG_PROFESSION1_REWARD_ITEM_ID_FIELD.index = 13
+REWARD_CFG_PROFESSION1_REWARD_ITEM_ID_FIELD.label = 3
+REWARD_CFG_PROFESSION1_REWARD_ITEM_ID_FIELD.has_default_value = false
+REWARD_CFG_PROFESSION1_REWARD_ITEM_ID_FIELD.default_value = {}
+REWARD_CFG_PROFESSION1_REWARD_ITEM_ID_FIELD.type = 5
+REWARD_CFG_PROFESSION1_REWARD_ITEM_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_PROFESSION1_REWARD_ATTRIBUTE_COUNT_FIELD.name = "profession1_reward_attribute_count"
+REWARD_CFG_PROFESSION1_REWARD_ATTRIBUTE_COUNT_FIELD.full_name = ".ftcfg.reward_cfg.profession1_reward_attribute_count"
+REWARD_CFG_PROFESSION1_REWARD_ATTRIBUTE_COUNT_FIELD.number = 15
+REWARD_CFG_PROFESSION1_REWARD_ATTRIBUTE_COUNT_FIELD.index = 14
+REWARD_CFG_PROFESSION1_REWARD_ATTRIBUTE_COUNT_FIELD.label = 3
+REWARD_CFG_PROFESSION1_REWARD_ATTRIBUTE_COUNT_FIELD.has_default_value = false
+REWARD_CFG_PROFESSION1_REWARD_ATTRIBUTE_COUNT_FIELD.default_value = {}
+REWARD_CFG_PROFESSION1_REWARD_ATTRIBUTE_COUNT_FIELD.type = 5
+REWARD_CFG_PROFESSION1_REWARD_ATTRIBUTE_COUNT_FIELD.cpp_type = 1
+
+REWARD_CFG_PROFESSION2_REWARD_ITEM_ID_FIELD.name = "profession2_reward_item_id"
+REWARD_CFG_PROFESSION2_REWARD_ITEM_ID_FIELD.full_name = ".ftcfg.reward_cfg.profession2_reward_item_id"
+REWARD_CFG_PROFESSION2_REWARD_ITEM_ID_FIELD.number = 16
+REWARD_CFG_PROFESSION2_REWARD_ITEM_ID_FIELD.index = 15
+REWARD_CFG_PROFESSION2_REWARD_ITEM_ID_FIELD.label = 3
+REWARD_CFG_PROFESSION2_REWARD_ITEM_ID_FIELD.has_default_value = false
+REWARD_CFG_PROFESSION2_REWARD_ITEM_ID_FIELD.default_value = {}
+REWARD_CFG_PROFESSION2_REWARD_ITEM_ID_FIELD.type = 5
+REWARD_CFG_PROFESSION2_REWARD_ITEM_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_PROFESSION2_REWARD_ATTRIBUTE_COUNT_FIELD.name = "profession2_reward_attribute_count"
+REWARD_CFG_PROFESSION2_REWARD_ATTRIBUTE_COUNT_FIELD.full_name = ".ftcfg.reward_cfg.profession2_reward_attribute_count"
+REWARD_CFG_PROFESSION2_REWARD_ATTRIBUTE_COUNT_FIELD.number = 17
+REWARD_CFG_PROFESSION2_REWARD_ATTRIBUTE_COUNT_FIELD.index = 16
+REWARD_CFG_PROFESSION2_REWARD_ATTRIBUTE_COUNT_FIELD.label = 3
+REWARD_CFG_PROFESSION2_REWARD_ATTRIBUTE_COUNT_FIELD.has_default_value = false
+REWARD_CFG_PROFESSION2_REWARD_ATTRIBUTE_COUNT_FIELD.default_value = {}
+REWARD_CFG_PROFESSION2_REWARD_ATTRIBUTE_COUNT_FIELD.type = 5
+REWARD_CFG_PROFESSION2_REWARD_ATTRIBUTE_COUNT_FIELD.cpp_type = 1
+
+REWARD_CFG_PROFESSION3_REWARD_ITEM_ID_FIELD.name = "profession3_reward_item_id"
+REWARD_CFG_PROFESSION3_REWARD_ITEM_ID_FIELD.full_name = ".ftcfg.reward_cfg.profession3_reward_item_id"
+REWARD_CFG_PROFESSION3_REWARD_ITEM_ID_FIELD.number = 18
+REWARD_CFG_PROFESSION3_REWARD_ITEM_ID_FIELD.index = 17
+REWARD_CFG_PROFESSION3_REWARD_ITEM_ID_FIELD.label = 3
+REWARD_CFG_PROFESSION3_REWARD_ITEM_ID_FIELD.has_default_value = false
+REWARD_CFG_PROFESSION3_REWARD_ITEM_ID_FIELD.default_value = {}
+REWARD_CFG_PROFESSION3_REWARD_ITEM_ID_FIELD.type = 5
+REWARD_CFG_PROFESSION3_REWARD_ITEM_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_PROFESSION3_REWARD_ATTRIBUTE_COUNT_FIELD.name = "profession3_reward_attribute_count"
+REWARD_CFG_PROFESSION3_REWARD_ATTRIBUTE_COUNT_FIELD.full_name = ".ftcfg.reward_cfg.profession3_reward_attribute_count"
+REWARD_CFG_PROFESSION3_REWARD_ATTRIBUTE_COUNT_FIELD.number = 19
+REWARD_CFG_PROFESSION3_REWARD_ATTRIBUTE_COUNT_FIELD.index = 18
+REWARD_CFG_PROFESSION3_REWARD_ATTRIBUTE_COUNT_FIELD.label = 3
+REWARD_CFG_PROFESSION3_REWARD_ATTRIBUTE_COUNT_FIELD.has_default_value = false
+REWARD_CFG_PROFESSION3_REWARD_ATTRIBUTE_COUNT_FIELD.default_value = {}
+REWARD_CFG_PROFESSION3_REWARD_ATTRIBUTE_COUNT_FIELD.type = 5
+REWARD_CFG_PROFESSION3_REWARD_ATTRIBUTE_COUNT_FIELD.cpp_type = 1
+
+REWARD_CFG_PROFESSION4_REWARD_ITEM_ID_FIELD.name = "profession4_reward_item_id"
+REWARD_CFG_PROFESSION4_REWARD_ITEM_ID_FIELD.full_name = ".ftcfg.reward_cfg.profession4_reward_item_id"
+REWARD_CFG_PROFESSION4_REWARD_ITEM_ID_FIELD.number = 20
+REWARD_CFG_PROFESSION4_REWARD_ITEM_ID_FIELD.index = 19
+REWARD_CFG_PROFESSION4_REWARD_ITEM_ID_FIELD.label = 3
+REWARD_CFG_PROFESSION4_REWARD_ITEM_ID_FIELD.has_default_value = false
+REWARD_CFG_PROFESSION4_REWARD_ITEM_ID_FIELD.default_value = {}
+REWARD_CFG_PROFESSION4_REWARD_ITEM_ID_FIELD.type = 5
+REWARD_CFG_PROFESSION4_REWARD_ITEM_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_PROFESSION4_REWARD_ATTRIBUTE_COUNT_FIELD.name = "profession4_reward_attribute_count"
+REWARD_CFG_PROFESSION4_REWARD_ATTRIBUTE_COUNT_FIELD.full_name = ".ftcfg.reward_cfg.profession4_reward_attribute_count"
+REWARD_CFG_PROFESSION4_REWARD_ATTRIBUTE_COUNT_FIELD.number = 21
+REWARD_CFG_PROFESSION4_REWARD_ATTRIBUTE_COUNT_FIELD.index = 20
+REWARD_CFG_PROFESSION4_REWARD_ATTRIBUTE_COUNT_FIELD.label = 3
+REWARD_CFG_PROFESSION4_REWARD_ATTRIBUTE_COUNT_FIELD.has_default_value = false
+REWARD_CFG_PROFESSION4_REWARD_ATTRIBUTE_COUNT_FIELD.default_value = {}
+REWARD_CFG_PROFESSION4_REWARD_ATTRIBUTE_COUNT_FIELD.type = 5
+REWARD_CFG_PROFESSION4_REWARD_ATTRIBUTE_COUNT_FIELD.cpp_type = 1
+
+REWARD_CFG_PROFESSION5_REWARD_ITEM_ID_FIELD.name = "profession5_reward_item_id"
+REWARD_CFG_PROFESSION5_REWARD_ITEM_ID_FIELD.full_name = ".ftcfg.reward_cfg.profession5_reward_item_id"
+REWARD_CFG_PROFESSION5_REWARD_ITEM_ID_FIELD.number = 22
+REWARD_CFG_PROFESSION5_REWARD_ITEM_ID_FIELD.index = 21
+REWARD_CFG_PROFESSION5_REWARD_ITEM_ID_FIELD.label = 3
+REWARD_CFG_PROFESSION5_REWARD_ITEM_ID_FIELD.has_default_value = false
+REWARD_CFG_PROFESSION5_REWARD_ITEM_ID_FIELD.default_value = {}
+REWARD_CFG_PROFESSION5_REWARD_ITEM_ID_FIELD.type = 5
+REWARD_CFG_PROFESSION5_REWARD_ITEM_ID_FIELD.cpp_type = 1
+
+REWARD_CFG_PROFESSION5_REWARD_ATTRIBUTE_COUNT_FIELD.name = "profession5_reward_attribute_count"
+REWARD_CFG_PROFESSION5_REWARD_ATTRIBUTE_COUNT_FIELD.full_name = ".ftcfg.reward_cfg.profession5_reward_attribute_count"
+REWARD_CFG_PROFESSION5_REWARD_ATTRIBUTE_COUNT_FIELD.number = 23
+REWARD_CFG_PROFESSION5_REWARD_ATTRIBUTE_COUNT_FIELD.index = 22
+REWARD_CFG_PROFESSION5_REWARD_ATTRIBUTE_COUNT_FIELD.label = 3
+REWARD_CFG_PROFESSION5_REWARD_ATTRIBUTE_COUNT_FIELD.has_default_value = false
+REWARD_CFG_PROFESSION5_REWARD_ATTRIBUTE_COUNT_FIELD.default_value = {}
+REWARD_CFG_PROFESSION5_REWARD_ATTRIBUTE_COUNT_FIELD.type = 5
+REWARD_CFG_PROFESSION5_REWARD_ATTRIBUTE_COUNT_FIELD.cpp_type = 1
+
+REWARD_CFG.name = "reward_cfg"
+REWARD_CFG.full_name = ".ftcfg.reward_cfg"
+REWARD_CFG.nested_types = {}
+REWARD_CFG.enum_types = {}
+REWARD_CFG.fields = {REWARD_CFG_ID_FIELD, REWARD_CFG_REWARD_ATTRIBUTE_ID_FIELD, REWARD_CFG_REWARD_ATTRIBUTE_COUNT_FIELD, REWARD_CFG_REWARD_ITEM_ID_FIELD, REWARD_CFG_REWARD_ITEM_COUNT_FIELD, REWARD_CFG_REWARD_MAGIC_ROCK_ID_FIELD, REWARD_CFG_REWARD_MAGIC_ROCK_COUNT_FIELD, REWARD_CFG_REWARD_REFINE_ROCK_ID_FIELD, REWARD_CFG_REWARD_REFINE_ROCK_COUNT_FIELD, REWARD_CFG_REWARD_SOUL_ID_FIELD, REWARD_CFG_REWARD_SOUL_COUNT_FIELD, REWARD_CFG_REWARD_PARTNER_ID_FIELD, REWARD_CFG_REWARD_PARTNER_COUNT_FIELD, REWARD_CFG_PROFESSION1_REWARD_ITEM_ID_FIELD, REWARD_CFG_PROFESSION1_REWARD_ATTRIBUTE_COUNT_FIELD, REWARD_CFG_PROFESSION2_REWARD_ITEM_ID_FIELD, REWARD_CFG_PROFESSION2_REWARD_ATTRIBUTE_COUNT_FIELD, REWARD_CFG_PROFESSION3_REWARD_ITEM_ID_FIELD, REWARD_CFG_PROFESSION3_REWARD_ATTRIBUTE_COUNT_FIELD, REWARD_CFG_PROFESSION4_REWARD_ITEM_ID_FIELD, REWARD_CFG_PROFESSION4_REWARD_ATTRIBUTE_COUNT_FIELD, REWARD_CFG_PROFESSION5_REWARD_ITEM_ID_FIELD, REWARD_CFG_PROFESSION5_REWARD_ATTRIBUTE_COUNT_FIELD}
+REWARD_CFG.is_extendable = false
+REWARD_CFG.extensions = {}
+REWARD_CFGS_ITEMS_FIELD.name = "items"
+REWARD_CFGS_ITEMS_FIELD.full_name = ".ftcfg.reward_cfgs.items"
+REWARD_CFGS_ITEMS_FIELD.number = 1
+REWARD_CFGS_ITEMS_FIELD.index = 0
+REWARD_CFGS_ITEMS_FIELD.label = 3
+REWARD_CFGS_ITEMS_FIELD.has_default_value = false
+REWARD_CFGS_ITEMS_FIELD.default_value = {}
+REWARD_CFGS_ITEMS_FIELD.message_type = REWARD_CFG
+REWARD_CFGS_ITEMS_FIELD.type = 11
+REWARD_CFGS_ITEMS_FIELD.cpp_type = 10
+
+REWARD_CFGS.name = "reward_cfgs"
+REWARD_CFGS.full_name = ".ftcfg.reward_cfgs"
+REWARD_CFGS.nested_types = {}
+REWARD_CFGS.enum_types = {}
+REWARD_CFGS.fields = {REWARD_CFGS_ITEMS_FIELD}
+REWARD_CFGS.is_extendable = false
+REWARD_CFGS.extensions = {}
+FUNC_TYPE_WEIGHT_CFG_ID_FIELD.name = "id"
+FUNC_TYPE_WEIGHT_CFG_ID_FIELD.full_name = ".ftcfg.func_type_weight_cfg.id"
+FUNC_TYPE_WEIGHT_CFG_ID_FIELD.number = 1
+FUNC_TYPE_WEIGHT_CFG_ID_FIELD.index = 0
+FUNC_TYPE_WEIGHT_CFG_ID_FIELD.label = 2
+FUNC_TYPE_WEIGHT_CFG_ID_FIELD.has_default_value = false
+FUNC_TYPE_WEIGHT_CFG_ID_FIELD.default_value = nil
+FUNC_TYPE_WEIGHT_CFG_ID_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+FUNC_TYPE_WEIGHT_CFG_ID_FIELD.type = 14
+FUNC_TYPE_WEIGHT_CFG_ID_FIELD.cpp_type = 8
+
+FUNC_TYPE_WEIGHT_CFG_DROPS_FIELD.name = "drops"
+FUNC_TYPE_WEIGHT_CFG_DROPS_FIELD.full_name = ".ftcfg.func_type_weight_cfg.drops"
+FUNC_TYPE_WEIGHT_CFG_DROPS_FIELD.number = 2
+FUNC_TYPE_WEIGHT_CFG_DROPS_FIELD.index = 1
+FUNC_TYPE_WEIGHT_CFG_DROPS_FIELD.label = 3
+FUNC_TYPE_WEIGHT_CFG_DROPS_FIELD.has_default_value = false
+FUNC_TYPE_WEIGHT_CFG_DROPS_FIELD.default_value = {}
+FUNC_TYPE_WEIGHT_CFG_DROPS_FIELD.type = 5
+FUNC_TYPE_WEIGHT_CFG_DROPS_FIELD.cpp_type = 1
+
+FUNC_TYPE_WEIGHT_CFG_WEIGHTS_FIELD.name = "weights"
+FUNC_TYPE_WEIGHT_CFG_WEIGHTS_FIELD.full_name = ".ftcfg.func_type_weight_cfg.weights"
+FUNC_TYPE_WEIGHT_CFG_WEIGHTS_FIELD.number = 3
+FUNC_TYPE_WEIGHT_CFG_WEIGHTS_FIELD.index = 2
+FUNC_TYPE_WEIGHT_CFG_WEIGHTS_FIELD.label = 3
+FUNC_TYPE_WEIGHT_CFG_WEIGHTS_FIELD.has_default_value = false
+FUNC_TYPE_WEIGHT_CFG_WEIGHTS_FIELD.default_value = {}
+FUNC_TYPE_WEIGHT_CFG_WEIGHTS_FIELD.type = 5
+FUNC_TYPE_WEIGHT_CFG_WEIGHTS_FIELD.cpp_type = 1
+
+FUNC_TYPE_WEIGHT_CFG.name = "func_type_weight_cfg"
+FUNC_TYPE_WEIGHT_CFG.full_name = ".ftcfg.func_type_weight_cfg"
+FUNC_TYPE_WEIGHT_CFG.nested_types = {}
+FUNC_TYPE_WEIGHT_CFG.enum_types = {}
+FUNC_TYPE_WEIGHT_CFG.fields = {FUNC_TYPE_WEIGHT_CFG_ID_FIELD, FUNC_TYPE_WEIGHT_CFG_DROPS_FIELD, FUNC_TYPE_WEIGHT_CFG_WEIGHTS_FIELD}
+FUNC_TYPE_WEIGHT_CFG.is_extendable = false
+FUNC_TYPE_WEIGHT_CFG.extensions = {}
+FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD.name = "items"
+FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.func_type_weight_cfgs.items"
+FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD.number = 1
+FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD.index = 0
+FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD.label = 3
+FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD.has_default_value = false
+FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD.default_value = {}
+FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD.message_type = FUNC_TYPE_WEIGHT_CFG
+FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD.type = 11
+FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+FUNC_TYPE_WEIGHT_CFGS.name = "func_type_weight_cfgs"
+FUNC_TYPE_WEIGHT_CFGS.full_name = ".ftcfg.func_type_weight_cfgs"
+FUNC_TYPE_WEIGHT_CFGS.nested_types = {}
+FUNC_TYPE_WEIGHT_CFGS.enum_types = {}
+FUNC_TYPE_WEIGHT_CFGS.fields = {FUNC_TYPE_WEIGHT_CFGS_ITEMS_FIELD}
+FUNC_TYPE_WEIGHT_CFGS.is_extendable = false
+FUNC_TYPE_WEIGHT_CFGS.extensions = {}
+ZONE_LOCATION_CFG_ID_FIELD.name = "id"
+ZONE_LOCATION_CFG_ID_FIELD.full_name = ".ftcfg.zone_location_cfg.id"
+ZONE_LOCATION_CFG_ID_FIELD.number = 1
+ZONE_LOCATION_CFG_ID_FIELD.index = 0
+ZONE_LOCATION_CFG_ID_FIELD.label = 2
+ZONE_LOCATION_CFG_ID_FIELD.has_default_value = false
+ZONE_LOCATION_CFG_ID_FIELD.default_value = 0
+ZONE_LOCATION_CFG_ID_FIELD.type = 5
+ZONE_LOCATION_CFG_ID_FIELD.cpp_type = 1
+
+ZONE_LOCATION_CFG_PROVINCE_ID_FIELD.name = "province_id"
+ZONE_LOCATION_CFG_PROVINCE_ID_FIELD.full_name = ".ftcfg.zone_location_cfg.province_id"
+ZONE_LOCATION_CFG_PROVINCE_ID_FIELD.number = 2
+ZONE_LOCATION_CFG_PROVINCE_ID_FIELD.index = 1
+ZONE_LOCATION_CFG_PROVINCE_ID_FIELD.label = 2
+ZONE_LOCATION_CFG_PROVINCE_ID_FIELD.has_default_value = false
+ZONE_LOCATION_CFG_PROVINCE_ID_FIELD.default_value = 0
+ZONE_LOCATION_CFG_PROVINCE_ID_FIELD.type = 5
+ZONE_LOCATION_CFG_PROVINCE_ID_FIELD.cpp_type = 1
+
+ZONE_LOCATION_CFG_PROVINCE_LANGUAGE_ID_FIELD.name = "province_language_id"
+ZONE_LOCATION_CFG_PROVINCE_LANGUAGE_ID_FIELD.full_name = ".ftcfg.zone_location_cfg.province_language_id"
+ZONE_LOCATION_CFG_PROVINCE_LANGUAGE_ID_FIELD.number = 3
+ZONE_LOCATION_CFG_PROVINCE_LANGUAGE_ID_FIELD.index = 2
+ZONE_LOCATION_CFG_PROVINCE_LANGUAGE_ID_FIELD.label = 2
+ZONE_LOCATION_CFG_PROVINCE_LANGUAGE_ID_FIELD.has_default_value = false
+ZONE_LOCATION_CFG_PROVINCE_LANGUAGE_ID_FIELD.default_value = 0
+ZONE_LOCATION_CFG_PROVINCE_LANGUAGE_ID_FIELD.type = 5
+ZONE_LOCATION_CFG_PROVINCE_LANGUAGE_ID_FIELD.cpp_type = 1
+
+ZONE_LOCATION_CFG_CITY_ID_FIELD.name = "city_id"
+ZONE_LOCATION_CFG_CITY_ID_FIELD.full_name = ".ftcfg.zone_location_cfg.city_id"
+ZONE_LOCATION_CFG_CITY_ID_FIELD.number = 4
+ZONE_LOCATION_CFG_CITY_ID_FIELD.index = 3
+ZONE_LOCATION_CFG_CITY_ID_FIELD.label = 2
+ZONE_LOCATION_CFG_CITY_ID_FIELD.has_default_value = false
+ZONE_LOCATION_CFG_CITY_ID_FIELD.default_value = 0
+ZONE_LOCATION_CFG_CITY_ID_FIELD.type = 5
+ZONE_LOCATION_CFG_CITY_ID_FIELD.cpp_type = 1
+
+ZONE_LOCATION_CFG_CITY_LANGUAGE_ID_FIELD.name = "city_language_id"
+ZONE_LOCATION_CFG_CITY_LANGUAGE_ID_FIELD.full_name = ".ftcfg.zone_location_cfg.city_language_id"
+ZONE_LOCATION_CFG_CITY_LANGUAGE_ID_FIELD.number = 5
+ZONE_LOCATION_CFG_CITY_LANGUAGE_ID_FIELD.index = 4
+ZONE_LOCATION_CFG_CITY_LANGUAGE_ID_FIELD.label = 2
+ZONE_LOCATION_CFG_CITY_LANGUAGE_ID_FIELD.has_default_value = false
+ZONE_LOCATION_CFG_CITY_LANGUAGE_ID_FIELD.default_value = 0
+ZONE_LOCATION_CFG_CITY_LANGUAGE_ID_FIELD.type = 5
+ZONE_LOCATION_CFG_CITY_LANGUAGE_ID_FIELD.cpp_type = 1
+
+ZONE_LOCATION_CFG.name = "zone_location_cfg"
+ZONE_LOCATION_CFG.full_name = ".ftcfg.zone_location_cfg"
+ZONE_LOCATION_CFG.nested_types = {}
+ZONE_LOCATION_CFG.enum_types = {}
+ZONE_LOCATION_CFG.fields = {ZONE_LOCATION_CFG_ID_FIELD, ZONE_LOCATION_CFG_PROVINCE_ID_FIELD, ZONE_LOCATION_CFG_PROVINCE_LANGUAGE_ID_FIELD, ZONE_LOCATION_CFG_CITY_ID_FIELD, ZONE_LOCATION_CFG_CITY_LANGUAGE_ID_FIELD}
+ZONE_LOCATION_CFG.is_extendable = false
+ZONE_LOCATION_CFG.extensions = {}
+ZONE_LOCATION_CFGS_ITEMS_FIELD.name = "items"
+ZONE_LOCATION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.zone_location_cfgs.items"
+ZONE_LOCATION_CFGS_ITEMS_FIELD.number = 1
+ZONE_LOCATION_CFGS_ITEMS_FIELD.index = 0
+ZONE_LOCATION_CFGS_ITEMS_FIELD.label = 3
+ZONE_LOCATION_CFGS_ITEMS_FIELD.has_default_value = false
+ZONE_LOCATION_CFGS_ITEMS_FIELD.default_value = {}
+ZONE_LOCATION_CFGS_ITEMS_FIELD.message_type = ZONE_LOCATION_CFG
+ZONE_LOCATION_CFGS_ITEMS_FIELD.type = 11
+ZONE_LOCATION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ZONE_LOCATION_CFGS.name = "zone_location_cfgs"
+ZONE_LOCATION_CFGS.full_name = ".ftcfg.zone_location_cfgs"
+ZONE_LOCATION_CFGS.nested_types = {}
+ZONE_LOCATION_CFGS.enum_types = {}
+ZONE_LOCATION_CFGS.fields = {ZONE_LOCATION_CFGS_ITEMS_FIELD}
+ZONE_LOCATION_CFGS.is_extendable = false
+ZONE_LOCATION_CFGS.extensions = {}
+GIFT_GIVING_CFG_ID_FIELD.name = "id"
+GIFT_GIVING_CFG_ID_FIELD.full_name = ".ftcfg.gift_giving_cfg.id"
+GIFT_GIVING_CFG_ID_FIELD.number = 1
+GIFT_GIVING_CFG_ID_FIELD.index = 0
+GIFT_GIVING_CFG_ID_FIELD.label = 2
+GIFT_GIVING_CFG_ID_FIELD.has_default_value = false
+GIFT_GIVING_CFG_ID_FIELD.default_value = 0
+GIFT_GIVING_CFG_ID_FIELD.type = 5
+GIFT_GIVING_CFG_ID_FIELD.cpp_type = 1
+
+GIFT_GIVING_CFG_GIFT_TYPE_FIELD.name = "gift_type"
+GIFT_GIVING_CFG_GIFT_TYPE_FIELD.full_name = ".ftcfg.gift_giving_cfg.gift_type"
+GIFT_GIVING_CFG_GIFT_TYPE_FIELD.number = 2
+GIFT_GIVING_CFG_GIFT_TYPE_FIELD.index = 1
+GIFT_GIVING_CFG_GIFT_TYPE_FIELD.label = 2
+GIFT_GIVING_CFG_GIFT_TYPE_FIELD.has_default_value = false
+GIFT_GIVING_CFG_GIFT_TYPE_FIELD.default_value = 0
+GIFT_GIVING_CFG_GIFT_TYPE_FIELD.type = 5
+GIFT_GIVING_CFG_GIFT_TYPE_FIELD.cpp_type = 1
+
+GIFT_GIVING_CFG_GIFT_ITEM_ID_FIELD.name = "gift_item_id"
+GIFT_GIVING_CFG_GIFT_ITEM_ID_FIELD.full_name = ".ftcfg.gift_giving_cfg.gift_item_id"
+GIFT_GIVING_CFG_GIFT_ITEM_ID_FIELD.number = 3
+GIFT_GIVING_CFG_GIFT_ITEM_ID_FIELD.index = 2
+GIFT_GIVING_CFG_GIFT_ITEM_ID_FIELD.label = 2
+GIFT_GIVING_CFG_GIFT_ITEM_ID_FIELD.has_default_value = false
+GIFT_GIVING_CFG_GIFT_ITEM_ID_FIELD.default_value = 0
+GIFT_GIVING_CFG_GIFT_ITEM_ID_FIELD.type = 5
+GIFT_GIVING_CFG_GIFT_ITEM_ID_FIELD.cpp_type = 1
+
+GIFT_GIVING_CFG_GIVE_FRIEND_DEGREE_FIELD.name = "give_friend_degree"
+GIFT_GIVING_CFG_GIVE_FRIEND_DEGREE_FIELD.full_name = ".ftcfg.gift_giving_cfg.give_friend_degree"
+GIFT_GIVING_CFG_GIVE_FRIEND_DEGREE_FIELD.number = 4
+GIFT_GIVING_CFG_GIVE_FRIEND_DEGREE_FIELD.index = 3
+GIFT_GIVING_CFG_GIVE_FRIEND_DEGREE_FIELD.label = 2
+GIFT_GIVING_CFG_GIVE_FRIEND_DEGREE_FIELD.has_default_value = false
+GIFT_GIVING_CFG_GIVE_FRIEND_DEGREE_FIELD.default_value = 0
+GIFT_GIVING_CFG_GIVE_FRIEND_DEGREE_FIELD.type = 5
+GIFT_GIVING_CFG_GIVE_FRIEND_DEGREE_FIELD.cpp_type = 1
+
+GIFT_GIVING_CFG_IS_GIVE_FRIEBD_FIELD.name = "is_give_friebd"
+GIFT_GIVING_CFG_IS_GIVE_FRIEBD_FIELD.full_name = ".ftcfg.gift_giving_cfg.is_give_friebd"
+GIFT_GIVING_CFG_IS_GIVE_FRIEBD_FIELD.number = 5
+GIFT_GIVING_CFG_IS_GIVE_FRIEBD_FIELD.index = 4
+GIFT_GIVING_CFG_IS_GIVE_FRIEBD_FIELD.label = 2
+GIFT_GIVING_CFG_IS_GIVE_FRIEBD_FIELD.has_default_value = false
+GIFT_GIVING_CFG_IS_GIVE_FRIEBD_FIELD.default_value = 0
+GIFT_GIVING_CFG_IS_GIVE_FRIEBD_FIELD.type = 5
+GIFT_GIVING_CFG_IS_GIVE_FRIEBD_FIELD.cpp_type = 1
+
+GIFT_GIVING_CFG_IS_GIVE_DELETE_FIELD.name = "is_give_delete"
+GIFT_GIVING_CFG_IS_GIVE_DELETE_FIELD.full_name = ".ftcfg.gift_giving_cfg.is_give_delete"
+GIFT_GIVING_CFG_IS_GIVE_DELETE_FIELD.number = 6
+GIFT_GIVING_CFG_IS_GIVE_DELETE_FIELD.index = 5
+GIFT_GIVING_CFG_IS_GIVE_DELETE_FIELD.label = 2
+GIFT_GIVING_CFG_IS_GIVE_DELETE_FIELD.has_default_value = false
+GIFT_GIVING_CFG_IS_GIVE_DELETE_FIELD.default_value = 0
+GIFT_GIVING_CFG_IS_GIVE_DELETE_FIELD.type = 5
+GIFT_GIVING_CFG_IS_GIVE_DELETE_FIELD.cpp_type = 1
+
+GIFT_GIVING_CFG.name = "gift_giving_cfg"
+GIFT_GIVING_CFG.full_name = ".ftcfg.gift_giving_cfg"
+GIFT_GIVING_CFG.nested_types = {}
+GIFT_GIVING_CFG.enum_types = {}
+GIFT_GIVING_CFG.fields = {GIFT_GIVING_CFG_ID_FIELD, GIFT_GIVING_CFG_GIFT_TYPE_FIELD, GIFT_GIVING_CFG_GIFT_ITEM_ID_FIELD, GIFT_GIVING_CFG_GIVE_FRIEND_DEGREE_FIELD, GIFT_GIVING_CFG_IS_GIVE_FRIEBD_FIELD, GIFT_GIVING_CFG_IS_GIVE_DELETE_FIELD}
+GIFT_GIVING_CFG.is_extendable = false
+GIFT_GIVING_CFG.extensions = {}
+GIFT_GIVING_CFGS_ITEMS_FIELD.name = "items"
+GIFT_GIVING_CFGS_ITEMS_FIELD.full_name = ".ftcfg.gift_giving_cfgs.items"
+GIFT_GIVING_CFGS_ITEMS_FIELD.number = 1
+GIFT_GIVING_CFGS_ITEMS_FIELD.index = 0
+GIFT_GIVING_CFGS_ITEMS_FIELD.label = 3
+GIFT_GIVING_CFGS_ITEMS_FIELD.has_default_value = false
+GIFT_GIVING_CFGS_ITEMS_FIELD.default_value = {}
+GIFT_GIVING_CFGS_ITEMS_FIELD.message_type = GIFT_GIVING_CFG
+GIFT_GIVING_CFGS_ITEMS_FIELD.type = 11
+GIFT_GIVING_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GIFT_GIVING_CFGS.name = "gift_giving_cfgs"
+GIFT_GIVING_CFGS.full_name = ".ftcfg.gift_giving_cfgs"
+GIFT_GIVING_CFGS.nested_types = {}
+GIFT_GIVING_CFGS.enum_types = {}
+GIFT_GIVING_CFGS.fields = {GIFT_GIVING_CFGS_ITEMS_FIELD}
+GIFT_GIVING_CFGS.is_extendable = false
+GIFT_GIVING_CFGS.extensions = {}
+FRIEND_TITLE_CFG_ID_FIELD.name = "id"
+FRIEND_TITLE_CFG_ID_FIELD.full_name = ".ftcfg.friend_title_cfg.id"
+FRIEND_TITLE_CFG_ID_FIELD.number = 1
+FRIEND_TITLE_CFG_ID_FIELD.index = 0
+FRIEND_TITLE_CFG_ID_FIELD.label = 2
+FRIEND_TITLE_CFG_ID_FIELD.has_default_value = false
+FRIEND_TITLE_CFG_ID_FIELD.default_value = 0
+FRIEND_TITLE_CFG_ID_FIELD.type = 5
+FRIEND_TITLE_CFG_ID_FIELD.cpp_type = 1
+
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LEVEL_FIELD.name = "friend_degree_level"
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LEVEL_FIELD.full_name = ".ftcfg.friend_title_cfg.friend_degree_level"
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LEVEL_FIELD.number = 2
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LEVEL_FIELD.index = 1
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LEVEL_FIELD.label = 2
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LEVEL_FIELD.has_default_value = false
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LEVEL_FIELD.default_value = 0
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LEVEL_FIELD.type = 5
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LEVEL_FIELD.cpp_type = 1
+
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LANGUAGEID_FIELD.name = "friend_degree_languageid"
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LANGUAGEID_FIELD.full_name = ".ftcfg.friend_title_cfg.friend_degree_languageid"
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LANGUAGEID_FIELD.number = 3
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LANGUAGEID_FIELD.index = 2
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LANGUAGEID_FIELD.label = 2
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LANGUAGEID_FIELD.has_default_value = false
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LANGUAGEID_FIELD.default_value = 0
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LANGUAGEID_FIELD.type = 5
+FRIEND_TITLE_CFG_FRIEND_DEGREE_LANGUAGEID_FIELD.cpp_type = 1
+
+FRIEND_TITLE_CFG_NEED_FRIEND_DEGREE_FIELD.name = "need_friend_degree"
+FRIEND_TITLE_CFG_NEED_FRIEND_DEGREE_FIELD.full_name = ".ftcfg.friend_title_cfg.need_friend_degree"
+FRIEND_TITLE_CFG_NEED_FRIEND_DEGREE_FIELD.number = 4
+FRIEND_TITLE_CFG_NEED_FRIEND_DEGREE_FIELD.index = 3
+FRIEND_TITLE_CFG_NEED_FRIEND_DEGREE_FIELD.label = 2
+FRIEND_TITLE_CFG_NEED_FRIEND_DEGREE_FIELD.has_default_value = false
+FRIEND_TITLE_CFG_NEED_FRIEND_DEGREE_FIELD.default_value = 0
+FRIEND_TITLE_CFG_NEED_FRIEND_DEGREE_FIELD.type = 5
+FRIEND_TITLE_CFG_NEED_FRIEND_DEGREE_FIELD.cpp_type = 1
+
+FRIEND_TITLE_CFG.name = "friend_title_cfg"
+FRIEND_TITLE_CFG.full_name = ".ftcfg.friend_title_cfg"
+FRIEND_TITLE_CFG.nested_types = {}
+FRIEND_TITLE_CFG.enum_types = {}
+FRIEND_TITLE_CFG.fields = {FRIEND_TITLE_CFG_ID_FIELD, FRIEND_TITLE_CFG_FRIEND_DEGREE_LEVEL_FIELD, FRIEND_TITLE_CFG_FRIEND_DEGREE_LANGUAGEID_FIELD, FRIEND_TITLE_CFG_NEED_FRIEND_DEGREE_FIELD}
+FRIEND_TITLE_CFG.is_extendable = false
+FRIEND_TITLE_CFG.extensions = {}
+FRIEND_TITLE_CFGS_ITEMS_FIELD.name = "items"
+FRIEND_TITLE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.friend_title_cfgs.items"
+FRIEND_TITLE_CFGS_ITEMS_FIELD.number = 1
+FRIEND_TITLE_CFGS_ITEMS_FIELD.index = 0
+FRIEND_TITLE_CFGS_ITEMS_FIELD.label = 3
+FRIEND_TITLE_CFGS_ITEMS_FIELD.has_default_value = false
+FRIEND_TITLE_CFGS_ITEMS_FIELD.default_value = {}
+FRIEND_TITLE_CFGS_ITEMS_FIELD.message_type = FRIEND_TITLE_CFG
+FRIEND_TITLE_CFGS_ITEMS_FIELD.type = 11
+FRIEND_TITLE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+FRIEND_TITLE_CFGS.name = "friend_title_cfgs"
+FRIEND_TITLE_CFGS.full_name = ".ftcfg.friend_title_cfgs"
+FRIEND_TITLE_CFGS.nested_types = {}
+FRIEND_TITLE_CFGS.enum_types = {}
+FRIEND_TITLE_CFGS.fields = {FRIEND_TITLE_CFGS_ITEMS_FIELD}
+FRIEND_TITLE_CFGS.is_extendable = false
+FRIEND_TITLE_CFGS.extensions = {}
+FATE_VALUE_REWARD_CFG_FATE_ID_FIELD.name = "fate_id"
+FATE_VALUE_REWARD_CFG_FATE_ID_FIELD.full_name = ".ftcfg.fate_value_reward_cfg.fate_id"
+FATE_VALUE_REWARD_CFG_FATE_ID_FIELD.number = 1
+FATE_VALUE_REWARD_CFG_FATE_ID_FIELD.index = 0
+FATE_VALUE_REWARD_CFG_FATE_ID_FIELD.label = 2
+FATE_VALUE_REWARD_CFG_FATE_ID_FIELD.has_default_value = false
+FATE_VALUE_REWARD_CFG_FATE_ID_FIELD.default_value = 0
+FATE_VALUE_REWARD_CFG_FATE_ID_FIELD.type = 5
+FATE_VALUE_REWARD_CFG_FATE_ID_FIELD.cpp_type = 1
+
+FATE_VALUE_REWARD_CFG_NEED_FATE_VALUE_FIELD.name = "need_fate_value"
+FATE_VALUE_REWARD_CFG_NEED_FATE_VALUE_FIELD.full_name = ".ftcfg.fate_value_reward_cfg.need_fate_value"
+FATE_VALUE_REWARD_CFG_NEED_FATE_VALUE_FIELD.number = 2
+FATE_VALUE_REWARD_CFG_NEED_FATE_VALUE_FIELD.index = 1
+FATE_VALUE_REWARD_CFG_NEED_FATE_VALUE_FIELD.label = 2
+FATE_VALUE_REWARD_CFG_NEED_FATE_VALUE_FIELD.has_default_value = false
+FATE_VALUE_REWARD_CFG_NEED_FATE_VALUE_FIELD.default_value = 0
+FATE_VALUE_REWARD_CFG_NEED_FATE_VALUE_FIELD.type = 5
+FATE_VALUE_REWARD_CFG_NEED_FATE_VALUE_FIELD.cpp_type = 1
+
+FATE_VALUE_REWARD_CFG_FATE_ITEM_ID_FIELD.name = "fate_item_id"
+FATE_VALUE_REWARD_CFG_FATE_ITEM_ID_FIELD.full_name = ".ftcfg.fate_value_reward_cfg.fate_item_id"
+FATE_VALUE_REWARD_CFG_FATE_ITEM_ID_FIELD.number = 3
+FATE_VALUE_REWARD_CFG_FATE_ITEM_ID_FIELD.index = 2
+FATE_VALUE_REWARD_CFG_FATE_ITEM_ID_FIELD.label = 2
+FATE_VALUE_REWARD_CFG_FATE_ITEM_ID_FIELD.has_default_value = false
+FATE_VALUE_REWARD_CFG_FATE_ITEM_ID_FIELD.default_value = 0
+FATE_VALUE_REWARD_CFG_FATE_ITEM_ID_FIELD.type = 5
+FATE_VALUE_REWARD_CFG_FATE_ITEM_ID_FIELD.cpp_type = 1
+
+FATE_VALUE_REWARD_CFG_FATE_ITEM_NUMBER_FIELD.name = "fate_item_number"
+FATE_VALUE_REWARD_CFG_FATE_ITEM_NUMBER_FIELD.full_name = ".ftcfg.fate_value_reward_cfg.fate_item_number"
+FATE_VALUE_REWARD_CFG_FATE_ITEM_NUMBER_FIELD.number = 4
+FATE_VALUE_REWARD_CFG_FATE_ITEM_NUMBER_FIELD.index = 3
+FATE_VALUE_REWARD_CFG_FATE_ITEM_NUMBER_FIELD.label = 2
+FATE_VALUE_REWARD_CFG_FATE_ITEM_NUMBER_FIELD.has_default_value = false
+FATE_VALUE_REWARD_CFG_FATE_ITEM_NUMBER_FIELD.default_value = 0
+FATE_VALUE_REWARD_CFG_FATE_ITEM_NUMBER_FIELD.type = 5
+FATE_VALUE_REWARD_CFG_FATE_ITEM_NUMBER_FIELD.cpp_type = 1
+
+FATE_VALUE_REWARD_CFG.name = "fate_value_reward_cfg"
+FATE_VALUE_REWARD_CFG.full_name = ".ftcfg.fate_value_reward_cfg"
+FATE_VALUE_REWARD_CFG.nested_types = {}
+FATE_VALUE_REWARD_CFG.enum_types = {}
+FATE_VALUE_REWARD_CFG.fields = {FATE_VALUE_REWARD_CFG_FATE_ID_FIELD, FATE_VALUE_REWARD_CFG_NEED_FATE_VALUE_FIELD, FATE_VALUE_REWARD_CFG_FATE_ITEM_ID_FIELD, FATE_VALUE_REWARD_CFG_FATE_ITEM_NUMBER_FIELD}
+FATE_VALUE_REWARD_CFG.is_extendable = false
+FATE_VALUE_REWARD_CFG.extensions = {}
+FATE_VALUE_REWARD_CFGS_ITEMS_FIELD.name = "items"
+FATE_VALUE_REWARD_CFGS_ITEMS_FIELD.full_name = ".ftcfg.fate_value_reward_cfgs.items"
+FATE_VALUE_REWARD_CFGS_ITEMS_FIELD.number = 1
+FATE_VALUE_REWARD_CFGS_ITEMS_FIELD.index = 0
+FATE_VALUE_REWARD_CFGS_ITEMS_FIELD.label = 3
+FATE_VALUE_REWARD_CFGS_ITEMS_FIELD.has_default_value = false
+FATE_VALUE_REWARD_CFGS_ITEMS_FIELD.default_value = {}
+FATE_VALUE_REWARD_CFGS_ITEMS_FIELD.message_type = FATE_VALUE_REWARD_CFG
+FATE_VALUE_REWARD_CFGS_ITEMS_FIELD.type = 11
+FATE_VALUE_REWARD_CFGS_ITEMS_FIELD.cpp_type = 10
+
+FATE_VALUE_REWARD_CFGS.name = "fate_value_reward_cfgs"
+FATE_VALUE_REWARD_CFGS.full_name = ".ftcfg.fate_value_reward_cfgs"
+FATE_VALUE_REWARD_CFGS.nested_types = {}
+FATE_VALUE_REWARD_CFGS.enum_types = {}
+FATE_VALUE_REWARD_CFGS.fields = {FATE_VALUE_REWARD_CFGS_ITEMS_FIELD}
+FATE_VALUE_REWARD_CFGS.is_extendable = false
+FATE_VALUE_REWARD_CFGS.extensions = {}
+GEMSTONE_INLAY_CFG_ITEM_ID_FIELD.name = "item_id"
+GEMSTONE_INLAY_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.gemstone_inlay_cfg.item_id"
+GEMSTONE_INLAY_CFG_ITEM_ID_FIELD.number = 1
+GEMSTONE_INLAY_CFG_ITEM_ID_FIELD.index = 0
+GEMSTONE_INLAY_CFG_ITEM_ID_FIELD.label = 2
+GEMSTONE_INLAY_CFG_ITEM_ID_FIELD.has_default_value = false
+GEMSTONE_INLAY_CFG_ITEM_ID_FIELD.default_value = 0
+GEMSTONE_INLAY_CFG_ITEM_ID_FIELD.type = 5
+GEMSTONE_INLAY_CFG_ITEM_ID_FIELD.cpp_type = 1
+
+GEMSTONE_INLAY_CFG_ITEM_NUM_FIELD.name = "item_num"
+GEMSTONE_INLAY_CFG_ITEM_NUM_FIELD.full_name = ".ftcfg.gemstone_inlay_cfg.item_num"
+GEMSTONE_INLAY_CFG_ITEM_NUM_FIELD.number = 2
+GEMSTONE_INLAY_CFG_ITEM_NUM_FIELD.index = 1
+GEMSTONE_INLAY_CFG_ITEM_NUM_FIELD.label = 2
+GEMSTONE_INLAY_CFG_ITEM_NUM_FIELD.has_default_value = false
+GEMSTONE_INLAY_CFG_ITEM_NUM_FIELD.default_value = 0
+GEMSTONE_INLAY_CFG_ITEM_NUM_FIELD.type = 5
+GEMSTONE_INLAY_CFG_ITEM_NUM_FIELD.cpp_type = 1
+
+GEMSTONE_INLAY_CFG_ITEM_FAIL_NUM_FIELD.name = "item_fail_num"
+GEMSTONE_INLAY_CFG_ITEM_FAIL_NUM_FIELD.full_name = ".ftcfg.gemstone_inlay_cfg.item_fail_num"
+GEMSTONE_INLAY_CFG_ITEM_FAIL_NUM_FIELD.number = 3
+GEMSTONE_INLAY_CFG_ITEM_FAIL_NUM_FIELD.index = 2
+GEMSTONE_INLAY_CFG_ITEM_FAIL_NUM_FIELD.label = 2
+GEMSTONE_INLAY_CFG_ITEM_FAIL_NUM_FIELD.has_default_value = false
+GEMSTONE_INLAY_CFG_ITEM_FAIL_NUM_FIELD.default_value = 0
+GEMSTONE_INLAY_CFG_ITEM_FAIL_NUM_FIELD.type = 5
+GEMSTONE_INLAY_CFG_ITEM_FAIL_NUM_FIELD.cpp_type = 1
+
+GEMSTONE_INLAY_CFG_RANGE_FIELD.name = "range"
+GEMSTONE_INLAY_CFG_RANGE_FIELD.full_name = ".ftcfg.gemstone_inlay_cfg.range"
+GEMSTONE_INLAY_CFG_RANGE_FIELD.number = 4
+GEMSTONE_INLAY_CFG_RANGE_FIELD.index = 3
+GEMSTONE_INLAY_CFG_RANGE_FIELD.label = 2
+GEMSTONE_INLAY_CFG_RANGE_FIELD.has_default_value = false
+GEMSTONE_INLAY_CFG_RANGE_FIELD.default_value = 0
+GEMSTONE_INLAY_CFG_RANGE_FIELD.type = 5
+GEMSTONE_INLAY_CFG_RANGE_FIELD.cpp_type = 1
+
+GEMSTONE_INLAY_CFG_ITEM_SUC_ID_FIELD.name = "item_suc_id"
+GEMSTONE_INLAY_CFG_ITEM_SUC_ID_FIELD.full_name = ".ftcfg.gemstone_inlay_cfg.item_suc_id"
+GEMSTONE_INLAY_CFG_ITEM_SUC_ID_FIELD.number = 5
+GEMSTONE_INLAY_CFG_ITEM_SUC_ID_FIELD.index = 4
+GEMSTONE_INLAY_CFG_ITEM_SUC_ID_FIELD.label = 2
+GEMSTONE_INLAY_CFG_ITEM_SUC_ID_FIELD.has_default_value = false
+GEMSTONE_INLAY_CFG_ITEM_SUC_ID_FIELD.default_value = 0
+GEMSTONE_INLAY_CFG_ITEM_SUC_ID_FIELD.type = 5
+GEMSTONE_INLAY_CFG_ITEM_SUC_ID_FIELD.cpp_type = 1
+
+GEMSTONE_INLAY_CFG_ITEM_SUC_NUM_FIELD.name = "item_suc_num"
+GEMSTONE_INLAY_CFG_ITEM_SUC_NUM_FIELD.full_name = ".ftcfg.gemstone_inlay_cfg.item_suc_num"
+GEMSTONE_INLAY_CFG_ITEM_SUC_NUM_FIELD.number = 6
+GEMSTONE_INLAY_CFG_ITEM_SUC_NUM_FIELD.index = 5
+GEMSTONE_INLAY_CFG_ITEM_SUC_NUM_FIELD.label = 2
+GEMSTONE_INLAY_CFG_ITEM_SUC_NUM_FIELD.has_default_value = false
+GEMSTONE_INLAY_CFG_ITEM_SUC_NUM_FIELD.default_value = 0
+GEMSTONE_INLAY_CFG_ITEM_SUC_NUM_FIELD.type = 5
+GEMSTONE_INLAY_CFG_ITEM_SUC_NUM_FIELD.cpp_type = 1
+
+GEMSTONE_INLAY_CFG_ITEM_DESC_ID_FIELD.name = "item_desc_id"
+GEMSTONE_INLAY_CFG_ITEM_DESC_ID_FIELD.full_name = ".ftcfg.gemstone_inlay_cfg.item_desc_id"
+GEMSTONE_INLAY_CFG_ITEM_DESC_ID_FIELD.number = 7
+GEMSTONE_INLAY_CFG_ITEM_DESC_ID_FIELD.index = 6
+GEMSTONE_INLAY_CFG_ITEM_DESC_ID_FIELD.label = 2
+GEMSTONE_INLAY_CFG_ITEM_DESC_ID_FIELD.has_default_value = false
+GEMSTONE_INLAY_CFG_ITEM_DESC_ID_FIELD.default_value = 0
+GEMSTONE_INLAY_CFG_ITEM_DESC_ID_FIELD.type = 5
+GEMSTONE_INLAY_CFG_ITEM_DESC_ID_FIELD.cpp_type = 1
+
+GEMSTONE_INLAY_CFG.name = "gemstone_inlay_cfg"
+GEMSTONE_INLAY_CFG.full_name = ".ftcfg.gemstone_inlay_cfg"
+GEMSTONE_INLAY_CFG.nested_types = {}
+GEMSTONE_INLAY_CFG.enum_types = {}
+GEMSTONE_INLAY_CFG.fields = {GEMSTONE_INLAY_CFG_ITEM_ID_FIELD, GEMSTONE_INLAY_CFG_ITEM_NUM_FIELD, GEMSTONE_INLAY_CFG_ITEM_FAIL_NUM_FIELD, GEMSTONE_INLAY_CFG_RANGE_FIELD, GEMSTONE_INLAY_CFG_ITEM_SUC_ID_FIELD, GEMSTONE_INLAY_CFG_ITEM_SUC_NUM_FIELD, GEMSTONE_INLAY_CFG_ITEM_DESC_ID_FIELD}
+GEMSTONE_INLAY_CFG.is_extendable = false
+GEMSTONE_INLAY_CFG.extensions = {}
+GEMSTONE_INLAY_CFGS_ITEMS_FIELD.name = "items"
+GEMSTONE_INLAY_CFGS_ITEMS_FIELD.full_name = ".ftcfg.gemstone_inlay_cfgs.items"
+GEMSTONE_INLAY_CFGS_ITEMS_FIELD.number = 1
+GEMSTONE_INLAY_CFGS_ITEMS_FIELD.index = 0
+GEMSTONE_INLAY_CFGS_ITEMS_FIELD.label = 3
+GEMSTONE_INLAY_CFGS_ITEMS_FIELD.has_default_value = false
+GEMSTONE_INLAY_CFGS_ITEMS_FIELD.default_value = {}
+GEMSTONE_INLAY_CFGS_ITEMS_FIELD.message_type = GEMSTONE_INLAY_CFG
+GEMSTONE_INLAY_CFGS_ITEMS_FIELD.type = 11
+GEMSTONE_INLAY_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GEMSTONE_INLAY_CFGS.name = "gemstone_inlay_cfgs"
+GEMSTONE_INLAY_CFGS.full_name = ".ftcfg.gemstone_inlay_cfgs"
+GEMSTONE_INLAY_CFGS.nested_types = {}
+GEMSTONE_INLAY_CFGS.enum_types = {}
+GEMSTONE_INLAY_CFGS.fields = {GEMSTONE_INLAY_CFGS_ITEMS_FIELD}
+GEMSTONE_INLAY_CFGS.is_extendable = false
+GEMSTONE_INLAY_CFGS.extensions = {}
+GEMSTONE_LIST_CFG_GEM_ID_FIELD.name = "gem_id"
+GEMSTONE_LIST_CFG_GEM_ID_FIELD.full_name = ".ftcfg.gemstone_list_cfg.gem_id"
+GEMSTONE_LIST_CFG_GEM_ID_FIELD.number = 1
+GEMSTONE_LIST_CFG_GEM_ID_FIELD.index = 0
+GEMSTONE_LIST_CFG_GEM_ID_FIELD.label = 2
+GEMSTONE_LIST_CFG_GEM_ID_FIELD.has_default_value = false
+GEMSTONE_LIST_CFG_GEM_ID_FIELD.default_value = 0
+GEMSTONE_LIST_CFG_GEM_ID_FIELD.type = 5
+GEMSTONE_LIST_CFG_GEM_ID_FIELD.cpp_type = 1
+
+GEMSTONE_LIST_CFG_GEM_NAMEID_FIELD.name = "gem_nameid"
+GEMSTONE_LIST_CFG_GEM_NAMEID_FIELD.full_name = ".ftcfg.gemstone_list_cfg.gem_nameid"
+GEMSTONE_LIST_CFG_GEM_NAMEID_FIELD.number = 2
+GEMSTONE_LIST_CFG_GEM_NAMEID_FIELD.index = 1
+GEMSTONE_LIST_CFG_GEM_NAMEID_FIELD.label = 2
+GEMSTONE_LIST_CFG_GEM_NAMEID_FIELD.has_default_value = false
+GEMSTONE_LIST_CFG_GEM_NAMEID_FIELD.default_value = 0
+GEMSTONE_LIST_CFG_GEM_NAMEID_FIELD.type = 5
+GEMSTONE_LIST_CFG_GEM_NAMEID_FIELD.cpp_type = 1
+
+GEMSTONE_LIST_CFG_GEM_PICID_FIELD.name = "gem_picid"
+GEMSTONE_LIST_CFG_GEM_PICID_FIELD.full_name = ".ftcfg.gemstone_list_cfg.gem_picid"
+GEMSTONE_LIST_CFG_GEM_PICID_FIELD.number = 3
+GEMSTONE_LIST_CFG_GEM_PICID_FIELD.index = 2
+GEMSTONE_LIST_CFG_GEM_PICID_FIELD.label = 2
+GEMSTONE_LIST_CFG_GEM_PICID_FIELD.has_default_value = false
+GEMSTONE_LIST_CFG_GEM_PICID_FIELD.default_value = 0
+GEMSTONE_LIST_CFG_GEM_PICID_FIELD.type = 5
+GEMSTONE_LIST_CFG_GEM_PICID_FIELD.cpp_type = 1
+
+GEMSTONE_LIST_CFG_GEM_KNAMEID_FIELD.name = "gem_knameid"
+GEMSTONE_LIST_CFG_GEM_KNAMEID_FIELD.full_name = ".ftcfg.gemstone_list_cfg.gem_knameid"
+GEMSTONE_LIST_CFG_GEM_KNAMEID_FIELD.number = 4
+GEMSTONE_LIST_CFG_GEM_KNAMEID_FIELD.index = 3
+GEMSTONE_LIST_CFG_GEM_KNAMEID_FIELD.label = 2
+GEMSTONE_LIST_CFG_GEM_KNAMEID_FIELD.has_default_value = false
+GEMSTONE_LIST_CFG_GEM_KNAMEID_FIELD.default_value = 0
+GEMSTONE_LIST_CFG_GEM_KNAMEID_FIELD.type = 5
+GEMSTONE_LIST_CFG_GEM_KNAMEID_FIELD.cpp_type = 1
+
+GEMSTONE_LIST_CFG.name = "gemstone_list_cfg"
+GEMSTONE_LIST_CFG.full_name = ".ftcfg.gemstone_list_cfg"
+GEMSTONE_LIST_CFG.nested_types = {}
+GEMSTONE_LIST_CFG.enum_types = {}
+GEMSTONE_LIST_CFG.fields = {GEMSTONE_LIST_CFG_GEM_ID_FIELD, GEMSTONE_LIST_CFG_GEM_NAMEID_FIELD, GEMSTONE_LIST_CFG_GEM_PICID_FIELD, GEMSTONE_LIST_CFG_GEM_KNAMEID_FIELD}
+GEMSTONE_LIST_CFG.is_extendable = false
+GEMSTONE_LIST_CFG.extensions = {}
+GEMSTONE_LIST_CFGS_ITEMS_FIELD.name = "items"
+GEMSTONE_LIST_CFGS_ITEMS_FIELD.full_name = ".ftcfg.gemstone_list_cfgs.items"
+GEMSTONE_LIST_CFGS_ITEMS_FIELD.number = 1
+GEMSTONE_LIST_CFGS_ITEMS_FIELD.index = 0
+GEMSTONE_LIST_CFGS_ITEMS_FIELD.label = 3
+GEMSTONE_LIST_CFGS_ITEMS_FIELD.has_default_value = false
+GEMSTONE_LIST_CFGS_ITEMS_FIELD.default_value = {}
+GEMSTONE_LIST_CFGS_ITEMS_FIELD.message_type = GEMSTONE_LIST_CFG
+GEMSTONE_LIST_CFGS_ITEMS_FIELD.type = 11
+GEMSTONE_LIST_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GEMSTONE_LIST_CFGS.name = "gemstone_list_cfgs"
+GEMSTONE_LIST_CFGS.full_name = ".ftcfg.gemstone_list_cfgs"
+GEMSTONE_LIST_CFGS.nested_types = {}
+GEMSTONE_LIST_CFGS.enum_types = {}
+GEMSTONE_LIST_CFGS.fields = {GEMSTONE_LIST_CFGS_ITEMS_FIELD}
+GEMSTONE_LIST_CFGS.is_extendable = false
+GEMSTONE_LIST_CFGS.extensions = {}
+CHEST_DROP_CFG_ID_FIELD.name = "id"
+CHEST_DROP_CFG_ID_FIELD.full_name = ".ftcfg.chest_drop_cfg.id"
+CHEST_DROP_CFG_ID_FIELD.number = 1
+CHEST_DROP_CFG_ID_FIELD.index = 0
+CHEST_DROP_CFG_ID_FIELD.label = 2
+CHEST_DROP_CFG_ID_FIELD.has_default_value = false
+CHEST_DROP_CFG_ID_FIELD.default_value = 0
+CHEST_DROP_CFG_ID_FIELD.type = 5
+CHEST_DROP_CFG_ID_FIELD.cpp_type = 1
+
+CHEST_DROP_CFG_TYPE_FIELD.name = "type"
+CHEST_DROP_CFG_TYPE_FIELD.full_name = ".ftcfg.chest_drop_cfg.type"
+CHEST_DROP_CFG_TYPE_FIELD.number = 2
+CHEST_DROP_CFG_TYPE_FIELD.index = 1
+CHEST_DROP_CFG_TYPE_FIELD.label = 2
+CHEST_DROP_CFG_TYPE_FIELD.has_default_value = false
+CHEST_DROP_CFG_TYPE_FIELD.default_value = nil
+CHEST_DROP_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ECHESTTYPE
+CHEST_DROP_CFG_TYPE_FIELD.type = 14
+CHEST_DROP_CFG_TYPE_FIELD.cpp_type = 8
+
+CHEST_DROP_CFG_COUNT_FIELD.name = "count"
+CHEST_DROP_CFG_COUNT_FIELD.full_name = ".ftcfg.chest_drop_cfg.count"
+CHEST_DROP_CFG_COUNT_FIELD.number = 3
+CHEST_DROP_CFG_COUNT_FIELD.index = 2
+CHEST_DROP_CFG_COUNT_FIELD.label = 2
+CHEST_DROP_CFG_COUNT_FIELD.has_default_value = false
+CHEST_DROP_CFG_COUNT_FIELD.default_value = 0
+CHEST_DROP_CFG_COUNT_FIELD.type = 5
+CHEST_DROP_CFG_COUNT_FIELD.cpp_type = 1
+
+CHEST_DROP_CFG_ITEM_ID_FIELD.name = "item_id"
+CHEST_DROP_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.chest_drop_cfg.item_id"
+CHEST_DROP_CFG_ITEM_ID_FIELD.number = 4
+CHEST_DROP_CFG_ITEM_ID_FIELD.index = 3
+CHEST_DROP_CFG_ITEM_ID_FIELD.label = 2
+CHEST_DROP_CFG_ITEM_ID_FIELD.has_default_value = false
+CHEST_DROP_CFG_ITEM_ID_FIELD.default_value = 0
+CHEST_DROP_CFG_ITEM_ID_FIELD.type = 5
+CHEST_DROP_CFG_ITEM_ID_FIELD.cpp_type = 1
+
+CHEST_DROP_CFG_RES_ID_FIELD.name = "res_id"
+CHEST_DROP_CFG_RES_ID_FIELD.full_name = ".ftcfg.chest_drop_cfg.res_id"
+CHEST_DROP_CFG_RES_ID_FIELD.number = 5
+CHEST_DROP_CFG_RES_ID_FIELD.index = 4
+CHEST_DROP_CFG_RES_ID_FIELD.label = 2
+CHEST_DROP_CFG_RES_ID_FIELD.has_default_value = false
+CHEST_DROP_CFG_RES_ID_FIELD.default_value = 0
+CHEST_DROP_CFG_RES_ID_FIELD.type = 5
+CHEST_DROP_CFG_RES_ID_FIELD.cpp_type = 1
+
+CHEST_DROP_CFG_RADIUS_FIELD.name = "radius"
+CHEST_DROP_CFG_RADIUS_FIELD.full_name = ".ftcfg.chest_drop_cfg.radius"
+CHEST_DROP_CFG_RADIUS_FIELD.number = 6
+CHEST_DROP_CFG_RADIUS_FIELD.index = 5
+CHEST_DROP_CFG_RADIUS_FIELD.label = 2
+CHEST_DROP_CFG_RADIUS_FIELD.has_default_value = false
+CHEST_DROP_CFG_RADIUS_FIELD.default_value = 0.0
+CHEST_DROP_CFG_RADIUS_FIELD.type = 2
+CHEST_DROP_CFG_RADIUS_FIELD.cpp_type = 6
+
+CHEST_DROP_CFG_SPACE_ROWS_FIELD.name = "space_rows"
+CHEST_DROP_CFG_SPACE_ROWS_FIELD.full_name = ".ftcfg.chest_drop_cfg.space_rows"
+CHEST_DROP_CFG_SPACE_ROWS_FIELD.number = 7
+CHEST_DROP_CFG_SPACE_ROWS_FIELD.index = 6
+CHEST_DROP_CFG_SPACE_ROWS_FIELD.label = 2
+CHEST_DROP_CFG_SPACE_ROWS_FIELD.has_default_value = false
+CHEST_DROP_CFG_SPACE_ROWS_FIELD.default_value = 0.0
+CHEST_DROP_CFG_SPACE_ROWS_FIELD.type = 2
+CHEST_DROP_CFG_SPACE_ROWS_FIELD.cpp_type = 6
+
+CHEST_DROP_CFG_SPACE_COLS_FIELD.name = "space_cols"
+CHEST_DROP_CFG_SPACE_COLS_FIELD.full_name = ".ftcfg.chest_drop_cfg.space_cols"
+CHEST_DROP_CFG_SPACE_COLS_FIELD.number = 8
+CHEST_DROP_CFG_SPACE_COLS_FIELD.index = 7
+CHEST_DROP_CFG_SPACE_COLS_FIELD.label = 2
+CHEST_DROP_CFG_SPACE_COLS_FIELD.has_default_value = false
+CHEST_DROP_CFG_SPACE_COLS_FIELD.default_value = 0.0
+CHEST_DROP_CFG_SPACE_COLS_FIELD.type = 2
+CHEST_DROP_CFG_SPACE_COLS_FIELD.cpp_type = 6
+
+CHEST_DROP_CFG_LIVE_TIME_FIELD.name = "live_time"
+CHEST_DROP_CFG_LIVE_TIME_FIELD.full_name = ".ftcfg.chest_drop_cfg.live_time"
+CHEST_DROP_CFG_LIVE_TIME_FIELD.number = 9
+CHEST_DROP_CFG_LIVE_TIME_FIELD.index = 8
+CHEST_DROP_CFG_LIVE_TIME_FIELD.label = 2
+CHEST_DROP_CFG_LIVE_TIME_FIELD.has_default_value = false
+CHEST_DROP_CFG_LIVE_TIME_FIELD.default_value = 0
+CHEST_DROP_CFG_LIVE_TIME_FIELD.type = 5
+CHEST_DROP_CFG_LIVE_TIME_FIELD.cpp_type = 1
+
+CHEST_DROP_CFG_REFRESH_TIME_FIELD.name = "refresh_time"
+CHEST_DROP_CFG_REFRESH_TIME_FIELD.full_name = ".ftcfg.chest_drop_cfg.refresh_time"
+CHEST_DROP_CFG_REFRESH_TIME_FIELD.number = 10
+CHEST_DROP_CFG_REFRESH_TIME_FIELD.index = 9
+CHEST_DROP_CFG_REFRESH_TIME_FIELD.label = 2
+CHEST_DROP_CFG_REFRESH_TIME_FIELD.has_default_value = false
+CHEST_DROP_CFG_REFRESH_TIME_FIELD.default_value = 0
+CHEST_DROP_CFG_REFRESH_TIME_FIELD.type = 5
+CHEST_DROP_CFG_REFRESH_TIME_FIELD.cpp_type = 1
+
+CHEST_DROP_CFG.name = "chest_drop_cfg"
+CHEST_DROP_CFG.full_name = ".ftcfg.chest_drop_cfg"
+CHEST_DROP_CFG.nested_types = {}
+CHEST_DROP_CFG.enum_types = {}
+CHEST_DROP_CFG.fields = {CHEST_DROP_CFG_ID_FIELD, CHEST_DROP_CFG_TYPE_FIELD, CHEST_DROP_CFG_COUNT_FIELD, CHEST_DROP_CFG_ITEM_ID_FIELD, CHEST_DROP_CFG_RES_ID_FIELD, CHEST_DROP_CFG_RADIUS_FIELD, CHEST_DROP_CFG_SPACE_ROWS_FIELD, CHEST_DROP_CFG_SPACE_COLS_FIELD, CHEST_DROP_CFG_LIVE_TIME_FIELD, CHEST_DROP_CFG_REFRESH_TIME_FIELD}
+CHEST_DROP_CFG.is_extendable = false
+CHEST_DROP_CFG.extensions = {}
+CHEST_DROP_CFGS_ITEMS_FIELD.name = "items"
+CHEST_DROP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.chest_drop_cfgs.items"
+CHEST_DROP_CFGS_ITEMS_FIELD.number = 1
+CHEST_DROP_CFGS_ITEMS_FIELD.index = 0
+CHEST_DROP_CFGS_ITEMS_FIELD.label = 3
+CHEST_DROP_CFGS_ITEMS_FIELD.has_default_value = false
+CHEST_DROP_CFGS_ITEMS_FIELD.default_value = {}
+CHEST_DROP_CFGS_ITEMS_FIELD.message_type = CHEST_DROP_CFG
+CHEST_DROP_CFGS_ITEMS_FIELD.type = 11
+CHEST_DROP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CHEST_DROP_CFGS.name = "chest_drop_cfgs"
+CHEST_DROP_CFGS.full_name = ".ftcfg.chest_drop_cfgs"
+CHEST_DROP_CFGS.nested_types = {}
+CHEST_DROP_CFGS.enum_types = {}
+CHEST_DROP_CFGS.fields = {CHEST_DROP_CFGS_ITEMS_FIELD}
+CHEST_DROP_CFGS.is_extendable = false
+CHEST_DROP_CFGS.extensions = {}
+MINIMAP_CFG_ID_FIELD.name = "id"
+MINIMAP_CFG_ID_FIELD.full_name = ".ftcfg.minimap_cfg.id"
+MINIMAP_CFG_ID_FIELD.number = 1
+MINIMAP_CFG_ID_FIELD.index = 0
+MINIMAP_CFG_ID_FIELD.label = 2
+MINIMAP_CFG_ID_FIELD.has_default_value = false
+MINIMAP_CFG_ID_FIELD.default_value = 0
+MINIMAP_CFG_ID_FIELD.type = 5
+MINIMAP_CFG_ID_FIELD.cpp_type = 1
+
+MINIMAP_CFG_POS_X_FIELD.name = "pos_x"
+MINIMAP_CFG_POS_X_FIELD.full_name = ".ftcfg.minimap_cfg.pos_x"
+MINIMAP_CFG_POS_X_FIELD.number = 2
+MINIMAP_CFG_POS_X_FIELD.index = 1
+MINIMAP_CFG_POS_X_FIELD.label = 2
+MINIMAP_CFG_POS_X_FIELD.has_default_value = false
+MINIMAP_CFG_POS_X_FIELD.default_value = 0.0
+MINIMAP_CFG_POS_X_FIELD.type = 2
+MINIMAP_CFG_POS_X_FIELD.cpp_type = 6
+
+MINIMAP_CFG_POS_Z_FIELD.name = "pos_z"
+MINIMAP_CFG_POS_Z_FIELD.full_name = ".ftcfg.minimap_cfg.pos_z"
+MINIMAP_CFG_POS_Z_FIELD.number = 3
+MINIMAP_CFG_POS_Z_FIELD.index = 2
+MINIMAP_CFG_POS_Z_FIELD.label = 2
+MINIMAP_CFG_POS_Z_FIELD.has_default_value = false
+MINIMAP_CFG_POS_Z_FIELD.default_value = 0.0
+MINIMAP_CFG_POS_Z_FIELD.type = 2
+MINIMAP_CFG_POS_Z_FIELD.cpp_type = 6
+
+MINIMAP_CFG_WIDTH_FIELD.name = "width"
+MINIMAP_CFG_WIDTH_FIELD.full_name = ".ftcfg.minimap_cfg.width"
+MINIMAP_CFG_WIDTH_FIELD.number = 4
+MINIMAP_CFG_WIDTH_FIELD.index = 3
+MINIMAP_CFG_WIDTH_FIELD.label = 2
+MINIMAP_CFG_WIDTH_FIELD.has_default_value = false
+MINIMAP_CFG_WIDTH_FIELD.default_value = 0.0
+MINIMAP_CFG_WIDTH_FIELD.type = 2
+MINIMAP_CFG_WIDTH_FIELD.cpp_type = 6
+
+MINIMAP_CFG_HEIGHT_FIELD.name = "height"
+MINIMAP_CFG_HEIGHT_FIELD.full_name = ".ftcfg.minimap_cfg.height"
+MINIMAP_CFG_HEIGHT_FIELD.number = 5
+MINIMAP_CFG_HEIGHT_FIELD.index = 4
+MINIMAP_CFG_HEIGHT_FIELD.label = 2
+MINIMAP_CFG_HEIGHT_FIELD.has_default_value = false
+MINIMAP_CFG_HEIGHT_FIELD.default_value = 0.0
+MINIMAP_CFG_HEIGHT_FIELD.type = 2
+MINIMAP_CFG_HEIGHT_FIELD.cpp_type = 6
+
+MINIMAP_CFG_TEX_WIDTH_FIELD.name = "tex_width"
+MINIMAP_CFG_TEX_WIDTH_FIELD.full_name = ".ftcfg.minimap_cfg.tex_width"
+MINIMAP_CFG_TEX_WIDTH_FIELD.number = 6
+MINIMAP_CFG_TEX_WIDTH_FIELD.index = 5
+MINIMAP_CFG_TEX_WIDTH_FIELD.label = 2
+MINIMAP_CFG_TEX_WIDTH_FIELD.has_default_value = false
+MINIMAP_CFG_TEX_WIDTH_FIELD.default_value = 0.0
+MINIMAP_CFG_TEX_WIDTH_FIELD.type = 2
+MINIMAP_CFG_TEX_WIDTH_FIELD.cpp_type = 6
+
+MINIMAP_CFG_TEX_HEIGHT_FIELD.name = "tex_height"
+MINIMAP_CFG_TEX_HEIGHT_FIELD.full_name = ".ftcfg.minimap_cfg.tex_height"
+MINIMAP_CFG_TEX_HEIGHT_FIELD.number = 7
+MINIMAP_CFG_TEX_HEIGHT_FIELD.index = 6
+MINIMAP_CFG_TEX_HEIGHT_FIELD.label = 2
+MINIMAP_CFG_TEX_HEIGHT_FIELD.has_default_value = false
+MINIMAP_CFG_TEX_HEIGHT_FIELD.default_value = 0.0
+MINIMAP_CFG_TEX_HEIGHT_FIELD.type = 2
+MINIMAP_CFG_TEX_HEIGHT_FIELD.cpp_type = 6
+
+MINIMAP_CFG_RES_ID_FIELD.name = "res_id"
+MINIMAP_CFG_RES_ID_FIELD.full_name = ".ftcfg.minimap_cfg.res_id"
+MINIMAP_CFG_RES_ID_FIELD.number = 8
+MINIMAP_CFG_RES_ID_FIELD.index = 7
+MINIMAP_CFG_RES_ID_FIELD.label = 2
+MINIMAP_CFG_RES_ID_FIELD.has_default_value = false
+MINIMAP_CFG_RES_ID_FIELD.default_value = 0
+MINIMAP_CFG_RES_ID_FIELD.type = 5
+MINIMAP_CFG_RES_ID_FIELD.cpp_type = 1
+
+MINIMAP_CFG_ROTATION_FIELD.name = "rotation"
+MINIMAP_CFG_ROTATION_FIELD.full_name = ".ftcfg.minimap_cfg.rotation"
+MINIMAP_CFG_ROTATION_FIELD.number = 9
+MINIMAP_CFG_ROTATION_FIELD.index = 8
+MINIMAP_CFG_ROTATION_FIELD.label = 2
+MINIMAP_CFG_ROTATION_FIELD.has_default_value = false
+MINIMAP_CFG_ROTATION_FIELD.default_value = 0.0
+MINIMAP_CFG_ROTATION_FIELD.type = 2
+MINIMAP_CFG_ROTATION_FIELD.cpp_type = 6
+
+MINIMAP_CFG_MINIMAP_RADIUS_FIELD.name = "minimap_radius"
+MINIMAP_CFG_MINIMAP_RADIUS_FIELD.full_name = ".ftcfg.minimap_cfg.minimap_radius"
+MINIMAP_CFG_MINIMAP_RADIUS_FIELD.number = 10
+MINIMAP_CFG_MINIMAP_RADIUS_FIELD.index = 9
+MINIMAP_CFG_MINIMAP_RADIUS_FIELD.label = 2
+MINIMAP_CFG_MINIMAP_RADIUS_FIELD.has_default_value = false
+MINIMAP_CFG_MINIMAP_RADIUS_FIELD.default_value = 0.0
+MINIMAP_CFG_MINIMAP_RADIUS_FIELD.type = 2
+MINIMAP_CFG_MINIMAP_RADIUS_FIELD.cpp_type = 6
+
+MINIMAP_CFG.name = "minimap_cfg"
+MINIMAP_CFG.full_name = ".ftcfg.minimap_cfg"
+MINIMAP_CFG.nested_types = {}
+MINIMAP_CFG.enum_types = {}
+MINIMAP_CFG.fields = {MINIMAP_CFG_ID_FIELD, MINIMAP_CFG_POS_X_FIELD, MINIMAP_CFG_POS_Z_FIELD, MINIMAP_CFG_WIDTH_FIELD, MINIMAP_CFG_HEIGHT_FIELD, MINIMAP_CFG_TEX_WIDTH_FIELD, MINIMAP_CFG_TEX_HEIGHT_FIELD, MINIMAP_CFG_RES_ID_FIELD, MINIMAP_CFG_ROTATION_FIELD, MINIMAP_CFG_MINIMAP_RADIUS_FIELD}
+MINIMAP_CFG.is_extendable = false
+MINIMAP_CFG.extensions = {}
+MINIMAP_CFGS_ITEMS_FIELD.name = "items"
+MINIMAP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.minimap_cfgs.items"
+MINIMAP_CFGS_ITEMS_FIELD.number = 1
+MINIMAP_CFGS_ITEMS_FIELD.index = 0
+MINIMAP_CFGS_ITEMS_FIELD.label = 3
+MINIMAP_CFGS_ITEMS_FIELD.has_default_value = false
+MINIMAP_CFGS_ITEMS_FIELD.default_value = {}
+MINIMAP_CFGS_ITEMS_FIELD.message_type = MINIMAP_CFG
+MINIMAP_CFGS_ITEMS_FIELD.type = 11
+MINIMAP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MINIMAP_CFGS.name = "minimap_cfgs"
+MINIMAP_CFGS.full_name = ".ftcfg.minimap_cfgs"
+MINIMAP_CFGS.nested_types = {}
+MINIMAP_CFGS.enum_types = {}
+MINIMAP_CFGS.fields = {MINIMAP_CFGS_ITEMS_FIELD}
+MINIMAP_CFGS.is_extendable = false
+MINIMAP_CFGS.extensions = {}
+TREASURE_ROOMS_CFG_GROUPID_FIELD.name = "groupid"
+TREASURE_ROOMS_CFG_GROUPID_FIELD.full_name = ".ftcfg.treasure_rooms_cfg.groupid"
+TREASURE_ROOMS_CFG_GROUPID_FIELD.number = 1
+TREASURE_ROOMS_CFG_GROUPID_FIELD.index = 0
+TREASURE_ROOMS_CFG_GROUPID_FIELD.label = 2
+TREASURE_ROOMS_CFG_GROUPID_FIELD.has_default_value = false
+TREASURE_ROOMS_CFG_GROUPID_FIELD.default_value = 0
+TREASURE_ROOMS_CFG_GROUPID_FIELD.type = 5
+TREASURE_ROOMS_CFG_GROUPID_FIELD.cpp_type = 1
+
+TREASURE_ROOMS_CFG_AREA_ID_FIELD.name = "area_id"
+TREASURE_ROOMS_CFG_AREA_ID_FIELD.full_name = ".ftcfg.treasure_rooms_cfg.area_id"
+TREASURE_ROOMS_CFG_AREA_ID_FIELD.number = 2
+TREASURE_ROOMS_CFG_AREA_ID_FIELD.index = 1
+TREASURE_ROOMS_CFG_AREA_ID_FIELD.label = 2
+TREASURE_ROOMS_CFG_AREA_ID_FIELD.has_default_value = false
+TREASURE_ROOMS_CFG_AREA_ID_FIELD.default_value = 0
+TREASURE_ROOMS_CFG_AREA_ID_FIELD.type = 5
+TREASURE_ROOMS_CFG_AREA_ID_FIELD.cpp_type = 1
+
+TREASURE_ROOMS_CFG_RED_NUM_FIELD.name = "red_num"
+TREASURE_ROOMS_CFG_RED_NUM_FIELD.full_name = ".ftcfg.treasure_rooms_cfg.red_num"
+TREASURE_ROOMS_CFG_RED_NUM_FIELD.number = 3
+TREASURE_ROOMS_CFG_RED_NUM_FIELD.index = 2
+TREASURE_ROOMS_CFG_RED_NUM_FIELD.label = 2
+TREASURE_ROOMS_CFG_RED_NUM_FIELD.has_default_value = false
+TREASURE_ROOMS_CFG_RED_NUM_FIELD.default_value = 0
+TREASURE_ROOMS_CFG_RED_NUM_FIELD.type = 5
+TREASURE_ROOMS_CFG_RED_NUM_FIELD.cpp_type = 1
+
+TREASURE_ROOMS_CFG_BLUE_NUM_FIELD.name = "blue_num"
+TREASURE_ROOMS_CFG_BLUE_NUM_FIELD.full_name = ".ftcfg.treasure_rooms_cfg.blue_num"
+TREASURE_ROOMS_CFG_BLUE_NUM_FIELD.number = 4
+TREASURE_ROOMS_CFG_BLUE_NUM_FIELD.index = 3
+TREASURE_ROOMS_CFG_BLUE_NUM_FIELD.label = 2
+TREASURE_ROOMS_CFG_BLUE_NUM_FIELD.has_default_value = false
+TREASURE_ROOMS_CFG_BLUE_NUM_FIELD.default_value = 0
+TREASURE_ROOMS_CFG_BLUE_NUM_FIELD.type = 5
+TREASURE_ROOMS_CFG_BLUE_NUM_FIELD.cpp_type = 1
+
+TREASURE_ROOMS_CFG_MIN_LEVEL_FIELD.name = "min_level"
+TREASURE_ROOMS_CFG_MIN_LEVEL_FIELD.full_name = ".ftcfg.treasure_rooms_cfg.min_level"
+TREASURE_ROOMS_CFG_MIN_LEVEL_FIELD.number = 5
+TREASURE_ROOMS_CFG_MIN_LEVEL_FIELD.index = 4
+TREASURE_ROOMS_CFG_MIN_LEVEL_FIELD.label = 2
+TREASURE_ROOMS_CFG_MIN_LEVEL_FIELD.has_default_value = false
+TREASURE_ROOMS_CFG_MIN_LEVEL_FIELD.default_value = 0
+TREASURE_ROOMS_CFG_MIN_LEVEL_FIELD.type = 5
+TREASURE_ROOMS_CFG_MIN_LEVEL_FIELD.cpp_type = 1
+
+TREASURE_ROOMS_CFG_MAX_LEVEL_FIELD.name = "max_level"
+TREASURE_ROOMS_CFG_MAX_LEVEL_FIELD.full_name = ".ftcfg.treasure_rooms_cfg.max_level"
+TREASURE_ROOMS_CFG_MAX_LEVEL_FIELD.number = 6
+TREASURE_ROOMS_CFG_MAX_LEVEL_FIELD.index = 5
+TREASURE_ROOMS_CFG_MAX_LEVEL_FIELD.label = 2
+TREASURE_ROOMS_CFG_MAX_LEVEL_FIELD.has_default_value = false
+TREASURE_ROOMS_CFG_MAX_LEVEL_FIELD.default_value = 0
+TREASURE_ROOMS_CFG_MAX_LEVEL_FIELD.type = 5
+TREASURE_ROOMS_CFG_MAX_LEVEL_FIELD.cpp_type = 1
+
+TREASURE_ROOMS_CFG.name = "treasure_rooms_cfg"
+TREASURE_ROOMS_CFG.full_name = ".ftcfg.treasure_rooms_cfg"
+TREASURE_ROOMS_CFG.nested_types = {}
+TREASURE_ROOMS_CFG.enum_types = {}
+TREASURE_ROOMS_CFG.fields = {TREASURE_ROOMS_CFG_GROUPID_FIELD, TREASURE_ROOMS_CFG_AREA_ID_FIELD, TREASURE_ROOMS_CFG_RED_NUM_FIELD, TREASURE_ROOMS_CFG_BLUE_NUM_FIELD, TREASURE_ROOMS_CFG_MIN_LEVEL_FIELD, TREASURE_ROOMS_CFG_MAX_LEVEL_FIELD}
+TREASURE_ROOMS_CFG.is_extendable = false
+TREASURE_ROOMS_CFG.extensions = {}
+TREASURE_ROOMS_CFGS_ITEMS_FIELD.name = "items"
+TREASURE_ROOMS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.treasure_rooms_cfgs.items"
+TREASURE_ROOMS_CFGS_ITEMS_FIELD.number = 1
+TREASURE_ROOMS_CFGS_ITEMS_FIELD.index = 0
+TREASURE_ROOMS_CFGS_ITEMS_FIELD.label = 3
+TREASURE_ROOMS_CFGS_ITEMS_FIELD.has_default_value = false
+TREASURE_ROOMS_CFGS_ITEMS_FIELD.default_value = {}
+TREASURE_ROOMS_CFGS_ITEMS_FIELD.message_type = TREASURE_ROOMS_CFG
+TREASURE_ROOMS_CFGS_ITEMS_FIELD.type = 11
+TREASURE_ROOMS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TREASURE_ROOMS_CFGS.name = "treasure_rooms_cfgs"
+TREASURE_ROOMS_CFGS.full_name = ".ftcfg.treasure_rooms_cfgs"
+TREASURE_ROOMS_CFGS.nested_types = {}
+TREASURE_ROOMS_CFGS.enum_types = {}
+TREASURE_ROOMS_CFGS.fields = {TREASURE_ROOMS_CFGS_ITEMS_FIELD}
+TREASURE_ROOMS_CFGS.is_extendable = false
+TREASURE_ROOMS_CFGS.extensions = {}
+CRUSADE_BASE_CFG_LEVEL_FIELD.name = "level"
+CRUSADE_BASE_CFG_LEVEL_FIELD.full_name = ".ftcfg.crusade_base_cfg.level"
+CRUSADE_BASE_CFG_LEVEL_FIELD.number = 1
+CRUSADE_BASE_CFG_LEVEL_FIELD.index = 0
+CRUSADE_BASE_CFG_LEVEL_FIELD.label = 2
+CRUSADE_BASE_CFG_LEVEL_FIELD.has_default_value = false
+CRUSADE_BASE_CFG_LEVEL_FIELD.default_value = 0
+CRUSADE_BASE_CFG_LEVEL_FIELD.type = 5
+CRUSADE_BASE_CFG_LEVEL_FIELD.cpp_type = 1
+
+CRUSADE_BASE_CFG_DESC_FIELD.name = "desc"
+CRUSADE_BASE_CFG_DESC_FIELD.full_name = ".ftcfg.crusade_base_cfg.desc"
+CRUSADE_BASE_CFG_DESC_FIELD.number = 2
+CRUSADE_BASE_CFG_DESC_FIELD.index = 1
+CRUSADE_BASE_CFG_DESC_FIELD.label = 2
+CRUSADE_BASE_CFG_DESC_FIELD.has_default_value = false
+CRUSADE_BASE_CFG_DESC_FIELD.default_value = ""
+CRUSADE_BASE_CFG_DESC_FIELD.type = 9
+CRUSADE_BASE_CFG_DESC_FIELD.cpp_type = 9
+
+CRUSADE_BASE_CFG_SCENE_ID_FIELD.name = "scene_id"
+CRUSADE_BASE_CFG_SCENE_ID_FIELD.full_name = ".ftcfg.crusade_base_cfg.scene_id"
+CRUSADE_BASE_CFG_SCENE_ID_FIELD.number = 3
+CRUSADE_BASE_CFG_SCENE_ID_FIELD.index = 2
+CRUSADE_BASE_CFG_SCENE_ID_FIELD.label = 2
+CRUSADE_BASE_CFG_SCENE_ID_FIELD.has_default_value = false
+CRUSADE_BASE_CFG_SCENE_ID_FIELD.default_value = 0
+CRUSADE_BASE_CFG_SCENE_ID_FIELD.type = 5
+CRUSADE_BASE_CFG_SCENE_ID_FIELD.cpp_type = 1
+
+CRUSADE_BASE_CFG_NPC_ID_FIELD.name = "npc_id"
+CRUSADE_BASE_CFG_NPC_ID_FIELD.full_name = ".ftcfg.crusade_base_cfg.npc_id"
+CRUSADE_BASE_CFG_NPC_ID_FIELD.number = 4
+CRUSADE_BASE_CFG_NPC_ID_FIELD.index = 3
+CRUSADE_BASE_CFG_NPC_ID_FIELD.label = 3
+CRUSADE_BASE_CFG_NPC_ID_FIELD.has_default_value = false
+CRUSADE_BASE_CFG_NPC_ID_FIELD.default_value = {}
+CRUSADE_BASE_CFG_NPC_ID_FIELD.type = 5
+CRUSADE_BASE_CFG_NPC_ID_FIELD.cpp_type = 1
+
+CRUSADE_BASE_CFG_GROUP_ID_FIELD.name = "group_id"
+CRUSADE_BASE_CFG_GROUP_ID_FIELD.full_name = ".ftcfg.crusade_base_cfg.group_id"
+CRUSADE_BASE_CFG_GROUP_ID_FIELD.number = 5
+CRUSADE_BASE_CFG_GROUP_ID_FIELD.index = 4
+CRUSADE_BASE_CFG_GROUP_ID_FIELD.label = 2
+CRUSADE_BASE_CFG_GROUP_ID_FIELD.has_default_value = false
+CRUSADE_BASE_CFG_GROUP_ID_FIELD.default_value = 0
+CRUSADE_BASE_CFG_GROUP_ID_FIELD.type = 5
+CRUSADE_BASE_CFG_GROUP_ID_FIELD.cpp_type = 1
+
+CRUSADE_BASE_CFG.name = "crusade_base_cfg"
+CRUSADE_BASE_CFG.full_name = ".ftcfg.crusade_base_cfg"
+CRUSADE_BASE_CFG.nested_types = {}
+CRUSADE_BASE_CFG.enum_types = {}
+CRUSADE_BASE_CFG.fields = {CRUSADE_BASE_CFG_LEVEL_FIELD, CRUSADE_BASE_CFG_DESC_FIELD, CRUSADE_BASE_CFG_SCENE_ID_FIELD, CRUSADE_BASE_CFG_NPC_ID_FIELD, CRUSADE_BASE_CFG_GROUP_ID_FIELD}
+CRUSADE_BASE_CFG.is_extendable = false
+CRUSADE_BASE_CFG.extensions = {}
+CRUSADE_BASE_CFGS_ITEMS_FIELD.name = "items"
+CRUSADE_BASE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.crusade_base_cfgs.items"
+CRUSADE_BASE_CFGS_ITEMS_FIELD.number = 1
+CRUSADE_BASE_CFGS_ITEMS_FIELD.index = 0
+CRUSADE_BASE_CFGS_ITEMS_FIELD.label = 3
+CRUSADE_BASE_CFGS_ITEMS_FIELD.has_default_value = false
+CRUSADE_BASE_CFGS_ITEMS_FIELD.default_value = {}
+CRUSADE_BASE_CFGS_ITEMS_FIELD.message_type = CRUSADE_BASE_CFG
+CRUSADE_BASE_CFGS_ITEMS_FIELD.type = 11
+CRUSADE_BASE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CRUSADE_BASE_CFGS.name = "crusade_base_cfgs"
+CRUSADE_BASE_CFGS.full_name = ".ftcfg.crusade_base_cfgs"
+CRUSADE_BASE_CFGS.nested_types = {}
+CRUSADE_BASE_CFGS.enum_types = {}
+CRUSADE_BASE_CFGS.fields = {CRUSADE_BASE_CFGS_ITEMS_FIELD}
+CRUSADE_BASE_CFGS.is_extendable = false
+CRUSADE_BASE_CFGS.extensions = {}
+CRUSADE_DUNGON_CFG_NPCID_FIELD.name = "npcid"
+CRUSADE_DUNGON_CFG_NPCID_FIELD.full_name = ".ftcfg.crusade_dungon_cfg.npcid"
+CRUSADE_DUNGON_CFG_NPCID_FIELD.number = 1
+CRUSADE_DUNGON_CFG_NPCID_FIELD.index = 0
+CRUSADE_DUNGON_CFG_NPCID_FIELD.label = 2
+CRUSADE_DUNGON_CFG_NPCID_FIELD.has_default_value = false
+CRUSADE_DUNGON_CFG_NPCID_FIELD.default_value = 0
+CRUSADE_DUNGON_CFG_NPCID_FIELD.type = 5
+CRUSADE_DUNGON_CFG_NPCID_FIELD.cpp_type = 1
+
+CRUSADE_DUNGON_CFG_MAP_ID_FIELD.name = "map_id"
+CRUSADE_DUNGON_CFG_MAP_ID_FIELD.full_name = ".ftcfg.crusade_dungon_cfg.map_id"
+CRUSADE_DUNGON_CFG_MAP_ID_FIELD.number = 2
+CRUSADE_DUNGON_CFG_MAP_ID_FIELD.index = 1
+CRUSADE_DUNGON_CFG_MAP_ID_FIELD.label = 3
+CRUSADE_DUNGON_CFG_MAP_ID_FIELD.has_default_value = false
+CRUSADE_DUNGON_CFG_MAP_ID_FIELD.default_value = {}
+CRUSADE_DUNGON_CFG_MAP_ID_FIELD.type = 5
+CRUSADE_DUNGON_CFG_MAP_ID_FIELD.cpp_type = 1
+
+CRUSADE_DUNGON_CFG_NPC_STAGETYPE_FIELD.name = "npc_stagetype"
+CRUSADE_DUNGON_CFG_NPC_STAGETYPE_FIELD.full_name = ".ftcfg.crusade_dungon_cfg.npc_stagetype"
+CRUSADE_DUNGON_CFG_NPC_STAGETYPE_FIELD.number = 3
+CRUSADE_DUNGON_CFG_NPC_STAGETYPE_FIELD.index = 2
+CRUSADE_DUNGON_CFG_NPC_STAGETYPE_FIELD.label = 2
+CRUSADE_DUNGON_CFG_NPC_STAGETYPE_FIELD.has_default_value = false
+CRUSADE_DUNGON_CFG_NPC_STAGETYPE_FIELD.default_value = 0
+CRUSADE_DUNGON_CFG_NPC_STAGETYPE_FIELD.type = 5
+CRUSADE_DUNGON_CFG_NPC_STAGETYPE_FIELD.cpp_type = 1
+
+CRUSADE_DUNGON_CFG_REWARD_ID_FIELD.name = "reward_id"
+CRUSADE_DUNGON_CFG_REWARD_ID_FIELD.full_name = ".ftcfg.crusade_dungon_cfg.reward_id"
+CRUSADE_DUNGON_CFG_REWARD_ID_FIELD.number = 4
+CRUSADE_DUNGON_CFG_REWARD_ID_FIELD.index = 3
+CRUSADE_DUNGON_CFG_REWARD_ID_FIELD.label = 2
+CRUSADE_DUNGON_CFG_REWARD_ID_FIELD.has_default_value = false
+CRUSADE_DUNGON_CFG_REWARD_ID_FIELD.default_value = 0
+CRUSADE_DUNGON_CFG_REWARD_ID_FIELD.type = 5
+CRUSADE_DUNGON_CFG_REWARD_ID_FIELD.cpp_type = 1
+
+CRUSADE_DUNGON_CFG_BIRTH_X_FIELD.name = "birth_x"
+CRUSADE_DUNGON_CFG_BIRTH_X_FIELD.full_name = ".ftcfg.crusade_dungon_cfg.birth_x"
+CRUSADE_DUNGON_CFG_BIRTH_X_FIELD.number = 5
+CRUSADE_DUNGON_CFG_BIRTH_X_FIELD.index = 4
+CRUSADE_DUNGON_CFG_BIRTH_X_FIELD.label = 3
+CRUSADE_DUNGON_CFG_BIRTH_X_FIELD.has_default_value = false
+CRUSADE_DUNGON_CFG_BIRTH_X_FIELD.default_value = {}
+CRUSADE_DUNGON_CFG_BIRTH_X_FIELD.type = 2
+CRUSADE_DUNGON_CFG_BIRTH_X_FIELD.cpp_type = 6
+
+CRUSADE_DUNGON_CFG_BIRTH_Y_FIELD.name = "birth_y"
+CRUSADE_DUNGON_CFG_BIRTH_Y_FIELD.full_name = ".ftcfg.crusade_dungon_cfg.birth_y"
+CRUSADE_DUNGON_CFG_BIRTH_Y_FIELD.number = 6
+CRUSADE_DUNGON_CFG_BIRTH_Y_FIELD.index = 5
+CRUSADE_DUNGON_CFG_BIRTH_Y_FIELD.label = 3
+CRUSADE_DUNGON_CFG_BIRTH_Y_FIELD.has_default_value = false
+CRUSADE_DUNGON_CFG_BIRTH_Y_FIELD.default_value = {}
+CRUSADE_DUNGON_CFG_BIRTH_Y_FIELD.type = 2
+CRUSADE_DUNGON_CFG_BIRTH_Y_FIELD.cpp_type = 6
+
+CRUSADE_DUNGON_CFG_BIRTH_Z_FIELD.name = "birth_z"
+CRUSADE_DUNGON_CFG_BIRTH_Z_FIELD.full_name = ".ftcfg.crusade_dungon_cfg.birth_z"
+CRUSADE_DUNGON_CFG_BIRTH_Z_FIELD.number = 7
+CRUSADE_DUNGON_CFG_BIRTH_Z_FIELD.index = 6
+CRUSADE_DUNGON_CFG_BIRTH_Z_FIELD.label = 3
+CRUSADE_DUNGON_CFG_BIRTH_Z_FIELD.has_default_value = false
+CRUSADE_DUNGON_CFG_BIRTH_Z_FIELD.default_value = {}
+CRUSADE_DUNGON_CFG_BIRTH_Z_FIELD.type = 2
+CRUSADE_DUNGON_CFG_BIRTH_Z_FIELD.cpp_type = 6
+
+CRUSADE_DUNGON_CFG_DIFFICULT_FIELD.name = "difficult"
+CRUSADE_DUNGON_CFG_DIFFICULT_FIELD.full_name = ".ftcfg.crusade_dungon_cfg.difficult"
+CRUSADE_DUNGON_CFG_DIFFICULT_FIELD.number = 8
+CRUSADE_DUNGON_CFG_DIFFICULT_FIELD.index = 7
+CRUSADE_DUNGON_CFG_DIFFICULT_FIELD.label = 2
+CRUSADE_DUNGON_CFG_DIFFICULT_FIELD.has_default_value = false
+CRUSADE_DUNGON_CFG_DIFFICULT_FIELD.default_value = 0
+CRUSADE_DUNGON_CFG_DIFFICULT_FIELD.type = 5
+CRUSADE_DUNGON_CFG_DIFFICULT_FIELD.cpp_type = 1
+
+CRUSADE_DUNGON_CFG.name = "crusade_dungon_cfg"
+CRUSADE_DUNGON_CFG.full_name = ".ftcfg.crusade_dungon_cfg"
+CRUSADE_DUNGON_CFG.nested_types = {}
+CRUSADE_DUNGON_CFG.enum_types = {}
+CRUSADE_DUNGON_CFG.fields = {CRUSADE_DUNGON_CFG_NPCID_FIELD, CRUSADE_DUNGON_CFG_MAP_ID_FIELD, CRUSADE_DUNGON_CFG_NPC_STAGETYPE_FIELD, CRUSADE_DUNGON_CFG_REWARD_ID_FIELD, CRUSADE_DUNGON_CFG_BIRTH_X_FIELD, CRUSADE_DUNGON_CFG_BIRTH_Y_FIELD, CRUSADE_DUNGON_CFG_BIRTH_Z_FIELD, CRUSADE_DUNGON_CFG_DIFFICULT_FIELD}
+CRUSADE_DUNGON_CFG.is_extendable = false
+CRUSADE_DUNGON_CFG.extensions = {}
+CRUSADE_DUNGON_CFGS_ITEMS_FIELD.name = "items"
+CRUSADE_DUNGON_CFGS_ITEMS_FIELD.full_name = ".ftcfg.crusade_dungon_cfgs.items"
+CRUSADE_DUNGON_CFGS_ITEMS_FIELD.number = 1
+CRUSADE_DUNGON_CFGS_ITEMS_FIELD.index = 0
+CRUSADE_DUNGON_CFGS_ITEMS_FIELD.label = 3
+CRUSADE_DUNGON_CFGS_ITEMS_FIELD.has_default_value = false
+CRUSADE_DUNGON_CFGS_ITEMS_FIELD.default_value = {}
+CRUSADE_DUNGON_CFGS_ITEMS_FIELD.message_type = CRUSADE_DUNGON_CFG
+CRUSADE_DUNGON_CFGS_ITEMS_FIELD.type = 11
+CRUSADE_DUNGON_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CRUSADE_DUNGON_CFGS.name = "crusade_dungon_cfgs"
+CRUSADE_DUNGON_CFGS.full_name = ".ftcfg.crusade_dungon_cfgs"
+CRUSADE_DUNGON_CFGS.nested_types = {}
+CRUSADE_DUNGON_CFGS.enum_types = {}
+CRUSADE_DUNGON_CFGS.fields = {CRUSADE_DUNGON_CFGS_ITEMS_FIELD}
+CRUSADE_DUNGON_CFGS.is_extendable = false
+CRUSADE_DUNGON_CFGS.extensions = {}
+STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD.name = "prop_type"
+STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD.full_name = ".ftcfg.strength_convert_cfg.prop_type"
+STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD.number = 1
+STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD.index = 0
+STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD.label = 2
+STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD.has_default_value = false
+STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD.default_value = nil
+STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPTYPE
+STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD.type = 14
+STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD.cpp_type = 8
+
+STRENGTH_CONVERT_CFG_FACTOR_FIELD.name = "factor"
+STRENGTH_CONVERT_CFG_FACTOR_FIELD.full_name = ".ftcfg.strength_convert_cfg.factor"
+STRENGTH_CONVERT_CFG_FACTOR_FIELD.number = 2
+STRENGTH_CONVERT_CFG_FACTOR_FIELD.index = 1
+STRENGTH_CONVERT_CFG_FACTOR_FIELD.label = 2
+STRENGTH_CONVERT_CFG_FACTOR_FIELD.has_default_value = false
+STRENGTH_CONVERT_CFG_FACTOR_FIELD.default_value = 0.0
+STRENGTH_CONVERT_CFG_FACTOR_FIELD.type = 1
+STRENGTH_CONVERT_CFG_FACTOR_FIELD.cpp_type = 5
+
+STRENGTH_CONVERT_CFG.name = "strength_convert_cfg"
+STRENGTH_CONVERT_CFG.full_name = ".ftcfg.strength_convert_cfg"
+STRENGTH_CONVERT_CFG.nested_types = {}
+STRENGTH_CONVERT_CFG.enum_types = {}
+STRENGTH_CONVERT_CFG.fields = {STRENGTH_CONVERT_CFG_PROP_TYPE_FIELD, STRENGTH_CONVERT_CFG_FACTOR_FIELD}
+STRENGTH_CONVERT_CFG.is_extendable = false
+STRENGTH_CONVERT_CFG.extensions = {}
+STRENGTH_CONVERT_CFGS_ITEMS_FIELD.name = "items"
+STRENGTH_CONVERT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.strength_convert_cfgs.items"
+STRENGTH_CONVERT_CFGS_ITEMS_FIELD.number = 1
+STRENGTH_CONVERT_CFGS_ITEMS_FIELD.index = 0
+STRENGTH_CONVERT_CFGS_ITEMS_FIELD.label = 3
+STRENGTH_CONVERT_CFGS_ITEMS_FIELD.has_default_value = false
+STRENGTH_CONVERT_CFGS_ITEMS_FIELD.default_value = {}
+STRENGTH_CONVERT_CFGS_ITEMS_FIELD.message_type = STRENGTH_CONVERT_CFG
+STRENGTH_CONVERT_CFGS_ITEMS_FIELD.type = 11
+STRENGTH_CONVERT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+STRENGTH_CONVERT_CFGS.name = "strength_convert_cfgs"
+STRENGTH_CONVERT_CFGS.full_name = ".ftcfg.strength_convert_cfgs"
+STRENGTH_CONVERT_CFGS.nested_types = {}
+STRENGTH_CONVERT_CFGS.enum_types = {}
+STRENGTH_CONVERT_CFGS.fields = {STRENGTH_CONVERT_CFGS_ITEMS_FIELD}
+STRENGTH_CONVERT_CFGS.is_extendable = false
+STRENGTH_CONVERT_CFGS.extensions = {}
+SKILL_SUMMONED_NPC_CFG_ID_FIELD.name = "id"
+SKILL_SUMMONED_NPC_CFG_ID_FIELD.full_name = ".ftcfg.skill_summoned_npc_cfg.id"
+SKILL_SUMMONED_NPC_CFG_ID_FIELD.number = 1
+SKILL_SUMMONED_NPC_CFG_ID_FIELD.index = 0
+SKILL_SUMMONED_NPC_CFG_ID_FIELD.label = 2
+SKILL_SUMMONED_NPC_CFG_ID_FIELD.has_default_value = false
+SKILL_SUMMONED_NPC_CFG_ID_FIELD.default_value = 0
+SKILL_SUMMONED_NPC_CFG_ID_FIELD.type = 5
+SKILL_SUMMONED_NPC_CFG_ID_FIELD.cpp_type = 1
+
+SKILL_SUMMONED_NPC_CFG_DESC_FIELD.name = "desc"
+SKILL_SUMMONED_NPC_CFG_DESC_FIELD.full_name = ".ftcfg.skill_summoned_npc_cfg.desc"
+SKILL_SUMMONED_NPC_CFG_DESC_FIELD.number = 2
+SKILL_SUMMONED_NPC_CFG_DESC_FIELD.index = 1
+SKILL_SUMMONED_NPC_CFG_DESC_FIELD.label = 2
+SKILL_SUMMONED_NPC_CFG_DESC_FIELD.has_default_value = false
+SKILL_SUMMONED_NPC_CFG_DESC_FIELD.default_value = ""
+SKILL_SUMMONED_NPC_CFG_DESC_FIELD.type = 9
+SKILL_SUMMONED_NPC_CFG_DESC_FIELD.cpp_type = 9
+
+SKILL_SUMMONED_NPC_CFG_NPC_ID_FIELD.name = "npc_id"
+SKILL_SUMMONED_NPC_CFG_NPC_ID_FIELD.full_name = ".ftcfg.skill_summoned_npc_cfg.npc_id"
+SKILL_SUMMONED_NPC_CFG_NPC_ID_FIELD.number = 3
+SKILL_SUMMONED_NPC_CFG_NPC_ID_FIELD.index = 2
+SKILL_SUMMONED_NPC_CFG_NPC_ID_FIELD.label = 2
+SKILL_SUMMONED_NPC_CFG_NPC_ID_FIELD.has_default_value = false
+SKILL_SUMMONED_NPC_CFG_NPC_ID_FIELD.default_value = 0
+SKILL_SUMMONED_NPC_CFG_NPC_ID_FIELD.type = 5
+SKILL_SUMMONED_NPC_CFG_NPC_ID_FIELD.cpp_type = 1
+
+SKILL_SUMMONED_NPC_CFG.name = "skill_summoned_npc_cfg"
+SKILL_SUMMONED_NPC_CFG.full_name = ".ftcfg.skill_summoned_npc_cfg"
+SKILL_SUMMONED_NPC_CFG.nested_types = {}
+SKILL_SUMMONED_NPC_CFG.enum_types = {}
+SKILL_SUMMONED_NPC_CFG.fields = {SKILL_SUMMONED_NPC_CFG_ID_FIELD, SKILL_SUMMONED_NPC_CFG_DESC_FIELD, SKILL_SUMMONED_NPC_CFG_NPC_ID_FIELD}
+SKILL_SUMMONED_NPC_CFG.is_extendable = false
+SKILL_SUMMONED_NPC_CFG.extensions = {}
+SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD.name = "items"
+SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD.full_name = ".ftcfg.skill_summoned_npc_cfgs.items"
+SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD.number = 1
+SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD.index = 0
+SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD.label = 3
+SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD.has_default_value = false
+SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD.default_value = {}
+SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD.message_type = SKILL_SUMMONED_NPC_CFG
+SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD.type = 11
+SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SKILL_SUMMONED_NPC_CFGS.name = "skill_summoned_npc_cfgs"
+SKILL_SUMMONED_NPC_CFGS.full_name = ".ftcfg.skill_summoned_npc_cfgs"
+SKILL_SUMMONED_NPC_CFGS.nested_types = {}
+SKILL_SUMMONED_NPC_CFGS.enum_types = {}
+SKILL_SUMMONED_NPC_CFGS.fields = {SKILL_SUMMONED_NPC_CFGS_ITEMS_FIELD}
+SKILL_SUMMONED_NPC_CFGS.is_extendable = false
+SKILL_SUMMONED_NPC_CFGS.extensions = {}
+SKILL_SUMMONED_CFG_ID_FIELD.name = "id"
+SKILL_SUMMONED_CFG_ID_FIELD.full_name = ".ftcfg.skill_summoned_cfg.id"
+SKILL_SUMMONED_CFG_ID_FIELD.number = 1
+SKILL_SUMMONED_CFG_ID_FIELD.index = 0
+SKILL_SUMMONED_CFG_ID_FIELD.label = 2
+SKILL_SUMMONED_CFG_ID_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_ID_FIELD.default_value = 0
+SKILL_SUMMONED_CFG_ID_FIELD.type = 5
+SKILL_SUMMONED_CFG_ID_FIELD.cpp_type = 1
+
+SKILL_SUMMONED_CFG_DESC_FIELD.name = "desc"
+SKILL_SUMMONED_CFG_DESC_FIELD.full_name = ".ftcfg.skill_summoned_cfg.desc"
+SKILL_SUMMONED_CFG_DESC_FIELD.number = 2
+SKILL_SUMMONED_CFG_DESC_FIELD.index = 1
+SKILL_SUMMONED_CFG_DESC_FIELD.label = 2
+SKILL_SUMMONED_CFG_DESC_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_DESC_FIELD.default_value = ""
+SKILL_SUMMONED_CFG_DESC_FIELD.type = 9
+SKILL_SUMMONED_CFG_DESC_FIELD.cpp_type = 9
+
+SKILL_SUMMONED_CFG_RING_FIELD.name = "ring"
+SKILL_SUMMONED_CFG_RING_FIELD.full_name = ".ftcfg.skill_summoned_cfg.ring"
+SKILL_SUMMONED_CFG_RING_FIELD.number = 3
+SKILL_SUMMONED_CFG_RING_FIELD.index = 2
+SKILL_SUMMONED_CFG_RING_FIELD.label = 2
+SKILL_SUMMONED_CFG_RING_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_RING_FIELD.default_value = 0
+SKILL_SUMMONED_CFG_RING_FIELD.type = 5
+SKILL_SUMMONED_CFG_RING_FIELD.cpp_type = 1
+
+SKILL_SUMMONED_CFG_EXIST_TIME_FIELD.name = "exist_time"
+SKILL_SUMMONED_CFG_EXIST_TIME_FIELD.full_name = ".ftcfg.skill_summoned_cfg.exist_time"
+SKILL_SUMMONED_CFG_EXIST_TIME_FIELD.number = 4
+SKILL_SUMMONED_CFG_EXIST_TIME_FIELD.index = 3
+SKILL_SUMMONED_CFG_EXIST_TIME_FIELD.label = 2
+SKILL_SUMMONED_CFG_EXIST_TIME_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_EXIST_TIME_FIELD.default_value = 0
+SKILL_SUMMONED_CFG_EXIST_TIME_FIELD.type = 5
+SKILL_SUMMONED_CFG_EXIST_TIME_FIELD.cpp_type = 1
+
+SKILL_SUMMONED_CFG_SPEED_FIELD.name = "speed"
+SKILL_SUMMONED_CFG_SPEED_FIELD.full_name = ".ftcfg.skill_summoned_cfg.speed"
+SKILL_SUMMONED_CFG_SPEED_FIELD.number = 5
+SKILL_SUMMONED_CFG_SPEED_FIELD.index = 4
+SKILL_SUMMONED_CFG_SPEED_FIELD.label = 2
+SKILL_SUMMONED_CFG_SPEED_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_SPEED_FIELD.default_value = 0.0
+SKILL_SUMMONED_CFG_SPEED_FIELD.type = 2
+SKILL_SUMMONED_CFG_SPEED_FIELD.cpp_type = 6
+
+SKILL_SUMMONED_CFG_EFF_START_FIELD.name = "eff_start"
+SKILL_SUMMONED_CFG_EFF_START_FIELD.full_name = ".ftcfg.skill_summoned_cfg.eff_start"
+SKILL_SUMMONED_CFG_EFF_START_FIELD.number = 6
+SKILL_SUMMONED_CFG_EFF_START_FIELD.index = 5
+SKILL_SUMMONED_CFG_EFF_START_FIELD.label = 2
+SKILL_SUMMONED_CFG_EFF_START_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_EFF_START_FIELD.default_value = ""
+SKILL_SUMMONED_CFG_EFF_START_FIELD.type = 9
+SKILL_SUMMONED_CFG_EFF_START_FIELD.cpp_type = 9
+
+SKILL_SUMMONED_CFG_EFF_START_TIME_FIELD.name = "eff_start_time"
+SKILL_SUMMONED_CFG_EFF_START_TIME_FIELD.full_name = ".ftcfg.skill_summoned_cfg.eff_start_time"
+SKILL_SUMMONED_CFG_EFF_START_TIME_FIELD.number = 7
+SKILL_SUMMONED_CFG_EFF_START_TIME_FIELD.index = 6
+SKILL_SUMMONED_CFG_EFF_START_TIME_FIELD.label = 2
+SKILL_SUMMONED_CFG_EFF_START_TIME_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_EFF_START_TIME_FIELD.default_value = 0
+SKILL_SUMMONED_CFG_EFF_START_TIME_FIELD.type = 5
+SKILL_SUMMONED_CFG_EFF_START_TIME_FIELD.cpp_type = 1
+
+SKILL_SUMMONED_CFG_EFF_KEEP_FIELD.name = "eff_keep"
+SKILL_SUMMONED_CFG_EFF_KEEP_FIELD.full_name = ".ftcfg.skill_summoned_cfg.eff_keep"
+SKILL_SUMMONED_CFG_EFF_KEEP_FIELD.number = 8
+SKILL_SUMMONED_CFG_EFF_KEEP_FIELD.index = 7
+SKILL_SUMMONED_CFG_EFF_KEEP_FIELD.label = 2
+SKILL_SUMMONED_CFG_EFF_KEEP_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_EFF_KEEP_FIELD.default_value = ""
+SKILL_SUMMONED_CFG_EFF_KEEP_FIELD.type = 9
+SKILL_SUMMONED_CFG_EFF_KEEP_FIELD.cpp_type = 9
+
+SKILL_SUMMONED_CFG_EFF_DESTROY_FIELD.name = "eff_destroy"
+SKILL_SUMMONED_CFG_EFF_DESTROY_FIELD.full_name = ".ftcfg.skill_summoned_cfg.eff_destroy"
+SKILL_SUMMONED_CFG_EFF_DESTROY_FIELD.number = 9
+SKILL_SUMMONED_CFG_EFF_DESTROY_FIELD.index = 8
+SKILL_SUMMONED_CFG_EFF_DESTROY_FIELD.label = 2
+SKILL_SUMMONED_CFG_EFF_DESTROY_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_EFF_DESTROY_FIELD.default_value = ""
+SKILL_SUMMONED_CFG_EFF_DESTROY_FIELD.type = 9
+SKILL_SUMMONED_CFG_EFF_DESTROY_FIELD.cpp_type = 9
+
+SKILL_SUMMONED_CFG_EFF_DESTROY_TIME_FIELD.name = "eff_destroy_time"
+SKILL_SUMMONED_CFG_EFF_DESTROY_TIME_FIELD.full_name = ".ftcfg.skill_summoned_cfg.eff_destroy_time"
+SKILL_SUMMONED_CFG_EFF_DESTROY_TIME_FIELD.number = 10
+SKILL_SUMMONED_CFG_EFF_DESTROY_TIME_FIELD.index = 9
+SKILL_SUMMONED_CFG_EFF_DESTROY_TIME_FIELD.label = 2
+SKILL_SUMMONED_CFG_EFF_DESTROY_TIME_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_EFF_DESTROY_TIME_FIELD.default_value = 0
+SKILL_SUMMONED_CFG_EFF_DESTROY_TIME_FIELD.type = 5
+SKILL_SUMMONED_CFG_EFF_DESTROY_TIME_FIELD.cpp_type = 1
+
+SKILL_SUMMONED_CFG_EFF_KEEP_HEIGHT_FIELD.name = "eff_keep_height"
+SKILL_SUMMONED_CFG_EFF_KEEP_HEIGHT_FIELD.full_name = ".ftcfg.skill_summoned_cfg.eff_keep_height"
+SKILL_SUMMONED_CFG_EFF_KEEP_HEIGHT_FIELD.number = 11
+SKILL_SUMMONED_CFG_EFF_KEEP_HEIGHT_FIELD.index = 10
+SKILL_SUMMONED_CFG_EFF_KEEP_HEIGHT_FIELD.label = 2
+SKILL_SUMMONED_CFG_EFF_KEEP_HEIGHT_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_EFF_KEEP_HEIGHT_FIELD.default_value = 0.0
+SKILL_SUMMONED_CFG_EFF_KEEP_HEIGHT_FIELD.type = 2
+SKILL_SUMMONED_CFG_EFF_KEEP_HEIGHT_FIELD.cpp_type = 6
+
+SKILL_SUMMONED_CFG_EFF_DESTROY_HEIGHT_FIELD.name = "eff_destroy_height"
+SKILL_SUMMONED_CFG_EFF_DESTROY_HEIGHT_FIELD.full_name = ".ftcfg.skill_summoned_cfg.eff_destroy_height"
+SKILL_SUMMONED_CFG_EFF_DESTROY_HEIGHT_FIELD.number = 12
+SKILL_SUMMONED_CFG_EFF_DESTROY_HEIGHT_FIELD.index = 11
+SKILL_SUMMONED_CFG_EFF_DESTROY_HEIGHT_FIELD.label = 2
+SKILL_SUMMONED_CFG_EFF_DESTROY_HEIGHT_FIELD.has_default_value = false
+SKILL_SUMMONED_CFG_EFF_DESTROY_HEIGHT_FIELD.default_value = 0.0
+SKILL_SUMMONED_CFG_EFF_DESTROY_HEIGHT_FIELD.type = 2
+SKILL_SUMMONED_CFG_EFF_DESTROY_HEIGHT_FIELD.cpp_type = 6
+
+SKILL_SUMMONED_CFG.name = "skill_summoned_cfg"
+SKILL_SUMMONED_CFG.full_name = ".ftcfg.skill_summoned_cfg"
+SKILL_SUMMONED_CFG.nested_types = {}
+SKILL_SUMMONED_CFG.enum_types = {}
+SKILL_SUMMONED_CFG.fields = {SKILL_SUMMONED_CFG_ID_FIELD, SKILL_SUMMONED_CFG_DESC_FIELD, SKILL_SUMMONED_CFG_RING_FIELD, SKILL_SUMMONED_CFG_EXIST_TIME_FIELD, SKILL_SUMMONED_CFG_SPEED_FIELD, SKILL_SUMMONED_CFG_EFF_START_FIELD, SKILL_SUMMONED_CFG_EFF_START_TIME_FIELD, SKILL_SUMMONED_CFG_EFF_KEEP_FIELD, SKILL_SUMMONED_CFG_EFF_DESTROY_FIELD, SKILL_SUMMONED_CFG_EFF_DESTROY_TIME_FIELD, SKILL_SUMMONED_CFG_EFF_KEEP_HEIGHT_FIELD, SKILL_SUMMONED_CFG_EFF_DESTROY_HEIGHT_FIELD}
+SKILL_SUMMONED_CFG.is_extendable = false
+SKILL_SUMMONED_CFG.extensions = {}
+SKILL_SUMMONED_CFGS_ITEMS_FIELD.name = "items"
+SKILL_SUMMONED_CFGS_ITEMS_FIELD.full_name = ".ftcfg.skill_summoned_cfgs.items"
+SKILL_SUMMONED_CFGS_ITEMS_FIELD.number = 1
+SKILL_SUMMONED_CFGS_ITEMS_FIELD.index = 0
+SKILL_SUMMONED_CFGS_ITEMS_FIELD.label = 3
+SKILL_SUMMONED_CFGS_ITEMS_FIELD.has_default_value = false
+SKILL_SUMMONED_CFGS_ITEMS_FIELD.default_value = {}
+SKILL_SUMMONED_CFGS_ITEMS_FIELD.message_type = SKILL_SUMMONED_CFG
+SKILL_SUMMONED_CFGS_ITEMS_FIELD.type = 11
+SKILL_SUMMONED_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SKILL_SUMMONED_CFGS.name = "skill_summoned_cfgs"
+SKILL_SUMMONED_CFGS.full_name = ".ftcfg.skill_summoned_cfgs"
+SKILL_SUMMONED_CFGS.nested_types = {}
+SKILL_SUMMONED_CFGS.enum_types = {}
+SKILL_SUMMONED_CFGS.fields = {SKILL_SUMMONED_CFGS_ITEMS_FIELD}
+SKILL_SUMMONED_CFGS.is_extendable = false
+SKILL_SUMMONED_CFGS.extensions = {}
+CLUE_CFG_CLUE_ID_FIELD.name = "clue_id"
+CLUE_CFG_CLUE_ID_FIELD.full_name = ".ftcfg.clue_cfg.clue_id"
+CLUE_CFG_CLUE_ID_FIELD.number = 1
+CLUE_CFG_CLUE_ID_FIELD.index = 0
+CLUE_CFG_CLUE_ID_FIELD.label = 2
+CLUE_CFG_CLUE_ID_FIELD.has_default_value = false
+CLUE_CFG_CLUE_ID_FIELD.default_value = 0
+CLUE_CFG_CLUE_ID_FIELD.type = 5
+CLUE_CFG_CLUE_ID_FIELD.cpp_type = 1
+
+CLUE_CFG_MAP_ID_FIELD.name = "map_id"
+CLUE_CFG_MAP_ID_FIELD.full_name = ".ftcfg.clue_cfg.map_id"
+CLUE_CFG_MAP_ID_FIELD.number = 2
+CLUE_CFG_MAP_ID_FIELD.index = 1
+CLUE_CFG_MAP_ID_FIELD.label = 2
+CLUE_CFG_MAP_ID_FIELD.has_default_value = false
+CLUE_CFG_MAP_ID_FIELD.default_value = 0
+CLUE_CFG_MAP_ID_FIELD.type = 5
+CLUE_CFG_MAP_ID_FIELD.cpp_type = 1
+
+CLUE_CFG_SCENE_ID_FIELD.name = "scene_id"
+CLUE_CFG_SCENE_ID_FIELD.full_name = ".ftcfg.clue_cfg.scene_id"
+CLUE_CFG_SCENE_ID_FIELD.number = 3
+CLUE_CFG_SCENE_ID_FIELD.index = 2
+CLUE_CFG_SCENE_ID_FIELD.label = 2
+CLUE_CFG_SCENE_ID_FIELD.has_default_value = false
+CLUE_CFG_SCENE_ID_FIELD.default_value = 0
+CLUE_CFG_SCENE_ID_FIELD.type = 5
+CLUE_CFG_SCENE_ID_FIELD.cpp_type = 1
+
+CLUE_CFG_POS_FIELD.name = "pos"
+CLUE_CFG_POS_FIELD.full_name = ".ftcfg.clue_cfg.pos"
+CLUE_CFG_POS_FIELD.number = 4
+CLUE_CFG_POS_FIELD.index = 3
+CLUE_CFG_POS_FIELD.label = 3
+CLUE_CFG_POS_FIELD.has_default_value = false
+CLUE_CFG_POS_FIELD.default_value = {}
+CLUE_CFG_POS_FIELD.type = 2
+CLUE_CFG_POS_FIELD.cpp_type = 6
+
+CLUE_CFG_DESC_FIELD.name = "desc"
+CLUE_CFG_DESC_FIELD.full_name = ".ftcfg.clue_cfg.desc"
+CLUE_CFG_DESC_FIELD.number = 5
+CLUE_CFG_DESC_FIELD.index = 4
+CLUE_CFG_DESC_FIELD.label = 2
+CLUE_CFG_DESC_FIELD.has_default_value = false
+CLUE_CFG_DESC_FIELD.default_value = ""
+CLUE_CFG_DESC_FIELD.type = 9
+CLUE_CFG_DESC_FIELD.cpp_type = 9
+
+CLUE_CFG_BOXES_POS_X_FIELD.name = "boxes_pos_x"
+CLUE_CFG_BOXES_POS_X_FIELD.full_name = ".ftcfg.clue_cfg.boxes_pos_x"
+CLUE_CFG_BOXES_POS_X_FIELD.number = 6
+CLUE_CFG_BOXES_POS_X_FIELD.index = 5
+CLUE_CFG_BOXES_POS_X_FIELD.label = 3
+CLUE_CFG_BOXES_POS_X_FIELD.has_default_value = false
+CLUE_CFG_BOXES_POS_X_FIELD.default_value = {}
+CLUE_CFG_BOXES_POS_X_FIELD.type = 2
+CLUE_CFG_BOXES_POS_X_FIELD.cpp_type = 6
+
+CLUE_CFG_BOXES_POS_Z_FIELD.name = "boxes_pos_z"
+CLUE_CFG_BOXES_POS_Z_FIELD.full_name = ".ftcfg.clue_cfg.boxes_pos_z"
+CLUE_CFG_BOXES_POS_Z_FIELD.number = 7
+CLUE_CFG_BOXES_POS_Z_FIELD.index = 6
+CLUE_CFG_BOXES_POS_Z_FIELD.label = 3
+CLUE_CFG_BOXES_POS_Z_FIELD.has_default_value = false
+CLUE_CFG_BOXES_POS_Z_FIELD.default_value = {}
+CLUE_CFG_BOXES_POS_Z_FIELD.type = 2
+CLUE_CFG_BOXES_POS_Z_FIELD.cpp_type = 6
+
+CLUE_CFG_COST_ID_FIELD.name = "cost_id"
+CLUE_CFG_COST_ID_FIELD.full_name = ".ftcfg.clue_cfg.cost_id"
+CLUE_CFG_COST_ID_FIELD.number = 8
+CLUE_CFG_COST_ID_FIELD.index = 7
+CLUE_CFG_COST_ID_FIELD.label = 2
+CLUE_CFG_COST_ID_FIELD.has_default_value = false
+CLUE_CFG_COST_ID_FIELD.default_value = 0
+CLUE_CFG_COST_ID_FIELD.type = 5
+CLUE_CFG_COST_ID_FIELD.cpp_type = 1
+
+CLUE_CFG_CORE_COORDINATE_FIELD.name = "core_coordinate"
+CLUE_CFG_CORE_COORDINATE_FIELD.full_name = ".ftcfg.clue_cfg.core_coordinate"
+CLUE_CFG_CORE_COORDINATE_FIELD.number = 9
+CLUE_CFG_CORE_COORDINATE_FIELD.index = 8
+CLUE_CFG_CORE_COORDINATE_FIELD.label = 3
+CLUE_CFG_CORE_COORDINATE_FIELD.has_default_value = false
+CLUE_CFG_CORE_COORDINATE_FIELD.default_value = {}
+CLUE_CFG_CORE_COORDINATE_FIELD.type = 5
+CLUE_CFG_CORE_COORDINATE_FIELD.cpp_type = 1
+
+CLUE_CFG_MAP_RANGE_FIELD.name = "map_range"
+CLUE_CFG_MAP_RANGE_FIELD.full_name = ".ftcfg.clue_cfg.map_range"
+CLUE_CFG_MAP_RANGE_FIELD.number = 10
+CLUE_CFG_MAP_RANGE_FIELD.index = 9
+CLUE_CFG_MAP_RANGE_FIELD.label = 2
+CLUE_CFG_MAP_RANGE_FIELD.has_default_value = false
+CLUE_CFG_MAP_RANGE_FIELD.default_value = 0
+CLUE_CFG_MAP_RANGE_FIELD.type = 5
+CLUE_CFG_MAP_RANGE_FIELD.cpp_type = 1
+
+CLUE_CFG.name = "clue_cfg"
+CLUE_CFG.full_name = ".ftcfg.clue_cfg"
+CLUE_CFG.nested_types = {}
+CLUE_CFG.enum_types = {}
+CLUE_CFG.fields = {CLUE_CFG_CLUE_ID_FIELD, CLUE_CFG_MAP_ID_FIELD, CLUE_CFG_SCENE_ID_FIELD, CLUE_CFG_POS_FIELD, CLUE_CFG_DESC_FIELD, CLUE_CFG_BOXES_POS_X_FIELD, CLUE_CFG_BOXES_POS_Z_FIELD, CLUE_CFG_COST_ID_FIELD, CLUE_CFG_CORE_COORDINATE_FIELD, CLUE_CFG_MAP_RANGE_FIELD}
+CLUE_CFG.is_extendable = false
+CLUE_CFG.extensions = {}
+CLUE_CFGS_ITEMS_FIELD.name = "items"
+CLUE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.clue_cfgs.items"
+CLUE_CFGS_ITEMS_FIELD.number = 1
+CLUE_CFGS_ITEMS_FIELD.index = 0
+CLUE_CFGS_ITEMS_FIELD.label = 3
+CLUE_CFGS_ITEMS_FIELD.has_default_value = false
+CLUE_CFGS_ITEMS_FIELD.default_value = {}
+CLUE_CFGS_ITEMS_FIELD.message_type = CLUE_CFG
+CLUE_CFGS_ITEMS_FIELD.type = 11
+CLUE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CLUE_CFGS.name = "clue_cfgs"
+CLUE_CFGS.full_name = ".ftcfg.clue_cfgs"
+CLUE_CFGS.nested_types = {}
+CLUE_CFGS.enum_types = {}
+CLUE_CFGS.fields = {CLUE_CFGS_ITEMS_FIELD}
+CLUE_CFGS.is_extendable = false
+CLUE_CFGS.extensions = {}
+BOXS_CFG_BOXES_ID_FIELD.name = "boxes_id"
+BOXS_CFG_BOXES_ID_FIELD.full_name = ".ftcfg.boxs_cfg.boxes_id"
+BOXS_CFG_BOXES_ID_FIELD.number = 1
+BOXS_CFG_BOXES_ID_FIELD.index = 0
+BOXS_CFG_BOXES_ID_FIELD.label = 2
+BOXS_CFG_BOXES_ID_FIELD.has_default_value = false
+BOXS_CFG_BOXES_ID_FIELD.default_value = 0
+BOXS_CFG_BOXES_ID_FIELD.type = 5
+BOXS_CFG_BOXES_ID_FIELD.cpp_type = 1
+
+BOXS_CFG_BOX_ID_FIELD.name = "box_id"
+BOXS_CFG_BOX_ID_FIELD.full_name = ".ftcfg.boxs_cfg.box_id"
+BOXS_CFG_BOX_ID_FIELD.number = 2
+BOXS_CFG_BOX_ID_FIELD.index = 1
+BOXS_CFG_BOX_ID_FIELD.label = 3
+BOXS_CFG_BOX_ID_FIELD.has_default_value = false
+BOXS_CFG_BOX_ID_FIELD.default_value = {}
+BOXS_CFG_BOX_ID_FIELD.type = 5
+BOXS_CFG_BOX_ID_FIELD.cpp_type = 1
+
+BOXS_CFG_BOX_RATE_FIELD.name = "box_rate"
+BOXS_CFG_BOX_RATE_FIELD.full_name = ".ftcfg.boxs_cfg.box_rate"
+BOXS_CFG_BOX_RATE_FIELD.number = 3
+BOXS_CFG_BOX_RATE_FIELD.index = 2
+BOXS_CFG_BOX_RATE_FIELD.label = 3
+BOXS_CFG_BOX_RATE_FIELD.has_default_value = false
+BOXS_CFG_BOX_RATE_FIELD.default_value = {}
+BOXS_CFG_BOX_RATE_FIELD.type = 5
+BOXS_CFG_BOX_RATE_FIELD.cpp_type = 1
+
+BOXS_CFG.name = "boxs_cfg"
+BOXS_CFG.full_name = ".ftcfg.boxs_cfg"
+BOXS_CFG.nested_types = {}
+BOXS_CFG.enum_types = {}
+BOXS_CFG.fields = {BOXS_CFG_BOXES_ID_FIELD, BOXS_CFG_BOX_ID_FIELD, BOXS_CFG_BOX_RATE_FIELD}
+BOXS_CFG.is_extendable = false
+BOXS_CFG.extensions = {}
+BOXS_CFGS_ITEMS_FIELD.name = "items"
+BOXS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.boxs_cfgs.items"
+BOXS_CFGS_ITEMS_FIELD.number = 1
+BOXS_CFGS_ITEMS_FIELD.index = 0
+BOXS_CFGS_ITEMS_FIELD.label = 3
+BOXS_CFGS_ITEMS_FIELD.has_default_value = false
+BOXS_CFGS_ITEMS_FIELD.default_value = {}
+BOXS_CFGS_ITEMS_FIELD.message_type = BOXS_CFG
+BOXS_CFGS_ITEMS_FIELD.type = 11
+BOXS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BOXS_CFGS.name = "boxs_cfgs"
+BOXS_CFGS.full_name = ".ftcfg.boxs_cfgs"
+BOXS_CFGS.nested_types = {}
+BOXS_CFGS.enum_types = {}
+BOXS_CFGS.fields = {BOXS_CFGS_ITEMS_FIELD}
+BOXS_CFGS.is_extendable = false
+BOXS_CFGS.extensions = {}
+BOX_COLLECT_CFG_BOX_ID_FIELD.name = "box_id"
+BOX_COLLECT_CFG_BOX_ID_FIELD.full_name = ".ftcfg.box_collect_cfg.box_id"
+BOX_COLLECT_CFG_BOX_ID_FIELD.number = 1
+BOX_COLLECT_CFG_BOX_ID_FIELD.index = 0
+BOX_COLLECT_CFG_BOX_ID_FIELD.label = 2
+BOX_COLLECT_CFG_BOX_ID_FIELD.has_default_value = false
+BOX_COLLECT_CFG_BOX_ID_FIELD.default_value = 0
+BOX_COLLECT_CFG_BOX_ID_FIELD.type = 5
+BOX_COLLECT_CFG_BOX_ID_FIELD.cpp_type = 1
+
+BOX_COLLECT_CFG_BOX_RES_FIELD.name = "box_res"
+BOX_COLLECT_CFG_BOX_RES_FIELD.full_name = ".ftcfg.box_collect_cfg.box_res"
+BOX_COLLECT_CFG_BOX_RES_FIELD.number = 2
+BOX_COLLECT_CFG_BOX_RES_FIELD.index = 1
+BOX_COLLECT_CFG_BOX_RES_FIELD.label = 2
+BOX_COLLECT_CFG_BOX_RES_FIELD.has_default_value = false
+BOX_COLLECT_CFG_BOX_RES_FIELD.default_value = 0
+BOX_COLLECT_CFG_BOX_RES_FIELD.type = 5
+BOX_COLLECT_CFG_BOX_RES_FIELD.cpp_type = 1
+
+BOX_COLLECT_CFG_ITEM_TYPE_FIELD.name = "item_type"
+BOX_COLLECT_CFG_ITEM_TYPE_FIELD.full_name = ".ftcfg.box_collect_cfg.item_type"
+BOX_COLLECT_CFG_ITEM_TYPE_FIELD.number = 3
+BOX_COLLECT_CFG_ITEM_TYPE_FIELD.index = 2
+BOX_COLLECT_CFG_ITEM_TYPE_FIELD.label = 3
+BOX_COLLECT_CFG_ITEM_TYPE_FIELD.has_default_value = false
+BOX_COLLECT_CFG_ITEM_TYPE_FIELD.default_value = {}
+BOX_COLLECT_CFG_ITEM_TYPE_FIELD.type = 5
+BOX_COLLECT_CFG_ITEM_TYPE_FIELD.cpp_type = 1
+
+BOX_COLLECT_CFG_ITEM_ID_FIELD.name = "item_id"
+BOX_COLLECT_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.box_collect_cfg.item_id"
+BOX_COLLECT_CFG_ITEM_ID_FIELD.number = 4
+BOX_COLLECT_CFG_ITEM_ID_FIELD.index = 3
+BOX_COLLECT_CFG_ITEM_ID_FIELD.label = 3
+BOX_COLLECT_CFG_ITEM_ID_FIELD.has_default_value = false
+BOX_COLLECT_CFG_ITEM_ID_FIELD.default_value = {}
+BOX_COLLECT_CFG_ITEM_ID_FIELD.type = 5
+BOX_COLLECT_CFG_ITEM_ID_FIELD.cpp_type = 1
+
+BOX_COLLECT_CFG_ITEM_RATE_FIELD.name = "item_rate"
+BOX_COLLECT_CFG_ITEM_RATE_FIELD.full_name = ".ftcfg.box_collect_cfg.item_rate"
+BOX_COLLECT_CFG_ITEM_RATE_FIELD.number = 5
+BOX_COLLECT_CFG_ITEM_RATE_FIELD.index = 4
+BOX_COLLECT_CFG_ITEM_RATE_FIELD.label = 3
+BOX_COLLECT_CFG_ITEM_RATE_FIELD.has_default_value = false
+BOX_COLLECT_CFG_ITEM_RATE_FIELD.default_value = {}
+BOX_COLLECT_CFG_ITEM_RATE_FIELD.type = 5
+BOX_COLLECT_CFG_ITEM_RATE_FIELD.cpp_type = 1
+
+BOX_COLLECT_CFG_SHOW_TYPE_FIELD.name = "show_type"
+BOX_COLLECT_CFG_SHOW_TYPE_FIELD.full_name = ".ftcfg.box_collect_cfg.show_type"
+BOX_COLLECT_CFG_SHOW_TYPE_FIELD.number = 6
+BOX_COLLECT_CFG_SHOW_TYPE_FIELD.index = 5
+BOX_COLLECT_CFG_SHOW_TYPE_FIELD.label = 2
+BOX_COLLECT_CFG_SHOW_TYPE_FIELD.has_default_value = false
+BOX_COLLECT_CFG_SHOW_TYPE_FIELD.default_value = 0
+BOX_COLLECT_CFG_SHOW_TYPE_FIELD.type = 5
+BOX_COLLECT_CFG_SHOW_TYPE_FIELD.cpp_type = 1
+
+BOX_COLLECT_CFG_MODEL_SCALE_FIELD.name = "model_scale"
+BOX_COLLECT_CFG_MODEL_SCALE_FIELD.full_name = ".ftcfg.box_collect_cfg.model_scale"
+BOX_COLLECT_CFG_MODEL_SCALE_FIELD.number = 7
+BOX_COLLECT_CFG_MODEL_SCALE_FIELD.index = 6
+BOX_COLLECT_CFG_MODEL_SCALE_FIELD.label = 2
+BOX_COLLECT_CFG_MODEL_SCALE_FIELD.has_default_value = false
+BOX_COLLECT_CFG_MODEL_SCALE_FIELD.default_value = 0
+BOX_COLLECT_CFG_MODEL_SCALE_FIELD.type = 5
+BOX_COLLECT_CFG_MODEL_SCALE_FIELD.cpp_type = 1
+
+BOX_COLLECT_CFG.name = "box_collect_cfg"
+BOX_COLLECT_CFG.full_name = ".ftcfg.box_collect_cfg"
+BOX_COLLECT_CFG.nested_types = {}
+BOX_COLLECT_CFG.enum_types = {}
+BOX_COLLECT_CFG.fields = {BOX_COLLECT_CFG_BOX_ID_FIELD, BOX_COLLECT_CFG_BOX_RES_FIELD, BOX_COLLECT_CFG_ITEM_TYPE_FIELD, BOX_COLLECT_CFG_ITEM_ID_FIELD, BOX_COLLECT_CFG_ITEM_RATE_FIELD, BOX_COLLECT_CFG_SHOW_TYPE_FIELD, BOX_COLLECT_CFG_MODEL_SCALE_FIELD}
+BOX_COLLECT_CFG.is_extendable = false
+BOX_COLLECT_CFG.extensions = {}
+BOX_COLLECT_CFGS_ITEMS_FIELD.name = "items"
+BOX_COLLECT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.box_collect_cfgs.items"
+BOX_COLLECT_CFGS_ITEMS_FIELD.number = 1
+BOX_COLLECT_CFGS_ITEMS_FIELD.index = 0
+BOX_COLLECT_CFGS_ITEMS_FIELD.label = 3
+BOX_COLLECT_CFGS_ITEMS_FIELD.has_default_value = false
+BOX_COLLECT_CFGS_ITEMS_FIELD.default_value = {}
+BOX_COLLECT_CFGS_ITEMS_FIELD.message_type = BOX_COLLECT_CFG
+BOX_COLLECT_CFGS_ITEMS_FIELD.type = 11
+BOX_COLLECT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BOX_COLLECT_CFGS.name = "box_collect_cfgs"
+BOX_COLLECT_CFGS.full_name = ".ftcfg.box_collect_cfgs"
+BOX_COLLECT_CFGS.nested_types = {}
+BOX_COLLECT_CFGS.enum_types = {}
+BOX_COLLECT_CFGS.fields = {BOX_COLLECT_CFGS_ITEMS_FIELD}
+BOX_COLLECT_CFGS.is_extendable = false
+BOX_COLLECT_CFGS.extensions = {}
+DIG_TREASURE_EVENT_CFG_EVENT_ID_FIELD.name = "event_id"
+DIG_TREASURE_EVENT_CFG_EVENT_ID_FIELD.full_name = ".ftcfg.dig_treasure_event_cfg.event_id"
+DIG_TREASURE_EVENT_CFG_EVENT_ID_FIELD.number = 1
+DIG_TREASURE_EVENT_CFG_EVENT_ID_FIELD.index = 0
+DIG_TREASURE_EVENT_CFG_EVENT_ID_FIELD.label = 2
+DIG_TREASURE_EVENT_CFG_EVENT_ID_FIELD.has_default_value = false
+DIG_TREASURE_EVENT_CFG_EVENT_ID_FIELD.default_value = 0
+DIG_TREASURE_EVENT_CFG_EVENT_ID_FIELD.type = 5
+DIG_TREASURE_EVENT_CFG_EVENT_ID_FIELD.cpp_type = 1
+
+DIG_TREASURE_EVENT_CFG_DISCRIBE_FIELD.name = "discribe"
+DIG_TREASURE_EVENT_CFG_DISCRIBE_FIELD.full_name = ".ftcfg.dig_treasure_event_cfg.discribe"
+DIG_TREASURE_EVENT_CFG_DISCRIBE_FIELD.number = 2
+DIG_TREASURE_EVENT_CFG_DISCRIBE_FIELD.index = 1
+DIG_TREASURE_EVENT_CFG_DISCRIBE_FIELD.label = 2
+DIG_TREASURE_EVENT_CFG_DISCRIBE_FIELD.has_default_value = false
+DIG_TREASURE_EVENT_CFG_DISCRIBE_FIELD.default_value = ""
+DIG_TREASURE_EVENT_CFG_DISCRIBE_FIELD.type = 9
+DIG_TREASURE_EVENT_CFG_DISCRIBE_FIELD.cpp_type = 9
+
+DIG_TREASURE_EVENT_CFG_BOXES_ID_FIELD.name = "boxes_id"
+DIG_TREASURE_EVENT_CFG_BOXES_ID_FIELD.full_name = ".ftcfg.dig_treasure_event_cfg.boxes_id"
+DIG_TREASURE_EVENT_CFG_BOXES_ID_FIELD.number = 3
+DIG_TREASURE_EVENT_CFG_BOXES_ID_FIELD.index = 2
+DIG_TREASURE_EVENT_CFG_BOXES_ID_FIELD.label = 3
+DIG_TREASURE_EVENT_CFG_BOXES_ID_FIELD.has_default_value = false
+DIG_TREASURE_EVENT_CFG_BOXES_ID_FIELD.default_value = {}
+DIG_TREASURE_EVENT_CFG_BOXES_ID_FIELD.type = 5
+DIG_TREASURE_EVENT_CFG_BOXES_ID_FIELD.cpp_type = 1
+
+DIG_TREASURE_EVENT_CFG_DUNGEON_X_FIELD.name = "dungeon_x"
+DIG_TREASURE_EVENT_CFG_DUNGEON_X_FIELD.full_name = ".ftcfg.dig_treasure_event_cfg.dungeon_x"
+DIG_TREASURE_EVENT_CFG_DUNGEON_X_FIELD.number = 4
+DIG_TREASURE_EVENT_CFG_DUNGEON_X_FIELD.index = 3
+DIG_TREASURE_EVENT_CFG_DUNGEON_X_FIELD.label = 3
+DIG_TREASURE_EVENT_CFG_DUNGEON_X_FIELD.has_default_value = false
+DIG_TREASURE_EVENT_CFG_DUNGEON_X_FIELD.default_value = {}
+DIG_TREASURE_EVENT_CFG_DUNGEON_X_FIELD.type = 2
+DIG_TREASURE_EVENT_CFG_DUNGEON_X_FIELD.cpp_type = 6
+
+DIG_TREASURE_EVENT_CFG_DUNGEON_Z_FIELD.name = "dungeon_z"
+DIG_TREASURE_EVENT_CFG_DUNGEON_Z_FIELD.full_name = ".ftcfg.dig_treasure_event_cfg.dungeon_z"
+DIG_TREASURE_EVENT_CFG_DUNGEON_Z_FIELD.number = 5
+DIG_TREASURE_EVENT_CFG_DUNGEON_Z_FIELD.index = 4
+DIG_TREASURE_EVENT_CFG_DUNGEON_Z_FIELD.label = 3
+DIG_TREASURE_EVENT_CFG_DUNGEON_Z_FIELD.has_default_value = false
+DIG_TREASURE_EVENT_CFG_DUNGEON_Z_FIELD.default_value = {}
+DIG_TREASURE_EVENT_CFG_DUNGEON_Z_FIELD.type = 2
+DIG_TREASURE_EVENT_CFG_DUNGEON_Z_FIELD.cpp_type = 6
+
+DIG_TREASURE_EVENT_CFG_MAP_ID_FIELD.name = "map_id"
+DIG_TREASURE_EVENT_CFG_MAP_ID_FIELD.full_name = ".ftcfg.dig_treasure_event_cfg.map_id"
+DIG_TREASURE_EVENT_CFG_MAP_ID_FIELD.number = 6
+DIG_TREASURE_EVENT_CFG_MAP_ID_FIELD.index = 5
+DIG_TREASURE_EVENT_CFG_MAP_ID_FIELD.label = 3
+DIG_TREASURE_EVENT_CFG_MAP_ID_FIELD.has_default_value = false
+DIG_TREASURE_EVENT_CFG_MAP_ID_FIELD.default_value = {}
+DIG_TREASURE_EVENT_CFG_MAP_ID_FIELD.type = 5
+DIG_TREASURE_EVENT_CFG_MAP_ID_FIELD.cpp_type = 1
+
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_TASK_ID_FIELD.name = "touchoff_task_id"
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_TASK_ID_FIELD.full_name = ".ftcfg.dig_treasure_event_cfg.touchoff_task_id"
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_TASK_ID_FIELD.number = 7
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_TASK_ID_FIELD.index = 6
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_TASK_ID_FIELD.label = 3
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_TASK_ID_FIELD.has_default_value = false
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_TASK_ID_FIELD.default_value = {}
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_TASK_ID_FIELD.type = 5
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_TASK_ID_FIELD.cpp_type = 1
+
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_RATE_FIELD.name = "touchoff_rate"
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_RATE_FIELD.full_name = ".ftcfg.dig_treasure_event_cfg.touchoff_rate"
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_RATE_FIELD.number = 8
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_RATE_FIELD.index = 7
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_RATE_FIELD.label = 3
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_RATE_FIELD.has_default_value = false
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_RATE_FIELD.default_value = {}
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_RATE_FIELD.type = 5
+DIG_TREASURE_EVENT_CFG_TOUCHOFF_RATE_FIELD.cpp_type = 1
+
+DIG_TREASURE_EVENT_CFG_ELITE_MONSTER_FIELD.name = "elite_monster"
+DIG_TREASURE_EVENT_CFG_ELITE_MONSTER_FIELD.full_name = ".ftcfg.dig_treasure_event_cfg.elite_monster"
+DIG_TREASURE_EVENT_CFG_ELITE_MONSTER_FIELD.number = 9
+DIG_TREASURE_EVENT_CFG_ELITE_MONSTER_FIELD.index = 8
+DIG_TREASURE_EVENT_CFG_ELITE_MONSTER_FIELD.label = 3
+DIG_TREASURE_EVENT_CFG_ELITE_MONSTER_FIELD.has_default_value = false
+DIG_TREASURE_EVENT_CFG_ELITE_MONSTER_FIELD.default_value = {}
+DIG_TREASURE_EVENT_CFG_ELITE_MONSTER_FIELD.type = 5
+DIG_TREASURE_EVENT_CFG_ELITE_MONSTER_FIELD.cpp_type = 1
+
+DIG_TREASURE_EVENT_CFG_BROAD_FIELD.name = "broad"
+DIG_TREASURE_EVENT_CFG_BROAD_FIELD.full_name = ".ftcfg.dig_treasure_event_cfg.broad"
+DIG_TREASURE_EVENT_CFG_BROAD_FIELD.number = 10
+DIG_TREASURE_EVENT_CFG_BROAD_FIELD.index = 9
+DIG_TREASURE_EVENT_CFG_BROAD_FIELD.label = 2
+DIG_TREASURE_EVENT_CFG_BROAD_FIELD.has_default_value = false
+DIG_TREASURE_EVENT_CFG_BROAD_FIELD.default_value = ""
+DIG_TREASURE_EVENT_CFG_BROAD_FIELD.type = 9
+DIG_TREASURE_EVENT_CFG_BROAD_FIELD.cpp_type = 9
+
+DIG_TREASURE_EVENT_CFG.name = "dig_treasure_event_cfg"
+DIG_TREASURE_EVENT_CFG.full_name = ".ftcfg.dig_treasure_event_cfg"
+DIG_TREASURE_EVENT_CFG.nested_types = {}
+DIG_TREASURE_EVENT_CFG.enum_types = {}
+DIG_TREASURE_EVENT_CFG.fields = {DIG_TREASURE_EVENT_CFG_EVENT_ID_FIELD, DIG_TREASURE_EVENT_CFG_DISCRIBE_FIELD, DIG_TREASURE_EVENT_CFG_BOXES_ID_FIELD, DIG_TREASURE_EVENT_CFG_DUNGEON_X_FIELD, DIG_TREASURE_EVENT_CFG_DUNGEON_Z_FIELD, DIG_TREASURE_EVENT_CFG_MAP_ID_FIELD, DIG_TREASURE_EVENT_CFG_TOUCHOFF_TASK_ID_FIELD, DIG_TREASURE_EVENT_CFG_TOUCHOFF_RATE_FIELD, DIG_TREASURE_EVENT_CFG_ELITE_MONSTER_FIELD, DIG_TREASURE_EVENT_CFG_BROAD_FIELD}
+DIG_TREASURE_EVENT_CFG.is_extendable = false
+DIG_TREASURE_EVENT_CFG.extensions = {}
+DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD.name = "items"
+DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.dig_treasure_event_cfgs.items"
+DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD.number = 1
+DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD.index = 0
+DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD.label = 3
+DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD.has_default_value = false
+DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD.default_value = {}
+DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD.message_type = DIG_TREASURE_EVENT_CFG
+DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD.type = 11
+DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+DIG_TREASURE_EVENT_CFGS.name = "dig_treasure_event_cfgs"
+DIG_TREASURE_EVENT_CFGS.full_name = ".ftcfg.dig_treasure_event_cfgs"
+DIG_TREASURE_EVENT_CFGS.nested_types = {}
+DIG_TREASURE_EVENT_CFGS.enum_types = {}
+DIG_TREASURE_EVENT_CFGS.fields = {DIG_TREASURE_EVENT_CFGS_ITEMS_FIELD}
+DIG_TREASURE_EVENT_CFGS.is_extendable = false
+DIG_TREASURE_EVENT_CFGS.extensions = {}
+DROP_POINT_CFG_ID_FIELD.name = "id"
+DROP_POINT_CFG_ID_FIELD.full_name = ".ftcfg.drop_point_cfg.id"
+DROP_POINT_CFG_ID_FIELD.number = 1
+DROP_POINT_CFG_ID_FIELD.index = 0
+DROP_POINT_CFG_ID_FIELD.label = 2
+DROP_POINT_CFG_ID_FIELD.has_default_value = false
+DROP_POINT_CFG_ID_FIELD.default_value = 0
+DROP_POINT_CFG_ID_FIELD.type = 5
+DROP_POINT_CFG_ID_FIELD.cpp_type = 1
+
+DROP_POINT_CFG_MODULE_FIELD.name = "module"
+DROP_POINT_CFG_MODULE_FIELD.full_name = ".ftcfg.drop_point_cfg.module"
+DROP_POINT_CFG_MODULE_FIELD.number = 2
+DROP_POINT_CFG_MODULE_FIELD.index = 1
+DROP_POINT_CFG_MODULE_FIELD.label = 2
+DROP_POINT_CFG_MODULE_FIELD.has_default_value = false
+DROP_POINT_CFG_MODULE_FIELD.default_value = 0
+DROP_POINT_CFG_MODULE_FIELD.type = 5
+DROP_POINT_CFG_MODULE_FIELD.cpp_type = 1
+
+DROP_POINT_CFG_MINDISTANCE_FIELD.name = "minDistance"
+DROP_POINT_CFG_MINDISTANCE_FIELD.full_name = ".ftcfg.drop_point_cfg.minDistance"
+DROP_POINT_CFG_MINDISTANCE_FIELD.number = 3
+DROP_POINT_CFG_MINDISTANCE_FIELD.index = 2
+DROP_POINT_CFG_MINDISTANCE_FIELD.label = 2
+DROP_POINT_CFG_MINDISTANCE_FIELD.has_default_value = false
+DROP_POINT_CFG_MINDISTANCE_FIELD.default_value = 0.0
+DROP_POINT_CFG_MINDISTANCE_FIELD.type = 2
+DROP_POINT_CFG_MINDISTANCE_FIELD.cpp_type = 6
+
+DROP_POINT_CFG_PICKTYPE_FIELD.name = "pickType"
+DROP_POINT_CFG_PICKTYPE_FIELD.full_name = ".ftcfg.drop_point_cfg.pickType"
+DROP_POINT_CFG_PICKTYPE_FIELD.number = 4
+DROP_POINT_CFG_PICKTYPE_FIELD.index = 3
+DROP_POINT_CFG_PICKTYPE_FIELD.label = 2
+DROP_POINT_CFG_PICKTYPE_FIELD.has_default_value = false
+DROP_POINT_CFG_PICKTYPE_FIELD.default_value = 0
+DROP_POINT_CFG_PICKTYPE_FIELD.type = 5
+DROP_POINT_CFG_PICKTYPE_FIELD.cpp_type = 1
+
+DROP_POINT_CFG_BSHOW_FIELD.name = "bShow"
+DROP_POINT_CFG_BSHOW_FIELD.full_name = ".ftcfg.drop_point_cfg.bShow"
+DROP_POINT_CFG_BSHOW_FIELD.number = 5
+DROP_POINT_CFG_BSHOW_FIELD.index = 4
+DROP_POINT_CFG_BSHOW_FIELD.label = 2
+DROP_POINT_CFG_BSHOW_FIELD.has_default_value = false
+DROP_POINT_CFG_BSHOW_FIELD.default_value = 0
+DROP_POINT_CFG_BSHOW_FIELD.type = 5
+DROP_POINT_CFG_BSHOW_FIELD.cpp_type = 1
+
+DROP_POINT_CFG_TEXTID_FIELD.name = "textId"
+DROP_POINT_CFG_TEXTID_FIELD.full_name = ".ftcfg.drop_point_cfg.textId"
+DROP_POINT_CFG_TEXTID_FIELD.number = 6
+DROP_POINT_CFG_TEXTID_FIELD.index = 5
+DROP_POINT_CFG_TEXTID_FIELD.label = 2
+DROP_POINT_CFG_TEXTID_FIELD.has_default_value = false
+DROP_POINT_CFG_TEXTID_FIELD.default_value = 0
+DROP_POINT_CFG_TEXTID_FIELD.type = 5
+DROP_POINT_CFG_TEXTID_FIELD.cpp_type = 1
+
+DROP_POINT_CFG.name = "drop_point_cfg"
+DROP_POINT_CFG.full_name = ".ftcfg.drop_point_cfg"
+DROP_POINT_CFG.nested_types = {}
+DROP_POINT_CFG.enum_types = {}
+DROP_POINT_CFG.fields = {DROP_POINT_CFG_ID_FIELD, DROP_POINT_CFG_MODULE_FIELD, DROP_POINT_CFG_MINDISTANCE_FIELD, DROP_POINT_CFG_PICKTYPE_FIELD, DROP_POINT_CFG_BSHOW_FIELD, DROP_POINT_CFG_TEXTID_FIELD}
+DROP_POINT_CFG.is_extendable = false
+DROP_POINT_CFG.extensions = {}
+DROP_POINT_CFGS_ITEMS_FIELD.name = "items"
+DROP_POINT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.drop_point_cfgs.items"
+DROP_POINT_CFGS_ITEMS_FIELD.number = 1
+DROP_POINT_CFGS_ITEMS_FIELD.index = 0
+DROP_POINT_CFGS_ITEMS_FIELD.label = 3
+DROP_POINT_CFGS_ITEMS_FIELD.has_default_value = false
+DROP_POINT_CFGS_ITEMS_FIELD.default_value = {}
+DROP_POINT_CFGS_ITEMS_FIELD.message_type = DROP_POINT_CFG
+DROP_POINT_CFGS_ITEMS_FIELD.type = 11
+DROP_POINT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+DROP_POINT_CFGS.name = "drop_point_cfgs"
+DROP_POINT_CFGS.full_name = ".ftcfg.drop_point_cfgs"
+DROP_POINT_CFGS.nested_types = {}
+DROP_POINT_CFGS.enum_types = {}
+DROP_POINT_CFGS.fields = {DROP_POINT_CFGS_ITEMS_FIELD}
+DROP_POINT_CFGS.is_extendable = false
+DROP_POINT_CFGS.extensions = {}
+RANK_FUNCTION_CFG_ID_FIELD.name = "id"
+RANK_FUNCTION_CFG_ID_FIELD.full_name = ".ftcfg.rank_function_cfg.id"
+RANK_FUNCTION_CFG_ID_FIELD.number = 1
+RANK_FUNCTION_CFG_ID_FIELD.index = 0
+RANK_FUNCTION_CFG_ID_FIELD.label = 2
+RANK_FUNCTION_CFG_ID_FIELD.has_default_value = false
+RANK_FUNCTION_CFG_ID_FIELD.default_value = 0
+RANK_FUNCTION_CFG_ID_FIELD.type = 5
+RANK_FUNCTION_CFG_ID_FIELD.cpp_type = 1
+
+RANK_FUNCTION_CFG_NAME_FIELD.name = "name"
+RANK_FUNCTION_CFG_NAME_FIELD.full_name = ".ftcfg.rank_function_cfg.name"
+RANK_FUNCTION_CFG_NAME_FIELD.number = 2
+RANK_FUNCTION_CFG_NAME_FIELD.index = 1
+RANK_FUNCTION_CFG_NAME_FIELD.label = 2
+RANK_FUNCTION_CFG_NAME_FIELD.has_default_value = false
+RANK_FUNCTION_CFG_NAME_FIELD.default_value = 0
+RANK_FUNCTION_CFG_NAME_FIELD.type = 5
+RANK_FUNCTION_CFG_NAME_FIELD.cpp_type = 1
+
+RANK_FUNCTION_CFG_SELECT_SHOW_FIELD.name = "select_show"
+RANK_FUNCTION_CFG_SELECT_SHOW_FIELD.full_name = ".ftcfg.rank_function_cfg.select_show"
+RANK_FUNCTION_CFG_SELECT_SHOW_FIELD.number = 3
+RANK_FUNCTION_CFG_SELECT_SHOW_FIELD.index = 2
+RANK_FUNCTION_CFG_SELECT_SHOW_FIELD.label = 2
+RANK_FUNCTION_CFG_SELECT_SHOW_FIELD.has_default_value = false
+RANK_FUNCTION_CFG_SELECT_SHOW_FIELD.default_value = 0
+RANK_FUNCTION_CFG_SELECT_SHOW_FIELD.type = 5
+RANK_FUNCTION_CFG_SELECT_SHOW_FIELD.cpp_type = 1
+
+RANK_FUNCTION_CFG_TYPE_FIELD.name = "type"
+RANK_FUNCTION_CFG_TYPE_FIELD.full_name = ".ftcfg.rank_function_cfg.type"
+RANK_FUNCTION_CFG_TYPE_FIELD.number = 4
+RANK_FUNCTION_CFG_TYPE_FIELD.index = 3
+RANK_FUNCTION_CFG_TYPE_FIELD.label = 2
+RANK_FUNCTION_CFG_TYPE_FIELD.has_default_value = false
+RANK_FUNCTION_CFG_TYPE_FIELD.default_value = 0
+RANK_FUNCTION_CFG_TYPE_FIELD.type = 5
+RANK_FUNCTION_CFG_TYPE_FIELD.cpp_type = 1
+
+RANK_FUNCTION_CFG_CHILD_NAMES_FIELD.name = "child_names"
+RANK_FUNCTION_CFG_CHILD_NAMES_FIELD.full_name = ".ftcfg.rank_function_cfg.child_names"
+RANK_FUNCTION_CFG_CHILD_NAMES_FIELD.number = 5
+RANK_FUNCTION_CFG_CHILD_NAMES_FIELD.index = 4
+RANK_FUNCTION_CFG_CHILD_NAMES_FIELD.label = 3
+RANK_FUNCTION_CFG_CHILD_NAMES_FIELD.has_default_value = false
+RANK_FUNCTION_CFG_CHILD_NAMES_FIELD.default_value = {}
+RANK_FUNCTION_CFG_CHILD_NAMES_FIELD.type = 5
+RANK_FUNCTION_CFG_CHILD_NAMES_FIELD.cpp_type = 1
+
+RANK_FUNCTION_CFG_CHILD_TYPES_FIELD.name = "child_types"
+RANK_FUNCTION_CFG_CHILD_TYPES_FIELD.full_name = ".ftcfg.rank_function_cfg.child_types"
+RANK_FUNCTION_CFG_CHILD_TYPES_FIELD.number = 6
+RANK_FUNCTION_CFG_CHILD_TYPES_FIELD.index = 5
+RANK_FUNCTION_CFG_CHILD_TYPES_FIELD.label = 3
+RANK_FUNCTION_CFG_CHILD_TYPES_FIELD.has_default_value = false
+RANK_FUNCTION_CFG_CHILD_TYPES_FIELD.default_value = {}
+RANK_FUNCTION_CFG_CHILD_TYPES_FIELD.type = 5
+RANK_FUNCTION_CFG_CHILD_TYPES_FIELD.cpp_type = 1
+
+RANK_FUNCTION_CFG_CHILD_VALUES_FIELD.name = "child_values"
+RANK_FUNCTION_CFG_CHILD_VALUES_FIELD.full_name = ".ftcfg.rank_function_cfg.child_values"
+RANK_FUNCTION_CFG_CHILD_VALUES_FIELD.number = 7
+RANK_FUNCTION_CFG_CHILD_VALUES_FIELD.index = 6
+RANK_FUNCTION_CFG_CHILD_VALUES_FIELD.label = 3
+RANK_FUNCTION_CFG_CHILD_VALUES_FIELD.has_default_value = false
+RANK_FUNCTION_CFG_CHILD_VALUES_FIELD.default_value = {}
+RANK_FUNCTION_CFG_CHILD_VALUES_FIELD.type = 2
+RANK_FUNCTION_CFG_CHILD_VALUES_FIELD.cpp_type = 6
+
+RANK_FUNCTION_CFG_SHOW_FIELDS_FIELD.name = "show_fields"
+RANK_FUNCTION_CFG_SHOW_FIELDS_FIELD.full_name = ".ftcfg.rank_function_cfg.show_fields"
+RANK_FUNCTION_CFG_SHOW_FIELDS_FIELD.number = 8
+RANK_FUNCTION_CFG_SHOW_FIELDS_FIELD.index = 7
+RANK_FUNCTION_CFG_SHOW_FIELDS_FIELD.label = 3
+RANK_FUNCTION_CFG_SHOW_FIELDS_FIELD.has_default_value = false
+RANK_FUNCTION_CFG_SHOW_FIELDS_FIELD.default_value = {}
+RANK_FUNCTION_CFG_SHOW_FIELDS_FIELD.type = 5
+RANK_FUNCTION_CFG_SHOW_FIELDS_FIELD.cpp_type = 1
+
+RANK_FUNCTION_CFG_HOST_FIELD_FIELD.name = "host_field"
+RANK_FUNCTION_CFG_HOST_FIELD_FIELD.full_name = ".ftcfg.rank_function_cfg.host_field"
+RANK_FUNCTION_CFG_HOST_FIELD_FIELD.number = 9
+RANK_FUNCTION_CFG_HOST_FIELD_FIELD.index = 8
+RANK_FUNCTION_CFG_HOST_FIELD_FIELD.label = 2
+RANK_FUNCTION_CFG_HOST_FIELD_FIELD.has_default_value = false
+RANK_FUNCTION_CFG_HOST_FIELD_FIELD.default_value = ""
+RANK_FUNCTION_CFG_HOST_FIELD_FIELD.type = 9
+RANK_FUNCTION_CFG_HOST_FIELD_FIELD.cpp_type = 9
+
+RANK_FUNCTION_CFG.name = "rank_function_cfg"
+RANK_FUNCTION_CFG.full_name = ".ftcfg.rank_function_cfg"
+RANK_FUNCTION_CFG.nested_types = {}
+RANK_FUNCTION_CFG.enum_types = {}
+RANK_FUNCTION_CFG.fields = {RANK_FUNCTION_CFG_ID_FIELD, RANK_FUNCTION_CFG_NAME_FIELD, RANK_FUNCTION_CFG_SELECT_SHOW_FIELD, RANK_FUNCTION_CFG_TYPE_FIELD, RANK_FUNCTION_CFG_CHILD_NAMES_FIELD, RANK_FUNCTION_CFG_CHILD_TYPES_FIELD, RANK_FUNCTION_CFG_CHILD_VALUES_FIELD, RANK_FUNCTION_CFG_SHOW_FIELDS_FIELD, RANK_FUNCTION_CFG_HOST_FIELD_FIELD}
+RANK_FUNCTION_CFG.is_extendable = false
+RANK_FUNCTION_CFG.extensions = {}
+RANK_FUNCTION_CFGS_ITEMS_FIELD.name = "items"
+RANK_FUNCTION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.rank_function_cfgs.items"
+RANK_FUNCTION_CFGS_ITEMS_FIELD.number = 1
+RANK_FUNCTION_CFGS_ITEMS_FIELD.index = 0
+RANK_FUNCTION_CFGS_ITEMS_FIELD.label = 3
+RANK_FUNCTION_CFGS_ITEMS_FIELD.has_default_value = false
+RANK_FUNCTION_CFGS_ITEMS_FIELD.default_value = {}
+RANK_FUNCTION_CFGS_ITEMS_FIELD.message_type = RANK_FUNCTION_CFG
+RANK_FUNCTION_CFGS_ITEMS_FIELD.type = 11
+RANK_FUNCTION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RANK_FUNCTION_CFGS.name = "rank_function_cfgs"
+RANK_FUNCTION_CFGS.full_name = ".ftcfg.rank_function_cfgs"
+RANK_FUNCTION_CFGS.nested_types = {}
+RANK_FUNCTION_CFGS.enum_types = {}
+RANK_FUNCTION_CFGS.fields = {RANK_FUNCTION_CFGS_ITEMS_FIELD}
+RANK_FUNCTION_CFGS.is_extendable = false
+RANK_FUNCTION_CFGS.extensions = {}
+RANK_FIELD_CFG_ID_FIELD.name = "id"
+RANK_FIELD_CFG_ID_FIELD.full_name = ".ftcfg.rank_field_cfg.id"
+RANK_FIELD_CFG_ID_FIELD.number = 1
+RANK_FIELD_CFG_ID_FIELD.index = 0
+RANK_FIELD_CFG_ID_FIELD.label = 2
+RANK_FIELD_CFG_ID_FIELD.has_default_value = false
+RANK_FIELD_CFG_ID_FIELD.default_value = 0
+RANK_FIELD_CFG_ID_FIELD.type = 5
+RANK_FIELD_CFG_ID_FIELD.cpp_type = 1
+
+RANK_FIELD_CFG_NAME_FIELD.name = "name"
+RANK_FIELD_CFG_NAME_FIELD.full_name = ".ftcfg.rank_field_cfg.name"
+RANK_FIELD_CFG_NAME_FIELD.number = 2
+RANK_FIELD_CFG_NAME_FIELD.index = 1
+RANK_FIELD_CFG_NAME_FIELD.label = 2
+RANK_FIELD_CFG_NAME_FIELD.has_default_value = false
+RANK_FIELD_CFG_NAME_FIELD.default_value = 0
+RANK_FIELD_CFG_NAME_FIELD.type = 5
+RANK_FIELD_CFG_NAME_FIELD.cpp_type = 1
+
+RANK_FIELD_CFG_FIELD_NAME_FIELD.name = "field_name"
+RANK_FIELD_CFG_FIELD_NAME_FIELD.full_name = ".ftcfg.rank_field_cfg.field_name"
+RANK_FIELD_CFG_FIELD_NAME_FIELD.number = 3
+RANK_FIELD_CFG_FIELD_NAME_FIELD.index = 2
+RANK_FIELD_CFG_FIELD_NAME_FIELD.label = 2
+RANK_FIELD_CFG_FIELD_NAME_FIELD.has_default_value = false
+RANK_FIELD_CFG_FIELD_NAME_FIELD.default_value = ""
+RANK_FIELD_CFG_FIELD_NAME_FIELD.type = 9
+RANK_FIELD_CFG_FIELD_NAME_FIELD.cpp_type = 9
+
+RANK_FIELD_CFG_CHILD_NAMES_FIELD.name = "child_names"
+RANK_FIELD_CFG_CHILD_NAMES_FIELD.full_name = ".ftcfg.rank_field_cfg.child_names"
+RANK_FIELD_CFG_CHILD_NAMES_FIELD.number = 4
+RANK_FIELD_CFG_CHILD_NAMES_FIELD.index = 3
+RANK_FIELD_CFG_CHILD_NAMES_FIELD.label = 3
+RANK_FIELD_CFG_CHILD_NAMES_FIELD.has_default_value = false
+RANK_FIELD_CFG_CHILD_NAMES_FIELD.default_value = {}
+RANK_FIELD_CFG_CHILD_NAMES_FIELD.type = 5
+RANK_FIELD_CFG_CHILD_NAMES_FIELD.cpp_type = 1
+
+RANK_FIELD_CFG_CHILD_TYPES_FIELD.name = "child_types"
+RANK_FIELD_CFG_CHILD_TYPES_FIELD.full_name = ".ftcfg.rank_field_cfg.child_types"
+RANK_FIELD_CFG_CHILD_TYPES_FIELD.number = 5
+RANK_FIELD_CFG_CHILD_TYPES_FIELD.index = 4
+RANK_FIELD_CFG_CHILD_TYPES_FIELD.label = 3
+RANK_FIELD_CFG_CHILD_TYPES_FIELD.has_default_value = false
+RANK_FIELD_CFG_CHILD_TYPES_FIELD.default_value = {}
+RANK_FIELD_CFG_CHILD_TYPES_FIELD.type = 5
+RANK_FIELD_CFG_CHILD_TYPES_FIELD.cpp_type = 1
+
+RANK_FIELD_CFG_CHILD_VALUES_FIELD.name = "child_values"
+RANK_FIELD_CFG_CHILD_VALUES_FIELD.full_name = ".ftcfg.rank_field_cfg.child_values"
+RANK_FIELD_CFG_CHILD_VALUES_FIELD.number = 6
+RANK_FIELD_CFG_CHILD_VALUES_FIELD.index = 5
+RANK_FIELD_CFG_CHILD_VALUES_FIELD.label = 3
+RANK_FIELD_CFG_CHILD_VALUES_FIELD.has_default_value = false
+RANK_FIELD_CFG_CHILD_VALUES_FIELD.default_value = {}
+RANK_FIELD_CFG_CHILD_VALUES_FIELD.type = 2
+RANK_FIELD_CFG_CHILD_VALUES_FIELD.cpp_type = 6
+
+RANK_FIELD_CFG_HOST_FIELD_FIELD.name = "host_field"
+RANK_FIELD_CFG_HOST_FIELD_FIELD.full_name = ".ftcfg.rank_field_cfg.host_field"
+RANK_FIELD_CFG_HOST_FIELD_FIELD.number = 7
+RANK_FIELD_CFG_HOST_FIELD_FIELD.index = 6
+RANK_FIELD_CFG_HOST_FIELD_FIELD.label = 2
+RANK_FIELD_CFG_HOST_FIELD_FIELD.has_default_value = false
+RANK_FIELD_CFG_HOST_FIELD_FIELD.default_value = ""
+RANK_FIELD_CFG_HOST_FIELD_FIELD.type = 9
+RANK_FIELD_CFG_HOST_FIELD_FIELD.cpp_type = 9
+
+RANK_FIELD_CFG.name = "rank_field_cfg"
+RANK_FIELD_CFG.full_name = ".ftcfg.rank_field_cfg"
+RANK_FIELD_CFG.nested_types = {}
+RANK_FIELD_CFG.enum_types = {}
+RANK_FIELD_CFG.fields = {RANK_FIELD_CFG_ID_FIELD, RANK_FIELD_CFG_NAME_FIELD, RANK_FIELD_CFG_FIELD_NAME_FIELD, RANK_FIELD_CFG_CHILD_NAMES_FIELD, RANK_FIELD_CFG_CHILD_TYPES_FIELD, RANK_FIELD_CFG_CHILD_VALUES_FIELD, RANK_FIELD_CFG_HOST_FIELD_FIELD}
+RANK_FIELD_CFG.is_extendable = false
+RANK_FIELD_CFG.extensions = {}
+RANK_FIELD_CFGS_ITEMS_FIELD.name = "items"
+RANK_FIELD_CFGS_ITEMS_FIELD.full_name = ".ftcfg.rank_field_cfgs.items"
+RANK_FIELD_CFGS_ITEMS_FIELD.number = 1
+RANK_FIELD_CFGS_ITEMS_FIELD.index = 0
+RANK_FIELD_CFGS_ITEMS_FIELD.label = 3
+RANK_FIELD_CFGS_ITEMS_FIELD.has_default_value = false
+RANK_FIELD_CFGS_ITEMS_FIELD.default_value = {}
+RANK_FIELD_CFGS_ITEMS_FIELD.message_type = RANK_FIELD_CFG
+RANK_FIELD_CFGS_ITEMS_FIELD.type = 11
+RANK_FIELD_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RANK_FIELD_CFGS.name = "rank_field_cfgs"
+RANK_FIELD_CFGS.full_name = ".ftcfg.rank_field_cfgs"
+RANK_FIELD_CFGS.nested_types = {}
+RANK_FIELD_CFGS.enum_types = {}
+RANK_FIELD_CFGS.fields = {RANK_FIELD_CFGS_ITEMS_FIELD}
+RANK_FIELD_CFGS.is_extendable = false
+RANK_FIELD_CFGS.extensions = {}
+EDN_CFG_LVL_FIELD.name = "lvl"
+EDN_CFG_LVL_FIELD.full_name = ".ftcfg.edn_cfg.lvl"
+EDN_CFG_LVL_FIELD.number = 1
+EDN_CFG_LVL_FIELD.index = 0
+EDN_CFG_LVL_FIELD.label = 2
+EDN_CFG_LVL_FIELD.has_default_value = false
+EDN_CFG_LVL_FIELD.default_value = 0
+EDN_CFG_LVL_FIELD.type = 5
+EDN_CFG_LVL_FIELD.cpp_type = 1
+
+EDN_CFG_LVLUP_EXP_FIELD.name = "lvlup_exp"
+EDN_CFG_LVLUP_EXP_FIELD.full_name = ".ftcfg.edn_cfg.lvlup_exp"
+EDN_CFG_LVLUP_EXP_FIELD.number = 2
+EDN_CFG_LVLUP_EXP_FIELD.index = 1
+EDN_CFG_LVLUP_EXP_FIELD.label = 2
+EDN_CFG_LVLUP_EXP_FIELD.has_default_value = false
+EDN_CFG_LVLUP_EXP_FIELD.default_value = 0
+EDN_CFG_LVLUP_EXP_FIELD.type = 5
+EDN_CFG_LVLUP_EXP_FIELD.cpp_type = 1
+
+EDN_CFG.name = "edn_cfg"
+EDN_CFG.full_name = ".ftcfg.edn_cfg"
+EDN_CFG.nested_types = {}
+EDN_CFG.enum_types = {}
+EDN_CFG.fields = {EDN_CFG_LVL_FIELD, EDN_CFG_LVLUP_EXP_FIELD}
+EDN_CFG.is_extendable = false
+EDN_CFG.extensions = {}
+EDN_CFGS_ITEMS_FIELD.name = "items"
+EDN_CFGS_ITEMS_FIELD.full_name = ".ftcfg.edn_cfgs.items"
+EDN_CFGS_ITEMS_FIELD.number = 1
+EDN_CFGS_ITEMS_FIELD.index = 0
+EDN_CFGS_ITEMS_FIELD.label = 3
+EDN_CFGS_ITEMS_FIELD.has_default_value = false
+EDN_CFGS_ITEMS_FIELD.default_value = {}
+EDN_CFGS_ITEMS_FIELD.message_type = EDN_CFG
+EDN_CFGS_ITEMS_FIELD.type = 11
+EDN_CFGS_ITEMS_FIELD.cpp_type = 10
+
+EDN_CFGS.name = "edn_cfgs"
+EDN_CFGS.full_name = ".ftcfg.edn_cfgs"
+EDN_CFGS.nested_types = {}
+EDN_CFGS.enum_types = {}
+EDN_CFGS.fields = {EDN_CFGS_ITEMS_FIELD}
+EDN_CFGS.is_extendable = false
+EDN_CFGS.extensions = {}
+EDN_SCENE_CFG_SCENE_ID_FIELD.name = "scene_id"
+EDN_SCENE_CFG_SCENE_ID_FIELD.full_name = ".ftcfg.edn_scene_cfg.scene_id"
+EDN_SCENE_CFG_SCENE_ID_FIELD.number = 1
+EDN_SCENE_CFG_SCENE_ID_FIELD.index = 0
+EDN_SCENE_CFG_SCENE_ID_FIELD.label = 2
+EDN_SCENE_CFG_SCENE_ID_FIELD.has_default_value = false
+EDN_SCENE_CFG_SCENE_ID_FIELD.default_value = 0
+EDN_SCENE_CFG_SCENE_ID_FIELD.type = 5
+EDN_SCENE_CFG_SCENE_ID_FIELD.cpp_type = 1
+
+EDN_SCENE_CFG_OPEN_LVL_FIELD.name = "open_lvl"
+EDN_SCENE_CFG_OPEN_LVL_FIELD.full_name = ".ftcfg.edn_scene_cfg.open_lvl"
+EDN_SCENE_CFG_OPEN_LVL_FIELD.number = 2
+EDN_SCENE_CFG_OPEN_LVL_FIELD.index = 1
+EDN_SCENE_CFG_OPEN_LVL_FIELD.label = 2
+EDN_SCENE_CFG_OPEN_LVL_FIELD.has_default_value = false
+EDN_SCENE_CFG_OPEN_LVL_FIELD.default_value = 0
+EDN_SCENE_CFG_OPEN_LVL_FIELD.type = 5
+EDN_SCENE_CFG_OPEN_LVL_FIELD.cpp_type = 1
+
+EDN_SCENE_CFG_MAPNAME_ID_FIELD.name = "mapname_id"
+EDN_SCENE_CFG_MAPNAME_ID_FIELD.full_name = ".ftcfg.edn_scene_cfg.mapname_id"
+EDN_SCENE_CFG_MAPNAME_ID_FIELD.number = 3
+EDN_SCENE_CFG_MAPNAME_ID_FIELD.index = 2
+EDN_SCENE_CFG_MAPNAME_ID_FIELD.label = 2
+EDN_SCENE_CFG_MAPNAME_ID_FIELD.has_default_value = false
+EDN_SCENE_CFG_MAPNAME_ID_FIELD.default_value = 0
+EDN_SCENE_CFG_MAPNAME_ID_FIELD.type = 5
+EDN_SCENE_CFG_MAPNAME_ID_FIELD.cpp_type = 1
+
+EDN_SCENE_CFG_MAP_NAME_FIELD.name = "map_name"
+EDN_SCENE_CFG_MAP_NAME_FIELD.full_name = ".ftcfg.edn_scene_cfg.map_name"
+EDN_SCENE_CFG_MAP_NAME_FIELD.number = 4
+EDN_SCENE_CFG_MAP_NAME_FIELD.index = 3
+EDN_SCENE_CFG_MAP_NAME_FIELD.label = 2
+EDN_SCENE_CFG_MAP_NAME_FIELD.has_default_value = false
+EDN_SCENE_CFG_MAP_NAME_FIELD.default_value = ""
+EDN_SCENE_CFG_MAP_NAME_FIELD.type = 9
+EDN_SCENE_CFG_MAP_NAME_FIELD.cpp_type = 9
+
+EDN_SCENE_CFG_MAP_IMGID_FIELD.name = "map_imgid"
+EDN_SCENE_CFG_MAP_IMGID_FIELD.full_name = ".ftcfg.edn_scene_cfg.map_imgid"
+EDN_SCENE_CFG_MAP_IMGID_FIELD.number = 5
+EDN_SCENE_CFG_MAP_IMGID_FIELD.index = 4
+EDN_SCENE_CFG_MAP_IMGID_FIELD.label = 2
+EDN_SCENE_CFG_MAP_IMGID_FIELD.has_default_value = false
+EDN_SCENE_CFG_MAP_IMGID_FIELD.default_value = 0
+EDN_SCENE_CFG_MAP_IMGID_FIELD.type = 5
+EDN_SCENE_CFG_MAP_IMGID_FIELD.cpp_type = 1
+
+EDN_SCENE_CFG_MAP_RELICSIDS_FIELD.name = "map_relicsids"
+EDN_SCENE_CFG_MAP_RELICSIDS_FIELD.full_name = ".ftcfg.edn_scene_cfg.map_relicsids"
+EDN_SCENE_CFG_MAP_RELICSIDS_FIELD.number = 6
+EDN_SCENE_CFG_MAP_RELICSIDS_FIELD.index = 5
+EDN_SCENE_CFG_MAP_RELICSIDS_FIELD.label = 3
+EDN_SCENE_CFG_MAP_RELICSIDS_FIELD.has_default_value = false
+EDN_SCENE_CFG_MAP_RELICSIDS_FIELD.default_value = {}
+EDN_SCENE_CFG_MAP_RELICSIDS_FIELD.type = 5
+EDN_SCENE_CFG_MAP_RELICSIDS_FIELD.cpp_type = 1
+
+EDN_SCENE_CFG.name = "edn_scene_cfg"
+EDN_SCENE_CFG.full_name = ".ftcfg.edn_scene_cfg"
+EDN_SCENE_CFG.nested_types = {}
+EDN_SCENE_CFG.enum_types = {}
+EDN_SCENE_CFG.fields = {EDN_SCENE_CFG_SCENE_ID_FIELD, EDN_SCENE_CFG_OPEN_LVL_FIELD, EDN_SCENE_CFG_MAPNAME_ID_FIELD, EDN_SCENE_CFG_MAP_NAME_FIELD, EDN_SCENE_CFG_MAP_IMGID_FIELD, EDN_SCENE_CFG_MAP_RELICSIDS_FIELD}
+EDN_SCENE_CFG.is_extendable = false
+EDN_SCENE_CFG.extensions = {}
+EDN_SCENE_CFGS_ITEMS_FIELD.name = "items"
+EDN_SCENE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.edn_scene_cfgs.items"
+EDN_SCENE_CFGS_ITEMS_FIELD.number = 1
+EDN_SCENE_CFGS_ITEMS_FIELD.index = 0
+EDN_SCENE_CFGS_ITEMS_FIELD.label = 3
+EDN_SCENE_CFGS_ITEMS_FIELD.has_default_value = false
+EDN_SCENE_CFGS_ITEMS_FIELD.default_value = {}
+EDN_SCENE_CFGS_ITEMS_FIELD.message_type = EDN_SCENE_CFG
+EDN_SCENE_CFGS_ITEMS_FIELD.type = 11
+EDN_SCENE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+EDN_SCENE_CFGS.name = "edn_scene_cfgs"
+EDN_SCENE_CFGS.full_name = ".ftcfg.edn_scene_cfgs"
+EDN_SCENE_CFGS.nested_types = {}
+EDN_SCENE_CFGS.enum_types = {}
+EDN_SCENE_CFGS.fields = {EDN_SCENE_CFGS_ITEMS_FIELD}
+EDN_SCENE_CFGS.is_extendable = false
+EDN_SCENE_CFGS.extensions = {}
+EDN_RELIC_CFG_ID_FIELD.name = "id"
+EDN_RELIC_CFG_ID_FIELD.full_name = ".ftcfg.edn_relic_cfg.id"
+EDN_RELIC_CFG_ID_FIELD.number = 1
+EDN_RELIC_CFG_ID_FIELD.index = 0
+EDN_RELIC_CFG_ID_FIELD.label = 2
+EDN_RELIC_CFG_ID_FIELD.has_default_value = false
+EDN_RELIC_CFG_ID_FIELD.default_value = 0
+EDN_RELIC_CFG_ID_FIELD.type = 5
+EDN_RELIC_CFG_ID_FIELD.cpp_type = 1
+
+EDN_RELIC_CFG_NAME_ID_FIELD.name = "name_id"
+EDN_RELIC_CFG_NAME_ID_FIELD.full_name = ".ftcfg.edn_relic_cfg.name_id"
+EDN_RELIC_CFG_NAME_ID_FIELD.number = 2
+EDN_RELIC_CFG_NAME_ID_FIELD.index = 1
+EDN_RELIC_CFG_NAME_ID_FIELD.label = 2
+EDN_RELIC_CFG_NAME_ID_FIELD.has_default_value = false
+EDN_RELIC_CFG_NAME_ID_FIELD.default_value = 0
+EDN_RELIC_CFG_NAME_ID_FIELD.type = 5
+EDN_RELIC_CFG_NAME_ID_FIELD.cpp_type = 1
+
+EDN_RELIC_CFG_NAME_STRING_FIELD.name = "name_string"
+EDN_RELIC_CFG_NAME_STRING_FIELD.full_name = ".ftcfg.edn_relic_cfg.name_string"
+EDN_RELIC_CFG_NAME_STRING_FIELD.number = 3
+EDN_RELIC_CFG_NAME_STRING_FIELD.index = 2
+EDN_RELIC_CFG_NAME_STRING_FIELD.label = 2
+EDN_RELIC_CFG_NAME_STRING_FIELD.has_default_value = false
+EDN_RELIC_CFG_NAME_STRING_FIELD.default_value = ""
+EDN_RELIC_CFG_NAME_STRING_FIELD.type = 9
+EDN_RELIC_CFG_NAME_STRING_FIELD.cpp_type = 9
+
+EDN_RELIC_CFG_IMAGE_ID_FIELD.name = "image_id"
+EDN_RELIC_CFG_IMAGE_ID_FIELD.full_name = ".ftcfg.edn_relic_cfg.image_id"
+EDN_RELIC_CFG_IMAGE_ID_FIELD.number = 4
+EDN_RELIC_CFG_IMAGE_ID_FIELD.index = 3
+EDN_RELIC_CFG_IMAGE_ID_FIELD.label = 2
+EDN_RELIC_CFG_IMAGE_ID_FIELD.has_default_value = false
+EDN_RELIC_CFG_IMAGE_ID_FIELD.default_value = 0
+EDN_RELIC_CFG_IMAGE_ID_FIELD.type = 5
+EDN_RELIC_CFG_IMAGE_ID_FIELD.cpp_type = 1
+
+EDN_RELIC_CFG_REWARDS_FIELD.name = "rewards"
+EDN_RELIC_CFG_REWARDS_FIELD.full_name = ".ftcfg.edn_relic_cfg.rewards"
+EDN_RELIC_CFG_REWARDS_FIELD.number = 5
+EDN_RELIC_CFG_REWARDS_FIELD.index = 4
+EDN_RELIC_CFG_REWARDS_FIELD.label = 2
+EDN_RELIC_CFG_REWARDS_FIELD.has_default_value = false
+EDN_RELIC_CFG_REWARDS_FIELD.default_value = 0
+EDN_RELIC_CFG_REWARDS_FIELD.type = 5
+EDN_RELIC_CFG_REWARDS_FIELD.cpp_type = 1
+
+EDN_RELIC_CFG_TIPS_ID_FIELD.name = "tips_id"
+EDN_RELIC_CFG_TIPS_ID_FIELD.full_name = ".ftcfg.edn_relic_cfg.tips_id"
+EDN_RELIC_CFG_TIPS_ID_FIELD.number = 6
+EDN_RELIC_CFG_TIPS_ID_FIELD.index = 5
+EDN_RELIC_CFG_TIPS_ID_FIELD.label = 2
+EDN_RELIC_CFG_TIPS_ID_FIELD.has_default_value = false
+EDN_RELIC_CFG_TIPS_ID_FIELD.default_value = 0
+EDN_RELIC_CFG_TIPS_ID_FIELD.type = 5
+EDN_RELIC_CFG_TIPS_ID_FIELD.cpp_type = 1
+
+EDN_RELIC_CFG.name = "edn_relic_cfg"
+EDN_RELIC_CFG.full_name = ".ftcfg.edn_relic_cfg"
+EDN_RELIC_CFG.nested_types = {}
+EDN_RELIC_CFG.enum_types = {}
+EDN_RELIC_CFG.fields = {EDN_RELIC_CFG_ID_FIELD, EDN_RELIC_CFG_NAME_ID_FIELD, EDN_RELIC_CFG_NAME_STRING_FIELD, EDN_RELIC_CFG_IMAGE_ID_FIELD, EDN_RELIC_CFG_REWARDS_FIELD, EDN_RELIC_CFG_TIPS_ID_FIELD}
+EDN_RELIC_CFG.is_extendable = false
+EDN_RELIC_CFG.extensions = {}
+EDN_RELIC_CFGS_ITEMS_FIELD.name = "items"
+EDN_RELIC_CFGS_ITEMS_FIELD.full_name = ".ftcfg.edn_relic_cfgs.items"
+EDN_RELIC_CFGS_ITEMS_FIELD.number = 1
+EDN_RELIC_CFGS_ITEMS_FIELD.index = 0
+EDN_RELIC_CFGS_ITEMS_FIELD.label = 3
+EDN_RELIC_CFGS_ITEMS_FIELD.has_default_value = false
+EDN_RELIC_CFGS_ITEMS_FIELD.default_value = {}
+EDN_RELIC_CFGS_ITEMS_FIELD.message_type = EDN_RELIC_CFG
+EDN_RELIC_CFGS_ITEMS_FIELD.type = 11
+EDN_RELIC_CFGS_ITEMS_FIELD.cpp_type = 10
+
+EDN_RELIC_CFGS.name = "edn_relic_cfgs"
+EDN_RELIC_CFGS.full_name = ".ftcfg.edn_relic_cfgs"
+EDN_RELIC_CFGS.nested_types = {}
+EDN_RELIC_CFGS.enum_types = {}
+EDN_RELIC_CFGS.fields = {EDN_RELIC_CFGS_ITEMS_FIELD}
+EDN_RELIC_CFGS.is_extendable = false
+EDN_RELIC_CFGS.extensions = {}
+TOWER_BASE_CFG_ID_FIELD.name = "id"
+TOWER_BASE_CFG_ID_FIELD.full_name = ".ftcfg.tower_base_cfg.id"
+TOWER_BASE_CFG_ID_FIELD.number = 1
+TOWER_BASE_CFG_ID_FIELD.index = 0
+TOWER_BASE_CFG_ID_FIELD.label = 2
+TOWER_BASE_CFG_ID_FIELD.has_default_value = false
+TOWER_BASE_CFG_ID_FIELD.default_value = 0
+TOWER_BASE_CFG_ID_FIELD.type = 5
+TOWER_BASE_CFG_ID_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_MAP_ID_FIELD.name = "map_id"
+TOWER_BASE_CFG_MAP_ID_FIELD.full_name = ".ftcfg.tower_base_cfg.map_id"
+TOWER_BASE_CFG_MAP_ID_FIELD.number = 2
+TOWER_BASE_CFG_MAP_ID_FIELD.index = 1
+TOWER_BASE_CFG_MAP_ID_FIELD.label = 3
+TOWER_BASE_CFG_MAP_ID_FIELD.has_default_value = false
+TOWER_BASE_CFG_MAP_ID_FIELD.default_value = {}
+TOWER_BASE_CFG_MAP_ID_FIELD.type = 5
+TOWER_BASE_CFG_MAP_ID_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_ITEM_ID_FIELD.name = "item_id"
+TOWER_BASE_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.tower_base_cfg.item_id"
+TOWER_BASE_CFG_ITEM_ID_FIELD.number = 3
+TOWER_BASE_CFG_ITEM_ID_FIELD.index = 2
+TOWER_BASE_CFG_ITEM_ID_FIELD.label = 2
+TOWER_BASE_CFG_ITEM_ID_FIELD.has_default_value = false
+TOWER_BASE_CFG_ITEM_ID_FIELD.default_value = 0
+TOWER_BASE_CFG_ITEM_ID_FIELD.type = 5
+TOWER_BASE_CFG_ITEM_ID_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_ITEM_COUNT_FIELD.name = "item_count"
+TOWER_BASE_CFG_ITEM_COUNT_FIELD.full_name = ".ftcfg.tower_base_cfg.item_count"
+TOWER_BASE_CFG_ITEM_COUNT_FIELD.number = 4
+TOWER_BASE_CFG_ITEM_COUNT_FIELD.index = 3
+TOWER_BASE_CFG_ITEM_COUNT_FIELD.label = 2
+TOWER_BASE_CFG_ITEM_COUNT_FIELD.has_default_value = false
+TOWER_BASE_CFG_ITEM_COUNT_FIELD.default_value = 0
+TOWER_BASE_CFG_ITEM_COUNT_FIELD.type = 5
+TOWER_BASE_CFG_ITEM_COUNT_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_RAID_ITEMID_FIELD.name = "raid_itemid"
+TOWER_BASE_CFG_RAID_ITEMID_FIELD.full_name = ".ftcfg.tower_base_cfg.raid_itemid"
+TOWER_BASE_CFG_RAID_ITEMID_FIELD.number = 5
+TOWER_BASE_CFG_RAID_ITEMID_FIELD.index = 4
+TOWER_BASE_CFG_RAID_ITEMID_FIELD.label = 2
+TOWER_BASE_CFG_RAID_ITEMID_FIELD.has_default_value = false
+TOWER_BASE_CFG_RAID_ITEMID_FIELD.default_value = 0
+TOWER_BASE_CFG_RAID_ITEMID_FIELD.type = 5
+TOWER_BASE_CFG_RAID_ITEMID_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_RAID_ITEMCOUNT_FIELD.name = "raid_itemcount"
+TOWER_BASE_CFG_RAID_ITEMCOUNT_FIELD.full_name = ".ftcfg.tower_base_cfg.raid_itemcount"
+TOWER_BASE_CFG_RAID_ITEMCOUNT_FIELD.number = 6
+TOWER_BASE_CFG_RAID_ITEMCOUNT_FIELD.index = 5
+TOWER_BASE_CFG_RAID_ITEMCOUNT_FIELD.label = 2
+TOWER_BASE_CFG_RAID_ITEMCOUNT_FIELD.has_default_value = false
+TOWER_BASE_CFG_RAID_ITEMCOUNT_FIELD.default_value = 0
+TOWER_BASE_CFG_RAID_ITEMCOUNT_FIELD.type = 5
+TOWER_BASE_CFG_RAID_ITEMCOUNT_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_MONEYTYPE_FIELD.name = "moneytype"
+TOWER_BASE_CFG_MONEYTYPE_FIELD.full_name = ".ftcfg.tower_base_cfg.moneytype"
+TOWER_BASE_CFG_MONEYTYPE_FIELD.number = 7
+TOWER_BASE_CFG_MONEYTYPE_FIELD.index = 6
+TOWER_BASE_CFG_MONEYTYPE_FIELD.label = 2
+TOWER_BASE_CFG_MONEYTYPE_FIELD.has_default_value = false
+TOWER_BASE_CFG_MONEYTYPE_FIELD.default_value = 0
+TOWER_BASE_CFG_MONEYTYPE_FIELD.type = 5
+TOWER_BASE_CFG_MONEYTYPE_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_MONEYCOUNT_FIELD.name = "moneycount"
+TOWER_BASE_CFG_MONEYCOUNT_FIELD.full_name = ".ftcfg.tower_base_cfg.moneycount"
+TOWER_BASE_CFG_MONEYCOUNT_FIELD.number = 8
+TOWER_BASE_CFG_MONEYCOUNT_FIELD.index = 7
+TOWER_BASE_CFG_MONEYCOUNT_FIELD.label = 2
+TOWER_BASE_CFG_MONEYCOUNT_FIELD.has_default_value = false
+TOWER_BASE_CFG_MONEYCOUNT_FIELD.default_value = 0
+TOWER_BASE_CFG_MONEYCOUNT_FIELD.type = 5
+TOWER_BASE_CFG_MONEYCOUNT_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_ITEMID_CROSS_FIELD.name = "itemid_cross"
+TOWER_BASE_CFG_ITEMID_CROSS_FIELD.full_name = ".ftcfg.tower_base_cfg.itemid_cross"
+TOWER_BASE_CFG_ITEMID_CROSS_FIELD.number = 9
+TOWER_BASE_CFG_ITEMID_CROSS_FIELD.index = 8
+TOWER_BASE_CFG_ITEMID_CROSS_FIELD.label = 2
+TOWER_BASE_CFG_ITEMID_CROSS_FIELD.has_default_value = false
+TOWER_BASE_CFG_ITEMID_CROSS_FIELD.default_value = 0
+TOWER_BASE_CFG_ITEMID_CROSS_FIELD.type = 5
+TOWER_BASE_CFG_ITEMID_CROSS_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_ITEMCOUNT_CROSS_FIELD.name = "itemcount_cross"
+TOWER_BASE_CFG_ITEMCOUNT_CROSS_FIELD.full_name = ".ftcfg.tower_base_cfg.itemcount_cross"
+TOWER_BASE_CFG_ITEMCOUNT_CROSS_FIELD.number = 10
+TOWER_BASE_CFG_ITEMCOUNT_CROSS_FIELD.index = 9
+TOWER_BASE_CFG_ITEMCOUNT_CROSS_FIELD.label = 2
+TOWER_BASE_CFG_ITEMCOUNT_CROSS_FIELD.has_default_value = false
+TOWER_BASE_CFG_ITEMCOUNT_CROSS_FIELD.default_value = 0
+TOWER_BASE_CFG_ITEMCOUNT_CROSS_FIELD.type = 5
+TOWER_BASE_CFG_ITEMCOUNT_CROSS_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_EXP_CROSS_FIELD.name = "exp_cross"
+TOWER_BASE_CFG_EXP_CROSS_FIELD.full_name = ".ftcfg.tower_base_cfg.exp_cross"
+TOWER_BASE_CFG_EXP_CROSS_FIELD.number = 11
+TOWER_BASE_CFG_EXP_CROSS_FIELD.index = 10
+TOWER_BASE_CFG_EXP_CROSS_FIELD.label = 2
+TOWER_BASE_CFG_EXP_CROSS_FIELD.has_default_value = false
+TOWER_BASE_CFG_EXP_CROSS_FIELD.default_value = 0
+TOWER_BASE_CFG_EXP_CROSS_FIELD.type = 5
+TOWER_BASE_CFG_EXP_CROSS_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_HANGUP_REWARD_EXP_FIELD.name = "hangup_reward_exp"
+TOWER_BASE_CFG_HANGUP_REWARD_EXP_FIELD.full_name = ".ftcfg.tower_base_cfg.hangup_reward_exp"
+TOWER_BASE_CFG_HANGUP_REWARD_EXP_FIELD.number = 12
+TOWER_BASE_CFG_HANGUP_REWARD_EXP_FIELD.index = 11
+TOWER_BASE_CFG_HANGUP_REWARD_EXP_FIELD.label = 2
+TOWER_BASE_CFG_HANGUP_REWARD_EXP_FIELD.has_default_value = false
+TOWER_BASE_CFG_HANGUP_REWARD_EXP_FIELD.default_value = 0
+TOWER_BASE_CFG_HANGUP_REWARD_EXP_FIELD.type = 5
+TOWER_BASE_CFG_HANGUP_REWARD_EXP_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_HANGUP_REWARD_MONEYTYPE_FIELD.name = "hangup_reward_moneytype"
+TOWER_BASE_CFG_HANGUP_REWARD_MONEYTYPE_FIELD.full_name = ".ftcfg.tower_base_cfg.hangup_reward_moneytype"
+TOWER_BASE_CFG_HANGUP_REWARD_MONEYTYPE_FIELD.number = 13
+TOWER_BASE_CFG_HANGUP_REWARD_MONEYTYPE_FIELD.index = 12
+TOWER_BASE_CFG_HANGUP_REWARD_MONEYTYPE_FIELD.label = 2
+TOWER_BASE_CFG_HANGUP_REWARD_MONEYTYPE_FIELD.has_default_value = false
+TOWER_BASE_CFG_HANGUP_REWARD_MONEYTYPE_FIELD.default_value = 0
+TOWER_BASE_CFG_HANGUP_REWARD_MONEYTYPE_FIELD.type = 5
+TOWER_BASE_CFG_HANGUP_REWARD_MONEYTYPE_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_HANGUP_REWARD_MONEY_FIELD.name = "hangup_reward_money"
+TOWER_BASE_CFG_HANGUP_REWARD_MONEY_FIELD.full_name = ".ftcfg.tower_base_cfg.hangup_reward_money"
+TOWER_BASE_CFG_HANGUP_REWARD_MONEY_FIELD.number = 14
+TOWER_BASE_CFG_HANGUP_REWARD_MONEY_FIELD.index = 13
+TOWER_BASE_CFG_HANGUP_REWARD_MONEY_FIELD.label = 2
+TOWER_BASE_CFG_HANGUP_REWARD_MONEY_FIELD.has_default_value = false
+TOWER_BASE_CFG_HANGUP_REWARD_MONEY_FIELD.default_value = 0
+TOWER_BASE_CFG_HANGUP_REWARD_MONEY_FIELD.type = 5
+TOWER_BASE_CFG_HANGUP_REWARD_MONEY_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_FIELD.name = "delay_reward_item"
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_FIELD.full_name = ".ftcfg.tower_base_cfg.delay_reward_item"
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_FIELD.number = 15
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_FIELD.index = 14
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_FIELD.label = 2
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_FIELD.has_default_value = false
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_FIELD.default_value = 0
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_FIELD.type = 5
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_COUNT_FIELD.name = "delay_reward_item_count"
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_COUNT_FIELD.full_name = ".ftcfg.tower_base_cfg.delay_reward_item_count"
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_COUNT_FIELD.number = 16
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_COUNT_FIELD.index = 15
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_COUNT_FIELD.label = 2
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_COUNT_FIELD.has_default_value = false
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_COUNT_FIELD.default_value = 0
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_COUNT_FIELD.type = 5
+TOWER_BASE_CFG_DELAY_REWARD_ITEM_COUNT_FIELD.cpp_type = 1
+
+TOWER_BASE_CFG_BIRTH_X_FIELD.name = "birth_x"
+TOWER_BASE_CFG_BIRTH_X_FIELD.full_name = ".ftcfg.tower_base_cfg.birth_x"
+TOWER_BASE_CFG_BIRTH_X_FIELD.number = 17
+TOWER_BASE_CFG_BIRTH_X_FIELD.index = 16
+TOWER_BASE_CFG_BIRTH_X_FIELD.label = 3
+TOWER_BASE_CFG_BIRTH_X_FIELD.has_default_value = false
+TOWER_BASE_CFG_BIRTH_X_FIELD.default_value = {}
+TOWER_BASE_CFG_BIRTH_X_FIELD.type = 2
+TOWER_BASE_CFG_BIRTH_X_FIELD.cpp_type = 6
+
+TOWER_BASE_CFG_BIRTH_Y_FIELD.name = "birth_y"
+TOWER_BASE_CFG_BIRTH_Y_FIELD.full_name = ".ftcfg.tower_base_cfg.birth_y"
+TOWER_BASE_CFG_BIRTH_Y_FIELD.number = 18
+TOWER_BASE_CFG_BIRTH_Y_FIELD.index = 17
+TOWER_BASE_CFG_BIRTH_Y_FIELD.label = 3
+TOWER_BASE_CFG_BIRTH_Y_FIELD.has_default_value = false
+TOWER_BASE_CFG_BIRTH_Y_FIELD.default_value = {}
+TOWER_BASE_CFG_BIRTH_Y_FIELD.type = 2
+TOWER_BASE_CFG_BIRTH_Y_FIELD.cpp_type = 6
+
+TOWER_BASE_CFG_BIRTH_Z_FIELD.name = "birth_z"
+TOWER_BASE_CFG_BIRTH_Z_FIELD.full_name = ".ftcfg.tower_base_cfg.birth_z"
+TOWER_BASE_CFG_BIRTH_Z_FIELD.number = 19
+TOWER_BASE_CFG_BIRTH_Z_FIELD.index = 18
+TOWER_BASE_CFG_BIRTH_Z_FIELD.label = 3
+TOWER_BASE_CFG_BIRTH_Z_FIELD.has_default_value = false
+TOWER_BASE_CFG_BIRTH_Z_FIELD.default_value = {}
+TOWER_BASE_CFG_BIRTH_Z_FIELD.type = 2
+TOWER_BASE_CFG_BIRTH_Z_FIELD.cpp_type = 6
+
+TOWER_BASE_CFG.name = "tower_base_cfg"
+TOWER_BASE_CFG.full_name = ".ftcfg.tower_base_cfg"
+TOWER_BASE_CFG.nested_types = {}
+TOWER_BASE_CFG.enum_types = {}
+TOWER_BASE_CFG.fields = {TOWER_BASE_CFG_ID_FIELD, TOWER_BASE_CFG_MAP_ID_FIELD, TOWER_BASE_CFG_ITEM_ID_FIELD, TOWER_BASE_CFG_ITEM_COUNT_FIELD, TOWER_BASE_CFG_RAID_ITEMID_FIELD, TOWER_BASE_CFG_RAID_ITEMCOUNT_FIELD, TOWER_BASE_CFG_MONEYTYPE_FIELD, TOWER_BASE_CFG_MONEYCOUNT_FIELD, TOWER_BASE_CFG_ITEMID_CROSS_FIELD, TOWER_BASE_CFG_ITEMCOUNT_CROSS_FIELD, TOWER_BASE_CFG_EXP_CROSS_FIELD, TOWER_BASE_CFG_HANGUP_REWARD_EXP_FIELD, TOWER_BASE_CFG_HANGUP_REWARD_MONEYTYPE_FIELD, TOWER_BASE_CFG_HANGUP_REWARD_MONEY_FIELD, TOWER_BASE_CFG_DELAY_REWARD_ITEM_FIELD, TOWER_BASE_CFG_DELAY_REWARD_ITEM_COUNT_FIELD, TOWER_BASE_CFG_BIRTH_X_FIELD, TOWER_BASE_CFG_BIRTH_Y_FIELD, TOWER_BASE_CFG_BIRTH_Z_FIELD}
+TOWER_BASE_CFG.is_extendable = false
+TOWER_BASE_CFG.extensions = {}
+TOWER_BASE_CFGS_ITEMS_FIELD.name = "items"
+TOWER_BASE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.tower_base_cfgs.items"
+TOWER_BASE_CFGS_ITEMS_FIELD.number = 1
+TOWER_BASE_CFGS_ITEMS_FIELD.index = 0
+TOWER_BASE_CFGS_ITEMS_FIELD.label = 3
+TOWER_BASE_CFGS_ITEMS_FIELD.has_default_value = false
+TOWER_BASE_CFGS_ITEMS_FIELD.default_value = {}
+TOWER_BASE_CFGS_ITEMS_FIELD.message_type = TOWER_BASE_CFG
+TOWER_BASE_CFGS_ITEMS_FIELD.type = 11
+TOWER_BASE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TOWER_BASE_CFGS.name = "tower_base_cfgs"
+TOWER_BASE_CFGS.full_name = ".ftcfg.tower_base_cfgs"
+TOWER_BASE_CFGS.nested_types = {}
+TOWER_BASE_CFGS.enum_types = {}
+TOWER_BASE_CFGS.fields = {TOWER_BASE_CFGS_ITEMS_FIELD}
+TOWER_BASE_CFGS.is_extendable = false
+TOWER_BASE_CFGS.extensions = {}
+STARSPIRIT_DUNGOEN_CFG_ID_FIELD.name = "id"
+STARSPIRIT_DUNGOEN_CFG_ID_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.id"
+STARSPIRIT_DUNGOEN_CFG_ID_FIELD.number = 1
+STARSPIRIT_DUNGOEN_CFG_ID_FIELD.index = 0
+STARSPIRIT_DUNGOEN_CFG_ID_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_ID_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_ID_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_ID_FIELD.type = 5
+STARSPIRIT_DUNGOEN_CFG_ID_FIELD.cpp_type = 1
+
+STARSPIRIT_DUNGOEN_CFG_LEVEL_STATE_FIELD.name = "level_state"
+STARSPIRIT_DUNGOEN_CFG_LEVEL_STATE_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.level_state"
+STARSPIRIT_DUNGOEN_CFG_LEVEL_STATE_FIELD.number = 2
+STARSPIRIT_DUNGOEN_CFG_LEVEL_STATE_FIELD.index = 1
+STARSPIRIT_DUNGOEN_CFG_LEVEL_STATE_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_LEVEL_STATE_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_LEVEL_STATE_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_LEVEL_STATE_FIELD.type = 5
+STARSPIRIT_DUNGOEN_CFG_LEVEL_STATE_FIELD.cpp_type = 1
+
+STARSPIRIT_DUNGOEN_CFG_MAP_ID_FIELD.name = "map_id"
+STARSPIRIT_DUNGOEN_CFG_MAP_ID_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.map_id"
+STARSPIRIT_DUNGOEN_CFG_MAP_ID_FIELD.number = 3
+STARSPIRIT_DUNGOEN_CFG_MAP_ID_FIELD.index = 2
+STARSPIRIT_DUNGOEN_CFG_MAP_ID_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_MAP_ID_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_MAP_ID_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_MAP_ID_FIELD.type = 5
+STARSPIRIT_DUNGOEN_CFG_MAP_ID_FIELD.cpp_type = 1
+
+STARSPIRIT_DUNGOEN_CFG_MAP_IMAGE_ID_FIELD.name = "map_image_id"
+STARSPIRIT_DUNGOEN_CFG_MAP_IMAGE_ID_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.map_image_id"
+STARSPIRIT_DUNGOEN_CFG_MAP_IMAGE_ID_FIELD.number = 4
+STARSPIRIT_DUNGOEN_CFG_MAP_IMAGE_ID_FIELD.index = 3
+STARSPIRIT_DUNGOEN_CFG_MAP_IMAGE_ID_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_MAP_IMAGE_ID_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_MAP_IMAGE_ID_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_MAP_IMAGE_ID_FIELD.type = 5
+STARSPIRIT_DUNGOEN_CFG_MAP_IMAGE_ID_FIELD.cpp_type = 1
+
+STARSPIRIT_DUNGOEN_CFG_MAP_NAME_FIELD.name = "map_name"
+STARSPIRIT_DUNGOEN_CFG_MAP_NAME_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.map_name"
+STARSPIRIT_DUNGOEN_CFG_MAP_NAME_FIELD.number = 5
+STARSPIRIT_DUNGOEN_CFG_MAP_NAME_FIELD.index = 4
+STARSPIRIT_DUNGOEN_CFG_MAP_NAME_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_MAP_NAME_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_MAP_NAME_FIELD.default_value = ""
+STARSPIRIT_DUNGOEN_CFG_MAP_NAME_FIELD.type = 9
+STARSPIRIT_DUNGOEN_CFG_MAP_NAME_FIELD.cpp_type = 9
+
+STARSPIRIT_DUNGOEN_CFG_MIN_FIGHTVAL_FIELD.name = "min_fightval"
+STARSPIRIT_DUNGOEN_CFG_MIN_FIGHTVAL_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.min_fightval"
+STARSPIRIT_DUNGOEN_CFG_MIN_FIGHTVAL_FIELD.number = 6
+STARSPIRIT_DUNGOEN_CFG_MIN_FIGHTVAL_FIELD.index = 5
+STARSPIRIT_DUNGOEN_CFG_MIN_FIGHTVAL_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_MIN_FIGHTVAL_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_MIN_FIGHTVAL_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_MIN_FIGHTVAL_FIELD.type = 13
+STARSPIRIT_DUNGOEN_CFG_MIN_FIGHTVAL_FIELD.cpp_type = 3
+
+STARSPIRIT_DUNGOEN_CFG_RECOMMEND_FIGHTVAL_FIELD.name = "recommend_fightval"
+STARSPIRIT_DUNGOEN_CFG_RECOMMEND_FIGHTVAL_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.recommend_fightval"
+STARSPIRIT_DUNGOEN_CFG_RECOMMEND_FIGHTVAL_FIELD.number = 7
+STARSPIRIT_DUNGOEN_CFG_RECOMMEND_FIGHTVAL_FIELD.index = 6
+STARSPIRIT_DUNGOEN_CFG_RECOMMEND_FIGHTVAL_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_RECOMMEND_FIGHTVAL_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_RECOMMEND_FIGHTVAL_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_RECOMMEND_FIGHTVAL_FIELD.type = 13
+STARSPIRIT_DUNGOEN_CFG_RECOMMEND_FIGHTVAL_FIELD.cpp_type = 3
+
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_TYPE_FIELD.name = "consume_item_type"
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_TYPE_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.consume_item_type"
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_TYPE_FIELD.number = 8
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_TYPE_FIELD.index = 7
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_TYPE_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_TYPE_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_TYPE_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_TYPE_FIELD.type = 13
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_TYPE_FIELD.cpp_type = 3
+
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_NUM_FIELD.name = "consume_item_num"
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_NUM_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.consume_item_num"
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_NUM_FIELD.number = 9
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_NUM_FIELD.index = 8
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_NUM_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_NUM_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_NUM_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_NUM_FIELD.type = 5
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_NUM_FIELD.cpp_type = 1
+
+STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD.name = "enter_type"
+STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.enter_type"
+STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD.number = 10
+STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD.index = 9
+STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD.default_value = nil
+STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD.enum_type = config_predefine_pb.EDUNGEON_CHALLENGE_TYPE
+STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD.type = 14
+STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD.cpp_type = 8
+
+STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD.name = "dungoen_diff"
+STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.dungoen_diff"
+STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD.number = 11
+STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD.index = 10
+STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD.default_value = nil
+STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD.enum_type = config_predefine_pb.EDUNGEON_CHALLENGE_DIFF
+STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD.type = 14
+STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD.cpp_type = 8
+
+STARSPIRIT_DUNGOEN_CFG_ENTER_DELAY_FIELD.name = "enter_delay"
+STARSPIRIT_DUNGOEN_CFG_ENTER_DELAY_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.enter_delay"
+STARSPIRIT_DUNGOEN_CFG_ENTER_DELAY_FIELD.number = 12
+STARSPIRIT_DUNGOEN_CFG_ENTER_DELAY_FIELD.index = 11
+STARSPIRIT_DUNGOEN_CFG_ENTER_DELAY_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_ENTER_DELAY_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_ENTER_DELAY_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_ENTER_DELAY_FIELD.type = 13
+STARSPIRIT_DUNGOEN_CFG_ENTER_DELAY_FIELD.cpp_type = 3
+
+STARSPIRIT_DUNGOEN_CFG_DEFAULT_CANCEL_BUTON_FIELD.name = "default_cancel_buton"
+STARSPIRIT_DUNGOEN_CFG_DEFAULT_CANCEL_BUTON_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.default_cancel_buton"
+STARSPIRIT_DUNGOEN_CFG_DEFAULT_CANCEL_BUTON_FIELD.number = 13
+STARSPIRIT_DUNGOEN_CFG_DEFAULT_CANCEL_BUTON_FIELD.index = 12
+STARSPIRIT_DUNGOEN_CFG_DEFAULT_CANCEL_BUTON_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_DEFAULT_CANCEL_BUTON_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_DEFAULT_CANCEL_BUTON_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_DEFAULT_CANCEL_BUTON_FIELD.type = 5
+STARSPIRIT_DUNGOEN_CFG_DEFAULT_CANCEL_BUTON_FIELD.cpp_type = 1
+
+STARSPIRIT_DUNGOEN_CFG_REWARD_TYPE_FIELD.name = "reward_type"
+STARSPIRIT_DUNGOEN_CFG_REWARD_TYPE_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.reward_type"
+STARSPIRIT_DUNGOEN_CFG_REWARD_TYPE_FIELD.number = 14
+STARSPIRIT_DUNGOEN_CFG_REWARD_TYPE_FIELD.index = 13
+STARSPIRIT_DUNGOEN_CFG_REWARD_TYPE_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_REWARD_TYPE_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_REWARD_TYPE_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_REWARD_TYPE_FIELD.type = 5
+STARSPIRIT_DUNGOEN_CFG_REWARD_TYPE_FIELD.cpp_type = 1
+
+STARSPIRIT_DUNGOEN_CFG_MIN_TEAM_NUM_FIELD.name = "min_team_num"
+STARSPIRIT_DUNGOEN_CFG_MIN_TEAM_NUM_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.min_team_num"
+STARSPIRIT_DUNGOEN_CFG_MIN_TEAM_NUM_FIELD.number = 15
+STARSPIRIT_DUNGOEN_CFG_MIN_TEAM_NUM_FIELD.index = 14
+STARSPIRIT_DUNGOEN_CFG_MIN_TEAM_NUM_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_MIN_TEAM_NUM_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_MIN_TEAM_NUM_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_MIN_TEAM_NUM_FIELD.type = 5
+STARSPIRIT_DUNGOEN_CFG_MIN_TEAM_NUM_FIELD.cpp_type = 1
+
+STARSPIRIT_DUNGOEN_CFG_ICON_ID_FIELD.name = "icon_id"
+STARSPIRIT_DUNGOEN_CFG_ICON_ID_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.icon_id"
+STARSPIRIT_DUNGOEN_CFG_ICON_ID_FIELD.number = 16
+STARSPIRIT_DUNGOEN_CFG_ICON_ID_FIELD.index = 15
+STARSPIRIT_DUNGOEN_CFG_ICON_ID_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_ICON_ID_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_ICON_ID_FIELD.default_value = 0
+STARSPIRIT_DUNGOEN_CFG_ICON_ID_FIELD.type = 5
+STARSPIRIT_DUNGOEN_CFG_ICON_ID_FIELD.cpp_type = 1
+
+STARSPIRIT_DUNGOEN_CFG_CONSUME_SHOW_NAME_FIELD.name = "consume_show_name"
+STARSPIRIT_DUNGOEN_CFG_CONSUME_SHOW_NAME_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.consume_show_name"
+STARSPIRIT_DUNGOEN_CFG_CONSUME_SHOW_NAME_FIELD.number = 17
+STARSPIRIT_DUNGOEN_CFG_CONSUME_SHOW_NAME_FIELD.index = 16
+STARSPIRIT_DUNGOEN_CFG_CONSUME_SHOW_NAME_FIELD.label = 2
+STARSPIRIT_DUNGOEN_CFG_CONSUME_SHOW_NAME_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_CONSUME_SHOW_NAME_FIELD.default_value = ""
+STARSPIRIT_DUNGOEN_CFG_CONSUME_SHOW_NAME_FIELD.type = 9
+STARSPIRIT_DUNGOEN_CFG_CONSUME_SHOW_NAME_FIELD.cpp_type = 9
+
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_ID_FIELD.name = "consume_item_id"
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_ID_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfg.consume_item_id"
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_ID_FIELD.number = 18
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_ID_FIELD.index = 17
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_ID_FIELD.label = 3
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_ID_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_ID_FIELD.default_value = {}
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_ID_FIELD.type = 5
+STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_ID_FIELD.cpp_type = 1
+
+STARSPIRIT_DUNGOEN_CFG.name = "starspirit_dungoen_cfg"
+STARSPIRIT_DUNGOEN_CFG.full_name = ".ftcfg.starspirit_dungoen_cfg"
+STARSPIRIT_DUNGOEN_CFG.nested_types = {}
+STARSPIRIT_DUNGOEN_CFG.enum_types = {}
+STARSPIRIT_DUNGOEN_CFG.fields = {STARSPIRIT_DUNGOEN_CFG_ID_FIELD, STARSPIRIT_DUNGOEN_CFG_LEVEL_STATE_FIELD, STARSPIRIT_DUNGOEN_CFG_MAP_ID_FIELD, STARSPIRIT_DUNGOEN_CFG_MAP_IMAGE_ID_FIELD, STARSPIRIT_DUNGOEN_CFG_MAP_NAME_FIELD, STARSPIRIT_DUNGOEN_CFG_MIN_FIGHTVAL_FIELD, STARSPIRIT_DUNGOEN_CFG_RECOMMEND_FIGHTVAL_FIELD, STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_TYPE_FIELD, STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_NUM_FIELD, STARSPIRIT_DUNGOEN_CFG_ENTER_TYPE_FIELD, STARSPIRIT_DUNGOEN_CFG_DUNGOEN_DIFF_FIELD, STARSPIRIT_DUNGOEN_CFG_ENTER_DELAY_FIELD, STARSPIRIT_DUNGOEN_CFG_DEFAULT_CANCEL_BUTON_FIELD, STARSPIRIT_DUNGOEN_CFG_REWARD_TYPE_FIELD, STARSPIRIT_DUNGOEN_CFG_MIN_TEAM_NUM_FIELD, STARSPIRIT_DUNGOEN_CFG_ICON_ID_FIELD, STARSPIRIT_DUNGOEN_CFG_CONSUME_SHOW_NAME_FIELD, STARSPIRIT_DUNGOEN_CFG_CONSUME_ITEM_ID_FIELD}
+STARSPIRIT_DUNGOEN_CFG.is_extendable = false
+STARSPIRIT_DUNGOEN_CFG.extensions = {}
+STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD.name = "items"
+STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD.full_name = ".ftcfg.starspirit_dungoen_cfgs.items"
+STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD.number = 1
+STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD.index = 0
+STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD.label = 3
+STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD.has_default_value = false
+STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD.default_value = {}
+STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD.message_type = STARSPIRIT_DUNGOEN_CFG
+STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD.type = 11
+STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD.cpp_type = 10
+
+STARSPIRIT_DUNGOEN_CFGS.name = "starspirit_dungoen_cfgs"
+STARSPIRIT_DUNGOEN_CFGS.full_name = ".ftcfg.starspirit_dungoen_cfgs"
+STARSPIRIT_DUNGOEN_CFGS.nested_types = {}
+STARSPIRIT_DUNGOEN_CFGS.enum_types = {}
+STARSPIRIT_DUNGOEN_CFGS.fields = {STARSPIRIT_DUNGOEN_CFGS_ITEMS_FIELD}
+STARSPIRIT_DUNGOEN_CFGS.is_extendable = false
+STARSPIRIT_DUNGOEN_CFGS.extensions = {}
+RUNE_QUALITY_CFG_RUNE_ID_FIELD.name = "rune_id"
+RUNE_QUALITY_CFG_RUNE_ID_FIELD.full_name = ".ftcfg.rune_quality_cfg.rune_id"
+RUNE_QUALITY_CFG_RUNE_ID_FIELD.number = 1
+RUNE_QUALITY_CFG_RUNE_ID_FIELD.index = 0
+RUNE_QUALITY_CFG_RUNE_ID_FIELD.label = 2
+RUNE_QUALITY_CFG_RUNE_ID_FIELD.has_default_value = false
+RUNE_QUALITY_CFG_RUNE_ID_FIELD.default_value = 0
+RUNE_QUALITY_CFG_RUNE_ID_FIELD.type = 13
+RUNE_QUALITY_CFG_RUNE_ID_FIELD.cpp_type = 3
+
+RUNE_QUALITY_CFG_POWER_UPLIMIT_FIELD.name = "power_uplimit"
+RUNE_QUALITY_CFG_POWER_UPLIMIT_FIELD.full_name = ".ftcfg.rune_quality_cfg.power_uplimit"
+RUNE_QUALITY_CFG_POWER_UPLIMIT_FIELD.number = 2
+RUNE_QUALITY_CFG_POWER_UPLIMIT_FIELD.index = 1
+RUNE_QUALITY_CFG_POWER_UPLIMIT_FIELD.label = 2
+RUNE_QUALITY_CFG_POWER_UPLIMIT_FIELD.has_default_value = false
+RUNE_QUALITY_CFG_POWER_UPLIMIT_FIELD.default_value = 0
+RUNE_QUALITY_CFG_POWER_UPLIMIT_FIELD.type = 13
+RUNE_QUALITY_CFG_POWER_UPLIMIT_FIELD.cpp_type = 3
+
+RUNE_QUALITY_CFG_POWER_DOWNLIMIT_FIELD.name = "power_downlimit"
+RUNE_QUALITY_CFG_POWER_DOWNLIMIT_FIELD.full_name = ".ftcfg.rune_quality_cfg.power_downlimit"
+RUNE_QUALITY_CFG_POWER_DOWNLIMIT_FIELD.number = 3
+RUNE_QUALITY_CFG_POWER_DOWNLIMIT_FIELD.index = 2
+RUNE_QUALITY_CFG_POWER_DOWNLIMIT_FIELD.label = 2
+RUNE_QUALITY_CFG_POWER_DOWNLIMIT_FIELD.has_default_value = false
+RUNE_QUALITY_CFG_POWER_DOWNLIMIT_FIELD.default_value = 0
+RUNE_QUALITY_CFG_POWER_DOWNLIMIT_FIELD.type = 13
+RUNE_QUALITY_CFG_POWER_DOWNLIMIT_FIELD.cpp_type = 3
+
+RUNE_QUALITY_CFG_BETTER_EFFECT_RATE_FIELD.name = "better_effect_rate"
+RUNE_QUALITY_CFG_BETTER_EFFECT_RATE_FIELD.full_name = ".ftcfg.rune_quality_cfg.better_effect_rate"
+RUNE_QUALITY_CFG_BETTER_EFFECT_RATE_FIELD.number = 4
+RUNE_QUALITY_CFG_BETTER_EFFECT_RATE_FIELD.index = 3
+RUNE_QUALITY_CFG_BETTER_EFFECT_RATE_FIELD.label = 2
+RUNE_QUALITY_CFG_BETTER_EFFECT_RATE_FIELD.has_default_value = false
+RUNE_QUALITY_CFG_BETTER_EFFECT_RATE_FIELD.default_value = 0
+RUNE_QUALITY_CFG_BETTER_EFFECT_RATE_FIELD.type = 5
+RUNE_QUALITY_CFG_BETTER_EFFECT_RATE_FIELD.cpp_type = 1
+
+RUNE_QUALITY_CFG_BEST_EFFECT_RATE_FIELD.name = "best_effect_rate"
+RUNE_QUALITY_CFG_BEST_EFFECT_RATE_FIELD.full_name = ".ftcfg.rune_quality_cfg.best_effect_rate"
+RUNE_QUALITY_CFG_BEST_EFFECT_RATE_FIELD.number = 5
+RUNE_QUALITY_CFG_BEST_EFFECT_RATE_FIELD.index = 4
+RUNE_QUALITY_CFG_BEST_EFFECT_RATE_FIELD.label = 2
+RUNE_QUALITY_CFG_BEST_EFFECT_RATE_FIELD.has_default_value = false
+RUNE_QUALITY_CFG_BEST_EFFECT_RATE_FIELD.default_value = 0
+RUNE_QUALITY_CFG_BEST_EFFECT_RATE_FIELD.type = 5
+RUNE_QUALITY_CFG_BEST_EFFECT_RATE_FIELD.cpp_type = 1
+
+RUNE_QUALITY_CFG.name = "rune_quality_cfg"
+RUNE_QUALITY_CFG.full_name = ".ftcfg.rune_quality_cfg"
+RUNE_QUALITY_CFG.nested_types = {}
+RUNE_QUALITY_CFG.enum_types = {}
+RUNE_QUALITY_CFG.fields = {RUNE_QUALITY_CFG_RUNE_ID_FIELD, RUNE_QUALITY_CFG_POWER_UPLIMIT_FIELD, RUNE_QUALITY_CFG_POWER_DOWNLIMIT_FIELD, RUNE_QUALITY_CFG_BETTER_EFFECT_RATE_FIELD, RUNE_QUALITY_CFG_BEST_EFFECT_RATE_FIELD}
+RUNE_QUALITY_CFG.is_extendable = false
+RUNE_QUALITY_CFG.extensions = {}
+RUNE_QUALITY_CFGS_ITEMS_FIELD.name = "items"
+RUNE_QUALITY_CFGS_ITEMS_FIELD.full_name = ".ftcfg.rune_quality_cfgs.items"
+RUNE_QUALITY_CFGS_ITEMS_FIELD.number = 1
+RUNE_QUALITY_CFGS_ITEMS_FIELD.index = 0
+RUNE_QUALITY_CFGS_ITEMS_FIELD.label = 3
+RUNE_QUALITY_CFGS_ITEMS_FIELD.has_default_value = false
+RUNE_QUALITY_CFGS_ITEMS_FIELD.default_value = {}
+RUNE_QUALITY_CFGS_ITEMS_FIELD.message_type = RUNE_QUALITY_CFG
+RUNE_QUALITY_CFGS_ITEMS_FIELD.type = 11
+RUNE_QUALITY_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RUNE_QUALITY_CFGS.name = "rune_quality_cfgs"
+RUNE_QUALITY_CFGS.full_name = ".ftcfg.rune_quality_cfgs"
+RUNE_QUALITY_CFGS.nested_types = {}
+RUNE_QUALITY_CFGS.enum_types = {}
+RUNE_QUALITY_CFGS.fields = {RUNE_QUALITY_CFGS_ITEMS_FIELD}
+RUNE_QUALITY_CFGS.is_extendable = false
+RUNE_QUALITY_CFGS.extensions = {}
+RUNE_PROP_REFINE_CFG_ID_FIELD.name = "id"
+RUNE_PROP_REFINE_CFG_ID_FIELD.full_name = ".ftcfg.rune_prop_refine_cfg.id"
+RUNE_PROP_REFINE_CFG_ID_FIELD.number = 1
+RUNE_PROP_REFINE_CFG_ID_FIELD.index = 0
+RUNE_PROP_REFINE_CFG_ID_FIELD.label = 2
+RUNE_PROP_REFINE_CFG_ID_FIELD.has_default_value = false
+RUNE_PROP_REFINE_CFG_ID_FIELD.default_value = 0
+RUNE_PROP_REFINE_CFG_ID_FIELD.type = 13
+RUNE_PROP_REFINE_CFG_ID_FIELD.cpp_type = 3
+
+RUNE_PROP_REFINE_CFG_LEVEL_FIELD.name = "level"
+RUNE_PROP_REFINE_CFG_LEVEL_FIELD.full_name = ".ftcfg.rune_prop_refine_cfg.level"
+RUNE_PROP_REFINE_CFG_LEVEL_FIELD.number = 2
+RUNE_PROP_REFINE_CFG_LEVEL_FIELD.index = 1
+RUNE_PROP_REFINE_CFG_LEVEL_FIELD.label = 2
+RUNE_PROP_REFINE_CFG_LEVEL_FIELD.has_default_value = false
+RUNE_PROP_REFINE_CFG_LEVEL_FIELD.default_value = 0
+RUNE_PROP_REFINE_CFG_LEVEL_FIELD.type = 13
+RUNE_PROP_REFINE_CFG_LEVEL_FIELD.cpp_type = 3
+
+RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD.name = "prop_type"
+RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD.full_name = ".ftcfg.rune_prop_refine_cfg.prop_type"
+RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD.number = 3
+RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD.index = 2
+RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD.label = 2
+RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD.has_default_value = false
+RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD.default_value = nil
+RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPTYPE
+RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD.type = 14
+RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD.cpp_type = 8
+
+RUNE_PROP_REFINE_CFG_ITEM_ID_FIELD.name = "item_id"
+RUNE_PROP_REFINE_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.rune_prop_refine_cfg.item_id"
+RUNE_PROP_REFINE_CFG_ITEM_ID_FIELD.number = 4
+RUNE_PROP_REFINE_CFG_ITEM_ID_FIELD.index = 3
+RUNE_PROP_REFINE_CFG_ITEM_ID_FIELD.label = 2
+RUNE_PROP_REFINE_CFG_ITEM_ID_FIELD.has_default_value = false
+RUNE_PROP_REFINE_CFG_ITEM_ID_FIELD.default_value = 0
+RUNE_PROP_REFINE_CFG_ITEM_ID_FIELD.type = 13
+RUNE_PROP_REFINE_CFG_ITEM_ID_FIELD.cpp_type = 3
+
+RUNE_PROP_REFINE_CFG_ITEM_COUNT_FIELD.name = "item_count"
+RUNE_PROP_REFINE_CFG_ITEM_COUNT_FIELD.full_name = ".ftcfg.rune_prop_refine_cfg.item_count"
+RUNE_PROP_REFINE_CFG_ITEM_COUNT_FIELD.number = 5
+RUNE_PROP_REFINE_CFG_ITEM_COUNT_FIELD.index = 4
+RUNE_PROP_REFINE_CFG_ITEM_COUNT_FIELD.label = 2
+RUNE_PROP_REFINE_CFG_ITEM_COUNT_FIELD.has_default_value = false
+RUNE_PROP_REFINE_CFG_ITEM_COUNT_FIELD.default_value = 0
+RUNE_PROP_REFINE_CFG_ITEM_COUNT_FIELD.type = 13
+RUNE_PROP_REFINE_CFG_ITEM_COUNT_FIELD.cpp_type = 3
+
+RUNE_PROP_REFINE_CFG_SILVER_COST_FIELD.name = "silver_cost"
+RUNE_PROP_REFINE_CFG_SILVER_COST_FIELD.full_name = ".ftcfg.rune_prop_refine_cfg.silver_cost"
+RUNE_PROP_REFINE_CFG_SILVER_COST_FIELD.number = 6
+RUNE_PROP_REFINE_CFG_SILVER_COST_FIELD.index = 5
+RUNE_PROP_REFINE_CFG_SILVER_COST_FIELD.label = 2
+RUNE_PROP_REFINE_CFG_SILVER_COST_FIELD.has_default_value = false
+RUNE_PROP_REFINE_CFG_SILVER_COST_FIELD.default_value = 0
+RUNE_PROP_REFINE_CFG_SILVER_COST_FIELD.type = 13
+RUNE_PROP_REFINE_CFG_SILVER_COST_FIELD.cpp_type = 3
+
+RUNE_PROP_REFINE_CFG_PROP_LIMIT_FIELD.name = "prop_limit"
+RUNE_PROP_REFINE_CFG_PROP_LIMIT_FIELD.full_name = ".ftcfg.rune_prop_refine_cfg.prop_limit"
+RUNE_PROP_REFINE_CFG_PROP_LIMIT_FIELD.number = 7
+RUNE_PROP_REFINE_CFG_PROP_LIMIT_FIELD.index = 6
+RUNE_PROP_REFINE_CFG_PROP_LIMIT_FIELD.label = 2
+RUNE_PROP_REFINE_CFG_PROP_LIMIT_FIELD.has_default_value = false
+RUNE_PROP_REFINE_CFG_PROP_LIMIT_FIELD.default_value = 0.0
+RUNE_PROP_REFINE_CFG_PROP_LIMIT_FIELD.type = 2
+RUNE_PROP_REFINE_CFG_PROP_LIMIT_FIELD.cpp_type = 6
+
+RUNE_PROP_REFINE_CFG.name = "rune_prop_refine_cfg"
+RUNE_PROP_REFINE_CFG.full_name = ".ftcfg.rune_prop_refine_cfg"
+RUNE_PROP_REFINE_CFG.nested_types = {}
+RUNE_PROP_REFINE_CFG.enum_types = {}
+RUNE_PROP_REFINE_CFG.fields = {RUNE_PROP_REFINE_CFG_ID_FIELD, RUNE_PROP_REFINE_CFG_LEVEL_FIELD, RUNE_PROP_REFINE_CFG_PROP_TYPE_FIELD, RUNE_PROP_REFINE_CFG_ITEM_ID_FIELD, RUNE_PROP_REFINE_CFG_ITEM_COUNT_FIELD, RUNE_PROP_REFINE_CFG_SILVER_COST_FIELD, RUNE_PROP_REFINE_CFG_PROP_LIMIT_FIELD}
+RUNE_PROP_REFINE_CFG.is_extendable = false
+RUNE_PROP_REFINE_CFG.extensions = {}
+RUNE_PROP_REFINE_CFGS_ITEMS_FIELD.name = "items"
+RUNE_PROP_REFINE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.rune_prop_refine_cfgs.items"
+RUNE_PROP_REFINE_CFGS_ITEMS_FIELD.number = 1
+RUNE_PROP_REFINE_CFGS_ITEMS_FIELD.index = 0
+RUNE_PROP_REFINE_CFGS_ITEMS_FIELD.label = 3
+RUNE_PROP_REFINE_CFGS_ITEMS_FIELD.has_default_value = false
+RUNE_PROP_REFINE_CFGS_ITEMS_FIELD.default_value = {}
+RUNE_PROP_REFINE_CFGS_ITEMS_FIELD.message_type = RUNE_PROP_REFINE_CFG
+RUNE_PROP_REFINE_CFGS_ITEMS_FIELD.type = 11
+RUNE_PROP_REFINE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RUNE_PROP_REFINE_CFGS.name = "rune_prop_refine_cfgs"
+RUNE_PROP_REFINE_CFGS.full_name = ".ftcfg.rune_prop_refine_cfgs"
+RUNE_PROP_REFINE_CFGS.nested_types = {}
+RUNE_PROP_REFINE_CFGS.enum_types = {}
+RUNE_PROP_REFINE_CFGS.fields = {RUNE_PROP_REFINE_CFGS_ITEMS_FIELD}
+RUNE_PROP_REFINE_CFGS.is_extendable = false
+RUNE_PROP_REFINE_CFGS.extensions = {}
+RUNE_SKILL_REFINE_CFG_LEVEL_FIELD.name = "level"
+RUNE_SKILL_REFINE_CFG_LEVEL_FIELD.full_name = ".ftcfg.rune_skill_refine_cfg.level"
+RUNE_SKILL_REFINE_CFG_LEVEL_FIELD.number = 1
+RUNE_SKILL_REFINE_CFG_LEVEL_FIELD.index = 0
+RUNE_SKILL_REFINE_CFG_LEVEL_FIELD.label = 2
+RUNE_SKILL_REFINE_CFG_LEVEL_FIELD.has_default_value = false
+RUNE_SKILL_REFINE_CFG_LEVEL_FIELD.default_value = 0
+RUNE_SKILL_REFINE_CFG_LEVEL_FIELD.type = 13
+RUNE_SKILL_REFINE_CFG_LEVEL_FIELD.cpp_type = 3
+
+RUNE_SKILL_REFINE_CFG_ITEM_ID_FIELD.name = "item_id"
+RUNE_SKILL_REFINE_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.rune_skill_refine_cfg.item_id"
+RUNE_SKILL_REFINE_CFG_ITEM_ID_FIELD.number = 2
+RUNE_SKILL_REFINE_CFG_ITEM_ID_FIELD.index = 1
+RUNE_SKILL_REFINE_CFG_ITEM_ID_FIELD.label = 2
+RUNE_SKILL_REFINE_CFG_ITEM_ID_FIELD.has_default_value = false
+RUNE_SKILL_REFINE_CFG_ITEM_ID_FIELD.default_value = 0
+RUNE_SKILL_REFINE_CFG_ITEM_ID_FIELD.type = 13
+RUNE_SKILL_REFINE_CFG_ITEM_ID_FIELD.cpp_type = 3
+
+RUNE_SKILL_REFINE_CFG_ITEM_COUNT_FIELD.name = "item_count"
+RUNE_SKILL_REFINE_CFG_ITEM_COUNT_FIELD.full_name = ".ftcfg.rune_skill_refine_cfg.item_count"
+RUNE_SKILL_REFINE_CFG_ITEM_COUNT_FIELD.number = 3
+RUNE_SKILL_REFINE_CFG_ITEM_COUNT_FIELD.index = 2
+RUNE_SKILL_REFINE_CFG_ITEM_COUNT_FIELD.label = 2
+RUNE_SKILL_REFINE_CFG_ITEM_COUNT_FIELD.has_default_value = false
+RUNE_SKILL_REFINE_CFG_ITEM_COUNT_FIELD.default_value = 0
+RUNE_SKILL_REFINE_CFG_ITEM_COUNT_FIELD.type = 13
+RUNE_SKILL_REFINE_CFG_ITEM_COUNT_FIELD.cpp_type = 3
+
+RUNE_SKILL_REFINE_CFG_SILVER_COST_FIELD.name = "silver_cost"
+RUNE_SKILL_REFINE_CFG_SILVER_COST_FIELD.full_name = ".ftcfg.rune_skill_refine_cfg.silver_cost"
+RUNE_SKILL_REFINE_CFG_SILVER_COST_FIELD.number = 4
+RUNE_SKILL_REFINE_CFG_SILVER_COST_FIELD.index = 3
+RUNE_SKILL_REFINE_CFG_SILVER_COST_FIELD.label = 2
+RUNE_SKILL_REFINE_CFG_SILVER_COST_FIELD.has_default_value = false
+RUNE_SKILL_REFINE_CFG_SILVER_COST_FIELD.default_value = 0
+RUNE_SKILL_REFINE_CFG_SILVER_COST_FIELD.type = 13
+RUNE_SKILL_REFINE_CFG_SILVER_COST_FIELD.cpp_type = 3
+
+RUNE_SKILL_REFINE_CFG.name = "rune_skill_refine_cfg"
+RUNE_SKILL_REFINE_CFG.full_name = ".ftcfg.rune_skill_refine_cfg"
+RUNE_SKILL_REFINE_CFG.nested_types = {}
+RUNE_SKILL_REFINE_CFG.enum_types = {}
+RUNE_SKILL_REFINE_CFG.fields = {RUNE_SKILL_REFINE_CFG_LEVEL_FIELD, RUNE_SKILL_REFINE_CFG_ITEM_ID_FIELD, RUNE_SKILL_REFINE_CFG_ITEM_COUNT_FIELD, RUNE_SKILL_REFINE_CFG_SILVER_COST_FIELD}
+RUNE_SKILL_REFINE_CFG.is_extendable = false
+RUNE_SKILL_REFINE_CFG.extensions = {}
+RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD.name = "items"
+RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.rune_skill_refine_cfgs.items"
+RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD.number = 1
+RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD.index = 0
+RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD.label = 3
+RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD.has_default_value = false
+RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD.default_value = {}
+RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD.message_type = RUNE_SKILL_REFINE_CFG
+RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD.type = 11
+RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RUNE_SKILL_REFINE_CFGS.name = "rune_skill_refine_cfgs"
+RUNE_SKILL_REFINE_CFGS.full_name = ".ftcfg.rune_skill_refine_cfgs"
+RUNE_SKILL_REFINE_CFGS.nested_types = {}
+RUNE_SKILL_REFINE_CFGS.enum_types = {}
+RUNE_SKILL_REFINE_CFGS.fields = {RUNE_SKILL_REFINE_CFGS_ITEMS_FIELD}
+RUNE_SKILL_REFINE_CFGS.is_extendable = false
+RUNE_SKILL_REFINE_CFGS.extensions = {}
+MONTHCARD_BASE_CFG_ID_FIELD.name = "id"
+MONTHCARD_BASE_CFG_ID_FIELD.full_name = ".ftcfg.monthcard_base_cfg.id"
+MONTHCARD_BASE_CFG_ID_FIELD.number = 1
+MONTHCARD_BASE_CFG_ID_FIELD.index = 0
+MONTHCARD_BASE_CFG_ID_FIELD.label = 2
+MONTHCARD_BASE_CFG_ID_FIELD.has_default_value = false
+MONTHCARD_BASE_CFG_ID_FIELD.default_value = 0
+MONTHCARD_BASE_CFG_ID_FIELD.type = 5
+MONTHCARD_BASE_CFG_ID_FIELD.cpp_type = 1
+
+MONTHCARD_BASE_CFG_CONTINUEDAY_FIELD.name = "continueday"
+MONTHCARD_BASE_CFG_CONTINUEDAY_FIELD.full_name = ".ftcfg.monthcard_base_cfg.continueday"
+MONTHCARD_BASE_CFG_CONTINUEDAY_FIELD.number = 2
+MONTHCARD_BASE_CFG_CONTINUEDAY_FIELD.index = 1
+MONTHCARD_BASE_CFG_CONTINUEDAY_FIELD.label = 2
+MONTHCARD_BASE_CFG_CONTINUEDAY_FIELD.has_default_value = false
+MONTHCARD_BASE_CFG_CONTINUEDAY_FIELD.default_value = 0
+MONTHCARD_BASE_CFG_CONTINUEDAY_FIELD.type = 5
+MONTHCARD_BASE_CFG_CONTINUEDAY_FIELD.cpp_type = 1
+
+MONTHCARD_BASE_CFG_PRICE_FIELD.name = "price"
+MONTHCARD_BASE_CFG_PRICE_FIELD.full_name = ".ftcfg.monthcard_base_cfg.price"
+MONTHCARD_BASE_CFG_PRICE_FIELD.number = 3
+MONTHCARD_BASE_CFG_PRICE_FIELD.index = 2
+MONTHCARD_BASE_CFG_PRICE_FIELD.label = 2
+MONTHCARD_BASE_CFG_PRICE_FIELD.has_default_value = false
+MONTHCARD_BASE_CFG_PRICE_FIELD.default_value = 0
+MONTHCARD_BASE_CFG_PRICE_FIELD.type = 5
+MONTHCARD_BASE_CFG_PRICE_FIELD.cpp_type = 1
+
+MONTHCARD_BASE_CFG_INGOTSCOUNT_FIELD.name = "ingotscount"
+MONTHCARD_BASE_CFG_INGOTSCOUNT_FIELD.full_name = ".ftcfg.monthcard_base_cfg.ingotscount"
+MONTHCARD_BASE_CFG_INGOTSCOUNT_FIELD.number = 4
+MONTHCARD_BASE_CFG_INGOTSCOUNT_FIELD.index = 3
+MONTHCARD_BASE_CFG_INGOTSCOUNT_FIELD.label = 2
+MONTHCARD_BASE_CFG_INGOTSCOUNT_FIELD.has_default_value = false
+MONTHCARD_BASE_CFG_INGOTSCOUNT_FIELD.default_value = 0
+MONTHCARD_BASE_CFG_INGOTSCOUNT_FIELD.type = 5
+MONTHCARD_BASE_CFG_INGOTSCOUNT_FIELD.cpp_type = 1
+
+MONTHCARD_BASE_CFG_EXP_PERCENT_FIELD.name = "exp_percent"
+MONTHCARD_BASE_CFG_EXP_PERCENT_FIELD.full_name = ".ftcfg.monthcard_base_cfg.exp_percent"
+MONTHCARD_BASE_CFG_EXP_PERCENT_FIELD.number = 5
+MONTHCARD_BASE_CFG_EXP_PERCENT_FIELD.index = 4
+MONTHCARD_BASE_CFG_EXP_PERCENT_FIELD.label = 2
+MONTHCARD_BASE_CFG_EXP_PERCENT_FIELD.has_default_value = false
+MONTHCARD_BASE_CFG_EXP_PERCENT_FIELD.default_value = 0
+MONTHCARD_BASE_CFG_EXP_PERCENT_FIELD.type = 5
+MONTHCARD_BASE_CFG_EXP_PERCENT_FIELD.cpp_type = 1
+
+MONTHCARD_BASE_CFG_POPULARITY_PER_FIELD.name = "popularity_per"
+MONTHCARD_BASE_CFG_POPULARITY_PER_FIELD.full_name = ".ftcfg.monthcard_base_cfg.popularity_per"
+MONTHCARD_BASE_CFG_POPULARITY_PER_FIELD.number = 6
+MONTHCARD_BASE_CFG_POPULARITY_PER_FIELD.index = 5
+MONTHCARD_BASE_CFG_POPULARITY_PER_FIELD.label = 2
+MONTHCARD_BASE_CFG_POPULARITY_PER_FIELD.has_default_value = false
+MONTHCARD_BASE_CFG_POPULARITY_PER_FIELD.default_value = 0
+MONTHCARD_BASE_CFG_POPULARITY_PER_FIELD.type = 5
+MONTHCARD_BASE_CFG_POPULARITY_PER_FIELD.cpp_type = 1
+
+MONTHCARD_BASE_CFG.name = "monthcard_base_cfg"
+MONTHCARD_BASE_CFG.full_name = ".ftcfg.monthcard_base_cfg"
+MONTHCARD_BASE_CFG.nested_types = {}
+MONTHCARD_BASE_CFG.enum_types = {}
+MONTHCARD_BASE_CFG.fields = {MONTHCARD_BASE_CFG_ID_FIELD, MONTHCARD_BASE_CFG_CONTINUEDAY_FIELD, MONTHCARD_BASE_CFG_PRICE_FIELD, MONTHCARD_BASE_CFG_INGOTSCOUNT_FIELD, MONTHCARD_BASE_CFG_EXP_PERCENT_FIELD, MONTHCARD_BASE_CFG_POPULARITY_PER_FIELD}
+MONTHCARD_BASE_CFG.is_extendable = false
+MONTHCARD_BASE_CFG.extensions = {}
+MONTHCARD_BASE_CFGS_ITEMS_FIELD.name = "items"
+MONTHCARD_BASE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.monthcard_base_cfgs.items"
+MONTHCARD_BASE_CFGS_ITEMS_FIELD.number = 1
+MONTHCARD_BASE_CFGS_ITEMS_FIELD.index = 0
+MONTHCARD_BASE_CFGS_ITEMS_FIELD.label = 3
+MONTHCARD_BASE_CFGS_ITEMS_FIELD.has_default_value = false
+MONTHCARD_BASE_CFGS_ITEMS_FIELD.default_value = {}
+MONTHCARD_BASE_CFGS_ITEMS_FIELD.message_type = MONTHCARD_BASE_CFG
+MONTHCARD_BASE_CFGS_ITEMS_FIELD.type = 11
+MONTHCARD_BASE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MONTHCARD_BASE_CFGS.name = "monthcard_base_cfgs"
+MONTHCARD_BASE_CFGS.full_name = ".ftcfg.monthcard_base_cfgs"
+MONTHCARD_BASE_CFGS.nested_types = {}
+MONTHCARD_BASE_CFGS.enum_types = {}
+MONTHCARD_BASE_CFGS.fields = {MONTHCARD_BASE_CFGS_ITEMS_FIELD}
+MONTHCARD_BASE_CFGS.is_extendable = false
+MONTHCARD_BASE_CFGS.extensions = {}
+SIGNUP_BASE_CFG_ID_FIELD.name = "id"
+SIGNUP_BASE_CFG_ID_FIELD.full_name = ".ftcfg.signup_base_cfg.id"
+SIGNUP_BASE_CFG_ID_FIELD.number = 1
+SIGNUP_BASE_CFG_ID_FIELD.index = 0
+SIGNUP_BASE_CFG_ID_FIELD.label = 2
+SIGNUP_BASE_CFG_ID_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ID_FIELD.default_value = 0
+SIGNUP_BASE_CFG_ID_FIELD.type = 5
+SIGNUP_BASE_CFG_ID_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH1_FIELD.name = "item_number_month1"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH1_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month1"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH1_FIELD.number = 2
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH1_FIELD.index = 1
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH1_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH1_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH1_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH1_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH1_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH2_FIELD.name = "item_number_month2"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH2_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month2"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH2_FIELD.number = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH2_FIELD.index = 2
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH2_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH2_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH2_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH2_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH2_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH3_FIELD.name = "item_number_month3"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH3_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month3"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH3_FIELD.number = 4
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH3_FIELD.index = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH3_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH3_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH3_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH3_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH3_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH4_FIELD.name = "item_number_month4"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH4_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month4"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH4_FIELD.number = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH4_FIELD.index = 4
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH4_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH4_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH4_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH4_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH4_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH5_FIELD.name = "item_number_month5"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH5_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month5"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH5_FIELD.number = 6
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH5_FIELD.index = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH5_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH5_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH5_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH5_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH5_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH6_FIELD.name = "item_number_month6"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH6_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month6"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH6_FIELD.number = 7
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH6_FIELD.index = 6
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH6_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH6_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH6_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH6_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH6_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH7_FIELD.name = "item_number_month7"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH7_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month7"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH7_FIELD.number = 8
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH7_FIELD.index = 7
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH7_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH7_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH7_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH7_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH7_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH8_FIELD.name = "item_number_month8"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH8_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month8"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH8_FIELD.number = 9
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH8_FIELD.index = 8
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH8_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH8_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH8_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH8_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH8_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH9_FIELD.name = "item_number_month9"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH9_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month9"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH9_FIELD.number = 10
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH9_FIELD.index = 9
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH9_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH9_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH9_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH9_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH9_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH10_FIELD.name = "item_number_month10"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH10_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month10"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH10_FIELD.number = 11
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH10_FIELD.index = 10
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH10_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH10_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH10_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH10_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH10_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH11_FIELD.name = "item_number_month11"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH11_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month11"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH11_FIELD.number = 12
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH11_FIELD.index = 11
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH11_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH11_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH11_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH11_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH11_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH12_FIELD.name = "item_number_month12"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH12_FIELD.full_name = ".ftcfg.signup_base_cfg.item_number_month12"
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH12_FIELD.number = 13
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH12_FIELD.index = 12
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH12_FIELD.label = 3
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH12_FIELD.has_default_value = false
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH12_FIELD.default_value = {}
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH12_FIELD.type = 5
+SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH12_FIELD.cpp_type = 1
+
+SIGNUP_BASE_CFG.name = "signup_base_cfg"
+SIGNUP_BASE_CFG.full_name = ".ftcfg.signup_base_cfg"
+SIGNUP_BASE_CFG.nested_types = {}
+SIGNUP_BASE_CFG.enum_types = {}
+SIGNUP_BASE_CFG.fields = {SIGNUP_BASE_CFG_ID_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH1_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH2_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH3_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH4_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH5_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH6_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH7_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH8_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH9_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH10_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH11_FIELD, SIGNUP_BASE_CFG_ITEM_NUMBER_MONTH12_FIELD}
+SIGNUP_BASE_CFG.is_extendable = false
+SIGNUP_BASE_CFG.extensions = {}
+SIGNUP_BASE_CFGS_ITEMS_FIELD.name = "items"
+SIGNUP_BASE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.signup_base_cfgs.items"
+SIGNUP_BASE_CFGS_ITEMS_FIELD.number = 1
+SIGNUP_BASE_CFGS_ITEMS_FIELD.index = 0
+SIGNUP_BASE_CFGS_ITEMS_FIELD.label = 3
+SIGNUP_BASE_CFGS_ITEMS_FIELD.has_default_value = false
+SIGNUP_BASE_CFGS_ITEMS_FIELD.default_value = {}
+SIGNUP_BASE_CFGS_ITEMS_FIELD.message_type = SIGNUP_BASE_CFG
+SIGNUP_BASE_CFGS_ITEMS_FIELD.type = 11
+SIGNUP_BASE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SIGNUP_BASE_CFGS.name = "signup_base_cfgs"
+SIGNUP_BASE_CFGS.full_name = ".ftcfg.signup_base_cfgs"
+SIGNUP_BASE_CFGS.nested_types = {}
+SIGNUP_BASE_CFGS.enum_types = {}
+SIGNUP_BASE_CFGS.fields = {SIGNUP_BASE_CFGS_ITEMS_FIELD}
+SIGNUP_BASE_CFGS.is_extendable = false
+SIGNUP_BASE_CFGS.extensions = {}
+SIGNUP_ACCUMULATION_CFG_ID_FIELD.name = "id"
+SIGNUP_ACCUMULATION_CFG_ID_FIELD.full_name = ".ftcfg.signup_accumulation_cfg.id"
+SIGNUP_ACCUMULATION_CFG_ID_FIELD.number = 1
+SIGNUP_ACCUMULATION_CFG_ID_FIELD.index = 0
+SIGNUP_ACCUMULATION_CFG_ID_FIELD.label = 2
+SIGNUP_ACCUMULATION_CFG_ID_FIELD.has_default_value = false
+SIGNUP_ACCUMULATION_CFG_ID_FIELD.default_value = 0
+SIGNUP_ACCUMULATION_CFG_ID_FIELD.type = 5
+SIGNUP_ACCUMULATION_CFG_ID_FIELD.cpp_type = 1
+
+SIGNUP_ACCUMULATION_CFG_REACH_NUMBER_FIELD.name = "reach_number"
+SIGNUP_ACCUMULATION_CFG_REACH_NUMBER_FIELD.full_name = ".ftcfg.signup_accumulation_cfg.reach_number"
+SIGNUP_ACCUMULATION_CFG_REACH_NUMBER_FIELD.number = 2
+SIGNUP_ACCUMULATION_CFG_REACH_NUMBER_FIELD.index = 1
+SIGNUP_ACCUMULATION_CFG_REACH_NUMBER_FIELD.label = 2
+SIGNUP_ACCUMULATION_CFG_REACH_NUMBER_FIELD.has_default_value = false
+SIGNUP_ACCUMULATION_CFG_REACH_NUMBER_FIELD.default_value = 0
+SIGNUP_ACCUMULATION_CFG_REACH_NUMBER_FIELD.type = 5
+SIGNUP_ACCUMULATION_CFG_REACH_NUMBER_FIELD.cpp_type = 1
+
+SIGNUP_ACCUMULATION_CFG_REWARD_ID_FIELD.name = "reward_id"
+SIGNUP_ACCUMULATION_CFG_REWARD_ID_FIELD.full_name = ".ftcfg.signup_accumulation_cfg.reward_id"
+SIGNUP_ACCUMULATION_CFG_REWARD_ID_FIELD.number = 3
+SIGNUP_ACCUMULATION_CFG_REWARD_ID_FIELD.index = 2
+SIGNUP_ACCUMULATION_CFG_REWARD_ID_FIELD.label = 2
+SIGNUP_ACCUMULATION_CFG_REWARD_ID_FIELD.has_default_value = false
+SIGNUP_ACCUMULATION_CFG_REWARD_ID_FIELD.default_value = 0
+SIGNUP_ACCUMULATION_CFG_REWARD_ID_FIELD.type = 5
+SIGNUP_ACCUMULATION_CFG_REWARD_ID_FIELD.cpp_type = 1
+
+SIGNUP_ACCUMULATION_CFG_REWARD_NUM_FIELD.name = "reward_num"
+SIGNUP_ACCUMULATION_CFG_REWARD_NUM_FIELD.full_name = ".ftcfg.signup_accumulation_cfg.reward_num"
+SIGNUP_ACCUMULATION_CFG_REWARD_NUM_FIELD.number = 4
+SIGNUP_ACCUMULATION_CFG_REWARD_NUM_FIELD.index = 3
+SIGNUP_ACCUMULATION_CFG_REWARD_NUM_FIELD.label = 2
+SIGNUP_ACCUMULATION_CFG_REWARD_NUM_FIELD.has_default_value = false
+SIGNUP_ACCUMULATION_CFG_REWARD_NUM_FIELD.default_value = 0
+SIGNUP_ACCUMULATION_CFG_REWARD_NUM_FIELD.type = 5
+SIGNUP_ACCUMULATION_CFG_REWARD_NUM_FIELD.cpp_type = 1
+
+SIGNUP_ACCUMULATION_CFG.name = "signup_accumulation_cfg"
+SIGNUP_ACCUMULATION_CFG.full_name = ".ftcfg.signup_accumulation_cfg"
+SIGNUP_ACCUMULATION_CFG.nested_types = {}
+SIGNUP_ACCUMULATION_CFG.enum_types = {}
+SIGNUP_ACCUMULATION_CFG.fields = {SIGNUP_ACCUMULATION_CFG_ID_FIELD, SIGNUP_ACCUMULATION_CFG_REACH_NUMBER_FIELD, SIGNUP_ACCUMULATION_CFG_REWARD_ID_FIELD, SIGNUP_ACCUMULATION_CFG_REWARD_NUM_FIELD}
+SIGNUP_ACCUMULATION_CFG.is_extendable = false
+SIGNUP_ACCUMULATION_CFG.extensions = {}
+SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD.name = "items"
+SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.signup_accumulation_cfgs.items"
+SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD.number = 1
+SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD.index = 0
+SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD.label = 3
+SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD.has_default_value = false
+SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD.default_value = {}
+SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD.message_type = SIGNUP_ACCUMULATION_CFG
+SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD.type = 11
+SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SIGNUP_ACCUMULATION_CFGS.name = "signup_accumulation_cfgs"
+SIGNUP_ACCUMULATION_CFGS.full_name = ".ftcfg.signup_accumulation_cfgs"
+SIGNUP_ACCUMULATION_CFGS.nested_types = {}
+SIGNUP_ACCUMULATION_CFGS.enum_types = {}
+SIGNUP_ACCUMULATION_CFGS.fields = {SIGNUP_ACCUMULATION_CFGS_ITEMS_FIELD}
+SIGNUP_ACCUMULATION_CFGS.is_extendable = false
+SIGNUP_ACCUMULATION_CFGS.extensions = {}
+SERVICE_CFG_ID_FIELD.name = "id"
+SERVICE_CFG_ID_FIELD.full_name = ".ftcfg.service_cfg.id"
+SERVICE_CFG_ID_FIELD.number = 1
+SERVICE_CFG_ID_FIELD.index = 0
+SERVICE_CFG_ID_FIELD.label = 2
+SERVICE_CFG_ID_FIELD.has_default_value = false
+SERVICE_CFG_ID_FIELD.default_value = 0
+SERVICE_CFG_ID_FIELD.type = 5
+SERVICE_CFG_ID_FIELD.cpp_type = 1
+
+SERVICE_CFG_SERVICE_ID_FIELD.name = "service_id"
+SERVICE_CFG_SERVICE_ID_FIELD.full_name = ".ftcfg.service_cfg.service_id"
+SERVICE_CFG_SERVICE_ID_FIELD.number = 2
+SERVICE_CFG_SERVICE_ID_FIELD.index = 1
+SERVICE_CFG_SERVICE_ID_FIELD.label = 2
+SERVICE_CFG_SERVICE_ID_FIELD.has_default_value = false
+SERVICE_CFG_SERVICE_ID_FIELD.default_value = 0
+SERVICE_CFG_SERVICE_ID_FIELD.type = 5
+SERVICE_CFG_SERVICE_ID_FIELD.cpp_type = 1
+
+SERVICE_CFG_PARAM1_FIELD.name = "param1"
+SERVICE_CFG_PARAM1_FIELD.full_name = ".ftcfg.service_cfg.param1"
+SERVICE_CFG_PARAM1_FIELD.number = 3
+SERVICE_CFG_PARAM1_FIELD.index = 2
+SERVICE_CFG_PARAM1_FIELD.label = 2
+SERVICE_CFG_PARAM1_FIELD.has_default_value = false
+SERVICE_CFG_PARAM1_FIELD.default_value = 0
+SERVICE_CFG_PARAM1_FIELD.type = 5
+SERVICE_CFG_PARAM1_FIELD.cpp_type = 1
+
+SERVICE_CFG_PARAM2_FIELD.name = "param2"
+SERVICE_CFG_PARAM2_FIELD.full_name = ".ftcfg.service_cfg.param2"
+SERVICE_CFG_PARAM2_FIELD.number = 4
+SERVICE_CFG_PARAM2_FIELD.index = 3
+SERVICE_CFG_PARAM2_FIELD.label = 2
+SERVICE_CFG_PARAM2_FIELD.has_default_value = false
+SERVICE_CFG_PARAM2_FIELD.default_value = 0
+SERVICE_CFG_PARAM2_FIELD.type = 5
+SERVICE_CFG_PARAM2_FIELD.cpp_type = 1
+
+SERVICE_CFG_PARAM3_FIELD.name = "param3"
+SERVICE_CFG_PARAM3_FIELD.full_name = ".ftcfg.service_cfg.param3"
+SERVICE_CFG_PARAM3_FIELD.number = 5
+SERVICE_CFG_PARAM3_FIELD.index = 4
+SERVICE_CFG_PARAM3_FIELD.label = 2
+SERVICE_CFG_PARAM3_FIELD.has_default_value = false
+SERVICE_CFG_PARAM3_FIELD.default_value = 0
+SERVICE_CFG_PARAM3_FIELD.type = 5
+SERVICE_CFG_PARAM3_FIELD.cpp_type = 1
+
+SERVICE_CFG_PARAM4_FIELD.name = "param4"
+SERVICE_CFG_PARAM4_FIELD.full_name = ".ftcfg.service_cfg.param4"
+SERVICE_CFG_PARAM4_FIELD.number = 6
+SERVICE_CFG_PARAM4_FIELD.index = 5
+SERVICE_CFG_PARAM4_FIELD.label = 2
+SERVICE_CFG_PARAM4_FIELD.has_default_value = false
+SERVICE_CFG_PARAM4_FIELD.default_value = 0
+SERVICE_CFG_PARAM4_FIELD.type = 5
+SERVICE_CFG_PARAM4_FIELD.cpp_type = 1
+
+SERVICE_CFG_PARAM5_FIELD.name = "param5"
+SERVICE_CFG_PARAM5_FIELD.full_name = ".ftcfg.service_cfg.param5"
+SERVICE_CFG_PARAM5_FIELD.number = 7
+SERVICE_CFG_PARAM5_FIELD.index = 6
+SERVICE_CFG_PARAM5_FIELD.label = 2
+SERVICE_CFG_PARAM5_FIELD.has_default_value = false
+SERVICE_CFG_PARAM5_FIELD.default_value = 0
+SERVICE_CFG_PARAM5_FIELD.type = 5
+SERVICE_CFG_PARAM5_FIELD.cpp_type = 1
+
+SERVICE_CFG.name = "service_cfg"
+SERVICE_CFG.full_name = ".ftcfg.service_cfg"
+SERVICE_CFG.nested_types = {}
+SERVICE_CFG.enum_types = {}
+SERVICE_CFG.fields = {SERVICE_CFG_ID_FIELD, SERVICE_CFG_SERVICE_ID_FIELD, SERVICE_CFG_PARAM1_FIELD, SERVICE_CFG_PARAM2_FIELD, SERVICE_CFG_PARAM3_FIELD, SERVICE_CFG_PARAM4_FIELD, SERVICE_CFG_PARAM5_FIELD}
+SERVICE_CFG.is_extendable = false
+SERVICE_CFG.extensions = {}
+SERVICE_CFGS_ITEMS_FIELD.name = "items"
+SERVICE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.service_cfgs.items"
+SERVICE_CFGS_ITEMS_FIELD.number = 1
+SERVICE_CFGS_ITEMS_FIELD.index = 0
+SERVICE_CFGS_ITEMS_FIELD.label = 3
+SERVICE_CFGS_ITEMS_FIELD.has_default_value = false
+SERVICE_CFGS_ITEMS_FIELD.default_value = {}
+SERVICE_CFGS_ITEMS_FIELD.message_type = SERVICE_CFG
+SERVICE_CFGS_ITEMS_FIELD.type = 11
+SERVICE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SERVICE_CFGS.name = "service_cfgs"
+SERVICE_CFGS.full_name = ".ftcfg.service_cfgs"
+SERVICE_CFGS.nested_types = {}
+SERVICE_CFGS.enum_types = {}
+SERVICE_CFGS.fields = {SERVICE_CFGS_ITEMS_FIELD}
+SERVICE_CFGS.is_extendable = false
+SERVICE_CFGS.extensions = {}
+MATERIAL_ITEM_CFG_NUM_FIELD.name = "num"
+MATERIAL_ITEM_CFG_NUM_FIELD.full_name = ".ftcfg.material_item_cfg.num"
+MATERIAL_ITEM_CFG_NUM_FIELD.number = 1
+MATERIAL_ITEM_CFG_NUM_FIELD.index = 0
+MATERIAL_ITEM_CFG_NUM_FIELD.label = 2
+MATERIAL_ITEM_CFG_NUM_FIELD.has_default_value = false
+MATERIAL_ITEM_CFG_NUM_FIELD.default_value = 0
+MATERIAL_ITEM_CFG_NUM_FIELD.type = 13
+MATERIAL_ITEM_CFG_NUM_FIELD.cpp_type = 3
+
+MATERIAL_ITEM_CFG_ID_FIELD.name = "id"
+MATERIAL_ITEM_CFG_ID_FIELD.full_name = ".ftcfg.material_item_cfg.id"
+MATERIAL_ITEM_CFG_ID_FIELD.number = 2
+MATERIAL_ITEM_CFG_ID_FIELD.index = 1
+MATERIAL_ITEM_CFG_ID_FIELD.label = 3
+MATERIAL_ITEM_CFG_ID_FIELD.has_default_value = false
+MATERIAL_ITEM_CFG_ID_FIELD.default_value = {}
+MATERIAL_ITEM_CFG_ID_FIELD.type = 13
+MATERIAL_ITEM_CFG_ID_FIELD.cpp_type = 3
+
+MATERIAL_ITEM_CFG_WEIGHT_FIELD.name = "weight"
+MATERIAL_ITEM_CFG_WEIGHT_FIELD.full_name = ".ftcfg.material_item_cfg.weight"
+MATERIAL_ITEM_CFG_WEIGHT_FIELD.number = 3
+MATERIAL_ITEM_CFG_WEIGHT_FIELD.index = 2
+MATERIAL_ITEM_CFG_WEIGHT_FIELD.label = 3
+MATERIAL_ITEM_CFG_WEIGHT_FIELD.has_default_value = false
+MATERIAL_ITEM_CFG_WEIGHT_FIELD.default_value = {}
+MATERIAL_ITEM_CFG_WEIGHT_FIELD.type = 5
+MATERIAL_ITEM_CFG_WEIGHT_FIELD.cpp_type = 1
+
+MATERIAL_ITEM_CFG_REWARD_ID_FIELD.name = "reward_id"
+MATERIAL_ITEM_CFG_REWARD_ID_FIELD.full_name = ".ftcfg.material_item_cfg.reward_id"
+MATERIAL_ITEM_CFG_REWARD_ID_FIELD.number = 4
+MATERIAL_ITEM_CFG_REWARD_ID_FIELD.index = 3
+MATERIAL_ITEM_CFG_REWARD_ID_FIELD.label = 3
+MATERIAL_ITEM_CFG_REWARD_ID_FIELD.has_default_value = false
+MATERIAL_ITEM_CFG_REWARD_ID_FIELD.default_value = {}
+MATERIAL_ITEM_CFG_REWARD_ID_FIELD.type = 5
+MATERIAL_ITEM_CFG_REWARD_ID_FIELD.cpp_type = 1
+
+MATERIAL_ITEM_CFG.name = "material_item_cfg"
+MATERIAL_ITEM_CFG.full_name = ".ftcfg.material_item_cfg"
+MATERIAL_ITEM_CFG.nested_types = {}
+MATERIAL_ITEM_CFG.enum_types = {}
+MATERIAL_ITEM_CFG.fields = {MATERIAL_ITEM_CFG_NUM_FIELD, MATERIAL_ITEM_CFG_ID_FIELD, MATERIAL_ITEM_CFG_WEIGHT_FIELD, MATERIAL_ITEM_CFG_REWARD_ID_FIELD}
+MATERIAL_ITEM_CFG.is_extendable = false
+MATERIAL_ITEM_CFG.extensions = {}
+MATERIAL_ITEM_CFGS_ITEMS_FIELD.name = "items"
+MATERIAL_ITEM_CFGS_ITEMS_FIELD.full_name = ".ftcfg.material_item_cfgs.items"
+MATERIAL_ITEM_CFGS_ITEMS_FIELD.number = 1
+MATERIAL_ITEM_CFGS_ITEMS_FIELD.index = 0
+MATERIAL_ITEM_CFGS_ITEMS_FIELD.label = 3
+MATERIAL_ITEM_CFGS_ITEMS_FIELD.has_default_value = false
+MATERIAL_ITEM_CFGS_ITEMS_FIELD.default_value = {}
+MATERIAL_ITEM_CFGS_ITEMS_FIELD.message_type = MATERIAL_ITEM_CFG
+MATERIAL_ITEM_CFGS_ITEMS_FIELD.type = 11
+MATERIAL_ITEM_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MATERIAL_ITEM_CFGS.name = "material_item_cfgs"
+MATERIAL_ITEM_CFGS.full_name = ".ftcfg.material_item_cfgs"
+MATERIAL_ITEM_CFGS.nested_types = {}
+MATERIAL_ITEM_CFGS.enum_types = {}
+MATERIAL_ITEM_CFGS.fields = {MATERIAL_ITEM_CFGS_ITEMS_FIELD}
+MATERIAL_ITEM_CFGS.is_extendable = false
+MATERIAL_ITEM_CFGS.extensions = {}
+STATE_CFG_ID_FIELD.name = "id"
+STATE_CFG_ID_FIELD.full_name = ".ftcfg.state_cfg.id"
+STATE_CFG_ID_FIELD.number = 1
+STATE_CFG_ID_FIELD.index = 0
+STATE_CFG_ID_FIELD.label = 2
+STATE_CFG_ID_FIELD.has_default_value = false
+STATE_CFG_ID_FIELD.default_value = 0
+STATE_CFG_ID_FIELD.type = 5
+STATE_CFG_ID_FIELD.cpp_type = 1
+
+STATE_CFG_DESC_FIELD.name = "desc"
+STATE_CFG_DESC_FIELD.full_name = ".ftcfg.state_cfg.desc"
+STATE_CFG_DESC_FIELD.number = 2
+STATE_CFG_DESC_FIELD.index = 1
+STATE_CFG_DESC_FIELD.label = 2
+STATE_CFG_DESC_FIELD.has_default_value = false
+STATE_CFG_DESC_FIELD.default_value = ""
+STATE_CFG_DESC_FIELD.type = 9
+STATE_CFG_DESC_FIELD.cpp_type = 9
+
+STATE_CFG_ACTIONS_FIELD.name = "actions"
+STATE_CFG_ACTIONS_FIELD.full_name = ".ftcfg.state_cfg.actions"
+STATE_CFG_ACTIONS_FIELD.number = 3
+STATE_CFG_ACTIONS_FIELD.index = 2
+STATE_CFG_ACTIONS_FIELD.label = 3
+STATE_CFG_ACTIONS_FIELD.has_default_value = false
+STATE_CFG_ACTIONS_FIELD.default_value = {}
+STATE_CFG_ACTIONS_FIELD.enum_type = config_predefine_pb.EBATTLESTATEACTION
+STATE_CFG_ACTIONS_FIELD.type = 14
+STATE_CFG_ACTIONS_FIELD.cpp_type = 8
+
+STATE_CFG.name = "state_cfg"
+STATE_CFG.full_name = ".ftcfg.state_cfg"
+STATE_CFG.nested_types = {}
+STATE_CFG.enum_types = {}
+STATE_CFG.fields = {STATE_CFG_ID_FIELD, STATE_CFG_DESC_FIELD, STATE_CFG_ACTIONS_FIELD}
+STATE_CFG.is_extendable = false
+STATE_CFG.extensions = {}
+STATE_CFGS_ITEMS_FIELD.name = "items"
+STATE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.state_cfgs.items"
+STATE_CFGS_ITEMS_FIELD.number = 1
+STATE_CFGS_ITEMS_FIELD.index = 0
+STATE_CFGS_ITEMS_FIELD.label = 3
+STATE_CFGS_ITEMS_FIELD.has_default_value = false
+STATE_CFGS_ITEMS_FIELD.default_value = {}
+STATE_CFGS_ITEMS_FIELD.message_type = STATE_CFG
+STATE_CFGS_ITEMS_FIELD.type = 11
+STATE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+STATE_CFGS.name = "state_cfgs"
+STATE_CFGS.full_name = ".ftcfg.state_cfgs"
+STATE_CFGS.nested_types = {}
+STATE_CFGS.enum_types = {}
+STATE_CFGS.fields = {STATE_CFGS_ITEMS_FIELD}
+STATE_CFGS.is_extendable = false
+STATE_CFGS.extensions = {}
+CAM_OPTIONS_CFG_ID_FIELD.name = "id"
+CAM_OPTIONS_CFG_ID_FIELD.full_name = ".ftcfg.cam_options_cfg.id"
+CAM_OPTIONS_CFG_ID_FIELD.number = 1
+CAM_OPTIONS_CFG_ID_FIELD.index = 0
+CAM_OPTIONS_CFG_ID_FIELD.label = 2
+CAM_OPTIONS_CFG_ID_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_ID_FIELD.default_value = 0
+CAM_OPTIONS_CFG_ID_FIELD.type = 5
+CAM_OPTIONS_CFG_ID_FIELD.cpp_type = 1
+
+CAM_OPTIONS_CFG_MIN_PITCH_FIELD.name = "min_pitch"
+CAM_OPTIONS_CFG_MIN_PITCH_FIELD.full_name = ".ftcfg.cam_options_cfg.min_pitch"
+CAM_OPTIONS_CFG_MIN_PITCH_FIELD.number = 2
+CAM_OPTIONS_CFG_MIN_PITCH_FIELD.index = 1
+CAM_OPTIONS_CFG_MIN_PITCH_FIELD.label = 2
+CAM_OPTIONS_CFG_MIN_PITCH_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_MIN_PITCH_FIELD.default_value = 0.0
+CAM_OPTIONS_CFG_MIN_PITCH_FIELD.type = 2
+CAM_OPTIONS_CFG_MIN_PITCH_FIELD.cpp_type = 6
+
+CAM_OPTIONS_CFG_MAX_PITCH_FIELD.name = "max_pitch"
+CAM_OPTIONS_CFG_MAX_PITCH_FIELD.full_name = ".ftcfg.cam_options_cfg.max_pitch"
+CAM_OPTIONS_CFG_MAX_PITCH_FIELD.number = 3
+CAM_OPTIONS_CFG_MAX_PITCH_FIELD.index = 2
+CAM_OPTIONS_CFG_MAX_PITCH_FIELD.label = 2
+CAM_OPTIONS_CFG_MAX_PITCH_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_MAX_PITCH_FIELD.default_value = 0.0
+CAM_OPTIONS_CFG_MAX_PITCH_FIELD.type = 2
+CAM_OPTIONS_CFG_MAX_PITCH_FIELD.cpp_type = 6
+
+CAM_OPTIONS_CFG_MAX_FOLLOW_DIS_FIELD.name = "max_follow_dis"
+CAM_OPTIONS_CFG_MAX_FOLLOW_DIS_FIELD.full_name = ".ftcfg.cam_options_cfg.max_follow_dis"
+CAM_OPTIONS_CFG_MAX_FOLLOW_DIS_FIELD.number = 4
+CAM_OPTIONS_CFG_MAX_FOLLOW_DIS_FIELD.index = 3
+CAM_OPTIONS_CFG_MAX_FOLLOW_DIS_FIELD.label = 2
+CAM_OPTIONS_CFG_MAX_FOLLOW_DIS_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_MAX_FOLLOW_DIS_FIELD.default_value = 0.0
+CAM_OPTIONS_CFG_MAX_FOLLOW_DIS_FIELD.type = 2
+CAM_OPTIONS_CFG_MAX_FOLLOW_DIS_FIELD.cpp_type = 6
+
+CAM_OPTIONS_CFG_MIN_FOLLOW_DIS_FIELD.name = "min_follow_dis"
+CAM_OPTIONS_CFG_MIN_FOLLOW_DIS_FIELD.full_name = ".ftcfg.cam_options_cfg.min_follow_dis"
+CAM_OPTIONS_CFG_MIN_FOLLOW_DIS_FIELD.number = 5
+CAM_OPTIONS_CFG_MIN_FOLLOW_DIS_FIELD.index = 4
+CAM_OPTIONS_CFG_MIN_FOLLOW_DIS_FIELD.label = 2
+CAM_OPTIONS_CFG_MIN_FOLLOW_DIS_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_MIN_FOLLOW_DIS_FIELD.default_value = 0.0
+CAM_OPTIONS_CFG_MIN_FOLLOW_DIS_FIELD.type = 2
+CAM_OPTIONS_CFG_MIN_FOLLOW_DIS_FIELD.cpp_type = 6
+
+CAM_OPTIONS_CFG_DEF_YAW_FIELD.name = "def_yaw"
+CAM_OPTIONS_CFG_DEF_YAW_FIELD.full_name = ".ftcfg.cam_options_cfg.def_yaw"
+CAM_OPTIONS_CFG_DEF_YAW_FIELD.number = 6
+CAM_OPTIONS_CFG_DEF_YAW_FIELD.index = 5
+CAM_OPTIONS_CFG_DEF_YAW_FIELD.label = 2
+CAM_OPTIONS_CFG_DEF_YAW_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_DEF_YAW_FIELD.default_value = 0.0
+CAM_OPTIONS_CFG_DEF_YAW_FIELD.type = 2
+CAM_OPTIONS_CFG_DEF_YAW_FIELD.cpp_type = 6
+
+CAM_OPTIONS_CFG_DEF_PITCH_FIELD.name = "def_pitch"
+CAM_OPTIONS_CFG_DEF_PITCH_FIELD.full_name = ".ftcfg.cam_options_cfg.def_pitch"
+CAM_OPTIONS_CFG_DEF_PITCH_FIELD.number = 7
+CAM_OPTIONS_CFG_DEF_PITCH_FIELD.index = 6
+CAM_OPTIONS_CFG_DEF_PITCH_FIELD.label = 2
+CAM_OPTIONS_CFG_DEF_PITCH_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_DEF_PITCH_FIELD.default_value = 0.0
+CAM_OPTIONS_CFG_DEF_PITCH_FIELD.type = 2
+CAM_OPTIONS_CFG_DEF_PITCH_FIELD.cpp_type = 6
+
+CAM_OPTIONS_CFG_FOLLOW_AUTO_ROT_YAW_SPEED_FIELD.name = "follow_auto_rot_yaw_speed"
+CAM_OPTIONS_CFG_FOLLOW_AUTO_ROT_YAW_SPEED_FIELD.full_name = ".ftcfg.cam_options_cfg.follow_auto_rot_yaw_speed"
+CAM_OPTIONS_CFG_FOLLOW_AUTO_ROT_YAW_SPEED_FIELD.number = 8
+CAM_OPTIONS_CFG_FOLLOW_AUTO_ROT_YAW_SPEED_FIELD.index = 7
+CAM_OPTIONS_CFG_FOLLOW_AUTO_ROT_YAW_SPEED_FIELD.label = 2
+CAM_OPTIONS_CFG_FOLLOW_AUTO_ROT_YAW_SPEED_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_FOLLOW_AUTO_ROT_YAW_SPEED_FIELD.default_value = 0.0
+CAM_OPTIONS_CFG_FOLLOW_AUTO_ROT_YAW_SPEED_FIELD.type = 2
+CAM_OPTIONS_CFG_FOLLOW_AUTO_ROT_YAW_SPEED_FIELD.cpp_type = 6
+
+CAM_OPTIONS_CFG_OFFSET_X_FIELD.name = "offset_x"
+CAM_OPTIONS_CFG_OFFSET_X_FIELD.full_name = ".ftcfg.cam_options_cfg.offset_x"
+CAM_OPTIONS_CFG_OFFSET_X_FIELD.number = 9
+CAM_OPTIONS_CFG_OFFSET_X_FIELD.index = 8
+CAM_OPTIONS_CFG_OFFSET_X_FIELD.label = 2
+CAM_OPTIONS_CFG_OFFSET_X_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_OFFSET_X_FIELD.default_value = 0.0
+CAM_OPTIONS_CFG_OFFSET_X_FIELD.type = 2
+CAM_OPTIONS_CFG_OFFSET_X_FIELD.cpp_type = 6
+
+CAM_OPTIONS_CFG_OFFSET_Y_FIELD.name = "offset_y"
+CAM_OPTIONS_CFG_OFFSET_Y_FIELD.full_name = ".ftcfg.cam_options_cfg.offset_y"
+CAM_OPTIONS_CFG_OFFSET_Y_FIELD.number = 10
+CAM_OPTIONS_CFG_OFFSET_Y_FIELD.index = 9
+CAM_OPTIONS_CFG_OFFSET_Y_FIELD.label = 2
+CAM_OPTIONS_CFG_OFFSET_Y_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_OFFSET_Y_FIELD.default_value = 0.0
+CAM_OPTIONS_CFG_OFFSET_Y_FIELD.type = 2
+CAM_OPTIONS_CFG_OFFSET_Y_FIELD.cpp_type = 6
+
+CAM_OPTIONS_CFG_OFFSET_Z_FIELD.name = "offset_z"
+CAM_OPTIONS_CFG_OFFSET_Z_FIELD.full_name = ".ftcfg.cam_options_cfg.offset_z"
+CAM_OPTIONS_CFG_OFFSET_Z_FIELD.number = 11
+CAM_OPTIONS_CFG_OFFSET_Z_FIELD.index = 10
+CAM_OPTIONS_CFG_OFFSET_Z_FIELD.label = 2
+CAM_OPTIONS_CFG_OFFSET_Z_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_OFFSET_Z_FIELD.default_value = 0.0
+CAM_OPTIONS_CFG_OFFSET_Z_FIELD.type = 2
+CAM_OPTIONS_CFG_OFFSET_Z_FIELD.cpp_type = 6
+
+CAM_OPTIONS_CFG_FOV_FIELD.name = "fov"
+CAM_OPTIONS_CFG_FOV_FIELD.full_name = ".ftcfg.cam_options_cfg.fov"
+CAM_OPTIONS_CFG_FOV_FIELD.number = 12
+CAM_OPTIONS_CFG_FOV_FIELD.index = 11
+CAM_OPTIONS_CFG_FOV_FIELD.label = 2
+CAM_OPTIONS_CFG_FOV_FIELD.has_default_value = false
+CAM_OPTIONS_CFG_FOV_FIELD.default_value = 0.0
+CAM_OPTIONS_CFG_FOV_FIELD.type = 2
+CAM_OPTIONS_CFG_FOV_FIELD.cpp_type = 6
+
+CAM_OPTIONS_CFG.name = "cam_options_cfg"
+CAM_OPTIONS_CFG.full_name = ".ftcfg.cam_options_cfg"
+CAM_OPTIONS_CFG.nested_types = {}
+CAM_OPTIONS_CFG.enum_types = {}
+CAM_OPTIONS_CFG.fields = {CAM_OPTIONS_CFG_ID_FIELD, CAM_OPTIONS_CFG_MIN_PITCH_FIELD, CAM_OPTIONS_CFG_MAX_PITCH_FIELD, CAM_OPTIONS_CFG_MAX_FOLLOW_DIS_FIELD, CAM_OPTIONS_CFG_MIN_FOLLOW_DIS_FIELD, CAM_OPTIONS_CFG_DEF_YAW_FIELD, CAM_OPTIONS_CFG_DEF_PITCH_FIELD, CAM_OPTIONS_CFG_FOLLOW_AUTO_ROT_YAW_SPEED_FIELD, CAM_OPTIONS_CFG_OFFSET_X_FIELD, CAM_OPTIONS_CFG_OFFSET_Y_FIELD, CAM_OPTIONS_CFG_OFFSET_Z_FIELD, CAM_OPTIONS_CFG_FOV_FIELD}
+CAM_OPTIONS_CFG.is_extendable = false
+CAM_OPTIONS_CFG.extensions = {}
+CAM_OPTIONS_CFGS_ITEMS_FIELD.name = "items"
+CAM_OPTIONS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.cam_options_cfgs.items"
+CAM_OPTIONS_CFGS_ITEMS_FIELD.number = 1
+CAM_OPTIONS_CFGS_ITEMS_FIELD.index = 0
+CAM_OPTIONS_CFGS_ITEMS_FIELD.label = 3
+CAM_OPTIONS_CFGS_ITEMS_FIELD.has_default_value = false
+CAM_OPTIONS_CFGS_ITEMS_FIELD.default_value = {}
+CAM_OPTIONS_CFGS_ITEMS_FIELD.message_type = CAM_OPTIONS_CFG
+CAM_OPTIONS_CFGS_ITEMS_FIELD.type = 11
+CAM_OPTIONS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CAM_OPTIONS_CFGS.name = "cam_options_cfgs"
+CAM_OPTIONS_CFGS.full_name = ".ftcfg.cam_options_cfgs"
+CAM_OPTIONS_CFGS.nested_types = {}
+CAM_OPTIONS_CFGS.enum_types = {}
+CAM_OPTIONS_CFGS.fields = {CAM_OPTIONS_CFGS_ITEMS_FIELD}
+CAM_OPTIONS_CFGS.is_extendable = false
+CAM_OPTIONS_CFGS.extensions = {}
+LEVEL_PACKAGE_CFG_ID_FIELD.name = "id"
+LEVEL_PACKAGE_CFG_ID_FIELD.full_name = ".ftcfg.level_package_cfg.id"
+LEVEL_PACKAGE_CFG_ID_FIELD.number = 1
+LEVEL_PACKAGE_CFG_ID_FIELD.index = 0
+LEVEL_PACKAGE_CFG_ID_FIELD.label = 2
+LEVEL_PACKAGE_CFG_ID_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_ID_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_ID_FIELD.type = 5
+LEVEL_PACKAGE_CFG_ID_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REACH_GRADE_FIELD.name = "reach_grade"
+LEVEL_PACKAGE_CFG_REACH_GRADE_FIELD.full_name = ".ftcfg.level_package_cfg.reach_grade"
+LEVEL_PACKAGE_CFG_REACH_GRADE_FIELD.number = 2
+LEVEL_PACKAGE_CFG_REACH_GRADE_FIELD.index = 1
+LEVEL_PACKAGE_CFG_REACH_GRADE_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REACH_GRADE_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REACH_GRADE_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REACH_GRADE_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REACH_GRADE_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_ITEM1_FIELD.name = "reward_item1"
+LEVEL_PACKAGE_CFG_REWARD_ITEM1_FIELD.full_name = ".ftcfg.level_package_cfg.reward_item1"
+LEVEL_PACKAGE_CFG_REWARD_ITEM1_FIELD.number = 3
+LEVEL_PACKAGE_CFG_REWARD_ITEM1_FIELD.index = 2
+LEVEL_PACKAGE_CFG_REWARD_ITEM1_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_ITEM1_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_ITEM1_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_ITEM1_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_ITEM1_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_NUMBER1_FIELD.name = "reward_number1"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER1_FIELD.full_name = ".ftcfg.level_package_cfg.reward_number1"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER1_FIELD.number = 4
+LEVEL_PACKAGE_CFG_REWARD_NUMBER1_FIELD.index = 3
+LEVEL_PACKAGE_CFG_REWARD_NUMBER1_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_NUMBER1_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_NUMBER1_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_NUMBER1_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_NUMBER1_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_ITEM2_FIELD.name = "reward_item2"
+LEVEL_PACKAGE_CFG_REWARD_ITEM2_FIELD.full_name = ".ftcfg.level_package_cfg.reward_item2"
+LEVEL_PACKAGE_CFG_REWARD_ITEM2_FIELD.number = 5
+LEVEL_PACKAGE_CFG_REWARD_ITEM2_FIELD.index = 4
+LEVEL_PACKAGE_CFG_REWARD_ITEM2_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_ITEM2_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_ITEM2_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_ITEM2_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_ITEM2_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_NUMBER2_FIELD.name = "reward_number2"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER2_FIELD.full_name = ".ftcfg.level_package_cfg.reward_number2"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER2_FIELD.number = 6
+LEVEL_PACKAGE_CFG_REWARD_NUMBER2_FIELD.index = 5
+LEVEL_PACKAGE_CFG_REWARD_NUMBER2_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_NUMBER2_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_NUMBER2_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_NUMBER2_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_NUMBER2_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_ITEM3_FIELD.name = "reward_item3"
+LEVEL_PACKAGE_CFG_REWARD_ITEM3_FIELD.full_name = ".ftcfg.level_package_cfg.reward_item3"
+LEVEL_PACKAGE_CFG_REWARD_ITEM3_FIELD.number = 7
+LEVEL_PACKAGE_CFG_REWARD_ITEM3_FIELD.index = 6
+LEVEL_PACKAGE_CFG_REWARD_ITEM3_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_ITEM3_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_ITEM3_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_ITEM3_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_ITEM3_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_NUMBER3_FIELD.name = "reward_number3"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER3_FIELD.full_name = ".ftcfg.level_package_cfg.reward_number3"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER3_FIELD.number = 8
+LEVEL_PACKAGE_CFG_REWARD_NUMBER3_FIELD.index = 7
+LEVEL_PACKAGE_CFG_REWARD_NUMBER3_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_NUMBER3_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_NUMBER3_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_NUMBER3_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_NUMBER3_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_ITEM4_FIELD.name = "reward_item4"
+LEVEL_PACKAGE_CFG_REWARD_ITEM4_FIELD.full_name = ".ftcfg.level_package_cfg.reward_item4"
+LEVEL_PACKAGE_CFG_REWARD_ITEM4_FIELD.number = 9
+LEVEL_PACKAGE_CFG_REWARD_ITEM4_FIELD.index = 8
+LEVEL_PACKAGE_CFG_REWARD_ITEM4_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_ITEM4_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_ITEM4_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_ITEM4_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_ITEM4_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_NUMBER4_FIELD.name = "reward_number4"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER4_FIELD.full_name = ".ftcfg.level_package_cfg.reward_number4"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER4_FIELD.number = 10
+LEVEL_PACKAGE_CFG_REWARD_NUMBER4_FIELD.index = 9
+LEVEL_PACKAGE_CFG_REWARD_NUMBER4_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_NUMBER4_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_NUMBER4_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_NUMBER4_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_NUMBER4_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_ITEM5_FIELD.name = "reward_item5"
+LEVEL_PACKAGE_CFG_REWARD_ITEM5_FIELD.full_name = ".ftcfg.level_package_cfg.reward_item5"
+LEVEL_PACKAGE_CFG_REWARD_ITEM5_FIELD.number = 11
+LEVEL_PACKAGE_CFG_REWARD_ITEM5_FIELD.index = 10
+LEVEL_PACKAGE_CFG_REWARD_ITEM5_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_ITEM5_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_ITEM5_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_ITEM5_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_ITEM5_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_NUMBER5_FIELD.name = "reward_number5"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER5_FIELD.full_name = ".ftcfg.level_package_cfg.reward_number5"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER5_FIELD.number = 12
+LEVEL_PACKAGE_CFG_REWARD_NUMBER5_FIELD.index = 11
+LEVEL_PACKAGE_CFG_REWARD_NUMBER5_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_NUMBER5_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_NUMBER5_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_NUMBER5_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_NUMBER5_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_ITEM6_FIELD.name = "reward_item6"
+LEVEL_PACKAGE_CFG_REWARD_ITEM6_FIELD.full_name = ".ftcfg.level_package_cfg.reward_item6"
+LEVEL_PACKAGE_CFG_REWARD_ITEM6_FIELD.number = 13
+LEVEL_PACKAGE_CFG_REWARD_ITEM6_FIELD.index = 12
+LEVEL_PACKAGE_CFG_REWARD_ITEM6_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_ITEM6_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_ITEM6_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_ITEM6_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_ITEM6_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG_REWARD_NUMBER6_FIELD.name = "reward_number6"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER6_FIELD.full_name = ".ftcfg.level_package_cfg.reward_number6"
+LEVEL_PACKAGE_CFG_REWARD_NUMBER6_FIELD.number = 14
+LEVEL_PACKAGE_CFG_REWARD_NUMBER6_FIELD.index = 13
+LEVEL_PACKAGE_CFG_REWARD_NUMBER6_FIELD.label = 2
+LEVEL_PACKAGE_CFG_REWARD_NUMBER6_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFG_REWARD_NUMBER6_FIELD.default_value = 0
+LEVEL_PACKAGE_CFG_REWARD_NUMBER6_FIELD.type = 5
+LEVEL_PACKAGE_CFG_REWARD_NUMBER6_FIELD.cpp_type = 1
+
+LEVEL_PACKAGE_CFG.name = "level_package_cfg"
+LEVEL_PACKAGE_CFG.full_name = ".ftcfg.level_package_cfg"
+LEVEL_PACKAGE_CFG.nested_types = {}
+LEVEL_PACKAGE_CFG.enum_types = {}
+LEVEL_PACKAGE_CFG.fields = {LEVEL_PACKAGE_CFG_ID_FIELD, LEVEL_PACKAGE_CFG_REACH_GRADE_FIELD, LEVEL_PACKAGE_CFG_REWARD_ITEM1_FIELD, LEVEL_PACKAGE_CFG_REWARD_NUMBER1_FIELD, LEVEL_PACKAGE_CFG_REWARD_ITEM2_FIELD, LEVEL_PACKAGE_CFG_REWARD_NUMBER2_FIELD, LEVEL_PACKAGE_CFG_REWARD_ITEM3_FIELD, LEVEL_PACKAGE_CFG_REWARD_NUMBER3_FIELD, LEVEL_PACKAGE_CFG_REWARD_ITEM4_FIELD, LEVEL_PACKAGE_CFG_REWARD_NUMBER4_FIELD, LEVEL_PACKAGE_CFG_REWARD_ITEM5_FIELD, LEVEL_PACKAGE_CFG_REWARD_NUMBER5_FIELD, LEVEL_PACKAGE_CFG_REWARD_ITEM6_FIELD, LEVEL_PACKAGE_CFG_REWARD_NUMBER6_FIELD}
+LEVEL_PACKAGE_CFG.is_extendable = false
+LEVEL_PACKAGE_CFG.extensions = {}
+LEVEL_PACKAGE_CFGS_ITEMS_FIELD.name = "items"
+LEVEL_PACKAGE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.level_package_cfgs.items"
+LEVEL_PACKAGE_CFGS_ITEMS_FIELD.number = 1
+LEVEL_PACKAGE_CFGS_ITEMS_FIELD.index = 0
+LEVEL_PACKAGE_CFGS_ITEMS_FIELD.label = 3
+LEVEL_PACKAGE_CFGS_ITEMS_FIELD.has_default_value = false
+LEVEL_PACKAGE_CFGS_ITEMS_FIELD.default_value = {}
+LEVEL_PACKAGE_CFGS_ITEMS_FIELD.message_type = LEVEL_PACKAGE_CFG
+LEVEL_PACKAGE_CFGS_ITEMS_FIELD.type = 11
+LEVEL_PACKAGE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+LEVEL_PACKAGE_CFGS.name = "level_package_cfgs"
+LEVEL_PACKAGE_CFGS.full_name = ".ftcfg.level_package_cfgs"
+LEVEL_PACKAGE_CFGS.nested_types = {}
+LEVEL_PACKAGE_CFGS.enum_types = {}
+LEVEL_PACKAGE_CFGS.fields = {LEVEL_PACKAGE_CFGS_ITEMS_FIELD}
+LEVEL_PACKAGE_CFGS.is_extendable = false
+LEVEL_PACKAGE_CFGS.extensions = {}
+BATTLE_CRYSTAL_INFO_CFG_ID_FIELD.name = "id"
+BATTLE_CRYSTAL_INFO_CFG_ID_FIELD.full_name = ".ftcfg.battle_crystal_info_cfg.id"
+BATTLE_CRYSTAL_INFO_CFG_ID_FIELD.number = 1
+BATTLE_CRYSTAL_INFO_CFG_ID_FIELD.index = 0
+BATTLE_CRYSTAL_INFO_CFG_ID_FIELD.label = 2
+BATTLE_CRYSTAL_INFO_CFG_ID_FIELD.has_default_value = false
+BATTLE_CRYSTAL_INFO_CFG_ID_FIELD.default_value = 0
+BATTLE_CRYSTAL_INFO_CFG_ID_FIELD.type = 5
+BATTLE_CRYSTAL_INFO_CFG_ID_FIELD.cpp_type = 1
+
+BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD.name = "activity_type"
+BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD.full_name = ".ftcfg.battle_crystal_info_cfg.activity_type"
+BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD.number = 2
+BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD.index = 1
+BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD.label = 2
+BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD.has_default_value = false
+BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD.default_value = nil
+BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD.enum_type = config_predefine_pb.EBATTLEACTIVITYTYPE
+BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD.type = 14
+BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD.cpp_type = 8
+
+BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD.name = "func_type"
+BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD.full_name = ".ftcfg.battle_crystal_info_cfg.func_type"
+BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD.number = 3
+BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD.index = 2
+BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD.label = 2
+BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD.has_default_value = false
+BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD.default_value = nil
+BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD.type = 14
+BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD.cpp_type = 8
+
+BATTLE_CRYSTAL_INFO_CFG_START_TIME_FIELD.name = "start_time"
+BATTLE_CRYSTAL_INFO_CFG_START_TIME_FIELD.full_name = ".ftcfg.battle_crystal_info_cfg.start_time"
+BATTLE_CRYSTAL_INFO_CFG_START_TIME_FIELD.number = 4
+BATTLE_CRYSTAL_INFO_CFG_START_TIME_FIELD.index = 3
+BATTLE_CRYSTAL_INFO_CFG_START_TIME_FIELD.label = 2
+BATTLE_CRYSTAL_INFO_CFG_START_TIME_FIELD.has_default_value = false
+BATTLE_CRYSTAL_INFO_CFG_START_TIME_FIELD.default_value = ""
+BATTLE_CRYSTAL_INFO_CFG_START_TIME_FIELD.type = 9
+BATTLE_CRYSTAL_INFO_CFG_START_TIME_FIELD.cpp_type = 9
+
+BATTLE_CRYSTAL_INFO_CFG_END_TIME_FIELD.name = "end_time"
+BATTLE_CRYSTAL_INFO_CFG_END_TIME_FIELD.full_name = ".ftcfg.battle_crystal_info_cfg.end_time"
+BATTLE_CRYSTAL_INFO_CFG_END_TIME_FIELD.number = 5
+BATTLE_CRYSTAL_INFO_CFG_END_TIME_FIELD.index = 4
+BATTLE_CRYSTAL_INFO_CFG_END_TIME_FIELD.label = 2
+BATTLE_CRYSTAL_INFO_CFG_END_TIME_FIELD.has_default_value = false
+BATTLE_CRYSTAL_INFO_CFG_END_TIME_FIELD.default_value = ""
+BATTLE_CRYSTAL_INFO_CFG_END_TIME_FIELD.type = 9
+BATTLE_CRYSTAL_INFO_CFG_END_TIME_FIELD.cpp_type = 9
+
+BATTLE_CRYSTAL_INFO_CFG_LEVEL_LIMIT_FIELD.name = "level_limit"
+BATTLE_CRYSTAL_INFO_CFG_LEVEL_LIMIT_FIELD.full_name = ".ftcfg.battle_crystal_info_cfg.level_limit"
+BATTLE_CRYSTAL_INFO_CFG_LEVEL_LIMIT_FIELD.number = 6
+BATTLE_CRYSTAL_INFO_CFG_LEVEL_LIMIT_FIELD.index = 5
+BATTLE_CRYSTAL_INFO_CFG_LEVEL_LIMIT_FIELD.label = 2
+BATTLE_CRYSTAL_INFO_CFG_LEVEL_LIMIT_FIELD.has_default_value = false
+BATTLE_CRYSTAL_INFO_CFG_LEVEL_LIMIT_FIELD.default_value = 0
+BATTLE_CRYSTAL_INFO_CFG_LEVEL_LIMIT_FIELD.type = 5
+BATTLE_CRYSTAL_INFO_CFG_LEVEL_LIMIT_FIELD.cpp_type = 1
+
+BATTLE_CRYSTAL_INFO_CFG_TIMES_FIELD.name = "times"
+BATTLE_CRYSTAL_INFO_CFG_TIMES_FIELD.full_name = ".ftcfg.battle_crystal_info_cfg.times"
+BATTLE_CRYSTAL_INFO_CFG_TIMES_FIELD.number = 7
+BATTLE_CRYSTAL_INFO_CFG_TIMES_FIELD.index = 6
+BATTLE_CRYSTAL_INFO_CFG_TIMES_FIELD.label = 2
+BATTLE_CRYSTAL_INFO_CFG_TIMES_FIELD.has_default_value = false
+BATTLE_CRYSTAL_INFO_CFG_TIMES_FIELD.default_value = 0
+BATTLE_CRYSTAL_INFO_CFG_TIMES_FIELD.type = 5
+BATTLE_CRYSTAL_INFO_CFG_TIMES_FIELD.cpp_type = 1
+
+BATTLE_CRYSTAL_INFO_CFG_WEEK_LOOP_FIELD.name = "week_loop"
+BATTLE_CRYSTAL_INFO_CFG_WEEK_LOOP_FIELD.full_name = ".ftcfg.battle_crystal_info_cfg.week_loop"
+BATTLE_CRYSTAL_INFO_CFG_WEEK_LOOP_FIELD.number = 8
+BATTLE_CRYSTAL_INFO_CFG_WEEK_LOOP_FIELD.index = 7
+BATTLE_CRYSTAL_INFO_CFG_WEEK_LOOP_FIELD.label = 2
+BATTLE_CRYSTAL_INFO_CFG_WEEK_LOOP_FIELD.has_default_value = false
+BATTLE_CRYSTAL_INFO_CFG_WEEK_LOOP_FIELD.default_value = 0
+BATTLE_CRYSTAL_INFO_CFG_WEEK_LOOP_FIELD.type = 5
+BATTLE_CRYSTAL_INFO_CFG_WEEK_LOOP_FIELD.cpp_type = 1
+
+BATTLE_CRYSTAL_INFO_CFG.name = "battle_crystal_info_cfg"
+BATTLE_CRYSTAL_INFO_CFG.full_name = ".ftcfg.battle_crystal_info_cfg"
+BATTLE_CRYSTAL_INFO_CFG.nested_types = {}
+BATTLE_CRYSTAL_INFO_CFG.enum_types = {}
+BATTLE_CRYSTAL_INFO_CFG.fields = {BATTLE_CRYSTAL_INFO_CFG_ID_FIELD, BATTLE_CRYSTAL_INFO_CFG_ACTIVITY_TYPE_FIELD, BATTLE_CRYSTAL_INFO_CFG_FUNC_TYPE_FIELD, BATTLE_CRYSTAL_INFO_CFG_START_TIME_FIELD, BATTLE_CRYSTAL_INFO_CFG_END_TIME_FIELD, BATTLE_CRYSTAL_INFO_CFG_LEVEL_LIMIT_FIELD, BATTLE_CRYSTAL_INFO_CFG_TIMES_FIELD, BATTLE_CRYSTAL_INFO_CFG_WEEK_LOOP_FIELD}
+BATTLE_CRYSTAL_INFO_CFG.is_extendable = false
+BATTLE_CRYSTAL_INFO_CFG.extensions = {}
+BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD.name = "items"
+BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD.full_name = ".ftcfg.battle_crystal_info_cfgs.items"
+BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD.number = 1
+BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD.index = 0
+BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD.label = 3
+BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD.has_default_value = false
+BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD.default_value = {}
+BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD.message_type = BATTLE_CRYSTAL_INFO_CFG
+BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD.type = 11
+BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BATTLE_CRYSTAL_INFO_CFGS.name = "battle_crystal_info_cfgs"
+BATTLE_CRYSTAL_INFO_CFGS.full_name = ".ftcfg.battle_crystal_info_cfgs"
+BATTLE_CRYSTAL_INFO_CFGS.nested_types = {}
+BATTLE_CRYSTAL_INFO_CFGS.enum_types = {}
+BATTLE_CRYSTAL_INFO_CFGS.fields = {BATTLE_CRYSTAL_INFO_CFGS_ITEMS_FIELD}
+BATTLE_CRYSTAL_INFO_CFGS.is_extendable = false
+BATTLE_CRYSTAL_INFO_CFGS.extensions = {}
+BATTLE_CRYSTAL_ROOMS_CFG_ID_FIELD.name = "id"
+BATTLE_CRYSTAL_ROOMS_CFG_ID_FIELD.full_name = ".ftcfg.battle_crystal_rooms_cfg.id"
+BATTLE_CRYSTAL_ROOMS_CFG_ID_FIELD.number = 1
+BATTLE_CRYSTAL_ROOMS_CFG_ID_FIELD.index = 0
+BATTLE_CRYSTAL_ROOMS_CFG_ID_FIELD.label = 2
+BATTLE_CRYSTAL_ROOMS_CFG_ID_FIELD.has_default_value = false
+BATTLE_CRYSTAL_ROOMS_CFG_ID_FIELD.default_value = 0
+BATTLE_CRYSTAL_ROOMS_CFG_ID_FIELD.type = 5
+BATTLE_CRYSTAL_ROOMS_CFG_ID_FIELD.cpp_type = 1
+
+BATTLE_CRYSTAL_ROOMS_CFG_RED_NUM_FIELD.name = "red_num"
+BATTLE_CRYSTAL_ROOMS_CFG_RED_NUM_FIELD.full_name = ".ftcfg.battle_crystal_rooms_cfg.red_num"
+BATTLE_CRYSTAL_ROOMS_CFG_RED_NUM_FIELD.number = 2
+BATTLE_CRYSTAL_ROOMS_CFG_RED_NUM_FIELD.index = 1
+BATTLE_CRYSTAL_ROOMS_CFG_RED_NUM_FIELD.label = 2
+BATTLE_CRYSTAL_ROOMS_CFG_RED_NUM_FIELD.has_default_value = false
+BATTLE_CRYSTAL_ROOMS_CFG_RED_NUM_FIELD.default_value = 0
+BATTLE_CRYSTAL_ROOMS_CFG_RED_NUM_FIELD.type = 5
+BATTLE_CRYSTAL_ROOMS_CFG_RED_NUM_FIELD.cpp_type = 1
+
+BATTLE_CRYSTAL_ROOMS_CFG_BLUE_NUM_FIELD.name = "blue_num"
+BATTLE_CRYSTAL_ROOMS_CFG_BLUE_NUM_FIELD.full_name = ".ftcfg.battle_crystal_rooms_cfg.blue_num"
+BATTLE_CRYSTAL_ROOMS_CFG_BLUE_NUM_FIELD.number = 3
+BATTLE_CRYSTAL_ROOMS_CFG_BLUE_NUM_FIELD.index = 2
+BATTLE_CRYSTAL_ROOMS_CFG_BLUE_NUM_FIELD.label = 2
+BATTLE_CRYSTAL_ROOMS_CFG_BLUE_NUM_FIELD.has_default_value = false
+BATTLE_CRYSTAL_ROOMS_CFG_BLUE_NUM_FIELD.default_value = 0
+BATTLE_CRYSTAL_ROOMS_CFG_BLUE_NUM_FIELD.type = 5
+BATTLE_CRYSTAL_ROOMS_CFG_BLUE_NUM_FIELD.cpp_type = 1
+
+BATTLE_CRYSTAL_ROOMS_CFG_MIN_LEVEL_FIELD.name = "min_level"
+BATTLE_CRYSTAL_ROOMS_CFG_MIN_LEVEL_FIELD.full_name = ".ftcfg.battle_crystal_rooms_cfg.min_level"
+BATTLE_CRYSTAL_ROOMS_CFG_MIN_LEVEL_FIELD.number = 4
+BATTLE_CRYSTAL_ROOMS_CFG_MIN_LEVEL_FIELD.index = 3
+BATTLE_CRYSTAL_ROOMS_CFG_MIN_LEVEL_FIELD.label = 2
+BATTLE_CRYSTAL_ROOMS_CFG_MIN_LEVEL_FIELD.has_default_value = false
+BATTLE_CRYSTAL_ROOMS_CFG_MIN_LEVEL_FIELD.default_value = 0
+BATTLE_CRYSTAL_ROOMS_CFG_MIN_LEVEL_FIELD.type = 5
+BATTLE_CRYSTAL_ROOMS_CFG_MIN_LEVEL_FIELD.cpp_type = 1
+
+BATTLE_CRYSTAL_ROOMS_CFG_MAX_LEVEL_FIELD.name = "max_level"
+BATTLE_CRYSTAL_ROOMS_CFG_MAX_LEVEL_FIELD.full_name = ".ftcfg.battle_crystal_rooms_cfg.max_level"
+BATTLE_CRYSTAL_ROOMS_CFG_MAX_LEVEL_FIELD.number = 5
+BATTLE_CRYSTAL_ROOMS_CFG_MAX_LEVEL_FIELD.index = 4
+BATTLE_CRYSTAL_ROOMS_CFG_MAX_LEVEL_FIELD.label = 2
+BATTLE_CRYSTAL_ROOMS_CFG_MAX_LEVEL_FIELD.has_default_value = false
+BATTLE_CRYSTAL_ROOMS_CFG_MAX_LEVEL_FIELD.default_value = 0
+BATTLE_CRYSTAL_ROOMS_CFG_MAX_LEVEL_FIELD.type = 5
+BATTLE_CRYSTAL_ROOMS_CFG_MAX_LEVEL_FIELD.cpp_type = 1
+
+BATTLE_CRYSTAL_ROOMS_CFG.name = "battle_crystal_rooms_cfg"
+BATTLE_CRYSTAL_ROOMS_CFG.full_name = ".ftcfg.battle_crystal_rooms_cfg"
+BATTLE_CRYSTAL_ROOMS_CFG.nested_types = {}
+BATTLE_CRYSTAL_ROOMS_CFG.enum_types = {}
+BATTLE_CRYSTAL_ROOMS_CFG.fields = {BATTLE_CRYSTAL_ROOMS_CFG_ID_FIELD, BATTLE_CRYSTAL_ROOMS_CFG_RED_NUM_FIELD, BATTLE_CRYSTAL_ROOMS_CFG_BLUE_NUM_FIELD, BATTLE_CRYSTAL_ROOMS_CFG_MIN_LEVEL_FIELD, BATTLE_CRYSTAL_ROOMS_CFG_MAX_LEVEL_FIELD}
+BATTLE_CRYSTAL_ROOMS_CFG.is_extendable = false
+BATTLE_CRYSTAL_ROOMS_CFG.extensions = {}
+BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD.name = "items"
+BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.battle_crystal_rooms_cfgs.items"
+BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD.number = 1
+BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD.index = 0
+BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD.label = 3
+BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD.has_default_value = false
+BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD.default_value = {}
+BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD.message_type = BATTLE_CRYSTAL_ROOMS_CFG
+BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD.type = 11
+BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BATTLE_CRYSTAL_ROOMS_CFGS.name = "battle_crystal_rooms_cfgs"
+BATTLE_CRYSTAL_ROOMS_CFGS.full_name = ".ftcfg.battle_crystal_rooms_cfgs"
+BATTLE_CRYSTAL_ROOMS_CFGS.nested_types = {}
+BATTLE_CRYSTAL_ROOMS_CFGS.enum_types = {}
+BATTLE_CRYSTAL_ROOMS_CFGS.fields = {BATTLE_CRYSTAL_ROOMS_CFGS_ITEMS_FIELD}
+BATTLE_CRYSTAL_ROOMS_CFGS.is_extendable = false
+BATTLE_CRYSTAL_ROOMS_CFGS.extensions = {}
+BATTLE_COLLECT_CRYSTAL_CFG_ID_FIELD.name = "id"
+BATTLE_COLLECT_CRYSTAL_CFG_ID_FIELD.full_name = ".ftcfg.battle_collect_crystal_cfg.id"
+BATTLE_COLLECT_CRYSTAL_CFG_ID_FIELD.number = 1
+BATTLE_COLLECT_CRYSTAL_CFG_ID_FIELD.index = 0
+BATTLE_COLLECT_CRYSTAL_CFG_ID_FIELD.label = 2
+BATTLE_COLLECT_CRYSTAL_CFG_ID_FIELD.has_default_value = false
+BATTLE_COLLECT_CRYSTAL_CFG_ID_FIELD.default_value = 0
+BATTLE_COLLECT_CRYSTAL_CFG_ID_FIELD.type = 5
+BATTLE_COLLECT_CRYSTAL_CFG_ID_FIELD.cpp_type = 1
+
+BATTLE_COLLECT_CRYSTAL_CFG_CRYSTAL_NUM_FIELD.name = "crystal_num"
+BATTLE_COLLECT_CRYSTAL_CFG_CRYSTAL_NUM_FIELD.full_name = ".ftcfg.battle_collect_crystal_cfg.crystal_num"
+BATTLE_COLLECT_CRYSTAL_CFG_CRYSTAL_NUM_FIELD.number = 2
+BATTLE_COLLECT_CRYSTAL_CFG_CRYSTAL_NUM_FIELD.index = 1
+BATTLE_COLLECT_CRYSTAL_CFG_CRYSTAL_NUM_FIELD.label = 2
+BATTLE_COLLECT_CRYSTAL_CFG_CRYSTAL_NUM_FIELD.has_default_value = false
+BATTLE_COLLECT_CRYSTAL_CFG_CRYSTAL_NUM_FIELD.default_value = 0
+BATTLE_COLLECT_CRYSTAL_CFG_CRYSTAL_NUM_FIELD.type = 5
+BATTLE_COLLECT_CRYSTAL_CFG_CRYSTAL_NUM_FIELD.cpp_type = 1
+
+BATTLE_COLLECT_CRYSTAL_CFG.name = "battle_collect_crystal_cfg"
+BATTLE_COLLECT_CRYSTAL_CFG.full_name = ".ftcfg.battle_collect_crystal_cfg"
+BATTLE_COLLECT_CRYSTAL_CFG.nested_types = {}
+BATTLE_COLLECT_CRYSTAL_CFG.enum_types = {}
+BATTLE_COLLECT_CRYSTAL_CFG.fields = {BATTLE_COLLECT_CRYSTAL_CFG_ID_FIELD, BATTLE_COLLECT_CRYSTAL_CFG_CRYSTAL_NUM_FIELD}
+BATTLE_COLLECT_CRYSTAL_CFG.is_extendable = false
+BATTLE_COLLECT_CRYSTAL_CFG.extensions = {}
+BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD.name = "items"
+BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD.full_name = ".ftcfg.battle_collect_crystal_cfgs.items"
+BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD.number = 1
+BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD.index = 0
+BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD.label = 3
+BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD.has_default_value = false
+BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD.default_value = {}
+BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD.message_type = BATTLE_COLLECT_CRYSTAL_CFG
+BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD.type = 11
+BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BATTLE_COLLECT_CRYSTAL_CFGS.name = "battle_collect_crystal_cfgs"
+BATTLE_COLLECT_CRYSTAL_CFGS.full_name = ".ftcfg.battle_collect_crystal_cfgs"
+BATTLE_COLLECT_CRYSTAL_CFGS.nested_types = {}
+BATTLE_COLLECT_CRYSTAL_CFGS.enum_types = {}
+BATTLE_COLLECT_CRYSTAL_CFGS.fields = {BATTLE_COLLECT_CRYSTAL_CFGS_ITEMS_FIELD}
+BATTLE_COLLECT_CRYSTAL_CFGS.is_extendable = false
+BATTLE_COLLECT_CRYSTAL_CFGS.extensions = {}
+ELITE_LEVEL_CFG_LEVEL_ID_FIELD.name = "level_id"
+ELITE_LEVEL_CFG_LEVEL_ID_FIELD.full_name = ".ftcfg.elite_level_cfg.level_id"
+ELITE_LEVEL_CFG_LEVEL_ID_FIELD.number = 1
+ELITE_LEVEL_CFG_LEVEL_ID_FIELD.index = 0
+ELITE_LEVEL_CFG_LEVEL_ID_FIELD.label = 2
+ELITE_LEVEL_CFG_LEVEL_ID_FIELD.has_default_value = false
+ELITE_LEVEL_CFG_LEVEL_ID_FIELD.default_value = 0
+ELITE_LEVEL_CFG_LEVEL_ID_FIELD.type = 5
+ELITE_LEVEL_CFG_LEVEL_ID_FIELD.cpp_type = 1
+
+ELITE_LEVEL_CFG_LEVEL_MIN_FIELD.name = "level_min"
+ELITE_LEVEL_CFG_LEVEL_MIN_FIELD.full_name = ".ftcfg.elite_level_cfg.level_min"
+ELITE_LEVEL_CFG_LEVEL_MIN_FIELD.number = 2
+ELITE_LEVEL_CFG_LEVEL_MIN_FIELD.index = 1
+ELITE_LEVEL_CFG_LEVEL_MIN_FIELD.label = 2
+ELITE_LEVEL_CFG_LEVEL_MIN_FIELD.has_default_value = false
+ELITE_LEVEL_CFG_LEVEL_MIN_FIELD.default_value = 0
+ELITE_LEVEL_CFG_LEVEL_MIN_FIELD.type = 5
+ELITE_LEVEL_CFG_LEVEL_MIN_FIELD.cpp_type = 1
+
+ELITE_LEVEL_CFG_LEVEL_MAX_FIELD.name = "level_max"
+ELITE_LEVEL_CFG_LEVEL_MAX_FIELD.full_name = ".ftcfg.elite_level_cfg.level_max"
+ELITE_LEVEL_CFG_LEVEL_MAX_FIELD.number = 3
+ELITE_LEVEL_CFG_LEVEL_MAX_FIELD.index = 2
+ELITE_LEVEL_CFG_LEVEL_MAX_FIELD.label = 2
+ELITE_LEVEL_CFG_LEVEL_MAX_FIELD.has_default_value = false
+ELITE_LEVEL_CFG_LEVEL_MAX_FIELD.default_value = 0
+ELITE_LEVEL_CFG_LEVEL_MAX_FIELD.type = 5
+ELITE_LEVEL_CFG_LEVEL_MAX_FIELD.cpp_type = 1
+
+ELITE_LEVEL_CFG_FIGHT_POWER1_FIELD.name = "fight_power1"
+ELITE_LEVEL_CFG_FIGHT_POWER1_FIELD.full_name = ".ftcfg.elite_level_cfg.fight_power1"
+ELITE_LEVEL_CFG_FIGHT_POWER1_FIELD.number = 4
+ELITE_LEVEL_CFG_FIGHT_POWER1_FIELD.index = 3
+ELITE_LEVEL_CFG_FIGHT_POWER1_FIELD.label = 2
+ELITE_LEVEL_CFG_FIGHT_POWER1_FIELD.has_default_value = false
+ELITE_LEVEL_CFG_FIGHT_POWER1_FIELD.default_value = 0
+ELITE_LEVEL_CFG_FIGHT_POWER1_FIELD.type = 5
+ELITE_LEVEL_CFG_FIGHT_POWER1_FIELD.cpp_type = 1
+
+ELITE_LEVEL_CFG_FIGHT_POWER2_FIELD.name = "fight_power2"
+ELITE_LEVEL_CFG_FIGHT_POWER2_FIELD.full_name = ".ftcfg.elite_level_cfg.fight_power2"
+ELITE_LEVEL_CFG_FIGHT_POWER2_FIELD.number = 5
+ELITE_LEVEL_CFG_FIGHT_POWER2_FIELD.index = 4
+ELITE_LEVEL_CFG_FIGHT_POWER2_FIELD.label = 2
+ELITE_LEVEL_CFG_FIGHT_POWER2_FIELD.has_default_value = false
+ELITE_LEVEL_CFG_FIGHT_POWER2_FIELD.default_value = 0
+ELITE_LEVEL_CFG_FIGHT_POWER2_FIELD.type = 5
+ELITE_LEVEL_CFG_FIGHT_POWER2_FIELD.cpp_type = 1
+
+ELITE_LEVEL_CFG.name = "elite_level_cfg"
+ELITE_LEVEL_CFG.full_name = ".ftcfg.elite_level_cfg"
+ELITE_LEVEL_CFG.nested_types = {}
+ELITE_LEVEL_CFG.enum_types = {}
+ELITE_LEVEL_CFG.fields = {ELITE_LEVEL_CFG_LEVEL_ID_FIELD, ELITE_LEVEL_CFG_LEVEL_MIN_FIELD, ELITE_LEVEL_CFG_LEVEL_MAX_FIELD, ELITE_LEVEL_CFG_FIGHT_POWER1_FIELD, ELITE_LEVEL_CFG_FIGHT_POWER2_FIELD}
+ELITE_LEVEL_CFG.is_extendable = false
+ELITE_LEVEL_CFG.extensions = {}
+ELITE_LEVEL_CFGS_ITEMS_FIELD.name = "items"
+ELITE_LEVEL_CFGS_ITEMS_FIELD.full_name = ".ftcfg.elite_level_cfgs.items"
+ELITE_LEVEL_CFGS_ITEMS_FIELD.number = 1
+ELITE_LEVEL_CFGS_ITEMS_FIELD.index = 0
+ELITE_LEVEL_CFGS_ITEMS_FIELD.label = 3
+ELITE_LEVEL_CFGS_ITEMS_FIELD.has_default_value = false
+ELITE_LEVEL_CFGS_ITEMS_FIELD.default_value = {}
+ELITE_LEVEL_CFGS_ITEMS_FIELD.message_type = ELITE_LEVEL_CFG
+ELITE_LEVEL_CFGS_ITEMS_FIELD.type = 11
+ELITE_LEVEL_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ELITE_LEVEL_CFGS.name = "elite_level_cfgs"
+ELITE_LEVEL_CFGS.full_name = ".ftcfg.elite_level_cfgs"
+ELITE_LEVEL_CFGS.nested_types = {}
+ELITE_LEVEL_CFGS.enum_types = {}
+ELITE_LEVEL_CFGS.fields = {ELITE_LEVEL_CFGS_ITEMS_FIELD}
+ELITE_LEVEL_CFGS.is_extendable = false
+ELITE_LEVEL_CFGS.extensions = {}
+ELITE_COMMON_INFO_CFG_LEVEL_ID_FIELD.name = "level_id"
+ELITE_COMMON_INFO_CFG_LEVEL_ID_FIELD.full_name = ".ftcfg.elite_common_info_cfg.level_id"
+ELITE_COMMON_INFO_CFG_LEVEL_ID_FIELD.number = 1
+ELITE_COMMON_INFO_CFG_LEVEL_ID_FIELD.index = 0
+ELITE_COMMON_INFO_CFG_LEVEL_ID_FIELD.label = 2
+ELITE_COMMON_INFO_CFG_LEVEL_ID_FIELD.has_default_value = false
+ELITE_COMMON_INFO_CFG_LEVEL_ID_FIELD.default_value = 0
+ELITE_COMMON_INFO_CFG_LEVEL_ID_FIELD.type = 5
+ELITE_COMMON_INFO_CFG_LEVEL_ID_FIELD.cpp_type = 1
+
+ELITE_COMMON_INFO_CFG_GAME_ID_FIELD.name = "game_id"
+ELITE_COMMON_INFO_CFG_GAME_ID_FIELD.full_name = ".ftcfg.elite_common_info_cfg.game_id"
+ELITE_COMMON_INFO_CFG_GAME_ID_FIELD.number = 2
+ELITE_COMMON_INFO_CFG_GAME_ID_FIELD.index = 1
+ELITE_COMMON_INFO_CFG_GAME_ID_FIELD.label = 2
+ELITE_COMMON_INFO_CFG_GAME_ID_FIELD.has_default_value = false
+ELITE_COMMON_INFO_CFG_GAME_ID_FIELD.default_value = 0
+ELITE_COMMON_INFO_CFG_GAME_ID_FIELD.type = 5
+ELITE_COMMON_INFO_CFG_GAME_ID_FIELD.cpp_type = 1
+
+ELITE_COMMON_INFO_CFG_MAP_ID_FIELD.name = "map_id"
+ELITE_COMMON_INFO_CFG_MAP_ID_FIELD.full_name = ".ftcfg.elite_common_info_cfg.map_id"
+ELITE_COMMON_INFO_CFG_MAP_ID_FIELD.number = 3
+ELITE_COMMON_INFO_CFG_MAP_ID_FIELD.index = 2
+ELITE_COMMON_INFO_CFG_MAP_ID_FIELD.label = 2
+ELITE_COMMON_INFO_CFG_MAP_ID_FIELD.has_default_value = false
+ELITE_COMMON_INFO_CFG_MAP_ID_FIELD.default_value = 0
+ELITE_COMMON_INFO_CFG_MAP_ID_FIELD.type = 5
+ELITE_COMMON_INFO_CFG_MAP_ID_FIELD.cpp_type = 1
+
+ELITE_COMMON_INFO_CFG_NODE_FIELD.name = "node"
+ELITE_COMMON_INFO_CFG_NODE_FIELD.full_name = ".ftcfg.elite_common_info_cfg.node"
+ELITE_COMMON_INFO_CFG_NODE_FIELD.number = 4
+ELITE_COMMON_INFO_CFG_NODE_FIELD.index = 3
+ELITE_COMMON_INFO_CFG_NODE_FIELD.label = 2
+ELITE_COMMON_INFO_CFG_NODE_FIELD.has_default_value = false
+ELITE_COMMON_INFO_CFG_NODE_FIELD.default_value = 0
+ELITE_COMMON_INFO_CFG_NODE_FIELD.type = 5
+ELITE_COMMON_INFO_CFG_NODE_FIELD.cpp_type = 1
+
+ELITE_COMMON_INFO_CFG_TIME_FIELD.name = "time"
+ELITE_COMMON_INFO_CFG_TIME_FIELD.full_name = ".ftcfg.elite_common_info_cfg.time"
+ELITE_COMMON_INFO_CFG_TIME_FIELD.number = 5
+ELITE_COMMON_INFO_CFG_TIME_FIELD.index = 4
+ELITE_COMMON_INFO_CFG_TIME_FIELD.label = 3
+ELITE_COMMON_INFO_CFG_TIME_FIELD.has_default_value = false
+ELITE_COMMON_INFO_CFG_TIME_FIELD.default_value = {}
+ELITE_COMMON_INFO_CFG_TIME_FIELD.type = 5
+ELITE_COMMON_INFO_CFG_TIME_FIELD.cpp_type = 1
+
+ELITE_COMMON_INFO_CFG_GRADE_FIELD.name = "grade"
+ELITE_COMMON_INFO_CFG_GRADE_FIELD.full_name = ".ftcfg.elite_common_info_cfg.grade"
+ELITE_COMMON_INFO_CFG_GRADE_FIELD.number = 6
+ELITE_COMMON_INFO_CFG_GRADE_FIELD.index = 5
+ELITE_COMMON_INFO_CFG_GRADE_FIELD.label = 3
+ELITE_COMMON_INFO_CFG_GRADE_FIELD.has_default_value = false
+ELITE_COMMON_INFO_CFG_GRADE_FIELD.default_value = {}
+ELITE_COMMON_INFO_CFG_GRADE_FIELD.type = 5
+ELITE_COMMON_INFO_CFG_GRADE_FIELD.cpp_type = 1
+
+ELITE_COMMON_INFO_CFG_REWARD_ID_FIELD.name = "reward_id"
+ELITE_COMMON_INFO_CFG_REWARD_ID_FIELD.full_name = ".ftcfg.elite_common_info_cfg.reward_id"
+ELITE_COMMON_INFO_CFG_REWARD_ID_FIELD.number = 7
+ELITE_COMMON_INFO_CFG_REWARD_ID_FIELD.index = 6
+ELITE_COMMON_INFO_CFG_REWARD_ID_FIELD.label = 3
+ELITE_COMMON_INFO_CFG_REWARD_ID_FIELD.has_default_value = false
+ELITE_COMMON_INFO_CFG_REWARD_ID_FIELD.default_value = {}
+ELITE_COMMON_INFO_CFG_REWARD_ID_FIELD.type = 5
+ELITE_COMMON_INFO_CFG_REWARD_ID_FIELD.cpp_type = 1
+
+ELITE_COMMON_INFO_CFG_MONSTER_LEVEL_FIELD.name = "monster_level"
+ELITE_COMMON_INFO_CFG_MONSTER_LEVEL_FIELD.full_name = ".ftcfg.elite_common_info_cfg.monster_level"
+ELITE_COMMON_INFO_CFG_MONSTER_LEVEL_FIELD.number = 8
+ELITE_COMMON_INFO_CFG_MONSTER_LEVEL_FIELD.index = 7
+ELITE_COMMON_INFO_CFG_MONSTER_LEVEL_FIELD.label = 2
+ELITE_COMMON_INFO_CFG_MONSTER_LEVEL_FIELD.has_default_value = false
+ELITE_COMMON_INFO_CFG_MONSTER_LEVEL_FIELD.default_value = 0
+ELITE_COMMON_INFO_CFG_MONSTER_LEVEL_FIELD.type = 5
+ELITE_COMMON_INFO_CFG_MONSTER_LEVEL_FIELD.cpp_type = 1
+
+ELITE_COMMON_INFO_CFG_CHECKPOINT_TIME_FIELD.name = "checkpoint_time"
+ELITE_COMMON_INFO_CFG_CHECKPOINT_TIME_FIELD.full_name = ".ftcfg.elite_common_info_cfg.checkpoint_time"
+ELITE_COMMON_INFO_CFG_CHECKPOINT_TIME_FIELD.number = 9
+ELITE_COMMON_INFO_CFG_CHECKPOINT_TIME_FIELD.index = 8
+ELITE_COMMON_INFO_CFG_CHECKPOINT_TIME_FIELD.label = 2
+ELITE_COMMON_INFO_CFG_CHECKPOINT_TIME_FIELD.has_default_value = false
+ELITE_COMMON_INFO_CFG_CHECKPOINT_TIME_FIELD.default_value = 0
+ELITE_COMMON_INFO_CFG_CHECKPOINT_TIME_FIELD.type = 5
+ELITE_COMMON_INFO_CFG_CHECKPOINT_TIME_FIELD.cpp_type = 1
+
+ELITE_COMMON_INFO_CFG_OPEN_TIME_FIELD.name = "open_time"
+ELITE_COMMON_INFO_CFG_OPEN_TIME_FIELD.full_name = ".ftcfg.elite_common_info_cfg.open_time"
+ELITE_COMMON_INFO_CFG_OPEN_TIME_FIELD.number = 10
+ELITE_COMMON_INFO_CFG_OPEN_TIME_FIELD.index = 9
+ELITE_COMMON_INFO_CFG_OPEN_TIME_FIELD.label = 2
+ELITE_COMMON_INFO_CFG_OPEN_TIME_FIELD.has_default_value = false
+ELITE_COMMON_INFO_CFG_OPEN_TIME_FIELD.default_value = 0
+ELITE_COMMON_INFO_CFG_OPEN_TIME_FIELD.type = 5
+ELITE_COMMON_INFO_CFG_OPEN_TIME_FIELD.cpp_type = 1
+
+ELITE_COMMON_INFO_CFG.name = "elite_common_info_cfg"
+ELITE_COMMON_INFO_CFG.full_name = ".ftcfg.elite_common_info_cfg"
+ELITE_COMMON_INFO_CFG.nested_types = {}
+ELITE_COMMON_INFO_CFG.enum_types = {}
+ELITE_COMMON_INFO_CFG.fields = {ELITE_COMMON_INFO_CFG_LEVEL_ID_FIELD, ELITE_COMMON_INFO_CFG_GAME_ID_FIELD, ELITE_COMMON_INFO_CFG_MAP_ID_FIELD, ELITE_COMMON_INFO_CFG_NODE_FIELD, ELITE_COMMON_INFO_CFG_TIME_FIELD, ELITE_COMMON_INFO_CFG_GRADE_FIELD, ELITE_COMMON_INFO_CFG_REWARD_ID_FIELD, ELITE_COMMON_INFO_CFG_MONSTER_LEVEL_FIELD, ELITE_COMMON_INFO_CFG_CHECKPOINT_TIME_FIELD, ELITE_COMMON_INFO_CFG_OPEN_TIME_FIELD}
+ELITE_COMMON_INFO_CFG.is_extendable = false
+ELITE_COMMON_INFO_CFG.extensions = {}
+ELITE_COMMON_INFO_CFGS_ITEMS_FIELD.name = "items"
+ELITE_COMMON_INFO_CFGS_ITEMS_FIELD.full_name = ".ftcfg.elite_common_info_cfgs.items"
+ELITE_COMMON_INFO_CFGS_ITEMS_FIELD.number = 1
+ELITE_COMMON_INFO_CFGS_ITEMS_FIELD.index = 0
+ELITE_COMMON_INFO_CFGS_ITEMS_FIELD.label = 3
+ELITE_COMMON_INFO_CFGS_ITEMS_FIELD.has_default_value = false
+ELITE_COMMON_INFO_CFGS_ITEMS_FIELD.default_value = {}
+ELITE_COMMON_INFO_CFGS_ITEMS_FIELD.message_type = ELITE_COMMON_INFO_CFG
+ELITE_COMMON_INFO_CFGS_ITEMS_FIELD.type = 11
+ELITE_COMMON_INFO_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ELITE_COMMON_INFO_CFGS.name = "elite_common_info_cfgs"
+ELITE_COMMON_INFO_CFGS.full_name = ".ftcfg.elite_common_info_cfgs"
+ELITE_COMMON_INFO_CFGS.nested_types = {}
+ELITE_COMMON_INFO_CFGS.enum_types = {}
+ELITE_COMMON_INFO_CFGS.fields = {ELITE_COMMON_INFO_CFGS_ITEMS_FIELD}
+ELITE_COMMON_INFO_CFGS.is_extendable = false
+ELITE_COMMON_INFO_CFGS.extensions = {}
+ELITE_HELL_INFO_CFG_LEVEL_ID_FIELD.name = "level_id"
+ELITE_HELL_INFO_CFG_LEVEL_ID_FIELD.full_name = ".ftcfg.elite_hell_info_cfg.level_id"
+ELITE_HELL_INFO_CFG_LEVEL_ID_FIELD.number = 1
+ELITE_HELL_INFO_CFG_LEVEL_ID_FIELD.index = 0
+ELITE_HELL_INFO_CFG_LEVEL_ID_FIELD.label = 2
+ELITE_HELL_INFO_CFG_LEVEL_ID_FIELD.has_default_value = false
+ELITE_HELL_INFO_CFG_LEVEL_ID_FIELD.default_value = 0
+ELITE_HELL_INFO_CFG_LEVEL_ID_FIELD.type = 5
+ELITE_HELL_INFO_CFG_LEVEL_ID_FIELD.cpp_type = 1
+
+ELITE_HELL_INFO_CFG_GAME_ID_FIELD.name = "game_id"
+ELITE_HELL_INFO_CFG_GAME_ID_FIELD.full_name = ".ftcfg.elite_hell_info_cfg.game_id"
+ELITE_HELL_INFO_CFG_GAME_ID_FIELD.number = 2
+ELITE_HELL_INFO_CFG_GAME_ID_FIELD.index = 1
+ELITE_HELL_INFO_CFG_GAME_ID_FIELD.label = 2
+ELITE_HELL_INFO_CFG_GAME_ID_FIELD.has_default_value = false
+ELITE_HELL_INFO_CFG_GAME_ID_FIELD.default_value = 0
+ELITE_HELL_INFO_CFG_GAME_ID_FIELD.type = 5
+ELITE_HELL_INFO_CFG_GAME_ID_FIELD.cpp_type = 1
+
+ELITE_HELL_INFO_CFG_MAP_ID_FIELD.name = "map_id"
+ELITE_HELL_INFO_CFG_MAP_ID_FIELD.full_name = ".ftcfg.elite_hell_info_cfg.map_id"
+ELITE_HELL_INFO_CFG_MAP_ID_FIELD.number = 3
+ELITE_HELL_INFO_CFG_MAP_ID_FIELD.index = 2
+ELITE_HELL_INFO_CFG_MAP_ID_FIELD.label = 2
+ELITE_HELL_INFO_CFG_MAP_ID_FIELD.has_default_value = false
+ELITE_HELL_INFO_CFG_MAP_ID_FIELD.default_value = 0
+ELITE_HELL_INFO_CFG_MAP_ID_FIELD.type = 5
+ELITE_HELL_INFO_CFG_MAP_ID_FIELD.cpp_type = 1
+
+ELITE_HELL_INFO_CFG_NODE_FIELD.name = "node"
+ELITE_HELL_INFO_CFG_NODE_FIELD.full_name = ".ftcfg.elite_hell_info_cfg.node"
+ELITE_HELL_INFO_CFG_NODE_FIELD.number = 4
+ELITE_HELL_INFO_CFG_NODE_FIELD.index = 3
+ELITE_HELL_INFO_CFG_NODE_FIELD.label = 2
+ELITE_HELL_INFO_CFG_NODE_FIELD.has_default_value = false
+ELITE_HELL_INFO_CFG_NODE_FIELD.default_value = 0
+ELITE_HELL_INFO_CFG_NODE_FIELD.type = 5
+ELITE_HELL_INFO_CFG_NODE_FIELD.cpp_type = 1
+
+ELITE_HELL_INFO_CFG_TIME_FIELD.name = "time"
+ELITE_HELL_INFO_CFG_TIME_FIELD.full_name = ".ftcfg.elite_hell_info_cfg.time"
+ELITE_HELL_INFO_CFG_TIME_FIELD.number = 5
+ELITE_HELL_INFO_CFG_TIME_FIELD.index = 4
+ELITE_HELL_INFO_CFG_TIME_FIELD.label = 3
+ELITE_HELL_INFO_CFG_TIME_FIELD.has_default_value = false
+ELITE_HELL_INFO_CFG_TIME_FIELD.default_value = {}
+ELITE_HELL_INFO_CFG_TIME_FIELD.type = 5
+ELITE_HELL_INFO_CFG_TIME_FIELD.cpp_type = 1
+
+ELITE_HELL_INFO_CFG_GRADE_FIELD.name = "grade"
+ELITE_HELL_INFO_CFG_GRADE_FIELD.full_name = ".ftcfg.elite_hell_info_cfg.grade"
+ELITE_HELL_INFO_CFG_GRADE_FIELD.number = 6
+ELITE_HELL_INFO_CFG_GRADE_FIELD.index = 5
+ELITE_HELL_INFO_CFG_GRADE_FIELD.label = 3
+ELITE_HELL_INFO_CFG_GRADE_FIELD.has_default_value = false
+ELITE_HELL_INFO_CFG_GRADE_FIELD.default_value = {}
+ELITE_HELL_INFO_CFG_GRADE_FIELD.type = 5
+ELITE_HELL_INFO_CFG_GRADE_FIELD.cpp_type = 1
+
+ELITE_HELL_INFO_CFG_REWARD_ID_FIELD.name = "reward_id"
+ELITE_HELL_INFO_CFG_REWARD_ID_FIELD.full_name = ".ftcfg.elite_hell_info_cfg.reward_id"
+ELITE_HELL_INFO_CFG_REWARD_ID_FIELD.number = 7
+ELITE_HELL_INFO_CFG_REWARD_ID_FIELD.index = 6
+ELITE_HELL_INFO_CFG_REWARD_ID_FIELD.label = 3
+ELITE_HELL_INFO_CFG_REWARD_ID_FIELD.has_default_value = false
+ELITE_HELL_INFO_CFG_REWARD_ID_FIELD.default_value = {}
+ELITE_HELL_INFO_CFG_REWARD_ID_FIELD.type = 5
+ELITE_HELL_INFO_CFG_REWARD_ID_FIELD.cpp_type = 1
+
+ELITE_HELL_INFO_CFG_MONSTER_LEVEL_FIELD.name = "monster_level"
+ELITE_HELL_INFO_CFG_MONSTER_LEVEL_FIELD.full_name = ".ftcfg.elite_hell_info_cfg.monster_level"
+ELITE_HELL_INFO_CFG_MONSTER_LEVEL_FIELD.number = 8
+ELITE_HELL_INFO_CFG_MONSTER_LEVEL_FIELD.index = 7
+ELITE_HELL_INFO_CFG_MONSTER_LEVEL_FIELD.label = 2
+ELITE_HELL_INFO_CFG_MONSTER_LEVEL_FIELD.has_default_value = false
+ELITE_HELL_INFO_CFG_MONSTER_LEVEL_FIELD.default_value = 0
+ELITE_HELL_INFO_CFG_MONSTER_LEVEL_FIELD.type = 5
+ELITE_HELL_INFO_CFG_MONSTER_LEVEL_FIELD.cpp_type = 1
+
+ELITE_HELL_INFO_CFG_CHECKPOINT_TIME_FIELD.name = "checkpoint_time"
+ELITE_HELL_INFO_CFG_CHECKPOINT_TIME_FIELD.full_name = ".ftcfg.elite_hell_info_cfg.checkpoint_time"
+ELITE_HELL_INFO_CFG_CHECKPOINT_TIME_FIELD.number = 9
+ELITE_HELL_INFO_CFG_CHECKPOINT_TIME_FIELD.index = 8
+ELITE_HELL_INFO_CFG_CHECKPOINT_TIME_FIELD.label = 2
+ELITE_HELL_INFO_CFG_CHECKPOINT_TIME_FIELD.has_default_value = false
+ELITE_HELL_INFO_CFG_CHECKPOINT_TIME_FIELD.default_value = 0
+ELITE_HELL_INFO_CFG_CHECKPOINT_TIME_FIELD.type = 5
+ELITE_HELL_INFO_CFG_CHECKPOINT_TIME_FIELD.cpp_type = 1
+
+ELITE_HELL_INFO_CFG_OPEN_TIME_FIELD.name = "open_time"
+ELITE_HELL_INFO_CFG_OPEN_TIME_FIELD.full_name = ".ftcfg.elite_hell_info_cfg.open_time"
+ELITE_HELL_INFO_CFG_OPEN_TIME_FIELD.number = 10
+ELITE_HELL_INFO_CFG_OPEN_TIME_FIELD.index = 9
+ELITE_HELL_INFO_CFG_OPEN_TIME_FIELD.label = 2
+ELITE_HELL_INFO_CFG_OPEN_TIME_FIELD.has_default_value = false
+ELITE_HELL_INFO_CFG_OPEN_TIME_FIELD.default_value = 0
+ELITE_HELL_INFO_CFG_OPEN_TIME_FIELD.type = 5
+ELITE_HELL_INFO_CFG_OPEN_TIME_FIELD.cpp_type = 1
+
+ELITE_HELL_INFO_CFG.name = "elite_hell_info_cfg"
+ELITE_HELL_INFO_CFG.full_name = ".ftcfg.elite_hell_info_cfg"
+ELITE_HELL_INFO_CFG.nested_types = {}
+ELITE_HELL_INFO_CFG.enum_types = {}
+ELITE_HELL_INFO_CFG.fields = {ELITE_HELL_INFO_CFG_LEVEL_ID_FIELD, ELITE_HELL_INFO_CFG_GAME_ID_FIELD, ELITE_HELL_INFO_CFG_MAP_ID_FIELD, ELITE_HELL_INFO_CFG_NODE_FIELD, ELITE_HELL_INFO_CFG_TIME_FIELD, ELITE_HELL_INFO_CFG_GRADE_FIELD, ELITE_HELL_INFO_CFG_REWARD_ID_FIELD, ELITE_HELL_INFO_CFG_MONSTER_LEVEL_FIELD, ELITE_HELL_INFO_CFG_CHECKPOINT_TIME_FIELD, ELITE_HELL_INFO_CFG_OPEN_TIME_FIELD}
+ELITE_HELL_INFO_CFG.is_extendable = false
+ELITE_HELL_INFO_CFG.extensions = {}
+ELITE_HELL_INFO_CFGS_ITEMS_FIELD.name = "items"
+ELITE_HELL_INFO_CFGS_ITEMS_FIELD.full_name = ".ftcfg.elite_hell_info_cfgs.items"
+ELITE_HELL_INFO_CFGS_ITEMS_FIELD.number = 1
+ELITE_HELL_INFO_CFGS_ITEMS_FIELD.index = 0
+ELITE_HELL_INFO_CFGS_ITEMS_FIELD.label = 3
+ELITE_HELL_INFO_CFGS_ITEMS_FIELD.has_default_value = false
+ELITE_HELL_INFO_CFGS_ITEMS_FIELD.default_value = {}
+ELITE_HELL_INFO_CFGS_ITEMS_FIELD.message_type = ELITE_HELL_INFO_CFG
+ELITE_HELL_INFO_CFGS_ITEMS_FIELD.type = 11
+ELITE_HELL_INFO_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ELITE_HELL_INFO_CFGS.name = "elite_hell_info_cfgs"
+ELITE_HELL_INFO_CFGS.full_name = ".ftcfg.elite_hell_info_cfgs"
+ELITE_HELL_INFO_CFGS.nested_types = {}
+ELITE_HELL_INFO_CFGS.enum_types = {}
+ELITE_HELL_INFO_CFGS.fields = {ELITE_HELL_INFO_CFGS_ITEMS_FIELD}
+ELITE_HELL_INFO_CFGS.is_extendable = false
+ELITE_HELL_INFO_CFGS.extensions = {}
+ELITE_REWARD_CFG_ID_FIELD.name = "id"
+ELITE_REWARD_CFG_ID_FIELD.full_name = ".ftcfg.elite_reward_cfg.id"
+ELITE_REWARD_CFG_ID_FIELD.number = 1
+ELITE_REWARD_CFG_ID_FIELD.index = 0
+ELITE_REWARD_CFG_ID_FIELD.label = 2
+ELITE_REWARD_CFG_ID_FIELD.has_default_value = false
+ELITE_REWARD_CFG_ID_FIELD.default_value = 0
+ELITE_REWARD_CFG_ID_FIELD.type = 5
+ELITE_REWARD_CFG_ID_FIELD.cpp_type = 1
+
+ELITE_REWARD_CFG_ITEM_ID_FIELD.name = "item_id"
+ELITE_REWARD_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.elite_reward_cfg.item_id"
+ELITE_REWARD_CFG_ITEM_ID_FIELD.number = 2
+ELITE_REWARD_CFG_ITEM_ID_FIELD.index = 1
+ELITE_REWARD_CFG_ITEM_ID_FIELD.label = 3
+ELITE_REWARD_CFG_ITEM_ID_FIELD.has_default_value = false
+ELITE_REWARD_CFG_ITEM_ID_FIELD.default_value = {}
+ELITE_REWARD_CFG_ITEM_ID_FIELD.type = 5
+ELITE_REWARD_CFG_ITEM_ID_FIELD.cpp_type = 1
+
+ELITE_REWARD_CFG_ITEM_COUNT_FIELD.name = "item_count"
+ELITE_REWARD_CFG_ITEM_COUNT_FIELD.full_name = ".ftcfg.elite_reward_cfg.item_count"
+ELITE_REWARD_CFG_ITEM_COUNT_FIELD.number = 3
+ELITE_REWARD_CFG_ITEM_COUNT_FIELD.index = 2
+ELITE_REWARD_CFG_ITEM_COUNT_FIELD.label = 3
+ELITE_REWARD_CFG_ITEM_COUNT_FIELD.has_default_value = false
+ELITE_REWARD_CFG_ITEM_COUNT_FIELD.default_value = {}
+ELITE_REWARD_CFG_ITEM_COUNT_FIELD.type = 5
+ELITE_REWARD_CFG_ITEM_COUNT_FIELD.cpp_type = 1
+
+ELITE_REWARD_CFG.name = "elite_reward_cfg"
+ELITE_REWARD_CFG.full_name = ".ftcfg.elite_reward_cfg"
+ELITE_REWARD_CFG.nested_types = {}
+ELITE_REWARD_CFG.enum_types = {}
+ELITE_REWARD_CFG.fields = {ELITE_REWARD_CFG_ID_FIELD, ELITE_REWARD_CFG_ITEM_ID_FIELD, ELITE_REWARD_CFG_ITEM_COUNT_FIELD}
+ELITE_REWARD_CFG.is_extendable = false
+ELITE_REWARD_CFG.extensions = {}
+ELITE_REWARD_CFGS_ITEMS_FIELD.name = "items"
+ELITE_REWARD_CFGS_ITEMS_FIELD.full_name = ".ftcfg.elite_reward_cfgs.items"
+ELITE_REWARD_CFGS_ITEMS_FIELD.number = 1
+ELITE_REWARD_CFGS_ITEMS_FIELD.index = 0
+ELITE_REWARD_CFGS_ITEMS_FIELD.label = 3
+ELITE_REWARD_CFGS_ITEMS_FIELD.has_default_value = false
+ELITE_REWARD_CFGS_ITEMS_FIELD.default_value = {}
+ELITE_REWARD_CFGS_ITEMS_FIELD.message_type = ELITE_REWARD_CFG
+ELITE_REWARD_CFGS_ITEMS_FIELD.type = 11
+ELITE_REWARD_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ELITE_REWARD_CFGS.name = "elite_reward_cfgs"
+ELITE_REWARD_CFGS.full_name = ".ftcfg.elite_reward_cfgs"
+ELITE_REWARD_CFGS.nested_types = {}
+ELITE_REWARD_CFGS.enum_types = {}
+ELITE_REWARD_CFGS.fields = {ELITE_REWARD_CFGS_ITEMS_FIELD}
+ELITE_REWARD_CFGS.is_extendable = false
+ELITE_REWARD_CFGS.extensions = {}
+SUBSYS_CFG_ID_FIELD.name = "id"
+SUBSYS_CFG_ID_FIELD.full_name = ".ftcfg.subsys_cfg.id"
+SUBSYS_CFG_ID_FIELD.number = 1
+SUBSYS_CFG_ID_FIELD.index = 0
+SUBSYS_CFG_ID_FIELD.label = 2
+SUBSYS_CFG_ID_FIELD.has_default_value = false
+SUBSYS_CFG_ID_FIELD.default_value = 0
+SUBSYS_CFG_ID_FIELD.type = 5
+SUBSYS_CFG_ID_FIELD.cpp_type = 1
+
+SUBSYS_CFG_NAME_FIELD.name = "name"
+SUBSYS_CFG_NAME_FIELD.full_name = ".ftcfg.subsys_cfg.name"
+SUBSYS_CFG_NAME_FIELD.number = 2
+SUBSYS_CFG_NAME_FIELD.index = 1
+SUBSYS_CFG_NAME_FIELD.label = 2
+SUBSYS_CFG_NAME_FIELD.has_default_value = false
+SUBSYS_CFG_NAME_FIELD.default_value = ""
+SUBSYS_CFG_NAME_FIELD.type = 9
+SUBSYS_CFG_NAME_FIELD.cpp_type = 9
+
+SUBSYS_CFG_TITLE_ID_FIELD.name = "title_id"
+SUBSYS_CFG_TITLE_ID_FIELD.full_name = ".ftcfg.subsys_cfg.title_id"
+SUBSYS_CFG_TITLE_ID_FIELD.number = 3
+SUBSYS_CFG_TITLE_ID_FIELD.index = 2
+SUBSYS_CFG_TITLE_ID_FIELD.label = 2
+SUBSYS_CFG_TITLE_ID_FIELD.has_default_value = false
+SUBSYS_CFG_TITLE_ID_FIELD.default_value = 0
+SUBSYS_CFG_TITLE_ID_FIELD.type = 5
+SUBSYS_CFG_TITLE_ID_FIELD.cpp_type = 1
+
+SUBSYS_CFG_DESC_ID_FIELD.name = "desc_id"
+SUBSYS_CFG_DESC_ID_FIELD.full_name = ".ftcfg.subsys_cfg.desc_id"
+SUBSYS_CFG_DESC_ID_FIELD.number = 4
+SUBSYS_CFG_DESC_ID_FIELD.index = 3
+SUBSYS_CFG_DESC_ID_FIELD.label = 2
+SUBSYS_CFG_DESC_ID_FIELD.has_default_value = false
+SUBSYS_CFG_DESC_ID_FIELD.default_value = 0
+SUBSYS_CFG_DESC_ID_FIELD.type = 5
+SUBSYS_CFG_DESC_ID_FIELD.cpp_type = 1
+
+SUBSYS_CFG_UI_STYLE_FIELD.name = "ui_style"
+SUBSYS_CFG_UI_STYLE_FIELD.full_name = ".ftcfg.subsys_cfg.ui_style"
+SUBSYS_CFG_UI_STYLE_FIELD.number = 5
+SUBSYS_CFG_UI_STYLE_FIELD.index = 4
+SUBSYS_CFG_UI_STYLE_FIELD.label = 2
+SUBSYS_CFG_UI_STYLE_FIELD.has_default_value = false
+SUBSYS_CFG_UI_STYLE_FIELD.default_value = 0
+SUBSYS_CFG_UI_STYLE_FIELD.type = 5
+SUBSYS_CFG_UI_STYLE_FIELD.cpp_type = 1
+
+SUBSYS_CFG_NOTES_FIELD.name = "notes"
+SUBSYS_CFG_NOTES_FIELD.full_name = ".ftcfg.subsys_cfg.notes"
+SUBSYS_CFG_NOTES_FIELD.number = 6
+SUBSYS_CFG_NOTES_FIELD.index = 5
+SUBSYS_CFG_NOTES_FIELD.label = 2
+SUBSYS_CFG_NOTES_FIELD.has_default_value = false
+SUBSYS_CFG_NOTES_FIELD.default_value = ""
+SUBSYS_CFG_NOTES_FIELD.type = 9
+SUBSYS_CFG_NOTES_FIELD.cpp_type = 9
+
+SUBSYS_CFG.name = "subsys_cfg"
+SUBSYS_CFG.full_name = ".ftcfg.subsys_cfg"
+SUBSYS_CFG.nested_types = {}
+SUBSYS_CFG.enum_types = {}
+SUBSYS_CFG.fields = {SUBSYS_CFG_ID_FIELD, SUBSYS_CFG_NAME_FIELD, SUBSYS_CFG_TITLE_ID_FIELD, SUBSYS_CFG_DESC_ID_FIELD, SUBSYS_CFG_UI_STYLE_FIELD, SUBSYS_CFG_NOTES_FIELD}
+SUBSYS_CFG.is_extendable = false
+SUBSYS_CFG.extensions = {}
+SUBSYS_CFGS_ITEMS_FIELD.name = "items"
+SUBSYS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.subsys_cfgs.items"
+SUBSYS_CFGS_ITEMS_FIELD.number = 1
+SUBSYS_CFGS_ITEMS_FIELD.index = 0
+SUBSYS_CFGS_ITEMS_FIELD.label = 3
+SUBSYS_CFGS_ITEMS_FIELD.has_default_value = false
+SUBSYS_CFGS_ITEMS_FIELD.default_value = {}
+SUBSYS_CFGS_ITEMS_FIELD.message_type = SUBSYS_CFG
+SUBSYS_CFGS_ITEMS_FIELD.type = 11
+SUBSYS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SUBSYS_CFGS.name = "subsys_cfgs"
+SUBSYS_CFGS.full_name = ".ftcfg.subsys_cfgs"
+SUBSYS_CFGS.nested_types = {}
+SUBSYS_CFGS.enum_types = {}
+SUBSYS_CFGS.fields = {SUBSYS_CFGS_ITEMS_FIELD}
+SUBSYS_CFGS.is_extendable = false
+SUBSYS_CFGS.extensions = {}
+BAG_ROUTINE_CFG_ID_FIELD.name = "id"
+BAG_ROUTINE_CFG_ID_FIELD.full_name = ".ftcfg.bag_routine_cfg.id"
+BAG_ROUTINE_CFG_ID_FIELD.number = 1
+BAG_ROUTINE_CFG_ID_FIELD.index = 0
+BAG_ROUTINE_CFG_ID_FIELD.label = 2
+BAG_ROUTINE_CFG_ID_FIELD.has_default_value = false
+BAG_ROUTINE_CFG_ID_FIELD.default_value = 0
+BAG_ROUTINE_CFG_ID_FIELD.type = 13
+BAG_ROUTINE_CFG_ID_FIELD.cpp_type = 3
+
+BAG_ROUTINE_CFG_BAG_TYPE_FIELD.name = "bag_type"
+BAG_ROUTINE_CFG_BAG_TYPE_FIELD.full_name = ".ftcfg.bag_routine_cfg.bag_type"
+BAG_ROUTINE_CFG_BAG_TYPE_FIELD.number = 2
+BAG_ROUTINE_CFG_BAG_TYPE_FIELD.index = 1
+BAG_ROUTINE_CFG_BAG_TYPE_FIELD.label = 2
+BAG_ROUTINE_CFG_BAG_TYPE_FIELD.has_default_value = false
+BAG_ROUTINE_CFG_BAG_TYPE_FIELD.default_value = 0
+BAG_ROUTINE_CFG_BAG_TYPE_FIELD.type = 13
+BAG_ROUTINE_CFG_BAG_TYPE_FIELD.cpp_type = 3
+
+BAG_ROUTINE_CFG_BAG_INITIAL_FIELD.name = "bag_initial"
+BAG_ROUTINE_CFG_BAG_INITIAL_FIELD.full_name = ".ftcfg.bag_routine_cfg.bag_initial"
+BAG_ROUTINE_CFG_BAG_INITIAL_FIELD.number = 3
+BAG_ROUTINE_CFG_BAG_INITIAL_FIELD.index = 2
+BAG_ROUTINE_CFG_BAG_INITIAL_FIELD.label = 2
+BAG_ROUTINE_CFG_BAG_INITIAL_FIELD.has_default_value = false
+BAG_ROUTINE_CFG_BAG_INITIAL_FIELD.default_value = 0
+BAG_ROUTINE_CFG_BAG_INITIAL_FIELD.type = 13
+BAG_ROUTINE_CFG_BAG_INITIAL_FIELD.cpp_type = 3
+
+BAG_ROUTINE_CFG_BAG_MAX_FIELD.name = "bag_max"
+BAG_ROUTINE_CFG_BAG_MAX_FIELD.full_name = ".ftcfg.bag_routine_cfg.bag_max"
+BAG_ROUTINE_CFG_BAG_MAX_FIELD.number = 4
+BAG_ROUTINE_CFG_BAG_MAX_FIELD.index = 3
+BAG_ROUTINE_CFG_BAG_MAX_FIELD.label = 2
+BAG_ROUTINE_CFG_BAG_MAX_FIELD.has_default_value = false
+BAG_ROUTINE_CFG_BAG_MAX_FIELD.default_value = 0
+BAG_ROUTINE_CFG_BAG_MAX_FIELD.type = 13
+BAG_ROUTINE_CFG_BAG_MAX_FIELD.cpp_type = 3
+
+BAG_ROUTINE_CFG_BAG_OPENLEVEL_FIELD.name = "bag_openlevel"
+BAG_ROUTINE_CFG_BAG_OPENLEVEL_FIELD.full_name = ".ftcfg.bag_routine_cfg.bag_openlevel"
+BAG_ROUTINE_CFG_BAG_OPENLEVEL_FIELD.number = 5
+BAG_ROUTINE_CFG_BAG_OPENLEVEL_FIELD.index = 4
+BAG_ROUTINE_CFG_BAG_OPENLEVEL_FIELD.label = 2
+BAG_ROUTINE_CFG_BAG_OPENLEVEL_FIELD.has_default_value = false
+BAG_ROUTINE_CFG_BAG_OPENLEVEL_FIELD.default_value = 0
+BAG_ROUTINE_CFG_BAG_OPENLEVEL_FIELD.type = 5
+BAG_ROUTINE_CFG_BAG_OPENLEVEL_FIELD.cpp_type = 1
+
+BAG_ROUTINE_CFG.name = "bag_routine_cfg"
+BAG_ROUTINE_CFG.full_name = ".ftcfg.bag_routine_cfg"
+BAG_ROUTINE_CFG.nested_types = {}
+BAG_ROUTINE_CFG.enum_types = {}
+BAG_ROUTINE_CFG.fields = {BAG_ROUTINE_CFG_ID_FIELD, BAG_ROUTINE_CFG_BAG_TYPE_FIELD, BAG_ROUTINE_CFG_BAG_INITIAL_FIELD, BAG_ROUTINE_CFG_BAG_MAX_FIELD, BAG_ROUTINE_CFG_BAG_OPENLEVEL_FIELD}
+BAG_ROUTINE_CFG.is_extendable = false
+BAG_ROUTINE_CFG.extensions = {}
+BAG_ROUTINE_CFGS_ITEMS_FIELD.name = "items"
+BAG_ROUTINE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.bag_routine_cfgs.items"
+BAG_ROUTINE_CFGS_ITEMS_FIELD.number = 1
+BAG_ROUTINE_CFGS_ITEMS_FIELD.index = 0
+BAG_ROUTINE_CFGS_ITEMS_FIELD.label = 3
+BAG_ROUTINE_CFGS_ITEMS_FIELD.has_default_value = false
+BAG_ROUTINE_CFGS_ITEMS_FIELD.default_value = {}
+BAG_ROUTINE_CFGS_ITEMS_FIELD.message_type = BAG_ROUTINE_CFG
+BAG_ROUTINE_CFGS_ITEMS_FIELD.type = 11
+BAG_ROUTINE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+BAG_ROUTINE_CFGS.name = "bag_routine_cfgs"
+BAG_ROUTINE_CFGS.full_name = ".ftcfg.bag_routine_cfgs"
+BAG_ROUTINE_CFGS.nested_types = {}
+BAG_ROUTINE_CFGS.enum_types = {}
+BAG_ROUTINE_CFGS.fields = {BAG_ROUTINE_CFGS_ITEMS_FIELD}
+BAG_ROUTINE_CFGS.is_extendable = false
+BAG_ROUTINE_CFGS.extensions = {}
+DEPOT_UNLOCK_CFG_UNLOCK_COUNT_FIELD.name = "unlock_count"
+DEPOT_UNLOCK_CFG_UNLOCK_COUNT_FIELD.full_name = ".ftcfg.depot_unlock_cfg.unlock_count"
+DEPOT_UNLOCK_CFG_UNLOCK_COUNT_FIELD.number = 1
+DEPOT_UNLOCK_CFG_UNLOCK_COUNT_FIELD.index = 0
+DEPOT_UNLOCK_CFG_UNLOCK_COUNT_FIELD.label = 2
+DEPOT_UNLOCK_CFG_UNLOCK_COUNT_FIELD.has_default_value = false
+DEPOT_UNLOCK_CFG_UNLOCK_COUNT_FIELD.default_value = 0
+DEPOT_UNLOCK_CFG_UNLOCK_COUNT_FIELD.type = 13
+DEPOT_UNLOCK_CFG_UNLOCK_COUNT_FIELD.cpp_type = 3
+
+DEPOT_UNLOCK_CFG_CURRENCY_TYPE_FIELD.name = "currency_type"
+DEPOT_UNLOCK_CFG_CURRENCY_TYPE_FIELD.full_name = ".ftcfg.depot_unlock_cfg.currency_type"
+DEPOT_UNLOCK_CFG_CURRENCY_TYPE_FIELD.number = 2
+DEPOT_UNLOCK_CFG_CURRENCY_TYPE_FIELD.index = 1
+DEPOT_UNLOCK_CFG_CURRENCY_TYPE_FIELD.label = 2
+DEPOT_UNLOCK_CFG_CURRENCY_TYPE_FIELD.has_default_value = false
+DEPOT_UNLOCK_CFG_CURRENCY_TYPE_FIELD.default_value = 0
+DEPOT_UNLOCK_CFG_CURRENCY_TYPE_FIELD.type = 13
+DEPOT_UNLOCK_CFG_CURRENCY_TYPE_FIELD.cpp_type = 3
+
+DEPOT_UNLOCK_CFG_CURRENCY_COUNT_FIELD.name = "currency_count"
+DEPOT_UNLOCK_CFG_CURRENCY_COUNT_FIELD.full_name = ".ftcfg.depot_unlock_cfg.currency_count"
+DEPOT_UNLOCK_CFG_CURRENCY_COUNT_FIELD.number = 3
+DEPOT_UNLOCK_CFG_CURRENCY_COUNT_FIELD.index = 2
+DEPOT_UNLOCK_CFG_CURRENCY_COUNT_FIELD.label = 2
+DEPOT_UNLOCK_CFG_CURRENCY_COUNT_FIELD.has_default_value = false
+DEPOT_UNLOCK_CFG_CURRENCY_COUNT_FIELD.default_value = 0
+DEPOT_UNLOCK_CFG_CURRENCY_COUNT_FIELD.type = 5
+DEPOT_UNLOCK_CFG_CURRENCY_COUNT_FIELD.cpp_type = 1
+
+DEPOT_UNLOCK_CFG.name = "depot_unlock_cfg"
+DEPOT_UNLOCK_CFG.full_name = ".ftcfg.depot_unlock_cfg"
+DEPOT_UNLOCK_CFG.nested_types = {}
+DEPOT_UNLOCK_CFG.enum_types = {}
+DEPOT_UNLOCK_CFG.fields = {DEPOT_UNLOCK_CFG_UNLOCK_COUNT_FIELD, DEPOT_UNLOCK_CFG_CURRENCY_TYPE_FIELD, DEPOT_UNLOCK_CFG_CURRENCY_COUNT_FIELD}
+DEPOT_UNLOCK_CFG.is_extendable = false
+DEPOT_UNLOCK_CFG.extensions = {}
+DEPOT_UNLOCK_CFGS_ITEMS_FIELD.name = "items"
+DEPOT_UNLOCK_CFGS_ITEMS_FIELD.full_name = ".ftcfg.depot_unlock_cfgs.items"
+DEPOT_UNLOCK_CFGS_ITEMS_FIELD.number = 1
+DEPOT_UNLOCK_CFGS_ITEMS_FIELD.index = 0
+DEPOT_UNLOCK_CFGS_ITEMS_FIELD.label = 3
+DEPOT_UNLOCK_CFGS_ITEMS_FIELD.has_default_value = false
+DEPOT_UNLOCK_CFGS_ITEMS_FIELD.default_value = {}
+DEPOT_UNLOCK_CFGS_ITEMS_FIELD.message_type = DEPOT_UNLOCK_CFG
+DEPOT_UNLOCK_CFGS_ITEMS_FIELD.type = 11
+DEPOT_UNLOCK_CFGS_ITEMS_FIELD.cpp_type = 10
+
+DEPOT_UNLOCK_CFGS.name = "depot_unlock_cfgs"
+DEPOT_UNLOCK_CFGS.full_name = ".ftcfg.depot_unlock_cfgs"
+DEPOT_UNLOCK_CFGS.nested_types = {}
+DEPOT_UNLOCK_CFGS.enum_types = {}
+DEPOT_UNLOCK_CFGS.fields = {DEPOT_UNLOCK_CFGS_ITEMS_FIELD}
+DEPOT_UNLOCK_CFGS.is_extendable = false
+DEPOT_UNLOCK_CFGS.extensions = {}
+ROLE_PARTS_CFG_ID_FIELD.name = "id"
+ROLE_PARTS_CFG_ID_FIELD.full_name = ".ftcfg.role_parts_cfg.id"
+ROLE_PARTS_CFG_ID_FIELD.number = 1
+ROLE_PARTS_CFG_ID_FIELD.index = 0
+ROLE_PARTS_CFG_ID_FIELD.label = 2
+ROLE_PARTS_CFG_ID_FIELD.has_default_value = false
+ROLE_PARTS_CFG_ID_FIELD.default_value = 0
+ROLE_PARTS_CFG_ID_FIELD.type = 5
+ROLE_PARTS_CFG_ID_FIELD.cpp_type = 1
+
+ROLE_PARTS_CFG_NAME_ID_FIELD.name = "name_id"
+ROLE_PARTS_CFG_NAME_ID_FIELD.full_name = ".ftcfg.role_parts_cfg.name_id"
+ROLE_PARTS_CFG_NAME_ID_FIELD.number = 2
+ROLE_PARTS_CFG_NAME_ID_FIELD.index = 1
+ROLE_PARTS_CFG_NAME_ID_FIELD.label = 2
+ROLE_PARTS_CFG_NAME_ID_FIELD.has_default_value = false
+ROLE_PARTS_CFG_NAME_ID_FIELD.default_value = 0
+ROLE_PARTS_CFG_NAME_ID_FIELD.type = 5
+ROLE_PARTS_CFG_NAME_ID_FIELD.cpp_type = 1
+
+ROLE_PARTS_CFG_SLOT_FIELD.name = "slot"
+ROLE_PARTS_CFG_SLOT_FIELD.full_name = ".ftcfg.role_parts_cfg.slot"
+ROLE_PARTS_CFG_SLOT_FIELD.number = 3
+ROLE_PARTS_CFG_SLOT_FIELD.index = 2
+ROLE_PARTS_CFG_SLOT_FIELD.label = 2
+ROLE_PARTS_CFG_SLOT_FIELD.has_default_value = false
+ROLE_PARTS_CFG_SLOT_FIELD.default_value = 0
+ROLE_PARTS_CFG_SLOT_FIELD.type = 5
+ROLE_PARTS_CFG_SLOT_FIELD.cpp_type = 1
+
+ROLE_PARTS_CFG_RES_ID_FIELD.name = "res_id"
+ROLE_PARTS_CFG_RES_ID_FIELD.full_name = ".ftcfg.role_parts_cfg.res_id"
+ROLE_PARTS_CFG_RES_ID_FIELD.number = 4
+ROLE_PARTS_CFG_RES_ID_FIELD.index = 3
+ROLE_PARTS_CFG_RES_ID_FIELD.label = 2
+ROLE_PARTS_CFG_RES_ID_FIELD.has_default_value = false
+ROLE_PARTS_CFG_RES_ID_FIELD.default_value = 0
+ROLE_PARTS_CFG_RES_ID_FIELD.type = 5
+ROLE_PARTS_CFG_RES_ID_FIELD.cpp_type = 1
+
+ROLE_PARTS_CFG.name = "role_parts_cfg"
+ROLE_PARTS_CFG.full_name = ".ftcfg.role_parts_cfg"
+ROLE_PARTS_CFG.nested_types = {}
+ROLE_PARTS_CFG.enum_types = {}
+ROLE_PARTS_CFG.fields = {ROLE_PARTS_CFG_ID_FIELD, ROLE_PARTS_CFG_NAME_ID_FIELD, ROLE_PARTS_CFG_SLOT_FIELD, ROLE_PARTS_CFG_RES_ID_FIELD}
+ROLE_PARTS_CFG.is_extendable = false
+ROLE_PARTS_CFG.extensions = {}
+ROLE_PARTS_CFGS_ITEMS_FIELD.name = "items"
+ROLE_PARTS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.role_parts_cfgs.items"
+ROLE_PARTS_CFGS_ITEMS_FIELD.number = 1
+ROLE_PARTS_CFGS_ITEMS_FIELD.index = 0
+ROLE_PARTS_CFGS_ITEMS_FIELD.label = 3
+ROLE_PARTS_CFGS_ITEMS_FIELD.has_default_value = false
+ROLE_PARTS_CFGS_ITEMS_FIELD.default_value = {}
+ROLE_PARTS_CFGS_ITEMS_FIELD.message_type = ROLE_PARTS_CFG
+ROLE_PARTS_CFGS_ITEMS_FIELD.type = 11
+ROLE_PARTS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ROLE_PARTS_CFGS.name = "role_parts_cfgs"
+ROLE_PARTS_CFGS.full_name = ".ftcfg.role_parts_cfgs"
+ROLE_PARTS_CFGS.nested_types = {}
+ROLE_PARTS_CFGS.enum_types = {}
+ROLE_PARTS_CFGS.fields = {ROLE_PARTS_CFGS_ITEMS_FIELD}
+ROLE_PARTS_CFGS.is_extendable = false
+ROLE_PARTS_CFGS.extensions = {}
+SUPPRESS_CFG_SCENE_ID_FIELD.name = "scene_id"
+SUPPRESS_CFG_SCENE_ID_FIELD.full_name = ".ftcfg.suppress_cfg.scene_id"
+SUPPRESS_CFG_SCENE_ID_FIELD.number = 1
+SUPPRESS_CFG_SCENE_ID_FIELD.index = 0
+SUPPRESS_CFG_SCENE_ID_FIELD.label = 2
+SUPPRESS_CFG_SCENE_ID_FIELD.has_default_value = false
+SUPPRESS_CFG_SCENE_ID_FIELD.default_value = 0
+SUPPRESS_CFG_SCENE_ID_FIELD.type = 5
+SUPPRESS_CFG_SCENE_ID_FIELD.cpp_type = 1
+
+SUPPRESS_CFG_FIT_LVL_FIELD.name = "fit_lvl"
+SUPPRESS_CFG_FIT_LVL_FIELD.full_name = ".ftcfg.suppress_cfg.fit_lvl"
+SUPPRESS_CFG_FIT_LVL_FIELD.number = 2
+SUPPRESS_CFG_FIT_LVL_FIELD.index = 1
+SUPPRESS_CFG_FIT_LVL_FIELD.label = 3
+SUPPRESS_CFG_FIT_LVL_FIELD.has_default_value = false
+SUPPRESS_CFG_FIT_LVL_FIELD.default_value = {}
+SUPPRESS_CFG_FIT_LVL_FIELD.type = 5
+SUPPRESS_CFG_FIT_LVL_FIELD.cpp_type = 1
+
+SUPPRESS_CFG_GROUP_COUNT_FIELD.name = "group_count"
+SUPPRESS_CFG_GROUP_COUNT_FIELD.full_name = ".ftcfg.suppress_cfg.group_count"
+SUPPRESS_CFG_GROUP_COUNT_FIELD.number = 3
+SUPPRESS_CFG_GROUP_COUNT_FIELD.index = 2
+SUPPRESS_CFG_GROUP_COUNT_FIELD.label = 3
+SUPPRESS_CFG_GROUP_COUNT_FIELD.has_default_value = false
+SUPPRESS_CFG_GROUP_COUNT_FIELD.default_value = {}
+SUPPRESS_CFG_GROUP_COUNT_FIELD.type = 5
+SUPPRESS_CFG_GROUP_COUNT_FIELD.cpp_type = 1
+
+SUPPRESS_CFG_KILL_BOS_CHEST_FIELD.name = "kill_bos_chest"
+SUPPRESS_CFG_KILL_BOS_CHEST_FIELD.full_name = ".ftcfg.suppress_cfg.kill_bos_chest"
+SUPPRESS_CFG_KILL_BOS_CHEST_FIELD.number = 4
+SUPPRESS_CFG_KILL_BOS_CHEST_FIELD.index = 3
+SUPPRESS_CFG_KILL_BOS_CHEST_FIELD.label = 3
+SUPPRESS_CFG_KILL_BOS_CHEST_FIELD.has_default_value = false
+SUPPRESS_CFG_KILL_BOS_CHEST_FIELD.default_value = {}
+SUPPRESS_CFG_KILL_BOS_CHEST_FIELD.type = 5
+SUPPRESS_CFG_KILL_BOS_CHEST_FIELD.cpp_type = 1
+
+SUPPRESS_CFG_BOSS_MAP_SIGNSID_FIELD.name = "boss_map_signsid"
+SUPPRESS_CFG_BOSS_MAP_SIGNSID_FIELD.full_name = ".ftcfg.suppress_cfg.boss_map_signsid"
+SUPPRESS_CFG_BOSS_MAP_SIGNSID_FIELD.number = 5
+SUPPRESS_CFG_BOSS_MAP_SIGNSID_FIELD.index = 4
+SUPPRESS_CFG_BOSS_MAP_SIGNSID_FIELD.label = 3
+SUPPRESS_CFG_BOSS_MAP_SIGNSID_FIELD.has_default_value = false
+SUPPRESS_CFG_BOSS_MAP_SIGNSID_FIELD.default_value = {}
+SUPPRESS_CFG_BOSS_MAP_SIGNSID_FIELD.type = 5
+SUPPRESS_CFG_BOSS_MAP_SIGNSID_FIELD.cpp_type = 1
+
+SUPPRESS_CFG.name = "suppress_cfg"
+SUPPRESS_CFG.full_name = ".ftcfg.suppress_cfg"
+SUPPRESS_CFG.nested_types = {}
+SUPPRESS_CFG.enum_types = {}
+SUPPRESS_CFG.fields = {SUPPRESS_CFG_SCENE_ID_FIELD, SUPPRESS_CFG_FIT_LVL_FIELD, SUPPRESS_CFG_GROUP_COUNT_FIELD, SUPPRESS_CFG_KILL_BOS_CHEST_FIELD, SUPPRESS_CFG_BOSS_MAP_SIGNSID_FIELD}
+SUPPRESS_CFG.is_extendable = false
+SUPPRESS_CFG.extensions = {}
+SUPPRESS_CFGS_ITEMS_FIELD.name = "items"
+SUPPRESS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.suppress_cfgs.items"
+SUPPRESS_CFGS_ITEMS_FIELD.number = 1
+SUPPRESS_CFGS_ITEMS_FIELD.index = 0
+SUPPRESS_CFGS_ITEMS_FIELD.label = 3
+SUPPRESS_CFGS_ITEMS_FIELD.has_default_value = false
+SUPPRESS_CFGS_ITEMS_FIELD.default_value = {}
+SUPPRESS_CFGS_ITEMS_FIELD.message_type = SUPPRESS_CFG
+SUPPRESS_CFGS_ITEMS_FIELD.type = 11
+SUPPRESS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SUPPRESS_CFGS.name = "suppress_cfgs"
+SUPPRESS_CFGS.full_name = ".ftcfg.suppress_cfgs"
+SUPPRESS_CFGS.nested_types = {}
+SUPPRESS_CFGS.enum_types = {}
+SUPPRESS_CFGS.fields = {SUPPRESS_CFGS_ITEMS_FIELD}
+SUPPRESS_CFGS.is_extendable = false
+SUPPRESS_CFGS.extensions = {}
+SUPPRESS_GROUP_CFG_SCENE_ID_FIELD.name = "scene_id"
+SUPPRESS_GROUP_CFG_SCENE_ID_FIELD.full_name = ".ftcfg.suppress_group_cfg.scene_id"
+SUPPRESS_GROUP_CFG_SCENE_ID_FIELD.number = 1
+SUPPRESS_GROUP_CFG_SCENE_ID_FIELD.index = 0
+SUPPRESS_GROUP_CFG_SCENE_ID_FIELD.label = 2
+SUPPRESS_GROUP_CFG_SCENE_ID_FIELD.has_default_value = false
+SUPPRESS_GROUP_CFG_SCENE_ID_FIELD.default_value = 0
+SUPPRESS_GROUP_CFG_SCENE_ID_FIELD.type = 5
+SUPPRESS_GROUP_CFG_SCENE_ID_FIELD.cpp_type = 1
+
+SUPPRESS_GROUP_CFG_REFRESH_NUM_FIELD.name = "refresh_num"
+SUPPRESS_GROUP_CFG_REFRESH_NUM_FIELD.full_name = ".ftcfg.suppress_group_cfg.refresh_num"
+SUPPRESS_GROUP_CFG_REFRESH_NUM_FIELD.number = 2
+SUPPRESS_GROUP_CFG_REFRESH_NUM_FIELD.index = 1
+SUPPRESS_GROUP_CFG_REFRESH_NUM_FIELD.label = 2
+SUPPRESS_GROUP_CFG_REFRESH_NUM_FIELD.has_default_value = false
+SUPPRESS_GROUP_CFG_REFRESH_NUM_FIELD.default_value = 0
+SUPPRESS_GROUP_CFG_REFRESH_NUM_FIELD.type = 5
+SUPPRESS_GROUP_CFG_REFRESH_NUM_FIELD.cpp_type = 1
+
+SUPPRESS_GROUP_CFG_MONSTER_MAP_SIGNSID_FIELD.name = "monster_map_signsid"
+SUPPRESS_GROUP_CFG_MONSTER_MAP_SIGNSID_FIELD.full_name = ".ftcfg.suppress_group_cfg.monster_map_signsid"
+SUPPRESS_GROUP_CFG_MONSTER_MAP_SIGNSID_FIELD.number = 3
+SUPPRESS_GROUP_CFG_MONSTER_MAP_SIGNSID_FIELD.index = 2
+SUPPRESS_GROUP_CFG_MONSTER_MAP_SIGNSID_FIELD.label = 3
+SUPPRESS_GROUP_CFG_MONSTER_MAP_SIGNSID_FIELD.has_default_value = false
+SUPPRESS_GROUP_CFG_MONSTER_MAP_SIGNSID_FIELD.default_value = {}
+SUPPRESS_GROUP_CFG_MONSTER_MAP_SIGNSID_FIELD.type = 5
+SUPPRESS_GROUP_CFG_MONSTER_MAP_SIGNSID_FIELD.cpp_type = 1
+
+SUPPRESS_GROUP_CFG.name = "suppress_group_cfg"
+SUPPRESS_GROUP_CFG.full_name = ".ftcfg.suppress_group_cfg"
+SUPPRESS_GROUP_CFG.nested_types = {}
+SUPPRESS_GROUP_CFG.enum_types = {}
+SUPPRESS_GROUP_CFG.fields = {SUPPRESS_GROUP_CFG_SCENE_ID_FIELD, SUPPRESS_GROUP_CFG_REFRESH_NUM_FIELD, SUPPRESS_GROUP_CFG_MONSTER_MAP_SIGNSID_FIELD}
+SUPPRESS_GROUP_CFG.is_extendable = false
+SUPPRESS_GROUP_CFG.extensions = {}
+SUPPRESS_GROUP_CFGS_ITEMS_FIELD.name = "items"
+SUPPRESS_GROUP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.suppress_group_cfgs.items"
+SUPPRESS_GROUP_CFGS_ITEMS_FIELD.number = 1
+SUPPRESS_GROUP_CFGS_ITEMS_FIELD.index = 0
+SUPPRESS_GROUP_CFGS_ITEMS_FIELD.label = 3
+SUPPRESS_GROUP_CFGS_ITEMS_FIELD.has_default_value = false
+SUPPRESS_GROUP_CFGS_ITEMS_FIELD.default_value = {}
+SUPPRESS_GROUP_CFGS_ITEMS_FIELD.message_type = SUPPRESS_GROUP_CFG
+SUPPRESS_GROUP_CFGS_ITEMS_FIELD.type = 11
+SUPPRESS_GROUP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SUPPRESS_GROUP_CFGS.name = "suppress_group_cfgs"
+SUPPRESS_GROUP_CFGS.full_name = ".ftcfg.suppress_group_cfgs"
+SUPPRESS_GROUP_CFGS.nested_types = {}
+SUPPRESS_GROUP_CFGS.enum_types = {}
+SUPPRESS_GROUP_CFGS.fields = {SUPPRESS_GROUP_CFGS_ITEMS_FIELD}
+SUPPRESS_GROUP_CFGS.is_extendable = false
+SUPPRESS_GROUP_CFGS.extensions = {}
+UI_CONTRIBUTION_CFG_ID_FIELD.name = "id"
+UI_CONTRIBUTION_CFG_ID_FIELD.full_name = ".ftcfg.ui_contribution_cfg.id"
+UI_CONTRIBUTION_CFG_ID_FIELD.number = 1
+UI_CONTRIBUTION_CFG_ID_FIELD.index = 0
+UI_CONTRIBUTION_CFG_ID_FIELD.label = 2
+UI_CONTRIBUTION_CFG_ID_FIELD.has_default_value = false
+UI_CONTRIBUTION_CFG_ID_FIELD.default_value = 0
+UI_CONTRIBUTION_CFG_ID_FIELD.type = 5
+UI_CONTRIBUTION_CFG_ID_FIELD.cpp_type = 1
+
+UI_CONTRIBUTION_CFG_TITLEID_FIELD.name = "titleid"
+UI_CONTRIBUTION_CFG_TITLEID_FIELD.full_name = ".ftcfg.ui_contribution_cfg.titleid"
+UI_CONTRIBUTION_CFG_TITLEID_FIELD.number = 2
+UI_CONTRIBUTION_CFG_TITLEID_FIELD.index = 1
+UI_CONTRIBUTION_CFG_TITLEID_FIELD.label = 2
+UI_CONTRIBUTION_CFG_TITLEID_FIELD.has_default_value = false
+UI_CONTRIBUTION_CFG_TITLEID_FIELD.default_value = 0
+UI_CONTRIBUTION_CFG_TITLEID_FIELD.type = 5
+UI_CONTRIBUTION_CFG_TITLEID_FIELD.cpp_type = 1
+
+UI_CONTRIBUTION_CFG_TYPE_FIELD.name = "type"
+UI_CONTRIBUTION_CFG_TYPE_FIELD.full_name = ".ftcfg.ui_contribution_cfg.type"
+UI_CONTRIBUTION_CFG_TYPE_FIELD.number = 3
+UI_CONTRIBUTION_CFG_TYPE_FIELD.index = 2
+UI_CONTRIBUTION_CFG_TYPE_FIELD.label = 2
+UI_CONTRIBUTION_CFG_TYPE_FIELD.has_default_value = false
+UI_CONTRIBUTION_CFG_TYPE_FIELD.default_value = 0
+UI_CONTRIBUTION_CFG_TYPE_FIELD.type = 5
+UI_CONTRIBUTION_CFG_TYPE_FIELD.cpp_type = 1
+
+UI_CONTRIBUTION_CFG_IMAGEID_FIELD.name = "imageid"
+UI_CONTRIBUTION_CFG_IMAGEID_FIELD.full_name = ".ftcfg.ui_contribution_cfg.imageid"
+UI_CONTRIBUTION_CFG_IMAGEID_FIELD.number = 4
+UI_CONTRIBUTION_CFG_IMAGEID_FIELD.index = 3
+UI_CONTRIBUTION_CFG_IMAGEID_FIELD.label = 2
+UI_CONTRIBUTION_CFG_IMAGEID_FIELD.has_default_value = false
+UI_CONTRIBUTION_CFG_IMAGEID_FIELD.default_value = 0
+UI_CONTRIBUTION_CFG_IMAGEID_FIELD.type = 5
+UI_CONTRIBUTION_CFG_IMAGEID_FIELD.cpp_type = 1
+
+UI_CONTRIBUTION_CFG_SUBTITLE_1ID_FIELD.name = "subtitle_1id"
+UI_CONTRIBUTION_CFG_SUBTITLE_1ID_FIELD.full_name = ".ftcfg.ui_contribution_cfg.subtitle_1id"
+UI_CONTRIBUTION_CFG_SUBTITLE_1ID_FIELD.number = 5
+UI_CONTRIBUTION_CFG_SUBTITLE_1ID_FIELD.index = 4
+UI_CONTRIBUTION_CFG_SUBTITLE_1ID_FIELD.label = 2
+UI_CONTRIBUTION_CFG_SUBTITLE_1ID_FIELD.has_default_value = false
+UI_CONTRIBUTION_CFG_SUBTITLE_1ID_FIELD.default_value = 0
+UI_CONTRIBUTION_CFG_SUBTITLE_1ID_FIELD.type = 5
+UI_CONTRIBUTION_CFG_SUBTITLE_1ID_FIELD.cpp_type = 1
+
+UI_CONTRIBUTION_CFG_SUBTITLE_2ID_FIELD.name = "subtitle_2id"
+UI_CONTRIBUTION_CFG_SUBTITLE_2ID_FIELD.full_name = ".ftcfg.ui_contribution_cfg.subtitle_2id"
+UI_CONTRIBUTION_CFG_SUBTITLE_2ID_FIELD.number = 6
+UI_CONTRIBUTION_CFG_SUBTITLE_2ID_FIELD.index = 5
+UI_CONTRIBUTION_CFG_SUBTITLE_2ID_FIELD.label = 2
+UI_CONTRIBUTION_CFG_SUBTITLE_2ID_FIELD.has_default_value = false
+UI_CONTRIBUTION_CFG_SUBTITLE_2ID_FIELD.default_value = 0
+UI_CONTRIBUTION_CFG_SUBTITLE_2ID_FIELD.type = 5
+UI_CONTRIBUTION_CFG_SUBTITLE_2ID_FIELD.cpp_type = 1
+
+UI_CONTRIBUTION_CFG_ATLASID_FIELD.name = "atlasid"
+UI_CONTRIBUTION_CFG_ATLASID_FIELD.full_name = ".ftcfg.ui_contribution_cfg.atlasid"
+UI_CONTRIBUTION_CFG_ATLASID_FIELD.number = 7
+UI_CONTRIBUTION_CFG_ATLASID_FIELD.index = 6
+UI_CONTRIBUTION_CFG_ATLASID_FIELD.label = 2
+UI_CONTRIBUTION_CFG_ATLASID_FIELD.has_default_value = false
+UI_CONTRIBUTION_CFG_ATLASID_FIELD.default_value = 0
+UI_CONTRIBUTION_CFG_ATLASID_FIELD.type = 5
+UI_CONTRIBUTION_CFG_ATLASID_FIELD.cpp_type = 1
+
+UI_CONTRIBUTION_CFG_ICONNAME_FIELD.name = "iconname"
+UI_CONTRIBUTION_CFG_ICONNAME_FIELD.full_name = ".ftcfg.ui_contribution_cfg.iconname"
+UI_CONTRIBUTION_CFG_ICONNAME_FIELD.number = 8
+UI_CONTRIBUTION_CFG_ICONNAME_FIELD.index = 7
+UI_CONTRIBUTION_CFG_ICONNAME_FIELD.label = 2
+UI_CONTRIBUTION_CFG_ICONNAME_FIELD.has_default_value = false
+UI_CONTRIBUTION_CFG_ICONNAME_FIELD.default_value = ""
+UI_CONTRIBUTION_CFG_ICONNAME_FIELD.type = 9
+UI_CONTRIBUTION_CFG_ICONNAME_FIELD.cpp_type = 9
+
+UI_CONTRIBUTION_CFG_BTNTEXTID_FIELD.name = "btntextid"
+UI_CONTRIBUTION_CFG_BTNTEXTID_FIELD.full_name = ".ftcfg.ui_contribution_cfg.btntextid"
+UI_CONTRIBUTION_CFG_BTNTEXTID_FIELD.number = 9
+UI_CONTRIBUTION_CFG_BTNTEXTID_FIELD.index = 8
+UI_CONTRIBUTION_CFG_BTNTEXTID_FIELD.label = 2
+UI_CONTRIBUTION_CFG_BTNTEXTID_FIELD.has_default_value = false
+UI_CONTRIBUTION_CFG_BTNTEXTID_FIELD.default_value = 0
+UI_CONTRIBUTION_CFG_BTNTEXTID_FIELD.type = 5
+UI_CONTRIBUTION_CFG_BTNTEXTID_FIELD.cpp_type = 1
+
+UI_CONTRIBUTION_CFG_TIPSID_FIELD.name = "tipsid"
+UI_CONTRIBUTION_CFG_TIPSID_FIELD.full_name = ".ftcfg.ui_contribution_cfg.tipsid"
+UI_CONTRIBUTION_CFG_TIPSID_FIELD.number = 10
+UI_CONTRIBUTION_CFG_TIPSID_FIELD.index = 9
+UI_CONTRIBUTION_CFG_TIPSID_FIELD.label = 2
+UI_CONTRIBUTION_CFG_TIPSID_FIELD.has_default_value = false
+UI_CONTRIBUTION_CFG_TIPSID_FIELD.default_value = 0
+UI_CONTRIBUTION_CFG_TIPSID_FIELD.type = 5
+UI_CONTRIBUTION_CFG_TIPSID_FIELD.cpp_type = 1
+
+UI_CONTRIBUTION_CFG.name = "ui_contribution_cfg"
+UI_CONTRIBUTION_CFG.full_name = ".ftcfg.ui_contribution_cfg"
+UI_CONTRIBUTION_CFG.nested_types = {}
+UI_CONTRIBUTION_CFG.enum_types = {}
+UI_CONTRIBUTION_CFG.fields = {UI_CONTRIBUTION_CFG_ID_FIELD, UI_CONTRIBUTION_CFG_TITLEID_FIELD, UI_CONTRIBUTION_CFG_TYPE_FIELD, UI_CONTRIBUTION_CFG_IMAGEID_FIELD, UI_CONTRIBUTION_CFG_SUBTITLE_1ID_FIELD, UI_CONTRIBUTION_CFG_SUBTITLE_2ID_FIELD, UI_CONTRIBUTION_CFG_ATLASID_FIELD, UI_CONTRIBUTION_CFG_ICONNAME_FIELD, UI_CONTRIBUTION_CFG_BTNTEXTID_FIELD, UI_CONTRIBUTION_CFG_TIPSID_FIELD}
+UI_CONTRIBUTION_CFG.is_extendable = false
+UI_CONTRIBUTION_CFG.extensions = {}
+UI_CONTRIBUTION_CFGS_ITEMS_FIELD.name = "items"
+UI_CONTRIBUTION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.ui_contribution_cfgs.items"
+UI_CONTRIBUTION_CFGS_ITEMS_FIELD.number = 1
+UI_CONTRIBUTION_CFGS_ITEMS_FIELD.index = 0
+UI_CONTRIBUTION_CFGS_ITEMS_FIELD.label = 3
+UI_CONTRIBUTION_CFGS_ITEMS_FIELD.has_default_value = false
+UI_CONTRIBUTION_CFGS_ITEMS_FIELD.default_value = {}
+UI_CONTRIBUTION_CFGS_ITEMS_FIELD.message_type = UI_CONTRIBUTION_CFG
+UI_CONTRIBUTION_CFGS_ITEMS_FIELD.type = 11
+UI_CONTRIBUTION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+UI_CONTRIBUTION_CFGS.name = "ui_contribution_cfgs"
+UI_CONTRIBUTION_CFGS.full_name = ".ftcfg.ui_contribution_cfgs"
+UI_CONTRIBUTION_CFGS.nested_types = {}
+UI_CONTRIBUTION_CFGS.enum_types = {}
+UI_CONTRIBUTION_CFGS.fields = {UI_CONTRIBUTION_CFGS_ITEMS_FIELD}
+UI_CONTRIBUTION_CFGS.is_extendable = false
+UI_CONTRIBUTION_CFGS.extensions = {}
+ACTIVITY_DUNGEON_CFG_ID_FIELD.name = "id"
+ACTIVITY_DUNGEON_CFG_ID_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.id"
+ACTIVITY_DUNGEON_CFG_ID_FIELD.number = 1
+ACTIVITY_DUNGEON_CFG_ID_FIELD.index = 0
+ACTIVITY_DUNGEON_CFG_ID_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_ID_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_ID_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_ID_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_ID_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_RESOUCE_NAME_FIELD.name = "resouce_name"
+ACTIVITY_DUNGEON_CFG_RESOUCE_NAME_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.resouce_name"
+ACTIVITY_DUNGEON_CFG_RESOUCE_NAME_FIELD.number = 2
+ACTIVITY_DUNGEON_CFG_RESOUCE_NAME_FIELD.index = 1
+ACTIVITY_DUNGEON_CFG_RESOUCE_NAME_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_RESOUCE_NAME_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_RESOUCE_NAME_FIELD.default_value = ""
+ACTIVITY_DUNGEON_CFG_RESOUCE_NAME_FIELD.type = 9
+ACTIVITY_DUNGEON_CFG_RESOUCE_NAME_FIELD.cpp_type = 9
+
+ACTIVITY_DUNGEON_CFG_TYPE_FIELD.name = "type"
+ACTIVITY_DUNGEON_CFG_TYPE_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.type"
+ACTIVITY_DUNGEON_CFG_TYPE_FIELD.number = 3
+ACTIVITY_DUNGEON_CFG_TYPE_FIELD.index = 2
+ACTIVITY_DUNGEON_CFG_TYPE_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_TYPE_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_TYPE_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_TYPE_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_TYPE_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_LEVEL_LIMIT_FIELD.name = "level_limit"
+ACTIVITY_DUNGEON_CFG_LEVEL_LIMIT_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.level_limit"
+ACTIVITY_DUNGEON_CFG_LEVEL_LIMIT_FIELD.number = 4
+ACTIVITY_DUNGEON_CFG_LEVEL_LIMIT_FIELD.index = 3
+ACTIVITY_DUNGEON_CFG_LEVEL_LIMIT_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_LEVEL_LIMIT_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_LEVEL_LIMIT_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_LEVEL_LIMIT_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_LEVEL_LIMIT_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_MAP_ID_FIELD.name = "map_id"
+ACTIVITY_DUNGEON_CFG_MAP_ID_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.map_id"
+ACTIVITY_DUNGEON_CFG_MAP_ID_FIELD.number = 5
+ACTIVITY_DUNGEON_CFG_MAP_ID_FIELD.index = 4
+ACTIVITY_DUNGEON_CFG_MAP_ID_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_MAP_ID_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_MAP_ID_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_MAP_ID_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_MAP_ID_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_MAP_NAME_FIELD.name = "map_name"
+ACTIVITY_DUNGEON_CFG_MAP_NAME_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.map_name"
+ACTIVITY_DUNGEON_CFG_MAP_NAME_FIELD.number = 6
+ACTIVITY_DUNGEON_CFG_MAP_NAME_FIELD.index = 5
+ACTIVITY_DUNGEON_CFG_MAP_NAME_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_MAP_NAME_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_MAP_NAME_FIELD.default_value = ""
+ACTIVITY_DUNGEON_CFG_MAP_NAME_FIELD.type = 9
+ACTIVITY_DUNGEON_CFG_MAP_NAME_FIELD.cpp_type = 9
+
+ACTIVITY_DUNGEON_CFG_MAP_IMGID_FIELD.name = "map_imgid"
+ACTIVITY_DUNGEON_CFG_MAP_IMGID_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.map_imgid"
+ACTIVITY_DUNGEON_CFG_MAP_IMGID_FIELD.number = 7
+ACTIVITY_DUNGEON_CFG_MAP_IMGID_FIELD.index = 6
+ACTIVITY_DUNGEON_CFG_MAP_IMGID_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_MAP_IMGID_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_MAP_IMGID_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_MAP_IMGID_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_MAP_IMGID_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_RECOMMEND_FIGHTVALUE_FIELD.name = "recommend_fightvalue"
+ACTIVITY_DUNGEON_CFG_RECOMMEND_FIGHTVALUE_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.recommend_fightvalue"
+ACTIVITY_DUNGEON_CFG_RECOMMEND_FIGHTVALUE_FIELD.number = 8
+ACTIVITY_DUNGEON_CFG_RECOMMEND_FIGHTVALUE_FIELD.index = 7
+ACTIVITY_DUNGEON_CFG_RECOMMEND_FIGHTVALUE_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_RECOMMEND_FIGHTVALUE_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_RECOMMEND_FIGHTVALUE_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_RECOMMEND_FIGHTVALUE_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_RECOMMEND_FIGHTVALUE_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_LOW_FIGHTVALUE_FIELD.name = "low_fightvalue"
+ACTIVITY_DUNGEON_CFG_LOW_FIGHTVALUE_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.low_fightvalue"
+ACTIVITY_DUNGEON_CFG_LOW_FIGHTVALUE_FIELD.number = 9
+ACTIVITY_DUNGEON_CFG_LOW_FIGHTVALUE_FIELD.index = 8
+ACTIVITY_DUNGEON_CFG_LOW_FIGHTVALUE_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_LOW_FIGHTVALUE_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_LOW_FIGHTVALUE_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_LOW_FIGHTVALUE_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_LOW_FIGHTVALUE_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_ADVANCED_ITEM_FIELD.name = "advanced_item"
+ACTIVITY_DUNGEON_CFG_ADVANCED_ITEM_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.advanced_item"
+ACTIVITY_DUNGEON_CFG_ADVANCED_ITEM_FIELD.number = 10
+ACTIVITY_DUNGEON_CFG_ADVANCED_ITEM_FIELD.index = 9
+ACTIVITY_DUNGEON_CFG_ADVANCED_ITEM_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_ADVANCED_ITEM_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_ADVANCED_ITEM_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_ADVANCED_ITEM_FIELD.type = 13
+ACTIVITY_DUNGEON_CFG_ADVANCED_ITEM_FIELD.cpp_type = 3
+
+ACTIVITY_DUNGEON_CFG_NORMAL_ITEM_FIELD.name = "normal_item"
+ACTIVITY_DUNGEON_CFG_NORMAL_ITEM_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.normal_item"
+ACTIVITY_DUNGEON_CFG_NORMAL_ITEM_FIELD.number = 11
+ACTIVITY_DUNGEON_CFG_NORMAL_ITEM_FIELD.index = 10
+ACTIVITY_DUNGEON_CFG_NORMAL_ITEM_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_NORMAL_ITEM_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_NORMAL_ITEM_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_NORMAL_ITEM_FIELD.type = 13
+ACTIVITY_DUNGEON_CFG_NORMAL_ITEM_FIELD.cpp_type = 3
+
+ACTIVITY_DUNGEON_CFG_TIMES_FIELD.name = "times"
+ACTIVITY_DUNGEON_CFG_TIMES_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.times"
+ACTIVITY_DUNGEON_CFG_TIMES_FIELD.number = 12
+ACTIVITY_DUNGEON_CFG_TIMES_FIELD.index = 11
+ACTIVITY_DUNGEON_CFG_TIMES_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_TIMES_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_TIMES_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_TIMES_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_TIMES_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_ISONLYCAPTAIN_FIELD.name = "isonlycaptain"
+ACTIVITY_DUNGEON_CFG_ISONLYCAPTAIN_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.isonlycaptain"
+ACTIVITY_DUNGEON_CFG_ISONLYCAPTAIN_FIELD.number = 13
+ACTIVITY_DUNGEON_CFG_ISONLYCAPTAIN_FIELD.index = 12
+ACTIVITY_DUNGEON_CFG_ISONLYCAPTAIN_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_ISONLYCAPTAIN_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_ISONLYCAPTAIN_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_ISONLYCAPTAIN_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_ISONLYCAPTAIN_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_WAIT_TIME_FIELD.name = "wait_time"
+ACTIVITY_DUNGEON_CFG_WAIT_TIME_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.wait_time"
+ACTIVITY_DUNGEON_CFG_WAIT_TIME_FIELD.number = 14
+ACTIVITY_DUNGEON_CFG_WAIT_TIME_FIELD.index = 13
+ACTIVITY_DUNGEON_CFG_WAIT_TIME_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_WAIT_TIME_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_WAIT_TIME_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_WAIT_TIME_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_WAIT_TIME_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_ALONEREWARDS_FIELD.name = "alonerewards"
+ACTIVITY_DUNGEON_CFG_ALONEREWARDS_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.alonerewards"
+ACTIVITY_DUNGEON_CFG_ALONEREWARDS_FIELD.number = 15
+ACTIVITY_DUNGEON_CFG_ALONEREWARDS_FIELD.index = 14
+ACTIVITY_DUNGEON_CFG_ALONEREWARDS_FIELD.label = 3
+ACTIVITY_DUNGEON_CFG_ALONEREWARDS_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_ALONEREWARDS_FIELD.default_value = {}
+ACTIVITY_DUNGEON_CFG_ALONEREWARDS_FIELD.type = 13
+ACTIVITY_DUNGEON_CFG_ALONEREWARDS_FIELD.cpp_type = 3
+
+ACTIVITY_DUNGEON_CFG_TEAMREWARDS_FIELD.name = "teamrewards"
+ACTIVITY_DUNGEON_CFG_TEAMREWARDS_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.teamrewards"
+ACTIVITY_DUNGEON_CFG_TEAMREWARDS_FIELD.number = 16
+ACTIVITY_DUNGEON_CFG_TEAMREWARDS_FIELD.index = 15
+ACTIVITY_DUNGEON_CFG_TEAMREWARDS_FIELD.label = 3
+ACTIVITY_DUNGEON_CFG_TEAMREWARDS_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_TEAMREWARDS_FIELD.default_value = {}
+ACTIVITY_DUNGEON_CFG_TEAMREWARDS_FIELD.type = 13
+ACTIVITY_DUNGEON_CFG_TEAMREWARDS_FIELD.cpp_type = 3
+
+ACTIVITY_DUNGEON_CFG_MAX_TIMER_FIELD.name = "max_timer"
+ACTIVITY_DUNGEON_CFG_MAX_TIMER_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.max_timer"
+ACTIVITY_DUNGEON_CFG_MAX_TIMER_FIELD.number = 17
+ACTIVITY_DUNGEON_CFG_MAX_TIMER_FIELD.index = 16
+ACTIVITY_DUNGEON_CFG_MAX_TIMER_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_MAX_TIMER_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_MAX_TIMER_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_MAX_TIMER_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_MAX_TIMER_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_MAX_WAVE_FIELD.name = "max_wave"
+ACTIVITY_DUNGEON_CFG_MAX_WAVE_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.max_wave"
+ACTIVITY_DUNGEON_CFG_MAX_WAVE_FIELD.number = 18
+ACTIVITY_DUNGEON_CFG_MAX_WAVE_FIELD.index = 17
+ACTIVITY_DUNGEON_CFG_MAX_WAVE_FIELD.label = 2
+ACTIVITY_DUNGEON_CFG_MAX_WAVE_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_MAX_WAVE_FIELD.default_value = 0
+ACTIVITY_DUNGEON_CFG_MAX_WAVE_FIELD.type = 5
+ACTIVITY_DUNGEON_CFG_MAX_WAVE_FIELD.cpp_type = 1
+
+ACTIVITY_DUNGEON_CFG_MONEY_POSX_FIELD.name = "money_posx"
+ACTIVITY_DUNGEON_CFG_MONEY_POSX_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.money_posx"
+ACTIVITY_DUNGEON_CFG_MONEY_POSX_FIELD.number = 19
+ACTIVITY_DUNGEON_CFG_MONEY_POSX_FIELD.index = 18
+ACTIVITY_DUNGEON_CFG_MONEY_POSX_FIELD.label = 3
+ACTIVITY_DUNGEON_CFG_MONEY_POSX_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_MONEY_POSX_FIELD.default_value = {}
+ACTIVITY_DUNGEON_CFG_MONEY_POSX_FIELD.type = 2
+ACTIVITY_DUNGEON_CFG_MONEY_POSX_FIELD.cpp_type = 6
+
+ACTIVITY_DUNGEON_CFG_MONEY_POSY_FIELD.name = "money_posy"
+ACTIVITY_DUNGEON_CFG_MONEY_POSY_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.money_posy"
+ACTIVITY_DUNGEON_CFG_MONEY_POSY_FIELD.number = 20
+ACTIVITY_DUNGEON_CFG_MONEY_POSY_FIELD.index = 19
+ACTIVITY_DUNGEON_CFG_MONEY_POSY_FIELD.label = 3
+ACTIVITY_DUNGEON_CFG_MONEY_POSY_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_MONEY_POSY_FIELD.default_value = {}
+ACTIVITY_DUNGEON_CFG_MONEY_POSY_FIELD.type = 2
+ACTIVITY_DUNGEON_CFG_MONEY_POSY_FIELD.cpp_type = 6
+
+ACTIVITY_DUNGEON_CFG_MONEY_POSZ_FIELD.name = "money_posz"
+ACTIVITY_DUNGEON_CFG_MONEY_POSZ_FIELD.full_name = ".ftcfg.activity_dungeon_cfg.money_posz"
+ACTIVITY_DUNGEON_CFG_MONEY_POSZ_FIELD.number = 21
+ACTIVITY_DUNGEON_CFG_MONEY_POSZ_FIELD.index = 20
+ACTIVITY_DUNGEON_CFG_MONEY_POSZ_FIELD.label = 3
+ACTIVITY_DUNGEON_CFG_MONEY_POSZ_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFG_MONEY_POSZ_FIELD.default_value = {}
+ACTIVITY_DUNGEON_CFG_MONEY_POSZ_FIELD.type = 2
+ACTIVITY_DUNGEON_CFG_MONEY_POSZ_FIELD.cpp_type = 6
+
+ACTIVITY_DUNGEON_CFG.name = "activity_dungeon_cfg"
+ACTIVITY_DUNGEON_CFG.full_name = ".ftcfg.activity_dungeon_cfg"
+ACTIVITY_DUNGEON_CFG.nested_types = {}
+ACTIVITY_DUNGEON_CFG.enum_types = {}
+ACTIVITY_DUNGEON_CFG.fields = {ACTIVITY_DUNGEON_CFG_ID_FIELD, ACTIVITY_DUNGEON_CFG_RESOUCE_NAME_FIELD, ACTIVITY_DUNGEON_CFG_TYPE_FIELD, ACTIVITY_DUNGEON_CFG_LEVEL_LIMIT_FIELD, ACTIVITY_DUNGEON_CFG_MAP_ID_FIELD, ACTIVITY_DUNGEON_CFG_MAP_NAME_FIELD, ACTIVITY_DUNGEON_CFG_MAP_IMGID_FIELD, ACTIVITY_DUNGEON_CFG_RECOMMEND_FIGHTVALUE_FIELD, ACTIVITY_DUNGEON_CFG_LOW_FIGHTVALUE_FIELD, ACTIVITY_DUNGEON_CFG_ADVANCED_ITEM_FIELD, ACTIVITY_DUNGEON_CFG_NORMAL_ITEM_FIELD, ACTIVITY_DUNGEON_CFG_TIMES_FIELD, ACTIVITY_DUNGEON_CFG_ISONLYCAPTAIN_FIELD, ACTIVITY_DUNGEON_CFG_WAIT_TIME_FIELD, ACTIVITY_DUNGEON_CFG_ALONEREWARDS_FIELD, ACTIVITY_DUNGEON_CFG_TEAMREWARDS_FIELD, ACTIVITY_DUNGEON_CFG_MAX_TIMER_FIELD, ACTIVITY_DUNGEON_CFG_MAX_WAVE_FIELD, ACTIVITY_DUNGEON_CFG_MONEY_POSX_FIELD, ACTIVITY_DUNGEON_CFG_MONEY_POSY_FIELD, ACTIVITY_DUNGEON_CFG_MONEY_POSZ_FIELD}
+ACTIVITY_DUNGEON_CFG.is_extendable = false
+ACTIVITY_DUNGEON_CFG.extensions = {}
+ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD.name = "items"
+ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD.full_name = ".ftcfg.activity_dungeon_cfgs.items"
+ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD.number = 1
+ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD.index = 0
+ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD.label = 3
+ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD.has_default_value = false
+ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD.default_value = {}
+ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD.message_type = ACTIVITY_DUNGEON_CFG
+ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD.type = 11
+ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ACTIVITY_DUNGEON_CFGS.name = "activity_dungeon_cfgs"
+ACTIVITY_DUNGEON_CFGS.full_name = ".ftcfg.activity_dungeon_cfgs"
+ACTIVITY_DUNGEON_CFGS.nested_types = {}
+ACTIVITY_DUNGEON_CFGS.enum_types = {}
+ACTIVITY_DUNGEON_CFGS.fields = {ACTIVITY_DUNGEON_CFGS_ITEMS_FIELD}
+ACTIVITY_DUNGEON_CFGS.is_extendable = false
+ACTIVITY_DUNGEON_CFGS.extensions = {}
+RESOURCE_COMPUND_CFG_ID_FIELD.name = "id"
+RESOURCE_COMPUND_CFG_ID_FIELD.full_name = ".ftcfg.resource_compund_cfg.id"
+RESOURCE_COMPUND_CFG_ID_FIELD.number = 1
+RESOURCE_COMPUND_CFG_ID_FIELD.index = 0
+RESOURCE_COMPUND_CFG_ID_FIELD.label = 2
+RESOURCE_COMPUND_CFG_ID_FIELD.has_default_value = false
+RESOURCE_COMPUND_CFG_ID_FIELD.default_value = 0
+RESOURCE_COMPUND_CFG_ID_FIELD.type = 13
+RESOURCE_COMPUND_CFG_ID_FIELD.cpp_type = 3
+
+RESOURCE_COMPUND_CFG_NEED_ITEM_NUM_FIELD.name = "need_item_num"
+RESOURCE_COMPUND_CFG_NEED_ITEM_NUM_FIELD.full_name = ".ftcfg.resource_compund_cfg.need_item_num"
+RESOURCE_COMPUND_CFG_NEED_ITEM_NUM_FIELD.number = 2
+RESOURCE_COMPUND_CFG_NEED_ITEM_NUM_FIELD.index = 1
+RESOURCE_COMPUND_CFG_NEED_ITEM_NUM_FIELD.label = 2
+RESOURCE_COMPUND_CFG_NEED_ITEM_NUM_FIELD.has_default_value = false
+RESOURCE_COMPUND_CFG_NEED_ITEM_NUM_FIELD.default_value = 0
+RESOURCE_COMPUND_CFG_NEED_ITEM_NUM_FIELD.type = 5
+RESOURCE_COMPUND_CFG_NEED_ITEM_NUM_FIELD.cpp_type = 1
+
+RESOURCE_COMPUND_CFG.name = "resource_compund_cfg"
+RESOURCE_COMPUND_CFG.full_name = ".ftcfg.resource_compund_cfg"
+RESOURCE_COMPUND_CFG.nested_types = {}
+RESOURCE_COMPUND_CFG.enum_types = {}
+RESOURCE_COMPUND_CFG.fields = {RESOURCE_COMPUND_CFG_ID_FIELD, RESOURCE_COMPUND_CFG_NEED_ITEM_NUM_FIELD}
+RESOURCE_COMPUND_CFG.is_extendable = false
+RESOURCE_COMPUND_CFG.extensions = {}
+RESOURCE_COMPUND_CFGS_ITEMS_FIELD.name = "items"
+RESOURCE_COMPUND_CFGS_ITEMS_FIELD.full_name = ".ftcfg.resource_compund_cfgs.items"
+RESOURCE_COMPUND_CFGS_ITEMS_FIELD.number = 1
+RESOURCE_COMPUND_CFGS_ITEMS_FIELD.index = 0
+RESOURCE_COMPUND_CFGS_ITEMS_FIELD.label = 3
+RESOURCE_COMPUND_CFGS_ITEMS_FIELD.has_default_value = false
+RESOURCE_COMPUND_CFGS_ITEMS_FIELD.default_value = {}
+RESOURCE_COMPUND_CFGS_ITEMS_FIELD.message_type = RESOURCE_COMPUND_CFG
+RESOURCE_COMPUND_CFGS_ITEMS_FIELD.type = 11
+RESOURCE_COMPUND_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RESOURCE_COMPUND_CFGS.name = "resource_compund_cfgs"
+RESOURCE_COMPUND_CFGS.full_name = ".ftcfg.resource_compund_cfgs"
+RESOURCE_COMPUND_CFGS.nested_types = {}
+RESOURCE_COMPUND_CFGS.enum_types = {}
+RESOURCE_COMPUND_CFGS.fields = {RESOURCE_COMPUND_CFGS_ITEMS_FIELD}
+RESOURCE_COMPUND_CFGS.is_extendable = false
+RESOURCE_COMPUND_CFGS.extensions = {}
+ROUTE_MARK_CFG_ID_FIELD.name = "id"
+ROUTE_MARK_CFG_ID_FIELD.full_name = ".ftcfg.route_mark_cfg.id"
+ROUTE_MARK_CFG_ID_FIELD.number = 1
+ROUTE_MARK_CFG_ID_FIELD.index = 0
+ROUTE_MARK_CFG_ID_FIELD.label = 2
+ROUTE_MARK_CFG_ID_FIELD.has_default_value = false
+ROUTE_MARK_CFG_ID_FIELD.default_value = 0
+ROUTE_MARK_CFG_ID_FIELD.type = 5
+ROUTE_MARK_CFG_ID_FIELD.cpp_type = 1
+
+ROUTE_MARK_CFG_MODEL_ID_FIELD.name = "model_id"
+ROUTE_MARK_CFG_MODEL_ID_FIELD.full_name = ".ftcfg.route_mark_cfg.model_id"
+ROUTE_MARK_CFG_MODEL_ID_FIELD.number = 2
+ROUTE_MARK_CFG_MODEL_ID_FIELD.index = 1
+ROUTE_MARK_CFG_MODEL_ID_FIELD.label = 2
+ROUTE_MARK_CFG_MODEL_ID_FIELD.has_default_value = false
+ROUTE_MARK_CFG_MODEL_ID_FIELD.default_value = 0
+ROUTE_MARK_CFG_MODEL_ID_FIELD.type = 5
+ROUTE_MARK_CFG_MODEL_ID_FIELD.cpp_type = 1
+
+ROUTE_MARK_CFG_SCENE_ID_FIELD.name = "scene_id"
+ROUTE_MARK_CFG_SCENE_ID_FIELD.full_name = ".ftcfg.route_mark_cfg.scene_id"
+ROUTE_MARK_CFG_SCENE_ID_FIELD.number = 3
+ROUTE_MARK_CFG_SCENE_ID_FIELD.index = 2
+ROUTE_MARK_CFG_SCENE_ID_FIELD.label = 2
+ROUTE_MARK_CFG_SCENE_ID_FIELD.has_default_value = false
+ROUTE_MARK_CFG_SCENE_ID_FIELD.default_value = 0
+ROUTE_MARK_CFG_SCENE_ID_FIELD.type = 5
+ROUTE_MARK_CFG_SCENE_ID_FIELD.cpp_type = 1
+
+ROUTE_MARK_CFG_POS_X_FIELD.name = "pos_x"
+ROUTE_MARK_CFG_POS_X_FIELD.full_name = ".ftcfg.route_mark_cfg.pos_x"
+ROUTE_MARK_CFG_POS_X_FIELD.number = 4
+ROUTE_MARK_CFG_POS_X_FIELD.index = 3
+ROUTE_MARK_CFG_POS_X_FIELD.label = 2
+ROUTE_MARK_CFG_POS_X_FIELD.has_default_value = false
+ROUTE_MARK_CFG_POS_X_FIELD.default_value = 0
+ROUTE_MARK_CFG_POS_X_FIELD.type = 5
+ROUTE_MARK_CFG_POS_X_FIELD.cpp_type = 1
+
+ROUTE_MARK_CFG_POS_Y_FIELD.name = "pos_y"
+ROUTE_MARK_CFG_POS_Y_FIELD.full_name = ".ftcfg.route_mark_cfg.pos_y"
+ROUTE_MARK_CFG_POS_Y_FIELD.number = 5
+ROUTE_MARK_CFG_POS_Y_FIELD.index = 4
+ROUTE_MARK_CFG_POS_Y_FIELD.label = 2
+ROUTE_MARK_CFG_POS_Y_FIELD.has_default_value = false
+ROUTE_MARK_CFG_POS_Y_FIELD.default_value = 0
+ROUTE_MARK_CFG_POS_Y_FIELD.type = 5
+ROUTE_MARK_CFG_POS_Y_FIELD.cpp_type = 1
+
+ROUTE_MARK_CFG_POS_Z_FIELD.name = "pos_z"
+ROUTE_MARK_CFG_POS_Z_FIELD.full_name = ".ftcfg.route_mark_cfg.pos_z"
+ROUTE_MARK_CFG_POS_Z_FIELD.number = 6
+ROUTE_MARK_CFG_POS_Z_FIELD.index = 5
+ROUTE_MARK_CFG_POS_Z_FIELD.label = 2
+ROUTE_MARK_CFG_POS_Z_FIELD.has_default_value = false
+ROUTE_MARK_CFG_POS_Z_FIELD.default_value = 0
+ROUTE_MARK_CFG_POS_Z_FIELD.type = 5
+ROUTE_MARK_CFG_POS_Z_FIELD.cpp_type = 1
+
+ROUTE_MARK_CFG.name = "route_mark_cfg"
+ROUTE_MARK_CFG.full_name = ".ftcfg.route_mark_cfg"
+ROUTE_MARK_CFG.nested_types = {}
+ROUTE_MARK_CFG.enum_types = {}
+ROUTE_MARK_CFG.fields = {ROUTE_MARK_CFG_ID_FIELD, ROUTE_MARK_CFG_MODEL_ID_FIELD, ROUTE_MARK_CFG_SCENE_ID_FIELD, ROUTE_MARK_CFG_POS_X_FIELD, ROUTE_MARK_CFG_POS_Y_FIELD, ROUTE_MARK_CFG_POS_Z_FIELD}
+ROUTE_MARK_CFG.is_extendable = false
+ROUTE_MARK_CFG.extensions = {}
+ROUTE_MARK_CFGS_ITEMS_FIELD.name = "items"
+ROUTE_MARK_CFGS_ITEMS_FIELD.full_name = ".ftcfg.route_mark_cfgs.items"
+ROUTE_MARK_CFGS_ITEMS_FIELD.number = 1
+ROUTE_MARK_CFGS_ITEMS_FIELD.index = 0
+ROUTE_MARK_CFGS_ITEMS_FIELD.label = 3
+ROUTE_MARK_CFGS_ITEMS_FIELD.has_default_value = false
+ROUTE_MARK_CFGS_ITEMS_FIELD.default_value = {}
+ROUTE_MARK_CFGS_ITEMS_FIELD.message_type = ROUTE_MARK_CFG
+ROUTE_MARK_CFGS_ITEMS_FIELD.type = 11
+ROUTE_MARK_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ROUTE_MARK_CFGS.name = "route_mark_cfgs"
+ROUTE_MARK_CFGS.full_name = ".ftcfg.route_mark_cfgs"
+ROUTE_MARK_CFGS.nested_types = {}
+ROUTE_MARK_CFGS.enum_types = {}
+ROUTE_MARK_CFGS.fields = {ROUTE_MARK_CFGS_ITEMS_FIELD}
+ROUTE_MARK_CFGS.is_extendable = false
+ROUTE_MARK_CFGS.extensions = {}
+JUMP_CFG_ID_FIELD.name = "id"
+JUMP_CFG_ID_FIELD.full_name = ".ftcfg.jump_cfg.id"
+JUMP_CFG_ID_FIELD.number = 1
+JUMP_CFG_ID_FIELD.index = 0
+JUMP_CFG_ID_FIELD.label = 2
+JUMP_CFG_ID_FIELD.has_default_value = false
+JUMP_CFG_ID_FIELD.default_value = 0
+JUMP_CFG_ID_FIELD.type = 5
+JUMP_CFG_ID_FIELD.cpp_type = 1
+
+JUMP_CFG_WAY_POINTS_FIELD.name = "way_points"
+JUMP_CFG_WAY_POINTS_FIELD.full_name = ".ftcfg.jump_cfg.way_points"
+JUMP_CFG_WAY_POINTS_FIELD.number = 2
+JUMP_CFG_WAY_POINTS_FIELD.index = 1
+JUMP_CFG_WAY_POINTS_FIELD.label = 3
+JUMP_CFG_WAY_POINTS_FIELD.has_default_value = false
+JUMP_CFG_WAY_POINTS_FIELD.default_value = {}
+JUMP_CFG_WAY_POINTS_FIELD.type = 2
+JUMP_CFG_WAY_POINTS_FIELD.cpp_type = 6
+
+JUMP_CFG_JUMP_ACTION_ID_FIELD.name = "jump_action_id"
+JUMP_CFG_JUMP_ACTION_ID_FIELD.full_name = ".ftcfg.jump_cfg.jump_action_id"
+JUMP_CFG_JUMP_ACTION_ID_FIELD.number = 3
+JUMP_CFG_JUMP_ACTION_ID_FIELD.index = 2
+JUMP_CFG_JUMP_ACTION_ID_FIELD.label = 3
+JUMP_CFG_JUMP_ACTION_ID_FIELD.has_default_value = false
+JUMP_CFG_JUMP_ACTION_ID_FIELD.default_value = {}
+JUMP_CFG_JUMP_ACTION_ID_FIELD.type = 5
+JUMP_CFG_JUMP_ACTION_ID_FIELD.cpp_type = 1
+
+JUMP_CFG.name = "jump_cfg"
+JUMP_CFG.full_name = ".ftcfg.jump_cfg"
+JUMP_CFG.nested_types = {}
+JUMP_CFG.enum_types = {}
+JUMP_CFG.fields = {JUMP_CFG_ID_FIELD, JUMP_CFG_WAY_POINTS_FIELD, JUMP_CFG_JUMP_ACTION_ID_FIELD}
+JUMP_CFG.is_extendable = false
+JUMP_CFG.extensions = {}
+JUMP_CFGS_ITEMS_FIELD.name = "items"
+JUMP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.jump_cfgs.items"
+JUMP_CFGS_ITEMS_FIELD.number = 1
+JUMP_CFGS_ITEMS_FIELD.index = 0
+JUMP_CFGS_ITEMS_FIELD.label = 3
+JUMP_CFGS_ITEMS_FIELD.has_default_value = false
+JUMP_CFGS_ITEMS_FIELD.default_value = {}
+JUMP_CFGS_ITEMS_FIELD.message_type = JUMP_CFG
+JUMP_CFGS_ITEMS_FIELD.type = 11
+JUMP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+JUMP_CFGS.name = "jump_cfgs"
+JUMP_CFGS.full_name = ".ftcfg.jump_cfgs"
+JUMP_CFGS.nested_types = {}
+JUMP_CFGS.enum_types = {}
+JUMP_CFGS.fields = {JUMP_CFGS_ITEMS_FIELD}
+JUMP_CFGS.is_extendable = false
+JUMP_CFGS.extensions = {}
+JUMP_ACTION_CFG_ID_FIELD.name = "id"
+JUMP_ACTION_CFG_ID_FIELD.full_name = ".ftcfg.jump_action_cfg.id"
+JUMP_ACTION_CFG_ID_FIELD.number = 1
+JUMP_ACTION_CFG_ID_FIELD.index = 0
+JUMP_ACTION_CFG_ID_FIELD.label = 2
+JUMP_ACTION_CFG_ID_FIELD.has_default_value = false
+JUMP_ACTION_CFG_ID_FIELD.default_value = 0
+JUMP_ACTION_CFG_ID_FIELD.type = 5
+JUMP_ACTION_CFG_ID_FIELD.cpp_type = 1
+
+JUMP_ACTION_CFG_ANIMATION_NAME_FIELD.name = "animation_name"
+JUMP_ACTION_CFG_ANIMATION_NAME_FIELD.full_name = ".ftcfg.jump_action_cfg.animation_name"
+JUMP_ACTION_CFG_ANIMATION_NAME_FIELD.number = 2
+JUMP_ACTION_CFG_ANIMATION_NAME_FIELD.index = 1
+JUMP_ACTION_CFG_ANIMATION_NAME_FIELD.label = 2
+JUMP_ACTION_CFG_ANIMATION_NAME_FIELD.has_default_value = false
+JUMP_ACTION_CFG_ANIMATION_NAME_FIELD.default_value = ""
+JUMP_ACTION_CFG_ANIMATION_NAME_FIELD.type = 9
+JUMP_ACTION_CFG_ANIMATION_NAME_FIELD.cpp_type = 9
+
+JUMP_ACTION_CFG_SPLITES_FIELD.name = "splites"
+JUMP_ACTION_CFG_SPLITES_FIELD.full_name = ".ftcfg.jump_action_cfg.splites"
+JUMP_ACTION_CFG_SPLITES_FIELD.number = 3
+JUMP_ACTION_CFG_SPLITES_FIELD.index = 2
+JUMP_ACTION_CFG_SPLITES_FIELD.label = 3
+JUMP_ACTION_CFG_SPLITES_FIELD.has_default_value = false
+JUMP_ACTION_CFG_SPLITES_FIELD.default_value = {}
+JUMP_ACTION_CFG_SPLITES_FIELD.type = 2
+JUMP_ACTION_CFG_SPLITES_FIELD.cpp_type = 6
+
+JUMP_ACTION_CFG_DURATION_FIELD.name = "duration"
+JUMP_ACTION_CFG_DURATION_FIELD.full_name = ".ftcfg.jump_action_cfg.duration"
+JUMP_ACTION_CFG_DURATION_FIELD.number = 4
+JUMP_ACTION_CFG_DURATION_FIELD.index = 3
+JUMP_ACTION_CFG_DURATION_FIELD.label = 2
+JUMP_ACTION_CFG_DURATION_FIELD.has_default_value = false
+JUMP_ACTION_CFG_DURATION_FIELD.default_value = 0.0
+JUMP_ACTION_CFG_DURATION_FIELD.type = 2
+JUMP_ACTION_CFG_DURATION_FIELD.cpp_type = 6
+
+JUMP_ACTION_CFG.name = "jump_action_cfg"
+JUMP_ACTION_CFG.full_name = ".ftcfg.jump_action_cfg"
+JUMP_ACTION_CFG.nested_types = {}
+JUMP_ACTION_CFG.enum_types = {}
+JUMP_ACTION_CFG.fields = {JUMP_ACTION_CFG_ID_FIELD, JUMP_ACTION_CFG_ANIMATION_NAME_FIELD, JUMP_ACTION_CFG_SPLITES_FIELD, JUMP_ACTION_CFG_DURATION_FIELD}
+JUMP_ACTION_CFG.is_extendable = false
+JUMP_ACTION_CFG.extensions = {}
+JUMP_ACTION_CFGS_ITEMS_FIELD.name = "items"
+JUMP_ACTION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.jump_action_cfgs.items"
+JUMP_ACTION_CFGS_ITEMS_FIELD.number = 1
+JUMP_ACTION_CFGS_ITEMS_FIELD.index = 0
+JUMP_ACTION_CFGS_ITEMS_FIELD.label = 3
+JUMP_ACTION_CFGS_ITEMS_FIELD.has_default_value = false
+JUMP_ACTION_CFGS_ITEMS_FIELD.default_value = {}
+JUMP_ACTION_CFGS_ITEMS_FIELD.message_type = JUMP_ACTION_CFG
+JUMP_ACTION_CFGS_ITEMS_FIELD.type = 11
+JUMP_ACTION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+JUMP_ACTION_CFGS.name = "jump_action_cfgs"
+JUMP_ACTION_CFGS.full_name = ".ftcfg.jump_action_cfgs"
+JUMP_ACTION_CFGS.nested_types = {}
+JUMP_ACTION_CFGS.enum_types = {}
+JUMP_ACTION_CFGS.fields = {JUMP_ACTION_CFGS_ITEMS_FIELD}
+JUMP_ACTION_CFGS.is_extendable = false
+JUMP_ACTION_CFGS.extensions = {}
+MAGIC_ATT_CFG_ID_FIELD.name = "id"
+MAGIC_ATT_CFG_ID_FIELD.full_name = ".ftcfg.magic_att_cfg.id"
+MAGIC_ATT_CFG_ID_FIELD.number = 1
+MAGIC_ATT_CFG_ID_FIELD.index = 0
+MAGIC_ATT_CFG_ID_FIELD.label = 2
+MAGIC_ATT_CFG_ID_FIELD.has_default_value = false
+MAGIC_ATT_CFG_ID_FIELD.default_value = 0
+MAGIC_ATT_CFG_ID_FIELD.type = 5
+MAGIC_ATT_CFG_ID_FIELD.cpp_type = 1
+
+MAGIC_ATT_CFG_MAGIC_TYPE_FIELD.name = "magic_type"
+MAGIC_ATT_CFG_MAGIC_TYPE_FIELD.full_name = ".ftcfg.magic_att_cfg.magic_type"
+MAGIC_ATT_CFG_MAGIC_TYPE_FIELD.number = 2
+MAGIC_ATT_CFG_MAGIC_TYPE_FIELD.index = 1
+MAGIC_ATT_CFG_MAGIC_TYPE_FIELD.label = 2
+MAGIC_ATT_CFG_MAGIC_TYPE_FIELD.has_default_value = false
+MAGIC_ATT_CFG_MAGIC_TYPE_FIELD.default_value = 0
+MAGIC_ATT_CFG_MAGIC_TYPE_FIELD.type = 5
+MAGIC_ATT_CFG_MAGIC_TYPE_FIELD.cpp_type = 1
+
+MAGIC_ATT_CFG_RANGE_FIELD.name = "range"
+MAGIC_ATT_CFG_RANGE_FIELD.full_name = ".ftcfg.magic_att_cfg.range"
+MAGIC_ATT_CFG_RANGE_FIELD.number = 3
+MAGIC_ATT_CFG_RANGE_FIELD.index = 2
+MAGIC_ATT_CFG_RANGE_FIELD.label = 2
+MAGIC_ATT_CFG_RANGE_FIELD.has_default_value = false
+MAGIC_ATT_CFG_RANGE_FIELD.default_value = 0
+MAGIC_ATT_CFG_RANGE_FIELD.type = 5
+MAGIC_ATT_CFG_RANGE_FIELD.cpp_type = 1
+
+MAGIC_ATT_CFG_PROP_TYPE_FIELD.name = "prop_type"
+MAGIC_ATT_CFG_PROP_TYPE_FIELD.full_name = ".ftcfg.magic_att_cfg.prop_type"
+MAGIC_ATT_CFG_PROP_TYPE_FIELD.number = 4
+MAGIC_ATT_CFG_PROP_TYPE_FIELD.index = 3
+MAGIC_ATT_CFG_PROP_TYPE_FIELD.label = 3
+MAGIC_ATT_CFG_PROP_TYPE_FIELD.has_default_value = false
+MAGIC_ATT_CFG_PROP_TYPE_FIELD.default_value = {}
+MAGIC_ATT_CFG_PROP_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPOPTYPE
+MAGIC_ATT_CFG_PROP_TYPE_FIELD.type = 14
+MAGIC_ATT_CFG_PROP_TYPE_FIELD.cpp_type = 8
+
+MAGIC_ATT_CFG_ATT_TYPE_FIELD.name = "att_type"
+MAGIC_ATT_CFG_ATT_TYPE_FIELD.full_name = ".ftcfg.magic_att_cfg.att_type"
+MAGIC_ATT_CFG_ATT_TYPE_FIELD.number = 5
+MAGIC_ATT_CFG_ATT_TYPE_FIELD.index = 4
+MAGIC_ATT_CFG_ATT_TYPE_FIELD.label = 3
+MAGIC_ATT_CFG_ATT_TYPE_FIELD.has_default_value = false
+MAGIC_ATT_CFG_ATT_TYPE_FIELD.default_value = {}
+MAGIC_ATT_CFG_ATT_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPTYPE
+MAGIC_ATT_CFG_ATT_TYPE_FIELD.type = 14
+MAGIC_ATT_CFG_ATT_TYPE_FIELD.cpp_type = 8
+
+MAGIC_ATT_CFG_ATT_VALUE_FIELD.name = "att_value"
+MAGIC_ATT_CFG_ATT_VALUE_FIELD.full_name = ".ftcfg.magic_att_cfg.att_value"
+MAGIC_ATT_CFG_ATT_VALUE_FIELD.number = 6
+MAGIC_ATT_CFG_ATT_VALUE_FIELD.index = 5
+MAGIC_ATT_CFG_ATT_VALUE_FIELD.label = 3
+MAGIC_ATT_CFG_ATT_VALUE_FIELD.has_default_value = false
+MAGIC_ATT_CFG_ATT_VALUE_FIELD.default_value = {}
+MAGIC_ATT_CFG_ATT_VALUE_FIELD.type = 2
+MAGIC_ATT_CFG_ATT_VALUE_FIELD.cpp_type = 6
+
+MAGIC_ATT_CFG_NAME_FIELD.name = "name"
+MAGIC_ATT_CFG_NAME_FIELD.full_name = ".ftcfg.magic_att_cfg.name"
+MAGIC_ATT_CFG_NAME_FIELD.number = 7
+MAGIC_ATT_CFG_NAME_FIELD.index = 6
+MAGIC_ATT_CFG_NAME_FIELD.label = 2
+MAGIC_ATT_CFG_NAME_FIELD.has_default_value = false
+MAGIC_ATT_CFG_NAME_FIELD.default_value = ""
+MAGIC_ATT_CFG_NAME_FIELD.type = 9
+MAGIC_ATT_CFG_NAME_FIELD.cpp_type = 9
+
+MAGIC_ATT_CFG_DESC_FIELD.name = "desc"
+MAGIC_ATT_CFG_DESC_FIELD.full_name = ".ftcfg.magic_att_cfg.desc"
+MAGIC_ATT_CFG_DESC_FIELD.number = 8
+MAGIC_ATT_CFG_DESC_FIELD.index = 7
+MAGIC_ATT_CFG_DESC_FIELD.label = 2
+MAGIC_ATT_CFG_DESC_FIELD.has_default_value = false
+MAGIC_ATT_CFG_DESC_FIELD.default_value = ""
+MAGIC_ATT_CFG_DESC_FIELD.type = 9
+MAGIC_ATT_CFG_DESC_FIELD.cpp_type = 9
+
+MAGIC_ATT_CFG_ICON_FIELD.name = "icon"
+MAGIC_ATT_CFG_ICON_FIELD.full_name = ".ftcfg.magic_att_cfg.icon"
+MAGIC_ATT_CFG_ICON_FIELD.number = 9
+MAGIC_ATT_CFG_ICON_FIELD.index = 8
+MAGIC_ATT_CFG_ICON_FIELD.label = 2
+MAGIC_ATT_CFG_ICON_FIELD.has_default_value = false
+MAGIC_ATT_CFG_ICON_FIELD.default_value = 0
+MAGIC_ATT_CFG_ICON_FIELD.type = 5
+MAGIC_ATT_CFG_ICON_FIELD.cpp_type = 1
+
+MAGIC_ATT_CFG.name = "magic_att_cfg"
+MAGIC_ATT_CFG.full_name = ".ftcfg.magic_att_cfg"
+MAGIC_ATT_CFG.nested_types = {}
+MAGIC_ATT_CFG.enum_types = {}
+MAGIC_ATT_CFG.fields = {MAGIC_ATT_CFG_ID_FIELD, MAGIC_ATT_CFG_MAGIC_TYPE_FIELD, MAGIC_ATT_CFG_RANGE_FIELD, MAGIC_ATT_CFG_PROP_TYPE_FIELD, MAGIC_ATT_CFG_ATT_TYPE_FIELD, MAGIC_ATT_CFG_ATT_VALUE_FIELD, MAGIC_ATT_CFG_NAME_FIELD, MAGIC_ATT_CFG_DESC_FIELD, MAGIC_ATT_CFG_ICON_FIELD}
+MAGIC_ATT_CFG.is_extendable = false
+MAGIC_ATT_CFG.extensions = {}
+MAGIC_ATT_CFGS_ITEMS_FIELD.name = "items"
+MAGIC_ATT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.magic_att_cfgs.items"
+MAGIC_ATT_CFGS_ITEMS_FIELD.number = 1
+MAGIC_ATT_CFGS_ITEMS_FIELD.index = 0
+MAGIC_ATT_CFGS_ITEMS_FIELD.label = 3
+MAGIC_ATT_CFGS_ITEMS_FIELD.has_default_value = false
+MAGIC_ATT_CFGS_ITEMS_FIELD.default_value = {}
+MAGIC_ATT_CFGS_ITEMS_FIELD.message_type = MAGIC_ATT_CFG
+MAGIC_ATT_CFGS_ITEMS_FIELD.type = 11
+MAGIC_ATT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MAGIC_ATT_CFGS.name = "magic_att_cfgs"
+MAGIC_ATT_CFGS.full_name = ".ftcfg.magic_att_cfgs"
+MAGIC_ATT_CFGS.nested_types = {}
+MAGIC_ATT_CFGS.enum_types = {}
+MAGIC_ATT_CFGS.fields = {MAGIC_ATT_CFGS_ITEMS_FIELD}
+MAGIC_ATT_CFGS.is_extendable = false
+MAGIC_ATT_CFGS.extensions = {}
+MAGIC_OSTIOLE_CFG_ID_FIELD.name = "id"
+MAGIC_OSTIOLE_CFG_ID_FIELD.full_name = ".ftcfg.magic_ostiole_cfg.id"
+MAGIC_OSTIOLE_CFG_ID_FIELD.number = 1
+MAGIC_OSTIOLE_CFG_ID_FIELD.index = 0
+MAGIC_OSTIOLE_CFG_ID_FIELD.label = 2
+MAGIC_OSTIOLE_CFG_ID_FIELD.has_default_value = false
+MAGIC_OSTIOLE_CFG_ID_FIELD.default_value = 0
+MAGIC_OSTIOLE_CFG_ID_FIELD.type = 5
+MAGIC_OSTIOLE_CFG_ID_FIELD.cpp_type = 1
+
+MAGIC_OSTIOLE_CFG_POS_FIELD.name = "pos"
+MAGIC_OSTIOLE_CFG_POS_FIELD.full_name = ".ftcfg.magic_ostiole_cfg.pos"
+MAGIC_OSTIOLE_CFG_POS_FIELD.number = 2
+MAGIC_OSTIOLE_CFG_POS_FIELD.index = 1
+MAGIC_OSTIOLE_CFG_POS_FIELD.label = 2
+MAGIC_OSTIOLE_CFG_POS_FIELD.has_default_value = false
+MAGIC_OSTIOLE_CFG_POS_FIELD.default_value = 0
+MAGIC_OSTIOLE_CFG_POS_FIELD.type = 5
+MAGIC_OSTIOLE_CFG_POS_FIELD.cpp_type = 1
+
+MAGIC_OSTIOLE_CFG_MAGIC_TYPE_FIELD.name = "magic_type"
+MAGIC_OSTIOLE_CFG_MAGIC_TYPE_FIELD.full_name = ".ftcfg.magic_ostiole_cfg.magic_type"
+MAGIC_OSTIOLE_CFG_MAGIC_TYPE_FIELD.number = 3
+MAGIC_OSTIOLE_CFG_MAGIC_TYPE_FIELD.index = 2
+MAGIC_OSTIOLE_CFG_MAGIC_TYPE_FIELD.label = 2
+MAGIC_OSTIOLE_CFG_MAGIC_TYPE_FIELD.has_default_value = false
+MAGIC_OSTIOLE_CFG_MAGIC_TYPE_FIELD.default_value = 0
+MAGIC_OSTIOLE_CFG_MAGIC_TYPE_FIELD.type = 5
+MAGIC_OSTIOLE_CFG_MAGIC_TYPE_FIELD.cpp_type = 1
+
+MAGIC_OSTIOLE_CFG_PLAYER_LEVEL_FIELD.name = "player_level"
+MAGIC_OSTIOLE_CFG_PLAYER_LEVEL_FIELD.full_name = ".ftcfg.magic_ostiole_cfg.player_level"
+MAGIC_OSTIOLE_CFG_PLAYER_LEVEL_FIELD.number = 4
+MAGIC_OSTIOLE_CFG_PLAYER_LEVEL_FIELD.index = 3
+MAGIC_OSTIOLE_CFG_PLAYER_LEVEL_FIELD.label = 2
+MAGIC_OSTIOLE_CFG_PLAYER_LEVEL_FIELD.has_default_value = false
+MAGIC_OSTIOLE_CFG_PLAYER_LEVEL_FIELD.default_value = 0
+MAGIC_OSTIOLE_CFG_PLAYER_LEVEL_FIELD.type = 5
+MAGIC_OSTIOLE_CFG_PLAYER_LEVEL_FIELD.cpp_type = 1
+
+MAGIC_OSTIOLE_CFG_RANGE_FIELD.name = "range"
+MAGIC_OSTIOLE_CFG_RANGE_FIELD.full_name = ".ftcfg.magic_ostiole_cfg.range"
+MAGIC_OSTIOLE_CFG_RANGE_FIELD.number = 5
+MAGIC_OSTIOLE_CFG_RANGE_FIELD.index = 4
+MAGIC_OSTIOLE_CFG_RANGE_FIELD.label = 2
+MAGIC_OSTIOLE_CFG_RANGE_FIELD.has_default_value = false
+MAGIC_OSTIOLE_CFG_RANGE_FIELD.default_value = 0
+MAGIC_OSTIOLE_CFG_RANGE_FIELD.type = 5
+MAGIC_OSTIOLE_CFG_RANGE_FIELD.cpp_type = 1
+
+MAGIC_OSTIOLE_CFG_ITEM_ID_FIELD.name = "item_id"
+MAGIC_OSTIOLE_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.magic_ostiole_cfg.item_id"
+MAGIC_OSTIOLE_CFG_ITEM_ID_FIELD.number = 6
+MAGIC_OSTIOLE_CFG_ITEM_ID_FIELD.index = 5
+MAGIC_OSTIOLE_CFG_ITEM_ID_FIELD.label = 2
+MAGIC_OSTIOLE_CFG_ITEM_ID_FIELD.has_default_value = false
+MAGIC_OSTIOLE_CFG_ITEM_ID_FIELD.default_value = 0
+MAGIC_OSTIOLE_CFG_ITEM_ID_FIELD.type = 5
+MAGIC_OSTIOLE_CFG_ITEM_ID_FIELD.cpp_type = 1
+
+MAGIC_OSTIOLE_CFG_ITEM_NUM_FIELD.name = "item_num"
+MAGIC_OSTIOLE_CFG_ITEM_NUM_FIELD.full_name = ".ftcfg.magic_ostiole_cfg.item_num"
+MAGIC_OSTIOLE_CFG_ITEM_NUM_FIELD.number = 7
+MAGIC_OSTIOLE_CFG_ITEM_NUM_FIELD.index = 6
+MAGIC_OSTIOLE_CFG_ITEM_NUM_FIELD.label = 2
+MAGIC_OSTIOLE_CFG_ITEM_NUM_FIELD.has_default_value = false
+MAGIC_OSTIOLE_CFG_ITEM_NUM_FIELD.default_value = 0
+MAGIC_OSTIOLE_CFG_ITEM_NUM_FIELD.type = 5
+MAGIC_OSTIOLE_CFG_ITEM_NUM_FIELD.cpp_type = 1
+
+MAGIC_OSTIOLE_CFG_MAX_BEATIFIC_FIELD.name = "max_beatific"
+MAGIC_OSTIOLE_CFG_MAX_BEATIFIC_FIELD.full_name = ".ftcfg.magic_ostiole_cfg.max_beatific"
+MAGIC_OSTIOLE_CFG_MAX_BEATIFIC_FIELD.number = 8
+MAGIC_OSTIOLE_CFG_MAX_BEATIFIC_FIELD.index = 7
+MAGIC_OSTIOLE_CFG_MAX_BEATIFIC_FIELD.label = 2
+MAGIC_OSTIOLE_CFG_MAX_BEATIFIC_FIELD.has_default_value = false
+MAGIC_OSTIOLE_CFG_MAX_BEATIFIC_FIELD.default_value = 0
+MAGIC_OSTIOLE_CFG_MAX_BEATIFIC_FIELD.type = 5
+MAGIC_OSTIOLE_CFG_MAX_BEATIFIC_FIELD.cpp_type = 1
+
+MAGIC_OSTIOLE_CFG.name = "magic_ostiole_cfg"
+MAGIC_OSTIOLE_CFG.full_name = ".ftcfg.magic_ostiole_cfg"
+MAGIC_OSTIOLE_CFG.nested_types = {}
+MAGIC_OSTIOLE_CFG.enum_types = {}
+MAGIC_OSTIOLE_CFG.fields = {MAGIC_OSTIOLE_CFG_ID_FIELD, MAGIC_OSTIOLE_CFG_POS_FIELD, MAGIC_OSTIOLE_CFG_MAGIC_TYPE_FIELD, MAGIC_OSTIOLE_CFG_PLAYER_LEVEL_FIELD, MAGIC_OSTIOLE_CFG_RANGE_FIELD, MAGIC_OSTIOLE_CFG_ITEM_ID_FIELD, MAGIC_OSTIOLE_CFG_ITEM_NUM_FIELD, MAGIC_OSTIOLE_CFG_MAX_BEATIFIC_FIELD}
+MAGIC_OSTIOLE_CFG.is_extendable = false
+MAGIC_OSTIOLE_CFG.extensions = {}
+MAGIC_OSTIOLE_CFGS_ITEMS_FIELD.name = "items"
+MAGIC_OSTIOLE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.magic_ostiole_cfgs.items"
+MAGIC_OSTIOLE_CFGS_ITEMS_FIELD.number = 1
+MAGIC_OSTIOLE_CFGS_ITEMS_FIELD.index = 0
+MAGIC_OSTIOLE_CFGS_ITEMS_FIELD.label = 3
+MAGIC_OSTIOLE_CFGS_ITEMS_FIELD.has_default_value = false
+MAGIC_OSTIOLE_CFGS_ITEMS_FIELD.default_value = {}
+MAGIC_OSTIOLE_CFGS_ITEMS_FIELD.message_type = MAGIC_OSTIOLE_CFG
+MAGIC_OSTIOLE_CFGS_ITEMS_FIELD.type = 11
+MAGIC_OSTIOLE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MAGIC_OSTIOLE_CFGS.name = "magic_ostiole_cfgs"
+MAGIC_OSTIOLE_CFGS.full_name = ".ftcfg.magic_ostiole_cfgs"
+MAGIC_OSTIOLE_CFGS.nested_types = {}
+MAGIC_OSTIOLE_CFGS.enum_types = {}
+MAGIC_OSTIOLE_CFGS.fields = {MAGIC_OSTIOLE_CFGS_ITEMS_FIELD}
+MAGIC_OSTIOLE_CFGS.is_extendable = false
+MAGIC_OSTIOLE_CFGS.extensions = {}
+MAGIC_LEVELUP_CFG_ID_FIELD.name = "id"
+MAGIC_LEVELUP_CFG_ID_FIELD.full_name = ".ftcfg.magic_levelup_cfg.id"
+MAGIC_LEVELUP_CFG_ID_FIELD.number = 1
+MAGIC_LEVELUP_CFG_ID_FIELD.index = 0
+MAGIC_LEVELUP_CFG_ID_FIELD.label = 2
+MAGIC_LEVELUP_CFG_ID_FIELD.has_default_value = false
+MAGIC_LEVELUP_CFG_ID_FIELD.default_value = 0
+MAGIC_LEVELUP_CFG_ID_FIELD.type = 5
+MAGIC_LEVELUP_CFG_ID_FIELD.cpp_type = 1
+
+MAGIC_LEVELUP_CFG_MAGIC_LEVEL_FIELD.name = "magic_level"
+MAGIC_LEVELUP_CFG_MAGIC_LEVEL_FIELD.full_name = ".ftcfg.magic_levelup_cfg.magic_level"
+MAGIC_LEVELUP_CFG_MAGIC_LEVEL_FIELD.number = 2
+MAGIC_LEVELUP_CFG_MAGIC_LEVEL_FIELD.index = 1
+MAGIC_LEVELUP_CFG_MAGIC_LEVEL_FIELD.label = 2
+MAGIC_LEVELUP_CFG_MAGIC_LEVEL_FIELD.has_default_value = false
+MAGIC_LEVELUP_CFG_MAGIC_LEVEL_FIELD.default_value = 0
+MAGIC_LEVELUP_CFG_MAGIC_LEVEL_FIELD.type = 5
+MAGIC_LEVELUP_CFG_MAGIC_LEVEL_FIELD.cpp_type = 1
+
+MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD.name = "prop_type"
+MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD.full_name = ".ftcfg.magic_levelup_cfg.prop_type"
+MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD.number = 3
+MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD.index = 2
+MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD.label = 3
+MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD.has_default_value = false
+MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD.default_value = {}
+MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPOPTYPE
+MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD.type = 14
+MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD.cpp_type = 8
+
+MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD.name = "att_type"
+MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD.full_name = ".ftcfg.magic_levelup_cfg.att_type"
+MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD.number = 4
+MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD.index = 3
+MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD.label = 3
+MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD.has_default_value = false
+MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD.default_value = {}
+MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPTYPE
+MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD.type = 14
+MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD.cpp_type = 8
+
+MAGIC_LEVELUP_CFG_ATT_VALUE_FIELD.name = "att_value"
+MAGIC_LEVELUP_CFG_ATT_VALUE_FIELD.full_name = ".ftcfg.magic_levelup_cfg.att_value"
+MAGIC_LEVELUP_CFG_ATT_VALUE_FIELD.number = 5
+MAGIC_LEVELUP_CFG_ATT_VALUE_FIELD.index = 4
+MAGIC_LEVELUP_CFG_ATT_VALUE_FIELD.label = 3
+MAGIC_LEVELUP_CFG_ATT_VALUE_FIELD.has_default_value = false
+MAGIC_LEVELUP_CFG_ATT_VALUE_FIELD.default_value = {}
+MAGIC_LEVELUP_CFG_ATT_VALUE_FIELD.type = 2
+MAGIC_LEVELUP_CFG_ATT_VALUE_FIELD.cpp_type = 6
+
+MAGIC_LEVELUP_CFG_ITEM_ID_FIELD.name = "item_id"
+MAGIC_LEVELUP_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.magic_levelup_cfg.item_id"
+MAGIC_LEVELUP_CFG_ITEM_ID_FIELD.number = 6
+MAGIC_LEVELUP_CFG_ITEM_ID_FIELD.index = 5
+MAGIC_LEVELUP_CFG_ITEM_ID_FIELD.label = 2
+MAGIC_LEVELUP_CFG_ITEM_ID_FIELD.has_default_value = false
+MAGIC_LEVELUP_CFG_ITEM_ID_FIELD.default_value = 0
+MAGIC_LEVELUP_CFG_ITEM_ID_FIELD.type = 5
+MAGIC_LEVELUP_CFG_ITEM_ID_FIELD.cpp_type = 1
+
+MAGIC_LEVELUP_CFG_ITEM_NUM_FIELD.name = "item_num"
+MAGIC_LEVELUP_CFG_ITEM_NUM_FIELD.full_name = ".ftcfg.magic_levelup_cfg.item_num"
+MAGIC_LEVELUP_CFG_ITEM_NUM_FIELD.number = 7
+MAGIC_LEVELUP_CFG_ITEM_NUM_FIELD.index = 6
+MAGIC_LEVELUP_CFG_ITEM_NUM_FIELD.label = 2
+MAGIC_LEVELUP_CFG_ITEM_NUM_FIELD.has_default_value = false
+MAGIC_LEVELUP_CFG_ITEM_NUM_FIELD.default_value = 0
+MAGIC_LEVELUP_CFG_ITEM_NUM_FIELD.type = 5
+MAGIC_LEVELUP_CFG_ITEM_NUM_FIELD.cpp_type = 1
+
+MAGIC_LEVELUP_CFG_RANGE_FIELD.name = "range"
+MAGIC_LEVELUP_CFG_RANGE_FIELD.full_name = ".ftcfg.magic_levelup_cfg.range"
+MAGIC_LEVELUP_CFG_RANGE_FIELD.number = 8
+MAGIC_LEVELUP_CFG_RANGE_FIELD.index = 7
+MAGIC_LEVELUP_CFG_RANGE_FIELD.label = 2
+MAGIC_LEVELUP_CFG_RANGE_FIELD.has_default_value = false
+MAGIC_LEVELUP_CFG_RANGE_FIELD.default_value = 0
+MAGIC_LEVELUP_CFG_RANGE_FIELD.type = 5
+MAGIC_LEVELUP_CFG_RANGE_FIELD.cpp_type = 1
+
+MAGIC_LEVELUP_CFG.name = "magic_levelup_cfg"
+MAGIC_LEVELUP_CFG.full_name = ".ftcfg.magic_levelup_cfg"
+MAGIC_LEVELUP_CFG.nested_types = {}
+MAGIC_LEVELUP_CFG.enum_types = {}
+MAGIC_LEVELUP_CFG.fields = {MAGIC_LEVELUP_CFG_ID_FIELD, MAGIC_LEVELUP_CFG_MAGIC_LEVEL_FIELD, MAGIC_LEVELUP_CFG_PROP_TYPE_FIELD, MAGIC_LEVELUP_CFG_ATT_TYPE_FIELD, MAGIC_LEVELUP_CFG_ATT_VALUE_FIELD, MAGIC_LEVELUP_CFG_ITEM_ID_FIELD, MAGIC_LEVELUP_CFG_ITEM_NUM_FIELD, MAGIC_LEVELUP_CFG_RANGE_FIELD}
+MAGIC_LEVELUP_CFG.is_extendable = false
+MAGIC_LEVELUP_CFG.extensions = {}
+MAGIC_LEVELUP_CFGS_ITEMS_FIELD.name = "items"
+MAGIC_LEVELUP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.magic_levelup_cfgs.items"
+MAGIC_LEVELUP_CFGS_ITEMS_FIELD.number = 1
+MAGIC_LEVELUP_CFGS_ITEMS_FIELD.index = 0
+MAGIC_LEVELUP_CFGS_ITEMS_FIELD.label = 3
+MAGIC_LEVELUP_CFGS_ITEMS_FIELD.has_default_value = false
+MAGIC_LEVELUP_CFGS_ITEMS_FIELD.default_value = {}
+MAGIC_LEVELUP_CFGS_ITEMS_FIELD.message_type = MAGIC_LEVELUP_CFG
+MAGIC_LEVELUP_CFGS_ITEMS_FIELD.type = 11
+MAGIC_LEVELUP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MAGIC_LEVELUP_CFGS.name = "magic_levelup_cfgs"
+MAGIC_LEVELUP_CFGS.full_name = ".ftcfg.magic_levelup_cfgs"
+MAGIC_LEVELUP_CFGS.nested_types = {}
+MAGIC_LEVELUP_CFGS.enum_types = {}
+MAGIC_LEVELUP_CFGS.fields = {MAGIC_LEVELUP_CFGS_ITEMS_FIELD}
+MAGIC_LEVELUP_CFGS.is_extendable = false
+MAGIC_LEVELUP_CFGS.extensions = {}
+MAGIC_COMBINATION_CFG_ID_FIELD.name = "id"
+MAGIC_COMBINATION_CFG_ID_FIELD.full_name = ".ftcfg.magic_combination_cfg.id"
+MAGIC_COMBINATION_CFG_ID_FIELD.number = 1
+MAGIC_COMBINATION_CFG_ID_FIELD.index = 0
+MAGIC_COMBINATION_CFG_ID_FIELD.label = 2
+MAGIC_COMBINATION_CFG_ID_FIELD.has_default_value = false
+MAGIC_COMBINATION_CFG_ID_FIELD.default_value = 0
+MAGIC_COMBINATION_CFG_ID_FIELD.type = 5
+MAGIC_COMBINATION_CFG_ID_FIELD.cpp_type = 1
+
+MAGIC_COMBINATION_CFG_COMBINATION_LEVEL_FIELD.name = "combination_level"
+MAGIC_COMBINATION_CFG_COMBINATION_LEVEL_FIELD.full_name = ".ftcfg.magic_combination_cfg.combination_level"
+MAGIC_COMBINATION_CFG_COMBINATION_LEVEL_FIELD.number = 2
+MAGIC_COMBINATION_CFG_COMBINATION_LEVEL_FIELD.index = 1
+MAGIC_COMBINATION_CFG_COMBINATION_LEVEL_FIELD.label = 2
+MAGIC_COMBINATION_CFG_COMBINATION_LEVEL_FIELD.has_default_value = false
+MAGIC_COMBINATION_CFG_COMBINATION_LEVEL_FIELD.default_value = 0
+MAGIC_COMBINATION_CFG_COMBINATION_LEVEL_FIELD.type = 5
+MAGIC_COMBINATION_CFG_COMBINATION_LEVEL_FIELD.cpp_type = 1
+
+MAGIC_COMBINATION_CFG_MAGIC_IDS_FIELD.name = "magic_ids"
+MAGIC_COMBINATION_CFG_MAGIC_IDS_FIELD.full_name = ".ftcfg.magic_combination_cfg.magic_ids"
+MAGIC_COMBINATION_CFG_MAGIC_IDS_FIELD.number = 3
+MAGIC_COMBINATION_CFG_MAGIC_IDS_FIELD.index = 2
+MAGIC_COMBINATION_CFG_MAGIC_IDS_FIELD.label = 3
+MAGIC_COMBINATION_CFG_MAGIC_IDS_FIELD.has_default_value = false
+MAGIC_COMBINATION_CFG_MAGIC_IDS_FIELD.default_value = {}
+MAGIC_COMBINATION_CFG_MAGIC_IDS_FIELD.type = 5
+MAGIC_COMBINATION_CFG_MAGIC_IDS_FIELD.cpp_type = 1
+
+MAGIC_COMBINATION_CFG_MAGIC_NUM_FIELD.name = "magic_num"
+MAGIC_COMBINATION_CFG_MAGIC_NUM_FIELD.full_name = ".ftcfg.magic_combination_cfg.magic_num"
+MAGIC_COMBINATION_CFG_MAGIC_NUM_FIELD.number = 4
+MAGIC_COMBINATION_CFG_MAGIC_NUM_FIELD.index = 3
+MAGIC_COMBINATION_CFG_MAGIC_NUM_FIELD.label = 3
+MAGIC_COMBINATION_CFG_MAGIC_NUM_FIELD.has_default_value = false
+MAGIC_COMBINATION_CFG_MAGIC_NUM_FIELD.default_value = {}
+MAGIC_COMBINATION_CFG_MAGIC_NUM_FIELD.type = 5
+MAGIC_COMBINATION_CFG_MAGIC_NUM_FIELD.cpp_type = 1
+
+MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD.name = "prop_type"
+MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD.full_name = ".ftcfg.magic_combination_cfg.prop_type"
+MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD.number = 5
+MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD.index = 4
+MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD.label = 2
+MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD.has_default_value = false
+MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD.default_value = nil
+MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPOPTYPE
+MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD.type = 14
+MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD.cpp_type = 8
+
+MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD.name = "att_type"
+MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD.full_name = ".ftcfg.magic_combination_cfg.att_type"
+MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD.number = 6
+MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD.index = 5
+MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD.label = 2
+MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD.has_default_value = false
+MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD.default_value = nil
+MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPTYPE
+MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD.type = 14
+MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD.cpp_type = 8
+
+MAGIC_COMBINATION_CFG_ATT_VALUE_FIELD.name = "att_value"
+MAGIC_COMBINATION_CFG_ATT_VALUE_FIELD.full_name = ".ftcfg.magic_combination_cfg.att_value"
+MAGIC_COMBINATION_CFG_ATT_VALUE_FIELD.number = 7
+MAGIC_COMBINATION_CFG_ATT_VALUE_FIELD.index = 6
+MAGIC_COMBINATION_CFG_ATT_VALUE_FIELD.label = 2
+MAGIC_COMBINATION_CFG_ATT_VALUE_FIELD.has_default_value = false
+MAGIC_COMBINATION_CFG_ATT_VALUE_FIELD.default_value = 0.0
+MAGIC_COMBINATION_CFG_ATT_VALUE_FIELD.type = 2
+MAGIC_COMBINATION_CFG_ATT_VALUE_FIELD.cpp_type = 6
+
+MAGIC_COMBINATION_CFG_MG_NAME_FIELD.name = "mg_name"
+MAGIC_COMBINATION_CFG_MG_NAME_FIELD.full_name = ".ftcfg.magic_combination_cfg.mg_name"
+MAGIC_COMBINATION_CFG_MG_NAME_FIELD.number = 8
+MAGIC_COMBINATION_CFG_MG_NAME_FIELD.index = 7
+MAGIC_COMBINATION_CFG_MG_NAME_FIELD.label = 2
+MAGIC_COMBINATION_CFG_MG_NAME_FIELD.has_default_value = false
+MAGIC_COMBINATION_CFG_MG_NAME_FIELD.default_value = ""
+MAGIC_COMBINATION_CFG_MG_NAME_FIELD.type = 9
+MAGIC_COMBINATION_CFG_MG_NAME_FIELD.cpp_type = 9
+
+MAGIC_COMBINATION_CFG.name = "magic_combination_cfg"
+MAGIC_COMBINATION_CFG.full_name = ".ftcfg.magic_combination_cfg"
+MAGIC_COMBINATION_CFG.nested_types = {}
+MAGIC_COMBINATION_CFG.enum_types = {}
+MAGIC_COMBINATION_CFG.fields = {MAGIC_COMBINATION_CFG_ID_FIELD, MAGIC_COMBINATION_CFG_COMBINATION_LEVEL_FIELD, MAGIC_COMBINATION_CFG_MAGIC_IDS_FIELD, MAGIC_COMBINATION_CFG_MAGIC_NUM_FIELD, MAGIC_COMBINATION_CFG_PROP_TYPE_FIELD, MAGIC_COMBINATION_CFG_ATT_TYPE_FIELD, MAGIC_COMBINATION_CFG_ATT_VALUE_FIELD, MAGIC_COMBINATION_CFG_MG_NAME_FIELD}
+MAGIC_COMBINATION_CFG.is_extendable = false
+MAGIC_COMBINATION_CFG.extensions = {}
+MAGIC_COMBINATION_CFGS_ITEMS_FIELD.name = "items"
+MAGIC_COMBINATION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.magic_combination_cfgs.items"
+MAGIC_COMBINATION_CFGS_ITEMS_FIELD.number = 1
+MAGIC_COMBINATION_CFGS_ITEMS_FIELD.index = 0
+MAGIC_COMBINATION_CFGS_ITEMS_FIELD.label = 3
+MAGIC_COMBINATION_CFGS_ITEMS_FIELD.has_default_value = false
+MAGIC_COMBINATION_CFGS_ITEMS_FIELD.default_value = {}
+MAGIC_COMBINATION_CFGS_ITEMS_FIELD.message_type = MAGIC_COMBINATION_CFG
+MAGIC_COMBINATION_CFGS_ITEMS_FIELD.type = 11
+MAGIC_COMBINATION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MAGIC_COMBINATION_CFGS.name = "magic_combination_cfgs"
+MAGIC_COMBINATION_CFGS.full_name = ".ftcfg.magic_combination_cfgs"
+MAGIC_COMBINATION_CFGS.nested_types = {}
+MAGIC_COMBINATION_CFGS.enum_types = {}
+MAGIC_COMBINATION_CFGS.fields = {MAGIC_COMBINATION_CFGS_ITEMS_FIELD}
+MAGIC_COMBINATION_CFGS.is_extendable = false
+MAGIC_COMBINATION_CFGS.extensions = {}
+CONVOY_BIAOCHE_CFG_ID_FIELD.name = "id"
+CONVOY_BIAOCHE_CFG_ID_FIELD.full_name = ".ftcfg.convoy_biaoche_cfg.id"
+CONVOY_BIAOCHE_CFG_ID_FIELD.number = 1
+CONVOY_BIAOCHE_CFG_ID_FIELD.index = 0
+CONVOY_BIAOCHE_CFG_ID_FIELD.label = 2
+CONVOY_BIAOCHE_CFG_ID_FIELD.has_default_value = false
+CONVOY_BIAOCHE_CFG_ID_FIELD.default_value = 0
+CONVOY_BIAOCHE_CFG_ID_FIELD.type = 5
+CONVOY_BIAOCHE_CFG_ID_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD.name = "activity_type"
+CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD.full_name = ".ftcfg.convoy_biaoche_cfg.activity_type"
+CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD.number = 2
+CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD.index = 1
+CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD.label = 2
+CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD.has_default_value = false
+CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD.default_value = nil
+CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD.enum_type = config_predefine_pb.EBATTLEACTIVITYTYPE
+CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD.type = 14
+CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD.cpp_type = 8
+
+CONVOY_BIAOCHE_CFG_FIRST_START_TIME_FIELD.name = "first_start_time"
+CONVOY_BIAOCHE_CFG_FIRST_START_TIME_FIELD.full_name = ".ftcfg.convoy_biaoche_cfg.first_start_time"
+CONVOY_BIAOCHE_CFG_FIRST_START_TIME_FIELD.number = 3
+CONVOY_BIAOCHE_CFG_FIRST_START_TIME_FIELD.index = 2
+CONVOY_BIAOCHE_CFG_FIRST_START_TIME_FIELD.label = 2
+CONVOY_BIAOCHE_CFG_FIRST_START_TIME_FIELD.has_default_value = false
+CONVOY_BIAOCHE_CFG_FIRST_START_TIME_FIELD.default_value = ""
+CONVOY_BIAOCHE_CFG_FIRST_START_TIME_FIELD.type = 9
+CONVOY_BIAOCHE_CFG_FIRST_START_TIME_FIELD.cpp_type = 9
+
+CONVOY_BIAOCHE_CFG_FIRST_END_TIME_FIELD.name = "first_end_time"
+CONVOY_BIAOCHE_CFG_FIRST_END_TIME_FIELD.full_name = ".ftcfg.convoy_biaoche_cfg.first_end_time"
+CONVOY_BIAOCHE_CFG_FIRST_END_TIME_FIELD.number = 4
+CONVOY_BIAOCHE_CFG_FIRST_END_TIME_FIELD.index = 3
+CONVOY_BIAOCHE_CFG_FIRST_END_TIME_FIELD.label = 2
+CONVOY_BIAOCHE_CFG_FIRST_END_TIME_FIELD.has_default_value = false
+CONVOY_BIAOCHE_CFG_FIRST_END_TIME_FIELD.default_value = ""
+CONVOY_BIAOCHE_CFG_FIRST_END_TIME_FIELD.type = 9
+CONVOY_BIAOCHE_CFG_FIRST_END_TIME_FIELD.cpp_type = 9
+
+CONVOY_BIAOCHE_CFG_SECOND_START_TIME_FIELD.name = "second_start_time"
+CONVOY_BIAOCHE_CFG_SECOND_START_TIME_FIELD.full_name = ".ftcfg.convoy_biaoche_cfg.second_start_time"
+CONVOY_BIAOCHE_CFG_SECOND_START_TIME_FIELD.number = 5
+CONVOY_BIAOCHE_CFG_SECOND_START_TIME_FIELD.index = 4
+CONVOY_BIAOCHE_CFG_SECOND_START_TIME_FIELD.label = 2
+CONVOY_BIAOCHE_CFG_SECOND_START_TIME_FIELD.has_default_value = false
+CONVOY_BIAOCHE_CFG_SECOND_START_TIME_FIELD.default_value = ""
+CONVOY_BIAOCHE_CFG_SECOND_START_TIME_FIELD.type = 9
+CONVOY_BIAOCHE_CFG_SECOND_START_TIME_FIELD.cpp_type = 9
+
+CONVOY_BIAOCHE_CFG_SECOND_END_TIME_FIELD.name = "second_end_time"
+CONVOY_BIAOCHE_CFG_SECOND_END_TIME_FIELD.full_name = ".ftcfg.convoy_biaoche_cfg.second_end_time"
+CONVOY_BIAOCHE_CFG_SECOND_END_TIME_FIELD.number = 6
+CONVOY_BIAOCHE_CFG_SECOND_END_TIME_FIELD.index = 5
+CONVOY_BIAOCHE_CFG_SECOND_END_TIME_FIELD.label = 2
+CONVOY_BIAOCHE_CFG_SECOND_END_TIME_FIELD.has_default_value = false
+CONVOY_BIAOCHE_CFG_SECOND_END_TIME_FIELD.default_value = ""
+CONVOY_BIAOCHE_CFG_SECOND_END_TIME_FIELD.type = 9
+CONVOY_BIAOCHE_CFG_SECOND_END_TIME_FIELD.cpp_type = 9
+
+CONVOY_BIAOCHE_CFG_SCENE_ID_FIELD.name = "scene_id"
+CONVOY_BIAOCHE_CFG_SCENE_ID_FIELD.full_name = ".ftcfg.convoy_biaoche_cfg.scene_id"
+CONVOY_BIAOCHE_CFG_SCENE_ID_FIELD.number = 7
+CONVOY_BIAOCHE_CFG_SCENE_ID_FIELD.index = 6
+CONVOY_BIAOCHE_CFG_SCENE_ID_FIELD.label = 3
+CONVOY_BIAOCHE_CFG_SCENE_ID_FIELD.has_default_value = false
+CONVOY_BIAOCHE_CFG_SCENE_ID_FIELD.default_value = {}
+CONVOY_BIAOCHE_CFG_SCENE_ID_FIELD.type = 5
+CONVOY_BIAOCHE_CFG_SCENE_ID_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_CFG_WEEK_LOOP_FIELD.name = "week_loop"
+CONVOY_BIAOCHE_CFG_WEEK_LOOP_FIELD.full_name = ".ftcfg.convoy_biaoche_cfg.week_loop"
+CONVOY_BIAOCHE_CFG_WEEK_LOOP_FIELD.number = 8
+CONVOY_BIAOCHE_CFG_WEEK_LOOP_FIELD.index = 7
+CONVOY_BIAOCHE_CFG_WEEK_LOOP_FIELD.label = 2
+CONVOY_BIAOCHE_CFG_WEEK_LOOP_FIELD.has_default_value = false
+CONVOY_BIAOCHE_CFG_WEEK_LOOP_FIELD.default_value = 0
+CONVOY_BIAOCHE_CFG_WEEK_LOOP_FIELD.type = 5
+CONVOY_BIAOCHE_CFG_WEEK_LOOP_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_CFG.name = "convoy_biaoche_cfg"
+CONVOY_BIAOCHE_CFG.full_name = ".ftcfg.convoy_biaoche_cfg"
+CONVOY_BIAOCHE_CFG.nested_types = {}
+CONVOY_BIAOCHE_CFG.enum_types = {}
+CONVOY_BIAOCHE_CFG.fields = {CONVOY_BIAOCHE_CFG_ID_FIELD, CONVOY_BIAOCHE_CFG_ACTIVITY_TYPE_FIELD, CONVOY_BIAOCHE_CFG_FIRST_START_TIME_FIELD, CONVOY_BIAOCHE_CFG_FIRST_END_TIME_FIELD, CONVOY_BIAOCHE_CFG_SECOND_START_TIME_FIELD, CONVOY_BIAOCHE_CFG_SECOND_END_TIME_FIELD, CONVOY_BIAOCHE_CFG_SCENE_ID_FIELD, CONVOY_BIAOCHE_CFG_WEEK_LOOP_FIELD}
+CONVOY_BIAOCHE_CFG.is_extendable = false
+CONVOY_BIAOCHE_CFG.extensions = {}
+CONVOY_BIAOCHE_CFGS_ITEMS_FIELD.name = "items"
+CONVOY_BIAOCHE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.convoy_biaoche_cfgs.items"
+CONVOY_BIAOCHE_CFGS_ITEMS_FIELD.number = 1
+CONVOY_BIAOCHE_CFGS_ITEMS_FIELD.index = 0
+CONVOY_BIAOCHE_CFGS_ITEMS_FIELD.label = 3
+CONVOY_BIAOCHE_CFGS_ITEMS_FIELD.has_default_value = false
+CONVOY_BIAOCHE_CFGS_ITEMS_FIELD.default_value = {}
+CONVOY_BIAOCHE_CFGS_ITEMS_FIELD.message_type = CONVOY_BIAOCHE_CFG
+CONVOY_BIAOCHE_CFGS_ITEMS_FIELD.type = 11
+CONVOY_BIAOCHE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CONVOY_BIAOCHE_CFGS.name = "convoy_biaoche_cfgs"
+CONVOY_BIAOCHE_CFGS.full_name = ".ftcfg.convoy_biaoche_cfgs"
+CONVOY_BIAOCHE_CFGS.nested_types = {}
+CONVOY_BIAOCHE_CFGS.enum_types = {}
+CONVOY_BIAOCHE_CFGS.fields = {CONVOY_BIAOCHE_CFGS_ITEMS_FIELD}
+CONVOY_BIAOCHE_CFGS.is_extendable = false
+CONVOY_BIAOCHE_CFGS.extensions = {}
+CONVOY_BIAOCHE_SCENE_CFG_ID_FIELD.name = "id"
+CONVOY_BIAOCHE_SCENE_CFG_ID_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.id"
+CONVOY_BIAOCHE_SCENE_CFG_ID_FIELD.number = 1
+CONVOY_BIAOCHE_SCENE_CFG_ID_FIELD.index = 0
+CONVOY_BIAOCHE_SCENE_CFG_ID_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_ID_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_ID_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_ID_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_ID_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MIN_FIELD.name = "level_min"
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MIN_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.level_min"
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MIN_FIELD.number = 2
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MIN_FIELD.index = 1
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MIN_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MIN_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MIN_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MIN_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MIN_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MAX_FIELD.name = "level_max"
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MAX_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.level_max"
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MAX_FIELD.number = 3
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MAX_FIELD.index = 2
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MAX_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MAX_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MAX_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MAX_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MAX_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_RATE_FIELD.name = "mission_rate"
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_RATE_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.mission_rate"
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_RATE_FIELD.number = 4
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_RATE_FIELD.index = 3
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_RATE_FIELD.label = 3
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_RATE_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_RATE_FIELD.default_value = {}
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_RATE_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_RATE_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_MISSION_ID_FIELD.name = "person_mission_id"
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_MISSION_ID_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.person_mission_id"
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_MISSION_ID_FIELD.number = 5
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_MISSION_ID_FIELD.index = 4
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_MISSION_ID_FIELD.label = 3
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_MISSION_ID_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_MISSION_ID_FIELD.default_value = {}
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_MISSION_ID_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_MISSION_ID_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_MISSION_ID_FIELD.name = "team_mission_id"
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_MISSION_ID_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.team_mission_id"
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_MISSION_ID_FIELD.number = 6
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_MISSION_ID_FIELD.index = 5
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_MISSION_ID_FIELD.label = 3
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_MISSION_ID_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_MISSION_ID_FIELD.default_value = {}
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_MISSION_ID_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_MISSION_ID_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NPC_DISTANCE_FIELD.name = "mission_npc_distance"
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NPC_DISTANCE_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.mission_npc_distance"
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NPC_DISTANCE_FIELD.number = 7
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NPC_DISTANCE_FIELD.index = 6
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NPC_DISTANCE_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NPC_DISTANCE_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NPC_DISTANCE_FIELD.default_value = 0.0
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NPC_DISTANCE_FIELD.type = 1
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NPC_DISTANCE_FIELD.cpp_type = 5
+
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NEED_ITEMID_FIELD.name = "mission_need_itemid"
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NEED_ITEMID_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.mission_need_itemid"
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NEED_ITEMID_FIELD.number = 8
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NEED_ITEMID_FIELD.index = 7
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NEED_ITEMID_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NEED_ITEMID_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NEED_ITEMID_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NEED_ITEMID_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_MISSION_NEED_ITEMID_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_DISTANCE_LIMIT_FIELD.name = "escort_distance_limit"
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_DISTANCE_LIMIT_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.escort_distance_limit"
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_DISTANCE_LIMIT_FIELD.number = 9
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_DISTANCE_LIMIT_FIELD.index = 8
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_DISTANCE_LIMIT_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_DISTANCE_LIMIT_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_DISTANCE_LIMIT_FIELD.default_value = 0.0
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_DISTANCE_LIMIT_FIELD.type = 1
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_DISTANCE_LIMIT_FIELD.cpp_type = 5
+
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_TIME_LIMIT_FIELD.name = "escort_time_limit"
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_TIME_LIMIT_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.escort_time_limit"
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_TIME_LIMIT_FIELD.number = 10
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_TIME_LIMIT_FIELD.index = 9
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_TIME_LIMIT_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_TIME_LIMIT_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_TIME_LIMIT_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_TIME_LIMIT_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_ESCORT_TIME_LIMIT_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_RIDE_LIMIT_FIELD.name = "ride_limit"
+CONVOY_BIAOCHE_SCENE_CFG_RIDE_LIMIT_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.ride_limit"
+CONVOY_BIAOCHE_SCENE_CFG_RIDE_LIMIT_FIELD.number = 11
+CONVOY_BIAOCHE_SCENE_CFG_RIDE_LIMIT_FIELD.index = 10
+CONVOY_BIAOCHE_SCENE_CFG_RIDE_LIMIT_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_RIDE_LIMIT_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_RIDE_LIMIT_FIELD.default_value = 0.0
+CONVOY_BIAOCHE_SCENE_CFG_RIDE_LIMIT_FIELD.type = 1
+CONVOY_BIAOCHE_SCENE_CFG_RIDE_LIMIT_FIELD.cpp_type = 5
+
+CONVOY_BIAOCHE_SCENE_CFG_NODE_STAY_TIME_FIELD.name = "node_stay_time"
+CONVOY_BIAOCHE_SCENE_CFG_NODE_STAY_TIME_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.node_stay_time"
+CONVOY_BIAOCHE_SCENE_CFG_NODE_STAY_TIME_FIELD.number = 12
+CONVOY_BIAOCHE_SCENE_CFG_NODE_STAY_TIME_FIELD.index = 11
+CONVOY_BIAOCHE_SCENE_CFG_NODE_STAY_TIME_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_NODE_STAY_TIME_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_NODE_STAY_TIME_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_NODE_STAY_TIME_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_NODE_STAY_TIME_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_DISTANCE_LIMIT_FIELD.name = "same_camp_distance_limit"
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_DISTANCE_LIMIT_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.same_camp_distance_limit"
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_DISTANCE_LIMIT_FIELD.number = 13
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_DISTANCE_LIMIT_FIELD.index = 12
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_DISTANCE_LIMIT_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_DISTANCE_LIMIT_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_DISTANCE_LIMIT_FIELD.default_value = 0.0
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_DISTANCE_LIMIT_FIELD.type = 1
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_DISTANCE_LIMIT_FIELD.cpp_type = 5
+
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_TIME_LIMIT_FIELD.name = "same_camp_time_limit"
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_TIME_LIMIT_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.same_camp_time_limit"
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_TIME_LIMIT_FIELD.number = 14
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_TIME_LIMIT_FIELD.index = 13
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_TIME_LIMIT_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_TIME_LIMIT_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_TIME_LIMIT_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_TIME_LIMIT_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_TIME_LIMIT_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_DISTANCE_LIMIT_FIELD.name = "robber_distance_limit"
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_DISTANCE_LIMIT_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.robber_distance_limit"
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_DISTANCE_LIMIT_FIELD.number = 15
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_DISTANCE_LIMIT_FIELD.index = 14
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_DISTANCE_LIMIT_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_DISTANCE_LIMIT_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_DISTANCE_LIMIT_FIELD.default_value = 0.0
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_DISTANCE_LIMIT_FIELD.type = 1
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_DISTANCE_LIMIT_FIELD.cpp_type = 5
+
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_TIME_LIMIT_FIELD.name = "robber_time_limit"
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_TIME_LIMIT_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.robber_time_limit"
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_TIME_LIMIT_FIELD.number = 16
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_TIME_LIMIT_FIELD.index = 15
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_TIME_LIMIT_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_TIME_LIMIT_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_TIME_LIMIT_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_TIME_LIMIT_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_ROBBER_TIME_LIMIT_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_COMPLETE_TIME_LIMIT_FIELD.name = "complete_time_limit"
+CONVOY_BIAOCHE_SCENE_CFG_COMPLETE_TIME_LIMIT_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.complete_time_limit"
+CONVOY_BIAOCHE_SCENE_CFG_COMPLETE_TIME_LIMIT_FIELD.number = 17
+CONVOY_BIAOCHE_SCENE_CFG_COMPLETE_TIME_LIMIT_FIELD.index = 16
+CONVOY_BIAOCHE_SCENE_CFG_COMPLETE_TIME_LIMIT_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_COMPLETE_TIME_LIMIT_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_COMPLETE_TIME_LIMIT_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_COMPLETE_TIME_LIMIT_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_COMPLETE_TIME_LIMIT_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_CAMP_REWARD_FIELD.name = "person_camp_reward"
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_CAMP_REWARD_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.person_camp_reward"
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_CAMP_REWARD_FIELD.number = 18
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_CAMP_REWARD_FIELD.index = 17
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_CAMP_REWARD_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_CAMP_REWARD_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_CAMP_REWARD_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_CAMP_REWARD_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_CAMP_REWARD_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_ENEMY_REWARD_FIELD.name = "person_enemy_reward"
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_ENEMY_REWARD_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.person_enemy_reward"
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_ENEMY_REWARD_FIELD.number = 19
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_ENEMY_REWARD_FIELD.index = 18
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_ENEMY_REWARD_FIELD.label = 3
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_ENEMY_REWARD_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_ENEMY_REWARD_FIELD.default_value = {}
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_ENEMY_REWARD_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_PERSON_ENEMY_REWARD_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_CAMP_REWARD_FIELD.name = "team_camp_reward"
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_CAMP_REWARD_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.team_camp_reward"
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_CAMP_REWARD_FIELD.number = 20
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_CAMP_REWARD_FIELD.index = 19
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_CAMP_REWARD_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_CAMP_REWARD_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_CAMP_REWARD_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_CAMP_REWARD_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_CAMP_REWARD_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_ENEMY_REWARD_FIELD.name = "team_enemy_reward"
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_ENEMY_REWARD_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.team_enemy_reward"
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_ENEMY_REWARD_FIELD.number = 21
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_ENEMY_REWARD_FIELD.index = 20
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_ENEMY_REWARD_FIELD.label = 3
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_ENEMY_REWARD_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_ENEMY_REWARD_FIELD.default_value = {}
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_ENEMY_REWARD_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_TEAM_ENEMY_REWARD_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_GOLD_LIMIT_FIELD.name = "gold_limit"
+CONVOY_BIAOCHE_SCENE_CFG_GOLD_LIMIT_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.gold_limit"
+CONVOY_BIAOCHE_SCENE_CFG_GOLD_LIMIT_FIELD.number = 22
+CONVOY_BIAOCHE_SCENE_CFG_GOLD_LIMIT_FIELD.index = 21
+CONVOY_BIAOCHE_SCENE_CFG_GOLD_LIMIT_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_GOLD_LIMIT_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_GOLD_LIMIT_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_GOLD_LIMIT_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_GOLD_LIMIT_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_SILVER_LIMIT_FIELD.name = "silver_limit"
+CONVOY_BIAOCHE_SCENE_CFG_SILVER_LIMIT_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.silver_limit"
+CONVOY_BIAOCHE_SCENE_CFG_SILVER_LIMIT_FIELD.number = 23
+CONVOY_BIAOCHE_SCENE_CFG_SILVER_LIMIT_FIELD.index = 22
+CONVOY_BIAOCHE_SCENE_CFG_SILVER_LIMIT_FIELD.label = 2
+CONVOY_BIAOCHE_SCENE_CFG_SILVER_LIMIT_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_SILVER_LIMIT_FIELD.default_value = 0
+CONVOY_BIAOCHE_SCENE_CFG_SILVER_LIMIT_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_SILVER_LIMIT_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_FREE_POS_FIELD.name = "free_pos"
+CONVOY_BIAOCHE_SCENE_CFG_FREE_POS_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.free_pos"
+CONVOY_BIAOCHE_SCENE_CFG_FREE_POS_FIELD.number = 24
+CONVOY_BIAOCHE_SCENE_CFG_FREE_POS_FIELD.index = 23
+CONVOY_BIAOCHE_SCENE_CFG_FREE_POS_FIELD.label = 3
+CONVOY_BIAOCHE_SCENE_CFG_FREE_POS_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_FREE_POS_FIELD.default_value = {}
+CONVOY_BIAOCHE_SCENE_CFG_FREE_POS_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_FREE_POS_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG_ALLIANCE_POS_FIELD.name = "alliance_pos"
+CONVOY_BIAOCHE_SCENE_CFG_ALLIANCE_POS_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfg.alliance_pos"
+CONVOY_BIAOCHE_SCENE_CFG_ALLIANCE_POS_FIELD.number = 25
+CONVOY_BIAOCHE_SCENE_CFG_ALLIANCE_POS_FIELD.index = 24
+CONVOY_BIAOCHE_SCENE_CFG_ALLIANCE_POS_FIELD.label = 3
+CONVOY_BIAOCHE_SCENE_CFG_ALLIANCE_POS_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFG_ALLIANCE_POS_FIELD.default_value = {}
+CONVOY_BIAOCHE_SCENE_CFG_ALLIANCE_POS_FIELD.type = 5
+CONVOY_BIAOCHE_SCENE_CFG_ALLIANCE_POS_FIELD.cpp_type = 1
+
+CONVOY_BIAOCHE_SCENE_CFG.name = "convoy_biaoche_scene_cfg"
+CONVOY_BIAOCHE_SCENE_CFG.full_name = ".ftcfg.convoy_biaoche_scene_cfg"
+CONVOY_BIAOCHE_SCENE_CFG.nested_types = {}
+CONVOY_BIAOCHE_SCENE_CFG.enum_types = {}
+CONVOY_BIAOCHE_SCENE_CFG.fields = {CONVOY_BIAOCHE_SCENE_CFG_ID_FIELD, CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MIN_FIELD, CONVOY_BIAOCHE_SCENE_CFG_LEVEL_MAX_FIELD, CONVOY_BIAOCHE_SCENE_CFG_MISSION_RATE_FIELD, CONVOY_BIAOCHE_SCENE_CFG_PERSON_MISSION_ID_FIELD, CONVOY_BIAOCHE_SCENE_CFG_TEAM_MISSION_ID_FIELD, CONVOY_BIAOCHE_SCENE_CFG_MISSION_NPC_DISTANCE_FIELD, CONVOY_BIAOCHE_SCENE_CFG_MISSION_NEED_ITEMID_FIELD, CONVOY_BIAOCHE_SCENE_CFG_ESCORT_DISTANCE_LIMIT_FIELD, CONVOY_BIAOCHE_SCENE_CFG_ESCORT_TIME_LIMIT_FIELD, CONVOY_BIAOCHE_SCENE_CFG_RIDE_LIMIT_FIELD, CONVOY_BIAOCHE_SCENE_CFG_NODE_STAY_TIME_FIELD, CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_DISTANCE_LIMIT_FIELD, CONVOY_BIAOCHE_SCENE_CFG_SAME_CAMP_TIME_LIMIT_FIELD, CONVOY_BIAOCHE_SCENE_CFG_ROBBER_DISTANCE_LIMIT_FIELD, CONVOY_BIAOCHE_SCENE_CFG_ROBBER_TIME_LIMIT_FIELD, CONVOY_BIAOCHE_SCENE_CFG_COMPLETE_TIME_LIMIT_FIELD, CONVOY_BIAOCHE_SCENE_CFG_PERSON_CAMP_REWARD_FIELD, CONVOY_BIAOCHE_SCENE_CFG_PERSON_ENEMY_REWARD_FIELD, CONVOY_BIAOCHE_SCENE_CFG_TEAM_CAMP_REWARD_FIELD, CONVOY_BIAOCHE_SCENE_CFG_TEAM_ENEMY_REWARD_FIELD, CONVOY_BIAOCHE_SCENE_CFG_GOLD_LIMIT_FIELD, CONVOY_BIAOCHE_SCENE_CFG_SILVER_LIMIT_FIELD, CONVOY_BIAOCHE_SCENE_CFG_FREE_POS_FIELD, CONVOY_BIAOCHE_SCENE_CFG_ALLIANCE_POS_FIELD}
+CONVOY_BIAOCHE_SCENE_CFG.is_extendable = false
+CONVOY_BIAOCHE_SCENE_CFG.extensions = {}
+CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD.name = "items"
+CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.convoy_biaoche_scene_cfgs.items"
+CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD.number = 1
+CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD.index = 0
+CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD.label = 3
+CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD.has_default_value = false
+CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD.default_value = {}
+CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD.message_type = CONVOY_BIAOCHE_SCENE_CFG
+CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD.type = 11
+CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CONVOY_BIAOCHE_SCENE_CFGS.name = "convoy_biaoche_scene_cfgs"
+CONVOY_BIAOCHE_SCENE_CFGS.full_name = ".ftcfg.convoy_biaoche_scene_cfgs"
+CONVOY_BIAOCHE_SCENE_CFGS.nested_types = {}
+CONVOY_BIAOCHE_SCENE_CFGS.enum_types = {}
+CONVOY_BIAOCHE_SCENE_CFGS.fields = {CONVOY_BIAOCHE_SCENE_CFGS_ITEMS_FIELD}
+CONVOY_BIAOCHE_SCENE_CFGS.is_extendable = false
+CONVOY_BIAOCHE_SCENE_CFGS.extensions = {}
+ACTIVITY_INFO_CFG_ID_FIELD.name = "id"
+ACTIVITY_INFO_CFG_ID_FIELD.full_name = ".ftcfg.activity_info_cfg.id"
+ACTIVITY_INFO_CFG_ID_FIELD.number = 1
+ACTIVITY_INFO_CFG_ID_FIELD.index = 0
+ACTIVITY_INFO_CFG_ID_FIELD.label = 2
+ACTIVITY_INFO_CFG_ID_FIELD.has_default_value = false
+ACTIVITY_INFO_CFG_ID_FIELD.default_value = 0
+ACTIVITY_INFO_CFG_ID_FIELD.type = 5
+ACTIVITY_INFO_CFG_ID_FIELD.cpp_type = 1
+
+ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD.name = "activity_type"
+ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD.full_name = ".ftcfg.activity_info_cfg.activity_type"
+ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD.number = 2
+ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD.index = 1
+ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD.label = 2
+ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD.has_default_value = false
+ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD.default_value = nil
+ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD.enum_type = config_predefine_pb.EBATTLEACTIVITYTYPE
+ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD.type = 14
+ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD.cpp_type = 8
+
+ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD.name = "func_type"
+ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD.full_name = ".ftcfg.activity_info_cfg.func_type"
+ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD.number = 3
+ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD.index = 2
+ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD.label = 2
+ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD.has_default_value = false
+ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD.default_value = nil
+ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD.enum_type = config_predefine_pb.EFUNCTYPE
+ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD.type = 14
+ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD.cpp_type = 8
+
+ACTIVITY_INFO_CFG_ENTRY_TIME_FIELD.name = "entry_time"
+ACTIVITY_INFO_CFG_ENTRY_TIME_FIELD.full_name = ".ftcfg.activity_info_cfg.entry_time"
+ACTIVITY_INFO_CFG_ENTRY_TIME_FIELD.number = 4
+ACTIVITY_INFO_CFG_ENTRY_TIME_FIELD.index = 3
+ACTIVITY_INFO_CFG_ENTRY_TIME_FIELD.label = 2
+ACTIVITY_INFO_CFG_ENTRY_TIME_FIELD.has_default_value = false
+ACTIVITY_INFO_CFG_ENTRY_TIME_FIELD.default_value = ""
+ACTIVITY_INFO_CFG_ENTRY_TIME_FIELD.type = 9
+ACTIVITY_INFO_CFG_ENTRY_TIME_FIELD.cpp_type = 9
+
+ACTIVITY_INFO_CFG_ENTRY_END_TIME_FIELD.name = "entry_end_time"
+ACTIVITY_INFO_CFG_ENTRY_END_TIME_FIELD.full_name = ".ftcfg.activity_info_cfg.entry_end_time"
+ACTIVITY_INFO_CFG_ENTRY_END_TIME_FIELD.number = 5
+ACTIVITY_INFO_CFG_ENTRY_END_TIME_FIELD.index = 4
+ACTIVITY_INFO_CFG_ENTRY_END_TIME_FIELD.label = 2
+ACTIVITY_INFO_CFG_ENTRY_END_TIME_FIELD.has_default_value = false
+ACTIVITY_INFO_CFG_ENTRY_END_TIME_FIELD.default_value = ""
+ACTIVITY_INFO_CFG_ENTRY_END_TIME_FIELD.type = 9
+ACTIVITY_INFO_CFG_ENTRY_END_TIME_FIELD.cpp_type = 9
+
+ACTIVITY_INFO_CFG_START_TIME_FIELD.name = "start_time"
+ACTIVITY_INFO_CFG_START_TIME_FIELD.full_name = ".ftcfg.activity_info_cfg.start_time"
+ACTIVITY_INFO_CFG_START_TIME_FIELD.number = 6
+ACTIVITY_INFO_CFG_START_TIME_FIELD.index = 5
+ACTIVITY_INFO_CFG_START_TIME_FIELD.label = 2
+ACTIVITY_INFO_CFG_START_TIME_FIELD.has_default_value = false
+ACTIVITY_INFO_CFG_START_TIME_FIELD.default_value = ""
+ACTIVITY_INFO_CFG_START_TIME_FIELD.type = 9
+ACTIVITY_INFO_CFG_START_TIME_FIELD.cpp_type = 9
+
+ACTIVITY_INFO_CFG_END_TIME_FIELD.name = "end_time"
+ACTIVITY_INFO_CFG_END_TIME_FIELD.full_name = ".ftcfg.activity_info_cfg.end_time"
+ACTIVITY_INFO_CFG_END_TIME_FIELD.number = 7
+ACTIVITY_INFO_CFG_END_TIME_FIELD.index = 6
+ACTIVITY_INFO_CFG_END_TIME_FIELD.label = 2
+ACTIVITY_INFO_CFG_END_TIME_FIELD.has_default_value = false
+ACTIVITY_INFO_CFG_END_TIME_FIELD.default_value = ""
+ACTIVITY_INFO_CFG_END_TIME_FIELD.type = 9
+ACTIVITY_INFO_CFG_END_TIME_FIELD.cpp_type = 9
+
+ACTIVITY_INFO_CFG_LEVEL_LIMIT_FIELD.name = "level_limit"
+ACTIVITY_INFO_CFG_LEVEL_LIMIT_FIELD.full_name = ".ftcfg.activity_info_cfg.level_limit"
+ACTIVITY_INFO_CFG_LEVEL_LIMIT_FIELD.number = 8
+ACTIVITY_INFO_CFG_LEVEL_LIMIT_FIELD.index = 7
+ACTIVITY_INFO_CFG_LEVEL_LIMIT_FIELD.label = 2
+ACTIVITY_INFO_CFG_LEVEL_LIMIT_FIELD.has_default_value = false
+ACTIVITY_INFO_CFG_LEVEL_LIMIT_FIELD.default_value = 0
+ACTIVITY_INFO_CFG_LEVEL_LIMIT_FIELD.type = 5
+ACTIVITY_INFO_CFG_LEVEL_LIMIT_FIELD.cpp_type = 1
+
+ACTIVITY_INFO_CFG_TIMES_FIELD.name = "times"
+ACTIVITY_INFO_CFG_TIMES_FIELD.full_name = ".ftcfg.activity_info_cfg.times"
+ACTIVITY_INFO_CFG_TIMES_FIELD.number = 9
+ACTIVITY_INFO_CFG_TIMES_FIELD.index = 8
+ACTIVITY_INFO_CFG_TIMES_FIELD.label = 2
+ACTIVITY_INFO_CFG_TIMES_FIELD.has_default_value = false
+ACTIVITY_INFO_CFG_TIMES_FIELD.default_value = 0
+ACTIVITY_INFO_CFG_TIMES_FIELD.type = 5
+ACTIVITY_INFO_CFG_TIMES_FIELD.cpp_type = 1
+
+ACTIVITY_INFO_CFG_WEEK_LOOP_FIELD.name = "week_loop"
+ACTIVITY_INFO_CFG_WEEK_LOOP_FIELD.full_name = ".ftcfg.activity_info_cfg.week_loop"
+ACTIVITY_INFO_CFG_WEEK_LOOP_FIELD.number = 10
+ACTIVITY_INFO_CFG_WEEK_LOOP_FIELD.index = 9
+ACTIVITY_INFO_CFG_WEEK_LOOP_FIELD.label = 2
+ACTIVITY_INFO_CFG_WEEK_LOOP_FIELD.has_default_value = false
+ACTIVITY_INFO_CFG_WEEK_LOOP_FIELD.default_value = 0
+ACTIVITY_INFO_CFG_WEEK_LOOP_FIELD.type = 5
+ACTIVITY_INFO_CFG_WEEK_LOOP_FIELD.cpp_type = 1
+
+ACTIVITY_INFO_CFG.name = "activity_info_cfg"
+ACTIVITY_INFO_CFG.full_name = ".ftcfg.activity_info_cfg"
+ACTIVITY_INFO_CFG.nested_types = {}
+ACTIVITY_INFO_CFG.enum_types = {}
+ACTIVITY_INFO_CFG.fields = {ACTIVITY_INFO_CFG_ID_FIELD, ACTIVITY_INFO_CFG_ACTIVITY_TYPE_FIELD, ACTIVITY_INFO_CFG_FUNC_TYPE_FIELD, ACTIVITY_INFO_CFG_ENTRY_TIME_FIELD, ACTIVITY_INFO_CFG_ENTRY_END_TIME_FIELD, ACTIVITY_INFO_CFG_START_TIME_FIELD, ACTIVITY_INFO_CFG_END_TIME_FIELD, ACTIVITY_INFO_CFG_LEVEL_LIMIT_FIELD, ACTIVITY_INFO_CFG_TIMES_FIELD, ACTIVITY_INFO_CFG_WEEK_LOOP_FIELD}
+ACTIVITY_INFO_CFG.is_extendable = false
+ACTIVITY_INFO_CFG.extensions = {}
+ACTIVITY_INFO_CFGS_ITEMS_FIELD.name = "items"
+ACTIVITY_INFO_CFGS_ITEMS_FIELD.full_name = ".ftcfg.activity_info_cfgs.items"
+ACTIVITY_INFO_CFGS_ITEMS_FIELD.number = 1
+ACTIVITY_INFO_CFGS_ITEMS_FIELD.index = 0
+ACTIVITY_INFO_CFGS_ITEMS_FIELD.label = 3
+ACTIVITY_INFO_CFGS_ITEMS_FIELD.has_default_value = false
+ACTIVITY_INFO_CFGS_ITEMS_FIELD.default_value = {}
+ACTIVITY_INFO_CFGS_ITEMS_FIELD.message_type = ACTIVITY_INFO_CFG
+ACTIVITY_INFO_CFGS_ITEMS_FIELD.type = 11
+ACTIVITY_INFO_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ACTIVITY_INFO_CFGS.name = "activity_info_cfgs"
+ACTIVITY_INFO_CFGS.full_name = ".ftcfg.activity_info_cfgs"
+ACTIVITY_INFO_CFGS.nested_types = {}
+ACTIVITY_INFO_CFGS.enum_types = {}
+ACTIVITY_INFO_CFGS.fields = {ACTIVITY_INFO_CFGS_ITEMS_FIELD}
+ACTIVITY_INFO_CFGS.is_extendable = false
+ACTIVITY_INFO_CFGS.extensions = {}
+ACTIVITY_ROOMS_CFG_ID_FIELD.name = "id"
+ACTIVITY_ROOMS_CFG_ID_FIELD.full_name = ".ftcfg.activity_rooms_cfg.id"
+ACTIVITY_ROOMS_CFG_ID_FIELD.number = 1
+ACTIVITY_ROOMS_CFG_ID_FIELD.index = 0
+ACTIVITY_ROOMS_CFG_ID_FIELD.label = 2
+ACTIVITY_ROOMS_CFG_ID_FIELD.has_default_value = false
+ACTIVITY_ROOMS_CFG_ID_FIELD.default_value = 0
+ACTIVITY_ROOMS_CFG_ID_FIELD.type = 5
+ACTIVITY_ROOMS_CFG_ID_FIELD.cpp_type = 1
+
+ACTIVITY_ROOMS_CFG_AREA_ID_FIELD.name = "area_id"
+ACTIVITY_ROOMS_CFG_AREA_ID_FIELD.full_name = ".ftcfg.activity_rooms_cfg.area_id"
+ACTIVITY_ROOMS_CFG_AREA_ID_FIELD.number = 2
+ACTIVITY_ROOMS_CFG_AREA_ID_FIELD.index = 1
+ACTIVITY_ROOMS_CFG_AREA_ID_FIELD.label = 2
+ACTIVITY_ROOMS_CFG_AREA_ID_FIELD.has_default_value = false
+ACTIVITY_ROOMS_CFG_AREA_ID_FIELD.default_value = 0
+ACTIVITY_ROOMS_CFG_AREA_ID_FIELD.type = 5
+ACTIVITY_ROOMS_CFG_AREA_ID_FIELD.cpp_type = 1
+
+ACTIVITY_ROOMS_CFG_RED_NUM_FIELD.name = "red_num"
+ACTIVITY_ROOMS_CFG_RED_NUM_FIELD.full_name = ".ftcfg.activity_rooms_cfg.red_num"
+ACTIVITY_ROOMS_CFG_RED_NUM_FIELD.number = 3
+ACTIVITY_ROOMS_CFG_RED_NUM_FIELD.index = 2
+ACTIVITY_ROOMS_CFG_RED_NUM_FIELD.label = 2
+ACTIVITY_ROOMS_CFG_RED_NUM_FIELD.has_default_value = false
+ACTIVITY_ROOMS_CFG_RED_NUM_FIELD.default_value = 0
+ACTIVITY_ROOMS_CFG_RED_NUM_FIELD.type = 5
+ACTIVITY_ROOMS_CFG_RED_NUM_FIELD.cpp_type = 1
+
+ACTIVITY_ROOMS_CFG_BLUE_NUM_FIELD.name = "blue_num"
+ACTIVITY_ROOMS_CFG_BLUE_NUM_FIELD.full_name = ".ftcfg.activity_rooms_cfg.blue_num"
+ACTIVITY_ROOMS_CFG_BLUE_NUM_FIELD.number = 4
+ACTIVITY_ROOMS_CFG_BLUE_NUM_FIELD.index = 3
+ACTIVITY_ROOMS_CFG_BLUE_NUM_FIELD.label = 2
+ACTIVITY_ROOMS_CFG_BLUE_NUM_FIELD.has_default_value = false
+ACTIVITY_ROOMS_CFG_BLUE_NUM_FIELD.default_value = 0
+ACTIVITY_ROOMS_CFG_BLUE_NUM_FIELD.type = 5
+ACTIVITY_ROOMS_CFG_BLUE_NUM_FIELD.cpp_type = 1
+
+ACTIVITY_ROOMS_CFG_MIN_LEVEL_FIELD.name = "min_level"
+ACTIVITY_ROOMS_CFG_MIN_LEVEL_FIELD.full_name = ".ftcfg.activity_rooms_cfg.min_level"
+ACTIVITY_ROOMS_CFG_MIN_LEVEL_FIELD.number = 5
+ACTIVITY_ROOMS_CFG_MIN_LEVEL_FIELD.index = 4
+ACTIVITY_ROOMS_CFG_MIN_LEVEL_FIELD.label = 2
+ACTIVITY_ROOMS_CFG_MIN_LEVEL_FIELD.has_default_value = false
+ACTIVITY_ROOMS_CFG_MIN_LEVEL_FIELD.default_value = 0
+ACTIVITY_ROOMS_CFG_MIN_LEVEL_FIELD.type = 5
+ACTIVITY_ROOMS_CFG_MIN_LEVEL_FIELD.cpp_type = 1
+
+ACTIVITY_ROOMS_CFG_MAX_LEVEL_FIELD.name = "max_level"
+ACTIVITY_ROOMS_CFG_MAX_LEVEL_FIELD.full_name = ".ftcfg.activity_rooms_cfg.max_level"
+ACTIVITY_ROOMS_CFG_MAX_LEVEL_FIELD.number = 6
+ACTIVITY_ROOMS_CFG_MAX_LEVEL_FIELD.index = 5
+ACTIVITY_ROOMS_CFG_MAX_LEVEL_FIELD.label = 2
+ACTIVITY_ROOMS_CFG_MAX_LEVEL_FIELD.has_default_value = false
+ACTIVITY_ROOMS_CFG_MAX_LEVEL_FIELD.default_value = 0
+ACTIVITY_ROOMS_CFG_MAX_LEVEL_FIELD.type = 5
+ACTIVITY_ROOMS_CFG_MAX_LEVEL_FIELD.cpp_type = 1
+
+ACTIVITY_ROOMS_CFG.name = "activity_rooms_cfg"
+ACTIVITY_ROOMS_CFG.full_name = ".ftcfg.activity_rooms_cfg"
+ACTIVITY_ROOMS_CFG.nested_types = {}
+ACTIVITY_ROOMS_CFG.enum_types = {}
+ACTIVITY_ROOMS_CFG.fields = {ACTIVITY_ROOMS_CFG_ID_FIELD, ACTIVITY_ROOMS_CFG_AREA_ID_FIELD, ACTIVITY_ROOMS_CFG_RED_NUM_FIELD, ACTIVITY_ROOMS_CFG_BLUE_NUM_FIELD, ACTIVITY_ROOMS_CFG_MIN_LEVEL_FIELD, ACTIVITY_ROOMS_CFG_MAX_LEVEL_FIELD}
+ACTIVITY_ROOMS_CFG.is_extendable = false
+ACTIVITY_ROOMS_CFG.extensions = {}
+ACTIVITY_ROOMS_CFGS_ITEMS_FIELD.name = "items"
+ACTIVITY_ROOMS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.activity_rooms_cfgs.items"
+ACTIVITY_ROOMS_CFGS_ITEMS_FIELD.number = 1
+ACTIVITY_ROOMS_CFGS_ITEMS_FIELD.index = 0
+ACTIVITY_ROOMS_CFGS_ITEMS_FIELD.label = 3
+ACTIVITY_ROOMS_CFGS_ITEMS_FIELD.has_default_value = false
+ACTIVITY_ROOMS_CFGS_ITEMS_FIELD.default_value = {}
+ACTIVITY_ROOMS_CFGS_ITEMS_FIELD.message_type = ACTIVITY_ROOMS_CFG
+ACTIVITY_ROOMS_CFGS_ITEMS_FIELD.type = 11
+ACTIVITY_ROOMS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ACTIVITY_ROOMS_CFGS.name = "activity_rooms_cfgs"
+ACTIVITY_ROOMS_CFGS.full_name = ".ftcfg.activity_rooms_cfgs"
+ACTIVITY_ROOMS_CFGS.nested_types = {}
+ACTIVITY_ROOMS_CFGS.enum_types = {}
+ACTIVITY_ROOMS_CFGS.fields = {ACTIVITY_ROOMS_CFGS_ITEMS_FIELD}
+ACTIVITY_ROOMS_CFGS.is_extendable = false
+ACTIVITY_ROOMS_CFGS.extensions = {}
+GROW_POINT_CFG_ID_FIELD.name = "id"
+GROW_POINT_CFG_ID_FIELD.full_name = ".ftcfg.grow_point_cfg.id"
+GROW_POINT_CFG_ID_FIELD.number = 1
+GROW_POINT_CFG_ID_FIELD.index = 0
+GROW_POINT_CFG_ID_FIELD.label = 2
+GROW_POINT_CFG_ID_FIELD.has_default_value = false
+GROW_POINT_CFG_ID_FIELD.default_value = 0
+GROW_POINT_CFG_ID_FIELD.type = 5
+GROW_POINT_CFG_ID_FIELD.cpp_type = 1
+
+GROW_POINT_CFG_NAME_FIELD.name = "name"
+GROW_POINT_CFG_NAME_FIELD.full_name = ".ftcfg.grow_point_cfg.name"
+GROW_POINT_CFG_NAME_FIELD.number = 2
+GROW_POINT_CFG_NAME_FIELD.index = 1
+GROW_POINT_CFG_NAME_FIELD.label = 2
+GROW_POINT_CFG_NAME_FIELD.has_default_value = false
+GROW_POINT_CFG_NAME_FIELD.default_value = 0
+GROW_POINT_CFG_NAME_FIELD.type = 5
+GROW_POINT_CFG_NAME_FIELD.cpp_type = 1
+
+GROW_POINT_CFG_MODULE_FIELD.name = "module"
+GROW_POINT_CFG_MODULE_FIELD.full_name = ".ftcfg.grow_point_cfg.module"
+GROW_POINT_CFG_MODULE_FIELD.number = 3
+GROW_POINT_CFG_MODULE_FIELD.index = 2
+GROW_POINT_CFG_MODULE_FIELD.label = 2
+GROW_POINT_CFG_MODULE_FIELD.has_default_value = false
+GROW_POINT_CFG_MODULE_FIELD.default_value = 0
+GROW_POINT_CFG_MODULE_FIELD.type = 5
+GROW_POINT_CFG_MODULE_FIELD.cpp_type = 1
+
+GROW_POINT_CFG_DESC_FIELD.name = "desc"
+GROW_POINT_CFG_DESC_FIELD.full_name = ".ftcfg.grow_point_cfg.desc"
+GROW_POINT_CFG_DESC_FIELD.number = 4
+GROW_POINT_CFG_DESC_FIELD.index = 3
+GROW_POINT_CFG_DESC_FIELD.label = 2
+GROW_POINT_CFG_DESC_FIELD.has_default_value = false
+GROW_POINT_CFG_DESC_FIELD.default_value = 0
+GROW_POINT_CFG_DESC_FIELD.type = 5
+GROW_POINT_CFG_DESC_FIELD.cpp_type = 1
+
+GROW_POINT_CFG_MAP_ID_FIELD.name = "map_id"
+GROW_POINT_CFG_MAP_ID_FIELD.full_name = ".ftcfg.grow_point_cfg.map_id"
+GROW_POINT_CFG_MAP_ID_FIELD.number = 5
+GROW_POINT_CFG_MAP_ID_FIELD.index = 4
+GROW_POINT_CFG_MAP_ID_FIELD.label = 2
+GROW_POINT_CFG_MAP_ID_FIELD.has_default_value = false
+GROW_POINT_CFG_MAP_ID_FIELD.default_value = 0
+GROW_POINT_CFG_MAP_ID_FIELD.type = 5
+GROW_POINT_CFG_MAP_ID_FIELD.cpp_type = 1
+
+GROW_POINT_CFG_POS_X_FIELD.name = "pos_x"
+GROW_POINT_CFG_POS_X_FIELD.full_name = ".ftcfg.grow_point_cfg.pos_x"
+GROW_POINT_CFG_POS_X_FIELD.number = 6
+GROW_POINT_CFG_POS_X_FIELD.index = 5
+GROW_POINT_CFG_POS_X_FIELD.label = 2
+GROW_POINT_CFG_POS_X_FIELD.has_default_value = false
+GROW_POINT_CFG_POS_X_FIELD.default_value = 0.0
+GROW_POINT_CFG_POS_X_FIELD.type = 2
+GROW_POINT_CFG_POS_X_FIELD.cpp_type = 6
+
+GROW_POINT_CFG_POS_Y_FIELD.name = "pos_y"
+GROW_POINT_CFG_POS_Y_FIELD.full_name = ".ftcfg.grow_point_cfg.pos_y"
+GROW_POINT_CFG_POS_Y_FIELD.number = 7
+GROW_POINT_CFG_POS_Y_FIELD.index = 6
+GROW_POINT_CFG_POS_Y_FIELD.label = 2
+GROW_POINT_CFG_POS_Y_FIELD.has_default_value = false
+GROW_POINT_CFG_POS_Y_FIELD.default_value = 0.0
+GROW_POINT_CFG_POS_Y_FIELD.type = 2
+GROW_POINT_CFG_POS_Y_FIELD.cpp_type = 6
+
+GROW_POINT_CFG_POS_Z_FIELD.name = "pos_z"
+GROW_POINT_CFG_POS_Z_FIELD.full_name = ".ftcfg.grow_point_cfg.pos_z"
+GROW_POINT_CFG_POS_Z_FIELD.number = 8
+GROW_POINT_CFG_POS_Z_FIELD.index = 7
+GROW_POINT_CFG_POS_Z_FIELD.label = 2
+GROW_POINT_CFG_POS_Z_FIELD.has_default_value = false
+GROW_POINT_CFG_POS_Z_FIELD.default_value = 0.0
+GROW_POINT_CFG_POS_Z_FIELD.type = 2
+GROW_POINT_CFG_POS_Z_FIELD.cpp_type = 6
+
+GROW_POINT_CFG_MAX_COUNT_FIELD.name = "max_count"
+GROW_POINT_CFG_MAX_COUNT_FIELD.full_name = ".ftcfg.grow_point_cfg.max_count"
+GROW_POINT_CFG_MAX_COUNT_FIELD.number = 9
+GROW_POINT_CFG_MAX_COUNT_FIELD.index = 8
+GROW_POINT_CFG_MAX_COUNT_FIELD.label = 2
+GROW_POINT_CFG_MAX_COUNT_FIELD.has_default_value = false
+GROW_POINT_CFG_MAX_COUNT_FIELD.default_value = 0
+GROW_POINT_CFG_MAX_COUNT_FIELD.type = 5
+GROW_POINT_CFG_MAX_COUNT_FIELD.cpp_type = 1
+
+GROW_POINT_CFG_SHOW_COUNT_FIELD.name = "show_count"
+GROW_POINT_CFG_SHOW_COUNT_FIELD.full_name = ".ftcfg.grow_point_cfg.show_count"
+GROW_POINT_CFG_SHOW_COUNT_FIELD.number = 10
+GROW_POINT_CFG_SHOW_COUNT_FIELD.index = 9
+GROW_POINT_CFG_SHOW_COUNT_FIELD.label = 2
+GROW_POINT_CFG_SHOW_COUNT_FIELD.has_default_value = false
+GROW_POINT_CFG_SHOW_COUNT_FIELD.default_value = false
+GROW_POINT_CFG_SHOW_COUNT_FIELD.type = 8
+GROW_POINT_CFG_SHOW_COUNT_FIELD.cpp_type = 7
+
+GROW_POINT_CFG_QUALITY_FIELD.name = "quality"
+GROW_POINT_CFG_QUALITY_FIELD.full_name = ".ftcfg.grow_point_cfg.quality"
+GROW_POINT_CFG_QUALITY_FIELD.number = 11
+GROW_POINT_CFG_QUALITY_FIELD.index = 10
+GROW_POINT_CFG_QUALITY_FIELD.label = 2
+GROW_POINT_CFG_QUALITY_FIELD.has_default_value = false
+GROW_POINT_CFG_QUALITY_FIELD.default_value = 0
+GROW_POINT_CFG_QUALITY_FIELD.type = 5
+GROW_POINT_CFG_QUALITY_FIELD.cpp_type = 1
+
+GROW_POINT_CFG_SKILL_INDEX_FIELD.name = "skill_index"
+GROW_POINT_CFG_SKILL_INDEX_FIELD.full_name = ".ftcfg.grow_point_cfg.skill_index"
+GROW_POINT_CFG_SKILL_INDEX_FIELD.number = 12
+GROW_POINT_CFG_SKILL_INDEX_FIELD.index = 11
+GROW_POINT_CFG_SKILL_INDEX_FIELD.label = 2
+GROW_POINT_CFG_SKILL_INDEX_FIELD.has_default_value = false
+GROW_POINT_CFG_SKILL_INDEX_FIELD.default_value = 0
+GROW_POINT_CFG_SKILL_INDEX_FIELD.type = 5
+GROW_POINT_CFG_SKILL_INDEX_FIELD.cpp_type = 1
+
+GROW_POINT_CFG.name = "grow_point_cfg"
+GROW_POINT_CFG.full_name = ".ftcfg.grow_point_cfg"
+GROW_POINT_CFG.nested_types = {}
+GROW_POINT_CFG.enum_types = {}
+GROW_POINT_CFG.fields = {GROW_POINT_CFG_ID_FIELD, GROW_POINT_CFG_NAME_FIELD, GROW_POINT_CFG_MODULE_FIELD, GROW_POINT_CFG_DESC_FIELD, GROW_POINT_CFG_MAP_ID_FIELD, GROW_POINT_CFG_POS_X_FIELD, GROW_POINT_CFG_POS_Y_FIELD, GROW_POINT_CFG_POS_Z_FIELD, GROW_POINT_CFG_MAX_COUNT_FIELD, GROW_POINT_CFG_SHOW_COUNT_FIELD, GROW_POINT_CFG_QUALITY_FIELD, GROW_POINT_CFG_SKILL_INDEX_FIELD}
+GROW_POINT_CFG.is_extendable = false
+GROW_POINT_CFG.extensions = {}
+GROW_POINT_CFGS_ITEMS_FIELD.name = "items"
+GROW_POINT_CFGS_ITEMS_FIELD.full_name = ".ftcfg.grow_point_cfgs.items"
+GROW_POINT_CFGS_ITEMS_FIELD.number = 1
+GROW_POINT_CFGS_ITEMS_FIELD.index = 0
+GROW_POINT_CFGS_ITEMS_FIELD.label = 3
+GROW_POINT_CFGS_ITEMS_FIELD.has_default_value = false
+GROW_POINT_CFGS_ITEMS_FIELD.default_value = {}
+GROW_POINT_CFGS_ITEMS_FIELD.message_type = GROW_POINT_CFG
+GROW_POINT_CFGS_ITEMS_FIELD.type = 11
+GROW_POINT_CFGS_ITEMS_FIELD.cpp_type = 10
+
+GROW_POINT_CFGS.name = "grow_point_cfgs"
+GROW_POINT_CFGS.full_name = ".ftcfg.grow_point_cfgs"
+GROW_POINT_CFGS.nested_types = {}
+GROW_POINT_CFGS.enum_types = {}
+GROW_POINT_CFGS.fields = {GROW_POINT_CFGS_ITEMS_FIELD}
+GROW_POINT_CFGS.is_extendable = false
+GROW_POINT_CFGS.extensions = {}
+ERRORCODE_NOTIFY_CFG_ID_FIELD.name = "id"
+ERRORCODE_NOTIFY_CFG_ID_FIELD.full_name = ".ftcfg.errorcode_notify_cfg.id"
+ERRORCODE_NOTIFY_CFG_ID_FIELD.number = 1
+ERRORCODE_NOTIFY_CFG_ID_FIELD.index = 0
+ERRORCODE_NOTIFY_CFG_ID_FIELD.label = 2
+ERRORCODE_NOTIFY_CFG_ID_FIELD.has_default_value = false
+ERRORCODE_NOTIFY_CFG_ID_FIELD.default_value = 0
+ERRORCODE_NOTIFY_CFG_ID_FIELD.type = 5
+ERRORCODE_NOTIFY_CFG_ID_FIELD.cpp_type = 1
+
+ERRORCODE_NOTIFY_CFG_CONTENT_FIELD.name = "content"
+ERRORCODE_NOTIFY_CFG_CONTENT_FIELD.full_name = ".ftcfg.errorcode_notify_cfg.content"
+ERRORCODE_NOTIFY_CFG_CONTENT_FIELD.number = 2
+ERRORCODE_NOTIFY_CFG_CONTENT_FIELD.index = 1
+ERRORCODE_NOTIFY_CFG_CONTENT_FIELD.label = 2
+ERRORCODE_NOTIFY_CFG_CONTENT_FIELD.has_default_value = false
+ERRORCODE_NOTIFY_CFG_CONTENT_FIELD.default_value = ""
+ERRORCODE_NOTIFY_CFG_CONTENT_FIELD.type = 9
+ERRORCODE_NOTIFY_CFG_CONTENT_FIELD.cpp_type = 9
+
+ERRORCODE_NOTIFY_CFG.name = "errorcode_notify_cfg"
+ERRORCODE_NOTIFY_CFG.full_name = ".ftcfg.errorcode_notify_cfg"
+ERRORCODE_NOTIFY_CFG.nested_types = {}
+ERRORCODE_NOTIFY_CFG.enum_types = {}
+ERRORCODE_NOTIFY_CFG.fields = {ERRORCODE_NOTIFY_CFG_ID_FIELD, ERRORCODE_NOTIFY_CFG_CONTENT_FIELD}
+ERRORCODE_NOTIFY_CFG.is_extendable = false
+ERRORCODE_NOTIFY_CFG.extensions = {}
+ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD.name = "items"
+ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD.full_name = ".ftcfg.errorcode_notify_cfgs.items"
+ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD.number = 1
+ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD.index = 0
+ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD.label = 3
+ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD.has_default_value = false
+ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD.default_value = {}
+ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD.message_type = ERRORCODE_NOTIFY_CFG
+ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD.type = 11
+ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD.cpp_type = 10
+
+ERRORCODE_NOTIFY_CFGS.name = "errorcode_notify_cfgs"
+ERRORCODE_NOTIFY_CFGS.full_name = ".ftcfg.errorcode_notify_cfgs"
+ERRORCODE_NOTIFY_CFGS.nested_types = {}
+ERRORCODE_NOTIFY_CFGS.enum_types = {}
+ERRORCODE_NOTIFY_CFGS.fields = {ERRORCODE_NOTIFY_CFGS_ITEMS_FIELD}
+ERRORCODE_NOTIFY_CFGS.is_extendable = false
+ERRORCODE_NOTIFY_CFGS.extensions = {}
+OPEN_RULES_DATA_CFG_ID_FIELD.name = "id"
+OPEN_RULES_DATA_CFG_ID_FIELD.full_name = ".ftcfg.open_rules_data_cfg.id"
+OPEN_RULES_DATA_CFG_ID_FIELD.number = 1
+OPEN_RULES_DATA_CFG_ID_FIELD.index = 0
+OPEN_RULES_DATA_CFG_ID_FIELD.label = 2
+OPEN_RULES_DATA_CFG_ID_FIELD.has_default_value = false
+OPEN_RULES_DATA_CFG_ID_FIELD.default_value = 0
+OPEN_RULES_DATA_CFG_ID_FIELD.type = 5
+OPEN_RULES_DATA_CFG_ID_FIELD.cpp_type = 1
+
+OPEN_RULES_DATA_CFG_OPEN_RULES_TYPE_FIELD.name = "open_rules_type"
+OPEN_RULES_DATA_CFG_OPEN_RULES_TYPE_FIELD.full_name = ".ftcfg.open_rules_data_cfg.open_rules_type"
+OPEN_RULES_DATA_CFG_OPEN_RULES_TYPE_FIELD.number = 2
+OPEN_RULES_DATA_CFG_OPEN_RULES_TYPE_FIELD.index = 1
+OPEN_RULES_DATA_CFG_OPEN_RULES_TYPE_FIELD.label = 2
+OPEN_RULES_DATA_CFG_OPEN_RULES_TYPE_FIELD.has_default_value = false
+OPEN_RULES_DATA_CFG_OPEN_RULES_TYPE_FIELD.default_value = 0
+OPEN_RULES_DATA_CFG_OPEN_RULES_TYPE_FIELD.type = 5
+OPEN_RULES_DATA_CFG_OPEN_RULES_TYPE_FIELD.cpp_type = 1
+
+OPEN_RULES_DATA_CFG_LIMIT_TYPE_FIELD.name = "limit_type"
+OPEN_RULES_DATA_CFG_LIMIT_TYPE_FIELD.full_name = ".ftcfg.open_rules_data_cfg.limit_type"
+OPEN_RULES_DATA_CFG_LIMIT_TYPE_FIELD.number = 3
+OPEN_RULES_DATA_CFG_LIMIT_TYPE_FIELD.index = 2
+OPEN_RULES_DATA_CFG_LIMIT_TYPE_FIELD.label = 2
+OPEN_RULES_DATA_CFG_LIMIT_TYPE_FIELD.has_default_value = false
+OPEN_RULES_DATA_CFG_LIMIT_TYPE_FIELD.default_value = 0
+OPEN_RULES_DATA_CFG_LIMIT_TYPE_FIELD.type = 5
+OPEN_RULES_DATA_CFG_LIMIT_TYPE_FIELD.cpp_type = 1
+
+OPEN_RULES_DATA_CFG_LIMIT_DAY_FIELD.name = "limit_day"
+OPEN_RULES_DATA_CFG_LIMIT_DAY_FIELD.full_name = ".ftcfg.open_rules_data_cfg.limit_day"
+OPEN_RULES_DATA_CFG_LIMIT_DAY_FIELD.number = 4
+OPEN_RULES_DATA_CFG_LIMIT_DAY_FIELD.index = 3
+OPEN_RULES_DATA_CFG_LIMIT_DAY_FIELD.label = 2
+OPEN_RULES_DATA_CFG_LIMIT_DAY_FIELD.has_default_value = false
+OPEN_RULES_DATA_CFG_LIMIT_DAY_FIELD.default_value = 0
+OPEN_RULES_DATA_CFG_LIMIT_DAY_FIELD.type = 5
+OPEN_RULES_DATA_CFG_LIMIT_DAY_FIELD.cpp_type = 1
+
+OPEN_RULES_DATA_CFG_BEGIN_HOUR_FIELD.name = "begin_hour"
+OPEN_RULES_DATA_CFG_BEGIN_HOUR_FIELD.full_name = ".ftcfg.open_rules_data_cfg.begin_hour"
+OPEN_RULES_DATA_CFG_BEGIN_HOUR_FIELD.number = 5
+OPEN_RULES_DATA_CFG_BEGIN_HOUR_FIELD.index = 4
+OPEN_RULES_DATA_CFG_BEGIN_HOUR_FIELD.label = 2
+OPEN_RULES_DATA_CFG_BEGIN_HOUR_FIELD.has_default_value = false
+OPEN_RULES_DATA_CFG_BEGIN_HOUR_FIELD.default_value = 0
+OPEN_RULES_DATA_CFG_BEGIN_HOUR_FIELD.type = 5
+OPEN_RULES_DATA_CFG_BEGIN_HOUR_FIELD.cpp_type = 1
+
+OPEN_RULES_DATA_CFG_BEGIN_MIN_FIELD.name = "begin_min"
+OPEN_RULES_DATA_CFG_BEGIN_MIN_FIELD.full_name = ".ftcfg.open_rules_data_cfg.begin_min"
+OPEN_RULES_DATA_CFG_BEGIN_MIN_FIELD.number = 6
+OPEN_RULES_DATA_CFG_BEGIN_MIN_FIELD.index = 5
+OPEN_RULES_DATA_CFG_BEGIN_MIN_FIELD.label = 2
+OPEN_RULES_DATA_CFG_BEGIN_MIN_FIELD.has_default_value = false
+OPEN_RULES_DATA_CFG_BEGIN_MIN_FIELD.default_value = 0
+OPEN_RULES_DATA_CFG_BEGIN_MIN_FIELD.type = 5
+OPEN_RULES_DATA_CFG_BEGIN_MIN_FIELD.cpp_type = 1
+
+OPEN_RULES_DATA_CFG_END_HOUR_FIELD.name = "end_hour"
+OPEN_RULES_DATA_CFG_END_HOUR_FIELD.full_name = ".ftcfg.open_rules_data_cfg.end_hour"
+OPEN_RULES_DATA_CFG_END_HOUR_FIELD.number = 7
+OPEN_RULES_DATA_CFG_END_HOUR_FIELD.index = 6
+OPEN_RULES_DATA_CFG_END_HOUR_FIELD.label = 2
+OPEN_RULES_DATA_CFG_END_HOUR_FIELD.has_default_value = false
+OPEN_RULES_DATA_CFG_END_HOUR_FIELD.default_value = 0
+OPEN_RULES_DATA_CFG_END_HOUR_FIELD.type = 5
+OPEN_RULES_DATA_CFG_END_HOUR_FIELD.cpp_type = 1
+
+OPEN_RULES_DATA_CFG_END_MIN_FIELD.name = "end_min"
+OPEN_RULES_DATA_CFG_END_MIN_FIELD.full_name = ".ftcfg.open_rules_data_cfg.end_min"
+OPEN_RULES_DATA_CFG_END_MIN_FIELD.number = 8
+OPEN_RULES_DATA_CFG_END_MIN_FIELD.index = 7
+OPEN_RULES_DATA_CFG_END_MIN_FIELD.label = 2
+OPEN_RULES_DATA_CFG_END_MIN_FIELD.has_default_value = false
+OPEN_RULES_DATA_CFG_END_MIN_FIELD.default_value = 0
+OPEN_RULES_DATA_CFG_END_MIN_FIELD.type = 5
+OPEN_RULES_DATA_CFG_END_MIN_FIELD.cpp_type = 1
+
+OPEN_RULES_DATA_CFG.name = "open_rules_data_cfg"
+OPEN_RULES_DATA_CFG.full_name = ".ftcfg.open_rules_data_cfg"
+OPEN_RULES_DATA_CFG.nested_types = {}
+OPEN_RULES_DATA_CFG.enum_types = {}
+OPEN_RULES_DATA_CFG.fields = {OPEN_RULES_DATA_CFG_ID_FIELD, OPEN_RULES_DATA_CFG_OPEN_RULES_TYPE_FIELD, OPEN_RULES_DATA_CFG_LIMIT_TYPE_FIELD, OPEN_RULES_DATA_CFG_LIMIT_DAY_FIELD, OPEN_RULES_DATA_CFG_BEGIN_HOUR_FIELD, OPEN_RULES_DATA_CFG_BEGIN_MIN_FIELD, OPEN_RULES_DATA_CFG_END_HOUR_FIELD, OPEN_RULES_DATA_CFG_END_MIN_FIELD}
+OPEN_RULES_DATA_CFG.is_extendable = false
+OPEN_RULES_DATA_CFG.extensions = {}
+OPEN_RULES_DATA_CFGS_ITEMS_FIELD.name = "items"
+OPEN_RULES_DATA_CFGS_ITEMS_FIELD.full_name = ".ftcfg.open_rules_data_cfgs.items"
+OPEN_RULES_DATA_CFGS_ITEMS_FIELD.number = 1
+OPEN_RULES_DATA_CFGS_ITEMS_FIELD.index = 0
+OPEN_RULES_DATA_CFGS_ITEMS_FIELD.label = 3
+OPEN_RULES_DATA_CFGS_ITEMS_FIELD.has_default_value = false
+OPEN_RULES_DATA_CFGS_ITEMS_FIELD.default_value = {}
+OPEN_RULES_DATA_CFGS_ITEMS_FIELD.message_type = OPEN_RULES_DATA_CFG
+OPEN_RULES_DATA_CFGS_ITEMS_FIELD.type = 11
+OPEN_RULES_DATA_CFGS_ITEMS_FIELD.cpp_type = 10
+
+OPEN_RULES_DATA_CFGS.name = "open_rules_data_cfgs"
+OPEN_RULES_DATA_CFGS.full_name = ".ftcfg.open_rules_data_cfgs"
+OPEN_RULES_DATA_CFGS.nested_types = {}
+OPEN_RULES_DATA_CFGS.enum_types = {}
+OPEN_RULES_DATA_CFGS.fields = {OPEN_RULES_DATA_CFGS_ITEMS_FIELD}
+OPEN_RULES_DATA_CFGS.is_extendable = false
+OPEN_RULES_DATA_CFGS.extensions = {}
+CAMPBOSS_CFG_ID_FIELD.name = "id"
+CAMPBOSS_CFG_ID_FIELD.full_name = ".ftcfg.campboss_cfg.id"
+CAMPBOSS_CFG_ID_FIELD.number = 1
+CAMPBOSS_CFG_ID_FIELD.index = 0
+CAMPBOSS_CFG_ID_FIELD.label = 2
+CAMPBOSS_CFG_ID_FIELD.has_default_value = false
+CAMPBOSS_CFG_ID_FIELD.default_value = 0
+CAMPBOSS_CFG_ID_FIELD.type = 5
+CAMPBOSS_CFG_ID_FIELD.cpp_type = 1
+
+CAMPBOSS_CFG_NEED_LEVEL_FIELD.name = "need_level"
+CAMPBOSS_CFG_NEED_LEVEL_FIELD.full_name = ".ftcfg.campboss_cfg.need_level"
+CAMPBOSS_CFG_NEED_LEVEL_FIELD.number = 2
+CAMPBOSS_CFG_NEED_LEVEL_FIELD.index = 1
+CAMPBOSS_CFG_NEED_LEVEL_FIELD.label = 2
+CAMPBOSS_CFG_NEED_LEVEL_FIELD.has_default_value = false
+CAMPBOSS_CFG_NEED_LEVEL_FIELD.default_value = 0
+CAMPBOSS_CFG_NEED_LEVEL_FIELD.type = 5
+CAMPBOSS_CFG_NEED_LEVEL_FIELD.cpp_type = 1
+
+CAMPBOSS_CFG_SCENE_ID_FIELD.name = "scene_id"
+CAMPBOSS_CFG_SCENE_ID_FIELD.full_name = ".ftcfg.campboss_cfg.scene_id"
+CAMPBOSS_CFG_SCENE_ID_FIELD.number = 3
+CAMPBOSS_CFG_SCENE_ID_FIELD.index = 2
+CAMPBOSS_CFG_SCENE_ID_FIELD.label = 2
+CAMPBOSS_CFG_SCENE_ID_FIELD.has_default_value = false
+CAMPBOSS_CFG_SCENE_ID_FIELD.default_value = 0
+CAMPBOSS_CFG_SCENE_ID_FIELD.type = 5
+CAMPBOSS_CFG_SCENE_ID_FIELD.cpp_type = 1
+
+CAMPBOSS_CFG_MAP_ID_FIELD.name = "map_id"
+CAMPBOSS_CFG_MAP_ID_FIELD.full_name = ".ftcfg.campboss_cfg.map_id"
+CAMPBOSS_CFG_MAP_ID_FIELD.number = 4
+CAMPBOSS_CFG_MAP_ID_FIELD.index = 3
+CAMPBOSS_CFG_MAP_ID_FIELD.label = 2
+CAMPBOSS_CFG_MAP_ID_FIELD.has_default_value = false
+CAMPBOSS_CFG_MAP_ID_FIELD.default_value = 0
+CAMPBOSS_CFG_MAP_ID_FIELD.type = 5
+CAMPBOSS_CFG_MAP_ID_FIELD.cpp_type = 1
+
+CAMPBOSS_CFG_X_POINT_FIELD.name = "x_point"
+CAMPBOSS_CFG_X_POINT_FIELD.full_name = ".ftcfg.campboss_cfg.x_point"
+CAMPBOSS_CFG_X_POINT_FIELD.number = 5
+CAMPBOSS_CFG_X_POINT_FIELD.index = 4
+CAMPBOSS_CFG_X_POINT_FIELD.label = 2
+CAMPBOSS_CFG_X_POINT_FIELD.has_default_value = false
+CAMPBOSS_CFG_X_POINT_FIELD.default_value = 0.0
+CAMPBOSS_CFG_X_POINT_FIELD.type = 2
+CAMPBOSS_CFG_X_POINT_FIELD.cpp_type = 6
+
+CAMPBOSS_CFG_Y_POINT_FIELD.name = "y_point"
+CAMPBOSS_CFG_Y_POINT_FIELD.full_name = ".ftcfg.campboss_cfg.y_point"
+CAMPBOSS_CFG_Y_POINT_FIELD.number = 6
+CAMPBOSS_CFG_Y_POINT_FIELD.index = 5
+CAMPBOSS_CFG_Y_POINT_FIELD.label = 2
+CAMPBOSS_CFG_Y_POINT_FIELD.has_default_value = false
+CAMPBOSS_CFG_Y_POINT_FIELD.default_value = 0.0
+CAMPBOSS_CFG_Y_POINT_FIELD.type = 2
+CAMPBOSS_CFG_Y_POINT_FIELD.cpp_type = 6
+
+CAMPBOSS_CFG_Z_POINT_FIELD.name = "z_point"
+CAMPBOSS_CFG_Z_POINT_FIELD.full_name = ".ftcfg.campboss_cfg.z_point"
+CAMPBOSS_CFG_Z_POINT_FIELD.number = 7
+CAMPBOSS_CFG_Z_POINT_FIELD.index = 6
+CAMPBOSS_CFG_Z_POINT_FIELD.label = 2
+CAMPBOSS_CFG_Z_POINT_FIELD.has_default_value = false
+CAMPBOSS_CFG_Z_POINT_FIELD.default_value = 0.0
+CAMPBOSS_CFG_Z_POINT_FIELD.type = 2
+CAMPBOSS_CFG_Z_POINT_FIELD.cpp_type = 6
+
+CAMPBOSS_CFG.name = "campboss_cfg"
+CAMPBOSS_CFG.full_name = ".ftcfg.campboss_cfg"
+CAMPBOSS_CFG.nested_types = {}
+CAMPBOSS_CFG.enum_types = {}
+CAMPBOSS_CFG.fields = {CAMPBOSS_CFG_ID_FIELD, CAMPBOSS_CFG_NEED_LEVEL_FIELD, CAMPBOSS_CFG_SCENE_ID_FIELD, CAMPBOSS_CFG_MAP_ID_FIELD, CAMPBOSS_CFG_X_POINT_FIELD, CAMPBOSS_CFG_Y_POINT_FIELD, CAMPBOSS_CFG_Z_POINT_FIELD}
+CAMPBOSS_CFG.is_extendable = false
+CAMPBOSS_CFG.extensions = {}
+CAMPBOSS_CFGS_ITEMS_FIELD.name = "items"
+CAMPBOSS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.campboss_cfgs.items"
+CAMPBOSS_CFGS_ITEMS_FIELD.number = 1
+CAMPBOSS_CFGS_ITEMS_FIELD.index = 0
+CAMPBOSS_CFGS_ITEMS_FIELD.label = 3
+CAMPBOSS_CFGS_ITEMS_FIELD.has_default_value = false
+CAMPBOSS_CFGS_ITEMS_FIELD.default_value = {}
+CAMPBOSS_CFGS_ITEMS_FIELD.message_type = CAMPBOSS_CFG
+CAMPBOSS_CFGS_ITEMS_FIELD.type = 11
+CAMPBOSS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CAMPBOSS_CFGS.name = "campboss_cfgs"
+CAMPBOSS_CFGS.full_name = ".ftcfg.campboss_cfgs"
+CAMPBOSS_CFGS.nested_types = {}
+CAMPBOSS_CFGS.enum_types = {}
+CAMPBOSS_CFGS.fields = {CAMPBOSS_CFGS_ITEMS_FIELD}
+CAMPBOSS_CFGS.is_extendable = false
+CAMPBOSS_CFGS.extensions = {}
+TIPS_CFG_ID_FIELD.name = "id"
+TIPS_CFG_ID_FIELD.full_name = ".ftcfg.tips_cfg.id"
+TIPS_CFG_ID_FIELD.number = 1
+TIPS_CFG_ID_FIELD.index = 0
+TIPS_CFG_ID_FIELD.label = 2
+TIPS_CFG_ID_FIELD.has_default_value = false
+TIPS_CFG_ID_FIELD.default_value = 0
+TIPS_CFG_ID_FIELD.type = 5
+TIPS_CFG_ID_FIELD.cpp_type = 1
+
+TIPS_CFG_TYPE_FIELD.name = "type"
+TIPS_CFG_TYPE_FIELD.full_name = ".ftcfg.tips_cfg.type"
+TIPS_CFG_TYPE_FIELD.number = 2
+TIPS_CFG_TYPE_FIELD.index = 1
+TIPS_CFG_TYPE_FIELD.label = 2
+TIPS_CFG_TYPE_FIELD.has_default_value = false
+TIPS_CFG_TYPE_FIELD.default_value = nil
+TIPS_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ESYSTEMCHATTYPE
+TIPS_CFG_TYPE_FIELD.type = 14
+TIPS_CFG_TYPE_FIELD.cpp_type = 8
+
+TIPS_CFG_CONTENT_FIELD.name = "content"
+TIPS_CFG_CONTENT_FIELD.full_name = ".ftcfg.tips_cfg.content"
+TIPS_CFG_CONTENT_FIELD.number = 3
+TIPS_CFG_CONTENT_FIELD.index = 2
+TIPS_CFG_CONTENT_FIELD.label = 2
+TIPS_CFG_CONTENT_FIELD.has_default_value = false
+TIPS_CFG_CONTENT_FIELD.default_value = ""
+TIPS_CFG_CONTENT_FIELD.type = 9
+TIPS_CFG_CONTENT_FIELD.cpp_type = 9
+
+TIPS_CFG.name = "tips_cfg"
+TIPS_CFG.full_name = ".ftcfg.tips_cfg"
+TIPS_CFG.nested_types = {}
+TIPS_CFG.enum_types = {}
+TIPS_CFG.fields = {TIPS_CFG_ID_FIELD, TIPS_CFG_TYPE_FIELD, TIPS_CFG_CONTENT_FIELD}
+TIPS_CFG.is_extendable = false
+TIPS_CFG.extensions = {}
+TIPS_CFGS_ITEMS_FIELD.name = "items"
+TIPS_CFGS_ITEMS_FIELD.full_name = ".ftcfg.tips_cfgs.items"
+TIPS_CFGS_ITEMS_FIELD.number = 1
+TIPS_CFGS_ITEMS_FIELD.index = 0
+TIPS_CFGS_ITEMS_FIELD.label = 3
+TIPS_CFGS_ITEMS_FIELD.has_default_value = false
+TIPS_CFGS_ITEMS_FIELD.default_value = {}
+TIPS_CFGS_ITEMS_FIELD.message_type = TIPS_CFG
+TIPS_CFGS_ITEMS_FIELD.type = 11
+TIPS_CFGS_ITEMS_FIELD.cpp_type = 10
+
+TIPS_CFGS.name = "tips_cfgs"
+TIPS_CFGS.full_name = ".ftcfg.tips_cfgs"
+TIPS_CFGS.nested_types = {}
+TIPS_CFGS.enum_types = {}
+TIPS_CFGS.fields = {TIPS_CFGS_ITEMS_FIELD}
+TIPS_CFGS.is_extendable = false
+TIPS_CFGS.extensions = {}
+CAMP_RELATION_CFG_ID_FIELD.name = "id"
+CAMP_RELATION_CFG_ID_FIELD.full_name = ".ftcfg.camp_relation_cfg.id"
+CAMP_RELATION_CFG_ID_FIELD.number = 1
+CAMP_RELATION_CFG_ID_FIELD.index = 0
+CAMP_RELATION_CFG_ID_FIELD.label = 2
+CAMP_RELATION_CFG_ID_FIELD.has_default_value = false
+CAMP_RELATION_CFG_ID_FIELD.default_value = 0
+CAMP_RELATION_CFG_ID_FIELD.type = 5
+CAMP_RELATION_CFG_ID_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_SCRIP_FIELD.name = "scrip"
+CAMP_RELATION_CFG_SCRIP_FIELD.full_name = ".ftcfg.camp_relation_cfg.scrip"
+CAMP_RELATION_CFG_SCRIP_FIELD.number = 2
+CAMP_RELATION_CFG_SCRIP_FIELD.index = 1
+CAMP_RELATION_CFG_SCRIP_FIELD.label = 2
+CAMP_RELATION_CFG_SCRIP_FIELD.has_default_value = false
+CAMP_RELATION_CFG_SCRIP_FIELD.default_value = ""
+CAMP_RELATION_CFG_SCRIP_FIELD.type = 9
+CAMP_RELATION_CFG_SCRIP_FIELD.cpp_type = 9
+
+CAMP_RELATION_CFG_TYPE_FIELD.name = "type"
+CAMP_RELATION_CFG_TYPE_FIELD.full_name = ".ftcfg.camp_relation_cfg.type"
+CAMP_RELATION_CFG_TYPE_FIELD.number = 3
+CAMP_RELATION_CFG_TYPE_FIELD.index = 2
+CAMP_RELATION_CFG_TYPE_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE_SCRIP_FIELD.name = "type_scrip"
+CAMP_RELATION_CFG_TYPE_SCRIP_FIELD.full_name = ".ftcfg.camp_relation_cfg.type_scrip"
+CAMP_RELATION_CFG_TYPE_SCRIP_FIELD.number = 4
+CAMP_RELATION_CFG_TYPE_SCRIP_FIELD.index = 3
+CAMP_RELATION_CFG_TYPE_SCRIP_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE_SCRIP_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE_SCRIP_FIELD.default_value = ""
+CAMP_RELATION_CFG_TYPE_SCRIP_FIELD.type = 9
+CAMP_RELATION_CFG_TYPE_SCRIP_FIELD.cpp_type = 9
+
+CAMP_RELATION_CFG_TYPE0_FIELD.name = "type0"
+CAMP_RELATION_CFG_TYPE0_FIELD.full_name = ".ftcfg.camp_relation_cfg.type0"
+CAMP_RELATION_CFG_TYPE0_FIELD.number = 5
+CAMP_RELATION_CFG_TYPE0_FIELD.index = 4
+CAMP_RELATION_CFG_TYPE0_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE0_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE0_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE0_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE0_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE1_FIELD.name = "type1"
+CAMP_RELATION_CFG_TYPE1_FIELD.full_name = ".ftcfg.camp_relation_cfg.type1"
+CAMP_RELATION_CFG_TYPE1_FIELD.number = 6
+CAMP_RELATION_CFG_TYPE1_FIELD.index = 5
+CAMP_RELATION_CFG_TYPE1_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE1_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE1_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE1_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE1_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE2_FIELD.name = "type2"
+CAMP_RELATION_CFG_TYPE2_FIELD.full_name = ".ftcfg.camp_relation_cfg.type2"
+CAMP_RELATION_CFG_TYPE2_FIELD.number = 7
+CAMP_RELATION_CFG_TYPE2_FIELD.index = 6
+CAMP_RELATION_CFG_TYPE2_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE2_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE2_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE2_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE2_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE3_FIELD.name = "type3"
+CAMP_RELATION_CFG_TYPE3_FIELD.full_name = ".ftcfg.camp_relation_cfg.type3"
+CAMP_RELATION_CFG_TYPE3_FIELD.number = 8
+CAMP_RELATION_CFG_TYPE3_FIELD.index = 7
+CAMP_RELATION_CFG_TYPE3_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE3_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE3_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE3_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE3_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE4_FIELD.name = "type4"
+CAMP_RELATION_CFG_TYPE4_FIELD.full_name = ".ftcfg.camp_relation_cfg.type4"
+CAMP_RELATION_CFG_TYPE4_FIELD.number = 9
+CAMP_RELATION_CFG_TYPE4_FIELD.index = 8
+CAMP_RELATION_CFG_TYPE4_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE4_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE4_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE4_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE4_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE5_FIELD.name = "type5"
+CAMP_RELATION_CFG_TYPE5_FIELD.full_name = ".ftcfg.camp_relation_cfg.type5"
+CAMP_RELATION_CFG_TYPE5_FIELD.number = 10
+CAMP_RELATION_CFG_TYPE5_FIELD.index = 9
+CAMP_RELATION_CFG_TYPE5_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE5_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE5_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE5_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE5_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE6_FIELD.name = "type6"
+CAMP_RELATION_CFG_TYPE6_FIELD.full_name = ".ftcfg.camp_relation_cfg.type6"
+CAMP_RELATION_CFG_TYPE6_FIELD.number = 11
+CAMP_RELATION_CFG_TYPE6_FIELD.index = 10
+CAMP_RELATION_CFG_TYPE6_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE6_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE6_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE6_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE6_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE7_FIELD.name = "type7"
+CAMP_RELATION_CFG_TYPE7_FIELD.full_name = ".ftcfg.camp_relation_cfg.type7"
+CAMP_RELATION_CFG_TYPE7_FIELD.number = 12
+CAMP_RELATION_CFG_TYPE7_FIELD.index = 11
+CAMP_RELATION_CFG_TYPE7_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE7_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE7_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE7_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE7_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE8_FIELD.name = "type8"
+CAMP_RELATION_CFG_TYPE8_FIELD.full_name = ".ftcfg.camp_relation_cfg.type8"
+CAMP_RELATION_CFG_TYPE8_FIELD.number = 13
+CAMP_RELATION_CFG_TYPE8_FIELD.index = 12
+CAMP_RELATION_CFG_TYPE8_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE8_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE8_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE8_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE8_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE9_FIELD.name = "type9"
+CAMP_RELATION_CFG_TYPE9_FIELD.full_name = ".ftcfg.camp_relation_cfg.type9"
+CAMP_RELATION_CFG_TYPE9_FIELD.number = 14
+CAMP_RELATION_CFG_TYPE9_FIELD.index = 13
+CAMP_RELATION_CFG_TYPE9_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE9_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE9_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE9_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE9_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE10_FIELD.name = "type10"
+CAMP_RELATION_CFG_TYPE10_FIELD.full_name = ".ftcfg.camp_relation_cfg.type10"
+CAMP_RELATION_CFG_TYPE10_FIELD.number = 15
+CAMP_RELATION_CFG_TYPE10_FIELD.index = 14
+CAMP_RELATION_CFG_TYPE10_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE10_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE10_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE10_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE10_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE11_FIELD.name = "type11"
+CAMP_RELATION_CFG_TYPE11_FIELD.full_name = ".ftcfg.camp_relation_cfg.type11"
+CAMP_RELATION_CFG_TYPE11_FIELD.number = 16
+CAMP_RELATION_CFG_TYPE11_FIELD.index = 15
+CAMP_RELATION_CFG_TYPE11_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE11_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE11_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE11_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE11_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE12_FIELD.name = "type12"
+CAMP_RELATION_CFG_TYPE12_FIELD.full_name = ".ftcfg.camp_relation_cfg.type12"
+CAMP_RELATION_CFG_TYPE12_FIELD.number = 17
+CAMP_RELATION_CFG_TYPE12_FIELD.index = 16
+CAMP_RELATION_CFG_TYPE12_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE12_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE12_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE12_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE12_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE13_FIELD.name = "type13"
+CAMP_RELATION_CFG_TYPE13_FIELD.full_name = ".ftcfg.camp_relation_cfg.type13"
+CAMP_RELATION_CFG_TYPE13_FIELD.number = 18
+CAMP_RELATION_CFG_TYPE13_FIELD.index = 17
+CAMP_RELATION_CFG_TYPE13_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE13_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE13_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE13_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE13_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE14_FIELD.name = "type14"
+CAMP_RELATION_CFG_TYPE14_FIELD.full_name = ".ftcfg.camp_relation_cfg.type14"
+CAMP_RELATION_CFG_TYPE14_FIELD.number = 19
+CAMP_RELATION_CFG_TYPE14_FIELD.index = 18
+CAMP_RELATION_CFG_TYPE14_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE14_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE14_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE14_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE14_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG_TYPE15_FIELD.name = "type15"
+CAMP_RELATION_CFG_TYPE15_FIELD.full_name = ".ftcfg.camp_relation_cfg.type15"
+CAMP_RELATION_CFG_TYPE15_FIELD.number = 20
+CAMP_RELATION_CFG_TYPE15_FIELD.index = 19
+CAMP_RELATION_CFG_TYPE15_FIELD.label = 2
+CAMP_RELATION_CFG_TYPE15_FIELD.has_default_value = false
+CAMP_RELATION_CFG_TYPE15_FIELD.default_value = 0
+CAMP_RELATION_CFG_TYPE15_FIELD.type = 5
+CAMP_RELATION_CFG_TYPE15_FIELD.cpp_type = 1
+
+CAMP_RELATION_CFG.name = "camp_relation_cfg"
+CAMP_RELATION_CFG.full_name = ".ftcfg.camp_relation_cfg"
+CAMP_RELATION_CFG.nested_types = {}
+CAMP_RELATION_CFG.enum_types = {}
+CAMP_RELATION_CFG.fields = {CAMP_RELATION_CFG_ID_FIELD, CAMP_RELATION_CFG_SCRIP_FIELD, CAMP_RELATION_CFG_TYPE_FIELD, CAMP_RELATION_CFG_TYPE_SCRIP_FIELD, CAMP_RELATION_CFG_TYPE0_FIELD, CAMP_RELATION_CFG_TYPE1_FIELD, CAMP_RELATION_CFG_TYPE2_FIELD, CAMP_RELATION_CFG_TYPE3_FIELD, CAMP_RELATION_CFG_TYPE4_FIELD, CAMP_RELATION_CFG_TYPE5_FIELD, CAMP_RELATION_CFG_TYPE6_FIELD, CAMP_RELATION_CFG_TYPE7_FIELD, CAMP_RELATION_CFG_TYPE8_FIELD, CAMP_RELATION_CFG_TYPE9_FIELD, CAMP_RELATION_CFG_TYPE10_FIELD, CAMP_RELATION_CFG_TYPE11_FIELD, CAMP_RELATION_CFG_TYPE12_FIELD, CAMP_RELATION_CFG_TYPE13_FIELD, CAMP_RELATION_CFG_TYPE14_FIELD, CAMP_RELATION_CFG_TYPE15_FIELD}
+CAMP_RELATION_CFG.is_extendable = false
+CAMP_RELATION_CFG.extensions = {}
+CAMP_RELATION_CFGS_ITEMS_FIELD.name = "items"
+CAMP_RELATION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.camp_relation_cfgs.items"
+CAMP_RELATION_CFGS_ITEMS_FIELD.number = 1
+CAMP_RELATION_CFGS_ITEMS_FIELD.index = 0
+CAMP_RELATION_CFGS_ITEMS_FIELD.label = 3
+CAMP_RELATION_CFGS_ITEMS_FIELD.has_default_value = false
+CAMP_RELATION_CFGS_ITEMS_FIELD.default_value = {}
+CAMP_RELATION_CFGS_ITEMS_FIELD.message_type = CAMP_RELATION_CFG
+CAMP_RELATION_CFGS_ITEMS_FIELD.type = 11
+CAMP_RELATION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CAMP_RELATION_CFGS.name = "camp_relation_cfgs"
+CAMP_RELATION_CFGS.full_name = ".ftcfg.camp_relation_cfgs"
+CAMP_RELATION_CFGS.nested_types = {}
+CAMP_RELATION_CFGS.enum_types = {}
+CAMP_RELATION_CFGS.fields = {CAMP_RELATION_CFGS_ITEMS_FIELD}
+CAMP_RELATION_CFGS.is_extendable = false
+CAMP_RELATION_CFGS.extensions = {}
+CAMP_CHANGE_COST_CFG_ID_FIELD.name = "id"
+CAMP_CHANGE_COST_CFG_ID_FIELD.full_name = ".ftcfg.camp_change_cost_cfg.id"
+CAMP_CHANGE_COST_CFG_ID_FIELD.number = 1
+CAMP_CHANGE_COST_CFG_ID_FIELD.index = 0
+CAMP_CHANGE_COST_CFG_ID_FIELD.label = 2
+CAMP_CHANGE_COST_CFG_ID_FIELD.has_default_value = false
+CAMP_CHANGE_COST_CFG_ID_FIELD.default_value = 0
+CAMP_CHANGE_COST_CFG_ID_FIELD.type = 5
+CAMP_CHANGE_COST_CFG_ID_FIELD.cpp_type = 1
+
+CAMP_CHANGE_COST_CFG_COIN_TYPE_FIELD.name = "coin_type"
+CAMP_CHANGE_COST_CFG_COIN_TYPE_FIELD.full_name = ".ftcfg.camp_change_cost_cfg.coin_type"
+CAMP_CHANGE_COST_CFG_COIN_TYPE_FIELD.number = 2
+CAMP_CHANGE_COST_CFG_COIN_TYPE_FIELD.index = 1
+CAMP_CHANGE_COST_CFG_COIN_TYPE_FIELD.label = 3
+CAMP_CHANGE_COST_CFG_COIN_TYPE_FIELD.has_default_value = false
+CAMP_CHANGE_COST_CFG_COIN_TYPE_FIELD.default_value = {}
+CAMP_CHANGE_COST_CFG_COIN_TYPE_FIELD.type = 5
+CAMP_CHANGE_COST_CFG_COIN_TYPE_FIELD.cpp_type = 1
+
+CAMP_CHANGE_COST_CFG_COIN_NUM_FIELD.name = "coin_num"
+CAMP_CHANGE_COST_CFG_COIN_NUM_FIELD.full_name = ".ftcfg.camp_change_cost_cfg.coin_num"
+CAMP_CHANGE_COST_CFG_COIN_NUM_FIELD.number = 3
+CAMP_CHANGE_COST_CFG_COIN_NUM_FIELD.index = 2
+CAMP_CHANGE_COST_CFG_COIN_NUM_FIELD.label = 3
+CAMP_CHANGE_COST_CFG_COIN_NUM_FIELD.has_default_value = false
+CAMP_CHANGE_COST_CFG_COIN_NUM_FIELD.default_value = {}
+CAMP_CHANGE_COST_CFG_COIN_NUM_FIELD.type = 5
+CAMP_CHANGE_COST_CFG_COIN_NUM_FIELD.cpp_type = 1
+
+CAMP_CHANGE_COST_CFG.name = "camp_change_cost_cfg"
+CAMP_CHANGE_COST_CFG.full_name = ".ftcfg.camp_change_cost_cfg"
+CAMP_CHANGE_COST_CFG.nested_types = {}
+CAMP_CHANGE_COST_CFG.enum_types = {}
+CAMP_CHANGE_COST_CFG.fields = {CAMP_CHANGE_COST_CFG_ID_FIELD, CAMP_CHANGE_COST_CFG_COIN_TYPE_FIELD, CAMP_CHANGE_COST_CFG_COIN_NUM_FIELD}
+CAMP_CHANGE_COST_CFG.is_extendable = false
+CAMP_CHANGE_COST_CFG.extensions = {}
+CAMP_CHANGE_COST_CFGS_ITEMS_FIELD.name = "items"
+CAMP_CHANGE_COST_CFGS_ITEMS_FIELD.full_name = ".ftcfg.camp_change_cost_cfgs.items"
+CAMP_CHANGE_COST_CFGS_ITEMS_FIELD.number = 1
+CAMP_CHANGE_COST_CFGS_ITEMS_FIELD.index = 0
+CAMP_CHANGE_COST_CFGS_ITEMS_FIELD.label = 3
+CAMP_CHANGE_COST_CFGS_ITEMS_FIELD.has_default_value = false
+CAMP_CHANGE_COST_CFGS_ITEMS_FIELD.default_value = {}
+CAMP_CHANGE_COST_CFGS_ITEMS_FIELD.message_type = CAMP_CHANGE_COST_CFG
+CAMP_CHANGE_COST_CFGS_ITEMS_FIELD.type = 11
+CAMP_CHANGE_COST_CFGS_ITEMS_FIELD.cpp_type = 10
+
+CAMP_CHANGE_COST_CFGS.name = "camp_change_cost_cfgs"
+CAMP_CHANGE_COST_CFGS.full_name = ".ftcfg.camp_change_cost_cfgs"
+CAMP_CHANGE_COST_CFGS.nested_types = {}
+CAMP_CHANGE_COST_CFGS.enum_types = {}
+CAMP_CHANGE_COST_CFGS.fields = {CAMP_CHANGE_COST_CFGS_ITEMS_FIELD}
+CAMP_CHANGE_COST_CFGS.is_extendable = false
+CAMP_CHANGE_COST_CFGS.extensions = {}
+RANDOMMAN_CFG_NAME0_FIELD.name = "name0"
+RANDOMMAN_CFG_NAME0_FIELD.full_name = ".ftcfg.randomman_cfg.name0"
+RANDOMMAN_CFG_NAME0_FIELD.number = 1
+RANDOMMAN_CFG_NAME0_FIELD.index = 0
+RANDOMMAN_CFG_NAME0_FIELD.label = 2
+RANDOMMAN_CFG_NAME0_FIELD.has_default_value = false
+RANDOMMAN_CFG_NAME0_FIELD.default_value = ""
+RANDOMMAN_CFG_NAME0_FIELD.type = 9
+RANDOMMAN_CFG_NAME0_FIELD.cpp_type = 9
+
+RANDOMMAN_CFG_NAME1_FIELD.name = "name1"
+RANDOMMAN_CFG_NAME1_FIELD.full_name = ".ftcfg.randomman_cfg.name1"
+RANDOMMAN_CFG_NAME1_FIELD.number = 2
+RANDOMMAN_CFG_NAME1_FIELD.index = 1
+RANDOMMAN_CFG_NAME1_FIELD.label = 2
+RANDOMMAN_CFG_NAME1_FIELD.has_default_value = false
+RANDOMMAN_CFG_NAME1_FIELD.default_value = ""
+RANDOMMAN_CFG_NAME1_FIELD.type = 9
+RANDOMMAN_CFG_NAME1_FIELD.cpp_type = 9
+
+RANDOMMAN_CFG.name = "randomman_cfg"
+RANDOMMAN_CFG.full_name = ".ftcfg.randomman_cfg"
+RANDOMMAN_CFG.nested_types = {}
+RANDOMMAN_CFG.enum_types = {}
+RANDOMMAN_CFG.fields = {RANDOMMAN_CFG_NAME0_FIELD, RANDOMMAN_CFG_NAME1_FIELD}
+RANDOMMAN_CFG.is_extendable = false
+RANDOMMAN_CFG.extensions = {}
+RANDOMMAN_CFGS_ITEMS_FIELD.name = "items"
+RANDOMMAN_CFGS_ITEMS_FIELD.full_name = ".ftcfg.randomman_cfgs.items"
+RANDOMMAN_CFGS_ITEMS_FIELD.number = 1
+RANDOMMAN_CFGS_ITEMS_FIELD.index = 0
+RANDOMMAN_CFGS_ITEMS_FIELD.label = 3
+RANDOMMAN_CFGS_ITEMS_FIELD.has_default_value = false
+RANDOMMAN_CFGS_ITEMS_FIELD.default_value = {}
+RANDOMMAN_CFGS_ITEMS_FIELD.message_type = RANDOMMAN_CFG
+RANDOMMAN_CFGS_ITEMS_FIELD.type = 11
+RANDOMMAN_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RANDOMMAN_CFGS.name = "randomman_cfgs"
+RANDOMMAN_CFGS.full_name = ".ftcfg.randomman_cfgs"
+RANDOMMAN_CFGS.nested_types = {}
+RANDOMMAN_CFGS.enum_types = {}
+RANDOMMAN_CFGS.fields = {RANDOMMAN_CFGS_ITEMS_FIELD}
+RANDOMMAN_CFGS.is_extendable = false
+RANDOMMAN_CFGS.extensions = {}
+RANDOMWOMAN_CFG_NAME0_FIELD.name = "name0"
+RANDOMWOMAN_CFG_NAME0_FIELD.full_name = ".ftcfg.randomwoman_cfg.name0"
+RANDOMWOMAN_CFG_NAME0_FIELD.number = 1
+RANDOMWOMAN_CFG_NAME0_FIELD.index = 0
+RANDOMWOMAN_CFG_NAME0_FIELD.label = 2
+RANDOMWOMAN_CFG_NAME0_FIELD.has_default_value = false
+RANDOMWOMAN_CFG_NAME0_FIELD.default_value = ""
+RANDOMWOMAN_CFG_NAME0_FIELD.type = 9
+RANDOMWOMAN_CFG_NAME0_FIELD.cpp_type = 9
+
+RANDOMWOMAN_CFG_NAME1_FIELD.name = "name1"
+RANDOMWOMAN_CFG_NAME1_FIELD.full_name = ".ftcfg.randomwoman_cfg.name1"
+RANDOMWOMAN_CFG_NAME1_FIELD.number = 2
+RANDOMWOMAN_CFG_NAME1_FIELD.index = 1
+RANDOMWOMAN_CFG_NAME1_FIELD.label = 2
+RANDOMWOMAN_CFG_NAME1_FIELD.has_default_value = false
+RANDOMWOMAN_CFG_NAME1_FIELD.default_value = ""
+RANDOMWOMAN_CFG_NAME1_FIELD.type = 9
+RANDOMWOMAN_CFG_NAME1_FIELD.cpp_type = 9
+
+RANDOMWOMAN_CFG.name = "randomwoman_cfg"
+RANDOMWOMAN_CFG.full_name = ".ftcfg.randomwoman_cfg"
+RANDOMWOMAN_CFG.nested_types = {}
+RANDOMWOMAN_CFG.enum_types = {}
+RANDOMWOMAN_CFG.fields = {RANDOMWOMAN_CFG_NAME0_FIELD, RANDOMWOMAN_CFG_NAME1_FIELD}
+RANDOMWOMAN_CFG.is_extendable = false
+RANDOMWOMAN_CFG.extensions = {}
+RANDOMWOMAN_CFGS_ITEMS_FIELD.name = "items"
+RANDOMWOMAN_CFGS_ITEMS_FIELD.full_name = ".ftcfg.randomwoman_cfgs.items"
+RANDOMWOMAN_CFGS_ITEMS_FIELD.number = 1
+RANDOMWOMAN_CFGS_ITEMS_FIELD.index = 0
+RANDOMWOMAN_CFGS_ITEMS_FIELD.label = 3
+RANDOMWOMAN_CFGS_ITEMS_FIELD.has_default_value = false
+RANDOMWOMAN_CFGS_ITEMS_FIELD.default_value = {}
+RANDOMWOMAN_CFGS_ITEMS_FIELD.message_type = RANDOMWOMAN_CFG
+RANDOMWOMAN_CFGS_ITEMS_FIELD.type = 11
+RANDOMWOMAN_CFGS_ITEMS_FIELD.cpp_type = 10
+
+RANDOMWOMAN_CFGS.name = "randomwoman_cfgs"
+RANDOMWOMAN_CFGS.full_name = ".ftcfg.randomwoman_cfgs"
+RANDOMWOMAN_CFGS.nested_types = {}
+RANDOMWOMAN_CFGS.enum_types = {}
+RANDOMWOMAN_CFGS.fields = {RANDOMWOMAN_CFGS_ITEMS_FIELD}
+RANDOMWOMAN_CFGS.is_extendable = false
+RANDOMWOMAN_CFGS.extensions = {}
+SOUL_BASE_ATTR_CFG_STAR_LEVEL_FIELD.name = "star_level"
+SOUL_BASE_ATTR_CFG_STAR_LEVEL_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.star_level"
+SOUL_BASE_ATTR_CFG_STAR_LEVEL_FIELD.number = 1
+SOUL_BASE_ATTR_CFG_STAR_LEVEL_FIELD.index = 0
+SOUL_BASE_ATTR_CFG_STAR_LEVEL_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_STAR_LEVEL_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_STAR_LEVEL_FIELD.default_value = 0
+SOUL_BASE_ATTR_CFG_STAR_LEVEL_FIELD.type = 13
+SOUL_BASE_ATTR_CFG_STAR_LEVEL_FIELD.cpp_type = 3
+
+SOUL_BASE_ATTR_CFG_LEVEL_FIELD.name = "level"
+SOUL_BASE_ATTR_CFG_LEVEL_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.level"
+SOUL_BASE_ATTR_CFG_LEVEL_FIELD.number = 2
+SOUL_BASE_ATTR_CFG_LEVEL_FIELD.index = 1
+SOUL_BASE_ATTR_CFG_LEVEL_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_LEVEL_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_LEVEL_FIELD.default_value = 0
+SOUL_BASE_ATTR_CFG_LEVEL_FIELD.type = 13
+SOUL_BASE_ATTR_CFG_LEVEL_FIELD.cpp_type = 3
+
+SOUL_BASE_ATTR_CFG_FIGHT_POWER_FIELD.name = "fight_power"
+SOUL_BASE_ATTR_CFG_FIGHT_POWER_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.fight_power"
+SOUL_BASE_ATTR_CFG_FIGHT_POWER_FIELD.number = 3
+SOUL_BASE_ATTR_CFG_FIGHT_POWER_FIELD.index = 2
+SOUL_BASE_ATTR_CFG_FIGHT_POWER_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_FIGHT_POWER_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_FIGHT_POWER_FIELD.default_value = 0
+SOUL_BASE_ATTR_CFG_FIGHT_POWER_FIELD.type = 5
+SOUL_BASE_ATTR_CFG_FIGHT_POWER_FIELD.cpp_type = 1
+
+SOUL_BASE_ATTR_CFG_ATTACK_FIELD.name = "attack"
+SOUL_BASE_ATTR_CFG_ATTACK_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.attack"
+SOUL_BASE_ATTR_CFG_ATTACK_FIELD.number = 4
+SOUL_BASE_ATTR_CFG_ATTACK_FIELD.index = 3
+SOUL_BASE_ATTR_CFG_ATTACK_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_ATTACK_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_ATTACK_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_ATTACK_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_ATTACK_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_DEFENSE_FIELD.name = "defense"
+SOUL_BASE_ATTR_CFG_DEFENSE_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.defense"
+SOUL_BASE_ATTR_CFG_DEFENSE_FIELD.number = 5
+SOUL_BASE_ATTR_CFG_DEFENSE_FIELD.index = 4
+SOUL_BASE_ATTR_CFG_DEFENSE_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_DEFENSE_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_DEFENSE_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_DEFENSE_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_DEFENSE_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_MAXHP_FIELD.name = "maxHp"
+SOUL_BASE_ATTR_CFG_MAXHP_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.maxHp"
+SOUL_BASE_ATTR_CFG_MAXHP_FIELD.number = 6
+SOUL_BASE_ATTR_CFG_MAXHP_FIELD.index = 5
+SOUL_BASE_ATTR_CFG_MAXHP_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_MAXHP_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_MAXHP_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_MAXHP_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_MAXHP_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_CRITICALRATE_FIELD.name = "criticalRate"
+SOUL_BASE_ATTR_CFG_CRITICALRATE_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.criticalRate"
+SOUL_BASE_ATTR_CFG_CRITICALRATE_FIELD.number = 7
+SOUL_BASE_ATTR_CFG_CRITICALRATE_FIELD.index = 6
+SOUL_BASE_ATTR_CFG_CRITICALRATE_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_CRITICALRATE_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_CRITICALRATE_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_CRITICALRATE_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_CRITICALRATE_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_CRITICALPOWERRATE_FIELD.name = "criticalPowerRate"
+SOUL_BASE_ATTR_CFG_CRITICALPOWERRATE_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.criticalPowerRate"
+SOUL_BASE_ATTR_CFG_CRITICALPOWERRATE_FIELD.number = 8
+SOUL_BASE_ATTR_CFG_CRITICALPOWERRATE_FIELD.index = 7
+SOUL_BASE_ATTR_CFG_CRITICALPOWERRATE_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_CRITICALPOWERRATE_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_CRITICALPOWERRATE_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_CRITICALPOWERRATE_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_CRITICALPOWERRATE_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_HITRATE_FIELD.name = "hitRate"
+SOUL_BASE_ATTR_CFG_HITRATE_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.hitRate"
+SOUL_BASE_ATTR_CFG_HITRATE_FIELD.number = 9
+SOUL_BASE_ATTR_CFG_HITRATE_FIELD.index = 8
+SOUL_BASE_ATTR_CFG_HITRATE_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_HITRATE_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_HITRATE_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_HITRATE_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_HITRATE_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_DEFYBLOCKRATE_FIELD.name = "defyBlockRate"
+SOUL_BASE_ATTR_CFG_DEFYBLOCKRATE_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.defyBlockRate"
+SOUL_BASE_ATTR_CFG_DEFYBLOCKRATE_FIELD.number = 10
+SOUL_BASE_ATTR_CFG_DEFYBLOCKRATE_FIELD.index = 9
+SOUL_BASE_ATTR_CFG_DEFYBLOCKRATE_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_DEFYBLOCKRATE_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_DEFYBLOCKRATE_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_DEFYBLOCKRATE_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_DEFYBLOCKRATE_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_MAUD_FIELD.name = "maud"
+SOUL_BASE_ATTR_CFG_MAUD_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.maud"
+SOUL_BASE_ATTR_CFG_MAUD_FIELD.number = 11
+SOUL_BASE_ATTR_CFG_MAUD_FIELD.index = 10
+SOUL_BASE_ATTR_CFG_MAUD_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_MAUD_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_MAUD_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_MAUD_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_MAUD_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_MIND_FIELD.name = "mind"
+SOUL_BASE_ATTR_CFG_MIND_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.mind"
+SOUL_BASE_ATTR_CFG_MIND_FIELD.number = 12
+SOUL_BASE_ATTR_CFG_MIND_FIELD.index = 11
+SOUL_BASE_ATTR_CFG_MIND_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_MIND_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_MIND_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_MIND_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_MIND_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_CONSTITUTION_FIELD.name = "constitution"
+SOUL_BASE_ATTR_CFG_CONSTITUTION_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.constitution"
+SOUL_BASE_ATTR_CFG_CONSTITUTION_FIELD.number = 13
+SOUL_BASE_ATTR_CFG_CONSTITUTION_FIELD.index = 12
+SOUL_BASE_ATTR_CFG_CONSTITUTION_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_CONSTITUTION_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_CONSTITUTION_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_CONSTITUTION_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_CONSTITUTION_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_BLOCKRATE_FIELD.name = "blockRate"
+SOUL_BASE_ATTR_CFG_BLOCKRATE_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.blockRate"
+SOUL_BASE_ATTR_CFG_BLOCKRATE_FIELD.number = 14
+SOUL_BASE_ATTR_CFG_BLOCKRATE_FIELD.index = 13
+SOUL_BASE_ATTR_CFG_BLOCKRATE_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_BLOCKRATE_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_BLOCKRATE_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_BLOCKRATE_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_BLOCKRATE_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_DODGERATE_FIELD.name = "dodgeRate"
+SOUL_BASE_ATTR_CFG_DODGERATE_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.dodgeRate"
+SOUL_BASE_ATTR_CFG_DODGERATE_FIELD.number = 15
+SOUL_BASE_ATTR_CFG_DODGERATE_FIELD.index = 14
+SOUL_BASE_ATTR_CFG_DODGERATE_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_DODGERATE_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_DODGERATE_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_DODGERATE_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_DODGERATE_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_ANTICRITICALRATE_FIELD.name = "antiCriticalRate"
+SOUL_BASE_ATTR_CFG_ANTICRITICALRATE_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.antiCriticalRate"
+SOUL_BASE_ATTR_CFG_ANTICRITICALRATE_FIELD.number = 16
+SOUL_BASE_ATTR_CFG_ANTICRITICALRATE_FIELD.index = 15
+SOUL_BASE_ATTR_CFG_ANTICRITICALRATE_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_ANTICRITICALRATE_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_ANTICRITICALRATE_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_ANTICRITICALRATE_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_ANTICRITICALRATE_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_ANTICRITICALPOWERRATE_FIELD.name = "antiCriticalPowerRate"
+SOUL_BASE_ATTR_CFG_ANTICRITICALPOWERRATE_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.antiCriticalPowerRate"
+SOUL_BASE_ATTR_CFG_ANTICRITICALPOWERRATE_FIELD.number = 17
+SOUL_BASE_ATTR_CFG_ANTICRITICALPOWERRATE_FIELD.index = 16
+SOUL_BASE_ATTR_CFG_ANTICRITICALPOWERRATE_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_ANTICRITICALPOWERRATE_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_ANTICRITICALPOWERRATE_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_ANTICRITICALPOWERRATE_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_ANTICRITICALPOWERRATE_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_HPHITRETURN_FIELD.name = "hpHitReturn"
+SOUL_BASE_ATTR_CFG_HPHITRETURN_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.hpHitReturn"
+SOUL_BASE_ATTR_CFG_HPHITRETURN_FIELD.number = 18
+SOUL_BASE_ATTR_CFG_HPHITRETURN_FIELD.index = 17
+SOUL_BASE_ATTR_CFG_HPHITRETURN_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_HPHITRETURN_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_HPHITRETURN_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_HPHITRETURN_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_HPHITRETURN_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_INTENSITY_FIELD.name = "intensity"
+SOUL_BASE_ATTR_CFG_INTENSITY_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.intensity"
+SOUL_BASE_ATTR_CFG_INTENSITY_FIELD.number = 19
+SOUL_BASE_ATTR_CFG_INTENSITY_FIELD.index = 18
+SOUL_BASE_ATTR_CFG_INTENSITY_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_INTENSITY_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_INTENSITY_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_INTENSITY_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_INTENSITY_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_DEFYDEFENSERATE_FIELD.name = "defyDefenseRate"
+SOUL_BASE_ATTR_CFG_DEFYDEFENSERATE_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.defyDefenseRate"
+SOUL_BASE_ATTR_CFG_DEFYDEFENSERATE_FIELD.number = 20
+SOUL_BASE_ATTR_CFG_DEFYDEFENSERATE_FIELD.index = 19
+SOUL_BASE_ATTR_CFG_DEFYDEFENSERATE_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_DEFYDEFENSERATE_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_DEFYDEFENSERATE_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_DEFYDEFENSERATE_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_DEFYDEFENSERATE_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG_DEADLYRATE_FIELD.name = "deadlyRate"
+SOUL_BASE_ATTR_CFG_DEADLYRATE_FIELD.full_name = ".ftcfg.soul_base_attr_cfg.deadlyRate"
+SOUL_BASE_ATTR_CFG_DEADLYRATE_FIELD.number = 21
+SOUL_BASE_ATTR_CFG_DEADLYRATE_FIELD.index = 20
+SOUL_BASE_ATTR_CFG_DEADLYRATE_FIELD.label = 2
+SOUL_BASE_ATTR_CFG_DEADLYRATE_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFG_DEADLYRATE_FIELD.default_value = 0.0
+SOUL_BASE_ATTR_CFG_DEADLYRATE_FIELD.type = 2
+SOUL_BASE_ATTR_CFG_DEADLYRATE_FIELD.cpp_type = 6
+
+SOUL_BASE_ATTR_CFG.name = "soul_base_attr_cfg"
+SOUL_BASE_ATTR_CFG.full_name = ".ftcfg.soul_base_attr_cfg"
+SOUL_BASE_ATTR_CFG.nested_types = {}
+SOUL_BASE_ATTR_CFG.enum_types = {}
+SOUL_BASE_ATTR_CFG.fields = {SOUL_BASE_ATTR_CFG_STAR_LEVEL_FIELD, SOUL_BASE_ATTR_CFG_LEVEL_FIELD, SOUL_BASE_ATTR_CFG_FIGHT_POWER_FIELD, SOUL_BASE_ATTR_CFG_ATTACK_FIELD, SOUL_BASE_ATTR_CFG_DEFENSE_FIELD, SOUL_BASE_ATTR_CFG_MAXHP_FIELD, SOUL_BASE_ATTR_CFG_CRITICALRATE_FIELD, SOUL_BASE_ATTR_CFG_CRITICALPOWERRATE_FIELD, SOUL_BASE_ATTR_CFG_HITRATE_FIELD, SOUL_BASE_ATTR_CFG_DEFYBLOCKRATE_FIELD, SOUL_BASE_ATTR_CFG_MAUD_FIELD, SOUL_BASE_ATTR_CFG_MIND_FIELD, SOUL_BASE_ATTR_CFG_CONSTITUTION_FIELD, SOUL_BASE_ATTR_CFG_BLOCKRATE_FIELD, SOUL_BASE_ATTR_CFG_DODGERATE_FIELD, SOUL_BASE_ATTR_CFG_ANTICRITICALRATE_FIELD, SOUL_BASE_ATTR_CFG_ANTICRITICALPOWERRATE_FIELD, SOUL_BASE_ATTR_CFG_HPHITRETURN_FIELD, SOUL_BASE_ATTR_CFG_INTENSITY_FIELD, SOUL_BASE_ATTR_CFG_DEFYDEFENSERATE_FIELD, SOUL_BASE_ATTR_CFG_DEADLYRATE_FIELD}
+SOUL_BASE_ATTR_CFG.is_extendable = false
+SOUL_BASE_ATTR_CFG.extensions = {}
+SOUL_BASE_ATTR_CFGS_ITEMS_FIELD.name = "items"
+SOUL_BASE_ATTR_CFGS_ITEMS_FIELD.full_name = ".ftcfg.soul_base_attr_cfgs.items"
+SOUL_BASE_ATTR_CFGS_ITEMS_FIELD.number = 1
+SOUL_BASE_ATTR_CFGS_ITEMS_FIELD.index = 0
+SOUL_BASE_ATTR_CFGS_ITEMS_FIELD.label = 3
+SOUL_BASE_ATTR_CFGS_ITEMS_FIELD.has_default_value = false
+SOUL_BASE_ATTR_CFGS_ITEMS_FIELD.default_value = {}
+SOUL_BASE_ATTR_CFGS_ITEMS_FIELD.message_type = SOUL_BASE_ATTR_CFG
+SOUL_BASE_ATTR_CFGS_ITEMS_FIELD.type = 11
+SOUL_BASE_ATTR_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SOUL_BASE_ATTR_CFGS.name = "soul_base_attr_cfgs"
+SOUL_BASE_ATTR_CFGS.full_name = ".ftcfg.soul_base_attr_cfgs"
+SOUL_BASE_ATTR_CFGS.nested_types = {}
+SOUL_BASE_ATTR_CFGS.enum_types = {}
+SOUL_BASE_ATTR_CFGS.fields = {SOUL_BASE_ATTR_CFGS_ITEMS_FIELD}
+SOUL_BASE_ATTR_CFGS.is_extendable = false
+SOUL_BASE_ATTR_CFGS.extensions = {}
+SOUL_MAGIC_ATTR_CFG_STAR_LEVEL_FIELD.name = "star_level"
+SOUL_MAGIC_ATTR_CFG_STAR_LEVEL_FIELD.full_name = ".ftcfg.soul_magic_attr_cfg.star_level"
+SOUL_MAGIC_ATTR_CFG_STAR_LEVEL_FIELD.number = 1
+SOUL_MAGIC_ATTR_CFG_STAR_LEVEL_FIELD.index = 0
+SOUL_MAGIC_ATTR_CFG_STAR_LEVEL_FIELD.label = 2
+SOUL_MAGIC_ATTR_CFG_STAR_LEVEL_FIELD.has_default_value = false
+SOUL_MAGIC_ATTR_CFG_STAR_LEVEL_FIELD.default_value = 0
+SOUL_MAGIC_ATTR_CFG_STAR_LEVEL_FIELD.type = 13
+SOUL_MAGIC_ATTR_CFG_STAR_LEVEL_FIELD.cpp_type = 3
+
+SOUL_MAGIC_ATTR_CFG_LEVEL_FIELD.name = "level"
+SOUL_MAGIC_ATTR_CFG_LEVEL_FIELD.full_name = ".ftcfg.soul_magic_attr_cfg.level"
+SOUL_MAGIC_ATTR_CFG_LEVEL_FIELD.number = 2
+SOUL_MAGIC_ATTR_CFG_LEVEL_FIELD.index = 1
+SOUL_MAGIC_ATTR_CFG_LEVEL_FIELD.label = 2
+SOUL_MAGIC_ATTR_CFG_LEVEL_FIELD.has_default_value = false
+SOUL_MAGIC_ATTR_CFG_LEVEL_FIELD.default_value = 0
+SOUL_MAGIC_ATTR_CFG_LEVEL_FIELD.type = 13
+SOUL_MAGIC_ATTR_CFG_LEVEL_FIELD.cpp_type = 3
+
+SOUL_MAGIC_ATTR_CFG_FIGHT_POWER_FIELD.name = "fight_power"
+SOUL_MAGIC_ATTR_CFG_FIGHT_POWER_FIELD.full_name = ".ftcfg.soul_magic_attr_cfg.fight_power"
+SOUL_MAGIC_ATTR_CFG_FIGHT_POWER_FIELD.number = 3
+SOUL_MAGIC_ATTR_CFG_FIGHT_POWER_FIELD.index = 2
+SOUL_MAGIC_ATTR_CFG_FIGHT_POWER_FIELD.label = 2
+SOUL_MAGIC_ATTR_CFG_FIGHT_POWER_FIELD.has_default_value = false
+SOUL_MAGIC_ATTR_CFG_FIGHT_POWER_FIELD.default_value = 0
+SOUL_MAGIC_ATTR_CFG_FIGHT_POWER_FIELD.type = 5
+SOUL_MAGIC_ATTR_CFG_FIGHT_POWER_FIELD.cpp_type = 1
+
+SOUL_MAGIC_ATTR_CFG.name = "soul_magic_attr_cfg"
+SOUL_MAGIC_ATTR_CFG.full_name = ".ftcfg.soul_magic_attr_cfg"
+SOUL_MAGIC_ATTR_CFG.nested_types = {}
+SOUL_MAGIC_ATTR_CFG.enum_types = {}
+SOUL_MAGIC_ATTR_CFG.fields = {SOUL_MAGIC_ATTR_CFG_STAR_LEVEL_FIELD, SOUL_MAGIC_ATTR_CFG_LEVEL_FIELD, SOUL_MAGIC_ATTR_CFG_FIGHT_POWER_FIELD}
+SOUL_MAGIC_ATTR_CFG.is_extendable = false
+SOUL_MAGIC_ATTR_CFG.extensions = {}
+SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD.name = "items"
+SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD.full_name = ".ftcfg.soul_magic_attr_cfgs.items"
+SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD.number = 1
+SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD.index = 0
+SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD.label = 3
+SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD.has_default_value = false
+SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD.default_value = {}
+SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD.message_type = SOUL_MAGIC_ATTR_CFG
+SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD.type = 11
+SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SOUL_MAGIC_ATTR_CFGS.name = "soul_magic_attr_cfgs"
+SOUL_MAGIC_ATTR_CFGS.full_name = ".ftcfg.soul_magic_attr_cfgs"
+SOUL_MAGIC_ATTR_CFGS.nested_types = {}
+SOUL_MAGIC_ATTR_CFGS.enum_types = {}
+SOUL_MAGIC_ATTR_CFGS.fields = {SOUL_MAGIC_ATTR_CFGS_ITEMS_FIELD}
+SOUL_MAGIC_ATTR_CFGS.is_extendable = false
+SOUL_MAGIC_ATTR_CFGS.extensions = {}
+SOUL_SUIT_ATTR_CFG_STAR_LEVEL_FIELD.name = "star_level"
+SOUL_SUIT_ATTR_CFG_STAR_LEVEL_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.star_level"
+SOUL_SUIT_ATTR_CFG_STAR_LEVEL_FIELD.number = 1
+SOUL_SUIT_ATTR_CFG_STAR_LEVEL_FIELD.index = 0
+SOUL_SUIT_ATTR_CFG_STAR_LEVEL_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_STAR_LEVEL_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_STAR_LEVEL_FIELD.default_value = 0
+SOUL_SUIT_ATTR_CFG_STAR_LEVEL_FIELD.type = 13
+SOUL_SUIT_ATTR_CFG_STAR_LEVEL_FIELD.cpp_type = 3
+
+SOUL_SUIT_ATTR_CFG_SUITID_FIELD.name = "suitid"
+SOUL_SUIT_ATTR_CFG_SUITID_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.suitid"
+SOUL_SUIT_ATTR_CFG_SUITID_FIELD.number = 2
+SOUL_SUIT_ATTR_CFG_SUITID_FIELD.index = 1
+SOUL_SUIT_ATTR_CFG_SUITID_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_SUITID_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_SUITID_FIELD.default_value = 0
+SOUL_SUIT_ATTR_CFG_SUITID_FIELD.type = 5
+SOUL_SUIT_ATTR_CFG_SUITID_FIELD.cpp_type = 1
+
+SOUL_SUIT_ATTR_CFG_SUITNAME_FIELD.name = "suitname"
+SOUL_SUIT_ATTR_CFG_SUITNAME_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.suitname"
+SOUL_SUIT_ATTR_CFG_SUITNAME_FIELD.number = 3
+SOUL_SUIT_ATTR_CFG_SUITNAME_FIELD.index = 2
+SOUL_SUIT_ATTR_CFG_SUITNAME_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_SUITNAME_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_SUITNAME_FIELD.default_value = ""
+SOUL_SUIT_ATTR_CFG_SUITNAME_FIELD.type = 9
+SOUL_SUIT_ATTR_CFG_SUITNAME_FIELD.cpp_type = 9
+
+SOUL_SUIT_ATTR_CFG_SUIT_NUM_FIELD.name = "suit_num"
+SOUL_SUIT_ATTR_CFG_SUIT_NUM_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.suit_num"
+SOUL_SUIT_ATTR_CFG_SUIT_NUM_FIELD.number = 4
+SOUL_SUIT_ATTR_CFG_SUIT_NUM_FIELD.index = 3
+SOUL_SUIT_ATTR_CFG_SUIT_NUM_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_SUIT_NUM_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_SUIT_NUM_FIELD.default_value = 0
+SOUL_SUIT_ATTR_CFG_SUIT_NUM_FIELD.type = 5
+SOUL_SUIT_ATTR_CFG_SUIT_NUM_FIELD.cpp_type = 1
+
+SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD.name = "prop_type"
+SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.prop_type"
+SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD.number = 5
+SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD.index = 4
+SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD.default_value = nil
+SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPOPTYPE
+SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD.type = 14
+SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD.cpp_type = 8
+
+SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD.name = "suit_type"
+SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.suit_type"
+SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD.number = 6
+SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD.index = 5
+SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD.default_value = nil
+SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPTYPE
+SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD.type = 14
+SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD.cpp_type = 8
+
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_FIELD.name = "fight_power"
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.fight_power"
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_FIELD.number = 7
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_FIELD.index = 6
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_FIELD.default_value = 0
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_FIELD.type = 5
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_FIELD.cpp_type = 1
+
+SOUL_SUIT_ATTR_CFG_SUIT_DATA_FIELD.name = "suit_data"
+SOUL_SUIT_ATTR_CFG_SUIT_DATA_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.suit_data"
+SOUL_SUIT_ATTR_CFG_SUIT_DATA_FIELD.number = 8
+SOUL_SUIT_ATTR_CFG_SUIT_DATA_FIELD.index = 7
+SOUL_SUIT_ATTR_CFG_SUIT_DATA_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_SUIT_DATA_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_SUIT_DATA_FIELD.default_value = 0.0
+SOUL_SUIT_ATTR_CFG_SUIT_DATA_FIELD.type = 2
+SOUL_SUIT_ATTR_CFG_SUIT_DATA_FIELD.cpp_type = 6
+
+SOUL_SUIT_ATTR_CFG_SUIT_CION_FIELD.name = "suit_cion"
+SOUL_SUIT_ATTR_CFG_SUIT_CION_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.suit_cion"
+SOUL_SUIT_ATTR_CFG_SUIT_CION_FIELD.number = 9
+SOUL_SUIT_ATTR_CFG_SUIT_CION_FIELD.index = 8
+SOUL_SUIT_ATTR_CFG_SUIT_CION_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_SUIT_CION_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_SUIT_CION_FIELD.default_value = 0
+SOUL_SUIT_ATTR_CFG_SUIT_CION_FIELD.type = 5
+SOUL_SUIT_ATTR_CFG_SUIT_CION_FIELD.cpp_type = 1
+
+SOUL_SUIT_ATTR_CFG_SUIT_TWO_NUM_FIELD.name = "suit_two_num"
+SOUL_SUIT_ATTR_CFG_SUIT_TWO_NUM_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.suit_two_num"
+SOUL_SUIT_ATTR_CFG_SUIT_TWO_NUM_FIELD.number = 10
+SOUL_SUIT_ATTR_CFG_SUIT_TWO_NUM_FIELD.index = 9
+SOUL_SUIT_ATTR_CFG_SUIT_TWO_NUM_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_SUIT_TWO_NUM_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_SUIT_TWO_NUM_FIELD.default_value = 0
+SOUL_SUIT_ATTR_CFG_SUIT_TWO_NUM_FIELD.type = 5
+SOUL_SUIT_ATTR_CFG_SUIT_TWO_NUM_FIELD.cpp_type = 1
+
+SOUL_SUIT_ATTR_CFG_SUIT_SKILL_FIELD.name = "suit_skill"
+SOUL_SUIT_ATTR_CFG_SUIT_SKILL_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.suit_skill"
+SOUL_SUIT_ATTR_CFG_SUIT_SKILL_FIELD.number = 11
+SOUL_SUIT_ATTR_CFG_SUIT_SKILL_FIELD.index = 10
+SOUL_SUIT_ATTR_CFG_SUIT_SKILL_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_SUIT_SKILL_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_SUIT_SKILL_FIELD.default_value = 0
+SOUL_SUIT_ATTR_CFG_SUIT_SKILL_FIELD.type = 5
+SOUL_SUIT_ATTR_CFG_SUIT_SKILL_FIELD.cpp_type = 1
+
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_TWO_FIELD.name = "fight_power_two"
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_TWO_FIELD.full_name = ".ftcfg.soul_suit_attr_cfg.fight_power_two"
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_TWO_FIELD.number = 12
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_TWO_FIELD.index = 11
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_TWO_FIELD.label = 2
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_TWO_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_TWO_FIELD.default_value = 0
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_TWO_FIELD.type = 5
+SOUL_SUIT_ATTR_CFG_FIGHT_POWER_TWO_FIELD.cpp_type = 1
+
+SOUL_SUIT_ATTR_CFG.name = "soul_suit_attr_cfg"
+SOUL_SUIT_ATTR_CFG.full_name = ".ftcfg.soul_suit_attr_cfg"
+SOUL_SUIT_ATTR_CFG.nested_types = {}
+SOUL_SUIT_ATTR_CFG.enum_types = {}
+SOUL_SUIT_ATTR_CFG.fields = {SOUL_SUIT_ATTR_CFG_STAR_LEVEL_FIELD, SOUL_SUIT_ATTR_CFG_SUITID_FIELD, SOUL_SUIT_ATTR_CFG_SUITNAME_FIELD, SOUL_SUIT_ATTR_CFG_SUIT_NUM_FIELD, SOUL_SUIT_ATTR_CFG_PROP_TYPE_FIELD, SOUL_SUIT_ATTR_CFG_SUIT_TYPE_FIELD, SOUL_SUIT_ATTR_CFG_FIGHT_POWER_FIELD, SOUL_SUIT_ATTR_CFG_SUIT_DATA_FIELD, SOUL_SUIT_ATTR_CFG_SUIT_CION_FIELD, SOUL_SUIT_ATTR_CFG_SUIT_TWO_NUM_FIELD, SOUL_SUIT_ATTR_CFG_SUIT_SKILL_FIELD, SOUL_SUIT_ATTR_CFG_FIGHT_POWER_TWO_FIELD}
+SOUL_SUIT_ATTR_CFG.is_extendable = false
+SOUL_SUIT_ATTR_CFG.extensions = {}
+SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD.name = "items"
+SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD.full_name = ".ftcfg.soul_suit_attr_cfgs.items"
+SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD.number = 1
+SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD.index = 0
+SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD.label = 3
+SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD.has_default_value = false
+SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD.default_value = {}
+SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD.message_type = SOUL_SUIT_ATTR_CFG
+SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD.type = 11
+SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SOUL_SUIT_ATTR_CFGS.name = "soul_suit_attr_cfgs"
+SOUL_SUIT_ATTR_CFGS.full_name = ".ftcfg.soul_suit_attr_cfgs"
+SOUL_SUIT_ATTR_CFGS.nested_types = {}
+SOUL_SUIT_ATTR_CFGS.enum_types = {}
+SOUL_SUIT_ATTR_CFGS.fields = {SOUL_SUIT_ATTR_CFGS_ITEMS_FIELD}
+SOUL_SUIT_ATTR_CFGS.is_extendable = false
+SOUL_SUIT_ATTR_CFGS.extensions = {}
+SOUL_LEVEL_UP_CFG_STAR_LEVEL_FIELD.name = "star_level"
+SOUL_LEVEL_UP_CFG_STAR_LEVEL_FIELD.full_name = ".ftcfg.soul_level_up_cfg.star_level"
+SOUL_LEVEL_UP_CFG_STAR_LEVEL_FIELD.number = 1
+SOUL_LEVEL_UP_CFG_STAR_LEVEL_FIELD.index = 0
+SOUL_LEVEL_UP_CFG_STAR_LEVEL_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_STAR_LEVEL_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_STAR_LEVEL_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_STAR_LEVEL_FIELD.type = 13
+SOUL_LEVEL_UP_CFG_STAR_LEVEL_FIELD.cpp_type = 3
+
+SOUL_LEVEL_UP_CFG_EXP_ONE_FIELD.name = "exp_one"
+SOUL_LEVEL_UP_CFG_EXP_ONE_FIELD.full_name = ".ftcfg.soul_level_up_cfg.exp_one"
+SOUL_LEVEL_UP_CFG_EXP_ONE_FIELD.number = 2
+SOUL_LEVEL_UP_CFG_EXP_ONE_FIELD.index = 1
+SOUL_LEVEL_UP_CFG_EXP_ONE_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_EXP_ONE_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_EXP_ONE_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_EXP_ONE_FIELD.type = 5
+SOUL_LEVEL_UP_CFG_EXP_ONE_FIELD.cpp_type = 1
+
+SOUL_LEVEL_UP_CFG_EXP_TWO_FIELD.name = "exp_two"
+SOUL_LEVEL_UP_CFG_EXP_TWO_FIELD.full_name = ".ftcfg.soul_level_up_cfg.exp_two"
+SOUL_LEVEL_UP_CFG_EXP_TWO_FIELD.number = 3
+SOUL_LEVEL_UP_CFG_EXP_TWO_FIELD.index = 2
+SOUL_LEVEL_UP_CFG_EXP_TWO_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_EXP_TWO_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_EXP_TWO_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_EXP_TWO_FIELD.type = 5
+SOUL_LEVEL_UP_CFG_EXP_TWO_FIELD.cpp_type = 1
+
+SOUL_LEVEL_UP_CFG_EXP_THREE_FIELD.name = "exp_three"
+SOUL_LEVEL_UP_CFG_EXP_THREE_FIELD.full_name = ".ftcfg.soul_level_up_cfg.exp_three"
+SOUL_LEVEL_UP_CFG_EXP_THREE_FIELD.number = 4
+SOUL_LEVEL_UP_CFG_EXP_THREE_FIELD.index = 3
+SOUL_LEVEL_UP_CFG_EXP_THREE_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_EXP_THREE_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_EXP_THREE_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_EXP_THREE_FIELD.type = 5
+SOUL_LEVEL_UP_CFG_EXP_THREE_FIELD.cpp_type = 1
+
+SOUL_LEVEL_UP_CFG_EXP_FOUR_FIELD.name = "exp_four"
+SOUL_LEVEL_UP_CFG_EXP_FOUR_FIELD.full_name = ".ftcfg.soul_level_up_cfg.exp_four"
+SOUL_LEVEL_UP_CFG_EXP_FOUR_FIELD.number = 5
+SOUL_LEVEL_UP_CFG_EXP_FOUR_FIELD.index = 4
+SOUL_LEVEL_UP_CFG_EXP_FOUR_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_EXP_FOUR_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_EXP_FOUR_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_EXP_FOUR_FIELD.type = 5
+SOUL_LEVEL_UP_CFG_EXP_FOUR_FIELD.cpp_type = 1
+
+SOUL_LEVEL_UP_CFG_EXP_FIVE_FIELD.name = "exp_five"
+SOUL_LEVEL_UP_CFG_EXP_FIVE_FIELD.full_name = ".ftcfg.soul_level_up_cfg.exp_five"
+SOUL_LEVEL_UP_CFG_EXP_FIVE_FIELD.number = 6
+SOUL_LEVEL_UP_CFG_EXP_FIVE_FIELD.index = 5
+SOUL_LEVEL_UP_CFG_EXP_FIVE_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_EXP_FIVE_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_EXP_FIVE_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_EXP_FIVE_FIELD.type = 5
+SOUL_LEVEL_UP_CFG_EXP_FIVE_FIELD.cpp_type = 1
+
+SOUL_LEVEL_UP_CFG_EXP_SIX_FIELD.name = "exp_six"
+SOUL_LEVEL_UP_CFG_EXP_SIX_FIELD.full_name = ".ftcfg.soul_level_up_cfg.exp_six"
+SOUL_LEVEL_UP_CFG_EXP_SIX_FIELD.number = 7
+SOUL_LEVEL_UP_CFG_EXP_SIX_FIELD.index = 6
+SOUL_LEVEL_UP_CFG_EXP_SIX_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_EXP_SIX_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_EXP_SIX_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_EXP_SIX_FIELD.type = 5
+SOUL_LEVEL_UP_CFG_EXP_SIX_FIELD.cpp_type = 1
+
+SOUL_LEVEL_UP_CFG_EXP_SEVEN_FIELD.name = "exp_seven"
+SOUL_LEVEL_UP_CFG_EXP_SEVEN_FIELD.full_name = ".ftcfg.soul_level_up_cfg.exp_seven"
+SOUL_LEVEL_UP_CFG_EXP_SEVEN_FIELD.number = 8
+SOUL_LEVEL_UP_CFG_EXP_SEVEN_FIELD.index = 7
+SOUL_LEVEL_UP_CFG_EXP_SEVEN_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_EXP_SEVEN_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_EXP_SEVEN_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_EXP_SEVEN_FIELD.type = 5
+SOUL_LEVEL_UP_CFG_EXP_SEVEN_FIELD.cpp_type = 1
+
+SOUL_LEVEL_UP_CFG_EXP_EIGHT_FIELD.name = "exp_eight"
+SOUL_LEVEL_UP_CFG_EXP_EIGHT_FIELD.full_name = ".ftcfg.soul_level_up_cfg.exp_eight"
+SOUL_LEVEL_UP_CFG_EXP_EIGHT_FIELD.number = 9
+SOUL_LEVEL_UP_CFG_EXP_EIGHT_FIELD.index = 8
+SOUL_LEVEL_UP_CFG_EXP_EIGHT_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_EXP_EIGHT_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_EXP_EIGHT_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_EXP_EIGHT_FIELD.type = 5
+SOUL_LEVEL_UP_CFG_EXP_EIGHT_FIELD.cpp_type = 1
+
+SOUL_LEVEL_UP_CFG_EXP_NINE_FIELD.name = "exp_nine"
+SOUL_LEVEL_UP_CFG_EXP_NINE_FIELD.full_name = ".ftcfg.soul_level_up_cfg.exp_nine"
+SOUL_LEVEL_UP_CFG_EXP_NINE_FIELD.number = 10
+SOUL_LEVEL_UP_CFG_EXP_NINE_FIELD.index = 9
+SOUL_LEVEL_UP_CFG_EXP_NINE_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_EXP_NINE_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_EXP_NINE_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_EXP_NINE_FIELD.type = 5
+SOUL_LEVEL_UP_CFG_EXP_NINE_FIELD.cpp_type = 1
+
+SOUL_LEVEL_UP_CFG_EXP_TEN_FIELD.name = "exp_ten"
+SOUL_LEVEL_UP_CFG_EXP_TEN_FIELD.full_name = ".ftcfg.soul_level_up_cfg.exp_ten"
+SOUL_LEVEL_UP_CFG_EXP_TEN_FIELD.number = 11
+SOUL_LEVEL_UP_CFG_EXP_TEN_FIELD.index = 10
+SOUL_LEVEL_UP_CFG_EXP_TEN_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_EXP_TEN_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_EXP_TEN_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_EXP_TEN_FIELD.type = 5
+SOUL_LEVEL_UP_CFG_EXP_TEN_FIELD.cpp_type = 1
+
+SOUL_LEVEL_UP_CFG_EXP_CHANGE_FIELD.name = "exp_change"
+SOUL_LEVEL_UP_CFG_EXP_CHANGE_FIELD.full_name = ".ftcfg.soul_level_up_cfg.exp_change"
+SOUL_LEVEL_UP_CFG_EXP_CHANGE_FIELD.number = 12
+SOUL_LEVEL_UP_CFG_EXP_CHANGE_FIELD.index = 11
+SOUL_LEVEL_UP_CFG_EXP_CHANGE_FIELD.label = 2
+SOUL_LEVEL_UP_CFG_EXP_CHANGE_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFG_EXP_CHANGE_FIELD.default_value = 0
+SOUL_LEVEL_UP_CFG_EXP_CHANGE_FIELD.type = 5
+SOUL_LEVEL_UP_CFG_EXP_CHANGE_FIELD.cpp_type = 1
+
+SOUL_LEVEL_UP_CFG.name = "soul_level_up_cfg"
+SOUL_LEVEL_UP_CFG.full_name = ".ftcfg.soul_level_up_cfg"
+SOUL_LEVEL_UP_CFG.nested_types = {}
+SOUL_LEVEL_UP_CFG.enum_types = {}
+SOUL_LEVEL_UP_CFG.fields = {SOUL_LEVEL_UP_CFG_STAR_LEVEL_FIELD, SOUL_LEVEL_UP_CFG_EXP_ONE_FIELD, SOUL_LEVEL_UP_CFG_EXP_TWO_FIELD, SOUL_LEVEL_UP_CFG_EXP_THREE_FIELD, SOUL_LEVEL_UP_CFG_EXP_FOUR_FIELD, SOUL_LEVEL_UP_CFG_EXP_FIVE_FIELD, SOUL_LEVEL_UP_CFG_EXP_SIX_FIELD, SOUL_LEVEL_UP_CFG_EXP_SEVEN_FIELD, SOUL_LEVEL_UP_CFG_EXP_EIGHT_FIELD, SOUL_LEVEL_UP_CFG_EXP_NINE_FIELD, SOUL_LEVEL_UP_CFG_EXP_TEN_FIELD, SOUL_LEVEL_UP_CFG_EXP_CHANGE_FIELD}
+SOUL_LEVEL_UP_CFG.is_extendable = false
+SOUL_LEVEL_UP_CFG.extensions = {}
+SOUL_LEVEL_UP_CFGS_ITEMS_FIELD.name = "items"
+SOUL_LEVEL_UP_CFGS_ITEMS_FIELD.full_name = ".ftcfg.soul_level_up_cfgs.items"
+SOUL_LEVEL_UP_CFGS_ITEMS_FIELD.number = 1
+SOUL_LEVEL_UP_CFGS_ITEMS_FIELD.index = 0
+SOUL_LEVEL_UP_CFGS_ITEMS_FIELD.label = 3
+SOUL_LEVEL_UP_CFGS_ITEMS_FIELD.has_default_value = false
+SOUL_LEVEL_UP_CFGS_ITEMS_FIELD.default_value = {}
+SOUL_LEVEL_UP_CFGS_ITEMS_FIELD.message_type = SOUL_LEVEL_UP_CFG
+SOUL_LEVEL_UP_CFGS_ITEMS_FIELD.type = 11
+SOUL_LEVEL_UP_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SOUL_LEVEL_UP_CFGS.name = "soul_level_up_cfgs"
+SOUL_LEVEL_UP_CFGS.full_name = ".ftcfg.soul_level_up_cfgs"
+SOUL_LEVEL_UP_CFGS.nested_types = {}
+SOUL_LEVEL_UP_CFGS.enum_types = {}
+SOUL_LEVEL_UP_CFGS.fields = {SOUL_LEVEL_UP_CFGS_ITEMS_FIELD}
+SOUL_LEVEL_UP_CFGS.is_extendable = false
+SOUL_LEVEL_UP_CFGS.extensions = {}
+SOUL_MAGIC_ROCK_CFG_MAGIC_ID_FIELD.name = "magic_id"
+SOUL_MAGIC_ROCK_CFG_MAGIC_ID_FIELD.full_name = ".ftcfg.soul_magic_rock_cfg.magic_id"
+SOUL_MAGIC_ROCK_CFG_MAGIC_ID_FIELD.number = 1
+SOUL_MAGIC_ROCK_CFG_MAGIC_ID_FIELD.index = 0
+SOUL_MAGIC_ROCK_CFG_MAGIC_ID_FIELD.label = 2
+SOUL_MAGIC_ROCK_CFG_MAGIC_ID_FIELD.has_default_value = false
+SOUL_MAGIC_ROCK_CFG_MAGIC_ID_FIELD.default_value = 0
+SOUL_MAGIC_ROCK_CFG_MAGIC_ID_FIELD.type = 5
+SOUL_MAGIC_ROCK_CFG_MAGIC_ID_FIELD.cpp_type = 1
+
+SOUL_MAGIC_ROCK_CFG_MAGIC_NAME_FIELD.name = "magic_name"
+SOUL_MAGIC_ROCK_CFG_MAGIC_NAME_FIELD.full_name = ".ftcfg.soul_magic_rock_cfg.magic_name"
+SOUL_MAGIC_ROCK_CFG_MAGIC_NAME_FIELD.number = 2
+SOUL_MAGIC_ROCK_CFG_MAGIC_NAME_FIELD.index = 1
+SOUL_MAGIC_ROCK_CFG_MAGIC_NAME_FIELD.label = 2
+SOUL_MAGIC_ROCK_CFG_MAGIC_NAME_FIELD.has_default_value = false
+SOUL_MAGIC_ROCK_CFG_MAGIC_NAME_FIELD.default_value = ""
+SOUL_MAGIC_ROCK_CFG_MAGIC_NAME_FIELD.type = 9
+SOUL_MAGIC_ROCK_CFG_MAGIC_NAME_FIELD.cpp_type = 9
+
+SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD.name = "quality"
+SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD.full_name = ".ftcfg.soul_magic_rock_cfg.quality"
+SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD.number = 3
+SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD.index = 2
+SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD.label = 2
+SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD.has_default_value = false
+SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD.default_value = nil
+SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD.enum_type = config_predefine_pb.EITEMCOLOR
+SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD.type = 14
+SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD.cpp_type = 8
+
+SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD.name = "proptype"
+SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD.full_name = ".ftcfg.soul_magic_rock_cfg.proptype"
+SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD.number = 4
+SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD.index = 3
+SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD.label = 2
+SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD.has_default_value = false
+SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD.default_value = nil
+SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD.enum_type = config_predefine_pb.ECPROPOPTYPE
+SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD.type = 14
+SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD.cpp_type = 8
+
+SOUL_MAGIC_ROCK_CFG_TYPE_FIELD.name = "type"
+SOUL_MAGIC_ROCK_CFG_TYPE_FIELD.full_name = ".ftcfg.soul_magic_rock_cfg.type"
+SOUL_MAGIC_ROCK_CFG_TYPE_FIELD.number = 5
+SOUL_MAGIC_ROCK_CFG_TYPE_FIELD.index = 4
+SOUL_MAGIC_ROCK_CFG_TYPE_FIELD.label = 2
+SOUL_MAGIC_ROCK_CFG_TYPE_FIELD.has_default_value = false
+SOUL_MAGIC_ROCK_CFG_TYPE_FIELD.default_value = nil
+SOUL_MAGIC_ROCK_CFG_TYPE_FIELD.enum_type = config_predefine_pb.ECPROPTYPE
+SOUL_MAGIC_ROCK_CFG_TYPE_FIELD.type = 14
+SOUL_MAGIC_ROCK_CFG_TYPE_FIELD.cpp_type = 8
+
+SOUL_MAGIC_ROCK_CFG_MIN_DATA_FIELD.name = "min_data"
+SOUL_MAGIC_ROCK_CFG_MIN_DATA_FIELD.full_name = ".ftcfg.soul_magic_rock_cfg.min_data"
+SOUL_MAGIC_ROCK_CFG_MIN_DATA_FIELD.number = 6
+SOUL_MAGIC_ROCK_CFG_MIN_DATA_FIELD.index = 5
+SOUL_MAGIC_ROCK_CFG_MIN_DATA_FIELD.label = 2
+SOUL_MAGIC_ROCK_CFG_MIN_DATA_FIELD.has_default_value = false
+SOUL_MAGIC_ROCK_CFG_MIN_DATA_FIELD.default_value = 0.0
+SOUL_MAGIC_ROCK_CFG_MIN_DATA_FIELD.type = 2
+SOUL_MAGIC_ROCK_CFG_MIN_DATA_FIELD.cpp_type = 6
+
+SOUL_MAGIC_ROCK_CFG_MAX_DATA_FIELD.name = "max_data"
+SOUL_MAGIC_ROCK_CFG_MAX_DATA_FIELD.full_name = ".ftcfg.soul_magic_rock_cfg.max_data"
+SOUL_MAGIC_ROCK_CFG_MAX_DATA_FIELD.number = 7
+SOUL_MAGIC_ROCK_CFG_MAX_DATA_FIELD.index = 6
+SOUL_MAGIC_ROCK_CFG_MAX_DATA_FIELD.label = 2
+SOUL_MAGIC_ROCK_CFG_MAX_DATA_FIELD.has_default_value = false
+SOUL_MAGIC_ROCK_CFG_MAX_DATA_FIELD.default_value = 0.0
+SOUL_MAGIC_ROCK_CFG_MAX_DATA_FIELD.type = 2
+SOUL_MAGIC_ROCK_CFG_MAX_DATA_FIELD.cpp_type = 6
+
+SOUL_MAGIC_ROCK_CFG_MAX_ADD_FIELD.name = "max_add"
+SOUL_MAGIC_ROCK_CFG_MAX_ADD_FIELD.full_name = ".ftcfg.soul_magic_rock_cfg.max_add"
+SOUL_MAGIC_ROCK_CFG_MAX_ADD_FIELD.number = 8
+SOUL_MAGIC_ROCK_CFG_MAX_ADD_FIELD.index = 7
+SOUL_MAGIC_ROCK_CFG_MAX_ADD_FIELD.label = 2
+SOUL_MAGIC_ROCK_CFG_MAX_ADD_FIELD.has_default_value = false
+SOUL_MAGIC_ROCK_CFG_MAX_ADD_FIELD.default_value = 0.0
+SOUL_MAGIC_ROCK_CFG_MAX_ADD_FIELD.type = 2
+SOUL_MAGIC_ROCK_CFG_MAX_ADD_FIELD.cpp_type = 6
+
+SOUL_MAGIC_ROCK_CFG_SUCCESS_RATIO_FIELD.name = "success_ratio"
+SOUL_MAGIC_ROCK_CFG_SUCCESS_RATIO_FIELD.full_name = ".ftcfg.soul_magic_rock_cfg.success_ratio"
+SOUL_MAGIC_ROCK_CFG_SUCCESS_RATIO_FIELD.number = 9
+SOUL_MAGIC_ROCK_CFG_SUCCESS_RATIO_FIELD.index = 8
+SOUL_MAGIC_ROCK_CFG_SUCCESS_RATIO_FIELD.label = 2
+SOUL_MAGIC_ROCK_CFG_SUCCESS_RATIO_FIELD.has_default_value = false
+SOUL_MAGIC_ROCK_CFG_SUCCESS_RATIO_FIELD.default_value = 0.0
+SOUL_MAGIC_ROCK_CFG_SUCCESS_RATIO_FIELD.type = 2
+SOUL_MAGIC_ROCK_CFG_SUCCESS_RATIO_FIELD.cpp_type = 6
+
+SOUL_MAGIC_ROCK_CFG_ICON_FIELD.name = "icon"
+SOUL_MAGIC_ROCK_CFG_ICON_FIELD.full_name = ".ftcfg.soul_magic_rock_cfg.icon"
+SOUL_MAGIC_ROCK_CFG_ICON_FIELD.number = 10
+SOUL_MAGIC_ROCK_CFG_ICON_FIELD.index = 9
+SOUL_MAGIC_ROCK_CFG_ICON_FIELD.label = 2
+SOUL_MAGIC_ROCK_CFG_ICON_FIELD.has_default_value = false
+SOUL_MAGIC_ROCK_CFG_ICON_FIELD.default_value = 0
+SOUL_MAGIC_ROCK_CFG_ICON_FIELD.type = 5
+SOUL_MAGIC_ROCK_CFG_ICON_FIELD.cpp_type = 1
+
+SOUL_MAGIC_ROCK_CFG.name = "soul_magic_rock_cfg"
+SOUL_MAGIC_ROCK_CFG.full_name = ".ftcfg.soul_magic_rock_cfg"
+SOUL_MAGIC_ROCK_CFG.nested_types = {}
+SOUL_MAGIC_ROCK_CFG.enum_types = {}
+SOUL_MAGIC_ROCK_CFG.fields = {SOUL_MAGIC_ROCK_CFG_MAGIC_ID_FIELD, SOUL_MAGIC_ROCK_CFG_MAGIC_NAME_FIELD, SOUL_MAGIC_ROCK_CFG_QUALITY_FIELD, SOUL_MAGIC_ROCK_CFG_PROPTYPE_FIELD, SOUL_MAGIC_ROCK_CFG_TYPE_FIELD, SOUL_MAGIC_ROCK_CFG_MIN_DATA_FIELD, SOUL_MAGIC_ROCK_CFG_MAX_DATA_FIELD, SOUL_MAGIC_ROCK_CFG_MAX_ADD_FIELD, SOUL_MAGIC_ROCK_CFG_SUCCESS_RATIO_FIELD, SOUL_MAGIC_ROCK_CFG_ICON_FIELD}
+SOUL_MAGIC_ROCK_CFG.is_extendable = false
+SOUL_MAGIC_ROCK_CFG.extensions = {}
+SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD.name = "items"
+SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD.full_name = ".ftcfg.soul_magic_rock_cfgs.items"
+SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD.number = 1
+SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD.index = 0
+SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD.label = 3
+SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD.has_default_value = false
+SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD.default_value = {}
+SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD.message_type = SOUL_MAGIC_ROCK_CFG
+SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD.type = 11
+SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SOUL_MAGIC_ROCK_CFGS.name = "soul_magic_rock_cfgs"
+SOUL_MAGIC_ROCK_CFGS.full_name = ".ftcfg.soul_magic_rock_cfgs"
+SOUL_MAGIC_ROCK_CFGS.nested_types = {}
+SOUL_MAGIC_ROCK_CFGS.enum_types = {}
+SOUL_MAGIC_ROCK_CFGS.fields = {SOUL_MAGIC_ROCK_CFGS_ITEMS_FIELD}
+SOUL_MAGIC_ROCK_CFGS.is_extendable = false
+SOUL_MAGIC_ROCK_CFGS.extensions = {}
+SOUL_REFINE_ROCK_CFG_REFINE_ID_FIELD.name = "refine_id"
+SOUL_REFINE_ROCK_CFG_REFINE_ID_FIELD.full_name = ".ftcfg.soul_refine_rock_cfg.refine_id"
+SOUL_REFINE_ROCK_CFG_REFINE_ID_FIELD.number = 1
+SOUL_REFINE_ROCK_CFG_REFINE_ID_FIELD.index = 0
+SOUL_REFINE_ROCK_CFG_REFINE_ID_FIELD.label = 2
+SOUL_REFINE_ROCK_CFG_REFINE_ID_FIELD.has_default_value = false
+SOUL_REFINE_ROCK_CFG_REFINE_ID_FIELD.default_value = 0
+SOUL_REFINE_ROCK_CFG_REFINE_ID_FIELD.type = 5
+SOUL_REFINE_ROCK_CFG_REFINE_ID_FIELD.cpp_type = 1
+
+SOUL_REFINE_ROCK_CFG_LEVEL_FIELD.name = "level"
+SOUL_REFINE_ROCK_CFG_LEVEL_FIELD.full_name = ".ftcfg.soul_refine_rock_cfg.level"
+SOUL_REFINE_ROCK_CFG_LEVEL_FIELD.number = 2
+SOUL_REFINE_ROCK_CFG_LEVEL_FIELD.index = 1
+SOUL_REFINE_ROCK_CFG_LEVEL_FIELD.label = 2
+SOUL_REFINE_ROCK_CFG_LEVEL_FIELD.has_default_value = false
+SOUL_REFINE_ROCK_CFG_LEVEL_FIELD.default_value = 0
+SOUL_REFINE_ROCK_CFG_LEVEL_FIELD.type = 13
+SOUL_REFINE_ROCK_CFG_LEVEL_FIELD.cpp_type = 3
+
+SOUL_REFINE_ROCK_CFG_COUNT_FIELD.name = "count"
+SOUL_REFINE_ROCK_CFG_COUNT_FIELD.full_name = ".ftcfg.soul_refine_rock_cfg.count"
+SOUL_REFINE_ROCK_CFG_COUNT_FIELD.number = 3
+SOUL_REFINE_ROCK_CFG_COUNT_FIELD.index = 2
+SOUL_REFINE_ROCK_CFG_COUNT_FIELD.label = 2
+SOUL_REFINE_ROCK_CFG_COUNT_FIELD.has_default_value = false
+SOUL_REFINE_ROCK_CFG_COUNT_FIELD.default_value = 0
+SOUL_REFINE_ROCK_CFG_COUNT_FIELD.type = 5
+SOUL_REFINE_ROCK_CFG_COUNT_FIELD.cpp_type = 1
+
+SOUL_REFINE_ROCK_CFG_ICON_FIELD.name = "icon"
+SOUL_REFINE_ROCK_CFG_ICON_FIELD.full_name = ".ftcfg.soul_refine_rock_cfg.icon"
+SOUL_REFINE_ROCK_CFG_ICON_FIELD.number = 4
+SOUL_REFINE_ROCK_CFG_ICON_FIELD.index = 3
+SOUL_REFINE_ROCK_CFG_ICON_FIELD.label = 2
+SOUL_REFINE_ROCK_CFG_ICON_FIELD.has_default_value = false
+SOUL_REFINE_ROCK_CFG_ICON_FIELD.default_value = 0
+SOUL_REFINE_ROCK_CFG_ICON_FIELD.type = 5
+SOUL_REFINE_ROCK_CFG_ICON_FIELD.cpp_type = 1
+
+SOUL_REFINE_ROCK_CFG_NAME_FIELD.name = "name"
+SOUL_REFINE_ROCK_CFG_NAME_FIELD.full_name = ".ftcfg.soul_refine_rock_cfg.name"
+SOUL_REFINE_ROCK_CFG_NAME_FIELD.number = 5
+SOUL_REFINE_ROCK_CFG_NAME_FIELD.index = 4
+SOUL_REFINE_ROCK_CFG_NAME_FIELD.label = 2
+SOUL_REFINE_ROCK_CFG_NAME_FIELD.has_default_value = false
+SOUL_REFINE_ROCK_CFG_NAME_FIELD.default_value = 0
+SOUL_REFINE_ROCK_CFG_NAME_FIELD.type = 5
+SOUL_REFINE_ROCK_CFG_NAME_FIELD.cpp_type = 1
+
+SOUL_REFINE_ROCK_CFG_DESC_FIELD.name = "desc"
+SOUL_REFINE_ROCK_CFG_DESC_FIELD.full_name = ".ftcfg.soul_refine_rock_cfg.desc"
+SOUL_REFINE_ROCK_CFG_DESC_FIELD.number = 6
+SOUL_REFINE_ROCK_CFG_DESC_FIELD.index = 5
+SOUL_REFINE_ROCK_CFG_DESC_FIELD.label = 2
+SOUL_REFINE_ROCK_CFG_DESC_FIELD.has_default_value = false
+SOUL_REFINE_ROCK_CFG_DESC_FIELD.default_value = 0
+SOUL_REFINE_ROCK_CFG_DESC_FIELD.type = 5
+SOUL_REFINE_ROCK_CFG_DESC_FIELD.cpp_type = 1
+
+SOUL_REFINE_ROCK_CFG_POSITION_FIELD.name = "position"
+SOUL_REFINE_ROCK_CFG_POSITION_FIELD.full_name = ".ftcfg.soul_refine_rock_cfg.position"
+SOUL_REFINE_ROCK_CFG_POSITION_FIELD.number = 7
+SOUL_REFINE_ROCK_CFG_POSITION_FIELD.index = 6
+SOUL_REFINE_ROCK_CFG_POSITION_FIELD.label = 2
+SOUL_REFINE_ROCK_CFG_POSITION_FIELD.has_default_value = false
+SOUL_REFINE_ROCK_CFG_POSITION_FIELD.default_value = 0
+SOUL_REFINE_ROCK_CFG_POSITION_FIELD.type = 5
+SOUL_REFINE_ROCK_CFG_POSITION_FIELD.cpp_type = 1
+
+SOUL_REFINE_ROCK_CFG.name = "soul_refine_rock_cfg"
+SOUL_REFINE_ROCK_CFG.full_name = ".ftcfg.soul_refine_rock_cfg"
+SOUL_REFINE_ROCK_CFG.nested_types = {}
+SOUL_REFINE_ROCK_CFG.enum_types = {}
+SOUL_REFINE_ROCK_CFG.fields = {SOUL_REFINE_ROCK_CFG_REFINE_ID_FIELD, SOUL_REFINE_ROCK_CFG_LEVEL_FIELD, SOUL_REFINE_ROCK_CFG_COUNT_FIELD, SOUL_REFINE_ROCK_CFG_ICON_FIELD, SOUL_REFINE_ROCK_CFG_NAME_FIELD, SOUL_REFINE_ROCK_CFG_DESC_FIELD, SOUL_REFINE_ROCK_CFG_POSITION_FIELD}
+SOUL_REFINE_ROCK_CFG.is_extendable = false
+SOUL_REFINE_ROCK_CFG.extensions = {}
+SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD.name = "items"
+SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD.full_name = ".ftcfg.soul_refine_rock_cfgs.items"
+SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD.number = 1
+SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD.index = 0
+SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD.label = 3
+SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD.has_default_value = false
+SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD.default_value = {}
+SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD.message_type = SOUL_REFINE_ROCK_CFG
+SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD.type = 11
+SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD.cpp_type = 10
+
+SOUL_REFINE_ROCK_CFGS.name = "soul_refine_rock_cfgs"
+SOUL_REFINE_ROCK_CFGS.full_name = ".ftcfg.soul_refine_rock_cfgs"
+SOUL_REFINE_ROCK_CFGS.nested_types = {}
+SOUL_REFINE_ROCK_CFGS.enum_types = {}
+SOUL_REFINE_ROCK_CFGS.fields = {SOUL_REFINE_ROCK_CFGS_ITEMS_FIELD}
+SOUL_REFINE_ROCK_CFGS.is_extendable = false
+SOUL_REFINE_ROCK_CFGS.extensions = {}
+WIZARD_TASK_CFG_LEVEL_ID_FIELD.name = "level_id"
+WIZARD_TASK_CFG_LEVEL_ID_FIELD.full_name = ".ftcfg.wizard_task_cfg.level_id"
+WIZARD_TASK_CFG_LEVEL_ID_FIELD.number = 1
+WIZARD_TASK_CFG_LEVEL_ID_FIELD.index = 0
+WIZARD_TASK_CFG_LEVEL_ID_FIELD.label = 2
+WIZARD_TASK_CFG_LEVEL_ID_FIELD.has_default_value = false
+WIZARD_TASK_CFG_LEVEL_ID_FIELD.default_value = 0
+WIZARD_TASK_CFG_LEVEL_ID_FIELD.type = 5
+WIZARD_TASK_CFG_LEVEL_ID_FIELD.cpp_type = 1
+
+WIZARD_TASK_CFG_LEVEL_MIN_FIELD.name = "level_min"
+WIZARD_TASK_CFG_LEVEL_MIN_FIELD.full_name = ".ftcfg.wizard_task_cfg.level_min"
+WIZARD_TASK_CFG_LEVEL_MIN_FIELD.number = 2
+WIZARD_TASK_CFG_LEVEL_MIN_FIELD.index = 1
+WIZARD_TASK_CFG_LEVEL_MIN_FIELD.label = 2
+WIZARD_TASK_CFG_LEVEL_MIN_FIELD.has_default_value = false
+WIZARD_TASK_CFG_LEVEL_MIN_FIELD.default_value = 0
+WIZARD_TASK_CFG_LEVEL_MIN_FIELD.type = 5
+WIZARD_TASK_CFG_LEVEL_MIN_FIELD.cpp_type = 1
+
+WIZARD_TASK_CFG_USE_ITEM_ID_FIELD.name = "use_item_id"
+WIZARD_TASK_CFG_USE_ITEM_ID_FIELD.full_name = ".ftcfg.wizard_task_cfg.use_item_id"
+WIZARD_TASK_CFG_USE_ITEM_ID_FIELD.number = 3
+WIZARD_TASK_CFG_USE_ITEM_ID_FIELD.index = 2
+WIZARD_TASK_CFG_USE_ITEM_ID_FIELD.label = 2
+WIZARD_TASK_CFG_USE_ITEM_ID_FIELD.has_default_value = false
+WIZARD_TASK_CFG_USE_ITEM_ID_FIELD.default_value = 0
+WIZARD_TASK_CFG_USE_ITEM_ID_FIELD.type = 5
+WIZARD_TASK_CFG_USE_ITEM_ID_FIELD.cpp_type = 1
+
+WIZARD_TASK_CFG_USE_ITEM_NUM_FIELD.name = "use_item_num"
+WIZARD_TASK_CFG_USE_ITEM_NUM_FIELD.full_name = ".ftcfg.wizard_task_cfg.use_item_num"
+WIZARD_TASK_CFG_USE_ITEM_NUM_FIELD.number = 4
+WIZARD_TASK_CFG_USE_ITEM_NUM_FIELD.index = 3
+WIZARD_TASK_CFG_USE_ITEM_NUM_FIELD.label = 2
+WIZARD_TASK_CFG_USE_ITEM_NUM_FIELD.has_default_value = false
+WIZARD_TASK_CFG_USE_ITEM_NUM_FIELD.default_value = 0
+WIZARD_TASK_CFG_USE_ITEM_NUM_FIELD.type = 5
+WIZARD_TASK_CFG_USE_ITEM_NUM_FIELD.cpp_type = 1
+
+WIZARD_TASK_CFG.name = "wizard_task_cfg"
+WIZARD_TASK_CFG.full_name = ".ftcfg.wizard_task_cfg"
+WIZARD_TASK_CFG.nested_types = {}
+WIZARD_TASK_CFG.enum_types = {}
+WIZARD_TASK_CFG.fields = {WIZARD_TASK_CFG_LEVEL_ID_FIELD, WIZARD_TASK_CFG_LEVEL_MIN_FIELD, WIZARD_TASK_CFG_USE_ITEM_ID_FIELD, WIZARD_TASK_CFG_USE_ITEM_NUM_FIELD}
+WIZARD_TASK_CFG.is_extendable = false
+WIZARD_TASK_CFG.extensions = {}
+WIZARD_TASK_CFGS_ITEMS_FIELD.name = "items"
+WIZARD_TASK_CFGS_ITEMS_FIELD.full_name = ".ftcfg.wizard_task_cfgs.items"
+WIZARD_TASK_CFGS_ITEMS_FIELD.number = 1
+WIZARD_TASK_CFGS_ITEMS_FIELD.index = 0
+WIZARD_TASK_CFGS_ITEMS_FIELD.label = 3
+WIZARD_TASK_CFGS_ITEMS_FIELD.has_default_value = false
+WIZARD_TASK_CFGS_ITEMS_FIELD.default_value = {}
+WIZARD_TASK_CFGS_ITEMS_FIELD.message_type = WIZARD_TASK_CFG
+WIZARD_TASK_CFGS_ITEMS_FIELD.type = 11
+WIZARD_TASK_CFGS_ITEMS_FIELD.cpp_type = 10
+
+WIZARD_TASK_CFGS.name = "wizard_task_cfgs"
+WIZARD_TASK_CFGS.full_name = ".ftcfg.wizard_task_cfgs"
+WIZARD_TASK_CFGS.nested_types = {}
+WIZARD_TASK_CFGS.enum_types = {}
+WIZARD_TASK_CFGS.fields = {WIZARD_TASK_CFGS_ITEMS_FIELD}
+WIZARD_TASK_CFGS.is_extendable = false
+WIZARD_TASK_CFGS.extensions = {}
+WIZARD_LEVEL_CFG_ID_FIELD.name = "id"
+WIZARD_LEVEL_CFG_ID_FIELD.full_name = ".ftcfg.wizard_level_cfg.id"
+WIZARD_LEVEL_CFG_ID_FIELD.number = 1
+WIZARD_LEVEL_CFG_ID_FIELD.index = 0
+WIZARD_LEVEL_CFG_ID_FIELD.label = 2
+WIZARD_LEVEL_CFG_ID_FIELD.has_default_value = false
+WIZARD_LEVEL_CFG_ID_FIELD.default_value = 0
+WIZARD_LEVEL_CFG_ID_FIELD.type = 5
+WIZARD_LEVEL_CFG_ID_FIELD.cpp_type = 1
+
+WIZARD_LEVEL_CFG_LEGENDARY_FIELD.name = "legendary"
+WIZARD_LEVEL_CFG_LEGENDARY_FIELD.full_name = ".ftcfg.wizard_level_cfg.legendary"
+WIZARD_LEVEL_CFG_LEGENDARY_FIELD.number = 2
+WIZARD_LEVEL_CFG_LEGENDARY_FIELD.index = 1
+WIZARD_LEVEL_CFG_LEGENDARY_FIELD.label = 2
+WIZARD_LEVEL_CFG_LEGENDARY_FIELD.has_default_value = false
+WIZARD_LEVEL_CFG_LEGENDARY_FIELD.default_value = 0
+WIZARD_LEVEL_CFG_LEGENDARY_FIELD.type = 5
+WIZARD_LEVEL_CFG_LEGENDARY_FIELD.cpp_type = 1
+
+WIZARD_LEVEL_CFG_ICON_ID_FIELD.name = "icon_id"
+WIZARD_LEVEL_CFG_ICON_ID_FIELD.full_name = ".ftcfg.wizard_level_cfg.icon_id"
+WIZARD_LEVEL_CFG_ICON_ID_FIELD.number = 3
+WIZARD_LEVEL_CFG_ICON_ID_FIELD.index = 2
+WIZARD_LEVEL_CFG_ICON_ID_FIELD.label = 2
+WIZARD_LEVEL_CFG_ICON_ID_FIELD.has_default_value = false
+WIZARD_LEVEL_CFG_ICON_ID_FIELD.default_value = 0
+WIZARD_LEVEL_CFG_ICON_ID_FIELD.type = 5
+WIZARD_LEVEL_CFG_ICON_ID_FIELD.cpp_type = 1
+
+WIZARD_LEVEL_CFG_NAME_FIELD.name = "name"
+WIZARD_LEVEL_CFG_NAME_FIELD.full_name = ".ftcfg.wizard_level_cfg.name"
+WIZARD_LEVEL_CFG_NAME_FIELD.number = 4
+WIZARD_LEVEL_CFG_NAME_FIELD.index = 3
+WIZARD_LEVEL_CFG_NAME_FIELD.label = 2
+WIZARD_LEVEL_CFG_NAME_FIELD.has_default_value = false
+WIZARD_LEVEL_CFG_NAME_FIELD.default_value = 0
+WIZARD_LEVEL_CFG_NAME_FIELD.type = 5
+WIZARD_LEVEL_CFG_NAME_FIELD.cpp_type = 1
+
+WIZARD_LEVEL_CFG_REWARD_ID_FIELD.name = "reward_id"
+WIZARD_LEVEL_CFG_REWARD_ID_FIELD.full_name = ".ftcfg.wizard_level_cfg.reward_id"
+WIZARD_LEVEL_CFG_REWARD_ID_FIELD.number = 5
+WIZARD_LEVEL_CFG_REWARD_ID_FIELD.index = 4
+WIZARD_LEVEL_CFG_REWARD_ID_FIELD.label = 2
+WIZARD_LEVEL_CFG_REWARD_ID_FIELD.has_default_value = false
+WIZARD_LEVEL_CFG_REWARD_ID_FIELD.default_value = 0
+WIZARD_LEVEL_CFG_REWARD_ID_FIELD.type = 5
+WIZARD_LEVEL_CFG_REWARD_ID_FIELD.cpp_type = 1
+
+WIZARD_LEVEL_CFG_DEL_LEGENDARY_FIELD.name = "del_legendary"
+WIZARD_LEVEL_CFG_DEL_LEGENDARY_FIELD.full_name = ".ftcfg.wizard_level_cfg.del_legendary"
+WIZARD_LEVEL_CFG_DEL_LEGENDARY_FIELD.number = 6
+WIZARD_LEVEL_CFG_DEL_LEGENDARY_FIELD.index = 5
+WIZARD_LEVEL_CFG_DEL_LEGENDARY_FIELD.label = 2
+WIZARD_LEVEL_CFG_DEL_LEGENDARY_FIELD.has_default_value = false
+WIZARD_LEVEL_CFG_DEL_LEGENDARY_FIELD.default_value = 0
+WIZARD_LEVEL_CFG_DEL_LEGENDARY_FIELD.type = 5
+WIZARD_LEVEL_CFG_DEL_LEGENDARY_FIELD.cpp_type = 1
+
+WIZARD_LEVEL_CFG.name = "wizard_level_cfg"
+WIZARD_LEVEL_CFG.full_name = ".ftcfg.wizard_level_cfg"
+WIZARD_LEVEL_CFG.nested_types = {}
+WIZARD_LEVEL_CFG.enum_types = {}
+WIZARD_LEVEL_CFG.fields = {WIZARD_LEVEL_CFG_ID_FIELD, WIZARD_LEVEL_CFG_LEGENDARY_FIELD, WIZARD_LEVEL_CFG_ICON_ID_FIELD, WIZARD_LEVEL_CFG_NAME_FIELD, WIZARD_LEVEL_CFG_REWARD_ID_FIELD, WIZARD_LEVEL_CFG_DEL_LEGENDARY_FIELD}
+WIZARD_LEVEL_CFG.is_extendable = false
+WIZARD_LEVEL_CFG.extensions = {}
+WIZARD_LEVEL_CFGS_ITEMS_FIELD.name = "items"
+WIZARD_LEVEL_CFGS_ITEMS_FIELD.full_name = ".ftcfg.wizard_level_cfgs.items"
+WIZARD_LEVEL_CFGS_ITEMS_FIELD.number = 1
+WIZARD_LEVEL_CFGS_ITEMS_FIELD.index = 0
+WIZARD_LEVEL_CFGS_ITEMS_FIELD.label = 3
+WIZARD_LEVEL_CFGS_ITEMS_FIELD.has_default_value = false
+WIZARD_LEVEL_CFGS_ITEMS_FIELD.default_value = {}
+WIZARD_LEVEL_CFGS_ITEMS_FIELD.message_type = WIZARD_LEVEL_CFG
+WIZARD_LEVEL_CFGS_ITEMS_FIELD.type = 11
+WIZARD_LEVEL_CFGS_ITEMS_FIELD.cpp_type = 10
+
+WIZARD_LEVEL_CFGS.name = "wizard_level_cfgs"
+WIZARD_LEVEL_CFGS.full_name = ".ftcfg.wizard_level_cfgs"
+WIZARD_LEVEL_CFGS.nested_types = {}
+WIZARD_LEVEL_CFGS.enum_types = {}
+WIZARD_LEVEL_CFGS.fields = {WIZARD_LEVEL_CFGS_ITEMS_FIELD}
+WIZARD_LEVEL_CFGS.is_extendable = false
+WIZARD_LEVEL_CFGS.extensions = {}
+WIZARD_BASE_CFG_ID_FIELD.name = "id"
+WIZARD_BASE_CFG_ID_FIELD.full_name = ".ftcfg.wizard_base_cfg.id"
+WIZARD_BASE_CFG_ID_FIELD.number = 1
+WIZARD_BASE_CFG_ID_FIELD.index = 0
+WIZARD_BASE_CFG_ID_FIELD.label = 2
+WIZARD_BASE_CFG_ID_FIELD.has_default_value = false
+WIZARD_BASE_CFG_ID_FIELD.default_value = 0
+WIZARD_BASE_CFG_ID_FIELD.type = 5
+WIZARD_BASE_CFG_ID_FIELD.cpp_type = 1
+
+WIZARD_BASE_CFG_DATA_FIELD.name = "data"
+WIZARD_BASE_CFG_DATA_FIELD.full_name = ".ftcfg.wizard_base_cfg.data"
+WIZARD_BASE_CFG_DATA_FIELD.number = 2
+WIZARD_BASE_CFG_DATA_FIELD.index = 1
+WIZARD_BASE_CFG_DATA_FIELD.label = 2
+WIZARD_BASE_CFG_DATA_FIELD.has_default_value = false
+WIZARD_BASE_CFG_DATA_FIELD.default_value = 0.0
+WIZARD_BASE_CFG_DATA_FIELD.type = 1
+WIZARD_BASE_CFG_DATA_FIELD.cpp_type = 5
+
+WIZARD_BASE_CFG.name = "wizard_base_cfg"
+WIZARD_BASE_CFG.full_name = ".ftcfg.wizard_base_cfg"
+WIZARD_BASE_CFG.nested_types = {}
+WIZARD_BASE_CFG.enum_types = {}
+WIZARD_BASE_CFG.fields = {WIZARD_BASE_CFG_ID_FIELD, WIZARD_BASE_CFG_DATA_FIELD}
+WIZARD_BASE_CFG.is_extendable = false
+WIZARD_BASE_CFG.extensions = {}
+WIZARD_BASE_CFGS_ITEMS_FIELD.name = "items"
+WIZARD_BASE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.wizard_base_cfgs.items"
+WIZARD_BASE_CFGS_ITEMS_FIELD.number = 1
+WIZARD_BASE_CFGS_ITEMS_FIELD.index = 0
+WIZARD_BASE_CFGS_ITEMS_FIELD.label = 3
+WIZARD_BASE_CFGS_ITEMS_FIELD.has_default_value = false
+WIZARD_BASE_CFGS_ITEMS_FIELD.default_value = {}
+WIZARD_BASE_CFGS_ITEMS_FIELD.message_type = WIZARD_BASE_CFG
+WIZARD_BASE_CFGS_ITEMS_FIELD.type = 11
+WIZARD_BASE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+WIZARD_BASE_CFGS.name = "wizard_base_cfgs"
+WIZARD_BASE_CFGS.full_name = ".ftcfg.wizard_base_cfgs"
+WIZARD_BASE_CFGS.nested_types = {}
+WIZARD_BASE_CFGS.enum_types = {}
+WIZARD_BASE_CFGS.fields = {WIZARD_BASE_CFGS_ITEMS_FIELD}
+WIZARD_BASE_CFGS.is_extendable = false
+WIZARD_BASE_CFGS.extensions = {}
+MAGIC_DIVINE_CFG_ID_FIELD.name = "id"
+MAGIC_DIVINE_CFG_ID_FIELD.full_name = ".ftcfg.magic_divine_cfg.id"
+MAGIC_DIVINE_CFG_ID_FIELD.number = 1
+MAGIC_DIVINE_CFG_ID_FIELD.index = 0
+MAGIC_DIVINE_CFG_ID_FIELD.label = 2
+MAGIC_DIVINE_CFG_ID_FIELD.has_default_value = false
+MAGIC_DIVINE_CFG_ID_FIELD.default_value = 0
+MAGIC_DIVINE_CFG_ID_FIELD.type = 5
+MAGIC_DIVINE_CFG_ID_FIELD.cpp_type = 1
+
+MAGIC_DIVINE_CFG_PROP_ID_FIELD.name = "prop_id"
+MAGIC_DIVINE_CFG_PROP_ID_FIELD.full_name = ".ftcfg.magic_divine_cfg.prop_id"
+MAGIC_DIVINE_CFG_PROP_ID_FIELD.number = 2
+MAGIC_DIVINE_CFG_PROP_ID_FIELD.index = 1
+MAGIC_DIVINE_CFG_PROP_ID_FIELD.label = 3
+MAGIC_DIVINE_CFG_PROP_ID_FIELD.has_default_value = false
+MAGIC_DIVINE_CFG_PROP_ID_FIELD.default_value = {}
+MAGIC_DIVINE_CFG_PROP_ID_FIELD.type = 5
+MAGIC_DIVINE_CFG_PROP_ID_FIELD.cpp_type = 1
+
+MAGIC_DIVINE_CFG_PROP_NUM_FIELD.name = "prop_num"
+MAGIC_DIVINE_CFG_PROP_NUM_FIELD.full_name = ".ftcfg.magic_divine_cfg.prop_num"
+MAGIC_DIVINE_CFG_PROP_NUM_FIELD.number = 3
+MAGIC_DIVINE_CFG_PROP_NUM_FIELD.index = 2
+MAGIC_DIVINE_CFG_PROP_NUM_FIELD.label = 3
+MAGIC_DIVINE_CFG_PROP_NUM_FIELD.has_default_value = false
+MAGIC_DIVINE_CFG_PROP_NUM_FIELD.default_value = {}
+MAGIC_DIVINE_CFG_PROP_NUM_FIELD.type = 5
+MAGIC_DIVINE_CFG_PROP_NUM_FIELD.cpp_type = 1
+
+MAGIC_DIVINE_CFG_WEEK_DAY_FIELD.name = "week_day"
+MAGIC_DIVINE_CFG_WEEK_DAY_FIELD.full_name = ".ftcfg.magic_divine_cfg.week_day"
+MAGIC_DIVINE_CFG_WEEK_DAY_FIELD.number = 4
+MAGIC_DIVINE_CFG_WEEK_DAY_FIELD.index = 3
+MAGIC_DIVINE_CFG_WEEK_DAY_FIELD.label = 2
+MAGIC_DIVINE_CFG_WEEK_DAY_FIELD.has_default_value = false
+MAGIC_DIVINE_CFG_WEEK_DAY_FIELD.default_value = 0
+MAGIC_DIVINE_CFG_WEEK_DAY_FIELD.type = 5
+MAGIC_DIVINE_CFG_WEEK_DAY_FIELD.cpp_type = 1
+
+MAGIC_DIVINE_CFG_TIMES_FIELD.name = "times"
+MAGIC_DIVINE_CFG_TIMES_FIELD.full_name = ".ftcfg.magic_divine_cfg.times"
+MAGIC_DIVINE_CFG_TIMES_FIELD.number = 5
+MAGIC_DIVINE_CFG_TIMES_FIELD.index = 4
+MAGIC_DIVINE_CFG_TIMES_FIELD.label = 3
+MAGIC_DIVINE_CFG_TIMES_FIELD.has_default_value = false
+MAGIC_DIVINE_CFG_TIMES_FIELD.default_value = {}
+MAGIC_DIVINE_CFG_TIMES_FIELD.type = 5
+MAGIC_DIVINE_CFG_TIMES_FIELD.cpp_type = 1
+
+MAGIC_DIVINE_CFG_SECTION_ID_FIELD.name = "section_id"
+MAGIC_DIVINE_CFG_SECTION_ID_FIELD.full_name = ".ftcfg.magic_divine_cfg.section_id"
+MAGIC_DIVINE_CFG_SECTION_ID_FIELD.number = 6
+MAGIC_DIVINE_CFG_SECTION_ID_FIELD.index = 5
+MAGIC_DIVINE_CFG_SECTION_ID_FIELD.label = 2
+MAGIC_DIVINE_CFG_SECTION_ID_FIELD.has_default_value = false
+MAGIC_DIVINE_CFG_SECTION_ID_FIELD.default_value = 0
+MAGIC_DIVINE_CFG_SECTION_ID_FIELD.type = 5
+MAGIC_DIVINE_CFG_SECTION_ID_FIELD.cpp_type = 1
+
+MAGIC_DIVINE_CFG_LEVEL_FIELD.name = "level"
+MAGIC_DIVINE_CFG_LEVEL_FIELD.full_name = ".ftcfg.magic_divine_cfg.level"
+MAGIC_DIVINE_CFG_LEVEL_FIELD.number = 7
+MAGIC_DIVINE_CFG_LEVEL_FIELD.index = 6
+MAGIC_DIVINE_CFG_LEVEL_FIELD.label = 2
+MAGIC_DIVINE_CFG_LEVEL_FIELD.has_default_value = false
+MAGIC_DIVINE_CFG_LEVEL_FIELD.default_value = 0
+MAGIC_DIVINE_CFG_LEVEL_FIELD.type = 5
+MAGIC_DIVINE_CFG_LEVEL_FIELD.cpp_type = 1
+
+MAGIC_DIVINE_CFG.name = "magic_divine_cfg"
+MAGIC_DIVINE_CFG.full_name = ".ftcfg.magic_divine_cfg"
+MAGIC_DIVINE_CFG.nested_types = {}
+MAGIC_DIVINE_CFG.enum_types = {}
+MAGIC_DIVINE_CFG.fields = {MAGIC_DIVINE_CFG_ID_FIELD, MAGIC_DIVINE_CFG_PROP_ID_FIELD, MAGIC_DIVINE_CFG_PROP_NUM_FIELD, MAGIC_DIVINE_CFG_WEEK_DAY_FIELD, MAGIC_DIVINE_CFG_TIMES_FIELD, MAGIC_DIVINE_CFG_SECTION_ID_FIELD, MAGIC_DIVINE_CFG_LEVEL_FIELD}
+MAGIC_DIVINE_CFG.is_extendable = false
+MAGIC_DIVINE_CFG.extensions = {}
+MAGIC_DIVINE_CFGS_ITEMS_FIELD.name = "items"
+MAGIC_DIVINE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.magic_divine_cfgs.items"
+MAGIC_DIVINE_CFGS_ITEMS_FIELD.number = 1
+MAGIC_DIVINE_CFGS_ITEMS_FIELD.index = 0
+MAGIC_DIVINE_CFGS_ITEMS_FIELD.label = 3
+MAGIC_DIVINE_CFGS_ITEMS_FIELD.has_default_value = false
+MAGIC_DIVINE_CFGS_ITEMS_FIELD.default_value = {}
+MAGIC_DIVINE_CFGS_ITEMS_FIELD.message_type = MAGIC_DIVINE_CFG
+MAGIC_DIVINE_CFGS_ITEMS_FIELD.type = 11
+MAGIC_DIVINE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MAGIC_DIVINE_CFGS.name = "magic_divine_cfgs"
+MAGIC_DIVINE_CFGS.full_name = ".ftcfg.magic_divine_cfgs"
+MAGIC_DIVINE_CFGS.nested_types = {}
+MAGIC_DIVINE_CFGS.enum_types = {}
+MAGIC_DIVINE_CFGS.fields = {MAGIC_DIVINE_CFGS_ITEMS_FIELD}
+MAGIC_DIVINE_CFGS.is_extendable = false
+MAGIC_DIVINE_CFGS.extensions = {}
+DIVINE_SECTION_CFG_ID_FIELD.name = "id"
+DIVINE_SECTION_CFG_ID_FIELD.full_name = ".ftcfg.divine_section_cfg.id"
+DIVINE_SECTION_CFG_ID_FIELD.number = 1
+DIVINE_SECTION_CFG_ID_FIELD.index = 0
+DIVINE_SECTION_CFG_ID_FIELD.label = 2
+DIVINE_SECTION_CFG_ID_FIELD.has_default_value = false
+DIVINE_SECTION_CFG_ID_FIELD.default_value = 0
+DIVINE_SECTION_CFG_ID_FIELD.type = 5
+DIVINE_SECTION_CFG_ID_FIELD.cpp_type = 1
+
+DIVINE_SECTION_CFG_GROUP_FIELD.name = "group"
+DIVINE_SECTION_CFG_GROUP_FIELD.full_name = ".ftcfg.divine_section_cfg.group"
+DIVINE_SECTION_CFG_GROUP_FIELD.number = 2
+DIVINE_SECTION_CFG_GROUP_FIELD.index = 1
+DIVINE_SECTION_CFG_GROUP_FIELD.label = 2
+DIVINE_SECTION_CFG_GROUP_FIELD.has_default_value = false
+DIVINE_SECTION_CFG_GROUP_FIELD.default_value = 0
+DIVINE_SECTION_CFG_GROUP_FIELD.type = 5
+DIVINE_SECTION_CFG_GROUP_FIELD.cpp_type = 1
+
+DIVINE_SECTION_CFG_GROUP_NAME_FIELD.name = "group_name"
+DIVINE_SECTION_CFG_GROUP_NAME_FIELD.full_name = ".ftcfg.divine_section_cfg.group_name"
+DIVINE_SECTION_CFG_GROUP_NAME_FIELD.number = 3
+DIVINE_SECTION_CFG_GROUP_NAME_FIELD.index = 2
+DIVINE_SECTION_CFG_GROUP_NAME_FIELD.label = 2
+DIVINE_SECTION_CFG_GROUP_NAME_FIELD.has_default_value = false
+DIVINE_SECTION_CFG_GROUP_NAME_FIELD.default_value = 0
+DIVINE_SECTION_CFG_GROUP_NAME_FIELD.type = 5
+DIVINE_SECTION_CFG_GROUP_NAME_FIELD.cpp_type = 1
+
+DIVINE_SECTION_CFG_SECTION_FIELD.name = "section"
+DIVINE_SECTION_CFG_SECTION_FIELD.full_name = ".ftcfg.divine_section_cfg.section"
+DIVINE_SECTION_CFG_SECTION_FIELD.number = 4
+DIVINE_SECTION_CFG_SECTION_FIELD.index = 3
+DIVINE_SECTION_CFG_SECTION_FIELD.label = 2
+DIVINE_SECTION_CFG_SECTION_FIELD.has_default_value = false
+DIVINE_SECTION_CFG_SECTION_FIELD.default_value = 0
+DIVINE_SECTION_CFG_SECTION_FIELD.type = 5
+DIVINE_SECTION_CFG_SECTION_FIELD.cpp_type = 1
+
+DIVINE_SECTION_CFG_SECTION_NAME_FIELD.name = "section_name"
+DIVINE_SECTION_CFG_SECTION_NAME_FIELD.full_name = ".ftcfg.divine_section_cfg.section_name"
+DIVINE_SECTION_CFG_SECTION_NAME_FIELD.number = 5
+DIVINE_SECTION_CFG_SECTION_NAME_FIELD.index = 4
+DIVINE_SECTION_CFG_SECTION_NAME_FIELD.label = 2
+DIVINE_SECTION_CFG_SECTION_NAME_FIELD.has_default_value = false
+DIVINE_SECTION_CFG_SECTION_NAME_FIELD.default_value = 0
+DIVINE_SECTION_CFG_SECTION_NAME_FIELD.type = 5
+DIVINE_SECTION_CFG_SECTION_NAME_FIELD.cpp_type = 1
+
+DIVINE_SECTION_CFG_SECTION_DESC_FIELD.name = "section_desc"
+DIVINE_SECTION_CFG_SECTION_DESC_FIELD.full_name = ".ftcfg.divine_section_cfg.section_desc"
+DIVINE_SECTION_CFG_SECTION_DESC_FIELD.number = 6
+DIVINE_SECTION_CFG_SECTION_DESC_FIELD.index = 5
+DIVINE_SECTION_CFG_SECTION_DESC_FIELD.label = 2
+DIVINE_SECTION_CFG_SECTION_DESC_FIELD.has_default_value = false
+DIVINE_SECTION_CFG_SECTION_DESC_FIELD.default_value = 0
+DIVINE_SECTION_CFG_SECTION_DESC_FIELD.type = 5
+DIVINE_SECTION_CFG_SECTION_DESC_FIELD.cpp_type = 1
+
+DIVINE_SECTION_CFG_MISSION_ID_FIELD.name = "mission_id"
+DIVINE_SECTION_CFG_MISSION_ID_FIELD.full_name = ".ftcfg.divine_section_cfg.mission_id"
+DIVINE_SECTION_CFG_MISSION_ID_FIELD.number = 7
+DIVINE_SECTION_CFG_MISSION_ID_FIELD.index = 6
+DIVINE_SECTION_CFG_MISSION_ID_FIELD.label = 2
+DIVINE_SECTION_CFG_MISSION_ID_FIELD.has_default_value = false
+DIVINE_SECTION_CFG_MISSION_ID_FIELD.default_value = 0
+DIVINE_SECTION_CFG_MISSION_ID_FIELD.type = 5
+DIVINE_SECTION_CFG_MISSION_ID_FIELD.cpp_type = 1
+
+DIVINE_SECTION_CFG_PARTNER_ID_FIELD.name = "partner_id"
+DIVINE_SECTION_CFG_PARTNER_ID_FIELD.full_name = ".ftcfg.divine_section_cfg.partner_id"
+DIVINE_SECTION_CFG_PARTNER_ID_FIELD.number = 8
+DIVINE_SECTION_CFG_PARTNER_ID_FIELD.index = 7
+DIVINE_SECTION_CFG_PARTNER_ID_FIELD.label = 3
+DIVINE_SECTION_CFG_PARTNER_ID_FIELD.has_default_value = false
+DIVINE_SECTION_CFG_PARTNER_ID_FIELD.default_value = {}
+DIVINE_SECTION_CFG_PARTNER_ID_FIELD.type = 5
+DIVINE_SECTION_CFG_PARTNER_ID_FIELD.cpp_type = 1
+
+DIVINE_SECTION_CFG.name = "divine_section_cfg"
+DIVINE_SECTION_CFG.full_name = ".ftcfg.divine_section_cfg"
+DIVINE_SECTION_CFG.nested_types = {}
+DIVINE_SECTION_CFG.enum_types = {}
+DIVINE_SECTION_CFG.fields = {DIVINE_SECTION_CFG_ID_FIELD, DIVINE_SECTION_CFG_GROUP_FIELD, DIVINE_SECTION_CFG_GROUP_NAME_FIELD, DIVINE_SECTION_CFG_SECTION_FIELD, DIVINE_SECTION_CFG_SECTION_NAME_FIELD, DIVINE_SECTION_CFG_SECTION_DESC_FIELD, DIVINE_SECTION_CFG_MISSION_ID_FIELD, DIVINE_SECTION_CFG_PARTNER_ID_FIELD}
+DIVINE_SECTION_CFG.is_extendable = false
+DIVINE_SECTION_CFG.extensions = {}
+DIVINE_SECTION_CFGS_ITEMS_FIELD.name = "items"
+DIVINE_SECTION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.divine_section_cfgs.items"
+DIVINE_SECTION_CFGS_ITEMS_FIELD.number = 1
+DIVINE_SECTION_CFGS_ITEMS_FIELD.index = 0
+DIVINE_SECTION_CFGS_ITEMS_FIELD.label = 3
+DIVINE_SECTION_CFGS_ITEMS_FIELD.has_default_value = false
+DIVINE_SECTION_CFGS_ITEMS_FIELD.default_value = {}
+DIVINE_SECTION_CFGS_ITEMS_FIELD.message_type = DIVINE_SECTION_CFG
+DIVINE_SECTION_CFGS_ITEMS_FIELD.type = 11
+DIVINE_SECTION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+DIVINE_SECTION_CFGS.name = "divine_section_cfgs"
+DIVINE_SECTION_CFGS.full_name = ".ftcfg.divine_section_cfgs"
+DIVINE_SECTION_CFGS.nested_types = {}
+DIVINE_SECTION_CFGS.enum_types = {}
+DIVINE_SECTION_CFGS.fields = {DIVINE_SECTION_CFGS_ITEMS_FIELD}
+DIVINE_SECTION_CFGS.is_extendable = false
+DIVINE_SECTION_CFGS.extensions = {}
+DIVINE_MISSION_CFG_ID_FIELD.name = "id"
+DIVINE_MISSION_CFG_ID_FIELD.full_name = ".ftcfg.divine_mission_cfg.id"
+DIVINE_MISSION_CFG_ID_FIELD.number = 1
+DIVINE_MISSION_CFG_ID_FIELD.index = 0
+DIVINE_MISSION_CFG_ID_FIELD.label = 2
+DIVINE_MISSION_CFG_ID_FIELD.has_default_value = false
+DIVINE_MISSION_CFG_ID_FIELD.default_value = 0
+DIVINE_MISSION_CFG_ID_FIELD.type = 5
+DIVINE_MISSION_CFG_ID_FIELD.cpp_type = 1
+
+DIVINE_MISSION_CFG_MISSION_ID_FIELD.name = "mission_id"
+DIVINE_MISSION_CFG_MISSION_ID_FIELD.full_name = ".ftcfg.divine_mission_cfg.mission_id"
+DIVINE_MISSION_CFG_MISSION_ID_FIELD.number = 2
+DIVINE_MISSION_CFG_MISSION_ID_FIELD.index = 1
+DIVINE_MISSION_CFG_MISSION_ID_FIELD.label = 2
+DIVINE_MISSION_CFG_MISSION_ID_FIELD.has_default_value = false
+DIVINE_MISSION_CFG_MISSION_ID_FIELD.default_value = 0
+DIVINE_MISSION_CFG_MISSION_ID_FIELD.type = 5
+DIVINE_MISSION_CFG_MISSION_ID_FIELD.cpp_type = 1
+
+DIVINE_MISSION_CFG_RANGE_FIELD.name = "range"
+DIVINE_MISSION_CFG_RANGE_FIELD.full_name = ".ftcfg.divine_mission_cfg.range"
+DIVINE_MISSION_CFG_RANGE_FIELD.number = 3
+DIVINE_MISSION_CFG_RANGE_FIELD.index = 2
+DIVINE_MISSION_CFG_RANGE_FIELD.label = 2
+DIVINE_MISSION_CFG_RANGE_FIELD.has_default_value = false
+DIVINE_MISSION_CFG_RANGE_FIELD.default_value = 0
+DIVINE_MISSION_CFG_RANGE_FIELD.type = 5
+DIVINE_MISSION_CFG_RANGE_FIELD.cpp_type = 1
+
+DIVINE_MISSION_CFG_QUALITY_FIELD.name = "quality"
+DIVINE_MISSION_CFG_QUALITY_FIELD.full_name = ".ftcfg.divine_mission_cfg.quality"
+DIVINE_MISSION_CFG_QUALITY_FIELD.number = 4
+DIVINE_MISSION_CFG_QUALITY_FIELD.index = 3
+DIVINE_MISSION_CFG_QUALITY_FIELD.label = 2
+DIVINE_MISSION_CFG_QUALITY_FIELD.has_default_value = false
+DIVINE_MISSION_CFG_QUALITY_FIELD.default_value = 0
+DIVINE_MISSION_CFG_QUALITY_FIELD.type = 5
+DIVINE_MISSION_CFG_QUALITY_FIELD.cpp_type = 1
+
+DIVINE_MISSION_CFG_FETTERS_NUM_FIELD.name = "fetters_num"
+DIVINE_MISSION_CFG_FETTERS_NUM_FIELD.full_name = ".ftcfg.divine_mission_cfg.fetters_num"
+DIVINE_MISSION_CFG_FETTERS_NUM_FIELD.number = 5
+DIVINE_MISSION_CFG_FETTERS_NUM_FIELD.index = 4
+DIVINE_MISSION_CFG_FETTERS_NUM_FIELD.label = 2
+DIVINE_MISSION_CFG_FETTERS_NUM_FIELD.has_default_value = false
+DIVINE_MISSION_CFG_FETTERS_NUM_FIELD.default_value = 0
+DIVINE_MISSION_CFG_FETTERS_NUM_FIELD.type = 5
+DIVINE_MISSION_CFG_FETTERS_NUM_FIELD.cpp_type = 1
+
+DIVINE_MISSION_CFG_QUALITYRANGE_FIELD.name = "qualityrange"
+DIVINE_MISSION_CFG_QUALITYRANGE_FIELD.full_name = ".ftcfg.divine_mission_cfg.qualityrange"
+DIVINE_MISSION_CFG_QUALITYRANGE_FIELD.number = 6
+DIVINE_MISSION_CFG_QUALITYRANGE_FIELD.index = 5
+DIVINE_MISSION_CFG_QUALITYRANGE_FIELD.label = 2
+DIVINE_MISSION_CFG_QUALITYRANGE_FIELD.has_default_value = false
+DIVINE_MISSION_CFG_QUALITYRANGE_FIELD.default_value = 0
+DIVINE_MISSION_CFG_QUALITYRANGE_FIELD.type = 5
+DIVINE_MISSION_CFG_QUALITYRANGE_FIELD.cpp_type = 1
+
+DIVINE_MISSION_CFG.name = "divine_mission_cfg"
+DIVINE_MISSION_CFG.full_name = ".ftcfg.divine_mission_cfg"
+DIVINE_MISSION_CFG.nested_types = {}
+DIVINE_MISSION_CFG.enum_types = {}
+DIVINE_MISSION_CFG.fields = {DIVINE_MISSION_CFG_ID_FIELD, DIVINE_MISSION_CFG_MISSION_ID_FIELD, DIVINE_MISSION_CFG_RANGE_FIELD, DIVINE_MISSION_CFG_QUALITY_FIELD, DIVINE_MISSION_CFG_FETTERS_NUM_FIELD, DIVINE_MISSION_CFG_QUALITYRANGE_FIELD}
+DIVINE_MISSION_CFG.is_extendable = false
+DIVINE_MISSION_CFG.extensions = {}
+DIVINE_MISSION_CFGS_ITEMS_FIELD.name = "items"
+DIVINE_MISSION_CFGS_ITEMS_FIELD.full_name = ".ftcfg.divine_mission_cfgs.items"
+DIVINE_MISSION_CFGS_ITEMS_FIELD.number = 1
+DIVINE_MISSION_CFGS_ITEMS_FIELD.index = 0
+DIVINE_MISSION_CFGS_ITEMS_FIELD.label = 3
+DIVINE_MISSION_CFGS_ITEMS_FIELD.has_default_value = false
+DIVINE_MISSION_CFGS_ITEMS_FIELD.default_value = {}
+DIVINE_MISSION_CFGS_ITEMS_FIELD.message_type = DIVINE_MISSION_CFG
+DIVINE_MISSION_CFGS_ITEMS_FIELD.type = 11
+DIVINE_MISSION_CFGS_ITEMS_FIELD.cpp_type = 10
+
+DIVINE_MISSION_CFGS.name = "divine_mission_cfgs"
+DIVINE_MISSION_CFGS.full_name = ".ftcfg.divine_mission_cfgs"
+DIVINE_MISSION_CFGS.nested_types = {}
+DIVINE_MISSION_CFGS.enum_types = {}
+DIVINE_MISSION_CFGS.fields = {DIVINE_MISSION_CFGS_ITEMS_FIELD}
+DIVINE_MISSION_CFGS.is_extendable = false
+DIVINE_MISSION_CFGS.extensions = {}
+MAGIC_SKILL_CFG_ID_FIELD.name = "id"
+MAGIC_SKILL_CFG_ID_FIELD.full_name = ".ftcfg.magic_skill_cfg.id"
+MAGIC_SKILL_CFG_ID_FIELD.number = 1
+MAGIC_SKILL_CFG_ID_FIELD.index = 0
+MAGIC_SKILL_CFG_ID_FIELD.label = 2
+MAGIC_SKILL_CFG_ID_FIELD.has_default_value = false
+MAGIC_SKILL_CFG_ID_FIELD.default_value = 0
+MAGIC_SKILL_CFG_ID_FIELD.type = 13
+MAGIC_SKILL_CFG_ID_FIELD.cpp_type = 3
+
+MAGIC_SKILL_CFG_LAYERID_FIELD.name = "layerid"
+MAGIC_SKILL_CFG_LAYERID_FIELD.full_name = ".ftcfg.magic_skill_cfg.layerid"
+MAGIC_SKILL_CFG_LAYERID_FIELD.number = 2
+MAGIC_SKILL_CFG_LAYERID_FIELD.index = 1
+MAGIC_SKILL_CFG_LAYERID_FIELD.label = 2
+MAGIC_SKILL_CFG_LAYERID_FIELD.has_default_value = false
+MAGIC_SKILL_CFG_LAYERID_FIELD.default_value = 0
+MAGIC_SKILL_CFG_LAYERID_FIELD.type = 13
+MAGIC_SKILL_CFG_LAYERID_FIELD.cpp_type = 3
+
+MAGIC_SKILL_CFG_MAX_LEVEL_FIELD.name = "max_level"
+MAGIC_SKILL_CFG_MAX_LEVEL_FIELD.full_name = ".ftcfg.magic_skill_cfg.max_level"
+MAGIC_SKILL_CFG_MAX_LEVEL_FIELD.number = 3
+MAGIC_SKILL_CFG_MAX_LEVEL_FIELD.index = 2
+MAGIC_SKILL_CFG_MAX_LEVEL_FIELD.label = 2
+MAGIC_SKILL_CFG_MAX_LEVEL_FIELD.has_default_value = false
+MAGIC_SKILL_CFG_MAX_LEVEL_FIELD.default_value = 0
+MAGIC_SKILL_CFG_MAX_LEVEL_FIELD.type = 13
+MAGIC_SKILL_CFG_MAX_LEVEL_FIELD.cpp_type = 3
+
+MAGIC_SKILL_CFG_MAGICID_ARR_FIELD.name = "magicid_arr"
+MAGIC_SKILL_CFG_MAGICID_ARR_FIELD.full_name = ".ftcfg.magic_skill_cfg.magicid_arr"
+MAGIC_SKILL_CFG_MAGICID_ARR_FIELD.number = 4
+MAGIC_SKILL_CFG_MAGICID_ARR_FIELD.index = 3
+MAGIC_SKILL_CFG_MAGICID_ARR_FIELD.label = 3
+MAGIC_SKILL_CFG_MAGICID_ARR_FIELD.has_default_value = false
+MAGIC_SKILL_CFG_MAGICID_ARR_FIELD.default_value = {}
+MAGIC_SKILL_CFG_MAGICID_ARR_FIELD.type = 13
+MAGIC_SKILL_CFG_MAGICID_ARR_FIELD.cpp_type = 3
+
+MAGIC_SKILL_CFG_MAGIC_TYPE_FIELD.name = "magic_type"
+MAGIC_SKILL_CFG_MAGIC_TYPE_FIELD.full_name = ".ftcfg.magic_skill_cfg.magic_type"
+MAGIC_SKILL_CFG_MAGIC_TYPE_FIELD.number = 5
+MAGIC_SKILL_CFG_MAGIC_TYPE_FIELD.index = 4
+MAGIC_SKILL_CFG_MAGIC_TYPE_FIELD.label = 2
+MAGIC_SKILL_CFG_MAGIC_TYPE_FIELD.has_default_value = false
+MAGIC_SKILL_CFG_MAGIC_TYPE_FIELD.default_value = 0
+MAGIC_SKILL_CFG_MAGIC_TYPE_FIELD.type = 13
+MAGIC_SKILL_CFG_MAGIC_TYPE_FIELD.cpp_type = 3
+
+MAGIC_SKILL_CFG_SLOT_LOCK_COND_FIELD.name = "slot_lock_cond"
+MAGIC_SKILL_CFG_SLOT_LOCK_COND_FIELD.full_name = ".ftcfg.magic_skill_cfg.slot_lock_cond"
+MAGIC_SKILL_CFG_SLOT_LOCK_COND_FIELD.number = 6
+MAGIC_SKILL_CFG_SLOT_LOCK_COND_FIELD.index = 5
+MAGIC_SKILL_CFG_SLOT_LOCK_COND_FIELD.label = 2
+MAGIC_SKILL_CFG_SLOT_LOCK_COND_FIELD.has_default_value = false
+MAGIC_SKILL_CFG_SLOT_LOCK_COND_FIELD.default_value = 0
+MAGIC_SKILL_CFG_SLOT_LOCK_COND_FIELD.type = 13
+MAGIC_SKILL_CFG_SLOT_LOCK_COND_FIELD.cpp_type = 3
+
+MAGIC_SKILL_CFG_SKILL_POSITION_FIELD.name = "skill_position"
+MAGIC_SKILL_CFG_SKILL_POSITION_FIELD.full_name = ".ftcfg.magic_skill_cfg.skill_position"
+MAGIC_SKILL_CFG_SKILL_POSITION_FIELD.number = 7
+MAGIC_SKILL_CFG_SKILL_POSITION_FIELD.index = 6
+MAGIC_SKILL_CFG_SKILL_POSITION_FIELD.label = 2
+MAGIC_SKILL_CFG_SKILL_POSITION_FIELD.has_default_value = false
+MAGIC_SKILL_CFG_SKILL_POSITION_FIELD.default_value = 0
+MAGIC_SKILL_CFG_SKILL_POSITION_FIELD.type = 13
+MAGIC_SKILL_CFG_SKILL_POSITION_FIELD.cpp_type = 3
+
+MAGIC_SKILL_CFG_SKILL_ICON_FIELD.name = "skill_icon"
+MAGIC_SKILL_CFG_SKILL_ICON_FIELD.full_name = ".ftcfg.magic_skill_cfg.skill_icon"
+MAGIC_SKILL_CFG_SKILL_ICON_FIELD.number = 8
+MAGIC_SKILL_CFG_SKILL_ICON_FIELD.index = 7
+MAGIC_SKILL_CFG_SKILL_ICON_FIELD.label = 2
+MAGIC_SKILL_CFG_SKILL_ICON_FIELD.has_default_value = false
+MAGIC_SKILL_CFG_SKILL_ICON_FIELD.default_value = 0
+MAGIC_SKILL_CFG_SKILL_ICON_FIELD.type = 13
+MAGIC_SKILL_CFG_SKILL_ICON_FIELD.cpp_type = 3
+
+MAGIC_SKILL_CFG_SKILL_NAME_FIELD.name = "skill_name"
+MAGIC_SKILL_CFG_SKILL_NAME_FIELD.full_name = ".ftcfg.magic_skill_cfg.skill_name"
+MAGIC_SKILL_CFG_SKILL_NAME_FIELD.number = 9
+MAGIC_SKILL_CFG_SKILL_NAME_FIELD.index = 8
+MAGIC_SKILL_CFG_SKILL_NAME_FIELD.label = 2
+MAGIC_SKILL_CFG_SKILL_NAME_FIELD.has_default_value = false
+MAGIC_SKILL_CFG_SKILL_NAME_FIELD.default_value = 0
+MAGIC_SKILL_CFG_SKILL_NAME_FIELD.type = 13
+MAGIC_SKILL_CFG_SKILL_NAME_FIELD.cpp_type = 3
+
+MAGIC_SKILL_CFG_SKILL_CONDITION_FIELD.name = "skill_condition"
+MAGIC_SKILL_CFG_SKILL_CONDITION_FIELD.full_name = ".ftcfg.magic_skill_cfg.skill_condition"
+MAGIC_SKILL_CFG_SKILL_CONDITION_FIELD.number = 10
+MAGIC_SKILL_CFG_SKILL_CONDITION_FIELD.index = 9
+MAGIC_SKILL_CFG_SKILL_CONDITION_FIELD.label = 2
+MAGIC_SKILL_CFG_SKILL_CONDITION_FIELD.has_default_value = false
+MAGIC_SKILL_CFG_SKILL_CONDITION_FIELD.default_value = 0
+MAGIC_SKILL_CFG_SKILL_CONDITION_FIELD.type = 13
+MAGIC_SKILL_CFG_SKILL_CONDITION_FIELD.cpp_type = 3
+
+MAGIC_SKILL_CFG.name = "magic_skill_cfg"
+MAGIC_SKILL_CFG.full_name = ".ftcfg.magic_skill_cfg"
+MAGIC_SKILL_CFG.nested_types = {}
+MAGIC_SKILL_CFG.enum_types = {}
+MAGIC_SKILL_CFG.fields = {MAGIC_SKILL_CFG_ID_FIELD, MAGIC_SKILL_CFG_LAYERID_FIELD, MAGIC_SKILL_CFG_MAX_LEVEL_FIELD, MAGIC_SKILL_CFG_MAGICID_ARR_FIELD, MAGIC_SKILL_CFG_MAGIC_TYPE_FIELD, MAGIC_SKILL_CFG_SLOT_LOCK_COND_FIELD, MAGIC_SKILL_CFG_SKILL_POSITION_FIELD, MAGIC_SKILL_CFG_SKILL_ICON_FIELD, MAGIC_SKILL_CFG_SKILL_NAME_FIELD, MAGIC_SKILL_CFG_SKILL_CONDITION_FIELD}
+MAGIC_SKILL_CFG.is_extendable = false
+MAGIC_SKILL_CFG.extensions = {}
+MAGIC_SKILL_CFGS_ITEMS_FIELD.name = "items"
+MAGIC_SKILL_CFGS_ITEMS_FIELD.full_name = ".ftcfg.magic_skill_cfgs.items"
+MAGIC_SKILL_CFGS_ITEMS_FIELD.number = 1
+MAGIC_SKILL_CFGS_ITEMS_FIELD.index = 0
+MAGIC_SKILL_CFGS_ITEMS_FIELD.label = 3
+MAGIC_SKILL_CFGS_ITEMS_FIELD.has_default_value = false
+MAGIC_SKILL_CFGS_ITEMS_FIELD.default_value = {}
+MAGIC_SKILL_CFGS_ITEMS_FIELD.message_type = MAGIC_SKILL_CFG
+MAGIC_SKILL_CFGS_ITEMS_FIELD.type = 11
+MAGIC_SKILL_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MAGIC_SKILL_CFGS.name = "magic_skill_cfgs"
+MAGIC_SKILL_CFGS.full_name = ".ftcfg.magic_skill_cfgs"
+MAGIC_SKILL_CFGS.nested_types = {}
+MAGIC_SKILL_CFGS.enum_types = {}
+MAGIC_SKILL_CFGS.fields = {MAGIC_SKILL_CFGS_ITEMS_FIELD}
+MAGIC_SKILL_CFGS.is_extendable = false
+MAGIC_SKILL_CFGS.extensions = {}
+MAGIC_SKILL_UPLEVEL_CFG_LEVEL_FIELD.name = "level"
+MAGIC_SKILL_UPLEVEL_CFG_LEVEL_FIELD.full_name = ".ftcfg.magic_skill_uplevel_cfg.level"
+MAGIC_SKILL_UPLEVEL_CFG_LEVEL_FIELD.number = 1
+MAGIC_SKILL_UPLEVEL_CFG_LEVEL_FIELD.index = 0
+MAGIC_SKILL_UPLEVEL_CFG_LEVEL_FIELD.label = 2
+MAGIC_SKILL_UPLEVEL_CFG_LEVEL_FIELD.has_default_value = false
+MAGIC_SKILL_UPLEVEL_CFG_LEVEL_FIELD.default_value = 0
+MAGIC_SKILL_UPLEVEL_CFG_LEVEL_FIELD.type = 13
+MAGIC_SKILL_UPLEVEL_CFG_LEVEL_FIELD.cpp_type = 3
+
+MAGIC_SKILL_UPLEVEL_CFG_NEXT_LEVEL_FIELD.name = "next_level"
+MAGIC_SKILL_UPLEVEL_CFG_NEXT_LEVEL_FIELD.full_name = ".ftcfg.magic_skill_uplevel_cfg.next_level"
+MAGIC_SKILL_UPLEVEL_CFG_NEXT_LEVEL_FIELD.number = 2
+MAGIC_SKILL_UPLEVEL_CFG_NEXT_LEVEL_FIELD.index = 1
+MAGIC_SKILL_UPLEVEL_CFG_NEXT_LEVEL_FIELD.label = 2
+MAGIC_SKILL_UPLEVEL_CFG_NEXT_LEVEL_FIELD.has_default_value = false
+MAGIC_SKILL_UPLEVEL_CFG_NEXT_LEVEL_FIELD.default_value = 0
+MAGIC_SKILL_UPLEVEL_CFG_NEXT_LEVEL_FIELD.type = 13
+MAGIC_SKILL_UPLEVEL_CFG_NEXT_LEVEL_FIELD.cpp_type = 3
+
+MAGIC_SKILL_UPLEVEL_CFG_MAGICID_FIELD.name = "magicid"
+MAGIC_SKILL_UPLEVEL_CFG_MAGICID_FIELD.full_name = ".ftcfg.magic_skill_uplevel_cfg.magicid"
+MAGIC_SKILL_UPLEVEL_CFG_MAGICID_FIELD.number = 3
+MAGIC_SKILL_UPLEVEL_CFG_MAGICID_FIELD.index = 2
+MAGIC_SKILL_UPLEVEL_CFG_MAGICID_FIELD.label = 2
+MAGIC_SKILL_UPLEVEL_CFG_MAGICID_FIELD.has_default_value = false
+MAGIC_SKILL_UPLEVEL_CFG_MAGICID_FIELD.default_value = 0
+MAGIC_SKILL_UPLEVEL_CFG_MAGICID_FIELD.type = 13
+MAGIC_SKILL_UPLEVEL_CFG_MAGICID_FIELD.cpp_type = 3
+
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_TYPE_FIELD.name = "attribute_type"
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_TYPE_FIELD.full_name = ".ftcfg.magic_skill_uplevel_cfg.attribute_type"
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_TYPE_FIELD.number = 4
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_TYPE_FIELD.index = 3
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_TYPE_FIELD.label = 3
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_TYPE_FIELD.has_default_value = false
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_TYPE_FIELD.default_value = {}
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_TYPE_FIELD.type = 13
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_TYPE_FIELD.cpp_type = 3
+
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_VALUE_FIELD.name = "attribute_value"
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_VALUE_FIELD.full_name = ".ftcfg.magic_skill_uplevel_cfg.attribute_value"
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_VALUE_FIELD.number = 5
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_VALUE_FIELD.index = 4
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_VALUE_FIELD.label = 3
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_VALUE_FIELD.has_default_value = false
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_VALUE_FIELD.default_value = {}
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_VALUE_FIELD.type = 13
+MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_VALUE_FIELD.cpp_type = 3
+
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_BASE_RATE_INCR_FIELD.name = "formation_base_rate_incr"
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_BASE_RATE_INCR_FIELD.full_name = ".ftcfg.magic_skill_uplevel_cfg.formation_base_rate_incr"
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_BASE_RATE_INCR_FIELD.number = 6
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_BASE_RATE_INCR_FIELD.index = 5
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_BASE_RATE_INCR_FIELD.label = 2
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_BASE_RATE_INCR_FIELD.has_default_value = false
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_BASE_RATE_INCR_FIELD.default_value = 0.0
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_BASE_RATE_INCR_FIELD.type = 2
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_BASE_RATE_INCR_FIELD.cpp_type = 6
+
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_FIELD.name = "formation_rate"
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_FIELD.full_name = ".ftcfg.magic_skill_uplevel_cfg.formation_rate"
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_FIELD.number = 7
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_FIELD.index = 6
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_FIELD.label = 2
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_FIELD.has_default_value = false
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_FIELD.default_value = 0.0
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_FIELD.type = 2
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_FIELD.cpp_type = 6
+
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_INCR_FIELD.name = "formation_rate_incr"
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_INCR_FIELD.full_name = ".ftcfg.magic_skill_uplevel_cfg.formation_rate_incr"
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_INCR_FIELD.number = 8
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_INCR_FIELD.index = 7
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_INCR_FIELD.label = 2
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_INCR_FIELD.has_default_value = false
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_INCR_FIELD.default_value = 0.0
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_INCR_FIELD.type = 2
+MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_INCR_FIELD.cpp_type = 6
+
+MAGIC_SKILL_UPLEVEL_CFG_SKILL_TIPS_FIELD.name = "skill_tips"
+MAGIC_SKILL_UPLEVEL_CFG_SKILL_TIPS_FIELD.full_name = ".ftcfg.magic_skill_uplevel_cfg.skill_tips"
+MAGIC_SKILL_UPLEVEL_CFG_SKILL_TIPS_FIELD.number = 9
+MAGIC_SKILL_UPLEVEL_CFG_SKILL_TIPS_FIELD.index = 8
+MAGIC_SKILL_UPLEVEL_CFG_SKILL_TIPS_FIELD.label = 3
+MAGIC_SKILL_UPLEVEL_CFG_SKILL_TIPS_FIELD.has_default_value = false
+MAGIC_SKILL_UPLEVEL_CFG_SKILL_TIPS_FIELD.default_value = {}
+MAGIC_SKILL_UPLEVEL_CFG_SKILL_TIPS_FIELD.type = 13
+MAGIC_SKILL_UPLEVEL_CFG_SKILL_TIPS_FIELD.cpp_type = 3
+
+MAGIC_SKILL_UPLEVEL_CFG_PARTNER_TIPS_FIELD.name = "partner_tips"
+MAGIC_SKILL_UPLEVEL_CFG_PARTNER_TIPS_FIELD.full_name = ".ftcfg.magic_skill_uplevel_cfg.partner_tips"
+MAGIC_SKILL_UPLEVEL_CFG_PARTNER_TIPS_FIELD.number = 10
+MAGIC_SKILL_UPLEVEL_CFG_PARTNER_TIPS_FIELD.index = 9
+MAGIC_SKILL_UPLEVEL_CFG_PARTNER_TIPS_FIELD.label = 3
+MAGIC_SKILL_UPLEVEL_CFG_PARTNER_TIPS_FIELD.has_default_value = false
+MAGIC_SKILL_UPLEVEL_CFG_PARTNER_TIPS_FIELD.default_value = {}
+MAGIC_SKILL_UPLEVEL_CFG_PARTNER_TIPS_FIELD.type = 2
+MAGIC_SKILL_UPLEVEL_CFG_PARTNER_TIPS_FIELD.cpp_type = 6
+
+MAGIC_SKILL_UPLEVEL_CFG.name = "magic_skill_uplevel_cfg"
+MAGIC_SKILL_UPLEVEL_CFG.full_name = ".ftcfg.magic_skill_uplevel_cfg"
+MAGIC_SKILL_UPLEVEL_CFG.nested_types = {}
+MAGIC_SKILL_UPLEVEL_CFG.enum_types = {}
+MAGIC_SKILL_UPLEVEL_CFG.fields = {MAGIC_SKILL_UPLEVEL_CFG_LEVEL_FIELD, MAGIC_SKILL_UPLEVEL_CFG_NEXT_LEVEL_FIELD, MAGIC_SKILL_UPLEVEL_CFG_MAGICID_FIELD, MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_TYPE_FIELD, MAGIC_SKILL_UPLEVEL_CFG_ATTRIBUTE_VALUE_FIELD, MAGIC_SKILL_UPLEVEL_CFG_FORMATION_BASE_RATE_INCR_FIELD, MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_FIELD, MAGIC_SKILL_UPLEVEL_CFG_FORMATION_RATE_INCR_FIELD, MAGIC_SKILL_UPLEVEL_CFG_SKILL_TIPS_FIELD, MAGIC_SKILL_UPLEVEL_CFG_PARTNER_TIPS_FIELD}
+MAGIC_SKILL_UPLEVEL_CFG.is_extendable = false
+MAGIC_SKILL_UPLEVEL_CFG.extensions = {}
+MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD.name = "items"
+MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD.full_name = ".ftcfg.magic_skill_uplevel_cfgs.items"
+MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD.number = 1
+MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD.index = 0
+MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD.label = 3
+MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD.has_default_value = false
+MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD.default_value = {}
+MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD.message_type = MAGIC_SKILL_UPLEVEL_CFG
+MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD.type = 11
+MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MAGIC_SKILL_UPLEVEL_CFGS.name = "magic_skill_uplevel_cfgs"
+MAGIC_SKILL_UPLEVEL_CFGS.full_name = ".ftcfg.magic_skill_uplevel_cfgs"
+MAGIC_SKILL_UPLEVEL_CFGS.nested_types = {}
+MAGIC_SKILL_UPLEVEL_CFGS.enum_types = {}
+MAGIC_SKILL_UPLEVEL_CFGS.fields = {MAGIC_SKILL_UPLEVEL_CFGS_ITEMS_FIELD}
+MAGIC_SKILL_UPLEVEL_CFGS.is_extendable = false
+MAGIC_SKILL_UPLEVEL_CFGS.extensions = {}
+MAGIC_SKILL_LAYER_CFG_LAYERID_FIELD.name = "layerid"
+MAGIC_SKILL_LAYER_CFG_LAYERID_FIELD.full_name = ".ftcfg.magic_skill_layer_cfg.layerid"
+MAGIC_SKILL_LAYER_CFG_LAYERID_FIELD.number = 1
+MAGIC_SKILL_LAYER_CFG_LAYERID_FIELD.index = 0
+MAGIC_SKILL_LAYER_CFG_LAYERID_FIELD.label = 2
+MAGIC_SKILL_LAYER_CFG_LAYERID_FIELD.has_default_value = false
+MAGIC_SKILL_LAYER_CFG_LAYERID_FIELD.default_value = 0
+MAGIC_SKILL_LAYER_CFG_LAYERID_FIELD.type = 13
+MAGIC_SKILL_LAYER_CFG_LAYERID_FIELD.cpp_type = 3
+
+MAGIC_SKILL_LAYER_CFG_ROLE_LEVEL_FIELD.name = "role_level"
+MAGIC_SKILL_LAYER_CFG_ROLE_LEVEL_FIELD.full_name = ".ftcfg.magic_skill_layer_cfg.role_level"
+MAGIC_SKILL_LAYER_CFG_ROLE_LEVEL_FIELD.number = 2
+MAGIC_SKILL_LAYER_CFG_ROLE_LEVEL_FIELD.index = 1
+MAGIC_SKILL_LAYER_CFG_ROLE_LEVEL_FIELD.label = 2
+MAGIC_SKILL_LAYER_CFG_ROLE_LEVEL_FIELD.has_default_value = false
+MAGIC_SKILL_LAYER_CFG_ROLE_LEVEL_FIELD.default_value = 0
+MAGIC_SKILL_LAYER_CFG_ROLE_LEVEL_FIELD.type = 13
+MAGIC_SKILL_LAYER_CFG_ROLE_LEVEL_FIELD.cpp_type = 3
+
+MAGIC_SKILL_LAYER_CFG_LAYERID_ARR_FIELD.name = "layerid_arr"
+MAGIC_SKILL_LAYER_CFG_LAYERID_ARR_FIELD.full_name = ".ftcfg.magic_skill_layer_cfg.layerid_arr"
+MAGIC_SKILL_LAYER_CFG_LAYERID_ARR_FIELD.number = 3
+MAGIC_SKILL_LAYER_CFG_LAYERID_ARR_FIELD.index = 2
+MAGIC_SKILL_LAYER_CFG_LAYERID_ARR_FIELD.label = 3
+MAGIC_SKILL_LAYER_CFG_LAYERID_ARR_FIELD.has_default_value = false
+MAGIC_SKILL_LAYER_CFG_LAYERID_ARR_FIELD.default_value = {}
+MAGIC_SKILL_LAYER_CFG_LAYERID_ARR_FIELD.type = 13
+MAGIC_SKILL_LAYER_CFG_LAYERID_ARR_FIELD.cpp_type = 3
+
+MAGIC_SKILL_LAYER_CFG_MAX_MAGIC_SKILL_NUM_FIELD.name = "max_magic_skill_num"
+MAGIC_SKILL_LAYER_CFG_MAX_MAGIC_SKILL_NUM_FIELD.full_name = ".ftcfg.magic_skill_layer_cfg.max_magic_skill_num"
+MAGIC_SKILL_LAYER_CFG_MAX_MAGIC_SKILL_NUM_FIELD.number = 4
+MAGIC_SKILL_LAYER_CFG_MAX_MAGIC_SKILL_NUM_FIELD.index = 3
+MAGIC_SKILL_LAYER_CFG_MAX_MAGIC_SKILL_NUM_FIELD.label = 2
+MAGIC_SKILL_LAYER_CFG_MAX_MAGIC_SKILL_NUM_FIELD.has_default_value = false
+MAGIC_SKILL_LAYER_CFG_MAX_MAGIC_SKILL_NUM_FIELD.default_value = 0
+MAGIC_SKILL_LAYER_CFG_MAX_MAGIC_SKILL_NUM_FIELD.type = 13
+MAGIC_SKILL_LAYER_CFG_MAX_MAGIC_SKILL_NUM_FIELD.cpp_type = 3
+
+MAGIC_SKILL_LAYER_CFG.name = "magic_skill_layer_cfg"
+MAGIC_SKILL_LAYER_CFG.full_name = ".ftcfg.magic_skill_layer_cfg"
+MAGIC_SKILL_LAYER_CFG.nested_types = {}
+MAGIC_SKILL_LAYER_CFG.enum_types = {}
+MAGIC_SKILL_LAYER_CFG.fields = {MAGIC_SKILL_LAYER_CFG_LAYERID_FIELD, MAGIC_SKILL_LAYER_CFG_ROLE_LEVEL_FIELD, MAGIC_SKILL_LAYER_CFG_LAYERID_ARR_FIELD, MAGIC_SKILL_LAYER_CFG_MAX_MAGIC_SKILL_NUM_FIELD}
+MAGIC_SKILL_LAYER_CFG.is_extendable = false
+MAGIC_SKILL_LAYER_CFG.extensions = {}
+MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD.name = "items"
+MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD.full_name = ".ftcfg.magic_skill_layer_cfgs.items"
+MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD.number = 1
+MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD.index = 0
+MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD.label = 3
+MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD.has_default_value = false
+MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD.default_value = {}
+MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD.message_type = MAGIC_SKILL_LAYER_CFG
+MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD.type = 11
+MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MAGIC_SKILL_LAYER_CFGS.name = "magic_skill_layer_cfgs"
+MAGIC_SKILL_LAYER_CFGS.full_name = ".ftcfg.magic_skill_layer_cfgs"
+MAGIC_SKILL_LAYER_CFGS.nested_types = {}
+MAGIC_SKILL_LAYER_CFGS.enum_types = {}
+MAGIC_SKILL_LAYER_CFGS.fields = {MAGIC_SKILL_LAYER_CFGS_ITEMS_FIELD}
+MAGIC_SKILL_LAYER_CFGS.is_extendable = false
+MAGIC_SKILL_LAYER_CFGS.extensions = {}
+MAGIC_POINT_REFINE_CFG_CONFID_FIELD.name = "confid"
+MAGIC_POINT_REFINE_CFG_CONFID_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.confid"
+MAGIC_POINT_REFINE_CFG_CONFID_FIELD.number = 1
+MAGIC_POINT_REFINE_CFG_CONFID_FIELD.index = 0
+MAGIC_POINT_REFINE_CFG_CONFID_FIELD.label = 2
+MAGIC_POINT_REFINE_CFG_CONFID_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_CONFID_FIELD.default_value = 0
+MAGIC_POINT_REFINE_CFG_CONFID_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_CONFID_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG_MAIN_QUEST_ID_FIELD.name = "main_quest_id"
+MAGIC_POINT_REFINE_CFG_MAIN_QUEST_ID_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.main_quest_id"
+MAGIC_POINT_REFINE_CFG_MAIN_QUEST_ID_FIELD.number = 2
+MAGIC_POINT_REFINE_CFG_MAIN_QUEST_ID_FIELD.index = 1
+MAGIC_POINT_REFINE_CFG_MAIN_QUEST_ID_FIELD.label = 2
+MAGIC_POINT_REFINE_CFG_MAIN_QUEST_ID_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_MAIN_QUEST_ID_FIELD.default_value = 0
+MAGIC_POINT_REFINE_CFG_MAIN_QUEST_ID_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_MAIN_QUEST_ID_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG_ROLE_LEVEL_FIELD.name = "role_level"
+MAGIC_POINT_REFINE_CFG_ROLE_LEVEL_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.role_level"
+MAGIC_POINT_REFINE_CFG_ROLE_LEVEL_FIELD.number = 3
+MAGIC_POINT_REFINE_CFG_ROLE_LEVEL_FIELD.index = 2
+MAGIC_POINT_REFINE_CFG_ROLE_LEVEL_FIELD.label = 2
+MAGIC_POINT_REFINE_CFG_ROLE_LEVEL_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_ROLE_LEVEL_FIELD.default_value = 0
+MAGIC_POINT_REFINE_CFG_ROLE_LEVEL_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_ROLE_LEVEL_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG_MIN_POINT_FIELD.name = "min_point"
+MAGIC_POINT_REFINE_CFG_MIN_POINT_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.min_point"
+MAGIC_POINT_REFINE_CFG_MIN_POINT_FIELD.number = 4
+MAGIC_POINT_REFINE_CFG_MIN_POINT_FIELD.index = 3
+MAGIC_POINT_REFINE_CFG_MIN_POINT_FIELD.label = 2
+MAGIC_POINT_REFINE_CFG_MIN_POINT_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_MIN_POINT_FIELD.default_value = 0
+MAGIC_POINT_REFINE_CFG_MIN_POINT_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_MIN_POINT_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG_MAX_POINT_FIELD.name = "max_point"
+MAGIC_POINT_REFINE_CFG_MAX_POINT_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.max_point"
+MAGIC_POINT_REFINE_CFG_MAX_POINT_FIELD.number = 5
+MAGIC_POINT_REFINE_CFG_MAX_POINT_FIELD.index = 4
+MAGIC_POINT_REFINE_CFG_MAX_POINT_FIELD.label = 2
+MAGIC_POINT_REFINE_CFG_MAX_POINT_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_MAX_POINT_FIELD.default_value = 0
+MAGIC_POINT_REFINE_CFG_MAX_POINT_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_MAX_POINT_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG_ITEM_ID_FIELD.name = "item_id"
+MAGIC_POINT_REFINE_CFG_ITEM_ID_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.item_id"
+MAGIC_POINT_REFINE_CFG_ITEM_ID_FIELD.number = 6
+MAGIC_POINT_REFINE_CFG_ITEM_ID_FIELD.index = 5
+MAGIC_POINT_REFINE_CFG_ITEM_ID_FIELD.label = 2
+MAGIC_POINT_REFINE_CFG_ITEM_ID_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_ITEM_ID_FIELD.default_value = 0
+MAGIC_POINT_REFINE_CFG_ITEM_ID_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_ITEM_ID_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG_ITEM_NUM_FIELD.name = "item_num"
+MAGIC_POINT_REFINE_CFG_ITEM_NUM_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.item_num"
+MAGIC_POINT_REFINE_CFG_ITEM_NUM_FIELD.number = 7
+MAGIC_POINT_REFINE_CFG_ITEM_NUM_FIELD.index = 6
+MAGIC_POINT_REFINE_CFG_ITEM_NUM_FIELD.label = 2
+MAGIC_POINT_REFINE_CFG_ITEM_NUM_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_ITEM_NUM_FIELD.default_value = 0
+MAGIC_POINT_REFINE_CFG_ITEM_NUM_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_ITEM_NUM_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG_COIN_TYPE_FIELD.name = "coin_type"
+MAGIC_POINT_REFINE_CFG_COIN_TYPE_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.coin_type"
+MAGIC_POINT_REFINE_CFG_COIN_TYPE_FIELD.number = 8
+MAGIC_POINT_REFINE_CFG_COIN_TYPE_FIELD.index = 7
+MAGIC_POINT_REFINE_CFG_COIN_TYPE_FIELD.label = 3
+MAGIC_POINT_REFINE_CFG_COIN_TYPE_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_COIN_TYPE_FIELD.default_value = {}
+MAGIC_POINT_REFINE_CFG_COIN_TYPE_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_COIN_TYPE_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG_COIN_NUM_FIELD.name = "coin_num"
+MAGIC_POINT_REFINE_CFG_COIN_NUM_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.coin_num"
+MAGIC_POINT_REFINE_CFG_COIN_NUM_FIELD.number = 9
+MAGIC_POINT_REFINE_CFG_COIN_NUM_FIELD.index = 8
+MAGIC_POINT_REFINE_CFG_COIN_NUM_FIELD.label = 3
+MAGIC_POINT_REFINE_CFG_COIN_NUM_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_COIN_NUM_FIELD.default_value = {}
+MAGIC_POINT_REFINE_CFG_COIN_NUM_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_COIN_NUM_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG_REFINE_TIME_FIELD.name = "refine_time"
+MAGIC_POINT_REFINE_CFG_REFINE_TIME_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.refine_time"
+MAGIC_POINT_REFINE_CFG_REFINE_TIME_FIELD.number = 10
+MAGIC_POINT_REFINE_CFG_REFINE_TIME_FIELD.index = 9
+MAGIC_POINT_REFINE_CFG_REFINE_TIME_FIELD.label = 2
+MAGIC_POINT_REFINE_CFG_REFINE_TIME_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_REFINE_TIME_FIELD.default_value = 0
+MAGIC_POINT_REFINE_CFG_REFINE_TIME_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_REFINE_TIME_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_TYPE_FIELD.name = "cancel_coin_type"
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_TYPE_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.cancel_coin_type"
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_TYPE_FIELD.number = 11
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_TYPE_FIELD.index = 10
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_TYPE_FIELD.label = 3
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_TYPE_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_TYPE_FIELD.default_value = {}
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_TYPE_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_TYPE_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_NUM_FIELD.name = "cancel_coin_num"
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_NUM_FIELD.full_name = ".ftcfg.magic_point_refine_cfg.cancel_coin_num"
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_NUM_FIELD.number = 12
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_NUM_FIELD.index = 11
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_NUM_FIELD.label = 3
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_NUM_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_NUM_FIELD.default_value = {}
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_NUM_FIELD.type = 13
+MAGIC_POINT_REFINE_CFG_CANCEL_COIN_NUM_FIELD.cpp_type = 3
+
+MAGIC_POINT_REFINE_CFG.name = "magic_point_refine_cfg"
+MAGIC_POINT_REFINE_CFG.full_name = ".ftcfg.magic_point_refine_cfg"
+MAGIC_POINT_REFINE_CFG.nested_types = {}
+MAGIC_POINT_REFINE_CFG.enum_types = {}
+MAGIC_POINT_REFINE_CFG.fields = {MAGIC_POINT_REFINE_CFG_CONFID_FIELD, MAGIC_POINT_REFINE_CFG_MAIN_QUEST_ID_FIELD, MAGIC_POINT_REFINE_CFG_ROLE_LEVEL_FIELD, MAGIC_POINT_REFINE_CFG_MIN_POINT_FIELD, MAGIC_POINT_REFINE_CFG_MAX_POINT_FIELD, MAGIC_POINT_REFINE_CFG_ITEM_ID_FIELD, MAGIC_POINT_REFINE_CFG_ITEM_NUM_FIELD, MAGIC_POINT_REFINE_CFG_COIN_TYPE_FIELD, MAGIC_POINT_REFINE_CFG_COIN_NUM_FIELD, MAGIC_POINT_REFINE_CFG_REFINE_TIME_FIELD, MAGIC_POINT_REFINE_CFG_CANCEL_COIN_TYPE_FIELD, MAGIC_POINT_REFINE_CFG_CANCEL_COIN_NUM_FIELD}
+MAGIC_POINT_REFINE_CFG.is_extendable = false
+MAGIC_POINT_REFINE_CFG.extensions = {}
+MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD.name = "items"
+MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD.full_name = ".ftcfg.magic_point_refine_cfgs.items"
+MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD.number = 1
+MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD.index = 0
+MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD.label = 3
+MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD.has_default_value = false
+MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD.default_value = {}
+MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD.message_type = MAGIC_POINT_REFINE_CFG
+MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD.type = 11
+MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD.cpp_type = 10
+
+MAGIC_POINT_REFINE_CFGS.name = "magic_point_refine_cfgs"
+MAGIC_POINT_REFINE_CFGS.full_name = ".ftcfg.magic_point_refine_cfgs"
+MAGIC_POINT_REFINE_CFGS.nested_types = {}
+MAGIC_POINT_REFINE_CFGS.enum_types = {}
+MAGIC_POINT_REFINE_CFGS.fields = {MAGIC_POINT_REFINE_CFGS_ITEMS_FIELD}
+MAGIC_POINT_REFINE_CFGS.is_extendable = false
+MAGIC_POINT_REFINE_CFGS.extensions = {}
+
+activation_cfg = protobuf.Message(ACTIVATION_CFG)
+activation_cfgs = protobuf.Message(ACTIVATION_CFGS)
+activation_reward_cfg = protobuf.Message(ACTIVATION_REWARD_CFG)
+activation_reward_cfgs = protobuf.Message(ACTIVATION_REWARD_CFGS)
+activity_cfg = protobuf.Message(ACTIVITY_CFG)
+activity_cfgs = protobuf.Message(ACTIVITY_CFGS)
+activity_dungeon_cfg = protobuf.Message(ACTIVITY_DUNGEON_CFG)
+activity_dungeon_cfgs = protobuf.Message(ACTIVITY_DUNGEON_CFGS)
+activity_info_cfg = protobuf.Message(ACTIVITY_INFO_CFG)
+activity_info_cfgs = protobuf.Message(ACTIVITY_INFO_CFGS)
+activity_rooms_cfg = protobuf.Message(ACTIVITY_ROOMS_CFG)
+activity_rooms_cfgs = protobuf.Message(ACTIVITY_ROOMS_CFGS)
+arena_data_cfg = protobuf.Message(ARENA_DATA_CFG)
+arena_data_cfgs = protobuf.Message(ARENA_DATA_CFGS)
+arena_reward_cfg = protobuf.Message(ARENA_REWARD_CFG)
+arena_reward_cfgs = protobuf.Message(ARENA_REWARD_CFGS)
+attribute_show_cfg = protobuf.Message(ATTRIBUTE_SHOW_CFG)
+attribute_show_cfgs = protobuf.Message(ATTRIBUTE_SHOW_CFGS)
+bag_routine_cfg = protobuf.Message(BAG_ROUTINE_CFG)
+bag_routine_cfgs = protobuf.Message(BAG_ROUTINE_CFGS)
+base_prop_cfg = protobuf.Message(BASE_PROP_CFG)
+base_prop_cfgs = protobuf.Message(BASE_PROP_CFGS)
+battle_collect_crystal_cfg = protobuf.Message(BATTLE_COLLECT_CRYSTAL_CFG)
+battle_collect_crystal_cfgs = protobuf.Message(BATTLE_COLLECT_CRYSTAL_CFGS)
+battle_crystal_info_cfg = protobuf.Message(BATTLE_CRYSTAL_INFO_CFG)
+battle_crystal_info_cfgs = protobuf.Message(BATTLE_CRYSTAL_INFO_CFGS)
+battle_crystal_rooms_cfg = protobuf.Message(BATTLE_CRYSTAL_ROOMS_CFG)
+battle_crystal_rooms_cfgs = protobuf.Message(BATTLE_CRYSTAL_ROOMS_CFGS)
+boss_show_cam_cfg = protobuf.Message(BOSS_SHOW_CAM_CFG)
+boss_show_cam_cfgs = protobuf.Message(BOSS_SHOW_CAM_CFGS)
+boss_show_ui_cfg = protobuf.Message(BOSS_SHOW_UI_CFG)
+boss_show_ui_cfgs = protobuf.Message(BOSS_SHOW_UI_CFGS)
+boss_showinfo_cfg = protobuf.Message(BOSS_SHOWINFO_CFG)
+boss_showinfo_cfgs = protobuf.Message(BOSS_SHOWINFO_CFGS)
+box_collect_cfg = protobuf.Message(BOX_COLLECT_CFG)
+box_collect_cfgs = protobuf.Message(BOX_COLLECT_CFGS)
+boxs_cfg = protobuf.Message(BOXS_CFG)
+boxs_cfgs = protobuf.Message(BOXS_CFGS)
+buff_cfg = protobuf.Message(BUFF_CFG)
+buff_cfgs = protobuf.Message(BUFF_CFGS)
+buff_effect_cfg = protobuf.Message(BUFF_EFFECT_CFG)
+buff_effect_cfgs = protobuf.Message(BUFF_EFFECT_CFGS)
+building_mission_pool_cfg = protobuf.Message(BUILDING_MISSION_POOL_CFG)
+building_mission_pool_cfgs = protobuf.Message(BUILDING_MISSION_POOL_CFGS)
+business_activity_cfg = protobuf.Message(BUSINESS_ACTIVITY_CFG)
+business_activity_cfgs = protobuf.Message(BUSINESS_ACTIVITY_CFGS)
+cam_options_cfg = protobuf.Message(CAM_OPTIONS_CFG)
+cam_options_cfgs = protobuf.Message(CAM_OPTIONS_CFGS)
+camp_change_cost_cfg = protobuf.Message(CAMP_CHANGE_COST_CFG)
+camp_change_cost_cfgs = protobuf.Message(CAMP_CHANGE_COST_CFGS)
+camp_relation_cfg = protobuf.Message(CAMP_RELATION_CFG)
+camp_relation_cfgs = protobuf.Message(CAMP_RELATION_CFGS)
+campboss_cfg = protobuf.Message(CAMPBOSS_CFG)
+campboss_cfgs = protobuf.Message(CAMPBOSS_CFGS)
+char_default_cfg = protobuf.Message(CHAR_DEFAULT_CFG)
+char_default_cfgs = protobuf.Message(CHAR_DEFAULT_CFGS)
+chest_drop_cfg = protobuf.Message(CHEST_DROP_CFG)
+chest_drop_cfgs = protobuf.Message(CHEST_DROP_CFGS)
+client_trigger_action_cfg = protobuf.Message(CLIENT_TRIGGER_ACTION_CFG)
+client_trigger_action_cfgs = protobuf.Message(CLIENT_TRIGGER_ACTION_CFGS)
+client_trigger_cfg = protobuf.Message(CLIENT_TRIGGER_CFG)
+client_trigger_cfgs = protobuf.Message(CLIENT_TRIGGER_CFGS)
+client_trigger_condition_cfg = protobuf.Message(CLIENT_TRIGGER_CONDITION_CFG)
+client_trigger_condition_cfgs = protobuf.Message(CLIENT_TRIGGER_CONDITION_CFGS)
+client_trigger_event_cfg = protobuf.Message(CLIENT_TRIGGER_EVENT_CFG)
+client_trigger_event_cfgs = protobuf.Message(CLIENT_TRIGGER_EVENT_CFGS)
+client_trigger_variable_cfg = protobuf.Message(CLIENT_TRIGGER_VARIABLE_CFG)
+client_trigger_variable_cfgs = protobuf.Message(CLIENT_TRIGGER_VARIABLE_CFGS)
+clue_cfg = protobuf.Message(CLUE_CFG)
+clue_cfgs = protobuf.Message(CLUE_CFGS)
+convoy_biaoche_cfg = protobuf.Message(CONVOY_BIAOCHE_CFG)
+convoy_biaoche_cfgs = protobuf.Message(CONVOY_BIAOCHE_CFGS)
+convoy_biaoche_scene_cfg = protobuf.Message(CONVOY_BIAOCHE_SCENE_CFG)
+convoy_biaoche_scene_cfgs = protobuf.Message(CONVOY_BIAOCHE_SCENE_CFGS)
+cooldown_cfg = protobuf.Message(COOLDOWN_CFG)
+cooldown_cfgs = protobuf.Message(COOLDOWN_CFGS)
+crusade_base_cfg = protobuf.Message(CRUSADE_BASE_CFG)
+crusade_base_cfgs = protobuf.Message(CRUSADE_BASE_CFGS)
+crusade_dungon_cfg = protobuf.Message(CRUSADE_DUNGON_CFG)
+crusade_dungon_cfgs = protobuf.Message(CRUSADE_DUNGON_CFGS)
+depot_unlock_cfg = protobuf.Message(DEPOT_UNLOCK_CFG)
+depot_unlock_cfgs = protobuf.Message(DEPOT_UNLOCK_CFGS)
+dig_treasure_event_cfg = protobuf.Message(DIG_TREASURE_EVENT_CFG)
+dig_treasure_event_cfgs = protobuf.Message(DIG_TREASURE_EVENT_CFGS)
+divine_mission_cfg = protobuf.Message(DIVINE_MISSION_CFG)
+divine_mission_cfgs = protobuf.Message(DIVINE_MISSION_CFGS)
+divine_section_cfg = protobuf.Message(DIVINE_SECTION_CFG)
+divine_section_cfgs = protobuf.Message(DIVINE_SECTION_CFGS)
+drop_point_cfg = protobuf.Message(DROP_POINT_CFG)
+drop_point_cfgs = protobuf.Message(DROP_POINT_CFGS)
+edn_cfg = protobuf.Message(EDN_CFG)
+edn_cfgs = protobuf.Message(EDN_CFGS)
+edn_relic_cfg = protobuf.Message(EDN_RELIC_CFG)
+edn_relic_cfgs = protobuf.Message(EDN_RELIC_CFGS)
+edn_scene_cfg = protobuf.Message(EDN_SCENE_CFG)
+edn_scene_cfgs = protobuf.Message(EDN_SCENE_CFGS)
+elite_common_info_cfg = protobuf.Message(ELITE_COMMON_INFO_CFG)
+elite_common_info_cfgs = protobuf.Message(ELITE_COMMON_INFO_CFGS)
+elite_hell_info_cfg = protobuf.Message(ELITE_HELL_INFO_CFG)
+elite_hell_info_cfgs = protobuf.Message(ELITE_HELL_INFO_CFGS)
+elite_level_cfg = protobuf.Message(ELITE_LEVEL_CFG)
+elite_level_cfgs = protobuf.Message(ELITE_LEVEL_CFGS)
+elite_reward_cfg = protobuf.Message(ELITE_REWARD_CFG)
+elite_reward_cfgs = protobuf.Message(ELITE_REWARD_CFGS)
+equip_cfg = protobuf.Message(EQUIP_CFG)
+equip_cfgs = protobuf.Message(EQUIP_CFGS)
+equip_list_cfg = protobuf.Message(EQUIP_LIST_CFG)
+equip_list_cfgs = protobuf.Message(EQUIP_LIST_CFGS)
+equip_set_cfg = protobuf.Message(EQUIP_SET_CFG)
+equip_set_cfgs = protobuf.Message(EQUIP_SET_CFGS)
+equip_set_prop_cfg = protobuf.Message(EQUIP_SET_PROP_CFG)
+equip_set_prop_cfgs = protobuf.Message(EQUIP_SET_PROP_CFGS)
+errorcode_notify_cfg = protobuf.Message(ERRORCODE_NOTIFY_CFG)
+errorcode_notify_cfgs = protobuf.Message(ERRORCODE_NOTIFY_CFGS)
+fashion_appreciation_cfg = protobuf.Message(FASHION_APPRECIATION_CFG)
+fashion_appreciation_cfgs = protobuf.Message(FASHION_APPRECIATION_CFGS)
+fashion_cfg = protobuf.Message(FASHION_CFG)
+fashion_cfgs = protobuf.Message(FASHION_CFGS)
+fashion_cost_cfg = protobuf.Message(FASHION_COST_CFG)
+fashion_cost_cfgs = protobuf.Message(FASHION_COST_CFGS)
+fate_value_reward_cfg = protobuf.Message(FATE_VALUE_REWARD_CFG)
+fate_value_reward_cfgs = protobuf.Message(FATE_VALUE_REWARD_CFGS)
+fetter_cfg = protobuf.Message(FETTER_CFG)
+fetter_cfgs = protobuf.Message(FETTER_CFGS)
+fightcirme_reward_cfg = protobuf.Message(FIGHTCIRME_REWARD_CFG)
+fightcirme_reward_cfgs = protobuf.Message(FIGHTCIRME_REWARD_CFGS)
+fightcrime_cfg = protobuf.Message(FIGHTCRIME_CFG)
+fightcrime_cfgs = protobuf.Message(FIGHTCRIME_CFGS)
+fightcrime_monster_cfg = protobuf.Message(FIGHTCRIME_MONSTER_CFG)
+fightcrime_monster_cfgs = protobuf.Message(FIGHTCRIME_MONSTER_CFGS)
+formula_cfg = protobuf.Message(FORMULA_CFG)
+formula_cfgs = protobuf.Message(FORMULA_CFGS)
+friend_title_cfg = protobuf.Message(FRIEND_TITLE_CFG)
+friend_title_cfgs = protobuf.Message(FRIEND_TITLE_CFGS)
+func_type_weight_cfg = protobuf.Message(FUNC_TYPE_WEIGHT_CFG)
+func_type_weight_cfgs = protobuf.Message(FUNC_TYPE_WEIGHT_CFGS)
+gemstone_inlay_cfg = protobuf.Message(GEMSTONE_INLAY_CFG)
+gemstone_inlay_cfgs = protobuf.Message(GEMSTONE_INLAY_CFGS)
+gemstone_list_cfg = protobuf.Message(GEMSTONE_LIST_CFG)
+gemstone_list_cfgs = protobuf.Message(GEMSTONE_LIST_CFGS)
+gift_giving_cfg = protobuf.Message(GIFT_GIVING_CFG)
+gift_giving_cfgs = protobuf.Message(GIFT_GIVING_CFGS)
+global_param_cfg = protobuf.Message(GLOBAL_PARAM_CFG)
+global_param_cfgs = protobuf.Message(GLOBAL_PARAM_CFGS)
+grow_point_cfg = protobuf.Message(GROW_POINT_CFG)
+grow_point_cfgs = protobuf.Message(GROW_POINT_CFGS)
+guil_post_cfg = protobuf.Message(GUIL_POST_CFG)
+guil_post_cfgs = protobuf.Message(GUIL_POST_CFGS)
+guild_base_cfg = protobuf.Message(GUILD_BASE_CFG)
+guild_base_cfgs = protobuf.Message(GUILD_BASE_CFGS)
+guild_building_mission_cfg = protobuf.Message(GUILD_BUILDING_MISSION_CFG)
+guild_building_mission_cfgs = protobuf.Message(GUILD_BUILDING_MISSION_CFGS)
+guild_flag_cfg = protobuf.Message(GUILD_FLAG_CFG)
+guild_flag_cfgs = protobuf.Message(GUILD_FLAG_CFGS)
+guild_mission_base_cfg = protobuf.Message(GUILD_MISSION_BASE_CFG)
+guild_mission_base_cfgs = protobuf.Message(GUILD_MISSION_BASE_CFGS)
+guild_mission_cfg = protobuf.Message(GUILD_MISSION_CFG)
+guild_mission_cfgs = protobuf.Message(GUILD_MISSION_CFGS)
+guild_practice_group_cfg = protobuf.Message(GUILD_PRACTICE_GROUP_CFG)
+guild_practice_group_cfgs = protobuf.Message(GUILD_PRACTICE_GROUP_CFGS)
+guild_practice_group_cont_cfg = protobuf.Message(GUILD_PRACTICE_GROUP_CONT_CFG)
+guild_practice_group_cont_cfgs = protobuf.Message(GUILD_PRACTICE_GROUP_CONT_CFGS)
+independent_random_reward_cfg = protobuf.Message(INDEPENDENT_RANDOM_REWARD_CFG)
+independent_random_reward_cfgs = protobuf.Message(INDEPENDENT_RANDOM_REWARD_CFGS)
+inner_alchemy_cfg = protobuf.Message(INNER_ALCHEMY_CFG)
+inner_alchemy_cfgs = protobuf.Message(INNER_ALCHEMY_CFGS)
+inner_alchemy_group_cfg = protobuf.Message(INNER_ALCHEMY_GROUP_CFG)
+inner_alchemy_group_cfgs = protobuf.Message(INNER_ALCHEMY_GROUP_CFGS)
+item_cfg = protobuf.Message(ITEM_CFG)
+item_cfgs = protobuf.Message(ITEM_CFGS)
+jewelry_make_cfg = protobuf.Message(JEWELRY_MAKE_CFG)
+jewelry_make_cfgs = protobuf.Message(JEWELRY_MAKE_CFGS)
+jump_action_cfg = protobuf.Message(JUMP_ACTION_CFG)
+jump_action_cfgs = protobuf.Message(JUMP_ACTION_CFGS)
+jump_cfg = protobuf.Message(JUMP_CFG)
+jump_cfgs = protobuf.Message(JUMP_CFGS)
+language_cfg = protobuf.Message(LANGUAGE_CFG)
+language_cfgs = protobuf.Message(LANGUAGE_CFGS)
+level_exp_cfg = protobuf.Message(LEVEL_EXP_CFG)
+level_exp_cfgs = protobuf.Message(LEVEL_EXP_CFGS)
+level_package_cfg = protobuf.Message(LEVEL_PACKAGE_CFG)
+level_package_cfgs = protobuf.Message(LEVEL_PACKAGE_CFGS)
+magic_att_cfg = protobuf.Message(MAGIC_ATT_CFG)
+magic_att_cfgs = protobuf.Message(MAGIC_ATT_CFGS)
+magic_combination_cfg = protobuf.Message(MAGIC_COMBINATION_CFG)
+magic_combination_cfgs = protobuf.Message(MAGIC_COMBINATION_CFGS)
+magic_divine_cfg = protobuf.Message(MAGIC_DIVINE_CFG)
+magic_divine_cfgs = protobuf.Message(MAGIC_DIVINE_CFGS)
+magic_levelup_cfg = protobuf.Message(MAGIC_LEVELUP_CFG)
+magic_levelup_cfgs = protobuf.Message(MAGIC_LEVELUP_CFGS)
+magic_ostiole_cfg = protobuf.Message(MAGIC_OSTIOLE_CFG)
+magic_ostiole_cfgs = protobuf.Message(MAGIC_OSTIOLE_CFGS)
+magic_point_refine_cfg = protobuf.Message(MAGIC_POINT_REFINE_CFG)
+magic_point_refine_cfgs = protobuf.Message(MAGIC_POINT_REFINE_CFGS)
+magic_skill_cfg = protobuf.Message(MAGIC_SKILL_CFG)
+magic_skill_cfgs = protobuf.Message(MAGIC_SKILL_CFGS)
+magic_skill_layer_cfg = protobuf.Message(MAGIC_SKILL_LAYER_CFG)
+magic_skill_layer_cfgs = protobuf.Message(MAGIC_SKILL_LAYER_CFGS)
+magic_skill_uplevel_cfg = protobuf.Message(MAGIC_SKILL_UPLEVEL_CFG)
+magic_skill_uplevel_cfgs = protobuf.Message(MAGIC_SKILL_UPLEVEL_CFGS)
+mall_item_cfg = protobuf.Message(MALL_ITEM_CFG)
+mall_item_cfgs = protobuf.Message(MALL_ITEM_CFGS)
+map_signs_cfg = protobuf.Message(MAP_SIGNS_CFG)
+map_signs_cfgs = protobuf.Message(MAP_SIGNS_CFGS)
+material_item_cfg = protobuf.Message(MATERIAL_ITEM_CFG)
+material_item_cfgs = protobuf.Message(MATERIAL_ITEM_CFGS)
+medal_base_cfg = protobuf.Message(MEDAL_BASE_CFG)
+medal_base_cfgs = protobuf.Message(MEDAL_BASE_CFGS)
+medal_composite_addition_cfg = protobuf.Message(MEDAL_COMPOSITE_ADDITION_CFG)
+medal_composite_addition_cfgs = protobuf.Message(MEDAL_COMPOSITE_ADDITION_CFGS)
+medal_group_cfg = protobuf.Message(MEDAL_GROUP_CFG)
+medal_group_cfgs = protobuf.Message(MEDAL_GROUP_CFGS)
+medal_open_level_cfg = protobuf.Message(MEDAL_OPEN_LEVEL_CFG)
+medal_open_level_cfgs = protobuf.Message(MEDAL_OPEN_LEVEL_CFGS)
+medal_star_open_level_cfg = protobuf.Message(MEDAL_STAR_OPEN_LEVEL_CFG)
+medal_star_open_level_cfgs = protobuf.Message(MEDAL_STAR_OPEN_LEVEL_CFGS)
+minimap_cfg = protobuf.Message(MINIMAP_CFG)
+minimap_cfgs = protobuf.Message(MINIMAP_CFGS)
+mission_cfg = protobuf.Message(MISSION_CFG)
+mission_cfgs = protobuf.Message(MISSION_CFGS)
+mission_group_cfg = protobuf.Message(MISSION_GROUP_CFG)
+mission_group_cfgs = protobuf.Message(MISSION_GROUP_CFGS)
+monster_cfg = protobuf.Message(MONSTER_CFG)
+monster_cfgs = protobuf.Message(MONSTER_CFGS)
+monthcard_base_cfg = protobuf.Message(MONTHCARD_BASE_CFG)
+monthcard_base_cfgs = protobuf.Message(MONTHCARD_BASE_CFGS)
+mountequip_cfg = protobuf.Message(MOUNTEQUIP_CFG)
+mountequip_cfgs = protobuf.Message(MOUNTEQUIP_CFGS)
+npc_function_cfg = protobuf.Message(NPC_FUNCTION_CFG)
+npc_function_cfgs = protobuf.Message(NPC_FUNCTION_CFGS)
+npc_spawn_method_cfg = protobuf.Message(NPC_SPAWN_METHOD_CFG)
+npc_spawn_method_cfgs = protobuf.Message(NPC_SPAWN_METHOD_CFGS)
+open_rules_data_cfg = protobuf.Message(OPEN_RULES_DATA_CFG)
+open_rules_data_cfgs = protobuf.Message(OPEN_RULES_DATA_CFGS)
+partenr_experience_cfg = protobuf.Message(PARTENR_EXPERIENCE_CFG)
+partenr_experience_cfgs = protobuf.Message(PARTENR_EXPERIENCE_CFGS)
+partner_activation_cfg = protobuf.Message(PARTNER_ACTIVATION_CFG)
+partner_activation_cfgs = protobuf.Message(PARTNER_ACTIVATION_CFGS)
+partner_attribute_cfg = protobuf.Message(PARTNER_ATTRIBUTE_CFG)
+partner_attribute_cfgs = protobuf.Message(PARTNER_ATTRIBUTE_CFGS)
+partner_base_cfg = protobuf.Message(PARTNER_BASE_CFG)
+partner_base_cfgs = protobuf.Message(PARTNER_BASE_CFGS)
+partner_chip_cfg = protobuf.Message(PARTNER_CHIP_CFG)
+partner_chip_cfgs = protobuf.Message(PARTNER_CHIP_CFGS)
+partner_currency_cfg = protobuf.Message(PARTNER_CURRENCY_CFG)
+partner_currency_cfgs = protobuf.Message(PARTNER_CURRENCY_CFGS)
+partner_equiphecheng_cfg = protobuf.Message(PARTNER_EQUIPHECHENG_CFG)
+partner_equiphecheng_cfgs = protobuf.Message(PARTNER_EQUIPHECHENG_CFGS)
+partner_formation_cfg = protobuf.Message(PARTNER_FORMATION_CFG)
+partner_formation_cfgs = protobuf.Message(PARTNER_FORMATION_CFGS)
+partner_impre_levelup_cfg = protobuf.Message(PARTNER_IMPRE_LEVELUP_CFG)
+partner_impre_levelup_cfgs = protobuf.Message(PARTNER_IMPRE_LEVELUP_CFGS)
+partner_impression_cfg = protobuf.Message(PARTNER_IMPRESSION_CFG)
+partner_impression_cfgs = protobuf.Message(PARTNER_IMPRESSION_CFGS)
+partner_item_compound_cfg = protobuf.Message(PARTNER_ITEM_COMPOUND_CFG)
+partner_item_compound_cfgs = protobuf.Message(PARTNER_ITEM_COMPOUND_CFGS)
+partner_mood_cfg = protobuf.Message(PARTNER_MOOD_CFG)
+partner_mood_cfgs = protobuf.Message(PARTNER_MOOD_CFGS)
+partner_multiple_cfg = protobuf.Message(PARTNER_MULTIPLE_CFG)
+partner_multiple_cfgs = protobuf.Message(PARTNER_MULTIPLE_CFGS)
+partner_passiveskill_cfg = protobuf.Message(PARTNER_PASSIVESKILL_CFG)
+partner_passiveskill_cfgs = protobuf.Message(PARTNER_PASSIVESKILL_CFGS)
+partner_star_cfg = protobuf.Message(PARTNER_STAR_CFG)
+partner_star_cfgs = protobuf.Message(PARTNER_STAR_CFGS)
+partner_study_cfg = protobuf.Message(PARTNER_STUDY_CFG)
+partner_study_cfgs = protobuf.Message(PARTNER_STUDY_CFGS)
+playscg_cfg = protobuf.Message(PLAYSCG_CFG)
+playscg_cfgs = protobuf.Message(PLAYSCG_CFGS)
+plot_data_cfg = protobuf.Message(PLOT_DATA_CFG)
+plot_data_cfgs = protobuf.Message(PLOT_DATA_CFGS)
+prop_type_cfg = protobuf.Message(PROP_TYPE_CFG)
+prop_type_cfgs = protobuf.Message(PROP_TYPE_CFGS)
+randomman_cfg = protobuf.Message(RANDOMMAN_CFG)
+randomman_cfgs = protobuf.Message(RANDOMMAN_CFGS)
+randomwoman_cfg = protobuf.Message(RANDOMWOMAN_CFG)
+randomwoman_cfgs = protobuf.Message(RANDOMWOMAN_CFGS)
+rank_field_cfg = protobuf.Message(RANK_FIELD_CFG)
+rank_field_cfgs = protobuf.Message(RANK_FIELD_CFGS)
+rank_function_cfg = protobuf.Message(RANK_FUNCTION_CFG)
+rank_function_cfgs = protobuf.Message(RANK_FUNCTION_CFGS)
+res_path_cfg = protobuf.Message(RES_PATH_CFG)
+res_path_cfgs = protobuf.Message(RES_PATH_CFGS)
+resource_compund_cfg = protobuf.Message(RESOURCE_COMPUND_CFG)
+resource_compund_cfgs = protobuf.Message(RESOURCE_COMPUND_CFGS)
+revive_show_cfg = protobuf.Message(REVIVE_SHOW_CFG)
+revive_show_cfgs = protobuf.Message(REVIVE_SHOW_CFGS)
+reward_cfg = protobuf.Message(REWARD_CFG)
+reward_cfgs = protobuf.Message(REWARD_CFGS)
+role_parts_cfg = protobuf.Message(ROLE_PARTS_CFG)
+role_parts_cfgs = protobuf.Message(ROLE_PARTS_CFGS)
+route_mark_cfg = protobuf.Message(ROUTE_MARK_CFG)
+route_mark_cfgs = protobuf.Message(ROUTE_MARK_CFGS)
+rune_decompose_cfg = protobuf.Message(RUNE_DECOMPOSE_CFG)
+rune_decompose_cfgs = protobuf.Message(RUNE_DECOMPOSE_CFGS)
+rune_make_cfg = protobuf.Message(RUNE_MAKE_CFG)
+rune_make_cfgs = protobuf.Message(RUNE_MAKE_CFGS)
+rune_make_list_cfg = protobuf.Message(RUNE_MAKE_LIST_CFG)
+rune_make_list_cfgs = protobuf.Message(RUNE_MAKE_LIST_CFGS)
+rune_prop_group_cfg = protobuf.Message(RUNE_PROP_GROUP_CFG)
+rune_prop_group_cfgs = protobuf.Message(RUNE_PROP_GROUP_CFGS)
+rune_prop_refine_cfg = protobuf.Message(RUNE_PROP_REFINE_CFG)
+rune_prop_refine_cfgs = protobuf.Message(RUNE_PROP_REFINE_CFGS)
+rune_quality_cfg = protobuf.Message(RUNE_QUALITY_CFG)
+rune_quality_cfgs = protobuf.Message(RUNE_QUALITY_CFGS)
+rune_skill_group_cfg = protobuf.Message(RUNE_SKILL_GROUP_CFG)
+rune_skill_group_cfgs = protobuf.Message(RUNE_SKILL_GROUP_CFGS)
+rune_skill_refine_cfg = protobuf.Message(RUNE_SKILL_REFINE_CFG)
+rune_skill_refine_cfgs = protobuf.Message(RUNE_SKILL_REFINE_CFGS)
+scene_area_cfg = protobuf.Message(SCENE_AREA_CFG)
+scene_area_cfgs = protobuf.Message(SCENE_AREA_CFGS)
+scene_cfg = protobuf.Message(SCENE_CFG)
+scene_cfgs = protobuf.Message(SCENE_CFGS)
+scene_door_cfg = protobuf.Message(SCENE_DOOR_CFG)
+scene_door_cfgs = protobuf.Message(SCENE_DOOR_CFGS)
+scene_event_cfg = protobuf.Message(SCENE_EVENT_CFG)
+scene_event_cfgs = protobuf.Message(SCENE_EVENT_CFGS)
+scene_function_cfg = protobuf.Message(SCENE_FUNCTION_CFG)
+scene_function_cfgs = protobuf.Message(SCENE_FUNCTION_CFGS)
+scene_organ_cfg = protobuf.Message(SCENE_ORGAN_CFG)
+scene_organ_cfgs = protobuf.Message(SCENE_ORGAN_CFGS)
+scene_portal_cfg = protobuf.Message(SCENE_PORTAL_CFG)
+scene_portal_cfgs = protobuf.Message(SCENE_PORTAL_CFGS)
+scene_trigger_cfg = protobuf.Message(SCENE_TRIGGER_CFG)
+scene_trigger_cfgs = protobuf.Message(SCENE_TRIGGER_CFGS)
+service_cfg = protobuf.Message(SERVICE_CFG)
+service_cfgs = protobuf.Message(SERVICE_CFGS)
+shop_type_cfg = protobuf.Message(SHOP_TYPE_CFG)
+shop_type_cfgs = protobuf.Message(SHOP_TYPE_CFGS)
+signup_accumulation_cfg = protobuf.Message(SIGNUP_ACCUMULATION_CFG)
+signup_accumulation_cfgs = protobuf.Message(SIGNUP_ACCUMULATION_CFGS)
+signup_base_cfg = protobuf.Message(SIGNUP_BASE_CFG)
+signup_base_cfgs = protobuf.Message(SIGNUP_BASE_CFGS)
+skill_cfg = protobuf.Message(SKILL_CFG)
+skill_cfgs = protobuf.Message(SKILL_CFGS)
+skill_condition_cfg = protobuf.Message(SKILL_CONDITION_CFG)
+skill_condition_cfgs = protobuf.Message(SKILL_CONDITION_CFGS)
+skill_id_cfg = protobuf.Message(SKILL_ID_CFG)
+skill_id_cfgs = protobuf.Message(SKILL_ID_CFGS)
+skill_summoned_cfg = protobuf.Message(SKILL_SUMMONED_CFG)
+skill_summoned_cfgs = protobuf.Message(SKILL_SUMMONED_CFGS)
+skill_summoned_npc_cfg = protobuf.Message(SKILL_SUMMONED_NPC_CFG)
+skill_summoned_npc_cfgs = protobuf.Message(SKILL_SUMMONED_NPC_CFGS)
+soul_base_attr_cfg = protobuf.Message(SOUL_BASE_ATTR_CFG)
+soul_base_attr_cfgs = protobuf.Message(SOUL_BASE_ATTR_CFGS)
+soul_level_up_cfg = protobuf.Message(SOUL_LEVEL_UP_CFG)
+soul_level_up_cfgs = protobuf.Message(SOUL_LEVEL_UP_CFGS)
+soul_magic_attr_cfg = protobuf.Message(SOUL_MAGIC_ATTR_CFG)
+soul_magic_attr_cfgs = protobuf.Message(SOUL_MAGIC_ATTR_CFGS)
+soul_magic_rock_cfg = protobuf.Message(SOUL_MAGIC_ROCK_CFG)
+soul_magic_rock_cfgs = protobuf.Message(SOUL_MAGIC_ROCK_CFGS)
+soul_refine_rock_cfg = protobuf.Message(SOUL_REFINE_ROCK_CFG)
+soul_refine_rock_cfgs = protobuf.Message(SOUL_REFINE_ROCK_CFGS)
+soul_suit_attr_cfg = protobuf.Message(SOUL_SUIT_ATTR_CFG)
+soul_suit_attr_cfgs = protobuf.Message(SOUL_SUIT_ATTR_CFGS)
+starspirit_dungoen_cfg = protobuf.Message(STARSPIRIT_DUNGOEN_CFG)
+starspirit_dungoen_cfgs = protobuf.Message(STARSPIRIT_DUNGOEN_CFGS)
+state_cfg = protobuf.Message(STATE_CFG)
+state_cfgs = protobuf.Message(STATE_CFGS)
+strength_convert_cfg = protobuf.Message(STRENGTH_CONVERT_CFG)
+strength_convert_cfgs = protobuf.Message(STRENGTH_CONVERT_CFGS)
+strengthen_cfg = protobuf.Message(STRENGTHEN_CFG)
+strengthen_cfgs = protobuf.Message(STRENGTHEN_CFGS)
+subsys_cfg = protobuf.Message(SUBSYS_CFG)
+subsys_cfgs = protobuf.Message(SUBSYS_CFGS)
+suppress_cfg = protobuf.Message(SUPPRESS_CFG)
+suppress_cfgs = protobuf.Message(SUPPRESS_CFGS)
+suppress_group_cfg = protobuf.Message(SUPPRESS_GROUP_CFG)
+suppress_group_cfgs = protobuf.Message(SUPPRESS_GROUP_CFGS)
+test_cfg = protobuf.Message(TEST_CFG)
+test_cfgs = protobuf.Message(TEST_CFGS)
+tips_cfg = protobuf.Message(TIPS_CFG)
+tips_cfgs = protobuf.Message(TIPS_CFGS)
+tower_base_cfg = protobuf.Message(TOWER_BASE_CFG)
+tower_base_cfgs = protobuf.Message(TOWER_BASE_CFGS)
+trade_filter_rules_cfg = protobuf.Message(TRADE_FILTER_RULES_CFG)
+trade_filter_rules_cfgs = protobuf.Message(TRADE_FILTER_RULES_CFGS)
+trade_sort_rules_cfg = protobuf.Message(TRADE_SORT_RULES_CFG)
+trade_sort_rules_cfgs = protobuf.Message(TRADE_SORT_RULES_CFGS)
+trade_sub_tabs_cfg = protobuf.Message(TRADE_SUB_TABS_CFG)
+trade_sub_tabs_cfgs = protobuf.Message(TRADE_SUB_TABS_CFGS)
+trade_top_tabs_cfg = protobuf.Message(TRADE_TOP_TABS_CFG)
+trade_top_tabs_cfgs = protobuf.Message(TRADE_TOP_TABS_CFGS)
+treasure_rooms_cfg = protobuf.Message(TREASURE_ROOMS_CFG)
+treasure_rooms_cfgs = protobuf.Message(TREASURE_ROOMS_CFGS)
+trigger_action_cfg = protobuf.Message(TRIGGER_ACTION_CFG)
+trigger_action_cfgs = protobuf.Message(TRIGGER_ACTION_CFGS)
+trigger_condition_cfg = protobuf.Message(TRIGGER_CONDITION_CFG)
+trigger_condition_cfgs = protobuf.Message(TRIGGER_CONDITION_CFGS)
+trigger_event_cfg = protobuf.Message(TRIGGER_EVENT_CFG)
+trigger_event_cfgs = protobuf.Message(TRIGGER_EVENT_CFGS)
+trigger_variable_cfg = protobuf.Message(TRIGGER_VARIABLE_CFG)
+trigger_variable_cfgs = protobuf.Message(TRIGGER_VARIABLE_CFGS)
+ui_contribution_cfg = protobuf.Message(UI_CONTRIBUTION_CFG)
+ui_contribution_cfgs = protobuf.Message(UI_CONTRIBUTION_CFGS)
+weight_random_reward_cfg = protobuf.Message(WEIGHT_RANDOM_REWARD_CFG)
+weight_random_reward_cfgs = protobuf.Message(WEIGHT_RANDOM_REWARD_CFGS)
+wizard_base_cfg = protobuf.Message(WIZARD_BASE_CFG)
+wizard_base_cfgs = protobuf.Message(WIZARD_BASE_CFGS)
+wizard_level_cfg = protobuf.Message(WIZARD_LEVEL_CFG)
+wizard_level_cfgs = protobuf.Message(WIZARD_LEVEL_CFGS)
+wizard_task_cfg = protobuf.Message(WIZARD_TASK_CFG)
+wizard_task_cfgs = protobuf.Message(WIZARD_TASK_CFGS)
+world_map_cfg = protobuf.Message(WORLD_MAP_CFG)
+world_map_cfgs = protobuf.Message(WORLD_MAP_CFGS)
+zone_location_cfg = protobuf.Message(ZONE_LOCATION_CFG)
+zone_location_cfgs = protobuf.Message(ZONE_LOCATION_CFGS)
+
diff --git a/script/test/example/vm.txt b/script/test/example/vm.txt
new file mode 100644
index 00000000..f2f4144d
--- /dev/null
+++ b/script/test/example/vm.txt
@@ -0,0 +1,1544 @@
+local env = require 'core.env'
+local library = require 'core.library'
+local createValue = require 'core.value'
+
+local DefaultSource = { start = 0, finish = 0 }
+local GlobalChild
+
+-- 根据赋值顺序决定遍历顺序的表
+local function orderTable()
+ local t = {}
+ local list = {}
+ local mark = {}
+ return setmetatable(t, {
+ __newindex = function (self, k, v)
+ if not mark[k] then
+ mark[k] = true
+ list[#list+1] = k
+ end
+ rawset(self, k, v)
+ end,
+ __pairs = function (self)
+ local i = 0
+ return function ()
+ while true do
+ i = i + 1
+ local k = list[i]
+ if not k then
+ return nil, nil
+ end
+ local v = t[k]
+ if v ~= nil then
+ return k, v
+ end
+ end
+ end
+ end,
+ })
+end
+
+local function readOnly(t)
+ return setmetatable({}, {
+ __index = function (self, k)
+ if k == nil then
+ return nil
+ end
+ local v = t[k]
+ if type(v) == 'table' then
+ v = readOnly(v)
+ end
+ self[k] = v
+ return v
+ end,
+ __len = function (self)
+ return #t
+ end,
+ __pairs = function (self)
+ local keys = {}
+ local mark = {}
+ for k in next, self do
+ keys[#keys+1] = k
+ end
+ for k in pairs(t) do
+ if not mark[k] then
+ mark[k] = true
+ keys[#keys+1] = k
+ end
+ end
+ local i = 0
+ return function ()
+ i = i + 1
+ local k = keys[i]
+ return k, self[k]
+ end
+ end,
+ __source = t,
+ })
+end
+
+local mt = {}
+mt.__index = mt
+
+function mt:createDummyVar(source, value)
+ local loc = {
+ type = 'local',
+ key = '',
+ source = source or DefaultSource,
+ }
+ self:setValue(loc, value, source)
+ return loc
+end
+
+function mt:createLocal(key, source, value)
+ local loc = {
+ type = 'local',
+ key = key,
+ source = source or DefaultSource,
+ close = self.scope.block.finish,
+ }
+
+ if source then
+ source.isLocal = true
+ end
+
+ local shadow = self.scope.locals[key]
+ if shadow then
+ shadow.close = source and (source.start-1)
+ local group
+ if shadow.shadow then
+ group = shadow.shadow
+ else
+ group = { shadow }
+ shadow.shadow = group
+ end
+ group[#group+1] = loc
+ loc.shadow = group
+ end
+
+ self.scope.locals[key] = loc
+ self.results.locals[#self.results.locals+1] = loc
+
+ self:addInfo(loc, 'local', source)
+ self:setValue(loc, value, source)
+ return loc
+end
+
+function mt:createArg(key, source, value)
+ local loc = self:createLocal(key, source, value)
+ if source then
+ source.isArg = true
+ end
+ return loc
+end
+
+function mt:scopePush(block)
+ if not block.start then
+ error('Scope push without start!')
+ end
+ self.scope:push()
+ self.scope.block = block
+end
+
+function mt:scopePop()
+ self.scope:pop()
+end
+
+function mt:addInfo(obj, type, source)
+ if source and not source.start then
+ error('Miss start: ' .. table.dump(source))
+ end
+ obj[#obj+1] = {
+ type = type,
+ source = source or DefaultSource,
+ }
+ if source then
+ source.uri = self.uri
+ local other = self.results.sources[source]
+ if other then
+ if other.type == 'multi-source' then
+ other[#other+1] = obj
+ else
+ other = {
+ type = 'multi-source',
+ [1] = other,
+ [2] = obj,
+ }
+ end
+ else
+ self.results.sources[source] = obj
+ end
+ if type == 'set' or type == 'return' then
+ if not obj.declarat then
+ obj.declarat = source
+ end
+ end
+ end
+ return obj
+end
+
+function mt:createDots(index, source)
+ local dots = {
+ type = 'dots',
+ source = source or DefaultSource,
+ func = self:getCurrentFunction(),
+ index = index,
+ }
+ self.chunk.dots = dots
+ return dots
+end
+
+function mt:buildTable(source)
+ local tbl = self:createValue('table', source)
+ if not source then
+ return tbl
+ end
+ local n = 0
+ for index, obj in ipairs(source) do
+ if obj.type == 'pair' then
+ local value = self:getExp(obj[2])
+ local key = obj[1]
+ if key.index then
+ local index = self:getIndex(key)
+ local field = self:createField(tbl, index, key)
+ if value.type == 'list' then
+ self:setValue(field, value[1], key)
+ else
+ self:setValue(field, value, key)
+ end
+ else
+ if key.type == 'name' then
+ local field = self:createField(tbl, key[1], key)
+ self.results.indexs[#self.results.indexs+1] = field
+ key.isIndex = true
+ if value.type == 'list' then
+ self:setValue(field, value[1], key)
+ else
+ self:setValue(field, value, key)
+ end
+ end
+ end
+ else
+ local value = self:getExp(obj)
+ if value.type == 'list' then
+ if index == #source then
+ for i, v in ipairs(value) do
+ local field = self:createField(tbl, n + i)
+ self:setValue(field, v)
+ end
+ else
+ n = n + 1
+ local field = self:createField(tbl, n)
+ self:setValue(field, value[1])
+ end
+ else
+ n = n + 1
+ local field = self:createField(tbl, n)
+ self:setValue(field, value)
+ end
+ -- 处理写了一半的 key = value,把name类的数组元素视为哈希键
+ if obj.type == 'name' then
+ obj.isIndex = true
+ end
+ end
+ end
+ return tbl
+end
+
+function mt:mergeValue(a, b, mark)
+ if a == b then
+ return
+ end
+ if not mark then
+ mark = {}
+ end
+ if mark[a] or mark[b] then
+ return
+ end
+ if a.uri ~= self.uri then
+ return
+ end
+ mark[a] = true
+ mark[b] = true
+ self:mergeChild(a, b, mark)
+ for k in pairs(a) do
+ a[k] = nil
+ end
+ for k, v in pairs(b) do
+ a[k] = v
+ end
+end
+
+function mt:mergeField(a, b, mark)
+ if a == b then
+ return
+ end
+ if not mark then
+ mark = {}
+ end
+ for i, info in ipairs(a) do
+ a[i] = nil
+ b[#b+1] = info
+ end
+ for i, v in ipairs(b) do
+ a[i] = v
+ end
+ self:mergeValue(a.value, b.value, mark)
+end
+
+function mt:mergeChild(a, b, mark)
+ if a == b then
+ return
+ end
+ if not a.child and not b.child then
+ return
+ end
+ if not mark then
+ mark = {}
+ end
+ if a.uri ~= self.uri then
+ return
+ end
+ if b.uri == self.uri then
+ local child = a.child or orderTable()
+ local other = b.child or orderTable()
+ a.child = nil
+ b.child = nil
+ for k, v in pairs(other) do
+ if child[k] then
+ self:mergeField(child[k], v, mark)
+ else
+ child[k] = v
+ end
+ end
+ a.child = child
+ b.child = child
+ else
+ local child = a.child or orderTable()
+ local other = b.child
+ if not other then
+ return
+ end
+ a.child = nil
+ for k, v in pairs(other) do
+ child[k] = v
+ end
+ a.child = child
+ end
+end
+
+function mt:setValue(var, value, source)
+ if value and value.type == 'list' then
+ error('Cant set value list')
+ end
+ value = value or self:createValue('any', source)
+ if source and source.start then
+ self:addInfo(var, 'set', source)
+ self:addInfo(value, 'set', source)
+ end
+ if var.value then
+ if value.type == 'any' then
+ self:mergeChild(var.value, value)
+ elseif value.type == 'nil' then
+ self:mergeValue(var.value, value)
+ elseif var.value.uri == self.uri then
+ var.value = value
+ end
+ value = var.value
+ else
+ var.value = value
+ end
+ return value
+end
+
+function mt:getValue(var)
+ if not var.value then
+ var.value = self:createValue('any')
+ end
+ return var.value
+end
+
+function mt:createField(pValue, name, source)
+ if pValue.type == 'local' or pValue.type == 'field' then
+ error('Only value can create field')
+ end
+ local field = {
+ type = 'field',
+ key = name,
+ source = source or DefaultSource,
+ }
+
+ if not pValue.child then
+ pValue.child = orderTable()
+ end
+ pValue.child[name] = field
+ self:inference(pValue, 'table')
+ return field
+end
+
+function mt:getField(pValue, name, source)
+ local field = (pValue.child and pValue.child[name])
+ if not field and pValue.ENV then
+ if self.lsp then
+ field = self.lsp:getGlobal(name)
+ end
+ end
+ if not field then
+ field = self:createField(pValue, name, source)
+ end
+ return field
+end
+
+function mt:isGlobal(field)
+ if field.type ~= 'field' then
+ return false
+ end
+ if field.parent.value.ENV then
+ return true
+ else
+ return false
+ end
+end
+
+function mt:buildFunction(exp, object)
+ local func = self:createValue('function', exp)
+ func.args = {}
+ func.argValues = {}
+
+ if not exp then
+ return func
+ end
+
+ self:scopePush(exp)
+ self.chunk:push()
+ self.chunk:cut 'dots'
+ self.chunk:cut 'labels'
+ self.chunk.func = func
+
+ if object then
+ local var = self:createArg('self', object.source, self:getValue(object))
+ var.hide = true
+ func.args[1] = var
+ end
+
+ local stop
+ self:forList(exp.arg, function (arg)
+ if stop then
+ return
+ end
+ if arg.type == 'name' then
+ local var = self:createArg(arg[1], arg)
+ arg.isArg = true
+ func.args[#func.args+1] = var
+ func.argValues[#func.args] = self:getValue(var)
+ elseif arg.type == '...' then
+ self:createDots(#func.args+1, arg)
+ for _ = 1, 10 do
+ func.argValues[#func.argValues+1] = self:createValue('any', arg)
+ end
+ stop = true
+ end
+ end)
+
+ self:doActions(exp)
+
+ self.results.funcs[#self.results.funcs+1] = func
+
+ self.chunk:pop()
+ self:scopePop()
+
+ return func
+end
+
+function mt:forList(list, callback)
+ if not list then
+ return
+ end
+ if list.type == 'list' then
+ for i = 1, #list do
+ callback(list[i])
+ end
+ else
+ callback(list)
+ end
+end
+
+function mt:countList(list)
+ if not list then
+ return 0
+ end
+ if list.type == 'list' then
+ return #list
+ end
+ return 1
+end
+
+function mt:updateFunctionArgs(func)
+ if not func.argValues then
+ return
+ end
+ if not func.args then
+ return
+ end
+
+ local values = func.argValues
+ for i, var in ipairs(func.args) do
+ if var.type == 'dots' then
+ local list = {
+ type = 'list',
+ }
+ for n = i, #values do
+ list[n-i+1] = values[n]
+ end
+ self:setValue(var, list)
+ break
+ else
+ self:setValue(var, values[i])
+ end
+ end
+end
+
+function mt:setFunctionArg(func, values)
+ if func.uri ~= self.uri then
+ return
+ end
+ if not func.argValues then
+ func.argValues = {}
+ end
+ for i = 1, #values do
+ if not func.argValues[i] then
+ func.argValues[i] = values[i]
+ end
+ self:inference(values[i], func.argValues[i].type)
+ self:inference(func.argValues[i], values[i].type)
+ end
+
+ self:updateFunctionArgs(func)
+end
+
+function mt:getFunctionArg(func, i)
+ if not func.argValues then
+ func.argValues = {}
+ end
+ if not func.argValues[i] then
+ for n = #func.argValues+1, i do
+ func.argValues[n] = self:createValue('any')
+ end
+ end
+ return func.argValues[i]
+end
+
+function mt:checkMetaIndex(value, meta)
+ local index = self:getField(meta, '__index')
+ if not index then
+ return
+ end
+ local indexValue = self:getValue(index)
+ -- TODO 支持function
+ self:mergeChild(value, indexValue)
+end
+
+function mt:callSetMetaTable(func, values)
+ if not values[1] then
+ values[1] = self:createValue('any')
+ end
+ if not values[2] then
+ values[2] = self:createValue('any')
+ end
+ self:setFunctionReturn(func, 1, values[1])
+
+ values[1].metatable = values[2]
+ -- 检查 __index
+ self:checkMetaIndex(values[1], values[2])
+end
+
+function mt:getRequire(strValue, destVM)
+ -- 取出对方的主函数
+ local main = destVM.results.main
+ -- 获取主函数返回值,注意不能修改对方的环境
+ local mainValue
+ if main.returns then
+ mainValue = readOnly(main.returns[1])
+ else
+ mainValue = self:createValue('boolean', nil, true)
+ mainValue.uri = destVM.uri
+ end
+
+ return mainValue
+end
+
+function mt:getLoadFile(strValue, destVM)
+ -- 取出对方的主函数
+ local main = destVM.results.main
+ -- loadfile 的返回值就是对方的主函数
+ local mainValue = readOnly(main)
+
+ return mainValue
+end
+
+function mt:tryRequireOne(strValue, mode)
+ if not self.lsp or not self.lsp.workspace then
+ return nil
+ end
+ local str = strValue.value
+ if type(str) == 'string' then
+ -- 支持 require 'xxx' 的转到定义
+ local strSource = strValue.source
+ self.results.sources[strSource] = strValue
+ strValue.isRequire = true
+
+ local uri
+ if mode == 'require' then
+ uri = self.lsp.workspace:searchPath(self.uri, str)
+ elseif mode == 'loadfile' then
+ uri = self.lsp.workspace:loadPath(self.uri, str)
+ elseif mode == 'dofile' then
+ uri = self.lsp.workspace:loadPath(self.uri, str)
+ end
+ if not uri then
+ return nil
+ end
+
+ strValue.uri = uri
+ -- 如果取不到VM(不编译),则做个标记,之后再取一次
+ local destVM = self.lsp:getVM(uri)
+ self.lsp:compileChain(self.uri, uri)
+ if destVM then
+ if mode == 'require' then
+ return self:getRequire(strValue, destVM)
+ elseif mode == 'loadfile' then
+ return self:getLoadFile(strValue, destVM)
+ elseif mode == 'dofile' then
+ return self:getRequire(strValue, destVM)
+ end
+ end
+ end
+ return nil
+end
+
+function mt:callRequire(func, values)
+ if not values[1] then
+ values[1] = self:createValue('any')
+ end
+ local str = values[1].value
+ if type(str) ~= 'string' then
+ return
+ end
+ local lib = library.library[str]
+ if lib then
+ local value = self:getLibValue(lib, 'library')
+ self:setFunctionReturn(func, 1, value)
+ return
+ else
+ local requireValue = self:tryRequireOne(values[1], 'require')
+ if not requireValue then
+ requireValue = self:createValue('boolean')
+ requireValue.isRequire = true
+ end
+ self:setFunctionReturn(func, 1, requireValue)
+ end
+end
+
+function mt:callLoadFile(func, values)
+ if not values[1] then
+ values[1] = self:createValue('any')
+ end
+ local str = values[1].value
+ if type(str) ~= 'string' then
+ return
+ end
+ local requireValue = self:tryRequireOne(values[1], 'loadfile')
+ if not requireValue then
+ requireValue = self:createValue('any')
+ requireValue.isRequire = true
+ end
+ self:setFunctionReturn(func, 1, requireValue)
+end
+
+function mt:callDoFile(func, values)
+ if not values[1] then
+ values[1] = self:createValue('any')
+ end
+ local str = values[1].value
+ if type(str) ~= 'string' then
+ return
+ end
+ local requireValue = self:tryRequireOne(values[1], 'dofile')
+ if not requireValue then
+ requireValue = self:createValue('any')
+ requireValue.isRequire = true
+ end
+ self:setFunctionReturn(func, 1, requireValue)
+end
+
+function mt:call(func, values)
+ self:inference(func, 'function')
+ local lib = func.lib
+ if lib then
+ if lib.args then
+ for i, arg in ipairs(lib.args) do
+ if arg.type == '...' then
+ self:inference(self:getFunctionArg(func, i), 'any')
+ else
+ self:inference(self:getFunctionArg(func, i), arg.type or 'any')
+ end
+ end
+ end
+ if lib.returns then
+ for i, rtn in ipairs(lib.returns) do
+ if rtn.type == '...' then
+ self:inference(self:getFunctionReturns(func, i), 'any')
+ else
+ self:inference(self:getFunctionReturns(func, i), rtn.type or 'any')
+ end
+ end
+ end
+ if lib.special then
+ if lib.special == 'setmetatable' then
+ self:callSetMetaTable(func, values)
+ elseif lib.special == 'require' then
+ self:callRequire(func, values)
+ elseif lib.special == 'loadfile' then
+ self:callLoadFile(func, values)
+ elseif lib.special == 'dofile' then
+ self:callDoFile(func, values)
+ end
+ end
+ end
+
+ self:setFunctionArg(func, values)
+
+ return self:getFunctionReturns(func)
+end
+
+function mt:getCurrentFunction()
+ return self.chunk.func
+end
+
+function mt:mergeFunctionReturn(func, index, value)
+ if not func.returns[index] then
+ func.returns[index] = value
+ return
+ end
+ if value.type == 'nil' then
+ return
+ end
+ if value == 'any' and func.returns[index] ~= 'nil' then
+ return
+ end
+ func.returns[index] = value
+end
+
+function mt:setFunctionReturn(func, index, value)
+ func:set('hasReturn', true)
+ if not func.returns then
+ func.returns = {
+ type = 'list',
+ }
+ end
+ if value then
+ if value.type == 'list' then
+ for i, v in ipairs(value) do
+ self:mergeFunctionReturn(func, index+i-1, v)
+ end
+ else
+ self:mergeFunctionReturn(func, index, value)
+ end
+ else
+ self:mergeFunctionReturn(func, index, self:createValue('any'))
+ end
+end
+
+function mt:getFunctionReturns(func, i)
+ if func.maxReturns and i and func.maxReturns < i then
+ return self:createValue('nil')
+ end
+ if not func.returns then
+ func.returns = {
+ type = 'list',
+ }
+ end
+ if i then
+ if not func.returns[i] then
+ for n = #func.returns+1, i do
+ func.returns[n] = self:createValue('any')
+ end
+ end
+ return func.returns[i]
+ else
+ return func.returns
+ end
+end
+
+function mt:inference(value, type)
+ if type == '...' then
+ error('Value type cant be ...')
+ end
+ if value.type == 'any' and type ~= 'nil' then
+ value.type = type
+ end
+end
+
+function mt:createValue(tp, source, v)
+ local value = createValue(tp, self.uri, source, v)
+ local lib = library.object[tp]
+ if lib then
+ self:getLibChild(value, lib, 'object')
+ end
+ return value
+end
+
+function mt:getLibChild(value, lib, parentType)
+ if lib.child then
+ if self.libraryChild[lib] then
+ value.child = self.libraryChild[lib]
+ return
+ end
+ self.libraryChild[lib] = {}
+ for fName, fLib in pairs(lib.child) do
+ local fField = self:createField(value, fName)
+ local fValue = self:getLibValue(fLib, parentType)
+ self:setValue(fField, fValue)
+ end
+ if value.child then
+ for k, v in pairs(value.child) do
+ self.libraryChild[lib][k] = v
+ end
+ end
+ value.child = self.libraryChild[lib]
+ end
+end
+
+function mt:getLibValue(lib, parentType, v)
+ if self.libraryValue[lib] then
+ return self.libraryValue[lib]
+ end
+ local tp = lib.type
+ local value
+ if tp == 'table' then
+ value = self:createValue('table')
+ elseif tp == 'function' then
+ value = self:createValue('function')
+ if lib.returns then
+ local dots
+ for i, rtn in ipairs(lib.returns) do
+ self:setFunctionReturn(value, i, self:getLibValue(rtn, parentType))
+ if rtn.type == '...' then
+ dots = true
+ end
+ end
+ if not dots then
+ value.maxReturns = #lib.returns
+ end
+ else
+ value.maxReturns = 0
+ end
+ if lib.args then
+ local values = {}
+ for i, arg in ipairs(lib.args) do
+ values[i] = self:getLibValue(arg, parentType) or self:createValue('any')
+ end
+ self:setFunctionArg(value, values)
+ end
+ elseif tp == 'string' then
+ value = self:createValue('string', nil, v or lib.value)
+ elseif tp == 'boolean' then
+ value = self:createValue('boolean', nil, v or lib.value)
+ elseif tp == 'number' then
+ value = self:createValue('number', nil, v or lib.value)
+ elseif tp == 'integer' then
+ value = self:createValue('integer', nil, v or lib.value)
+ elseif tp == 'nil' then
+ value = self:createValue('nil')
+ elseif tp == '...' then
+ value = self:createValue('any')
+ else
+ value = self:createValue(tp or 'any')
+ end
+ self.libraryValue[lib] = value
+ value.lib = lib
+ value.parentType = parentType
+
+ self:getLibChild(value, lib, parentType)
+
+ return value
+end
+
+function mt:getName(name, source)
+ local loc = self.scope.locals[name]
+ if loc then
+ return loc
+ end
+ local ENV = self.scope.locals._ENV
+ local global = self:getField(self:getValue(ENV), name, source)
+ global.parent = ENV
+ return global
+end
+
+function mt:getIndex(obj)
+ local tp = obj.type
+ if tp == 'name' then
+ local var = self:getName(obj[1])
+ local value = self:getValue(var)
+ self:addInfo(var, 'get', obj)
+ return value
+ elseif (tp == 'string' or tp == 'number' or tp == 'boolean') then
+ return obj[1]
+ else
+ return self:getExp(obj)
+ end
+end
+
+-- expect表示遇到 ... 时,期待的返回数量
+function mt:unpackDots(res, expect)
+ local dots = self:getDots(1)
+ local func = dots.func
+ local start = dots.index
+ if expect then
+ local finish = start + expect - 1
+ for i = start, finish do
+ res[#res+1] = self:getFunctionArg(func, i)
+ end
+ else
+ if not func.argValues then
+ return
+ end
+ for i = start, #func.argValues do
+ res[#res+1] = func.argValues[i]
+ end
+ end
+end
+
+function mt:unpackList(list, expect)
+ local res = {
+ type = 'list',
+ }
+ if not list then
+ return res
+ end
+ if list.type == 'list' or list.type == 'call' then
+ for i, exp in ipairs(list) do
+ if exp.type == '...' then
+ self:unpackDots(res, expect)
+ break
+ end
+ local value = self:getExp(exp)
+ if value.type == 'list' then
+ if i == #list then
+ for _, v in ipairs(value) do
+ res[#res+1] = v
+ end
+ else
+ res[#res+1] = value[1]
+ end
+ else
+ res[#res+1] = value
+ end
+ end
+ elseif list.type == '...' then
+ self:unpackDots(res, expect)
+ else
+ local value = self:getExp(list)
+ if value.type == 'list' then
+ for i, v in ipairs(value) do
+ res[i] = v
+ end
+ else
+ res[1] = value
+ end
+ end
+ for _, v in ipairs(res) do
+ if v.type == 'list' then
+ error('Unpack list')
+ end
+ end
+ return res
+end
+
+function mt:getSimple(simple, mode)
+ local value = self:getExp(simple[1])
+ local field
+ local parentName
+ local tp = simple[1].type
+ if tp == 'name' then
+ field = self:getName(simple[1][1])
+ parentName = field.key
+ elseif tp == 'string' or tp == 'number' or tp == 'nil' or tp == 'boolean' then
+ local v = self:createValue(tp, simple[1], simple[1][1])
+ field = self:createDummyVar(simple[1], v)
+ parentName = '*' .. tp
+ else
+ local v = self:createValue('any', simple[1])
+ field = self:createDummyVar(simple[1], v)
+ parentName = '?'
+ end
+ local object
+ local lastField = field
+ for i = 2, #simple do
+ local obj = simple[i]
+ local tp = obj.type
+
+ if tp == 'call' then
+ local args = self:unpackList(obj)
+ if object then
+ table.insert(args, 1, self:getValue(object))
+ end
+ local func = value
+ -- 函数的返回值一定是list
+ value = self:call(func, args)
+ if i < #simple then
+ value = value[1] or self:createValue('any')
+ end
+ self.results.calls[#self.results.calls+1] = {
+ args = obj,
+ lastObj = simple[i-1],
+ nextObj = simple[i+1],
+ func = func,
+ }
+ parentName = parentName .. '(...)'
+ elseif tp == 'index' then
+ local child = obj[1]
+ local index = self:getIndex(child)
+ field = self:getField(value, index, child)
+ field.parentValue = value
+ value = self:getValue(field)
+ if mode == 'value' or i < #simple then
+ self:addInfo(field, 'get', obj)
+ end
+ field.parent = lastField
+ lastField = field
+ obj.object = object
+ obj.parentName = parentName
+ if obj[1].type == 'string' then
+ parentName = ('%s[%q]'):format(parentName, index)
+ elseif obj[1].type == 'number' or obj[1].type == 'boolean' then
+ parentName = ('%s[%s]'):format(parentName, index)
+ else
+ parentName = ('%s[?]'):format(parentName)
+ end
+ elseif tp == 'name' then
+ field = self:getField(value, obj[1], obj)
+ field.parentValue = value
+ value = self:getValue(field)
+ if mode == 'value' or i < #simple then
+ self:addInfo(field, 'get', obj)
+ end
+ field.parent = lastField
+ lastField = field
+ obj.object = object
+ obj.parentName = parentName
+ parentName = parentName .. '.' .. field.key
+ elseif tp == ':' then
+ object = field
+ simple[i-1].colon = obj
+ elseif tp == '.' then
+ simple[i-1].dot = obj
+ end
+ end
+ if mode == 'value' then
+ return value, object
+ elseif mode == 'field' then
+ return field, object
+ end
+ error('Unknow simple mode: ' .. mode)
+end
+
+function mt:isTrue(v)
+ if v.type == 'nil' then
+ return false
+ end
+ if v.type == 'boolean' and not v.value then
+ return false
+ end
+ return true
+end
+
+function mt:getBinary(exp)
+ local v1 = self:getExp(exp[1])
+ local v2 = self:getExp(exp[2])
+ local op = exp.op
+ -- TODO 搜索元方法
+ if op == 'or' then
+ if self:isTrue(v1) then
+ return v1
+ else
+ return v2
+ end
+ elseif op == 'and' then
+ if self:isTrue(v1) then
+ return v2
+ else
+ return v1
+ end
+ elseif op == '<='
+ or op == '>='
+ or op == '<'
+ or op == '>'
+ then
+ self:inference(v1, 'number')
+ self:inference(v2, 'number')
+ return self:createValue('boolean')
+ elseif op == '~='
+ or op == '=='
+ then
+ return self:createValue('boolean')
+ elseif op == '|'
+ or op == '~'
+ or op == '&'
+ or op == '<<'
+ or op == '>>'
+ then
+ self:inference(v1, 'integer')
+ self:inference(v2, 'integer')
+ if math.type(v1.value) == 'integer' and math.type(v2.value) == 'integer' then
+ if op == '|' then
+ return self:createValue('integer', v1.value | v2.value)
+ elseif op == '~' then
+ return self:createValue('integer', v1.value ~ v2.value)
+ elseif op == '&' then
+ return self:createValue('integer', v1.value &v2.value)
+ elseif op == '<<' then
+ return self:createValue('integer', v1.value << v2.value)
+ elseif op == '>>' then
+ return self:createValue('integer', v1.value >> v2.value)
+ end
+ end
+ return self:createValue('integer')
+ elseif op == '..' then
+ self:inference(v1, 'string')
+ self:inference(v2, 'string')
+ if type(v1.value) == 'string' and type(v2.value) == 'string' then
+ return self:createValue('string', nil, v1.value .. v2.value)
+ end
+ return self:createValue('string')
+ elseif op == '+'
+ or op == '-'
+ or op == '*'
+ or op == '/'
+ or op == '^'
+ or op == '%'
+ or op == '//'
+ then
+ self:inference(v1, 'number')
+ self:inference(v2, 'number')
+ if type(v1.value) == 'number' and type(v2.value) == 'number' then
+ if op == '+' then
+ return self:createValue('number', nil, v1.value + v2.value)
+ elseif op == '-' then
+ return self:createValue('number', nil, v1.value - v2.value)
+ elseif op == '*' then
+ return self:createValue('number', nil, v1.value * v2.value)
+ elseif op == '/' then
+ if v2.value ~= 0 then
+ return self:createValue('number', nil, v1.value / v2.value)
+ end
+ elseif op == '^' then
+ return self:createValue('number', nil, v1.value ^ v2.value)
+ elseif op == '%' then
+ if v2.value ~= 0 then
+ return self:createValue('number', nil, v1.value % v2.value)
+ end
+ elseif op == '//' then
+ if v2.value ~= 0 then
+ return self:createValue('number', nil, v1.value // v2.value)
+ end
+ end
+ end
+ return self:createValue('number')
+ end
+ return nil
+end
+
+function mt:getUnary(exp)
+ local v1 = self:getExp(exp[1])
+ local op = exp.op
+ -- TODO 搜索元方法
+ if op == 'not' then
+ return self:createValue('boolean')
+ elseif op == '#' then
+ self:inference(v1, 'table')
+ if type(v1.value) == 'string' then
+ return self:createValue('integer', nil, #v1.value)
+ end
+ return self:createValue('integer')
+ elseif op == '-' then
+ self:inference(v1, 'number')
+ if type(v1.value) == 'number' then
+ return self:createValue('number', nil, -v1.value)
+ end
+ return self:createValue('number')
+ elseif op == '~' then
+ self:inference(v1, 'integer')
+ if math.type(v1.value) == 'integer' then
+ return self:createValue('integer', nil, ~v1.value)
+ end
+ return self:createValue('integer')
+ end
+ return nil
+end
+
+function mt:getDots()
+ if not self.chunk.dots then
+ self:createDots(1)
+ end
+ return self.chunk.dots
+end
+
+function mt:getExp(exp)
+ local tp = exp.type
+ if tp == 'nil' then
+ return self:createValue('nil', exp)
+ elseif tp == 'string' then
+ self.results.strings[#self.results.strings+1] = exp
+ return self:createValue('string', exp, exp[1])
+ elseif tp == 'boolean' then
+ return self:createValue('boolean', exp, exp[1])
+ elseif tp == 'number' then
+ return self:createValue('number', exp, exp[1])
+ elseif tp == 'name' then
+ local var = self:getName(exp[1], exp)
+ local value = self:getValue(var)
+ self:addInfo(var, 'get', exp)
+ return value
+ elseif tp == 'simple' then
+ return self:getSimple(exp, 'value')
+ elseif tp == 'binary' then
+ return self:getBinary(exp)
+ elseif tp == 'unary' then
+ return self:getUnary(exp)
+ elseif tp == 'function' then
+ return self:buildFunction(exp)
+ elseif tp == 'table' then
+ return self:buildTable(exp)
+ elseif tp == '...' then
+ local value = { type = 'list' }
+ self:unpackDots(value)
+ return value
+ end
+ error('Unkown exp type: ' .. tostring(tp))
+end
+
+function mt:doDo(action)
+ self:scopePush(action)
+ self:doActions(action)
+ self:scopePop()
+end
+
+function mt:doReturn(action)
+ self:getCurrentFunction():set('hasReturn', true)
+ for i, exp in ipairs(action) do
+ local value = self:getExp(exp)
+ if value.type == 'list' then
+ if i == #action then
+ if #value == 0 then
+ value[1] = self:createValue('any', exp)
+ end
+ for x, v in ipairs(value) do
+ self:addInfo(v, 'return', exp)
+ self:setFunctionReturn(self:getCurrentFunction(), i + x - 1, v)
+ end
+ break
+ else
+ local v = value[1] or self:createValue('nil', exp)
+ self:addInfo(v, 'return', exp)
+ self:setFunctionReturn(self:getCurrentFunction(), i, v)
+ end
+ else
+ self:addInfo(value, 'return', exp)
+ self:setFunctionReturn(self:getCurrentFunction(), i, value)
+ end
+ end
+end
+
+function mt:createLabel(action)
+ local name = action[1]
+ if not self.chunk.labels[name] then
+ local label = {
+ type = 'label',
+ key = name,
+ }
+ self.chunk.labels[name] = label
+ self.results.labels[#self.results.labels+1] = label
+ end
+ return self.chunk.labels[name]
+end
+
+function mt:doSet(action)
+ if not action[2] then
+ return
+ end
+ local n = self:countList(action[1])
+ -- 要先计算值
+ local values = self:unpackList(action[2], n)
+ self:forList(action[1], function (key)
+ local value = table.remove(values, 1)
+ if key.type == 'name' then
+ local var = self:getName(key[1], key)
+ self:setValue(var, value, key)
+ if self:isGlobal(var) then
+ self.results.globals[#self.results.globals+1] = {
+ type = 'global',
+ global = var,
+ }
+ end
+ elseif key.type == 'simple' then
+ local field = self:getSimple(key, 'field')
+ self:setValue(field, value, key[#key])
+ local var = field
+ repeat
+ if self:isGlobal(var) then
+ self.results.globals[#self.results.globals+1] = {
+ type = 'field',
+ global = var,
+ }
+ break
+ end
+ var = var.parent
+ until not var
+ end
+ end)
+end
+
+function mt:doLocal(action)
+ local n = self:countList(action[1])
+ local values
+ if action[2] then
+ values = self:unpackList(action[2], n)
+ end
+ self:forList(action[1], function (key)
+ local value
+ if values then
+ value = table.remove(values, 1)
+ end
+ self:createLocal(key[1], key, value)
+ end)
+end
+
+function mt:doIf(action)
+ for _, block in ipairs(action) do
+ if block.filter then
+ self:getExp(block.filter)
+ end
+
+ self:scopePush(block)
+ self:doActions(block)
+ self:scopePop()
+ end
+end
+
+function mt:doLoop(action)
+
+ local min = self:unpackList(action.min)[1]
+ self:getExp(action.max)
+ if action.step then
+ self:getExp(action.step)
+ end
+
+ self:scopePush(action)
+ self:createLocal(action.arg[1], action.arg, min)
+ self:doActions(action)
+ self:scopePop()
+end
+
+function mt:doIn(action)
+ local args = self:unpackList(action.exp)
+
+ self:scopePush(action)
+ local func = table.remove(args, 1) or self:createValue('any')
+ local values = self:call(func, args)
+ self:forList(action.arg, function (arg)
+ local value = table.remove(values, 1)
+ self:createLocal(arg[1], arg, value)
+ end)
+
+ self:doActions(action)
+
+ self:scopePop()
+end
+
+function mt:doWhile(action)
+
+ self:getExp(action.filter)
+
+ self:scopePush(action)
+ self:doActions(action)
+ self:scopePop()
+end
+
+function mt:doRepeat(action)
+ self:scopePush(action)
+ self:doActions(action)
+ self:getExp(action.filter)
+ self:scopePop()
+end
+
+function mt:doFunction(action)
+ local name = action.name
+ local var, object
+ local source
+ if name then
+ if name.type == 'simple' then
+ var, object = self:getSimple(name, 'field')
+ source = name[#name]
+ else
+ var = self:getName(name[1], name)
+ source = name
+ end
+ end
+ local func = self:buildFunction(action, object)
+ if var then
+ self:setValue(var, func, source)
+ end
+end
+
+function mt:doLocalFunction(action)
+ local name = action.name
+ local var, object
+ local source
+ if name then
+ if name.type == 'simple' then
+ var, object = self:getSimple(name, 'field')
+ source = name[#name]
+ else
+ var = self:createLocal(name[1], name)
+ source = name
+ end
+ end
+ local func = self:buildFunction(action, object)
+ if var then
+ self:setValue(var, func, source)
+ end
+end
+
+function mt:doAction(action)
+ if not action then
+ -- Skip
+ return
+ end
+ local tp = action.type
+ if tp == 'do' then
+ self:doDo(action)
+ elseif tp == 'break' then
+ elseif tp == 'return' then
+ self:doReturn(action)
+ elseif tp == 'label' then
+ local label = self:createLabel(action)
+ self:addInfo(label, 'set', action)
+ elseif tp == 'goto' then
+ local label = self:createLabel(action)
+ self:addInfo(label, 'goto', action)
+ elseif tp == 'set' then
+ self:doSet(action)
+ elseif tp == 'local' then
+ self:doLocal(action)
+ elseif tp == 'simple' then
+ -- call
+ self:getSimple(action, 'value')
+ elseif tp == 'if' then
+ self:doIf(action)
+ elseif tp == 'loop' then
+ self:doLoop(action)
+ elseif tp == 'in' then
+ self:doIn(action)
+ elseif tp == 'while' then
+ self:doWhile(action)
+ elseif tp == 'repeat' then
+ self:doRepeat(action)
+ elseif tp == 'function' then
+ self:doFunction(action)
+ elseif tp == 'localfunction' then
+ self:doLocalFunction(action)
+ else
+ self:getExp(action)
+ end
+end
+
+function mt:doActions(actions)
+ for _, action in ipairs(actions) do
+ self:doAction(action)
+ if coroutine.isyieldable() then
+ coroutine.yield()
+ end
+ end
+end
+
+function mt:createEnvironment()
+ self.scope.block = { start = 0, finish = math.maxinteger }
+ -- 整个文件是一个函数
+ self.chunk.func = self:buildFunction()
+ self.results.main = self.chunk.func
+ -- 隐藏的上值`_ENV`
+ local parent = self:createLocal('_ENV')
+ parent.hide = true
+ local envValue = self:setValue(parent, self:buildTable())
+ -- _ENV 有个特殊标记
+ envValue.ENV = true
+ -- 隐藏的参数`...`
+ self:createDots(1)
+
+ -- 设置全局变量
+ if not GlobalChild then
+ for name, lib in pairs(library.global) do
+ local field = self:createField(envValue, name)
+ local value = self:getLibValue(lib, 'global')
+ value = self:setValue(field, value)
+ end
+ GlobalChild = envValue.child
+ end
+ envValue.child = readOnly(GlobalChild)
+
+ -- 设置 _G 使用 _ENV 的child
+ local g = self:getField(envValue, '_G')
+ local gValue = self:getValue(g)
+ gValue.child = envValue.child
+ self.env = envValue
+end
+
+local function compile(ast, lsp, uri)
+ local vm = setmetatable({
+ scope = env {
+ locals = {},
+ },
+ chunk = env {
+ labels = {},
+ },
+ results = {
+ locals = {},
+ labels = {},
+ funcs = {},
+ calls = {},
+ sources= {},
+ strings= {},
+ indexs = {},
+ globals= {},
+ main = nil,
+ },
+ libraryValue = {},
+ libraryChild = {},
+ lsp = lsp,
+ uri = uri,
+ }, mt)
+
+ -- 创建初始环境
+ vm:createEnvironment()
+
+ -- 执行代码
+ vm:doActions(ast)
+
+ vm.scope = nil
+ vm.chunk = nil
+ vm.libraryValue = nil
+ vm.libraryChild = nil
+
+ return vm
+end
+
+return function (ast, lsp, uri)
+ if not ast then
+ return nil
+ end
+ local suc, res = xpcall(compile, log.error, ast, lsp, uri)
+ if not suc then
+ return nil
+ end
+ return res
+end
diff --git a/script/test/find_lib/init.lua b/script/test/find_lib/init.lua
new file mode 100644
index 00000000..51f53b75
--- /dev/null
+++ b/script/test/find_lib/init.lua
@@ -0,0 +1,106 @@
+local core = require 'core'
+local parser = require 'parser'
+local buildVM = require 'vm'
+
+rawset(_G, 'TEST', true)
+
+function TEST(fullkey)
+ return function (script)
+ local start = script:find('<?', 1, true)
+ local finish = script:find('?>', 1, true)
+ local pos = (start + finish) // 2 + 1
+ local new_script = script:gsub('<[!?]', ' '):gsub('[!?]>', ' ')
+ local ast = parser:parse(new_script, 'lua', 'Lua 5.3')
+ assert(ast)
+ local vm = buildVM(ast)
+ assert(vm)
+ local source = core.findSource(vm, pos)
+ local _, name = core.findLib(source)
+ assert(name == fullkey)
+ end
+end
+
+TEST 'require' [[
+<?require?> 'xxx'
+]]
+
+TEST 'req<require>' [[
+local <?req?> = require
+]]
+
+TEST 'req<require>' [[
+local req = require
+local t = {
+ xx = req,
+}
+t[<?'xx'?>]()
+]]
+
+TEST 'table' [[
+<?table?>.unpack()
+]]
+
+TEST 'xx<table>' [[
+local <?xx?> = require 'table'
+]]
+
+TEST 'xx<table>' [[
+local rq = require
+local lib = 'table'
+local <?xx?> = rq(lib)
+]]
+
+TEST 'table.insert' [[
+table.<?insert?>()
+]]
+
+TEST 'table.insert' [[
+local t = table
+t.<?insert?>()
+]]
+
+TEST 'table.insert' [[
+local insert = table.insert
+<?insert?>()
+]]
+
+TEST 'table.insert' [[
+local t = require 'table'
+t.<?insert?>()
+]]
+
+TEST 'table.insert' [[
+require 'table'.<?insert?>()
+]]
+
+TEST '*string.sub' [[
+local str = 'xxx'
+str.<?sub?>()
+]]
+
+TEST '*string:sub' [[
+local str = 'xxx'
+str:<?sub?>(1, 1)
+]]
+
+TEST '*string.sub' [[
+('xxx').<?sub?>()
+]]
+
+TEST 'fs<bee::filesystem>' [[
+local <?fs?> = require 'bee.filesystem'
+]]
+
+TEST 'fs.current_path' [[
+local filesystem = require 'bee.filesystem'
+
+ROOT = filesystem.<?current_path?>()
+]]
+
+TEST(nil)[[
+print(<?insert?>)
+]]
+
+TEST '_G' [[
+local x = <?_G?>
+]]
diff --git a/script/test/full/dirty.lua b/script/test/full/dirty.lua
new file mode 100644
index 00000000..5fe4e998
--- /dev/null
+++ b/script/test/full/dirty.lua
@@ -0,0 +1,15 @@
+TEST [[
+a.
+]]
+
+TEST [[
+a:
+]]
+
+TEST [[
+end
+]]
+
+TEST [[
+table.02X
+]]
diff --git a/script/test/full/example.lua b/script/test/full/example.lua
new file mode 100644
index 00000000..a096f83d
--- /dev/null
+++ b/script/test/full/example.lua
@@ -0,0 +1,42 @@
+local fs = require 'bee.filesystem'
+local core = require 'core'
+local parser = require 'parser'
+
+TEST(io.load(ROOT / 'src' / 'vm' / 'vm.lua'))
+
+-- 临时
+local function testIfExit(path)
+ local buf = io.load(fs.path(path))
+ if buf then
+ local vm
+
+ local clock = os.clock()
+ local max = 100
+ local need
+ for i = 1, max do
+ vm = TEST(buf)
+ local passed = os.clock() - clock
+ if passed >= 1.0 or i == max then
+ need = passed / i
+ break
+ end
+ end
+ print(('基准编译测试[%s]单次耗时:%.10f'):format(path:filename():string(), need))
+
+ local clock = os.clock()
+ local max = 100
+ local need
+ local lines = parser:lines(buf, 'utf8')
+ for i = 1, max do
+ core.diagnostics(vm, lines, 'test')
+ local passed = os.clock() - clock
+ if passed >= 1.0 or i == max then
+ need = passed / i
+ break
+ end
+ end
+ print(('基准诊断测试[%s]单次耗时:%.10f'):format(path:filename():string(), need))
+ end
+end
+testIfExit(ROOT / 'test' / 'example' / 'vm.txt')
+testIfExit(ROOT / 'test' / 'example' / 'largeGlobal.txt')
diff --git a/script/test/full/init.lua b/script/test/full/init.lua
new file mode 100644
index 00000000..3d0661cb
--- /dev/null
+++ b/script/test/full/init.lua
@@ -0,0 +1,16 @@
+local buildVM = require 'vm'
+local parser = require 'parser'
+
+rawset(_G, 'TEST', true)
+
+function TEST(script)
+ local ast = parser:parse(script, 'lua', 'Lua 5.3')
+ assert(ast)
+ local vm, err = buildVM(ast)
+ assert(vm, err)
+ return vm
+end
+
+require 'full.normal'
+require 'full.example'
+require 'full.dirty'
diff --git a/script/test/full/normal.lua b/script/test/full/normal.lua
new file mode 100644
index 00000000..a673e74b
--- /dev/null
+++ b/script/test/full/normal.lua
@@ -0,0 +1,157 @@
+TEST [[
+do
+ x = 1
+end
+]]
+
+TEST [[
+return nil, 1, true, 'xx'
+]]
+
+TEST [[
+return a
+]]
+
+TEST [[
+retrun a.b:c(1, 2, ...)[1][name]
+]]
+
+TEST [[
+return 1 + 1
+]]
+
+TEST [[
+return -1
+]]
+
+TEST [[
+return ...
+]]
+
+TEST [[
+return function (a, b, ...)
+end
+]]
+
+TEST [[
+return {
+ a = 1,
+ b = {
+ c = d,
+ e = f,
+ },
+ g,
+ h,
+ 1,
+}
+]]
+
+TEST [[
+::LABEL::
+goto LABEL
+goto NEXT
+::NEXT::
+]]
+
+TEST [[
+a, b, c = 1, 2, ...
+]]
+
+TEST [[
+local a, b, c = 1, 2, ...
+]]
+
+TEST [[
+a[#a+1] = 1
+]]
+
+TEST [[
+xx(a, b, 2, 3, ...)
+]]
+
+TEST [[
+if a then
+elseif b then
+elseif c then
+else
+end
+]]
+
+TEST [[
+for i = 1, 10, 1 do
+end
+]]
+
+TEST [[
+for a, b, c in pairs(t) do
+end
+]]
+
+TEST [[
+while true do
+end
+]]
+
+TEST [[
+repeat
+until true
+]]
+
+TEST [[
+function xx:yy(a, b, c, ...)
+end
+]]
+
+TEST [[
+local function xx(a, b, c, ...)
+end
+]]
+
+TEST [[
+local v = 1
+local function xx()
+ print(v)
+end
+local v = 2
+xx()
+]]
+
+TEST [[
+return {
+ 1, 2, 3
+}
+]]
+
+TEST [[
+return function ()
+end
+]]
+
+TEST [[
+t[...] = 1
+]]
+
+TEST [[
+return {
+ [...] = ...
+}
+]]
+
+TEST [[
+-- 选取单位
+---@param center point
+---@param radius number
+---@param height number
+---@return unit[]
+function scene:selectByCylinder(center, radius, height)
+end
+]]
+
+TEST [[
+local x = ,
+]]
+
+TEST [[
+---@type any|fun():nil
+local t
+]]
diff --git a/script/test/highlight/init.lua b/script/test/highlight/init.lua
new file mode 100644
index 00000000..6b8ab355
--- /dev/null
+++ b/script/test/highlight/init.lua
@@ -0,0 +1,85 @@
+local core = require 'core'
+local parser = require 'parser'
+local buildVM = require 'vm'
+
+local function catch_target(script)
+ local list = {}
+ local cur = 1
+ while true do
+ local start, finish = script:find('<[!?].-[!?]>', cur)
+ if not start then
+ break
+ end
+ list[#list+1] = { start + 2, finish - 2 }
+ cur = finish + 1
+ end
+ return list
+end
+
+local function founded(targets, results)
+ if #targets ~= #results then
+ return false
+ end
+ for _, target in ipairs(targets) do
+ for _, result in ipairs(results) do
+ if target[1] == result[1] and target[2] == result[2] then
+ goto NEXT
+ end
+ end
+ do return false end
+ ::NEXT::
+ end
+ return true
+end
+
+function TEST(newName)
+ return function (script)
+ local target = catch_target(script)
+ local start = script:find('<?', 1, true)
+ local finish = script:find('?>', 1, true)
+ local pos = (start + finish) // 2 + 1
+ local new_script = script:gsub('<[!?]', ' '):gsub('[!?]>', ' ')
+ local ast = parser:parse(new_script, 'lua', 'Lua 5.3')
+ assert(ast)
+ local vm = buildVM(ast)
+ assert(vm)
+
+ local positions = core.highlight(vm, pos)
+ if positions then
+ assert(founded(target, positions))
+ else
+ assert(#target == 0)
+ end
+ end
+end
+
+TEST 'b' [[
+local <?a?> = 1
+]]
+
+TEST 'b' [[
+local <?a?> = 1
+<!a!> = 2
+<!a!> = <!a!>
+]]
+
+TEST 'b' [[
+t.<?a?> = 1
+a = t.<!a!>
+]]
+
+TEST 'b' [[
+t[<!'a'!>] = 1
+a = t.<?a?>
+]]
+
+TEST 'b' [[
+:: <?a?> ::
+goto <!a!>
+]]
+
+TEST 'b' [[
+local function f(<!a!>)
+ return <?a?>
+end
+]]
diff --git a/script/test/hover/init.lua b/script/test/hover/init.lua
new file mode 100644
index 00000000..362ec9ac
--- /dev/null
+++ b/script/test/hover/init.lua
@@ -0,0 +1,890 @@
+local parser = require 'parser'
+local core = require 'core'
+local buildVM = require 'vm'
+
+rawset(_G, 'TEST', true)
+
+function TEST(script)
+ return function (expect)
+ local start = script:find('<?', 1, true)
+ local finish = script:find('?>', 1, true)
+ local pos = (start + finish) // 2 + 1
+ local new_script = script:gsub('<[!?]', ' '):gsub('[!?]>', ' ')
+ local ast = parser:parse(new_script, 'lua', 'Lua 5.3')
+ local vm = buildVM(ast)
+ assert(vm)
+ local source = core.findSource(vm, pos)
+ local hover = core.hover(source)
+ if expect then
+ assert(hover)
+ expect = expect:gsub('^[\r\n]*(.-)[\r\n]*$', '%1'):gsub('\r\n', '\n')
+ local label = hover.label:gsub('^[\r\n]*(.-)[\r\n]*$', '%1'):gsub('\r\n', '\n')
+ assert(expect == label)
+ else
+ assert(hover == nil)
+ end
+ end
+end
+
+TEST [[
+local function <?x?>(a, b)
+end
+]]
+"function x(a: any, b: any)"
+
+TEST [[
+local function x(a, b)
+end
+<?x?>()
+]]
+"function x(a: any, b: any)"
+
+TEST [[
+local mt = {}
+mt.__index = mt
+
+function mt:init(a, b, c)
+ return {}
+end
+
+local obj = setmetatable({}, mt)
+
+obj:<?init?>(1, '测试')
+]]
+[[
+function mt:init(a: number, b: string, c: any)
+ -> table
+]]
+
+TEST [[
+local mt = {}
+mt.__index = mt
+
+function mt:init(a, b, c)
+ return {}
+end
+
+local obj = setmetatable({}, mt)
+
+obj:init(1, '测试')
+obj.<?init?>(obj, 1, '测试')
+]]
+[[
+function mt.init(self: table, a: number, b: string, c: any)
+ -> table
+]]
+
+TEST [[
+function obj.xxx()
+end
+
+obj.<?xxx?>()
+]]
+"function obj.xxx()"
+
+TEST [[
+obj.<?xxx?>()
+]]
+[[function obj.xxx()
+ -> any
+]]
+
+TEST [[
+local <?x?> = 1
+]]
+"local x: number = 1"
+
+TEST [[
+<?x?> = 1
+]]
+"global x: number = 1"
+
+TEST [[
+local t = {}
+t.<?x?> = 1
+]]
+"field t.x: number = 1"
+
+TEST [[
+t = {}
+t.<?x?> = 1
+]]
+"global t.x: number = 1"
+
+TEST [[
+local mt = {}
+mt.__name = 'class'
+
+local <?obj?> = setmetatable({}, mt)
+]]
+"local obj: *class {}"
+
+TEST [[
+local mt = {}
+mt.name = 'class'
+mt.__index = mt
+
+local <?obj?> = setmetatable({}, mt)
+]]
+[[
+local obj: *class {
+ __index: table,
+ name: string = "class",
+}
+]]
+
+TEST [[
+local mt = {}
+mt.TYPE = 'class'
+mt.__index = mt
+
+local <?obj?> = setmetatable({}, mt)
+]]
+[[
+local obj: *class {
+ TYPE: string = "class",
+ __index: table,
+}
+]]
+
+TEST [[
+local mt = {}
+mt.Class = 'class'
+mt.__index = mt
+
+local <?obj?> = setmetatable({}, mt)
+]]
+[[
+local obj: *class {
+ Class: string = "class",
+ __index: table,
+}
+]]
+
+TEST[[
+local fs = require 'bee.filesystem'
+local <?root?> = fs.current_path()
+]]
+"local root: *bee::filesystem"
+
+TEST[[
+('xx'):<?yy?>()
+]]
+[[function *string:yy()
+ -> any]]
+
+TEST [[
+local <?v?> = collectgarbage()
+]]
+"local v: any"
+
+TEST [[
+local type
+w2l:get_default()[<?type?>]
+]]
+"local type: any"
+
+TEST [[
+<?load?>()
+]]
+[=[
+function load(chunk: string/function [, chunkname: string [, mode: string [, env: table]]])
+ -> function
+ 2. error_message: string
+]=]
+
+TEST [[
+string.<?lower?>()
+]]
+[[
+function string.lower(string)
+ -> string
+]]
+
+TEST [[
+local function x(a, ...)
+end
+
+<?x?>(1, 2, 3, 4, 5, 6, 7)
+]]
+[[
+function x(a: number, ...)
+]]
+
+TEST [[
+local function x()
+ return y()
+end
+
+<?x?>()
+]]
+[[
+function x()
+ -> any
+]]
+
+TEST [[
+local mt = {}
+mt.__index = mt
+
+function mt:add(a, b)
+end
+
+local function init()
+ return setmetatable({}, mt)
+end
+
+local t = init()
+t:<?add?>()
+]]
+[[
+function mt:add(a: any, b: any)
+]]
+
+TEST [[
+local <?t?> = - 1000
+]]
+[[local t: number = -1000]]
+
+TEST [[
+for <?c?> in io.lines() do
+end
+]]
+[[local c: string]]
+
+TEST [[
+local function f()
+ return ...
+end
+local <?n?> = f()
+]]
+[[local n: any]]
+
+TEST [[
+local <?n?> = table.unpack(t)
+]]
+[[local n: any]]
+
+TEST [[
+local <?n?>
+table.pack(n)
+]]
+[[
+local n: any
+]]
+
+TEST [[
+(<?'xxx'?>):sub()
+]]
+(nil)
+
+TEST [[
+local <?t?> = {
+ a = 1,
+ b = 2,
+ c = 3,
+}
+]]
+[[
+local t: {
+ a: number = 1,
+ b: number = 2,
+ c: number = 3,
+}
+]]
+
+TEST [[
+local <?t?> = {
+ a = 1,
+ [1] = 2,
+ [true] = 3,
+ [5.5] = 4,
+ [{}] = 5,
+ [function () end] = 6,
+ ["b"] = 7,
+ ["012"] = 8,
+}
+]]
+[[
+local t: {
+ ["012"]: number = 8,
+ [*function]: number = 6,
+ [*table]: number = 5,
+ [001]: number = 2,
+ [5.5]: number = 4,
+ [true]: number = 3,
+ a: number = 1,
+ b: number = 7,
+}
+]]
+
+TEST [[
+local <?t?> = {}
+t[#t+1] = 1
+t[#t+1] = 1
+
+local any = collectgarbage()
+t[any] = any
+]]
+[[
+local t: {
+ [*number]: number = 1,
+}
+]]
+
+TEST[[
+local x = 1
+local y = x
+print(<?y?>)
+]]
+[[
+local y: number = 1
+]]
+
+TEST[[
+local mt = {}
+mt.a = 1
+mt.b = 2
+mt.c = 3
+local <?obj?> = setmetatable({}, {__index = mt})
+]]
+[[
+local obj: {
+ a: number = 1,
+ b: number = 2,
+ c: number = 3,
+}
+]]
+
+TEST[[
+local mt = {}
+mt.__index = {}
+
+function mt:test(a, b)
+ self:<?test?>()
+end
+]]
+[[
+function mt:test(a: any, b: any)
+]]
+
+TEST[[
+local mt = {}
+mt.__index = mt
+mt.__name = 'obj'
+
+function mt:remove()
+end
+
+local <?self?> = setmetatable({
+ id = 1,
+}, mt)
+]]
+[[
+local self: *obj {
+ __index: table,
+ __name: string = "obj",
+ id: number = 1,
+ remove: function,
+}
+]]
+
+TEST[[
+local <?sssss?> = require 'utf8'
+]]
+[[
+local sssss<utf8>: {
+ char: function,
+ charpattern: string,
+ codepoint: function,
+ codes: function,
+ len: function,
+ offset: function,
+}
+]]
+
+TEST[[
+function a(v)
+ print(<?v?>)
+end
+a(1)
+]]
+[[
+local v: number = 1
+]]
+
+TEST[[
+function a(v)
+ print(<?v?>)
+end
+pcall(a, 1)
+]]
+[[
+local v: number = 1
+]]
+
+TEST[[
+function a(v)
+ print(<?v?>)
+end
+xpcall(a, log.error, 1)
+]]
+[[
+local v: number = 1
+]]
+
+TEST[[
+function a(v)
+ return 'a'
+end
+local _, <?r?> = pcall(a, 1)
+]]
+[[
+local r: string = "a"
+]]
+
+TEST[[
+local <?n?> = rawlen()
+]]
+[[
+local n: integer
+]]
+
+TEST[[
+<?next?>()
+]]
+[[
+function next(table: table [, index: any])
+ -> key: any
+ 2. value: any
+]]
+
+TEST[[
+local <?n?> = pairs()
+]]
+[[
+function n<next>(table: table [, index: any])
+ -> key: any
+ 2. value: any
+]]
+
+TEST[[
+local <?x?> = '\a'
+]]
+[[local x: string = "\007"]]
+
+TEST[[
+---@class Class
+local <?x?> = class()
+]]
+[[
+local x: *Class {}
+]]
+
+TEST[[
+---@class Class
+<?x?> = class()
+]]
+[[
+global x: *Class {}
+]]
+
+TEST[[
+local t = {
+ ---@class Class
+ <?x?> = class()
+}
+]]
+[[
+field x: *Class {}
+]]
+
+TEST[[
+---@type Class
+local <?x?> = class()
+]]
+[[
+local x: *Class {}
+]]
+
+TEST[[
+---@type Class
+<?x?> = class()
+]]
+[[
+global x: *Class {}
+]]
+
+TEST[[
+local t = {
+ ---@type Class
+ <?x?> = class()
+}
+]]
+[[
+field x: *Class {}
+]]
+
+TEST[[
+---@type A|B|C
+local <?x?> = class()
+]]
+[[
+local x: *A|B|C {}
+]]
+
+TEST[[
+---@class Class
+local <?x?> = {
+ b = 1
+}
+]]
+[[
+local x: *Class {
+ b: number = 1,
+}
+]]
+
+TEST [[
+---@class Class
+local mt = {}
+
+---@param t Class
+function f(<?t?>)
+end
+]]
+[[
+local t: *Class {}
+]]
+
+TEST [[
+---@class Class
+local mt = {}
+
+---@param t Class
+function f(t)
+ print(<?t?>)
+end
+]]
+[[
+local t: *Class {}
+]]
+
+TEST [[
+---@class Class
+local mt = {}
+
+---@param t Class
+function f(t)
+end
+
+f(<?s?>)
+]]
+[[
+global s: *Class {}
+]]
+
+TEST [[
+---@class Class
+
+---@param k Class
+for <?k?> in pairs(t) do
+end
+]]
+[[
+local k<key>: *Class {}
+]]
+
+TEST [[
+---@class Class
+
+---@param v Class
+for k, <?v?> in pairs(t) do
+end
+]]
+[[
+local v<value>: *Class {}
+]]
+
+TEST [[
+---@return A|B
+---@return C
+local function <?f?>()
+end
+]]
+[[
+function f()
+ -> A|B
+ 2. C
+]]
+
+TEST [[
+---@generic T
+---@param x T
+---@return T
+local function f(x)
+end
+
+local <?r?> = f(1)
+]]
+[[
+local r: number
+]]
+
+TEST [[
+---@param x number
+---@param y boolean
+local function <?f?>(x, y)
+end
+]]
+[[
+function f(x: number, y: boolean)
+]]
+
+TEST [[
+---@vararg Class
+local function f(...)
+ local _, <?x?> = ...
+end
+f(1, 2, 3)
+]]
+[[
+local x: *Class = 2
+]]
+
+TEST [[
+---@vararg Class
+local function f(...)
+ local _, <?x?> = ...
+end
+]]
+[[
+local x: *Class {}
+]]
+
+TEST [[
+---@type string[]
+local <?x?>
+]]
+[[
+local x: {
+ [*integer]: string,
+}
+]]
+
+TEST [[
+---@type (string|boolean)[]
+local <?x?>
+]]
+[[
+local x: {
+ [*integer]: string|boolean,
+}
+]]
+
+TEST [[
+---@type string[]
+local t
+local <?x?> = t[1]
+]]
+[[
+local x: string
+]]
+
+TEST [[
+---@type string[]
+local t
+for _, <?x?> in ipairs(t) do
+end
+]]
+[[
+local x: string
+]]
+
+TEST [[
+---@type string[]
+local t
+for _, <?x?> in pairs(t) do
+end
+]]
+[[
+local x: string
+]]
+
+TEST [[
+---@type string[]
+local t
+for <?k?>, v in pairs(t) do
+end
+]]
+[[
+local k: integer
+]]
+
+TEST [[
+---@type table<ClassA, ClassB>
+local <?x?>
+]]
+[[
+local x: {
+ [*ClassA]: ClassB,
+}
+]]
+
+TEST [[
+---@type table<ClassA, ClassB>
+local t
+for _, <?x?> in pairs(t) do
+end
+]]
+[[
+local x: *ClassB
+]]
+
+TEST [[
+---@type table<ClassA, ClassB>
+local t
+for <?k?>, v in pairs(t) do
+end
+]]
+[[
+local k: *ClassA
+]]
+
+TEST [[
+---@type fun(x: number, y: number):boolean
+local <?f?>
+]]
+[[
+function f(x: number, y: number)
+ -> boolean
+]]
+
+TEST [[
+---@type fun(x: number, y: number):boolean
+local f
+f(<?a?>)
+]]
+[[
+global a: number
+]]
+
+TEST [[
+---@type fun(x: number, y: number):boolean
+local f
+local <?r?> = f()
+]]
+[[
+local r: boolean
+]]
+
+TEST [[
+---@param f fun():void
+function t(<?f?>) end
+]]
+[[
+function ()
+ -> void
+]]
+
+TEST [[
+---@type fun(a:any, b:any)
+local f
+local t = {f = f}
+t:<?f?>()
+]]
+[[
+function f(b: any)
+ -> any
+]]
+
+TEST [[
+---@param names string[]
+local function f(<?names?>)
+end
+]]
+[[
+local names: {
+ [*integer]: string,
+}
+]]
+
+TEST [[
+---@return any
+function <?f?>()
+ ---@type integer
+ local a
+ return a
+end
+]]
+[[
+function f()
+ -> any
+]]
+
+TEST [[
+---@return any
+function f()
+ ---@type integer
+ local a
+ return a
+end
+
+local <?x?> = f()
+]]
+[[
+local x: any
+]]
+
+TEST [[
+local <?x?> <close> <const> = 1
+]]
+[[
+local x <close> <const>: number = 1
+]]
+
+TEST [[
+---@param x number {optional = 'after'}
+---@param y boolean {optional = 'self'}
+---@param z string
+function <?f?>(x, y, z) end
+]]
+[=[
+function f([x: number [, y: boolean], z: string])
+]=]
+
+TEST [[
+---@return string key
+---@return string value
+function <?f?>() end
+]]
+[=[
+function f()
+ -> key: string
+ 2. value: string
+]=]
+
+TEST [[
+---@return any x {optional = 'after'}
+---@return string y {optional = 'self'}
+---@return string z
+function <?f?>() end
+]]
+[=[
+function f()
+ -> [x: any [
+ 2. y: string]
+ 3. z: string]
+]=]
+
+TEST [[
+function f()
+ return function (a, b)
+ end
+end
+
+<?f2?> = f()
+]]
+[=[
+function f2(a: any, b: any)
+]=]
diff --git a/script/test/other/init.lua b/script/test/other/init.lua
new file mode 100644
index 00000000..069a2454
--- /dev/null
+++ b/script/test/other/init.lua
@@ -0,0 +1,11 @@
+local fs = require 'bee.filesystem'
+local platform = require 'bee.platform'
+local path = fs.path '/a/b/c/d/e/../../../..'
+local absolute = fs.absolute(path)
+if platform.OS == 'Windows' then
+ assert(absolute:string():sub(-2) == '/a', absolute:string())
+elseif platform.OS == 'Linux' then
+ assert(absolute:string():sub(-3) == '/a/', absolute:string())
+elseif platform.OS == 'macOS' then
+ -- 不支持
+end
diff --git a/script/test/references/init.lua b/script/test/references/init.lua
new file mode 100644
index 00000000..44cd5ab0
--- /dev/null
+++ b/script/test/references/init.lua
@@ -0,0 +1,114 @@
+local core = require 'core'
+local parser = require 'parser'
+local buildVM = require 'vm'
+
+local function catch_target(script)
+ local list = {}
+ local cur = 1
+ while true do
+ local start, finish = script:find('<[!?].-[!?]>', cur)
+ if not start then
+ break
+ end
+ list[#list+1] = { start + 2, finish - 2 }
+ cur = finish + 1
+ end
+ return list
+end
+
+local function founded(targets, results)
+ if #targets ~= #results then
+ return false
+ end
+ for _, target in ipairs(targets) do
+ for _, result in ipairs(results) do
+ if target[1] == result[1] and target[2] == result[2] then
+ goto NEXT
+ end
+ end
+ do return false end
+ ::NEXT::
+ end
+ return true
+end
+
+function TEST(script)
+ local target = catch_target(script)
+ local start = script:find('<?', 1, true)
+ local finish = script:find('?>', 1, true)
+ local pos = (start + finish) // 2 + 1
+ local new_script = script:gsub('<[!?]', ' '):gsub('[!?]>', ' ')
+ local ast = parser:parse(new_script, 'lua', 'Lua 5.3')
+ assert(ast)
+ local vm = buildVM(ast)
+ assert(vm)
+
+ local positions = core.definition(vm, pos, 'reference')
+ if positions then
+ assert(founded(target, positions))
+ else
+ assert(#target == 0)
+ end
+end
+
+TEST [[
+local <?a?> = 1
+<!a!> = <!a!>
+]]
+
+TEST [[
+t.<?a?> = 1
+t.<!a!> = t.<!a!>
+]]
+
+TEST [[
+:: <!LABEL!> ::
+goto <?LABEL?>
+]]
+
+TEST [[
+local a = 1
+local <?a?> = 1
+<!a!> = <!a!>
+]]
+
+TEST [[
+local t = {
+ <?a?> = 1
+}
+print(t.<!a!>)
+]]
+
+TEST [[
+local <!mt!> = {}
+function <!mt!>:a()
+ <?self?>:remove()
+end
+]]
+
+TEST [[
+local function f()
+ return <?function ()
+ end?>
+end
+
+local <!f2!> = f()
+]]
+
+TEST [[
+table.<!dump!>()
+function table.<?dump?>()
+end
+]]
+
+TEST [[
+---@class <!Class!>
+---@type <?Class?>
+---@type <!Class!>
+]]
+
+TEST [[
+---@class <?Class?>
+---@type <!Class!>
+---@type <!Class!>
+]]
diff --git a/script/test/rename/init.lua b/script/test/rename/init.lua
new file mode 100644
index 00000000..646401a0
--- /dev/null
+++ b/script/test/rename/init.lua
@@ -0,0 +1,85 @@
+local core = require 'core'
+local parser = require 'parser'
+local buildVM = require 'vm'
+
+local function catch_target(script)
+ local list = {}
+ local cur = 1
+ while true do
+ local start, finish = script:find('<[!?].-[!?]>', cur)
+ if not start then
+ break
+ end
+ list[#list+1] = { start + 2, finish - 2 }
+ cur = finish + 1
+ end
+ return list
+end
+
+local function founded(targets, results)
+ if #targets ~= #results then
+ return false
+ end
+ for _, target in ipairs(targets) do
+ for _, result in ipairs(results) do
+ if target[1] == result[1] and target[2] == result[2] then
+ goto NEXT
+ end
+ end
+ do return false end
+ ::NEXT::
+ end
+ return true
+end
+
+function TEST(newName)
+ return function (script)
+ local target = catch_target(script)
+ local start = script:find('<?', 1, true)
+ local finish = script:find('?>', 1, true)
+ local pos = (start + finish) // 2 + 1
+ local new_script = script:gsub('<[!?]', ' '):gsub('[!?]>', ' ')
+ local ast = parser:parse(new_script, 'lua', 'Lua 5.3')
+ assert(ast)
+ local vm = buildVM(ast)
+ assert(vm)
+
+ local positions = core.rename(vm, pos, newName)
+ if positions then
+ assert(founded(target, positions))
+ else
+ assert(#target == 0)
+ end
+ end
+end
+
+TEST 'b' [[
+local <?a?> = 1
+]]
+
+TEST 'b' [[
+local <?a?> = 1
+<!a!> = 2
+<!a!> = <!a!>
+]]
+
+TEST 'b' [[
+t.<?a?> = 1
+a = t.<!a!>
+]]
+
+TEST 'b' [[
+t[<!'a'!>] = 1
+a = t.<?a?>
+]]
+
+TEST 'b' [[
+:: <?a?> ::
+goto <!a!>
+]]
+
+TEST 'b' [[
+local function f(<!a!>)
+ return <?a?>
+end
+]]
diff --git a/script/test/signature/init.lua b/script/test/signature/init.lua
new file mode 100644
index 00000000..d5bc19c0
--- /dev/null
+++ b/script/test/signature/init.lua
@@ -0,0 +1,135 @@
+local parser = require 'parser'
+local core = require 'core'
+local buildVM = require 'vm'
+
+rawset(_G, 'TEST', true)
+
+function TEST(script)
+ return function (expect)
+ local pos = script:find('$', 1, true)
+ local new_script = script:gsub('%$', '')
+ local ast = parser:parse(new_script, 'lua', 'Lua 5.3')
+ local vm = buildVM(ast)
+ assert(vm)
+ local hovers = core.signature(vm, pos)
+ if hovers then
+ assert(expect)
+ local hover = hovers[#hovers]
+
+ local label = hover.label:gsub('^[\r\n]*(.-)[\r\n]*$', '%1'):gsub('\r\n', '\n')
+ expect.label = expect.label:gsub('^[\r\n]*(.-)[\r\n]*$', '%1'):gsub('\r\n', '\n')
+ local arg = hover.argLabel
+
+ assert(expect.label == label)
+ assert(expect.arg[1] == arg[1])
+ assert(expect.arg[2] == arg[2])
+ else
+ assert(expect == nil)
+ end
+ end
+end
+
+TEST [[
+local function x(a, b)
+end
+
+x($
+]]
+{
+ label = "x(a: any, b: any)",
+ arg = {3, 8},
+}
+
+TEST [[
+local function x(a, b)
+end
+
+x($)
+]]
+{
+ label = "x(a: any, b: any)",
+ arg = {3, 8},
+}
+
+TEST [[
+local function x(a, b)
+end
+
+x(xxx$)
+]]
+{
+ label = "x(a: any, b: any)",
+ arg = {3, 8},
+}
+
+TEST [[
+local function x(a, b)
+end
+
+x(xxx, $)
+]]
+{
+ label = "x(a: any, b: any)",
+ arg = {11, 16},
+}
+
+TEST [[
+function mt:f(a)
+end
+
+mt:f($
+]]
+{
+ label = 'mt:f(a: any)',
+ arg = {6, 11},
+}
+
+TEST [[
+(''):sub($
+]]
+{
+ label = [[
+*string:sub(i: integer [, j: integer(-1)])
+]],
+ arg = {13, 22},
+}
+
+TEST [[
+(''):sub(1)$
+]]
+(nil)
+
+TEST [[
+local function f(a, b, c)
+end
+
+f(1, 'string$')
+]]
+(nil)
+
+TEST [[
+pcall(function () $ end)
+]]
+(nil)
+
+TEST [[
+table.unpack {$}
+]]
+(nil)
+
+TEST [[
+---@type fun(x: number, y: number):boolean
+local zzzz
+zzzz($)
+]]
+{
+ label = [[
+zzzz(x: number, y: number)
+]],
+ arg = {6, 14},
+}
+
+TEST [[
+('abc'):format(f($))
+]]
+(nil)
diff --git a/script/test/type_inference/init.lua b/script/test/type_inference/init.lua
new file mode 100644
index 00000000..59d853eb
--- /dev/null
+++ b/script/test/type_inference/init.lua
@@ -0,0 +1,187 @@
+local parser = require 'parser'
+local core = require 'core'
+local buildVM = require 'vm'
+local config = require 'config'
+
+rawset(_G, 'TEST', true)
+
+function TEST(res)
+ return function (script)
+ local start = script:find('<?', 1, true)
+ local finish = script:find('?>', 1, true)
+ local pos = (start + finish) // 2 + 1
+ local new_script = script:gsub('<[!?]', ' '):gsub('[!?]>', ' ')
+ local ast = parser:parse(new_script, 'lua', 'Lua 5.3')
+ local vm = buildVM(ast)
+ assert(vm)
+ local result = core.findSource(vm, pos)
+ assert(result)
+ assert(res == result:bindValue():getType())
+ end
+end
+
+config.config.runtime.version = 'Lua 5.4'
+
+TEST 'string' [[
+local <?var?> = '111'
+]]
+
+TEST 'boolean' [[
+local <?var?> = true
+]]
+
+TEST 'number' [[
+local <?var?> = 1
+]]
+
+TEST 'string' [[
+local var = '111'
+t.<?x?> = var
+]]
+
+TEST 'string' [[
+local <?var?>
+var = '111'
+]]
+
+TEST 'function' [[
+function <?xx?>()
+end
+]]
+
+TEST 'function' [[
+local function <?xx?>()
+end
+]]
+
+TEST 'function' [[
+local <?xx?>
+xx = function ()
+end
+]]
+
+TEST 'table' [[
+local <?t?> = {}
+]]
+
+TEST 'table' [[
+local <?t?>
+t = {}
+]]
+
+TEST 'function' [[
+<?x?>()
+]]
+
+TEST 'table' [[
+<?t?>.x = 1
+]]
+
+TEST 'boolean' [[
+<?x?> = not y
+]]
+
+TEST 'integer' [[
+<?x?> = #y
+]]
+
+TEST 'number' [[
+<?x?> = - y
+]]
+
+TEST 'integer' [[
+<?x?> = ~ y
+]]
+
+TEST 'number' [[
+local a = true
+local b = 1
+<?x?> = a and b
+]]
+
+TEST 'number' [[
+local a = false
+local b = 1
+<?x?> = a or b
+]]
+
+TEST 'boolean' [[
+<?x?> = a == b
+]]
+
+TEST 'integer' [[
+<?x?> = a << b
+]]
+
+TEST 'string' [[
+<?x?> = a .. b
+]]
+
+TEST 'number' [[
+<?x?> = a + b
+]]
+
+TEST 'table' [[
+<?table?>()
+]]
+
+TEST 'string' [[
+<?x?> = _VERSION
+]]
+
+TEST 'function' [[
+<?x?> = _VERSION.sub
+]]
+
+TEST 'table' [[
+<?x?> = setmetatable({})
+]]
+
+TEST 'number' [[
+local function x()
+ return 1
+end
+<?y?> = x()
+]]
+
+TEST 'number' [[
+local function x(a)
+ return <?a?>
+end
+x(1)
+]]
+
+TEST 'table' [[
+setmetatable(<?b?>)
+]]
+
+TEST 'number' [[
+local function x(a)
+ _ = a + 1
+end
+local b
+x(<?b?>)
+]]
+
+TEST 'number' [[
+local function x(a, ...)
+ local _, <?b?>, _ = ...
+end
+x(nil, 'xx', 1, true)
+]]
+
+TEST 'number' [[
+local function x(a, ...)
+ return true, 'ss', ...
+end
+local _, _, _, <?b?>, _ = x(nil, true, 1, 'yy')
+]]
+
+TEST 'integer' [[
+for <?i?> in ipairs(t) do
+end
+]]
+
+TEST 'any' [[
+local <?x?> = next()
+]]