跳到主要内容

etc

简介

此pkg用于导入各种类型的配置表

用途:

  • 此pkg用于导入各种类型的配置表
  • 支持 json, excel, toml

默认设置:

{
// 配置文件生成.dat的同时是否需要生成.lua(为了兼容,默认需要)
"transform_to_lua" : true,
}

.dat的更新机制:

  • dat文件的修改时间早于配置文件的修改时间时。
  • xlsx 依赖文件的修改时间晚于dat文件的时间时。
  • 二进制文件发生改变 无法正确读取到dat文件时,会重写文件。

组件接口

etc.gs

函数原型函数作用
void init_settings(map init_settings)初始化pkg.etc的设置项
mixed get(string key)获取pkg.etc的设置项
void set(string key, mixed value)更新pkg.etc的设置项
void ignore_table_dbase_merge(string table)跳过某个表格导入时对 dbase 字段的合并
void set_import_extension_func(string file_extension, function func)为指定后缀的文件设置一个自定义的导入函数
void set_import_filename_func(string file_name, function func)为指定文件名的文件设置一个自定义的导入函数
void set_custom_parser(string parser_name, function func)设置自定义的字段值解释器
void set_map_format_converter(string custom_name, function func)设置map类型自定义的格式转化处理
void on_table_reload(array tables, function func, string name = nil)响应一组配置表的重新加载的事件,当对应的任一配置表发生重新加载时,执行响应函数
string on_path_import(string path, function func, string import_id = nil)主动载入指定目录里的配置表并且响应任一表载入处理

EtcClass.gs

etc的一些工具类

函数原型函数作用
class_map new_header(map header_dict)根据xlsx配置表头部数据创建一个XlsxHeader实例
class_map new_importer_by_filename(string filename, mixed load_info = nil)根据文件名称创建一个配置表导入器实例
class_map new_importer(string type)根据配置表导入器名称创建一个配置表导入器实例
bool contains_importer(string type)判断是否包含指定名称的导入器
array get_importer_list()获取所有导入器列表

EtcD.gs

游戏配置数据管理,只提供简单的加载方法,不涉及游戏逻辑。

函数原型函数作用
mixed load_xlsx(string file_name, bool err_when_not_exist = true)加载xlsx(已废弃)
mixed import_cfg(string file_name, bool err_when_not_exist = true, mixed load_info = nil)加载xlsx
mixed load_xlsx_and_merge_dbase(string file_name, bool err_when_not_exist = true)加载xlsx然后合并dbase
mixed eval(mixed field)评估一个字段的值,如果需要动态运行获取,要动态执行一下
void add_into_reload_xlsx_dict(map reload_dict, int handle_id)将xlsx文件列表和对象的id绑定,以便重新加载xlsx文件时能通知对象更新相关配置数据
void remove_from_reload_xlsx_dict(int handle_id)将指定对象相关的xlsx文件列表解绑,重新加载xlsx文件时将不通知改对象
void reload_all_xlsx()重新加载和任一对象关联的所有xlsx文件
void reload_xlsx(string xlsx_file)重新加载指定的xlsx文件
void reload_xlsx_list(array xlsx_list)重新加载指定的xlsx文件列表
map get_reload_xlsx_dict(int handle_id)获取和指定对象绑定的xlsx文件列表

EtcExtraD.gs

一些额外的操作

  1. 同一个xlsx多个sheet需要处理(EtcHelperD中只处理单个sheet)
  2. game层invoke
函数原型函数作用
map do_extra_op(string file_name, map all_sheets)一些约定的额外的操作
mixed invoke_op(string file_name, mixed all_sheets)一些约定的额外的操作

EtcHelperD.gs

生成配置文件简单处理后的二进制格式的文件

函数原型函数作用
void transform_all_file()给定目录下的所有文件生成类似xxx.dat格式的文件
bool is_xlsx_file(string file_path)判断是否是一个xlsx文件(xlsx文件的处理不同于json和toml)
bool is_dat_file(string file_path)判断是否是一个dat文件
mixed get_single_file(string file_name, mixed load_info = nil)获取配置文件中有效信息
mixed restore_xlsx_value(mixed all_data, mixed load_info = nil)根据load_info还原xlsx文件的数据
buffer import_json_to_dat(ImporterBase importer)把json转化为buffer
buffer import_json5_to_dat(ImporterBase importer)把json5转化为buffer
buffer import_toml_to_dat(ImporterBase importer)把toml转化为buffer
mixed import_xlsx_to_dat(ImporterBase importer)简单解码并生成buffer

FXlsxLoader.gs

辅助加载xlsx文件的组件 使用步骤:

  1. 包含本组件
  2. 重载 FXlsxLoader.init_vars_by_xlsx
  3. 通过load_xlsx_config加载xlsx,处理过程: a. 加载xlsx获得原始数据xlsx_dict b. 通过parse_func处理原始数据xlsx_dict获得格式化数据result_dict c. 使用格式化数据result_dict初始对象的相关成员变量(需要override init_vars_by_xlsx)
函数原型函数作用
map load_xlsx_config(array xlsx_list, function parse_func)加载xlsx文件并初始化相关成员变量
void reload_xlsx_config(mixed list_or_dict)重新加载xlsx文件并初始化相关成员变量

ImportD.gs

负责数据导入配置及自定义类型的解析

Updated by huangw2 2016/12/20 1:增加 json 格式 2:支持 excel 格式 3:调整二进制方案,将动态编译变成静态打包,导入时先读取文本文件再读取二进制文件

函数原型函数作用
mixed import_file(string file_name, string requester = "", mixed load_info = nil)将etc数据导入,如果导入失败则返回 nil
void register_modules(map module_names)登记外部可用的模块名,映射到模块文件名

ImportEtcD.gs

缓存ETC下文件名到完整路径的映射,方便ImportD使用

函数原型函数作用
array get_etc_dirs()获取etc目录列表
void add_ignore_etc_dir(string json_path)添加需要的忽略目录(这里实际上不是添加而是替换当前的)
void refresh_exclue_list()刷新忽略文件列表(文件不存在时不生效)
void import_etc_files(string path)添加配置文件
void remove_etc_files(string path)移除配置文件
void refresh_etc_files()刷新所有配置文件
bool etc_file_exists(string file_name)ETC目录下是否存在某个文件
mixed get_file_path(string file_name)获取文件路径
map scan_etc_files()扫描的所有文件(如果定义了time字段,则读取的时间被此字段所覆盖)

LocalizationD.gs

本地化文件

函数原型函数作用
void init(map para)初始化本地化语言
void set_language(string language)设置本地化语言
void load(string filename)加载本地化文件
string find_text(string id)获取本地化字段的值

LuaAdapterD.gs

负责客户端配置信息的生成,生成lua配置文件

函数原型函数作用
void transform_all_dat_file(string path = "OUTPUT_PATH")生成所有配置表的lua文件
void transform_single_file(string file_name, string path = "OUTPUT_PATH")生成单个dat文件对应的lua文件
void dfs(mixed data, string depth, string path)按照正常的书写格式生成lua文件

EtcSettings

etc配置属性词典

成员变量

变量名类型初始值须初始化描述
extra_scan_etc_funcfunctionnil可选自定义的额外的配置表获取方法
table_loader_dictmapnil可选自定义的加载配置表的方法
ignore_dbase_merge_listarraynil可选忽略导入时合并dbase字段的表格列表
transform_to_luabooltrue可选是否生成lua文件(提供给需要.lua文件的客户端使用)
transform_to_datbooltrue可选是否生成dat文件(.dat里是已处理的数据)
import_extensionmapnil可选指定后缀的文件对应的导入函数词典
key: 文件后缀
value: 自定义的导入函数
import_filenamemapnil可选指定文件对应的导入函数词典
key: 文件名
value: 自定义的导入函数
custom_parsermapnil可选自定义的字段值解释器
key: 字段名
value: 自定义的字段值解释器
map_format_convertermapnil可选map类型自定义的格式转化处理
import_etc_dirmapnil可选自定义的文件导入路径
ignore_dif_config_pathstringnil可选自定义的文件忽略列表配置文件
scan_etc_dfs_depthmixednil可选扫描深度
strict_modeboolfalse可选严格模式
此模式下:
1.配置文件只有.dat文件时,配置表不载入
ignore_xlsx_even_dat_existboolfalse可选xlsx文件存在dat文件时,忽略xlsx文件

成员方法

函数原型函数作用

NormalEtcTable

继承自 EtcTable

普通配置表

成员变量

变量名类型初始值须初始化描述
datamixednil可选配置表数据

成员方法

函数原型函数作用
NormalEtcTable new_by_table_name(string table, bool do_not_merge_dbase)根据配置表名称创建配置表实例
NormalEtcTable new_by_file_name(string filename, bool do_not_merge_dbase)根据配置文件名称创建配置表实例
void reload()重新加载配置表
mixed get_data()获取所有数据
mixed get_value(mixed key_or_index)获取指定键或索引的值
string get_file_path()获取文件目录
bool is_dirty()配置表是否变更

EtcTable

配置表基础类

成员变量

变量名类型初始值须初始化描述
tablestringnil可选配置表名称
extstringnil可选配置表后缀
filenamestringnil可选配置文件名称
do_not_merge_dbaseboolfalse可选导入时不合并'dbase'数据

成员方法

函数原型函数作用
mixed get_data()获取所有数据
mixed get_value(mixed key_or_index)获取指定键或索引的值
string get_file_path()获取文件路径
bool is_dirty()判断表是否变更

ImporterBase

配置表数据导入器的基础类

成员变量

变量名类型初始值须初始化描述
filenamestringnil可选文件名称
load_infomixednil可选辅助的导入信息
dependent_filesarraynil可选依赖文件列表
metaEtcMetaFilenil可选元文件数据

成员方法

函数原型函数作用
EtcMetaFile assure_meta()确保元文件数据存在
mixed import_raw_data()从源文件导入数据(直接读取源文件)
mixed import_dat_data()从.dat文件导入数据(直接读取已经生成.dat文件)
mixed import_data()自动根据设置决定从源文件或者.dat文件导入数据
void bake(bool gen_dat = true)烘培数据,更新元数据文件,根据设置生成dat文件/lua文件
bool is_raw_out_of_date()判断原始文件是否过期(包括依赖文件)
bool is_dat_out_of_date()判断.dat文件是否过期(仅判断.dat文件)
bool is_out_of_date()判断指定名称的表是否过期(包括源文件和.dat文件任意一方过期)
mixed main()主函数,解析并返回解析结果
buffer load()载入配置表数据buffer
mixed restore(buffer data)还原配置表数据

Json5Importer

继承自 ImporterBase

json5配置文件导入器

成员变量

变量名类型初始值须初始化描述

成员方法

函数原型函数作用
buffer load()载入配置表数据buffer

JsonImporter

继承自 ImporterBase

json配置文件导入器

成员变量

变量名类型初始值须初始化描述

成员方法

函数原型函数作用
buffer load()载入配置表数据buffer

XlsxImporter

继承自 ImporterBase

xlsx配置文件导入器

成员变量

变量名类型初始值须初始化描述

成员方法

函数原型函数作用
buffer load()载入配置表数据buffer

TomlImporter

继承自 ImporterBase

toml配置文件导入器

成员变量

变量名类型初始值须初始化描述

成员方法

函数原型函数作用
buffer load()载入配置表数据buffer

样例

import pkg.etc;

// 设置导入的配置表目录(默认不需要设置)
etc.set("import_etc_dir", [
__DIR__ "etc/"
]);

// 不需要生成.lua文件
etc.set("transform_to_lua", false);

// 需要生成.dat文件
etc.set("transform_to_dat", true);

// 非严格模式
etc.set("strict_mode", false);

// xlsx文件存在dat文件时,忽略xlsx文件
etc.set("ignore_xlsx_even_dat_exist", true);

// 自定义字段解析器 - f
etc.set_custom_parser("f", (mixed a, mixed b, mixed c){
printf("ffff");
return a + b + c;
});

// 自定义字段解析器 - read_toml
etc.set_custom_parser("read_toml", (string file_name){
printf("read_toml");
return EtcD.import_cfg(file_name);
});

// 加载并响应
etc.on_table_import("role", (map table_data) {
printf("role: %O\n", table_data);
});

// 加载所有表
etc.reload_all_tables(true, true);