最近在做的任务中遇到了策划做的表直接导入服务端和客户端中间的解析转换过程。
首先以物品表中的item(物品表)为例定义的全局json如下
"物品表.xml": [
{
"path":"../table/format/item/item.json",
"output":[
{
"interpreter":["../table/interpreter/server.json","../table/interpreter/item/server.json"],
"template":"../table/template/item/item_template_server.json",
"outputFile":"../run_server/plugin/p27/game/ability/.cfg/xls_itemCfg.cfg",
"templateType":"new",
"saveType":"cfg"
},
{
"interpreter":["../table/interpreter/item/server.json"],
"template":"../table/template/item/drug_buff_server.json",
"outputFile":"../run_server/plugin/p27/game/ability/.cfg/xls_drugBuffCfg.cfg",
"templateType":"new",
"saveType":"cfg"
},
{
"interpreter":["../table/interpreter/item/client.json","../table/interpreter/client.json"],
"template":"../table/template/item/item_template_client_lua.json",
"outputFile":"../client/Assets/RawRes/lua/Table/itemTable.lua",
"templateType":"new",
"saveType":"cfg"
},
{
"interpreter":["../table/interpreter/item/client.json","../table/interpreter/client.json"],
"template":"../table/template/item/item_template_client_txt.json",
"outputFile":"../client/Assets/RawRes/Table/Item.txt",
"templateType":"new",
"saveType":"cfg"
}
]
},
format:取值,例如sid = $sid,意思是将表中sid的值赋值给sid
interperter:解释器,意思是讲表中字段的中文翻译成英文以及数字来显示
template:模板,意思是翻译的过程按照这个模板对table表进行翻译,显示到客户端或者服务端
ouputfile:输出文件,服务端显示为xls_itemCfg.cfg,客户端显示为itemtable.lua
templateType:模板类型,当前为".cfg"
saveType:保存类型,当前为".cfg"
先看模板类容
翻译到客户端lua文件中的 item_template_client_lua.json
<!--{$ x = it.ability.length - 1}-->
tb.ItemTable = {
<!--{@ j k = it.ability}-->
[<!--{k.tid}-->] = {tid = <!--{k.tid}-->,name = "<!--{k.name}-->",item_type = <!--{k.item_type}-->,level = <!--{k.level}-->,
show_type = "<!--{k.show_type}-->", show_name = "<!--{k.show_name}-->",quality = <!--{k.quality}-->,level_limit = <!--{k.level_limit}-->,max_count = <!--{k.max_count}-->,
icon = "<!--{k.icon}-->",could_sell = <!--{k.could_sell}-->,price = <!--{k.price||0}-->,effect = <!--{k.effect||0}-->,value = <!--{k.value||0}-->,
cd = <!--{k.cd||0}-->,cd_group = <!--{k.cd_group||0}-->,priority = <!--{k.priority}-->,use_effect = <!--{? k.use_effect}-->"<!--{k.use_effect}-->"<!--{?}--><!--{? k.use_effect === undefined}-->""<!--{?}-->,
describe = <!--{? k.describe}-->"<!--{k.describe}-->"<!--{?}--><!--{? k.describe === undefined}-->""<!--{?}-->
}<!--{? j < x}-->,<!--{?}-->
<!--{@}-->
}
tb.GenIndexTable("ItemTable", "name")
item_template_client_lua.json将xml文件表格按照这个模板进行翻译,通过format的翻译,以及interpreter的解析,在客户端形成.lua的表文件。
item_template_server.json
<!--{$ x = it.ability.length - 1}-->
% 物品表 数据
{[gateway], zm_sample,
[ sample,
[
<!--{@ j k = it.ability}-->
{<!--{k.tid}-->,[[{id,'$var',0},{count,'$var',1},{tid,<!--{k.tid}-->},{name,"<!--{k.name}-->"},
{show_name,"<!--{k.show_name}-->"},
{level_limit,<!--{k.level_limit}-->},{max_count,<!--{k.max_count}-->},{could_sell, <!--{k.could_sell}-->},{price,<!--{k.price||0}-->},
<!--{? k.effect === "recover_hp"}-->{mod, prop_attr}, {attr_type, hp},{buffer_sid, <!--{k.bufferSid}-->},<!--{?}-->
<!--{? k.effect === "transmit"}-->{mod, prop_transmit_scroll},<!--{?}-->
<!--{? k.effect === "openbaoxiang"}-->{mod, prop_open_baoxiang},<!--{?}-->
{value,<!--{k.value||0}-->},
<!--{? k.cd}-->{cd,<!--{k.cd*1000}-->},{cd_group,<!--{k.cd_group||none}-->},<!--{?}-->{use_effect,<!--{? k.use_effect}-->"<!--{k.use_effect}-->"<!--{?}--><!--{? k.use_effect === undefined}-->""<!--{?}-->},
{describe,<!--{? k.describe}-->"<!--{k.describe}-->"<!--{?}--><!--{? k.describe === undefined}-->""<!--{?}-->},{profession_limit,<!--{(k.profession_limit||0)}-->},{position_limit,<!--{(k.position_limit||0)}-->},
{quality, <!--{k.quality}-->}
]]}<!--{? j < x}-->,<!--{?}-->
<!--{@}-->
], keypos1
]
}.
这个是在服务端形成的.cfg的表格。
在通过客户端进行获取的时候,要按着字段的a,b,c的先后顺序获取,依次为tem[1],tem[2],tem[3]等。