关于游戏中的table导入的json问题

本文探讨了在游戏开发中如何处理策划制作的表导入服务端和客户端的问题。以物品表为例,详细说明了JSON格式的全局定义,包括字段的翻译、解释器的使用、模板的应用以及最终输出到服务端的.xls_itemCfg.cfg和客户端的.itemtable.lua。在客户端,JSON文件按照模板转换,形成.lua表文件;而在服务端,数据按字段顺序获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做的任务中遇到了策划做的表直接导入服务端和客户端中间的解析转换过程。

         首先以物品表中的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]等。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值