• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

luban: 你的最佳游戏配置解决方案 {excel, csv, xls, xlsx, json, bson, xml, yaml, l ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

luban

开源软件地址:

https://gitee.com/focus-creative-games/luban

开源软件介绍:

Luban

licenseBuild Status
Docker AutoDocker Build

icon


links


介绍

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代码
  • 支持生成 protobuf(schema + binary + json)、flatbuffers(schema + json)、msgpack(binary)
  • 强大的数据校验能力。ref引用检查、path资源路径、range范围检查等等
  • 完善的本地化支持。静态文本值本地化、动态文本值本地化、时间本地化、main-patch多地区版本
  • 强大灵活的自定义能力,支持自定义代码模板和数据模板
  • 通用型生成和缓存工具。也可以用于生成协议、数据库之类的代码,甚至可以用作对象缓存服务
  • 良好支持主流引擎、全平台、主流热更新方案、主流前后端框架。支持unity、unreal、cocos2x、微信小游戏等主流引擎。工具自身跨平台,能在Win,Linux,Mac平台良好工作。详见

完整特性请参见 feature

文档

  • 快速上手

  • Document ,比较完善,有使用疑问,请先查看此文档。

  • 示例项目 (github) (gitee)

  • 版本变更记录

  • 支持与联系

    • QQ群: 692890842 (Luban开发交流群)。有使用方面的疑问请及时加QQ群询问,随时有人帮助解决。
    • 邮箱: taojingjian#gmail.com

excel格式速览

完整示例请详见 excel格式介绍

普通表

##varidx1x5x6s1s2v3t1
##typeintboollongfloatstringtext#sep=|vector3datetime
##iddesc1desc2desc3desc4desc7desc1time
1false10001.2hellokey1|world11,2,31999-10-10 11:12:13
2true10002.4worldkey2|world22,4,51999-10-12 11:12:13

原生数据列表

##var id arr1 arr2 arr3 arr4
##type int (array#sep=;),int list,int (list#sep=|),string list,string
## id desc1 desc2 desc3 desc4
11;2;312xx|yyxxxzzz
22;4345aaaa|bbbb|ccccaaabbbccc
32;4;63456aaaa|bbbb|ccccaaabbbccc

子结构

Reward为包含 "int item_id; int count; string desc; " 这三个字段的子结构。

##varidrewardreward2reward3
##typeintRewardRewardReward#sep=,
##varitem_idcountdesc
1100110item 1100211item 21002,1,item 3
2200110item 2200220item 42003,2,item 5

结构列表 1

##varidrewards1rewards2
##typeintlist,Rewardlist,Reward#sep=,
##idreward list desc1reward list desc2
110011desc110022desc21001,1,desc11002,2,desc21003,3,desc3
210011desc11001,1,desc11002,2,desc2

结构列表 2

##var id name rewards
##type int string list,Reward
##var 0 1 2
1task1100110desc1100212desc2100313desc3
2task1100330desc3100440desc4
3task1100550desc5

结构列表 3

##var id name rewards
##type int string list,Reward
##var 0 1 2
##var item_idnumdesc item_idnumdesc item_idnumdesc
1task1100110desc1100212desc2100313desc3
2task1100330desc3100440desc4
3task1100550desc5

多行表

##var id name *stages
##type int string list,Stage
##var id name desc location item_id num
## id desc1 desc1 desc2 desc3 desc4 desc5 desc6
1task11stage1stage desc11,2,310011
2stage2stage desc21,2,310011
3stage3stage desc31,2,310021
2task21stage1stage desc11,2,310011
2stage2stage desc21,2,310021

多级多行表

多行表的列表字段,每个列表元素还可以是多行。支持任意多级的多行嵌套。另外也允许有多个多行字段,每个字段的行数还可以不同。

##var id name *stages
##type int string list,Stage
##var id name desc *tips *rules
##var location item_id num id name item_id num
## id desc1 desc1 desc2 desc3 desc4 desc5 desc6 id desc item id count
1task11stage1stage desc11,2,3100111hello50011
2,2,210022
2stage2stage desc21,2,3100111hello50011
2hello50011
3hello50011
3stage3stage desc31,2,3100211hello50011
2,2,2100221hello50011
2,2,210022
2task21stage1stage desc11,2,310011
2,2,210022
2,2,210022
2stage2stage desc21,2,3100211hello50011
2,2,210022

map 类型的多级子标题

##varidlans
##typeintmap,string,string
##varch-znenjpfr
1苹果appleaaaaaa
2香蕉bananabbbbbb

类型继承(适合技能、buff相关配置)

##varidshapeshape2
##typeintShapeShape
##var$typeradiuswidthheight
1Circle10Circle100
2Rectangle1020矩形1020
310Triangle151515
4Circle10Rectangle3020

多主键表(联合索引)

多个key构成联合唯一主键。

##varkey1key2key3num
##typeintlongstringint
11aaa123
11bbb124
12aaa134
21aaa124
56xxx898

多主键表(独立索引)

多个key独立索引。

##varkey1key2key3num
##typeintlongstringint
12aaa123
24bbb124
36ccc134
48ddd124
510eee898

单例表

有一些配置全局只有一份,比如 公会模块的开启等级,背包初始大小,背包上限。此时使用单例表来配置这些数据比较合适。

##varguild_open_levelbag_init_capacitybag_max_capacitynewbie_tasks
##typeintintintlist,int
##desc1desc 2desc 3desc 4
1010050010001,10002

纵表

##var#column##type##
guild_open_levelintdesc110
bag_init_capacityintdesc2100
bag_max_capacityintdesc3500
newbie_taskslist,intdesc410001,10002

json、lua、xml、yaml 格式速览

以行为树为例,展示json格式下如何配置行为树配置。xml、lua、yaml等等格式请参见 详细文档

{  "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# 使用示例
// 一行代码可以加载所有配置。 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 使用示例
// 一行代码可以加载所有配置。 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 使用示例
// 一行代码可以加载所有配置。 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)

路线图

  • 新增 unity 内置编辑器
  • 新增 unreal 内置编辑器
  • 补充单元测试

License

Luban is licensed under the MIT license.


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap