游戏配置转换工具

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

  此工具是使用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"]
}
参数说明
pathExcel所在目录
pre转换表前缀
type输出类型
client客户端输出文件类型
server服务器输出文件类型

命令行配置

cfg -c ./cfg.json -pre Table -p ./excel -t all -cli json|ts -ser mdb
参数说明
c配置文件
pathExcel所在目录
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数组

解析数组表

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

CommonCommonCommonServerServerClient
idtypenameattrranddesc
INTINTSTRINGOBJARRAYSTRING
道具ID类型名字固定属性随机属性描述
11{"atk":100}[{"weight":80,"attr":"atk","min":10,"max":100},{"weight":20,"attr":"atk","min":100,"max":500}]这是一把好刀
21{"atk":100}[{"weight":80,"attr":"atk","min":10,"max":100},{"weight":20,"attr":"atk","min":100,"max":500}]这是一把好剑
32衣服{"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")});

解析属性表

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

变量名数据类型描述
Commondown_urlSTRINGhttps://zengwu.com.cn下载地址
Serverinit_coinINT10000初始金币
Clientdefault_headSTRINGicon_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")});