游戏配置转换工具

游戏配置转换工具

  在游戏开发过程中,肯定会需要用到一些配置,如果联网游戏还会涉及到服务器和客户端。相同的功能不同的属性可能会在服务器和客户端共用,有的可能只有服务器使用,有的只有客户端来使用。在配置表的时候如果服务器和客户端分开来配容易出错。可以把数据配在一个表里,然后用工具拆分是服务器的还是客户端的数据。

  此工具是使用Go语言开发的可以实现配置一表xlsx表,按标志分别输入为客户端或服务器的表,输出格式有 jsontsjsmongodbcsv的小工具。

安装

源码安装

安装好go开发环境,直接编译

git clone https://github.com/zngw/cfg.git

直接下载编译好的可执行文件

下载地址:cfg

配置

直接运行

运行后会装./excel目录下的xlsx文件,服务器转成 mongodb,客户端转成 json

配置说明

文件配置

配置文件为json格式。可以用命令行参数 -c 加载配置文件,默认为同目录下的 ./conf.json

{
    "path":"./excel",
    "pre":"Table",
    "type": "all",
    "client":["json","js","ts"],
    "server":["mdb","csv"]
}
参数 说明
path Excel所在目录
pre 转换表前缀
type 输出类型
client 客户端输出文件类型
server 服务器输出文件类型

命令行配置

cfg -c ./cfg.json -pre Table -p ./excel -t all -cli json|ts -ser mdb
参数 说明
c 配置文件
path Excel所在目录
pre 转换表前缀
type 输出类型
client 客户端输出文件类型
server 服务器输出文件类型

如果同时配置了文件和命令行参数,则命令行参数覆盖配置文件中的

表格配置

一般的配置可分为二种,一种是属性值,就是一个key对应一个值的;另一种就是数组性质的表格。

配置说明

配置表中表明该配置是属性哪端

  • Null : 不加入配置
  • Common: 共同配置
  • Client: 客户端配置
  • Server: 服务器配置

编译输入类型

  • all: 编译服务和客户端
  • cli: 编译客户端
  • ser: 编译服务器

输入文件类型

  • json:输出Json格式
  • js:输出js格式
  • ts:输出ts格式
  • mdb:输出Mongodb的js格式
  • csv:输出csv

数据类型说明

  • BOOL: bool类型
  • INT: int类型
  • LONG: long类型
  • FLOAT: 浮点类型
  • STRING: 字符串
  • OBJ: json数据
  • ARRAY: json数组

解析数组表

表格前四行为固定格式。
第一行标识为变量为服务器、客户端使用
第二行为变量名
第三行为变量数据类型
第四行为变量描述,不记录转后的数据中

Common Common Common Server Server Client
id type name attr rand desc
INT INT STRING OBJ ARRAY STRING
道具ID 类型 名字 固定属性 随机属性 描述
1 1 {“atk”:100} [{“weight”:80,”attr”:”atk”,”min”:10,”max”:100},{“weight”:20,”attr”:”atk”,”min”:100,”max”:500}] 这是一把好刀
2 1 {“atk”:100} [{“weight”:80,”attr”:”atk”,”min”:10,”max”:100},{“weight”:20,”attr”:”atk”,”min”:100,”max”:500}] 这是一把好剑
3 2 衣服 {“def”:100,”hp”:55} [{“weight”:50,”attr”:”def”,”min”:10,”max”:100},{“weight”:50,”attr”:”hp”,”min”:10,”max”:100}] 这是衣服

输出

客户端js

var TableItem = [{"desc":"这是一把好刀","id":1,"name":"刀","type":1},{"desc":"这是一把好剑","id":2,"name":"剑","type":1},{"desc":"这是衣服","id":3,"name":"衣服","type":2}]
modules.export = TableItem

客户端ts

export let TableItem = [{"desc":"这是一把好刀","id":1,"name":"刀","type":1},{"desc":"这是一把好剑","id":2,"name":"剑","type":1},{"desc":"这是衣服","id":3,"name":"衣服","type":2}]

客户端json

[{"desc":"这是一把好刀","id":1,"name":"刀","type":1},{"desc":"这是一把好剑","id":2,"name":"剑","type":1},{"desc":"这是衣服","id":3,"name":"衣服","type":2}]

服务器csv

id,type,name,attr,rand
1,1,刀,100,atk=100=10=80|atk=500=100=20
2,1,剑,100,atk=100=10=80|atk=500=100=20
3,2,衣服,100=55,def=100=10=50|hp=100=10=50

服务器mdb

db.getCollection("TableItem").drop();db.createCollection("TableItem");db.getCollection("TableItem").insert({id:NumberInt("1"),type:NumberInt("1"),name:"刀",attr:{atk:100},rand:[{attr:"atk",min:10,max:100,weight:80},{attr:"atk",min:100,max:500,weight:20}],_id:"1"});db.getCollection("TableItem").insert({id:NumberInt("2"),type:NumberInt("1"),name:"剑",attr:{atk:100},rand:[{weight:80,attr:"atk",min:10,max:100},{weight:20,attr:"atk",min:100,max:500}],_id:"2"});db.getCollection("TableItem").insert({type:NumberInt("2"),name:"衣服",attr:{def:100,hp:55},rand:[{weight:50,attr:"def",min:10,max:100},{min:10,max:100,weight:50,attr:"hp"}],_id:"3",id:NumberInt("3")});

解析属性表

第一行第一列为空,用来区分表格类型。
第一行为描述,为配置固定格式,不会记录转换后的数据中。
第二行开始为正式配置

变量名 数据类型 描述
Common down_url STRING https://zengwu.com.cn 下载地址
Server init_coin INT 10000 初始金币
Client default_head STRING icon_0 默认头像

输出

客户端js

var TableConst = {"default_head":"icon_0","down_url":"https://zengwu.com.cn"}
modules.export = TableConst

客户端ts

export let TableConst = {"default_head":"icon_0","down_url":"https://zengwu.com.cn"}

客户端json

{"default_head":"icon_0","down_url":"https://zengwu.com.cn"}

服务器csv

down_url,init_coin
https://zengwu.com.cn,10000

服务器mdb

db.getCollection("TableConst").drop();db.createCollection("TableConst");db.getCollection("TableConst").insert({down_url:"https://zengwu.com.cn",init_coin:NumberInt("10000")});
0%