diff --git a/DataTables/Datas/#demo.item.xlsx b/DataTables/Datas/#demo.item.xlsx
new file mode 100644
index 00000000..974ed8bd
Binary files /dev/null and b/DataTables/Datas/#demo.item.xlsx differ
diff --git a/DataTables/Datas/__beans__.xlsx b/DataTables/Datas/__beans__.xlsx
new file mode 100644
index 00000000..6fc990b4
Binary files /dev/null and b/DataTables/Datas/__beans__.xlsx differ
diff --git a/DataTables/Datas/__enums__.xlsx b/DataTables/Datas/__enums__.xlsx
new file mode 100644
index 00000000..a0056988
Binary files /dev/null and b/DataTables/Datas/__enums__.xlsx differ
diff --git a/DataTables/Datas/__tables__.xlsx b/DataTables/Datas/__tables__.xlsx
new file mode 100644
index 00000000..e2d7a261
Binary files /dev/null and b/DataTables/Datas/__tables__.xlsx differ
diff --git a/DataTables/Datas/l10n/Demo.xlsx b/DataTables/Datas/l10n/Demo.xlsx
new file mode 100644
index 00000000..c9032390
Binary files /dev/null and b/DataTables/Datas/l10n/Demo.xlsx differ
diff --git a/DataTables/Datas/l10n/Patch.xlsx b/DataTables/Datas/l10n/Patch.xlsx
new file mode 100644
index 00000000..77428df8
Binary files /dev/null and b/DataTables/Datas/l10n/Patch.xlsx differ
diff --git a/DataTables/Datas/l10n/texts.json b/DataTables/Datas/l10n/texts.json
new file mode 100644
index 00000000..0b59e3fa
--- /dev/null
+++ b/DataTables/Datas/l10n/texts.json
@@ -0,0 +1,9 @@
+[
+ {"key":"/apple", "en":"apple", "zh":"苹果"},
+ {"key":"/abc", "en":"apple", "zh":"苹果"},
+ {"key":"/def", "en":"apple", "zh":"苹果"},
+ {"key":"key_name", "en":"apple", "zh":"苹果"},
+ {"key":"test/a", "en":"apple", "zh":"苹果"},
+ {"key":"name", "en":"apple", "zh":"苹果"},
+ {"key":"/banana", "en":"banana", "zh":"香蕉"}
+]
\ No newline at end of file
diff --git a/DataTables/Datas/reward.xlsx b/DataTables/Datas/reward.xlsx
new file mode 100644
index 00000000..cb37235c
Binary files /dev/null and b/DataTables/Datas/reward.xlsx differ
diff --git a/DataTables/Defines/builtin.xml b/DataTables/Defines/builtin.xml
new file mode 100644
index 00000000..e535ff48
--- /dev/null
+++ b/DataTables/Defines/builtin.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DataTables/gen.bat b/DataTables/gen.bat
new file mode 100644
index 00000000..3eef6241
--- /dev/null
+++ b/DataTables/gen.bat
@@ -0,0 +1,11 @@
+set WORKSPACE=..
+set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
+set CONF_ROOT=.
+
+dotnet %LUBAN_DLL% ^
+ -t all ^
+ -d json ^
+ --conf %CONF_ROOT%\luban.conf ^
+ -x outputDataDir=output
+
+pause
\ No newline at end of file
diff --git a/DataTables/gen.sh b/DataTables/gen.sh
new file mode 100644
index 00000000..5f48c8e8
--- /dev/null
+++ b/DataTables/gen.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+WORKSPACE=..
+LUBAN_DLL=$WORKSPACE/Tools/Luban/Luban.dll
+CONF_ROOT=.
+
+dotnet $LUBAN_DLL \
+ -t all \
+ -d json \
+ --conf $CONF_ROOT/luban.conf \
+ -x outputDataDir=output
\ No newline at end of file
diff --git a/DataTables/luban.conf b/DataTables/luban.conf
new file mode 100644
index 00000000..716d6fb4
--- /dev/null
+++ b/DataTables/luban.conf
@@ -0,0 +1,26 @@
+{
+ "groups":
+ [
+ {"names":["c"], "default":true},
+ {"names":["s"], "default":true},
+ {"names":["e"], "default":true}
+ ],
+ "schemaFiles":
+ [
+ {"fileName":"Defines", "type":""},
+ {"fileName":"Datas/__tables__.xlsx", "type":"table"},
+ {"fileName":"Datas/__beans__.xlsx", "type":"bean"},
+ {"fileName":"Datas/__enums__.xlsx", "type":"enum"}
+ ],
+ "dataDir": "Datas",
+ "targets":
+ [
+ {"name":"server", "manager":"Tables", "groups":["s"], "topModule":"cfg"},
+ {"name":"client", "manager":"Tables", "groups":["c"], "topModule":"cfg"},
+ {"name":"all", "manager":"Tables", "groups":["c","s","e"], "topModule":"cfg"}
+ ],
+ "xargs":
+ [
+
+ ]
+}
diff --git a/DataTables/output/demo_tbitem.json b/DataTables/output/demo_tbitem.json
new file mode 100644
index 00000000..06e888f8
--- /dev/null
+++ b/DataTables/output/demo_tbitem.json
@@ -0,0 +1,14 @@
+[
+ {
+ "id": 1001,
+ "name": "道具1",
+ "desc": "描述1",
+ "count": 10
+ },
+ {
+ "id": 1002,
+ "name": "道具2",
+ "desc": "描述2",
+ "count": 100
+ }
+]
\ No newline at end of file
diff --git a/DataTables/output/demo_tbreward.json b/DataTables/output/demo_tbreward.json
new file mode 100644
index 00000000..329a3ca7
--- /dev/null
+++ b/DataTables/output/demo_tbreward.json
@@ -0,0 +1,14 @@
+[
+ {
+ "id": 1001,
+ "name": "道具1",
+ "desc": "碎片",
+ "count": 10
+ },
+ {
+ "id": 1002,
+ "name": "道具2",
+ "desc": "金币",
+ "count": 100
+ }
+]
\ No newline at end of file
diff --git a/Tools/Luban/CommandLine.dll b/Tools/Luban/CommandLine.dll
new file mode 100644
index 00000000..3eab2be2
Binary files /dev/null and b/Tools/Luban/CommandLine.dll differ
diff --git a/Tools/Luban/ExcelDataReader.dll b/Tools/Luban/ExcelDataReader.dll
new file mode 100644
index 00000000..c730b00d
Binary files /dev/null and b/Tools/Luban/ExcelDataReader.dll differ
diff --git a/Tools/Luban/Google.Protobuf.dll b/Tools/Luban/Google.Protobuf.dll
new file mode 100644
index 00000000..3cd09501
Binary files /dev/null and b/Tools/Luban/Google.Protobuf.dll differ
diff --git a/Tools/Luban/Luban.Bson.deps.json b/Tools/Luban/Luban.Bson.deps.json
new file mode 100644
index 00000000..e2df5d08
--- /dev/null
+++ b/Tools/Luban/Luban.Bson.deps.json
@@ -0,0 +1,107 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Bson/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Newtonsoft.Json.Bson": "1.0.3"
+ },
+ "runtime": {
+ "Luban.Bson.dll": {}
+ }
+ },
+ "Newtonsoft.Json/13.0.1": {
+ "runtime": {
+ "lib/netstandard2.0/Newtonsoft.Json.dll": {
+ "assemblyVersion": "13.0.0.0",
+ "fileVersion": "13.0.1.25517"
+ }
+ }
+ },
+ "Newtonsoft.Json.Bson/1.0.3": {
+ "dependencies": {
+ "Newtonsoft.Json": "13.0.1"
+ },
+ "runtime": {
+ "lib/netstandard2.0/Newtonsoft.Json.Bson.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.3.29904"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Bson/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Newtonsoft.Json/13.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
+ "path": "newtonsoft.json/13.0.1",
+ "hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
+ },
+ "Newtonsoft.Json.Bson/1.0.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bCcwagnHfYnhwQfY1criEcn6Hy9PtBuVnZu0pA8hmRhuR3jI/8WxVgoVAdNw9BJ3JHkxmWJzpj/AQy+PMMLqxg==",
+ "path": "newtonsoft.json.bson/1.0.3",
+ "hashPath": "newtonsoft.json.bson.1.0.3.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Bson.dll b/Tools/Luban/Luban.Bson.dll
new file mode 100644
index 00000000..1b396a72
Binary files /dev/null and b/Tools/Luban/Luban.Bson.dll differ
diff --git a/Tools/Luban/Luban.CSharp.deps.json b/Tools/Luban/Luban.CSharp.deps.json
new file mode 100644
index 00000000..fdab8291
--- /dev/null
+++ b/Tools/Luban/Luban.CSharp.deps.json
@@ -0,0 +1,73 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.CSharp/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataValidator.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.CSharp.dll": {}
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "Luban.DataValidator.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataValidator.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.CSharp/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "Luban.DataValidator.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.CSharp.dll b/Tools/Luban/Luban.CSharp.dll
new file mode 100644
index 00000000..388a69a6
Binary files /dev/null and b/Tools/Luban/Luban.CSharp.dll differ
diff --git a/Tools/Luban/Luban.Core.deps.json b/Tools/Luban/Luban.Core.deps.json
new file mode 100644
index 00000000..03f04879
--- /dev/null
+++ b/Tools/Luban/Luban.Core.deps.json
@@ -0,0 +1,57 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {}
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Core.dll b/Tools/Luban/Luban.Core.dll
new file mode 100644
index 00000000..6deb2c3e
Binary files /dev/null and b/Tools/Luban/Luban.Core.dll differ
diff --git a/Tools/Luban/Luban.Cpp.deps.json b/Tools/Luban/Luban.Cpp.deps.json
new file mode 100644
index 00000000..f01523e4
--- /dev/null
+++ b/Tools/Luban/Luban.Cpp.deps.json
@@ -0,0 +1,73 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Cpp/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Cpp.dll": {}
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Cpp/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Cpp.dll b/Tools/Luban/Luban.Cpp.dll
new file mode 100644
index 00000000..f0629b76
Binary files /dev/null and b/Tools/Luban/Luban.Cpp.dll differ
diff --git a/Tools/Luban/Luban.Dart.deps.json b/Tools/Luban/Luban.Dart.deps.json
new file mode 100644
index 00000000..a9857b1d
--- /dev/null
+++ b/Tools/Luban/Luban.Dart.deps.json
@@ -0,0 +1,73 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Dart/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Dart.dll": {}
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Dart/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Dart.dll b/Tools/Luban/Luban.Dart.dll
new file mode 100644
index 00000000..52022a2d
Binary files /dev/null and b/Tools/Luban/Luban.Dart.dll differ
diff --git a/Tools/Luban/Luban.DataLoader.Builtin.deps.json b/Tools/Luban/Luban.DataLoader.Builtin.deps.json
new file mode 100644
index 00000000..62beda5e
--- /dev/null
+++ b/Tools/Luban/Luban.DataLoader.Builtin.deps.json
@@ -0,0 +1,547 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {}
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.DataLoader.Builtin.dll b/Tools/Luban/Luban.DataLoader.Builtin.dll
new file mode 100644
index 00000000..1fc1e816
Binary files /dev/null and b/Tools/Luban/Luban.DataLoader.Builtin.dll differ
diff --git a/Tools/Luban/Luban.DataTarget.Builtin.deps.json b/Tools/Luban/Luban.DataTarget.Builtin.deps.json
new file mode 100644
index 00000000..45659dd2
--- /dev/null
+++ b/Tools/Luban/Luban.DataTarget.Builtin.deps.json
@@ -0,0 +1,564 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataTarget.Builtin.dll": {}
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.DataTarget.Builtin.dll b/Tools/Luban/Luban.DataTarget.Builtin.dll
new file mode 100644
index 00000000..81ab140c
Binary files /dev/null and b/Tools/Luban/Luban.DataTarget.Builtin.dll differ
diff --git a/Tools/Luban/Luban.DataValidator.Builtin.deps.json b/Tools/Luban/Luban.DataValidator.Builtin.deps.json
new file mode 100644
index 00000000..0616312b
--- /dev/null
+++ b/Tools/Luban/Luban.DataValidator.Builtin.deps.json
@@ -0,0 +1,73 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.DataValidator.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataValidator.Builtin.dll": {}
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.DataValidator.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.DataValidator.Builtin.dll b/Tools/Luban/Luban.DataValidator.Builtin.dll
new file mode 100644
index 00000000..92459a43
Binary files /dev/null and b/Tools/Luban/Luban.DataValidator.Builtin.dll differ
diff --git a/Tools/Luban/Luban.FlatBuffers.deps.json b/Tools/Luban/Luban.FlatBuffers.deps.json
new file mode 100644
index 00000000..d7e57c1c
--- /dev/null
+++ b/Tools/Luban/Luban.FlatBuffers.deps.json
@@ -0,0 +1,581 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.FlatBuffers/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.FlatBuffers.dll": {}
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataTarget.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.FlatBuffers/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.FlatBuffers.dll b/Tools/Luban/Luban.FlatBuffers.dll
new file mode 100644
index 00000000..b29289e5
Binary files /dev/null and b/Tools/Luban/Luban.FlatBuffers.dll differ
diff --git a/Tools/Luban/Luban.Gdscript.deps.json b/Tools/Luban/Luban.Gdscript.deps.json
new file mode 100644
index 00000000..eec881e9
--- /dev/null
+++ b/Tools/Luban/Luban.Gdscript.deps.json
@@ -0,0 +1,581 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Gdscript/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Gdscript.dll": {}
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataTarget.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Gdscript/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Gdscript.dll b/Tools/Luban/Luban.Gdscript.dll
new file mode 100644
index 00000000..fbaee2b7
Binary files /dev/null and b/Tools/Luban/Luban.Gdscript.dll differ
diff --git a/Tools/Luban/Luban.Golang.deps.json b/Tools/Luban/Luban.Golang.deps.json
new file mode 100644
index 00000000..eb357886
--- /dev/null
+++ b/Tools/Luban/Luban.Golang.deps.json
@@ -0,0 +1,73 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Golang/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Golang.dll": {}
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Golang/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Golang.dll b/Tools/Luban/Luban.Golang.dll
new file mode 100644
index 00000000..9b27eb1e
Binary files /dev/null and b/Tools/Luban/Luban.Golang.dll differ
diff --git a/Tools/Luban/Luban.Java.deps.json b/Tools/Luban/Luban.Java.deps.json
new file mode 100644
index 00000000..83a9ec06
--- /dev/null
+++ b/Tools/Luban/Luban.Java.deps.json
@@ -0,0 +1,73 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Java/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Java.dll": {}
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Java/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Java.dll b/Tools/Luban/Luban.Java.dll
new file mode 100644
index 00000000..c3f20931
Binary files /dev/null and b/Tools/Luban/Luban.Java.dll differ
diff --git a/Tools/Luban/Luban.Javascript.deps.json b/Tools/Luban/Luban.Javascript.deps.json
new file mode 100644
index 00000000..56a53f12
--- /dev/null
+++ b/Tools/Luban/Luban.Javascript.deps.json
@@ -0,0 +1,615 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Javascript/1.0.0": {
+ "dependencies": {
+ "Luban.CSharp": "1.0.0",
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Javascript.dll": {}
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.CSharp/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataValidator.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.CSharp.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataTarget.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataValidator.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataValidator.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Javascript/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.CSharp/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataValidator.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Javascript.dll b/Tools/Luban/Luban.Javascript.dll
new file mode 100644
index 00000000..e1fda019
Binary files /dev/null and b/Tools/Luban/Luban.Javascript.dll differ
diff --git a/Tools/Luban/Luban.L10N.deps.json b/Tools/Luban/Luban.L10N.deps.json
new file mode 100644
index 00000000..605a6037
--- /dev/null
+++ b/Tools/Luban/Luban.L10N.deps.json
@@ -0,0 +1,564 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.L10N/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.L10N.dll": {}
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.L10N/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.L10N.dll b/Tools/Luban/Luban.L10N.dll
new file mode 100644
index 00000000..247d32ea
Binary files /dev/null and b/Tools/Luban/Luban.L10N.dll differ
diff --git a/Tools/Luban/Luban.Lua.deps.json b/Tools/Luban/Luban.Lua.deps.json
new file mode 100644
index 00000000..dd9127d7
--- /dev/null
+++ b/Tools/Luban/Luban.Lua.deps.json
@@ -0,0 +1,73 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Lua/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Lua.dll": {}
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Lua/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Lua.dll b/Tools/Luban/Luban.Lua.dll
new file mode 100644
index 00000000..4aa9dbcb
Binary files /dev/null and b/Tools/Luban/Luban.Lua.dll differ
diff --git a/Tools/Luban/Luban.MsgPack.deps.json b/Tools/Luban/Luban.MsgPack.deps.json
new file mode 100644
index 00000000..8d9d9fd6
--- /dev/null
+++ b/Tools/Luban/Luban.MsgPack.deps.json
@@ -0,0 +1,123 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.MsgPack/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "MessagePack": "2.5.192"
+ },
+ "runtime": {
+ "Luban.MsgPack.dll": {}
+ }
+ },
+ "MessagePack/2.5.192": {
+ "dependencies": {
+ "MessagePack.Annotations": "2.5.192",
+ "Microsoft.NET.StringTools": "17.6.3"
+ },
+ "runtime": {
+ "lib/net6.0/MessagePack.dll": {
+ "assemblyVersion": "2.5.0.0",
+ "fileVersion": "2.5.192.54228"
+ }
+ }
+ },
+ "MessagePack.Annotations/2.5.192": {
+ "runtime": {
+ "lib/netstandard2.0/MessagePack.Annotations.dll": {
+ "assemblyVersion": "2.5.0.0",
+ "fileVersion": "2.5.192.54228"
+ }
+ }
+ },
+ "Microsoft.NET.StringTools/17.6.3": {
+ "runtime": {
+ "lib/net7.0/Microsoft.NET.StringTools.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "17.6.3.22601"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.MsgPack/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "MessagePack/2.5.192": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Jtle5MaFeIFkdXtxQeL9Tu2Y3HsAQGoSntOzrn6Br/jrl6c8QmG22GEioT5HBtZJR0zw0s46OnKU8ei2M3QifA==",
+ "path": "messagepack/2.5.192",
+ "hashPath": "messagepack.2.5.192.nupkg.sha512"
+ },
+ "MessagePack.Annotations/2.5.192": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jaJuwcgovWIZ8Zysdyf3b7b34/BrADw4v82GaEZymUhDd3ScMPrYd/cttekeDteJJPXseJxp04yTIcxiVUjTWg==",
+ "path": "messagepack.annotations/2.5.192",
+ "hashPath": "messagepack.annotations.2.5.192.nupkg.sha512"
+ },
+ "Microsoft.NET.StringTools/17.6.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N0ZIanl1QCgvUumEL1laasU0a7sOE5ZwLZVTn0pAePnfhq8P7SvTjF8Axq+CnavuQkmdQpGNXQ1efZtu5kDFbA==",
+ "path": "microsoft.net.stringtools/17.6.3",
+ "hashPath": "microsoft.net.stringtools.17.6.3.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.MsgPack.dll b/Tools/Luban/Luban.MsgPack.dll
new file mode 100644
index 00000000..7fdf878c
Binary files /dev/null and b/Tools/Luban/Luban.MsgPack.dll differ
diff --git a/Tools/Luban/Luban.PHP.deps.json b/Tools/Luban/Luban.PHP.deps.json
new file mode 100644
index 00000000..6447dd88
--- /dev/null
+++ b/Tools/Luban/Luban.PHP.deps.json
@@ -0,0 +1,581 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.PHP/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.PHP.dll": {}
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataTarget.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.PHP/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.PHP.dll b/Tools/Luban/Luban.PHP.dll
new file mode 100644
index 00000000..39d2340d
Binary files /dev/null and b/Tools/Luban/Luban.PHP.dll differ
diff --git a/Tools/Luban/Luban.Protobuf.deps.json b/Tools/Luban/Luban.Protobuf.deps.json
new file mode 100644
index 00000000..a791bf76
--- /dev/null
+++ b/Tools/Luban/Luban.Protobuf.deps.json
@@ -0,0 +1,597 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Protobuf/1.0.0": {
+ "dependencies": {
+ "Google.Protobuf": "3.29.0",
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Protobuf.dll": {}
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Google.Protobuf/3.29.0": {
+ "runtime": {
+ "lib/net5.0/Google.Protobuf.dll": {
+ "assemblyVersion": "3.29.0.0",
+ "fileVersion": "3.29.0.0"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataTarget.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Protobuf/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Google.Protobuf/3.29.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-l1012jd1Y2XsLQ+h9cXE7Bo3WruXql3Xc3KP/z+yZDJMSkfb2guslHCxwFsqd2ScHB0h2J7Yuy255RrBD/DGBw==",
+ "path": "google.protobuf/3.29.0",
+ "hashPath": "google.protobuf.3.29.0.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Protobuf.dll b/Tools/Luban/Luban.Protobuf.dll
new file mode 100644
index 00000000..878808c3
Binary files /dev/null and b/Tools/Luban/Luban.Protobuf.dll differ
diff --git a/Tools/Luban/Luban.Python.deps.json b/Tools/Luban/Luban.Python.deps.json
new file mode 100644
index 00000000..9afffa95
--- /dev/null
+++ b/Tools/Luban/Luban.Python.deps.json
@@ -0,0 +1,581 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Python/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Python.dll": {}
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataTarget.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Python/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Python.dll b/Tools/Luban/Luban.Python.dll
new file mode 100644
index 00000000..2ad8a080
Binary files /dev/null and b/Tools/Luban/Luban.Python.dll differ
diff --git a/Tools/Luban/Luban.Rust.deps.json b/Tools/Luban/Luban.Rust.deps.json
new file mode 100644
index 00000000..63c7d1a1
--- /dev/null
+++ b/Tools/Luban/Luban.Rust.deps.json
@@ -0,0 +1,73 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Rust/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Rust.dll": {}
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Rust/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Rust.dll b/Tools/Luban/Luban.Rust.dll
new file mode 100644
index 00000000..89d0184c
Binary files /dev/null and b/Tools/Luban/Luban.Rust.dll differ
diff --git a/Tools/Luban/Luban.Schema.Builtin.deps.json b/Tools/Luban/Luban.Schema.Builtin.deps.json
new file mode 100644
index 00000000..0f78b600
--- /dev/null
+++ b/Tools/Luban/Luban.Schema.Builtin.deps.json
@@ -0,0 +1,564 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Schema.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Schema.Builtin.dll": {}
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Schema.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Schema.Builtin.dll b/Tools/Luban/Luban.Schema.Builtin.dll
new file mode 100644
index 00000000..2aa234c9
Binary files /dev/null and b/Tools/Luban/Luban.Schema.Builtin.dll differ
diff --git a/Tools/Luban/Luban.Schema.Builtin.runtimeconfig.json b/Tools/Luban/Luban.Schema.Builtin.runtimeconfig.json
new file mode 100644
index 00000000..44665024
--- /dev/null
+++ b/Tools/Luban/Luban.Schema.Builtin.runtimeconfig.json
@@ -0,0 +1,14 @@
+{
+ "runtimeOptions": {
+ "tfm": "net8.0",
+ "rollForward": "LatestMinor",
+ "framework": {
+ "name": "Microsoft.NETCore.App",
+ "version": "8.0.0"
+ },
+ "configProperties": {
+ "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Typescript.deps.json b/Tools/Luban/Luban.Typescript.deps.json
new file mode 100644
index 00000000..e5855b06
--- /dev/null
+++ b/Tools/Luban/Luban.Typescript.deps.json
@@ -0,0 +1,615 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban.Typescript/1.0.0": {
+ "dependencies": {
+ "Luban.CSharp": "1.0.0",
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Typescript.dll": {}
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.CSharp/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataValidator.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.CSharp.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataTarget.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataValidator.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataValidator.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban.Typescript/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.CSharp/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataValidator.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.Typescript.dll b/Tools/Luban/Luban.Typescript.dll
new file mode 100644
index 00000000..40e96e93
Binary files /dev/null and b/Tools/Luban/Luban.Typescript.dll differ
diff --git a/Tools/Luban/Luban.deps.json b/Tools/Luban/Luban.deps.json
new file mode 100644
index 00000000..2173ba0e
--- /dev/null
+++ b/Tools/Luban/Luban.deps.json
@@ -0,0 +1,1034 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Luban/4.4.0": {
+ "dependencies": {
+ "CommandLineParser": "2.9.1",
+ "Luban.Bson": "1.0.0",
+ "Luban.CSharp": "1.0.0",
+ "Luban.Core": "1.0.0",
+ "Luban.Cpp": "1.0.0",
+ "Luban.Dart": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0",
+ "Luban.DataValidator.Builtin": "1.0.0",
+ "Luban.FlatBuffers": "1.0.0",
+ "Luban.Gdscript": "1.0.0",
+ "Luban.Golang": "1.0.0",
+ "Luban.Java": "1.0.0",
+ "Luban.Javascript": "1.0.0",
+ "Luban.L10N": "1.0.0",
+ "Luban.Lua": "1.0.0",
+ "Luban.MsgPack": "1.0.0",
+ "Luban.PHP": "1.0.0",
+ "Luban.Protobuf": "1.0.0",
+ "Luban.Python": "1.0.0",
+ "Luban.Rust": "1.0.0",
+ "Luban.Schema.Builtin": "1.0.0",
+ "Luban.Typescript": "1.0.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.dll": {}
+ }
+ },
+ "CommandLineParser/2.9.1": {
+ "runtime": {
+ "lib/netstandard2.0/CommandLine.dll": {
+ "assemblyVersion": "2.9.1.0",
+ "fileVersion": "2.9.1.0"
+ }
+ }
+ },
+ "ExcelDataReader/3.7.0": {
+ "runtime": {
+ "lib/netstandard2.1/ExcelDataReader.dll": {
+ "assemblyVersion": "3.7.0.0",
+ "fileVersion": "3.7.0.0"
+ }
+ }
+ },
+ "Google.Protobuf/3.29.0": {
+ "runtime": {
+ "lib/net5.0/Google.Protobuf.dll": {
+ "assemblyVersion": "3.29.0.0",
+ "fileVersion": "3.29.0.0"
+ }
+ }
+ },
+ "MessagePack/2.5.192": {
+ "dependencies": {
+ "MessagePack.Annotations": "2.5.192",
+ "Microsoft.NET.StringTools": "17.6.3"
+ },
+ "runtime": {
+ "lib/net6.0/MessagePack.dll": {
+ "assemblyVersion": "2.5.0.0",
+ "fileVersion": "2.5.192.54228"
+ }
+ }
+ },
+ "MessagePack.Annotations/2.5.192": {
+ "runtime": {
+ "lib/netstandard2.0/MessagePack.Annotations.dll": {
+ "assemblyVersion": "2.5.0.0",
+ "fileVersion": "2.5.192.54228"
+ }
+ }
+ },
+ "Microsoft.CSharp/4.5.0": {},
+ "Microsoft.NET.StringTools/17.6.3": {
+ "runtime": {
+ "lib/net7.0/Microsoft.NET.StringTools.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "17.6.3.22601"
+ }
+ }
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "NeoLua/1.3.14": {
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0"
+ },
+ "runtime": {
+ "lib/net5.0/Neo.Lua.dll": {
+ "assemblyVersion": "5.3.0.0",
+ "fileVersion": "1.3.14.0"
+ }
+ },
+ "resources": {
+ "lib/net5.0/de/Neo.Lua.resources.dll": {
+ "locale": "de"
+ }
+ }
+ },
+ "Newtonsoft.Json/13.0.1": {
+ "runtime": {
+ "lib/netstandard2.0/Newtonsoft.Json.dll": {
+ "assemblyVersion": "13.0.0.0",
+ "fileVersion": "13.0.1.25517"
+ }
+ }
+ },
+ "Newtonsoft.Json.Bson/1.0.3": {
+ "dependencies": {
+ "Newtonsoft.Json": "13.0.1"
+ },
+ "runtime": {
+ "lib/netstandard2.0/Newtonsoft.Json.Bson.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.3.29904"
+ }
+ }
+ },
+ "NLog/5.3.4": {
+ "runtime": {
+ "lib/netstandard2.0/NLog.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.3.4.2778"
+ }
+ }
+ },
+ "Scriban/5.12.0": {
+ "runtime": {
+ "lib/net7.0/Scriban.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.12.0.0"
+ }
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "Ude.NetStandard/1.2.0": {
+ "runtime": {
+ "lib/netstandard2.0/Ude.NetStandard.dll": {
+ "assemblyVersion": "1.0.2.0",
+ "fileVersion": "1.0.2.0"
+ }
+ }
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Serialization.Primitives": "4.1.1",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/YamlDotNet.NetCore.dll": {
+ "assemblyVersion": "0.0.1.0",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Luban.Bson/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Newtonsoft.Json.Bson": "1.0.3"
+ },
+ "runtime": {
+ "Luban.Bson.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Core/1.0.0": {
+ "dependencies": {
+ "NLog": "5.3.4",
+ "Scriban": "5.12.0"
+ },
+ "runtime": {
+ "Luban.Core.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Cpp/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Cpp.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.CSharp/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataValidator.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.CSharp.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Dart/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Dart.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "dependencies": {
+ "ExcelDataReader": "3.7.0",
+ "Luban.Core": "1.0.0",
+ "NeoLua": "1.3.14",
+ "Ude.NetStandard": "1.2.0",
+ "YamlDotNet.NetCore": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataLoader.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataTarget.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.DataValidator.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.DataValidator.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.FlatBuffers/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.FlatBuffers.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Gdscript/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Gdscript.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Golang/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Golang.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Java/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Java.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Javascript/1.0.0": {
+ "dependencies": {
+ "Luban.CSharp": "1.0.0",
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Javascript.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.L10N/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.L10N.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Lua/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Lua.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.MsgPack/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "MessagePack": "2.5.192"
+ },
+ "runtime": {
+ "Luban.MsgPack.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.PHP/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.PHP.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Protobuf/1.0.0": {
+ "dependencies": {
+ "Google.Protobuf": "3.29.0",
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Protobuf.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Python/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Python.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Rust/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Rust.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Schema.Builtin/1.0.0": {
+ "dependencies": {
+ "Luban.Core": "1.0.0",
+ "Luban.DataLoader.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Schema.Builtin.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "Luban.Typescript/1.0.0": {
+ "dependencies": {
+ "Luban.CSharp": "1.0.0",
+ "Luban.Core": "1.0.0",
+ "Luban.DataTarget.Builtin": "1.0.0"
+ },
+ "runtime": {
+ "Luban.Typescript.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Luban/4.4.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "CommandLineParser/2.9.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA==",
+ "path": "commandlineparser/2.9.1",
+ "hashPath": "commandlineparser.2.9.1.nupkg.sha512"
+ },
+ "ExcelDataReader/3.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AMv3oDETRHSRyXC17rBtKH45qIfFyo433LMeaMB3u4RNr/c9Luuc0Z+JMP6+3Cx9n4wXqFqcrEIVxrf/GgYnZg==",
+ "path": "exceldatareader/3.7.0",
+ "hashPath": "exceldatareader.3.7.0.nupkg.sha512"
+ },
+ "Google.Protobuf/3.29.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-l1012jd1Y2XsLQ+h9cXE7Bo3WruXql3Xc3KP/z+yZDJMSkfb2guslHCxwFsqd2ScHB0h2J7Yuy255RrBD/DGBw==",
+ "path": "google.protobuf/3.29.0",
+ "hashPath": "google.protobuf.3.29.0.nupkg.sha512"
+ },
+ "MessagePack/2.5.192": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Jtle5MaFeIFkdXtxQeL9Tu2Y3HsAQGoSntOzrn6Br/jrl6c8QmG22GEioT5HBtZJR0zw0s46OnKU8ei2M3QifA==",
+ "path": "messagepack/2.5.192",
+ "hashPath": "messagepack.2.5.192.nupkg.sha512"
+ },
+ "MessagePack.Annotations/2.5.192": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jaJuwcgovWIZ8Zysdyf3b7b34/BrADw4v82GaEZymUhDd3ScMPrYd/cttekeDteJJPXseJxp04yTIcxiVUjTWg==",
+ "path": "messagepack.annotations/2.5.192",
+ "hashPath": "messagepack.annotations.2.5.192.nupkg.sha512"
+ },
+ "Microsoft.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
+ "path": "microsoft.csharp/4.5.0",
+ "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.NET.StringTools/17.6.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N0ZIanl1QCgvUumEL1laasU0a7sOE5ZwLZVTn0pAePnfhq8P7SvTjF8Axq+CnavuQkmdQpGNXQ1efZtu5kDFbA==",
+ "path": "microsoft.net.stringtools/17.6.3",
+ "hashPath": "microsoft.net.stringtools.17.6.3.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "path": "microsoft.netcore.platforms/1.0.1",
+ "hashPath": "microsoft.netcore.platforms.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "NeoLua/1.3.14": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BXIUN+ePY2wx3ZGiSmR8KZKD85s01pXI690orrB3u/biB8R0nalziGw+iGbPBq1Cuz8Upggpw2ERF84POXWTCQ==",
+ "path": "neolua/1.3.14",
+ "hashPath": "neolua.1.3.14.nupkg.sha512"
+ },
+ "Newtonsoft.Json/13.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
+ "path": "newtonsoft.json/13.0.1",
+ "hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
+ },
+ "Newtonsoft.Json.Bson/1.0.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bCcwagnHfYnhwQfY1criEcn6Hy9PtBuVnZu0pA8hmRhuR3jI/8WxVgoVAdNw9BJ3JHkxmWJzpj/AQy+PMMLqxg==",
+ "path": "newtonsoft.json.bson/1.0.3",
+ "hashPath": "newtonsoft.json.bson.1.0.3.nupkg.sha512"
+ },
+ "NLog/5.3.4": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gLy7+O1hEYJXIlcTr1/VWjGXrZTQFZzYNO18IWasD64pNwz0BreV+nHLxWKXWZzERRzoKnsk2XYtwLkTVk7J1A==",
+ "path": "nlog/5.3.4",
+ "hashPath": "nlog.5.3.4.nupkg.sha512"
+ },
+ "Scriban/5.12.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/YTTCxjBIpfwX3MKMT4JMFVl1jX4IHW7zih+Bg3cTIkzGnbFt+B3l/k90ILDw6DRiFE7T+VxEyls7zk4p029ng==",
+ "path": "scriban/5.12.0",
+ "hashPath": "scriban.5.12.0.nupkg.sha512"
+ },
+ "System.Collections/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "path": "system.collections/4.0.11",
+ "hashPath": "system.collections.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "path": "system.diagnostics.debug/4.0.11",
+ "hashPath": "system.diagnostics.debug.4.0.11.nupkg.sha512"
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "path": "system.diagnostics.tools/4.0.1",
+ "hashPath": "system.diagnostics.tools.4.0.1.nupkg.sha512"
+ },
+ "System.Globalization/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "path": "system.globalization/4.0.11",
+ "hashPath": "system.globalization.4.0.11.nupkg.sha512"
+ },
+ "System.IO/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "path": "system.io/4.1.0",
+ "hashPath": "system.io.4.1.0.nupkg.sha512"
+ },
+ "System.Linq/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "path": "system.linq/4.1.0",
+ "hashPath": "system.linq.4.1.0.nupkg.sha512"
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "path": "system.linq.expressions/4.1.0",
+ "hashPath": "system.linq.expressions.4.1.0.nupkg.sha512"
+ },
+ "System.ObjectModel/4.0.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "path": "system.objectmodel/4.0.12",
+ "hashPath": "system.objectmodel.4.0.12.nupkg.sha512"
+ },
+ "System.Reflection/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "path": "system.reflection/4.1.0",
+ "hashPath": "system.reflection.4.1.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "path": "system.reflection.emit/4.0.1",
+ "hashPath": "system.reflection.emit.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "path": "system.reflection.emit.ilgeneration/4.0.1",
+ "hashPath": "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "path": "system.reflection.emit.lightweight/4.0.1",
+ "hashPath": "system.reflection.emit.lightweight.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "path": "system.reflection.extensions/4.0.1",
+ "hashPath": "system.reflection.extensions.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "path": "system.reflection.primitives/4.0.1",
+ "hashPath": "system.reflection.primitives.4.0.1.nupkg.sha512"
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "path": "system.reflection.typeextensions/4.1.0",
+ "hashPath": "system.reflection.typeextensions.4.1.0.nupkg.sha512"
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "path": "system.resources.resourcemanager/4.0.1",
+ "hashPath": "system.resources.resourcemanager.4.0.1.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "path": "system.runtime.extensions/4.1.0",
+ "hashPath": "system.runtime.extensions.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.Serialization.Primitives/4.1.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
+ "path": "system.runtime.serialization.primitives/4.1.1",
+ "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512"
+ },
+ "System.Text.Encoding/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "path": "system.text.encoding/4.0.11",
+ "hashPath": "system.text.encoding.4.0.11.nupkg.sha512"
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "path": "system.text.encoding.extensions/4.0.11",
+ "hashPath": "system.text.encoding.extensions.4.0.11.nupkg.sha512"
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "path": "system.text.regularexpressions/4.1.0",
+ "hashPath": "system.text.regularexpressions.4.1.0.nupkg.sha512"
+ },
+ "System.Threading/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "path": "system.threading/4.0.11",
+ "hashPath": "system.threading.4.0.11.nupkg.sha512"
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "path": "system.threading.tasks/4.0.11",
+ "hashPath": "system.threading.tasks.4.0.11.nupkg.sha512"
+ },
+ "Ude.NetStandard/1.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zRWpPAxBg3lNdm4UiKixTe+DFPoNid9CILggTCy/0WR2WKETe17kTWhiiIpLB2k5IEgnvA0QLfKlvd6Tvu0pzA==",
+ "path": "ude.netstandard/1.2.0",
+ "hashPath": "ude.netstandard.1.2.0.nupkg.sha512"
+ },
+ "YamlDotNet.NetCore/1.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vPiKF4Yf02MS96Nzwcr8+WrvlhTx+camOgUzxhazU0hCzs2ESetWDCxaIT/MYdAw2oONYem1ow9PXWJjHkRUDw==",
+ "path": "yamldotnet.netcore/1.0.0",
+ "hashPath": "yamldotnet.netcore.1.0.0.nupkg.sha512"
+ },
+ "Luban.Bson/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Core/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Cpp/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.CSharp/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Dart/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataLoader.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataTarget.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.DataValidator.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.FlatBuffers/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Gdscript/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Golang/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Java/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Javascript/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.L10N/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Lua/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.MsgPack/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.PHP/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Protobuf/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Python/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Rust/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Schema.Builtin/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Luban.Typescript/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Luban.dll b/Tools/Luban/Luban.dll
new file mode 100644
index 00000000..0398f25e
Binary files /dev/null and b/Tools/Luban/Luban.dll differ
diff --git a/Tools/Luban/Luban.exe b/Tools/Luban/Luban.exe
new file mode 100644
index 00000000..1b79a050
Binary files /dev/null and b/Tools/Luban/Luban.exe differ
diff --git a/Tools/Luban/Luban.runtimeconfig.json b/Tools/Luban/Luban.runtimeconfig.json
new file mode 100644
index 00000000..d7845156
--- /dev/null
+++ b/Tools/Luban/Luban.runtimeconfig.json
@@ -0,0 +1,13 @@
+{
+ "runtimeOptions": {
+ "tfm": "net8.0",
+ "framework": {
+ "name": "Microsoft.NETCore.App",
+ "version": "8.0.0"
+ },
+ "configProperties": {
+ "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/MessagePack.Annotations.dll b/Tools/Luban/MessagePack.Annotations.dll
new file mode 100644
index 00000000..b3a3f489
Binary files /dev/null and b/Tools/Luban/MessagePack.Annotations.dll differ
diff --git a/Tools/Luban/MessagePack.dll b/Tools/Luban/MessagePack.dll
new file mode 100644
index 00000000..ed883d08
Binary files /dev/null and b/Tools/Luban/MessagePack.dll differ
diff --git a/Tools/Luban/Microsoft.NET.StringTools.dll b/Tools/Luban/Microsoft.NET.StringTools.dll
new file mode 100644
index 00000000..7d304399
Binary files /dev/null and b/Tools/Luban/Microsoft.NET.StringTools.dll differ
diff --git a/Tools/Luban/NLog.dll b/Tools/Luban/NLog.dll
new file mode 100644
index 00000000..49604e19
Binary files /dev/null and b/Tools/Luban/NLog.dll differ
diff --git a/Tools/Luban/Neo.Lua.dll b/Tools/Luban/Neo.Lua.dll
new file mode 100644
index 00000000..406f580c
Binary files /dev/null and b/Tools/Luban/Neo.Lua.dll differ
diff --git a/Tools/Luban/Newtonsoft.Json.Bson.dll b/Tools/Luban/Newtonsoft.Json.Bson.dll
new file mode 100644
index 00000000..159d2edc
Binary files /dev/null and b/Tools/Luban/Newtonsoft.Json.Bson.dll differ
diff --git a/Tools/Luban/Newtonsoft.Json.dll b/Tools/Luban/Newtonsoft.Json.dll
new file mode 100644
index 00000000..1ffeabe6
Binary files /dev/null and b/Tools/Luban/Newtonsoft.Json.dll differ
diff --git a/Tools/Luban/Scriban.dll b/Tools/Luban/Scriban.dll
new file mode 100644
index 00000000..c8131e2e
Binary files /dev/null and b/Tools/Luban/Scriban.dll differ
diff --git a/Tools/Luban/Templates/common/cpp/enum.sbn b/Tools/Luban/Templates/common/cpp/enum.sbn
new file mode 100644
index 00000000..b9f3b0a5
--- /dev/null
+++ b/Tools/Luban/Templates/common/cpp/enum.sbn
@@ -0,0 +1,23 @@
+{{~
+ comment = __enum.comment
+ items = __enum.items
+~}}
+{{namespace_with_grace_begin __namespace}}
+{{~if comment != '' ~}}
+ ///
+ /// {{escape_comment comment}}
+ ///
+{{~end~}}
+ enum class {{__name}}
+ {
+ {{~ for item in items ~}}
+{{~if item.comment != '' ~}}
+ ///
+ /// {{escape_comment item.comment_or_alias}}
+ ///
+{{~end~}}
+ {{format_enum_item_name __code_style item.name}} = {{item.value}},
+ {{~end~}}
+ };
+
+{{namespace_with_grace_end __namespace}}
diff --git a/Tools/Luban/Templates/common/cs/enum.sbn b/Tools/Luban/Templates/common/cs/enum.sbn
new file mode 100644
index 00000000..4dcd9b67
--- /dev/null
+++ b/Tools/Luban/Templates/common/cs/enum.sbn
@@ -0,0 +1,28 @@
+{{~
+ comment = __enum.comment
+ items = __enum.items
+~}}
+
+
+{{namespace_with_grace_begin __namespace_with_top_module}}
+{{~if comment != '' ~}}
+ ///
+ /// {{escape_comment comment}}
+ ///
+{{~end~}}
+ {{~if __enum.is_flags~}}
+ [System.Flags]
+ {{~end~}}
+ public enum {{__name}}
+ {
+ {{~ for item in items ~}}
+{{~if item.comment != '' ~}}
+ ///
+ /// {{escape_comment item.comment_or_alias}}
+ ///
+{{~end~}}
+ {{format_enum_item_name __code_style item.name}} = {{item.value}},
+ {{~end~}}
+ }
+
+{{namespace_with_grace_end __namespace_with_top_module}}
diff --git a/Tools/Luban/Templates/common/dart/enum.sbn b/Tools/Luban/Templates/common/dart/enum.sbn
new file mode 100644
index 00000000..97417f01
--- /dev/null
+++ b/Tools/Luban/Templates/common/dart/enum.sbn
@@ -0,0 +1,30 @@
+{{~if __this.comment != '' ~}}
+//{{escape_comment __this.comment}}
+{{~end~}}
+enum {{__name}}
+{
+ {{~if !has_enum_item __this~}}
+ empty_placeholder(0);
+ {{~else~}}
+{{~if !__this.has_zero_value_item ~}}
+ None(0),
+{{~end~}}
+ {{~end~}}
+
+
+ {{~ for item in __this.items ~}}
+{{~if item.comment_or_alias != '' ~}}
+ //{{escape_comment item.comment_or_alias}}
+{{~end~}}
+ {{item.name}}({{item.int_value}}) {{is_last_enum_item __this item.int_value ? ';' : ','}}
+
+ {{~end~}}
+ final int value;
+
+ const {{__name}}(this.value);
+
+ static {{__name}} fromValue(int value)
+ {
+ return {{__name}}.values.firstWhere((element) => element.value == value, orElse: () => fromValue(0));
+ }
+}
diff --git a/Tools/Luban/Templates/common/go/enum.sbn b/Tools/Luban/Templates/common/go/enum.sbn
new file mode 100644
index 00000000..7dd70a6b
--- /dev/null
+++ b/Tools/Luban/Templates/common/go/enum.sbn
@@ -0,0 +1,19 @@
+{{~if ___top_module != ''~}}
+package {{__top_module}};
+{{~end~}}
+
+{{~if __this.comment != '' ~}}
+/**
+ * {{escape_comment __this.comment}}
+ */
+{{~end~}}
+const (
+ {{~ for item in __this.items ~}}
+{{~if item.comment_or_alias != '' ~}}
+ /**
+ * {{escape_comment item.comment_or_alias}}
+ */
+{{~end~}}
+ {{full_name __this}}_{{item.name}} = {{item.int_value}};
+ {{~end~}}
+)
diff --git a/Tools/Luban/Templates/common/java/enum.sbn b/Tools/Luban/Templates/common/java/enum.sbn
new file mode 100644
index 00000000..142d8a13
--- /dev/null
+++ b/Tools/Luban/Templates/common/java/enum.sbn
@@ -0,0 +1,19 @@
+{{~if __namespace_with_top_module != ''~}}
+package {{__namespace_with_top_module}};
+{{~end~}}
+
+{{~if __this.comment != '' ~}}
+/**
+ * {{escape_comment __this.comment}}
+ */
+{{~end~}}
+public final class {{__name}} {
+ {{~ for item in __this.items ~}}
+{{~if item.comment_or_alias != '' ~}}
+ /**
+ * {{escape_comment item.comment_or_alias}}
+ */
+{{~end~}}
+ public static final int {{item.name}} = {{item.int_value}};
+ {{~end~}}
+}
diff --git a/Tools/Luban/Templates/common/js/enum.sbn b/Tools/Luban/Templates/common/js/enum.sbn
new file mode 100644
index 00000000..139597f9
--- /dev/null
+++ b/Tools/Luban/Templates/common/js/enum.sbn
@@ -0,0 +1,2 @@
+
+
diff --git a/Tools/Luban/Templates/common/php/enum.sbn b/Tools/Luban/Templates/common/php/enum.sbn
new file mode 100644
index 00000000..139597f9
--- /dev/null
+++ b/Tools/Luban/Templates/common/php/enum.sbn
@@ -0,0 +1,2 @@
+
+
diff --git a/Tools/Luban/Templates/common/rs/macros/Cargo.toml.sbn b/Tools/Luban/Templates/common/rs/macros/Cargo.toml.sbn
new file mode 100644
index 00000000..ae3a110d
--- /dev/null
+++ b/Tools/Luban/Templates/common/rs/macros/Cargo.toml.sbn
@@ -0,0 +1,14 @@
+[package]
+name = "macros"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+quote = "1.0.36"
+syn = "2.0.60"
+proc-macro2 = "1.0.82"
+
+[lib]
+proc-macro = true
\ No newline at end of file
diff --git a/Tools/Luban/Templates/common/rs/macros/src/lib.rs.sbn b/Tools/Luban/Templates/common/rs/macros/src/lib.rs.sbn
new file mode 100644
index 00000000..7e93f74b
--- /dev/null
+++ b/Tools/Luban/Templates/common/rs/macros/src/lib.rs.sbn
@@ -0,0 +1,65 @@
+#[macro_use]
+extern crate quote;
+
+use proc_macro::TokenStream;
+use proc_macro2;
+use quote::{format_ident, quote, ToTokens};
+use syn::{parse_macro_input, Data, DeriveInput};
+
+#[proc_macro_derive(TryIntoBase)]
+pub fn base_try_from(item: TokenStream) -> TokenStream {
+ let derive_input = parse_macro_input!(item as DeriveInput);
+ let ty_name = &derive_input.ident;
+
+ match derive_input.data {
+ Data::Struct(_) => {}
+ _ => panic!("base_try_from can only be used on structs or enums"),
+ }
+
+ let expanded = quote! {
+ impl<'a> TryFrom<&'a AbstractBase> for &'a #ty_name {
+ type Error = String;
+
+ fn try_from(value: &'a AbstractBase) -> Result {
+ let r = value.downcast_ref::<#ty_name>();
+ if let Some(v) = r {
+ return Ok(v);
+ }
+
+ Err(concat!("can not into to ", stringify!(#ty_name)).to_string())
+ }
+ }
+ };
+
+ TokenStream::from(expanded)
+}
+
+#[proc_macro_derive(EnumFromNum)]
+pub fn enum_from_num(input: TokenStream) -> TokenStream {
+ let input = parse_macro_input!(input as DeriveInput);
+ let ty_name = &input.ident;
+
+
+ let tokens = vec![
+ format_ident!("i64"),
+ format_ident!("i16"),
+ format_ident!("i8"),
+ format_ident!("isize"),
+ format_ident!("u64"),
+ format_ident!("u32"),
+ format_ident!("u16"),
+ format_ident!("u8"),
+ format_ident!("usize"),
+ format_ident!("f64"),
+ format_ident!("f32"),
+ ];
+ quote! {
+ #(
+ impl From<#tokens> for #ty_name {
+ fn from(value: #tokens) -> Self {
+ (value as i32).into()
+ }
+ }
+ )*
+ }.into()
+}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/common/ts/enum.sbn b/Tools/Luban/Templates/common/ts/enum.sbn
new file mode 100644
index 00000000..139597f9
--- /dev/null
+++ b/Tools/Luban/Templates/common/ts/enum.sbn
@@ -0,0 +1,2 @@
+
+
diff --git a/Tools/Luban/Templates/cpp-rawptr-bin/bean.sbn b/Tools/Luban/Templates/cpp-rawptr-bin/bean.sbn
new file mode 100644
index 00000000..2b856b0a
--- /dev/null
+++ b/Tools/Luban/Templates/cpp-rawptr-bin/bean.sbn
@@ -0,0 +1,32 @@
+{{namespace_with_grace_begin __namespace}}
+
+{{~if __this.comment != '' ~}}
+/**
+ * {{escape_comment __this.comment}}
+ */
+{{~end~}}
+struct {{__name}} : public{{if __parent_def_type}} {{make_cpp_name __parent_def_type.full_name}} {{else}} luban::CfgBean {{end}}
+{
+ static bool deserialize{{__name}}(::luban::ByteBuf& _buf, {{__name}}*& _out);
+
+ virtual ~{{__name}}() {}
+
+ bool deserialize(::luban::ByteBuf& _buf);
+
+ {{~ for field in __export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ {{declaring_type_name field.ctype}} {{format_field_name __code_style field.name}};
+ {{~end~}}
+
+{{~if !__this.is_abstract_type~}}
+ static constexpr int __ID__ = {{__this.id}};
+
+ int getTypeId() const override { return __ID__; }
+{{~end~}}
+};
+
+{{namespace_with_grace_end __namespace}}
diff --git a/Tools/Luban/Templates/cpp-rawptr-bin/schema_cpp.sbn b/Tools/Luban/Templates/cpp-rawptr-bin/schema_cpp.sbn
new file mode 100644
index 00000000..18c15312
--- /dev/null
+++ b/Tools/Luban/Templates/cpp-rawptr-bin/schema_cpp.sbn
@@ -0,0 +1,45 @@
+#include "{{__schema_header_file}}"
+
+{{namespace_with_grace_begin __top_module}}
+
+{{~for bean in __beans~}}
+
+bool {{make_cpp_name bean.full_name}}::deserialize(::luban::ByteBuf& _buf)
+{
+ {{~if bean.parent_def_type~}}
+ if (!{{make_cpp_name bean.parent_def_type.full_name}}::deserialize(_buf))
+ {
+ return false;
+ }
+ {{~end~}}
+
+ {{~ for field in bean.export_fields ~}}
+ {{deserialize '_buf' (format_field_name __code_style field.name) field.ctype}}
+ {{~end~}}
+
+ return true;
+}
+
+{{~if bean.is_abstract_type~}}
+bool {{make_cpp_name bean.full_name}}::deserialize{{bean.name}}(::luban::ByteBuf& _buf, {{make_cpp_name bean.full_name}}*& _out)
+{
+ int32_t id;
+ if (!_buf.readInt(id)) return false;
+ switch (id)
+ {
+ {{~for child in bean.hierarchy_not_abstract_children~}}
+ case {{make_type_cpp_name child}}::__ID__: { _out = LUBAN_NEW({{make_type_cpp_name child}}); if (_out->deserialize(_buf)) { return true; } else { _out = nullptr; return false;} }
+ {{~end~}}
+ default: { _out = nullptr; return false;}
+ }
+}
+{{~else~}}
+bool {{make_cpp_name bean.full_name}}::deserialize{{bean.name}}(::luban::ByteBuf& _buf, {{make_cpp_name bean.full_name}}*& _out)
+{
+ _out = LUBAN_NEW({{make_type_cpp_name bean}});
+ return _out->deserialize(_buf);
+}
+{{~end~}}
+
+{{~end~}}
+{{namespace_with_grace_end __top_module}}
diff --git a/Tools/Luban/Templates/cpp-rawptr-bin/schema_h.sbn b/Tools/Luban/Templates/cpp-rawptr-bin/schema_h.sbn
new file mode 100644
index 00000000..90ba84cb
--- /dev/null
+++ b/Tools/Luban/Templates/cpp-rawptr-bin/schema_h.sbn
@@ -0,0 +1,21 @@
+#pragma once
+#include
+#include
+
+#include "CfgBean.h"
+
+{{namespace_with_grace_begin __top_module}}
+
+{{__enum_codes~}}
+
+{{~for b in __beans~}}
+{{namespace_with_grace_begin b.namespace}} struct {{b.name}}; {{namespace_with_grace_end b.namespace}}
+{{~end~}}
+
+{{~__bean_codes~}}
+
+{{~__table_codes~}}
+
+{{__tables_code}}
+
+{{namespace_with_grace_end __top_module}}
diff --git a/Tools/Luban/Templates/cpp-rawptr-bin/table.sbn b/Tools/Luban/Templates/cpp-rawptr-bin/table.sbn
new file mode 100644
index 00000000..511a5463
--- /dev/null
+++ b/Tools/Luban/Templates/cpp-rawptr-bin/table.sbn
@@ -0,0 +1,134 @@
+{{namespace_with_grace_begin __namespace}}
+
+{{~if __this.comment != '' ~}}
+/**
+ * {{escape_comment __this.comment}}
+ */
+{{~end~}}
+
+class {{__name}}
+{
+ {{~if __this.is_map_table ~}}
+ private:
+ ::luban::HashMap<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap;
+ ::luban::Vector<{{declaring_type_name __value_type}}> _dataList;
+
+ public:
+ ~{{__name}}()
+ {
+ for (auto& _v : _dataList)
+ {
+ LUBAN_FREE(_v);
+ }
+ }
+
+ bool load(::luban::ByteBuf& _buf)
+ {
+ int n;
+ if (!_buf.readSize(n)) return false;
+ for(; n > 0 ; --n)
+ {
+ {{declaring_type_name __value_type}} _v;
+ {{deserialize '_buf' '_v' __value_type}}
+ _dataList.push_back(_v);
+ _dataMap[_v->{{format_field_name __code_style __this.index_field.name}}] = _v;
+ }
+ return true;
+ }
+
+ const ::luban::HashMap<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}>& getDataMap() const { return _dataMap; }
+ const ::luban::Vector<{{declaring_type_name __value_type}}>& getDataList() const { return _dataList; }
+
+ {{declaring_type_name __value_type}} get({{declaring_type_name __key_type}} key)
+ {
+ auto it = _dataMap.find(key);
+ return it != _dataMap.end() ? it->second : nullptr;
+ }
+
+ {{~else if __this.is_list_table~}}
+ private:
+ ::luban::Vector<{{declaring_type_name __value_type}}> _dataList;
+ {{~if __this.is_union_index~}}
+
+ {{~else if !__this.index_list.empty?~}}
+ {{~for idx in __this.index_list~}}
+ ::luban::HashMap<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}};
+ {{~end~}}
+ {{~else~}}
+ {{~end~}}
+
+ public:
+ bool load(::luban::ByteBuf& _buf)
+ {
+ int n;
+ if (!_buf.readSize(n)) return false;
+ for(; n > 0 ; --n)
+ {
+ {{declaring_type_name __value_type}} _v;
+ {{deserialize '_buf' '_v' __value_type}}
+ _dataList.push_back(_v);
+ {{~if __this.is_union_index~}}
+
+ {{~else if !__this.index_list.empty?~}}
+ {{~for idx in __this.index_list~}}
+ _dataMap_{{idx.index_field.name}}[_v->{{idx.index_field.name}}] = _v;
+ {{~end~}}
+ {{~else~}}
+ {{~end~}}
+ }
+ return true;
+ }
+
+ const ::luban::Vector<{{declaring_type_name __value_type}}>& getDataList() const { return _dataList; }
+
+ {{~if __this.is_union_index~}}
+
+ {{~else if !__this.index_list.empty?~}}
+ {{~for idx in __this.index_list~}}
+ ::luban::HashMap<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}>& getDataMapBy{{idx.index_field.name}}()
+ {
+ return _dataMap_{{idx.index_field.name}};
+ }
+
+ {{declaring_type_name __value_type}} getBy{{idx.index_field.name}}({{declaring_type_name idx.type}} key)
+ {
+ auto it = _dataMap_{{idx.index_field.name}}.find(key);
+ return it != _dataMap_{{idx.index_field.name}}.end() ? it->second : nullptr;
+ }
+ {{~end~}}
+ {{~else~}}
+
+ {{declaring_type_name __value_type}} get(size_t index) const
+ {
+ return _dataList[index];
+ }
+ {{~end~}}
+ {{~else~}}
+ private:
+ {{declaring_type_name __value_type}} _data;
+
+ public:
+ {{declaring_type_name __value_type}} data() const { return _data; }
+
+ bool load(::luban::ByteBuf& _buf)
+ {
+ int n;
+ if (!_buf.readSize(n)) return false;
+ if (n != 1) return false;
+ {{deserialize '_buf' '_data' __value_type}}
+ return true;
+ }
+
+
+ {{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ {{declaring_type_name field.ctype}}& {{getter_name field.name}}() const { return _data->{{format_field_name __code_style field.name}}; }
+ {{~end~}}
+ {{~end~}}
+};
+
+{{namespace_with_grace_end __namespace}}
diff --git a/Tools/Luban/Templates/cpp-rawptr-bin/tables.sbn b/Tools/Luban/Templates/cpp-rawptr-bin/tables.sbn
new file mode 100644
index 00000000..76354d59
--- /dev/null
+++ b/Tools/Luban/Templates/cpp-rawptr-bin/tables.sbn
@@ -0,0 +1,23 @@
+class {{__name}}
+{
+ public:
+ {{~for table in __tables ~}}
+{{~if table.comment != '' ~}}
+ /**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+ {{make_cpp_name table.full_name}} {{table.name}};
+ {{~end~}}
+
+ bool load(::luban::Loader<::luban::ByteBuf> loader)
+ {
+ ::luban::ByteBuf buf;
+ {{~for table in __tables~}}
+ buf.clear();
+ if (!loader(buf, "{{table.output_data_file}}")) return false;
+ if (!{{table.name}}.load(buf)) return false;
+ {{~end~}}
+ return true;
+ }
+};
diff --git a/Tools/Luban/Templates/cpp-sharedptr-bin/bean.sbn b/Tools/Luban/Templates/cpp-sharedptr-bin/bean.sbn
new file mode 100644
index 00000000..f55cd315
--- /dev/null
+++ b/Tools/Luban/Templates/cpp-sharedptr-bin/bean.sbn
@@ -0,0 +1,32 @@
+{{namespace_with_grace_begin __namespace}}
+
+{{~if __this.comment != '' ~}}
+/**
+ * {{escape_comment __this.comment}}
+ */
+{{~end~}}
+struct {{__name}} : public{{if __parent_def_type}} {{make_cpp_name __parent_def_type.full_name}} {{else}} luban::CfgBean {{end}}
+{
+ static bool deserialize{{__name}}(::luban::ByteBuf& _buf, ::luban::SharedPtr<{{__name}}>& _out);
+
+ virtual ~{{__name}}() {}
+
+ bool deserialize(::luban::ByteBuf& _buf);
+
+ {{~ for field in __export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ {{declaring_type_name field.ctype}} {{format_field_name __code_style field.name}};
+ {{~end~}}
+
+{{~if !__this.is_abstract_type~}}
+ static constexpr int __ID__ = {{__this.id}};
+
+ int getTypeId() const override { return __ID__; }
+{{~end~}}
+};
+
+{{namespace_with_grace_end __namespace}}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/cpp-sharedptr-bin/schema_cpp.sbn b/Tools/Luban/Templates/cpp-sharedptr-bin/schema_cpp.sbn
new file mode 100644
index 00000000..1d1a92c1
--- /dev/null
+++ b/Tools/Luban/Templates/cpp-sharedptr-bin/schema_cpp.sbn
@@ -0,0 +1,50 @@
+#include "{{__schema_header_file}}"
+
+{{namespace_with_grace_begin __top_module}}
+
+{{~for bean in __beans~}}
+
+bool {{make_cpp_name bean.full_name}}::deserialize(::luban::ByteBuf& _buf)
+{
+ {{~if bean.parent_def_type~}}
+ if (!{{make_cpp_name bean.parent_def_type.full_name}}::deserialize(_buf))
+ {
+ return false;
+ }
+ {{~end~}}
+
+ {{~ for field in bean.export_fields ~}}
+ {{deserialize '_buf' (format_field_name __code_style field.name) field.ctype}}
+ {{~end~}}
+
+ return true;
+}
+
+bool {{make_cpp_name bean.full_name}}::deserialize{{bean.name}}(::luban::ByteBuf& _buf, ::luban::SharedPtr<{{make_cpp_name bean.full_name}}>& _out)
+{
+{{~if bean.is_abstract_type~}}
+ int32_t id;
+ if (!_buf.readInt(id)) return false;
+ switch (id)
+ {
+ {{~for child in bean.hierarchy_not_abstract_children~}}
+ case {{make_type_cpp_name child}}::__ID__: { _out.reset(LUBAN_NEW({{make_type_cpp_name child}})); if (_out->deserialize(_buf)) { return true; } else { _out.reset(); return false;} }
+ {{~end~}}
+ default: { _out = nullptr; return false;}
+ }
+{{~else~}}
+ _out.reset(LUBAN_NEW({{make_type_cpp_name bean}}));
+ if (_out->deserialize(_buf))
+ {
+ return true;
+ }
+ else
+ {
+ _out.reset();
+ return false;
+ }
+{{~end~}}
+}
+
+{{~end~}}
+{{namespace_with_grace_end __top_module}}
diff --git a/Tools/Luban/Templates/cpp-sharedptr-bin/schema_h.sbn b/Tools/Luban/Templates/cpp-sharedptr-bin/schema_h.sbn
new file mode 100644
index 00000000..90ba84cb
--- /dev/null
+++ b/Tools/Luban/Templates/cpp-sharedptr-bin/schema_h.sbn
@@ -0,0 +1,21 @@
+#pragma once
+#include
+#include
+
+#include "CfgBean.h"
+
+{{namespace_with_grace_begin __top_module}}
+
+{{__enum_codes~}}
+
+{{~for b in __beans~}}
+{{namespace_with_grace_begin b.namespace}} struct {{b.name}}; {{namespace_with_grace_end b.namespace}}
+{{~end~}}
+
+{{~__bean_codes~}}
+
+{{~__table_codes~}}
+
+{{__tables_code}}
+
+{{namespace_with_grace_end __top_module}}
diff --git a/Tools/Luban/Templates/cpp-sharedptr-bin/table.sbn b/Tools/Luban/Templates/cpp-sharedptr-bin/table.sbn
new file mode 100644
index 00000000..f8838472
--- /dev/null
+++ b/Tools/Luban/Templates/cpp-sharedptr-bin/table.sbn
@@ -0,0 +1,140 @@
+{{namespace_with_grace_begin __namespace}}
+
+{{~if __this.comment != '' ~}}
+/**
+ * {{escape_comment __this.comment}}
+ */
+{{~end~}}
+
+class {{__name}}
+{
+ {{~if __this.is_map_table ~}}
+ private:
+ ::luban::HashMap<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap;
+ ::luban::Vector<{{declaring_type_name __value_type}}> _dataList;
+
+ public:
+ bool load(::luban::ByteBuf& _buf)
+ {
+ int n;
+ if (!_buf.readSize(n)) return false;
+ for(; n > 0 ; --n)
+ {
+ {{declaring_type_name __value_type}} _v;
+ {{deserialize '_buf' '_v' __value_type}}
+ _dataList.push_back(_v);
+ _dataMap[_v->{{format_field_name __code_style __this.index_field.name}}] = _v;
+ }
+ return true;
+ }
+
+ const ::luban::HashMap<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}>& getDataMap() const { return _dataMap; }
+ const ::luban::Vector<{{declaring_type_name __value_type}}>& getDataList() const { return _dataList; }
+
+ {{make_type_cpp_name __value_type.def_bean}}* getRaw({{declaring_type_name __key_type}} key)
+ {
+ auto it = _dataMap.find(key);
+ return it != _dataMap.end() ? it->second.get() : nullptr;
+ }
+
+ {{declaring_type_name __value_type}} get({{declaring_type_name __key_type}} key)
+ {
+ auto it = _dataMap.find(key);
+ return it != _dataMap.end() ? it->second : nullptr;
+ }
+
+ {{~else if __this.is_list_table~}}
+ private:
+ ::luban::Vector<{{declaring_type_name __value_type}}> _dataList;
+ {{~if __this.is_union_index~}}
+
+ {{~else if !__this.index_list.empty?~}}
+ {{~for idx in __this.index_list~}}
+ ::luban::HashMap<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}};
+ {{~end~}}
+ {{~else~}}
+ {{~end~}}
+
+ public:
+ bool load(::luban::ByteBuf& _buf)
+ {
+ int n;
+ if (!_buf.readSize(n)) return false;
+ for(; n > 0 ; --n)
+ {
+ {{declaring_type_name __value_type}} _v;
+ {{deserialize '_buf' '_v' __value_type}}
+ _dataList.push_back(_v);
+ {{~if __this.is_union_index~}}
+
+ {{~else if !__this.index_list.empty?~}}
+ {{~for idx in __this.index_list~}}
+ _dataMap_{{idx.index_field.name}}[_v->{{idx.index_field.name}}] = _v;
+ {{~end~}}
+ {{~else~}}
+ {{~end~}}
+ }
+ return true;
+ }
+
+ const ::luban::Vector<{{declaring_type_name __value_type}}>& getDataList() const { return _dataList; }
+
+ {{~if __this.is_union_index~}}
+
+ {{~else if !__this.index_list.empty?~}}
+ {{~for idx in __this.index_list~}}
+ ::luban::HashMap<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}>& getDataMapBy{{idx.index_field.name}}()
+ {
+ return _dataMap_{{idx.index_field.name}};
+ }
+ {{make_type_cpp_name __value_type.def_bean}}* getRawBy{{idx.index_field.name}}({{declaring_type_name idx.type}} key)
+ {
+ auto it = _dataMap_{{idx.index_field.name}}.find(key);
+ return it != _dataMap_{{idx.index_field.name}}.end() ? it->second.get() : nullptr;
+ }
+ {{declaring_type_name __value_type}} getBy{{idx.index_field.name}}({{declaring_type_name idx.type}} key)
+ {
+ auto it = _dataMap_{{idx.index_field.name}}.find(key);
+ return it != _dataMap_{{idx.index_field.name}}.end() ? it->second : nullptr;
+ }
+ {{~end~}}
+ {{~else~}}
+ {{make_type_cpp_name __value_type.def_bean}}* getRaw(size_t index) const
+ {
+ return _dataList[index].get();
+ }
+
+ {{declaring_type_name __value_type}} get(size_t index) const
+ {
+ return _dataList[index];
+ }
+ {{~end~}}
+ {{~else~}}
+ private:
+ {{declaring_type_name __value_type}} _data;
+
+ public:
+ {{declaring_type_name __value_type}} data() const { return _data; }
+
+ bool load(::luban::ByteBuf& _buf)
+ {
+ int n;
+ if (!_buf.readSize(n)) return false;
+ if (n != 1) return false;
+ {{deserialize '_buf' '_data' __value_type}}
+ return true;
+ }
+
+
+ {{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ {{declaring_type_name field.ctype}}& {{getter_name field.name}}() const { return _data->{{format_field_name __code_style field.name}}; }
+ {{~end~}}
+ {{~end~}}
+};
+
+{{namespace_with_grace_end __namespace}}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/cpp-sharedptr-bin/tables.sbn b/Tools/Luban/Templates/cpp-sharedptr-bin/tables.sbn
new file mode 100644
index 00000000..76354d59
--- /dev/null
+++ b/Tools/Luban/Templates/cpp-sharedptr-bin/tables.sbn
@@ -0,0 +1,23 @@
+class {{__name}}
+{
+ public:
+ {{~for table in __tables ~}}
+{{~if table.comment != '' ~}}
+ /**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+ {{make_cpp_name table.full_name}} {{table.name}};
+ {{~end~}}
+
+ bool load(::luban::Loader<::luban::ByteBuf> loader)
+ {
+ ::luban::ByteBuf buf;
+ {{~for table in __tables~}}
+ buf.clear();
+ if (!loader(buf, "{{table.output_data_file}}")) return false;
+ if (!{{table.name}}.load(buf)) return false;
+ {{~end~}}
+ return true;
+ }
+};
diff --git a/Tools/Luban/Templates/cs-bin/bean.sbn b/Tools/Luban/Templates/cs-bin/bean.sbn
new file mode 100644
index 00000000..47062266
--- /dev/null
+++ b/Tools/Luban/Templates/cs-bin/bean.sbn
@@ -0,0 +1,150 @@
+using Luban;
+{{
+ parent_def_type = __bean.parent_def_type
+ export_fields = __bean.export_fields
+ hierarchy_export_fields = __bean.hierarchy_export_fields
+}}
+
+{{namespace_with_grace_begin __namespace_with_top_module}}
+{{~if __bean.comment != '' ~}}
+///
+/// {{escape_comment __bean.comment}}
+///
+{{~end~}}
+{{~
+func get_ref_name
+ ret (format_property_name __code_style $0.name) + '_Ref'
+end
+
+func get_index_var_name
+ ret (format_property_name __code_style $0.name) + '_Index'
+end
+
+func generate_resolve_field_ref
+ field = $0
+ fieldName = format_property_name __code_style field.name
+ refTable = get_ref_table field
+ if can_generate_ref field
+ tableName = format_property_name __code_style refTable.name
+ if field.is_nullable
+ ret (get_ref_name field) + ' = ' + fieldName + '!= null ? tables.' + tableName + '.GetOrDefault(' + (get_value_of_nullable_type field.ctype fieldName) + ') : null;'
+ else
+ ret (get_ref_name field) + ' = tables.' + tableName + '.GetOrDefault(' + fieldName + ');'
+ end
+ else if can_generate_collection_ref field
+ collection_ref_table = get_collection_ref_table field
+ tableName = format_property_name __code_style collection_ref_table.name
+ if field.ctype.type_name == 'list' || field.ctype.type_name == 'set'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
+ line2 = 'foreach (var _v in ' + fieldName + ') { ' + (get_ref_name field) + '.Add(tables.' + tableName + '.GetOrDefault(_v)); }' + '\n'
+ ret line1 + line2
+ else if field.ctype.type_name == 'array'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_type_name collection_ref_table.value_ttype) + '[' + fieldName + '.Length];' + '\n'
+ line2 = 'for (int _i = 0; _i < ' + fieldName + '.Length; _i++) { ' + (get_ref_name field) + '[_i] = tables.' + tableName + '.GetOrDefault(' + fieldName + '[_i]); }' + '\n'
+ ret line1 + line2
+ else if field.ctype.type_name == 'map'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
+ line2 = 'foreach (var kvp in ' + fieldName + ') { ' + (get_ref_name field) + '.Add(kvp.Key, tables.' + tableName + '.GetOrDefault(kvp.Value)); }' + '\n'
+ ret line1 + line2
+ else
+ ret ''
+ end
+ else
+ if (is_field_bean_need_resolve_ref field)
+ ret fieldName + '?.ResolveRef(tables);'
+ else if (is_field_array_like_need_resolve_ref field)
+ ret 'foreach (var _e in ' + fieldName + ') { _e?.ResolveRef(tables); }'
+ else if (is_field_map_need_resolve_ref field)
+ ret 'foreach (var _e in ' + fieldName + '.Values) { _e?.ResolveRef(tables); }'
+ else
+ ret ''
+ end
+ end
+end
+~}}
+{{~if __bean.is_value_type~}}
+public partial struct {{__name}}
+{{~else~}}
+public {{class_modifier __bean}} partial class {{__name}} : {{if parent_def_type}}{{__bean.parent}}{{else}}Luban.BeanBase{{end}}
+{{~end~}}
+{
+ public {{__name}}(ByteBuf _buf) {{if parent_def_type}} : base(_buf) {{end}}
+ {
+ {{~ for field in export_fields
+ fieldName = format_property_name __code_style field.name
+ ~}}
+ {{deserialize '_buf' fieldName field.ctype}}
+ {{~if can_generate_ref field~}}
+ {{get_ref_name field}} = null;
+ {{~end~}}
+ {{~if has_index field~}}
+ foreach(var _v in {{fieldName}})
+ {
+ {{get_index_var_name field}}.Add(_v.{{format_property_name __code_style (get_index_field field).name}}, _v);
+ }
+ {{~end~}}
+ {{~end~}}
+ }
+
+ public static {{__name}} Deserialize{{__name}}(ByteBuf _buf)
+ {
+ {{~if __bean.is_abstract_type~}}
+ switch (_buf.ReadInt())
+ {
+ {{~for child in __bean.hierarchy_not_abstract_children~}}
+ case {{child.full_name}}.__ID__: return new {{child.full_name}}(_buf);
+ {{~end~}}
+ default: throw new SerializationException();
+ }
+ {{~else~}}
+ return new {{__bean.full_name}}(_buf);
+ {{~end~}}
+ }
+
+ {{~ for field in export_fields ~}}
+{{~if field.comment != '' ~}}
+ ///
+ /// {{escape_comment field.comment}}
+ ///
+{{~end~}}
+ public readonly {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}};
+ {{~if can_generate_ref field~}}
+ public {{declaring_type_name (get_ref_type field)}} {{get_ref_name field}};
+ {{~else if can_generate_collection_ref field~}}
+ public {{declaring_collection_ref_name field.ctype}} {{get_ref_name field}};
+ {{~end~}}
+ {{~if has_index field
+ indexMapType = get_index_map_type field
+ ~}}
+ public readonly {{declaring_type_name indexMapType}} {{get_index_var_name field}} = new {{declaring_type_name indexMapType}}();
+ {{~end~}}
+ {{~end~}}
+
+{{~if !__bean.is_abstract_type && !__bean.is_value_type~}}
+ public const int __ID__ = {{__bean.id}};
+ public override int GetTypeId() => __ID__;
+{{~end~}}
+
+ public {{method_modifier __bean}} void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if parent_def_type~}}
+ base.ResolveRef(tables);
+ {{~end~}}
+ {{~for field in export_fields~}}
+ {{~ line = generate_resolve_field_ref field ~}}
+ {{~ if line != ''~}}
+ {{line}}
+ {{~end~}}
+ {{~end~}}
+ }
+
+ public override string ToString()
+ {
+ return "{{full_name}}{ "
+ {{~for field in hierarchy_export_fields ~}}
+ + "{{format_field_name __code_style field.name}}:" + {{to_pretty_string (format_property_name __code_style field.name) field.ctype}} + ","
+ {{~end~}}
+ + "}";
+ }
+}
+{{namespace_with_grace_end __namespace_with_top_module}}
diff --git a/Tools/Luban/Templates/cs-bin/table.sbn b/Tools/Luban/Templates/cs-bin/table.sbn
new file mode 100644
index 00000000..d2afc6a9
--- /dev/null
+++ b/Tools/Luban/Templates/cs-bin/table.sbn
@@ -0,0 +1,169 @@
+using Luban;
+
+{{
+ key_type = __table.key_ttype
+ value_type = __table.value_ttype
+
+ func index_type_name
+ ret (declaring_type_name $0.type)
+ end
+
+ func table_union_map_type_name
+ ret 'System.Collections.Generic.Dictionary<(' + (array.each __table.index_list @index_type_name | array.join ', ') + '), ' + (declaring_type_name value_type) + '>'
+ end
+
+ func table_key_list
+ varName = $0
+ indexList = __table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
+ ret array.join indexList ', '
+ end
+
+ func table_param_def_list
+ paramList = __table.index_list |array.each do; ret (declaring_type_name $0.type) + ' ' + $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+
+ func table_param_name_list
+ paramList = __table.index_list |array.each do; ret $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+}}
+{{namespace_with_grace_begin __namespace_with_top_module}}
+{{~if __table.comment != '' ~}}
+///
+/// {{escape_comment __table.comment}}
+///
+{{~end~}}
+public partial class {{__name}}
+{
+ {{~if __table.is_map_table ~}}
+ private readonly System.Collections.Generic.Dictionary<{{declaring_type_name key_type}}, {{declaring_type_name value_type}}> _dataMap;
+ private readonly System.Collections.Generic.List<{{declaring_type_name value_type}}> _dataList;
+
+ public {{__name}}(ByteBuf _buf)
+ {
+ int n = _buf.ReadSize();
+ _dataMap = new System.Collections.Generic.Dictionary<{{declaring_type_name key_type}}, {{declaring_type_name value_type}}>(n);
+ _dataList = new System.Collections.Generic.List<{{declaring_type_name value_type}}>(n);
+ for(int i = n ; i > 0 ; --i)
+ {
+ {{declaring_type_name value_type}} _v;
+ {{deserialize '_buf' '_v' value_type}}
+ _dataList.Add(_v);
+ _dataMap.Add(_v.{{format_property_name __code_style __table.index_field.name}}, _v);
+ }
+ }
+
+ public System.Collections.Generic.Dictionary<{{declaring_type_name key_type}}, {{declaring_type_name value_type}}> DataMap => _dataMap;
+ public System.Collections.Generic.List<{{declaring_type_name value_type}}> DataList => _dataList;
+
+{{~if value_type.is_dynamic~}}
+ public T GetOrDefaultAs({{declaring_type_name key_type}} key) where T : {{declaring_type_name value_type}} => _dataMap.TryGetValue(key, out var v) ? (T)v : default;
+ public T GetAs({{declaring_type_name key_type}} key) where T : {{declaring_type_name value_type}} => (T)_dataMap[key];
+{{~end~}}
+ public {{declaring_type_name value_type}} GetOrDefault({{declaring_type_name key_type}} key) => _dataMap.TryGetValue(key, out var v) ? v : default;
+ public {{declaring_type_name value_type}} Get({{declaring_type_name key_type}} key) => _dataMap[key];
+ public {{declaring_type_name value_type}} this[{{declaring_type_name key_type}} key] => _dataMap[key];
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ foreach(var _v in _dataList)
+ {
+ _v.ResolveRef(tables);
+ }
+ {{~end~}}
+ }
+
+ {{~else if __table.is_list_table ~}}
+ private readonly System.Collections.Generic.List<{{declaring_type_name value_type}}> _dataList;
+
+ {{~if __table.is_union_index~}}
+ private {{table_union_map_type_name}} _dataMapUnion;
+ {{~else if !__table.index_list.empty?~}}
+ {{~for idx in __table.index_list~}}
+ private System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name value_type}}> _dataMap_{{idx.index_field.name}};
+ {{~end~}}
+ {{~end~}}
+
+ public {{__name}}(ByteBuf _buf)
+ {
+ int n = _buf.ReadSize();
+ _dataList = new System.Collections.Generic.List<{{declaring_type_name value_type}}>(n);
+ for(int i = n ; i > 0 ; --i)
+ {
+ {{declaring_type_name value_type}} _v;
+ {{deserialize '_buf' '_v' value_type}}
+ _dataList.Add(_v);
+ }
+ {{~if __table.is_union_index~}}
+ _dataMapUnion = new {{table_union_map_type_name}}(n);
+ foreach(var _v in _dataList)
+ {
+ _dataMapUnion.Add(({{table_key_list "_v"}}), _v);
+ }
+ {{~else if !__table.index_list.empty?~}}
+ {{~for idx in __table.index_list~}}
+ _dataMap_{{idx.index_field.name}} = new System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name value_type}}>(n);
+ {{~end~}}
+ foreach(var _v in _dataList)
+ {
+ {{~for idx in __table.index_list~}}
+ _dataMap_{{idx.index_field.name}}.Add(_v.{{format_property_name __code_style idx.index_field.name}}, _v);
+ {{~end~}}
+ }
+ {{~end~}}
+ }
+
+ public System.Collections.Generic.List<{{declaring_type_name value_type}}> DataList => _dataList;
+
+ {{~if __table.is_union_index~}}
+ public {{declaring_type_name value_type}} Get({{table_param_def_list}}) => _dataMapUnion.TryGetValue(({{table_param_name_list}}), out {{declaring_type_name value_type}} __v) ? __v : default;
+ {{~else if !__table.index_list.empty? ~}}
+ {{~for idx in __table.index_list~}}
+ public {{declaring_type_name value_type}} GetBy{{format_property_name __code_style idx.index_field.name}}({{declaring_type_name idx.type}} key) => _dataMap_{{idx.index_field.name}}.TryGetValue(key, out {{declaring_type_name value_type}} __v) ? __v : default;
+ {{~end~}}
+ {{~end~}}
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ foreach(var _v in _dataList)
+ {
+ _v.ResolveRef(tables);
+ }
+ {{~end~}}
+ }
+ {{~else~}}
+
+ private readonly {{declaring_type_name value_type}} _data;
+
+ public {{declaring_type_name value_type}} Data => _data;
+
+ public {{__name}}(ByteBuf _buf)
+ {
+ int n = _buf.ReadSize();
+ if (n != 1) throw new SerializationException("table mode=one, but size != 1");
+ {{deserialize '_buf' '_data' value_type}}
+ }
+
+
+ {{~ for field in value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ ///
+ /// {{escape_comment field.comment}}
+ ///
+{{~end~}}
+ public {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}} => _data.{{format_property_name __code_style field.name}};
+ {{~end~}}
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ _data.ResolveRef(tables);
+ {{~end~}}
+ }
+ {{~end~}}
+}
+
+{{namespace_with_grace_end __namespace_with_top_module}}
diff --git a/Tools/Luban/Templates/cs-bin/tables.sbn b/Tools/Luban/Templates/cs-bin/tables.sbn
new file mode 100644
index 00000000..be907ad7
--- /dev/null
+++ b/Tools/Luban/Templates/cs-bin/tables.sbn
@@ -0,0 +1,31 @@
+using Luban;
+
+{{namespace_with_grace_begin __namespace}}
+public partial class {{__name}}
+{
+ {{~for table in __tables ~}}
+{{~if table.comment != '' ~}}
+ ///
+ /// {{escape_comment table.comment}}
+ ///
+{{~end~}}
+ public {{table.full_name}} {{format_property_name __code_style table.name}} {get; }
+ {{~end~}}
+
+ public {{__name}}(System.Func loader)
+ {
+ {{~for table in __tables ~}}
+ {{format_property_name __code_style table.name}} = new {{table.full_name}}(loader("{{table.output_data_file}}"));
+ {{~end~}}
+ ResolveRef();
+ }
+
+ private void ResolveRef()
+ {
+ {{~for table in __tables ~}}
+ {{format_property_name __code_style table.name}}.ResolveRef(this);
+ {{~end~}}
+ }
+}
+
+{{namespace_with_grace_end __namespace}}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/cs-dotnet-json/bean.sbn b/Tools/Luban/Templates/cs-dotnet-json/bean.sbn
new file mode 100644
index 00000000..d661e085
--- /dev/null
+++ b/Tools/Luban/Templates/cs-dotnet-json/bean.sbn
@@ -0,0 +1,151 @@
+using Luban;
+using System.Text.Json;
+{{
+ parent_def_type = __bean.parent_def_type
+ export_fields = __bean.export_fields
+ hierarchy_export_fields = __bean.hierarchy_export_fields
+}}
+
+{{namespace_with_grace_begin __namespace_with_top_module}}
+{{~if __bean.comment != '' ~}}
+///
+/// {{escape_comment __bean.comment}}
+///
+{{~end~}}
+{{~
+func get_ref_name
+ ret (format_property_name __code_style $0.name) + '_Ref'
+end
+
+func get_index_var_name
+ ret (format_property_name __code_style $0.name) + '_Index'
+end
+
+func generate_resolve_field_ref
+ field = $0
+ fieldName = format_property_name __code_style field.name
+ refTable = get_ref_table field
+ if can_generate_ref field
+ tableName = format_property_name __code_style refTable.name
+ if field.is_nullable
+ ret (get_ref_name field) + ' = ' + fieldName + '!= null ? tables.' + tableName + '.GetOrDefault(' + (get_value_of_nullable_type field.ctype fieldName) + ') : null;'
+ else
+ ret (get_ref_name field) + ' = tables.' + tableName + '.GetOrDefault(' + fieldName + ');'
+ end
+ else if can_generate_collection_ref field
+ collection_ref_table = get_collection_ref_table field
+ tableName = format_property_name __code_style collection_ref_table.name
+ if field.ctype.type_name == 'list' || field.ctype.type_name == 'set'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
+ line2 = 'foreach (var _v in ' + fieldName + ') { ' + (get_ref_name field) + '.Add(tables.' + tableName + '.GetOrDefault(_v)); }' + '\n'
+ ret line1 + line2
+ else if field.ctype.type_name == 'array'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_type_name collection_ref_table.value_ttype) + '[' + fieldName + '.Length];' + '\n'
+ line2 = 'for (int _i = 0; _i < ' + fieldName + '.Length; _i++) { ' + (get_ref_name field) + '[_i] = tables.' + tableName + '.GetOrDefault(' + fieldName + '[_i]); }' + '\n'
+ ret line1 + line2
+ else if field.ctype.type_name == 'map'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
+ line2 = 'foreach (var kvp in ' + fieldName + ') { ' + (get_ref_name field) + '.Add(kvp.Key, tables.' + tableName + '.GetOrDefault(kvp.Value)); }' + '\n'
+ ret line1 + line2
+ else
+ ret ''
+ end
+ else
+ if (is_field_bean_need_resolve_ref field)
+ ret fieldName + '?.ResolveRef(tables);'
+ else if (is_field_array_like_need_resolve_ref field)
+ ret 'foreach (var _e in ' + fieldName + ') { _e?.ResolveRef(tables); }'
+ else if (is_field_map_need_resolve_ref field)
+ ret 'foreach (var _e in ' + fieldName + '.Values) { _e?.ResolveRef(tables); }'
+ else
+ ret ''
+ end
+ end
+end
+~}}
+{{~if __bean.is_value_type~}}
+public partial struct {{__name}}
+{{~else~}}
+public {{class_modifier __bean}} partial class {{__name}} : {{if parent_def_type}}{{__bean.parent}}{{else}}Luban.BeanBase{{end}}
+{{~end~}}
+{
+ public {{__name}}(JsonElement _buf) {{if parent_def_type}} : base(_buf) {{end}}
+ {
+ {{~ for field in export_fields
+ fieldName = format_property_name __code_style field.name
+ ~}}
+ {{deserialize_field fieldName '_buf' field.name field.ctype}}
+ {{~if can_generate_ref field~}}
+ {{get_ref_name field}} = null;
+ {{~end~}}
+ {{~if has_index field~}}
+ foreach(var _v in {{fieldName}})
+ {
+ {{get_index_var_name field}}.Add(_v.{{format_property_name __code_style (get_index_field field).name}}, _v);
+ }
+ {{~end~}}
+ {{~end~}}
+ }
+
+ public static {{__name}} Deserialize{{__name}}(JsonElement _buf)
+ {
+ {{~if __bean.is_abstract_type~}}
+ switch (_buf.GetProperty("$type").GetString())
+ {
+ {{~for child in __bean.hierarchy_not_abstract_children~}}
+ case "{{impl_data_type child __bean}}": return new {{child.full_name}}(_buf);
+ {{~end~}}
+ default: throw new SerializationException();
+ }
+ {{~else~}}
+ return new {{__bean.full_name}}(_buf);
+ {{~end~}}
+ }
+
+ {{~ for field in export_fields ~}}
+{{~if field.comment != '' ~}}
+ ///
+ /// {{escape_comment field.comment}}
+ ///
+{{~end~}}
+ public readonly {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}};
+ {{~if can_generate_ref field~}}
+ public {{declaring_type_name (get_ref_type field)}} {{get_ref_name field}};
+ {{~else if can_generate_collection_ref field~}}
+ public {{declaring_collection_ref_name field.ctype}} {{get_ref_name field}};
+ {{~end~}}
+ {{~if has_index field
+ indexMapType = get_index_map_type field
+ ~}}
+ public readonly {{declaring_type_name indexMapType}} {{get_index_var_name field}} = new {{declaring_type_name indexMapType}}();
+ {{~end~}}
+ {{~end~}}
+
+{{~if !__bean.is_abstract_type && !__bean.is_value_type~}}
+ public const int __ID__ = {{__bean.id}};
+ public override int GetTypeId() => __ID__;
+{{~end~}}
+
+ public {{method_modifier __bean}} void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if parent_def_type~}}
+ base.ResolveRef(tables);
+ {{~end~}}
+ {{~for field in export_fields~}}
+ {{~ line = generate_resolve_field_ref field ~}}
+ {{~ if line != ''~}}
+ {{line}}
+ {{~end~}}
+ {{~end~}}
+ }
+
+ public override string ToString()
+ {
+ return "{{full_name}}{ "
+ {{~for field in hierarchy_export_fields ~}}
+ + "{{format_field_name __code_style field.name}}:" + {{to_pretty_string (format_property_name __code_style field.name) field.ctype}} + ","
+ {{~end~}}
+ + "}";
+ }
+}
+{{namespace_with_grace_end __namespace_with_top_module}}
diff --git a/Tools/Luban/Templates/cs-dotnet-json/table.sbn b/Tools/Luban/Templates/cs-dotnet-json/table.sbn
new file mode 100644
index 00000000..76b04fdb
--- /dev/null
+++ b/Tools/Luban/Templates/cs-dotnet-json/table.sbn
@@ -0,0 +1,172 @@
+using Luban;
+using System.Text.Json;
+
+{{
+ key_type = __table.key_ttype
+ value_type = __table.value_ttype
+
+ func index_type_name
+ ret (declaring_type_name $0.type)
+ end
+
+ func table_union_map_type_name
+ ret 'System.Collections.Generic.Dictionary<(' + (array.each __table.index_list @index_type_name | array.join ', ') + '), ' + (declaring_type_name __value_type) + '>'
+ end
+
+ func table_key_list
+ varName = $0
+ indexList = __table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
+ ret array.join indexList ', '
+ end
+
+ func table_param_def_list
+ paramList = __table.index_list |array.each do; ret (declaring_type_name $0.type) + ' ' + $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+
+ func table_param_name_list
+ paramList = __table.index_list |array.each do; ret $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+}}
+{{namespace_with_grace_begin __namespace_with_top_module}}
+{{~if __table.comment != '' ~}}
+///
+/// {{escape_comment __table.comment}}
+///
+{{~end~}}
+public partial class {{__name}}
+{
+ {{~if __table.is_map_table ~}}
+ private readonly System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap;
+ private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
+
+ public {{__name}}(JsonElement _buf)
+ {
+ int count = _buf.GetArrayLength();
+ _dataMap = new System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}>(count);
+ _dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>(count);
+
+ foreach(JsonElement _ele in _buf.EnumerateArray())
+ {
+ {{declaring_type_name __value_type}} _v;
+ {{deserialize '_v' '_ele' __value_type}}
+ _dataList.Add(_v);
+ _dataMap.Add(_v.{{format_property_name __code_style __table.index_field.name}}, _v);
+ }
+ }
+
+ public System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> DataMap => _dataMap;
+ public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
+
+{{~if __value_type.is_dynamic~}}
+ public T GetOrDefaultAs({{declaring_type_name __key_type}} key) where T : {{declaring_type_name __value_type}} => _dataMap.TryGetValue(key, out var v) ? (T)v : default;
+ public T GetAs({{declaring_type_name __key_type}} key) where T : {{declaring_type_name __value_type}} => (T)_dataMap[key];
+{{~end~}}
+ public {{declaring_type_name __value_type}} GetOrDefault({{declaring_type_name __key_type}} key) => _dataMap.TryGetValue(key, out var v) ? v : default;
+ public {{declaring_type_name __value_type}} Get({{declaring_type_name __key_type}} key) => _dataMap[key];
+ public {{declaring_type_name __value_type}} this[{{declaring_type_name __key_type}} key] => _dataMap[key];
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ foreach(var _v in _dataList)
+ {
+ _v.ResolveRef(tables);
+ }
+ {{~end~}}
+ }
+
+ {{~else if __table.is_list_table ~}}
+ private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
+
+ {{~if __table.is_union_index~}}
+ private {{table_union_map_type_name}} _dataMapUnion;
+ {{~else if !__table.index_list.empty?~}}
+ {{~for idx in __table.index_list~}}
+ private System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}};
+ {{~end~}}
+ {{~end~}}
+
+ public {{__name}}(JsonElement _buf)
+ {
+ int count = _buf.GetArrayLength();
+ _dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>(count);
+
+ foreach(JsonElement _ele in _buf.EnumerateArray())
+ {
+ {{declaring_type_name __value_type}} _v;
+ {{deserialize '_v' '_ele' __value_type}}
+ _dataList.Add(_v);
+ }
+ {{~if __table.is_union_index~}}
+ _dataMapUnion = new {{table_union_map_type_name}}();
+ foreach(var _v in _dataList)
+ {
+ _dataMapUnion.Add(({{table_key_list "_v"}}), _v);
+ }
+ {{~else if !__table.index_list.empty?~}}
+ {{~for idx in __table.index_list~}}
+ _dataMap_{{idx.index_field.name}} = new System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}>(count);
+ {{~end~}}
+ foreach(var _v in _dataList)
+ {
+ {{~for idx in __table.index_list~}}
+ _dataMap_{{idx.index_field.name}}.Add(_v.{{format_property_name __code_style idx.index_field.name}}, _v);
+ {{~end~}}
+ }
+ {{~end~}}
+ }
+
+ public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
+
+ {{~if __table.is_union_index~}}
+ public {{declaring_type_name __value_type}} Get({{table_param_def_list}}) => _dataMapUnion.TryGetValue(({{table_param_name_list}}), out {{declaring_type_name __value_type}} __v) ? __v : default;
+ {{~else if !__table.index_list.empty? ~}}
+ {{~for idx in __table.index_list~}}
+ public {{declaring_type_name __value_type}} GetBy{{format_property_name __code_style idx.index_field.name}}({{declaring_type_name idx.type}} key) => _dataMap_{{idx.index_field.name}}.TryGetValue(key, out {{declaring_type_name __value_type}} __v) ? __v : default;
+ {{~end~}}
+ {{~end~}}
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ foreach(var _v in _dataList)
+ {
+ _v.ResolveRef(tables);
+ }
+ {{~end~}}
+ }
+ {{~else~}}
+
+ private readonly {{declaring_type_name __value_type}} _data;
+
+ public {{declaring_type_name __value_type}} Data => _data;
+
+ public {{__name}}(JsonElement _buf)
+ {
+ int n = _buf.GetArrayLength();
+ if (n != 1) throw new SerializationException("table mode=one, but size != 1");
+ {{deserialize '_data' '_buf[0]' __value_type}}
+ }
+
+
+ {{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ ///
+ /// {{escape_comment field.comment}}
+ ///
+{{~end~}}
+ public {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}} => _data.{{format_property_name __code_style field.name}};
+ {{~end~}}
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ _data.ResolveRef(tables);
+ {{~end~}}
+ }
+ {{~end~}}
+}
+
+{{namespace_with_grace_end __namespace_with_top_module}}
diff --git a/Tools/Luban/Templates/cs-dotnet-json/tables.sbn b/Tools/Luban/Templates/cs-dotnet-json/tables.sbn
new file mode 100644
index 00000000..fcb18326
--- /dev/null
+++ b/Tools/Luban/Templates/cs-dotnet-json/tables.sbn
@@ -0,0 +1,32 @@
+using Luban;
+using System.Text.Json;
+
+{{namespace_with_grace_begin __namespace}}
+public partial class {{__name}}
+{
+ {{~for table in __tables ~}}
+{{~if table.comment != '' ~}}
+ ///
+ /// {{escape_comment table.comment}}
+ ///
+{{~end~}}
+ public {{table.full_name}} {{format_property_name __code_style table.name}} {get; }
+ {{~end~}}
+
+ public {{__name}}(System.Func loader)
+ {
+ {{~for table in __tables ~}}
+ {{format_property_name __code_style table.name}} = new {{table.full_name}}(loader("{{table.output_data_file}}"));
+ {{~end~}}
+ ResolveRef();
+ }
+
+ private void ResolveRef()
+ {
+ {{~for table in __tables ~}}
+ {{format_property_name __code_style table.name}}.ResolveRef(this);
+ {{~end~}}
+ }
+}
+
+{{namespace_with_grace_end __namespace}}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/cs-editor-json/bean.sbn b/Tools/Luban/Templates/cs-editor-json/bean.sbn
new file mode 100644
index 00000000..0ed8c8cd
--- /dev/null
+++ b/Tools/Luban/Templates/cs-editor-json/bean.sbn
@@ -0,0 +1,101 @@
+using System.Collections.Generic;
+using SimpleJSON;
+using Luban;
+
+{{namespace_with_grace_begin __namespace_with_top_module}}
+
+{{~if __this.comment != '' ~}}
+///
+/// {{escape_comment __this.comment}}
+///
+{{~end~}}
+public {{class_modifier __bean}} class {{__name}} : {{if __parent_def_type}} {{__this.parent}} {{else}} Luban.EditorBeanBase {{end}}
+{
+ public {{__name}}()
+ {
+ {{~ for field in __fields ~}}
+ {{~if (need_init field.ctype) && !field.ctype.is_nullable ~}}
+ {{format_field_name __code_style field.name}} = {{init_value field.ctype}};
+ {{~end~}}
+ {{~end~}}
+ }
+
+ {{~if !__this.is_abstract_type~}}
+ public override void LoadJson(SimpleJSON.JSONObject _json)
+ {
+ {{~ for field in __hierarchy_fields ~}}
+ {
+ var _fieldJson = _json["{{field.name}}"];
+ if (_fieldJson != null)
+ {
+ {{deserialize '_fieldJson' (format_field_name __code_style field.name) field.ctype}}
+ }
+ }
+
+ {{~end~}}
+ }
+
+ public override void SaveJson(SimpleJSON.JSONObject _json)
+ {
+ {{~if parent~}}
+ _json["$type"] = "{{__this.full_name}}";
+ {{~end~}}
+ {{~ for field in __hierarchy_fields ~}}
+ {{~if field.ctype.is_nullable}}
+ if ({{format_field_name __code_style field.name}} != null)
+ {
+ {{serialize '_json' field.name (format_field_name __code_style field.name) field.ctype}}
+ }
+ {{~else~}}
+ {
+ {{~if (is_raw_nullable field.ctype)}}
+ if ({{format_field_name __code_style field.name}} == null) { throw new System.ArgumentNullException(); }
+ {{~end~}}
+ {{serialize '_json' field.name (format_field_name __code_style field.name) field.ctype}}
+ }
+ {{~end~}}
+ {{~end~}}
+ }
+ {{~end~}}
+
+ public static {{__name}} LoadJson{{__name}}(SimpleJSON.JSONNode _json)
+ {
+ {{~if __this.is_abstract_type~}}
+ string type = _json["$type"];
+ {{__name}} obj;
+ switch (type)
+ {
+ {{~for child in __this.hierarchy_not_abstract_children~}}
+ {{~if child.namespace == __this.namespace && __this.namespace != '' ~}}
+ case "{{child.full_name}}":
+ {{~end~}}
+ case "{{impl_data_type child __this}}":obj = new {{child.full_name}}(); break;
+ {{~end~}}
+ default: throw new SerializationException();
+ }
+ {{~else~}}
+ {{__name}} obj = new {{__this.full_name}}();
+ {{~end~}}
+ obj.LoadJson((SimpleJSON.JSONObject)_json);
+ return obj;
+ }
+
+ public static void SaveJson{{__name}}({{__name}} _obj, SimpleJSON.JSONNode _json)
+ {
+ {{~if __this.is_abstract_type~}}
+ _json["$type"] = _obj.GetType().Name;
+ {{~end~}}
+ _obj.SaveJson((SimpleJSON.JSONObject)_json);
+ }
+
+ {{~ for field in __fields ~}}
+{{~if field.comment != '' ~}}
+ ///
+ /// {{escape_comment field.comment}}
+ ///
+{{~end~}}
+ public {{declaring_type_name field.ctype}} {{format_field_name __code_style field.name}};
+
+ {{~end~}}
+}
+{{namespace_with_grace_end __namespace_with_top_module}}
diff --git a/Tools/Luban/Templates/cs-editor-json/enum.sbn b/Tools/Luban/Templates/cs-editor-json/enum.sbn
new file mode 100644
index 00000000..fb36236f
--- /dev/null
+++ b/Tools/Luban/Templates/cs-editor-json/enum.sbn
@@ -0,0 +1,59 @@
+{{~
+ comment = __enum.comment
+ items = __enum.items
+ itemType = 'Luban.EditorEnumItemInfo'
+~}}
+
+{{namespace_with_grace_begin __namespace_with_top_module}}
+{{~if comment != '' ~}}
+ ///
+ /// {{escape_comment comment}}
+ ///
+{{~end~}}
+ {{~if __enum.is_flags~}}
+ [System.Flags]
+ {{~end~}}
+ public enum {{__name}}
+ {
+ {{~ for item in items ~}}
+{{~if item.comment != '' ~}}
+ ///
+ /// {{escape_comment item.comment_or_alias}}
+ ///
+{{~end~}}
+ {{format_enum_item_name __code_style item.name}} = {{item.value}},
+ {{~end~}}
+ }
+
+ public static class {{__name}}_Metadata
+ {
+ {{~ for item in items ~}}
+ public static readonly {{itemType}} {{item.name}} = new {{itemType}}("{{item.name}}", "{{item.alias}}", {{item.int_value}}, "{{item.comment}}");
+ {{~end~}}
+
+ private static readonly System.Collections.Generic.List<{{itemType}}> __items = new System.Collections.Generic.List<{{itemType}}>
+ {
+ {{~ for item in items ~}}
+ {{item.name}},
+ {{~end~}}
+ };
+
+ public static System.Collections.Generic.List<{{itemType}}> GetItems() => __items;
+
+ public static {{itemType}} GetByName(string name)
+ {
+ return __items.Find(c => c.Name == name);
+ }
+
+ public static {{itemType}} GetByNameOrAlias(string name)
+ {
+ return __items.Find(c => c.Name == name || c.Alias == name);
+ }
+
+ public static {{itemType}} GetByValue(int value)
+ {
+ return __items.Find(c => c.Value == value);
+ }
+ }
+
+{{namespace_with_grace_end __namespace_with_top_module}}
diff --git a/Tools/Luban/Templates/cs-newtonsoft-json/bean.sbn b/Tools/Luban/Templates/cs-newtonsoft-json/bean.sbn
new file mode 100644
index 00000000..f8ae9bd2
--- /dev/null
+++ b/Tools/Luban/Templates/cs-newtonsoft-json/bean.sbn
@@ -0,0 +1,158 @@
+using Luban;
+using Newtonsoft.Json.Linq;
+
+{{
+ parent_def_type = __bean.parent_def_type
+ export_fields = __bean.export_fields
+ hierarchy_export_fields = __bean.hierarchy_export_fields
+}}
+
+{{namespace_with_grace_begin __namespace_with_top_module}}
+{{~if __bean.comment != '' ~}}
+///
+/// {{escape_comment __bean.comment}}
+///
+{{~end~}}
+{{~
+func get_ref_name
+ ret (format_property_name __code_style $0.name) + '_Ref'
+end
+
+func get_index_var_name
+ ret (format_property_name __code_style $0.name) + '_Index'
+end
+
+
+func generate_resolve_field_ref
+ field = $0
+ fieldName = format_property_name __code_style field.name
+ refTable = get_ref_table field
+ if can_generate_ref field
+ tableName = format_property_name __code_style refTable.name
+ if field.is_nullable
+ ret (get_ref_name field) + ' = ' + fieldName + '!= null ? tables.' + tableName + '.GetOrDefault(' + (get_value_of_nullable_type field.ctype fieldName) + ') : null;'
+ else
+ ret (get_ref_name field) + ' = tables.' + tableName + '.GetOrDefault(' + fieldName + ');'
+ end
+ else if can_generate_collection_ref field
+ collection_ref_table = get_collection_ref_table field
+ tableName = format_property_name __code_style collection_ref_table.name
+ if field.ctype.type_name == 'list' || field.ctype.type_name == 'set'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
+ line2 = 'foreach (var _v in ' + fieldName + ') { ' + (get_ref_name field) + '.Add(tables.' + tableName + '.GetOrDefault(_v)); }' + '\n'
+ ret line1 + line2
+ else if field.ctype.type_name == 'array'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_type_name collection_ref_table.value_ttype) + '[' + fieldName + '.Length];' + '\n'
+ line2 = 'for (int _i = 0; _i < ' + fieldName + '.Length; _i++) { ' + (get_ref_name field) + '[_i] = tables.' + tableName + '.GetOrDefault(' + fieldName + '[_i]); }' + '\n'
+ ret line1 + line2
+ else if field.ctype.type_name == 'map'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
+ line2 = 'foreach (var kvp in ' + fieldName + ') { ' + (get_ref_name field) + '.Add(kvp.Key, tables.' + tableName + '.GetOrDefault(kvp.Value)); }' + '\n'
+ ret line1 + line2
+ else
+ ret ''
+ end
+ else
+ if (is_field_bean_need_resolve_ref field)
+ ret fieldName + '?.ResolveRef(tables);'
+ else if (is_field_array_like_need_resolve_ref field)
+ ret 'foreach (var _e in ' + fieldName + ') { _e?.ResolveRef(tables); }'
+ else if (is_field_map_need_resolve_ref field)
+ ret 'foreach (var _e in ' + fieldName + '.Values) { _e?.ResolveRef(tables); }'
+ else
+ ret ''
+ end
+ end
+end
+
+~}}
+
+{{~if __bean.is_value_type~}}
+public partial struct {{__name}}
+{{~else~}}
+public {{class_modifier __bean}} partial class {{__name}} : {{if parent_def_type}}{{__bean.parent}}{{else}}Luban.BeanBase{{end}}
+{{~end~}}
+{
+ public {{__name}}(JToken _buf) {{if parent_def_type}} : base(_buf) {{end}}
+ {
+ JObject _obj = _buf as JObject;
+ {{~ for field in export_fields
+ fieldName = format_property_name __code_style field.name
+ ~}}
+ {{deserialize_field fieldName '_obj' field.name field.ctype}}
+ {{~if can_generate_ref field~}}
+ {{get_ref_name field}} = null;
+ {{~end~}}
+ {{~if has_index field~}}
+ foreach(var _v in {{fieldName}})
+ {
+ {{get_index_var_name field}}.Add(_v.{{format_property_name __code_style (get_index_field field).name}}, _v);
+ }
+ {{~end~}}
+ {{~end~}}
+ }
+
+ public static {{__name}} Deserialize{{__name}}(JToken _buf)
+ {
+ {{~if __bean.is_abstract_type~}}
+ var _obj=_buf as JObject;
+ switch (_obj.GetValue("$type").ToString())
+ {
+ {{~for child in __bean.hierarchy_not_abstract_children~}}
+ case "{{impl_data_type child __bean}}": return new {{child.full_name}}(_buf);
+ {{~end~}}
+ default: throw new SerializationException();
+ }
+ {{~else~}}
+ return new {{__bean.full_name}}(_buf);
+ {{~end~}}
+ }
+
+ {{~ for field in export_fields ~}}
+{{~if field.comment != '' ~}}
+ ///
+ /// {{escape_comment field.comment}}
+ ///
+{{~end~}}
+ public readonly {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}};
+ {{~if can_generate_ref field~}}
+ public {{declaring_type_name (get_ref_type field)}} {{get_ref_name field}};
+ {{~else if can_generate_collection_ref field~}}
+ public {{declaring_collection_ref_name field.ctype}} {{get_ref_name field}};
+ {{~end~}}
+ {{~if has_index field
+ indexMapType = get_index_map_type field
+ ~}}
+ public readonly {{declaring_type_name indexMapType}} {{get_index_var_name field}} = new {{declaring_type_name indexMapType}}();
+ {{~end~}}
+ {{~end~}}
+
+
+ {{~if !__bean.is_abstract_type && !__bean.is_value_type~}}
+ public const int __ID__ = {{__bean.id}};
+ public override int GetTypeId() => __ID__;
+ {{~end~}}
+
+ public {{method_modifier __bean}} void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if parent_def_type~}}
+ base.ResolveRef(tables);
+ {{~end~}}
+ {{~for field in export_fields~}}
+ {{~ line = generate_resolve_field_ref field ~}}
+ {{~ if line != ''~}}
+ {{line}}
+ {{~end~}}
+ {{~end~}}
+ }
+
+ public override string ToString()
+ {
+ return "{{full_name}}{ "
+ {{~for field in hierarchy_export_fields ~}}
+ + "{{format_field_name __code_style field.name}}:" + {{to_pretty_string (format_property_name __code_style field.name) field.ctype}} + ","
+ {{~end~}}
+ + "}";
+ }
+}
+{{namespace_with_grace_end __namespace_with_top_module}}
diff --git a/Tools/Luban/Templates/cs-newtonsoft-json/table.sbn b/Tools/Luban/Templates/cs-newtonsoft-json/table.sbn
new file mode 100644
index 00000000..8ba801ab
--- /dev/null
+++ b/Tools/Luban/Templates/cs-newtonsoft-json/table.sbn
@@ -0,0 +1,177 @@
+using Newtonsoft.Json.Linq;
+using Luban;
+
+{{
+ key_type = __table.key_ttype
+ value_type = __table.value_ttype
+
+ func index_type_name
+ ret (declaring_type_name $0.type)
+ end
+
+ func table_union_map_type_name
+ ret 'System.Collections.Generic.Dictionary<(' + (array.each __table.index_list @index_type_name | array.join ', ') + '), ' + (declaring_type_name __value_type) + '>'
+ end
+
+ func table_key_list
+ varName = $0
+ indexList = __table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
+ ret array.join indexList ', '
+ end
+
+ func table_param_def_list
+ paramList = __table.index_list |array.each do; ret (declaring_type_name $0.type) + ' ' + $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+
+ func table_param_name_list
+ paramList = __table.index_list |array.each do; ret $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+}}
+
+{{namespace_with_grace_begin __namespace_with_top_module}}
+
+{{~if __table.comment != '' ~}}
+///
+/// {{escape_comment __table.comment}}
+///
+{{~end~}}
+public partial class {{__name}}
+{
+ {{~if __table.is_map_table ~}}
+ private readonly System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap;
+ private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
+
+ public {{__name}}(JArray _buf)
+ {
+ _dataMap = new System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}>(_buf.Count);
+ _dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>(_buf.Count);
+
+ foreach(JObject _ele in _buf)
+ {
+ {{declaring_type_name __value_type}} _v;
+ {{deserialize '_v' '_ele' __value_type}}
+ _dataList.Add(_v);
+ _dataMap.Add(_v.{{format_property_name __code_style __table.index_field.name}}, _v);
+ }
+ }
+
+
+ public System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> DataMap => _dataMap;
+ public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
+
+{{~if __value_type.is_dynamic~}}
+ public T GetOrDefaultAs({{declaring_type_name __key_type}} key) where T : {{declaring_type_name __value_type}} => _dataMap.TryGetValue(key, out var v) ? (T)v : default;
+ public T GetAs({{declaring_type_name __key_type}} key) where T : {{declaring_type_name __value_type}} => (T)_dataMap[key];
+{{~end~}}
+ public {{declaring_type_name __value_type}} GetOrDefault({{declaring_type_name __key_type}} key) => _dataMap.TryGetValue(key, out var v) ? v : default;
+ public {{declaring_type_name __value_type}} Get({{declaring_type_name __key_type}} key) => _dataMap[key];
+ public {{declaring_type_name __value_type}} this[{{declaring_type_name __key_type}} key] => _dataMap[key];
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ foreach(var _v in _dataList)
+ {
+ _v.ResolveRef(tables);
+ }
+ {{~end~}}
+ }
+
+ {{~else if __table.is_list_table ~}}
+ private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
+
+ {{~if __table.is_union_index~}}
+ private {{table_union_map_type_name}} _dataMapUnion;
+ {{~else if !__table.index_list.empty?~}}
+ {{~for idx in __table.index_list~}}
+ private System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}};
+ {{~end~}}
+ {{~end~}}
+
+
+ public {{__name}}(JArray _buf)
+ {
+ _dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>(_buf.Count);
+
+ foreach(JObject _ele in _buf)
+ {
+ {{declaring_type_name __value_type}} _v;
+ {{deserialize '_v' '_ele' __value_type}}
+ _dataList.Add(_v);
+ }
+ {{~if __table.is_union_index~}}
+ _dataMapUnion = new {{table_union_map_type_name}}(_buf.Count);
+ foreach(var _v in _dataList)
+ {
+ _dataMapUnion.Add(({{table_key_list "_v"}}), _v);
+ }
+ {{~else if !__table.index_list.empty?~}}
+ {{~for idx in __table.index_list~}}
+ _dataMap_{{idx.index_field.name}} = new System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}>(_buf.Count);
+ {{~end~}}
+ foreach(var _v in _dataList)
+ {
+ {{~for idx in __table.index_list~}}
+ _dataMap_{{idx.index_field.name}}.Add(_v.{{format_property_name __code_style idx.index_field.name}}, _v);
+ {{~end~}}
+ }
+ {{~end~}}
+ }
+
+ public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
+
+
+ {{~if __table.is_union_index~}}
+ public {{declaring_type_name __value_type}} Get({{table_param_def_list}}) => _dataMapUnion.TryGetValue(({{table_param_name_list}}), out {{declaring_type_name __value_type}} __v) ? __v : default;
+ {{~else if !__table.index_list.empty? ~}}
+ {{~for idx in __table.index_list~}}
+ public {{declaring_type_name __value_type}} GetBy{{format_property_name __code_style idx.index_field.name}}({{declaring_type_name idx.type}} key) => _dataMap_{{idx.index_field.name}}.TryGetValue(key, out {{declaring_type_name __value_type}} __v) ? __v : default;
+ {{~end~}}
+ {{~end~}}
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ foreach(var _v in _dataList)
+ {
+ _v.ResolveRef(tables);
+ }
+ {{~end~}}
+ }
+ {{~else~}}
+
+ private readonly {{declaring_type_name __value_type}} _data;
+
+ public {{declaring_type_name __value_type}} Data => _data;
+
+ public {{__name}}(JArray _buf)
+ {
+ int n = _buf.Count;
+ if (n != 1) throw new SerializationException("table mode=one, but size != 1");
+ {{deserialize '_data' '_buf[0]' __value_type}}
+ }
+
+
+ {{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ ///
+ /// {{escape_comment field.comment}}
+ ///
+{{~end~}}
+ public {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}} => _data.{{format_property_name __code_style field.name}};
+ {{~end~}}
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ _data.ResolveRef(tables);
+ {{~end~}}
+ }
+
+
+
+ {{~end~}}
+}
+{{namespace_with_grace_end __namespace_with_top_module}}
diff --git a/Tools/Luban/Templates/cs-newtonsoft-json/tables.sbn b/Tools/Luban/Templates/cs-newtonsoft-json/tables.sbn
new file mode 100644
index 00000000..5f10e0a6
--- /dev/null
+++ b/Tools/Luban/Templates/cs-newtonsoft-json/tables.sbn
@@ -0,0 +1,32 @@
+using Newtonsoft.Json.Linq;
+
+{{namespace_with_grace_begin __namespace}}
+public partial class {{__name}}
+{
+ {{~for table in __tables ~}}
+{{~if table.comment != '' ~}}
+ ///
+ /// {{escape_comment table.comment}}
+ ///
+{{~end~}}
+ public {{table.full_name}} {{format_property_name __code_style table.name}} {get; }
+ {{~end~}}
+
+
+ public {{__name}}(System.Func loader)
+ {
+ {{~for table in __tables ~}}
+ {{format_property_name __code_style table.name}} = new {{table.full_name}}(loader("{{table.output_data_file}}"));
+ {{~end~}}
+ ResolveRef();
+ }
+
+ private void ResolveRef()
+ {
+ {{~for table in __tables ~}}
+ {{format_property_name __code_style table.name}}.ResolveRef(this);
+ {{~end~}}
+ }
+}
+
+{{namespace_with_grace_end __namespace}}
diff --git a/Tools/Luban/Templates/cs-simple-json/bean.sbn b/Tools/Luban/Templates/cs-simple-json/bean.sbn
new file mode 100644
index 00000000..1d7a4d93
--- /dev/null
+++ b/Tools/Luban/Templates/cs-simple-json/bean.sbn
@@ -0,0 +1,151 @@
+using Luban;
+using SimpleJSON;
+{{
+ parent_def_type = __bean.parent_def_type
+ export_fields = __bean.export_fields
+ hierarchy_export_fields = __bean.hierarchy_export_fields
+}}
+
+{{namespace_with_grace_begin __namespace_with_top_module}}
+{{~if __bean.comment != '' ~}}
+///
+/// {{escape_comment __bean.comment}}
+///
+{{~end~}}
+{{~
+func get_ref_name
+ ret (format_property_name __code_style $0.name) + '_Ref'
+end
+
+func get_index_var_name
+ ret (format_property_name __code_style $0.name) + '_Index'
+end
+
+func generate_resolve_field_ref
+ field = $0
+ fieldName = format_property_name __code_style field.name
+ refTable = get_ref_table field
+ if can_generate_ref field
+ tableName = format_property_name __code_style refTable.name
+ if field.is_nullable
+ ret (get_ref_name field) + ' = ' + fieldName + '!= null ? tables.' + tableName + '.GetOrDefault(' + (get_value_of_nullable_type field.ctype fieldName) + ') : null;'
+ else
+ ret (get_ref_name field) + ' = tables.' + tableName + '.GetOrDefault(' + fieldName + ');'
+ end
+ else if can_generate_collection_ref field
+ collection_ref_table = get_collection_ref_table field
+ tableName = format_property_name __code_style collection_ref_table.name
+ if field.ctype.type_name == 'list' || field.ctype.type_name == 'set'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
+ line2 = 'foreach (var _v in ' + fieldName + ') { ' + (get_ref_name field) + '.Add(tables.' + tableName + '.GetOrDefault(_v)); }' + '\n'
+ ret line1 + line2
+ else if field.ctype.type_name == 'array'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_type_name collection_ref_table.value_ttype) + '[' + fieldName + '.Length];' + '\n'
+ line2 = 'for (int _i = 0; _i < ' + fieldName + '.Length; _i++) { ' + (get_ref_name field) + '[_i] = tables.' + tableName + '.GetOrDefault(' + fieldName + '[_i]); }' + '\n'
+ ret line1 + line2
+ else if field.ctype.type_name == 'map'
+ line1 = (get_ref_name field) + ' = new ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
+ line2 = 'foreach (var kvp in ' + fieldName + ') { ' + (get_ref_name field) + '.Add(kvp.Key, tables.' + tableName + '.GetOrDefault(kvp.Value)); }' + '\n'
+ ret line1 + line2
+ else
+ ret ''
+ end
+ else
+ if (is_field_bean_need_resolve_ref field)
+ ret fieldName + '?.ResolveRef(tables);'
+ else if (is_field_array_like_need_resolve_ref field)
+ ret 'foreach (var _e in ' + fieldName + ') { _e?.ResolveRef(tables); }'
+ else if (is_field_map_need_resolve_ref field)
+ ret 'foreach (var _e in ' + fieldName + '.Values) { _e?.ResolveRef(tables); }'
+ else
+ ret ''
+ end
+ end
+end
+~}}
+{{~if __bean.is_value_type~}}
+public partial struct {{__name}}
+{{~else~}}
+public {{class_modifier __bean}} partial class {{__name}} : {{if parent_def_type}}{{__bean.parent}}{{else}}Luban.BeanBase{{end}}
+{{~end~}}
+{
+ public {{__name}}(JSONNode _buf) {{if parent_def_type}} : base(_buf) {{end}}
+ {
+ {{~ for field in export_fields
+ fieldName = format_property_name __code_style field.name
+ ~}}
+ {{deserialize_field fieldName '_buf' field.name field.ctype}}
+ {{~if can_generate_ref field~}}
+ {{get_ref_name field}} = null;
+ {{~end~}}
+ {{~if has_index field~}}
+ foreach(var _v in {{fieldName}})
+ {
+ {{get_index_var_name field}}.Add(_v.{{format_property_name __code_style (get_index_field field).name}}, _v);
+ }
+ {{~end~}}
+ {{~end~}}
+ }
+
+ public static {{__name}} Deserialize{{__name}}(JSONNode _buf)
+ {
+ {{~if __bean.is_abstract_type~}}
+ switch ((string)_buf["$type"])
+ {
+ {{~for child in __bean.hierarchy_not_abstract_children~}}
+ case "{{impl_data_type child __bean}}": return new {{child.full_name}}(_buf);
+ {{~end~}}
+ default: throw new SerializationException();
+ }
+ {{~else~}}
+ return new {{__bean.full_name}}(_buf);
+ {{~end~}}
+ }
+
+ {{~ for field in export_fields ~}}
+{{~if field.comment != '' ~}}
+ ///
+ /// {{escape_comment field.comment}}
+ ///
+{{~end~}}
+ public readonly {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}};
+ {{~if can_generate_ref field~}}
+ public {{declaring_type_name (get_ref_type field)}} {{get_ref_name field}};
+ {{~else if can_generate_collection_ref field~}}
+ public {{declaring_collection_ref_name field.ctype}} {{get_ref_name field}};
+ {{~end~}}
+ {{~if has_index field
+ indexMapType = get_index_map_type field
+ ~}}
+ public readonly {{declaring_type_name indexMapType}} {{get_index_var_name field}} = new {{declaring_type_name indexMapType}}();
+ {{~end~}}
+ {{~end~}}
+
+{{~if !__bean.is_abstract_type && !__bean.is_value_type~}}
+ public const int __ID__ = {{__bean.id}};
+ public override int GetTypeId() => __ID__;
+{{~end~}}
+
+ public {{method_modifier __bean}} void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if parent_def_type~}}
+ base.ResolveRef(tables);
+ {{~end~}}
+ {{~for field in export_fields~}}
+ {{~ line = generate_resolve_field_ref field ~}}
+ {{~ if line != ''~}}
+ {{line}}
+ {{~end~}}
+ {{~end~}}
+ }
+
+ public override string ToString()
+ {
+ return "{{full_name}}{ "
+ {{~for field in hierarchy_export_fields ~}}
+ + "{{format_field_name __code_style field.name}}:" + {{to_pretty_string (format_property_name __code_style field.name) field.ctype}} + ","
+ {{~end~}}
+ + "}";
+ }
+}
+{{namespace_with_grace_end __namespace_with_top_module}}
diff --git a/Tools/Luban/Templates/cs-simple-json/table.sbn b/Tools/Luban/Templates/cs-simple-json/table.sbn
new file mode 100644
index 00000000..612341cd
--- /dev/null
+++ b/Tools/Luban/Templates/cs-simple-json/table.sbn
@@ -0,0 +1,172 @@
+using Luban;
+using SimpleJSON;
+
+{{
+ key_type = __table.key_ttype
+ value_type = __table.value_ttype
+
+ func index_type_name
+ ret (declaring_type_name $0.type)
+ end
+
+ func table_union_map_type_name
+ ret 'System.Collections.Generic.Dictionary<(' + (array.each __table.index_list @index_type_name | array.join ', ') + '), ' + (declaring_type_name __value_type) + '>'
+ end
+
+ func table_key_list
+ varName = $0
+ indexList = __table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
+ ret array.join indexList ', '
+ end
+
+ func table_param_def_list
+ paramList = __table.index_list |array.each do; ret (declaring_type_name $0.type) + ' ' + $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+
+ func table_param_name_list
+ paramList = __table.index_list |array.each do; ret $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+}}
+{{namespace_with_grace_begin __namespace_with_top_module}}
+{{~if __table.comment != '' ~}}
+///
+/// {{escape_comment __table.comment}}
+///
+{{~end~}}
+public partial class {{__name}}
+{
+ {{~if __table.is_map_table ~}}
+ private readonly System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap;
+ private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
+
+ public {{__name}}(JSONNode _buf)
+ {
+ int count = _buf.Count;
+ _dataMap = new System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}>(count);
+ _dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>(count);
+
+ foreach(JSONNode _ele in _buf.Children)
+ {
+ {{declaring_type_name __value_type}} _v;
+ {{deserialize '_v' '_ele' __value_type}}
+ _dataList.Add(_v);
+ _dataMap.Add(_v.{{format_property_name __code_style __table.index_field.name}}, _v);
+ }
+ }
+
+ public System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> DataMap => _dataMap;
+ public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
+
+{{~if __value_type.is_dynamic~}}
+ public T GetOrDefaultAs({{declaring_type_name __key_type}} key) where T : {{declaring_type_name __value_type}} => _dataMap.TryGetValue(key, out var v) ? (T)v : default;
+ public T GetAs({{declaring_type_name __key_type}} key) where T : {{declaring_type_name __value_type}} => (T)_dataMap[key];
+{{~end~}}
+ public {{declaring_type_name __value_type}} GetOrDefault({{declaring_type_name __key_type}} key) => _dataMap.TryGetValue(key, out var v) ? v : default;
+ public {{declaring_type_name __value_type}} Get({{declaring_type_name __key_type}} key) => _dataMap[key];
+ public {{declaring_type_name __value_type}} this[{{declaring_type_name __key_type}} key] => _dataMap[key];
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ foreach(var _v in _dataList)
+ {
+ _v.ResolveRef(tables);
+ }
+ {{~end~}}
+ }
+
+ {{~else if __table.is_list_table ~}}
+ private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
+
+ {{~if __table.is_union_index~}}
+ private {{table_union_map_type_name}} _dataMapUnion;
+ {{~else if !__table.index_list.empty?~}}
+ {{~for idx in __table.index_list~}}
+ private System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}};
+ {{~end~}}
+ {{~end~}}
+
+ public {{__name}}(JSONNode _buf)
+ {
+ int count = _buf.Count;
+ _dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>(count);
+
+ foreach(JSONNode _ele in _buf.Children)
+ {
+ {{declaring_type_name __value_type}} _v;
+ {{deserialize '_v' '_ele' __value_type}}
+ _dataList.Add(_v);
+ }
+ {{~if __table.is_union_index~}}
+ _dataMapUnion = new {{table_union_map_type_name}}();
+ foreach(var _v in _dataList)
+ {
+ _dataMapUnion.Add(({{table_key_list "_v"}}), _v);
+ }
+ {{~else if !__table.index_list.empty?~}}
+ {{~for idx in __table.index_list~}}
+ _dataMap_{{idx.index_field.name}} = new System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}>(count);
+ {{~end~}}
+ foreach(var _v in _dataList)
+ {
+ {{~for idx in __table.index_list~}}
+ _dataMap_{{idx.index_field.name}}.Add(_v.{{format_property_name __code_style idx.index_field.name}}, _v);
+ {{~end~}}
+ }
+ {{~end~}}
+ }
+
+ public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
+
+ {{~if __table.is_union_index~}}
+ public {{declaring_type_name __value_type}} Get({{table_param_def_list}}) => _dataMapUnion.TryGetValue(({{table_param_name_list}}), out {{declaring_type_name __value_type}} __v) ? __v : default;
+ {{~else if !__table.index_list.empty? ~}}
+ {{~for idx in __table.index_list~}}
+ public {{declaring_type_name __value_type}} GetBy{{format_property_name __code_style idx.index_field.name}}({{declaring_type_name idx.type}} key) => _dataMap_{{idx.index_field.name}}.TryGetValue(key, out {{declaring_type_name __value_type}} __v) ? __v : default;
+ {{~end~}}
+ {{~end~}}
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ foreach(var _v in _dataList)
+ {
+ _v.ResolveRef(tables);
+ }
+ {{~end~}}
+ }
+ {{~else~}}
+
+ private readonly {{declaring_type_name __value_type}} _data;
+
+ public {{declaring_type_name __value_type}} Data => _data;
+
+ public {{__name}}(JSONNode _buf)
+ {
+ int n = _buf.Count;
+ if (n != 1) throw new SerializationException("table mode=one, but size != 1");
+ {{deserialize '_data' '_buf[0]' __value_type}}
+ }
+
+
+ {{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ ///
+ /// {{escape_comment field.comment}}
+ ///
+{{~end~}}
+ public {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}} => _data.{{format_property_name __code_style field.name}};
+ {{~end~}}
+
+ public void ResolveRef({{__manager_name}} tables)
+ {
+ {{~if is_bean_need_resolve_ref value_type ~}}
+ _data.ResolveRef(tables);
+ {{~end~}}
+ }
+ {{~end~}}
+}
+
+{{namespace_with_grace_end __namespace_with_top_module}}
diff --git a/Tools/Luban/Templates/cs-simple-json/tables.sbn b/Tools/Luban/Templates/cs-simple-json/tables.sbn
new file mode 100644
index 00000000..66770e93
--- /dev/null
+++ b/Tools/Luban/Templates/cs-simple-json/tables.sbn
@@ -0,0 +1,32 @@
+using Luban;
+using SimpleJSON;
+
+{{namespace_with_grace_begin __namespace}}
+public partial class {{__name}}
+{
+ {{~for table in __tables ~}}
+{{~if table.comment != '' ~}}
+ ///
+ /// {{escape_comment table.comment}}
+ ///
+{{~end~}}
+ public {{table.full_name}} {{format_property_name __code_style table.name}} {get; }
+ {{~end~}}
+
+ public {{__name}}(System.Func loader)
+ {
+ {{~for table in __tables ~}}
+ {{format_property_name __code_style table.name}} = new {{table.full_name}}(loader("{{table.output_data_file}}"));
+ {{~end~}}
+ ResolveRef();
+ }
+
+ private void ResolveRef()
+ {
+ {{~for table in __tables ~}}
+ {{format_property_name __code_style table.name}}.ResolveRef(this);
+ {{~end~}}
+ }
+}
+
+{{namespace_with_grace_end __namespace}}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/cs_pb/tables.sbn b/Tools/Luban/Templates/cs_pb/tables.sbn
new file mode 100644
index 00000000..837061f5
--- /dev/null
+++ b/Tools/Luban/Templates/cs_pb/tables.sbn
@@ -0,0 +1,32 @@
+using Google.Protobuf;
+using Google.Protobuf.Collections;
+using System.Reflection;
+
+{{namespace_with_grace_begin __namespace}}
+public partial class {{__name}}
+{
+ {{~for table in __tables ~}}
+{{~if table.comment != '' ~}}
+ ///
+ /// {{escape_comment table.comment}}
+ ///
+{{~end~}}
+ public {{proto_full_name table.full_name}} {{format_property_name __code_style table.name}} { get; }
+
+ {{~end~}}
+
+ public {{__name}}(System.Func loader)
+ {
+ {{~for table in __tables ~}}
+ {{format_property_name __code_style table.name}} = {{proto_full_name table.full_name}}.Parser.ParseFrom(loader("{{table.output_data_file}}"));
+ {{~end~}}
+ }
+ public {{__name}}(System.Func loader)
+ {
+ {{~for table in __tables ~}}
+ {{format_property_name __code_style table.name}} = {{proto_full_name table.full_name}}.Parser.ParseJson(loader("{{table.output_data_file}}"));
+ {{~end~}}
+ }
+}
+
+{{namespace_with_grace_end __namespace}}
diff --git a/Tools/Luban/Templates/dart-json/bean.sbn b/Tools/Luban/Templates/dart-json/bean.sbn
new file mode 100644
index 00000000..c26884f6
--- /dev/null
+++ b/Tools/Luban/Templates/dart-json/bean.sbn
@@ -0,0 +1,143 @@
+import 'dart:ffi';
+import 'dart:collection';
+import '/gen/Tables.dart';
+
+{{~
+ parent_def_type = __this.parent_def_type
+ export_fields = __this.export_fields
+ hierarchy_export_fields = __this.hierarchy_export_fields
+~}}
+{{for field in hierarchy_export_fields}}{{import_ref_type_dart field '/gen/'}}{{end}}
+{{if parent_def_type}}{{declaring_import_bean parent_def_type '/gen/'}}{{end}}
+{{~if __bean.is_abstract_type~}}
+{{~for child in __this.hierarchy_not_abstract_children~}}
+{{declaring_import_bean child '/gen/'}}
+{{~end~}}
+{{~end~}}
+{{~
+func get_ref_name
+ ret (format_property_name __code_style $0.name) + '_Ref'
+end
+
+func generate_resolve_field_ref
+ field = $0
+ fieldName = format_name_lower_camel field.name
+ refTable = get_ref_table field
+ if can_generate_ref field
+ tableName = format_name_lower_camel refTable.name
+ if field.is_nullable
+ ret (get_ref_name field) + ' = ' + fieldName + '!= null ? tables.' + tableName + '?.getOrDefault(' + (get_value_of_nullable_type field.ctype fieldName) + ') : null;'
+ else
+ ret (get_ref_name field) + ' = tables.' + tableName + '?.getOrDefault(' + fieldName + ');'
+ end
+ else if can_generate_collection_ref field
+ collection_ref_table = get_collection_ref_table field
+ tableName = format_name_lower_camel collection_ref_table.name
+ if field.ctype.type_name == 'list' || field.ctype.type_name == 'array'
+ line1 = (get_ref_name field) + ' = ' + (declaring_collection_ref_name field.ctype) + '.empty(growable: true);' + '\n'
+ line2 = 'for (var _v in ' + fieldName + ') { var ref=(tables.'+tableName + '?.getOrDefault(_v))!;'+ (get_ref_name field) + '?.add(ref); }' + '\n'
+ ret line1 + line2
+ else if field.ctype.type_name == 'set'
+ line1 = (get_ref_name field) + ' = ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
+ line2 = 'for (var _v in ' + fieldName + ') { var ref= (tables.'+tableName + '?.getOrDefault(_v))!;'+ (get_ref_name field) + '?.add(ref); }' + '\n'
+ ret line1 + line2
+ else if field.ctype.type_name == 'map'
+ line1 = (get_ref_name field) + ' = ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
+ line2 = 'for (var kvp in ' + fieldName + '.entries) { var ref= (tables.' + tableName + '?.getOrDefault(kvp.value))!;' + (get_ref_name field) + '?[kvp.key]= ref; }' + '\n'
+ ret line1 + line2
+ else
+ ret ''
+ end
+ else
+ if (is_field_bean_need_resolve_ref field)
+ ret fieldName + '?.resolveRef(tables);'
+ else if (is_field_array_like_need_resolve_ref field)
+ ret 'for (var _e in ' + fieldName + ') { _e?.resolveRef(tables); }'
+ else if (is_field_map_need_resolve_ref field)
+ ret 'for (var _e in ' + fieldName + '.values) { _e?.resolveRef(tables); }'
+ else
+ ret ''
+ end
+ end
+end
+
+~}}
+{{~if __bean.comment != '' ~}}
+//{{escape_comment __bean.comment}}
+{{~end~}}
+{{class_modifier __this}} class {{__name}} {{if parent_def_type}}extends {{ __this.parent_def_type.name}}{{end}}
+{
+ {{__name}}(
+{{~if need_gen_constructor hierarchy_export_fields~}}
+ {
+{{~ for field in hierarchy_export_fields ~}}
+ {{~if is_super_field field parent_def_type~}}
+ required super.{{format_name_lower_camel field.name}},
+ {{~else~}}
+ required this.{{format_name_lower_camel field.name}},
+ {{~end~}}
+{{~end~}}
+ }
+ {{~end~}}
+ );
+
+ factory {{__name}}.deserialize(dynamic _buf){
+ {{~if __bean.is_abstract_type~}}
+ switch (_buf['\$type'])
+ {
+ {{~for child in __this.hierarchy_not_abstract_children~}}
+ case "{{impl_data_type child __this}}": return {{child.name}}.deserialize(_buf);
+ {{~end~}}
+ default: throw Exception('unknown type:$_buf[\$type]');
+ }
+ {{~else~}}
+{{~ for field in hierarchy_export_fields
+ fieldName = format_name_lower_camel field.name
+~}}
+ final {{fieldName}};
+ {{deserialize_field fieldName '_buf' field.name field.ctype}}
+{{~end~}}
+ return {{__name}}(
+{{~ for field in hierarchy_export_fields
+ fieldName = format_name_lower_camel field.name
+~}}
+ {{fieldName}}:{{fieldName}},
+{{~end~}}
+ );
+ {{~end~}}
+ }
+
+ {{~ for field in export_fields ~}}
+{{~if field.comment != '' ~}}
+ //{{escape_comment field.comment}}
+{{~end~}}
+ final {{declaring_type_name field.ctype}} {{format_name_lower_camel field.name}};
+{{~if can_generate_ref field~}}
+ {{declaring_type_name (get_ref_type field)}}? {{get_ref_name field}};
+{{~else if can_generate_collection_ref field~}}
+ {{declaring_collection_ref_name field.ctype}}? {{get_ref_name field}};
+{{~end~}}
+ {{~end~}}
+{{~if !__bean.is_abstract_type && !__bean.is_value_type~}}
+ static final int __ID__ = {{__this.id}};
+{{~end~}}
+ {{method_modifier __bean}}
+ void resolveRef({{__manager_name}} tables)
+ {
+ {{~if parent_def_type~}}
+ super.resolveRef(tables);
+ {{~end~}}
+
+ {{~for field in export_fields~}}
+ {{~ line = generate_resolve_field_ref field ~}}
+ {{~ if line != ''~}}
+ {{line}}
+ {{~end~}}
+ {{~end~}}
+ }
+
+ @override
+ String toString() {
+ return '{{__name}}({{for field in hierarchy_export_fields}}{{format_name_lower_camel field.name}}:${{format_name_lower_camel field.name}}, {{end}})';
+ }
+}
diff --git a/Tools/Luban/Templates/dart-json/table.sbn b/Tools/Luban/Templates/dart-json/table.sbn
new file mode 100644
index 00000000..57b66c71
--- /dev/null
+++ b/Tools/Luban/Templates/dart-json/table.sbn
@@ -0,0 +1,145 @@
+import 'dart:collection';
+{{declaring_import_name __value_type '/gen/'}}
+{{~if __table.is_singleton_table ~}}
+{{for field in __value_type.def_bean.hierarchy_export_fields}}{{import_ref_type_dart field '/gen/'}}{{end}}
+{{~end~}}
+import '/gen/Tables.dart';
+{{
+ func index_type_name
+ ret (declaring_type_name $0.type)
+ end
+
+ func table_union_map_type_name
+ ret 'Map<(' + (array.each __table.index_list @index_type_name | array.join ', ') + '), ' + (declaring_type_name __value_type) + '>'
+ end
+
+ func table_key_list
+ varName = $0
+ indexList = __table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
+ ret array.join indexList ', '
+ end
+
+ func table_param_def_list
+ paramList = __table.index_list |array.each do; ret (declaring_type_name $0.type) + ' ' + $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+
+ func table_param_name_list
+ paramList = __table.index_list |array.each do; ret $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+}}
+
+{{~if __this.comment != '' ~}}
+//{{escape_comment __this.comment}}
+{{~end~}}
+final class {{__name}} {
+
+ {{~if __table.is_map_table ~}}
+ final List<{{declaring_type_name __value_type}}> _dataList = [];
+ final Map<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap = {};
+
+ {{__name}}(List _array) {
+
+ for (var _buf in _array) {
+
+ {{declaring_type_name __value_type}} _item = {{declaring_type_name __value_type}}.deserialize(_buf);
+
+ _dataList.add(_item);
+ _dataMap[_item.{{format_field_name __code_style __this.index_field.name}}] = _item;
+ }
+ }
+
+ {{declaring_type_name __value_type}}? getOrDefault({{declaring_type_name __key_type}} id) {
+ if (_dataMap.containsKey(id)) {
+ return _dataMap[id];
+ }
+ return null;
+ }
+
+ void resolveRef({{__manager_name}} tables)
+ {
+ for(var _v in _dataList)
+ {
+ _v.resolveRef(tables);
+ }
+ }
+
+ {{~else if __table.is_list_table ~}}
+ final List<{{declaring_type_name __value_type}}> _dataList = [];
+
+{{~if __table.is_union_index~}}
+ final {{table_union_map_type_name}} _dataMapUnion = {};
+{{~else if !__table.index_list.empty?~}}
+ {{~for idx in __table.index_list~}}
+ final Map<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}}={};
+ {{~end~}}
+{{~end~}}
+
+ {{__name}}(List _array) {
+ for (var _buf in _array) {
+ {{declaring_type_name __value_type}} _item = {{declaring_type_name __value_type}}.deserialize(_buf);
+ _dataList.add(_item);
+ }
+
+ {{~if __table.is_union_index~}}
+ for(var _v in _dataList)
+ {
+ _dataMapUnion[({{table_key_list "_v"}})]= _v;
+ }
+ {{~else if !__table.index_list.empty?~}}
+ for(var _v in _dataList)
+ {
+ {{~for idx in __table.index_list~}}
+ _dataMap_{{idx.index_field.name}}[_v.{{format_property_name __code_style idx.index_field.name}}]= _v;
+ {{~end~}}
+ }
+ {{~end~}}
+ }
+
+ List<{{declaring_type_name __value_type}}> get dataList => _dataList;
+
+ {{~if __table.is_union_index~}}
+ {{declaring_type_name __value_type}}? get({{table_param_def_list}}) => _dataMapUnion[({{table_param_name_list}})];
+ {{~else if !__table.index_list.empty? ~}}
+ {{~for idx in __table.index_list~}}
+ {{declaring_type_name __value_type}}? getBy{{format_property_name __code_style idx.index_field.name}}({{declaring_type_name idx.type}} key) => _dataMap_{{idx.index_field.name}}[key];
+ {{~end~}}
+ {{~end~}}
+
+ void resolveRef({{__manager_name}} tables)
+ {
+
+ }
+ {{~else~}}
+
+ {{declaring_type_name __value_type}}? _data;
+
+ {{declaring_type_name __value_type}}? get data => _data;
+
+ {{__name}}(List _array) {
+
+ var n = _array.length;
+ if (n != 1)
+ {
+ throw Exception("table mode=one, but size != 1");
+ }
+ for (var _buf in _array) {
+ _data = {{declaring_type_name __value_type}}.deserialize(_buf);
+ }
+ }
+
+{{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ ///
+ /// {{escape_comment field.comment}}
+ ///
+{{~end~}}
+ {{declaring_null_type_name field.ctype}} get {{format_property_name __code_style field.name}} => _data?.{{format_name_lower_camel field.name}};
+ {{~end~}}
+ void resolveRef({{__manager_name}} tables)
+ {
+
+ }
+ {{~end~}}
+}
diff --git a/Tools/Luban/Templates/dart-json/tables.sbn b/Tools/Luban/Templates/dart-json/tables.sbn
new file mode 100644
index 00000000..760be581
--- /dev/null
+++ b/Tools/Luban/Templates/dart-json/tables.sbn
@@ -0,0 +1,43 @@
+{{~
+func get_table_inner_name
+ ret '_' + ($0 | string.downcase)
+end
+~}}
+{{~for table in __tables ~}}
+{{declaring_import_table table '/gen/'}}
+{{~end~}}
+final class {{__name}}
+{
+ final Future Function(String filePath) _asyncloadFunction;
+ Tables(this._asyncloadFunction);
+
+ {{~for table in __tables ~}}
+{{~if table.comment != '' ~}}
+ //{{escape_comment table.comment}}
+{{~end~}}
+ {{table.name}}? _{{format_property_name __code_style table.name}};
+ {{~end~}}
+
+ Future waitLoad() async {
+ var results = await Future.wait([
+ {{~for table in __tables ~}}
+ _asyncloadFunction("{{table.output_data_file}}"),
+ {{~end~}}
+ ]);
+ {{ idx=0 }}
+ {{~for table in __tables ~}}
+ _{{format_property_name __code_style table.name}} = {{table.name}}(results[{{idx}}]);{{idx=idx+1}}
+ {{~end~}}
+ resolveRef();
+ }
+{{~for table in __tables ~}}
+ {{table.name}}? get {{format_name_lower_camel table.name}} => _{{format_property_name __code_style table.name}};
+{{~end~}}
+
+ void resolveRef(){
+ {{~for table in __tables ~}}
+ _{{format_property_name __code_style table.name}}?.resolveRef(this);
+ {{~end~}}
+ }
+
+}
diff --git a/Tools/Luban/Templates/flatbuffers/schema.sbn b/Tools/Luban/Templates/flatbuffers/schema.sbn
new file mode 100644
index 00000000..ca8099c1
--- /dev/null
+++ b/Tools/Luban/Templates/flatbuffers/schema.sbn
@@ -0,0 +1,51 @@
+namespace {{__namespace}};
+
+{{~for enum in __enums
+ typeName = full_name enum
+ ~}}
+enum {{typeName}}:int {
+ {{~if !enum.has_zero_value_item~}}
+ __GENERATE_DEFAULT_VALUE = 0,
+ {{~end~}}
+ {{~for item in enum.items ~}}
+ {{typeName}}_{{item.name}} = {{item.int_value}},
+ {{~end~}}
+}
+{{~end~}}
+
+{{~for bean in __beans~}}
+{{~if bean.is_abstract_type ~}}
+union {{full_name bean}} {
+ {{~for c in bean.hierarchy_not_abstract_children~}}
+ {{full_name c}},
+ {{~end~}}
+}
+{{~end~}}
+{{~end~}}
+
+{{~for bean in __beans~}}
+{{~if !bean.is_abstract_type ~}}
+table {{full_name bean}} {
+ {{~for f in bean.hierarchy_export_fields ~}}
+ {{f.name}}:{{declaring_type_name f.ctype}}{{type_metadata f.ctype}};
+ {{~end~}}
+}
+{{~end~}}
+{{~end~}}
+
+{{~for map in __maps~}}
+table KeyValue_{{declaring_type_name map.key_type}}_{{declaring_type_name map.value_type}} {
+ key: {{declaring_type_name map.key_type}}{{type_metadata map.key_type}};
+ value: {{declaring_type_name map.value_type}}{{type_metadata map.value_type}};
+}
+{{~end~}}
+
+{{~for table in __tables~}}
+table {{full_name table}} {
+ // WARN! The name 'data_list' is used by FlatBuffersJsonExporter. don't modify it!
+ data_list:[{{declaring_type_name table.value_ttype}}](required);
+}
+
+root_type {{full_name table}};
+{{~end~}}
+
diff --git a/Tools/Luban/Templates/gdscript-json/schema.sbn b/Tools/Luban/Templates/gdscript-json/schema.sbn
new file mode 100644
index 00000000..dca95335
--- /dev/null
+++ b/Tools/Luban/Templates/gdscript-json/schema.sbn
@@ -0,0 +1,167 @@
+@tool
+class_name Schema
+extends RefCounted
+
+
+{{~for enum in __enums~}}
+{{~if enum.comment != '' ~}}
+## {{enum.comment | html.escape}}
+{{~end~}}
+enum {{full_name enum}}
+{
+ {{~ for item in enum.items ~}}
+ {{~if item.comment_or_alias != '' ~}}
+ ## {{item.comment_or_alias | html.escape}}
+ {{~end~}}
+ {{item.name}} = {{item.value}},
+ {{~end~}}
+}
+
+
+{{~end~}}
+{{~for bean in __beans
+ name = (full_name bean)
+~}}
+{{~if bean.comment != '' ~}}
+## {{bean.comment | html.escape}}
+{{~end~}}
+class {{name}}{{if bean.parent_def_type}} extends {{full_name bean.parent_def_type}}{{end}}:
+{{~ for field in bean.export_fields ~}}
+ {{~if field.comment != '' ~}}
+ ## {{field.comment | html.escape}}
+ {{~end~}}
+ var {{format_field_name __code_style field.name}}: {{declaring_type_name field.ctype}}
+{{~end~}}
+
+{{~if bean.is_abstract_type~}}
+ static func fromJson(_json_):
+ var type = _json_['$type']
+ match type:
+ {{~ for child in bean.hierarchy_not_abstract_children~}}
+ "{{impl_data_type child bean}}": return {{full_name child}}.new(_json_)
+ {{~end~}}
+ _: assert(false)
+
+{{~end~}}
+ func _init(_json_) -> void:
+{{~if bean.parent_def_type~}}
+ super(_json_)
+{{~end~}}
+ {{~ for field in bean.export_fields ~}}
+ {{deserialize_field ('self.' + (format_field_name __code_style field.name)) '_json_' field.name field.ctype}}
+ {{~end~}}
+ {{~if bean.export_fields.empty?~}}
+ pass
+ {{~end~}}
+
+
+{{~end~}}
+{{~for table in __tables
+ value_type = table.value_ttype
+ value_type_name = (declaring_type_name value_type)
+~}}
+{{~if table.comment != '' ~}}
+## {{table.comment | html.escape}}
+{{~end~}}
+class {{full_name table}}:
+ {{~if table.is_map_table ~}}
+ var _data_list: Array[{{value_type_name}}]
+ var _data_map: Dictionary
+
+ func _init(_json_) -> void:
+ for _json2_ in _json_:
+ var _v: {{value_type_name}}
+ {{deserialize '_v' '_json2_' value_type}}
+ self._data_list.append(_v)
+ self._data_map[_v.{{format_field_name __code_style table.index_field.name}}] = _v
+
+ func get_data_list() -> Array[{{value_type_name}}]:
+ return self._data_list
+
+ func get_data_map() -> Dictionary:
+ return self._data_map
+
+ func get_item(key) -> {{value_type_name}}:
+ return self._data_map.get(key)
+
+ {{~else if table.multi_key ~}}
+ var _data_list: Array[{{value_type_name}}]
+ {{~ for INDEX in table.index_list ~}}
+ var _{{INDEX.index_field.name}}_data_map: Dictionary
+ {{~ end ~}}
+
+ func _init(_json_) -> void:
+ {{~ for INDEX in table.index_list ~}}
+ self._{{INDEX.index_field.name}}_data_map = {}
+ {{~ end ~}}
+
+ for _json2_ in _json_:
+ var _v: {{value_type_name}}
+ {{deserialize '_v' '_json2_' value_type}}
+ self._data_list.append(_v)
+ {{~ for INDEX in table.index_list ~}}
+ self._{{INDEX.index_field.name}}_data_map[_v.{{INDEX.index_field.name}}] = _v
+ {{~ end ~}}
+
+ func get_data_list() -> Array[{{value_type_name}}]:
+ return self._data_list
+
+ {{~ for INDEX in table.index_list ~}}
+ func get_{{INDEX.index_field.name}}_data_map() -> Dictionary:
+ return self._{{INDEX.index_field.name}}_data_map
+ {{~ end ~}}
+
+{{~ for INDEX in table.index_list ~}}
+ func get_item_by_{{INDEX.index_field.name}}({{INDEX.index_field.name}}) -> {{value_type_name}}:
+ return self._{{INDEX.index_field.name}}_data_map.get({{INDEX.index_field.name}})
+
+{{~ end ~}}
+ {{~else if table.is_list_table ~}}
+ var _data_list: Array[{{value_type_name}}]
+
+ func _init(_json_) -> void:
+ for _json2_ in _json_:
+ var _v: {{value_type_name}}
+ {{deserialize '_v' '_json2_' value_type}}
+ self._data_list.append(_v)
+
+ func get_data_list() -> Array[{{value_type_name}}]:
+ return self._data_list
+
+ func get_item(index) -> {{value_type_name}}:
+ return self._data_list[index]
+ {{~else~}}
+ var _data:{{value_type_name}}
+
+ func _init(_json_) -> void:
+ assert(len(_json_) == 1, "table mode = one, but size != 1")
+ {{deserialize 'self._data' '_json_[0]' value_type}}
+
+ func get_data() -> {{value_type_name}}:
+ return self._data
+
+ {{~ for field in value_type.def_bean.hierarchy_export_fields
+ name = format_field_name __code_style field.name
+ ~}}
+{{~if field.comment != '' ~}}
+ ## {{escape_comment field.comment}}
+{{~end~}}
+ var {{name}}: {{declaring_type_name field.ctype}}:
+ get: return self._data.{{name}}
+
+ {{~end~}}
+ {{~end~}}
+
+{{~end~}}
+class {{str_full_name __full_name}}:
+ {{~for table in __tables ~}}
+ {{~if table.comment != ''~}}
+ ## {{table.comment | html.escape}}
+ {{~end~}}
+ var {{format_method_name __code_style table.name}}: {{full_name table}}
+ {{~end~}}
+
+ func _init(loader: Callable) -> void:
+ {{~for table in __tables ~}}
+ self.{{format_method_name __code_style table.name}} = {{full_name table}}.new(loader.call('{{table.output_data_file}}'))
+ {{~end~}}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/go-bin/bean.sbn b/Tools/Luban/Templates/go-bin/bean.sbn
new file mode 100644
index 00000000..0ff01a03
--- /dev/null
+++ b/Tools/Luban/Templates/go-bin/bean.sbn
@@ -0,0 +1,54 @@
+{{~if ___top_module != ''~}}
+package {{__top_module}};
+{{~end~}}
+
+{{~
+ go_full_name = full_name __this
+ parent_def_type = __this.parent_def_type
+ is_abstract_type = __this.is_abstract_type
+ hierarchy_fields = __this.hierarchy_export_fields
+ hierarchy_not_abstract_children = __this.hierarchy_not_abstract_children
+~}}
+
+import (
+ "{{__luban_module_name}}"
+)
+
+{{collect_import __this}}
+
+type {{go_full_name}} struct {
+ {{~for field in hierarchy_fields ~}}
+ {{format_field_name __code_style field.name}} {{declaring_type_name field.ctype}}
+ {{~end~}}
+}
+
+const TypeId_{{go_full_name}} = {{__this.id}}
+
+func (*{{go_full_name}}) GetTypeId() int32 {
+ return {{__this.id}}
+}
+
+{{~if is_abstract_type~}}
+func New{{go_full_name}}(_buf *luban.ByteBuf) (interface{}, error) {
+ var id int32
+ var err error
+ if id, err = _buf.ReadInt() ; err != nil {
+ return nil, err
+ }
+ switch id {
+ {{~for child in hierarchy_not_abstract_children~}}
+ case {{child.id}}: _v, err := New{{full_name child}}(_buf); if err != nil { return nil, errors.New("{{child.full_name|string.downcase}}") } else { return _v, nil }
+ {{~end~}}
+ default: return nil, errors.New("unknown type id")
+ }
+}
+
+{{~else~}}
+func New{{go_full_name}}(_buf *luban.ByteBuf) (_v *{{go_full_name}}, err error) {
+ _v = &{{go_full_name}}{}
+ {{~for field in hierarchy_fields ~}}
+ {{deserialize_field field.ctype ("_v." + (format_field_name __code_style field.name)) '_buf' 'err'}}
+ {{~end~}}
+ return
+}
+{{~end~}}
diff --git a/Tools/Luban/Templates/go-bin/table.sbn b/Tools/Luban/Templates/go-bin/table.sbn
new file mode 100644
index 00000000..e511405b
--- /dev/null
+++ b/Tools/Luban/Templates/go-bin/table.sbn
@@ -0,0 +1,116 @@
+{{~if ___top_module != ''~}}
+package {{__top_module}};
+{{~end~}}
+
+{{~
+ go_full_name = full_name __this
+ key_type = __this.key_ttype
+ value_type = __this.value_ttype
+ index_field = __this.index_field
+~}}
+
+import "{{__luban_module_name}}"
+
+{{~if __this.is_map_table~}}
+type {{go_full_name}} struct {
+ _dataMap map[{{declaring_type_name key_type}}]{{declaring_type_name value_type}}
+ _dataList []{{declaring_type_name value_type}}
+}
+
+func New{{go_full_name}}(_buf *luban.ByteBuf) (*{{go_full_name}}, error) {
+ if size, err := _buf.ReadSize() ; err != nil {
+ return nil, err
+ } else {
+ _dataList := make([]{{declaring_type_name value_type}}, 0, size)
+ dataMap := make(map[{{declaring_type_name key_type}}]{{declaring_type_name value_type}})
+
+ for i := 0 ; i < size ; i++ {
+ if _v, err2 := New{{full_name value_type.def_bean}}(_buf); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+{{~if value_type.is_dynamic ~}}
+ {{~for child in value_type.def_bean.hierarchy_not_abstract_children~}}
+ if __v, __is := _v.(*{{full_name child}}) ; __is {
+ dataMap[__v.{{format_field_name __code_style index_field.name}}] = _v
+ continue
+ }
+ {{~end~}}
+{{~else~}}
+ dataMap[_v.{{format_field_name __code_style index_field.name}}] = _v
+{{~end~}}
+ }
+ }
+ return &{{go_full_name}}{_dataList:_dataList, _dataMap:dataMap}, nil
+ }
+}
+
+func (table *{{go_full_name}}) GetDataMap() map[{{declaring_type_name key_type}}]{{declaring_type_name value_type}} {
+ return table._dataMap
+}
+
+func (table *{{go_full_name}}) GetDataList() []{{declaring_type_name value_type}} {
+ return table._dataList
+}
+
+func (table *{{go_full_name}}) Get(key {{declaring_type_name key_type}}) {{declaring_type_name value_type}} {
+ return table._dataMap[key]
+}
+
+{{~else if __this.is_list_table~}}
+type {{go_full_name}} struct {
+ _dataList []{{declaring_type_name value_type}}
+}
+
+func New{{go_full_name}}(_buf *luban.ByteBuf) (*{{go_full_name}}, error) {
+ if size, err := _buf.ReadSize() ; err != nil {
+ return nil, err
+ } else {
+ _dataList := make([]{{declaring_type_name value_type}}, 0, size)
+
+ for i := 0 ; i < size ; i++ {
+ if _v, err2 := New{{full_name value_type.def_bean}}(_buf); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ }
+ }
+ return &{{go_full_name}}{_dataList:_dataList}, nil
+ }
+}
+
+func (table *{{go_full_name}}) GetDataList() []{{declaring_type_name value_type}} {
+ return table._dataList
+}
+
+func (table *{{go_full_name}}) Get(index int) {{declaring_type_name value_type}} {
+ return table._dataList[index]
+}
+
+{{~else~}}
+
+import "errors"
+
+type {{go_full_name}} struct {
+ _data {{declaring_type_name value_type}}
+}
+
+func New{{go_full_name}}(_buf *luban.ByteBuf) (*{{go_full_name}}, error) {
+ if size, err := _buf.ReadSize() ; err != nil {
+ return nil, err
+ } else if size != 1 {
+ return nil, errors.New(" size != 1 ")
+ } else {
+ if _v, err2 := New{{full_name value_type.def_bean}}(_buf); err2 != nil {
+ return nil, err2
+ } else {
+ return &{{go_full_name}}{_data:_v}, nil
+ }
+ }
+}
+
+func (table *{{go_full_name}}) Get() {{declaring_type_name value_type}} {
+ return table._data
+}
+
+{{~end~}}
diff --git a/Tools/Luban/Templates/go-bin/tables.sbn b/Tools/Luban/Templates/go-bin/tables.sbn
new file mode 100644
index 00000000..4b0e7d12
--- /dev/null
+++ b/Tools/Luban/Templates/go-bin/tables.sbn
@@ -0,0 +1,33 @@
+{{~if __namespace != ''~}}
+package {{__namespace}};
+{{~end~}}
+
+import (
+ "{{__luban_module_name}}"
+ "errors"
+)
+
+type ByteBufLoader func(string) (*luban.ByteBuf, error)
+
+type {{__name}} struct {
+ {{~for table in __tables ~}}
+ {{table.name}} *{{full_name table}}
+ {{~end~}}
+}
+
+func NewTables(loader ByteBufLoader) (*{{__name}}, error) {
+ var err error
+ var buf *luban.ByteBuf
+
+ tables := &{{__name}}{}
+ {{~for table in __tables ~}}
+ if buf, err = loader("{{table.output_data_file}}") ; err != nil {
+ return nil, err
+ }
+ if tables.{{table.name}}, err = New{{full_name table}}(buf) ; err != nil {
+ return nil, errors.Join(errors.New("failed to load {{table.name}}"), err)
+ }
+ {{~end~}}
+ return tables, nil
+}
+
diff --git a/Tools/Luban/Templates/go-json/bean.sbn b/Tools/Luban/Templates/go-json/bean.sbn
new file mode 100644
index 00000000..1da3b0e4
--- /dev/null
+++ b/Tools/Luban/Templates/go-json/bean.sbn
@@ -0,0 +1,50 @@
+{{~if ___top_module != ''~}}
+package {{__top_module}};
+{{~end~}}
+
+{{~
+ go_full_name = full_name __this
+ parent_def_type = __this.parent_def_type
+ is_abstract_type = __this.is_abstract_type
+ hierarchy_fields = __this.hierarchy_export_fields
+ hierarchy_not_abstract_children = __this.hierarchy_not_abstract_children
+~}}
+
+{{collect_import __this}}
+
+type {{go_full_name}} struct {
+ {{~for field in hierarchy_fields ~}}
+ {{format_field_name __code_style field.name}} {{declaring_type_name field.ctype}}
+ {{~end~}}
+}
+
+const TypeId_{{go_full_name}} = {{__this.id}}
+
+func (*{{go_full_name}}) GetTypeId() int32 {
+ return {{__this.id}}
+}
+
+{{~if is_abstract_type~}}
+func New{{go_full_name}}(_buf map[string]interface{}) (interface{}, error) {
+ var id string
+ var _ok_ bool
+ if id, _ok_ = _buf["$type"].(string) ; !_ok_ {
+ return nil, errors.New("type id missing")
+ }
+ switch id {
+ {{~for child in hierarchy_not_abstract_children~}}
+ case "{{impl_data_type child __this}}": _v, err := New{{full_name child}}(_buf); if err != nil { return nil, errors.New("{{full_name child|string.downcase}}") } else { return _v, nil }
+ {{~end~}}
+ default: return nil, errors.New("unknown type id")
+ }
+}
+
+{{~else~}}
+func New{{go_full_name}}(_buf map[string]interface{}) (_v *{{go_full_name}}, err error) {
+ _v = &{{go_full_name}}{}
+ {{~for field in hierarchy_fields ~}}
+ {{deserialize_field field.ctype ("_v." + (format_field_name __code_style field.name)) field.name '_buf'}}
+ {{~end~}}
+ return
+}
+{{~end~}}
diff --git a/Tools/Luban/Templates/go-json/table.sbn b/Tools/Luban/Templates/go-json/table.sbn
new file mode 100644
index 00000000..3fd5f9e4
--- /dev/null
+++ b/Tools/Luban/Templates/go-json/table.sbn
@@ -0,0 +1,103 @@
+{{~if ___top_module != ''~}}
+package {{__top_module}};
+{{~end~}}
+
+{{~
+ go_full_name = full_name __this
+ key_type = __this.key_ttype
+ value_type = __this.value_ttype
+ index_field = __this.index_field
+~}}
+
+{{~if __this.is_map_table~}}
+type {{go_full_name}} struct {
+ _dataMap map[{{declaring_type_name key_type}}]{{declaring_type_name value_type}}
+ _dataList []{{declaring_type_name value_type}}
+}
+
+func New{{go_full_name}}(_buf []map[string]interface{}) (*{{go_full_name}}, error) {
+ _dataList := make([]{{declaring_type_name value_type}}, 0, len(_buf))
+ dataMap := make(map[{{declaring_type_name key_type}}]{{declaring_type_name value_type}})
+
+ for _, _ele_ := range _buf {
+ if _v, err2 := New{{full_name value_type.def_bean}}(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+{{~if value_type.is_dynamic ~}}
+ {{~for child in value_type.def_bean.hierarchy_not_abstract_children~}}
+ if __v, __is := _v.(*{{full_name child}}) ; __is {
+ dataMap[__v.{{format_field_name __code_style index_field.name}}] = _v
+ continue
+ }
+ {{~end~}}
+{{~else~}}
+ dataMap[_v.{{format_field_name __code_style index_field.name}}] = _v
+{{~end~}}
+ }
+ }
+ return &{{go_full_name}}{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *{{go_full_name}}) GetDataMap() map[{{declaring_type_name key_type}}]{{declaring_type_name value_type}} {
+ return table._dataMap
+}
+
+func (table *{{go_full_name}}) GetDataList() []{{declaring_type_name value_type}} {
+ return table._dataList
+}
+
+func (table *{{go_full_name}}) Get(key {{declaring_type_name key_type}}) {{declaring_type_name value_type}} {
+ return table._dataMap[key]
+}
+
+{{~else if __this.is_list_table~}}
+type {{go_full_name}} struct {
+ _dataList []{{declaring_type_name value_type}}
+}
+
+func New{{go_full_name}}(_buf []map[string]interface{}) (*{{go_full_name}}, error) {
+ _dataList := make([]{{declaring_type_name value_type}}, 0, len(_buf))
+ for _, _ele_ := range _buf {
+ if _v, err2 := New{{full_name value_type.def_bean}}(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ }
+ }
+ return &{{go_full_name}}{_dataList:_dataList}, nil
+}
+
+func (table *{{go_full_name}}) GetDataList() []{{declaring_type_name value_type}} {
+ return table._dataList
+}
+
+func (table *{{go_full_name}}) Get(index int) {{declaring_type_name value_type}} {
+ return table._dataList[index]
+}
+
+{{~else~}}
+
+import "errors"
+
+type {{go_full_name}} struct {
+ _data {{declaring_type_name value_type}}
+}
+
+func New{{go_full_name}}(_buf []map[string]interface{}) (*{{go_full_name}}, error) {
+ if len(_buf) != 1 {
+ return nil, errors.New(" size != 1 ")
+ } else {
+ if _v, err2 := New{{full_name value_type.def_bean}}(_buf[0]); err2 != nil {
+ return nil, err2
+ } else {
+ return &{{go_full_name}}{_data:_v}, nil
+ }
+ }
+}
+
+func (table *{{go_full_name}}) Get() {{declaring_type_name value_type}} {
+ return table._data
+}
+
+{{~end~}}
diff --git a/Tools/Luban/Templates/go-json/tables.sbn b/Tools/Luban/Templates/go-json/tables.sbn
new file mode 100644
index 00000000..6f174821
--- /dev/null
+++ b/Tools/Luban/Templates/go-json/tables.sbn
@@ -0,0 +1,28 @@
+{{~if __namespace != ''~}}
+package {{__namespace}};
+{{~end~}}
+
+type JsonLoader func(string) ([]map[string]interface{}, error)
+
+type {{__name}} struct {
+ {{~for table in __tables ~}}
+ {{table.name}} *{{full_name table}}
+ {{~end~}}
+}
+
+func NewTables(loader JsonLoader) (*{{__name}}, error) {
+ var err error
+ var buf []map[string]interface{}
+
+ tables := &{{__name}}{}
+ {{~for table in __tables ~}}
+ if buf, err = loader("{{table.output_data_file}}") ; err != nil {
+ return nil, err
+ }
+ if tables.{{table.name}}, err = New{{full_name table}}(buf) ; err != nil {
+ return nil, err
+ }
+ {{~end~}}
+ return tables, nil
+}
+
diff --git a/Tools/Luban/Templates/java-bin/bean.sbn b/Tools/Luban/Templates/java-bin/bean.sbn
new file mode 100644
index 00000000..39f90f0a
--- /dev/null
+++ b/Tools/Luban/Templates/java-bin/bean.sbn
@@ -0,0 +1,65 @@
+{{~if __namespace_with_top_module != ''~}}
+package {{__namespace_with_top_module}};
+{{~end~}}
+
+import luban.*;
+
+{{~
+ parent_def_type = __this.parent_def_type
+ export_fields = __this.export_fields
+ hierarchy_export_fields = __this.hierarchy_export_fields
+~}}
+
+{{~if __this.comment != '' ~}}
+/**
+ * {{escape_comment __this.comment}}
+ */
+{{~end~}}
+public {{class_modifier __this}} class {{__name}} extends {{if parent_def_type}}{{__this.parent_def_type.full_name_with_top_module}}{{else}}AbstractBean{{end}} {
+ public {{__name}}(ByteBuf _buf) {
+ {{~if parent_def_type~}}
+ super(_buf);
+ {{~end~}}
+ {{~ for field in export_fields ~}}
+ {{deserialize '_buf' (format_field_name __code_style field.name) field.ctype}}
+ {{~end~}}
+ }
+
+ public static {{__name}} deserialize(ByteBuf _buf) {
+ {{~if __this.is_abstract_type~}}
+ switch (_buf.readInt()) {
+ {{~for child in __this.hierarchy_not_abstract_children~}}
+ case {{child.full_name_with_top_module}}.__ID__: return new {{child.full_name_with_top_module}}(_buf);
+ {{~end~}}
+ default: throw new SerializationException();
+ }
+ {{~else~}}
+ return new {{__this.full_name_with_top_module}}(_buf);
+ {{~end~}}
+ }
+
+ {{~ for field in export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ public final {{declaring_type_name field.ctype}} {{format_field_name __code_style field.name}};
+ {{~end~}}
+
+{{~if !__this.is_abstract_type~}}
+ public static final int __ID__ = {{__this.id}};
+
+ @Override
+ public int getTypeId() { return __ID__; }
+{{~end~}}
+
+ @Override
+ public String toString() {
+ return "{{full_name}}{ "
+ {{~for field in hierarchy_export_fields ~}}
+ + "{{format_field_name __code_style field.name}}:" + {{format_field_name __code_style field.name}} + ","
+ {{~end~}}
+ + "}";
+ }
+}
diff --git a/Tools/Luban/Templates/java-bin/table.sbn b/Tools/Luban/Templates/java-bin/table.sbn
new file mode 100644
index 00000000..8f3c2225
--- /dev/null
+++ b/Tools/Luban/Templates/java-bin/table.sbn
@@ -0,0 +1,81 @@
+{{~if __namespace_with_top_module != ''~}}
+package {{__namespace_with_top_module}};
+{{~end~}}
+
+import luban.*;
+
+
+{{~if __this.comment != '' ~}}
+/**
+ * {{escape_comment __this.comment}}
+ */
+{{~end~}}
+public final class {{__name}} {
+ {{~if __this.is_map_table
+ key_type = __this.key_ttype
+ ~}}
+ private final java.util.HashMap<{{declaring_box_type_name key_type}}, {{declaring_box_type_name __value_type}}> _dataMap;
+ private final java.util.ArrayList<{{declaring_box_type_name __value_type}}> _dataList;
+
+ public {{__name}}(ByteBuf _buf) {
+ _dataMap = new java.util.HashMap<{{declaring_box_type_name key_type}}, {{declaring_box_type_name __value_type}}>();
+ _dataList = new java.util.ArrayList<{{declaring_box_type_name __value_type}}>();
+
+ for(int n = _buf.readSize() ; n > 0 ; --n) {
+ {{declaring_box_type_name __value_type}} _v;
+ {{deserialize '_buf' '_v' __value_type}}
+ _dataList.add(_v);
+ _dataMap.put(_v.{{format_field_name __code_style __this.index_field.name}}, _v);
+ }
+ }
+
+ public java.util.HashMap<{{declaring_box_type_name key_type}}, {{declaring_box_type_name __value_type}}> getDataMap() { return _dataMap; }
+ public java.util.ArrayList<{{declaring_box_type_name __value_type}}> getDataList() { return _dataList; }
+
+{{~if __value_type.is_dynamic~}}
+ @SuppressWarnings("unchecked")
+ public T getAs({{declaring_type_name key_type}} key) { return (T)_dataMap.get(key); }
+{{~end~}}
+ public {{declaring_box_type_name __value_type}} get({{declaring_type_name key_type}} key) { return _dataMap.get(key); }
+
+ {{~else if __this.is_list_table ~}}
+ private final java.util.ArrayList<{{declaring_box_type_name __value_type}}> _dataList;
+
+ public {{__name}}(ByteBuf _buf) {
+ _dataList = new java.util.ArrayList<{{declaring_box_type_name __value_type}}>();
+
+ for(int n = _buf.readSize() ; n > 0 ; --n) {
+ {{declaring_box_type_name __value_type}} _v;
+ {{deserialize '_buf' '_v' __value_type}}
+ _dataList.add(_v);
+ }
+ }
+
+ public java.util.ArrayList<{{declaring_box_type_name __value_type}}> getDataList() { return _dataList; }
+
+ public {{declaring_box_type_name __value_type}} get(int index) { return _dataList.get(index); }
+
+
+ {{~else~}}
+ private final {{declaring_type_name __value_type}} _data;
+
+ public final {{declaring_type_name __value_type}} data() { return _data; }
+
+ public {{__name}}(ByteBuf _buf) {
+ int n = _buf.readSize();
+ if (n != 1) throw new SerializationException("table mode=one, but size != 1");
+ {{deserialize '_buf' '_data' __value_type}}
+ }
+
+
+ {{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ public {{declaring_type_name field.ctype}} {{getter_name field.name}}() { return _data.{{format_field_name __code_style field.name}}; }
+ {{~end~}}
+
+ {{~end~}}
+}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/java-bin/tables.sbn b/Tools/Luban/Templates/java-bin/tables.sbn
new file mode 100644
index 00000000..7ab77d85
--- /dev/null
+++ b/Tools/Luban/Templates/java-bin/tables.sbn
@@ -0,0 +1,37 @@
+{{~if __namespace != ''~}}
+package {{__namespace}};
+{{~end~}}
+
+import luban.*;
+{{~
+func get_table_inner_name
+ ret '_' + ($0 | string.downcase)
+end
+~}}
+
+public final class {{__name}}
+{
+ public static interface IByteBufLoader {
+ ByteBuf load(String file) throws java.io.IOException;
+ }
+
+ {{~for table in __tables
+ inner_name = get_table_inner_name table.name
+ ~}}
+{{~if table.comment != '' ~}}
+ /**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+ private final {{table.full_name_with_top_module}} {{inner_name}};
+ public {{table.full_name_with_top_module}} get{{table.name}}() { return {{inner_name}}; }
+ {{~end~}}
+
+ public {{__name}}(IByteBufLoader loader) throws java.io.IOException {
+ {{~for table in __tables
+ inner_name = get_table_inner_name table.name
+ ~}}
+ {{inner_name}} = new {{table.full_name_with_top_module}}(loader.load("{{table.output_data_file}}"));
+ {{~end~}}
+ }
+}
diff --git a/Tools/Luban/Templates/java-json/bean.sbn b/Tools/Luban/Templates/java-json/bean.sbn
new file mode 100644
index 00000000..34fe4158
--- /dev/null
+++ b/Tools/Luban/Templates/java-json/bean.sbn
@@ -0,0 +1,67 @@
+{{~if __namespace_with_top_module != ''~}}
+package {{__namespace_with_top_module}};
+{{~end~}}
+
+import luban.*;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+
+{{~
+ parent_def_type = __this.parent_def_type
+ export_fields = __this.export_fields
+ hierarchy_export_fields = __this.hierarchy_export_fields
+~}}
+
+{{~if __this.comment != '' ~}}
+/**
+ * {{escape_comment __this.comment}}
+ */
+{{~end~}}
+public {{class_modifier __this}} class {{__name}} extends {{if parent_def_type}}{{__this.parent_def_type.full_name_with_top_module}}{{else}}AbstractBean{{end}} {
+ public {{__name}}(JsonObject _buf) {
+ {{~if parent_def_type~}}
+ super(_buf);
+ {{~end~}}
+ {{~ for field in export_fields ~}}
+ {{deserialize_field (format_field_name __code_style field.name) '_buf' field.name field.ctype}}
+ {{~end~}}
+ }
+
+ public static {{__name}} deserialize(JsonObject _buf) {
+ {{~if __this.is_abstract_type~}}
+ switch (_buf.get("$type").getAsString()) {
+ {{~for child in __this.hierarchy_not_abstract_children~}}
+ case "{{impl_data_type child __this}}": return new {{child.full_name_with_top_module}}(_buf);
+ {{~end~}}
+ default: throw new SerializationException();
+ }
+ {{~else~}}
+ return new {{__this.full_name_with_top_module}}(_buf);
+ {{~end~}}
+ }
+
+ {{~ for field in export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ public final {{declaring_type_name field.ctype}} {{format_field_name __code_style field.name}};
+ {{~end~}}
+
+{{~if !__this.is_abstract_type~}}
+ public static final int __ID__ = {{__this.id}};
+
+ @Override
+ public int getTypeId() { return __ID__; }
+{{~end~}}
+
+ @Override
+ public String toString() {
+ return "{{full_name}}{ "
+ {{~for field in hierarchy_export_fields ~}}
+ + "{{format_field_name __code_style field.name}}:" + {{format_field_name __code_style field.name}} + ","
+ {{~end~}}
+ + "}";
+ }
+}
diff --git a/Tools/Luban/Templates/java-json/table.sbn b/Tools/Luban/Templates/java-json/table.sbn
new file mode 100644
index 00000000..d4a5ebd6
--- /dev/null
+++ b/Tools/Luban/Templates/java-json/table.sbn
@@ -0,0 +1,82 @@
+{{~if __namespace_with_top_module != ''~}}
+package {{__namespace_with_top_module}};
+{{~end~}}
+
+import luban.*;
+import com.google.gson.JsonElement;
+
+
+{{~if __this.comment != '' ~}}
+/**
+ * {{escape_comment __this.comment}}
+ */
+{{~end~}}
+public final class {{__name}} {
+ {{~if __this.is_map_table
+ key_type = __this.key_ttype
+ ~}}
+ private final java.util.HashMap<{{declaring_box_type_name key_type}}, {{declaring_box_type_name __value_type}}> _dataMap;
+ private final java.util.ArrayList<{{declaring_box_type_name __value_type}}> _dataList;
+
+ public {{__name}}(JsonElement _buf) {
+ _dataMap = new java.util.HashMap<{{declaring_box_type_name key_type}}, {{declaring_box_type_name __value_type}}>();
+ _dataList = new java.util.ArrayList<{{declaring_box_type_name __value_type}}>();
+
+ for (com.google.gson.JsonElement _e_ : _buf.getAsJsonArray()) {
+ {{declaring_box_type_name __value_type}} _v;
+ {{deserialize '_v' '_e_' __value_type}}
+ _dataList.add(_v);
+ _dataMap.put(_v.{{format_field_name __code_style __this.index_field.name}}, _v);
+ }
+ }
+
+ public java.util.HashMap<{{declaring_box_type_name key_type}}, {{declaring_box_type_name __value_type}}> getDataMap() { return _dataMap; }
+ public java.util.ArrayList<{{declaring_box_type_name __value_type}}> getDataList() { return _dataList; }
+
+{{~if __value_type.is_dynamic~}}
+ @SuppressWarnings("unchecked")
+ public T getAs({{declaring_type_name key_type}} key) { return (T)_dataMap.get(key); }
+{{~end~}}
+ public {{declaring_box_type_name __value_type}} get({{declaring_type_name key_type}} key) { return _dataMap.get(key); }
+
+ {{~else if __this.is_list_table ~}}
+ private final java.util.ArrayList<{{declaring_box_type_name __value_type}}> _dataList;
+
+ public {{__name}}(JsonElement _buf) {
+ _dataList = new java.util.ArrayList<{{declaring_box_type_name __value_type}}>();
+
+ for (com.google.gson.JsonElement _e_ : _buf.getAsJsonArray()) {
+ {{declaring_box_type_name __value_type}} _v;
+ {{deserialize '_v' '_e_' __value_type}}
+ _dataList.add(_v);
+ }
+ }
+
+ public java.util.ArrayList<{{declaring_box_type_name __value_type}}> getDataList() { return _dataList; }
+
+ public {{declaring_box_type_name __value_type}} get(int index) { return _dataList.get(index); }
+
+
+ {{~else~}}
+ private final {{declaring_type_name __value_type}} _data;
+
+ public final {{declaring_type_name __value_type}} data() { return _data; }
+
+ public {{__name}}(JsonElement _buf) {
+ int n = _buf.getAsJsonArray().size();
+ if (n != 1) throw new SerializationException("table mode=one, but size != 1");
+ {{deserialize '_data' '_buf.getAsJsonArray().get(0).getAsJsonObject()' __value_type}}
+ }
+
+
+ {{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ public {{declaring_type_name field.ctype}} {{getter_name field.name}}() { return _data.{{format_field_name __code_style field.name}}; }
+ {{~end~}}
+
+ {{~end~}}
+}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/java-json/tables.sbn b/Tools/Luban/Templates/java-json/tables.sbn
new file mode 100644
index 00000000..dbb624b0
--- /dev/null
+++ b/Tools/Luban/Templates/java-json/tables.sbn
@@ -0,0 +1,39 @@
+{{~if __namespace != ''~}}
+package {{__namespace}};
+{{~end~}}
+
+import luban.*;
+import com.google.gson.JsonElement;
+{{~
+func get_table_inner_name
+ ret '_' + ($0 | string.downcase)
+end
+~}}
+
+public final class {{__name}}
+{
+
+ public interface IJsonLoader {
+ JsonElement load(String file) throws java.io.IOException;
+ }
+
+ {{~for table in __tables
+ inner_name = get_table_inner_name table.name
+ ~}}
+{{~if table.comment != '' ~}}
+ /**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+ private final {{table.full_name_with_top_module}} {{inner_name}};
+ public {{table.full_name_with_top_module}} get{{table.name}}() { return {{inner_name}}; }
+ {{~end~}}
+
+ public {{__name}}(IJsonLoader loader) throws java.io.IOException {
+ {{~for table in __tables
+ inner_name = get_table_inner_name table.name
+ ~}}
+ {{inner_name}} = new {{table.full_name_with_top_module}}(loader.load("{{table.output_data_file}}"));
+ {{~end~}}
+ }
+}
diff --git a/Tools/Luban/Templates/javascript-bin/schema.sbn b/Tools/Luban/Templates/javascript-bin/schema.sbn
new file mode 100644
index 00000000..5c790639
--- /dev/null
+++ b/Tools/Luban/Templates/javascript-bin/schema.sbn
@@ -0,0 +1,195 @@
+
+{{~for enum in __enums~}}{{~if enum.comment != '' ~}}
+/**
+ * {{enum.comment | html.escape}}
+ */
+{{~end~}}
+export const {{full_name enum}} = Object.freeze({
+ {{~for item in enum.items ~}}
+{{~if item.comment != '' ~}}
+ /**
+ * {{escape_comment item.comment}}
+ */
+{{~end~}}
+ {{item.name}}: {{item.int_value}},
+ {{~end~}}
+});
+
+{{~end~}}
+
+
+{{~
+func get_ref_name
+ ret (format_property_name __code_style $0.name) + '_ref'
+end
+
+func generate_resolve_field_ref
+ field = $0
+ fieldName = format_property_name __code_style field.name
+ refTable = get_ref_table field
+ if can_generate_ref field
+ tableName = refTable.name
+ if field.is_nullable
+ ret 'this.'+(get_ref_name field) + ' = this.' + fieldName + '!= null ? tables.' + tableName + '.get(this.' + fieldName + ') : null'
+ else
+ ret 'this.'+(get_ref_name field) + ' = tables.' + tableName + '.get(this.' + fieldName + ')'
+ end
+ else
+ if (is_field_bean_need_resolve_ref field)
+ ret 'this.'+fieldName + '?.resolve(tables);'
+ else if (is_field_array_like_need_resolve_ref field)
+ ret 'for (let _e of ' + 'this.' + fieldName + ') { _e?.resolve(tables); }'
+ else if (is_field_map_need_resolve_ref field)
+ ret 'for (let [_, _e] of ' + 'this.' + fieldName + ') { _e?.resolve(tables); }'
+ else
+ ret ''
+ end
+ end
+end
+~}}
+
+
+{{~for bean in __beans~}}
+
+{{~if bean.comment != '' ~}}
+/**
+ * {{escape_comment bean.comment}}
+ */
+{{~end~}}
+export class {{full_name bean}}{{if bean.parent_def_type}} extends {{full_name bean.parent_def_type}}{{end}} {
+{{~if bean.is_abstract_type~}}
+ static constructorFrom(_buf_) {
+ switch (_buf_.readInt()) {
+ {{~ for child in bean.hierarchy_not_abstract_children~}}
+ case {{child.id}}: return new {{full_name child}}(_buf_);
+ {{~end~}}
+ default: throw new Error();
+ }
+ }
+{{~end~}}
+
+ constructor(_buf_) {
+ {{~if bean.parent_def_type~}}
+ super(_buf_);
+ {{~end~}}
+ {{~ for field in bean.export_fields ~}}
+ {{deserialize ('this.' + format_field_name __code_style field.name) '_buf_' field.ctype}};
+ {{~end~}}
+ }
+
+ resolve(tables) {
+ {{~if bean.parent_def_type~}}
+ super.resolve(tables);
+ {{~end~}}
+ {{~ for field in bean.export_fields ~}}
+ {{generate_resolve_field_ref field}}
+ {{~end~}}
+ }
+}
+
+
+{{~end~}}
+
+{{~for table in __tables
+ key_type = table.key_ttype
+ value_type = table.value_ttype
+~}}
+
+{{~if table.comment != '' ~}}
+/**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+export class {{full_name table}} {
+ {{~if table.is_map_table ~}}
+
+ constructor(_buf_) {
+ this._dataMap = new Map();
+ this._dataList = [];
+ for(let n = _buf_.readInt(); n > 0; n--) {
+ let _v;
+ {{deserialize '_v' '_buf_' value_type}};
+ this._dataList.push(_v);
+ this._dataMap.set(_v.{{format_field_name __code_style table.index_field.name}}, _v);
+ }
+ }
+
+ getDataMap() { return this._dataMap; }
+ getDataList() { return this._dataList; }
+
+ get(key) { return this._dataMap.get(key); }
+
+ resolve(tables) {
+ for(let data of this._dataList) {
+ data.resolve(tables);
+ }
+ }
+ {{~else if table.is_list_table ~}}
+
+ constructor(_buf_) {
+ this._dataList = [];
+ for(let n = _buf_.readInt(); n > 0; n--) {
+ let _v;
+ {{deserialize '_v' '_buf_' value_type}};
+ this._dataList.push(_v);
+ }
+ }
+
+ getDataList() { return this._dataList }
+
+ get(index) { return this._dataList[index] }
+
+ resolve(tables) {
+ for(let data of this._dataList) {
+ data.resolve(tables);
+ }
+ }
+ {{~else~}}
+
+ constructor(_buf_) {
+ if (_buf_.readInt() != 1) throw new Error('table mode=one, but size != 1')
+ {{deserialize 'this._data' '_buf_' value_type}}
+ }
+
+ getData() { return this._data; }
+
+ {{~ for field in value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ get {{format_field_name __code_style field.name}}() { return this._data.{{format_field_name __code_style field.name}}; }
+ {{~if can_generate_ref field~}}
+ get {{format_field_name __code_style field.name}}_ref(): { return this._data.{{format_field_name __code_style field.name}}_ref; }
+ {{~end~}}
+ {{~end~}}
+
+ resolve(tables) {
+ this._data.resolve(tables);
+ }
+ {{end}}
+}
+
+{{~end~}}
+
+export class {{__name}} {
+ {{~ for table in __tables ~}}
+{{~if table.comment != '' ~}}
+ /**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+ get {{table.name}}() { return this._{{table.name}};}
+ {{~end~}}
+
+ constructor(loader) {
+ {{~for table in __tables ~}}
+ this._{{table.name}} = new {{full_name table}}(loader('{{table.output_data_file}}'));
+ {{~end~}}
+
+ {{~for table in __tables ~}}
+ this._{{table.name}}.resolve(this);
+ {{~end~}}
+ }
+}
diff --git a/Tools/Luban/Templates/javascript-json/schema.sbn b/Tools/Luban/Templates/javascript-json/schema.sbn
new file mode 100644
index 00000000..5529bd27
--- /dev/null
+++ b/Tools/Luban/Templates/javascript-json/schema.sbn
@@ -0,0 +1,196 @@
+
+{{~for enum in __enums~}}{{~if enum.comment != '' ~}}
+/**
+ * {{enum.comment | html.escape}}
+ */
+{{~end~}}
+export const {{full_name enum}} = Object.freeze({
+ {{~for item in enum.items ~}}
+{{~if item.comment != '' ~}}
+ /**
+ * {{escape_comment item.comment}}
+ */
+{{~end~}}
+ {{item.name}}: {{item.int_value}},
+ {{~end~}}
+});
+
+{{~end~}}
+
+
+{{~
+func get_ref_name
+ ret (format_property_name __code_style $0.name) + '_ref'
+end
+
+func generate_resolve_field_ref
+ field = $0
+ fieldName = format_property_name __code_style field.name
+ refTable = get_ref_table field
+ if can_generate_ref field
+ tableName = refTable.name
+ if field.is_nullable
+ ret 'this.'+(get_ref_name field) + ' = this.' + fieldName + '!= null ? tables.' + tableName + '.get(this.' + fieldName + ') : null'
+ else
+ ret 'this.'+(get_ref_name field) + ' = tables.' + tableName + '.get(this.' + fieldName + ')'
+ end
+ else
+ if (is_field_bean_need_resolve_ref field)
+ ret 'this.'+fieldName + '?.resolve(tables);'
+ else if (is_field_array_like_need_resolve_ref field)
+ ret 'for (let _e of ' + 'this.' + fieldName + ') { _e?.resolve(tables); }'
+ else if (is_field_map_need_resolve_ref field)
+ ret 'for (let [_, _e] of ' + 'this.' + fieldName + ') { _e?.resolve(tables); }'
+ else
+ ret ''
+ end
+ end
+end
+~}}
+
+{{~for bean in __beans~}}
+
+{{~if bean.comment != '' ~}}
+/**
+ * {{escape_comment bean.comment}}
+ */
+{{~end~}}
+export class {{full_name bean}}{{if bean.parent_def_type}} extends {{full_name bean.parent_def_type}}{{end}} {
+{{~if bean.is_abstract_type~}}
+ static constructorFrom(_json_) {
+ switch (_json_["$type"]) {
+ {{~ for child in bean.hierarchy_not_abstract_children~}}
+ case '{{impl_data_type child bean}}': return new {{full_name child}}(_json_);
+ {{~end~}}
+ default: throw new Error();
+ }
+ }
+{{~end~}}
+
+ constructor(_json_) {
+ {{~if bean.parent_def_type~}}
+ super(_json_);
+ {{~end~}}
+ {{~ for field in bean.export_fields ~}}
+ {{~if !field.ctype.is_nullable~}}
+ if (_json_.{{field.name}} === undefined) { throw new Error() };
+ {{~end~}}
+ {{deserialize ('this.' + format_field_name __code_style field.name) ( '_json_.' + field.name) field.ctype}};
+ {{~end~}}
+ }
+
+ resolve(tables) {
+ {{~if bean.parent_def_type~}}
+ super.resolve(tables);
+ {{~end~}}
+ {{~ for field in bean.export_fields ~}}
+ {{generate_resolve_field_ref field}}
+ {{~end~}}
+ }
+}
+
+{{~end~}}
+
+{{~for table in __tables
+ key_type = table.key_ttype
+ value_type = table.value_ttype
+~}}
+
+{{~if table.comment != '' ~}}
+/**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+export class {{full_name table}} {
+ {{~if table.is_map_table ~}}
+
+ constructor(_json_) {
+ this._dataMap = new Map();
+ this._dataList = [];
+ for(var _json2_ of _json_) {
+ let _v;
+ {{deserialize '_v' '_json2_' value_type}};
+ this._dataList.push(_v);
+ this._dataMap.set(_v.{{format_field_name __code_style table.index_field.name}}, _v);
+ }
+ }
+
+ getDataMap() { return this._dataMap; }
+ getDataList() { return this._dataList; }
+
+ get(key) { return this._dataMap.get(key); }
+
+ resolve(tables) {
+ for(let data of this._dataList) {
+ data.resolve(tables);
+ }
+ }
+ {{~else if table.is_list_table ~}}
+
+ constructor(_json_) {
+ this._dataList = [];
+ for(var _json2_ of _json_) {
+ let _v;
+ {{deserialize '_v' '_json2_' value_type}};
+ this._dataList.push(_v);
+ }
+ }
+
+ getDataList() { return this._dataList }
+
+ get(index) { return this._dataList[index] }
+
+ resolve(tables) {
+ for(let data of this._dataList) {
+ data.resolve(tables);
+ }
+ }
+ {{~else~}}
+
+ constructor(_json_) {
+ if (_json_.length != 1) throw new Error('table mode=one, but size != 1');
+ {{deserialize 'this._data' '_json_[0]' value_type}};
+ }
+
+ getData() { return this._data; }
+
+ {{~ for field in value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ get {{format_field_name __code_style field.name}}() { return this._data.{{format_field_name __code_style field.name}}; }
+ {{~if can_generate_ref field~}}
+ get {{format_field_name __code_style field.name}}_ref(): { return this._data.{{format_field_name __code_style field.name}}_ref; }
+ {{~end~}}
+ {{~end~}}
+
+ resolve(tables) {
+ this._data.resolve(tables);
+ }
+ {{end}}
+}
+
+{{~end~}}
+
+export class {{__name}} {
+ {{~ for table in __tables ~}}
+{{~if table.comment != '' ~}}
+ /**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+ get {{table.name}}() { return this._{{table.name}};}
+ {{~end~}}
+
+ constructor(loader) {
+ {{~for table in __tables ~}}
+ this._{{table.name}} = new {{full_name table}}(loader('{{table.output_data_file}}'));
+ {{~end~}}
+
+ {{~for table in __tables ~}}
+ this._{{table.name}}.resolve(this);
+ {{~end~}}
+ }
+}
diff --git a/Tools/Luban/Templates/lua-bin/schema.sbn b/Tools/Luban/Templates/lua-bin/schema.sbn
new file mode 100644
index 00000000..5a492a7f
--- /dev/null
+++ b/Tools/Luban/Templates/lua-bin/schema.sbn
@@ -0,0 +1,158 @@
+local setmetatable = setmetatable
+local pairs = pairs
+local ipairs = ipairs
+local tinsert = table.insert
+
+local function SimpleClass()
+ local class = {}
+ class.__index = class
+ class.New = function(...)
+ local ctor = class.ctor
+ local o = ctor and ctor(...) or {}
+ setmetatable(o, class)
+ return o
+ end
+ return class
+end
+
+
+local function get_map_size(m)
+ local n = 0
+ for _ in pairs(m) do
+ n = n + 1
+ end
+ return n
+end
+
+local enums =
+{
+ {{~ for c in __enums ~}}
+ ---@class {{c.full_name}} {{-if c.comment != ''}} @{{escape_comment c.comment}}{{end}}
+ {{~ for item in c.items ~}}
+ ---@field public {{item.name}} integer {{-if item.comment != ''}} @{{escape_comment item.comment}}{{end}}
+ {{~end~}}
+ ['{{c.full_name}}'] = { {{ for item in c.items }} {{item.name}}={{item.int_value}}, {{end}} };
+ {{~end~}}
+}
+
+local tables =
+{
+{{~for table in __tables ~}}
+ {{~if table.is_map_table ~}}
+ { name='{{table.name}}', file='{{table.output_data_file}}', mode='map', index='{{table.index}}', value_type='{{table.value_ttype.def_bean.full_name}}' },
+ {{~else if table.is_list_table ~}}
+ { name='{{table.name}}', file='{{table.output_data_file}}', mode='list', index='{{table.index}}', value_type='{{table.value_ttype.def_bean.full_name}}' },
+ {{~else~}}
+ { name='{{table.name}}', file='{{table.output_data_file}}', mode='one', value_type='{{table.value_ttype.def_bean.full_name}}'},
+ {{~end~}}
+{{~end~}}
+}
+
+local function InitTypes(methods)
+ local readBool = methods.readBool
+ local readByte = methods.readByte
+ local readShort = methods.readShort
+ local readFshort = methods.readFshort
+ local readInt = methods.readInt
+ local readFint = methods.readFint
+ local readLong = methods.readLong
+ local readFlong = methods.readFlong
+ local readFloat = methods.readFloat
+ local readDouble = methods.readDouble
+ local readSize = methods.readSize
+
+ local readString = methods.readString
+
+ local function readList(bs, keyFun)
+ local list = {}
+ local v
+ for i = 1, readSize(bs) do
+ tinsert(list, keyFun(bs))
+ end
+ return list
+ end
+
+ local readArray = readList
+
+ local function readSet(bs, keyFun)
+ local set = {}
+ local v
+ for i = 1, readSize(bs) do
+ tinsert(set, keyFun(bs))
+ end
+ return set
+ end
+
+ local function readMap(bs, keyFun, valueFun)
+ local map = {}
+ for i = 1, readSize(bs) do
+ local k = keyFun(bs)
+ local v = valueFun(bs)
+ map[k] = v
+ end
+ return map
+ end
+
+ local function readNullableBool(bs)
+ if readBool(bs) then
+ return readBool(bs)
+ end
+ end
+
+ local beans = {}
+ {{~ for bean in __beans ~}}
+ do
+ ---@class {{bean.full_name}} {{if bean.parent_def_type}}:{{bean.parent}} {{end}} {{-if bean.comment != ''}} @{{escape_comment bean.comment}}{{end}}
+ {{~ for field in bean.export_fields~}}
+ ---@field public {{field.name}} {{comment_type field.ctype}} {{-if field.comment != ''}} @{{escape_comment field.comment}}{{end}}
+ {{~end~}}
+ local class = {
+ {{~ for field in bean.export_fields~}}
+ { name='{{field.name}}', type='{{comment_type field.ctype}}'},
+ {{~end~}}
+ }
+ beans['{{bean.full_name}}'] = class
+ end
+ {{~end~}}
+
+ local beans = {}
+{{~ for bean in __beans ~}}
+ do
+ ---@class {{bean.full_name}} {{if bean.parent_def_type}}:{{bean.parent}} {{end}}
+ {{~ for field in bean.export_fields~}}
+ ---@field public {{field.name}} {{comment_type field.ctype}}
+ {{~end~}}
+ local class = SimpleClass()
+ class._id = {{bean.id}}
+ class._type_ = '{{bean.full_name}}'
+ local id2name = { {{for c in bean.hierarchy_not_abstract_children}} [{{c.id}}] = '{{c.full_name}}', {{end}} }
+{{~if bean.is_abstract_type~}}
+ class._deserialize = function(bs)
+ local id = readInt(bs)
+ return beans[id2name[id]]._deserialize(bs)
+ end
+{{~else~}}
+ class._deserialize = function(bs)
+ local o = {
+ {{~ for field in bean.hierarchy_export_fields ~}}
+ {{~if !(need_marshal_bool_prefix field.ctype)~}}
+ {{field.name}} = {{deserialize 'bs' field.ctype}},
+ {{~else~}}
+ {{field.name}} = {{if !field.ctype.is_bool}}readBool(bs) and {{deserialize 'bs' field.ctype}} or nil {{-else-}} readNullableBool(bs) {{-end-}},
+ {{~end~}}
+ {{~end~}}
+ }
+ setmetatable(o, class)
+ return o
+ end
+{{~end~}}
+ beans[class._type_] = class
+ end
+{{~end~}}
+
+
+ return { enums = enums, beans = beans, tables = tables }
+ end
+
+return { InitTypes = InitTypes }
+
diff --git a/Tools/Luban/Templates/lua-lua/schema.sbn b/Tools/Luban/Templates/lua-lua/schema.sbn
new file mode 100644
index 00000000..3a75e1a3
--- /dev/null
+++ b/Tools/Luban/Templates/lua-lua/schema.sbn
@@ -0,0 +1,42 @@
+
+local enums =
+{
+ {{~ for c in __enums ~}}
+ ---@class {{c.full_name}} {{-if c.comment != ''}} @{{escape_comment c.comment}}{{end}}
+ {{~ for item in c.items ~}}
+ ---@field public {{item.name}} integer {{-if item.comment != ''}} @{{escape_comment item.comment}}{{end}}
+ {{~end~}}
+ ['{{c.full_name}}'] = { {{ for item in c.items }} {{item.name}}={{item.int_value}}, {{end}} };
+ {{~end~}}
+}
+
+local beans = {}
+{{~ for bean in __beans ~}}
+ do
+ ---@class {{bean.full_name}} {{if bean.parent_def_type}}:{{bean.parent}} {{end}} {{-if bean.comment != ''}} @{{escape_comment bean.comment}}{{end}}
+ {{~ for field in bean.export_fields~}}
+ ---@field public {{field.name}} {{comment_type field.ctype}} {{-if field.comment != ''}} @{{escape_comment field.comment}}{{end}}
+ {{~end~}}
+ local class = {
+ {{~ for field in bean.export_fields~}}
+ { name='{{field.name}}', type='{{comment_type field.ctype}}'},
+ {{~end~}}
+ }
+ beans['{{bean.full_name}}'] = class
+ end
+{{~end~}}
+
+local tables =
+{
+{{~for table in __tables ~}}
+ {{~if table.is_map_table ~}}
+ { name='{{table.name}}', file='{{table.output_data_file}}', mode='map', index='{{table.index}}', value_type='{{table.value_ttype.def_bean.full_name}}' },
+ {{~else if table.is_list_table ~}}
+ { name='{{table.name}}', file='{{table.output_data_file}}', mode='list', index='{{table.index}}', value_type='{{table.value_ttype.def_bean.full_name}}' },
+ {{~else~}}
+ { name='{{table.name}}', file='{{table.output_data_file}}', mode='one', value_type='{{table.value_ttype.def_bean.full_name}}'},
+ {{~end~}}
+{{~end~}}
+}
+
+return { enums = enums, beans = beans, tables = tables }
diff --git a/Tools/Luban/Templates/pb/schema.sbn b/Tools/Luban/Templates/pb/schema.sbn
new file mode 100644
index 00000000..fce80354
--- /dev/null
+++ b/Tools/Luban/Templates/pb/schema.sbn
@@ -0,0 +1,41 @@
+syntax = "{{__syntax}}";
+
+package {{__namespace}};
+
+{{~for enum in __enums
+ typeName = full_name enum
+ ~}}
+enum {{typeName}} {
+ {{~if !enum.has_zero_value_item ~}}
+ {{typeName}}_EMPTY_PLACEHOLDER = 0;
+ {{~end~}}
+ {{~for item in enum.items ~}}
+ {{typeName}}_{{item.name}} = {{item.int_value}};
+ {{~end~}}
+}
+{{~end~}}
+
+{{~for bean in __beans
+ typeName = full_name bean
+~}}
+message {{typeName}} {
+{{~if bean.is_abstract_type ~}}
+ oneof value {
+ {{~for c in bean.hierarchy_not_abstract_children~}}
+ {{full_name c}} {{c.name}} = {{c.auto_id}};
+ {{~end~}}
+ }
+{{~else~}}
+ {{~for f in bean.hierarchy_export_fields ~}}
+ {{pre_decorator f.ctype}} {{declaring_type_name f.ctype}} {{f.name}} = {{f.auto_id}} {{suffix_options f.ctype}};
+ {{~end~}}
+{{~end~}}
+}
+{{~end~}}
+
+{{~for table in __tables~}}
+message {{full_name table}} {
+ repeated {{declaring_type_name table.value_ttype}} data_list = 1 [packed = false];
+}
+{{~end~}}
+
diff --git a/Tools/Luban/Templates/php-json/schema.sbn b/Tools/Luban/Templates/php-json/schema.sbn
new file mode 100644
index 00000000..478c850f
--- /dev/null
+++ b/Tools/Luban/Templates/php-json/schema.sbn
@@ -0,0 +1,155 @@
+{{~namespace_with_grace_begin __namespace~}}
+
+{{~for enum in __enums~}}
+{{~if enum.comment != '' ~}}
+/**
+ * {{enum.comment | html.escape}}
+ */
+{{~end~}}
+class {{full_name enum}} {
+ {{~for item in enum.items ~}}
+{{~if item.comment != '' ~}}
+ /**
+ * {{escape_comment item.comment}}
+ */
+{{~end~}}
+ public const {{item.name}} = {{item.value}};
+ {{~end~}}
+}
+
+{{~end~}}
+
+
+{{~for bean in __beans~}}
+{{name = (full_name bean)}}
+{{~if bean.comment != '' ~}}
+/**
+ * {{escape_comment bean.comment}}
+ */
+{{~end~}}
+{{class_modifier bean}} class {{name}}{{if bean.parent_def_type}} extends {{full_name bean.parent_def_type}}{{end}} {
+{{~if bean.is_abstract_type~}}
+ public static function constructFrom($_json_) {
+ $type = $_json_['$type'];
+ switch ($type) {
+ {{~ for child in bean.hierarchy_not_abstract_children~}}
+ case '{{impl_data_type child bean}}': return new {{full_name child}}($_json_);
+ {{~end~}}
+ default: throw new \Exception("unknown type:$type");
+ }
+ }
+{{~end~}}
+
+ public function __construct($_json_) {
+ {{~if bean.parent_def_type~}}
+ parent::__construct($_json_);
+ {{~end~}}
+ {{~ for field in bean.export_fields ~}}
+ {{~if !field.ctype.is_nullable~}}
+ if (!array_key_exists('{{field.name}}', $_json_)) { throw new \Exception("field:'{{field.name}}' missing"); }
+ {{~end~}}
+ {{deserialize ('$this->' + format_field_name __code_style field.name) ( '$_json_[\'' + field.name + '\']') field.ctype}};
+ {{~end~}}
+ }
+
+ {{~ for field in bean.export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ public ${{format_field_name __code_style field.name}};
+ {{~end~}}
+}
+
+
+{{~end~}}
+
+{{~for table in __tables
+ key_type = table.key_ttype
+ value_type = table.value_ttype
+ name = (full_name table)
+~}}
+
+{{~if table.comment != '' ~}}
+/**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+class {{name}} {
+ {{~if table.is_map_table ~}}
+ private $_dataMap;
+ private $_dataList;
+ public function __construct($_json_) {
+ $this->_dataMap = [];
+ $this->_dataList = [];
+ foreach ($_json_ as $_json2_) {
+ {{deserialize '$_v' '$_json2_' value_type}};
+ array_push($this->_dataList, $_v);
+ $this->_dataMap[$_v->{{format_field_name __code_style table.index_field.name}}] = $_v;
+ }
+ }
+
+ public function getDataMap() { return $this->_dataMap; }
+ public function getDataList() { return $this->_dataList; }
+
+ public function get($key) { return $this->_dataMap[$key]; }
+
+ {{~else if table.is_list_table ~}}
+ private $_dataList;
+
+ public function __construct($_json_) {
+ $this->_dataList = [];
+ foreach ($_json_ as $_json2_) {
+ {{deserialize '$_v' '$_json2_' value_type}};
+ array_push($this->_dataList, $_v);
+ }
+ }
+
+ public function getDataList() { return $this->_dataList; }
+
+ public function get($index) { return $this->_dataList[$index]; }
+
+ {{~else~}}
+
+ private $_data;
+ public function __construct($_json_) {
+ if (count($_json_) != 1) throw new \Exception('table:{{table.name}} mode=one, but size != 1');
+ {{deserialize '$this->_data' '$_json_[0]' value_type}};
+ }
+
+ public function getData() { return $this->_data; }
+
+ {{~ for field in value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ public function get{{format_field_name __code_style field.name}}() { return $this->_data->{{format_field_name __code_style field.name}}; }
+ {{~end~}}
+
+ {{end}}
+}
+
+{{~end~}}
+
+class {{__name}} {
+ {{~ for table in __tables ~}}
+ private $_{{table.name}};
+{{~if table.comment != '' ~}}
+ /**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+ public function get{{table.name}}() { return $this->_{{table.name}}; }
+ {{~end~}}
+
+ public function __construct($loader) {
+ {{~for table in __tables ~}}
+ $this->_{{table.name}} = new {{full_name table}}($loader('{{table.output_data_file}}'));
+ {{~end~}}
+ }
+}
+
+{{~namespace_with_grace_end __namespace~}}
diff --git a/Tools/Luban/Templates/python-json/schema.sbn b/Tools/Luban/Templates/python-json/schema.sbn
new file mode 100644
index 00000000..dfa6e4bb
--- /dev/null
+++ b/Tools/Luban/Templates/python-json/schema.sbn
@@ -0,0 +1,156 @@
+from enum import Enum
+{{
+
+ func table_key_list
+ table = $0
+ varName = $1
+ indexList = table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
+ ret array.join indexList ', '
+ end
+
+ func table_param_name_list
+ table = $0
+ paramList = table.index_list |array.each do; ret $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+}}
+
+{{~for enum in __enums~}}
+{{~if enum.comment != '' ~}}
+'''
+{{enum.comment | html.escape}}
+'''
+{{~end~}}
+class {{full_name enum}}(Enum):
+ {{~ for item in enum.items ~}}
+{{~if item.comment_or_alias != '' ~}}
+ '''
+ {{item.comment_or_alias | html.escape}}
+ '''
+{{~end~}}
+ {{item.name}} = {{item.value}}
+ {{~end~}}
+ {{~if enum.items.empty?~}}
+ pass
+ {{~end~}}
+
+{{~end~}}
+
+{{~for bean in __beans
+ name = (full_name bean)
+~}}
+class {{name}} {{if bean.parent_def_type}}({{full_name bean.parent_def_type}}){{end}}:
+{{~if bean.is_abstract_type~}}
+ _childrenTypes = None
+ @staticmethod
+ def fromJson(_json_):
+ childrenTypes = {{name}}._childrenTypes
+ if not childrenTypes:
+ childrenTypes = {{name}}._childrenTypes = {
+ {{~ for child in bean.hierarchy_not_abstract_children~}}
+ '{{impl_data_type child bean}}': {{name}},
+ {{~end~}}
+ }
+ type = _json_['$type']
+ child = {{name}}._childrenTypes.get(type)
+ if child != None:
+ return child(_json_)
+ else:
+ raise Exception()
+{{~end~}}
+ def __init__(self, _json_):
+ {{~if bean.parent_def_type~}}
+ {{full_name bean.parent_def_type}}.__init__(self, _json_)
+ {{~end~}}
+ {{~ for field in bean.export_fields ~}}
+ {{deserialize_field ('self.' + (format_field_name __code_style field.name)) '_json_' field.name field.ctype}}
+ {{~end~}}
+ {{~if bean.export_fields.empty?}}
+ pass
+ {{~end~}}
+
+{{~end~}}
+
+{{~for table in __tables
+ value_type = table.value_ttype
+~}}
+class {{full_name table}}:
+ {{~if table.is_map_table ~}}
+
+ def __init__(self, _json_ ):
+ self._dataMap = {}
+ self._dataList = []
+
+ for _json2_ in _json_:
+ {{deserialize '_v' '_json2_' value_type}}
+ self._dataList.append(_v)
+ self._dataMap[_v.{{format_field_name __code_style table.index_field.name}}] = _v
+
+ def getDataMap(self) : return self._dataMap
+ def getDataList(self) : return self._dataList
+
+ def get(self, key) : return self._dataMap.get(key)
+ {{~else if table.is_union_index~}}
+
+ def __init__(self, _json_ ):
+ self._dataMap = {}
+ self._dataList = []
+
+ for _json2_ in _json_:
+ {{deserialize '_v' '_json2_' value_type}}
+ self._dataList.append(_v)
+ self._dataMap[({{table_key_list table '_v'}})] = _v
+
+ def getDataMap(self) : return self._dataMap
+ def getDataList(self) : return self._dataList
+
+ def get(self, {{table_param_name_list table}}) : return self._dataMap.get(({{table_param_name_list table}}))
+
+ {{~else if table.is_list_table ~}}
+
+ def __init__(self, _json_ ):
+ self._dataList = []
+ {{~for idx in table.index_list~}}
+ self._dataMap_{{idx.index_field.name}} = {}
+ {{~end~}}
+ for _json2_ in _json_:
+ {{deserialize '_v' '_json2_' value_type}}
+ self._dataList.append(_v)
+ {{~for idx in table.index_list~}}
+ self._dataMap_{{idx.index_field.name}}[_v.{{format_property_name __code_style idx.index_field.name}}] = _v
+ {{~end~}}
+
+ def getDataList(self) : return self._dataList
+
+ def get(self, index) : return self._dataList[index]
+ {{~for idx in table.index_list~}}
+ def get_by_{{format_property_name __code_style idx.index_field.name}}(self, key): return self._dataMap_{{idx.index_field.name}}.get(key)
+ {{~end~}}
+ {{~else~}}
+
+ def __init__(self, _json_):
+ if (len(_json_) != 1): raise Exception('table mode=one, but size != 1')
+ {{deserialize 'self._data' '_json_[0]' value_type}}
+
+ def getData(self) : return self._data
+
+ {{~ for field in value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != ''
+ name = format_field_name __code_style field.name
+~}}
+ '''
+ {{escape_comment field.comment}}
+ '''
+{{~end~}}
+ def {{name}}(self) : return self._data.{{name}}
+ {{~end~}}
+ {{~end~}}
+
+{{~end~}}
+
+
+class {{str_full_name __full_name}}:
+ def __init__(self, loader):
+ {{~for table in __tables ~}}
+ self.{{format_method_name __code_style table.name}} = {{full_name table}}(loader('{{table.output_data_file}}'));
+ {{~end~}}
diff --git a/Tools/Luban/Templates/rust-bin/lib.sbn b/Tools/Luban/Templates/rust-bin/lib.sbn
new file mode 100644
index 00000000..254110e7
--- /dev/null
+++ b/Tools/Luban/Templates/rust-bin/lib.sbn
@@ -0,0 +1,51 @@
+pub mod prelude{
+ pub use crate::*;
+{{~ for ns in __ns ~}}
+ pub use {{ns}}::*;
+{{~end~}}
+}
+{{~ if __polymorphic_beans.count != 0 ~}}
+
+type AbstractBase = dyn std::any::Any + Sync + Send;
+
+pub trait GetBase<'a, T> {
+ fn get_base(&'a self) -> Result;
+}
+{{~end~}}
+
+#[derive(Debug)]
+pub enum LubanError {
+ Loader(String),
+ Table(String),
+ Bean(String),
+ Polymorphic(String),
+ Unknown(String),
+}
+
+impl std::fmt::Display for LubanError {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.write_str(match self {
+ LubanError::Loader(msg) |
+ LubanError::Table(msg) |
+ LubanError::Bean(msg) |
+ LubanError::Polymorphic(msg) |
+ LubanError::Unknown(msg) => msg,
+ })
+ }
+}
+
+pub struct Tables{
+{{~ for table in __tables ~}}
+ pub {{table.name}}: std::sync::Arc<{{full_name table}}>,
+{{~end~}}
+}
+
+impl Tables {
+ pub fn new Result>(loader: T) -> Result {
+ Ok(Tables {
+{{~ for table in __tables ~}}
+ {{table.name}}: {{full_name table}}::new(loader("{{table.output_data_file}}")?)?,
+{{~end~}}
+ })
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/rust-bin/mod.sbn b/Tools/Luban/Templates/rust-bin/mod.sbn
new file mode 100644
index 00000000..a844024b
--- /dev/null
+++ b/Tools/Luban/Templates/rust-bin/mod.sbn
@@ -0,0 +1,280 @@
+{{~ for mod in __mod.sub_mods ~}}
+pub mod {{mod.name}};
+{{~end~}}
+
+{{~ if __mod.name != '' ~}}
+use super::*;
+{{~end~}}
+use luban_lib::*;
+
+{{~ for enum in __mod.enums ~}}
+{{~ if enum.comment != '' ~}}
+///{{enum.comment | html.escape}}
+{{~end~}}
+{{~ if enum.is_flags ~}}
+bitflags::bitflags!{
+ #[derive(Debug, Hash, Eq, PartialEq)]
+ pub struct {{enum.name}} : u32 {
+ {{~ for item in enum.items ~}}
+ {{~if item.comment_or_alias != '' ~}}
+ ///{{item.comment_or_alias | html.escape}}
+ {{~end~}}
+ const {{item.name}} = {{item.int_value}};
+ {{~end~}}
+ }
+}
+{{~else~}}
+#[derive(Debug, Hash, Eq, PartialEq, macros::EnumFromNum)]
+pub enum {{enum.name}} {
+ {{~ for item in enum.items ~}}
+{{~if item.comment_or_alias != '' ~}}
+ ///{{item.comment_or_alias | html.escape}}
+{{~end~}}
+ {{item.name}} = {{item.value}},
+ {{~end~}}
+ {{~if enum.items.empty?~}}
+ None
+ {{~end~}}
+}
+
+impl From for {{enum.name}} {
+ fn from(value: i32) -> Self {
+ match value {
+ {{~ for item in enum.items ~}}
+ {{item.value}} => {{enum.name}}::{{item.name}},
+ {{~end~}}
+ _ => panic!("Invalid value for {{enum.name}}:{}", value),
+ }
+ }
+}
+
+{{~end~}}
+{{~end~}}
+{{~ for bean in __mod.beans
+ hierarchy_fields = bean.hierarchy_export_fields
+~}}
+#[derive(Debug)]
+{{~if bean.parent != ''~}}
+#[derive(macros::TryIntoBase)]
+{{~end~}}
+pub struct {{bean.name}} {
+ {{~ for field in hierarchy_fields ~}}
+{{~if field.comment != '' ~}}
+ /// {{escape_comment field.comment}}
+{{~end~}}
+ pub {{field.name}}: {{declaring_type_name field.ctype}},
+ {{~end~}}
+}
+{{~if bean.is_abstract_type~}}
+
+impl {{bean.name}} {
+ pub fn new(mut buf: &mut ByteBuf) -> Result, LubanError> {
+ let type_id = buf.read_int();
+ match type_id {
+ {{~for child in bean.hierarchy_not_abstract_children~}}
+ {{full_name child}}::__ID__ => Ok(std::sync::Arc::new({{full_name child}}::new(buf)?)),
+ {{~end~}}
+ _ => Err(LubanError::Bean(format!("Invalid type for {{bean.name}}:{}", type_id)))
+ }
+ }
+}
+
+pub trait T{{bean.name}} {
+ {{~ for field in hierarchy_fields ~}}
+ fn {{getter_name field.name}}(&self) -> &{{declaring_type_name field.ctype}};
+ {{~end~}}
+}
+{{~for child in bean.hierarchy_not_abstract_children~}}
+
+impl {{base_trait_name bean}} for {{full_name child}} {
+ {{~ for field in hierarchy_fields ~}}
+ fn {{getter_name field.name}}(&self) -> &{{declaring_type_name field.ctype}} {
+ &self.{{field.name}}
+ }
+ {{~end~}}
+}
+{{~end~}}
+
+impl<'a> GetBase<'a, &'a dyn {{base_trait_name bean}}> for AbstractBase {
+ fn get_base(&'a self) -> Result<&'a dyn {{base_trait_name bean}}, LubanError> {
+ {{~for child in bean.hierarchy_not_abstract_children~}}
+ let base: Result<&{{full_name child}}, _> = self.try_into();
+ if let Ok(r) = base {
+ return Ok(r);
+ }
+ {{~end~}}
+
+ Err(LubanError::Polymorphic(format!("Invalid type for {{bean.name}}")))
+ }
+}
+{{~else~}}
+
+impl {{bean.name}}{
+ pub fn new(mut buf: &mut ByteBuf) -> Result<{{bean.name}}, LubanError> {
+ {{~ for field in hierarchy_fields ~}}
+ {{deserialize field.name 'buf' field.ctype}}
+ {{~end~}}
+
+ Ok({{bean.name}} { {{ for field in hierarchy_fields }}{{field.name}}, {{end}}})
+ }
+
+ pub const __ID__: i32 = {{bean.id}};
+}
+{{~end~}}
+
+{{~end~}}
+{{~ for table in __mod.tables
+ key_type = declaring_type_name table.key_ttype
+ if table.value_ttype.def_bean.is_abstract_type
+ value_type = declaring_type_name table.value_ttype
+ else
+ value_type = "std::sync::Arc<"+declaring_type_name table.value_ttype+">"
+ end
+ name = table.name
+ map_type = "std::collections::HashMap<"+key_type+", "+value_type+">"
+~}}
+{{
+
+ func index_type_name
+ ret (declaring_type_name $0.type)
+ end
+
+ func table_union_map_type_name
+ ret 'std::collections::HashMap<(' + (array.each table.index_list @index_type_name | array.join ', ') + '), ' + value_type + '>'
+ end
+
+ func table_key_list
+ varName = $0
+ indexList = table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
+ ret array.join indexList ', '
+ end
+
+ func table_param_def_list
+ paramList = table.index_list |array.each do; ret (declaring_type_name $0.type) + ' ' + $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+
+ func table_param_name_list
+ paramList = table.index_list |array.each do; ret $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+}}
+{{~ if table.comment != '' ~}}
+///{{table.comment | html.escape}}
+{{~end~}}
+#[derive(Debug)]
+pub struct {{table.name}} {
+ {{~if table.is_map_table ~}}
+ pub data_list: Vec<{{value_type}}>,
+ pub data_map: {{map_type}},
+ {{~else if table.is_list_table ~}}
+ pub data_list: Vec<{{value_type}}>,
+ {{~if table.is_union_index~}}
+ pub data_map_union: {{table_union_map_type_name}},
+ {{~else if !table.index_list.empty?~}}
+ {{~for idx in table.index_list~}}
+ pub data_map_{{idx.index_field.name}}: std::collections::HashMap<{{declaring_type_name idx.type}}, {{value_type}}>,
+ {{~end~}}
+ {{~end~}}
+ {{~else~}}
+ pub data: {{declaring_type_name table.value_ttype}},
+ {{~end~}}
+}
+{{~if table.is_map_table ~}}
+
+impl {{name}} {
+ pub fn new(mut buf: ByteBuf) -> Result, LubanError> {
+ let mut data_map: {{map_type}} = Default::default();
+ let mut data_list: Vec<{{value_type}}> = vec![];
+
+ for x in (0..buf.read_size()).rev() {
+ {{deserialize_row "row" "buf" table.value_ttype}}
+ data_list.push(row.clone());
+ {{~ if table.value_ttype.def_bean.is_abstract_type ~}}
+ let key = >::get_base(std::ops::Deref::deref(&row))?;
+ data_map.insert(key.{{getter_name table.index_field.name}}().clone(), row.clone());
+ {{~else~}}
+ data_map.insert(row.{{table.index_field.name}}.clone(), row.clone());
+ {{~end~}}
+ }
+
+ Ok(std::sync::Arc::new({{name}} { data_map, data_list }))
+ }
+
+ pub fn get(&self, key: &{{key_type}}) -> Option<{{value_type}}> {
+ self.data_map.get(key).map(|x| x.clone())
+ }
+}
+
+impl std::ops::Index<{{key_type}}> for {{name}} {
+ type Output = {{value_type}};
+
+ fn index(&self, index: {{key_type}}) -> &Self::Output {
+ &self.data_map.get(&index).unwrap()
+ }
+}
+{{~else if table.is_list_table ~}}
+
+impl {{name}} {
+ pub fn new(mut buf: ByteBuf) -> Result, LubanError> {
+ let mut data_list: Vec<{{value_type}}> = vec![];
+
+ for x in (0..buf.read_size()).rev() {
+ {{deserialize_row "row" "buf" table.value_ttype}}
+ data_list.push(row.clone());
+ }
+ {{~if table.is_union_index~}}
+ let mut data_map_union: {{table_union_map_type_name}} = Default::default();
+ for x in &data_list {
+ data_map_union.insert(({{table_key_list "x"}}.clone()), x.clone());
+ }
+ {{~else if !table.index_list.empty?~}}
+ {{~for idx in table.index_list~}}
+ let mut data_map_{{idx.index_field.name}}: std::collections::HashMap<{{declaring_type_name idx.index_field.ctype}}, {{value_type}}> = Default::default();
+ {{~end~}}
+ for x in &data_list {
+ {{~for idx in table.index_list~}}
+ data_map_{{idx.index_field.name}}.insert(x.{{format_property_name __code_style idx.index_field.name}}.clone(), x.clone());
+ {{~end~}}
+ }
+ {{~end~}}
+
+ Ok(std::sync::Arc::new({{table.name}} {
+ data_list,
+{{~if table.is_union_index~}}
+ data_map_union,
+{{~else if !table.index_list.empty?~}}
+ {{~for idx in table.index_list~}}
+ data_map_{{idx.index_field.name}},
+ {{~end~}}
+{{~end~}}
+ }))
+ }
+
+ {{~if table.is_union_index~}}
+ pub fn get(&self, key: &({{array.each table.index_list @index_type_name | array.join ', '}})) -> Option<{{value_type}}> {
+ self.data_map_union.get(key).map(|x| x.clone())
+ }
+ {{~else if !table.index_list.empty? ~}}
+ {{~for idx in table.index_list
+ index = format_property_name __code_style idx.index_field.name
+ ~}}
+ pub fn get_by_{{index}}(&self, key: &{{declaring_type_name idx.type}}) -> Option<{{value_type}}> {
+ self.data_map_{{index}}.get(key).map(|x| x.clone())
+ }
+ {{~end~}}
+ {{~end~}}
+}
+{{~else~}}
+
+impl {{name}} {
+ pub fn new(mut buf: ByteBuf) -> Result, LubanError> {
+ let n = buf.read_size();
+ if n != 1 { return Err(LubanError::Table(format!("table mode=one, but size != 1"))); }
+ {{deserialize 'data' 'buf' table.value_ttype}}
+ Ok(std::sync::Arc::new({{name}} { data }))
+ }
+}
+{{~end~}}
+
+{{~end~}}
diff --git a/Tools/Luban/Templates/rust-bin/toml.sbn b/Tools/Luban/Templates/rust-bin/toml.sbn
new file mode 100644
index 00000000..6345181f
--- /dev/null
+++ b/Tools/Luban/Templates/rust-bin/toml.sbn
@@ -0,0 +1,11 @@
+[package]
+name = "{{__name}}"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+bitflags = { version = "2.5.x" , features = ["serde"] }
+macros = { path = "../macros" }
+luban_lib = { path = "../../luban_lib" }
\ No newline at end of file
diff --git a/Tools/Luban/Templates/rust-json/lib.sbn b/Tools/Luban/Templates/rust-json/lib.sbn
new file mode 100644
index 00000000..8f906cc1
--- /dev/null
+++ b/Tools/Luban/Templates/rust-json/lib.sbn
@@ -0,0 +1,51 @@
+pub mod prelude{
+ pub use crate::*;
+{{~ for ns in __ns ~}}
+ pub use {{ns}}::*;
+{{~end~}}
+}
+{{~ if __polymorphic_beans.count != 0 ~}}
+
+type AbstractBase = dyn std::any::Any + Sync + Send;
+
+pub trait GetBase<'a, T> {
+ fn get_base(&'a self) -> Result;
+}
+{{~end~}}
+
+#[derive(Debug)]
+pub enum LubanError {
+ Loader(String),
+ Table(String),
+ Bean(String),
+ Polymorphic(String),
+ Unknown(String),
+}
+
+impl std::fmt::Display for LubanError {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.write_str(match self {
+ LubanError::Loader(msg) |
+ LubanError::Table(msg) |
+ LubanError::Bean(msg) |
+ LubanError::Polymorphic(msg) |
+ LubanError::Unknown(msg) => msg,
+ })
+ }
+}
+
+pub struct Tables{
+{{~ for table in __tables ~}}
+ pub {{table.name}}: std::sync::Arc<{{full_name table}}>,
+{{~end~}}
+}
+
+impl Tables {
+ pub fn new Result>(loader: T) -> Result {
+ Ok(Tables {
+{{~ for table in __tables ~}}
+ {{table.name}}: {{full_name table}}::new(&loader("{{table.output_data_file}}")?)?,
+{{~end~}}
+ })
+ }
+}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/rust-json/mod.sbn b/Tools/Luban/Templates/rust-json/mod.sbn
new file mode 100644
index 00000000..fc2f0be4
--- /dev/null
+++ b/Tools/Luban/Templates/rust-json/mod.sbn
@@ -0,0 +1,287 @@
+{{~ for mod in __mod.sub_mods ~}}
+pub mod {{mod.name}};
+{{~end~}}
+
+{{~ if __mod.name != '' ~}}
+use super::*;
+{{~end~}}
+use serde::Deserialize;
+
+{{~ for enum in __mod.enums ~}}
+{{~ if enum.comment != '' ~}}
+///{{enum.comment | html.escape}}
+{{~end~}}
+{{~ if enum.is_flags ~}}
+bitflags::bitflags!{
+ #[derive(Debug, Hash, Eq, PartialEq)]
+ pub struct {{enum.name}} : u32 {
+ {{~ for item in enum.items ~}}
+ {{~if item.comment_or_alias != '' ~}}
+ ///{{item.comment_or_alias | html.escape}}
+ {{~end~}}
+ const {{item.name}} = {{item.int_value}};
+ {{~end~}}
+ }
+}
+{{~else~}}
+#[derive(Deserialize, Debug, Hash, Eq, PartialEq, macros::EnumFromNum)]
+pub enum {{enum.name}} {
+ {{~ for item in enum.items ~}}
+{{~if item.comment_or_alias != '' ~}}
+ ///{{item.comment_or_alias | html.escape}}
+{{~end~}}
+ {{item.name}} = {{item.value}},
+ {{~end~}}
+ {{~if enum.items.empty?~}}
+ None
+ {{~end~}}
+}
+
+impl From for {{enum.name}} {
+ fn from(value: i32) -> Self {
+ match value {
+ {{~ for item in enum.items ~}}
+ {{item.value}} => {{enum.name}}::{{item.name}},
+ {{~end~}}
+ _ => panic!("Invalid value for {{enum.name}}:{}", value),
+ }
+ }
+}
+
+{{~end~}}
+{{~end~}}
+{{~ for bean in __mod.beans
+ hierarchy_fields = bean.hierarchy_export_fields
+~}}
+#[derive(Debug)]
+{{~if bean.parent != ''~}}
+#[derive(macros::TryIntoBase)]
+{{~end~}}
+pub struct {{bean.name}} {
+ {{~ for field in hierarchy_fields ~}}
+{{~if field.comment != '' ~}}
+ /// {{escape_comment field.comment}}
+{{~end~}}
+ pub {{field.name}}: {{declaring_type_name field.ctype}},
+ {{~end~}}
+}
+{{~if bean.is_abstract_type~}}
+
+impl {{bean.name}} {
+ pub fn new(json: &serde_json::Value) -> Result, LubanError> {
+ let type_id = json["$type"].as_str().unwrap();
+ match type_id {
+ {{~for child in bean.hierarchy_not_abstract_children~}}
+ "{{impl_data_type child bean}}" => Ok(std::sync::Arc::new({{full_name child}}::new(json)?)),
+ {{~end~}}
+ _ => Err(LubanError::Bean(format!("Invalid type for {{bean.name}}:{}", type_id)))
+ }
+ }
+}
+
+pub trait T{{bean.name}} {
+ {{~ for field in hierarchy_fields ~}}
+ fn {{getter_name field.name}}(&self) -> &{{declaring_type_name field.ctype}};
+ {{~end~}}
+}
+{{~for child in bean.hierarchy_not_abstract_children~}}
+
+impl {{base_trait_name bean}} for {{full_name child}} {
+ {{~ for field in hierarchy_fields ~}}
+ fn {{getter_name field.name}}(&self) -> &{{declaring_type_name field.ctype}} {
+ &self.{{field.name}}
+ }
+ {{~end~}}
+}
+{{~end~}}
+
+impl<'a> GetBase<'a, &'a dyn {{base_trait_name bean}}> for AbstractBase {
+ fn get_base(&'a self) -> Result<&'a dyn {{base_trait_name bean}}, LubanError> {
+ {{~for child in bean.hierarchy_not_abstract_children~}}
+ let base: Result<&{{full_name child}}, _> = self.try_into();
+ if let Ok(r) = base {
+ return Ok(r);
+ }
+ {{~end~}}
+
+ Err(LubanError::Polymorphic(format!("Invalid type for {{bean.name}}")))
+ }
+}
+{{~else~}}
+
+impl {{bean.name}}{
+ pub fn new(json: &serde_json::Value) -> Result<{{bean.name}}, LubanError> {
+ {{~ for field in hierarchy_fields ~}}
+ {{deserialize_field field.name 'json' field.ctype}}
+ {{~end~}}
+
+ Ok({{bean.name}} { {{ for field in hierarchy_fields }}{{field.name}}, {{end}}})
+ }
+}
+{{~end~}}
+
+{{~end~}}
+{{~ for table in __mod.tables
+ key_type = declaring_type_name table.key_ttype
+ if table.value_ttype.def_bean.is_abstract_type
+ value_type = declaring_type_name table.value_ttype
+ else
+ value_type = "std::sync::Arc<"+declaring_type_name table.value_ttype+">"
+ end
+ name = table.name
+ map_type = "std::collections::HashMap<"+key_type+", "+value_type+">"
+~}}
+{{
+
+ func index_type_name
+ ret (declaring_type_name $0.type)
+ end
+
+ func table_union_map_type_name
+ ret 'std::collections::HashMap<(' + (array.each table.index_list @index_type_name | array.join ', ') + '), ' + value_type + '>'
+ end
+
+ func table_key_list
+ varName = $0
+ indexList = table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
+ ret array.join indexList ', '
+ end
+
+ func table_param_def_list
+ paramList = table.index_list |array.each do; ret (declaring_type_name $0.type) + ' ' + $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+
+ func table_param_name_list
+ paramList = table.index_list |array.each do; ret $0.index_field.name; end
+ ret array.join paramList ', '
+ end
+}}
+{{~ if table.comment != '' ~}}
+///{{table.comment | html.escape}}
+{{~end~}}
+#[derive(Debug)]
+pub struct {{table.name}} {
+ {{~if table.is_map_table ~}}
+ pub data_list: Vec<{{value_type}}>,
+ pub data_map: {{map_type}},
+ {{~else if table.is_list_table ~}}
+ pub data_list: Vec<{{value_type}}>,
+ {{~if table.is_union_index~}}
+ pub data_map_union: {{table_union_map_type_name}},
+ {{~else if !table.index_list.empty?~}}
+ {{~for idx in table.index_list~}}
+ pub data_map_{{idx.index_field.name}}: std::collections::HashMap<{{declaring_type_name idx.type}}, {{value_type}}>,
+ {{~end~}}
+ {{~end~}}
+ {{~else~}}
+ pub data: {{declaring_type_name table.value_ttype}},
+ {{~end~}}
+}
+{{~if table.is_map_table ~}}
+
+impl {{name}} {
+ pub fn new(json: &serde_json::Value) -> Result, LubanError> {
+ let mut data_map: {{map_type}} = Default::default();
+ let mut data_list: Vec<{{value_type}}> = vec![];
+
+ for x in json.as_array().unwrap() {
+ {{~ if table.value_ttype.is_bean ~}}
+ {{deserialize_row "row" "x" table.value_ttype}}
+ {{~else~}}
+ let row: {{value_type}} = std::sync::Arc::new(serde_json::from_value(x.clone()).unwrap());
+ {{~end~}}
+ data_list.push(row.clone());
+ {{~ if table.value_ttype.def_bean.is_abstract_type ~}}
+ let key = >::get_base(std::ops::Deref::deref(&row))?;
+ data_map.insert(key.{{getter_name table.index_field.name}}().clone(), row.clone());
+ {{~else~}}
+ data_map.insert(row.{{table.index_field.name}}.clone(), row.clone());
+ {{~end~}}
+ }
+
+ Ok(std::sync::Arc::new({{name}} { data_map, data_list }))
+ }
+
+ pub fn get(&self, key: &{{key_type}}) -> Option<{{value_type}}> {
+ self.data_map.get(key).map(|x| x.clone())
+ }
+}
+
+impl std::ops::Index<{{key_type}}> for {{name}} {
+ type Output = {{value_type}};
+
+ fn index(&self, index: {{key_type}}) -> &Self::Output {
+ &self.data_map.get(&index).unwrap()
+ }
+}
+{{~else if table.is_list_table ~}}
+
+impl {{name}} {
+ pub fn new(json: &serde_json::Value) -> Result, LubanError> {
+ let mut data_list: Vec<{{value_type}}> = vec![];
+
+ for x in json.as_array().unwrap() {
+ {{~ if table.value_ttype.is_bean ~}}
+ {{deserialize_row "row" "x" table.value_ttype}}
+ {{~else~}}
+ let row: {{value_type}} = std::sync::Arc::new(serde_json::from_value(x.clone()).unwrap());
+ {{~end~}}
+ data_list.push(row.clone());
+ }
+ {{~if table.is_union_index~}}
+ let mut data_map_union: {{table_union_map_type_name}} = Default::default();
+ for x in &data_list {
+ data_map_union.insert(({{table_key_list "x"}}.clone()), x.clone());
+ }
+ {{~else if !table.index_list.empty?~}}
+ {{~for idx in table.index_list~}}
+ let mut data_map_{{idx.index_field.name}}: std::collections::HashMap<{{declaring_type_name idx.index_field.ctype}}, {{value_type}}> = Default::default();
+ {{~end~}}
+ for x in &data_list {
+ {{~for idx in table.index_list~}}
+ data_map_{{idx.index_field.name}}.insert(x.{{format_property_name __code_style idx.index_field.name}}.clone(), x.clone());
+ {{~end~}}
+ }
+ {{~end~}}
+
+ Ok(std::sync::Arc::new({{table.name}} {
+ data_list,
+{{~if table.is_union_index~}}
+ data_map_union,
+{{~else if !table.index_list.empty?~}}
+ {{~for idx in table.index_list~}}
+ data_map_{{idx.index_field.name}},
+ {{~end~}}
+{{~end~}}
+ }))
+ }
+
+ {{~if table.is_union_index~}}
+ pub fn get(&self, key: &({{array.each table.index_list @index_type_name | array.join ', '}})) -> Option<{{value_type}}> {
+ self.data_map_union.get(key).map(|x| x.clone())
+ }
+ {{~else if !table.index_list.empty? ~}}
+ {{~for idx in table.index_list
+ index = format_property_name __code_style idx.index_field.name
+ ~}}
+ pub fn get_by_{{index}}(&self, key: &{{declaring_type_name idx.type}}) -> Option<{{value_type}}> {
+ self.data_map_{{index}}.get(key).map(|x| x.clone())
+ }
+ {{~end~}}
+ {{~end~}}
+}
+{{~else~}}
+
+impl {{name}} {
+ pub fn new(json: &serde_json::Value) -> Result, LubanError> {
+ let json = json.as_array().unwrap();
+ let n = json.len();
+ if n != 1 { return Err(LubanError::Table(format!("table mode=one, but size != 1"))); }
+ let data = {{full_name table.value_ttype.def_bean}}::new(&json[0])?;
+ Ok(std::sync::Arc::new({{name}} { data }))
+ }
+}
+{{~end~}}
+
+{{~end~}}
diff --git a/Tools/Luban/Templates/rust-json/toml.sbn b/Tools/Luban/Templates/rust-json/toml.sbn
new file mode 100644
index 00000000..40870c70
--- /dev/null
+++ b/Tools/Luban/Templates/rust-json/toml.sbn
@@ -0,0 +1,12 @@
+[package]
+name = "{{__name}}"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+serde = { version = "1.0.x", features = ["derive"] }
+serde_json = "1.0.x"
+bitflags = { version = "2.5.x" , features = ["serde"]}
+macros = {path = "../macros"}
\ No newline at end of file
diff --git a/Tools/Luban/Templates/typescript-bin/schema.sbn b/Tools/Luban/Templates/typescript-bin/schema.sbn
new file mode 100644
index 00000000..254a33fc
--- /dev/null
+++ b/Tools/Luban/Templates/typescript-bin/schema.sbn
@@ -0,0 +1,234 @@
+
+import ByteBuf from '../luban/ByteBuf'
+
+{{~for enum in __enums~}}
+{{namespace_with_grace_begin enum.namespace}}
+{{~if enum.comment != '' ~}}
+/**
+ * {{enum.comment | html.escape}}
+ */
+{{~end~}}
+export enum {{enum.name}} {
+ {{~for item in enum.items ~}}
+{{~if item.comment != '' ~}}
+ /**
+ * {{escape_comment item.comment}}
+ */
+{{~end~}}
+ {{item.name}} = {{item.value}},
+ {{~end~}}
+}
+
+{{namespace_with_grace_end enum.namespace}}
+{{~end~}}
+
+
+{{~
+func get_ref_name
+ ret (format_property_name __code_style $0.name) + '_ref'
+end
+
+func generate_resolve_field_ref
+ field = $0
+ fieldName = format_property_name __code_style field.name
+ refTable = get_ref_table field
+ if can_generate_ref field
+ tableName = refTable.name
+ if field.is_nullable
+ ret 'this.'+(get_ref_name field) + ' = this.' + fieldName + '!= null ? tables.' + tableName + '.get(this.' + fieldName + ') : null'
+ else
+ ret 'this.'+(get_ref_name field) + ' = tables.' + tableName + '.get(this.' + fieldName + ')'
+ end
+ else
+ if (is_field_bean_need_resolve_ref field)
+ ret 'this.'+fieldName + '?.resolve(tables);'
+ else if (is_field_array_like_need_resolve_ref field)
+ ret 'for (let _e of ' + 'this.' + fieldName + ') { _e?.resolve(tables); }'
+ else if (is_field_map_need_resolve_ref field)
+ ret 'for (let [_, _e] of ' + 'this.' + fieldName + ') { _e?.resolve(tables); }'
+ else
+ ret ''
+ end
+ end
+end
+~}}
+
+{{~for bean in __beans~}}
+
+{{namespace_with_grace_begin bean.namespace}}
+{{~if bean.comment != '' ~}}
+/**
+ * {{escape_comment bean.comment}}
+ */
+{{~end~}}
+export {{if bean.is_abstract_type}}abstract {{end}}class {{bean.name}}{{if bean.parent_def_type}} extends {{bean.parent_def_type.full_name}}{{end}} {
+{{~if bean.is_abstract_type~}}
+ static constructorFrom(_buf_: ByteBuf): {{bean.name}}{
+ switch (_buf_.readInt()) {
+ {{~ for child in bean.hierarchy_not_abstract_children~}}
+ case {{child.id}}: return new {{child.full_name}}(_buf_)
+ {{~end~}}
+ default: throw new Error()
+ }
+ }
+{{~end~}}
+
+ constructor(_buf_: ByteBuf) {
+ {{~if bean.parent_def_type~}}
+ super(_buf_)
+ {{~end~}}
+ {{~ for field in bean.export_fields ~}}
+ {{deserialize ('this.' + format_field_name __code_style field.name) '_buf_' field.ctype}}
+ {{~end~}}
+ }
+
+ {{~ for field in bean.export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ readonly {{format_field_name __code_style field.name}}: {{declaring_type_name field.ctype}}
+ {{~if can_generate_ref field~}}
+ {{get_ref_name field}}: {{declaring_type_name (get_ref_type field)}} | undefined
+ {{~end~}}
+ {{~end~}}
+
+ resolve(tables:{{__name}}) {
+ {{~if bean.parent_def_type~}}
+ super.resolve(tables)
+ {{~end~}}
+ {{~ for field in bean.export_fields ~}}
+ {{generate_resolve_field_ref field}}
+ {{~end~}}
+ }
+}
+
+{{namespace_with_grace_end bean.namespace}}
+
+{{~end~}}
+
+{{~for table in __tables
+ key_type = table.key_ttype
+ value_type = table.value_ttype
+~}}
+
+{{namespace_with_grace_begin table.namespace}}
+{{~if table.comment != '' ~}}
+/**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+export class {{table.name}} {
+ {{~if table.is_map_table ~}}
+ private _dataMap: Map<{{declaring_type_name key_type}}, {{declaring_type_name value_type}}>
+ private _dataList: {{declaring_type_name value_type}}[]
+ constructor(_buf_: ByteBuf) {
+ this._dataMap = new Map<{{declaring_type_name key_type}}, {{declaring_type_name value_type}}>()
+ this._dataList = []
+ for(let n = _buf_.readInt(); n > 0; n--) {
+ let _v: {{declaring_type_name value_type}}
+ {{deserialize '_v' '_buf_' value_type}}
+ this._dataList.push(_v)
+ this._dataMap.set(_v.{{format_field_name __code_style table.index_field.name}}, _v)
+ }
+ }
+
+ getDataMap(): Map<{{declaring_type_name key_type}}, {{declaring_type_name value_type}}> { return this._dataMap; }
+ getDataList(): {{declaring_type_name value_type}}[] { return this._dataList; }
+
+ get(key: {{declaring_type_name key_type}}): {{declaring_type_name value_type}} | undefined {
+ return this._dataMap.get(key);
+ }
+
+ resolve(tables:{{__name}}) {
+ for(let data of this._dataList)
+ {
+ data.resolve(tables)
+ }
+ }
+ {{~else if table.is_list_table ~}}
+ private _dataList: {{declaring_type_name value_type}}[]
+
+ constructor(_buf_: ByteBuf) {
+ this._dataList = []
+ for(let n = _buf_.readInt(); n > 0; n--) {
+ let _v: {{declaring_type_name value_type}}
+ {{deserialize '_v' '_buf_' value_type}}
+ this._dataList.push(_v)
+ }
+ }
+
+ getDataList(): {{declaring_type_name value_type}}[] { return this._dataList }
+
+ get(index: number): {{declaring_type_name value_type}} | undefined { return this._dataList[index] }
+
+ resolve(tables:{{__name}}) {
+ for(let data of this._dataList)
+ {
+ data.resolve(tables)
+ }
+ }
+ {{~else~}}
+
+ private _data: {{declaring_type_name value_type}}
+ constructor(_buf_: ByteBuf) {
+ if (_buf_.readInt() != 1) throw new Error('table mode=one, but size != 1')
+ {{deserialize 'this._data' '_buf_' value_type}}
+ }
+
+ getData(): {{declaring_type_name value_type}} { return this._data; }
+
+ {{~ for field in value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ get {{format_field_name __code_style field.name}}(): {{declaring_type_name field.ctype}} { return this._data.{{format_field_name __code_style field.name}}; }
+ {{~if can_generate_ref field~}}
+ get {{format_field_name __code_style field.name}}_ref(): {{declaring_type_name (get_ref_type field)}} | undefined { return this._data.{{format_field_name __code_style field.name}}_ref; }
+ {{~end~}}
+ {{~end~}}
+
+ resolve(tables:{{__name}}) {
+ this._data.resolve(tables)
+ }
+ {{end}}
+}
+{{namespace_with_grace_end table.namespace}}
+
+{{~end~}}
+
+
+type ByteBufLoader = (file: string) => ByteBuf
+
+export class {{__name}} {
+ {{~ for table in __tables ~}}
+ private _{{table.name}}: {{table.full_name}}
+{{~if table.comment != '' ~}}
+ /**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+ get {{table.name}}(): {{table.full_name}} { return this._{{table.name}};}
+ {{~end~}}
+
+ static getTableNames(): string[] {
+ let names: string[] = [];
+ {{~for table in __tables ~}}
+ names.push('{{table.output_data_file}}');
+ {{~end~}}
+ return names;
+ }
+
+ constructor(loader: ByteBufLoader) {
+ {{~for table in __tables ~}}
+ this._{{table.name}} = new {{table.full_name}}(loader('{{table.output_data_file}}'))
+ {{~end~}}
+
+ {{~for table in __tables ~}}
+ this._{{table.name}}.resolve(this)
+ {{~end~}}
+ }
+}
diff --git a/Tools/Luban/Templates/typescript-json/schema.sbn b/Tools/Luban/Templates/typescript-json/schema.sbn
new file mode 100644
index 00000000..ed794223
--- /dev/null
+++ b/Tools/Luban/Templates/typescript-json/schema.sbn
@@ -0,0 +1,226 @@
+
+{{~for enum in __enums~}}
+{{namespace_with_grace_begin enum.namespace}}
+{{~if enum.comment != '' ~}}
+/**
+ * {{enum.comment | html.escape}}
+ */
+{{~end~}}
+export enum {{enum.name}} {
+ {{~for item in enum.items ~}}
+{{~if item.comment != '' ~}}
+ /**
+ * {{escape_comment item.comment}}
+ */
+{{~end~}}
+ {{item.name}} = {{item.value}},
+ {{~end~}}
+}
+
+{{namespace_with_grace_end enum.namespace}}
+{{~end~}}
+
+
+{{~
+func get_ref_name
+ ret (format_property_name __code_style $0.name) + '_ref'
+end
+
+func generate_resolve_field_ref
+ field = $0
+ fieldName = format_property_name __code_style field.name
+ refTable = get_ref_table field
+ if can_generate_ref field
+ tableName = refTable.name
+ if field.is_nullable
+ ret 'this.'+(get_ref_name field) + ' = this.' + fieldName + '!= null ? tables.' + tableName + '.get(this.' + fieldName + ') : null'
+ else
+ ret 'this.'+(get_ref_name field) + ' = tables.' + tableName + '.get(this.' + fieldName + ')'
+ end
+ else
+ if (is_field_bean_need_resolve_ref field)
+ ret 'this.'+fieldName + '?.resolve(tables);'
+ else if (is_field_array_like_need_resolve_ref field)
+ ret 'for (let _e of ' + 'this.' + fieldName + ') { _e?.resolve(tables); }'
+ else if (is_field_map_need_resolve_ref field)
+ ret 'for (let [_, _e] of ' + 'this.' + fieldName + ') { _e?.resolve(tables); }'
+ else
+ ret ''
+ end
+ end
+end
+~}}
+
+{{~for bean in __beans~}}
+
+{{namespace_with_grace_begin bean.namespace}}
+{{~if bean.comment != '' ~}}
+/**
+ * {{escape_comment bean.comment}}
+ */
+{{~end~}}
+export {{if bean.is_abstract_type}}abstract {{end}}class {{bean.name}}{{if bean.parent_def_type}} extends {{bean.parent_def_type.full_name}}{{end}} {
+{{~if bean.is_abstract_type~}}
+ static constructorFrom(_json_: any): {{bean.name}}{
+ switch (_json_["$type"]) {
+ {{~ for child in bean.hierarchy_not_abstract_children~}}
+ case '{{impl_data_type child bean}}': return new {{child.full_name}}(_json_)
+ {{~end~}}
+ default: throw new Error()
+ }
+ }
+{{~end~}}
+
+ constructor(_json_: any) {
+ {{~if bean.parent_def_type~}}
+ super(_json_)
+ {{~end~}}
+ {{~ for field in bean.export_fields ~}}
+ {{~if !field.ctype.is_nullable~}}
+ if (_json_.{{field.name}} === undefined) { throw new Error() }
+ {{~end~}}
+ {{deserialize ('this.' + format_field_name __code_style field.name) ( '_json_.' + field.name) field.ctype}}
+ {{~end~}}
+ }
+
+ {{~ for field in bean.export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ readonly {{format_field_name __code_style field.name}}: {{declaring_type_name field.ctype}}
+ {{~if can_generate_ref field~}}
+ {{get_ref_name field}}: {{declaring_type_name (get_ref_type field)}} | undefined
+ {{~end~}}
+ {{~end~}}
+
+ resolve(tables:{{__name}}) {
+ {{~if bean.parent_def_type~}}
+ super.resolve(tables)
+ {{~end~}}
+ {{~ for field in bean.export_fields ~}}
+ {{generate_resolve_field_ref field}}
+ {{~end~}}
+ }
+}
+
+{{namespace_with_grace_end bean.namespace}}
+
+{{~end~}}
+
+{{~for table in __tables
+ key_type = table.key_ttype
+ value_type = table.value_ttype
+~}}
+
+{{namespace_with_grace_begin table.namespace}}
+{{~if table.comment != '' ~}}
+/**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+export class {{table.name}} {
+ {{~if table.is_map_table ~}}
+ private _dataMap: Map<{{declaring_type_name key_type}}, {{declaring_type_name value_type}}>
+ private _dataList: {{declaring_type_name value_type}}[]
+ constructor(_json_: any) {
+ this._dataMap = new Map<{{declaring_type_name key_type}}, {{declaring_type_name value_type}}>()
+ this._dataList = []
+ for(var _json2_ of _json_) {
+ let _v: {{declaring_type_name value_type}}
+ {{deserialize '_v' '_json2_' value_type}}
+ this._dataList.push(_v)
+ this._dataMap.set(_v.{{format_field_name __code_style table.index_field.name}}, _v)
+ }
+ }
+
+ getDataMap(): Map<{{declaring_type_name key_type}}, {{declaring_type_name value_type}}> { return this._dataMap; }
+ getDataList(): {{declaring_type_name value_type}}[] { return this._dataList; }
+
+ get(key: {{declaring_type_name key_type}}): {{declaring_type_name value_type}} | undefined { return this._dataMap.get(key); }
+
+ resolve(tables:{{__name}}) {
+ for(let data of this._dataList)
+ {
+ data.resolve(tables)
+ }
+ }
+ {{~else if table.is_list_table ~}}
+ private _dataList: {{declaring_type_name value_type}}[]
+
+ constructor(_json_: any) {
+ this._dataList = []
+ for(var _json2_ of _json_) {
+ let _v: {{declaring_type_name value_type}}
+ {{deserialize '_v' '_json2_' value_type}}
+ this._dataList.push(_v)
+ }
+ }
+
+ getDataList(): {{declaring_type_name value_type}}[] { return this._dataList }
+
+ get(index: number): {{declaring_type_name value_type}} | undefined { return this._dataList[index] }
+
+ resolve(tables:{{__name}}) {
+ for(let data of this._dataList)
+ {
+ data.resolve(tables)
+ }
+ }
+ {{~else~}}
+
+ private _data: {{declaring_type_name value_type}}
+ constructor(_json_: any) {
+ if (_json_.length != 1) throw new Error('table mode=one, but size != 1')
+ {{deserialize 'this._data' '_json_[0]' value_type}}
+ }
+
+ getData(): {{declaring_type_name value_type}} { return this._data; }
+
+ {{~ for field in value_type.def_bean.hierarchy_export_fields ~}}
+{{~if field.comment != '' ~}}
+ /**
+ * {{escape_comment field.comment}}
+ */
+{{~end~}}
+ get {{format_field_name __code_style field.name}}(): {{declaring_type_name field.ctype}} { return this._data.{{format_field_name __code_style field.name}}; }
+ {{~if can_generate_ref field~}}
+ get {{format_field_name __code_style field.name}}_ref(): {{declaring_type_name (get_ref_type field)}} | undefined { return this._data.{{format_field_name __code_style field.name}}_ref; }
+ {{~end~}}
+ {{~end~}}
+
+ resolve(tables:{{__name}})
+ {
+ this._data.resolve(tables)
+ }
+ {{end}}
+}
+{{namespace_with_grace_end table.namespace}}
+
+{{~end~}}
+
+
+type JsonLoader = (file: string) => any
+
+export class {{__name}} {
+ {{~ for table in __tables ~}}
+ private _{{table.name}}: {{table.full_name}}
+{{~if table.comment != '' ~}}
+ /**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+ get {{table.name}}(): {{table.full_name}} { return this._{{table.name}};}
+ {{~end~}}
+
+ constructor(loader: JsonLoader) {
+ {{~for table in __tables ~}}
+ this._{{table.name}} = new {{table.full_name}}(loader('{{table.output_data_file}}'))
+ {{~end~}}
+
+ {{~for table in __tables ~}}
+ this._{{table.name}}.resolve(this)
+ {{~end~}}
+ }
+}
diff --git a/Tools/Luban/Templates/typescript-protobuf/schema.sbn b/Tools/Luban/Templates/typescript-protobuf/schema.sbn
new file mode 100644
index 00000000..0538d7b5
--- /dev/null
+++ b/Tools/Luban/Templates/typescript-protobuf/schema.sbn
@@ -0,0 +1,31 @@
+import pb from 'pb';
+
+type BufLoader = (file: string) => Uint8Array;
+
+export class {{__name}} {
+ {{~ for table in __tables ~}}
+ private _{{table.name}}: pb.cfg.{{table.name}}
+{{~if table.comment != '' ~}}
+ /**
+ * {{escape_comment table.comment}}
+ */
+{{~end~}}
+ get {{table.name}}(): pb.cfg.{{table.name}} { return this._{{table.name}};}
+ {{~end~}}
+
+ static getTableNames(): string[] {
+ let names: string[] = [];
+ {{~for table in __tables ~}}
+ names.push('{{table.output_data_file}}');
+ {{~end~}}
+ return names;
+ }
+
+ constructor(loader: BufLoader) {
+ let buffer: Uint8Array;
+ {{~for table in __tables ~}}
+ buffer = loader('{{table.output_data_file}}');
+ this._{{table.name}} = pb.cfg.{{table.name}}.decode(buffer, buffer.length);
+ {{~end~}}
+ }
+}
diff --git a/Tools/Luban/Ude.NetStandard.dll b/Tools/Luban/Ude.NetStandard.dll
new file mode 100644
index 00000000..2cb9b2f5
Binary files /dev/null and b/Tools/Luban/Ude.NetStandard.dll differ
diff --git a/Tools/Luban/YamlDotNet.NetCore.dll b/Tools/Luban/YamlDotNet.NetCore.dll
new file mode 100644
index 00000000..1c598d78
Binary files /dev/null and b/Tools/Luban/YamlDotNet.NetCore.dll differ
diff --git a/Tools/Luban/de/Neo.Lua.resources.dll b/Tools/Luban/de/Neo.Lua.resources.dll
new file mode 100644
index 00000000..69bb3852
Binary files /dev/null and b/Tools/Luban/de/Neo.Lua.resources.dll differ
diff --git a/Tools/Luban/nlog.xml b/Tools/Luban/nlog.xml
new file mode 100644
index 00000000..8c390bc0
--- /dev/null
+++ b/Tools/Luban/nlog.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/build-luban.bat b/Tools/build-luban.bat
new file mode 100644
index 00000000..3b26f43c
--- /dev/null
+++ b/Tools/build-luban.bat
@@ -0,0 +1,5 @@
+rd /s /q Luban
+
+dotnet build ../../luban/src/Luban/Luban.csproj -c Release -o Luban
+
+pause
\ No newline at end of file
diff --git a/assets/Scripts/chat18x/luban_code.meta b/assets/Scripts/chat18x/luban_code.meta
new file mode 100644
index 00000000..2e68b343
--- /dev/null
+++ b/assets/Scripts/chat18x/luban_code.meta
@@ -0,0 +1,9 @@
+{
+ "ver": "1.2.0",
+ "importer": "directory",
+ "imported": true,
+ "uuid": "2bce8fa5-2ca5-44eb-89aa-d46f7e26d71b",
+ "files": [],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/assets/Scripts/chat18x/manager/ConfigManager.ts b/assets/Scripts/chat18x/manager/ConfigManager.ts
new file mode 100644
index 00000000..6f3c5082
--- /dev/null
+++ b/assets/Scripts/chat18x/manager/ConfigManager.ts
@@ -0,0 +1,55 @@
+import { _decorator, resources, BufferAsset, Component } from "cc";
+import * as cfg from "../../schema/schema";
+import ByteBuf from "db://assets/Scripts/luban/ByteBuf";
+
+const { ccclass, property } = _decorator;
+@ccclass("ConfigManager")
+export default class ConfigManager extends Component {
+ public static tables: cfg.Tables = null;
+ private static dataMap = new Map();
+ public static jsonFileNames: string[] = [];
+
+ onLoad() {
+ this.loadAllConfig();
+ }
+
+ public loadConfigName(): void {
+ ConfigManager.jsonFileNames = cfg.Tables.getTableNames();
+ }
+
+ public loadAllConfig() {
+ this.loadConfigName();
+ let promises: Promise[] = [];
+ for (let curFileName of ConfigManager.jsonFileNames) {
+ let promise = new Promise((resolve, reject) => {
+ resources.load("test/" + curFileName, BufferAsset, (err, data) => {
+ resolve(data);
+ });
+ });
+ promise.then((data: BufferAsset) => {
+ if (data) {
+ ConfigManager.dataMap.set(
+ curFileName,
+ new Uint8Array(data.buffer().slice(0, data.buffer().byteLength))
+ );
+ } else {
+ console.error("静态配置加载失败" + curFileName);
+ }
+ });
+ promises.push(promise);
+ }
+ Promise.all(promises).then((values) => {
+ console.log("静态配置加载完成");
+ ConfigManager.tables = new cfg.Tables(this.getFileData);
+ for (let item of ConfigManager.tables.Tbitem.getDataList()) {
+ console.log(item);
+ }
+ });
+ }
+ private getFileData(fileName: string): ByteBuf {
+ if (ConfigManager.dataMap.has(fileName)) {
+ return new ByteBuf(ConfigManager.dataMap.get(fileName));
+ }
+ return null;
+ }
+}
diff --git a/assets/Scripts/chat18x/manager/ConfigManager.ts.meta b/assets/Scripts/chat18x/manager/ConfigManager.ts.meta
new file mode 100644
index 00000000..02a0f40a
--- /dev/null
+++ b/assets/Scripts/chat18x/manager/ConfigManager.ts.meta
@@ -0,0 +1,9 @@
+{
+ "ver": "4.0.24",
+ "importer": "typescript",
+ "imported": true,
+ "uuid": "fbd435ab-238b-4ae8-a5ee-1823eec61491",
+ "files": [],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/assets/Scripts/chat18x/ui/panels/ChatPanel.ts b/assets/Scripts/chat18x/ui/panels/ChatPanel.ts
index ac79fb4f..fc7f7832 100644
--- a/assets/Scripts/chat18x/ui/panels/ChatPanel.ts
+++ b/assets/Scripts/chat18x/ui/panels/ChatPanel.ts
@@ -1,18 +1,29 @@
-import { _decorator, Component, EditBox, Node,Label,Sprite,UITransform } from "cc";
+import {
+ _decorator,
+ Component,
+ EditBox,
+ Node,
+ Label,
+ Sprite,
+ UITransform,
+} from "cc";
// 首先加载 polyfills 以确保兼容性
import "../../utils/polyfills";
import { DialogManager } from "../../manager/DialogManager";
import { ChatAIService } from "../../core/ChatAIService";
import li_BaseView from "db://assets/Scripts/Main/Common/li_BaseView";
import Utils from "db://assets/Scripts/Main/Common/Utils";
-import {InnerMsgCode} from "db://assets/Scripts/Main/Config/InnerMsgCode";
-import {ChatContentsLayout} from "../components/ChatContentsLayout";
-import {ViewManager} from "db://assets/Scripts/Main/Manager/ViewManager";
+import { InnerMsgCode } from "db://assets/Scripts/Main/Config/InnerMsgCode";
+import { ChatContentsLayout } from "../components/ChatContentsLayout";
+import { ViewManager } from "db://assets/Scripts/Main/Manager/ViewManager";
import GameRootUI from "db://assets/Scripts/Main/Common/GameRootUI";
-import {ImagePopup} from "../components/ImagePopup";
-import {girlDetailInfo, GirlsData} from "db://assets/Scripts/Main/Config/cfg/characters";
+import { ImagePopup } from "../components/ImagePopup";
+import {
+ girlDetailInfo,
+ GirlsData,
+} from "db://assets/Scripts/Main/Config/cfg/characters";
import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
-import {VideoRoleType} from "db://assets/Scripts/Main/Common/GlobalValue";
+import { VideoRoleType } from "db://assets/Scripts/Main/Common/GlobalValue";
const { ccclass, property } = _decorator;
@ccclass("ChatPanel")
@@ -34,44 +45,56 @@ export class ChatPanel extends li_BaseView {
@property(ImagePopup)
popUpImage: ImagePopup = null;
- id:number
+ id: number;
private _nodeTab: any = {};
- openUIDataCT(data)
- {
+ openUIDataCT(data) {
this.id = data;
// 设置当前聊天的角色ID
ChatAIService.Instance.setCurrentRole(this.id);
}
- onLoadCT()
- {
- Utils.parseNode(this.node,this._nodeTab);
+ onLoadCT() {
+ Utils.parseNode(this.node, this._nodeTab);
this.register();
this.refresh(this.id);
}
- register()
- {
- Utils.addInnerEL(InnerMsgCode.Chat_DialogRefresh,this,this.onDialogUpdate);
+ register() {
+ Utils.addInnerEL(
+ InnerMsgCode.Chat_DialogRefresh,
+ this,
+ this.onDialogUpdate
+ );
}
- refresh(id:number) {
+ refresh(id: number) {
this.id = id;
- const data = girlDetailInfo.filter(value=>value.baseInfo.id == id)[0];
- if(!data) return;
+ const data = girlDetailInfo.filter((value) => value.baseInfo.id == id)[0];
+ if (!data) return;
this.girlName.string = data.baseInfo.name;
- ResManager.I.changeBundleSpriteFrame(this.girlImg,data.baseInfo.pic.url,"Chat18x",()=>{
- let sizeTran = this.girlImg.node.parent.getComponent(UITransform);
- Utils.adjustBgPixelRatioToSize(sizeTran.contentSize,this.girlImg.node,2);
+ ResManager.I.changeBundleSpriteFrame(
+ this.girlImg,
+ data.baseInfo.pic.url,
+ "Chat18x",
+ () => {
+ let sizeTran = this.girlImg.node.parent.getComponent(UITransform);
+ Utils.adjustBgPixelRatioToSize(
+ sizeTran.contentSize,
+ this.girlImg.node,
+ 2
+ );
+ }
+ );
+ let uiTransform: UITransform =
+ this._nodeTab.BgFrame.getComponent(UITransform);
+
+ Utils.sendInnerMsg(InnerMsgCode.SimplePlayVide, {
+ path: data.pics[0].url,
+ size: uiTransform.contentSize,
});
- let uiTransform:UITransform = this._nodeTab.BgFrame.getComponent(UITransform);
-
- Utils.sendInnerMsg(InnerMsgCode.SimplePlayVide,{path:data.pics[0].url,size:uiTransform.contentSize} )
-
}
- onDialogUpdate()
- {
- this.layout.UpdateDialog(DialogManager.getInstance().getDialogs())
+ onDialogUpdate() {
+ this.layout.UpdateDialog(DialogManager.getInstance().getDialogs());
}
protected onEnable(): void {
if (!this.manager) this.manager = DialogManager.getInstance();
@@ -86,15 +109,11 @@ export class ChatPanel extends li_BaseView {
this.editBox.string = "";
- DialogManager.getInstance().updateDialog(true, str,true);
+ DialogManager.getInstance().updateDialog(true, str, true);
// 使用新的sendMessage方法,传入角色ID
const ret = await ChatAIService.Instance.sendMessage(this.id, str);
- console.log(ret);
- if (ret == null) {
- console.warn("rep null");
- }
if (this.manager) {
this.manager.updateDialog(false, ret);
}
@@ -104,11 +123,7 @@ export class ChatPanel extends li_BaseView {
//this.popUpImage.refresh("Image/1/blur_naked_1");
}
-
-
-
- returnBtn()
- {
+ returnBtn() {
this.onClose();
GameRootUI.I.showDefaultView();
diff --git a/assets/Scripts/luban.meta b/assets/Scripts/luban.meta
new file mode 100644
index 00000000..262bdd24
--- /dev/null
+++ b/assets/Scripts/luban.meta
@@ -0,0 +1,9 @@
+{
+ "ver": "1.2.0",
+ "importer": "directory",
+ "imported": true,
+ "uuid": "61e402ea-effd-46e7-96e3-aa97fd4e36b1",
+ "files": [],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/assets/Scripts/luban/ByteBuf.ts b/assets/Scripts/luban/ByteBuf.ts
new file mode 100644
index 00000000..6c195a41
--- /dev/null
+++ b/assets/Scripts/luban/ByteBuf.ts
@@ -0,0 +1,411 @@
+import b from "buffer/index.js";
+const { Buffer } = b;
+
+export enum EDeserializeError {
+ OK,
+ NOT_ENOUGH,
+ EXCEED_SIZE,
+}
+
+
+const MIN_CAPACITY: number = 16
+
+const f_2power32 = Math.pow(2, 32)
+const f_2power56 = Math.pow(2, 56)
+
+export default class ByteBuf {
+ private static emptyBuff: Buffer = Buffer.allocUnsafe(0)
+
+ constructor(bytes?: Uint8Array) {
+ this._bytes = bytes != null ? Buffer.from(bytes) : ByteBuf.emptyBuff
+ this._readerIndex = 0
+ this._writerIndex = bytes != null ? bytes.length : 0
+ }
+
+
+ Replace(bytes: Uint8Array) {
+ this._bytes = Buffer.from(bytes)
+ this._readerIndex = 0
+ this._writerIndex = bytes.length
+ }
+
+ Replace2(bytes: Uint8Array, beginPos: number, endPos: number) {
+ this._bytes = Buffer.from(bytes, beginPos, endPos - beginPos)
+ this._readerIndex = beginPos
+ this._writerIndex = endPos
+ }
+
+ private _bytes: Buffer
+
+ // get Bytes(): Buffer { return this._bytes }
+
+ private _readerIndex: number
+ // get this._readerIndex(): number { return this._readerIndex }
+ // set this._readerIndex(value: number) { this._readerIndex = value }
+
+ private _writerIndex: number
+ // get this._writerIndex(): number { return this._writerIndex }
+ // set this._writerIndex(value: number) { this._writerIndex = value }
+
+ get capacity(): number { return this._bytes.length }
+ get size(): number { return this._writerIndex - this._readerIndex }
+ get empty(): boolean { return this._writerIndex <= this._readerIndex }
+ get notEmpty(): boolean { return this._writerIndex > this._readerIndex }
+
+ getBytesNotSafe(): Buffer { return this._bytes }
+
+ addReadIndex(add: number) {
+ this._readerIndex += add
+ }
+
+ private static emptyBytes: Uint8Array = new Uint8Array()
+
+ copyData(): Uint8Array {
+ const n = this.remaining
+ if (n > 0) {
+ return new Uint8Array(this._bytes.buffer.slice(this._readerIndex, this._writerIndex))
+ } else {
+ return ByteBuf.emptyBytes
+ }
+ }
+
+ get remaining(): number { return this._writerIndex - this._readerIndex }
+
+ discardReadBytes() {
+ this._bytes.copyWithin(0, this._readerIndex, this._writerIndex)
+ this._writerIndex -= this._readerIndex
+ this._readerIndex = 0
+ }
+
+
+ clear() {
+ this._readerIndex = this._writerIndex = 0
+ }
+
+
+ private static propSize(initSize: number, needSize: number): number {
+ for (let i = Math.max(initSize, MIN_CAPACITY); i <<= 1;) {
+ if (i >= needSize) {
+ return i
+ }
+ }
+ }
+
+ private ensureRead(size: number) {
+ if (this._readerIndex + size > this._writerIndex) {
+ throw new Error()
+ }
+ }
+
+
+ private canRead(size: number): boolean {
+ return (this._readerIndex + size <= this._writerIndex)
+ }
+
+ readBool(): boolean {
+ this.ensureRead(1)
+ return this._bytes[this._readerIndex++] != 0
+ }
+
+ readByte(): number {
+ this.ensureRead(1)
+ return this._bytes[this._readerIndex++]
+ }
+
+ readShort(): number {
+ this.ensureRead(1)
+ const buf = this._bytes
+ const h = buf.readUInt8(this._readerIndex)
+ if (h < 0x80) {
+ this._readerIndex++
+ return h
+ }
+ else if (h < 0xc0) {
+ this.ensureRead(2)
+ const x = buf.readUInt16BE(this._readerIndex) & 0x3fff
+ this._readerIndex += 2
+ return x
+ }
+ else if ((h == 0xff)) {
+ this.ensureRead(3)
+ const x = buf.readInt16BE(this._readerIndex + 1)
+ this._readerIndex += 3
+ return x
+ }
+ else {
+ throw new Error()
+ }
+ }
+
+ readInt(): number {
+ const buf = this._bytes
+
+ this.ensureRead(1)
+ const h = buf.readUInt8(this._readerIndex)
+ if (h < 0x80) {
+ this._readerIndex++
+ return h
+ }
+ else if (h < 0xc0) {
+ this.ensureRead(2)
+ const x = buf.readUInt16BE(this._readerIndex) & 0x3fff
+ this._readerIndex += 2
+ return x
+ }
+ else if (h < 0xe0) {
+ // console.log(`== read ${buf.readInt32BE(this._readerIndex)}`)
+ this.ensureRead(3)
+ const x = ((h & 0x1f) << 16) | (buf.readUInt16BE(this._readerIndex + 1))
+ this._readerIndex += 3
+ return x
+ }
+ else if (h < 0xf0) {
+ this.ensureRead(4)
+ // console.log(`== read ${buf.readInt32BE(this._readerIndex)}`)
+ const x = buf.readInt32BE(this._readerIndex) & 0x0fffffff
+ this._readerIndex += 4
+ return x
+ }
+ else {
+ this.ensureRead(5)
+ const x = buf.readInt32BE(this._readerIndex + 1)
+ this._readerIndex += 5
+ return x
+ }
+ }
+
+ readFint(): number {
+ this.ensureRead(4)
+ const x = this._bytes.readInt32LE()
+ this._readerIndex += 4
+ return x
+ }
+
+ readLongAsNumber(): number {
+ const buf = this._bytes
+ ///
+ /// 警告! 如有修改,记得调整 TryDeserializeInplaceOctets
+ this.ensureRead(1)
+ const h = buf.readUInt8(this._readerIndex)
+ if (h < 0x80) {
+ this._readerIndex++
+ return h
+ }
+ else if (h < 0xc0) {
+ this.ensureRead(2)
+ const x = buf.readUInt16BE(this._readerIndex) & 0x3fff
+ // console.log(`== read long :${x} index:${this._readerIndex}`)
+ this._readerIndex += 2
+ return x
+ }
+ else if (h < 0xe0) {
+ // console.log(`== read ${buf.readInt32BE(this._readerIndex)}`)
+ this.ensureRead(3)
+ const x = ((h & 0x1f) << 16) | (buf.readUInt16BE(this._readerIndex + 1))
+ this._readerIndex += 3
+ return x
+ }
+ else if (h < 0xf0) {
+ this.ensureRead(4)
+ // console.log(`== read ${buf.readInt32BE(this._readerIndex)}`)
+ const x = buf.readInt32BE(this._readerIndex) & 0x0fffffff
+ this._readerIndex += 4
+ return x
+ }
+ else if (h < 0xf8) {
+ this.ensureRead(5)
+ const xl = buf.readUInt32BE(this._readerIndex + 1)
+ const xh = h & 0x07
+ this._readerIndex += 5
+ return xh * 0x100000000 + xl
+ }
+ else if (h < 0xfc) { // 1111 10xx - - - - -
+ this.ensureRead(6)
+ const xl = buf.readUInt32BE(this._readerIndex + 2)
+ const xh = buf.readUInt16BE(this._readerIndex) & 0x3ff
+ this._readerIndex += 6
+ return xh * 0x100000000 + xl
+ }
+ else if (h < 0xfe) {
+ this.ensureRead(7)
+ const xl = buf.readUInt32BE(this._readerIndex + 3)
+ const xh = (buf.readUInt32BE(this._readerIndex) >> 8) & 0x1ffff
+ this._readerIndex += 7
+ return xh * 0x100000000 + xl
+ }
+ else if (h < 0xff) { // 1111 1110, - - - - - - -
+ this.ensureRead(8)
+ // TODO 是否要对 < Number.MAX_SAFE_INTEGER 优化处理?
+ const xl = buf.readUInt32BE(this._readerIndex + 4)
+ const xh = buf.readUInt32BE(this._readerIndex) & 0xffffff
+ this._readerIndex += 8
+ return xh * f_2power32 + xl
+ }
+ else {
+ this.ensureRead(9)
+ const x = buf.readBigInt64BE(this._readerIndex + 1)
+ // const xl = buf.readUInt32BE(this._readerIndex + 5)
+ // const xh = buf.readInt32BE(this._readerIndex + 1)
+ this._readerIndex += 9
+ return Number(x)
+ }
+ }
+
+ readLong(): bigint {
+ const buf = this._bytes
+ ///
+ this.ensureRead(1)
+ const h = buf.readUInt8(this._readerIndex)
+ if (h < 0x80) {
+ this._readerIndex++
+ return BigInt(h)
+ }
+ else if (h < 0xc0) {
+ this.ensureRead(2)
+ const x = buf.readUInt16BE(this._readerIndex) & 0x3fff
+ this._readerIndex += 2
+ return BigInt(x)
+ }
+ else if (h < 0xe0) {
+ this.ensureRead(3)
+ const x = ((h & 0x1f) << 16) | (buf.readUInt16BE(this._readerIndex + 1))
+ this._readerIndex += 3
+ return BigInt(x)
+ }
+ else if (h < 0xf0) {
+ this.ensureRead(4)
+ const x = buf.readInt32BE(this._readerIndex) & 0x0fffffff
+ this._readerIndex += 4
+ return BigInt(x)
+ }
+ else if (h < 0xf8) {
+ this.ensureRead(5)
+ const xl = buf.readUInt32BE(this._readerIndex + 1)
+ const xh = h & 0x07
+ this._readerIndex += 5
+ return BigInt(xh * 0x100000000 + xl)
+ }
+ else if (h < 0xfc) { // 1111 10xx - - - - -
+ this.ensureRead(6)
+ const xl = buf.readUInt32BE(this._readerIndex + 2)
+ const xh = buf.readUInt16BE(this._readerIndex) & 0x3ff
+ this._readerIndex += 6
+ return BigInt(xh * 0x100000000 + xl)
+ }
+ else if (h < 0xfe) {
+ this.ensureRead(7)
+ const xl = buf.readUInt32BE(this._readerIndex + 3)
+ const xh = (buf.readUInt32BE(this._readerIndex) >> 8) & 0x1ffff
+ this._readerIndex += 7
+ return BigInt(xh * 0x100000000 + xl)
+ }
+ else if (h < 0xff) { // 1111 1110, - - - - - - -
+ this.ensureRead(8)
+ // TODO 是否要对 < Number.MAX_SAFE_INTEGER 优化处理?
+ const xl = buf.readUInt32BE(this._readerIndex + 4)
+ const xh = buf.readUInt32BE(this._readerIndex) & 0xffffff
+ // console.log(`== read8 ${xl} ${xh}`)
+ this._readerIndex += 8
+ return (BigInt(xh) << BigInt(32)) | BigInt(xl)
+ }
+ else {
+ this.ensureRead(9)
+ const x = buf.readBigInt64BE(this._readerIndex + 1)
+ // const xl = buf.readUInt32BE(this._readerIndex + 5)
+ // const xh = buf.readInt32BE(this._readerIndex + 1)
+ this._readerIndex += 9
+ return x
+ }
+ }
+
+ readFloat(): number {
+ this.ensureRead(4)
+ const x = this._bytes.readFloatLE(this._readerIndex)
+ this._readerIndex += 4
+ return x
+ }
+
+ readDouble(): number {
+ this.ensureRead(8)
+ const x = this._bytes.readDoubleLE(this._readerIndex)
+ this._readerIndex += 8
+ return x
+ }
+
+ readSize(): number {
+ return this.readInt()
+ }
+
+ // marshal int
+ // n -> (n << 1) ^ (n >> 31)
+ // read
+ // (x >>> 1) ^ ((x << 31) >> 31)
+ // (x >>> 1) ^ -(n&1)
+ // WriteSint(x: number)
+ // {
+ // WriteUint(((uint)x << 1) ^ ((uint)x >> 31))
+ // }
+
+ // readSint: number()
+ // {
+ // x: number = readUint()
+ // return (int)((x >> 1) ^ ((x & 1) << 31))
+ // }
+
+
+ // marshal long
+ // n -> (n << 1) ^ (n >> 63)
+ // read
+ // (x >>> 1) ^((x << 63) >> 63)
+ // (x >>> 1) ^ -(n&1L)
+ // WriteSlong(long x)
+ // {
+ // WriteUlong(((ulong)x << 1) ^ ((ulong)x >> 63))
+ // }
+
+ // long readSlong()
+ // {
+ // long x = readLong()
+ // return ((long)((ulong)x >> 1) ^ ((x & 1) << 63))
+ // }
+
+ // // Uint8Array, [start, end)
+ // static Func < Uint8Array, int, int, string > StringCacheFinder { get set }
+
+ readString(): string {
+ const n = this.readSize()
+ if (n > 0) {
+ this.ensureRead(n)
+ const s = this._bytes.toString("utf-8", this._readerIndex, this._readerIndex + n)
+ this._readerIndex += n
+ return s
+ }
+ else {
+ return ""
+ }
+ }
+
+ readBytes(): Uint8Array {
+ const n = this.readSize()
+ if (n > 0) {
+ this.ensureRead(n)
+ const x = Buffer.from(this._bytes.slice(this._readerIndex, this._readerIndex + n))
+ this._readerIndex += n
+ return x
+ }
+ else {
+ return ByteBuf.emptyBuff
+ }
+ }
+
+ readArrayBuffer(): ArrayBuffer {
+ return this.readBytes().buffer
+ }
+
+ SkipBytes() {
+ const n = this.readSize()
+ this.ensureRead(n)
+ this._readerIndex += n
+ }
+
+}
diff --git a/assets/Scripts/luban/ByteBuf.ts.meta b/assets/Scripts/luban/ByteBuf.ts.meta
new file mode 100644
index 00000000..d86c7aae
--- /dev/null
+++ b/assets/Scripts/luban/ByteBuf.ts.meta
@@ -0,0 +1,9 @@
+{
+ "ver": "4.0.24",
+ "importer": "typescript",
+ "imported": true,
+ "uuid": "547c38d1-76a2-4bee-9000-29c96b2a7958",
+ "files": [],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/assets/Scripts/schema.meta b/assets/Scripts/schema.meta
new file mode 100644
index 00000000..3f006e66
--- /dev/null
+++ b/assets/Scripts/schema.meta
@@ -0,0 +1,9 @@
+{
+ "ver": "1.2.0",
+ "importer": "directory",
+ "imported": true,
+ "uuid": "d847d059-a5e7-46b6-b224-253ed497f46c",
+ "files": [],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/assets/Scripts/schema/schema.ts b/assets/Scripts/schema/schema.ts
new file mode 100644
index 00000000..33bcdef9
--- /dev/null
+++ b/assets/Scripts/schema/schema.ts
@@ -0,0 +1,253 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+
+import ByteBuf from '../luban/ByteBuf'
+
+
+
+
+
+export namespace demo {
+export class item {
+
+ constructor(_buf_: ByteBuf) {
+ this.id = _buf_.readInt()
+ this.name = _buf_.readString()
+ this.desc = _buf_.readString()
+ this.count = _buf_.readInt()
+ }
+
+ /**
+ * id
+ */
+ readonly id: number
+ /**
+ * 名称
+ */
+ readonly name: string
+ /**
+ * 描述
+ */
+ readonly desc: string
+ /**
+ * 个数
+ */
+ readonly count: number
+
+ resolve(tables:Tables) {
+
+
+
+
+ }
+}
+
+}
+
+
+export namespace demo {
+export class Reward {
+
+ constructor(_buf_: ByteBuf) {
+ this.id = _buf_.readInt()
+ this.name = _buf_.readString()
+ this.desc = _buf_.readString()
+ this.count = _buf_.readInt()
+ }
+
+ /**
+ * id
+ */
+ readonly id: number
+ /**
+ * 名称
+ */
+ readonly name: string
+ /**
+ * 描述
+ */
+ readonly desc: string
+ /**
+ * 个数
+ */
+ readonly count: number
+
+ resolve(tables:Tables) {
+
+
+
+
+ }
+}
+
+}
+
+
+
+export class vector2 {
+
+ constructor(_buf_: ByteBuf) {
+ this.x = _buf_.readFloat()
+ this.y = _buf_.readFloat()
+ }
+
+ readonly x: number
+ readonly y: number
+
+ resolve(tables:Tables) {
+
+
+ }
+}
+
+
+
+
+
+export class vector3 {
+
+ constructor(_buf_: ByteBuf) {
+ this.x = _buf_.readFloat()
+ this.y = _buf_.readFloat()
+ this.z = _buf_.readFloat()
+ }
+
+ readonly x: number
+ readonly y: number
+ readonly z: number
+
+ resolve(tables:Tables) {
+
+
+
+ }
+}
+
+
+
+
+
+export class vector4 {
+
+ constructor(_buf_: ByteBuf) {
+ this.x = _buf_.readFloat()
+ this.y = _buf_.readFloat()
+ this.z = _buf_.readFloat()
+ this.w = _buf_.readFloat()
+ }
+
+ readonly x: number
+ readonly y: number
+ readonly z: number
+ readonly w: number
+
+ resolve(tables:Tables) {
+
+
+
+
+ }
+}
+
+
+
+
+
+export namespace demo {
+export class TbReward {
+ private _dataMap: Map
+ private _dataList: demo.Reward[]
+ constructor(_buf_: ByteBuf) {
+ this._dataMap = new Map()
+ this._dataList = []
+ for(let n = _buf_.readInt(); n > 0; n--) {
+ let _v: demo.Reward
+ _v = new demo.Reward(_buf_)
+ this._dataList.push(_v)
+ this._dataMap.set(_v.id, _v)
+ }
+ }
+
+ getDataMap(): Map { return this._dataMap; }
+ getDataList(): demo.Reward[] { return this._dataList; }
+
+ get(key: number): demo.Reward | undefined {
+ return this._dataMap.get(key);
+ }
+
+ resolve(tables:Tables) {
+ for(let data of this._dataList)
+ {
+ data.resolve(tables)
+ }
+ }
+
+}
+}
+
+
+export namespace demo {
+export class Tbitem {
+ private _dataMap: Map
+ private _dataList: demo.item[]
+ constructor(_buf_: ByteBuf) {
+ this._dataMap = new Map()
+ this._dataList = []
+ for(let n = _buf_.readInt(); n > 0; n--) {
+ let _v: demo.item
+ _v = new demo.item(_buf_)
+ this._dataList.push(_v)
+ this._dataMap.set(_v.id, _v)
+ }
+ }
+
+ getDataMap(): Map { return this._dataMap; }
+ getDataList(): demo.item[] { return this._dataList; }
+
+ get(key: number): demo.item | undefined {
+ return this._dataMap.get(key);
+ }
+
+ resolve(tables:Tables) {
+ for(let data of this._dataList)
+ {
+ data.resolve(tables)
+ }
+ }
+
+}
+}
+
+
+
+type ByteBufLoader = (file: string) => ByteBuf
+
+export class Tables {
+ private _TbReward: demo.TbReward
+ get TbReward(): demo.TbReward { return this._TbReward;}
+ private _Tbitem: demo.Tbitem
+ get Tbitem(): demo.Tbitem { return this._Tbitem;}
+
+ static getTableNames(): string[] {
+ let names: string[] = [];
+ names.push('demo_tbreward');
+ names.push('demo_tbitem');
+ return names;
+ }
+
+ constructor(loader: ByteBufLoader) {
+ this._TbReward = new demo.TbReward(loader('demo_tbreward'))
+ this._Tbitem = new demo.Tbitem(loader('demo_tbitem'))
+
+ this._TbReward.resolve(this)
+ this._Tbitem.resolve(this)
+ }
+}
+
diff --git a/assets/Scripts/schema/schema.ts.meta b/assets/Scripts/schema/schema.ts.meta
new file mode 100644
index 00000000..cf1c96de
--- /dev/null
+++ b/assets/Scripts/schema/schema.ts.meta
@@ -0,0 +1,9 @@
+{
+ "ver": "4.0.24",
+ "importer": "typescript",
+ "imported": true,
+ "uuid": "330f072d-4952-424b-acb9-1511e42cdfb0",
+ "files": [],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/assets/bundles/Chat18x/LubanCfg.meta b/assets/bundles/Chat18x/LubanCfg.meta
new file mode 100644
index 00000000..02828a1c
--- /dev/null
+++ b/assets/bundles/Chat18x/LubanCfg.meta
@@ -0,0 +1,9 @@
+{
+ "ver": "1.2.0",
+ "importer": "directory",
+ "imported": true,
+ "uuid": "47f49576-c2c9-44fd-a97b-757a0bde9e65",
+ "files": [],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/assets/resources/test.meta b/assets/resources/test.meta
new file mode 100644
index 00000000..72ba2a29
--- /dev/null
+++ b/assets/resources/test.meta
@@ -0,0 +1,9 @@
+{
+ "ver": "1.2.0",
+ "importer": "directory",
+ "imported": true,
+ "uuid": "9af205c7-55bf-4df1-9349-5916a429f4fe",
+ "files": [],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/assets/resources/test/demo_tbitem.bin b/assets/resources/test/demo_tbitem.bin
new file mode 100644
index 00000000..6db22b43
--- /dev/null
+++ b/assets/resources/test/demo_tbitem.bin
@@ -0,0 +1,2 @@
+道具1描述1
+道具2描述2d
\ No newline at end of file
diff --git a/assets/resources/test/demo_tbitem.bin.meta b/assets/resources/test/demo_tbitem.bin.meta
new file mode 100644
index 00000000..f0a35562
--- /dev/null
+++ b/assets/resources/test/demo_tbitem.bin.meta
@@ -0,0 +1,12 @@
+{
+ "ver": "1.0.3",
+ "importer": "buffer",
+ "imported": true,
+ "uuid": "b6344d4c-c476-4680-baab-fc0ad7e822c3",
+ "files": [
+ ".bin",
+ ".json"
+ ],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/assets/resources/test/demo_tbreward.bin b/assets/resources/test/demo_tbreward.bin
new file mode 100644
index 00000000..98dbcc02
--- /dev/null
+++ b/assets/resources/test/demo_tbreward.bin
@@ -0,0 +1,2 @@
+道具1碎片
+道具2金币d
\ No newline at end of file
diff --git a/assets/resources/test/demo_tbreward.bin.meta b/assets/resources/test/demo_tbreward.bin.meta
new file mode 100644
index 00000000..aad7c97f
--- /dev/null
+++ b/assets/resources/test/demo_tbreward.bin.meta
@@ -0,0 +1,12 @@
+{
+ "ver": "1.0.3",
+ "importer": "buffer",
+ "imported": true,
+ "uuid": "f4e901c8-045b-48b6-9dbd-a8e66e836316",
+ "files": [
+ ".bin",
+ ".json"
+ ],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/gen_client.bat b/gen_client.bat
new file mode 100644
index 00000000..cb03b6b4
--- /dev/null
+++ b/gen_client.bat
@@ -0,0 +1,15 @@
+set WORKSPACE=..\..
+
+set LUBAN_DLL=Tools\Luban\Luban.dll
+set CONF_ROOT=DataTables
+
+dotnet %LUBAN_DLL% ^
+ -t all ^
+ -c typescript-bin ^
+ -d bin ^
+ --conf %CONF_ROOT%\luban.conf ^
+ -x outputCodeDir=assets\scripts\schema ^
+ -x outputDataDir=assets\resources\test ^
+ -x bin.fileExt=bin
+
+pause
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 5ab677b7..d31e2636 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,7 +6,8 @@
"": {
"name": "XiangQin",
"dependencies": {
- "@google/genai": "^1.13.0"
+ "@google/genai": "^1.13.0",
+ "buffer": "^6.0.3"
}
},
"node_modules/@google/genai": {
@@ -68,6 +69,30 @@
"node": "*"
}
},
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
"node_modules/buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
@@ -188,6 +213,26 @@
"node": ">= 14"
}
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
diff --git a/package.json b/package.json
index c18125a3..63a3c014 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
}
},
"dependencies": {
- "@google/genai": "^1.13.0"
+ "@google/genai": "^1.13.0",
+ "buffer": "^6.0.3"
}
}