Compare commits
474 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
720e2eaf49 | |
|
|
7c0579b4bb | |
|
|
b791b4276d | |
|
|
de075ca7d9 | |
|
|
803145e267 | |
|
|
ea1dc4a462 | |
|
|
62b60ac581 | |
|
|
9bc74b3c73 | |
|
|
4ef2d70398 | |
|
|
8e68ab0fcd | |
|
|
bcf81ffe26 | |
|
|
c14437aa59 | |
|
|
16e4fe2452 | |
|
|
7ad942b7cd | |
|
|
e8ac256e92 | |
|
|
46cc7cd26f | |
|
|
e67082a098 | |
|
|
ae87bf3f52 | |
|
|
ea30f8c202 | |
|
|
874f966a40 | |
|
|
b37f2692e3 | |
|
|
ba2c5c56e7 | |
|
|
d0587324f5 | |
|
|
2962b6a1bf | |
|
|
44b0fc9b36 | |
|
|
33b7f25fd4 | |
|
|
9b97f5d0bd | |
|
|
88ab94e836 | |
|
|
410fdd3618 | |
|
|
bcc7bc8b37 | |
|
|
165ad69a5d | |
|
|
b1c2507d99 | |
|
|
af492cea8d | |
|
|
30a4ce12db | |
|
|
14faa26565 | |
|
|
472c912f0f | |
|
|
e897d6b5c0 | |
|
|
70b5a9b061 | |
|
|
15a5a627d5 | |
|
|
c707935008 | |
|
|
81295cbfe1 | |
|
|
d9013167b8 | |
|
|
ad4acf337f | |
|
|
f25f91b94d | |
|
|
741d820587 | |
|
|
c1b4070520 | |
|
|
4e2891e07b | |
|
|
b1f9105773 | |
|
|
69a0acf63e | |
|
|
ff6e09ec9d | |
|
|
c60f91fdd4 | |
|
|
154d55f372 | |
|
|
2dd826bafb | |
|
|
412a400471 | |
|
|
c738b4dcad | |
|
|
a39339bd51 | |
|
|
699b5a167a | |
|
|
665b9a4cea | |
|
|
abcacebcaa | |
|
|
c0706a84f1 | |
|
|
bfc13bc35f | |
|
|
02f3ebd979 | |
|
|
79940dcf09 | |
|
|
6620cca6e1 | |
|
|
d6ad1e64c4 | |
|
|
c0ddce497c | |
|
|
4255ae25bf | |
|
|
ba1a552d3e | |
|
|
60faab741e | |
|
|
f756ab2aa2 | |
|
|
9b086767a1 | |
|
|
c39b6a623d | |
|
|
827eca027c | |
|
|
e3dc909514 | |
|
|
6d991ef000 | |
|
|
3f2b2c71eb | |
|
|
861f40c29b | |
|
|
d9a2e0f83b | |
|
|
f7814a0612 | |
|
|
142e3ddf93 | |
|
|
7b7ab7b8ba | |
|
|
df932046e4 | |
|
|
7bc489e15e | |
|
|
82fbdb513f | |
|
|
c146cf6031 | |
|
|
ee6bba3414 | |
|
|
9886bd1222 | |
|
|
71185c4f3d | |
|
|
ced29f9fca | |
|
|
dee9bcdfe0 | |
|
|
4cc52c25a3 | |
|
|
69b54fcd91 | |
|
|
fc0772d6f6 | |
|
|
68c48d0c02 | |
|
|
856f30df5b | |
|
|
0e3782dd48 | |
|
|
aab29ed828 | |
|
|
c0d91dfa81 | |
|
|
e977a363ef | |
|
|
480b839d31 | |
|
|
2335a82c11 | |
|
|
7901b7012b | |
|
|
c79e6169a6 | |
|
|
13ee28835a | |
|
|
b2014ab7bb | |
|
|
d5184e136e | |
|
|
3631f131ad | |
|
|
034f0dd21b | |
|
|
c52407bdee | |
|
|
ba269df862 | |
|
|
657bd19c77 | |
|
|
e76b20b24f | |
|
|
caa476272b | |
|
|
953469475c | |
|
|
e8805873ea | |
|
|
e6203df5b3 | |
|
|
6b1669e050 | |
|
|
45f4a13dd2 | |
|
|
0b63b1fcb3 | |
|
|
66e07830d0 | |
|
|
0122d97071 | |
|
|
7d05f1fd4d | |
|
|
a4df2de837 | |
|
|
f3949f9c72 | |
|
|
1a1fc3ca2f | |
|
|
54e1955112 | |
|
|
b3457da8d2 | |
|
|
9f687adcf1 | |
|
|
7f9c4e93d6 | |
|
|
29cf3b56f6 | |
|
|
f617d5f10f | |
|
|
1acaac5b87 | |
|
|
c20505aea3 | |
|
|
f9abe09a8d | |
|
|
582edb6cc6 | |
|
|
a41fd92b43 | |
|
|
1e06690def | |
|
|
c612423590 | |
|
|
d40c016afa | |
|
|
36df70bffb | |
|
|
8cd9e5f247 | |
|
|
a560c23c67 | |
|
|
c009d54d26 | |
|
|
fc1cb23974 | |
|
|
4bd826a360 | |
|
|
00a56c0a37 | |
|
|
8164d641e4 | |
|
|
51dbe96917 | |
|
|
8e4ef0952d | |
|
|
b27366932d | |
|
|
73da39e7cd | |
|
|
7a80812c17 | |
|
|
2021e38485 | |
|
|
c2fc86215c | |
|
|
6bc3552a1f | |
|
|
9e6463f18d | |
|
|
4f8fd20780 | |
|
|
8cd9ffee3c | |
|
|
fb000e400c | |
|
|
e650ff6fe6 | |
|
|
aa0d0a9a36 | |
|
|
c1ffaa2d98 | |
|
|
5861001683 | |
|
|
a78c9abd1a | |
|
|
1377eb828d | |
|
|
19656437cb | |
|
|
83f81ed463 | |
|
|
93595c7748 | |
|
|
79d52c8820 | |
|
|
a6a1d58159 | |
|
|
f740685830 | |
|
|
8b0f607f4a | |
|
|
6bcc8e74ce | |
|
|
91bb1b317f | |
|
|
edc09b6742 | |
|
|
7fc75871d4 | |
|
|
ff93a074c4 | |
|
|
85937685b6 | |
|
|
ba4bb014a9 | |
|
|
967c45dda1 | |
|
|
46ccf6868b | |
|
|
7df2f6ea86 | |
|
|
57867bc14b | |
|
|
ca8e5035ba | |
|
|
d686f82ba8 | |
|
|
d571638970 | |
|
|
56c222976e | |
|
|
6e83d8c1eb | |
|
|
66ba09e8a0 | |
|
|
b8e794d528 | |
|
|
813e129352 | |
|
|
a9de6b924b | |
|
|
1de0299b17 | |
|
|
e9244a30da | |
|
|
bb534ef12e | |
|
|
28626d0cfd | |
|
|
b0d64bb967 | |
|
|
7ff3467d35 | |
|
|
edd82f249c | |
|
|
9083915b62 | |
|
|
675f9954cf | |
|
|
fa971c0e06 | |
|
|
41fd0a908b | |
|
|
3a021f74a8 | |
|
|
8cd45782f4 | |
|
|
5e56d35e4a | |
|
|
f024ec6974 | |
|
|
35082d96d5 | |
|
|
fcc12ab0d2 | |
|
|
9eacac3171 | |
|
|
4f0addec89 | |
|
|
21a745a4f7 | |
|
|
8c02821fd8 | |
|
|
e9f608a238 | |
|
|
8e8fe68fd0 | |
|
|
d9e7bc3914 | |
|
|
9fd76d5334 | |
|
|
2034e8050f | |
|
|
f6b8b32123 | |
|
|
9cc489ecfd | |
|
|
390a72747d | |
|
|
a11380d142 | |
|
|
fd0817d630 | |
|
|
5a21c9b1b4 | |
|
|
afbfaa1c55 | |
|
|
28c6ee75a0 | |
|
|
66db58d3fb | |
|
|
3612d4e2d8 | |
|
|
575d0b2533 | |
|
|
7df7c5d866 | |
|
|
d292f12070 | |
|
|
21676657a5 | |
|
|
bf03d47784 | |
|
|
8a41b5bc83 | |
|
|
2e047ce56e | |
|
|
b2e33fc74c | |
|
|
da94480110 | |
|
|
ae5f92721b | |
|
|
6e994e7729 | |
|
|
d1d28a0692 | |
|
|
4cff35fb84 | |
|
|
5d8c3d454e | |
|
|
eb34a4cb7f | |
|
|
38b410f0a5 | |
|
|
e54870fb02 | |
|
|
c8cd68af61 | |
|
|
e7c03419a5 | |
|
|
8082c8f87f | |
|
|
5181b1f305 | |
|
|
258f657ce8 | |
|
|
4cc90d459a | |
|
|
72cf2884d9 | |
|
|
cd227c3f4c | |
|
|
13309b5da8 | |
|
|
881bd3aecc | |
|
|
050fbc347e | |
|
|
18678059f4 | |
|
|
dd25873b58 | |
|
|
60bbcbbbf8 | |
|
|
79d684dca4 | |
|
|
dd582a37ee | |
|
|
1494bb9cf8 | |
|
|
8f872289b8 | |
|
|
dff8ac0cdd | |
|
|
47e950be6f | |
|
|
48f7ffe0b9 | |
|
|
029ac6ebd8 | |
|
|
06467344a5 | |
|
|
08720156e8 | |
|
|
81909562a0 | |
|
|
4ff1a54eed | |
|
|
96ce3443d5 | |
|
|
8ad27e8275 | |
|
|
5665e76299 | |
|
|
fb55a7a4c6 | |
|
|
7d4b9e049d | |
|
|
6c50e66915 | |
|
|
ac01206f78 | |
|
|
1e56baaf8c | |
|
|
4559649f44 | |
|
|
eeba3fd99c | |
|
|
ec3635cc70 | |
|
|
524113a738 | |
|
|
59276dd503 | |
|
|
3b17094618 | |
|
|
953c4db678 | |
|
|
2b03140c68 | |
|
|
c530331f95 | |
|
|
a7dcb7f64d | |
|
|
1c22887e69 | |
|
|
4613169811 | |
|
|
4308db1a83 | |
|
|
042c525f2e | |
|
|
5f25168074 | |
|
|
89177f6580 | |
|
|
f720c24693 | |
|
|
f22dc45273 | |
|
|
4e7c993d53 | |
|
|
48c2ce74b7 | |
|
|
1dc7e0b84f | |
|
|
1e7fb10db2 | |
|
|
8288591827 | |
|
|
2f9c970730 | |
|
|
68676cf8ab | |
|
|
dd5bae123f | |
|
|
4876baabf7 | |
|
|
a51d816246 | |
|
|
25610a8b86 | |
|
|
0a5d7b6ab4 | |
|
|
f90fa41d57 | |
|
|
e69cf2a764 | |
|
|
c29c00bbe3 | |
|
|
dad7fa0ea8 | |
|
|
d9a303eda8 | |
|
|
dc279d2def | |
|
|
c72bf53579 | |
|
|
e75289d82f | |
|
|
614ebb6442 | |
|
|
62511c10f2 | |
|
|
70db1dca9e | |
|
|
533ab56f86 | |
|
|
412173f1c0 | |
|
|
f8cb21c57f | |
|
|
e0dda1c83c | |
|
|
75e73206f4 | |
|
|
f0f39381c3 | |
|
|
ec84a0be64 | |
|
|
f82df5d68d | |
|
|
ae63bd883b | |
|
|
8069c6d7fe | |
|
|
732297411c | |
|
|
125504e5a7 | |
|
|
47ced0fbbb | |
|
|
434d52ed8d | |
|
|
2fde2a481e | |
|
|
7ea907cc5b | |
|
|
45279810ec | |
|
|
efd079939f | |
|
|
f31172c850 | |
|
|
f6e4f6377a | |
|
|
2685a4d5d4 | |
|
|
6eb1a0d4f5 | |
|
|
2955cbac52 | |
|
|
04b51fccc4 | |
|
|
77fe01dea6 | |
|
|
003f4cadb6 | |
|
|
67fce760c4 | |
|
|
93214633b8 | |
|
|
f5e9eef725 | |
|
|
c5bd179a82 | |
|
|
12be29afd5 | |
|
|
12b3c9d5df | |
|
|
35fd2b38cb | |
|
|
598b14305f | |
|
|
c015c0e8b2 | |
|
|
36be33dea8 | |
|
|
216bdee29d | |
|
|
d296c57f93 | |
|
|
6309108da0 | |
|
|
ea9830b1c4 | |
|
|
967f446991 | |
|
|
cf922c76aa | |
|
|
14370fb913 | |
|
|
3396277a17 | |
|
|
2525b76b45 | |
|
|
a90cac7923 | |
|
|
8530840ddf | |
|
|
af4038e810 | |
|
|
02481f03e1 | |
|
|
15d1e0b07e | |
|
|
bea3edf0ca | |
|
|
92493005a7 | |
|
|
5482b0a5de | |
|
|
0ae7744f6e | |
|
|
e278566289 | |
|
|
1a79272af3 | |
|
|
5a3cf18b45 | |
|
|
ef10cf0a84 | |
|
|
31df88bf48 | |
|
|
3e8bfb1d77 | |
|
|
ef6524626e | |
|
|
6003ec95f0 | |
|
|
3bb7d9a873 | |
|
|
ec3dfe53ae | |
|
|
de250768bc | |
|
|
0e48dc1bd1 | |
|
|
d47094a130 | |
|
|
b3eaee60ca | |
|
|
9b7e5848e4 | |
|
|
6bd3b14596 | |
|
|
eb8279844d | |
|
|
d673320f2c | |
|
|
4e5dc02c9f | |
|
|
f68f82da4c | |
|
|
114ebb2573 | |
|
|
901441e9c2 | |
|
|
73e98662ab | |
|
|
9673664147 | |
|
|
1579d9bf3c | |
|
|
3825de6b07 | |
|
|
9edb704199 | |
|
|
2854ba4a9f | |
|
|
323ffd9b74 | |
|
|
5e0c35c2fc | |
|
|
42d297ac29 | |
|
|
e7066c579b | |
|
|
5c35c140b3 | |
|
|
861015e802 | |
|
|
a19b17d7ed | |
|
|
714f731f99 | |
|
|
e9279364b1 | |
|
|
8ba2278de5 | |
|
|
8d95e8539a | |
|
|
fb733f751a | |
|
|
7f3138c66e | |
|
|
a165be4b30 | |
|
|
46bc612f57 | |
|
|
6854daec32 | |
|
|
05f98f3ae1 | |
|
|
e6e88e5104 | |
|
|
966261c829 | |
|
|
1632ff117f | |
|
|
cd6f0f1282 | |
|
|
39d976436c | |
|
|
0628dd1e6f | |
|
|
0e872b5610 | |
|
|
cf651b6686 | |
|
|
12e9693459 | |
|
|
a8a341a80f | |
|
|
2ca0cebe99 | |
|
|
94197d9968 | |
|
|
06e2adf2aa | |
|
|
27e9bd2d1f | |
|
|
df722abb4a | |
|
|
54685289af | |
|
|
75cc8e969f | |
|
|
e63220be9f | |
|
|
050310c15c | |
|
|
d776373ee8 | |
|
|
de56fa9560 | |
|
|
252ed19b61 | |
|
|
6e091c7640 | |
|
|
f164dc82fb | |
|
|
d7dbdf4b94 | |
|
|
12e6df6090 | |
|
|
00de219e16 | |
|
|
6a43f7af6f | |
|
|
3549603dcc | |
|
|
c2b770a33b | |
|
|
9949d2ddce | |
|
|
1aeeca2e08 | |
|
|
36645bd6f8 | |
|
|
2f14949c6e | |
|
|
28f5428472 | |
|
|
1a8f2a5231 | |
|
|
6576005c34 | |
|
|
a54858a9ad | |
|
|
fe62154451 | |
|
|
fb3416441e | |
|
|
cba05fb037 | |
|
|
61703adc25 | |
|
|
681260e06a | |
|
|
346febc8cb | |
|
|
1a9547769d | |
|
|
bf3cae5d1a | |
|
|
5c038ca449 | |
|
|
02a7973f42 | |
|
|
059d3ffb09 | |
|
|
ccea1359d3 | |
|
|
dcaee15c0e | |
|
|
0bf3824ebb | |
|
|
a471f13488 | |
|
|
9e32c2f4fd | |
|
|
260a1a84a3 |
|
|
@ -0,0 +1,12 @@
|
|||
# These are supported funding model platforms
|
||||
|
||||
github: # [pirunxi]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: walon
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: ['https://raw.githubusercontent.com/focus-creative-games/luban/main/docs/sponsor/weixin.JPG','https://raw.githubusercontent.com/focus-creative-games/luban/main/docs/sponsor/zhifubao.JPG']
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
# This is a basic workflow to help you get started with Actions
|
||||
|
||||
name: sync-gitee-mirror
|
||||
|
||||
# Controls when the workflow will run
|
||||
on:
|
||||
# Triggers the workflow on push or pull request events but only for the main branch
|
||||
push:
|
||||
branches: [ main ]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
sync:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: sync-gitee-mirror
|
||||
uses: wangchucheng/git-repo-sync@v0.1.0
|
||||
with:
|
||||
# Target Repo URL
|
||||
target-url: https://gitee.com/focus-creative-games/luban.git
|
||||
# Target Repo Username
|
||||
target-username: ${{ secrets.GITEE_USERNAME }}
|
||||
# Target Token
|
||||
target-token: ${{ secrets.GITEE_PASSWORD }}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -270,3 +270,4 @@ __pycache__/
|
|||
/config/output_lua
|
||||
/config/output_lua_without_test
|
||||
/src/Excel2TextDiff/Properties/launchSettings.json
|
||||
/src/packages
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ language: csharp
|
|||
solution: src/Luban.sln
|
||||
|
||||
mono: none
|
||||
dotnet: 5.0
|
||||
dotnet: 6.0
|
||||
script:
|
||||
- cd src
|
||||
- dotnet restore
|
||||
- dotnet build
|
||||
- dotnet restore Luban.sln
|
||||
- dotnet build Luban.sln
|
||||
497
README.en-us.md
|
|
@ -1,61 +1,476 @@
|
|||
# Luban
|
||||
|
||||
## What is Luban
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://travis-ci.com/focus-creative-games/luban )
|
||||

|
||||

|
||||
|
||||
* Aim
|
||||
* Less time for trival & repeated work, more time with creativity & leisure .
|
||||

|
||||
|
||||
* Philosophy
|
||||
* Simpler, Faster
|
||||
-----
|
||||
|
||||
* [Home Page](https://focus-creative-games.github.io/luban/index.html)
|
||||
## links
|
||||
|
||||
* Read this in other languages: [English](README.en-us.md), [简体中文](README.md)
|
||||
- [README - English](./README.en-us.md)
|
||||
- [github link](https://github.com/focus-creative-games/luban)
|
||||
- [gitee link](https://gitee.com/focus-creative-games/luban)
|
||||
|
||||
-----
|
||||
|
||||
## introduce
|
||||
|
||||
luban is your **best game configuration solution**.
|
||||
|
||||
Luban efficiently processes data such as excel, json, and xml common in game development, checks data errors, generates codes in various languages such as c#, and exports them into various formats such as bytes or json.
|
||||
|
||||
luban unifies the game configuration development workflow, greatly improving the efficiency of planning and programming.
|
||||
|
||||
## Core features
|
||||
|
||||
- Powerful data analysis and conversion capabilities {excel(csv,xls,xlsx), json, bson, xml, yaml, lua, unity ScriptableObject} => {binary, json, bson, xml, lua, yaml, erlang, custom format }
|
||||
- Enhanced excel format, which can succinctly configure simple lists, substructures, structured lists, and arbitrarily complex deep nested structures.
|
||||
- Complete type system, **Support OOP type inheritance**, with data in excel, json, lua, xml and other formats **Flexible and elegant** Express complex GamePlay data such as behavior trees, skills, plots, and copies
|
||||
- Supports generating c#, java, go, c++, lua, python, javascript, typescript, erlang, rust, gdscript code
|
||||
- Support generating protobuf(schema + binary + json), flatbuffers(schema + json), msgpack(binary)
|
||||
- Powerful data verification capability. ref reference check, path resource path, range range check, etc.
|
||||
- Perfect localization support. Static text value localization, dynamic text value localization, time localization, main-patch multi-region version
|
||||
- Powerful and flexible customization capabilities, support for custom code templates and data templates
|
||||
- **Universal generation and caching tool**. It can also be used to generate code such as protocols, databases, and even as an object caching service
|
||||
- **Good support for mainstream engines, all platforms, mainstream hot update solutions, and mainstream front-end and back-end frameworks**. Supports mainstream engines such as Unity, Unreal, Cocos2x, Godot, and WeChat games. The tool itself is cross-platform and can work well on Win, Linux, and Mac platforms.
|
||||
|
||||
See [feature](https://focus-creative-games.github.io/luban-doc/#/manual/traits) for complete features
|
||||
|
||||
## Documentation
|
||||
|
||||
- [Official Documentation](https://focus-creative-games.github.io/luban-doc/)
|
||||
- [Quickstart](https://focus-creative-games.github.io/luban-doc/#/beginner/quickstart)
|
||||
- **Example Project** ([github](https://github.com/focus-creative-games/luban_examples)) ([gitee](https://gitee.com/focus-creative-games/luban_examples) )
|
||||
- [Version Change Log](https://focus-creative-games.github.io/luban-doc/#/changelog)
|
||||
- Support and contact
|
||||
- QQ group: 692890842 (Luban development exchange group). If you have any questions about usage, please join the QQ group to ask in time, and someone will help you solve it at any time.
|
||||
- Email: luban@code-philosophy.com
|
||||
|
||||
## Excel format overview
|
||||
|
||||
For a complete example, please refer to [Excel Format Introduction](https://focus-creative-games.github.io/lubandoc/excel.html)
|
||||
|
||||
### Normal table
|
||||
|
||||
|##var| id | x1 | x5 | x6 | s1 | s2 | v3 | t1 |
|
||||
| -|- | -| -| -| -| - | - | - |
|
||||
|##type|int|bool|long|float|string|text#sep=\||vector3|datetime|
|
||||
|##|id|desc1|desc2|desc3|desc4|desc7|desc1|time|
|
||||
|| 1|false| 1000| 1.2| hello |key1\|world1|1,2,3|1999-10-10 11:12:13|
|
||||
|| 2|true| 1000| 2.4|world |key2\|world2|2,4,5|1999-10-12 11:12:13|
|
||||
|
||||
### Raw data list
|
||||
|
||||
<table border="1">
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td>id</td>
|
||||
<td>arr1</td>
|
||||
<td colspan="4">arr2</td>
|
||||
<td>arr3</td>
|
||||
<td colspan="3">arr4</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##type</td>
|
||||
<td>int</id>
|
||||
<td>(array#sep=;),int</td>
|
||||
<td colspan="4">list,int</td>
|
||||
<td>(list#sep=|),string</td>
|
||||
<td colspan="3">list,string</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##</td>
|
||||
<td>id</id>
|
||||
<td>desc1</td>
|
||||
<td colspan="4">desc2</td>
|
||||
<td>desc3</td>
|
||||
<td colspan="3">desc4</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/>
|
||||
<td>1</td>
|
||||
<td>1;2;3</td>
|
||||
<td>1</td><td>2</td><td></td><td></td>
|
||||
<td>xx|yy</td>
|
||||
<td>xxx</td><td>zzz</td><td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/>
|
||||
<td>2</td>
|
||||
<td>2;4</td>
|
||||
<td>3</td><td>4</td><td>5</td><td></td>
|
||||
<td>aaaa|bbbb|cccc</td>
|
||||
<td>aaa</td><td>bbb</td><td>ccc</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/>
|
||||
<td>3</td>
|
||||
<td>2;4;6</td>
|
||||
<td>3</td><td>4</td><td>5</td><td>6</td>
|
||||
<td>aaaa|bbbb|cccc</td>
|
||||
<td>aaa</td><td>bbb</td><td>ccc</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### substructure
|
||||
|
||||
Reward is a substructure containing the three fields of "int item_id; int count; string desc;".
|
||||
|
||||
<table border="1">
|
||||
<tr align="center"><td>##var</td><td>id</td><td colspan="3">reward</td><td colspan="3">reward2</ td><td>reward3</td></tr>
|
||||
<tr align="center"><td>##type</td><td>int</td><td colspan="3">Reward</td><td colspan="3">Reward</ td><td>Reward#sep=,</td></tr>
|
||||
<tr align="center"><td>##var</td><td></td><td>item_id</td><td>count</td><td>desc</td><td></td><td></td><td></td><td/></tr>
|
||||
<tr align="center"><td/><td>1</td><td>1001</td><td>10</td><td>item 1</td><td>1002< /td><td>11</td><td>item 2</td><td>1002,1,item 3</td></tr>
|
||||
<tr align="center"><td/><td>2</td><td>2001</td><td>10</td><td>item 2</td><td>2002< /td><td>20</td><td>item 4</td><td>2003,2,item 5</td></tr>
|
||||
</table>
|
||||
|
||||
### Structure List 1
|
||||
|
||||
<table border="1">
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td>id</td>
|
||||
<td colspan="6">rewards1</td>
|
||||
<td colspan="3">rewards2</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##type</td>
|
||||
<td>int</td>
|
||||
<td colspan="6">list,Reward</td>
|
||||
<td colspan="3">list,Reward#sep=,</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##</td>
|
||||
<td>id</td>
|
||||
<td colspan="6">reward list desc1</td>
|
||||
<td colspan="3">reward list desc2</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/>
|
||||
<td>1</td>
|
||||
<td>1001</td><td>1</td><td>desc1</td><td>1002</td><td>2</td><td>desc2</td>
|
||||
<td>1001,1,desc1</td><td>1002,2,desc2</td><td>1003,3,desc3</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/>
|
||||
<td>2</td>
|
||||
<td>1001</td><td>1</td><td>desc1</td><td></td><td></td><td></td>
|
||||
<td>1001,1,desc1</td><td>1002,2,desc2</td><td></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
### Structure List 2
|
||||
|
||||
<table border="1">
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td>id</td>
|
||||
<td>name</td>
|
||||
<td colspan="9">rewards</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##type</td>
|
||||
<td>int</td>
|
||||
<td>string</td>
|
||||
<td colspan="9">list,Reward</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td colspan="3">0</td>
|
||||
<td colspan="3">1</td>
|
||||
<td colspan="3">2</td>
|
||||
</tr>
|
||||
<tr align="center"><td/><td>1</td><td>task1</td><td>1001</td><td>10</td><td>desc1</ td><td>1002</td><td>12</td><td>desc2</td><td>1003</td><td>13</td><td>desc3</td> </tr>
|
||||
<tr align="center"><td/><td>2</td><td>task1</td><td>1003</td><td>30</td><td>desc3</ td><td>1004</td><td>40</td><td>desc4</td><td/><td/><td/></tr>
|
||||
<tr align="center"><td/><td>3</td><td>task1</td><td>1005</td><td>50</td><td>desc5</ td><td/><td/><td/><td/><td/><td/></tr>
|
||||
</table>
|
||||
|
||||
### Structure List 3
|
||||
|
||||
<table border="1">
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td>id</td>
|
||||
<td>name</td>
|
||||
<td colspan="9">rewards</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##type</td>
|
||||
<td>int</td>
|
||||
<td>string</td>
|
||||
<td colspan="9">list,Reward</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td colspan="3">0</td>
|
||||
<td colspan="3">1</td>
|
||||
<td colspan="3">2</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td/>
|
||||
<td/>
|
||||
<td>item_id</td><td>num</td><td>desc</td>
|
||||
<td>item_id</td><td>num</td><td>desc</td>
|
||||
<td>item_id</td><td>num</td><td>desc</td>
|
||||
</tr>
|
||||
<tr align="center"><td/><td>1</td><td>task1</td><td>1001</td><td>10</td><td>desc1</ td><td>1002</td><td>12</td><td>desc2</td><td>1003</td><td>13</td><td>desc3</td> </tr>
|
||||
<tr align="center"><td/><td>2</td><td>task1</td><td>1003</td><td>30</td><td>desc3</ td><td>1004</td><td>40</td><td>desc4</td><td/><td/><td/></tr>
|
||||
<tr align="center"><td/><td>3</td><td>task1</td><td>1005</td><td>50</td><td>desc5</ td><td/><td/><td/><td/><td/><td/></tr>
|
||||
</table>
|
||||
|
||||
### Multi-row table
|
||||
|
||||
<table border="1">
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td>id</td>
|
||||
<td>name</td>
|
||||
<td colspan="6">*stages</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##type</td>
|
||||
<td>int</td>
|
||||
<td>string</td>
|
||||
<td colspan="6">list,Stage</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td/>
|
||||
<td/>
|
||||
<td>id</td>
|
||||
<td>name</td>
|
||||
<td>desc</td>
|
||||
<td>location</td>
|
||||
<td>item_id</td>
|
||||
<td>num</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##</td>
|
||||
<td>id</td>
|
||||
<td>desc1</td>
|
||||
<td>desc1</td>
|
||||
<td>desc2</td>
|
||||
<td>desc3</td>
|
||||
<td>desc4</td>
|
||||
<td>desc5</td>
|
||||
<td>desc6</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/>
|
||||
<td>1</td>
|
||||
<td>task1</td>
|
||||
<td>1</td><td>stage1</td><td>stage desc1</td><td>1,2,3</td><td>1001</td><td>1</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td/><td/><td>2</td><td>stage2</td><td>stage desc2</td><td>1,2,3</td><td>1001</td><td>1</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td/><td/><td>3</td><td>stage3</td><td>stage desc3</td><td>1,2,3</td><td>1002</td><td>1</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td>2</td>
|
||||
<td>task2</td>
|
||||
<td>1</td><td>stage1</td><td>stage desc1</td><td>1,2,3</td><td>1001</td><td>1</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td/><td/><td>2</td><td>stage2</td><td>stage desc2</td><td>1,2,3</td><td>1002</td><td>1</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### Multi-level subheadings of type map
|
||||
|
||||
<table border="1">
|
||||
<tr align="center"><td>##var</td><td>id</td><td colspan="4">lans</td></tr>
|
||||
<tr align="center"><td>##type</td><td>int</td><td colspan="4">map,string,string</td></tr>
|
||||
<tr align="center"><td>##var</td><td/><td>ch-zn</td><td>en</td><td>jp</td><td >fr</td></tr>
|
||||
<tr align="center"><td/><td>1</td><td>apple</td><td>apple</td><td>aaa</td><td>aaa</td></tr>
|
||||
<tr align="center"><td/><td>2</td><td>banana</td><td>banana</td><td>bbb</td><td>bbb</td></tr>
|
||||
</table>
|
||||
|
||||
### Type inheritance (suitable for skills, buff related configuration)
|
||||
|
||||
<table border="1">
|
||||
<tr align="center"><td>##var</td><td>id</td><td colspan="4">shape</td><td colspan="4">shape2</ td></tr>
|
||||
<tr align="center"><td>##type</td><td>int</td><td colspan="4">Shape</td><td colspan="4">Shape</ td></tr>
|
||||
<tr align="center"><td>##var</td><td></td><td>$type</td><td>radius</td><td>width</td><td>height</td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr align="center"><td/><td>1</td><td>Circle</td><td>10</td><td/><td/><td>Circle</td><td>100</td><td></td><td></td></tr>
|
||||
<tr align="center"><td/><td>2</td><td>Rectangle</td><td></td><td>10</td><td>20</td ><td>Rectangle</td><td>10</td><td>20</td><td></td></tr>
|
||||
<tr align="center"><td/><td>3</td><td>Circle</td><td>10</td><td/><td/><td>Triangle</td><td>15</td><td>15</td><td>15</td></tr>
|
||||
<tr align="center"><td/><td>4</td><td>Circle</td><td>10</td><td/><td/><td>Rectangle</td><td>30</td><td>20</td><td></td></tr>
|
||||
</table>
|
||||
|
||||
### Multiple primary key table (joint index)
|
||||
|
||||
Multiple keys form a joint unique primary key.
|
||||
|
||||
|##var|key1|key2|key3| num|
|
||||
|-|-|-|-|-|
|
||||
|##type|int|long|string|int|
|
||||
||1|1|aaa|123|
|
||||
||1|1|bbb|124|
|
||||
||1|2|aaa|134|
|
||||
||2|1|aaa|124|
|
||||
||5|6|xxx|898|
|
||||
|
||||
### Multiple primary key table (independent index)
|
||||
|
||||
Multiple keys are indexed independently.
|
||||
|
||||
|##var|key1|key2|key3| num|
|
||||
|-|-|-|-|-|
|
||||
|##type|int|long|string|int|
|
||||
||1|2|aaa|123|
|
||||
||2|4|bbb|124|
|
||||
||3|6|ccc|134|
|
||||
||4|8|ddd|124|
|
||||
||5|10|eee|898|
|
||||
|
||||
### Singleton table
|
||||
|
||||
Some configurations only have one copy globally, such as the opening level of the guild module, the initial size of the backpack, and the upper limit of the backpack. In this case, it is more appropriate to use a singleton table to configure these data.
|
||||
|
||||
|##var| guild_open_level | bag_init_capacity | bag_max_capacity | newbie_tasks |
|
||||
| - |- | - | - | - |
|
||||
| ##type | int | int | int | list,int|
|
||||
| ## |desc1 |desc2 |desc3 |desc4|
|
||||
| | 10 | 100 | 500 | 10001, 10002 |
|
||||
|
||||
### Vertical table
|
||||
|
||||
<table border="1">
|
||||
<tr align="center">
|
||||
<td>##var#column</td>
|
||||
<td>##type</td>
|
||||
<td>##</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>guild_open_level</td><td>int</td><td>desc1</td><td>10</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>bag_init_capacity</td><td>int</td><td>desc2</td><td>100</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>bag_max_capacity</td><td>int</td><td>desc3</td><td>500</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>newbie_tasks</td><td>list,int</td><td>desc4</td><td>10001,10002</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## json, lua, xml, yaml format quick overview
|
||||
|
||||
Take the behavior tree as an example to show how to configure the behavior tree configuration in json format. For formats such as xml, lua, yaml, etc., please refer to [detailed documentation](https://focus-creative-games.github.io/luban/data_source/).
|
||||
|
||||
|
||||
## Features
|
||||
* [x] multi data source (json, excel, folder)
|
||||
* [ ] data type system supported
|
||||
* [ ] polymorphism
|
||||
* [ ] rich embeded type
|
||||
* [ ] user defined type
|
||||
* [ ] client/server structure & export faster
|
||||
* [ ] shared cache
|
||||
* [ ] customizable validataor
|
||||
* [ ] customizable export format
|
||||
* [ ] easy to extend with new feature
|
||||
* [ ] enhanced support with excel
|
||||
* [ ] dual key
|
||||
* [ ] horizontal list
|
||||
* [ ] shared cache for export time optimization
|
||||
* [ ] sophisticated/polished source available
|
||||
* [ ] localization & region support
|
||||
````json
|
||||
{
|
||||
"id": 10002,
|
||||
"name": "random move",
|
||||
"desc": "demo behaviour tree",
|
||||
"executor": "SERVER",
|
||||
"blackboard_id": "demo",
|
||||
"root": {
|
||||
"$type": "Sequence",
|
||||
"id": 1,
|
||||
"node_name": "test",
|
||||
"desc": "root",
|
||||
"services": [],
|
||||
"decorators": [
|
||||
{
|
||||
"$type": "UeLoop",
|
||||
"id": 3,
|
||||
"node_name": "",
|
||||
"flow_abort_mode": "SELF",
|
||||
"num_loops": 0,
|
||||
"infinite_loop": true,
|
||||
"infinite_loop_timeout_time": -1
|
||||
}
|
||||
],
|
||||
"children": [
|
||||
{
|
||||
"$type": "UeWait",
|
||||
"id": 30,
|
||||
"node_name": "",
|
||||
"ignore_restart_self": false,
|
||||
"wait_time": 1,
|
||||
"random_deviation": 0.5,
|
||||
"services": [],
|
||||
"decorators": []
|
||||
},
|
||||
{
|
||||
"$type": "MoveToRandomLocation",
|
||||
"id": 75,
|
||||
"node_name": "",
|
||||
"ignore_restart_self": false,
|
||||
"origin_position_key": "x5",
|
||||
"radius": 30,
|
||||
"services": [],
|
||||
"decorators": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
````
|
||||
|
||||
## How to set self hosted server up
|
||||
* Windows
|
||||
* run xxx.bat
|
||||
## Code usage preview
|
||||
|
||||
* Docker
|
||||
* run xxx.bat/xxx.sh
|
||||
Here we only briefly show the usage of c#, typescript, and go languages in development. For more languages and more detailed usage examples and codes, see [Example Project](https://github.com/focus-creative-games/luban_examples).
|
||||
|
||||
* Other
|
||||
* any .Net core environment
|
||||
- C# usage example
|
||||
|
||||
## How to set development up
|
||||
* VS2019 commuity
|
||||
````C#
|
||||
// One line of code can load all configuration. cfg.Tables contains one instance field for all tables.
|
||||
var tables = new cfg.Tables(file => return new ByteBuf(File.ReadAllBytes(gameConfDir + "/" + file + ".bytes")));
|
||||
// access a singleton table
|
||||
Console.WriteLine(tables.TbGlobal.Name);
|
||||
// access the normal key-value table
|
||||
Console.WriteLine(tables.TbItem.Get(12).Name);
|
||||
// support operator [] usage
|
||||
Console.WriteLine(tables.TbMail[1001].Desc);
|
||||
````
|
||||
|
||||
## How can I contribute?
|
||||
- Typescript usage example
|
||||
|
||||
We welcome contributions! Many people all over the world have helped make this project better.
|
||||
```typescript
|
||||
// One line of code can load all configuration. cfg.Tables contains one instance field for all tables.
|
||||
let tables = new cfg.Tables(f => JsHelpers.LoadFromFile(gameConfDir, f))
|
||||
// access a singleton table
|
||||
console.log(tables.TbGlobal.name)
|
||||
// access the normal key-value table
|
||||
console.log(tables.TbItem.get(12).Name)
|
||||
````
|
||||
|
||||
* [Contributing](CONTRIBUTING.md) explains what kinds of changes we welcome
|
||||
- [Workflow Instructions](docs/workflow/README.md) explains how to build and test
|
||||
- go example
|
||||
|
||||
## Useful Links
|
||||
````go
|
||||
// One line of code can load all configuration. cfg.Tables contains one instance field for all tables.
|
||||
if tables , err := cfg.NewTables(loader) ; err != nil {
|
||||
println(err.Error())
|
||||
return
|
||||
}
|
||||
// access a singleton table
|
||||
println(tables.TbGlobal.Name)
|
||||
// access the normal key-value table
|
||||
println(tables.TbItem.Get(12).Name)
|
||||
|
||||
* [.NET Core source index](https://source.dot.net) / [.NET Framework source index](https://referencesource.microsoft.com)
|
||||
* other implementation
|
||||
* [tabtoy](https://github.com/davyxu/tabtoy)
|
||||
````
|
||||
|
||||
## route map
|
||||
|
||||
- [ ] Added unity built-in editor
|
||||
- [ ] Added unreal built-in editor
|
||||
- [ ] Supplemental unit tests
|
||||
|
||||
## License
|
||||
|
||||
|
|
|
|||
|
|
@ -1,31 +0,0 @@
|
|||
{
|
||||
"x1":true,
|
||||
"x2":3,
|
||||
"x3":128,
|
||||
"x4":1,
|
||||
"x5":11223344,
|
||||
"x6":1.2,
|
||||
"x7":1.23432,
|
||||
"x8_0":12312,
|
||||
"x8":112233,
|
||||
"x9":223344,
|
||||
"x10":"hq",
|
||||
"x12": { "x1":10},
|
||||
"x13":"B",
|
||||
"x14":{"__type__": "DemoD2", "x1":1, "x2":2},
|
||||
"s1": {"key":"/asfa", "text":"aabbcc"},
|
||||
"v2":{"x":1, "y":2},
|
||||
"v3":{"x":1.1, "y":2.2, "z":3.4},
|
||||
"v4":{"x":10.1, "y":11.2, "z":12.3, "w":13.4},
|
||||
"t1":"1970-01-01 00:00:00",
|
||||
"k1":[1,2],
|
||||
"k2":[2,3],
|
||||
"k3":[1,3],
|
||||
"k4":[1,5],
|
||||
"k5":[1,6],
|
||||
"k6":[1,7],
|
||||
"k7":[2,3],
|
||||
"k8":[[2,2],[4,10]],
|
||||
"k9":[{"y1":1, "y2":true},{"y1":2, "y2":false}],
|
||||
"k15":[{"__type__": "DemoD2", "x1":1, "x2":2}]
|
||||
}
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
{
|
||||
"x1":true,
|
||||
"x2":3,
|
||||
"x3":128,
|
||||
"x4":2,
|
||||
"x5":11223344,
|
||||
"x6":1.2,
|
||||
"x7":1.23432,
|
||||
"x8_0":12312,
|
||||
"x8":112233,
|
||||
"x9":223344,
|
||||
"x10":"hq",
|
||||
"x12": { "x1":10},
|
||||
"x13":"B",
|
||||
"x14":{"__type__": "DemoD2", "x1":1, "x2":2},
|
||||
"s1": {"key":"/asfa32", "text":"aabbcc22"},
|
||||
"v2":{"x":1, "y":2},
|
||||
"v3":{"x":1.1, "y":2.2, "z":3.4},
|
||||
"v4":{"x":10.1, "y":11.2, "z":12.3, "w":13.4},
|
||||
"t1":"1970-01-01 00:00:00",
|
||||
"k1":[1,2],
|
||||
"k2":[2,3],
|
||||
"k3":[1,3],
|
||||
"k4":[1,5],
|
||||
"k5":[1,6],
|
||||
"k6":[1,7],
|
||||
"k7":[2,3],
|
||||
"k8":[[2,2],[4,10]],
|
||||
"k9":[{"y1":1, "y2":true},{"y1":2, "y2":false}],
|
||||
"k15":[{"__type__": "DemoD2", "x1":1, "x2":2}]
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
return
|
||||
{
|
||||
x1 = false,
|
||||
x2 = 2,
|
||||
x3 = 128,
|
||||
x4 = 1122,
|
||||
x5 = 112233445566,
|
||||
x6 = 1.3,
|
||||
x7 = 1122,
|
||||
x8 = 12,
|
||||
x8_0 = 13,
|
||||
x9 = 123,
|
||||
x10 = "yf",
|
||||
x12 = {x1=1},
|
||||
x13 = "D",
|
||||
x14 = { __type__="DemoD2", x1 = 1, x2=3},
|
||||
s1 = { key="lua/key1", text="lua text "},
|
||||
v2 = {x= 1,y = 2},
|
||||
v3 = {x=0.1, y= 0.2,z=0.3},
|
||||
v4 = {x=1,y=2,z=3.5,w=4},
|
||||
t1 = "1970-01-01 00:00:00",
|
||||
k1 = {1,2},
|
||||
k2 = {2,3},
|
||||
k3 = {3,4},
|
||||
k4 = {1,2},
|
||||
k5 = {1,3},
|
||||
k6 = {1,2},
|
||||
k7 = {1,8},
|
||||
k8 = {[2]=10,[3]=12},
|
||||
k9 = {{y1=1,y2=true}, {y1=10,y2=false}},
|
||||
k15 = {{ __type__="DemoD2", x1 = 1, x2=3}},
|
||||
}
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"id":2001,
|
||||
"value": "导出"
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"__tag__":"any",
|
||||
"id":2004,
|
||||
"value": "导出"
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"__tag__":"no",
|
||||
"id":2002,
|
||||
"value": "忽略"
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"__tag__":"测试",
|
||||
"id":2003,
|
||||
"value": "导出"
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
|
||||
return {
|
||||
id = 100,
|
||||
value = "导出",
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
return {
|
||||
__tag__ = "随便",
|
||||
id = 104,
|
||||
value="导出",
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
return {
|
||||
__tag__ = "no",
|
||||
id = 101,
|
||||
value="不导出",
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
return {
|
||||
__tag__ = "test",
|
||||
id = 102,
|
||||
value="测试",
|
||||
}
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<data>
|
||||
<id>3001</id>
|
||||
<value>export</value>
|
||||
</data>
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
<data>
|
||||
<__tag__>any</__tag__>
|
||||
<id>3004</id>
|
||||
<value>其他</value>
|
||||
</data>
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
<data>
|
||||
<__tag__>no</__tag__>
|
||||
<id>3002</id>
|
||||
<value>不导出</value>
|
||||
</data>
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
<data>
|
||||
<__tag__>test</__tag__>
|
||||
<id>3003</id>
|
||||
<value>测试</value>
|
||||
</data>
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
##,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
__type__,x1,x2,x3,x4,x5,x6,x7,x8,x8_0,x9,x10,x11,x12,x13,,,k1,k2,k3,k4,k5,k6,k7,k8
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,½ûÖ¹,x2:byte,x3:short,x4:int,x5:long, x6:float,x7:double,,,,,,,,,,array:int,array:int,array:int,array:int,array:int,array:int,array:int,map:int:int
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
DemoD2,TRUE,5,5,10000,13234234234,1.28,1.23457891,1234,1234,111111111,huang,,1988,A,,,"1,2,3","1,2,4","1,2,5","1,2,6","1,2,7","1,2,8","1,2,9","1,2,3,4"
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,FALSE,0,6,198704,34523452345,2.5,19870421.2,453234,-345,1.12233E+11,qiang,,1987,B,,,"2,4,6","2,4,7","2,4,8","2,4,9","2,4,10","2,4,11","2,4,12","1,10,2,20"
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
{
|
||||
"x1" : true,
|
||||
"x2" : 5,
|
||||
"x3" : 1234,
|
||||
"x4" : 120000,
|
||||
"x5" : 12345566778899,
|
||||
"x6" : 1.28,
|
||||
"x7" : 123456789.1234567,
|
||||
"x8" : 1234,
|
||||
"x8_0" : 1122,
|
||||
"x9" : 112233445566,
|
||||
"x10": "huang",
|
||||
"x11": "hiasf",
|
||||
"x12" : { "x1":1987 },
|
||||
"x13" : "B",
|
||||
"k1" : [1,2,3],
|
||||
"k2" : [11,22,33],
|
||||
"k3" : [1,2,3],
|
||||
"k4": [11,22],
|
||||
"k5" : [2,3],
|
||||
"k6" : [4,5],
|
||||
"k7" : [10,20],
|
||||
"k8" : { "1":100, "2":200, "3":300}
|
||||
}
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
<data>
|
||||
<x1>true</x1>
|
||||
<x2>4</x2>
|
||||
<x3>128</x3>
|
||||
<x4>1</x4>
|
||||
<x5>112233445566</x5>
|
||||
<x6>1.3</x6>
|
||||
<x7>1112232.43123</x7>
|
||||
<x8>112233</x8>
|
||||
<x8_0>123</x8_0>
|
||||
<x9>112334</x9>
|
||||
<x10>yf</x10>
|
||||
<x12>
|
||||
<x1>1</x1>
|
||||
</x12>
|
||||
<x13>C</x13>
|
||||
<x14 __type__="DemoD2">
|
||||
<x1>1</x1>
|
||||
<x2>2</x2>
|
||||
</x14>
|
||||
<s1><key>xml_key1</key><text>xml text</text></s1>
|
||||
<v2>1,2</v2>
|
||||
<v3>1.2,2.3,3.4</v3>
|
||||
<v4>1.2,2.2,3.2,4.3</v4>
|
||||
|
||||
<t1>1970-01-01 00:00:00</t1>
|
||||
|
||||
<k1>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k1>
|
||||
<k2>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k2>
|
||||
<k3>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k3>
|
||||
<k4>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k4>
|
||||
<k5>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k5>
|
||||
<k6>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k6>
|
||||
<k7>
|
||||
<item>1</item>
|
||||
<item>3</item>
|
||||
</k7>
|
||||
|
||||
<k8>
|
||||
<item> <key>2</key><value>10</value></item>
|
||||
<item> <key>3</key><value>30</value></item>
|
||||
</k8>
|
||||
|
||||
<k9>
|
||||
<item>
|
||||
<y1>1</y1>
|
||||
<y2>true</y2>
|
||||
</item>
|
||||
<item>
|
||||
<y1>2</y1>
|
||||
<y2>false</y2>
|
||||
</item>
|
||||
</k9>
|
||||
<k15>
|
||||
<item __type__="DemoD2">
|
||||
<x1>1</x1>
|
||||
<x2>2</x2>
|
||||
</item>
|
||||
</k15>
|
||||
</data>
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
<data>
|
||||
<x1>true</x1>
|
||||
<x2>4</x2>
|
||||
<x3>128</x3>
|
||||
<x4>2</x4>
|
||||
<x5>112233445566</x5>
|
||||
<x6>1.3</x6>
|
||||
<x7>1112232.43123</x7>
|
||||
<x8>112233</x8>
|
||||
<x8_0>123</x8_0>
|
||||
<x9>112334</x9>
|
||||
<x10>yf</x10>
|
||||
<x12>
|
||||
<x1>1</x1>
|
||||
</x12>
|
||||
<x13>C</x13>
|
||||
<x14 __type__="DemoD2">
|
||||
<x1>1</x1>
|
||||
<x2>2</x2>
|
||||
</x14>
|
||||
<s1><key>xml_key2</key><text>xml text222</text></s1>
|
||||
<v2>1,2</v2>
|
||||
<v3>1.2,2.3,3.4</v3>
|
||||
<v4>1.2,2.2,3.2,4.3</v4>
|
||||
|
||||
<t1>1970-01-01 00:00:00</t1>
|
||||
|
||||
<k1>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k1>
|
||||
<k2>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k2>
|
||||
<k3>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k3>
|
||||
<k4>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k4>
|
||||
<k5>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k5>
|
||||
<k6>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</k6>
|
||||
<k7>
|
||||
<item>1</item>
|
||||
<item>3</item>
|
||||
</k7>
|
||||
|
||||
<k8>
|
||||
<item> <key>2</key><value>10</value></item>
|
||||
<item> <key>3</key><value>30</value></item>
|
||||
</k8>
|
||||
|
||||
<k9>
|
||||
<item>
|
||||
<y1>1</y1>
|
||||
<y2>true</y2>
|
||||
</item>
|
||||
<item>
|
||||
<y1>2</y1>
|
||||
<y2>false</y2>
|
||||
</item>
|
||||
</k9>
|
||||
<k15>
|
||||
<item __type__="DemoD2">
|
||||
<x1>1</x1>
|
||||
<x2>2</x2>
|
||||
</item>
|
||||
</k15>
|
||||
</data>
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
<root>
|
||||
<topmodule name="cfg"/>
|
||||
|
||||
<group name="c" default="1"/> client 分组
|
||||
<group name="s" default="1"/> server 分组
|
||||
<group name="e" default="1"/> editor分组
|
||||
|
||||
<import name="."/>
|
||||
|
||||
<branch name="en"/>
|
||||
<branch name="jp"/>
|
||||
<branch name="cn"/>
|
||||
|
||||
<service name="server" manager="Tables" group="s"/>
|
||||
<service name="client" manager="Tables" group="c"/>
|
||||
<service name="all" manager="Tables" group="c,s,e"/>
|
||||
</root>
|
||||
|
|
@ -1,202 +0,0 @@
|
|||
<module name="test">
|
||||
<const name="DemoConst">
|
||||
<var name="x1" type="int" value="0"/>
|
||||
<var name="x2" type="long" value="3242"/>
|
||||
<var name="x3" type="float" value="444.3"/>
|
||||
<var name="x4" type="double" value="55.3"/>
|
||||
<!--var name="x5" type="string" value="abcdefg"/-->
|
||||
</const>
|
||||
|
||||
<enum name="DemoEnum">
|
||||
<var name="A" value="1"/>
|
||||
<var name="B"/>
|
||||
<var name="C" value="4"/>
|
||||
<var name="D"/>
|
||||
</enum>
|
||||
|
||||
<bean name="DemoType1">
|
||||
<var name="x1" type="int"/>
|
||||
</bean>
|
||||
|
||||
<bean name="DemoDynamic"> 多态数据结构
|
||||
<var name="x1" type="int"/>
|
||||
|
||||
<bean name="DemoD2" alias="测试别名">
|
||||
<var name="x2" type="int"/>
|
||||
</bean>
|
||||
|
||||
<bean name="DemoD3">
|
||||
<var name="x3" type="int"/>
|
||||
<bean name="DemoE1">
|
||||
<var name="x4" type="int"/>
|
||||
</bean>
|
||||
</bean>
|
||||
<bean name="DemoD5">
|
||||
<var name="time" type="DateTimeRange"/>
|
||||
</bean>
|
||||
</bean>
|
||||
|
||||
<bean name="DemoE2">
|
||||
<var name="y1" type="int?"/>
|
||||
<var name="y2" type="bool"/>
|
||||
</bean>
|
||||
|
||||
<bean name="DemoType2" >
|
||||
<var name="x4" type="int" convert="DemoEnum"/>
|
||||
<var name="x1" type="bool"/>
|
||||
<var name="x2" type="byte"/>
|
||||
<var name="x3" type="short" ref="test.TbFullTypes"/>
|
||||
<var name="x5" type="long" convert="DemoEnum"/>
|
||||
<var name="x6" type="float"/>
|
||||
<var name="x7" type="double"/>
|
||||
<var name="x8_0" type="fshort"/>
|
||||
<var name="x8" type="fint"/>
|
||||
<var name="x9" type="flong"/>
|
||||
|
||||
<var name="x10" type="string" path="normal;*.txt"/>
|
||||
<var name="x12" type="DemoType1"/>
|
||||
<var name="x13" type="DemoEnum"/>
|
||||
<var name="x14" type="DemoDynamic" sep=","/>多态数据结构
|
||||
|
||||
<var name="s1" type="text"/>
|
||||
|
||||
<var name="v2" type="vector2"/>
|
||||
<var name="v3" type="vector3"/>
|
||||
<var name="v4" type="vector4"/>
|
||||
|
||||
<var name="t1" type="datetime"/>
|
||||
|
||||
<var name="k1" type="array,int"/> 使用;来分隔
|
||||
|
||||
<var name="k2" type="list,int"/>
|
||||
<var name="k3" type="linkedlist,int"/>
|
||||
<var name="k4" type="arraylist,int"/>
|
||||
<var name="k5" type="set,int"/>
|
||||
<var name="k6" type="treeset,int"/>
|
||||
<var name="k7" type="hashset,int"/>
|
||||
<var name="k8" type="map,int,int"/>
|
||||
<var name="k9" type="list,DemoE2" sep="," index="y1"/>
|
||||
<var name="k15" type="array,DemoDynamic" sep=","/>
|
||||
</bean>
|
||||
|
||||
<table name="TbFullTypes" index="x3" value="DemoType2" input="test/full_type.xlsx" branch_input="cn:test/full_type_cn1.xlsx,test/full_type_cn2.xlsx|en:texx/full_type_en.xlsx"/> 最常见的普通 key-value表
|
||||
|
||||
<bean name="DateTimeRange" sep=";">
|
||||
<var name="start_time" type="datetime"/>
|
||||
<var name="end_time" type="datetime"/>
|
||||
</bean>
|
||||
|
||||
<bean name="DemoSingletonType">
|
||||
<var name="id" type="int"/>
|
||||
<var name="name" type="text"/>
|
||||
<var name="date" type="DemoDynamic"/>
|
||||
</bean>
|
||||
|
||||
<table name="TbSingleton" mode="one" value="DemoSingletonType" input="test/table_one.xlsx"/> 单例表,只有一个记录
|
||||
|
||||
<table name="TbDataFromJson" value="DemoType2" input="test/json_datas"/> 普通表,不过数据从tbrole_datas目录递归读入,每个文件是一个记录
|
||||
|
||||
<table name="TbDataFromXml" value="DemoType2" input="test/xml_datas"/> 普通表,不过数据从tbrole_datas目录递归读入,每个文件是一个记录
|
||||
|
||||
<table name="TbDataFromLua" value="DemoType2" input="test/lua_datas"/> 普通表,不过数据从tbrole_datas目录递归读入,每个文件是一个记录
|
||||
|
||||
<bean name="MultiRowType1">
|
||||
<var name="id" type="int"/>
|
||||
<var name="x" type="int"/>
|
||||
</bean>
|
||||
|
||||
<bean name="MultiRowType2">
|
||||
<var name="id" type="int"/>
|
||||
<var name="x" type="int"/>
|
||||
<var name="y" type="float"/>
|
||||
</bean>
|
||||
|
||||
<bean name="MultiRowRecord">
|
||||
<var name="id" type="int"/>
|
||||
<var name="name" type="string"/>
|
||||
<var name="one_rows" type="list,MultiRowType1"/>
|
||||
<var name="multi_rows1" type="list,MultiRowType1" multi_rows="1"/>
|
||||
<var name="multi_rows2" type="array,MultiRowType1" multi_rows="1"/>
|
||||
<var name="multi_rows3" type="set,MultiRowType2" multi_rows="1"/>
|
||||
<var name="multi_rows4" type="map,int,MultiRowType2" multi_rows="1"/>
|
||||
</bean>
|
||||
|
||||
<table name="TbMultiRowRecord" value="MultiRowRecord" input="test/multi_rows_record.xlsx"/>
|
||||
|
||||
|
||||
<enum name="ETestUeType">
|
||||
<var name="WHITE" alias="白"/>
|
||||
<var name="BLACK"/>
|
||||
</enum>
|
||||
|
||||
<enum name="ETestEmptyEnum">
|
||||
|
||||
</enum>
|
||||
|
||||
<enum name="ETestEmptyEnum2">
|
||||
<var name="SMALL_THAN_256" value="255"/>
|
||||
<var name="X_256" value="256"/>
|
||||
<var name="X_257" value="257"/>
|
||||
</enum>
|
||||
|
||||
<bean name="TestUeType">
|
||||
<var name="x1" type="bool"/>
|
||||
<var name="x2" type="byte"/>
|
||||
<var name="x3" type="short"/>
|
||||
<var name="x4" type="int"/>
|
||||
<var name="x5" type="long"/>
|
||||
<var name="x6" type="float"/>
|
||||
<var name="x10" type="string"/>
|
||||
<var name="x12" type="DemoType1"/>
|
||||
<var name="x13" type="ETestUeType"/>
|
||||
<var name="v2" type="vector2"/>
|
||||
<var name="v3" type="vector3"/>
|
||||
<var name="v4" type="vector4"/>
|
||||
|
||||
<var name="t1" type="datetime"/>
|
||||
<var name="k1" type="array,int"/>
|
||||
|
||||
<var name="k2" type="list,int"/>
|
||||
<var name="k3" type="linkedlist,int"/>
|
||||
<var name="k4" type="arraylist,int"/>
|
||||
<var name="k5" type="set,int"/>
|
||||
<var name="k6" type="treeset,int"/>
|
||||
<var name="k7" type="hashset,int"/>
|
||||
<var name="k8" type="map,int,int"/>
|
||||
<var name="k9" type="list,DemoE2"/>
|
||||
</bean>
|
||||
|
||||
|
||||
<bean name="H1">
|
||||
<var name="y2" type="H2"/>
|
||||
<var name="y3" type="int"/>
|
||||
</bean>
|
||||
<bean name="H2">
|
||||
<var name="z2" type="int"/>
|
||||
<var name="z3" type="int"/>
|
||||
</bean>
|
||||
|
||||
<bean name="MultiRowTitle">
|
||||
<var name="id" type="int"/>
|
||||
<var name="name" type="string"/>
|
||||
<var name="x1" type="H1"/>
|
||||
<var name="x2" type="list,H2" multi_rows="1"/>
|
||||
<var name="x3" type="array,H2" multi_rows="1"/>
|
||||
</bean>
|
||||
<table name="TbMultiRowTitle" value="MultiRowTitle" input="test/multi_level_title.xlsx"/>
|
||||
|
||||
<!--table name="TbDynamic" value="DemoDynamic" input="多态数据源"/-->
|
||||
|
||||
<module name="login">
|
||||
支持在一个定义文件中 定义多个模块。 一般来说一个定义文件中一个模块比较好,但有些情况下为了方便可以定义多个。
|
||||
<bean name="RoleInfo">
|
||||
<var name="role_id" type="long"/>
|
||||
</bean>
|
||||
</module>
|
||||
|
||||
<bean name="TestTag">
|
||||
<var name="id" type="int"/>
|
||||
<var name="value" type="string"/>
|
||||
</bean>
|
||||
<table name="TbTestTag" value="TestTag" input="test/tag_datas"/>
|
||||
</module>
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
..\src\Luban.Client\bin\Debug\net5.0\Luban.Client.exe ^
|
||||
-h %LUBAN_SERVER_IP% ^
|
||||
-j cfg ^
|
||||
-- ^
|
||||
-d Defines/__root__.xml ^
|
||||
--input_data_dir Datas ^
|
||||
--output_data_dir output_lua ^
|
||||
-s client ^
|
||||
--gen_types data_lua ^
|
||||
--export_test_data ^
|
||||
--input_l10n_text_files l10n/cn/TextTable_CN.xlsx ^
|
||||
--output_l10n_not_converted_text_file NotLocalized_CN.txt
|
||||
|
||||
pause
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
..\src\Luban.Client\bin\Debug\net5.0\Luban.Client.exe ^
|
||||
-h %LUBAN_SERVER_IP% ^
|
||||
-j cfg ^
|
||||
-- ^
|
||||
-d Defines/__root__.xml ^
|
||||
--input_data_dir Datas ^
|
||||
--output_data_dir output_lua ^
|
||||
-s client ^
|
||||
--gen_types data_lua ^
|
||||
--export_test_data ^
|
||||
--input_l10n_text_files l10n/cn/TextTable_CN.xlsx ^
|
||||
--l10n_text_field_name text_tw ^
|
||||
--output_l10n_not_converted_text_file NotLocalized_TW.txt
|
||||
|
||||
pause
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
/asfa|aabbcc
|
||||
/asfa32|aabbcc22
|
||||
key_name|aabbcc
|
||||
key1|asdfa4
|
||||
key2|asdfa7
|
||||
key3|asdfa8
|
||||
lua/key1|lua text
|
||||
xml_key1|xml text
|
||||
xml_key2|xml text222
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
/asfa|aabbcc
|
||||
/asfa32|aabbcc22
|
||||
key_name|aabbcc
|
||||
key1|asdfa4
|
||||
key2|asdfa7
|
||||
key3|asdfa8
|
||||
lua/key1|lua text
|
||||
xml_key1|xml text
|
||||
xml_key2|xml text222
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
..\src\Luban.Client\bin\Debug\net5.0\Luban.Client.exe ^
|
||||
-h %LUBAN_SERVER_IP% ^
|
||||
-j cfg ^
|
||||
-- ^
|
||||
-d Defines/__root__.xml ^
|
||||
--input_data_dir Datas ^
|
||||
--output_data_dir output_lua ^
|
||||
-s client ^
|
||||
--gen_types data_lua ^
|
||||
--export_test_data ^
|
||||
--branch cn ^
|
||||
--branch_input_data_dir Datas/l10n/cn
|
||||
|
||||
pause
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
..\src\Luban.Client\bin\Debug\net5.0\Luban.Client.exe ^
|
||||
-h %LUBAN_SERVER_IP% ^
|
||||
-j cfg ^
|
||||
-- ^
|
||||
-d Defines/root.xml ^
|
||||
--input_data_dir Datas ^
|
||||
--output_code_dir output_code ^
|
||||
--output_data_dir output_data ^
|
||||
-s server ^
|
||||
--gen_types code_cs_bin,data_bin ^
|
||||
--export_test_data
|
||||
|
||||
pause
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
..\src\Luban.Client\bin\Debug\net5.0\Luban.Client.exe ^
|
||||
-h %LUBAN_SERVER_IP% ^
|
||||
-j cfg ^
|
||||
-- ^
|
||||
-d Defines/__root__.xml ^
|
||||
--input_data_dir Datas ^
|
||||
--output_data_dir output_lua_without_test ^
|
||||
-s client ^
|
||||
--gen_types data_lua
|
||||
|
||||
pause
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
..\src\Luban.Client\bin\Debug\net5.0\Luban.Client.exe ^
|
||||
-h %LUBAN_SERVER_IP% ^
|
||||
-j cfg ^
|
||||
-- ^
|
||||
-d Defines/__root__.xml ^
|
||||
--input_data_dir Datas ^
|
||||
--output_data_dir output_lua ^
|
||||
-s client ^
|
||||
--gen_types data_lua ^
|
||||
--export_test_data
|
||||
|
||||
pause
|
||||
|
|
@ -1 +1 @@
|
|||
theme: jekyll-theme-cayman
|
||||
theme: jekyll-theme-slate
|
||||
126
docs/catalog.md
|
|
@ -1,126 +0,0 @@
|
|||
|
||||
* start up
|
||||
- [下载 dotnet sdk 3.1](https://dotnet.microsoft.com/download/dotnet-core/3.1)
|
||||
- [下载 luban.client&luban.server](https://github.com/focus-creative-games/luban/releases/tag/v1.0)
|
||||
- 启动 luban.server
|
||||
- 创建游戏配置
|
||||
- root.xml
|
||||
- 新增一个表定义
|
||||
- 新增一个excel文件
|
||||
- 生成
|
||||
- c# dotnet core
|
||||
- gen.client 命令行
|
||||
- c# unity
|
||||
- c# unity + ILRuntime
|
||||
- lua unity xlua
|
||||
- lua unity tolua
|
||||
- 其他lua
|
||||
- java
|
||||
- go
|
||||
- cpp
|
||||
- typescript
|
||||
- python 2.7及3.0
|
||||
* 进阶
|
||||
- 游戏配置
|
||||
- excel 篇
|
||||
- 标题头定义
|
||||
- 定义和配置更多基础类型
|
||||
- 定义枚举
|
||||
- 定义bean
|
||||
- 数据格式
|
||||
- 指定某个或者多个sheet或者文件
|
||||
- list 或者其他类型
|
||||
- group 分组导出
|
||||
- tag
|
||||
- sep
|
||||
- multi_rows
|
||||
- 多级标题头
|
||||
- 单例表
|
||||
- 行表与列表
|
||||
- 可空变量
|
||||
- datetime
|
||||
- convert
|
||||
- 多态bean
|
||||
- json 篇
|
||||
- lua
|
||||
- xml
|
||||
- 一个同时包含 excel 、 json 配置的项目
|
||||
- 数据校验
|
||||
- ref
|
||||
- path
|
||||
- 导出格式
|
||||
- bin 格式
|
||||
- lua 格式
|
||||
- 本地化
|
||||
* gen.client & gen.server 工作模型
|
||||

|
||||
* 定义 + 数据的 抽象模型
|
||||
* 定义
|
||||
* 根定义文件
|
||||
* group
|
||||
* service
|
||||
* topmodule
|
||||
* import
|
||||
* 子模块定义
|
||||
* 类型系统
|
||||
- 基础类型
|
||||
- 可空类型
|
||||
- 枚举
|
||||
- const
|
||||
- bean
|
||||
- field
|
||||
- convert 常量替换
|
||||
- 多态
|
||||
* table
|
||||
* module
|
||||
* 源数据格式
|
||||
- excel
|
||||
- json
|
||||
- lua
|
||||
- xml
|
||||
* 导出数据格式
|
||||
- bin
|
||||
- json
|
||||
- lua
|
||||
- emmylua anntations
|
||||
* input 多种数据文件来源
|
||||
* group 数据分组
|
||||
* tag
|
||||
* 资源列表导出
|
||||
* validator 数据检验
|
||||
* 本地化
|
||||
* editor 相关。导出符合luban数据约束的文件。
|
||||
* ide支持
|
||||
- emmylua anntations
|
||||
|
||||
- luban.client 命令行介绍
|
||||
- luban.client 命令行参数
|
||||
- job cfg 命令行参数
|
||||
|
||||
* 各个语言和引擎及平台下的项目搭建
|
||||
- c# + dotnet core
|
||||
- c# + unity
|
||||
- c# + unity + ILRuntime
|
||||
- 其他 c# 平台
|
||||
- lua + unity + tolua
|
||||
- lua + unity + xlua
|
||||
- lua + unity + slua
|
||||
- lua + unreal + unlua
|
||||
- lua + cocos2dx
|
||||
- 其他使用 lua 的 平台
|
||||
- c++ + unreal
|
||||
- c++ + 其他平台
|
||||
- go
|
||||
- java
|
||||
- python 2.7
|
||||
- python 3.0
|
||||
- typescript + 微信小游戏
|
||||
- typescript + 其他平台
|
||||
|
||||
* luban 开发
|
||||
- git clone 项目
|
||||
- luban 构建与发布
|
||||
- 普通构建
|
||||
- docker
|
||||
- 代码结构介绍
|
||||
- 自定义 job
|
||||
|
|
@ -1,370 +0,0 @@
|
|||
[//]: # "Author: bug"
|
||||
[//]: # "Date: 2020-11-01 15:40:11"
|
||||
|
||||
## bool 类型
|
||||
|
||||
- 新增 一个字段 batch_useable,表示能否批量使用
|
||||
- 用 true 或 false 表示 bool 值,只需要小写后是这两个值即可,比如 true,True,True 都是合法的值。excel 会自动将输入的值大写化。
|
||||
- [定义](images/adv/def_02.png):
|
||||
```xml
|
||||
<module name = "item">
|
||||
<bean name = "Item">
|
||||
<var name = "batch_usable" type = "bool" />
|
||||
</bean>
|
||||
</module>
|
||||
```
|
||||
- 配置:
|
||||

|
||||
|
||||
## float 类型
|
||||
|
||||
- 新增一个 float 类型字段,掉落概率 drop_prob.
|
||||
- [定义](images/adv/def_04.png):
|
||||
```xml
|
||||
<module name = "item">
|
||||
<bean name = "Item">
|
||||
<var name = "drop_prob" type = "float" />
|
||||
</bean>
|
||||
</module>
|
||||
```
|
||||
- 配置:
|
||||

|
||||
|
||||
## 列表类型 list,int
|
||||
|
||||
- 我们新增一个字段, 宝箱的随机抽取道具列表 random_item_ids。
|
||||
- [定义](images/adv/def_06.png)
|
||||
```xml
|
||||
<module name = "item">
|
||||
<bean name = "Item">
|
||||
<var name = "random_item_ids" type = "list, int" />
|
||||
</bean>
|
||||
</module>
|
||||
```
|
||||
- 配置:
|
||||

|
||||
|
||||
## 向量类型 vector3
|
||||
|
||||
- vector3 有三个字段 float x, float y, float z, 适合用于表示坐标之类的数据。
|
||||
- 我们新增一个 spawn_location 字段,表示物品产生的场景位置。
|
||||
- [定义](images/adv/def_08.png):
|
||||
```xml
|
||||
<module name = "item">
|
||||
<bean name = "Item">
|
||||
<var name = "spawn_location" type = "vector3" />
|
||||
</bean>
|
||||
</module>
|
||||
```
|
||||
- 配置:
|
||||

|
||||
|
||||
## 枚举类型
|
||||
|
||||
- 道具有品质,白绿蓝紫橙。 虽然可以直接填 1-5 这几个数据,但不直观,而且对程序非常不友好。
|
||||
- 有一种更优雅的方式是定义枚举。
|
||||
- [枚举定义](images/adv/def_09.png)
|
||||
|
||||
``` xml
|
||||
<enum name = "EQuality">
|
||||
<var name = "WHITE" alias = "白" value = "1">
|
||||
<var name = "GREEN" alias = "绿" value = "2">
|
||||
<var name = "BLUE" alias = "蓝" value = "3">
|
||||
<var name = "PURPLE" alias = "紫" value = "4">
|
||||
<var name = "ORANGE" alias = "橙" value = "5">
|
||||
</enum>
|
||||
```
|
||||
|
||||
- 之前用 bean 来定义结构,我们引入的新的 tag “enum” 来定义 枚举。
|
||||
- enum 的 name 属性表示 枚举名。
|
||||
- 如果生成 c#代码的话,会生成 cfg.item.Equality 类。
|
||||
- `<var name=”xxx” alias=”xx” value=”xx”/>` 为检举项。
|
||||
- 其中 name 为必填项,不可为空,也不能重复。
|
||||
- alias 是可选项,枚举项别名。
|
||||
- value 是枚举值,主要给程序使用。
|
||||
- [完整用法](images/adv/def_10.png)
|
||||
``` xml
|
||||
<module name = "item">
|
||||
<enum name = "EQuality">
|
||||
<var name = "WHITE" alias = "白" value = "1">
|
||||
<var name = "GREEN" alias = "绿" value = "2">
|
||||
<var name = "BLUE" alias = "蓝" value = "3">
|
||||
<var name = "PURPLE" alias = "紫" value = "4">
|
||||
<var name = "ORANGE" alias = "橙" value = "5">
|
||||
</enum>
|
||||
<bean name = "Item">
|
||||
<var name = "quality" type = "EQuality">
|
||||
</bean>
|
||||
</module>
|
||||
```
|
||||
- excel 表中,想表达一个枚举值,既可以用检举项 name,也可以用枚举项的 alias,但不能是相应的整数值。
|
||||
- 注意!如果想引用其他模块定义的 enum 或者 bean, type 里必须指定全名。
|
||||
比如 type=”mall.TradeInfo” 。
|
||||
- 
|
||||
|
||||
## bean 类型
|
||||
|
||||
- 有时候希望一个字段是复合类型。
|
||||
- 比如,我们想用一个字段 level_range 来表示道具可以使用的等级范围,它包含两个字段,最小等级和最大等级。
|
||||
- 此时,可以通过定义 bean 来解决。
|
||||
[定义](images/adv/def_12.png)
|
||||
``` xml
|
||||
<bean name="IntRange">
|
||||
<var name="min" type="int">
|
||||
<var name="max" type="int">
|
||||
</bean>
|
||||
<bean name="Item">
|
||||
<var name="level_range" type="IntRange">
|
||||
</bean>
|
||||
```
|
||||
- 之前的字段都在一个单元格内填写,现在这个字段是 bean 类型,有两个值,该怎么填写呢?
|
||||
如果也像 list,int 那样把两个数写在一个单元格里(如下图),会发现工具报错了: “10,20” 不是合法的整数值。
|
||||

|
||||
- 填写这些占据多个单元格的数据有两种办法:
|
||||
1. 合并标题头
|
||||
让 level_range 标题头占据两列,这样就能在两个单元格里分别填写最小最大等级了。
|
||||

|
||||
2. 使用 sep 分割单元格
|
||||
字段定义中指定 sep 属性,用某些字符分割单元格,这样就能识别为两个整数了。
|
||||
[定义](images/adv/def_15.png)
|
||||
``` xml
|
||||
<bean name="IntRange">
|
||||
<var name="min" type="int">
|
||||
<var name="max" type="int">
|
||||
</bean>
|
||||
<bean name="Item">
|
||||
<var name="level_range" type="IntRange" sep="|">
|
||||
</bean>
|
||||
```
|
||||
如果想用 分号; 或者 竖号 | 分割,只要 sep=”;” 或者 sep=”|“ 即可。
|
||||

|
||||
|
||||
## list,bean 类型
|
||||
|
||||
- 有些时候,我们需要一个 结构列表字段。
|
||||
比如说 道具不同等级会增加不同的血量。我们定义一个 ItemLevelAttr 结构。
|
||||
[定义](images/adv/def_17.png)
|
||||
|
||||
``` xml
|
||||
<module name="item">
|
||||
<bean name="ItemLevelAttr">
|
||||
<var name="level", type="int">
|
||||
<var name="desc", type="string">
|
||||
<var name="attr", type="float">
|
||||
</bean>
|
||||
|
||||
<bean name="Item">
|
||||
<var name="level_attrs" type="list,ItemLevelAttr" />
|
||||
</bean>
|
||||
</module>
|
||||
```
|
||||
|
||||
配置:
|
||||

|
||||
|
||||
- 对于多个值构成的字段,填写方式为 在标题头(level_attrs)对应的列范围内,按顺序填值。不需要跟策划的标题头名有对应关系。空白单元格会被忽略。也就是如下填法也是可以的:
|
||||

|
||||
- 这种填法的缺点是占据在太多的列。如果想如下填,该怎么办呢?
|
||||

|
||||
- 有两种办法。
|
||||
1. bean ItemLevelAttr 增加属性 sep=”,”
|
||||
[定义](images/adv/def_21.png)
|
||||
``` xml
|
||||
<bean name="ItemLevelAttr" sep=",>
|
||||
<var name="level" type="int"/>
|
||||
<var name="desc" type="string"/>
|
||||
<var name="attr" type="float"/>
|
||||
</bean>
|
||||
```
|
||||
如果不想用逗号”,” ,想用;来分割单元格内的数据,只要将 sep=”;” 即可。
|
||||
2. 字段 level_attrs 增加属性 sep=”,”,即
|
||||
[定义](images/adv/def_22.png)
|
||||
``` xml
|
||||
<bean name="ItemLevelAttr" sep=",>
|
||||
<var name="level" type="int"/>
|
||||
<var name="desc" type="string"/>
|
||||
<var name="attr" type="float"/>
|
||||
</bean>
|
||||
<bean name="Item">
|
||||
<var name="level_attrs" type="list,ItemLevelAttr" sep=",">
|
||||
</bean>
|
||||
```
|
||||
如果想所有数据都在一个单元格内填写,又该怎么办呢?
|
||||

|
||||
想用 | 来分割不同 ItemLevelAttr ,用 , 来分割每个记录的数据。只需要 字段 level_attrs 的 sep=”,|” 即可。
|
||||
[定义](images/adv/def_24.png)
|
||||
``` xml
|
||||
<bean name="ItemLevelAttr" sep=",>
|
||||
<var name="level" type="int"/>
|
||||
<var name="desc" type="string"/>
|
||||
<var name="attr" type="float"/>
|
||||
</bean>
|
||||
<bean name="Item">
|
||||
<var name="level_attrs" type="list,ItemLevelAttr" sep=",|">
|
||||
</bean>
|
||||
```
|
||||
|
||||
## 多态 bean
|
||||
|
||||
- 多态 bean 的 Luban 类型系统的核心,没有它就不可能比较方便简洁地表达游戏内的复杂数据。
|
||||
- 常见的结构都是固定,但有时候会有需求,某个字段有多种类型,每种类型之间可能有一些公共字段,但它们也有一部分不一样的字段。简单的做法是强行用一个结构包含所有字段,这在类型种类较少时还勉强能工作,但类型很多,字段个数变化极大时,最终的复合结构体过于庞大笨拙,故而难以在实际采用。
|
||||
- Luban 引入了 OOP 中类型继承的概念,即多态 bean。方便表达那些复杂配置需求。
|
||||
- 假设 item 有一个形状 Shape 类型的字段。Shape 有两种 Circle 和 Rectangle.
|
||||
Cicle 有 2 个字段 int id; float radius;
|
||||
Rectangle 有 3 个字段 int id; float width; float height;
|
||||
[定义](images/adv/def_25.png)
|
||||
``` xml
|
||||
<bean name="Shape">
|
||||
<var name="id" type="int">
|
||||
<bean name="Circle">
|
||||
<var name="radius" type="float">
|
||||
</bean>
|
||||
<bean name="Rectangle">
|
||||
<var name="width" type="float"/>
|
||||
<var name="height" type="float"/>
|
||||
</bean>
|
||||
</bean>
|
||||
<bean name="Item">
|
||||
<var name="shape" type="Shape"/>
|
||||
</bean>
|
||||
```
|
||||
配置:
|
||||

|
||||
- 注意到,多态 bean 与普通 bean 填写区别在于,多态 bean 需要一个类型名。这也好理解,如果没有类型名,如何知道使用哪个 bean 呢。
|
||||
- 有时间策划不太习惯填写英文,或者说类型名有时候会调整,不希望调整类型名后配置也跟着改变,因为,多态 bean 支持别名的概念。
|
||||
[定义](images/adv/def_27.png)
|
||||
``` xml
|
||||
<bean name="Shape">
|
||||
<var name="id" type="int"/>
|
||||
<bean name="Circle" alias="圆">
|
||||
<var name="radius" type="float"/>
|
||||
</bean>
|
||||
<bean name="Rectangle" alias="长方形">
|
||||
<var name="width" type="float"/>
|
||||
<var name="height" type="float"/>
|
||||
</bean>
|
||||
</bean>
|
||||
```
|
||||
- 配置
|
||||

|
||||
- 使用类型名和别名来标识多态都是支持的,可以混合使用。
|
||||
|
||||
## multi_rows 多行 记录
|
||||
|
||||
- 使用数据表经常会遇到某个字段是列表类型的情形。有时候列表的 bean 的字段特别多,比如多达 10 个字段,列表包含了好几个 bean。如果此时配置成一行,会导致 excel 列过多,策划编辑维护不方便直观。 Luban 支持这个列表 多行配置。
|
||||
- [定义](images/adv/def_29.png)
|
||||
``` xml
|
||||
<bean name="MultiLineType">
|
||||
<var name="x1" type="int"/>
|
||||
<var name="x2" type="int"/>
|
||||
<var name="x3" type="int"/>
|
||||
<var name="x4" type="int"/>
|
||||
<var name="x5" type="int"/>
|
||||
<var name="x6" type="int"/>
|
||||
<var name="x7" type="int"/>
|
||||
</bean>
|
||||
<bean name="Item">
|
||||
...
|
||||
<var name="lines" type="list,MultiLineType" multi_rows="1"/>
|
||||
</bean>
|
||||
```
|
||||
- 和 普通 非多行记录的区别在于 lines 字段多了一个 multi_rows=”1” 字段,表示这个字段要多行配置。
|
||||
- 
|
||||
- 和普通不包括多行数据的 excel 表比,meta 行多了 multi_rows:1 这个属性。为了防止被误识别为多行,multi_rows 需要手动打开。
|
||||
|
||||
## 多级标题头
|
||||
|
||||
- 经常会有字段占了多列,比如 Shape, 如果按顺序填写,有个问题在于,字段很多时,容易对应错误,不方便定位。
|
||||
- 假设 有个 show_info 字段,包含 如下字段 string name; string desc; string tip;
|
||||
- [定义](images/adv/def_31.png)
|
||||
``` xml
|
||||
<bean name="ShowInfo">
|
||||
<var name="name" type="string" />
|
||||
<var name="desc" type="string" />
|
||||
<var name="tip" type="string" />
|
||||
</bean>
|
||||
<bean name="Item">
|
||||
...
|
||||
<var name="show_info" type="ShowInfo"/>
|
||||
</bean>
|
||||
```
|
||||
- 配置
|
||||

|
||||
- 有几处改动
|
||||
1. 我们新插入了一行标题头,第 2 行变成了两行。同时 A2,A3 单元格合并,表示标题头占了 2 行。
|
||||
2. show_info 下一行,填上 子字段名 (顺序不重要)
|
||||
- 我们称之为多级标题头,通过多级标题头的方式,可以精确定位深层次字段的列。方便策划填。
|
||||
|
||||
## 单例表
|
||||
|
||||
- 不是所有数据都是 类似 map 这样的多记录结构。有些配置只有一份,比如 开启装备系统的最小角色等级。 这些数据 所在的表,也只有一个记录。称之为 单例表。
|
||||
- 我们创建一个单例表,来存放这些数据。
|
||||
- [定义](images/adv/def_33.png)
|
||||
``` xml
|
||||
<bean name="GlobalConfig">
|
||||
<var name="unlock_equip_sys_level" type="int"/>
|
||||
<var name="unlock_mall_sys_level" type="int"/>
|
||||
</bean>
|
||||
<table name="TbGlobalConfig" value="GlobalConfig" mode="one" input="item/全局参数表.xlsx"/>
|
||||
```
|
||||
- 配置
|
||||

|
||||
|
||||
## 横表与纵表
|
||||
|
||||
- 之前介绍的表都是 面向行,沿着行方向填写数据。有时候我们希望 以列为方向填写。
|
||||
- 比如 上面的单例表。 如果改成一行一个字段,看起来会更清楚。 我们引入纵表支持。
|
||||
- 定义不变,但 excel 的填法有区别,数据如下:
|
||||
- 
|
||||
|
||||
## 可空变量
|
||||
|
||||
- 有时候会有一种变量,我们希望它 功能生效时填一个有效值,功能不生效里,用一个值来表示。 例如 int 类型,常常拿 0 或者-1 作无效值常量。 但有时候,0 或-1 也是有效值时,这种做法就不生效了。或者说 项目组内 有时候拿 0,有时候拿-1 作无效值标记,很不统一。我们借鉴 sql 及 c#,引入 可空值概念,用 null 表达空值。
|
||||
- 我们为 Item 添加 min_use_level 字段,类型为 int? 当填有效值时,使用时要检查等级,否则不检查。
|
||||
- [定义](images/adv/def_36.png)
|
||||
``` xml
|
||||
<bean name="Item">
|
||||
...
|
||||
<var name="min_use_level" type="int?"/>
|
||||
</bean>
|
||||
```
|
||||
- 配置
|
||||

|
||||
|
||||
## datetime 类型
|
||||
|
||||
- 时间是常用的数据类型。Luban 特地提供了支持。
|
||||
填写格式为 以下 4 种。
|
||||
- yyyy-mm-dd hh:mm:ss 如 1999-08-08 01:30:29
|
||||
- yyyy-mm-dd hh:mm 如 2000-08-07 07:40
|
||||
- yyyy-mm-dd hh 如 2001-09-05 07
|
||||
- yyyy-mm-dd 如 2003-04-05
|
||||
- 为 Item 新增一个 失效时间字段 expire_time 。
|
||||
- [定义](images/adv/def_38.png)
|
||||
``` xml
|
||||
<bean name="Item">
|
||||
...
|
||||
<var name="expire_time" type="datetime"/>
|
||||
</bean>
|
||||
```
|
||||
- 配置
|
||||

|
||||
|
||||
## convert 常量替换
|
||||
|
||||
- 游戏里经常会出现一些常用的类似枚举的值,比如说 升级丹的 id,在很多地方都要填,如果直接它的道具 id,既不直观,也容易出错。 Luban 支持常量替换。
|
||||
- 对于需要常量替换的字段,添加 convert=”枚举类”。 如果填写的值是 枚举名或者别名,则替换为 相应的整数。否则 按照整数解析。
|
||||
- [定义](images/adv/def_40.png)
|
||||
``` xml
|
||||
<enum name="EFunctionItemId">
|
||||
<var name="SHENG_JI_DAN" alias="升级丹" value="11220304"/>
|
||||
<var name="JIN_JIE_DAN" alias="进阶丹" value="11220506"/>
|
||||
</enum>
|
||||
<bean name="Item">
|
||||
...
|
||||
<var name="cost_item_on_use" type="int" convert="EFunctionItemId"/>
|
||||
</bean>
|
||||
```
|
||||
- 配置:
|
||||

|
||||
- 添加了 convert 的字段,既可以填 convert 指向的枚举类里的一个合法枚举名,也可以是其他整数。
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
[//]: # (Author: bug)
|
||||
[//]: # (Date: 2020-11-01 16:26:41)
|
||||
|
||||
# Json 数据
|
||||
|
||||
##
|
||||
|
||||
* Luban 支持 json 数据为数据源。 一般来说,json数据是由编辑器制作导出的,而不像excel那样由 人工直接编辑。
|
||||
* 我们新增一个定义表,覆盖了常见数据类型。
|
||||

|
||||
* 我们在 item目录下 新增一个目录,叫 DemoJsonDatas, 里面放两个数据:
|
||||

|
||||
* json 的内容如下:
|
||||

|
||||
* 自行参数每种数据类型 在 json格式的填法,大多数都是合乎常理的。唯一特殊的是map类型。
|
||||
* 由于json 的 key 类型必须为 string, 所以对于 map类型。数据格式为
|
||||
```
|
||||
[ [key1,value1], [key2, value2], ,,,]
|
||||
```
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[//]: # (Author: bug)
|
||||
[//]: # (Date: 2020-11-01 16:26:41)
|
||||
|
||||
# Lua 数据
|
||||
|
||||
##
|
||||
|
||||
* 与 json 相似定义。
|
||||
* 唯一区别在于, lua 的table的key支持任意格式,所以 lua 的map 可以直接 {[key1] = value1, [key2] = value2, ,,,}
|
||||
* 
|
||||
* 注意 数据前有一个 return 语句。因为 lua 数据是当作 lua 文件加载的,每个加载后的结果当作一个记录读入。
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
[//]: # (Author: bug)
|
||||
[//]: # (Date: 2020-11-23 00:21:21)
|
||||
|
||||
# 服务端布署
|
||||
|
||||
## Docker 镜像布署
|
||||
- 镜像会自动更新至最新版
|
||||
- 在有 docker 的环境下,执行下面的指令
|
||||
``` bash
|
||||
docker pull hugebug4ever/luban:latest
|
||||
docker run --name luban-server -d -p 8899:8899 hugebug4ever/luban:latest
|
||||
```
|
||||
|
||||
## Windows 下命令行布署
|
||||
- 下载 [release](https://github.com/focus-creative-games/luban/releases) 版本
|
||||
- 解压 Luban.Server.zip
|
||||
- 执行下面的命令即可
|
||||
```
|
||||
Luban.Server.exe
|
||||
```
|
||||
26
docs/faq.md
|
|
@ -1,26 +0,0 @@
|
|||
[//]: # "Author: bug"
|
||||
[//]: # "Date: 2020-11-15 23:59:21"
|
||||
|
||||
===============================================================================
|
||||
|
||||
## 为什么要使用"客户端/服务器"模式
|
||||
|
||||
- 最初的想法是服务端闭源,因为代码生成部分花了很多心思,也方便加密之类的操作
|
||||
- 为了方便与社区开发者交流开源后,还保留了这一模式,因为觉得
|
||||
- 这一模式,也能作为 ddc 的基础 (distributed data cache)
|
||||
- 配置文件需要反复生成与测试
|
||||
- 文件数量上升后,配置生成不可避免地变慢
|
||||
- 再快的技术,也挡不住大量数据的处理
|
||||
|
||||
## 如果用客户端生成,再通过服务器端分享缓存,不是更快么
|
||||
- 是的。
|
||||
- 但服务器模式还有方便更新的优势,就像网页访问,不需要每个客户端升级浏览器。
|
||||
- 通知每个使用者要更新本地目录这件事,在实践中也产生过很多麻烦。
|
||||
- 如果有效率提升,更佳的 feature (比如统计?), 在服务端实施更方便。
|
||||
- c-s 本身是个流行的设计,虽然万物皆可客户端 ^_^。
|
||||
- 考虑至此,就没有继续深究这个问题。
|
||||
|
||||
## 为什么 excel 的配置不像别的工具,用文件头描述数据?
|
||||
- 数据描述除了 excel 还可以为 json 等其它数据源。用 xml 可以更统一。
|
||||
- 数据类型可以描述地更详细,毕竟 excel 的表达只是强在数据。
|
||||
- 数据关系可以更好地表达,比在 excel 中用一些技巧实现更舒服。
|
||||
148
docs/feature.md
|
|
@ -1,148 +0,0 @@
|
|||
[//]: # (Author: bug)
|
||||
[//]: # (Date: 2020-10-18 15:35:26)
|
||||
|
||||
## 特性说明
|
||||
--------------------
|
||||
|
||||
### 支持的数据类型
|
||||
* 基础内置类型
|
||||
- bool,byte,short,fshort,int,fint,long,flong,float,double,string,text,bytes
|
||||
- vector2, vector3,vector4
|
||||
- datetime
|
||||
* 可空类型
|
||||
- bool?,byte?,short?,fshort?,int?,fint?,long?,flong?,float?,double?
|
||||
- vector2?,vector3?,vector4?
|
||||
- datetime?
|
||||
* 自定义枚举 enum
|
||||
* 自定义常量 const
|
||||
* 自定义结构 bean
|
||||
- 可以定义所有类型的字段
|
||||
- 支持无限制的结构继承,对于表达中大型项目的复杂数据(技能,buff,ai 等等) 极其有用。 (比如基类Shape, 子类 Circle,Rectangle
|
||||
```mermaid
|
||||
graph TD;
|
||||
A-->B;
|
||||
A-->C;
|
||||
B-->D;
|
||||
B-->E;
|
||||
```
|
||||
* 支持容器类型 array。 value 可以为内置类型,也可以为自定义类型
|
||||
* 支持容器类型 list。 value 可以为内置类型,也可以为自定义类型
|
||||
* 支持容器类型 set。 value 只能为内置类型或者enum类型,不支持 bean 类型
|
||||
* 支持容器类型 map。 key 只能为内置类型或者enum类型,不支持 bean 类型。 value 可以为内置类型,也可以为自定义类型
|
||||
|
||||
### 多数据源支持
|
||||
* 支持excel族。 csv 及 xls,xlsx等格式
|
||||
* 支持从指定excel里的某个单元薄读入。
|
||||
* 支持json。 每个json文件当作一个记录读入
|
||||
* 支持lua。 每个lua文件当作一个记录读入
|
||||
* 支持xml。 每个xml文件当作一个记录读入
|
||||
* 支持目录。 递归目录下的所有文件,每个文件当作一个记录读入。允许不同类型的文件混合,比如目录下可以同时有json,lua,xml,excel之类的格式。
|
||||
* 允许指定多个数据源,可以使用以上所有的组合。
|
||||
* 扩展新的数据源也非常容易 (像支持lua,json,xml数据源只用了200行左右代码)
|
||||
|
||||
### 多种数据表模式
|
||||
|
||||
* one 格式,即单例表模式
|
||||
* map 格式,即普通key-value表模式。 任何符合set 的value要求的类型都可以做key
|
||||
* bmap 格式,即双主键模式。 任何符合 set 的value要求的类型都可以作 key1和key
|
||||
|
||||
### 如何自定义导出分组
|
||||
* 可以按照自定义需求选择性导出表及字段
|
||||
|
||||
### 生成极快
|
||||
* 大项目几十M配置数据也能1秒导出
|
||||
* 生成工具使用客户端/服务器架构
|
||||
* 服务器使用多线程加速生成,数十倍提高生成速度
|
||||
* 服务器使用缓存直接返回未改动的代码或者数据的生成结果
|
||||
* 支持增量生成
|
||||
|
||||
### 增强的 excel 格式
|
||||
* 支持填写任意复杂的数据(比如 常见的 list,bean 这种类型)
|
||||
* 支持 sep 在单个单元格内填写多个数据
|
||||
* 支持 多行数据。即 对于 list,bean 类型的字段,可以多行填写
|
||||
* 支持多级标题头,对填写 层次很深的数据时非常有用
|
||||
* 支持导出标记。比如 是、否、test 等等,用于标记某行数据是否导出
|
||||
* 支持用 true,false表示 bool 值,语义更清晰。
|
||||
* 支持枚举 alias 别名,填写枚举类型不再需要写数字了
|
||||
* 支持可空变量。可以用null表达空。 某些场合下语义更清晰。
|
||||
* 支持 datetime 数据类型. 时间格式标准为以下几种,最终被转化为utc时间方便程序处理
|
||||
- yyyy-MM-dd HH:mm:ss
|
||||
- yyyy-MM-dd HH:mm
|
||||
- yyyy-MM-dd HH
|
||||
- yyyy-MM-dd
|
||||
|
||||
### 代码编辑器支持
|
||||
* 根据配置表定义生成相应的json文件的 load 及 save 代码(c#或者c++),方便编辑器加载和导出。每个记录对应一个json文件。
|
||||
* 支持 unity 下用c# 开发编辑器
|
||||
* 支持 unreal 下用c++ 开发的编辑器
|
||||
|
||||
### 支持多种导出数据格式
|
||||
* **导出格式与源数据解耦**。无论源数据是 excel、lua、xml、json 或者它们的混合, 最终都被以统一的格式导出,极大简化了生成代码的复杂性。
|
||||
* 导出binary。 内置binary格式,加载最快,占空间最少。
|
||||
* 导出json 格式
|
||||
* 导出 lua 格式
|
||||
* 非常容易扩展其他输出格式(一般来说不到300行代码)
|
||||
|
||||
### 本地化支持
|
||||
* 支持**本地化时间**。 配置中的 datetime会根据指定的timezone及localtime转化为正确的utc时间,方便程序处理
|
||||
* 支持**静态本地化**。 配置中的text类型在导出时已经转化为正确的本地化后的字符串
|
||||
* 支持**动态本地化**。 配置中的text类型能运行时全部切换为某种本地化后的字符串
|
||||
|
||||
### 代码编辑器支持
|
||||
* 支持 emmylua anntations。生成的lua包含符合emmylua 格式anntations信息。配合emmylua有强大的配置代码提示能力。
|
||||
|
||||
### 强大的数据校验能力
|
||||
* 完整的数据内建约束检查
|
||||
* ref 检查。检查表引用合法性。
|
||||
* path 检查。检查资源引用合法性,对于防止策划填错极其有用,不再需要运行时才发现资源配置错误了。
|
||||
* range 检查。检查数值范围。
|
||||
* 扩展的自定义检查。使用自定义代码进行高级检查。提交配置前就能完成本地检查,避免运行时才发现错误,极大减少迭代成本。
|
||||
|
||||
### 资源导出支持
|
||||
* 支持 res 资源标记。可以一键导出配置中引用的所有资源列表(icon,ui,assetbundle等等)
|
||||
|
||||
|
||||
### 优秀的代码生成
|
||||
- 良好模块化。比如对于c#语言生成cfg.item.Item,cfg.equip.EquipInfo这样的类
|
||||
- 内存性能优化。支持c#值类型以及lua的紧凑格式保存数据,节约内存。
|
||||
- 支持为ref的字段生成resolve后的字段定义及加载后设置。读取所引用的字段不用再查表了。
|
||||
- 支持对 list 类型数据 生成 index, 方便按列表和索引方式访问的需求。
|
||||
|
||||
|
||||
### 良好的数据组织
|
||||
- 数据模块化。允许策划按模块目录自由组织数据。
|
||||
- 数据多源化。允许策划按需求选择最合适的源数据类型。
|
||||
|
||||
### 支持的语言 (覆盖主流的语言)
|
||||
* 支持 c# (所有 .net framework 2 及以上, .net core平台)
|
||||
* 支持 java (java 1.6 及以上)
|
||||
* 支持 c++ ( c++ 11 及以上)
|
||||
* 支持 go
|
||||
* 支持 lua (5.1 及以上)
|
||||
* 支持 typescript
|
||||
* **新增其他语言支持非常容易**
|
||||
|
||||
### 支持的服务器引擎(满足语言版本的情况下)
|
||||
* 纯 c# 的所有引擎
|
||||
* 纯 java 的所有引擎
|
||||
* 纯 go 的所有引擎
|
||||
* 纯 c++ 的所有引擎
|
||||
* 纯 lua 的所有引擎
|
||||
* 纯 js或typescript的所有引擎
|
||||
|
||||
### 支持的客户端引擎(满足语言版本的情况下)
|
||||
* unity + c#
|
||||
* unity + tolua
|
||||
* unity + xlua
|
||||
* unity + ILRuntime
|
||||
* cocosx-lua
|
||||
* cocosx-js
|
||||
* unreal + 纯 c++
|
||||
* unreal + unlua
|
||||
* unreal + puerts (typescript)
|
||||
* 支持微信小程序和小游戏 sdk
|
||||
* 支持 lua 的其他任何引擎
|
||||
* 支持 js 或 typescript的 其他任何引擎
|
||||
|
||||
### 强大的扩展能力
|
||||
* 支持插件形式,扩展其他生成极其方便
|
||||
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 22 KiB |