Compare commits
566 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 | |
|
|
ff1dd168dd | |
|
|
0aef438e0c | |
|
|
75c92d4685 | |
|
|
77949bdfff | |
|
|
10c2768f1a | |
|
|
1d6698fac7 | |
|
|
75691d1f7f | |
|
|
80074057f8 | |
|
|
dd4368faf9 | |
|
|
8977b5c4c3 | |
|
|
19dce48383 | |
|
|
16c320ff49 | |
|
|
9e4ba72950 | |
|
|
e9166ac462 | |
|
|
d873aa3a6c | |
|
|
97c2342cfc | |
|
|
35bafee063 | |
|
|
2b28e4de74 | |
|
|
b1638198db | |
|
|
ee217e1a32 | |
|
|
e36468dcc8 | |
|
|
bdeff0ad81 | |
|
|
d67e232cdc | |
|
|
7e03fe7192 | |
|
|
2f46d40ca3 | |
|
|
a36b118a98 | |
|
|
b123a61081 | |
|
|
17f7fc5b1b | |
|
|
5f07daa657 | |
|
|
35f0af394a | |
|
|
1129b5f458 | |
|
|
ca8104aa33 | |
|
|
5868f9bd0a | |
|
|
428652b433 | |
|
|
c538f2045d | |
|
|
1c59a3d0d0 | |
|
|
2b6a1b04c2 | |
|
|
83a6e4fd12 | |
|
|
0cbf47e23c | |
|
|
ad965cf8e4 | |
|
|
ff467b8fa7 | |
|
|
5720895b43 | |
|
|
88f7ccb96f | |
|
|
87877f4671 | |
|
|
788b054a06 | |
|
|
a552548bfe | |
|
|
2c9f62cd76 | |
|
|
3b904d68e0 | |
|
|
8ef8ec9196 | |
|
|
c39761273f | |
|
|
147ce91166 | |
|
|
6e127e3b7a | |
|
|
c87d6ccc2c | |
|
|
63fa73e487 | |
|
|
2924642c74 | |
|
|
12f1286c02 | |
|
|
8988f57035 | |
|
|
623fdee881 | |
|
|
9453bd90e3 | |
|
|
12a41cf651 | |
|
|
334506ea96 | |
|
|
3e61051247 | |
|
|
2be7de7eb7 | |
|
|
f9a60b6e63 | |
|
|
fba34e501c | |
|
|
f3aa518526 | |
|
|
ab559c17ea | |
|
|
5deb0427ca | |
|
|
3c34affab2 | |
|
|
325d19e5ec | |
|
|
b2a9d97eb5 | |
|
|
8aa199e4a1 | |
|
|
45341a2d21 | |
|
|
cea5d7273d | |
|
|
a73f0ae191 | |
|
|
c77d29730f | |
|
|
27c22cf7d5 | |
|
|
1f0e6ece51 | |
|
|
ef4addef1f | |
|
|
56a6293715 | |
|
|
f9e1506f4a | |
|
|
ea4c60e8f6 | |
|
|
f9c5d12030 | |
|
|
e8e38b4d12 | |
|
|
998aea31fa | |
|
|
5171b255dc | |
|
|
b513cde22b | |
|
|
177dc101f4 | |
|
|
eed902e0fa | |
|
|
e8aad2dc17 | |
|
|
c700aba868 | |
|
|
1755e61c48 |
|
|
@ -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 }}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -265,3 +265,9 @@ __pycache__/
|
|||
# gen cache meta file
|
||||
.cache.meta
|
||||
|
||||
/config/output_code
|
||||
/config/output_data
|
||||
/config/output_lua
|
||||
/config/output_lua_without_test
|
||||
/src/Excel2TextDiff/Properties/launchSettings.json
|
||||
/src/packages
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
language: csharp
|
||||
solution: src/Luban.sln
|
||||
|
||||
mono: none
|
||||
dotnet: 6.0
|
||||
script:
|
||||
- cd src
|
||||
- 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
|
||||
|
||||
|
|
|
|||
638
README.md
|
|
@ -1,86 +1,586 @@
|
|||
[//]: # (Author: bug)
|
||||
[//]: # (Date: 2020-10-20 20:24:07)
|
||||
|
||||
# Luban
|
||||
|
||||
## 什么是 Luban
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://travis-ci.com/focus-creative-games/luban)
|
||||

|
||||

|
||||
|
||||
Luban 是一个强大的生成与缓存工具,用于但不限于 游戏配置、消息、资源格式转换 之类的用途。
|
||||

|
||||
|
||||
相比传统简单的以excel为中心的表格导出工具,它提供了一个**完整的游戏配置数据解决方案**。
|
||||
-----
|
||||
|
||||
Luban 能够良好满足小型、中型、大型及超大型游戏项目的配置需求。
|
||||
|
||||
Luban 工具不仅适用于游戏行业,也非常适合传统的互联网项目。
|
||||
## links
|
||||
|
||||
- [README - English](./README.en-us.md)
|
||||
- [github link](https://github.com/focus-creative-games/luban)
|
||||
- [gitee link](https://gitee.com/focus-creative-games/luban)
|
||||
|
||||
-----
|
||||
|
||||
## 介绍
|
||||
|
||||
luban是你的**最佳游戏配置解决方案**。
|
||||
|
||||
luban高效地处理游戏开发中常见的excel、json、xml之类的数据,检查数据错误,生成c#等各种语言的代码,导出成bytes或json等多种格式。
|
||||
|
||||
luban统一了游戏配置开发工作流,极大提升了策划和程序的工作效率。
|
||||
|
||||
## 核心特性
|
||||
|
||||
- 强大的数据解析和转换能力 {excel(csv,xls,xlsx)、json、bson、xml、yaml、lua、unity ScriptableObject} => {binary、json、bson、xml、lua、yaml、erlang、 custom format}
|
||||
- 增强的excel格式,可以简洁地配置出像简单列表、子结构、结构列表,以及任意复杂的深层次的嵌套结构。
|
||||
- 完备的类型系统,**支持OOP类型继承**,搭配excel、json、lua、xml等格式数据**灵活优雅**表达行为树、技能、剧情、副本之类复杂GamePlay数据
|
||||
- 支持生成c#、java、go、c++、lua、python、javascript、typescript、erlang、rust、gdscript 代码
|
||||
- 支持生成 protobuf(schema + binary + json)、flatbuffers(schema + json)、msgpack(binary)
|
||||
- 强大的数据校验能力。ref引用检查、path资源路径、range范围检查等等
|
||||
- 完善的本地化支持。静态文本值本地化、动态文本值本地化、时间本地化、main-patch多地区版本
|
||||
- 强大灵活的自定义能力,支持自定义代码模板和数据模板
|
||||
- **通用型生成和缓存工具**。也可以用于生成协议、数据库之类的代码,甚至可以用作对象缓存服务
|
||||
- **良好支持主流引擎、全平台、主流热更新方案、主流前后端框架**。支持Unity、Unreal、Cocos2x、Godot、微信小游戏等主流引擎。工具自身跨平台,能在Win,Linux,Mac平台良好工作。
|
||||
|
||||
完整特性请参见 [feature](https://focus-creative-games.github.io/luban-doc/#/manual/traits)
|
||||
|
||||
## 文档
|
||||
* [主页](https://focus-creative-games.github.io/luban/index.html)
|
||||
* 各语言的简介: [English](README.en-us.md), [简体中文](README.md)
|
||||
|
||||
## 使用示例
|
||||
* Lua 使用示例
|
||||
``` Lua
|
||||
local data = require("TbDataFromJson")
|
||||
local cfg = data[32]
|
||||
print(cfg.name)
|
||||
```
|
||||
|
||||
* C# 使用示例
|
||||
``` C#
|
||||
var tables = new cfg.Tables(file => return new ByteBuf(File.ReadAllBytes("output_data/" + file)));
|
||||
Console.WriteLine(tables.TbSingleton.Name);
|
||||
Console.WriteLine(tables.TbDataFromJson.Get(12).X1);
|
||||
Console.WriteLine(tables.TbTwoKey.Get(1, 10).X8);
|
||||
```
|
||||
* [更多语言的例子](docs/samples.md)
|
||||
|
||||
## 特性
|
||||
* [完备的数据类型支持](docs/feature.md#支持的数据类型)
|
||||
* [多类型数据源支持](docs/feature.md#多数据源支持)
|
||||
* [多种数据表模式](docs/feature.md#多种数据表模式)
|
||||
* [按组导出数据](docs/feature.md#如何自定义导出分组)
|
||||
* [生成速度快](docs/feature.md#生成极快)
|
||||
* [增强 Excel 的表达](docs/feature.md#增强的-excel-格式)
|
||||
* [根据开发效率需求定制的数据输出格式](docs/feature.md#支持多种导出数据格式)
|
||||
* [本地化支持](docs/feature.md#本地化支持)
|
||||
* [代码提示支持](docs/feature.md#代码编辑器支持)
|
||||
* [强大的数据校验能力](docs/feature.md#强大的数据校验能力)
|
||||
* [资源导出支持](docs/feature.md#资源导出支持)
|
||||
* [自动代码生成](docs/feature.md#优秀的代码生成)
|
||||
* [数据分组](docs/feature.md#良好的数据组织)
|
||||
* [多语言支持](docs/feature.md#支持的语言-覆盖主流的语言)
|
||||
* [多服务器引擎支持](docs/feature.md#支持的服务器引擎-满足语言版本的情况下)
|
||||
* [多客户端引擎支持](docs/feature.md#支持的客户端引擎-满足语言版本的情况下)
|
||||
* [扩展能力](docs/feature.md#强大的扩展能力)
|
||||
* [ ] 提供定制开发服务 ^_^
|
||||
- [官方文档](https://focus-creative-games.github.io/luban-doc/)
|
||||
- [快速上手](https://focus-creative-games.github.io/luban-doc/#/beginner/quickstart)
|
||||
- **示例项目** ([github](https://github.com/focus-creative-games/luban_examples)) ([gitee](https://gitee.com/focus-creative-games/luban_examples))
|
||||
- [版本变更记录](https://focus-creative-games.github.io/luban-doc/#/changelog)
|
||||
- 支持与联系
|
||||
- QQ群: 692890842 (Luban开发交流群)。有使用方面的疑问请及时加QQ群询问,随时有人帮助解决。
|
||||
- 邮箱: luban@code-philosophy.com
|
||||
|
||||
## RoadMap
|
||||
- [ ] 新增 unity 内置编辑器
|
||||
- [ ] 新增 unreal 内置编辑器
|
||||
## excel格式速览
|
||||
|
||||
### 普通表
|
||||
|
||||
|##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|
|
||||
|
||||
|
||||
### 原生数据列表
|
||||
|
||||
<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>
|
||||
|
||||
### 子结构
|
||||
|
||||
Reward为包含 "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>
|
||||
|
||||
### 结构列表 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>
|
||||
|
||||
### 结构列表 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>
|
||||
|
||||
### 结构列表 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>
|
||||
|
||||
### 多行表
|
||||
|
||||
<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>
|
||||
|
||||
### 多级多行表
|
||||
|
||||
多行表的列表字段,每个列表元素还可以是多行。支持任意多级的多行嵌套。另外也允许有多个多行字段,每个字段的行数还可以不同。
|
||||
|
||||
<table border="1">
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td>id</td>
|
||||
<td>name</td>
|
||||
<td colspan="10">*stages</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##type</td>
|
||||
<td>int</td>
|
||||
<td>string</td>
|
||||
<td colspan="10">list,Stage</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td/>
|
||||
<td/>
|
||||
<td>id</td>
|
||||
<td>name</td>
|
||||
<td>desc</td>
|
||||
<td colspan="3">*tips</td>
|
||||
<td colspan="4">*rules</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>##var</td>
|
||||
<td/>
|
||||
<td/>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td>location</td>
|
||||
<td>item_id</td>
|
||||
<td>num</td>
|
||||
<td>id</td>
|
||||
<td>name</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>
|
||||
<td>id</td>
|
||||
<td>desc</td>
|
||||
<td>item id</td>
|
||||
<td>count</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><td>1</td><td>hello</td><td>5001</td><td>1</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td/><td/><td></td><td></td><td></td><td>2,2,2</td><td>1002</td><td>2</td><td></td><td></td><td></td><td></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><td>1</td><td>hello</td><td>5001</td><td>1</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td/><td/><td></td><td></td><td></td><td></td><td></td><td></td><td>2</td><td>hello</td><td>5001</td><td>1</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td/><td/><td></td><td></td><td></td><td></td><td></td><td></td><td>3</td><td>hello</td><td>5001</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><td>1</td><td>hello</td><td>5001</td><td>1</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td/><td/><td></td><td></td><td></td><td>2,2,2</td><td>1002</td><td>2</td><td>1</td><td>hello</td><td>5001</td><td>1</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td/><td/><td></td><td></td><td></td><td>2,2,2</td><td>1002</td><td>2</td><td></td><td></td><td></td><td></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><td></td><td></td><td></td><td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td/><td/><td></td><td></td><td></td><td>2,2,2</td><td>1002</td><td>2</td><td></td><td></td><td></td><td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td/><td/><td></td><td></td><td></td><td>2,2,2</td><td>1002</td><td>2</td><td></td><td></td><td></td><td></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><td>1</td><td>hello</td><td>5001</td><td>1</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td/><td/><td/><td></td><td></td><td></td><td>2,2,2</td><td>1002</td><td>2</td><td></td><td></td><td></td><td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 类型继承(适合技能、buff相关配置)
|
||||
|
||||
<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>矩形</td><td>10</td><td>20</td><td></td></tr>
|
||||
<tr align="center"><td/><td>3</td><td>圆</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>
|
||||
|
||||
### 多主键表(联合索引)
|
||||
|
||||
多个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|
|
||||
|
||||
### 多主键表(独立索引)
|
||||
|
||||
多个key独立索引。
|
||||
|
||||
|##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|
|
||||
|
||||
### 单例表
|
||||
|
||||
有一些配置全局只有一份,比如 公会模块的开启等级,背包初始大小,背包上限。此时使用单例表来配置这些数据比较合适。
|
||||
|
||||
|##var| guild_open_level | bag_init_capacity | bag_max_capacity | newbie_tasks |
|
||||
| - |- | - | - | - |
|
||||
| ##type | int | int | int | list,int|
|
||||
| ## |desc1 | desc 2 | desc 3 | desc 4 |
|
||||
| | 10 | 100| 500| 10001,10002 |
|
||||
|
||||
### 纵表
|
||||
|
||||
<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 格式速览
|
||||
|
||||
以行为树为例,展示json格式下如何配置行为树配置。xml、lua、yaml等等格式请参见 [详细文档](https://focus-creative-games.github.io/luban-doc/#/manual/datasource)。
|
||||
|
||||
```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": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 代码使用预览
|
||||
|
||||
这儿只简略展示c#、typescript、go、c++ 语言在开发中的用法,更多语言以及更详细的使用范例和代码见[示例项目](https://github.com/focus-creative-games/luban_examples)。
|
||||
|
||||
- C# 使用示例
|
||||
|
||||
```C#
|
||||
// 一行代码可以加载所有配置。 cfg.Tables 包含所有表的一个实例字段。
|
||||
var tables = new cfg.Tables(file => return new ByteBuf(File.ReadAllBytes($"{gameConfDir}/{file}.bytes")));
|
||||
// 访问一个单例表
|
||||
Console.WriteLine(tables.TbGlobal.Name);
|
||||
// 访问普通的 key-value 表
|
||||
Console.WriteLine(tables.TbItem.Get(12).Name);
|
||||
// 支持 operator []用法
|
||||
Console.WriteLine(tables.TbMail[1001].Desc);
|
||||
```
|
||||
|
||||
- typescript 使用示例
|
||||
|
||||
```typescript
|
||||
// 一行代码可以加载所有配置。 cfg.Tables 包含所有表的一个实例字段。
|
||||
let tables = new cfg.Tables(f => JsHelpers.LoadFromFile(gameConfDir, f))
|
||||
// 访问一个单例表
|
||||
console.log(tables.TbGlobal.name)
|
||||
// 访问普通的 key-value 表
|
||||
console.log(tables.TbItem.get(12).Name)
|
||||
```
|
||||
|
||||
- go 使用示例
|
||||
|
||||
```go
|
||||
// 一行代码可以加载所有配置。 cfg.Tables 包含所有表的一个实例字段。
|
||||
if tables , err := cfg.NewTables(loader) ; err != nil {
|
||||
println(err.Error())
|
||||
return
|
||||
}
|
||||
// 访问一个单例表
|
||||
println(tables.TbGlobal.Name)
|
||||
// 访问普通的 key-value 表
|
||||
println(tables.TbItem.Get(12).Name)
|
||||
```
|
||||
|
||||
- c++ 使用示例
|
||||
|
||||
```c++
|
||||
cfg::Tables tables;
|
||||
if (!tables.load([](ByteBuf& buf, const std::string& s) { buf.clear(); return buf.loadFromFile("../GenerateDatas/bytes/" + s + ".bytes"); }))
|
||||
{
|
||||
std::cout << "== load fail == " << std::endl;
|
||||
return;
|
||||
}
|
||||
std::cout << tables.TbGlobal->name << std::endl;
|
||||
std::cout << tables.TbItem.get(12)->name << std::endl;
|
||||
```
|
||||
|
||||
## 路线图
|
||||
|
||||
- [ ] 新增 unity 内置编辑器
|
||||
- [ ] 新增 unreal 内置编辑器
|
||||
- [ ] 补充单元测试
|
||||
|
||||
## 布署
|
||||
TODO
|
||||
## 友情链接
|
||||
|
||||
## 开发环境架设
|
||||
* 安装 VS2019 社区版
|
||||
* 安装 .dotnet core sdk 3.1
|
||||
- [Luban Unity插件](https://github.com/LiuOcean/Luban_Unity_GUI) 在Unity里完成生成命令的配置和生成操作
|
||||
- [LubanTools](https://github.com/MOMOLAXI/LubanTools) Luban的Win GUI命令配置和生成工具
|
||||
|
||||
## 如何贡献?
|
||||
* [Contributing](CONTRIBUTING.md) explains what kinds of changes we welcome
|
||||
- [Workflow Instructions](docs/workflow/README.md) explains how to build and test
|
||||
|
||||
## Useful Links
|
||||
|
||||
* [.NET Core source index](https://source.dot.net)
|
||||
* 社区的其它实现
|
||||
* [tabtoy](https://github.com/davyxu/tabtoy)
|
||||
|
||||
## 支持和联系
|
||||
QQ 群: 692890842
|
||||
邮箱: taojingjian#gmail.com
|
||||
|
||||
## License
|
||||
|
||||
Luban is licensed under the [MIT](LICENSE.TXT) license.
|
||||
Luban is licensed under the [MIT](LICENSE.TXT) license.
|
||||
|
|
|
|||
|
|
@ -1,30 +0,0 @@
|
|||
{
|
||||
"x1":true,
|
||||
"x2":3,
|
||||
"x3":128,
|
||||
"x4":1211,
|
||||
"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},
|
||||
"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 @@
|
|||
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},
|
||||
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,12 +0,0 @@
|
|||
##,align:true,row:true,,,,,,,,,,,,,,,,,,,,,,
|
||||
__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,112233445566 ,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"
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
|
Can't render this file because it contains an unexpected character in line 4 and column 152.
|
|
|
@ -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>1122</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>
|
||||
|
||||
<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,23 +0,0 @@
|
|||
<root>
|
||||
|
||||
<topmodule name="cfg"/>
|
||||
|
||||
<group name="client,c" default="1"/>
|
||||
<group name="server,s" default="1"/>
|
||||
<group name="editor,e" default="1"/>
|
||||
<group name="ue,u"/>
|
||||
|
||||
<import name="."/>
|
||||
|
||||
<service name="server" manager="Tables" group="s,server"/>
|
||||
|
||||
<service name="client" manager="Tables" group="c,client"/>
|
||||
|
||||
<service name="all" manager="Tables" group="c,s"/>
|
||||
|
||||
<service name="ue4_editor" manager="Tables" group="e"/>
|
||||
|
||||
<service name="unity_editor" manager="Tables" group="e"/>
|
||||
|
||||
<service name="ue4" manager="Tables" group="u,ue"/>
|
||||
</root>
|
||||
|
|
@ -1,212 +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="x1" type="bool"/>
|
||||
<var name="x2" type="byte"/>
|
||||
<var name="x3" type="short" ref="test.TbFullTypes"/>
|
||||
<var name="x4" type="int?" convert="DemoEnum"/>
|
||||
<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="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"/> 最常见的普通 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目录递归读入,每个文件是一个记录
|
||||
|
||||
<table name="TbTwoKey" value="DemoType2" index="x3,x4" input="test/json_datas" mode="bmap"/>
|
||||
|
||||
|
||||
<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="x7" type="double"/>
|
||||
<var name="x8_0" type="fshort"/>
|
||||
<var name="x8" type="fint"/>
|
||||
<var name="x9" type="flong"/-->
|
||||
|
||||
<var name="x10" type="string"/>
|
||||
<var name="x12" type="DemoType1"/>
|
||||
<var name="x13" type="ETestUeType"/>
|
||||
<!--var name="x14" type="DemoDynamic" sep=","/-->多态数据结构
|
||||
|
||||
<var name="v2" type="vector2"/>
|
||||
<var name="v3" type="vector3"/>
|
||||
<var name="v4" type="vector4"/>
|
||||
|
||||
<var name="t1" type="datetime"/>
|
||||
<!--
|
||||
|
||||
<var name="x15" type="DemoType1"/>
|
||||
|
||||
<var name="y1" type="int?"/> nullable ,多态结构肯定是nullable的
|
||||
-->
|
||||
|
||||
<var name="k1" type="array,int"/> 使用;来分隔
|
||||
|
||||
<var name="k2" type="list,int" group="c,s"/>
|
||||
<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>
|
||||
</module>
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
..\src\Luban.Client\bin\Debug\netcoreapp3.1\Luban.Client.exe ^
|
||||
-h 127.0.0.1 ^
|
||||
-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 +1 @@
|
|||
theme: jekyll-theme-cayman
|
||||
theme: jekyll-theme-slate
|
||||
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的 其他任何引擎
|
||||
|
||||
### 强大的扩展能力
|
||||
* 支持插件形式,扩展其他生成极其方便
|
||||
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 2.0 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 |